From 6d8fae6a0d89fa67b97d631a4d7741b0ba7cd3e1 Mon Sep 17 00:00:00 2001 From: perak Date: Mon, 13 Feb 2023 22:21:07 +0100 Subject: [PATCH] Version 0.9.199 --- dist/quantum-circuit.js | 44 +++++++++++++++++++++++++-------- dist/quantum-circuit.min.js | 2 +- dist/quantum-circuit.min.js.map | 2 +- package.json | 2 +- 4 files changed, 37 insertions(+), 13 deletions(-) diff --git a/dist/quantum-circuit.js b/dist/quantum-circuit.js index 418db31..7d1d749 100644 --- a/dist/quantum-circuit.js +++ b/dist/quantum-circuit.js @@ -6252,12 +6252,12 @@ QuantumCircuit.prototype.matrixHasComplexElement = function(M) { for(var c = 0; c < row.length; c++) { var cell = row[c]; - if(cell instanceof math.Complex) { + if(cell instanceof math.Complex || ((typeof cell == "object") && ((cell.mathjs && cell.mathjs == "Complex") || (cell.type && cell.type == "Complex")))) { return true; } } } else { - if(row instanceof math.Complex) { + if(row instanceof math.Complex || ((typeof row == "object") && ((row.mathjs && row.mathjs == "Complex") || (row.type && row.type == "Complex")))) { return true; } } @@ -6735,6 +6735,7 @@ QuantumCircuit.prototype.isEmptyPlace = function(col, wires, usingCregs) { for(var wire = minWire; wire <= maxWire; wire++) { if(!this.isEmptyCell(col, wire)) { allEmpty = false; + break; } } @@ -6759,6 +6760,7 @@ QuantumCircuit.prototype.lastNonEmptyPlace = function(wires, usingCregs) { for(var wire = minWire; wire <= maxWire; wire++) { if(!this.isEmptyCell(col, wire)) { allEmpty = false; + break; } } } @@ -7436,8 +7438,8 @@ QuantumCircuit.prototype.chanceMap = function() { }; -function binStr(i, len) { - var bin = i.toString(2); +function binStr(n, len) { + var bin = n.toString(2); while(bin.length < len) { bin = "0" + bin; } @@ -7445,6 +7447,11 @@ function binStr(i, len) { } +function reverseBitwise(n, len) { + return parseInt(binStr(n, len).split("").reverse().join(""), 2); +} + + QuantumCircuit.prototype.resetQubit = function(wire, value) { var U = [ [0, 0], @@ -10770,6 +10777,7 @@ QuantumCircuit.prototype.exportToSVG = function(options) { var centerX = gateX + (options.cellWidth / 2); var paramsStr = ""; + var paramsCount = 0; for(var paramName in gate.options.params) { if(paramsStr) { paramsStr += ", "; @@ -10785,6 +10793,11 @@ QuantumCircuit.prototype.exportToSVG = function(options) { } paramsStr += paramVal; + paramsCount++; + } + + if(paramsStr.length > 26) { + paramsStr = "(" + paramsCount + " params)"; } svg += "" + paramsStr + ""; } @@ -11011,7 +11024,7 @@ QuantumCircuit.prototype.exportToSVG = function(options) { if(options.customGate) { initSymbol = qubitLetter(wire, numRows); } - svg += "|" + initSymbol + "⟩"; + svg += "|" + initSymbol + "⟩"; svg += ""; svg += "q" + wire + ""; } @@ -15751,7 +15764,7 @@ QuantumCircuit.prototype.continue = function() { }); }; -QuantumCircuit.prototype.stateAsArray = function(onlyPossible, skipItems, blockSize) { +QuantumCircuit.prototype.stateAsArray = function(onlyPossible, skipItems, blockSize, reverseBits) { var state = []; var numAmplitudes = this.numAmplitudes(); @@ -15761,7 +15774,13 @@ QuantumCircuit.prototype.stateAsArray = function(onlyPossible, skipItems, blockS var count = 0; for(var i = 0; i < numAmplitudes; i++) { - var amplitude = math.round(this.state[i] || math.complex(0, 0), 14); + var ampIndex = i; + if(reverseBits) { + ampIndex = reverseBitwise(i, this.numQubits); + } + + var amplitude = math.round(this.state[ampIndex] || math.complex(0, 0), 14); + if(!onlyPossible || (amplitude.re || amplitude.im)) { if(count >= skipItems) { var indexBinStr = i.toString(2); @@ -15800,7 +15819,7 @@ QuantumCircuit.prototype.stateAsArray = function(onlyPossible, skipItems, blockS return state; }; -QuantumCircuit.prototype.stateAsSimpleArray = function() { +QuantumCircuit.prototype.stateAsSimpleArray = function(reverseBits) { var numAmplitudes = this.numAmplitudes(); if(!this.state) { @@ -15809,7 +15828,12 @@ QuantumCircuit.prototype.stateAsSimpleArray = function() { var state = []; for(var i = 0; i < numAmplitudes; i++) { - state.push(math.round(this.state[i] || math.complex(0, 0), 14)); + var ampIndex = i; + if(reverseBits) { + ampIndex = reverseBitwise(i, this.numQubits); + } + + state.push(math.round(this.state[ampIndex] || math.complex(0, 0), 14)); } return state; }; @@ -112267,4 +112291,4 @@ module.exports.TinyEmitter = E; },{}]},{},[5])(5) }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJsaWIvcWFzbV9pbXBvcnQvUUFTTUltcG9ydC5qcyIsImxpYi9xYXNtX2ltcG9ydC9RQVNNTGV4ZXIuanMiLCJsaWIvcWFzbV9pbXBvcnQvUUFTTUxpc3RlbmVyLmpzIiwibGliL3Fhc21faW1wb3J0L1FBU01QYXJzZXIuanMiLCJsaWIvcXVhbnR1bS1jaXJjdWl0LmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9CdWZmZXJlZFRva2VuU3RyZWFtLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9DaGFyU3RyZWFtcy5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvQ29tbW9uVG9rZW5GYWN0b3J5LmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9Db21tb25Ub2tlblN0cmVhbS5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvRmlsZVN0cmVhbS5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvSW5wdXRTdHJlYW0uanMiLCJub2RlX21vZHVsZXMvYW50bHI0L0ludGVydmFsU2V0LmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9MTDFBbmFseXplci5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvTGV4ZXIuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L1BhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvUGFyc2VyUnVsZUNvbnRleHQuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L1ByZWRpY3Rpb25Db250ZXh0LmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9SZWNvZ25pemVyLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9SdWxlQ29udGV4dC5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvVG9rZW4uanMiLCJub2RlX21vZHVsZXMvYW50bHI0L1V0aWxzLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vQVROLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vQVROQ29uZmlnLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vQVROQ29uZmlnU2V0LmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vQVRORGVzZXJpYWxpemF0aW9uT3B0aW9ucy5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvYXRuL0FUTkRlc2VyaWFsaXplci5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvYXRuL0FUTlNpbXVsYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvYXRuL0FUTlN0YXRlLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vQVROVHlwZS5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvYXRuL0xleGVyQVROU2ltdWxhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vTGV4ZXJBY3Rpb24uanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2F0bi9MZXhlckFjdGlvbkV4ZWN1dG9yLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vUGFyc2VyQVROU2ltdWxhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vUHJlZGljdGlvbk1vZGUuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2F0bi9TZW1hbnRpY0NvbnRleHQuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2F0bi9UcmFuc2l0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vaW5kZXguanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2RmYS9ERkEuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2RmYS9ERkFTZXJpYWxpemVyLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9kZmEvREZBU3RhdGUuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2RmYS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvZXJyb3IvRGlhZ25vc3RpY0Vycm9yTGlzdGVuZXIuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2Vycm9yL0Vycm9yTGlzdGVuZXIuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2Vycm9yL0Vycm9yU3RyYXRlZ3kuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2Vycm9yL0Vycm9ycy5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvZXJyb3IvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9wb2x5ZmlsbHMvY29kZXBvaW50YXQuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L3BvbHlmaWxscy9mcm9tY29kZXBvaW50LmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC90cmVlL1RyZWUuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L3RyZWUvVHJlZXMuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L3RyZWUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9saWIvX2VtcHR5LmpzIiwibm9kZV9tb2R1bGVzL2NvbXBsZXguanMvY29tcGxleC5qcyIsIm5vZGVfbW9kdWxlcy9kZWNpbWFsLmpzL2RlY2ltYWwuanMiLCJub2RlX21vZHVsZXMvZXNjYXBlLWxhdGV4L2Rpc3QvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZnJhY3Rpb24uanMvZnJhY3Rpb24uanMiLCJub2RlX21vZHVsZXMvamF2YXNjcmlwdC1uYXR1cmFsLXNvcnQvbmF0dXJhbFNvcnQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9jb25zdGFudHMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9jb3JlL2NvbmZpZy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2NvcmUvY3JlYXRlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvY29yZS9mdW5jdGlvbi9jb25maWcuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9jb3JlL2Z1bmN0aW9uL2RlcHJlY2F0ZWRJbXBvcnQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9jb3JlL2Z1bmN0aW9uL2ltcG9ydC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2NvcmUvZnVuY3Rpb24vdHlwZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9hbGxGYWN0b3JpZXNBbnkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9jb25maWdSZWFkb25seS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQWJzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBY2Nlc3Nvck5vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Fjb3MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Fjb3NoLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBY290LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBY290aC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQWNzYy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQWNzY2guZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FkZC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBbmQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FwcGx5LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBcHBseVRyYW5zZm9ybS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQXJnLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBcnJheU5vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FzZWMuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FzZWNoLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBc2luLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBc2luaC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQXNzaWdubWVudE5vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0F0YW4uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0F0YW4yLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBdGFuaC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQXRvbWljTWFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQXZvZ2Fkcm8uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0JlbGxOdW1iZXJzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQmlnbnVtYmVyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNCaXRBbmQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0JpdE5vdC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQml0T3IuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0JpdFhvci5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQmxvY2tOb2RlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNCb2hyTWFnbmV0b24uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0JvaHJSYWRpdXMuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0JvbHR6bWFubi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQm9vbGVhbi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ2F0YWxhbi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ2JydC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ2VpbC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ2hhaW4uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NoYWluQ2xhc3MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NsYXNzaWNhbEVsZWN0cm9uUmFkaXVzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDbG9uZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29sdW1uLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb2x1bW5UcmFuc2Zvcm0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbWJpbmF0aW9ucy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29tYmluYXRpb25zV2l0aFJlcC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29tcGFyZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbXBhcmVUZXh0LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb21waWxlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb21wbGV4LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbXBvc2l0aW9uLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb25jYXQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbmNhdFRyYW5zZm9ybS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29uZGl0aW9uYWxOb2RlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb25kdWN0YW5jZVF1YW50dW0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbmouZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbnN0YW50Tm9kZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29zLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb3NoLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb3QuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvdGguZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvdWxvbWIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NyZWF0ZVVuaXQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Nyb3NzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDc2MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NzY2guZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0N0cmFuc3Bvc2UuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0N1YmUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RlZXBFcXVhbC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRGVwcmVjYXRlZEV2YWwuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RlcHJlY2F0ZWRUeXBlb2YuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RlcHJlY2F0ZWRWYXIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Rlcml2YXRpdmUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RldC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRGV1dGVyb25NYXNzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNEaWFnLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNEaXN0YW5jZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRGl2aWRlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RvdC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRG90RGl2aWRlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNEb3RNdWx0aXBseS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRG90UG93LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNFLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNFZmltb3ZGYWN0b3IuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VpZ3MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VsZWN0cmljQ29uc3RhbnQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VsZWN0cm9uTWFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRWxlbWVudGFyeUNoYXJnZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRXF1YWwuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNFcXVhbFRleHQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VyZi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRXZhbHVhdGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0V4cC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRXhwbS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRXhwbTEuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0V5ZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmFjdG9yaWFsLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGYWxzZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmFyYWRheS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmVybWlDb3VwbGluZy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmlib25hY2NpSGVhcENsYXNzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGaWx0ZXIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZpbHRlclRyYW5zZm9ybS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmluZVN0cnVjdHVyZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmlyc3RSYWRpYXRpb24uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZpeC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmxhdHRlbi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmxvb3IuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZvckVhY2guZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZvckVhY2hUcmFuc2Zvcm0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Zvcm1hdC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRnJhY3Rpb24uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Z1bmN0aW9uQXNzaWdubWVudE5vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Z1bmN0aW9uTm9kZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzR2FtbWEuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0dhc0NvbnN0YW50LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNHY2QuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0dldE1hdHJpeERhdGFUeXBlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNHcmF2aXRhdGlvbkNvbnN0YW50LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNHcmF2aXR5LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNIYXJ0cmVlRW5lcmd5LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNIYXNOdW1lcmljVmFsdWUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0hlbHAuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0hlbHBDbGFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSHlwb3QuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0kuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0lkZW50aXR5LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJbS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSW1tdXRhYmxlRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSW5kZXguZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0luZGV4Tm9kZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSW5kZXhUcmFuc2Zvcm0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0luZmluaXR5LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJbnRlcnNlY3QuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ludi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSXNJbnRlZ2VyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJc05hTi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSXNOZWdhdGl2ZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSXNOdW1lcmljLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJc1Bvc2l0aXZlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJc1ByaW1lLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJc1plcm8uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0tsZGl2ZXJnZW5jZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzS2xpdHppbmcuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0tyb24uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xOMTAuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xOMi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTE9HMTBFLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMT0cyRS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTGFyZ2VyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMYXJnZXJFcS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTGNtLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMZWZ0U2hpZnQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xvZy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTG9nMTAuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xvZzFwLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMb2cyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMb3NjaG1pZHQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xzb2x2ZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTHVwLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMdXNvbHZlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNYWQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01hZ25ldGljQ29uc3RhbnQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01hZ25ldGljRmx1eFF1YW50dW0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01hcC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTWFwVHJhbnNmb3JtLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01hdHJpeENsYXNzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNYXguZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01heFRyYW5zZm9ybS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTWVhbi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTWVhblRyYW5zZm9ybS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTWVkaWFuLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNaW4uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01pblRyYW5zZm9ybS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTW9kLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNb2RlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNb2xhck1hc3MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01vbGFyTWFzc0MxMi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTW9sYXJQbGFuY2tDb25zdGFudC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTW9sYXJWb2x1bWUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc011bHRpbm9taWFsLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNdWx0aXBseS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc05hTi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTmV1dHJvbk1hc3MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc05vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc05vcm0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc05vdC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTnRoUm9vdC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTnRoUm9vdHMuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc051Y2xlYXJNYWduZXRvbi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTnVsbC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTnVtYmVyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNOdW1lcmljLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNPYmplY3ROb2RlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNPbmVzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNPcGVyYXRvck5vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc09yLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQYXJlbnRoZXNpc05vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1BhcnNlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQYXJzZXIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1BhcnNlckNsYXNzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQYXJ0aXRpb25TZWxlY3QuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1Blcm11dGF0aW9ucy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGhpLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQaS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGlja1JhbmRvbS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGxhbmNrQ2hhcmdlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQbGFuY2tDb25zdGFudC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGxhbmNrTGVuZ3RoLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQbGFuY2tNYXNzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQbGFuY2tUZW1wZXJhdHVyZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGxhbmNrVGltZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUG93LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQcmludC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUHJvZC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUHJvdG9uTWFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUXIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1F1YW50aWxlU2VxLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNRdWFudHVtT2ZDaXJjdWxhdGlvbi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmFuZG9tLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYW5kb21JbnQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1JhbmdlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYW5nZUNsYXNzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYW5nZU5vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1JhbmdlVHJhbnNmb3JtLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYXRpb25hbGl6ZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1JlZHVjZWRQbGFuY2tDb25zdGFudC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmVsYXRpb25hbE5vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1JlcGxhY2VyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSZXNoYXBlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSZXNpemUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1Jlc3VsdFNldC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmV2aXZlci5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmlnaHRBcml0aFNoaWZ0LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSaWdodExvZ1NoaWZ0LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSb3VuZC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUm93LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSb3dUcmFuc2Zvcm0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1J5ZGJlcmcuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NRUlQxXzIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NRUlQyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTYWNrdXJUZXRyb2RlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZWMuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NlY2guZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NlY29uZFJhZGlhdGlvbi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0Q2FydGVzaWFuLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZXREaWZmZXJlbmNlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZXREaXN0aW5jdC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0SW50ZXJzZWN0LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZXRJc1N1YnNldC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0TXVsdGlwbGljaXR5LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZXRQb3dlcnNldC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0U2l6ZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0U3ltRGlmZmVyZW5jZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0VW5pb24uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NpZ24uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NpbXBsaWZ5LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTaW4uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NpbmguZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NpemUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NsdS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU21hbGxlci5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU21hbGxlckVxLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTb3J0LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTcGFDbGFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3BhcnNlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3BlZWRPZkxpZ2h0LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTcGxpdFVuaXQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NxcnQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NxcnRtLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTcXVhcmUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NxdWVlemUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N0ZC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3RkVHJhbnNmb3JtLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTdGVmYW5Cb2x0em1hbm4uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N0aXJsaW5nUzIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N0cmluZy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3Vic2V0LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTdWJzZXRUcmFuc2Zvcm0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N1YnRyYWN0LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTdW0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N1bVRyYW5zZm9ybS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3ltYm9sTm9kZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVGFuLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUYW5oLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUYXUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1Rob21zb25Dcm9zc1NlY3Rpb24uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1RvLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUcmFjZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVHJhbnNwb3NlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUcnVlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUeXBlT2YuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNVbmFyeVBsdXMuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1VuZXF1YWwuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVW5pdEZ1bmN0aW9uLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNVcHBlcmNhc2VFLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNVcHBlcmNhc2VQaS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVXNvbHZlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNWYWN1dW1JbXBlZGFuY2UuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1ZhcmlhbmNlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNWYXJpYW5jZVRyYW5zZm9ybS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVmVyc2lvbi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzV2Vha01peGluZ0FuZ2xlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNXaWVuRGlzcGxhY2VtZW50LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNYZ2NkLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNYb3IuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1plcm9zLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcHJlY2F0ZWRBbnkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9pbXB1cmVGdW5jdGlvbnNBbnkuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvbWFpbkFueS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L3B1cmVGdW5jdGlvbnNBbnkuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvdHlwZUNoZWNrcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Vycm9yL0FyZ3VtZW50c0Vycm9yLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXJyb3IvRGltZW5zaW9uRXJyb3IuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lcnJvci9JbmRleEVycm9yLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9IZWxwLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdGFudHMvSW5maW5pdHkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdGFudHMvTE4xMC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0YW50cy9MTjIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdGFudHMvTE9HMTBFLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RhbnRzL0xPRzJFLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RhbnRzL05hTi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0YW50cy9TUVJUMV8yLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RhbnRzL1NRUlQyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RhbnRzL2UuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdGFudHMvZmFsc2UuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdGFudHMvaS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0YW50cy9udWxsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RhbnRzL3BoaS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0YW50cy9waS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0YW50cy90YXUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdGFudHMvdHJ1ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0YW50cy92ZXJzaW9uLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RydWN0aW9uL2JpZ251bWJlci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0cnVjdGlvbi9ib29sZWFuLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RydWN0aW9uL2NvbXBsZXguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdHJ1Y3Rpb24vY3JlYXRlVW5pdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0cnVjdGlvbi9mcmFjdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0cnVjdGlvbi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0cnVjdGlvbi9tYXRyaXguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdHJ1Y3Rpb24vbnVtYmVyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RydWN0aW9uL3NwYXJzZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0cnVjdGlvbi9zcGxpdFVuaXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdHJ1Y3Rpb24vc3RyaW5nLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RydWN0aW9uL3VuaXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb3JlL2NvbmZpZy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvcmUvaW1wb3J0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29yZS90eXBlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2VtYmVkZGVkRG9jcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FsZ2VicmEvZGVyaXZhdGl2ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FsZ2VicmEvbHNvbHZlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYWxnZWJyYS9sdXAuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hbGdlYnJhL2x1c29sdmUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hbGdlYnJhL3FyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYWxnZWJyYS9yYXRpb25hbGl6ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FsZ2VicmEvc2ltcGxpZnkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hbGdlYnJhL3NsdS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FsZ2VicmEvdXNvbHZlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9hYnMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL2FkZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvY2JydC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvY2VpbC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvY3ViZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvZGl2aWRlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9kb3REaXZpZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL2RvdE11bHRpcGx5LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9kb3RQb3cuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL2V4cC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvZXhwbS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvZXhwbTEuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL2ZpeC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvZmxvb3IuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL2djZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvaHlwb3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL2xjbS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvbG9nLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9sb2cxMC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvbG9nMXAuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL2xvZzIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL21vZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvbXVsdGlwbHkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL25vcm0uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL250aFJvb3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL250aFJvb3RzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9wb3cuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL3JvdW5kLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9zaWduLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9zcXJ0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9zcXJ0bS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvc3F1YXJlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9zdWJ0cmFjdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvdW5hcnlNaW51cy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvdW5hcnlQbHVzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy94Z2NkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYml0d2lzZS9iaXRBbmQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9iaXR3aXNlL2JpdE5vdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2JpdHdpc2UvYml0T3IuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9iaXR3aXNlL2JpdFhvci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2JpdHdpc2UvbGVmdFNoaWZ0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYml0d2lzZS9yaWdodEFyaXRoU2hpZnQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9iaXR3aXNlL3JpZ2h0TG9nU2hpZnQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9jb21iaW5hdG9yaWNzL2JlbGxOdW1iZXJzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vY29tYmluYXRvcmljcy9jYXRhbGFuLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vY29tYmluYXRvcmljcy9jb21wb3NpdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2NvbWJpbmF0b3JpY3Mvc3RpcmxpbmdTMi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2NvbXBsZXgvYXJnLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vY29tcGxleC9jb25qLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vY29tcGxleC9pbS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2NvbXBsZXgvcmUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9leHByZXNzaW9uL2V2YWx1YXRlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vZXhwcmVzc2lvbi9oZWxwLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vZ2VvbWV0cnkvZGlzdGFuY2UuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9nZW9tZXRyeS9pbnRlcnNlY3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9sb2dpY2FsL2FuZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2xvZ2ljYWwvbm90LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbG9naWNhbC9vci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2xvZ2ljYWwveG9yLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L2NvbHVtbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9jb25jYXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvY3Jvc3MuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvY3RyYW5zcG9zZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9kZXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvZGlhZy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9kb3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvZWlncy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9maWx0ZXIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvZmxhdHRlbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9mb3JFYWNoLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L2dldE1hdHJpeERhdGFUeXBlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L2lkZW50aXR5LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L2ludi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9rcm9uLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L21hcC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9vbmVzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L3BhcnRpdGlvblNlbGVjdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9yYW5nZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9yZXNoYXBlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L3Jlc2l6ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9yb3cuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvc2l6ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9zb3J0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L3NxdWVlemUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvc3Vic2V0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L3RyYWNlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L3RyYW5zcG9zZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC96ZXJvcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2NvbWJpbmF0aW9ucy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2NvbWJpbmF0aW9uc1dpdGhSZXAuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9wcm9iYWJpbGl0eS9mYWN0b3JpYWwuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9wcm9iYWJpbGl0eS9nYW1tYS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2tsZGl2ZXJnZW5jZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L211bHRpbm9taWFsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vcHJvYmFiaWxpdHkvcGVybXV0YXRpb25zLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vcHJvYmFiaWxpdHkvcGlja1JhbmRvbS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3JhbmRvbS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3JhbmRvbUludC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3JlbGF0aW9uYWwvY29tcGFyZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3JlbGF0aW9uYWwvY29tcGFyZU5hdHVyYWwuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9yZWxhdGlvbmFsL2NvbXBhcmVUZXh0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vcmVsYXRpb25hbC9kZWVwRXF1YWwuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9yZWxhdGlvbmFsL2VxdWFsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vcmVsYXRpb25hbC9lcXVhbFRleHQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9yZWxhdGlvbmFsL2xhcmdlci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3JlbGF0aW9uYWwvbGFyZ2VyRXEuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9yZWxhdGlvbmFsL3NtYWxsZXIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9yZWxhdGlvbmFsL3NtYWxsZXJFcS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3JlbGF0aW9uYWwvdW5lcXVhbC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3NldC9zZXRDYXJ0ZXNpYW4uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zZXQvc2V0RGlmZmVyZW5jZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3NldC9zZXREaXN0aW5jdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3NldC9zZXRJbnRlcnNlY3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zZXQvc2V0SXNTdWJzZXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zZXQvc2V0TXVsdGlwbGljaXR5LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vc2V0L3NldFBvd2Vyc2V0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vc2V0L3NldFNpemUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zZXQvc2V0U3ltRGlmZmVyZW5jZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3NldC9zZXRVbmlvbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3NwZWNpYWwvZXJmLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vc3RhdGlzdGljcy9tYWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zdGF0aXN0aWNzL21heC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbWVhbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbWVkaWFuLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vc3RhdGlzdGljcy9taW4uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zdGF0aXN0aWNzL21vZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zdGF0aXN0aWNzL3Byb2QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zdGF0aXN0aWNzL3F1YW50aWxlU2VxLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vc3RhdGlzdGljcy9zdGQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zdGF0aXN0aWNzL3N1bS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3N0YXRpc3RpY3MvdmFyaWFuY2UuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNvcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY29zaC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY290LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjb3RoLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjc2MuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNzY2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXNlYy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hc2VjaC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hc2luLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2FzaW5oLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2F0YW4uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXRhbjIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXRhbmguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvY29zLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Nvc2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvY290LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2NvdGguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvY3NjLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2NzY2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvc2VjLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NlY2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvc2luLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NpbmguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvdGFuLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3RhbmguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi91bml0cy90by5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3V0aWxzL2Nsb25lLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdXRpbHMvZm9ybWF0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdXRpbHMvaGFzTnVtZXJpY1ZhbHVlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdXRpbHMvaXNJbnRlZ2VyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdXRpbHMvaXNOYU4uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi91dGlscy9pc05lZ2F0aXZlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdXRpbHMvaXNOdW1lcmljLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdXRpbHMvaXNQb3NpdGl2ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3V0aWxzL2lzUHJpbWUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi91dGlscy9pc1plcm8uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi91dGlscy9udW1lcmljLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdXRpbHMvdHlwZU9mLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9mdW5jdGlvbi9jb21waWxlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9mdW5jdGlvbi9ldmFsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9mdW5jdGlvbi9ldmFsdWF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZnVuY3Rpb24vaGVscC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZnVuY3Rpb24vcGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9rZXl3b3Jkcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vbm9kZS9BY2Nlc3Nvck5vZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL25vZGUvQXJyYXlOb2RlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9ub2RlL0Fzc2lnbm1lbnROb2RlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9ub2RlL0Jsb2NrTm9kZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vbm9kZS9Db25kaXRpb25hbE5vZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL25vZGUvQ29uc3RhbnROb2RlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9ub2RlL0Z1bmN0aW9uQXNzaWdubWVudE5vZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL25vZGUvRnVuY3Rpb25Ob2RlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9ub2RlL0luZGV4Tm9kZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vbm9kZS9Ob2RlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9ub2RlL09iamVjdE5vZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL25vZGUvT3BlcmF0b3JOb2RlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9ub2RlL1BhcmVudGhlc2lzTm9kZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vbm9kZS9SYW5nZU5vZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL25vZGUvUmVsYXRpb25hbE5vZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL25vZGUvU3ltYm9sTm9kZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vbm9kZS91dGlscy9hY2Nlc3MuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL25vZGUvdXRpbHMvYXNzaWduLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9vcGVyYXRvcnMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL3BhcnNlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi90cmFuc2Zvcm0vYXBwbHkudHJhbnNmb3JtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi90cmFuc2Zvcm0vY29sdW1uLnRyYW5zZm9ybS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vdHJhbnNmb3JtL2NvbmNhdC50cmFuc2Zvcm0uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL3RyYW5zZm9ybS9maWx0ZXIudHJhbnNmb3JtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi90cmFuc2Zvcm0vZm9yRWFjaC50cmFuc2Zvcm0uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL3RyYW5zZm9ybS9pbmRleC50cmFuc2Zvcm0uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL3RyYW5zZm9ybS9tYXAudHJhbnNmb3JtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi90cmFuc2Zvcm0vbWF4LnRyYW5zZm9ybS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vdHJhbnNmb3JtL21lYW4udHJhbnNmb3JtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi90cmFuc2Zvcm0vbWluLnRyYW5zZm9ybS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vdHJhbnNmb3JtL3JhbmdlLnRyYW5zZm9ybS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vdHJhbnNmb3JtL3Jvdy50cmFuc2Zvcm0uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL3RyYW5zZm9ybS9zdGQudHJhbnNmb3JtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi90cmFuc2Zvcm0vc3Vic2V0LnRyYW5zZm9ybS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vdHJhbnNmb3JtL3N1bS50cmFuc2Zvcm0uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL3RyYW5zZm9ybS91dGlscy9jb21waWxlSW5saW5lRXhwcmVzc2lvbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vdHJhbnNmb3JtL3V0aWxzL2Vycm9yVHJhbnNmb3JtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi90cmFuc2Zvcm0vdmFyaWFuY2UudHJhbnNmb3JtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZmFjdG9yaWVzQW55LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYWxnZWJyYS9kZWNvbXBvc2l0aW9uL2x1cC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvZGVjb21wb3NpdGlvbi9xci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvZGVjb21wb3NpdGlvbi9zbHUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hbGdlYnJhL2Rlcml2YXRpdmUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hbGdlYnJhL3JhdGlvbmFsaXplLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYWxnZWJyYS9zaW1wbGlmeS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc2ltcGxpZnkvcmVzb2x2ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc2ltcGxpZnkvc2ltcGxpZnlDb25zdGFudC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc2ltcGxpZnkvc2ltcGxpZnlDb3JlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYWxnZWJyYS9zaW1wbGlmeS91dGlsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYWxnZWJyYS9zb2x2ZXIvbHNvbHZlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYWxnZWJyYS9zb2x2ZXIvbHVzb2x2ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc29sdmVyL3Vzb2x2ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc29sdmVyL3V0aWxzL3NvbHZlVmFsaWRhdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzQW1kLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYWxnZWJyYS9zcGFyc2UvY3NDb3VudHMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hbGdlYnJhL3NwYXJzZS9jc0Rmcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzRXRyZWUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hbGdlYnJhL3NwYXJzZS9jc0ZrZWVwLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYWxnZWJyYS9zcGFyc2UvY3NGbGlwLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYWxnZWJyYS9zcGFyc2UvY3NJcHZlYy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzTGVhZi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzTHUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hbGdlYnJhL3NwYXJzZS9jc01hcmsuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hbGdlYnJhL3NwYXJzZS9jc01hcmtlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzUGVybXV0ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzUG9zdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzUmVhY2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hbGdlYnJhL3NwYXJzZS9jc1Nwc29sdmUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hbGdlYnJhL3NwYXJzZS9jc1Nxci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzVGRmcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzVW5mbGlwLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9hYnMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL2FkZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvYWRkU2NhbGFyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9jYnJ0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9jZWlsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9jdWJlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9kaXZpZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL2RpdmlkZVNjYWxhci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvZG90RGl2aWRlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9kb3RNdWx0aXBseS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvZG90UG93LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9leHAuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL2V4cG0xLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9maXguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL2Zsb29yLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9nY2QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL2h5cG90LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9sY20uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL2xvZy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvbG9nMTAuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL2xvZzFwLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9sb2cyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9tb2QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL211bHRpcGx5LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9tdWx0aXBseVNjYWxhci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvbm9ybS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvbnRoUm9vdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvbnRoUm9vdHMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL3Bvdy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvcm91bmQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL3NpZ24uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL3NxcnQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL3NxdWFyZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvc3VidHJhY3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL3VuYXJ5TWludXMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL3VuYXJ5UGx1cy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMveGdjZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2JpdHdpc2UvYml0QW5kLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYml0d2lzZS9iaXROb3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9iaXR3aXNlL2JpdE9yLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYml0d2lzZS9iaXRYb3IuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9iaXR3aXNlL2xlZnRTaGlmdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2JpdHdpc2UvcmlnaHRBcml0aFNoaWZ0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYml0d2lzZS9yaWdodExvZ1NoaWZ0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vY29tYmluYXRvcmljcy9iZWxsTnVtYmVycy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2NvbWJpbmF0b3JpY3MvY2F0YWxhbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2NvbWJpbmF0b3JpY3MvY29tcG9zaXRpb24uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9jb21iaW5hdG9yaWNzL3N0aXJsaW5nUzIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9jb21wbGV4L2FyZy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2NvbXBsZXgvY29uai5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2NvbXBsZXgvaW0uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9jb21wbGV4L3JlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vZ2VvbWV0cnkvZGlzdGFuY2UuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9nZW9tZXRyeS9pbnRlcnNlY3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9sb2dpY2FsL2FuZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2xvZ2ljYWwvbm90LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbG9naWNhbC9vci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2xvZ2ljYWwveG9yLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L2FwcGx5LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L2NvbHVtbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9jb25jYXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9tYXRyaXgvY3Jvc3MuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9tYXRyaXgvY3RyYW5zcG9zZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9kZXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9tYXRyaXgvZGlhZy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9kb3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9tYXRyaXgvZWlncy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9leHBtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L2V5ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9maWx0ZXIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9tYXRyaXgvZmxhdHRlbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9mb3JFYWNoLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L2dldE1hdHJpeERhdGFUeXBlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L2lkZW50aXR5LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L2ludi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9rcm9uLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L21hcC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9vbmVzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L3BhcnRpdGlvblNlbGVjdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9yYW5nZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9yZXNoYXBlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L3Jlc2l6ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9yb3cuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9tYXRyaXgvc2l6ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9zb3J0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L3NxcnRtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L3NxdWVlemUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9tYXRyaXgvc3Vic2V0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L3RyYWNlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L3RyYW5zcG9zZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC96ZXJvcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2NvbWJpbmF0aW9ucy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2NvbWJpbmF0aW9uc1dpdGhSZXAuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9mYWN0b3JpYWwuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9nYW1tYS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2tsZGl2ZXJnZW5jZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L211bHRpbm9taWFsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vcHJvYmFiaWxpdHkvcGVybXV0YXRpb25zLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vcHJvYmFiaWxpdHkvcGlja1JhbmRvbS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3JhbmRvbS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3JhbmRvbUludC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3V0aWwvcmFuZG9tTWF0cml4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vcHJvYmFiaWxpdHkvdXRpbC9zZWVkZWRSTkcuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9yZWxhdGlvbmFsL2NvbXBhcmUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9yZWxhdGlvbmFsL2NvbXBhcmVOYXR1cmFsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vcmVsYXRpb25hbC9jb21wYXJlVGV4dC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3JlbGF0aW9uYWwvZGVlcEVxdWFsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vcmVsYXRpb25hbC9lcXVhbC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3JlbGF0aW9uYWwvZXF1YWxTY2FsYXIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9yZWxhdGlvbmFsL2VxdWFsVGV4dC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3JlbGF0aW9uYWwvbGFyZ2VyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vcmVsYXRpb25hbC9sYXJnZXJFcS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3JlbGF0aW9uYWwvc21hbGxlci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3JlbGF0aW9uYWwvc21hbGxlckVxLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vcmVsYXRpb25hbC91bmVxdWFsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc2V0L3NldENhcnRlc2lhbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3NldC9zZXREaWZmZXJlbmNlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc2V0L3NldERpc3RpbmN0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc2V0L3NldEludGVyc2VjdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3NldC9zZXRJc1N1YnNldC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3NldC9zZXRNdWx0aXBsaWNpdHkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9zZXQvc2V0UG93ZXJzZXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9zZXQvc2V0U2l6ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3NldC9zZXRTeW1EaWZmZXJlbmNlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc2V0L3NldFVuaW9uLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc3BlY2lhbC9lcmYuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9zdGF0aXN0aWNzL21hZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbWF4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc3RhdGlzdGljcy9tZWFuLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc3RhdGlzdGljcy9tZWRpYW4uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9zdGF0aXN0aWNzL21pbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbW9kZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3N0YXRpc3RpY3MvcHJvZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3N0YXRpc3RpY3MvcXVhbnRpbGVTZXEuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9zdGF0aXN0aWNzL3N0ZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3N0YXRpc3RpY3Mvc3VtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc3RhdGlzdGljcy91dGlscy9pbXByb3ZlRXJyb3JNZXNzYWdlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc3RhdGlzdGljcy92YXJpYW5jZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3N0cmluZy9mb3JtYXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9zdHJpbmcvcHJpbnQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNvcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY29zaC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY290LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjb3RoLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjc2MuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNzY2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXNlYy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hc2VjaC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hc2luLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2FzaW5oLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2F0YW4uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXRhbjIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXRhbmguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvY29zLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Nvc2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvY290LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2NvdGguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvY3NjLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2NzY2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvc2VjLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NlY2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvc2luLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NpbmguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvdGFuLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3RhbmguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi91bml0L3RvLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdXRpbHMvY2xvbmUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi91dGlscy9oYXNOdW1lcmljVmFsdWUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi91dGlscy9pc0ludGVnZXIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi91dGlscy9pc05hTi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3V0aWxzL2lzTmVnYXRpdmUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi91dGlscy9pc051bWVyaWMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi91dGlscy9pc1Bvc2l0aXZlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdXRpbHMvaXNQcmltZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3V0aWxzL2lzWmVyby5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3V0aWxzL251bWVyaWMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi91dGlscy90eXBlT2YuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9qc29uL3JlcGxhY2VyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvanNvbi9yZXZpdmVyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvcGxhaW4vbnVtYmVyL2FyaXRobWV0aWMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9wbGFpbi9udW1iZXIvYml0d2lzZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3BsYWluL251bWJlci9jb21iaW5hdGlvbnMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9wbGFpbi9udW1iZXIvY29uc3RhbnRzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvcGxhaW4vbnVtYmVyL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvcGxhaW4vbnVtYmVyL2xvZ2ljYWwuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9wbGFpbi9udW1iZXIvcHJvYmFiaWxpdHkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9wbGFpbi9udW1iZXIvcmVsYXRpb25hbC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3BsYWluL251bWJlci90cmlnb25vbWV0cnkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9wbGFpbi9udW1iZXIvdXRpbHMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL2JpZ251bWJlci9CaWdOdW1iZXIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL2JpZ251bWJlci9mdW5jdGlvbi9iaWdudW1iZXIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL2Jvb2xlYW4uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL2NoYWluL0NoYWluLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9jaGFpbi9mdW5jdGlvbi9jaGFpbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvY29tcGxleC9Db21wbGV4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9jb21wbGV4L2Z1bmN0aW9uL2NvbXBsZXguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL2ZyYWN0aW9uL0ZyYWN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9mcmFjdGlvbi9mdW5jdGlvbi9mcmFjdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L0RlbnNlTWF0cml4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvRmlib25hY2NpSGVhcC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L0ltbXV0YWJsZURlbnNlTWF0cml4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvTWF0cml4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvTWF0cml4SW5kZXguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL21hdHJpeC9SYW5nZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L1NwYS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L1NwYXJzZU1hdHJpeC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L2Z1bmN0aW9uL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvZnVuY3Rpb24vbWF0cml4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvZnVuY3Rpb24vc3BhcnNlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDEuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wMi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wNS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA2LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDcuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wOC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA5LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTAuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbnVtYmVyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9yZXN1bHRzZXQvUmVzdWx0U2V0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9zdHJpbmcuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL3VuaXQvVW5pdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvdW5pdC9mdW5jdGlvbi9jcmVhdGVVbml0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS91bml0L2Z1bmN0aW9uL3NwbGl0VW5pdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvdW5pdC9mdW5jdGlvbi91bml0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS91bml0L3BoeXNpY2FsQ29uc3RhbnRzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvYXJyYXkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi91dGlscy9iaWdudW1iZXIvYml0d2lzZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3V0aWxzL2JpZ251bWJlci9jb25zdGFudHMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi91dGlscy9iaWdudW1iZXIvZm9ybWF0dGVyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvYmlnbnVtYmVyL25lYXJseUVxdWFsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvY29sbGVjdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3V0aWxzL2NvbXBsZXguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi91dGlscy9jdXN0b21zLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvZW1pdHRlci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3V0aWxzL2ZhY3RvcnkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi91dGlscy9mdW5jdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3V0aWxzL2lzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvbGF0ZXguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi91dGlscy9sb2cuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi91dGlscy9ub29wLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvbnVtYmVyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvcG9seWZpbGxzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvcHJvZHVjdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3V0aWxzL3N0cmluZy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3ZlcnNpb24uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL21haW4vZXM1L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3NlZWQtcmFuZG9tL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3RpbnktZW1pdHRlci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy90eXBlZC1mdW5jdGlvbi90eXBlZC1mdW5jdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcGtCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNudEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1MVpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDanFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaE9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25KQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOWJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9LQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0VUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1bkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3V0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9yREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvaUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcHZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWEE7O0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNTNDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN3dKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsMEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNVlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVpRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2puQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5c0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6MkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDek1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4UEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4UEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL1NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6ckJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeFNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeE9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25VQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlyREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzE1RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcGFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25QQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNubkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2wzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdHpCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzduQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9GQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0lBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNTZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOU5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDak1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDak5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2YkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdE9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25UQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1UkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0lBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2phQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTs7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaE9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDak9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3NkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9RQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdlRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMVZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RnREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzNEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3ZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNU5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25QQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25mQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbHJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25jQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBOzs7QUNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUM3S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsIi8qKlxuICogQGxpY2Vuc2VcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYsIFBldGFyIEtvcnBvbmFpxIcgPHBldGFyLmtvcnBvbmFpY0BnbWFpbC5jb20+XG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UsIGZvdW5kIGluXG4gKiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG52YXIgYW50bHI0ID0gcmVxdWlyZSgnYW50bHI0L2luZGV4Jyk7XG52YXIgUUFTTUxleGVyID0gcmVxdWlyZSgnLi9RQVNNTGV4ZXInKTtcbnZhciBRQVNNUGFyc2VyID0gcmVxdWlyZSgnLi9RQVNNUGFyc2VyJyk7XG52YXIgUUFTTUxpc3RlbmVyID0gcmVxdWlyZSgnLi9RQVNNTGlzdGVuZXInKS5RQVNNTGlzdGVuZXI7XG5cbnZhciBFcnJvckxpc3RlbmVyID0gZnVuY3Rpb24oZXJyb3JzKSB7XG4gIGFudGxyNC5lcnJvci5FcnJvckxpc3RlbmVyLmNhbGwodGhpcyk7XG4gIHRoaXMuZXJyb3JzID0gZXJyb3JzO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkVycm9yTGlzdGVuZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShhbnRscjQuZXJyb3IuRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUpO1xuRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBFcnJvckxpc3RlbmVyO1xuRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUuc3ludGF4RXJyb3IgPSBmdW5jdGlvbihyZWMsIHN5bSwgbGluZSwgY29sLCBtc2csIGUpIHtcbiAgdGhpcy5lcnJvcnMucHVzaCh7XG4gIFx0bGluZTogbGluZSxcbiAgXHRjb2w6IGNvbCxcbiAgXHRtc2c6IG1zZ1xuICB9KTtcbn07XG5cbnZhciBRQ1FBU01MaXN0ZW5lciA9IGZ1bmN0aW9uKGNpcmN1aXQsIGNvbXBhdGliaWxpdHlNb2RlKSB7XG4gICAgdGhpcy5jaXJjdWl0ID0gY2lyY3VpdDtcbiAgICB0aGlzLnFyZWdNYXAgPSB7fTtcbiAgICB0aGlzLmNvbmRpdGlvbiA9IHt9O1xuICAgIHRoaXMuY29tcGF0aWJpbGl0eU1vZGUgPSBjb21wYXRpYmlsaXR5TW9kZTtcblxuICAgIFFBU01MaXN0ZW5lci5jYWxsKHRoaXMpOyAvLyBpbmhlcml0IGRlZmF1bHQgbGlzdGVuZXJcbiAgICByZXR1cm4gdGhpcztcbn07XG5cbnZhciBRQVNNSW1wb3J0ID0gZnVuY3Rpb24oY2lyY3VpdCwgaW5wdXQsIGVycm9yQ2FsbGJhY2ssIGNvbXBhdGliaWxpdHlNb2RlKSB7XG5cdHZhciBjaGFycyA9IG5ldyBhbnRscjQuSW5wdXRTdHJlYW0oaW5wdXQpO1xuXHR2YXIgbGV4ZXIgPSBuZXcgUUFTTUxleGVyLlFBU01MZXhlcihjaGFycyk7XG5cdHZhciB0b2tlbnMgID0gbmV3IGFudGxyNC5Db21tb25Ub2tlblN0cmVhbShsZXhlcik7XG5cdHZhciBwYXJzZXIgPSBuZXcgUUFTTVBhcnNlci5RQVNNUGFyc2VyKHRva2Vucyk7XG5cdHBhcnNlci5idWlsZFBhcnNlVHJlZXMgPSB0cnVlO1xuXG5cdHBhcnNlci5yZW1vdmVFcnJvckxpc3RlbmVycygpO1xuXHR2YXIgZXJyb3JzID0gW107XG5cdHZhciBlcnJvckxpc3RlbmVyID0gbmV3IEVycm9yTGlzdGVuZXIoZXJyb3JzKTtcblx0cGFyc2VyLmFkZEVycm9yTGlzdGVuZXIoZXJyb3JMaXN0ZW5lcik7XG5cblx0dmFyIHRyZWUgPSBwYXJzZXIubWFpbnByb2coKTsgICBcblx0dmFyIFFBU00gPSBuZXcgUUNRQVNNTGlzdGVuZXIoY2lyY3VpdCwgY29tcGF0aWJpbGl0eU1vZGUpO1xuXHRhbnRscjQudHJlZS5QYXJzZVRyZWVXYWxrZXIuREVGQVVMVC53YWxrKFFBU00sIHRyZWUpO1xuXHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0ZXJyb3JDYWxsYmFjayhlcnJvcnMpO1xuXHR9XG59O1xuXG4gXG4vLyBpbmhlcml0IGRlZmF1bHQgbGlzdGVuZXJcblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUUFTTUxpc3RlbmVyLnByb3RvdHlwZSk7XG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBRQ1FBU01MaXN0ZW5lcjtcblxuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUubnVtUWJpdCA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgbnVtID0gMDtcblx0Zm9yKHZhciByZWcgaW4gdGhpcy5xcmVnTWFwKSB7XG5cdFx0bnVtICs9IHRoaXMucXJlZ01hcFtyZWddO1xuXHR9XG5cdHJldHVybiBudW07XG59O1xuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUucXJlZ0Jhc2UgPSBmdW5jdGlvbihxcmVnKSB7XG5cdHZhciBiYXNlID0gMDtcblx0Zm9yKHZhciByZWcgaW4gdGhpcy5xcmVnTWFwKSB7XG5cdFx0aWYocmVnID09IHFyZWcpIHtcblx0XHRcdHJldHVybiBiYXNlO1xuXHRcdH1cblx0XHRiYXNlICs9IHRoaXMucXJlZ01hcFtyZWddO1xuXHR9XG5cdHJldHVybiBiYXNlO1xufTtcblxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLnFyZWdMZW4gPSBmdW5jdGlvbihyZWcpIHtcblx0cmV0dXJuIHRoaXMucXJlZ01hcFtyZWddIHx8IDA7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI21haW5wcm9nLlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyTWFpbnByb2cgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjbWFpbnByb2cuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdE1haW5wcm9nID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI3N0YXRlbWVudC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlclN0YXRlbWVudCA9IGZ1bmN0aW9uKGN0eCkge1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0Ly8gY29uZGl0aW9uXG5cdHZhciBuYW1lID0gY3R4LmdldENoaWxkQ291bnQoKSA/IGN0eC5nZXRDaGlsZCgwKS5nZXRUZXh0KCkgOiBcIlwiO1xuXHRpZihuYW1lID09IFwiaWZcIikge1xuXHRcdHRoaXMuY29uZGl0aW9uID0ge1xuXHRcdFx0Y3JlZzogY3R4LklEKCkuZ2V0VGV4dCgpLFxuXHRcdFx0dmFsdWU6IHBhcnNlSW50KGN0eC5JTlQoKS5nZXRUZXh0KCkpXG5cdFx0fVxuXHR9XG5cblx0Ly8gc3Vicm91dGluZSAoZ2F0ZSBkZWNsYXJhdGlvbilcblx0aWYoY3R4LmdhdGVkZWNsKCkpIHtcblx0XHR2YXIgZ2F0ZWRlY2wgPSBjdHguZ2F0ZWRlY2woKTtcblx0XHR2YXIgYXJncyA9IFtdO1xuXHRcdHZhciBwYXJhbXMgPSBbXTtcblxuXHRcdHZhciBjY291bnQgPSBnYXRlZGVjbC5nZXRDaGlsZENvdW50KCk7XG5cdFx0aWYoY2NvdW50ID4gMiAmJiBnYXRlZGVjbC5nZXRDaGlsZCgyKS5JRCkge1xuXHRcdFx0Ly8gbm8gcGFyYW1zXG5cdFx0XHRhcmdzID0gZ2F0ZWRlY2wuZ2V0Q2hpbGQoMikuSUQoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYoY2NvdW50ID4gMyAmJiBnYXRlZGVjbC5nZXRDaGlsZCgzKS5JRCkge1xuXHRcdFx0XHRwYXJhbXMgPSBnYXRlZGVjbC5nZXRDaGlsZCgzKS5JRCgpO1xuXHRcdFx0fVxuXHRcdFx0aWYoY2NvdW50ID4gNSAmJiBnYXRlZGVjbC5nZXRDaGlsZCg1KS5JRCkge1xuXHRcdFx0XHQvLyBubyBwYXJhbXNcblx0XHRcdFx0YXJncyA9IGdhdGVkZWNsLmdldENoaWxkKDUpLklEKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMuY2lyY3VpdCk7XG5cdFx0dmFyIGN1c3RvbUdhdGUgPSBuZXcgcHJvdG8uY29uc3RydWN0b3IoYXJncy5sZW5ndGgpO1xuXHRcdHZhciBjdXN0b21HYXRlTmFtZSA9IGdhdGVkZWNsLklEKCkuZ2V0VGV4dCgpO1xuXHRcdHZhciBjdXN0b21HYXRlUmVncyA9IFtdO1xuXG5cdFx0YXJncy5tYXAoZnVuY3Rpb24ocmVnKSB7XG5cdFx0XHRjdXN0b21HYXRlUmVncy5wdXNoKHJlZy5nZXRUZXh0KCkpO1xuXHRcdH0pO1xuXG5cdFx0cGFyYW1zLm1hcChmdW5jdGlvbihwYXIpIHtcblx0XHRcdHZhciBwYXJOYW1lID0gcGFyLmdldFRleHQoKTtcblx0XHRcdGN1c3RvbUdhdGUucGFyYW1zLnB1c2gocGFyTmFtZSk7XG5cdFx0fSk7XG5cblx0XHRpZihjdHguZ29wbGlzdCgpKSB7XG5cdFx0XHR2YXIgZ29wbGlzdCA9IGN0eC5nb3BsaXN0KCk7XG5cdFx0XHRnb3BsaXN0LnVvcCgpLm1hcChmdW5jdGlvbih1b3ApIHtcblx0XHRcdFx0dmFyIGdhdGVOYW1lID0gdW9wLklEKCkgPyB1b3AuSUQoKS5nZXRUZXh0KCkgOiBcIlwiO1xuXHRcdFx0XHRpZihnYXRlTmFtZSkge1xuXHRcdFx0XHRcdHZhciBpZGxpc3QgPSB1b3AuYW55bGlzdCgpID8gdW9wLmFueWxpc3QoKS5pZGxpc3QoKSA6IG51bGw7XG5cdFx0XHRcdFx0dmFyIG1peGVkbGlzdCA9IHVvcC5hbnlsaXN0KCkgPyB1b3AuYW55bGlzdCgpLm1peGVkbGlzdCgpIDogbnVsbDtcblx0XHRcdFx0XHR2YXIgZXhwbGlzdCA9IHVvcC5leHBsaXN0KCk7XG5cblxuXHRcdFx0XHRcdHN3aXRjaChnYXRlTmFtZSkge1xuXHRcdFx0XHRcdFx0Y2FzZSBcIkNYXCI6IGdhdGVOYW1lID0gXCJjeFwiOyBicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCJVXCI6IGdhdGVOYW1lID0gXCJ1M1wiOyBicmVhaztcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZighc2VsZi5jaXJjdWl0LmJhc2ljR2F0ZXNbZ2F0ZU5hbWVdICYmICFzZWxmLmNpcmN1aXQuY3VzdG9tR2F0ZXNbZ2F0ZU5hbWVdKSB7XG5cdFx0XHRcdFx0XHQvLyBmaW5kIGdhdGUgYnkgcWFzbSBuYW1lXG5cdFx0XHRcdFx0XHRmb3IodmFyIHRtcE5hbWUgaW4gc2VsZi5jaXJjdWl0LmJhc2ljR2F0ZXMpIHtcblx0XHRcdFx0XHRcdFx0dmFyIHRtcERlZiA9IHNlbGYuY2lyY3VpdC5iYXNpY0dhdGVzW3RtcE5hbWVdO1xuXHRcdFx0XHRcdFx0XHRpZih0bXBEZWYuZXhwb3J0SW5mbyAmJiB0bXBEZWYuZXhwb3J0SW5mby5xYXNtICYmIHRtcERlZi5leHBvcnRJbmZvLnFhc20ubmFtZSAmJiB0bXBEZWYuZXhwb3J0SW5mby5xYXNtLm5hbWUgPT0gZ2F0ZU5hbWUpIHtcblx0XHRcdFx0XHRcdFx0XHRnYXRlTmFtZSA9IHRtcE5hbWU7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Ly8gbmV3ZXIgdmVyc2lvbnMgb2YgcWlza2l0IGV4cG9ydHMgdG8gcWFzbSB3aXRoIGdhdGUgbmFtZXMgdW5kZWZpbmVkIGJ5IHFhc20gMi4wIGRlZmluaXRpb24uLi5cblx0XHRcdFx0XHRcdFx0aWYodG1wRGVmLmV4cG9ydEluZm8gJiYgdG1wRGVmLmV4cG9ydEluZm8ucWlza2l0ICYmIHRtcERlZi5leHBvcnRJbmZvLnFpc2tpdC5uYW1lICYmIHRtcERlZi5leHBvcnRJbmZvLnFpc2tpdC5uYW1lID09IGdhdGVOYW1lKSB7XG5cdFx0XHRcdFx0XHRcdFx0Z2F0ZU5hbWUgPSB0bXBOYW1lO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cblx0XHRcdFx0XHR2YXIgcGFyYW1zID0ge307XG5cdFx0XHRcdFx0aWYoZXhwbGlzdCAmJiBleHBsaXN0LmV4cCgpKSB7XG5cdFx0XHRcdFx0XHR2YXIgZ2F0ZURlZiA9IHNlbGYuY2lyY3VpdC5iYXNpY0dhdGVzW2dhdGVOYW1lXTtcblx0XHRcdFx0XHRcdGlmKCFnYXRlRGVmKSB7XG5cdFx0XHRcdFx0XHRcdGdhdGVEZWYgPSBzZWxmLmNpcmN1aXQuY3VzdG9tR2F0ZXNbZ2F0ZU5hbWVdO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZihnYXRlRGVmKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBwYXJhbUxpc3QgPSBleHBsaXN0LmV4cCgpO1xuXHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1EZWYgPSBnYXRlRGVmLnBhcmFtcyB8fCBbXTtcblx0XHRcdFx0XHRcdFx0cGFyYW1MaXN0Lm1hcChmdW5jdGlvbihwYXJhbUl0ZW0sIHBhcmFtSW5kZXgpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1WYWx1ZSA9IHBhcmFtSXRlbS5nZXRUZXh0KCk7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtTmFtZSA9IHBhcmFtRGVmLmxlbmd0aCA+PSBwYXJhbUluZGV4ID8gcGFyYW1EZWZbcGFyYW1JbmRleF0gOiBcIlwiO1xuXHRcdFx0XHRcdFx0XHRcdGlmKHBhcmFtTmFtZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1zW3BhcmFtTmFtZV0gPSBwYXJhbVZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dmFyIG9wdGlvbnMgPSB7IHBhcmFtczogcGFyYW1zIH07XG5cblxuXHRcdFx0XHRcdHZhciB3aXJlcyA9IFtdO1xuXG5cdFx0XHRcdFx0aWYoaWRsaXN0KSB7XG5cdFx0XHRcdFx0XHR2YXIgY291bnQgPSBpZGxpc3QuSUQoKS5sZW5ndGg7XG5cdFx0XHRcdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuXHRcdFx0XHRcdFx0XHR3aXJlcy5wdXNoKGN1c3RvbUdhdGVSZWdzLmluZGV4T2YoaWRsaXN0LklEKClbaV0uZ2V0VGV4dCgpKSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYobWl4ZWRsaXN0KSB7XG5cdFx0XHRcdFx0XHQvLyA/XG5cdFx0XHRcdFx0fVxuXG4vKlxuXHRcdFx0XHRcdGlmKCFzZWxmLmNvbXBhdGliaWxpdHlNb2RlKSB7XG5cdFx0XHRcdFx0XHRzd2l0Y2goZ2F0ZU5hbWUpIHtcblx0XHRcdFx0XHRcdFx0Y2FzZSBcInJ6XCI6IHtcblx0XHRcdFx0XHRcdFx0XHRnYXRlTmFtZSA9IFwidTFcIjtcblx0XHRcdFx0XHRcdFx0XHRpZihvcHRpb25zICYmIG9wdGlvbnMucGFyYW1zICYmIG9wdGlvbnMucGFyYW1zLnBoaSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0b3B0aW9ucy5wYXJhbXMubGFtYmRhID0gb3B0aW9ucy5wYXJhbXMucGhpO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGVsZXRlIG9wdGlvbnMucGFyYW1zLnBoaTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH07IGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cbiovXG5cdFx0XHRcdFx0dmFyIGV4dGVybmFsID0gc2VsZi5jaXJjdWl0LmN1c3RvbUdhdGVzW2dhdGVOYW1lXTtcblx0XHRcdFx0XHRpZihleHRlcm5hbCkge1xuXHRcdFx0XHRcdFx0Y3VzdG9tR2F0ZS5yZWdpc3RlckdhdGUoZ2F0ZU5hbWUsIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZXh0ZXJuYWwpKSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y3VzdG9tR2F0ZS5hZGRHYXRlKGdhdGVOYW1lLCAtMSwgd2lyZXMsIG9wdGlvbnMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHR0aGlzLmNpcmN1aXQucmVnaXN0ZXJHYXRlKGN1c3RvbUdhdGVOYW1lLCBjdXN0b21HYXRlLnNhdmUoZmFsc2UpKTtcblx0fVxufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNzdGF0ZW1lbnQuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdFN0YXRlbWVudCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciN2ZXJzaW9uLlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyVmVyc2lvbiA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciN2ZXJzaW9uLlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRWZXJzaW9uID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2RlY2wuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJEZWNsID0gZnVuY3Rpb24oY3R4KSB7XG5cdHN3aXRjaChjdHguZ2V0Q2hpbGQoMCkuZ2V0VGV4dCgpKSB7XG5cdFx0Y2FzZSBcInFyZWdcIjogdGhpcy5xcmVnTWFwW2N0eC5nZXRDaGlsZCgxKS5nZXRUZXh0KCldID0gcGFyc2VJbnQoY3R4LmdldENoaWxkKDMpLmdldFRleHQoKSk7IGJyZWFrO1xuXHRcdGNhc2UgXCJjcmVnXCI6IHRoaXMuY2lyY3VpdC5jcmVhdGVDcmVnKGN0eC5nZXRDaGlsZCgxKS5nZXRUZXh0KCksIHBhcnNlSW50KGN0eC5nZXRDaGlsZCgzKS5nZXRUZXh0KCkpKTsgYnJlYWs7XG5cdH1cdFxufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNkZWNsLlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXREZWNsID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2dhdGVkZWNsLlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyR2F0ZWRlY2wgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZ2F0ZWRlY2wuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdEdhdGVkZWNsID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2dvcGxpc3QuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJHb3BsaXN0ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG4vLyBFeGl0IGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2dvcGxpc3QuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdEdvcGxpc3QgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI3FvcC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlclFvcCA9IGZ1bmN0aW9uKGN0eCkge1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cdHZhciBjb25kaXRpb24gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuY29uZGl0aW9uKSk7XG5cdHRoaXMuY29uZGl0aW9uID0ge307XG5cblx0dmFyIG5hbWUgPSBjdHguZ2V0Q2hpbGRDb3VudCgpID8gY3R4LmdldENoaWxkKDApLmdldFRleHQoKSA6IFwiXCI7XG5cblx0aWYobmFtZSA9PSBcInJlc2V0XCIpIHtcblx0XHR2YXIgcXJlZyA9IFwiXCI7XG5cdFx0dmFyIHFiaXQgPSAtMTtcblx0XHR2YXIgY291bnQgPSBjdHguYXJndW1lbnQoKS5sZW5ndGg7XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcblx0XHRcdHZhciBhcmcgPSBjdHguYXJndW1lbnQoKVtpXTtcblx0XHRcdGlmKGkgPT0gMCkge1xuXHRcdFx0XHRxcmVnID0gYXJnLklEKCkuZ2V0VGV4dCgpO1xuXHRcdFx0XHRxYml0ID0gYXJnLklOVCgpID8gcGFyc2VJbnQoYXJnLklOVCgpLmdldFRleHQoKSkgOiAtMTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZihxcmVnKSB7XG5cdFx0XHR2YXIgbnVtQml0cyA9IHNlbGYucXJlZ0xlbihxcmVnKTtcblx0XHRcdGlmKHFiaXQgPCAwKSB7XG5cdFx0XHRcdC8vXG5cdFx0XHRcdC8vIGFyZ3VtZW50IGlzIGVudGlyZSByZWdpc3RlclxuXHRcdFx0XHQvL1xuXHRcdFx0XHRmb3IodmFyIHggPSAwOyB4IDwgbnVtQml0czsgeCsrKSB7XG5cdFx0XHRcdFx0c2VsZi5jaXJjdWl0LmFkZEdhdGUoXCJyZXNldFwiLCAtMSwgeCArIHNlbGYucXJlZ0Jhc2UocXJlZyksIHsgY29uZGl0aW9uOiBjb25kaXRpb24gfHwge30gfSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vXG5cdFx0XHRcdC8vIGJvdGggYXJndW1lbnRzIGFyZSBzaW5nbGUgYml0c1xuXHRcdFx0XHQvL1xuXHRcdFx0XHRzZWxmLmNpcmN1aXQuYWRkR2F0ZShcInJlc2V0XCIsIC0xLCBxYml0ICsgc2VsZi5xcmVnQmFzZShxcmVnKSwgeyBjb25kaXRpb246IGNvbmRpdGlvbiB8fCB7fSB9ICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYobmFtZSA9PSBcIm1lYXN1cmVcIikge1xuXHRcdHZhciBxcmVnID0gXCJcIjtcblx0XHR2YXIgcWJpdCA9IC0xO1xuXHRcdHZhciBjcmVnID0gXCJcIjtcblx0XHR2YXIgY2JpdCA9IC0xO1xuXHRcdHZhciBjb3VudCA9IGN0eC5hcmd1bWVudCgpLmxlbmd0aDtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuXHRcdFx0dmFyIGFyZyA9IGN0eC5hcmd1bWVudCgpW2ldO1xuXHRcdFx0aWYoaSA9PSAwKSB7XG5cdFx0XHRcdHFyZWcgPSBhcmcuSUQoKS5nZXRUZXh0KCk7XG5cdFx0XHRcdHFiaXQgPSBhcmcuSU5UKCkgPyBwYXJzZUludChhcmcuSU5UKCkuZ2V0VGV4dCgpKSA6IC0xO1xuXHRcdFx0fVxuXHRcdFx0aWYoaSA9PSAxKSB7XG5cdFx0XHRcdGNyZWcgPSBhcmcuSUQoKS5nZXRUZXh0KCk7XG5cdFx0XHRcdGNiaXQgPSBhcmcuSU5UKCkgPyBwYXJzZUludChhcmcuSU5UKCkuZ2V0VGV4dCgpKSA6IC0xO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmKHFyZWcgJiYgY3JlZykge1xuXHRcdFx0dmFyIG51bUJpdHMgPSBzZWxmLnFyZWdMZW4ocXJlZyk7XG5cdFx0XHRpZihxYml0IDwgMCAmJiBjYml0IDwgMCkge1xuXHRcdFx0XHQvL1xuXHRcdFx0XHQvLyBib3RoIGFyZ3VtZW50cyBhcmUgZW50aXJlIHJlZ2lzdGVyc1xuXHRcdFx0XHQvL1xuXHRcdFx0XHRmb3IodmFyIHggPSAwOyB4IDwgbnVtQml0czsgeCsrKSB7XG5cdFx0XHRcdFx0c2VsZi5jaXJjdWl0LmFkZEdhdGUoXCJtZWFzdXJlXCIsIC0xLCB4ICsgc2VsZi5xcmVnQmFzZShxcmVnKSwgeyBjcmVnOiB7IG5hbWU6IGNyZWcsIGJpdDogeCB9LCBjb25kaXRpb246IGNvbmRpdGlvbiB8fCB7fSB9ICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYocWJpdCA+PSAwICYmIGNiaXQgPj0gMCkge1xuXHRcdFx0XHRcdC8vXG5cdFx0XHRcdFx0Ly8gYm90aCBhcmd1bWVudHMgYXJlIHNpbmdsZSBiaXRzXG5cdFx0XHRcdFx0Ly9cblx0XHRcdFx0XHRzZWxmLmNpcmN1aXQuYWRkR2F0ZShcIm1lYXN1cmVcIiwgLTEsIHFiaXQgKyBzZWxmLnFyZWdCYXNlKHFyZWcpLCB7IGNyZWc6IHsgbmFtZTogY3JlZywgYml0OiBjYml0IH0sIGNvbmRpdGlvbjogY29uZGl0aW9uIHx8IHt9IH0gKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZihxYml0ID49IDAgJiYgY2JpdCA8IDApIHtcblx0XHRcdFx0XHRcdC8vXG5cdFx0XHRcdFx0XHQvLyBxYml0IGlzIHNpbmdsZSwgY3JlZyBpcyBlbnRpcmUgcmVnaXN0ZXJcblx0XHRcdFx0XHRcdC8vXG5cdFx0XHRcdFx0XHRmb3IodmFyIHggPSAwOyB4IDwgbnVtQml0czsgeCsrKSB7XG5cdFx0XHRcdFx0XHRcdHNlbGYuY2lyY3VpdC5hZGRHYXRlKFwibWVhc3VyZVwiLCAtMSwgcWJpdCArIHNlbGYucXJlZ0Jhc2UocXJlZyksIHsgY3JlZzogeyBuYW1lOiBjcmVnLCBiaXQ6IHggfSwgY29uZGl0aW9uOiBjb25kaXRpb24gfHwge30gfSApO1xuXHRcdFx0XHRcdFx0fVx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvL1xuXHRcdFx0XHRcdFx0Ly8gcWJpdCBpcyBlbnRpcmUgcmVnaXN0ZXIsIGNyZWcgaXMgc2luZ2xlIGJpdFxuXHRcdFx0XHRcdFx0Ly9cblx0XHRcdFx0XHRcdGZvcih2YXIgeCA9IDA7IHggPCBudW1CaXRzOyB4KyspIHtcblx0XHRcdFx0XHRcdFx0c2VsZi5jaXJjdWl0LmFkZEdhdGUoXCJtZWFzdXJlXCIsIC0xLCB4ICsgc2VsZi5xcmVnQmFzZShxcmVnKSwgeyBjcmVnOiB7IG5hbWU6IGNyZWcsIGJpdDogY2JpdCB9LCBjb25kaXRpb246IGNvbmRpdGlvbiB8fCB7fSB9ICk7XG5cdFx0XHRcdFx0XHR9XHRcdFx0XHRcdFx0XG5cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHR2YXIgdW9wID0gY3R4LnVvcCgpO1xuXHRpZih1b3AgJiYgdW9wLklEKCkpIHtcblx0XHR2YXIgZ2F0ZU5hbWUgPSB1b3AuSUQoKS5nZXRUZXh0KCk7XG5cdFx0dmFyIGlkbGlzdCA9IHVvcC5hbnlsaXN0KCkgPyB1b3AuYW55bGlzdCgpLmlkbGlzdCgpIDogbnVsbDtcblx0XHR2YXIgbWl4ZWRsaXN0ID0gdW9wLmFueWxpc3QoKSA/IHVvcC5hbnlsaXN0KCkubWl4ZWRsaXN0KCkgOiBudWxsO1xuXHRcdHZhciBleHBsaXN0ID0gdW9wLmV4cGxpc3QoKTtcblxuXHRcdHN3aXRjaChnYXRlTmFtZSkge1xuXHRcdFx0Y2FzZSBcIkNYXCI6IGdhdGVOYW1lID0gXCJjeFwiOyBicmVhaztcblx0XHRcdGNhc2UgXCJVXCI6IGdhdGVOYW1lID0gXCJ1M1wiOyBicmVhaztcblx0XHR9XG5cblx0XHRpZighc2VsZi5jaXJjdWl0LmJhc2ljR2F0ZXNbZ2F0ZU5hbWVdICYmICFzZWxmLmNpcmN1aXQuY3VzdG9tR2F0ZXNbZ2F0ZU5hbWVdKSB7XG5cdFx0XHQvLyBmaW5kIGdhdGUgYnkgcWFzbSBuYW1lXG5cdFx0XHRmb3IodmFyIHRtcE5hbWUgaW4gc2VsZi5jaXJjdWl0LmJhc2ljR2F0ZXMpIHtcblx0XHRcdFx0dmFyIHRtcERlZiA9IHNlbGYuY2lyY3VpdC5iYXNpY0dhdGVzW3RtcE5hbWVdO1xuXHRcdFx0XHRpZih0bXBEZWYuZXhwb3J0SW5mbyAmJiB0bXBEZWYuZXhwb3J0SW5mby5xYXNtICYmIHRtcERlZi5leHBvcnRJbmZvLnFhc20ubmFtZSAmJiB0bXBEZWYuZXhwb3J0SW5mby5xYXNtLm5hbWUgPT0gZ2F0ZU5hbWUpIHtcblx0XHRcdFx0XHRnYXRlTmFtZSA9IHRtcE5hbWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gbmV3ZXIgdmVyc2lvbnMgb2YgcWlza2l0IGV4cG9ydHMgdG8gcWFzbSB3aXRoIGdhdGUgbmFtZXMgdW5kZWZpbmVkIGJ5IHFhc20gMi4wIGRlZmluaXRpb24uLi5cblx0XHRcdFx0aWYodG1wRGVmLmV4cG9ydEluZm8gJiYgdG1wRGVmLmV4cG9ydEluZm8ucWlza2l0ICYmIHRtcERlZi5leHBvcnRJbmZvLnFpc2tpdC5uYW1lICYmIHRtcERlZi5leHBvcnRJbmZvLnFpc2tpdC5uYW1lID09IGdhdGVOYW1lKSB7XG5cdFx0XHRcdFx0Z2F0ZU5hbWUgPSB0bXBOYW1lO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIHBhcmFtcyA9IHt9O1xuXHRcdGlmKGV4cGxpc3QgJiYgZXhwbGlzdC5leHAoKSkge1xuXHRcdFx0dmFyIGdhdGVEZWYgPSBzZWxmLmNpcmN1aXQuYmFzaWNHYXRlc1tnYXRlTmFtZV07XG5cdFx0XHRpZighZ2F0ZURlZikge1xuXHRcdFx0XHRnYXRlRGVmID0gc2VsZi5jaXJjdWl0LmN1c3RvbUdhdGVzW2dhdGVOYW1lXTtcblx0XHRcdH1cblx0XHRcdGlmKGdhdGVEZWYpIHtcblx0XHRcdFx0dmFyIHBhcmFtTGlzdCA9IGV4cGxpc3QuZXhwKCk7XG5cdFx0XHRcdHZhciBwYXJhbURlZiA9IGdhdGVEZWYucGFyYW1zIHx8IFtdO1xuXHRcdFx0XHRwYXJhbUxpc3QubWFwKGZ1bmN0aW9uKHBhcmFtSXRlbSwgcGFyYW1JbmRleCkge1xuXHRcdFx0XHRcdHZhciBwYXJhbVZhbHVlID0gcGFyYW1JdGVtLmdldFRleHQoKTtcblx0XHRcdFx0XHR2YXIgcGFyYW1OYW1lID0gcGFyYW1EZWYubGVuZ3RoID49IHBhcmFtSW5kZXggPyBwYXJhbURlZltwYXJhbUluZGV4XSA6IFwiXCI7XG5cdFx0XHRcdFx0aWYocGFyYW1OYW1lKSB7XG5cdFx0XHRcdFx0XHRwYXJhbXNbcGFyYW1OYW1lXSA9IHBhcmFtVmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgb3B0aW9ucyA9IHsgcGFyYW1zOiBwYXJhbXMsIGNvbmRpdGlvbjogY29uZGl0aW9uIHx8IHt9IH07XG5cblx0XHRpZihpZGxpc3QpIHtcblx0XHRcdC8vXG5cdFx0XHQvLyBhcmd1bWVudHMgYXJlIGVudGlyZSByZWdpc3RlcnNcblx0XHRcdC8vICAgZXhhbXBsZTogY3ggcSxyO1xuXHRcdFx0Ly9cblx0XHRcdHZhciBudW1CaXRzID0gc2VsZi5xcmVnTGVuKGlkbGlzdC5JRCgpWzBdLmdldFRleHQoKSk7XG5cdFx0XHRmb3IodmFyIHggPSAwOyB4IDwgbnVtQml0czsgeCsrKSB7XG5cdFx0XHRcdHZhciBhcmdzID0gW107XG5cdFx0XHRcdHZhciBjb3VudCA9IGlkbGlzdC5JRCgpLmxlbmd0aDtcblx0XHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcblx0XHRcdFx0XHRhcmdzLnB1c2goeyByZWc6IGlkbGlzdC5JRCgpW2ldLmdldFRleHQoKSwgYml0OiB4IH0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFyIHdpcmVzID0gW107XG5cdFx0XHRcdGFyZ3MubWFwKGZ1bmN0aW9uKGEpIHtcblx0XHRcdFx0XHR3aXJlcy5wdXNoKGEuYml0ICsgc2VsZi5xcmVnQmFzZShhLnJlZykpO1xuXHRcdFx0XHR9KTtcbi8qXG5cdFx0XHRcdGlmKCFzZWxmLmNvbXBhdGliaWxpdHlNb2RlKSB7XG5cdFx0XHRcdFx0c3dpdGNoKGdhdGVOYW1lKSB7XG5cdFx0XHRcdFx0XHRjYXNlIFwicnpcIjoge1xuXHRcdFx0XHRcdFx0XHRnYXRlTmFtZSA9IFwidTFcIjtcblx0XHRcdFx0XHRcdFx0aWYob3B0aW9ucyAmJiBvcHRpb25zLnBhcmFtcyAmJiBvcHRpb25zLnBhcmFtcy5waGkpIHtcblx0XHRcdFx0XHRcdFx0XHRvcHRpb25zLnBhcmFtcy5sYW1iZGEgPSBvcHRpb25zLnBhcmFtcy5waGk7XG5cdFx0XHRcdFx0XHRcdFx0ZGVsZXRlIG9wdGlvbnMucGFyYW1zLnBoaTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fTsgYnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG4qL1xuXHRcdFx0XHRzZWxmLmNpcmN1aXQuYWRkR2F0ZShnYXRlTmFtZSwgLTEsIHdpcmVzLCBvcHRpb25zKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBhcmd1bWVudHMgYXJlIHFiaXRzIG9yIG1peGVkXG5cdFx0aWYobWl4ZWRsaXN0KSB7XG5cdFx0XHRpZihtaXhlZGxpc3QuSUQoKS5sZW5ndGggIT0gbWl4ZWRsaXN0LklOVCgpLmxlbmd0aCkge1xuXHRcdFx0XHQvLyBcblx0XHRcdFx0Ly8gVE9ETzogbWl4ZWQgcWJpdHMgYW5kIGVudGlyZSByZWdpc3RlcnNcblx0XHRcdFx0Ly8gICAgICAgZXhhbXBsZTogY3ggcSxyWzBdO1xuXHRcdFx0XHQvL1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly9cblx0XHRcdFx0Ly8gcWJpdHMsIGZvciBleGFtcGxlOiBjeCBxWzBdLHJbMF07XG5cdFx0XHRcdC8vXG5cdFx0XHRcdHZhciBhcmdzID0gW107XG5cdFx0XHRcdHZhciBjb3VudCA9IG1peGVkbGlzdC5JRCgpLmxlbmd0aDtcblx0XHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcblx0XHRcdFx0XHRhcmdzLnB1c2goeyByZWc6IG1peGVkbGlzdC5JRCgpW2ldLmdldFRleHQoKSwgYml0OiBwYXJzZUludChtaXhlZGxpc3QuSU5UKClbaV0uZ2V0VGV4dCgpKSB9KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhciB3aXJlcyA9IFtdO1xuXHRcdFx0XHRhcmdzLm1hcChmdW5jdGlvbihhKSB7XG5cdFx0XHRcdFx0d2lyZXMucHVzaChhLmJpdCArIHNlbGYucXJlZ0Jhc2UoYS5yZWcpKTtcblx0XHRcdFx0fSk7XG4vKlxuXHRcdFx0XHRpZighc2VsZi5jb21wYXRpYmlsaXR5TW9kZSkge1xuXHRcdFx0XHRcdHN3aXRjaChnYXRlTmFtZSkge1xuXHRcdFx0XHRcdFx0Y2FzZSBcInJ6XCI6IHtcblx0XHRcdFx0XHRcdFx0Z2F0ZU5hbWUgPSBcInUxXCI7XG5cdFx0XHRcdFx0XHRcdGlmKG9wdGlvbnMgJiYgb3B0aW9ucy5wYXJhbXMgJiYgb3B0aW9ucy5wYXJhbXMucGhpKSB7XG5cdFx0XHRcdFx0XHRcdFx0b3B0aW9ucy5wYXJhbXMubGFtYmRhID0gb3B0aW9ucy5wYXJhbXMucGhpO1xuXHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSBvcHRpb25zLnBhcmFtcy5waGk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH07IGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuKi9cblx0XHRcdFx0c2VsZi5jaXJjdWl0LmFkZEdhdGUoZ2F0ZU5hbWUsIC0xLCB3aXJlcywgb3B0aW9ucyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG4vLyBFeGl0IGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI3FvcC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0UW9wID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI3VvcC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlclVvcCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciN1b3AuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdFVvcCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNhbnlsaXN0LlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyQW55bGlzdCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNhbnlsaXN0LlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRBbnlsaXN0ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2lkbGlzdC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlcklkbGlzdCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNpZGxpc3QuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdElkbGlzdCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNtaXhlZGxpc3QuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJNaXhlZGxpc3QgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjbWl4ZWRsaXN0LlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRNaXhlZGxpc3QgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjYXJndW1lbnQuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJBcmd1bWVudCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNhcmd1bWVudC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0QXJndW1lbnQgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZXhwbGlzdC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlckV4cGxpc3QgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZXhwbGlzdC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0RXhwbGlzdCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNleHAuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJFeHAgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZXhwLlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRFeHAgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjdW5hcnlvcC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlclVuYXJ5b3AgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjdW5hcnlvcC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0VW5hcnlvcCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBRQVNNSW1wb3J0O1xuIiwiLy8gR2VuZXJhdGVkIGZyb20gUUFTTS5nNCBieSBBTlRMUiA0LjcuMVxuLy8ganNoaW50IGlnbm9yZTogc3RhcnRcbnZhciBhbnRscjQgPSByZXF1aXJlKCdhbnRscjQvaW5kZXgnKTtcblxuXG52YXIgc2VyaWFsaXplZEFUTiA9IFtcIlxcdTAwMDNcXHU2MDhiXFx1YTcyYVxcdTgxMzNcXHViOWVkXFx1NDE3Y1xcdTNiZTdcXHU3Nzg2XFx1NTk2NFwiLFxuICAgIFwiXFx1MDAwMi1cXHUwMTI0XFxiXFx1MDAwMVxcdTAwMDRcXHUwMDAyXFx0XFx1MDAwMlxcdTAwMDRcXHUwMDAzXFx0XFx1MDAwM1xcdTAwMDRcIixcbiAgICBcIlxcdTAwMDRcXHRcXHUwMDA0XFx1MDAwNFxcdTAwMDVcXHRcXHUwMDA1XFx1MDAwNFxcdTAwMDZcXHRcXHUwMDA2XFx1MDAwNFxcdTAwMDdcXHRcIixcbiAgICBcIlxcdTAwMDdcXHUwMDA0XFxiXFx0XFxiXFx1MDAwNFxcdFxcdFxcdFxcdTAwMDRcXG5cXHRcXG5cXHUwMDA0XFx1MDAwYlxcdFxcdTAwMGJcXHUwMDA0XCIsXG4gICAgXCJcXGZcXHRcXGZcXHUwMDA0XFxyXFx0XFxyXFx1MDAwNFxcdTAwMGVcXHRcXHUwMDBlXFx1MDAwNFxcdTAwMGZcXHRcXHUwMDBmXFx1MDAwNFxcdTAwMTBcIixcbiAgICBcIlxcdFxcdTAwMTBcXHUwMDA0XFx1MDAxMVxcdFxcdTAwMTFcXHUwMDA0XFx1MDAxMlxcdFxcdTAwMTJcXHUwMDA0XFx1MDAxM1xcdFxcdTAwMTNcIixcbiAgICBcIlxcdTAwMDRcXHUwMDE0XFx0XFx1MDAxNFxcdTAwMDRcXHUwMDE1XFx0XFx1MDAxNVxcdTAwMDRcXHUwMDE2XFx0XFx1MDAxNlxcdTAwMDRcXHUwMDE3XCIsXG4gICAgXCJcXHRcXHUwMDE3XFx1MDAwNFxcdTAwMThcXHRcXHUwMDE4XFx1MDAwNFxcdTAwMTlcXHRcXHUwMDE5XFx1MDAwNFxcdTAwMWFcXHRcXHUwMDFhXCIsXG4gICAgXCJcXHUwMDA0XFx1MDAxYlxcdFxcdTAwMWJcXHUwMDA0XFx1MDAxY1xcdFxcdTAwMWNcXHUwMDA0XFx1MDAxZFxcdFxcdTAwMWRcXHUwMDA0XFx1MDAxZVwiLFxuICAgIFwiXFx0XFx1MDAxZVxcdTAwMDRcXHUwMDFmXFx0XFx1MDAxZlxcdTAwMDQgXFx0IFxcdTAwMDQhXFx0IVxcdTAwMDRcXFwiXFx0XFxcIlxcdTAwMDQjXCIsXG4gICAgXCJcXHQjXFx1MDAwNCRcXHQkXFx1MDAwNCVcXHQlXFx1MDAwNCZcXHQmXFx1MDAwNFxcJ1xcdFxcJ1xcdTAwMDQoXFx0KFxcdTAwMDQpXFx0KVxcdTAwMDRcIixcbiAgICBcIipcXHQqXFx1MDAwNCtcXHQrXFx1MDAwNCxcXHQsXFx1MDAwM1xcdTAwMDJcXHUwMDAzXFx1MDAwMlxcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcIixcbiAgICBcIlxcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwNFwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDRcXHUwMDAzXFx1MDAwNVxcdTAwMDNcXHUwMDA1XFx1MDAwM1xcdTAwMDZcXHUwMDAzXFx1MDAwNlxcdTAwMDNcXHUwMDA3XCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwN1xcdTAwMDNcXHUwMDA3XFx1MDAwM1xcYlxcdTAwMDNcXGJcXHUwMDAzXFxiXFx1MDAwM1xcdFxcdTAwMDNcXHRcXHUwMDAzXCIsXG4gICAgXCJcXHRcXHUwMDAzXFx0XFx1MDAwM1xcdFxcdTAwMDNcXHRcXHUwMDAzXFx0XFx1MDAwM1xcdFxcdTAwMDNcXG5cXHUwMDAzXFxuXFx1MDAwM1xcblxcdTAwMDNcIixcbiAgICBcIlxcblxcdTAwMDNcXG5cXHUwMDAzXFxuXFx1MDAwM1xcblxcdTAwMDNcXG5cXHUwMDAzXFxuXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcIixcbiAgICBcIlxcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXFx1MDAwM1wiLFxuICAgIFwiXFxmXFx1MDAwM1xcZlxcdTAwMDNcXGZcXHUwMDAzXFxmXFx1MDAwM1xcZlxcdTAwMDNcXHJcXHUwMDAzXFxyXFx1MDAwM1xcdTAwMGVcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDBlXFx1MDAwM1xcdTAwMGZcXHUwMDAzXFx1MDAwZlxcdTAwMDNcXHUwMDBmXFx1MDAwM1xcdTAwMGZcXHUwMDAzXFx1MDAwZlxcdTAwMDNcIixcbiAgICBcIlxcdTAwMTBcXHUwMDAzXFx1MDAxMFxcdTAwMDNcXHUwMDEwXFx1MDAwM1xcdTAwMTBcXHUwMDAzXFx1MDAxMFxcdTAwMDNcXHUwMDExXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAxMVxcdTAwMDNcXHUwMDEyXFx1MDAwM1xcdTAwMTJcXHUwMDAzXFx1MDAxMlxcdTAwMDNcXHUwMDEyXFx1MDAwM1xcdTAwMTJcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDEyXFx1MDAwM1xcdTAwMTJcXHUwMDAzXFx1MDAxMlxcdTAwMDNcXHUwMDEzXFx1MDAwM1xcdTAwMTNcXHUwMDAzXFx1MDAxM1xcdTAwMDNcIixcbiAgICBcIlxcdTAwMTRcXHUwMDAzXFx1MDAxNFxcdTAwMDNcXHUwMDE0XFx1MDAwM1xcdTAwMTRcXHUwMDAzXFx1MDAxNFxcdTAwMDNcXHUwMDE0XFx1MDAwM1wiLFxuICAgIFwiXFx1MDAxNVxcdTAwMDNcXHUwMDE1XFx1MDAwM1xcdTAwMTZcXHUwMDAzXFx1MDAxNlxcdTAwMDNcXHUwMDE2XFx1MDAwM1xcdTAwMTdcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDE3XFx1MDAwM1xcdTAwMThcXHUwMDAzXFx1MDAxOFxcdTAwMDNcXHUwMDE5XFx1MDAwM1xcdTAwMTlcXHUwMDAzXFx1MDAxYVxcdTAwMDNcIixcbiAgICBcIlxcdTAwMWFcXHUwMDAzXFx1MDAxYlxcdTAwMDNcXHUwMDFiXFx1MDAwM1xcdTAwMWNcXHUwMDAzXFx1MDAxY1xcdTAwMDNcXHUwMDFkXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAxZFxcdTAwMDNcXHUwMDFkXFx1MDAwM1xcdTAwMWRcXHUwMDAzXFx1MDAxZVxcdTAwMDNcXHUwMDFlXFx1MDAwM1xcdTAwMWVcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDFlXFx1MDAwM1xcdTAwMWZcXHUwMDAzXFx1MDAxZlxcdTAwMDNcXHUwMDFmXFx1MDAwM1xcdTAwMWZcXHUwMDAzIFxcdTAwMDNcIixcbiAgICBcIiBcXHUwMDAzIFxcdTAwMDMgXFx1MDAwMyFcXHUwMDAzIVxcdTAwMDMhXFx1MDAwM1xcXCJcXHUwMDAzXFxcIlxcdTAwMDNcXFwiXFx1MDAwM1xcXCJcIixcbiAgICBcIlxcdTAwMDNcXFwiXFx1MDAwMyNcXHUwMDAzI1xcdTAwMDMjXFx1MDAwMyRcXHUwMDAzJFxcdTAwMDMkXFx1MDAwMyRcXHUwMDAzJFxcdTAwMDNcIixcbiAgICBcIiRcXHUwMDAzJFxcdTAwMDUkXFx1MDBlMVxcbiRcXHUwMDAzJVxcdTAwMDMlXFx1MDAwMyVcXHUwMDA2JVxcdTAwZTZcXG4lXFxyJVxcdTAwMGVcIixcbiAgICBcIiVcXHUwMGU3XFx1MDAwMyZcXHUwMDAzJlxcdTAwMDMmXFx1MDAwNiZcXHUwMGVkXFxuJlxcciZcXHUwMDBlJlxcdTAwZWVcXHUwMDAzXFwnXCIsXG4gICAgXCJcXHUwMDA2XFwnXFx1MDBmMlxcblxcJ1xcclxcJ1xcdTAwMGVcXCdcXHUwMGYzXFx1MDAwMyhcXHUwMDAzKFxcdTAwMDcoXFx1MDBmOFxcbihcXGZcIixcbiAgICBcIihcXHUwMDBlKFxcdTAwZmJcXHUwMDBiKFxcdTAwMDMpXFx1MDAwNilcXHUwMGZlXFxuKVxccilcXHUwMDBlKVxcdTAwZmZcXHUwMDAzKVwiLFxuICAgIFwiXFx1MDAwMylcXHUwMDAzKlxcdTAwMDMqXFx1MDAwNipcXHUwMTA2XFxuKlxccipcXHUwMDBlKlxcdTAxMDdcXHUwMDAzKlxcdTAwMDMqXCIsXG4gICAgXCJcXHUwMDAzK1xcdTAwMDMrXFx1MDAwMytcXHUwMDAzK1xcdTAwMDcrXFx1MDExMFxcbitcXGYrXFx1MDAwZStcXHUwMTEzXFx1MDAwYitcIixcbiAgICBcIlxcdTAwMDMrXFx1MDAwMytcXHUwMDAzK1xcdTAwMDMrXFx1MDAwMytcXHUwMDAzLFxcdTAwMDMsXFx1MDAwMyxcXHUwMDAzLFxcdTAwMDdcIixcbiAgICBcIixcXHUwMTFlXFxuLFxcZixcXHUwMDBlLFxcdTAxMjFcXHUwMDBiLFxcdTAwMDMsXFx1MDAwMyxcXHUwMDAzXFx1MDExMVxcdTAwMDItXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDVcXHUwMDA0XFx1MDAwN1xcdTAwMDVcXHRcXHUwMDA2XFx1MDAwYlxcdTAwMDdcXHJcXGJcXHUwMDBmXFx0XFx1MDAxMVwiLFxuICAgIFwiXFxuXFx1MDAxM1xcdTAwMGJcXHUwMDE1XFxmXFx1MDAxN1xcclxcdTAwMTlcXHUwMDBlXFx1MDAxYlxcdTAwMGZcXHUwMDFkXFx1MDAxMFxcdTAwMWZcIixcbiAgICBcIlxcdTAwMTEhXFx1MDAxMiNcXHUwMDEzJVxcdTAwMTRcXCdcXHUwMDE1KVxcdTAwMTYrXFx1MDAxNy1cXHUwMDE4L1xcdTAwMTkxXFx1MDAxYVwiLFxuICAgIFwiM1xcdTAwMWI1XFx1MDAxYzdcXHUwMDFkOVxcdTAwMWU7XFx1MDAxZj0gPyFBXFxcIkMjRSRHJUkmS1xcJ00oTylRKlMrVSxXLVxcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXG5cXHUwMDAzXFx1MDAwMjI7XFx1MDAwNFxcdTAwMDJHR2dnXFx1MDAwNFxcdTAwMDItLS8vXFx1MDAwM1xcdTAwMDJjXCIsXG4gICAgXCJ8XFx1MDAwNlxcdTAwMDIyO0NcXFxcYWFjfFxcdTAwMDVcXHUwMDAyXFx1MDAwYlxcZlxcdTAwMGVcXHUwMDBmXFxcIlxcXCJcXHUwMDA3XFx1MDAwMlwiLFxuICAgIFwiLzAyO0NcXFxcYWFjfFxcdTAwMDRcXHUwMDAyXFxmXFxmXFx1MDAwZlxcdTAwMGZcXHUwMDAyXFx1MDEyZFxcdTAwMDJcXHUwMDAzXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDdcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx0XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDBiXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcclxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwZlxcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDExXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDEzXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMTVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMTdcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAxOVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAxYlxcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDFkXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDFmXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMiFcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMiNcXHUwMDAzXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyJVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFwnXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMilcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMitcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyLVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyL1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCIxXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDIzXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDI1XFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMjdcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMjlcXHUwMDAzXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyO1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyPVxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDI/XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDJBXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMkNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMkVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiR1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAySVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyS1xcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDJNXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDJPXFx1MDAwM1xcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMlFcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMlNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyVVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyV1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDNZXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDVbXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDdcIixcbiAgICBcImJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx0ZFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDBiZlxcdTAwMDNcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxccmhcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwZmtcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDExblxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDEzdlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDE1XCIsXG4gICAgXCJcXHUwMDdmXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMTdcXHUwMDg3XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMTlcIixcbiAgICBcIlxcdTAwOGNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAxYlxcdTAwOGVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAxZFwiLFxuICAgIFwiXFx1MDA5MFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDFmXFx1MDA5NVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDIhXCIsXG4gICAgXCJcXHUwMDlhXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMiNcXHUwMDljXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMiVcXHUwMGE0XCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFwnXFx1MDBhN1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDIpXFx1MDBhZFxcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMitcXHUwMGFmXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMi1cXHUwMGIyXFx1MDAwM1xcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyL1xcdTAwYjRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyMVxcdTAwYjZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDIzXFx1MDBiOFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDI1XFx1MDBiYVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIjdcXHUwMGJjXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMjlcXHUwMGJlXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMjtcXHUwMGMyXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyPVxcdTAwYzZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyP1xcdTAwY2FcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDJBXFx1MDBjZVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJDXFx1MDBkMVxcdTAwMDNcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMkVcXHUwMGQ2XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMkdcXHUwMGUwXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAySVxcdTAwZTJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyS1xcdTAwZTlcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJNXFx1MDBmMVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJPXFx1MDBmNVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJRXFx1MDBmZFwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlNcXHUwMTAzXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlVcXHUwMTBiXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyV1xcdTAxMTlcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyWVpcXHUwMDA3XFx1MDA3ZlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJaXFx1MDAwNFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJbXFxcXFxcdTAwMDdxXFx1MDAwMlxcdTAwMDJcXFxcXVxcdTAwMDdcIixcbiAgICBcInJcXHUwMDAyXFx1MDAwMl1eXFx1MDAwN2NcXHUwMDAyXFx1MDAwMl5fXFx1MDAwN3NcXHUwMDAyXFx1MDAwMl9gXFx1MDAwN3dcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyYGFcXHUwMDA3Z1xcdTAwMDJcXHUwMDAyYVxcdTAwMDZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyYmNcXHUwMDA3PVwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJjXFxiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMmRlXFx1MDAwNypcXHUwMDAyXFx1MDAwMmVcXG5cXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDJmZ1xcdTAwMDcrXFx1MDAwMlxcdTAwMDJnXFxmXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMmhcIixcbiAgICBcImlcXHUwMDA3a1xcdTAwMDJcXHUwMDAyaWpcXHUwMDA3aFxcdTAwMDJcXHUwMDAyalxcdTAwMGVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJrbFxcdTAwMDc/XFx1MDAwMlxcdTAwMDJsbVxcdTAwMDc/XFx1MDAwMlxcdTAwMDJtXFx1MDAxMFxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMm5vXFx1MDAwN2RcXHUwMDAyXFx1MDAwMm9wXFx1MDAwN2NcXHUwMDAyXFx1MDAwMnBxXFx1MDAwN3RcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwicXJcXHUwMDA3dFxcdTAwMDJcXHUwMDAycnNcXHUwMDA3a1xcdTAwMDJcXHUwMDAyc3RcXHUwMDA3Z1xcdTAwMDJcXHUwMDAydHVcXHUwMDA3XCIsXG4gICAgXCJ0XFx1MDAwMlxcdTAwMDJ1XFx1MDAxMlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJ2d1xcdTAwMDdRXFx1MDAwMlxcdTAwMDJ3eFwiLFxuICAgIFwiXFx1MDAwN1JcXHUwMDAyXFx1MDAwMnh5XFx1MDAwN0dcXHUwMDAyXFx1MDAwMnl6XFx1MDAwN1BcXHUwMDAyXFx1MDAwMnp7XFx1MDAwN1wiLFxuICAgIFwiU1xcdTAwMDJcXHUwMDAye3xcXHUwMDA3Q1xcdTAwMDJcXHUwMDAyfH1cXHUwMDA3VVxcdTAwMDJcXHUwMDAyfX5cXHUwMDA3T1xcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJ+XFx1MDAxNFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDdmXFx1MDA4MFxcdTAwMDdrXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwODBcXHUwMDgxXFx1MDAwN3BcXHUwMDAyXFx1MDAwMlxcdTAwODFcXHUwMDgyXFx1MDAwN2VcXHUwMDAyXFx1MDAwMlxcdTAwODJcIixcbiAgICBcIlxcdTAwODNcXHUwMDA3blxcdTAwMDJcXHUwMDAyXFx1MDA4M1xcdTAwODRcXHUwMDA3d1xcdTAwMDJcXHUwMDAyXFx1MDA4NFxcdTAwODVcIixcbiAgICBcIlxcdTAwMDdmXFx1MDAwMlxcdTAwMDJcXHUwMDg1XFx1MDA4NlxcdTAwMDdnXFx1MDAwMlxcdTAwMDJcXHUwMDg2XFx1MDAxNlxcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwODdcXHUwMDg4XFx1MDAwN3NcXHUwMDAyXFx1MDAwMlxcdTAwODhcXHUwMDg5XFx1MDAwN1wiLFxuICAgIFwidFxcdTAwMDJcXHUwMDAyXFx1MDA4OVxcdTAwOGFcXHUwMDA3Z1xcdTAwMDJcXHUwMDAyXFx1MDA4YVxcdTAwOGJcXHUwMDA3aVxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDhiXFx1MDAxOFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDhjXFx1MDA4ZFxcdTAwMDddXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwOGRcXHUwMDFhXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwOGVcXHUwMDhmXFx1MDAwN19cXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDA4ZlxcdTAwMWNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDA5MFxcdTAwOTFcXHUwMDA3ZVxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDkxXFx1MDA5MlxcdTAwMDd0XFx1MDAwMlxcdTAwMDJcXHUwMDkyXFx1MDA5M1xcdTAwMDdnXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwOTNcXHUwMDk0XFx1MDAwN2lcXHUwMDAyXFx1MDAwMlxcdTAwOTRcXHUwMDFlXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDA5NVxcdTAwOTZcXHUwMDA3aVxcdTAwMDJcXHUwMDAyXFx1MDA5NlxcdTAwOTdcXHUwMDA3Y1xcdTAwMDJcXHUwMDAyXFx1MDA5N1wiLFxuICAgIFwiXFx1MDA5OFxcdTAwMDd2XFx1MDAwMlxcdTAwMDJcXHUwMDk4XFx1MDA5OVxcdTAwMDdnXFx1MDAwMlxcdTAwMDJcXHUwMDk5IFxcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwOWFcXHUwMDliXFx1MDAwN31cXHUwMDAyXFx1MDAwMlxcdTAwOWJcXFwiXFx1MDAwM1xcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDA5Y1xcdTAwOWRcXHUwMDA3b1xcdTAwMDJcXHUwMDAyXFx1MDA5ZFxcdTAwOWVcXHUwMDA3Z1xcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDllXFx1MDA5ZlxcdTAwMDdjXFx1MDAwMlxcdTAwMDJcXHUwMDlmXFx1MDBhMFxcdTAwMDd1XFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwYTBcXHUwMGExXFx1MDAwN3dcXHUwMDAyXFx1MDAwMlxcdTAwYTFcXHUwMGEyXFx1MDAwN3RcXHUwMDAyXFx1MDAwMlxcdTAwYTJcIixcbiAgICBcIlxcdTAwYTNcXHUwMDA3Z1xcdTAwMDJcXHUwMDAyXFx1MDBhMyRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBhNFxcdTAwYTVcIixcbiAgICBcIlxcdTAwMDcvXFx1MDAwMlxcdTAwMDJcXHUwMGE1XFx1MDBhNlxcdTAwMDdAXFx1MDAwMlxcdTAwMDJcXHUwMGE2JlxcdTAwMDNcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwYTdcXHUwMGE4XFx1MDAwN3RcXHUwMDAyXFx1MDAwMlxcdTAwYThcXHUwMGE5XFx1MDAwN2dcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBhOVxcdTAwYWFcXHUwMDA3dVxcdTAwMDJcXHUwMDAyXFx1MDBhYVxcdTAwYWJcXHUwMDA3Z1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGFiXFx1MDBhY1xcdTAwMDd2XFx1MDAwMlxcdTAwMDJcXHUwMGFjKFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGFkXCIsXG4gICAgXCJcXHUwMGFlXFx1MDAwN1dcXHUwMDAyXFx1MDAwMlxcdTAwYWUqXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwYWZcXHUwMGIwXCIsXG4gICAgXCJcXHUwMDA3RVxcdTAwMDJcXHUwMDAyXFx1MDBiMFxcdTAwYjFcXHUwMDA3WlxcdTAwMDJcXHUwMDAyXFx1MDBiMSxcXHUwMDAzXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMGIyXFx1MDBiM1xcdTAwMDcuXFx1MDAwMlxcdTAwMDJcXHUwMGIzLlxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYjRcXHUwMGI1XFx1MDAwN2BcXHUwMDAyXFx1MDAwMlxcdTAwYjUwXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBiNlxcdTAwYjdcXHUwMDA3LFxcdTAwMDJcXHUwMDAyXFx1MDBiNzJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBiOFwiLFxuICAgIFwiXFx1MDBiOVxcdTAwMDcxXFx1MDAwMlxcdTAwMDJcXHUwMGI5NFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGJhXFx1MDBiYlwiLFxuICAgIFwiXFx1MDAwNy1cXHUwMDAyXFx1MDAwMlxcdTAwYmI2XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwYmNcXHUwMGJkXFx1MDAwN1wiLFxuICAgIFwiL1xcdTAwMDJcXHUwMDAyXFx1MDBiZDhcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBiZVxcdTAwYmZcXHUwMDA3dVxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGJmXFx1MDBjMFxcdTAwMDdrXFx1MDAwMlxcdTAwMDJcXHUwMGMwXFx1MDBjMVxcdTAwMDdwXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwYzE6XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwYzJcXHUwMGMzXFx1MDAwN2VcXHUwMDAyXFx1MDAwMlxcdTAwYzNcIixcbiAgICBcIlxcdTAwYzRcXHUwMDA3cVxcdTAwMDJcXHUwMDAyXFx1MDBjNFxcdTAwYzVcXHUwMDA3dVxcdTAwMDJcXHUwMDAyXFx1MDBjNTxcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGM2XFx1MDBjN1xcdTAwMDd2XFx1MDAwMlxcdTAwMDJcXHUwMGM3XFx1MDBjOFxcdTAwMDdcIixcbiAgICBcImNcXHUwMDAyXFx1MDAwMlxcdTAwYzhcXHUwMGM5XFx1MDAwN3BcXHUwMDAyXFx1MDAwMlxcdTAwYzk+XFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBjYVxcdTAwY2JcXHUwMDA3Z1xcdTAwMDJcXHUwMDAyXFx1MDBjYlxcdTAwY2NcXHUwMDA3elxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGNjXFx1MDBjZFxcdTAwMDdyXFx1MDAwMlxcdTAwMDJcXHUwMGNkQFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGNlXCIsXG4gICAgXCJcXHUwMGNmXFx1MDAwN25cXHUwMDAyXFx1MDAwMlxcdTAwY2ZcXHUwMGQwXFx1MDAwN3BcXHUwMDAyXFx1MDAwMlxcdTAwZDBCXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBkMVxcdTAwZDJcXHUwMDA3dVxcdTAwMDJcXHUwMDAyXFx1MDBkMlxcdTAwZDNcXHUwMDA3XCIsXG4gICAgXCJzXFx1MDAwMlxcdTAwMDJcXHUwMGQzXFx1MDBkNFxcdTAwMDd0XFx1MDAwMlxcdTAwMDJcXHUwMGQ0XFx1MDBkNVxcdTAwMDd2XFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwZDVEXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZDZcXHUwMGQ3XFx1MDAwN3JcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBkN1xcdTAwZDhcXHUwMDA3a1xcdTAwMDJcXHUwMDAyXFx1MDBkOEZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBkOVwiLFxuICAgIFwiXFx1MDBkYVxcdTAwMDVJJVxcdTAwMDJcXHUwMGRhXFx1MDBkYlxcdTAwMDVLJlxcdTAwMDJcXHUwMGRiXFx1MDBlMVxcdTAwMDNcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwZGNcXHUwMGRkXFx1MDAwNU1cXCdcXHUwMDAyXFx1MDBkZFxcdTAwZGVcXHUwMDA1SyZcXHUwMDAyXFx1MDBkZVwiLFxuICAgIFwiXFx1MDBlMVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGRmXFx1MDBlMVxcdTAwMDVJJVxcdTAwMDJcXHUwMGUwXFx1MDBkOVwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZTBcXHUwMGRjXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZTBcXHUwMGRmXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBlMUhcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBlMlxcdTAwZTNcIixcbiAgICBcIlxcdTAwMDVNXFwnXFx1MDAwMlxcdTAwZTNcXHUwMGU1XFx1MDAwNzBcXHUwMDAyXFx1MDAwMlxcdTAwZTRcXHUwMGU2XFx0XFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGU1XFx1MDBlNFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGU2XFx1MDBlN1xcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwZTdcXHUwMGU1XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZTdcXHUwMGU4XFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBlOEpcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBlOVxcdTAwZWFcXHRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwZWFcXHUwMGVjXFx0XFx1MDAwNFxcdTAwMDJcXHUwMDAyXFx1MDBlYlxcdTAwZWRcXHRcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGVjXCIsXG4gICAgXCJcXHUwMGViXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZWRcXHUwMGVlXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZWVcIixcbiAgICBcIlxcdTAwZWNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBlZVxcdTAwZWZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBlZlwiLFxuICAgIFwiTFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGYwXFx1MDBmMlxcdFxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZjFcXHUwMGYwXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBmMlxcdTAwZjNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBmM1xcdTAwZjFcIixcbiAgICBcIlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGYzXFx1MDBmNFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGY0TlwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZjVcXHUwMGY5XFx0XFx1MDAwNVxcdTAwMDJcXHUwMDAyXFx1MDBmNlxcdTAwZjhcIixcbiAgICBcIlxcdFxcdTAwMDZcXHUwMDAyXFx1MDAwMlxcdTAwZjdcXHUwMGY2XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZjhcXHUwMGZiXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBmOVxcdTAwZjdcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBmOVxcdTAwZmFcIixcbiAgICBcIlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGZhUFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGZiXFx1MDBmOVwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZmNcXHUwMGZlXFx0XFx1MDAwN1xcdTAwMDJcXHUwMDAyXFx1MDBmZFxcdTAwZmNcIixcbiAgICBcIlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGZlXFx1MDBmZlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGZmXFx1MDBmZFwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZmZcXHUwMTAwXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMDBcXHUwMTAxXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEwMVxcdTAxMDJcXGIpXFx1MDAwMlxcdTAwMDJcXHUwMTAyUlxcdTAwMDNcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAxMDNcXHUwMTA1XFx1MDAwNyRcXHUwMDAyXFx1MDAwMlxcdTAxMDRcXHUwMTA2XFx0XFxiXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAxMDVcXHUwMTA0XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMDZcXHUwMTA3XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDEwN1xcdTAxMDVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEwN1xcdTAxMDhcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMTA4XFx1MDEwOVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTA5XFx1MDEwYVxcdTAwMDckXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAxMGFUXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMGJcXHUwMTBjXFx1MDAwNzFcXHUwMDAyXFx1MDAwMlxcdTAxMGNcIixcbiAgICBcIlxcdTAxMGRcXHUwMDA3LFxcdTAwMDJcXHUwMDAyXFx1MDEwZFxcdTAxMTFcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEwZVwiLFxuICAgIFwiXFx1MDExMFxcdTAwMGJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTBmXFx1MDEwZVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTEwXCIsXG4gICAgXCJcXHUwMTEzXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMTFcXHUwMTEyXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMTFcIixcbiAgICBcIlxcdTAxMGZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExMlxcdTAxMTRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExM1wiLFxuICAgIFwiXFx1MDExMVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTE0XFx1MDExNVxcdTAwMDcsXFx1MDAwMlxcdTAwMDJcXHUwMTE1XCIsXG4gICAgXCJcXHUwMTE2XFx1MDAwNzFcXHUwMDAyXFx1MDAwMlxcdTAxMTZcXHUwMTE3XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMTdcIixcbiAgICBcIlxcdTAxMThcXGIrXFx1MDAwMlxcdTAwMDJcXHUwMTE4VlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTE5XFx1MDExYVxcdTAwMDdcIixcbiAgICBcIjFcXHUwMDAyXFx1MDAwMlxcdTAxMWFcXHUwMTFiXFx1MDAwNzFcXHUwMDAyXFx1MDAwMlxcdTAxMWJcXHUwMTFmXFx1MDAwM1xcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDExY1xcdTAxMWVcXG5cXHRcXHUwMDAyXFx1MDAwMlxcdTAxMWRcXHUwMTFjXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDExZVxcdTAxMjFcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExZlxcdTAxMWRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMTFmXFx1MDEyMFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTIwXFx1MDEyMlxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAxMjFcXHUwMTFmXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMjJcXHUwMTIzXFxiLFxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMTIzWFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXGZcXHUwMDAyXFx1MDBlMFxcdTAwZTdcXHUwMGVlXFx1MDBmM1xcdTAwZjlcIixcbiAgICBcIlxcdTAwZmZcXHUwMTA3XFx1MDExMVxcdTAxMWZcXHUwMDAzXFxiXFx1MDAwMlxcdTAwMDJcIl0uam9pbihcIlwiKTtcblxuXG52YXIgYXRuID0gbmV3IGFudGxyNC5hdG4uQVRORGVzZXJpYWxpemVyKCkuZGVzZXJpYWxpemUoc2VyaWFsaXplZEFUTik7XG5cbnZhciBkZWNpc2lvbnNUb0RGQSA9IGF0bi5kZWNpc2lvblRvU3RhdGUubWFwKCBmdW5jdGlvbihkcywgaW5kZXgpIHsgcmV0dXJuIG5ldyBhbnRscjQuZGZhLkRGQShkcywgaW5kZXgpOyB9KTtcblxuZnVuY3Rpb24gUUFTTUxleGVyKGlucHV0KSB7XG5cdGFudGxyNC5MZXhlci5jYWxsKHRoaXMsIGlucHV0KTtcbiAgICB0aGlzLl9pbnRlcnAgPSBuZXcgYW50bHI0LmF0bi5MZXhlckFUTlNpbXVsYXRvcih0aGlzLCBhdG4sIGRlY2lzaW9uc1RvREZBLCBuZXcgYW50bHI0LlByZWRpY3Rpb25Db250ZXh0Q2FjaGUoKSk7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cblFBU01MZXhlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5MZXhlci5wcm90b3R5cGUpO1xuUUFTTUxleGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFFBU01MZXhlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFFBU01MZXhlci5wcm90b3R5cGUsIFwiYXRuXCIsIHtcbiAgICAgICAgZ2V0IDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF0bjtcbiAgICAgICAgfVxufSk7XG5cblFBU01MZXhlci5FT0YgPSBhbnRscjQuVG9rZW4uRU9GO1xuUUFTTUxleGVyLlRfXzAgPSAxO1xuUUFTTUxleGVyLlRfXzEgPSAyO1xuUUFTTUxleGVyLlRfXzIgPSAzO1xuUUFTTUxleGVyLlRfXzMgPSA0O1xuUUFTTUxleGVyLlRfXzQgPSA1O1xuUUFTTUxleGVyLlRfXzUgPSA2O1xuUUFTTUxleGVyLlRfXzYgPSA3O1xuUUFTTUxleGVyLlRfXzcgPSA4O1xuUUFTTUxleGVyLlRfXzggPSA5O1xuUUFTTUxleGVyLlRfXzkgPSAxMDtcblFBU01MZXhlci5UX18xMCA9IDExO1xuUUFTTUxleGVyLlRfXzExID0gMTI7XG5RQVNNTGV4ZXIuVF9fMTIgPSAxMztcblFBU01MZXhlci5UX18xMyA9IDE0O1xuUUFTTUxleGVyLlRfXzE0ID0gMTU7XG5RQVNNTGV4ZXIuVF9fMTUgPSAxNjtcblFBU01MZXhlci5UX18xNiA9IDE3O1xuUUFTTUxleGVyLlRfXzE3ID0gMTg7XG5RQVNNTGV4ZXIuVF9fMTggPSAxOTtcblFBU01MZXhlci5UX18xOSA9IDIwO1xuUUFTTUxleGVyLlRfXzIwID0gMjE7XG5RQVNNTGV4ZXIuVF9fMjEgPSAyMjtcblFBU01MZXhlci5UX18yMiA9IDIzO1xuUUFTTUxleGVyLlRfXzIzID0gMjQ7XG5RQVNNTGV4ZXIuVF9fMjQgPSAyNTtcblFBU01MZXhlci5UX18yNSA9IDI2O1xuUUFTTUxleGVyLlRfXzI2ID0gMjc7XG5RQVNNTGV4ZXIuVF9fMjcgPSAyODtcblFBU01MZXhlci5UX18yOCA9IDI5O1xuUUFTTUxleGVyLlRfXzI5ID0gMzA7XG5RQVNNTGV4ZXIuVF9fMzAgPSAzMTtcblFBU01MZXhlci5UX18zMSA9IDMyO1xuUUFTTUxleGVyLlRfXzMyID0gMzM7XG5RQVNNTGV4ZXIuUEkgPSAzNDtcblFBU01MZXhlci5SRUFMID0gMzU7XG5RQVNNTGV4ZXIuU1VCUkVBTCA9IDM2O1xuUUFTTUxleGVyLkVYUFJFQUwgPSAzNztcblFBU01MZXhlci5JTlQgPSAzODtcblFBU01MZXhlci5JRCA9IDM5O1xuUUFTTUxleGVyLldTID0gNDA7XG5RQVNNTGV4ZXIuRklMRU5BTUUgPSA0MTtcblFBU01MZXhlci5DT01NRU5UID0gNDI7XG5RQVNNTGV4ZXIuTElORV9DT01NRU5UID0gNDM7XG5cblFBU01MZXhlci5wcm90b3R5cGUuY2hhbm5lbE5hbWVzID0gWyBcIkRFRkFVTFRfVE9LRU5fQ0hBTk5FTFwiLCBcIkhJRERFTlwiIF07XG5cblFBU01MZXhlci5wcm90b3R5cGUubW9kZU5hbWVzID0gWyBcIkRFRkFVTFRfTU9ERVwiIF07XG5cblFBU01MZXhlci5wcm90b3R5cGUubGl0ZXJhbE5hbWVzID0gWyBudWxsLCBcIid9J1wiLCBcIidvcGFxdWUnXCIsIFwiJzsnXCIsIFwiJygnXCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiJyknXCIsIFwiJ2lmJ1wiLCBcIic9PSdcIiwgXCInYmFycmllcidcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCInT1BFTlFBU00nXCIsIFwiJ2luY2x1ZGUnXCIsIFwiJ3FyZWcnXCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiJ1snXCIsIFwiJ10nXCIsIFwiJ2NyZWcnXCIsIFwiJ2dhdGUnXCIsIFwiJ3snXCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiJ21lYXN1cmUnXCIsIFwiJy0+J1wiLCBcIidyZXNldCdcIiwgXCInVSdcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCInQ1gnXCIsIFwiJywnXCIsIFwiJ14nXCIsIFwiJyonXCIsIFwiJy8nXCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiJysnXCIsIFwiJy0nXCIsIFwiJ3NpbidcIiwgXCInY29zJ1wiLCBcIid0YW4nXCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiJ2V4cCdcIiwgXCInbG4nXCIsIFwiJ3NxcnQnXCIsIFwiJ3BpJ1wiIF07XG5cblFBU01MZXhlci5wcm90b3R5cGUuc3ltYm9saWNOYW1lcyA9IFsgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLCBudWxsLCBudWxsLCBudWxsLCBcIlBJXCIsIFwiUkVBTFwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTVUJSRUFMXCIsIFwiRVhQUkVBTFwiLCBcIklOVFwiLCBcIklEXCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIldTXCIsIFwiRklMRU5BTUVcIiwgXCJDT01NRU5UXCIsIFwiTElORV9DT01NRU5UXCIgXTtcblxuUUFTTUxleGVyLnByb3RvdHlwZS5ydWxlTmFtZXMgPSBbIFwiVF9fMFwiLCBcIlRfXzFcIiwgXCJUX18yXCIsIFwiVF9fM1wiLCBcIlRfXzRcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJUX181XCIsIFwiVF9fNlwiLCBcIlRfXzdcIiwgXCJUX184XCIsIFwiVF9fOVwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRfXzEwXCIsIFwiVF9fMTFcIiwgXCJUX18xMlwiLCBcIlRfXzEzXCIsIFwiVF9fMTRcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJUX18xNVwiLCBcIlRfXzE2XCIsIFwiVF9fMTdcIiwgXCJUX18xOFwiLCBcIlRfXzE5XCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVF9fMjBcIiwgXCJUX18yMVwiLCBcIlRfXzIyXCIsIFwiVF9fMjNcIiwgXCJUX18yNFwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRfXzI1XCIsIFwiVF9fMjZcIiwgXCJUX18yN1wiLCBcIlRfXzI4XCIsIFwiVF9fMjlcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJUX18zMFwiLCBcIlRfXzMxXCIsIFwiVF9fMzJcIiwgXCJQSVwiLCBcIlJFQUxcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTVUJSRUFMXCIsIFwiRVhQUkVBTFwiLCBcIklOVFwiLCBcIklEXCIsIFwiV1NcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJGSUxFTkFNRVwiLCBcIkNPTU1FTlRcIiwgXCJMSU5FX0NPTU1FTlRcIiBdO1xuXG5RQVNNTGV4ZXIucHJvdG90eXBlLmdyYW1tYXJGaWxlTmFtZSA9IFwiUUFTTS5nNFwiO1xuXG5cblxuZXhwb3J0cy5RQVNNTGV4ZXIgPSBRQVNNTGV4ZXI7XG5cbiIsIi8vIEdlbmVyYXRlZCBmcm9tIFFBU00uZzQgYnkgQU5UTFIgNC43LjFcbi8vIGpzaGludCBpZ25vcmU6IHN0YXJ0XG52YXIgYW50bHI0ID0gcmVxdWlyZSgnYW50bHI0L2luZGV4Jyk7XG5cbi8vIFRoaXMgY2xhc3MgZGVmaW5lcyBhIGNvbXBsZXRlIGxpc3RlbmVyIGZvciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlci5cbmZ1bmN0aW9uIFFBU01MaXN0ZW5lcigpIHtcblx0YW50bHI0LnRyZWUuUGFyc2VUcmVlTGlzdGVuZXIuY2FsbCh0aGlzKTtcblx0cmV0dXJuIHRoaXM7XG59XG5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC50cmVlLlBhcnNlVHJlZUxpc3RlbmVyLnByb3RvdHlwZSk7XG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUUFTTUxpc3RlbmVyO1xuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNtYWlucHJvZy5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJNYWlucHJvZyA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNtYWlucHJvZy5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdE1haW5wcm9nID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI3N0YXRlbWVudC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJTdGF0ZW1lbnQgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjc3RhdGVtZW50LlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0U3RhdGVtZW50ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI3ZlcnNpb24uXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyVmVyc2lvbiA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciN2ZXJzaW9uLlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0VmVyc2lvbiA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNpbmNsdWRlLlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlckluY2x1ZGUgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjaW5jbHVkZS5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdEluY2x1ZGUgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZmlsZW5hbWUuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyRmlsZW5hbWUgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZmlsZW5hbWUuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRGaWxlbmFtZSA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNkZWNsLlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlckRlY2wgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZGVjbC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdERlY2wgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZ2F0ZWRlY2wuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyR2F0ZWRlY2wgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZ2F0ZWRlY2wuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRHYXRlZGVjbCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNnb3BsaXN0LlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlckdvcGxpc3QgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZ29wbGlzdC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdEdvcGxpc3QgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjcW9wLlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlclFvcCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNxb3AuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRRb3AgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjdW9wLlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlclVvcCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciN1b3AuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRVb3AgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjYW55bGlzdC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJBbnlsaXN0ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG4vLyBFeGl0IGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2FueWxpc3QuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRBbnlsaXN0ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2lkbGlzdC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJJZGxpc3QgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjaWRsaXN0LlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0SWRsaXN0ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI21peGVkbGlzdC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJNaXhlZGxpc3QgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjbWl4ZWRsaXN0LlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0TWl4ZWRsaXN0ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2FyZ3VtZW50LlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlckFyZ3VtZW50ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG4vLyBFeGl0IGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2FyZ3VtZW50LlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0QXJndW1lbnQgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZXhwbGlzdC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJFeHBsaXN0ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG4vLyBFeGl0IGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2V4cGxpc3QuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRFeHBsaXN0ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2V4cC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJFeHAgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZXhwLlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0RXhwID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2F0b20uXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyQXRvbSA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNhdG9tLlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0QXRvbSA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciN1bmFyeW9wLlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlclVuYXJ5b3AgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjdW5hcnlvcC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdFVuYXJ5b3AgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuXG5leHBvcnRzLlFBU01MaXN0ZW5lciA9IFFBU01MaXN0ZW5lcjsiLCIvLyBHZW5lcmF0ZWQgZnJvbSBRQVNNLmc0IGJ5IEFOVExSIDQuNy4xXG4vLyBqc2hpbnQgaWdub3JlOiBzdGFydFxudmFyIGFudGxyNCA9IHJlcXVpcmUoJ2FudGxyNC9pbmRleCcpO1xudmFyIFFBU01MaXN0ZW5lciA9IHJlcXVpcmUoJy4vUUFTTUxpc3RlbmVyJykuUUFTTUxpc3RlbmVyO1xudmFyIGdyYW1tYXJGaWxlTmFtZSA9IFwiUUFTTS5nNFwiO1xuXG52YXIgc2VyaWFsaXplZEFUTiA9IFtcIlxcdTAwMDNcXHU2MDhiXFx1YTcyYVxcdTgxMzNcXHViOWVkXFx1NDE3Y1xcdTNiZTdcXHU3Nzg2XFx1NTk2NFwiLFxuICAgIFwiXFx1MDAwMy1cXHUwMTMwXFx1MDAwNFxcdTAwMDJcXHRcXHUwMDAyXFx1MDAwNFxcdTAwMDNcXHRcXHUwMDAzXFx1MDAwNFxcdTAwMDRcXHRcIixcbiAgICBcIlxcdTAwMDRcXHUwMDA0XFx1MDAwNVxcdFxcdTAwMDVcXHUwMDA0XFx1MDAwNlxcdFxcdTAwMDZcXHUwMDA0XFx1MDAwN1xcdFxcdTAwMDdcXHUwMDA0XCIsXG4gICAgXCJcXGJcXHRcXGJcXHUwMDA0XFx0XFx0XFx0XFx1MDAwNFxcblxcdFxcblxcdTAwMDRcXHUwMDBiXFx0XFx1MDAwYlxcdTAwMDRcXGZcXHRcXGZcXHUwMDA0XCIsXG4gICAgXCJcXHJcXHRcXHJcXHUwMDA0XFx1MDAwZVxcdFxcdTAwMGVcXHUwMDA0XFx1MDAwZlxcdFxcdTAwMGZcXHUwMDA0XFx1MDAxMFxcdFxcdTAwMTBcXHUwMDA0XCIsXG4gICAgXCJcXHUwMDExXFx0XFx1MDAxMVxcdTAwMDRcXHUwMDEyXFx0XFx1MDAxMlxcdTAwMDRcXHUwMDEzXFx0XFx1MDAxM1xcdTAwMDNcXHUwMDAyXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDdcXHUwMDAyKVxcblxcdTAwMDJcXGZcXHUwMDAyXFx1MDAwZVxcdTAwMDIsXFx1MDAwYlxcdTAwMDJcXHUwMDAzXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcIixcbiAgICBcIlxcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcIixcbiAgICBcIlxcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDA1XFx1MDAwM1dcXG5cXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwNFxcdTAwMDNcXHUwMDA0XFx1MDAwM1xcdTAwMDRcXHUwMDAzXFx1MDAwNFxcdTAwMDNcXHUwMDA1XFx1MDAwM1xcdTAwMDVcIixcbiAgICBcIlxcdTAwMDNcXHUwMDA1XFx1MDAwM1xcdTAwMDVcXHUwMDAzXFx1MDAwNlxcdTAwMDNcXHUwMDA2XFx1MDAwM1xcdTAwMDdcXHUwMDAzXFx1MDAwN1wiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDdcXHUwMDAzXFx1MDAwN1xcdTAwMDNcXHUwMDA3XFx1MDAwM1xcdTAwMDdcXHUwMDAzXFx1MDAwN1xcdTAwMDNcXHUwMDA3XCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwN1xcdTAwMDNcXHUwMDA3XFx1MDAwM1xcdTAwMDdcXHUwMDAzXFx1MDAwN1xcdTAwMDVcXHUwMDA3b1xcblxcdTAwMDdcIixcbiAgICBcIlxcdTAwMDNcXGJcXHUwMDAzXFxiXFx1MDAwM1xcYlxcdTAwMDNcXGJcXHUwMDAzXFxiXFx1MDAwM1xcYlxcdTAwMDNcXGJcXHUwMDAzXFxiXFx1MDAwM1wiLFxuICAgIFwiXFxiXFx1MDAwM1xcYlxcdTAwMDNcXGJcXHUwMDAzXFxiXFx1MDAwM1xcYlxcdTAwMDNcXGJcXHUwMDAzXFxiXFx1MDAwM1xcYlxcdTAwMDNcXGJcXHUwMDAzXCIsXG4gICAgXCJcXGJcXHUwMDAzXFxiXFx1MDAwM1xcYlxcdTAwMDVcXGJcXHUwMDg1XFxuXFxiXFx1MDAwM1xcdFxcdTAwMDNcXHRcXHUwMDAzXFx0XFx1MDAwM1xcdFwiLFxuICAgIFwiXFx1MDAwM1xcdFxcdTAwMDZcXHRcXHUwMDhjXFxuXFx0XFxyXFx0XFx1MDAwZVxcdFxcdTAwOGRcXHUwMDAzXFxuXFx1MDAwM1xcblxcdTAwMDNcXG5cIixcbiAgICBcIlxcdTAwMDNcXG5cXHUwMDAzXFxuXFx1MDAwM1xcblxcdTAwMDNcXG5cXHUwMDAzXFxuXFx1MDAwM1xcblxcdTAwMDNcXG5cXHUwMDAzXFxuXFx1MDAwNVwiLFxuICAgIFwiXFxuXFx1MDA5YlxcblxcblxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcIixcbiAgICBcIlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcIixcbiAgICBcIlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMGJcXHUwMDA1XFx1MDAwYlxcdTAwYmJcXG5cXHUwMDBiXFx1MDAwM1xcZlxcdTAwMDNcXGZcXHUwMDA1XFxmXFx1MDBiZlwiLFxuICAgIFwiXFxuXFxmXFx1MDAwM1xcclxcdTAwMDNcXHJcXHUwMDA3XFxyXFx1MDBjM1xcblxcclxcZlxcclxcdTAwMGVcXHJcXHUwMGM2XFx1MDAwYlxcclxcdTAwMDNcIixcbiAgICBcIlxcclxcdTAwMDNcXHJcXHUwMDAzXFx1MDAwZVxcdTAwMDNcXHUwMDBlXFx1MDAwM1xcdTAwMGVcXHUwMDAzXFx1MDAwZVxcdTAwMDNcXHUwMDBlXCIsXG4gICAgXCJcXHUwMDA3XFx1MDAwZVxcdTAwY2ZcXG5cXHUwMDBlXFxmXFx1MDAwZVxcdTAwMGVcXHUwMDBlXFx1MDBkMlxcdTAwMGJcXHUwMDBlXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwZVxcdTAwMDNcXHUwMDBlXFx1MDAwM1xcdTAwMGVcXHUwMDAzXFx1MDAwZVxcdTAwMDNcXHUwMDBlXFx1MDAwM1xcdTAwMGVcXHUwMDA3XCIsXG4gICAgXCJcXHUwMDBlXFx1MDBkYVxcblxcdTAwMGVcXGZcXHUwMDBlXFx1MDAwZVxcdTAwMGVcXHUwMGRkXFx1MDAwYlxcdTAwMGVcXHUwMDAzXFx1MDAwZVwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMGVcXHUwMDAzXFx1MDAwZVxcdTAwMDNcXHUwMDBlXFx1MDAwM1xcdTAwMGVcXHUwMDAzXFx1MDAwZVxcdTAwMDdcXHUwMDBlXCIsXG4gICAgXCJcXHUwMGU1XFxuXFx1MDAwZVxcZlxcdTAwMGVcXHUwMDBlXFx1MDAwZVxcdTAwZThcXHUwMDBiXFx1MDAwZVxcdTAwMDNcXHUwMDBlXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwZVxcdTAwMDdcXHUwMDBlXFx1MDBlY1xcblxcdTAwMGVcXGZcXHUwMDBlXFx1MDAwZVxcdTAwMGVcXHUwMGVmXFx1MDAwYlxcdTAwMGVcIixcbiAgICBcIlxcdTAwMDNcXHUwMDBlXFx1MDAwM1xcdTAwMGVcXHUwMDAzXFx1MDAwZVxcdTAwMDNcXHUwMDBlXFx1MDAwNVxcdTAwMGVcXHUwMGY1XFxuXCIsXG4gICAgXCJcXHUwMDBlXFx1MDAwM1xcdTAwMGZcXHUwMDAzXFx1MDAwZlxcdTAwMDNcXHUwMDBmXFx1MDAwM1xcdTAwMGZcXHUwMDAzXFx1MDAwZlxcdTAwMDVcIixcbiAgICBcIlxcdTAwMGZcXHUwMGZjXFxuXFx1MDAwZlxcdTAwMDNcXHUwMDEwXFx1MDAwM1xcdTAwMTBcXHUwMDAzXFx1MDAxMFxcdTAwMDdcXHUwMDEwXCIsXG4gICAgXCJcXHUwMTAxXFxuXFx1MDAxMFxcZlxcdTAwMTBcXHUwMDBlXFx1MDAxMFxcdTAxMDRcXHUwMDBiXFx1MDAxMFxcdTAwMDNcXHUwMDEwXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAxMFxcdTAwMDNcXHUwMDExXFx1MDAwM1xcdTAwMTFcXHUwMDA1XFx1MDAxMVxcdTAxMGFcXG5cXHUwMDExXFx1MDAwM1xcdTAwMTFcIixcbiAgICBcIlxcdTAwMDNcXHUwMDExXFx1MDAwM1xcdTAwMTFcXHUwMDAzXFx1MDAxMVxcdTAwMDNcXHUwMDExXFx1MDAwNVxcdTAwMTFcXHUwMTExXFxuXCIsXG4gICAgXCJcXHUwMDExXFx1MDAwM1xcdTAwMTFcXHUwMDAzXFx1MDAxMVxcdTAwMDNcXHUwMDExXFx1MDAwM1xcdTAwMTFcXHUwMDAzXFx1MDAxMVxcdTAwMDNcIixcbiAgICBcIlxcdTAwMTFcXHUwMDA1XFx1MDAxMVxcdTAxMTlcXG5cXHUwMDExXFx1MDAwM1xcdTAwMTFcXHUwMDA1XFx1MDAxMVxcdTAxMWNcXG5cXHUwMDExXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAxMVxcdTAwMDNcXHUwMDExXFx1MDAwM1xcdTAwMTFcXHUwMDAzXFx1MDAxMVxcdTAwMDNcXHUwMDExXFx1MDAwM1xcdTAwMTFcIixcbiAgICBcIlxcdTAwMDNcXHUwMDExXFx1MDAwM1xcdTAwMTFcXHUwMDAzXFx1MDAxMVxcdTAwMDdcXHUwMDExXFx1MDEyN1xcblxcdTAwMTFcXGZcXHUwMDExXCIsXG4gICAgXCJcXHUwMDBlXFx1MDAxMVxcdTAxMmFcXHUwMDBiXFx1MDAxMVxcdTAwMDNcXHUwMDEyXFx1MDAwM1xcdTAwMTJcXHUwMDAzXFx1MDAxM1xcdTAwMDNcIixcbiAgICBcIlxcdTAwMTNcXHUwMDAzXFx1MDAxM1xcdTAwMDJcXHUwMDAzIFxcdTAwMTRcXHUwMDAyXFx1MDAwNFxcdTAwMDZcXGJcXG5cXGZcXHUwMDBlXCIsXG4gICAgXCJcXHUwMDEwXFx1MDAxMlxcdTAwMTRcXHUwMDE2XFx1MDAxOFxcdTAwMWFcXHUwMDFjXFx1MDAxZSBcXFwiJFxcdTAwMDJcXHUwMDA2XFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMWNcXHUwMDFkXFx1MDAwM1xcdTAwMDJcXHUwMDFhXFx1MDAxYlxcdTAwMDRcXHUwMDAyJCUoKVxcdTAwMDNcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDFlI1xcdTAwMDJcXHUwMTQ0XFx1MDAwMiZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwNFZcXHUwMDAzXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDA2WFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXGJcXFxcXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFxuYFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXGZuXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMGVcXHUwMDg0XFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAxMFxcdTAwOGJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAxMlxcdTAwOWFcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDE0XFx1MDBiYVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDE2XFx1MDBiZVxcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMThcXHUwMGM0XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMWFcXHUwMGY0XFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAxY1xcdTAwZmJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAxZVxcdTAxMDJcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDIgXFx1MDExYlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXFwiXFx1MDEyYlxcdTAwMDNcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMiRcXHUwMTJkXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMiYqXFx1MDAwNVxcdTAwMDZcXHUwMDA0XFx1MDAwMlwiLFxuICAgIFwiXFwnKVxcdTAwMDVcXHUwMDA0XFx1MDAwM1xcdTAwMDIoXFwnXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMiksXFx1MDAwM1xcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyKihcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyKitcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyK1xcdTAwMDNcIixcbiAgICBcIlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDIsKlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDItV1xcdTAwMDVcXGZcXHUwMDA3XFx1MDAwMlwiLFxuICAgIFwiLi9cXHUwMDA1XFx1MDAwZVxcYlxcdTAwMDIvMFxcdTAwMDVcXHUwMDEwXFx0XFx1MDAwMjAxXFx1MDAwN1xcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiMVdcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyMjNcXHUwMDA1XFx1MDAwZVxcYlxcdTAwMDIzNFxcdTAwMDdcXHUwMDAzXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMjRXXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMjU2XFx1MDAwN1xcdTAwMDRcXHUwMDAyXFx1MDAwMjY3XFx1MDAwNylcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyNzhcXHUwMDA1XFx1MDAxOFxcclxcdTAwMDI4OVxcdTAwMDdcXHUwMDA1XFx1MDAwMlxcdTAwMDI5V1xcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMjo7XFx1MDAwN1xcdTAwMDRcXHUwMDAyXFx1MDAwMjs8XFx1MDAwNylcXHUwMDAyXFx1MDAwMjw9XCIsXG4gICAgXCJcXHUwMDA3XFx1MDAwNlxcdTAwMDJcXHUwMDAyPT5cXHUwMDA3XFx1MDAwN1xcdTAwMDJcXHUwMDAyPj9cXHUwMDA1XFx1MDAxOFxcclxcdTAwMDJcIixcbiAgICBcIj9AXFx1MDAwN1xcdTAwMDVcXHUwMDAyXFx1MDAwMkBXXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMkFCXFx1MDAwN1xcdTAwMDRcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyQkNcXHUwMDA3KVxcdTAwMDJcXHUwMDAyQ0RcXHUwMDA3XFx1MDAwNlxcdTAwMDJcXHUwMDAyREVcXHUwMDA1XFx1MDAxOFwiLFxuICAgIFwiXFxyXFx1MDAwMkVGXFx1MDAwN1xcdTAwMDdcXHUwMDAyXFx1MDAwMkZHXFx1MDAwNVxcdTAwMThcXHJcXHUwMDAyR0hcXHUwMDA3XFx1MDAwNVwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJIV1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJJV1xcdTAwMDVcXHUwMDEyXFxuXFx1MDAwMkpLXFx1MDAwN1wiLFxuICAgIFwiXFxiXFx1MDAwMlxcdTAwMDJLTFxcdTAwMDdcXHUwMDA2XFx1MDAwMlxcdTAwMDJMTVxcdTAwMDcpXFx1MDAwMlxcdTAwMDJNTlxcdTAwMDdcIixcbiAgICBcIlxcdFxcdTAwMDJcXHUwMDAyTk9cXHUwMDA3KFxcdTAwMDJcXHUwMDAyT1BcXHUwMDA3XFx1MDAwN1xcdTAwMDJcXHUwMDAyUFdcXHUwMDA1XCIsXG4gICAgXCJcXHUwMDEyXFxuXFx1MDAwMlFSXFx1MDAwN1xcblxcdTAwMDJcXHUwMDAyUlNcXHUwMDA1XFx1MDAxNlxcZlxcdTAwMDJTVFxcdTAwMDdcXHUwMDA1XCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlRXXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlVXXFx1MDAwNVxcYlxcdTAwMDVcXHUwMDAyVi1cXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDJWLlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJWMlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlY1XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlY6XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlZBXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyVklcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyVkpcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyVlFcXHUwMDAzXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJWVVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJXXFx1MDAwNVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlhZXFx1MDAwN1xcdTAwMGJcXHUwMDAyXFx1MDAwMllaXFx1MDAwNyVcXHUwMDAyXFx1MDAwMlpbXFx1MDAwN1xcdTAwMDVcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyW1xcdTAwMDdcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFxcXF1cXHUwMDA3XFxmXFx1MDAwMlxcdTAwMDJdXlxcdTAwMDVcIixcbiAgICBcIlxcblxcdTAwMDZcXHUwMDAyXl9cXHUwMDA3XFx1MDAwNVxcdTAwMDJcXHUwMDAyX1xcdFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcImBhXFx1MDAwNytcXHUwMDAyXFx1MDAwMmFcXHUwMDBiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMmJjXFx1MDAwN1xcclxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJjZFxcdTAwMDcpXFx1MDAwMlxcdTAwMDJkZVxcdTAwMDdcXHUwMDBlXFx1MDAwMlxcdTAwMDJlZlxcdTAwMDcoXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMmZnXFx1MDAwN1xcdTAwMGZcXHUwMDAyXFx1MDAwMmdvXFx1MDAwN1xcdTAwMDVcXHUwMDAyXFx1MDAwMmhpXFx1MDAwN1xcdTAwMTBcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyaWpcXHUwMDA3KVxcdTAwMDJcXHUwMDAyamtcXHUwMDA3XFx1MDAwZVxcdTAwMDJcXHUwMDAya2xcXHUwMDA3XCIsXG4gICAgXCIoXFx1MDAwMlxcdTAwMDJsbVxcdTAwMDdcXHUwMDBmXFx1MDAwMlxcdTAwMDJtb1xcdTAwMDdcXHUwMDA1XFx1MDAwMlxcdTAwMDJuYlwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMm5oXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMm9cXHJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJwcVxcdTAwMDdcXHUwMDExXFx1MDAwMlxcdTAwMDJxclxcdTAwMDcpXFx1MDAwMlxcdTAwMDJyc1xcdTAwMDVcXHUwMDE4XCIsXG4gICAgXCJcXHJcXHUwMDAyc3RcXHUwMDA3XFx1MDAxMlxcdTAwMDJcXHUwMDAydFxcdTAwODVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAydXZcIixcbiAgICBcIlxcdTAwMDdcXHUwMDExXFx1MDAwMlxcdTAwMDJ2d1xcdTAwMDcpXFx1MDAwMlxcdTAwMDJ3eFxcdTAwMDdcXHUwMDA2XFx1MDAwMlxcdTAwMDJcIixcbiAgICBcInh5XFx1MDAwN1xcdTAwMDdcXHUwMDAyXFx1MDAwMnl6XFx1MDAwNVxcdTAwMThcXHJcXHUwMDAyentcXHUwMDA3XFx1MDAxMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJ7XFx1MDA4NVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJ8fVxcdTAwMDdcXHUwMDExXFx1MDAwMlxcdTAwMDJ9flxcdTAwMDdcIixcbiAgICBcIilcXHUwMDAyXFx1MDAwMn5cXHUwMDdmXFx1MDAwN1xcdTAwMDZcXHUwMDAyXFx1MDAwMlxcdTAwN2ZcXHUwMDgwXFx1MDAwNVxcdTAwMThcIixcbiAgICBcIlxcclxcdTAwMDJcXHUwMDgwXFx1MDA4MVxcdTAwMDdcXHUwMDA3XFx1MDAwMlxcdTAwMDJcXHUwMDgxXFx1MDA4MlxcdTAwMDVcXHUwMDE4XCIsXG4gICAgXCJcXHJcXHUwMDAyXFx1MDA4MlxcdTAwODNcXHUwMDA3XFx1MDAxMlxcdTAwMDJcXHUwMDAyXFx1MDA4M1xcdTAwODVcXHUwMDAzXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDg0cFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDg0dVxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwODR8XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwODVcXHUwMDBmXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDA4NlxcdTAwOGNcXHUwMDA1XFx1MDAxNFxcdTAwMGJcXHUwMDAyXFx1MDA4N1xcdTAwODhcXHUwMDA3XFxuXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwODhcXHUwMDg5XFx1MDAwNVxcdTAwMThcXHJcXHUwMDAyXFx1MDA4OVxcdTAwOGFcXHUwMDA3XFx1MDAwNVxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDhhXFx1MDA4Y1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDhiXFx1MDA4NlxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwOGJcXHUwMDg3XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwOGNcXHUwMDhkXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDA4ZFxcdTAwOGJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDA4ZFxcdTAwOGVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDhlXFx1MDAxMVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDhmXFx1MDA5YlxcdTAwMDVcXHUwMDE0XFx1MDAwYlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwOTBcXHUwMDkxXFx1MDAwN1xcdTAwMTNcXHUwMDAyXFx1MDAwMlxcdTAwOTFcXHUwMDkyXFx1MDAwNVxcdTAwMWNcXHUwMDBmXCIsXG4gICAgXCJcXHUwMDAyXFx1MDA5MlxcdTAwOTNcXHUwMDA3XFx1MDAxNFxcdTAwMDJcXHUwMDAyXFx1MDA5M1xcdTAwOTRcXHUwMDA1XFx1MDAxY1xcdTAwMGZcIixcbiAgICBcIlxcdTAwMDJcXHUwMDk0XFx1MDA5NVxcdTAwMDdcXHUwMDA1XFx1MDAwMlxcdTAwMDJcXHUwMDk1XFx1MDA5YlxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwOTZcXHUwMDk3XFx1MDAwN1xcdTAwMTVcXHUwMDAyXFx1MDAwMlxcdTAwOTdcXHUwMDk4XFx1MDAwNVxcdTAwMWNcXHUwMDBmXCIsXG4gICAgXCJcXHUwMDAyXFx1MDA5OFxcdTAwOTlcXHUwMDA3XFx1MDAwNVxcdTAwMDJcXHUwMDAyXFx1MDA5OVxcdTAwOWJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDlhXFx1MDA4ZlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDlhXFx1MDA5MFxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwOWFcXHUwMDk2XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwOWJcXHUwMDEzXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDA5Y1xcdTAwOWRcXHUwMDA3XFx1MDAxNlxcdTAwMDJcXHUwMDAyXFx1MDA5ZFxcdTAwOWVcXHUwMDA3XFx1MDAwNlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDllXFx1MDA5ZlxcdTAwMDVcXHUwMDFlXFx1MDAxMFxcdTAwMDJcXHUwMDlmXFx1MDBhMFxcdTAwMDdcXHUwMDA3XFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYTBcXHUwMGExXFx1MDAwNVxcdTAwMWNcXHUwMDBmXFx1MDAwMlxcdTAwYTFcXHUwMGEyXFx1MDAwN1xcdTAwMDVcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBhMlxcdTAwYmJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBhM1xcdTAwYTRcXHUwMDA3XFx1MDAxN1xcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGE0XFx1MDBhNVxcdTAwMDVcXHUwMDFjXFx1MDAwZlxcdTAwMDJcXHUwMGE1XFx1MDBhNlxcdTAwMDdcXHUwMDE4XFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYTZcXHUwMGE3XFx1MDAwNVxcdTAwMWNcXHUwMDBmXFx1MDAwMlxcdTAwYTdcXHUwMGE4XFx1MDAwN1xcdTAwMDVcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBhOFxcdTAwYmJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBhOVxcdTAwYWFcXHUwMDA3KVxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGFhXFx1MDBhYlxcdTAwMDVcXHUwMDE2XFxmXFx1MDAwMlxcdTAwYWJcXHUwMGFjXFx1MDAwN1xcdTAwMDVcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBhY1xcdTAwYmJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBhZFxcdTAwYWVcXHUwMDA3KVxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGFlXFx1MDBhZlxcdTAwMDdcXHUwMDA2XFx1MDAwMlxcdTAwMDJcXHUwMGFmXFx1MDBiMFxcdTAwMDdcXHUwMDA3XFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYjBcXHUwMGIxXFx1MDAwNVxcdTAwMTZcXGZcXHUwMDAyXFx1MDBiMVxcdTAwYjJcXHUwMDA3XFx1MDAwNVxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGIyXFx1MDBiYlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGIzXFx1MDBiNFxcdTAwMDcpXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYjRcXHUwMGI1XFx1MDAwN1xcdTAwMDZcXHUwMDAyXFx1MDAwMlxcdTAwYjVcXHUwMGI2XFx1MDAwNVxcdTAwMWVcXHUwMDEwXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBiNlxcdTAwYjdcXHUwMDA3XFx1MDAwN1xcdTAwMDJcXHUwMDAyXFx1MDBiN1xcdTAwYjhcXHUwMDA1XFx1MDAxNlxcZlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYjhcXHUwMGI5XFx1MDAwN1xcdTAwMDVcXHUwMDAyXFx1MDAwMlxcdTAwYjlcXHUwMGJiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBiYVxcdTAwOWNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBiYVxcdTAwYTNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGJhXFx1MDBhOVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGJhXFx1MDBhZFxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYmFcXHUwMGIzXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwYmJcXHUwMDE1XFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBiY1xcdTAwYmZcXHUwMDA1XFx1MDAxOFxcclxcdTAwMDJcXHUwMGJkXFx1MDBiZlxcdTAwMDVcXHUwMDFhXFx1MDAwZVwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYmVcXHUwMGJjXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwYmVcXHUwMGJkXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBiZlxcdTAwMTdcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBjMFxcdTAwYzFcXHUwMDA3KVxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGMxXFx1MDBjM1xcdTAwMDdcXHUwMDE4XFx1MDAwMlxcdTAwMDJcXHUwMGMyXFx1MDBjMFxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYzNcXHUwMGM2XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwYzRcXHUwMGMyXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBjNFxcdTAwYzVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBjNVxcdTAwYzdcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGM2XFx1MDBjNFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGM3XFx1MDBjOFxcdTAwMDcpXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYzhcXHUwMDE5XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwYzlcXHUwMGNhXFx1MDAwNylcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBjYVxcdTAwY2JcXHUwMDA3XFx1MDAwZVxcdTAwMDJcXHUwMDAyXFx1MDBjYlxcdTAwY2NcXHUwMDA3KFxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGNjXFx1MDBjZFxcdTAwMDdcXHUwMDBmXFx1MDAwMlxcdTAwMDJcXHUwMGNkXFx1MDBjZlxcdTAwMDdcXHUwMDE4XFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwY2VcXHUwMGM5XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwY2ZcXHUwMGQyXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBkMFxcdTAwY2VcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBkMFxcdTAwZDFcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGQxXFx1MDBkM1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGQyXFx1MDBkMFxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwZDNcXHUwMGY1XFx1MDAwNylcXHUwMDAyXFx1MDAwMlxcdTAwZDRcXHUwMGQ1XFx1MDAwNylcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBkNVxcdTAwZDZcXHUwMDA3XFx1MDAwZVxcdTAwMDJcXHUwMDAyXFx1MDBkNlxcdTAwZDdcXHUwMDA3KFxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGQ3XFx1MDBkOFxcdTAwMDdcXHUwMDBmXFx1MDAwMlxcdTAwMDJcXHUwMGQ4XFx1MDBkYVxcdTAwMDdcXHUwMDE4XFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwZDlcXHUwMGQ0XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZGFcXHUwMGRkXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBkYlxcdTAwZDlcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBkYlxcdTAwZGNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGRjXFx1MDBkZVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGRkXFx1MDBkYlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwZGVcXHUwMGRmXFx1MDAwNylcXHUwMDAyXFx1MDAwMlxcdTAwZGZcXHUwMGUwXFx1MDAwN1xcdTAwMGVcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBlMFxcdTAwZTFcXHUwMDA3KFxcdTAwMDJcXHUwMDAyXFx1MDBlMVxcdTAwZjVcXHUwMDA3XFx1MDAwZlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGUyXFx1MDBlM1xcdTAwMDcpXFx1MDAwMlxcdTAwMDJcXHUwMGUzXFx1MDBlNVxcdTAwMDdcXHUwMDE4XFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwZTRcXHUwMGUyXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZTVcXHUwMGU4XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBlNlxcdTAwZTRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBlNlxcdTAwZTdcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGU3XFx1MDBlOVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGU4XFx1MDBlNlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwZTlcXHUwMGVhXFx1MDAwNylcXHUwMDAyXFx1MDAwMlxcdTAwZWFcXHUwMGVjXFx1MDAwN1xcdTAwMThcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBlYlxcdTAwZTZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBlY1xcdTAwZWZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGVkXFx1MDBlYlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGVkXFx1MDBlZVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwZWVcXHUwMGYwXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZWZcXHUwMGVkXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBmMFxcdTAwZjFcXHUwMDA3KVxcdTAwMDJcXHUwMDAyXFx1MDBmMVxcdTAwZjJcXHUwMDA3XFx1MDAwZVxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGYyXFx1MDBmM1xcdTAwMDcoXFx1MDAwMlxcdTAwMDJcXHUwMGYzXFx1MDBmNVxcdTAwMDdcXHUwMDBmXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwZjRcXHUwMGQwXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZjRcXHUwMGRiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBmNFxcdTAwZWRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBmNVxcdTAwMWJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGY2XFx1MDBmY1xcdTAwMDcpXFx1MDAwMlxcdTAwMDJcXHUwMGY3XFx1MDBmOFxcdTAwMDcpXFx1MDAwMlxcdTAwMDJcXHUwMGY4XCIsXG4gICAgXCJcXHUwMGY5XFx1MDAwN1xcdTAwMGVcXHUwMDAyXFx1MDAwMlxcdTAwZjlcXHUwMGZhXFx1MDAwNyhcXHUwMDAyXFx1MDAwMlxcdTAwZmFcIixcbiAgICBcIlxcdTAwZmNcXHUwMDA3XFx1MDAwZlxcdTAwMDJcXHUwMDAyXFx1MDBmYlxcdTAwZjZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBmYlwiLFxuICAgIFwiXFx1MDBmN1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGZjXFx1MDAxZFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGZkXCIsXG4gICAgXCJcXHUwMGZlXFx1MDAwNSBcXHUwMDExXFx1MDAwMlxcdTAwZmVcXHUwMGZmXFx1MDAwN1xcdTAwMThcXHUwMDAyXFx1MDAwMlxcdTAwZmZcIixcbiAgICBcIlxcdTAxMDFcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEwMFxcdTAwZmRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEwMVwiLFxuICAgIFwiXFx1MDEwNFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTAyXFx1MDEwMFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTAyXCIsXG4gICAgXCJcXHUwMTAzXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMDNcXHUwMTA1XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMDRcIixcbiAgICBcIlxcdTAxMDJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEwNVxcdTAxMDZcXHUwMDA1IFxcdTAwMTFcXHUwMDAyXFx1MDEwNlwiLFxuICAgIFwiXFx1MDAxZlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTA3XFx1MDEwOVxcYlxcdTAwMTFcXHUwMDAxXFx1MDAwMlxcdTAxMDhcIixcbiAgICBcIlxcdTAxMGFcXHRcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTA5XFx1MDEwOFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTA5XCIsXG4gICAgXCJcXHUwMTBhXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMGFcXHUwMTBiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMGJcIixcbiAgICBcIlxcdTAxMGNcXHUwMDA3XFx1MDAwNlxcdTAwMDJcXHUwMDAyXFx1MDEwY1xcdTAxMGRcXHUwMDA1IFxcdTAwMTFcXHUwMDAyXFx1MDEwZFwiLFxuICAgIFwiXFx1MDEwZVxcdTAwMDdcXHUwMDA3XFx1MDAwMlxcdTAwMDJcXHUwMTBlXFx1MDExY1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTBmXCIsXG4gICAgXCJcXHUwMTExXFx0XFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExMFxcdTAxMGZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExMFwiLFxuICAgIFwiXFx1MDExMVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTExXFx1MDExMlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTEyXCIsXG4gICAgXCJcXHUwMTEzXFx1MDAwNSRcXHUwMDEzXFx1MDAwMlxcdTAxMTNcXHUwMTE0XFx1MDAwN1xcdTAwMDZcXHUwMDAyXFx1MDAwMlxcdTAxMTRcIixcbiAgICBcIlxcdTAxMTVcXHUwMDA1IFxcdTAwMTFcXHUwMDAyXFx1MDExNVxcdTAxMTZcXHUwMDA3XFx1MDAwN1xcdTAwMDJcXHUwMDAyXFx1MDExNlwiLFxuICAgIFwiXFx1MDExY1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTE3XFx1MDExOVxcdFxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMThcIixcbiAgICBcIlxcdTAxMTdcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExOFxcdTAxMTlcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExOVwiLFxuICAgIFwiXFx1MDExYVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTFhXFx1MDExY1xcdTAwMDVcXFwiXFx1MDAxMlxcdTAwMDJcXHUwMTFiXCIsXG4gICAgXCJcXHUwMTA3XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMWJcXHUwMTEwXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMWJcIixcbiAgICBcIlxcdTAxMThcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExY1xcdTAxMjhcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExZFwiLFxuICAgIFwiXFx1MDExZVxcZlxcYlxcdTAwMDJcXHUwMDAyXFx1MDExZVxcdTAxMWZcXHUwMDA3XFx1MDAxOVxcdTAwMDJcXHUwMDAyXFx1MDExZlxcdTAxMjdcIixcbiAgICBcIlxcdTAwMDUgXFx1MDAxMVxcdFxcdTAxMjBcXHUwMTIxXFxmXFx1MDAwN1xcdTAwMDJcXHUwMDAyXFx1MDEyMVxcdTAxMjJcXHRcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAxMjJcXHUwMTI3XFx1MDAwNSBcXHUwMDExXFxiXFx1MDEyM1xcdTAxMjRcXGZcXHUwMDA2XFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAxMjRcXHUwMTI1XFx0XFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEyNVxcdTAxMjdcXHUwMDA1IFxcdTAwMTFcXHUwMDA3XFx1MDEyNlwiLFxuICAgIFwiXFx1MDExZFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTI2XFx1MDEyMFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTI2XCIsXG4gICAgXCJcXHUwMTIzXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMjdcXHUwMTJhXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMjhcIixcbiAgICBcIlxcdTAxMjZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEyOFxcdTAxMjlcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEyOVwiLFxuICAgIFwiIVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTJhXFx1MDEyOFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTJiXCIsXG4gICAgXCJcXHUwMTJjXFx0XFx1MDAwNFxcdTAwMDJcXHUwMDAyXFx1MDEyYyNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEyZFxcdTAxMmVcIixcbiAgICBcIlxcdFxcdTAwMDVcXHUwMDAyXFx1MDAwMlxcdTAxMmUlXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMTkqVm5cXHUwMDg0XFx1MDA4YlwiLFxuICAgIFwiXFx1MDA4ZFxcdTAwOWFcXHUwMGJhXFx1MDBiZVxcdTAwYzRcXHUwMGQwXFx1MDBkYlxcdTAwZTZcXHUwMGVkXFx1MDBmNFxcdTAwZmJcXHUwMTAyXCIsXG4gICAgXCJcXHUwMTA5XFx1MDExMFxcdTAxMThcXHUwMTFiXFx1MDEyNlxcdTAxMjhcIl0uam9pbihcIlwiKTtcblxuXG52YXIgYXRuID0gbmV3IGFudGxyNC5hdG4uQVRORGVzZXJpYWxpemVyKCkuZGVzZXJpYWxpemUoc2VyaWFsaXplZEFUTik7XG5cbnZhciBkZWNpc2lvbnNUb0RGQSA9IGF0bi5kZWNpc2lvblRvU3RhdGUubWFwKCBmdW5jdGlvbihkcywgaW5kZXgpIHsgcmV0dXJuIG5ldyBhbnRscjQuZGZhLkRGQShkcywgaW5kZXgpOyB9KTtcblxudmFyIHNoYXJlZENvbnRleHRDYWNoZSA9IG5ldyBhbnRscjQuUHJlZGljdGlvbkNvbnRleHRDYWNoZSgpO1xuXG52YXIgbGl0ZXJhbE5hbWVzID0gWyBudWxsLCBcIid9J1wiLCBcIidvcGFxdWUnXCIsIFwiJzsnXCIsIFwiJygnXCIsIFwiJyknXCIsIFwiJ2lmJ1wiLCBcbiAgICAgICAgICAgICAgICAgICAgIFwiJz09J1wiLCBcIidiYXJyaWVyJ1wiLCBcIidPUEVOUUFTTSdcIiwgXCInaW5jbHVkZSdcIiwgXCIncXJlZydcIiwgXG4gICAgICAgICAgICAgICAgICAgICBcIidbJ1wiLCBcIiddJ1wiLCBcIidjcmVnJ1wiLCBcIidnYXRlJ1wiLCBcIid7J1wiLCBcIidtZWFzdXJlJ1wiLCBcbiAgICAgICAgICAgICAgICAgICAgIFwiJy0+J1wiLCBcIidyZXNldCdcIiwgXCInVSdcIiwgXCInQ1gnXCIsIFwiJywnXCIsIFwiJ14nXCIsIFwiJyonXCIsIFxuICAgICAgICAgICAgICAgICAgICAgXCInLydcIiwgXCInKydcIiwgXCInLSdcIiwgXCInc2luJ1wiLCBcIidjb3MnXCIsIFwiJ3RhbidcIiwgXCInZXhwJ1wiLCBcbiAgICAgICAgICAgICAgICAgICAgIFwiJ2xuJ1wiLCBcIidzcXJ0J1wiLCBcIidwaSdcIiBdO1xuXG52YXIgc3ltYm9saWNOYW1lcyA9IFsgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgXG4gICAgICAgICAgICAgICAgICAgICAgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgXG4gICAgICAgICAgICAgICAgICAgICAgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgXG4gICAgICAgICAgICAgICAgICAgICAgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgXCJQSVwiLCBcIlJFQUxcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgXCJTVUJSRUFMXCIsIFwiRVhQUkVBTFwiLCBcIklOVFwiLCBcIklEXCIsIFwiV1NcIiwgXCJGSUxFTkFNRVwiLCBcbiAgICAgICAgICAgICAgICAgICAgICBcIkNPTU1FTlRcIiwgXCJMSU5FX0NPTU1FTlRcIiBdO1xuXG52YXIgcnVsZU5hbWVzID0gIFsgXCJtYWlucHJvZ1wiLCBcInN0YXRlbWVudFwiLCBcInZlcnNpb25cIiwgXCJpbmNsdWRlXCIsIFwiZmlsZW5hbWVcIiwgXG4gICAgICAgICAgICAgICAgICAgXCJkZWNsXCIsIFwiZ2F0ZWRlY2xcIiwgXCJnb3BsaXN0XCIsIFwicW9wXCIsIFwidW9wXCIsIFwiYW55bGlzdFwiLCBcbiAgICAgICAgICAgICAgICAgICBcImlkbGlzdFwiLCBcIm1peGVkbGlzdFwiLCBcImFyZ3VtZW50XCIsIFwiZXhwbGlzdFwiLCBcImV4cFwiLCBcbiAgICAgICAgICAgICAgICAgICBcImF0b21cIiwgXCJ1bmFyeW9wXCIgXTtcblxuZnVuY3Rpb24gUUFTTVBhcnNlciAoaW5wdXQpIHtcblx0YW50bHI0LlBhcnNlci5jYWxsKHRoaXMsIGlucHV0KTtcbiAgICB0aGlzLl9pbnRlcnAgPSBuZXcgYW50bHI0LmF0bi5QYXJzZXJBVE5TaW11bGF0b3IodGhpcywgYXRuLCBkZWNpc2lvbnNUb0RGQSwgc2hhcmVkQ29udGV4dENhY2hlKTtcbiAgICB0aGlzLnJ1bGVOYW1lcyA9IHJ1bGVOYW1lcztcbiAgICB0aGlzLmxpdGVyYWxOYW1lcyA9IGxpdGVyYWxOYW1lcztcbiAgICB0aGlzLnN5bWJvbGljTmFtZXMgPSBzeW1ib2xpY05hbWVzO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5RQVNNUGFyc2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYW50bHI0LlBhcnNlci5wcm90b3R5cGUpO1xuUUFTTVBhcnNlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBRQVNNUGFyc2VyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUUFTTVBhcnNlci5wcm90b3R5cGUsIFwiYXRuXCIsIHtcblx0Z2V0IDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGF0bjtcblx0fVxufSk7XG5cblFBU01QYXJzZXIuRU9GID0gYW50bHI0LlRva2VuLkVPRjtcblFBU01QYXJzZXIuVF9fMCA9IDE7XG5RQVNNUGFyc2VyLlRfXzEgPSAyO1xuUUFTTVBhcnNlci5UX18yID0gMztcblFBU01QYXJzZXIuVF9fMyA9IDQ7XG5RQVNNUGFyc2VyLlRfXzQgPSA1O1xuUUFTTVBhcnNlci5UX181ID0gNjtcblFBU01QYXJzZXIuVF9fNiA9IDc7XG5RQVNNUGFyc2VyLlRfXzcgPSA4O1xuUUFTTVBhcnNlci5UX184ID0gOTtcblFBU01QYXJzZXIuVF9fOSA9IDEwO1xuUUFTTVBhcnNlci5UX18xMCA9IDExO1xuUUFTTVBhcnNlci5UX18xMSA9IDEyO1xuUUFTTVBhcnNlci5UX18xMiA9IDEzO1xuUUFTTVBhcnNlci5UX18xMyA9IDE0O1xuUUFTTVBhcnNlci5UX18xNCA9IDE1O1xuUUFTTVBhcnNlci5UX18xNSA9IDE2O1xuUUFTTVBhcnNlci5UX18xNiA9IDE3O1xuUUFTTVBhcnNlci5UX18xNyA9IDE4O1xuUUFTTVBhcnNlci5UX18xOCA9IDE5O1xuUUFTTVBhcnNlci5UX18xOSA9IDIwO1xuUUFTTVBhcnNlci5UX18yMCA9IDIxO1xuUUFTTVBhcnNlci5UX18yMSA9IDIyO1xuUUFTTVBhcnNlci5UX18yMiA9IDIzO1xuUUFTTVBhcnNlci5UX18yMyA9IDI0O1xuUUFTTVBhcnNlci5UX18yNCA9IDI1O1xuUUFTTVBhcnNlci5UX18yNSA9IDI2O1xuUUFTTVBhcnNlci5UX18yNiA9IDI3O1xuUUFTTVBhcnNlci5UX18yNyA9IDI4O1xuUUFTTVBhcnNlci5UX18yOCA9IDI5O1xuUUFTTVBhcnNlci5UX18yOSA9IDMwO1xuUUFTTVBhcnNlci5UX18zMCA9IDMxO1xuUUFTTVBhcnNlci5UX18zMSA9IDMyO1xuUUFTTVBhcnNlci5UX18zMiA9IDMzO1xuUUFTTVBhcnNlci5QSSA9IDM0O1xuUUFTTVBhcnNlci5SRUFMID0gMzU7XG5RQVNNUGFyc2VyLlNVQlJFQUwgPSAzNjtcblFBU01QYXJzZXIuRVhQUkVBTCA9IDM3O1xuUUFTTVBhcnNlci5JTlQgPSAzODtcblFBU01QYXJzZXIuSUQgPSAzOTtcblFBU01QYXJzZXIuV1MgPSA0MDtcblFBU01QYXJzZXIuRklMRU5BTUUgPSA0MTtcblFBU01QYXJzZXIuQ09NTUVOVCA9IDQyO1xuUUFTTVBhcnNlci5MSU5FX0NPTU1FTlQgPSA0MztcblxuUUFTTVBhcnNlci5SVUxFX21haW5wcm9nID0gMDtcblFBU01QYXJzZXIuUlVMRV9zdGF0ZW1lbnQgPSAxO1xuUUFTTVBhcnNlci5SVUxFX3ZlcnNpb24gPSAyO1xuUUFTTVBhcnNlci5SVUxFX2luY2x1ZGUgPSAzO1xuUUFTTVBhcnNlci5SVUxFX2ZpbGVuYW1lID0gNDtcblFBU01QYXJzZXIuUlVMRV9kZWNsID0gNTtcblFBU01QYXJzZXIuUlVMRV9nYXRlZGVjbCA9IDY7XG5RQVNNUGFyc2VyLlJVTEVfZ29wbGlzdCA9IDc7XG5RQVNNUGFyc2VyLlJVTEVfcW9wID0gODtcblFBU01QYXJzZXIuUlVMRV91b3AgPSA5O1xuUUFTTVBhcnNlci5SVUxFX2FueWxpc3QgPSAxMDtcblFBU01QYXJzZXIuUlVMRV9pZGxpc3QgPSAxMTtcblFBU01QYXJzZXIuUlVMRV9taXhlZGxpc3QgPSAxMjtcblFBU01QYXJzZXIuUlVMRV9hcmd1bWVudCA9IDEzO1xuUUFTTVBhcnNlci5SVUxFX2V4cGxpc3QgPSAxNDtcblFBU01QYXJzZXIuUlVMRV9leHAgPSAxNTtcblFBU01QYXJzZXIuUlVMRV9hdG9tID0gMTY7XG5RQVNNUGFyc2VyLlJVTEVfdW5hcnlvcCA9IDE3O1xuXG5mdW5jdGlvbiBNYWlucHJvZ0NvbnRleHQocGFyc2VyLCBwYXJlbnQsIGludm9raW5nU3RhdGUpIHtcblx0aWYocGFyZW50PT09dW5kZWZpbmVkKSB7XG5cdCAgICBwYXJlbnQgPSBudWxsO1xuXHR9XG5cdGlmKGludm9raW5nU3RhdGU9PT11bmRlZmluZWQgfHwgaW52b2tpbmdTdGF0ZT09PW51bGwpIHtcblx0XHRpbnZva2luZ1N0YXRlID0gLTE7XG5cdH1cblx0YW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LmNhbGwodGhpcywgcGFyZW50LCBpbnZva2luZ1N0YXRlKTtcbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IFFBU01QYXJzZXIuUlVMRV9tYWlucHJvZztcbiAgICByZXR1cm4gdGhpcztcbn1cblxuTWFpbnByb2dDb250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZSk7XG5NYWlucHJvZ0NvbnRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWFpbnByb2dDb250ZXh0O1xuXG5NYWlucHJvZ0NvbnRleHQucHJvdG90eXBlLnZlcnNpb24gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KFZlcnNpb25Db250ZXh0LDApO1xufTtcblxuTWFpbnByb2dDb250ZXh0LnByb3RvdHlwZS5zdGF0ZW1lbnQgPSBmdW5jdGlvbihpKSB7XG4gICAgaWYoaT09PXVuZGVmaW5lZCkge1xuICAgICAgICBpID0gbnVsbDtcbiAgICB9XG4gICAgaWYoaT09PW51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dHMoU3RhdGVtZW50Q29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChTdGF0ZW1lbnRDb250ZXh0LGkpO1xuICAgIH1cbn07XG5cbk1haW5wcm9nQ29udGV4dC5wcm90b3R5cGUuZW50ZXJSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZW50ZXJNYWlucHJvZyh0aGlzKTtcblx0fVxufTtcblxuTWFpbnByb2dDb250ZXh0LnByb3RvdHlwZS5leGl0UnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmV4aXRNYWlucHJvZyh0aGlzKTtcblx0fVxufTtcblxuXG5cblxuUUFTTVBhcnNlci5NYWlucHJvZ0NvbnRleHQgPSBNYWlucHJvZ0NvbnRleHQ7XG5cblFBU01QYXJzZXIucHJvdG90eXBlLm1haW5wcm9nID0gZnVuY3Rpb24oKSB7XG5cbiAgICB2YXIgbG9jYWxjdHggPSBuZXcgTWFpbnByb2dDb250ZXh0KHRoaXMsIHRoaXMuX2N0eCwgdGhpcy5zdGF0ZSk7XG4gICAgdGhpcy5lbnRlclJ1bGUobG9jYWxjdHgsIDAsIFFBU01QYXJzZXIuUlVMRV9tYWlucHJvZyk7XG4gICAgdmFyIF9sYSA9IDA7IC8vIFRva2VuIHR5cGVcbiAgICB0cnkge1xuICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDEpO1xuICAgICAgICB0aGlzLnN0YXRlID0gMzY7XG4gICAgICAgIHRoaXMudmVyc2lvbigpO1xuICAgICAgICB0aGlzLnN0YXRlID0gNDA7XG4gICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgX2xhID0gdGhpcy5faW5wdXQuTEEoMSk7XG4gICAgICAgIHdoaWxlKCgoKF9sYSkgJiB+MHgxZikgPT0gMCAmJiAoKDEgPDwgX2xhKSAmICgoMSA8PCBRQVNNUGFyc2VyLlRfXzEpIHwgKDEgPDwgUUFTTVBhcnNlci5UX181KSB8ICgxIDw8IFFBU01QYXJzZXIuVF9fNykgfCAoMSA8PCBRQVNNUGFyc2VyLlRfXzkpIHwgKDEgPDwgUUFTTVBhcnNlci5UX18xMCkgfCAoMSA8PCBRQVNNUGFyc2VyLlRfXzEzKSB8ICgxIDw8IFFBU01QYXJzZXIuVF9fMTQpIHwgKDEgPDwgUUFTTVBhcnNlci5UX18xNikgfCAoMSA8PCBRQVNNUGFyc2VyLlRfXzE4KSB8ICgxIDw8IFFBU01QYXJzZXIuVF9fMTkpIHwgKDEgPDwgUUFTTVBhcnNlci5UX18yMCkpKSAhPT0gMCkgfHwgX2xhPT09UUFTTVBhcnNlci5JRCkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDM3O1xuICAgICAgICAgICAgdGhpcy5zdGF0ZW1lbnQoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA0MjtcbiAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgIF9sYSA9IHRoaXMuX2lucHV0LkxBKDEpO1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAocmUpIHtcbiAgICBcdGlmKHJlIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gcmU7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IHJlO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuZXhpdFJ1bGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gU3RhdGVtZW50Q29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX3N0YXRlbWVudDtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuU3RhdGVtZW50Q29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuU3RhdGVtZW50Q29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTdGF0ZW1lbnRDb250ZXh0O1xuXG5TdGF0ZW1lbnRDb250ZXh0LnByb3RvdHlwZS5kZWNsID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChEZWNsQ29udGV4dCwwKTtcbn07XG5cblN0YXRlbWVudENvbnRleHQucHJvdG90eXBlLmdhdGVkZWNsID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChHYXRlZGVjbENvbnRleHQsMCk7XG59O1xuXG5TdGF0ZW1lbnRDb250ZXh0LnByb3RvdHlwZS5nb3BsaXN0ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChHb3BsaXN0Q29udGV4dCwwKTtcbn07XG5cblN0YXRlbWVudENvbnRleHQucHJvdG90eXBlLklEID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW4oUUFTTVBhcnNlci5JRCwgMCk7XG59O1xuXG5TdGF0ZW1lbnRDb250ZXh0LnByb3RvdHlwZS5pZGxpc3QgPSBmdW5jdGlvbihpKSB7XG4gICAgaWYoaT09PXVuZGVmaW5lZCkge1xuICAgICAgICBpID0gbnVsbDtcbiAgICB9XG4gICAgaWYoaT09PW51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dHMoSWRsaXN0Q29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChJZGxpc3RDb250ZXh0LGkpO1xuICAgIH1cbn07XG5cblN0YXRlbWVudENvbnRleHQucHJvdG90eXBlLnFvcCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFR5cGVkUnVsZUNvbnRleHQoUW9wQ29udGV4dCwwKTtcbn07XG5cblN0YXRlbWVudENvbnRleHQucHJvdG90eXBlLklOVCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuSU5ULCAwKTtcbn07XG5cblN0YXRlbWVudENvbnRleHQucHJvdG90eXBlLmFueWxpc3QgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KEFueWxpc3RDb250ZXh0LDApO1xufTtcblxuU3RhdGVtZW50Q29udGV4dC5wcm90b3R5cGUuaW5jbHVkZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFR5cGVkUnVsZUNvbnRleHQoSW5jbHVkZUNvbnRleHQsMCk7XG59O1xuXG5TdGF0ZW1lbnRDb250ZXh0LnByb3RvdHlwZS5lbnRlclJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5lbnRlclN0YXRlbWVudCh0aGlzKTtcblx0fVxufTtcblxuU3RhdGVtZW50Q29udGV4dC5wcm90b3R5cGUuZXhpdFJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5leGl0U3RhdGVtZW50KHRoaXMpO1xuXHR9XG59O1xuXG5cblxuXG5RQVNNUGFyc2VyLlN0YXRlbWVudENvbnRleHQgPSBTdGF0ZW1lbnRDb250ZXh0O1xuXG5RQVNNUGFyc2VyLnByb3RvdHlwZS5zdGF0ZW1lbnQgPSBmdW5jdGlvbigpIHtcblxuICAgIHZhciBsb2NhbGN0eCA9IG5ldyBTdGF0ZW1lbnRDb250ZXh0KHRoaXMsIHRoaXMuX2N0eCwgdGhpcy5zdGF0ZSk7XG4gICAgdGhpcy5lbnRlclJ1bGUobG9jYWxjdHgsIDIsIFFBU01QYXJzZXIuUlVMRV9zdGF0ZW1lbnQpO1xuICAgIHRyeSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSA4NDtcbiAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICB2YXIgbGFfID0gdGhpcy5faW50ZXJwLmFkYXB0aXZlUHJlZGljdCh0aGlzLl9pbnB1dCwxLHRoaXMuX2N0eCk7XG4gICAgICAgIHN3aXRjaChsYV8pIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAxKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA0MztcbiAgICAgICAgICAgIHRoaXMuZGVjbCgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAyKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA0NDtcbiAgICAgICAgICAgIHRoaXMuZ2F0ZWRlY2woKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA0NTtcbiAgICAgICAgICAgIHRoaXMuZ29wbGlzdCgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDQ2O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzApO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAzKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA0ODtcbiAgICAgICAgICAgIHRoaXMuZ2F0ZWRlY2woKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA0OTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18wKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgNCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNTE7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNTI7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSUQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDUzO1xuICAgICAgICAgICAgdGhpcy5pZGxpc3QoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA1NDtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgNSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNTY7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNTc7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSUQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDU4O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzMpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDU5O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDYwO1xuICAgICAgICAgICAgdGhpcy5pZGxpc3QoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA2MTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgNik7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNjM7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNjQ7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSUQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDY1O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzMpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDY2O1xuICAgICAgICAgICAgdGhpcy5pZGxpc3QoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA2NztcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX180KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA2ODtcbiAgICAgICAgICAgIHRoaXMuaWRsaXN0KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNjk7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDcpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDcxO1xuICAgICAgICAgICAgdGhpcy5xb3AoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgOCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNzI7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fNSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNzM7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNzQ7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSUQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDc1O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzYpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDc2O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklOVCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNzc7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fNCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNzg7XG4gICAgICAgICAgICB0aGlzLnFvcCgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCA5KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA3OTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX183KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA4MDtcbiAgICAgICAgICAgIHRoaXMuYW55bGlzdCgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDgxO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzIpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMTApO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDgzO1xuICAgICAgICAgICAgdGhpcy5pbmNsdWRlKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICB9XG4gICAgfSBjYXRjaCAocmUpIHtcbiAgICBcdGlmKHJlIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gcmU7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IHJlO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuZXhpdFJ1bGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gVmVyc2lvbkNvbnRleHQocGFyc2VyLCBwYXJlbnQsIGludm9raW5nU3RhdGUpIHtcblx0aWYocGFyZW50PT09dW5kZWZpbmVkKSB7XG5cdCAgICBwYXJlbnQgPSBudWxsO1xuXHR9XG5cdGlmKGludm9raW5nU3RhdGU9PT11bmRlZmluZWQgfHwgaW52b2tpbmdTdGF0ZT09PW51bGwpIHtcblx0XHRpbnZva2luZ1N0YXRlID0gLTE7XG5cdH1cblx0YW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LmNhbGwodGhpcywgcGFyZW50LCBpbnZva2luZ1N0YXRlKTtcbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IFFBU01QYXJzZXIuUlVMRV92ZXJzaW9uO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5WZXJzaW9uQ29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuVmVyc2lvbkNvbnRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmVyc2lvbkNvbnRleHQ7XG5cblZlcnNpb25Db250ZXh0LnByb3RvdHlwZS5SRUFMID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW4oUUFTTVBhcnNlci5SRUFMLCAwKTtcbn07XG5cblZlcnNpb25Db250ZXh0LnByb3RvdHlwZS5lbnRlclJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5lbnRlclZlcnNpb24odGhpcyk7XG5cdH1cbn07XG5cblZlcnNpb25Db250ZXh0LnByb3RvdHlwZS5leGl0UnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmV4aXRWZXJzaW9uKHRoaXMpO1xuXHR9XG59O1xuXG5cblxuXG5RQVNNUGFyc2VyLlZlcnNpb25Db250ZXh0ID0gVmVyc2lvbkNvbnRleHQ7XG5cblFBU01QYXJzZXIucHJvdG90eXBlLnZlcnNpb24gPSBmdW5jdGlvbigpIHtcblxuICAgIHZhciBsb2NhbGN0eCA9IG5ldyBWZXJzaW9uQ29udGV4dCh0aGlzLCB0aGlzLl9jdHgsIHRoaXMuc3RhdGUpO1xuICAgIHRoaXMuZW50ZXJSdWxlKGxvY2FsY3R4LCA0LCBRQVNNUGFyc2VyLlJVTEVfdmVyc2lvbik7XG4gICAgdHJ5IHtcbiAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAxKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IDg2O1xuICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fOCk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSA4NztcbiAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlJFQUwpO1xuICAgICAgICB0aGlzLnN0YXRlID0gODg7XG4gICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yKTtcbiAgICB9IGNhdGNoIChyZSkge1xuICAgIFx0aWYocmUgaW5zdGFuY2VvZiBhbnRscjQuZXJyb3IuUmVjb2duaXRpb25FeGNlcHRpb24pIHtcblx0ICAgICAgICBsb2NhbGN0eC5leGNlcHRpb24gPSByZTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgIFx0dGhyb3cgcmU7XG5cdCAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5leGl0UnVsZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbG9jYWxjdHg7XG59O1xuXG5mdW5jdGlvbiBJbmNsdWRlQ29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX2luY2x1ZGU7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkluY2x1ZGVDb250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZSk7XG5JbmNsdWRlQ29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbmNsdWRlQ29udGV4dDtcblxuSW5jbHVkZUNvbnRleHQucHJvdG90eXBlLmZpbGVuYW1lID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChGaWxlbmFtZUNvbnRleHQsMCk7XG59O1xuXG5JbmNsdWRlQ29udGV4dC5wcm90b3R5cGUuZW50ZXJSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZW50ZXJJbmNsdWRlKHRoaXMpO1xuXHR9XG59O1xuXG5JbmNsdWRlQ29udGV4dC5wcm90b3R5cGUuZXhpdFJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5leGl0SW5jbHVkZSh0aGlzKTtcblx0fVxufTtcblxuXG5cblxuUUFTTVBhcnNlci5JbmNsdWRlQ29udGV4dCA9IEluY2x1ZGVDb250ZXh0O1xuXG5RQVNNUGFyc2VyLnByb3RvdHlwZS5pbmNsdWRlID0gZnVuY3Rpb24oKSB7XG5cbiAgICB2YXIgbG9jYWxjdHggPSBuZXcgSW5jbHVkZUNvbnRleHQodGhpcywgdGhpcy5fY3R4LCB0aGlzLnN0YXRlKTtcbiAgICB0aGlzLmVudGVyUnVsZShsb2NhbGN0eCwgNiwgUUFTTVBhcnNlci5SVUxFX2luY2x1ZGUpO1xuICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMSk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSA5MDtcbiAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzkpO1xuICAgICAgICB0aGlzLnN0YXRlID0gOTE7XG4gICAgICAgIHRoaXMuZmlsZW5hbWUoKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IDkyO1xuICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMik7XG4gICAgfSBjYXRjaCAocmUpIHtcbiAgICBcdGlmKHJlIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gcmU7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IHJlO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuZXhpdFJ1bGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gRmlsZW5hbWVDb250ZXh0KHBhcnNlciwgcGFyZW50LCBpbnZva2luZ1N0YXRlKSB7XG5cdGlmKHBhcmVudD09PXVuZGVmaW5lZCkge1xuXHQgICAgcGFyZW50ID0gbnVsbDtcblx0fVxuXHRpZihpbnZva2luZ1N0YXRlPT09dW5kZWZpbmVkIHx8IGludm9raW5nU3RhdGU9PT1udWxsKSB7XG5cdFx0aW52b2tpbmdTdGF0ZSA9IC0xO1xuXHR9XG5cdGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5jYWxsKHRoaXMsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSk7XG4gICAgdGhpcy5wYXJzZXIgPSBwYXJzZXI7XG4gICAgdGhpcy5ydWxlSW5kZXggPSBRQVNNUGFyc2VyLlJVTEVfZmlsZW5hbWU7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkZpbGVuYW1lQ29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuRmlsZW5hbWVDb250ZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEZpbGVuYW1lQ29udGV4dDtcblxuRmlsZW5hbWVDb250ZXh0LnByb3RvdHlwZS5GSUxFTkFNRSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuRklMRU5BTUUsIDApO1xufTtcblxuRmlsZW5hbWVDb250ZXh0LnByb3RvdHlwZS5lbnRlclJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5lbnRlckZpbGVuYW1lKHRoaXMpO1xuXHR9XG59O1xuXG5GaWxlbmFtZUNvbnRleHQucHJvdG90eXBlLmV4aXRSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZXhpdEZpbGVuYW1lKHRoaXMpO1xuXHR9XG59O1xuXG5cblxuXG5RQVNNUGFyc2VyLkZpbGVuYW1lQ29udGV4dCA9IEZpbGVuYW1lQ29udGV4dDtcblxuUUFTTVBhcnNlci5wcm90b3R5cGUuZmlsZW5hbWUgPSBmdW5jdGlvbigpIHtcblxuICAgIHZhciBsb2NhbGN0eCA9IG5ldyBGaWxlbmFtZUNvbnRleHQodGhpcywgdGhpcy5fY3R4LCB0aGlzLnN0YXRlKTtcbiAgICB0aGlzLmVudGVyUnVsZShsb2NhbGN0eCwgOCwgUUFTTVBhcnNlci5SVUxFX2ZpbGVuYW1lKTtcbiAgICB0cnkge1xuICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDEpO1xuICAgICAgICB0aGlzLnN0YXRlID0gOTQ7XG4gICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5GSUxFTkFNRSk7XG4gICAgfSBjYXRjaCAocmUpIHtcbiAgICBcdGlmKHJlIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gcmU7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IHJlO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuZXhpdFJ1bGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gRGVjbENvbnRleHQocGFyc2VyLCBwYXJlbnQsIGludm9raW5nU3RhdGUpIHtcblx0aWYocGFyZW50PT09dW5kZWZpbmVkKSB7XG5cdCAgICBwYXJlbnQgPSBudWxsO1xuXHR9XG5cdGlmKGludm9raW5nU3RhdGU9PT11bmRlZmluZWQgfHwgaW52b2tpbmdTdGF0ZT09PW51bGwpIHtcblx0XHRpbnZva2luZ1N0YXRlID0gLTE7XG5cdH1cblx0YW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LmNhbGwodGhpcywgcGFyZW50LCBpbnZva2luZ1N0YXRlKTtcbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IFFBU01QYXJzZXIuUlVMRV9kZWNsO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5EZWNsQ29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuRGVjbENvbnRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRGVjbENvbnRleHQ7XG5cbkRlY2xDb250ZXh0LnByb3RvdHlwZS5JRCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuSUQsIDApO1xufTtcblxuRGVjbENvbnRleHQucHJvdG90eXBlLklOVCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuSU5ULCAwKTtcbn07XG5cbkRlY2xDb250ZXh0LnByb3RvdHlwZS5lbnRlclJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5lbnRlckRlY2wodGhpcyk7XG5cdH1cbn07XG5cbkRlY2xDb250ZXh0LnByb3RvdHlwZS5leGl0UnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmV4aXREZWNsKHRoaXMpO1xuXHR9XG59O1xuXG5cblxuXG5RQVNNUGFyc2VyLkRlY2xDb250ZXh0ID0gRGVjbENvbnRleHQ7XG5cblFBU01QYXJzZXIucHJvdG90eXBlLmRlY2wgPSBmdW5jdGlvbigpIHtcblxuICAgIHZhciBsb2NhbGN0eCA9IG5ldyBEZWNsQ29udGV4dCh0aGlzLCB0aGlzLl9jdHgsIHRoaXMuc3RhdGUpO1xuICAgIHRoaXMuZW50ZXJSdWxlKGxvY2FsY3R4LCAxMCwgUUFTTVBhcnNlci5SVUxFX2RlY2wpO1xuICAgIHRyeSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAxMDg7XG4gICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgc3dpdGNoKHRoaXMuX2lucHV0LkxBKDEpKSB7XG4gICAgICAgIGNhc2UgUUFTTVBhcnNlci5UX18xMDpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gOTY7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTApO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDk3O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklEKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA5ODtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18xMSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gOTk7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSU5UKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMDA7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTIpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEwMTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFFBU01QYXJzZXIuVF9fMTM6XG4gICAgICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDIpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEwMjtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18xMyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTAzO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklEKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMDQ7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTEpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEwNTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JTlQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEwNjtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18xMik7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTA3O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgYW50bHI0LmVycm9yLk5vVmlhYmxlQWx0RXhjZXB0aW9uKHRoaXMpO1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAocmUpIHtcbiAgICBcdGlmKHJlIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gcmU7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IHJlO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuZXhpdFJ1bGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gR2F0ZWRlY2xDb250ZXh0KHBhcnNlciwgcGFyZW50LCBpbnZva2luZ1N0YXRlKSB7XG5cdGlmKHBhcmVudD09PXVuZGVmaW5lZCkge1xuXHQgICAgcGFyZW50ID0gbnVsbDtcblx0fVxuXHRpZihpbnZva2luZ1N0YXRlPT09dW5kZWZpbmVkIHx8IGludm9raW5nU3RhdGU9PT1udWxsKSB7XG5cdFx0aW52b2tpbmdTdGF0ZSA9IC0xO1xuXHR9XG5cdGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5jYWxsKHRoaXMsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSk7XG4gICAgdGhpcy5wYXJzZXIgPSBwYXJzZXI7XG4gICAgdGhpcy5ydWxlSW5kZXggPSBRQVNNUGFyc2VyLlJVTEVfZ2F0ZWRlY2w7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkdhdGVkZWNsQ29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuR2F0ZWRlY2xDb250ZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdhdGVkZWNsQ29udGV4dDtcblxuR2F0ZWRlY2xDb250ZXh0LnByb3RvdHlwZS5JRCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuSUQsIDApO1xufTtcblxuR2F0ZWRlY2xDb250ZXh0LnByb3RvdHlwZS5pZGxpc3QgPSBmdW5jdGlvbihpKSB7XG4gICAgaWYoaT09PXVuZGVmaW5lZCkge1xuICAgICAgICBpID0gbnVsbDtcbiAgICB9XG4gICAgaWYoaT09PW51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dHMoSWRsaXN0Q29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChJZGxpc3RDb250ZXh0LGkpO1xuICAgIH1cbn07XG5cbkdhdGVkZWNsQ29udGV4dC5wcm90b3R5cGUuZW50ZXJSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZW50ZXJHYXRlZGVjbCh0aGlzKTtcblx0fVxufTtcblxuR2F0ZWRlY2xDb250ZXh0LnByb3RvdHlwZS5leGl0UnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmV4aXRHYXRlZGVjbCh0aGlzKTtcblx0fVxufTtcblxuXG5cblxuUUFTTVBhcnNlci5HYXRlZGVjbENvbnRleHQgPSBHYXRlZGVjbENvbnRleHQ7XG5cblFBU01QYXJzZXIucHJvdG90eXBlLmdhdGVkZWNsID0gZnVuY3Rpb24oKSB7XG5cbiAgICB2YXIgbG9jYWxjdHggPSBuZXcgR2F0ZWRlY2xDb250ZXh0KHRoaXMsIHRoaXMuX2N0eCwgdGhpcy5zdGF0ZSk7XG4gICAgdGhpcy5lbnRlclJ1bGUobG9jYWxjdHgsIDEyLCBRQVNNUGFyc2VyLlJVTEVfZ2F0ZWRlY2wpO1xuICAgIHRyeSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAxMzA7XG4gICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgdmFyIGxhXyA9IHRoaXMuX2ludGVycC5hZGFwdGl2ZVByZWRpY3QodGhpcy5faW5wdXQsMyx0aGlzLl9jdHgpO1xuICAgICAgICBzd2l0Y2gobGFfKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTEwO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzE0KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMTE7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSUQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDExMjtcbiAgICAgICAgICAgIHRoaXMuaWRsaXN0KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTEzO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzE1KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMik7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTE1O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzE0KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMTY7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSUQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDExNztcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18zKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMTg7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fNCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTE5O1xuICAgICAgICAgICAgdGhpcy5pZGxpc3QoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMjA7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAzKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMjI7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEyMztcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JRCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTI0O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzMpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEyNTtcbiAgICAgICAgICAgIHRoaXMuaWRsaXN0KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTI2O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEyNztcbiAgICAgICAgICAgIHRoaXMuaWRsaXN0KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTI4O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzE1KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChyZSkge1xuICAgIFx0aWYocmUgaW5zdGFuY2VvZiBhbnRscjQuZXJyb3IuUmVjb2duaXRpb25FeGNlcHRpb24pIHtcblx0ICAgICAgICBsb2NhbGN0eC5leGNlcHRpb24gPSByZTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgIFx0dGhyb3cgcmU7XG5cdCAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5leGl0UnVsZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbG9jYWxjdHg7XG59O1xuXG5mdW5jdGlvbiBHb3BsaXN0Q29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX2dvcGxpc3Q7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkdvcGxpc3RDb250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZSk7XG5Hb3BsaXN0Q29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHb3BsaXN0Q29udGV4dDtcblxuR29wbGlzdENvbnRleHQucHJvdG90eXBlLnVvcCA9IGZ1bmN0aW9uKGkpIHtcbiAgICBpZihpPT09dW5kZWZpbmVkKSB7XG4gICAgICAgIGkgPSBudWxsO1xuICAgIH1cbiAgICBpZihpPT09bnVsbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0cyhVb3BDb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KFVvcENvbnRleHQsaSk7XG4gICAgfVxufTtcblxuR29wbGlzdENvbnRleHQucHJvdG90eXBlLmlkbGlzdCA9IGZ1bmN0aW9uKGkpIHtcbiAgICBpZihpPT09dW5kZWZpbmVkKSB7XG4gICAgICAgIGkgPSBudWxsO1xuICAgIH1cbiAgICBpZihpPT09bnVsbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0cyhJZGxpc3RDb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KElkbGlzdENvbnRleHQsaSk7XG4gICAgfVxufTtcblxuR29wbGlzdENvbnRleHQucHJvdG90eXBlLmVudGVyUnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmVudGVyR29wbGlzdCh0aGlzKTtcblx0fVxufTtcblxuR29wbGlzdENvbnRleHQucHJvdG90eXBlLmV4aXRSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZXhpdEdvcGxpc3QodGhpcyk7XG5cdH1cbn07XG5cblxuXG5cblFBU01QYXJzZXIuR29wbGlzdENvbnRleHQgPSBHb3BsaXN0Q29udGV4dDtcblxuUUFTTVBhcnNlci5wcm90b3R5cGUuZ29wbGlzdCA9IGZ1bmN0aW9uKCkge1xuXG4gICAgdmFyIGxvY2FsY3R4ID0gbmV3IEdvcGxpc3RDb250ZXh0KHRoaXMsIHRoaXMuX2N0eCwgdGhpcy5zdGF0ZSk7XG4gICAgdGhpcy5lbnRlclJ1bGUobG9jYWxjdHgsIDE0LCBRQVNNUGFyc2VyLlJVTEVfZ29wbGlzdCk7XG4gICAgdmFyIF9sYSA9IDA7IC8vIFRva2VuIHR5cGVcbiAgICB0cnkge1xuICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDEpO1xuICAgICAgICB0aGlzLnN0YXRlID0gMTM3OyBcbiAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICBfbGEgPSB0aGlzLl9pbnB1dC5MQSgxKTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEzNztcbiAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgIHN3aXRjaCh0aGlzLl9pbnB1dC5MQSgxKSkge1xuICAgICAgICAgICAgY2FzZSBRQVNNUGFyc2VyLlRfXzE5OlxuICAgICAgICAgICAgY2FzZSBRQVNNUGFyc2VyLlRfXzIwOlxuICAgICAgICAgICAgY2FzZSBRQVNNUGFyc2VyLklEOlxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMzI7XG4gICAgICAgICAgICAgICAgdGhpcy51b3AoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUUFTTVBhcnNlci5UX183OlxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMzM7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzcpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMzQ7XG4gICAgICAgICAgICAgICAgdGhpcy5pZGxpc3QoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMTM1O1xuICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGFudGxyNC5lcnJvci5Ob1ZpYWJsZUFsdEV4Y2VwdGlvbih0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMzk7IFxuICAgICAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICAgICAgX2xhID0gdGhpcy5faW5wdXQuTEEoMSk7XG4gICAgICAgIH0gd2hpbGUoKCgoKF9sYSAtIDgpKSAmIH4weDFmKSA9PSAwICYmICgoMSA8PCAoX2xhIC0gOCkpICYgKCgxIDw8IChRQVNNUGFyc2VyLlRfXzcgLSA4KSkgfCAoMSA8PCAoUUFTTVBhcnNlci5UX18xOSAtIDgpKSB8ICgxIDw8IChRQVNNUGFyc2VyLlRfXzIwIC0gOCkpIHwgKDEgPDwgKFFBU01QYXJzZXIuSUQgLSA4KSkpKSAhPT0gMCkpO1xuICAgIH0gY2F0Y2ggKHJlKSB7XG4gICAgXHRpZihyZSBpbnN0YW5jZW9mIGFudGxyNC5lcnJvci5SZWNvZ25pdGlvbkV4Y2VwdGlvbikge1xuXHQgICAgICAgIGxvY2FsY3R4LmV4Y2VwdGlvbiA9IHJlO1xuXHQgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVwb3J0RXJyb3IodGhpcywgcmUpO1xuXHQgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVjb3Zlcih0aGlzLCByZSk7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgXHR0aHJvdyByZTtcblx0ICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLmV4aXRSdWxlKCk7XG4gICAgfVxuICAgIHJldHVybiBsb2NhbGN0eDtcbn07XG5cbmZ1bmN0aW9uIFFvcENvbnRleHQocGFyc2VyLCBwYXJlbnQsIGludm9raW5nU3RhdGUpIHtcblx0aWYocGFyZW50PT09dW5kZWZpbmVkKSB7XG5cdCAgICBwYXJlbnQgPSBudWxsO1xuXHR9XG5cdGlmKGludm9raW5nU3RhdGU9PT11bmRlZmluZWQgfHwgaW52b2tpbmdTdGF0ZT09PW51bGwpIHtcblx0XHRpbnZva2luZ1N0YXRlID0gLTE7XG5cdH1cblx0YW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LmNhbGwodGhpcywgcGFyZW50LCBpbnZva2luZ1N0YXRlKTtcbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IFFBU01QYXJzZXIuUlVMRV9xb3A7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cblFvcENvbnRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQucHJvdG90eXBlKTtcblFvcENvbnRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUW9wQ29udGV4dDtcblxuUW9wQ29udGV4dC5wcm90b3R5cGUudW9wID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChVb3BDb250ZXh0LDApO1xufTtcblxuUW9wQ29udGV4dC5wcm90b3R5cGUuYXJndW1lbnQgPSBmdW5jdGlvbihpKSB7XG4gICAgaWYoaT09PXVuZGVmaW5lZCkge1xuICAgICAgICBpID0gbnVsbDtcbiAgICB9XG4gICAgaWYoaT09PW51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dHMoQXJndW1lbnRDb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KEFyZ3VtZW50Q29udGV4dCxpKTtcbiAgICB9XG59O1xuXG5Rb3BDb250ZXh0LnByb3RvdHlwZS5lbnRlclJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5lbnRlclFvcCh0aGlzKTtcblx0fVxufTtcblxuUW9wQ29udGV4dC5wcm90b3R5cGUuZXhpdFJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5leGl0UW9wKHRoaXMpO1xuXHR9XG59O1xuXG5cblxuXG5RQVNNUGFyc2VyLlFvcENvbnRleHQgPSBRb3BDb250ZXh0O1xuXG5RQVNNUGFyc2VyLnByb3RvdHlwZS5xb3AgPSBmdW5jdGlvbigpIHtcblxuICAgIHZhciBsb2NhbGN0eCA9IG5ldyBRb3BDb250ZXh0KHRoaXMsIHRoaXMuX2N0eCwgdGhpcy5zdGF0ZSk7XG4gICAgdGhpcy5lbnRlclJ1bGUobG9jYWxjdHgsIDE2LCBRQVNNUGFyc2VyLlJVTEVfcW9wKTtcbiAgICB0cnkge1xuICAgICAgICB0aGlzLnN0YXRlID0gMTUyO1xuICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgIHN3aXRjaCh0aGlzLl9pbnB1dC5MQSgxKSkge1xuICAgICAgICBjYXNlIFFBU01QYXJzZXIuVF9fMTk6XG4gICAgICAgIGNhc2UgUUFTTVBhcnNlci5UX18yMDpcbiAgICAgICAgY2FzZSBRQVNNUGFyc2VyLklEOlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAxKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNDE7XG4gICAgICAgICAgICB0aGlzLnVvcCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgUUFTTVBhcnNlci5UX18xNjpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMik7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTQyO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzE2KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNDM7XG4gICAgICAgICAgICB0aGlzLmFyZ3VtZW50KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTQ0O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzE3KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNDU7XG4gICAgICAgICAgICB0aGlzLmFyZ3VtZW50KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTQ2O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgUUFTTVBhcnNlci5UX18xODpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTQ4O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzE4KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNDk7XG4gICAgICAgICAgICB0aGlzLmFyZ3VtZW50KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTUwO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgYW50bHI0LmVycm9yLk5vVmlhYmxlQWx0RXhjZXB0aW9uKHRoaXMpO1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAocmUpIHtcbiAgICBcdGlmKHJlIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gcmU7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IHJlO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuZXhpdFJ1bGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gVW9wQ29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX3VvcDtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuVW9wQ29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuVW9wQ29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBVb3BDb250ZXh0O1xuXG5Vb3BDb250ZXh0LnByb3RvdHlwZS5leHBsaXN0ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChFeHBsaXN0Q29udGV4dCwwKTtcbn07XG5cblVvcENvbnRleHQucHJvdG90eXBlLmFyZ3VtZW50ID0gZnVuY3Rpb24oaSkge1xuICAgIGlmKGk9PT11bmRlZmluZWQpIHtcbiAgICAgICAgaSA9IG51bGw7XG4gICAgfVxuICAgIGlmKGk9PT1udWxsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFR5cGVkUnVsZUNvbnRleHRzKEFyZ3VtZW50Q29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChBcmd1bWVudENvbnRleHQsaSk7XG4gICAgfVxufTtcblxuVW9wQ29udGV4dC5wcm90b3R5cGUuSUQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUb2tlbihRQVNNUGFyc2VyLklELCAwKTtcbn07XG5cblVvcENvbnRleHQucHJvdG90eXBlLmFueWxpc3QgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KEFueWxpc3RDb250ZXh0LDApO1xufTtcblxuVW9wQ29udGV4dC5wcm90b3R5cGUuZW50ZXJSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZW50ZXJVb3AodGhpcyk7XG5cdH1cbn07XG5cblVvcENvbnRleHQucHJvdG90eXBlLmV4aXRSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZXhpdFVvcCh0aGlzKTtcblx0fVxufTtcblxuXG5cblxuUUFTTVBhcnNlci5Vb3BDb250ZXh0ID0gVW9wQ29udGV4dDtcblxuUUFTTVBhcnNlci5wcm90b3R5cGUudW9wID0gZnVuY3Rpb24oKSB7XG5cbiAgICB2YXIgbG9jYWxjdHggPSBuZXcgVW9wQ29udGV4dCh0aGlzLCB0aGlzLl9jdHgsIHRoaXMuc3RhdGUpO1xuICAgIHRoaXMuZW50ZXJSdWxlKGxvY2FsY3R4LCAxOCwgUUFTTVBhcnNlci5SVUxFX3VvcCk7XG4gICAgdHJ5IHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IDE4NDtcbiAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICB2YXIgbGFfID0gdGhpcy5faW50ZXJwLmFkYXB0aXZlUHJlZGljdCh0aGlzLl9pbnB1dCw3LHRoaXMuX2N0eCk7XG4gICAgICAgIHN3aXRjaChsYV8pIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAxKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNTQ7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTkpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE1NTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18zKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNTY7XG4gICAgICAgICAgICB0aGlzLmV4cGxpc3QoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNTc7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fNCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTU4O1xuICAgICAgICAgICAgdGhpcy5hcmd1bWVudCgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE1OTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMik7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTYxO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzIwKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNjI7XG4gICAgICAgICAgICB0aGlzLmFyZ3VtZW50KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTYzO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzIxKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNjQ7XG4gICAgICAgICAgICB0aGlzLmFyZ3VtZW50KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTY1O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzIpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAzKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNjc7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSUQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE2ODtcbiAgICAgICAgICAgIHRoaXMuYW55bGlzdCgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE2OTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgNCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTcxO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklEKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNzI7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTczO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE3NDtcbiAgICAgICAgICAgIHRoaXMuYW55bGlzdCgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE3NTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgNSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTc3O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklEKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNzg7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTc5O1xuICAgICAgICAgICAgdGhpcy5leHBsaXN0KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTgwO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE4MTtcbiAgICAgICAgICAgIHRoaXMuYW55bGlzdCgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE4MjtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChyZSkge1xuICAgIFx0aWYocmUgaW5zdGFuY2VvZiBhbnRscjQuZXJyb3IuUmVjb2duaXRpb25FeGNlcHRpb24pIHtcblx0ICAgICAgICBsb2NhbGN0eC5leGNlcHRpb24gPSByZTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgIFx0dGhyb3cgcmU7XG5cdCAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5leGl0UnVsZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbG9jYWxjdHg7XG59O1xuXG5mdW5jdGlvbiBBbnlsaXN0Q29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX2FueWxpc3Q7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkFueWxpc3RDb250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZSk7XG5BbnlsaXN0Q29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBbnlsaXN0Q29udGV4dDtcblxuQW55bGlzdENvbnRleHQucHJvdG90eXBlLmlkbGlzdCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFR5cGVkUnVsZUNvbnRleHQoSWRsaXN0Q29udGV4dCwwKTtcbn07XG5cbkFueWxpc3RDb250ZXh0LnByb3RvdHlwZS5taXhlZGxpc3QgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KE1peGVkbGlzdENvbnRleHQsMCk7XG59O1xuXG5BbnlsaXN0Q29udGV4dC5wcm90b3R5cGUuZW50ZXJSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZW50ZXJBbnlsaXN0KHRoaXMpO1xuXHR9XG59O1xuXG5BbnlsaXN0Q29udGV4dC5wcm90b3R5cGUuZXhpdFJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5leGl0QW55bGlzdCh0aGlzKTtcblx0fVxufTtcblxuXG5cblxuUUFTTVBhcnNlci5BbnlsaXN0Q29udGV4dCA9IEFueWxpc3RDb250ZXh0O1xuXG5RQVNNUGFyc2VyLnByb3RvdHlwZS5hbnlsaXN0ID0gZnVuY3Rpb24oKSB7XG5cbiAgICB2YXIgbG9jYWxjdHggPSBuZXcgQW55bGlzdENvbnRleHQodGhpcywgdGhpcy5fY3R4LCB0aGlzLnN0YXRlKTtcbiAgICB0aGlzLmVudGVyUnVsZShsb2NhbGN0eCwgMjAsIFFBU01QYXJzZXIuUlVMRV9hbnlsaXN0KTtcbiAgICB0cnkge1xuICAgICAgICB0aGlzLnN0YXRlID0gMTg4O1xuICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgIHZhciBsYV8gPSB0aGlzLl9pbnRlcnAuYWRhcHRpdmVQcmVkaWN0KHRoaXMuX2lucHV0LDgsdGhpcy5fY3R4KTtcbiAgICAgICAgc3dpdGNoKGxhXykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDEpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE4NjtcbiAgICAgICAgICAgIHRoaXMuaWRsaXN0KCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDIpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE4NztcbiAgICAgICAgICAgIHRoaXMubWl4ZWRsaXN0KCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICB9XG4gICAgfSBjYXRjaCAocmUpIHtcbiAgICBcdGlmKHJlIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gcmU7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IHJlO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuZXhpdFJ1bGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gSWRsaXN0Q29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX2lkbGlzdDtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuSWRsaXN0Q29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuSWRsaXN0Q29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJZGxpc3RDb250ZXh0O1xuXG5JZGxpc3RDb250ZXh0LnByb3RvdHlwZS5JRCA9IGZ1bmN0aW9uKGkpIHtcblx0aWYoaT09PXVuZGVmaW5lZCkge1xuXHRcdGkgPSBudWxsO1xuXHR9XG4gICAgaWYoaT09PW51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW5zKFFBU01QYXJzZXIuSUQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuSUQsIGkpO1xuICAgIH1cbn07XG5cblxuSWRsaXN0Q29udGV4dC5wcm90b3R5cGUuZW50ZXJSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZW50ZXJJZGxpc3QodGhpcyk7XG5cdH1cbn07XG5cbklkbGlzdENvbnRleHQucHJvdG90eXBlLmV4aXRSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZXhpdElkbGlzdCh0aGlzKTtcblx0fVxufTtcblxuXG5cblxuUUFTTVBhcnNlci5JZGxpc3RDb250ZXh0ID0gSWRsaXN0Q29udGV4dDtcblxuUUFTTVBhcnNlci5wcm90b3R5cGUuaWRsaXN0ID0gZnVuY3Rpb24oKSB7XG5cbiAgICB2YXIgbG9jYWxjdHggPSBuZXcgSWRsaXN0Q29udGV4dCh0aGlzLCB0aGlzLl9jdHgsIHRoaXMuc3RhdGUpO1xuICAgIHRoaXMuZW50ZXJSdWxlKGxvY2FsY3R4LCAyMiwgUUFTTVBhcnNlci5SVUxFX2lkbGlzdCk7XG4gICAgdHJ5IHtcbiAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAxKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IDE5NDtcbiAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICB2YXIgX2FsdCA9IHRoaXMuX2ludGVycC5hZGFwdGl2ZVByZWRpY3QodGhpcy5faW5wdXQsOSx0aGlzLl9jdHgpXG4gICAgICAgIHdoaWxlKF9hbHQhPTIgJiYgX2FsdCE9YW50bHI0LmF0bi5BVE4uSU5WQUxJRF9BTFRfTlVNQkVSKSB7XG4gICAgICAgICAgICBpZihfYWx0PT09MSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxOTA7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklEKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMTkxO1xuICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yMSk7IFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE5NjtcbiAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgIF9hbHQgPSB0aGlzLl9pbnRlcnAuYWRhcHRpdmVQcmVkaWN0KHRoaXMuX2lucHV0LDksdGhpcy5fY3R4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RhdGUgPSAxOTc7XG4gICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JRCk7XG4gICAgfSBjYXRjaCAocmUpIHtcbiAgICBcdGlmKHJlIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gcmU7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IHJlO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuZXhpdFJ1bGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gTWl4ZWRsaXN0Q29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX21peGVkbGlzdDtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuTWl4ZWRsaXN0Q29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuTWl4ZWRsaXN0Q29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNaXhlZGxpc3RDb250ZXh0O1xuXG5NaXhlZGxpc3RDb250ZXh0LnByb3RvdHlwZS5JRCA9IGZ1bmN0aW9uKGkpIHtcblx0aWYoaT09PXVuZGVmaW5lZCkge1xuXHRcdGkgPSBudWxsO1xuXHR9XG4gICAgaWYoaT09PW51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW5zKFFBU01QYXJzZXIuSUQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuSUQsIGkpO1xuICAgIH1cbn07XG5cblxuTWl4ZWRsaXN0Q29udGV4dC5wcm90b3R5cGUuSU5UID0gZnVuY3Rpb24oaSkge1xuXHRpZihpPT09dW5kZWZpbmVkKSB7XG5cdFx0aSA9IG51bGw7XG5cdH1cbiAgICBpZihpPT09bnVsbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUb2tlbnMoUUFTTVBhcnNlci5JTlQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuSU5ULCBpKTtcbiAgICB9XG59O1xuXG5cbk1peGVkbGlzdENvbnRleHQucHJvdG90eXBlLmVudGVyUnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmVudGVyTWl4ZWRsaXN0KHRoaXMpO1xuXHR9XG59O1xuXG5NaXhlZGxpc3RDb250ZXh0LnByb3RvdHlwZS5leGl0UnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmV4aXRNaXhlZGxpc3QodGhpcyk7XG5cdH1cbn07XG5cblxuXG5cblFBU01QYXJzZXIuTWl4ZWRsaXN0Q29udGV4dCA9IE1peGVkbGlzdENvbnRleHQ7XG5cblFBU01QYXJzZXIucHJvdG90eXBlLm1peGVkbGlzdCA9IGZ1bmN0aW9uKCkge1xuXG4gICAgdmFyIGxvY2FsY3R4ID0gbmV3IE1peGVkbGlzdENvbnRleHQodGhpcywgdGhpcy5fY3R4LCB0aGlzLnN0YXRlKTtcbiAgICB0aGlzLmVudGVyUnVsZShsb2NhbGN0eCwgMjQsIFFBU01QYXJzZXIuUlVMRV9taXhlZGxpc3QpO1xuICAgIHRyeSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAyNDI7XG4gICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgdmFyIGxhXyA9IHRoaXMuX2ludGVycC5hZGFwdGl2ZVByZWRpY3QodGhpcy5faW5wdXQsMTQsdGhpcy5fY3R4KTtcbiAgICAgICAgc3dpdGNoKGxhXykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDEpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIwNjtcbiAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgIHZhciBfYWx0ID0gdGhpcy5faW50ZXJwLmFkYXB0aXZlUHJlZGljdCh0aGlzLl9pbnB1dCwxMCx0aGlzLl9jdHgpXG4gICAgICAgICAgICB3aGlsZShfYWx0IT0yICYmIF9hbHQhPWFudGxyNC5hdG4uQVROLklOVkFMSURfQUxUX05VTUJFUikge1xuICAgICAgICAgICAgICAgIGlmKF9hbHQ9PT0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxOTk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JRCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMDA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18xMSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMDE7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JTlQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjAyO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjAzO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMjEpOyBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIwODtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgICAgICAgICAgX2FsdCA9IHRoaXMuX2ludGVycC5hZGFwdGl2ZVByZWRpY3QodGhpcy5faW5wdXQsMTAsdGhpcy5fY3R4KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIwOTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JRCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDIpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIxNztcbiAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgIHZhciBfYWx0ID0gdGhpcy5faW50ZXJwLmFkYXB0aXZlUHJlZGljdCh0aGlzLl9pbnB1dCwxMSx0aGlzLl9jdHgpXG4gICAgICAgICAgICB3aGlsZShfYWx0IT0yICYmIF9hbHQhPWFudGxyNC5hdG4uQVROLklOVkFMSURfQUxUX05VTUJFUikge1xuICAgICAgICAgICAgICAgIGlmKF9hbHQ9PT0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMTA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JRCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMTE7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18xMSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMTI7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JTlQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjEzO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjE0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMjEpOyBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIxOTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgICAgICAgICAgX2FsdCA9IHRoaXMuX2ludGVycC5hZGFwdGl2ZVByZWRpY3QodGhpcy5faW5wdXQsMTEsdGhpcy5fY3R4KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIyMDtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JRCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjIxO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzExKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMjI7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSU5UKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMjM7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTIpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAzKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMzU7XG4gICAgICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgICAgICB2YXIgX2FsdCA9IHRoaXMuX2ludGVycC5hZGFwdGl2ZVByZWRpY3QodGhpcy5faW5wdXQsMTMsdGhpcy5fY3R4KVxuICAgICAgICAgICAgd2hpbGUoX2FsdCE9MiAmJiBfYWx0IT1hbnRscjQuYXRuLkFUTi5JTlZBTElEX0FMVF9OVU1CRVIpIHtcbiAgICAgICAgICAgICAgICBpZihfYWx0PT09MSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjI4O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfYWx0ID0gdGhpcy5faW50ZXJwLmFkYXB0aXZlUHJlZGljdCh0aGlzLl9pbnB1dCwxMix0aGlzLl9jdHgpXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlKF9hbHQhPTIgJiYgX2FsdCE9YW50bHI0LmF0bi5BVE4uSU5WQUxJRF9BTFRfTlVNQkVSKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihfYWx0PT09MSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMjQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklEKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjI1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yMSk7IFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hbHQgPSB0aGlzLl9pbnRlcnAuYWRhcHRpdmVQcmVkaWN0KHRoaXMuX2lucHV0LDEyLHRoaXMuX2N0eCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjMxO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSUQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjMyO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMjEpOyBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIzNztcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgICAgICAgICAgX2FsdCA9IHRoaXMuX2ludGVycC5hZGFwdGl2ZVByZWRpY3QodGhpcy5faW5wdXQsMTMsdGhpcy5fY3R4KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIzODtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JRCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjM5O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzExKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNDA7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSU5UKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNDE7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTIpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKHJlKSB7XG4gICAgXHRpZihyZSBpbnN0YW5jZW9mIGFudGxyNC5lcnJvci5SZWNvZ25pdGlvbkV4Y2VwdGlvbikge1xuXHQgICAgICAgIGxvY2FsY3R4LmV4Y2VwdGlvbiA9IHJlO1xuXHQgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVwb3J0RXJyb3IodGhpcywgcmUpO1xuXHQgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVjb3Zlcih0aGlzLCByZSk7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgXHR0aHJvdyByZTtcblx0ICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLmV4aXRSdWxlKCk7XG4gICAgfVxuICAgIHJldHVybiBsb2NhbGN0eDtcbn07XG5cbmZ1bmN0aW9uIEFyZ3VtZW50Q29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX2FyZ3VtZW50O1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5Bcmd1bWVudENvbnRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQucHJvdG90eXBlKTtcbkFyZ3VtZW50Q29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBcmd1bWVudENvbnRleHQ7XG5cbkFyZ3VtZW50Q29udGV4dC5wcm90b3R5cGUuSUQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUb2tlbihRQVNNUGFyc2VyLklELCAwKTtcbn07XG5cbkFyZ3VtZW50Q29udGV4dC5wcm90b3R5cGUuSU5UID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW4oUUFTTVBhcnNlci5JTlQsIDApO1xufTtcblxuQXJndW1lbnRDb250ZXh0LnByb3RvdHlwZS5lbnRlclJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5lbnRlckFyZ3VtZW50KHRoaXMpO1xuXHR9XG59O1xuXG5Bcmd1bWVudENvbnRleHQucHJvdG90eXBlLmV4aXRSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZXhpdEFyZ3VtZW50KHRoaXMpO1xuXHR9XG59O1xuXG5cblxuXG5RQVNNUGFyc2VyLkFyZ3VtZW50Q29udGV4dCA9IEFyZ3VtZW50Q29udGV4dDtcblxuUUFTTVBhcnNlci5wcm90b3R5cGUuYXJndW1lbnQgPSBmdW5jdGlvbigpIHtcblxuICAgIHZhciBsb2NhbGN0eCA9IG5ldyBBcmd1bWVudENvbnRleHQodGhpcywgdGhpcy5fY3R4LCB0aGlzLnN0YXRlKTtcbiAgICB0aGlzLmVudGVyUnVsZShsb2NhbGN0eCwgMjYsIFFBU01QYXJzZXIuUlVMRV9hcmd1bWVudCk7XG4gICAgdHJ5IHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IDI0OTtcbiAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICB2YXIgbGFfID0gdGhpcy5faW50ZXJwLmFkYXB0aXZlUHJlZGljdCh0aGlzLl9pbnB1dCwxNSx0aGlzLl9jdHgpO1xuICAgICAgICBzd2l0Y2gobGFfKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjQ0O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklEKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMik7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjQ1O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklEKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNDY7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTEpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI0NztcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JTlQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI0ODtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18xMik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICB9XG4gICAgfSBjYXRjaCAocmUpIHtcbiAgICBcdGlmKHJlIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gcmU7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IHJlO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuZXhpdFJ1bGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gRXhwbGlzdENvbnRleHQocGFyc2VyLCBwYXJlbnQsIGludm9raW5nU3RhdGUpIHtcblx0aWYocGFyZW50PT09dW5kZWZpbmVkKSB7XG5cdCAgICBwYXJlbnQgPSBudWxsO1xuXHR9XG5cdGlmKGludm9raW5nU3RhdGU9PT11bmRlZmluZWQgfHwgaW52b2tpbmdTdGF0ZT09PW51bGwpIHtcblx0XHRpbnZva2luZ1N0YXRlID0gLTE7XG5cdH1cblx0YW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LmNhbGwodGhpcywgcGFyZW50LCBpbnZva2luZ1N0YXRlKTtcbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IFFBU01QYXJzZXIuUlVMRV9leHBsaXN0O1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5FeHBsaXN0Q29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuRXhwbGlzdENvbnRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRXhwbGlzdENvbnRleHQ7XG5cbkV4cGxpc3RDb250ZXh0LnByb3RvdHlwZS5leHAgPSBmdW5jdGlvbihpKSB7XG4gICAgaWYoaT09PXVuZGVmaW5lZCkge1xuICAgICAgICBpID0gbnVsbDtcbiAgICB9XG4gICAgaWYoaT09PW51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dHMoRXhwQ29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChFeHBDb250ZXh0LGkpO1xuICAgIH1cbn07XG5cbkV4cGxpc3RDb250ZXh0LnByb3RvdHlwZS5lbnRlclJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5lbnRlckV4cGxpc3QodGhpcyk7XG5cdH1cbn07XG5cbkV4cGxpc3RDb250ZXh0LnByb3RvdHlwZS5leGl0UnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmV4aXRFeHBsaXN0KHRoaXMpO1xuXHR9XG59O1xuXG5cblxuXG5RQVNNUGFyc2VyLkV4cGxpc3RDb250ZXh0ID0gRXhwbGlzdENvbnRleHQ7XG5cblFBU01QYXJzZXIucHJvdG90eXBlLmV4cGxpc3QgPSBmdW5jdGlvbigpIHtcblxuICAgIHZhciBsb2NhbGN0eCA9IG5ldyBFeHBsaXN0Q29udGV4dCh0aGlzLCB0aGlzLl9jdHgsIHRoaXMuc3RhdGUpO1xuICAgIHRoaXMuZW50ZXJSdWxlKGxvY2FsY3R4LCAyOCwgUUFTTVBhcnNlci5SVUxFX2V4cGxpc3QpO1xuICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMSk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAyNTY7XG4gICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgdmFyIF9hbHQgPSB0aGlzLl9pbnRlcnAuYWRhcHRpdmVQcmVkaWN0KHRoaXMuX2lucHV0LDE2LHRoaXMuX2N0eClcbiAgICAgICAgd2hpbGUoX2FsdCE9MiAmJiBfYWx0IT1hbnRscjQuYXRuLkFUTi5JTlZBTElEX0FMVF9OVU1CRVIpIHtcbiAgICAgICAgICAgIGlmKF9hbHQ9PT0xKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI1MTtcbiAgICAgICAgICAgICAgICB0aGlzLmV4cCgwKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjUyO1xuICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yMSk7IFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI1ODtcbiAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgIF9hbHQgPSB0aGlzLl9pbnRlcnAuYWRhcHRpdmVQcmVkaWN0KHRoaXMuX2lucHV0LDE2LHRoaXMuX2N0eCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN0YXRlID0gMjU5O1xuICAgICAgICB0aGlzLmV4cCgwKTtcbiAgICB9IGNhdGNoIChyZSkge1xuICAgIFx0aWYocmUgaW5zdGFuY2VvZiBhbnRscjQuZXJyb3IuUmVjb2duaXRpb25FeGNlcHRpb24pIHtcblx0ICAgICAgICBsb2NhbGN0eC5leGNlcHRpb24gPSByZTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgIFx0dGhyb3cgcmU7XG5cdCAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5leGl0UnVsZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbG9jYWxjdHg7XG59O1xuXG5mdW5jdGlvbiBFeHBDb250ZXh0KHBhcnNlciwgcGFyZW50LCBpbnZva2luZ1N0YXRlKSB7XG5cdGlmKHBhcmVudD09PXVuZGVmaW5lZCkge1xuXHQgICAgcGFyZW50ID0gbnVsbDtcblx0fVxuXHRpZihpbnZva2luZ1N0YXRlPT09dW5kZWZpbmVkIHx8IGludm9raW5nU3RhdGU9PT1udWxsKSB7XG5cdFx0aW52b2tpbmdTdGF0ZSA9IC0xO1xuXHR9XG5cdGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5jYWxsKHRoaXMsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSk7XG4gICAgdGhpcy5wYXJzZXIgPSBwYXJzZXI7XG4gICAgdGhpcy5ydWxlSW5kZXggPSBRQVNNUGFyc2VyLlJVTEVfZXhwO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5FeHBDb250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZSk7XG5FeHBDb250ZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEV4cENvbnRleHQ7XG5cbkV4cENvbnRleHQucHJvdG90eXBlLmV4cCA9IGZ1bmN0aW9uKGkpIHtcbiAgICBpZihpPT09dW5kZWZpbmVkKSB7XG4gICAgICAgIGkgPSBudWxsO1xuICAgIH1cbiAgICBpZihpPT09bnVsbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0cyhFeHBDb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KEV4cENvbnRleHQsaSk7XG4gICAgfVxufTtcblxuRXhwQ29udGV4dC5wcm90b3R5cGUudW5hcnlvcCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFR5cGVkUnVsZUNvbnRleHQoVW5hcnlvcENvbnRleHQsMCk7XG59O1xuXG5FeHBDb250ZXh0LnByb3RvdHlwZS5hdG9tID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChBdG9tQ29udGV4dCwwKTtcbn07XG5cbkV4cENvbnRleHQucHJvdG90eXBlLmVudGVyUnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmVudGVyRXhwKHRoaXMpO1xuXHR9XG59O1xuXG5FeHBDb250ZXh0LnByb3RvdHlwZS5leGl0UnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmV4aXRFeHAodGhpcyk7XG5cdH1cbn07XG5cblxuXG5RQVNNUGFyc2VyLnByb3RvdHlwZS5leHAgPSBmdW5jdGlvbihfcCkge1xuXHRpZihfcD09PXVuZGVmaW5lZCkge1xuXHQgICAgX3AgPSAwO1xuXHR9XG4gICAgdmFyIF9wYXJlbnRjdHggPSB0aGlzLl9jdHg7XG4gICAgdmFyIF9wYXJlbnRTdGF0ZSA9IHRoaXMuc3RhdGU7XG4gICAgdmFyIGxvY2FsY3R4ID0gbmV3IEV4cENvbnRleHQodGhpcywgdGhpcy5fY3R4LCBfcGFyZW50U3RhdGUpO1xuICAgIHZhciBfcHJldmN0eCA9IGxvY2FsY3R4O1xuICAgIHZhciBfc3RhcnRTdGF0ZSA9IDMwO1xuICAgIHRoaXMuZW50ZXJSZWN1cnNpb25SdWxlKGxvY2FsY3R4LCAzMCwgUUFTTVBhcnNlci5SVUxFX2V4cCwgX3ApO1xuICAgIHZhciBfbGEgPSAwOyAvLyBUb2tlbiB0eXBlXG4gICAgdHJ5IHtcbiAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAxKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IDI4MTtcbiAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICB2YXIgbGFfID0gdGhpcy5faW50ZXJwLmFkYXB0aXZlUHJlZGljdCh0aGlzLl9pbnB1dCwyMCx0aGlzLl9jdHgpO1xuICAgICAgICBzd2l0Y2gobGFfKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNjM7XG4gICAgICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgICAgICBfbGEgPSB0aGlzLl9pbnB1dC5MQSgxKTtcbiAgICAgICAgICAgIGlmKF9sYT09PVFBU01QYXJzZXIuVF9fMjUgfHwgX2xhPT09UUFTTVBhcnNlci5UX18yNikge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNjI7XG4gICAgICAgICAgICAgICAgX2xhID0gdGhpcy5faW5wdXQuTEEoMSk7XG4gICAgICAgICAgICAgICAgaWYoIShfbGE9PT1RQVNNUGFyc2VyLlRfXzI1IHx8IF9sYT09PVFBU01QYXJzZXIuVF9fMjYpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVySW5saW5lKHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBcdHRoaXMuX2VyckhhbmRsZXIucmVwb3J0TWF0Y2godGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI2NTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18zKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNjY7XG4gICAgICAgICAgICB0aGlzLmV4cCgwKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNjc7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fNCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjcwO1xuICAgICAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICAgICAgX2xhID0gdGhpcy5faW5wdXQuTEEoMSk7XG4gICAgICAgICAgICBpZihfbGE9PT1RQVNNUGFyc2VyLlRfXzI1IHx8IF9sYT09PVFBU01QYXJzZXIuVF9fMjYpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjY5O1xuICAgICAgICAgICAgICAgIF9sYSA9IHRoaXMuX2lucHV0LkxBKDEpO1xuICAgICAgICAgICAgICAgIGlmKCEoX2xhPT09UUFTTVBhcnNlci5UX18yNSB8fCBfbGE9PT1RQVNNUGFyc2VyLlRfXzI2KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVjb3ZlcklubGluZSh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgXHR0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydE1hdGNoKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNzI7XG4gICAgICAgICAgICB0aGlzLnVuYXJ5b3AoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNzM7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjc0O1xuICAgICAgICAgICAgdGhpcy5leHAoMCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjc1O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzQpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI3ODtcbiAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgIF9sYSA9IHRoaXMuX2lucHV0LkxBKDEpO1xuICAgICAgICAgICAgaWYoX2xhPT09UUFTTVBhcnNlci5UX18yNSB8fCBfbGE9PT1RQVNNUGFyc2VyLlRfXzI2KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI3NztcbiAgICAgICAgICAgICAgICBfbGEgPSB0aGlzLl9pbnB1dC5MQSgxKTtcbiAgICAgICAgICAgICAgICBpZighKF9sYT09PVFBU01QYXJzZXIuVF9fMjUgfHwgX2xhPT09UUFTTVBhcnNlci5UX18yNikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlY292ZXJJbmxpbmUodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIFx0dGhpcy5fZXJySGFuZGxlci5yZXBvcnRNYXRjaCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjgwO1xuICAgICAgICAgICAgdGhpcy5hdG9tKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2N0eC5zdG9wID0gdGhpcy5faW5wdXQuTFQoLTEpO1xuICAgICAgICB0aGlzLnN0YXRlID0gMjk0O1xuICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgIHZhciBfYWx0ID0gdGhpcy5faW50ZXJwLmFkYXB0aXZlUHJlZGljdCh0aGlzLl9pbnB1dCwyMix0aGlzLl9jdHgpXG4gICAgICAgIHdoaWxlKF9hbHQhPTIgJiYgX2FsdCE9YW50bHI0LmF0bi5BVE4uSU5WQUxJRF9BTFRfTlVNQkVSKSB7XG4gICAgICAgICAgICBpZihfYWx0PT09MSkge1xuICAgICAgICAgICAgICAgIGlmKHRoaXMuX3BhcnNlTGlzdGVuZXJzIT09bnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJFeGl0UnVsZUV2ZW50KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF9wcmV2Y3R4ID0gbG9jYWxjdHg7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI5MjtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgICAgICAgICAgdmFyIGxhXyA9IHRoaXMuX2ludGVycC5hZGFwdGl2ZVByZWRpY3QodGhpcy5faW5wdXQsMjEsdGhpcy5fY3R4KTtcbiAgICAgICAgICAgICAgICBzd2l0Y2gobGFfKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBsb2NhbGN0eCA9IG5ldyBFeHBDb250ZXh0KHRoaXMsIF9wYXJlbnRjdHgsIF9wYXJlbnRTdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaE5ld1JlY3Vyc2lvbkNvbnRleHQobG9jYWxjdHgsIF9zdGFydFN0YXRlLCBRQVNNUGFyc2VyLlJVTEVfZXhwKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI4MztcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoIHRoaXMucHJlY3ByZWQodGhpcy5fY3R4LCA2KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBhbnRscjQuZXJyb3IuRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9uKHRoaXMsIFwidGhpcy5wcmVjcHJlZCh0aGlzLl9jdHgsIDYpXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyODQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yMik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyODU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwKDcpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxjdHggPSBuZXcgRXhwQ29udGV4dCh0aGlzLCBfcGFyZW50Y3R4LCBfcGFyZW50U3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnB1c2hOZXdSZWN1cnNpb25Db250ZXh0KGxvY2FsY3R4LCBfc3RhcnRTdGF0ZSwgUUFTTVBhcnNlci5SVUxFX2V4cCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyODY7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKCB0aGlzLnByZWNwcmVkKHRoaXMuX2N0eCwgNSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgYW50bHI0LmVycm9yLkZhaWxlZFByZWRpY2F0ZUV4Y2VwdGlvbih0aGlzLCBcInRoaXMucHJlY3ByZWQodGhpcy5fY3R4LCA1KVwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjg3O1xuICAgICAgICAgICAgICAgICAgICBfbGEgPSB0aGlzLl9pbnB1dC5MQSgxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYoIShfbGE9PT1RQVNNUGFyc2VyLlRfXzIzIHx8IF9sYT09PVFBU01QYXJzZXIuVF9fMjQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVjb3ZlcklubGluZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgXHR0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydE1hdGNoKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI4ODtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5leHAoNik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICBsb2NhbGN0eCA9IG5ldyBFeHBDb250ZXh0KHRoaXMsIF9wYXJlbnRjdHgsIF9wYXJlbnRTdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaE5ld1JlY3Vyc2lvbkNvbnRleHQobG9jYWxjdHgsIF9zdGFydFN0YXRlLCBRQVNNUGFyc2VyLlJVTEVfZXhwKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI4OTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoIHRoaXMucHJlY3ByZWQodGhpcy5fY3R4LCA0KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBhbnRscjQuZXJyb3IuRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9uKHRoaXMsIFwidGhpcy5wcmVjcHJlZCh0aGlzLl9jdHgsIDQpXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyOTA7XG4gICAgICAgICAgICAgICAgICAgIF9sYSA9IHRoaXMuX2lucHV0LkxBKDEpO1xuICAgICAgICAgICAgICAgICAgICBpZighKF9sYT09PVFBU01QYXJzZXIuVF9fMjUgfHwgX2xhPT09UUFTTVBhcnNlci5UX18yNikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVySW5saW5lKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBcdHRoaXMuX2VyckhhbmRsZXIucmVwb3J0TWF0Y2godGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjkxO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cCg1KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICB9IFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI5NjtcbiAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgIF9hbHQgPSB0aGlzLl9pbnRlcnAuYWRhcHRpdmVQcmVkaWN0KHRoaXMuX2lucHV0LDIyLHRoaXMuX2N0eCk7XG4gICAgICAgIH1cblxuICAgIH0gY2F0Y2goIGVycm9yKSB7XG4gICAgICAgIGlmKGVycm9yIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gZXJyb3I7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCBlcnJvcik7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIGVycm9yKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IGVycm9yO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMudW5yb2xsUmVjdXJzaW9uQ29udGV4dHMoX3BhcmVudGN0eClcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gQXRvbUNvbnRleHQocGFyc2VyLCBwYXJlbnQsIGludm9raW5nU3RhdGUpIHtcblx0aWYocGFyZW50PT09dW5kZWZpbmVkKSB7XG5cdCAgICBwYXJlbnQgPSBudWxsO1xuXHR9XG5cdGlmKGludm9raW5nU3RhdGU9PT11bmRlZmluZWQgfHwgaW52b2tpbmdTdGF0ZT09PW51bGwpIHtcblx0XHRpbnZva2luZ1N0YXRlID0gLTE7XG5cdH1cblx0YW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LmNhbGwodGhpcywgcGFyZW50LCBpbnZva2luZ1N0YXRlKTtcbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IFFBU01QYXJzZXIuUlVMRV9hdG9tO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5BdG9tQ29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuQXRvbUNvbnRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQXRvbUNvbnRleHQ7XG5cbkF0b21Db250ZXh0LnByb3RvdHlwZS5JTlQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUb2tlbihRQVNNUGFyc2VyLklOVCwgMCk7XG59O1xuXG5BdG9tQ29udGV4dC5wcm90b3R5cGUuUkVBTCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuUkVBTCwgMCk7XG59O1xuXG5BdG9tQ29udGV4dC5wcm90b3R5cGUuUEkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUb2tlbihRQVNNUGFyc2VyLlBJLCAwKTtcbn07XG5cbkF0b21Db250ZXh0LnByb3RvdHlwZS5JRCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuSUQsIDApO1xufTtcblxuQXRvbUNvbnRleHQucHJvdG90eXBlLmVudGVyUnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmVudGVyQXRvbSh0aGlzKTtcblx0fVxufTtcblxuQXRvbUNvbnRleHQucHJvdG90eXBlLmV4aXRSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZXhpdEF0b20odGhpcyk7XG5cdH1cbn07XG5cblxuXG5cblFBU01QYXJzZXIuQXRvbUNvbnRleHQgPSBBdG9tQ29udGV4dDtcblxuUUFTTVBhcnNlci5wcm90b3R5cGUuYXRvbSA9IGZ1bmN0aW9uKCkge1xuXG4gICAgdmFyIGxvY2FsY3R4ID0gbmV3IEF0b21Db250ZXh0KHRoaXMsIHRoaXMuX2N0eCwgdGhpcy5zdGF0ZSk7XG4gICAgdGhpcy5lbnRlclJ1bGUobG9jYWxjdHgsIDMyLCBRQVNNUGFyc2VyLlJVTEVfYXRvbSk7XG4gICAgdmFyIF9sYSA9IDA7IC8vIFRva2VuIHR5cGVcbiAgICB0cnkge1xuICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDEpO1xuICAgICAgICB0aGlzLnN0YXRlID0gMjk3O1xuICAgICAgICBfbGEgPSB0aGlzLl9pbnB1dC5MQSgxKTtcbiAgICAgICAgaWYoISgoKCgoX2xhIC0gMzQpKSAmIH4weDFmKSA9PSAwICYmICgoMSA8PCAoX2xhIC0gMzQpKSAmICgoMSA8PCAoUUFTTVBhcnNlci5QSSAtIDM0KSkgfCAoMSA8PCAoUUFTTVBhcnNlci5SRUFMIC0gMzQpKSB8ICgxIDw8IChRQVNNUGFyc2VyLklOVCAtIDM0KSkgfCAoMSA8PCAoUUFTTVBhcnNlci5JRCAtIDM0KSkpKSAhPT0gMCkpKSB7XG4gICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVjb3ZlcklubGluZSh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgXHR0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydE1hdGNoKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChyZSkge1xuICAgIFx0aWYocmUgaW5zdGFuY2VvZiBhbnRscjQuZXJyb3IuUmVjb2duaXRpb25FeGNlcHRpb24pIHtcblx0ICAgICAgICBsb2NhbGN0eC5leGNlcHRpb24gPSByZTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgIFx0dGhyb3cgcmU7XG5cdCAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5leGl0UnVsZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbG9jYWxjdHg7XG59O1xuXG5mdW5jdGlvbiBVbmFyeW9wQ29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX3VuYXJ5b3A7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cblVuYXJ5b3BDb250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZSk7XG5VbmFyeW9wQ29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBVbmFyeW9wQ29udGV4dDtcblxuXG5VbmFyeW9wQ29udGV4dC5wcm90b3R5cGUuZW50ZXJSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZW50ZXJVbmFyeW9wKHRoaXMpO1xuXHR9XG59O1xuXG5VbmFyeW9wQ29udGV4dC5wcm90b3R5cGUuZXhpdFJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5leGl0VW5hcnlvcCh0aGlzKTtcblx0fVxufTtcblxuXG5cblxuUUFTTVBhcnNlci5VbmFyeW9wQ29udGV4dCA9IFVuYXJ5b3BDb250ZXh0O1xuXG5RQVNNUGFyc2VyLnByb3RvdHlwZS51bmFyeW9wID0gZnVuY3Rpb24oKSB7XG5cbiAgICB2YXIgbG9jYWxjdHggPSBuZXcgVW5hcnlvcENvbnRleHQodGhpcywgdGhpcy5fY3R4LCB0aGlzLnN0YXRlKTtcbiAgICB0aGlzLmVudGVyUnVsZShsb2NhbGN0eCwgMzQsIFFBU01QYXJzZXIuUlVMRV91bmFyeW9wKTtcbiAgICB2YXIgX2xhID0gMDsgLy8gVG9rZW4gdHlwZVxuICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMSk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAyOTk7XG4gICAgICAgIF9sYSA9IHRoaXMuX2lucHV0LkxBKDEpO1xuICAgICAgICBpZighKCgoKChfbGEgLSAyOCkpICYgfjB4MWYpID09IDAgJiYgKCgxIDw8IChfbGEgLSAyOCkpICYgKCgxIDw8IChRQVNNUGFyc2VyLlRfXzI3IC0gMjgpKSB8ICgxIDw8IChRQVNNUGFyc2VyLlRfXzI4IC0gMjgpKSB8ICgxIDw8IChRQVNNUGFyc2VyLlRfXzI5IC0gMjgpKSB8ICgxIDw8IChRQVNNUGFyc2VyLlRfXzMwIC0gMjgpKSB8ICgxIDw8IChRQVNNUGFyc2VyLlRfXzMxIC0gMjgpKSB8ICgxIDw8IChRQVNNUGFyc2VyLlRfXzMyIC0gMjgpKSkpICE9PSAwKSkpIHtcbiAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVySW5saW5lKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICBcdHRoaXMuX2VyckhhbmRsZXIucmVwb3J0TWF0Y2godGhpcyk7XG4gICAgICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKHJlKSB7XG4gICAgXHRpZihyZSBpbnN0YW5jZW9mIGFudGxyNC5lcnJvci5SZWNvZ25pdGlvbkV4Y2VwdGlvbikge1xuXHQgICAgICAgIGxvY2FsY3R4LmV4Y2VwdGlvbiA9IHJlO1xuXHQgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVwb3J0RXJyb3IodGhpcywgcmUpO1xuXHQgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVjb3Zlcih0aGlzLCByZSk7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgXHR0aHJvdyByZTtcblx0ICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLmV4aXRSdWxlKCk7XG4gICAgfVxuICAgIHJldHVybiBsb2NhbGN0eDtcbn07XG5cblxuUUFTTVBhcnNlci5wcm90b3R5cGUuc2VtcHJlZCA9IGZ1bmN0aW9uKGxvY2FsY3R4LCBydWxlSW5kZXgsIHByZWRJbmRleCkge1xuXHRzd2l0Y2gocnVsZUluZGV4KSB7XG5cdGNhc2UgMTU6XG5cdFx0XHRyZXR1cm4gdGhpcy5leHBfc2VtcHJlZChsb2NhbGN0eCwgcHJlZEluZGV4KTtcbiAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBcIk5vIHByZWRpY2F0ZSB3aXRoIGluZGV4OlwiICsgcnVsZUluZGV4O1xuICAgfVxufTtcblxuUUFTTVBhcnNlci5wcm90b3R5cGUuZXhwX3NlbXByZWQgPSBmdW5jdGlvbihsb2NhbGN0eCwgcHJlZEluZGV4KSB7XG5cdHN3aXRjaChwcmVkSW5kZXgpIHtcblx0XHRjYXNlIDA6XG5cdFx0XHRyZXR1cm4gdGhpcy5wcmVjcHJlZCh0aGlzLl9jdHgsIDYpO1xuXHRcdGNhc2UgMTpcblx0XHRcdHJldHVybiB0aGlzLnByZWNwcmVkKHRoaXMuX2N0eCwgNSk7XG5cdFx0Y2FzZSAyOlxuXHRcdFx0cmV0dXJuIHRoaXMucHJlY3ByZWQodGhpcy5fY3R4LCA0KTtcblx0XHRkZWZhdWx0OlxuXHRcdFx0dGhyb3cgXCJObyBwcmVkaWNhdGUgd2l0aCBpbmRleDpcIiArIHByZWRJbmRleDtcblx0fVxufTtcblxuXG5leHBvcnRzLlFBU01QYXJzZXIgPSBRQVNNUGFyc2VyO1xuIiwiLyoqXG4gKiBAbGljZW5zZVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNiwgUGV0YXIgS29ycG9uYWnEhyA8cGV0YXIua29ycG9uYWljQGdtYWlsLmNvbT5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSwgZm91bmQgaW5cbiAqIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbnZhciBtYXRoID0gcmVxdWlyZShcIm1hdGhqc1wiKTtcblxudmFyIFFBU01JbXBvcnQgPSByZXF1aXJlKFwiLi9xYXNtX2ltcG9ydC9RQVNNSW1wb3J0LmpzXCIpO1xuXG5cbnZhciBmb3JtYXRDb21wbGV4MiA9IGZ1bmN0aW9uKHJlLCBpbSwgb3B0aW9ucykge1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR2YXIgc3JlID0gZm9ybWF0RmxvYXQocmUsIG9wdGlvbnMpO1xuXG5cdHZhciBvcHQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpKTtcblx0b3B0LnBsdXNDaGFyID0gXCIrXCI7XG5cdHZhciBzaW0gPSBmb3JtYXRGbG9hdChpbSwgb3B0KTtcblx0cmV0dXJuIHNyZSArIHNpbSArIChvcHRpb25zLmlvdGFDaGFyID8gb3B0aW9ucy5pb3RhQ2hhciA6IFwiaVwiKTtcbn07XG5cbnZhciBmb3JtYXRGbG9hdCA9IGZ1bmN0aW9uKGYsIG9wdGlvbnMpIHtcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0aWYob3B0aW9ucy5kZWNpbWFsUGxhY2VzKSB7XG5cdFx0ZiA9IG1hdGgucm91bmQoZiwgb3B0aW9ucy5kZWNpbWFsUGxhY2VzKTtcblx0fVxuXG5cdHZhciBzID0gZiArIFwiXCI7XG5cblx0aWYob3B0aW9ucy5maXhlZFdpZHRoKSB7XG5cdFx0cyA9IGYudG9GaXhlZChvcHRpb25zLmRlY2ltYWxQbGFjZXMgfHwgMTQpO1xuXHR9XG5cblx0dmFyIHBsdXNDaGFyID0gb3B0aW9ucy5wbHVzQ2hhcjtcblx0aWYob3B0aW9ucy5maXhlZFdpZHRoICYmICFwbHVzQ2hhcikge1xuXHRcdHBsdXNDaGFyID0gXCIgXCI7XG5cdH1cblxuXHRpZihwbHVzQ2hhciAmJiBmID49IDApIHtcblx0XHRzID0gcGx1c0NoYXIgKyBzO1xuXHR9XG5cblx0cmV0dXJuIHM7XG59O1xuXG52YXIgemVyb2VzTWF0cml4ID0gZnVuY3Rpb24obikge1xuXHR2YXIgbWF0cml4ID0gW107XG5cdGZvcih2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcblx0XHRtYXRyaXhbaV0gPSBbXTtcblx0XHRmb3IodmFyIGogPSAwOyBqIDwgbjsgaisrKSB7XG5cdFx0XHRtYXRyaXhbaV1bal0gPSAwO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gbWF0cml4O1xufTtcblxudmFyIGlkZW50aXR5TWF0cml4ID0gZnVuY3Rpb24obikge1xuXHR2YXIgbWF0cml4ID0gW107XG5cdGZvcih2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcblx0XHRtYXRyaXhbaV0gPSBbXTtcblx0XHRmb3IodmFyIGogPSAwOyBqIDwgbjsgaisrKSB7XG5cdFx0XHRtYXRyaXhbaV1bal0gPSBqID09IGkgPyAxIDogMDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG1hdHJpeDtcbn07XG5cblxudmFyIG1ha2VDb250cm9sbGVkID0gZnVuY3Rpb24oVSkge1xuXHR2YXIgbSA9IFUubGVuZ3RoO1xuXHR2YXIgQyA9IGlkZW50aXR5TWF0cml4KG0gKiAyKTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBtOyBpKyspIHtcblx0XHRmb3IgKHZhciBqID0gMDsgaiA8IG07IGorKykge1xuXHRcdFx0Q1tpICsgbV1baiArIG1dID0gVVtpXVtqXTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIEM7XG59O1xuXG52YXIgdW5pcXVlQXJyYXkgPSBmdW5jdGlvbihhcnJheSkge1xuICByZXR1cm4gYXJyYXkuZmlsdGVyKGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgc2VsZikge1xuXHRyZXR1cm4gc2VsZi5pbmRleE9mKHZhbHVlKSA9PT0gaW5kZXg7XG4gIH0pO1xufTtcblxudmFyIHF1Yml0TGV0dGVyID0gZnVuY3Rpb24obiwgbWF4KSB7XG5cdG1heE4gPSBtYXggfHwgKG4gKyAxKTtcblxuXHRpZihtYXhOID4gMCkge1xuXHRcdG1heE4gPSBtYXhOIC0gMTtcblx0fVxuXG5cdG1heExlbiA9IG1heE4udG9TdHJpbmcoMjYpLmxlbmd0aDtcblxuXHR2YXIgblN0ciA9IG4udG9TdHJpbmcoMjYpO1xuXHR3aGlsZShuU3RyLmxlbmd0aCA8IG1heExlbikge1xuXHRcdG5TdHIgPSBcIjBcIiArIG5TdHI7XG5cdH1cblxuXHR2YXIgcmVzID0gXCJcIjtcblx0Zm9yKHZhciBpID0gMDsgaSA8IG5TdHIubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgY29kZSA9IG5TdHIuY2hhckNvZGVBdChpKTtcblx0XHRyZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlIDwgOTcgPyBjb2RlICsgNDkgOiBjb2RlICsgMTApO1xuXHR9XG5cblx0cmV0dXJuIHJlcztcbn07XG5cbnZhciBRdWFudHVtQ2lyY3VpdCA9IGZ1bmN0aW9uKG51bVF1Yml0cykge1xuXHR0aGlzLmJhc2ljR2F0ZXMgPSB7XG5cdFx0aWQ6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlNpbmdsZSBxdWJpdCBpZGVudGl0eSBnYXRlXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsIDBdLFxuXHRcdFx0XHRbMCwgMV1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJJRFwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJJXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdG5hbWU6IFwiSVwiLFxuXHRcdFx0XHRcdG5vdFRmcVN1cHBvcnRlZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY29tcGFjdFVuaXRhcnlcIixcblx0XHRcdFx0XHRwYXJhbXM6IHsgYWxwaGE6IFwiKENvbXBsZXgpIHsgLnJlYWwgPSAxLCAuaW1hZyA9IDAgfVwiLFxuXHRcdFx0XHRcdFx0XHRiZXRhOiBcIihDb21wbGV4KSB7LnJlYWwgPSAwLCAuaW1hZyA9IDB9XCJ9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiSVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiaWRcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcImlcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiSVwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0eDoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiUGF1bGkgWCAoUEkgcm90YXRpb24gb3ZlciBYLWF4aXMpIGFrYSBcXFwiTk9UXFxcIiBnYXRlXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzAsMV0sXG5cdFx0XHRcdFsxLDBdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiWFwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJYXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdG5hbWU6IFwiWFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJwYXVsaVhcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlhcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwieFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJYXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHR5OiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJQYXVsaSBZIChQSSByb3RhdGlvbiBvdmVyIFktYXhpcylcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMCxcIi1pXCJdLFxuXHRcdFx0XHRbXCJpXCIsMF1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJZXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIllcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJZXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcInBhdWxpWVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1aXJrOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJZXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ5XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIllcIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHo6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlBhdWxpIFogKFBJIHJvdGF0aW9uIG92ZXIgWi1heGlzKVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDBdLFxuXHRcdFx0XHRbMCwtMV1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJaXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlpcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJaXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcInBhdWxpWlwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWlwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1aXJrOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJaXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ6XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlpcIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGg6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIkhhZGFtYXJkIGdhdGVcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbXCIxIC8gc3FydCgyKVwiLFwiMSAvIHNxcnQoMilcIl0sXG5cdFx0XHRcdFtcIjEgLyBzcXJ0KDIpXCIsXCItMSAvIHNxcnQoMilcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJIXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkhcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJIXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcImhhZGFtYXJkXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJIXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVpcms6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkhcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcImhcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiSFwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0c3JuOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJTcXVhcmUgcm9vdCBvZiBOT1RcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbXCIwLjUrMC41aVwiLFwiMC41LTAuNWlcIl0sXG5cdFx0XHRcdFtcIjAuNS0wLjVpXCIsXCIwLjUrMC41aVwiXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIiYjeDIyMUE7WFwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJzcm5cIixcblx0XHRcdFx0XHRkZWZnYXRlOiBcIkRFRkdBVEUgc3JuOlxcbiAgICAwLjUrMC41aSwgMC41LTAuNWlcXG4gICAgMC41LTAuNWksIDAuNSswLjVpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cHlxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJzcm5cIixcblx0XHRcdFx0XHRhcnJheTogXCJbWzAuNSswLjVqLCAwLjUtMC41al0sIFswLjUtMC41aiwgMC41KzAuNWpdXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlgqKigxLzIpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRtYXRyaXg6IFtbW1wiMC41XCIsIFwiMC41XCJdLCBbXCIwLjVcIiwgXCItMC41XCJdXSxcblx0XHRcdFx0XHRcdFtbXCIwLjVcIiwgXCItMC41XCJdLFtcIjAuNVwiLCBcIjAuNVwiXV1dXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcInN4XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJzeFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidlwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bWF0cml4OiBbW1wiMC41KzAuNWlcIixcIjAuNS0wLjVpXCJdLFtcIjAuNS0wLjVpXCIsXCIwLjUrMC41aVwiXV0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1swLjUrMC41aiwgMC41LTAuNWpdLCBbMC41LTAuNWosIDAuNSswLjVqXV1cIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHNybmRnOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJJbnZlcnNlIHNxdWFyZSByb290IG9mIE5PVFwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFtcIjAuNS0wLjVpXCIsXCIwLjUrMC41aVwiXSxcblx0XHRcdFx0W1wiMC41KzAuNWlcIixcIjAuNS0wLjVpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiJiN4MjIxQTtYJiM4MjI0O1wiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJzcm5kZ1wiLFxuXHRcdFx0XHRcdGRlZmdhdGU6IFwiREVGR0FURSBzcm5kZzpcXG4gICAgMC41LTAuNWksIDAuNSswLjVpXFxuICAgIDAuNSswLjVpLCAwLjUtMC41aVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB5cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwic3JuZGdcIixcblx0XHRcdFx0XHRhcnJheTogXCJbWzAuNS0wLjVqLCAwLjUrMC41al0sIFswLjUrMC41aiwgMC41LTAuNWpdXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlgqKigtMS8yKVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0bWF0cml4OiBbW1tcIjAuNVwiLCBcIi0wLjVcIl0sIFtcIjAuNVwiLCBcIjAuNVwiXV0sXG5cdFx0XHRcdFx0XHRbW1wiMC41XCIsIFwiMC41XCJdLFtcIjAuNVwiLCBcIi0wLjVcIl1dXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJzeGRnXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJzeGRnXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ2aVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bWF0cml4OiBbW1wiMC41LTAuNWlcIixcIjAuNSswLjVpXCJdLFtcIjAuNSswLjVpXCIsXCIwLjUtMC41aVwiXV0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1swLjUtMC41aiwgMC41KzAuNWpdLCBbMC41KzAuNWosIDAuNS0wLjVqXV1cIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHIyOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJQSS8yIHJvdGF0aW9uIG92ZXIgWi1heGlzIGFrYSBcXFwiUGhhc2UgUEkvMlxcXCJcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwXSxcblx0XHRcdFx0WzAsXCJleHAoaSAqIHBpIC8gMilcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJaJiN4MUQ2RDE7LzJcIlxuXHRcdFx0fSxcblxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwic1wiXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwic1wiXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwic0dhdGVcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJzXCIsXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxYXNtOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IFtcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJzXCIsIHBhcmFtczoge30gfVxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwic1wiLCBwYXJhbXM6IHt9IH1cblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWl7CvVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwic1wiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJTXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRyNDoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiUEkvNCByb3RhdGlvbiBvdmVyIFotYXhpcyBha2EgXFxcIlBoYXNlIFBJLzRcXFwiXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsMF0sXG5cdFx0XHRcdFswLFwiZXhwKGkgKiBwaSAvIDQpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiWiYjeDFENkQxOy80XCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJ0XCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJ0XCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ0R2F0ZVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcInRcIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidFwiLCBwYXJhbXM6IHt9IH1cblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInRcIiwgcGFyYW1zOiB7fSB9XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVpcms6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlpewrxcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInRcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiVFwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0cjg6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlBJLzggcm90YXRpb24gb3ZlciBaLWF4aXMgYWthIFxcXCJQaGFzZSBQSS84XFxcIlwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDBdLFxuXHRcdFx0XHRbMCxcImV4cChpICogcGkgLyA4KVwiXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlomI3gxRDZEMTsvOFwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwidTFcIixcblx0XHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0XHRsYW1iZGE6IFwicGkvOFwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwidTFcIixcblx0XHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0XHRsYW1iZGE6IFwicGkvOFwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwicGhhc2VTaGlmdFwiLFxuXHRcdFx0XHRcdHBhcmFtczoge3RoZXRhOiBcIk1fUEkvOFwifVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJ1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCJwaS84XCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFhc206IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUxXCIsIHBhcmFtczogeyBsYW1iZGE6IFwicGkvOFwiIH0gfVxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTFcIiwgcGFyYW1zOiB7IGxhbWJkYTogXCJwaS84XCIgfSB9XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVpcms6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlpe4oWbXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJwaGFzZXNoaWZ0XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiB7dGhldGE6IFwicGkvOFwifVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG1hdHJpeDogW1sxLDBdLFswLFwiZXhwKGkgKiBwaSAvIDgpXCJdXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMF0sWzAsbnAuZXhwKDFqICogbnAucGkgLyA4KV1dXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRyeDoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiUm90YXRpb24gYXJvdW5kIHRoZSBYLWF4aXMgYnkgZ2l2ZW4gYW5nbGVcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbXCJjb3ModGhldGEgLyAyKVwiLCBcIi1pICogc2luKHRoZXRhIC8gMilcIl0sXG5cdFx0XHRcdFtcIi1pICogc2luKHRoZXRhIC8gMilcIiwgXCJjb3ModGhldGEgLyAyKVwiXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlJYXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlJYXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJyeFwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcInJvdGF0ZVhcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiUnhcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwicnhcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJSWFwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0cnk6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlJvdGF0aW9uIGFyb3VuZCB0aGUgWS1heGlzIGJ5IGdpdmVuIGFuZ2xlXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0W1wiY29zKHRoZXRhIC8gMilcIiwgXCItMSAqIHNpbih0aGV0YSAvIDIpXCJdLFxuXHRcdFx0XHRbXCJzaW4odGhldGEgLyAyKVwiLCBcImNvcyh0aGV0YSAvIDIpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiUllcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiUllcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcInJ5XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwicm90YXRlWVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJSeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJyeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlJZXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRyejoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiUm90YXRpb24gYXJvdW5kIHRoZSBaLWF4aXMgYnkgZ2l2ZW4gYW5nbGVcIixcblx0XHRcdFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFtcImNvcyhwaGkgLyAyKSAtIGkgKiBzaW4ocGhpIC8gMilcIiwgMF0sXG5cdFx0XHRcdFswLCBcImNvcyhwaGkgLyAyKSArIGkgKiBzaW4ocGhpIC8gMilcIl1cblx0XHRcdF0sXG5cblx0XHRcdHBhcmFtczogW1wicGhpXCJdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJSWlwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJSWlwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wicGhpXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcInJ6XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlJ6XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInJ6XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJwaGlcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlJaXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHR1MToge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiU2luZ2xlLXF1Yml0IHJvdGF0aW9uIGFib3V0IHRoZSBaIGF4aXNcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwXSxcblx0XHRcdFx0WzAsXCJleHAoaSAqIGxhbWJkYSlcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtcImxhbWJkYVwiXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiVTFcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiUEhBU0VcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcImxhbWJkYVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1MVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wibGFtYmRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwgMF0sIFswLCBucC5leHAoMWoqcF9sYW1iZGEpXV1cIixcblx0XHRcdFx0XHRub3RUZnFTdXBwb3J0ZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcInBoYXNlU2hpZnRcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcImxhbWJkYVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInBoYXNlc2hpZnRcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcImxhbWJkYVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInBcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiUEhcIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHUyOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJTaW5nbGUtcXViaXQgcm90YXRpb24gYWJvdXQgdGhlIFgrWiBheGlzXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0W1wiMSAvIHNxcnQoMilcIiwgXCItZXhwKGkgKiBsYW1iZGEpICogMSAvIHNxcnQoMilcIl0sXG5cdFx0XHRcdFtcImV4cChpICogcGhpKSAqIDEgLyBzcXJ0KDIpXCIsIFwiZXhwKGkgKiBsYW1iZGEgKyBpICogcGhpKSAqIDEgLyBzcXJ0KDIpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXCJwaGlcIiwgXCJsYW1iZGFcIl0sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlUyXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcInUyXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJwaGlcIiwgXCJsYW1iZGFcIl0sXG5cdFx0XHRcdFx0ZGVmZ2F0ZTogXCJERUZHQVRFIHUyKCVwaGksICVsYW1iZGEpOlxcbiAgICAxL1NRUlQoMiksIC0xKkVYUChpKiVsYW1iZGEpKjEvU1FSVCgyKVxcbiAgICBFWFAoaSolcGhpKSoxL1NRUlQoMiksIEVYUChpKiVsYW1iZGEgKyBpKiVwaGkpKjEvU1FSVCgyKVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB5cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidTJcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaVwiLCBcImxhbWJkYVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEvcXVpbF9zcXJ0KDIpLC1xdWlsX2V4cCgxaipwX2xhbWJkYSkqMS9xdWlsX3NxcnQoMildLFtxdWlsX2V4cCgxaipwX3BoaSkqMS9xdWlsX3NxcnQoMikscXVpbF9leHAoMWoqcF9sYW1iZGErMWoqcF9waGkpKjEvcXVpbF9zcXJ0KDIpXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1MlwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMS9ucC5zcXJ0KDIpLCAtbnAuZXhwKDFqKnBfbGFtYmRhKSoxL25wLnNxcnQoMildLCBbbnAuZXhwKDFqKnBfcGhpKSoxL25wLnNxcnQoMiksIG5wLmV4cCgxaipwX2xhbWJkYSsxaipwX3BoaSkqMS9ucC5zcXJ0KDIpXV1cIixcblx0XHRcdFx0XHRub3RUZnFTdXBwb3J0ZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaVwiLCBcImxhbWJkYVwiXSxcblx0XHRcdFx0XHRtYXRyaXg6IFtbW1wiMS9zcXJ0KDIpXCIsIFwiMFwiXSwgW1wiLWNvcyhsYW1iZGEpL3NxcnQoMilcIiwgXCItc2luKGxhbWJkYSkvc3FydCgyKVwiXV0sXG5cdFx0XHRcdFx0XHRcdCBbW1wiY29zKHBoaSkvc3FydCgyKVwiLCBcInNpbihwaGkpL3NxcnQoMilcIl0sIFtcImNvcyhsYW1iZGErcGhpKS9zcXJ0KDIpXCIsIFwic2luKGxhbWJkYStwaGkpL3NxcnQoMilcIl1dXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaVwiLCBcImxhbWJkYVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEvbnAuc3FydCgyKSwgLW5wLmV4cCgxaipwX2xhbWJkYSkqMS9ucC5zcXJ0KDIpXSwgW25wLmV4cCgxaipwX3BoaSkqMS9ucC5zcXJ0KDIpLCBucC5leHAoMWoqcF9sYW1iZGErMWoqcF9waGkpKjEvbnAuc3FydCgyKV1dXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRtYXRyaXg6IFtbXCIxIC8gc3FydCgyKVwiLCBcIi1leHAoaSAqIGxhbWJkYSkgKiAxIC8gc3FydCgyKVwiXSxbXCJleHAoaSAqIHBoaSkgKiAxIC8gc3FydCgyKVwiLCBcImV4cChpICogbGFtYmRhICsgaSAqIHBoaSkgKiAxIC8gc3FydCgyKVwiXV0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxL25wLnNxcnQoMiksIC1ucC5leHAoMWoqcF9sYW1iZGEpKjEvbnAuc3FydCgyKV0sIFtucC5leHAoMWoqcF9waGkpKjEvbnAuc3FydCgyKSwgbnAuZXhwKDFqKnBfbGFtYmRhKzFqKnBfcGhpKSoxL25wLnNxcnQoMildXVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wicGhpXCIsIFwibGFtYmRhXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcInBoaVwiLCBsYW1iZGE6IFwibGFtYmRhXCIgfSB9XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHR1Mzoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiR2VuZXJpYyBzaW5nbGUtcXViaXQgcm90YXRpb24gZ2F0ZSB3aXRoIDMgRXVsZXIgYW5nbGVzXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WyBcImNvcyh0aGV0YS8yKVwiLCBcIi1leHAoaSAqIGxhbWJkYSkgKiBzaW4odGhldGEgLyAyKVwiIF0sXG5cdFx0XHRcdFsgXCJleHAoaSAqIHBoaSkgKiBzaW4odGhldGEgLyAyKVwiLCBcImV4cChpICogbGFtYmRhICsgaSAqIHBoaSkgKiBjb3ModGhldGEgLyAyKVwiIF1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtcInRoZXRhXCIsIFwicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJVM1wiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1M1wiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIiwgXCJwaGlcIiwgXCJsYW1iZGFcIl0sXG5cdFx0XHRcdFx0ZGVmZ2F0ZTogXCJERUZHQVRFIHUzKCV0aGV0YSwgJXBoaSwgJWxhbWJkYSk6XFxuICAgIENPUygldGhldGEvMiksIC0xKkVYUChpKiVsYW1iZGEpKlNJTigldGhldGEvMilcXG4gICAgRVhQKGkqJXBoaSkqU0lOKCV0aGV0YS8yKSwgRVhQKGkqJWxhbWJkYSArIGkqJXBoaSkqQ09TKCV0aGV0YS8yKVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB5cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidTNcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCIsIFwicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbcXVpbF9jb3MocF90aGV0YS8yKSwtcXVpbF9leHAoMWoqcF9sYW1iZGEpKnF1aWxfc2luKHBfdGhldGEvMildLFtxdWlsX2V4cCgxaipwX3BoaSkqcXVpbF9zaW4ocF90aGV0YS8yKSxxdWlsX2V4cCgxaipwX2xhbWJkYSsxaipwX3BoaSkqcXVpbF9jb3MocF90aGV0YS8yKV1dXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdG5hbWU6IFwidTNcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCIsIFwicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbbnAuY29zKHBfdGhldGEvMiksIC1ucC5leHAoMWoqcF9sYW1iZGEpKm5wLnNpbihwX3RoZXRhLzIpXSwgW25wLmV4cCgxaipwX3BoaSkqbnAuc2luKHBfdGhldGEvMiksIG5wLmV4cCgxaipwX2xhbWJkYSsxaipwX3BoaSkqbnAuY29zKHBfdGhldGEvMildXVwiLFxuXHRcdFx0XHRcdG5vdFRmcVN1cHBvcnRlZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidW5pdGFyeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIiwgXCJwaGlcIiwgXCJsYW1iZGFcIl0sXG5cdFx0XHRcdFx0bWF0cml4OiBbW1tcImNvcyh0aGV0YS8yKVwiLCBcIjBcIl0sIFtcIi1jb3MobGFtYmRhKSpzaW4odGhldGEvMilcIiwgXCItc2luKGxhbWJkYSkqc2luKHRoZXRhLzIpXCJdXSxcblx0XHRcdFx0XHRcdFx0IFtbXCJjb3MocGhpKSpzaW4odGhldGEvMilcIiwgXCJzaW4ocGhpKSpzaW4odGhldGEvMilcIl0sIFtcImNvcyhsYW1iZGErcGhpKSpjb3ModGhldGEvMilcIiwgXCJzaW4obGFtYmRhK3BoaSkqY29zKHRoZXRhLzIpXCJdXV1cblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiLCBcInBoaVwiLCBcImxhbWJkYVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbW25wLmNvcyhwX3RoZXRhLzIpLCAtbnAuZXhwKDFqKnBfbGFtYmRhKSpucC5zaW4ocF90aGV0YS8yKV0sIFtucC5leHAoMWoqcF9waGkpKm5wLnNpbihwX3RoZXRhLzIpLCBucC5leHAoMWoqcF9sYW1iZGErMWoqcF9waGkpKm5wLmNvcyhwX3RoZXRhLzIpXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG1hdHJpeDogW1sgXCJjb3ModGhldGEvMilcIiwgXCItZXhwKGkgKiBsYW1iZGEpICogc2luKHRoZXRhIC8gMilcIiBdLFsgXCJleHAoaSAqIHBoaSkgKiBzaW4odGhldGEgLyAyKVwiLCBcImV4cChpICogbGFtYmRhICsgaSAqIHBoaSkgKiBjb3ModGhldGEgLyAyKVwiIF1dLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbbnAuY29zKHBfdGhldGEvMiksIC1ucC5leHAoMWoqcF9sYW1iZGEpKm5wLnNpbihwX3RoZXRhLzIpXSwgW25wLmV4cCgxaipwX3BoaSkqbnAuc2luKHBfdGhldGEvMiksIG5wLmV4cCgxaipwX2xhbWJkYSsxaipwX3BoaSkqbnAuY29zKHBfdGhldGEvMildXVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIiwgXCJwaGlcIiwgXCJsYW1iZGFcIl1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRzOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJQSS8yIHJvdGF0aW9uIG92ZXIgWi1heGlzIChzeW5vbnltIGZvciBgcjJgKVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDBdLFxuXHRcdFx0XHRbMCxcImV4cChpICogcGkgLyAyKVwiXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlNcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiU1wiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlNcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwic0dhdGVcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlNcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWl7CvVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwic1wiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJTXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHR0OiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJQSS80IHJvdGF0aW9uIG92ZXIgWi1heGlzIChzeW5vbnltIGZvciBgcjRgKVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDBdLFxuXHRcdFx0XHRbMCxcImV4cChpICogcGkgLyA0KVwiXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlRcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiVFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlRcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidEdhdGVcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlRcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWl7CvFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJUXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRzZGc6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIigtUEkvMikgcm90YXRpb24gb3ZlciBaLWF4aXNcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwXSxcblx0XHRcdFx0WzAsXCJleHAoLWkgKiBwaSAvIDIpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiUyYjODIyNDtcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcInUxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcIi1waS8yXCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJ1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCItcGkvMlwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwicGhhc2VTaGlmdFwiLFxuXHRcdFx0XHRcdHBhcmFtczogeyB0aGV0YTogXCItTV9QSS8yXCIgfVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJ1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCItcGkvMlwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWl4twr1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInNpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlNcIixcblx0XHRcdFx0XHRkYWdnZXI6IHRydWVcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHR0ZGc6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIigtUEkvNCkgcm90YXRpb24gb3ZlciBaLWF4aXNcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwXSxcblx0XHRcdFx0WzAsXCJleHAoLWkgKiBwaSAvIDQpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiVCYjODIyNDtcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcInUxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcIi1waS80XCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJ1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCItcGkvNFwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwicGhhc2VTaGlmdFwiLFxuXHRcdFx0XHRcdHBhcmFtczogeyB0aGV0YTogXCItTV9QSS80XCIgfVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJ1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCItcGkvNFwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWl4twrxcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInRpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlRcIixcblx0XHRcdFx0XHRkYWdnZXI6IHRydWVcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRzd2FwOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJTd2FwcyB0aGUgc3RhdGUgb2YgdHdvIHF1Yml0cy5cIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwLDAsMF0sXG5cdFx0XHRcdFswLDAsMSwwXSxcblx0XHRcdFx0WzAsMSwwLDBdLFxuXHRcdFx0XHRbMCwwLDAsMV1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wieFwiLFwieFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiU1dQXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlNXQVBcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJTV0FQXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcInN3YXBcIixcblx0XHRcdFx0XHRmdW5jOiBcInZvaWQgc3dhcChRdXJlZyBxdWJpdHMsIGNvbnN0IGludCBxMSwgY29uc3QgaW50IHEyKSB7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGNvbnRyb2xsZWROb3QocXViaXRzLCBxMSwgcTIpO1xcblwiICtcblx0XHRcdFx0XHRcdCAgXCIgICAgY29udHJvbGxlZE5vdChxdWJpdHMsIHEyLCBxMSk7XFxuXCIgK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBjb250cm9sbGVkTm90KHF1Yml0cywgcTEsIHEyKTtcXG59XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJTV0FQXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVpcms6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlN3YXBcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInN3YXBcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiU1dBUFwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0c3Jzd2FwOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJTcXVhcmUgcm9vdCBvZiBzd2FwXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsMCwwLDBdLFxuXHRcdFx0XHRbMCxcIjAuNSAqICgxICsgaSlcIixcIjAuNSAqICgxIC0gaSlcIiwwXSxcblx0XHRcdFx0WzAsXCIwLjUgKiAoMSAtIGkpXCIsXCIwLjUgKiAoMSArIGkpXCIsMF0sXG5cdFx0XHRcdFswLDAsMCwxXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIixcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiJiN4MjIxQTtTV1BcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwic3Jzd2FwXCIsXG5cdFx0XHRcdFx0ZGVmZ2F0ZTogXCJERUZHQVRFIHNyc3dhcDpcXG4gICAgMSwgMCwgMCwgMFxcbiAgICAwLCAwLjUrMC41aSwgMC41LTAuNWksIDBcXG4gICAgMCwgMC41LTAuNWksIDAuNSswLjVpLCAwXFxuICAgIDAsIDAsIDAsIDFcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJTV0FQKiooMS8yKVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB5cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwic3Jzd2FwXCIsXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLDAsMCwwXSxbMCwwLjUgKiAoMSArIDFqKSwwLjUgKiAoMSAtIDFqKSwwXSxbMCwwLjUgKiAoMSAtIDFqKSwwLjUgKiAoMSArIDFqKSwwXSxbMCwwLDAsMV1dXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcInNyc3dhcFwiLFxuXHRcdFx0XHRcdGZ1bmM6IFwidm9pZCBzcnN3YXAoUXVyZWcgcXViaXRzLCBjb25zdCBpbnQgcTEsIGNvbnN0IGludCBxMikge1xcblwiICtcblx0XHRcdFx0XHRcdCAgXCIgICAgY29udHJvbGxlZE5vdChxdWJpdHMsIHEyLCBxMSk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIHJvdGF0ZVkocXViaXRzLCBxMiwgTV9QSS8yKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgcm90YXRlWihxdWJpdHMsIHEyLCBNX1BJLzE2KTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgY29udHJvbGxlZE5vdChxdWJpdHMsIHExLCBxMik7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIHJvdGF0ZVoocXViaXRzLCBxMSwgTV9QSS84KTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgcm90YXRlWihxdWJpdHMsIHEyLCAtTV9QSS84KTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgY29udHJvbGxlZE5vdChxdWJpdHMsIHExLCBxMik7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIHJvdGF0ZVoocXViaXRzLCBxMiwgTV9QSS8xNik7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIHJvdGF0ZVkocXViaXRzLCBxMiwgLU1fUEkvMik7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGNvbnRyb2xsZWROb3QocXViaXRzLCBxMiwgcTEpO1xcbn1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxYXNtOiB7XG5cdFx0XHRcdFx0ZXF1aXZhbGVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCIsIHBoaTogXCJwaS8yXCIsIGxhbWJkYTogXCItMSpwaVwiIH0sIHdpcmVzOiBbMF19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCIsIHBoaTogXCItMSpwaS8yXCIsIGxhbWJkYTogXCJwaVwiIH0sIHdpcmVzOiBbMV19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN4XCIsIHdpcmVzOiBbMCwgMV19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS80XCIsIHBoaTogXCItMSpwaS8yXCIsIGxhbWJkYTogXCItMSpwaS8yXCIgfSwgd2lyZXM6IFswXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcIjBcIiwgbGFtYmRhOiBcIjcqcGkvNFwiIH0sIHdpcmVzOiBbMV19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN4XCIsIHdpcmVzOiBbMCwgMV19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS80XCIsIHBoaTogXCItMSpwaVwiLCBsYW1iZGE6IFwiLTEqcGkvMlwiIH0sIHdpcmVzOiBbMF19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCIsIHBoaTogXCJwaVwiLCBsYW1iZGE6IFwicGkvMlwiIH0sIHdpcmVzOiBbMV19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN4XCIsIHdpcmVzOiBbMCwgMV19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCIsIHBoaTogXCIwXCIsIGxhbWJkYTogXCItMypwaS8yXCIgfSwgd2lyZXM6IFswXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcInBpLzJcIiwgbGFtYmRhOiBcIjBcIiB9LCB3aXJlczogWzFdfSxcblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRlcXVpdmFsZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcInBpLzJcIiwgbGFtYmRhOiBcIi0xKnBpXCIgfSwgd2lyZXM6IFswXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcIi0xKnBpLzJcIiwgbGFtYmRhOiBcInBpXCIgfSwgd2lyZXM6IFsxXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3hcIiwgd2lyZXM6IFswLCAxXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzRcIiwgcGhpOiBcIi0xKnBpLzJcIiwgbGFtYmRhOiBcIi0xKnBpLzJcIiB9LCB3aXJlczogWzBdfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJ1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwiMFwiLCBsYW1iZGE6IFwiNypwaS80XCIgfSwgd2lyZXM6IFsxXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3hcIiwgd2lyZXM6IFswLCAxXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzRcIiwgcGhpOiBcIi0xKnBpXCIsIGxhbWJkYTogXCItMSpwaS8yXCIgfSwgd2lyZXM6IFswXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcInBpXCIsIGxhbWJkYTogXCJwaS8yXCIgfSwgd2lyZXM6IFsxXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3hcIiwgd2lyZXM6IFswLCAxXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcIjBcIiwgbGFtYmRhOiBcIi0zKnBpLzJcIiB9LCB3aXJlczogWzBdfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJ1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwicGkvMlwiLCBsYW1iZGE6IFwiMFwiIH0sIHdpcmVzOiBbMV19LFxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidW5pdGFyeVwiLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwwLDAsMF0sWzAsMC41ICogKDEgKyAxaiksMC41ICogKDEgLSAxaiksMF0sWzAsMC41ICogKDEgLSAxaiksMC41ICogKDEgKyAxaiksMF0sWzAsMCwwLDFdXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJTUVJUU1dBUFwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0aXN3YXA6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlN3YXBzIHRoZSBzdGF0ZSBvZiB0d28gcXViaXRzLCBhcHBseWluZyBhIC1pIHBoYXNlIHRvIHExIHdoZW4gaXQgaXMgaW4gdGhlIDEgc3RhdGUgYW5kIGEgLWkgcGhhc2UgdG8gcTIgd2hlbiBpdCBpcyBpbiB0aGUgMCBzdGF0ZVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDAsMCwwXSxcblx0XHRcdFx0WzAsMCxcIjAraVwiLDBdLFxuXHRcdFx0XHRbMCxcIjAraVwiLDAsMF0sXG5cdFx0XHRcdFswLDAsMCwxXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIixcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiaVNXUFwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJJU1dBUFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcIklTV0FQXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdGVxdWl2YWxlbnQ6IFtcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJ1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwiLTEqcGkvMlwiLCBsYW1iZGE6IFwiLTEqcGlcIiB9LCB3aXJlczogWzBdfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJ1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwiLTEqcGkvMlwiLCBsYW1iZGE6IFwicGlcIiB9LCB3aXJlczogWzFdfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjeFwiLCB3aXJlczogWzAsIDFdfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJ1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwiMFwiLCBsYW1iZGE6IFwiMypwaS8yXCIgfSwgd2lyZXM6IFswXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcIjMqcGkvMlwiLCBsYW1iZGE6IFwiMFwiIH0sIHdpcmVzOiBbMV19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN4XCIsIHdpcmVzOiBbMCwgMV19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCIsIHBoaTogXCIwXCIsIGxhbWJkYTogXCIwXCIgfSwgd2lyZXM6IFswXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpXCIsIHBoaTogXCJwaS80XCIsIGxhbWJkYTogXCItMSpwaS80XCIgfSwgd2lyZXM6IFsxXX1cblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRlcXVpdmFsZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcIi0xKnBpLzJcIiwgbGFtYmRhOiBcIi0xKnBpXCIgfSwgd2lyZXM6IFswXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcIi0xKnBpLzJcIiwgbGFtYmRhOiBcInBpXCIgfSwgd2lyZXM6IFsxXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3hcIiwgd2lyZXM6IFswLCAxXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcIjBcIiwgbGFtYmRhOiBcIjMqcGkvMlwiIH0sIHdpcmVzOiBbMF19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCIsIHBoaTogXCIzKnBpLzJcIiwgbGFtYmRhOiBcIjBcIiB9LCB3aXJlczogWzFdfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjeFwiLCB3aXJlczogWzAsIDFdfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJ1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwiMFwiLCBsYW1iZGE6IFwiMFwiIH0sIHdpcmVzOiBbMF19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaVwiLCBwaGk6IFwicGkvNFwiLCBsYW1iZGE6IFwiLTEqcGkvNFwiIH0sIHdpcmVzOiBbMV19XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJpc3dhcFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJJU1dBUFwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0eHk6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlhZIGdhdGVcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwgMCwgMCwgMF0sXG5cdFx0XHRcdFswLCBcImNvcyhwaGkgLyAyKVwiLCBcImkgKiBzaW4ocGhpIC8gMilcIiwgMF0sXG5cdFx0XHRcdFswLCBcImkgKiBzaW4ocGhpIC8gMilcIiwgXCJjb3MocGhpIC8gMilcIiwgMF0sXG5cdFx0XHRcdFswLCAwLCAwLCAxXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW1wicGhpXCJdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiYm94XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlhZXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlhZXCIsXG5cdFx0XHRcdFx0XCJwYXJhbXNcIjogW1xuXHRcdFx0XHRcdFx0XCJwaGlcIlxuXHRcdFx0XHRcdF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdGVxdWl2YWxlbnQ6IFtcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyelwiLCBwYXJhbXM6IHsgcGhpOiBcIjMqcGkvNFwifSwgd2lyZXM6IFswXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ4XCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCJ9LCB3aXJlczogWzBdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnpcIiwgcGFyYW1zOiB7IHBoaTogXCItMypwaS80XCJ9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnhcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIn0sIHdpcmVzOiBbMV0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjelwiLCB3aXJlczogWzEsIDBdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnpcIiwgcGFyYW1zOiB7IHBoaTogXCItMSpwaS8yXCJ9LCB3aXJlczogWzBdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnhcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIn0sIHdpcmVzOiBbMF0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyelwiLCBwYXJhbXM6IHsgcGhpOiBcInBoaS8yXCJ9LCB3aXJlczogWzBdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnhcIiwgcGFyYW1zOiB7IHRoZXRhOiBcIi0xKnBpLzJcIn0sIHdpcmVzOiBbMF0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyelwiLCBwYXJhbXM6IHsgcGhpOiBcInBpLzJcIn0sIHdpcmVzOiBbMV0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyeFwiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwifSwgd2lyZXM6IFsxXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ6XCIsIHBhcmFtczogeyBwaGk6IFwicGhpLzJcIn0sIHdpcmVzOiBbMV0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyeFwiLCBwYXJhbXM6IHsgdGhldGE6IFwiLTEqcGkvMlwifSwgd2lyZXM6IFsxXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN6XCIsIHdpcmVzOiBbMSwgMF0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyelwiLCBwYXJhbXM6IHsgcGhpOiBcIi0xKnBpLzJcIn0sIHdpcmVzOiBbMF0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyeFwiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwifSwgd2lyZXM6IFswXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ6XCIsIHBhcmFtczogeyBwaGk6IFwicGkvNFwifSwgd2lyZXM6IFswXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ6XCIsIHBhcmFtczogeyBwaGk6IFwiLTEqcGkvMlwifSwgd2lyZXM6IFsxXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ4XCIsIHBhcmFtczogeyB0aGV0YTogXCItMSpwaS8yXCJ9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnpcIiwgcGFyYW1zOiB7IHBoaTogXCIzKnBpLzRcIn0sIHdpcmVzOiBbMV0gfSxcblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRlcXVpdmFsZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnpcIiwgcGFyYW1zOiB7IHBoaTogXCIzKnBpLzRcIn0sIHdpcmVzOiBbMF0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyeFwiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwifSwgd2lyZXM6IFswXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ6XCIsIHBhcmFtczogeyBwaGk6IFwiLTMqcGkvNFwifSwgd2lyZXM6IFsxXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ4XCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCJ9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3pcIiwgd2lyZXM6IFsxLCAwXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ6XCIsIHBhcmFtczogeyBwaGk6IFwiLTEqcGkvMlwifSwgd2lyZXM6IFswXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ4XCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCJ9LCB3aXJlczogWzBdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnpcIiwgcGFyYW1zOiB7IHBoaTogXCJwaGkvMlwifSwgd2lyZXM6IFswXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ4XCIsIHBhcmFtczogeyB0aGV0YTogXCItMSpwaS8yXCJ9LCB3aXJlczogWzBdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnpcIiwgcGFyYW1zOiB7IHBoaTogXCJwaS8yXCJ9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnhcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIn0sIHdpcmVzOiBbMV0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyelwiLCBwYXJhbXM6IHsgcGhpOiBcInBoaS8yXCJ9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnhcIiwgcGFyYW1zOiB7IHRoZXRhOiBcIi0xKnBpLzJcIn0sIHdpcmVzOiBbMV0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjelwiLCB3aXJlczogWzEsIDBdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnpcIiwgcGFyYW1zOiB7IHBoaTogXCItMSpwaS8yXCJ9LCB3aXJlczogWzBdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnhcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIn0sIHdpcmVzOiBbMF0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyelwiLCBwYXJhbXM6IHsgcGhpOiBcInBpLzRcIn0sIHdpcmVzOiBbMF0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyelwiLCBwYXJhbXM6IHsgcGhpOiBcIi0xKnBpLzJcIn0sIHdpcmVzOiBbMV0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyeFwiLCBwYXJhbXM6IHsgdGhldGE6IFwiLTEqcGkvMlwifSwgd2lyZXM6IFsxXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ6XCIsIHBhcmFtczogeyBwaGk6IFwiMypwaS80XCJ9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdG5hbWU6IFwieHlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsIDAsIDAsIDBdLCBbMCwgbnAuY29zKHBfcGhpLzIpLCAxaipucC5zaW4ocF9waGkvMiksIDBdLCBbMCwgMWoqbnAuc2luKHBfcGhpLzIpLCBucC5jb3MocF9waGkvMiksIDBdLCBbMCwgMCwgMCwgMV1dXCIsXG5cdFx0XHRcdFx0bm90VGZxU3VwcG9ydGVkOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwieHlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG1hdHJpeDogW1sxLCAwLCAwLCAwXSxbMCwgXCJjb3MocGhpIC8gMilcIiwgXCJpICogc2luKHBoaSAvIDIpXCIsIDBdLFswLCBcImkgKiBzaW4ocGhpIC8gMilcIiwgXCJjb3MocGhpIC8gMilcIiwgMF0sWzAsIDAsIDAsIDFdXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsIDAsIDAsIDBdLCBbMCwgbnAuY29zKHBfcGhpLzIpLCAxaipucC5zaW4ocF9waGkvMiksIDBdLCBbMCwgMWoqbnAuc2luKHBfcGhpLzIpLCBucC5jb3MocF9waGkvMiksIDBdLCBbMCwgMCwgMCwgMV1dXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJwaGlcIl1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRjeDoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiQ29udHJvbGxlZCBOT1QgKENOT1QpIGdhdGVcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwLDAsMF0sXG5cdFx0XHRcdFswLDEsMCwwXSxcblx0XHRcdFx0WzAsMCwwLDFdLFxuXHRcdFx0XHRbMCwwLDEsMF1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJub3RcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlhcIixcblx0XHRcdFx0cm9vdDogXCJ4XCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNOT1RcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJDTk9UXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbnRyb2xsZWROb3RcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNOT1RcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWFwiLFxuXHRcdFx0XHRcdGNvbnRyb2xsZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjbm90XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNOT1RcIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGN5OiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJDb250cm9sbGVkIFkgZ2F0ZSAoY29udHJvbGxlZCByb3RhdGlvbiBvdmVyIFktYXhpcyBieSBQSSlcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwLDAsMF0sXG5cdFx0XHRcdFswLDEsMCwwXSxcblx0XHRcdFx0WzAsMCwwLFwiLWlcIl0sXG5cdFx0XHRcdFswLDAsXCJpXCIsMF1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIllcIixcblx0XHRcdFx0cm9vdDogXCJ5XCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjb250cm9sbGVkUGF1bGlZXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcInlcIixcblx0XHRcdFx0XHRcdHR5cGU6IFwiY29udHJvbGxlZFwiLFxuXHRcdFx0XHRcdFx0bm90VGZxU3VwcG9ydGVkOiB0cnVlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjeVwiLFxuXHRcdFx0XHRcdGRlZmdhdGU6IFwiREVGR0FURSBjeTpcXG4gICAgMSwgMCwgMCwgMFxcbiAgICAwLCAxLCAwLCAwXFxuICAgIDAsIDAsIDAsIC1pXFxuICAgIDAsIDAsIGksIDBcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRweXF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcImN5XCIsXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLDAsMCwwXSxbMCwxLDAsMF0sWzAsMCwwLC0xal0sWzAsMCwxaiwwXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNvbnRyb2xsZWQgWVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1aXJrOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJZXCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcImN5XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIllcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y3o6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIkNvbnRyb2xsZWQgWiBnYXRlIChjb250cm9sbGVkIHJvdGF0aW9uIG92ZXIgWi1heGlzIGJ5IFBJKVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDAsMCwwXSxcblx0XHRcdFx0WzAsMSwwLDBdLFxuXHRcdFx0XHRbMCwwLDEsMF0sXG5cdFx0XHRcdFswLDAsMCwtMV1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJkb3RcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlpcIixcblx0XHRcdFx0cm9vdDogXCJ6XCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNaXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdG5hbWU6IFwiQ1pcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY29udHJvbGxlZFBoYXNlRmxpcFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiQ29udHJvbGxlZCBaXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVpcms6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlpcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY3pcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiQ1NJR05cIlxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y2g6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIkNvbnRyb2xsZWQgSGFkYW1hcmQgZ2F0ZVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDAsMCwwXSxcblx0XHRcdFx0WzAsMSwwLDBdLFxuXHRcdFx0XHRbMCwwLFwiMSAvIHNxcnQoMilcIixcIjEgLyBzcXJ0KDIpXCJdLFxuXHRcdFx0XHRbMCwwLFwiMSAvIHNxcnQoMilcIixcIi0xIC8gc3FydCgyKVwiXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJkb3RcIixcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiSFwiLFxuXHRcdFx0XHRyb290OiBcImhcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbnRyb2xsZWRVbml0YXJ5XCIsXG5cdFx0XHRcdFx0bWF0cml4OiBbW1tcIjEvc3FydCgyKVwiLCBcIjBcIl0sIFtcIjEvc3FydCgyKVwiLCBcIjBcIl1dLFxuXHRcdFx0XHRcdFx0XHQgW1tcIjEvc3FydCgyKVwiLCBcIjBcIl0sIFtcIi0xL3NxcnQoMilcIiwgXCIwXCJdXV1cblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcImhcIixcblx0XHRcdFx0XHRcdHR5cGU6IFwiY29udHJvbGxlZFwiLFxuXHRcdFx0XHRcdFx0bm90VGZxU3VwcG9ydGVkOiB0cnVlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjaFwiLFx0XHRcdFx0XHRcblx0XHRcdFx0XHRkZWZnYXRlOiBcIkRFRkdBVEUgY2g6XFxuICAgIDEsIDAsIDAsIDBcXG4gICAgMCwgMSwgMCwgMFxcbiAgICAwLCAwLCAwLjcwNzEwNjc4MTE4NjU0NzUsIDAuNzA3MTA2NzgxMTg2NTQ3NVxcbiAgICAwLCAwLCAwLjcwNzEwNjc4MTE4NjU0NzUsIC0wLjcwNzEwNjc4MTE4NjU0NzVcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRweXF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNoXCIsXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLDAsMCwwXSxbMCwxLDAsMF0sWzAsMCwxL25wLnNxcnQoMiksMS9ucC5zcXJ0KDIpXSxbMCwwLDEvbnAuc3FydCgyKSwtMS9ucC5zcXJ0KDIpXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNvbnRyb2xsZWQgSFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1aXJrOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJIXCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwwLDEvbnAuc3FydCgyKSwxL25wLnNxcnQoMildLFswLDAsMS9ucC5zcXJ0KDIpLC0xL25wLnNxcnQoMildXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJIXCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGNzcm46IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIkNvbnRyb2xsZWQgc3F1YXJlIHJvb3Qgb2YgTk9UXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsMCwwLDBdLFxuXHRcdFx0XHRbMCwxLDAsMF0sXG5cdFx0XHRcdFswLDAsXCIwLjUrMC41aVwiLFwiMC41LTAuNWlcIl0sXG5cdFx0XHRcdFswLDAsXCIwLjUtMC41aVwiLFwiMC41KzAuNWlcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIiYjeDIyMUE7WFwiLFxuXHRcdFx0XHRyb290OiBcInNyblwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY29udHJvbGxlZFVuaXRhcnlcIixcblx0XHRcdFx0XHRtYXRyaXg6IFtbW1wiLTEvc3FydCgyKVwiLCBcIjBcIl0sIFtcIi0xL3NxcnQoMilcIiwgXCIwXCJdXSxcblx0XHRcdFx0XHRcdFx0IFtbXCItMS9zcXJ0KDIpXCIsIFwiMFwiXSwgW1wiMS9zcXJ0KDIpXCIsIFwiMFwiXV1dXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJzcm5cIixcblx0XHRcdFx0XHRcdHR5cGU6IFwiY29udHJvbGxlZFwiLFxuXHRcdFx0XHRcdFx0bm90VGZxU3VwcG9ydGVkOiB0cnVlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjc3JuXCIsXG5cdFx0XHRcdFx0ZGVmZ2F0ZTogXCJERUZHQVRFIGNzcm46XFxuICAgIDEsIDAsIDAsIDBcXG4gICAgMCwgMSwgMCwgMFxcbiAgICAwLCAwLCAwLjUrMC41aSwgMC41LTAuNWlcXG4gICAgMCwgMCwgMC41LTAuNWksIDAuNSswLjVpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiY3N4XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjc3hcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRweXF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNzcm5cIixcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwwLDAuNSswLjVqLDAuNS0wLjVqXSxbMCwwLDAuNS0wLjVqLDAuNSswLjVqXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwwLDAuNSswLjVqLDAuNS0wLjVqXSxbMCwwLDAuNS0wLjVqLDAuNSswLjVqXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG1hdHJpeDogW1sxLDAsMCwwXSxbMCwxLDAsMF0sWzAsMCxcIjAuNSswLjVpXCIsXCIwLjUtMC41aVwiXSxbMCwwLFwiMC41LTAuNWlcIixcIjAuNSswLjVpXCJdXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwwLDAuNSswLjVqLDAuNS0wLjVqXSxbMCwwLDAuNS0wLjVqLDAuNSswLjVqXV1cIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdG1zOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJNw7hsbWVyLVPDuHJlbnNlbiBnYXRlXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0W1wiY29zKHRoZXRhKVwiLCAwLCAwLCBcIi1pKnNpbih0aGV0YSlcIl0sXG5cblx0XHRcdFx0WzAsIFwiY29zKHRoZXRhKVwiLCBcIi1pKnNpbih0aGV0YSlcIiwgMF0sXG5cblx0XHRcdFx0WzAsIFwiLWkqc2luKHRoZXRhKVwiLCBcImNvcyh0aGV0YSlcIiwgMF0sXG5cblx0XHRcdFx0W1wiLWkqc2luKHRoZXRhKVwiLCAwLCAwLCBcImNvcyh0aGV0YSlcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiY2lyY2xlXCIsXCJjaXJjbGVcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlhYXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIm1zXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXSxcblx0XHRcdFx0XHRkZWZnYXRlOiBcIkRFRkdBVEUgbXMoJXRoZXRhKTpcXG4gICAgQ09TKCV0aGV0YSksIDAsIDAsIC1pKlNJTigldGhldGEpXFxuICAgIDAsIENPUygldGhldGEpLCAtaSpTSU4oJXRoZXRhKSwgMFxcbiAgICAwLCAtaSpTSU4oJXRoZXRhKSwgQ09TKCV0aGV0YSksIDBcXG4gICAgLWkqU0lOKCV0aGV0YSksIDAsIDAsIENPUygldGhldGEpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cHlxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJtc1wiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiWyBbcXVpbF9jb3MocF90aGV0YSksIDAsIDAsIC0xaipxdWlsX3NpbihwX3RoZXRhKV0sIFswLCBxdWlsX2NvcyhwX3RoZXRhKSwgLTFqKnF1aWxfc2luKHBfdGhldGEpLCAwXSwgWzAsIC0xaipxdWlsX3NpbihwX3RoZXRhKSwgcXVpbF9jb3MocF90aGV0YSksIDBdLCBbLTFqKnF1aWxfc2luKHBfdGhldGEpLCAwLCAwLCBxdWlsX2NvcyhwX3RoZXRhKV0gXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcIm1zXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcIm1zXCIsXG5cdFx0XHRcdFx0Ly9AVE9ETyBhZGQgZnVuY3Rpb25cblx0XHRcdFx0XHRmdW5jOiBcIlRPRE9cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJyeHhcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInJ4eFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidW5pdGFyeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1tucC5jb3MocF90aGV0YSksIDAsIDAsIC0xaipucC5zaW4ocF90aGV0YSldLCBbMCwgbnAuY29zKHBfdGhldGEpLCAtMWoqbnAuc2luKHBfdGhldGEpLCAwXSwgWzAsIC0xaipucC5zaW4ocF90aGV0YSksIG5wLmNvcyhwX3RoZXRhKSwgMF0sIFstMWoqbnAuc2luKHBfdGhldGEpLCAwLCAwLCBucC5jb3MocF90aGV0YSldIF1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG1hdHJpeDogW1tcImNvcyh0aGV0YSlcIiwgMCwgMCwgXCItaSpzaW4odGhldGEpXCJdLFswLCBcImNvcyh0aGV0YSlcIiwgXCItaSpzaW4odGhldGEpXCIsIDBdLFswLCBcIi1pKnNpbih0aGV0YSlcIiwgXCJjb3ModGhldGEpXCIsIDBdLFtcIi1pKnNpbih0aGV0YSlcIiwgMCwgMCwgXCJjb3ModGhldGEpXCJdXSxcblx0XHRcdFx0XHRhcnJheTogXCJbW25wLmNvcyhwX3RoZXRhKSwgMCwgMCwgLTFqKm5wLnNpbihwX3RoZXRhKV0sIFswLCBucC5jb3MocF90aGV0YSksIC0xaipucC5zaW4ocF90aGV0YSksIDBdLCBbMCwgLTFqKm5wLnNpbihwX3RoZXRhKSwgbnAuY29zKHBfdGhldGEpLCAwXSwgWy0xaipucC5zaW4ocF90aGV0YSksIDAsIDAsIG5wLmNvcyhwX3RoZXRhKV0gXVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0XG5cdFx0eXk6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIllZIGdhdGVcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbXCJjb3ModGhldGEpXCIsIDAsIDAsIFwiaSpzaW4odGhldGEpXCJdLFxuXG5cdFx0XHRcdFswLCBcImNvcyh0aGV0YSlcIiwgXCItaSpzaW4odGhldGEpXCIsIDBdLFxuXG5cdFx0XHRcdFswLCBcIi1pKnNpbih0aGV0YSlcIiwgXCJjb3ModGhldGEpXCIsIDBdLFxuXG5cdFx0XHRcdFtcImkqc2luKHRoZXRhKVwiLCAwLCAwLCBcImNvcyh0aGV0YSlcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiY2lyY2xlXCIsXCJjaXJjbGVcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIllZXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcInl5XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXSxcblx0XHRcdFx0XHRkZWZnYXRlOiBcIkRFRkdBVEUgeXkoJXRoZXRhKTpcXG4gICAgQ09TKCV0aGV0YSksIDAsIDAsIGkqU0lOKCV0aGV0YSlcXG4gICAgMCwgQ09TKCV0aGV0YSksIC1pKlNJTigldGhldGEpLCAwXFxuICAgIDAsIC1pKlNJTigldGhldGEpLCBDT1MoJXRoZXRhKSwgMFxcbiAgICBpKlNJTigldGhldGEpLCAwLCAwLCBDT1MoJXRoZXRhKVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcIllZXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cHlxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ5eVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiWyBbcXVpbF9jb3MocF90aGV0YSksIDAsIDAsIDFqKnF1aWxfc2luKHBfdGhldGEpXSwgWzAsIHF1aWxfY29zKHBfdGhldGEpLCAtMWoqcXVpbF9zaW4ocF90aGV0YSksIDBdLCBbMCwgLTFqKnF1aWxfc2luKHBfdGhldGEpLCBxdWlsX2NvcyhwX3RoZXRhKSwgMF0sIFsxaipxdWlsX3NpbihwX3RoZXRhKSwgMCwgMCwgcXVpbF9jb3MocF90aGV0YSldIF1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwieXlcIixcblx0XHRcdFx0XHQvL0BUT0RPIGFkZCBmdW5jdGlvblxuXHRcdFx0XHRcdGZ1bmM6IFwiVE9ET1wiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwieXlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bWF0cml4OiBbW1wiY29zKHRoZXRhKVwiLCAwLCAwLCBcImkqc2luKHRoZXRhKVwiXSxbMCwgXCJjb3ModGhldGEpXCIsIFwiLWkqc2luKHRoZXRhKVwiLCAwXSxbMCwgXCItaSpzaW4odGhldGEpXCIsIFwiY29zKHRoZXRhKVwiLCAwXSxbXCJpKnNpbih0aGV0YSlcIiwgMCwgMCwgXCJjb3ModGhldGEpXCJdXSxcblx0XHRcdFx0XHRhcnJheTogXCJbW25wLmNvcyhwX3RoZXRhKSwgMCwgMCwgMWoqbnAuc2luKHBfdGhldGEpXSwgWzAsIG5wLmNvcyhwX3RoZXRhKSwgLTFqKm5wLnNpbihwX3RoZXRhKSwgMF0sIFswLCAtMWoqbnAuc2luKHBfdGhldGEpLCBucC5jb3MocF90aGV0YSksIDBdLCBbMWoqbnAuc2luKHBfdGhldGEpLCAwLCAwLCBucC5jb3MocF90aGV0YSldIF1cIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcInJ5eVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwicnl5XCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHR6ejoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiUGFyYW1ldHJpYyAyLXF1Yml0IHJvdGF0aW9uIGFib3V0IFpaXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WyBcImV4cCgtaSAqIHRoZXRhIC8gMilcIiwgMCwgMCwgMCBdLFxuXHRcdFx0XHRbIDAsIFwiZXhwKGkgKiB0aGV0YSAvIDIpXCIsIDAsIDAgIF0sXG5cdFx0XHRcdFsgMCwgMCwgXCJleHAoaSAqIHRoZXRhIC8gMilcIiwgMCAgXSxcblx0XHRcdFx0WyAwLCAwLCAwLCBcImV4cCgtaSAqIHRoZXRhIC8gMilcIiBdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImNpcmNsZVwiLFwiY2lyY2xlXCJdLFxuXHRcdFx0XHRsYWJlbDogXCJaWlwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ6elwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRcdFx0ZGVmZ2F0ZTogXCJERUZHQVRFIHp6KCV0aGV0YSk6XFxuICAgIEVYUCgtaSAqICV0aGV0YSAvIDIpLCAwLCAwLCAwXFxuICAgIDAsIEVYUChpICogJXRoZXRhIC8gMiksIDAsIDBcXG4gICAgMCwgMCwgRVhQKGkgKiAldGhldGEgLyAyKSwgMFxcbiAgICAwLCAwLCAwLCBFWFAoLWkgKiAldGhldGEgLyAyKVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB5cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwienpcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIlsgWyBxdWlsX2V4cCgtMWogKiBwX3RoZXRhIC8gMiksIDAsIDAsIDAgXSwgWyAwLCBxdWlsX2V4cCgxaiAqIHBfdGhldGEgLyAyKSwgMCwgMF0sIFsgMCwgMCwgcXVpbF9leHAoMWogKiBwX3RoZXRhIC8gMiksIDAgXSwgWyAwLCAwLCAwLCBxdWlsX2V4cCgtMWogKiBwX3RoZXRhIC8gMikgXSBdXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwicnp6XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJyenpcIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGNyMjoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiQ29udHJvbGxlZCBQSS8yIHJvdGF0aW9uIG92ZXIgWi1heGlzXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsMCwwLDBdLFxuXHRcdFx0XHRbMCwxLDAsMF0sXG5cdFx0XHRcdFswLDAsMSwwXSxcblx0XHRcdFx0WzAsMCwwLFwiZXhwKGkgKiBwaSAvIDIpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImRvdFwiLFwiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJaJiN4MUQ2RDE7LzJcIixcblx0XHRcdFx0cm9vdDogXCJyMlwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcInBpLzJcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcImN1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCJwaS8yXCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjb250cm9sbGVkUGhhc2VTaGlmdFwiLFxuXHRcdFx0XHRcdHBhcmFtczoge3RoZXRhOlwiTV9QSS8yXCJ9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcImN1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCJwaS8yXCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFhc206IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN1MVwiLCBwYXJhbXM6IHsgbGFtYmRhOiBcInBpLzJcIiB9fVxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UxXCIsIHBhcmFtczogeyBsYW1iZGE6IFwicGkvMlwiIH19XG5cdFx0XHRcdFx0XVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWl7CvVwiLFxuXHRcdFx0XHRcdGNvbnRyb2xsZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLCAwLCAwLCAwXSwgWzAsIDEsIDAsIDBdLCBbMCwgMCwgMSwgMF0sIFswLCAwLCAwLCBucC5leHAoMWogKiBucC5waSAvIDIpXSBdXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlNcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y3I0OiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJDb250cm9sbGVkIFBJLzQgcm90YXRpb24gb3ZlciBaLWF4aXNcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwLDAsMF0sXG5cdFx0XHRcdFswLDEsMCwwXSxcblx0XHRcdFx0WzAsMCwxLDBdLFxuXHRcdFx0XHRbMCwwLDAsXCJleHAoaSAqIHBpIC8gNClcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlomI3gxRDZEMTsvNFwiLFxuXHRcdFx0XHRyb290OiBcInI0XCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJjdTFcIixcblx0XHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0XHRsYW1iZGE6IFwicGkvNFwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcInBpLzRcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbnRyb2xsZWRQaGFzZVNoaWZ0XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiB7dGhldGE6XCJNX1BJLzRcIn1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcInBpLzRcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UxXCIsIHBhcmFtczogeyBsYW1iZGE6IFwicGkvNFwiIH19XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IFtcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjdTFcIiwgcGFyYW1zOiB7IGxhbWJkYTogXCJwaS80XCIgfX1cblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWl7CvFwiLFxuXHRcdFx0XHRcdGNvbnRyb2xsZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLCAwLCAwLCAwXSwgWzAsIDEsIDAsIDBdLCBbMCwgMCwgMSwgMF0sIFswLCAwLCAwLCBucC5leHAoMWogKiBucC5waSAvIDQpXSBdXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlRcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y3I4OiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJDb250cm9sbGVkIFBJLzggcm90YXRpb24gb3ZlciBaLWF4aXNcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwLDAsMF0sXG5cdFx0XHRcdFswLDEsMCwwXSxcblx0XHRcdFx0WzAsMCwxLDBdLFxuXHRcdFx0XHRbMCwwLDAsXCJleHAoaSAqIHBpIC8gOClcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlomI3gxRDZEMTsvOFwiLFxuXHRcdFx0XHRyb290OiBcInI4XCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJjdTFcIixcblx0XHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0XHRsYW1iZGE6IFwicGkvOFwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcInBpLzhcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbnRyb2xsZWRQaGFzZVNoaWZ0XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiB7dGhldGE6XCJNX1BJLzhcIn1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcInBpLzhcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UxXCIsIHBhcmFtczogeyBsYW1iZGE6IFwicGkvOFwiIH19XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IFtcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjdTFcIiwgcGFyYW1zOiB7IGxhbWJkYTogXCJwaS84XCIgfX1cblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWl7ihZtcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidW5pdGFyeVwiLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwgMCwgMCwgMF0sIFswLCAxLCAwLCAwXSwgWzAsIDAsIDEsIDBdLCBbMCwgMCwgMCwgbnAuZXhwKDFqICogbnAucGkgLyA4KV0gXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bWF0cml4OiBbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwwLDEsMF0sWzAsMCwwLFwiZXhwKGkgKiBwaSAvIDgpXCJdXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsIDAsIDAsIDBdLCBbMCwgMSwgMCwgMF0sIFswLCAwLCAxLCAwXSwgWzAsIDAsIDAsIG5wLmV4cCgxaiAqIG5wLnBpIC8gOCldIF1cIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGNyeDoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiQ29udHJvbGxlZCByb3RhdGlvbiBhcm91bmQgdGhlIFgtYXhpcyBieSBnaXZlbiBhbmdsZVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsgMSwgMCwgMCwgMCBdLFxuXHRcdFx0XHRbIDAsIDEsIDAsIDAgXSxcblx0XHRcdFx0WyAwLCAwLCBcImNvcyh0aGV0YSAvIDIpXCIsIFwiLWkgKiBzaW4odGhldGEgLyAyKVwiIF0sXG5cdFx0XHRcdFsgMCwgMCwgXCItaSAqIHNpbih0aGV0YSAvIDIpXCIsIFwiY29zKHRoZXRhIC8gMilcIiBdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImRvdFwiLFwiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJSWFwiLFxuXHRcdFx0XHRyb290OiBcInJ4XCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNyeFwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRcdFx0ZGVmZ2F0ZTogXCJERUZHQVRFIGNyeCgldGhldGEpOlxcbiAgICAxLCAwLCAwLCAwXFxuICAgIDAsIDEsIDAsIDBcXG4gICAgMCwgMCwgQ09TKCV0aGV0YS8yKSwgLWkqU0lOKCV0aGV0YS8yKVxcbiAgICAwLCAwLCAtaSpTSU4oJXRoZXRhLzIpLCBDT1MoJXRoZXRhLzIpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcInJ4XCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHsgdGhldGE6IFwidGhldGFcIiB9LFxuXHRcdFx0XHRcdFx0dHlwZTogXCJjb250cm9sbGVkXCIsXG5cdFx0XHRcdFx0XHRub3RUZnFTdXBwb3J0ZWQ6IHRydWVcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB5cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY3J4XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWyAxLCAwLCAwLCAwIF0sIFsgMCwgMSwgMCwgMCBdLCBbIDAsIDAsIHF1aWxfY29zKHBfdGhldGEgLyAyKSwgLTFqKnF1aWxfc2luKHBfdGhldGEgLyAyKSBdLCBbIDAsIDAsIC0xaipxdWlsX3NpbihwX3RoZXRhIC8gMiksIHF1aWxfY29zKHBfdGhldGEgLyAyKSBdXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjb250cm9sbGVkVW5pdGFyeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRcdFx0bWF0cml4OiBbW1tcImNvcyh0aGV0YS8yKVwiLCBcIjBcIl0sIFtcIjBcIiwgXCItc2luKHRoZXRhLzIpXCJdXSxcblx0XHRcdFx0XHRcdFx0IFtbXCIwXCIsIFwiLXNpbih0aGV0YS8yKVwiXSwgW1wiY29zKHRoZXRhLzIpXCIsIFwiMFwiXV1dXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiQ29udHJvbGxlZCBSeFwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UzXCIsIHBhcmFtczogeyB0aGV0YTogXCJ0aGV0YVwiLCBwaGk6IFwiLTEqcGkvMlwiLCBsYW1iZGE6IFwicGkvMlwiIH19LFxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UzXCIsIHBhcmFtczogeyB0aGV0YTogXCJ0aGV0YVwiLCBwaGk6IFwiLTEqcGkvMlwiLCBsYW1iZGE6IFwicGkvMlwiIH19LFxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidW5pdGFyeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sgMSwgMCwgMCwgMCBdLCBbIDAsIDEsIDAsIDAgXSwgWyAwLCAwLCBucC5jb3MocF90aGV0YSAvIDIpLCAtMWoqbnAuc2luKHBfdGhldGEgLyAyKSBdLCBbIDAsIDAsIC0xaipucC5zaW4ocF90aGV0YSAvIDIpLCBucC5jb3MocF90aGV0YSAvIDIpIF1dXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlJYXCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGNyeToge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiQ29udHJvbGxlZCByb3RhdGlvbiBhcm91bmQgdGhlIFktYXhpcyBieSBnaXZlbiBhbmdsZVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsgMSwgMCwgMCwgMCBdLFxuXHRcdFx0XHRbIDAsIDEsIDAsIDAgXSxcblx0XHRcdFx0WyAwLCAwLCBcImNvcyh0aGV0YSAvIDIpXCIsIFwiLTEgKiBzaW4odGhldGEgLyAyKVwiIF0sXG5cdFx0XHRcdFsgMCwgMCwgXCJzaW4odGhldGEgLyAyKVwiLCBcImNvcyh0aGV0YSAvIDIpXCIgXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJkb3RcIixcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiUllcIixcblx0XHRcdFx0cm9vdDogXCJyeVwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjcnlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdLFxuXHRcdFx0XHRcdGRlZmdhdGU6IFwiREVGR0FURSBjcnkoJXRoZXRhKTpcXG4gICAgMSwgMCwgMCwgMFxcbiAgICAwLCAxLCAwLCAwXFxuICAgIDAsIDAsIENPUygldGhldGEvMiksIC0xKlNJTigldGhldGEvMilcXG4gICAgMCwgMCwgU0lOKCV0aGV0YS8yKSwgQ09TKCV0aGV0YS8yKVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJyeVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7IHRoZXRhOiBcInRoZXRhXCIgfSxcblx0XHRcdFx0XHRcdHR5cGU6IFwiY29udHJvbGxlZFwiLFxuXHRcdFx0XHRcdFx0bm90VGZxU3VwcG9ydGVkOiB0cnVlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRweXF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNyeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sgMSwgMCwgMCwgMCBdLFsgMCwgMSwgMCwgMCBdLFsgMCwgMCwgcXVpbF9jb3MocF90aGV0YSAvIDIpLCAtMSpxdWlsX3NpbihwX3RoZXRhIC8gMikgXSxbIDAsIDAsIHF1aWxfc2luKHBfdGhldGEgLyAyKSwgcXVpbF9jb3MocF90aGV0YSAvIDIpIF1dXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbnRyb2xsZWRVbml0YXJ5XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXSxcblx0XHRcdFx0XHRtYXRyaXg6IFtbW1wiY29zKHRoZXRhLzIpXCIsIFwiMFwiXSwgW1wiLXNpbih0aGV0YS8yKVwiLCBcIjBcIl1dLFxuXHRcdFx0XHRcdFx0XHQgW1tcInNpbih0aGV0YS8yKVwiLCBcIjBcIl0sIFtcImNvcyh0aGV0YS8yKVwiLCBcIjBcIl1dXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNvbnRyb2xsZWQgUnlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFhc206IHtcblx0XHRcdFx0XHRlcXVpdmFsZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInRoZXRhLzJcIiwgcGhpOiBcIjBcIiwgbGFtYmRhOiBcIjBcIiB9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3hcIiwgd2lyZXM6IFswLCAxXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCItMSp0aGV0YSAvIDJcIiwgcGhpOiBcIjBcIiwgbGFtYmRhOiBcIjBcIiB9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3hcIiwgd2lyZXM6IFswLCAxXSB9XG5cdFx0XHRcdFx0XVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRlcXVpdmFsZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInRoZXRhLzJcIiwgcGhpOiBcIjBcIiwgbGFtYmRhOiBcIjBcIiB9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3hcIiwgd2lyZXM6IFswLCAxXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCItMSp0aGV0YSAvIDJcIiwgcGhpOiBcIjBcIiwgbGFtYmRhOiBcIjBcIiB9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3hcIiwgd2lyZXM6IFswLCAxXSB9XG5cdFx0XHRcdFx0XVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbIDEsIDAsIDAsIDAgXSxbIDAsIDEsIDAsIDAgXSxbIDAsIDAsIG5wLmNvcyhwX3RoZXRhIC8gMiksIC0xKm5wLnNpbihwX3RoZXRhIC8gMikgXSxbIDAsIDAsIG5wLnNpbihwX3RoZXRhIC8gMiksIG5wLmNvcyhwX3RoZXRhIC8gMikgXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiUllcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y3J6OiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJDb250cm9sbGVkIHJvdGF0aW9uIGFyb3VuZCB0aGUgWi1heGlzIGJ5IGdpdmVuIGFuZ2xlXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsMCwwLDBdLFxuXHRcdFx0XHRbMCwxLDAsMF0sXG5cdFx0XHRcdFswLCAwLCBcImNvcyhwaGkgLyAyKSAtIGkgKiBzaW4ocGhpIC8gMilcIiwgMF0sXG5cdFx0XHRcdFswLCAwLCAwLCBcImNvcyhwaGkgLyAyKSArIGkgKiBzaW4ocGhpIC8gMilcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtcInBoaVwiXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImRvdFwiLFwiZG90XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJSWlwiLFxuXHRcdFx0XHRyb290OiBcInJ6XCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNyelwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wicGhpXCJdLFxuXHRcdFx0XHRcdGRlZmdhdGU6IFwiREVGR0FURSBjcnooJXBoaSk6XFxuICAgIDEsIDAsIDAsIDBcXG4gICAgMCwgMSwgMCwgMFxcbiAgICAwLCAwLCBDT1MoJXBoaSAvIDIpIC0gaSAqIFNJTiglcGhpIC8gMiksIDBcXG4gICAgMCwgMCwgMCwgQ09TKCVwaGkgLyAyKSArIGkgKiBTSU4oJXBoaSAvIDIpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cHlxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjcnpcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsIDAsIDAsIDBdLCBbMCwgMSwgMCwgMF0sIFswLCAwLCBxdWlsX2NvcyhwX3BoaSAvIDIpIC0gMWogKiBxdWlsX3NpbihwX3BoaSAvIDIpLCAwXSwgWzAsIDAsIDAsIHF1aWxfY29zKHBfcGhpIC8gMikgKyAxaiAqIHF1aWxfc2luKHBfcGhpIC8gMildXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJyelwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7IHBoaTogXCJwaGlcIiB9LFxuXHRcdFx0XHRcdFx0dHlwZTogXCJjb250cm9sbGVkXCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjb250cm9sbGVkUm90YXRlWlwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJDb250cm9sbGVkIFJ6XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJwaGlcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJwaGlcIl0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLCAwLCAwLCAwXSwgWzAsIDEsIDAsIDBdLCBbMCwgMCwgbnAuY29zKHBfcGhpIC8gMikgLSAxaiAqIG5wLnNpbihwX3BoaSAvIDIpLCAwXSwgWzAsIDAsIDAsIG5wLmNvcyhwX3BoaSAvIDIpICsgMWogKiBucC5zaW4ocF9waGkgLyAyKV1dXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlJaXCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGN1MToge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiQ29udHJvbGxlZCByb3RhdGlvbiBhYm91dCB0aGUgWiBheGlzXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsMCwwLDBdLFxuXHRcdFx0XHRbMCwxLDAsMF0sXG5cdFx0XHRcdFswLDAsMSwwXSxcblx0XHRcdFx0WzAsMCwwLFwiZXhwKGkgKiBsYW1iZGEpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXCJsYW1iZGFcIl0sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJkb3RcIixcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiQ1UxXCIsXG5cdFx0XHRcdHJvb3Q6IFwidTFcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiQ1BIQVNFXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJsYW1iZGFcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJsYW1iZGFcIl0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLCAwLCAwLCAwXSwgWzAsIDEsIDAsIDBdLCBbMCwgMCwgMSwgMF0sIFswLCAwLCAwLCBucC5leHAoMWoqcF9sYW1iZGEpXV1cIixcblx0XHRcdFx0XHRub3RUZnFTdXBwb3J0ZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbnRyb2xsZWRQaGFzZVNoaWZ0XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcImxhbWJkYVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsIDAsIDAsIDBdLCBbMCwgMSwgMCwgMF0sIFswLCAwLCAxLCAwXSwgWzAsIDAsIDAsIG5wLmV4cCgxaipwX2xhbWJkYSldXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJQSFwiLFxuXHRcdFx0XHRcdGNvbnRyb2xsZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjcFwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y3UyOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJDb250cm9sbGVkIHJvdGF0aW9uIGFib3V0IHRoZSBYK1ogYXhpc1wiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsgMSwgMCwgMCwgMCBdLFxuXHRcdFx0XHRbIDAsIDEsIDAsIDAgXSxcblx0XHRcdFx0WyAwLCAwLCBcIjEgLyBzcXJ0KDIpXCIsIFwiLWV4cChpICogbGFtYmRhKSAqIDEgLyBzcXJ0KDIpXCIgXSxcblx0XHRcdFx0WyAwLCAwLCBcImV4cChpICogcGhpKSAqIDEgLyBzcXJ0KDIpXCIsIFwiZXhwKGkgKiBsYW1iZGEgKyBpICogcGhpKSAqIDEgLyBzcXJ0KDIpXCIgXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW1wicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIkNVMlwiLFxuXHRcdFx0XHRyb290OiBcInUyXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcImN1MlwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0XHRcdGRlZmdhdGU6IFwiREVGR0FURSBjdTIoJXBoaSwgJWxhbWJkYSk6XFxuICAgIDEsIDAsIDAsIDBcXG4gICAgMCwgMSwgMCwgMFxcbiAgICAwLCAwLCAxL1NRUlQoMiksIC0xKkVYUChpKiVsYW1iZGEpKjEvU1FSVCgyKVxcbiAgICAwLCAwLCBFWFAoaSolcGhpKSoxL1NRUlQoMiksIEVYUChpKiVsYW1iZGEgKyBpKiVwaGkpKjEvU1FSVCgyKVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB5cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY3UyXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJwaGlcIiwgXCJsYW1iZGFcIl0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLDAsMCwwXSxbMCwxLDAsMF0sWzAsIDAsIDEvcXVpbF9zcXJ0KDIpLCAtcXVpbF9leHAoMWoqcF9sYW1iZGEpKjEvcXVpbF9zcXJ0KDIpXSxbMCwgMCwgcXVpbF9leHAoMWoqcF9waGkpKjEvcXVpbF9zcXJ0KDIpLCBxdWlsX2V4cCgxaipwX2xhbWJkYSsxaipwX3BoaSkqMS9xdWlsX3NxcnQoMildXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcImN1MlwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwwLDAsMF0sWzAsMSwwLDBdLFswLCAwLCAxL25wLnNxcnQoMiksIC1ucC5leHAoMWoqcF9sYW1iZGEpKjEvbnAuc3FydCgyKV0sWzAsIDAsIG5wLmV4cCgxaipwX3BoaSkqMS9ucC5zcXJ0KDIpLCBucC5leHAoMWoqcF9sYW1iZGErMWoqcF9waGkpKjEvbnAuc3FydCgyKV1dXCIsXG5cdFx0XHRcdFx0bm90VGZxU3VwcG9ydGVkOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjb250cm9sbGVkVW5pdGFyeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0XHRcdG1hdHJpeDogW1tbXCIxL3NxcnQoMilcIiwgXCIwXCJdLCBbXCItY29zKGxhbWJkYSkvc3FydCgyKVwiLCBcIi1zaW4obGFtYmRhKS9zcXJ0KDIpXCJdXSxcblx0XHRcdFx0XHRcdFx0IFtbXCJjb3MocGhpKS9zcXJ0KDIpXCIsIFwic2luKHBoaSkvc3FydCgyKVwiXSwgW1wiY29zKGxhbWJkYStwaGkpL3NxcnQoMilcIiwgXCJzaW4obGFtYmRhK3BoaSkvc3FydCgyKVwiXV1dXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFhc206IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwicGhpXCIsIGxhbWJkYTogXCJsYW1iZGFcIiB9IH1cblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwicGhpXCIsIGxhbWJkYTogXCJsYW1iZGFcIiB9IH1cblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaVwiLCBcImxhbWJkYVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwgMCwgMS9ucC5zcXJ0KDIpLCAtbnAuZXhwKDFqKnBfbGFtYmRhKSoxL25wLnNxcnQoMildLFswLCAwLCBucC5leHAoMWoqcF9waGkpKjEvbnAuc3FydCgyKSwgbnAuZXhwKDFqKnBfbGFtYmRhKzFqKnBfcGhpKSoxL25wLnNxcnQoMildXVwiLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG1hdHJpeDogW1sgMSwgMCwgMCwgMCBdLFsgMCwgMSwgMCwgMCBdLFsgMCwgMCwgXCIxIC8gc3FydCgyKVwiLCBcIi1leHAoaSAqIGxhbWJkYSkgKiAxIC8gc3FydCgyKVwiIF0sWyAwLCAwLCBcImV4cChpICogcGhpKSAqIDEgLyBzcXJ0KDIpXCIsIFwiZXhwKGkgKiBsYW1iZGEgKyBpICogcGhpKSAqIDEgLyBzcXJ0KDIpXCIgXV0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLDAsMCwwXSxbMCwxLDAsMF0sWzAsIDAsIDEvbnAuc3FydCgyKSwgLW5wLmV4cCgxaipwX2xhbWJkYSkqMS9ucC5zcXJ0KDIpXSxbMCwgMCwgbnAuZXhwKDFqKnBfcGhpKSoxL25wLnNxcnQoMiksIG5wLmV4cCgxaipwX2xhbWJkYSsxaipwX3BoaSkqMS9ucC5zcXJ0KDIpXV1cIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaVwiLCBcImxhbWJkYVwiXVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGN1Mzoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiQ29udHJvbGxlZCByb3RhdGlvbiBnYXRlIHdpdGggMyBFdWxlciBhbmdsZXNcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbIDEsIDAsIDAsIDAgXSxcblx0XHRcdFx0WyAwLCAxLCAwLCAwIF0sXG5cdFx0XHRcdFsgMCwgMCwgXCJjb3ModGhldGEvMilcIiwgXCItZXhwKGkgKiBsYW1iZGEpICogc2luKHRoZXRhIC8gMilcIiBdLFxuXHRcdFx0XHRbIDAsIDAsIFwiZXhwKGkgKiBwaGkpICogc2luKHRoZXRhIC8gMilcIiwgXCJleHAoaSAqIGxhbWJkYSArIGkgKiBwaGkpICogY29zKHRoZXRhIC8gMilcIiBdXG5cdFx0XHRdLFxuXG5cdFx0XHRwYXJhbXM6IFtcInRoZXRhXCIsIFwicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIkNVM1wiLFxuXHRcdFx0XHRyb290OiBcInUzXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcImN1M1wiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIiwgXCJwaGlcIiwgXCJsYW1iZGFcIl0sXG5cdFx0XHRcdFx0ZGVmZ2F0ZTogXCJERUZHQVRFIGN1MygldGhldGEsICVwaGksICVsYW1iZGEpOlxcbiAgICAxLCAwLCAwLCAwXFxuICAgIDAsIDEsIDAsIDBcXG4gICAgMCwgMCwgQ09TKCV0aGV0YS8yKSwgLTEqRVhQKGkqJWxhbWJkYSkqU0lOKCV0aGV0YS8yKVxcbiAgICAwLCAwLCBFWFAoaSolcGhpKSpTSU4oJXRoZXRhLzIpLCBFWFAoaSolbGFtYmRhICsgaSolcGhpKSpDT1MoJXRoZXRhLzIpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cHlxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjdTNcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCIsIFwicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwwLDAsMF0sWzAsMSwwLDBdLFswLCAwLCBxdWlsX2NvcyhwX3RoZXRhLzIpLC1xdWlsX2V4cCgxaipwX2xhbWJkYSkqcXVpbF9zaW4ocF90aGV0YS8yKV0sWzAsIDAsIHF1aWxfZXhwKDFqKnBfcGhpKSpxdWlsX3NpbihwX3RoZXRhLzIpLHF1aWxfZXhwKDFqKnBfbGFtYmRhKzFqKnBfcGhpKSpxdWlsX2NvcyhwX3RoZXRhLzIpXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjdTNcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCIsIFwicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwwLDAsMF0sWzAsMSwwLDBdLFswLCAwLCBucC5jb3MocF90aGV0YS8yKSwtbnAuZXhwKDFqKnBfbGFtYmRhKSpucC5zaW4ocF90aGV0YS8yKV0sWzAsIDAsIG5wLmV4cCgxaipwX3BoaSkqbnAuc2luKHBfdGhldGEvMiksbnAuZXhwKDFqKnBfbGFtYmRhKzFqKnBfcGhpKSpucC5jb3MocF90aGV0YS8yKV1dXCIsXG5cdFx0XHRcdFx0bm90VGZxU3VwcG9ydGVkOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjb250cm9sbGVkVW5pdGFyeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIiwgXCJwaGlcIiwgXCJsYW1iZGFcIl0sXG5cdFx0XHRcdFx0bWF0cml4OiBbW1tcImNvcyh0aGV0YS8yKVwiLCBcIjBcIl0sIFtcIi1jb3MobGFtYmRhKSpzaW4odGhldGEvMilcIiwgXCItc2luKGxhbWJkYSkqc2luKHRoZXRhLzIpXCJdXSxcblx0XHRcdFx0XHRcdFx0IFtbXCJjb3MocGhpKSpzaW4odGhldGEvMilcIiwgXCJzaW4ocGhpKSpzaW4odGhldGEvMilcIl0sIFtcImNvcyhsYW1iZGErcGhpKSpjb3ModGhldGEvMilcIiwgXCJzaW4obGFtYmRhK3BoaSkqY29zKHRoZXRhLzIpXCJdXV1cblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiLCBcInBoaVwiLCBcImxhbWJkYVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwgMCwgbnAuY29zKHBfdGhldGEvMiksLW5wLmV4cCgxaipwX2xhbWJkYSkqbnAuc2luKHBfdGhldGEvMildLFswLCAwLCBucC5leHAoMWoqcF9waGkpKm5wLnNpbihwX3RoZXRhLzIpLG5wLmV4cCgxaipwX2xhbWJkYSsxaipwX3BoaSkqbnAuY29zKHBfdGhldGEvMildXVwiLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG1hdHJpeDogW1sgMSwgMCwgMCwgMCBdLFsgMCwgMSwgMCwgMCBdLFsgMCwgMCwgXCJjb3ModGhldGEvMilcIiwgXCItZXhwKGkgKiBsYW1iZGEpICogc2luKHRoZXRhIC8gMilcIiBdLFsgMCwgMCwgXCJleHAoaSAqIHBoaSkgKiBzaW4odGhldGEgLyAyKVwiLCBcImV4cChpICogbGFtYmRhICsgaSAqIHBoaSkgKiBjb3ModGhldGEgLyAyKVwiIF1dLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwwLDAsMF0sWzAsMSwwLDBdLFswLCAwLCBucC5jb3MocF90aGV0YS8yKSwtbnAuZXhwKDFqKnBfbGFtYmRhKSpucC5zaW4ocF90aGV0YS8yKV0sWzAsIDAsIG5wLmV4cCgxaipwX3BoaSkqbnAuc2luKHBfdGhldGEvMiksbnAuZXhwKDFqKnBfbGFtYmRhKzFqKnBfcGhpKSpucC5jb3MocF90aGV0YS8yKV1dXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiLCBcInBoaVwiLCBcImxhbWJkYVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcImN1XCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRjczoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiQ29udHJvbGxlZCBQSS8yIHJvdGF0aW9uIG92ZXIgWi1heGlzIChzeW5vbnltIGZvciBgY3IyYClcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwLDAsMF0sXG5cdFx0XHRcdFswLDEsMCwwXSxcblx0XHRcdFx0WzAsMCwxLDBdLFxuXHRcdFx0XHRbMCwwLDAsXCJleHAoaSAqIHBpIC8gMilcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlNcIixcblx0XHRcdFx0cm9vdDogXCJzXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJjdTFcIixcblx0XHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0XHRsYW1iZGE6IFwicGkvMlwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcInBpLzJcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbnRyb2xsZWRQaGFzZVNoaWZ0XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiB7dGhldGE6XCJNX1BJLzJcIn1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcInBpLzJcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UxXCIsIHBhcmFtczogeyBsYW1iZGE6IFwicGkvMlwiIH19XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IFtcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjdTFcIiwgcGFyYW1zOiB7IGxhbWJkYTogXCJwaS8yXCIgfX1cblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWl7CvVwiLFxuXHRcdFx0XHRcdGNvbnRyb2xsZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLDAsMCwwXSxbMCwxLDAsMF0sWzAsIDAsIDEsIDBdLFswLCAwLCAwLCBucC5leHAoMWogKiBucC5waSAvIDIpXV1cIixcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlNcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y3Q6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIkNvbnRyb2xsZWQgUEkvNCByb3RhdGlvbiBvdmVyIFotYXhpcyAoc3lub255bSBmb3IgYGNyNGApXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsMCwwLDBdLFxuXHRcdFx0XHRbMCwxLDAsMF0sXG5cdFx0XHRcdFswLDAsMSwwXSxcblx0XHRcdFx0WzAsMCwwLFwiZXhwKGkgKiBwaSAvIDQpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImRvdFwiLFwiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJUXCIsXG5cdFx0XHRcdHJvb3Q6IFwidFwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcInBpLzRcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcImN1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCJwaS80XCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjb250cm9sbGVkUGhhc2VTaGlmdFwiLFxuXHRcdFx0XHRcdHBhcmFtczoge3RoZXRhOlwiTV9QSS80XCJ9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcImN1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCJwaS80XCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFhc206IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN1MVwiLCBwYXJhbXM6IHsgbGFtYmRhOiBcInBpLzRcIiB9fVxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UxXCIsIHBhcmFtczogeyBsYW1iZGE6IFwicGkvNFwiIH19XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVpcms6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlpewrxcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidW5pdGFyeVwiLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwwLDAsMF0sWzAsMSwwLDBdLFswLCAwLCAxLCAwXSxbMCwgMCwgMCwgbnAuZXhwKDFqICogbnAucGkgLyA0KV1dXCIsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJUXCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGNzZGc6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIkNvbnRyb2xsZWQgKC1QSS8yKSByb3RhdGlvbiBvdmVyIFotYXhpc1wiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDAsMCwwXSxcblx0XHRcdFx0WzAsMSwwLDBdLFxuXHRcdFx0XHRbMCwwLDEsMF0sXG5cdFx0XHRcdFswLDAsMCxcImV4cCgtaSAqIHBpIC8gMilcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlMmIzgyMjQ7XCIsXG5cdFx0XHRcdHJvb3Q6IFwic2RnXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJjdTFcIixcblx0XHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0XHRsYW1iZGE6IFwiLXBpLzJcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcImN1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCItcGkvMlwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY29udHJvbGxlZFBoYXNlU2hpZnRcIixcblx0XHRcdFx0XHRwYXJhbXM6IHt0aGV0YTpcIi1NX1BJLzJcIn1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcIi1waS8yXCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFhc206IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN1MVwiLCBwYXJhbXM6IHsgbGFtYmRhOiBcIi0xKnBpLzJcIiB9fVxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UxXCIsIHBhcmFtczogeyBsYW1iZGE6IFwiLTEqcGkvMlwiIH19XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVpcms6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlpeLcK9XCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwgMCwgMSwgMF0sWzAsIDAsIDAsIG5wLmV4cCgtMWogKiBucC5waSAvIDIpXV1cIixcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlNcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlLFxuXHRcdFx0XHRcdGRhZ2dlcjogdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGN0ZGc6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIkNvbnRyb2xsZWQgKC1QSS80KSByb3RhdGlvbiBvdmVyIFotYXhpc1wiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDAsMCwwXSxcblx0XHRcdFx0WzAsMSwwLDBdLFxuXHRcdFx0XHRbMCwwLDEsMF0sXG5cdFx0XHRcdFswLDAsMCxcImV4cCgtaSAqIHBpIC8gNClcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlQmIzgyMjQ7XCIsXG5cdFx0XHRcdHJvb3Q6IFwidGRnXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJjdTFcIixcblx0XHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0XHRsYW1iZGE6IFwiLXBpLzRcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcImN1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCItcGkvNFwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY29udHJvbGxlZFBoYXNlU2hpZnRcIixcblx0XHRcdFx0XHRwYXJhbXM6IHt0aGV0YTpcIi1NX1BJLzRcIn1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcIi1waS80XCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFhc206IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN1MVwiLCBwYXJhbXM6IHsgbGFtYmRhOiBcIi0xKnBpLzRcIiB9fVxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UxXCIsIHBhcmFtczogeyBsYW1iZGE6IFwiLTEqcGkvNFwiIH19XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVpcms6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlpeLcK8XCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwgMCwgMSwgMF0sWzAsIDAsIDAsIG5wLmV4cCgtMWogKiBucC5waSAvIDQpXV1cIixcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlRcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlLFxuXHRcdFx0XHRcdGRhZ2dlcjogdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGNjeDoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiVG9mZm9saSBha2EgXFxcIkNDTk9UXFxcIiBnYXRlXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsMCwwLDAsMCwwLDAsMF0sXG5cdFx0XHRcdFswLDEsMCwwLDAsMCwwLDBdLFxuXHRcdFx0XHRbMCwwLDEsMCwwLDAsMCwwXSxcblx0XHRcdFx0WzAsMCwwLDEsMCwwLDAsMF0sXG5cdFx0XHRcdFswLDAsMCwwLDEsMCwwLDBdLFxuXHRcdFx0XHRbMCwwLDAsMCwwLDEsMCwwXSxcblx0XHRcdFx0WzAsMCwwLDAsMCwwLDAsMV0sXG5cdFx0XHRcdFswLDAsMCwwLDAsMCwxLDBdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImRvdFwiLFwiZG90XCIsXCJub3RcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIkNDTk9UXCIsXG5cdFx0XHRcdHJvb3Q6IFwieFwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJDQ05PVFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNDWFwiLFxuXHRcdFx0XHRcdG5vdFRmcVN1cHBvcnRlZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY2N4XCIsXG5cdFx0XHRcdFx0ZnVuYzogXCJ2b2lkIGNjeChRdXJlZyBxdWJpdHMsIGNvbnN0IGludCBxMSwgY29uc3QgaW50IHEyLCBjb25zdCBpbnQgcTMpIHtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgaGFkYW1hcmQocXViaXRzLCBxMyk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGNvbnRyb2xsZWROb3QocXViaXRzLCBxMiwgcTMpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBwaGFzZVNoaWZ0KHF1Yml0cywgcTMsIC1NX1BJLzQpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBjb250cm9sbGVkTm90KHF1Yml0cywgcTEsIHEzKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgdEdhdGUocXViaXRzLCBxMyk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGNvbnRyb2xsZWROb3QocXViaXRzLCBxMiwgcTMpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBwaGFzZVNoaWZ0KHF1Yml0cywgcTMsIC1NX1BJLzQpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBjb250cm9sbGVkTm90KHF1Yml0cywgcTEsIHEzKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgdEdhdGUocXViaXRzLCBxMik7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIHRHYXRlKHF1Yml0cywgcTMpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBjb250cm9sbGVkTm90KHF1Yml0cywgcTEsIHEyKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgaGFkYW1hcmQocXViaXRzLCBxMyk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIHRHYXRlKHF1Yml0cywgcTEpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBwaGFzZVNoaWZ0KHF1Yml0cywgcTIsIC1NX1BJLzQpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBjb250cm9sbGVkTm90KHF1Yml0cywgcTEsIHEyKTtcXG59XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJDQ05PVFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1aXJrOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJYXCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNjbm90XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNDTk9UXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRjc3dhcDoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiQ29udHJvbGxlZCBzd2FwIGFrYSBcXFwiRnJlZGtpblxcXCIgZ2F0ZVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDAsMCwwLDAsMCwwLDBdLFxuXHRcdFx0XHRbMCwxLDAsMCwwLDAsMCwwXSxcblx0XHRcdFx0WzAsMCwxLDAsMCwwLDAsMF0sXG5cdFx0XHRcdFswLDAsMCwxLDAsMCwwLDBdLFxuXHRcdFx0XHRbMCwwLDAsMCwxLDAsMCwwXSxcblx0XHRcdFx0WzAsMCwwLDAsMCwwLDEsMF0sXG5cdFx0XHRcdFswLDAsMCwwLDAsMSwwLDBdLFxuXHRcdFx0XHRbMCwwLDAsMCwwLDAsMCwxXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJkb3RcIixcInhcIixcInhcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlNXUFwiLFxuXHRcdFx0XHRyb290OiBcInN3YXBcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdG5hbWU6IFwiQ1NXQVBcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY3N3YXBcIixcblx0XHRcdFx0XHRmdW5jOiBcInZvaWQgY3N3YXAoUXVyZWcgcXViaXRzLCBjb25zdCBpbnQgcTEsIGNvbnN0IGludCBxMiwgY29uc3QgaW50IHEzKSB7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGNvbnRyb2xsZWROb3QocXViaXRzLCBxMywgcTIpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBoYWRhbWFyZChxdWJpdHMsIHEzKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgY29udHJvbGxlZE5vdChxdWJpdHMsIHEyLCBxMyk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIHBoYXNlU2hpZnQocXViaXRzLCBxMywgLU1fUEkvNCk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGNvbnRyb2xsZWROb3QocXViaXRzLCBxMSwgcTMpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICB0R2F0ZShxdWJpdHMsIHEzKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgY29udHJvbGxlZE5vdChxdWJpdHMsIHEyLCBxMyk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIHBoYXNlU2hpZnQocXViaXRzLCBxMywgLU1fUEkvNCk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGNvbnRyb2xsZWROb3QocXViaXRzLCBxMSwgcTMpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICB0R2F0ZShxdWJpdHMsIHEyKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgdEdhdGUocXViaXRzLCBxMyk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGhhZGFtYXJkKHF1Yml0cywgcTMpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBjb250cm9sbGVkTm90KHF1Yml0cywgcTEsIHEyKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgdEdhdGUocXViaXRzLCBxMSk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIHBoYXNlU2hpZnQocXViaXRzLCBxMiwgLU1fUEkvNCk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGNvbnRyb2xsZWROb3QocXViaXRzLCBxMiwgcTMpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBjb250cm9sbGVkTm90KHF1Yml0cywgcTMsIHEyKTtcXG59XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJDb250cm9sbGVkIFNXQVBcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJDU1dBUFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB5cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiQ1NXQVBcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiU3dhcFwiLFxuXHRcdFx0XHRcdGNvbnRyb2xsZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLDAsMCwwLDAsMCwwLDBdLCBbMCwxLDAsMCwwLDAsMCwwXSwgWzAsMCwxLDAsMCwwLDAsMF0sIFswLDAsMCwxLDAsMCwwLDBdLCBbMCwwLDAsMCwxLDAsMCwwXSwgWzAsMCwwLDAsMCwwLDEsMF0sIFswLDAsMCwwLDAsMSwwLDBdLCBbMCwwLDAsMCwwLDAsMCwxXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiU1dBUFwiLFxuXHRcdFx0XHRcdGNvbnRyb2xsZWQ6IHRydWVcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRjc3Jzd2FwOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJDb250cm9sbGVkIHNxdWFyZSByb290IG9mIHN3YXBcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwLDAsMCwwLDAsMCwwXSxcblx0XHRcdFx0WzAsMSwwLDAsMCwwLDAsMF0sXG5cdFx0XHRcdFswLDAsMSwwLDAsMCwwLDBdLFxuXHRcdFx0XHRbMCwwLDAsMSwwLDAsMCwwXSxcblx0XHRcdFx0WzAsMCwwLDAsMSwwLDAsMF0sXG5cdFx0XHRcdFswLDAsMCwwLDAsXCIwLjUgKiAoMSArIGkpXCIsXCIwLjUgKiAoMSAtIGkpXCIsMF0sXG5cdFx0XHRcdFswLDAsMCwwLDAsXCIwLjUgKiAoMSAtIGkpXCIsXCIwLjUgKiAoMSArIGkpXCIsMF0sXG5cdFx0XHRcdFswLDAsMCwwLDAsMCwwLDFdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImRvdFwiLFwiYm94XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIiYjeDIyMUE7U1dQXCIsXG5cdFx0XHRcdHJvb3Q6IFwic3Jzd2FwXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjc3Jzd2FwXCIsXG5cdFx0XHRcdFx0Ly9AVE9ETyBhZGQgZnVuY3Rpb25cblx0XHRcdFx0XHRmdW5jOiBcIlRPRE9cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwic3Jzd2FwXCIsXG5cdFx0XHRcdFx0XHR0eXBlOiBcImNvbnRyb2xsZWRcIixcblx0XHRcdFx0XHRcdG5vdFRmcVN1cHBvcnRlZDogdHJ1ZVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY3Nyc3dhcFwiLFx0XHRcdFx0XHRcblx0XHRcdFx0XHRkZWZnYXRlOiBcIkRFRkdBVEUgY3Nyc3dhcDpcXG4gICAgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMFxcbiAgICAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwXFxuICAgIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDBcXG4gICAgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMFxcbiAgICAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwXFxuICAgIDAsIDAsIDAsIDAsIDAsIDAuNSswLjVpLCAwLjUtMC41aSwgMFxcbiAgICAwLCAwLCAwLCAwLCAwLCAwLjUtMC41aSwgMC41KzAuNWksIDBcXG4gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB5cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY3Nyc3dhcFwiLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwwLDAsMCwwLDAsMCwwXSxbMCwxLDAsMCwwLDAsMCwwXSxbMCwwLDEsMCwwLDAsMCwwXSxbMCwwLDAsMSwwLDAsMCwwXSxbMCwwLDAsMCwxLDAsMCwwXSxbMCwwLDAsMCwwLDAuNSAqICgxICsgMWopLDAuNSAqICgxIC0gMWopLDBdLFswLDAsMCwwLDAsMC41ICogKDEgLSAxaiksMC41ICogKDEgKyAxaiksMF0sWzAsMCwwLDAsMCwwLDAsMV1dXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLDAsMCwwLDAsMCwwLDBdLFswLDEsMCwwLDAsMCwwLDBdLFswLDAsMSwwLDAsMCwwLDBdLFswLDAsMCwxLDAsMCwwLDBdLFswLDAsMCwwLDEsMCwwLDBdLFswLDAsMCwwLDAsMC41ICogKDEgKyAxaiksMC41ICogKDEgLSAxaiksMF0sWzAsMCwwLDAsMCwwLjUgKiAoMSAtIDFqKSwwLjUgKiAoMSArIDFqKSwwXSxbMCwwLDAsMCwwLDAsMCwxXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiU1FSVFNXQVBcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0cmVzZXQ6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlJlc2V0cyBxdWJpdFwiLFxuXHRcdFx0bWF0cml4OiBbXSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlJTVFwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJSRVNFVFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcInJlc2V0XCIsXG5cdFx0XHRcdFx0bm90VGZxU3VwcG9ydGVkOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJyZXNldFwiLFxuXHRcdFx0XHRcdC8vQFRPRE8gYWRkIGZ1bmN0aW9uXG5cdFx0XHRcdFx0ZnVuYzogXCJUT0RPXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJSZXNldFwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0bWVhc3VyZToge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiTWVhc3VyZXMgcXViaXQgYW5kIHN0b3JlcyBjaGFuY2UgKDAgb3IgMSkgaW50byBjbGFzc2ljYWwgYml0XCIsXG5cdFx0XHRtYXRyaXg6IFtdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImdhdWdlXCJdLFxuXHRcdFx0XHRsYWJlbDogXCJcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiTUVBU1VSRVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcIm1lYXN1cmVcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwibWVhc3VyZVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiTVwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0dGhpcy5pbml0KG51bVF1Yml0cyk7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZGVmYXVsdEh5YnJpZE9wdGlvbnMgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHtcblx0XHRvcHRpbWl6ZXI6IFwiUG93ZWxsXCIsXG5cdFx0dG9sZXJhbmNlOiAwLjAwMSxcblx0XHRjb3N0RnVuY3Rpb246IHtcblx0XHRcdHB5dGhvbjogXCJcIixcblx0XHRcdGphdmFzY3JpcHQ6IFwiXCJcblx0XHR9XG5cdH07XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uKG51bVF1Yml0cywgb3B0aW9ucykge1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR0aGlzLm51bVF1Yml0cyA9IG51bVF1Yml0cyB8fCAxO1xuXHR0aGlzLmdhdGVzID0gW107XG5cdHRoaXMucGFydGl0aW9uTWFwID0gW107XG5cdHRoaXMucGFydGl0aW9uQ291bnQgPSAwO1xuXHR0aGlzLnBhcnRpdGlvbkluZm8gPSB7fTtcblxuXHR0aGlzLnBhcmFtcyA9IFtdO1xuXHR0aGlzLm9wdGlvbnMgPSB7XG5cdFx0cGFyYW1zOiB7fSxcblxuXHRcdGh5YnJpZDogZmFsc2UsXG5cdFx0aHlicmlkT3B0aW9uczogdGhpcy5kZWZhdWx0SHlicmlkT3B0aW9ucygpXG5cdH07XG5cblx0aWYoIW9wdGlvbnMua2VlcEN1c3RvbUdhdGVzKSB7XG5cdFx0dGhpcy5jdXN0b21HYXRlcyA9IHt9O1xuXHR9XG5cblx0dGhpcy5jcmVncyA9IHt9O1xuXHR0aGlzLmNvbGxhcHNlZCA9IFtdO1xuXHR0aGlzLnByb2IgPSBbXTtcblx0dGhpcy5tZWFzdXJlUmVzZXRzUXViaXQgPSBmYWxzZTtcblx0dGhpcy5yZXZlcnNlQml0T3JkZXIgPSBmYWxzZTtcblxuXHR0aGlzLmNsZWFyKCk7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuY2xlYXJHYXRlcyA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLmdhdGVzID0gW107XG5cdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLm51bVF1Yml0czsgaSsrKSB7XG5cdFx0dGhpcy5nYXRlcy5wdXNoKFtdKTtcblx0fVxufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMuY2xlYXJHYXRlcygpO1xuXHR0aGlzLmluaXRTdGF0ZSgpO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucmVzZXRTdGF0ZSA9IGZ1bmN0aW9uKCkge1xuXHQvLyByZXNldCBzdGF0ZVxuXHR0aGlzLnN0YXRlID0ge307XG5cdHRoaXMuc3RhdGVCaXRzID0gMDtcblx0dGhpcy5wYXJ0aXRpb25DYWNoZSA9IHt9O1xuXG5cdC8vIHJlc2V0IGNyZWdzXG5cdGZvcih2YXIgY3JlZyBpbiB0aGlzLmNyZWdzKSB7XG5cdFx0dmFyIGxlbiA9IHRoaXMuY3JlZ3NbY3JlZ10ubGVuZ3RoIHx8IDA7XG5cdFx0dGhpcy5jcmVnc1tjcmVnXSA9IFtdO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0dGhpcy5jcmVnc1tjcmVnXS5wdXNoKDApO1xuXHRcdH1cblx0fVxuXG5cdC8vIHJlc2V0IG1lYXN1cmVtZW50XG5cdHRoaXMuY29sbGFwc2VkID0gW107XG5cdHRoaXMucHJvYiA9IFtdO1xuXG5cdC8vIHJlc2V0IHN0YXRpc3RpY3Ncblx0dGhpcy5zdGF0cyA9IHtcblx0XHRkdXJhdGlvbjogMFxuXHR9O1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmluaXRTdGF0ZSA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLnJlc2V0U3RhdGUoKTtcblx0dGhpcy5zdGF0ZVtcIjBcIl0gPSBtYXRoLmNvbXBsZXgoMSwgMCk7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZm9ybWF0Q29tcGxleCA9IGZ1bmN0aW9uKGNvbXBsZXgsIG9wdGlvbnMpIHtcblx0cmV0dXJuIGZvcm1hdENvbXBsZXgyKGNvbXBsZXgucmUsIGNvbXBsZXguaW0sIG9wdGlvbnMpO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLm11bHRpcGx5U3F1YXJlTWF0cmljZXMgPSBmdW5jdGlvbihtMSwgbTIpIHtcblx0dmFyIGxlbiA9IG0xLmxlbmd0aDtcblxuXHR2YXIgYyA9IGxlbjtcblx0dmFyIGQgPSBsZW47XG5cdHZhciBrID0gbGVuO1xuXG5cdHZhciByZXMgPSBbXTtcblx0d2hpbGUoYy0tKSB7XG5cdFx0cmVzW2NdID0gW107XG5cdFx0ZCA9IGxlbjtcblx0XHR3aGlsZShkLS0pIHtcblx0XHRcdHJlc1tjXVtkXSA9IDA7XG5cdFx0XHRrID0gbGVuO1xuXHRcdFx0d2hpbGUoay0tKSB7XG5cdFx0XHRcdGlmKG0xW2NdW2tdICYmIG0yW2tdW2RdKSB7XG5cdFx0XHRcdFx0aWYocmVzW2NdW2RdKSB7XG5cdFx0XHRcdFx0XHRyZXNbY11bZF0gPSBtYXRoLmFkZChyZXNbY11bZF0sIG1hdGgubXVsdGlwbHkobTFbY11ba10sIG0yW2tdW2RdKSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJlc1tjXVtkXSA9IG1hdGgubXVsdGlwbHkobTFbY11ba10sIG0yW2tdW2RdKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIHJlcztcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5pc0lkZW50aXR5TWF0cml4ID0gZnVuY3Rpb24obSwgcHJlY2lzaW9uKSB7XG5cdGlmKHR5cGVvZiBwcmVjaXNpb24gPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdHByZWNpc2lvbiA9IDE0O1xuXHR9XG5cblx0Zm9yKHZhciBpID0gMDsgaSA8IG0ubGVuZ3RoOyBpKyspIHtcblx0XHRmb3IodmFyIGogPSAwOyBqIDwgbS5sZW5ndGg7IGorKykge1xuXHRcdFx0aWYobWF0aC5yb3VuZChtW2ldW2pdLCBwcmVjaXNpb24pICE9IChpID09IGogPyAxIDogMCkpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmlzVW5pdGFyeU1hdHJpeCA9IGZ1bmN0aW9uKFUsIHByZWNpc2lvbikge1xuXHRyZXR1cm4gdGhpcy5pc0lkZW50aXR5TWF0cml4KG1hdGgubXVsdGlwbHkoVSwgbWF0aC5jdHJhbnNwb3NlKFUpKSwgcHJlY2lzaW9uKTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmlzSGVybWl0aWFuTWF0cml4ID0gZnVuY3Rpb24oSCwgcHJlY2lzaW9uKSB7XG5cdHZhciBkaWZmID0gdGhpcy5tYXRyaXhEaWZmKEgsIG1hdGguY3RyYW5zcG9zZShIKSlcblxuXHRyZXR1cm4gZGlmZiA8PSBtYXRoLnBvdygxMCwgLTEgKiAocHJlY2lzaW9uIHx8IDE0KSk7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5tYXRyaXhEaWZmID0gZnVuY3Rpb24obWF0cml4MSwgbWF0cml4Mikge1xuXHR2YXIgdG90YWwgPSAwO1xuXHR2YXIgY291bnQgPSAwO1xuXHRmb3IodmFyIHIgPSAwOyByIDwgbWF0cml4MS5sZW5ndGg7IHIrKykge1xuXHRcdHZhciByb3cxID0gbWF0cml4MVtyXTtcblx0XHR2YXIgcm93MiA9IG1hdHJpeDJbcl07XG5cdFx0Zm9yKHZhciBjID0gMDsgYyA8IHJvdzEubGVuZ3RoOyBjKyspIHtcblx0XHRcdHZhciBpdGVtMSA9IHJvdzFbY107XG5cdFx0XHR2YXIgaXRlbTIgPSByb3cyW2NdO1xuXG5cdFx0XHR2YXIgaTEgPSAodHlwZW9mIGl0ZW0xID09IFwib2JqZWN0XCIpID8gaXRlbTEgOiBtYXRoLmNvbXBsZXgoaXRlbTEpO1xuXHRcdFx0dmFyIGkyID0gKHR5cGVvZiBpdGVtMiA9PSBcIm9iamVjdFwiKSA/IGl0ZW0yIDogbWF0aC5jb21wbGV4KGl0ZW0yKTtcblxuXHRcdFx0Ly8gZGlzdGFuY2UgaW4gdGhlIGNvbXBsZXggcGxhbmVcblx0XHRcdHZhciBkaXN0YW5jZSA9IG1hdGguYWJzKG1hdGguc3VidHJhY3QoaTEsIGkyKSk7XG5cblx0XHRcdHRvdGFsICs9IGRpc3RhbmNlO1xuXG5cdFx0XHRjb3VudCsrO1xuXHRcdH1cblx0fVxuXG5cdHZhciBkaWZmID0gY291bnQgPyAodG90YWwgLyBjb3VudCkgOiAwO1xuXG5cdHJldHVybiBkaWZmO1xufTtcblxuXG4vL1xuLy8gRXh0cmFjdCB2YXJpYWJsZXMgZnJvbSBleHByZXNzaW9uIHN0cmluZyBhbmQgcmV0dXJucyBvYmplY3Qgd2l0aCBleHByZXNzaW9uIHN0cmluZyBhbmQgYXJyYXkgb2YgdmFyaWFibGUgbmFtZXNcbi8vIE5vdGUgdGhhdCBzeW1ib2wgXCJqXCIgaXMgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgdG8gXCJpXCIgKGltYWdpbmFyeSB1bml0IHVzZWQgaW4gcHl0aG9uIGlzIFwialwiIGJ1dCB3ZSBuZWVkIFwiaVwiKVxuLy9cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5wYXJzZU1hdGhTdHJpbmcgPSBmdW5jdGlvbihzdHIpIHtcblx0dmFyIHZhcmlhYmxlcyA9IFtdO1xuXG5cdC8vIGNvbnZlcnQgaW1hZ2luYXJ5IHVuaXQgXCJqXCIgdG8gXCJpXCJcblx0dmFyIG1hdGhUb1N0cmluZ0hhbmRsZXIgPSBmdW5jdGlvbihub2RlLCBvcHRpb25zKSB7XG5cdFx0aWYobm9kZS5pc1N5bWJvbE5vZGUpIHtcblx0XHRcdGlmKG5vZGUubmFtZSA9PSBcImpcIikge1xuXHRcdFx0XHRyZXR1cm4gXCJpXCI7XG5cdFx0XHR9XG5cblx0XHRcdGlmKHZhcmlhYmxlcy5pbmRleE9mKG5vZGUubmFtZSkgPCAwKSB7XG5cdFx0XHRcdHZhcmlhYmxlcy5wdXNoKG5vZGUubmFtZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdHZhciBub2RlID0gbWF0aC5wYXJzZShzdHIucmVwbGFjZSgvW1xcdFxcblxccl0vZ20sIFwiXCIpKTtcblxuXHR2YXIgZXhwcmVzc2lvbiA9IG5vZGUudG9TdHJpbmcoeyBoYW5kbGVyOiBtYXRoVG9TdHJpbmdIYW5kbGVyIH0pO1xuXG5cdHJldHVybiB7XG5cdFx0ZXhwcmVzc2lvbjogZXhwcmVzc2lvbixcblx0XHR2YXJpYWJsZXM6IHZhcmlhYmxlcyxcblx0XHRub2RlOiBub2RlXG5cdH07XG59O1xuXG4vL1xuLy8gRXZhbHVhdGUgZXhwcmVzc2lvblxuLy9cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5ldmFsTWF0aFN0cmluZyA9IGZ1bmN0aW9uKHN0ciwgdmFycykge1xuXHR2YXJzID0gdmFycyB8fCB7fTtcblxuXHR2YXIgcGFyc2VkID0gdGhpcy5wYXJzZU1hdGhTdHJpbmcoc3RyKTtcblxuXHR2YXIgcmVzID0gbWF0aC5ldmFsdWF0ZShwYXJzZWQuZXhwcmVzc2lvbiwgdmFycyk7XG5cdGlmKHJlcyBpbnN0YW5jZW9mIG1hdGguTWF0cml4KSB7XG5cdFx0cmV0dXJuIHJlcy50b0FycmF5KCk7XG5cdH1cblxuXHRyZXR1cm4gcmVzO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnBhcnNlTWF0cml4ID0gZnVuY3Rpb24oTSwgdmFycykge1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0dmFyIEEgPSBudWxsO1xuXHRpZih0eXBlb2YgTSA9PSBcInN0cmluZ1wiKSB7XG5cdFx0QSA9IHNlbGYuZXZhbE1hdGhTdHJpbmcoTSwgdmFycyk7XG5cdH0gZWxzZSB7XG5cdFx0QSA9IE07XG5cdH1cblxuXHR2YXIgcmVzID0gW107XG5cblx0QS5tYXAoZnVuY3Rpb24ocm93LCByb3dJbmRleCkge1xuXHRcdGlmKEFycmF5LmlzQXJyYXkocm93KSkge1xuXHRcdFx0cmVzLnB1c2goW10pO1xuXHRcdFx0cm93Lm1hcChmdW5jdGlvbih2YWwsIGNvbEluZGV4KSB7XG5cdFx0XHRcdGlmKHR5cGVvZiB2YWwgPT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRcdHJlc1tyb3dJbmRleF0ucHVzaChzZWxmLmV2YWxNYXRoU3RyaW5nKHZhbCwgdmFycykpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJlc1tyb3dJbmRleF0ucHVzaCh2YWwpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYodHlwZW9mIHJvdyA9PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdHJlcy5wdXNoKHNlbGYuZXZhbE1hdGhTdHJpbmcocm93LCB2YXJzKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXMucHVzaChyb3cpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0cmV0dXJuIHJlcztcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5tYXRyaXhIYXNDb21wbGV4RWxlbWVudCA9IGZ1bmN0aW9uKE0pIHtcblx0Zm9yKHZhciByID0gMDsgciA8IE0ubGVuZ3RoOyByKyspIHtcblx0XHR2YXIgcm93ID0gTVtyXTtcblxuXHRcdGlmKHJvdyBpbnN0YW5jZW9mIEFycmF5KSB7XG5cdFx0XHRmb3IodmFyIGMgPSAwOyBjIDwgcm93Lmxlbmd0aDsgYysrKSB7XG5cdFx0XHRcdHZhciBjZWxsID0gcm93W2NdO1xuXG5cdFx0XHRcdGlmKGNlbGwgaW5zdGFuY2VvZiBtYXRoLkNvbXBsZXgpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZihyb3cgaW5zdGFuY2VvZiBtYXRoLkNvbXBsZXgpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG5cblxuLy9cbi8vIE9wdGlvbnM6IHtcbi8vICAgICBtaW5pZnk6ICAgICAgICAgZmFsc2Vcbi8vXHQgICBmaXhlZFdpZHRoOiAgICAgZmFsc2Vcbi8vICAgICBkZWNpbWFsUGxhY2VzOiAgMTQsXG4vLyAgICAgaW90YUNoYXI6ICAgICAgIFwiaVwiXG4vLyB9XG4vL1xuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnN0cmluZ2lmeU1hdHJpeCA9IGZ1bmN0aW9uKE0sIG9wdGlvbnMpIHtcblx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdC8vIG1hdGhqcyBNYXRyaXggdG8gYXJyYXlcblx0dmFyIEEgPSBNLnRvQXJyYXkgPyBNLnRvQXJyYXkoKSA6IE07XG5cblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0dmFyIGZvcmNlQ29tcGxleCA9IGZhbHNlO1xuXHRpZihvcHRpb25zLmZpeGVkV2lkdGgpIHtcblx0XHQvLyBmb3JjZUNvbXBsZXggaWYgbWF0cml4IGhhcyBhdCBsZWFzdCBvbmUgY29tcGxleCBlbGVtZW50XG5cdFx0Zm9yY2VDb21wbGV4ID0gdGhpcy5tYXRyaXhIYXNDb21wbGV4RWxlbWVudChBKTtcblx0fVxuXG5cdHZhciBzdHIgPSBcIlwiO1xuXHRzdHIgKz0gXCJbXCI7XG5cdEEubWFwKGZ1bmN0aW9uKHJvdywgcm93SW5kZXgpIHtcblx0XHRpZihyb3dJbmRleCA+IDApIHtcblx0XHRcdHN0ciArPSBcIixcIjtcblx0XHR9XG5cdFx0aWYoIW9wdGlvbnMubWluaWZ5KSB7XG5cdFx0XHRzdHIgKz0gXCJcXG4gIFwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzdHIgKz0gXCIgXCI7XG5cdFx0fVxuXG5cdFx0aWYocm93IGluc3RhbmNlb2YgQXJyYXkpIHtcblx0XHRcdHN0ciArPSBcIltcIjtcblx0XHRcdHJvdy5tYXAoZnVuY3Rpb24oZWwsIGVsSW5kZXgpIHtcblx0XHRcdFx0aWYoZWxJbmRleCA+IDApIHtcblx0XHRcdFx0XHRzdHIgKz0gXCIsIFwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmKGVsIGluc3RhbmNlb2YgbWF0aC5Db21wbGV4KSB7XG5cdFx0XHRcdFx0c3RyICs9IHNlbGYuZm9ybWF0Q29tcGxleChlbCwgb3B0aW9ucyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aWYoKHR5cGVvZiBlbCA9PSBcIm9iamVjdFwiKSAmJiAoKGVsLm1hdGhqcyAmJiBlbC5tYXRoanMgPT0gXCJDb21wbGV4XCIpIHx8IChlbC50eXBlICYmIGVsLnR5cGUgPT0gXCJDb21wbGV4XCIpKSkge1xuXHRcdFx0XHRcdFx0c3RyICs9IGZvcm1hdENvbXBsZXgyKGVsLnJlLCBlbC5pbSwgb3B0aW9ucyk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGlmKHR5cGVvZiBlbCA9PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0XHRcdC8vIGV4cHJlc3Npb25cblx0XHRcdFx0XHRcdFx0c3RyICs9IGVsO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0aWYoZm9yY2VDb21wbGV4KSB7XG5cdFx0XHRcdFx0XHRcdFx0c3RyICs9IGZvcm1hdENvbXBsZXgyKGVsLCAwLCBvcHRpb25zKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRzdHIgKz0gZm9ybWF0RmxvYXQoZWwsIG9wdGlvbnMpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHN0ciArPSBcIl1cIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYocm93IGluc3RhbmNlb2YgbWF0aC5Db21wbGV4KSB7XG5cdFx0XHRcdHN0ciArPSBzZWxmLmZvcm1hdENvbXBsZXgocm93LCBvcHRpb25zKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmKCh0eXBlb2Ygcm93ID09IFwib2JqZWN0XCIpICYmICgocm93Lm1hdGhqcyAmJiByb3cubWF0aGpzID09IFwiQ29tcGxleFwiKSB8fCAocm93LnR5cGUgJiYgcm93LnR5cGUgPT0gXCJDb21wbGV4XCIpKSkge1xuXHRcdFx0XHRcdHN0ciArPSBmb3JtYXRDb21wbGV4MihlbC5yZSwgZWwuaW0sIG9wdGlvbnMpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmKHR5cGVvZiByb3cgPT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRcdFx0Ly8gZXhwcmVzc2lvblxuXHRcdFx0XHRcdFx0c3RyICs9IHJvdztcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0aWYoZm9yY2VDb21wbGV4KSB7XG5cdFx0XHRcdFx0XHRcdHN0ciArPSBmb3JtYXRDb21wbGV4Mihyb3csIDAsIG9wdGlvbnMpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0c3RyICs9IGZvcm1hdEZsb2F0KHJvdywgb3B0aW9ucyk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblx0aWYoQS5sZW5ndGgpIHtcblx0XHRpZighb3B0aW9ucy5taW5pZnkpIHtcblx0XHRcdHN0ciArPSBcIlxcblwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzdHIgKz0gXCIgXCI7XG5cdFx0fVxuXHR9XG5cdHN0ciArPSBcIl1cIjtcblxuXHRyZXR1cm4gc3RyO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUubWF0cml4UmUgPSBmdW5jdGlvbihVKSB7XG5cdHZhciByZXMgPSBbXTtcblx0Zm9yKHZhciByID0gMDsgciA8IFUubGVuZ3RoOyByKyspIHtcblx0XHR2YXIgcm93ID0gVVtyXTtcblx0XHRpZihBcnJheS5pc0FycmF5KHJvdykpIHtcblx0XHRcdHZhciBuZXdSb3cgPSBbXTtcblx0XHRcdGZvcih2YXIgYyA9IDA7IGMgPCByb3cubGVuZ3RoOyBjKyspIHtcblx0XHRcdFx0aWYodHlwZW9mIHJvd1tjXSA9PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0bmV3Um93LnB1c2gocm93W2NdLnJlKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRuZXdSb3cucHVzaChyb3dbY10pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXMucHVzaChuZXdSb3cpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZih0eXBlb2Ygcm93ID09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0bmV3Um93LnB1c2gocm93LnJlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG5ld1Jvdy5wdXNoKHJvdyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJlcztcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5tYXRyaXhJbSA9IGZ1bmN0aW9uKFUpIHtcblx0dmFyIHJlcyA9IFtdO1xuXHRmb3IodmFyIHIgPSAwOyByIDwgVS5sZW5ndGg7IHIrKykge1xuXHRcdHZhciByb3cgPSBVW3JdO1xuXHRcdGlmKEFycmF5LmlzQXJyYXkocm93KSkge1xuXHRcdFx0dmFyIG5ld1JvdyA9IFtdO1xuXHRcdFx0Zm9yKHZhciBjID0gMDsgYyA8IHJvdy5sZW5ndGg7IGMrKykge1xuXHRcdFx0XHRpZih0eXBlb2Ygcm93W2NdID09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRuZXdSb3cucHVzaChyb3dbY10uaW0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG5ld1Jvdy5wdXNoKDApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXMucHVzaChuZXdSb3cpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZih0eXBlb2Ygcm93ID09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0bmV3Um93LnB1c2gocm93LmltKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG5ld1Jvdy5wdXNoKDApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXM7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUubWF0cml4QWJzID0gZnVuY3Rpb24oVSkge1xuXHR2YXIgcmVzID0gW107XG5cdGZvcih2YXIgciA9IDA7IHIgPCBVLmxlbmd0aDsgcisrKSB7XG5cdFx0dmFyIHJvdyA9IFVbcl07XG5cdFx0aWYoQXJyYXkuaXNBcnJheShyb3cpKSB7XG5cdFx0XHR2YXIgbmV3Um93ID0gW107XG5cdFx0XHRmb3IodmFyIGMgPSAwOyBjIDwgcm93Lmxlbmd0aDsgYysrKSB7XG5cdFx0XHRcdG5ld1Jvdy5wdXNoKG1hdGguYWJzKHJvd1tjXSkpO1xuXHRcdFx0fVxuXHRcdFx0cmVzLnB1c2gobmV3Um93KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVzLnB1c2gobWF0aC5hYnMocm93KSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJlcztcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5tYXRyaXhBcmcgPSBmdW5jdGlvbihVKSB7XG5cdHZhciByZXMgPSBbXTtcblx0Zm9yKHZhciByID0gMDsgciA8IFUubGVuZ3RoOyByKyspIHtcblx0XHR2YXIgcm93ID0gVVtyXTtcblx0XHRpZihBcnJheS5pc0FycmF5KHJvdykpIHtcblx0XHRcdHZhciBuZXdSb3cgPSBbXTtcblx0XHRcdGZvcih2YXIgYyA9IDA7IGMgPCByb3cubGVuZ3RoOyBjKyspIHtcblx0XHRcdFx0bmV3Um93LnB1c2gobWF0aC5hcmcocm93W2NdKSk7XG5cdFx0XHR9XG5cdFx0XHRyZXMucHVzaChuZXdSb3cpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXMucHVzaChtYXRoLmFyZyhyb3cpKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVzO1xufTtcblxuXG4vL1xuLy8gY29tYmluZUxpc3QgaXMgYXJyYXkgb2Ygb2JqZWN0czpcbi8vXG4vLyB7XG4vLyAgICAgY2lyY3VpdDogPFF1YW50dW1DaXJjdWl0PlxuLy8gICAgIHdpcmVzOiBbMCwgMSwgMl0gLy8gYXJyYXkgb2YgZGVzdGluYXRpb24gcXViaXRzIChmb3IgZWFjaCB3aXJlIGluIGdpdmVuIGNpcmN1aXQpXG4vLyB9XG4vL1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuc2V0Q29tYmluZWRTdGF0ZSA9IGZ1bmN0aW9uKGNvbWJpbmVMaXN0KSB7XG5cdHZhciBuZXdTdGF0ZSA9IHt9O1xuXHR2YXIgbmV3U3RhdGVCaXRzID0gMDtcblx0dmFyIHRvdGFsUXViaXRzID0gMDtcblx0Zm9yKHZhciBpdGVtSW5kZXggPSAwOyBpdGVtSW5kZXggPCBjb21iaW5lTGlzdC5sZW5ndGg7IGl0ZW1JbmRleCsrKSB7XG5cdFx0dmFyIGl0ZW0gPSBjb21iaW5lTGlzdFtpdGVtSW5kZXhdO1xuXHRcdC8vIGNhbGN1bGF0ZSBudW1iZXIgb2YgcXViaXRzIGJhc2VkIG9uIHdpcmVNYXBcblx0XHRpdGVtLndpcmVzLm1hcChmdW5jdGlvbihkZXN0KSB7XG5cdFx0XHRpZihkZXN0ICsgMSA+IHRvdGFsUXViaXRzKSB7XG5cdFx0XHRcdHRvdGFsUXViaXRzID0gZGVzdCArIDE7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHR2YXIgYml0TWFwcyA9IFtdO1xuXHRmb3IodmFyIGl0ZW1JbmRleCA9IDA7IGl0ZW1JbmRleCA8IGNvbWJpbmVMaXN0Lmxlbmd0aDsgaXRlbUluZGV4KyspIHtcblx0XHR2YXIgaXRlbSA9IGNvbWJpbmVMaXN0W2l0ZW1JbmRleF07XG5cblx0XHR2YXIgY21hcCA9IFtdO1xuXHRcdGl0ZW0ud2lyZXMubWFwKGZ1bmN0aW9uKGRlc3QsIHNvdXJjZSkge1xuXHRcdFx0Y21hcC5wdXNoKHtcblx0XHRcdFx0YW5kOiAxIDw8ICgodG90YWxRdWJpdHMgLSAxKSAtIGRlc3QpLFxuXHRcdFx0XHRvcjogMSA8PCAoKGl0ZW0uY2lyY3VpdC5udW1RdWJpdHMgLSAxKSAtIHNvdXJjZSlcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0Yml0TWFwcy5wdXNoKGNtYXApO1xuXHR9XG5cblx0dmFyIG4zID0gMSA8PCB0b3RhbFF1Yml0cztcblx0Zm9yKHZhciBhMyA9IDA7IGEzIDwgbjM7IGEzKyspIHtcblx0XHR2YXIgczMgPSBudWxsO1xuXHRcdGZvcih2YXIgaXRlbUluZGV4ID0gMDsgaXRlbUluZGV4IDwgY29tYmluZUxpc3QubGVuZ3RoOyBpdGVtSW5kZXgrKykge1xuXHRcdFx0dmFyIG1hcCA9IGJpdE1hcHNbaXRlbUluZGV4XTtcblxuXHRcdFx0dmFyIGExID0gMDtcblx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBtYXAubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYoYTMgJiBtYXBbaV0uYW5kKSB7XG5cdFx0XHRcdFx0YTEgfD0gbWFwW2ldLm9yO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHZhciBpdGVtID0gY29tYmluZUxpc3RbaXRlbUluZGV4XTtcblx0XHRcdHZhciBzMSA9IGl0ZW0uY2lyY3VpdC5zdGF0ZVthMV07XG5cdFx0XHRpZihzMSkge1xuXHRcdFx0XHRpZihzMyA9PSBudWxsKSB7XG5cdFx0XHRcdFx0czMgPSBzMTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzMyA9IG1hdGgubXVsdGlwbHkoczEsIHMzKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0czMgPSBtYXRoLmNvbXBsZXgoMCwgMCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYoczMgJiYgKHMzLnJlIHx8IHMzLmltKSkge1xuXHRcdFx0bmV3U3RhdGVbYTNdID0gczM7XG5cdFx0XHRuZXdTdGF0ZUJpdHMgfD0gYTM7XG5cdFx0fVxuXHR9XG5cblx0dGhpcy5yZXNldFN0YXRlKCk7XG5cdC8vIGV4cGFuZCBjaXJjdWl0IGlmIG5lZWRlZFxuXHRpZih0aGlzLm51bVF1Yml0cyA8IHRvdGFsUXViaXRzKSB7XG5cdFx0dGhpcy5udW1RdWJpdHMgPSB0b3RhbFF1Yml0cztcblxuXHRcdHdoaWxlKHRoaXMuZ2F0ZXMubGVuZ3RoIDwgdGhpcy5udW1RdWJpdHMpIHtcblx0XHRcdHRoaXMuZ2F0ZXMucHVzaChbXSk7XG5cdFx0fVxuXG5cdFx0dmFyIG51bUNvbHMgPSB0aGlzLm51bUNvbHMoKTtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5nYXRlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0d2hpbGUodGhpcy5nYXRlc1tpXS5sZW5ndGggPCBudW1Db2xzKSB7XG5cdFx0XHRcdHRoaXMuZ2F0ZXNbaV0ucHVzaChudWxsKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHR0aGlzLnN0YXRlID0gbmV3U3RhdGU7XG5cdHRoaXMuc3RhdGVCaXRzID0gbmV3U3RhdGVCaXRzO1xuXG5cdGlmKHRoaXMuc3RhdGVCaXRzID09IDAgJiYgT2JqZWN0LmtleXModGhpcy5zdGF0ZSkubGVuZ3RoID09IDApIHtcblx0XHR0aGlzLnN0YXRlW1wiMFwiXSA9IG1hdGguY29tcGxleCgxLCAwKTtcblx0fVxufTtcblxuLy9cbi8vIENvbWJpbmVzIHN0YXRlIHZlY3RvcnMgb2YgdHdvIGV2YWx1YXRlZCBjaXJjdWl0cyBhbmQgc3RvcmVzIHJlc3VsdGluZyB2ZWN0b3IgaW50byB0aGlzLlxuLy9cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5fc2V0Q29tYmluZWRTdGF0ZSA9IGZ1bmN0aW9uKGMxLCBjMiwgb3B0aW9ucykge1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR2YXIgcTEgPSBjMS5udW1RdWJpdHM7XG5cdHZhciBxMiA9IGMyLm51bVF1Yml0cztcblxuXHQvLyBjcmVhdGUgd2lyZU1hcCBpZiBub3QgcHJvdmlkZWRcblx0aWYoIW9wdGlvbnMud2lyZU1hcCkge1xuXHRcdG9wdGlvbnMud2lyZU1hcCA9IHtcblx0XHRcdGMxOiBbXSxcblx0XHRcdGMyOiBbXVxuXHRcdH1cblxuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBxMTsgaSsrKSB7XG5cdFx0XHRvcHRpb25zLndpcmVNYXAuYzEucHVzaChpKTtcblx0XHR9XG5cblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgcTI7IGkrKykge1xuXHRcdFx0b3B0aW9ucy53aXJlTWFwLmMyLnB1c2goaSArIHExKTtcblx0XHR9XG5cdH1cblxuXHQvLyBjYWxjdWxhdGUgbnVtYmVyIG9mIHF1Yml0cyBiYXNlZCBvbiB3aXJlTWFwXG5cdHZhciBxMyA9IDA7XG5cdG9wdGlvbnMud2lyZU1hcC5jMS5tYXAoZnVuY3Rpb24oZGVzdCkge1xuXHRcdGlmKGRlc3QgKyAxID4gcTMpIHtcblx0XHRcdHEzID0gZGVzdCArIDE7XG5cdFx0fVxuXHR9KTtcblx0b3B0aW9ucy53aXJlTWFwLmMyLm1hcChmdW5jdGlvbihkZXN0KSB7XG5cdFx0aWYoZGVzdCArIDEgPiBxMykge1xuXHRcdFx0cTMgPSBkZXN0ICsgMTtcblx0XHR9XG5cdH0pO1xuXG5cdC8vIGNyZWF0ZSBiaXQgbWFwIGZvciBjaXJjdWl0IDFcblx0dmFyIGMxbWFwID0gW107XG5cdG9wdGlvbnMud2lyZU1hcC5jMS5tYXAoZnVuY3Rpb24oZGVzdCwgc291cmNlKSB7XG5cdFx0YzFtYXAucHVzaCh7IGFuZDogMSA8PCAoKHEzIC0gMSkgLSBkZXN0KSwgb3I6IDEgPDwgKChxMSAtIDEpIC0gc291cmNlKSB9KTtcblx0fSk7XG5cblx0Ly8gY3JlYXRlIGJpdCBtYXAgZm9yIGNpcmN1aXQgMlxuXHR2YXIgYzJtYXAgPSBbXTtcblx0b3B0aW9ucy53aXJlTWFwLmMyLm1hcChmdW5jdGlvbihkZXN0LCBzb3VyY2UpIHtcblx0XHRjMm1hcC5wdXNoKHsgYW5kOiAxIDw8ICgocTMgLSAxKSAtIGRlc3QpLCBvcjogMSA8PCAoKHEyIC0gMSkgLSBzb3VyY2UpIH0pO1xuXHR9KTtcblxuXHR2YXIgdW51c2VkID0gMDtcblx0Zm9yKHZhciBpID0gMDsgaSA8IHEzOyBpKyspIHtcblx0XHRpZihvcHRpb25zLndpcmVNYXAuYzEuaW5kZXhPZihpKSA8IDAgJiYgb3B0aW9ucy53aXJlTWFwLmMyLmluZGV4T2YoaSkgPCAwKSB7XG5cdFx0XHR1bnVzZWQgfD0gMSA8PCAoKHEzIC0gMSkgLSBpKTtcblx0XHR9XG5cdH1cblxuXHR2YXIgbmV3U3RhdGUgPSB7fTtcblx0dmFyIG5ld1N0YXRlQml0cyA9IDA7XG5cblx0dmFyIG4zID0gMSA8PCBxMztcblx0Zm9yKHZhciBhMyA9IDA7IGEzIDwgbjM7IGEzKyspIHtcblx0XHRpZighKGEzICYgdW51c2VkKSkge1xuXHRcdFx0dmFyIGExID0gMDtcblx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBjMW1hcC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZihhMyAmIGMxbWFwW2ldLmFuZCkgYTEgfD0gYzFtYXBbaV0ub3I7XG5cdFx0XHR9XG5cblx0XHRcdHZhciBhMiA9IDA7XG5cdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgYzJtYXAubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYoYTMgJiBjMm1hcFtpXS5hbmQpIGEyIHw9IGMybWFwW2ldLm9yO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgczEgPSBjMS5zdGF0ZVthMV07XG5cdFx0XHRpZihzMSkge1xuXHRcdFx0XHR2YXIgczIgPSBjMi5zdGF0ZVthMl07XG5cdFx0XHRcdGlmKHMyKSB7XG5cdFx0XHRcdFx0dmFyIHMzID0gbWF0aC5tdWx0aXBseShzMSwgczIpO1xuXHRcdFx0XHRcdGlmKHMzLnJlIHx8IHMzLmltKSB7XG5cdFx0XHRcdFx0XHRuZXdTdGF0ZVthM10gPSBzMztcblx0XHRcdFx0XHRcdG5ld1N0YXRlQml0cyB8PSBhMztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHR0aGlzLnJlc2V0U3RhdGUoKTtcblx0Ly8gZXhwYW5kIGNpcmN1aXQgaWYgbmVlZGVkXG5cdGlmKHRoaXMubnVtUXViaXRzIDwgcTMpIHtcblx0XHR0aGlzLm51bVF1Yml0cyA9IHEzO1xuXG5cdFx0d2hpbGUodGhpcy5nYXRlcy5sZW5ndGggPCB0aGlzLm51bVF1Yml0cykge1xuXHRcdFx0dGhpcy5nYXRlcy5wdXNoKFtdKTtcblx0XHR9XG5cdFx0dmFyIG51bUNvbHMgPSB0aGlzLm51bUNvbHMoKTtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5nYXRlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0d2hpbGUodGhpcy5nYXRlc1tpXS5sZW5ndGggPCBudW1Db2xzKSB7XG5cdFx0XHRcdHRoaXMuZ2F0ZXNbaV0ucHVzaChudWxsKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHR0aGlzLnN0YXRlID0gbmV3U3RhdGU7XG5cdHRoaXMuc3RhdGVCaXRzID0gbmV3U3RhdGVCaXRzO1xuXG5cdGlmKHRoaXMuc3RhdGVCaXRzID09IDAgJiYgT2JqZWN0LmtleXModGhpcy5zdGF0ZSkubGVuZ3RoID09IDApIHtcblx0XHR0aGlzLnN0YXRlW1wiMFwiXSA9IG1hdGguY29tcGxleCgxLCAwKTtcblx0fVxufTtcblxuLy8gQWRkIHF1Yml0cyBwcmVzZXJ2aW5nIHN0YXRlXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuYXBwZW5kUXViaXRzID0gZnVuY3Rpb24obnVtUXViaXRzKSB7XG5cdHZhciBjID0gbmV3IFF1YW50dW1DaXJjdWl0KG51bVF1Yml0cyk7XG5cdHRoaXMuX3NldENvbWJpbmVkU3RhdGUodGhpcywgYyk7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUubnVtQW1wbGl0dWRlcyA9IGZ1bmN0aW9uKG9ubHlQb3NzaWJsZSkge1xuXHRpZihvbmx5UG9zc2libGUpIHtcblx0XHR2YXIgcG9zc2libGVDb3VudCA9IDA7XG5cdFx0Zm9yKHZhciBpcyBpbiB0aGlzLnN0YXRlKSB7XG5cdFx0XHR2YXIgc3RhdGUgPSBtYXRoLnJvdW5kKHRoaXMuc3RhdGVbaXNdLCAxNCk7XG5cdFx0XHRpZihzdGF0ZS5yZSB8fCBzdGF0ZS5pbSkge1xuXHRcdFx0XHRwb3NzaWJsZUNvdW50Kys7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBwb3NzaWJsZUNvdW50O1xuXHR9XG5cblx0cmV0dXJuIG1hdGgucG93KDIsIHRoaXMubnVtUXViaXRzKTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5udW1Db2xzID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLmdhdGVzLmxlbmd0aCA/IHRoaXMuZ2F0ZXNbMF0ubGVuZ3RoIDogMDtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5udW1HYXRlcyA9IGZ1bmN0aW9uKGRlY29tcG9zZSkge1xuXHR2YXIgY2lyY3VpdCA9IG51bGw7XG5cdGlmKGRlY29tcG9zZSkge1xuXHRcdGNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0XHRjaXJjdWl0LmxvYWQodGhpcy5zYXZlKHRydWUpKTtcblx0fSBlbHNlIHtcblx0XHRjaXJjdWl0ID0gdGhpcztcblx0fVxuXG5cdHZhciBudW1HYXRlcyA9IDA7XG5cdHZhciBudW1Db2xzID0gY2lyY3VpdC5udW1Db2xzKCk7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgY2lyY3VpdC5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSBjaXJjdWl0LmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmNvbm5lY3RvciA9PSAwKSB7XG5cdFx0XHRcdG51bUdhdGVzKys7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG51bUdhdGVzO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmlzRW1wdHlDZWxsID0gZnVuY3Rpb24oY29sLCB3aXJlKSB7XG5cdGlmKHRoaXMuZ2F0ZXNbd2lyZV0gJiYgdGhpcy5nYXRlc1t3aXJlXVtjb2xdKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Zm9yKHZhciB3ID0gMDsgdyA8IHRoaXMubnVtUXViaXRzOyB3KyspIHtcblx0XHR2YXIgZ2F0ZSA9IHRoaXMuZ2V0R2F0ZUF0KGNvbCwgdyk7XG5cdFx0aWYoZ2F0ZSkge1xuXHRcdFx0aWYoZ2F0ZS5uYW1lID09IFwibWVhc3VyZVwiIHx8IChnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcpIHx8IChNYXRoLm1pbi5hcHBseShudWxsLCBnYXRlLndpcmVzKSA8IHdpcmUgJiYgTWF0aC5tYXguYXBwbHkobnVsbCwgZ2F0ZS53aXJlcykgPiB3aXJlKSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRydWU7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuaXNFbXB0eVBsYWNlID0gZnVuY3Rpb24oY29sLCB3aXJlcywgdXNpbmdDcmVncykge1xuXHR2YXIgbWluV2lyZSA9IE1hdGgubWluLmFwcGx5KG51bGwsIHdpcmVzKTtcblx0dmFyIG1heFdpcmUgPSBNYXRoLm1heC5hcHBseShudWxsLCB3aXJlcyk7XG5cblx0aWYodXNpbmdDcmVncykge1xuXHRcdHZhciBteCA9IHRoaXMubnVtUXViaXRzIC0gMTtcblx0XHRpZihteCA+IG1heFdpcmUpIHtcblx0XHRcdG1heFdpcmUgPSBteDtcblx0XHR9XG5cdH1cblxuXHR2YXIgYWxsRW1wdHkgPSB0cnVlO1xuXHRmb3IodmFyIHdpcmUgPSBtaW5XaXJlOyB3aXJlIDw9IG1heFdpcmU7IHdpcmUrKykge1xuXHRcdGlmKCF0aGlzLmlzRW1wdHlDZWxsKGNvbCwgd2lyZSkpIHtcblx0XHRcdGFsbEVtcHR5ID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGFsbEVtcHR5O1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmxhc3ROb25FbXB0eVBsYWNlID0gZnVuY3Rpb24od2lyZXMsIHVzaW5nQ3JlZ3MpIHtcblx0dmFyIGNvbCA9IHRoaXMubnVtQ29scygpO1xuXHR2YXIgYWxsRW1wdHkgPSB0cnVlO1xuXG5cdHZhciBtaW5XaXJlID0gTWF0aC5taW4uYXBwbHkobnVsbCwgd2lyZXMpO1xuXHR2YXIgbWF4V2lyZSA9IE1hdGgubWF4LmFwcGx5KG51bGwsIHdpcmVzKTtcblxuXHRpZih1c2luZ0NyZWdzKSB7XG5cdFx0dmFyIG14ID0gdGhpcy5udW1RdWJpdHMgLSAxO1xuXHRcdGlmKG14ID4gbWF4V2lyZSkge1xuXHRcdFx0bWF4V2lyZSA9IG14O1xuXHRcdH1cblx0fVxuXG5cdHdoaWxlKGFsbEVtcHR5ICYmIGNvbC0tKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gbWluV2lyZTsgd2lyZSA8PSBtYXhXaXJlOyB3aXJlKyspIHtcblx0XHRcdGlmKCF0aGlzLmlzRW1wdHlDZWxsKGNvbCwgd2lyZSkpIHtcblx0XHRcdFx0YWxsRW1wdHkgPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gY29sO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmluc2VydENvbHVtbiA9IGZ1bmN0aW9uKGNvbEluZGV4KSB7XG5cdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLm51bVF1Yml0czsgaSsrKSB7XG5cdFx0dGhpcy5nYXRlc1tpXS5zcGxpY2UoY29sSW5kZXggfHwgMCwgMCwgbnVsbCk7XG5cdH1cbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5yYW5kb21TdHJpbmcgPSBmdW5jdGlvbihsZW4pIHtcblx0bGVuID0gbGVuIHx8IDE3O1xuXG5cdHZhciB0ZXh0ID0gXCJcIjtcblx0Ly8gbGV0IGZpcnN0IGNoYXIgdG8gYmUgbGV0dGVyXG5cdHZhciBjaGFyc2V0ID0gXCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6XCI7XG5cdHRleHQgKz0gY2hhcnNldC5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY2hhcnNldC5sZW5ndGgpKTtcblxuXHQvLyBvdGhlciBjaGFycyBjYW4gYmUgbGV0dGVycyBhbmQgbnVtYmVyc1xuXHRjaGFyc2V0ICs9IFwiMDEyMzQ1Njc4OVwiO1xuXHRmb3IodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcblx0XHR0ZXh0ICs9IGNoYXJzZXQuY2hhckF0KE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGNoYXJzZXQubGVuZ3RoKSk7XG5cdH1cblxuXHRyZXR1cm4gdGV4dDtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmFkZEdhdGUgPSBmdW5jdGlvbihnYXRlTmFtZSwgY29sdW1uLCB3aXJlcywgb3B0aW9ucykge1xuXHR2YXIgd2lyZUxpc3QgPSBbXTtcblx0aWYoQXJyYXkuaXNBcnJheSh3aXJlcykpIHtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgd2lyZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHdpcmVMaXN0LnB1c2god2lyZXNbaV0pO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHR3aXJlTGlzdC5wdXNoKHdpcmVzKTtcblx0fVxuXG5cdGlmKGNvbHVtbiA8IDApIHtcblx0XHRjb2x1bW4gPSB0aGlzLmxhc3ROb25FbXB0eVBsYWNlKHdpcmVMaXN0LCBnYXRlTmFtZSA9PSBcIm1lYXN1cmVcIiB8fCAob3B0aW9ucyAmJiBvcHRpb25zLmNvbmRpdGlvbiAmJiBvcHRpb25zLmNvbmRpdGlvbi5jcmVnKSkgKyAxO1xuXHR9XG5cblx0dmFyIG51bUNvbm5lY3RvcnMgPSB3aXJlTGlzdC5sZW5ndGg7XG5cdHZhciBpZCA9IHRoaXMucmFuZG9tU3RyaW5nKCk7XG5cdGZvcih2YXIgY29ubmVjdG9yID0gMDsgY29ubmVjdG9yIDwgbnVtQ29ubmVjdG9yczsgY29ubmVjdG9yKyspIHtcblx0XHR2YXIgd2lyZSA9IHdpcmVMaXN0W2Nvbm5lY3Rvcl07XG5cblx0XHRpZigod2lyZSArIDEpID4gdGhpcy5udW1RdWJpdHMpIHtcblx0XHRcdHRoaXMubnVtUXViaXRzID0gd2lyZSArIDE7XG5cdFx0fVxuXG5cdFx0d2hpbGUodGhpcy5nYXRlcy5sZW5ndGggPCB0aGlzLm51bVF1Yml0cykge1xuXHRcdFx0dGhpcy5nYXRlcy5wdXNoKFtdKTtcblx0XHR9XG5cblx0XHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHRcdGlmKChjb2x1bW4gKyAxKSA+IG51bUNvbHMpIHtcblx0XHRcdG51bUNvbHMgPSBjb2x1bW4gKyAxO1xuXHRcdH1cblxuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLmdhdGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR3aGlsZSh0aGlzLmdhdGVzW2ldLmxlbmd0aCA8IG51bUNvbHMpIHtcblx0XHRcdFx0dGhpcy5nYXRlc1tpXS5wdXNoKG51bGwpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHZhciBnYXRlID0ge1xuXHRcdFx0aWQ6IGlkLFxuXHRcdFx0bmFtZTogZ2F0ZU5hbWUsXG5cdFx0XHRjb25uZWN0b3I6IGNvbm5lY3Rvcixcblx0XHRcdG9wdGlvbnM6IHt9XG5cdFx0fVxuXG5cdFx0aWYob3B0aW9ucykge1xuXHRcdFx0Z2F0ZS5vcHRpb25zID0gb3B0aW9ucztcblxuXHRcdFx0Ly8gZXh0ZW5kIGNyZWcgaWYgcmVxdWlyZWRcblx0XHRcdGlmKG9wdGlvbnMuY3JlZyAmJiBvcHRpb25zLmNyZWdbXCJuYW1lXCJdICYmIHR5cGVvZiBvcHRpb25zLmNyZWdbXCJiaXRcIl0gIT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0XHR2YXIgY3JlZ0JpdCA9IHBhcnNlSW50KG9wdGlvbnMuY3JlZy5iaXQgfHwgMCk7XG5cdFx0XHRcdGlmKGlzTmFOKGNyZWdCaXQpKSB7XG5cdFx0XHRcdFx0Y3JlZ0JpdCA9IDA7XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFyIGV4aXN0aW5nQ3JlZyA9IHRoaXMuY3JlZ3Nbb3B0aW9ucy5jcmVnLm5hbWVdIHx8IFtdO1xuXHRcdFx0XHR2YXIgY3VycmVudFZhbHVlID0gKGV4aXN0aW5nQ3JlZy5sZW5ndGggPiBjcmVnQml0KSA/IGV4aXN0aW5nQ3JlZ1tvcHRpb25zLmNyZWcuYml0XSA6IDA7XG5cdFx0XHRcdHRoaXMuc2V0Q3JlZ0JpdChvcHRpb25zLmNyZWcubmFtZSwgY3JlZ0JpdCwgY3VycmVudFZhbHVlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLmdhdGVzW3dpcmVdW2NvbHVtbl0gPSBnYXRlO1xuXHR9XG5cdHJldHVybiBpZDtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5hcHBlbmRHYXRlID0gZnVuY3Rpb24oZ2F0ZU5hbWUsIHdpcmVzLCBvcHRpb25zKSB7XG5cdHJldHVybiB0aGlzLmFkZEdhdGUoZ2F0ZU5hbWUsIC0xLCB3aXJlcywgb3B0aW9ucyk7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5pbnNlcnRHYXRlID0gZnVuY3Rpb24oZ2F0ZU5hbWUsIGNvbHVtbiwgd2lyZXMsIG9wdGlvbnMpIHtcblx0dmFyIHdpcmVMaXN0ID0gW107XG5cdGlmKEFycmF5LmlzQXJyYXkod2lyZXMpKSB7XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IHdpcmVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR3aXJlTGlzdC5wdXNoKHdpcmVzW2ldKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0d2lyZUxpc3QucHVzaCh3aXJlcyk7XG5cdH1cblxuXHRpZihjb2x1bW4gPCAwKSB7XG5cdFx0Y29sdW1uID0gdGhpcy5sYXN0Tm9uRW1wdHlQbGFjZSh3aXJlTGlzdCwgKCEhZ2F0ZU5hbWUgJiYgZ2F0ZU5hbWUgPT0gXCJtZWFzdXJlXCIpIHx8IChvcHRpb25zICYmIG9wdGlvbnMuY29uZGl0aW9uICYmIG9wdGlvbnMuY29uZGl0aW9uLmNyZWcpKSArIDE7XG5cdH1cblxuXHR2YXIgc3BhY2VJc0VtcHR5ID0gdHJ1ZTtcblx0dmFyIG51bUNvbm5lY3RvcnMgPSB3aXJlTGlzdC5sZW5ndGg7XG5cdGZvcih2YXIgY29ubmVjdG9yID0gMDsgY29ubmVjdG9yIDwgbnVtQ29ubmVjdG9yczsgY29ubmVjdG9yKyspIHtcblx0XHR2YXIgd2lyZSA9IHdpcmVMaXN0W2Nvbm5lY3Rvcl07XG5cblx0XHRpZigod2lyZSArIDEpID4gdGhpcy5udW1RdWJpdHMpIHtcblx0XHRcdHRoaXMubnVtUXViaXRzID0gd2lyZSArIDE7XG5cdFx0fVxuXG5cdFx0d2hpbGUodGhpcy5nYXRlcy5sZW5ndGggPCB0aGlzLm51bVF1Yml0cykge1xuXHRcdFx0dGhpcy5nYXRlcy5wdXNoKFtdKTtcblx0XHR9XG5cblx0XHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHRcdGlmKChjb2x1bW4gKyAxKSA+IG51bUNvbHMpIHtcblx0XHRcdG51bUNvbHMgPSBjb2x1bW4gKyAxO1xuXHRcdH1cblxuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLmdhdGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR3aGlsZSh0aGlzLmdhdGVzW2ldLmxlbmd0aCA8IG51bUNvbHMpIHtcblx0XHRcdFx0dGhpcy5nYXRlc1tpXS5wdXNoKG51bGwpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmKCF0aGlzLmlzRW1wdHlQbGFjZShjb2x1bW4sIHdpcmVMaXN0LCAoISFnYXRlTmFtZSAmJiBnYXRlTmFtZSA9PSBcIm1lYXN1cmVcIikgfHwgKG9wdGlvbnMgJiYgb3B0aW9ucy5jb25kaXRpb24gJiYgb3B0aW9ucy5jb25kaXRpb24uY3JlZykpKSB7XG5cdFx0dGhpcy5pbnNlcnRDb2x1bW4oY29sdW1uKTtcblx0fVxuXG5cdHZhciBpZCA9IG51bGw7XG5cdGlmKGdhdGVOYW1lKSB7XG5cdFx0aWQgPSB0aGlzLmFkZEdhdGUoZ2F0ZU5hbWUsIGNvbHVtbiwgd2lyZUxpc3QsIG9wdGlvbnMpO1xuXHR9XG5cdHJldHVybiBpZDtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5pbnNlcnRTcGFjZSA9IGZ1bmN0aW9uKGNvbHVtbiwgd2lyZXMpIHtcblx0cmV0dXJuIHRoaXMuaW5zZXJ0R2F0ZShudWxsLCBjb2x1bW4sIHdpcmVzLCBudWxsKTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnJlbW92ZUdhdGVBdCA9IGZ1bmN0aW9uKGNvbHVtbiwgd2lyZSkge1xuXHRpZighdGhpcy5nYXRlc1t3aXJlXSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHZhciBnYXRlID0gdGhpcy5nYXRlc1t3aXJlXVtjb2x1bW5dO1xuXHRpZighZ2F0ZSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHZhciBpZCA9IGdhdGUuaWQ7XG5cblx0dmFyIG51bVdpcmVzID0gdGhpcy5nYXRlcy5sZW5ndGg7XG5cdGZvcih2YXIgdyA9IDA7IHcgPCBudW1XaXJlczsgdysrKSB7XG5cdFx0dmFyIGNlbGwgPSB0aGlzLmdhdGVzW3ddW2NvbHVtbl07XG5cdFx0aWYoY2VsbCAmJiBjZWxsLmlkID09IGlkKSB7XG5cdFx0XHR0aGlzLmdhdGVzW3ddW2NvbHVtbl0gPSBudWxsO1xuXHRcdH1cblx0fVxufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnJlbW92ZUdhdGUgPSBmdW5jdGlvbihnYXRlSWQpIHtcblx0dmFyIGdhdGVQb3MgPSB0aGlzLmdldEdhdGVQb3NCeUlkKGdhdGVJZCk7XG5cdGlmKCFnYXRlUG9zIHx8IGdhdGVQb3MuY29sIDwgMCB8fCAhZ2F0ZVBvcy53aXJlcy5sZW5ndGgpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLnJlbW92ZUdhdGVBdChnYXRlUG9zLmNvbCwgZ2F0ZVBvcy53aXJlc1swXSk7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5hZGRNZWFzdXJlID0gZnVuY3Rpb24od2lyZSwgY3JlZywgY2JpdCkge1xuXHR0aGlzLmFkZEdhdGUoXCJtZWFzdXJlXCIsIC0xLCB3aXJlLCB7IGNyZWc6IHsgbmFtZTogY3JlZywgYml0OiBjYml0IH0gfSk7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuYXBwZW5kQ2lyY3VpdCA9IGZ1bmN0aW9uKGNpcmN1aXQsIHBhY2spIHtcblx0dmFyIGNvbE9mZnNldCA9IHRoaXMubnVtQ29scygpO1xuXG5cdHZhciBudW1Db2xzID0gY2lyY3VpdC5udW1Db2xzKCk7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgY2lyY3VpdC5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSBjaXJjdWl0LmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmNvbm5lY3RvciA9PSAwKSB7XG5cblx0XHRcdFx0aWYoIXRoaXMuYmFzaWNHYXRlc1tnYXRlLm5hbWVdICYmIGNpcmN1aXQuY3VzdG9tR2F0ZXNbZ2F0ZS5uYW1lXSkge1xuXHRcdFx0XHRcdHRoaXMucmVnaXN0ZXJHYXRlKGdhdGUubmFtZSwgY2lyY3VpdC5jdXN0b21HYXRlc1tnYXRlLm5hbWVdKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMuYWRkR2F0ZShnYXRlLm5hbWUsIGNvbHVtbiArIGNvbE9mZnNldCwgZ2F0ZS53aXJlcywgZ2F0ZS5vcHRpb25zKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cblxuXG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnJlbW92ZVRyYWlsaW5nQ29sdW1ucyA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHRmb3IodmFyIGNvbHVtbiA9IG51bUNvbHMgLSAxOyBjb2x1bW4gPj0gMDsgY29sdW1uLS0pIHtcblx0XHR2YXIgaXNFbXB0eUNvbCA9IHRydWU7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gdGhpcy5nYXRlc1t3aXJlXVtjb2x1bW5dO1xuXHRcdFx0aWYoZ2F0ZSkge1xuXHRcdFx0XHRpc0VtcHR5Q29sID0gZmFsc2U7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmKCFpc0VtcHR5Q29sKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHRoaXMuZ2F0ZXNbd2lyZV0ucG9wKCk7XG5cdFx0fVxuXHR9XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucmVtb3ZlTGVhZGluZ0NvbHVtbnMgPSBmdW5jdGlvbigpIHtcblx0dmFyIGVtcHR5Q291bnQgPSAwO1xuXHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0dmFyIGlzRW1wdHlDb2wgPSB0cnVlO1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IHRoaXMuZ2F0ZXNbd2lyZV1bY29sdW1uXTtcblx0XHRcdGlmKGdhdGUpIHtcblx0XHRcdFx0aXNFbXB0eUNvbCA9IGZhbHNlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZighaXNFbXB0eUNvbCkge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXG5cdFx0ZW1wdHlDb3VudCsrO1xuXHR9XG5cblx0Zm9yKHZhciBpID0gMDsgaSA8IGVtcHR5Q291bnQ7IGkrKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR0aGlzLmdhdGVzW3dpcmVdLnNoaWZ0KCk7XG5cdFx0fVxuXHR9XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucmVtb3ZlVHJhaWxpbmdSb3dzID0gZnVuY3Rpb24oKSB7XG5cdHZhciBudW1Db2xzID0gdGhpcy5udW1Db2xzKCk7XG5cdGZvcih2YXIgd2lyZSA9IHRoaXMubnVtUXViaXRzIC0gMTsgd2lyZSA+PSAwOyB3aXJlLS0pIHtcblx0XHR2YXIgaXNFbXB0eVJvdyA9IHRydWU7XG5cdFx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdFx0dmFyIGdhdGUgPSB0aGlzLmdhdGVzW3dpcmVdW2NvbHVtbl07XG5cdFx0XHRpZihnYXRlKSB7XG5cdFx0XHRcdGlzRW1wdHlSb3cgPSBmYWxzZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYoIWlzRW1wdHlSb3cpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5nYXRlcy5wb3AoKTtcblx0XHR0aGlzLm51bVF1Yml0cy0tO1xuXHR9XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucmVtb3ZlUXViaXQgPSBmdW5jdGlvbih3aXJlKSB7XG5cdGlmKCF0aGlzLmdhdGVzW3dpcmVdKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpcy5yZXNldFN0YXRlKCk7XG5cblx0dmFyIG51bUNvbHMgPSB0aGlzLm51bUNvbHMoKTtcblx0Zm9yKHZhciBjb2wgPSAwOyBjb2wgPCBudW1Db2xzOyBjb2wrKykge1xuXHRcdHRoaXMucmVtb3ZlR2F0ZUF0KGNvbCwgd2lyZSk7XG5cdH1cblxuXHRmb3IodmFyIHcgPSB3aXJlICsgMTsgdyA8IHRoaXMubnVtUXViaXRzOyB3KyspIHtcblx0XHRmb3IodmFyIGNvbCA9IDA7IGNvbCA8IG51bUNvbHM7IGNvbCsrKSB7XG5cdFx0XHR0aGlzLmdhdGVzW3cgLSAxXVtjb2xdID0gdGhpcy5nYXRlc1t3XVtjb2xdO1xuXHRcdH1cblx0fVxuXG5cdHRoaXMuZ2F0ZXMucG9wKCk7XG5cdHRoaXMubnVtUXViaXRzLS07XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5mbGlwVmVydGljYWxseSA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLnJlc2V0U3RhdGUoKTtcblxuXHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHR2YXIgbGFzdFF1Yml0ID0gdGhpcy5udW1RdWJpdHMgLSAxO1xuXHRmb3IodmFyIHcgPSAwOyB3IDwgdGhpcy5udW1RdWJpdHMgLyAyOyB3KyspIHtcblx0XHRmb3IodmFyIGNvbCA9IDA7IGNvbCA8IG51bUNvbHM7IGNvbCsrKSB7XG5cdFx0XHR2YXIgdG1wID0gdGhpcy5nYXRlc1t3XVtjb2xdO1xuXHRcdFx0dGhpcy5nYXRlc1t3XVtjb2xdID0gdGhpcy5nYXRlc1tsYXN0UXViaXQgLSB3XVtjb2xdO1xuXHRcdFx0dGhpcy5nYXRlc1tsYXN0UXViaXQgLSB3XVtjb2xdID0gdG1wO1xuXHRcdH1cblx0fVxufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmZsaXBIb3Jpem9udGFsbHkgPSBmdW5jdGlvbigpIHtcblx0dGhpcy5yZXNldFN0YXRlKCk7XG5cblx0dmFyIG51bUNvbHMgPSB0aGlzLm51bUNvbHMoKTtcblx0dmFyIGxhc3RDb2wgPSBudW1Db2xzIC0gMTtcblx0Zm9yKHZhciB3ID0gMDsgdyA8IHRoaXMubnVtUXViaXRzOyB3KyspIHtcblx0XHRmb3IodmFyIGNvbCA9IDA7IGNvbCA8IG51bUNvbHMgLyAyOyBjb2wrKykge1xuXHRcdFx0dmFyIHRtcCA9IHRoaXMuZ2F0ZXNbd11bY29sXTtcblx0XHRcdHRoaXMuZ2F0ZXNbd11bY29sXSA9IHRoaXMuZ2F0ZXNbd11bbGFzdENvbCAtIGNvbF07XG5cdFx0XHR0aGlzLmdhdGVzW3ddW2xhc3RDb2wgLSBjb2xdID0gdG1wO1xuXHRcdH1cblx0fVxufTtcblxuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5hcHBseVRyYW5zZm9ybSA9IGZ1bmN0aW9uKFUsIHF1Yml0cykge1xuXHR2YXIgbmV3U3RhdGUgPSB7fTtcblx0dmFyIG5ld1N0YXRlQml0cyA9IDA7XG5cblx0Ly8gY2xvbmUgbGlzdCBvZiB3aXJlcyB0byBpdHNlbGYgKHJlbW92ZSByZWZlcmVuY2UgdG8gb3JpZ2luYWwgYXJyYXkpXG5cdHF1Yml0cyA9IHF1Yml0cy5zbGljZSgwKTtcblxuXHQvLyByZXZlcnNlIGJpdCBvcmRlclxuXHRpZih0aGlzLnJldmVyc2VCaXRPcmRlcikge1xuXHRcdC8vIGNvbnZlcnQgaW5kZXggZnJvbSAwLWJhc2VkIHRvIGVuZC1iYXNlZFxuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBxdWJpdHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHF1Yml0c1tpXSA9ICh0aGlzLm51bVF1Yml0cyAtIDEpIC0gcXViaXRzW2ldO1xuXHRcdH1cblx0fVxuXG5cdHF1Yml0cy5yZXZlcnNlKCk7XG5cblx0Ly8gbGlzdCBvZiB3aXJlcyBub3QgdXNlZCBieSB0aGlzIGdhdGVcblx0dmFyIHVudXNlZCA9IFtdO1xuXHRmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5udW1RdWJpdHM7IGkrKykge1xuXHRcdGlmKHF1Yml0cy5pbmRleE9mKGkpIDwgMCkge1xuXHRcdFx0dW51c2VkLnB1c2goaSk7XG5cdFx0fVxuXHR9XG5cblx0dmFyIHVudXNlZENvdW50ID0gdW51c2VkLmxlbmd0aDtcblx0dmFyIHVudXNlZFNwYWNlID0gKDEgPDwgdW51c2VkQ291bnQpO1xuXG5cdGZ1bmN0aW9uIGdldEVsTWFzayhlbCkge1xuXHRcdHZhciByZXMgPSAwO1xuXHRcdHF1Yml0cy5tYXAoZnVuY3Rpb24ocXViaXQsIGluZGV4KSB7XG5cdFx0XHRpZihlbCAmICgxIDw8IGluZGV4KSkge1xuXHRcdFx0XHRyZXMgfD0gKDEgPDwgcXViaXQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiByZXM7XG5cdH1cblxuXHRmdW5jdGlvbiBnZXRJbmNNYXNrKCkge1xuXHRcdHZhciByZXMgPSAwO1xuXHRcdHF1Yml0cy5tYXAoZnVuY3Rpb24ocXViaXQsIGluZGV4KSB7XG5cdFx0XHRyZXMgfD0gKDEgPDwgcXViaXQpO1xuXHRcdH0pO1xuXHRcdHJldHVybiByZXMgKyAxO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0Tm90TWFzaygpIHtcblx0XHR2YXIgcmVzID0gMDtcblx0XHR1bnVzZWQubWFwKGZ1bmN0aW9uKHF1Yml0LCBpbmRleCkge1xuXHRcdFx0cmVzIHw9ICgxIDw8IHF1Yml0KTtcblx0XHR9KTtcblx0XHRyZXR1cm4gcmVzO1xuXHR9XG5cblx0dmFyIFpFUk8gPSBtYXRoLmNvbXBsZXgoMCwgMCk7XG5cblx0Zm9yKHZhciBlbHJvdyA9IDA7IGVscm93IDwgVS5sZW5ndGg7IGVscm93KyspIHtcblxuXHRcdHZhciByb3dtYXNrID0gZ2V0RWxNYXNrKGVscm93KTtcblxuXHRcdGZvcih2YXIgZWxjb2wgPSAwOyBlbGNvbCA8IFVbZWxyb3ddLmxlbmd0aDsgZWxjb2wrKykge1xuXG5cdFx0XHR2YXIgY29sbWFzayA9IGdldEVsTWFzayhlbGNvbCk7XG5cblx0XHRcdGlmKCh0aGlzLnN0YXRlQml0cyAmIGNvbG1hc2spID09IGNvbG1hc2spIHtcblxuXHRcdFx0XHR2YXIgdXZhbCA9IFVbZWxyb3ddW2VsY29sXTtcblx0XHRcdFx0aWYodXZhbCkge1xuXHRcdFx0XHRcdHZhciByb3cgPSByb3dtYXNrO1xuXHRcdFx0XHRcdHZhciBjb2wgPSBjb2xtYXNrO1xuXG5cdFx0XHRcdFx0dmFyIGNvdW50ZXIgPSB1bnVzZWRTcGFjZTtcblx0XHRcdFx0XHR2YXIgY291bnRlcm1hc2sgPSBnZXRFbE1hc2soMCk7XG5cdFx0XHRcdFx0dmFyIGluY21hc2sgPSBnZXRJbmNNYXNrKCk7XG5cdFx0XHRcdFx0dmFyIG5vdG1hc2sgPSBnZXROb3RNYXNrKCk7XG5cdFx0XHRcdFx0dmFyIHRvb3RobGVzcyA9IGNvdW50ZXJtYXNrO1xuXHRcdFx0XHRcdHdoaWxlKGNvdW50ZXItLSkge1xuXHRcdFx0XHRcdFx0dmFyIHN0YXRlID0gdGhpcy5zdGF0ZVtjb2xdO1xuXHRcdFx0XHRcdFx0aWYoc3RhdGUpIHtcblx0XHRcdFx0XHRcdFx0cm93ID0gdG9vdGhsZXNzIHwgcm93bWFzaztcblxuXHRcdFx0XHRcdFx0XHRpZih1dmFsID09IDEpIHtcblx0XHRcdFx0XHRcdFx0XHRuZXdTdGF0ZVtyb3ddID0gbWF0aC5hZGQobmV3U3RhdGVbcm93XSB8fCBaRVJPLCBzdGF0ZSk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0bmV3U3RhdGVbcm93XSA9IG1hdGguYWRkKG5ld1N0YXRlW3Jvd10gfHwgWkVSTywgbWF0aC5tdWx0aXBseSh1dmFsLCBzdGF0ZSkpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdG5ld1N0YXRlQml0cyB8PSByb3c7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHRvb3RobGVzcyA9ICh0b290aGxlc3MgKyBpbmNtYXNrKSAmIG5vdG1hc2s7XG5cdFx0XHRcdFx0XHRjb2wgPSB0b290aGxlc3MgfCBjb2xtYXNrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHQvLyByZXBsYWNlIGN1cnJlbnQgc3RhdGUgd2l0aCBuZXcgc3RhdGVcblx0dGhpcy5zdGF0ZSA9IG5ld1N0YXRlO1xuXHR0aGlzLnN0YXRlQml0cyA9IG5ld1N0YXRlQml0cztcblxuXHRpZih0aGlzLnN0YXRlQml0cyA9PSAwICYmIE9iamVjdC5rZXlzKHRoaXMuc3RhdGUpLmxlbmd0aCA9PSAwKSB7XG5cdFx0dGhpcy5zdGF0ZVtcIjBcIl0gPSBtYXRoLmNvbXBsZXgoMSwgMCk7XG5cdH1cbn07XG5cbi8vXG4vLyBgZW5kaWFubmVzc2AgY2FuIGJlOlxuLy8gICAgIG51bGwgLSB0aGlzIGlzIGRlZmF1bHQgYW5kIGRlcGVuZHMgb24gdGhpcy5yZXZlcnNlQml0T3JkZXJcbi8vICAgICBcImJpZ1wiIC0gYmlnIGVuZGlhbiAobGlrZSBSaWdldHRpL3B5UXVpbClcbi8vICAgICBcImxpdHRsZVwiIC0gbGl0dGxlIGVuZGlhbiAobGlrZSBJQk0vUWlza2l0KVxuLy9cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS50cmFuc2Zvcm1NYXRyaXggPSBmdW5jdGlvbih0b3RhbFF1Yml0cywgVSwgdGFyZ2V0UXViaXRzLCBlbmRpYW5uZXNzKSB7XG5cdC8vIGNsb25lIGxpc3Qgb2Ygd2lyZXMgdG8gaXRzZWxmIChyZW1vdmUgcmVmZXJlbmNlIHRvIG9yaWdpbmFsIGFycmF5KVxuXHR0YXJnZXRRdWJpdHMgPSB0YXJnZXRRdWJpdHMuc2xpY2UoMCk7XG5cblx0dmFyIHJldmVyc2VCaXRzID0gZmFsc2U7XG5cdGlmKCFlbmRpYW5uZXNzKSB7XG5cdFx0cmV2ZXJzZUJpdHMgPSAhdGhpcy5yZXZlcnNlQml0T3JkZXI7XG5cdH0gZWxzZSB7XG5cdFx0cmV2ZXJzZUJpdHMgPSBlbmRpYW5uZXNzID09IFwiYmlnXCI7XG5cdH1cblxuXHQvLyByZXZlcnNlIGJpdCBvcmRlclxuXHRpZihyZXZlcnNlQml0cykge1xuXHRcdC8vIGNvbnZlcnQgaW5kZXggZnJvbSAwLWJhc2VkIHRvIGVuZC1iYXNlZFxuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCB0YXJnZXRRdWJpdHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHRhcmdldFF1Yml0c1tpXSA9ICh0b3RhbFF1Yml0cyAtIDEpIC0gdGFyZ2V0UXViaXRzW2ldO1xuXHRcdH1cblx0fVxuXG5cdHRhcmdldFF1Yml0cy5yZXZlcnNlKCk7XG5cblx0Ly8gbGlzdCBvZiB3aXJlcyBub3QgdXNlZCBieSB0aGlzIGdhdGVcblx0dmFyIHVudXNlZCA9IFtdO1xuXHRmb3IodmFyIGkgPSAwOyBpIDwgdG90YWxRdWJpdHM7IGkrKykge1xuXHRcdGlmKHRhcmdldFF1Yml0cy5pbmRleE9mKGkpIDwgMCkge1xuXHRcdFx0dW51c2VkLnB1c2goaSk7XG5cdFx0fVxuXHR9XG5cblx0dmFyIHVudXNlZENvdW50ID0gdW51c2VkLmxlbmd0aDtcblx0dmFyIHVudXNlZFNwYWNlID0gKDEgPDwgdW51c2VkQ291bnQpO1xuXG5cdGZ1bmN0aW9uIGdldEVsTWFzayhlbCkge1xuXHRcdHZhciByZXMgPSAwO1xuXHRcdHRhcmdldFF1Yml0cy5tYXAoZnVuY3Rpb24ocXViaXQsIGluZGV4KSB7XG5cdFx0XHRpZihlbCAmICgxIDw8IGluZGV4KSkge1xuXHRcdFx0XHRyZXMgfD0gKDEgPDwgcXViaXQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiByZXM7XG5cdH1cblxuXHRmdW5jdGlvbiBnZXRJbmNNYXNrKCkge1xuXHRcdHZhciByZXMgPSAwO1xuXHRcdHRhcmdldFF1Yml0cy5tYXAoZnVuY3Rpb24ocXViaXQsIGluZGV4KSB7XG5cdFx0XHRyZXMgfD0gKDEgPDwgcXViaXQpO1xuXHRcdH0pO1xuXHRcdHJldHVybiByZXMgKyAxO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0Tm90TWFzaygpIHtcblx0XHR2YXIgcmVzID0gMDtcblx0XHR1bnVzZWQubWFwKGZ1bmN0aW9uKHF1Yml0LCBpbmRleCkge1xuXHRcdFx0cmVzIHw9ICgxIDw8IHF1Yml0KTtcblx0XHR9KTtcblx0XHRyZXR1cm4gcmVzO1xuXHR9XG5cblx0dmFyIFQgPSBtYXRoLnplcm9zKFsgMSA8PCB0b3RhbFF1Yml0cywgMSA8PCB0b3RhbFF1Yml0cyBdKTtcblxuXHRmb3IodmFyIGVscm93ID0gMDsgZWxyb3cgPCBVLmxlbmd0aDsgZWxyb3crKykge1xuXG5cdFx0dmFyIHJvd21hc2sgPSBnZXRFbE1hc2soZWxyb3cpO1xuXG5cdFx0Zm9yKHZhciBlbGNvbCA9IDA7IGVsY29sIDwgVVtlbHJvd10ubGVuZ3RoOyBlbGNvbCsrKSB7XG5cblx0XHRcdHZhciBjb2xtYXNrID0gZ2V0RWxNYXNrKGVsY29sKTtcblxuXHRcdFx0dmFyIHV2YWwgPSBVW2Vscm93XVtlbGNvbF07XG5cdFx0XHRpZih1dmFsKSB7XG5cdFx0XHRcdHZhciByb3cgPSByb3dtYXNrO1xuXHRcdFx0XHR2YXIgY29sID0gY29sbWFzaztcblxuXHRcdFx0XHR2YXIgY291bnRlciA9IHVudXNlZFNwYWNlO1xuXHRcdFx0XHR2YXIgY291bnRlcm1hc2sgPSBnZXRFbE1hc2soMCk7XG5cdFx0XHRcdHZhciBpbmNtYXNrID0gZ2V0SW5jTWFzaygpO1xuXHRcdFx0XHR2YXIgbm90bWFzayA9IGdldE5vdE1hc2soKTtcblx0XHRcdFx0dmFyIHRvb3RobGVzcyA9IGNvdW50ZXJtYXNrO1xuXHRcdFx0XHR3aGlsZShjb3VudGVyLS0pIHtcblx0XHRcdFx0XHRyb3cgPSB0b290aGxlc3MgfCByb3dtYXNrO1xuXG5cdFx0XHRcdFx0VFtyb3ddW2NvbF0gPSB1dmFsO1xuXG5cdFx0XHRcdFx0dG9vdGhsZXNzID0gKHRvb3RobGVzcyArIGluY21hc2spICYgbm90bWFzaztcblx0XHRcdFx0XHRjb2wgPSB0b290aGxlc3MgfCBjb2xtYXNrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBUO1xufTtcblxuLy9cbi8vIEZ1bmN0aW9uIHJldHVybnMgdW5pdGFyeSBvZiB0aGUgd2hvbGUgY2lyY3VpdFxuLy9cbi8vIGBlbmRpYW5uZXNzYCBjYW4gYmU6XG4vLyAgICAgbnVsbCAtIHRoaXMgaXMgZGVmYXVsdCBhbmQgZGVwZW5kcyBvbiB0aGlzLnJldmVyc2VCaXRPcmRlclxuLy8gICAgIFwiYmlnXCIgLSBiaWcgZW5kaWFuIChsaWtlIFJpZ2V0dGkvcHlRdWlsKVxuLy8gICAgIFwibGl0dGxlXCIgLSBsaXR0bGUgZW5kaWFuIChsaWtlIElCTS9RaXNraXQpXG4vL1xuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmNpcmN1aXRNYXRyaXggPSBmdW5jdGlvbihlbmRpYW5uZXNzKSB7XG5cdHZhciBkZWNvbXBvc2VkID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdGRlY29tcG9zZWQubG9hZCh0aGlzLnNhdmUodHJ1ZSkpO1xuXG5cdGlmKGRlY29tcG9zZWQuZ290Q2xhc3NpY2FsQ29udHJvbCgpKSB7XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cblx0dmFyIG1hdHJpeCA9IFtdO1xuXHRmb3IodmFyIGNvbCA9IGRlY29tcG9zZWQubnVtQ29scygpIC0gMTsgY29sID49IDA7IGNvbC0tKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gZGVjb21wb3NlZC5udW1RdWJpdHMgLSAxOyB3aXJlID49IDA7IHdpcmUtLSkge1xuXHRcdFx0dmFyIGdhdGUgPSBkZWNvbXBvc2VkLmdldEdhdGVBdChjb2wsIHdpcmUpO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmNvbm5lY3RvciA9PSAwKSB7XG5cdFx0XHRcdHZhciBnYXRlRGVmID0gZGVjb21wb3NlZC5iYXNpY0dhdGVzW2dhdGUubmFtZV07XG5cdFx0XHRcdGlmKCFnYXRlRGVmKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBnYXRlIFxcXCJcIiArIGdhdGUubmFtZSArIFwiXFxcIlwiKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYoZ2F0ZURlZi5tYXRyaXggJiYgZ2F0ZURlZi5tYXRyaXgubGVuZ3RoKSB7XG5cdFx0XHRcdFx0dmFyIHJhd0dhdGUgPSBkZWNvbXBvc2VkLmdldFJhd0dhdGUoZ2F0ZURlZiwgZ2F0ZS5vcHRpb25zKTtcblxuXHRcdFx0XHRcdHZhciBVID0gZGVjb21wb3NlZC50cmFuc2Zvcm1NYXRyaXgoZGVjb21wb3NlZC5udW1RdWJpdHMsIHJhd0dhdGUsIGdhdGUud2lyZXMsIGVuZGlhbm5lc3MpO1xuXG5cdFx0XHRcdFx0aWYoIW1hdHJpeCB8fCAhbWF0cml4Lmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0bWF0cml4ID0gVTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0bWF0cml4ID0gdGhpcy5tdWx0aXBseVNxdWFyZU1hdHJpY2VzKG1hdHJpeCwgVSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG1hdHJpeDtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmVpZ2VudmFsdWVzMngyID0gZnVuY3Rpb24oQSkge1xuXHR2YXIgTSA9IHRoaXMucGFyc2VNYXRyaXgoQSk7XG5cblx0dmFyIGVpZ2VuID0gWzAsIDBdO1xuXG5cdHZhciB4ID0gbWF0aC5hZGQoTVswXVswXSwgTVsxXVsxXSk7XG5cblx0ZWlnZW5bMF0gPSBtYXRoLmRpdmlkZShtYXRoLmFkZCh4LCBtYXRoLnNxcnQoIG1hdGguYWRkKG1hdGgubXVsdGlwbHkobWF0aC5tdWx0aXBseSg0LCBNWzBdWzFdKSwgTVsxXVswXSksIG1hdGgucG93KCBtYXRoLnN1YnRyYWN0KE1bMF1bMF0sIE1bMV1bMV0pLCAyKSkpKSwgMik7XG5cdGVpZ2VuWzFdID0gbWF0aC5kaXZpZGUobWF0aC5zdWJ0cmFjdCh4LCBtYXRoLnNxcnQoIG1hdGguYWRkKG1hdGgubXVsdGlwbHkobWF0aC5tdWx0aXBseSg0LCBNWzBdWzFdKSwgTVsxXVswXSksIG1hdGgucG93KCBtYXRoLnN1YnRyYWN0KE1bMF1bMF0sIE1bMV1bMV0pLCAyKSkpKSwgMik7XG5cblx0cmV0dXJuIGVpZ2VuO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmdldEJpcGFydGl0ZVN0YXRlID0gZnVuY3Rpb24ocTEsIHEyKSB7XG5cdHZhciBiaXBhcnRpdGVTdGF0ZSA9IHt9O1xuXHR2YXIgYW1wQ291bnQgPSAwO1xuXG5cdGZ1bmN0aW9uIHNwZWNTdW1Db21wbGV4KGEsIGIpIHtcblx0XHR2YXIgcmF3U3VtID0gbWF0aC5hZGQoYSwgYik7XG5cdFx0dmFyIGFyZyA9IHJhd1N1bS5hcmcoKTtcblx0XHRyZXR1cm4gbWF0aC5jb21wbGV4KHsgYWJzOiBtYXRoLnNxcnQobWF0aC5wb3cobWF0aC5hYnMoYSksIDIpICsgbWF0aC5wb3cobWF0aC5hYnMoYiksIDIpKSwgYXJnOiBhcmcgfSk7XG5cdH1cblxuXHRmb3IodmFyIGlzIGluIHRoaXMuc3RhdGUpIHtcblx0XHR2YXIgaSA9IHBhcnNlSW50KGlzKTtcblx0XHR2YXIgaW5kZXggPSAwO1xuXHRcdHZhciBiaXQxID0gKGkgJiAoMSA8PCBxMSkpID8gMSA6IDA7XG5cdFx0dmFyIGJpdDIgPSAoaSAmICgxIDw8IHEyKSkgPyAyIDogMDtcblxuXHRcdGluZGV4IHw9IGJpdDE7XG5cdFx0aW5kZXggfD0gYml0MjtcblxuXHRcdGlmKHR5cGVvZiBiaXBhcnRpdGVTdGF0ZVtpbmRleF0gIT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0YmlwYXJ0aXRlU3RhdGVbaW5kZXhdID0gc3BlY1N1bUNvbXBsZXgoYmlwYXJ0aXRlU3RhdGVbaW5kZXhdLCB0aGlzLnN0YXRlW2lzXSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGJpcGFydGl0ZVN0YXRlW2luZGV4XSA9IHRoaXMuc3RhdGVbaXNdO1xuXHRcdH1cblxuXHRcdGFtcENvdW50Kys7XG5cdH1cblxuXHRpZighYW1wQ291bnQpIHtcblx0XHRiaXBhcnRpdGVTdGF0ZVtcIjBcIl0gPSBtYXRoLmNvbXBsZXgoMSwgMCk7XG5cdH1cblxuXHRyZXR1cm4gYmlwYXJ0aXRlU3RhdGU7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5jaGFuY2VNYXAgPSBmdW5jdGlvbigpIHtcblx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cblx0dmFyIG1hcCA9IHt9O1xuXHRmb3IodmFyIHNvdXIgPSAwOyBzb3VyIDwgdGhpcy5udW1RdWJpdHM7IHNvdXIrKykge1xuXHRcdGZvcih2YXIgZGVzdCA9IDA7IGRlc3QgPCB0aGlzLm51bVF1Yml0czsgZGVzdCsrKSB7XG5cdFx0XHRpZighbWFwW3NvdXJdKSB7XG5cdFx0XHRcdG1hcFtzb3VyXSA9IHt9O1xuXHRcdFx0fVxuXHRcdFx0aWYoZGVzdCA9PSBzb3VyKSB7XG5cdFx0XHRcdG1hcFtzb3VyXVtkZXN0XSA9IG51bGw7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtYXBbc291cl1bZGVzdF0gPSB7fTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRmb3IodmFyIHNvdXIgPSAwOyBzb3VyIDwgdGhpcy5udW1RdWJpdHM7IHNvdXIrKykge1xuXHRcdGZvcih2YXIgZGVzdCA9IHNvdXIgKyAxOyBkZXN0IDwgdGhpcy5udW1RdWJpdHM7IGRlc3QrKykge1xuXHRcdFx0dmFyIHJlZHVjZWRTdGF0ZSA9IHRoaXMuZ2V0QmlwYXJ0aXRlU3RhdGUoc291ciwgZGVzdCk7XG5cblx0XHRcdHZhciBjaXJjID0gbmV3IFF1YW50dW1DaXJjdWl0KDIpO1xuXHRcdFx0Y2lyYy5zdGF0ZSA9IHJlZHVjZWRTdGF0ZTtcblxuXHRcdFx0dmFyIHJhZGl1cyA9IG1hdGguYWJzKGNpcmMuYW5nbGVzKClbMF0ucmFkaXVzKTtcblxuXHRcdFx0dmFyIGNvbmN1cmVuY2UgPSBtYXRoLnJvdW5kKDEgLSBtYXRoLnBvdyhyYWRpdXMsIDIpLCA3KTtcblxuXHRcdFx0bWFwW3NvdXJdW2Rlc3RdLmVudGFuZ2xlZCA9IGNvbmN1cmVuY2UgPiAwO1xuXHRcdFx0bWFwW3NvdXJdW2Rlc3RdLmNvbmN1cmVuY2UgPSBjb25jdXJlbmNlO1xuXHRcdFx0bWFwW3NvdXJdW2Rlc3RdLmNvbmN1cmVuY2VQZXJjZW50ID0gbWF0aC5yb3VuZChjb25jdXJlbmNlICogMTAwLCAyKTtcblxuXG5cdFx0XHRtYXBbZGVzdF1bc291cl0uZW50YW5nbGVkID0gY29uY3VyZW5jZSA+IDA7XG5cdFx0XHRtYXBbZGVzdF1bc291cl0uY29uY3VyZW5jZSA9IGNvbmN1cmVuY2U7XG5cdFx0XHRtYXBbZGVzdF1bc291cl0uY29uY3VyZW5jZVBlcmNlbnQgPSBtYXRoLnJvdW5kKGNvbmN1cmVuY2UgKiAxMDAsIDIpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBtYXA7XG59O1xuXG5cbmZ1bmN0aW9uIGJpblN0cihpLCBsZW4pIHtcblx0dmFyIGJpbiA9IGkudG9TdHJpbmcoMik7XG5cdHdoaWxlKGJpbi5sZW5ndGggPCBsZW4pIHtcblx0XHRiaW4gPSBcIjBcIiArIGJpbjtcblx0fVxuXHRyZXR1cm4gYmluO1xufVxuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5yZXNldFF1Yml0ID0gZnVuY3Rpb24od2lyZSwgdmFsdWUpIHtcblx0dmFyIFUgPSBbXG5cdFx0WzAsIDBdLFxuXHRcdFswLCAwXVxuXHRdO1xuXG5cdHZhciBiaXQgPSBudWxsO1xuXHRpZih0aGlzLnJldmVyc2VCaXRPcmRlcikge1xuXHRcdGJpdCA9IG1hdGgucG93KDIsICh0aGlzLm51bVF1Yml0cyAtIDEpIC0gd2lyZSk7XG5cdH0gZWxzZSB7XG5cdFx0Yml0ID0gbWF0aC5wb3coMiwgd2lyZSk7XG5cdH1cblxuXHR2YXIgcHJvYiA9IDA7XG5cdGZvcih2YXIgaXMgaW4gdGhpcy5zdGF0ZSkge1xuXHRcdHZhciBpID0gcGFyc2VJbnQoaXMpO1xuXHRcdGlmKHZhbHVlID8gISEoaSAmIGJpdCkgOiAhKGkgJiBiaXQpKSB7XG5cdFx0XHRwcm9iICs9IG1hdGgucG93KG1hdGguYWJzKHRoaXMuc3RhdGVbaXNdKSwgMik7XG5cdFx0fVxuXHR9XG5cblx0cHJvYiA9IG1hdGgucm91bmQocHJvYiwgMTQpO1xuXG5cdGlmKHByb2IgPT0gMSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmKHZhbHVlKSB7XG5cdFx0aWYocHJvYiA9PSAwKSB7XG5cdFx0XHRVWzFdWzBdID0gMTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0VVsxXVsxXSA9IG1hdGguc3FydCgxIC8gcHJvYik7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGlmKHByb2IgPT0gMCkge1xuXHRcdFx0VVswXVsxXSA9IDE7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFVbMF1bMF0gPSBtYXRoLnNxcnQoMSAvIHByb2IpO1xuXHRcdH1cblx0fTtcblxuXHR0aGlzLmNvbGxhcHNlZCA9IFtdO1xuXHR0aGlzLnByb2IgPSBbXTtcblx0dGhpcy5hcHBseVRyYW5zZm9ybShVLCBbd2lyZV0pO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuYXBwbHlHYXRlID0gZnVuY3Rpb24oZ2F0ZU5hbWUsIGNvbHVtbiwgd2lyZXMsIG9wdGlvbnMpIHtcblx0aWYoZ2F0ZU5hbWUgPT0gXCJtZWFzdXJlXCIpIHtcblx0XHRpZighb3B0aW9ucy5jcmVnKSB7XG5cdFx0XHR0aHJvdyBcIkVycm9yOiBcXFwibWVhc3VyZVxcXCIgZ2F0ZSByZXF1aXJlcyBkZXN0aW5hdGlvbi5cIjtcblx0XHR9XG5cblx0XHR2YXIgdmFsdWUgPSB0aGlzLm1lYXN1cmUod2lyZXNbMF0sIG9wdGlvbnMuY3JlZy5uYW1lLCBvcHRpb25zLmNyZWcuYml0KTtcblxuXHRcdHZhciBkb1Jlc2V0ID0gdGhpcy5tZWFzdXJlUmVzZXRzUXViaXQ7XG5cdFx0aWYoIWRvUmVzZXQpIHtcblx0XHRcdGZvcih2YXIgY29sID0gY29sdW1uOyBjb2wgPCB0aGlzLm51bUNvbHMoKTsgY29sKyspIHtcblx0XHRcdFx0dmFyIGZyb21Sb3cgPSBjb2wgPT0gY29sdW1uID8gd2lyZXNbMF0gOiAwO1xuXHRcdFx0XHRmb3IodmFyIHJvdyA9IGZyb21Sb3c7IHJvdyA8IHRoaXMubnVtUXViaXRzOyByb3crKykge1xuXHRcdFx0XHRcdHZhciBnID0gdGhpcy5nYXRlc1tyb3ddW2NvbF07XG5cdFx0XHRcdFx0aWYoZyAmJiBnLm5hbWUgIT0gXCJtZWFzdXJlXCIpIHtcblx0XHRcdFx0XHRcdGRvUmVzZXQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmKGRvUmVzZXQpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmKGRvUmVzZXQpIHtcblx0XHRcdHRoaXMucmVzZXRRdWJpdCh3aXJlc1swXSwgdmFsdWUpO1xuXHRcdH1cblxuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmKGdhdGVOYW1lID09IFwicmVzZXRcIikge1xuXHRcdHRoaXMucmVzZXRRdWJpdCh3aXJlc1swXSwgMCk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dmFyIGdhdGUgPSB0aGlzLmJhc2ljR2F0ZXNbZ2F0ZU5hbWVdO1xuXHRpZighZ2F0ZSkge1xuXHRcdGNvbnNvbGUubG9nKFwiVW5rbm93biBnYXRlIFxcXCJcIiArIGdhdGVOYW1lICsgXCJcXFwiLlwiKTtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR2YXIgcmF3R2F0ZSA9IHRoaXMuZ2V0UmF3R2F0ZShnYXRlLCBvcHRpb25zKTtcblxuXHR0aGlzLmNvbGxhcHNlZCA9IFtdO1xuXHR0aGlzLnByb2IgPSBbXTtcblxuXHR0aGlzLmFwcGx5VHJhbnNmb3JtKHJhd0dhdGUsIHdpcmVzKTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5nZXRSYXdHYXRlID0gZnVuY3Rpb24oZ2F0ZSwgZ2F0ZU9wdGlvbnMsIGdsb2JhbE9wdGlvbnMpIHtcblx0dmFyIGdsb2JhbFBhcmFtcyA9IGdsb2JhbE9wdGlvbnMgJiYgZ2xvYmFsT3B0aW9ucy5wYXJhbXMgPyBnbG9iYWxPcHRpb25zLnBhcmFtcyA6ICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLnBhcmFtcyA/IHRoaXMub3B0aW9ucy5wYXJhbXMgOiB7fSk7XG5cblx0dmFyIGdsb2JhbFBhcmFtcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZ2xvYmFsUGFyYW1zKSk7XG5cdGZvcih2YXIgZ2xvYmFsUGFyYW1OYW1lIGluIGdsb2JhbFBhcmFtcykge1xuXHRcdGdsb2JhbFBhcmFtc1tnbG9iYWxQYXJhbU5hbWVdID0gbWF0aC5ldmFsdWF0ZShnbG9iYWxQYXJhbXNbZ2xvYmFsUGFyYW1OYW1lXSk7XG5cdH1cblxuXHR2YXIgcmF3R2F0ZSA9IFtdO1xuXHRnYXRlLm1hdHJpeC5tYXAoZnVuY3Rpb24ocm93KSB7XG5cdFx0dmFyIHJhd0dhdGVSb3cgPSBbXTtcblx0XHRyb3cubWFwKGZ1bmN0aW9uKGl0ZW0pIHtcblx0XHRcdGlmKHR5cGVvZiBpdGVtID09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0dmFyIHBhcmFtcyA9IGdhdGVPcHRpb25zID8gZ2F0ZU9wdGlvbnMucGFyYW1zIHx8IHt9IDoge307XG5cblx0XHRcdFx0dmFyIHZhcnMgPSB7fTtcblx0XHRcdFx0Z2F0ZS5wYXJhbXMubWFwKGZ1bmN0aW9uKHZhck5hbWUsIHZhckluZGV4KSB7XG5cdFx0XHRcdFx0aWYoQXJyYXkuaXNBcnJheShwYXJhbXMpKSB7XG5cdFx0XHRcdFx0XHQvLyBEZXByZWNhdGVkLiBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBvbmx5LiBcInBhcmFtc1wiIHNob3VsZCBiZSBvYmplY3QgLSBub3QgYXJyYXkuXG5cdFx0XHRcdFx0XHR2YXJzW3Zhck5hbWVdID0gcGFyYW1zLmxlbmd0aCA+IHZhckluZGV4ID8gbWF0aC5ldmFsdWF0ZShwYXJhbXNbdmFySW5kZXhdLCBnbG9iYWxQYXJhbXMpIDogbnVsbDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dmFyc1t2YXJOYW1lXSA9IG1hdGguZXZhbHVhdGUocGFyYW1zW3Zhck5hbWVdLCBnbG9iYWxQYXJhbXMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0dmFyIGV2ID0gbWF0aC5ldmFsdWF0ZShpdGVtLCB2YXJzKTtcblx0XHRcdFx0cmF3R2F0ZVJvdy5wdXNoKGV2KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJhd0dhdGVSb3cucHVzaChpdGVtKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyYXdHYXRlLnB1c2gocmF3R2F0ZVJvdyk7XG5cdH0pO1xuXHRyZXR1cm4gcmF3R2F0ZTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5maW5kR2xvYmFsUGFyYW1zID0gZnVuY3Rpb24oKSB7XG5cdHZhciByZXMgPSB7XG5cdFx0Z2xvYmFsUGFyYW1zOiBbXSxcblx0XHRjZWxsczogW11cblx0fTtcblxuXHR2YXIgZXh0cmFjdFZhcmlhYmxlcyA9IGZ1bmN0aW9uKHMpIHtcblx0XHR2YXIgdmFycyA9IFtdO1xuXG5cdFx0dmFyIG1hdGhUb1N0cmluZ0hhbmRsZXIgPSBmdW5jdGlvbihub2RlLCBvcHRpb25zKSB7XG5cdFx0XHRpZihub2RlLmlzU3ltYm9sTm9kZSAmJiAhbm9kZS5pc0Z1bmN0aW9uTm9kZSAmJiAhbWF0aFtub2RlLm5hbWVdKSB7XG5cdFx0XHRcdHZhcnMucHVzaChub2RlLm5hbWUpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHR2YXIgbm9kZSA9IG1hdGgucGFyc2Uocyk7XG5cdFx0bm9kZS50b1N0cmluZyh7IGhhbmRsZXI6IG1hdGhUb1N0cmluZ0hhbmRsZXIgfSk7XG5cblx0XHRyZXR1cm4gdmFycztcblx0fTtcblxuXHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gdGhpcy5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCkge1xuXHRcdFx0XHRpZihnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLnBhcmFtcykge1xuXHRcdFx0XHRcdHZhciBjZWxsQWRkZWQgPSBmYWxzZTtcblx0XHRcdFx0XHRmb3IodmFyIGdhdGVQYXJhbU5hbWUgaW4gZ2F0ZS5vcHRpb25zLnBhcmFtcykge1xuXHRcdFx0XHRcdFx0dmFyIGdhdGVQYXJhbVZhbHVlID0gZ2F0ZS5vcHRpb25zLnBhcmFtc1tnYXRlUGFyYW1OYW1lXTtcblx0XHRcdFx0XHRcdGlmKHR5cGVvZiBnYXRlUGFyYW1WYWx1ZSA9PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBnbG9iYWxzID0gZXh0cmFjdFZhcmlhYmxlcyhnYXRlUGFyYW1WYWx1ZSk7XG5cblx0XHRcdFx0XHRcdFx0aWYoZ2xvYmFscy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGcgPSAwOyBnIDwgZ2xvYmFscy5sZW5ndGg7IGcrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYocmVzLmdsb2JhbFBhcmFtcy5pbmRleE9mKGdsb2JhbHNbZ10pIDwgMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXMuZ2xvYmFsUGFyYW1zLnB1c2goZ2xvYmFsc1tnXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0aWYoIWNlbGxBZGRlZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIG1heFdpcmUgPSBNYXRoLm1heC5hcHBseShudWxsLCBnYXRlLndpcmVzKTtcblx0XHRcdFx0XHRcdFx0XHRcdHJlcy5jZWxscy5wdXNoKFtjb2x1bW4sIG1heFdpcmVdKTtcblx0XHRcdFx0XHRcdFx0XHRcdGNlbGxBZGRlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJlcztcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5nZXRHbG9iYWxQYXJhbXMgPSBmdW5jdGlvbigpIHtcblx0dmFyIGdsb2JhbFBhcmFtcyA9IHRoaXMuZmluZEdsb2JhbFBhcmFtcygpLmdsb2JhbFBhcmFtcztcblx0cmV0dXJuIGdsb2JhbFBhcmFtcztcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5nb3RHbG9iYWxQYXJhbXMgPSBmdW5jdGlvbigpIHtcblx0dmFyIGdsb2JhbFBhcmFtcyA9IHRoaXMuZ2V0R2xvYmFsUGFyYW1zKCk7XG5cblx0cmV0dXJuIGdsb2JhbFBhcmFtcy5sZW5ndGggPiAwO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnVwZGF0ZUdsb2JhbFBhcmFtcyA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLnBhcmFtcyA9IHRoaXMuZ2V0R2xvYmFsUGFyYW1zKCk7XG5cblx0dGhpcy5vcHRpb25zID0gdGhpcy5vcHRpb25zIHx8IHt9O1xuXHR0aGlzLm9wdGlvbnMucGFyYW1zID0gdGhpcy5vcHRpb25zLnBhcmFtcyB8fCB7fTtcblxuXHRmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXJhbXMubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgcGFyYW1OYW1lID0gdGhpcy5wYXJhbXNbaV07XG5cdFx0aWYodHlwZW9mIHRoaXMub3B0aW9ucy5wYXJhbXNbcGFyYW1OYW1lXSA9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHR0aGlzLm9wdGlvbnMucGFyYW1zW3BhcmFtTmFtZV0gPSAwO1xuXHRcdH1cblx0fVxuXG5cdGZvcih2YXIgcGFyYW1OYW1lIGluIHRoaXMub3B0aW9ucy5wYXJhbXMpIHtcblx0XHRpZih0aGlzLnBhcmFtcy5pbmRleE9mKHBhcmFtTmFtZSkgPCAwKSB7XG5cdFx0XHRkZWxldGUgdGhpcy5vcHRpb25zLnBhcmFtc1twYXJhbU5hbWVdO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0aGlzLnBhcmFtcztcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5kZWNvbXBvc2UgPSBmdW5jdGlvbihvYmopIHtcblx0aWYoIW9iai5nYXRlcy5sZW5ndGgpIHtcblx0XHRyZXR1cm4gb2JqO1xuXHR9XG5cblx0dGhpcy51cGRhdGVHbG9iYWxQYXJhbXMoKTtcblxuXHRmdW5jdGlvbiBpbmplY3RBcnJheShhMSwgYTIsIHBvcykge1xuXHRcdHJldHVybiBhMS5zbGljZSggMCwgcG9zICkuY29uY2F0KCBhMiApLmNvbmNhdCggYTEuc2xpY2UoIHBvcyApICk7XG5cdH1cblxuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG9iai5nYXRlc1swXS5sZW5ndGg7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IG9iai5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSBvYmouZ2F0ZXNbd2lyZV1bY29sdW1uXTtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCAmJiAhdGhpcy5iYXNpY0dhdGVzW2dhdGUubmFtZV0pIHtcblx0XHRcdFx0dmFyIHRtcCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRcdFx0XHR2YXIgY3VzdG9tID0gb2JqLmN1c3RvbUdhdGVzW2dhdGUubmFtZV07XG5cdFx0XHRcdGlmKGN1c3RvbSkge1xuXHRcdFx0XHRcdHRtcC5sb2FkKGN1c3RvbSk7XG5cdFx0XHRcdFx0Ly8gLS0tXG5cdFx0XHRcdFx0Ly8gY2lyY3VpdCB3aXRoIHBhcmFtc1xuXHRcdFx0XHRcdGlmKHRtcC5wYXJhbXMubGVuZ3RoICYmIGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHR2YXIgZ2xvYmFsUGFyYW1zID0gZ2F0ZS5vcHRpb25zLnBhcmFtcztcblx0XHRcdFx0XHRcdGZvcih2YXIgY2MgPSAwOyBjYyA8IHRtcC5nYXRlc1swXS5sZW5ndGg7IGNjKyspIHtcblx0XHRcdFx0XHRcdFx0Zm9yKHZhciB3dyA9IDA7IHd3IDwgdG1wLm51bVF1Yml0czsgd3crKykge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBnZyA9IHRtcC5nYXRlc1t3d11bY2NdO1xuXHRcdFx0XHRcdFx0XHRcdGlmKGdnICYmIGdnLmNvbm5lY3RvciA9PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihnZy5vcHRpb25zICYmIGdnLm9wdGlvbnMucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgZGVzdFBhcmFtIGluIGdnLm9wdGlvbnMucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gcGFyc2UgcGFyYW0sIHJlcGxhY2UgdmFyaWFibGUgd2l0aCBnbG9iYWwgcGFyYW0gYW5kIGFzc2VtYmxlIGl0IGJhY2tcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgbm9kZSA9IG1hdGgucGFyc2UoZ2cub3B0aW9ucy5wYXJhbXNbZGVzdFBhcmFtXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHRyYW5zZm9ybWVkID0gbm9kZS50cmFuc2Zvcm0oZnVuY3Rpb24gKG5vZGUsIHBhdGgsIHBhcmVudCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYobm9kZS5pc1N5bWJvbE5vZGUgJiYgZ2xvYmFsUGFyYW1zLmhhc093blByb3BlcnR5KG5vZGUubmFtZSkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG1hdGgucGFyc2UoXCIoXCIgKyBnbG9iYWxQYXJhbXNbbm9kZS5uYW1lXSArIFwiKVwiKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBub2RlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGdnLm9wdGlvbnMucGFyYW1zW2Rlc3RQYXJhbV0gPSB0cmFuc2Zvcm1lZC50b1N0cmluZygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24pIHtcblx0XHRcdFx0XHRcdGZvcih2YXIgY2MgPSAwOyBjYyA8IHRtcC5nYXRlc1swXS5sZW5ndGg7IGNjKyspIHtcblx0XHRcdFx0XHRcdFx0Zm9yKHZhciB3dyA9IDA7IHd3IDwgdG1wLm51bVF1Yml0czsgd3crKykge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBnZyA9IHRtcC5nYXRlc1t3d11bY2NdO1xuXHRcdFx0XHRcdFx0XHRcdGlmKGdnKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRnZy5vcHRpb25zID0gZ2cub3B0aW9ucyB8fCB7fTtcblx0XHRcdFx0XHRcdFx0XHRcdGdnLm9wdGlvbnMuY29uZGl0aW9uID0gZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gLS0tXG5cblx0XHRcdFx0XHR2YXIgZGVjb21wb3NlZCA9IHRtcC5zYXZlKHRydWUpO1xuXHRcdFx0XHRcdGlmKCFkZWNvbXBvc2VkLmdhdGVzWzBdLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0Zm9yKHZhciB0bXBxID0gMDsgdG1wcSA8IGRlY29tcG9zZWQuZ2F0ZXMubGVuZ3RoOyB0bXBxKyspIHtcblx0XHRcdFx0XHRcdFx0ZGVjb21wb3NlZC5nYXRlc1t0bXBxXS5wdXNoKG51bGwpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHZhciBlbXB0eSA9IFtdO1xuXHRcdFx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBkZWNvbXBvc2VkLmdhdGVzWzBdLmxlbmd0aCAtIDE7IGkrKykge1xuXHRcdFx0XHRcdFx0ZW1wdHkucHVzaChudWxsKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBzaGlmdCBjb2x1bW5zIHJpZ2h0XG5cdFx0XHRcdFx0Zm9yKHZhciB3ID0gMDsgdyA8IG9iai5udW1RdWJpdHM7IHcrKykge1xuXHRcdFx0XHRcdFx0dmFyIGcgPSBvYmouZ2F0ZXNbd11bY29sdW1uXTtcblx0XHRcdFx0XHRcdGlmKGcgJiYgZy5pZCA9PSBnYXRlLmlkKSB7XG5cdFx0XHRcdFx0XHRcdG9iai5nYXRlc1t3XS5zcGxpY2UoY29sdW1uLCAxKTtcblx0XHRcdFx0XHRcdFx0dmFyIGluc2VydEdhdGUgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRlY29tcG9zZWQuZ2F0ZXNbZy5jb25uZWN0b3JdKSk7XG5cdFx0XHRcdFx0XHRcdC8vIHVuaXF1ZSBpZFxuXHRcdFx0XHRcdFx0XHRmb3IodmFyIHRtcHEgPSAwOyB0bXBxIDwgaW5zZXJ0R2F0ZS5sZW5ndGg7IHRtcHErKykge1xuXHRcdFx0XHRcdFx0XHRcdGlmKGluc2VydEdhdGVbdG1wcV0pIHtcblx0XHRcdFx0XHRcdFx0XHRcdGluc2VydEdhdGVbdG1wcV0uaWQgPSBpbnNlcnRHYXRlW3RtcHFdLmlkICsgXCJfXCIgKyBnYXRlLmlkO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRvYmouZ2F0ZXNbd10gPSBpbmplY3RBcnJheShvYmouZ2F0ZXNbd10sIGluc2VydEdhdGUsIGNvbHVtbik7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRvYmouZ2F0ZXNbd10gPSBpbmplY3RBcnJheShvYmouZ2F0ZXNbd10sIGVtcHR5LCBjb2x1bW4gKyAxKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRvYmouY3VzdG9tR2F0ZXMgPSB7fTtcblxuXHRyZXR1cm4gb2JqO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmRlY29tcG9zZUdhdGVBdCA9IGZ1bmN0aW9uKGNvbHVtbiwgd2lyZSkge1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0Ly8gaWYgdGhlcmUgaXMgbm8gZ2F0ZSAtIHJldHVyblxuXHR2YXIgZ2F0ZSA9IHRoaXMuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdGlmKCFnYXRlKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gaWYgZ2F0ZSBpcyBub3QgY29tcG9zaXRlIC0gcmV0dXJuXG5cdGlmKCF0aGlzLmN1c3RvbUdhdGVzW2dhdGUubmFtZV0pIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBjb3B5IGNpcmN1aXRcblx0dmFyIG9iaiA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRvYmoubG9hZCh0aGlzLnNhdmUoKSk7XG5cblx0Ly8gcmVtb3ZlIGFsbCBnYXRlcyBleGNlcHQgdGhpc1xuXHRmb3IodmFyIGNvbCA9IDA7IGNvbCA8IG9iai5nYXRlc1swXS5sZW5ndGg7IGNvbCsrKSB7XG5cdFx0Zm9yKHZhciByb3cgPSAwOyByb3cgPCBvYmoubnVtUXViaXRzOyByb3crKykge1xuXHRcdFx0dmFyIGcgPSBvYmouZ2F0ZXNbcm93XVtjb2xdO1xuXHRcdFx0aWYoZyAmJiBnLmlkICE9IGdhdGUuaWQpIHtcblx0XHRcdFx0b2JqLnJlbW92ZUdhdGVBdChjb2wsIHJvdyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gZGVjb21wb3NlIGNpcmN1aXRcblx0dmFyIGNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0Y2lyY3VpdC5sb2FkKG9iai5zYXZlKHRydWUpKTtcblx0Y2lyY3VpdC5yZW1vdmVMZWFkaW5nQ29sdW1ucygpO1xuXHRjaXJjdWl0LnJlbW92ZVRyYWlsaW5nQ29sdW1ucygpO1xuXG5cdGZvcih2YXIgaSA9IDA7IGkgPCBjaXJjdWl0LmdhdGVzWzBdLmxlbmd0aCAtIDE7IGkrKykge1xuXHRcdHRoaXMuaW5zZXJ0U3BhY2UoY29sdW1uICsgaSwgZ2F0ZS53aXJlcyk7XG5cdH1cblx0dGhpcy5yZW1vdmVHYXRlKGdhdGUuaWQpO1xuXG5cdHZhciBkZXN0Q29sID0gY29sdW1uO1xuXHRmb3IodmFyIGNvbCA9IDA7IGNvbCA8IGNpcmN1aXQuZ2F0ZXNbMF0ubGVuZ3RoOyBjb2wrKykge1xuXHRcdHZhciBnYXRlcyA9IGNpcmN1aXQuZ2V0R2F0ZXNBdENvbHVtbihjb2wpO1xuXHRcdGdhdGVzLm1hcChmdW5jdGlvbihnKSB7XG5cdFx0XHRzZWxmLmFkZEdhdGUoZy5uYW1lLCBkZXN0Q29sLCBnLndpcmVzLCBnLm9wdGlvbnMpO1xuXHRcdH0pO1xuXHRcdGRlc3RDb2wrKztcblx0fVxuXG5cdHJldHVybiBjaXJjdWl0O1xufTtcblxuXG4vL1xuLy8gQ29udmVydCB0aGlzIGNpcmN1aXQgdG8gY3VzdG9tIGdhdGVcbi8vXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5jb252ZXJ0VG9DdXN0b21HYXRlID0gZnVuY3Rpb24oZ2F0ZU5hbWUsIGRlY29tcG9zZSwgYWRkVG9DaXJjdWl0KSB7XG5cdC8vIHJlbW92ZSBtZWFzdXJlbWVudCBhbmQgY2xhc3NpY2FsIGNvbnRyb2xcblx0dmFyIG51bUNvbHMgPSB0aGlzLm51bUNvbHMoKTtcblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IHRoaXMuZ2F0ZXNbd2lyZV1bY29sdW1uXTtcblx0XHRcdGlmKGdhdGUpIHtcblx0XHRcdFx0Ly8gcmVtb3ZlIG1lYXN1cmVtZW50XG5cdFx0XHRcdGlmKGdhdGUubmFtZSA9PSBcIm1lYXN1cmVcIikge1xuXHRcdFx0XHRcdHRoaXMuZ2F0ZXNbd2lyZV1bY29sdW1uXSA9IG51bGw7XG5cdFx0XHRcdFx0Z2F0ZSA9IG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYoZ2F0ZSkge1xuXHRcdFx0XHQvLyByZW1vdmUgY29uZGl0aW9uc1xuXHRcdFx0XHRpZihnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbikge1xuXHRcdFx0XHRcdGRlbGV0ZSB0aGlzLmdhdGVzW3dpcmVdW2NvbHVtbl0ub3B0aW9ucy5jb25kaXRpb247XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyByZW1vdmUgY3JlZ3Ncblx0dGhpcy5jcmVncyA9IHt9O1xuXG5cdHZhciBzb3VyY2UgPSB0aGlzLnNhdmUoZGVjb21wb3NlKTtcblx0aWYoc291cmNlLm9wdGlvbnMpIHtcblx0XHRzb3VyY2Uub3B0aW9ucy5oeWJyaWQgPSBmYWxzZTtcblx0XHRpZihzb3VyY2Uub3B0aW9ucy5oeWJyaWRPcHRpb25zKSB7XG5cdFx0XHRkZWxldGUgc291cmNlLm9wdGlvbnMuaHlicmlkT3B0aW9ucztcblx0XHR9XG5cdH1cblxuXHR0aGlzLmNsZWFyKCk7XG5cdHRoaXMuY3VzdG9tR2F0ZXNbZ2F0ZU5hbWVdID0gc291cmNlO1xuXG5cdGlmKGFkZFRvQ2lyY3VpdCkge1xuXHRcdHZhciB3aXJlcyA9IFtdO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLm51bVF1Yml0czsgaSsrKSB7XG5cdFx0XHR3aXJlcy5wdXNoKGkpO1xuXHRcdH1cblxuXHRcdHZhciBnYXRlT3B0aW9ucyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5jdXN0b21HYXRlc1tnYXRlTmFtZV0ub3B0aW9ucykpO1xuXG5cdFx0dGhpcy5hZGRHYXRlKGdhdGVOYW1lLCAtMSwgd2lyZXMsIGdhdGVPcHRpb25zKTtcblx0fSBlbHNlIHtcblx0XHR0aGlzLnJlbW92ZVRyYWlsaW5nUm93cygpO1xuXHR9XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUudmFsaWRDdXN0b21HYXRlTmFtZSA9IGZ1bmN0aW9uKGJhc2VOYW1lKSB7XG5cdGJhc2VOYW1lID0gKGJhc2VOYW1lIHx8IFwic3ViXCIpICsgXCJcIjtcblxuXHR2YXIgY3VzdG9tR2F0ZU5hbWVzID0gW107XG5cdGlmKHRoaXMuY3VzdG9tR2F0ZXMpIHtcblx0XHRpZighdGhpcy5iYXNpY0dhdGVzW2Jhc2VOYW1lXSkge1xuXHRcdFx0aWYoIXRoaXMuY3VzdG9tR2F0ZXNbYmFzZU5hbWVdKSB7XG5cdFx0XHRcdHJldHVybiBiYXNlTmFtZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3IodmFyIGdhdGVOYW1lIGluIHRoaXMuYmFzaWNHYXRlcykge1xuXHRcdFx0Y3VzdG9tR2F0ZU5hbWVzLnB1c2goZ2F0ZU5hbWUpO1xuXHRcdH1cblxuXHRcdGZvcih2YXIgZ2F0ZU5hbWUgaW4gdGhpcy5jdXN0b21HYXRlcykge1xuXHRcdFx0Y3VzdG9tR2F0ZU5hbWVzLnB1c2goZ2F0ZU5hbWUpO1xuXHRcdH1cblx0fVxuXG5cdHZhciBpbmRleCA9IDA7XG5cdHZhciB2YWxpZE5hbWUgPSBcIlwiO1xuXHRkbyB7XG5cdFx0aW5kZXgrKztcblx0XHR2YWxpZE5hbWUgPSBiYXNlTmFtZSArIGluZGV4O1xuXHR9IHdoaWxlKGN1c3RvbUdhdGVOYW1lcy5pbmRleE9mKHZhbGlkTmFtZSkgPj0gMCk7XG5cblx0cmV0dXJuIHZhbGlkTmFtZTtcbn07XG5cblxuLy9cbi8vIFNwbGl0IGNpcmN1aXQgaW50byBjb21wb3NpdGUgZ2F0ZXMsIGVhY2ggb2YgXCJibG9ja1NpemVcIiBxdWJpdHNcbi8vXG4vLyBPcHRpb25zOlxuLy8gICB7XG4vLyAgICAgIGZsZXhpYmxlQmxvY2tTaXplOiBib29sIC8vIEFsbG93IGxhcmdlciBibG9ja3MgZm9yIGdhdGVzIHdpdGggbW9yZSBxdWJpdHMgdGhhbiBibG9jayBzaXplXG4vLyAgICAgIHZlcnRpY2FsT25seTogYm9vbCAvLyBEb24ndCBleHRlbmQgYmxvY2tzIGhvcml6b250YWxseVxuLy8gICB9XG4vL1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuc3BsaXRJbnRvQmxvY2tzID0gZnVuY3Rpb24oYmxvY2tTaXplLCBvcHRpb25zKSB7XG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdHZhciBibG9ja3MgPSBbXTtcblx0dmFyIHByZXZDb25kaXRpb24gPSBcInt9XCI7XG5cdHZhciBwcmV2SXNVbml0YXJ5ID0gdHJ1ZTtcblxuXHR2YXIgY3VycmVudEJsb2NrID0gbnVsbDtcblxuXHR2YXIgZGVjb21wb3NlZCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRkZWNvbXBvc2VkLmxvYWQodGhpcy5zYXZlKHRydWUpKTtcblxuXHR2YXIgbnVtQ29scyA9IGRlY29tcG9zZWQubnVtQ29scygpO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IGRlY29tcG9zZWQubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gZGVjb21wb3NlZC5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCAmJiAhZ2F0ZS5hZGRlZFRvQmxvY2spIHtcblx0XHRcdFx0dmFyIGdhdGVEZWYgPSB0aGlzLmJhc2ljR2F0ZXNbZ2F0ZS5uYW1lXTtcblx0XHRcdFx0dmFyIGN1cnJlbnRDb25kaXRpb24gPSBnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiA/IEpTT04uc3RyaW5naWZ5KGdhdGUub3B0aW9ucy5jb25kaXRpb24pIDogXCJ7fVwiO1xuXHRcdFx0XHR2YXIgY3VycmVudElzVW5pdGFyeSA9IGdhdGVEZWYgJiYgISEoZ2F0ZURlZi5tYXRyaXggJiYgZ2F0ZURlZi5tYXRyaXgubGVuZ3RoKTtcblxuXHRcdFx0XHR2YXIgbmV3V2lyZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGN1cnJlbnRCbG9jayA/IGN1cnJlbnRCbG9jay53aXJlcyA6IFtdKSk7XG5cdFx0XHRcdGdhdGUud2lyZXMubWFwKGZ1bmN0aW9uKHdpcmUpIHtcblx0XHRcdFx0XHRpZihuZXdXaXJlcy5pbmRleE9mKHdpcmUpIDwgMCkge1xuXHRcdFx0XHRcdFx0bmV3V2lyZXMucHVzaCh3aXJlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGlmKFxuXHRcdFx0XHRcdCFibG9ja3MubGVuZ3RoIHx8XG5cdFx0XHRcdFx0IShjdXJyZW50Q29uZGl0aW9uID09IHByZXZDb25kaXRpb24pIHx8XG5cdFx0XHRcdFx0IWN1cnJlbnRJc1VuaXRhcnkgfHxcblx0XHRcdFx0XHQhcHJldklzVW5pdGFyeSB8fFxuXHRcdFx0XHRcdCEobmV3V2lyZXMubGVuZ3RoIDw9IGJsb2NrU2l6ZSlcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0Y3VycmVudEJsb2NrID0ge1xuXHRcdFx0XHRcdFx0d2lyZXM6IGdhdGUud2lyZXMsXG5cdFx0XHRcdFx0XHRnYXRlczogW2dhdGVdXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRibG9ja3MucHVzaChjdXJyZW50QmxvY2spO1xuXG5cdFx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24pIHtcblx0XHRcdFx0XHRcdGN1cnJlbnRCbG9jay5jb25kaXRpb24gPSBnYXRlLm9wdGlvbnMuY29uZGl0aW9uO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjdXJyZW50QmxvY2sud2lyZXMgPSBuZXdXaXJlcztcblx0XHRcdFx0XHRjdXJyZW50QmxvY2suZ2F0ZXMucHVzaChnYXRlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGdhdGUud2lyZXMubWFwKGZ1bmN0aW9uKHd3KSB7XG5cdFx0XHRcdFx0ZGVjb21wb3NlZC5nYXRlc1t3d11bY29sdW1uXS5hZGRlZFRvQmxvY2sgPSB0cnVlO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRwcmV2Q29uZGl0aW9uID0gY3VycmVudENvbmRpdGlvbjtcblx0XHRcdFx0cHJldklzVW5pdGFyeSA9IGN1cnJlbnRJc1VuaXRhcnk7XG5cblx0XHRcdFx0aWYoIW9wdGlvbnMudmVydGljYWxPbmx5KSB7XG5cdFx0XHRcdFx0Ly8gdHJ5IHRvIGV4dGVuZCB0aGUgYmxvY2sgaG9yaXpvbnRhbGx5XG5cdFx0XHRcdFx0dmFyIGV4dENvbHVtbiA9IGNvbHVtbiArIDE7XG5cdFx0XHRcdFx0dmFyIGV4dFdpcmVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjdXJyZW50QmxvY2sud2lyZXMpKTtcblx0XHRcdFx0XHRleHRXaXJlcy5zb3J0KCk7XG5cdFx0XHRcdFx0d2hpbGUoZXh0Q29sdW1uIDwgbnVtQ29scyAmJiBleHRXaXJlcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdGV4dFdpcmUgPSBleHRXaXJlc1swXTtcblxuXHRcdFx0XHRcdFx0d2hpbGUoZXh0V2lyZXMubGVuZ3RoICYmIGV4dFdpcmUgPD0gZXh0V2lyZXNbZXh0V2lyZXMubGVuZ3RoIC0gMV0pIHtcblx0XHRcdFx0XHRcdFx0dmFyIGV4dEdhdGUgPSBkZWNvbXBvc2VkLmdldEdhdGVBdChleHRDb2x1bW4sIGV4dFdpcmUpO1xuXHRcdFx0XHRcdFx0XHRpZihleHRHYXRlICYmICFleHRHYXRlLmFkZGVkVG9CbG9jaykge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBleHRHYXRlRGVmID0gdGhpcy5iYXNpY0dhdGVzW2V4dEdhdGUubmFtZV07XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGV4dENvbmRpdGlvbiA9IGV4dEdhdGUub3B0aW9ucyAmJiBleHRHYXRlLm9wdGlvbnMuY29uZGl0aW9uID8gSlNPTi5zdHJpbmdpZnkoZXh0R2F0ZS5vcHRpb25zLmNvbmRpdGlvbikgOiBcInt9XCI7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGV4dElzVW5pdGFyeSA9IGV4dEdhdGVEZWYgJiYgISEoZXh0R2F0ZURlZi5tYXRyaXggJiYgZXh0R2F0ZURlZi5tYXRyaXgubGVuZ3RoKTtcblxuXHRcdFx0XHRcdFx0XHRcdC8vXG5cdFx0XHRcdFx0XHRcdFx0Ly8gQ2hlY2sgaWYgZ2F0ZSBpcyB2YWxpZCBmb3IgYmxvY2tcblx0XHRcdFx0XHRcdFx0XHQvL1xuXHRcdFx0XHRcdFx0XHRcdHZhciBnYXRlVmFsaWQgPSBleHRJc1VuaXRhcnkgJiYgKGV4dENvbmRpdGlvbiA9PSBjdXJyZW50Q29uZGl0aW9uKTtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIENoZWNrIGlmIGFsbCBnYXRlJ3Mgd2lyZXMgYXJlIGluc2lkZSBibG9ja1xuXHRcdFx0XHRcdFx0XHRcdGlmKGdhdGVWYWxpZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciB3dyA9IDA7IHd3IDwgZXh0R2F0ZS53aXJlcy5sZW5ndGg7IHd3KyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoZXh0V2lyZXMuaW5kZXhPZihleHRHYXRlLndpcmVzW3d3XSkgPCAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Z2F0ZVZhbGlkID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRpZihnYXRlVmFsaWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGFkZCBnYXRlIHRvIGJsb2NrXG5cdFx0XHRcdFx0XHRcdFx0XHRjdXJyZW50QmxvY2suZ2F0ZXMucHVzaChleHRHYXRlKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0ZXh0R2F0ZS53aXJlcy5tYXAoZnVuY3Rpb24od3cpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVjb21wb3NlZC5nYXRlc1t3d11bZXh0Q29sdW1uXS5hZGRlZFRvQmxvY2sgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIHJlbW92ZSBnYXRlJ3Mgd2lyZXMgZnJvbSBzY2FuXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgdmFsaWRFeHRXaXJlcyA9IFtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciB3dyA9IDA7IHd3IDwgZXh0V2lyZXMubGVuZ3RoOyB3dysrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBleHRXID0gZXh0V2lyZXNbd3ddO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZihleHRHYXRlLndpcmVzLmluZGV4T2YoZXh0VykgPCAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsaWRFeHRXaXJlcy5wdXNoKGV4dFcpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRleHRXaXJlcyA9IHZhbGlkRXh0V2lyZXM7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdC8vIGdvdG8gbmV4dCB2YWxpZCB3aXJlXG5cdFx0XHRcdFx0XHRcdGlmKGV4dFdpcmVzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBuZXdFeHRXaXJlID0gZXh0V2lyZXNbZXh0V2lyZXMubGVuZ3RoIC0gMV0gKyAxO1xuXHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgd3cgPSBleHRXaXJlcy5sZW5ndGggLSAxOyB3dyA+PSAwOyB3dy0tKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgZXh0VyA9IGV4dFdpcmVzW3d3XTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGV4dFcgPiBleHRXaXJlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5ld0V4dFdpcmUgPSBleHRXO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRleHRXaXJlID0gbmV3RXh0V2lyZTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRleHRDb2x1bW4rKztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHR2YXIgY2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXG5cdHZhciBibG9ja0NvdW50ZXIgPSAwO1xuXHRmb3IodmFyIGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgYmxvY2tzLmxlbmd0aDsgYmxvY2tJbmRleCsrKSB7XG5cdFx0dmFyIGJsb2NrID0gYmxvY2tzW2Jsb2NrSW5kZXhdO1xuXG5cdFx0dmFyIGlzQmxvY2sgPSBmYWxzZTtcblx0XHRpZihibG9jay53aXJlcy5sZW5ndGggPD0gYmxvY2tTaXplIHx8ICEhb3B0aW9ucy5mbGV4aWJsZUJsb2NrU2l6ZSkge1xuXHRcdFx0Zm9yKHZhciB4ID0gMDsgeCA8IGJsb2NrLmdhdGVzLmxlbmd0aDsgeCsrKSB7XG5cdFx0XHRcdHZhciBnYXRlID0gYmxvY2suZ2F0ZXNbeF07XG5cdFx0XHRcdHZhciBnYXRlRGVmID0gdGhpcy5iYXNpY0dhdGVzW2dhdGUubmFtZV07XG5cblx0XHRcdFx0aWYoZ2F0ZURlZi5tYXRyaXggJiYgZ2F0ZURlZi5tYXRyaXgubGVuZ3RoKSB7XG5cdFx0XHRcdFx0aXNCbG9jayA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZihpc0Jsb2NrKSB7XG5cdFx0XHRibG9ja0NvdW50ZXIrKztcblxuXHRcdFx0dmFyIGN1c3RvbUdhdGUgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0XHRcdGZvcih2YXIgeCA9IDA7IHggPCBibG9jay5nYXRlcy5sZW5ndGg7IHgrKykge1xuXHRcdFx0XHR2YXIgZ2F0ZSA9IGJsb2NrLmdhdGVzW3hdO1xuXG5cdFx0XHRcdGlmKGdhdGUub3B0aW9ucy5jb25kaXRpb24pIHtcblx0XHRcdFx0XHRkZWxldGUgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFVwZGF0ZSBnYXRlIHdpcmVzXG5cdFx0XHRcdHZhciB3aXJlcyA9IFtdO1xuXHRcdFx0XHRnYXRlLndpcmVzLm1hcChmdW5jdGlvbih3aXJlKSB7XG5cdFx0XHRcdFx0d2lyZXMucHVzaChibG9jay53aXJlcy5pbmRleE9mKHdpcmUpKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGdhdGUud2lyZXMgPSB3aXJlcztcblxuXHRcdFx0XHQvLyBhZGQgZ2F0ZSB0byBjdXN0b20gZ2F0ZVxuXHRcdFx0XHRjdXN0b21HYXRlLmFwcGVuZEdhdGUoZ2F0ZS5uYW1lLCB3aXJlcywgZ2F0ZS5vcHRpb25zKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gcmVnaXN0ZXIgY3VzdG9tIGdhdGVcblx0XHRcdHZhciBjdXN0b21HYXRlTmFtZSA9IFwiYmxvY2tcIiArIGJsb2NrQ291bnRlcjtcblx0XHRcdGNpcmN1aXQucmVnaXN0ZXJHYXRlKGN1c3RvbUdhdGVOYW1lLCBjdXN0b21HYXRlKTtcblxuXHRcdFx0Ly8gYWRkIGN1c3RvbSBnYXRlIHRvIGNpcmN1aXRcblx0XHRcdHZhciBjdXN0b21HYXRlT3B0aW9ucyA9IHt9O1xuXHRcdFx0aWYoYmxvY2suY29uZGl0aW9uKSB7XG5cdFx0XHRcdGN1c3RvbUdhdGVPcHRpb25zLmNvbmRpdGlvbiA9IGJsb2NrLmNvbmRpdGlvbjtcblx0XHRcdH1cblx0XHRcdGNpcmN1aXQuYXBwZW5kR2F0ZShjdXN0b21HYXRlTmFtZSwgYmxvY2sud2lyZXMsIGN1c3RvbUdhdGVPcHRpb25zKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gLS0tXG5cdFx0XHQvLyBhZGQgb3JpZ2luYWwgZ2F0ZSAobm9uLXVuaXRhcnkgZ2F0ZXMgW2FuZCBnYXRlcyB3aXRoIG1vcmUgdGhhbiBibG9ja1NpemUgd2lyZXMgaWYgYWxsb3dGbGV4aWJsZUJsb2NrU2l6ZSA9IGZhbHNlXSlcblx0XHRcdC8vIC0tLVxuXHRcdFx0YmxvY2suZ2F0ZXMubWFwKGZ1bmN0aW9uKGdhdGUpIHtcblx0XHRcdFx0Y2lyY3VpdC5hcHBlbmRHYXRlKGdhdGUubmFtZSwgZ2F0ZS53aXJlcywgZ2F0ZS5vcHRpb25zKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdHRoaXMubG9hZChjaXJjdWl0LnNhdmUoZmFsc2UpKTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnVzZWRHYXRlcyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0dmFyIGRlY29tcG9zZWQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0ZGVjb21wb3NlZC5sb2FkKHRoaXMuc2F2ZSh0cnVlKSk7XG5cdHZhciB1c2VkID0gW107XG5cdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBkZWNvbXBvc2VkLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0Zm9yKHZhciBjb2wgPSAwOyBjb2wgPCBkZWNvbXBvc2VkLm51bUNvbHMoKTsgY29sKyspIHtcblx0XHRcdHZhciBnYXRlID0gZGVjb21wb3NlZC5nYXRlc1t3aXJlXVtjb2xdO1xuXHRcdFx0aWYoZ2F0ZSAmJiB1c2VkLmluZGV4T2YoZ2F0ZS5uYW1lKSA8IDApIHtcblx0XHRcdFx0dmFyIHNraXBHYXRlID0gZmFsc2U7XG5cblx0XHRcdFx0aWYob3B0aW9ucy51bml0YXJpZXNPbmx5KSB7XG5cdFx0XHRcdFx0dmFyIGJhc2ljR2F0ZSA9IGRlY29tcG9zZWQuYmFzaWNHYXRlc1tnYXRlLm5hbWVdO1xuXHRcdFx0XHRcdGlmKCFiYXNpY0dhdGUgfHwgIWJhc2ljR2F0ZS5tYXRyaXggfHwgIWJhc2ljR2F0ZS5tYXRyaXgubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRza2lwR2F0ZSA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYoIXNraXBHYXRlKSB7XG5cdFx0XHRcdFx0dXNlZC5wdXNoKGdhdGUubmFtZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBDdXN0b20gZ2F0ZXNcblx0aWYoIW9wdGlvbnMubm9DdXN0b21HYXRlcykge1xuXHRcdGZvcih2YXIgY3VzdG9tR2F0ZU5hbWUgaW4gdGhpcy5jdXN0b21HYXRlcykge1xuXHRcdFx0dmFyIGN1c3RvbUdhdGUgPSB0aGlzLmN1c3RvbUdhdGVzW2N1c3RvbUdhdGVOYW1lXTtcblxuXHRcdFx0aWYodXNlZC5pbmRleE9mKGN1c3RvbUdhdGVOYW1lKSA8IDApIHtcblx0XHRcdFx0dXNlZC5wdXNoKGN1c3RvbUdhdGVOYW1lKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdXNlZDtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmNvdW50T3BzID0gZnVuY3Rpb24ob2JqLCBvcHRpb25zKSB7XG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXHRvcHRpb25zLnNoYWxsb3cgPSBvcHRpb25zLnNoYWxsb3cgfHwgZmFsc2U7XG5cblx0aWYoIW9iaikge1xuXHRcdG9iaiA9IHRoaXM7XG5cdH1cblxuXHR2YXIgb3BzID0ge307XG5cdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBvYmouZ2F0ZXMubGVuZ3RoOyB3aXJlKyspIHtcblx0XHRmb3IodmFyIGNvbCA9IDA7IGNvbCA8IG9iai5nYXRlc1t3aXJlXS5sZW5ndGg7IGNvbCsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IG9iai5nYXRlc1t3aXJlXVtjb2xdO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmNvbm5lY3RvciA9PSAwKSB7XG5cdFx0XHRcdHZhciBiYXNpY0dhdGUgPSB0aGlzLmJhc2ljR2F0ZXNbZ2F0ZS5uYW1lXTtcblx0XHRcdFx0aWYoYmFzaWNHYXRlKSB7XG5cdFx0XHRcdFx0aWYob3BzW2dhdGUubmFtZV0pIHtcblx0XHRcdFx0XHRcdG9wc1tnYXRlLm5hbWVdKys7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG9wc1tnYXRlLm5hbWVdID0gMTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dmFyIGN1c3RvbUdhdGUgPSB0aGlzLmN1c3RvbUdhdGVzW2dhdGUubmFtZV07XG5cdFx0XHRcdFx0aWYoY3VzdG9tR2F0ZSkge1xuXHRcdFx0XHRcdFx0aWYob3BzW2dhdGUubmFtZV0pIHtcblx0XHRcdFx0XHRcdFx0b3BzW2dhdGUubmFtZV0rKztcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdG9wc1tnYXRlLm5hbWVdID0gMTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYoIW9wdGlvbnMuc2hhbGxvdykge1xuXHRcdFx0XHRcdFx0XHR2YXIgc3ViT3BzID0gdGhpcy5jb3VudE9wcyhjdXN0b21HYXRlLCBvcHRpb25zKTtcblx0XHRcdFx0XHRcdFx0Zm9yKHN1Yk5hbWUgaW4gc3ViT3BzKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYob3BzW3N1Yk5hbWVdKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRvcHNbc3ViTmFtZV0gKz0gc3ViT3BzW3N1Yk5hbWVdO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRvcHNbc3ViTmFtZV0gPSBzdWJPcHNbc3ViTmFtZV07XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG9wcztcbn07XG5cblxuLy9cbi8vIFJldHVybnMgYXJyYXlzIG9mIHF1Yml0cyB3aGVyZSBnYXRlcyBhcmUgcHJlc2VudFxuLy9cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5nZXRDb3VwbGluZ01hcCA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0dmFyIGNvdXBsaW5nTWFwID0gXCJcIjtcblxuXHR2YXIgZGVjb21wb3NlZCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRkZWNvbXBvc2VkLmxvYWQodGhpcy5zYXZlKHRydWUpKTtcblxuXHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgZGVjb21wb3NlZC5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdGZvcih2YXIgY29sID0gMDsgY29sIDwgZGVjb21wb3NlZC5udW1Db2xzKCk7IGNvbCsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGRlY29tcG9zZWQuZ2V0R2F0ZUF0KGNvbCwgd2lyZSk7XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0dmFyIHNraXBHYXRlID0gZmFsc2U7XG5cblx0XHRcdFx0aWYob3B0aW9ucy51bml0YXJpZXNPbmx5KSB7XG5cdFx0XHRcdFx0dmFyIGJhc2ljR2F0ZSA9IGRlY29tcG9zZWQuYmFzaWNHYXRlc1tnYXRlLm5hbWVdO1xuXHRcdFx0XHRcdGlmKCFiYXNpY0dhdGUgfHwgIWJhc2ljR2F0ZS5tYXRyaXggfHwgIWJhc2ljR2F0ZS5tYXRyaXgubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRza2lwR2F0ZSA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYoIXNraXBHYXRlKSB7XG5cdFx0XHRcdFx0dmFyIHdpcmVzU3RyID0gSlNPTi5zdHJpbmdpZnkoZ2F0ZS53aXJlcyk7XG5cdFx0XHRcdFx0aWYoY291cGxpbmdNYXAuaW5kZXhPZih3aXJlc1N0cikgPCAwKSB7XG5cdFx0XHRcdFx0XHRpZihjb3VwbGluZ01hcCkge1xuXHRcdFx0XHRcdFx0XHRjb3VwbGluZ01hcCArPSBcIixcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGNvdXBsaW5nTWFwICs9IHdpcmVzU3RyO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBKU09OLnBhcnNlKFwiW1wiICsgY291cGxpbmdNYXAgKyBcIl1cIik7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZ2V0R2F0ZURlZiA9IGZ1bmN0aW9uKG5hbWUpIHtcblx0dmFyIGdhdGVEZWYgPSB0aGlzLmJhc2ljR2F0ZXNbbmFtZV07XG5cdGlmKCFnYXRlRGVmKSB7XG5cdFx0Z2F0ZURlZiA9IHRoaXMuY3VzdG9tR2F0ZXNbbmFtZV07XG5cdH1cblx0cmV0dXJuIGdhdGVEZWY7XG59O1xuXG4vLyAtLS1cbi8vIEltcG9ydCBmcm9tIFF1Yml0IFRvYXN0ZXJcbi8vIC0tLVxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmltcG9ydFJhdyA9IGZ1bmN0aW9uKGRhdGEsIGVycm9yQ2FsbGJhY2spIHtcblx0dmFyIG51bVF1Yml0cyA9IGRhdGEgPyAoZGF0YS5xdWJpdHMgfHwgMCkgOiAwO1xuXG5cdHRoaXMuaW5pdChudW1RdWJpdHMpO1xuXG5cdGlmKCFkYXRhKSB7XG5cdFx0aWYoZXJyb3JDYWxsYmFjaykge1xuXHRcdFx0ZXJyb3JDYWxsYmFjayhbXSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdH1cblxuXHQvLyBpbXBvcnQgY2xhc3NpY2FsIHJlZ2lzdGVyc1xuXHRpZihkYXRhLmNyZWdzKSB7XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IGRhdGEuY3JlZ3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBjcmVnID0gZGF0YS5jcmVnc1tpXTtcblxuXHRcdFx0aWYoIWNyZWcubmFtZSkge1xuXHRcdFx0XHR2YXIgZXJyb3JNZXNzYWdlID0gXCJDbGFzc2ljYWwgcmVnaXN0ZXIgXCIgKyBpICsgXCIgZG9lc24ndCBoYXZlIGEgXFxcIm5hbWVcXFwiLlwiO1xuXHRcdFx0XHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0ZXJyb3JDYWxsYmFjayhbIHsgbXNnOiBlcnJvck1lc3NhZ2UsIGxpbmU6IDAsIGNvbDogMCB9IF0pO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLmNyZWF0ZUNyZWcoY3JlZy5uYW1lLCBjcmVnLmxlbiB8fCAwKTtcblx0XHR9XG5cdH1cblxuXHQvLyBpbXBvcnQgcHJvZ3JhbVxuXHRpZihkYXRhLnByb2dyYW0pIHtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgZGF0YS5wcm9ncmFtLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGRhdGEucHJvZ3JhbVtpXTtcblxuXHRcdFx0Ly8gSW1wb3J0IGZyb20gbWF0cml4IGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQsIHNvIGJlc3Qgd2UgaGF2ZSBpcyBnYXRlIG5hbWVcblx0XHRcdC8vIENoZWNrIGlmIGdhdGUgaGFzIG5hbWVcblx0XHRcdGlmKCFnYXRlLm5hbWUpIHtcblx0XHRcdFx0dmFyIGVycm9yTWVzc2FnZSA9IFwiR2F0ZSBcIiArIGkgKyBcIiBkb2Vzbid0IGhhdmUgYSBcXFwibmFtZVxcXCIuIE5hbWUgaXMgb3B0aW9uYWwgYW5kIHRoaXMgaXMgT0sgZm9yIFF1Yml0VG9hc3RlciBidXQgd2UgY2Fubm90IGltcG9ydCBnYXRlIGZyb20gbWF0cml4LiBOb3QgaW1wbGVtZW50ZWQgeWV0LlwiO1xuXHRcdFx0XHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0ZXJyb3JDYWxsYmFjayhbIHsgbXNnOiBlcnJvck1lc3NhZ2UsIGxpbmU6IDAsIGNvbDogMCB9IF0pO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBDaGVjayBpZiBnYXRlIG5hbWUgZXhpc3RzIGluIHRoaXMuYmFzaWNHYXRlc1xuXHRcdFx0dmFyIGJhc2ljR2F0ZSA9IHRoaXMuYmFzaWNHYXRlc1tnYXRlLm5hbWVdO1xuXHRcdFx0aWYoIWJhc2ljR2F0ZSkge1xuXHRcdFx0XHR2YXIgZXJyb3JNZXNzYWdlID0gXCJVbmtub3duIGdhdGUgXFxcIlwiICsgZ2F0ZS5uYW1lICsgXCJcXFwiLiBOYW1lIGlzIG9wdGlvbmFsIGFuZCB0aGlzIGlzIE9LIGZvciBRdWJpdFRvYXN0ZXIgYnV0IHdlIGNhbm5vdCBpbXBvcnQgZ2F0ZSBmcm9tIG1hdHJpeC4gV2UgY2FuIGltcG9ydCBvbmx5IGdhdGVzIGJ5IG5hbWUgZnJvbSBzZXQgb2Yga25vd24gZ2F0ZXMuXCI7XG5cdFx0XHRcdGlmKGVycm9yQ2FsbGJhY2spIHtcblx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKFsgeyBtc2c6IGVycm9yTWVzc2FnZSwgbGluZTogMCwgY29sOiAwIH0gXSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblxuXHRcdFx0dmFyIHdpcmVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShnYXRlLndpcmVzIHx8IFtdKSk7XG5cdFx0XHR2YXIgb3B0aW9ucyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZ2F0ZS5vcHRpb25zIHx8IHt9KSk7XG5cblx0XHRcdC8vIGNoZWNrIGlmIG51bWJlciBvZiB3aXJlcyBpcyBjb3JyZWN0XG5cdFx0XHR2YXIgYmFzaWNHYXRlUXViaXRzID0gYmFzaWNHYXRlLm1hdHJpeCAmJiBiYXNpY0dhdGUubWF0cml4Lmxlbmd0aCA/IG1hdGgubG9nMihiYXNpY0dhdGUubWF0cml4Lmxlbmd0aCkgOiAxO1xuXHRcdFx0aWYod2lyZXMubGVuZ3RoICE9IGJhc2ljR2F0ZVF1Yml0cykge1xuXHRcdFx0XHR2YXIgZXJyb3JNZXNzYWdlID0gXCJHYXRlIFxcXCJcIiArIGdhdGUubmFtZSArIFwiXFxcIiBoYXMgXCIgKyB3aXJlcy5sZW5ndGggKyBcIiB3aXJlcyBidXQgc2hvdWxkIGhhdmUgXCIgKyBiYXNpY0dhdGVRdWJpdHMgKyBcIiB3aXJlcy5cIjtcblx0XHRcdFx0aWYoZXJyb3JDYWxsYmFjaykge1xuXHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soWyB7IG1zZzogZXJyb3JNZXNzYWdlLCBsaW5lOiAwLCBjb2w6IDAgfSBdKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2hlY2sgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIHByZXNlbnRcblx0XHRcdGlmKGJhc2ljR2F0ZS5wYXJhbXMgJiYgYmFzaWNHYXRlLnBhcmFtcy5sZW5ndGgpIHtcblx0XHRcdFx0aWYoIW9wdGlvbnMucGFyYW1zKSB7XG5cdFx0XHRcdFx0dmFyIGVycm9yTWVzc2FnZSA9IFwiTWlzc2luZyBwYXJhbWV0ZXJzIGZvciBnYXRlIFxcXCJcIiArIGdhdGUubmFtZSArIFwiXFxcIi4gRXhwZWN0aW5nIFwiICsgYmFzaWNHYXRlLnBhcmFtcy5sZW5ndGggKyBcIiBwYXJhbWV0ZXJzLlwiO1xuXHRcdFx0XHRcdGlmKGVycm9yQ2FsbGJhY2spIHtcblx0XHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soWyB7IG1zZzogZXJyb3JNZXNzYWdlLCBsaW5lOiAwLCBjb2w6IDAgfSBdKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Zm9yKHZhciBwID0gMDsgcCA8IGJhc2ljR2F0ZS5wYXJhbXMubGVuZ3RoOyBwKyspIHtcblx0XHRcdFx0XHR2YXIgcGFyYW1OYW1lID0gYmFzaWNHYXRlLnBhcmFtc1twXTtcblxuXHRcdFx0XHRcdGlmKHR5cGVvZiBvcHRpb25zLnBhcmFtc1twYXJhbU5hbWVdID09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdFx0XHRcdHZhciBlcnJvck1lc3NhZ2UgPSBcIk1pc3NpbmcgcGFyYW1ldGVyIFxcXCJcIiArIHBhcmFtTmFtZSArIFwiXFxcIiBmb3IgZ2F0ZSBcXFwiXCIgKyBnYXRlLm5hbWUgKyBcIlxcXCIuXCI7XG5cdFx0XHRcdFx0XHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soWyB7IG1zZzogZXJyb3JNZXNzYWdlLCBsaW5lOiAwLCBjb2w6IDAgfSBdKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRoaXMuYXBwZW5kR2F0ZShnYXRlLm5hbWUsIHdpcmVzLCBvcHRpb25zKTtcblx0XHR9XG5cdH1cblxuXHQvLyBUaGlzIGVycm9yIGhhbmRsaW5nIGlzIGNyKnAgYnV0IGxldCdzIGJlIGNvbnNpc3RlbnQgd2l0aCBpbXBvcnRRQVNNKCkgZm9yIG5vd1xuXHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0ZXJyb3JDYWxsYmFjayhbXSk7XG5cdH1cbn07XG5cbi8vIC0tLVxuLy8gRXhwb3J0IHRvIFF1Yml0IFRvYXN0ZXJcbi8vIC0tLVxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFJhdyA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgZ2xvYmFsUGFyYW1zID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5wYXJhbXMgPyB0aGlzLm9wdGlvbnMucGFyYW1zIDoge307XG5cdHZhciBnbG9iYWxQYXJhbXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGdsb2JhbFBhcmFtcykpO1xuXHRmb3IodmFyIGdsb2JhbFBhcmFtTmFtZSBpbiBnbG9iYWxQYXJhbXMpIHtcblx0XHRnbG9iYWxQYXJhbXNbZ2xvYmFsUGFyYW1OYW1lXSA9IG1hdGguZXZhbHVhdGUoZ2xvYmFsUGFyYW1zW2dsb2JhbFBhcmFtTmFtZV0pO1xuXHR9XG5cblx0dmFyIGRlY29tcG9zZWQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0ZGVjb21wb3NlZC5sb2FkKHRoaXMuc2F2ZSh0cnVlKSk7XG5cblx0dmFyIG51bUNvbHMgPSBkZWNvbXBvc2VkLm51bUNvbHMoKTtcblx0dmFyIHNlcXVlbmNlID0gW107XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgZGVjb21wb3NlZC5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSBkZWNvbXBvc2VkLmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmNvbm5lY3RvciA9PSAwKSB7XG5cdFx0XHRcdHZhciBndCA9IGRlY29tcG9zZWQuYmFzaWNHYXRlc1tnYXRlLm5hbWVdO1xuXHRcdFx0XHRpZighZ3QpIHtcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhcIlVua25vd24gZ2F0ZSBcXFwiXCIgKyBnYXRlLm5hbWUgKyBcIlxcXCIuXCIpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhciByYXdHYXRlID0gZGVjb21wb3NlZC5nZXRSYXdHYXRlKGd0LCBnYXRlLm9wdGlvbnMpO1xuXG5cdFx0XHRcdHZhciByYXdNYXRyaXggPSBbXTtcblx0XHRcdFx0cmF3R2F0ZS5tYXAoZnVuY3Rpb24ocm93KSB7XG5cdFx0XHRcdFx0dmFyIHJhd1JvdyA9IFtdO1xuXHRcdFx0XHRcdHJvdy5tYXAoZnVuY3Rpb24oY2VsbCkge1xuXHRcdFx0XHRcdFx0Y2VsbCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY2VsbCkpO1xuXHRcdFx0XHRcdFx0aWYodHlwZW9mIGNlbGwgPT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdFx0XHRpZihjZWxsW1wibWF0aGpzXCJdICYmIHR5cGVvZiBjZWxsW1wibWF0aGpzXCJdID09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHRcdFx0XHRjZWxsW1widHlwZVwiXSA9IGNlbGxbXCJtYXRoanNcIl0udG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0XHRcdFx0XHRkZWxldGUgY2VsbC5tYXRoanM7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJhd1Jvdy5wdXNoKGNlbGwpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdHJhd01hdHJpeC5wdXNoKHJhd1Jvdyk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHZhciBvcHRpb25zID0ge307XG5cdFx0XHRcdGlmKGdhdGUub3B0aW9ucykge1xuXHRcdFx0XHRcdG9wdGlvbnMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGdhdGUub3B0aW9ucykpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYob3B0aW9ucy5wYXJhbXMpIHtcblx0XHRcdFx0XHRmb3IodmFyIHBhcmFtTmFtZSBpbiBvcHRpb25zLnBhcmFtcykge1xuXHRcdFx0XHRcdFx0b3B0aW9ucy5wYXJhbXNbcGFyYW1OYW1lXSA9IG1hdGguZXZhbHVhdGUob3B0aW9ucy5wYXJhbXNbcGFyYW1OYW1lXSwgZ2xvYmFsUGFyYW1zKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzZXF1ZW5jZS5wdXNoKHtcblx0XHRcdFx0XHRuYW1lOiBnYXRlLm5hbWUsXG5cdFx0XHRcdFx0bWF0cml4OiByYXdNYXRyaXgsXG5cdFx0XHRcdFx0d2lyZXM6IGdhdGUud2lyZXMsXG5cdFx0XHRcdFx0b3B0aW9uczogb3B0aW9uc1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHR2YXIgY3JlZ3MgPSBbXTtcblx0Zm9yKHZhciBjcmVnIGluIGRlY29tcG9zZWQuY3JlZ3MpIHtcblx0XHRjcmVncy5wdXNoKHtcblx0XHRcdG5hbWU6IGNyZWcsXG5cdFx0XHRsZW46IGRlY29tcG9zZWQuY3JlZ3NbY3JlZ10ubGVuZ3RoIHx8IDBcblx0XHR9KTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0cXViaXRzOiBkZWNvbXBvc2VkLm51bVF1Yml0cyxcblx0XHRjcmVnczogY3JlZ3MsXG5cdFx0cHJvZ3JhbTogc2VxdWVuY2Vcblx0fTtcbn07XG5cbi8vXG4vLyBSZXR1cm5zIGlucHV0IGZpbGUgZm9yIFF1YW50dW0gR2VuZXJhdG9yXG4vL1xuLy8gb3B0aW9uczogeyBcbi8vICAgICBub1ZlY3RvcnM6IGJvb2wgKGRlZmF1bHQ6IGZhbHNlKSAvLyBzZXQgdHJ1ZSBmb3IgdHJhbnNwaWxpbmcgd2l0aCBcInJlcGxhY2VfYmxvY2tzXCIgJiBcInJlcGxhY2VfZ2F0ZXNcIiBtZXRob2RzIHRvIGF2b2lkIGdlbmVyYXRpbmcgKGxhcmdlKSB2ZWN0b3JzXG4vLyAgICAgZnJvbU1hdHJpeDogYm9vbCAoZGVmYXVsdDogZmFsc2UpIC8vIGRpcmVjdGx5IHNlbmQgbWF0cml4IHRvIGdlbmVyYXRvciAoaW5zdGVhZCB2ZWN0b3JzKVxuLy8gICAgIG51bVNhbXBsZXM6IGludCAoZGVmYXVsdDogYXV0bykgLy8gbnVtYmVyIG9mIHJhbmRvbSB2ZWN0b3JzXG4vLyAgICAgdXNlR2F0ZXM6IGFycmF5IG9mIHN0cmluZyAoZGVmYXVsdDogW1widTMsIFwiY3hcIl0pIC8vIGdhdGVzIHRvIHVzZSB3aGVuIGdlbmVyYXRpbmcgcmFuZG9tIHZlY3RvcnNcbi8vIH1cbi8vXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRUb0dlbmVyYXRvciA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0dmFyIHFhc20gPSB0aGlzLmV4cG9ydFFBU00obnVsbCwgZmFsc2UsIG51bGwsIGZhbHNlLCB0cnVlKTtcblx0dmFyIHVzZWRHYXRlcyA9IHRoaXMudXNlZEdhdGVzKHsgbm9DdXN0b21HYXRlczogdHJ1ZSwgdW5pdGFyaWVzT25seTogdHJ1ZSB9KTtcblx0dmFyIGNvdXBsaW5nTWFwID0gdGhpcy5nZXRDb3VwbGluZ01hcCh7IHVuaXRhcmllc09ubHk6IHRydWUgfSk7XG5cblx0dmFyIG91dHB1dCA9IHtcblx0XHRzb3VyY2U6IHsgXG5cdFx0XHRjaXJjdWl0OiB7IFxuXHRcdFx0XHRxYXNtOiBxYXNtXG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHByb2JsZW06IFtdLFxuXG5cdFx0dHlwZTogXCJjaXJjdWl0XCIsXG5cblx0XHRzZXR0aW5nczoge1xuXHRcdFx0YWxsb3dlZF9nYXRlczogdXNlZEdhdGVzLmpvaW4oXCIsXCIpLFxuXHRcdFx0Y291cGxpbmdfbWFwOiBjb3VwbGluZ01hcFxuXHRcdH1cblx0fTtcblxuXHR2YXIgY2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRjaXJjdWl0LmxvYWQodGhpcy5zYXZlKHRydWUpKTtcblxuXHRpZihvcHRpb25zLmZyb21NYXRyaXgpIHtcblx0XHR2YXIgbWF0cml4ID0gY2lyY3VpdC5jaXJjdWl0TWF0cml4KCk7XG5cdFx0dmFyIHVuaXRhcnkgPSBbXTtcblxuXHRcdG1hdHJpeC5tYXAoZnVuY3Rpb24ocm93KSB7XG5cdFx0XHRyb3cubWFwKGZ1bmN0aW9uKHZhbHVlKSB7XG5cdFx0XHRcdGlmKHR5cGVvZiB2YWx1ZSA9PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0dW5pdGFyeS5wdXNoKFt2YWx1ZS5yZSwgdmFsdWUuaW1dKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR1bml0YXJ5LnB1c2godmFsdWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdG91dHB1dC5wcm9ibGVtLnB1c2goe1xuXHRcdFx0dW5pdGFyeTogdW5pdGFyeVxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIG91dHB1dDtcblx0fVxuXG5cdGlmKCFvcHRpb25zLm5vVmVjdG9ycykge1xuXHRcdHZhciBzdGF0ZUNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblxuXHRcdHZhciBudW1TYW1wbGVzID0gb3B0aW9ucy5udW1TYW1wbGVzIHx8ICh0aGlzLm51bVF1Yml0cyA8IDMgPyA4IDogKHRoaXMubnVtUXViaXRzIDwgNSA/ICgoMSA8PCB0aGlzLm51bVF1Yml0cykgKyAxKSA6ICh0aGlzLm51bVF1Yml0cyA8IDkgPyAodGhpcy5udW1RdWJpdHMgKiA0KSA6IHRoaXMubnVtUXViaXRzKSkpO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBudW1TYW1wbGVzICsgMTsgaSsrKSB7XG5cblx0XHRcdHZhciBzZXQgPSB7IGlucHV0OiBbXSwgb3V0cHV0OiBbXSB9O1xuXG5cdFx0XHR2YXIgaW5pdGlhbFZlY3RvciA9IFtdO1xuXG5cdFx0XHRpZihpID4gMCkge1xuXHRcdFx0XHRzdGF0ZUNpcmN1aXQucmFuZG9tQ2lyY3VpdCh0aGlzLm51bVF1Yml0cywgMjAsIHsgdXNlR2F0ZXM6IG9wdGlvbnMudXNlR2F0ZXMgfHwgW1widTNcIiwgXCJjeFwiXSwgbm9DbGFzc2ljQ29udHJvbDogdHJ1ZSwgbm9NZWFzdXJlOiB0cnVlLCBub1Jlc2V0OiB0cnVlIH0pO1xuXHRcdFx0XHRzdGF0ZUNpcmN1aXQucnVuKCk7XG5cblx0XHRcdFx0c3RhdGVDaXJjdWl0LnN0YXRlQXNBcnJheSgpLm1hcChmdW5jdGlvbihzdGF0ZSkge1xuXHRcdFx0XHRcdHNldC5pbnB1dC5wdXNoKFsgc3RhdGUuYW1wbGl0dWRlLnJlLCBzdGF0ZS5hbXBsaXR1ZGUuaW0gXSk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGluaXRpYWxWZWN0b3IgPSBzdGF0ZUNpcmN1aXQuc3RhdGU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjaXJjdWl0LmluaXRTdGF0ZSgpO1xuXG5cdFx0XHRcdGNpcmN1aXQuc3RhdGVBc0FycmF5KCkubWFwKGZ1bmN0aW9uKHN0YXRlKSB7XG5cdFx0XHRcdFx0c2V0LmlucHV0LnB1c2goWyBzdGF0ZS5hbXBsaXR1ZGUucmUsIHN0YXRlLmFtcGxpdHVkZS5pbSBdKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0aW5pdGlhbFZlY3RvciA9IGNpcmN1aXQuc3RhdGU7XG5cdFx0XHR9XG5cblx0XHRcdGNpcmN1aXQucnVuKG51bGwsIHsgaW5pdGlhbFN0YXRlOiBpbml0aWFsVmVjdG9yIH0pO1xuXG5cdFx0XHRjaXJjdWl0LnN0YXRlQXNBcnJheSgpLm1hcChmdW5jdGlvbihzdGF0ZSkge1xuXHRcdFx0XHRzZXQub3V0cHV0LnB1c2goWyBzdGF0ZS5hbXBsaXR1ZGUucmUsIHN0YXRlLmFtcGxpdHVkZS5pbSBdKTtcblx0XHRcdH0pO1xuXG5cdFx0XHRvdXRwdXQucHJvYmxlbS5wdXNoKHNldCk7XG5cdFx0fVxuXHRcdHJldHVybiBvdXRwdXQ7XG5cdH1cblxuXHRyZXR1cm4gb3V0cHV0O1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuc2F2ZSA9IGZ1bmN0aW9uKGRlY29tcG9zZSwgbGlnaHR3ZWlnaHQpIHtcblx0dGhpcy51cGRhdGVHbG9iYWxQYXJhbXMoKTtcblxuXHR2YXIgZGF0YSA9IHtcblx0XHRudW1RdWJpdHM6IHRoaXMubnVtUXViaXRzLFxuXHRcdHBhcmFtczogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnBhcmFtcykpLFxuXHRcdG9wdGlvbnM6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5vcHRpb25zKSksXG5cdFx0Z2F0ZXM6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5nYXRlcykpLFxuXHRcdGN1c3RvbUdhdGVzOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuY3VzdG9tR2F0ZXMpKSxcblx0XHRjcmVnczogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmNyZWdzKSlcblx0fVxuXG5cdHZhciByZXMgPSBudWxsO1xuXHRpZihkZWNvbXBvc2UpIHtcblx0XHRyZXMgPSB0aGlzLmRlY29tcG9zZShkYXRhKTtcblx0fSBlbHNlIHtcblx0XHRyZXMgPSBkYXRhO1xuXHR9XG5cblx0Ly8gLS0tXG5cdC8vIHJlbW92ZSBJZCBmcm9tIGdhdGVzP1xuXHQvLyAtLS1cblx0aWYobGlnaHR3ZWlnaHQpIHtcblx0XHRpZihyZXMuZ2F0ZXMpIHtcblx0XHRcdHJlcy5nYXRlcy5tYXAoZnVuY3Rpb24ocm93KSB7XG5cdFx0XHRcdGlmKHJvdykge1xuXHRcdFx0XHRcdHJvdy5tYXAoZnVuY3Rpb24oY2VsbCkge1xuXHRcdFx0XHRcdFx0aWYoY2VsbCAmJiBjZWxsLmlkKSB7XG5cdFx0XHRcdFx0XHRcdGRlbGV0ZSBjZWxsLmlkO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRpZihyZXMuY3VzdG9tR2F0ZXMpIHtcblx0XHRcdGZvcih2YXIgY3VzdG9tR2F0ZU5hbWUgaW4gcmVzLmN1c3RvbUdhdGVzKSB7XG5cdFx0XHRcdHZhciBjdXN0b21HYXRlID0gcmVzLmN1c3RvbUdhdGVzW2N1c3RvbUdhdGVOYW1lXTtcblx0XHRcdFx0aWYoY3VzdG9tR2F0ZSAmJiBjdXN0b21HYXRlLmdhdGVzKSB7XG5cdFx0XHRcdFx0Y3VzdG9tR2F0ZS5nYXRlcy5tYXAoZnVuY3Rpb24ocm93KSB7XG5cdFx0XHRcdFx0XHRpZihyb3cpIHtcblx0XHRcdFx0XHRcdFx0cm93Lm1hcChmdW5jdGlvbihjZWxsKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYoY2VsbCAmJiBjZWxsLmlkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRkZWxldGUgY2VsbC5pZDtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdC8vIC0tLVxuXG5cdHJldHVybiByZXM7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUubG9hZCA9IGZ1bmN0aW9uKG9iaikge1xuXHR0aGlzLm51bVF1Yml0cyA9IG9iai5udW1RdWJpdHMgfHwgMTtcblx0dGhpcy5jbGVhcigpO1xuXHR0aGlzLnBhcmFtcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqLnBhcmFtcyB8fCBbXSkpO1xuXHR0aGlzLm9wdGlvbnMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9iai5vcHRpb25zIHx8IHt9KSk7XG5cdHRoaXMuZ2F0ZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9iai5nYXRlcyB8fCBbXSkpO1xuXHR0aGlzLmN1c3RvbUdhdGVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmouY3VzdG9tR2F0ZXMgfHwge30pKTtcblx0dGhpcy5jcmVncyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqLmNyZWdzIHx8IHt9KSk7XG5cdC8vIGRlZmF1bHQgb3B0aW9uc1xuXHR0aGlzLm9wdGlvbnMucGFyYW1zID0gdGhpcy5vcHRpb25zLnBhcmFtcyB8fCB7fTtcblx0dGhpcy5vcHRpb25zLmh5YnJpZCA9IHRoaXMub3B0aW9ucy5oeWJyaWQgfHwgZmFsc2U7XG5cdGlmKCF0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucykge1xuXHRcdHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zID0gdGhpcy5kZWZhdWx0SHlicmlkT3B0aW9ucygpO1xuXHR9XG59O1xuXG5cbnZhciBnZW5lcmF0ZUdyYXlDb2RlID0gZnVuY3Rpb24obnVtQml0cykge1xuXHRpZihudW1CaXRzIDw9IDApIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZ2VuZXJhdGUgdGhlIGdyYXkgY29kZSBmb3IgbGVzcyB0aGFuIDEgYml0LlwiKTtcblx0fVxuXG5cdHZhciByZXN1bHQgPSBbMF07XG5cdGZvcihpID0gMDsgaSA8IG51bUJpdHM7IGkrKykge1xuXHRcdHZhciByZXZlcnNlZCA9IFtdLmNvbmNhdChyZXN1bHQpLnJldmVyc2UoKTtcblx0XHRyZXZlcnNlZC5tYXAoZnVuY3Rpb24oeCkge1xuXHRcdFx0cmVzdWx0LnB1c2goeCArIG1hdGgucG93KDIsIGkpKTtcblx0XHR9KTtcblx0fVxuXG5cdHZhciBncmF5ID0gW107XG5cdHJlc3VsdC5tYXAoZnVuY3Rpb24oZGVjKSB7XG5cdFx0Z3JheS5wdXNoKGJpblN0cihkZWMsIG51bUJpdHMpKTtcblx0fSk7XG5cblx0cmV0dXJuIGdyYXk7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5ncmF5Q29kZUNoYWluID0gZnVuY3Rpb24obnVtQ3RybFF1Yml0cywgZ2F0ZU5hbWUsIGdhdGVPcHRpb25zKSB7XG5cblx0ZnVuY3Rpb24gY29tcGFyZVN0cmluZ3MoczEsIHMyKSB7XG5cdFx0dmFyIGNvbXAgPSBbXTtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgczEubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbXAucHVzaChzMVtpXSAhPSBzMltpXSk7XG5cdFx0fVxuXHRcdHJldHVybiBjb21wO1xuXHR9XG5cblx0ZnVuY3Rpb24gaW5kaWNlc09mQ2hhcihzLCBjaCkge1xuXHRcdHZhciBpbmRpY2VzID0gW107XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmKHNbaV0gPT0gY2gpIHtcblx0XHRcdFx0aW5kaWNlcy5wdXNoKGkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gaW5kaWNlcztcblx0fVxuXG5cdGZ1bmN0aW9uIGNvdW50Q2hhcihzLCBjaCkge1xuXHRcdHZhciBjb3VudCA9IDA7XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmKHNbaV0gPT0gY2gpIHtcblx0XHRcdFx0Y291bnQrKztcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGNvdW50O1xuXHR9XG5cblx0dmFyIHFDb250cm9scyA9IFtdO1xuXHRmb3IodmFyIGkgPSAwOyBpIDwgbnVtQ3RybFF1Yml0czsgaSsrKSB7XG5cdFx0cUNvbnRyb2xzLnB1c2goaSk7XG5cdH1cblxuXHR2YXIgcVRhcmdldCA9IG51bUN0cmxRdWJpdHM7XG5cdHZhciBncmF5Q29kZSA9IGdlbmVyYXRlR3JheUNvZGUobnVtQ3RybFF1Yml0cyk7XG5cdHZhciBsYXN0UGF0dGVybiA9IG51bGw7XG5cblx0dmFyIHJ1bGVzID0gW107XG5cdGdyYXlDb2RlLm1hcChmdW5jdGlvbihwYXR0ZXJuKSB7XG5cdFx0dmFyIGxtUG9zID0gcGF0dGVybi5pbmRleE9mKFwiMVwiKTtcblx0XHRpZihsbVBvcyA+PSAwKSB7XG5cdFx0XHRpZighbGFzdFBhdHRlcm4pIHtcblx0XHRcdFx0bGFzdFBhdHRlcm4gPSBwYXR0ZXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgY29tcCA9IGNvbXBhcmVTdHJpbmdzKHBhdHRlcm4sIGxhc3RQYXR0ZXJuKTtcblx0XHRcdHZhciBwb3MgPSBjb21wLmluZGV4T2YodHJ1ZSk7XG5cdFx0XHRpZihwb3MgPj0gMCkge1xuXHRcdFx0XHRpZihwb3MgIT0gbG1Qb3MpIHtcblx0XHRcdFx0XHRydWxlcy5wdXNoKHsgZ2F0ZU5hbWU6IFwiY3hcIiwgd2lyZXM6IFsgcUNvbnRyb2xzW3Bvc10sIHFDb250cm9sc1tsbVBvc10gXSwgb3B0aW9uczogbnVsbCB9KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YXIgaW5kaWNlcyA9IGluZGljZXNPZkNoYXIocGF0dGVybiwgXCIxXCIpO1xuXHRcdFx0XHRcdGZvcih2YXIgaWR4ID0gMTsgaWR4IDwgaW5kaWNlcy5sZW5ndGg7IGlkeCsrKSB7XG5cdFx0XHRcdFx0XHRydWxlcy5wdXNoKHsgZ2F0ZU5hbWU6IFwiY3hcIiwgd2lyZXM6IFsgcUNvbnRyb2xzW2luZGljZXNbaWR4XV0sIHFDb250cm9sc1tsbVBvc10gXSwgb3B0aW9uczogbnVsbCB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYoIShjb3VudENoYXIocGF0dGVybiwgXCIxXCIpICUgMikpIHtcblx0XHRcdFx0Ly8gaW52ZXJzZVxuXHRcdFx0XHQvLyAhISFcblx0XHRcdFx0Ly8gV2FybmluZyAtIHRoaXMgd29ya3Mgb25seSB3aXRoIGdhdGUgd2hpY2ggaXMgb3duIGludmVyc2Vcblx0XHRcdFx0Ly8gVE9ETzogaW1wbGVtZW50IHByb3BlciBpbnZlcnNlIGZvciBhbGwgZ2F0ZXNcblx0XHRcdFx0Ly8gISEhXG5cdFx0XHRcdHZhciBpbnZlcnNlT3B0aW9ucyA9IG51bGw7XG5cdFx0XHRcdGlmKGdhdGVPcHRpb25zKSB7XG5cdFx0XHRcdFx0aW52ZXJzZU9wdGlvbnMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGdhdGVPcHRpb25zKSk7XG5cdFx0XHRcdFx0aWYoaW52ZXJzZU9wdGlvbnMucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRmb3Ioa2V5IGluIGludmVyc2VPcHRpb25zLnBhcmFtcykge1xuXHRcdFx0XHRcdFx0XHR2YXIgdmFsID0gaW52ZXJzZU9wdGlvbnMucGFyYW1zW2tleV07XG5cdFx0XHRcdFx0XHRcdGlmKHR5cGVvZiB2YWwgPT0gXCJudW1iZXJcIikge1xuXHRcdFx0XHRcdFx0XHRcdHZhbCA9IDAgLSB2YWw7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFsID0gXCItKFwiICsgdmFsICsgXCIpXCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aW52ZXJzZU9wdGlvbnMucGFyYW1zW2tleV0gPSB2YWw7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJ1bGVzLnB1c2goeyBnYXRlTmFtZTogZ2F0ZU5hbWUsIHdpcmVzOiBbIHFDb250cm9sc1tsbVBvc10sIHFUYXJnZXQgXSwgb3B0aW9uczogaW52ZXJzZU9wdGlvbnMgfSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRydWxlcy5wdXNoKHsgZ2F0ZU5hbWU6IGdhdGVOYW1lLCB3aXJlczogWyBxQ29udHJvbHNbbG1Qb3NdLCBxVGFyZ2V0IF0sIG9wdGlvbnM6IGdhdGVPcHRpb25zIH0pO1xuXHRcdFx0fVxuXHRcdFx0bGFzdFBhdHRlcm4gPSBwYXR0ZXJuO1xuXHRcdH1cblx0fSk7XG5cblx0cmV0dXJuIHJ1bGVzO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuTUNVMUNpcmN1aXQgPSBmdW5jdGlvbihjdHJsUXViaXRzKSB7XG5cdHZhciBudW1DdHJsUXViaXRzID0gMDtcblx0dmFyIGludmVydENvbnRyb2xzID0gW107XG5cdGlmKHR5cGVvZiBjdHJsUXViaXRzID09IFwibnVtYmVyXCIpIHtcblx0XHRudW1DdHJsUXViaXRzID0gY3RybFF1Yml0cztcblx0fSBlbHNlIHtcblx0XHRudW1DdHJsUXViaXRzID0gY3RybFF1Yml0cy5sZW5ndGggfHwgMDtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgbnVtQ3RybFF1Yml0czsgaSsrKSB7XG5cdFx0XHRpZighY3RybFF1Yml0c1tpXSB8fCAodHlwZW9mIGN0cmxRdWJpdHNbaV0gPT0gXCJudW1iZXJcIiAmJiBjdHJsUXViaXRzW2ldIDwgMCkpIHtcblx0XHRcdFx0aW52ZXJ0Q29udHJvbHMucHVzaChpKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZihudW1DdHJsUXViaXRzID09IDApIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgY3JlYXRlIG11bHRpLWNvbnRyb2xsZWQgZ2F0ZSB3aXRoIHplcm8gY29udHJvbCBxdWJpdHMuXCIpO1xuXHR9XG5cblx0ZnVuY3Rpb24gYWRkWChjaXJjdWl0LCB3aXJlcykge1xuXHRcdHdpcmVzLm1hcChmdW5jdGlvbih3aXJlKSB7XG5cdFx0XHRjaXJjdWl0LmFwcGVuZEdhdGUoXCJ4XCIsIHdpcmUpO1xuXHRcdH0pO1xuXHR9XG5cblx0dmFyIHNjYWxlZExhbWJkYSA9IFwibGFtYmRhIC8gXCIgKyBtYXRoLnBvdygyLCBudW1DdHJsUXViaXRzIC0gMSk7XG5cdHZhciBnYXRlT3B0aW9ucyA9IHsgcGFyYW1zOiB7IGxhbWJkYTogc2NhbGVkTGFtYmRhIH0gfTtcblxuXHR2YXIgcWMgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblxuXHRpZihudW1DdHJsUXViaXRzID09IDEpIHtcblx0XHRhZGRYKHFjLCBpbnZlcnRDb250cm9scyk7XG5cdFx0cWMuYXBwZW5kR2F0ZShcImN1MVwiLCBbMCwgMV0sIGdhdGVPcHRpb25zKTtcblx0XHRhZGRYKHFjLCBpbnZlcnRDb250cm9scyk7XG5cdFx0cmV0dXJuIHFjO1xuXHR9XG5cblx0YWRkWChxYywgaW52ZXJ0Q29udHJvbHMpO1xuXHR2YXIgcnVsZXMgPSB0aGlzLmdyYXlDb2RlQ2hhaW4obnVtQ3RybFF1Yml0cywgXCJjdTFcIiwgZ2F0ZU9wdGlvbnMpO1xuXHRydWxlcy5tYXAoZnVuY3Rpb24ocnVsZSkge1xuXHRcdHFjLmFwcGVuZEdhdGUocnVsZS5nYXRlTmFtZSwgcnVsZS53aXJlcywgcnVsZS5vcHRpb25zKTtcblx0fSk7XG5cdGFkZFgocWMsIGludmVydENvbnRyb2xzKTtcblxuXHRyZXR1cm4gcWM7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5NQ1hDaXJjdWl0ID0gZnVuY3Rpb24oY3RybFF1Yml0cykge1xuXHR2YXIgbnVtQ3RybFF1Yml0cyA9IDA7XG5cdHZhciBpbnZlcnRDb250cm9scyA9IFtdO1xuXHRpZih0eXBlb2YgY3RybFF1Yml0cyA9PSBcIm51bWJlclwiKSB7XG5cdFx0bnVtQ3RybFF1Yml0cyA9IGN0cmxRdWJpdHM7XG5cdH0gZWxzZSB7XG5cdFx0bnVtQ3RybFF1Yml0cyA9IGN0cmxRdWJpdHMubGVuZ3RoIHx8IDA7XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IG51bUN0cmxRdWJpdHM7IGkrKykge1xuXHRcdFx0aWYoIWN0cmxRdWJpdHNbaV0gfHwgKHR5cGVvZiBjdHJsUXViaXRzW2ldID09IFwibnVtYmVyXCIgJiYgY3RybFF1Yml0c1tpXSA8IDApKSB7XG5cdFx0XHRcdGludmVydENvbnRyb2xzLnB1c2goaSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0dmFyIHFjID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdGlmKG51bUN0cmxRdWJpdHMgPT0gMCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBjcmVhdGUgbXVsdGktY29udHJvbGxlZCBnYXRlIHdpdGggemVybyBjb250cm9sIHF1Yml0cy5cIik7XG5cdH1cblxuXHRmdW5jdGlvbiBhZGRYKGNpcmN1aXQsIHdpcmVzKSB7XG5cdFx0d2lyZXMubWFwKGZ1bmN0aW9uKHdpcmUpIHtcblx0XHRcdGNpcmN1aXQuYXBwZW5kR2F0ZShcInhcIiwgd2lyZSk7XG5cdFx0fSk7XG5cdH1cblxuXHRpZihudW1DdHJsUXViaXRzID09IDEpIHtcblx0XHRhZGRYKHFjLCBpbnZlcnRDb250cm9scyk7XG5cdFx0cWMuYXBwZW5kR2F0ZShcImN4XCIsIFswLCAxXSk7XG5cdFx0YWRkWChxYywgaW52ZXJ0Q29udHJvbHMpO1xuXHRcdHJldHVybiBxYztcblx0fVxuXG5cdGlmKG51bUN0cmxRdWJpdHMgPT0gMikge1xuXHRcdGFkZFgocWMsIGludmVydENvbnRyb2xzKTtcblx0XHRxYy5hcHBlbmRHYXRlKFwiY2N4XCIsIFswLCAxLCAyXSk7XG5cdFx0YWRkWChxYywgaW52ZXJ0Q29udHJvbHMpO1xuXHRcdHJldHVybiBxYztcblx0fVxuXG5cdHZhciBtY3UxID0gcWMuTUNVMUNpcmN1aXQobnVtQ3RybFF1Yml0cyk7XG5cdHZhciBtY3UxbmFtZSA9IFwibWN1MV9cIiArIG51bUN0cmxRdWJpdHM7XG5cdHZhciBtY3Uxd2lyZXMgPSBbXTtcblx0Zm9yKHZhciBpID0gMDsgaSA8IG51bUN0cmxRdWJpdHMgKyAxOyBpKyspIHtcblx0XHRtY3Uxd2lyZXMucHVzaChpKTtcblx0fVxuXG5cdHFjLnJlZ2lzdGVyR2F0ZShtY3UxbmFtZSwgbWN1MSk7XG5cdGFkZFgocWMsIGludmVydENvbnRyb2xzKTtcblx0cWMuYXBwZW5kR2F0ZShcImhcIiwgbnVtQ3RybFF1Yml0cyk7XG5cdHFjLmFwcGVuZEdhdGUobWN1MW5hbWUsIG1jdTF3aXJlcywgeyBwYXJhbXM6IHsgbGFtYmRhOiBcInBpXCIgfX0pO1xuXHRhZGRYKHFjLCBpbnZlcnRDb250cm9scyk7XG5cdHFjLmFwcGVuZEdhdGUoXCJoXCIsIG51bUN0cmxRdWJpdHMpO1xuXG5cdHJldHVybiBxYztcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnJlZ2lzdGVyR2F0ZSA9IGZ1bmN0aW9uKG5hbWUsIG9iaikge1xuXHRpZihvYmogaW5zdGFuY2VvZiBRdWFudHVtQ2lyY3VpdCkge1xuXHRcdHRoaXMuY3VzdG9tR2F0ZXNbbmFtZV0gPSBvYmouc2F2ZSgpO1xuXHR9IGVsc2Uge1xuXHRcdHRoaXMuY3VzdG9tR2F0ZXNbbmFtZV0gPSBvYmo7XG5cdH1cblxuXHRpZih0aGlzLmlzTXVsdGlDb250cm9sbGVkR2F0ZShuYW1lKSkge1xuXHRcdHZhciBtY0luZm8gPSB0aGlzLmRlY29kZU11bHRpQ29udHJvbGxlZEdhdGVOYW1lKG5hbWUpO1xuXHRcdGlmKG1jSW5mby5udW1DdHJsUXViaXRzICE9IHRoaXMuY3VzdG9tR2F0ZXNbbmFtZV0ubnVtUXViaXRzIC0gMSkge1xuXHRcdFx0bWNJbmZvLm51bUN0cmxRdWJpdHMgPSB0aGlzLmN1c3RvbUdhdGVzW25hbWVdLm51bVF1Yml0cyAtIDE7XG5cdFx0XHR2YXIgY3RybFF1Yml0cyA9IFtdO1xuXHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IG1jSW5mby5udW1DdHJsUXViaXRzOyBpKyspIHtcblx0XHRcdFx0Y3RybFF1Yml0cy5wdXNoKHR5cGVvZiBtY0luZm8uY3RybFF1Yml0c1tpXSA9PSBcInVuZGVmaW5lZFwiID8gdHJ1ZSA6IG1jSW5mby5jdHJsUXViaXRzW2ldKTtcblx0XHRcdH1cblx0XHRcdG1jSW5mby5jdHJsUXViaXRzID0gY3RybFF1Yml0cztcblx0XHR9XG5cblx0XHR2YXIgcm9vdEdhdGUgPSB0aGlzLmJhc2ljR2F0ZXNbbWNJbmZvLnJvb3ROYW1lXTtcblx0XHRpZihyb290R2F0ZSAmJiByb290R2F0ZS5kcmF3aW5nSW5mbyAmJiByb290R2F0ZS5kcmF3aW5nSW5mby5jb25uZWN0b3JzKSB7XG5cdFx0XHRpZighdGhpcy5jdXN0b21HYXRlc1tuYW1lXS5kcmF3aW5nSW5mbykge1xuXHRcdFx0XHR0aGlzLmN1c3RvbUdhdGVzW25hbWVdLmRyYXdpbmdJbmZvID0ge307XG5cdFx0XHR9XG5cblx0XHRcdHZhciBjb25uZWN0b3JzID0gW107XG5cdFx0XHRtY0luZm8uY3RybFF1Yml0cy5tYXAoZnVuY3Rpb24oY3RybFF1Yml0KSB7XG5cdFx0XHRcdGlmKGN0cmxRdWJpdCkge1xuXHRcdFx0XHRcdGNvbm5lY3RvcnMucHVzaChcImRvdFwiKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25uZWN0b3JzLnB1c2goXCJuZG90XCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGNvbm5lY3RvcnMucHVzaChyb290R2F0ZS5kcmF3aW5nSW5mby5jb25uZWN0b3JzW3Jvb3RHYXRlLmRyYXdpbmdJbmZvLmNvbm5lY3RvcnMubGVuZ3RoIC0gMV0pO1xuXG5cdFx0XHR0aGlzLmN1c3RvbUdhdGVzW25hbWVdLmRyYXdpbmdJbmZvLmNvbm5lY3RvcnMgPSBjb25uZWN0b3JzO1xuXHRcdFx0dGhpcy5jdXN0b21HYXRlc1tuYW1lXS5kcmF3aW5nSW5mby5yb290ID0gcm9vdEdhdGUuZHJhd2luZ0luZm8ucm9vdDtcblx0XHR9XG5cdH1cbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnJlZ2lzdGVyTUNYR2F0ZSA9IGZ1bmN0aW9uKGN0cmxRdWJpdHMpIHtcblx0dmFyIGdhdGVOYW1lID0gdGhpcy5tdWx0aUNvbnRyb2xsZWRHYXRlTmFtZShcIm1jeFwiLCBjdHJsUXViaXRzKTtcblx0dGhpcy5yZWdpc3RlckdhdGUoZ2F0ZU5hbWUsIHRoaXMuTUNYQ2lyY3VpdChjdHJsUXViaXRzKS5zYXZlKHRydWUpKTtcblx0cmV0dXJuIGdhdGVOYW1lO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucmVnaXN0ZXJNQ1UxR2F0ZSA9IGZ1bmN0aW9uKGN0cmxRdWJpdHMpIHtcblx0dmFyIGdhdGVOYW1lID0gdGhpcy5tdWx0aUNvbnRyb2xsZWRHYXRlTmFtZShcIm1jdTFcIiwgY3RybFF1Yml0cyk7XG5cdHRoaXMucmVnaXN0ZXJHYXRlKGdhdGVOYW1lLCB0aGlzLk1DVTFDaXJjdWl0KGN0cmxRdWJpdHMpLnNhdmUodHJ1ZSkpO1xuXHRyZXR1cm4gZ2F0ZU5hbWU7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5yZWdpc3Rlck11bHRpQ29udHJvbGxlZEdhdGUgPSBmdW5jdGlvbihyb290TmFtZSwgY3RybFF1Yml0cykge1xuXHRzd2l0Y2gocm9vdE5hbWUpIHtcblx0XHRjYXNlIFwiY3hcIjogcmV0dXJuIHRoaXMucmVnaXN0ZXJNQ1hHYXRlKGN0cmxRdWJpdHMpOyBicmVhaztcblx0XHRjYXNlIFwiY3UxXCI6IHJldHVybiB0aGlzLnJlZ2lzdGVyTUNVMUdhdGUoY3RybFF1Yml0cyk7IGJyZWFrO1xuXHR9XG5cblx0cmV0dXJuIFwiXCI7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZ2V0T3JSZWdpc3Rlck11bHRpQ29udHJvbGxlZEVxdWl2YWxlbnQgPSBmdW5jdGlvbihnYXRlTmFtZSwgaW52ZXJzZUNvbnRyb2wpIHtcblx0dmFyIGdhdGVEZWYgPSB0aGlzLmJhc2ljR2F0ZXNbZ2F0ZU5hbWVdO1xuXHRpZihnYXRlRGVmKSB7XG5cdFx0aWYoZ2F0ZURlZi5kcmF3aW5nSW5mbykge1xuXHRcdFx0Ly8gQmFzaWMgZ2F0ZSB3aXRoIG11bHRpLWNvbnRyb2xsZWQvaW52ZXJzZSBjb250cm9sbGVkIGltcGxlbWVudGF0aW9uXG5cdFx0XHRpZihnYXRlTmFtZSA9PSBcInhcIiB8fCBnYXRlTmFtZSA9PSBcInUxXCIgfHwgZ2F0ZURlZi5kcmF3aW5nSW5mby5yb290ID09IFwieFwiIHx8IGdhdGVEZWYuZHJhd2luZ0luZm8ucm9vdCA9PSBcInUxXCIpIHtcblx0XHRcdFx0aWYoIXRoaXMuYmFzaWNHYXRlc1tcImNcIiArIGdhdGVOYW1lXSB8fCBpbnZlcnNlQ29udHJvbCkge1xuXHRcdFx0XHRcdC8vIGNyZWF0ZSBtdWx0aSBjb250cm9sbGVkIHZlcnNpb24gYW5kIHJldHVybiBpdHMgbmFtZVxuXHRcdFx0XHRcdHZhciByb290TmFtZSA9IFwiY1wiICsgKGdhdGVEZWYuZHJhd2luZ0luZm8ucm9vdCB8fCBnYXRlTmFtZSk7XG5cdFx0XHRcdFx0dmFyIG51bUN0cmxRdWJpdHMgPSBtYXRoLmxvZzIoZ2F0ZURlZi5tYXRyaXgubGVuZ3RoKTtcblx0XHRcdFx0XHR2YXIgY3RybFF1Yml0cyA9IFtdO1xuXHRcdFx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBudW1DdHJsUXViaXRzIC0gMTsgaSsrKSB7XG5cdFx0XHRcdFx0XHRjdHJsUXViaXRzLnB1c2godHJ1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGN0cmxRdWJpdHMudW5zaGlmdCghaW52ZXJzZUNvbnRyb2wpO1xuXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMucmVnaXN0ZXJNdWx0aUNvbnRyb2xsZWRHYXRlKHJvb3ROYW1lLCBjdHJsUXViaXRzKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyB0aGVyZSBpcyBiYXNpYyBnYXRlIHdpdGggYWRkaXRpb25hbCBjb250cm9sXG5cdFx0XHRcdFx0cmV0dXJuIFwiY1wiICsgZ2F0ZU5hbWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBCYXNpYyBnYXRlIGZvciB3aGljaCB3ZSBkb24ndCBoYXZlIG11bHRpLWNvbnRyb2xsZWQgb3IgaW52ZXJzZSBjb250cm9sbGVkIGltcGxlbWVudGF0aW9uXG5cdFx0Ly8gYnV0IG1heWJlIHdlIGhhdmUgYmFzaWMgZ2F0ZSB3aXRoIGFkZGl0aW9uYWwgY29udHJvbFxuXHRcdGZvcih2YXIgZ24gaW4gdGhpcy5iYXNpY0dhdGVzKSB7XG5cdFx0XHR2YXIgdG1wR2F0ZURlZiA9IHRoaXMuYmFzaWNHYXRlc1tnbl07XG5cdFx0XHRpZih0bXBHYXRlRGVmICYmIHRtcEdhdGVEZWYuZHJhd2luZ0luZm8gJiYgdG1wR2F0ZURlZi5kcmF3aW5nSW5mby5yb290ICYmIHRtcEdhdGVEZWYuZHJhd2luZ0luZm8ucm9vdCA9PSBnYXRlTmFtZSkge1xuXHRcdFx0XHRpZighaW52ZXJzZUNvbnRyb2wpIHtcblx0XHRcdFx0XHQvLyB0aGVyZSBpcyBiYXNpYyBnYXRlIHdpdGggYWRkaXRpb25hbCBjb250cm9sXG5cdFx0XHRcdFx0cmV0dXJuIGduO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0aWYodGhpcy5jdXN0b21HYXRlc1tnYXRlTmFtZV0pIHtcblx0XHR2YXIgbWNJbmZvID0gdGhpcy5kZWNvZGVNdWx0aUNvbnRyb2xsZWRHYXRlTmFtZShnYXRlTmFtZSk7XG5cdFx0aWYoIW1jSW5mbyB8fCAhbWNJbmZvLm51bUN0cmxRdWJpdHMpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdGlmKG1jSW5mby5yb290TmFtZSA9PSBcImN4XCIgfHwgbWNJbmZvLnJvb3ROYW1lID09IFwiY3UxXCIpIHtcblx0XHRcdC8vIGNyZWF0ZSBtdWx0aSBjb250cm9sbGVkIHZlcnNpb24gYW5kIHJldHVybiBpdHMgbmFtZVxuXHRcdFx0bWNJbmZvLmN0cmxRdWJpdHMudW5zaGlmdCghaW52ZXJzZUNvbnRyb2wpO1xuXHRcdFx0cmV0dXJuIHRoaXMucmVnaXN0ZXJNdWx0aUNvbnRyb2xsZWRHYXRlKG1jSW5mby5yb290TmFtZSwgbWNJbmZvLmN0cmxRdWJpdHMpO1xuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0cmV0dXJuIG51bGw7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5yZW1vdmVVbnVzZWRNdWx0aUNvbnRyb2xsZWRHYXRlcyA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgb3BzID0gdGhpcy5jb3VudE9wcyhudWxsLCB7IHNoYWxsb3c6IGZhbHNlIH0pO1xuXG5cdGZvcihnYXRlTmFtZSBpbiB0aGlzLmN1c3RvbUdhdGVzKSB7XG5cdFx0aWYoIW9wc1tnYXRlTmFtZV0pIHtcblx0XHRcdGlmKHRoaXMuaXNNdWx0aUNvbnRyb2xsZWRHYXRlKGdhdGVOYW1lKSkge1xuXHRcdFx0XHRkZWxldGUgdGhpcy5jdXN0b21HYXRlc1tnYXRlTmFtZV07XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5kZWNvZGVNdWx0aUNvbnRyb2xsZWRHYXRlTmFtZSA9IGZ1bmN0aW9uKGdhdGVOYW1lKSB7XG5cdGlmKCFnYXRlTmFtZSkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0dmFyIG1jSW5mbyA9IHt9O1xuXHR2YXIgc3BsaXR0ZWQgPSBnYXRlTmFtZS5zcGxpdChcIl9cIik7XG5cblx0Ly8gbmFtZVxuXHRpZihzcGxpdHRlZC5sZW5ndGggPiAwKSB7XG5cdFx0bWNJbmZvLm5hbWUgPSBzcGxpdHRlZFswXTtcblx0XHRtY0luZm8ucm9vdE5hbWUgPSBtY0luZm8ubmFtZS5zdWJzdHJpbmcoMSk7XG5cdH1cblxuXHQvLyBudW1DdHJsUXViaXRzXG5cdGlmKHNwbGl0dGVkLmxlbmd0aCA+IDEpIHtcblx0XHR2YXIgbnVtQ3RybFF1Yml0cyA9IHBhcnNlSW50KHNwbGl0dGVkWzFdKTtcblx0XHRpZighaXNOYU4obnVtQ3RybFF1Yml0cykpIHtcblx0XHRcdG1jSW5mby5udW1DdHJsUXViaXRzID0gbnVtQ3RybFF1Yml0cztcblx0XHR9XG5cdH1cblxuXHQvLyBjdHJsUXViaXRzXG5cdGlmKG1jSW5mby5udW1DdHJsUXViaXRzKSB7XG5cdFx0dmFyIGN0cmxRdWJpdHMgPSBbXTtcblx0XHRpZihzcGxpdHRlZC5sZW5ndGggPiAyKSB7XG5cdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgc3BsaXR0ZWRbMl0ubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYoc3BsaXR0ZWRbMl1baV0gPT0gXCIwXCIpIHtcblx0XHRcdFx0XHRjdHJsUXViaXRzLnB1c2goZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmKHNwbGl0dGVkWzJdW2ldID09IFwiMVwiKSB7XG5cdFx0XHRcdFx0Y3RybFF1Yml0cy5wdXNoKHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYoIWN0cmxRdWJpdHMubGVuZ3RoKSB7XG5cdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgbnVtQ3RybFF1Yml0czsgaSsrKSB7XG5cdFx0XHRcdGN0cmxRdWJpdHMucHVzaCh0cnVlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0bWNJbmZvLmN0cmxRdWJpdHMgPSBjdHJsUXViaXRzO1xuXHR9XG5cblx0cmV0dXJuIG1jSW5mbztcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLm11bHRpQ29udHJvbGxlZEdhdGVOYW1lID0gZnVuY3Rpb24obmFtZVByZWZpeCwgY3RybFF1Yml0cykge1xuXHR2YXIgZ2F0ZU5hbWUgPSBuYW1lUHJlZml4ICsgXCJfXCI7XG5cdGlmKHR5cGVvZiBjdHJsUXViaXRzID09IFwibnVtYmVyXCIpIHtcblx0XHRnYXRlTmFtZSArPSBjdHJsUXViaXRzO1xuXHR9IGVsc2Uge1xuXHRcdGdhdGVOYW1lICs9IChjdHJsUXViaXRzLmxlbmd0aCB8fCAwKTtcblxuXHRcdHZhciB3aXJlcyA9IFwiXCI7XG5cdFx0Y3RybFF1Yml0cy5tYXAoZnVuY3Rpb24od2lyZSkge1xuXHRcdFx0aWYoIXdpcmUgfHwgKHR5cGVvZiB3aXJlID09IFwibnVtYmVyXCIgJiYgd2lyZSA8IDApKSB7XG5cdFx0XHRcdHdpcmVzICs9IFwiMFwiO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2lyZXMgKz0gXCIxXCI7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0aWYod2lyZXMuaW5kZXhPZihcIjBcIikgPCAwKSB7XG5cdFx0XHR3aXJlcyA9IFwiXCI7XG5cdFx0fVxuXHRcdGlmKHdpcmVzKSB7XG5cdFx0XHRnYXRlTmFtZSArPSBcIl9cIiArIHdpcmVzO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZ2F0ZU5hbWU7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5pc011bHRpQ29udHJvbGxlZEdhdGUgPSBmdW5jdGlvbihnYXRlTmFtZSkge1xuXHR2YXIgbWNJbmZvID0gdGhpcy5kZWNvZGVNdWx0aUNvbnRyb2xsZWRHYXRlTmFtZShnYXRlTmFtZSk7XG5cdHJldHVybiAhIXRoaXMuY3VzdG9tR2F0ZXNbZ2F0ZU5hbWVdICYmICEhbWNJbmZvICYmICEhbWNJbmZvLm51bUN0cmxRdWJpdHM7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5pc0NvbnRyb2xsYWJsZUdhdGUgPSBmdW5jdGlvbihnYXRlTmFtZSkge1xuXHR2YXIgZ2F0ZURlZiA9IHRoaXMuYmFzaWNHYXRlc1tnYXRlTmFtZV07XG5cdGlmKGdhdGVEZWYpIHtcblx0XHRpZihnYXRlRGVmLmRyYXdpbmdJbmZvKSB7XG5cdFx0XHRpZihnYXRlRGVmLmRyYXdpbmdJbmZvLnJvb3QgPT0gXCJ4XCIgfHwgZ2F0ZURlZi5kcmF3aW5nSW5mby5yb290ID09IFwidTFcIikge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Zm9yKHZhciBnbiBpbiB0aGlzLmJhc2ljR2F0ZXMpIHtcblx0XHRcdHZhciBnYXRlRGVmID0gdGhpcy5iYXNpY0dhdGVzW2duXTtcblx0XHRcdGlmKGdhdGVEZWYgJiYgZ2F0ZURlZi5kcmF3aW5nSW5mbyAmJiBnYXRlRGVmLmRyYXdpbmdJbmZvLnJvb3QgJiYgZ2F0ZURlZi5kcmF3aW5nSW5mby5yb290ID09IGdhdGVOYW1lKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0aGlzLmlzTXVsdGlDb250cm9sbGVkR2F0ZShnYXRlTmFtZSk7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZ2V0R2F0ZVBvc0J5SWQgPSBmdW5jdGlvbihnYXRlSWQpIHtcblx0dmFyIGNpcmN1aXQgPSB0aGlzO1xuXG5cdHZhciBudW1Db2xzID0gY2lyY3VpdC5udW1Db2xzKCk7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgY2lyY3VpdC5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSBjaXJjdWl0LmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmlkID09IGdhdGVJZCkge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdHdpcmVzOiBnYXRlLndpcmVzLFxuXHRcdFx0XHRcdGNvbDogY29sdW1uXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHtcblx0XHR3aXJlczogW10sXG5cdFx0Y29sOiAtMVxuXHR9O1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmdldEdhdGVCeUlkID0gZnVuY3Rpb24oZ2F0ZUlkKSB7XG5cdHZhciBjaXJjdWl0ID0gdGhpcztcblxuXHR2YXIgbnVtQ29scyA9IGNpcmN1aXQubnVtQ29scygpO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IGNpcmN1aXQubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gY2lyY3VpdC5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5pZCA9PSBnYXRlSWQpIHtcblx0XHRcdFx0cmV0dXJuIGdhdGU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG51bGw7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5nZXRHYXRlQmVmb3JlID0gZnVuY3Rpb24oY29sdW1uLCB3aXJlKSB7XG5cdHZhciBnYXRlID0gbnVsbDtcblx0dmFyIGNvbCA9IGNvbHVtbiAtIDE7XG5cdHdoaWxlKGNvbCA+PSAwICYmICFnYXRlKSB7XG5cdFx0Z2F0ZSA9IHRoaXMuZ2V0R2F0ZUF0KGNvbCwgd2lyZSk7XG5cdFx0Y29sLS07XG5cdH1cblx0cmV0dXJuIGdhdGU7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZ2V0R2F0ZUF0ID0gZnVuY3Rpb24oY29sdW1uLCB3aXJlKSB7XG5cdGlmKCF0aGlzLmdhdGVzW3dpcmVdIHx8ICF0aGlzLmdhdGVzW3dpcmVdW2NvbHVtbl0pIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdHZhciBnYXRlID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmdhdGVzW3dpcmVdW2NvbHVtbl0pKTtcblx0aWYoIWdhdGUpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdGdhdGUuY29sdW1uID0gY29sdW1uO1xuXHRnYXRlLndpcmVzID0gW107XG5cblx0dmFyIGlkID0gZ2F0ZS5pZDtcblx0dmFyIG51bVdpcmVzID0gdGhpcy5nYXRlcy5sZW5ndGg7XG5cdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBudW1XaXJlczsgd2lyZSsrKSB7XG5cdFx0dmFyIGcgPSB0aGlzLmdhdGVzW3dpcmVdW2NvbHVtbl07XG5cdFx0aWYoZyAmJiBnLmlkID09IGlkKSB7XG5cdFx0XHRnYXRlLndpcmVzW2cuY29ubmVjdG9yXSA9IHdpcmU7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBnYXRlO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmdldEdhdGVzQXRDb2x1bW4gPSBmdW5jdGlvbihjb2x1bW4pIHtcblx0dmFyIGdhdGVzID0gW107XG5cdHZhciBudW1XaXJlcyA9IHRoaXMuZ2F0ZXMubGVuZ3RoO1xuXHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgbnVtV2lyZXM7IHdpcmUrKykge1xuXHRcdHZhciBnYXRlID0gdGhpcy5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblx0XHRcdGdhdGVzLnB1c2goZ2F0ZSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBnYXRlcztcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5nZXRDb250cm9sbGFibGVHYXRlc0F0Q29sdW1uID0gZnVuY3Rpb24oY29sdW1uKSB7XG5cdHZhciBnYXRlcyA9IHRoaXMuZ2V0R2F0ZXNBdENvbHVtbihjb2x1bW4pO1xuXHR2YXIgY29udHJvbGxhYmxlR2F0ZXMgPSBbXTtcblx0Zm9yKHZhciBpID0gMDsgaSA8IGdhdGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIGdhdGUgPSBnYXRlc1tpXTtcblx0XHRpZih0aGlzLmlzQ29udHJvbGxhYmxlR2F0ZShnYXRlLm5hbWUpKSB7XG5cdFx0XHRjb250cm9sbGFibGVHYXRlcy5wdXNoKGdhdGUpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gY29udHJvbGxhYmxlR2F0ZXM7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRKYXZhU2NyaXB0ID0gZnVuY3Rpb24oY29tbWVudCwgZGVjb21wb3NlLCBleHBvcnRBc0dhdGVOYW1lLCBhc0p1cHl0ZXIpIHtcblx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdHZhciBjaXJjdWl0ID0gbnVsbDtcblxuXHQvLyBkZWNvbXBvc2Vcblx0aWYoZGVjb21wb3NlKSB7XG5cdFx0Y2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRcdGNpcmN1aXQubG9hZCh0aGlzLnNhdmUodHJ1ZSkpO1xuXHR9IGVsc2Uge1xuXHRcdGNpcmN1aXQgPSB0aGlzO1xuXHR9XG5cblx0dmFyIGpzID0gXCJcIjtcblxuXHQvLyBjb21tZW50XG5cdGlmKGNvbW1lbnQpIHtcblx0XHR2YXIgY29tbSA9IChjb21tZW50IHx8IFwiXCIpLnNwbGl0KFwiXFxuXCIpO1xuXHRcdGNvbW0ubWFwKGZ1bmN0aW9uKGNsaW5lKSB7XG5cdFx0XHRpZihjbGluZS5sZW5ndGggPj0gMiAmJiBjbGluZVswXSAhPSBcIi9cIiAmJiBjbGluZVsxXSAhPSBcIi9cIikge1xuXHRcdFx0XHRqcyArPSBcIi8vIFwiO1xuXHRcdFx0fVxuXHRcdFx0anMgKz0gY2xpbmU7XG5cdFx0XHRqcyArPSBcIlxcblwiO1xuXHRcdH0pO1xuXHR9XG5cblx0dmFyIGluZGVudCA9IFwiXCI7XG5cdHZhciBjaXJjdWl0VmFyID0gXCJcIjtcblxuXHRpZihleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0aW5kZW50ID0gXCIgICAgXCI7XG5cdFx0Y2lyY3VpdFZhciA9IFwiY2lyY1wiO1xuXG5cdFx0anMgKz0gXCJjb25zdCBcIiArIGV4cG9ydEFzR2F0ZU5hbWUgKyBcIiA9IGZ1bmN0aW9uKCkge1xcblwiO1xuXG5cdFx0anMgKz0gaW5kZW50ICsgXCJjb25zdCBcIiArIGNpcmN1aXRWYXIgKyBcIiA9IG5ldyBRdWFudHVtQ2lyY3VpdChcIiArIGNpcmN1aXQubnVtUXViaXRzICsgXCIpO1xcblxcblwiO1xuXHRcdGlmKGNpcmN1aXQucGFyYW1zICYmIGNpcmN1aXQucGFyYW1zLmxlbmd0aCkge1xuXHRcdFx0anMgKz0gaW5kZW50ICsgY2lyY3VpdFZhciArIFwiLnBhcmFtcyA9IFwiICsgSlNPTi5zdHJpbmdpZnkoY2lyY3VpdC5wYXJhbXMpICsgXCJcXG5cXG5cIjtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0aW5kZW50ID0gXCJcIjtcblx0XHRjaXJjdWl0VmFyID0gXCJjaXJjdWl0XCI7XG5cblx0XHRqcyArPSBpbmRlbnQgKyBcImNvbnN0IFF1YW50dW1DaXJjdWl0ID0gcmVxdWlyZShcXFwicXVhbnR1bS1jaXJjdWl0XFxcIik7XFxuXFxuXCI7XG5cblx0XHRqcyArPSBpbmRlbnQgKyBcImNvbnN0IFwiICsgY2lyY3VpdFZhciArIFwiID0gbmV3IFF1YW50dW1DaXJjdWl0KFwiICsgY2lyY3VpdC5udW1RdWJpdHMgKyBcIik7XFxuXFxuXCI7XG5cblx0XHR2YXIgdXNlZEdhdGVzID0gY2lyY3VpdC51c2VkR2F0ZXMoKTtcblx0XHRpZighZGVjb21wb3NlKSB7XG5cdFx0XHR2YXIgY3VzdG9tR2F0ZXNBZGRlZCA9IFtdO1xuXHRcdFx0dXNlZEdhdGVzLm1hcChmdW5jdGlvbih1c2VkR2F0ZU5hbWUpIHtcblx0XHRcdFx0dmFyIGJhc2ljR2F0ZSA9IGNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0XHRpZighYmFzaWNHYXRlKSB7XG5cdFx0XHRcdFx0dmFyIGN1c3RvbUdhdGUgPSBzZWxmLmN1c3RvbUdhdGVzW3VzZWRHYXRlTmFtZV07XG5cdFx0XHRcdFx0aWYoY3VzdG9tR2F0ZSkge1xuXHRcdFx0XHRcdFx0dmFyIGN1c3RvbUNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0XHRcdFx0XHRcdGN1c3RvbUNpcmN1aXQubG9hZChjdXN0b21HYXRlKTtcblx0XHRcdFx0XHRcdGpzICs9IGN1c3RvbUNpcmN1aXQuZXhwb3J0SmF2YVNjcmlwdChcIlwiLCB0cnVlLCB1c2VkR2F0ZU5hbWUpO1xuXHRcdFx0XHRcdFx0Y3VzdG9tR2F0ZXNBZGRlZC5wdXNoKHVzZWRHYXRlTmFtZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0Y3VzdG9tR2F0ZXNBZGRlZC5tYXAoZnVuY3Rpb24oY3VzdG9tR2F0ZU5hbWUpIHtcblx0XHRcdFx0anMgKz0gaW5kZW50ICsgY2lyY3VpdFZhciArIFwiLnJlZ2lzdGVyR2F0ZShcXFwiXCIgKyBjdXN0b21HYXRlTmFtZSArIFwiXFxcIiwgXCIgKyBjdXN0b21HYXRlTmFtZSArIFwiKCkpO1xcblwiO1xuXHRcdFx0fSk7XG5cblx0XHRcdGlmKGN1c3RvbUdhdGVzQWRkZWQubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRqcyArPSBcIlxcblwiO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHZhciBjcmVnQ291bnQgPSAwO1xuXHRmb3IodmFyIGNyZWdOYW1lIGluIHRoaXMuY3JlZ3MpIHtcblx0XHRqcyArPSBpbmRlbnQgKyBjaXJjdWl0VmFyICsgXCIuY3JlYXRlQ3JlZyhcXFwiXCIgKyBjcmVnTmFtZSArIFwiXFxcIiwgXCIgKyAodGhpcy5jcmVnc1tjcmVnTmFtZV0ubGVuZ3RoIHx8IDEpICsgXCIpO1xcblwiO1xuXHRcdGNyZWdDb3VudCsrO1xuXHR9XG5cdGlmKGNyZWdDb3VudCA+IDApIHtcblx0XHRqcyArPSBcIlxcblwiO1xuXHR9XG5cblx0dmFyIG51bUNvbHMgPSBjaXJjdWl0Lm51bUNvbHMoKTtcblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGNpcmN1aXQuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0dmFyIGdhdGVOYW1lID0gZ2F0ZS5uYW1lO1xuXG5cdFx0XHRcdGlmKGdhdGVOYW1lID09IFwibWVhc3VyZVwiICYmIGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY3JlZykge1xuXHRcdFx0XHRcdGpzICs9IGluZGVudCArIGNpcmN1aXRWYXIgKyBcIi5hZGRNZWFzdXJlKFwiICsgd2lyZSArIFwiLCBcXFwiXCIgKyBnYXRlLm9wdGlvbnMuY3JlZy5uYW1lICsgXCJcXFwiLCBcIiArIGdhdGUub3B0aW9ucy5jcmVnLmJpdCArIFwiKTtcXG5cIjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRqcyArPSBpbmRlbnQgKyBjaXJjdWl0VmFyICsgXCIuYXBwZW5kR2F0ZShcXFwiXCIgKyBnYXRlLm5hbWUgKyBcIlxcXCJcIjtcblxuXHRcdFx0XHRcdGlmKGdhdGUud2lyZXMubGVuZ3RoID09IDEpIHtcblx0XHRcdFx0XHRcdGpzICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdGpzICs9IGdhdGUud2lyZXNbMF07XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGpzICs9IFwiLCBbXCI7XG5cdFx0XHRcdFx0XHRmb3IodmFyIHcgPSAwOyB3IDwgZ2F0ZS53aXJlcy5sZW5ndGg7IHcrKykge1xuXHRcdFx0XHRcdFx0XHRpZih3ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdGpzICs9IFwiLFwiO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGpzICs9IGdhdGUud2lyZXNbd107XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRqcyArPSBcIl1cIjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZihnYXRlLm9wdGlvbnMpIHtcblx0XHRcdFx0XHRcdHZhciBvcHQgPSB7fTtcblx0XHRcdFx0XHRcdGZvcih2YXIgb3B0S2V5IGluIGdhdGUub3B0aW9ucykge1xuXHRcdFx0XHRcdFx0XHRpZihnYXRlLm9wdGlvbnNbb3B0S2V5XSkge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBvYmogPSBnYXRlLm9wdGlvbnNbb3B0S2V5XTtcblx0XHRcdFx0XHRcdFx0XHR2YXIgc2tpcCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdGlmKHR5cGVvZiBvYmogPT0gXCJvYmplY3RcIiAmJiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMCAmJiBvYmouY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0c2tpcCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0aWYoIXNraXApIHtcblx0XHRcdFx0XHRcdFx0XHRcdG9wdFtvcHRLZXldID0gb2JqO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0anMgKz0gXCIsIFwiICsgSlNPTi5zdHJpbmdpZnkob3B0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0anMgKz0gXCIpO1xcblwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZihleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0anMgKz0gXCJcXG5cIjtcblx0XHRqcyArPSBpbmRlbnQgKyBcInJldHVybiBcIiArIGNpcmN1aXRWYXIgKyBcIjtcXG5cIjtcblx0XHRqcyArPSBcIn07XFxuXFxuXCI7XG5cdH0gZWxzZSB7XG5cdFx0anMgKz0gXCJcXG5cIjtcblxuXHRcdGpzICs9IGluZGVudCArIGNpcmN1aXRWYXIgKyBcIi5ydW4oKTtcXG5cXG5cIjtcblxuXHRcdGpzICs9IGluZGVudCArIFwiY29uc29sZS5sb2coXFxcIlByb2JhYmlsaXRpZXM6XFxcIik7XFxuXCI7XG5cdFx0anMgKz0gaW5kZW50ICsgXCJjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShjaXJjdWl0LnByb2JhYmlsaXRpZXMoKSkpO1xcblxcblwiO1xuXHRcdGpzICs9IGluZGVudCArIFwiY29uc29sZS5sb2coXFxcIk1lYXN1cmUgYWxsOlxcXCIpO1xcblwiO1xuXHRcdGpzICs9IGluZGVudCArIFwiY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoY2lyY3VpdC5tZWFzdXJlQWxsKCkpKTtcXG5cXG5cIjtcblx0XHRpZihjaXJjdWl0LmNyZWdDb3VudCgpKSB7XG5cdFx0XHRqcyArPSBpbmRlbnQgKyBcImNvbnNvbGUubG9nKFxcXCJDbGFzc2ljYWwgcmVnaXN0ZXJzOlxcXCIpO1xcblwiO1xuXHRcdFx0anMgKz0gaW5kZW50ICsgXCJjb25zb2xlLmxvZyhjaXJjdWl0LmNyZWdzQXNTdHJpbmcoKSk7XFxuXFxuXCI7XG5cdFx0fVxuXHR9XG5cblxuXHRpZihhc0p1cHl0ZXIpIHtcblx0XHR2YXIgbm90ZWJvb2sgPSB7XG5cdFx0XHRcIm1ldGFkYXRhXCI6IHtcblx0XHRcdFx0XCJrZXJuZWxzcGVjXCI6IHtcblx0XHRcdFx0XHRcImRpc3BsYXlfbmFtZVwiOiBcIkphdmFzY3JpcHQgKE5vZGUuanMpXCIsXG5cdFx0XHRcdFx0XCJsYW5ndWFnZVwiOiBcImphdmFzY3JpcHRcIixcblx0XHRcdFx0XHRcIm5hbWVcIjogXCJqYXZhc2NyaXB0XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0XCJsYW5ndWFnZV9pbmZvXCI6IHtcblx0XHRcdFx0XHRcImZpbGVfZXh0ZW5zaW9uXCI6IFwiLmpzXCIsXG5cdFx0XHRcdFx0XCJtaW1ldHlwZVwiOiBcImFwcGxpY2F0aW9uL2phdmFzY3JpcHRcIixcblx0XHRcdFx0XHRcIm5hbWVcIjogXCJqYXZhc2NyaXB0XCJcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdG5iZm9ybWF0OiA0LFxuXHRcdFx0bmJmb3JtYXRfbWlub3I6IDAsXG5cdFx0XHRjZWxsczogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y2VsbF90eXBlOiBcImNvZGVcIixcblx0XHRcdFx0XHRzb3VyY2U6IGpzLFxuXHRcdFx0XHRcdG1ldGFkYXRhOiB7XG5cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG91dHB1dHM6IFtdLFxuXHRcdFx0XHRcdGV4ZWN1dGlvbl9jb3VudDogbnVsbFxuXHRcdFx0XHR9XG5cdFx0XHRdXG5cdFx0fTtcblx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkobm90ZWJvb2spO1xuXHR9XG5cblx0cmV0dXJuIGpzO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0UWlza2l0ID0gZnVuY3Rpb24oY29tbWVudCwgZGVjb21wb3NlLCBleHBvcnRBc0dhdGVOYW1lLCB2ZXJzaW9uU3RyLCBwcm92aWRlck5hbWUsIGJhY2tlbmROYW1lLCBhc0p1cHl0ZXIsIHNob3RzLCBjaXJjdWl0UmVwbGFjZW1lbnQsIGluc2lkZVN1Ym1vZHVsZSwgaHlicmlkKSB7XG5cdHZhciBvcHRpb25zID0ge1xuXHRcdGNvbW1lbnQ6IGNvbW1lbnQsXG5cdFx0ZGVjb21wb3NlOiBkZWNvbXBvc2UsXG5cdFx0dmVyc2lvblN0cjogdmVyc2lvblN0cixcblx0XHRwcm92aWRlck5hbWU6IHByb3ZpZGVyTmFtZSxcblx0XHRiYWNrZW5kTmFtZTogYmFja2VuZE5hbWUsXG5cdFx0YXNKdXB5dGVyOiBhc0p1cHl0ZXIsXG5cdFx0c2hvdHM6IHNob3RzLFxuXHRcdGh5YnJpZDogaHlicmlkXG5cdH07XG5cdFxuXHRyZXR1cm4gdGhpcy5leHBvcnRUb1Fpc2tpdChvcHRpb25zLCBleHBvcnRBc0dhdGVOYW1lLCBjaXJjdWl0UmVwbGFjZW1lbnQsIGluc2lkZVN1Ym1vZHVsZSlcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFF1RVNUID0gZnVuY3Rpb24oY29tbWVudCwgZGVjb21wb3NlLCBleHBvcnRBc0dhdGVOYW1lLCBkZWZpbmVkRnVuYykge1xuXHR2YXIgbmV3T3B0aW9ucyA9IHtcblx0XHRjb21tZW50OiBjb21tZW50LFxuXHRcdGRlY29tcG9zZTogZGVjb21wb3NlXG5cdH07XG5cblx0cmV0dXJuIHRoaXMuZXhwb3J0VG9RdUVTVChuZXdPcHRpb25zLCBleHBvcnRBc0dhdGVOYW1lLCBkZWZpbmVkRnVuYyk7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRRQVNNID0gZnVuY3Rpb24oY29tbWVudCwgZGVjb21wb3NlLCBleHBvcnRBc0dhdGVOYW1lLCBjaXJjdWl0UmVwbGFjZW1lbnQsIGNvbXBhdGliaWxpdHlNb2RlLCBpbnNpZGVTdWJtb2R1bGUpIHtcblx0dmFyIG9wdGlvbnMgPSB7XG5cdFx0Y29tbWVudDogY29tbWVudCxcblx0XHRkZWNvbXBvc2U6IGRlY29tcG9zZSxcblx0XHRjb21wYXRpYmlsaXR5TW9kZTogY29tcGF0aWJpbGl0eU1vZGVcblx0fTtcblx0XG5cdHJldHVybiB0aGlzLmV4cG9ydFRvUUFTTShvcHRpb25zLCBleHBvcnRBc0dhdGVOYW1lLCBjaXJjdWl0UmVwbGFjZW1lbnQsIGluc2lkZVN1Ym1vZHVsZSlcdFxufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuaW1wb3J0UUFTTSA9IGZ1bmN0aW9uKGlucHV0LCBlcnJvckNhbGxiYWNrLCBjb21wYXRpYmlsaXR5TW9kZSkge1xuXHR0aGlzLmluaXQoKTtcblx0UUFTTUltcG9ydCh0aGlzLCBpbnB1dCwgZXJyb3JDYWxsYmFjaywgY29tcGF0aWJpbGl0eU1vZGUpO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0UHlxdWlsID0gZnVuY3Rpb24oY29tbWVudCwgZGVjb21wb3NlLCBleHBvcnRBc0dhdGVOYW1lLCB2ZXJzaW9uU3RyLCBsYXR0aWNlLCBhc1FWTSwgYXNKdXB5dGVyLCBzaG90cywgaHlicmlkKSB7XG5cdHZhciBvcHRpb25zID0ge1xuXHRcdGNvbW1lbnQ6IGNvbW1lbnQsXG5cdFx0ZGVjb21wb3NlOiBkZWNvbXBvc2UsXG5cdFx0dmVyc2lvblN0cjogdmVyc2lvblN0cixcblx0XHRsYXR0aWNlOiBsYXR0aWNlLFxuXHRcdGFzUVZNOiBhc1FWTSxcblx0XHRhc0p1cHl0ZXI6IGFzSnVweXRlcixcblx0XHRzaG90czogc2hvdHMsXG5cdFx0aHlicmlkOiBoeWJyaWRcblx0fTtcblx0cmV0dXJuIHRoaXMuZXhwb3J0VG9QeXF1aWwob3B0aW9ucywgZXhwb3J0QXNHYXRlTmFtZSk7XG59XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRRdWlsID0gZnVuY3Rpb24oY29tbWVudCwgZGVjb21wb3NlLCBleHBvcnRBc0dhdGVOYW1lLCB2ZXJzaW9uU3RyKSB7XG5cdHZhciBvcHRpb25zID0ge1xuXHRcdGNvbW1lbnQ6IGNvbW1lbnQsXG5cdFx0ZGVjb21wb3NlOiBkZWNvbXBvc2UsXG5cdFx0dmVyc2lvblN0cjogdmVyc2lvblN0clxuXHR9O1xuXG5cdHJldHVybiB0aGlzLmV4cG9ydFRvUXVpbChvcHRpb25zLCBleHBvcnRBc0dhdGVOYW1lKTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmltcG9ydFF1aWwgPSBmdW5jdGlvbihxdWlsLCBlcnJvckNhbGxiYWNrLCBvcHRpb25zLCBxdWJpdE5hbWVzLCByZW5hbWVkR2F0ZXMsIGxpbmVPZmZzZXQpIHtcblx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdHNlbGYuaW5pdCgpO1xuXG5cdHJlbmFtZWRHYXRlcyA9IHJlbmFtZWRHYXRlcyB8fCB7fTtcblx0bGluZU9mZnNldCA9IGxpbmVPZmZzZXQgfHwgMDtcblxuXHRmdW5jdGlvbiBnZXRHYXRlSW5mbyhnYXRlTmFtZSkge1xuXHRcdGlmKHNlbGYuY3VzdG9tR2F0ZXMgJiYgc2VsZi5jdXN0b21HYXRlc1tnYXRlTmFtZV0pIHtcblx0XHRcdHJldHVybiB7IG5hbWU6IGdhdGVOYW1lLCBjdXN0b21HYXRlOiBzZWxmLmN1c3RvbUdhdGVzW2dhdGVOYW1lXSB9O1xuXHRcdH1cblxuXHRcdGZvcih2YXIgZ25hbWUgaW4gc2VsZi5iYXNpY0dhdGVzKSB7XG5cdFx0XHR2YXIgZ2RlZiA9IHNlbGYuYmFzaWNHYXRlc1tnbmFtZV07XG5cdFx0XHRpZihnZGVmLmV4cG9ydEluZm8pIHtcblx0XHRcdFx0aWYoZ2RlZi5leHBvcnRJbmZvLnF1aWwgJiYgZ2RlZi5leHBvcnRJbmZvLnF1aWwubmFtZSA9PSBnYXRlTmFtZSkge1xuXHRcdFx0XHRcdHJldHVybiB7IG5hbWU6IGduYW1lLCBnYXRlRGVmOiBnZGVmLCBxdWlsRGVmOiBnZGVmLmV4cG9ydEluZm8ucXVpbCB9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmKGdkZWYuZXhwb3J0SW5mby5weXF1aWwgJiYgZ2RlZi5leHBvcnRJbmZvLnB5cXVpbC5uYW1lID09IGdhdGVOYW1lKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHsgbmFtZTogZ25hbWUsIGdhdGVEZWY6IGdkZWYsIHF1aWxEZWY6IGdkZWYuZXhwb3J0SW5mby5weXF1aWwgfTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblxuXHR2YXIgbGluZXMgPSBxdWlsLnNwbGl0KFwiXFxuXCIpO1xuXG5cdHZhciBjb21tYW5kcyA9IFtdO1xuXHR2YXIgbXVsdGlsaW5lID0gZmFsc2U7XG5cdGxpbmVzLm1hcChmdW5jdGlvbihsaW5lLCBsaW5lSW5kZXgpIHtcblx0XHQvLyByZW1vdmUgY29tbWVudHNcblx0XHRsaW5lID0gbGluZS5zcGxpdChcIiNcIilbMF07XG5cblx0XHRpZighbGluZS5sZW5ndGgpIHtcblx0XHRcdG11bHRpbGluZSA9IGZhbHNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyByZW1vdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2VzXG5cdFx0XHRsaW5lID0gbGluZS50cmltKCk7XG5cdFx0fVxuXG5cdFx0aWYoIW11bHRpbGluZSkge1xuXHRcdFx0aWYobGluZS5sZW5ndGgpIHtcblx0XHRcdFx0dmFyIGNsaW5lcyA9IGxpbmUuc3BsaXQoXCI7XCIpO1xuXHRcdFx0XHR2YXIgY29kZWxpbmVzID0gW107XG5cdFx0XHRcdGNsaW5lcy5tYXAoZnVuY3Rpb24oY2xpbmUpIHtcblx0XHRcdFx0XHRpZihjbGluZS50cmltKCkubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRjb2RlbGluZXMucHVzaChjbGluZS50cmltKCkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0Y29kZWxpbmVzLm1hcChmdW5jdGlvbihjb2RlbGluZSkge1xuXG5cdFx0XHRcdFx0dmFyIHRva2VucyA9IGNvZGVsaW5lLnNwbGl0KFwiIFwiKTtcblx0XHRcdFx0XHR2YXIgbGFzdFRva2VuID0gdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXTtcblx0XHRcdFx0XHRpZihsYXN0VG9rZW4ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRpZihsYXN0VG9rZW5bbGFzdFRva2VuLmxlbmd0aCAtIDFdID09IFwiOlwiKSB7XG5cdFx0XHRcdFx0XHRcdG11bHRpbGluZSA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdC8vIHJlbW92ZSBcIjpcIlxuXHRcdFx0XHRcdFx0XHRsYXN0VG9rZW4gPSBsYXN0VG9rZW4uc3Vic3RyaW5nKDAsIGxhc3RUb2tlbi5sZW5ndGggLSAxKTtcblx0XHRcdFx0XHRcdFx0dG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXSA9IGxhc3RUb2tlbjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYodG9rZW5zLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgdHlwZSA9IFwiR0FURVwiO1xuXHRcdFx0XHRcdFx0XHRpZih0b2tlbnNbMF0gPT0gXCJERUZHQVRFXCIgfHwgdG9rZW5zWzBdID09IFwiREVGQ0lSQ1VJVFwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0dHlwZSA9IHRva2Vuc1swXTtcblx0XHRcdFx0XHRcdFx0XHR0b2tlbnMuc3BsaWNlKDAsIDEpO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0dmFyIG5hbWUgPSB0b2tlbnMuam9pbihcIiBcIik7XG5cblx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtcyA9IFtdO1xuXHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1TdGFydCA9IG5hbWUuaW5kZXhPZihcIihcIik7XG5cdFx0XHRcdFx0XHRcdGlmKHBhcmFtU3RhcnQgPj0gMCkge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBwYXJhbUVuZCA9IG5hbWUuaW5kZXhPZihcIilcIik7XG5cdFx0XHRcdFx0XHRcdFx0aWYocGFyYW1FbmQgPiBwYXJhbVN0YXJ0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRwYXJhbXMgPSBuYW1lLnN1YnN0cmluZyhwYXJhbVN0YXJ0ICsgMSwgcGFyYW1FbmQpLnNwbGl0KFwiLFwiKTtcblx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtcy5tYXAoZnVuY3Rpb24ocGFyLCBuZHgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyID0gcGFyLnRyaW0oKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0d2hpbGUocGFyLmxlbmd0aCAmJiBwYXJbMF0gPT0gXCIlXCIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwYXIgPSBwYXIuc2xpY2UoMSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1zW25keF0gPSBwYXI7XG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0aWYoKHBhcmFtRW5kICsgMSkgPD0gbmFtZS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dG9rID0gbmFtZS5zdWJzdHJpbmcocGFyYW1FbmQgKyAxLCBuYW1lLmxlbmd0aCkuc3BsaXQoXCIgXCIpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRva2VucyA9IFtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0b2subWFwKGZ1bmN0aW9uKHRrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGsgPSB0ay50cmltKCk7IFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKHRrLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dG9rZW5zLnB1c2godGspO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0b2tlbnMgPSBbXTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0bmFtZSA9IG5hbWUuc3Vic3RyaW5nKDAsIHBhcmFtU3RhcnQpLnRyaW0oKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0bmFtZSA9IHRva2Vucy5zcGxpY2UoMCwgMSlbMF0udHJpbSgpO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0dmFyIGFyZ3MgPSBbXTtcblx0XHRcdFx0XHRcdFx0Zm9yKHZhciB0ID0gMDsgdCA8IHRva2Vucy5sZW5ndGg7IHQrKykge1xuXHRcdFx0XHRcdFx0XHRcdHZhciB0b2tlbiA9IHRva2Vuc1t0XTtcblx0XHRcdFx0XHRcdFx0XHRpZihxdWJpdE5hbWVzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcWluZGV4ID0gcXViaXROYW1lcy5pbmRleE9mKHRva2VuKTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKHFpbmRleCA+PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MucHVzaChxaW5kZXgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncy5wdXNoKHRva2VuKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0YXJncy5wdXNoKHRva2VuKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRjb21tYW5kcy5wdXNoKHsgdHlwZTogdHlwZSwgbmFtZTogbmFtZSwgcGFyYW1zOiBwYXJhbXMsIGFyZ3M6IGFyZ3MsIGJvZHk6IFtdLCBsaW5lOiBsaW5lSW5kZXgsIGNvbDogMCB9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR2YXIgY29kZWxpbmVzID0gbGluZS5zcGxpdChcIjtcIik7XG5cdFx0XHRjb2RlbGluZXMubWFwKGZ1bmN0aW9uKGNvZGVsaW5lKSB7XG5cdFx0XHRcdGlmKGNvZGVsaW5lLnRyaW0oKS5sZW5ndGgpIHtcblx0XHRcdFx0XHRjb21tYW5kc1tjb21tYW5kcy5sZW5ndGggLSAxXS5ib2R5LnB1c2goY29kZWxpbmUudHJpbSgpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcblxuXHR2YXIgY29tbWFuZENvdW50ID0gY29tbWFuZHMubGVuZ3RoO1xuXHRmb3IodmFyIGNvbW1hbmRJbmRleCA9IDA7IGNvbW1hbmRJbmRleCA8IGNvbW1hbmRDb3VudDsgY29tbWFuZEluZGV4KyspIHtcblx0XHR2YXIgY29tbWFuZCA9IGNvbW1hbmRzW2NvbW1hbmRJbmRleF07XG5cblx0XHRpZihyZW5hbWVkR2F0ZXNbY29tbWFuZC5uYW1lXSkge1xuXHRcdFx0Y29tbWFuZC5uYW1lID0gcmVuYW1lZEdhdGVzW2NvbW1hbmQubmFtZV07XG5cdFx0fVxuXG5cdFx0c3dpdGNoKGNvbW1hbmQudHlwZSkge1xuXHRcdFx0Y2FzZSBcIkRFRkdBVEVcIjoge1xuXHRcdFx0XHRpZihjb21tYW5kLm5hbWUgPT0gY29tbWFuZC5uYW1lLnRvVXBwZXJDYXNlKCkpIHtcblx0XHRcdFx0XHR2YXIgbmV3TmFtZSA9IGNvbW1hbmQubmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRcdHJlbmFtZWRHYXRlc1tjb21tYW5kLm5hbWVdID0gbmV3TmFtZTtcblx0XHRcdFx0XHRjb21tYW5kLm5hbWUgPSBuZXdOYW1lO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gTk9UIElNUExFTUVOVEVEIFlFVCAhISFcblxuXHRcdFx0fTsgYnJlYWs7XG5cblx0XHRcdGNhc2UgXCJERUZDSVJDVUlUXCI6IHtcblx0XHRcdFx0aWYoY29tbWFuZC5uYW1lID09IGNvbW1hbmQubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG5cdFx0XHRcdFx0dmFyIG5ld05hbWUgPSBjb21tYW5kLm5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0XHRyZW5hbWVkR2F0ZXNbY29tbWFuZC5uYW1lXSA9IG5ld05hbWU7XG5cdFx0XHRcdFx0Y29tbWFuZC5uYW1lID0gbmV3TmFtZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhciBzdWJRdWlsID0gY29tbWFuZC5ib2R5LmpvaW4oXCJcXG5cIik7XG5cdFx0XHRcdHZhciBzdWJRdWJpdE5hbWVzID0gY29tbWFuZC5hcmdzO1xuXHRcdFx0XHR2YXIgc3ViQ2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXG5cdFx0XHRcdHN1YkNpcmN1aXQuaW1wb3J0UXVpbChzdWJRdWlsLCBlcnJvckNhbGxiYWNrLCBvcHRpb25zLCBzdWJRdWJpdE5hbWVzLCByZW5hbWVkR2F0ZXMsIGNvbW1hbmQubGluZSArIDEpO1xuXG5cdFx0XHRcdHN1YkNpcmN1aXQucGFyYW1zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjb21tYW5kLnBhcmFtcykpO1xuXG5cdFx0XHRcdHNlbGYucmVnaXN0ZXJHYXRlKGNvbW1hbmQubmFtZSwgc3ViQ2lyY3VpdC5zYXZlKCkpO1xuXHRcdFx0fTsgYnJlYWs7XG5cblx0XHRcdGNhc2UgXCJHQVRFXCI6IHtcblx0XHRcdFx0c3dpdGNoKGNvbW1hbmQubmFtZSkge1xuXHRcdFx0XHRcdGNhc2UgXCJERUNMQVJFXCI6IHtcblx0XHRcdFx0XHRcdC8vIE5PVCBJTVBMRU1FTlRFRCBZRVQgISEhXG5cblx0XHRcdFx0XHR9OyBicmVhaztcblxuXHRcdFx0XHRcdGNhc2UgXCJIQUxUXCI6IHtcblx0XHRcdFx0XHRcdC8vIFdoYXQhP1xuXG5cdFx0XHRcdFx0fTsgYnJlYWs7XG5cblx0XHRcdFx0XHRjYXNlIFwiUFJBR01BXCI6IHtcblx0XHRcdFx0XHRcdC8vIFdoYXQhP1xuXG5cdFx0XHRcdFx0fTsgYnJlYWs7XG5cblx0XHRcdFx0XHRkZWZhdWx0OiB7XG5cdFx0XHRcdFx0XHR2YXIgZ2F0ZUluZm8gPSBnZXRHYXRlSW5mbyhjb21tYW5kLm5hbWUpO1xuXHRcdFx0XHRcdFx0aWYoIWdhdGVJbmZvKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBlcnJvck1lc3NhZ2UgPSBcIkNhbm5vdCByZWNvZ25pemUgXFxcIlwiICsgY29tbWFuZC5uYW1lICsgXCJcXFwiLlwiO1xuXHRcdFx0XHRcdFx0XHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0XHRcdFx0ZXJyb3JDYWxsYmFjayhbIHsgbXNnOiBlcnJvck1lc3NhZ2UsIGxpbmU6IGxpbmVPZmZzZXQgKyBjb21tYW5kLmxpbmUsIGNvbDogY29tbWFuZC5jb2wgfSBdKTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHZhciBwYXJhbXMgPSB7fTtcblxuXHRcdFx0XHRcdFx0XHRpZihnYXRlSW5mby5nYXRlRGVmKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGdhdGVEZWYgPSBnYXRlSW5mby5nYXRlRGVmO1xuXHRcdFx0XHRcdFx0XHRcdHZhciBxdWlsRGVmID0gZ2F0ZUluZm8ucXVpbERlZjtcblxuXHRcdFx0XHRcdFx0XHRcdGlmKChxdWlsRGVmLnBhcmFtcyB8fCBbXSkubGVuZ3RoICE9IChjb21tYW5kLnBhcmFtcyB8fCBbXSkubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgZXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIG51bWJlciBvZiBwYXJhbXMuIEV4cGVjdGVkIFwiICsgKHF1aWxEZWYucGFyYW1zIHx8IFtdKS5sZW5ndGggKyBcIiBnb3QgXCIgKyAoY29tbWFuZC5wYXJhbXMgfHwgW10pLmxlbmd0aCArIFwiLlwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoZXJyb3JDYWxsYmFjaykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKFsgeyBtc2c6IGVycm9yTWVzc2FnZSwgbGluZTogbGluZU9mZnNldCArIGNvbW1hbmQubGluZSwgY29sOiBjb21tYW5kLmNvbCB9IF0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgZ2F0ZURlZi5wYXJhbXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtTmFtZSA9IGdhdGVEZWYucGFyYW1zW2ldO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBwYXJhbUluZGV4ID0gcXVpbERlZi5wYXJhbXMuaW5kZXhPZihwYXJhbU5hbWUpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKHBhcmFtSW5kZXggPCAwIHx8IHBhcmFtSW5kZXggPj0gY29tbWFuZC5wYXJhbXMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGVycm9yTWVzc2FnZSA9IFwiSW50ZXJuYWwgZXJyb3I6IFFVSUwgZGVmaW5pdGlvbiBmb3IgZ2F0ZSBcXFwiXCIgKyBjb21tYW5kLm5hbWUgKyBcIiBpcyBpbnZhbGlkLlwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGVycm9yQ2FsbGJhY2spIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soWyB7IG1zZzogZXJyb3JNZXNzYWdlLCBsaW5lOiBsaW5lT2Zmc2V0ICsgY29tbWFuZC5saW5lLCBjb2w6IGNvbW1hbmQuY29sIH0gXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJhbXNbcGFyYW1OYW1lXSA9IGNvbW1hbmQucGFyYW1zW3BhcmFtSW5kZXhdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBnYXRlRGVmID0gZ2F0ZUluZm8uY3VzdG9tR2F0ZTtcblx0XHRcdFx0XHRcdFx0XHRpZigoZ2F0ZURlZi5wYXJhbXMgfHwgW10pLmxlbmd0aCAhPSAoY29tbWFuZC5wYXJhbXMgfHwgW10pLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGVycm9yTWVzc2FnZSA9IFwiSW52YWxpZCBudW1iZXIgb2YgcGFyYW1zLiBFeHBlY3RlZCBcIiArIChnYXRlRGVmLnBhcmFtcyB8fCBbXSkubGVuZ3RoICsgXCIgZ290IFwiICsgKGNvbW1hbmQucGFyYW1zIHx8IFtdKS5sZW5ndGggKyBcIi5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGVycm9yQ2FsbGJhY2spIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3JDYWxsYmFjayhbIHsgbXNnOiBlcnJvck1lc3NhZ2UsIGxpbmU6IGxpbmVPZmZzZXQgKyBjb21tYW5kLmxpbmUsIGNvbDogY29tbWFuZC5jb2wgfSBdKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBnYXRlRGVmLnBhcmFtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1OYW1lID0gZ2F0ZURlZi5wYXJhbXNbaV07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtc1twYXJhbU5hbWVdID0gY29tbWFuZC5wYXJhbXNbaV07XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0Ly8gQ2hlY2sgaWYgbnVtYmVyIG9mIGFyZ3VtZW50cyBtYXRjaCBnYXRlRGVmXG5cdFx0XHRcdFx0XHRcdGlmKGNvbW1hbmQubmFtZSA9PSBcIk1FQVNVUkVcIikge1xuXHRcdFx0XHRcdFx0XHRcdGlmKGNvbW1hbmQuYXJncy5sZW5ndGggIT0gMikge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGVycm9yTWVzc2FnZSA9IFwiRXhwZWN0aW5nIDIgYXJndW1lbnRzIChxdWJpdCBhbmQgdGFyZ2V0IHJlZ2lzdGVyKSBidXQgZm91bmQgXCIgKyBjb21tYW5kLmFyZ3MubGVuZ3RoICsgXCIuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soWyB7IG1zZzogZXJyb3JNZXNzYWdlLCBsaW5lOiBsaW5lT2Zmc2V0ICsgY29tbWFuZC5saW5lLCBjb2w6IGNvbW1hbmQuY29sIH0gXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgcXViaXRDb3VudCA9IDE7XG5cdFx0XHRcdFx0XHRcdFx0aWYoZ2F0ZURlZi5udW1RdWJpdHMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHF1Yml0Q291bnQgPSBnYXRlRGVmLm51bVF1Yml0cztcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoZ2F0ZURlZi5tYXRyaXggJiYgZ2F0ZURlZi5tYXRyaXgubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHF1Yml0Q291bnQgPSBtYXRoLmxvZzIoZ2F0ZURlZi5tYXRyaXgubGVuZ3RoKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRpZihjb21tYW5kLmFyZ3MubGVuZ3RoICE9IHF1Yml0Q291bnQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBlcnJvck1lc3NhZ2UgPSBcIkV4cGVjdGluZyBcIiArIHF1Yml0Q291bnQgKyBcIiBhcmd1bWVudHMgYnV0IGZvdW5kIFwiICsgY29tbWFuZC5hcmdzLmxlbmd0aCArIFwiLlwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoZXJyb3JDYWxsYmFjaykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKFsgeyBtc2c6IGVycm9yTWVzc2FnZSwgbGluZTogbGluZU9mZnNldCArIGNvbW1hbmQubGluZSwgY29sOiBjb21tYW5kLmNvbCB9IF0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHR2YXIgYXJncyA9IFtdO1xuXHRcdFx0XHRcdFx0XHR2YXIgY3JlZyA9IHt9O1xuXHRcdFx0XHRcdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgY29tbWFuZC5hcmdzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGFyZyA9IGNvbW1hbmQuYXJnc1tpXTtcblx0XHRcdFx0XHRcdFx0XHRpZihjb21tYW5kLm5hbWUgPT0gXCJNRUFTVVJFXCIpIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGNyZWdTdGFydCA9IGFyZy5pbmRleE9mKFwiW1wiKTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGNyZWdTdGFydCA+PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBjcmVnRW5kID0gYXJnLmluZGV4T2YoXCJdXCIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjcmVnRW5kID4gY3JlZ1N0YXJ0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y3JlZ0JpdCA9IGFyZy5zdWJzdHJpbmcoY3JlZ1N0YXJ0ICsgMSwgY3JlZ0VuZCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y3JlZ05hbWUgPSBhcmcuc3Vic3RyaW5nKDAsIGNyZWdTdGFydCk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjcmVnID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Yml0OiBjcmVnQml0LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bmFtZTogY3JlZ05hbWVcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgYXJnSW50ID0gcGFyc2VJbnQoYXJnKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoaXNOYU4oYXJnSW50KSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGkgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnB1c2goYXJnKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGVycm9yTWVzc2FnZSA9IFwiSW52YWxpZCBhcmd1bWVudCBcXFwiXCIgKyBhcmcgKyBcIlxcXCJcIjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGVycm9yQ2FsbGJhY2spIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3JDYWxsYmFjayhbIHsgbXNnOiBlcnJvck1lc3NhZ2UsIGxpbmU6IGxpbmVPZmZzZXQgKyBjb21tYW5kLmxpbmUsIGNvbDogY29tbWFuZC5jb2wgfSBdKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MucHVzaChhcmdJbnQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgYXJnSW50ID0gcGFyc2VJbnQoYXJnKTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGlzTmFOKGFyZ0ludCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGVycm9yTWVzc2FnZSA9IFwiSW52YWxpZCBhcmd1bWVudCBcXFwiXCIgKyBhcmcgKyBcIlxcXCJcIjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoZXJyb3JDYWxsYmFjaykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soWyB7IG1zZzogZXJyb3JNZXNzYWdlLCBsaW5lOiBsaW5lT2Zmc2V0ICsgY29tbWFuZC5saW5lLCBjb2w6IGNvbW1hbmQuY29sIH0gXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnB1c2goYXJnSW50KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRzZWxmLmFwcGVuZEdhdGUoZ2F0ZUluZm8ubmFtZSwgYXJncywgeyBwYXJhbXM6IHBhcmFtcywgY3JlZzogY3JlZyB9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0fTsgYnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0Ly8gVGhpcyBlcnJvciBoYW5kbGluZyBpcyBjcipwIGJ1dCBsZXQncyBiZSBjb25zaXN0ZW50IHdpdGggaW1wb3J0UUFTTSgpIGZvciBub3dcblx0aWYoZXJyb3JDYWxsYmFjaykge1xuXHRcdGVycm9yQ2FsbGJhY2soW10pO1xuXHR9XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0UXVpcmsgPSBmdW5jdGlvbihkZWNvbXBvc2UpIHtcblx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdHZhciBjaXJjdWl0ID0gbnVsbDtcblxuXHRmdW5jdGlvbiByYW5nZShuKSB7XG5cdFx0dmFyIGFyciA9IFtdO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcblx0XHRcdGFyci5wdXNoKGkpO1xuXHRcdH1cblx0XHRyZXR1cm4gYXJyO1xuXHR9XG5cblx0ZnVuY3Rpb24gaXNXaXJlSW5SYW5nZSh3aXJlLCB3aXJlUmFuZ2Upe1xuXHRcdGlmKHdpcmVSYW5nZS5pbmRleE9mKHdpcmUpID4gLTEpe1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8vIGZvcmNlIGRlY29tcG9zZVxuXHRkZWNvbXBvc2UgPSB0cnVlO1xuXHR2YXIgb2JqID0gdGhpcy5zYXZlKGRlY29tcG9zZSk7XG5cdHZhciBjaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdHZhciB0ZW1wQ2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRjaXJjdWl0LmxvYWQob2JqKTtcblx0dGVtcENpcmN1aXQubG9hZChvYmopO1xuXG5cdHZhciBxdWlyayA9IHtcblx0XHRjb2xzOiBbXSxcblx0XHRnYXRlczogW11cblx0fTtcblxuXHR2YXIgZ2F0ZU1hdHJpeCA9IG51bGw7XG5cblx0dmFyIGdsb2JhbFBhcmFtcyA9IHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMucGFyYW1zID8gdGhpcy5vcHRpb25zLnBhcmFtcyA6IHt9O1xuXHRcblx0dmFyIGdhdGVMb2NhdGlvbnMgPSB7fTtcblx0dmFyIGN1c3RvbUdhdGVDaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cblx0XG5cdFxuXHR2YXIgZ2F0ZXNUb0JlQWRkZWQgPSBbXTtcblx0XG5cdHZhciBnYXRlSW5mb3JtYXRpb24gPSB7fTtcblxuXHRpZighZGVjb21wb3NlKSB7XG5cdFx0dmFyIG51bUNvbHMgPSB0ZW1wQ2lyY3VpdC5udW1Db2xzKCk7XG5cdFx0Zm9yKHZhciBjb2x1bW4gPSBudW1Db2xzIC0gMTsgY29sdW1uID49IDA7IGNvbHVtbi0tKSB7XG5cdFx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGVtcENpcmN1aXQubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdFx0dmFyIGdhdGUgPSB0ZW1wQ2lyY3VpdC5nYXRlc1t3aXJlXVtjb2x1bW5dO1xuXHRcdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDAgJiYgIXRlbXBDaXJjdWl0LmJhc2ljR2F0ZXNbZ2F0ZS5uYW1lXSkge1xuXHRcdFx0XHRcdGN1c3RvbURlY29tcG9zZWRDaXJjdWl0ID0gdGVtcENpcmN1aXQuZGVjb21wb3NlR2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRcdFx0dmFyIGlzRGVjb21wb3NlQ3VzdG9tQ2lyY3VpdCA9IGZhbHNlO1xuXHRcdFx0XHRcdGdhdGVJbmZvcm1hdGlvbltnYXRlLm5hbWVdID0ge2luZm86W10sIGlzRGVjb21wb3NlQ3VzdG9tQ2lyY3VpdDpudWxsfTtcblx0XHRcdFx0XHRmb3IodmFyIGRlY29tcG9zZWRDb2x1bW4gPSAwOyBkZWNvbXBvc2VkQ29sdW1uIDwgY3VzdG9tRGVjb21wb3NlZENpcmN1aXQubnVtQ29scygpOyBkZWNvbXBvc2VkQ29sdW1uKyspIHtcblx0XHRcdFx0XHRcdGZvcih2YXIgZGVjb21wb3NlZFdpcmUgPSAwOyBkZWNvbXBvc2VkV2lyZSA8IGN1c3RvbURlY29tcG9zZWRDaXJjdWl0Lm51bVF1Yml0czsgZGVjb21wb3NlZFdpcmUrKykge1xuXHRcdFx0XHRcdFx0XHR2YXIgZ2F0ZUluQ3VzdG9tQ2lyY3VpdCA9IGN1c3RvbURlY29tcG9zZWRDaXJjdWl0LmdldEdhdGVBdChkZWNvbXBvc2VkQ29sdW1uLCBkZWNvbXBvc2VkV2lyZSk7XG5cblx0XHRcdFx0XHRcdFx0aWYoZ2F0ZUluQ3VzdG9tQ2lyY3VpdCl7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGJhc2ljR2F0ZUluQ3VzdG9tQ2lyY3VpdCA9IGN1c3RvbURlY29tcG9zZWRDaXJjdWl0LmJhc2ljR2F0ZXNbZ2F0ZUluQ3VzdG9tQ2lyY3VpdC5uYW1lXTtcblx0XHRcdFx0XHRcdFx0XHRpZihiYXNpY0dhdGVJbkN1c3RvbUNpcmN1aXQuZXhwb3J0SW5mbyAmJiAhYmFzaWNHYXRlSW5DdXN0b21DaXJjdWl0LmV4cG9ydEluZm8ucXVpcmspe1xuXHRcdFx0XHRcdFx0XHRcdFx0aXNEZWNvbXBvc2VDdXN0b21DaXJjdWl0ID0gaXNEZWNvbXBvc2VDdXN0b21DaXJjdWl0IHx8IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdGlmKGdhdGVJbkN1c3RvbUNpcmN1aXQuY29ubmVjdG9yID09IDApe1x0XG5cdFx0XHRcdFx0XHRcdFx0XHRnYXRlSW5mb3JtYXRpb25bZ2F0ZS5uYW1lXS5pbmZvLnB1c2goe2dhdGVJbkN1c3RvbUNpcmN1aXQ6Z2F0ZUluQ3VzdG9tQ2lyY3VpdCwgY29sdW1uOmNvbHVtbn0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0Z2F0ZXNUb0JlQWRkZWQucHVzaChnYXRlSW5mb3JtYXRpb24pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRnYXRlSW5mb3JtYXRpb25bZ2F0ZS5uYW1lXS5pc0RlY29tcG9zZUN1c3RvbUNpcmN1aXQ9IGlzRGVjb21wb3NlQ3VzdG9tQ2lyY3VpdDtcblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdGlmKGlzRGVjb21wb3NlQ3VzdG9tQ2lyY3VpdCl7XG5cdFx0XHRcdFx0XHRjaXJjdWl0LmdhdGVzLm1hcChmdW5jdGlvbihjaXJjdWl0R2F0ZSwgaW5kZXgpe1xuXHRcdFx0XHRcdFx0XHRjaXJjdWl0R2F0ZS5tYXAoZnVuY3Rpb24oZ2F0ZVRvUmVtb3ZlKXtcblx0XHRcdFx0XHRcdFx0XHRpZihnYXRlVG9SZW1vdmUgJiYgZ2F0ZVRvUmVtb3ZlLm5hbWUgPT0gZ2F0ZS5uYW1lKXtcblx0XHRcdFx0XHRcdFx0XHRcdGNpcmN1aXQucmVtb3ZlR2F0ZShnYXRlVG9SZW1vdmUuaWQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Z2F0ZUtleXMgPSBPYmplY3Qua2V5cyhnYXRlSW5mb3JtYXRpb24pO1xuXHRmb3IodmFyIGdhdGVOdW1iZXIgPSAgMDsgZ2F0ZU51bWJlciA8IGdhdGVLZXlzLmxlbmd0aDsgZ2F0ZU51bWJlcisrKXtcblx0XHRnYXRlS2V5ID0gZ2F0ZUtleXNbZ2F0ZU51bWJlcl07XG5cdFx0aWYoZ2F0ZUluZm9ybWF0aW9uW2dhdGVLZXldLmlzRGVjb21wb3NlQ3VzdG9tQ2lyY3VpdCl7XG5cdFx0XHRmb3IodmFyIGkgPSBnYXRlSW5mb3JtYXRpb25bZ2F0ZUtleV0uaW5mby5sZW5ndGggLSAxOyBpID49IDA7IGktLSl7XG5cdFx0XHRcdHZhciBnYXRlSW5mbyA9IGdhdGVJbmZvcm1hdGlvbltnYXRlS2V5XS5pbmZvW2ldO1xuXHRcdFx0XHR2YXIgZ2F0ZVRvQWRkID0gZ2F0ZUluZm8uZ2F0ZUluQ3VzdG9tQ2lyY3VpdDtcblx0XHRcdFx0Y2lyY3VpdC5pbnNlcnRHYXRlKGdhdGVUb0FkZC5uYW1lLCBnYXRlSW5mby5jb2x1bW4sIGdhdGVUb0FkZC53aXJlcywgZ2F0ZVRvQWRkLm9wdGlvbnMpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHZhciBwcmV2aW91c0NvbHVtbiA9IG51bGw7XG5cdHZhciBwcmV2aW91c0dhdGUgPSBudWxsO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IGNpcmN1aXQubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gY2lyY3VpdC5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdGlmKGdhdGUpe1xuXHRcdFx0XHRpZihwcmV2aW91c0dhdGUgJiYgcHJldmlvdXNHYXRlLm5hbWUgIT0gZ2F0ZS5uYW1lICYmIHByZXZpb3VzR2F0ZS5jb25uZWN0b3IgIT0gMCAmJiBwcmV2aW91c0NvbHVtbiA9PSBjb2x1bW4pe1xuXHRcdFx0XHRcdGNpcmN1aXQucmVtb3ZlR2F0ZShnYXRlLmlkKTtcblx0XHRcdFx0XHRjaXJjdWl0Lmluc2VydEdhdGUoZ2F0ZS5uYW1lLCBnYXRlLmNvbHVtbiArIDEsIGdhdGUud2lyZXMsIGdhdGUub3B0aW9ucyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cHJldmlvdXNHYXRlID0gZ2F0ZTtcblx0XHRcdFx0cHJldmlvdXNDb2x1bW4gPSBjb2x1bW47XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0dmFyIG51bUNvbHMgPSBjaXJjdWl0Lm51bUNvbHMoKTtcblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdHZhciBxdWlya0NvbHVtbiA9IFtdO1xuXHRcdHZhciB3aXJlUmFuZ2UgPSBbXTtcblx0XHR2YXIgaXNCYXNpY0dhdGUgPSBmYWxzZTtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgY2lyY3VpdC5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSBjaXJjdWl0LmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0aWYoIWdhdGUgfHwgZ2F0ZS5uYW1lID09IFwibWVhc3VyZVwiIHx8IGdhdGUubmFtZSA9PSBcInJlc2V0XCIpIHtcblx0XHRcdFx0aWYoaXNCYXNpY0dhdGUgfHwgIWlzV2lyZUluUmFuZ2Uod2lyZSwgd2lyZVJhbmdlKSl7XG5cdFx0XHRcdFx0cXVpcmtDb2x1bW4ucHVzaCgxKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dmFyIGJhc2ljR2F0ZSA9IGNpcmN1aXQuYmFzaWNHYXRlc1tnYXRlLm5hbWVdO1xuXHRcdFx0XHR2YXIgbWF4V2lyZSA9IG1hdGgubWF4KGdhdGUud2lyZXMpO1xuXHRcdFx0XHR2YXIgbWluV2lyZSA9IG1hdGgubWluKGdhdGUud2lyZXMpO1xuXHRcdFx0XHR2YXIgZ2F0ZVdpcmVzID0gZ2F0ZS53aXJlcy5zbGljZSgpO1xuXHRcdFx0XHR2YXIgd2lyZVJhbmdlID0gcmFuZ2UobWF4V2lyZSk7XG5cdFx0XHRcdGlmKGJhc2ljR2F0ZSkge1xuXHRcdFx0XHRcdHZhciBxdWlya05hbWUgPSBcIlwiO1xuXHRcdFx0XHRcdHZhciBjb250cm9sbGVkID0gZmFsc2U7XG5cdFx0XHRcdFx0aXNCYXNpY0dhdGUgPSB0cnVlO1xuXHRcdFx0XHRcdGlmKGJhc2ljR2F0ZS5leHBvcnRJbmZvICYmIGJhc2ljR2F0ZS5leHBvcnRJbmZvLnF1aXJrKXtcblx0XHRcdFx0XHRcdHF1aXJrTmFtZSA9IGJhc2ljR2F0ZS5leHBvcnRJbmZvLnF1aXJrLm5hbWU7XG5cdFx0XHRcdFx0XHRjb250cm9sbGVkID0gYmFzaWNHYXRlLmV4cG9ydEluZm8ucXVpcmsuY29udHJvbGxlZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gdHdvLXF1Yml0IGdhdGVcblx0XHRcdFx0XHRpZihiYXNpY0dhdGUubWF0cml4Lmxlbmd0aCA9PSA0KSB7XG5cdFx0XHRcdFx0XHQvLyBrbm93biBnYXRlLCBidXQgdGhpcyBpcyBjb250cm9sIGJpdFxuXHRcdFx0XHRcdFx0aWYocXVpcmtOYW1lICYmIChnYXRlLm5hbWUgPT0gXCJzd2FwXCIgJiYgZ2F0ZS5jb25uZWN0b3IgPCBnYXRlLndpcmVzLmxlbmd0aCAtIDIgJiYgY29udHJvbGxlZCkgfHwgKGdhdGUubmFtZSAhPSBcInN3YXBcIiAmJiBnYXRlLmNvbm5lY3RvciA8IGdhdGUud2lyZXMubGVuZ3RoIC0gMSAmJiBjb250cm9sbGVkKSkge1xuXHRcdFx0XHRcdFx0XHRxdWlya05hbWUgPSBcIuKAolwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIHRocmVlLXF1Yml0IGdhdGVcblx0XHRcdFx0XHRpZihiYXNpY0dhdGUubWF0cml4Lmxlbmd0aCA9PSA4KSB7XG5cdFx0XHRcdFx0XHQvLyBrbm93biBnYXRlLCBidXQgdGhpcyBpcyBjb250cm9sIGJpdFxuXHRcdFx0XHRcdFx0aWYocXVpcmtOYW1lICYmIChnYXRlLm5hbWUgPT0gXCJjc3dhcFwiICYmIGdhdGUuY29ubmVjdG9yIDwgZ2F0ZS53aXJlcy5sZW5ndGggLSAyICYmIGNvbnRyb2xsZWQpIHx8IChnYXRlLm5hbWUgIT0gXCJjc3dhcFwiICYmIGdhdGUuY29ubmVjdG9yIDwgZ2F0ZS53aXJlcy5sZW5ndGggLSAxICYmIGNvbnRyb2xsZWQpKSB7XG5cdFx0XHRcdFx0XHRcdHF1aXJrTmFtZSA9IFwi4oCiXCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYocXVpcmtOYW1lKSB7XG5cdFx0XHRcdFx0XHQvLyBhZGQgZ2F0ZSB0byBjb2x1bW5cblx0XHRcdFx0XHRcdHF1aXJrQ29sdW1uLnB1c2gocXVpcmtOYW1lKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBOb3QgZGlyZWN0bHkgc3VwcG9ydGVkIGJ5IHF1aXJrXG5cdFx0XHRcdFx0aWYoIXF1aXJrTmFtZSkge1xuXHRcdFx0XHRcdFx0cXVpcmtOYW1lID0gXCJ+XCIgKyBnYXRlLm5hbWU7XG5cblx0XHRcdFx0XHRcdGlmKGJhc2ljR2F0ZS5wYXJhbXMubGVuZ3RoICYmIGdhdGUub3B0aW9ucy5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdFx0YmFzaWNHYXRlLnBhcmFtcy5tYXAoZnVuY3Rpb24ocGFyYW0pe1xuXHRcdFx0XHRcdFx0XHRcdGFuZ2xlID0gbWF0aC5yb3VuZChtYXRoLmV2YWx1YXRlKGdhdGUub3B0aW9ucy5wYXJhbXNbcGFyYW1dLCBnbG9iYWxQYXJhbXMpLCAzKTtcblx0XHRcdFx0XHRcdFx0XHRxdWlya05hbWUgKz0gXCJfXCIgKyBhbmdsZTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHZhciBtYXRyaXggPSBcIlwiO1xuXHRcdFx0XHRcdFx0bWF0cml4ICs9IFwie1wiO1xuXG5cdFx0XHRcdFx0XHR2YXIgcmF3TWF0cml4ID0gc2VsZi5nZXRSYXdHYXRlKGJhc2ljR2F0ZSwgZ2F0ZS5vcHRpb25zKTtcblxuXHRcdFx0XHRcdFx0dmFyIHRhcmdldFdpcmVzU29ydGVkID0gZ2F0ZVdpcmVzLnNvcnQoKTtcblx0XHRcdFx0XHRcdHZhciB0YXJnZXRXaXJlcyA9IFtdO1xuXHRcdFx0XHRcdFx0Z2F0ZS53aXJlcy5tYXAoZnVuY3Rpb24odFdpcmUpIHtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0V2lyZXMucHVzaCh0YXJnZXRXaXJlc1NvcnRlZC5pbmRleE9mKHRXaXJlKSk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGlmKG1heFdpcmUgLSBtaW5XaXJlICsgMSA+IGdhdGUud2lyZXMubGVuZ3RoIHx8IGdhdGUud2lyZXNbMF0gPiBnYXRlLndpcmVzWzFdKSB7XG5cdFx0XHRcdFx0XHRcdGdhdGVNYXRyaXggPSBjaXJjdWl0LnRyYW5zZm9ybU1hdHJpeChtYXhXaXJlIC0gbWluV2lyZSArIDEsIHJhd01hdHJpeCwgdGFyZ2V0V2lyZXMpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Z2F0ZU1hdHJpeCA9IHJhd01hdHJpeDtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Z2F0ZU1hdHJpeC5tYXAoZnVuY3Rpb24ocm93LCByb3dJbmRleCkge1xuXHRcdFx0XHRcdFx0XHRpZihyb3dJbmRleCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRtYXRyaXggKz0gXCIsXCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0bWF0cml4ICs9IFwie1wiO1xuXHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0cm93Lm1hcChmdW5jdGlvbihjb2wsIGNvbEluZGV4KSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYoY29sSW5kZXggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRtYXRyaXggKz0gXCIsXCI7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0aWYodHlwZW9mIGNvbCAhPSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb2wgPSBtYXRoLmNvbXBsZXgoY29sKS50b1N0cmluZygpO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb2wgPSBjb2wudG9TdHJpbmcoKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRtYXRyaXggKz0gY29sO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0bWF0cml4ICs9IFwifVwiO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRtYXRyaXggKz0gXCJ9XCI7XG5cdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdGlmKGdhdGUuY29ubmVjdG9yID09IDApIHtcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0dmFyIGFscmVhZHlEZWZpbmVkID0gcXVpcmsuZ2F0ZXMuZmluZChmdW5jdGlvbihndCkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBndC5pZCA9PSBxdWlya05hbWU7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0aWYoIWFscmVhZHlEZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0cXVpcmsuZ2F0ZXMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZDogcXVpcmtOYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0bWF0cml4OiBtYXRyaXhcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0dmFyIGdhdGVQcmVzZW50SW5Db2wgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0Zm9yKHZhciBjb2x1bW5FbGVtZW50ID0gMDsgY29sdW1uRWxlbWVudCA8IHF1aXJrQ29sdW1uLmxlbmd0aDsgY29sdW1uRWxlbWVudCsrKXtcblx0XHRcdFx0XHRcdFx0XHRpZihxdWlya0NvbHVtbltjb2x1bW5FbGVtZW50XSA9PSBxdWlya05hbWUpe1xuXHRcdFx0XHRcdFx0XHRcdFx0Z2F0ZVByZXNlbnRJbkNvbCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRpZighZ2F0ZVByZXNlbnRJbkNvbCl7XG5cdFx0XHRcdFx0XHRcdFx0cXVpcmtDb2x1bW4ucHVzaChxdWlya05hbWUpO1xuXHRcdFx0XHRcdFx0XHR9ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0cXVpcmtDb2x1bW4ucHVzaCgxKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0aWYod2lyZSA8IGdhdGUud2lyZXNbMF0pe1xuXHRcdFx0XHRcdFx0XHRcdHF1aXJrLmdhdGVzLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdFx0aWQ6IHF1aXJrTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdG1hdHJpeDogbWF0cml4XG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGFscmVhZHlEZWZpbmVkID0gcXVpcmsuZ2F0ZXMuZmluZChmdW5jdGlvbihndCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGd0LmlkID09IHF1aXJrTmFtZTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRpZighYWxyZWFkeURlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aXJrLmdhdGVzLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZDogcXVpcmtOYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtYXRyaXg6IG1hdHJpeFxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdHZhciBnYXRlUHJlc2VudEluQ29sID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBjb2x1bW5FbGVtZW50ID0gMDsgY29sdW1uRWxlbWVudCA8IHF1aXJrQ29sdW1uLmxlbmd0aDsgY29sdW1uRWxlbWVudCsrKXtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKHF1aXJrQ29sdW1uW2NvbHVtbkVsZW1lbnRdID09IHF1aXJrTmFtZSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGdhdGVQcmVzZW50SW5Db2wgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRpZighZ2F0ZVByZXNlbnRJbkNvbCl7XG5cdFx0XHRcdFx0XHRcdFx0XHRxdWlya0NvbHVtbi5wdXNoKHF1aXJrTmFtZSk7XG5cdFx0XHRcdFx0XHRcdFx0fWVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0cXVpcmtDb2x1bW4ucHVzaCgxKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dmFyIGN1c3RvbUdhdGVXaXJlcyA9IFtdO1xuXHRcdFx0XHRcdGlzQmFzaWNHYXRlID0gZmFsc2U7XG5cdFx0XHRcdFx0aWYoZ2F0ZS5jb25uZWN0b3IgPT0gMCkge1xuXHRcdFx0XHRcdFx0dmFyIGN1c3RvbUdhdGVFeGlzdHMgPSBjdXN0b21HYXRlQ2lyY3VpdC5nYXRlcy5maW5kKGZ1bmN0aW9uKGN1c3RvbUdhdGUpe1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gY3VzdG9tR2F0ZSAmJiBjdXN0b21HYXRlWzBdICYmIGN1c3RvbUdhdGVbMF1bXCJuYW1lXCJdID09IGdhdGUubmFtZTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0aWYoIWN1c3RvbUdhdGVFeGlzdHMpe1xuXHRcdFx0XHRcdFx0XHR2YXIgd2lyZU9mZnNldCA9IGdhdGUud2lyZXNbMF07XG5cdFx0XHRcdFx0XHRcdGdhdGUud2lyZXMubWFwKGZ1bmN0aW9uKGdhdGVXaXJlKXtcblx0XHRcdFx0XHRcdFx0XHRjdXN0b21HYXRlV2lyZXMucHVzaChnYXRlV2lyZSAtIHdpcmVPZmZzZXQpO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0Y3VzdG9tR2F0ZUNpcmN1aXQucmVnaXN0ZXJHYXRlKGdhdGUubmFtZSwgc2VsZi5jdXN0b21HYXRlc1tnYXRlLm5hbWVdKTtcblx0XHRcdFx0XHRcdFx0Y3VzdG9tR2F0ZUNpcmN1aXQuYXBwZW5kR2F0ZShnYXRlLm5hbWUsIGN1c3RvbUdhdGVXaXJlcyk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRxdWlya0NvbHVtbi5wdXNoKFwiflwiICsgZ2F0ZS5uYW1lKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cXVpcmtDb2x1bW4ucHVzaCgxKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cXVpcmsuY29scy5wdXNoKHF1aXJrQ29sdW1uKTtcblx0fVx0XHRcblx0XG5cdFxuXHQvLyB1c2VyIGRlZmluZWQgZ2F0ZXNcblx0aWYoIWRlY29tcG9zZSkge1xuXHRcdHZhciB1c2VkR2F0ZXMgPSBjaXJjdWl0LnVzZWRHYXRlcygpO1xuXHRcdHVzZWRHYXRlcy5tYXAoZnVuY3Rpb24odXNlZEdhdGVOYW1lKSB7XG5cdFx0XHR2YXIgYmFzaWNHYXRlID0gY2lyY3VpdC5iYXNpY0dhdGVzW3VzZWRHYXRlTmFtZV07XG5cdFx0XHRpZighYmFzaWNHYXRlKSB7XG5cdFx0XHRcdHZhciBjdXN0b21HYXRlID0gc2VsZi5jdXN0b21HYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0XHRpZihjdXN0b21HYXRlKSB7XG5cdFx0XHRcdFx0dmFyIGN1c3RvbUNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0XHRcdFx0XHRmb3IoY3VzdG9tQ29sID0gMDsgY3VzdG9tQ29sIDwgY3VzdG9tR2F0ZUNpcmN1aXQubnVtQ29scygpOyBjdXN0b21Db2wrKyl7XG5cdFx0XHRcdFx0XHRmb3IoY3VzdG9tV2lyZSA9IDA7IGN1c3RvbVdpcmUgPCBjdXN0b21HYXRlQ2lyY3VpdC5udW1HYXRlcygpOyBjdXN0b21XaXJlKyspe1xuXHRcdFx0XHRcdFx0XHR2YXIgY2lyY3VpdEdhdGUgPSBjdXN0b21HYXRlQ2lyY3VpdC5nZXRHYXRlQXQoY3VzdG9tQ29sLCBjdXN0b21XaXJlKTtcblx0XHRcdFx0XHRcdFx0aWYoY2lyY3VpdEdhdGUgJiYgY2lyY3VpdEdhdGUubmFtZSA9PSB1c2VkR2F0ZU5hbWUpe1xuXHRcdFx0XHRcdFx0XHRcdGN1c3RvbUdhdGVPYmogPSBjdXN0b21HYXRlQ2lyY3VpdC5kZWNvbXBvc2VHYXRlQXQoY3VzdG9tQ29sLCBjdXN0b21XaXJlKTtcblx0XHRcdFx0XHRcdFx0XHRjdXN0b21DaXJjdWl0LmxvYWQoY3VzdG9tR2F0ZU9iaik7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cXVpcmsuZ2F0ZXMucHVzaCh7XG5cdFx0XHRcdFx0XHRpZDogXCJ+XCIgKyB1c2VkR2F0ZU5hbWUsXG5cdFx0XHRcdFx0XHRjaXJjdWl0OiBjdXN0b21DaXJjdWl0LmV4cG9ydFF1aXJrKHRydWUpXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHJldHVybiBxdWlyaztcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydENpcnEgPSBmdW5jdGlvbihjb21tZW50LCBkZWNvbXBvc2UsIGV4cG9ydEFzR2F0ZU5hbWUsIHZlcnNpb25TdHIsIGFzSnVweXRlciwgc2hvdHMsIGV4cG9ydFRmcSkge1xuXHR2YXIgb3B0aW9ucyA9IHtcblx0XHRjb21tZW50OiBjb21tZW50LFxuXHRcdGRlY29tcG9zZTogZGVjb21wb3NlLFxuXHRcdHZlcnNpb25TdHI6IHZlcnNpb25TdHIsXG5cdFx0YXNKdXB5dGVyOiBhc0p1cHl0ZXIsXG5cdFx0c2hvdHM6IHNob3RzLFxuXHRcdGV4cG9ydFRmcTogZXhwb3J0VGZxXG5cdH07XG5cdHJldHVybiB0aGlzLmV4cG9ydFRvQ2lycShvcHRpb25zLCBleHBvcnRBc0dhdGVOYW1lKTtcbn1cblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0UVNoYXJwID0gZnVuY3Rpb24oY29tbWVudCwgZGVjb21wb3NlLCBleHBvcnRBc0dhdGVOYW1lLCB2ZXJzaW9uU3RyLCBhc0p1cHl0ZXIsIGNpcmN1aXROYW1lLCBpbmRlbnREZXB0aCkge1xuXHR2YXIgb3B0aW9ucyA9IHtcblx0XHRjb21tZW50OiBjb21tZW50LFxuXHRcdGRlY29tcG9zZTogZGVjb21wb3NlLFxuXHRcdHZlcnNpb25TdHI6IHZlcnNpb25TdHIsXG5cdFx0YXNKdXB5dGVyOiBhc0p1cHl0ZXIsXG5cdFx0Y2lyY3VpdE5hbWU6IGNpcmN1aXROYW1lLFxuXHRcdGluZGVudERlcHRoOiBpbmRlbnREZXB0aFxuXHR9O1xuXHRyZXR1cm4gdGhpcy5leHBvcnRUb1FTaGFycChvcHRpb25zLCBleHBvcnRBc0dhdGVOYW1lKTtcbn1cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFFvYmogPSBmdW5jdGlvbihjaXJjdWl0TmFtZSwgZXhwZXJpbWVudE5hbWUsIG51bVNob3RzLCBjaXJjdWl0UmVwbGFjZW1lbnQpIHtcblx0dmFyIG9wdGlvbnMgPSB7XG5cdFx0Y2lyY3VpdE5hbWU6IGNpcmN1aXROYW1lLFxuXHRcdGV4cGVyaW1lbnROYW1lOiBleHBlcmltZW50TmFtZSxcblx0XHRudW1TaG90czogbnVtU2hvdHNcblx0fTtcblx0XG5cdHJldHVybiB0aGlzLmV4cG9ydFRvUW9iaihvcHRpb25zLCBjaXJjdWl0UmVwbGFjZW1lbnQpXHRcbn1cblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuaW1wb3J0UW9iaiA9IGZ1bmN0aW9uKHFvYmosIGVycm9yQ2FsbGJhY2spIHtcblx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdHRoaXMuaW5pdCgpO1xuXG5cdGlmKCFxb2JqIHx8ICFxb2JqLmV4cGVyaW1lbnRzIHx8ICFxb2JqLmV4cGVyaW1lbnRzLmxlbmd0aCkge1xuXHRcdGlmKGVycm9yQ2FsbGJhY2spIHtcblx0XHRcdGVycm9yQ2FsbGJhY2soWyB7IG1zZzogXCJJbnZhbGlkIGlucHV0IGZpbGU6IG5vIGV4cGVyaW1lbnRzIGZvdW5kLlwiIH0gXSk7XG5cdFx0fVxuXHRcdHJldHVybjtcblx0fVxuXG5cdHZhciBleHBlcmltZW50ID0gcW9iai5leHBlcmltZW50c1swXTtcblxuXHR2YXIgaGVhZGVyID0gZXhwZXJpbWVudC5oZWFkZXIgfHwge307XG5cblx0Ly8gQWRkIHF1Yml0c1xuXHR0aGlzLmluaXQocGFyc2VJbnQoaGVhZGVyLm5fcXViaXRzIHx8IDApKTtcblxuXHQvLyBDbGFzc2ljYWwgcmVnaXN0ZXJzXG5cdHZhciBjcmVnRGF0YSA9IHt9O1xuXHRpZihoZWFkZXIuY3JlZ19zaXplcyAmJiBoZWFkZXIuY3JlZ19zaXplcy5sZW5ndGgpIHtcblx0XHR2YXIgdG90YWxCaXRzID0gMDtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgaGVhZGVyLmNyZWdfc2l6ZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBjcmVnRGVmID0gaGVhZGVyLmNyZWdfc2l6ZXNbaV07XG5cdFx0XHRpZihjcmVnRGVmLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0dmFyIGNyZWdOYW1lID0gY3JlZ0RlZlswXSArIFwiXCI7XG5cdFx0XHRcdHZhciBjcmVnTGVuID0gcGFyc2VJbnQoY3JlZ0RlZlsxXSk7XG5cdFx0XHRcdHRoaXMuY3JlYXRlQ3JlZyhjcmVnTmFtZSwgY3JlZ0xlbik7XG5cblx0XHRcdFx0dmFyIGNyZWdNYXNrID0gKCgxIDw8ICh0b3RhbEJpdHMgKyBjcmVnTGVuKSkgLSAoMSA8PCB0b3RhbEJpdHMpKTtcblxuXHRcdFx0XHRjcmVnRGF0YVtjcmVnTmFtZV0gPSB7XG5cdFx0XHRcdFx0bWFzazogY3JlZ01hc2ssXG5cdFx0XHRcdFx0b2Zmc2V0OiB0b3RhbEJpdHNcblx0XHRcdFx0fTtcblxuXHRcdFx0XHR0b3RhbEJpdHMgKz0gY3JlZ0xlbjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBSZXR1cm4gY2xhc3NpY2FsIGNvbmRpdGlvbiBhcmd1bWVudCBmb3IgZ2F0ZSBmcm9tIGJmdW5jIG1hc2sgYW5kIHZhbHVlXG5cdGZ1bmN0aW9uIGNvbmRpdGlvbkZyb21NYXNrQW5kVmFsdWUobWFzaywgdmFsdWUpIHtcblx0XHRmb3IodmFyIGNyZWdOYW1lIGluIGNyZWdEYXRhKSB7XG5cdFx0XHR2YXIgZGF0YSA9IGNyZWdEYXRhW2NyZWdOYW1lXTtcblxuXHRcdFx0aWYoZGF0YS5tYXNrID09IG1hc2spIHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRjcmVnOiBjcmVnTmFtZSxcblx0XHRcdFx0XHR2YWx1ZTogdmFsdWUgPj4gZGF0YS5vZmZzZXRcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIE9idGFpbiBjbGFzc2ljYWwgcmVnaXN0ZXIgbmFtZSBhbmQgbG9jYWwgYml0IG51bWJlciBmcm9tIGdsb2JhbCBiaXQgbnVtYmVyXG5cdGZ1bmN0aW9uIG1lbW9yeVRvQ3JlZyhtZW1vcnkpIHtcblx0XHR2YXIgdG90YWxCaXRzID0gMDtcblx0XHRmb3IodmFyIGNyZWdOYW1lIGluIHNlbGYuY3JlZ3MpIHtcblx0XHRcdHZhciBjcmVnID0gc2VsZi5jcmVnc1tjcmVnTmFtZV07XG5cdFx0XHRpZigodG90YWxCaXRzICsgY3JlZy5sZW5ndGgpID4gbWVtb3J5KSB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0bmFtZTogY3JlZ05hbWUsXG5cdFx0XHRcdFx0Yml0OiBtZW1vcnkgLSB0b3RhbEJpdHNcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdHRvdGFsQml0cyArPSBjcmVnLmxlbmd0aDtcblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvLyBBZGQgZ2F0ZXNcblx0dmFyIGluc3RydWN0aW9ucyA9IGV4cGVyaW1lbnQuaW5zdHJ1Y3Rpb25zIHx8IFtdO1xuXHR2YXIgY29uZGl0aW9ucyA9IHt9O1xuXHRmb3IodmFyIGluc3RJbmRleCA9IDA7IGluc3RJbmRleCA8IGV4cGVyaW1lbnQuaW5zdHJ1Y3Rpb25zLmxlbmd0aDsgaW5zdEluZGV4KyspIHtcblx0XHR2YXIgaW5zdCA9IGV4cGVyaW1lbnQuaW5zdHJ1Y3Rpb25zW2luc3RJbmRleF07XG5cblx0XHRzd2l0Y2goaW5zdC5uYW1lKSB7XG5cdFx0XHQvLyBjbGFzc2ljYWwgY29udHJvbFxuXHRcdFx0Y2FzZSBcImJmdW5jXCI6IHtcblx0XHRcdFx0dmFyIGNvbmRpdGlvbiA9IGNvbmRpdGlvbkZyb21NYXNrQW5kVmFsdWUocGFyc2VJbnQoaW5zdC5tYXNrKSwgcGFyc2VJbnQoaW5zdC52YWwpKTtcblxuXHRcdFx0XHRpZighY29uZGl0aW9uKSB7XG5cdFx0XHRcdFx0dmFyIGVycm9yTWVzc2FnZSA9IFwiSW52YWxpZCBjbGFzc2ljYWwgY29uZGl0aW9uLlwiO1xuXHRcdFx0XHRcdGlmKGVycm9yQ2FsbGJhY2spIHtcblx0XHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soWyB7IG1zZzogZXJyb3JNZXNzYWdlIH0gXSk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbmRpdGlvbnNbaW5zdC5yZWdpc3Rlcl0gPSBjb25kaXRpb247XG5cdFx0XHR9OyBicmVhaztcblxuXHRcdFx0Ly8gTWVhc3VyZW1lbnRcblx0XHRcdGNhc2UgXCJtZWFzdXJlXCI6IHtcblx0XHRcdFx0Zm9yKHZhciBxSW5kZXggPSAwOyBxSW5kZXggPCBpbnN0LnF1Yml0cy5sZW5ndGg7IHFJbmRleCsrKSB7XG5cdFx0XHRcdFx0dmFyIHF1Yml0ID0gaW5zdC5xdWJpdHNbcUluZGV4XTtcblx0XHRcdFx0XHR2YXIgbWVtb3J5ID0gaW5zdC5tZW1vcnlbcUluZGV4XTtcblx0XHRcdFx0XHR2YXIgY3JlZyA9IG1lbW9yeVRvQ3JlZyhtZW1vcnkpO1xuXHRcdFx0XHRcdGlmKCFjcmVnKSB7XG5cdFx0XHRcdFx0XHR2YXIgZXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIG1lYXN1cmVtZW50IGRlc3RpbmF0aW9uLlwiO1xuXHRcdFx0XHRcdFx0aWYoZXJyb3JDYWxsYmFjaykge1xuXHRcdFx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKFsgeyBtc2c6IGVycm9yTWVzc2FnZSB9IF0pO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcblx0XHRcdFx0XHRcdH1cdFx0XHRcdFx0XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dmFyIG9wdGlvbnMgPSB7IGNyZWc6IGNyZWcgfTtcblxuXHRcdFx0XHRcdHRoaXMuYXBwZW5kR2F0ZShcIm1lYXN1cmVcIiwgcXViaXQsIG9wdGlvbnMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9OyBicmVhaztcblxuXHRcdFx0Y2FzZSBcImJhcnJpZXJcIjoge1xuXHRcdFx0XHQvLyAhISEgTm90IGltcGxlbWVudGVkIHlldC4gSWdub3JlIGZvciBub3cuXG5cdFx0XHR9OyBicmVhaztcblxuXHRcdFx0Ly8gTm9ybWFsIGdhdGVcblx0XHRcdGRlZmF1bHQ6IHtcblx0XHRcdFx0dmFyIG9wdGlvbnMgPSB7XG5cdFx0XHRcdFx0cGFyYW1zOiB7fSxcblx0XHRcdFx0XHRjb25kaXRpb246IHt9XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Ly8gRmluZCBnYXRlIGRlZmluaXRpb25cblx0XHRcdFx0dmFyIGdhdGVOYW1lID0gaW5zdC5uYW1lO1xuXHRcdFx0XHRzd2l0Y2goZ2F0ZU5hbWUpIHtcblx0XHRcdFx0XHRjYXNlIFwiaWRlblwiOiBnYXRlTmFtZSA9IFwiaWRcIjsgYnJlYWs7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR2YXIgZ2F0ZURlZiA9IHRoaXMuYmFzaWNHYXRlc1tnYXRlTmFtZV07XG5cdFx0XHRcdGlmKCFnYXRlRGVmKSB7XG5cdFx0XHRcdFx0dmFyIGVycm9yTWVzc2FnZSA9IFwiVW5rbm93biBnYXRlIFxcXCJcIiArIGluc3QubmFtZSArIFwiXFxcIi5cIjtcblx0XHRcdFx0XHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKFsgeyBtc2c6IGVycm9yTWVzc2FnZSB9IF0pO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBHYXRlIHBhcmFtcyAoaWYgYW55KVxuXHRcdFx0XHRpZihnYXRlRGVmLnBhcmFtcyAmJiBnYXRlRGVmLnBhcmFtcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRpZighaW5zdC5wYXJhbXMgfHwgIWluc3QucGFyYW1zLmxlbmd0aCB8fCBpbnN0LnBhcmFtcy5sZW5ndGggIT0gZ2F0ZURlZi5wYXJhbXMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHR2YXIgZXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIG51bWJlciBvZiBwYXJhbXMgZm9yIGdhdGUgXFxcIlwiICsgaW5zdC5uYW1lICsgXCJcXFwiLlwiO1xuXHRcdFx0XHRcdFx0aWYoZXJyb3JDYWxsYmFjaykge1xuXHRcdFx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKFsgeyBtc2c6IGVycm9yTWVzc2FnZSB9IF0pO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRmb3IodmFyIHBhckluZGV4ID0gMDsgcGFySW5kZXggPCBnYXRlRGVmLnBhcmFtcy5sZW5ndGg7IHBhckluZGV4KyspIHtcblx0XHRcdFx0XHRcdHZhciBwYXJhbU5hbWUgPSBnYXRlRGVmLnBhcmFtc1twYXJJbmRleF07XG5cdFx0XHRcdFx0XHRvcHRpb25zLnBhcmFtc1twYXJhbU5hbWVdID0gaW5zdC5wYXJhbXNbcGFySW5kZXhdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENsYXNzaWNhbCBjb250cm9sIChpZiBhbnkpXG5cdFx0XHRcdGlmKHR5cGVvZiBpbnN0LmNvbmRpdGlvbmFsICE9IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdFx0XHR2YXIgY29uZGl0aW9uID0gY29uZGl0aW9uc1tpbnN0LmNvbmRpdGlvbmFsXTtcblx0XHRcdFx0XHRpZighY29uZGl0aW9uKSB7XG5cdFx0XHRcdFx0XHR2YXIgZXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIGNsYXNzaWNhbCBjb25kaXRpb24uXCI7XG5cdFx0XHRcdFx0XHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soWyB7IG1zZzogZXJyb3JNZXNzYWdlIH0gXSk7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRvcHRpb25zLmNvbmRpdGlvbiA9IGNvbmRpdGlvbjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEFkZCBnYXRlIHRvIGNpcmN1aXRcblx0XHRcdFx0dGhpcy5hcHBlbmRHYXRlKGdhdGVOYW1lLCBpbnN0LnF1Yml0cywgb3B0aW9ucyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gVGhpcyBlcnJvciBoYW5kbGluZyBpcyBjcipwIGJ1dCBsZXQncyBiZSBjb25zaXN0ZW50IHdpdGggaW1wb3J0UUFTTSgpIGZvciBub3dcblx0aWYoZXJyb3JDYWxsYmFjaykge1xuXHRcdGVycm9yQ2FsbGJhY2soW10pO1xuXHR9XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0VEZRID0gZnVuY3Rpb24oY29tbWVudCwgZGVjb21wb3NlLCBleHBvcnRBc0dhdGVOYW1lLCB2ZXJzaW9uU3RyLCBhc0p1cHl0ZXIsIHNob3RzKSB7XG5cdHZhciBvcHRpb25zID0ge1xuXHRcdGNvbW1lbnQ6IGNvbW1lbnQsXG5cdFx0ZGVjb21wb3NlOiBkZWNvbXBvc2UsXG5cdFx0dmVyc2lvblN0cjogdmVyc2lvblN0cixcblx0XHRhc0p1cHl0ZXI6IGFzSnVweXRlcixcblx0XHRzaG90czogc2hvdHNcblx0fTtcblx0cmV0dXJuIHRoaXMuZXhwb3J0VG9URlEob3B0aW9ucywgZXhwb3J0QXNHYXRlTmFtZSk7XG59XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRCcmFrZXQgPSBmdW5jdGlvbihjb21tZW50LCBkZWNvbXBvc2UsIGV4cG9ydEFzR2F0ZU5hbWUsIHZlcnNpb25TdHIsIGFzSnVweXRlciwgc2hvdHMsIGh5YnJpZCwgaW5kZW50RGVwdGgpIHtcblx0dmFyIG9wdGlvbnMgPSB7XG5cdFx0Y29tbWVudDogY29tbWVudCxcblx0XHRkZWNvbXBvc2U6IGRlY29tcG9zZSxcblx0XHR2ZXJzaW9uU3RyOiB2ZXJzaW9uU3RyLFxuXHRcdGFzSnVweXRlcjogYXNKdXB5dGVyLFxuXHRcdHNob3RzOiBzaG90cyxcblx0XHRoeWJyaWQ6IGh5YnJpZCxcblx0XHRpbmRlbnREZXB0aDogaW5kZW50RGVwdGhcblx0fTtcblxuXHRyZXR1cm4gdGhpcy5leHBvcnRUb0JyYWtldChvcHRpb25zLCBleHBvcnRBc0dhdGVOYW1lKTtcbn1cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFNWRyA9IGZ1bmN0aW9uKGVtYmVkZGVkLCBvcHRpb25zKSB7XG5cdHZhciBuZXdPcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblx0bmV3T3B0aW9ucy5lbWJlZGRlZCA9ICEhZW1iZWRkZWQ7XG5cblx0cmV0dXJuIHRoaXMuZXhwb3J0VG9TVkcobmV3T3B0aW9ucyk7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0VG9TVkcgPSBmdW5jdGlvbihvcHRpb25zKSB7XG5cdHZhciBzZWxmID0gdGhpcztcblx0dmFyIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdG9wdGlvbnMuZW1iZWRkZWQgPSBvcHRpb25zLmVtYmVkZGVkIHx8IGZhbHNlO1xuXHRvcHRpb25zLmNlbGxXaWR0aCA9IG9wdGlvbnMuY2VsbFdpZHRoIHx8IDQwO1xuXHRvcHRpb25zLmNlbGxIZWlnaHQgPSBvcHRpb25zLmNlbGxIZWlnaHQgfHwgNDA7XG5cdG9wdGlvbnMuaFNwYWNpbmcgPSBvcHRpb25zLmhTcGFjaW5nIHx8IDI4O1xuXHRvcHRpb25zLnZTcGFjaW5nID0gb3B0aW9ucy52U3BhY2luZyB8fCAzNDtcblx0b3B0aW9ucy5ibGFja2JveFBhZGRpbmdYID0gb3B0aW9ucy5ibGFja2JveFBhZGRpbmdYIHx8IDI7XG5cdG9wdGlvbnMuYmxhY2tib3hQYWRkaW5nWSA9IG9wdGlvbnMuYmxhY2tib3hQYWRkaW5nWSB8fCAyO1xuXHRvcHRpb25zLmJsYWNrYm94TGluZUNvbG9yID0gb3B0aW9ucy5ibGFja2JveExpbmVDb2xvciB8fCBcImJsYWNrXCI7XG5cdG9wdGlvbnMuYmxhY2tib3hTZWxlY3RlZExpbmVDb2xvciA9IG9wdGlvbnMuYmxhY2tib3hTZWxlY3RlZExpbmVDb2xvciB8fCBcImJsYWNrXCI7XG5cdG9wdGlvbnMud2lyZUNvbG9yID0gb3B0aW9ucy53aXJlQ29sb3IgfHwgXCJibGFja1wiO1xuXHRvcHRpb25zLmdhdGVMaW5lQ29sb3IgPSBvcHRpb25zLmdhdGVMaW5lQ29sb3IgfHwgXCJibGFja1wiO1xuXHRvcHRpb25zLmdhdGVTZWxlY3RlZExpbmVDb2xvciA9IG9wdGlvbnMuZ2F0ZVNlbGVjdGVkTGluZUNvbG9yIHx8IFwiYmxhY2tcIjtcblx0b3B0aW9ucy5jV2lyZUNvbG9yID0gb3B0aW9ucy5jV2lyZUNvbG9yIHx8IFwic2lsdmVyXCI7XG5cdG9wdGlvbnMuY1dpcmVTZWxlY3RlZENvbG9yID0gb3B0aW9ucy5jV2lyZVNlbGVjdGVkQ29sb3IgfHwgXCJzaWx2ZXJcIjtcblx0b3B0aW9ucy5jQXJyb3dTaXplID0gb3B0aW9ucy5jQXJyb3dTaXplIHx8IDEwO1xuXHRvcHRpb25zLmhXaXJlQ29sb3IgPSBvcHRpb25zLmhXaXJlQ29sb3IgfHwgXCJibGFja1wiO1xuXHRvcHRpb25zLndpcmVXaWR0aCA9IG9wdGlvbnMud2lyZVdpZHRoIHx8IDE7XG5cdG9wdGlvbnMud2lyZVRleHRIZWlnaHQgPSBvcHRpb25zLndpcmVUZXh0SGVpZ2h0IHx8IDg7XG5cdG9wdGlvbnMud2lyZVRleHREb3duID0gb3B0aW9ucy53aXJlVGV4dERvd24gfHwgMTY7XG5cdG9wdGlvbnMud2lyZU1hcmdpbiA9IG9wdGlvbnMud2lyZU1hcmdpbiB8fCAyMDtcblx0b3B0aW9ucy53aXJlTGFiZWxXaWR0aCA9IG9wdGlvbnMud2lyZUxhYmVsV2lkdGggfHwgNDA7XG5cdG9wdGlvbnMuZG90UmFkaXVzID0gb3B0aW9ucy5kb3RSYWRpdXMgfHwgNTtcblx0b3B0aW9ucy5wYXJhbVRleHRIZWlnaHQgPSBvcHRpb25zLnBhcmFtVGV4dEhlaWdodCB8fCA2O1xuXHRvcHRpb25zLnNlbGVjdGlvblBhZGRpbmdYID0gb3B0aW9ucy5zZWxlY3Rpb25QYWRkaW5nWCB8fCA0O1xuXHRvcHRpb25zLnNlbGVjdGlvblBhZGRpbmdZID0gb3B0aW9ucy5zZWxlY3Rpb25QYWRkaW5nWSB8fCA0O1xuXHRvcHRpb25zLnNlbGVjdGlvbkxpbmVDb2xvciA9IG9wdGlvbnMuc2VsZWN0aW9uTGluZUNvbG9yIHx8IFwiIzIxODVEMFwiO1xuXHRvcHRpb25zLmRyYXdCbG9jaFNwaGVyZXMgPSBvcHRpb25zLmRyYXdCbG9jaFNwaGVyZXMgfHwgZmFsc2U7XG5cblx0aWYodHlwZW9mIG9wdGlvbnMuZHJhd0h5YnJpZCA9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0b3B0aW9ucy5kcmF3SHlicmlkID0gdGhpcy5vcHRpb25zID8gISF0aGlzLm9wdGlvbnMuaHlicmlkIDogZmFsc2U7XG5cdH1cblxuXHR2YXIgZ2V0Q3JlZ0luZGV4ID0gZnVuY3Rpb24obmFtZSkge1xuXHRcdHZhciBjcmVnSW5kZXggPSAwO1xuXHRcdGZvcih2YXIgY3JlZ05hbWUgaW4gc2VsZi5jcmVncykge1xuXHRcdFx0aWYoY3JlZ05hbWUgPT0gbmFtZSkge1xuXHRcdFx0XHRyZXR1cm4gY3JlZ0luZGV4O1xuXHRcdFx0fVxuXHRcdFx0Y3JlZ0luZGV4Kys7XG5cdFx0fVxuXHRcdHJldHVybiBjcmVnSW5kZXg7XG5cdH07XG5cblx0dmFyIGdldENlbGxYID0gZnVuY3Rpb24oY29sKSB7XG5cdFx0cmV0dXJuIG9wdGlvbnMud2lyZUxhYmVsV2lkdGggKyAoKG9wdGlvbnMuY2VsbFdpZHRoICsgb3B0aW9ucy5oU3BhY2luZykgKiBjb2wpICsgb3B0aW9ucy5oU3BhY2luZztcblx0fTtcblxuXHR2YXIgZ2V0Q2VsbFkgPSBmdW5jdGlvbih3aXJlKSB7XG5cdFx0cmV0dXJuICgob3B0aW9ucy5jZWxsSGVpZ2h0ICsgb3B0aW9ucy52U3BhY2luZykgKiB3aXJlKSArIG9wdGlvbnMudlNwYWNpbmc7XG5cdH07XG5cblx0dmFyIG51bVJvd3MgPSB0aGlzLm51bVF1Yml0cztcblx0dmFyIG51bUNvbHMgPSB0aGlzLm51bUNvbHMoKTtcblx0dmFyIG51bUNyZWdzID0gdGhpcy5jcmVnQ291bnQoKTtcblxuXHR2YXIgdG90YWxDb2xzID0gbnVtQ29scztcblx0Ly8gcmVzZXJ2ZSBjb2wgZm9yIGJsb2NoIHNwaGVyZXNcblx0aWYob3B0aW9ucy5kcmF3QmxvY2hTcGhlcmVzKSB7XG5cdFx0dG90YWxDb2xzKys7XG5cdH1cblxuXHR2YXIgdG90YWxXaXJlQ29scyA9IHRvdGFsQ29scztcblxuXHQvLyByZXNlcnZlIDIgY29scyBmb3IgaHlicmlkIHF1YW50dW0tY2xhc3NpY2FsIGNvbm5lY3RvclxuXHRpZihvcHRpb25zLmRyYXdIeWJyaWQpIHtcblx0XHR0b3RhbENvbHMgKz0gMjtcblx0fVxuXG5cdHZhciB0b3RhbFdpZHRoID0gZ2V0Q2VsbFgodG90YWxDb2xzKTtcblx0dmFyIHRvdGFsV2lyZVdpZHRoID0gZ2V0Q2VsbFgodG90YWxXaXJlQ29scyk7XG5cdHZhciB0b3RhbEhlaWdodCA9ICgob3B0aW9ucy5jZWxsSGVpZ2h0ICsgb3B0aW9ucy52U3BhY2luZykgKiAobnVtUm93cyArIG51bUNyZWdzICsgKG9wdGlvbnMuZHJhd0h5YnJpZCA/IDEgOiAwKSkpICsgb3B0aW9ucy52U3BhY2luZztcblxuXHR2YXIgaHlicmlkWSA9ICgob3B0aW9ucy5jZWxsSGVpZ2h0ICsgb3B0aW9ucy52U3BhY2luZykgKiAobnVtUm93cyArIG51bUNyZWdzKSkgKyBvcHRpb25zLnZTcGFjaW5nO1xuXHR2YXIgaHlicmlkV2lyZVkgPSAoKG9wdGlvbnMuY2VsbEhlaWdodCArIG9wdGlvbnMudlNwYWNpbmcpICogKG51bVJvd3MgKyBudW1DcmVncykpICsgKG9wdGlvbnMudlNwYWNpbmcgKyAob3B0aW9ucy5jZWxsSGVpZ2h0IC8gMikpO1xuXG5cdGZ1bmN0aW9uIHBvbGFyVG9DYXJ0ZXNpYW4oY2VudGVyWCwgY2VudGVyWSwgcmFkaXVzLCBhbmdsZUluRGVncmVlcykge1xuXHRcdHZhciBhbmdsZUluUmFkaWFucyA9IChhbmdsZUluRGVncmVlcyAtIDkwKSAqIE1hdGguUEkgLyAxODAuMDtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRcdHg6IGNlbnRlclggKyAocmFkaXVzICogTWF0aC5jb3MoYW5nbGVJblJhZGlhbnMpKSxcblx0XHRcdFx0eTogY2VudGVyWSArIChyYWRpdXMgKiBNYXRoLnNpbihhbmdsZUluUmFkaWFucykpXG5cdFx0fTtcblx0fVxuXG5cdGZ1bmN0aW9uIGRlc2NyaWJlQXJjKHgsIHksIHJhZGl1cywgc3RhcnRBbmdsZSwgZW5kQW5nbGUpe1xuXG5cdFx0dmFyIHN0YXJ0ID0gcG9sYXJUb0NhcnRlc2lhbih4LCB5LCByYWRpdXMsIGVuZEFuZ2xlKTtcblx0XHR2YXIgZW5kID0gcG9sYXJUb0NhcnRlc2lhbih4LCB5LCByYWRpdXMsIHN0YXJ0QW5nbGUpO1xuXG5cdFx0dmFyIGxhcmdlQXJjRmxhZyA9IGVuZEFuZ2xlIC0gc3RhcnRBbmdsZSA8PSAxODAgPyBcIjBcIiA6IFwiMVwiO1xuXG5cdFx0dmFyIGQgPSBbXG5cdFx0XHRcIk1cIiwgc3RhcnQueCwgc3RhcnQueSxcblx0XHRcdFwiQVwiLCByYWRpdXMsIHJhZGl1cywgMCwgbGFyZ2VBcmNGbGFnLCAwLCBlbmQueCwgZW5kLnlcblx0XHRdLmpvaW4oXCIgXCIpO1xuXG5cdFx0cmV0dXJuIGQ7XG5cdH1cblxuXHR2YXIgcVdpcmVZID0gZnVuY3Rpb24od2lyZSkge1xuXHRcdHJldHVybiAoKG9wdGlvbnMuY2VsbEhlaWdodCArIG9wdGlvbnMudlNwYWNpbmcpICogd2lyZSkgKyAob3B0aW9ucy52U3BhY2luZyArIChvcHRpb25zLmNlbGxIZWlnaHQgLyAyKSk7XG5cdH07XG5cblx0dmFyIHFHYXRlWSA9IGZ1bmN0aW9uKHdpcmUpIHtcblx0XHRyZXR1cm4gKChvcHRpb25zLmNlbGxIZWlnaHQgKyBvcHRpb25zLnZTcGFjaW5nKSAqIHdpcmUpICsgb3B0aW9ucy52U3BhY2luZztcblx0fTtcblxuXHR2YXIgY1dpcmVZID0gZnVuY3Rpb24oY3JlZ05hbWUpIHtcblx0XHRyZXR1cm4gKChvcHRpb25zLmNlbGxIZWlnaHQgKyBvcHRpb25zLnZTcGFjaW5nKSAqIChudW1Sb3dzICsgZ2V0Q3JlZ0luZGV4KGNyZWdOYW1lKSkpICsgKG9wdGlvbnMudlNwYWNpbmcgKyAob3B0aW9ucy5jZWxsSGVpZ2h0IC8gMikpO1xuXHR9O1xuXG5cblx0ZnVuY3Rpb24gZ2F0ZUJveFNWRyhnYXRlWCwgZ2F0ZVksIGdhdGVOYW1lLCBnYXRlTGFiZWwsIHNlbGVjdGVkKSB7XG5cblx0XHR2YXIgZ2F0ZVdpZHRoID0gb3B0aW9ucy5jZWxsV2lkdGg7XG5cdFx0dmFyIGdhdGVIZWlnaHQgPSBvcHRpb25zLmNlbGxIZWlnaHQ7XG5cblx0XHR2YXIgcmVzID0gXCJcIjtcblxuXHRcdHJlcyArPSBcIjxyZWN0IGNsYXNzPVxcXCJxYy1nYXRlLWJveFxcXCIgeD1cXFwiXCIgKyBnYXRlWCArIFwiXFxcIiB5PVxcXCJcIiArIGdhdGVZICsgXCJcXFwiIHdpZHRoPVxcXCJcIiArIGdhdGVXaWR0aCArIFwiXFxcIiBoZWlnaHQ9XFxcIlwiICsgZ2F0ZUhlaWdodCArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgKHNlbGVjdGVkID8gb3B0aW9ucy5nYXRlU2VsZWN0ZWRMaW5lQ29sb3IgOiBvcHRpb25zLmdhdGVMaW5lQ29sb3IpICsgXCJcXFwiIGZpbGw9XFxcIndoaXRlXFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cdFx0aWYoZ2F0ZUxhYmVsKSB7XG5cdFx0XHRyZXMgKz0gXCI8dGV4dCBjbGFzcz1cXFwicWMtZ2F0ZS1sYWJlbFxcXCIgeD1cXFwiXCIgKyAoZ2F0ZVggKyAoZ2F0ZVdpZHRoIC8gMikpICsgXCJcXFwiIHk9XFxcIlwiICsgKGdhdGVZICsgKGdhdGVIZWlnaHQgLyAyKSkgKyBcIlxcXCIgZG9taW5hbnQtYmFzZWxpbmU9XFxcIm1pZGRsZVxcXCIgdGV4dC1hbmNob3I9XFxcIm1pZGRsZVxcXCIgZmlsbD1cXFwiXCIgKyAoc2VsZWN0ZWQgPyBvcHRpb25zLmdhdGVTZWxlY3RlZExpbmVDb2xvciA6IG9wdGlvbnMuZ2F0ZUxpbmVDb2xvcikgKyBcIlxcXCI+XCIgKyBnYXRlTGFiZWwgKyBcIjwvdGV4dD5cIjtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2F0ZVJlY3RTVkcoZ2F0ZVgsIGdhdGVZLCBnYXRlTmFtZSwgZ2F0ZUxhYmVsLCBzZWxlY3RlZCkge1xuXG5cdFx0dmFyIGdhdGVXaWR0aCA9IG9wdGlvbnMuY2VsbFdpZHRoICogMjtcblx0XHR2YXIgZ2F0ZUhlaWdodCA9IG9wdGlvbnMuY2VsbEhlaWdodDtcblxuXHRcdHZhciByZXMgPSBcIlwiO1xuXG5cdFx0cmVzICs9IFwiPHJlY3QgY2xhc3M9XFxcInFjLWdhdGUtcmVjdFxcXCIgeD1cXFwiXCIgKyBnYXRlWCArIFwiXFxcIiB5PVxcXCJcIiArIGdhdGVZICsgXCJcXFwiIHdpZHRoPVxcXCJcIiArIGdhdGVXaWR0aCArIFwiXFxcIiBoZWlnaHQ9XFxcIlwiICsgZ2F0ZUhlaWdodCArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgKHNlbGVjdGVkID8gb3B0aW9ucy5nYXRlU2VsZWN0ZWRMaW5lQ29sb3IgOiBvcHRpb25zLmdhdGVMaW5lQ29sb3IpICsgXCJcXFwiIGZpbGw9XFxcIndoaXRlXFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cdFx0aWYoZ2F0ZUxhYmVsKSB7XG5cdFx0XHRyZXMgKz0gXCI8dGV4dCBjbGFzcz1cXFwicWMtZ2F0ZS1sYWJlbFxcXCIgeD1cXFwiXCIgKyAoZ2F0ZVggKyAoZ2F0ZVdpZHRoIC8gMikpICsgXCJcXFwiIHk9XFxcIlwiICsgKGdhdGVZICsgKGdhdGVIZWlnaHQgLyAyKSkgKyBcIlxcXCIgZG9taW5hbnQtYmFzZWxpbmU9XFxcIm1pZGRsZVxcXCIgdGV4dC1hbmNob3I9XFxcIm1pZGRsZVxcXCI+XCIgKyBnYXRlTGFiZWwgKyBcIjwvdGV4dD5cIjtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2F0ZUNpcmNsZVNWRyhjZWxsWCwgY2VsbFksIGdhdGVOYW1lLCBnYXRlTGFiZWwsIHNlbGVjdGVkKSB7XG5cdFx0dmFyIGNlbnRlclggPSBjZWxsWCArIChvcHRpb25zLmNlbGxXaWR0aCAvIDIpO1xuXHRcdHZhciBjZW50ZXJZID0gY2VsbFkgKyAob3B0aW9ucy5jZWxsSGVpZ2h0IC8gMik7XG5cblx0XHR2YXIgZ2F0ZVdpZHRoID0gb3B0aW9ucy5jZWxsV2lkdGggKiAwLjg7XG5cdFx0dmFyIGdhdGVIZWlnaHQgPSBvcHRpb25zLmNlbGxIZWlnaHQgKiAwLjg7XG5cdFx0dmFyIGdhdGVYID0gY2VsbFggKyAoKG9wdGlvbnMuY2VsbFdpZHRoIC0gZ2F0ZVdpZHRoKSAvIDIpO1xuXHRcdHZhciBnYXRlWSA9IGNlbGxZICsgKChvcHRpb25zLmNlbGxIZWlnaHQgLSBnYXRlSGVpZ2h0KSAvIDIpO1xuXG5cdFx0dmFyIHJlcyA9IFwiXCI7XG5cblx0XHRyZXMgKz0gXCI8ZWxsaXBzZSBjbGFzcz1cXFwicWMtZ2F0ZS1ub3RcXFwiIGN4PVxcXCJcIiArIGNlbnRlclggKyBcIlxcXCIgY3k9XFxcIlwiICsgY2VudGVyWSArIFwiXFxcIiByeD1cXFwiXCIgKyAoZ2F0ZVdpZHRoIC8gMikgKyBcIlxcXCIgcnk9XFxcIlwiICsgKGdhdGVIZWlnaHQgLyAyKSArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgKHNlbGVjdGVkID8gb3B0aW9ucy5nYXRlU2VsZWN0ZWRMaW5lQ29sb3IgOiBvcHRpb25zLmdhdGVMaW5lQ29sb3IpICsgXCJcXFwiIGZpbGw9XFxcIndoaXRlXFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cdFx0aWYoZ2F0ZUxhYmVsKSB7XG5cdFx0XHRyZXMgKz0gXCI8dGV4dCBjbGFzcz1cXFwicWMtZ2F0ZS1sYWJlbFxcXCIgeD1cXFwiXCIgKyAoZ2F0ZVggKyAoZ2F0ZVdpZHRoIC8gMikpICsgXCJcXFwiIHk9XFxcIlwiICsgKGdhdGVZICsgKGdhdGVIZWlnaHQgLyAyKSkgKyBcIlxcXCIgZG9taW5hbnQtYmFzZWxpbmU9XFxcIm1pZGRsZVxcXCIgdGV4dC1hbmNob3I9XFxcIm1pZGRsZVxcXCI+XCIgKyBnYXRlTGFiZWwgKyBcIjwvdGV4dD5cIjtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2F0ZU5vdFNWRyhjZWxsWCwgY2VsbFksIGdhdGVOYW1lLCBzZWxlY3RlZCkge1xuXHRcdHZhciBjZW50ZXJYID0gY2VsbFggKyAob3B0aW9ucy5jZWxsV2lkdGggLyAyKTtcblx0XHR2YXIgY2VudGVyWSA9IGNlbGxZICsgKG9wdGlvbnMuY2VsbEhlaWdodCAvIDIpO1xuXG5cdFx0dmFyIGdhdGVXaWR0aCA9IG9wdGlvbnMuY2VsbFdpZHRoICogMC44O1xuXHRcdHZhciBnYXRlSGVpZ2h0ID0gb3B0aW9ucy5jZWxsSGVpZ2h0ICogMC44O1xuXHRcdHZhciBnYXRlWCA9IGNlbGxYICsgKChvcHRpb25zLmNlbGxXaWR0aCAtIGdhdGVXaWR0aCkgLyAyKTtcblx0XHR2YXIgZ2F0ZVkgPSBjZWxsWSArICgob3B0aW9ucy5jZWxsSGVpZ2h0IC0gZ2F0ZUhlaWdodCkgLyAyKTtcblxuXG5cdFx0dmFyIHJlcyA9IFwiXCI7XG5cblx0XHRyZXMgKz0gXCI8ZWxsaXBzZSBjbGFzcz1cXFwicWMtZ2F0ZS1ub3RcXFwiIGN4PVxcXCJcIiArIGNlbnRlclggKyBcIlxcXCIgY3k9XFxcIlwiICsgY2VudGVyWSArIFwiXFxcIiByeD1cXFwiXCIgKyAoZ2F0ZVdpZHRoIC8gMikgKyBcIlxcXCIgcnk9XFxcIlwiICsgKGdhdGVIZWlnaHQgLyAyKSArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgKHNlbGVjdGVkID8gb3B0aW9ucy5nYXRlU2VsZWN0ZWRMaW5lQ29sb3IgOiBvcHRpb25zLmdhdGVMaW5lQ29sb3IpICsgXCJcXFwiIGZpbGw9XFxcIndoaXRlXFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cdFx0cmVzICs9IFwiPGxpbmUgY2xhc3M9XFxcInFjLWdhdGUtbm90LWxpbmVcXFwiIHgxPVxcXCJcIiArIGNlbnRlclggKyBcIlxcXCIgeDI9XFxcIlwiICsgY2VudGVyWCArIFwiXFxcIiB5MT1cXFwiXCIgKyBnYXRlWSArXCJcXFwiIHkyPVxcXCJcIiArIChnYXRlWSArIGdhdGVIZWlnaHQpICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyAoc2VsZWN0ZWQgPyBvcHRpb25zLmdhdGVTZWxlY3RlZExpbmVDb2xvciA6IG9wdGlvbnMuZ2F0ZUxpbmVDb2xvcikgKyBcIlxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxXFxcIiAvPlwiO1xuXHRcdHJlcyArPSBcIjxsaW5lIGNsYXNzPVxcXCJxYy1nYXRlLW5vdC1saW5lXFxcIiB4MT1cXFwiXCIgKyBnYXRlWCArIFwiXFxcIiB4Mj1cXFwiXCIgKyAoZ2F0ZVggKyBnYXRlV2lkdGgpICsgXCJcXFwiIHkxPVxcXCJcIiArIGNlbnRlclkgK1wiXFxcIiB5Mj1cXFwiXCIgKyBjZW50ZXJZICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyAoc2VsZWN0ZWQgPyBvcHRpb25zLmdhdGVTZWxlY3RlZExpbmVDb2xvciA6IG9wdGlvbnMuZ2F0ZUxpbmVDb2xvcikgKyBcIlxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxXFxcIiAvPlwiO1xuXG5cdFx0cmV0dXJuIHJlcztcblx0fVxuXG5cdGZ1bmN0aW9uIGdhdGVHYXVnZVNWRyhnYXRlWCwgZ2F0ZVksIGdhdGVOYW1lLCBzZWxlY3RlZCkge1xuXHRcdHZhciBnYXRlV2lkdGggPSBvcHRpb25zLmNlbGxXaWR0aDtcblx0XHR2YXIgZ2F0ZUhlaWdodCA9IG9wdGlvbnMuY2VsbEhlaWdodDtcblx0XHR2YXIgY2VudGVyWCA9IGdhdGVYICsgKGdhdGVXaWR0aCAvIDIpO1xuXHRcdHZhciBjZW50ZXJZID0gZ2F0ZVkgKyAoZ2F0ZUhlaWdodCAvIDIpO1xuXHRcdHZhciBtb3ZlZG93biA9IGdhdGVIZWlnaHQgLyA1O1xuXG5cdFx0dmFyIHJlcyA9IFwiXCI7XG5cblx0XHRyZXMgKz0gXCI8cmVjdCBjbGFzcz1cXFwicWMtZ2F0ZS1ib3hcXFwiIHg9XFxcIlwiICsgZ2F0ZVggKyBcIlxcXCIgeT1cXFwiXCIgKyBnYXRlWSArIFwiXFxcIiB3aWR0aD1cXFwiXCIgKyBnYXRlV2lkdGggKyBcIlxcXCIgaGVpZ2h0PVxcXCJcIiArIGdhdGVIZWlnaHQgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIChzZWxlY3RlZCA/IG9wdGlvbnMuZ2F0ZVNlbGVjdGVkTGluZUNvbG9yIDogb3B0aW9ucy5nYXRlTGluZUNvbG9yKSArIFwiXFxcIiBmaWxsPVxcXCJ3aGl0ZVxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxXFxcIiAvPlwiO1xuXHRcdHJlcyArPSBcIjxwYXRoIGNsYXNzPVxcXCJnYy1nYXRlLWdhdWdlLWFyY1xcXCIgZD1cXFwiXCIgKyBkZXNjcmliZUFyYyhjZW50ZXJYLCBjZW50ZXJZICsgbW92ZWRvd24sIGdhdGVXaWR0aCAvIDIuMywgMzAwLCA2MCkgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIChzZWxlY3RlZCA/IG9wdGlvbnMuZ2F0ZVNlbGVjdGVkTGluZUNvbG9yIDogb3B0aW9ucy5nYXRlTGluZUNvbG9yKSArIFwiXFxcIiBmaWxsPVxcXCJub25lXFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cdFx0cmVzICs9IFwiPGxpbmUgY2xhc3M9XFxcInFjLWdhdGUtZ2F1Z2Utc2NhbGVcXFwiIHgxPVxcXCJcIiArIGNlbnRlclggKyBcIlxcXCIgeDI9XFxcIlwiICsgKChnYXRlWCArIGdhdGVXaWR0aCkgLSBtb3ZlZG93bikgKyBcIlxcXCIgeTE9XFxcIlwiICsgKGNlbnRlclkgKyBtb3ZlZG93bikgKyBcIlxcXCIgeTI9XFxcIlwiICsgKGdhdGVZICsgbW92ZWRvd24pICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyAoc2VsZWN0ZWQgPyBvcHRpb25zLmdhdGVTZWxlY3RlZExpbmVDb2xvciA6IG9wdGlvbnMuZ2F0ZUxpbmVDb2xvcikgKyBcIlxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxXFxcIiAvPlwiO1xuXG5cdFx0cmV0dXJuIHJlcztcblx0fVxuXG5cdGZ1bmN0aW9uIGdhdGVYU1ZHKGNlbGxYLCBjZWxsWSwgZ2F0ZU5hbWUsIHNlbGVjdGVkKSB7XG5cdFx0dmFyIGdhdGVXaWR0aCA9IG9wdGlvbnMuY2VsbFdpZHRoICogMC40O1xuXHRcdHZhciBnYXRlSGVpZ2h0ID0gb3B0aW9ucy5jZWxsSGVpZ2h0ICogMC40O1xuXHRcdHZhciBnYXRlWCA9IGNlbGxYICsgKChvcHRpb25zLmNlbGxXaWR0aCAtIGdhdGVXaWR0aCkgLyAyKTtcblx0XHR2YXIgZ2F0ZVkgPSBjZWxsWSArICgob3B0aW9ucy5jZWxsSGVpZ2h0IC0gZ2F0ZUhlaWdodCkgLyAyKTtcblxuXHRcdHZhciByZXMgPSBcIlwiO1xuXHRcdHJlcyArPSBcIjxsaW5lIGNsYXNzPVxcXCJxYy1nYXRlLXhcXFwiIHgxPVxcXCJcIiArIGdhdGVYICsgXCJcXFwiIHgyPVxcXCJcIiArIChnYXRlWCArIGdhdGVXaWR0aCkgKyBcIlxcXCIgeTE9XFxcIlwiICsgZ2F0ZVkgK1wiXFxcIiB5Mj1cXFwiXCIgKyAoZ2F0ZVkgKyBnYXRlSGVpZ2h0KSArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgKHNlbGVjdGVkID8gb3B0aW9ucy5nYXRlU2VsZWN0ZWRMaW5lQ29sb3IgOiBvcHRpb25zLmdhdGVMaW5lQ29sb3IpICsgXCJcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblx0XHRyZXMgKz0gXCI8bGluZSBjbGFzcz1cXFwicWMtZ2F0ZS14XFxcIiB4MT1cXFwiXCIgKyBnYXRlWCArIFwiXFxcIiB4Mj1cXFwiXCIgKyAoZ2F0ZVggKyBnYXRlV2lkdGgpICsgXCJcXFwiIHkxPVxcXCJcIiArIChnYXRlWSArIGdhdGVIZWlnaHQpICtcIlxcXCIgeTI9XFxcIlwiICsgZ2F0ZVkgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIChzZWxlY3RlZCA/IG9wdGlvbnMuZ2F0ZVNlbGVjdGVkTGluZUNvbG9yIDogb3B0aW9ucy5nYXRlTGluZUNvbG9yKSArIFwiXFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cdFx0cmV0dXJuIHJlcztcblx0fVxuXG5cdGZ1bmN0aW9uIGdhdGVEb3RTVkcoY2VsbFgsIGNlbGxZLCBnYXRlTmFtZSwgc2VsZWN0ZWQpIHtcblx0XHR2YXIgZ2F0ZVdpZHRoID0gb3B0aW9ucy5jZWxsV2lkdGg7XG5cdFx0dmFyIGdhdGVIZWlnaHQgPSBvcHRpb25zLmNlbGxIZWlnaHQ7XG5cdFx0dmFyIGNlbnRlclggPSBjZWxsWCArIChnYXRlV2lkdGggLyAyKTtcblx0XHR2YXIgY2VudGVyWSA9IGNlbGxZICsgKGdhdGVIZWlnaHQgLyAyKTtcblxuXHRcdHZhciByZXMgPSBcIlwiO1xuXHRcdHJlcyArPSBcIjxjaXJjbGUgY2xhc3M9XFxcInFjLWdhdGUtZG90XFxcIiBjeD1cXFwiXCIgKyBjZW50ZXJYICsgXCJcXFwiIGN5PVxcXCJcIiArIGNlbnRlclkgKyBcIlxcXCIgcj1cXFwiXCIgKyBvcHRpb25zLmRvdFJhZGl1cyArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgKHNlbGVjdGVkID8gb3B0aW9ucy5nYXRlU2VsZWN0ZWRMaW5lQ29sb3IgOiBvcHRpb25zLndpcmVDb2xvcikgKyBcIlxcXCIgZmlsbD1cXFwiXCIgKyAoc2VsZWN0ZWQgPyBvcHRpb25zLmdhdGVTZWxlY3RlZExpbmVDb2xvciA6IG9wdGlvbnMud2lyZUNvbG9yKSArIFwiXFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cdFx0cmV0dXJuIHJlcztcblx0fVxuXG5cdGZ1bmN0aW9uIGdhdGVJbnZlcnRlZERvdFNWRyhjZWxsWCwgY2VsbFksIGdhdGVOYW1lLCBzZWxlY3RlZCkge1xuXHRcdHZhciBnYXRlV2lkdGggPSBvcHRpb25zLmNlbGxXaWR0aDtcblx0XHR2YXIgZ2F0ZUhlaWdodCA9IG9wdGlvbnMuY2VsbEhlaWdodDtcblx0XHR2YXIgY2VudGVyWCA9IGNlbGxYICsgKGdhdGVXaWR0aCAvIDIpO1xuXHRcdHZhciBjZW50ZXJZID0gY2VsbFkgKyAoZ2F0ZUhlaWdodCAvIDIpO1xuXG5cdFx0dmFyIHJlcyA9IFwiXCI7XG5cdFx0cmVzICs9IFwiPGNpcmNsZSBjbGFzcz1cXFwicWMtZ2F0ZS1uZG90XFxcIiBjeD1cXFwiXCIgKyBjZW50ZXJYICsgXCJcXFwiIGN5PVxcXCJcIiArIGNlbnRlclkgKyBcIlxcXCIgcj1cXFwiXCIgKyBvcHRpb25zLmRvdFJhZGl1cyArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgKHNlbGVjdGVkID8gb3B0aW9ucy5nYXRlU2VsZWN0ZWRMaW5lQ29sb3IgOiBvcHRpb25zLndpcmVDb2xvcikgKyBcIlxcXCIgZmlsbD1cXFwid2hpdGVcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblx0XHRyZXR1cm4gcmVzO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2F0ZVNWRyhnYXRlWCwgZ2F0ZVksIGdhdGVOYW1lLCBnYXRlTGFiZWwsIGNvbm5lY3RvciwgZHJhd0JveCwgc2VsZWN0ZWQpIHtcblx0XHR2YXIgcmVzID0gXCJcIjtcblxuXHRcdGlmKGNvbm5lY3RvciAhPSBcImJveFwiICYmIGRyYXdCb3gpIHtcblx0XHRcdHJlcyArPSBnYXRlQm94U1ZHKGdhdGVYLCBnYXRlWSwgZ2F0ZU5hbWUsIFwiXCIsIHNlbGVjdGVkKTtcblx0XHR9XG5cblx0XHRzd2l0Y2goY29ubmVjdG9yKSB7XG5cdFx0XHRjYXNlIFwiYm94XCI6IHJlcyArPSBnYXRlQm94U1ZHKGdhdGVYLCBnYXRlWSwgZ2F0ZU5hbWUsIGdhdGVMYWJlbCwgc2VsZWN0ZWQpOyBicmVhaztcblx0XHRcdGNhc2UgXCJyZWN0XCI6IHJlcyArPSBnYXRlUmVjdFNWRyhnYXRlWCwgZ2F0ZVksIGdhdGVOYW1lLCBnYXRlTGFiZWwsIHNlbGVjdGVkKTsgYnJlYWs7XG5cdFx0XHRjYXNlIFwiY2lyY2xlXCI6IHJlcyArPSBnYXRlQ2lyY2xlU1ZHKGdhdGVYLCBnYXRlWSwgZ2F0ZU5hbWUsIGdhdGVMYWJlbCwgc2VsZWN0ZWQpOyBicmVhaztcblx0XHRcdGNhc2UgXCJub3RcIjogcmVzICs9IGdhdGVOb3RTVkcoZ2F0ZVgsIGdhdGVZLCBnYXRlTmFtZSwgc2VsZWN0ZWQpOyBicmVhaztcblx0XHRcdGNhc2UgXCJ4XCI6IHJlcyArPSBnYXRlWFNWRyhnYXRlWCwgZ2F0ZVksIGdhdGVOYW1lLCBzZWxlY3RlZCk7IGJyZWFrO1xuXHRcdFx0Y2FzZSBcImRvdFwiOiByZXMgKz0gZ2F0ZURvdFNWRyhnYXRlWCwgZ2F0ZVksIGdhdGVOYW1lLCBzZWxlY3RlZCk7IGJyZWFrO1xuXHRcdFx0Y2FzZSBcIm5kb3RcIjogcmVzICs9IGdhdGVJbnZlcnRlZERvdFNWRyhnYXRlWCwgZ2F0ZVksIGdhdGVOYW1lLCBzZWxlY3RlZCk7IGJyZWFrO1xuXHRcdFx0Y2FzZSBcImdhdWdlXCI6IHJlcyArPSBnYXRlR2F1Z2VTVkcoZ2F0ZVgsIGdhdGVZLCBnYXRlTmFtZSwgc2VsZWN0ZWQpOyBicmVhaztcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzO1xuXHR9XG5cblxuXHRmdW5jdGlvbiBkcmF3R2F0ZShnYXRlLCBjb2xJbmRleCwgcm93SW5kZXgpIHtcblx0XHR2YXIgZGluZm8gPSBzZWxmLmJhc2ljR2F0ZXNbZ2F0ZS5uYW1lXSA/IHNlbGYuYmFzaWNHYXRlc1tnYXRlLm5hbWVdLmRyYXdpbmdJbmZvIDogbnVsbDtcblx0XHRpZighZGluZm8pIHtcblx0XHRcdGRpbmZvID0gc2VsZi5jdXN0b21HYXRlc1tnYXRlLm5hbWVdID8gc2VsZi5jdXN0b21HYXRlc1tnYXRlLm5hbWVdLmRyYXdpbmdJbmZvIDogbnVsbDtcblx0XHR9XG5cblx0XHR2YXIgYmxhY2tib3ggPSBmYWxzZTtcblx0XHR2YXIgc2VsZWN0ZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuc2VsZWN0aW9uICYmIG9wdGlvbnMuc2VsZWN0aW9uLmluZGV4T2YoZ2F0ZS5pZCkgPj0gMDtcblx0XHRpZighZGluZm8pIHtcblx0XHRcdGlmKGdhdGUud2lyZXMubGVuZ3RoID09IDEpIHtcblx0XHRcdFx0ZGluZm8gPSB7IGNvbm5lY3RvcnM6IFtcImJveFwiXSB9O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGluZm8gPSB7IGNvbm5lY3RvcnM6IFtdIH07XG5cdFx0XHRcdGJsYWNrYm94ID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0d2hpbGUoZGluZm8uY29ubmVjdG9ycy5sZW5ndGggPCBnYXRlLndpcmVzLmxlbmd0aCkge1xuXHRcdFx0ZGluZm8uY29ubmVjdG9ycy5wdXNoKFwiYm94XCIpO1xuXHRcdH1cblxuXHRcdHZhciB0b3BXaXJlID0gTWF0aC5taW4uYXBwbHkobnVsbCwgZ2F0ZS53aXJlcyk7XG5cdFx0dmFyIGJvdHRvbVdpcmUgPSBNYXRoLm1heC5hcHBseShudWxsLCBnYXRlLndpcmVzKTtcblx0XHR2YXIgY0xpbmtUb3BZID0gY1dpcmVZKGJvdHRvbVdpcmUpO1xuXG5cdFx0dmFyIHN2ZyA9IFwiXCI7XG5cdFx0c3ZnICs9IFwiPGcgY2xhc3M9XFxcInFjLWdhdGUtZ3JvdXBcXFwiIGRhdGEtaWQ9XFxcIlwiICsgZ2F0ZS5pZCArIFwiXFxcIiBkYXRhLWdhdGU9XFxcIlwiICsgZ2F0ZS5uYW1lICsgXCJcXFwiPlwiO1xuXHRcdGlmKGJsYWNrYm94KSB7XG5cdFx0XHR2YXIgZ2F0ZVggPSBnZXRDZWxsWChjb2xJbmRleCkgLSBvcHRpb25zLmJsYWNrYm94UGFkZGluZ1g7XG5cdFx0XHR2YXIgZ2F0ZVkgPSBxR2F0ZVkodG9wV2lyZSkgLSBvcHRpb25zLmJsYWNrYm94UGFkZGluZ1k7XG5cdFx0XHR2YXIgZ2F0ZVdpZHRoID0gb3B0aW9ucy5jZWxsV2lkdGggKyAoMiAqIG9wdGlvbnMuYmxhY2tib3hQYWRkaW5nWCk7XG5cdFx0XHR2YXIgZ2F0ZUhlaWdodCA9ICgocUdhdGVZKGJvdHRvbVdpcmUpICsgb3B0aW9ucy5jZWxsSGVpZ2h0KSAtIGdhdGVZKSArIG9wdGlvbnMuYmxhY2tib3hQYWRkaW5nWTtcblxuXHRcdFx0dmFyIGNlbnRlclggPSBnYXRlWCArIChnYXRlV2lkdGggLyAyKTtcblxuXHRcdFx0Y0xpbmtUb3BZID0gZ2F0ZVkgKyBnYXRlSGVpZ2h0O1xuXG5cdFx0XHRzdmcgKz0gXCI8dGV4dCBjbGFzcz1cXFwicWMtYmxhY2tib3gtbGFiZWxcXFwiIHg9XFxcIlwiICsgY2VudGVyWCArIFwiXFxcIiB5PVxcXCJcIiArIChnYXRlWSAtIG9wdGlvbnMud2lyZVRleHRIZWlnaHQgLSAob3B0aW9ucy5ibGFja2JveFBhZGRpbmdZICogMikpICsgXCJcXFwiIGRvbWluYW50LWJhc2VsaW5lPVxcXCJoYW5naW5nXFxcIiB0ZXh0LWFuY2hvcj1cXFwibWlkZGxlXFxcIiBmb250LXNpemU9XFxcIjc1JVxcXCI+XCIgKyAoZGluZm8ubGFiZWwgfHwgZ2F0ZS5uYW1lKSArIFwiPC90ZXh0PlwiO1xuXHRcdFx0c3ZnICs9IFwiPHJlY3QgY2xhc3M9XFxcInFjLWdhdGUtYmxhY2tib3hcXFwiIHg9XFxcIlwiICsgZ2F0ZVggKyBcIlxcXCIgeT1cXFwiXCIgKyBnYXRlWSArIFwiXFxcIiB3aWR0aD1cXFwiXCIgKyBnYXRlV2lkdGggKyBcIlxcXCIgaGVpZ2h0PVxcXCJcIiArIGdhdGVIZWlnaHQgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIChzZWxlY3RlZCA/IG9wdGlvbnMuYmxhY2tib3hTZWxlY3RlZExpbmVDb2xvciA6IG9wdGlvbnMuYmxhY2tib3hMaW5lQ29sb3IpICsgXCJcXFwiIGZpbGw9XFxcInRyYW5zcGFyZW50XFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cdFx0fVxuXG5cdFx0aWYoc2VsZWN0ZWQpIHtcblx0XHRcdHZhciBnYXRlWCA9IGdldENlbGxYKGNvbEluZGV4KSAtIG9wdGlvbnMuc2VsZWN0aW9uUGFkZGluZ1g7XG5cdFx0XHR2YXIgZ2F0ZVkgPSBxR2F0ZVkodG9wV2lyZSkgLSBvcHRpb25zLnNlbGVjdGlvblBhZGRpbmdZO1xuXHRcdFx0dmFyIGdhdGVXaWR0aCA9IG9wdGlvbnMuY2VsbFdpZHRoICsgKDIgKiBvcHRpb25zLnNlbGVjdGlvblBhZGRpbmdYKTtcblx0XHRcdHZhciBnYXRlSGVpZ2h0ID0gKChxR2F0ZVkoYm90dG9tV2lyZSkgKyBvcHRpb25zLmNlbGxIZWlnaHQpIC0gZ2F0ZVkpICsgb3B0aW9ucy5zZWxlY3Rpb25QYWRkaW5nWTtcblxuXHRcdFx0dmFyIGNlbnRlclggPSBnYXRlWCArIChnYXRlV2lkdGggLyAyKTtcblxuXHRcdFx0Y0xpbmtUb3BZID0gZ2F0ZVkgKyBnYXRlSGVpZ2h0O1xuXG5cdFx0XHRzdmcgKz0gXCI8cmVjdCBjbGFzcz1cXFwicWMtZ2F0ZS1zZWxlY3Rpb25cXFwiIHg9XFxcIlwiICsgZ2F0ZVggKyBcIlxcXCIgeT1cXFwiXCIgKyBnYXRlWSArIFwiXFxcIiB3aWR0aD1cXFwiXCIgKyBnYXRlV2lkdGggKyBcIlxcXCIgaGVpZ2h0PVxcXCJcIiArIGdhdGVIZWlnaHQgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIG9wdGlvbnMuc2VsZWN0aW9uTGluZUNvbG9yICsgXCJcXFwiIGZpbGw9XFxcInRyYW5zcGFyZW50XFxcIiBzdHJva2UtZGFzaGFycmF5PVxcXCI0XFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cdFx0fVxuXG5cdFx0Ly8gbGlua1xuXHRcdGlmKHRvcFdpcmUgIT0gYm90dG9tV2lyZSAmJiAhYmxhY2tib3gpIHtcblx0XHRcdHZhciBsaW5rWCA9IGdldENlbGxYKGNvbEluZGV4KSArIChvcHRpb25zLmNlbGxXaWR0aCAvIDIpO1xuXHRcdFx0dmFyIGxpbmtZMSA9IGdldENlbGxZKHRvcFdpcmUpICsgKG9wdGlvbnMuY2VsbEhlaWdodCAvIDIpO1xuXHRcdFx0dmFyIGxpbmtZMiA9IGdldENlbGxZKGJvdHRvbVdpcmUpICsgKG9wdGlvbnMuY2VsbEhlaWdodCAvIDIpO1xuXHRcdFx0c3ZnICs9IFwiPGxpbmUgY2xhc3M9XFxcInFjLWdhdGUtbGlua1xcXCIgeDE9XFxcIlwiICsgbGlua1ggKyBcIlxcXCIgeDI9XFxcIlwiICsgbGlua1ggKyBcIlxcXCIgeTE9XFxcIlwiICsgbGlua1kxICtcIlxcXCIgeTI9XFxcIlwiICsgbGlua1kyICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyAoc2VsZWN0ZWQgPyBvcHRpb25zLmdhdGVTZWxlY3RlZExpbmVDb2xvciA6IG9wdGlvbnMud2lyZUNvbG9yKSArIFwiXFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cdFx0fVxuXG5cdFx0Ly8gY29ubmVjdG9yc1xuXHRcdHZhciBtYXhXaXJlID0gTWF0aC5tYXguYXBwbHkobnVsbCwgZ2F0ZS53aXJlcyk7XG5cdFx0Z2F0ZS53aXJlcy5tYXAoZnVuY3Rpb24od2lyZSwgY29ubmVjdG9yKSB7XG5cblx0XHRcdHN3aXRjaChkaW5mby5jb25uZWN0b3JzW2Nvbm5lY3Rvcl0pIHtcblx0XHRcdFx0Y2FzZSBcImJveFwiOiB7XG5cdFx0XHRcdFx0dmFyIGdhdGVYID0gZ2V0Q2VsbFgoY29sSW5kZXgpO1xuXHRcdFx0XHRcdHZhciBnYXRlWSA9IGdldENlbGxZKHdpcmUpO1xuXG5cdFx0XHRcdFx0c3ZnID0gc3ZnICsgZ2F0ZUJveFNWRyhnYXRlWCwgZ2F0ZVksIGdhdGUubmFtZSwgKGJsYWNrYm94ID8gcXViaXRMZXR0ZXIoY29ubmVjdG9yLCBudW1Sb3dzKSA6IChkaW5mby5sYWJlbCB8fCBnYXRlLm5hbWUpKSwgc2VsZWN0ZWQpO1xuXG5cdFx0XHRcdFx0aWYoIWJsYWNrYm94ICYmIHdpcmUgPT0gYm90dG9tV2lyZSkge1xuXHRcdFx0XHRcdFx0Y0xpbmtUb3BZID0gZ2F0ZVkgKyBvcHRpb25zLmNlbGxIZWlnaHQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9OyBicmVhaztcblxuXHRcdFx0XHRjYXNlIFwiY2lyY2xlXCI6IHtcblx0XHRcdFx0XHR2YXIgZ2F0ZVggPSBnZXRDZWxsWChjb2xJbmRleCk7XG5cdFx0XHRcdFx0dmFyIGdhdGVZID0gZ2V0Q2VsbFkod2lyZSk7XG5cblx0XHRcdFx0XHRzdmcgPSBzdmcgKyBnYXRlQ2lyY2xlU1ZHKGdhdGVYLCBnYXRlWSwgZ2F0ZS5uYW1lLCAoYmxhY2tib3ggPyBxdWJpdExldHRlcihjb25uZWN0b3IsIG51bVJvd3MpIDogKGRpbmZvLmxhYmVsIHx8IGdhdGUubmFtZSkpLCBzZWxlY3RlZCk7XG5cblx0XHRcdFx0XHRpZighYmxhY2tib3ggJiYgd2lyZSA9PSBib3R0b21XaXJlKSB7XG5cdFx0XHRcdFx0XHR2YXIgZ2F0ZUhlaWdodCA9IChvcHRpb25zLmNlbGxIZWlnaHQgKiAwLjgpO1xuXHRcdFx0XHRcdFx0Y0xpbmtUb3BZID0gZ2F0ZVkgKyBnYXRlSGVpZ2h0ICsgKChvcHRpb25zLmNlbGxIZWlnaHQgLSBnYXRlSGVpZ2h0KSAvIDIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTsgYnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBcIm5vdFwiOiB7XG5cdFx0XHRcdFx0dmFyIGNlbGxYID0gZ2V0Q2VsbFgoY29sSW5kZXgpO1xuXHRcdFx0XHRcdHZhciBjZWxsWSA9IGdldENlbGxZKHdpcmUpO1xuXG5cdFx0XHRcdFx0c3ZnID0gc3ZnICsgZ2F0ZU5vdFNWRyhjZWxsWCwgY2VsbFksIGdhdGUubmFtZSwgc2VsZWN0ZWQpO1xuXG5cdFx0XHRcdFx0aWYoIWJsYWNrYm94ICYmIHdpcmUgPT0gYm90dG9tV2lyZSkge1xuXHRcdFx0XHRcdFx0dmFyIGdhdGVIZWlnaHQgPSAob3B0aW9ucy5jZWxsSGVpZ2h0ICogMC44KTtcblx0XHRcdFx0XHRcdGNMaW5rVG9wWSA9IGNlbGxZICsgZ2F0ZUhlaWdodCArICgob3B0aW9ucy5jZWxsSGVpZ2h0IC0gZ2F0ZUhlaWdodCkgLyAyKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07IGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgXCJ4XCI6IHtcblx0XHRcdFx0XHR2YXIgY2VsbFggPSBnZXRDZWxsWChjb2xJbmRleCk7XG5cdFx0XHRcdFx0dmFyIGNlbGxZID0gZ2V0Q2VsbFkod2lyZSk7XG5cblx0XHRcdFx0XHRzdmcgPSBzdmcgKyBnYXRlWFNWRyhjZWxsWCwgY2VsbFksIGdhdGUubmFtZSwgc2VsZWN0ZWQpO1xuXG5cdFx0XHRcdFx0aWYoIWJsYWNrYm94ICYmIHdpcmUgPT0gYm90dG9tV2lyZSkge1xuXHRcdFx0XHRcdFx0Y0xpbmtUb3BZID0gcVdpcmVZKGJvdHRvbVdpcmUpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9OyBicmVhaztcblxuXHRcdFx0XHRjYXNlIFwiZG90XCI6IHtcblx0XHRcdFx0XHR2YXIgY2VsbFggPSBnZXRDZWxsWChjb2xJbmRleCk7XG5cdFx0XHRcdFx0dmFyIGNlbGxZID0gZ2V0Q2VsbFkod2lyZSk7XG5cblx0XHRcdFx0XHRzdmcgPSBzdmcgKyBnYXRlRG90U1ZHKGNlbGxYLCBjZWxsWSwgZ2F0ZS5uYW1lLCBzZWxlY3RlZCk7XG5cblx0XHRcdFx0XHRpZighYmxhY2tib3ggJiYgd2lyZSA9PSBib3R0b21XaXJlKSB7XG5cdFx0XHRcdFx0XHRjTGlua1RvcFkgPSBxV2lyZVkoYm90dG9tV2lyZSkgKyBvcHRpb25zLmRvdFJhZGl1cztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07IGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgXCJuZG90XCI6IHtcblx0XHRcdFx0XHR2YXIgY2VsbFggPSBnZXRDZWxsWChjb2xJbmRleCk7XG5cdFx0XHRcdFx0dmFyIGNlbGxZID0gZ2V0Q2VsbFkod2lyZSk7XG5cblx0XHRcdFx0XHRzdmcgPSBzdmcgKyBnYXRlSW52ZXJ0ZWREb3RTVkcoY2VsbFgsIGNlbGxZLCBnYXRlLm5hbWUsIHNlbGVjdGVkKTtcblxuXHRcdFx0XHRcdGlmKCFibGFja2JveCAmJiB3aXJlID09IGJvdHRvbVdpcmUpIHtcblx0XHRcdFx0XHRcdGNMaW5rVG9wWSA9IHFXaXJlWShib3R0b21XaXJlKSArIG9wdGlvbnMuZG90UmFkaXVzO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTsgYnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBcImdhdWdlXCI6IHtcblx0XHRcdFx0XHR2YXIgZ2F0ZVggPSBnZXRDZWxsWChjb2xJbmRleCk7XG5cdFx0XHRcdFx0dmFyIGdhdGVZID0gZ2V0Q2VsbFkod2lyZSk7XG5cblx0XHRcdFx0XHRzdmcgPSBzdmcgKyBnYXRlR2F1Z2VTVkcoZ2F0ZVgsIGdhdGVZLCBnYXRlLm5hbWUsIHNlbGVjdGVkKTtcblxuXHRcdFx0XHRcdGlmKCFibGFja2JveCAmJiB3aXJlID09IGJvdHRvbVdpcmUpIHtcblx0XHRcdFx0XHRcdGNMaW5rVG9wWSA9IGdhdGVZICsgb3B0aW9ucy5jZWxsSGVpZ2h0O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTsgYnJlYWs7XG5cdFx0XHR9XG5cblx0XHRcdC8vIHBhcmFtc1xuXHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5wYXJhbXMgJiYgd2lyZSA9PSBtYXhXaXJlKSB7XG5cdFx0XHRcdHZhciBnYXRlWCA9IGdldENlbGxYKGNvbEluZGV4KTtcblx0XHRcdFx0dmFyIGdhdGVZID0gZ2V0Q2VsbFkod2lyZSk7XG5cdFx0XHRcdHZhciBjZW50ZXJYID0gZ2F0ZVggKyAob3B0aW9ucy5jZWxsV2lkdGggLyAyKTtcblxuXHRcdFx0XHR2YXIgcGFyYW1zU3RyID0gXCJcIjtcblx0XHRcdFx0Zm9yKHZhciBwYXJhbU5hbWUgaW4gZ2F0ZS5vcHRpb25zLnBhcmFtcykge1xuXHRcdFx0XHRcdGlmKHBhcmFtc1N0cikge1xuXHRcdFx0XHRcdFx0cGFyYW1zU3RyICs9IFwiLCBcIjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR2YXIgcGFyYW1WYWwgPSBnYXRlLm9wdGlvbnMucGFyYW1zW3BhcmFtTmFtZV07XG5cdFx0XHRcdFx0aWYodHlwZW9mIHBhcmFtVmFsID09IFwic3RyaW5nXCIgJiYgcGFyYW1WYWwubWF0Y2goL15bXFwrXFwtXT9cXGQqXFwuP1xcZCsoPzpbRWVdW1xcK1xcLV0/XFxkKyk/JC8pKSB7XG5cdFx0XHRcdFx0XHRwYXJhbVZhbCA9IHBhcnNlRmxvYXQocGFyYW1WYWwpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKHR5cGVvZiBwYXJhbVZhbCA9PSBcIm51bWJlclwiKSB7XG5cdFx0XHRcdFx0XHRwYXJhbVZhbCA9IG1hdGgucm91bmQocGFyYW1WYWwsIDMpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHBhcmFtc1N0ciArPSBwYXJhbVZhbDtcblx0XHRcdFx0fVxuXHRcdFx0XHRzdmcgKz0gXCI8dGV4dCBjbGFzcz1cXFwicWMtZ2F0ZS1wYXJhbXNcXFwiIHg9XFxcIlwiICsgY2VudGVyWCArIFwiXFxcIiB5PVxcXCJcIiArIChnYXRlWSArIG9wdGlvbnMuY2VsbEhlaWdodCArIG9wdGlvbnMucGFyYW1UZXh0SGVpZ2h0KSArIFwiXFxcIiBkb21pbmFudC1iYXNlbGluZT1cXFwiaGFuZ2luZ1xcXCIgdGV4dC1hbmNob3I9XFxcIm1pZGRsZVxcXCIgZm9udC1zaXplPVxcXCI3NSVcXFwiPlwiICsgcGFyYW1zU3RyICsgXCI8L3RleHQ+XCI7XG5cdFx0XHR9XG5cblx0XHR9KTtcblxuXHRcdC8vIG1lYXN1cmVcblx0XHRpZihnYXRlLm5hbWUgPT0gXCJtZWFzdXJlXCIgJiYgZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jcmVnICYmIGdhdGUub3B0aW9ucy5jcmVnLm5hbWUpIHtcblx0XHRcdHZhciBsaW5rWCA9IGdldENlbGxYKGNvbEluZGV4KSArIChvcHRpb25zLmNlbGxXaWR0aCAvIDIpO1xuXHRcdFx0dmFyIGxpbmtZMSA9IGNMaW5rVG9wWTtcblx0XHRcdHZhciBsaW5rWTIgPSBjV2lyZVkoZ2F0ZS5vcHRpb25zLmNyZWcubmFtZSk7XG5cblx0XHRcdHN2ZyArPSBcIjxsaW5lIGNsYXNzPVxcXCJxYy1nYXRlLWxpbmstY1xcXCIgeDE9XFxcIlwiICsgbGlua1ggKyBcIlxcXCIgeDI9XFxcIlwiICsgbGlua1ggKyBcIlxcXCIgeTE9XFxcIlwiICsgbGlua1kxICtcIlxcXCIgeTI9XFxcIlwiICsgbGlua1kyICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyAoc2VsZWN0ZWQgPyBvcHRpb25zLmNXaXJlU2VsZWN0ZWRDb2xvciA6IG9wdGlvbnMuY1dpcmVDb2xvcikgKyBcIlxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxXFxcIiAvPlwiO1xuXG5cdFx0XHRzdmcgKz0gXCI8bGluZSBjbGFzcz1cXFwicWMtZ2F0ZS1saW5rLWNcXFwiIHgyPVxcXCJcIiArIGxpbmtYICsgXCJcXFwiIHgxPVxcXCJcIiArIChsaW5rWCAtIChvcHRpb25zLmNBcnJvd1NpemUgLyAyKSkgKyBcIlxcXCIgeTE9XFxcIlwiICsgKGxpbmtZMiAtIG9wdGlvbnMuY0Fycm93U2l6ZSkgK1wiXFxcIiB5Mj1cXFwiXCIgKyBsaW5rWTIgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIChzZWxlY3RlZCA/IG9wdGlvbnMuY1dpcmVTZWxlY3RlZENvbG9yIDogb3B0aW9ucy5jV2lyZUNvbG9yKSArIFwiXFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cdFx0XHRzdmcgKz0gXCI8bGluZSBjbGFzcz1cXFwicWMtZ2F0ZS1saW5rLWNcXFwiIHgyPVxcXCJcIiArIGxpbmtYICsgXCJcXFwiIHgxPVxcXCJcIiArIChsaW5rWCArIChvcHRpb25zLmNBcnJvd1NpemUgLyAyKSkgKyBcIlxcXCIgeTE9XFxcIlwiICsgKGxpbmtZMiAtIG9wdGlvbnMuY0Fycm93U2l6ZSkgK1wiXFxcIiB5Mj1cXFwiXCIgKyBsaW5rWTIgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIChzZWxlY3RlZCA/IG9wdGlvbnMuY1dpcmVTZWxlY3RlZENvbG9yIDogb3B0aW9ucy5jV2lyZUNvbG9yKSArIFwiXFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cblx0XHRcdHN2ZyArPSBcIjx0ZXh0IGNsYXNzPVxcXCJxYy13aXJlLWxhYmVsXFxcIiB4PVxcXCJcIiArIGxpbmtYICsgXCJcXFwiIHk9XFxcIlwiICsgKGxpbmtZMiArIG9wdGlvbnMud2lyZVRleHRIZWlnaHQpICsgXCJcXFwiIGRvbWluYW50LWJhc2VsaW5lPVxcXCJoYW5naW5nXFxcIiB0ZXh0LWFuY2hvcj1cXFwibWlkZGxlXFxcIiBmb250LXNpemU9XFxcIjc1JVxcXCI+XCIgKyBnYXRlLm9wdGlvbnMuY3JlZy5iaXQgKyBcIjwvdGV4dD5cIjtcblx0XHR9XG5cblx0XHQvLyBjb250cm9sbGVkIGJ5IGNsYXNzaWMgcmVnaXN0ZXJcblx0XHRpZihnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcpIHtcblx0XHRcdHZhciBsaW5rWCA9IGdldENlbGxYKGNvbEluZGV4KSArIChvcHRpb25zLmNlbGxXaWR0aCAvIDIpO1xuXHRcdFx0dmFyIGxpbmtZMSA9IGNMaW5rVG9wWTtcblx0XHRcdHZhciBsaW5rWTIgPSBjV2lyZVkoZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnKTtcblxuXHRcdFx0c3ZnICs9IFwiPGxpbmUgY2xhc3M9XFxcInFjLWdhdGUtbGluay1jXFxcIiB4MT1cXFwiXCIgKyBsaW5rWCArIFwiXFxcIiB4Mj1cXFwiXCIgKyBsaW5rWCArIFwiXFxcIiB5MT1cXFwiXCIgKyBsaW5rWTEgK1wiXFxcIiB5Mj1cXFwiXCIgKyBsaW5rWTIgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIChzZWxlY3RlZCA/IG9wdGlvbnMuY1dpcmVTZWxlY3RlZENvbG9yIDogb3B0aW9ucy5jV2lyZUNvbG9yKSArIFwiXFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cblx0XHRcdHN2ZyArPSBcIjxjaXJjbGUgY2xhc3M9XFxcInFjLWdhdGUtZG90LWNcXFwiIGN4PVxcXCJcIiArIGxpbmtYICsgXCJcXFwiIGN5PVxcXCJcIiArIGxpbmtZMiArIFwiXFxcIiByPVxcXCJcIiArIG9wdGlvbnMuZG90UmFkaXVzICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyAoc2VsZWN0ZWQgPyBvcHRpb25zLmNXaXJlU2VsZWN0ZWRDb2xvciA6IG9wdGlvbnMuY1dpcmVDb2xvcikgKyBcIlxcXCIgZmlsbD1cXFwiXCIgKyAoc2VsZWN0ZWQgPyBvcHRpb25zLmNXaXJlU2VsZWN0ZWRDb2xvciA6IG9wdGlvbnMuY1dpcmVDb2xvcikgKyBcIlxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxXFxcIiAvPlwiO1xuXG5cdFx0XHRzdmcgKz0gXCI8dGV4dCBjbGFzcz1cXFwicWMtd2lyZS1sYWJlbFxcXCIgeD1cXFwiXCIgKyBsaW5rWCArIFwiXFxcIiB5PVxcXCJcIiArIChsaW5rWTIgKyBvcHRpb25zLndpcmVUZXh0SGVpZ2h0KSArIFwiXFxcIiBkb21pbmFudC1iYXNlbGluZT1cXFwiaGFuZ2luZ1xcXCIgdGV4dC1hbmNob3I9XFxcIm1pZGRsZVxcXCIgZm9udC1zaXplPVxcXCI3NSVcXFwiPj09IFwiICsgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi52YWx1ZSArIFwiPC90ZXh0PlwiO1xuXHRcdH1cblxuXHRcdHN2ZyArPSBcIjwvZz5cIjtcblxuXHRcdHJldHVybiBzdmc7XG5cdH1cblxuXHRmdW5jdGlvbiBkcmF3R2F0ZVBsYWNlaG9sZGVyKGNvbEluZGV4LCB3aXJlKSB7XG5cdFx0dmFyIHN2ZyA9IFwiXCI7XG5cblx0XHR2YXIgZ2F0ZVdpZHRoID0gb3B0aW9ucy5jZWxsV2lkdGggKyBvcHRpb25zLmhTcGFjaW5nO1xuXHRcdHZhciBnYXRlSGVpZ2h0ID0gb3B0aW9ucy5jZWxsSGVpZ2h0ICsgb3B0aW9ucy52U3BhY2luZztcblx0XHR2YXIgZ2F0ZVggPSBnZXRDZWxsWChjb2xJbmRleCkgLSBvcHRpb25zLmhTcGFjaW5nO1xuXHRcdHZhciBnYXRlWSA9IGdldENlbGxZKHdpcmUpIC0gb3B0aW9ucy52U3BhY2luZztcblxuXHRcdGlmKHdpcmUgPT0gbnVtUm93cykge1xuXHRcdFx0Z2F0ZUhlaWdodCA9IG9wdGlvbnMudlNwYWNpbmc7XG5cdFx0fVxuXG5cdFx0aWYoY29sSW5kZXggPT0gbnVtQ29scykge1xuXHRcdFx0Z2F0ZVdpZHRoID0gb3B0aW9ucy5oU3BhY2luZztcblx0XHR9XG5cblx0XHRzdmcgKz0gXCI8cmVjdCBjbGFzcz1cXFwicWMtZ2F0ZS1wbGFjZWhvbGRlclxcXCIgZGF0YS1yb3c9XFxcIlwiICsgd2lyZSArIFwiXFxcIiBkYXRhLWNvbD1cXFwiXCIgKyBjb2xJbmRleCArIFwiXFxcIiB4PVxcXCJcIiArIGdhdGVYICsgXCJcXFwiIHk9XFxcIlwiICsgZ2F0ZVkgKyBcIlxcXCIgd2lkdGg9XFxcIlwiICsgZ2F0ZVdpZHRoICsgXCJcXFwiIGhlaWdodD1cXFwiXCIgKyBnYXRlSGVpZ2h0ICsgXCJcXFwiIHN0cm9rZT1cXFwibm9uZVxcXCIgZmlsbD1cXFwidHJhbnNwYXJlbnRcXFwiIHN0cm9rZS13aWR0aD1cXFwiMFxcXCIgLz5cIjtcblxuXHRcdHJldHVybiBzdmc7XG5cdH1cblxuXHRmdW5jdGlvbiBkcmF3R2F0ZUhhbmRsZShnYXRlLCBjb2xJbmRleCwgd2lyZSkge1xuXHRcdHZhciBzdmcgPSBcIlwiO1xuXG5cdFx0dmFyIGdhdGVXaWR0aCA9IG9wdGlvbnMuY2VsbFdpZHRoO1xuXHRcdHZhciBnYXRlSGVpZ2h0ID0gb3B0aW9ucy5jZWxsSGVpZ2h0O1xuXHRcdHZhciBnYXRlWCA9IGdldENlbGxYKGNvbEluZGV4KTtcblx0XHR2YXIgZ2F0ZVkgPSBnZXRDZWxsWSh3aXJlKTtcblxuXHRcdHN2ZyArPSBcIjxyZWN0IGNsYXNzPVxcXCJxYy1nYXRlLWhhbmRsZVxcXCIgZGF0YS1pZD1cXFwiXCIgKyBnYXRlLmlkICsgXCJcXFwiIGRhdGEtZ2F0ZT1cXFwiXCIgKyBnYXRlLm5hbWUgKyBcIlxcXCIgZGF0YS1yb3c9XFxcIlwiICsgd2lyZSArIFwiXFxcIiBkYXRhLWNvbD1cXFwiXCIgKyBjb2xJbmRleCArIFwiXFxcIiB4PVxcXCJcIiArIGdhdGVYICsgXCJcXFwiIHk9XFxcIlwiICsgZ2F0ZVkgKyBcIlxcXCIgd2lkdGg9XFxcIlwiICsgZ2F0ZVdpZHRoICsgXCJcXFwiIGhlaWdodD1cXFwiXCIgKyBnYXRlSGVpZ2h0ICsgXCJcXFwiIHN0cm9rZT1cXFwibm9uZVxcXCIgZmlsbD1cXFwidHJhbnNwYXJlbnRcXFwiIHN0cm9rZS13aWR0aD1cXFwiMFxcXCIgLz5cIjtcblxuXHRcdHJldHVybiBzdmc7XG5cdH1cblxuXHRmdW5jdGlvbiBkcmF3R2F0ZUNhbnZhcyhjb2xJbmRleCwgd2lyZSwgY2xhc3NOYW1lLCBjYW52YXNJZCkge1xuXHRcdHZhciBzdmcgPSBcIlwiO1xuXG5cdFx0dmFyIGdhdGVXaWR0aCA9IG9wdGlvbnMuY2VsbFdpZHRoO1xuXHRcdHZhciBnYXRlSGVpZ2h0ID0gb3B0aW9ucy5jZWxsSGVpZ2h0O1xuXHRcdHZhciBnYXRlWCA9IGdldENlbGxYKGNvbEluZGV4KTtcblx0XHR2YXIgZ2F0ZVkgPSBnZXRDZWxsWSh3aXJlKTtcblxuXG5cdFx0c3ZnICs9IFwiPGcgY2xhc3M9XFxcIlwiICsgKGNsYXNzTmFtZSB8fCBcInFjLWNhbnZhcy1ncm91cFwiKSArIFwiXFxcIiBkYXRhLXJvdz1cXFwiXCIgKyB3aXJlICsgXCJcXFwiPlwiO1xuXHRcdHN2ZyArPSBcIjxyZWN0IGNsYXNzPVxcXCJxYy1jYW52YXMtYm94XFxcIiB4PVxcXCJcIiArIGdhdGVYICsgXCJcXFwiIHk9XFxcIlwiICsgZ2F0ZVkgKyBcIlxcXCIgd2lkdGg9XFxcIlwiICsgZ2F0ZVdpZHRoICsgXCJcXFwiIGhlaWdodD1cXFwiXCIgKyBnYXRlSGVpZ2h0ICsgXCJcXFwiIHN0cm9rZT1cXFwidHJhbnNwYXJlbnRcXFwiIGZpbGw9XFxcIndoaXRlXFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cdFx0c3ZnICs9IFwiPGZvcmVpZ25PYmplY3QgY2xhc3M9XFxcInFjLWNhbnZhcy1vYmplY3RcXFwiIHg9XFxcIlwiICsgZ2F0ZVggKyBcIlxcXCIgeT1cXFwiXCIgKyBnYXRlWSArIFwiXFxcIiB3aWR0aD1cXFwiXCIgKyBnYXRlV2lkdGggKyBcIlxcXCIgaGVpZ2h0PVxcXCJcIiArIGdhdGVIZWlnaHQgKyBcIlxcXCI+XCI7XG5cdFx0c3ZnICs9IFwiPGRpdiBzdHlsZT1cXFwicG9zaXRpb246cmVsYXRpdmU7XFxcIj5cIjtcblx0XHRzdmcgKz0gXCI8Y2FudmFzIGlkPVxcXCJcIiArIGNhbnZhc0lkICsgXCItXCIgKyB3aXJlICsgXCJcXFwiIGNsYXNzPVxcXCJcIiArIGNhbnZhc0lkICsgXCJcXFwiIHdpZHRoPVxcXCJcIiArIGdhdGVXaWR0aCArIFwiXFxcIiBoZWlnaHQ9XFxcIlwiICsgZ2F0ZUhlaWdodCArIFwiXFxcIj5cIjtcblx0XHRzdmcgKz0gXCI8L2NhbnZhcz5cIjtcblx0XHRzdmcgKz0gXCI8L2Rpdj5cIjtcblx0XHRzdmcgKz0gXCI8L2ZvcmVpZ25PYmplY3Q+XCI7XG5cdFx0c3ZnICs9IFwiPC9nPlwiO1xuXG5cdFx0cmV0dXJuIHN2Zztcblx0fVxuXG5cblx0ZnVuY3Rpb24gZXNjYXBlSHRtbChzdHIpIHtcblx0XHRyZXR1cm4gc3RyXG5cdFx0XHQucmVwbGFjZSgvJi9nLCBcIiZhbXA7XCIpXG5cdFx0XHQucmVwbGFjZSgvPC9nLCBcIiZsdDtcIilcblx0XHRcdC5yZXBsYWNlKC8+L2csIFwiJmd0O1wiKVxuXHRcdFx0LnJlcGxhY2UoL1wiL2csIFwiJnF1b3Q7XCIpXG5cdFx0XHQucmVwbGFjZSgvJy9nLCBcIiYjMDM5O1wiKTtcblx0fVxuXG5cdC8vIFxuXHQvLyAtIGdhdGVHYWxsZXJ5IGFuZCBjdXN0b21HYXRlR2FsbGVyeSBpcyB1c2VkIGZvciB0b29sYm94IHBhbGV0dGUgaW4gZHJhZyAmIGRyb3AgZWRpdG9yLlxuXHQvLyAtIGdhdGVHYWxsZXJ5UmF3IGlzIHVzZWQgdG8gZ2VuZXJhdGUgbGlzdCBvZiBhbGwgZ2F0ZSBzeW1ib2xzIHRoYXQgbG9vayB0aGUgc2FtZSBhcyBpbiBkaWFncmFtXG5cdC8vICAgKGdhdGUgc3ltYm9sIG9ubHkgd2l0aG91dCBjb250cm9sbGluZyB3aXJlKS4gVXNlZnVsIHRvIGdlbmVyYXRlIHRyYWluaW5nIHNldCBmb3IgY2lyY3VpdCBpbWFnZSByZWNvZ25pdGlvbi5cblx0Ly9cblx0aWYob3B0aW9ucy5nYXRlR2FsbGVyeSB8fCBvcHRpb25zLmdhdGVHYWxsZXJ5UmF3IHx8IG9wdGlvbnMuY3VzdG9tR2F0ZUdhbGxlcnkpIHtcblx0XHR2YXIgZ2F0ZUxpc3QgPSBbXTtcblxuXHRcdC8vIGJhc2ljIGdhdGVzXG5cdFx0aWYob3B0aW9ucy5nYXRlR2FsbGVyeSB8fCBvcHRpb25zLmdhdGVHYWxsZXJ5UmF3KSB7XG5cblx0XHRcdHZhciB1bmlxID0gW107XG5cdFx0XHRmb3IodmFyIGdhdGVOYW1lIGluIHRoaXMuYmFzaWNHYXRlcykge1xuXHRcdFx0XHR2YXIgZ2F0ZSA9IHRoaXMuYmFzaWNHYXRlc1tnYXRlTmFtZV07XG5cdFx0XHRcdHZhciBkaW5mbyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZ2F0ZS5kcmF3aW5nSW5mbyB8fCB7IGNvbm5lY3RvcnM6IFtcImJveFwiXSB9KSk7XG5cdFx0XHRcdGlmKGRpbmZvLmNvbm5lY3RvcnMpIHtcblx0XHRcdFx0XHR2YXIgZ2F0ZUxhYmVsID0gZGluZm8ubGFiZWwgfHwgZ2F0ZU5hbWU7XG5cdFx0XHRcdFx0dmFyIGNvbm5lY3RvciA9IGRpbmZvLmNvbm5lY3RvcnMgPyBkaW5mby5jb25uZWN0b3JzW2RpbmZvLmNvbm5lY3RvcnMubGVuZ3RoIC0gMV0gOiBcImJveFwiO1xuXG5cdFx0XHRcdFx0aWYob3B0aW9ucy5nYXRlR2FsbGVyeSkge1xuXHRcdFx0XHRcdFx0Ly8gRHJhdyBcInN3YXBcIiwgXCJjdTFcIiBhbmQgXCJjelwiIGdhdGVzIGFzIGJveFxuXHRcdFx0XHRcdFx0aWYoY29ubmVjdG9yID09IFwieFwiIHx8IGNvbm5lY3RvciA9PSBcImRvdFwiKSB7XG5cdFx0XHRcdFx0XHRcdGNvbm5lY3RvciA9IFwiYm94XCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dmFyIHVuaXFTdHIgPSBnYXRlTGFiZWwgKyBcInxcIiArIGNvbm5lY3RvcjtcblxuXHRcdFx0XHRcdGlmKHVuaXEuaW5kZXhPZih1bmlxU3RyKSA8IDAgJiYgZ2F0ZU5hbWUgIT0gXCJjY3hcIikge1xuXHRcdFx0XHRcdFx0dW5pcS5wdXNoKHVuaXFTdHIpO1xuXG5cdFx0XHRcdFx0XHR2YXIgc3ZnID0gXCJcIjtcblx0XHRcdFx0XHRcdGlmKCFvcHRpb25zLmVtYmVkZGVkKSB7XG5cdFx0XHRcdFx0XHRcdHN2ZyArPSBcIjw/eG1sIHZlcnNpb249XFxcIjEuMFxcXCI/PlwiO1xuXHRcdFx0XHRcdFx0XHRzdmcgKz1cIjwhRE9DVFlQRSBzdmcgUFVCTElDIFxcXCItLy9XM0MvL0RURCBTVkcgMS4xLy9FTlxcXCIgXFxcImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZFxcXCI+XCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRzdmcgKz0gXCI8c3ZnIGNsYXNzPVxcXCJxYy1nYXRlLWdhbGxlcnktaXRlbVxcXCIgZGF0YS1nYXRlPVxcXCJcIiArIGVzY2FwZUh0bWwoZ2F0ZU5hbWUpICsgXCJcXFwiIGRhdGEtY29udGVudD1cXFwiXCIgKyBlc2NhcGVIdG1sKGdhdGUuZGVzY3JpcHRpb24pICsgXCJcXFwiIHdpZHRoPVxcXCJcIiArIG9wdGlvbnMuY2VsbFdpZHRoICsgXCJcXFwiIGhlaWdodD1cXFwiXCIgKyBvcHRpb25zLmNlbGxIZWlnaHQgKyBcIlxcXCIgdmVyc2lvbj1cXFwiMS4xXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPlwiO1xuXHRcdFx0XHRcdFx0c3ZnID0gc3ZnICsgZ2F0ZVNWRygwLCAwLCBnYXRlTmFtZSwgZ2F0ZUxhYmVsLCBjb25uZWN0b3IsICEhb3B0aW9ucy5nYXRlR2FsbGVyeSwgZmFsc2UpO1xuXHRcdFx0XHRcdFx0c3ZnICs9IFwiPC9zdmc+XCI7XG5cblx0XHRcdFx0XHRcdGlmKG9wdGlvbnMuZ2F0ZUdhbGxlcnkpIHtcblx0XHRcdFx0XHRcdFx0Z2F0ZUxpc3QucHVzaChzdmcpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Z2F0ZUxpc3QucHVzaCh7IG5hbWU6IGdhdGVOYW1lLCBzdmc6IHN2ZyB9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gc3BlY2lhbCBpdGVtOiBkb3Rcblx0XHRcdHZhciBkb3RzdmcgPSBcIlwiO1xuXHRcdFx0aWYoIW9wdGlvbnMuZW1iZWRkZWQpIHtcblx0XHRcdFx0ZG90c3ZnICs9IFwiPD94bWwgdmVyc2lvbj1cXFwiMS4wXFxcIj8+XCI7XG5cdFx0XHRcdGRvdHN2ZyArPVwiPCFET0NUWVBFIHN2ZyBQVUJMSUMgXFxcIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOXFxcIiBcXFwiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkXFxcIj5cIjtcblx0XHRcdH1cblx0XHRcdGRvdHN2ZyArPSBcIjxzdmcgY2xhc3M9XFxcInFjLWdhdGUtZ2FsbGVyeS1pdGVtXFxcIiBkYXRhLWdhdGU9XFxcImRvdFxcXCIgZGF0YS1jb250ZW50PVxcXCJDb250cm9sXFxcIiB3aWR0aD1cXFwiXCIgKyBvcHRpb25zLmNlbGxXaWR0aCArIFwiXFxcIiBoZWlnaHQ9XFxcIlwiICsgb3B0aW9ucy5jZWxsSGVpZ2h0ICsgXCJcXFwiIHZlcnNpb249XFxcIjEuMVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj5cIjtcblx0XHRcdGRvdHN2ZyA9IGRvdHN2ZyArIGdhdGVTVkcoMCwgMCwgXCJkb3RcIiwgXCJkb3RcIiwgXCJkb3RcIiwgISFvcHRpb25zLmdhdGVHYWxsZXJ5LCBmYWxzZSk7XG5cdFx0XHRkb3RzdmcgKz0gXCI8L3N2Zz5cIjtcblxuXHRcdFx0aWYob3B0aW9ucy5nYXRlR2FsbGVyeSkge1xuXHRcdFx0XHRnYXRlTGlzdC5wdXNoKGRvdHN2Zyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRnYXRlTGlzdC5wdXNoKHsgbmFtZTogXCJkb3RcIiwgc3ZnOiBkb3RzdmcgfSk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIHNwZWNpYWwgaXRlbTogaW52ZXJ0ZWQgZG90XG5cdFx0XHR2YXIgbmRvdHN2ZyA9IFwiXCI7XG5cdFx0XHRpZighb3B0aW9ucy5lbWJlZGRlZCkge1xuXHRcdFx0XHRuZG90c3ZnICs9IFwiPD94bWwgdmVyc2lvbj1cXFwiMS4wXFxcIj8+XCI7XG5cdFx0XHRcdG5kb3RzdmcgKz1cIjwhRE9DVFlQRSBzdmcgUFVCTElDIFxcXCItLy9XM0MvL0RURCBTVkcgMS4xLy9FTlxcXCIgXFxcImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZFxcXCI+XCI7XG5cdFx0XHR9XG5cdFx0XHRuZG90c3ZnICs9IFwiPHN2ZyBjbGFzcz1cXFwicWMtZ2F0ZS1nYWxsZXJ5LWl0ZW1cXFwiIGRhdGEtZ2F0ZT1cXFwibmRvdFxcXCIgZGF0YS1jb250ZW50PVxcXCJDb250cm9sXFxcIiB3aWR0aD1cXFwiXCIgKyBvcHRpb25zLmNlbGxXaWR0aCArIFwiXFxcIiBoZWlnaHQ9XFxcIlwiICsgb3B0aW9ucy5jZWxsSGVpZ2h0ICsgXCJcXFwiIHZlcnNpb249XFxcIjEuMVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj5cIjtcblx0XHRcdG5kb3RzdmcgPSBuZG90c3ZnICsgZ2F0ZVNWRygwLCAwLCBcIm5kb3RcIiwgXCJuZG90XCIsIFwibmRvdFwiLCAhIW9wdGlvbnMuZ2F0ZUdhbGxlcnksIGZhbHNlKTtcblx0XHRcdG5kb3RzdmcgKz0gXCI8L3N2Zz5cIjtcblxuXHRcdFx0aWYob3B0aW9ucy5nYXRlR2FsbGVyeSkge1xuXHRcdFx0XHRnYXRlTGlzdC5wdXNoKG5kb3RzdmcpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Z2F0ZUxpc3QucHVzaCh7IG5hbWU6IFwiZG90XCIsIHN2ZzogbmRvdHN2ZyB9KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBjdXN0b20gZ2F0ZXNcblx0XHRpZihvcHRpb25zLmN1c3RvbUdhdGVHYWxsZXJ5KSB7XG5cdFx0XHRmb3IodmFyIGdhdGVOYW1lIGluIHRoaXMuY3VzdG9tR2F0ZXMpIHtcblx0XHRcdFx0dmFyIHN2ZyA9IFwiXCI7XG5cdFx0XHRcdGlmKCFvcHRpb25zLmVtYmVkZGVkKSB7XG5cdFx0XHRcdFx0c3ZnICs9IFwiPD94bWwgdmVyc2lvbj1cXFwiMS4wXFxcIj8+XCI7XG5cdFx0XHRcdFx0c3ZnICs9XCI8IURPQ1RZUEUgc3ZnIFBVQkxJQyBcXFwiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU5cXFwiIFxcXCJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGRcXFwiPlwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHN2ZyArPSBcIjxzdmcgY2xhc3M9XFxcInFjLWN1c3RvbS1nYXRlLWdhbGxlcnktaXRlbVxcXCIgZGF0YS1nYXRlPVxcXCJcIiArIGdhdGVOYW1lICsgXCJcXFwiIHdpZHRoPVxcXCJcIiArIChvcHRpb25zLmNlbGxXaWR0aCAqIDIpICsgXCJcXFwiIGhlaWdodD1cXFwiXCIgKyBvcHRpb25zLmNlbGxIZWlnaHQgKyBcIlxcXCIgdmVyc2lvbj1cXFwiMS4xXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPlwiO1xuXHRcdFx0XHRzdmcgPSBzdmcgKyBnYXRlU1ZHKDAsIDAsIGdhdGVOYW1lLCBnYXRlTmFtZSwgXCJyZWN0XCIsIGZhbHNlLCBmYWxzZSk7XG5cdFx0XHRcdHN2ZyArPSBcIjwvc3ZnPlwiO1xuXHRcdFx0XHRnYXRlTGlzdC5wdXNoKHN2Zyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGdhdGVMaXN0O1xuXHR9IGVsc2Uge1xuXHRcdHZhciBzdmcgPSBcIlwiO1xuXHRcdGlmKCFvcHRpb25zLmVtYmVkZGVkKSB7XG5cdFx0XHRzdmcgKz0gXCI8P3htbCB2ZXJzaW9uPVxcXCIxLjBcXFwiPz5cIjtcblx0XHRcdHN2ZyArPVwiPCFET0NUWVBFIHN2ZyBQVUJMSUMgXFxcIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOXFxcIiBcXFwiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkXFxcIj5cIjtcblx0XHR9XG5cblx0XHRzdmcgKz0gXCI8c3ZnIGNsYXNzPVxcXCJxYy1jaXJjdWl0XFxcIiB3aWR0aD1cXFwiXCIgKyB0b3RhbFdpZHRoICsgXCJcXFwiIGhlaWdodD1cXFwiXCIgKyB0b3RhbEhlaWdodCArIFwiXFxcIiB2ZXJzaW9uPVxcXCIxLjFcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+XCI7XG5cblx0XHRpZihvcHRpb25zLnBsYWNlaG9sZGVycykge1xuXHRcdFx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPD0gbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRcdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8PSB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHRcdFx0c3ZnICs9IGRyYXdHYXRlUGxhY2Vob2xkZXIoY29sdW1uLCB3aXJlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFF1YW50dW0gd2lyZXNcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgbnVtUm93czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgd2lyZVkgPSBxV2lyZVkod2lyZSk7XG5cdFx0XHR2YXIgaW5pdFN5bWJvbCA9IFwiMFwiO1xuXHRcdFx0aWYob3B0aW9ucy5jdXN0b21HYXRlKSB7XG5cdFx0XHRcdGluaXRTeW1ib2wgPSBxdWJpdExldHRlcih3aXJlLCBudW1Sb3dzKTtcblx0XHRcdH1cblx0XHRcdHN2ZyArPSBcIjx0ZXh0IGNsYXNzPVxcXCJxYy13aXJlLWluaXRcXFwiIHg9XFxcIjBcXFwiIHk9XFxcIlwiICsgd2lyZVkgKyBcIlxcXCIgZG9taW5hbnQtYmFzZWxpbmU9XFxcIm1pZGRsZVxcXCIgdGV4dC1hbmNob3I9XFxcInN0YXJ0XFxcIj58XCIgKyBpbml0U3ltYm9sICsgXCImI3gwMjdFOTs8L3RleHQ+XCI7XG5cdFx0XHRzdmcgKz0gXCI8bGluZSBjbGFzcz1cXFwicWMtd2lyZVxcXCIgeDE9XFxcIlwiICsgb3B0aW9ucy53aXJlTWFyZ2luICsgXCJcXFwiIHgyPVxcXCJcIiArIHRvdGFsV2lyZVdpZHRoICsgXCJcXFwiIHkxPVxcXCJcIiArIHdpcmVZICsgXCJcXFwiIHkyPVxcXCJcIiArIHdpcmVZICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyBvcHRpb25zLndpcmVDb2xvciArIFwiXFxcIiBzdHJva2Utd2lkdGg9XFxcIlwiICsgb3B0aW9ucy53aXJlV2lkdGggKyBcIlxcXCIgLz5cIjtcblx0XHRcdHN2ZyArPSBcIjx0ZXh0IGNsYXNzPVxcXCJxYy13aXJlLWxhYmVsXFxcIiB4PVxcXCJcIiArIG9wdGlvbnMud2lyZU1hcmdpbiArIFwiXFxcIiB5PVxcXCJcIiArICh3aXJlWSAtIChvcHRpb25zLndpcmVUZXh0SGVpZ2h0KjIpKSArIFwiXFxcIiBkb21pbmFudC1iYXNlbGluZT1cXFwiaGFuZ2luZ1xcXCIgdGV4dC1hbmNob3I9XFxcInN0YXJ0XFxcIiBmb250LXNpemU9XFxcIjc1JVxcXCI+cVwiICsgd2lyZSArIFwiPC90ZXh0PlwiO1xuXHRcdH1cblxuXHRcdC8vIENsYXNzaWNhbCB3aXJlc1xuXHRcdGZvcih2YXIgY3JlZ05hbWUgaW4gdGhpcy5jcmVncykge1xuXHRcdFx0dmFyIHdpcmVZID0gY1dpcmVZKGNyZWdOYW1lKTtcblx0XHRcdHN2ZyArPSBcIjx0ZXh0IGNsYXNzPVxcXCJxYy13aXJlLWluaXRcXFwiIHg9XFxcIjBcXFwiIHk9XFxcIlwiICsgd2lyZVkgKyBcIlxcXCIgZG9taW5hbnQtYmFzZWxpbmU9XFxcIm1pZGRsZVxcXCIgdGV4dC1hbmNob3I9XFxcInN0YXJ0XFxcIj4wPC90ZXh0PlwiO1xuXHRcdFx0c3ZnICs9IFwiPGxpbmUgY2xhc3M9XFxcInFjLXdpcmUtY1xcXCIgeDE9XFxcIlwiICsgb3B0aW9ucy53aXJlTWFyZ2luICsgXCJcXFwiIHgyPVxcXCJcIiArIHRvdGFsV2lyZVdpZHRoICsgXCJcXFwiIHkxPVxcXCJcIiArIHdpcmVZICsgXCJcXFwiIHkyPVxcXCJcIiArIHdpcmVZICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyBvcHRpb25zLmNXaXJlQ29sb3IgKyBcIlxcXCIgc3Ryb2tlLXdpZHRoPVxcXCJcIiArIG9wdGlvbnMud2lyZVdpZHRoICsgXCJcXFwiIC8+XCI7XG5cdFx0XHRzdmcgKz0gXCI8dGV4dCBjbGFzcz1cXFwicWMtd2lyZS1sYWJlbFxcXCIgeD1cXFwiXCIgKyBvcHRpb25zLndpcmVNYXJnaW4gKyBcIlxcXCIgeT1cXFwiXCIgKyAod2lyZVkgLSAob3B0aW9ucy53aXJlVGV4dEhlaWdodCAqIDIpKSArIFwiXFxcIiBkb21pbmFudC1iYXNlbGluZT1cXFwiaGFuZ2luZ1xcXCIgdGV4dC1hbmNob3I9XFxcInN0YXJ0XFxcIiBmb250LXNpemU9XFxcIjc1JVxcXCI+XCIgKyBjcmVnTmFtZSArIFwiPC90ZXh0PlwiO1xuXHRcdH1cblxuXHRcdC8vIEdhdGVzXG5cdFx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdFx0dmFyIGdhdGUgPSB0aGlzLmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0XHRpZihnYXRlKSB7XG5cdFx0XHRcdFx0aWYoZ2F0ZS5jb25uZWN0b3IgPT0gMCkge1xuXHRcdFx0XHRcdFx0c3ZnICs9IGRyYXdHYXRlKGdhdGUsIGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gR2F0ZSBoYW5kbGVzIChmb3IgZHJhZyAmIGRyb3AgZWRpdG9yKVxuXHRcdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHRcdHZhciBnYXRlID0gdGhpcy5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdFx0aWYoZ2F0ZSkge1xuXHRcdFx0XHRcdGlmKG9wdGlvbnMucGxhY2Vob2xkZXJzKSB7XG5cdFx0XHRcdFx0XHRzdmcgKz0gZHJhd0dhdGVIYW5kbGUoZ2F0ZSwgY29sdW1uLCB3aXJlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBQbGFjZSBmb3IgYmxvY2ggc3BoZXJlIG9uIGVhY2ggcXVhbnR1bSB3aXJlXG5cdFx0aWYob3B0aW9ucy5kcmF3QmxvY2hTcGhlcmVzKSB7XG5cdFx0XHR2YXIgY3VycmVudENvbCA9IHRvdGFsQ29scyAtIDE7XG5cdFx0XHRpZihvcHRpb25zLmRyYXdIeWJyaWQpIHtcblx0XHRcdFx0Y3VycmVudENvbCAtPSAyO1xuXHRcdFx0fVxuXHRcdFx0XG5cdFx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0XHRzdmcgKz0gZHJhd0dhdGVDYW52YXMoY3VycmVudENvbCwgd2lyZSwgXCJxYy1ibG9jaC1ncm91cFwiLCBcInFjLWJsb2NoLWNhbnZhc1wiKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBoeWJyaWQgcXVhbnR1bS1jbGFzc2ljYWxcblx0XHRpZihvcHRpb25zLmRyYXdIeWJyaWQpIHtcblx0XHRcdHZhciBjdXJyZW50Q29sID0gdG90YWxDb2xzIC0gMjtcblx0XHRcdC8vIGNvbm5lY3RvclxuXHRcdFx0dmFyIGNvbEluZGV4ID0gY3VycmVudENvbDtcblxuXHRcdFx0dmFyIGdhdGVYID0gZ2V0Q2VsbFgoY29sSW5kZXgpICsgb3B0aW9ucy5ibGFja2JveFBhZGRpbmdYO1xuXHRcdFx0dmFyIGdhdGVZID0gcUdhdGVZKDApICsgb3B0aW9ucy5ibGFja2JveFBhZGRpbmdZO1xuXHRcdFx0dmFyIGdhdGVXaWR0aCA9IG9wdGlvbnMuY2VsbFdpZHRoIC0gKDIgKiBvcHRpb25zLmJsYWNrYm94UGFkZGluZ1gpO1xuXHRcdFx0dmFyIGdhdGVIZWlnaHQgPSAoKHFHYXRlWShudW1Sb3dzICsgbnVtQ3JlZ3MgLSAxKSArIG9wdGlvbnMuY2VsbEhlaWdodCkgLSBnYXRlWSkgLSBvcHRpb25zLmJsYWNrYm94UGFkZGluZ1k7XG5cblx0XHRcdHZhciBjZW50ZXJYID0gZ2F0ZVggKyAoZ2F0ZVdpZHRoIC8gMik7XG5cdFx0XHR2YXIgY2VudGVyWSA9IGdhdGVZICsgKGdhdGVIZWlnaHQgLyAyKTtcblxuXHRcdFx0Y0xpbmtUb3BZID0gZ2F0ZVkgKyBnYXRlSGVpZ2h0O1xuXG5cdFx0XHQvLyBjb3N0XG5cdFx0XHRzdmcgKz0gXCI8cmVjdCBjbGFzcz1cXFwicWMtY29zdC1oXFxcIiB4PVxcXCJcIiArIGdhdGVYICsgXCJcXFwiIHk9XFxcIlwiICsgZ2F0ZVkgKyBcIlxcXCIgd2lkdGg9XFxcIlwiICsgZ2F0ZVdpZHRoICsgXCJcXFwiIGhlaWdodD1cXFwiXCIgKyBnYXRlSGVpZ2h0ICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyBvcHRpb25zLmhXaXJlQ29sb3IgKyBcIlxcXCIgZmlsbD1cXFwid2hpdGVcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgcng9XFxcIjhcXFwiIC8+XCI7XG5cdFx0XHRzdmcgKz0gXCI8dGV4dCBjbGFzcz1cXFwicWMtbGFiZWwtaFxcXCIgeD1cXFwiXCIgKyBjZW50ZXJYICsgXCJcXFwiIHk9XFxcIlwiICsgY2VudGVyWSArIFwiXFxcIiBkb21pbmFudC1iYXNlbGluZT1cXFwibWlkZGxlXFxcIiB0ZXh0LWFuY2hvcj1cXFwibWlkZGxlXFxcIiBmaWxsPVxcXCJcIiArIG9wdGlvbnMuaFdpcmVDb2xvciArIFwiXFxcIiB0cmFuc2Zvcm09XFxcInJvdGF0ZSgtOTAsIFwiICsgY2VudGVyWCArIFwiLCBcIiArIGNlbnRlclkgKyBcIilcXFwiPkNvc3Q8L3RleHQ+XCI7XG5cblxuXHRcdFx0dmFyIGdhdGUyWCA9IGdldENlbGxYKGNvbEluZGV4ICsgMSkgKyBvcHRpb25zLmJsYWNrYm94UGFkZGluZ1g7XG5cdFx0XHR2YXIgY2VudGVyMlggPSBnYXRlMlggKyAoZ2F0ZVdpZHRoIC8gMik7XG5cblx0XHRcdC8vIGFycm93XG5cdFx0XHRzdmcgKz0gXCI8bWFya2VyIGlkPVxcXCJxYy1hcnJvdy1oZWFkXFxcIiBvcmllbnQ9XFxcImF1dG9cXFwiIG1hcmtlcldpZHRoPVxcXCI4XFxcIiBtYXJrZXJIZWlnaHQ9XFxcIjEwXFxcIiByZWZYPVxcXCI4XFxcIiByZWZZPVxcXCI1XFxcIj48cGF0aCBkPVxcXCJNMCwwIFYxMCBMOCw1IFpcXFwiIGZpbGw9XFxcIlwiICsgb3B0aW9ucy5oV2lyZUNvbG9yICsgXCJcXFwiLz48L21hcmtlcj5cIjtcblx0XHRcdHN2ZyArPSBcIjxsaW5lIGNsYXNzPVxcXCJxYy1saW5rLWhcXFwiIHgxPVxcXCJcIiArIChnYXRlWCArIGdhdGVXaWR0aCkgKyBcIlxcXCIgeDI9XFxcIlwiICsgZ2F0ZTJYICsgXCJcXFwiIHkxPVxcXCJcIiArIGNlbnRlclkgK1wiXFxcIiB5Mj1cXFwiXCIgKyBjZW50ZXJZICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyBvcHRpb25zLmhXaXJlQ29sb3IgKyBcIlxcXCIgc3Ryb2tlLXdpZHRoPVxcXCJcIiArIG9wdGlvbnMud2lyZVdpZHRoICsgXCJcXFwiIG1hcmtlci1lbmQ9XFxcInVybCgjcWMtYXJyb3ctaGVhZClcXFwiIC8+XCI7XG5cblxuXHRcdFx0Ly8gb3B0aW1pemVyXG5cdFx0XHRzdmcgKz0gXCI8cmVjdCBjbGFzcz1cXFwicWMtb3B0aW1pemVyLWhcXFwiIHg9XFxcIlwiICsgZ2F0ZTJYICsgXCJcXFwiIHk9XFxcIlwiICsgZ2F0ZVkgKyBcIlxcXCIgd2lkdGg9XFxcIlwiICsgZ2F0ZVdpZHRoICsgXCJcXFwiIGhlaWdodD1cXFwiXCIgKyBnYXRlSGVpZ2h0ICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyBvcHRpb25zLmhXaXJlQ29sb3IgKyBcIlxcXCIgZmlsbD1cXFwid2hpdGVcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgcng9XFxcIjhcXFwiIC8+XCI7XG5cdFx0XHRzdmcgKz0gXCI8dGV4dCBjbGFzcz1cXFwicWMtbGFiZWwtaFxcXCIgeD1cXFwiXCIgKyBjZW50ZXIyWCArIFwiXFxcIiB5PVxcXCJcIiArIGNlbnRlclkgKyBcIlxcXCIgZG9taW5hbnQtYmFzZWxpbmU9XFxcIm1pZGRsZVxcXCIgdGV4dC1hbmNob3I9XFxcIm1pZGRsZVxcXCIgZmlsbD1cXFwiXCIgKyBvcHRpb25zLmhXaXJlQ29sb3IgKyBcIlxcXCIgdHJhbnNmb3JtPVxcXCJyb3RhdGUoLTkwLCBcIiArIGNlbnRlcjJYICsgXCIsIFwiICsgY2VudGVyWSArIFwiKVxcXCI+T3B0aW1pemVyPC90ZXh0PlwiO1xuXG5cdFx0XHQvLyBsaW5rXG5cdFx0XHR2YXIgbGlua1ggPSBjZW50ZXIyWDtcblx0XHRcdHZhciBsaW5rWTEgPSBjTGlua1RvcFk7XG5cdFx0XHR2YXIgbGlua1kyID0gaHlicmlkV2lyZVk7XG5cdFx0XHRzdmcgKz0gXCI8bGluZSBjbGFzcz1cXFwicWMtd2lyZS1oXFxcIiB4MT1cXFwiXCIgKyBsaW5rWCArIFwiXFxcIiB4Mj1cXFwiXCIgKyBsaW5rWCArIFwiXFxcIiB5MT1cXFwiXCIgKyBsaW5rWTEgK1wiXFxcIiB5Mj1cXFwiXCIgKyBsaW5rWTIgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIG9wdGlvbnMuaFdpcmVDb2xvciArIFwiXFxcIiBzdHJva2UtZGFzaGFycmF5PVxcXCI0XFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cblx0XHRcdC8vIENvbm5lY3QgYWxsIGdsb2JhbGx5IHBhcmFtZXRyaXplZCBnYXRlc1xuXHRcdFx0dmFyIGhXaXJlWCA9IDA7XG5cdFx0XHR2YXIgZ2xvYmFsUGFyYW1zSW5mbyA9IHRoaXMuZmluZEdsb2JhbFBhcmFtcygpO1xuXHRcdFx0aWYoZ2xvYmFsUGFyYW1zSW5mby5nbG9iYWxQYXJhbXMubGVuZ3RoKSB7XG5cdFx0XHRcdGhXaXJlWCA9IGdldENlbGxYKGdsb2JhbFBhcmFtc0luZm8uY2VsbHNbMF1bMF0pICsgb3B0aW9ucy5jZWxsV2lkdGggKyAob3B0aW9ucy5oU3BhY2luZyAvIDIpO1xuXHRcdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgZ2xvYmFsUGFyYW1zSW5mby5jZWxscy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdHZhciBjZWxsID0gZ2xvYmFsUGFyYW1zSW5mby5jZWxsc1tpXTtcblxuXHRcdFx0XHRcdHZhciBsaW5rMlggPSBnZXRDZWxsWChjZWxsWzBdKSArIG9wdGlvbnMuY2VsbFdpZHRoICsgKG9wdGlvbnMuaFNwYWNpbmcgLyAyKTtcblx0XHRcdFx0XHR2YXIgbGluazJZMiA9IGdldENlbGxZKGNlbGxbMV0pICsgb3B0aW9ucy5jZWxsSGVpZ2h0ICsgb3B0aW9ucy52U3BhY2luZyAtIChvcHRpb25zLnBhcmFtVGV4dEhlaWdodCAvIDIpO1xuXHRcdFx0XHRcdHZhciBsaW5rMlkxID0gaHlicmlkV2lyZVk7XG5cdFx0XHRcdFx0dmFyIGNlbGxCb3R0b21SaWdodFggPSBnZXRDZWxsWChjZWxsWzBdKSArIG9wdGlvbnMuY2VsbFdpZHRoO1xuXHRcdFx0XHRcdHZhciBjZWxsQm90dG9tUmlnaHRZID0gZ2V0Q2VsbFkoY2VsbFsxXSkgKyBvcHRpb25zLmNlbGxIZWlnaHQgKyAob3B0aW9ucy5wYXJhbVRleHRIZWlnaHQgKiAyKSArIDQ7XG5cdFx0XHRcdFx0c3ZnICs9IFwiPGxpbmUgY2xhc3M9XFxcInFjLXdpcmUtaFxcXCIgeDE9XFxcIlwiICsgbGluazJYICsgXCJcXFwiIHgyPVxcXCJcIiArIGxpbmsyWCArIFwiXFxcIiB5MT1cXFwiXCIgKyBsaW5rMlkxICtcIlxcXCIgeTI9XFxcIlwiICsgbGluazJZMiArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgb3B0aW9ucy5oV2lyZUNvbG9yICsgXCJcXFwiIHN0cm9rZS1kYXNoYXJyYXk9XFxcIjRcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblx0XHRcdFx0XHRzdmcgKz0gXCI8bGluZSBjbGFzcz1cXFwicWMtd2lyZS1oXFxcIiB4MT1cXFwiXCIgKyBsaW5rMlggKyBcIlxcXCIgeDI9XFxcIlwiICsgY2VsbEJvdHRvbVJpZ2h0WCArIFwiXFxcIiB5MT1cXFwiXCIgKyBsaW5rMlkyICtcIlxcXCIgeTI9XFxcIlwiICsgY2VsbEJvdHRvbVJpZ2h0WSArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgb3B0aW9ucy5oV2lyZUNvbG9yICsgXCJcXFwiIHN0cm9rZS1kYXNoYXJyYXk9XFxcIjRcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgbWFya2VyLWVuZD1cXFwidXJsKCNxYy1hcnJvdy1oZWFkKVxcXCIgLz5cIjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhciB3aXJlWSA9IGh5YnJpZFdpcmVZO1xuXHRcdFx0XHRzdmcgKz0gXCI8bGluZSBjbGFzcz1cXFwicWMtd2lyZS1oXFxcIiB4MT1cXFwiXCIgKyBoV2lyZVggKyBcIlxcXCIgeDI9XFxcIlwiICsgY2VudGVyMlggKyBcIlxcXCIgeTE9XFxcIlwiICsgd2lyZVkgKyBcIlxcXCIgeTI9XFxcIlwiICsgd2lyZVkgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIG9wdGlvbnMuaFdpcmVDb2xvciArIFwiXFxcIiBzdHJva2UtZGFzaGFycmF5PVxcXCI0XFxcIiBzdHJva2Utd2lkdGg9XFxcIlwiICsgb3B0aW9ucy53aXJlV2lkdGggKyBcIlxcXCIgLz5cIjtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gTm8gZ2F0ZXMgd2l0aCBnbG9iYWwgcGFyYW1zXG5cdFx0XHRcdGhXaXJlWCA9IGdldENlbGxYKHRvdGFsV2lyZUNvbHMpO1xuXG5cdFx0XHRcdHZhciB3aXJlWSA9IGh5YnJpZFdpcmVZO1xuXHRcdFx0XHRzdmcgKz0gXCI8bGluZSBjbGFzcz1cXFwicWMtd2lyZS1oXFxcIiB4MT1cXFwiXCIgKyBjZW50ZXIyWCArIFwiXFxcIiB4Mj1cXFwiXCIgKyBoV2lyZVggKyBcIlxcXCIgeTE9XFxcIlwiICsgd2lyZVkgKyBcIlxcXCIgeTI9XFxcIlwiICsgd2lyZVkgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIG9wdGlvbnMuaFdpcmVDb2xvciArIFwiXFxcIiBzdHJva2UtZGFzaGFycmF5PVxcXCI0XFxcIiBzdHJva2Utd2lkdGg9XFxcIlwiICsgb3B0aW9ucy53aXJlV2lkdGggKyBcIlxcXCIgIG1hcmtlci1lbmQ9XFxcInVybCgjcWMtYXJyb3ctaGVhZClcXFwiIC8+XCI7XG5cdFx0XHRcdHN2ZyArPSBcIjx0ZXh0IGNsYXNzPVxcXCJxYy13YXJuaW5nLWhcXFwiIHg9XFxcIlwiICsgKGhXaXJlWCAtIDUpICsgXCJcXFwiIHk9XFxcIlwiICsgd2lyZVkgKyBcIlxcXCIgZG9taW5hbnQtYmFzZWxpbmU9XFxcIm1pZGRsZVxcXCIgdGV4dC1hbmNob3I9XFxcImVuZFxcXCI+PzwvdGV4dD5cIjtcblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHN2ZyArPSBcIjwvc3ZnPlwiO1xuXHR9XG5cblx0cmV0dXJuIHN2Zztcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRUb1Fpc2tpdCA9IGZ1bmN0aW9uKG9wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUsIGNpcmN1aXRSZXBsYWNlbWVudCwgaW5zaWRlU3VibW9kdWxlKSB7XG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdHZhciBjb21tZW50ID0gb3B0aW9ucy5jb21tZW50O1xuXHR2YXIgZGVjb21wb3NlID0gb3B0aW9ucy5kZWNvbXBvc2U7XG5cdHZhciB2ZXJzaW9uU3RyID0gb3B0aW9ucy52ZXJzaW9uU3RyO1xuXHR2YXIgcHJvdmlkZXJOYW1lID0gb3B0aW9ucy5wcm92aWRlck5hbWU7XG5cdHZhciBiYWNrZW5kTmFtZSA9IG9wdGlvbnMuYmFja2VuZE5hbWU7XG5cdHZhciBhc0p1cHl0ZXIgPSBvcHRpb25zLmFzSnVweXRlcjtcblx0dmFyIHNob3RzID0gb3B0aW9ucy5zaG90cztcblx0dmFyIGh5YnJpZCA9IG9wdGlvbnMuaHlicmlkO1xuXG5cdHZhciBzZWxmID0gdGhpcztcblxuXHRwcm92aWRlck5hbWUgPSBwcm92aWRlck5hbWUgfHwgXCJBZXJcIjtcblxuXHRiYWNrZW5kTmFtZSA9IGJhY2tlbmROYW1lIHx8IFwiXCI7XG5cdGlmKCFiYWNrZW5kTmFtZSAmJiBwcm92aWRlck5hbWUgPT0gXCJBZXJcIikge1xuXHRcdGJhY2tlbmROYW1lID0gXCJxYXNtX3NpbXVsYXRvclwiO1xuXHR9XG5cblx0c2hvdHMgPSBzaG90cyB8fCAxMDI0O1xuXG5cdHZhciB2ZXJzaW9uID0gcGFyc2VGbG9hdCh2ZXJzaW9uU3RyIHx8IFwiMC43XCIpO1xuXHRpZihpc05hTih2ZXJzaW9uKSkge1xuXHRcdHZlcnNpb24gPSAwLjc7XG5cdH1cblxuXHRpZih0eXBlb2YgaHlicmlkID09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRoeWJyaWQgPSB0aGlzLm9wdGlvbnMgPyAhIXRoaXMub3B0aW9ucy5oeWJyaWQgOiBmYWxzZTtcblx0fVxuXG5cdC8vIGRlY29tcG9zZSA/XG5cdHZhciBjaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdGNpcmN1aXQubG9hZCh0aGlzLnNhdmUoZGVjb21wb3NlKSk7XG5cblx0dmFyIHFpc2tpdCA9IFwiXCI7XG5cblx0Ly8gY29tbWVudFxuXHRpZihjb21tZW50KSB7XG5cdFx0dmFyIGNvbW0gPSAoY29tbWVudCB8fCBcIlwiKS5zcGxpdChcIlxcblwiKTtcblx0XHRjb21tLm1hcChmdW5jdGlvbihjbGluZSkge1xuXHRcdFx0aWYoY2xpbmUubGVuZ3RoID49IDEgJiYgY2xpbmVbMF0gIT0gXCIjXCIpIHtcblx0XHRcdFx0cWlza2l0ICs9IFwiIyBcIjtcblx0XHRcdH1cblx0XHRcdHFpc2tpdCArPSBjbGluZTtcblx0XHRcdHFpc2tpdCArPSBcIlxcblwiO1xuXHRcdH0pO1xuXHR9XG5cblx0dmFyIG1hdGhUb1N0cmluZ0hhbmRsZXIgPSBmdW5jdGlvbihub2RlLCBvcHRpb25zKSB7XG5cdFx0aWYobm9kZS5pc1N5bWJvbE5vZGUpIHtcblx0XHRcdHZhciBudW1weXMgPSBbXCJwaVwiLCBcInNpblwiLCBcImNvc1wiLCBcInRhblwiLCBcImFzaW5cIiwgXCJhY29zXCIsIFwiYXRhblwiXTtcblx0XHRcdGlmKG51bXB5cy5pbmRleE9mKG5vZGUubmFtZSkgPj0gMCkge1xuXHRcdFx0XHRyZXR1cm4gXCJucC5cIiArIG5vZGUubmFtZTtcblx0XHRcdH1cblxuXHRcdFx0aWYoc2VsZi5wYXJhbXMuaW5kZXhPZihub2RlLm5hbWUpID49IDAgJiYgaHlicmlkKSB7XG5cdFx0XHRcdHJldHVybiBcInBhcmFtc1tcIiArIHNlbGYucGFyYW1zLmluZGV4T2Yobm9kZS5uYW1lKSArIFwiXVwiO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHR2YXIgYWRqdXN0SWRlbnRhdGlvbiA9IGZ1bmN0aW9uKGFkZFN0ciwgaWRlbnQpIHtcblx0XHR2YXIgc3RyID0gXCJcIjtcblxuXHRcdC8vIGFkZCB1c2VyIGRlZmluZWQgY29zdCBmdW5jdGlvbiB3aXRoIHByb3BlciBpZGVudGF0aW9uXG5cdFx0dmFyIGNmTGluZXMgPSBhZGRTdHIuc3BsaXQoXCJcXG5cIik7XG5cdFx0dmFyIG1pbklkZW50ID0gLTE7XG5cdFx0Y2ZMaW5lcy5tYXAoZnVuY3Rpb24oY2ZMaW5lKSB7XG5cdFx0XHR2YXIgdG1wSWRlbnQgPSBjZkxpbmUuc2VhcmNoKC9cXFMvKTtcblx0XHRcdGlmKHRtcElkZW50ID49IDAgJiYgKG1pbklkZW50IDwgMCB8fCB0bXBJZGVudCA8IG1pbklkZW50KSkge1xuXHRcdFx0XHRtaW5JZGVudCA9IHRtcElkZW50O1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0aWYobWluSWRlbnQgPCAwKSB7XG5cdFx0XHRtaW5JZGVudCA9IDA7XG5cdFx0fVxuXG5cdFx0dmFyIGFkZElkZW50ID0gXCJcIjtcblx0XHRpZihtaW5JZGVudCA8IGlkZW50Lmxlbmd0aCkge1xuXHRcdFx0Zm9yKHZhciB0bXAgPSAwOyB0bXAgPCAoaWRlbnQubGVuZ3RoIC0gbWluSWRlbnQpOyB0bXArKykge1xuXHRcdFx0XHRhZGRJZGVudCArPSBcIiBcIjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjZkxpbmVzLm1hcChmdW5jdGlvbihjZkxpbmUpIHtcblx0XHRcdHN0ciArPSBhZGRJZGVudCArIGNmTGluZSArIFwiXFxuXCI7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gc3RyO1xuXHR9O1xuXG5cdGlmKGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRxaXNraXQgKz0gXCJkZWYgXCIgKyBleHBvcnRBc0dhdGVOYW1lICsgXCIocWNcIjtcblxuXHRcdHZhciBhcmdjID0gMDtcblx0XHRpZihjaXJjdWl0LnBhcmFtcyAmJiBjaXJjdWl0LnBhcmFtcy5sZW5ndGgpIHtcblx0XHRcdGZvcih2YXIgcGMgPSAwOyBwYyA8IGNpcmN1aXQucGFyYW1zLmxlbmd0aDsgcGMrKykge1xuXHRcdFx0XHRxaXNraXQgKz0gXCIsIFwiO1xuXHRcdFx0XHRhcmdjKys7XG5cdFx0XHRcdHFpc2tpdCArPSBjaXJjdWl0LnBhcmFtc1twY107XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNpcmN1aXQubnVtUXViaXRzOyBpKyspIHtcblx0XHRcdHFpc2tpdCArPSBcIiwgXCI7XG5cdFx0XHRhcmdjKys7XG5cdFx0XHRxaXNraXQgKz0gcXViaXRMZXR0ZXIoaSwgY2lyY3VpdC5udW1RdWJpdHMpO1xuXHRcdH1cblx0XHRxaXNraXQgKz0gXCIpOlxcblwiO1xuXHR9IGVsc2Uge1xuXHRcdGlmKCFjaXJjdWl0UmVwbGFjZW1lbnQpIHtcblx0XHRcdHFpc2tpdCArPSBcImZyb20gcWlza2l0IGltcG9ydCBRdWFudHVtUmVnaXN0ZXIsIENsYXNzaWNhbFJlZ2lzdGVyXFxuXCI7XG5cdFx0XHRxaXNraXQgKz0gXCJmcm9tIHFpc2tpdCBpbXBvcnQgUXVhbnR1bUNpcmN1aXQsIGV4ZWN1dGUsIFwiICsgcHJvdmlkZXJOYW1lICsgXCJcXG5cIjtcblxuXHRcdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRcdHFpc2tpdCArPSBcImZyb20gc2NpcHkub3B0aW1pemUgaW1wb3J0IG1pbmltaXplXFxuXCI7XG5cdFx0XHRcdHFpc2tpdCArPSBcImZyb20gY29sbGVjdGlvbnMgaW1wb3J0IENvdW50ZXJcXG5cIjtcblx0XHRcdH1cblxuXHRcdFx0cWlza2l0ICs9IFwiaW1wb3J0IG51bXB5IGFzIG5wXFxuXCI7XG5cdFx0XHRxaXNraXQgKz0gXCJcXG5cIjtcblxuXHRcdFx0aWYoc2hvdHMpIHtcblx0XHRcdFx0cWlza2l0ICs9IFwic2hvdHMgPSBcIiArIHNob3RzICsgXCJcXG5cIjtcblx0XHRcdFx0cWlza2l0ICs9IFwiXFxuXCI7XG5cdFx0XHR9XG5cblx0XHRcdHZhciBnbG9iYWxQYXJhbXMgPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLnBhcmFtcyA/IHRoaXMub3B0aW9ucy5wYXJhbXMgOiB7fTtcblx0XHRcdGlmKHRoaXMucGFyYW1zLmxlbmd0aCkge1xuXHRcdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXJhbXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHR2YXIgZ2xvYmFsUGFyYW1OYW1lID0gdGhpcy5wYXJhbXNbaV07XG5cblx0XHRcdFx0XHR2YXIgbm9kZSA9IG1hdGgucGFyc2UoZ2xvYmFsUGFyYW1zW2dsb2JhbFBhcmFtTmFtZV0pO1xuXHRcdFx0XHRcdHZhciBnbG9iYWxQYXJhbVZhbHVlID0gbm9kZS50b1N0cmluZyh7IGhhbmRsZXI6IG1hdGhUb1N0cmluZ0hhbmRsZXIgfSk7XG5cblx0XHRcdFx0XHRxaXNraXQgKz0gZ2xvYmFsUGFyYW1OYW1lICsgXCIgPSBcIiArIGdsb2JhbFBhcmFtVmFsdWUgKyBcIlxcblwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHFpc2tpdCArPSBcIlxcblwiO1xuXHRcdFx0fVxuXG5cdFx0XHRpZihoeWJyaWQpIHtcblx0XHRcdFx0cWlza2l0ICs9IFwidG9sZXJhbmNlID0gXCIgKyAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLnRvbGVyYW5jZSA/IHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLnRvbGVyYW5jZSB8fCBcIjAuMDAxXCIgOiBcIjAuMDAxXCIpICsgXCJcXG5cIjtcblx0XHRcdFx0cWlza2l0ICs9IFwiXFxuXCI7XG5cdFx0XHR9XG5cblx0XHRcdHZhciB1c2VkR2F0ZXMgPSBjaXJjdWl0LnVzZWRHYXRlcygpO1xuXHRcdFx0aWYoIWRlY29tcG9zZSkge1xuXHRcdFx0XHR1c2VkR2F0ZXMubWFwKGZ1bmN0aW9uKHVzZWRHYXRlTmFtZSkge1xuXHRcdFx0XHRcdHZhciBiYXNpY0dhdGUgPSBjaXJjdWl0LmJhc2ljR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRcdFx0XHRpZighYmFzaWNHYXRlKSB7XG5cdFx0XHRcdFx0XHR2YXIgY3VzdG9tR2F0ZSA9IHNlbGYuY3VzdG9tR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRcdFx0XHRcdGlmKGN1c3RvbUdhdGUpIHtcblx0XHRcdFx0XHRcdFx0dmFyIGN1c3RvbUNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0XHRcdFx0XHRcdFx0Y3VzdG9tQ2lyY3VpdC5sb2FkKGN1c3RvbUdhdGUpO1xuXHRcdFx0XHRcdFx0XHR2YXIgbmV3T3B0aW9ucyA9IHtcblx0XHRcdFx0XHRcdFx0XHRjb21tZW50OiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdGRlY29tcG9zZTogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0XHR2ZXJzaW9uU3RyOiB2ZXJzaW9uU3RyLFxuXHRcdFx0XHRcdFx0XHRcdHByb3ZpZGVyTmFtZTogXCJcIixcblx0XHRcdFx0XHRcdFx0XHRiYWNrZW5kTmFtZTogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0YXNKdXB5dGVyOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRzaG90czogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0aHlicmlkOiBudWxsXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdHFpc2tpdCArPSBjdXN0b21DaXJjdWl0LmV4cG9ydFRvUWlza2l0KG5ld09wdGlvbnMsIHVzZWRHYXRlTmFtZSwgY2lyY3VpdFJlcGxhY2VtZW50LCBpbnNpZGVTdWJtb2R1bGUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdHZhciBpZGVudGF0aW9uID0gXCJcIjtcblx0XHRcdGlmKGh5YnJpZCkge1xuXHRcdFx0XHRpZGVudGF0aW9uID0gXCIgIFwiO1xuXG5cdFx0XHRcdHFpc2tpdCArPSBcImRlZiBvYmplY3RpdmVfZnVuY3Rpb24ocGFyYW1zKTpcXG5cIlxuXHRcdFx0fVxuXG5cdFx0XHRxaXNraXQgKz0gaWRlbnRhdGlvbiArIFwicWMgPSBRdWFudHVtQ2lyY3VpdCgpXFxuXCI7XG5cdFx0XHRxaXNraXQgKz0gXCJcXG5cIjtcblxuXHRcdFx0cWlza2l0ICs9IGlkZW50YXRpb24gKyBcInEgPSBRdWFudHVtUmVnaXN0ZXIoXCIgKyBjaXJjdWl0Lm51bVF1Yml0cyArIFwiLCAncScpXFxuXCI7XG5cdFx0XHRmb3IodmFyIGNyZWdOYW1lIGluIHRoaXMuY3JlZ3MpIHtcblx0XHRcdFx0cWlza2l0ICs9IGlkZW50YXRpb24gKyBjcmVnTmFtZSArIFwiID0gQ2xhc3NpY2FsUmVnaXN0ZXIoXCIgKyAodGhpcy5jcmVnc1tjcmVnTmFtZV0ubGVuZ3RoIHx8IDEpICsgXCIsICdcIiArIGNyZWdOYW1lICsgXCInKVxcblwiO1xuXHRcdFx0fVxuXHRcdFx0cWlza2l0ICs9IFwiXFxuXCI7XG5cblx0XHRcdHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCJxYy5hZGRfcmVnaXN0ZXIocSlcXG5cIjtcblx0XHRcdGZvcih2YXIgY3JlZ05hbWUgaW4gdGhpcy5jcmVncykge1xuXHRcdFx0XHRxaXNraXQgKz0gaWRlbnRhdGlvbiArIFwicWMuYWRkX3JlZ2lzdGVyKFwiICsgY3JlZ05hbWUgKyBcIilcXG5cIjtcblx0XHRcdH1cblx0XHRcdHFpc2tpdCArPSBcIlxcblwiO1xuXHRcdH1cblx0fVxuXG5cdHZhciBudW1Db2xzID0gY2lyY3VpdC5udW1Db2xzKCk7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSBjaXJjdWl0LmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1x0XG5cdFx0XHR2YXIgcWlza2l0UmVwbGFjZW1lbnQgPSBudWxsO1xuXHRcdFx0dmFyIHFpc2tpdEVxdWl2YWxlbnQgPSBudWxsO1xuXHRcdFx0dmFyIHFpc2tpdENvbmRpdGlvbiA9IG51bGw7XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0XG5cdFx0XHRcdHFpc2tpdENvbmRpdGlvbiA9IGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZyA/IGdhdGUub3B0aW9ucy5jb25kaXRpb24gOiBudWxsO1xuXG5cdFx0XHRcdHZhciBnYXRlRGVmID0gY2lyY3VpdC5nZXRHYXRlRGVmKGdhdGUubmFtZSk7XG5cdFx0XHRcdGlmKGdhdGVEZWYpe1xuXHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mbykge1xuXHRcdFx0XHRcdFx0aWYoZ2F0ZURlZi5leHBvcnRJbmZvLnFpc2tpdCAmJiBnYXRlRGVmLmV4cG9ydEluZm8ucWlza2l0LnJlcGxhY2VtZW50KXtcblx0XHRcdFx0XHRcdFx0cWlza2l0UmVwbGFjZW1lbnQgPSBnYXRlRGVmLmV4cG9ydEluZm8ucWlza2l0LnJlcGxhY2VtZW50O1xuXHRcdFx0XHRcdFx0XHRxaXNraXRSZXBsYWNlbWVudC5tYXAoZnVuY3Rpb24ocmVwbGFjZW1lbnQpe1xuXHRcdFx0XHRcdFx0XHRcdHZhciByZXBsYWNlbWVudENpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0XHRcdFx0XHRcdFx0XHRpZihnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLnBhcmFtcyl7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1zID0gT2JqZWN0LmtleXMoZ2F0ZS5vcHRpb25zLnBhcmFtcyk7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcmVwbGFjZW1lbnRQYXJhbXMgPSBPYmplY3Qua2V5cyhyZXBsYWNlbWVudC5wYXJhbXMpO1xuXHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1zLm1hcChmdW5jdGlvbihwYXJhbSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKHJlcGxhY2VtZW50UGFyYW1zLmluZGV4T2YocGFyYW0pID4gLTEpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlcGxhY2VtZW50LnBhcmFtc1twYXJhbV0gPSBnYXRlLm9wdGlvbnMucGFyYW1zW3BhcmFtXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0fVx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0cmVwbGFjZW1lbnRDaXJjdWl0LmFkZEdhdGUocmVwbGFjZW1lbnQubmFtZSwgY29sdW1uLCBnYXRlLndpcmVzLCB7cGFyYW1zOiByZXBsYWNlbWVudC5wYXJhbXMsIGNvbmRpdGlvbjogcWlza2l0Q29uZGl0aW9ufSk7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIG5ld09wdGlvbnMgPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb21tZW50OiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGVjb21wb3NlOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdHZlcnNpb25TdHI6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdFx0cHJvdmlkZXJOYW1lOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdGJhY2tlbmROYW1lOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdGFzSnVweXRlcjogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0XHRzaG90czogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0XHRoeWJyaWQ6IG51bGxcblx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRcdHFpc2tpdCArPSByZXBsYWNlbWVudENpcmN1aXQuZXhwb3J0VG9RaXNraXQobmV3T3B0aW9ucywgZmFsc2UsIHRydWUsICEhZXhwb3J0QXNHYXRlTmFtZSB8fCBpbnNpZGVTdWJtb2R1bGUpO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZihnYXRlRGVmLmV4cG9ydEluZm8ucWlza2l0ICYmIGdhdGVEZWYuZXhwb3J0SW5mby5xaXNraXQuZXF1aXZhbGVudCl7XG5cdFx0XHRcdFx0XHRcdHFpc2tpdEVxdWl2YWxlbnQgPSBnYXRlRGVmLmV4cG9ydEluZm8ucWlza2l0LmVxdWl2YWxlbnQ7XG5cdFx0XHRcdFx0XHRcdHFpc2tpdEVxdWl2YWxlbnQubWFwKGZ1bmN0aW9uKGVxdWl2YWxlbnQpe1xuXHRcdFx0XHRcdFx0XHRcdHZhciBlcXVpdmFsZW50Q2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRcdFx0XHRcdFx0XHRcdHZhciBnYXRlV2lyZXMgPSBlcXVpdmFsZW50LndpcmVzLmxlbmd0aCA+IDEgPyBnYXRlLndpcmVzIDogZ2F0ZS53aXJlc1tlcXVpdmFsZW50LndpcmVzWzBdXTtcblx0XHRcdFx0XHRcdFx0XHR2YXIgZXFQYXJhbXMgPSB7fTtcblx0XHRcdFx0XHRcdFx0XHRpZihlcXVpdmFsZW50LnBhcmFtcykge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGdhdGVQYXJhbXMgPSB7fTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgZ2F0ZVBhcmFtTmFtZSBpbiBnYXRlLm9wdGlvbnMucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Z2F0ZVBhcmFtc1tnYXRlUGFyYW1OYW1lXSA9IG1hdGguZXZhbHVhdGUoZ2F0ZS5vcHRpb25zLnBhcmFtc1tnYXRlUGFyYW1OYW1lXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBlcVBhcmFtTmFtZSBpbiBlcXVpdmFsZW50LnBhcmFtcykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRlcVBhcmFtc1tlcVBhcmFtTmFtZV0gPSBtYXRoLmV2YWx1YXRlKGVxdWl2YWxlbnQucGFyYW1zW2VxUGFyYW1OYW1lXSwgZ2F0ZVBhcmFtcyk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0ZXF1aXZhbGVudENpcmN1aXQuYWRkR2F0ZShlcXVpdmFsZW50Lm5hbWUsIGNvbHVtbiwgZ2F0ZVdpcmVzLCB7IHBhcmFtczogZXFQYXJhbXMsIGNvbmRpdGlvbjogcWlza2l0Q29uZGl0aW9uIH0pO1xuXHRcdFx0XHRcdFx0XHRcdHZhciBuZXdPcHRpb25zID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29tbWVudDogXCJcIixcblx0XHRcdFx0XHRcdFx0XHRcdGRlY29tcG9zZTogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0XHR2ZXJzaW9uU3RyOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdHByb3ZpZGVyTmFtZTogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0XHRiYWNrZW5kTmFtZTogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0XHRhc0p1cHl0ZXI6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdFx0c2hvdHM6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdFx0aHlicmlkOiBudWxsXG5cdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0XHRxaXNraXQgKz0gZXF1aXZhbGVudENpcmN1aXQuZXhwb3J0VG9RaXNraXQobmV3T3B0aW9ucywgZmFsc2UsIHRydWUsICEhZXhwb3J0QXNHYXRlTmFtZSB8fCBpbnNpZGVTdWJtb2R1bGUpO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZighcWlza2l0UmVwbGFjZW1lbnQgJiYgIXFpc2tpdEVxdWl2YWxlbnQpIHtcblx0XHRcdFx0XHRpZihleHBvcnRBc0dhdGVOYW1lIHx8IGluc2lkZVN1Ym1vZHVsZSB8fCBoeWJyaWQpIHtcblx0XHRcdFx0XHRcdHFpc2tpdCArPSBcIiAgXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYoIXFpc2tpdFJlcGxhY2VtZW50ICYmICFxaXNraXRFcXVpdmFsZW50KSB7XG5cblx0XHRcdFx0XHR2YXIgZ2F0ZU5hbWUgPSBnYXRlLm5hbWU7XG5cblx0XHRcdFx0XHR2YXIgZ2F0ZVBhcmFtcyA9IGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMucGFyYW1zID8gZ2F0ZS5vcHRpb25zLnBhcmFtcyA6IHt9O1xuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdGlmKHRoaXMuYmFzaWNHYXRlc1tnYXRlTmFtZV0pIHtcblx0XHRcdFx0XHRcdHFpc2tpdCArPSBcInFjLlwiO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcblx0XHRcdFx0XHRpZihnYXRlRGVmICYmIGdhdGVEZWYuZXhwb3J0SW5mbyAmJiBnYXRlRGVmLmV4cG9ydEluZm8ucWlza2l0ICYmIGdhdGVEZWYuZXhwb3J0SW5mby5xaXNraXQubmFtZSl7XG5cdFx0XHRcdFx0XHRnYXRlTmFtZSA9IGdhdGVEZWYuZXhwb3J0SW5mby5xaXNraXQubmFtZTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Z2F0ZU5hbWUgPSBnYXRlLm5hbWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdHFpc2tpdCArPSBnYXRlTmFtZSArIFwiKFwiO1xuXG5cdFx0XHRcdFx0dmFyIGFyZ0NvdW50ID0gMDtcblx0XHRcdFx0XHRpZihnYXRlUGFyYW1zKSB7XG5cdFx0XHRcdFx0XHR2YXIgZ2F0ZURlZiA9IHRoaXMuYmFzaWNHYXRlc1tnYXRlLm5hbWVdO1xuXHRcdFx0XHRcdFx0aWYoIWdhdGVEZWYpIHtcblx0XHRcdFx0XHRcdFx0Z2F0ZURlZiA9IHRoaXMuY3VzdG9tR2F0ZXNbZ2F0ZS5uYW1lXTtcblxuXHRcdFx0XHRcdFx0XHRxaXNraXQgKz0gXCJxY1wiO1xuXHRcdFx0XHRcdFx0XHRhcmdDb3VudCsrO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZihnYXRlRGVmKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBwYXJhbURlZiA9IGdhdGVEZWYucGFyYW1zIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1Db3VudCA9IHBhcmFtRGVmLmxlbmd0aDtcblx0XHRcdFx0XHRcdFx0aWYocGFyYW1Db3VudCkge1xuXHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgcCA9IDA7IHAgPCBwYXJhbUNvdW50OyBwKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGFyZ0NvdW50ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRxaXNraXQgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtTmFtZSA9IHBhcmFtRGVmW3BdO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHRcdFx0XHRcdC8vIHByZXBlbmQgJ25wJyB0byBtYXRoIGNvbnN0YW50c1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoZ2F0ZVBhcmFtc1twYXJhbU5hbWVdIHx8IGdhdGVQYXJhbXNbcGFyYW1OYW1lXS50b1N0cmluZygpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnYXRlUGFyYW1zW3BhcmFtTmFtZV0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRxaXNraXQgKz0gbm9kZS50b1N0cmluZyh7IGhhbmRsZXI6IG1hdGhUb1N0cmluZ0hhbmRsZXIgfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyAtLS1cblxuXHRcdFx0XHRcdFx0XHRcdFx0YXJnQ291bnQrKztcblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRpZihnYXRlTmFtZSA9PSBcImN1XCIgJiYgIWdhdGVQYXJhbXNbXCJnYW1tYVwiXSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cWlza2l0ICs9IFwiLCAwXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRhcmdDb3VudCsrO1xuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Zm9yKHZhciB3ID0gMDsgdyA8IGdhdGUud2lyZXMubGVuZ3RoOyB3KyspIHtcblx0XHRcdFx0XHRcdGlmKGFyZ0NvdW50ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRxaXNraXQgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYoZXhwb3J0QXNHYXRlTmFtZSB8fCBpbnNpZGVTdWJtb2R1bGUpIHtcblx0XHRcdFx0XHRcdFx0cWlza2l0ICs9IHF1Yml0TGV0dGVyKGdhdGUud2lyZXNbd10sIGNpcmN1aXQubnVtUXViaXRzKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHFpc2tpdCArPSBcInFbXCIgKyBnYXRlLndpcmVzW3ddICsgXCJdXCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRhcmdDb3VudCsrO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKGdhdGVOYW1lID09IFwibWVhc3VyZVwiICYmIGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY3JlZykge1xuXHRcdFx0XHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdHFpc2tpdCArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHFpc2tpdCArPSBnYXRlLm9wdGlvbnMuY3JlZy5uYW1lICsgXCJbXCIgKyBnYXRlLm9wdGlvbnMuY3JlZy5iaXQgKyBcIl1cIjtcblx0XHRcdFx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cWlza2l0ICs9IFwiKVwiO1x0XHRcdFx0XHRcblxuXHRcdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZykge1xuXHRcdFx0XHRcdFx0cWlza2l0ICs9IFwiLmNfaWYoXCIgKyBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcgKyBcIiwgXCIgKyBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLnZhbHVlICsgXCIpXCI7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cWlza2l0ICs9IFwiXFxuXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZighY2lyY3VpdFJlcGxhY2VtZW50KSB7XG5cdFx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdFx0cWlza2l0ICs9IFwiXFxuXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHFpc2tpdCArPSBcIlxcblwiO1xuXG5cdFx0XHR2YXIgaWRlbnRhdGlvbiA9IFwiXCI7XG5cdFx0XHRpZihoeWJyaWQpIHtcblx0XHRcdFx0aWRlbnRhdGlvbiA9IFwiICBcIjtcblx0XHRcdH1cblxuXHRcdFx0aWYocHJvdmlkZXJOYW1lID09IFwiQWVyXCIpIHtcblx0XHRcdFx0cWlza2l0ICs9IGlkZW50YXRpb24gKyBcImJhY2tlbmQgPSBBZXIuZ2V0X2JhY2tlbmQoJ1wiICsgYmFja2VuZE5hbWUgKyBcIicpXFxuXCI7XG5cdFx0XHRcdHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCJqb2IgPSBleGVjdXRlKHFjLCBiYWNrZW5kPWJhY2tlbmRcIjtcblx0XHRcdFx0aWYoc2hvdHMpIHtcblx0XHRcdFx0XHRxaXNraXQgKz0gXCIsIHNob3RzPXNob3RzXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0cWlza2l0ICs9IFwiKVxcblwiO1xuXHRcdFx0XHRxaXNraXQgKz0gaWRlbnRhdGlvbiArIFwiam9iX3Jlc3VsdCA9IGpvYi5yZXN1bHQoKVxcblwiO1xuXG5cdFx0XHRcdGlmKGh5YnJpZCkge1xuXHRcdFx0XHRcdHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCJjb3VudHMgPSBDb3VudGVyKGpvYl9yZXN1bHQuZ2V0X2NvdW50cyhxYykpXFxuXCI7XG5cdFx0XHRcdFx0cWlza2l0ICs9IFwiXFxuXCJcblx0XHRcdFx0XHRxaXNraXQgKz0gaWRlbnRhdGlvbiArIFwiIyBDQUxDVUxBVEUgQ09TVCBIRVJFXFxuXCI7XG5cblx0XHRcdFx0XHR2YXIgY29zdEZ1bmN0aW9uID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLmNvc3RGdW5jdGlvbiA/IHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLmNvc3RGdW5jdGlvbi5weXRob24gfHwgXCJcIiA6IFwiXCI7XG5cdFx0XHRcdFx0aWYoIWNvc3RGdW5jdGlvbi50cmltKCkpIHtcblx0XHRcdFx0XHRcdGNvc3RGdW5jdGlvbiA9IFwiY29zdCA9IDBcIjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRxaXNraXQgKz0gYWRqdXN0SWRlbnRhdGlvbihjb3N0RnVuY3Rpb24sIGlkZW50YXRpb24pO1xuXG5cdFx0XHRcdFx0cWlza2l0ICs9IFwiXFxuXCJcblx0XHRcdFx0XHRxaXNraXQgKz0gaWRlbnRhdGlvbiArIFwicmV0dXJuIGNvc3RcXG5cIlxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCJwcmludChqb2JfcmVzdWx0LmdldF9jb3VudHMocWMpKVxcblwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmKHByb3ZpZGVyTmFtZSA9PSBcIklCTVFcIikge1xuXHRcdFx0XHRxaXNraXQgKz0gaWRlbnRhdGlvbiArIFwiSUJNUS5sb2FkX2FjY291bnQoKVxcblwiO1xuXHRcdFx0XHRxaXNraXQgKz0gaWRlbnRhdGlvbiArIFwicHJvdmlkZXIgPSBJQk1RLmdldF9wcm92aWRlcihodWI9XFxcImlibS1xXFxcIiwgZ3JvdXA9XFxcIm9wZW5cXFwiLCBwcm9qZWN0PVxcXCJtYWluXFxcIilcXG5cIjtcblx0XHRcdFx0aWYoYmFja2VuZE5hbWUpIHtcblx0XHRcdFx0XHRxaXNraXQgKz0gaWRlbnRhdGlvbiArIFwiYmFja2VuZCA9IHByb3ZpZGVyLmdldF9iYWNrZW5kKFxcXCJcIiArIGJhY2tlbmROYW1lICsgXCJcXFwiKVxcblwiO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQgIHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCJiYWNrZW5kcyA9IHByb3ZpZGVyLmJhY2tlbmRzKClcXG5cIjtcblx0XHRcdFx0XHRxaXNraXQgKz0gaWRlbnRhdGlvbiArIFwiYmFja2VuZCA9IGxlYXN0X2J1c3koYmFja2VuZHMpXFxuXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0cWlza2l0ICs9IGlkZW50YXRpb24gKyBcImpvYiA9IGV4ZWN1dGUocWMsIGJhY2tlbmQ9YmFja2VuZFwiO1xuXHRcdFx0XHRpZihzaG90cykge1xuXHRcdFx0XHRcdHFpc2tpdCArPSBcIiwgc2hvdHM9c2hvdHNcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRxaXNraXQgKz0gXCIpXFxuXCI7XG5cdFx0XHRcdHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCJqb2JfcmVzdWx0ID0gam9iLnJlc3VsdCgpXFxuXCI7XG5cblx0XHRcdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRcdFx0cWlza2l0ICs9IGlkZW50YXRpb24gKyBcImNvdW50cyA9IENvdW50ZXIoam9iX3Jlc3VsdC5nZXRfY291bnRzKHFjKSlcXG5cIjtcblx0XHRcdFx0XHRxaXNraXQgKz0gXCJcXG5cIlxuXHRcdFx0XHRcdHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCIjIENBTENVTEFURSBDT1NUIEhFUkVcXG5cIjtcblxuXHRcdFx0XHRcdHZhciBjb3N0RnVuY3Rpb24gPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMuY29zdEZ1bmN0aW9uID8gdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMuY29zdEZ1bmN0aW9uLnB5dGhvbiB8fCBcIlwiIDogXCJcIjtcblx0XHRcdFx0XHRpZighY29zdEZ1bmN0aW9uLnRyaW0oKSkge1xuXHRcdFx0XHRcdFx0Y29zdEZ1bmN0aW9uID0gXCJjb3N0ID0gMFwiO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHFpc2tpdCArPSBhZGp1c3RJZGVudGF0aW9uKGNvc3RGdW5jdGlvbiwgaWRlbnRhdGlvbik7XG5cblx0XHRcdFx0XHRxaXNraXQgKz0gXCJcXG5cIlxuXHRcdFx0XHRcdHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCJyZXR1cm4gY29zdFxcblwiXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cWlza2l0ICs9IGlkZW50YXRpb24gKyBcInByaW50KGpvYl9yZXN1bHQuZ2V0X2NvdW50cyhxYykpXFxuXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRcdHZhciBnbG9iYWxQYXJhbUxpc3QgPSBcIlwiO1xuXHRcdFx0XHR0aGlzLnBhcmFtcy5tYXAoZnVuY3Rpb24oZ2xvYmFsUGFyYW1OYW1lLCBnbG9iYWxQYXJhbUluZGV4KSB7XG5cdFx0XHRcdFx0aWYoZ2xvYmFsUGFyYW1JbmRleCA+IDApIHtcblx0XHRcdFx0XHRcdGdsb2JhbFBhcmFtTGlzdCArPSBcIiwgXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGdsb2JhbFBhcmFtTGlzdCArPSBnbG9iYWxQYXJhbU5hbWU7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHFpc2tpdCArPSBcIlxcblwiO1xuXHRcdFx0XHRxaXNraXQgKz0gXCJwYXJhbXMgPSBucC5hcnJheShbXCIgKyBnbG9iYWxQYXJhbUxpc3QgKyBcIl0pXFxuXCI7XG5cdFx0XHRcdHFpc2tpdCArPSBcIlxcblwiO1xuXHRcdFx0XHRxaXNraXQgKz0gXCJtaW5pbXVtID0gbWluaW1pemUob2JqZWN0aXZlX2Z1bmN0aW9uLCBwYXJhbXMsIG1ldGhvZD1cXFwiXCIgKyAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLm9wdGltaXplciA/IHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLm9wdGltaXplciA6IFwiUG93ZWxsXCIpICsgXCJcXFwiLCB0b2w9dG9sZXJhbmNlKVxcblwiO1xuXHRcdFx0XHRxaXNraXQgKz0gXCJwcmludChcXFwiY29zdDpcXFwiLCBtaW5pbXVtLmZ1biwgXFxcInBhcmFtczpcXFwiLCBtaW5pbXVtLngpXFxuXCI7XG5cdFx0XHR9XG5cdFx0fVxuXG5cblx0XHRpZihhc0p1cHl0ZXIpIHtcblx0XHRcdHZhciBub3RlYm9vayA9IHtcblx0XHRcdFx0bWV0YWRhdGE6IHtcblx0XHRcdFx0XHRrZXJuZWxzcGVjOiB7XG5cdFx0XHRcdFx0XHRkaXNwbGF5X25hbWU6IFwiUHl0aG9uIDNcIixcblx0XHRcdFx0XHRcdGxhbmd1YWdlOiBcInB5dGhvblwiLFxuXHRcdFx0XHRcdFx0bmFtZTogXCJweXRob24zXCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdG5iZm9ybWF0OiA0LFxuXHRcdFx0XHRuYmZvcm1hdF9taW5vcjogMCxcblx0XHRcdFx0Y2VsbHM6IFtcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRjZWxsX3R5cGU6IFwiY29kZVwiLFxuXHRcdFx0XHRcdFx0c291cmNlOiBxaXNraXQsXG5cdFx0XHRcdFx0XHRtZXRhZGF0YToge1xuXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0b3V0cHV0czogW10sXG5cdFx0XHRcdFx0XHRleGVjdXRpb25fY291bnQ6IG51bGxcblx0XHRcdFx0XHR9XG5cdFx0XHRcdF1cblx0XHRcdH07XG5cdFx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkobm90ZWJvb2spO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBxaXNraXQ7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0VG9RdUVTVCA9IGZ1bmN0aW9uKG9wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUsIGRlZmluZWRGdW5jKSB7XG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdHZhciBjb21tZW50ID0gb3B0aW9ucy5jb21tZW50O1xuXHR2YXIgZGVjb21wb3NlID0gb3B0aW9ucy5kZWNvbXBvc2U7XG5cblx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdGRlZmluZWRGdW5jID0gZGVmaW5lZEZ1bmMgfHwgW107XG5cblx0dmFyIGNpcmN1aXQgPSBudWxsO1xuXHR2YXIgZnVuY3Rpb25zID0gW1widW5pdGFyeVwiLFwiY29udHJvbGxlZFVuaXRhcnlcIl07XG5cblx0Ly8gZGVjb21wb3NlID9cblx0dmFyIGNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0Y2lyY3VpdC5sb2FkKHRoaXMuc2F2ZShkZWNvbXBvc2UpKTtcblxuXHR2YXIgcXVlc3QgPSBcIlwiO1xuXG5cdC8vIGNvbW1lbnRcblx0aWYoY29tbWVudCkge1xuXHRcdHZhciBjb21tID0gKGNvbW1lbnQgfHwgXCJcIikuc3BsaXQoXCJcXG5cIik7XG5cdFx0Y29tbS5tYXAoZnVuY3Rpb24oY2xpbmUpIHtcblx0XHRcdGlmKGNsaW5lLmxlbmd0aCA+PSAyICYmIGNsaW5lWzBdICE9IFwiL1wiICYmIGNsaW5lWzFdICE9IFwiL1wiKSB7XG5cdFx0XHRcdHF1ZXN0ICs9IFwiLy8gXCI7XG5cdFx0XHR9XG5cdFx0XHRxdWVzdCArPSBjbGluZTtcblx0XHRcdHF1ZXN0ICs9IFwiXFxuXCI7XG5cdFx0fSk7XG5cdH1cblxuXHRmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5udW1RdWJpdHM7IGkrKykge1xuXHRcdHZhciBnYXRlcyA9IHRoaXMuZ2F0ZXNbaV07XG5cdFx0Zm9yKHZhciBqID0gMDsgaiA8IGdhdGVzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGdhdGVzW2pdO1xuXHRcdFx0aWYoIWdhdGUgfHwgIXRoaXMuYmFzaWNHYXRlc1tnYXRlLm5hbWVdKXtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmKHRoaXMuYmFzaWNHYXRlc1tnYXRlLm5hbWVdLmV4cG9ydEluZm8gJiYgdGhpcy5iYXNpY0dhdGVzW2dhdGUubmFtZV0uZXhwb3J0SW5mby5xdWVzdCkge1xuXHRcdFx0XHR2YXIgcXVlc3ROYW1lID0gdGhpcy5iYXNpY0dhdGVzW2dhdGUubmFtZV0uZXhwb3J0SW5mby5xdWVzdC5uYW1lO1xuXHRcdFx0XHRpZihkZWZpbmVkRnVuYy5pbmNsdWRlcyhnYXRlLm5hbWUpKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYoZnVuY3Rpb25zLmluY2x1ZGVzKHF1ZXN0TmFtZSkgfHwgdGhpcy5iYXNpY0dhdGVzW2dhdGUubmFtZV0uZXhwb3J0SW5mby5xdWVzdC5mdW5jICkge1xuXHRcdFx0XHRcdGRlZmluZWRGdW5jLnB1c2goZ2F0ZS5uYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmKGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRxdWVzdCArPSBcIlF1cmVnIFwiICsgZXhwb3J0QXNHYXRlTmFtZSArIFwiKFF1cmVnIHF1Yml0c1wiO1xuXG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNpcmN1aXQubnVtUXViaXRzOyBpKyspIHtcblx0XHRcdHF1ZXN0ICs9IFwiLCBjb25zdCBpbnQgcVwiO1xuXHRcdFx0cXVlc3QgKz0gaTtcblx0XHR9XG5cblx0XHRpZihjaXJjdWl0LnBhcmFtcyAmJiBjaXJjdWl0LnBhcmFtcy5sZW5ndGgpIHtcblx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBjaXJjdWl0LnBhcmFtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRxdWVzdCArPSBcIiwgZG91YmxlIFwiICsgY2lyY3VpdC5wYXJhbXNbaV07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHF1ZXN0ICs9IFwiKSB7XFxuXCI7XG5cdH0gZWxzZSB7XG5cdFx0cXVlc3QgKz0gXCIjaW5jbHVkZSA8bWF0aC5oPlxcbiNpbmNsdWRlIFxcXCJRdUVTVC5oXFxcIlxcblxcblwiO1xuXHRcdHF1ZXN0ICs9IFwiI2lmbmRlZiBNX1BJXFxuI2RlZmluZSBNX1BJIDMuMTQxNTkyNjVcXG4jZW5kaWZcXG5cXG5cIjtcblxuXHRcdHZhciBjdXN0b21RdUVTVCA9IFtdO1xuXG5cblx0XHR2YXIgdXNlZEdhdGVzID0gY2lyY3VpdC51c2VkR2F0ZXMoKTtcblx0XHRpZighZGVjb21wb3NlKSB7XG5cdFx0XHR1c2VkR2F0ZXMubWFwKGZ1bmN0aW9uKHVzZWRHYXRlTmFtZSkge1xuXHRcdFx0XHR2YXIgYmFzaWNHYXRlID0gY2lyY3VpdC5iYXNpY0dhdGVzW3VzZWRHYXRlTmFtZV07XG5cdFx0XHRcdGlmKCFiYXNpY0dhdGUpIHtcblx0XHRcdFx0XHR2YXIgY3VzdG9tR2F0ZSA9IHNlbGYuY3VzdG9tR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRcdFx0XHRpZihjdXN0b21HYXRlKSB7XG5cdFx0XHRcdFx0XHR2YXIgY3VzdG9tQ2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRcdFx0XHRcdFx0Y3VzdG9tQ2lyY3VpdC5sb2FkKGN1c3RvbUdhdGUpO1xuXHRcdFx0XHRcdFx0dmFyIG5ld09wdGlvbnMgPSB7XG5cdFx0XHRcdFx0XHRcdGNvbW1lbnQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdGRlY29tcG9zZTogZmFsc2Vcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRjdXN0b21RdUVTVC5wdXNoKGN1c3RvbUNpcmN1aXQuZXhwb3J0VG9RdUVTVChuZXdPcHRpb25zLCB1c2VkR2F0ZU5hbWUsIGRlZmluZWRGdW5jKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgZGVmaW5lZEZ1bmMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBnYXRlTmFtZSA9IGRlZmluZWRGdW5jW2ldO1xuXHRcdFx0dmFyIHF1ZXN0TmFtZSA9IHRoaXMuYmFzaWNHYXRlc1tnYXRlTmFtZV0uZXhwb3J0SW5mby5xdWVzdC5uYW1lO1xuXHRcdFx0c3dpdGNoKHF1ZXN0TmFtZSkge1xuXHRcdFx0XHRjYXNlIFwidW5pdGFyeVwiOlxuXHRcdFx0XHRjYXNlIFwiY29udHJvbGxlZFVuaXRhcnlcIjoge1xuXHRcdFx0XHRcdG1hdHJpeCA9IHRoaXMuYmFzaWNHYXRlc1tnYXRlTmFtZV0uZXhwb3J0SW5mby5xdWVzdC5tYXRyaXg7XG5cdFx0XHRcdFx0dmFyIHF1ZXN0UGFyYW1zID0gdGhpcy5iYXNpY0dhdGVzW2dhdGVOYW1lXS5leHBvcnRJbmZvLnF1ZXN0LnBhcmFtcztcblx0XHRcdFx0XHRxdWVzdCArPSBcInZvaWQgXCIgKyBnYXRlTmFtZSArIFwiKFF1cmVnIHF1Yml0cywgY29uc3QgaW50IHFcIjtcblx0XHRcdFx0XHRpZihxdWVzdE5hbWUgPT0gXCJjb250cm9sbGVkVW5pdGFyeVwiKSB7XG5cdFx0XHRcdFx0XHRxdWVzdCArPSBcIjEsIGNvbnN0IGludCBxMlwiO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAocXVlc3RQYXJhbXMpIHtcblx0XHRcdFx0XHRcdGZvcih2YXIgaj0wOyBqIDwgcXVlc3RQYXJhbXMubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdFx0cXVlc3QgKz0gXCIsIGRvdWJsZSBcIiArIHF1ZXN0UGFyYW1zW2pdO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRxdWVzdCArPSBcIikge1xcblwiO1xuXHRcdFx0XHRcdHF1ZXN0ICs9IFwiICAgIENvbXBsZXhNYXRyaXgyIHU7XFxuXCI7XG5cdFx0XHRcdFx0cXVlc3QgKz0gXCIgICAgdS5yMGMwID0gKENvbXBsZXgpIHsucmVhbD1cIiArIG1hdHJpeFswXVswXVswXSArIFwiLCAuaW1hZz0gXCIgKyBtYXRyaXhbMF1bMF1bMV0gKyBcIn07XFxuXCI7XG5cdFx0XHRcdFx0cXVlc3QgKz0gXCIgICAgdS5yMGMxID0gKENvbXBsZXgpIHsucmVhbD1cIiArIG1hdHJpeFswXVsxXVswXSArIFwiLCAuaW1hZz0gXCIgKyBtYXRyaXhbMF1bMV1bMV0gKyBcIn07XFxuXCI7XG5cdFx0XHRcdFx0cXVlc3QgKz0gXCIgICAgdS5yMWMwID0gKENvbXBsZXgpIHsucmVhbD1cIiArIG1hdHJpeFsxXVswXVswXSArIFwiLCAuaW1hZz0gXCIgKyBtYXRyaXhbMV1bMF1bMV0gKyBcIn07XFxuXCI7XG5cdFx0XHRcdFx0cXVlc3QgKz0gXCIgICAgdS5yMWMxID0gKENvbXBsZXgpIHsucmVhbD1cIiArIG1hdHJpeFsxXVsxXVswXSArIFwiLCAuaW1hZz0gXCIgKyBtYXRyaXhbMV1bMV1bMV0gKyBcIn07XFxuXCI7XG5cdFx0XHRcdFx0cXVlc3QgKz0gXCIgICAgXCIgKyBxdWVzdE5hbWUgKyBcIihxdWJpdHMsIHFcIlxuXHRcdFx0XHRcdGlmKHF1ZXN0TmFtZSA9PSBcImNvbnRyb2xsZWRVbml0YXJ5XCIpIHtcblx0XHRcdFx0XHRcdHF1ZXN0ICs9IFwiMSwgcTJcIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cXVlc3QgKz0gXCIsIHUpO1xcbn1cXG5cXG5cIjtcblx0XHRcdFx0fSBicmVhaztcblx0XHRcdFx0ZGVmYXVsdDogeyBxdWVzdCArPSB0aGlzLmJhc2ljR2F0ZXNbZ2F0ZU5hbWVdLmV4cG9ydEluZm8ucXVlc3QuZnVuYyArIFwiXFxuXFxuXCI7IH0gYnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IGN1c3RvbVF1RVNULmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRxdWVzdCArPSBjdXN0b21RdUVTVFtpXTtcblx0XHR9XG5cblx0XHRxdWVzdCArPSBcImludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pIHtcXG5cIjtcblx0XHRxdWVzdCArPSBcIiAgICBRdUVTVEVudiBlbnYgPSBjcmVhdGVRdUVTVEVudigpO1xcblwiO1xuXHRcdHF1ZXN0ICs9IFwiICAgIFF1cmVnIHF1Yml0cyA9IGNyZWF0ZVF1cmVnKFwiICsgY2lyY3VpdC5udW1RdWJpdHMgK1wiLCBlbnYpO1xcblwiO1xuXHRcdHF1ZXN0ICs9IFwiICAgIGludCBtZWFzdXJlZFtcIiArIGNpcmN1aXQubnVtUXViaXRzICtcIl07XFxuXFxuXCI7XG5cdH1cblxuXHRxdWVzdCArPSBcIlxcblwiO1xuXG5cdHZhciBudW1Db2xzID0gY2lyY3VpdC5udW1Db2xzKCk7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSBjaXJjdWl0LmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmNvbm5lY3RvciA9PSAwKSB7XG5cblx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24gJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnKSB7XG5cdFx0XHRcdFx0cXVlc3QgKz0gXCJpZihcIiArIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZyArIFwiPT1cIiArIGdhdGUub3B0aW9ucy5jb25kaXRpb24udmFsdWUgKyBcIikge1xcblwiO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFyIGdhdGVOYW1lID0gZ2F0ZS5uYW1lO1xuXHRcdFx0XHR2YXIgZ2F0ZVBhcmFtcyA9IGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMucGFyYW1zID8gZ2F0ZS5vcHRpb25zLnBhcmFtcyA6IHt9O1xuXHRcdFx0XHR2YXIgZ2F0ZURlZiA9IHRoaXMuYmFzaWNHYXRlc1tnYXRlTmFtZV07XG5cblx0XHRcdFx0aWYoZ2F0ZU5hbWUgPT0gXCJtZWFzdXJlXCIpIHtcblx0XHRcdFx0XHRxdWVzdCArPSBcIiAgICBtZWFzdXJlZFtcIiArIGdhdGUud2lyZXNbMF0gKyBcIl0gPSBtZWFzdXJlKHF1Yml0cywgXCIgKyBnYXRlLndpcmVzWzBdO1xuXHRcdFx0XHR9IGVsc2UgaWYoZ2F0ZURlZikge1xuXHRcdFx0XHRcdHZhciBxdWVzdE5hbWUgPSBnYXRlRGVmLmV4cG9ydEluZm8ucXVlc3QubmFtZTtcblx0XHRcdFx0XHR2YXIgcXVlc3RQYXJhbXMgPSBnYXRlRGVmLmV4cG9ydEluZm8ucXVlc3QucGFyYW1zO1xuXG5cdFx0XHRcdFx0aWYoZnVuY3Rpb25zLmluY2x1ZGVzKHF1ZXN0TmFtZSkpIHtcblx0XHRcdFx0XHRcdHF1ZXN0ICs9IFwiICAgIFwiICsgZ2F0ZU5hbWUgKyBcIihxdWJpdHNcIjtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cXVlc3QgKz0gXCIgICAgXCIgKyBxdWVzdE5hbWUgKyBcIihxdWJpdHNcIjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRmb3IodmFyIHcgPSAwOyB3IDwgZ2F0ZS53aXJlcy5sZW5ndGg7IHcrKykge1xuXHRcdFx0XHRcdFx0XHRpZihleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0XHRcdFx0XHRcdFx0cXVlc3QgKz0gXCIsIHFcIiArIGdhdGUud2lyZXNbd107XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0cXVlc3QgKz0gXCIsIFwiICsgZ2F0ZS53aXJlc1t3XTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKHF1ZXN0UGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRzd2l0Y2gocXVlc3ROYW1lKXtcblx0XHRcdFx0XHRcdFx0Y2FzZSBcImNvbXBhY3RVbml0YXJ5XCI6IHtcblx0XHRcdFx0XHRcdFx0XHRxdWVzdCArPSBcIiwgXCIgKyBxdWVzdFBhcmFtcy5hbHBoYTtcblx0XHRcdFx0XHRcdFx0XHRxdWVzdCArPSBcIiwgXCIgKyBxdWVzdFBhcmFtcy5iZXRhO1xuXHRcdFx0XHRcdFx0XHR9IGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRjYXNlIFwicGhhc2VTaGlmdFwiOlxuXHRcdFx0XHRcdFx0XHRjYXNlIFwiY29udHJvbGxlZFBoYXNlU2hpZnRcIjoge1xuXHRcdFx0XHRcdFx0XHRcdGlmKHF1ZXN0UGFyYW1zLnRoZXRhKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRxdWVzdCArPSBcIiwgXCIgKyBxdWVzdFBhcmFtcy50aGV0YTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gYnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGdhdGVEZWYgPSB0aGlzLmN1c3RvbUdhdGVzW2dhdGVOYW1lXTtcblx0XHRcdFx0XHRxdWVzdCArPSBcIiAgICBxdWJpdHMgPSBcIiArIGdhdGVOYW1lICsgXCIocXViaXRzXCI7XG5cblx0XHRcdFx0XHRmb3IodmFyIHcgPSAwOyB3IDwgZ2F0ZS53aXJlcy5sZW5ndGg7IHcrKykge1xuXHRcdFx0XHRcdFx0XHRxdWVzdCArPSBcIiwgXCIgKyBnYXRlLndpcmVzW3ddO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmKGdhdGVQYXJhbXMpIHtcblx0XHRcdFx0XHR2YXIgZ2F0ZURlZiA9IHRoaXMuYmFzaWNHYXRlc1tnYXRlTmFtZV07XG5cdFx0XHRcdFx0aWYoIWdhdGVEZWYpIHtcblx0XHRcdFx0XHRcdGdhdGVEZWYgPSB0aGlzLmN1c3RvbUdhdGVzW2dhdGVOYW1lXTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZihnYXRlRGVmKSB7XG5cdFx0XHRcdFx0XHR2YXIgcGFyYW1EZWYgPSBnYXRlRGVmLnBhcmFtcyB8fCBbXTtcblx0XHRcdFx0XHRcdHZhciBwYXJhbUNvdW50ID0gcGFyYW1EZWYubGVuZ3RoO1xuXG5cdFx0XHRcdFx0XHRpZihwYXJhbUNvdW50KSB7XG5cdFx0XHRcdFx0XHRcdGZvcih2YXIgcCA9IDA7IHAgPCBwYXJhbUNvdW50OyBwKyspIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1OYW1lID0gcGFyYW1EZWZbcF07XG5cdFx0XHRcdFx0XHRcdFx0cXVlc3QgKz0gXCIsIFwiICsgZ2F0ZVBhcmFtc1twYXJhbU5hbWVdO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cXVlc3QgKz0gXCIpO1xcblwiO1xuXG5cdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZykge1xuXHRcdFx0XHRcdHF1ZXN0ICs9IFwifVxcblwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdHF1ZXN0ICs9IFwiXFxuICAgIHJldHVybiBxdWJpdHM7XFxufVxcblxcblwiO1xuXHR9IGVsc2Uge1xuXHRcdHF1ZXN0ICs9IFwiXFxuICAgIGRlc3Ryb3lRdXJlZyhxdWJpdHMsIGVudik7XFxuXCI7XG5cdFx0cXVlc3QgKz0gXCIgICAgZGVzdHJveVF1RVNURW52KGVudik7XFxuXCI7XG5cdFx0cXVlc3QgKz0gXCIgICAgcmV0dXJuIDA7XFxufVxcblwiO1xuXHR9XG5cblx0cmV0dXJuIHF1ZXN0O1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0VG9RQVNNID0gZnVuY3Rpb24ob3B0aW9ucywgZXhwb3J0QXNHYXRlTmFtZSwgY2lyY3VpdFJlcGxhY2VtZW50LCBpbnNpZGVTdWJtb2R1bGUpIHtcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0dmFyIGNvbW1lbnQgPSBvcHRpb25zLmNvbW1lbnQ7XG5cdHZhciBkZWNvbXBvc2UgPSBvcHRpb25zLmRlY29tcG9zZTtcblx0dmFyIGNvbXBhdGliaWxpdHlNb2RlID0gb3B0aW9ucy5jb21wYXRpYmlsaXR5TW9kZTtcblxuXHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0dmFyIGdsb2JhbFBhcmFtcyA9IHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMucGFyYW1zID8gdGhpcy5vcHRpb25zLnBhcmFtcyA6IHt9O1xuXG5cdHZhciBtYXRoVG9TdHJpbmdIYW5kbGVyID0gZnVuY3Rpb24obm9kZSwgb3B0aW9ucykge1xuXHRcdGlmKG5vZGUuaXNTeW1ib2xOb2RlKSB7XG5cdFx0XHRpZighY29tcGF0aWJpbGl0eU1vZGUgJiYgc2VsZi5wYXJhbXMuaW5kZXhPZihub2RlLm5hbWUpID49IDApIHtcblx0XHRcdFx0cmV0dXJuIGdsb2JhbFBhcmFtc1tub2RlLm5hbWVdO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHR2YXIgY2lyY3VpdCA9IG51bGw7XG5cblx0Ly8gZGVjb21wb3NlID9cblx0dmFyIGNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0Y2lyY3VpdC5sb2FkKHRoaXMuc2F2ZShkZWNvbXBvc2UpKTtcblxuXHR2YXIgcWFzbSA9IFwiXCI7XG5cblx0Ly8gY29tbWVudFxuXHRpZihjb21tZW50KSB7XG5cdFx0dmFyIGNvbW0gPSAoY29tbWVudCB8fCBcIlwiKS5zcGxpdChcIlxcblwiKTtcblx0XHRjb21tLm1hcChmdW5jdGlvbihjbGluZSkge1xuXHRcdFx0aWYoY2xpbmUubGVuZ3RoID49IDIgJiYgY2xpbmVbMF0gIT0gXCIvXCIgJiYgY2xpbmVbMV0gIT0gXCIvXCIpIHtcblx0XHRcdFx0cWFzbSArPSBcIi8vIFwiO1xuXHRcdFx0fVxuXHRcdFx0cWFzbSArPSBjbGluZTtcblx0XHRcdHFhc20gKz0gXCJcXG5cIjtcblx0XHR9KTtcblx0fVxuXG5cdGlmKGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRxYXNtICs9IFwiZ2F0ZSBcIiArIGV4cG9ydEFzR2F0ZU5hbWU7XG5cblx0XHRpZihjaXJjdWl0LnBhcmFtcyAmJiBjaXJjdWl0LnBhcmFtcy5sZW5ndGgpIHtcblx0XHRcdHFhc20gKz0gXCIoXCI7XG5cdFx0XHRmb3IodmFyIHBjID0gMDsgcGMgPCBjaXJjdWl0LnBhcmFtcy5sZW5ndGg7IHBjKyspIHtcblx0XHRcdFx0aWYocGMgPiAwKSB7XG5cdFx0XHRcdFx0cWFzbSArPSBcIiwgXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0cWFzbSArPSBjaXJjdWl0LnBhcmFtc1twY107XG5cdFx0XHR9XG5cdFx0XHRxYXNtICs9IFwiKVwiO1xuXHRcdH1cblxuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBjaXJjdWl0Lm51bVF1Yml0czsgaSsrKSB7XG5cdFx0XHRpZihpID09IDApIHtcblx0XHRcdFx0cWFzbSArPSBcIiBcIjtcblx0XHRcdH1cblx0XHRcdGlmKGkgPiAwKSB7XG5cdFx0XHRcdHFhc20gKz0gXCIsIFwiO1xuXHRcdFx0fVxuXHRcdFx0cWFzbSArPSBxdWJpdExldHRlcihpLCBjaXJjdWl0Lm51bVF1Yml0cyk7XG5cdFx0fVxuXHRcdHFhc20gKz0gXCJcXG57XFxuXCI7XG5cdH0gZWxzZSB7XG5cdFx0aWYoIWNpcmN1aXRSZXBsYWNlbWVudCl7XG5cdFx0XHRxYXNtICs9IFwiT1BFTlFBU00gMi4wO1xcblwiO1xuXHRcdFx0cWFzbSArPSBcImluY2x1ZGUgXFxcInFlbGliMS5pbmNcXFwiO1xcblwiO1xuXHRcdFx0cWFzbSArPSBcInFyZWcgcVtcIiArIGNpcmN1aXQubnVtUXViaXRzICsgXCJdO1xcblwiO1xuXG5cdFx0XHRmb3IodmFyIGNyZWdOYW1lIGluIGNpcmN1aXQuY3JlZ3MpIHtcblx0XHRcdFx0cWFzbSArPSBcImNyZWcgXCIgKyBjcmVnTmFtZSArIFwiW1wiICsgKGNpcmN1aXQuY3JlZ3NbY3JlZ05hbWVdLmxlbmd0aCB8fCAxKSArIFwiXTtcXG5cIjtcblx0XHRcdH1cblxuXHRcdFx0dmFyIHVzZWRHYXRlcyA9IGNpcmN1aXQudXNlZEdhdGVzKCk7XG5cdFx0XHRpZighZGVjb21wb3NlKSB7XG5cdFx0XHRcdHVzZWRHYXRlcy5tYXAoZnVuY3Rpb24odXNlZEdhdGVOYW1lKSB7XG5cdFx0XHRcdFx0dmFyIGJhc2ljR2F0ZSA9IGNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0XHRcdGlmKCFiYXNpY0dhdGUpIHtcblx0XHRcdFx0XHRcdHZhciBjdXN0b21HYXRlID0gc2VsZi5jdXN0b21HYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0XHRcdFx0aWYoY3VzdG9tR2F0ZSkge1xuXHRcdFx0XHRcdFx0XHR2YXIgY3VzdG9tQ2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRcdFx0XHRcdFx0XHRjdXN0b21DaXJjdWl0LmxvYWQoY3VzdG9tR2F0ZSk7XG5cdFx0XHRcdFx0XHRcdHZhciBuZXdPcHRpb25zID0ge1xuXHRcdFx0XHRcdFx0XHRcdGNvbW1lbnQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0ZGVjb21wb3NlOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRjb21wYXRpYmlsaXR5TW9kZTogY29tcGF0aWJpbGl0eU1vZGVcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0cWFzbSArPSBjdXN0b21DaXJjdWl0LmV4cG9ydFRvUUFTTShuZXdPcHRpb25zLCB1c2VkR2F0ZU5hbWUsIGZhbHNlLCBmYWxzZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHR2YXIgbnVtQ29scyA9IGNpcmN1aXQubnVtQ29scygpO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IGNpcmN1aXQubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gY2lyY3VpdC5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdHZhciBxYXNtUmVwbGFjZW1lbnQgPSBudWxsO1xuXHRcdFx0dmFyIHFhc21FcXVpdmFsZW50ID0gbnVsbDtcblx0XHRcdFxuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmNvbm5lY3RvciA9PSAwKSB7XG5cdFx0XHRcdHZhciBxYXNtTmFtZSA9IGdhdGUubmFtZTtcblx0XHRcdFx0aWYoIWNvbXBhdGliaWxpdHlNb2RlKSB7XG5cdFx0XHRcdFx0dmFyIGdhdGVEZWYgPSBjaXJjdWl0LmdldEdhdGVEZWYoZ2F0ZS5uYW1lKTtcblx0XHRcdFx0XHRpZihnYXRlRGVmKXtcblx0XHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mbyl7XG5cdFx0XHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mby5xYXNtICYmIGdhdGVEZWYuZXhwb3J0SW5mby5xYXNtLm5hbWUpIHtcblx0XHRcdFx0XHRcdFx0XHRxYXNtTmFtZSA9IGdhdGVEZWYuZXhwb3J0SW5mby5xYXNtLm5hbWU7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZihnYXRlRGVmLmV4cG9ydEluZm8ucWFzbSAmJiBnYXRlRGVmLmV4cG9ydEluZm8ucWFzbS5yZXBsYWNlbWVudCkge1xuXHRcdFx0XHRcdFx0XHRcdHFhc21SZXBsYWNlbWVudCA9IGdhdGVEZWYuZXhwb3J0SW5mby5xYXNtLnJlcGxhY2VtZW50O1xuXHRcdFx0XHRcdFx0XHRcdHFhc21SZXBsYWNlbWVudC5tYXAoZnVuY3Rpb24ocmVwbGFjZW1lbnQpe1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHJlcGxhY2VtZW50Q2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVwbGFjZW1lbnRDaXJjdWl0LmNyZWdzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShzZWxmLmNyZWdzKSk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMucGFyYW1zKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtcyA9IE9iamVjdC5rZXlzKGdhdGUub3B0aW9ucy5wYXJhbXMpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgcmVwbGFjZW1lbnRQYXJhbXMgPSBPYmplY3Qua2V5cyhyZXBsYWNlbWVudC5wYXJhbXMpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJhbXMubWFwKGZ1bmN0aW9uKHBhcmFtKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihyZXBsYWNlbWVudFBhcmFtcy5pbmRleE9mKHBhcmFtKSA+PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXBsYWNlbWVudC5wYXJhbXNbcGFyYW1dID0gZ2F0ZS5vcHRpb25zLnBhcmFtc1twYXJhbV07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHJlcGxhY2VtZW50Q29uZGl0aW9uID0gZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24gPyBnYXRlLm9wdGlvbnMuY29uZGl0aW9uIDoge307XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXBsYWNlbWVudENpcmN1aXQuYWRkR2F0ZShyZXBsYWNlbWVudC5uYW1lLCBjb2x1bW4sIGdhdGUud2lyZXMsIHsgcGFyYW1zOiByZXBsYWNlbWVudC5wYXJhbXMsIGNvbmRpdGlvbjogcmVwbGFjZW1lbnRDb25kaXRpb24gfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgbmV3T3B0aW9ucyA9IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29tbWVudDogXCJcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVjb21wb3NlOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29tcGF0aWJpbGl0eU1vZGU6IGNvbXBhdGliaWxpdHlNb2RlXG5cdFx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRcdFx0cWFzbSArPSByZXBsYWNlbWVudENpcmN1aXQuZXhwb3J0VG9RQVNNKG5ld09wdGlvbnMsIGZhbHNlLCB0cnVlLCAhIWV4cG9ydEFzR2F0ZU5hbWUgfHwgaW5zaWRlU3VibW9kdWxlKTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmKGdhdGVEZWYuZXhwb3J0SW5mby5xYXNtICYmIGdhdGVEZWYuZXhwb3J0SW5mby5xYXNtLmVxdWl2YWxlbnQpe1xuXHRcdFx0XHRcdFx0XHRcdHFhc21FcXVpdmFsZW50ID0gZ2F0ZURlZi5leHBvcnRJbmZvLnFhc20uZXF1aXZhbGVudDtcblx0XHRcdFx0XHRcdFx0XHRxYXNtRXF1aXZhbGVudC5tYXAoZnVuY3Rpb24oZXF1aXZhbGVudCl7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgZXF1aXZhbGVudENpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0XHRcdFx0XHRcdFx0XHRcdGVxdWl2YWxlbnRDaXJjdWl0LmNyZWdzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShzZWxmLmNyZWdzKSk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdHZhciBnYXRlV2lyZXMgPSBlcXVpdmFsZW50LndpcmVzLmxlbmd0aCA+IDEgPyBnYXRlLndpcmVzIDogZ2F0ZS53aXJlc1tlcXVpdmFsZW50LndpcmVzWzBdXTtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBlcVBhcmFtcyA9IHt9O1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoZXF1aXZhbGVudC5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gLS0tXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGVxdWl2YWxlbnQgZ2F0ZSBwYXJhbXMgY2FuIGNvbnRhaW4gdmFyaWFibGUgZnJvbSBnYXRlIHBhcmFtc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyAtLS1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBFdmFsdWF0ZSBnYXRlJ3MgcGFyYW1zXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBnYXRlUGFyYW1zID0ge307XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBnYXRlUGFyYW1OYW1lIGluIGdhdGUub3B0aW9ucy5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGdhdGVQYXJhbXNbZ2F0ZVBhcmFtTmFtZV0gPSBtYXRoLmV2YWx1YXRlKGdhdGUub3B0aW9ucy5wYXJhbXNbZ2F0ZVBhcmFtTmFtZV0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIEV2YWx1YXRlIGVxdWl2YWxlbnQgZ2F0ZSdzIHBhcmFtc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGVxUGFyYW1OYW1lIGluIGVxdWl2YWxlbnQucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZXFQYXJhbXNbZXFQYXJhbU5hbWVdID0gbWF0aC5ldmFsdWF0ZShlcXVpdmFsZW50LnBhcmFtc1tlcVBhcmFtTmFtZV0sIGdhdGVQYXJhbXMpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdHZhciBlcUNvbmRpdGlvbiA9IGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uID8gZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiA6IHt9O1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRlcXVpdmFsZW50Q2lyY3VpdC5hZGRHYXRlKGVxdWl2YWxlbnQubmFtZSwgY29sdW1uLCBnYXRlV2lyZXMsIHsgcGFyYW1zOiBlcVBhcmFtcywgY29uZGl0aW9uOiBlcUNvbmRpdGlvbiB9KTtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBuZXdPcHRpb25zID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb21tZW50OiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkZWNvbXBvc2U6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb21wYXRpYmlsaXR5TW9kZTogY29tcGF0aWJpbGl0eU1vZGVcblx0XHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0XHRxYXNtICs9IGVxdWl2YWxlbnRDaXJjdWl0LmV4cG9ydFRvUUFTTShuZXdPcHRpb25zLCBcIlwiLCB0cnVlLCAhIWV4cG9ydEFzR2F0ZU5hbWUgfHwgaW5zaWRlU3VibW9kdWxlKTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmKCFxYXNtUmVwbGFjZW1lbnQgJiYgIXFhc21FcXVpdmFsZW50KSB7XG5cdFx0XHRcdFx0aWYoZXhwb3J0QXNHYXRlTmFtZSB8fCBpbnNpZGVTdWJtb2R1bGUpIHtcblx0XHRcdFx0XHRcdHFhc20gKz0gXCIgIFwiO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcblx0XHRcdFx0XHRpZihnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcpIHtcblx0XHRcdFx0XHRcdHFhc20gKz0gXCJpZihcIiArIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZyArIFwiPT1cIiArIGdhdGUub3B0aW9ucy5jb25kaXRpb24udmFsdWUgKyBcIikgXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYoKCFxYXNtUmVwbGFjZW1lbnQgJiYgIXFhc21FcXVpdmFsZW50KSB8fCBjb21wYXRpYmlsaXR5TW9kZSkge1xuXHRcdFx0XHRcdHZhciBnYXRlTmFtZSA9IGdhdGUubmFtZTtcblx0XHRcdFx0XHR2YXIgZ2F0ZVBhcmFtcyA9IGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMucGFyYW1zID8gZ2F0ZS5vcHRpb25zLnBhcmFtcyA6IHt9O1xuXG5cdFx0XHRcdFx0cWFzbSArPSBjb21wYXRpYmlsaXR5TW9kZSA/IGdhdGUubmFtZSA6IHFhc21OYW1lO1xuXG5cdFx0XHRcdFx0aWYoZ2F0ZVBhcmFtcykge1xuXHRcdFx0XHRcdFx0dmFyIGdhdGVEZWYgPSBjaXJjdWl0LmJhc2ljR2F0ZXNbZ2F0ZU5hbWVdO1xuXHRcdFx0XHRcdFx0aWYoIWdhdGVEZWYpIHtcblx0XHRcdFx0XHRcdFx0Z2F0ZURlZiA9IGNpcmN1aXQuY3VzdG9tR2F0ZXNbZ2F0ZU5hbWVdO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZihnYXRlRGVmKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBwYXJhbURlZiA9IGdhdGVEZWYucGFyYW1zIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1Db3VudCA9IHBhcmFtRGVmLmxlbmd0aDtcblx0XHRcdFx0XHRcdFx0aWYocGFyYW1Db3VudCkge1xuXHRcdFx0XHRcdFx0XHRcdHFhc20gKz0gXCIgKFwiO1xuXHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgcCA9IDA7IHAgPCBwYXJhbUNvdW50OyBwKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKHAgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHFhc20gKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtTmFtZSA9IHBhcmFtRGVmW3BdO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1WYWx1ZSA9IGdhdGVQYXJhbXNbcGFyYW1OYW1lXTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKCFleHBvcnRBc0dhdGVOYW1lICYmICFpbnNpZGVTdWJtb2R1bGUgJiYgIWNvbXBhdGliaWxpdHlNb2RlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnYXRlUGFyYW1zW3BhcmFtTmFtZV0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJhbVZhbHVlID0gbm9kZS50b1N0cmluZyh7IGhhbmRsZXI6IG1hdGhUb1N0cmluZ0hhbmRsZXIgfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRxYXNtICs9IHBhcmFtVmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHFhc20gKz0gXCIpXCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cdFxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGZvcih2YXIgdyA9IDA7IHcgPCBnYXRlLndpcmVzLmxlbmd0aDsgdysrKSB7XG5cdFx0XHRcdFx0XHRpZih3ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRxYXNtICs9IFwiLFwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYoZXhwb3J0QXNHYXRlTmFtZSB8fCBpbnNpZGVTdWJtb2R1bGUpIHtcblx0XHRcdFx0XHRcdFx0cWFzbSArPSBcIiBcIiArIHF1Yml0TGV0dGVyKGdhdGUud2lyZXNbd10sIGNpcmN1aXQubnVtUXViaXRzKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHFhc20gKz0gXCIgcVtcIiArIGdhdGUud2lyZXNbd10gKyBcIl1cIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZihnYXRlTmFtZSA9PSBcIm1lYXN1cmVcIiAmJiBnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNyZWcpIHtcblx0XHRcdFx0XHRcdHFhc20gKz0gXCIgLT4gXCI7XG5cdFx0XHRcdFx0XHRxYXNtICs9IGdhdGUub3B0aW9ucy5jcmVnLm5hbWUgKyBcIltcIiArIGdhdGUub3B0aW9ucy5jcmVnLmJpdCArIFwiXVwiO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHFhc20gKz0gXCI7XFxuXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZihleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0cWFzbSArPSBcIn1cXG5cXG5cIjtcblx0fVxuXG5cdHJldHVybiBxYXNtO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFRvUHlxdWlsID0gZnVuY3Rpb24ob3B0aW9ucywgZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR2YXIgY29tbWVudCA9IG9wdGlvbnMuY29tbWVudDtcblx0dmFyIGRlY29tcG9zZSA9IG9wdGlvbnMuZGVjb21wb3NlO1xuXHR2YXIgdmVyc2lvblN0ciA9IG9wdGlvbnMudmVyc2lvblN0cjtcblx0dmFyIGxhdHRpY2UgPSBvcHRpb25zLmxhdHRpY2U7XG5cdHZhciBhc1FWTSA9IG9wdGlvbnMuYXNRVk07XG5cdHZhciBhc0p1cHl0ZXIgPSBvcHRpb25zLmFzSnVweXRlcjtcblx0dmFyIHNob3RzID0gb3B0aW9ucy5zaG90cztcblx0dmFyIGh5YnJpZCA9IG9wdGlvbnMuaHlicmlkO1xuXG5cdHZhciBzZWxmID0gdGhpcztcblxuXHR2YXIgdmVyc2lvbiA9IHBhcnNlRmxvYXQodmVyc2lvblN0ciB8fCBcIjIuMTJcIik7XG5cdGlmKGlzTmFOKHZlcnNpb24pKSB7XG5cdFx0dmVyc2lvbiA9IDIuMTtcblx0fVxuXG5cdGlmKCFzaG90cykge1xuXHRcdHNob3RzID0gMTAyNDtcblx0fVxuXG5cdGlmKHR5cGVvZiBoeWJyaWQgPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdGh5YnJpZCA9IHRoaXMub3B0aW9ucyA/ICEhdGhpcy5vcHRpb25zLmh5YnJpZCA6IGZhbHNlO1xuXHR9XG5cblx0Ly8gZGVjb21wb3NlID9cblx0dmFyIGNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0Y2lyY3VpdC5sb2FkKHRoaXMuc2F2ZShkZWNvbXBvc2UpKTtcblxuXHR2YXIgbWF0aFRvU3RyaW5nSGFuZGxlciA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMpIHtcblx0XHRpZihub2RlLmlzU3ltYm9sTm9kZSkge1xuXHRcdFx0dmFyIG51bXB5cyA9IFtcInBpXCIsIFwic2luXCIsIFwiY29zXCIsIFwidGFuXCIsIFwiYXNpblwiLCBcImFjb3NcIiwgXCJhdGFuXCJdO1xuXHRcdFx0aWYobnVtcHlzLmluZGV4T2Yobm9kZS5uYW1lKSA+PSAwKSB7XG5cdFx0XHRcdHJldHVybiBcIm5wLlwiICsgbm9kZS5uYW1lO1xuXHRcdFx0fVxuXG5cdFx0XHRpZihzZWxmLnBhcmFtcy5pbmRleE9mKG5vZGUubmFtZSkgPj0gMCAmJiBoeWJyaWQpIHtcblx0XHRcdFx0cmV0dXJuIFwicGFyYW1zW1wiICsgc2VsZi5wYXJhbXMuaW5kZXhPZihub2RlLm5hbWUpICsgXCJdXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdHZhciBhZGp1c3RJZGVudGF0aW9uID0gZnVuY3Rpb24oYWRkU3RyLCBpZGVudCkge1xuXHRcdHZhciBzdHIgPSBcIlwiO1xuXG5cdFx0Ly8gYWRkIHVzZXIgZGVmaW5lZCBjb3N0IGZ1bmN0aW9uIHdpdGggcHJvcGVyIGlkZW50YXRpb25cblx0XHR2YXIgY2ZMaW5lcyA9IGFkZFN0ci5zcGxpdChcIlxcblwiKTtcblx0XHR2YXIgbWluSWRlbnQgPSAtMTtcblx0XHRjZkxpbmVzLm1hcChmdW5jdGlvbihjZkxpbmUpIHtcblx0XHRcdHZhciB0bXBJZGVudCA9IGNmTGluZS5zZWFyY2goL1xcUy8pO1xuXHRcdFx0aWYodG1wSWRlbnQgPj0gMCAmJiAobWluSWRlbnQgPCAwIHx8IHRtcElkZW50IDwgbWluSWRlbnQpKSB7XG5cdFx0XHRcdG1pbklkZW50ID0gdG1wSWRlbnQ7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRpZihtaW5JZGVudCA8IDApIHtcblx0XHRcdG1pbklkZW50ID0gMDtcblx0XHR9XG5cblx0XHR2YXIgYWRkSWRlbnQgPSBcIlwiO1xuXHRcdGlmKG1pbklkZW50IDwgaWRlbnQubGVuZ3RoKSB7XG5cdFx0XHRmb3IodmFyIHRtcCA9IDA7IHRtcCA8IChpZGVudC5sZW5ndGggLSBtaW5JZGVudCk7IHRtcCsrKSB7XG5cdFx0XHRcdGFkZElkZW50ICs9IFwiIFwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNmTGluZXMubWFwKGZ1bmN0aW9uKGNmTGluZSkge1xuXHRcdFx0c3RyICs9IGFkZElkZW50ICsgY2ZMaW5lICsgXCJcXG5cIjtcblx0XHR9KTtcblxuXHRcdHJldHVybiBzdHI7XG5cdH07XG5cblx0dmFyIGltcG9ydEdhdGVzID0gXCJcIjtcblx0dmFyIGRlZlBhcmFtcyA9IFtdO1xuXHR2YXIgZGVmR2F0ZXMgPSBcIlwiO1xuXHR2YXIgZGVmUnVuID0gXCJcIjtcblx0dmFyIGRlZkFycmF5cyA9IFwiXCI7XG5cdHZhciB1c2VkR2F0ZXMgPSBjaXJjdWl0LnVzZWRHYXRlcygpO1xuXHR2YXIgZ290TWVhc3VyZW1lbnQgPSBjaXJjdWl0LmdvdE1lYXN1cmVtZW50KCk7XG5cblx0dmFyIGRlZkdhdGVOYW1lcyA9IFtdO1xuXHR2YXIgZGVmQ2lyY05hbWVzID0gW107XG5cdHVzZWRHYXRlcy5tYXAoZnVuY3Rpb24odXNlZEdhdGVOYW1lKSB7XG5cdFx0dmFyIGJhc2ljR2F0ZSA9IGNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdGlmKGJhc2ljR2F0ZSkge1xuXHRcdFx0aWYoYmFzaWNHYXRlLmV4cG9ydEluZm8gJiYgYmFzaWNHYXRlLmV4cG9ydEluZm8ucHlxdWlsKSB7XG5cdFx0XHRcdHZhciBxdWlsSW5mbyA9IGJhc2ljR2F0ZS5leHBvcnRJbmZvLnB5cXVpbDtcblx0XHRcdFx0aWYocXVpbEluZm8uYXJyYXkpIHtcblxuXHRcdFx0XHRcdC8vIGRlZmdhdGVcblxuXHRcdFx0XHRcdHZhciBwYXJhbUxpc3QgPSBcIlwiO1xuXHRcdFx0XHRcdGlmKHF1aWxJbmZvLnBhcmFtcykge1xuXHRcdFx0XHRcdFx0cGFyYW1MaXN0ICs9IFwiLCBbXCI7XG5cdFx0XHRcdFx0XHRxdWlsSW5mby5wYXJhbXMubWFwKGZ1bmN0aW9uKHBhcmFtTmFtZSwgcGFyYW1JbmRleCkge1xuXHRcdFx0XHRcdFx0XHRpZihwYXJhbUluZGV4ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdHBhcmFtTGlzdCArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cGFyYW1MaXN0ICs9IFwicF9cIiArIHBhcmFtTmFtZTtcblx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtVGV4dCA9IFwicF9cIiArIHBhcmFtTmFtZSArIFwiID0gUGFyYW1ldGVyKFxcJ1wiICsgcGFyYW1OYW1lICsgXCJcXCcpXCI7XG5cdFx0XHRcdFx0XHRcdGlmKGRlZlBhcmFtcy5pbmRleE9mKHBhcmFtVGV4dCkgPCAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0ZGVmUGFyYW1zLnB1c2gocGFyYW1UZXh0KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRwYXJhbUxpc3QgKz0gXCJdXCI7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZGVmUnVuICs9IFwicC5pbnN0KFwiICsgcXVpbEluZm8ubmFtZSArIFwiX2RlZmdhdGUpXFxuXCI7XG5cdFx0XHRcdFx0ZGVmQXJyYXlzICs9IHF1aWxJbmZvLm5hbWUgKyBcIl9hcnJheSA9IG5wLmFycmF5KFwiICsgcXVpbEluZm8uYXJyYXkgKyBcIilcXG5cIjtcblx0XHRcdFx0XHRkZWZHYXRlcyArPSBxdWlsSW5mby5uYW1lICsgXCJfZGVmZ2F0ZSA9IERlZkdhdGUoXFwnXCIgKyBxdWlsSW5mby5uYW1lICsgXCJcXCcsIFwiICsgcXVpbEluZm8ubmFtZSArIFwiX2FycmF5XCIgKyBwYXJhbUxpc3QgKyBcIilcXG5cIjtcblx0XHRcdFx0XHRkZWZHYXRlcyArPSBxdWlsSW5mby5uYW1lICsgXCIgPSBcIiArIHF1aWxJbmZvLm5hbWUgKyBcIl9kZWZnYXRlLmdldF9jb25zdHJ1Y3RvcigpXFxuXCI7XG5cblx0XHRcdFx0XHRkZWZHYXRlTmFtZXMucHVzaChxdWlsSW5mby5uYW1lKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YXIgaW1wb3J0TmFtZSA9IFwiXCI7XG5cdFx0XHRcdFx0aWYocXVpbEluZm8ucmVwbGFjZW1lbnQpIHtcblx0XHRcdFx0XHRcdHZhciBiZyA9IGNpcmN1aXQuYmFzaWNHYXRlc1txdWlsSW5mby5yZXBsYWNlbWVudC5uYW1lXTtcblx0XHRcdFx0XHRcdGlmKGJnKSB7XG5cdFx0XHRcdFx0XHRcdGlmKGJnLmV4cG9ydEluZm8pIHtcblx0XHRcdFx0XHRcdFx0XHRpZihiZy5leHBvcnRJbmZvLnB5cXVpbCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aW1wb3J0TmFtZSA9IGJnLmV4cG9ydEluZm8ucHlxdWlsLm5hbWU7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGJnLmV4cG9ydEluZm8ucXVpbCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpbXBvcnROYW1lID0gYmcuZXhwb3J0SW5mby5xdWlsLm5hbWU7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGltcG9ydE5hbWUgPSBxdWlsSW5mby5uYW1lO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKGltcG9ydE5hbWUpIHtcblx0XHRcdFx0XHRcdGlmKGltcG9ydEdhdGVzKSB7XG5cdFx0XHRcdFx0XHRcdGltcG9ydEdhdGVzICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGltcG9ydEdhdGVzICs9IGltcG9ydE5hbWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZihiYXNpY0dhdGUuZXhwb3J0SW5mbyAmJiBiYXNpY0dhdGUuZXhwb3J0SW5mby5xdWlsKSB7XG5cdFx0XHRcdFx0dmFyIHF1aWxJbmZvID0gYmFzaWNHYXRlLmV4cG9ydEluZm8ucXVpbDtcblxuXHRcdFx0XHRcdGlmKCFxdWlsSW5mby5kZWZnYXRlKSB7XG5cblx0XHRcdFx0XHRcdHZhciBpbXBvcnROYW1lID0gXCJcIjtcblx0XHRcdFx0XHRcdGlmKHF1aWxJbmZvLnJlcGxhY2VtZW50KSB7XG5cdFx0XHRcdFx0XHRcdHZhciBiZyA9IGNpcmN1aXQuYmFzaWNHYXRlc1txdWlsSW5mby5yZXBsYWNlbWVudC5uYW1lXTtcblx0XHRcdFx0XHRcdFx0aWYoYmcpIHtcblx0XHRcdFx0XHRcdFx0XHRpZihiZy5leHBvcnRJbmZvKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihiZy5leHBvcnRJbmZvLnB5cXVpbCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpbXBvcnROYW1lID0gYmcuZXhwb3J0SW5mby5weXF1aWwubmFtZTtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGJnLmV4cG9ydEluZm8ucXVpbCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGltcG9ydE5hbWUgPSBiZy5leHBvcnRJbmZvLnF1aWwubmFtZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0aW1wb3J0TmFtZSA9IHF1aWxJbmZvLm5hbWU7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKGltcG9ydE5hbWUpIHtcblx0XHRcdFx0XHRcdFx0aWYoaW1wb3J0R2F0ZXMpIHtcblx0XHRcdFx0XHRcdFx0XHRpbXBvcnRHYXRlcyArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aW1wb3J0R2F0ZXMgKz0gaW1wb3J0TmFtZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBiYXNpYyBnYXRlIG5vdCBzdXBwb3J0ZWQgYnkgcHlxdWlsXG5cdFx0XHRcdFx0Ly8gVE9ETzogYWRkIHB5cXVpbCBkZWZpbmUgZ2F0ZSBjb2RlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdC8vIGltcG9ydCBNT1ZFLCBBTkQsIE9SIGlmIGNpcmN1aXQgaGFzIGNvbmRpdGlvbnNcblx0dmFyIGdvdENvbmRpdGlvbnMgPSBjaXJjdWl0LmdvdENsYXNzaWNhbENvbnRyb2woKTtcblx0aWYoZ290Q29uZGl0aW9ucykge1xuXHRcdGlmKGltcG9ydEdhdGVzKSB7XG5cdFx0XHRpbXBvcnRHYXRlcyArPSBcIiwgXCI7XG5cdFx0fVxuXHRcdGlmKHZlcnNpb24gPCAyKSB7XG5cdFx0XHRpbXBvcnRHYXRlcyArPSBcIkZBTFNFLCBOT1QsIE9SLCBBTkRcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aW1wb3J0R2F0ZXMgKz0gXCJNT1ZFLCBOT1QsIElPUiwgQU5EXCI7XG5cdFx0fVxuXHR9XG5cblx0dmFyIGltcG9ydHNGb3JEZWZnYXRlID0gXCJcIjtcblx0aWYoZGVmR2F0ZXMpIHtcblx0XHRpZih2ZXJzaW9uIDwgMi4xMikge1xuXHRcdFx0aW1wb3J0c0ZvckRlZmdhdGUgPSBcImZyb20gcHlxdWlsLnBhcmFtZXRlcnMgaW1wb3J0IFBhcmFtZXRlciwgcXVpbF9zaW4sIHF1aWxfY29zLCBxdWlsX3NxcnQsIHF1aWxfZXhwLCBxdWlsX2Npc1xcbmZyb20gcHlxdWlsLnF1aWxiYXNlIGltcG9ydCBEZWZHYXRlXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGltcG9ydHNGb3JEZWZnYXRlID0gXCJmcm9tIHB5cXVpbC5xdWlsYXRvbSBpbXBvcnQgUGFyYW1ldGVyLCBxdWlsX3NpbiwgcXVpbF9jb3MsIHF1aWxfc3FydCwgcXVpbF9leHAsIHF1aWxfY2lzXFxuZnJvbSBweXF1aWwucXVpbGJhc2UgaW1wb3J0IERlZkdhdGVcIjtcdFx0XHRcblx0XHR9XG5cdH1cblxuXHR2YXIgcHlxdWlsID0gXCJcIjtcblxuXHQvLyBjb21tZW50XG5cdGlmKGNvbW1lbnQpIHtcblx0XHR2YXIgY29tbSA9IChjb21tZW50IHx8IFwiXCIpLnNwbGl0KFwiXFxuXCIpO1xuXHRcdGNvbW0ubWFwKGZ1bmN0aW9uKGNsaW5lKSB7XG5cdFx0XHRpZihjbGluZS5sZW5ndGggPj0gMSAmJiBjbGluZVswXSAhPSBcIiNcIikge1xuXHRcdFx0XHRweXF1aWwgKz0gXCIjIFwiO1xuXHRcdFx0fVxuXHRcdFx0cHlxdWlsICs9IGNsaW5lO1xuXHRcdFx0cHlxdWlsICs9IFwiXFxuXCI7XG5cdFx0fSk7XG5cdH1cblxuXHR2YXIgaW5kZW50ID0gXCJcIjtcblx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdHZhciBhcmdzID0gXCJcIjtcblx0XHR2YXIgYXJnQ291bnQgPSAwO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBjaXJjdWl0LnBhcmFtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdGFyZ3MgKz0gXCIsIFwiO1xuXHRcdFx0fVxuXHRcdFx0YXJncyArPSBjaXJjdWl0LnBhcmFtc1tpXTtcblx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0fVxuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBjaXJjdWl0Lm51bVF1Yml0czsgaSsrKSB7XG5cdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0YXJncyArPSBcIiwgXCI7XG5cdFx0XHR9XG5cdFx0XHRhcmdzICs9IFwicVwiICsgaTtcblx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0fVxuXHRcdHB5cXVpbCArPSBcImRlZiBcIiArIGV4cG9ydEFzR2F0ZU5hbWUgKyAoYXJncyA/IFwiKFwiICsgYXJncyArIFwiKVwiIDogXCJcIikgKyBcIjpcXG5cIjtcblx0XHRpbmRlbnQgPSBcIiAgXCI7XG5cdH0gZWxzZSB7XG5cdFx0aWYodmVyc2lvbiA8IDIpIHtcblx0XHRcdHB5cXVpbCArPSBcImZyb20gcHlxdWlsLmFwaSBpbXBvcnQgUVZNQ29ubmVjdGlvblxcblwiO1xuXHRcdFx0cHlxdWlsICs9IFwiZnJvbSBweXF1aWwucXVpbCBpbXBvcnQgUHJvZ3JhbVxcblwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRweXF1aWwgKz0gXCJmcm9tIHB5cXVpbCBpbXBvcnQgUHJvZ3JhbSwgZ2V0X3FjXFxuXCI7XG5cdFx0fVxuXG5cdFx0aWYoaW1wb3J0R2F0ZXMpIHtcblx0XHRcdHB5cXVpbCArPSBcImZyb20gcHlxdWlsLmdhdGVzIGltcG9ydCBcIiArIGltcG9ydEdhdGVzICsgXCJcXG5cIjtcblx0XHR9XG5cdFx0aWYoaW1wb3J0c0ZvckRlZmdhdGUpIHtcblx0XHRcdHB5cXVpbCArPSBpbXBvcnRzRm9yRGVmZ2F0ZSArIFwiXFxuXCI7XG5cdFx0fVxuXG5cdFx0cHlxdWlsICs9IFwiZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHJlZHVjZVxcblwiO1xuXG5cdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRweXF1aWwgKz0gXCJmcm9tIHNjaXB5Lm9wdGltaXplIGltcG9ydCBtaW5pbWl6ZVxcblwiO1xuXHRcdFx0cHlxdWlsICs9IFwiZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgQ291bnRlclxcblwiO1xuXG5cdFx0fVxuXG5cdFx0cHlxdWlsICs9IFwiaW1wb3J0IG51bXB5IGFzIG5wXFxuXCI7XG5cblxuXHRcdGlmKHNob3RzKSB7XG5cdFx0XHRweXF1aWwgKz0gXCJcXG5cIjtcblx0XHRcdHB5cXVpbCArPSBcInNob3RzID0gXCIgKyBzaG90cyArIFwiXFxuXCI7XG5cdFx0fVxuXG5cdFx0dmFyIGdsb2JhbFBhcmFtcyA9IHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMucGFyYW1zID8gdGhpcy5vcHRpb25zLnBhcmFtcyA6IHt9O1xuXHRcdGlmKHRoaXMucGFyYW1zLmxlbmd0aCkge1xuXHRcdFx0cHlxdWlsICs9IFwiXFxuXCI7XG5cdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXJhbXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0dmFyIGdsb2JhbFBhcmFtTmFtZSA9IHRoaXMucGFyYW1zW2ldO1xuXG5cdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnbG9iYWxQYXJhbXNbZ2xvYmFsUGFyYW1OYW1lXSk7XG5cdFx0XHRcdHZhciBnbG9iYWxQYXJhbVZhbHVlID0gbm9kZS50b1N0cmluZyh7IGhhbmRsZXI6IG1hdGhUb1N0cmluZ0hhbmRsZXIgfSk7XG5cblx0XHRcdFx0cHlxdWlsICs9IGdsb2JhbFBhcmFtTmFtZSArIFwiID0gXCIgKyBnbG9iYWxQYXJhbVZhbHVlICsgXCJcXG5cIjtcblx0XHRcdH1cblx0XHRcdHB5cXVpbCArPSBcIlxcblwiO1xuXHRcdH1cblxuXHRcdGlmKGh5YnJpZCkge1xuXHRcdFx0cHlxdWlsICs9IFwidG9sZXJhbmNlID0gXCIgKyAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLnRvbGVyYW5jZSA/IHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLnRvbGVyYW5jZSB8fCBcIjAuMDAxXCIgOiBcIjAuMDAxXCIpICsgXCJcXG5cIjtcblx0XHRcdHB5cXVpbCArPSBcIlxcblwiO1xuXHRcdH1cblxuXHRcdGlmKGRlZkdhdGVzKSB7XG5cdFx0XHRkZWZQYXJhbXMubWFwKGZ1bmN0aW9uKGRlZlBhcmFtSXRlbSwgZGVmSW5kZXgpIHtcblx0XHRcdFx0aWYoZGVmSW5kZXggPT0gMCkge1xuXHRcdFx0XHRcdHB5cXVpbCArPSBcIlxcblwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHB5cXVpbCArPSBkZWZQYXJhbUl0ZW0gKyBcIlxcblwiO1xuXHRcdFx0fSk7XG5cdFx0XHRweXF1aWwgKz0gXCJcXG5cIjtcblx0XHRcdHB5cXVpbCArPSBkZWZBcnJheXMgKyBcIlxcblwiO1xuXHRcdFx0cHlxdWlsICs9IFwiXFxuXCI7XG5cdFx0XHRweXF1aWwgKz0gZGVmR2F0ZXMgKyBcIlxcblwiO1xuXHRcdH1cblx0XHRweXF1aWwgKz0gXCJcXG5cIjtcblxuXHRcdHZhciB1c2VkR2F0ZXMgPSBjaXJjdWl0LnVzZWRHYXRlcygpO1xuXHRcdGlmKCFkZWNvbXBvc2UpIHtcblx0XHRcdHVzZWRHYXRlcy5tYXAoZnVuY3Rpb24odXNlZEdhdGVOYW1lKSB7XG5cdFx0XHRcdHZhciBiYXNpY0dhdGUgPSBjaXJjdWl0LmJhc2ljR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRcdFx0aWYoIWJhc2ljR2F0ZSkge1xuXHRcdFx0XHRcdHZhciBjdXN0b21HYXRlID0gc2VsZi5jdXN0b21HYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0XHRcdGlmKGN1c3RvbUdhdGUpIHtcblx0XHRcdFx0XHRcdHZhciBjdXN0b21DaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdFx0XHRcdFx0XHRjdXN0b21DaXJjdWl0LmxvYWQoY3VzdG9tR2F0ZSk7XG5cdFx0XHRcdFx0XHR2YXIgbmV3T3B0aW9ucyA9IHtcblx0XHRcdFx0XHRcdFx0Y29tbWVudDogXCJcIixcblx0XHRcdFx0XHRcdFx0ZGVjb21wb3NlOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0dmVyc2lvblN0cjogdmVyc2lvblN0cixcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gY3VzdG9tQ2lyY3VpdC5leHBvcnRUb1B5cXVpbChuZXdPcHRpb25zLCB1c2VkR2F0ZU5hbWUpO1xuXHRcdFx0XHRcdFx0ZGVmQ2lyY05hbWVzLnB1c2godXNlZEdhdGVOYW1lKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdGlmKGh5YnJpZCkge1xuXHRcdGluZGVudCArPSBcIiAgXCI7XG5cblx0XHRweXF1aWwgKz0gXCJkZWYgb2JqZWN0aXZlX2Z1bmN0aW9uKHBhcmFtcyk6XFxuXCJcblx0fVxuXG5cdGlmKHZlcnNpb24gPj0gMiAmJiAhZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdGlmKGFzUVZNIHx8IGxhdHRpY2UpIHtcblx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAgPSBQcm9ncmFtKCdQUkFHTUEgSU5JVElBTF9SRVdJUklORyBcXFwiUEFSVElBTFxcXCInKVxcblxcblwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJwID0gUHJvZ3JhbSgpXFxuXFxuXCI7XG5cdFx0fVxuXG5cdFx0dmFyIHRvdGFsQml0cyA9IGNpcmN1aXQuY3JlZ1RvdGFsQml0cygpO1xuXHRcdGlmKGdvdENvbmRpdGlvbnMpIHtcblx0XHRcdHRvdGFsQml0cyArPSAxO1xuXHRcdH07XG5cdFx0aWYodG90YWxCaXRzKSB7XG5cdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJybyA9IHAuZGVjbGFyZSgncm8nLCBtZW1vcnlfdHlwZT0nQklUJywgbWVtb3J5X3NpemU9XCIgKyB0b3RhbEJpdHMgKyBcIilcXG5cIjtcblx0XHRcdHB5cXVpbCArPSBcIlxcblwiO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJwID0gUHJvZ3JhbSgpXFxuXFxuXCI7XG5cdH1cblxuXHRweXF1aWwgKz0gZGVmUnVuID8gKGluZGVudCArIGRlZlJ1biArIFwiXFxuXCIpIDogXCJcIjtcblxuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IGNpcmN1aXQubnVtQ29scygpOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBjaXJjdWl0Lm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGNpcmN1aXQuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0dmFyIGdhdGVEZWYgPSBjaXJjdWl0LmdldEdhdGVEZWYoZ2F0ZS5uYW1lKTtcblx0XHRcdFx0dmFyIGdhdGVQYXJhbXMgPSBnYXRlUGFyYW1zID0gZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5wYXJhbXMgPyBnYXRlLm9wdGlvbnMucGFyYW1zIDoge307XG5cdFx0XHRcdHZhciBxdWlsSW5mbyA9IG51bGw7XG5cdFx0XHRcdGlmKGdhdGVEZWYpIHtcblx0XHRcdFx0XHRpZihnYXRlRGVmLmV4cG9ydEluZm8pIHtcblx0XHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mby5weXF1aWwgJiYgZ2F0ZURlZi5leHBvcnRJbmZvLnB5cXVpbC5yZXBsYWNlbWVudCkge1xuXHRcdFx0XHRcdFx0XHRpZihnYXRlRGVmLmV4cG9ydEluZm8ucHlxdWlsLnJlcGxhY2VtZW50LnBhcmFtcykge1xuXHRcdFx0XHRcdFx0XHRcdGdhdGVQYXJhbXMgPSBnYXRlRGVmLmV4cG9ydEluZm8ucHlxdWlsLnJlcGxhY2VtZW50LnBhcmFtcztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRnYXRlRGVmID0gY2lyY3VpdC5nZXRHYXRlRGVmKGdhdGVEZWYuZXhwb3J0SW5mby5weXF1aWwucmVwbGFjZW1lbnQubmFtZSk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRpZihnYXRlRGVmLmV4cG9ydEluZm8ucXVpbCAmJiBnYXRlRGVmLmV4cG9ydEluZm8ucXVpbC5yZXBsYWNlbWVudCkge1xuXHRcdFx0XHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mby5xdWlsLnJlcGxhY2VtZW50LnBhcmFtcykge1xuXHRcdFx0XHRcdFx0XHRcdFx0Z2F0ZVBhcmFtcyA9IGdhdGVEZWYuZXhwb3J0SW5mby5xdWlsLnJlcGxhY2VtZW50LnBhcmFtcztcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0Z2F0ZURlZiA9IGNpcmN1aXQuZ2V0R2F0ZURlZihnYXRlRGVmLmV4cG9ydEluZm8ucXVpbC5yZXBsYWNlbWVudC5uYW1lKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZihnYXRlRGVmICYmIGdhdGVEZWYuZXhwb3J0SW5mbykge1xuXHRcdFx0XHRcdFx0XHRpZihnYXRlRGVmLmV4cG9ydEluZm8ucHlxdWlsKSB7XG5cdFx0XHRcdFx0XHRcdFx0cXVpbEluZm8gPSBnYXRlRGVmLmV4cG9ydEluZm8ucHlxdWlsO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mby5xdWlsKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRxdWlsSW5mbyA9IGdhdGVEZWYuZXhwb3J0SW5mby5xdWlsO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHZhciBpc0RlZkdhdGUgPSBmYWxzZTtcblx0XHRcdFx0XHR2YXIgaXNEZWZDaXJjID0gZmFsc2U7XG5cdFx0XHRcdFx0aWYocXVpbEluZm8pIHtcblx0XHRcdFx0XHRcdGlzRGVmR2F0ZSA9IGRlZkdhdGVOYW1lcy5pbmRleE9mKHF1aWxJbmZvLm5hbWUpID49IDA7XG5cdFx0XHRcdFx0XHRpc0RlZkNpcmMgPSBkZWZDaXJjTmFtZXMuaW5kZXhPZihxdWlsSW5mby5uYW1lKSA+PSAwO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpc0RlZkdhdGUgPSBkZWZHYXRlTmFtZXMuaW5kZXhPZihnYXRlLm5hbWUpID49IDA7XG5cdFx0XHRcdFx0XHRpc0RlZkNpcmMgPSBkZWZDaXJjTmFtZXMuaW5kZXhPZihnYXRlLm5hbWUpID49IDA7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dmFyIGluc2lkZUNvbnRyb2wgPSBmYWxzZTtcblx0XHRcdFx0XHRpZihnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcpIHtcblx0XHRcdFx0XHRcdC8vIC0tLVxuXHRcdFx0XHRcdFx0Ly8gRmxvdyBjb250cm9sXG5cdFx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHRcdGluc2lkZUNvbnRyb2wgPSB0cnVlO1xuXHRcdFx0XHRcdFx0cHlxdWlsICs9IFwiXFxuXCI7XG5cblx0XHRcdFx0XHRcdHZhciB0ZXN0Qml0ID0gc2VsZi5jcmVnVG90YWxCaXRzKCk7XG5cdFx0XHRcdFx0XHR2YXIgY29uZGl0aW9uID0gZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbjtcblx0XHRcdFx0XHRcdHZhciBjb25kaXRpb25WYWx1ZSA9IGNvbmRpdGlvbi52YWx1ZSB8fCAwO1xuXHRcdFx0XHRcdFx0dmFyIGNyZWdCYXNlID0gc2VsZi5jcmVnQmFzZShjb25kaXRpb24uY3JlZyk7XG5cblx0XHRcdFx0XHRcdGlmKGNvbmRpdGlvblZhbHVlID09IDApIHtcblx0XHRcdFx0XHRcdFx0dmFyIGNyZWdTaXplID0gc2VsZi5jcmVnc1tjb25kaXRpb24uY3JlZ10ubGVuZ3RoO1xuXHRcdFx0XHRcdFx0XHRpZih2ZXJzaW9uIDwgMikge1xuXHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAuaW5zdChGQUxTRShcIiArIHRlc3RCaXQgKyBcIikpXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBiaXRJbmRleCA9IDA7IGJpdEluZGV4IDwgY3JlZ1NpemU7IGJpdEluZGV4KyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAuaW5zdChPUihcIiArIChiaXRJbmRleCArIGNyZWdCYXNlKSArIFwiLCBcIiArIHRlc3RCaXQgKyBcIikpXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAuaW5zdChOT1QoXCIgKyB0ZXN0Qml0ICsgXCIpKVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAuaWZfdGhlbihcIiArIHRlc3RCaXQgKyBcIiwgUHJvZ3JhbShcIjtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJwLmluc3QoTU9WRShyb1tcIiArIHRlc3RCaXQgKyBcIl0sIDApKVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgYml0SW5kZXggPSAwOyBiaXRJbmRleCA8IGNyZWdTaXplOyBiaXRJbmRleCsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJwLmluc3QoSU9SKHJvW1wiICsgdGVzdEJpdCArIFwiXSwgcm9bXCIgKyAoYml0SW5kZXggKyBjcmVnQmFzZSkgKyBcIl0pKVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJwLmluc3QoTk9UKHJvW1wiICsgdGVzdEJpdCArIFwiXSkpXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicC5pZl90aGVuKHJvW1wiICsgdGVzdEJpdCArIFwiXSwgUHJvZ3JhbShcIjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dmFyIGJpdFN0ciA9IGNvbmRpdGlvblZhbHVlLnRvU3RyaW5nKDIpLnNwbGl0KFwiXCIpLnJldmVyc2UoKTtcblx0XHRcdFx0XHRcdFx0dmFyIGJpdENvdW50ID0gMDtcblx0XHRcdFx0XHRcdFx0dmFyIHNpbmdsZUJpdEluZGV4ID0gMDtcblx0XHRcdFx0XHRcdFx0Yml0U3RyLm1hcChmdW5jdGlvbihiaXRWYWx1ZSwgYml0SW5kZXgpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgYml0VmFsID0gcGFyc2VJbnQoYml0VmFsdWUpO1xuXHRcdFx0XHRcdFx0XHRcdGJpdFN0cltiaXRJbmRleF0gPSBiaXRWYWw7XG5cdFx0XHRcdFx0XHRcdFx0aWYoYml0VmFsKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRiaXRDb3VudCsrO1xuXHRcdFx0XHRcdFx0XHRcdFx0c2luZ2xlQml0SW5kZXggPSBiaXRJbmRleDtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRcdGlmKGJpdENvdW50ID09IDEpIHtcblx0XHRcdFx0XHRcdFx0XHRpZih2ZXJzaW9uIDwgMikge1xuXHRcdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicC5pZl90aGVuKFwiICsgKHNpbmdsZUJpdEluZGV4ICsgY3JlZ0Jhc2UpICsgXCIsIFByb2dyYW0oXCI7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAuaWZfdGhlbihyb1tcIiArIChzaW5nbGVCaXRJbmRleCArIGNyZWdCYXNlKSArIFwiXSwgUHJvZ3JhbShcIjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYodmVyc2lvbiA8IDIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAuaW5zdChGQUxTRShcIiArIHRlc3RCaXQgKyBcIikpXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgZmlyc3RTZXQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0Yml0U3RyLm1hcChmdW5jdGlvbihiaXRWYWx1ZSwgYml0SW5kZXgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYml0VmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihmaXJzdFNldCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zmlyc3RTZXQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAuaW5zdChPUihcIiArIChiaXRJbmRleCArIGNyZWdCYXNlKSArIFwiLCBcIiArIHRlc3RCaXQgKyBcIikpXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAuaW5zdChBTkQoXCIgKyAoYml0SW5kZXggKyBjcmVnQmFzZSkgKyBcIiwgXCIgKyB0ZXN0Qml0ICsgXCIpKVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJwLmlmX3RoZW4oXCIgKyB0ZXN0Qml0ICsgXCIsIFByb2dyYW0oXCI7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAuaW5zdChNT1ZFKHJvW1wiICsgdGVzdEJpdCArIFwiXSwgMCkpXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgZmlyc3RTZXQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0Yml0U3RyLm1hcChmdW5jdGlvbihiaXRWYWx1ZSwgYml0SW5kZXgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYml0VmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihmaXJzdFNldCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zmlyc3RTZXQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAuaW5zdChJT1Iocm9bXCIgKyB0ZXN0Qml0ICsgXCJdLCByb1tcIiArIChiaXRJbmRleCArIGNyZWdCYXNlKSArIFwiXSkpXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAuaW5zdChBTkQocm9bXCIgKyB0ZXN0Qml0ICsgXCJdLCByb1tcIiArIChiaXRJbmRleCArIGNyZWdCYXNlKSArIFwiXSkpXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAuaWZfdGhlbihyb1tcIiArIHRlc3RCaXQgKyBcIl0sIFByb2dyYW0oXCI7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicC5pbnN0KFwiO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKHF1aWxJbmZvKSB7XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gcXVpbEluZm8ubmFtZTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGdhdGUubmFtZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR2YXIgZ290T3BlbkJyYWNlID0gZmFsc2U7XG5cdFx0XHRcdFx0aWYocXVpbEluZm8gJiYgcXVpbEluZm8ucGFyYW1zICYmIHF1aWxJbmZvLnBhcmFtcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdHZhciBhcmdDb3VudCA9IDA7XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gXCIoXCI7XG5cdFx0XHRcdFx0XHRnb3RPcGVuQnJhY2UgPSB0cnVlO1xuXHRcdFx0XHRcdFx0Zm9yKHZhciBwID0gMDsgcCA8IHF1aWxJbmZvLnBhcmFtcy5sZW5ndGg7IHArKykge1xuXHRcdFx0XHRcdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0Ly8gLS0tXG5cdFx0XHRcdFx0XHRcdC8vIHByZXBlbmQgJ25wJyB0byBtYXRoIGNvbnN0YW50c1xuXHRcdFx0XHRcdFx0XHRpZih0eXBlb2YgZ2F0ZVBhcmFtc1txdWlsSW5mby5wYXJhbXNbcF1dICE9IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgbm9kZSA9IG1hdGgucGFyc2UoZ2F0ZVBhcmFtc1txdWlsSW5mby5wYXJhbXNbcF1dKTtcblx0XHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gbm9kZS50b1N0cmluZyh7IGhhbmRsZXI6IG1hdGhUb1N0cmluZ0hhbmRsZXIgfSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Ly8gLS0tXG5cblx0XHRcdFx0XHRcdFx0YXJnQ291bnQrKztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmKHZlcnNpb24gPCAyIHx8IGlzRGVmR2F0ZSkge1xuXHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gXCIpXCI7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpZihnYXRlRGVmICYmIGdhdGVEZWYucGFyYW1zICYmIGdhdGVEZWYucGFyYW1zLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgYXJnQ291bnQgPSAwO1xuXHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gXCIoXCI7XG5cdFx0XHRcdFx0XHRcdGdvdE9wZW5CcmFjZSA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdGZvcih2YXIgcCA9IDA7IHAgPCBnYXRlRGVmLnBhcmFtcy5sZW5ndGg7IHArKykge1xuXHRcdFx0XHRcdFx0XHRcdGlmKGFyZ0NvdW50ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHRcdFx0XHQvLyBwcmVwZW5kICducCcgdG8gbWF0aCBjb25zdGFudHNcblx0XHRcdFx0XHRcdFx0XHRpZih0eXBlb2YgZ2F0ZVBhcmFtc1tnYXRlRGVmLnBhcmFtc1twXV0gIT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIG5vZGUgPSBtYXRoLnBhcnNlKGdhdGVQYXJhbXNbZ2F0ZURlZi5wYXJhbXNbcF1dKTtcblx0XHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBub2RlLnRvU3RyaW5nKHsgaGFuZGxlcjogbWF0aFRvU3RyaW5nSGFuZGxlciB9KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0Ly8gLS0tXG5cblx0XHRcdFx0XHRcdFx0XHRhcmdDb3VudCsrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGlmKHZlcnNpb24gPCAyIHx8IGlzRGVmR2F0ZSkge1xuXHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIilcIjtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYoZ2F0ZS53aXJlcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdHZhciBhcmdDb3VudCA9IDA7XG5cdFx0XHRcdFx0XHRpZih2ZXJzaW9uIDwgMiB8fCAhZ290T3BlbkJyYWNlIHx8IGlzRGVmR2F0ZSkge1xuXHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gXCIoXCI7XG5cdFx0XHRcdFx0XHRcdGdvdE9wZW5CcmFjZSA9IHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRmb3IodmFyIHcgPSAwOyB3IDwgZ2F0ZS53aXJlcy5sZW5ndGg7IHcrKykge1xuXHRcdFx0XHRcdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBcInFcIiArIGdhdGUud2lyZXNbd107XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IFwiXCIgKyBnYXRlLndpcmVzW3ddO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0YXJnQ291bnQrKztcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYoZ2F0ZS5uYW1lID09IFwibWVhc3VyZVwiICYmIGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY3JlZykge1xuXHRcdFx0XHRcdFx0XHR2YXIgdGFyZ2V0Qml0ID0gcGFyc2VJbnQoZ2F0ZS5vcHRpb25zLmNyZWcuYml0KSB8fCAwO1xuXHRcdFx0XHRcdFx0XHRpZihpc05hTih0YXJnZXRCaXQpKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGFyZ2V0Qml0ID0gMDtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmKGFyZ0NvdW50ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpZih2ZXJzaW9uIDwgMikge1xuXHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSAodGFyZ2V0Qml0ICsgc2VsZi5jcmVnQmFzZShnYXRlLm9wdGlvbnMuY3JlZy5uYW1lKSk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IFwicm9bXCIgKyAodGFyZ2V0Qml0ICsgc2VsZi5jcmVnQmFzZShnYXRlLm9wdGlvbnMuY3JlZy5uYW1lKSkgKyBcIl1cIjtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gXCIpXCI7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cHlxdWlsICs9IFwiKVwiO1xuXHRcdFx0XHRcdGlmKGluc2lkZUNvbnRyb2wpIHtcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIilcXG5cIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cHlxdWlsICs9IFwiXFxuXCI7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gdW5rbm93biBnYXRlP1xuXHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcIiMgRXhwb3J0IHRvIHB5cXVpbCBXQVJOSU5HOiB1bmtub3duIGdhdGUgXFxcIlwiICsgZ2F0ZS5uYW1lICsgXCJcXFwiLlwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInJldHVybiBwXFxuXCI7XG5cdFx0cHlxdWlsICs9IFwiXFxuXCI7XG5cdH0gZWxzZSB7XG5cdFx0cHlxdWlsICs9IFwiXFxuXCI7XG5cdFx0aWYodmVyc2lvbiA8IDIpIHtcblx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInF2bSA9IFFWTUNvbm5lY3Rpb24oKVxcblwiO1xuXG5cdFx0XHRpZihoeWJyaWQpIHtcblx0XHRcdFx0cHlxdWlsICs9IFwiXFxuXCJcblxuXHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCIjIENBTENVTEFURSBDT1NUIEhFUkVcXG5cIjtcblxuXHRcdFx0XHR2YXIgY29zdEZ1bmN0aW9uID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLmNvc3RGdW5jdGlvbiA/IHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLmNvc3RGdW5jdGlvbi5weXRob24gfHwgXCJcIiA6IFwiXCI7XG5cdFx0XHRcdGlmKCFjb3N0RnVuY3Rpb24udHJpbSgpKSB7XG5cdFx0XHRcdFx0Y29zdEZ1bmN0aW9uID0gXCJjb3N0ID0gMFwiO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cHlxdWlsICs9IGFkanVzdElkZW50YXRpb24oY29zdEZ1bmN0aW9uLCBpbmRlbnQpO1xuXG5cdFx0XHRcdHB5cXVpbCArPSBcIlxcblwiXG5cdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInJldHVybiBjb3N0XFxuXCJcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInByaW50KHF2bS5ydW4ocCkpXFxuXCI7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmKHNob3RzKSB7XG5cdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAud3JhcF9pbl9udW1zaG90c19sb29wKHNob3RzKVxcblwiO1xuXHRcdFx0XHRweXF1aWwgKz0gXCJcXG5cIjtcblx0XHRcdH1cblxuXHRcdFx0dmFyIGxhdHRpY2VOYW1lID0gbGF0dGljZTtcblx0XHRcdGlmKCFsYXR0aWNlTmFtZSkge1xuXHRcdFx0XHRpZih2ZXJzaW9uIDwgMi4xKSB7XG5cdFx0XHRcdFx0bGF0dGljZU5hbWUgPSB0aGlzLm51bVF1Yml0cyArIFwicS1nZW5lcmljLXF2bVwiO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGxhdHRpY2VOYW1lID0gdGhpcy5udW1RdWJpdHMgKyBcInEtcXZtXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicWMgPSBnZXRfcWMoJ1wiICsgbGF0dGljZU5hbWUgKyBcIidcIiArIChsYXR0aWNlID8gKFwiLCBhc19xdm09XCIgKyAoYXNRVk0gPyBcIlRydWVcIiA6IFwiRmFsc2VcIikpIDogXCJcIikgKyBcIilcXG5cIjtcblxuXHRcdFx0aWYobGF0dGljZSkge1xuXHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJlcCA9IHFjLmNvbXBpbGUocClcXG5cIjtcblxuXHRcdFx0XHRpZihnb3RNZWFzdXJlbWVudCkge1xuXG5cdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicmVzdWx0c19saXN0ID0gcWMucnVuKGVwKS5yZWFkb3V0X2RhdGEuZ2V0KFxcXCJyb1xcXCIpXFxuXCI7XG5cdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicmVzdWx0cyA9IGxpc3QobWFwKGxhbWJkYSBhcnI6IHJlZHVjZShsYW1iZGEgeCwgeTogc3RyKHgpICsgc3RyKHkpLCBhcnJbOjotMV0sIFxcXCJcXFwiKSwgcmVzdWx0c19saXN0KSlcXG5cIjtcblxuXHRcdFx0XHRcdGlmKGh5YnJpZCkge1xuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwiY291bnRzID0gQ291bnRlcihkaWN0KHppcChyZXN1bHRzLFtyZXN1bHRzLmNvdW50KGkpIGZvciBpIGluIHJlc3VsdHNdKSkpXFxuXCI7XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gXCJcXG5cIlxuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwiIyBDQUxDVUxBVEUgQ09TVCBIRVJFXFxuXCI7XG5cblx0XHRcdFx0XHRcdHZhciBjb3N0RnVuY3Rpb24gPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMuY29zdEZ1bmN0aW9uID8gdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMuY29zdEZ1bmN0aW9uLnB5dGhvbiB8fCBcIlwiIDogXCJcIjtcblx0XHRcdFx0XHRcdGlmKCFjb3N0RnVuY3Rpb24udHJpbSgpKSB7XG5cdFx0XHRcdFx0XHRcdGNvc3RGdW5jdGlvbiA9IFwiY29zdCA9IDBcIjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGFkanVzdElkZW50YXRpb24oY29zdEZ1bmN0aW9uLCBpbmRlbnQpO1xuXG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gXCJcXG5cIlxuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicmV0dXJuIGNvc3RcXG5cIlxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJjb3VudHMgPSBkaWN0KHppcChyZXN1bHRzLFtyZXN1bHRzLmNvdW50KGkpIGZvciBpIGluIHJlc3VsdHNdKSlcXG5cIjtcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInByaW50KGNvdW50cylcXG5cIjtcdFx0XHRcdFx0XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmKGh5YnJpZCkge1xuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwiY291bnRzID0gQ291bnRlcihkaWN0KHppcChyZXN1bHRzLFtyZXN1bHRzLmNvdW50KGkpIGZvciBpIGluIHJlc3VsdHNdKSkpXFxuXCI7XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gXCJcXG5cIlxuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwiIyBDQUxDVUxBVEUgQ09TVCBIRVJFXFxuXCI7XG5cblx0XHRcdFx0XHRcdHZhciBjb3N0RnVuY3Rpb24gPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMuY29zdEZ1bmN0aW9uID8gdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMuY29zdEZ1bmN0aW9uLnB5dGhvbiB8fCBcIlwiIDogXCJcIjtcblx0XHRcdFx0XHRcdGlmKCFjb3N0RnVuY3Rpb24udHJpbSgpKSB7XG5cdFx0XHRcdFx0XHRcdGNvc3RGdW5jdGlvbiA9IFwiY29zdCA9IDBcIjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGFkanVzdElkZW50YXRpb24oY29zdEZ1bmN0aW9uLCBpbmRlbnQpO1xuXG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gXCJcXG5cIlxuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicmV0dXJuIGNvc3RcXG5cIlxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJwcmludChxYy5ydW4oZXApLnJlYWRvdXRfZGF0YS5nZXQoXFxcInJvXFxcIikpXFxuXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZihnb3RNZWFzdXJlbWVudCkge1xuXHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInJlc3VsdHNfbGlzdCA9IHFjLnJ1bihwKS5yZWFkb3V0X2RhdGEuZ2V0KFxcXCJyb1xcXCIpXFxuXCI7XG5cdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicmVzdWx0cyA9IGxpc3QobWFwKGxhbWJkYSBhcnI6IHJlZHVjZShsYW1iZGEgeCwgeTogc3RyKHgpICsgc3RyKHkpLCBhcnJbOjotMV0sIFxcXCJcXFwiKSwgcmVzdWx0c19saXN0KSlcXG5cIjtcblx0XHRcdFx0XHRpZihoeWJyaWQpIHtcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcImNvdW50cyA9IENvdW50ZXIoZGljdCh6aXAocmVzdWx0cyxbcmVzdWx0cy5jb3VudChpKSBmb3IgaSBpbiByZXN1bHRzXSkpKVxcblwiO1xuXHRcdFx0XHRcdFx0cHlxdWlsICs9IFwiXFxuXCJcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcIiMgQ0FMQ1VMQVRFIENPU1QgSEVSRVxcblwiO1xuXG5cdFx0XHRcdFx0XHR2YXIgY29zdEZ1bmN0aW9uID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLmNvc3RGdW5jdGlvbiA/IHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLmNvc3RGdW5jdGlvbi5weXRob24gfHwgXCJcIiA6IFwiXCI7XG5cdFx0XHRcdFx0XHRpZighY29zdEZ1bmN0aW9uLnRyaW0oKSkge1xuXHRcdFx0XHRcdFx0XHRjb3N0RnVuY3Rpb24gPSBcImNvc3QgPSAwXCI7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHB5cXVpbCArPSBhZGp1c3RJZGVudGF0aW9uKGNvc3RGdW5jdGlvbiwgaW5kZW50KTtcblxuXHRcdFx0XHRcdFx0cHlxdWlsICs9IFwiXFxuXCJcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInJldHVybiBjb3N0XFxuXCJcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwiY291bnRzID0gZGljdCh6aXAocmVzdWx0cyxbcmVzdWx0cy5jb3VudChpKSBmb3IgaSBpbiByZXN1bHRzXSkpXFxuXCI7XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJwcmludChjb3VudHMpXFxuXCI7XHRcdFx0XHRcdFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJyZXN1bHRzX2xpc3QgPSBxYy5ydW4ocCkucmVhZG91dF9kYXRhLmdldChcXFwicm9cXFwiKVxcblwiO1xuXHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInJlc3VsdHMgPSBsaXN0KG1hcChsYW1iZGEgYXJyOiByZWR1Y2UobGFtYmRhIHgsIHk6IHN0cih4KSArIHN0cih5KSwgYXJyWzo6LTFdLCBcXFwiXFxcIiksIHJlc3VsdHNfbGlzdCkpXFxuXCI7XG5cdFx0XHRcdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJjb3VudHMgPSBDb3VudGVyKGRpY3QoemlwKHJlc3VsdHMsW3Jlc3VsdHMuY291bnQoaSkgZm9yIGkgaW4gcmVzdWx0c10pKSlcXG5cIjtcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIlxcblwiXG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCIjIENBTENVTEFURSBDT1NUIEhFUkVcXG5cIjtcblxuXHRcdFx0XHRcdFx0dmFyIGNvc3RGdW5jdGlvbiA9IHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucy5jb3N0RnVuY3Rpb24gPyB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucy5jb3N0RnVuY3Rpb24ucHl0aG9uIHx8IFwiXCIgOiBcIlwiO1xuXHRcdFx0XHRcdFx0aWYoIWNvc3RGdW5jdGlvbi50cmltKCkpIHtcblx0XHRcdFx0XHRcdFx0Y29zdEZ1bmN0aW9uID0gXCJjb3N0ID0gMFwiO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gYWRqdXN0SWRlbnRhdGlvbihjb3N0RnVuY3Rpb24sIGluZGVudCk7XG5cblx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIlxcblwiXG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJyZXR1cm4gY29zdFxcblwiXG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInByaW50KHJlc3VsdHMpXFxuXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYoaHlicmlkKSB7XG5cdFx0XHR2YXIgZ2xvYmFsUGFyYW1MaXN0ID0gXCJcIjtcblx0XHRcdHRoaXMucGFyYW1zLm1hcChmdW5jdGlvbihnbG9iYWxQYXJhbU5hbWUsIGdsb2JhbFBhcmFtSW5kZXgpIHtcblx0XHRcdFx0aWYoZ2xvYmFsUGFyYW1JbmRleCA+IDApIHtcblx0XHRcdFx0XHRnbG9iYWxQYXJhbUxpc3QgKz0gXCIsIFwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGdsb2JhbFBhcmFtTGlzdCArPSBnbG9iYWxQYXJhbU5hbWU7XG5cdFx0XHR9KTtcblxuXHRcdFx0cHlxdWlsICs9IFwiXFxuXCI7XG5cdFx0XHRweXF1aWwgKz0gXCJwYXJhbXMgPSBucC5hcnJheShbXCIgKyBnbG9iYWxQYXJhbUxpc3QgKyBcIl0pXFxuXCI7XG5cdFx0XHRweXF1aWwgKz0gXCJcXG5cIjtcblx0XHRcdHB5cXVpbCArPSBcIm1pbmltdW0gPSBtaW5pbWl6ZShvYmplY3RpdmVfZnVuY3Rpb24sIHBhcmFtcywgbWV0aG9kPVxcXCJcIiArICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMub3B0aW1pemVyID8gdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMub3B0aW1pemVyIDogXCJQb3dlbGxcIikgKyBcIlxcXCIsIHRvbD10b2xlcmFuY2UpXFxuXCI7XG5cdFx0XHRweXF1aWwgKz0gXCJwcmludChcXFwiY29zdDpcXFwiLCBtaW5pbXVtLmZ1biwgXFxcInBhcmFtczpcXFwiLCBtaW5pbXVtLngpXFxuXCI7XG5cdFx0fVxuXHR9XG5cblx0aWYoYXNKdXB5dGVyKSB7XG5cdFx0dmFyIG5vdGVib29rID0ge1xuXHRcdFx0bWV0YWRhdGE6IHtcblx0XHRcdFx0a2VybmVsc3BlYzoge1xuXHRcdFx0XHRcdGRpc3BsYXlfbmFtZTogXCJQeXRob24gM1wiLFxuXHRcdFx0XHRcdGxhbmd1YWdlOiBcInB5dGhvblwiLFxuXHRcdFx0XHRcdG5hbWU6IFwicHl0aG9uM1wiXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRuYmZvcm1hdDogNCxcblx0XHRcdG5iZm9ybWF0X21pbm9yOiAwLFxuXHRcdFx0Y2VsbHM6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGNlbGxfdHlwZTogXCJjb2RlXCIsXG5cdFx0XHRcdFx0c291cmNlOiBweXF1aWwsXG5cdFx0XHRcdFx0bWV0YWRhdGE6IHtcblxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0b3V0cHV0czogW10sXG5cdFx0XHRcdFx0ZXhlY3V0aW9uX2NvdW50OiBudWxsXG5cdFx0XHRcdH1cblx0XHRcdF1cblx0XHR9O1xuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShub3RlYm9vayk7XG5cdH1cblxuXHRyZXR1cm4gcHlxdWlsO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFRvUXVpbCA9IGZ1bmN0aW9uKG9wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0dmFyIGNvbW1lbnQgPSBvcHRpb25zLmNvbW1lbnQ7XG5cblx0Ly8gUVVJTCBTdWJtb2R1bGVzIG5vdCBzdXBwb3J0ZWRcblx0dmFyIGRlY29tcG9zZSA9IHRydWU7IC8vIG9wdGlvbnMuZGVjb21wb3NlO1xuXHR2YXIgdmVyc2lvblN0ciA9IG9wdGlvbnMudmVyc2lvblN0cjtcblxuXHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0dmFyIHZlcnNpb24gPSBwYXJzZUZsb2F0KHZlcnNpb25TdHIgfHwgXCIyLjBcIik7XG5cdGlmKGlzTmFOKHZlcnNpb24pKSB7XG5cdFx0dmVyc2lvbiA9IDIuMDtcblx0fVxuXG5cdC8vIGRlY29tcG9zZSA/XG5cdHZhciBjaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdGNpcmN1aXQubG9hZCh0aGlzLnNhdmUoZGVjb21wb3NlKSk7XG5cblx0dmFyIHF1aWwgPSBcIlwiO1xuXG5cdC8vIGNvbW1lbnRcblx0aWYoY29tbWVudCkge1xuXHRcdHZhciBjb21tID0gKGNvbW1lbnQgfHwgXCJcIikuc3BsaXQoXCJcXG5cIik7XG5cdFx0Y29tbS5tYXAoZnVuY3Rpb24oY2xpbmUpIHtcblx0XHRcdGlmKGNsaW5lLmxlbmd0aCA+PSAxICYmIGNsaW5lWzBdICE9IFwiI1wiKSB7XG5cdFx0XHRcdHF1aWwgKz0gXCIjIFwiO1xuXHRcdFx0fVxuXHRcdFx0cXVpbCArPSBjbGluZTtcblx0XHRcdHF1aWwgKz0gXCJcXG5cIjtcblx0XHR9KTtcblx0fVxuXG5cdHZhciB1c2VkR2F0ZXMgPSBjaXJjdWl0LnVzZWRHYXRlcygpO1xuXHR1c2VkR2F0ZXMubWFwKGZ1bmN0aW9uKHVzZWRHYXRlTmFtZSkge1xuXHRcdHZhciBiYXNpY0dhdGUgPSBjaXJjdWl0LmJhc2ljR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRpZihiYXNpY0dhdGUpIHtcblx0XHRcdGlmKGJhc2ljR2F0ZS5leHBvcnRJbmZvICYmIGJhc2ljR2F0ZS5leHBvcnRJbmZvLnF1aWwpIHtcblx0XHRcdFx0aWYoYmFzaWNHYXRlLmV4cG9ydEluZm8ucXVpbC5kZWZnYXRlKSB7XG5cdFx0XHRcdFx0cXVpbCArPSBiYXNpY0dhdGUuZXhwb3J0SW5mby5xdWlsLmRlZmdhdGU7XG5cdFx0XHRcdFx0cXVpbCArPSBcIlxcblxcblwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBiYXNpYyBnYXRlIG5vdCBzdXBwb3J0ZWQgYnkgcXVpbFxuXHRcdFx0XHQvLyBUT0RPOiBhZGQgcXVpbCBkZWZpbmUgZ2F0ZSBjb2RlXG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHR2YXIgZ290Q29uZGl0aW9ucyA9IHRoaXMuZ290Q2xhc3NpY2FsQ29udHJvbCgpO1xuXHR2YXIgaW5kZW50ID0gXCJcIjtcblx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdHZhciBwYXJhbXMgPSBcIlwiO1xuXHRcdGlmKGNpcmN1aXQucGFyYW1zLmxlbmd0aCkge1xuXHRcdFx0cGFyYW1zICs9IFwiKFwiO1xuXHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNpcmN1aXQucGFyYW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmKGkgPiAwKSB7XG5cdFx0XHRcdFx0cGFyYW1zICs9IFwiLCBcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRwYXJhbXMgKz0gXCIlXCIgKyBjaXJjdWl0LnBhcmFtc1tpXTtcblx0XHRcdH1cblx0XHRcdHBhcmFtcyArPSBcIilcIjtcblx0XHR9XG5cblx0XHR2YXIgYXJncyA9IFwiXCI7XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNpcmN1aXQubnVtUXViaXRzOyBpKyspIHtcblx0XHRcdGlmKGkgPiAwKSB7XG5cdFx0XHRcdGFyZ3MgKz0gXCIgXCI7XG5cdFx0XHR9XG5cdFx0XHRhcmdzICs9IFwicVwiICsgaTtcblx0XHR9XG5cdFx0cXVpbCArPSBcIkRFRkNJUkNVSVQgXCIgKyBleHBvcnRBc0dhdGVOYW1lICsgKHBhcmFtcyA/IFwiIFwiICsgcGFyYW1zIDogXCJcIikgKyAoYXJncyA/IFwiIFwiICsgYXJncyA6IFwiXCIpICsgXCI6XFxuXCI7XG5cdFx0aW5kZW50ID0gXCIgICAgXCI7XG5cdH0gZWxzZSB7XG5cdFx0cXVpbCArPSBcIlxcblwiO1xuXG5cdFx0aWYodmVyc2lvbiA+PSAyKSB7XG5cdFx0XHR2YXIgdG90YWxCaXRzID0gY2lyY3VpdC5jcmVnVG90YWxCaXRzKCk7XG5cdFx0XHRpZihnb3RDb25kaXRpb25zKSB7XG5cdFx0XHRcdHRvdGFsQml0cyArPSAxO1xuXHRcdFx0fTtcblx0XHRcdGlmKHRvdGFsQml0cykge1xuXHRcdFx0XHRxdWlsICs9IFwiREVDTEFSRSBybyBCSVRbXCIgKyB0b3RhbEJpdHMgKyBcIl1cXG5cIjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgZ2xvYmFsUGFyYW1zID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5wYXJhbXMgPyB0aGlzLm9wdGlvbnMucGFyYW1zIDoge307XG5cdFx0aWYodGhpcy5wYXJhbXMubGVuZ3RoKSB7XG5cdFx0XHRxdWlsICs9IFwiXFxuXCI7XG5cdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXJhbXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0dmFyIGdsb2JhbFBhcmFtTmFtZSA9IHRoaXMucGFyYW1zW2ldO1xuXG5cdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnbG9iYWxQYXJhbXNbZ2xvYmFsUGFyYW1OYW1lXSk7XG5cdFx0XHRcdHZhciBnbG9iYWxQYXJhbVZhbHVlID0gbm9kZS50b1N0cmluZyh7IGhhbmRsZXI6IG1hdGhUb1N0cmluZ0hhbmRsZXIgfSk7XG5cblx0XHRcdFx0cXVpbCArPSBcIkRFQ0xBUkUgXCIgKyBnbG9iYWxQYXJhbU5hbWUgKyBcIiBSRUFMWzFdXFxuXCI7XG5cdFx0XHR9XG5cdFx0XHRxdWlsICs9IFwiXFxuXCI7XG5cdFx0fVxuXG5cdFx0dmFyIHVzZWRHYXRlcyA9IGNpcmN1aXQudXNlZEdhdGVzKCk7XG5cdFx0aWYoIWRlY29tcG9zZSkge1xuXHRcdFx0dXNlZEdhdGVzLm1hcChmdW5jdGlvbih1c2VkR2F0ZU5hbWUpIHtcblx0XHRcdFx0dmFyIGJhc2ljR2F0ZSA9IGNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0XHRpZighYmFzaWNHYXRlKSB7XG5cdFx0XHRcdFx0dmFyIGN1c3RvbUdhdGUgPSBzZWxmLmN1c3RvbUdhdGVzW3VzZWRHYXRlTmFtZV07XG5cdFx0XHRcdFx0aWYoY3VzdG9tR2F0ZSkge1xuXHRcdFx0XHRcdFx0dmFyIGN1c3RvbUNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0XHRcdFx0XHRcdGN1c3RvbUNpcmN1aXQubG9hZChjdXN0b21HYXRlKTtcblx0XHRcdFx0XHRcdHZhciBuZXdPcHRpb25zID0ge1xuXHRcdFx0XHRcdFx0XHRjb21tZW50OiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRkZWNvbXBvc2U6IGZhbHNlXG5cdFx0XHRcdFx0XHR9O1x0XHRcdFx0XHRcblx0XHRcdFx0XHRcdHF1aWwgKz0gY3VzdG9tQ2lyY3VpdC5leHBvcnRUb1F1aWwobmV3T3B0aW9ucywgZXhwb3J0QXNHYXRlTmFtZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHR2YXIgbWF0aFRvU3RyaW5nSGFuZGxlciA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMpIHtcblx0XHRpZihub2RlLmlzU3ltYm9sTm9kZSAmJiBjaXJjdWl0LnBhcmFtcy5pbmRleE9mKG5vZGUubmFtZSkgPj0gMCkge1xuXHRcdFx0cmV0dXJuIFwiJVwiICsgbm9kZS5uYW1lO1xuXHRcdH1cblx0fTtcblxuXHR2YXIgbGFiZWxDb3VudGVyID0gMTtcblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBjaXJjdWl0Lm51bUNvbHMoKTsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgY2lyY3VpdC5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSBjaXJjdWl0LmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmNvbm5lY3RvciA9PSAwKSB7XG5cdFx0XHRcdHZhciBnYXRlRGVmID0gY2lyY3VpdC5nZXRHYXRlRGVmKGdhdGUubmFtZSk7XG5cdFx0XHRcdHZhciBnYXRlUGFyYW1zID0gZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5wYXJhbXMgPyBnYXRlLm9wdGlvbnMucGFyYW1zIDoge307XG5cdFx0XHRcdHZhciBxdWlsSW5mbyA9IG51bGw7XG5cdFx0XHRcdGlmKGdhdGVEZWYpIHtcblx0XHRcdFx0XHRpZihnYXRlRGVmLmV4cG9ydEluZm8pIHtcblx0XHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mby5xdWlsICYmIGdhdGVEZWYuZXhwb3J0SW5mby5xdWlsLnJlcGxhY2VtZW50KSB7XG5cdFx0XHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mby5xdWlsLnJlcGxhY2VtZW50LnBhcmFtcykge1xuXHRcdFx0XHRcdFx0XHRcdGdhdGVQYXJhbXMgPSBnYXRlRGVmLmV4cG9ydEluZm8ucXVpbC5yZXBsYWNlbWVudC5wYXJhbXM7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Z2F0ZURlZiA9IGNpcmN1aXQuZ2V0R2F0ZURlZihnYXRlRGVmLmV4cG9ydEluZm8ucXVpbC5yZXBsYWNlbWVudC5uYW1lKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0cXVpbEluZm8gPSAoZ2F0ZURlZiAmJiBnYXRlRGVmLmV4cG9ydEluZm8gJiYgZ2F0ZURlZi5leHBvcnRJbmZvLnF1aWwpID8gZ2F0ZURlZi5leHBvcnRJbmZvLnF1aWwgOiBudWxsO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHZhciBpbnNpZGVDb250cm9sID0gZmFsc2U7XG5cdFx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24gJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnKSB7XG5cdFx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHRcdC8vIEZsb3cgY29udHJvbFxuXHRcdFx0XHRcdFx0Ly8gLS0tXG5cdFx0XHRcdFx0XHRpbnNpZGVDb250cm9sID0gdHJ1ZTtcblx0XHRcdFx0XHRcdHF1aWwgKz0gXCJcXG5cIjtcblxuXHRcdFx0XHRcdFx0dmFyIHRlc3RCaXQgPSBzZWxmLmNyZWdUb3RhbEJpdHMoKTtcblx0XHRcdFx0XHRcdHZhciBjb25kaXRpb24gPSBnYXRlLm9wdGlvbnMuY29uZGl0aW9uO1xuXHRcdFx0XHRcdFx0dmFyIGNvbmRpdGlvblZhbHVlID0gY29uZGl0aW9uLnZhbHVlIHx8IDA7XG5cdFx0XHRcdFx0XHR2YXIgY3JlZ0Jhc2UgPSBzZWxmLmNyZWdCYXNlKGNvbmRpdGlvbi5jcmVnKTtcblxuXHRcdFx0XHRcdFx0aWYoY29uZGl0aW9uVmFsdWUgPT0gMCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgY3JlZ1NpemUgPSBzZWxmLmNyZWdzW2NvbmRpdGlvbi5jcmVnXS5sZW5ndGg7XG5cdFx0XHRcdFx0XHRcdGlmKHZlcnNpb24gPCAyKSB7XG5cdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBpbmRlbnQgKyBcIkZBTFNFIFtcIiArIHRlc3RCaXQgKyBcIl1cXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGJpdEluZGV4ID0gMDsgYml0SW5kZXggPCBjcmVnU2l6ZTsgYml0SW5kZXgrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBpbmRlbnQgKyBcIk9SIFtcIiArIChiaXRJbmRleCArIGNyZWdCYXNlKSArIFwiXSBbXCIgKyB0ZXN0Qml0ICsgXCJdXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gaW5kZW50ICsgXCJOT1QgW1wiICsgdGVzdEJpdCArIFwiXVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJKVU1QLVdIRU4gQFRIRU5cIiArIGxhYmVsQ291bnRlciArIFwiIFtcIiArIHRlc3RCaXQgKyBcIl1cXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiSlVNUCBARU5EXCIgKyAobGFiZWxDb3VudGVyICsgMSkgKyBcIlxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJMQUJFTCBAVEhFTlwiICsgbGFiZWxDb3VudGVyICsgXCJcXG5cIjtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IGluZGVudCArIFwiRkFMU0Ugcm9bXCIgKyB0ZXN0Qml0ICsgXCJdXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBiaXRJbmRleCA9IDA7IGJpdEluZGV4IDwgY3JlZ1NpemU7IGJpdEluZGV4KyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gaW5kZW50ICsgXCJPUiByb1tcIiArIChiaXRJbmRleCArIGNyZWdCYXNlKSArIFwiXSByb1tcIiArIHRlc3RCaXQgKyBcIl1cXG5cIjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBpbmRlbnQgKyBcIk5PVCByb1tcIiArIHRlc3RCaXQgKyBcIl1cXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiSlVNUC1XSEVOIEBUSEVOXCIgKyBsYWJlbENvdW50ZXIgKyBcIiByb1tcIiArIHRlc3RCaXQgKyBcIl1cXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiSlVNUCBARU5EXCIgKyAobGFiZWxDb3VudGVyICsgMSkgKyBcIlxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJMQUJFTCBAVEhFTlwiICsgbGFiZWxDb3VudGVyICsgXCJcXG5cIjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dmFyIGJpdFN0ciA9IGNvbmRpdGlvblZhbHVlLnRvU3RyaW5nKDIpLnNwbGl0KFwiXCIpLnJldmVyc2UoKTtcblx0XHRcdFx0XHRcdFx0dmFyIGJpdENvdW50ID0gMDtcblx0XHRcdFx0XHRcdFx0dmFyIHNpbmdsZUJpdEluZGV4ID0gMDtcblx0XHRcdFx0XHRcdFx0Yml0U3RyLm1hcChmdW5jdGlvbihiaXRWYWx1ZSwgYml0SW5kZXgpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgYml0VmFsID0gcGFyc2VJbnQoYml0VmFsdWUpO1xuXHRcdFx0XHRcdFx0XHRcdGJpdFN0cltiaXRJbmRleF0gPSBiaXRWYWw7XG5cdFx0XHRcdFx0XHRcdFx0aWYoYml0VmFsKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRiaXRDb3VudCsrO1xuXHRcdFx0XHRcdFx0XHRcdFx0c2luZ2xlQml0SW5kZXggPSBiaXRJbmRleDtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRcdGlmKGJpdENvdW50ID09IDEpIHtcblx0XHRcdFx0XHRcdFx0XHRpZih2ZXJzaW9uIDwgMikge1xuXHRcdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBcIkpVTVAtV0hFTiBAVEhFTlwiICsgbGFiZWxDb3VudGVyICsgXCIgW1wiICsgKHNpbmdsZUJpdEluZGV4ICsgY3JlZ0Jhc2UpICsgXCJdXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiSlVNUCBARU5EXCIgKyAobGFiZWxDb3VudGVyICsgMSkgKyBcIlxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBcIkxBQkVMIEBUSEVOXCIgKyBsYWJlbENvdW50ZXIgKyBcIlxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiSlVNUC1XSEVOIEBUSEVOXCIgKyBsYWJlbENvdW50ZXIgKyBcIiByb1tcIiArIChzaW5nbGVCaXRJbmRleCArIGNyZWdCYXNlKSArIFwiXVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBcIkpVTVAgQEVORFwiICsgKGxhYmVsQ291bnRlciArIDEpICsgXCJcXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJMQUJFTCBAVEhFTlwiICsgbGFiZWxDb3VudGVyICsgXCJcXG5cIjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYodmVyc2lvbiA8IDIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gaW5kZW50ICsgXCJGQUxTRSBbXCIgKyB0ZXN0Qml0ICsgXCJdXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgZmlyc3RTZXQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0Yml0U3RyLm1hcChmdW5jdGlvbihiaXRWYWx1ZSwgYml0SW5kZXgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYml0VmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihmaXJzdFNldCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zmlyc3RTZXQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gaW5kZW50ICsgXCJPUiBbXCIgKyAoYml0SW5kZXggKyBjcmVnQmFzZSkgKyBcIl0gW1wiICsgdGVzdEJpdCArIFwiXVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IGluZGVudCArIFwiQU5EIFtcIiArIChiaXRJbmRleCArIGNyZWdCYXNlKSArIFwiXSBbXCIgKyB0ZXN0Qml0ICsgXCJdXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJKVU1QLVdIRU4gQFRIRU5cIiArIGxhYmVsQ291bnRlciArIFwiIFtcIiArIHRlc3RCaXQgKyBcIl1cXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJKVU1QIEBFTkRcIiArIChsYWJlbENvdW50ZXIgKyAxKSArIFwiXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiTEFCRUwgQFRIRU5cIiArIGxhYmVsQ291bnRlciArIFwiXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gaW5kZW50ICsgXCJGQUxTRSByb1tcIiArIHRlc3RCaXQgKyBcIl1cXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBmaXJzdFNldCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRiaXRTdHIubWFwKGZ1bmN0aW9uKGJpdFZhbHVlLCBiaXRJbmRleCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZihiaXRWYWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGZpcnN0U2V0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaXJzdFNldCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBpbmRlbnQgKyBcIk9SIHJvW1wiICsgKGJpdEluZGV4ICsgY3JlZ0Jhc2UpICsgXCJdIHJvW1wiICsgdGVzdEJpdCArIFwiXVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IGluZGVudCArIFwiQU5EIHJvW1wiICsgKGJpdEluZGV4ICsgY3JlZ0Jhc2UpICsgXCJdIHJvW1wiICsgdGVzdEJpdCArIFwiXVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiSlVNUC1XSEVOIEBUSEVOXCIgKyBsYWJlbENvdW50ZXIgKyBcIiByb1tcIiArIHRlc3RCaXQgKyBcIl1cXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJKVU1QIEBFTkRcIiArIChsYWJlbENvdW50ZXIgKyAxKSArIFwiXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiTEFCRUwgQFRIRU5cIiArIGxhYmVsQ291bnRlciArIFwiXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZihxdWlsSW5mbykge1xuXHRcdFx0XHRcdFx0cXVpbCArPSBpbmRlbnQgKyBxdWlsSW5mby5uYW1lO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRxdWlsICs9IGluZGVudCArIGdhdGUubmFtZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRxdWlsICs9IFwiIFwiO1xuXHRcdFx0XHRcdHZhciBhcmdDb3VudCA9IDA7XG5cdFx0XHRcdFx0aWYocXVpbEluZm8gJiYgcXVpbEluZm8ucGFyYW1zICYmIHF1aWxJbmZvLnBhcmFtcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdHF1aWwgKz0gXCIoXCI7XG5cdFx0XHRcdFx0XHRmb3IodmFyIHAgPSAwOyBwIDwgcXVpbEluZm8ucGFyYW1zLmxlbmd0aDsgcCsrKSB7XG5cdFx0XHRcdFx0XHRcdGlmKGFyZ0NvdW50ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0Ly8gLS0tXG5cdFx0XHRcdFx0XHRcdC8vIHByZXBlbmQgJyUnIHRvIGdsb2JhbCBwYXJhbXNcblx0XHRcdFx0XHRcdFx0aWYodHlwZW9mIGdhdGVQYXJhbXNbcXVpbEluZm8ucGFyYW1zW3BdXSAhPSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIG5vZGUgPSBtYXRoLnBhcnNlKGdhdGVQYXJhbXNbcXVpbEluZm8ucGFyYW1zW3BdXSk7XG5cdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBub2RlLnRvU3RyaW5nKHsgaGFuZGxlcjogbWF0aFRvU3RyaW5nSGFuZGxlciB9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQvLyAtLS1cblxuXHRcdFx0XHRcdFx0XHRhcmdDb3VudCsrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cXVpbCArPSBcIilcIjtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0aWYoZ2F0ZURlZiAmJiBnYXRlRGVmLnBhcmFtcyAmJiBnYXRlRGVmLnBhcmFtcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0cXVpbCArPSBcIihcIjtcblx0XHRcdFx0XHRcdFx0Zm9yKHZhciBwID0gMDsgcCA8IGdhdGVEZWYucGFyYW1zLmxlbmd0aDsgcCsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHRcdFx0XHQvLyBwcmVwZW5kICclJyB0byBnbG9iYWwgcGFyYW1zXG5cdFx0XHRcdFx0XHRcdFx0aWYodHlwZW9mIGdhdGVQYXJhbXNbZ2F0ZURlZi5wYXJhbXNbcF1dICE9IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnYXRlUGFyYW1zW2dhdGVEZWYucGFyYW1zW3BdXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IG5vZGUudG9TdHJpbmcoeyBoYW5kbGVyOiBtYXRoVG9TdHJpbmdIYW5kbGVyIH0pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHQvLyAtLS1cblxuXHRcdFx0XHRcdFx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cXVpbCArPSBcIilcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRmb3IodmFyIHcgPSAwOyB3IDwgZ2F0ZS53aXJlcy5sZW5ndGg7IHcrKykge1xuXHRcdFx0XHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCIgXCI7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRcdFx0XHRcdFx0cXVpbCArPSBcInFcIiArIGdhdGUud2lyZXNbd107XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiXCIgKyBnYXRlLndpcmVzW3ddO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRhcmdDb3VudCsrO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKGdhdGUubmFtZSA9PSBcIm1lYXN1cmVcIiAmJiBnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNyZWcpIHtcblx0XHRcdFx0XHRcdHZhciB0YXJnZXRCaXQgPSBwYXJzZUludChnYXRlLm9wdGlvbnMuY3JlZy5iaXQpIHx8IDA7XG5cdFx0XHRcdFx0XHRpZihpc05hTih0YXJnZXRCaXQpKSB7XG5cdFx0XHRcdFx0XHRcdHRhcmdldEJpdCA9IDA7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKGFyZ0NvdW50ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiIFwiO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZih2ZXJzaW9uIDwgMikge1xuXHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiW1wiICsgKHRhcmdldEJpdCArIHNlbGYuY3JlZ0Jhc2UoZ2F0ZS5vcHRpb25zLmNyZWcubmFtZSkpICsgXCJdXCI7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRxdWlsICs9IFwicm9bXCIgKyAodGFyZ2V0Qml0ICsgc2VsZi5jcmVnQmFzZShnYXRlLm9wdGlvbnMuY3JlZy5uYW1lKSkgKyBcIl1cIjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0YXJnQ291bnQrKztcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRxdWlsICs9IFwiXFxuXCI7XG5cblx0XHRcdFx0XHRpZihpbnNpZGVDb250cm9sKSB7XG5cdFx0XHRcdFx0XHRxdWlsICs9IFwiTEFCRUwgQEVORFwiICsgKGxhYmVsQ291bnRlciArIDEpICsgXCJcXG5cIjtcblx0XHRcdFx0XHRcdHF1aWwgKz0gXCJcXG5cIjtcblx0XHRcdFx0XHRcdGxhYmVsQ291bnRlciArPSAyO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyB1bmtub3duIGdhdGU/XG5cdFx0XHRcdFx0Y29uc29sZS5sb2coXCJ1bmtub3duIGdhdGVcIiwgZ2F0ZS5uYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmKGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRxdWlsICs9IFwiXFxuXCI7XG5cdH1cblxuXHRyZXR1cm4gcXVpbDtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRUb0FRQVNNID0gZnVuY3Rpb24ob3B0aW9ucywgaXNFeHBvcnRQeUFRQVNNLCBleHBvcnRBc0dhdGVOYW1lLCBpbmRlbnREZXB0aCkge1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0dmFyIGNvbW1lbnQgPSBvcHRpb25zLmNvbW1lbnQ7XG5cdHZhciBkZWNvbXBvc2UgPSBvcHRpb25zLmRlY29tcG9zZTtcblx0dmFyIGFzSnVweXRlciA9IG9wdGlvbnMuYXNKdXB5dGVyO1xuXHR2YXIgc2hvdHMgPSBvcHRpb25zLnNob3RzO1xuXHR2YXIgaHlicmlkID0gISFpc0V4cG9ydFB5QVFBU00gPyBvcHRpb25zLmh5YnJpZCA6IGZhbHNlO1xuXG5cdHZhciBjaXJjdWl0ID0gbnVsbDtcblx0dmFyIHRlbXBDaXJjdWl0ID0gbnVsbDtcblxuXHRzaG90cyA9IHNob3RzIHx8IDEwMjQ7XG5cblx0aWYodHlwZW9mIGh5YnJpZCA9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0aHlicmlkID0gdGhpcy5vcHRpb25zID8gISF0aGlzLm9wdGlvbnMuaHlicmlkIDogZmFsc2U7XG5cdH1cblxuXHR2YXIgb2JqID0gdGhpcy5zYXZlKCEhZGVjb21wb3NlKTtcblxuXHRjaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdHRlbXBDaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdGNpcmN1aXQubG9hZChvYmopO1xuXHR0ZW1wQ2lyY3VpdC5sb2FkKG9iaik7XG5cblx0dmFyIG1hdGhUb1N0cmluZ0hhbmRsZXIgPSBmdW5jdGlvbihub2RlLCBvcHRpb25zKSB7XG5cdFx0XG5cdFx0aWYobm9kZS5pc1N5bWJvbE5vZGUpIHtcblx0XHRcdHZhciBudW1weXMgPSBbXCJwaVwiXTtcblx0XHRcdGlmKG51bXB5cy5pbmRleE9mKG5vZGUubmFtZSkgPj0gMCkge1xuXHRcdFx0XHRyZXR1cm4gXCJucC5cIiArIG5vZGUubmFtZTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0dmFyIGFkanVzdElkZW50YXRpb24gPSBmdW5jdGlvbihhZGRTdHIsIGlkZW50KSB7XG5cdFx0dmFyIHN0ciA9IFwiXCI7XG5cblx0XHQvLyBhZGQgdXNlciBkZWZpbmVkIGNvc3QgZnVuY3Rpb24gd2l0aCBwcm9wZXIgaWRlbnRhdGlvblxuXHRcdHZhciBjZkxpbmVzID0gYWRkU3RyLnNwbGl0KFwiXFxuXCIpO1xuXHRcdHZhciBtaW5JZGVudCA9IC0xO1xuXHRcdGNmTGluZXMubWFwKGZ1bmN0aW9uKGNmTGluZSkge1xuXHRcdFx0dmFyIHRtcElkZW50ID0gY2ZMaW5lLnNlYXJjaCgvXFxTLyk7XG5cdFx0XHRpZih0bXBJZGVudCA+PSAwICYmIChtaW5JZGVudCA8IDAgfHwgdG1wSWRlbnQgPCBtaW5JZGVudCkpIHtcblx0XHRcdFx0bWluSWRlbnQgPSB0bXBJZGVudDtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGlmKG1pbklkZW50IDwgMCkge1xuXHRcdFx0bWluSWRlbnQgPSAwO1xuXHRcdH1cblxuXHRcdHZhciBhZGRJZGVudCA9IFwiXCI7XG5cdFx0aWYobWluSWRlbnQgPCBpZGVudC5sZW5ndGgpIHtcblx0XHRcdGZvcih2YXIgdG1wID0gMDsgdG1wIDwgKGlkZW50Lmxlbmd0aCAtIG1pbklkZW50KTsgdG1wKyspIHtcblx0XHRcdFx0YWRkSWRlbnQgKz0gXCIgXCI7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y2ZMaW5lcy5tYXAoZnVuY3Rpb24oY2ZMaW5lKSB7XG5cdFx0XHRzdHIgKz0gYWRkSWRlbnQgKyBjZkxpbmUgKyBcIlxcblwiO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHN0cjtcblx0fTtcblxuXHR2YXIgZ2V0SW5kZW50ID0gZnVuY3Rpb24oZGVwdGgpIHtcblx0XHR2YXIgaW5kZW50ID0gXCJcIjtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgZGVwdGg7IGkrKykge1xuXHRcdFx0aW5kZW50ICs9IFwiICAgIFwiO1xuXHRcdH1cblx0XHRyZXR1cm4gaW5kZW50O1xuXHR9XG5cblx0aW5kZW50RGVwdGggPSBpbmRlbnREZXB0aCB8fCAwO1xuXG5cdHZhciBnYXRlc1RvQmVBZGRlZCA9IFtdO1xuXHRpZighaXNFeHBvcnRQeUFRQVNNKXtcblx0XHRpZighZGVjb21wb3NlKSB7XG5cdFx0XHR2YXIgbnVtQ29scyA9IHRlbXBDaXJjdWl0Lm51bUNvbHMoKTtcblx0XHRcdGZvcih2YXIgY29sdW1uID0gbnVtQ29scyAtIDE7IGNvbHVtbiA+PSAwOyBjb2x1bW4tLSkge1xuXHRcdFx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGVtcENpcmN1aXQubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdFx0XHR2YXIgZ2F0ZSA9IHRlbXBDaXJjdWl0LmdhdGVzW3dpcmVdW2NvbHVtbl07XG5cdFx0XHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmNvbm5lY3RvciA9PSAwICYmICF0ZW1wQ2lyY3VpdC5iYXNpY0dhdGVzW2dhdGUubmFtZV0pIHtcblx0XHRcdFx0XHRcdGN1c3RvbURlY29tcG9zZWRDaXJjdWl0ID0gdGVtcENpcmN1aXQuZGVjb21wb3NlR2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRcdFx0XHR2YXIgaXNEZWNvbXBvc2VDdXN0b21DaXJjdWl0ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRmb3IodmFyIGRlY29tcG9zZWRDb2x1bW4gPSAwOyBkZWNvbXBvc2VkQ29sdW1uIDwgY3VzdG9tRGVjb21wb3NlZENpcmN1aXQubnVtQ29scygpOyBkZWNvbXBvc2VkQ29sdW1uKyspIHtcblx0XHRcdFx0XHRcdFx0Zm9yKHZhciBkZWNvbXBvc2VkV2lyZSA9IDA7IGRlY29tcG9zZWRXaXJlIDwgY3VzdG9tRGVjb21wb3NlZENpcmN1aXQubnVtUXViaXRzOyBkZWNvbXBvc2VkV2lyZSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGdhdGVJbkN1c3RvbUNpcmN1aXQgPSBjdXN0b21EZWNvbXBvc2VkQ2lyY3VpdC5nZXRHYXRlQXQoZGVjb21wb3NlZENvbHVtbiwgZGVjb21wb3NlZFdpcmUpO1xuXG5cdFx0XHRcdFx0XHRcdFx0aWYoZ2F0ZUluQ3VzdG9tQ2lyY3VpdCAmJiBnYXRlSW5DdXN0b21DaXJjdWl0LmNvbm5lY3RvciA9PSAwKXtcblx0XHRcdFx0XHRcdFx0XHRcdGdhdGVzVG9CZUFkZGVkLnB1c2goZ2F0ZUluQ3VzdG9tQ2lyY3VpdCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdGNpcmN1aXQuZ2F0ZXMubWFwKGZ1bmN0aW9uKGNpcmN1aXRHYXRlLCBpbmRleCl7XG5cdFx0XHRcdFx0XHRcdFx0XHRjaXJjdWl0R2F0ZS5tYXAoZnVuY3Rpb24oZ2F0ZVRvUmVtb3ZlKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoZ2F0ZVRvUmVtb3ZlICYmIGdhdGVUb1JlbW92ZS5uYW1lID09IGdhdGUubmFtZSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2lyY3VpdC5yZW1vdmVHYXRlKGdhdGVUb1JlbW92ZS5pZCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH0pO1x0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHR9KTtcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGdhdGVzVG9CZUFkZGVkLm1hcChmdW5jdGlvbihnYXRlVG9BZGQpe1xuXHRcdFx0aWYoZ2F0ZVRvQWRkKXtcblx0XHRcdFx0Y2lyY3VpdC5pbnNlcnRHYXRlKGdhdGVUb0FkZC5uYW1lLCBnYXRlVG9BZGQuY29sdW1uLCBnYXRlVG9BZGQud2lyZXMsIGdhdGVUb0FkZC5vcHRpb25zKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHZhciBhcWFzbSA9IFwiXCI7XG5cdHZhciBpbmRlbnQgPSBnZXRJbmRlbnQoaW5kZW50RGVwdGgpO1xuXHR2YXIgdXNlZEdhdGVzID0gY2lyY3VpdC51c2VkR2F0ZXMoKTtcblx0dmFyIG51bVF1Yml0cyA9IGNpcmN1aXQubnVtUXViaXRzO1xuXHRcblx0aWYoIWlzRXhwb3J0UHlBUUFTTSl7XG5cdFx0YXFhc20gKz0gaW5kZW50ICsgIFwiQkVHSU5cXG5cIjtcblx0XHRhcWFzbSArPSBpbmRlbnQgKyAgXCJxdWJpdHMgXCIgKyBudW1RdWJpdHMgKyBcIlxcblwiO1xuXG5cdFx0aWYgKGNpcmN1aXQuY3JlZ3Mpe1xuXHRcdFx0dmFyIGNyZWdMZW5ndGggPSAwO1xuXHRcdFx0Zm9yKHZhciBjcmVnIGluIGNpcmN1aXQuY3JlZ3Mpe1xuXHRcdFx0XHRjcmVnTGVuZ3RoICs9IGNpcmN1aXQuY3JlZ3NbY3JlZ10ubGVuZ3RoO1xuXHRcdFx0fVxuXHRcdFx0YXFhc20gKz0gaW5kZW50ICsgXCJjYml0cyBcIiArIGNyZWdMZW5ndGggKyBcIlxcblwiO1xuXHRcdH1cblx0fWVsc2Uge1xuXHRcdGlmKGV4cG9ydEFzR2F0ZU5hbWUpe1xuXHRcdFx0dmFyIGFyZ3MgPSBcIlwiO1xuXHRcdFx0dmFyIGFyZ0NvdW50ID0gMDtcblx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBjaXJjdWl0LnBhcmFtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0XHRhcmdzICs9IFwiLCBcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRhcmdzICs9IGNpcmN1aXQucGFyYW1zW2ldO1xuXHRcdFx0XHRhcmdDb3VudCsrO1xuXHRcdFx0fVxuXHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNpcmN1aXQubnVtUXViaXRzOyBpKyspIHtcblx0XHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdFx0YXJncyArPSBcIiwgXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0YXJncyArPSBxdWJpdExldHRlcihpLCBjaXJjdWl0Lm51bVF1Yml0cyk7XG5cdFx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0XHR9XG5cdFx0fWVsc2Uge1xuXHRcdFx0YXFhc20gKz0gaW5kZW50ICsgXCJmcm9tIHFhdC5sYW5nLkFRQVNNIGltcG9ydCAqXFxuXCI7XG5cdFx0XHRhcWFzbSArPSBpbmRlbnQgKyBcImZyb20gcWF0LnFwdXMgaW1wb3J0IGdldF9kZWZhdWx0X3FwdVxcblwiO1xuXHRcdFx0YXFhc20gKz0gaW5kZW50ICsgXCJmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBDb3VudGVyXFxuXCI7XG5cblx0XHRcdGlmKGh5YnJpZCkge1xuXHRcdFx0XHRhcWFzbSArPSBpbmRlbnQgKyBcImZyb20gc2NpcHkub3B0aW1pemUgaW1wb3J0IG1pbmltaXplXFxuXCI7XG5cdFx0XHR9XG5cdFx0XHRcblx0XHRcdGFxYXNtICs9IGluZGVudCArICBcImltcG9ydCBudW1weSBhcyBucFxcblwiO1xuXG5cdFx0XHRhcWFzbSArPSBcIlxcblwiO1xuXG5cdFx0XHR2YXIgdW5zdXBwb3J0ZWRHYXRlRGVmaW5pdGlvbiA9IFwiXCI7XG5cdFx0XHR2YXIgc3VibW9kdWxlQ291bnQgPSAwO1xuXHRcdFx0dXNlZEdhdGVzLm1hcChmdW5jdGlvbih1c2VkR2F0ZU5hbWUpIHtcblx0XHRcdFx0dmFyIGJhc2ljR2F0ZSA9IGNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0XHRpZihiYXNpY0dhdGUpIHtcblx0XHRcdFx0XHRpZighZGVjb21wb3NlKXtcblx0XHRcdFx0XHRcdGlmKGNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdLmV4cG9ydEluZm8uYXFhc20gJiYgY2lyY3VpdC5iYXNpY0dhdGVzW3VzZWRHYXRlTmFtZV0uZXhwb3J0SW5mby5hcWFzbS5hcnJheSkge1xuXHRcdFx0XHRcdFx0XHR1bnN1cHBvcnRlZEFxYXNtSW5mbyA9IGNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdLmV4cG9ydEluZm8uYXFhc207XG5cdFx0XHRcblx0XHRcdFx0XHRcdFx0Z2F0ZVVuaXRhcnkgPSB1c2VkR2F0ZU5hbWUgKyBcIl9nYXRlXCI7XG5cdFx0XHRcdFx0XHRcdGFxYXNtICs9IGluZGVudCArIFwiZGVmIFwiICsgZ2F0ZVVuaXRhcnkgK1wiKFwiO1xuXHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0aWYodW5zdXBwb3J0ZWRBcWFzbUluZm8ucGFyYW1zICYmIHVuc3VwcG9ydGVkQXFhc21JbmZvLnBhcmFtcy5sZW5ndGgpe1xuXHRcdFx0XHRcdFx0XHRcdHZhciBhcmdDb3VudCA9IDA7XG5cdFx0XHRcdFx0XHRcdFx0dW5zdXBwb3J0ZWRBcWFzbUluZm8ucGFyYW1zLm1hcChmdW5jdGlvbihwYXJhbU5hbWUpe1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFxYXNtICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGFxYXNtICs9IGluZGVudCArIFwicF9cIiArIHBhcmFtTmFtZTtcblx0XHRcdFx0XHRcdFx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0YXFhc20gKz0gXCIpOlxcblwiO1xuXHRcdFx0XHRcdFx0XHRhcWFzbSArPSBnZXRJbmRlbnQoaW5kZW50RGVwdGggKyAxKSArIFwicmV0dXJuIG5wLmFycmF5KFwiICsgIHVuc3VwcG9ydGVkQXFhc21JbmZvLmFycmF5ICsgXCIpXFxuXFxuXCI7XHRcdFx0XHRcdFx0XHRcblxuXHRcdFx0XHRcdFx0XHR1bnN1cHBvcnRlZEdhdGVEZWZpbml0aW9uICs9IHVzZWRHYXRlTmFtZSArIFwiID0gQWJzdHJhY3RHYXRlKFxcXCJcIiArIHVzZWRHYXRlTmFtZSArIFwiXFxcIiwgW1wiO1xuXHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0dmFyIGNvdW50ID0gMDtcblxuXHRcdFx0XHRcdFx0XHRpZih1bnN1cHBvcnRlZEFxYXNtSW5mby5wYXJhbXMpe1xuXHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCB1bnN1cHBvcnRlZEFxYXNtSW5mby5wYXJhbXMubGVuZ3RoOyBpKyspe1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoY291bnQgPiAwKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dW5zdXBwb3J0ZWRHYXRlRGVmaW5pdGlvbiArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR1bnN1cHBvcnRlZEdhdGVEZWZpbml0aW9uICs9IFwiZmxvYXRcIjtcblx0XHRcdFx0XHRcdFx0XHRcdGNvdW50Kys7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aWYoYmFzaWNHYXRlLm1hdHJpeCl7XG5cdFx0XHRcdFx0XHRcdFx0YXJpdHkgPSBtYXRoLmxvZzIoYmFzaWNHYXRlLm1hdHJpeC5sZW5ndGgpO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0dW5zdXBwb3J0ZWRHYXRlRGVmaW5pdGlvbiArPSBcIl0sIG1hdHJpeF9nZW5lcmF0b3I9XCIgKyBnYXRlVW5pdGFyeSArIFwiLCBhcml0eT1cIiArIGFyaXR5ICtcIilcXG5cIjtcblx0XHRcdFx0XHRcdH1cdFx0XHRcdFx0XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHZhciBjdXN0b21HYXRlID0gc2VsZi5jdXN0b21HYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0XHRcdGlmKGN1c3RvbUdhdGUpIHtcblx0XHRcdFx0XHRcdHZhciBjdXN0b21DaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdFx0XHRcdFx0XHRjdXN0b21DaXJjdWl0LmxvYWQoY3VzdG9tR2F0ZSk7XG5cblx0XHRcdFx0XHRcdHZhciBuZXdPcHRpb25zID0ge1xuXHRcdFx0XHRcdFx0XHRjb21tZW50OiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRkZWNvbXBvc2U6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGFzSnVweXRlcjogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdHNob3RzOiBudWxsLFxuXHRcdFx0XHRcdFx0XHRoeWJyaWQ6IGZhbHNlXG5cdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRhcWFzbSArPSBjdXN0b21DaXJjdWl0LmV4cG9ydFRvQVFBU00obmV3T3B0aW9ucywgaXNFeHBvcnRQeUFRQVNNLCB1c2VkR2F0ZU5hbWUsIGluZGVudERlcHRoKTtcblx0XHRcdFx0XHRcdHN1Ym1vZHVsZUNvdW50Kys7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0YXFhc20gKz0gdW5zdXBwb3J0ZWRHYXRlRGVmaW5pdGlvbjtcblxuXHRcdFx0YXFhc20gKz0gXCJcXG5cIjtcblxuXHRcdFx0aWYoc2hvdHMpIHtcblx0XHRcdFx0YXFhc20gKz0gaW5kZW50ICsgXCJzaG90cyA9IFwiICsgc2hvdHMgKyBcIlxcblwiO1xuXHRcdFx0XHRhcWFzbSArPSBcIlxcblwiO1xuXHRcdFx0fVxuXG5cdFx0XHRhcWFzbSArPSBpbmRlbnQgKyAgXCJwcm9ncmFtID0gUHJvZ3JhbSgpXFxuXCI7XG5cdFx0XHRhcWFzbSArPSBpbmRlbnQgKyAgXCJxdWJpdHNfcmVnID0gcHJvZ3JhbS5xYWxsb2MoXCIrIGNpcmN1aXQubnVtUXViaXRzICtcIilcXG5cIjtcdFxuXHRcdFx0XG5cdFx0XHRmb3IodmFyIGNyZWdOYW1lIGluIGNpcmN1aXQuY3JlZ3Mpe1xuXHRcdFx0XHRhcWFzbSArPSBpbmRlbnQgKyBjcmVnTmFtZSArIFwiID0gcHJvZ3JhbS5jYWxsb2MoXCIgKyBjaXJjdWl0LmNyZWdzW2NyZWdOYW1lXS5sZW5ndGggKyBcIilcXG5cIjtcblx0XHRcdH1cblxuXHRcdFx0YXFhc20gKz0gXCJcXG5cIjtcblxuXHRcdFx0dmFyIGdsb2JhbFBhcmFtcyA9IHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMucGFyYW1zID8gdGhpcy5vcHRpb25zLnBhcmFtcyA6IHt9O1xuXHRcdFx0aWYodGhpcy5wYXJhbXMubGVuZ3RoKSB7XG5cdFx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhcmFtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdHZhciBnbG9iYWxQYXJhbU5hbWUgPSB0aGlzLnBhcmFtc1tpXTtcblxuXHRcdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnbG9iYWxQYXJhbXNbZ2xvYmFsUGFyYW1OYW1lXSk7XG5cdFx0XHRcdFx0dmFyIGdsb2JhbFBhcmFtVmFsdWUgPSBub2RlLnRvU3RyaW5nKHsgaGFuZGxlcjogbWF0aFRvU3RyaW5nSGFuZGxlciB9KTtcblxuXHRcdFx0XHRcdGFxYXNtICs9IGdsb2JhbFBhcmFtTmFtZSArIFwiID0gXCIgKyBnbG9iYWxQYXJhbVZhbHVlICsgXCJcXG5cIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRhcWFzbSArPSBcIlxcblwiO1xuXHRcdFx0fVxuXG5cdFx0XHRpZihoeWJyaWQpIHtcblx0XHRcdFx0YXFhc20gKz0gaW5kZW50ICsgXCJ0b2xlcmFuY2UgPSBcIiArICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMudG9sZXJhbmNlID8gdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMudG9sZXJhbmNlIHx8IFwiMC4wMDFcIiA6IFwiMC4wMDFcIikgKyBcIlxcblwiO1xuXHRcdFx0XHRhcWFzbSArPSBcIlxcblwiO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmKGV4cG9ydEFzR2F0ZU5hbWUpe1xuXHRcdGFxYXNtICs9IFwiZGVmIFwiICsgZXhwb3J0QXNHYXRlTmFtZSArIChhcmdzID8gXCIoXCIgKyBhcmdzICsgXCIpXCIgOiBcIlwiKSArIFwiOlxcblwiO1xuXHRcdGluZGVudERlcHRoKys7XG5cdFx0aW5kZW50ID0gZ2V0SW5kZW50KGluZGVudERlcHRoKTtcblx0XHRhcWFzbSArPSBpbmRlbnQgKyBcImNpcmN1aXQgPSBRUm91dGluZSgpXFxuXCJcdFxuXHR9IGVsc2Uge1xuXHRcdGlmKGh5YnJpZCkge1xuXHRcdFx0YXFhc20gKz0gXCJkZWYgb2JqZWN0aXZlX2Z1bmN0aW9uKHBhcmFtcyk6XFxuXCJcblx0XHRcdGluZGVudERlcHRoKys7XG5cdFx0XHRpbmRlbnQgPSBnZXRJbmRlbnQoaW5kZW50RGVwdGgpO1xuXHRcdH1cblx0fVxuXG5cdGlmKCFleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0aWYoc3VibW9kdWxlQ291bnQpIHtcblx0XHRcdGFxYXNtICs9IFwiXFxuXCI7XG5cdFx0XHR1c2VkR2F0ZXMubWFwKGZ1bmN0aW9uKHVzZWRHYXRlTmFtZSkge1xuXHRcdFx0XHRpZighY2lyY3VpdC5iYXNpY0dhdGVzW3VzZWRHYXRlTmFtZV0gJiYgY2lyY3VpdC5jdXN0b21HYXRlc1t1c2VkR2F0ZU5hbWVdKSB7XG5cdFx0XHRcdFx0YXFhc20gKz0gaW5kZW50ICsgdXNlZEdhdGVOYW1lICsgXCIoXCI7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgY2lyY3VpdC5udW1Db2xzKCk7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IGNpcmN1aXQubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gY2lyY3VpdC5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCkge1xuXHRcdFx0XHR2YXIgZ2F0ZURlZiA9IGNpcmN1aXQuZ2V0R2F0ZURlZihnYXRlLm5hbWUpO1xuXHRcdFx0XHR2YXIgbmFtZSA9IFwiXCI7XG5cdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMucGFyYW1zKXtcblx0XHRcdFx0XHRnYXRlUGFyYW1zID0gZ2F0ZS5vcHRpb25zLnBhcmFtcztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmKGdhdGUubmFtZSA9PSBcIm1lYXN1cmVcIil7XG5cdFx0XHRcdFx0aWYoIWlzRXhwb3J0UHlBUUFTTSkge1xuXHRcdFx0XHRcdFx0bmFtZSArPSBcIk1FQVNcIlxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRuYW1lICs9IFwicHJvZ3JhbS5tZWFzdXJlXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYoZ2F0ZS5uYW1lID09IFwicmVzZXRcIil7XG5cdFx0XHRcdFx0aWYoIWlzRXhwb3J0UHlBUUFTTSkge1xuXHRcdFx0XHRcdFx0bmFtZSArPSBcIlJFU0VUXCJcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0bmFtZSArPSBcInByb2dyYW0ucmVzZXRcIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZihnYXRlRGVmICYmIGdhdGVEZWYuZXhwb3J0SW5mbyl7XG5cdFx0XHRcdFx0aWYoZ2F0ZURlZi5leHBvcnRJbmZvLmFxYXNtKXtcblx0XHRcdFx0XHRcdHZhciBhcWFzbUluZm8gPSBnYXRlRGVmLmV4cG9ydEluZm8uYXFhc207XG5cdFx0XHRcdFx0XHR2YXIgYXFhc21JbmZvTmFtZSA9IFwiXCI7XG5cdFx0XHRcdFx0XHRpZihhcWFzbUluZm8ubmFtZSl7XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRpZihnYXRlRGVmLnBhcmFtcy5sZW5ndGgpe1xuXHRcdFx0XHRcdFx0XHRcdGdhdGVEZWYucGFyYW1zLm1hcChmdW5jdGlvbihwYXJhbSl7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgbm9kZSA9IG1hdGgucGFyc2UoZ2F0ZVBhcmFtc1twYXJhbV0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtVmFsdWUgPSBub2RlLnRvU3RyaW5nKHtoYW5kbGVyOiBtYXRoVG9TdHJpbmdIYW5kbGVyfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRhcWFzbUluZm9OYW1lID0gYXFhc21JbmZvLm5hbWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZighaXNFeHBvcnRQeUFRQVNNKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0YXFhc21JbmZvTmFtZSArPSBcIltcIiArIHBhcmFtVmFsdWUgKyBcIl1cIjtcblx0XHRcdFx0XHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRhcWFzbUluZm9OYW1lICs9IFwiKFwiICsgcGFyYW1WYWx1ZSArIFwiKVwiO1x0XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdH1lbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRhcWFzbUluZm9OYW1lICs9IGFxYXNtSW5mby5uYW1lO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aWYoYXFhc21JbmZvLmNvbnRyb2xsZWQgJiYgYXFhc21JbmZvLmRhZ2dlcil7XG5cdFx0XHRcdFx0XHRcdFx0aWYoIWlzRXhwb3J0UHlBUUFTTSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRuYW1lICs9IFwiQ1RSTChEQUcoXCIgKyBhcWFzbUluZm9OYW1lICsgXCIpKVwiO1xuXHRcdFx0XHRcdFx0XHRcdH1lbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdG5hbWUgKz0gYXFhc21JbmZvTmFtZSArIFwiLmRhZygpLmN0cmwoKVwiO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fWVsc2UgaWYoYXFhc21JbmZvLmNvbnRyb2xsZWQpe1xuXHRcdFx0XHRcdFx0XHRcdGlmKCFpc0V4cG9ydFB5QVFBU00pe1xuXHRcdFx0XHRcdFx0XHRcdFx0bmFtZSArPSBcIkNUUkwoXCIgKyBhcWFzbUluZm9OYW1lICsgXCIpXCI7XG5cdFx0XHRcdFx0XHRcdFx0fWVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0bmFtZSArPSBhcWFzbUluZm9OYW1lICsgXCIuY3RybCgpXCI7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9ZWxzZSBpZihhcWFzbUluZm8uZGFnZ2VyKXtcblx0XHRcdFx0XHRcdFx0XHRpZighaXNFeHBvcnRQeUFRQVNNKXtcblx0XHRcdFx0XHRcdFx0XHRcdG5hbWUgKz0gXCJEQUcoXCIgKyBhcWFzbUluZm9OYW1lICsgXCIpXCI7XG5cdFx0XHRcdFx0XHRcdFx0fWVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0bmFtZSArPSBhcWFzbUluZm9OYW1lICsgXCIuZGFnKClcIjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1lbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRuYW1lICs9IGFxYXNtSW5mb05hbWU7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0fWVsc2UgaWYoYXFhc21JbmZvLm1hdHJpeCl7XG5cdFx0XHRcdFx0XHRcdGlmKCFpc0V4cG9ydFB5QVFBU00pe1xuXHRcdFx0XHRcdFx0XHRcdG5hbWUgPSBcIltcIjtcblx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGsgPSAwIDsgayA8IGFxYXNtSW5mby5tYXRyaXgubGVuZ3RoOyBrKyspe1xuXHRcdFx0XHRcdFx0XHRcdFx0cm93ID0gYXFhc21JbmZvLm1hdHJpeFtrXTtcblx0XHRcdFx0XHRcdFx0XHRcdG5hbWUgKz0gXCJbXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgcm93Lmxlbmd0aDsgaSsrKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0bmFtZSArPSBcIihcIjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cm93X2VsZW1lbnQgPSByb3dbaV07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGFxYXNtSW5mby5wYXJhbXMpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFxYXNtSW5mby5wYXJhbXMubWFwKGZ1bmN0aW9uKHBhcmFtTmFtZSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW0gPSBnYXRlUGFyYW1zW3BhcmFtTmFtZV07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihyb3dfZWxlbWVudC50b1N0cmluZygpLmluZGV4T2YocGFyYW1OYW1lKSA+IDApe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyb3dfZWxlbWVudCA9IHJvd19lbGVtZW50LnJlcGxhY2UocGFyYW1OYW1lLCBwYXJhbSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0ZXZhbHVhdGVkX2V4cHJlc3Npb24gPSBtYXRoLmV2YWx1YXRlKHJvd19lbGVtZW50KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0bWF0cml4X2VsZW1lbnQgPSBtYXRoLmNvbXBsZXgoZXZhbHVhdGVkX2V4cHJlc3Npb24pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRtYXRyaXhfZWxlbWVudF9yZWFsID0gbWF0cml4X2VsZW1lbnRbXCJyZVwiXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0bWF0cml4X2VsZW1lbnRfaW0gPSBtYXRyaXhfZWxlbWVudFtcImltXCJdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRuYW1lICs9IG1hdHJpeF9lbGVtZW50X3JlYWwgKyBcIiwgXCIgKyBtYXRyaXhfZWxlbWVudF9pbSArIFwiKVwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoaSA8IHJvdy5sZW5ndGggLSAxKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRuYW1lICs9IFwiIFwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRuYW1lICs9IFwiXVwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGsgPCBhcWFzbUluZm8ubWF0cml4Lmxlbmd0aCAtIDEpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRuYW1lICs9IFwiIFwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRuYW1lICs9IFwiXVwiO1x0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0fWVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdG5hbWUgKz0gZ2F0ZS5uYW1lICsgXCIoXCI7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtQ291bnQgPSAwO1xuXHRcdFx0XHRcdFx0XHRcdGdhdGVEZWYucGFyYW1zLm1hcChmdW5jdGlvbihwYXJhbU5hbWUpe1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYocGFyYW1Db3VudCA+IDApe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRuYW1lICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnYXRlUGFyYW1zW3BhcmFtTmFtZV0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtVmFsdWUgPSBub2RlLnRvU3RyaW5nKHtoYW5kbGVyOiBtYXRoVG9TdHJpbmdIYW5kbGVyfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRuYW1lICs9IHBhcmFtVmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRwYXJhbUNvdW50Kys7XG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdFx0XHRuYW1lICs9IFwiKVwiO1xuXHRcdFx0XHRcdFx0XHR9XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRhcWFzbSArPSBpbmRlbnQgKyAgbmFtZTtcblxuXHRcdFx0XHRcdGlmKCFpc0V4cG9ydFB5QVFBU00pe1xuXHRcdFx0XHRcdFx0YXFhc20gKz0gXCIgXCI7XG5cdFx0XHRcdFx0fWVsc2Uge1xuXHRcdFx0XHRcdFx0YXFhc20gKz0gXCIoXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdFxuXHRcdFx0XHR2YXIgYXJnQ291bnQgPSAwO1xuXHRcdFx0XHRmb3IodmFyIHcgPSAwOyB3IDwgZ2F0ZS53aXJlcy5sZW5ndGg7IHcrKyl7XG5cdFx0XHRcdFx0aWYoYXJnQ291bnQgPiAwKXtcblx0XHRcdFx0XHRcdGFxYXNtICs9ICBcIiwgXCI7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYoIWlzRXhwb3J0UHlBUUFTTSl7XG5cdFx0XHRcdFx0XHRhcWFzbSArPSBcInFbXCIgKyBnYXRlLndpcmVzW3ddICsgXCJdXCI7XG5cdFx0XHRcdFx0fWVsc2Uge1xuXHRcdFx0XHRcdFx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdFx0XHRcdFx0XHRhcWFzbSArPSBxdWJpdExldHRlcihnYXRlLndpcmVzW3ddLCBjaXJjdWl0Lm51bVF1Yml0cyk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRhcWFzbSArPSBcInF1Yml0c19yZWdbXCIgKyBnYXRlLndpcmVzW3ddICsgXCJdXCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0YXJnQ291bnQgPSBhcmdDb3VudCArIDE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZihnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNyZWcpe1xuXHRcdFx0XHRcdGFxYXNtICs9IFwiLCBcIiArIGdhdGUub3B0aW9ucy5jcmVnLm5hbWUgKyBcIltcIiArIGdhdGUub3B0aW9ucy5jcmVnLmJpdCArIFwiXVwiO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYoaXNFeHBvcnRQeUFRQVNNKXtcblx0XHRcdFx0XHRhcWFzbSArPSBcIilcIjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGFxYXNtICs9IFwiXFxuXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdGFxYXNtICs9IGluZGVudCArIFwicmV0dXJuIGNpcmN1aXRcXG5cXG5cIjtcblx0fVxuXG5cdGlmKCFpc0V4cG9ydFB5QVFBU00pIHtcblx0XHRhcWFzbSArPSBcIkVORFwiO1xuXHR9IGVsc2Uge1xuXHRcdGlmKCFleHBvcnRBc0dhdGVOYW1lKXtcdFx0XHRcblx0XHRcdGFxYXNtICs9IGluZGVudCArICBcIlxcblwiO1xuXHRcdFx0YXFhc20gKz0gaW5kZW50ICsgIFwiY2lyY3VpdCA9IHByb2dyYW0udG9fY2lyYygpXFxuXCI7XG5cdFx0XHRhcWFzbSArPSBpbmRlbnQgKyAgXCJqb2IgPSBjaXJjdWl0LnRvX2pvYihuYnNob3RzPXNob3RzLCBhZ2dyZWdhdGVfZGF0YT1GYWxzZSlcXG5cIjtcblx0XHRcdGFxYXNtICs9IGluZGVudCArICBcInFwdSA9IGdldF9kZWZhdWx0X3FwdSgpXFxuXCI7XG5cdFx0XHRhcWFzbSArPSBpbmRlbnQgKyAgXCJqb2JfcmVzdWx0ID0gcXB1LnN1Ym1pdChqb2IpXFxuXCI7XG5cdFx0XHRhcWFzbSArPSBpbmRlbnQgKyAgXCJjb3VudHMgPSBDb3VudGVyKClcXG5cXG5cIjtcblx0XHRcdGFxYXNtICs9IGluZGVudCArICBcImZvciBzdGF0ZSBpbiBqb2JfcmVzdWx0OlxcblwiO1xuXHRcdFx0YXFhc20gKz0gaW5kZW50ICsgIFwiICAgIHN0cmluZ19zdGF0ZSA9IHN0cihzdGF0ZS5zdGF0ZSlcXG5cIjtcblx0XHRcdGFxYXNtICs9IGluZGVudCArICBcIiAgICBzdHJpbmdfc3RhdGUgPSBzdHJpbmdfc3RhdGVbc3RyaW5nX3N0YXRlLmZpbmQoJ3wnKSArIDE6IHN0cmluZ19zdGF0ZS5maW5kKCc+JyldXFxuXCI7XG5cdFx0XHRhcWFzbSArPSBpbmRlbnQgKyAgXCIgICAgc3RyaW5nX3N0YXRlID0gc3RyaW5nX3N0YXRlWzo6LTFdXFxuXCJcblx0XHRcdGFxYXNtICs9IGluZGVudCArICBcIiAgICBjb3VudHNbc3RyaW5nX3N0YXRlXSArPSAxXFxuXFxuXCJcblxuXHRcdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRcdGFxYXNtICs9IGluZGVudCArIFwiIyBDQUxDVUxBVEUgQ09TVCBIRVJFXFxuXCI7XG5cdFxuXHRcdFx0XHR2YXIgY29zdEZ1bmN0aW9uID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLmNvc3RGdW5jdGlvbiA/IHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLmNvc3RGdW5jdGlvbi5weXRob24gfHwgXCJcIiA6IFwiXCI7XG5cdFx0XHRcdGlmKCFjb3N0RnVuY3Rpb24udHJpbSgpKSB7XG5cdFx0XHRcdFx0Y29zdEZ1bmN0aW9uID0gXCJjb3N0ID0gMFwiO1xuXHRcdFx0XHR9XG5cdFxuXHRcdFx0XHRhcWFzbSArPSBhZGp1c3RJZGVudGF0aW9uKGNvc3RGdW5jdGlvbiwgaW5kZW50KTtcblx0XG5cdFx0XHRcdGFxYXNtICs9IFwiXFxuXCJcblx0XHRcdFx0YXFhc20gKz0gaW5kZW50ICsgXCJyZXR1cm4gY29zdFxcblwiO1x0XG5cdFxuXHRcdFx0XHRpbmRlbnREZXB0aC0tO1xuXHRcdFx0XHRpbmRlbnQgPSBnZXRJbmRlbnQoaW5kZW50RGVwdGgpO1xuXHRcdFx0XHRpZihoeWJyaWQpIHtcblx0XHRcdFx0XHR2YXIgZ2xvYmFsUGFyYW1MaXN0ID0gXCJcIjtcblx0XHRcdFx0XHR0aGlzLnBhcmFtcy5tYXAoZnVuY3Rpb24oZ2xvYmFsUGFyYW1OYW1lLCBnbG9iYWxQYXJhbUluZGV4KSB7XG5cdFx0XHRcdFx0XHRpZihnbG9iYWxQYXJhbUluZGV4ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRnbG9iYWxQYXJhbUxpc3QgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Z2xvYmFsUGFyYW1MaXN0ICs9IGdsb2JhbFBhcmFtTmFtZTtcblx0XHRcdFx0XHR9KTtcblx0XG5cdFx0XHRcdFx0YXFhc20gKz0gXCJcXG5cIjtcblx0XHRcdFx0XHRhcWFzbSArPSBcInBhcmFtcyA9IG5wLmFycmF5KFtcIiArIGdsb2JhbFBhcmFtTGlzdCArIFwiXSlcXG5cIjtcblx0XHRcdFx0XHRhcWFzbSArPSBcIlxcblwiO1xuXHRcdFx0XHRcdGFxYXNtICs9IFwibWluaW11bSA9IG1pbmltaXplKG9iamVjdGl2ZV9mdW5jdGlvbiwgcGFyYW1zLCBtZXRob2Q9XFxcIlwiICsgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucy5vcHRpbWl6ZXIgPyB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucy5vcHRpbWl6ZXIgOiBcIlBvd2VsbFwiKSArIFwiXFxcIiwgdG9sPXRvbGVyYW5jZSlcXG5cIjtcblx0XHRcdFx0XHRhcWFzbSArPSBcInByaW50KFxcXCJjb3N0OlxcXCIsIG1pbmltdW0uZnVuLCBcXFwicGFyYW1zOlxcXCIsIG1pbmltdW0ueClcXG5cIjtcblx0XHRcdFx0fVxuXHRcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGFxYXNtICs9IGluZGVudCArIFwicHJpbnQoY291bnRzKVwiO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmKGFzSnVweXRlciAmJiBpc0V4cG9ydFB5QVFBU00pIHtcblx0XHR2YXIgbm90ZWJvb2sgPSB7XG5cdFx0XHRtZXRhZGF0YToge1xuXHRcdFx0XHRrZXJuZWxzcGVjOiB7XG5cdFx0XHRcdFx0ZGlzcGxheV9uYW1lOiBcIlB5dGhvbiAzXCIsXG5cdFx0XHRcdFx0bGFuZ3VhZ2U6IFwicHl0aG9uXCIsXG5cdFx0XHRcdFx0bmFtZTogXCJweXRob24zXCJcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdG5iZm9ybWF0OiA0LFxuXHRcdFx0bmJmb3JtYXRfbWlub3I6IDAsXG5cdFx0XHRjZWxsczogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y2VsbF90eXBlOiBcImNvZGVcIixcblx0XHRcdFx0XHRzb3VyY2U6IGFxYXNtLFxuXHRcdFx0XHRcdG1ldGFkYXRhOiB7XG5cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG91dHB1dHM6IFtdLFxuXHRcdFx0XHRcdGV4ZWN1dGlvbl9jb3VudDogbnVsbFxuXHRcdFx0XHR9XG5cdFx0XHRdXG5cdFx0fTtcblx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkobm90ZWJvb2spO1xuXHR9XG5cblx0cmV0dXJuIGFxYXNtXG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0QVFBU00gPSBmdW5jdGlvbihjb21tZW50LCBkZWNvbXBvc2UsIGlzRXhwb3J0UHlBUUFTTSwgZXhwb3J0QXNHYXRlTmFtZSwgYXNKdXB5dGVyLCBzaG90cywgaHlicmlkLCBpbmRlbnREZXB0aCkge1xuXHR2YXIgb3B0aW9ucyA9IHtcblx0XHRjb21tZW50OiBjb21tZW50LFxuXHRcdGRlY29tcG9zZTogZGVjb21wb3NlLFxuXHRcdGFzSnVweXRlcjogYXNKdXB5dGVyLFxuXHRcdHNob3RzOiBzaG90cyxcblx0XHRoeWJyaWQ6IGh5YnJpZFxuXHR9O1xuXG5cdHJldHVybiB0aGlzLmV4cG9ydFRvQVFBU00ob3B0aW9ucywgaXNFeHBvcnRQeUFRQVNNLCBleHBvcnRBc0dhdGVOYW1lLCBpbmRlbnREZXB0aCk7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRUb1B5QVFBU00gPSBmdW5jdGlvbihvcHRpb25zLCBleHBvcnRBc0dhdGVOYW1lKSB7XG5cdHJldHVybiB0aGlzLmV4cG9ydFRvQVFBU00ob3B0aW9ucywgdHJ1ZSwgZXhwb3J0QXNHYXRlTmFtZSk7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0UHlBUUFTTSA9IGZ1bmN0aW9uKGNvbW1lbnQsIGRlY29tcG9zZSwgZXhwb3J0QXNHYXRlTmFtZSwgYXNKdXB5dGVyLCBzaG90cywgaHlicmlkKSB7XG5cdHZhciBvcHRpb25zID0ge1xuXHRcdGNvbW1lbnQ6IGNvbW1lbnQsXG5cdFx0ZGVjb21wb3NlOiBkZWNvbXBvc2UsXG5cdFx0YXNKdXB5dGVyOiBhc0p1cHl0ZXIsXG5cdFx0c2hvdHM6IHNob3RzLFxuXHRcdGh5YnJpZDogaHlicmlkXG5cdH07XG5cdHJldHVybiB0aGlzLmV4cG9ydFRvUHlBUUFTTShvcHRpb25zLCBleHBvcnRBc0dhdGVOYW1lKTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRUb0NpcnEgPSBmdW5jdGlvbihvcHRpb25zLCBleHBvcnRBc0dhdGVOYW1lKSB7XG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdHZhciBjb21tZW50ID0gb3B0aW9ucy5jb21tZW50O1xuXHR2YXIgZGVjb21wb3NlID0gb3B0aW9ucy5kZWNvbXBvc2U7XG5cdHZhciB2ZXJzaW9uU3RyID0gb3B0aW9ucy52ZXJzaW9uU3RyO1xuXHR2YXIgYXNKdXB5dGVyID0gb3B0aW9ucy5hc0p1cHl0ZXI7XG5cdHZhciBzaG90cyA9IG9wdGlvbnMuc2hvdHM7XG5cdHZhciBleHBvcnRUZnEgPSBvcHRpb25zLmV4cG9ydFRmcTtcblxuXHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0dmFyIHBsYXRmb3JtID0gXCJcIjtcblx0aWYoZXhwb3J0VGZxKSB7XG5cdFx0cGxhdGZvcm0gPSBcIlRGUVwiO1xuXHR9IGVsc2Uge1xuXHRcdHBsYXRmb3JtID0gXCJjaXJxXCI7XG5cdH1cblxuXHR2YXIgdmVyc2lvbiA9IHBhcnNlRmxvYXQodmVyc2lvblN0ciB8fCBcIjAuN1wiKTtcblx0aWYoaXNOYU4odmVyc2lvbikpIHtcblx0XHR2ZXJzaW9uID0gMC43O1xuXHR9XG5cblx0aWYodHlwZW9mIHNob3RzID09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRzaG90cyA9IDEwMjQ7XG5cdH1cblxuXHQvLyBkZWNvbXBvc2UgP1xuXHR2YXIgY2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRjaXJjdWl0LmxvYWQodGhpcy5zYXZlKGRlY29tcG9zZSkpO1xuXG5cdHZhciBjaXJxID0gXCJcIjtcblx0dmFyIGluZGVudCA9IFwiXCI7XG5cblx0Ly8gY29tbWVudFxuXHRpZihjb21tZW50KSB7XG5cdFx0dmFyIGNvbW0gPSAoY29tbWVudCB8fCBcIlwiKS5zcGxpdChcIlxcblwiKTtcblx0XHRjb21tLm1hcChmdW5jdGlvbihjbGluZSkge1xuXHRcdFx0aWYoY2xpbmUubGVuZ3RoID49IDEgJiYgY2xpbmVbMF0gIT0gXCIjXCIpIHtcblx0XHRcdFx0Y2lycSArPSBcIiMgXCI7XG5cdFx0XHR9XG5cdFx0XHRjaXJxICs9IGNsaW5lO1xuXHRcdFx0Y2lycSArPSBcIlxcblwiO1xuXHRcdH0pO1xuXHR9XG5cblx0dmFyIG1hdGhUb1N0cmluZ0hhbmRsZXIgPSBmdW5jdGlvbihub2RlLCBvcHRpb25zKSB7XG5cdFx0aWYobm9kZS5pc1N5bWJvbE5vZGUpIHtcblx0XHRcdHZhciBudW1weXMgPSBbXCJwaVwiLCBcInNpblwiLCBcImNvc1wiLCBcInRhblwiLCBcImFzaW5cIiwgXCJhY29zXCIsIFwiYXRhblwiXTtcblx0XHRcdGlmKG51bXB5cy5pbmRleE9mKG5vZGUubmFtZSkgPj0gMCkge1xuXHRcdFx0XHRyZXR1cm4gXCJucC5cIiArIG5vZGUubmFtZTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0dmFyIHBhcmFtc1RvQXJnID0gZnVuY3Rpb24oZ2F0ZU5hbWUsIGdhdGVQYXJhbXMpIHtcblx0XHR2YXIgYXJnQ291bnQgPSAwO1xuXHRcdGlmKGdhdGVQYXJhbXMpIHtcblx0XHRcdHZhciBnYXRlRGVmID0gdGhpcy5iYXNpY0dhdGVzW2dhdGVOYW1lXTtcblx0XHRcdGlmKCFnYXRlRGVmKSB7XG5cdFx0XHRcdGdhdGVEZWYgPSB0aGlzLmN1c3RvbUdhdGVzW2dhdGVOYW1lXTtcblx0XHRcdH1cblxuXHRcdFx0aWYoZ2F0ZURlZikge1xuXHRcdFx0XHR2YXIgcGFyYW1EZWYgPSBnYXRlRGVmLnBhcmFtcyB8fCBbXTtcblx0XHRcdFx0dmFyIHBhcmFtQ291bnQgPSBwYXJhbURlZi5sZW5ndGg7XG5cdFx0XHRcdGlmKHBhcmFtQ291bnQpIHtcdFx0XG5cdFx0XHRcdFx0Zm9yKHZhciBwID0gMDsgcCA8IHBhcmFtQ291bnQ7IHArKykge1xuXHRcdFx0XHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdGNpcnEgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dmFyIHBhcmFtTmFtZSA9IHBhcmFtRGVmW3BdO1xuXG5cdFx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHRcdC8vIHByZXBlbmQgJ25wJyB0byBtYXRoIGNvbnN0YW50c1xuXHRcdFx0XHRcdFx0aWYoZ2F0ZVBhcmFtc1twYXJhbU5hbWVdKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnYXRlUGFyYW1zW3BhcmFtTmFtZV0pO1xuXHRcdFx0XHRcdFx0XHRjaXJxICs9IG5vZGUudG9TdHJpbmcoeyBoYW5kbGVyOiBtYXRoVG9TdHJpbmdIYW5kbGVyIH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Ly8gLS0tXG5cblx0XHRcdFx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdGlmKGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHR2YXIgYXJncyA9IFwiXCI7XG5cdFx0dmFyIGFyZ0NvdW50ID0gMDtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgY2lyY3VpdC5wYXJhbXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmKGFyZ0NvdW50ID4gMCkge1xuXHRcdFx0XHRhcmdzICs9IFwiLCBcIjtcblx0XHRcdH1cblx0XHRcdGFyZ3MgKz0gY2lyY3VpdC5wYXJhbXNbaV07XG5cdFx0XHRhcmdDb3VudCsrO1xuXHRcdH1cblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgY2lyY3VpdC5udW1RdWJpdHM7IGkrKykge1xuXHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdGFyZ3MgKz0gXCIsIFwiO1xuXHRcdFx0fVxuXHRcdFx0YXJncyArPSBxdWJpdExldHRlcihpLCBjaXJjdWl0Lm51bVF1Yml0cyk7XG5cdFx0XHRhcmdDb3VudCsrO1xuXHRcdH1cblx0XHRjaXJxICs9IFwiZGVmIFwiICsgZXhwb3J0QXNHYXRlTmFtZSArIChhcmdzID8gXCIoXCIgKyBhcmdzICsgXCIpXCIgOiBcIlwiKSArIFwiOlxcblwiO1xuXHRcdGNpcnEgKz0gXCIgICAgcmV0dXJuIFtcXG5cIjtcblx0XHRpbmRlbnQgPSBcIiAgICAgICAgXCI7XG5cdH0gZWxzZSB7XG5cdFx0aWYoZXhwb3J0VGZxKXtcblx0XHRcdGNpcnEgKz0gXCJpbXBvcnQgdGVuc29yZmxvd19xdWFudHVtIGFzIHRmcVxcblwiXG5cdFx0fVxuXG5cdFx0Y2lycSArPSBcImltcG9ydCBjaXJxXFxuXCI7XG5cdFx0Y2lycSArPSBcImltcG9ydCBudW1weSBhcyBucFxcblwiO1xuXHRcdGNpcnEgKz0gXCJmcm9tIGZ1bmN0b29scyBpbXBvcnQgcmVkdWNlXFxuXCI7XG5cdFx0Y2lycSArPSBcIlxcblwiO1xuXG5cdFx0dmFyIGdsb2JhbFBhcmFtcyA9IHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMucGFyYW1zID8gdGhpcy5vcHRpb25zLnBhcmFtcyA6IHt9O1xuXHRcdGlmKHRoaXMucGFyYW1zLmxlbmd0aCkge1xuXHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFyYW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdHZhciBnbG9iYWxQYXJhbU5hbWUgPSB0aGlzLnBhcmFtc1tpXTtcblxuXHRcdFx0XHR2YXIgbm9kZSA9IG1hdGgucGFyc2UoZ2xvYmFsUGFyYW1zW2dsb2JhbFBhcmFtTmFtZV0pO1xuXHRcdFx0XHR2YXIgZ2xvYmFsUGFyYW1WYWx1ZSA9IG5vZGUudG9TdHJpbmcoeyBoYW5kbGVyOiBtYXRoVG9TdHJpbmdIYW5kbGVyIH0pO1xuXG5cdFx0XHRcdGNpcnEgKz0gZ2xvYmFsUGFyYW1OYW1lICsgXCIgPSBcIiArIGdsb2JhbFBhcmFtVmFsdWUgKyBcIlxcblwiO1xuXHRcdFx0fVxuXHRcdFx0Y2lycSArPSBcIlxcblwiO1xuXHRcdH1cblxuXHRcdHZhciB1c2VkR2F0ZXMgPSBjaXJjdWl0LnVzZWRHYXRlcygpO1xuXHRcdGlmKCFkZWNvbXBvc2UpIHtcblx0XHRcdHVzZWRHYXRlcy5tYXAoZnVuY3Rpb24odXNlZEdhdGVOYW1lKSB7XG5cdFx0XHRcdHZhciBiYXNpY0dhdGUgPSBjaXJjdWl0LmJhc2ljR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRcdFx0aWYoIWJhc2ljR2F0ZSkge1xuXHRcdFx0XHRcdHZhciBjdXN0b21HYXRlID0gc2VsZi5jdXN0b21HYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0XHRcdGlmKGN1c3RvbUdhdGUpIHtcblx0XHRcdFx0XHRcdHZhciBjdXN0b21DaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdFx0XHRcdFx0XHRjdXN0b21DaXJjdWl0LmxvYWQoY3VzdG9tR2F0ZSk7XG5cdFx0XHRcdFx0XHR2YXIgbmV3T3B0aW9ucyA9IHtcblx0XHRcdFx0XHRcdFx0Y29tbWVudDogXCJcIixcblx0XHRcdFx0XHRcdFx0ZGVjb21wb3NlOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHR2ZXJzaW9uU3RyOiB2ZXJzaW9uU3RyXG5cdFx0XHRcdFx0XHR9O1x0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0Y2lycSArPSBjdXN0b21DaXJjdWl0LmV4cG9ydFRvQ2lycShuZXdPcHRpb25zLCBleHBvcnRBc0dhdGVOYW1lKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHZhciBkZWZHYXRlcyA9IFwiXCI7XG5cdFx0dmFyIHVzZWRHYXRlcyA9IGNpcmN1aXQudXNlZEdhdGVzKCk7XG5cdFx0dXNlZEdhdGVzLm1hcChmdW5jdGlvbih1c2VkR2F0ZU5hbWUpIHtcblx0XHRcdHZhciBiYXNpY0dhdGUgPSBjaXJjdWl0LmJhc2ljR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRcdGlmKGJhc2ljR2F0ZSkge1xuXHRcdFx0XHRpZihiYXNpY0dhdGUuZXhwb3J0SW5mbyAmJiBiYXNpY0dhdGUuZXhwb3J0SW5mby5jaXJxKSB7XG5cdFx0XHRcdFx0dmFyIGNpcnFJbmZvID0gYmFzaWNHYXRlLmV4cG9ydEluZm8uY2lycTtcblx0XHRcdFx0XHR2YXIgaXNSZXBsYWNlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdGlmIChjaXJxSW5mby5yZXBsYWNlbWVudCkge1xuXHRcdFx0XHRcdFx0dmFyIHJlcGxhY2VtZW50R2F0ZURlZiA9IGNpcmN1aXQuZ2V0R2F0ZURlZihjaXJxSW5mby5yZXBsYWNlbWVudC5uYW1lKVxuXHRcdFx0XHRcdFx0Y2lycUluZm8gPSByZXBsYWNlbWVudEdhdGVEZWYuZXhwb3J0SW5mby5jaXJxXG5cdFx0XHRcdFx0XHRpc1JlcGxhY2VkID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYoY2lycUluZm8uYXJyYXkpIHtcblx0XHRcdFx0XHRcdGlmKCFleHBvcnRUZnEpe1xuXHRcdFx0XHRcdFx0XHQvLyBkZWZnYXRlXG5cdFx0XHRcdFx0XHRcdHZhciBkZWZOYW1lID0gaXNSZXBsYWNlZCA/IGNpcnFJbmZvLm5hbWUgOiB1c2VkR2F0ZU5hbWVcblx0XHRcdFx0XHRcdFx0aWYgKGRlZkdhdGVzLmluZGV4T2YoZGVmTmFtZSkgPCAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0ZGVmR2F0ZXMgKz0gXCJkZWYgXCIgKyBkZWZOYW1lICsgXCIoXCI7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtTGlzdCA9IFwiXCI7XG5cdFx0XHRcdFx0XHRcdFx0aWYoY2lycUluZm8ucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRwYXJhbUxpc3QgKz0gXCIsIFtcIjtcblx0XHRcdFx0XHRcdFx0XHRcdGNpcnFJbmZvLnBhcmFtcy5tYXAoZnVuY3Rpb24ocGFyYW1OYW1lLCBwYXJhbUluZGV4KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKHBhcmFtSW5kZXggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVmR2F0ZXMgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRlZkdhdGVzICs9IFwicF9cIiArIHBhcmFtTmFtZTtcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1MaXN0ICs9IFwiXVwiO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRkZWZHYXRlcyArPSBcIik6XFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0aWYoYmFzaWNHYXRlLm1hdHJpeCAmJiBiYXNpY0dhdGUubWF0cml4Lmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYodmVyc2lvbiA8IDAuNykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRzd2l0Y2goYmFzaWNHYXRlLm1hdHJpeC5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYXNlIDI6IGRlZkdhdGVzICs9IFwiICAgIHJldHVybiBjaXJxLlNpbmdsZVF1Yml0TWF0cml4R2F0ZShucC5hcnJheShcIiArIGNpcnFJbmZvLmFycmF5ICsgXCIpKVxcblwiOyBicmVhaztcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYXNlIDQ6IGRlZkdhdGVzICs9IFwiICAgIHJldHVybiBjaXJxLlR3b1F1Yml0TWF0cml4R2F0ZShucC5hcnJheShcIiArIGNpcnFJbmZvLmFycmF5ICsgXCIpKVxcblwiOyBicmVhaztcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZWZhdWx0OiBkZWZHYXRlcyArPSBcIiAgICAjIEV4cG9ydCB0byBcIiArIHBsYXRmb3JtICsgXCIgV0FSTklORzogQ2Fubm90IGRlZmluZSBcIiArIGJhc2ljR2F0ZS5tYXRyaXgubGVuZ3RoICsgXCIgeCBcIiArIGJhc2ljR2F0ZS5tYXRyaXgubGVuZ3RoICsgXCIgbWF0cml4IGdhdGVcXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVmR2F0ZXMgKz0gXCIgICAgcmV0dXJuIGNpcnEuTWF0cml4R2F0ZShucC5hcnJheShcIiArIGNpcnFJbmZvLmFycmF5ICsgXCIpKVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRkZWZHYXRlcyArPSBcIlxcblwiO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0Y2lycSArPSBkZWZHYXRlcztcblxuXHRcdGlmKGV4cG9ydFRmcSl7XG5cdFx0XHRjaXJxICs9IFwicSA9IGNpcnEuR3JpZFF1Yml0LnJlY3QoMSwgXCIgKyBjaXJjdWl0Lm51bVF1Yml0cyArIFwiKVxcblwiO1xuXHRcdH1lbHNle1xuXHRcdFx0Y2lycSArPSBcInEgPSBbY2lycS5OYW1lZFF1Yml0KCdxJyArIHN0cihpKSkgZm9yIGkgaW4gcmFuZ2UoXCIgKyBjaXJjdWl0Lm51bVF1Yml0cyArIFwiKV1cXG5cIjtcblx0XHR9XG5cblx0XHRjaXJxICs9IFwiXFxuXCI7XG5cblx0XHRpZih2ZXJzaW9uIDwgMC43KSB7XG5cdFx0XHRjaXJxICs9IFwiY2lyY3VpdCA9IGNpcnEuQ2lyY3VpdC5mcm9tX29wcyhcXG5cIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y2lycSArPSBcImNpcmN1aXQgPSBjaXJxLkNpcmN1aXQoXFxuXCI7XG5cdFx0fVxuXHRcdGluZGVudCA9IFwiICAgIFwiO1xuXHR9XG5cdFxuXHR2YXIgbnVtQ29scyA9IGNpcmN1aXQubnVtQ29scygpO1xuXHR2YXIgZ2F0ZUNvdW50ZXIgPSAwO1xuXHR2YXIgbXVsdGlzaG90S2V5cyA9ICcnO1xuXHR2YXIgdGVtcEdhdGVEZWYgPSBudWxsO1xuXHR2YXIgbm9UZnFTdXBwb3J0ID0gZmFsc2U7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSBjaXJjdWl0LmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmNvbm5lY3RvciA9PSAwKSB7XG5cdFx0XHRcdGlmKGdhdGVDb3VudGVyID4gMCl7XG5cdFx0XHRcdFx0Y2lycSArPSBcIixcIjtcblx0XHRcdFx0XHRpZihleHBvcnRUZnEgJiYgbm9UZnFTdXBwb3J0KXtcblx0XHRcdFx0XHRcdGNpcnEgKz0gaW5kZW50ICsgXCIjIEV4cG9ydCB0byBURlEgV0FSTklORzogR2F0ZSBub3QgeWV0IHN1cHBvcnRlZCBieSBUZW5zb3JmbG93IFF1YW50dW1cIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2lycSArPSBcIlxcblwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHZhciBnYXRlRGVmID0gY2lyY3VpdC5nZXRHYXRlRGVmKGdhdGUubmFtZSk7XG5cdFx0XHRcdHZhciBnYXRlUGFyYW1zID0gZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5wYXJhbXMgPyBnYXRlLm9wdGlvbnMucGFyYW1zIDoge307XG5cdFx0XHRcdHZhciBjaXJxSW5mbyA9IG51bGw7XG5cdFx0XHRcdHZhciBpc0NvbnRyb2xsZWRHYXRlID0gZmFsc2U7XG5cdFx0XHRcdHZhciBpc0Jhc2ljR2F0ZSA9ICEhY2lyY3VpdC5iYXNpY0dhdGVzW2dhdGUubmFtZV07XG5cdFx0XHRcdGlmKGdhdGVEZWYpIHtcblx0XHRcdFx0XHRpZihnYXRlRGVmLmV4cG9ydEluZm8pIHtcblx0XHRcdFx0XHRcdFx0bm9UZnFTdXBwb3J0ID0gZ2F0ZURlZi5leHBvcnRJbmZvLmNpcnEubm90VGZxU3VwcG9ydGVkID8gdHJ1ZSA6IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRpZihnYXRlRGVmLmV4cG9ydEluZm8uY2lycSAmJiBnYXRlRGVmLmV4cG9ydEluZm8uY2lycS5yZXBsYWNlbWVudCkge1xuXHRcdFx0XHRcdFx0XHRpZihnYXRlRGVmLmV4cG9ydEluZm8uY2lycS5yZXBsYWNlbWVudC5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdFx0XHRnYXRlUGFyYW1zID0gZ2F0ZURlZi5leHBvcnRJbmZvLmNpcnEucmVwbGFjZW1lbnQucGFyYW1zO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGlzQ29udHJvbGxlZEdhdGUgPSAoZ2F0ZURlZi5leHBvcnRJbmZvLmNpcnEucmVwbGFjZW1lbnQudHlwZSAmJiAoZ2F0ZURlZi5leHBvcnRJbmZvLmNpcnEucmVwbGFjZW1lbnQudHlwZSA9PSBcImNvbnRyb2xsZWRcIikpID8gdHJ1ZSA6IGZhbHNlO1x0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdG5vVGZxU3VwcG9ydCA9IGdhdGVEZWYuZXhwb3J0SW5mby5jaXJxLnJlcGxhY2VtZW50Lm5vdFRmcVN1cHBvcnRlZCA/IHRydWUgOiBmYWxzZTtcblx0XHRcdFx0XHRcdFx0Z2F0ZURlZiA9IGNpcmN1aXQuZ2V0R2F0ZURlZihnYXRlRGVmLmV4cG9ydEluZm8uY2lycS5yZXBsYWNlbWVudC5uYW1lKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGNpcnFJbmZvID0gKGdhdGVEZWYgJiYgZ2F0ZURlZi5leHBvcnRJbmZvICYmIGdhdGVEZWYuZXhwb3J0SW5mby5jaXJxKSA/IGdhdGVEZWYuZXhwb3J0SW5mby5jaXJxIDogbnVsbDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0Z2F0ZUNvdW50ZXIrKztcblxuXHRcdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZykge1xuXHRcdFx0XHRcdFx0Y2lycSArPSBpbmRlbnQgKyBcIiMgRXhwb3J0IHRvIFwiICsgcGxhdGZvcm0gK1wiIFdBUk5JTkc6IGNsYXNzaWNhbCBjb250cm9sIG5vdCBpbXBsZW1lbnRlZCB5ZXQuXFxuXCI7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dmFyIHRtcFBhcmFtQ291bnQgPSAwO1xuXHRcdFx0XHRcdHZhciBwYXJhbVN0cmluZyA9IFwiXCI7XG5cblxuXHRcdFx0XHRcdGlmKGdhdGVQYXJhbXMpIHtcblx0XHRcdFx0XHRcdHZhciBwYXJhbURlZiA9IGdhdGVEZWYucGFyYW1zIHx8IFtdO1xuXHRcdFx0XHRcdFx0aWYoZ2F0ZS5uYW1lID09IFwieXlcIil7XG5cdFx0XHRcdFx0XHRcdHBhcmFtRGVmID0gW107XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR2YXIgcGFyYW1Db3VudCA9IHBhcmFtRGVmLmxlbmd0aDtcblx0XHRcdFx0XHRcdGlmKHBhcmFtQ291bnQpIHtcblx0XHRcdFx0XHRcdFx0Zm9yKHZhciBwID0gMDsgcCA8IHBhcmFtQ291bnQ7IHArKykge1xuXHRcdFx0XHRcdFx0XHRcdGlmKHRtcFBhcmFtQ291bnQgPT0gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1TdHJpbmcgKz0gXCIoXCI7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGlmKHRtcFBhcmFtQ291bnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRwYXJhbVN0cmluZyArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHZhciBwYXJhbU5hbWUgPSBwYXJhbURlZltwXTtcblx0XHRcdFx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHRcdFx0XHQvLyBwcmVwZW5kICducCcgdG8gbWF0aCBjb25zdGFudHNcblx0XHRcdFx0XHRcdFx0XHRpZihnYXRlUGFyYW1zW3BhcmFtTmFtZV0pIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnYXRlUGFyYW1zW3BhcmFtTmFtZV0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoIW5vZGUuYXJncyl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgcGFyYW0gaW4gZ2F0ZS5vcHRpb25zLnBhcmFtcyl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZSA9IG1hdGgucGFyc2UoZ2F0ZS5vcHRpb25zLnBhcmFtc1twYXJhbV0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRwYXJhbVN0cmluZyArPSBub2RlLnRvU3RyaW5nKHsgaGFuZGxlcjogbWF0aFRvU3RyaW5nSGFuZGxlciB9KTtcdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0Ly8gLS0tXG5cdFx0XHRcdFx0XHRcdFx0aWYodG1wUGFyYW1Db3VudCA9PSBwYXJhbUNvdW50IC0gMSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoaXNCYXNpY0dhdGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1TdHJpbmcgKz0gXCIpXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJhbVN0cmluZyArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHRtcFBhcmFtQ291bnQrKztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKGNpcnFJbmZvKSB7XG5cdFx0XHRcdFx0XHR2YXIgYWRkQnJhY2VzID0gY2lycUluZm8ubmFtZS5pbmRleE9mKFwiKipcIikgPj0gMDtcblxuXHRcdFx0XHRcdFx0Y2lycSArPSBpbmRlbnQ7XG5cblx0XHRcdFx0XHRcdGlmKGFkZEJyYWNlcykge1xuXHRcdFx0XHRcdFx0XHRjaXJxICs9IFwiKFwiO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZighY2lycUluZm8uYXJyYXkpIHtcblx0XHRcdFx0XHRcdFx0Y2lycSArPSBcImNpcnEuXCI7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKGV4cG9ydFRmcSAmJiBjaXJxSW5mby50ZnFSZXBsYWNlbWVudCAmJiBjaXJxSW5mby50ZnFSZXBsYWNlbWVudC5uYW1lKXtcblx0XHRcdFx0XHRcdFx0Y2lycSArPSBcImNpcnEuXCIgKyBjaXJxSW5mby50ZnFSZXBsYWNlbWVudC5uYW1lXG5cdFx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdFx0Y2lycSArPSBjaXJxSW5mby5uYW1lO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZihhZGRCcmFjZXMpIHtcblx0XHRcdFx0XHRcdFx0Y2lycSArPSBcIilcIjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjaXJxICs9IGluZGVudCArIGdhdGUubmFtZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjaXJxICs9IHBhcmFtU3RyaW5nO1x0XHRcdFx0XHRcblx0XHRcdFx0XHRcblxuXHRcdFx0XHRcdGlmKGlzQ29udHJvbGxlZEdhdGUpIHtcblx0XHRcdFx0XHRcdGNpcnEgKz0gXCIuY29udHJvbGxlZCgpLm9uKFwiXG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGlmKGlzQmFzaWNHYXRlKSB7XG5cdFx0XHRcdFx0XHRcdGNpcnEgKz0gXCIoXCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dmFyIGFyZ0NvdW50ID0gMDtcblx0XHRcdFx0XHRmb3IodmFyIHcgPSAwOyB3IDwgZ2F0ZS53aXJlcy5sZW5ndGg7IHcrKykge1xuXHRcdFx0XHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdGNpcnEgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdFx0XHRcdFx0XHRjaXJxICs9IHF1Yml0TGV0dGVyKGdhdGUud2lyZXNbd10sIGNpcmN1aXQubnVtUXViaXRzKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGNpcnEgKz0gXCJxW1wiICsgZ2F0ZS53aXJlc1t3XSArIFwiXVwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YXJnQ291bnQrKztcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZihnYXRlLm5hbWUgPT0gXCJtZWFzdXJlXCIgJiYgZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jcmVnKSB7XG5cdFx0XHRcdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0XHRcdFx0Y2lycSArPSBcIiwga2V5PVwiO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRjaXJxICs9IFwiJ1wiICsgZ2F0ZS5vcHRpb25zLmNyZWcubmFtZSArIGdhdGUub3B0aW9ucy5jcmVnLmJpdCArIFwiJ1wiO1xuXG5cdFx0XHRcdFx0XHRpZihjb2x1bW4gPT0gbnVtQ29scyAtIDEgJiYgd2lyZSA9PSB0aGlzLm51bVF1Yml0cyAtIDEpe1xuXHRcdFx0XHRcdFx0XHRtdWx0aXNob3RLZXlzICs9IFwiJ1wiICsgZ2F0ZS5vcHRpb25zLmNyZWcubmFtZSArIGdhdGUub3B0aW9ucy5jcmVnLmJpdCArIFwiJ1wiO1xuXHRcdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHRcdG11bHRpc2hvdEtleXMgKz0gXCInXCIgKyBnYXRlLm9wdGlvbnMuY3JlZy5uYW1lICsgZ2F0ZS5vcHRpb25zLmNyZWcuYml0ICsgXCInLCBcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y2lycSArPSBcIilcIjtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNpcnEgKz0gaW5kZW50ICsgXCIjIEV4cG9ydCB0byBcIiArIHBsYXRmb3JtICsgXCIgV0FSTklORzogdW5rbm93biBnYXRlIFxcXCJcIiArIGdhdGUubmFtZSArIFwiXFxcIi5cIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmKGV4cG9ydFRmcSAmJiBub1RmcVN1cHBvcnQpe1xuXHRcdGNpcnEgKz0gaW5kZW50ICsgXCIjIEV4cG9ydCB0byBURlEgV0FSTklORzogR2F0ZSBub3QgeWV0IHN1cHBvcnRlZCBieSBUZW5zb3JmbG93IFF1YW50dVwiO1xuXHR9XG5cblx0aWYoIWV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRjaXJxICs9IFwiXFxuKVxcblwiO1xuXHRcdGNpcnEgKz0gXCJcXG5cIjtcblx0XHRpZighZXhwb3J0VGZxKXtcblx0XHRcdGNpcnEgKz0gXCJzaW11bGF0b3IgPSBjaXJxLlNpbXVsYXRvcigpXFxuXCI7XG5cdFx0XHRjaXJxICs9IFwicmVzdWx0ID0gc2ltdWxhdG9yLnJ1bihjaXJjdWl0LCByZXBldGl0aW9ucz1cIisgc2hvdHMgK1wiKVxcblwiO1xuXHRcdFx0Y2lycSArPSBcInJlc3VsdF9kaWN0ID0gZGljdChyZXN1bHQubXVsdGlfbWVhc3VyZW1lbnRfaGlzdG9ncmFtKGtleXM9W1wiICsgbXVsdGlzaG90S2V5cyArIFwiXSkpXFxuXCI7XG5cdFx0XHRjaXJxICs9IFwia2V5cyA9IGxpc3QobWFwKGxhbWJkYSBhcnI6IHJlZHVjZShsYW1iZGEgeCwgeTogc3RyKHgpICsgc3RyKHkpLCBhcnJbOjotMV0pLCByZXN1bHRfZGljdC5rZXlzKCkpKVxcblwiO1xuXHRcdFx0Y2lycSArPSBcImNvdW50cyA9IGRpY3QoemlwKGtleXMsW3ZhbHVlIGZvciB2YWx1ZSBpbiByZXN1bHRfZGljdC52YWx1ZXMoKV0pKVxcblwiO1xuXHRcdFx0Y2lycSArPSBcInByaW50KGNvdW50cylcIjtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Y2lycSArPSBcIlxcbiAgICBdXFxuXCI7XG5cdFx0Y2lycSArPSBcIlxcblwiO1xuXHR9XG5cblx0aWYoYXNKdXB5dGVyKSB7XG5cdFx0dmFyIG5vdGVib29rID0ge1xuXHRcdFx0bWV0YWRhdGE6IHtcblx0XHRcdFx0a2VybmVsc3BlYzoge1xuXHRcdFx0XHRcdGRpc3BsYXlfbmFtZTogXCJQeXRob24gM1wiLFxuXHRcdFx0XHRcdGxhbmd1YWdlOiBcInB5dGhvblwiLFxuXHRcdFx0XHRcdG5hbWU6IFwicHl0aG9uM1wiXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRuYmZvcm1hdDogNCxcblx0XHRcdG5iZm9ybWF0X21pbm9yOiAwLFxuXHRcdFx0Y2VsbHM6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGNlbGxfdHlwZTogXCJjb2RlXCIsXG5cdFx0XHRcdFx0c291cmNlOiBjaXJxLFxuXHRcdFx0XHRcdG1ldGFkYXRhOiB7XG5cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG91dHB1dHM6IFtdLFxuXHRcdFx0XHRcdGV4ZWN1dGlvbl9jb3VudDogbnVsbFxuXHRcdFx0XHR9XG5cdFx0XHRdXG5cdFx0fTtcblx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkobm90ZWJvb2spO1xuXHR9XG5cblx0cmV0dXJuIGNpcnE7XG59XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRUb1RGUSA9IGZ1bmN0aW9uKG9wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0dmFyIGNvbW1lbnQgPSBvcHRpb25zLmNvbW1lbnQ7XG5cdHZhciBkZWNvbXBvc2UgPSBvcHRpb25zLmRlY29tcG9zZTtcblx0dmFyIHZlcnNpb25TdHIgPSBvcHRpb25zLnZlcnNpb25TdHI7XG5cdHZhciBhc0p1cHl0ZXIgPSBvcHRpb25zLmFzSnVweXRlcjtcblx0dmFyIHNob3RzID0gb3B0aW9ucy5zaG90cztcblx0XG5cdHZhciBzZWxmID0gdGhpcztcblxuXHRpZih0eXBlb2Ygc2hvdHMgPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdHNob3RzID0gMTAyNDtcblx0fVxuXG5cdC8vIGRlY29tcG9zZSA/XG5cdHZhciBjaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdGNpcmN1aXQubG9hZCh0aGlzLnNhdmUoZGVjb21wb3NlKSk7XG5cblx0dmFyIHRmcSA9IFwiXCI7XG5cdHZhciBpbmRlbnQgPSBcIlwiO1xuXG5cdC8vIGNvbW1lbnRcblx0aWYoY29tbWVudCkge1xuXHRcdHZhciBjb21tID0gKGNvbW1lbnQgfHwgXCJcIikuc3BsaXQoXCJcXG5cIik7XG5cdFx0Y29tbS5tYXAoZnVuY3Rpb24oY2xpbmUpIHtcblx0XHRcdGlmKGNsaW5lLmxlbmd0aCA+PSAxICYmIGNsaW5lWzBdICE9IFwiI1wiKSB7XG5cdFx0XHRcdGNpcnEgKz0gXCIjIFwiO1xuXHRcdFx0fVxuXHRcdFx0Y2lycSArPSBjbGluZTtcblx0XHRcdGNpcnEgKz0gXCJcXG5cIjtcblx0XHR9KTtcblx0fVxuXG5cdHZhciBuZXdPcHRpb25zID0ge1xuXHRcdGNvbW1lbnQ6IGNvbW1lbnQsXG5cdFx0ZGVjb21wb3NlOiBkZWNvbXBvc2UsXG5cdFx0dmVyc2lvblN0cjogdmVyc2lvblN0cixcblx0XHRhc0p1cHl0ZXI6IGZhbHNlLFxuXHRcdHNob3RzOiBzaG90cyxcblx0XHRleHBvcnRUZnE6IHRydWVcblx0fTtcdFx0XHRcdFx0XHRcblx0dGZxICs9IGNpcmN1aXQuZXhwb3J0VG9DaXJxKG5ld09wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUpO1xuXHR0ZnEgKz0gXCJyZXN1bHRzX2xpc3QgPSB0ZnEubGF5ZXJzLlNhbXBsZSgpKGNpcmN1aXQsIHJlcGV0aXRpb25zPVwiK3Nob3RzK1wiKS50b19saXN0KClbMF1cXG5cIjtcblx0dGZxICs9IFwicmVzdWx0cyA9IGxpc3QobWFwKGxhbWJkYSBhcnI6IHJlZHVjZShsYW1iZGEgeCwgeTogc3RyKHgpICsgc3RyKHkpLCBhcnJbOjotMV0pLCByZXN1bHRzX2xpc3QpKVxcblwiO1xuXHR0ZnEgKz0gXCJjb3VudHMgPSBkaWN0KHppcChyZXN1bHRzLFtyZXN1bHRzLmNvdW50KGkpIGZvciBpIGluIHJlc3VsdHNdKSlcXG5cIjtcblx0dGZxICs9IFwicHJpbnQoY291bnRzKVwiO1xuXG5cdGlmKGFzSnVweXRlcikge1xuXHRcdHZhciBub3RlYm9vayA9IHtcblx0XHRcdG1ldGFkYXRhOiB7XG5cdFx0XHRcdGtlcm5lbHNwZWM6IHtcblx0XHRcdFx0XHRkaXNwbGF5X25hbWU6IFwiUHl0aG9uIDNcIixcblx0XHRcdFx0XHRsYW5ndWFnZTogXCJweXRob25cIixcblx0XHRcdFx0XHRuYW1lOiBcInB5dGhvbjNcIlxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0bmJmb3JtYXQ6IDQsXG5cdFx0XHRuYmZvcm1hdF9taW5vcjogMCxcblx0XHRcdGNlbGxzOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRjZWxsX3R5cGU6IFwiY29kZVwiLFxuXHRcdFx0XHRcdHNvdXJjZTogdGZxLFxuXHRcdFx0XHRcdG1ldGFkYXRhOiB7XG5cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG91dHB1dHM6IFtdLFxuXHRcdFx0XHRcdGV4ZWN1dGlvbl9jb3VudDogbnVsbFxuXHRcdFx0XHR9XG5cdFx0XHRdXG5cdFx0fTtcblx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkobm90ZWJvb2spO1xuXHR9XG5cblx0cmV0dXJuIHRmcTtcbn1cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFRvUVNoYXJwID0gZnVuY3Rpb24ob3B0aW9ucywgZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR2YXIgY29tbWVudCA9IG9wdGlvbnMuY29tbWVudDtcblx0dmFyIGRlY29tcG9zZSA9IG9wdGlvbnMuZGVjb21wb3NlO1xuXHR2YXIgdmVyc2lvblN0ciA9IG9wdGlvbnMudmVyc2lvblN0cjtcblx0dmFyIGFzSnVweXRlciA9IG9wdGlvbnMuYXNKdXB5dGVyO1xuXHR2YXIgY2lyY3VpdE5hbWUgPSBvcHRpb25zLmNpcmN1aXROYW1lO1xuXHR2YXIgaW5kZW50RGVwdGggPSBvcHRpb25zLmluZGVudERlcHRoO1xuXG5cdHZhciBzZWxmID0gdGhpcztcblx0XG5cdHZhciBtYXRoVG9TdHJpbmdIYW5kbGVyID0gZnVuY3Rpb24obm9kZSwgb3B0aW9ucykge1xuXG5cdFx0Ly8gc3ltYm9sc1xuXHRcdGlmKG5vZGUuaXNTeW1ib2xOb2RlKSB7XG5cdFx0XHR2YXIgcGFyYW1ldGVySnNvbiA9IHsgXCJwaVwiOiBcIlBJKClcIiB9O1xuXHRcdFx0aWYocGFyYW1ldGVySnNvbltub2RlLm5hbWVdKXtcblx0XHRcdFx0cmV0dXJuIHBhcmFtZXRlckpzb25bbm9kZS5uYW1lXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBjb25zdGFudFxuXHRcdGlmKG5vZGUuaXNDb25zdGFudE5vZGUpIHtcblx0XHRcdC8vIGNvbnZlcnQgaW50ZWdlciB0byBmbG9hdFxuXHRcdFx0aWYoTnVtYmVyLmlzSW50ZWdlcihub2RlLnZhbHVlKSkge1xuXHRcdFx0XHRyZXR1cm4gKG5vZGUudmFsdWUpLnRvRml4ZWQoMSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdHZhciBvcGVyYXRpb25OYW1lID0gY2lyY3VpdE5hbWUgfHwgXCJDaXJjdWl0XCI7XG5cblx0aW5kZW50RGVwdGggPSBpbmRlbnREZXB0aCB8fCAwO1xuXG5cdGZ1bmN0aW9uIGdldEluZGVudChkZXB0aCkge1xuXHRcdHZhciBpbmRlbnQgPSBcIlwiO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBkZXB0aDsgaSsrKSB7XG5cdFx0XHRpbmRlbnQgKz0gXCIgICAgXCI7XG5cdFx0fVxuXHRcdHJldHVybiBpbmRlbnQ7XG5cdH1cblxuXHQvLyBkZWNvbXBvc2UgP1xuXHR2YXIgY2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRjaXJjdWl0LmxvYWQodGhpcy5zYXZlKGRlY29tcG9zZSkpO1xuXG5cdHZhciBxc2hhcnAgPSBcIlwiO1xuXHR2YXIgaW5kZW50ID0gZ2V0SW5kZW50KGluZGVudERlcHRoKTtcblxuXHRpZighZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdGlmKCFhc0p1cHl0ZXIpIHtcblx0XHRcdC8vIG9wZW5pbmcgbmFtZXNwYWNlXG5cdFx0XHRxc2hhcnAgKz0gXCJuYW1lc3BhY2UgUXVhbnR1bSB7XFxuXCI7XG5cdFx0XHRpbmRlbnREZXB0aCsrO1xuXHRcdFx0aW5kZW50ID0gZ2V0SW5kZW50KGluZGVudERlcHRoKTtcblx0XHR9XG5cblx0XHRxc2hhcnAgKz0gaW5kZW50K1wib3BlbiBNaWNyb3NvZnQuUXVhbnR1bS5JbnRyaW5zaWM7XFxuXCI7XG5cdFx0cXNoYXJwICs9IGluZGVudCtcIm9wZW4gTWljcm9zb2Z0LlF1YW50dW0uQ2Fub247XFxuXCI7XG5cdFx0cXNoYXJwICs9IGluZGVudCtcIm9wZW4gTWljcm9zb2Z0LlF1YW50dW0uTWF0aDtcXG5cIjtcblx0XHRxc2hhcnAgKz0gaW5kZW50K1wib3BlbiBNaWNyb3NvZnQuUXVhbnR1bS5Db252ZXJ0O1xcblwiO1xuXG5cdFx0cXNoYXJwICs9IFwiXFxuXCI7XG5cblx0XHRxc2hhcnAgKz0gaW5kZW50K1wiZnVuY3Rpb24gU2V0Qml0VmFsdWUocmVnOiBJbnQsIGJpdDogSW50LCB2YWx1ZTogQm9vbCk6IEludCB7XFxuXCI7XG5cdFx0cXNoYXJwICs9IGluZGVudCtcIiAgICBpZih2YWx1ZSkge1xcblwiO1xuXHRcdHFzaGFycCArPSBpbmRlbnQrXCIgICAgICAgIHJldHVybiByZWcgfHx8ICgxIDw8PCBiaXQpO1xcblwiO1xuXHRcdHFzaGFycCArPSBpbmRlbnQrXCIgICAgfSBlbHNlIHtcXG5cIjtcblx0XHRxc2hhcnAgKz0gaW5kZW50K1wiICAgICAgICByZXR1cm4gcmVnICYmJiB+fn4oMSA8PDwgYml0KTtcXG5cIjtcblx0XHRxc2hhcnAgKz0gaW5kZW50K1wiICAgIH1cXG5cIjtcblx0XHRxc2hhcnAgKz0gaW5kZW50K1wifVxcblwiO1xuXG5cdFx0cXNoYXJwICs9IGluZGVudCtcIlxcblwiO1xuXHR9XG5cblx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdHZhciBhcmdzID0gXCJcIjtcblx0XHR2YXIgYXJnQ291bnQgPSAwO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBjaXJjdWl0LnBhcmFtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdGFyZ3MgKz0gXCIsIFwiO1xuXHRcdFx0fVxuXHRcdFx0YXJncyArPSBjaXJjdWl0LnBhcmFtc1tpXTtcblx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0fVxuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBjaXJjdWl0Lm51bVF1Yml0czsgaSsrKSB7XG5cdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0YXJncyArPSBcIiwgXCI7XG5cdFx0XHR9XG5cdFx0XHRhcmdzICs9IHF1Yml0TGV0dGVyKGksIGNpcmN1aXQubnVtUXViaXRzKSArIFwiOiBRdWJpdFwiO1xuXHRcdFx0YXJnQ291bnQrKztcblx0XHR9XG5cdFx0cXNoYXJwICs9IGluZGVudCArIFwib3BlcmF0aW9uIFwiICsgZXhwb3J0QXNHYXRlTmFtZSArIChhcmdzID8gXCIoXCIgKyBhcmdzICsgXCIpXCIgOiBcIlwiKTtcblx0XHQvLyBxc2hhcnAgKz0gXCIgICAgcmV0dXJuIFtcXG5cIjtcblx0XHQvLyBpbmRlbnQgPSBcIiAgICAgICAgXCI7XG5cdH0gZWxzZXtcblx0XHR2YXIgdXNlZEdhdGVzID0gY2lyY3VpdC51c2VkR2F0ZXMoKTtcblx0XHRpZighZGVjb21wb3NlKSB7XG5cdFx0XHR1c2VkR2F0ZXMubWFwKGZ1bmN0aW9uKHVzZWRHYXRlTmFtZSkge1xuXHRcdFx0XHR2YXIgYmFzaWNHYXRlID0gY2lyY3VpdC5iYXNpY0dhdGVzW3VzZWRHYXRlTmFtZV07XG5cdFx0XHRcdGlmKCFiYXNpY0dhdGUpIHtcblx0XHRcdFx0XHR2YXIgY3VzdG9tR2F0ZSA9IHNlbGYuY3VzdG9tR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRcdFx0XHRpZihjdXN0b21HYXRlKSB7XG5cdFx0XHRcdFx0XHR2YXIgY3VzdG9tQ2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRcdFx0XHRcdFx0Y3VzdG9tQ2lyY3VpdC5sb2FkKGN1c3RvbUdhdGUpO1xuXHRcdFx0XHRcdFx0dmFyIG5ld09wdGlvbnMgPSB7XG5cdFx0XHRcdFx0XHRcdGNvbW1lbnQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdGRlY29tcG9zZTogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0dmVyc2lvblN0cjogdmVyc2lvblN0cixcblx0XHRcdFx0XHRcdFx0YXNKdXB5dGVyOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0Y2lyY3VpdE5hbWU6IG51bGwsXG5cdFx0XHRcdFx0XHRcdGluZGVudERlcHRoOiBpbmRlbnREZXB0aFxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdHFzaGFycCArPSBjdXN0b21DaXJjdWl0LmV4cG9ydFRvUVNoYXJwKG5ld09wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cXNoYXJwICs9IGluZGVudCtcIm9wZXJhdGlvbiBcIiArIG9wZXJhdGlvbk5hbWUgKyBcIigpXCI7XG5cdH1cblxuXHRpbmRlbnREZXB0aCsrO1xuXHRpbmRlbnQgPSBnZXRJbmRlbnQoaW5kZW50RGVwdGgpO1xuXG5cdHZhciBjcmVnQ291bnQgPSAwO1xuXHRmb3IoY3JlZ05hbWUgaW4gY2lyY3VpdC5jcmVncykge1xuXHRcdGNyZWdDb3VudCsrO1xuXHR9XG5cblx0dmFyIGNyZWdMaXN0ID0gXCJcIjtcblx0aWYoY3JlZ0NvdW50KSB7XG5cdFx0cXNoYXJwICs9IFwiIDogKFwiXG5cdFx0Zm9yKGNyZWdOYW1lIGluIGNpcmN1aXQuY3JlZ3MpIHtcblx0XHRcdGlmKGNyZWdMaXN0KSB7XG5cdFx0XHRcdHFzaGFycCArPSBcIiwgXCI7XG5cdFx0XHRcdGNyZWdMaXN0ICs9IFwiLCBcIjtcblx0XHRcdH1cblx0XHRcdHFzaGFycCArPSBcIkludFwiO1xuXHRcdFx0Y3JlZ0xpc3QgKz0gY3JlZ05hbWU7XG5cdFx0fVxuXHRcdHFzaGFycCArPSBcIilcIjtcblx0fSBlbHNlIHtcblx0XHRxc2hhcnAgKz0gXCIgOiBVbml0XCI7XG5cdH1cblx0cXNoYXJwICs9IFwiIHtcXG5cIjtcblx0Ly8gLS0tXG5cblx0Ly8gZGVjbGFyZSBjcmVnc1xuXHRpZihjcmVnQ291bnQpIHtcblx0XHRmb3IoY3JlZ05hbWUgaW4gY2lyY3VpdC5jcmVncykge1xuXHRcdFx0cXNoYXJwICs9IGluZGVudCArIFwibXV0YWJsZSBcIiArIGNyZWdOYW1lICsgXCIgPSAwO1xcblwiO1xuXHRcdH1cblx0fVxuXG5cdHFyZWdfbmFtZSA9IFwicXViaXRzXCI7XG5cblx0aWYoIWV4cG9ydEFzR2F0ZU5hbWUpe1xuXHRcdHFzaGFycCArPSBpbmRlbnQrXCJ1c2luZyhcIjtcblx0XHRxc2hhcnAgKz0gcXJlZ19uYW1lICsgXCIgPSBRdWJpdFtcIiArIGNpcmN1aXQubnVtUXViaXRzICsgXCJdXCI7XG5cdFx0cXNoYXJwICs9IFwiKSB7XFxuXCI7XG5cdFx0aW5kZW50RGVwdGgrKztcblx0XHRpbmRlbnQgPSBnZXRJbmRlbnQoaW5kZW50RGVwdGgpO1xuXHR9XG5cblx0dmFyIGRlZkdhdGVzID0gXCJcIjtcblx0dmFyIHVzZWRHYXRlcyA9IGNpcmN1aXQudXNlZEdhdGVzKCk7XG5cblx0dmFyIG51bUNvbHMgPSBjaXJjdWl0Lm51bUNvbHMoKTtcblx0dmFyIGdhdGVDb3VudGVyID0gMDtcblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBjaXJjdWl0Lm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGNpcmN1aXQuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0dmFyIGdhdGVEZWYgPSBjaXJjdWl0LmdldEdhdGVEZWYoZ2F0ZS5uYW1lKTtcblxuXHRcdFx0XHRpZighZ2F0ZURlZikge1xuXHRcdFx0XHRcdGdhdGVEZWYgPSBjaXJjdWl0LmN1c3RvbUdhdGVzW2dhdGUubmFtZV07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR2YXIgZ2F0ZVBhcmFtcyA9IGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMucGFyYW1zID8gZ2F0ZS5vcHRpb25zLnBhcmFtcyA6IHt9O1xuXHRcdFx0XHR2YXIgcXNoYXJwSW5mbyA9IG51bGw7XG5cdFx0XHRcdHZhciBpc0NvbnRyb2xsZWRHYXRlID0gZmFsc2U7XG5cdFx0XHRcdHZhciB3aXJlSWR4ID0gMDtcblx0XHRcdFx0aWYoZ2F0ZURlZikge1xuXHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mbykge1xuXHRcdFx0XHRcdFx0aWYoZ2F0ZURlZi5leHBvcnRJbmZvLnFzaGFycCAmJiBnYXRlRGVmLmV4cG9ydEluZm8ucXNoYXJwLnJlcGxhY2VtZW50KSB7XG5cdFx0XHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mby5xc2hhcnAucmVwbGFjZW1lbnQucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdFx0Z2F0ZVBhcmFtcyA9IGdhdGVEZWYuZXhwb3J0SW5mby5xc2hhcnAucmVwbGFjZW1lbnQucGFyYW1zO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGdhdGVEZWYgPSBjaXJjdWl0LmdldEdhdGVEZWYoZ2F0ZURlZi5leHBvcnRJbmZvLnFzaGFycC5yZXBsYWNlbWVudC5uYW1lKTtcblx0XHRcdFx0XHRcdH1cdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdHFzaGFycEluZm8gPSAoZ2F0ZURlZiAmJiBnYXRlRGVmLmV4cG9ydEluZm8gJiYgZ2F0ZURlZi5leHBvcnRJbmZvLnFzaGFycCkgPyBnYXRlRGVmLmV4cG9ydEluZm8ucXNoYXJwIDogbnVsbDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZihnYXRlRGVmLmRyYXdpbmdJbmZvICYmIGdhdGVEZWYuZHJhd2luZ0luZm8ucm9vdCAmJiBnYXRlLm5hbWUgIT0gXCJjeFwiICYmIGdhdGUubmFtZSAhPSBcImNjeFwiKSB7XG5cdFx0XHRcdFx0XHRpc0NvbnRyb2xsZWRHYXRlID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cblxuXHRcdFx0XHRcdHZhciB0bXBQYXJhbUNvdW50ID0gMDtcblx0XHRcdFx0XHR2YXIgcGFyYW1TdHJpbmcgPSBcIlwiO1xuXHRcdFx0XHRcdGlmKGdhdGVQYXJhbXMpIHtcblx0XHRcdFx0XHRcdHZhciBwYXJhbURlZiA9IGdhdGVEZWYucGFyYW1zIHx8IFtdO1xuXHRcdFx0XHRcdFx0dmFyIHBhcmFtQ291bnQgPSBwYXJhbURlZi5sZW5ndGg7XG5cdFx0XHRcdFx0XHRpZihwYXJhbUNvdW50KSB7XHRcdFxuXHRcdFx0XHRcdFx0XHRmb3IodmFyIHAgPSAwOyBwIDwgcGFyYW1Db3VudDsgcCsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gaWYodG1wUGFyYW1Db3VudCA9PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gXHRwYXJhbVN0cmluZyArPSBcIihcIjtcblx0XHRcdFx0XHRcdFx0XHQvLyB9XG5cdFx0XHRcdFx0XHRcdFx0aWYodG1wUGFyYW1Db3VudCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtU3RyaW5nICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtTmFtZSA9IHBhcmFtRGVmW3BdO1x0XG5cblx0XHRcdFx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHRcdFx0XHQvLyBwcmVwZW5kICducCcgdG8gbWF0aCBjb25zdGFudHNcblx0XHRcdFx0XHRcdFx0XHRpZihnYXRlUGFyYW1zW3BhcmFtTmFtZV0pIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnYXRlUGFyYW1zW3BhcmFtTmFtZV0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1TdHJpbmcgKz0gbm9kZS50b1N0cmluZyh7IGhhbmRsZXI6IG1hdGhUb1N0cmluZ0hhbmRsZXIgfSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdC8vIC0tLVxuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gaWYodG1wUGFyYW1Db3VudCA9PSBwYXJhbUNvdW50IC0gMSkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIFx0cGFyYW1TdHJpbmcgKz0gXCIpXCI7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gfVxuXHRcdFx0XHRcdFx0XHRcdHRtcFBhcmFtQ291bnQrKztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHRpZihnYXRlLm5hbWUgPT0gXCJtZWFzdXJlXCIpIHtcblx0XHRcdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY3JlZykge1xuXHRcdFx0XHRcdFx0XHRxc2hhcnAgKz0gaW5kZW50ICsgXCJzZXQgXCIgKyBnYXRlLm9wdGlvbnMuY3JlZy5uYW1lICsgXCIgPSBTZXRCaXRWYWx1ZShcIiArIGdhdGUub3B0aW9ucy5jcmVnLm5hbWUgKyBcIiwgXCIgKyBnYXRlLm9wdGlvbnMuY3JlZy5iaXQgKyBcIiwgUmVzdWx0QXNCb29sKE0oXCI7XG5cdFx0XHRcdFx0XHRcdGlmKGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRcdFx0XHRcdFx0XHRxc2hhcnAgKz0gcXViaXRMZXR0ZXIoZ2F0ZS53aXJlc1swXSwgY2lyY3VpdC5udW1RdWJpdHMpICsgXCIpKSk7XFxuXCI7XG5cdFx0XHRcdFx0XHRcdH1lbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRxc2hhcnAgKz0gcXJlZ19uYW1lICsgXCJbXCIgKyBnYXRlLndpcmVzWzBdICsgXCJdKSkpO1xcblwiO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRxc2hhcnAgKz0gaW5kZW50ICsgXCIvLyBFeHBvcnQgdG8gcXNoYXJwIFdBUk5JTkc6IG1pc3NpbmcgZGVzdGluYXRpb24gcmVnaXN0ZXJcXG5cIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cXNoYXJwICs9IGluZGVudDtcblxuXHRcdFx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24gJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnKSB7XG5cdFx0XHRcdFx0XHRcdHFzaGFycCArPSBcImlmKFwiICsgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnICsgXCIgPT0gXCIgKyBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLnZhbHVlICsgXCIpIHtcXG5cIjtcblx0XHRcdFx0XHRcdFx0aW5kZW50RGVwdGgrKztcblx0XHRcdFx0XHRcdFx0aW5kZW50ID0gZ2V0SW5kZW50KGluZGVudERlcHRoKTtcblx0XHRcdFx0XHRcdFx0cXNoYXJwICs9IGluZGVudDtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYocXNoYXJwSW5mbykge1xuXHRcdFx0XHRcdFx0XHRxc2hhcnAgKz0gcXNoYXJwSW5mby5uYW1lICsgXCIoXCI7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRxc2hhcnAgKz0gZ2F0ZS5uYW1lICsgXCIoXCI7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKGlzQ29udHJvbGxlZEdhdGUpIHtcblx0XHRcdFx0XHRcdFx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdFx0XHRcdFx0XHRcdHFzaGFycCArPSBcIltcIiArIHF1Yml0TGV0dGVyKGdhdGUud2lyZXNbMF0sIGNpcmN1aXQubnVtUXViaXRzKSArIFwiXSwgKFwiO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHFzaGFycCArPSBcIltcIiArIHFyZWdfbmFtZSArIFwiW1wiICsgZ2F0ZS53aXJlc1swXSArIFwiXV0sIChcIjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR3aXJlSWR4ID0gMTtcblx0XHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0XHR3aXJlSWR4ID0gMDtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYocGFyYW1TdHJpbmcpe1xuXHRcdFx0XHRcdFx0XHRxc2hhcnAgKz0gcGFyYW1TdHJpbmcgKyBcIiwgXCI7XG5cdFx0XHRcdFx0XHR9IFxuXHRcdFx0XHRcdFx0Ly8gZWxzZSB7XG5cdFx0XHRcdFx0XHQvLyBcdHFzaGFycCArPSBwYXJhbVN0cmluZyArIFwiKFwiO1xuXHRcdFx0XHRcdFx0Ly8gfVxuXHRcdFx0XHRcdFx0dmFyIGFyZ0NvdW50ID0gMDtcblx0XHRcdFx0XHRcdGZvcih2YXIgdyA9IHdpcmVJZHg7IHcgPCBnYXRlLndpcmVzLmxlbmd0aDsgdysrKSB7XG5cdFx0XHRcdFx0XHRcdGlmKGFyZ0NvdW50ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdHFzaGFycCArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdFx0XHRcdFx0XHRcdHFzaGFycCArPSBxdWJpdExldHRlcihnYXRlLndpcmVzW3ddLCBjaXJjdWl0Lm51bVF1Yml0cyk7XG5cdFx0XHRcdFx0XHRcdH1lbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRxc2hhcnAgKz0gcXJlZ19uYW1lICsgXCJbXCIgKyBnYXRlLndpcmVzW3ddICsgXCJdXCI7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRhcmdDb3VudCsrO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZihpc0NvbnRyb2xsZWRHYXRlKXtcblx0XHRcdFx0XHRcdFx0cXNoYXJwICs9IFwiKVwiO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRxc2hhcnAgKz0gXCIpO1xcblwiO1xuXG5cdFx0XHRcdFx0XHRpZihnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcpIHtcblx0XHRcdFx0XHRcdFx0Ly8gZW5kIGlmXG5cdFx0XHRcdFx0XHRcdGluZGVudERlcHRoLS07XG5cdFx0XHRcdFx0XHRcdGluZGVudCA9IGdldEluZGVudChpbmRlbnREZXB0aCk7XG5cdFx0XHRcdFx0XHRcdHFzaGFycCArPSBpbmRlbnQgKyBcIn1cXG5cIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0aWYoIWV4cG9ydEFzR2F0ZU5hbWUpe1xuXHRcdHFzaGFycCArPSBpbmRlbnQgKyBcIlJlc2V0QWxsKFwiICsgcXJlZ19uYW1lICsgXCIpO1xcblwiO1xuXG5cdFx0aW5kZW50RGVwdGgtLTtcblx0XHRpbmRlbnQgPSBnZXRJbmRlbnQoaW5kZW50RGVwdGgpO1xuXG5cdFx0cXNoYXJwICs9IGluZGVudCArIFwifVxcblwiO1xuXHR9XG5cblx0aWYoY3JlZ0NvdW50KSB7XG5cdFx0cXNoYXJwICs9IGluZGVudCArIFwicmV0dXJuIChcIiArIGNyZWdMaXN0ICsgXCIpO1xcblwiO1xuXHR9XG5cblx0aW5kZW50RGVwdGgtLTtcblx0aW5kZW50ID0gZ2V0SW5kZW50KGluZGVudERlcHRoKTtcblx0cXNoYXJwICs9IGluZGVudCArIFwifVxcblwiO1xuXG5cdGlmKCFleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0aWYoIWFzSnVweXRlcikge1xuXHRcdFx0Ly8gY2xvc2luZyBuYW1lc3BhY2Vcblx0XHRcdHFzaGFycCArPSBcIn1cXG5cIjtcblxuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRxc2hhcnAgKz0gXCJcXG5cIjtcblx0fVxuXG5cdGlmKGFzSnVweXRlcikge1xuXHRcdHZhciBub3RlYm9vayA9IHtcblx0XHRcdFwibWV0YWRhdGFcIjoge1xuXHRcdFx0XHRcImtlcm5lbHNwZWNcIjoge1xuXHRcdFx0XHRcdFwiZGlzcGxheV9uYW1lXCI6IFwiUSNcIixcblx0XHRcdFx0XHRcImxhbmd1YWdlXCI6IFwicXNoYXJwXCIsXG5cdFx0XHRcdFx0XCJuYW1lXCI6IFwiaXFzaGFycFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdFwibGFuZ3VhZ2VfaW5mb1wiOiB7XG5cdFx0XHRcdFx0XCJuYW1lXCI6IFwiXCJcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdG5iZm9ybWF0OiA0LFxuXHRcdFx0bmJmb3JtYXRfbWlub3I6IDAsXG5cdFx0XHRjZWxsczogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y2VsbF90eXBlOiBcImNvZGVcIixcblx0XHRcdFx0XHRzb3VyY2U6IHFzaGFycCxcblx0XHRcdFx0XHRtZXRhZGF0YToge1xuXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRvdXRwdXRzOiBbXSxcblx0XHRcdFx0XHRleGVjdXRpb25fY291bnQ6IG51bGxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGNlbGxfdHlwZTogXCJjb2RlXCIsXG5cdFx0XHRcdFx0c291cmNlOiBcIiVzaW11bGF0ZSBcIiArIG9wZXJhdGlvbk5hbWUsXG5cdFx0XHRcdFx0bWV0YWRhdGE6IHtcblxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0b3V0cHV0czogW10sXG5cdFx0XHRcdFx0ZXhlY3V0aW9uX2NvdW50OiBudWxsXG5cdFx0XHRcdH1cblx0XHRcdF1cblx0XHR9O1xuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShub3RlYm9vayk7XG5cdH1cblxuXHRyZXR1cm4gcXNoYXJwO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFRvQnJha2V0ID0gZnVuY3Rpb24ob3B0aW9ucywgZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR2YXIgY29tbWVudCA9IG9wdGlvbnMuY29tbWVudDtcblx0dmFyIGRlY29tcG9zZSA9IG9wdGlvbnMuZGVjb21wb3NlO1xuXHR2YXIgdmVyc2lvblN0ciA9IG9wdGlvbnMudmVyc2lvblN0cjtcblx0dmFyIGFzSnVweXRlciA9IG9wdGlvbnMuYXNKdXB5dGVyO1xuXHR2YXIgc2hvdHMgPSBvcHRpb25zLnNob3RzO1xuXHR2YXIgaHlicmlkID0gb3B0aW9ucy5oeWJyaWQ7XG5cdHZhciBpbmRlbnREZXB0aCA9IG9wdGlvbnMuaW5kZW50RGVwdGg7XG5cblx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cblx0c2hvdHMgPSBzaG90cyB8fCAxMDI0O1xuXG5cdHZhciB2ZXJzaW9uID0gcGFyc2VGbG9hdCh2ZXJzaW9uU3RyIHx8IFwiMS4wXCIpO1xuXHRpZihpc05hTih2ZXJzaW9uKSkge1xuXHRcdHZlcnNpb24gPSAxLjA7XG5cdH1cblxuXHRpZih0eXBlb2YgaHlicmlkID09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRoeWJyaWQgPSB0aGlzLm9wdGlvbnMgPyAhIXRoaXMub3B0aW9ucy5oeWJyaWQgOiBmYWxzZTtcblx0fVxuXG5cdC8vIGRlY29tcG9zZSA/XG5cdHZhciBjaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdGNpcmN1aXQubG9hZCh0aGlzLnNhdmUoZGVjb21wb3NlKSk7XG5cblx0dmFyIG1hdGhUb1N0cmluZ0hhbmRsZXIgPSBmdW5jdGlvbihub2RlLCBvcHRpb25zKSB7XG5cdFx0aWYobm9kZS5pc1N5bWJvbE5vZGUpIHtcblx0XHRcdHZhciBudW1weXMgPSBbXCJwaVwiLCBcInNpblwiLCBcImNvc1wiLCBcInRhblwiLCBcImFzaW5cIiwgXCJhY29zXCIsIFwiYXRhblwiXTtcblx0XHRcdGlmKG51bXB5cy5pbmRleE9mKG5vZGUubmFtZSkgPj0gMCkge1xuXHRcdFx0XHRyZXR1cm4gXCJucC5cIiArIG5vZGUubmFtZTtcblx0XHRcdH1cblxuXHRcdFx0aWYoc2VsZi5wYXJhbXMuaW5kZXhPZihub2RlLm5hbWUpID49IDAgJiYgaHlicmlkKSB7XG5cdFx0XHRcdHJldHVybiBcInBhcmFtc1tcIiArIHNlbGYucGFyYW1zLmluZGV4T2Yobm9kZS5uYW1lKSArIFwiXVwiO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHR2YXIgYWRqdXN0SWRlbnRhdGlvbiA9IGZ1bmN0aW9uKGFkZFN0ciwgaWRlbnQpIHtcblx0XHR2YXIgc3RyID0gXCJcIjtcblxuXHRcdC8vIGFkZCB1c2VyIGRlZmluZWQgY29zdCBmdW5jdGlvbiB3aXRoIHByb3BlciBpZGVudGF0aW9uXG5cdFx0dmFyIGNmTGluZXMgPSBhZGRTdHIuc3BsaXQoXCJcXG5cIik7XG5cdFx0dmFyIG1pbklkZW50ID0gLTE7XG5cdFx0Y2ZMaW5lcy5tYXAoZnVuY3Rpb24oY2ZMaW5lKSB7XG5cdFx0XHR2YXIgdG1wSWRlbnQgPSBjZkxpbmUuc2VhcmNoKC9cXFMvKTtcblx0XHRcdGlmKHRtcElkZW50ID49IDAgJiYgKG1pbklkZW50IDwgMCB8fCB0bXBJZGVudCA8IG1pbklkZW50KSkge1xuXHRcdFx0XHRtaW5JZGVudCA9IHRtcElkZW50O1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0aWYobWluSWRlbnQgPCAwKSB7XG5cdFx0XHRtaW5JZGVudCA9IDA7XG5cdFx0fVxuXG5cdFx0dmFyIGFkZElkZW50ID0gXCJcIjtcblx0XHRpZihtaW5JZGVudCA8IGlkZW50Lmxlbmd0aCkge1xuXHRcdFx0Zm9yKHZhciB0bXAgPSAwOyB0bXAgPCAoaWRlbnQubGVuZ3RoIC0gbWluSWRlbnQpOyB0bXArKykge1xuXHRcdFx0XHRhZGRJZGVudCArPSBcIiBcIjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjZkxpbmVzLm1hcChmdW5jdGlvbihjZkxpbmUpIHtcblx0XHRcdHN0ciArPSBhZGRJZGVudCArIGNmTGluZSArIFwiXFxuXCI7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gc3RyO1xuXHR9O1xuXG5cdHZhciBnZXRJbmRlbnQgPSBmdW5jdGlvbihkZXB0aCkge1xuXHRcdHZhciBpbmRlbnQgPSBcIlwiO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBkZXB0aDsgaSsrKSB7XG5cdFx0XHRpbmRlbnQgKz0gXCIgICAgXCI7XG5cdFx0fVxuXHRcdHJldHVybiBpbmRlbnQ7XG5cdH1cblxuXHRpbmRlbnREZXB0aCA9IGluZGVudERlcHRoIHx8IDA7XG5cblx0dmFyIGJyYWtldCA9IFwiXCI7XG5cdHZhciBpbmRlbnQgPSBnZXRJbmRlbnQoaW5kZW50RGVwdGgpO1xuXG5cdHZhciB1c2VkR2F0ZXMgPSBjaXJjdWl0LnVzZWRHYXRlcygpO1xuXHR2YXIgaXNTdWJNb2R1bGUgPSBmYWxzZTtcblx0dXNlZEdhdGVzLm1hcChmdW5jdGlvbih1c2VkR2F0ZU5hbWUpe1xuXHRcdGlmKCFjaXJjdWl0LmJhc2ljR2F0ZXNbdXNlZEdhdGVOYW1lXSl7XG5cdFx0XHRpc1N1Yk1vZHVsZSA9IHRydWU7XG5cdFx0fVxuXHR9KTtcblxuXHR2YXIgYXJncyA9IFwiXCI7XG5cdHZhciBhcmdDb3VudCA9IDA7XG5cdGlmKGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgY2lyY3VpdC5udW1RdWJpdHM7IGkrKykge1xuXHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdGFyZ3MgKz0gXCIsIFwiO1xuXHRcdFx0fVxuXHRcdFx0YXJncyArPSBxdWJpdExldHRlcihpLCBjaXJjdWl0Lm51bVF1Yml0cyk7XG5cdFx0XHRhcmdDb3VudCsrO1xuXHRcdH1cblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgY2lyY3VpdC5wYXJhbXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmKGFyZ0NvdW50ID4gMCkge1xuXHRcdFx0XHRhcmdzICs9IFwiLCBcIjtcblx0XHRcdH1cblx0XHRcdGFyZ3MgKz0gY2lyY3VpdC5wYXJhbXNbaV07XG5cdFx0XHRhcmdDb3VudCsrO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRicmFrZXQgKz0gaW5kZW50ICsgXCJpbXBvcnQgbnVtcHkgYXMgbnBcXG5cIjtcblx0XHRicmFrZXQgKz0gaW5kZW50ICsgXCJmcm9tIGJyYWtldC5kZXZpY2VzIGltcG9ydCBMb2NhbFNpbXVsYXRvclxcblwiO1xuXHRcdGJyYWtldCArPSBpbmRlbnQgKyBcImZyb20gYnJha2V0LmNpcmN1aXRzIGltcG9ydCBDaXJjdWl0XFxuXCI7XG5cdFx0YnJha2V0ICs9IGluZGVudCArIFwiZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgQ291bnRlclxcblwiO1xuXG5cdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRicmFrZXQgKz0gaW5kZW50ICsgXCJmcm9tIHNjaXB5Lm9wdGltaXplIGltcG9ydCBtaW5pbWl6ZVxcblwiO1xuXHRcdH1cblxuXHRcdGJyYWtldCArPSBcIlxcblwiO1xuXG5cdFx0aWYoc2hvdHMpIHtcblx0XHRcdGJyYWtldCArPSBpbmRlbnQgKyBcInNob3RzID0gXCIgKyBzaG90cyArIFwiXFxuXCI7XG5cdFx0XHRicmFrZXQgKz0gXCJcXG5cIjtcblx0XHR9XG5cblx0XHR2YXIgZ2xvYmFsUGFyYW1zID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5wYXJhbXMgPyB0aGlzLm9wdGlvbnMucGFyYW1zIDoge307XG5cdFx0aWYodGhpcy5wYXJhbXMubGVuZ3RoKSB7XG5cdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXJhbXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0dmFyIGdsb2JhbFBhcmFtTmFtZSA9IHRoaXMucGFyYW1zW2ldO1xuXG5cdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnbG9iYWxQYXJhbXNbZ2xvYmFsUGFyYW1OYW1lXSk7XG5cdFx0XHRcdHZhciBnbG9iYWxQYXJhbVZhbHVlID0gbm9kZS50b1N0cmluZyh7IGhhbmRsZXI6IG1hdGhUb1N0cmluZ0hhbmRsZXIgfSk7XG5cblx0XHRcdFx0YnJha2V0ICs9IGdsb2JhbFBhcmFtTmFtZSArIFwiID0gXCIgKyBnbG9iYWxQYXJhbVZhbHVlICsgXCJcXG5cIjtcblx0XHRcdH1cblx0XHRcdGJyYWtldCArPSBcIlxcblwiO1xuXHRcdH1cblxuXHRcdGlmKGh5YnJpZCkge1xuXHRcdFx0YnJha2V0ICs9IGluZGVudCArIFwidG9sZXJhbmNlID0gXCIgKyAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLnRvbGVyYW5jZSA/IHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLnRvbGVyYW5jZSB8fCBcIjAuMDAxXCIgOiBcIjAuMDAxXCIpICsgXCJcXG5cIjtcblx0XHRcdGJyYWtldCArPSBcIlxcblwiO1xuXHRcdH1cblx0fVxuXG5cdHZhciB1bnN1cHBvcnRlZEJyYWtldEluZm8gPSBudWxsO1xuXHR2YXIgZ2F0ZVVuaXRhcnkgPSBudWxsO1xuXHR2YXIgc3VibW9kdWxlQ291bnQgPSAwO1xuXHR1c2VkR2F0ZXMubWFwKGZ1bmN0aW9uKHVzZWRHYXRlTmFtZSkge1xuXHRcdHZhciBiYXNpY0dhdGUgPSBjaXJjdWl0LmJhc2ljR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRpZihiYXNpY0dhdGUpIHtcblx0XHRcdGlmKCFkZWNvbXBvc2Upe1xuXHRcdFx0XHRpZihjaXJjdWl0LmJhc2ljR2F0ZXNbdXNlZEdhdGVOYW1lXS5leHBvcnRJbmZvLmJyYWtldCAmJiBjaXJjdWl0LmJhc2ljR2F0ZXNbdXNlZEdhdGVOYW1lXS5leHBvcnRJbmZvLmJyYWtldC5hcnJheSkge1xuXHRcdFx0XHRcdHVuc3VwcG9ydGVkQnJha2V0SW5mbyA9IGNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdLmV4cG9ydEluZm8uYnJha2V0O1xuXHRcblx0XHRcdFx0XHRpZih1bnN1cHBvcnRlZEJyYWtldEluZm8ubmFtZSA9PSBcInVuaXRhcnlcIil7XG5cdFx0XHRcdFx0XHRnYXRlVW5pdGFyeSA9IHVzZWRHYXRlTmFtZSArIFwiX3VuaXRhcnlcIjtcblx0XHRcdFx0XHRcdGJyYWtldCArPSBpbmRlbnQgKyBcImRlZiBcIiArIGdhdGVVbml0YXJ5ICtcIihcIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0aWYodW5zdXBwb3J0ZWRCcmFrZXRJbmZvLnBhcmFtcyAmJiB1bnN1cHBvcnRlZEJyYWtldEluZm8ucGFyYW1zLmxlbmd0aCl7XG5cdFx0XHRcdFx0XHR2YXIgYXJnQ291bnQgPSAwO1xuXHRcdFx0XHRcdFx0dW5zdXBwb3J0ZWRCcmFrZXRJbmZvLnBhcmFtcy5tYXAoZnVuY3Rpb24ocGFyYW1OYW1lKXtcblx0XHRcdFx0XHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0YnJha2V0ICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRicmFrZXQgKz0gaW5kZW50ICsgXCJwX1wiICsgcGFyYW1OYW1lO1xuXHRcdFx0XHRcdFx0XHRhcmdDb3VudCsrO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XG5cdFx0XHRcdFx0YnJha2V0ICs9IFwiKTpcXG5cIjtcblx0XHRcdFx0XHRicmFrZXQgKz0gZ2V0SW5kZW50KGluZGVudERlcHRoICsgMSkgKyBcInJldHVybiBucC5hcnJheShcIiArICB1bnN1cHBvcnRlZEJyYWtldEluZm8uYXJyYXkgKyBcIik7XFxuXFxuXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFyIGN1c3RvbUdhdGUgPSBzZWxmLmN1c3RvbUdhdGVzW3VzZWRHYXRlTmFtZV07XG5cdFx0XHRpZihjdXN0b21HYXRlKSB7XG5cdFx0XHRcdHZhciBjdXN0b21DaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdFx0XHRcdGN1c3RvbUNpcmN1aXQubG9hZChjdXN0b21HYXRlKTtcblx0XHRcdFx0YnJha2V0ICs9IGN1c3RvbUNpcmN1aXQuZXhwb3J0QnJha2V0KFwiXCIsIHRydWUsIHVzZWRHYXRlTmFtZSwgdmVyc2lvblN0ciwgZmFsc2UsIG51bGwsIGZhbHNlLCBpbmRlbnREZXB0aCk7XG5cdFx0XHRcdHN1Ym1vZHVsZUNvdW50Kys7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcdFxuXHRcdFx0XHRcdFxuXHRpZihleHBvcnRBc0dhdGVOYW1lKXtcblx0XHRicmFrZXQgKz0gXCJkZWYgXCIgKyBleHBvcnRBc0dhdGVOYW1lICsgKGFyZ3MgPyBcIihcIiArIGFyZ3MgKyBcIilcIiA6IFwiXCIpICsgXCI6XFxuXCI7XG5cdFx0aW5kZW50RGVwdGgrKztcblx0XHRpbmRlbnQgPSBnZXRJbmRlbnQoaW5kZW50RGVwdGgpO1xuXHR9IGVsc2Uge1xuXHRcdGlmKGh5YnJpZCkge1xuXHRcdFx0YnJha2V0ICs9IFwiZGVmIG9iamVjdGl2ZV9mdW5jdGlvbihwYXJhbXMpOlxcblwiXG5cdFx0XHRpbmRlbnREZXB0aCsrO1xuXHRcdFx0aW5kZW50ID0gZ2V0SW5kZW50KGluZGVudERlcHRoKTtcblx0XHR9XG5cdH1cblxuXHRicmFrZXQgKz0gaW5kZW50ICsgXCJjaXJjdWl0ID0gQ2lyY3VpdCgpXFxuXCI7XG5cblx0aWYoIWV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRpZihzdWJtb2R1bGVDb3VudCkge1xuXHRcdFx0YnJha2V0ICs9IFwiXFxuXCI7XG5cdFx0XHR1c2VkR2F0ZXMubWFwKGZ1bmN0aW9uKHVzZWRHYXRlTmFtZSkge1xuXHRcdFx0XHRpZighY2lyY3VpdC5iYXNpY0dhdGVzW3VzZWRHYXRlTmFtZV0gJiYgY2lyY3VpdC5jdXN0b21HYXRlc1t1c2VkR2F0ZU5hbWVdKSB7XG5cdFx0XHRcdFx0YnJha2V0ICs9IGluZGVudCArIFwiY2lyY3VpdC5yZWdpc3Rlcl9zdWJyb3V0aW5lKFwiICsgdXNlZEdhdGVOYW1lICsgXCIpXFxuXCI7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0YnJha2V0ICs9IFwiXFxuXCI7XG5cdFx0fVxuXHR9XG5cblx0dmFyIG51bUNvbHMgPSBjaXJjdWl0Lm51bUNvbHMoKTtcblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBjaXJjdWl0Lm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGNpcmN1aXQuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0dmFyIGdhdGVEZWYgPSBjaXJjdWl0LmdldEdhdGVEZWYoZ2F0ZS5uYW1lKTtcblx0XHRcdFx0dmFyIGdhdGVQYXJhbXMgPSBnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLnBhcmFtcyA/IGdhdGUub3B0aW9ucy5wYXJhbXMgOiB7fTtcblx0XHRcdFx0dmFyIHBhcmFtRGVmID0gZ2F0ZURlZi5wYXJhbXMgfHwgW107XG5cdFx0XHRcdHZhciBicmFrZXRJbmZvID0gbnVsbDtcblxuXHRcdFx0XHR2YXIgZ2F0ZU5hbWUgPSBnYXRlLm5hbWU7XG5cdFx0XHRcdHZhciBwYXJhbVN0cmluZyA9IFwiXCI7XG5cdFx0XHRcdHZhciBpc1VuaXRhcnkgPSBmYWxzZTtcblxuXHRcdFx0XHRpZihnYXRlRGVmKSB7XG5cdFx0XHRcdFx0aWYoZ2F0ZURlZi5leHBvcnRJbmZvICYmIGdhdGVEZWYuZXhwb3J0SW5mby5icmFrZXQpIHtcblx0XHRcdFx0XHRcdGJyYWtldEluZm8gPSBnYXRlRGVmLmV4cG9ydEluZm8uYnJha2V0O1xuXG5cdFx0XHRcdFx0XHRpZihicmFrZXRJbmZvLnBhcmFtcykge1xuXHRcdFx0XHRcdFx0XHRpZihBcnJheS5pc0FycmF5KGJyYWtldEluZm8ucGFyYW1zKSkge1xuXHRcdFx0XHRcdFx0XHRcdHBhcmFtRGVmID0gYnJha2V0SW5mby5wYXJhbXM7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Z2F0ZVBhcmFtcyA9IGJyYWtldEluZm8ucGFyYW1zO1xuXHRcdFx0XHRcdFx0XHRcdHBhcmFtRGVmID0gT2JqZWN0LmtleXMoZ2F0ZVBhcmFtcyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYoYnJha2V0SW5mby5uYW1lID09IFwidW5pdGFyeVwiKSB7XG5cdFx0XHRcdFx0XHRcdGlzVW5pdGFyeSA9IHRydWU7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRnYXRlTmFtZSA9IGJyYWtldEluZm8ubmFtZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZighYnJha2V0SW5mbyAmJiAhY2lyY3VpdC5jdXN0b21HYXRlc1tnYXRlLm5hbWVdKSB7XG5cdFx0XHRcdFx0YnJha2V0ICs9IGluZGVudCArIFwiIyBVbnN1cHBvcnRlZCBnYXRlIFxcXCJcIiArIGdhdGUubmFtZSArIFwiXFxcIi5cXG5cIjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YXIgdG1wUGFyYW1Db3VudCA9IDA7XG5cdFx0XHRcdFx0aWYoZ2F0ZVBhcmFtcykge1xuXHRcdFx0XHRcdFx0dmFyIHBhcmFtQ291bnQgPSBwYXJhbURlZi5sZW5ndGg7XG5cdFx0XHRcdFx0XHRpZihwYXJhbUNvdW50KSB7XHRcdFxuXHRcdFx0XHRcdFx0XHRmb3IodmFyIHAgPSAwOyBwIDwgcGFyYW1Db3VudDsgcCsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYodG1wUGFyYW1Db3VudCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtU3RyaW5nICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtTmFtZSA9IHBhcmFtRGVmW3BdO1x0XG5cblx0XHRcdFx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHRcdFx0XHQvLyBwcmVwZW5kICducCcgdG8gbWF0aCBjb25zdGFudHNcblx0XHRcdFx0XHRcdFx0XHRpZih0eXBlb2YgZ2F0ZVBhcmFtc1twYXJhbU5hbWVdICE9IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnYXRlUGFyYW1zW3BhcmFtTmFtZV0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1TdHJpbmcgKz0gbm9kZS50b1N0cmluZyh7IGhhbmRsZXI6IG1hdGhUb1N0cmluZ0hhbmRsZXIgfSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHRtcFBhcmFtQ291bnQrKztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGJyYWtldCArPSBpbmRlbnQgKyBcImNpcmN1aXQuXCI7XG5cblx0XHRcdFx0XHRpZihpc1VuaXRhcnkpIHtcblx0XHRcdFx0XHRcdGJyYWtldCArPSBcInVuaXRhcnkobWF0cml4PVwiICsgZ2F0ZU5hbWUgKyBcIl91bml0YXJ5KFwiICsgcGFyYW1TdHJpbmcgKyBcIiksIHRhcmdldHM9W1wiO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRicmFrZXQgKz0gZ2F0ZU5hbWUgKyBcIihcIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0dmFyIGFyZ0NvdW50ID0gMDtcblx0XHRcdFx0XHRmb3IodyA9IDA7IHcgPCBnYXRlLndpcmVzLmxlbmd0aDsgdysrKSB7XG5cdFx0XHRcdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0XHRcdFx0YnJha2V0ICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmKGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRcdFx0XHRcdFx0YnJha2V0ICs9IHF1Yml0TGV0dGVyKGdhdGUud2lyZXNbd10sIGNpcmN1aXQubnVtUXViaXRzKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGJyYWtldCArPSBnYXRlLndpcmVzW3ddO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YXJnQ291bnQrKztcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZihpc1VuaXRhcnkpIHtcblx0XHRcdFx0XHRcdGJyYWtldCArPSBcIl1cIjtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0aWYocGFyYW1TdHJpbmcpIHtcblx0XHRcdFx0XHRcdFx0YnJha2V0ICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdFx0YnJha2V0ICs9IHBhcmFtU3RyaW5nO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmFrZXQgKz0gXCIpXCI7XG5cdFx0XHRcdFx0YnJha2V0ICs9IFwiXFxuXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0XG5cdGlmKGV4cG9ydEFzR2F0ZU5hbWUpe1xuXHRcdGJyYWtldCArPSBpbmRlbnQgKyBcInJldHVybiBjaXJjdWl0XCI7XG5cdH1cblxuXHRicmFrZXQgKz0gXCJcXG5cXG5cIjtcblx0XG5cdGlmKCFleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0YnJha2V0ICs9IGluZGVudCArIFwibG9jYWxfc2ltID0gTG9jYWxTaW11bGF0b3IoKVxcblwiO1xuXHRcdGJyYWtldCArPSBpbmRlbnQgKyBcInJlc3VsdCA9IGxvY2FsX3NpbS5ydW4oY2lyY3VpdCwgc2hvdHM9c2hvdHMpLnJlc3VsdCgpXFxuXCI7XG5cdFx0YnJha2V0ICs9IGluZGVudCArIFwiY291bnRzID0gQ291bnRlcih7IFxcXCJcXFwiLmpvaW4ocmV2ZXJzZWQoaykpOiB2IGZvciBrLCB2IGluIHJlc3VsdC5tZWFzdXJlbWVudF9jb3VudHMuaXRlbXMoKSB9KVxcblwiO1xuXHRcdGJyYWtldCArPSBcIlxcblwiO1xuXG5cdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRicmFrZXQgKz0gaW5kZW50ICsgXCIjIENBTENVTEFURSBDT1NUIEhFUkVcXG5cIjtcblxuXHRcdFx0dmFyIGNvc3RGdW5jdGlvbiA9IHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucy5jb3N0RnVuY3Rpb24gPyB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucy5jb3N0RnVuY3Rpb24ucHl0aG9uIHx8IFwiXCIgOiBcIlwiO1xuXHRcdFx0aWYoIWNvc3RGdW5jdGlvbi50cmltKCkpIHtcblx0XHRcdFx0Y29zdEZ1bmN0aW9uID0gXCJjb3N0ID0gMFwiO1xuXHRcdFx0fVxuXG5cdFx0XHRicmFrZXQgKz0gYWRqdXN0SWRlbnRhdGlvbihjb3N0RnVuY3Rpb24sIGluZGVudCk7XG5cblx0XHRcdGJyYWtldCArPSBcIlxcblwiXG5cdFx0XHRicmFrZXQgKz0gaW5kZW50ICsgXCJyZXR1cm4gY29zdFxcblwiO1xuXG5cblx0XHRcdGluZGVudERlcHRoLS07XG5cdFx0XHRpbmRlbnQgPSBnZXRJbmRlbnQoaW5kZW50RGVwdGgpO1xuXHRcdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRcdHZhciBnbG9iYWxQYXJhbUxpc3QgPSBcIlwiO1xuXHRcdFx0XHR0aGlzLnBhcmFtcy5tYXAoZnVuY3Rpb24oZ2xvYmFsUGFyYW1OYW1lLCBnbG9iYWxQYXJhbUluZGV4KSB7XG5cdFx0XHRcdFx0aWYoZ2xvYmFsUGFyYW1JbmRleCA+IDApIHtcblx0XHRcdFx0XHRcdGdsb2JhbFBhcmFtTGlzdCArPSBcIiwgXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGdsb2JhbFBhcmFtTGlzdCArPSBnbG9iYWxQYXJhbU5hbWU7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGJyYWtldCArPSBcIlxcblwiO1xuXHRcdFx0XHRicmFrZXQgKz0gXCJwYXJhbXMgPSBucC5hcnJheShbXCIgKyBnbG9iYWxQYXJhbUxpc3QgKyBcIl0pXFxuXCI7XG5cdFx0XHRcdGJyYWtldCArPSBcIlxcblwiO1xuXHRcdFx0XHRicmFrZXQgKz0gXCJtaW5pbXVtID0gbWluaW1pemUob2JqZWN0aXZlX2Z1bmN0aW9uLCBwYXJhbXMsIG1ldGhvZD1cXFwiXCIgKyAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLm9wdGltaXplciA/IHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLm9wdGltaXplciA6IFwiUG93ZWxsXCIpICsgXCJcXFwiLCB0b2w9dG9sZXJhbmNlKVxcblwiO1xuXHRcdFx0XHRicmFrZXQgKz0gXCJwcmludChcXFwiY29zdDpcXFwiLCBtaW5pbXVtLmZ1biwgXFxcInBhcmFtczpcXFwiLCBtaW5pbXVtLngpXFxuXCI7XG5cdFx0XHR9XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0YnJha2V0ICs9IGluZGVudCArIFwicHJpbnQoY291bnRzKVwiO1xuXHRcdH1cblx0fVxuXG5cdGlmKGFzSnVweXRlcikge1xuXHRcdHZhciBub3RlYm9vayA9IHtcblx0XHRcdG1ldGFkYXRhOiB7XG5cdFx0XHRcdGtlcm5lbHNwZWM6IHtcblx0XHRcdFx0XHRkaXNwbGF5X25hbWU6IFwiUHl0aG9uIDNcIixcblx0XHRcdFx0XHRsYW5ndWFnZTogXCJweXRob25cIixcblx0XHRcdFx0XHRuYW1lOiBcInB5dGhvbjNcIlxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0bmJmb3JtYXQ6IDQsXG5cdFx0XHRuYmZvcm1hdF9taW5vcjogMCxcblx0XHRcdGNlbGxzOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRjZWxsX3R5cGU6IFwiY29kZVwiLFxuXHRcdFx0XHRcdHNvdXJjZTogYnJha2V0LFxuXHRcdFx0XHRcdG1ldGFkYXRhOiB7XG5cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG91dHB1dHM6IFtdLFxuXHRcdFx0XHRcdGV4ZWN1dGlvbl9jb3VudDogbnVsbFxuXHRcdFx0XHR9XG5cdFx0XHRdXG5cdFx0fTtcblx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkobm90ZWJvb2spO1xuXHR9XG5cblx0cmV0dXJuIGJyYWtldDtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRUb1FvYmogPSBmdW5jdGlvbihvcHRpb25zLCBjaXJjdWl0UmVwbGFjZW1lbnQpIHtcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0dmFyIGNpcmN1aXROYW1lID0gb3B0aW9ucy5jaXJjdWl0TmFtZTtcblx0dmFyIGV4cGVyaW1lbnROYW1lID0gb3B0aW9ucy5leHBlcmltZW50TmFtZTtcblx0dmFyIG51bVNob3RzID0gb3B0aW9ucy5udW1TaG90cztcblxuXHR2YXIgc2VsZiA9IHRoaXM7XG5cdFxuXHR2YXIgZ2xvYmFsUGFyYW1zID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5wYXJhbXMgPyB0aGlzLm9wdGlvbnMucGFyYW1zIDoge307XG5cdHZhciBnbG9iYWxQYXJhbXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGdsb2JhbFBhcmFtcykpO1xuXHRmb3IodmFyIGdsb2JhbFBhcmFtTmFtZSBpbiBnbG9iYWxQYXJhbXMpIHtcblx0XHRnbG9iYWxQYXJhbXNbZ2xvYmFsUGFyYW1OYW1lXSA9IG1hdGguZXZhbHVhdGUoZ2xvYmFsUGFyYW1zW2dsb2JhbFBhcmFtTmFtZV0pO1xuXHR9XG5cblx0Y2lyY3VpdE5hbWUgPSBjaXJjdWl0TmFtZSB8fCBcIlwiO1xuXHRleHBlcmltZW50TmFtZSA9IGV4cGVyaW1lbnROYW1lIHx8IFwiXCI7XG5cdG51bVNob3RzID0gbnVtU2hvdHMgfHwgMTtcblxuXHQvLyAtLS1cblx0Ly8gZGVjb21wb3NlIGNpcmN1aXRcblx0dmFyIGNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0Y2lyY3VpdC5sb2FkKHRoaXMuc2F2ZSh0cnVlKSk7XG5cdC8vIC0tLVxuXG5cdHZhciBpZCA9IHRoaXMucmFuZG9tU3RyaW5nKCk7XG5cdHZhciBwYXJlbnRRb2JqID0ge3FvYmpfaWQ6IFwicW9ial9cIiArIGlkLCB0eXBlOiBcIlFBU01cIiwgc2NoZW1hX3ZlcnNpb246IFwiMS4wXCIsIGV4cGVyaW1lbnRzOiBbXSwgaGVhZGVyOiB7ZGVzY3JpcHRpb246IGNpcmN1aXROYW1lfSwgY29uZmlnOntzaG90czogbnVtU2hvdHMsIG1lbW9yeV9zbG90czogMH19O1xuXHR2YXIgcW9iaiA9IHtoZWFkZXI6IHttZW1vcnlfc2xvdHM6IDAsIG5fcXViaXRzOiAwLCBxcmVnX3NpemVzOiBbXSwgcXViaXRfbGFiZWxzOiBbXSwgY3JlZ19zaXplczogW10sIGNsYml0X2xhYmVsczogW10sIG5hbWU6IFwiY2lyY3VpdDBcIn0sIGNvbmZpZzoge25fcXViaXRzOiAwLCBtZW1vcnlfc2xvdHM6IDB9LCBpbnN0cnVjdGlvbnM6IFtdfTtcblx0dmFyIGNyZWdOYW1lcyA9IE9iamVjdC5rZXlzKGNpcmN1aXQuY3JlZ3MpO1xuXG5cdHZhciBpbnRUb0RvdWJsZSA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMpIHtcblx0XHRpZihOdW1iZXIuaXNJbnRlZ2VyKG5vZGUpKSB7XG5cdFx0XHRyZXR1cm4gbm9kZS50b0ZpeGVkKDEpO1xuXHRcdH1cblx0XHRyZXR1cm4gbm9kZTtcblx0fTtcblxuXHRpZighY2lyY3VpdFJlcGxhY2VtZW50KXtcblx0XHRpZihleHBlcmltZW50TmFtZSl7XG5cdFx0XHRxb2JqLmhlYWRlci5kZXNjcmlwdGlvbiA9IGV4cGVyaW1lbnROYW1lO1xuXHRcdH1cblx0XHRmb3IoY3JlZ05hbWUgaW4gY2lyY3VpdC5jcmVncyl7XG5cdFx0XHR2YXIgY3JlZ0xlbmd0aCA9IGNpcmN1aXQuY3JlZ3NbY3JlZ05hbWVdLmxlbmd0aDtcblx0XHRcdHBhcmVudFFvYmouY29uZmlnLm1lbW9yeV9zbG90cyArPSBjcmVnTGVuZ3RoO1xuXHRcdFx0cW9iai5oZWFkZXIuY3JlZ19zaXplcy5wdXNoKFtjcmVnTmFtZSwgY3JlZ0xlbmd0aF0pO1xuXHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNyZWdMZW5ndGg7IGkrKyl7XG5cdFx0XHRcdHFvYmouaGVhZGVyLmNsYml0X2xhYmVscy5wdXNoKFtjcmVnTmFtZSwgaV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRxb2JqLmhlYWRlci5tZW1vcnlfc2xvdHMgPSBwYXJlbnRRb2JqLmNvbmZpZy5tZW1vcnlfc2xvdHM7XG5cdFx0cW9iai5oZWFkZXIubl9xdWJpdHMgPSBjaXJjdWl0Lm51bVF1Yml0cztcblx0XHRxb2JqLmNvbmZpZy5tZW1vcnlfc2xvdHMgPSBwYXJlbnRRb2JqLmNvbmZpZy5tZW1vcnlfc2xvdHM7XG5cdFx0cW9iai5jb25maWcubl9xdWJpdHMgPSBjaXJjdWl0Lm51bVF1Yml0cztcblx0XHRxb2JqLmhlYWRlci5xcmVnX3NpemVzLnB1c2goW1wicVwiLCBjaXJjdWl0Lm51bVF1Yml0c10pO1xuXHR9XG5cblx0dmFyIHJlZ2lzdGVyU2xvdHMgPSBwYXJlbnRRb2JqLmNvbmZpZy5tZW1vcnlfc2xvdHM7XG5cblx0dmFyIHVzZWRHYXRlcyA9IGNpcmN1aXQudXNlZEdhdGVzKCk7XG5cdHVzZWRHYXRlcy5tYXAoZnVuY3Rpb24odXNlZEdhdGVOYW1lKXtcblx0XHR2YXIgYmFzaWNHYXRlID0gY2lyY3VpdC5iYXNpY0dhdGVzW3VzZWRHYXRlTmFtZV07XG5cdFx0aWYoIWJhc2ljR2F0ZSl7XG5cdFx0XHR2YXIgY3VzdG9tR2F0ZSA9IHNlbGYuY3VzdG9tR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRcdGlmKGN1c3RvbUdhdGUpe1xuXHRcdFx0XHRjdXN0b21DaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdFx0XHRcdGN1c3RvbUNpcmN1aXQubG9hZChjdXN0b21HYXRlKTtcblx0XHRcdFx0dmFyIG5ld09wdGlvbnMgPSB7XG5cdFx0XHRcdFx0Y2lyY3VpdE5hbWU6IGNpcmN1aXROYW1lLFxuXHRcdFx0XHRcdGV4cGVyaW1lbnROYW1lOiBleHBlcmltZW50TmFtZSxcblx0XHRcdFx0XHRudW1TaG90czogbnVtU2hvdHNcblx0XHRcdFx0fTtcblx0XHRcdFx0cGFyZW50UW9iaiArPSBjdXN0b21DaXJjdWl0LmV4cG9ydFRvUW9iaihuZXdPcHRpb25zLCBmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHR2YXIgbnVtQ29scyA9IGNpcmN1aXQubnVtQ29scygpO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKXtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgY2lyY3VpdC5udW1RdWJpdHM7IHdpcmUrKyl7XG5cdFx0XHR2YXIgZ2F0ZSA9IGNpcmN1aXQuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHR2YXIgcW9iakluc3RydWN0aW9uID0ge25hbWUgOiBcIlwiLCBxdWJpdHM6IFtdfTtcblx0XHRcdHZhciBxb2JqUmVwbGFjZW1lbnQgPSBudWxsO1xuXHRcdFx0dmFyIHFvYmpFcXVpdmFsZW50ID0gbnVsbDtcblx0XHRcdGlmKGNvbHVtbiA9PSAwKXtcblx0XHRcdFx0cW9iai5oZWFkZXIucXViaXRfbGFiZWxzLnB1c2goW1wicVwiLCB3aXJlXSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCl7XG5cdFx0XHRcdHZhciBnYXRlRGVmID0gY2lyY3VpdC5nZXRHYXRlRGVmKGdhdGUubmFtZSk7XG5cdFx0XHRcdGlmKGdhdGVEZWYpe1xuXHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mbyl7XG5cdFx0XHRcdFx0XHRpZihnYXRlRGVmLmV4cG9ydEluZm8ucWFzbSAmJiBnYXRlRGVmLmV4cG9ydEluZm8ucWFzbS5yZXBsYWNlbWVudCl7XG5cdFx0XHRcdFx0XHRcdHFvYmpSZXBsYWNlbWVudCA9IGdhdGVEZWYuZXhwb3J0SW5mby5xYXNtLnJlcGxhY2VtZW50O1xuXHRcdFx0XHRcdFx0XHRxb2JqUmVwbGFjZW1lbnQubWFwKGZ1bmN0aW9uKHJlcGxhY2VtZW50KXtcblx0XHRcdFx0XHRcdFx0XHR2YXIgcmVwbGFjZW1lbnRDaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdFx0XHRcdFx0XHRcdFx0cmVwbGFjZW1lbnRDaXJjdWl0LmNyZWdzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShzZWxmLmNyZWdzKSk7XG5cblx0XHRcdFx0XHRcdFx0XHRpZihnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLnBhcmFtcyl7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1zID0gT2JqZWN0LmtleXMoZ2F0ZS5vcHRpb25zLnBhcmFtcyk7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcmVwbGFjZW1lbnRQYXJhbXMgPSBPYmplY3Qua2V5cyhyZXBsYWNlbWVudC5wYXJhbXMpO1xuXHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1zLm1hcChmdW5jdGlvbihwYXJhbSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKHJlcGxhY2VtZW50UGFyYW1zLmluZGV4T2YocGFyYW0pID4gLTEpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlcGxhY2VtZW50LnBhcmFtc1twYXJhbV0gPSBnYXRlLm9wdGlvbnMucGFyYW1zW3BhcmFtXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHZhciByZXBsYWNlbWVudENvbmRpdGlvbiA9IGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uID8gZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiA6IHt9O1xuXHRcdFx0XHRcdFx0XHRcdHJlcGxhY2VtZW50Q2lyY3VpdC5hZGRHYXRlKHJlcGxhY2VtZW50Lm5hbWUsIGNvbHVtbiwgZ2F0ZS53aXJlcywgeyBwYXJhbXM6IHJlcGxhY2VtZW50LnBhcmFtcywgY29uZGl0aW9uOiByZXBsYWNlbWVudENvbmRpdGlvbiB9KTtcblx0XHRcdFx0XHRcdFx0XHR2YXIgbmV3T3B0aW9ucyA9IHtcblx0XHRcdFx0XHRcdFx0XHRcdGNpcmN1aXROYW1lOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZXhwZXJpbWVudE5hbWU6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRudW1TaG90czogXCJcIlxuXHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0cW9iai5pbnN0cnVjdGlvbnMgPSBxb2JqLmluc3RydWN0aW9ucy5jb25jYXQocmVwbGFjZW1lbnRDaXJjdWl0LmV4cG9ydFRvUW9iaihuZXdPcHRpb25zLCB0cnVlKSk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fWVsc2UgaWYoZ2F0ZURlZi5leHBvcnRJbmZvLnFhc20gJiYgZ2F0ZURlZi5leHBvcnRJbmZvLnFhc20uZXF1aXZhbGVudCl7XG5cdFx0XHRcdFx0XHRcdHFvYmpFcXVpdmFsZW50ID0gZ2F0ZURlZi5leHBvcnRJbmZvLnFhc20uZXF1aXZhbGVudDtcblx0XHRcdFx0XHRcdFx0cW9iakVxdWl2YWxlbnQubWFwKGZ1bmN0aW9uKGVxdWl2YWxlbnQpe1xuXHRcdFx0XHRcdFx0XHRcdHZhciBlcXVpdmFsZW50Q2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRcdFx0XHRcdFx0XHRcdGVxdWl2YWxlbnRDaXJjdWl0LmNyZWdzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShzZWxmLmNyZWdzKSk7XG5cblx0XHRcdFx0XHRcdFx0XHR2YXIgZ2F0ZVdpcmVzID0gZXF1aXZhbGVudC53aXJlcy5sZW5ndGggPiAxID8gZ2F0ZS53aXJlcyA6IGdhdGUud2lyZXNbZXF1aXZhbGVudC53aXJlc1swXV07XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGVxUGFyYW1zID0ge307XG5cdFx0XHRcdFx0XHRcdFx0aWYoZXF1aXZhbGVudC5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIC0tLVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gZXF1aXZhbGVudCBnYXRlIHBhcmFtcyBjYW4gY29udGFpbiB2YXJpYWJsZSBmcm9tIGdhdGUgcGFyYW1zXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyAtLS1cblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gRXZhbHVhdGUgZ2F0ZSdzIHBhcmFtc1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGdhdGVQYXJhbXMgPSB7fTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgZ2F0ZVBhcmFtTmFtZSBpbiBnYXRlLm9wdGlvbnMucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Z2F0ZVBhcmFtc1tnYXRlUGFyYW1OYW1lXSA9IG1hdGguZXZhbHVhdGUoZ2F0ZS5vcHRpb25zLnBhcmFtc1tnYXRlUGFyYW1OYW1lXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gRXZhbHVhdGUgZXF1aXZhbGVudCBnYXRlJ3MgcGFyYW1zXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGVxUGFyYW1OYW1lIGluIGVxdWl2YWxlbnQucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVxUGFyYW1zW2VxUGFyYW1OYW1lXSA9IG1hdGguZXZhbHVhdGUoZXF1aXZhbGVudC5wYXJhbXNbZXFQYXJhbU5hbWVdLCBnYXRlUGFyYW1zKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHR2YXIgZXFDb25kaXRpb24gPSBnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiA/IGdhdGUub3B0aW9ucy5jb25kaXRpb24gOiB7fTtcblxuXHRcdFx0XHRcdFx0XHRcdGVxdWl2YWxlbnRDaXJjdWl0LmFkZEdhdGUoZXF1aXZhbGVudC5uYW1lLCBjb2x1bW4sIGdhdGVXaXJlcywgeyBwYXJhbXM6IGVxUGFyYW1zLCBjb25kaXRpb246IGVxQ29uZGl0aW9uIH0pO1xuXHRcdFx0XHRcdFx0XHRcdHZhciBuZXdPcHRpb25zID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y2lyY3VpdE5hbWU6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRleHBlcmltZW50TmFtZTogXCJcIixcblx0XHRcdFx0XHRcdFx0XHRcdG51bVNob3RzOiBcIlwiXG5cdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0XHRxb2JqLmluc3RydWN0aW9ucyA9IHFvYmouaW5zdHJ1Y3Rpb25zLmNvbmNhdChlcXVpdmFsZW50Q2lyY3VpdC5leHBvcnRUb1FvYmoobmV3T3B0aW9ucywgdHJ1ZSkpO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZighcW9ialJlcGxhY2VtZW50ICYmICFxb2JqRXF1aXZhbGVudCl7XG5cdFx0XHRcdFx0dmFyIGdhdGVOYW1lID0gZ2F0ZS5uYW1lO1xuXHRcdFx0XHRcdHZhciBnYXRlUGFyYW1zID0gZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5wYXJhbXMgPyBnYXRlLm9wdGlvbnMucGFyYW1zIDoge307XG5cdFx0XHRcdFx0aWYodGhpcy5iYXNpY0dhdGVzW2dhdGVOYW1lXSl7XG5cdFx0XHRcdFx0XHRzd2l0Y2goZ2F0ZU5hbWUpIHtcblx0XHRcdFx0XHRcdFx0Y2FzZSBcImlkXCI6IHtcblx0XHRcdFx0XHRcdFx0XHRnYXRlTmFtZSA9IFwiaWRlblwiO1xuXHRcdFx0XHRcdFx0XHR9OyBicmVhaztcblx0XHRcblx0XHRcdFx0XHRcdFx0Ly8gY2FzZSBcInIyXCI6IHtcblx0XHRcdFx0XHRcdFx0Ly8gXHRnYXRlTmFtZSA9IFwidTFcIjtcblx0XHRcdFx0XHRcdFx0Ly8gXHRnYXRlUGFyYW1zID0geyBsYW1iZGE6IFwicGkvMlwiIH07XG5cdFx0XHRcdFx0XHRcdC8vIH07IGJyZWFrO1xuXHRcdFxuXHRcdFx0XHRcdFx0XHQvLyBjYXNlIFwicjRcIjoge1xuXHRcdFx0XHRcdFx0XHQvLyBcdGdhdGVOYW1lID0gXCJ1MVwiO1xuXHRcdFx0XHRcdFx0XHQvLyBcdGdhdGVQYXJhbXMgPSB7IGxhbWJkYTogXCJwaS80XCIgfTtcblx0XHRcdFx0XHRcdFx0Ly8gfTsgYnJlYWs7XG5cdFx0XG5cdFx0XHRcdFx0XHRcdC8vIGNhc2UgXCJyOFwiOiB7XG5cdFx0XHRcdFx0XHRcdC8vIFx0Z2F0ZU5hbWUgPSBcInUxXCI7XG5cdFx0XHRcdFx0XHRcdC8vIFx0Z2F0ZVBhcmFtcyA9IHsgbGFtYmRhOiBcInBpLzhcIiB9O1xuXHRcdFx0XHRcdFx0XHQvLyB9OyBicmVhaztcblx0XHRcblx0XHRcdFx0XHRcdFx0Ly8gY2FzZSBcImNyMlwiOiB7XG5cdFx0XHRcdFx0XHRcdC8vIFx0Z2F0ZU5hbWUgPSBcImN1MVwiO1xuXHRcdFx0XHRcdFx0XHQvLyBcdGdhdGVQYXJhbXMgPSB7IGxhbWJkYTogXCJwaS8yXCIgfTtcblx0XHRcdFx0XHRcdFx0Ly8gfTsgYnJlYWs7XG5cdFx0XG5cdFx0XHRcdFx0XHRcdC8vIGNhc2UgXCJjcjRcIjoge1xuXHRcdFx0XHRcdFx0XHQvLyBcdGdhdGVOYW1lID0gXCJjdTFcIjtcblx0XHRcdFx0XHRcdFx0Ly8gXHRnYXRlUGFyYW1zID0geyBsYW1iZGE6IFwicGkvNFwiIH07XG5cdFx0XHRcdFx0XHRcdC8vIH07IGJyZWFrO1xuXHRcdFxuXHRcdFx0XHRcdFx0XHQvLyBjYXNlIFwiY3I4XCI6IHtcblx0XHRcdFx0XHRcdFx0Ly8gXHRnYXRlTmFtZSA9IFwiY3UxXCI7XG5cdFx0XHRcdFx0XHRcdC8vIFx0Z2F0ZVBhcmFtcyA9IHsgbGFtYmRhOiBcInBpLzhcIiB9O1xuXHRcdFx0XHRcdFx0XHQvLyB9OyBicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdHFvYmpJbnN0cnVjdGlvbi5uYW1lID0gZ2F0ZU5hbWU7XHRcdFx0XHRcblx0XHRcdFx0XHRcdHFvYmpJbnN0cnVjdGlvbi5xdWJpdHMgPSBnYXRlLndpcmVzO1xuXG5cdFx0XHRcdFx0XHRpZihnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcpe1xuXHRcdFx0XHRcdFx0XHR2YXIgYm9vbGVhbkluc3RydWN0aW9uID0ge25hbWU6IFwiXCIsIHJlZ2lzdGVyOiByZWdpc3RlclNsb3RzLCByZWxhdGlvbjogXCI9PVwiLCBtYXNrOiBcIlwiLCB2YWw6IFwiXCJ9O1xuXHRcdFx0XHRcdFx0XHR2YXIgY3JlZ1NpemUgPSBjaXJjdWl0LmNyZWdzW2dhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZ10ubGVuZ3RoO1xuXHRcdFx0XHRcdFx0XHR2YXIgbnVtYmVyT2ZCaXRzU2hpZnQgPSAwO1xuXHRcdFx0XHRcdFx0XHR2YXIgbWFza1ZhbHVlID0gMDtcblx0XHRcdFx0XHRcdFx0dmFyIG1hc2sgPSBcIlwiO1xuXHRcdFx0XHRcdFx0XHR2YXIgdmFsID0gXCJcIjtcblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdHZhciBpbmRleE9mUmVnaXN0ZXIgPSBjcmVnTmFtZXMuaW5kZXhPZihnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcpO1xuXHRcdFx0XHRcdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgaW5kZXhPZlJlZ2lzdGVyOyBpKyspe1xuXHRcdFx0XHRcdFx0XHRcdG51bWJlck9mQml0c1NoaWZ0ICs9IGNpcmN1aXQuY3JlZ3NbY3JlZ05hbWVzW2ldXS5sZW5ndGg7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHR2YXIgdmFsdWUgPSAoZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi52YWx1ZSAlIE1hdGgucG93KDIsIGNyZWdTaXplKSkqTWF0aC5wb3coMiwgbnVtYmVyT2ZCaXRzU2hpZnQpO1xuXHRcdFx0XHRcdFx0XHR2YWwgPSBcIjB4XCIgKyB2YWx1ZS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcblxuXHRcdFx0XHRcdFx0XHRpZihudW1iZXJPZkJpdHNTaGlmdCA+IDApe1xuXHRcdFx0XHRcdFx0XHRcdHZhciBleHBvbmVudCA9IE1hdGgucG93KDIsIG51bWJlck9mQml0c1NoaWZ0KTtcblx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGJpdCA9IDA7IGJpdCA8IGNyZWdTaXplOyBiaXQrKyl7XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdFx0bWFza1ZhbHVlICs9IGV4cG9uZW50O1xuXHRcdFx0XHRcdFx0XHRcdFx0ZXhwb25lbnQgKj0gMjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0bWFzayA9IFwiMHhcIiArIG1hc2tWYWx1ZS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcblx0XHRcdFx0XHRcdFx0fWVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdG1hc2sgPSBcIjB4XCIgKyAoTWF0aC5wb3coMiwgY3JlZ1NpemUpIC0gMSkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Ym9vbGVhbkluc3RydWN0aW9uLm5hbWUgPSBcImJmdW5jXCI7XG5cdFx0XHRcdFx0XHRcdHFvYmpJbnN0cnVjdGlvbi5jb25kaXRpb25hbCA9IHJlZ2lzdGVyU2xvdHM7XG5cdFx0XHRcdFx0XHRcdGJvb2xlYW5JbnN0cnVjdGlvbi5tYXNrID0gbWFzaztcblx0XHRcdFx0XHRcdFx0Ym9vbGVhbkluc3RydWN0aW9uLnZhbCA9IHZhbDtcblx0XHRcdFx0XHRcdFx0cW9iai5pbnN0cnVjdGlvbnMucHVzaChib29sZWFuSW5zdHJ1Y3Rpb24pO1xuXHRcdFx0XHRcdFx0XHRyZWdpc3RlclNsb3RzICs9IDE7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKGdhdGVOYW1lID09IFwibWVhc3VyZVwiICYmIGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY3JlZyl7XG5cdFx0XHRcdFx0XHRcdHFvYmpJbnN0cnVjdGlvbi5tZW1vcnkgPSBbXTtcblx0XHRcdFx0XHRcdFx0cW9iakluc3RydWN0aW9uLnJlZ2lzdGVyID0gW107XG5cdFx0XHRcdFx0XHRcdHZhciBwcmV2UmVnaXN0ZXJMZW5ndGggPSAwO1xuXHRcdFx0XHRcdFx0XHR2YXIgaW5kZXhPZlJlZ2lzdGVyID0gY3JlZ05hbWVzLmluZGV4T2YoZ2F0ZS5vcHRpb25zLmNyZWcubmFtZSk7XG5cdFx0XHRcdFx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBpbmRleE9mUmVnaXN0ZXI7IGkrKyl7XG5cdFx0XHRcdFx0XHRcdFx0cHJldlJlZ2lzdGVyTGVuZ3RoICs9IGNpcmN1aXQuY3JlZ3NbY3JlZ05hbWVzW2ldXS5sZW5ndGg7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0dmFyIGNyZWdCaXQgPSBwcmV2UmVnaXN0ZXJMZW5ndGggKyBnYXRlLm9wdGlvbnMuY3JlZy5iaXQ7XG5cdFx0XHRcdFx0XHRcdHFvYmpJbnN0cnVjdGlvbi5tZW1vcnkucHVzaChjcmVnQml0KTtcblx0XHRcdFx0XHRcdFx0cW9iakluc3RydWN0aW9uLnJlZ2lzdGVyLnB1c2goY3JlZ0JpdCk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKGdhdGVQYXJhbXMpe1xuXHRcdFx0XHRcdFx0XHRnYXRlRGVmID0gdGhpcy5iYXNpY0dhdGVzW2dhdGVOYW1lXTtcblx0XHRcdFx0XHRcdFx0aWYoIWdhdGVEZWYpIHtcblx0XHRcdFx0XHRcdFx0XHRnYXRlRGVmID0gdGhpcy5jdXN0b21HYXRlc1tnYXRlTmFtZV07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aWYoZ2F0ZURlZil7XG5cdFx0XHRcdFx0XHRcdFx0cGFyYW1EZWYgPSBnYXRlRGVmLnBhcmFtcyB8fCBbXTtcblx0XHRcdFx0XHRcdFx0XHRwYXJhbUNvdW50ID0gcGFyYW1EZWYubGVuZ3RoO1xuXHRcdFx0XHRcdFx0XHRcdGlmKHBhcmFtQ291bnQpe1xuXHRcdFx0XHRcdFx0XHRcdFx0cW9iakluc3RydWN0aW9uLnBhcmFtcyA9IFtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBwID0gMDsgcCA8IHBhcmFtQ291bnQ7IHArKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJhbU5hbWUgPSBwYXJhbURlZltwXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoZ2F0ZVBhcmFtc1twYXJhbU5hbWVdIHx8IGdhdGVQYXJhbXNbcGFyYW1OYW1lXS50b1N0cmluZygpKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgbm9kZSA9IG1hdGguZXZhbHVhdGUoZ2F0ZVBhcmFtc1twYXJhbU5hbWVdLCBnbG9iYWxQYXJhbXMpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHFvYmpJbnN0cnVjdGlvbi5wYXJhbXMucHVzaChub2RlKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRxb2JqLmluc3RydWN0aW9ucy5wdXNoKHFvYmpJbnN0cnVjdGlvbik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdFxuXHRpZihjaXJjdWl0UmVwbGFjZW1lbnQpe1xuXHRcdHJldHVybiBxb2JqLmluc3RydWN0aW9ucztcblx0fVxuXG5cdGlmKHFvYmouaW5zdHJ1Y3Rpb25zLmxlbmd0aCl7XG5cdFx0cGFyZW50UW9iai5leHBlcmltZW50cy5wdXNoKHFvYmopO1xuXHR9XG5cblx0cmV0dXJuIHBhcmVudFFvYmo7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5jbGVhclBhcnRpdGlvbnMgPSBmdW5jdGlvbigpIHtcblx0dGhpcy5wYXJ0aXRpb25NYXAgPSBbXTtcblx0dGhpcy5wYXJ0aXRpb25Db3VudCA9IDA7XG5cdHRoaXMucGFydGl0aW9uSW5mbyA9IHt9O1xuXG5cdHZhciBudW1Db2xzID0gdGhpcy5udW1Db2xzKCk7XG5cdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0dGhpcy5wYXJ0aXRpb25NYXAucHVzaChbXSk7XG5cdFx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdFx0dGhpcy5wYXJ0aXRpb25NYXBbd2lyZV0ucHVzaCgtMSk7XG5cdFx0fVxuXHR9XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuY3JlYXRlUGFydGl0aW9ucyA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLmNsZWFyUGFydGl0aW9ucygpO1xuXG5cdHZhciB3aXJlUGFydGl0aW9ucyA9IFtdO1xuXHRmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5udW1RdWJpdHM7IGkrKykge1xuXHRcdHdpcmVQYXJ0aXRpb25zLnB1c2goLTEpO1xuXHR9XG5cblx0dmFyIHBhcnRpdGlvbkNvdW50ZXIgPSAwO1xuXHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gdGhpcy5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS53aXJlcykge1xuXHRcdFx0XHR2YXIgcHJldlBhcnRpdGlvbnMgPSBbXTtcblx0XHRcdFx0Zm9yKHZhciB3ID0gMDsgdyA8IGdhdGUud2lyZXMubGVuZ3RoOyB3KyspIHtcblx0XHRcdFx0XHR2YXIgd3IgPSBnYXRlLndpcmVzW3ddO1xuXHRcdFx0XHRcdHZhciBwcmV2UGFydGl0aW9uID0gd2lyZVBhcnRpdGlvbnNbd3JdO1xuXHRcdFx0XHRcdGlmKHByZXZQYXJ0aXRpb25zLmluZGV4T2YocHJldlBhcnRpdGlvbikgPCAwKSB7XG5cdFx0XHRcdFx0XHRwcmV2UGFydGl0aW9ucy5wdXNoKHByZXZQYXJ0aXRpb24pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHR2YXIgcGFydGl0aW9uID0gLTE7XG5cdFx0XHRcdGlmKHByZXZQYXJ0aXRpb25zLmxlbmd0aCAhPSAxIHx8IHByZXZQYXJ0aXRpb25zWzBdID09IC0xKSB7XG5cdFx0XHRcdFx0cGFydGl0aW9uID0gcGFydGl0aW9uQ291bnRlcisrO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHBhcnRpdGlvbiA9IHByZXZQYXJ0aXRpb25zWzBdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Zm9yKHZhciB3ID0gMDsgdyA8IGdhdGUud2lyZXMubGVuZ3RoOyB3KyspIHtcblx0XHRcdFx0XHR2YXIgd3IgPSBnYXRlLndpcmVzW3ddO1xuXG5cdFx0XHRcdFx0b2xkUGFydGl0aW9uID0gd2lyZVBhcnRpdGlvbnNbd3JdO1xuXHRcdFx0XHRcdGlmKG9sZFBhcnRpdGlvbiA9PSAtMSkge1xuXHRcdFx0XHRcdFx0d2lyZVBhcnRpdGlvbnNbd3JdID0gcGFydGl0aW9uO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5udW1RdWJpdHM7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRpZih3aXJlUGFydGl0aW9uc1tpXSA9PSBvbGRQYXJ0aXRpb24pIHtcblx0XHRcdFx0XHRcdFx0XHR3aXJlUGFydGl0aW9uc1tpXSA9IHBhcnRpdGlvbjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR0aGlzLnBhcnRpdGlvbk1hcFt3aXJlXVtjb2x1bW5dID0gd2lyZVBhcnRpdGlvbnNbd2lyZV07XG5cdFx0fVxuXHR9XG5cblx0dGhpcy5wYXJ0aXRpb25Db3VudCA9IHBhcnRpdGlvbkNvdW50ZXI7XG5cblx0Zm9yKHZhciBwYXJ0aXRpb24gPSAwOyBwYXJ0aXRpb24gPCBwYXJ0aXRpb25Db3VudGVyOyBwYXJ0aXRpb24rKykge1xuXHRcdHRoaXMucGFydGl0aW9uSW5mb1twYXJ0aXRpb25dID0gdGhpcy5wYXJ0aXRpb25Cb3VuZHMocGFydGl0aW9uKTtcblx0fVxufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnByaW50UGFydGl0aW9ucyA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdHZhciByb3cgPSBcIlwiO1xuXHRcdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRcdHZhciBwYXJ0ID0gdGhpcy5wYXJ0aXRpb25NYXBbd2lyZV1bY29sdW1uXTtcblx0XHRcdGlmKHBhcnQgPT0gLTEpIHBhcnQgPSBcIiBcIjtcblx0XHRcdGlmKHRoaXMuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSkpIHtcblx0XHRcdFx0cGFydCA9IHBhcnQgKyBcIipcIjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHBhcnQgPSBwYXJ0ICsgXCIgXCI7XG5cdFx0XHR9XG5cdFx0XHR3aGlsZShwYXJ0Lmxlbmd0aCA8IDQpIHtcblx0XHRcdFx0cGFydCA9IFwiIFwiICsgcGFydDtcblx0XHRcdH1cblx0XHRcdHJvdyArPSBwYXJ0O1xuXHRcdH1cblx0XHR2YXIgdyA9IHdpcmUgKyBcIlwiO1xuXHRcdHdoaWxlKHcubGVuZ3RoIDwgMikge1xuXHRcdFx0dyA9IFwiMFwiICsgdztcblx0XHR9XG5cdFx0cm93ID0gXCJxXCIgKyB3ICsgcm93O1xuXHRcdGNvbnNvbGUubG9nKHJvdyk7XG5cdH1cbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnBhcnRpdGlvbkJvdW5kcyA9IGZ1bmN0aW9uKHBhcnRpdGlvbkluZGV4KSB7XG5cdHZhciBib3VuZHMgPSB7XG5cdFx0d2lyZToge1xuXHRcdFx0dG9wOiAtMSxcblx0XHRcdGJvdHRvbTogLTFcblx0XHR9LFxuXHRcdGNvbHVtbjoge1xuXHRcdFx0bGVmdDogLTEsXG5cdFx0XHRyaWdodDogLTFcblx0XHR9LFxuXHRcdHdpcmVNYXA6IHtcblxuXHRcdH0sXG5cdFx0cGFyZW50czoge1xuXG5cdFx0fVxuXHR9O1xuXG5cdHZhciBmb3VuZCA9IGZhbHNlO1xuXHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBwYXJ0aXRpb24gPSB0aGlzLnBhcnRpdGlvbk1hcFt3aXJlXVtjb2x1bW5dO1xuXHRcdFx0aWYocGFydGl0aW9uID09IHBhcnRpdGlvbkluZGV4KSB7XG5cdFx0XHRcdGZvdW5kID0gdHJ1ZTtcblxuXHRcdFx0XHRpZihib3VuZHMud2lyZS50b3AgPCAwKSB7XG5cdFx0XHRcdFx0Ym91bmRzLndpcmUudG9wID0gd2lyZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZihib3VuZHMud2lyZS5ib3R0b20gPCB3aXJlKSB7XG5cdFx0XHRcdFx0Ym91bmRzLndpcmUuYm90dG9tID0gd2lyZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmKGJvdW5kcy5jb2x1bW4ubGVmdCA8IDApIHtcblx0XHRcdFx0XHRib3VuZHMuY29sdW1uLmxlZnQgPSBjb2x1bW47XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYoYm91bmRzLmNvbHVtbi5yaWdodCA8IGNvbHVtbikge1xuXHRcdFx0XHRcdGJvdW5kcy5jb2x1bW4ucmlnaHQgPSBjb2x1bW47XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZighZm91bmQpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdHZhciBwYXJ0aXRpb25XaXJlID0gMDtcblx0Zm9yKHZhciB3aXJlID0gYm91bmRzLndpcmUudG9wOyB3aXJlIDw9IGJvdW5kcy53aXJlLmJvdHRvbTsgd2lyZSsrKSB7XG5cdFx0dmFyIHBhcnRpdGlvbiA9IHRoaXMucGFydGl0aW9uTWFwW3dpcmVdW2JvdW5kcy5jb2x1bW4ubGVmdF07XG5cdFx0aWYocGFydGl0aW9uID09IHBhcnRpdGlvbkluZGV4KSB7XG5cdFx0XHRib3VuZHMud2lyZU1hcFt3aXJlXSA9IHBhcnRpdGlvbldpcmU7XG5cblx0XHRcdHBhcnRpdGlvbldpcmUrKztcblx0XHR9XG5cdH1cblx0Ym91bmRzLm51bVF1Yml0cyA9IHBhcnRpdGlvbldpcmU7XG5cblx0aWYoYm91bmRzLmNvbHVtbi5sZWZ0ID4gMCkge1xuXHRcdGZvcih2YXIgd2lyZSBpbiBib3VuZHMud2lyZU1hcCkge1xuXHRcdFx0dmFyIHBhcmVudFBhcnRpdGlvbiA9IHRoaXMucGFydGl0aW9uTWFwW3dpcmVdW2JvdW5kcy5jb2x1bW4ubGVmdCAtIDFdO1xuXHRcdFx0aWYocGFyZW50UGFydGl0aW9uID49IDApIHtcblx0XHRcdFx0aWYoIWJvdW5kcy5wYXJlbnRzW3BhcmVudFBhcnRpdGlvbl0pIHtcblx0XHRcdFx0XHRib3VuZHMucGFyZW50c1twYXJlbnRQYXJ0aXRpb25dID0ge307XG5cdFx0XHRcdFx0Ym91bmRzLnBhcmVudHNbcGFyZW50UGFydGl0aW9uXS5saW5rcyA9IFtdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHZhciBwYXJlbnRCb3VuZHMgPSB0aGlzLnBhcnRpdGlvbkluZm9bcGFyZW50UGFydGl0aW9uXTtcblx0XHRcdFx0Zm9yKHZhciBwd2lyZSBpbiBwYXJlbnRCb3VuZHMud2lyZU1hcCkge1xuXHRcdFx0XHRcdGlmKHB3aXJlID09IHdpcmUpIHtcblx0XHRcdFx0XHRcdGJvdW5kcy5wYXJlbnRzW3BhcmVudFBhcnRpdGlvbl0ubGlua3MucHVzaChib3VuZHMud2lyZU1hcFt3aXJlXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGJvdW5kcztcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnBhcnRpdGlvbkNpcmN1aXQgPSBmdW5jdGlvbihwYXJ0aXRpb25JbmRleCkge1xuXHR2YXIgYm91bmRzID0gdGhpcy5wYXJ0aXRpb25JbmZvW3BhcnRpdGlvbkluZGV4XTtcblx0aWYoIWJvdW5kcykge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0dmFyIGNvbWJpbmVMaXN0ID0gW107XG5cdHZhciB1c2VkV2lyZXMgPSBbXTtcblx0Zm9yKHZhciBwYXJlbnRQYXJ0aXRpb24gaW4gYm91bmRzLnBhcmVudHMpIHtcblx0XHR2YXIgY29tYmluZUl0ZW0gPSB7fTtcblxuXHRcdGNvbWJpbmVJdGVtLmNpcmN1aXQgPSB0aGlzLnBhcnRpdGlvbkNhY2hlW3BhcmVudFBhcnRpdGlvbl07XG5cdFx0Y29tYmluZUl0ZW0ud2lyZXMgPSBbXTtcblx0XHRjb21iaW5lSXRlbS53aXJlcyA9IGJvdW5kcy5wYXJlbnRzW3BhcmVudFBhcnRpdGlvbl0ubGlua3M7XG5cblx0XHR1c2VkV2lyZXMgPSB1c2VkV2lyZXMuY29uY2F0KGNvbWJpbmVJdGVtLndpcmVzKTtcblxuXHRcdGNvbWJpbmVMaXN0LnB1c2goY29tYmluZUl0ZW0pO1xuXHR9XG5cblx0dmFyIGNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblxuXHQvLyBjb21iaW5lIHN0YXRlIGZyb20gcGFyZW50IHBhcnRpdGlvbnNcblx0aWYoY29tYmluZUxpc3QubGVuZ3RoID4gMCkge1xuXHRcdGlmKGJvdW5kcy5udW1RdWJpdHMgPiB1c2VkV2lyZXMubGVuZ3RoKSB7XG5cdFx0XHR2YXIgY29tYmluZUl0ZW0gPSB7fTtcblx0XHRcdGNvbWJpbmVJdGVtLmNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoYm91bmRzLm51bVF1Yml0cyAtIHVzZWRXaXJlcy5sZW5ndGgpO1xuXHRcdFx0Y29tYmluZUl0ZW0ud2lyZXMgPSBbXTtcblx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBib3VuZHMubnVtUXViaXRzOyBpKyspIHtcblx0XHRcdFx0aWYodXNlZFdpcmVzLmluZGV4T2YoaSkgPCAwKSB7XG5cdFx0XHRcdFx0Y29tYmluZUl0ZW0ud2lyZXMucHVzaChpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Y29tYmluZUxpc3QucHVzaChjb21iaW5lSXRlbSk7XG5cdFx0fVxuXHRcdGNpcmN1aXQuc2V0Q29tYmluZWRTdGF0ZShjb21iaW5lTGlzdCk7XG5cdH1cblxuXHQvLyBhZGQgZ2F0ZXMgdG8gdGhlIGNpcmN1aXRcblx0Zm9yKHZhciBjb2x1bW4gPSBib3VuZHMuY29sdW1uLmxlZnQ7IGNvbHVtbiA8PSBib3VuZHMuY29sdW1uLnJpZ2h0OyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IGJvdW5kcy53aXJlLnRvcDsgd2lyZSA8PSBib3VuZHMud2lyZS5ib3R0b207IHdpcmUrKykge1xuXHRcdFx0dmFyIHBhcnRpdGlvbiA9IHRoaXMucGFydGl0aW9uTWFwW3dpcmVdW2NvbHVtbl07XG5cdFx0XHRpZihwYXJ0aXRpb24gPT0gcGFydGl0aW9uSW5kZXgpIHtcblx0XHRcdFx0dmFyIGdhdGUgPSB0aGlzLmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0XHR2YXIgZ2F0ZVdpcmVzID0gW107XG5cdFx0XHRcdFx0Zm9yKHZhciB3ID0gMDsgdyA8IGdhdGUud2lyZXMubGVuZ3RoOyB3KyspIHtcblx0XHRcdFx0XHRcdHZhciB3ciA9IGdhdGUud2lyZXNbd107XG5cdFx0XHRcdFx0XHRnYXRlV2lyZXMucHVzaChib3VuZHMud2lyZU1hcFt3cl0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjaXJjdWl0LmFkZEdhdGUoZ2F0ZS5uYW1lLCBjb2x1bW4gLSBib3VuZHMuY29sdW1uLmxlZnQsIGdhdGVXaXJlcywgZ2F0ZS5vcHRpb25zKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBjaXJjdWl0O1xufTtcblxuLy9cbi8vIE9wdGlvbnM6XG4vLyAgIHtcbi8vICAgICBzdHJpY3RNb2RlOiBib29sLFxuLy8gICAgIHBhcnRpdGlvbmluZzogYm9vbCxcbi8vICAgICBjb250aW51ZTogYm9vbCxcbi8vICAgICBpbml0aWFsU3RhdGU6IEFycmF5XG4vLyAgICAgb25HYXRlOiBmdW5jdGlvbihjb2x1bW4sIHdpcmUsIGdhdGVDb3VudGVyKSB7IC4uLiB9LFxuLy8gICAgIG9uQ29sdW1uOiBmdW5jdGlvbihjb2x1bW4pIHsgLi4uIH1cbi8vICAgfVxuLy9cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbihpbml0aWFsVmFsdWVzLCBvcHRpb25zKSB7XG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdHRoaXMubWVhc3VyZVJlc2V0c1F1Yml0ID0gISFvcHRpb25zLnN0cmljdE1vZGU7XG5cblx0aWYoIW9wdGlvbnMuY29udGludWUpIHtcblx0XHR0aGlzLmluaXRTdGF0ZSgpO1xuXHRcdHRoaXMuc3RhdHMuZHVyYXRpb24gPSAwO1xuXHR9XG5cblx0aWYob3B0aW9ucy5pbml0aWFsU3RhdGUpIHtcblx0XHRpZihBcnJheS5pc0FycmF5KG9wdGlvbnMuaW5pdGlhbFN0YXRlKSkge1xuXHRcdFx0dGhpcy5zdGF0ZSA9IHt9O1xuXHRcdFx0Zm9yKHZhciB2YWxJbmRleCA9IDA7IHZhbEluZGV4IDwgb3B0aW9ucy5pbml0aWFsU3RhdGUubGVuZ3RoOyB2YWxJbmRleCsrKSB7XG5cdFx0XHRcdHZhciB2YWwgPSBvcHRpb25zLmluaXRpYWxTdGF0ZVt2YWxJbmRleF07XG5cblx0XHRcdFx0aWYoQXJyYXkuaXNBcnJheSh2YWwpICYmIHZhbC5sZW5ndGggPT0gMikge1xuXHRcdFx0XHRcdHZhbCA9IG1hdGguY29tcGxleCh2YWxbMF0sIHZhbFsxXSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZih0eXBlb2YgdmFsID09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHR2YWwgPSB0aGlzLmV2YWxNYXRoU3RyaW5nKHZhbCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYodHlwZW9mIHZhbCA9PSBcIm51bWJlclwiKSB7XG5cdFx0XHRcdFx0dmFsID0gbWF0aC5jb21wbGV4KHZhbCwgMCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5zdGF0ZVt2YWxJbmRleCArIFwiXCJdID0gdmFsO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnN0YXRlID0gb3B0aW9ucy5pbml0aWFsU3RhdGU7XG5cdFx0fVxuXG5cdFx0dGhpcy5zdGF0ZUJpdHMgPSAwO1xuXHRcdGZvcih2YXIgYWluZGV4IGluIHRoaXMuc3RhdGUpIHtcblx0XHRcdHRoaXMuc3RhdGVCaXRzIHw9IHBhcnNlSW50KGFpbmRleCk7XG5cdFx0fVxuXHR9XG5cblx0dGhpcy5zdGF0cy5zdGFydCA9IG5ldyBEYXRlKCk7XG5cblx0dmFyIGRlY29tcG9zZWQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0ZGVjb21wb3NlZC5sb2FkKHRoaXMuc2F2ZSh0cnVlKSk7XG5cblx0aWYoaW5pdGlhbFZhbHVlcykge1xuXHRcdGRlY29tcG9zZWQuaW5zZXJ0Q29sdW1uKDApO1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBkZWNvbXBvc2VkLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHRpZihpbml0aWFsVmFsdWVzW3dpcmVdKSB7XG5cdFx0XHRcdGRlY29tcG9zZWQuYWRkR2F0ZShcInhcIiwgMCwgd2lyZSwge30pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHZhciBwYXJ0aXRpb25pbmcgPSBvcHRpb25zLnBhcnRpdGlvbmluZztcblxuXHRpZihwYXJ0aXRpb25pbmcpIHtcblx0XHRkZWNvbXBvc2VkLmNyZWF0ZVBhcnRpdGlvbnMoKTtcbi8vXHRcdGRlY29tcG9zZWQucHJpbnRQYXJ0aXRpb25zKCk7XG5cdH1cblxuXHR2YXIgbnVtQ29scyA9IGRlY29tcG9zZWQubnVtQ29scygpO1xuXHR2YXIgZ2F0ZUNvdW50ZXIgPSAwO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IGRlY29tcG9zZWQubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gZGVjb21wb3NlZC5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCkge1xuXHRcdFx0XHRnYXRlQ291bnRlcisrO1xuXG5cdFx0XHRcdHZhciBleGVjdXRlR2F0ZSA9IHRydWU7XG5cdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZykge1xuXHRcdFx0XHRcdHZhciBjcmVnVmFsdWUgPSB0aGlzLmdldENyZWdWYWx1ZShnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcpO1xuXHRcdFx0XHRcdGV4ZWN1dGVHYXRlID0gY3JlZ1ZhbHVlID09PSBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLnZhbHVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYoZXhlY3V0ZUdhdGUpIHtcblxuXHRcdFx0XHRcdGlmKHBhcnRpdGlvbmluZykge1xuXHRcdFx0XHRcdFx0dmFyIHBhcnRpdGlvbiA9IGRlY29tcG9zZWQucGFydGl0aW9uTWFwW3dpcmVdW2NvbHVtbl07XG5cdFx0XHRcdFx0XHRpZighZGVjb21wb3NlZC5wYXJ0aXRpb25DYWNoZVtwYXJ0aXRpb25dKSB7XG5cdFx0XHRcdFx0XHRcdGRlY29tcG9zZWQucGFydGl0aW9uQ2FjaGVbcGFydGl0aW9uXSA9IGRlY29tcG9zZWQucGFydGl0aW9uQ2lyY3VpdChwYXJ0aXRpb24pO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR2YXIgcGNpcmMgPSBkZWNvbXBvc2VkLnBhcnRpdGlvbkNhY2hlW3BhcnRpdGlvbl07XG5cdFx0XHRcdFx0XHR2YXIgYm91bmRzID0gZGVjb21wb3NlZC5wYXJ0aXRpb25JbmZvW3BhcnRpdGlvbl07XG5cblx0XHRcdFx0XHRcdHZhciBwY29sdW1uID0gY29sdW1uIC0gYm91bmRzLmNvbHVtbi5sZWZ0O1xuXG5cdFx0XHRcdFx0XHR2YXIgcGdhdGUgPSBwY2lyYy5nZXRHYXRlQXQocGNvbHVtbiwgYm91bmRzLndpcmVNYXBbd2lyZV0pO1xuXG5cdFx0XHRcdFx0XHRwY2lyYy5jcmVncyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5jcmVncykpO1xuXHRcdFx0XHRcdFx0cGNpcmMuYXBwbHlHYXRlKHBnYXRlLm5hbWUsIHBjb2x1bW4sIHBnYXRlLndpcmVzLCBwZ2F0ZS5vcHRpb25zKTtcblx0XHRcdFx0XHRcdHRoaXMuY3JlZ3MgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHBjaXJjLmNyZWdzKSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRoaXMuYXBwbHlHYXRlKGdhdGUubmFtZSwgY29sdW1uLCBnYXRlLndpcmVzLCBnYXRlLm9wdGlvbnMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIGNhbGxiYWNrIGFmdGVyIGdhdGUgaXMgZmluaXNoZWRcblx0XHRcdFx0aWYob3B0aW9ucyAmJiBvcHRpb25zLm9uR2F0ZSkge1xuXHRcdFx0XHRcdG9wdGlvbnMub25HYXRlKGNvbHVtbiwgd2lyZSwgZ2F0ZUNvdW50ZXIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIGNhbGxiYWNrIGFmdGVyIGNvbHVtbiBpcyBmaW5pc2hlZFxuXHRcdGlmKG9wdGlvbnMgJiYgb3B0aW9ucy5vbkNvbHVtbikge1xuXHRcdFx0b3B0aW9ucy5vbkNvbHVtbihjb2x1bW4pO1xuXHRcdH1cblx0fVxuXG5cdGlmKHBhcnRpdGlvbmluZykge1xuXHRcdHZhciBsYXN0UGFydGl0aW9ucyA9IFtdO1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBkZWNvbXBvc2VkLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgcGFydGl0aW9uID0gZGVjb21wb3NlZC5wYXJ0aXRpb25NYXBbd2lyZV1bbnVtQ29scyAtIDFdO1xuXHRcdFx0aWYocGFydGl0aW9uID49IDAgJiYgbGFzdFBhcnRpdGlvbnMuaW5kZXhPZihwYXJ0aXRpb24pIDwgMCkge1xuXHRcdFx0XHRsYXN0UGFydGl0aW9ucy5wdXNoKHBhcnRpdGlvbik7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmKGxhc3RQYXJ0aXRpb25zLmxlbmd0aCkge1xuXHRcdFx0aWYobGFzdFBhcnRpdGlvbnMubGVuZ3RoID09IDEpIHtcblx0XHRcdFx0dGhpcy5zdGF0ZSA9IGRlY29tcG9zZWQucGFydGl0aW9uQ2FjaGVbbGFzdFBhcnRpdGlvbnNbMF1dLnN0YXRlO1xuXHRcdFx0XHR0aGlzLnN0YXRlQml0cyA9IGRlY29tcG9zZWQucGFydGl0aW9uQ2FjaGVbbGFzdFBhcnRpdGlvbnNbMF1dLnN0YXRlQml0cztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHZhciBzdGFydFRpbWUgPSB0aGlzLnN0YXRzLnN0YXJ0O1xuXHRcdFx0XHR2YXIgY29tYmluZUxpc3QgPSBbXTtcblx0XHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGxhc3RQYXJ0aXRpb25zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0dmFyIGxhc3RQYXJ0aXRpb24gPSBsYXN0UGFydGl0aW9uc1tpXTtcblxuXHRcdFx0XHRcdHZhciBjb21iaW5lSXRlbSA9IHt9O1xuXG5cdFx0XHRcdFx0Y29tYmluZUl0ZW0uY2lyY3VpdCA9IGRlY29tcG9zZWQucGFydGl0aW9uQ2FjaGVbbGFzdFBhcnRpdGlvbl07XG5cdFx0XHRcdFx0Y29tYmluZUl0ZW0ud2lyZXMgPSBbXTtcblxuXHRcdFx0XHRcdHZhciBsYXN0Qm91bmRzID0gZGVjb21wb3NlZC5wYXJ0aXRpb25JbmZvW2xhc3RQYXJ0aXRpb25dO1xuXHRcdFx0XHRcdGZvcih2YXIgd2lyZSBpbiBsYXN0Qm91bmRzLndpcmVNYXApIHtcblx0XHRcdFx0XHRcdGNvbWJpbmVJdGVtLndpcmVzLnB1c2gocGFyc2VJbnQod2lyZSkpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbWJpbmVMaXN0LnB1c2goY29tYmluZUl0ZW0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuc2V0Q29tYmluZWRTdGF0ZShjb21iaW5lTGlzdCk7XG5cdFx0XHRcdHRoaXMuc3RhdHMuc3RhcnQgPSBzdGFydFRpbWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0dGhpcy5zdGF0cy5lbmQgPSBuZXcgRGF0ZSgpO1xuXHR0aGlzLnN0YXRzLmR1cmF0aW9uICs9IHRoaXMuc3RhdHMuZW5kIC0gdGhpcy5zdGF0cy5zdGFydDtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5jb250aW51ZSA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLnJ1bihudWxsLCB7XG5cdFx0Y29udGludWU6IHRydWVcblx0fSk7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuc3RhdGVBc0FycmF5ID0gZnVuY3Rpb24ob25seVBvc3NpYmxlLCBza2lwSXRlbXMsIGJsb2NrU2l6ZSkge1xuXHR2YXIgc3RhdGUgPSBbXTtcblxuXHR2YXIgbnVtQW1wbGl0dWRlcyA9IHRoaXMubnVtQW1wbGl0dWRlcygpO1xuXG5cdHNraXBJdGVtcyA9IHNraXBJdGVtcyB8fCAwO1xuXHRibG9ja1NpemUgPSBibG9ja1NpemUgfHwgKG9ubHlQb3NzaWJsZSA/IHRoaXMubnVtQW1wbGl0dWRlcyhvbmx5UG9zc2libGUpIDogbnVtQW1wbGl0dWRlcyk7XG5cblx0dmFyIGNvdW50ID0gMDtcblx0Zm9yKHZhciBpID0gMDsgaSA8IG51bUFtcGxpdHVkZXM7IGkrKykge1xuXHRcdHZhciBhbXBsaXR1ZGUgPSBtYXRoLnJvdW5kKHRoaXMuc3RhdGVbaV0gfHwgbWF0aC5jb21wbGV4KDAsIDApLCAxNCk7XG5cdFx0aWYoIW9ubHlQb3NzaWJsZSB8fCAoYW1wbGl0dWRlLnJlIHx8IGFtcGxpdHVkZS5pbSkpIHtcblx0XHRcdGlmKGNvdW50ID49IHNraXBJdGVtcykge1xuXHRcdFx0XHR2YXIgaW5kZXhCaW5TdHIgPSBpLnRvU3RyaW5nKDIpO1xuXHRcdFx0XHR3aGlsZShpbmRleEJpblN0ci5sZW5ndGggPCB0aGlzLm51bVF1Yml0cykge1xuXHRcdFx0XHRcdGluZGV4QmluU3RyID0gXCIwXCIgKyBpbmRleEJpblN0cjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhciBhbXBsaXR1ZGVTdHIgPSB0aGlzLmZvcm1hdENvbXBsZXgoYW1wbGl0dWRlLCB7IGZpeGVkV2lkdGg6IHRydWUsIGRlY2ltYWxQbGFjZXM6IDgsIGlvdGFDaGFyOiBcImlcIiB9KTtcblx0XHRcdFx0dmFyIG1hZ25pdHVkZSA9IG1hdGgucG93KG1hdGguYWJzKGFtcGxpdHVkZSksIDIpO1xuXHRcdFx0XHR2YXIgY2hhbmNlID0gbWFnbml0dWRlICogMTAwO1xuXHRcdFx0XHR2YXIgY2hhbmNlU3RyID0gY2hhbmNlLnRvRml4ZWQoNSk7XG5cdFx0XHRcdHZhciBwaGFzZSA9IG1hdGguYXJnKGFtcGxpdHVkZSk7XG5cdFx0XHRcdHZhciBwaGFzZVN0ciA9IHBoYXNlLnRvRml4ZWQoNSk7XG5cblx0XHRcdFx0c3RhdGUucHVzaCh7XG5cdFx0XHRcdFx0aW5kZXg6IGksXG5cdFx0XHRcdFx0aW5kZXhCaW5TdHI6IGluZGV4QmluU3RyLFxuXHRcdFx0XHRcdGFtcGxpdHVkZTogYW1wbGl0dWRlLFxuXHRcdFx0XHRcdGFtcGxpdHVkZVN0cjogYW1wbGl0dWRlU3RyLFxuXHRcdFx0XHRcdG1hZ25pdHVkZTogbWFnbml0dWRlLFxuXHRcdFx0XHRcdGNoYW5jZTogY2hhbmNlLFxuXHRcdFx0XHRcdGNoYW5jZVN0cjogY2hhbmNlU3RyLFxuXHRcdFx0XHRcdHBoYXNlOiBwaGFzZSxcblx0XHRcdFx0XHRwaGFzZVN0cjogcGhhc2VTdHJcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdGNvdW50Kys7XG5cblx0XHRcdGlmKHN0YXRlLmxlbmd0aCA9PSBibG9ja1NpemUpIHtcblx0XHRcdFx0cmV0dXJuIHN0YXRlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBzdGF0ZTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5zdGF0ZUFzU2ltcGxlQXJyYXkgPSBmdW5jdGlvbigpIHtcblxuXHR2YXIgbnVtQW1wbGl0dWRlcyA9IHRoaXMubnVtQW1wbGl0dWRlcygpO1xuXHRpZighdGhpcy5zdGF0ZSkge1xuXHRcdHJldHVybiBbXTtcblx0fVxuXG5cdHZhciBzdGF0ZSA9IFtdO1xuXHRmb3IodmFyIGkgPSAwOyBpIDwgbnVtQW1wbGl0dWRlczsgaSsrKSB7XG5cdFx0c3RhdGUucHVzaChtYXRoLnJvdW5kKHRoaXMuc3RhdGVbaV0gfHwgbWF0aC5jb21wbGV4KDAsIDApLCAxNCkpO1xuXHR9XG5cdHJldHVybiBzdGF0ZTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnN0YXRlQXNTdHJpbmcgPSBmdW5jdGlvbihvbmx5UG9zc2libGUpIHtcblxuXHR2YXIgbnVtQW1wbGl0dWRlcyA9IHRoaXMubnVtQW1wbGl0dWRlcygpO1xuXHRpZighdGhpcy5zdGF0ZSkge1xuXHRcdHJldHVybiBcIkVycm9yOiBjaXJjdWl0IGlzIG5vdCBpbml0aWFsaXplZC4gUGxlYXNlIGNhbGwgaW5pdFN0YXRlKCkgb3IgcnVuKCkgbWV0aG9kLlwiO1xuXHR9XG5cblx0dmFyIHMgPSBcIlwiO1xuXHR2YXIgY291bnQgPSAwO1xuXHRmb3IodmFyIGkgPSAwOyBpIDwgbnVtQW1wbGl0dWRlczsgaSsrKSB7XG5cdFx0dmFyIHN0YXRlID0gbWF0aC5yb3VuZCh0aGlzLnN0YXRlW2ldIHx8IG1hdGguY29tcGxleCgwLCAwKSwgMTQpO1xuXHRcdGlmKCFvbmx5UG9zc2libGUgfHwgKHN0YXRlLnJlIHx8IHN0YXRlLmltKSkge1xuXHRcdFx0dmFyIG0gPSBtYXRoLnBvdyhtYXRoLmFicyhzdGF0ZSksIDIpICogMTAwO1xuXG5cdFx0XHQvLyBiaW5hcnkgc3RyaW5nXG5cdFx0XHR2YXIgYmluID0gaS50b1N0cmluZygyKTtcblx0XHRcdHdoaWxlKGJpbi5sZW5ndGggPCB0aGlzLm51bVF1Yml0cykge1xuXHRcdFx0XHRiaW4gPSBcIjBcIiArIGJpbjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gcmlnaHQgYWxpZ25lZCBwZXJjZW50XG5cdFx0XHR2YXIgcGVyYyA9IG0udG9GaXhlZCg1KTtcblx0XHRcdHdoaWxlKHBlcmMubGVuZ3RoIDwgOSkge1xuXHRcdFx0XHRwZXJjID0gXCIgXCIgKyBwZXJjO1xuXHRcdFx0fVxuXG5cdFx0XHRzICs9IHRoaXMuZm9ybWF0Q29tcGxleChzdGF0ZSwgeyBmaXhlZFdpZHRoOiB0cnVlLCBkZWNpbWFsUGxhY2VzOiA4LCBpb3RhQ2hhcjogXCJpXCIgfSkgKyBcInxcIiArIGJpbiArIFwiPlxcdFwiICsgcGVyYyArIFwiJVxcblwiO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gcztcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5wcmludCA9IGZ1bmN0aW9uKG9ubHlQb3NzaWJsZSkge1xuXHRjb25zb2xlLmxvZyh0aGlzLnN0YXRlQXNTdHJpbmcob25seVBvc3NpYmxlKSk7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZ290Q2xhc3NpY2FsQ29udHJvbCA9IGZ1bmN0aW9uKCkge1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IHRoaXMubnVtQ29scygpOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IHRoaXMuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24gJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmdvdE1lYXN1cmVtZW50ID0gZnVuY3Rpb24oKSB7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgdGhpcy5udW1Db2xzKCk7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gdGhpcy5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCkge1xuXHRcdFx0XHRpZihnYXRlLm5hbWUgPT0gXCJtZWFzdXJlXCIpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuY3JlZ0NvdW50ID0gZnVuY3Rpb24oKSB7XG5cdHZhciBjcmVnQ291bnQgPSAwO1xuXHRmb3IodmFyIGNyZWdOYW1lIGluIHRoaXMuY3JlZ3MpIHtcblx0XHRjcmVnQ291bnQrKztcblx0fVxuXHRyZXR1cm4gY3JlZ0NvdW50O1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmdldENyZWdzID0gZnVuY3Rpb24oKSB7XG5cdHZhciByZXMgPSB7fTtcblx0Zm9yKHZhciBjcmVnIGluIHRoaXMuY3JlZ3MpIHtcblx0XHRyZXNbY3JlZ10gPSB0aGlzLmdldENyZWdWYWx1ZShjcmVnKTtcblx0fVxuXHRyZXR1cm4gcmVzO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmNyZWdzQXNTdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0dmFyIHMgPSBcInJlZ1xcdGJpblxcdGRlY1xcblwiO1xuXHRmb3IodmFyIGNyZWcgaW4gdGhpcy5jcmVncykge1xuXHRcdHZhciB2YWx1ZSA9IHRoaXMuZ2V0Q3JlZ1ZhbHVlKGNyZWcpO1xuXG5cdFx0Ly8gYmluYXJ5IHN0cmluZ1xuXHRcdHZhciBiaW4gPSB2YWx1ZS50b1N0cmluZygyKTtcblx0XHR2YXIgbGVuID0gdGhpcy5jcmVnc1tjcmVnXSA/IHRoaXMuY3JlZ3NbY3JlZ10ubGVuZ3RoIHx8IDEgOiAxO1xuXHRcdHdoaWxlKGJpbi5sZW5ndGggPCBsZW4pIHtcblx0XHRcdGJpbiA9IFwiMFwiICsgYmluO1xuXHRcdH1cblxuXHRcdHMgKz0gY3JlZyArIFwiXFx0XCIgKyBiaW4gKyBcIlxcdFwiICsgdmFsdWUgKyBcIlxcblwiO1xuXHR9XG5cdHJldHVybiBzO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuY3JlYXRlQ3JlZyA9IGZ1bmN0aW9uKGNyZWcsIGxlbikge1xuXHR0aGlzLmNyZWdzW2NyZWddID0gW107XG5cblx0Ly8gZXh0ZW5kIHJlZ2lzdGVyXG5cdHdoaWxlKHRoaXMuY3JlZ3NbY3JlZ10ubGVuZ3RoIDwgKGxlbiB8fCAxKSkge1xuXHRcdHRoaXMuY3JlZ3NbY3JlZ10ucHVzaCgwKTtcblx0fVxufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnJlbW92ZUNyZWcgPSBmdW5jdGlvbihjcmVnKSB7XG5cdC8vIHJlbW92ZSByZWZlcmVuY2UgdG8gY3JlZ1xuXHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHR2YXIgcmVtb3ZlR2F0ZXMgPSBbXTtcblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IHRoaXMuZ2F0ZXNbd2lyZV1bY29sdW1uXTtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5vcHRpb25zKSB7XG5cdFx0XHRcdC8vIGdhdGUgd3JpdGluZyB0byBjcmVnXG5cdFx0XHRcdGlmKGdhdGUub3B0aW9ucy5jcmVnICYmIGdhdGUub3B0aW9ucy5jcmVnLm5hbWUgJiYgZ2F0ZS5vcHRpb25zLmNyZWcubmFtZSA9PSBjcmVnKSB7XG5cdFx0XHRcdFx0aWYocmVtb3ZlR2F0ZXMuaW5kZXhPZihnYXRlLmlkKSA8IDApIHtcblx0XHRcdFx0XHRcdHJlbW92ZUdhdGVzLnB1c2goZ2F0ZS5pZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gZ2F0ZSBjb250cm9sbGVkIGJ5IGNyZWdcblx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcgJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnID09IGNyZWcpIHtcblx0XHRcdFx0XHRkZWxldGUgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIGRlbGV0ZSByZWdpc3RlclxuXHRkZWxldGUgdGhpcy5jcmVnc1tjcmVnXTtcblxuXHRmb3IodmFyIGkgPSAwOyBpIDwgcmVtb3ZlR2F0ZXMubGVuZ3RoOyBpKyspIHtcblx0XHR0aGlzLnJlbW92ZUdhdGUocmVtb3ZlR2F0ZXNbaV0pO1xuXHR9XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucmVuYW1lQ3JlZyA9IGZ1bmN0aW9uKG9sZE5hbWUsIG5ld05hbWUpIHtcblx0Ly8gcmVuYW1lIHJlZmVyZW5jZVxuXHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gdGhpcy5nYXRlc1t3aXJlXVtjb2x1bW5dO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLm9wdGlvbnMpIHtcblx0XHRcdFx0Ly8gZ2F0ZSB3cml0aW5nIHRvIGNyZWdcblx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zLmNyZWcgJiYgZ2F0ZS5vcHRpb25zLmNyZWcubmFtZSAmJiBnYXRlLm9wdGlvbnMuY3JlZy5uYW1lID09IG9sZE5hbWUpIHtcblx0XHRcdFx0XHRnYXRlLm9wdGlvbnMuY3JlZy5uYW1lID0gbmV3TmFtZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIGdhdGUgY29udHJvbGxlZCBieSBjcmVnXG5cdFx0XHRcdGlmKGdhdGUub3B0aW9ucy5jb25kaXRpb24gJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZyA9PSBvbGROYW1lKSB7XG5cdFx0XHRcdFx0Z2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnID0gbmV3TmFtZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIHJlbmFtZSByZWdpc3RlclxuXHR0aGlzLmNyZWdzW25ld05hbWVdID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmNyZWdzW29sZE5hbWVdKSk7XG5cdGRlbGV0ZSB0aGlzLmNyZWdzW29sZE5hbWVdO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLm1pbkNyZWdTaXplID0gZnVuY3Rpb24oY3JlZykge1xuXHR2YXIgbGFyZ2VzdEJpdCA9IDA7XG5cdHZhciBudW1Db2xzID0gdGhpcy5udW1Db2xzKCk7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSB0aGlzLmdhdGVzW3dpcmVdW2NvbHVtbl07XG5cdFx0XHRpZihnYXRlICYmIGdhdGUub3B0aW9ucykge1xuXHRcdFx0XHQvLyBnYXRlIHdyaXRpbmcgdG8gY3JlZ1xuXHRcdFx0XHRpZihnYXRlLm9wdGlvbnMuY3JlZyAmJiBnYXRlLm9wdGlvbnMuY3JlZy5uYW1lICYmIGdhdGUub3B0aW9ucy5jcmVnLm5hbWUgPT0gY3JlZykge1xuXHRcdFx0XHRcdHZhciB0YXJnZXRCaXQgPSBwYXJzZUludChnYXRlLm9wdGlvbnMuY3JlZy5iaXQgfHwgMCk7XG5cdFx0XHRcdFx0aWYoaXNOYU4odGFyZ2V0Qml0KSkge1xuXHRcdFx0XHRcdFx0dGFyZ2V0Qml0ID0gMDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYodGFyZ2V0Qml0ID4gbGFyZ2VzdEJpdCkge1xuXHRcdFx0XHRcdFx0bGFyZ2VzdEJpdCA9IHRhcmdldEJpdDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBnYXRlIGNvbnRyb2xsZWQgYnkgY3JlZ1xuXHRcdFx0XHRpZihnYXRlLm9wdGlvbnMuY29uZGl0aW9uICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcgPT0gY3JlZykge1xuXHRcdFx0XHRcdHZhciBsYiA9IE1hdGguZmxvb3IoTWF0aC5sb2cyKGdhdGUub3B0aW9ucy5jb25kaXRpb24udmFsdWUpKTtcblx0XHRcdFx0XHRpZihsYiA+IGxhcmdlc3RCaXQpIHtcblx0XHRcdFx0XHRcdGxhcmdlc3RCaXQgPSBsYjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbGFyZ2VzdEJpdCArIDE7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucmVzaXplQ3JlZyA9IGZ1bmN0aW9uKGNyZWcsIHNpemUpIHtcblx0aWYoc2l6ZSA8IHRoaXMubWluQ3JlZ1NpemUoY3JlZykpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR3aGlsZSh0aGlzLmNyZWdzW2NyZWddLmxlbmd0aCA8IHNpemUpIHtcblx0XHR0aGlzLmNyZWdzW2NyZWddLnB1c2goMCk7XG5cdH1cblxuXHR3aGlsZSh0aGlzLmNyZWdzW2NyZWddLmxlbmd0aCA+IHNpemUpIHtcblx0XHR0aGlzLmNyZWdzW2NyZWddLnBvcCgpO1xuXHR9XG5cbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5nZXRDcmVnID0gZnVuY3Rpb24oY3JlZykge1xuXHRyZXR1cm4gdGhpcy5jcmVnc1tjcmVnXTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5zZXRDcmVnQml0ID0gZnVuY3Rpb24oY3JlZywgY2JpdCwgdmFsdWUpIHtcblx0Ly8gc2VlIGlmIGNiaXQgaXMgaW50ZWdlclxuXHR2YXIgYml0ID0gcGFyc2VJbnQoY2JpdCk7XG5cdGlmKGlzTmFOKGJpdCkpIHtcblx0XHR0aHJvdyBcIkVycm9yOiBpbnZhbGlkIFxcXCJjYml0XFxcIiBhcmd1bWVudCB0byBcXFwic2V0Q3JlZ0JpdFxcXCIgbWV0aG9kOiBleHBlY3RlZCBcXFwiaW50ZWdlclxcXCIgZ290IFxcXCJcIiArIHR5cGVvZiBjYml0ICsgXCJcXFwiLlwiO1xuXHR9XG5cblx0Ly8gY3JlYXRlIHJlZ2lzdGVyIGlmIGRvZXMgbm90IGV4aXN0XG5cdGlmKCF0aGlzLmNyZWdzW2NyZWddKSB7XG5cdFx0dGhpcy5jcmVnc1tjcmVnXSA9IFtdO1xuXHR9XG5cblx0Ly8gZXh0ZW5kIHJlZ2lzdGVyIGlmIG5lZWRlZFxuXHR3aGlsZShiaXQgPj0gdGhpcy5jcmVnc1tjcmVnXS5sZW5ndGgpIHtcblx0XHR0aGlzLmNyZWdzW2NyZWddLnB1c2goMCk7XG5cdH1cblxuXHQvLyBzZXQgYml0XG5cdHRoaXMuY3JlZ3NbY3JlZ11bYml0XSA9IHZhbHVlID8gMSA6IDA7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZ2V0Q3JlZ0JpdCA9IGZ1bmN0aW9uKGNyZWcsIGNiaXQpIHtcblx0aWYoIXRoaXMuY3JlZ3NbY3JlZ10pIHtcblx0XHR0aHJvdyBcIkVycm9yOiBcXFwiZ2V0Q3JlZ0JpdFxcXCI6IHVua25vd24gcmVnaXN0ZXIgXFxcIlwiICsgY3JlZyArIFwiXFxcIi5cIjtcblx0fVxuXG5cdHZhciBiaXQgPSBwYXJzZUludChjYml0KTtcblx0aWYoaXNOYU4oYml0KSB8fCBiaXQgPj0gdGhpcy5jcmVnc1tjcmVnXS5sZW5ndGgpIHtcblx0XHR0aHJvdyBcIkVycm9yOiBcXFwiZ2V0Q3JlZ0JpdFxcXCI6IGJpdCBcXFwiXCIgKyBjYml0ICsgXCJcXFwiIG5vdCBmb3VuZC5cIjtcblx0fVxuXHRyZXR1cm4gdGhpcy5jcmVnc1tjcmVnXVtiaXRdO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmNyZWdCYXNlID0gZnVuY3Rpb24oY3JlZykge1xuXHRpZighdGhpcy5jcmVnc1tjcmVnXSkge1xuXHRcdHRocm93IFwiRXJyb3I6IFxcXCJnZXRDcmVnQml0XFxcIjogdW5rbm93biByZWdpc3RlciBcXFwiXCIgKyBjcmVnICsgXCJcXFwiLlwiO1xuXHR9XG5cblx0dmFyIGJhc2UgPSAwO1xuXHRmb3IodmFyIHJlZ05hbWUgaW4gdGhpcy5jcmVncykge1xuXHRcdGlmKHJlZ05hbWUgPT0gY3JlZykge1xuXHRcdFx0cmV0dXJuIGJhc2U7XG5cdFx0fVxuXHRcdGJhc2UgKz0gdGhpcy5jcmVnc1tyZWdOYW1lXS5sZW5ndGg7XG5cdH1cbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5jcmVnVG90YWxCaXRzID0gZnVuY3Rpb24oKSB7XG5cdHZhciBiaXRzID0gMDtcblx0Zm9yKHZhciByZWdOYW1lIGluIHRoaXMuY3JlZ3MpIHtcblx0XHRiaXRzICs9IHRoaXMuY3JlZ3NbcmVnTmFtZV0ubGVuZ3RoO1xuXHR9XG5cdHJldHVybiBiaXRzO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmdldENyZWdWYWx1ZSA9IGZ1bmN0aW9uKGNyZWcpIHtcblx0aWYoIXRoaXMuY3JlZ3NbY3JlZ10pIHtcblx0XHR0aHJvdyBcIkVycm9yOiBcXFwiZ2V0Q3JlZ0JpdFxcXCI6IHVua25vd24gcmVnaXN0ZXIgXFxcIlwiICsgY3JlZyArIFwiXFxcIi5cIjtcblx0fVxuXG5cdHZhciBsZW4gPSB0aGlzLmNyZWdzW2NyZWddLmxlbmd0aDtcblx0dmFyIHZhbHVlID0gMDtcblx0Zm9yKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0aWYodGhpcy5jcmVnc1tjcmVnXVtpXSkge1xuXHRcdFx0dmFsdWUgKz0gbWF0aC5wb3coMiwgaSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn07XG5cbi8vXG4vLyBUaGlzIGZ1bmN0aW9uIHNpbXVsYXRlcyBtZWFzdXJlbWVudCBvZiBhbGwgcXViaXRzIG9uIGN1cnJlbnQgc3RhdGUgdmVjdG9yLCB3aXRob3V0IG1vZGlmeWluZyBzdGF0ZVxuLy8gICBSZXR1cm5zIGFycmF5IG9mIDBzIGFuZCAxcyBmb3IgZWFjaCBxdWJpdC4gXG4vLyAgIEZvciBleGFtcGxlLCBiZWxsIHN0YXRlIHdpbGwgcmV0dXJuOiBbMCwgMF0gb3IgWzEsIDFdXG4vLyAgIElmIHlvdSBuZWVkIG11bHRpcGxlIHNob3RzIHRoZW4gdXNlIFwibWVhc3VyZUFsbE11bHRpc2hvdFwiIG1ldGhvZCAoaXQgcnVucyBtdWNoIGZhc3RlcikuXG4vL1xuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLm1lYXN1cmVBbGwgPSBmdW5jdGlvbihmb3JjZSkge1xuXHRpZih0aGlzLmNvbGxhcHNlZCAmJiB0aGlzLmNvbGxhcHNlZC5sZW5ndGggPT0gdGhpcy5udW1RdWJpdHMgJiYgIWZvcmNlKSB7XG5cdFx0cmV0dXJuIHRoaXMuY29sbGFwc2VkO1xuXHR9XG5cblx0dGhpcy5jb2xsYXBzZWQgPSBbXTtcblxuXHR2YXIgcmFuZG9tV2VpZ2h0ID0gTWF0aC5yYW5kb20oKTtcblx0Zm9yKHZhciBpcyBpbiB0aGlzLnN0YXRlKSB7XG5cdFx0dmFyIHN0YXRlID0gbWF0aC5yb3VuZCh0aGlzLnN0YXRlW2lzXSwgMTQpO1xuXHRcdGlmKHN0YXRlLnJlIHx8IHN0YXRlLmltKSB7XG5cdFx0XHR2YXIgY2hhbmNlID0gbWF0aC5yb3VuZChtYXRoLnBvdyhtYXRoLmFicyhzdGF0ZSksIDIpLCAxNCk7XG5cdFx0XHRyYW5kb21XZWlnaHQgLT0gY2hhbmNlO1xuXHRcdFx0aWYocmFuZG9tV2VpZ2h0IDw9IDApIHtcblx0XHRcdFx0dmFyIGkgPSBwYXJzZUludChpcyk7XG5cdFx0XHRcdGlmKHRoaXMucmV2ZXJzZUJpdE9yZGVyKSB7XG5cdFx0XHRcdFx0Zm9yKHZhciBxID0gdGhpcy5udW1RdWJpdHMgLSAxOyBxID49IDA7IHEtLSkge1xuXHRcdFx0XHRcdFx0dGhpcy5jb2xsYXBzZWQucHVzaCgxIDw8IHEgJiBpID8gMSA6IDApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRmb3IodmFyIHEgPSAwOyBxIDwgdGhpcy5udW1RdWJpdHM7IHErKykge1xuXHRcdFx0XHRcdFx0dGhpcy5jb2xsYXBzZWQucHVzaCgxIDw8IHEgJiBpID8gMSA6IDApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb2xsYXBzZWQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gVGhpcyBzaG9sZCBuZXZlciBoYXBwZW4sIGJ1dCBcIm5hdHVyZSBpcyBub3QgY2xhc3NpY2FsXCIgOilcblx0aWYoIXRoaXMuY29sbGFwc2VkLmxlbmd0aCkge1xuXHRcdHdoaWxlKHRoaXMuY29sbGFwc2VkLmxlbmd0aCA8IHRoaXMubnVtUXViaXRzKSB7XG5cdFx0XHR0aGlzLmNvbGxhcHNlZC5wdXNoKDApO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdGhpcy5jb2xsYXBzZWQ7XG59O1xuXG5cbi8vXG4vLyBUaGlzIGZ1bmN0aW9uIHNpbXVsYXRlcyBtZWFzdXJlbWVudCBvZiBhbGwgcXViaXRzIG9uIGN1cnJlbnQgc3RhdGUgdmVjdG9yLCB3aXRob3V0IG1vZGlmeWluZyBzdGF0ZSwgbXVsdGlwbGUgdGltZXNcbi8vICAgUmV0dXJucyBvYmplY3QgKGRpY3Rpb25hcnkpIHdpdGggbWVhc3VyZWQgdmFsdWVzIChiaW5hcnkpIGFzIGtleXMgYW5kIGNvdW50cyBhcyB2YWx1ZXNcbi8vICAgRm9yIGV4YW1wbGUsIDEwMjQgc2hvdHMgb24gYmVsbCBzdGF0ZSB3aWxsIHJldHVybiBzb21ldGhpbmcgbGlrZTogeyBcIjAwXCI6IDUxNCwgXCIxMVwiOiA1MTAgfVxuLy9cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5tZWFzdXJlQWxsTXVsdGlzaG90ID0gZnVuY3Rpb24oc2hvdHMpIHtcblx0c2hvdHMgPSBzaG90cyB8fCAxO1xuXG5cdHZhciBjb3VudHMgPSB7fTtcblxuXHR2YXIgcmFuZG9tV2VpZ2h0cyA9IFtdO1xuXHRmb3IodmFyIGkgPSAwOyBpIDwgc2hvdHM7IGkrKykge1xuXHRcdHJhbmRvbVdlaWdodHMucHVzaChNYXRoLnJhbmRvbSgpKTtcblx0fVxuXG5cdHZhciBzaG90Q291bnQgPSAwO1xuXHRkbyB7XG5cdFx0Zm9yKHZhciBpcyBpbiB0aGlzLnN0YXRlKSB7XG5cdFx0XHR2YXIgc3RhdGUgPSBtYXRoLnJvdW5kKHRoaXMuc3RhdGVbaXNdLCAxNCk7XG5cdFx0XHRpZihzdGF0ZS5yZSB8fCBzdGF0ZS5pbSkge1xuXHRcdFx0XHR2YXIgY2hhbmNlID0gbWF0aC5yb3VuZChtYXRoLnBvdyhtYXRoLmFicyhzdGF0ZSksIDIpLCAxNCk7XG5cblx0XHRcdFx0Zm9yKHZhciBzaCA9IDA7IHNoIDwgc2hvdHM7IHNoKyspIHtcblx0XHRcdFx0XHRpZihyYW5kb21XZWlnaHRzW3NoXSA+IDApIHtcblx0XHRcdFx0XHRcdHJhbmRvbVdlaWdodHNbc2hdIC09IGNoYW5jZTtcblxuXHRcdFx0XHRcdFx0aWYocmFuZG9tV2VpZ2h0c1tzaF0gPD0gMCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgYmluID0gcGFyc2VJbnQoaXMpLnRvU3RyaW5nKDIpO1xuXHRcdFx0XHRcdFx0XHR3aGlsZShiaW4ubGVuZ3RoIDwgdGhpcy5udW1RdWJpdHMpIHtcblx0XHRcdFx0XHRcdFx0XHRiaW4gPSBcIjBcIiArIGJpbjtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmKGNvdW50c1tiaW5dKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y291bnRzW2Jpbl0rKztcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRjb3VudHNbYmluXSA9IDE7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRzaG90Q291bnQrKztcblxuXHRcdFx0XHRcdFx0XHRpZihzaG90Q291bnQgPT0gc2hvdHMpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gY291bnRzO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9IHdoaWxlKHNob3RDb3VudCA8IHNob3RzKTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLm1lYXN1cmUgPSBmdW5jdGlvbih3aXJlLCBjcmVnLCBjYml0LCBmb3JjZSkge1xuXHRpZihmb3JjZSB8fCAhdGhpcy5jb2xsYXBzZWQgfHwgdGhpcy5jb2xsYXBzZWQubGVuZ3RoICE9IHRoaXMubnVtUXViaXRzKSB7XG5cdFx0dGhpcy5tZWFzdXJlQWxsKGZvcmNlKTtcblx0fVxuXG5cdHZhciB2YWwgPSB0aGlzLmNvbGxhcHNlZFt3aXJlXTtcblxuXHRpZihjcmVnICYmIHR5cGVvZiBjYml0ICE9IFwidW5kZWZpbmVkXCIpIHtcblx0XHR0aGlzLnNldENyZWdCaXQoY3JlZywgY2JpdCwgdmFsKTtcblx0fVxuXG5cdHJldHVybiB2YWw7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucHJvYmFiaWxpdGllcyA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLnByb2IgPSBbXTtcblxuXHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdHRoaXMucHJvYi5wdXNoKDApO1xuXHR9XG5cblx0Zm9yKHZhciBpcyBpbiB0aGlzLnN0YXRlKSB7XG5cdFx0dmFyIGkgPSBwYXJzZUludChpcyk7XG5cblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGJpdCA9IG51bGw7XG5cblx0XHRcdGlmKHRoaXMucmV2ZXJzZUJpdE9yZGVyKSB7XG5cdFx0XHRcdGJpdCA9IG1hdGgucG93KDIsICh0aGlzLm51bVF1Yml0cyAtIDEpIC0gd2lyZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRiaXQgPSBtYXRoLnBvdygyLCB3aXJlKTtcblx0XHRcdH1cblxuXHRcdFx0aWYoaSAmIGJpdCkge1xuXHRcdFx0XHR2YXIgc3RhdGUgPSB0aGlzLnN0YXRlW2lzXTtcblx0XHRcdFx0aWYoc3RhdGUucmUgfHwgc3RhdGUuaW0pIHtcblx0XHRcdFx0XHR0aGlzLnByb2Jbd2lyZV0gKz0gbWF0aC5wb3cobWF0aC5hYnMoc3RhdGUpLCAyKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0dGhpcy5wcm9iW3dpcmVdID0gbWF0aC5yb3VuZCh0aGlzLnByb2Jbd2lyZV0sIDE0KTtcblx0fVxuXG5cdHJldHVybiB0aGlzLnByb2I7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucHJvYmFiaWxpdHkgPSBmdW5jdGlvbih3aXJlKSB7XG5cdGlmKCF0aGlzLnByb2IgfHwgdGhpcy5wcm9iLmxlbmd0aCAhPSB0aGlzLm51bVF1Yml0cykge1xuXHRcdHRoaXMucHJvYmFiaWxpdGllcygpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXMucHJvYlt3aXJlXTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5kZW5zaXR5TWF0cml4ID0gZnVuY3Rpb24oKSB7XG5cdHZhciBkZW5zaXR5ID0gW107XG5cdHZhciBudW1BbXBsaXR1ZGVzID0gdGhpcy5udW1BbXBsaXR1ZGVzKCk7XG5cdGZvcihyb3cgPSAwOyByb3cgPCBudW1BbXBsaXR1ZGVzOyByb3crKykge1xuXHRcdHZhciByID0gW107XG5cdFx0dmFyIHJvd1ZhbCA9IHRoaXMuc3RhdGVbcm93XSB8fCBtYXRoLmNvbXBsZXgoMCwgMCk7XG5cdFx0Zm9yKHZhciBjb2wgPSAwOyBjb2wgPCBudW1BbXBsaXR1ZGVzOyBjb2wrKykge1xuXHRcdFx0dmFyIGNvbFZhbCA9IHRoaXMuc3RhdGVbY29sXSB8fCBtYXRoLmNvbXBsZXgoMCwgMCk7XG5cdFx0XHRpZihjb2xWYWwucmUgfHwgY29sVmFsLmltKSB7XG5cdFx0XHRcdGNvbFZhbCA9IG1hdGguY29uaihjb2xWYWwpO1xuXHRcdFx0fVxuXHRcdFx0ci5wdXNoKG1hdGgubXVsdGlwbHkocm93VmFsLCBjb2xWYWwpKTtcblx0XHR9XG5cdFx0ZGVuc2l0eS5wdXNoKHIpO1xuXHR9XG5cdHJldHVybiBkZW5zaXR5O1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnBhcnRpYWxUcmFjZSA9IGZ1bmN0aW9uKHF1Yml0KSB7XG5cblx0ZnVuY3Rpb24gaW5zZXJ0Qml0KGlucHV0LCBwb3MsIGJpdCkge1xuXHRcdHZhciBvdXQgPSBpbnB1dCA8PCAxO1xuXHRcdHZhciBtID0gKDIgPDwgcG9zKSAtIDE7XG5cdFx0dmFyIHBvc0JpdCA9IDEgPDwgcG9zO1xuXHRcdHZhciBvdXQgPSAob3V0IF4gKChvdXQgXiBpbnB1dCkgJiBtKSkgfCBwb3NCaXQ7XG5cdFx0aWYoIWJpdCkge1xuXHRcdFx0b3V0ID0gb3V0IF4gcG9zQml0O1xuXHRcdH1cblx0XHRyZXR1cm4gb3V0O1xuXHR9XG5cblx0dmFyIHRyYWNlID0gW107XG5cblx0dmFyIHVudXNlZENvdW50ID0gdGhpcy5udW1RdWJpdHMgLSAxO1xuXHR2YXIgdW51c2VkTGVuID0gbWF0aC5wb3coMiwgdW51c2VkQ291bnQpO1xuXG5cdHZhciBxcG9zID0gbnVsbDtcblx0aWYodGhpcy5yZXZlcnNlQml0T3JkZXIpIHtcblx0XHRxcG9zID0gKHRoaXMubnVtUXViaXRzIC0gMSkgLSBxdWJpdDtcblx0fSBlbHNlIHtcblx0XHRxcG9zID0gcXViaXQ7XG5cdH1cblxuXHRmb3IodmFyIGVsID0gMDsgZWwgPCA0OyBlbCsrKSB7XG5cdFx0dHJhY2UucHVzaChtYXRoLmNvbXBsZXgoMCwgMCkpO1xuXHRcdHZhciBiYXNlID0gdW51c2VkTGVuO1xuXHRcdHdoaWxlKGJhc2UtLSkge1xuXHRcdFx0dmFyIHJvdyA9IGluc2VydEJpdChiYXNlLCBxcG9zLCBlbCAmIDIgPyAxIDogMCk7XG5cdFx0XHRpZih0aGlzLnN0YXRlW3Jvd10pIHtcblx0XHRcdFx0dmFyIGNvbCA9IGluc2VydEJpdChiYXNlLCBxcG9zLCBlbCAmIDEgPyAxIDogMCk7XG5cdFx0XHRcdGlmKHRoaXMuc3RhdGVbY29sXSkge1xuXHRcdFx0XHRcdHRyYWNlW2VsXSA9IG1hdGguYWRkKHRyYWNlW2VsXSwgbWF0aC5tdWx0aXBseSh0aGlzLnN0YXRlW3Jvd10sIG1hdGguY29uaih0aGlzLnN0YXRlW2NvbF0pKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIFtcblx0XHRbIHRyYWNlWzBdLCB0cmFjZVsxXSBdLFxuXHRcdFsgdHJhY2VbMl0sIHRyYWNlWzNdIF1cblx0XTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmFuZ2xlcyA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgYW5nbGVzID0gW107XG5cdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0YW5nbGVzLnB1c2goeyB0aGV0YTogMCwgcGhpOiAwIH0pO1xuXHR9XG5cblx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHR2YXIgdHJhY2UgPSB0aGlzLnBhcnRpYWxUcmFjZSh3aXJlKTtcblx0XHR2YXIgYWxwaGEgPSBtYXRoLnJvdW5kKG1hdGguc3FydCh0cmFjZVswXVswXSksIDEyKTtcblx0XHR2YXIgYmV0YSA9IG1hdGgucm91bmQobWF0aC5tdWx0aXBseSh0cmFjZVsxXVswXSwgbWF0aC5zcXJ0KDIpKSwgMTIpO1xuXHRcdHZhciByYWRpdXMgPSBtYXRoLnJvdW5kKG1hdGguYWJzKG1hdGguc3FydCgyKm1hdGguYWJzKG1hdGgudHJhY2UobWF0aC5wb3codHJhY2UsIDIpKSktMSkpLCAxMik7XG5cblx0XHR2YXIgdGhldGEgPSBtYXRoLm11bHRpcGx5KDIsIG1hdGguYWNvcyhhbHBoYSkpO1xuXHRcdHZhciBwaGkgPSAwO1xuXG5cdFx0aWYoIShtYXRoLnJvdW5kKGJldGEucmUsIDgpID09IDAgJiYgbWF0aC5yb3VuZChiZXRhLmltLCA4KSA9PSAwKSkge1xuXHRcdFx0cGhpID0gbWF0aC5tdWx0aXBseShtYXRoLmNvbXBsZXgoMCwgLTEpLCBtYXRoLmxvZyhtYXRoLm11bHRpcGx5KGJldGEsIG1hdGguY3NjKG1hdGguZGl2aWRlKHRoZXRhLCAyKSkpKSkucmU7XG5cdFx0XHRpZihpc05hTihwaGkpKSB7XG5cdFx0XHRcdHBoaSA9IDA7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0YW5nbGVzW3dpcmVdLnRoZXRhID0gbWF0aC5yb3VuZChtYXRoLmFicyh0aGV0YSksIDEyKTtcblx0XHRhbmdsZXNbd2lyZV0ucGhpID0gbWF0aC5yb3VuZChwaGksIDEyKTtcblx0XHRhbmdsZXNbd2lyZV0udGhldGFEZWcgPSBtYXRoLnJvdW5kKG1hdGgubXVsdGlwbHkobWF0aC5hYnModGhldGEpLCAoMTgwIC8gbWF0aC5waSkpLCA3KTtcblx0XHRhbmdsZXNbd2lyZV0ucGhpRGVnID0gbWF0aC5yb3VuZChtYXRoLm11bHRpcGx5KHBoaSwgKDE4MCAvIG1hdGgucGkpKSwgNyk7XG5cdFx0YW5nbGVzW3dpcmVdLnJhZGl1cyA9IG1hdGgucm91bmQocmFkaXVzLCA3KTtcblx0fVxuXG5cdHJldHVybiBhbmdsZXM7XG59O1xuXG5cbi8vXG4vLyBPcHRpb25zOiBcbi8vICB7IFxuLy9cdFx0dXNlR2F0ZXM6IFsgXCJyeVwiLCBcInJ6XCIsIFwiY3J6XCIsIC4uLiBdLFxuLy8gIFx0bm9NZWFzdXJlOiBmYWxzZVxuLy8gICAgICBub1Jlc2V0OiBmYWxzZVxuLy8gICAgICBub0NsYXNzaWNDb250cm9sOiBmYWxzZVxuLy8gIH1cbi8vXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5yYW5kb21DaXJjdWl0ID0gZnVuY3Rpb24obnVtUXViaXRzLCBudW1HYXRlcywgb3B0aW9ucykge1xuXHR0aGlzLmluaXQobnVtUXViaXRzKTtcblxuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR2YXIgZ2F0ZXMgPSAob3B0aW9ucy51c2VHYXRlcyAmJiBvcHRpb25zLnVzZUdhdGVzLmxlbmd0aCkgPyBvcHRpb25zLnVzZUdhdGVzIDogT2JqZWN0LmtleXModGhpcy5iYXNpY0dhdGVzKTtcblxuXHRpZihvcHRpb25zLm5vTWVhc3VyZSAmJiBnYXRlcy5pbmRleE9mKFwibWVhc3VyZVwiKSA+PSAwKSB7XG5cdFx0Z2F0ZXMuc3BsaWNlKGdhdGVzLmluZGV4T2YoXCJtZWFzdXJlXCIpLCAxKTtcblx0fVxuXG5cdGlmKG9wdGlvbnMubm9SZXNldCAmJiBnYXRlcy5pbmRleE9mKFwicmVzZXRcIikgPj0gMCkge1xuXHRcdGdhdGVzLnNwbGljZShnYXRlcy5pbmRleE9mKFwicmVzZXRcIiksIDEpO1xuXHR9XG5cblx0dmFyIGdhdGVDb3VudCA9IDA7XG5cdHdoaWxlKGdhdGVDb3VudCA8IG51bUdhdGVzKSB7XG5cdFx0dmFyIGdhdGVOYW1lID0gZ2F0ZXNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogZ2F0ZXMubGVuZ3RoKV07XG5cdFx0dmFyIGdhdGUgPSB0aGlzLmJhc2ljR2F0ZXNbZ2F0ZU5hbWVdO1xuXHRcdGlmKGdhdGUpIHtcblx0XHRcdHZhciBnYXRlUXViaXRzID0gZ2F0ZS5tYXRyaXggJiYgZ2F0ZS5tYXRyaXgubGVuZ3RoID8gbWF0aC5sb2cyKGdhdGUubWF0cml4Lmxlbmd0aCkgOiAxO1xuXG5cdFx0XHRpZihnYXRlUXViaXRzIDw9IG51bVF1Yml0cykge1xuXHRcdFx0XHQvLyBnYXRlIHdpcmVzXG5cdFx0XHRcdHZhciBnYXRlV2lyZXMgPSBbXTtcblx0XHRcdFx0d2hpbGUoZ2F0ZVdpcmVzLmxlbmd0aCA8IGdhdGVRdWJpdHMpIHtcblx0XHRcdFx0XHR2YXIgZ2F0ZVdpcmUgPSAtMTtcblx0XHRcdFx0XHRkbyB7XG5cdFx0XHRcdFx0XHRnYXRlV2lyZSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIG51bVF1Yml0cyk7XG5cdFx0XHRcdFx0fSB3aGlsZShnYXRlV2lyZXMuaW5kZXhPZihnYXRlV2lyZSkgPj0gMCk7XG5cdFx0XHRcdFx0Z2F0ZVdpcmVzLnB1c2goZ2F0ZVdpcmUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFyIG9wdCA9IHt9O1xuXG5cdFx0XHRcdC8vIGdhdGUgcGFyYW1zXG5cdFx0XHRcdGlmKGdhdGUucGFyYW1zICYmIGdhdGUucGFyYW1zLmxlbmd0aCkge1xuXHRcdFx0XHRcdHZhciBwYXJhbXMgPSB7fTtcblx0XHRcdFx0XHRnYXRlLnBhcmFtcy5tYXAoZnVuY3Rpb24ocGFyYW1OYW1lKSB7XG5cdFx0XHRcdFx0XHRwYXJhbXNbcGFyYW1OYW1lXSA9IE1hdGguUEkgKiAyICogTWF0aC5yYW5kb20oKTtcblxuXHRcdFx0XHRcdFx0Ly8gLVBJLi5QSVxuXHRcdFx0XHRcdFx0aWYocGFyYW1zW3BhcmFtTmFtZV0gPiBNYXRoLlBJKSB7XG5cdFx0XHRcdFx0XHRcdHBhcmFtc1twYXJhbU5hbWVdID0gTWF0aC5QSSAtIHBhcmFtc1twYXJhbU5hbWVdO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdG9wdC5wYXJhbXMgPSBwYXJhbXM7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZihnYXRlTmFtZSA9PSBcIm1lYXN1cmVcIikge1xuXHRcdFx0XHRcdC8vIG1lYXN1cmVtZW50IGRlc3RpbmF0aW9uXG5cdFx0XHRcdFx0b3B0LmNyZWcgPSB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcImNcIixcblx0XHRcdFx0XHRcdGJpdDogZ2F0ZVdpcmVzWzBdXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZighb3B0aW9ucy5ub0NsYXNzaWNDb250cm9sKSB7XG5cdFx0XHRcdFx0XHQvLyBtYXliZSBhZGQgY29uZGl0aW9uXG5cdFx0XHRcdFx0XHRpZihNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA0KSA9PSAwKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBjcmVnQml0cyA9IHRoaXMuY3JlZ1RvdGFsQml0cygpO1xuXHRcdFx0XHRcdFx0XHRpZihjcmVnQml0cykge1xuXHRcdFx0XHRcdFx0XHRcdG9wdC5jb25kaXRpb24gPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjcmVnOiBcImNcIixcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF0aC5wb3coMiwgY3JlZ0JpdHMpKSlcblx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5hcHBlbmRHYXRlKGdhdGVOYW1lLCBnYXRlV2lyZXMsIG9wdCk7XG5cdFx0XHRcdGdhdGVDb3VudCsrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnJhbmRvbVVuaXRhcnkgPSBmdW5jdGlvbihudW1RdWJpdHMpIHtcblx0dmFyIGNpcmMgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0Y2lyYy5yYW5kb21DaXJjdWl0KChudW1RdWJpdHMgfHwgMSksIChudW1RdWJpdHMgfHwgMSkgKiA4LCB7XG5cdFx0dXNlR2F0ZXM6IFsgXCJyeFwiLCBcInJ6XCIsIFwiY3pcIiBdLFxuXHRcdG5vTWVhc3VyZTogdHJ1ZSxcblx0XHRub1Jlc2V0OiB0cnVlLFxuXHRcdG5vQ2xhc3NpY0NvbnRyb2w6IHRydWVcblx0fSk7XG5cdHJldHVybiBjaXJjLmNpcmN1aXRNYXRyaXgoKTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5ldWxlckFuZ2xlc1pZWiA9IGZ1bmN0aW9uKGlucHV0TWF0cml4KSB7XG5cdHZhciBldWxlckFuZ2xlcyA9IHt0aGV0YTogbnVsbCwgcGhpOiBudWxsLCBsYW1iZGE6IG51bGwsIHBoYXNlOiBudWxsfTtcblx0dmFyIGNvZWZmID0gbWF0aC5wb3cobWF0aC5kZXQoaW5wdXRNYXRyaXgpLCAtMC41KTtcblx0ZXVsZXJBbmdsZXMucGhhc2UgPSAtMSAqIG1hdGguY29tcGxleChjb2VmZikudG9Qb2xhcigpLnBoaTtcblx0dmFyIHN1X21hdCA9IG1hdGgubXVsdGlwbHkoY29lZmYsIGlucHV0TWF0cml4KTtcblx0ZXVsZXJBbmdsZXMudGhldGEgPSAyICogbWF0aC5hdGFuMihtYXRoLmFicyhzdV9tYXRbMV1bMF0pLCBtYXRoLmFicyhzdV9tYXRbMF1bMF0pKTtcblx0dmFyIHBoaXBsYW1iZGEgPSAyICogbWF0aC5jb21wbGV4KHN1X21hdFsxXVsxXSkudG9Qb2xhcigpLnBoaTtcblx0dmFyIHBoaW1sYW1kYSA9IDIgKiBtYXRoLmNvbXBsZXgoc3VfbWF0WzFdWzBdKS50b1BvbGFyKCkucGhpO1xuXHRldWxlckFuZ2xlcy5waGkgPSAocGhpcGxhbWJkYSArIHBoaW1sYW1kYSkgLyAyLjA7XG5cdGV1bGVyQW5nbGVzLmxhbWJkYSA9IChwaGlwbGFtYmRhIC0gcGhpbWxhbWRhKSAvIDIuMDtcblx0cmV0dXJuIGV1bGVyQW5nbGVzO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBRdWFudHVtQ2lyY3VpdDtcbiIsIi8vXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG5cbi8vIFRoaXMgaW1wbGVtZW50YXRpb24gb2Yge0BsaW5rIFRva2VuU3RyZWFtfSBsb2FkcyB0b2tlbnMgZnJvbSBhXG4vLyB7QGxpbmsgVG9rZW5Tb3VyY2V9IG9uLWRlbWFuZCwgYW5kIHBsYWNlcyB0aGUgdG9rZW5zIGluIGEgYnVmZmVyIHRvIHByb3ZpZGVcbi8vIGFjY2VzcyB0byBhbnkgcHJldmlvdXMgdG9rZW4gYnkgaW5kZXguXG4vL1xuLy8gPHA+XG4vLyBUaGlzIHRva2VuIHN0cmVhbSBpZ25vcmVzIHRoZSB2YWx1ZSBvZiB7QGxpbmsgVG9rZW4vL2dldENoYW5uZWx9LiBJZiB5b3VyXG4vLyBwYXJzZXIgcmVxdWlyZXMgdGhlIHRva2VuIHN0cmVhbSBmaWx0ZXIgdG9rZW5zIHRvIG9ubHkgdGhvc2Ugb24gYSBwYXJ0aWN1bGFyXG4vLyBjaGFubmVsLCBzdWNoIGFzIHtAbGluayBUb2tlbi8vREVGQVVMVF9DSEFOTkVMfSBvclxuLy8ge0BsaW5rIFRva2VuLy9ISURERU5fQ0hBTk5FTH0sIHVzZSBhIGZpbHRlcmluZyB0b2tlbiBzdHJlYW0gc3VjaCBhXG4vLyB7QGxpbmsgQ29tbW9uVG9rZW5TdHJlYW19LjwvcD5cblxudmFyIFRva2VuID0gcmVxdWlyZSgnLi9Ub2tlbicpLlRva2VuO1xudmFyIExleGVyID0gcmVxdWlyZSgnLi9MZXhlcicpLkxleGVyO1xudmFyIEludGVydmFsID0gcmVxdWlyZSgnLi9JbnRlcnZhbFNldCcpLkludGVydmFsO1xuXG4vLyB0aGlzIGlzIGp1c3QgdG8ga2VlcCBtZWFuaW5nZnVsIHBhcmFtZXRlciB0eXBlcyB0byBQYXJzZXJcbmZ1bmN0aW9uIFRva2VuU3RyZWFtKCkge1xuXHRyZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gQnVmZmVyZWRUb2tlblN0cmVhbSh0b2tlblNvdXJjZSkge1xuXG5cdFRva2VuU3RyZWFtLmNhbGwodGhpcyk7XG5cdC8vIFRoZSB7QGxpbmsgVG9rZW5Tb3VyY2V9IGZyb20gd2hpY2ggdG9rZW5zIGZvciB0aGlzIHN0cmVhbSBhcmUgZmV0Y2hlZC5cblx0dGhpcy50b2tlblNvdXJjZSA9IHRva2VuU291cmNlO1xuXG5cdC8vIEEgY29sbGVjdGlvbiBvZiBhbGwgdG9rZW5zIGZldGNoZWQgZnJvbSB0aGUgdG9rZW4gc291cmNlLiBUaGUgbGlzdCBpc1xuXHQvLyBjb25zaWRlcmVkIGEgY29tcGxldGUgdmlldyBvZiB0aGUgaW5wdXQgb25jZSB7QGxpbmsgLy9mZXRjaGVkRU9GfSBpcyBzZXRcblx0Ly8gdG8ge0Bjb2RlIHRydWV9LlxuXHR0aGlzLnRva2VucyA9IFtdO1xuXG5cdC8vIFRoZSBpbmRleCBpbnRvIHtAbGluayAvL3Rva2Vuc30gb2YgdGhlIGN1cnJlbnQgdG9rZW4gKG5leHQgdG9rZW4gdG9cblx0Ly8ge0BsaW5rIC8vY29uc3VtZX0pLiB7QGxpbmsgLy90b2tlbnN9e0Bjb2RlIFt9e0BsaW5rIC8vcH17QGNvZGUgXX0gc2hvdWxkXG5cdC8vIGJlXG5cdC8vIHtAbGluayAvL0xUIExUKDEpfS5cblx0Ly9cblx0Ly8gPHA+VGhpcyBmaWVsZCBpcyBzZXQgdG8gLTEgd2hlbiB0aGUgc3RyZWFtIGlzIGZpcnN0IGNvbnN0cnVjdGVkIG9yIHdoZW5cblx0Ly8ge0BsaW5rIC8vc2V0VG9rZW5Tb3VyY2V9IGlzIGNhbGxlZCwgaW5kaWNhdGluZyB0aGF0IHRoZSBmaXJzdCB0b2tlbiBoYXNcblx0Ly8gbm90IHlldCBiZWVuIGZldGNoZWQgZnJvbSB0aGUgdG9rZW4gc291cmNlLiBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbixcblx0Ly8gc2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mIHtAbGluayBJbnRTdHJlYW19IGZvciBhIGRlc2NyaXB0aW9uIG9mXG5cdC8vIEluaXRpYWxpemluZyBNZXRob2RzLjwvcD5cblx0dGhpcy5pbmRleCA9IC0xO1xuXG5cdC8vIEluZGljYXRlcyB3aGV0aGVyIHRoZSB7QGxpbmsgVG9rZW4vL0VPRn0gdG9rZW4gaGFzIGJlZW4gZmV0Y2hlZCBmcm9tXG5cdC8vIHtAbGluayAvL3Rva2VuU291cmNlfSBhbmQgYWRkZWQgdG8ge0BsaW5rIC8vdG9rZW5zfS4gVGhpcyBmaWVsZCBpbXByb3Zlc1xuXHQvLyBwZXJmb3JtYW5jZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlczpcblx0Ly9cblx0Ly8gPHVsPlxuXHQvLyA8bGk+e0BsaW5rIC8vY29uc3VtZX06IFRoZSBsb29rYWhlYWQgY2hlY2sgaW4ge0BsaW5rIC8vY29uc3VtZX0gdG9cblx0Ly8gcHJldmVudFxuXHQvLyBjb25zdW1pbmcgdGhlIEVPRiBzeW1ib2wgaXMgb3B0aW1pemVkIGJ5IGNoZWNraW5nIHRoZSB2YWx1ZXMgb2Zcblx0Ly8ge0BsaW5rIC8vZmV0Y2hlZEVPRn0gYW5kIHtAbGluayAvL3B9IGluc3RlYWQgb2YgY2FsbGluZyB7QGxpbmtcblx0Ly8gLy9MQX0uPC9saT5cblx0Ly8gPGxpPntAbGluayAvL2ZldGNofTogVGhlIGNoZWNrIHRvIHByZXZlbnQgYWRkaW5nIG11bHRpcGxlIEVPRiBzeW1ib2xzXG5cdC8vIGludG9cblx0Ly8ge0BsaW5rIC8vdG9rZW5zfSBpcyB0cml2aWFsIHdpdGggdGhpcyBmaWVsZC48L2xpPlxuXHQvLyA8dWw+XG5cdHRoaXMuZmV0Y2hlZEVPRiA9IGZhbHNlO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRva2VuU3RyZWFtLnByb3RvdHlwZSk7XG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJ1ZmZlcmVkVG9rZW5TdHJlYW07XG5cbkJ1ZmZlcmVkVG9rZW5TdHJlYW0ucHJvdG90eXBlLm1hcmsgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIDA7XG59O1xuXG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5yZWxlYXNlID0gZnVuY3Rpb24obWFya2VyKSB7XG5cdC8vIG5vIHJlc291cmNlcyB0byByZWxlYXNlXG59O1xuXG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLnNlZWsoMCk7XG59O1xuXG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5zZWVrID0gZnVuY3Rpb24oaW5kZXgpIHtcblx0dGhpcy5sYXp5SW5pdCgpO1xuXHR0aGlzLmluZGV4ID0gdGhpcy5hZGp1c3RTZWVrSW5kZXgoaW5kZXgpO1xufTtcblxuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24oaW5kZXgpIHtcblx0dGhpcy5sYXp5SW5pdCgpO1xuXHRyZXR1cm4gdGhpcy50b2tlbnNbaW5kZXhdO1xufTtcblxuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUuY29uc3VtZSA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgc2tpcEVvZkNoZWNrID0gZmFsc2U7XG5cdGlmICh0aGlzLmluZGV4ID49IDApIHtcblx0XHRpZiAodGhpcy5mZXRjaGVkRU9GKSB7XG5cdFx0XHQvLyB0aGUgbGFzdCB0b2tlbiBpbiB0b2tlbnMgaXMgRU9GLiBza2lwIGNoZWNrIGlmIHAgaW5kZXhlcyBhbnlcblx0XHRcdC8vIGZldGNoZWQgdG9rZW4gZXhjZXB0IHRoZSBsYXN0LlxuXHRcdFx0c2tpcEVvZkNoZWNrID0gdGhpcy5pbmRleCA8IHRoaXMudG9rZW5zLmxlbmd0aCAtIDE7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIG5vIEVPRiB0b2tlbiBpbiB0b2tlbnMuIHNraXAgY2hlY2sgaWYgcCBpbmRleGVzIGEgZmV0Y2hlZCB0b2tlbi5cblx0XHRcdHNraXBFb2ZDaGVjayA9IHRoaXMuaW5kZXggPCB0aGlzLnRva2Vucy5sZW5ndGg7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIG5vdCB5ZXQgaW5pdGlhbGl6ZWRcblx0XHRza2lwRW9mQ2hlY2sgPSBmYWxzZTtcblx0fVxuXHRpZiAoIXNraXBFb2ZDaGVjayAmJiB0aGlzLkxBKDEpID09PSBUb2tlbi5FT0YpIHtcblx0XHR0aHJvdyBcImNhbm5vdCBjb25zdW1lIEVPRlwiO1xuXHR9XG5cdGlmICh0aGlzLnN5bmModGhpcy5pbmRleCArIDEpKSB7XG5cdFx0dGhpcy5pbmRleCA9IHRoaXMuYWRqdXN0U2Vla0luZGV4KHRoaXMuaW5kZXggKyAxKTtcblx0fVxufTtcblxuLy8gTWFrZSBzdXJlIGluZGV4IHtAY29kZSBpfSBpbiB0b2tlbnMgaGFzIGEgdG9rZW4uXG4vL1xuLy8gQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgYSB0b2tlbiBpcyBsb2NhdGVkIGF0IGluZGV4IHtAY29kZSBpfSwgb3RoZXJ3aXNlXG4vLyB7QGNvZGUgZmFsc2V9LlxuLy8gQHNlZSAvL2dldChpbnQgaSlcbi8vIC9cbkJ1ZmZlcmVkVG9rZW5TdHJlYW0ucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbihpKSB7XG5cdHZhciBuID0gaSAtIHRoaXMudG9rZW5zLmxlbmd0aCArIDE7IC8vIGhvdyBtYW55IG1vcmUgZWxlbWVudHMgd2UgbmVlZD9cblx0aWYgKG4gPiAwKSB7XG5cdFx0dmFyIGZldGNoZWQgPSB0aGlzLmZldGNoKG4pO1xuXHRcdHJldHVybiBmZXRjaGVkID49IG47XG5cdH1cblx0cmV0dXJuIHRydWU7XG59O1xuXG4vLyBBZGQge0Bjb2RlIG59IGVsZW1lbnRzIHRvIGJ1ZmZlci5cbi8vXG4vLyBAcmV0dXJuIFRoZSBhY3R1YWwgbnVtYmVyIG9mIGVsZW1lbnRzIGFkZGVkIHRvIHRoZSBidWZmZXIuXG4vLyAvXG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5mZXRjaCA9IGZ1bmN0aW9uKG4pIHtcblx0aWYgKHRoaXMuZmV0Y2hlZEVPRikge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7XG5cdFx0dmFyIHQgPSB0aGlzLnRva2VuU291cmNlLm5leHRUb2tlbigpO1xuXHRcdHQudG9rZW5JbmRleCA9IHRoaXMudG9rZW5zLmxlbmd0aDtcblx0XHR0aGlzLnRva2Vucy5wdXNoKHQpO1xuXHRcdGlmICh0LnR5cGUgPT09IFRva2VuLkVPRikge1xuXHRcdFx0dGhpcy5mZXRjaGVkRU9GID0gdHJ1ZTtcblx0XHRcdHJldHVybiBpICsgMTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG47XG59O1xuXG4vLyBHZXQgYWxsIHRva2VucyBmcm9tIHN0YXJ0Li5zdG9wIGluY2x1c2l2ZWx5Ly8vXG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5nZXRUb2tlbnMgPSBmdW5jdGlvbihzdGFydCwgc3RvcCwgdHlwZXMpIHtcblx0aWYgKHR5cGVzID09PSB1bmRlZmluZWQpIHtcblx0XHR0eXBlcyA9IG51bGw7XG5cdH1cblx0aWYgKHN0YXJ0IDwgMCB8fCBzdG9wIDwgMCkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdHRoaXMubGF6eUluaXQoKTtcblx0dmFyIHN1YnNldCA9IFtdO1xuXHRpZiAoc3RvcCA+PSB0aGlzLnRva2Vucy5sZW5ndGgpIHtcblx0XHRzdG9wID0gdGhpcy50b2tlbnMubGVuZ3RoIC0gMTtcblx0fVxuXHRmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBzdG9wOyBpKyspIHtcblx0XHR2YXIgdCA9IHRoaXMudG9rZW5zW2ldO1xuXHRcdGlmICh0LnR5cGUgPT09IFRva2VuLkVPRikge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdGlmICh0eXBlcyA9PT0gbnVsbCB8fCB0eXBlcy5jb250YWlucyh0LnR5cGUpKSB7XG5cdFx0XHRzdWJzZXQucHVzaCh0KTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHN1YnNldDtcbn07XG5cbkJ1ZmZlcmVkVG9rZW5TdHJlYW0ucHJvdG90eXBlLkxBID0gZnVuY3Rpb24oaSkge1xuXHRyZXR1cm4gdGhpcy5MVChpKS50eXBlO1xufTtcblxuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUuTEIgPSBmdW5jdGlvbihrKSB7XG5cdGlmICh0aGlzLmluZGV4IC0gayA8IDApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHRyZXR1cm4gdGhpcy50b2tlbnNbdGhpcy5pbmRleCAtIGtdO1xufTtcblxuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUuTFQgPSBmdW5jdGlvbihrKSB7XG5cdHRoaXMubGF6eUluaXQoKTtcblx0aWYgKGsgPT09IDApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHRpZiAoayA8IDApIHtcblx0XHRyZXR1cm4gdGhpcy5MQigtayk7XG5cdH1cblx0dmFyIGkgPSB0aGlzLmluZGV4ICsgayAtIDE7XG5cdHRoaXMuc3luYyhpKTtcblx0aWYgKGkgPj0gdGhpcy50b2tlbnMubGVuZ3RoKSB7IC8vIHJldHVybiBFT0YgdG9rZW5cblx0XHQvLyBFT0YgbXVzdCBiZSBsYXN0IHRva2VuXG5cdFx0cmV0dXJuIHRoaXMudG9rZW5zW3RoaXMudG9rZW5zLmxlbmd0aCAtIDFdO1xuXHR9XG5cdHJldHVybiB0aGlzLnRva2Vuc1tpXTtcbn07XG5cbi8vIEFsbG93ZWQgZGVyaXZlZCBjbGFzc2VzIHRvIG1vZGlmeSB0aGUgYmVoYXZpb3Igb2Ygb3BlcmF0aW9ucyB3aGljaCBjaGFuZ2Vcbi8vIHRoZSBjdXJyZW50IHN0cmVhbSBwb3NpdGlvbiBieSBhZGp1c3RpbmcgdGhlIHRhcmdldCB0b2tlbiBpbmRleCBvZiBhIHNlZWtcbi8vIG9wZXJhdGlvbi4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gc2ltcGx5IHJldHVybnMge0Bjb2RlIGl9LiBJZiBhblxuLy8gZXhjZXB0aW9uIGlzIHRocm93biBpbiB0aGlzIG1ldGhvZCwgdGhlIGN1cnJlbnQgc3RyZWFtIGluZGV4IHNob3VsZCBub3QgYmVcbi8vIGNoYW5nZWQuXG4vL1xuLy8gPHA+Rm9yIGV4YW1wbGUsIHtAbGluayBDb21tb25Ub2tlblN0cmVhbX0gb3ZlcnJpZGVzIHRoaXMgbWV0aG9kIHRvIGVuc3VyZVxuLy8gdGhhdFxuLy8gdGhlIHNlZWsgdGFyZ2V0IGlzIGFsd2F5cyBhbiBvbi1jaGFubmVsIHRva2VuLjwvcD5cbi8vXG4vLyBAcGFyYW0gaSBUaGUgdGFyZ2V0IHRva2VuIGluZGV4LlxuLy8gQHJldHVybiBUaGUgYWRqdXN0ZWQgdGFyZ2V0IHRva2VuIGluZGV4LlxuXG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5hZGp1c3RTZWVrSW5kZXggPSBmdW5jdGlvbihpKSB7XG5cdHJldHVybiBpO1xufTtcblxuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUubGF6eUluaXQgPSBmdW5jdGlvbigpIHtcblx0aWYgKHRoaXMuaW5kZXggPT09IC0xKSB7XG5cdFx0dGhpcy5zZXR1cCgpO1xuXHR9XG59O1xuXG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5zZXR1cCA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLnN5bmMoMCk7XG5cdHRoaXMuaW5kZXggPSB0aGlzLmFkanVzdFNlZWtJbmRleCgwKTtcbn07XG5cbi8vIFJlc2V0IHRoaXMgdG9rZW4gc3RyZWFtIGJ5IHNldHRpbmcgaXRzIHRva2VuIHNvdXJjZS4vLy9cbkJ1ZmZlcmVkVG9rZW5TdHJlYW0ucHJvdG90eXBlLnNldFRva2VuU291cmNlID0gZnVuY3Rpb24odG9rZW5Tb3VyY2UpIHtcblx0dGhpcy50b2tlblNvdXJjZSA9IHRva2VuU291cmNlO1xuXHR0aGlzLnRva2VucyA9IFtdO1xuXHR0aGlzLmluZGV4ID0gLTE7XG5cdHRoaXMuZmV0Y2hlZEVPRiA9IGZhbHNlO1xufTtcblxuXG4vLyBHaXZlbiBhIHN0YXJ0aW5nIGluZGV4LCByZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBuZXh0IHRva2VuIG9uIGNoYW5uZWwuXG4vLyBSZXR1cm4gaSBpZiB0b2tlbnNbaV0gaXMgb24gY2hhbm5lbC4gUmV0dXJuIC0xIGlmIHRoZXJlIGFyZSBubyB0b2tlbnNcbi8vIG9uIGNoYW5uZWwgYmV0d2VlbiBpIGFuZCBFT0YuXG4vLyAvXG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5uZXh0VG9rZW5PbkNoYW5uZWwgPSBmdW5jdGlvbihpLCBjaGFubmVsKSB7XG5cdHRoaXMuc3luYyhpKTtcblx0aWYgKGkgPj0gdGhpcy50b2tlbnMubGVuZ3RoKSB7XG5cdFx0cmV0dXJuIC0xO1xuXHR9XG5cdHZhciB0b2tlbiA9IHRoaXMudG9rZW5zW2ldO1xuXHR3aGlsZSAodG9rZW4uY2hhbm5lbCAhPT0gdGhpcy5jaGFubmVsKSB7XG5cdFx0aWYgKHRva2VuLnR5cGUgPT09IFRva2VuLkVPRikge1xuXHRcdFx0cmV0dXJuIC0xO1xuXHRcdH1cblx0XHRpICs9IDE7XG5cdFx0dGhpcy5zeW5jKGkpO1xuXHRcdHRva2VuID0gdGhpcy50b2tlbnNbaV07XG5cdH1cblx0cmV0dXJuIGk7XG59O1xuXG4vLyBHaXZlbiBhIHN0YXJ0aW5nIGluZGV4LCByZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBwcmV2aW91cyB0b2tlbiBvbiBjaGFubmVsLlxuLy8gUmV0dXJuIGkgaWYgdG9rZW5zW2ldIGlzIG9uIGNoYW5uZWwuIFJldHVybiAtMSBpZiB0aGVyZSBhcmUgbm8gdG9rZW5zXG4vLyBvbiBjaGFubmVsIGJldHdlZW4gaSBhbmQgMC5cbkJ1ZmZlcmVkVG9rZW5TdHJlYW0ucHJvdG90eXBlLnByZXZpb3VzVG9rZW5PbkNoYW5uZWwgPSBmdW5jdGlvbihpLCBjaGFubmVsKSB7XG5cdHdoaWxlIChpID49IDAgJiYgdGhpcy50b2tlbnNbaV0uY2hhbm5lbCAhPT0gY2hhbm5lbCkge1xuXHRcdGkgLT0gMTtcblx0fVxuXHRyZXR1cm4gaTtcbn07XG5cbi8vIENvbGxlY3QgYWxsIHRva2VucyBvbiBzcGVjaWZpZWQgY2hhbm5lbCB0byB0aGUgcmlnaHQgb2Zcbi8vIHRoZSBjdXJyZW50IHRva2VuIHVwIHVudGlsIHdlIHNlZSBhIHRva2VuIG9uIERFRkFVTFRfVE9LRU5fQ0hBTk5FTCBvclxuLy8gRU9GLiBJZiBjaGFubmVsIGlzIC0xLCBmaW5kIGFueSBub24gZGVmYXVsdCBjaGFubmVsIHRva2VuLlxuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUuZ2V0SGlkZGVuVG9rZW5zVG9SaWdodCA9IGZ1bmN0aW9uKHRva2VuSW5kZXgsXG5cdFx0Y2hhbm5lbCkge1xuXHRpZiAoY2hhbm5lbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0Y2hhbm5lbCA9IC0xO1xuXHR9XG5cdHRoaXMubGF6eUluaXQoKTtcblx0aWYgKHRva2VuSW5kZXggPCAwIHx8IHRva2VuSW5kZXggPj0gdGhpcy50b2tlbnMubGVuZ3RoKSB7XG5cdFx0dGhyb3cgXCJcIiArIHRva2VuSW5kZXggKyBcIiBub3QgaW4gMC4uXCIgKyB0aGlzLnRva2Vucy5sZW5ndGggLSAxO1xuXHR9XG5cdHZhciBuZXh0T25DaGFubmVsID0gdGhpcy5uZXh0VG9rZW5PbkNoYW5uZWwodG9rZW5JbmRleCArIDEsIExleGVyLkRFRkFVTFRfVE9LRU5fQ0hBTk5FTCk7XG5cdHZhciBmcm9tXyA9IHRva2VuSW5kZXggKyAxO1xuXHQvLyBpZiBub25lIG9uY2hhbm5lbCB0byByaWdodCwgbmV4dE9uQ2hhbm5lbD0tMSBzbyBzZXQgdG8gPSBsYXN0IHRva2VuXG5cdHZhciB0byA9IG5leHRPbkNoYW5uZWwgPT09IC0xID8gdGhpcy50b2tlbnMubGVuZ3RoIC0gMSA6IG5leHRPbkNoYW5uZWw7XG5cdHJldHVybiB0aGlzLmZpbHRlckZvckNoYW5uZWwoZnJvbV8sIHRvLCBjaGFubmVsKTtcbn07XG5cbi8vIENvbGxlY3QgYWxsIHRva2VucyBvbiBzcGVjaWZpZWQgY2hhbm5lbCB0byB0aGUgbGVmdCBvZlxuLy8gdGhlIGN1cnJlbnQgdG9rZW4gdXAgdW50aWwgd2Ugc2VlIGEgdG9rZW4gb24gREVGQVVMVF9UT0tFTl9DSEFOTkVMLlxuLy8gSWYgY2hhbm5lbCBpcyAtMSwgZmluZCBhbnkgbm9uIGRlZmF1bHQgY2hhbm5lbCB0b2tlbi5cbkJ1ZmZlcmVkVG9rZW5TdHJlYW0ucHJvdG90eXBlLmdldEhpZGRlblRva2Vuc1RvTGVmdCA9IGZ1bmN0aW9uKHRva2VuSW5kZXgsXG5cdFx0Y2hhbm5lbCkge1xuXHRpZiAoY2hhbm5lbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0Y2hhbm5lbCA9IC0xO1xuXHR9XG5cdHRoaXMubGF6eUluaXQoKTtcblx0aWYgKHRva2VuSW5kZXggPCAwIHx8IHRva2VuSW5kZXggPj0gdGhpcy50b2tlbnMubGVuZ3RoKSB7XG5cdFx0dGhyb3cgXCJcIiArIHRva2VuSW5kZXggKyBcIiBub3QgaW4gMC4uXCIgKyB0aGlzLnRva2Vucy5sZW5ndGggLSAxO1xuXHR9XG5cdHZhciBwcmV2T25DaGFubmVsID0gdGhpcy5wcmV2aW91c1Rva2VuT25DaGFubmVsKHRva2VuSW5kZXggLSAxLCBMZXhlci5ERUZBVUxUX1RPS0VOX0NIQU5ORUwpO1xuXHRpZiAocHJldk9uQ2hhbm5lbCA9PT0gdG9rZW5JbmRleCAtIDEpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHQvLyBpZiBub25lIG9uIGNoYW5uZWwgdG8gbGVmdCwgcHJldk9uQ2hhbm5lbD0tMSB0aGVuIGZyb209MFxuXHR2YXIgZnJvbV8gPSBwcmV2T25DaGFubmVsICsgMTtcblx0dmFyIHRvID0gdG9rZW5JbmRleCAtIDE7XG5cdHJldHVybiB0aGlzLmZpbHRlckZvckNoYW5uZWwoZnJvbV8sIHRvLCBjaGFubmVsKTtcbn07XG5cbkJ1ZmZlcmVkVG9rZW5TdHJlYW0ucHJvdG90eXBlLmZpbHRlckZvckNoYW5uZWwgPSBmdW5jdGlvbihsZWZ0LCByaWdodCwgY2hhbm5lbCkge1xuXHR2YXIgaGlkZGVuID0gW107XG5cdGZvciAodmFyIGkgPSBsZWZ0OyBpIDwgcmlnaHQgKyAxOyBpKyspIHtcblx0XHR2YXIgdCA9IHRoaXMudG9rZW5zW2ldO1xuXHRcdGlmIChjaGFubmVsID09PSAtMSkge1xuXHRcdFx0aWYgKHQuY2hhbm5lbCAhPT0gTGV4ZXIuREVGQVVMVF9UT0tFTl9DSEFOTkVMKSB7XG5cdFx0XHRcdGhpZGRlbi5wdXNoKHQpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodC5jaGFubmVsID09PSBjaGFubmVsKSB7XG5cdFx0XHRoaWRkZW4ucHVzaCh0KTtcblx0XHR9XG5cdH1cblx0aWYgKGhpZGRlbi5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHRyZXR1cm4gaGlkZGVuO1xufTtcblxuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUuZ2V0U291cmNlTmFtZSA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy50b2tlblNvdXJjZS5nZXRTb3VyY2VOYW1lKCk7XG59O1xuXG4vLyBHZXQgdGhlIHRleHQgb2YgYWxsIHRva2VucyBpbiB0aGlzIGJ1ZmZlci4vLy9cbkJ1ZmZlcmVkVG9rZW5TdHJlYW0ucHJvdG90eXBlLmdldFRleHQgPSBmdW5jdGlvbihpbnRlcnZhbCkge1xuXHR0aGlzLmxhenlJbml0KCk7XG5cdHRoaXMuZmlsbCgpO1xuXHRpZiAoaW50ZXJ2YWwgPT09IHVuZGVmaW5lZCB8fCBpbnRlcnZhbCA9PT0gbnVsbCkge1xuXHRcdGludGVydmFsID0gbmV3IEludGVydmFsKDAsIHRoaXMudG9rZW5zLmxlbmd0aCAtIDEpO1xuXHR9XG5cdHZhciBzdGFydCA9IGludGVydmFsLnN0YXJ0O1xuXHRpZiAoc3RhcnQgaW5zdGFuY2VvZiBUb2tlbikge1xuXHRcdHN0YXJ0ID0gc3RhcnQudG9rZW5JbmRleDtcblx0fVxuXHR2YXIgc3RvcCA9IGludGVydmFsLnN0b3A7XG5cdGlmIChzdG9wIGluc3RhbmNlb2YgVG9rZW4pIHtcblx0XHRzdG9wID0gc3RvcC50b2tlbkluZGV4O1xuXHR9XG5cdGlmIChzdGFydCA9PT0gbnVsbCB8fCBzdG9wID09PSBudWxsIHx8IHN0YXJ0IDwgMCB8fCBzdG9wIDwgMCkge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cdGlmIChzdG9wID49IHRoaXMudG9rZW5zLmxlbmd0aCkge1xuXHRcdHN0b3AgPSB0aGlzLnRva2Vucy5sZW5ndGggLSAxO1xuXHR9XG5cdHZhciBzID0gXCJcIjtcblx0Zm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgc3RvcCArIDE7IGkrKykge1xuXHRcdHZhciB0ID0gdGhpcy50b2tlbnNbaV07XG5cdFx0aWYgKHQudHlwZSA9PT0gVG9rZW4uRU9GKSB7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdFx0cyA9IHMgKyB0LnRleHQ7XG5cdH1cblx0cmV0dXJuIHM7XG59O1xuXG4vLyBHZXQgYWxsIHRva2VucyBmcm9tIGxleGVyIHVudGlsIEVPRi8vL1xuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUuZmlsbCA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLmxhenlJbml0KCk7XG5cdHdoaWxlICh0aGlzLmZldGNoKDEwMDApID09PSAxMDAwKSB7XG5cdFx0Y29udGludWU7XG5cdH1cbn07XG5cbmV4cG9ydHMuQnVmZmVyZWRUb2tlblN0cmVhbSA9IEJ1ZmZlcmVkVG9rZW5TdHJlYW07XG4iLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy9cblxudmFyIElucHV0U3RyZWFtID0gcmVxdWlyZSgnLi9JbnB1dFN0cmVhbScpLklucHV0U3RyZWFtO1xuXG52YXIgaXNOb2RlSnMgPSB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgaW1wb3J0U2NyaXB0cyA9PT0gJ3VuZGVmaW5lZCc7XG52YXIgZnMgPSBpc05vZGVKcyA/IHJlcXVpcmUoXCJmc1wiKSA6IG51bGw7XG5cbi8vIFV0aWxpdHkgZnVuY3Rpb25zIHRvIGNyZWF0ZSBJbnB1dFN0cmVhbXMgZnJvbSB2YXJpb3VzIHNvdXJjZXMuXG4vL1xuLy8gQWxsIHJldHVybmVkIElucHV0U3RyZWFtcyBzdXBwb3J0IHRoZSBmdWxsIHJhbmdlIG9mIFVuaWNvZGVcbi8vIHVwIHRvIFUrMTBGRkZGICh0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiBJbnB1dFN0cmVhbSBvbmx5IHN1cHBvcnRzXG4vLyBjb2RlIHBvaW50cyB1cCB0byBVK0ZGRkYpLlxudmFyIENoYXJTdHJlYW1zID0ge1xuICAvLyBDcmVhdGVzIGFuIElucHV0U3RyZWFtIGZyb20gYSBzdHJpbmcuXG4gIGZyb21TdHJpbmc6IGZ1bmN0aW9uKHN0cikge1xuICAgIHJldHVybiBuZXcgSW5wdXRTdHJlYW0oc3RyLCB0cnVlKTtcbiAgfSxcblxuICAvLyBBc3luY2hyb25vdXNseSBjcmVhdGVzIGFuIElucHV0U3RyZWFtIGZyb20gYSBibG9iIGdpdmVuIHRoZVxuICAvLyBlbmNvZGluZyBvZiB0aGUgYnl0ZXMgaW4gdGhhdCBibG9iIChkZWZhdWx0cyB0byAndXRmOCcgaWZcbiAgLy8gZW5jb2RpbmcgaXMgbnVsbCkuXG4gIC8vXG4gIC8vIEludm9rZXMgb25Mb2FkKHJlc3VsdCkgb24gc3VjY2Vzcywgb25FcnJvcihlcnJvcikgb25cbiAgLy8gZmFpbHVyZS5cbiAgZnJvbUJsb2I6IGZ1bmN0aW9uKGJsb2IsIGVuY29kaW5nLCBvbkxvYWQsIG9uRXJyb3IpIHtcbiAgICB2YXIgcmVhZGVyID0gRmlsZVJlYWRlcigpO1xuICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbihlKSB7XG4gICAgICB2YXIgaXMgPSBuZXcgSW5wdXRTdHJlYW0oZS50YXJnZXQucmVzdWx0LCB0cnVlKTtcbiAgICAgIG9uTG9hZChpcyk7XG4gICAgfTtcbiAgICByZWFkZXIub25lcnJvciA9IG9uRXJyb3I7XG4gICAgcmVhZGVyLnJlYWRBc1RleHQoYmxvYiwgZW5jb2RpbmcpO1xuICB9LFxuXG4gIC8vIENyZWF0ZXMgYW4gSW5wdXRTdHJlYW0gZnJvbSBhIEJ1ZmZlciBnaXZlbiB0aGVcbiAgLy8gZW5jb2Rpbmcgb2YgdGhlIGJ5dGVzIGluIHRoYXQgYnVmZmVyIChkZWZhdWx0cyB0byAndXRmOCcgaWZcbiAgLy8gZW5jb2RpbmcgaXMgbnVsbCkuXG4gIGZyb21CdWZmZXI6IGZ1bmN0aW9uKGJ1ZmZlciwgZW5jb2RpbmcpIHtcbiAgICByZXR1cm4gbmV3IElucHV0U3RyZWFtKGJ1ZmZlci50b1N0cmluZyhlbmNvZGluZyksIHRydWUpO1xuICB9LFxuXG4gIC8vIEFzeW5jaHJvbm91c2x5IGNyZWF0ZXMgYW4gSW5wdXRTdHJlYW0gZnJvbSBhIGZpbGUgb24gZGlzayBnaXZlblxuICAvLyB0aGUgZW5jb2Rpbmcgb2YgdGhlIGJ5dGVzIGluIHRoYXQgZmlsZSAoZGVmYXVsdHMgdG8gJ3V0ZjgnIGlmXG4gIC8vIGVuY29kaW5nIGlzIG51bGwpLlxuICAvL1xuICAvLyBJbnZva2VzIGNhbGxiYWNrKGVycm9yLCByZXN1bHQpIG9uIGNvbXBsZXRpb24uXG4gIGZyb21QYXRoOiBmdW5jdGlvbihwYXRoLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgICBmcy5yZWFkRmlsZShwYXRoLCBlbmNvZGluZywgZnVuY3Rpb24oZXJyLCBkYXRhKSB7XG4gICAgICB2YXIgaXMgPSBudWxsO1xuICAgICAgaWYgKGRhdGEgIT09IG51bGwpIHtcbiAgICAgICAgaXMgPSBuZXcgSW5wdXRTdHJlYW0oZGF0YSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICBjYWxsYmFjayhlcnIsIGlzKTtcbiAgICB9KTtcbiAgfSxcblxuICAvLyBTeW5jaHJvbm91c2x5IGNyZWF0ZXMgYW4gSW5wdXRTdHJlYW0gZ2l2ZW4gYSBwYXRoIHRvIGEgZmlsZVxuICAvLyBvbiBkaXNrIGFuZCB0aGUgZW5jb2Rpbmcgb2YgdGhlIGJ5dGVzIGluIHRoYXQgZmlsZSAoZGVmYXVsdHMgdG9cbiAgLy8gJ3V0ZjgnIGlmIGVuY29kaW5nIGlzIG51bGwpLlxuICBmcm9tUGF0aFN5bmM6IGZ1bmN0aW9uKHBhdGgsIGVuY29kaW5nKSB7XG4gICAgdmFyIGRhdGEgPSBmcy5yZWFkRmlsZVN5bmMocGF0aCwgZW5jb2RpbmcpO1xuICAgIHJldHVybiBuZXcgSW5wdXRTdHJlYW0oZGF0YSwgdHJ1ZSk7XG4gIH1cbn07XG5cbmV4cG9ydHMuQ2hhclN0cmVhbXMgPSBDaGFyU3RyZWFtcztcbiIsIi8vXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vL1xuXG4vL1xuLy8gVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBUb2tlbkZhY3Rvcnl9IGNyZWF0ZXNcbi8vIHtAbGluayBDb21tb25Ub2tlbn0gb2JqZWN0cy5cbi8vXG5cbnZhciBDb21tb25Ub2tlbiA9IHJlcXVpcmUoJy4vVG9rZW4nKS5Db21tb25Ub2tlbjtcblxuZnVuY3Rpb24gVG9rZW5GYWN0b3J5KCkge1xuXHRyZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gQ29tbW9uVG9rZW5GYWN0b3J5KGNvcHlUZXh0KSB7XG5cdFRva2VuRmFjdG9yeS5jYWxsKHRoaXMpO1xuICAgIC8vIEluZGljYXRlcyB3aGV0aGVyIHtAbGluayBDb21tb25Ub2tlbi8vc2V0VGV4dH0gc2hvdWxkIGJlIGNhbGxlZCBhZnRlclxuICAgIC8vIGNvbnN0cnVjdGluZyB0b2tlbnMgdG8gZXhwbGljaXRseSBzZXQgdGhlIHRleHQuIFRoaXMgaXMgdXNlZnVsIGZvciBjYXNlc1xuICAgIC8vIHdoZXJlIHRoZSBpbnB1dCBzdHJlYW0gbWlnaHQgbm90IGJlIGFibGUgdG8gcHJvdmlkZSBhcmJpdHJhcnkgc3Vic3RyaW5nc1xuICAgIC8vIG9mIHRleHQgZnJvbSB0aGUgaW5wdXQgYWZ0ZXIgdGhlIGxleGVyIGNyZWF0ZXMgYSB0b2tlbiAoZS5nLiB0aGVcbiAgICAvLyBpbXBsZW1lbnRhdGlvbiBvZiB7QGxpbmsgQ2hhclN0cmVhbS8vZ2V0VGV4dH0gaW5cbiAgICAvLyB7QGxpbmsgVW5idWZmZXJlZENoYXJTdHJlYW19IHRocm93cyBhblxuICAgIC8vIHtAbGluayBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbn0pLiBFeHBsaWNpdGx5IHNldHRpbmcgdGhlIHRva2VuIHRleHRcbiAgICAvLyBhbGxvd3Mge0BsaW5rIFRva2VuLy9nZXRUZXh0fSB0byBiZSBjYWxsZWQgYXQgYW55IHRpbWUgcmVnYXJkbGVzcyBvZiB0aGVcbiAgICAvLyBpbnB1dCBzdHJlYW0gaW1wbGVtZW50YXRpb24uXG4gICAgLy9cbiAgICAvLyA8cD5cbiAgICAvLyBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB7QGNvZGUgZmFsc2V9IHRvIGF2b2lkIHRoZSBwZXJmb3JtYW5jZSBhbmQgbWVtb3J5XG4gICAgLy8gb3ZlcmhlYWQgb2YgY29weWluZyB0ZXh0IGZvciBldmVyeSB0b2tlbiB1bmxlc3MgZXhwbGljaXRseSByZXF1ZXN0ZWQuPC9wPlxuICAgIC8vXG4gICAgdGhpcy5jb3B5VGV4dCA9IGNvcHlUZXh0PT09dW5kZWZpbmVkID8gZmFsc2UgOiBjb3B5VGV4dDtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkNvbW1vblRva2VuRmFjdG9yeS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRva2VuRmFjdG9yeS5wcm90b3R5cGUpO1xuQ29tbW9uVG9rZW5GYWN0b3J5LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbW1vblRva2VuRmFjdG9yeTtcblxuLy9cbi8vIFRoZSBkZWZhdWx0IHtAbGluayBDb21tb25Ub2tlbkZhY3Rvcnl9IGluc3RhbmNlLlxuLy9cbi8vIDxwPlxuLy8gVGhpcyB0b2tlbiBmYWN0b3J5IGRvZXMgbm90IGV4cGxpY2l0bHkgY29weSB0b2tlbiB0ZXh0IHdoZW4gY29uc3RydWN0aW5nXG4vLyB0b2tlbnMuPC9wPlxuLy9cbkNvbW1vblRva2VuRmFjdG9yeS5ERUZBVUxUID0gbmV3IENvbW1vblRva2VuRmFjdG9yeSgpO1xuXG5Db21tb25Ub2tlbkZhY3RvcnkucHJvdG90eXBlLmNyZWF0ZSA9IGZ1bmN0aW9uKHNvdXJjZSwgdHlwZSwgdGV4dCwgY2hhbm5lbCwgc3RhcnQsIHN0b3AsIGxpbmUsIGNvbHVtbikge1xuICAgIHZhciB0ID0gbmV3IENvbW1vblRva2VuKHNvdXJjZSwgdHlwZSwgY2hhbm5lbCwgc3RhcnQsIHN0b3ApO1xuICAgIHQubGluZSA9IGxpbmU7XG4gICAgdC5jb2x1bW4gPSBjb2x1bW47XG4gICAgaWYgKHRleHQgIT09bnVsbCkge1xuICAgICAgICB0LnRleHQgPSB0ZXh0O1xuICAgIH0gZWxzZSBpZiAodGhpcy5jb3B5VGV4dCAmJiBzb3VyY2VbMV0gIT09bnVsbCkge1xuICAgICAgICB0LnRleHQgPSBzb3VyY2VbMV0uZ2V0VGV4dChzdGFydCxzdG9wKTtcbiAgICB9XG4gICAgcmV0dXJuIHQ7XG59O1xuXG5Db21tb25Ub2tlbkZhY3RvcnkucHJvdG90eXBlLmNyZWF0ZVRoaW4gPSBmdW5jdGlvbih0eXBlLCB0ZXh0KSB7XG4gICAgdmFyIHQgPSBuZXcgQ29tbW9uVG9rZW4obnVsbCwgdHlwZSk7XG4gICAgdC50ZXh0ID0gdGV4dDtcbiAgICByZXR1cm4gdDtcbn07XG5cbmV4cG9ydHMuQ29tbW9uVG9rZW5GYWN0b3J5ID0gQ29tbW9uVG9rZW5GYWN0b3J5O1xuIiwiLy9cbi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbi8vL1xuXG4vL1xuLy8gVGhpcyBjbGFzcyBleHRlbmRzIHtAbGluayBCdWZmZXJlZFRva2VuU3RyZWFtfSB3aXRoIGZ1bmN0aW9uYWxpdHkgdG8gZmlsdGVyXG4vLyB0b2tlbiBzdHJlYW1zIHRvIHRva2VucyBvbiBhIHBhcnRpY3VsYXIgY2hhbm5lbCAodG9rZW5zIHdoZXJlXG4vLyB7QGxpbmsgVG9rZW4vL2dldENoYW5uZWx9IHJldHVybnMgYSBwYXJ0aWN1bGFyIHZhbHVlKS5cbi8vXG4vLyA8cD5cbi8vIFRoaXMgdG9rZW4gc3RyZWFtIHByb3ZpZGVzIGFjY2VzcyB0byBhbGwgdG9rZW5zIGJ5IGluZGV4IG9yIHdoZW4gY2FsbGluZ1xuLy8gbWV0aG9kcyBsaWtlIHtAbGluayAvL2dldFRleHR9LiBUaGUgY2hhbm5lbCBmaWx0ZXJpbmcgaXMgb25seSB1c2VkIGZvciBjb2RlXG4vLyBhY2Nlc3NpbmcgdG9rZW5zIHZpYSB0aGUgbG9va2FoZWFkIG1ldGhvZHMge0BsaW5rIC8vTEF9LCB7QGxpbmsgLy9MVH0sIGFuZFxuLy8ge0BsaW5rIC8vTEJ9LjwvcD5cbi8vXG4vLyA8cD5cbi8vIEJ5IGRlZmF1bHQsIHRva2VucyBhcmUgcGxhY2VkIG9uIHRoZSBkZWZhdWx0IGNoYW5uZWxcbi8vICh7QGxpbmsgVG9rZW4vL0RFRkFVTFRfQ0hBTk5FTH0pLCBidXQgbWF5IGJlIHJlYXNzaWduZWQgYnkgdXNpbmcgdGhlXG4vLyB7QGNvZGUgLT5jaGFubmVsKEhJRERFTil9IGxleGVyIGNvbW1hbmQsIG9yIGJ5IHVzaW5nIGFuIGVtYmVkZGVkIGFjdGlvbiB0b1xuLy8gY2FsbCB7QGxpbmsgTGV4ZXIvL3NldENoYW5uZWx9LlxuLy8gPC9wPlxuLy9cbi8vIDxwPlxuLy8gTm90ZTogbGV4ZXIgcnVsZXMgd2hpY2ggdXNlIHRoZSB7QGNvZGUgLT5za2lwfSBsZXhlciBjb21tYW5kIG9yIGNhbGxcbi8vIHtAbGluayBMZXhlci8vc2tpcH0gZG8gbm90IHByb2R1Y2UgdG9rZW5zIGF0IGFsbCwgc28gaW5wdXQgdGV4dCBtYXRjaGVkIGJ5XG4vLyBzdWNoIGEgcnVsZSB3aWxsIG5vdCBiZSBhdmFpbGFibGUgYXMgcGFydCBvZiB0aGUgdG9rZW4gc3RyZWFtLCByZWdhcmRsZXNzIG9mXG4vLyBjaGFubmVsLjwvcD5cbi8vL1xuXG52YXIgVG9rZW4gPSByZXF1aXJlKCcuL1Rva2VuJykuVG9rZW47XG52YXIgQnVmZmVyZWRUb2tlblN0cmVhbSA9IHJlcXVpcmUoJy4vQnVmZmVyZWRUb2tlblN0cmVhbScpLkJ1ZmZlcmVkVG9rZW5TdHJlYW07XG5cbmZ1bmN0aW9uIENvbW1vblRva2VuU3RyZWFtKGxleGVyLCBjaGFubmVsKSB7XG5cdEJ1ZmZlcmVkVG9rZW5TdHJlYW0uY2FsbCh0aGlzLCBsZXhlcik7XG4gICAgdGhpcy5jaGFubmVsID0gY2hhbm5lbD09PXVuZGVmaW5lZCA/IFRva2VuLkRFRkFVTFRfQ0hBTk5FTCA6IGNoYW5uZWw7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkNvbW1vblRva2VuU3RyZWFtLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUpO1xuQ29tbW9uVG9rZW5TdHJlYW0ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29tbW9uVG9rZW5TdHJlYW07XG5cbkNvbW1vblRva2VuU3RyZWFtLnByb3RvdHlwZS5hZGp1c3RTZWVrSW5kZXggPSBmdW5jdGlvbihpKSB7XG4gICAgcmV0dXJuIHRoaXMubmV4dFRva2VuT25DaGFubmVsKGksIHRoaXMuY2hhbm5lbCk7XG59O1xuXG5Db21tb25Ub2tlblN0cmVhbS5wcm90b3R5cGUuTEIgPSBmdW5jdGlvbihrKSB7XG4gICAgaWYgKGs9PT0wIHx8IHRoaXMuaW5kZXgtazwwKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YXIgaSA9IHRoaXMuaW5kZXg7XG4gICAgdmFyIG4gPSAxO1xuICAgIC8vIGZpbmQgayBnb29kIHRva2VucyBsb29raW5nIGJhY2t3YXJkc1xuICAgIHdoaWxlIChuIDw9IGspIHtcbiAgICAgICAgLy8gc2tpcCBvZmYtY2hhbm5lbCB0b2tlbnNcbiAgICAgICAgaSA9IHRoaXMucHJldmlvdXNUb2tlbk9uQ2hhbm5lbChpIC0gMSwgdGhpcy5jaGFubmVsKTtcbiAgICAgICAgbiArPSAxO1xuICAgIH1cbiAgICBpZiAoaSA8IDApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRva2Vuc1tpXTtcbn07XG5cbkNvbW1vblRva2VuU3RyZWFtLnByb3RvdHlwZS5MVCA9IGZ1bmN0aW9uKGspIHtcbiAgICB0aGlzLmxhenlJbml0KCk7XG4gICAgaWYgKGsgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChrIDwgMCkge1xuICAgICAgICByZXR1cm4gdGhpcy5MQigtayk7XG4gICAgfVxuICAgIHZhciBpID0gdGhpcy5pbmRleDtcbiAgICB2YXIgbiA9IDE7IC8vIHdlIGtub3cgdG9rZW5zW3Bvc10gaXMgYSBnb29kIG9uZVxuICAgIC8vIGZpbmQgayBnb29kIHRva2Vuc1xuICAgIHdoaWxlIChuIDwgaykge1xuICAgICAgICAvLyBza2lwIG9mZi1jaGFubmVsIHRva2VucywgYnV0IG1ha2Ugc3VyZSB0byBub3QgbG9vayBwYXN0IEVPRlxuICAgICAgICBpZiAodGhpcy5zeW5jKGkgKyAxKSkge1xuICAgICAgICAgICAgaSA9IHRoaXMubmV4dFRva2VuT25DaGFubmVsKGkgKyAxLCB0aGlzLmNoYW5uZWwpO1xuICAgICAgICB9XG4gICAgICAgIG4gKz0gMTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudG9rZW5zW2ldO1xufTtcblxuLy8gQ291bnQgRU9GIGp1c3Qgb25jZS4vLy9cbkNvbW1vblRva2VuU3RyZWFtLnByb3RvdHlwZS5nZXROdW1iZXJPZk9uQ2hhbm5lbFRva2VucyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBuID0gMDtcbiAgICB0aGlzLmZpbGwoKTtcbiAgICBmb3IgKHZhciBpID0wOyBpPCB0aGlzLnRva2Vucy5sZW5ndGg7aSsrKSB7XG4gICAgICAgIHZhciB0ID0gdGhpcy50b2tlbnNbaV07XG4gICAgICAgIGlmKCB0LmNoYW5uZWw9PT10aGlzLmNoYW5uZWwpIHtcbiAgICAgICAgICAgIG4gKz0gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiggdC50eXBlPT09VG9rZW4uRU9GKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbjtcbn07XG5cbmV4cG9ydHMuQ29tbW9uVG9rZW5TdHJlYW0gPSBDb21tb25Ub2tlblN0cmVhbTsiLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy9cblxuLy9cbi8vICBUaGlzIGlzIGFuIElucHV0U3RyZWFtIHRoYXQgaXMgbG9hZGVkIGZyb20gYSBmaWxlIGFsbCBhdCBvbmNlXG4vLyAgd2hlbiB5b3UgY29uc3RydWN0IHRoZSBvYmplY3QuXG4vL1xudmFyIElucHV0U3RyZWFtID0gcmVxdWlyZSgnLi9JbnB1dFN0cmVhbScpLklucHV0U3RyZWFtO1xudmFyIGlzTm9kZUpzID0gdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGltcG9ydFNjcmlwdHMgPT09ICd1bmRlZmluZWQnO1xudmFyIGZzID0gaXNOb2RlSnMgPyByZXF1aXJlKFwiZnNcIikgOiBudWxsO1xuXG5mdW5jdGlvbiBGaWxlU3RyZWFtKGZpbGVOYW1lLCBkZWNvZGVUb1VuaWNvZGVDb2RlUG9pbnRzKSB7XG5cdHZhciBkYXRhID0gZnMucmVhZEZpbGVTeW5jKGZpbGVOYW1lLCBcInV0ZjhcIik7XG5cdElucHV0U3RyZWFtLmNhbGwodGhpcywgZGF0YSwgZGVjb2RlVG9Vbmljb2RlQ29kZVBvaW50cyk7XG5cdHRoaXMuZmlsZU5hbWUgPSBmaWxlTmFtZTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkZpbGVTdHJlYW0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShJbnB1dFN0cmVhbS5wcm90b3R5cGUpO1xuRmlsZVN0cmVhbS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGaWxlU3RyZWFtO1xuXG5leHBvcnRzLkZpbGVTdHJlYW0gPSBGaWxlU3RyZWFtO1xuIiwiLy9cbi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbi8vXG5cbnZhciBUb2tlbiA9IHJlcXVpcmUoJy4vVG9rZW4nKS5Ub2tlbjtcbnJlcXVpcmUoJy4vcG9seWZpbGxzL2NvZGVwb2ludGF0Jyk7XG5yZXF1aXJlKCcuL3BvbHlmaWxscy9mcm9tY29kZXBvaW50Jyk7XG5cbi8vIFZhY3V1bSBhbGwgaW5wdXQgZnJvbSBhIHN0cmluZyBhbmQgdGhlbiB0cmVhdCBpdCBsaWtlIGEgYnVmZmVyLlxuXG5mdW5jdGlvbiBfbG9hZFN0cmluZyhzdHJlYW0pIHtcblx0c3RyZWFtLl9pbmRleCA9IDA7XG5cdHN0cmVhbS5kYXRhID0gW107XG5cdGlmIChzdHJlYW0uZGVjb2RlVG9Vbmljb2RlQ29kZVBvaW50cykge1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3RyZWFtLnN0cmRhdGEubGVuZ3RoOyApIHtcblx0XHRcdHZhciBjb2RlUG9pbnQgPSBzdHJlYW0uc3RyZGF0YS5jb2RlUG9pbnRBdChpKTtcblx0XHRcdHN0cmVhbS5kYXRhLnB1c2goY29kZVBvaW50KTtcblx0XHRcdGkgKz0gY29kZVBvaW50IDw9IDB4RkZGRiA/IDEgOiAyO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN0cmVhbS5zdHJkYXRhLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgY29kZVVuaXQgPSBzdHJlYW0uc3RyZGF0YS5jaGFyQ29kZUF0KGkpO1xuXHRcdFx0c3RyZWFtLmRhdGEucHVzaChjb2RlVW5pdCk7XG5cdFx0fVxuXHR9XG5cdHN0cmVhbS5fc2l6ZSA9IHN0cmVhbS5kYXRhLmxlbmd0aDtcbn1cblxuLy8gSWYgZGVjb2RlVG9Vbmljb2RlQ29kZVBvaW50cyBpcyB0cnVlLCB0aGUgaW5wdXQgaXMgdHJlYXRlZFxuLy8gYXMgYSBzZXJpZXMgb2YgVW5pY29kZSBjb2RlIHBvaW50cy5cbi8vXG4vLyBPdGhlcndpc2UsIHRoZSBpbnB1dCBpcyB0cmVhdGVkIGFzIGEgc2VyaWVzIG9mIDE2LWJpdCBVVEYtMTYgY29kZVxuLy8gdW5pdHMuXG5mdW5jdGlvbiBJbnB1dFN0cmVhbShkYXRhLCBkZWNvZGVUb1VuaWNvZGVDb2RlUG9pbnRzKSB7XG5cdHRoaXMubmFtZSA9IFwiPGVtcHR5PlwiO1xuXHR0aGlzLnN0cmRhdGEgPSBkYXRhO1xuXHR0aGlzLmRlY29kZVRvVW5pY29kZUNvZGVQb2ludHMgPSBkZWNvZGVUb1VuaWNvZGVDb2RlUG9pbnRzIHx8IGZhbHNlO1xuXHRfbG9hZFN0cmluZyh0aGlzKTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbnB1dFN0cmVhbS5wcm90b3R5cGUsIFwiaW5kZXhcIiwge1xuXHRnZXQgOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5faW5kZXg7XG5cdH1cbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSW5wdXRTdHJlYW0ucHJvdG90eXBlLCBcInNpemVcIiwge1xuXHRnZXQgOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5fc2l6ZTtcblx0fVxufSk7XG5cbi8vIFJlc2V0IHRoZSBzdHJlYW0gc28gdGhhdCBpdCdzIGluIHRoZSBzYW1lIHN0YXRlIGl0IHdhc1xuLy8gd2hlbiB0aGUgb2JqZWN0IHdhcyBjcmVhdGVkICpleGNlcHQqIHRoZSBkYXRhIGFycmF5IGlzIG5vdFxuLy8gdG91Y2hlZC5cbi8vXG5JbnB1dFN0cmVhbS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbigpIHtcblx0dGhpcy5faW5kZXggPSAwO1xufTtcblxuSW5wdXRTdHJlYW0ucHJvdG90eXBlLmNvbnN1bWUgPSBmdW5jdGlvbigpIHtcblx0aWYgKHRoaXMuX2luZGV4ID49IHRoaXMuX3NpemUpIHtcblx0XHQvLyBhc3NlcnQgdGhpcy5MQSgxKSA9PSBUb2tlbi5FT0Zcblx0XHR0aHJvdyAoXCJjYW5ub3QgY29uc3VtZSBFT0ZcIik7XG5cdH1cblx0dGhpcy5faW5kZXggKz0gMTtcbn07XG5cbklucHV0U3RyZWFtLnByb3RvdHlwZS5MQSA9IGZ1bmN0aW9uKG9mZnNldCkge1xuXHRpZiAob2Zmc2V0ID09PSAwKSB7XG5cdFx0cmV0dXJuIDA7IC8vIHVuZGVmaW5lZFxuXHR9XG5cdGlmIChvZmZzZXQgPCAwKSB7XG5cdFx0b2Zmc2V0ICs9IDE7IC8vIGUuZy4sIHRyYW5zbGF0ZSBMQSgtMSkgdG8gdXNlIG9mZnNldD0wXG5cdH1cblx0dmFyIHBvcyA9IHRoaXMuX2luZGV4ICsgb2Zmc2V0IC0gMTtcblx0aWYgKHBvcyA8IDAgfHwgcG9zID49IHRoaXMuX3NpemUpIHsgLy8gaW52YWxpZFxuXHRcdHJldHVybiBUb2tlbi5FT0Y7XG5cdH1cblx0cmV0dXJuIHRoaXMuZGF0YVtwb3NdO1xufTtcblxuSW5wdXRTdHJlYW0ucHJvdG90eXBlLkxUID0gZnVuY3Rpb24ob2Zmc2V0KSB7XG5cdHJldHVybiB0aGlzLkxBKG9mZnNldCk7XG59O1xuXG4vLyBtYXJrL3JlbGVhc2UgZG8gbm90aGluZzsgd2UgaGF2ZSBlbnRpcmUgYnVmZmVyXG5JbnB1dFN0cmVhbS5wcm90b3R5cGUubWFyayA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gLTE7XG59O1xuXG5JbnB1dFN0cmVhbS5wcm90b3R5cGUucmVsZWFzZSA9IGZ1bmN0aW9uKG1hcmtlcikge1xufTtcblxuLy8gY29uc3VtZSgpIGFoZWFkIHVudGlsIHA9PV9pbmRleDsgY2FuJ3QganVzdCBzZXQgcD1faW5kZXggYXMgd2UgbXVzdFxuLy8gdXBkYXRlIGxpbmUgYW5kIGNvbHVtbi4gSWYgd2Ugc2VlayBiYWNrd2FyZHMsIGp1c3Qgc2V0IHBcbi8vXG5JbnB1dFN0cmVhbS5wcm90b3R5cGUuc2VlayA9IGZ1bmN0aW9uKF9pbmRleCkge1xuXHRpZiAoX2luZGV4IDw9IHRoaXMuX2luZGV4KSB7XG5cdFx0dGhpcy5faW5kZXggPSBfaW5kZXg7IC8vIGp1c3QganVtcDsgZG9uJ3QgdXBkYXRlIHN0cmVhbSBzdGF0ZSAobGluZSxcblx0XHRcdFx0XHRcdFx0XHQvLyAuLi4pXG5cdFx0cmV0dXJuO1xuXHR9XG5cdC8vIHNlZWsgZm9yd2FyZFxuXHR0aGlzLl9pbmRleCA9IE1hdGgubWluKF9pbmRleCwgdGhpcy5fc2l6ZSk7XG59O1xuXG5JbnB1dFN0cmVhbS5wcm90b3R5cGUuZ2V0VGV4dCA9IGZ1bmN0aW9uKHN0YXJ0LCBzdG9wKSB7XG5cdGlmIChzdG9wID49IHRoaXMuX3NpemUpIHtcblx0XHRzdG9wID0gdGhpcy5fc2l6ZSAtIDE7XG5cdH1cblx0aWYgKHN0YXJ0ID49IHRoaXMuX3NpemUpIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fSBlbHNlIHtcblx0XHRpZiAodGhpcy5kZWNvZGVUb1VuaWNvZGVDb2RlUG9pbnRzKSB7XG5cdFx0XHR2YXIgcmVzdWx0ID0gXCJcIjtcblx0XHRcdGZvciAodmFyIGkgPSBzdGFydDsgaSA8PSBzdG9wOyBpKyspIHtcblx0XHRcdFx0cmVzdWx0ICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KHRoaXMuZGF0YVtpXSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5zdHJkYXRhLnNsaWNlKHN0YXJ0LCBzdG9wICsgMSk7XG5cdFx0fVxuXHR9XG59O1xuXG5JbnB1dFN0cmVhbS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuc3RyZGF0YTtcbn07XG5cbmV4cG9ydHMuSW5wdXRTdHJlYW0gPSBJbnB1dFN0cmVhbTtcbiIsIi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cblxuLypqc2xpbnQgc21hcnR0YWJzOnRydWUgKi9cblxudmFyIFRva2VuID0gcmVxdWlyZSgnLi9Ub2tlbicpLlRva2VuO1xuXG4vKiBzdG9wIGlzIG5vdCBpbmNsdWRlZCEgKi9cbmZ1bmN0aW9uIEludGVydmFsKHN0YXJ0LCBzdG9wKSB7XG5cdHRoaXMuc3RhcnQgPSBzdGFydDtcblx0dGhpcy5zdG9wID0gc3RvcDtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkludGVydmFsLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uKGl0ZW0pIHtcblx0cmV0dXJuIGl0ZW0gPj0gdGhpcy5zdGFydCAmJiBpdGVtIDwgdGhpcy5zdG9wO1xufTtcblxuSW50ZXJ2YWwucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdGlmKHRoaXMuc3RhcnQ9PT10aGlzLnN0b3AtMSkge1xuXHRcdHJldHVybiB0aGlzLnN0YXJ0LnRvU3RyaW5nKCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHRoaXMuc3RhcnQudG9TdHJpbmcoKSArIFwiLi5cIiArICh0aGlzLnN0b3AtMSkudG9TdHJpbmcoKTtcblx0fVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSW50ZXJ2YWwucHJvdG90eXBlLCBcImxlbmd0aFwiLCB7XG5cdGdldCA6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnN0b3AgLSB0aGlzLnN0YXJ0O1xuXHR9XG59KTtcblxuZnVuY3Rpb24gSW50ZXJ2YWxTZXQoKSB7XG5cdHRoaXMuaW50ZXJ2YWxzID0gbnVsbDtcblx0dGhpcy5yZWFkT25seSA9IGZhbHNlO1xufVxuXG5JbnRlcnZhbFNldC5wcm90b3R5cGUuZmlyc3QgPSBmdW5jdGlvbih2KSB7XG5cdGlmICh0aGlzLmludGVydmFscyA9PT0gbnVsbCB8fCB0aGlzLmludGVydmFscy5sZW5ndGg9PT0wKSB7XG5cdFx0cmV0dXJuIFRva2VuLklOVkFMSURfVFlQRTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdGhpcy5pbnRlcnZhbHNbMF0uc3RhcnQ7XG5cdH1cbn07XG5cbkludGVydmFsU2V0LnByb3RvdHlwZS5hZGRPbmUgPSBmdW5jdGlvbih2KSB7XG5cdHRoaXMuYWRkSW50ZXJ2YWwobmV3IEludGVydmFsKHYsIHYgKyAxKSk7XG59O1xuXG5JbnRlcnZhbFNldC5wcm90b3R5cGUuYWRkUmFuZ2UgPSBmdW5jdGlvbihsLCBoKSB7XG5cdHRoaXMuYWRkSW50ZXJ2YWwobmV3IEludGVydmFsKGwsIGggKyAxKSk7XG59O1xuXG5JbnRlcnZhbFNldC5wcm90b3R5cGUuYWRkSW50ZXJ2YWwgPSBmdW5jdGlvbih2KSB7XG5cdGlmICh0aGlzLmludGVydmFscyA9PT0gbnVsbCkge1xuXHRcdHRoaXMuaW50ZXJ2YWxzID0gW107XG5cdFx0dGhpcy5pbnRlcnZhbHMucHVzaCh2KTtcblx0fSBlbHNlIHtcblx0XHQvLyBmaW5kIGluc2VydCBwb3Ncblx0XHRmb3IgKHZhciBrID0gMDsgayA8IHRoaXMuaW50ZXJ2YWxzLmxlbmd0aDsgaysrKSB7XG5cdFx0XHR2YXIgaSA9IHRoaXMuaW50ZXJ2YWxzW2tdO1xuXHRcdFx0Ly8gZGlzdGluY3QgcmFuZ2UgLT4gaW5zZXJ0XG5cdFx0XHRpZiAodi5zdG9wIDwgaS5zdGFydCkge1xuXHRcdFx0XHR0aGlzLmludGVydmFscy5zcGxpY2UoaywgMCwgdik7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdC8vIGNvbnRpZ3VvdXMgcmFuZ2UgLT4gYWRqdXN0XG5cdFx0XHRlbHNlIGlmICh2LnN0b3AgPT09IGkuc3RhcnQpIHtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbHNba10uc3RhcnQgPSB2LnN0YXJ0O1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHQvLyBvdmVybGFwcGluZyByYW5nZSAtPiBhZGp1c3QgYW5kIHJlZHVjZVxuXHRcdFx0ZWxzZSBpZiAodi5zdGFydCA8PSBpLnN0b3ApIHtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbHNba10gPSBuZXcgSW50ZXJ2YWwoTWF0aC5taW4oaS5zdGFydCwgdi5zdGFydCksIE1hdGgubWF4KGkuc3RvcCwgdi5zdG9wKSk7XG5cdFx0XHRcdHRoaXMucmVkdWNlKGspO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIGdyZWF0ZXIgdGhhbiBhbnkgZXhpc3Rpbmdcblx0XHR0aGlzLmludGVydmFscy5wdXNoKHYpO1xuXHR9XG59O1xuXG5JbnRlcnZhbFNldC5wcm90b3R5cGUuYWRkU2V0ID0gZnVuY3Rpb24ob3RoZXIpIHtcblx0aWYgKG90aGVyLmludGVydmFscyAhPT0gbnVsbCkge1xuXHRcdGZvciAodmFyIGsgPSAwOyBrIDwgb3RoZXIuaW50ZXJ2YWxzLmxlbmd0aDsgaysrKSB7XG5cdFx0XHR2YXIgaSA9IG90aGVyLmludGVydmFsc1trXTtcblx0XHRcdHRoaXMuYWRkSW50ZXJ2YWwobmV3IEludGVydmFsKGkuc3RhcnQsIGkuc3RvcCkpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdGhpcztcbn07XG5cbkludGVydmFsU2V0LnByb3RvdHlwZS5yZWR1Y2UgPSBmdW5jdGlvbihrKSB7XG5cdC8vIG9ubHkgbmVlZCB0byByZWR1Y2UgaWYgayBpcyBub3QgdGhlIGxhc3Rcblx0aWYgKGsgPCB0aGlzLmludGVydmFsc2xlbmd0aCAtIDEpIHtcblx0XHR2YXIgbCA9IHRoaXMuaW50ZXJ2YWxzW2tdO1xuXHRcdHZhciByID0gdGhpcy5pbnRlcnZhbHNbayArIDFdO1xuXHRcdC8vIGlmIHIgY29udGFpbmVkIGluIGxcblx0XHRpZiAobC5zdG9wID49IHIuc3RvcCkge1xuXHRcdFx0dGhpcy5pbnRlcnZhbHMucG9wKGsgKyAxKTtcblx0XHRcdHRoaXMucmVkdWNlKGspO1xuXHRcdH0gZWxzZSBpZiAobC5zdG9wID49IHIuc3RhcnQpIHtcblx0XHRcdHRoaXMuaW50ZXJ2YWxzW2tdID0gbmV3IEludGVydmFsKGwuc3RhcnQsIHIuc3RvcCk7XG5cdFx0XHR0aGlzLmludGVydmFscy5wb3AoayArIDEpO1xuXHRcdH1cblx0fVxufTtcblxuSW50ZXJ2YWxTZXQucHJvdG90eXBlLmNvbXBsZW1lbnQgPSBmdW5jdGlvbihzdGFydCwgc3RvcCkge1xuICAgIHZhciByZXN1bHQgPSBuZXcgSW50ZXJ2YWxTZXQoKTtcbiAgICByZXN1bHQuYWRkSW50ZXJ2YWwobmV3IEludGVydmFsKHN0YXJ0LHN0b3ArMSkpO1xuICAgIGZvcih2YXIgaT0wOyBpPHRoaXMuaW50ZXJ2YWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdC5yZW1vdmVSYW5nZSh0aGlzLmludGVydmFsc1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG5JbnRlcnZhbFNldC5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbihpdGVtKSB7XG5cdGlmICh0aGlzLmludGVydmFscyA9PT0gbnVsbCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBlbHNlIHtcblx0XHRmb3IgKHZhciBrID0gMDsgayA8IHRoaXMuaW50ZXJ2YWxzLmxlbmd0aDsgaysrKSB7XG5cdFx0XHRpZih0aGlzLmludGVydmFsc1trXS5jb250YWlucyhpdGVtKSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSW50ZXJ2YWxTZXQucHJvdG90eXBlLCBcImxlbmd0aFwiLCB7XG5cdGdldCA6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBsZW4gPSAwO1xuXHRcdHRoaXMuaW50ZXJ2YWxzLm1hcChmdW5jdGlvbihpKSB7bGVuICs9IGkubGVuZ3RoO30pO1xuXHRcdHJldHVybiBsZW47XG5cdH1cbn0pO1xuXG5JbnRlcnZhbFNldC5wcm90b3R5cGUucmVtb3ZlUmFuZ2UgPSBmdW5jdGlvbih2KSB7XG4gICAgaWYodi5zdGFydD09PXYuc3RvcC0xKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlT25lKHYuc3RhcnQpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pbnRlcnZhbHMhPT1udWxsKSB7XG4gICAgICAgIHZhciBrID0gMDtcbiAgICAgICAgZm9yKHZhciBuPTA7IG48dGhpcy5pbnRlcnZhbHMubGVuZ3RoOyBuKyspIHtcbiAgICAgICAgICAgIHZhciBpID0gdGhpcy5pbnRlcnZhbHNba107XG4gICAgICAgICAgICAvLyBpbnRlcnZhbHMgYXJlIG9yZGVyZWRcbiAgICAgICAgICAgIGlmICh2LnN0b3A8PWkuc3RhcnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBjaGVjayBmb3IgaW5jbHVkaW5nIHJhbmdlLCBzcGxpdCBpdFxuICAgICAgICAgICAgZWxzZSBpZih2LnN0YXJ0Pmkuc3RhcnQgJiYgdi5zdG9wPGkuc3RvcCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW50ZXJ2YWxzW2tdID0gbmV3IEludGVydmFsKGkuc3RhcnQsIHYuc3RhcnQpO1xuICAgICAgICAgICAgICAgIHZhciB4ID0gbmV3IEludGVydmFsKHYuc3RvcCwgaS5zdG9wKTtcbiAgICAgICAgICAgICAgICB0aGlzLmludGVydmFscy5zcGxpY2UoaywgMCwgeCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY2hlY2sgZm9yIGluY2x1ZGVkIHJhbmdlLCByZW1vdmUgaXRcbiAgICAgICAgICAgIGVsc2UgaWYodi5zdGFydDw9aS5zdGFydCAmJiB2LnN0b3A+PWkuc3RvcCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW50ZXJ2YWxzLnNwbGljZShrLCAxKTtcbiAgICAgICAgICAgICAgICBrID0gayAtIDE7IC8vIG5lZWQgYW5vdGhlciBwYXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBjaGVjayBmb3IgbG93ZXIgYm91bmRhcnlcbiAgICAgICAgICAgIGVsc2UgaWYodi5zdGFydDxpLnN0b3ApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmludGVydmFsc1trXSA9IG5ldyBJbnRlcnZhbChpLnN0YXJ0LCB2LnN0YXJ0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNoZWNrIGZvciB1cHBlciBib3VuZGFyeVxuICAgICAgICAgICAgZWxzZSBpZih2LnN0b3A8aS5zdG9wKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnRlcnZhbHNba10gPSBuZXcgSW50ZXJ2YWwodi5zdG9wLCBpLnN0b3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgayArPSAxO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuSW50ZXJ2YWxTZXQucHJvdG90eXBlLnJlbW92ZU9uZSA9IGZ1bmN0aW9uKHYpIHtcblx0aWYgKHRoaXMuaW50ZXJ2YWxzICE9PSBudWxsKSB7XG5cdFx0Zm9yICh2YXIgayA9IDA7IGsgPCB0aGlzLmludGVydmFscy5sZW5ndGg7IGsrKykge1xuXHRcdFx0dmFyIGkgPSB0aGlzLmludGVydmFsc1trXTtcblx0XHRcdC8vIGludGVydmFscyBpcyBvcmRlcmVkXG5cdFx0XHRpZiAodiA8IGkuc3RhcnQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Ly8gY2hlY2sgZm9yIHNpbmdsZSB2YWx1ZSByYW5nZVxuXHRcdFx0ZWxzZSBpZiAodiA9PT0gaS5zdGFydCAmJiB2ID09PSBpLnN0b3AgLSAxKSB7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWxzLnNwbGljZShrLCAxKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Ly8gY2hlY2sgZm9yIGxvd2VyIGJvdW5kYXJ5XG5cdFx0XHRlbHNlIGlmICh2ID09PSBpLnN0YXJ0KSB7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWxzW2tdID0gbmV3IEludGVydmFsKGkuc3RhcnQgKyAxLCBpLnN0b3ApO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHQvLyBjaGVjayBmb3IgdXBwZXIgYm91bmRhcnlcblx0XHRcdGVsc2UgaWYgKHYgPT09IGkuc3RvcCAtIDEpIHtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbHNba10gPSBuZXcgSW50ZXJ2YWwoaS5zdGFydCwgaS5zdG9wIC0gMSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdC8vIHNwbGl0IGV4aXN0aW5nIHJhbmdlXG5cdFx0XHRlbHNlIGlmICh2IDwgaS5zdG9wIC0gMSkge1xuXHRcdFx0XHR2YXIgeCA9IG5ldyBJbnRlcnZhbChpLnN0YXJ0LCB2KTtcblx0XHRcdFx0aS5zdGFydCA9IHYgKyAxO1xuXHRcdFx0XHR0aGlzLmludGVydmFscy5zcGxpY2UoaywgMCwgeCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbkludGVydmFsU2V0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKGxpdGVyYWxOYW1lcywgc3ltYm9saWNOYW1lcywgZWxlbXNBcmVDaGFyKSB7XG5cdGxpdGVyYWxOYW1lcyA9IGxpdGVyYWxOYW1lcyB8fCBudWxsO1xuXHRzeW1ib2xpY05hbWVzID0gc3ltYm9saWNOYW1lcyB8fCBudWxsO1xuXHRlbGVtc0FyZUNoYXIgPSBlbGVtc0FyZUNoYXIgfHwgZmFsc2U7XG5cdGlmICh0aGlzLmludGVydmFscyA9PT0gbnVsbCkge1xuXHRcdHJldHVybiBcInt9XCI7XG5cdH0gZWxzZSBpZihsaXRlcmFsTmFtZXMhPT1udWxsIHx8IHN5bWJvbGljTmFtZXMhPT1udWxsKSB7XG5cdFx0cmV0dXJuIHRoaXMudG9Ub2tlblN0cmluZyhsaXRlcmFsTmFtZXMsIHN5bWJvbGljTmFtZXMpO1xuXHR9IGVsc2UgaWYoZWxlbXNBcmVDaGFyKSB7XG5cdFx0cmV0dXJuIHRoaXMudG9DaGFyU3RyaW5nKCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHRoaXMudG9JbmRleFN0cmluZygpO1xuXHR9XG59O1xuXG5JbnRlcnZhbFNldC5wcm90b3R5cGUudG9DaGFyU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdHZhciBuYW1lcyA9IFtdO1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaW50ZXJ2YWxzLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIHYgPSB0aGlzLmludGVydmFsc1tpXTtcblx0XHRpZih2LnN0b3A9PT12LnN0YXJ0KzEpIHtcblx0XHRcdGlmICggdi5zdGFydD09PVRva2VuLkVPRiApIHtcblx0XHRcdFx0bmFtZXMucHVzaChcIjxFT0Y+XCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bmFtZXMucHVzaChcIidcIiArIFN0cmluZy5mcm9tQ2hhckNvZGUodi5zdGFydCkgKyBcIidcIik7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdG5hbWVzLnB1c2goXCInXCIgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKHYuc3RhcnQpICsgXCInLi4nXCIgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKHYuc3RvcC0xKSArIFwiJ1wiKTtcblx0XHR9XG5cdH1cblx0aWYgKG5hbWVzLmxlbmd0aCA+IDEpIHtcblx0XHRyZXR1cm4gXCJ7XCIgKyBuYW1lcy5qb2luKFwiLCBcIikgKyBcIn1cIjtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gbmFtZXNbMF07XG5cdH1cbn07XG5cblxuSW50ZXJ2YWxTZXQucHJvdG90eXBlLnRvSW5kZXhTdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0dmFyIG5hbWVzID0gW107XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pbnRlcnZhbHMubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgdiA9IHRoaXMuaW50ZXJ2YWxzW2ldO1xuXHRcdGlmKHYuc3RvcD09PXYuc3RhcnQrMSkge1xuXHRcdFx0aWYgKCB2LnN0YXJ0PT09VG9rZW4uRU9GICkge1xuXHRcdFx0XHRuYW1lcy5wdXNoKFwiPEVPRj5cIik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRuYW1lcy5wdXNoKHYuc3RhcnQudG9TdHJpbmcoKSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdG5hbWVzLnB1c2godi5zdGFydC50b1N0cmluZygpICsgXCIuLlwiICsgKHYuc3RvcC0xKS50b1N0cmluZygpKTtcblx0XHR9XG5cdH1cblx0aWYgKG5hbWVzLmxlbmd0aCA+IDEpIHtcblx0XHRyZXR1cm4gXCJ7XCIgKyBuYW1lcy5qb2luKFwiLCBcIikgKyBcIn1cIjtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gbmFtZXNbMF07XG5cdH1cbn07XG5cblxuSW50ZXJ2YWxTZXQucHJvdG90eXBlLnRvVG9rZW5TdHJpbmcgPSBmdW5jdGlvbihsaXRlcmFsTmFtZXMsIHN5bWJvbGljTmFtZXMpIHtcblx0dmFyIG5hbWVzID0gW107XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pbnRlcnZhbHMubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgdiA9IHRoaXMuaW50ZXJ2YWxzW2ldO1xuXHRcdGZvciAodmFyIGogPSB2LnN0YXJ0OyBqIDwgdi5zdG9wOyBqKyspIHtcblx0XHRcdG5hbWVzLnB1c2godGhpcy5lbGVtZW50TmFtZShsaXRlcmFsTmFtZXMsIHN5bWJvbGljTmFtZXMsIGopKTtcblx0XHR9XG5cdH1cblx0aWYgKG5hbWVzLmxlbmd0aCA+IDEpIHtcblx0XHRyZXR1cm4gXCJ7XCIgKyBuYW1lcy5qb2luKFwiLCBcIikgKyBcIn1cIjtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gbmFtZXNbMF07XG5cdH1cbn07XG5cbkludGVydmFsU2V0LnByb3RvdHlwZS5lbGVtZW50TmFtZSA9IGZ1bmN0aW9uKGxpdGVyYWxOYW1lcywgc3ltYm9saWNOYW1lcywgYSkge1xuXHRpZiAoYSA9PT0gVG9rZW4uRU9GKSB7XG5cdFx0cmV0dXJuIFwiPEVPRj5cIjtcblx0fSBlbHNlIGlmIChhID09PSBUb2tlbi5FUFNJTE9OKSB7XG5cdFx0cmV0dXJuIFwiPEVQU0lMT04+XCI7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGxpdGVyYWxOYW1lc1thXSB8fCBzeW1ib2xpY05hbWVzW2FdO1xuXHR9XG59O1xuXG5leHBvcnRzLkludGVydmFsID0gSW50ZXJ2YWw7XG5leHBvcnRzLkludGVydmFsU2V0ID0gSW50ZXJ2YWxTZXQ7XG4iLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy8vXG5cbnZhciBTZXQgPSByZXF1aXJlKCcuL1V0aWxzJykuU2V0O1xudmFyIEJpdFNldCA9IHJlcXVpcmUoJy4vVXRpbHMnKS5CaXRTZXQ7XG52YXIgVG9rZW4gPSByZXF1aXJlKCcuL1Rva2VuJykuVG9rZW47XG52YXIgQVROQ29uZmlnID0gcmVxdWlyZSgnLi9hdG4vQVROQ29uZmlnJykuQVROQ29uZmlnO1xudmFyIEludGVydmFsID0gcmVxdWlyZSgnLi9JbnRlcnZhbFNldCcpLkludGVydmFsO1xudmFyIEludGVydmFsU2V0ID0gcmVxdWlyZSgnLi9JbnRlcnZhbFNldCcpLkludGVydmFsU2V0O1xudmFyIFJ1bGVTdG9wU3RhdGUgPSByZXF1aXJlKCcuL2F0bi9BVE5TdGF0ZScpLlJ1bGVTdG9wU3RhdGU7XG52YXIgUnVsZVRyYW5zaXRpb24gPSByZXF1aXJlKCcuL2F0bi9UcmFuc2l0aW9uJykuUnVsZVRyYW5zaXRpb247XG52YXIgTm90U2V0VHJhbnNpdGlvbiA9IHJlcXVpcmUoJy4vYXRuL1RyYW5zaXRpb24nKS5Ob3RTZXRUcmFuc2l0aW9uO1xudmFyIFdpbGRjYXJkVHJhbnNpdGlvbiA9IHJlcXVpcmUoJy4vYXRuL1RyYW5zaXRpb24nKS5XaWxkY2FyZFRyYW5zaXRpb247XG52YXIgQWJzdHJhY3RQcmVkaWNhdGVUcmFuc2l0aW9uID0gcmVxdWlyZSgnLi9hdG4vVHJhbnNpdGlvbicpLkFic3RyYWN0UHJlZGljYXRlVHJhbnNpdGlvbjtcblxudmFyIHBjID0gcmVxdWlyZSgnLi9QcmVkaWN0aW9uQ29udGV4dCcpO1xudmFyIHByZWRpY3Rpb25Db250ZXh0RnJvbVJ1bGVDb250ZXh0ID0gcGMucHJlZGljdGlvbkNvbnRleHRGcm9tUnVsZUNvbnRleHQ7XG52YXIgUHJlZGljdGlvbkNvbnRleHQgPSBwYy5QcmVkaWN0aW9uQ29udGV4dDtcbnZhciBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dCA9IHBjLlNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0O1xuXG5mdW5jdGlvbiBMTDFBbmFseXplciAoYXRuKSB7XG4gICAgdGhpcy5hdG4gPSBhdG47XG59XG5cbi8vKiBTcGVjaWFsIHZhbHVlIGFkZGVkIHRvIHRoZSBsb29rYWhlYWQgc2V0cyB0byBpbmRpY2F0ZSB0aGF0IHdlIGhpdFxuLy8gIGEgcHJlZGljYXRlIGR1cmluZyBhbmFseXNpcyBpZiB7QGNvZGUgc2VlVGhydVByZWRzPT1mYWxzZX0uXG4vLy9cbkxMMUFuYWx5emVyLkhJVF9QUkVEID0gVG9rZW4uSU5WQUxJRF9UWVBFO1xuXG5cbi8vKlxuLy8gQ2FsY3VsYXRlcyB0aGUgU0xMKDEpIGV4cGVjdGVkIGxvb2thaGVhZCBzZXQgZm9yIGVhY2ggb3V0Z29pbmcgdHJhbnNpdGlvblxuLy8gb2YgYW4ge0BsaW5rIEFUTlN0YXRlfS4gVGhlIHJldHVybmVkIGFycmF5IGhhcyBvbmUgZWxlbWVudCBmb3IgZWFjaFxuLy8gb3V0Z29pbmcgdHJhbnNpdGlvbiBpbiB7QGNvZGUgc30uIElmIHRoZSBjbG9zdXJlIGZyb20gdHJhbnNpdGlvblxuLy8gPGVtPmk8L2VtPiBsZWFkcyB0byBhIHNlbWFudGljIHByZWRpY2F0ZSBiZWZvcmUgbWF0Y2hpbmcgYSBzeW1ib2wsIHRoZVxuLy8gZWxlbWVudCBhdCBpbmRleCA8ZW0+aTwvZW0+IG9mIHRoZSByZXN1bHQgd2lsbCBiZSB7QGNvZGUgbnVsbH0uXG4vL1xuLy8gQHBhcmFtIHMgdGhlIEFUTiBzdGF0ZVxuLy8gQHJldHVybiB0aGUgZXhwZWN0ZWQgc3ltYm9scyBmb3IgZWFjaCBvdXRnb2luZyB0cmFuc2l0aW9uIG9mIHtAY29kZSBzfS5cbi8vL1xuTEwxQW5hbHl6ZXIucHJvdG90eXBlLmdldERlY2lzaW9uTG9va2FoZWFkID0gZnVuY3Rpb24ocykge1xuICAgIGlmIChzID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YXIgY291bnQgPSBzLnRyYW5zaXRpb25zLmxlbmd0aDtcbiAgICB2YXIgbG9vayA9IFtdO1xuICAgIGZvcih2YXIgYWx0PTA7IGFsdDwgY291bnQ7IGFsdCsrKSB7XG4gICAgICAgIGxvb2tbYWx0XSA9IG5ldyBJbnRlcnZhbFNldCgpO1xuICAgICAgICB2YXIgbG9va0J1c3kgPSBuZXcgU2V0KCk7XG4gICAgICAgIHZhciBzZWVUaHJ1UHJlZHMgPSBmYWxzZTsgLy8gZmFpbCB0byBnZXQgbG9va2FoZWFkIHVwb24gcHJlZFxuICAgICAgICB0aGlzLl9MT09LKHMudHJhbnNpdGlvbihhbHQpLnRhcmdldCwgbnVsbCwgUHJlZGljdGlvbkNvbnRleHQuRU1QVFksXG4gICAgICAgICAgICAgIGxvb2tbYWx0XSwgbG9va0J1c3ksIG5ldyBCaXRTZXQoKSwgc2VlVGhydVByZWRzLCBmYWxzZSk7XG4gICAgICAgIC8vIFdpcGUgb3V0IGxvb2thaGVhZCBmb3IgdGhpcyBhbHRlcm5hdGl2ZSBpZiB3ZSBmb3VuZCBub3RoaW5nXG4gICAgICAgIC8vIG9yIHdlIGhhZCBhIHByZWRpY2F0ZSB3aGVuIHdlICFzZWVUaHJ1UHJlZHNcbiAgICAgICAgaWYgKGxvb2tbYWx0XS5sZW5ndGg9PT0wIHx8IGxvb2tbYWx0XS5jb250YWlucyhMTDFBbmFseXplci5ISVRfUFJFRCkpIHtcbiAgICAgICAgICAgIGxvb2tbYWx0XSA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGxvb2s7XG59O1xuXG4vLypcbi8vIENvbXB1dGUgc2V0IG9mIHRva2VucyB0aGF0IGNhbiBmb2xsb3cge0Bjb2RlIHN9IGluIHRoZSBBVE4gaW4gdGhlXG4vLyBzcGVjaWZpZWQge0Bjb2RlIGN0eH0uXG4vL1xuLy8gPHA+SWYge0Bjb2RlIGN0eH0gaXMge0Bjb2RlIG51bGx9IGFuZCB0aGUgZW5kIG9mIHRoZSBydWxlIGNvbnRhaW5pbmdcbi8vIHtAY29kZSBzfSBpcyByZWFjaGVkLCB7QGxpbmsgVG9rZW4vL0VQU0lMT059IGlzIGFkZGVkIHRvIHRoZSByZXN1bHQgc2V0LlxuLy8gSWYge0Bjb2RlIGN0eH0gaXMgbm90IHtAY29kZSBudWxsfSBhbmQgdGhlIGVuZCBvZiB0aGUgb3V0ZXJtb3N0IHJ1bGUgaXNcbi8vIHJlYWNoZWQsIHtAbGluayBUb2tlbi8vRU9GfSBpcyBhZGRlZCB0byB0aGUgcmVzdWx0IHNldC48L3A+XG4vL1xuLy8gQHBhcmFtIHMgdGhlIEFUTiBzdGF0ZVxuLy8gQHBhcmFtIHN0b3BTdGF0ZSB0aGUgQVROIHN0YXRlIHRvIHN0b3AgYXQuIFRoaXMgY2FuIGJlIGFcbi8vIHtAbGluayBCbG9ja0VuZFN0YXRlfSB0byBkZXRlY3QgZXBzaWxvbiBwYXRocyB0aHJvdWdoIGEgY2xvc3VyZS5cbi8vIEBwYXJhbSBjdHggdGhlIGNvbXBsZXRlIHBhcnNlciBjb250ZXh0LCBvciB7QGNvZGUgbnVsbH0gaWYgdGhlIGNvbnRleHRcbi8vIHNob3VsZCBiZSBpZ25vcmVkXG4vL1xuLy8gQHJldHVybiBUaGUgc2V0IG9mIHRva2VucyB0aGF0IGNhbiBmb2xsb3cge0Bjb2RlIHN9IGluIHRoZSBBVE4gaW4gdGhlXG4vLyBzcGVjaWZpZWQge0Bjb2RlIGN0eH0uXG4vLy9cbkxMMUFuYWx5emVyLnByb3RvdHlwZS5MT09LID0gZnVuY3Rpb24ocywgc3RvcFN0YXRlLCBjdHgpIHtcbiAgICB2YXIgciA9IG5ldyBJbnRlcnZhbFNldCgpO1xuICAgIHZhciBzZWVUaHJ1UHJlZHMgPSB0cnVlOyAvLyBpZ25vcmUgcHJlZHM7IGdldCBhbGwgbG9va2FoZWFkXG5cdGN0eCA9IGN0eCB8fCBudWxsO1xuICAgIHZhciBsb29rQ29udGV4dCA9IGN0eCE9PW51bGwgPyBwcmVkaWN0aW9uQ29udGV4dEZyb21SdWxlQ29udGV4dChzLmF0biwgY3R4KSA6IG51bGw7XG4gICAgdGhpcy5fTE9PSyhzLCBzdG9wU3RhdGUsIGxvb2tDb250ZXh0LCByLCBuZXcgU2V0KCksIG5ldyBCaXRTZXQoKSwgc2VlVGhydVByZWRzLCB0cnVlKTtcbiAgICByZXR1cm4gcjtcbn07XG5cbi8vKlxuLy8gQ29tcHV0ZSBzZXQgb2YgdG9rZW5zIHRoYXQgY2FuIGZvbGxvdyB7QGNvZGUgc30gaW4gdGhlIEFUTiBpbiB0aGVcbi8vIHNwZWNpZmllZCB7QGNvZGUgY3R4fS5cbi8vXG4vLyA8cD5JZiB7QGNvZGUgY3R4fSBpcyB7QGNvZGUgbnVsbH0gYW5kIHtAY29kZSBzdG9wU3RhdGV9IG9yIHRoZSBlbmQgb2YgdGhlXG4vLyBydWxlIGNvbnRhaW5pbmcge0Bjb2RlIHN9IGlzIHJlYWNoZWQsIHtAbGluayBUb2tlbi8vRVBTSUxPTn0gaXMgYWRkZWQgdG9cbi8vIHRoZSByZXN1bHQgc2V0LiBJZiB7QGNvZGUgY3R4fSBpcyBub3Qge0Bjb2RlIG51bGx9IGFuZCB7QGNvZGUgYWRkRU9GfSBpc1xuLy8ge0Bjb2RlIHRydWV9IGFuZCB7QGNvZGUgc3RvcFN0YXRlfSBvciB0aGUgZW5kIG9mIHRoZSBvdXRlcm1vc3QgcnVsZSBpc1xuLy8gcmVhY2hlZCwge0BsaW5rIFRva2VuLy9FT0Z9IGlzIGFkZGVkIHRvIHRoZSByZXN1bHQgc2V0LjwvcD5cbi8vXG4vLyBAcGFyYW0gcyB0aGUgQVROIHN0YXRlLlxuLy8gQHBhcmFtIHN0b3BTdGF0ZSB0aGUgQVROIHN0YXRlIHRvIHN0b3AgYXQuIFRoaXMgY2FuIGJlIGFcbi8vIHtAbGluayBCbG9ja0VuZFN0YXRlfSB0byBkZXRlY3QgZXBzaWxvbiBwYXRocyB0aHJvdWdoIGEgY2xvc3VyZS5cbi8vIEBwYXJhbSBjdHggVGhlIG91dGVyIGNvbnRleHQsIG9yIHtAY29kZSBudWxsfSBpZiB0aGUgb3V0ZXIgY29udGV4dCBzaG91bGRcbi8vIG5vdCBiZSB1c2VkLlxuLy8gQHBhcmFtIGxvb2sgVGhlIHJlc3VsdCBsb29rYWhlYWQgc2V0LlxuLy8gQHBhcmFtIGxvb2tCdXN5IEEgc2V0IHVzZWQgZm9yIHByZXZlbnRpbmcgZXBzaWxvbiBjbG9zdXJlcyBpbiB0aGUgQVROXG4vLyBmcm9tIGNhdXNpbmcgYSBzdGFjayBvdmVyZmxvdy4gT3V0c2lkZSBjb2RlIHNob3VsZCBwYXNzXG4vLyB7QGNvZGUgbmV3IFNldDxBVE5Db25maWc+fSBmb3IgdGhpcyBhcmd1bWVudC5cbi8vIEBwYXJhbSBjYWxsZWRSdWxlU3RhY2sgQSBzZXQgdXNlZCBmb3IgcHJldmVudGluZyBsZWZ0IHJlY3Vyc2lvbiBpbiB0aGVcbi8vIEFUTiBmcm9tIGNhdXNpbmcgYSBzdGFjayBvdmVyZmxvdy4gT3V0c2lkZSBjb2RlIHNob3VsZCBwYXNzXG4vLyB7QGNvZGUgbmV3IEJpdFNldCgpfSBmb3IgdGhpcyBhcmd1bWVudC5cbi8vIEBwYXJhbSBzZWVUaHJ1UHJlZHMge0Bjb2RlIHRydWV9IHRvIHRydWUgc2VtYW50aWMgcHJlZGljYXRlcyBhc1xuLy8gaW1wbGljaXRseSB7QGNvZGUgdHJ1ZX0gYW5kIFwic2VlIHRocm91Z2ggdGhlbVwiLCBvdGhlcndpc2Uge0Bjb2RlIGZhbHNlfVxuLy8gdG8gdHJlYXQgc2VtYW50aWMgcHJlZGljYXRlcyBhcyBvcGFxdWUgYW5kIGFkZCB7QGxpbmsgLy9ISVRfUFJFRH0gdG8gdGhlXG4vLyByZXN1bHQgaWYgb25lIGlzIGVuY291bnRlcmVkLlxuLy8gQHBhcmFtIGFkZEVPRiBBZGQge0BsaW5rIFRva2VuLy9FT0Z9IHRvIHRoZSByZXN1bHQgaWYgdGhlIGVuZCBvZiB0aGVcbi8vIG91dGVybW9zdCBjb250ZXh0IGlzIHJlYWNoZWQuIFRoaXMgcGFyYW1ldGVyIGhhcyBubyBlZmZlY3QgaWYge0Bjb2RlIGN0eH1cbi8vIGlzIHtAY29kZSBudWxsfS5cbi8vL1xuTEwxQW5hbHl6ZXIucHJvdG90eXBlLl9MT09LID0gZnVuY3Rpb24ocywgc3RvcFN0YXRlICwgY3R4LCBsb29rLCBsb29rQnVzeSwgY2FsbGVkUnVsZVN0YWNrLCBzZWVUaHJ1UHJlZHMsIGFkZEVPRikge1xuICAgIHZhciBjID0gbmV3IEFUTkNvbmZpZyh7c3RhdGU6cywgYWx0OjAsIGNvbnRleHQ6IGN0eH0sIG51bGwpO1xuICAgIGlmIChsb29rQnVzeS5jb250YWlucyhjKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGxvb2tCdXN5LmFkZChjKTtcbiAgICBpZiAocyA9PT0gc3RvcFN0YXRlKSB7XG4gICAgICAgIGlmIChjdHggPT09bnVsbCkge1xuICAgICAgICAgICAgbG9vay5hZGRPbmUoVG9rZW4uRVBTSUxPTik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSBpZiAoY3R4LmlzRW1wdHkoKSAmJiBhZGRFT0YpIHtcbiAgICAgICAgICAgIGxvb2suYWRkT25lKFRva2VuLkVPRik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHMgaW5zdGFuY2VvZiBSdWxlU3RvcFN0YXRlICkge1xuICAgICAgICBpZiAoY3R4ID09PW51bGwpIHtcbiAgICAgICAgICAgIGxvb2suYWRkT25lKFRva2VuLkVQU0lMT04pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2UgaWYgKGN0eC5pc0VtcHR5KCkgJiYgYWRkRU9GKSB7XG4gICAgICAgICAgICBsb29rLmFkZE9uZShUb2tlbi5FT0YpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdHggIT09IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZKSB7XG4gICAgICAgICAgICAvLyBydW4gdGhydSBhbGwgcG9zc2libGUgc3RhY2sgdG9wcyBpbiBjdHhcbiAgICAgICAgICAgIGZvcih2YXIgaT0wOyBpPGN0eC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciByZXR1cm5TdGF0ZSA9IHRoaXMuYXRuLnN0YXRlc1tjdHguZ2V0UmV0dXJuU3RhdGUoaSldO1xuICAgICAgICAgICAgICAgIHZhciByZW1vdmVkID0gY2FsbGVkUnVsZVN0YWNrLmNvbnRhaW5zKHJldHVyblN0YXRlLnJ1bGVJbmRleCk7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGVkUnVsZVN0YWNrLnJlbW92ZShyZXR1cm5TdGF0ZS5ydWxlSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9MT09LKHJldHVyblN0YXRlLCBzdG9wU3RhdGUsIGN0eC5nZXRQYXJlbnQoaSksIGxvb2ssIGxvb2tCdXN5LCBjYWxsZWRSdWxlU3RhY2ssIHNlZVRocnVQcmVkcywgYWRkRU9GKTtcbiAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVtb3ZlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGVkUnVsZVN0YWNrLmFkZChyZXR1cm5TdGF0ZS5ydWxlSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvcih2YXIgaj0wOyBqPHMudHJhbnNpdGlvbnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIHQgPSBzLnRyYW5zaXRpb25zW2pdO1xuICAgICAgICBpZiAodC5jb25zdHJ1Y3RvciA9PT0gUnVsZVRyYW5zaXRpb24pIHtcbiAgICAgICAgICAgIGlmIChjYWxsZWRSdWxlU3RhY2suY29udGFpbnModC50YXJnZXQucnVsZUluZGV4KSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIG5ld0NvbnRleHQgPSBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dC5jcmVhdGUoY3R4LCB0LmZvbGxvd1N0YXRlLnN0YXRlTnVtYmVyKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY2FsbGVkUnVsZVN0YWNrLmFkZCh0LnRhcmdldC5ydWxlSW5kZXgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX0xPT0sodC50YXJnZXQsIHN0b3BTdGF0ZSwgbmV3Q29udGV4dCwgbG9vaywgbG9va0J1c3ksIGNhbGxlZFJ1bGVTdGFjaywgc2VlVGhydVByZWRzLCBhZGRFT0YpO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICBjYWxsZWRSdWxlU3RhY2sucmVtb3ZlKHQudGFyZ2V0LnJ1bGVJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodCBpbnN0YW5jZW9mIEFic3RyYWN0UHJlZGljYXRlVHJhbnNpdGlvbiApIHtcbiAgICAgICAgICAgIGlmIChzZWVUaHJ1UHJlZHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9MT09LKHQudGFyZ2V0LCBzdG9wU3RhdGUsIGN0eCwgbG9vaywgbG9va0J1c3ksIGNhbGxlZFJ1bGVTdGFjaywgc2VlVGhydVByZWRzLCBhZGRFT0YpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsb29rLmFkZE9uZShMTDFBbmFseXplci5ISVRfUFJFRCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiggdC5pc0Vwc2lsb24pIHtcbiAgICAgICAgICAgIHRoaXMuX0xPT0sodC50YXJnZXQsIHN0b3BTdGF0ZSwgY3R4LCBsb29rLCBsb29rQnVzeSwgY2FsbGVkUnVsZVN0YWNrLCBzZWVUaHJ1UHJlZHMsIGFkZEVPRik7XG4gICAgICAgIH0gZWxzZSBpZiAodC5jb25zdHJ1Y3RvciA9PT0gV2lsZGNhcmRUcmFuc2l0aW9uKSB7XG4gICAgICAgICAgICBsb29rLmFkZFJhbmdlKCBUb2tlbi5NSU5fVVNFUl9UT0tFTl9UWVBFLCB0aGlzLmF0bi5tYXhUb2tlblR5cGUgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBzZXQgPSB0LmxhYmVsO1xuICAgICAgICAgICAgaWYgKHNldCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmICh0IGluc3RhbmNlb2YgTm90U2V0VHJhbnNpdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBzZXQgPSBzZXQuY29tcGxlbWVudChUb2tlbi5NSU5fVVNFUl9UT0tFTl9UWVBFLCB0aGlzLmF0bi5tYXhUb2tlblR5cGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsb29rLmFkZFNldChzZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuZXhwb3J0cy5MTDFBbmFseXplciA9IExMMUFuYWx5emVyO1xuXG4iLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vLy9cblxuLy8gQSBsZXhlciBpcyByZWNvZ25pemVyIHRoYXQgZHJhd3MgaW5wdXQgc3ltYm9scyBmcm9tIGEgY2hhcmFjdGVyIHN0cmVhbS5cbi8vICBsZXhlciBncmFtbWFycyByZXN1bHQgaW4gYSBzdWJjbGFzcyBvZiB0aGlzIG9iamVjdC4gQSBMZXhlciBvYmplY3Rcbi8vICB1c2VzIHNpbXBsaWZpZWQgbWF0Y2goKSBhbmQgZXJyb3IgcmVjb3ZlcnkgbWVjaGFuaXNtcyBpbiB0aGUgaW50ZXJlc3Qgb2Ygc3BlZWQuXG5cbnZhciBUb2tlbiA9IHJlcXVpcmUoJy4vVG9rZW4nKS5Ub2tlbjtcbnZhciBSZWNvZ25pemVyID0gcmVxdWlyZSgnLi9SZWNvZ25pemVyJykuUmVjb2duaXplcjtcbnZhciBDb21tb25Ub2tlbkZhY3RvcnkgPSByZXF1aXJlKCcuL0NvbW1vblRva2VuRmFjdG9yeScpLkNvbW1vblRva2VuRmFjdG9yeTtcbnZhciBSZWNvZ25pdGlvbkV4Y2VwdGlvbiAgPSByZXF1aXJlKCcuL2Vycm9yL0Vycm9ycycpLlJlY29nbml0aW9uRXhjZXB0aW9uO1xudmFyIExleGVyTm9WaWFibGVBbHRFeGNlcHRpb24gPSByZXF1aXJlKCcuL2Vycm9yL0Vycm9ycycpLkxleGVyTm9WaWFibGVBbHRFeGNlcHRpb247XG5cbmZ1bmN0aW9uIFRva2VuU291cmNlKCkge1xuXHRyZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gTGV4ZXIoaW5wdXQpIHtcblx0UmVjb2duaXplci5jYWxsKHRoaXMpO1xuXHR0aGlzLl9pbnB1dCA9IGlucHV0O1xuXHR0aGlzLl9mYWN0b3J5ID0gQ29tbW9uVG9rZW5GYWN0b3J5LkRFRkFVTFQ7XG5cdHRoaXMuX3Rva2VuRmFjdG9yeVNvdXJjZVBhaXIgPSBbIHRoaXMsIGlucHV0IF07XG5cblx0dGhpcy5faW50ZXJwID0gbnVsbDsgLy8gY2hpbGQgY2xhc3NlcyBtdXN0IHBvcHVsYXRlIHRoaXNcblxuXHQvLyBUaGUgZ29hbCBvZiBhbGwgbGV4ZXIgcnVsZXMvbWV0aG9kcyBpcyB0byBjcmVhdGUgYSB0b2tlbiBvYmplY3QuXG5cdC8vIHRoaXMgaXMgYW4gaW5zdGFuY2UgdmFyaWFibGUgYXMgbXVsdGlwbGUgcnVsZXMgbWF5IGNvbGxhYm9yYXRlIHRvXG5cdC8vIGNyZWF0ZSBhIHNpbmdsZSB0b2tlbi4gbmV4dFRva2VuIHdpbGwgcmV0dXJuIHRoaXMgb2JqZWN0IGFmdGVyXG5cdC8vIG1hdGNoaW5nIGxleGVyIHJ1bGUocykuIElmIHlvdSBzdWJjbGFzcyB0byBhbGxvdyBtdWx0aXBsZSB0b2tlblxuXHQvLyBlbWlzc2lvbnMsIHRoZW4gc2V0IHRoaXMgdG8gdGhlIGxhc3QgdG9rZW4gdG8gYmUgbWF0Y2hlZCBvclxuXHQvLyBzb21ldGhpbmcgbm9ubnVsbCBzbyB0aGF0IHRoZSBhdXRvIHRva2VuIGVtaXQgbWVjaGFuaXNtIHdpbGwgbm90XG5cdC8vIGVtaXQgYW5vdGhlciB0b2tlbi5cblx0dGhpcy5fdG9rZW4gPSBudWxsO1xuXG5cdC8vIFdoYXQgY2hhcmFjdGVyIGluZGV4IGluIHRoZSBzdHJlYW0gZGlkIHRoZSBjdXJyZW50IHRva2VuIHN0YXJ0IGF0P1xuXHQvLyBOZWVkZWQsIGZvciBleGFtcGxlLCB0byBnZXQgdGhlIHRleHQgZm9yIGN1cnJlbnQgdG9rZW4uIFNldCBhdFxuXHQvLyB0aGUgc3RhcnQgb2YgbmV4dFRva2VuLlxuXHR0aGlzLl90b2tlblN0YXJ0Q2hhckluZGV4ID0gLTE7XG5cblx0Ly8gVGhlIGxpbmUgb24gd2hpY2ggdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgdG9rZW4gcmVzaWRlcy8vL1xuXHR0aGlzLl90b2tlblN0YXJ0TGluZSA9IC0xO1xuXG5cdC8vIFRoZSBjaGFyYWN0ZXIgcG9zaXRpb24gb2YgZmlyc3QgY2hhcmFjdGVyIHdpdGhpbiB0aGUgbGluZS8vL1xuXHR0aGlzLl90b2tlblN0YXJ0Q29sdW1uID0gLTE7XG5cblx0Ly8gT25jZSB3ZSBzZWUgRU9GIG9uIGNoYXIgc3RyZWFtLCBuZXh0IHRva2VuIHdpbGwgYmUgRU9GLlxuXHQvLyBJZiB5b3UgaGF2ZSBET05FIDogRU9GIDsgdGhlbiB5b3Ugc2VlIERPTkUgRU9GLlxuXHR0aGlzLl9oaXRFT0YgPSBmYWxzZTtcblxuXHQvLyBUaGUgY2hhbm5lbCBudW1iZXIgZm9yIHRoZSBjdXJyZW50IHRva2VuLy8vXG5cdHRoaXMuX2NoYW5uZWwgPSBUb2tlbi5ERUZBVUxUX0NIQU5ORUw7XG5cblx0Ly8gVGhlIHRva2VuIHR5cGUgZm9yIHRoZSBjdXJyZW50IHRva2VuLy8vXG5cdHRoaXMuX3R5cGUgPSBUb2tlbi5JTlZBTElEX1RZUEU7XG5cblx0dGhpcy5fbW9kZVN0YWNrID0gW107XG5cdHRoaXMuX21vZGUgPSBMZXhlci5ERUZBVUxUX01PREU7XG5cblx0Ly8gWW91IGNhbiBzZXQgdGhlIHRleHQgZm9yIHRoZSBjdXJyZW50IHRva2VuIHRvIG92ZXJyaWRlIHdoYXQgaXMgaW5cblx0Ly8gdGhlIGlucHV0IGNoYXIgYnVmZmVyLiBVc2Ugc2V0VGV4dCgpIG9yIGNhbiBzZXQgdGhpcyBpbnN0YW5jZSB2YXIuXG5cdC8vIC9cblx0dGhpcy5fdGV4dCA9IG51bGw7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbkxleGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUmVjb2duaXplci5wcm90b3R5cGUpO1xuTGV4ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTGV4ZXI7XG5cbkxleGVyLkRFRkFVTFRfTU9ERSA9IDA7XG5MZXhlci5NT1JFID0gLTI7XG5MZXhlci5TS0lQID0gLTM7XG5cbkxleGVyLkRFRkFVTFRfVE9LRU5fQ0hBTk5FTCA9IFRva2VuLkRFRkFVTFRfQ0hBTk5FTDtcbkxleGVyLkhJRERFTiA9IFRva2VuLkhJRERFTl9DSEFOTkVMO1xuTGV4ZXIuTUlOX0NIQVJfVkFMVUUgPSAweDAwMDA7XG5MZXhlci5NQVhfQ0hBUl9WQUxVRSA9IDB4MTBGRkZGO1xuXG5MZXhlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbigpIHtcblx0Ly8gd2FjayBMZXhlciBzdGF0ZSB2YXJpYWJsZXNcblx0aWYgKHRoaXMuX2lucHV0ICE9PSBudWxsKSB7XG5cdFx0dGhpcy5faW5wdXQuc2VlaygwKTsgLy8gcmV3aW5kIHRoZSBpbnB1dFxuXHR9XG5cdHRoaXMuX3Rva2VuID0gbnVsbDtcblx0dGhpcy5fdHlwZSA9IFRva2VuLklOVkFMSURfVFlQRTtcblx0dGhpcy5fY2hhbm5lbCA9IFRva2VuLkRFRkFVTFRfQ0hBTk5FTDtcblx0dGhpcy5fdG9rZW5TdGFydENoYXJJbmRleCA9IC0xO1xuXHR0aGlzLl90b2tlblN0YXJ0Q29sdW1uID0gLTE7XG5cdHRoaXMuX3Rva2VuU3RhcnRMaW5lID0gLTE7XG5cdHRoaXMuX3RleHQgPSBudWxsO1xuXG5cdHRoaXMuX2hpdEVPRiA9IGZhbHNlO1xuXHR0aGlzLl9tb2RlID0gTGV4ZXIuREVGQVVMVF9NT0RFO1xuXHR0aGlzLl9tb2RlU3RhY2sgPSBbXTtcblxuXHR0aGlzLl9pbnRlcnAucmVzZXQoKTtcbn07XG5cbi8vIFJldHVybiBhIHRva2VuIGZyb20gdGhpcyBzb3VyY2U7IGkuZS4sIG1hdGNoIGEgdG9rZW4gb24gdGhlIGNoYXIgc3RyZWFtLlxuTGV4ZXIucHJvdG90eXBlLm5leHRUb2tlbiA9IGZ1bmN0aW9uKCkge1xuXHRpZiAodGhpcy5faW5wdXQgPT09IG51bGwpIHtcblx0XHR0aHJvdyBcIm5leHRUb2tlbiByZXF1aXJlcyBhIG5vbi1udWxsIGlucHV0IHN0cmVhbS5cIjtcblx0fVxuXG5cdC8vIE1hcmsgc3RhcnQgbG9jYXRpb24gaW4gY2hhciBzdHJlYW0gc28gdW5idWZmZXJlZCBzdHJlYW1zIGFyZVxuXHQvLyBndWFyYW50ZWVkIGF0IGxlYXN0IGhhdmUgdGV4dCBvZiBjdXJyZW50IHRva2VuXG5cdHZhciB0b2tlblN0YXJ0TWFya2VyID0gdGhpcy5faW5wdXQubWFyaygpO1xuXHR0cnkge1xuXHRcdHdoaWxlICh0cnVlKSB7XG5cdFx0XHRpZiAodGhpcy5faGl0RU9GKSB7XG5cdFx0XHRcdHRoaXMuZW1pdEVPRigpO1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fdG9rZW47XG5cdFx0XHR9XG5cdFx0XHR0aGlzLl90b2tlbiA9IG51bGw7XG5cdFx0XHR0aGlzLl9jaGFubmVsID0gVG9rZW4uREVGQVVMVF9DSEFOTkVMO1xuXHRcdFx0dGhpcy5fdG9rZW5TdGFydENoYXJJbmRleCA9IHRoaXMuX2lucHV0LmluZGV4O1xuXHRcdFx0dGhpcy5fdG9rZW5TdGFydENvbHVtbiA9IHRoaXMuX2ludGVycC5jb2x1bW47XG5cdFx0XHR0aGlzLl90b2tlblN0YXJ0TGluZSA9IHRoaXMuX2ludGVycC5saW5lO1xuXHRcdFx0dGhpcy5fdGV4dCA9IG51bGw7XG5cdFx0XHR2YXIgY29udGludWVPdXRlciA9IGZhbHNlO1xuXHRcdFx0d2hpbGUgKHRydWUpIHtcblx0XHRcdFx0dGhpcy5fdHlwZSA9IFRva2VuLklOVkFMSURfVFlQRTtcblx0XHRcdFx0dmFyIHR0eXBlID0gTGV4ZXIuU0tJUDtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHR0dHlwZSA9IHRoaXMuX2ludGVycC5tYXRjaCh0aGlzLl9pbnB1dCwgdGhpcy5fbW9kZSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0ICAgIGlmKGUgaW5zdGFuY2VvZiBSZWNvZ25pdGlvbkV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZnlMaXN0ZW5lcnMoZSk7IC8vIHJlcG9ydCBlcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvdmVyKGUpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZS5zdGFjayk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRoaXMuX2lucHV0LkxBKDEpID09PSBUb2tlbi5FT0YpIHtcblx0XHRcdFx0XHR0aGlzLl9oaXRFT0YgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0aGlzLl90eXBlID09PSBUb2tlbi5JTlZBTElEX1RZUEUpIHtcblx0XHRcdFx0XHR0aGlzLl90eXBlID0gdHR5cGU7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRoaXMuX3R5cGUgPT09IExleGVyLlNLSVApIHtcblx0XHRcdFx0XHRjb250aW51ZU91dGVyID0gdHJ1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodGhpcy5fdHlwZSAhPT0gTGV4ZXIuTU9SRSkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoY29udGludWVPdXRlcikge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdGlmICh0aGlzLl90b2tlbiA9PT0gbnVsbCkge1xuXHRcdFx0XHR0aGlzLmVtaXQoKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzLl90b2tlbjtcblx0XHR9XG5cdH0gZmluYWxseSB7XG5cdFx0Ly8gbWFrZSBzdXJlIHdlIHJlbGVhc2UgbWFya2VyIGFmdGVyIG1hdGNoIG9yXG5cdFx0Ly8gdW5idWZmZXJlZCBjaGFyIHN0cmVhbSB3aWxsIGtlZXAgYnVmZmVyaW5nXG5cdFx0dGhpcy5faW5wdXQucmVsZWFzZSh0b2tlblN0YXJ0TWFya2VyKTtcblx0fVxufTtcblxuLy8gSW5zdHJ1Y3QgdGhlIGxleGVyIHRvIHNraXAgY3JlYXRpbmcgYSB0b2tlbiBmb3IgY3VycmVudCBsZXhlciBydWxlXG4vLyBhbmQgbG9vayBmb3IgYW5vdGhlciB0b2tlbi4gbmV4dFRva2VuKCkga25vd3MgdG8ga2VlcCBsb29raW5nIHdoZW5cbi8vIGEgbGV4ZXIgcnVsZSBmaW5pc2hlcyB3aXRoIHRva2VuIHNldCB0byBTS0lQX1RPS0VOLiBSZWNhbGwgdGhhdFxuLy8gaWYgdG9rZW49PW51bGwgYXQgZW5kIG9mIGFueSB0b2tlbiBydWxlLCBpdCBjcmVhdGVzIG9uZSBmb3IgeW91XG4vLyBhbmQgZW1pdHMgaXQuXG4vLyAvXG5MZXhlci5wcm90b3R5cGUuc2tpcCA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLl90eXBlID0gTGV4ZXIuU0tJUDtcbn07XG5cbkxleGVyLnByb3RvdHlwZS5tb3JlID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMuX3R5cGUgPSBMZXhlci5NT1JFO1xufTtcblxuTGV4ZXIucHJvdG90eXBlLm1vZGUgPSBmdW5jdGlvbihtKSB7XG5cdHRoaXMuX21vZGUgPSBtO1xufTtcblxuTGV4ZXIucHJvdG90eXBlLnB1c2hNb2RlID0gZnVuY3Rpb24obSkge1xuXHRpZiAodGhpcy5faW50ZXJwLmRlYnVnKSB7XG5cdFx0Y29uc29sZS5sb2coXCJwdXNoTW9kZSBcIiArIG0pO1xuXHR9XG5cdHRoaXMuX21vZGVTdGFjay5wdXNoKHRoaXMuX21vZGUpO1xuXHR0aGlzLm1vZGUobSk7XG59O1xuXG5MZXhlci5wcm90b3R5cGUucG9wTW9kZSA9IGZ1bmN0aW9uKCkge1xuXHRpZiAodGhpcy5fbW9kZVN0YWNrLmxlbmd0aCA9PT0gMCkge1xuXHRcdHRocm93IFwiRW1wdHkgU3RhY2tcIjtcblx0fVxuXHRpZiAodGhpcy5faW50ZXJwLmRlYnVnKSB7XG5cdFx0Y29uc29sZS5sb2coXCJwb3BNb2RlIGJhY2sgdG8gXCIgKyB0aGlzLl9tb2RlU3RhY2suc2xpY2UoMCwgLTEpKTtcblx0fVxuXHR0aGlzLm1vZGUodGhpcy5fbW9kZVN0YWNrLnBvcCgpKTtcblx0cmV0dXJuIHRoaXMuX21vZGU7XG59O1xuXG4vLyBTZXQgdGhlIGNoYXIgc3RyZWFtIGFuZCByZXNldCB0aGUgbGV4ZXJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShMZXhlci5wcm90b3R5cGUsIFwiaW5wdXRTdHJlYW1cIiwge1xuXHRnZXQgOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5faW5wdXQ7XG5cdH0sXG5cdHNldCA6IGZ1bmN0aW9uKGlucHV0KSB7XG5cdFx0dGhpcy5faW5wdXQgPSBudWxsO1xuXHRcdHRoaXMuX3Rva2VuRmFjdG9yeVNvdXJjZVBhaXIgPSBbIHRoaXMsIHRoaXMuX2lucHV0IF07XG5cdFx0dGhpcy5yZXNldCgpO1xuXHRcdHRoaXMuX2lucHV0ID0gaW5wdXQ7XG5cdFx0dGhpcy5fdG9rZW5GYWN0b3J5U291cmNlUGFpciA9IFsgdGhpcywgdGhpcy5faW5wdXQgXTtcblx0fVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShMZXhlci5wcm90b3R5cGUsIFwic291cmNlTmFtZVwiLCB7XG5cdGdldCA6IGZ1bmN0aW9uIHNvdXJjZU5hbWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2lucHV0LnNvdXJjZU5hbWU7XG5cdH1cbn0pO1xuXG4vLyBCeSBkZWZhdWx0IGRvZXMgbm90IHN1cHBvcnQgbXVsdGlwbGUgZW1pdHMgcGVyIG5leHRUb2tlbiBpbnZvY2F0aW9uXG4vLyBmb3IgZWZmaWNpZW5jeSByZWFzb25zLiBTdWJjbGFzcyBhbmQgb3ZlcnJpZGUgdGhpcyBtZXRob2QsIG5leHRUb2tlbixcbi8vIGFuZCBnZXRUb2tlbiAodG8gcHVzaCB0b2tlbnMgaW50byBhIGxpc3QgYW5kIHB1bGwgZnJvbSB0aGF0IGxpc3Rcbi8vIHJhdGhlciB0aGFuIGEgc2luZ2xlIHZhcmlhYmxlIGFzIHRoaXMgaW1wbGVtZW50YXRpb24gZG9lcykuXG4vLyAvXG5MZXhlci5wcm90b3R5cGUuZW1pdFRva2VuID0gZnVuY3Rpb24odG9rZW4pIHtcblx0dGhpcy5fdG9rZW4gPSB0b2tlbjtcbn07XG5cbi8vIFRoZSBzdGFuZGFyZCBtZXRob2QgY2FsbGVkIHRvIGF1dG9tYXRpY2FsbHkgZW1pdCBhIHRva2VuIGF0IHRoZVxuLy8gb3V0ZXJtb3N0IGxleGljYWwgcnVsZS4gVGhlIHRva2VuIG9iamVjdCBzaG91bGQgcG9pbnQgaW50byB0aGVcbi8vIGNoYXIgYnVmZmVyIHN0YXJ0Li5zdG9wLiBJZiB0aGVyZSBpcyBhIHRleHQgb3ZlcnJpZGUgaW4gJ3RleHQnLFxuLy8gdXNlIHRoYXQgdG8gc2V0IHRoZSB0b2tlbidzIHRleHQuIE92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIGVtaXRcbi8vIGN1c3RvbSBUb2tlbiBvYmplY3RzIG9yIHByb3ZpZGUgYSBuZXcgZmFjdG9yeS5cbi8vIC9cbkxleGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24oKSB7XG5cdHZhciB0ID0gdGhpcy5fZmFjdG9yeS5jcmVhdGUodGhpcy5fdG9rZW5GYWN0b3J5U291cmNlUGFpciwgdGhpcy5fdHlwZSxcblx0XHRcdHRoaXMuX3RleHQsIHRoaXMuX2NoYW5uZWwsIHRoaXMuX3Rva2VuU3RhcnRDaGFySW5kZXgsIHRoaXNcblx0XHRcdFx0XHQuZ2V0Q2hhckluZGV4KCkgLSAxLCB0aGlzLl90b2tlblN0YXJ0TGluZSxcblx0XHRcdHRoaXMuX3Rva2VuU3RhcnRDb2x1bW4pO1xuXHR0aGlzLmVtaXRUb2tlbih0KTtcblx0cmV0dXJuIHQ7XG59O1xuXG5MZXhlci5wcm90b3R5cGUuZW1pdEVPRiA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgY3BvcyA9IHRoaXMuY29sdW1uO1xuXHR2YXIgbHBvcyA9IHRoaXMubGluZTtcblx0dmFyIGVvZiA9IHRoaXMuX2ZhY3RvcnkuY3JlYXRlKHRoaXMuX3Rva2VuRmFjdG9yeVNvdXJjZVBhaXIsIFRva2VuLkVPRixcblx0XHRcdG51bGwsIFRva2VuLkRFRkFVTFRfQ0hBTk5FTCwgdGhpcy5faW5wdXQuaW5kZXgsXG5cdFx0XHR0aGlzLl9pbnB1dC5pbmRleCAtIDEsIGxwb3MsIGNwb3MpO1xuXHR0aGlzLmVtaXRUb2tlbihlb2YpO1xuXHRyZXR1cm4gZW9mO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KExleGVyLnByb3RvdHlwZSwgXCJ0eXBlXCIsIHtcblx0Z2V0IDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMudHlwZTtcblx0fSxcblx0c2V0IDogZnVuY3Rpb24odHlwZSkge1xuXHRcdHRoaXMuX3R5cGUgPSB0eXBlO1xuXHR9XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KExleGVyLnByb3RvdHlwZSwgXCJsaW5lXCIsIHtcblx0Z2V0IDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2ludGVycC5saW5lO1xuXHR9LFxuXHRzZXQgOiBmdW5jdGlvbihsaW5lKSB7XG5cdFx0dGhpcy5faW50ZXJwLmxpbmUgPSBsaW5lO1xuXHR9XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KExleGVyLnByb3RvdHlwZSwgXCJjb2x1bW5cIiwge1xuXHRnZXQgOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5faW50ZXJwLmNvbHVtbjtcblx0fSxcblx0c2V0IDogZnVuY3Rpb24oY29sdW1uKSB7XG5cdFx0dGhpcy5faW50ZXJwLmNvbHVtbiA9IGNvbHVtbjtcblx0fVxufSk7XG5cblxuLy8gV2hhdCBpcyB0aGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgY2hhcmFjdGVyIG9mIGxvb2thaGVhZD8vLy9cbkxleGVyLnByb3RvdHlwZS5nZXRDaGFySW5kZXggPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuX2lucHV0LmluZGV4O1xufTtcblxuLy8gUmV0dXJuIHRoZSB0ZXh0IG1hdGNoZWQgc28gZmFyIGZvciB0aGUgY3VycmVudCB0b2tlbiBvciBhbnkgdGV4dCBvdmVycmlkZS5cbi8vU2V0IHRoZSBjb21wbGV0ZSB0ZXh0IG9mIHRoaXMgdG9rZW47IGl0IHdpcGVzIGFueSBwcmV2aW91cyBjaGFuZ2VzIHRvIHRoZSB0ZXh0LlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KExleGVyLnByb3RvdHlwZSwgXCJ0ZXh0XCIsIHtcblx0Z2V0IDogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKHRoaXMuX3RleHQgIT09IG51bGwpIHtcblx0XHRcdHJldHVybiB0aGlzLl90ZXh0O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5faW50ZXJwLmdldFRleHQodGhpcy5faW5wdXQpO1xuXHRcdH1cblx0fSxcblx0c2V0IDogZnVuY3Rpb24odGV4dCkge1xuXHRcdHRoaXMuX3RleHQgPSB0ZXh0O1xuXHR9XG59KTtcbi8vIFJldHVybiBhIGxpc3Qgb2YgYWxsIFRva2VuIG9iamVjdHMgaW4gaW5wdXQgY2hhciBzdHJlYW0uXG4vLyBGb3JjZXMgbG9hZCBvZiBhbGwgdG9rZW5zLiBEb2VzIG5vdCBpbmNsdWRlIEVPRiB0b2tlbi5cbi8vIC9cbkxleGVyLnByb3RvdHlwZS5nZXRBbGxUb2tlbnMgPSBmdW5jdGlvbigpIHtcblx0dmFyIHRva2VucyA9IFtdO1xuXHR2YXIgdCA9IHRoaXMubmV4dFRva2VuKCk7XG5cdHdoaWxlICh0LnR5cGUgIT09IFRva2VuLkVPRikge1xuXHRcdHRva2Vucy5wdXNoKHQpO1xuXHRcdHQgPSB0aGlzLm5leHRUb2tlbigpO1xuXHR9XG5cdHJldHVybiB0b2tlbnM7XG59O1xuXG5MZXhlci5wcm90b3R5cGUubm90aWZ5TGlzdGVuZXJzID0gZnVuY3Rpb24oZSkge1xuXHR2YXIgc3RhcnQgPSB0aGlzLl90b2tlblN0YXJ0Q2hhckluZGV4O1xuXHR2YXIgc3RvcCA9IHRoaXMuX2lucHV0LmluZGV4O1xuXHR2YXIgdGV4dCA9IHRoaXMuX2lucHV0LmdldFRleHQoc3RhcnQsIHN0b3ApO1xuXHR2YXIgbXNnID0gXCJ0b2tlbiByZWNvZ25pdGlvbiBlcnJvciBhdDogJ1wiICsgdGhpcy5nZXRFcnJvckRpc3BsYXkodGV4dCkgKyBcIidcIjtcblx0dmFyIGxpc3RlbmVyID0gdGhpcy5nZXRFcnJvckxpc3RlbmVyRGlzcGF0Y2goKTtcblx0bGlzdGVuZXIuc3ludGF4RXJyb3IodGhpcywgbnVsbCwgdGhpcy5fdG9rZW5TdGFydExpbmUsXG5cdFx0XHR0aGlzLl90b2tlblN0YXJ0Q29sdW1uLCBtc2csIGUpO1xufTtcblxuTGV4ZXIucHJvdG90eXBlLmdldEVycm9yRGlzcGxheSA9IGZ1bmN0aW9uKHMpIHtcblx0dmFyIGQgPSBbXTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKSB7XG5cdFx0ZC5wdXNoKHNbaV0pO1xuXHR9XG5cdHJldHVybiBkLmpvaW4oJycpO1xufTtcblxuTGV4ZXIucHJvdG90eXBlLmdldEVycm9yRGlzcGxheUZvckNoYXIgPSBmdW5jdGlvbihjKSB7XG5cdGlmIChjLmNoYXJDb2RlQXQoMCkgPT09IFRva2VuLkVPRikge1xuXHRcdHJldHVybiBcIjxFT0Y+XCI7XG5cdH0gZWxzZSBpZiAoYyA9PT0gJ1xcbicpIHtcblx0XHRyZXR1cm4gXCJcXFxcblwiO1xuXHR9IGVsc2UgaWYgKGMgPT09ICdcXHQnKSB7XG5cdFx0cmV0dXJuIFwiXFxcXHRcIjtcblx0fSBlbHNlIGlmIChjID09PSAnXFxyJykge1xuXHRcdHJldHVybiBcIlxcXFxyXCI7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGM7XG5cdH1cbn07XG5cbkxleGVyLnByb3RvdHlwZS5nZXRDaGFyRXJyb3JEaXNwbGF5ID0gZnVuY3Rpb24oYykge1xuXHRyZXR1cm4gXCInXCIgKyB0aGlzLmdldEVycm9yRGlzcGxheUZvckNoYXIoYykgKyBcIidcIjtcbn07XG5cbi8vIExleGVycyBjYW4gbm9ybWFsbHkgbWF0Y2ggYW55IGNoYXIgaW4gaXQncyB2b2NhYnVsYXJ5IGFmdGVyIG1hdGNoaW5nXG4vLyBhIHRva2VuLCBzbyBkbyB0aGUgZWFzeSB0aGluZyBhbmQganVzdCBraWxsIGEgY2hhcmFjdGVyIGFuZCBob3BlXG4vLyBpdCBhbGwgd29ya3Mgb3V0LiBZb3UgY2FuIGluc3RlYWQgdXNlIHRoZSBydWxlIGludm9jYXRpb24gc3RhY2tcbi8vIHRvIGRvIHNvcGhpc3RpY2F0ZWQgZXJyb3IgcmVjb3ZlcnkgaWYgeW91IGFyZSBpbiBhIGZyYWdtZW50IHJ1bGUuXG4vLyAvXG5MZXhlci5wcm90b3R5cGUucmVjb3ZlciA9IGZ1bmN0aW9uKHJlKSB7XG5cdGlmICh0aGlzLl9pbnB1dC5MQSgxKSAhPT0gVG9rZW4uRU9GKSB7XG5cdFx0aWYgKHJlIGluc3RhbmNlb2YgTGV4ZXJOb1ZpYWJsZUFsdEV4Y2VwdGlvbikge1xuXHRcdFx0Ly8gc2tpcCBhIGNoYXIgYW5kIHRyeSBhZ2FpblxuXHRcdFx0dGhpcy5faW50ZXJwLmNvbnN1bWUodGhpcy5faW5wdXQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBUT0RPOiBEbyB3ZSBsb3NlIGNoYXJhY3RlciBvciBsaW5lIHBvc2l0aW9uIGluZm9ybWF0aW9uP1xuXHRcdFx0dGhpcy5faW5wdXQuY29uc3VtZSgpO1xuXHRcdH1cblx0fVxufTtcblxuZXhwb3J0cy5MZXhlciA9IExleGVyO1xuIiwiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuXG52YXIgVG9rZW4gPSByZXF1aXJlKCcuL1Rva2VuJykuVG9rZW47XG52YXIgUGFyc2VUcmVlTGlzdGVuZXIgPSByZXF1aXJlKCcuL3RyZWUvVHJlZScpLlBhcnNlVHJlZUxpc3RlbmVyO1xudmFyIFJlY29nbml6ZXIgPSByZXF1aXJlKCcuL1JlY29nbml6ZXInKS5SZWNvZ25pemVyO1xudmFyIERlZmF1bHRFcnJvclN0cmF0ZWd5ID0gcmVxdWlyZSgnLi9lcnJvci9FcnJvclN0cmF0ZWd5JykuRGVmYXVsdEVycm9yU3RyYXRlZ3k7XG52YXIgQVRORGVzZXJpYWxpemVyID0gcmVxdWlyZSgnLi9hdG4vQVRORGVzZXJpYWxpemVyJykuQVRORGVzZXJpYWxpemVyO1xudmFyIEFUTkRlc2VyaWFsaXphdGlvbk9wdGlvbnMgPSByZXF1aXJlKCcuL2F0bi9BVE5EZXNlcmlhbGl6YXRpb25PcHRpb25zJykuQVRORGVzZXJpYWxpemF0aW9uT3B0aW9ucztcbnZhciBUZXJtaW5hbE5vZGUgPSByZXF1aXJlKCcuL3RyZWUvVHJlZScpLlRlcm1pbmFsTm9kZTtcbnZhciBFcnJvck5vZGUgPSByZXF1aXJlKCcuL3RyZWUvVHJlZScpLkVycm9yTm9kZTtcblxuZnVuY3Rpb24gVHJhY2VMaXN0ZW5lcihwYXJzZXIpIHtcblx0UGFyc2VUcmVlTGlzdGVuZXIuY2FsbCh0aGlzKTtcbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcblx0cmV0dXJuIHRoaXM7XG59XG5cblRyYWNlTGlzdGVuZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShQYXJzZVRyZWVMaXN0ZW5lci5wcm90b3R5cGUpO1xuVHJhY2VMaXN0ZW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUcmFjZUxpc3RlbmVyO1xuXG5UcmFjZUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlckV2ZXJ5UnVsZSA9IGZ1bmN0aW9uKGN0eCkge1xuXHRjb25zb2xlLmxvZyhcImVudGVyICAgXCIgKyB0aGlzLnBhcnNlci5ydWxlTmFtZXNbY3R4LnJ1bGVJbmRleF0gKyBcIiwgTFQoMSk9XCIgKyB0aGlzLnBhcnNlci5faW5wdXQuTFQoMSkudGV4dCk7XG59O1xuXG5UcmFjZUxpc3RlbmVyLnByb3RvdHlwZS52aXNpdFRlcm1pbmFsID0gZnVuY3Rpb24oIG5vZGUpIHtcblx0Y29uc29sZS5sb2coXCJjb25zdW1lIFwiICsgbm9kZS5zeW1ib2wgKyBcIiBydWxlIFwiICsgdGhpcy5wYXJzZXIucnVsZU5hbWVzW3RoaXMucGFyc2VyLl9jdHgucnVsZUluZGV4XSk7XG59O1xuXG5UcmFjZUxpc3RlbmVyLnByb3RvdHlwZS5leGl0RXZlcnlSdWxlID0gZnVuY3Rpb24oY3R4KSB7XG5cdGNvbnNvbGUubG9nKFwiZXhpdCAgICBcIiArIHRoaXMucGFyc2VyLnJ1bGVOYW1lc1tjdHgucnVsZUluZGV4XSArIFwiLCBMVCgxKT1cIiArIHRoaXMucGFyc2VyLl9pbnB1dC5MVCgxKS50ZXh0KTtcbn07XG5cbi8vIHRoaXMgaXMgYWxsIHRoZSBwYXJzaW5nIHN1cHBvcnQgY29kZSBlc3NlbnRpYWxseTsgbW9zdCBvZiBpdCBpcyBlcnJvclxuLy8gcmVjb3Zlcnkgc3R1ZmYuLy9cbmZ1bmN0aW9uIFBhcnNlcihpbnB1dCkge1xuXHRSZWNvZ25pemVyLmNhbGwodGhpcyk7XG5cdC8vIFRoZSBpbnB1dCBzdHJlYW0uXG5cdHRoaXMuX2lucHV0ID0gbnVsbDtcblx0Ly8gVGhlIGVycm9yIGhhbmRsaW5nIHN0cmF0ZWd5IGZvciB0aGUgcGFyc2VyLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBhIG5ld1xuXHQvLyBpbnN0YW5jZSBvZiB7QGxpbmsgRGVmYXVsdEVycm9yU3RyYXRlZ3l9LlxuXHR0aGlzLl9lcnJIYW5kbGVyID0gbmV3IERlZmF1bHRFcnJvclN0cmF0ZWd5KCk7XG5cdHRoaXMuX3ByZWNlZGVuY2VTdGFjayA9IFtdO1xuXHR0aGlzLl9wcmVjZWRlbmNlU3RhY2sucHVzaCgwKTtcblx0Ly8gVGhlIHtAbGluayBQYXJzZXJSdWxlQ29udGV4dH0gb2JqZWN0IGZvciB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBydWxlLlxuXHQvLyB0aGlzIGlzIGFsd2F5cyBub24tbnVsbCBkdXJpbmcgdGhlIHBhcnNpbmcgcHJvY2Vzcy5cblx0dGhpcy5fY3R4ID0gbnVsbDtcblx0Ly8gU3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IHRoZSBwYXJzZXIgc2hvdWxkIGNvbnN0cnVjdCBhIHBhcnNlIHRyZWUgZHVyaW5nXG5cdC8vIHRoZSBwYXJzaW5nIHByb2Nlc3MuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHtAY29kZSB0cnVlfS5cblx0dGhpcy5idWlsZFBhcnNlVHJlZXMgPSB0cnVlO1xuXHQvLyBXaGVuIHtAbGluayAvL3NldFRyYWNlfXtAY29kZSAodHJ1ZSl9IGlzIGNhbGxlZCwgYSByZWZlcmVuY2UgdG8gdGhlXG5cdC8vIHtAbGluayBUcmFjZUxpc3RlbmVyfSBpcyBzdG9yZWQgaGVyZSBzbyBpdCBjYW4gYmUgZWFzaWx5IHJlbW92ZWQgaW4gYVxuXHQvLyBsYXRlciBjYWxsIHRvIHtAbGluayAvL3NldFRyYWNlfXtAY29kZSAoZmFsc2UpfS4gVGhlIGxpc3RlbmVyIGl0c2VsZiBpc1xuXHQvLyBpbXBsZW1lbnRlZCBhcyBhIHBhcnNlciBsaXN0ZW5lciBzbyB0aGlzIGZpZWxkIGlzIG5vdCBkaXJlY3RseSB1c2VkIGJ5XG5cdC8vIG90aGVyIHBhcnNlciBtZXRob2RzLlxuXHR0aGlzLl90cmFjZXIgPSBudWxsO1xuXHQvLyBUaGUgbGlzdCBvZiB7QGxpbmsgUGFyc2VUcmVlTGlzdGVuZXJ9IGxpc3RlbmVycyByZWdpc3RlcmVkIHRvIHJlY2VpdmVcblx0Ly8gZXZlbnRzIGR1cmluZyB0aGUgcGFyc2UuXG5cdHRoaXMuX3BhcnNlTGlzdGVuZXJzID0gbnVsbDtcblx0Ly8gVGhlIG51bWJlciBvZiBzeW50YXggZXJyb3JzIHJlcG9ydGVkIGR1cmluZyBwYXJzaW5nLiB0aGlzIHZhbHVlIGlzXG5cdC8vIGluY3JlbWVudGVkIGVhY2ggdGltZSB7QGxpbmsgLy9ub3RpZnlFcnJvckxpc3RlbmVyc30gaXMgY2FsbGVkLlxuXHR0aGlzLl9zeW50YXhFcnJvcnMgPSAwO1xuXHR0aGlzLnNldElucHV0U3RyZWFtKGlucHV0KTtcblx0cmV0dXJuIHRoaXM7XG59XG5cblBhcnNlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFJlY29nbml6ZXIucHJvdG90eXBlKTtcblBhcnNlci5wcm90b3R5cGUuY29udHJ1Y3RvciA9IFBhcnNlcjtcblxuLy8gdGhpcyBmaWVsZCBtYXBzIGZyb20gdGhlIHNlcmlhbGl6ZWQgQVROIHN0cmluZyB0byB0aGUgZGVzZXJpYWxpemVkIHtAbGlua1xuLy8gQVROfSB3aXRoXG4vLyBieXBhc3MgYWx0ZXJuYXRpdmVzLlxuLy9cbi8vIEBzZWUgQVRORGVzZXJpYWxpemF0aW9uT3B0aW9ucy8vaXNHZW5lcmF0ZVJ1bGVCeXBhc3NUcmFuc2l0aW9ucygpXG4vL1xuUGFyc2VyLmJ5cGFzc0FsdHNBdG5DYWNoZSA9IHt9O1xuXG4vLyByZXNldCB0aGUgcGFyc2VyJ3Mgc3RhdGUvL1xuUGFyc2VyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKCkge1xuXHRpZiAodGhpcy5faW5wdXQgIT09IG51bGwpIHtcblx0XHR0aGlzLl9pbnB1dC5zZWVrKDApO1xuXHR9XG5cdHRoaXMuX2VyckhhbmRsZXIucmVzZXQodGhpcyk7XG5cdHRoaXMuX2N0eCA9IG51bGw7XG5cdHRoaXMuX3N5bnRheEVycm9ycyA9IDA7XG5cdHRoaXMuc2V0VHJhY2UoZmFsc2UpO1xuXHR0aGlzLl9wcmVjZWRlbmNlU3RhY2sgPSBbXTtcblx0dGhpcy5fcHJlY2VkZW5jZVN0YWNrLnB1c2goMCk7XG5cdGlmICh0aGlzLl9pbnRlcnAgIT09IG51bGwpIHtcblx0XHR0aGlzLl9pbnRlcnAucmVzZXQoKTtcblx0fVxufTtcblxuLy8gTWF0Y2ggY3VycmVudCBpbnB1dCBzeW1ib2wgYWdhaW5zdCB7QGNvZGUgdHR5cGV9LiBJZiB0aGUgc3ltYm9sIHR5cGVcbi8vIG1hdGNoZXMsIHtAbGluayBBTlRMUkVycm9yU3RyYXRlZ3kvL3JlcG9ydE1hdGNofSBhbmQge0BsaW5rIC8vY29uc3VtZX0gYXJlXG4vLyBjYWxsZWQgdG8gY29tcGxldGUgdGhlIG1hdGNoIHByb2Nlc3MuXG4vL1xuLy8gPHA+SWYgdGhlIHN5bWJvbCB0eXBlIGRvZXMgbm90IG1hdGNoLFxuLy8ge0BsaW5rIEFOVExSRXJyb3JTdHJhdGVneS8vcmVjb3ZlcklubGluZX0gaXMgY2FsbGVkIG9uIHRoZSBjdXJyZW50IGVycm9yXG4vLyBzdHJhdGVneSB0byBhdHRlbXB0IHJlY292ZXJ5LiBJZiB7QGxpbmsgLy9nZXRCdWlsZFBhcnNlVHJlZX0gaXNcbi8vIHtAY29kZSB0cnVlfSBhbmQgdGhlIHRva2VuIGluZGV4IG9mIHRoZSBzeW1ib2wgcmV0dXJuZWQgYnlcbi8vIHtAbGluayBBTlRMUkVycm9yU3RyYXRlZ3kvL3JlY292ZXJJbmxpbmV9IGlzIC0xLCB0aGUgc3ltYm9sIGlzIGFkZGVkIHRvXG4vLyB0aGUgcGFyc2UgdHJlZSBieSBjYWxsaW5nIHtAbGluayBQYXJzZXJSdWxlQ29udGV4dC8vYWRkRXJyb3JOb2RlfS48L3A+XG4vL1xuLy8gQHBhcmFtIHR0eXBlIHRoZSB0b2tlbiB0eXBlIHRvIG1hdGNoXG4vLyBAcmV0dXJuIHRoZSBtYXRjaGVkIHN5bWJvbFxuLy8gQHRocm93cyBSZWNvZ25pdGlvbkV4Y2VwdGlvbiBpZiB0aGUgY3VycmVudCBpbnB1dCBzeW1ib2wgZGlkIG5vdCBtYXRjaFxuLy8ge0Bjb2RlIHR0eXBlfSBhbmQgdGhlIGVycm9yIHN0cmF0ZWd5IGNvdWxkIG5vdCByZWNvdmVyIGZyb20gdGhlXG4vLyBtaXNtYXRjaGVkIHN5bWJvbFxuXG5QYXJzZXIucHJvdG90eXBlLm1hdGNoID0gZnVuY3Rpb24odHR5cGUpIHtcblx0dmFyIHQgPSB0aGlzLmdldEN1cnJlbnRUb2tlbigpO1xuXHRpZiAodC50eXBlID09PSB0dHlwZSkge1xuXHRcdHRoaXMuX2VyckhhbmRsZXIucmVwb3J0TWF0Y2godGhpcyk7XG5cdFx0dGhpcy5jb25zdW1lKCk7XG5cdH0gZWxzZSB7XG5cdFx0dCA9IHRoaXMuX2VyckhhbmRsZXIucmVjb3ZlcklubGluZSh0aGlzKTtcblx0XHRpZiAodGhpcy5idWlsZFBhcnNlVHJlZXMgJiYgdC50b2tlbkluZGV4ID09PSAtMSkge1xuXHRcdFx0Ly8gd2UgbXVzdCBoYXZlIGNvbmp1cmVkIHVwIGEgbmV3IHRva2VuIGR1cmluZyBzaW5nbGUgdG9rZW5cblx0XHRcdC8vIGluc2VydGlvblxuXHRcdFx0Ly8gaWYgaXQncyBub3QgdGhlIGN1cnJlbnQgc3ltYm9sXG5cdFx0XHR0aGlzLl9jdHguYWRkRXJyb3JOb2RlKHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdDtcbn07XG4vLyBNYXRjaCBjdXJyZW50IGlucHV0IHN5bWJvbCBhcyBhIHdpbGRjYXJkLiBJZiB0aGUgc3ltYm9sIHR5cGUgbWF0Y2hlc1xuLy8gKGkuZS4gaGFzIGEgdmFsdWUgZ3JlYXRlciB0aGFuIDApLCB7QGxpbmsgQU5UTFJFcnJvclN0cmF0ZWd5Ly9yZXBvcnRNYXRjaH1cbi8vIGFuZCB7QGxpbmsgLy9jb25zdW1lfSBhcmUgY2FsbGVkIHRvIGNvbXBsZXRlIHRoZSBtYXRjaCBwcm9jZXNzLlxuLy9cbi8vIDxwPklmIHRoZSBzeW1ib2wgdHlwZSBkb2VzIG5vdCBtYXRjaCxcbi8vIHtAbGluayBBTlRMUkVycm9yU3RyYXRlZ3kvL3JlY292ZXJJbmxpbmV9IGlzIGNhbGxlZCBvbiB0aGUgY3VycmVudCBlcnJvclxuLy8gc3RyYXRlZ3kgdG8gYXR0ZW1wdCByZWNvdmVyeS4gSWYge0BsaW5rIC8vZ2V0QnVpbGRQYXJzZVRyZWV9IGlzXG4vLyB7QGNvZGUgdHJ1ZX0gYW5kIHRoZSB0b2tlbiBpbmRleCBvZiB0aGUgc3ltYm9sIHJldHVybmVkIGJ5XG4vLyB7QGxpbmsgQU5UTFJFcnJvclN0cmF0ZWd5Ly9yZWNvdmVySW5saW5lfSBpcyAtMSwgdGhlIHN5bWJvbCBpcyBhZGRlZCB0b1xuLy8gdGhlIHBhcnNlIHRyZWUgYnkgY2FsbGluZyB7QGxpbmsgUGFyc2VyUnVsZUNvbnRleHQvL2FkZEVycm9yTm9kZX0uPC9wPlxuLy9cbi8vIEByZXR1cm4gdGhlIG1hdGNoZWQgc3ltYm9sXG4vLyBAdGhyb3dzIFJlY29nbml0aW9uRXhjZXB0aW9uIGlmIHRoZSBjdXJyZW50IGlucHV0IHN5bWJvbCBkaWQgbm90IG1hdGNoXG4vLyBhIHdpbGRjYXJkIGFuZCB0aGUgZXJyb3Igc3RyYXRlZ3kgY291bGQgbm90IHJlY292ZXIgZnJvbSB0aGUgbWlzbWF0Y2hlZFxuLy8gc3ltYm9sXG5cblBhcnNlci5wcm90b3R5cGUubWF0Y2hXaWxkY2FyZCA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgdCA9IHRoaXMuZ2V0Q3VycmVudFRva2VuKCk7XG5cdGlmICh0LnR5cGUgPiAwKSB7XG5cdFx0dGhpcy5fZXJySGFuZGxlci5yZXBvcnRNYXRjaCh0aGlzKTtcblx0XHR0aGlzLmNvbnN1bWUoKTtcblx0fSBlbHNlIHtcblx0XHR0ID0gdGhpcy5fZXJySGFuZGxlci5yZWNvdmVySW5saW5lKHRoaXMpO1xuXHRcdGlmICh0aGlzLl9idWlsZFBhcnNlVHJlZXMgJiYgdC50b2tlbkluZGV4ID09PSAtMSkge1xuXHRcdFx0Ly8gd2UgbXVzdCBoYXZlIGNvbmp1cmVkIHVwIGEgbmV3IHRva2VuIGR1cmluZyBzaW5nbGUgdG9rZW5cblx0XHRcdC8vIGluc2VydGlvblxuXHRcdFx0Ly8gaWYgaXQncyBub3QgdGhlIGN1cnJlbnQgc3ltYm9sXG5cdFx0XHR0aGlzLl9jdHguYWRkRXJyb3JOb2RlKHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdDtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuZ2V0UGFyc2VMaXN0ZW5lcnMgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuX3BhcnNlTGlzdGVuZXJzIHx8IFtdO1xufTtcblxuLy8gUmVnaXN0ZXJzIHtAY29kZSBsaXN0ZW5lcn0gdG8gcmVjZWl2ZSBldmVudHMgZHVyaW5nIHRoZSBwYXJzaW5nIHByb2Nlc3MuXG4vL1xuLy8gPHA+VG8gc3VwcG9ydCBvdXRwdXQtcHJlc2VydmluZyBncmFtbWFyIHRyYW5zZm9ybWF0aW9ucyAoaW5jbHVkaW5nIGJ1dCBub3Rcbi8vIGxpbWl0ZWQgdG8gbGVmdC1yZWN1cnNpb24gcmVtb3ZhbCwgYXV0b21hdGVkIGxlZnQtZmFjdG9yaW5nLCBhbmRcbi8vIG9wdGltaXplZCBjb2RlIGdlbmVyYXRpb24pLCBjYWxscyB0byBsaXN0ZW5lciBtZXRob2RzIGR1cmluZyB0aGUgcGFyc2Vcbi8vIG1heSBkaWZmZXIgc3Vic3RhbnRpYWxseSBmcm9tIGNhbGxzIG1hZGUgYnlcbi8vIHtAbGluayBQYXJzZVRyZWVXYWxrZXIvL0RFRkFVTFR9IHVzZWQgYWZ0ZXIgdGhlIHBhcnNlIGlzIGNvbXBsZXRlLiBJblxuLy8gcGFydGljdWxhciwgcnVsZSBlbnRyeSBhbmQgZXhpdCBldmVudHMgbWF5IG9jY3VyIGluIGEgZGlmZmVyZW50IG9yZGVyXG4vLyBkdXJpbmcgdGhlIHBhcnNlIHRoYW4gYWZ0ZXIgdGhlIHBhcnNlci4gSW4gYWRkaXRpb24sIGNhbGxzIHRvIGNlcnRhaW5cbi8vIHJ1bGUgZW50cnkgbWV0aG9kcyBtYXkgYmUgb21pdHRlZC48L3A+XG4vL1xuLy8gPHA+V2l0aCB0aGUgZm9sbG93aW5nIHNwZWNpZmljIGV4Y2VwdGlvbnMsIGNhbGxzIHRvIGxpc3RlbmVyIGV2ZW50cyBhcmVcbi8vIDxlbT5kZXRlcm1pbmlzdGljPC9lbT4sIGkuZS4gZm9yIGlkZW50aWNhbCBpbnB1dCB0aGUgY2FsbHMgdG8gbGlzdGVuZXJcbi8vIG1ldGhvZHMgd2lsbCBiZSB0aGUgc2FtZS48L3A+XG4vL1xuLy8gPHVsPlxuLy8gPGxpPkFsdGVyYXRpb25zIHRvIHRoZSBncmFtbWFyIHVzZWQgdG8gZ2VuZXJhdGUgY29kZSBtYXkgY2hhbmdlIHRoZVxuLy8gYmVoYXZpb3Igb2YgdGhlIGxpc3RlbmVyIGNhbGxzLjwvbGk+XG4vLyA8bGk+QWx0ZXJhdGlvbnMgdG8gdGhlIGNvbW1hbmQgbGluZSBvcHRpb25zIHBhc3NlZCB0byBBTlRMUiA0IHdoZW5cbi8vIGdlbmVyYXRpbmcgdGhlIHBhcnNlciBtYXkgY2hhbmdlIHRoZSBiZWhhdmlvciBvZiB0aGUgbGlzdGVuZXIgY2FsbHMuPC9saT5cbi8vIDxsaT5DaGFuZ2luZyB0aGUgdmVyc2lvbiBvZiB0aGUgQU5UTFIgVG9vbCB1c2VkIHRvIGdlbmVyYXRlIHRoZSBwYXJzZXJcbi8vIG1heSBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mIHRoZSBsaXN0ZW5lciBjYWxscy48L2xpPlxuLy8gPC91bD5cbi8vXG4vLyBAcGFyYW0gbGlzdGVuZXIgdGhlIGxpc3RlbmVyIHRvIGFkZFxuLy9cbi8vIEB0aHJvd3MgTnVsbFBvaW50ZXJFeGNlcHRpb24gaWYge0Bjb2RlfSBsaXN0ZW5lciBpcyB7QGNvZGUgbnVsbH1cbi8vXG5QYXJzZXIucHJvdG90eXBlLmFkZFBhcnNlTGlzdGVuZXIgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuXHRpZiAobGlzdGVuZXIgPT09IG51bGwpIHtcblx0XHR0aHJvdyBcImxpc3RlbmVyXCI7XG5cdH1cblx0aWYgKHRoaXMuX3BhcnNlTGlzdGVuZXJzID09PSBudWxsKSB7XG5cdFx0dGhpcy5fcGFyc2VMaXN0ZW5lcnMgPSBbXTtcblx0fVxuXHR0aGlzLl9wYXJzZUxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbn07XG5cbi8vXG4vLyBSZW1vdmUge0Bjb2RlIGxpc3RlbmVyfSBmcm9tIHRoZSBsaXN0IG9mIHBhcnNlIGxpc3RlbmVycy5cbi8vXG4vLyA8cD5JZiB7QGNvZGUgbGlzdGVuZXJ9IGlzIHtAY29kZSBudWxsfSBvciBoYXMgbm90IGJlZW4gYWRkZWQgYXMgYSBwYXJzZVxuLy8gbGlzdGVuZXIsIHRoaXMgbWV0aG9kIGRvZXMgbm90aGluZy48L3A+XG4vLyBAcGFyYW0gbGlzdGVuZXIgdGhlIGxpc3RlbmVyIHRvIHJlbW92ZVxuLy9cblBhcnNlci5wcm90b3R5cGUucmVtb3ZlUGFyc2VMaXN0ZW5lciA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG5cdGlmICh0aGlzLl9wYXJzZUxpc3RlbmVycyAhPT0gbnVsbCkge1xuXHRcdHZhciBpZHggPSB0aGlzLl9wYXJzZUxpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcblx0XHRpZiAoaWR4ID49IDApIHtcblx0XHRcdHRoaXMuX3BhcnNlTGlzdGVuZXJzLnNwbGljZShpZHgsIDEpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5fcGFyc2VMaXN0ZW5lcnMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHR0aGlzLl9wYXJzZUxpc3RlbmVycyA9IG51bGw7XG5cdFx0fVxuXHR9XG59O1xuXG4vLyBSZW1vdmUgYWxsIHBhcnNlIGxpc3RlbmVycy5cblBhcnNlci5wcm90b3R5cGUucmVtb3ZlUGFyc2VMaXN0ZW5lcnMgPSBmdW5jdGlvbigpIHtcblx0dGhpcy5fcGFyc2VMaXN0ZW5lcnMgPSBudWxsO1xufTtcblxuLy8gTm90aWZ5IGFueSBwYXJzZSBsaXN0ZW5lcnMgb2YgYW4gZW50ZXIgcnVsZSBldmVudC5cblBhcnNlci5wcm90b3R5cGUudHJpZ2dlckVudGVyUnVsZUV2ZW50ID0gZnVuY3Rpb24oKSB7XG5cdGlmICh0aGlzLl9wYXJzZUxpc3RlbmVycyAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgY3R4ID0gdGhpcy5fY3R4O1xuXHRcdHRoaXMuX3BhcnNlTGlzdGVuZXJzLm1hcChmdW5jdGlvbihsaXN0ZW5lcikge1xuXHRcdFx0bGlzdGVuZXIuZW50ZXJFdmVyeVJ1bGUoY3R4KTtcblx0XHRcdGN0eC5lbnRlclJ1bGUobGlzdGVuZXIpO1xuXHRcdH0pO1xuXHR9XG59O1xuXG4vL1xuLy8gTm90aWZ5IGFueSBwYXJzZSBsaXN0ZW5lcnMgb2YgYW4gZXhpdCBydWxlIGV2ZW50LlxuLy9cbi8vIEBzZWUgLy9hZGRQYXJzZUxpc3RlbmVyXG4vL1xuUGFyc2VyLnByb3RvdHlwZS50cmlnZ2VyRXhpdFJ1bGVFdmVudCA9IGZ1bmN0aW9uKCkge1xuXHRpZiAodGhpcy5fcGFyc2VMaXN0ZW5lcnMgIT09IG51bGwpIHtcblx0XHQvLyByZXZlcnNlIG9yZGVyIHdhbGsgb2YgbGlzdGVuZXJzXG4gICAgICAgIHZhciBjdHggPSB0aGlzLl9jdHg7XG5cdFx0dGhpcy5fcGFyc2VMaXN0ZW5lcnMuc2xpY2UoMCkucmV2ZXJzZSgpLm1hcChmdW5jdGlvbihsaXN0ZW5lcikge1xuXHRcdFx0Y3R4LmV4aXRSdWxlKGxpc3RlbmVyKTtcblx0XHRcdGxpc3RlbmVyLmV4aXRFdmVyeVJ1bGUoY3R4KTtcblx0XHR9KTtcblx0fVxufTtcblxuUGFyc2VyLnByb3RvdHlwZS5nZXRUb2tlbkZhY3RvcnkgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuX2lucHV0LnRva2VuU291cmNlLl9mYWN0b3J5O1xufTtcblxuLy8gVGVsbCBvdXIgdG9rZW4gc291cmNlIGFuZCBlcnJvciBzdHJhdGVneSBhYm91dCBhIG5ldyB3YXkgdG8gY3JlYXRlIHRva2Vucy4vL1xuUGFyc2VyLnByb3RvdHlwZS5zZXRUb2tlbkZhY3RvcnkgPSBmdW5jdGlvbihmYWN0b3J5KSB7XG5cdHRoaXMuX2lucHV0LnRva2VuU291cmNlLl9mYWN0b3J5ID0gZmFjdG9yeTtcbn07XG5cbi8vIFRoZSBBVE4gd2l0aCBieXBhc3MgYWx0ZXJuYXRpdmVzIGlzIGV4cGVuc2l2ZSB0byBjcmVhdGUgc28gd2UgY3JlYXRlIGl0XG4vLyBsYXppbHkuXG4vL1xuLy8gQHRocm93cyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBpZiB0aGUgY3VycmVudCBwYXJzZXIgZG9lcyBub3Rcbi8vIGltcGxlbWVudCB0aGUge0BsaW5rIC8vZ2V0U2VyaWFsaXplZEFUTigpfSBtZXRob2QuXG4vL1xuUGFyc2VyLnByb3RvdHlwZS5nZXRBVE5XaXRoQnlwYXNzQWx0cyA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgc2VyaWFsaXplZEF0biA9IHRoaXMuZ2V0U2VyaWFsaXplZEFUTigpO1xuXHRpZiAoc2VyaWFsaXplZEF0biA9PT0gbnVsbCkge1xuXHRcdHRocm93IFwiVGhlIGN1cnJlbnQgcGFyc2VyIGRvZXMgbm90IHN1cHBvcnQgYW4gQVROIHdpdGggYnlwYXNzIGFsdGVybmF0aXZlcy5cIjtcblx0fVxuXHR2YXIgcmVzdWx0ID0gdGhpcy5ieXBhc3NBbHRzQXRuQ2FjaGVbc2VyaWFsaXplZEF0bl07XG5cdGlmIChyZXN1bHQgPT09IG51bGwpIHtcblx0XHR2YXIgZGVzZXJpYWxpemF0aW9uT3B0aW9ucyA9IG5ldyBBVE5EZXNlcmlhbGl6YXRpb25PcHRpb25zKCk7XG5cdFx0ZGVzZXJpYWxpemF0aW9uT3B0aW9ucy5nZW5lcmF0ZVJ1bGVCeXBhc3NUcmFuc2l0aW9ucyA9IHRydWU7XG5cdFx0cmVzdWx0ID0gbmV3IEFUTkRlc2VyaWFsaXplcihkZXNlcmlhbGl6YXRpb25PcHRpb25zKVxuXHRcdFx0XHQuZGVzZXJpYWxpemUoc2VyaWFsaXplZEF0bik7XG5cdFx0dGhpcy5ieXBhc3NBbHRzQXRuQ2FjaGVbc2VyaWFsaXplZEF0bl0gPSByZXN1bHQ7XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIFRoZSBwcmVmZXJyZWQgbWV0aG9kIG9mIGdldHRpbmcgYSB0cmVlIHBhdHRlcm4uIEZvciBleGFtcGxlLCBoZXJlJ3MgYVxuLy8gc2FtcGxlIHVzZTpcbi8vXG4vLyA8cHJlPlxuLy8gUGFyc2VUcmVlIHQgPSBwYXJzZXIuZXhwcigpO1xuLy8gUGFyc2VUcmVlUGF0dGVybiBwID0gcGFyc2VyLmNvbXBpbGVQYXJzZVRyZWVQYXR0ZXJuKFwiJmx0O0lEJmd0OyswXCIsXG4vLyBNeVBhcnNlci5SVUxFX2V4cHIpO1xuLy8gUGFyc2VUcmVlTWF0Y2ggbSA9IHAubWF0Y2godCk7XG4vLyBTdHJpbmcgaWQgPSBtLmdldChcIklEXCIpO1xuLy8gPC9wcmU+XG5cbnZhciBMZXhlciA9IHJlcXVpcmUoJy4vTGV4ZXInKS5MZXhlcjtcblxuUGFyc2VyLnByb3RvdHlwZS5jb21waWxlUGFyc2VUcmVlUGF0dGVybiA9IGZ1bmN0aW9uKHBhdHRlcm4sIHBhdHRlcm5SdWxlSW5kZXgsIGxleGVyKSB7XG5cdGxleGVyID0gbGV4ZXIgfHwgbnVsbDtcblx0aWYgKGxleGVyID09PSBudWxsKSB7XG5cdFx0aWYgKHRoaXMuZ2V0VG9rZW5TdHJlYW0oKSAhPT0gbnVsbCkge1xuXHRcdFx0dmFyIHRva2VuU291cmNlID0gdGhpcy5nZXRUb2tlblN0cmVhbSgpLnRva2VuU291cmNlO1xuXHRcdFx0aWYgKHRva2VuU291cmNlIGluc3RhbmNlb2YgTGV4ZXIpIHtcblx0XHRcdFx0bGV4ZXIgPSB0b2tlblNvdXJjZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0aWYgKGxleGVyID09PSBudWxsKSB7XG5cdFx0dGhyb3cgXCJQYXJzZXIgY2FuJ3QgZGlzY292ZXIgYSBsZXhlciB0byB1c2VcIjtcblx0fVxuXHR2YXIgbSA9IG5ldyBQYXJzZVRyZWVQYXR0ZXJuTWF0Y2hlcihsZXhlciwgdGhpcyk7XG5cdHJldHVybiBtLmNvbXBpbGUocGF0dGVybiwgcGF0dGVyblJ1bGVJbmRleCk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLmdldElucHV0U3RyZWFtID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLmdldFRva2VuU3RyZWFtKCk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLnNldElucHV0U3RyZWFtID0gZnVuY3Rpb24oaW5wdXQpIHtcblx0dGhpcy5zZXRUb2tlblN0cmVhbShpbnB1dCk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLmdldFRva2VuU3RyZWFtID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLl9pbnB1dDtcbn07XG5cbi8vIFNldCB0aGUgdG9rZW4gc3RyZWFtIGFuZCByZXNldCB0aGUgcGFyc2VyLi8vXG5QYXJzZXIucHJvdG90eXBlLnNldFRva2VuU3RyZWFtID0gZnVuY3Rpb24oaW5wdXQpIHtcblx0dGhpcy5faW5wdXQgPSBudWxsO1xuXHR0aGlzLnJlc2V0KCk7XG5cdHRoaXMuX2lucHV0ID0gaW5wdXQ7XG59O1xuXG4vLyBNYXRjaCBuZWVkcyB0byByZXR1cm4gdGhlIGN1cnJlbnQgaW5wdXQgc3ltYm9sLCB3aGljaCBnZXRzIHB1dFxuLy8gaW50byB0aGUgbGFiZWwgZm9yIHRoZSBhc3NvY2lhdGVkIHRva2VuIHJlZjsgZS5nLiwgeD1JRC5cbi8vXG5QYXJzZXIucHJvdG90eXBlLmdldEN1cnJlbnRUb2tlbiA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5faW5wdXQuTFQoMSk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLm5vdGlmeUVycm9yTGlzdGVuZXJzID0gZnVuY3Rpb24obXNnLCBvZmZlbmRpbmdUb2tlbiwgZXJyKSB7XG5cdG9mZmVuZGluZ1Rva2VuID0gb2ZmZW5kaW5nVG9rZW4gfHwgbnVsbDtcblx0ZXJyID0gZXJyIHx8IG51bGw7XG5cdGlmIChvZmZlbmRpbmdUb2tlbiA9PT0gbnVsbCkge1xuXHRcdG9mZmVuZGluZ1Rva2VuID0gdGhpcy5nZXRDdXJyZW50VG9rZW4oKTtcblx0fVxuXHR0aGlzLl9zeW50YXhFcnJvcnMgKz0gMTtcblx0dmFyIGxpbmUgPSBvZmZlbmRpbmdUb2tlbi5saW5lO1xuXHR2YXIgY29sdW1uID0gb2ZmZW5kaW5nVG9rZW4uY29sdW1uO1xuXHR2YXIgbGlzdGVuZXIgPSB0aGlzLmdldEVycm9yTGlzdGVuZXJEaXNwYXRjaCgpO1xuXHRsaXN0ZW5lci5zeW50YXhFcnJvcih0aGlzLCBvZmZlbmRpbmdUb2tlbiwgbGluZSwgY29sdW1uLCBtc2csIGVycik7XG59O1xuXG4vL1xuLy8gQ29uc3VtZSBhbmQgcmV0dXJuIHRoZSB7QGxpbmtwbGFpbiAvL2dldEN1cnJlbnRUb2tlbiBjdXJyZW50IHN5bWJvbH0uXG4vL1xuLy8gPHA+RS5nLiwgZ2l2ZW4gdGhlIGZvbGxvd2luZyBpbnB1dCB3aXRoIHtAY29kZSBBfSBiZWluZyB0aGUgY3VycmVudFxuLy8gbG9va2FoZWFkIHN5bWJvbCwgdGhpcyBmdW5jdGlvbiBtb3ZlcyB0aGUgY3Vyc29yIHRvIHtAY29kZSBCfSBhbmQgcmV0dXJuc1xuLy8ge0Bjb2RlIEF9LjwvcD5cbi8vXG4vLyA8cHJlPlxuLy8gQSBCXG4vLyBeXG4vLyA8L3ByZT5cbi8vXG4vLyBJZiB0aGUgcGFyc2VyIGlzIG5vdCBpbiBlcnJvciByZWNvdmVyeSBtb2RlLCB0aGUgY29uc3VtZWQgc3ltYm9sIGlzIGFkZGVkXG4vLyB0byB0aGUgcGFyc2UgdHJlZSB1c2luZyB7QGxpbmsgUGFyc2VyUnVsZUNvbnRleHQvL2FkZENoaWxkKFRva2VuKX0sIGFuZFxuLy8ge0BsaW5rIFBhcnNlVHJlZUxpc3RlbmVyLy92aXNpdFRlcm1pbmFsfSBpcyBjYWxsZWQgb24gYW55IHBhcnNlIGxpc3RlbmVycy5cbi8vIElmIHRoZSBwYXJzZXIgPGVtPmlzPC9lbT4gaW4gZXJyb3IgcmVjb3ZlcnkgbW9kZSwgdGhlIGNvbnN1bWVkIHN5bWJvbCBpc1xuLy8gYWRkZWQgdG8gdGhlIHBhcnNlIHRyZWUgdXNpbmdcbi8vIHtAbGluayBQYXJzZXJSdWxlQ29udGV4dC8vYWRkRXJyb3JOb2RlKFRva2VuKX0sIGFuZFxuLy8ge0BsaW5rIFBhcnNlVHJlZUxpc3RlbmVyLy92aXNpdEVycm9yTm9kZX0gaXMgY2FsbGVkIG9uIGFueSBwYXJzZVxuLy8gbGlzdGVuZXJzLlxuLy9cblBhcnNlci5wcm90b3R5cGUuY29uc3VtZSA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgbyA9IHRoaXMuZ2V0Q3VycmVudFRva2VuKCk7XG5cdGlmIChvLnR5cGUgIT09IFRva2VuLkVPRikge1xuXHRcdHRoaXMuZ2V0SW5wdXRTdHJlYW0oKS5jb25zdW1lKCk7XG5cdH1cblx0dmFyIGhhc0xpc3RlbmVyID0gdGhpcy5fcGFyc2VMaXN0ZW5lcnMgIT09IG51bGwgJiYgdGhpcy5fcGFyc2VMaXN0ZW5lcnMubGVuZ3RoID4gMDtcblx0aWYgKHRoaXMuYnVpbGRQYXJzZVRyZWVzIHx8IGhhc0xpc3RlbmVyKSB7XG5cdFx0dmFyIG5vZGU7XG5cdFx0aWYgKHRoaXMuX2VyckhhbmRsZXIuaW5FcnJvclJlY292ZXJ5TW9kZSh0aGlzKSkge1xuXHRcdFx0bm9kZSA9IHRoaXMuX2N0eC5hZGRFcnJvck5vZGUobyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG5vZGUgPSB0aGlzLl9jdHguYWRkVG9rZW5Ob2RlKG8pO1xuXHRcdH1cbiAgICAgICAgbm9kZS5pbnZva2luZ1N0YXRlID0gdGhpcy5zdGF0ZTtcblx0XHRpZiAoaGFzTGlzdGVuZXIpIHtcblx0XHRcdHRoaXMuX3BhcnNlTGlzdGVuZXJzLm1hcChmdW5jdGlvbihsaXN0ZW5lcikge1xuXHRcdFx0XHRpZiAobm9kZSBpbnN0YW5jZW9mIEVycm9yTm9kZSB8fCAobm9kZS5pc0Vycm9yTm9kZSAhPT0gdW5kZWZpbmVkICYmIG5vZGUuaXNFcnJvck5vZGUoKSkpIHtcblx0XHRcdFx0XHRsaXN0ZW5lci52aXNpdEVycm9yTm9kZShub2RlKTtcblx0XHRcdFx0fSBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgVGVybWluYWxOb2RlKSB7XG5cdFx0XHRcdFx0bGlzdGVuZXIudmlzaXRUZXJtaW5hbChub2RlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5hZGRDb250ZXh0VG9QYXJzZVRyZWUgPSBmdW5jdGlvbigpIHtcblx0Ly8gYWRkIGN1cnJlbnQgY29udGV4dCB0byBwYXJlbnQgaWYgd2UgaGF2ZSBhIHBhcmVudFxuXHRpZiAodGhpcy5fY3R4LnBhcmVudEN0eCAhPT0gbnVsbCkge1xuXHRcdHRoaXMuX2N0eC5wYXJlbnRDdHguYWRkQ2hpbGQodGhpcy5fY3R4KTtcblx0fVxufTtcblxuLy8gQWx3YXlzIGNhbGxlZCBieSBnZW5lcmF0ZWQgcGFyc2VycyB1cG9uIGVudHJ5IHRvIGEgcnVsZS4gQWNjZXNzIGZpZWxkXG4vLyB7QGxpbmsgLy9fY3R4fSBnZXQgdGhlIGN1cnJlbnQgY29udGV4dC5cblxuUGFyc2VyLnByb3RvdHlwZS5lbnRlclJ1bGUgPSBmdW5jdGlvbihsb2NhbGN0eCwgc3RhdGUsIHJ1bGVJbmRleCkge1xuXHR0aGlzLnN0YXRlID0gc3RhdGU7XG5cdHRoaXMuX2N0eCA9IGxvY2FsY3R4O1xuXHR0aGlzLl9jdHguc3RhcnQgPSB0aGlzLl9pbnB1dC5MVCgxKTtcblx0aWYgKHRoaXMuYnVpbGRQYXJzZVRyZWVzKSB7XG5cdFx0dGhpcy5hZGRDb250ZXh0VG9QYXJzZVRyZWUoKTtcblx0fVxuXHRpZiAodGhpcy5fcGFyc2VMaXN0ZW5lcnMgIT09IG51bGwpIHtcblx0XHR0aGlzLnRyaWdnZXJFbnRlclJ1bGVFdmVudCgpO1xuXHR9XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLmV4aXRSdWxlID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMuX2N0eC5zdG9wID0gdGhpcy5faW5wdXQuTFQoLTEpO1xuXHQvLyB0cmlnZ2VyIGV2ZW50IG9uIF9jdHgsIGJlZm9yZSBpdCByZXZlcnRzIHRvIHBhcmVudFxuXHRpZiAodGhpcy5fcGFyc2VMaXN0ZW5lcnMgIT09IG51bGwpIHtcblx0XHR0aGlzLnRyaWdnZXJFeGl0UnVsZUV2ZW50KCk7XG5cdH1cblx0dGhpcy5zdGF0ZSA9IHRoaXMuX2N0eC5pbnZva2luZ1N0YXRlO1xuXHR0aGlzLl9jdHggPSB0aGlzLl9jdHgucGFyZW50Q3R4O1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5lbnRlck91dGVyQWx0ID0gZnVuY3Rpb24obG9jYWxjdHgsIGFsdE51bSkge1xuICAgXHRsb2NhbGN0eC5zZXRBbHROdW1iZXIoYWx0TnVtKTtcblx0Ly8gaWYgd2UgaGF2ZSBuZXcgbG9jYWxjdHgsIG1ha2Ugc3VyZSB3ZSByZXBsYWNlIGV4aXN0aW5nIGN0eFxuXHQvLyB0aGF0IGlzIHByZXZpb3VzIGNoaWxkIG9mIHBhcnNlIHRyZWVcblx0aWYgKHRoaXMuYnVpbGRQYXJzZVRyZWVzICYmIHRoaXMuX2N0eCAhPT0gbG9jYWxjdHgpIHtcblx0XHRpZiAodGhpcy5fY3R4LnBhcmVudEN0eCAhPT0gbnVsbCkge1xuXHRcdFx0dGhpcy5fY3R4LnBhcmVudEN0eC5yZW1vdmVMYXN0Q2hpbGQoKTtcblx0XHRcdHRoaXMuX2N0eC5wYXJlbnRDdHguYWRkQ2hpbGQobG9jYWxjdHgpO1xuXHRcdH1cblx0fVxuXHR0aGlzLl9jdHggPSBsb2NhbGN0eDtcbn07XG5cbi8vIEdldCB0aGUgcHJlY2VkZW5jZSBsZXZlbCBmb3IgdGhlIHRvcC1tb3N0IHByZWNlZGVuY2UgcnVsZS5cbi8vXG4vLyBAcmV0dXJuIFRoZSBwcmVjZWRlbmNlIGxldmVsIGZvciB0aGUgdG9wLW1vc3QgcHJlY2VkZW5jZSBydWxlLCBvciAtMSBpZlxuLy8gdGhlIHBhcnNlciBjb250ZXh0IGlzIG5vdCBuZXN0ZWQgd2l0aGluIGEgcHJlY2VkZW5jZSBydWxlLlxuXG5QYXJzZXIucHJvdG90eXBlLmdldFByZWNlZGVuY2UgPSBmdW5jdGlvbigpIHtcblx0aWYgKHRoaXMuX3ByZWNlZGVuY2VTdGFjay5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gLTE7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHRoaXMuX3ByZWNlZGVuY2VTdGFja1t0aGlzLl9wcmVjZWRlbmNlU3RhY2subGVuZ3RoLTFdO1xuXHR9XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLmVudGVyUmVjdXJzaW9uUnVsZSA9IGZ1bmN0aW9uKGxvY2FsY3R4LCBzdGF0ZSwgcnVsZUluZGV4LFxuXHRcdHByZWNlZGVuY2UpIHtcblx0dGhpcy5zdGF0ZSA9IHN0YXRlO1xuXHR0aGlzLl9wcmVjZWRlbmNlU3RhY2sucHVzaChwcmVjZWRlbmNlKTtcblx0dGhpcy5fY3R4ID0gbG9jYWxjdHg7XG5cdHRoaXMuX2N0eC5zdGFydCA9IHRoaXMuX2lucHV0LkxUKDEpO1xuXHRpZiAodGhpcy5fcGFyc2VMaXN0ZW5lcnMgIT09IG51bGwpIHtcblx0XHR0aGlzLnRyaWdnZXJFbnRlclJ1bGVFdmVudCgpOyAvLyBzaW11bGF0ZXMgcnVsZSBlbnRyeSBmb3Jcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gbGVmdC1yZWN1cnNpdmUgcnVsZXNcblx0fVxufTtcblxuLy9cbi8vIExpa2Uge0BsaW5rIC8vZW50ZXJSdWxlfSBidXQgZm9yIHJlY3Vyc2l2ZSBydWxlcy5cblxuUGFyc2VyLnByb3RvdHlwZS5wdXNoTmV3UmVjdXJzaW9uQ29udGV4dCA9IGZ1bmN0aW9uKGxvY2FsY3R4LCBzdGF0ZSwgcnVsZUluZGV4KSB7XG5cdHZhciBwcmV2aW91cyA9IHRoaXMuX2N0eDtcblx0cHJldmlvdXMucGFyZW50Q3R4ID0gbG9jYWxjdHg7XG5cdHByZXZpb3VzLmludm9raW5nU3RhdGUgPSBzdGF0ZTtcblx0cHJldmlvdXMuc3RvcCA9IHRoaXMuX2lucHV0LkxUKC0xKTtcblxuXHR0aGlzLl9jdHggPSBsb2NhbGN0eDtcblx0dGhpcy5fY3R4LnN0YXJ0ID0gcHJldmlvdXMuc3RhcnQ7XG5cdGlmICh0aGlzLmJ1aWxkUGFyc2VUcmVlcykge1xuXHRcdHRoaXMuX2N0eC5hZGRDaGlsZChwcmV2aW91cyk7XG5cdH1cblx0aWYgKHRoaXMuX3BhcnNlTGlzdGVuZXJzICE9PSBudWxsKSB7XG5cdFx0dGhpcy50cmlnZ2VyRW50ZXJSdWxlRXZlbnQoKTsgLy8gc2ltdWxhdGVzIHJ1bGUgZW50cnkgZm9yXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGxlZnQtcmVjdXJzaXZlIHJ1bGVzXG5cdH1cbn07XG5cblBhcnNlci5wcm90b3R5cGUudW5yb2xsUmVjdXJzaW9uQ29udGV4dHMgPSBmdW5jdGlvbihwYXJlbnRDdHgpIHtcblx0dGhpcy5fcHJlY2VkZW5jZVN0YWNrLnBvcCgpO1xuXHR0aGlzLl9jdHguc3RvcCA9IHRoaXMuX2lucHV0LkxUKC0xKTtcblx0dmFyIHJldEN0eCA9IHRoaXMuX2N0eDsgLy8gc2F2ZSBjdXJyZW50IGN0eCAocmV0dXJuIHZhbHVlKVxuXHQvLyB1bnJvbGwgc28gX2N0eCBpcyBhcyBpdCB3YXMgYmVmb3JlIGNhbGwgdG8gcmVjdXJzaXZlIG1ldGhvZFxuXHRpZiAodGhpcy5fcGFyc2VMaXN0ZW5lcnMgIT09IG51bGwpIHtcblx0XHR3aGlsZSAodGhpcy5fY3R4ICE9PSBwYXJlbnRDdHgpIHtcblx0XHRcdHRoaXMudHJpZ2dlckV4aXRSdWxlRXZlbnQoKTtcblx0XHRcdHRoaXMuX2N0eCA9IHRoaXMuX2N0eC5wYXJlbnRDdHg7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHRoaXMuX2N0eCA9IHBhcmVudEN0eDtcblx0fVxuXHQvLyBob29rIGludG8gdHJlZVxuXHRyZXRDdHgucGFyZW50Q3R4ID0gcGFyZW50Q3R4O1xuXHRpZiAodGhpcy5idWlsZFBhcnNlVHJlZXMgJiYgcGFyZW50Q3R4ICE9PSBudWxsKSB7XG5cdFx0Ly8gYWRkIHJldHVybiBjdHggaW50byBpbnZva2luZyBydWxlJ3MgdHJlZVxuXHRcdHBhcmVudEN0eC5hZGRDaGlsZChyZXRDdHgpO1xuXHR9XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLmdldEludm9raW5nQ29udGV4dCA9IGZ1bmN0aW9uKHJ1bGVJbmRleCkge1xuXHR2YXIgY3R4ID0gdGhpcy5fY3R4O1xuXHR3aGlsZSAoY3R4ICE9PSBudWxsKSB7XG5cdFx0aWYgKGN0eC5ydWxlSW5kZXggPT09IHJ1bGVJbmRleCkge1xuXHRcdFx0cmV0dXJuIGN0eDtcblx0XHR9XG5cdFx0Y3R4ID0gY3R4LnBhcmVudEN0eDtcblx0fVxuXHRyZXR1cm4gbnVsbDtcbn07XG5cblBhcnNlci5wcm90b3R5cGUucHJlY3ByZWQgPSBmdW5jdGlvbihsb2NhbGN0eCwgcHJlY2VkZW5jZSkge1xuXHRyZXR1cm4gcHJlY2VkZW5jZSA+PSB0aGlzLl9wcmVjZWRlbmNlU3RhY2tbdGhpcy5fcHJlY2VkZW5jZVN0YWNrLmxlbmd0aC0xXTtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuaW5Db250ZXh0ID0gZnVuY3Rpb24oY29udGV4dCkge1xuXHQvLyBUT0RPOiB1c2VmdWwgaW4gcGFyc2VyP1xuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG4vL1xuLy8gQ2hlY2tzIHdoZXRoZXIgb3Igbm90IHtAY29kZSBzeW1ib2x9IGNhbiBmb2xsb3cgdGhlIGN1cnJlbnQgc3RhdGUgaW4gdGhlXG4vLyBBVE4uIFRoZSBiZWhhdmlvciBvZiB0aGlzIG1ldGhvZCBpcyBlcXVpdmFsZW50IHRvIHRoZSBmb2xsb3dpbmcsIGJ1dCBpc1xuLy8gaW1wbGVtZW50ZWQgc3VjaCB0aGF0IHRoZSBjb21wbGV0ZSBjb250ZXh0LXNlbnNpdGl2ZSBmb2xsb3cgc2V0IGRvZXMgbm90XG4vLyBuZWVkIHRvIGJlIGV4cGxpY2l0bHkgY29uc3RydWN0ZWQuXG4vL1xuLy8gPHByZT5cbi8vIHJldHVybiBnZXRFeHBlY3RlZFRva2VucygpLmNvbnRhaW5zKHN5bWJvbCk7XG4vLyA8L3ByZT5cbi8vXG4vLyBAcGFyYW0gc3ltYm9sIHRoZSBzeW1ib2wgdHlwZSB0byBjaGVja1xuLy8gQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYge0Bjb2RlIHN5bWJvbH0gY2FuIGZvbGxvdyB0aGUgY3VycmVudCBzdGF0ZSBpblxuLy8gdGhlIEFUTiwgb3RoZXJ3aXNlIHtAY29kZSBmYWxzZX0uXG5cblBhcnNlci5wcm90b3R5cGUuaXNFeHBlY3RlZFRva2VuID0gZnVuY3Rpb24oc3ltYm9sKSB7XG5cdHZhciBhdG4gPSB0aGlzLl9pbnRlcnAuYXRuO1xuXHR2YXIgY3R4ID0gdGhpcy5fY3R4O1xuXHR2YXIgcyA9IGF0bi5zdGF0ZXNbdGhpcy5zdGF0ZV07XG5cdHZhciBmb2xsb3dpbmcgPSBhdG4ubmV4dFRva2VucyhzKTtcblx0aWYgKGZvbGxvd2luZy5jb250YWlucyhzeW1ib2wpKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0aWYgKCFmb2xsb3dpbmcuY29udGFpbnMoVG9rZW4uRVBTSUxPTikpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0d2hpbGUgKGN0eCAhPT0gbnVsbCAmJiBjdHguaW52b2tpbmdTdGF0ZSA+PSAwICYmIGZvbGxvd2luZy5jb250YWlucyhUb2tlbi5FUFNJTE9OKSkge1xuXHRcdHZhciBpbnZva2luZ1N0YXRlID0gYXRuLnN0YXRlc1tjdHguaW52b2tpbmdTdGF0ZV07XG5cdFx0dmFyIHJ0ID0gaW52b2tpbmdTdGF0ZS50cmFuc2l0aW9uc1swXTtcblx0XHRmb2xsb3dpbmcgPSBhdG4ubmV4dFRva2VucyhydC5mb2xsb3dTdGF0ZSk7XG5cdFx0aWYgKGZvbGxvd2luZy5jb250YWlucyhzeW1ib2wpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0Y3R4ID0gY3R4LnBhcmVudEN0eDtcblx0fVxuXHRpZiAoZm9sbG93aW5nLmNvbnRhaW5zKFRva2VuLkVQU0lMT04pICYmIHN5bWJvbCA9PT0gVG9rZW4uRU9GKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG4vLyBDb21wdXRlcyB0aGUgc2V0IG9mIGlucHV0IHN5bWJvbHMgd2hpY2ggY291bGQgZm9sbG93IHRoZSBjdXJyZW50IHBhcnNlclxuLy8gc3RhdGUgYW5kIGNvbnRleHQsIGFzIGdpdmVuIGJ5IHtAbGluayAvL2dldFN0YXRlfSBhbmQge0BsaW5rIC8vZ2V0Q29udGV4dH0sXG4vLyByZXNwZWN0aXZlbHkuXG4vL1xuLy8gQHNlZSBBVE4vL2dldEV4cGVjdGVkVG9rZW5zKGludCwgUnVsZUNvbnRleHQpXG4vL1xuUGFyc2VyLnByb3RvdHlwZS5nZXRFeHBlY3RlZFRva2VucyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5faW50ZXJwLmF0bi5nZXRFeHBlY3RlZFRva2Vucyh0aGlzLnN0YXRlLCB0aGlzLl9jdHgpO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5nZXRFeHBlY3RlZFRva2Vuc1dpdGhpbkN1cnJlbnRSdWxlID0gZnVuY3Rpb24oKSB7XG5cdHZhciBhdG4gPSB0aGlzLl9pbnRlcnAuYXRuO1xuXHR2YXIgcyA9IGF0bi5zdGF0ZXNbdGhpcy5zdGF0ZV07XG5cdHJldHVybiBhdG4ubmV4dFRva2VucyhzKTtcbn07XG5cbi8vIEdldCBhIHJ1bGUncyBpbmRleCAoaS5lLiwge0Bjb2RlIFJVTEVfcnVsZU5hbWV9IGZpZWxkKSBvciAtMSBpZiBub3QgZm91bmQuLy9cblBhcnNlci5wcm90b3R5cGUuZ2V0UnVsZUluZGV4ID0gZnVuY3Rpb24ocnVsZU5hbWUpIHtcblx0dmFyIHJ1bGVJbmRleCA9IHRoaXMuZ2V0UnVsZUluZGV4TWFwKClbcnVsZU5hbWVdO1xuXHRpZiAocnVsZUluZGV4ICE9PSBudWxsKSB7XG5cdFx0cmV0dXJuIHJ1bGVJbmRleDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gLTE7XG5cdH1cbn07XG5cbi8vIFJldHVybiBMaXN0Jmx0O1N0cmluZyZndDsgb2YgdGhlIHJ1bGUgbmFtZXMgaW4geW91ciBwYXJzZXIgaW5zdGFuY2Vcbi8vIGxlYWRpbmcgdXAgdG8gYSBjYWxsIHRvIHRoZSBjdXJyZW50IHJ1bGUuIFlvdSBjb3VsZCBvdmVycmlkZSBpZlxuLy8geW91IHdhbnQgbW9yZSBkZXRhaWxzIHN1Y2ggYXMgdGhlIGZpbGUvbGluZSBpbmZvIG9mIHdoZXJlXG4vLyBpbiB0aGUgQVROIGEgcnVsZSBpcyBpbnZva2VkLlxuLy9cbi8vIHRoaXMgaXMgdmVyeSB1c2VmdWwgZm9yIGVycm9yIG1lc3NhZ2VzLlxuLy9cblBhcnNlci5wcm90b3R5cGUuZ2V0UnVsZUludm9jYXRpb25TdGFjayA9IGZ1bmN0aW9uKHApIHtcblx0cCA9IHAgfHwgbnVsbDtcblx0aWYgKHAgPT09IG51bGwpIHtcblx0XHRwID0gdGhpcy5fY3R4O1xuXHR9XG5cdHZhciBzdGFjayA9IFtdO1xuXHR3aGlsZSAocCAhPT0gbnVsbCkge1xuXHRcdC8vIGNvbXB1dGUgd2hhdCBmb2xsb3dzIHdobyBpbnZva2VkIHVzXG5cdFx0dmFyIHJ1bGVJbmRleCA9IHAucnVsZUluZGV4O1xuXHRcdGlmIChydWxlSW5kZXggPCAwKSB7XG5cdFx0XHRzdGFjay5wdXNoKFwibi9hXCIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzdGFjay5wdXNoKHRoaXMucnVsZU5hbWVzW3J1bGVJbmRleF0pO1xuXHRcdH1cblx0XHRwID0gcC5wYXJlbnRDdHg7XG5cdH1cblx0cmV0dXJuIHN0YWNrO1xufTtcblxuLy8gRm9yIGRlYnVnZ2luZyBhbmQgb3RoZXIgcHVycG9zZXMuLy9cblBhcnNlci5wcm90b3R5cGUuZ2V0REZBU3RyaW5ncyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5faW50ZXJwLmRlY2lzaW9uVG9ERkEudG9TdHJpbmcoKTtcbn07XG4vLyBGb3IgZGVidWdnaW5nIGFuZCBvdGhlciBwdXJwb3Nlcy4vL1xuUGFyc2VyLnByb3RvdHlwZS5kdW1wREZBID0gZnVuY3Rpb24oKSB7XG5cdHZhciBzZWVuT25lID0gZmFsc2U7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5faW50ZXJwLmRlY2lzaW9uVG9ERkEubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgZGZhID0gdGhpcy5faW50ZXJwLmRlY2lzaW9uVG9ERkFbaV07XG5cdFx0aWYgKGRmYS5zdGF0ZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0aWYgKHNlZW5PbmUpIHtcblx0XHRcdFx0Y29uc29sZS5sb2coKTtcblx0XHRcdH1cblx0XHRcdHRoaXMucHJpbnRlci5wcmludGxuKFwiRGVjaXNpb24gXCIgKyBkZmEuZGVjaXNpb24gKyBcIjpcIik7XG5cdFx0XHR0aGlzLnByaW50ZXIucHJpbnQoZGZhLnRvU3RyaW5nKHRoaXMubGl0ZXJhbE5hbWVzLCB0aGlzLnN5bWJvbGljTmFtZXMpKTtcblx0XHRcdHNlZW5PbmUgPSB0cnVlO1xuXHRcdH1cblx0fVxufTtcblxuLypcblwiXHRcdFx0cHJpbnRlciA9IGZ1bmN0aW9uKCkge1xcclxcblwiICtcblwiXHRcdFx0XHR0aGlzLnByaW50bG4gPSBmdW5jdGlvbihzKSB7IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvdXRwdXQnKSArPSBzICsgJ1xcXFxuJzsgfVxcclxcblwiICtcblwiXHRcdFx0XHR0aGlzLnByaW50ID0gZnVuY3Rpb24ocykgeyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb3V0cHV0JykgKz0gczsgfVxcclxcblwiICtcblwiXHRcdFx0fTtcXHJcXG5cIiArXG4qL1xuXG5QYXJzZXIucHJvdG90eXBlLmdldFNvdXJjZU5hbWUgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuX2lucHV0LnNvdXJjZU5hbWU7XG59O1xuXG4vLyBEdXJpbmcgYSBwYXJzZSBpcyBzb21ldGltZXMgdXNlZnVsIHRvIGxpc3RlbiBpbiBvbiB0aGUgcnVsZSBlbnRyeSBhbmQgZXhpdFxuLy8gZXZlbnRzIGFzIHdlbGwgYXMgdG9rZW4gbWF0Y2hlcy4gdGhpcyBpcyBmb3IgcXVpY2sgYW5kIGRpcnR5IGRlYnVnZ2luZy5cbi8vXG5QYXJzZXIucHJvdG90eXBlLnNldFRyYWNlID0gZnVuY3Rpb24odHJhY2UpIHtcblx0aWYgKCF0cmFjZSkge1xuXHRcdHRoaXMucmVtb3ZlUGFyc2VMaXN0ZW5lcih0aGlzLl90cmFjZXIpO1xuXHRcdHRoaXMuX3RyYWNlciA9IG51bGw7XG5cdH0gZWxzZSB7XG5cdFx0aWYgKHRoaXMuX3RyYWNlciAhPT0gbnVsbCkge1xuXHRcdFx0dGhpcy5yZW1vdmVQYXJzZUxpc3RlbmVyKHRoaXMuX3RyYWNlcik7XG5cdFx0fVxuXHRcdHRoaXMuX3RyYWNlciA9IG5ldyBUcmFjZUxpc3RlbmVyKHRoaXMpO1xuXHRcdHRoaXMuYWRkUGFyc2VMaXN0ZW5lcih0aGlzLl90cmFjZXIpO1xuXHR9XG59O1xuXG5leHBvcnRzLlBhcnNlciA9IFBhcnNlcjsiLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG5cbi8vKiBBIHJ1bGUgaW52b2NhdGlvbiByZWNvcmQgZm9yIHBhcnNpbmcuXG4vL1xuLy8gIENvbnRhaW5zIGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgcnVsZSBub3Qgc3RvcmVkIGluIHRoZVxuLy8gIFJ1bGVDb250ZXh0LiBJdCBoYW5kbGVzIHBhcnNlIHRyZWUgY2hpbGRyZW4gbGlzdCwgQW55IEFUTiBzdGF0ZVxuLy8gIHRyYWNpbmcsIGFuZCB0aGUgZGVmYXVsdCB2YWx1ZXMgYXZhaWxhYmxlIGZvciBydWxlIGluZGljYXRpb25zOlxuLy8gIHN0YXJ0LCBzdG9wLCBydWxlIGluZGV4LCBjdXJyZW50IGFsdCBudW1iZXIsIGN1cnJlbnRcbi8vICBBVE4gc3RhdGUuXG4vL1xuLy8gIFN1YmNsYXNzZXMgbWFkZSBmb3IgZWFjaCBydWxlIGFuZCBncmFtbWFyIHRyYWNrIHRoZSBwYXJhbWV0ZXJzLFxuLy8gIHJldHVybiB2YWx1ZXMsIGxvY2FscywgYW5kIGxhYmVscyBzcGVjaWZpYyB0byB0aGF0IHJ1bGUuIFRoZXNlXG4vLyAgYXJlIHRoZSBvYmplY3RzIHRoYXQgYXJlIHJldHVybmVkIGZyb20gcnVsZXMuXG4vL1xuLy8gIE5vdGUgdGV4dCBpcyBub3QgYW4gYWN0dWFsIGZpZWxkIG9mIGEgcnVsZSByZXR1cm4gdmFsdWU7IGl0IGlzIGNvbXB1dGVkXG4vLyAgZnJvbSBzdGFydCBhbmQgc3RvcCB1c2luZyB0aGUgaW5wdXQgc3RyZWFtJ3MgdG9TdHJpbmcoKSBtZXRob2QuICBJXG4vLyAgY291bGQgYWRkIGEgY3RvciB0byB0aGlzIHNvIHRoYXQgd2UgY2FuIHBhc3MgaW4gYW5kIHN0b3JlIHRoZSBpbnB1dFxuLy8gIHN0cmVhbSwgYnV0IEknbSBub3Qgc3VyZSB3ZSB3YW50IHRvIGRvIHRoYXQuICBJdCB3b3VsZCBzZWVtIHRvIGJlIHVuZGVmaW5lZFxuLy8gIHRvIGdldCB0aGUgLnRleHQgcHJvcGVydHkgYW55d2F5IGlmIHRoZSBydWxlIG1hdGNoZXMgdG9rZW5zIGZyb20gbXVsdGlwbGVcbi8vICBpbnB1dCBzdHJlYW1zLlxuLy9cbi8vICBJIGRvIG5vdCB1c2UgZ2V0dGVycyBmb3IgZmllbGRzIG9mIG9iamVjdHMgdGhhdCBhcmUgdXNlZCBzaW1wbHkgdG9cbi8vICBncm91cCB2YWx1ZXMgc3VjaCBhcyB0aGlzIGFnZ3JlZ2F0ZS4gIFRoZSBnZXR0ZXJzL3NldHRlcnMgYXJlIHRoZXJlIHRvXG4vLyAgc2F0aXNmeSB0aGUgc3VwZXJjbGFzcyBpbnRlcmZhY2UuXG5cbnZhciBSdWxlQ29udGV4dCA9IHJlcXVpcmUoJy4vUnVsZUNvbnRleHQnKS5SdWxlQ29udGV4dDtcbnZhciBUcmVlID0gcmVxdWlyZSgnLi90cmVlL1RyZWUnKTtcbnZhciBJTlZBTElEX0lOVEVSVkFMID0gVHJlZS5JTlZBTElEX0lOVEVSVkFMO1xudmFyIFRlcm1pbmFsTm9kZSA9IFRyZWUuVGVybWluYWxOb2RlO1xudmFyIFRlcm1pbmFsTm9kZUltcGwgPSBUcmVlLlRlcm1pbmFsTm9kZUltcGw7XG52YXIgRXJyb3JOb2RlSW1wbCA9IFRyZWUuRXJyb3JOb2RlSW1wbDtcbnZhciBJbnRlcnZhbCA9IHJlcXVpcmUoXCIuL0ludGVydmFsU2V0XCIpLkludGVydmFsO1xuXG5mdW5jdGlvbiBQYXJzZXJSdWxlQ29udGV4dChwYXJlbnQsIGludm9raW5nU3RhdGVOdW1iZXIpIHtcblx0cGFyZW50ID0gcGFyZW50IHx8IG51bGw7XG5cdGludm9raW5nU3RhdGVOdW1iZXIgPSBpbnZva2luZ1N0YXRlTnVtYmVyIHx8IG51bGw7XG5cdFJ1bGVDb250ZXh0LmNhbGwodGhpcywgcGFyZW50LCBpbnZva2luZ1N0YXRlTnVtYmVyKTtcblx0dGhpcy5ydWxlSW5kZXggPSAtMTtcbiAgICAvLyAqIElmIHdlIGFyZSBkZWJ1Z2dpbmcgb3IgYnVpbGRpbmcgYSBwYXJzZSB0cmVlIGZvciBhIHZpc2l0b3IsXG4gICAgLy8gd2UgbmVlZCB0byB0cmFjayBhbGwgb2YgdGhlIHRva2VucyBhbmQgcnVsZSBpbnZvY2F0aW9ucyBhc3NvY2lhdGVkXG4gICAgLy8gd2l0aCB0aGlzIHJ1bGUncyBjb250ZXh0LiBUaGlzIGlzIGVtcHR5IGZvciBwYXJzaW5nIHcvbyB0cmVlIGNvbnN0ci5cbiAgICAvLyBvcGVyYXRpb24gYmVjYXVzZSB3ZSBkb24ndCB0aGUgbmVlZCB0byB0cmFjayB0aGUgZGV0YWlscyBhYm91dFxuICAgIC8vIGhvdyB3ZSBwYXJzZSB0aGlzIHJ1bGUuXG4gICAgLy8gL1xuICAgIHRoaXMuY2hpbGRyZW4gPSBudWxsO1xuICAgIHRoaXMuc3RhcnQgPSBudWxsO1xuICAgIHRoaXMuc3RvcCA9IG51bGw7XG4gICAgLy8gVGhlIGV4Y2VwdGlvbiB0aGF0IGZvcmNlZCB0aGlzIHJ1bGUgdG8gcmV0dXJuLiBJZiB0aGUgcnVsZSBzdWNjZXNzZnVsbHlcbiAgICAvLyBjb21wbGV0ZWQsIHRoaXMgaXMge0Bjb2RlIG51bGx9LlxuICAgIHRoaXMuZXhjZXB0aW9uID0gbnVsbDtcbn1cblxuUGFyc2VyUnVsZUNvbnRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuUGFyc2VyUnVsZUNvbnRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFyc2VyUnVsZUNvbnRleHQ7XG5cbi8vICogQ09QWSBhIGN0eCAoSSdtIGRlbGliZXJhdGVseSBub3QgdXNpbmcgY29weSBjb25zdHJ1Y3RvcikvLy9cblBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZS5jb3B5RnJvbSA9IGZ1bmN0aW9uKGN0eCkge1xuICAgIC8vIGZyb20gUnVsZUNvbnRleHRcbiAgICB0aGlzLnBhcmVudEN0eCA9IGN0eC5wYXJlbnRDdHg7XG4gICAgdGhpcy5pbnZva2luZ1N0YXRlID0gY3R4Lmludm9raW5nU3RhdGU7XG4gICAgdGhpcy5jaGlsZHJlbiA9IG51bGw7XG4gICAgdGhpcy5zdGFydCA9IGN0eC5zdGFydDtcbiAgICB0aGlzLnN0b3AgPSBjdHguc3RvcDtcbiAgICAvLyBjb3B5IGFueSBlcnJvciBub2RlcyB0byBhbHQgbGFiZWwgbm9kZVxuICAgIGlmKGN0eC5jaGlsZHJlbikge1xuICAgICAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgICAgIC8vIHJlc2V0IHBhcmVudCBwb2ludGVyIGZvciBhbnkgZXJyb3Igbm9kZXNcbiAgICBcdGN0eC5jaGlsZHJlbi5tYXAoZnVuY3Rpb24oY2hpbGQpIHtcbiAgICBcdFx0aWYgKGNoaWxkIGluc3RhbmNlb2YgRXJyb3JOb2RlSW1wbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICAgICAgICAgICAgY2hpbGQucGFyZW50Q3R4ID0gdGhpcztcbiAgICAgICAgICAgIH1cblx0XHR9LCB0aGlzKTtcblx0fVxufTtcblxuLy8gRG91YmxlIGRpc3BhdGNoIG1ldGhvZHMgZm9yIGxpc3RlbmVyc1xuUGFyc2VyUnVsZUNvbnRleHQucHJvdG90eXBlLmVudGVyUnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG59O1xuXG5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUuZXhpdFJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xufTtcblxuLy8gKiBEb2VzIG5vdCBzZXQgcGFyZW50IGxpbms7IG90aGVyIGFkZCBtZXRob2RzIGRvIHRoYXQvLy9cblBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZS5hZGRDaGlsZCA9IGZ1bmN0aW9uKGNoaWxkKSB7XG4gICAgaWYgKHRoaXMuY2hpbGRyZW4gPT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xuICAgIH1cbiAgICB0aGlzLmNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8vICogVXNlZCBieSBlbnRlck91dGVyQWx0IHRvIHRvc3Mgb3V0IGEgUnVsZUNvbnRleHQgcHJldmlvdXNseSBhZGRlZCBhc1xuLy8gd2UgZW50ZXJlZCBhIHJ1bGUuIElmIHdlIGhhdmUgLy8gbGFiZWwsIHdlIHdpbGwgbmVlZCB0byByZW1vdmVcbi8vIGdlbmVyaWMgcnVsZUNvbnRleHQgb2JqZWN0LlxuLy8gL1xuUGFyc2VyUnVsZUNvbnRleHQucHJvdG90eXBlLnJlbW92ZUxhc3RDaGlsZCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLmNoaWxkcmVuICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4ucG9wKCk7XG4gICAgfVxufTtcblxuUGFyc2VyUnVsZUNvbnRleHQucHJvdG90eXBlLmFkZFRva2VuTm9kZSA9IGZ1bmN0aW9uKHRva2VuKSB7XG4gICAgdmFyIG5vZGUgPSBuZXcgVGVybWluYWxOb2RlSW1wbCh0b2tlbik7XG4gICAgdGhpcy5hZGRDaGlsZChub2RlKTtcbiAgICBub2RlLnBhcmVudEN0eCA9IHRoaXM7XG4gICAgcmV0dXJuIG5vZGU7XG59O1xuXG5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUuYWRkRXJyb3JOb2RlID0gZnVuY3Rpb24oYmFkVG9rZW4pIHtcbiAgICB2YXIgbm9kZSA9IG5ldyBFcnJvck5vZGVJbXBsKGJhZFRva2VuKTtcbiAgICB0aGlzLmFkZENoaWxkKG5vZGUpO1xuICAgIG5vZGUucGFyZW50Q3R4ID0gdGhpcztcbiAgICByZXR1cm4gbm9kZTtcbn07XG5cblBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZS5nZXRDaGlsZCA9IGZ1bmN0aW9uKGksIHR5cGUpIHtcblx0dHlwZSA9IHR5cGUgfHwgbnVsbDtcblx0aWYgKHRoaXMuY2hpbGRyZW4gPT09IG51bGwgfHwgaSA8IDAgfHwgaSA+PSB0aGlzLmNoaWxkcmVuLmxlbmd0aCkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdGlmICh0eXBlID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIHRoaXMuY2hpbGRyZW5baV07XG5cdH0gZWxzZSB7XG5cdFx0Zm9yKHZhciBqPTA7IGo8dGhpcy5jaGlsZHJlbi5sZW5ndGg7IGorKykge1xuXHRcdFx0dmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltqXTtcblx0XHRcdGlmKGNoaWxkIGluc3RhbmNlb2YgdHlwZSkge1xuXHRcdFx0XHRpZihpPT09MCkge1xuXHRcdFx0XHRcdHJldHVybiBjaGlsZDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpIC09IDE7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG4gICAgfVxufTtcblxuXG5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUuZ2V0VG9rZW4gPSBmdW5jdGlvbih0dHlwZSwgaSkge1xuXHRpZiAodGhpcy5jaGlsZHJlbiA9PT0gbnVsbCB8fCBpIDwgMCB8fCBpID49IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0Zm9yKHZhciBqPTA7IGo8dGhpcy5jaGlsZHJlbi5sZW5ndGg7IGorKykge1xuXHRcdHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5bal07XG5cdFx0aWYgKGNoaWxkIGluc3RhbmNlb2YgVGVybWluYWxOb2RlKSB7XG5cdFx0XHRpZiAoY2hpbGQuc3ltYm9sLnR5cGUgPT09IHR0eXBlKSB7XG5cdFx0XHRcdGlmKGk9PT0wKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNoaWxkO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGkgLT0gMTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuICAgICAgICB9XG5cdH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cblBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZS5nZXRUb2tlbnMgPSBmdW5jdGlvbih0dHlwZSApIHtcbiAgICBpZiAodGhpcy5jaGlsZHJlbj09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9IGVsc2Uge1xuXHRcdHZhciB0b2tlbnMgPSBbXTtcblx0XHRmb3IodmFyIGo9MDsgajx0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaisrKSB7XG5cdFx0XHR2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2pdO1xuXHRcdFx0aWYgKGNoaWxkIGluc3RhbmNlb2YgVGVybWluYWxOb2RlKSB7XG5cdFx0XHRcdGlmIChjaGlsZC5zeW1ib2wudHlwZSA9PT0gdHR5cGUpIHtcblx0XHRcdFx0XHR0b2tlbnMucHVzaChjaGlsZCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRva2VucztcbiAgICB9XG59O1xuXG5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUuZ2V0VHlwZWRSdWxlQ29udGV4dCA9IGZ1bmN0aW9uKGN0eFR5cGUsIGkpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDaGlsZChpLCBjdHhUeXBlKTtcbn07XG5cblBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZS5nZXRUeXBlZFJ1bGVDb250ZXh0cyA9IGZ1bmN0aW9uKGN0eFR5cGUpIHtcbiAgICBpZiAodGhpcy5jaGlsZHJlbj09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9IGVsc2Uge1xuXHRcdHZhciBjb250ZXh0cyA9IFtdO1xuXHRcdGZvcih2YXIgaj0wOyBqPHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBqKyspIHtcblx0XHRcdHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5bal07XG5cdFx0XHRpZiAoY2hpbGQgaW5zdGFuY2VvZiBjdHhUeXBlKSB7XG5cdFx0XHRcdGNvbnRleHRzLnB1c2goY2hpbGQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gY29udGV4dHM7XG5cdH1cbn07XG5cblBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZS5nZXRDaGlsZENvdW50ID0gZnVuY3Rpb24oKSB7XG5cdGlmICh0aGlzLmNoaWxkcmVuPT09IG51bGwpIHtcblx0XHRyZXR1cm4gMDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdGhpcy5jaGlsZHJlbi5sZW5ndGg7XG5cdH1cbn07XG5cblBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZS5nZXRTb3VyY2VJbnRlcnZhbCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmKCB0aGlzLnN0YXJ0ID09PSBudWxsIHx8IHRoaXMuc3RvcCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gSU5WQUxJRF9JTlRFUlZBTDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbmV3IEludGVydmFsKHRoaXMuc3RhcnQudG9rZW5JbmRleCwgdGhpcy5zdG9wLnRva2VuSW5kZXgpO1xuICAgIH1cbn07XG5cblJ1bGVDb250ZXh0LkVNUFRZID0gbmV3IFBhcnNlclJ1bGVDb250ZXh0KCk7XG5cbmZ1bmN0aW9uIEludGVycHJldGVyUnVsZUNvbnRleHQocGFyZW50LCBpbnZva2luZ1N0YXRlTnVtYmVyLCBydWxlSW5kZXgpIHtcblx0UGFyc2VyUnVsZUNvbnRleHQuY2FsbChwYXJlbnQsIGludm9raW5nU3RhdGVOdW1iZXIpO1xuICAgIHRoaXMucnVsZUluZGV4ID0gcnVsZUluZGV4O1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5JbnRlcnByZXRlclJ1bGVDb250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUGFyc2VyUnVsZUNvbnRleHQucHJvdG90eXBlKTtcbkludGVycHJldGVyUnVsZUNvbnRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSW50ZXJwcmV0ZXJSdWxlQ29udGV4dDtcblxuZXhwb3J0cy5QYXJzZXJSdWxlQ29udGV4dCA9IFBhcnNlclJ1bGVDb250ZXh0OyIsIi8vXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vLy9cblxudmFyIFJ1bGVDb250ZXh0ID0gcmVxdWlyZSgnLi9SdWxlQ29udGV4dCcpLlJ1bGVDb250ZXh0O1xudmFyIEhhc2ggPSByZXF1aXJlKCcuL1V0aWxzJykuSGFzaDtcblxuZnVuY3Rpb24gUHJlZGljdGlvbkNvbnRleHQoY2FjaGVkSGFzaENvZGUpIHtcblx0dGhpcy5jYWNoZWRIYXNoQ29kZSA9IGNhY2hlZEhhc2hDb2RlO1xufVxuXG4vLyBSZXByZXNlbnRzIHtAY29kZSAkfSBpbiBsb2NhbCBjb250ZXh0IHByZWRpY3Rpb24sIHdoaWNoIG1lYW5zIHdpbGRjYXJkLlxuLy8ge0Bjb2RlLy8reCA9Ly99LlxuLy8gL1xuUHJlZGljdGlvbkNvbnRleHQuRU1QVFkgPSBudWxsO1xuXG4vLyBSZXByZXNlbnRzIHtAY29kZSAkfSBpbiBhbiBhcnJheSBpbiBmdWxsIGNvbnRleHQgbW9kZSwgd2hlbiB7QGNvZGUgJH1cbi8vIGRvZXNuJ3QgbWVhbiB3aWxkY2FyZDoge0Bjb2RlICQgKyB4ID0gWyQseF19LiBIZXJlLFxuLy8ge0Bjb2RlICR9ID0ge0BsaW5rIC8vRU1QVFlfUkVUVVJOX1NUQVRFfS5cbi8vIC9cblByZWRpY3Rpb25Db250ZXh0LkVNUFRZX1JFVFVSTl9TVEFURSA9IDB4N0ZGRkZGRkY7XG5cblByZWRpY3Rpb25Db250ZXh0Lmdsb2JhbE5vZGVDb3VudCA9IDE7XG5QcmVkaWN0aW9uQ29udGV4dC5pZCA9IFByZWRpY3Rpb25Db250ZXh0Lmdsb2JhbE5vZGVDb3VudDtcblxuLy8gU3RvcmVzIHRoZSBjb21wdXRlZCBoYXNoIGNvZGUgb2YgdGhpcyB7QGxpbmsgUHJlZGljdGlvbkNvbnRleHR9LiBUaGUgaGFzaFxuLy8gY29kZSBpcyBjb21wdXRlZCBpbiBwYXJ0cyB0byBtYXRjaCB0aGUgZm9sbG93aW5nIHJlZmVyZW5jZSBhbGdvcml0aG0uXG4vL1xuLy8gPHByZT5cbi8vIHByaXZhdGUgaW50IHJlZmVyZW5jZUhhc2hDb2RlKCkge1xuLy8gaW50IGhhc2ggPSB7QGxpbmsgTXVybXVySGFzaC8vaW5pdGlhbGl6ZSBNdXJtdXJIYXNoLmluaXRpYWxpemV9KHtAbGlua1xuLy8gLy9JTklUSUFMX0hBU0h9KTtcbi8vXG4vLyBmb3IgKGludCBpID0gMDsgaSAmbHQ7IHtAbGluayAvL3NpemUoKX07IGkrKykge1xuLy8gaGFzaCA9IHtAbGluayBNdXJtdXJIYXNoLy91cGRhdGUgTXVybXVySGFzaC51cGRhdGV9KGhhc2gsIHtAbGluayAvL2dldFBhcmVudFxuLy8gZ2V0UGFyZW50fShpKSk7XG4vLyB9XG4vL1xuLy8gZm9yIChpbnQgaSA9IDA7IGkgJmx0OyB7QGxpbmsgLy9zaXplKCl9OyBpKyspIHtcbi8vIGhhc2ggPSB7QGxpbmsgTXVybXVySGFzaC8vdXBkYXRlIE11cm11ckhhc2gudXBkYXRlfShoYXNoLCB7QGxpbmtcbi8vIC8vZ2V0UmV0dXJuU3RhdGUgZ2V0UmV0dXJuU3RhdGV9KGkpKTtcbi8vIH1cbi8vXG4vLyBoYXNoID0ge0BsaW5rIE11cm11ckhhc2gvL2ZpbmlzaCBNdXJtdXJIYXNoLmZpbmlzaH0oaGFzaCwgMi8vIHtAbGlua1xuLy8gLy9zaXplKCl9KTtcbi8vIHJldHVybiBoYXNoO1xuLy8gfVxuLy8gPC9wcmU+XG4vLyAvXG5cbi8vIFRoaXMgbWVhbnMgb25seSB0aGUge0BsaW5rIC8vRU1QVFl9IGNvbnRleHQgaXMgaW4gc2V0LlxuUHJlZGljdGlvbkNvbnRleHQucHJvdG90eXBlLmlzRW1wdHkgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMgPT09IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZO1xufTtcblxuUHJlZGljdGlvbkNvbnRleHQucHJvdG90eXBlLmhhc0VtcHR5UGF0aCA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5nZXRSZXR1cm5TdGF0ZSh0aGlzLmxlbmd0aCAtIDEpID09PSBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWV9SRVRVUk5fU1RBVEU7XG59O1xuXG5QcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUuaGFzaENvZGUgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuY2FjaGVkSGFzaENvZGU7XG59O1xuXG5cblByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS51cGRhdGVIYXNoQ29kZSA9IGZ1bmN0aW9uKGhhc2gpIHtcbiAgICBoYXNoLnVwZGF0ZSh0aGlzLmNhY2hlZEhhc2hDb2RlKTtcbn07XG4vKlxuZnVuY3Rpb24gY2FsY3VsYXRlSGFzaFN0cmluZyhwYXJlbnQsIHJldHVyblN0YXRlKSB7XG5cdHJldHVybiBcIlwiICsgcGFyZW50ICsgcmV0dXJuU3RhdGU7XG59XG4qL1xuXG4vLyBVc2VkIHRvIGNhY2hlIHtAbGluayBQcmVkaWN0aW9uQ29udGV4dH0gb2JqZWN0cy4gSXRzIHVzZWQgZm9yIHRoZSBzaGFyZWRcbi8vIGNvbnRleHQgY2FzaCBhc3NvY2lhdGVkIHdpdGggY29udGV4dHMgaW4gREZBIHN0YXRlcy4gVGhpcyBjYWNoZVxuLy8gY2FuIGJlIHVzZWQgZm9yIGJvdGggbGV4ZXJzIGFuZCBwYXJzZXJzLlxuXG5mdW5jdGlvbiBQcmVkaWN0aW9uQ29udGV4dENhY2hlKCkge1xuXHR0aGlzLmNhY2hlID0ge307XG5cdHJldHVybiB0aGlzO1xufVxuXG4vLyBBZGQgYSBjb250ZXh0IHRvIHRoZSBjYWNoZSBhbmQgcmV0dXJuIGl0LiBJZiB0aGUgY29udGV4dCBhbHJlYWR5IGV4aXN0cyxcbi8vIHJldHVybiB0aGF0IG9uZSBpbnN0ZWFkIGFuZCBkbyBub3QgYWRkIGEgbmV3IGNvbnRleHQgdG8gdGhlIGNhY2hlLlxuLy8gUHJvdGVjdCBzaGFyZWQgY2FjaGUgZnJvbSB1bnNhZmUgdGhyZWFkIGFjY2Vzcy5cbi8vXG5QcmVkaWN0aW9uQ29udGV4dENhY2hlLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbihjdHgpIHtcblx0aWYgKGN0eCA9PT0gUHJlZGljdGlvbkNvbnRleHQuRU1QVFkpIHtcblx0XHRyZXR1cm4gUHJlZGljdGlvbkNvbnRleHQuRU1QVFk7XG5cdH1cblx0dmFyIGV4aXN0aW5nID0gdGhpcy5jYWNoZVtjdHhdIHx8IG51bGw7XG5cdGlmIChleGlzdGluZyAhPT0gbnVsbCkge1xuXHRcdHJldHVybiBleGlzdGluZztcblx0fVxuXHR0aGlzLmNhY2hlW2N0eF0gPSBjdHg7XG5cdHJldHVybiBjdHg7XG59O1xuXG5QcmVkaWN0aW9uQ29udGV4dENhY2hlLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihjdHgpIHtcblx0cmV0dXJuIHRoaXMuY2FjaGVbY3R4XSB8fCBudWxsO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFByZWRpY3Rpb25Db250ZXh0Q2FjaGUucHJvdG90eXBlLCBcImxlbmd0aFwiLCB7XG5cdGdldCA6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmNhY2hlLmxlbmd0aDtcblx0fVxufSk7XG5cbmZ1bmN0aW9uIFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0KHBhcmVudCwgcmV0dXJuU3RhdGUpIHtcblx0dmFyIGhhc2hDb2RlID0gMDtcblx0aWYocGFyZW50ICE9PSBudWxsKSB7XG5cdFx0dmFyIGhhc2ggPSBuZXcgSGFzaCgpO1xuXHRcdGhhc2gudXBkYXRlKHBhcmVudCwgcmV0dXJuU3RhdGUpO1xuICAgICAgICBoYXNoQ29kZSA9IGhhc2guZmluaXNoKCk7XG5cdH1cblx0UHJlZGljdGlvbkNvbnRleHQuY2FsbCh0aGlzLCBoYXNoQ29kZSk7XG5cdHRoaXMucGFyZW50Q3R4ID0gcGFyZW50O1xuXHR0aGlzLnJldHVyblN0YXRlID0gcmV0dXJuU3RhdGU7XG59XG5cblNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUHJlZGljdGlvbkNvbnRleHQucHJvdG90eXBlKTtcblNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5jb250cnVjdG9yID0gU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQ7XG5cblNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0LmNyZWF0ZSA9IGZ1bmN0aW9uKHBhcmVudCwgcmV0dXJuU3RhdGUpIHtcblx0aWYgKHJldHVyblN0YXRlID09PSBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWV9SRVRVUk5fU1RBVEUgJiYgcGFyZW50ID09PSBudWxsKSB7XG5cdFx0Ly8gc29tZW9uZSBjYW4gcGFzcyBpbiB0aGUgYml0cyBvZiBhbiBhcnJheSBjdHggdGhhdCBtZWFuICRcblx0XHRyZXR1cm4gUHJlZGljdGlvbkNvbnRleHQuRU1QVFk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIG5ldyBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dChwYXJlbnQsIHJldHVyblN0YXRlKTtcblx0fVxufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZSwgXCJsZW5ndGhcIiwge1xuXHRnZXQgOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gMTtcblx0fVxufSk7XG5cblNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5nZXRQYXJlbnQgPSBmdW5jdGlvbihpbmRleCkge1xuXHRyZXR1cm4gdGhpcy5wYXJlbnRDdHg7XG59O1xuXG5TaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUuZ2V0UmV0dXJuU3RhdGUgPSBmdW5jdGlvbihpbmRleCkge1xuXHRyZXR1cm4gdGhpcy5yZXR1cm5TdGF0ZTtcbn07XG5cblNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbihvdGhlcikge1xuXHRpZiAodGhpcyA9PT0gb3RoZXIpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBlbHNlIGlmICghKG90aGVyIGluc3RhbmNlb2YgU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9IGVsc2UgaWYgKHRoaXMuaGFzaENvZGUoKSAhPT0gb3RoZXIuaGFzaENvZGUoKSkge1xuXHRcdHJldHVybiBmYWxzZTsgLy8gY2FuJ3QgYmUgc2FtZSBpZiBoYXNoIGlzIGRpZmZlcmVudFxuXHR9IGVsc2Uge1xuXHRcdGlmKHRoaXMucmV0dXJuU3RhdGUgIT09IG90aGVyLnJldHVyblN0YXRlKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBlbHNlIGlmKHRoaXMucGFyZW50Q3R4PT1udWxsKVxuICAgICAgICAgICAgcmV0dXJuIG90aGVyLnBhcmVudEN0eD09bnVsbFxuXHRcdGVsc2VcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudEN0eC5lcXVhbHMob3RoZXIucGFyZW50Q3R4KTtcblx0fVxufTtcblxuU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdHZhciB1cCA9IHRoaXMucGFyZW50Q3R4ID09PSBudWxsID8gXCJcIiA6IHRoaXMucGFyZW50Q3R4LnRvU3RyaW5nKCk7XG5cdGlmICh1cC5sZW5ndGggPT09IDApIHtcblx0XHRpZiAodGhpcy5yZXR1cm5TdGF0ZSA9PT0gUHJlZGljdGlvbkNvbnRleHQuRU1QVFlfUkVUVVJOX1NUQVRFKSB7XG5cdFx0XHRyZXR1cm4gXCIkXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBcIlwiICsgdGhpcy5yZXR1cm5TdGF0ZTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFwiXCIgKyB0aGlzLnJldHVyblN0YXRlICsgXCIgXCIgKyB1cDtcblx0fVxufTtcblxuZnVuY3Rpb24gRW1wdHlQcmVkaWN0aW9uQ29udGV4dCgpIHtcblx0U2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQuY2FsbCh0aGlzLCBudWxsLCBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWV9SRVRVUk5fU1RBVEUpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuRW1wdHlQcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZSk7XG5FbXB0eVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEVtcHR5UHJlZGljdGlvbkNvbnRleHQ7XG5cbkVtcHR5UHJlZGljdGlvbkNvbnRleHQucHJvdG90eXBlLmlzRW1wdHkgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRydWU7XG59O1xuXG5FbXB0eVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5nZXRQYXJlbnQgPSBmdW5jdGlvbihpbmRleCkge1xuXHRyZXR1cm4gbnVsbDtcbn07XG5cbkVtcHR5UHJlZGljdGlvbkNvbnRleHQucHJvdG90eXBlLmdldFJldHVyblN0YXRlID0gZnVuY3Rpb24oaW5kZXgpIHtcblx0cmV0dXJuIHRoaXMucmV0dXJuU3RhdGU7XG59O1xuXG5FbXB0eVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbihvdGhlcikge1xuXHRyZXR1cm4gdGhpcyA9PT0gb3RoZXI7XG59O1xuXG5FbXB0eVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gXCIkXCI7XG59O1xuXG5QcmVkaWN0aW9uQ29udGV4dC5FTVBUWSA9IG5ldyBFbXB0eVByZWRpY3Rpb25Db250ZXh0KCk7XG5cbmZ1bmN0aW9uIEFycmF5UHJlZGljdGlvbkNvbnRleHQocGFyZW50cywgcmV0dXJuU3RhdGVzKSB7XG5cdC8vIFBhcmVudCBjYW4gYmUgbnVsbCBvbmx5IGlmIGZ1bGwgY3R4IG1vZGUgYW5kIHdlIG1ha2UgYW4gYXJyYXlcblx0Ly8gZnJvbSB7QGxpbmsgLy9FTVBUWX0gYW5kIG5vbi1lbXB0eS4gV2UgbWVyZ2Uge0BsaW5rIC8vRU1QVFl9IGJ5IHVzaW5nXG5cdC8vIG51bGwgcGFyZW50IGFuZFxuXHQvLyByZXR1cm5TdGF0ZSA9PSB7QGxpbmsgLy9FTVBUWV9SRVRVUk5fU1RBVEV9LlxuXHR2YXIgaCA9IG5ldyBIYXNoKCk7XG5cdGgudXBkYXRlKHBhcmVudHMsIHJldHVyblN0YXRlcyk7XG5cdHZhciBoYXNoQ29kZSA9IGguZmluaXNoKCk7XG5cdFByZWRpY3Rpb25Db250ZXh0LmNhbGwodGhpcywgaGFzaENvZGUpO1xuXHR0aGlzLnBhcmVudHMgPSBwYXJlbnRzO1xuXHR0aGlzLnJldHVyblN0YXRlcyA9IHJldHVyblN0YXRlcztcblx0cmV0dXJuIHRoaXM7XG59XG5cbkFycmF5UHJlZGljdGlvbkNvbnRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShQcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUpO1xuQXJyYXlQcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBcnJheVByZWRpY3Rpb25Db250ZXh0O1xuXG5BcnJheVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24oKSB7XG5cdC8vIHNpbmNlIEVNUFRZX1JFVFVSTl9TVEFURSBjYW4gb25seSBhcHBlYXIgaW4gdGhlIGxhc3QgcG9zaXRpb24sIHdlXG5cdC8vIGRvbid0IG5lZWQgdG8gdmVyaWZ5IHRoYXQgc2l6ZT09MVxuXHRyZXR1cm4gdGhpcy5yZXR1cm5TdGF0ZXNbMF0gPT09IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZX1JFVFVSTl9TVEFURTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShBcnJheVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZSwgXCJsZW5ndGhcIiwge1xuXHRnZXQgOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5yZXR1cm5TdGF0ZXMubGVuZ3RoO1xuXHR9XG59KTtcblxuQXJyYXlQcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUuZ2V0UGFyZW50ID0gZnVuY3Rpb24oaW5kZXgpIHtcblx0cmV0dXJuIHRoaXMucGFyZW50c1tpbmRleF07XG59O1xuXG5BcnJheVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5nZXRSZXR1cm5TdGF0ZSA9IGZ1bmN0aW9uKGluZGV4KSB7XG5cdHJldHVybiB0aGlzLnJldHVyblN0YXRlc1tpbmRleF07XG59O1xuXG5BcnJheVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbihvdGhlcikge1xuXHRpZiAodGhpcyA9PT0gb3RoZXIpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBlbHNlIGlmICghKG90aGVyIGluc3RhbmNlb2YgQXJyYXlQcmVkaWN0aW9uQ29udGV4dCkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZWxzZSBpZiAodGhpcy5oYXNoQ29kZSgpICE9PSBvdGhlci5oYXNoQ29kZSgpKSB7XG5cdFx0cmV0dXJuIGZhbHNlOyAvLyBjYW4ndCBiZSBzYW1lIGlmIGhhc2ggaXMgZGlmZmVyZW50XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHRoaXMucmV0dXJuU3RhdGVzID09PSBvdGhlci5yZXR1cm5TdGF0ZXMgJiZcblx0XHRcdFx0dGhpcy5wYXJlbnRzID09PSBvdGhlci5wYXJlbnRzO1xuXHR9XG59O1xuXG5BcnJheVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRpZiAodGhpcy5pc0VtcHR5KCkpIHtcblx0XHRyZXR1cm4gXCJbXVwiO1xuXHR9IGVsc2Uge1xuXHRcdHZhciBzID0gXCJbXCI7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJldHVyblN0YXRlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKGkgPiAwKSB7XG5cdFx0XHRcdHMgPSBzICsgXCIsIFwiO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHRoaXMucmV0dXJuU3RhdGVzW2ldID09PSBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWV9SRVRVUk5fU1RBVEUpIHtcblx0XHRcdFx0cyA9IHMgKyBcIiRcIjtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRzID0gcyArIHRoaXMucmV0dXJuU3RhdGVzW2ldO1xuXHRcdFx0aWYgKHRoaXMucGFyZW50c1tpXSAhPT0gbnVsbCkge1xuXHRcdFx0XHRzID0gcyArIFwiIFwiICsgdGhpcy5wYXJlbnRzW2ldO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cyA9IHMgKyBcIm51bGxcIjtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHMgKyBcIl1cIjtcblx0fVxufTtcblxuLy8gQ29udmVydCBhIHtAbGluayBSdWxlQ29udGV4dH0gdHJlZSB0byBhIHtAbGluayBQcmVkaWN0aW9uQ29udGV4dH0gZ3JhcGguXG4vLyBSZXR1cm4ge0BsaW5rIC8vRU1QVFl9IGlmIHtAY29kZSBvdXRlckNvbnRleHR9IGlzIGVtcHR5IG9yIG51bGwuXG4vLyAvXG5mdW5jdGlvbiBwcmVkaWN0aW9uQ29udGV4dEZyb21SdWxlQ29udGV4dChhdG4sIG91dGVyQ29udGV4dCkge1xuXHRpZiAob3V0ZXJDb250ZXh0ID09PSB1bmRlZmluZWQgfHwgb3V0ZXJDb250ZXh0ID09PSBudWxsKSB7XG5cdFx0b3V0ZXJDb250ZXh0ID0gUnVsZUNvbnRleHQuRU1QVFk7XG5cdH1cblx0Ly8gaWYgd2UgYXJlIGluIFJ1bGVDb250ZXh0IG9mIHN0YXJ0IHJ1bGUsIHMsIHRoZW4gUHJlZGljdGlvbkNvbnRleHRcblx0Ly8gaXMgRU1QVFkuIE5vYm9keSBjYWxsZWQgdXMuIChpZiB3ZSBhcmUgZW1wdHksIHJldHVybiBlbXB0eSlcblx0aWYgKG91dGVyQ29udGV4dC5wYXJlbnRDdHggPT09IG51bGwgfHwgb3V0ZXJDb250ZXh0ID09PSBSdWxlQ29udGV4dC5FTVBUWSkge1xuXHRcdHJldHVybiBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWTtcblx0fVxuXHQvLyBJZiB3ZSBoYXZlIGEgcGFyZW50LCBjb252ZXJ0IGl0IHRvIGEgUHJlZGljdGlvbkNvbnRleHQgZ3JhcGhcblx0dmFyIHBhcmVudCA9IHByZWRpY3Rpb25Db250ZXh0RnJvbVJ1bGVDb250ZXh0KGF0biwgb3V0ZXJDb250ZXh0LnBhcmVudEN0eCk7XG5cdHZhciBzdGF0ZSA9IGF0bi5zdGF0ZXNbb3V0ZXJDb250ZXh0Lmludm9raW5nU3RhdGVdO1xuXHR2YXIgdHJhbnNpdGlvbiA9IHN0YXRlLnRyYW5zaXRpb25zWzBdO1xuXHRyZXR1cm4gU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQuY3JlYXRlKHBhcmVudCwgdHJhbnNpdGlvbi5mb2xsb3dTdGF0ZS5zdGF0ZU51bWJlcik7XG59XG4vKlxuZnVuY3Rpb24gY2FsY3VsYXRlTGlzdHNIYXNoU3RyaW5nKHBhcmVudHMsIHJldHVyblN0YXRlcykge1xuXHR2YXIgcyA9IFwiXCI7XG5cdHBhcmVudHMubWFwKGZ1bmN0aW9uKHApIHtcblx0XHRzID0gcyArIHA7XG5cdH0pO1xuXHRyZXR1cm5TdGF0ZXMubWFwKGZ1bmN0aW9uKHIpIHtcblx0XHRzID0gcyArIHI7XG5cdH0pO1xuXHRyZXR1cm4gcztcbn1cbiovXG5mdW5jdGlvbiBtZXJnZShhLCBiLCByb290SXNXaWxkY2FyZCwgbWVyZ2VDYWNoZSkge1xuXHQvLyBzaGFyZSBzYW1lIGdyYXBoIGlmIGJvdGggc2FtZVxuXHRpZiAoYSA9PT0gYikge1xuXHRcdHJldHVybiBhO1xuXHR9XG5cdGlmIChhIGluc3RhbmNlb2YgU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQgJiYgYiBpbnN0YW5jZW9mIFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0KSB7XG5cdFx0cmV0dXJuIG1lcmdlU2luZ2xldG9ucyhhLCBiLCByb290SXNXaWxkY2FyZCwgbWVyZ2VDYWNoZSk7XG5cdH1cblx0Ly8gQXQgbGVhc3Qgb25lIG9mIGEgb3IgYiBpcyBhcnJheVxuXHQvLyBJZiBvbmUgaXMgJCBhbmQgcm9vdElzV2lsZGNhcmQsIHJldHVybiAkIGFzLy8gd2lsZGNhcmRcblx0aWYgKHJvb3RJc1dpbGRjYXJkKSB7XG5cdFx0aWYgKGEgaW5zdGFuY2VvZiBFbXB0eVByZWRpY3Rpb25Db250ZXh0KSB7XG5cdFx0XHRyZXR1cm4gYTtcblx0XHR9XG5cdFx0aWYgKGIgaW5zdGFuY2VvZiBFbXB0eVByZWRpY3Rpb25Db250ZXh0KSB7XG5cdFx0XHRyZXR1cm4gYjtcblx0XHR9XG5cdH1cblx0Ly8gY29udmVydCBzaW5nbGV0b24gc28gYm90aCBhcmUgYXJyYXlzIHRvIG5vcm1hbGl6ZVxuXHRpZiAoYSBpbnN0YW5jZW9mIFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0KSB7XG5cdFx0YSA9IG5ldyBBcnJheVByZWRpY3Rpb25Db250ZXh0KFthLmdldFBhcmVudCgpXSwgW2EucmV0dXJuU3RhdGVdKTtcblx0fVxuXHRpZiAoYiBpbnN0YW5jZW9mIFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0KSB7XG5cdFx0YiA9IG5ldyBBcnJheVByZWRpY3Rpb25Db250ZXh0KFtiLmdldFBhcmVudCgpXSwgW2IucmV0dXJuU3RhdGVdKTtcblx0fVxuXHRyZXR1cm4gbWVyZ2VBcnJheXMoYSwgYiwgcm9vdElzV2lsZGNhcmQsIG1lcmdlQ2FjaGUpO1xufVxuXG4vL1xuLy8gTWVyZ2UgdHdvIHtAbGluayBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dH0gaW5zdGFuY2VzLlxuLy9cbi8vIDxwPlN0YWNrIHRvcHMgZXF1YWwsIHBhcmVudHMgbWVyZ2UgaXMgc2FtZTsgcmV0dXJuIGxlZnQgZ3JhcGguPGJyPlxuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9TaW5nbGV0b25NZXJnZV9TYW1lUm9vdFNhbWVQYXIuc3ZnXCJcbi8vIHR5cGU9XCJpbWFnZS9zdmcreG1sXCIvPjwvcD5cbi8vXG4vLyA8cD5TYW1lIHN0YWNrIHRvcCwgcGFyZW50cyBkaWZmZXI7IG1lcmdlIHBhcmVudHMgZ2l2aW5nIGFycmF5IG5vZGUsIHRoZW5cbi8vIHJlbWFpbmRlcnMgb2YgdGhvc2UgZ3JhcGhzLiBBIG5ldyByb290IG5vZGUgaXMgY3JlYXRlZCB0byBwb2ludCB0byB0aGVcbi8vIG1lcmdlZCBwYXJlbnRzLjxicj5cbi8vIDxlbWJlZCBzcmM9XCJpbWFnZXMvU2luZ2xldG9uTWVyZ2VfU2FtZVJvb3REaWZmUGFyLnN2Z1wiXG4vLyB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz48L3A+XG4vL1xuLy8gPHA+RGlmZmVyZW50IHN0YWNrIHRvcHMgcG9pbnRpbmcgdG8gc2FtZSBwYXJlbnQuIE1ha2UgYXJyYXkgbm9kZSBmb3IgdGhlXG4vLyByb290IHdoZXJlIGJvdGggZWxlbWVudCBpbiB0aGUgcm9vdCBwb2ludCB0byB0aGUgc2FtZSAob3JpZ2luYWwpXG4vLyBwYXJlbnQuPGJyPlxuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9TaW5nbGV0b25NZXJnZV9EaWZmUm9vdFNhbWVQYXIuc3ZnXCJcbi8vIHR5cGU9XCJpbWFnZS9zdmcreG1sXCIvPjwvcD5cbi8vXG4vLyA8cD5EaWZmZXJlbnQgc3RhY2sgdG9wcyBwb2ludGluZyB0byBkaWZmZXJlbnQgcGFyZW50cy4gTWFrZSBhcnJheSBub2RlIGZvclxuLy8gdGhlIHJvb3Qgd2hlcmUgZWFjaCBlbGVtZW50IHBvaW50cyB0byB0aGUgY29ycmVzcG9uZGluZyBvcmlnaW5hbFxuLy8gcGFyZW50Ljxicj5cbi8vIDxlbWJlZCBzcmM9XCJpbWFnZXMvU2luZ2xldG9uTWVyZ2VfRGlmZlJvb3REaWZmUGFyLnN2Z1wiXG4vLyB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz48L3A+XG4vL1xuLy8gQHBhcmFtIGEgdGhlIGZpcnN0IHtAbGluayBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dH1cbi8vIEBwYXJhbSBiIHRoZSBzZWNvbmQge0BsaW5rIFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0fVxuLy8gQHBhcmFtIHJvb3RJc1dpbGRjYXJkIHtAY29kZSB0cnVlfSBpZiB0aGlzIGlzIGEgbG9jYWwtY29udGV4dCBtZXJnZSxcbi8vIG90aGVyd2lzZSBmYWxzZSB0byBpbmRpY2F0ZSBhIGZ1bGwtY29udGV4dCBtZXJnZVxuLy8gQHBhcmFtIG1lcmdlQ2FjaGVcbi8vIC9cbmZ1bmN0aW9uIG1lcmdlU2luZ2xldG9ucyhhLCBiLCByb290SXNXaWxkY2FyZCwgbWVyZ2VDYWNoZSkge1xuXHRpZiAobWVyZ2VDYWNoZSAhPT0gbnVsbCkge1xuXHRcdHZhciBwcmV2aW91cyA9IG1lcmdlQ2FjaGUuZ2V0KGEsIGIpO1xuXHRcdGlmIChwcmV2aW91cyAhPT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIHByZXZpb3VzO1xuXHRcdH1cblx0XHRwcmV2aW91cyA9IG1lcmdlQ2FjaGUuZ2V0KGIsIGEpO1xuXHRcdGlmIChwcmV2aW91cyAhPT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIHByZXZpb3VzO1xuXHRcdH1cblx0fVxuXG5cdHZhciByb290TWVyZ2UgPSBtZXJnZVJvb3QoYSwgYiwgcm9vdElzV2lsZGNhcmQpO1xuXHRpZiAocm9vdE1lcmdlICE9PSBudWxsKSB7XG5cdFx0aWYgKG1lcmdlQ2FjaGUgIT09IG51bGwpIHtcblx0XHRcdG1lcmdlQ2FjaGUuc2V0KGEsIGIsIHJvb3RNZXJnZSk7XG5cdFx0fVxuXHRcdHJldHVybiByb290TWVyZ2U7XG5cdH1cblx0aWYgKGEucmV0dXJuU3RhdGUgPT09IGIucmV0dXJuU3RhdGUpIHtcblx0XHR2YXIgcGFyZW50ID0gbWVyZ2UoYS5wYXJlbnRDdHgsIGIucGFyZW50Q3R4LCByb290SXNXaWxkY2FyZCwgbWVyZ2VDYWNoZSk7XG5cdFx0Ly8gaWYgcGFyZW50IGlzIHNhbWUgYXMgZXhpc3RpbmcgYSBvciBiIHBhcmVudCBvciByZWR1Y2VkIHRvIGEgcGFyZW50LFxuXHRcdC8vIHJldHVybiBpdFxuXHRcdGlmIChwYXJlbnQgPT09IGEucGFyZW50Q3R4KSB7XG5cdFx0XHRyZXR1cm4gYTsgLy8gYXggKyBieCA9IGF4LCBpZiBhPWJcblx0XHR9XG5cdFx0aWYgKHBhcmVudCA9PT0gYi5wYXJlbnRDdHgpIHtcblx0XHRcdHJldHVybiBiOyAvLyBheCArIGJ4ID0gYngsIGlmIGE9YlxuXHRcdH1cblx0XHQvLyBlbHNlOiBheCArIGF5ID0gYSdbeCx5XVxuXHRcdC8vIG1lcmdlIHBhcmVudHMgeCBhbmQgeSwgZ2l2aW5nIGFycmF5IG5vZGUgd2l0aCB4LHkgdGhlbiByZW1haW5kZXJzXG5cdFx0Ly8gb2YgdGhvc2UgZ3JhcGhzLiBkdXAgYSwgYScgcG9pbnRzIGF0IG1lcmdlZCBhcnJheVxuXHRcdC8vIG5ldyBqb2luZWQgcGFyZW50IHNvIGNyZWF0ZSBuZXcgc2luZ2xldG9uIHBvaW50aW5nIHRvIGl0LCBhJ1xuXHRcdHZhciBzcGMgPSBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dC5jcmVhdGUocGFyZW50LCBhLnJldHVyblN0YXRlKTtcblx0XHRpZiAobWVyZ2VDYWNoZSAhPT0gbnVsbCkge1xuXHRcdFx0bWVyZ2VDYWNoZS5zZXQoYSwgYiwgc3BjKTtcblx0XHR9XG5cdFx0cmV0dXJuIHNwYztcblx0fSBlbHNlIHsgLy8gYSAhPSBiIHBheWxvYWRzIGRpZmZlclxuXHRcdC8vIHNlZSBpZiB3ZSBjYW4gY29sbGFwc2UgcGFyZW50cyBkdWUgdG8gJCt4IHBhcmVudHMgaWYgbG9jYWwgY3R4XG5cdFx0dmFyIHNpbmdsZVBhcmVudCA9IG51bGw7XG5cdFx0aWYgKGEgPT09IGIgfHwgKGEucGFyZW50Q3R4ICE9PSBudWxsICYmIGEucGFyZW50Q3R4ID09PSBiLnBhcmVudEN0eCkpIHsgLy8gYXggK1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGJ4ID1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBbYSxiXXhcblx0XHRcdHNpbmdsZVBhcmVudCA9IGEucGFyZW50Q3R4O1xuXHRcdH1cblx0XHRpZiAoc2luZ2xlUGFyZW50ICE9PSBudWxsKSB7IC8vIHBhcmVudHMgYXJlIHNhbWVcblx0XHRcdC8vIHNvcnQgcGF5bG9hZHMgYW5kIHVzZSBzYW1lIHBhcmVudFxuXHRcdFx0dmFyIHBheWxvYWRzID0gWyBhLnJldHVyblN0YXRlLCBiLnJldHVyblN0YXRlIF07XG5cdFx0XHRpZiAoYS5yZXR1cm5TdGF0ZSA+IGIucmV0dXJuU3RhdGUpIHtcblx0XHRcdFx0cGF5bG9hZHNbMF0gPSBiLnJldHVyblN0YXRlO1xuXHRcdFx0XHRwYXlsb2Fkc1sxXSA9IGEucmV0dXJuU3RhdGU7XG5cdFx0XHR9XG5cdFx0XHR2YXIgcGFyZW50cyA9IFsgc2luZ2xlUGFyZW50LCBzaW5nbGVQYXJlbnQgXTtcblx0XHRcdHZhciBhcGMgPSBuZXcgQXJyYXlQcmVkaWN0aW9uQ29udGV4dChwYXJlbnRzLCBwYXlsb2Fkcyk7XG5cdFx0XHRpZiAobWVyZ2VDYWNoZSAhPT0gbnVsbCkge1xuXHRcdFx0XHRtZXJnZUNhY2hlLnNldChhLCBiLCBhcGMpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGFwYztcblx0XHR9XG5cdFx0Ly8gcGFyZW50cyBkaWZmZXIgYW5kIGNhbid0IG1lcmdlIHRoZW0uIEp1c3QgcGFjayB0b2dldGhlclxuXHRcdC8vIGludG8gYXJyYXk7IGNhbid0IG1lcmdlLlxuXHRcdC8vIGF4ICsgYnkgPSBbYXgsYnldXG5cdFx0dmFyIHBheWxvYWRzID0gWyBhLnJldHVyblN0YXRlLCBiLnJldHVyblN0YXRlIF07XG5cdFx0dmFyIHBhcmVudHMgPSBbIGEucGFyZW50Q3R4LCBiLnBhcmVudEN0eCBdO1xuXHRcdGlmIChhLnJldHVyblN0YXRlID4gYi5yZXR1cm5TdGF0ZSkgeyAvLyBzb3J0IGJ5IHBheWxvYWRcblx0XHRcdHBheWxvYWRzWzBdID0gYi5yZXR1cm5TdGF0ZTtcblx0XHRcdHBheWxvYWRzWzFdID0gYS5yZXR1cm5TdGF0ZTtcblx0XHRcdHBhcmVudHMgPSBbIGIucGFyZW50Q3R4LCBhLnBhcmVudEN0eCBdO1xuXHRcdH1cblx0XHR2YXIgYV8gPSBuZXcgQXJyYXlQcmVkaWN0aW9uQ29udGV4dChwYXJlbnRzLCBwYXlsb2Fkcyk7XG5cdFx0aWYgKG1lcmdlQ2FjaGUgIT09IG51bGwpIHtcblx0XHRcdG1lcmdlQ2FjaGUuc2V0KGEsIGIsIGFfKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFfO1xuXHR9XG59XG5cbi8vXG4vLyBIYW5kbGUgY2FzZSB3aGVyZSBhdCBsZWFzdCBvbmUgb2Yge0Bjb2RlIGF9IG9yIHtAY29kZSBifSBpc1xuLy8ge0BsaW5rIC8vRU1QVFl9LiBJbiB0aGUgZm9sbG93aW5nIGRpYWdyYW1zLCB0aGUgc3ltYm9sIHtAY29kZSAkfSBpcyB1c2VkXG4vLyB0byByZXByZXNlbnQge0BsaW5rIC8vRU1QVFl9LlxuLy9cbi8vIDxoMj5Mb2NhbC1Db250ZXh0IE1lcmdlczwvaDI+XG4vL1xuLy8gPHA+VGhlc2UgbG9jYWwtY29udGV4dCBtZXJnZSBvcGVyYXRpb25zIGFyZSB1c2VkIHdoZW4ge0Bjb2RlIHJvb3RJc1dpbGRjYXJkfVxuLy8gaXMgdHJ1ZS48L3A+XG4vL1xuLy8gPHA+e0BsaW5rIC8vRU1QVFl9IGlzIHN1cGVyc2V0IG9mIGFueSBncmFwaDsgcmV0dXJuIHtAbGluayAvL0VNUFRZfS48YnI+XG4vLyA8ZW1iZWQgc3JjPVwiaW1hZ2VzL0xvY2FsTWVyZ2VfRW1wdHlSb290LnN2Z1wiIHR5cGU9XCJpbWFnZS9zdmcreG1sXCIvPjwvcD5cbi8vXG4vLyA8cD57QGxpbmsgLy9FTVBUWX0gYW5kIGFueXRoaW5nIGlzIHtAY29kZSAvL0VNUFRZfSwgc28gbWVyZ2VkIHBhcmVudCBpc1xuLy8ge0Bjb2RlIC8vRU1QVFl9OyByZXR1cm4gbGVmdCBncmFwaC48YnI+XG4vLyA8ZW1iZWQgc3JjPVwiaW1hZ2VzL0xvY2FsTWVyZ2VfRW1wdHlQYXJlbnQuc3ZnXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+PC9wPlxuLy9cbi8vIDxwPlNwZWNpYWwgY2FzZSBvZiBsYXN0IG1lcmdlIGlmIGxvY2FsIGNvbnRleHQuPGJyPlxuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9Mb2NhbE1lcmdlX0RpZmZSb290cy5zdmdcIiB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz48L3A+XG4vL1xuLy8gPGgyPkZ1bGwtQ29udGV4dCBNZXJnZXM8L2gyPlxuLy9cbi8vIDxwPlRoZXNlIGZ1bGwtY29udGV4dCBtZXJnZSBvcGVyYXRpb25zIGFyZSB1c2VkIHdoZW4ge0Bjb2RlIHJvb3RJc1dpbGRjYXJkfVxuLy8gaXMgZmFsc2UuPC9wPlxuLy9cbi8vIDxwPjxlbWJlZCBzcmM9XCJpbWFnZXMvRnVsbE1lcmdlX0VtcHR5Um9vdHMuc3ZnXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+PC9wPlxuLy9cbi8vIDxwPk11c3Qga2VlcCBhbGwgY29udGV4dHM7IHtAbGluayAvL0VNUFRZfSBpbiBhcnJheSBpcyBhIHNwZWNpYWwgdmFsdWUgKGFuZFxuLy8gbnVsbCBwYXJlbnQpLjxicj5cbi8vIDxlbWJlZCBzcmM9XCJpbWFnZXMvRnVsbE1lcmdlX0VtcHR5Um9vdC5zdmdcIiB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz48L3A+XG4vL1xuLy8gPHA+PGVtYmVkIHNyYz1cImltYWdlcy9GdWxsTWVyZ2VfU2FtZVJvb3Quc3ZnXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+PC9wPlxuLy9cbi8vIEBwYXJhbSBhIHRoZSBmaXJzdCB7QGxpbmsgU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHR9XG4vLyBAcGFyYW0gYiB0aGUgc2Vjb25kIHtAbGluayBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dH1cbi8vIEBwYXJhbSByb290SXNXaWxkY2FyZCB7QGNvZGUgdHJ1ZX0gaWYgdGhpcyBpcyBhIGxvY2FsLWNvbnRleHQgbWVyZ2UsXG4vLyBvdGhlcndpc2UgZmFsc2UgdG8gaW5kaWNhdGUgYSBmdWxsLWNvbnRleHQgbWVyZ2Vcbi8vIC9cbmZ1bmN0aW9uIG1lcmdlUm9vdChhLCBiLCByb290SXNXaWxkY2FyZCkge1xuXHRpZiAocm9vdElzV2lsZGNhcmQpIHtcblx0XHRpZiAoYSA9PT0gUHJlZGljdGlvbkNvbnRleHQuRU1QVFkpIHtcblx0XHRcdHJldHVybiBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWTsgLy8gLy8gKyBiID0vL1xuXHRcdH1cblx0XHRpZiAoYiA9PT0gUHJlZGljdGlvbkNvbnRleHQuRU1QVFkpIHtcblx0XHRcdHJldHVybiBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWTsgLy8gYSArLy8gPS8vXG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGlmIChhID09PSBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWSAmJiBiID09PSBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWSkge1xuXHRcdFx0cmV0dXJuIFByZWRpY3Rpb25Db250ZXh0LkVNUFRZOyAvLyAkICsgJCA9ICRcblx0XHR9IGVsc2UgaWYgKGEgPT09IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZKSB7IC8vICQgKyB4ID0gWyQseF1cblx0XHRcdHZhciBwYXlsb2FkcyA9IFsgYi5yZXR1cm5TdGF0ZSxcblx0XHRcdFx0XHRQcmVkaWN0aW9uQ29udGV4dC5FTVBUWV9SRVRVUk5fU1RBVEUgXTtcblx0XHRcdHZhciBwYXJlbnRzID0gWyBiLnBhcmVudEN0eCwgbnVsbCBdO1xuXHRcdFx0cmV0dXJuIG5ldyBBcnJheVByZWRpY3Rpb25Db250ZXh0KHBhcmVudHMsIHBheWxvYWRzKTtcblx0XHR9IGVsc2UgaWYgKGIgPT09IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZKSB7IC8vIHggKyAkID0gWyQseF0gKCQgaXMgYWx3YXlzIGZpcnN0IGlmIHByZXNlbnQpXG5cdFx0XHR2YXIgcGF5bG9hZHMgPSBbIGEucmV0dXJuU3RhdGUsIFByZWRpY3Rpb25Db250ZXh0LkVNUFRZX1JFVFVSTl9TVEFURSBdO1xuXHRcdFx0dmFyIHBhcmVudHMgPSBbIGEucGFyZW50Q3R4LCBudWxsIF07XG5cdFx0XHRyZXR1cm4gbmV3IEFycmF5UHJlZGljdGlvbkNvbnRleHQocGFyZW50cywgcGF5bG9hZHMpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gbnVsbDtcbn1cblxuLy9cbi8vIE1lcmdlIHR3byB7QGxpbmsgQXJyYXlQcmVkaWN0aW9uQ29udGV4dH0gaW5zdGFuY2VzLlxuLy9cbi8vIDxwPkRpZmZlcmVudCB0b3BzLCBkaWZmZXJlbnQgcGFyZW50cy48YnI+XG4vLyA8ZW1iZWQgc3JjPVwiaW1hZ2VzL0FycmF5TWVyZ2VfRGlmZlRvcERpZmZQYXIuc3ZnXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+PC9wPlxuLy9cbi8vIDxwPlNoYXJlZCB0b3AsIHNhbWUgcGFyZW50cy48YnI+XG4vLyA8ZW1iZWQgc3JjPVwiaW1hZ2VzL0FycmF5TWVyZ2VfU2hhcmVUb3BTYW1lUGFyLnN2Z1wiIHR5cGU9XCJpbWFnZS9zdmcreG1sXCIvPjwvcD5cbi8vXG4vLyA8cD5TaGFyZWQgdG9wLCBkaWZmZXJlbnQgcGFyZW50cy48YnI+XG4vLyA8ZW1iZWQgc3JjPVwiaW1hZ2VzL0FycmF5TWVyZ2VfU2hhcmVUb3BEaWZmUGFyLnN2Z1wiIHR5cGU9XCJpbWFnZS9zdmcreG1sXCIvPjwvcD5cbi8vXG4vLyA8cD5TaGFyZWQgdG9wLCBhbGwgc2hhcmVkIHBhcmVudHMuPGJyPlxuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9BcnJheU1lcmdlX1NoYXJlVG9wU2hhcmVQYXIuc3ZnXCJcbi8vIHR5cGU9XCJpbWFnZS9zdmcreG1sXCIvPjwvcD5cbi8vXG4vLyA8cD5FcXVhbCB0b3BzLCBtZXJnZSBwYXJlbnRzIGFuZCByZWR1Y2UgdG9wIHRvXG4vLyB7QGxpbmsgU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHR9Ljxicj5cbi8vIDxlbWJlZCBzcmM9XCJpbWFnZXMvQXJyYXlNZXJnZV9FcXVhbFRvcC5zdmdcIiB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz48L3A+XG4vLyAvXG5mdW5jdGlvbiBtZXJnZUFycmF5cyhhLCBiLCByb290SXNXaWxkY2FyZCwgbWVyZ2VDYWNoZSkge1xuXHRpZiAobWVyZ2VDYWNoZSAhPT0gbnVsbCkge1xuXHRcdHZhciBwcmV2aW91cyA9IG1lcmdlQ2FjaGUuZ2V0KGEsIGIpO1xuXHRcdGlmIChwcmV2aW91cyAhPT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIHByZXZpb3VzO1xuXHRcdH1cblx0XHRwcmV2aW91cyA9IG1lcmdlQ2FjaGUuZ2V0KGIsIGEpO1xuXHRcdGlmIChwcmV2aW91cyAhPT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIHByZXZpb3VzO1xuXHRcdH1cblx0fVxuXHQvLyBtZXJnZSBzb3J0ZWQgcGF5bG9hZHMgYSArIGIgPT4gTVxuXHR2YXIgaSA9IDA7IC8vIHdhbGtzIGFcblx0dmFyIGogPSAwOyAvLyB3YWxrcyBiXG5cdHZhciBrID0gMDsgLy8gd2Fsa3MgdGFyZ2V0IE0gYXJyYXlcblxuXHR2YXIgbWVyZ2VkUmV0dXJuU3RhdGVzID0gW107XG5cdHZhciBtZXJnZWRQYXJlbnRzID0gW107XG5cdC8vIHdhbGsgYW5kIG1lcmdlIHRvIHlpZWxkIG1lcmdlZFBhcmVudHMsIG1lcmdlZFJldHVyblN0YXRlc1xuXHR3aGlsZSAoaSA8IGEucmV0dXJuU3RhdGVzLmxlbmd0aCAmJiBqIDwgYi5yZXR1cm5TdGF0ZXMubGVuZ3RoKSB7XG5cdFx0dmFyIGFfcGFyZW50ID0gYS5wYXJlbnRzW2ldO1xuXHRcdHZhciBiX3BhcmVudCA9IGIucGFyZW50c1tqXTtcblx0XHRpZiAoYS5yZXR1cm5TdGF0ZXNbaV0gPT09IGIucmV0dXJuU3RhdGVzW2pdKSB7XG5cdFx0XHQvLyBzYW1lIHBheWxvYWQgKHN0YWNrIHRvcHMgYXJlIGVxdWFsKSwgbXVzdCB5aWVsZCBtZXJnZWQgc2luZ2xldG9uXG5cdFx0XHR2YXIgcGF5bG9hZCA9IGEucmV0dXJuU3RhdGVzW2ldO1xuXHRcdFx0Ly8gJCskID0gJFxuXHRcdFx0dmFyIGJvdGhEb2xsYXJzID0gcGF5bG9hZCA9PT0gUHJlZGljdGlvbkNvbnRleHQuRU1QVFlfUkVUVVJOX1NUQVRFICYmXG5cdFx0XHRcdFx0YV9wYXJlbnQgPT09IG51bGwgJiYgYl9wYXJlbnQgPT09IG51bGw7XG5cdFx0XHR2YXIgYXhfYXggPSAoYV9wYXJlbnQgIT09IG51bGwgJiYgYl9wYXJlbnQgIT09IG51bGwgJiYgYV9wYXJlbnQgPT09IGJfcGFyZW50KTsgLy8gYXgrYXhcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyAtPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGF4XG5cdFx0XHRpZiAoYm90aERvbGxhcnMgfHwgYXhfYXgpIHtcblx0XHRcdFx0bWVyZ2VkUGFyZW50c1trXSA9IGFfcGFyZW50OyAvLyBjaG9vc2UgbGVmdFxuXHRcdFx0XHRtZXJnZWRSZXR1cm5TdGF0ZXNba10gPSBwYXlsb2FkO1xuXHRcdFx0fSBlbHNlIHsgLy8gYXgrYXkgLT4gYSdbeCx5XVxuXHRcdFx0XHR2YXIgbWVyZ2VkUGFyZW50ID0gbWVyZ2UoYV9wYXJlbnQsIGJfcGFyZW50LCByb290SXNXaWxkY2FyZCwgbWVyZ2VDYWNoZSk7XG5cdFx0XHRcdG1lcmdlZFBhcmVudHNba10gPSBtZXJnZWRQYXJlbnQ7XG5cdFx0XHRcdG1lcmdlZFJldHVyblN0YXRlc1trXSA9IHBheWxvYWQ7XG5cdFx0XHR9XG5cdFx0XHRpICs9IDE7IC8vIGhvcCBvdmVyIGxlZnQgb25lIGFzIHVzdWFsXG5cdFx0XHRqICs9IDE7IC8vIGJ1dCBhbHNvIHNraXAgb25lIGluIHJpZ2h0IHNpZGUgc2luY2Ugd2UgbWVyZ2Vcblx0XHR9IGVsc2UgaWYgKGEucmV0dXJuU3RhdGVzW2ldIDwgYi5yZXR1cm5TdGF0ZXNbal0pIHsgLy8gY29weSBhW2ldIHRvIE1cblx0XHRcdG1lcmdlZFBhcmVudHNba10gPSBhX3BhcmVudDtcblx0XHRcdG1lcmdlZFJldHVyblN0YXRlc1trXSA9IGEucmV0dXJuU3RhdGVzW2ldO1xuXHRcdFx0aSArPSAxO1xuXHRcdH0gZWxzZSB7IC8vIGIgPiBhLCBjb3B5IGJbal0gdG8gTVxuXHRcdFx0bWVyZ2VkUGFyZW50c1trXSA9IGJfcGFyZW50O1xuXHRcdFx0bWVyZ2VkUmV0dXJuU3RhdGVzW2tdID0gYi5yZXR1cm5TdGF0ZXNbal07XG5cdFx0XHRqICs9IDE7XG5cdFx0fVxuXHRcdGsgKz0gMTtcblx0fVxuXHQvLyBjb3B5IG92ZXIgYW55IHBheWxvYWRzIHJlbWFpbmluZyBpbiBlaXRoZXIgYXJyYXlcblx0aWYgKGkgPCBhLnJldHVyblN0YXRlcy5sZW5ndGgpIHtcblx0XHRmb3IgKHZhciBwID0gaTsgcCA8IGEucmV0dXJuU3RhdGVzLmxlbmd0aDsgcCsrKSB7XG5cdFx0XHRtZXJnZWRQYXJlbnRzW2tdID0gYS5wYXJlbnRzW3BdO1xuXHRcdFx0bWVyZ2VkUmV0dXJuU3RhdGVzW2tdID0gYS5yZXR1cm5TdGF0ZXNbcF07XG5cdFx0XHRrICs9IDE7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGZvciAodmFyIHAgPSBqOyBwIDwgYi5yZXR1cm5TdGF0ZXMubGVuZ3RoOyBwKyspIHtcblx0XHRcdG1lcmdlZFBhcmVudHNba10gPSBiLnBhcmVudHNbcF07XG5cdFx0XHRtZXJnZWRSZXR1cm5TdGF0ZXNba10gPSBiLnJldHVyblN0YXRlc1twXTtcblx0XHRcdGsgKz0gMTtcblx0XHR9XG5cdH1cblx0Ly8gdHJpbSBtZXJnZWQgaWYgd2UgY29tYmluZWQgYSBmZXcgdGhhdCBoYWQgc2FtZSBzdGFjayB0b3BzXG5cdGlmIChrIDwgbWVyZ2VkUGFyZW50cy5sZW5ndGgpIHsgLy8gd3JpdGUgaW5kZXggPCBsYXN0IHBvc2l0aW9uOyB0cmltXG5cdFx0aWYgKGsgPT09IDEpIHsgLy8gZm9yIGp1c3Qgb25lIG1lcmdlZCBlbGVtZW50LCByZXR1cm4gc2luZ2xldG9uIHRvcFxuXHRcdFx0dmFyIGFfID0gU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQuY3JlYXRlKG1lcmdlZFBhcmVudHNbMF0sXG5cdFx0XHRcdFx0bWVyZ2VkUmV0dXJuU3RhdGVzWzBdKTtcblx0XHRcdGlmIChtZXJnZUNhY2hlICE9PSBudWxsKSB7XG5cdFx0XHRcdG1lcmdlQ2FjaGUuc2V0KGEsIGIsIGFfKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBhXztcblx0XHR9XG5cdFx0bWVyZ2VkUGFyZW50cyA9IG1lcmdlZFBhcmVudHMuc2xpY2UoMCwgayk7XG5cdFx0bWVyZ2VkUmV0dXJuU3RhdGVzID0gbWVyZ2VkUmV0dXJuU3RhdGVzLnNsaWNlKDAsIGspO1xuXHR9XG5cblx0dmFyIE0gPSBuZXcgQXJyYXlQcmVkaWN0aW9uQ29udGV4dChtZXJnZWRQYXJlbnRzLCBtZXJnZWRSZXR1cm5TdGF0ZXMpO1xuXG5cdC8vIGlmIHdlIGNyZWF0ZWQgc2FtZSBhcnJheSBhcyBhIG9yIGIsIHJldHVybiB0aGF0IGluc3RlYWRcblx0Ly8gVE9ETzogdHJhY2sgd2hldGhlciB0aGlzIGlzIHBvc3NpYmxlIGFib3ZlIGR1cmluZyBtZXJnZSBzb3J0IGZvciBzcGVlZFxuXHRpZiAoTSA9PT0gYSkge1xuXHRcdGlmIChtZXJnZUNhY2hlICE9PSBudWxsKSB7XG5cdFx0XHRtZXJnZUNhY2hlLnNldChhLCBiLCBhKTtcblx0XHR9XG5cdFx0cmV0dXJuIGE7XG5cdH1cblx0aWYgKE0gPT09IGIpIHtcblx0XHRpZiAobWVyZ2VDYWNoZSAhPT0gbnVsbCkge1xuXHRcdFx0bWVyZ2VDYWNoZS5zZXQoYSwgYiwgYik7XG5cdFx0fVxuXHRcdHJldHVybiBiO1xuXHR9XG5cdGNvbWJpbmVDb21tb25QYXJlbnRzKG1lcmdlZFBhcmVudHMpO1xuXG5cdGlmIChtZXJnZUNhY2hlICE9PSBudWxsKSB7XG5cdFx0bWVyZ2VDYWNoZS5zZXQoYSwgYiwgTSk7XG5cdH1cblx0cmV0dXJuIE07XG59XG5cbi8vXG4vLyBNYWtlIHBhc3Mgb3ZlciBhbGwgPGVtPk08L2VtPiB7QGNvZGUgcGFyZW50c307IG1lcmdlIGFueSB7QGNvZGUgZXF1YWxzKCl9XG4vLyBvbmVzLlxuLy8gL1xuZnVuY3Rpb24gY29tYmluZUNvbW1vblBhcmVudHMocGFyZW50cykge1xuXHR2YXIgdW5pcXVlUGFyZW50cyA9IHt9O1xuXG5cdGZvciAodmFyIHAgPSAwOyBwIDwgcGFyZW50cy5sZW5ndGg7IHArKykge1xuXHRcdHZhciBwYXJlbnQgPSBwYXJlbnRzW3BdO1xuXHRcdGlmICghKHBhcmVudCBpbiB1bmlxdWVQYXJlbnRzKSkge1xuXHRcdFx0dW5pcXVlUGFyZW50c1twYXJlbnRdID0gcGFyZW50O1xuXHRcdH1cblx0fVxuXHRmb3IgKHZhciBxID0gMDsgcSA8IHBhcmVudHMubGVuZ3RoOyBxKyspIHtcblx0XHRwYXJlbnRzW3FdID0gdW5pcXVlUGFyZW50c1twYXJlbnRzW3FdXTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRDYWNoZWRQcmVkaWN0aW9uQ29udGV4dChjb250ZXh0LCBjb250ZXh0Q2FjaGUsIHZpc2l0ZWQpIHtcblx0aWYgKGNvbnRleHQuaXNFbXB0eSgpKSB7XG5cdFx0cmV0dXJuIGNvbnRleHQ7XG5cdH1cblx0dmFyIGV4aXN0aW5nID0gdmlzaXRlZFtjb250ZXh0XSB8fCBudWxsO1xuXHRpZiAoZXhpc3RpbmcgIT09IG51bGwpIHtcblx0XHRyZXR1cm4gZXhpc3Rpbmc7XG5cdH1cblx0ZXhpc3RpbmcgPSBjb250ZXh0Q2FjaGUuZ2V0KGNvbnRleHQpO1xuXHRpZiAoZXhpc3RpbmcgIT09IG51bGwpIHtcblx0XHR2aXNpdGVkW2NvbnRleHRdID0gZXhpc3Rpbmc7XG5cdFx0cmV0dXJuIGV4aXN0aW5nO1xuXHR9XG5cdHZhciBjaGFuZ2VkID0gZmFsc2U7XG5cdHZhciBwYXJlbnRzID0gW107XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgcGFyZW50cy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBwYXJlbnQgPSBnZXRDYWNoZWRQcmVkaWN0aW9uQ29udGV4dChjb250ZXh0LmdldFBhcmVudChpKSwgY29udGV4dENhY2hlLCB2aXNpdGVkKTtcblx0XHRpZiAoY2hhbmdlZCB8fCBwYXJlbnQgIT09IGNvbnRleHQuZ2V0UGFyZW50KGkpKSB7XG5cdFx0XHRpZiAoIWNoYW5nZWQpIHtcblx0XHRcdFx0cGFyZW50cyA9IFtdO1xuXHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGNvbnRleHQubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRwYXJlbnRzW2pdID0gY29udGV4dC5nZXRQYXJlbnQoaik7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y2hhbmdlZCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRwYXJlbnRzW2ldID0gcGFyZW50O1xuXHRcdH1cblx0fVxuXHRpZiAoIWNoYW5nZWQpIHtcblx0XHRjb250ZXh0Q2FjaGUuYWRkKGNvbnRleHQpO1xuXHRcdHZpc2l0ZWRbY29udGV4dF0gPSBjb250ZXh0O1xuXHRcdHJldHVybiBjb250ZXh0O1xuXHR9XG5cdHZhciB1cGRhdGVkID0gbnVsbDtcblx0aWYgKHBhcmVudHMubGVuZ3RoID09PSAwKSB7XG5cdFx0dXBkYXRlZCA9IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZO1xuXHR9IGVsc2UgaWYgKHBhcmVudHMubGVuZ3RoID09PSAxKSB7XG5cdFx0dXBkYXRlZCA9IFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0LmNyZWF0ZShwYXJlbnRzWzBdLCBjb250ZXh0XG5cdFx0XHRcdC5nZXRSZXR1cm5TdGF0ZSgwKSk7XG5cdH0gZWxzZSB7XG5cdFx0dXBkYXRlZCA9IG5ldyBBcnJheVByZWRpY3Rpb25Db250ZXh0KHBhcmVudHMsIGNvbnRleHQucmV0dXJuU3RhdGVzKTtcblx0fVxuXHRjb250ZXh0Q2FjaGUuYWRkKHVwZGF0ZWQpO1xuXHR2aXNpdGVkW3VwZGF0ZWRdID0gdXBkYXRlZDtcblx0dmlzaXRlZFtjb250ZXh0XSA9IHVwZGF0ZWQ7XG5cblx0cmV0dXJuIHVwZGF0ZWQ7XG59XG5cbi8vIHRlcidzIHJlY3Vyc2l2ZSB2ZXJzaW9uIG9mIFNhbSdzIGdldEFsbE5vZGVzKClcbmZ1bmN0aW9uIGdldEFsbENvbnRleHROb2Rlcyhjb250ZXh0LCBub2RlcywgdmlzaXRlZCkge1xuXHRpZiAobm9kZXMgPT09IG51bGwpIHtcblx0XHRub2RlcyA9IFtdO1xuXHRcdHJldHVybiBnZXRBbGxDb250ZXh0Tm9kZXMoY29udGV4dCwgbm9kZXMsIHZpc2l0ZWQpO1xuXHR9IGVsc2UgaWYgKHZpc2l0ZWQgPT09IG51bGwpIHtcblx0XHR2aXNpdGVkID0ge307XG5cdFx0cmV0dXJuIGdldEFsbENvbnRleHROb2Rlcyhjb250ZXh0LCBub2RlcywgdmlzaXRlZCk7XG5cdH0gZWxzZSB7XG5cdFx0aWYgKGNvbnRleHQgPT09IG51bGwgfHwgdmlzaXRlZFtjb250ZXh0XSAhPT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIG5vZGVzO1xuXHRcdH1cblx0XHR2aXNpdGVkW2NvbnRleHRdID0gY29udGV4dDtcblx0XHRub2Rlcy5wdXNoKGNvbnRleHQpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgY29udGV4dC5sZW5ndGg7IGkrKykge1xuXHRcdFx0Z2V0QWxsQ29udGV4dE5vZGVzKGNvbnRleHQuZ2V0UGFyZW50KGkpLCBub2RlcywgdmlzaXRlZCk7XG5cdFx0fVxuXHRcdHJldHVybiBub2Rlcztcblx0fVxufVxuXG5leHBvcnRzLm1lcmdlID0gbWVyZ2U7XG5leHBvcnRzLlByZWRpY3Rpb25Db250ZXh0ID0gUHJlZGljdGlvbkNvbnRleHQ7XG5leHBvcnRzLlByZWRpY3Rpb25Db250ZXh0Q2FjaGUgPSBQcmVkaWN0aW9uQ29udGV4dENhY2hlO1xuZXhwb3J0cy5TaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dCA9IFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0O1xuZXhwb3J0cy5wcmVkaWN0aW9uQ29udGV4dEZyb21SdWxlQ29udGV4dCA9IHByZWRpY3Rpb25Db250ZXh0RnJvbVJ1bGVDb250ZXh0O1xuZXhwb3J0cy5nZXRDYWNoZWRQcmVkaWN0aW9uQ29udGV4dCA9IGdldENhY2hlZFByZWRpY3Rpb25Db250ZXh0O1xuIiwiLy9cbi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbi8vXG5cbnZhciBUb2tlbiA9IHJlcXVpcmUoJy4vVG9rZW4nKS5Ub2tlbjtcbnZhciBDb25zb2xlRXJyb3JMaXN0ZW5lciA9IHJlcXVpcmUoJy4vZXJyb3IvRXJyb3JMaXN0ZW5lcicpLkNvbnNvbGVFcnJvckxpc3RlbmVyO1xudmFyIFByb3h5RXJyb3JMaXN0ZW5lciA9IHJlcXVpcmUoJy4vZXJyb3IvRXJyb3JMaXN0ZW5lcicpLlByb3h5RXJyb3JMaXN0ZW5lcjtcblxuZnVuY3Rpb24gUmVjb2duaXplcigpIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMgPSBbIENvbnNvbGVFcnJvckxpc3RlbmVyLklOU1RBTkNFIF07XG4gICAgdGhpcy5faW50ZXJwID0gbnVsbDtcbiAgICB0aGlzLl9zdGF0ZU51bWJlciA9IC0xO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5SZWNvZ25pemVyLnRva2VuVHlwZU1hcENhY2hlID0ge307XG5SZWNvZ25pemVyLnJ1bGVJbmRleE1hcENhY2hlID0ge307XG5cblxuUmVjb2duaXplci5wcm90b3R5cGUuY2hlY2tWZXJzaW9uID0gZnVuY3Rpb24odG9vbFZlcnNpb24pIHtcbiAgICB2YXIgcnVudGltZVZlcnNpb24gPSBcIjQuNy4yXCI7XG4gICAgaWYgKHJ1bnRpbWVWZXJzaW9uIT09dG9vbFZlcnNpb24pIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJBTlRMUiBydW50aW1lIGFuZCBnZW5lcmF0ZWQgY29kZSB2ZXJzaW9ucyBkaXNhZ3JlZTogXCIrcnVudGltZVZlcnNpb24rXCIhPVwiK3Rvb2xWZXJzaW9uKTtcbiAgICB9XG59O1xuXG5SZWNvZ25pemVyLnByb3RvdHlwZS5hZGRFcnJvckxpc3RlbmVyID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG59O1xuXG5SZWNvZ25pemVyLnByb3RvdHlwZS5yZW1vdmVFcnJvckxpc3RlbmVycyA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpc3RlbmVycyA9IFtdO1xufTtcblxuUmVjb2duaXplci5wcm90b3R5cGUuZ2V0VG9rZW5UeXBlTWFwID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHRva2VuTmFtZXMgPSB0aGlzLmdldFRva2VuTmFtZXMoKTtcbiAgICBpZiAodG9rZW5OYW1lcz09PW51bGwpIHtcbiAgICAgICAgdGhyb3coXCJUaGUgY3VycmVudCByZWNvZ25pemVyIGRvZXMgbm90IHByb3ZpZGUgYSBsaXN0IG9mIHRva2VuIG5hbWVzLlwiKTtcbiAgICB9XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMudG9rZW5UeXBlTWFwQ2FjaGVbdG9rZW5OYW1lc107XG4gICAgaWYocmVzdWx0PT09dW5kZWZpbmVkKSB7XG4gICAgICAgIHJlc3VsdCA9IHRva2VuTmFtZXMucmVkdWNlKGZ1bmN0aW9uKG8sIGssIGkpIHsgb1trXSA9IGk7IH0pO1xuICAgICAgICByZXN1bHQuRU9GID0gVG9rZW4uRU9GO1xuICAgICAgICB0aGlzLnRva2VuVHlwZU1hcENhY2hlW3Rva2VuTmFtZXNdID0gcmVzdWx0O1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gR2V0IGEgbWFwIGZyb20gcnVsZSBuYW1lcyB0byBydWxlIGluZGV4ZXMuXG4vL1xuLy8gPHA+VXNlZCBmb3IgWFBhdGggYW5kIHRyZWUgcGF0dGVybiBjb21waWxhdGlvbi48L3A+XG4vL1xuUmVjb2duaXplci5wcm90b3R5cGUuZ2V0UnVsZUluZGV4TWFwID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHJ1bGVOYW1lcyA9IHRoaXMucnVsZU5hbWVzO1xuICAgIGlmIChydWxlTmFtZXM9PT1udWxsKSB7XG4gICAgICAgIHRocm93KFwiVGhlIGN1cnJlbnQgcmVjb2duaXplciBkb2VzIG5vdCBwcm92aWRlIGEgbGlzdCBvZiBydWxlIG5hbWVzLlwiKTtcbiAgICB9XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMucnVsZUluZGV4TWFwQ2FjaGVbcnVsZU5hbWVzXTtcbiAgICBpZihyZXN1bHQ9PT11bmRlZmluZWQpIHtcbiAgICAgICAgcmVzdWx0ID0gcnVsZU5hbWVzLnJlZHVjZShmdW5jdGlvbihvLCBrLCBpKSB7IG9ba10gPSBpOyB9KTtcbiAgICAgICAgdGhpcy5ydWxlSW5kZXhNYXBDYWNoZVtydWxlTmFtZXNdID0gcmVzdWx0O1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuUmVjb2duaXplci5wcm90b3R5cGUuZ2V0VG9rZW5UeXBlID0gZnVuY3Rpb24odG9rZW5OYW1lKSB7XG4gICAgdmFyIHR0eXBlID0gdGhpcy5nZXRUb2tlblR5cGVNYXAoKVt0b2tlbk5hbWVdO1xuICAgIGlmICh0dHlwZSAhPT11bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHR0eXBlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBUb2tlbi5JTlZBTElEX1RZUEU7XG4gICAgfVxufTtcblxuXG4vLyBXaGF0IGlzIHRoZSBlcnJvciBoZWFkZXIsIG5vcm1hbGx5IGxpbmUvY2hhcmFjdGVyIHBvc2l0aW9uIGluZm9ybWF0aW9uPy8vXG5SZWNvZ25pemVyLnByb3RvdHlwZS5nZXRFcnJvckhlYWRlciA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbGluZSA9IGUuZ2V0T2ZmZW5kaW5nVG9rZW4oKS5saW5lO1xuICAgIHZhciBjb2x1bW4gPSBlLmdldE9mZmVuZGluZ1Rva2VuKCkuY29sdW1uO1xuICAgIHJldHVybiBcImxpbmUgXCIgKyBsaW5lICsgXCI6XCIgKyBjb2x1bW47XG59O1xuXG5cbi8vIEhvdyBzaG91bGQgYSB0b2tlbiBiZSBkaXNwbGF5ZWQgaW4gYW4gZXJyb3IgbWVzc2FnZT8gVGhlIGRlZmF1bHRcbi8vICBpcyB0byBkaXNwbGF5IGp1c3QgdGhlIHRleHQsIGJ1dCBkdXJpbmcgZGV2ZWxvcG1lbnQgeW91IG1pZ2h0XG4vLyAgd2FudCB0byBoYXZlIGEgbG90IG9mIGluZm9ybWF0aW9uIHNwaXQgb3V0LiAgT3ZlcnJpZGUgaW4gdGhhdCBjYXNlXG4vLyAgdG8gdXNlIHQudG9TdHJpbmcoKSAod2hpY2gsIGZvciBDb21tb25Ub2tlbiwgZHVtcHMgZXZlcnl0aGluZyBhYm91dFxuLy8gIHRoZSB0b2tlbikuIFRoaXMgaXMgYmV0dGVyIHRoYW4gZm9yY2luZyB5b3UgdG8gb3ZlcnJpZGUgYSBtZXRob2QgaW5cbi8vICB5b3VyIHRva2VuIG9iamVjdHMgYmVjYXVzZSB5b3UgZG9uJ3QgaGF2ZSB0byBnbyBtb2RpZnkgeW91ciBsZXhlclxuLy8gIHNvIHRoYXQgaXQgY3JlYXRlcyBhIG5ldyBKYXZhIHR5cGUuXG4vL1xuLy8gQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2QgaXMgbm90IGNhbGxlZCBieSB0aGUgQU5UTFIgNCBSdW50aW1lLiBTcGVjaWZpY1xuLy8gaW1wbGVtZW50YXRpb25zIG9mIHtAbGluayBBTlRMUkVycm9yU3RyYXRlZ3l9IG1heSBwcm92aWRlIGEgc2ltaWxhclxuLy8gZmVhdHVyZSB3aGVuIG5lY2Vzc2FyeS4gRm9yIGV4YW1wbGUsIHNlZVxuLy8ge0BsaW5rIERlZmF1bHRFcnJvclN0cmF0ZWd5Ly9nZXRUb2tlbkVycm9yRGlzcGxheX0uXG4vL1xuUmVjb2duaXplci5wcm90b3R5cGUuZ2V0VG9rZW5FcnJvckRpc3BsYXkgPSBmdW5jdGlvbih0KSB7XG4gICAgaWYgKHQ9PT1udWxsKSB7XG4gICAgICAgIHJldHVybiBcIjxubyB0b2tlbj5cIjtcbiAgICB9XG4gICAgdmFyIHMgPSB0LnRleHQ7XG4gICAgaWYgKHM9PT1udWxsKSB7XG4gICAgICAgIGlmICh0LnR5cGU9PT1Ub2tlbi5FT0YpIHtcbiAgICAgICAgICAgIHMgPSBcIjxFT0Y+XCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzID0gXCI8XCIgKyB0LnR5cGUgKyBcIj5cIjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzID0gcy5yZXBsYWNlKFwiXFxuXCIsXCJcXFxcblwiKS5yZXBsYWNlKFwiXFxyXCIsXCJcXFxcclwiKS5yZXBsYWNlKFwiXFx0XCIsXCJcXFxcdFwiKTtcbiAgICByZXR1cm4gXCInXCIgKyBzICsgXCInXCI7XG59O1xuXG5SZWNvZ25pemVyLnByb3RvdHlwZS5nZXRFcnJvckxpc3RlbmVyRGlzcGF0Y2ggPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFByb3h5RXJyb3JMaXN0ZW5lcih0aGlzLl9saXN0ZW5lcnMpO1xufTtcblxuLy8gc3ViY2xhc3MgbmVlZHMgdG8gb3ZlcnJpZGUgdGhlc2UgaWYgdGhlcmUgYXJlIHNlbXByZWRzIG9yIGFjdGlvbnNcbi8vIHRoYXQgdGhlIEFUTiBpbnRlcnAgbmVlZHMgdG8gZXhlY3V0ZVxuUmVjb2duaXplci5wcm90b3R5cGUuc2VtcHJlZCA9IGZ1bmN0aW9uKGxvY2FsY3R4LCBydWxlSW5kZXgsIGFjdGlvbkluZGV4KSB7XG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG5SZWNvZ25pemVyLnByb3RvdHlwZS5wcmVjcHJlZCA9IGZ1bmN0aW9uKGxvY2FsY3R4ICwgcHJlY2VkZW5jZSkge1xuICAgIHJldHVybiB0cnVlO1xufTtcblxuLy9JbmRpY2F0ZSB0aGF0IHRoZSByZWNvZ25pemVyIGhhcyBjaGFuZ2VkIGludGVybmFsIHN0YXRlIHRoYXQgaXNcbi8vY29uc2lzdGVudCB3aXRoIHRoZSBBVE4gc3RhdGUgcGFzc2VkIGluLiAgVGhpcyB3YXkgd2UgYWx3YXlzIGtub3dcbi8vd2hlcmUgd2UgYXJlIGluIHRoZSBBVE4gYXMgdGhlIHBhcnNlciBnb2VzIGFsb25nLiBUaGUgcnVsZVxuLy9jb250ZXh0IG9iamVjdHMgZm9ybSBhIHN0YWNrIHRoYXQgbGV0cyB1cyBzZWUgdGhlIHN0YWNrIG9mXG4vL2ludm9raW5nIHJ1bGVzLiBDb21iaW5lIHRoaXMgYW5kIHdlIGhhdmUgY29tcGxldGUgQVROXG4vL2NvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWNvZ25pemVyLnByb3RvdHlwZSwgXCJzdGF0ZVwiLCB7XG5cdGdldCA6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLl9zdGF0ZU51bWJlcjtcblx0fSxcblx0c2V0IDogZnVuY3Rpb24oc3RhdGUpIHtcblx0XHR0aGlzLl9zdGF0ZU51bWJlciA9IHN0YXRlO1xuXHR9XG59KTtcblxuXG5leHBvcnRzLlJlY29nbml6ZXIgPSBSZWNvZ25pemVyO1xuIiwiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy8vXG5cbi8vICBBIHJ1bGUgY29udGV4dCBpcyBhIHJlY29yZCBvZiBhIHNpbmdsZSBydWxlIGludm9jYXRpb24uIEl0IGtub3dzXG4vLyAgd2hpY2ggY29udGV4dCBpbnZva2VkIGl0LCBpZiBhbnkuIElmIHRoZXJlIGlzIG5vIHBhcmVudCBjb250ZXh0LCB0aGVuXG4vLyAgbmF0dXJhbGx5IHRoZSBpbnZva2luZyBzdGF0ZSBpcyBub3QgdmFsaWQuICBUaGUgcGFyZW50IGxpbmtcbi8vICBwcm92aWRlcyBhIGNoYWluIHVwd2FyZHMgZnJvbSB0aGUgY3VycmVudCBydWxlIGludm9jYXRpb24gdG8gdGhlIHJvb3Rcbi8vICBvZiB0aGUgaW52b2NhdGlvbiB0cmVlLCBmb3JtaW5nIGEgc3RhY2suIFdlIGFjdHVhbGx5IGNhcnJ5IG5vXG4vLyAgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJ1bGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29udGV4dCAoZXhjZXB0XG4vLyAgd2hlbiBwYXJzaW5nKS4gV2Uga2VlcCBvbmx5IHRoZSBzdGF0ZSBudW1iZXIgb2YgdGhlIGludm9raW5nIHN0YXRlIGZyb21cbi8vICB0aGUgQVROIHN1Ym1hY2hpbmUgdGhhdCBpbnZva2VkIHRoaXMuIENvbnRyYXN0IHRoaXMgd2l0aCB0aGUgc1xuLy8gIHBvaW50ZXIgaW5zaWRlIFBhcnNlclJ1bGVDb250ZXh0IHRoYXQgdHJhY2tzIHRoZSBjdXJyZW50IHN0YXRlXG4vLyAgYmVpbmcgXCJleGVjdXRlZFwiIGZvciB0aGUgY3VycmVudCBydWxlLlxuLy9cbi8vICBUaGUgcGFyZW50IGNvbnRleHRzIGFyZSB1c2VmdWwgZm9yIGNvbXB1dGluZyBsb29rYWhlYWQgc2V0cyBhbmRcbi8vICBnZXR0aW5nIGVycm9yIGluZm9ybWF0aW9uLlxuLy9cbi8vICBUaGVzZSBvYmplY3RzIGFyZSB1c2VkIGR1cmluZyBwYXJzaW5nIGFuZCBwcmVkaWN0aW9uLlxuLy8gIEZvciB0aGUgc3BlY2lhbCBjYXNlIG9mIHBhcnNlcnMsIHdlIHVzZSB0aGUgc3ViY2xhc3Ncbi8vICBQYXJzZXJSdWxlQ29udGV4dC5cbi8vXG4vLyAgQHNlZSBQYXJzZXJSdWxlQ29udGV4dFxuLy8vXG5cbnZhciBSdWxlTm9kZSA9IHJlcXVpcmUoJy4vdHJlZS9UcmVlJykuUnVsZU5vZGU7XG52YXIgSU5WQUxJRF9JTlRFUlZBTCA9IHJlcXVpcmUoJy4vdHJlZS9UcmVlJykuSU5WQUxJRF9JTlRFUlZBTDtcbnZhciBJTlZBTElEX0FMVF9OVU1CRVIgPSByZXF1aXJlKCcuL2F0bi9BVE4nKS5JTlZBTElEX0FMVF9OVU1CRVI7XG5cbmZ1bmN0aW9uIFJ1bGVDb250ZXh0KHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRSdWxlTm9kZS5jYWxsKHRoaXMpO1xuXHQvLyBXaGF0IGNvbnRleHQgaW52b2tlZCB0aGlzIHJ1bGU/XG5cdHRoaXMucGFyZW50Q3R4ID0gcGFyZW50IHx8IG51bGw7XG5cdC8vIFdoYXQgc3RhdGUgaW52b2tlZCB0aGUgcnVsZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb250ZXh0P1xuXHQvLyBUaGUgXCJyZXR1cm4gYWRkcmVzc1wiIGlzIHRoZSBmb2xsb3dTdGF0ZSBvZiBpbnZva2luZ1N0YXRlXG5cdC8vIElmIHBhcmVudCBpcyBudWxsLCB0aGlzIHNob3VsZCBiZSAtMS5cblx0dGhpcy5pbnZva2luZ1N0YXRlID0gaW52b2tpbmdTdGF0ZSB8fCAtMTtcblx0cmV0dXJuIHRoaXM7XG59XG5cblJ1bGVDb250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUnVsZU5vZGUucHJvdG90eXBlKTtcblJ1bGVDb250ZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJ1bGVDb250ZXh0O1xuXG5SdWxlQ29udGV4dC5wcm90b3R5cGUuZGVwdGggPSBmdW5jdGlvbigpIHtcblx0dmFyIG4gPSAwO1xuXHR2YXIgcCA9IHRoaXM7XG5cdHdoaWxlIChwICE9PSBudWxsKSB7XG5cdFx0cCA9IHAucGFyZW50Q3R4O1xuXHRcdG4gKz0gMTtcblx0fVxuXHRyZXR1cm4gbjtcbn07XG5cbi8vIEEgY29udGV4dCBpcyBlbXB0eSBpZiB0aGVyZSBpcyBubyBpbnZva2luZyBzdGF0ZTsgbWVhbmluZyBub2JvZHkgY2FsbFxuLy8gY3VycmVudCBjb250ZXh0LlxuUnVsZUNvbnRleHQucHJvdG90eXBlLmlzRW1wdHkgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuaW52b2tpbmdTdGF0ZSA9PT0gLTE7XG59O1xuXG4vLyBzYXRpc2Z5IHRoZSBQYXJzZVRyZWUgLyBTeW50YXhUcmVlIGludGVyZmFjZVxuXG5SdWxlQ29udGV4dC5wcm90b3R5cGUuZ2V0U291cmNlSW50ZXJ2YWwgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIElOVkFMSURfSU5URVJWQUw7XG59O1xuXG5SdWxlQ29udGV4dC5wcm90b3R5cGUuZ2V0UnVsZUNvbnRleHQgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5SdWxlQ29udGV4dC5wcm90b3R5cGUuZ2V0UGF5bG9hZCA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcztcbn07XG5cbi8vIFJldHVybiB0aGUgY29tYmluZWQgdGV4dCBvZiBhbGwgY2hpbGQgbm9kZXMuIFRoaXMgbWV0aG9kIG9ubHkgY29uc2lkZXJzXG4vLyB0b2tlbnMgd2hpY2ggaGF2ZSBiZWVuIGFkZGVkIHRvIHRoZSBwYXJzZSB0cmVlLlxuLy8gPHA+XG4vLyBTaW5jZSB0b2tlbnMgb24gaGlkZGVuIGNoYW5uZWxzIChlLmcuIHdoaXRlc3BhY2Ugb3IgY29tbWVudHMpIGFyZSBub3Rcbi8vIGFkZGVkIHRvIHRoZSBwYXJzZSB0cmVlcywgdGhleSB3aWxsIG5vdCBhcHBlYXIgaW4gdGhlIG91dHB1dCBvZiB0aGlzXG4vLyBtZXRob2QuXG4vLyAvXG5SdWxlQ29udGV4dC5wcm90b3R5cGUuZ2V0VGV4dCA9IGZ1bmN0aW9uKCkge1xuXHRpZiAodGhpcy5nZXRDaGlsZENvdW50KCkgPT09IDApIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdGhpcy5jaGlsZHJlbi5tYXAoZnVuY3Rpb24oY2hpbGQpIHtcblx0XHRcdHJldHVybiBjaGlsZC5nZXRUZXh0KCk7XG5cdFx0fSkuam9pbihcIlwiKTtcblx0fVxufTtcblxuLy8gRm9yIHJ1bGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGFyc2UgdHJlZSBpbnRlcm5hbCBub2RlLCByZXR1cm5cbi8vIHRoZSBvdXRlciBhbHRlcm5hdGl2ZSBudW1iZXIgdXNlZCB0byBtYXRjaCB0aGUgaW5wdXQuIERlZmF1bHRcbi8vIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IGNvbXB1dGUgbm9yIHN0b3JlIHRoaXMgYWx0IG51bS4gQ3JlYXRlXG4vLyBhIHN1YmNsYXNzIG9mIFBhcnNlclJ1bGVDb250ZXh0IHdpdGggYmFja2luZyBmaWVsZCBhbmQgc2V0XG4vLyBvcHRpb24gY29udGV4dFN1cGVyQ2xhc3MuXG4vLyB0byBzZXQgaXQuXG5SdWxlQ29udGV4dC5wcm90b3R5cGUuZ2V0QWx0TnVtYmVyID0gZnVuY3Rpb24oKSB7IHJldHVybiBJTlZBTElEX0FMVF9OVU1CRVI7IH1cblxuLy8gU2V0IHRoZSBvdXRlciBhbHRlcm5hdGl2ZSBudW1iZXIgZm9yIHRoaXMgY29udGV4dCBub2RlLiBEZWZhdWx0XG4vLyBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcgdG8gYXZvaWQgYmFja2luZyBmaWVsZCBvdmVyaGVhZCBmb3Jcbi8vIHRyZWVzIHRoYXQgZG9uJ3QgbmVlZCBpdC4gIENyZWF0ZVxuLy8gYSBzdWJjbGFzcyBvZiBQYXJzZXJSdWxlQ29udGV4dCB3aXRoIGJhY2tpbmcgZmllbGQgYW5kIHNldFxuLy8gb3B0aW9uIGNvbnRleHRTdXBlckNsYXNzLlxuUnVsZUNvbnRleHQucHJvdG90eXBlLnNldEFsdE51bWJlciA9IGZ1bmN0aW9uKGFsdE51bWJlcikgeyB9XG5cblJ1bGVDb250ZXh0LnByb3RvdHlwZS5nZXRDaGlsZCA9IGZ1bmN0aW9uKGkpIHtcblx0cmV0dXJuIG51bGw7XG59O1xuXG5SdWxlQ29udGV4dC5wcm90b3R5cGUuZ2V0Q2hpbGRDb3VudCA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gMDtcbn07XG5cblJ1bGVDb250ZXh0LnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbih2aXNpdG9yKSB7XG5cdHJldHVybiB2aXNpdG9yLnZpc2l0Q2hpbGRyZW4odGhpcyk7XG59O1xuXG4vL25lZWQgdG8gbWFuYWdlIGNpcmN1bGFyIGRlcGVuZGVuY2llcywgc28gZXhwb3J0IG5vd1xuZXhwb3J0cy5SdWxlQ29udGV4dCA9IFJ1bGVDb250ZXh0O1xudmFyIFRyZWVzID0gcmVxdWlyZSgnLi90cmVlL1RyZWVzJykuVHJlZXM7XG5cblxuLy8gUHJpbnQgb3V0IGEgd2hvbGUgdHJlZSwgbm90IGp1c3QgYSBub2RlLCBpbiBMSVNQIGZvcm1hdFxuLy8gKHJvb3QgY2hpbGQxIC4uIGNoaWxkTikuIFByaW50IGp1c3QgYSBub2RlIGlmIHRoaXMgaXMgYSBsZWFmLlxuLy9cblxuUnVsZUNvbnRleHQucHJvdG90eXBlLnRvU3RyaW5nVHJlZSA9IGZ1bmN0aW9uKHJ1bGVOYW1lcywgcmVjb2cpIHtcblx0cmV0dXJuIFRyZWVzLnRvU3RyaW5nVHJlZSh0aGlzLCBydWxlTmFtZXMsIHJlY29nKTtcbn07XG5cblJ1bGVDb250ZXh0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKHJ1bGVOYW1lcywgc3RvcCkge1xuXHRydWxlTmFtZXMgPSBydWxlTmFtZXMgfHwgbnVsbDtcblx0c3RvcCA9IHN0b3AgfHwgbnVsbDtcblx0dmFyIHAgPSB0aGlzO1xuXHR2YXIgcyA9IFwiW1wiO1xuXHR3aGlsZSAocCAhPT0gbnVsbCAmJiBwICE9PSBzdG9wKSB7XG5cdFx0aWYgKHJ1bGVOYW1lcyA9PT0gbnVsbCkge1xuXHRcdFx0aWYgKCFwLmlzRW1wdHkoKSkge1xuXHRcdFx0XHRzICs9IHAuaW52b2tpbmdTdGF0ZTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFyIHJpID0gcC5ydWxlSW5kZXg7XG5cdFx0XHR2YXIgcnVsZU5hbWUgPSAocmkgPj0gMCAmJiByaSA8IHJ1bGVOYW1lcy5sZW5ndGgpID8gcnVsZU5hbWVzW3JpXVxuXHRcdFx0XHRcdDogXCJcIiArIHJpO1xuXHRcdFx0cyArPSBydWxlTmFtZTtcblx0XHR9XG5cdFx0aWYgKHAucGFyZW50Q3R4ICE9PSBudWxsICYmIChydWxlTmFtZXMgIT09IG51bGwgfHwgIXAucGFyZW50Q3R4LmlzRW1wdHkoKSkpIHtcblx0XHRcdHMgKz0gXCIgXCI7XG5cdFx0fVxuXHRcdHAgPSBwLnBhcmVudEN0eDtcblx0fVxuXHRzICs9IFwiXVwiO1xuXHRyZXR1cm4gcztcbn07XG5cbiIsIi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbi8vXG5cbi8vIEEgdG9rZW4gaGFzIHByb3BlcnRpZXM6IHRleHQsIHR5cGUsIGxpbmUsIGNoYXJhY3RlciBwb3NpdGlvbiBpbiB0aGUgbGluZVxuLy8gKHNvIHdlIGNhbiBpZ25vcmUgdGFicyksIHRva2VuIGNoYW5uZWwsIGluZGV4LCBhbmQgc291cmNlIGZyb20gd2hpY2hcbi8vIHdlIG9idGFpbmVkIHRoaXMgdG9rZW4uXG5cbmZ1bmN0aW9uIFRva2VuKCkge1xuXHR0aGlzLnNvdXJjZSA9IG51bGw7XG5cdHRoaXMudHlwZSA9IG51bGw7IC8vIHRva2VuIHR5cGUgb2YgdGhlIHRva2VuXG5cdHRoaXMuY2hhbm5lbCA9IG51bGw7IC8vIFRoZSBwYXJzZXIgaWdub3JlcyBldmVyeXRoaW5nIG5vdCBvbiBERUZBVUxUX0NIQU5ORUxcblx0dGhpcy5zdGFydCA9IG51bGw7IC8vIG9wdGlvbmFsOyByZXR1cm4gLTEgaWYgbm90IGltcGxlbWVudGVkLlxuXHR0aGlzLnN0b3AgPSBudWxsOyAvLyBvcHRpb25hbDsgcmV0dXJuIC0xIGlmIG5vdCBpbXBsZW1lbnRlZC5cblx0dGhpcy50b2tlbkluZGV4ID0gbnVsbDsgLy8gZnJvbSAwLi5uLTEgb2YgdGhlIHRva2VuIG9iamVjdCBpbiB0aGUgaW5wdXQgc3RyZWFtXG5cdHRoaXMubGluZSA9IG51bGw7IC8vIGxpbmU9MS4ubiBvZiB0aGUgMXN0IGNoYXJhY3RlclxuXHR0aGlzLmNvbHVtbiA9IG51bGw7IC8vIGJlZ2lubmluZyBvZiB0aGUgbGluZSBhdCB3aGljaCBpdCBvY2N1cnMsIDAuLm4tMVxuXHR0aGlzLl90ZXh0ID0gbnVsbDsgLy8gdGV4dCBvZiB0aGUgdG9rZW4uXG5cdHJldHVybiB0aGlzO1xufVxuXG5Ub2tlbi5JTlZBTElEX1RZUEUgPSAwO1xuXG4vLyBEdXJpbmcgbG9va2FoZWFkIG9wZXJhdGlvbnMsIHRoaXMgXCJ0b2tlblwiIHNpZ25pZmllcyB3ZSBoaXQgcnVsZSBlbmQgQVROIHN0YXRlXG4vLyBhbmQgZGlkIG5vdCBmb2xsb3cgaXQgZGVzcGl0ZSBuZWVkaW5nIHRvLlxuVG9rZW4uRVBTSUxPTiA9IC0yO1xuXG5Ub2tlbi5NSU5fVVNFUl9UT0tFTl9UWVBFID0gMTtcblxuVG9rZW4uRU9GID0gLTE7XG5cbi8vIEFsbCB0b2tlbnMgZ28gdG8gdGhlIHBhcnNlciAodW5sZXNzIHNraXAoKSBpcyBjYWxsZWQgaW4gdGhhdCBydWxlKVxuLy8gb24gYSBwYXJ0aWN1bGFyIFwiY2hhbm5lbFwiLiBUaGUgcGFyc2VyIHR1bmVzIHRvIGEgcGFydGljdWxhciBjaGFubmVsXG4vLyBzbyB0aGF0IHdoaXRlc3BhY2UgZXRjLi4uIGNhbiBnbyB0byB0aGUgcGFyc2VyIG9uIGEgXCJoaWRkZW5cIiBjaGFubmVsLlxuXG5Ub2tlbi5ERUZBVUxUX0NIQU5ORUwgPSAwO1xuXG4vLyBBbnl0aGluZyBvbiBkaWZmZXJlbnQgY2hhbm5lbCB0aGFuIERFRkFVTFRfQ0hBTk5FTCBpcyBub3QgcGFyc2VkXG4vLyBieSBwYXJzZXIuXG5cblRva2VuLkhJRERFTl9DSEFOTkVMID0gMTtcblxuLy8gRXhwbGljaXRseSBzZXQgdGhlIHRleHQgZm9yIHRoaXMgdG9rZW4uIElmIHtjb2RlIHRleHR9IGlzIG5vdFxuLy8ge0Bjb2RlIG51bGx9LCB0aGVuIHtAbGluayAvL2dldFRleHR9IHdpbGwgcmV0dXJuIHRoaXMgdmFsdWUgcmF0aGVyIHRoYW5cbi8vIGV4dHJhY3RpbmcgdGhlIHRleHQgZnJvbSB0aGUgaW5wdXQuXG4vL1xuLy8gQHBhcmFtIHRleHQgVGhlIGV4cGxpY2l0IHRleHQgb2YgdGhlIHRva2VuLCBvciB7QGNvZGUgbnVsbH0gaWYgdGhlIHRleHRcbi8vIHNob3VsZCBiZSBvYnRhaW5lZCBmcm9tIHRoZSBpbnB1dCBhbG9uZyB3aXRoIHRoZSBzdGFydCBhbmQgc3RvcCBpbmRleGVzXG4vLyBvZiB0aGUgdG9rZW4uXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb2tlbi5wcm90b3R5cGUsIFwidGV4dFwiLCB7XG5cdGdldCA6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLl90ZXh0O1xuXHR9LFxuXHRzZXQgOiBmdW5jdGlvbih0ZXh0KSB7XG5cdFx0dGhpcy5fdGV4dCA9IHRleHQ7XG5cdH1cbn0pO1xuXG5Ub2tlbi5wcm90b3R5cGUuZ2V0VG9rZW5Tb3VyY2UgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuc291cmNlWzBdO1xufTtcblxuVG9rZW4ucHJvdG90eXBlLmdldElucHV0U3RyZWFtID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLnNvdXJjZVsxXTtcbn07XG5cbmZ1bmN0aW9uIENvbW1vblRva2VuKHNvdXJjZSwgdHlwZSwgY2hhbm5lbCwgc3RhcnQsIHN0b3ApIHtcblx0VG9rZW4uY2FsbCh0aGlzKTtcblx0dGhpcy5zb3VyY2UgPSBzb3VyY2UgIT09IHVuZGVmaW5lZCA/IHNvdXJjZSA6IENvbW1vblRva2VuLkVNUFRZX1NPVVJDRTtcblx0dGhpcy50eXBlID0gdHlwZSAhPT0gdW5kZWZpbmVkID8gdHlwZSA6IG51bGw7XG5cdHRoaXMuY2hhbm5lbCA9IGNoYW5uZWwgIT09IHVuZGVmaW5lZCA/IGNoYW5uZWwgOiBUb2tlbi5ERUZBVUxUX0NIQU5ORUw7XG5cdHRoaXMuc3RhcnQgPSBzdGFydCAhPT0gdW5kZWZpbmVkID8gc3RhcnQgOiAtMTtcblx0dGhpcy5zdG9wID0gc3RvcCAhPT0gdW5kZWZpbmVkID8gc3RvcCA6IC0xO1xuXHR0aGlzLnRva2VuSW5kZXggPSAtMTtcblx0aWYgKHRoaXMuc291cmNlWzBdICE9PSBudWxsKSB7XG5cdFx0dGhpcy5saW5lID0gc291cmNlWzBdLmxpbmU7XG5cdFx0dGhpcy5jb2x1bW4gPSBzb3VyY2VbMF0uY29sdW1uO1xuXHR9IGVsc2Uge1xuXHRcdHRoaXMuY29sdW1uID0gLTE7XG5cdH1cblx0cmV0dXJuIHRoaXM7XG59XG5cbkNvbW1vblRva2VuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVG9rZW4ucHJvdG90eXBlKTtcbkNvbW1vblRva2VuLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbW1vblRva2VuO1xuXG4vLyBBbiBlbXB0eSB7QGxpbmsgUGFpcn0gd2hpY2ggaXMgdXNlZCBhcyB0aGUgZGVmYXVsdCB2YWx1ZSBvZlxuLy8ge0BsaW5rIC8vc291cmNlfSBmb3IgdG9rZW5zIHRoYXQgZG8gbm90IGhhdmUgYSBzb3VyY2UuXG5Db21tb25Ub2tlbi5FTVBUWV9TT1VSQ0UgPSBbIG51bGwsIG51bGwgXTtcblxuLy8gQ29uc3RydWN0cyBhIG5ldyB7QGxpbmsgQ29tbW9uVG9rZW59IGFzIGEgY29weSBvZiBhbm90aGVyIHtAbGluayBUb2tlbn0uXG4vL1xuLy8gPHA+XG4vLyBJZiB7QGNvZGUgb2xkVG9rZW59IGlzIGFsc28gYSB7QGxpbmsgQ29tbW9uVG9rZW59IGluc3RhbmNlLCB0aGUgbmV3bHlcbi8vIGNvbnN0cnVjdGVkIHRva2VuIHdpbGwgc2hhcmUgYSByZWZlcmVuY2UgdG8gdGhlIHtAbGluayAvL3RleHR9IGZpZWxkIGFuZFxuLy8gdGhlIHtAbGluayBQYWlyfSBzdG9yZWQgaW4ge0BsaW5rIC8vc291cmNlfS4gT3RoZXJ3aXNlLCB7QGxpbmsgLy90ZXh0fSB3aWxsXG4vLyBiZSBhc3NpZ25lZCB0aGUgcmVzdWx0IG9mIGNhbGxpbmcge0BsaW5rIC8vZ2V0VGV4dH0sIGFuZCB7QGxpbmsgLy9zb3VyY2V9XG4vLyB3aWxsIGJlIGNvbnN0cnVjdGVkIGZyb20gdGhlIHJlc3VsdCBvZiB7QGxpbmsgVG9rZW4vL2dldFRva2VuU291cmNlfSBhbmRcbi8vIHtAbGluayBUb2tlbi8vZ2V0SW5wdXRTdHJlYW19LjwvcD5cbi8vXG4vLyBAcGFyYW0gb2xkVG9rZW4gVGhlIHRva2VuIHRvIGNvcHkuXG4vL1xuQ29tbW9uVG9rZW4ucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG5cdHZhciB0ID0gbmV3IENvbW1vblRva2VuKHRoaXMuc291cmNlLCB0aGlzLnR5cGUsIHRoaXMuY2hhbm5lbCwgdGhpcy5zdGFydCxcblx0XHRcdHRoaXMuc3RvcCk7XG5cdHQudG9rZW5JbmRleCA9IHRoaXMudG9rZW5JbmRleDtcblx0dC5saW5lID0gdGhpcy5saW5lO1xuXHR0LmNvbHVtbiA9IHRoaXMuY29sdW1uO1xuXHR0LnRleHQgPSB0aGlzLnRleHQ7XG5cdHJldHVybiB0O1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbW1vblRva2VuLnByb3RvdHlwZSwgXCJ0ZXh0XCIsIHtcblx0Z2V0IDogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKHRoaXMuX3RleHQgIT09IG51bGwpIHtcblx0XHRcdHJldHVybiB0aGlzLl90ZXh0O1xuXHRcdH1cblx0XHR2YXIgaW5wdXQgPSB0aGlzLmdldElucHV0U3RyZWFtKCk7XG5cdFx0aWYgKGlucHV0ID09PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0dmFyIG4gPSBpbnB1dC5zaXplO1xuXHRcdGlmICh0aGlzLnN0YXJ0IDwgbiAmJiB0aGlzLnN0b3AgPCBuKSB7XG5cdFx0XHRyZXR1cm4gaW5wdXQuZ2V0VGV4dCh0aGlzLnN0YXJ0LCB0aGlzLnN0b3ApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gXCI8RU9GPlwiO1xuXHRcdH1cblx0fSxcblx0c2V0IDogZnVuY3Rpb24odGV4dCkge1xuXHRcdHRoaXMuX3RleHQgPSB0ZXh0O1xuXHR9XG59KTtcblxuQ29tbW9uVG9rZW4ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdHZhciB0eHQgPSB0aGlzLnRleHQ7XG5cdGlmICh0eHQgIT09IG51bGwpIHtcblx0XHR0eHQgPSB0eHQucmVwbGFjZSgvXFxuL2csIFwiXFxcXG5cIikucmVwbGFjZSgvXFxyL2csIFwiXFxcXHJcIikucmVwbGFjZSgvXFx0L2csIFwiXFxcXHRcIik7XG5cdH0gZWxzZSB7XG5cdFx0dHh0ID0gXCI8bm8gdGV4dD5cIjtcblx0fVxuXHRyZXR1cm4gXCJbQFwiICsgdGhpcy50b2tlbkluZGV4ICsgXCIsXCIgKyB0aGlzLnN0YXJ0ICsgXCI6XCIgKyB0aGlzLnN0b3AgKyBcIj0nXCIgK1xuXHRcdFx0dHh0ICsgXCInLDxcIiArIHRoaXMudHlwZSArIFwiPlwiICtcblx0XHRcdCh0aGlzLmNoYW5uZWwgPiAwID8gXCIsY2hhbm5lbD1cIiArIHRoaXMuY2hhbm5lbCA6IFwiXCIpICsgXCIsXCIgK1xuXHRcdFx0dGhpcy5saW5lICsgXCI6XCIgKyB0aGlzLmNvbHVtbiArIFwiXVwiO1xufTtcblxuZXhwb3J0cy5Ub2tlbiA9IFRva2VuO1xuZXhwb3J0cy5Db21tb25Ub2tlbiA9IENvbW1vblRva2VuO1xuIiwiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuXG5mdW5jdGlvbiBhcnJheVRvU3RyaW5nKGEpIHtcbiAgICByZXR1cm4gXCJbXCIgKyBhLmpvaW4oXCIsIFwiKSArIFwiXVwiO1xufVxuXG5TdHJpbmcucHJvdG90eXBlLnNlZWQgPSBTdHJpbmcucHJvdG90eXBlLnNlZWQgfHwgTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpICogTWF0aC5wb3coMiwgMzIpKTtcblxuU3RyaW5nLnByb3RvdHlwZS5oYXNoQ29kZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmVtYWluZGVyLCBieXRlcywgaDEsIGgxYiwgYzEsIGMxYiwgYzIsIGMyYiwgazEsIGksXG4gICAgICAgIGtleSA9IHRoaXMudG9TdHJpbmcoKTtcblxuICAgIHJlbWFpbmRlciA9IGtleS5sZW5ndGggJiAzOyAvLyBrZXkubGVuZ3RoICUgNFxuICAgIGJ5dGVzID0ga2V5Lmxlbmd0aCAtIHJlbWFpbmRlcjtcbiAgICBoMSA9IFN0cmluZy5wcm90b3R5cGUuc2VlZDtcbiAgICBjMSA9IDB4Y2M5ZTJkNTE7XG4gICAgYzIgPSAweDFiODczNTkzO1xuICAgIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBieXRlcykge1xuICAgICAgICBrMSA9XG4gICAgICAgICAgICAoKGtleS5jaGFyQ29kZUF0KGkpICYgMHhmZikpIHxcbiAgICAgICAgICAgICgoa2V5LmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDgpIHxcbiAgICAgICAgICAgICgoa2V5LmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDE2KSB8XG4gICAgICAgICAgICAoKGtleS5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCAyNCk7XG4gICAgICAgICsraTtcblxuICAgICAgICBrMSA9ICgoKChrMSAmIDB4ZmZmZikgKiBjMSkgKyAoKCgoazEgPj4+IDE2KSAqIGMxKSAmIDB4ZmZmZikgPDwgMTYpKSkgJiAweGZmZmZmZmZmO1xuICAgICAgICBrMSA9IChrMSA8PCAxNSkgfCAoazEgPj4+IDE3KTtcbiAgICAgICAgazEgPSAoKCgoazEgJiAweGZmZmYpICogYzIpICsgKCgoKGsxID4+PiAxNikgKiBjMikgJiAweGZmZmYpIDw8IDE2KSkpICYgMHhmZmZmZmZmZjtcblxuICAgICAgICBoMSBePSBrMTtcbiAgICAgICAgaDEgPSAoaDEgPDwgMTMpIHwgKGgxID4+PiAxOSk7XG4gICAgICAgIGgxYiA9ICgoKChoMSAmIDB4ZmZmZikgKiA1KSArICgoKChoMSA+Pj4gMTYpICogNSkgJiAweGZmZmYpIDw8IDE2KSkpICYgMHhmZmZmZmZmZjtcbiAgICAgICAgaDEgPSAoKChoMWIgJiAweGZmZmYpICsgMHg2YjY0KSArICgoKChoMWIgPj4+IDE2KSArIDB4ZTY1NCkgJiAweGZmZmYpIDw8IDE2KSk7XG4gICAgfVxuXG4gICAgazEgPSAwO1xuXG4gICAgc3dpdGNoIChyZW1haW5kZXIpIHtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgazEgXj0gKGtleS5jaGFyQ29kZUF0KGkgKyAyKSAmIDB4ZmYpIDw8IDE2O1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBrMSBePSAoa2V5LmNoYXJDb2RlQXQoaSArIDEpICYgMHhmZikgPDwgODtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgazEgXj0gKGtleS5jaGFyQ29kZUF0KGkpICYgMHhmZik7XG5cbiAgICAgICAgICAgIGsxID0gKCgoazEgJiAweGZmZmYpICogYzEpICsgKCgoKGsxID4+PiAxNikgKiBjMSkgJiAweGZmZmYpIDw8IDE2KSkgJiAweGZmZmZmZmZmO1xuICAgICAgICAgICAgazEgPSAoazEgPDwgMTUpIHwgKGsxID4+PiAxNyk7XG4gICAgICAgICAgICBrMSA9ICgoKGsxICYgMHhmZmZmKSAqIGMyKSArICgoKChrMSA+Pj4gMTYpICogYzIpICYgMHhmZmZmKSA8PCAxNikpICYgMHhmZmZmZmZmZjtcbiAgICAgICAgICAgIGgxIF49IGsxO1xuICAgIH1cblxuICAgIGgxIF49IGtleS5sZW5ndGg7XG5cbiAgICBoMSBePSBoMSA+Pj4gMTY7XG4gICAgaDEgPSAoKChoMSAmIDB4ZmZmZikgKiAweDg1ZWJjYTZiKSArICgoKChoMSA+Pj4gMTYpICogMHg4NWViY2E2YikgJiAweGZmZmYpIDw8IDE2KSkgJiAweGZmZmZmZmZmO1xuICAgIGgxIF49IGgxID4+PiAxMztcbiAgICBoMSA9ICgoKChoMSAmIDB4ZmZmZikgKiAweGMyYjJhZTM1KSArICgoKChoMSA+Pj4gMTYpICogMHhjMmIyYWUzNSkgJiAweGZmZmYpIDw8IDE2KSkpICYgMHhmZmZmZmZmZjtcbiAgICBoMSBePSBoMSA+Pj4gMTY7XG5cbiAgICByZXR1cm4gaDEgPj4+IDA7XG59O1xuXG5mdW5jdGlvbiBzdGFuZGFyZEVxdWFsc0Z1bmN0aW9uKGEsIGIpIHtcbiAgICByZXR1cm4gYS5lcXVhbHMoYik7XG59XG5cbmZ1bmN0aW9uIHN0YW5kYXJkSGFzaENvZGVGdW5jdGlvbihhKSB7XG4gICAgcmV0dXJuIGEuaGFzaENvZGUoKTtcbn1cblxuZnVuY3Rpb24gU2V0KGhhc2hGdW5jdGlvbiwgZXF1YWxzRnVuY3Rpb24pIHtcbiAgICB0aGlzLmRhdGEgPSB7fTtcbiAgICB0aGlzLmhhc2hGdW5jdGlvbiA9IGhhc2hGdW5jdGlvbiB8fCBzdGFuZGFyZEhhc2hDb2RlRnVuY3Rpb247XG4gICAgdGhpcy5lcXVhbHNGdW5jdGlvbiA9IGVxdWFsc0Z1bmN0aW9uIHx8IHN0YW5kYXJkRXF1YWxzRnVuY3Rpb247XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShTZXQucHJvdG90eXBlLCBcImxlbmd0aFwiLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBsID0gMDtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMuZGF0YSkge1xuICAgICAgICAgICAgaWYgKGtleS5pbmRleE9mKFwiaGFzaF9cIikgPT09IDApIHtcbiAgICAgICAgICAgICAgICBsID0gbCArIHRoaXMuZGF0YVtrZXldLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbDtcbiAgICB9XG59KTtcblxuU2V0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICB2YXIgaGFzaCA9IHRoaXMuaGFzaEZ1bmN0aW9uKHZhbHVlKTtcbiAgICB2YXIga2V5ID0gXCJoYXNoX1wiICsgaGFzaDtcbiAgICBpZiAoa2V5IGluIHRoaXMuZGF0YSkge1xuICAgICAgICB2YXIgdmFsdWVzID0gdGhpcy5kYXRhW2tleV07XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5lcXVhbHNGdW5jdGlvbih2YWx1ZSwgdmFsdWVzW2ldKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZXNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWVzLnB1c2godmFsdWUpO1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kYXRhW2tleV0gPSBbdmFsdWVdO1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxufTtcblxuU2V0LnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHJldHVybiB0aGlzLmdldCh2YWx1ZSkgIT0gbnVsbDtcbn07XG5cblNldC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgdmFyIGhhc2ggPSB0aGlzLmhhc2hGdW5jdGlvbih2YWx1ZSk7XG4gICAgdmFyIGtleSA9IFwiaGFzaF9cIiArIGhhc2g7XG4gICAgaWYgKGtleSBpbiB0aGlzLmRhdGEpIHtcbiAgICAgICAgdmFyIHZhbHVlcyA9IHRoaXMuZGF0YVtrZXldO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZXF1YWxzRnVuY3Rpb24odmFsdWUsIHZhbHVlc1tpXSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuU2V0LnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGwgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5kYXRhKSB7XG4gICAgICAgIGlmIChrZXkuaW5kZXhPZihcImhhc2hfXCIpID09PSAwKSB7XG4gICAgICAgICAgICBsID0gbC5jb25jYXQodGhpcy5kYXRhW2tleV0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBsO1xufTtcblxuU2V0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gYXJyYXlUb1N0cmluZyh0aGlzLnZhbHVlcygpKTtcbn07XG5cbmZ1bmN0aW9uIEJpdFNldCgpIHtcbiAgICB0aGlzLmRhdGEgPSBbXTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuQml0U2V0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICB0aGlzLmRhdGFbdmFsdWVdID0gdHJ1ZTtcbn07XG5cbkJpdFNldC5wcm90b3R5cGUub3IgPSBmdW5jdGlvbiAoc2V0KSB7XG4gICAgdmFyIGJpdHMgPSB0aGlzO1xuICAgIE9iamVjdC5rZXlzKHNldC5kYXRhKS5tYXAoZnVuY3Rpb24gKGFsdCkge1xuICAgICAgICBiaXRzLmFkZChhbHQpO1xuICAgIH0pO1xufTtcblxuQml0U2V0LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICBkZWxldGUgdGhpcy5kYXRhW3ZhbHVlXTtcbn07XG5cbkJpdFNldC5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhW3ZhbHVlXSA9PT0gdHJ1ZTtcbn07XG5cbkJpdFNldC5wcm90b3R5cGUudmFsdWVzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmRhdGEpO1xufTtcblxuQml0U2V0LnByb3RvdHlwZS5taW5WYWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gTWF0aC5taW4uYXBwbHkobnVsbCwgdGhpcy52YWx1ZXMoKSk7XG59O1xuXG5CaXRTZXQucHJvdG90eXBlLmhhc2hDb2RlID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBoYXNoID0gbmV3IEhhc2goKTtcbiAgICBoYXNoLnVwZGF0ZSh0aGlzLnZhbHVlcygpKTtcbiAgICByZXR1cm4gaGFzaC5maW5pc2goKTtcbn07XG5cbkJpdFNldC5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gKG90aGVyKSB7XG4gICAgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBCaXRTZXQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaGFzaENvZGUoKSA9PT0gb3RoZXIuaGFzaENvZGUoKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCaXRTZXQucHJvdG90eXBlLCBcImxlbmd0aFwiLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlcygpLmxlbmd0aDtcbiAgICB9XG59KTtcblxuQml0U2V0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gXCJ7XCIgKyB0aGlzLnZhbHVlcygpLmpvaW4oXCIsIFwiKSArIFwifVwiO1xufTtcblxuZnVuY3Rpb24gTWFwKGhhc2hGdW5jdGlvbiwgZXF1YWxzRnVuY3Rpb24pIHtcbiAgICB0aGlzLmRhdGEgPSB7fTtcbiAgICB0aGlzLmhhc2hGdW5jdGlvbiA9IGhhc2hGdW5jdGlvbiB8fCBzdGFuZGFyZEhhc2hDb2RlRnVuY3Rpb247XG4gICAgdGhpcy5lcXVhbHNGdW5jdGlvbiA9IGVxdWFsc0Z1bmN0aW9uIHx8IHN0YW5kYXJkRXF1YWxzRnVuY3Rpb247XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXAucHJvdG90eXBlLCBcImxlbmd0aFwiLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBsID0gMDtcbiAgICAgICAgZm9yICh2YXIgaGFzaEtleSBpbiB0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgIGlmIChoYXNoS2V5LmluZGV4T2YoXCJoYXNoX1wiKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGwgPSBsICsgdGhpcy5kYXRhW2hhc2hLZXldLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbDtcbiAgICB9XG59KTtcblxuTWFwLnByb3RvdHlwZS5wdXQgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIHZhciBoYXNoS2V5ID0gXCJoYXNoX1wiICsgdGhpcy5oYXNoRnVuY3Rpb24oa2V5KTtcbiAgICBpZiAoaGFzaEtleSBpbiB0aGlzLmRhdGEpIHtcbiAgICAgICAgdmFyIGVudHJpZXMgPSB0aGlzLmRhdGFbaGFzaEtleV07XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZW50cmllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGVudHJ5ID0gZW50cmllc1tpXTtcbiAgICAgICAgICAgIGlmICh0aGlzLmVxdWFsc0Z1bmN0aW9uKGtleSwgZW50cnkua2V5KSkge1xuICAgICAgICAgICAgICAgIHZhciBvbGRWYWx1ZSA9IGVudHJ5LnZhbHVlO1xuICAgICAgICAgICAgICAgIGVudHJ5LnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9sZFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVudHJpZXMucHVzaCh7a2V5OmtleSwgdmFsdWU6dmFsdWV9KTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGF0YVtoYXNoS2V5XSA9IFt7a2V5OmtleSwgdmFsdWU6dmFsdWV9XTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbn07XG5cbk1hcC5wcm90b3R5cGUuY29udGFpbnNLZXkgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGhhc2hLZXkgPSBcImhhc2hfXCIgKyB0aGlzLmhhc2hGdW5jdGlvbihrZXkpO1xuICAgIGlmKGhhc2hLZXkgaW4gdGhpcy5kYXRhKSB7XG4gICAgICAgIHZhciBlbnRyaWVzID0gdGhpcy5kYXRhW2hhc2hLZXldO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVudHJpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaV07XG4gICAgICAgICAgICBpZiAodGhpcy5lcXVhbHNGdW5jdGlvbihrZXksIGVudHJ5LmtleSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuTWFwLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGhhc2hLZXkgPSBcImhhc2hfXCIgKyB0aGlzLmhhc2hGdW5jdGlvbihrZXkpO1xuICAgIGlmKGhhc2hLZXkgaW4gdGhpcy5kYXRhKSB7XG4gICAgICAgIHZhciBlbnRyaWVzID0gdGhpcy5kYXRhW2hhc2hLZXldO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVudHJpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaV07XG4gICAgICAgICAgICBpZiAodGhpcy5lcXVhbHNGdW5jdGlvbihrZXksIGVudHJ5LmtleSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5LnZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuTWFwLnByb3RvdHlwZS5lbnRyaWVzID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBsID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIHRoaXMuZGF0YSkge1xuICAgICAgICBpZiAoa2V5LmluZGV4T2YoXCJoYXNoX1wiKSA9PT0gMCkge1xuICAgICAgICAgICAgbCA9IGwuY29uY2F0KHRoaXMuZGF0YVtrZXldKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbDtcbn07XG5cblxuTWFwLnByb3RvdHlwZS5nZXRLZXlzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmVudHJpZXMoKS5tYXAoZnVuY3Rpb24oZSkge1xuICAgICAgICByZXR1cm4gZS5rZXk7XG4gICAgfSk7XG59O1xuXG5cbk1hcC5wcm90b3R5cGUuZ2V0VmFsdWVzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmVudHJpZXMoKS5tYXAoZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIGUudmFsdWU7XG4gICAgfSk7XG59O1xuXG5cbk1hcC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNzID0gdGhpcy5lbnRyaWVzKCkubWFwKGZ1bmN0aW9uKGVudHJ5KSB7XG4gICAgICAgIHJldHVybiAneycgKyBlbnRyeS5rZXkgKyAnOicgKyBlbnRyeS52YWx1ZSArICd9JztcbiAgICB9KTtcbiAgICByZXR1cm4gJ1snICsgc3Muam9pbihcIiwgXCIpICsgJ10nO1xufTtcblxuXG5mdW5jdGlvbiBBbHREaWN0KCkge1xuICAgIHRoaXMuZGF0YSA9IHt9O1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5cbkFsdERpY3QucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICBrZXkgPSBcImstXCIgKyBrZXk7XG4gICAgaWYgKGtleSBpbiB0aGlzLmRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVtrZXldO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn07XG5cbkFsdERpY3QucHJvdG90eXBlLnB1dCA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAga2V5ID0gXCJrLVwiICsga2V5O1xuICAgIHRoaXMuZGF0YVtrZXldID0gdmFsdWU7XG59O1xuXG5BbHREaWN0LnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGRhdGEgPSB0aGlzLmRhdGE7XG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLmRhdGEpO1xuICAgIHJldHVybiBrZXlzLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHJldHVybiBkYXRhW2tleV07XG4gICAgfSk7XG59O1xuXG5mdW5jdGlvbiBEb3VibGVEaWN0KCkge1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5mdW5jdGlvbiBIYXNoKCkge1xuICAgIHRoaXMuY291bnQgPSAwO1xuICAgIHRoaXMuaGFzaCA9IDA7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkhhc2gucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBmb3IodmFyIGk9MDtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgaWYoQXJyYXkuaXNBcnJheSh2YWx1ZSkpXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZS5hcHBseSh2YWx1ZSk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGsgPSAwO1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgICAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICAgICAgICAgIGsgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgICAgICAgICAgayA9IHZhbHVlLmhhc2hDb2RlKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLnVwZGF0ZUhhc2hDb2RlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGsgPSBrICogMHhDQzlFMkQ1MTtcbiAgICAgICAgICAgIGsgPSAoayA8PCAxNSkgfCAoayA+Pj4gKDMyIC0gMTUpKTtcbiAgICAgICAgICAgIGsgPSBrICogMHgxQjg3MzU5MztcbiAgICAgICAgICAgIHRoaXMuY291bnQgPSB0aGlzLmNvdW50ICsgMTtcbiAgICAgICAgICAgIHZhciBoYXNoID0gdGhpcy5oYXNoIF4gaztcbiAgICAgICAgICAgIGhhc2ggPSAoaGFzaCA8PCAxMykgfCAoaGFzaCA+Pj4gKDMyIC0gMTMpKTtcbiAgICAgICAgICAgIGhhc2ggPSBoYXNoICogNSArIDB4RTY1NDZCNjQ7XG4gICAgICAgICAgICB0aGlzLmhhc2ggPSBoYXNoO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5IYXNoLnByb3RvdHlwZS5maW5pc2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGhhc2ggPSB0aGlzLmhhc2ggXiAodGhpcy5jb3VudCAqIDQpO1xuICAgIGhhc2ggPSBoYXNoIF4gKGhhc2ggPj4+IDE2KTtcbiAgICBoYXNoID0gaGFzaCAqIDB4ODVFQkNBNkI7XG4gICAgaGFzaCA9IGhhc2ggXiAoaGFzaCA+Pj4gMTMpO1xuICAgIGhhc2ggPSBoYXNoICogMHhDMkIyQUUzNTtcbiAgICBoYXNoID0gaGFzaCBeIChoYXNoID4+PiAxNik7XG4gICAgcmV0dXJuIGhhc2g7XG59XG5cbmZ1bmN0aW9uIGhhc2hTdHVmZigpIHtcbiAgICB2YXIgaGFzaCA9IG5ldyBIYXNoKCk7XG4gICAgaGFzaC51cGRhdGUuYXBwbHkoYXJndW1lbnRzKTtcbiAgICByZXR1cm4gaGFzaC5maW5pc2goKTtcbn1cblxuRG91YmxlRGljdC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICB2YXIgZCA9IHRoaXNbYV0gfHwgbnVsbDtcbiAgICByZXR1cm4gZCA9PT0gbnVsbCA/IG51bGwgOiAoZFtiXSB8fCBudWxsKTtcbn07XG5cbkRvdWJsZURpY3QucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChhLCBiLCBvKSB7XG4gICAgdmFyIGQgPSB0aGlzW2FdIHx8IG51bGw7XG4gICAgaWYgKGQgPT09IG51bGwpIHtcbiAgICAgICAgZCA9IHt9O1xuICAgICAgICB0aGlzW2FdID0gZDtcbiAgICB9XG4gICAgZFtiXSA9IG87XG59O1xuXG5cbmZ1bmN0aW9uIGVzY2FwZVdoaXRlc3BhY2UocywgZXNjYXBlU3BhY2VzKSB7XG4gICAgcyA9IHMucmVwbGFjZSgvXFx0L2csIFwiXFxcXHRcIilcbiAgICAgICAgIC5yZXBsYWNlKC9cXG4vZywgXCJcXFxcblwiKVxuICAgICAgICAgLnJlcGxhY2UoL1xcci9nLCBcIlxcXFxyXCIpO1xuICAgIGlmIChlc2NhcGVTcGFjZXMpIHtcbiAgICAgICAgcyA9IHMucmVwbGFjZSgvIC9nLCBcIlxcdTAwQjdcIik7XG4gICAgfVxuICAgIHJldHVybiBzO1xufVxuXG5mdW5jdGlvbiB0aXRsZUNhc2Uoc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9cXHdcXFMqL2csIGZ1bmN0aW9uICh0eHQpIHtcbiAgICAgICAgcmV0dXJuIHR4dC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHR4dC5zdWJzdHIoMSk7XG4gICAgfSk7XG59O1xuXG5mdW5jdGlvbiBlcXVhbEFycmF5cyhhLCBiKVxue1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhKSB8fCAhQXJyYXkuaXNBcnJheShiKSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChhID09IGIpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIGlmIChhLmxlbmd0aCAhPSBiLmxlbmd0aClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoYVtpXSA9PSBiW2ldKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGlmICghYVtpXS5lcXVhbHMoYltpXSkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufTtcblxuZXhwb3J0cy5IYXNoID0gSGFzaDtcbmV4cG9ydHMuU2V0ID0gU2V0O1xuZXhwb3J0cy5NYXAgPSBNYXA7XG5leHBvcnRzLkJpdFNldCA9IEJpdFNldDtcbmV4cG9ydHMuQWx0RGljdCA9IEFsdERpY3Q7XG5leHBvcnRzLkRvdWJsZURpY3QgPSBEb3VibGVEaWN0O1xuZXhwb3J0cy5oYXNoU3R1ZmYgPSBoYXNoU3R1ZmY7XG5leHBvcnRzLmVzY2FwZVdoaXRlc3BhY2UgPSBlc2NhcGVXaGl0ZXNwYWNlO1xuZXhwb3J0cy5hcnJheVRvU3RyaW5nID0gYXJyYXlUb1N0cmluZztcbmV4cG9ydHMudGl0bGVDYXNlID0gdGl0bGVDYXNlO1xuZXhwb3J0cy5lcXVhbEFycmF5cyA9IGVxdWFsQXJyYXlzO1xuIiwiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuXG52YXIgTEwxQW5hbHl6ZXIgPSByZXF1aXJlKCcuLy4uL0xMMUFuYWx5emVyJykuTEwxQW5hbHl6ZXI7XG52YXIgSW50ZXJ2YWxTZXQgPSByZXF1aXJlKCcuLy4uL0ludGVydmFsU2V0JykuSW50ZXJ2YWxTZXQ7XG5cbmZ1bmN0aW9uIEFUTihncmFtbWFyVHlwZSAsIG1heFRva2VuVHlwZSkge1xuXG4gICAgLy8gVXNlZCBmb3IgcnVudGltZSBkZXNlcmlhbGl6YXRpb24gb2YgQVROcyBmcm9tIHN0cmluZ3MvLy9cbiAgICAvLyBUaGUgdHlwZSBvZiB0aGUgQVROLlxuICAgIHRoaXMuZ3JhbW1hclR5cGUgPSBncmFtbWFyVHlwZTtcbiAgICAvLyBUaGUgbWF4aW11bSB2YWx1ZSBmb3IgYW55IHN5bWJvbCByZWNvZ25pemVkIGJ5IGEgdHJhbnNpdGlvbiBpbiB0aGUgQVROLlxuICAgIHRoaXMubWF4VG9rZW5UeXBlID0gbWF4VG9rZW5UeXBlO1xuICAgIHRoaXMuc3RhdGVzID0gW107XG4gICAgLy8gRWFjaCBzdWJydWxlL3J1bGUgaXMgYSBkZWNpc2lvbiBwb2ludCBhbmQgd2UgbXVzdCB0cmFjayB0aGVtIHNvIHdlXG4gICAgLy8gIGNhbiBnbyBiYWNrIGxhdGVyIGFuZCBidWlsZCBERkEgcHJlZGljdG9ycyBmb3IgdGhlbS4gIFRoaXMgaW5jbHVkZXNcbiAgICAvLyAgYWxsIHRoZSBydWxlcywgc3VicnVsZXMsIG9wdGlvbmFsIGJsb2NrcywgKCkrLCAoKSogZXRjLi4uXG4gICAgdGhpcy5kZWNpc2lvblRvU3RhdGUgPSBbXTtcbiAgICAvLyBNYXBzIGZyb20gcnVsZSBpbmRleCB0byBzdGFydGluZyBzdGF0ZSBudW1iZXIuXG4gICAgdGhpcy5ydWxlVG9TdGFydFN0YXRlID0gW107XG4gICAgLy8gTWFwcyBmcm9tIHJ1bGUgaW5kZXggdG8gc3RvcCBzdGF0ZSBudW1iZXIuXG4gICAgdGhpcy5ydWxlVG9TdG9wU3RhdGUgPSBudWxsO1xuICAgIHRoaXMubW9kZU5hbWVUb1N0YXJ0U3RhdGUgPSB7fTtcbiAgICAvLyBGb3IgbGV4ZXIgQVROcywgdGhpcyBtYXBzIHRoZSBydWxlIGluZGV4IHRvIHRoZSByZXN1bHRpbmcgdG9rZW4gdHlwZS5cbiAgICAvLyBGb3IgcGFyc2VyIEFUTnMsIHRoaXMgbWFwcyB0aGUgcnVsZSBpbmRleCB0byB0aGUgZ2VuZXJhdGVkIGJ5cGFzcyB0b2tlblxuICAgIC8vIHR5cGUgaWYgdGhlXG4gICAgLy8ge0BsaW5rIEFUTkRlc2VyaWFsaXphdGlvbk9wdGlvbnMvL2lzR2VuZXJhdGVSdWxlQnlwYXNzVHJhbnNpdGlvbnN9XG4gICAgLy8gZGVzZXJpYWxpemF0aW9uIG9wdGlvbiB3YXMgc3BlY2lmaWVkOyBvdGhlcndpc2UsIHRoaXMgaXMge0Bjb2RlIG51bGx9LlxuICAgIHRoaXMucnVsZVRvVG9rZW5UeXBlID0gbnVsbDtcbiAgICAvLyBGb3IgbGV4ZXIgQVROcywgdGhpcyBpcyBhbiBhcnJheSBvZiB7QGxpbmsgTGV4ZXJBY3Rpb259IG9iamVjdHMgd2hpY2ggbWF5XG4gICAgLy8gYmUgcmVmZXJlbmNlZCBieSBhY3Rpb24gdHJhbnNpdGlvbnMgaW4gdGhlIEFUTi5cbiAgICB0aGlzLmxleGVyQWN0aW9ucyA9IG51bGw7XG4gICAgdGhpcy5tb2RlVG9TdGFydFN0YXRlID0gW107XG5cbiAgICByZXR1cm4gdGhpcztcbn1cblxuLy8gQ29tcHV0ZSB0aGUgc2V0IG9mIHZhbGlkIHRva2VucyB0aGF0IGNhbiBvY2N1ciBzdGFydGluZyBpbiBzdGF0ZSB7QGNvZGUgc30uXG4vLyAgSWYge0Bjb2RlIGN0eH0gaXMgbnVsbCwgdGhlIHNldCBvZiB0b2tlbnMgd2lsbCBub3QgaW5jbHVkZSB3aGF0IGNhbiBmb2xsb3dcbi8vICB0aGUgcnVsZSBzdXJyb3VuZGluZyB7QGNvZGUgc30uIEluIG90aGVyIHdvcmRzLCB0aGUgc2V0IHdpbGwgYmVcbi8vICByZXN0cmljdGVkIHRvIHRva2VucyByZWFjaGFibGUgc3RheWluZyB3aXRoaW4ge0Bjb2RlIHN9J3MgcnVsZS5cbkFUTi5wcm90b3R5cGUubmV4dFRva2Vuc0luQ29udGV4dCA9IGZ1bmN0aW9uKHMsIGN0eCkge1xuICAgIHZhciBhbmFsID0gbmV3IExMMUFuYWx5emVyKHRoaXMpO1xuICAgIHJldHVybiBhbmFsLkxPT0socywgbnVsbCwgY3R4KTtcbn07XG5cbi8vIENvbXB1dGUgdGhlIHNldCBvZiB2YWxpZCB0b2tlbnMgdGhhdCBjYW4gb2NjdXIgc3RhcnRpbmcgaW4ge0Bjb2RlIHN9IGFuZFxuLy8gc3RheWluZyBpbiBzYW1lIHJ1bGUuIHtAbGluayBUb2tlbi8vRVBTSUxPTn0gaXMgaW4gc2V0IGlmIHdlIHJlYWNoIGVuZCBvZlxuLy8gcnVsZS5cbkFUTi5wcm90b3R5cGUubmV4dFRva2Vuc05vQ29udGV4dCA9IGZ1bmN0aW9uKHMpIHtcbiAgICBpZiAocy5uZXh0VG9rZW5XaXRoaW5SdWxlICE9PSBudWxsICkge1xuICAgICAgICByZXR1cm4gcy5uZXh0VG9rZW5XaXRoaW5SdWxlO1xuICAgIH1cbiAgICBzLm5leHRUb2tlbldpdGhpblJ1bGUgPSB0aGlzLm5leHRUb2tlbnNJbkNvbnRleHQocywgbnVsbCk7XG4gICAgcy5uZXh0VG9rZW5XaXRoaW5SdWxlLnJlYWRPbmx5ID0gdHJ1ZTtcbiAgICByZXR1cm4gcy5uZXh0VG9rZW5XaXRoaW5SdWxlO1xufTtcblxuQVROLnByb3RvdHlwZS5uZXh0VG9rZW5zID0gZnVuY3Rpb24ocywgY3R4KSB7XG4gICAgaWYgKCBjdHg9PT11bmRlZmluZWQgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHRUb2tlbnNOb0NvbnRleHQocyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dFRva2Vuc0luQ29udGV4dChzLCBjdHgpO1xuICAgIH1cbn07XG5cbkFUTi5wcm90b3R5cGUuYWRkU3RhdGUgPSBmdW5jdGlvbiggc3RhdGUpIHtcbiAgICBpZiAoIHN0YXRlICE9PSBudWxsICkge1xuICAgICAgICBzdGF0ZS5hdG4gPSB0aGlzO1xuICAgICAgICBzdGF0ZS5zdGF0ZU51bWJlciA9IHRoaXMuc3RhdGVzLmxlbmd0aDtcbiAgICB9XG4gICAgdGhpcy5zdGF0ZXMucHVzaChzdGF0ZSk7XG59O1xuXG5BVE4ucHJvdG90eXBlLnJlbW92ZVN0YXRlID0gZnVuY3Rpb24oIHN0YXRlKSB7XG4gICAgdGhpcy5zdGF0ZXNbc3RhdGUuc3RhdGVOdW1iZXJdID0gbnVsbDsgLy8ganVzdCBmcmVlIG1lbSwgZG9uJ3Qgc2hpZnQgc3RhdGVzIGluIGxpc3Rcbn07XG5cbkFUTi5wcm90b3R5cGUuZGVmaW5lRGVjaXNpb25TdGF0ZSA9IGZ1bmN0aW9uKCBzKSB7XG4gICAgdGhpcy5kZWNpc2lvblRvU3RhdGUucHVzaChzKTtcbiAgICBzLmRlY2lzaW9uID0gdGhpcy5kZWNpc2lvblRvU3RhdGUubGVuZ3RoLTE7XG4gICAgcmV0dXJuIHMuZGVjaXNpb247XG59O1xuXG5BVE4ucHJvdG90eXBlLmdldERlY2lzaW9uU3RhdGUgPSBmdW5jdGlvbiggZGVjaXNpb24pIHtcbiAgICBpZiAodGhpcy5kZWNpc2lvblRvU3RhdGUubGVuZ3RoPT09MCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWNpc2lvblRvU3RhdGVbZGVjaXNpb25dO1xuICAgIH1cbn07XG5cbi8vIENvbXB1dGVzIHRoZSBzZXQgb2YgaW5wdXQgc3ltYm9scyB3aGljaCBjb3VsZCBmb2xsb3cgQVROIHN0YXRlIG51bWJlclxuLy8ge0Bjb2RlIHN0YXRlTnVtYmVyfSBpbiB0aGUgc3BlY2lmaWVkIGZ1bGwge0Bjb2RlIGNvbnRleHR9LiBUaGlzIG1ldGhvZFxuLy8gY29uc2lkZXJzIHRoZSBjb21wbGV0ZSBwYXJzZXIgY29udGV4dCwgYnV0IGRvZXMgbm90IGV2YWx1YXRlIHNlbWFudGljXG4vLyBwcmVkaWNhdGVzIChpLmUuIGFsbCBwcmVkaWNhdGVzIGVuY291bnRlcmVkIGR1cmluZyB0aGUgY2FsY3VsYXRpb24gYXJlXG4vLyBhc3N1bWVkIHRydWUpLiBJZiBhIHBhdGggaW4gdGhlIEFUTiBleGlzdHMgZnJvbSB0aGUgc3RhcnRpbmcgc3RhdGUgdG8gdGhlXG4vLyB7QGxpbmsgUnVsZVN0b3BTdGF0ZX0gb2YgdGhlIG91dGVybW9zdCBjb250ZXh0IHdpdGhvdXQgbWF0Y2hpbmcgYW55XG4vLyBzeW1ib2xzLCB7QGxpbmsgVG9rZW4vL0VPRn0gaXMgYWRkZWQgdG8gdGhlIHJldHVybmVkIHNldC5cbi8vXG4vLyA8cD5JZiB7QGNvZGUgY29udGV4dH0gaXMge0Bjb2RlIG51bGx9LCBpdCBpcyB0cmVhdGVkIGFzXG4vLyB7QGxpbmsgUGFyc2VyUnVsZUNvbnRleHQvL0VNUFRZfS48L3A+XG4vL1xuLy8gQHBhcmFtIHN0YXRlTnVtYmVyIHRoZSBBVE4gc3RhdGUgbnVtYmVyXG4vLyBAcGFyYW0gY29udGV4dCB0aGUgZnVsbCBwYXJzZSBjb250ZXh0XG4vLyBAcmV0dXJuIFRoZSBzZXQgb2YgcG90ZW50aWFsbHkgdmFsaWQgaW5wdXQgc3ltYm9scyB3aGljaCBjb3VsZCBmb2xsb3cgdGhlXG4vLyBzcGVjaWZpZWQgc3RhdGUgaW4gdGhlIHNwZWNpZmllZCBjb250ZXh0LlxuLy8gQHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgdGhlIEFUTiBkb2VzIG5vdCBjb250YWluIGEgc3RhdGUgd2l0aFxuLy8gbnVtYmVyIHtAY29kZSBzdGF0ZU51bWJlcn1cbnZhciBUb2tlbiA9IHJlcXVpcmUoJy4vLi4vVG9rZW4nKS5Ub2tlbjtcblxuQVROLnByb3RvdHlwZS5nZXRFeHBlY3RlZFRva2VucyA9IGZ1bmN0aW9uKCBzdGF0ZU51bWJlciwgY3R4ICkge1xuICAgIGlmICggc3RhdGVOdW1iZXIgPCAwIHx8IHN0YXRlTnVtYmVyID49IHRoaXMuc3RhdGVzLmxlbmd0aCApIHtcbiAgICAgICAgdGhyb3coXCJJbnZhbGlkIHN0YXRlIG51bWJlci5cIik7XG4gICAgfVxuICAgIHZhciBzID0gdGhpcy5zdGF0ZXNbc3RhdGVOdW1iZXJdO1xuICAgIHZhciBmb2xsb3dpbmcgPSB0aGlzLm5leHRUb2tlbnMocyk7XG4gICAgaWYgKCFmb2xsb3dpbmcuY29udGFpbnMoVG9rZW4uRVBTSUxPTikpIHtcbiAgICAgICAgcmV0dXJuIGZvbGxvd2luZztcbiAgICB9XG4gICAgdmFyIGV4cGVjdGVkID0gbmV3IEludGVydmFsU2V0KCk7XG4gICAgZXhwZWN0ZWQuYWRkU2V0KGZvbGxvd2luZyk7XG4gICAgZXhwZWN0ZWQucmVtb3ZlT25lKFRva2VuLkVQU0lMT04pO1xuICAgIHdoaWxlIChjdHggIT09IG51bGwgJiYgY3R4Lmludm9raW5nU3RhdGUgPj0gMCAmJiBmb2xsb3dpbmcuY29udGFpbnMoVG9rZW4uRVBTSUxPTikpIHtcbiAgICAgICAgdmFyIGludm9raW5nU3RhdGUgPSB0aGlzLnN0YXRlc1tjdHguaW52b2tpbmdTdGF0ZV07XG4gICAgICAgIHZhciBydCA9IGludm9raW5nU3RhdGUudHJhbnNpdGlvbnNbMF07XG4gICAgICAgIGZvbGxvd2luZyA9IHRoaXMubmV4dFRva2VucyhydC5mb2xsb3dTdGF0ZSk7XG4gICAgICAgIGV4cGVjdGVkLmFkZFNldChmb2xsb3dpbmcpO1xuICAgICAgICBleHBlY3RlZC5yZW1vdmVPbmUoVG9rZW4uRVBTSUxPTik7XG4gICAgICAgIGN0eCA9IGN0eC5wYXJlbnRDdHg7XG4gICAgfVxuICAgIGlmIChmb2xsb3dpbmcuY29udGFpbnMoVG9rZW4uRVBTSUxPTikpIHtcbiAgICAgICAgZXhwZWN0ZWQuYWRkT25lKFRva2VuLkVPRik7XG4gICAgfVxuICAgIHJldHVybiBleHBlY3RlZDtcbn07XG5cbkFUTi5JTlZBTElEX0FMVF9OVU1CRVIgPSAwO1xuXG5leHBvcnRzLkFUTiA9IEFUTjsiLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy8vXG5cbi8vIEEgdHVwbGU6IChBVE4gc3RhdGUsIHByZWRpY3RlZCBhbHQsIHN5bnRhY3RpYywgc2VtYW50aWMgY29udGV4dCkuXG4vLyAgVGhlIHN5bnRhY3RpYyBjb250ZXh0IGlzIGEgZ3JhcGgtc3RydWN0dXJlZCBzdGFjayBub2RlIHdob3NlXG4vLyAgcGF0aChzKSB0byB0aGUgcm9vdCBpcyB0aGUgcnVsZSBpbnZvY2F0aW9uKHMpXG4vLyAgY2hhaW4gdXNlZCB0byBhcnJpdmUgYXQgdGhlIHN0YXRlLiAgVGhlIHNlbWFudGljIGNvbnRleHQgaXNcbi8vICB0aGUgdHJlZSBvZiBzZW1hbnRpYyBwcmVkaWNhdGVzIGVuY291bnRlcmVkIGJlZm9yZSByZWFjaGluZ1xuLy8gIGFuIEFUTiBzdGF0ZS5cbi8vL1xuXG52YXIgRGVjaXNpb25TdGF0ZSA9IHJlcXVpcmUoJy4vQVROU3RhdGUnKS5EZWNpc2lvblN0YXRlO1xudmFyIFNlbWFudGljQ29udGV4dCA9IHJlcXVpcmUoJy4vU2VtYW50aWNDb250ZXh0JykuU2VtYW50aWNDb250ZXh0O1xudmFyIEhhc2ggPSByZXF1aXJlKFwiLi4vVXRpbHNcIikuSGFzaDtcblxuXG5mdW5jdGlvbiBjaGVja1BhcmFtcyhwYXJhbXMsIGlzQ2ZnKSB7XG5cdGlmKHBhcmFtcz09PW51bGwpIHtcblx0XHR2YXIgcmVzdWx0ID0geyBzdGF0ZTpudWxsLCBhbHQ6bnVsbCwgY29udGV4dDpudWxsLCBzZW1hbnRpY0NvbnRleHQ6bnVsbCB9O1xuXHRcdGlmKGlzQ2ZnKSB7XG5cdFx0XHRyZXN1bHQucmVhY2hlc0ludG9PdXRlckNvbnRleHQgPSAwO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9IGVsc2Uge1xuXHRcdHZhciBwcm9wcyA9IHt9O1xuXHRcdHByb3BzLnN0YXRlID0gcGFyYW1zLnN0YXRlIHx8IG51bGw7XG5cdFx0cHJvcHMuYWx0ID0gKHBhcmFtcy5hbHQgPT09IHVuZGVmaW5lZCkgPyBudWxsIDogcGFyYW1zLmFsdDtcblx0XHRwcm9wcy5jb250ZXh0ID0gcGFyYW1zLmNvbnRleHQgfHwgbnVsbDtcblx0XHRwcm9wcy5zZW1hbnRpY0NvbnRleHQgPSBwYXJhbXMuc2VtYW50aWNDb250ZXh0IHx8IG51bGw7XG5cdFx0aWYoaXNDZmcpIHtcblx0XHRcdHByb3BzLnJlYWNoZXNJbnRvT3V0ZXJDb250ZXh0ID0gcGFyYW1zLnJlYWNoZXNJbnRvT3V0ZXJDb250ZXh0IHx8IDA7XG5cdFx0XHRwcm9wcy5wcmVjZWRlbmNlRmlsdGVyU3VwcHJlc3NlZCA9IHBhcmFtcy5wcmVjZWRlbmNlRmlsdGVyU3VwcHJlc3NlZCB8fCBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHByb3BzO1xuXHR9XG59XG5cbmZ1bmN0aW9uIEFUTkNvbmZpZyhwYXJhbXMsIGNvbmZpZykge1xuXHR0aGlzLmNoZWNrQ29udGV4dChwYXJhbXMsIGNvbmZpZyk7XG5cdHBhcmFtcyA9IGNoZWNrUGFyYW1zKHBhcmFtcyk7XG5cdGNvbmZpZyA9IGNoZWNrUGFyYW1zKGNvbmZpZywgdHJ1ZSk7XG4gICAgLy8gVGhlIEFUTiBzdGF0ZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb25maWd1cmF0aW9uLy8vXG4gICAgdGhpcy5zdGF0ZSA9IHBhcmFtcy5zdGF0ZSE9PW51bGwgPyBwYXJhbXMuc3RhdGUgOiBjb25maWcuc3RhdGU7XG4gICAgLy8gV2hhdCBhbHQgKG9yIGxleGVyIHJ1bGUpIGlzIHByZWRpY3RlZCBieSB0aGlzIGNvbmZpZ3VyYXRpb24vLy9cbiAgICB0aGlzLmFsdCA9IHBhcmFtcy5hbHQhPT1udWxsID8gcGFyYW1zLmFsdCA6IGNvbmZpZy5hbHQ7XG4gICAgLy8gVGhlIHN0YWNrIG9mIGludm9raW5nIHN0YXRlcyBsZWFkaW5nIHRvIHRoZSBydWxlL3N0YXRlcyBhc3NvY2lhdGVkXG4gICAgLy8gIHdpdGggdGhpcyBjb25maWcuICBXZSB0cmFjayBvbmx5IHRob3NlIGNvbnRleHRzIHB1c2hlZCBkdXJpbmdcbiAgICAvLyAgZXhlY3V0aW9uIG9mIHRoZSBBVE4gc2ltdWxhdG9yLlxuICAgIHRoaXMuY29udGV4dCA9IHBhcmFtcy5jb250ZXh0IT09bnVsbCA/IHBhcmFtcy5jb250ZXh0IDogY29uZmlnLmNvbnRleHQ7XG4gICAgdGhpcy5zZW1hbnRpY0NvbnRleHQgPSBwYXJhbXMuc2VtYW50aWNDb250ZXh0IT09bnVsbCA/IHBhcmFtcy5zZW1hbnRpY0NvbnRleHQgOlxuICAgICAgICAoY29uZmlnLnNlbWFudGljQ29udGV4dCE9PW51bGwgPyBjb25maWcuc2VtYW50aWNDb250ZXh0IDogU2VtYW50aWNDb250ZXh0Lk5PTkUpO1xuICAgIC8vIFdlIGNhbm5vdCBleGVjdXRlIHByZWRpY2F0ZXMgZGVwZW5kZW50IHVwb24gbG9jYWwgY29udGV4dCB1bmxlc3NcbiAgICAvLyB3ZSBrbm93IGZvciBzdXJlIHdlIGFyZSBpbiB0aGUgY29ycmVjdCBjb250ZXh0LiBCZWNhdXNlIHRoZXJlIGlzXG4gICAgLy8gbm8gd2F5IHRvIGRvIHRoaXMgZWZmaWNpZW50bHksIHdlIHNpbXBseSBjYW5ub3QgZXZhbHVhdGVcbiAgICAvLyBkZXBlbmRlbnQgcHJlZGljYXRlcyB1bmxlc3Mgd2UgYXJlIGluIHRoZSBydWxlIHRoYXQgaW5pdGlhbGx5XG4gICAgLy8gaW52b2tlcyB0aGUgQVROIHNpbXVsYXRvci5cbiAgICAvL1xuICAgIC8vIGNsb3N1cmUoKSB0cmFja3MgdGhlIGRlcHRoIG9mIGhvdyBmYXIgd2UgZGlwIGludG8gdGhlXG4gICAgLy8gb3V0ZXIgY29udGV4dDogZGVwdGggJmd0OyAwLiAgTm90ZSB0aGF0IGl0IG1heSBub3QgYmUgdG90YWxseVxuICAgIC8vIGFjY3VyYXRlIGRlcHRoIHNpbmNlIEkgZG9uJ3QgZXZlciBkZWNyZW1lbnQuIFRPRE86IG1ha2UgaXQgYSBib29sZWFuIHRoZW5cbiAgICB0aGlzLnJlYWNoZXNJbnRvT3V0ZXJDb250ZXh0ID0gY29uZmlnLnJlYWNoZXNJbnRvT3V0ZXJDb250ZXh0O1xuICAgIHRoaXMucHJlY2VkZW5jZUZpbHRlclN1cHByZXNzZWQgPSBjb25maWcucHJlY2VkZW5jZUZpbHRlclN1cHByZXNzZWQ7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkFUTkNvbmZpZy5wcm90b3R5cGUuY2hlY2tDb250ZXh0ID0gZnVuY3Rpb24ocGFyYW1zLCBjb25maWcpIHtcblx0aWYoKHBhcmFtcy5jb250ZXh0PT09bnVsbCB8fCBwYXJhbXMuY29udGV4dD09PXVuZGVmaW5lZCkgJiZcblx0XHRcdChjb25maWc9PT1udWxsIHx8IGNvbmZpZy5jb250ZXh0PT09bnVsbCB8fCBjb25maWcuY29udGV4dD09PXVuZGVmaW5lZCkpIHtcblx0XHR0aGlzLmNvbnRleHQgPSBudWxsO1xuXHR9XG59O1xuXG5cbkFUTkNvbmZpZy5wcm90b3R5cGUuaGFzaENvZGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgaGFzaCA9IG5ldyBIYXNoKCk7XG4gICAgdGhpcy51cGRhdGVIYXNoQ29kZShoYXNoKTtcbiAgICByZXR1cm4gaGFzaC5maW5pc2goKTtcbn07XG5cblxuQVROQ29uZmlnLnByb3RvdHlwZS51cGRhdGVIYXNoQ29kZSA9IGZ1bmN0aW9uKGhhc2gpIHtcbiAgICBoYXNoLnVwZGF0ZSh0aGlzLnN0YXRlLnN0YXRlTnVtYmVyLCB0aGlzLmFsdCwgdGhpcy5jb250ZXh0LCB0aGlzLnNlbWFudGljQ29udGV4dCk7XG59O1xuXG4vLyBBbiBBVE4gY29uZmlndXJhdGlvbiBpcyBlcXVhbCB0byBhbm90aGVyIGlmIGJvdGggaGF2ZVxuLy8gIHRoZSBzYW1lIHN0YXRlLCB0aGV5IHByZWRpY3QgdGhlIHNhbWUgYWx0ZXJuYXRpdmUsIGFuZFxuLy8gIHN5bnRhY3RpYy9zZW1hbnRpYyBjb250ZXh0cyBhcmUgdGhlIHNhbWUuXG5cbkFUTkNvbmZpZy5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24ob3RoZXIpIHtcbiAgICBpZiAodGhpcyA9PT0gb3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICghIChvdGhlciBpbnN0YW5jZW9mIEFUTkNvbmZpZykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLnN0YXRlTnVtYmVyPT09b3RoZXIuc3RhdGUuc3RhdGVOdW1iZXIgJiZcbiAgICAgICAgICAgIHRoaXMuYWx0PT09b3RoZXIuYWx0ICYmXG4gICAgICAgICAgICAodGhpcy5jb250ZXh0PT09bnVsbCA/IG90aGVyLmNvbnRleHQ9PT1udWxsIDogdGhpcy5jb250ZXh0LmVxdWFscyhvdGhlci5jb250ZXh0KSkgJiZcbiAgICAgICAgICAgIHRoaXMuc2VtYW50aWNDb250ZXh0LmVxdWFscyhvdGhlci5zZW1hbnRpY0NvbnRleHQpICYmXG4gICAgICAgICAgICB0aGlzLnByZWNlZGVuY2VGaWx0ZXJTdXBwcmVzc2VkPT09b3RoZXIucHJlY2VkZW5jZUZpbHRlclN1cHByZXNzZWQ7XG4gICAgfVxufTtcblxuXG5BVE5Db25maWcucHJvdG90eXBlLmhhc2hDb2RlRm9yQ29uZmlnU2V0ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGhhc2ggPSBuZXcgSGFzaCgpO1xuICAgIGhhc2gudXBkYXRlKHRoaXMuc3RhdGUuc3RhdGVOdW1iZXIsIHRoaXMuYWx0LCB0aGlzLnNlbWFudGljQ29udGV4dCk7XG4gICAgcmV0dXJuIGhhc2guZmluaXNoKCk7XG59O1xuXG5cbkFUTkNvbmZpZy5wcm90b3R5cGUuZXF1YWxzRm9yQ29uZmlnU2V0ID0gZnVuY3Rpb24ob3RoZXIpIHtcbiAgICBpZiAodGhpcyA9PT0gb3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICghIChvdGhlciBpbnN0YW5jZW9mIEFUTkNvbmZpZykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLnN0YXRlTnVtYmVyPT09b3RoZXIuc3RhdGUuc3RhdGVOdW1iZXIgJiZcbiAgICAgICAgICAgIHRoaXMuYWx0PT09b3RoZXIuYWx0ICYmXG4gICAgICAgICAgICB0aGlzLnNlbWFudGljQ29udGV4dC5lcXVhbHMob3RoZXIuc2VtYW50aWNDb250ZXh0KTtcbiAgICB9XG59O1xuXG5cbkFUTkNvbmZpZy5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCIoXCIgKyB0aGlzLnN0YXRlICsgXCIsXCIgKyB0aGlzLmFsdCArXG4gICAgICAgICh0aGlzLmNvbnRleHQhPT1udWxsID8gXCIsW1wiICsgdGhpcy5jb250ZXh0LnRvU3RyaW5nKCkgKyBcIl1cIiA6IFwiXCIpICtcbiAgICAgICAgKHRoaXMuc2VtYW50aWNDb250ZXh0ICE9PSBTZW1hbnRpY0NvbnRleHQuTk9ORSA/XG4gICAgICAgICAgICAgICAgKFwiLFwiICsgdGhpcy5zZW1hbnRpY0NvbnRleHQudG9TdHJpbmcoKSlcbiAgICAgICAgICAgICAgICA6IFwiXCIpICtcbiAgICAgICAgKHRoaXMucmVhY2hlc0ludG9PdXRlckNvbnRleHQ+MCA/XG4gICAgICAgICAgICAgICAgKFwiLHVwPVwiICsgdGhpcy5yZWFjaGVzSW50b091dGVyQ29udGV4dClcbiAgICAgICAgICAgICAgICA6IFwiXCIpICsgXCIpXCI7XG59O1xuXG5cbmZ1bmN0aW9uIExleGVyQVROQ29uZmlnKHBhcmFtcywgY29uZmlnKSB7XG5cdEFUTkNvbmZpZy5jYWxsKHRoaXMsIHBhcmFtcywgY29uZmlnKTtcblxuICAgIC8vIFRoaXMgaXMgdGhlIGJhY2tpbmcgZmllbGQgZm9yIHtAbGluayAvL2dldExleGVyQWN0aW9uRXhlY3V0b3J9LlxuXHR2YXIgbGV4ZXJBY3Rpb25FeGVjdXRvciA9IHBhcmFtcy5sZXhlckFjdGlvbkV4ZWN1dG9yIHx8IG51bGw7XG4gICAgdGhpcy5sZXhlckFjdGlvbkV4ZWN1dG9yID0gbGV4ZXJBY3Rpb25FeGVjdXRvciB8fCAoY29uZmlnIT09bnVsbCA/IGNvbmZpZy5sZXhlckFjdGlvbkV4ZWN1dG9yIDogbnVsbCk7XG4gICAgdGhpcy5wYXNzZWRUaHJvdWdoTm9uR3JlZWR5RGVjaXNpb24gPSBjb25maWchPT1udWxsID8gdGhpcy5jaGVja05vbkdyZWVkeURlY2lzaW9uKGNvbmZpZywgdGhpcy5zdGF0ZSkgOiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuTGV4ZXJBVE5Db25maWcucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBVE5Db25maWcucHJvdG90eXBlKTtcbkxleGVyQVROQ29uZmlnLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExleGVyQVROQ29uZmlnO1xuXG5MZXhlckFUTkNvbmZpZy5wcm90b3R5cGUudXBkYXRlSGFzaENvZGUgPSBmdW5jdGlvbihoYXNoKSB7XG4gICAgaGFzaC51cGRhdGUodGhpcy5zdGF0ZS5zdGF0ZU51bWJlciwgdGhpcy5hbHQsIHRoaXMuY29udGV4dCwgdGhpcy5zZW1hbnRpY0NvbnRleHQsIHRoaXMucGFzc2VkVGhyb3VnaE5vbkdyZWVkeURlY2lzaW9uLCB0aGlzLmxleGVyQWN0aW9uRXhlY3V0b3IpO1xufTtcblxuTGV4ZXJBVE5Db25maWcucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uKG90aGVyKSB7XG4gICAgcmV0dXJuIHRoaXMgPT09IG90aGVyIHx8XG4gICAgICAgICAgICAob3RoZXIgaW5zdGFuY2VvZiBMZXhlckFUTkNvbmZpZyAmJlxuICAgICAgICAgICAgdGhpcy5wYXNzZWRUaHJvdWdoTm9uR3JlZWR5RGVjaXNpb24gPT0gb3RoZXIucGFzc2VkVGhyb3VnaE5vbkdyZWVkeURlY2lzaW9uICYmXG4gICAgICAgICAgICAodGhpcy5sZXhlckFjdGlvbkV4ZWN1dG9yID8gdGhpcy5sZXhlckFjdGlvbkV4ZWN1dG9yLmVxdWFscyhvdGhlci5sZXhlckFjdGlvbkV4ZWN1dG9yKSA6ICFvdGhlci5sZXhlckFjdGlvbkV4ZWN1dG9yKSAmJlxuICAgICAgICAgICAgQVROQ29uZmlnLnByb3RvdHlwZS5lcXVhbHMuY2FsbCh0aGlzLCBvdGhlcikpO1xufTtcblxuTGV4ZXJBVE5Db25maWcucHJvdG90eXBlLmhhc2hDb2RlRm9yQ29uZmlnU2V0ID0gTGV4ZXJBVE5Db25maWcucHJvdG90eXBlLmhhc2hDb2RlO1xuXG5MZXhlckFUTkNvbmZpZy5wcm90b3R5cGUuZXF1YWxzRm9yQ29uZmlnU2V0ID0gTGV4ZXJBVE5Db25maWcucHJvdG90eXBlLmVxdWFscztcblxuXG5MZXhlckFUTkNvbmZpZy5wcm90b3R5cGUuY2hlY2tOb25HcmVlZHlEZWNpc2lvbiA9IGZ1bmN0aW9uKHNvdXJjZSwgdGFyZ2V0KSB7XG4gICAgcmV0dXJuIHNvdXJjZS5wYXNzZWRUaHJvdWdoTm9uR3JlZWR5RGVjaXNpb24gfHxcbiAgICAgICAgKHRhcmdldCBpbnN0YW5jZW9mIERlY2lzaW9uU3RhdGUpICYmIHRhcmdldC5ub25HcmVlZHk7XG59O1xuXG5leHBvcnRzLkFUTkNvbmZpZyA9IEFUTkNvbmZpZztcbmV4cG9ydHMuTGV4ZXJBVE5Db25maWcgPSBMZXhlckFUTkNvbmZpZzsiLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuXG4vL1xuLy8gU3BlY2lhbGl6ZWQge0BsaW5rIFNldH17QGNvZGUgPH17QGxpbmsgQVROQ29uZmlnfXtAY29kZSA+fSB0aGF0IGNhbiB0cmFja1xuLy8gaW5mbyBhYm91dCB0aGUgc2V0LCB3aXRoIHN1cHBvcnQgZm9yIGNvbWJpbmluZyBzaW1pbGFyIGNvbmZpZ3VyYXRpb25zIHVzaW5nIGFcbi8vIGdyYXBoLXN0cnVjdHVyZWQgc3RhY2suXG4vLy9cblxudmFyIEFUTiA9IHJlcXVpcmUoJy4vQVROJykuQVROO1xudmFyIFV0aWxzID0gcmVxdWlyZSgnLi8uLi9VdGlscycpO1xudmFyIEhhc2ggPSBVdGlscy5IYXNoO1xudmFyIFNldCA9IFV0aWxzLlNldDtcbnZhciBTZW1hbnRpY0NvbnRleHQgPSByZXF1aXJlKCcuL1NlbWFudGljQ29udGV4dCcpLlNlbWFudGljQ29udGV4dDtcbnZhciBtZXJnZSA9IHJlcXVpcmUoJy4vLi4vUHJlZGljdGlvbkNvbnRleHQnKS5tZXJnZTtcblxuZnVuY3Rpb24gaGFzaEFUTkNvbmZpZyhjKSB7XG5cdHJldHVybiBjLmhhc2hDb2RlRm9yQ29uZmlnU2V0KCk7XG59XG5cbmZ1bmN0aW9uIGVxdWFsQVROQ29uZmlncyhhLCBiKSB7XG5cdGlmICggYT09PWIgKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSBpZiAoIGE9PT1udWxsIHx8IGI9PT1udWxsICkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBlbHNlXG4gICAgICAgcmV0dXJuIGEuZXF1YWxzRm9yQ29uZmlnU2V0KGIpO1xuIH1cblxuXG5mdW5jdGlvbiBBVE5Db25maWdTZXQoZnVsbEN0eCkge1xuXHQvL1xuXHQvLyBUaGUgcmVhc29uIHRoYXQgd2UgbmVlZCB0aGlzIGlzIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0aGUgaGFzaCBtYXAgdG8gdXNlXG5cdC8vIHRoZSBzdGFuZGFyZCBoYXNoIGNvZGUgYW5kIGVxdWFscy4gV2UgbmVlZCBhbGwgY29uZmlndXJhdGlvbnMgd2l0aCB0aGVcblx0Ly8gc2FtZVxuXHQvLyB7QGNvZGUgKHMsaSxfLHNlbWN0eCl9IHRvIGJlIGVxdWFsLiBVbmZvcnR1bmF0ZWx5LCB0aGlzIGtleSBlZmZlY3RpdmVseVxuXHQvLyBkb3VibGVzXG5cdC8vIHRoZSBudW1iZXIgb2Ygb2JqZWN0cyBhc3NvY2lhdGVkIHdpdGggQVROQ29uZmlncy4gVGhlIG90aGVyIHNvbHV0aW9uIGlzXG5cdC8vIHRvXG5cdC8vIHVzZSBhIGhhc2ggdGFibGUgdGhhdCBsZXRzIHVzIHNwZWNpZnkgdGhlIGVxdWFscy9oYXNoY29kZSBvcGVyYXRpb24uXG5cdC8vIEFsbCBjb25maWdzIGJ1dCBoYXNoZWQgYnkgKHMsIGksIF8sIHBpKSBub3QgaW5jbHVkaW5nIGNvbnRleHQuIFdpcGVkIG91dFxuXHQvLyB3aGVuIHdlIGdvIHJlYWRvbmx5IGFzIHRoaXMgc2V0IGJlY29tZXMgYSBERkEgc3RhdGUuXG5cdHRoaXMuY29uZmlnTG9va3VwID0gbmV3IFNldChoYXNoQVROQ29uZmlnLCBlcXVhbEFUTkNvbmZpZ3MpO1xuXHQvLyBJbmRpY2F0ZXMgdGhhdCB0aGlzIGNvbmZpZ3VyYXRpb24gc2V0IGlzIHBhcnQgb2YgYSBmdWxsIGNvbnRleHRcblx0Ly8gTEwgcHJlZGljdGlvbi4gSXQgd2lsbCBiZSB1c2VkIHRvIGRldGVybWluZSBob3cgdG8gbWVyZ2UgJC4gV2l0aCBTTExcblx0Ly8gaXQncyBhIHdpbGRjYXJkIHdoZXJlYXMgaXQgaXMgbm90IGZvciBMTCBjb250ZXh0IG1lcmdlLlxuXHR0aGlzLmZ1bGxDdHggPSBmdWxsQ3R4ID09PSB1bmRlZmluZWQgPyB0cnVlIDogZnVsbEN0eDtcblx0Ly8gSW5kaWNhdGVzIHRoYXQgdGhlIHNldCBvZiBjb25maWd1cmF0aW9ucyBpcyByZWFkLW9ubHkuIERvIG5vdFxuXHQvLyBhbGxvdyBhbnkgY29kZSB0byBtYW5pcHVsYXRlIHRoZSBzZXQ7IERGQSBzdGF0ZXMgd2lsbCBwb2ludCBhdFxuXHQvLyB0aGUgc2V0cyBhbmQgdGhleSBtdXN0IG5vdCBjaGFuZ2UuIFRoaXMgZG9lcyBub3QgcHJvdGVjdCB0aGUgb3RoZXJcblx0Ly8gZmllbGRzOyBpbiBwYXJ0aWN1bGFyLCBjb25mbGljdGluZ0FsdHMgaXMgc2V0IGFmdGVyXG5cdC8vIHdlJ3ZlIG1hZGUgdGhpcyByZWFkb25seS5cblx0dGhpcy5yZWFkT25seSA9IGZhbHNlO1xuXHQvLyBUcmFjayB0aGUgZWxlbWVudHMgYXMgdGhleSBhcmUgYWRkZWQgdG8gdGhlIHNldDsgc3VwcG9ydHMgZ2V0KGkpLy8vXG5cdHRoaXMuY29uZmlncyA9IFtdO1xuXG5cdC8vIFRPRE86IHRoZXNlIGZpZWxkcyBtYWtlIG1lIHByZXR0eSB1bmNvbWZvcnRhYmxlIGJ1dCBuaWNlIHRvIHBhY2sgdXAgaW5mb1xuXHQvLyB0b2dldGhlciwgc2F2ZXMgcmVjb21wdXRhdGlvblxuXHQvLyBUT0RPOiBjYW4gd2UgdHJhY2sgY29uZmxpY3RzIGFzIHRoZXkgYXJlIGFkZGVkIHRvIHNhdmUgc2Nhbm5pbmcgY29uZmlnc1xuXHQvLyBsYXRlcj9cblx0dGhpcy51bmlxdWVBbHQgPSAwO1xuXHR0aGlzLmNvbmZsaWN0aW5nQWx0cyA9IG51bGw7XG5cblx0Ly8gVXNlZCBpbiBwYXJzZXIgYW5kIGxleGVyLiBJbiBsZXhlciwgaXQgaW5kaWNhdGVzIHdlIGhpdCBhIHByZWRcblx0Ly8gd2hpbGUgY29tcHV0aW5nIGEgY2xvc3VyZSBvcGVyYXRpb24uIERvbid0IG1ha2UgYSBERkEgc3RhdGUgZnJvbSB0aGlzLlxuXHR0aGlzLmhhc1NlbWFudGljQ29udGV4dCA9IGZhbHNlO1xuXHR0aGlzLmRpcHNJbnRvT3V0ZXJDb250ZXh0ID0gZmFsc2U7XG5cblx0dGhpcy5jYWNoZWRIYXNoQ29kZSA9IC0xO1xuXG5cdHJldHVybiB0aGlzO1xufVxuXG4vLyBBZGRpbmcgYSBuZXcgY29uZmlnIG1lYW5zIG1lcmdpbmcgY29udGV4dHMgd2l0aCBleGlzdGluZyBjb25maWdzIGZvclxuLy8ge0Bjb2RlIChzLCBpLCBwaSwgXyl9LCB3aGVyZSB7QGNvZGUgc30gaXMgdGhlXG4vLyB7QGxpbmsgQVROQ29uZmlnLy9zdGF0ZX0sIHtAY29kZSBpfSBpcyB0aGUge0BsaW5rIEFUTkNvbmZpZy8vYWx0fSwgYW5kXG4vLyB7QGNvZGUgcGl9IGlzIHRoZSB7QGxpbmsgQVROQ29uZmlnLy9zZW1hbnRpY0NvbnRleHR9LiBXZSB1c2Vcbi8vIHtAY29kZSAocyxpLHBpKX0gYXMga2V5LlxuLy9cbi8vIDxwPlRoaXMgbWV0aG9kIHVwZGF0ZXMge0BsaW5rIC8vZGlwc0ludG9PdXRlckNvbnRleHR9IGFuZFxuLy8ge0BsaW5rIC8vaGFzU2VtYW50aWNDb250ZXh0fSB3aGVuIG5lY2Vzc2FyeS48L3A+XG4vLyAvXG5BVE5Db25maWdTZXQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKGNvbmZpZywgbWVyZ2VDYWNoZSkge1xuXHRpZiAobWVyZ2VDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0bWVyZ2VDYWNoZSA9IG51bGw7XG5cdH1cblx0aWYgKHRoaXMucmVhZE9ubHkpIHtcblx0XHR0aHJvdyBcIlRoaXMgc2V0IGlzIHJlYWRvbmx5XCI7XG5cdH1cblx0aWYgKGNvbmZpZy5zZW1hbnRpY0NvbnRleHQgIT09IFNlbWFudGljQ29udGV4dC5OT05FKSB7XG5cdFx0dGhpcy5oYXNTZW1hbnRpY0NvbnRleHQgPSB0cnVlO1xuXHR9XG5cdGlmIChjb25maWcucmVhY2hlc0ludG9PdXRlckNvbnRleHQgPiAwKSB7XG5cdFx0dGhpcy5kaXBzSW50b091dGVyQ29udGV4dCA9IHRydWU7XG5cdH1cblx0dmFyIGV4aXN0aW5nID0gdGhpcy5jb25maWdMb29rdXAuYWRkKGNvbmZpZyk7XG5cdGlmIChleGlzdGluZyA9PT0gY29uZmlnKSB7XG5cdFx0dGhpcy5jYWNoZWRIYXNoQ29kZSA9IC0xO1xuXHRcdHRoaXMuY29uZmlncy5wdXNoKGNvbmZpZyk7IC8vIHRyYWNrIG9yZGVyIGhlcmVcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHQvLyBhIHByZXZpb3VzIChzLGkscGksXyksIG1lcmdlIHdpdGggaXQgYW5kIHNhdmUgcmVzdWx0XG5cdHZhciByb290SXNXaWxkY2FyZCA9ICF0aGlzLmZ1bGxDdHg7XG5cdHZhciBtZXJnZWQgPSBtZXJnZShleGlzdGluZy5jb250ZXh0LCBjb25maWcuY29udGV4dCwgcm9vdElzV2lsZGNhcmQsIG1lcmdlQ2FjaGUpO1xuXHQvLyBubyBuZWVkIHRvIGNoZWNrIGZvciBleGlzdGluZy5jb250ZXh0LCBjb25maWcuY29udGV4dCBpbiBjYWNoZVxuXHQvLyBzaW5jZSBvbmx5IHdheSB0byBjcmVhdGUgbmV3IGdyYXBocyBpcyBcImNhbGwgcnVsZVwiIGFuZCBoZXJlLiBXZVxuXHQvLyBjYWNoZSBhdCBib3RoIHBsYWNlcy5cblx0ZXhpc3RpbmcucmVhY2hlc0ludG9PdXRlckNvbnRleHQgPSBNYXRoLm1heCggZXhpc3RpbmcucmVhY2hlc0ludG9PdXRlckNvbnRleHQsIGNvbmZpZy5yZWFjaGVzSW50b091dGVyQ29udGV4dCk7XG5cdC8vIG1ha2Ugc3VyZSB0byBwcmVzZXJ2ZSB0aGUgcHJlY2VkZW5jZSBmaWx0ZXIgc3VwcHJlc3Npb24gZHVyaW5nIHRoZSBtZXJnZVxuXHRpZiAoY29uZmlnLnByZWNlZGVuY2VGaWx0ZXJTdXBwcmVzc2VkKSB7XG5cdFx0ZXhpc3RpbmcucHJlY2VkZW5jZUZpbHRlclN1cHByZXNzZWQgPSB0cnVlO1xuXHR9XG5cdGV4aXN0aW5nLmNvbnRleHQgPSBtZXJnZWQ7IC8vIHJlcGxhY2UgY29udGV4dDsgbm8gbmVlZCB0byBhbHQgbWFwcGluZ1xuXHRyZXR1cm4gdHJ1ZTtcbn07XG5cbkFUTkNvbmZpZ1NldC5wcm90b3R5cGUuZ2V0U3RhdGVzID0gZnVuY3Rpb24oKSB7XG5cdHZhciBzdGF0ZXMgPSBuZXcgU2V0KCk7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb25maWdzLmxlbmd0aDsgaSsrKSB7XG5cdFx0c3RhdGVzLmFkZCh0aGlzLmNvbmZpZ3NbaV0uc3RhdGUpO1xuXHR9XG5cdHJldHVybiBzdGF0ZXM7XG59O1xuXG5BVE5Db25maWdTZXQucHJvdG90eXBlLmdldFByZWRpY2F0ZXMgPSBmdW5jdGlvbigpIHtcblx0dmFyIHByZWRzID0gW107XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb25maWdzLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIGMgPSB0aGlzLmNvbmZpZ3NbaV0uc2VtYW50aWNDb250ZXh0O1xuXHRcdGlmIChjICE9PSBTZW1hbnRpY0NvbnRleHQuTk9ORSkge1xuXHRcdFx0cHJlZHMucHVzaChjLnNlbWFudGljQ29udGV4dCk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBwcmVkcztcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShBVE5Db25maWdTZXQucHJvdG90eXBlLCBcIml0ZW1zXCIsIHtcblx0Z2V0IDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuY29uZmlncztcblx0fVxufSk7XG5cbkFUTkNvbmZpZ1NldC5wcm90b3R5cGUub3B0aW1pemVDb25maWdzID0gZnVuY3Rpb24oaW50ZXJwcmV0ZXIpIHtcblx0aWYgKHRoaXMucmVhZE9ubHkpIHtcblx0XHR0aHJvdyBcIlRoaXMgc2V0IGlzIHJlYWRvbmx5XCI7XG5cdH1cblx0aWYgKHRoaXMuY29uZmlnTG9va3VwLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybjtcblx0fVxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29uZmlncy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBjb25maWcgPSB0aGlzLmNvbmZpZ3NbaV07XG5cdFx0Y29uZmlnLmNvbnRleHQgPSBpbnRlcnByZXRlci5nZXRDYWNoZWRDb250ZXh0KGNvbmZpZy5jb250ZXh0KTtcblx0fVxufTtcblxuQVROQ29uZmlnU2V0LnByb3RvdHlwZS5hZGRBbGwgPSBmdW5jdGlvbihjb2xsKSB7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgY29sbC5sZW5ndGg7IGkrKykge1xuXHRcdHRoaXMuYWRkKGNvbGxbaV0pO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG5cbkFUTkNvbmZpZ1NldC5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24ob3RoZXIpIHtcblx0cmV0dXJuIHRoaXMgPT09IG90aGVyIHx8XG5cdFx0KG90aGVyIGluc3RhbmNlb2YgQVROQ29uZmlnU2V0ICYmXG5cdFx0VXRpbHMuZXF1YWxBcnJheXModGhpcy5jb25maWdzLCBvdGhlci5jb25maWdzKSAmJlxuXHRcdHRoaXMuZnVsbEN0eCA9PT0gb3RoZXIuZnVsbEN0eCAmJlxuXHRcdHRoaXMudW5pcXVlQWx0ID09PSBvdGhlci51bmlxdWVBbHQgJiZcblx0XHR0aGlzLmNvbmZsaWN0aW5nQWx0cyA9PT0gb3RoZXIuY29uZmxpY3RpbmdBbHRzICYmXG5cdFx0dGhpcy5oYXNTZW1hbnRpY0NvbnRleHQgPT09IG90aGVyLmhhc1NlbWFudGljQ29udGV4dCAmJlxuXHRcdHRoaXMuZGlwc0ludG9PdXRlckNvbnRleHQgPT09IG90aGVyLmRpcHNJbnRvT3V0ZXJDb250ZXh0KTtcbn07XG5cbkFUTkNvbmZpZ1NldC5wcm90b3R5cGUuaGFzaENvZGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgaGFzaCA9IG5ldyBIYXNoKCk7XG4gICAgdGhpcy51cGRhdGVIYXNoQ29kZShoYXNoKTtcbiAgICByZXR1cm4gaGFzaC5maW5pc2goKTtcbn07XG5cblxuQVROQ29uZmlnU2V0LnByb3RvdHlwZS51cGRhdGVIYXNoQ29kZSA9IGZ1bmN0aW9uKGhhc2gpIHtcblx0aWYgKHRoaXMucmVhZE9ubHkpIHtcblx0XHRpZiAodGhpcy5jYWNoZWRIYXNoQ29kZSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHZhciBoYXNoID0gbmV3IEhhc2goKTtcbiAgICAgICAgICAgIGhhc2gudXBkYXRlKHRoaXMuY29uZmlncyk7XG5cdFx0XHR0aGlzLmNhY2hlZEhhc2hDb2RlID0gaGFzaC5maW5pc2goKTtcblx0XHR9XG4gICAgICAgIGhhc2gudXBkYXRlKHRoaXMuY2FjaGVkSGFzaENvZGUpO1xuXHR9IGVsc2Uge1xuICAgICAgICBoYXNoLnVwZGF0ZSh0aGlzLmNvbmZpZ3MpO1xuXHR9XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShBVE5Db25maWdTZXQucHJvdG90eXBlLCBcImxlbmd0aFwiLCB7XG5cdGdldCA6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmNvbmZpZ3MubGVuZ3RoO1xuXHR9XG59KTtcblxuQVROQ29uZmlnU2V0LnByb3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLmNvbmZpZ3MubGVuZ3RoID09PSAwO1xufTtcblxuQVROQ29uZmlnU2V0LnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uKGl0ZW0pIHtcblx0aWYgKHRoaXMuY29uZmlnTG9va3VwID09PSBudWxsKSB7XG5cdFx0dGhyb3cgXCJUaGlzIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQgZm9yIHJlYWRvbmx5IHNldHMuXCI7XG5cdH1cblx0cmV0dXJuIHRoaXMuY29uZmlnTG9va3VwLmNvbnRhaW5zKGl0ZW0pO1xufTtcblxuQVROQ29uZmlnU2V0LnByb3RvdHlwZS5jb250YWluc0Zhc3QgPSBmdW5jdGlvbihpdGVtKSB7XG5cdGlmICh0aGlzLmNvbmZpZ0xvb2t1cCA9PT0gbnVsbCkge1xuXHRcdHRocm93IFwiVGhpcyBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkIGZvciByZWFkb25seSBzZXRzLlwiO1xuXHR9XG5cdHJldHVybiB0aGlzLmNvbmZpZ0xvb2t1cC5jb250YWluc0Zhc3QoaXRlbSk7XG59O1xuXG5BVE5Db25maWdTZXQucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oKSB7XG5cdGlmICh0aGlzLnJlYWRPbmx5KSB7XG5cdFx0dGhyb3cgXCJUaGlzIHNldCBpcyByZWFkb25seVwiO1xuXHR9XG5cdHRoaXMuY29uZmlncyA9IFtdO1xuXHR0aGlzLmNhY2hlZEhhc2hDb2RlID0gLTE7XG5cdHRoaXMuY29uZmlnTG9va3VwID0gbmV3IFNldCgpO1xufTtcblxuQVROQ29uZmlnU2V0LnByb3RvdHlwZS5zZXRSZWFkb25seSA9IGZ1bmN0aW9uKHJlYWRPbmx5KSB7XG5cdHRoaXMucmVhZE9ubHkgPSByZWFkT25seTtcblx0aWYgKHJlYWRPbmx5KSB7XG5cdFx0dGhpcy5jb25maWdMb29rdXAgPSBudWxsOyAvLyBjYW4ndCBtb2QsIG5vIG5lZWQgZm9yIGxvb2t1cCBjYWNoZVxuXHR9XG59O1xuXG5BVE5Db25maWdTZXQucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiBVdGlscy5hcnJheVRvU3RyaW5nKHRoaXMuY29uZmlncykgK1xuXHRcdCh0aGlzLmhhc1NlbWFudGljQ29udGV4dCA/IFwiLGhhc1NlbWFudGljQ29udGV4dD1cIiArIHRoaXMuaGFzU2VtYW50aWNDb250ZXh0IDogXCJcIikgK1xuXHRcdCh0aGlzLnVuaXF1ZUFsdCAhPT0gQVROLklOVkFMSURfQUxUX05VTUJFUiA/IFwiLHVuaXF1ZUFsdD1cIiArIHRoaXMudW5pcXVlQWx0IDogXCJcIikgK1xuXHRcdCh0aGlzLmNvbmZsaWN0aW5nQWx0cyAhPT0gbnVsbCA/IFwiLGNvbmZsaWN0aW5nQWx0cz1cIiArIHRoaXMuY29uZmxpY3RpbmdBbHRzIDogXCJcIikgK1xuXHRcdCh0aGlzLmRpcHNJbnRvT3V0ZXJDb250ZXh0ID8gXCIsZGlwc0ludG9PdXRlckNvbnRleHRcIiA6IFwiXCIpO1xufTtcblxuZnVuY3Rpb24gT3JkZXJlZEFUTkNvbmZpZ1NldCgpIHtcblx0QVROQ29uZmlnU2V0LmNhbGwodGhpcyk7XG5cdHRoaXMuY29uZmlnTG9va3VwID0gbmV3IFNldCgpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuT3JkZXJlZEFUTkNvbmZpZ1NldC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFUTkNvbmZpZ1NldC5wcm90b3R5cGUpO1xuT3JkZXJlZEFUTkNvbmZpZ1NldC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBPcmRlcmVkQVROQ29uZmlnU2V0O1xuXG5leHBvcnRzLkFUTkNvbmZpZ1NldCA9IEFUTkNvbmZpZ1NldDtcbmV4cG9ydHMuT3JkZXJlZEFUTkNvbmZpZ1NldCA9IE9yZGVyZWRBVE5Db25maWdTZXQ7XG4iLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG5cbmZ1bmN0aW9uIEFUTkRlc2VyaWFsaXphdGlvbk9wdGlvbnMoY29weUZyb20pIHtcblx0aWYoY29weUZyb209PT11bmRlZmluZWQpIHtcblx0XHRjb3B5RnJvbSA9IG51bGw7XG5cdH1cblx0dGhpcy5yZWFkT25seSA9IGZhbHNlO1xuICAgIHRoaXMudmVyaWZ5QVROID0gY29weUZyb209PT1udWxsID8gdHJ1ZSA6IGNvcHlGcm9tLnZlcmlmeUFUTjtcbiAgICB0aGlzLmdlbmVyYXRlUnVsZUJ5cGFzc1RyYW5zaXRpb25zID0gY29weUZyb209PT1udWxsID8gZmFsc2UgOiBjb3B5RnJvbS5nZW5lcmF0ZVJ1bGVCeXBhc3NUcmFuc2l0aW9ucztcblxuICAgIHJldHVybiB0aGlzO1xufVxuXG5BVE5EZXNlcmlhbGl6YXRpb25PcHRpb25zLmRlZmF1bHRPcHRpb25zID0gbmV3IEFUTkRlc2VyaWFsaXphdGlvbk9wdGlvbnMoKTtcbkFUTkRlc2VyaWFsaXphdGlvbk9wdGlvbnMuZGVmYXVsdE9wdGlvbnMucmVhZE9ubHkgPSB0cnVlO1xuXG4vLyAgICBkZWYgX19zZXRhdHRyX18oc2VsZiwga2V5LCB2YWx1ZSk6XG4vLyAgICAgICAgaWYga2V5IT1cInJlYWRPbmx5XCIgYW5kIHNlbGYucmVhZE9ubHk6XG4vLyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbihcIlRoZSBvYmplY3QgaXMgcmVhZCBvbmx5LlwiKVxuLy8gICAgICAgIHN1cGVyKHR5cGUoc2VsZiksIHNlbGYpLl9fc2V0YXR0cl9fKGtleSx2YWx1ZSlcblxuZXhwb3J0cy5BVE5EZXNlcmlhbGl6YXRpb25PcHRpb25zID0gQVRORGVzZXJpYWxpemF0aW9uT3B0aW9ucztcbiIsIi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cblxudmFyIFRva2VuID0gcmVxdWlyZSgnLi8uLi9Ub2tlbicpLlRva2VuO1xudmFyIEFUTiA9IHJlcXVpcmUoJy4vQVROJykuQVROO1xudmFyIEFUTlR5cGUgPSByZXF1aXJlKCcuL0FUTlR5cGUnKS5BVE5UeXBlO1xudmFyIEFUTlN0YXRlcyA9IHJlcXVpcmUoJy4vQVROU3RhdGUnKTtcbnZhciBBVE5TdGF0ZSA9IEFUTlN0YXRlcy5BVE5TdGF0ZTtcbnZhciBCYXNpY1N0YXRlID0gQVROU3RhdGVzLkJhc2ljU3RhdGU7XG52YXIgRGVjaXNpb25TdGF0ZSA9IEFUTlN0YXRlcy5EZWNpc2lvblN0YXRlO1xudmFyIEJsb2NrU3RhcnRTdGF0ZSA9IEFUTlN0YXRlcy5CbG9ja1N0YXJ0U3RhdGU7XG52YXIgQmxvY2tFbmRTdGF0ZSA9IEFUTlN0YXRlcy5CbG9ja0VuZFN0YXRlO1xudmFyIExvb3BFbmRTdGF0ZSA9IEFUTlN0YXRlcy5Mb29wRW5kU3RhdGU7XG52YXIgUnVsZVN0YXJ0U3RhdGUgPSBBVE5TdGF0ZXMuUnVsZVN0YXJ0U3RhdGU7XG52YXIgUnVsZVN0b3BTdGF0ZSA9IEFUTlN0YXRlcy5SdWxlU3RvcFN0YXRlO1xudmFyIFRva2Vuc1N0YXJ0U3RhdGUgPSBBVE5TdGF0ZXMuVG9rZW5zU3RhcnRTdGF0ZTtcbnZhciBQbHVzTG9vcGJhY2tTdGF0ZSA9IEFUTlN0YXRlcy5QbHVzTG9vcGJhY2tTdGF0ZTtcbnZhciBTdGFyTG9vcGJhY2tTdGF0ZSA9IEFUTlN0YXRlcy5TdGFyTG9vcGJhY2tTdGF0ZTtcbnZhciBTdGFyTG9vcEVudHJ5U3RhdGUgPSBBVE5TdGF0ZXMuU3Rhckxvb3BFbnRyeVN0YXRlO1xudmFyIFBsdXNCbG9ja1N0YXJ0U3RhdGUgPSBBVE5TdGF0ZXMuUGx1c0Jsb2NrU3RhcnRTdGF0ZTtcbnZhciBTdGFyQmxvY2tTdGFydFN0YXRlID0gQVROU3RhdGVzLlN0YXJCbG9ja1N0YXJ0U3RhdGU7XG52YXIgQmFzaWNCbG9ja1N0YXJ0U3RhdGUgPSBBVE5TdGF0ZXMuQmFzaWNCbG9ja1N0YXJ0U3RhdGU7XG52YXIgVHJhbnNpdGlvbnMgPSByZXF1aXJlKCcuL1RyYW5zaXRpb24nKTtcbnZhciBUcmFuc2l0aW9uID0gVHJhbnNpdGlvbnMuVHJhbnNpdGlvbjtcbnZhciBBdG9tVHJhbnNpdGlvbiA9IFRyYW5zaXRpb25zLkF0b21UcmFuc2l0aW9uO1xudmFyIFNldFRyYW5zaXRpb24gPSBUcmFuc2l0aW9ucy5TZXRUcmFuc2l0aW9uO1xudmFyIE5vdFNldFRyYW5zaXRpb24gPSBUcmFuc2l0aW9ucy5Ob3RTZXRUcmFuc2l0aW9uO1xudmFyIFJ1bGVUcmFuc2l0aW9uID0gVHJhbnNpdGlvbnMuUnVsZVRyYW5zaXRpb247XG52YXIgUmFuZ2VUcmFuc2l0aW9uID0gVHJhbnNpdGlvbnMuUmFuZ2VUcmFuc2l0aW9uO1xudmFyIEFjdGlvblRyYW5zaXRpb24gPSBUcmFuc2l0aW9ucy5BY3Rpb25UcmFuc2l0aW9uO1xudmFyIEVwc2lsb25UcmFuc2l0aW9uID0gVHJhbnNpdGlvbnMuRXBzaWxvblRyYW5zaXRpb247XG52YXIgV2lsZGNhcmRUcmFuc2l0aW9uID0gVHJhbnNpdGlvbnMuV2lsZGNhcmRUcmFuc2l0aW9uO1xudmFyIFByZWRpY2F0ZVRyYW5zaXRpb24gPSBUcmFuc2l0aW9ucy5QcmVkaWNhdGVUcmFuc2l0aW9uO1xudmFyIFByZWNlZGVuY2VQcmVkaWNhdGVUcmFuc2l0aW9uID0gVHJhbnNpdGlvbnMuUHJlY2VkZW5jZVByZWRpY2F0ZVRyYW5zaXRpb247XG52YXIgSW50ZXJ2YWxTZXQgPSByZXF1aXJlKCcuLy4uL0ludGVydmFsU2V0JykuSW50ZXJ2YWxTZXQ7XG52YXIgSW50ZXJ2YWwgPSByZXF1aXJlKCcuLy4uL0ludGVydmFsU2V0JykuSW50ZXJ2YWw7XG52YXIgQVRORGVzZXJpYWxpemF0aW9uT3B0aW9ucyA9IHJlcXVpcmUoJy4vQVRORGVzZXJpYWxpemF0aW9uT3B0aW9ucycpLkFUTkRlc2VyaWFsaXphdGlvbk9wdGlvbnM7XG52YXIgTGV4ZXJBY3Rpb25zID0gcmVxdWlyZSgnLi9MZXhlckFjdGlvbicpO1xudmFyIExleGVyQWN0aW9uVHlwZSA9IExleGVyQWN0aW9ucy5MZXhlckFjdGlvblR5cGU7XG52YXIgTGV4ZXJTa2lwQWN0aW9uID0gTGV4ZXJBY3Rpb25zLkxleGVyU2tpcEFjdGlvbjtcbnZhciBMZXhlckNoYW5uZWxBY3Rpb24gPSBMZXhlckFjdGlvbnMuTGV4ZXJDaGFubmVsQWN0aW9uO1xudmFyIExleGVyQ3VzdG9tQWN0aW9uID0gTGV4ZXJBY3Rpb25zLkxleGVyQ3VzdG9tQWN0aW9uO1xudmFyIExleGVyTW9yZUFjdGlvbiA9IExleGVyQWN0aW9ucy5MZXhlck1vcmVBY3Rpb247XG52YXIgTGV4ZXJUeXBlQWN0aW9uID0gTGV4ZXJBY3Rpb25zLkxleGVyVHlwZUFjdGlvbjtcbnZhciBMZXhlclB1c2hNb2RlQWN0aW9uID0gTGV4ZXJBY3Rpb25zLkxleGVyUHVzaE1vZGVBY3Rpb247XG52YXIgTGV4ZXJQb3BNb2RlQWN0aW9uID0gTGV4ZXJBY3Rpb25zLkxleGVyUG9wTW9kZUFjdGlvbjtcbnZhciBMZXhlck1vZGVBY3Rpb24gPSBMZXhlckFjdGlvbnMuTGV4ZXJNb2RlQWN0aW9uO1xuLy8gVGhpcyBpcyB0aGUgZWFybGllc3Qgc3VwcG9ydGVkIHNlcmlhbGl6ZWQgVVVJRC5cbi8vIHN0aWNrIHRvIHNlcmlhbGl6ZWQgdmVyc2lvbiBmb3Igbm93LCB3ZSBkb24ndCBuZWVkIGEgVVVJRCBpbnN0YW5jZVxudmFyIEJBU0VfU0VSSUFMSVpFRF9VVUlEID0gXCJBQURCOEQ3RS1BRUVGLTQ0MTUtQUQyQi04MjA0RDZDRjA0MkVcIjtcblxuLy9cbi8vIFRoaXMgVVVJRCBpbmRpY2F0ZXMgdGhlIHNlcmlhbGl6ZWQgQVROIGNvbnRhaW5zIHR3byBzZXRzIG9mXG4vLyBJbnRlcnZhbFNldHMsIHdoZXJlIHRoZSBzZWNvbmQgc2V0J3MgdmFsdWVzIGFyZSBlbmNvZGVkIGFzXG4vLyAzMi1iaXQgaW50ZWdlcnMgdG8gc3VwcG9ydCB0aGUgZnVsbCBVbmljb2RlIFNNUCByYW5nZSB1cCB0byBVKzEwRkZGRi5cbi8vXG52YXIgQURERURfVU5JQ09ERV9TTVAgPSBcIjU5NjI3Nzg0LTNCRTUtNDE3QS1COUVCLTgxMzFBNzI4NjA4OVwiO1xuXG4vLyBUaGlzIGxpc3QgY29udGFpbnMgYWxsIG9mIHRoZSBjdXJyZW50bHkgc3VwcG9ydGVkIFVVSURzLCBvcmRlcmVkIGJ5IHdoZW5cbi8vIHRoZSBmZWF0dXJlIGZpcnN0IGFwcGVhcmVkIGluIHRoaXMgYnJhbmNoLlxudmFyIFNVUFBPUlRFRF9VVUlEUyA9IFsgQkFTRV9TRVJJQUxJWkVEX1VVSUQsIEFEREVEX1VOSUNPREVfU01QIF07XG5cbnZhciBTRVJJQUxJWkVEX1ZFUlNJT04gPSAzO1xuXG4vLyBUaGlzIGlzIHRoZSBjdXJyZW50IHNlcmlhbGl6ZWQgVVVJRC5cbnZhciBTRVJJQUxJWkVEX1VVSUQgPSBBRERFRF9VTklDT0RFX1NNUDtcblxuZnVuY3Rpb24gaW5pdEFycmF5KCBsZW5ndGgsIHZhbHVlKSB7XG5cdHZhciB0bXAgPSBbXTtcblx0dG1wW2xlbmd0aC0xXSA9IHZhbHVlO1xuXHRyZXR1cm4gdG1wLm1hcChmdW5jdGlvbihpKSB7cmV0dXJuIHZhbHVlO30pO1xufVxuXG5mdW5jdGlvbiBBVE5EZXNlcmlhbGl6ZXIgKG9wdGlvbnMpIHtcblxuICAgIGlmICggb3B0aW9ucz09PSB1bmRlZmluZWQgfHwgb3B0aW9ucyA9PT0gbnVsbCApIHtcbiAgICAgICAgb3B0aW9ucyA9IEFUTkRlc2VyaWFsaXphdGlvbk9wdGlvbnMuZGVmYXVsdE9wdGlvbnM7XG4gICAgfVxuICAgIHRoaXMuZGVzZXJpYWxpemF0aW9uT3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5zdGF0ZUZhY3RvcmllcyA9IG51bGw7XG4gICAgdGhpcy5hY3Rpb25GYWN0b3JpZXMgPSBudWxsO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbi8vIERldGVybWluZXMgaWYgYSBwYXJ0aWN1bGFyIHNlcmlhbGl6ZWQgcmVwcmVzZW50YXRpb24gb2YgYW4gQVROIHN1cHBvcnRzXG4vLyBhIHBhcnRpY3VsYXIgZmVhdHVyZSwgaWRlbnRpZmllZCBieSB0aGUge0BsaW5rIFVVSUR9IHVzZWQgZm9yIHNlcmlhbGl6aW5nXG4vLyB0aGUgQVROIGF0IHRoZSB0aW1lIHRoZSBmZWF0dXJlIHdhcyBmaXJzdCBpbnRyb2R1Y2VkLlxuLy9cbi8vIEBwYXJhbSBmZWF0dXJlIFRoZSB7QGxpbmsgVVVJRH0gbWFya2luZyB0aGUgZmlyc3QgdGltZSB0aGUgZmVhdHVyZSB3YXNcbi8vIHN1cHBvcnRlZCBpbiB0aGUgc2VyaWFsaXplZCBBVE4uXG4vLyBAcGFyYW0gYWN0dWFsVXVpZCBUaGUge0BsaW5rIFVVSUR9IG9mIHRoZSBhY3R1YWwgc2VyaWFsaXplZCBBVE4gd2hpY2ggaXNcbi8vIGN1cnJlbnRseSBiZWluZyBkZXNlcmlhbGl6ZWQuXG4vLyBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiB0aGUge0Bjb2RlIGFjdHVhbFV1aWR9IHZhbHVlIHJlcHJlc2VudHMgYVxuLy8gc2VyaWFsaXplZCBBVE4gYXQgb3IgYWZ0ZXIgdGhlIGZlYXR1cmUgaWRlbnRpZmllZCBieSB7QGNvZGUgZmVhdHVyZX0gd2FzXG4vLyBpbnRyb2R1Y2VkOyBvdGhlcndpc2UsIHtAY29kZSBmYWxzZX0uXG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUuaXNGZWF0dXJlU3VwcG9ydGVkID0gZnVuY3Rpb24oZmVhdHVyZSwgYWN0dWFsVXVpZCkge1xuICAgIHZhciBpZHgxID0gU1VQUE9SVEVEX1VVSURTLmluZGV4T2YoZmVhdHVyZSk7XG4gICAgaWYgKGlkeDE8MCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHZhciBpZHgyID0gU1VQUE9SVEVEX1VVSURTLmluZGV4T2YoYWN0dWFsVXVpZCk7XG4gICAgcmV0dXJuIGlkeDIgPj0gaWR4MTtcbn07XG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUuZGVzZXJpYWxpemUgPSBmdW5jdGlvbihkYXRhKSB7XG4gICAgdGhpcy5yZXNldChkYXRhKTtcbiAgICB0aGlzLmNoZWNrVmVyc2lvbigpO1xuICAgIHRoaXMuY2hlY2tVVUlEKCk7XG4gICAgdmFyIGF0biA9IHRoaXMucmVhZEFUTigpO1xuICAgIHRoaXMucmVhZFN0YXRlcyhhdG4pO1xuICAgIHRoaXMucmVhZFJ1bGVzKGF0bik7XG4gICAgdGhpcy5yZWFkTW9kZXMoYXRuKTtcbiAgICB2YXIgc2V0cyA9IFtdO1xuICAgIC8vIEZpcnN0LCBkZXNlcmlhbGl6ZSBzZXRzIHdpdGggMTYtYml0IGFyZ3VtZW50cyA8PSBVK0ZGRkYuXG4gICAgdGhpcy5yZWFkU2V0cyhhdG4sIHNldHMsIHRoaXMucmVhZEludC5iaW5kKHRoaXMpKTtcbiAgICAvLyBOZXh0LCBpZiB0aGUgQVROIHdhcyBzZXJpYWxpemVkIHdpdGggdGhlIFVuaWNvZGUgU01QIGZlYXR1cmUsXG4gICAgLy8gZGVzZXJpYWxpemUgc2V0cyB3aXRoIDMyLWJpdCBhcmd1bWVudHMgPD0gVSsxMEZGRkYuXG4gICAgaWYgKHRoaXMuaXNGZWF0dXJlU3VwcG9ydGVkKEFEREVEX1VOSUNPREVfU01QLCB0aGlzLnV1aWQpKSB7XG4gICAgICAgIHRoaXMucmVhZFNldHMoYXRuLCBzZXRzLCB0aGlzLnJlYWRJbnQzMi5iaW5kKHRoaXMpKTtcbiAgICB9XG4gICAgdGhpcy5yZWFkRWRnZXMoYXRuLCBzZXRzKTtcbiAgICB0aGlzLnJlYWREZWNpc2lvbnMoYXRuKTtcbiAgICB0aGlzLnJlYWRMZXhlckFjdGlvbnMoYXRuKTtcbiAgICB0aGlzLm1hcmtQcmVjZWRlbmNlRGVjaXNpb25zKGF0bik7XG4gICAgdGhpcy52ZXJpZnlBVE4oYXRuKTtcbiAgICBpZiAodGhpcy5kZXNlcmlhbGl6YXRpb25PcHRpb25zLmdlbmVyYXRlUnVsZUJ5cGFzc1RyYW5zaXRpb25zICYmIGF0bi5ncmFtbWFyVHlwZSA9PT0gQVROVHlwZS5QQVJTRVIgKSB7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVSdWxlQnlwYXNzVHJhbnNpdGlvbnMoYXRuKTtcbiAgICAgICAgLy8gcmUtdmVyaWZ5IGFmdGVyIG1vZGlmaWNhdGlvblxuICAgICAgICB0aGlzLnZlcmlmeUFUTihhdG4pO1xuICAgIH1cbiAgICByZXR1cm4gYXRuO1xufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKGRhdGEpIHtcblx0dmFyIGFkanVzdCA9IGZ1bmN0aW9uKGMpIHtcbiAgICAgICAgdmFyIHYgPSBjLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgIHJldHVybiB2PjEgID8gdi0yIDogdiArIDY1NTMzO1xuXHR9O1xuICAgIHZhciB0ZW1wID0gZGF0YS5zcGxpdChcIlwiKS5tYXAoYWRqdXN0KTtcbiAgICAvLyBkb24ndCBhZGp1c3QgdGhlIGZpcnN0IHZhbHVlIHNpbmNlIHRoYXQncyB0aGUgdmVyc2lvbiBudW1iZXJcbiAgICB0ZW1wWzBdID0gZGF0YS5jaGFyQ29kZUF0KDApO1xuICAgIHRoaXMuZGF0YSA9IHRlbXA7XG4gICAgdGhpcy5wb3MgPSAwO1xufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5jaGVja1ZlcnNpb24gPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgdmVyc2lvbiA9IHRoaXMucmVhZEludCgpO1xuICAgIGlmICggdmVyc2lvbiAhPT0gU0VSSUFMSVpFRF9WRVJTSU9OICkge1xuICAgICAgICB0aHJvdyAoXCJDb3VsZCBub3QgZGVzZXJpYWxpemUgQVROIHdpdGggdmVyc2lvbiBcIiArIHZlcnNpb24gKyBcIiAoZXhwZWN0ZWQgXCIgKyBTRVJJQUxJWkVEX1ZFUlNJT04gKyBcIikuXCIpO1xuICAgIH1cbn07XG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUuY2hlY2tVVUlEID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHV1aWQgPSB0aGlzLnJlYWRVVUlEKCk7XG4gICAgaWYgKFNVUFBPUlRFRF9VVUlEUy5pbmRleE9mKHV1aWQpPDApIHtcbiAgICAgICAgdGhyb3cgKFwiQ291bGQgbm90IGRlc2VyaWFsaXplIEFUTiB3aXRoIFVVSUQ6IFwiICsgdXVpZCArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiAoZXhwZWN0ZWQgXCIgKyBTRVJJQUxJWkVEX1VVSUQgKyBcIiBvciBhIGxlZ2FjeSBVVUlEKS5cIiwgdXVpZCwgU0VSSUFMSVpFRF9VVUlEKTtcbiAgICB9XG4gICAgdGhpcy51dWlkID0gdXVpZDtcbn07XG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUucmVhZEFUTiA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBncmFtbWFyVHlwZSA9IHRoaXMucmVhZEludCgpO1xuICAgIHZhciBtYXhUb2tlblR5cGUgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICByZXR1cm4gbmV3IEFUTihncmFtbWFyVHlwZSwgbWF4VG9rZW5UeXBlKTtcbn07XG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUucmVhZFN0YXRlcyA9IGZ1bmN0aW9uKGF0bikge1xuXHR2YXIgaiwgcGFpciwgc3RhdGVOdW1iZXI7XG4gICAgdmFyIGxvb3BCYWNrU3RhdGVOdW1iZXJzID0gW107XG4gICAgdmFyIGVuZFN0YXRlTnVtYmVycyA9IFtdO1xuICAgIHZhciBuc3RhdGVzID0gdGhpcy5yZWFkSW50KCk7XG4gICAgZm9yKHZhciBpPTA7IGk8bnN0YXRlczsgaSsrKSB7XG4gICAgICAgIHZhciBzdHlwZSA9IHRoaXMucmVhZEludCgpO1xuICAgICAgICAvLyBpZ25vcmUgYmFkIHR5cGUgb2Ygc3RhdGVzXG4gICAgICAgIGlmIChzdHlwZT09PUFUTlN0YXRlLklOVkFMSURfVFlQRSkge1xuICAgICAgICAgICAgYXRuLmFkZFN0YXRlKG51bGwpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJ1bGVJbmRleCA9IHRoaXMucmVhZEludCgpO1xuICAgICAgICBpZiAocnVsZUluZGV4ID09PSAweEZGRkYpIHtcbiAgICAgICAgICAgIHJ1bGVJbmRleCA9IC0xO1xuICAgICAgICB9XG4gICAgICAgIHZhciBzID0gdGhpcy5zdGF0ZUZhY3Rvcnkoc3R5cGUsIHJ1bGVJbmRleCk7XG4gICAgICAgIGlmIChzdHlwZSA9PT0gQVROU3RhdGUuTE9PUF9FTkQpIHsgLy8gc3BlY2lhbCBjYXNlXG4gICAgICAgICAgICB2YXIgbG9vcEJhY2tTdGF0ZU51bWJlciA9IHRoaXMucmVhZEludCgpO1xuICAgICAgICAgICAgbG9vcEJhY2tTdGF0ZU51bWJlcnMucHVzaChbcywgbG9vcEJhY2tTdGF0ZU51bWJlcl0pO1xuICAgICAgICB9IGVsc2UgaWYocyBpbnN0YW5jZW9mIEJsb2NrU3RhcnRTdGF0ZSkge1xuICAgICAgICAgICAgdmFyIGVuZFN0YXRlTnVtYmVyID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgICAgICBlbmRTdGF0ZU51bWJlcnMucHVzaChbcywgZW5kU3RhdGVOdW1iZXJdKTtcbiAgICAgICAgfVxuICAgICAgICBhdG4uYWRkU3RhdGUocyk7XG4gICAgfVxuICAgIC8vIGRlbGF5IHRoZSBhc3NpZ25tZW50IG9mIGxvb3AgYmFjayBhbmQgZW5kIHN0YXRlcyB1bnRpbCB3ZSBrbm93IGFsbCB0aGVcblx0Ly8gc3RhdGUgaW5zdGFuY2VzIGhhdmUgYmVlbiBpbml0aWFsaXplZFxuICAgIGZvciAoaj0wOyBqPGxvb3BCYWNrU3RhdGVOdW1iZXJzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHBhaXIgPSBsb29wQmFja1N0YXRlTnVtYmVyc1tqXTtcbiAgICAgICAgcGFpclswXS5sb29wQmFja1N0YXRlID0gYXRuLnN0YXRlc1twYWlyWzFdXTtcbiAgICB9XG5cbiAgICBmb3IgKGo9MDsgajxlbmRTdGF0ZU51bWJlcnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgcGFpciA9IGVuZFN0YXRlTnVtYmVyc1tqXTtcbiAgICAgICAgcGFpclswXS5lbmRTdGF0ZSA9IGF0bi5zdGF0ZXNbcGFpclsxXV07XG4gICAgfVxuXG4gICAgdmFyIG51bU5vbkdyZWVkeVN0YXRlcyA9IHRoaXMucmVhZEludCgpO1xuICAgIGZvciAoaj0wOyBqPG51bU5vbkdyZWVkeVN0YXRlczsgaisrKSB7XG4gICAgICAgIHN0YXRlTnVtYmVyID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgIGF0bi5zdGF0ZXNbc3RhdGVOdW1iZXJdLm5vbkdyZWVkeSA9IHRydWU7XG4gICAgfVxuXG4gICAgdmFyIG51bVByZWNlZGVuY2VTdGF0ZXMgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICBmb3IgKGo9MDsgajxudW1QcmVjZWRlbmNlU3RhdGVzOyBqKyspIHtcbiAgICAgICAgc3RhdGVOdW1iZXIgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICAgICAgYXRuLnN0YXRlc1tzdGF0ZU51bWJlcl0uaXNQcmVjZWRlbmNlUnVsZSA9IHRydWU7XG4gICAgfVxufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5yZWFkUnVsZXMgPSBmdW5jdGlvbihhdG4pIHtcbiAgICB2YXIgaTtcbiAgICB2YXIgbnJ1bGVzID0gdGhpcy5yZWFkSW50KCk7XG4gICAgaWYgKGF0bi5ncmFtbWFyVHlwZSA9PT0gQVROVHlwZS5MRVhFUiApIHtcbiAgICAgICAgYXRuLnJ1bGVUb1Rva2VuVHlwZSA9IGluaXRBcnJheShucnVsZXMsIDApO1xuICAgIH1cbiAgICBhdG4ucnVsZVRvU3RhcnRTdGF0ZSA9IGluaXRBcnJheShucnVsZXMsIDApO1xuICAgIGZvciAoaT0wOyBpPG5ydWxlczsgaSsrKSB7XG4gICAgICAgIHZhciBzID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgIHZhciBzdGFydFN0YXRlID0gYXRuLnN0YXRlc1tzXTtcbiAgICAgICAgYXRuLnJ1bGVUb1N0YXJ0U3RhdGVbaV0gPSBzdGFydFN0YXRlO1xuICAgICAgICBpZiAoIGF0bi5ncmFtbWFyVHlwZSA9PT0gQVROVHlwZS5MRVhFUiApIHtcbiAgICAgICAgICAgIHZhciB0b2tlblR5cGUgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICAgICAgICAgIGlmICh0b2tlblR5cGUgPT09IDB4RkZGRikge1xuICAgICAgICAgICAgICAgIHRva2VuVHlwZSA9IFRva2VuLkVPRjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF0bi5ydWxlVG9Ub2tlblR5cGVbaV0gPSB0b2tlblR5cGU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXRuLnJ1bGVUb1N0b3BTdGF0ZSA9IGluaXRBcnJheShucnVsZXMsIDApO1xuICAgIGZvciAoaT0wOyBpPGF0bi5zdGF0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHN0YXRlID0gYXRuLnN0YXRlc1tpXTtcbiAgICAgICAgaWYgKCEoc3RhdGUgaW5zdGFuY2VvZiBSdWxlU3RvcFN0YXRlKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgYXRuLnJ1bGVUb1N0b3BTdGF0ZVtzdGF0ZS5ydWxlSW5kZXhdID0gc3RhdGU7XG4gICAgICAgIGF0bi5ydWxlVG9TdGFydFN0YXRlW3N0YXRlLnJ1bGVJbmRleF0uc3RvcFN0YXRlID0gc3RhdGU7XG4gICAgfVxufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5yZWFkTW9kZXMgPSBmdW5jdGlvbihhdG4pIHtcbiAgICB2YXIgbm1vZGVzID0gdGhpcy5yZWFkSW50KCk7XG4gICAgZm9yICh2YXIgaT0wOyBpPG5tb2RlczsgaSsrKSB7XG4gICAgICAgIHZhciBzID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgIGF0bi5tb2RlVG9TdGFydFN0YXRlLnB1c2goYXRuLnN0YXRlc1tzXSk7XG4gICAgfVxufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5yZWFkU2V0cyA9IGZ1bmN0aW9uKGF0biwgc2V0cywgcmVhZFVuaWNvZGUpIHtcbiAgICB2YXIgbSA9IHRoaXMucmVhZEludCgpO1xuICAgIGZvciAodmFyIGk9MDsgaTxtOyBpKyspIHtcbiAgICAgICAgdmFyIGlzZXQgPSBuZXcgSW50ZXJ2YWxTZXQoKTtcbiAgICAgICAgc2V0cy5wdXNoKGlzZXQpO1xuICAgICAgICB2YXIgbiA9IHRoaXMucmVhZEludCgpO1xuICAgICAgICB2YXIgY29udGFpbnNFb2YgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICAgICAgaWYgKGNvbnRhaW5zRW9mIT09MCkge1xuICAgICAgICAgICAgaXNldC5hZGRPbmUoLTEpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGo9MDsgajxuOyBqKyspIHtcbiAgICAgICAgICAgIHZhciBpMSA9IHJlYWRVbmljb2RlKCk7XG4gICAgICAgICAgICB2YXIgaTIgPSByZWFkVW5pY29kZSgpO1xuICAgICAgICAgICAgaXNldC5hZGRSYW5nZShpMSwgaTIpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5yZWFkRWRnZXMgPSBmdW5jdGlvbihhdG4sIHNldHMpIHtcblx0dmFyIGksIGosIHN0YXRlLCB0cmFucywgdGFyZ2V0O1xuICAgIHZhciBuZWRnZXMgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICBmb3IgKGk9MDsgaTxuZWRnZXM7IGkrKykge1xuICAgICAgICB2YXIgc3JjID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgIHZhciB0cmcgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICAgICAgdmFyIHR0eXBlID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgIHZhciBhcmcxID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgIHZhciBhcmcyID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgIHZhciBhcmczID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgIHRyYW5zID0gdGhpcy5lZGdlRmFjdG9yeShhdG4sIHR0eXBlLCBzcmMsIHRyZywgYXJnMSwgYXJnMiwgYXJnMywgc2V0cyk7XG4gICAgICAgIHZhciBzcmNTdGF0ZSA9IGF0bi5zdGF0ZXNbc3JjXTtcbiAgICAgICAgc3JjU3RhdGUuYWRkVHJhbnNpdGlvbih0cmFucyk7XG4gICAgfVxuICAgIC8vIGVkZ2VzIGZvciBydWxlIHN0b3Agc3RhdGVzIGNhbiBiZSBkZXJpdmVkLCBzbyB0aGV5IGFyZW4ndCBzZXJpYWxpemVkXG4gICAgZm9yIChpPTA7IGk8YXRuLnN0YXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBzdGF0ZSA9IGF0bi5zdGF0ZXNbaV07XG4gICAgICAgIGZvciAoaj0wOyBqPHN0YXRlLnRyYW5zaXRpb25zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICB2YXIgdCA9IHN0YXRlLnRyYW5zaXRpb25zW2pdO1xuICAgICAgICAgICAgaWYgKCEodCBpbnN0YW5jZW9mIFJ1bGVUcmFuc2l0aW9uKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXHRcdFx0dmFyIG91dGVybW9zdFByZWNlZGVuY2VSZXR1cm4gPSAtMTtcblx0XHRcdGlmIChhdG4ucnVsZVRvU3RhcnRTdGF0ZVt0LnRhcmdldC5ydWxlSW5kZXhdLmlzUHJlY2VkZW5jZVJ1bGUpIHtcblx0XHRcdFx0aWYgKHQucHJlY2VkZW5jZSA9PT0gMCkge1xuXHRcdFx0XHRcdG91dGVybW9zdFByZWNlZGVuY2VSZXR1cm4gPSB0LnRhcmdldC5ydWxlSW5kZXg7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0dHJhbnMgPSBuZXcgRXBzaWxvblRyYW5zaXRpb24odC5mb2xsb3dTdGF0ZSwgb3V0ZXJtb3N0UHJlY2VkZW5jZVJldHVybik7XG4gICAgICAgICAgICBhdG4ucnVsZVRvU3RvcFN0YXRlW3QudGFyZ2V0LnJ1bGVJbmRleF0uYWRkVHJhbnNpdGlvbih0cmFucyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGk9MDsgaTxhdG4uc3RhdGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHN0YXRlID0gYXRuLnN0YXRlc1tpXTtcbiAgICAgICAgaWYgKHN0YXRlIGluc3RhbmNlb2YgQmxvY2tTdGFydFN0YXRlKSB7XG4gICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIGtub3cgdGhlIGVuZCBzdGF0ZSB0byBzZXQgaXRzIHN0YXJ0IHN0YXRlXG4gICAgICAgICAgICBpZiAoc3RhdGUuZW5kU3RhdGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyAoXCJJbGxlZ2FsU3RhdGVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBibG9jayBlbmQgc3RhdGVzIGNhbiBvbmx5IGJlIGFzc29jaWF0ZWQgdG8gYSBzaW5nbGUgYmxvY2sgc3RhcnRcblx0XHRcdC8vIHN0YXRlXG4gICAgICAgICAgICBpZiAoIHN0YXRlLmVuZFN0YXRlLnN0YXJ0U3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyAoXCJJbGxlZ2FsU3RhdGVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGF0ZS5lbmRTdGF0ZS5zdGFydFN0YXRlID0gc3RhdGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXRlIGluc3RhbmNlb2YgUGx1c0xvb3BiYWNrU3RhdGUpIHtcbiAgICAgICAgICAgIGZvciAoaj0wOyBqPHN0YXRlLnRyYW5zaXRpb25zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gc3RhdGUudHJhbnNpdGlvbnNbal0udGFyZ2V0O1xuICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBQbHVzQmxvY2tTdGFydFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5sb29wQmFja1N0YXRlID0gc3RhdGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHN0YXRlIGluc3RhbmNlb2YgU3Rhckxvb3BiYWNrU3RhdGUpIHtcbiAgICAgICAgICAgIGZvciAoaj0wOyBqPHN0YXRlLnRyYW5zaXRpb25zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gc3RhdGUudHJhbnNpdGlvbnNbal0udGFyZ2V0O1xuICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBTdGFyTG9vcEVudHJ5U3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0Lmxvb3BCYWNrU3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5BVE5EZXNlcmlhbGl6ZXIucHJvdG90eXBlLnJlYWREZWNpc2lvbnMgPSBmdW5jdGlvbihhdG4pIHtcbiAgICB2YXIgbmRlY2lzaW9ucyA9IHRoaXMucmVhZEludCgpO1xuICAgIGZvciAodmFyIGk9MDsgaTxuZGVjaXNpb25zOyBpKyspIHtcbiAgICAgICAgdmFyIHMgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICAgICAgdmFyIGRlY1N0YXRlID0gYXRuLnN0YXRlc1tzXTtcbiAgICAgICAgYXRuLmRlY2lzaW9uVG9TdGF0ZS5wdXNoKGRlY1N0YXRlKTtcbiAgICAgICAgZGVjU3RhdGUuZGVjaXNpb24gPSBpO1xuICAgIH1cbn07XG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUucmVhZExleGVyQWN0aW9ucyA9IGZ1bmN0aW9uKGF0bikge1xuICAgIGlmIChhdG4uZ3JhbW1hclR5cGUgPT09IEFUTlR5cGUuTEVYRVIpIHtcbiAgICAgICAgdmFyIGNvdW50ID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgIGF0bi5sZXhlckFjdGlvbnMgPSBpbml0QXJyYXkoY291bnQsIG51bGwpO1xuICAgICAgICBmb3IgKHZhciBpPTA7IGk8Y291bnQ7IGkrKykge1xuICAgICAgICAgICAgdmFyIGFjdGlvblR5cGUgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICAgICAgICAgIHZhciBkYXRhMSA9IHRoaXMucmVhZEludCgpO1xuICAgICAgICAgICAgaWYgKGRhdGExID09PSAweEZGRkYpIHtcbiAgICAgICAgICAgICAgICBkYXRhMSA9IC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGRhdGEyID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgICAgICBpZiAoZGF0YTIgPT09IDB4RkZGRikge1xuICAgICAgICAgICAgICAgIGRhdGEyID0gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgbGV4ZXJBY3Rpb24gPSB0aGlzLmxleGVyQWN0aW9uRmFjdG9yeShhY3Rpb25UeXBlLCBkYXRhMSwgZGF0YTIpO1xuICAgICAgICAgICAgYXRuLmxleGVyQWN0aW9uc1tpXSA9IGxleGVyQWN0aW9uO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5nZW5lcmF0ZVJ1bGVCeXBhc3NUcmFuc2l0aW9ucyA9IGZ1bmN0aW9uKGF0bikge1xuXHR2YXIgaTtcbiAgICB2YXIgY291bnQgPSBhdG4ucnVsZVRvU3RhcnRTdGF0ZS5sZW5ndGg7XG4gICAgZm9yKGk9MDsgaTxjb3VudDsgaSsrKSB7XG4gICAgICAgIGF0bi5ydWxlVG9Ub2tlblR5cGVbaV0gPSBhdG4ubWF4VG9rZW5UeXBlICsgaSArIDE7XG4gICAgfVxuICAgIGZvcihpPTA7IGk8Y291bnQ7IGkrKykge1xuICAgICAgICB0aGlzLmdlbmVyYXRlUnVsZUJ5cGFzc1RyYW5zaXRpb24oYXRuLCBpKTtcbiAgICB9XG59O1xuXG5BVE5EZXNlcmlhbGl6ZXIucHJvdG90eXBlLmdlbmVyYXRlUnVsZUJ5cGFzc1RyYW5zaXRpb24gPSBmdW5jdGlvbihhdG4sIGlkeCkge1xuXHR2YXIgaSwgc3RhdGU7XG4gICAgdmFyIGJ5cGFzc1N0YXJ0ID0gbmV3IEJhc2ljQmxvY2tTdGFydFN0YXRlKCk7XG4gICAgYnlwYXNzU3RhcnQucnVsZUluZGV4ID0gaWR4O1xuICAgIGF0bi5hZGRTdGF0ZShieXBhc3NTdGFydCk7XG5cbiAgICB2YXIgYnlwYXNzU3RvcCA9IG5ldyBCbG9ja0VuZFN0YXRlKCk7XG4gICAgYnlwYXNzU3RvcC5ydWxlSW5kZXggPSBpZHg7XG4gICAgYXRuLmFkZFN0YXRlKGJ5cGFzc1N0b3ApO1xuXG4gICAgYnlwYXNzU3RhcnQuZW5kU3RhdGUgPSBieXBhc3NTdG9wO1xuICAgIGF0bi5kZWZpbmVEZWNpc2lvblN0YXRlKGJ5cGFzc1N0YXJ0KTtcblxuICAgIGJ5cGFzc1N0b3Auc3RhcnRTdGF0ZSA9IGJ5cGFzc1N0YXJ0O1xuXG4gICAgdmFyIGV4Y2x1ZGVUcmFuc2l0aW9uID0gbnVsbDtcbiAgICB2YXIgZW5kU3RhdGUgPSBudWxsO1xuXG4gICAgaWYgKGF0bi5ydWxlVG9TdGFydFN0YXRlW2lkeF0uaXNQcmVjZWRlbmNlUnVsZSkge1xuICAgICAgICAvLyB3cmFwIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgcnVsZSB0byB0aGUgU3Rhckxvb3BFbnRyeVN0YXRlXG4gICAgICAgIGVuZFN0YXRlID0gbnVsbDtcbiAgICAgICAgZm9yKGk9MDsgaTxhdG4uc3RhdGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IGF0bi5zdGF0ZXNbaV07XG4gICAgICAgICAgICBpZiAodGhpcy5zdGF0ZUlzRW5kU3RhdGVGb3Ioc3RhdGUsIGlkeCkpIHtcbiAgICAgICAgICAgICAgICBlbmRTdGF0ZSA9IHN0YXRlO1xuICAgICAgICAgICAgICAgIGV4Y2x1ZGVUcmFuc2l0aW9uID0gc3RhdGUubG9vcEJhY2tTdGF0ZS50cmFuc2l0aW9uc1swXTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZXhjbHVkZVRyYW5zaXRpb24gPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IChcIkNvdWxkbid0IGlkZW50aWZ5IGZpbmFsIHN0YXRlIG9mIHRoZSBwcmVjZWRlbmNlIHJ1bGUgcHJlZml4IHNlY3Rpb24uXCIpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZW5kU3RhdGUgPSBhdG4ucnVsZVRvU3RvcFN0YXRlW2lkeF07XG4gICAgfVxuXG4gICAgLy8gYWxsIG5vbi1leGNsdWRlZCB0cmFuc2l0aW9ucyB0aGF0IGN1cnJlbnRseSB0YXJnZXQgZW5kIHN0YXRlIG5lZWQgdG9cblx0Ly8gdGFyZ2V0IGJsb2NrRW5kIGluc3RlYWRcbiAgICBmb3IoaT0wOyBpPGF0bi5zdGF0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgc3RhdGUgPSBhdG4uc3RhdGVzW2ldO1xuICAgICAgICBmb3IodmFyIGo9MDsgajxzdGF0ZS50cmFuc2l0aW9ucy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgdmFyIHRyYW5zaXRpb24gPSBzdGF0ZS50cmFuc2l0aW9uc1tqXTtcbiAgICAgICAgICAgIGlmICh0cmFuc2l0aW9uID09PSBleGNsdWRlVHJhbnNpdGlvbikge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRyYW5zaXRpb24udGFyZ2V0ID09PSBlbmRTdGF0ZSkge1xuICAgICAgICAgICAgICAgIHRyYW5zaXRpb24udGFyZ2V0ID0gYnlwYXNzU3RvcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGFsbCB0cmFuc2l0aW9ucyBsZWF2aW5nIHRoZSBydWxlIHN0YXJ0IHN0YXRlIG5lZWQgdG8gbGVhdmUgYmxvY2tTdGFydFxuXHQvLyBpbnN0ZWFkXG4gICAgdmFyIHJ1bGVUb1N0YXJ0U3RhdGUgPSBhdG4ucnVsZVRvU3RhcnRTdGF0ZVtpZHhdO1xuICAgIHZhciBjb3VudCA9IHJ1bGVUb1N0YXJ0U3RhdGUudHJhbnNpdGlvbnMubGVuZ3RoO1xuICAgIHdoaWxlICggY291bnQgPiAwKSB7XG4gICAgICAgIGJ5cGFzc1N0YXJ0LmFkZFRyYW5zaXRpb24ocnVsZVRvU3RhcnRTdGF0ZS50cmFuc2l0aW9uc1tjb3VudC0xXSk7XG4gICAgICAgIHJ1bGVUb1N0YXJ0U3RhdGUudHJhbnNpdGlvbnMgPSBydWxlVG9TdGFydFN0YXRlLnRyYW5zaXRpb25zLnNsaWNlKC0xKTtcbiAgICB9XG4gICAgLy8gbGluayB0aGUgbmV3IHN0YXRlc1xuICAgIGF0bi5ydWxlVG9TdGFydFN0YXRlW2lkeF0uYWRkVHJhbnNpdGlvbihuZXcgRXBzaWxvblRyYW5zaXRpb24oYnlwYXNzU3RhcnQpKTtcbiAgICBieXBhc3NTdG9wLmFkZFRyYW5zaXRpb24obmV3IEVwc2lsb25UcmFuc2l0aW9uKGVuZFN0YXRlKSk7XG5cbiAgICB2YXIgbWF0Y2hTdGF0ZSA9IG5ldyBCYXNpY1N0YXRlKCk7XG4gICAgYXRuLmFkZFN0YXRlKG1hdGNoU3RhdGUpO1xuICAgIG1hdGNoU3RhdGUuYWRkVHJhbnNpdGlvbihuZXcgQXRvbVRyYW5zaXRpb24oYnlwYXNzU3RvcCwgYXRuLnJ1bGVUb1Rva2VuVHlwZVtpZHhdKSk7XG4gICAgYnlwYXNzU3RhcnQuYWRkVHJhbnNpdGlvbihuZXcgRXBzaWxvblRyYW5zaXRpb24obWF0Y2hTdGF0ZSkpO1xufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5zdGF0ZUlzRW5kU3RhdGVGb3IgPSBmdW5jdGlvbihzdGF0ZSwgaWR4KSB7XG4gICAgaWYgKCBzdGF0ZS5ydWxlSW5kZXggIT09IGlkeCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKCEoIHN0YXRlIGluc3RhbmNlb2YgU3Rhckxvb3BFbnRyeVN0YXRlKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdmFyIG1heWJlTG9vcEVuZFN0YXRlID0gc3RhdGUudHJhbnNpdGlvbnNbc3RhdGUudHJhbnNpdGlvbnMubGVuZ3RoIC0gMV0udGFyZ2V0O1xuICAgIGlmICghKCBtYXliZUxvb3BFbmRTdGF0ZSBpbnN0YW5jZW9mIExvb3BFbmRTdGF0ZSkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChtYXliZUxvb3BFbmRTdGF0ZS5lcHNpbG9uT25seVRyYW5zaXRpb25zICYmXG4gICAgICAgIChtYXliZUxvb3BFbmRTdGF0ZS50cmFuc2l0aW9uc1swXS50YXJnZXQgaW5zdGFuY2VvZiBSdWxlU3RvcFN0YXRlKSkge1xuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufTtcblxuLy9cbi8vIEFuYWx5emUgdGhlIHtAbGluayBTdGFyTG9vcEVudHJ5U3RhdGV9IHN0YXRlcyBpbiB0aGUgc3BlY2lmaWVkIEFUTiB0byBzZXRcbi8vIHRoZSB7QGxpbmsgU3Rhckxvb3BFbnRyeVN0YXRlLy9pc1ByZWNlZGVuY2VEZWNpc2lvbn0gZmllbGQgdG8gdGhlXG4vLyBjb3JyZWN0IHZhbHVlLlxuLy9cbi8vIEBwYXJhbSBhdG4gVGhlIEFUTi5cbi8vXG5BVE5EZXNlcmlhbGl6ZXIucHJvdG90eXBlLm1hcmtQcmVjZWRlbmNlRGVjaXNpb25zID0gZnVuY3Rpb24oYXRuKSB7XG5cdGZvcih2YXIgaT0wOyBpPGF0bi5zdGF0ZXMubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgc3RhdGUgPSBhdG4uc3RhdGVzW2ldO1xuXHRcdGlmICghKCBzdGF0ZSBpbnN0YW5jZW9mIFN0YXJMb29wRW50cnlTdGF0ZSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIFdlIGFuYWx5emUgdGhlIEFUTiB0byBkZXRlcm1pbmUgaWYgdGhpcyBBVE4gZGVjaXNpb24gc3RhdGUgaXMgdGhlXG4gICAgICAgIC8vIGRlY2lzaW9uIGZvciB0aGUgY2xvc3VyZSBibG9jayB0aGF0IGRldGVybWluZXMgd2hldGhlciBhXG4gICAgICAgIC8vIHByZWNlZGVuY2UgcnVsZSBzaG91bGQgY29udGludWUgb3IgY29tcGxldGUuXG4gICAgICAgIC8vXG4gICAgICAgIGlmICggYXRuLnJ1bGVUb1N0YXJ0U3RhdGVbc3RhdGUucnVsZUluZGV4XS5pc1ByZWNlZGVuY2VSdWxlKSB7XG4gICAgICAgICAgICB2YXIgbWF5YmVMb29wRW5kU3RhdGUgPSBzdGF0ZS50cmFuc2l0aW9uc1tzdGF0ZS50cmFuc2l0aW9ucy5sZW5ndGggLSAxXS50YXJnZXQ7XG4gICAgICAgICAgICBpZiAobWF5YmVMb29wRW5kU3RhdGUgaW5zdGFuY2VvZiBMb29wRW5kU3RhdGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIG1heWJlTG9vcEVuZFN0YXRlLmVwc2lsb25Pbmx5VHJhbnNpdGlvbnMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIChtYXliZUxvb3BFbmRTdGF0ZS50cmFuc2l0aW9uc1swXS50YXJnZXQgaW5zdGFuY2VvZiBSdWxlU3RvcFN0YXRlKSkge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5pc1ByZWNlZGVuY2VEZWNpc2lvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cdH1cbn07XG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUudmVyaWZ5QVROID0gZnVuY3Rpb24oYXRuKSB7XG4gICAgaWYgKCF0aGlzLmRlc2VyaWFsaXphdGlvbk9wdGlvbnMudmVyaWZ5QVROKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gdmVyaWZ5IGFzc3VtcHRpb25zXG5cdGZvcih2YXIgaT0wOyBpPGF0bi5zdGF0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHN0YXRlID0gYXRuLnN0YXRlc1tpXTtcbiAgICAgICAgaWYgKHN0YXRlID09PSBudWxsKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoZWNrQ29uZGl0aW9uKHN0YXRlLmVwc2lsb25Pbmx5VHJhbnNpdGlvbnMgfHwgc3RhdGUudHJhbnNpdGlvbnMubGVuZ3RoIDw9IDEpO1xuICAgICAgICBpZiAoc3RhdGUgaW5zdGFuY2VvZiBQbHVzQmxvY2tTdGFydFN0YXRlKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrQ29uZGl0aW9uKHN0YXRlLmxvb3BCYWNrU3RhdGUgIT09IG51bGwpO1xuICAgICAgICB9IGVsc2UgIGlmIChzdGF0ZSBpbnN0YW5jZW9mIFN0YXJMb29wRW50cnlTdGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5jaGVja0NvbmRpdGlvbihzdGF0ZS5sb29wQmFja1N0YXRlICE9PSBudWxsKTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tDb25kaXRpb24oc3RhdGUudHJhbnNpdGlvbnMubGVuZ3RoID09PSAyKTtcbiAgICAgICAgICAgIGlmIChzdGF0ZS50cmFuc2l0aW9uc1swXS50YXJnZXQgaW5zdGFuY2VvZiBTdGFyQmxvY2tTdGFydFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja0NvbmRpdGlvbihzdGF0ZS50cmFuc2l0aW9uc1sxXS50YXJnZXQgaW5zdGFuY2VvZiBMb29wRW5kU3RhdGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tDb25kaXRpb24oIXN0YXRlLm5vbkdyZWVkeSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLnRyYW5zaXRpb25zWzBdLnRhcmdldCBpbnN0YW5jZW9mIExvb3BFbmRTdGF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tDb25kaXRpb24oc3RhdGUudHJhbnNpdGlvbnNbMV0udGFyZ2V0IGluc3RhbmNlb2YgU3RhckJsb2NrU3RhcnRTdGF0ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja0NvbmRpdGlvbihzdGF0ZS5ub25HcmVlZHkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyhcIklsbGVnYWxTdGF0ZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSBpbnN0YW5jZW9mIFN0YXJMb29wYmFja1N0YXRlKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrQ29uZGl0aW9uKHN0YXRlLnRyYW5zaXRpb25zLmxlbmd0aCA9PT0gMSk7XG4gICAgICAgICAgICB0aGlzLmNoZWNrQ29uZGl0aW9uKHN0YXRlLnRyYW5zaXRpb25zWzBdLnRhcmdldCBpbnN0YW5jZW9mIFN0YXJMb29wRW50cnlTdGF0ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgaW5zdGFuY2VvZiBMb29wRW5kU3RhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tDb25kaXRpb24oc3RhdGUubG9vcEJhY2tTdGF0ZSAhPT0gbnVsbCk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgaW5zdGFuY2VvZiBSdWxlU3RhcnRTdGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5jaGVja0NvbmRpdGlvbihzdGF0ZS5zdG9wU3RhdGUgIT09IG51bGwpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXRlIGluc3RhbmNlb2YgQmxvY2tTdGFydFN0YXRlKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrQ29uZGl0aW9uKHN0YXRlLmVuZFN0YXRlICE9PSBudWxsKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSBpbnN0YW5jZW9mIEJsb2NrRW5kU3RhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tDb25kaXRpb24oc3RhdGUuc3RhcnRTdGF0ZSAhPT0gbnVsbCk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgaW5zdGFuY2VvZiBEZWNpc2lvblN0YXRlKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrQ29uZGl0aW9uKHN0YXRlLnRyYW5zaXRpb25zLmxlbmd0aCA8PSAxIHx8IHN0YXRlLmRlY2lzaW9uID49IDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jaGVja0NvbmRpdGlvbihzdGF0ZS50cmFuc2l0aW9ucy5sZW5ndGggPD0gMSB8fCAoc3RhdGUgaW5zdGFuY2VvZiBSdWxlU3RvcFN0YXRlKSk7XG4gICAgICAgIH1cblx0fVxufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5jaGVja0NvbmRpdGlvbiA9IGZ1bmN0aW9uKGNvbmRpdGlvbiwgbWVzc2FnZSkge1xuICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICAgIGlmIChtZXNzYWdlID09PSB1bmRlZmluZWQgfHwgbWVzc2FnZT09PW51bGwpIHtcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBcIklsbGVnYWxTdGF0ZVwiO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IChtZXNzYWdlKTtcbiAgICB9XG59O1xuXG5BVE5EZXNlcmlhbGl6ZXIucHJvdG90eXBlLnJlYWRJbnQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhW3RoaXMucG9zKytdO1xufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5yZWFkSW50MzIgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgbG93ID0gdGhpcy5yZWFkSW50KCk7XG4gICAgdmFyIGhpZ2ggPSB0aGlzLnJlYWRJbnQoKTtcbiAgICByZXR1cm4gbG93IHwgKGhpZ2ggPDwgMTYpO1xufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5yZWFkTG9uZyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBsb3cgPSB0aGlzLnJlYWRJbnQzMigpO1xuICAgIHZhciBoaWdoID0gdGhpcy5yZWFkSW50MzIoKTtcbiAgICByZXR1cm4gKGxvdyAmIDB4MDAwMDAwMDBGRkZGRkZGRikgfCAoaGlnaCA8PCAzMik7XG59O1xuXG5mdW5jdGlvbiBjcmVhdGVCeXRlVG9IZXgoKSB7XG5cdHZhciBidGggPSBbXTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuXHRcdGJ0aFtpXSA9IChpICsgMHgxMDApLnRvU3RyaW5nKDE2KS5zdWJzdHIoMSkudG9VcHBlckNhc2UoKTtcblx0fVxuXHRyZXR1cm4gYnRoO1xufVxuXG52YXIgYnl0ZVRvSGV4ID0gY3JlYXRlQnl0ZVRvSGV4KCk7XG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUucmVhZFVVSUQgPSBmdW5jdGlvbigpIHtcblx0dmFyIGJiID0gW107XG5cdGZvcih2YXIgaT03O2k+PTA7aS0tKSB7XG5cdFx0dmFyIGludCA9IHRoaXMucmVhZEludCgpO1xuXHRcdC8qIGpzaGludCBiaXR3aXNlOiBmYWxzZSAqL1xuXHRcdGJiWygyKmkpKzFdID0gaW50ICYgMHhGRjtcblx0XHRiYlsyKmldID0gKGludCA+PiA4KSAmIDB4RkY7XG5cdH1cbiAgICByZXR1cm4gYnl0ZVRvSGV4W2JiWzBdXSArIGJ5dGVUb0hleFtiYlsxXV0gK1xuICAgIGJ5dGVUb0hleFtiYlsyXV0gKyBieXRlVG9IZXhbYmJbM11dICsgJy0nICtcbiAgICBieXRlVG9IZXhbYmJbNF1dICsgYnl0ZVRvSGV4W2JiWzVdXSArICctJyArXG4gICAgYnl0ZVRvSGV4W2JiWzZdXSArIGJ5dGVUb0hleFtiYls3XV0gKyAnLScgK1xuICAgIGJ5dGVUb0hleFtiYls4XV0gKyBieXRlVG9IZXhbYmJbOV1dICsgJy0nICtcbiAgICBieXRlVG9IZXhbYmJbMTBdXSArIGJ5dGVUb0hleFtiYlsxMV1dICtcbiAgICBieXRlVG9IZXhbYmJbMTJdXSArIGJ5dGVUb0hleFtiYlsxM11dICtcbiAgICBieXRlVG9IZXhbYmJbMTRdXSArIGJ5dGVUb0hleFtiYlsxNV1dO1xufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5lZGdlRmFjdG9yeSA9IGZ1bmN0aW9uKGF0biwgdHlwZSwgc3JjLCB0cmcsIGFyZzEsIGFyZzIsIGFyZzMsIHNldHMpIHtcbiAgICB2YXIgdGFyZ2V0ID0gYXRuLnN0YXRlc1t0cmddO1xuICAgIHN3aXRjaCh0eXBlKSB7XG4gICAgY2FzZSBUcmFuc2l0aW9uLkVQU0lMT046XG4gICAgICAgIHJldHVybiBuZXcgRXBzaWxvblRyYW5zaXRpb24odGFyZ2V0KTtcbiAgICBjYXNlIFRyYW5zaXRpb24uUkFOR0U6XG4gICAgICAgIHJldHVybiBhcmczICE9PSAwID8gbmV3IFJhbmdlVHJhbnNpdGlvbih0YXJnZXQsIFRva2VuLkVPRiwgYXJnMikgOiBuZXcgUmFuZ2VUcmFuc2l0aW9uKHRhcmdldCwgYXJnMSwgYXJnMik7XG4gICAgY2FzZSBUcmFuc2l0aW9uLlJVTEU6XG4gICAgICAgIHJldHVybiBuZXcgUnVsZVRyYW5zaXRpb24oYXRuLnN0YXRlc1thcmcxXSwgYXJnMiwgYXJnMywgdGFyZ2V0KTtcbiAgICBjYXNlIFRyYW5zaXRpb24uUFJFRElDQVRFOlxuICAgICAgICByZXR1cm4gbmV3IFByZWRpY2F0ZVRyYW5zaXRpb24odGFyZ2V0LCBhcmcxLCBhcmcyLCBhcmczICE9PSAwKTtcbiAgICBjYXNlIFRyYW5zaXRpb24uUFJFQ0VERU5DRTpcbiAgICAgICAgcmV0dXJuIG5ldyBQcmVjZWRlbmNlUHJlZGljYXRlVHJhbnNpdGlvbih0YXJnZXQsIGFyZzEpO1xuICAgIGNhc2UgVHJhbnNpdGlvbi5BVE9NOlxuICAgICAgICByZXR1cm4gYXJnMyAhPT0gMCA/IG5ldyBBdG9tVHJhbnNpdGlvbih0YXJnZXQsIFRva2VuLkVPRikgOiBuZXcgQXRvbVRyYW5zaXRpb24odGFyZ2V0LCBhcmcxKTtcbiAgICBjYXNlIFRyYW5zaXRpb24uQUNUSU9OOlxuICAgICAgICByZXR1cm4gbmV3IEFjdGlvblRyYW5zaXRpb24odGFyZ2V0LCBhcmcxLCBhcmcyLCBhcmczICE9PSAwKTtcbiAgICBjYXNlIFRyYW5zaXRpb24uU0VUOlxuICAgICAgICByZXR1cm4gbmV3IFNldFRyYW5zaXRpb24odGFyZ2V0LCBzZXRzW2FyZzFdKTtcbiAgICBjYXNlIFRyYW5zaXRpb24uTk9UX1NFVDpcbiAgICAgICAgcmV0dXJuIG5ldyBOb3RTZXRUcmFuc2l0aW9uKHRhcmdldCwgc2V0c1thcmcxXSk7XG4gICAgY2FzZSBUcmFuc2l0aW9uLldJTERDQVJEOlxuICAgICAgICByZXR1cm4gbmV3IFdpbGRjYXJkVHJhbnNpdGlvbih0YXJnZXQpO1xuICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IFwiVGhlIHNwZWNpZmllZCB0cmFuc2l0aW9uIHR5cGU6IFwiICsgdHlwZSArIFwiIGlzIG5vdCB2YWxpZC5cIjtcbiAgICB9XG59O1xuXG5BVE5EZXNlcmlhbGl6ZXIucHJvdG90eXBlLnN0YXRlRmFjdG9yeSA9IGZ1bmN0aW9uKHR5cGUsIHJ1bGVJbmRleCkge1xuICAgIGlmICh0aGlzLnN0YXRlRmFjdG9yaWVzID09PSBudWxsKSB7XG4gICAgICAgIHZhciBzZiA9IFtdO1xuICAgICAgICBzZltBVE5TdGF0ZS5JTlZBTElEX1RZUEVdID0gbnVsbDtcbiAgICAgICAgc2ZbQVROU3RhdGUuQkFTSUNdID0gZnVuY3Rpb24oKSB7IHJldHVybiBuZXcgQmFzaWNTdGF0ZSgpOyB9O1xuICAgICAgICBzZltBVE5TdGF0ZS5SVUxFX1NUQVJUXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gbmV3IFJ1bGVTdGFydFN0YXRlKCk7IH07XG4gICAgICAgIHNmW0FUTlN0YXRlLkJMT0NLX1NUQVJUXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gbmV3IEJhc2ljQmxvY2tTdGFydFN0YXRlKCk7IH07XG4gICAgICAgIHNmW0FUTlN0YXRlLlBMVVNfQkxPQ0tfU1RBUlRdID0gZnVuY3Rpb24oKSB7IHJldHVybiBuZXcgUGx1c0Jsb2NrU3RhcnRTdGF0ZSgpOyB9O1xuICAgICAgICBzZltBVE5TdGF0ZS5TVEFSX0JMT0NLX1NUQVJUXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gbmV3IFN0YXJCbG9ja1N0YXJ0U3RhdGUoKTsgfTtcbiAgICAgICAgc2ZbQVROU3RhdGUuVE9LRU5fU1RBUlRdID0gZnVuY3Rpb24oKSB7IHJldHVybiBuZXcgVG9rZW5zU3RhcnRTdGF0ZSgpOyB9O1xuICAgICAgICBzZltBVE5TdGF0ZS5SVUxFX1NUT1BdID0gZnVuY3Rpb24oKSB7IHJldHVybiBuZXcgUnVsZVN0b3BTdGF0ZSgpOyB9O1xuICAgICAgICBzZltBVE5TdGF0ZS5CTE9DS19FTkRdID0gZnVuY3Rpb24oKSB7IHJldHVybiBuZXcgQmxvY2tFbmRTdGF0ZSgpOyB9O1xuICAgICAgICBzZltBVE5TdGF0ZS5TVEFSX0xPT1BfQkFDS10gPSBmdW5jdGlvbigpIHsgcmV0dXJuIG5ldyBTdGFyTG9vcGJhY2tTdGF0ZSgpOyB9O1xuICAgICAgICBzZltBVE5TdGF0ZS5TVEFSX0xPT1BfRU5UUlldID0gZnVuY3Rpb24oKSB7IHJldHVybiBuZXcgU3Rhckxvb3BFbnRyeVN0YXRlKCk7IH07XG4gICAgICAgIHNmW0FUTlN0YXRlLlBMVVNfTE9PUF9CQUNLXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gbmV3IFBsdXNMb29wYmFja1N0YXRlKCk7IH07XG4gICAgICAgIHNmW0FUTlN0YXRlLkxPT1BfRU5EXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gbmV3IExvb3BFbmRTdGF0ZSgpOyB9O1xuICAgICAgICB0aGlzLnN0YXRlRmFjdG9yaWVzID0gc2Y7XG4gICAgfVxuICAgIGlmICh0eXBlPnRoaXMuc3RhdGVGYWN0b3JpZXMubGVuZ3RoIHx8IHRoaXMuc3RhdGVGYWN0b3JpZXNbdHlwZV0gPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3coXCJUaGUgc3BlY2lmaWVkIHN0YXRlIHR5cGUgXCIgKyB0eXBlICsgXCIgaXMgbm90IHZhbGlkLlwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcyA9IHRoaXMuc3RhdGVGYWN0b3JpZXNbdHlwZV0oKTtcbiAgICAgICAgaWYgKHMhPT1udWxsKSB7XG4gICAgICAgICAgICBzLnJ1bGVJbmRleCA9IHJ1bGVJbmRleDtcbiAgICAgICAgICAgIHJldHVybiBzO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5sZXhlckFjdGlvbkZhY3RvcnkgPSBmdW5jdGlvbih0eXBlLCBkYXRhMSwgZGF0YTIpIHtcbiAgICBpZiAodGhpcy5hY3Rpb25GYWN0b3JpZXMgPT09IG51bGwpIHtcbiAgICAgICAgdmFyIGFmID0gW107XG4gICAgICAgIGFmW0xleGVyQWN0aW9uVHlwZS5DSEFOTkVMXSA9IGZ1bmN0aW9uKGRhdGExLCBkYXRhMikgeyByZXR1cm4gbmV3IExleGVyQ2hhbm5lbEFjdGlvbihkYXRhMSk7IH07XG4gICAgICAgIGFmW0xleGVyQWN0aW9uVHlwZS5DVVNUT01dID0gZnVuY3Rpb24oZGF0YTEsIGRhdGEyKSB7IHJldHVybiBuZXcgTGV4ZXJDdXN0b21BY3Rpb24oZGF0YTEsIGRhdGEyKTsgfTtcbiAgICAgICAgYWZbTGV4ZXJBY3Rpb25UeXBlLk1PREVdID0gZnVuY3Rpb24oZGF0YTEsIGRhdGEyKSB7IHJldHVybiBuZXcgTGV4ZXJNb2RlQWN0aW9uKGRhdGExKTsgfTtcbiAgICAgICAgYWZbTGV4ZXJBY3Rpb25UeXBlLk1PUkVdID0gZnVuY3Rpb24oZGF0YTEsIGRhdGEyKSB7IHJldHVybiBMZXhlck1vcmVBY3Rpb24uSU5TVEFOQ0U7IH07XG4gICAgICAgIGFmW0xleGVyQWN0aW9uVHlwZS5QT1BfTU9ERV0gPSBmdW5jdGlvbihkYXRhMSwgZGF0YTIpIHsgcmV0dXJuIExleGVyUG9wTW9kZUFjdGlvbi5JTlNUQU5DRTsgfTtcbiAgICAgICAgYWZbTGV4ZXJBY3Rpb25UeXBlLlBVU0hfTU9ERV0gPSBmdW5jdGlvbihkYXRhMSwgZGF0YTIpIHsgcmV0dXJuIG5ldyBMZXhlclB1c2hNb2RlQWN0aW9uKGRhdGExKTsgfTtcbiAgICAgICAgYWZbTGV4ZXJBY3Rpb25UeXBlLlNLSVBdID0gZnVuY3Rpb24oZGF0YTEsIGRhdGEyKSB7IHJldHVybiBMZXhlclNraXBBY3Rpb24uSU5TVEFOQ0U7IH07XG4gICAgICAgIGFmW0xleGVyQWN0aW9uVHlwZS5UWVBFXSA9IGZ1bmN0aW9uKGRhdGExLCBkYXRhMikgeyByZXR1cm4gbmV3IExleGVyVHlwZUFjdGlvbihkYXRhMSk7IH07XG4gICAgICAgIHRoaXMuYWN0aW9uRmFjdG9yaWVzID0gYWY7XG4gICAgfVxuICAgIGlmICh0eXBlPnRoaXMuYWN0aW9uRmFjdG9yaWVzLmxlbmd0aCB8fCB0aGlzLmFjdGlvbkZhY3Rvcmllc1t0eXBlXSA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyhcIlRoZSBzcGVjaWZpZWQgbGV4ZXIgYWN0aW9uIHR5cGUgXCIgKyB0eXBlICsgXCIgaXMgbm90IHZhbGlkLlwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3Rpb25GYWN0b3JpZXNbdHlwZV0oZGF0YTEsIGRhdGEyKTtcbiAgICB9XG59O1xuXG5cbmV4cG9ydHMuQVRORGVzZXJpYWxpemVyID0gQVRORGVzZXJpYWxpemVyOyIsIi8vXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vLy9cblxudmFyIERGQVN0YXRlID0gcmVxdWlyZSgnLi8uLi9kZmEvREZBU3RhdGUnKS5ERkFTdGF0ZTtcbnZhciBBVE5Db25maWdTZXQgPSByZXF1aXJlKCcuL0FUTkNvbmZpZ1NldCcpLkFUTkNvbmZpZ1NldDtcbnZhciBnZXRDYWNoZWRQcmVkaWN0aW9uQ29udGV4dCA9IHJlcXVpcmUoJy4vLi4vUHJlZGljdGlvbkNvbnRleHQnKS5nZXRDYWNoZWRQcmVkaWN0aW9uQ29udGV4dDtcblxuZnVuY3Rpb24gQVROU2ltdWxhdG9yKGF0biwgc2hhcmVkQ29udGV4dENhY2hlKSB7XG5cbiAgICAvLyBUaGUgY29udGV4dCBjYWNoZSBtYXBzIGFsbCBQcmVkaWN0aW9uQ29udGV4dCBvYmplY3RzIHRoYXQgYXJlID09XG4gICAgLy8gIHRvIGEgc2luZ2xlIGNhY2hlZCBjb3B5LiBUaGlzIGNhY2hlIGlzIHNoYXJlZCBhY3Jvc3MgYWxsIGNvbnRleHRzXG4gICAgLy8gIGluIGFsbCBBVE5Db25maWdzIGluIGFsbCBERkEgc3RhdGVzLiAgV2UgcmVidWlsZCBlYWNoIEFUTkNvbmZpZ1NldFxuICAgIC8vICB0byB1c2Ugb25seSBjYWNoZWQgbm9kZXMvZ3JhcGhzIGluIGFkZERGQVN0YXRlKCkuIFdlIGRvbid0IHdhbnQgdG9cbiAgICAvLyAgZmlsbCB0aGlzIGR1cmluZyBjbG9zdXJlKCkgc2luY2UgdGhlcmUgYXJlIGxvdHMgb2YgY29udGV4dHMgdGhhdFxuICAgIC8vICBwb3AgdXAgYnV0IGFyZSBub3QgdXNlZCBldmVyIGFnYWluLiBJdCBhbHNvIGdyZWF0bHkgc2xvd3MgZG93biBjbG9zdXJlKCkuXG4gICAgLy9cbiAgICAvLyAgPHA+VGhpcyBjYWNoZSBtYWtlcyBhIGh1Z2UgZGlmZmVyZW5jZSBpbiBtZW1vcnkgYW5kIGEgbGl0dGxlIGJpdCBpbiBzcGVlZC5cbiAgICAvLyAgRm9yIHRoZSBKYXZhIGdyYW1tYXIgb24gamF2YS4qLCBpdCBkcm9wcGVkIHRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzXG4gICAgLy8gIGF0IHRoZSBlbmQgZnJvbSAyNU0gdG8gMTZNLiBXZSBkb24ndCBzdG9yZSBhbnkgb2YgdGhlIGZ1bGwgY29udGV4dFxuICAgIC8vICBncmFwaHMgaW4gdGhlIERGQSBiZWNhdXNlIHRoZXkgYXJlIGxpbWl0ZWQgdG8gbG9jYWwgY29udGV4dCBvbmx5LFxuICAgIC8vICBidXQgYXBwYXJlbnRseSB0aGVyZSdzIGEgbG90IG9mIHJlcGV0aXRpb24gdGhlcmUgYXMgd2VsbC4gV2Ugb3B0aW1pemVcbiAgICAvLyAgdGhlIGNvbmZpZyBjb250ZXh0cyBiZWZvcmUgc3RvcmluZyB0aGUgY29uZmlnIHNldCBpbiB0aGUgREZBIHN0YXRlc1xuICAgIC8vICBieSBsaXRlcmFsbHkgcmVidWlsZGluZyB0aGVtIHdpdGggY2FjaGVkIHN1YmdyYXBocyBvbmx5LjwvcD5cbiAgICAvL1xuICAgIC8vICA8cD5JIHRyaWVkIGEgY2FjaGUgZm9yIHVzZSBkdXJpbmcgY2xvc3VyZSBvcGVyYXRpb25zLCB0aGF0IHdhc1xuICAgIC8vICB3aGFja2VkIGFmdGVyIGVhY2ggYWRhcHRpdmVQcmVkaWN0KCkuIEl0IGNvc3QgYSBsaXR0bGUgYml0XG4gICAgLy8gIG1vcmUgdGltZSBJIHRoaW5rIGFuZCBkb2Vzbid0IHNhdmUgb24gdGhlIG92ZXJhbGwgZm9vdHByaW50XG4gICAgLy8gIHNvIGl0J3Mgbm90IHdvcnRoIHRoZSBjb21wbGV4aXR5LjwvcD5cbiAgICAvLy9cbiAgICB0aGlzLmF0biA9IGF0bjtcbiAgICB0aGlzLnNoYXJlZENvbnRleHRDYWNoZSA9IHNoYXJlZENvbnRleHRDYWNoZTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuLy8gTXVzdCBkaXN0aW5ndWlzaCBiZXR3ZWVuIG1pc3NpbmcgZWRnZSBhbmQgZWRnZSB3ZSBrbm93IGxlYWRzIG5vd2hlcmUvLy9cbkFUTlNpbXVsYXRvci5FUlJPUiA9IG5ldyBERkFTdGF0ZSgweDdGRkZGRkZGLCBuZXcgQVROQ29uZmlnU2V0KCkpO1xuXG5cbkFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0Q2FjaGVkQ29udGV4dCA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICBpZiAodGhpcy5zaGFyZWRDb250ZXh0Q2FjaGUgPT09bnVsbCkge1xuICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICB9XG4gICAgdmFyIHZpc2l0ZWQgPSB7fTtcbiAgICByZXR1cm4gZ2V0Q2FjaGVkUHJlZGljdGlvbkNvbnRleHQoY29udGV4dCwgdGhpcy5zaGFyZWRDb250ZXh0Q2FjaGUsIHZpc2l0ZWQpO1xufTtcblxuZXhwb3J0cy5BVE5TaW11bGF0b3IgPSBBVE5TaW11bGF0b3I7XG4iLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy9cblxuLy8gVGhlIGZvbGxvd2luZyBpbWFnZXMgc2hvdyB0aGUgcmVsYXRpb24gb2Ygc3RhdGVzIGFuZFxuLy8ge0BsaW5rIEFUTlN0YXRlLy90cmFuc2l0aW9uc30gZm9yIHZhcmlvdXMgZ3JhbW1hciBjb25zdHJ1Y3RzLlxuLy9cbi8vIDx1bD5cbi8vXG4vLyA8bGk+U29saWQgZWRnZXMgbWFya2VkIHdpdGggYW4gJi8vMDk0OTsgaW5kaWNhdGUgYSByZXF1aXJlZFxuLy8ge0BsaW5rIEVwc2lsb25UcmFuc2l0aW9ufS48L2xpPlxuLy9cbi8vIDxsaT5EYXNoZWQgZWRnZXMgaW5kaWNhdGUgbG9jYXRpb25zIHdoZXJlIGFueSB0cmFuc2l0aW9uIGRlcml2ZWQgZnJvbVxuLy8ge0BsaW5rIFRyYW5zaXRpb259IG1pZ2h0IGFwcGVhci48L2xpPlxuLy9cbi8vIDxsaT5EYXNoZWQgbm9kZXMgYXJlIHBsYWNlIGhvbGRlcnMgZm9yIGVpdGhlciBhIHNlcXVlbmNlIG9mIGxpbmtlZFxuLy8ge0BsaW5rIEJhc2ljU3RhdGV9IHN0YXRlcyBvciB0aGUgaW5jbHVzaW9uIG9mIGEgYmxvY2sgcmVwcmVzZW50aW5nIGEgbmVzdGVkXG4vLyBjb25zdHJ1Y3QgaW4gb25lIG9mIHRoZSBmb3JtcyBiZWxvdy48L2xpPlxuLy9cbi8vIDxsaT5Ob2RlcyBzaG93aW5nIG11bHRpcGxlIG91dGdvaW5nIGFsdGVybmF0aXZlcyB3aXRoIGEge0Bjb2RlIC4uLn0gc3VwcG9ydFxuLy8gYW55IG51bWJlciBvZiBhbHRlcm5hdGl2ZXMgKG9uZSBvciBtb3JlKS4gTm9kZXMgd2l0aG91dCB0aGUge0Bjb2RlIC4uLn0gb25seVxuLy8gc3VwcG9ydCB0aGUgZXhhY3QgbnVtYmVyIG9mIGFsdGVybmF0aXZlcyBzaG93biBpbiB0aGUgZGlhZ3JhbS48L2xpPlxuLy9cbi8vIDwvdWw+XG4vL1xuLy8gPGgyPkJhc2ljIEJsb2NrczwvaDI+XG4vL1xuLy8gPGgzPlJ1bGU8L2gzPlxuLy9cbi8vIDxlbWJlZCBzcmM9XCJpbWFnZXMvUnVsZS5zdmdcIiB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz5cbi8vXG4vLyA8aDM+QmxvY2sgb2YgMSBvciBtb3JlIGFsdGVybmF0aXZlczwvaDM+XG4vL1xuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9CbG9jay5zdmdcIiB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz5cbi8vXG4vLyA8aDI+R3JlZWR5IExvb3BzPC9oMj5cbi8vXG4vLyA8aDM+R3JlZWR5IENsb3N1cmU6IHtAY29kZSAoLi4uKSp9PC9oMz5cbi8vXG4vLyA8ZW1iZWQgc3JjPVwiaW1hZ2VzL0Nsb3N1cmVHcmVlZHkuc3ZnXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+XG4vL1xuLy8gPGgzPkdyZWVkeSBQb3NpdGl2ZSBDbG9zdXJlOiB7QGNvZGUgKC4uLikrfTwvaDM+XG4vL1xuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9Qb3NpdGl2ZUNsb3N1cmVHcmVlZHkuc3ZnXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+XG4vL1xuLy8gPGgzPkdyZWVkeSBPcHRpb25hbDoge0Bjb2RlICguLi4pP308L2gzPlxuLy9cbi8vIDxlbWJlZCBzcmM9XCJpbWFnZXMvT3B0aW9uYWxHcmVlZHkuc3ZnXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+XG4vL1xuLy8gPGgyPk5vbi1HcmVlZHkgTG9vcHM8L2gyPlxuLy9cbi8vIDxoMz5Ob24tR3JlZWR5IENsb3N1cmU6IHtAY29kZSAoLi4uKSo/fTwvaDM+XG4vL1xuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9DbG9zdXJlTm9uR3JlZWR5LnN2Z1wiIHR5cGU9XCJpbWFnZS9zdmcreG1sXCIvPlxuLy9cbi8vIDxoMz5Ob24tR3JlZWR5IFBvc2l0aXZlIENsb3N1cmU6IHtAY29kZSAoLi4uKSs/fTwvaDM+XG4vL1xuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9Qb3NpdGl2ZUNsb3N1cmVOb25HcmVlZHkuc3ZnXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+XG4vL1xuLy8gPGgzPk5vbi1HcmVlZHkgT3B0aW9uYWw6IHtAY29kZSAoLi4uKT8/fTwvaDM+XG4vL1xuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9PcHRpb25hbE5vbkdyZWVkeS5zdmdcIiB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz5cbi8vXG5cbnZhciBJTklUSUFMX05VTV9UUkFOU0lUSU9OUyA9IDQ7XG5cbmZ1bmN0aW9uIEFUTlN0YXRlKCkge1xuICAgIC8vIFdoaWNoIEFUTiBhcmUgd2UgaW4/XG4gICAgdGhpcy5hdG4gPSBudWxsO1xuICAgIHRoaXMuc3RhdGVOdW1iZXIgPSBBVE5TdGF0ZS5JTlZBTElEX1NUQVRFX05VTUJFUjtcbiAgICB0aGlzLnN0YXRlVHlwZSA9IG51bGw7XG4gICAgdGhpcy5ydWxlSW5kZXggPSAwOyAvLyBhdCBydW50aW1lLCB3ZSBkb24ndCBoYXZlIFJ1bGUgb2JqZWN0c1xuICAgIHRoaXMuZXBzaWxvbk9ubHlUcmFuc2l0aW9ucyA9IGZhbHNlO1xuICAgIC8vIFRyYWNrIHRoZSB0cmFuc2l0aW9ucyBlbWFuYXRpbmcgZnJvbSB0aGlzIEFUTiBzdGF0ZS5cbiAgICB0aGlzLnRyYW5zaXRpb25zID0gW107XG4gICAgLy8gVXNlZCB0byBjYWNoZSBsb29rYWhlYWQgZHVyaW5nIHBhcnNpbmcsIG5vdCB1c2VkIGR1cmluZyBjb25zdHJ1Y3Rpb25cbiAgICB0aGlzLm5leHRUb2tlbldpdGhpblJ1bGUgPSBudWxsO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG4vLyBjb25zdGFudHMgZm9yIHNlcmlhbGl6YXRpb25cbkFUTlN0YXRlLklOVkFMSURfVFlQRSA9IDA7XG5BVE5TdGF0ZS5CQVNJQyA9IDE7XG5BVE5TdGF0ZS5SVUxFX1NUQVJUID0gMjtcbkFUTlN0YXRlLkJMT0NLX1NUQVJUID0gMztcbkFUTlN0YXRlLlBMVVNfQkxPQ0tfU1RBUlQgPSA0O1xuQVROU3RhdGUuU1RBUl9CTE9DS19TVEFSVCA9IDU7XG5BVE5TdGF0ZS5UT0tFTl9TVEFSVCA9IDY7XG5BVE5TdGF0ZS5SVUxFX1NUT1AgPSA3O1xuQVROU3RhdGUuQkxPQ0tfRU5EID0gODtcbkFUTlN0YXRlLlNUQVJfTE9PUF9CQUNLID0gOTtcbkFUTlN0YXRlLlNUQVJfTE9PUF9FTlRSWSA9IDEwO1xuQVROU3RhdGUuUExVU19MT09QX0JBQ0sgPSAxMTtcbkFUTlN0YXRlLkxPT1BfRU5EID0gMTI7XG5cbkFUTlN0YXRlLnNlcmlhbGl6YXRpb25OYW1lcyA9IFtcbiAgICAgICAgICAgIFwiSU5WQUxJRFwiLFxuICAgICAgICAgICAgXCJCQVNJQ1wiLFxuICAgICAgICAgICAgXCJSVUxFX1NUQVJUXCIsXG4gICAgICAgICAgICBcIkJMT0NLX1NUQVJUXCIsXG4gICAgICAgICAgICBcIlBMVVNfQkxPQ0tfU1RBUlRcIixcbiAgICAgICAgICAgIFwiU1RBUl9CTE9DS19TVEFSVFwiLFxuICAgICAgICAgICAgXCJUT0tFTl9TVEFSVFwiLFxuICAgICAgICAgICAgXCJSVUxFX1NUT1BcIixcbiAgICAgICAgICAgIFwiQkxPQ0tfRU5EXCIsXG4gICAgICAgICAgICBcIlNUQVJfTE9PUF9CQUNLXCIsXG4gICAgICAgICAgICBcIlNUQVJfTE9PUF9FTlRSWVwiLFxuICAgICAgICAgICAgXCJQTFVTX0xPT1BfQkFDS1wiLFxuICAgICAgICAgICAgXCJMT09QX0VORFwiIF07XG5cbkFUTlN0YXRlLklOVkFMSURfU1RBVEVfTlVNQkVSID0gLTE7XG5cbkFUTlN0YXRlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5zdGF0ZU51bWJlcjtcbn07XG5cbkFUTlN0YXRlLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbihvdGhlcikge1xuICAgIGlmIChvdGhlciBpbnN0YW5jZW9mIEFUTlN0YXRlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlTnVtYmVyPT09b3RoZXIuc3RhdGVOdW1iZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn07XG5cbkFUTlN0YXRlLnByb3RvdHlwZS5pc05vbkdyZWVkeUV4aXRTdGF0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBmYWxzZTtcbn07XG5cblxuQVROU3RhdGUucHJvdG90eXBlLmFkZFRyYW5zaXRpb24gPSBmdW5jdGlvbih0cmFucywgaW5kZXgpIHtcblx0aWYoaW5kZXg9PT11bmRlZmluZWQpIHtcblx0XHRpbmRleCA9IC0xO1xuXHR9XG4gICAgaWYgKHRoaXMudHJhbnNpdGlvbnMubGVuZ3RoPT09MCkge1xuICAgICAgICB0aGlzLmVwc2lsb25Pbmx5VHJhbnNpdGlvbnMgPSB0cmFucy5pc0Vwc2lsb247XG4gICAgfSBlbHNlIGlmKHRoaXMuZXBzaWxvbk9ubHlUcmFuc2l0aW9ucyAhPT0gdHJhbnMuaXNFcHNpbG9uKSB7XG4gICAgICAgIHRoaXMuZXBzaWxvbk9ubHlUcmFuc2l0aW9ucyA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaW5kZXg9PT0tMSkge1xuICAgICAgICB0aGlzLnRyYW5zaXRpb25zLnB1c2godHJhbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudHJhbnNpdGlvbnMuc3BsaWNlKGluZGV4LCAxLCB0cmFucyk7XG4gICAgfVxufTtcblxuZnVuY3Rpb24gQmFzaWNTdGF0ZSgpIHtcblx0QVROU3RhdGUuY2FsbCh0aGlzKTtcbiAgICB0aGlzLnN0YXRlVHlwZSA9IEFUTlN0YXRlLkJBU0lDO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5CYXNpY1N0YXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQVROU3RhdGUucHJvdG90eXBlKTtcbkJhc2ljU3RhdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmFzaWNTdGF0ZTtcblxuXG5mdW5jdGlvbiBEZWNpc2lvblN0YXRlKCkge1xuXHRBVE5TdGF0ZS5jYWxsKHRoaXMpO1xuICAgIHRoaXMuZGVjaXNpb24gPSAtMTtcbiAgICB0aGlzLm5vbkdyZWVkeSA9IGZhbHNlO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5EZWNpc2lvblN0YXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQVROU3RhdGUucHJvdG90eXBlKTtcbkRlY2lzaW9uU3RhdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRGVjaXNpb25TdGF0ZTtcblxuXG4vLyAgVGhlIHN0YXJ0IG9mIGEgcmVndWxhciB7QGNvZGUgKC4uLil9IGJsb2NrLlxuZnVuY3Rpb24gQmxvY2tTdGFydFN0YXRlKCkge1xuXHREZWNpc2lvblN0YXRlLmNhbGwodGhpcyk7XG5cdHRoaXMuZW5kU3RhdGUgPSBudWxsO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuQmxvY2tTdGFydFN0YXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRGVjaXNpb25TdGF0ZS5wcm90b3R5cGUpO1xuQmxvY2tTdGFydFN0YXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsb2NrU3RhcnRTdGF0ZTtcblxuXG5mdW5jdGlvbiBCYXNpY0Jsb2NrU3RhcnRTdGF0ZSgpIHtcblx0QmxvY2tTdGFydFN0YXRlLmNhbGwodGhpcyk7XG5cdHRoaXMuc3RhdGVUeXBlID0gQVROU3RhdGUuQkxPQ0tfU1RBUlQ7XG5cdHJldHVybiB0aGlzO1xufVxuXG5CYXNpY0Jsb2NrU3RhcnRTdGF0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJsb2NrU3RhcnRTdGF0ZS5wcm90b3R5cGUpO1xuQmFzaWNCbG9ja1N0YXJ0U3RhdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmFzaWNCbG9ja1N0YXJ0U3RhdGU7XG5cblxuLy8gVGVybWluYWwgbm9kZSBvZiBhIHNpbXBsZSB7QGNvZGUgKGF8YnxjKX0gYmxvY2suXG5mdW5jdGlvbiBCbG9ja0VuZFN0YXRlKCkge1xuXHRBVE5TdGF0ZS5jYWxsKHRoaXMpO1xuXHR0aGlzLnN0YXRlVHlwZSA9IEFUTlN0YXRlLkJMT0NLX0VORDtcbiAgICB0aGlzLnN0YXJ0U3RhdGUgPSBudWxsO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5CbG9ja0VuZFN0YXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQVROU3RhdGUucHJvdG90eXBlKTtcbkJsb2NrRW5kU3RhdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmxvY2tFbmRTdGF0ZTtcblxuXG4vLyBUaGUgbGFzdCBub2RlIGluIHRoZSBBVE4gZm9yIGEgcnVsZSwgdW5sZXNzIHRoYXQgcnVsZSBpcyB0aGUgc3RhcnQgc3ltYm9sLlxuLy8gIEluIHRoYXQgY2FzZSwgdGhlcmUgaXMgb25lIHRyYW5zaXRpb24gdG8gRU9GLiBMYXRlciwgd2UgbWlnaHQgZW5jb2RlXG4vLyAgcmVmZXJlbmNlcyB0byBhbGwgY2FsbHMgdG8gdGhpcyBydWxlIHRvIGNvbXB1dGUgRk9MTE9XIHNldHMgZm9yXG4vLyAgZXJyb3IgaGFuZGxpbmcuXG4vL1xuZnVuY3Rpb24gUnVsZVN0b3BTdGF0ZSgpIHtcblx0QVROU3RhdGUuY2FsbCh0aGlzKTtcbiAgICB0aGlzLnN0YXRlVHlwZSA9IEFUTlN0YXRlLlJVTEVfU1RPUDtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuUnVsZVN0b3BTdGF0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFUTlN0YXRlLnByb3RvdHlwZSk7XG5SdWxlU3RvcFN0YXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJ1bGVTdG9wU3RhdGU7XG5cbmZ1bmN0aW9uIFJ1bGVTdGFydFN0YXRlKCkge1xuXHRBVE5TdGF0ZS5jYWxsKHRoaXMpO1xuXHR0aGlzLnN0YXRlVHlwZSA9IEFUTlN0YXRlLlJVTEVfU1RBUlQ7XG5cdHRoaXMuc3RvcFN0YXRlID0gbnVsbDtcblx0dGhpcy5pc1ByZWNlZGVuY2VSdWxlID0gZmFsc2U7XG5cdHJldHVybiB0aGlzO1xufVxuXG5SdWxlU3RhcnRTdGF0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFUTlN0YXRlLnByb3RvdHlwZSk7XG5SdWxlU3RhcnRTdGF0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSdWxlU3RhcnRTdGF0ZTtcblxuLy8gRGVjaXNpb24gc3RhdGUgZm9yIHtAY29kZSBBK30gYW5kIHtAY29kZSAoQXxCKSt9LiAgSXQgaGFzIHR3byB0cmFuc2l0aW9uczpcbi8vICBvbmUgdG8gdGhlIGxvb3AgYmFjayB0byBzdGFydCBvZiB0aGUgYmxvY2sgYW5kIG9uZSB0byBleGl0LlxuLy9cbmZ1bmN0aW9uIFBsdXNMb29wYmFja1N0YXRlKCkge1xuXHREZWNpc2lvblN0YXRlLmNhbGwodGhpcyk7XG5cdHRoaXMuc3RhdGVUeXBlID0gQVROU3RhdGUuUExVU19MT09QX0JBQ0s7XG5cdHJldHVybiB0aGlzO1xufVxuXG5QbHVzTG9vcGJhY2tTdGF0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERlY2lzaW9uU3RhdGUucHJvdG90eXBlKTtcblBsdXNMb29wYmFja1N0YXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBsdXNMb29wYmFja1N0YXRlO1xuXG5cbi8vIFN0YXJ0IG9mIHtAY29kZSAoQXxCfC4uLikrfSBsb29wLiBUZWNobmljYWxseSBhIGRlY2lzaW9uIHN0YXRlLCBidXRcbi8vICB3ZSBkb24ndCB1c2UgZm9yIGNvZGUgZ2VuZXJhdGlvbjsgc29tZWJvZHkgbWlnaHQgbmVlZCBpdCwgc28gSSdtIGRlZmluaW5nXG4vLyAgaXQgZm9yIGNvbXBsZXRlbmVzcy4gSW4gcmVhbGl0eSwgdGhlIHtAbGluayBQbHVzTG9vcGJhY2tTdGF0ZX0gbm9kZSBpcyB0aGVcbi8vICByZWFsIGRlY2lzaW9uLW1ha2luZyBub3RlIGZvciB7QGNvZGUgQSt9LlxuLy9cbmZ1bmN0aW9uIFBsdXNCbG9ja1N0YXJ0U3RhdGUoKSB7XG5cdEJsb2NrU3RhcnRTdGF0ZS5jYWxsKHRoaXMpO1xuXHR0aGlzLnN0YXRlVHlwZSA9IEFUTlN0YXRlLlBMVVNfQkxPQ0tfU1RBUlQ7XG4gICAgdGhpcy5sb29wQmFja1N0YXRlID0gbnVsbDtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuUGx1c0Jsb2NrU3RhcnRTdGF0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJsb2NrU3RhcnRTdGF0ZS5wcm90b3R5cGUpO1xuUGx1c0Jsb2NrU3RhcnRTdGF0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQbHVzQmxvY2tTdGFydFN0YXRlO1xuXG4vLyBUaGUgYmxvY2sgdGhhdCBiZWdpbnMgYSBjbG9zdXJlIGxvb3AuXG5mdW5jdGlvbiBTdGFyQmxvY2tTdGFydFN0YXRlKCkge1xuXHRCbG9ja1N0YXJ0U3RhdGUuY2FsbCh0aGlzKTtcblx0dGhpcy5zdGF0ZVR5cGUgPSBBVE5TdGF0ZS5TVEFSX0JMT0NLX1NUQVJUO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuU3RhckJsb2NrU3RhcnRTdGF0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJsb2NrU3RhcnRTdGF0ZS5wcm90b3R5cGUpO1xuU3RhckJsb2NrU3RhcnRTdGF0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTdGFyQmxvY2tTdGFydFN0YXRlO1xuXG5cbmZ1bmN0aW9uIFN0YXJMb29wYmFja1N0YXRlKCkge1xuXHRBVE5TdGF0ZS5jYWxsKHRoaXMpO1xuXHR0aGlzLnN0YXRlVHlwZSA9IEFUTlN0YXRlLlNUQVJfTE9PUF9CQUNLO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuU3Rhckxvb3BiYWNrU3RhdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBVE5TdGF0ZS5wcm90b3R5cGUpO1xuU3Rhckxvb3BiYWNrU3RhdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3Rhckxvb3BiYWNrU3RhdGU7XG5cblxuZnVuY3Rpb24gU3Rhckxvb3BFbnRyeVN0YXRlKCkge1xuXHREZWNpc2lvblN0YXRlLmNhbGwodGhpcyk7XG5cdHRoaXMuc3RhdGVUeXBlID0gQVROU3RhdGUuU1RBUl9MT09QX0VOVFJZO1xuICAgIHRoaXMubG9vcEJhY2tTdGF0ZSA9IG51bGw7XG4gICAgLy8gSW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBzdGF0ZSBjYW4gYmVuZWZpdCBmcm9tIGEgcHJlY2VkZW5jZSBERkEgZHVyaW5nIFNMTCBkZWNpc2lvbiBtYWtpbmcuXG4gICAgdGhpcy5pc1ByZWNlZGVuY2VEZWNpc2lvbiA9IG51bGw7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cblN0YXJMb29wRW50cnlTdGF0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERlY2lzaW9uU3RhdGUucHJvdG90eXBlKTtcblN0YXJMb29wRW50cnlTdGF0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTdGFyTG9vcEVudHJ5U3RhdGU7XG5cblxuLy8gTWFyayB0aGUgZW5kIG9mIGEgKiBvciArIGxvb3AuXG5mdW5jdGlvbiBMb29wRW5kU3RhdGUoKSB7XG5cdEFUTlN0YXRlLmNhbGwodGhpcyk7XG5cdHRoaXMuc3RhdGVUeXBlID0gQVROU3RhdGUuTE9PUF9FTkQ7XG5cdHRoaXMubG9vcEJhY2tTdGF0ZSA9IG51bGw7XG5cdHJldHVybiB0aGlzO1xufVxuXG5Mb29wRW5kU3RhdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBVE5TdGF0ZS5wcm90b3R5cGUpO1xuTG9vcEVuZFN0YXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExvb3BFbmRTdGF0ZTtcblxuXG4vLyBUaGUgVG9rZW5zIHJ1bGUgc3RhcnQgc3RhdGUgbGlua2luZyB0byBlYWNoIGxleGVyIHJ1bGUgc3RhcnQgc3RhdGUgKi9cbmZ1bmN0aW9uIFRva2Vuc1N0YXJ0U3RhdGUoKSB7XG5cdERlY2lzaW9uU3RhdGUuY2FsbCh0aGlzKTtcblx0dGhpcy5zdGF0ZVR5cGUgPSBBVE5TdGF0ZS5UT0tFTl9TVEFSVDtcblx0cmV0dXJuIHRoaXM7XG59XG5cblRva2Vuc1N0YXJ0U3RhdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShEZWNpc2lvblN0YXRlLnByb3RvdHlwZSk7XG5Ub2tlbnNTdGFydFN0YXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRva2Vuc1N0YXJ0U3RhdGU7XG5cbmV4cG9ydHMuQVROU3RhdGUgPSBBVE5TdGF0ZTtcbmV4cG9ydHMuQmFzaWNTdGF0ZSA9IEJhc2ljU3RhdGU7XG5leHBvcnRzLkRlY2lzaW9uU3RhdGUgPSBEZWNpc2lvblN0YXRlO1xuZXhwb3J0cy5CbG9ja1N0YXJ0U3RhdGUgPSBCbG9ja1N0YXJ0U3RhdGU7XG5leHBvcnRzLkJsb2NrRW5kU3RhdGUgPSBCbG9ja0VuZFN0YXRlO1xuZXhwb3J0cy5Mb29wRW5kU3RhdGUgPSBMb29wRW5kU3RhdGU7XG5leHBvcnRzLlJ1bGVTdGFydFN0YXRlID0gUnVsZVN0YXJ0U3RhdGU7XG5leHBvcnRzLlJ1bGVTdG9wU3RhdGUgPSBSdWxlU3RvcFN0YXRlO1xuZXhwb3J0cy5Ub2tlbnNTdGFydFN0YXRlID0gVG9rZW5zU3RhcnRTdGF0ZTtcbmV4cG9ydHMuUGx1c0xvb3BiYWNrU3RhdGUgPSBQbHVzTG9vcGJhY2tTdGF0ZTtcbmV4cG9ydHMuU3Rhckxvb3BiYWNrU3RhdGUgPSBTdGFyTG9vcGJhY2tTdGF0ZTtcbmV4cG9ydHMuU3Rhckxvb3BFbnRyeVN0YXRlID0gU3Rhckxvb3BFbnRyeVN0YXRlO1xuZXhwb3J0cy5QbHVzQmxvY2tTdGFydFN0YXRlID0gUGx1c0Jsb2NrU3RhcnRTdGF0ZTtcbmV4cG9ydHMuU3RhckJsb2NrU3RhcnRTdGF0ZSA9IFN0YXJCbG9ja1N0YXJ0U3RhdGU7XG5leHBvcnRzLkJhc2ljQmxvY2tTdGFydFN0YXRlID0gQmFzaWNCbG9ja1N0YXJ0U3RhdGU7XG4iLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vLy9cblxuLy8gUmVwcmVzZW50cyB0aGUgdHlwZSBvZiByZWNvZ25pemVyIGFuIEFUTiBhcHBsaWVzIHRvLlxuXG5mdW5jdGlvbiBBVE5UeXBlKCkge1xuXG59XG5cbkFUTlR5cGUuTEVYRVIgPSAwO1xuQVROVHlwZS5QQVJTRVIgPSAxO1xuXG5leHBvcnRzLkFUTlR5cGUgPSBBVE5UeXBlO1xuXG4iLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy8vXG5cbi8vIFdoZW4gd2UgaGl0IGFuIGFjY2VwdCBzdGF0ZSBpbiBlaXRoZXIgdGhlIERGQSBvciB0aGUgQVROLCB3ZVxuLy8gIGhhdmUgdG8gbm90aWZ5IHRoZSBjaGFyYWN0ZXIgc3RyZWFtIHRvIHN0YXJ0IGJ1ZmZlcmluZyBjaGFyYWN0ZXJzXG4vLyAgdmlhIHtAbGluayBJbnRTdHJlYW0vL21hcmt9IGFuZCByZWNvcmQgdGhlIGN1cnJlbnQgc3RhdGUuIFRoZSBjdXJyZW50IHNpbSBzdGF0ZVxuLy8gIGluY2x1ZGVzIHRoZSBjdXJyZW50IGluZGV4IGludG8gdGhlIGlucHV0LCB0aGUgY3VycmVudCBsaW5lLFxuLy8gIGFuZCBjdXJyZW50IGNoYXJhY3RlciBwb3NpdGlvbiBpbiB0aGF0IGxpbmUuIE5vdGUgdGhhdCB0aGUgTGV4ZXIgaXNcbi8vICB0cmFja2luZyB0aGUgc3RhcnRpbmcgbGluZSBhbmQgY2hhcmFjdGVyaXphdGlvbiBvZiB0aGUgdG9rZW4uIFRoZXNlXG4vLyAgdmFyaWFibGVzIHRyYWNrIHRoZSBcInN0YXRlXCIgb2YgdGhlIHNpbXVsYXRvciB3aGVuIGl0IGhpdHMgYW4gYWNjZXB0IHN0YXRlLlxuLy9cbi8vICA8cD5XZSB0cmFjayB0aGVzZSB2YXJpYWJsZXMgc2VwYXJhdGVseSBmb3IgdGhlIERGQSBhbmQgQVROIHNpbXVsYXRpb25cbi8vICBiZWNhdXNlIHRoZSBERkEgc2ltdWxhdGlvbiBvZnRlbiBoYXMgdG8gZmFpbCBvdmVyIHRvIHRoZSBBVE5cbi8vICBzaW11bGF0aW9uLiBJZiB0aGUgQVROIHNpbXVsYXRpb24gZmFpbHMsIHdlIG5lZWQgdGhlIERGQSB0byBmYWxsXG4vLyAgYmFjayB0byBpdHMgcHJldmlvdXNseSBhY2NlcHRlZCBzdGF0ZSwgaWYgYW55LiBJZiB0aGUgQVROIHN1Y2NlZWRzLFxuLy8gIHRoZW4gdGhlIEFUTiBkb2VzIHRoZSBhY2NlcHQgYW5kIHRoZSBERkEgc2ltdWxhdG9yIHRoYXQgaW52b2tlZCBpdFxuLy8gIGNhbiBzaW1wbHkgcmV0dXJuIHRoZSBwcmVkaWN0ZWQgdG9rZW4gdHlwZS48L3A+XG4vLy9cblxudmFyIFRva2VuID0gcmVxdWlyZSgnLi8uLi9Ub2tlbicpLlRva2VuO1xudmFyIExleGVyID0gcmVxdWlyZSgnLi8uLi9MZXhlcicpLkxleGVyO1xudmFyIEFUTiA9IHJlcXVpcmUoJy4vQVROJykuQVROO1xudmFyIEFUTlNpbXVsYXRvciA9IHJlcXVpcmUoJy4vQVROU2ltdWxhdG9yJykuQVROU2ltdWxhdG9yO1xudmFyIERGQVN0YXRlID0gcmVxdWlyZSgnLi8uLi9kZmEvREZBU3RhdGUnKS5ERkFTdGF0ZTtcbnZhciBBVE5Db25maWdTZXQgPSByZXF1aXJlKCcuL0FUTkNvbmZpZ1NldCcpLkFUTkNvbmZpZ1NldDtcbnZhciBPcmRlcmVkQVROQ29uZmlnU2V0ID0gcmVxdWlyZSgnLi9BVE5Db25maWdTZXQnKS5PcmRlcmVkQVROQ29uZmlnU2V0O1xudmFyIFByZWRpY3Rpb25Db250ZXh0ID0gcmVxdWlyZSgnLi8uLi9QcmVkaWN0aW9uQ29udGV4dCcpLlByZWRpY3Rpb25Db250ZXh0O1xudmFyIFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0ID0gcmVxdWlyZSgnLi8uLi9QcmVkaWN0aW9uQ29udGV4dCcpLlNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0O1xudmFyIFJ1bGVTdG9wU3RhdGUgPSByZXF1aXJlKCcuL0FUTlN0YXRlJykuUnVsZVN0b3BTdGF0ZTtcbnZhciBMZXhlckFUTkNvbmZpZyA9IHJlcXVpcmUoJy4vQVROQ29uZmlnJykuTGV4ZXJBVE5Db25maWc7XG52YXIgVHJhbnNpdGlvbiA9IHJlcXVpcmUoJy4vVHJhbnNpdGlvbicpLlRyYW5zaXRpb247XG52YXIgTGV4ZXJBY3Rpb25FeGVjdXRvciA9IHJlcXVpcmUoJy4vTGV4ZXJBY3Rpb25FeGVjdXRvcicpLkxleGVyQWN0aW9uRXhlY3V0b3I7XG52YXIgTGV4ZXJOb1ZpYWJsZUFsdEV4Y2VwdGlvbiA9IHJlcXVpcmUoJy4vLi4vZXJyb3IvRXJyb3JzJykuTGV4ZXJOb1ZpYWJsZUFsdEV4Y2VwdGlvbjtcblxuZnVuY3Rpb24gcmVzZXRTaW1TdGF0ZShzaW0pIHtcblx0c2ltLmluZGV4ID0gLTE7XG5cdHNpbS5saW5lID0gMDtcblx0c2ltLmNvbHVtbiA9IC0xO1xuXHRzaW0uZGZhU3RhdGUgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBTaW1TdGF0ZSgpIHtcblx0cmVzZXRTaW1TdGF0ZSh0aGlzKTtcblx0cmV0dXJuIHRoaXM7XG59XG5cblNpbVN0YXRlLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKCkge1xuXHRyZXNldFNpbVN0YXRlKHRoaXMpO1xufTtcblxuZnVuY3Rpb24gTGV4ZXJBVE5TaW11bGF0b3IocmVjb2csIGF0biwgZGVjaXNpb25Ub0RGQSwgc2hhcmVkQ29udGV4dENhY2hlKSB7XG5cdEFUTlNpbXVsYXRvci5jYWxsKHRoaXMsIGF0biwgc2hhcmVkQ29udGV4dENhY2hlKTtcblx0dGhpcy5kZWNpc2lvblRvREZBID0gZGVjaXNpb25Ub0RGQTtcblx0dGhpcy5yZWNvZyA9IHJlY29nO1xuXHQvLyBUaGUgY3VycmVudCB0b2tlbidzIHN0YXJ0aW5nIGluZGV4IGludG8gdGhlIGNoYXJhY3RlciBzdHJlYW0uXG5cdC8vIFNoYXJlZCBhY3Jvc3MgREZBIHRvIEFUTiBzaW11bGF0aW9uIGluIGNhc2UgdGhlIEFUTiBmYWlscyBhbmQgdGhlXG5cdC8vIERGQSBkaWQgbm90IGhhdmUgYSBwcmV2aW91cyBhY2NlcHQgc3RhdGUuIEluIHRoaXMgY2FzZSwgd2UgdXNlIHRoZVxuXHQvLyBBVE4tZ2VuZXJhdGVkIGV4Y2VwdGlvbiBvYmplY3QuXG5cdHRoaXMuc3RhcnRJbmRleCA9IC0xO1xuXHQvLyBsaW5lIG51bWJlciAxLi5uIHdpdGhpbiB0aGUgaW5wdXQvLy9cblx0dGhpcy5saW5lID0gMTtcblx0Ly8gVGhlIGluZGV4IG9mIHRoZSBjaGFyYWN0ZXIgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGluZVxuXHQvLyAwLi5uLTEvLy9cblx0dGhpcy5jb2x1bW4gPSAwO1xuXHR0aGlzLm1vZGUgPSBMZXhlci5ERUZBVUxUX01PREU7XG5cdC8vIFVzZWQgZHVyaW5nIERGQS9BVE4gZXhlYyB0byByZWNvcmQgdGhlIG1vc3QgcmVjZW50IGFjY2VwdCBjb25maWd1cmF0aW9uXG5cdC8vIGluZm9cblx0dGhpcy5wcmV2QWNjZXB0ID0gbmV3IFNpbVN0YXRlKCk7XG5cdC8vIGRvbmVcblx0cmV0dXJuIHRoaXM7XG59XG5cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQVROU2ltdWxhdG9yLnByb3RvdHlwZSk7XG5MZXhlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMZXhlckFUTlNpbXVsYXRvcjtcblxuTGV4ZXJBVE5TaW11bGF0b3IuZGVidWcgPSBmYWxzZTtcbkxleGVyQVROU2ltdWxhdG9yLmRmYV9kZWJ1ZyA9IGZhbHNlO1xuXG5MZXhlckFUTlNpbXVsYXRvci5NSU5fREZBX0VER0UgPSAwO1xuTGV4ZXJBVE5TaW11bGF0b3IuTUFYX0RGQV9FREdFID0gMTI3OyAvLyBmb3JjZXMgdW5pY29kZSB0byBzdGF5IGluIEFUTlxuXG5MZXhlckFUTlNpbXVsYXRvci5tYXRjaF9jYWxscyA9IDA7XG5cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5jb3B5U3RhdGUgPSBmdW5jdGlvbihzaW11bGF0b3IpIHtcblx0dGhpcy5jb2x1bW4gPSBzaW11bGF0b3IuY29sdW1uO1xuXHR0aGlzLmxpbmUgPSBzaW11bGF0b3IubGluZTtcblx0dGhpcy5tb2RlID0gc2ltdWxhdG9yLm1vZGU7XG5cdHRoaXMuc3RhcnRJbmRleCA9IHNpbXVsYXRvci5zdGFydEluZGV4O1xufTtcblxuTGV4ZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLm1hdGNoID0gZnVuY3Rpb24oaW5wdXQsIG1vZGUpIHtcblx0dGhpcy5tYXRjaF9jYWxscyArPSAxO1xuXHR0aGlzLm1vZGUgPSBtb2RlO1xuXHR2YXIgbWFyayA9IGlucHV0Lm1hcmsoKTtcblx0dHJ5IHtcblx0XHR0aGlzLnN0YXJ0SW5kZXggPSBpbnB1dC5pbmRleDtcblx0XHR0aGlzLnByZXZBY2NlcHQucmVzZXQoKTtcblx0XHR2YXIgZGZhID0gdGhpcy5kZWNpc2lvblRvREZBW21vZGVdO1xuXHRcdGlmIChkZmEuczAgPT09IG51bGwpIHtcblx0XHRcdHJldHVybiB0aGlzLm1hdGNoQVROKGlucHV0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMuZXhlY0FUTihpbnB1dCwgZGZhLnMwKTtcblx0XHR9XG5cdH0gZmluYWxseSB7XG5cdFx0aW5wdXQucmVsZWFzZShtYXJrKTtcblx0fVxufTtcblxuTGV4ZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMucHJldkFjY2VwdC5yZXNldCgpO1xuXHR0aGlzLnN0YXJ0SW5kZXggPSAtMTtcblx0dGhpcy5saW5lID0gMTtcblx0dGhpcy5jb2x1bW4gPSAwO1xuXHR0aGlzLm1vZGUgPSBMZXhlci5ERUZBVUxUX01PREU7XG59O1xuXG5MZXhlckFUTlNpbXVsYXRvci5wcm90b3R5cGUubWF0Y2hBVE4gPSBmdW5jdGlvbihpbnB1dCkge1xuXHR2YXIgc3RhcnRTdGF0ZSA9IHRoaXMuYXRuLm1vZGVUb1N0YXJ0U3RhdGVbdGhpcy5tb2RlXTtcblxuXHRpZiAoTGV4ZXJBVE5TaW11bGF0b3IuZGVidWcpIHtcblx0XHRjb25zb2xlLmxvZyhcIm1hdGNoQVROIG1vZGUgXCIgKyB0aGlzLm1vZGUgKyBcIiBzdGFydDogXCIgKyBzdGFydFN0YXRlKTtcblx0fVxuXHR2YXIgb2xkX21vZGUgPSB0aGlzLm1vZGU7XG5cdHZhciBzMF9jbG9zdXJlID0gdGhpcy5jb21wdXRlU3RhcnRTdGF0ZShpbnB1dCwgc3RhcnRTdGF0ZSk7XG5cdHZhciBzdXBwcmVzc0VkZ2UgPSBzMF9jbG9zdXJlLmhhc1NlbWFudGljQ29udGV4dDtcblx0czBfY2xvc3VyZS5oYXNTZW1hbnRpY0NvbnRleHQgPSBmYWxzZTtcblxuXHR2YXIgbmV4dCA9IHRoaXMuYWRkREZBU3RhdGUoczBfY2xvc3VyZSk7XG5cdGlmICghc3VwcHJlc3NFZGdlKSB7XG5cdFx0dGhpcy5kZWNpc2lvblRvREZBW3RoaXMubW9kZV0uczAgPSBuZXh0O1xuXHR9XG5cblx0dmFyIHByZWRpY3QgPSB0aGlzLmV4ZWNBVE4oaW5wdXQsIG5leHQpO1xuXG5cdGlmIChMZXhlckFUTlNpbXVsYXRvci5kZWJ1Zykge1xuXHRcdGNvbnNvbGUubG9nKFwiREZBIGFmdGVyIG1hdGNoQVROOiBcIiArIHRoaXMuZGVjaXNpb25Ub0RGQVtvbGRfbW9kZV0udG9MZXhlclN0cmluZygpKTtcblx0fVxuXHRyZXR1cm4gcHJlZGljdDtcbn07XG5cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5leGVjQVROID0gZnVuY3Rpb24oaW5wdXQsIGRzMCkge1xuXHRpZiAoTGV4ZXJBVE5TaW11bGF0b3IuZGVidWcpIHtcblx0XHRjb25zb2xlLmxvZyhcInN0YXJ0IHN0YXRlIGNsb3N1cmU9XCIgKyBkczAuY29uZmlncyk7XG5cdH1cblx0aWYgKGRzMC5pc0FjY2VwdFN0YXRlKSB7XG5cdFx0Ly8gYWxsb3cgemVyby1sZW5ndGggdG9rZW5zXG5cdFx0dGhpcy5jYXB0dXJlU2ltU3RhdGUodGhpcy5wcmV2QWNjZXB0LCBpbnB1dCwgZHMwKTtcblx0fVxuXHR2YXIgdCA9IGlucHV0LkxBKDEpO1xuXHR2YXIgcyA9IGRzMDsgLy8gcyBpcyBjdXJyZW50L2Zyb20gREZBIHN0YXRlXG5cblx0d2hpbGUgKHRydWUpIHsgLy8gd2hpbGUgbW9yZSB3b3JrXG5cdFx0aWYgKExleGVyQVROU2ltdWxhdG9yLmRlYnVnKSB7XG5cdFx0XHRjb25zb2xlLmxvZyhcImV4ZWNBVE4gbG9vcCBzdGFydGluZyBjbG9zdXJlOiBcIiArIHMuY29uZmlncyk7XG5cdFx0fVxuXG5cdFx0Ly8gQXMgd2UgbW92ZSBzcmMtPnRyZywgc3JjLT50cmcsIHdlIGtlZXAgdHJhY2sgb2YgdGhlIHByZXZpb3VzIHRyZyB0b1xuXHRcdC8vIGF2b2lkIGxvb2tpbmcgdXAgdGhlIERGQSBzdGF0ZSBhZ2Fpbiwgd2hpY2ggaXMgZXhwZW5zaXZlLlxuXHRcdC8vIElmIHRoZSBwcmV2aW91cyB0YXJnZXQgd2FzIGFscmVhZHkgcGFydCBvZiB0aGUgREZBLCB3ZSBtaWdodFxuXHRcdC8vIGJlIGFibGUgdG8gYXZvaWQgZG9pbmcgYSByZWFjaCBvcGVyYXRpb24gdXBvbiB0LiBJZiBzIT1udWxsLFxuXHRcdC8vIGl0IG1lYW5zIHRoYXQgc2VtYW50aWMgcHJlZGljYXRlcyBkaWRuJ3QgcHJldmVudCB1cyBmcm9tXG5cdFx0Ly8gY3JlYXRpbmcgYSBERkEgc3RhdGUuIE9uY2Ugd2Uga25vdyBzIT1udWxsLCB3ZSBjaGVjayB0byBzZWUgaWZcblx0XHQvLyB0aGUgREZBIHN0YXRlIGhhcyBhbiBlZGdlIGFscmVhZHkgZm9yIHQuIElmIHNvLCB3ZSBjYW4ganVzdCByZXVzZVxuXHRcdC8vIGl0J3MgY29uZmlndXJhdGlvbiBzZXQ7IHRoZXJlJ3Mgbm8gcG9pbnQgaW4gcmUtY29tcHV0aW5nIGl0LlxuXHRcdC8vIFRoaXMgaXMga2luZCBvZiBsaWtlIGRvaW5nIERGQSBzaW11bGF0aW9uIHdpdGhpbiB0aGUgQVROXG5cdFx0Ly8gc2ltdWxhdGlvbiBiZWNhdXNlIERGQSBzaW11bGF0aW9uIGlzIHJlYWxseSBqdXN0IGEgd2F5IHRvIGF2b2lkXG5cdFx0Ly8gY29tcHV0aW5nIHJlYWNoL2Nsb3N1cmUgc2V0cy4gVGVjaG5pY2FsbHksIG9uY2Ugd2Uga25vdyB0aGF0XG5cdFx0Ly8gd2UgaGF2ZSBhIHByZXZpb3VzbHkgYWRkZWQgREZBIHN0YXRlLCB3ZSBjb3VsZCBqdW1wIG92ZXIgdG9cblx0XHQvLyB0aGUgREZBIHNpbXVsYXRvci4gQnV0LCB0aGF0IHdvdWxkIG1lYW4gcG9wcGluZyBiYWNrIGFuZCBmb3J0aFxuXHRcdC8vIGEgbG90IGFuZCBtYWtpbmcgdGhpbmdzIG1vcmUgY29tcGxpY2F0ZWQgYWxnb3JpdGhtaWNhbGx5LlxuXHRcdC8vIFRoaXMgb3B0aW1pemF0aW9uIG1ha2VzIGEgbG90IG9mIHNlbnNlIGZvciBsb29wcyB3aXRoaW4gREZBLlxuXHRcdC8vIEEgY2hhcmFjdGVyIHdpbGwgdGFrZSB1cyBiYWNrIHRvIGFuIGV4aXN0aW5nIERGQSBzdGF0ZVxuXHRcdC8vIHRoYXQgYWxyZWFkeSBoYXMgbG90cyBvZiBlZGdlcyBvdXQgb2YgaXQuIGUuZy4sIC4qIGluIGNvbW1lbnRzLlxuXHRcdC8vIHByaW50KFwiVGFyZ2V0IGZvcjpcIiArIHN0cihzKSArIFwiIGFuZDpcIiArIHN0cih0KSlcblx0XHR2YXIgdGFyZ2V0ID0gdGhpcy5nZXRFeGlzdGluZ1RhcmdldFN0YXRlKHMsIHQpO1xuXHRcdC8vIHByaW50KFwiRXhpc3Rpbmc6XCIgKyBzdHIodGFyZ2V0KSlcblx0XHRpZiAodGFyZ2V0ID09PSBudWxsKSB7XG5cdFx0XHR0YXJnZXQgPSB0aGlzLmNvbXB1dGVUYXJnZXRTdGF0ZShpbnB1dCwgcywgdCk7XG5cdFx0XHQvLyBwcmludChcIkNvbXB1dGVkOlwiICsgc3RyKHRhcmdldCkpXG5cdFx0fVxuXHRcdGlmICh0YXJnZXQgPT09IEFUTlNpbXVsYXRvci5FUlJPUikge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdC8vIElmIHRoaXMgaXMgYSBjb25zdW1hYmxlIGlucHV0IGVsZW1lbnQsIG1ha2Ugc3VyZSB0byBjb25zdW1lIGJlZm9yZVxuXHRcdC8vIGNhcHR1cmluZyB0aGUgYWNjZXB0IHN0YXRlIHNvIHRoZSBpbnB1dCBpbmRleCwgbGluZSwgYW5kIGNoYXJcblx0XHQvLyBwb3NpdGlvbiBhY2N1cmF0ZWx5IHJlZmxlY3QgdGhlIHN0YXRlIG9mIHRoZSBpbnRlcnByZXRlciBhdCB0aGVcblx0XHQvLyBlbmQgb2YgdGhlIHRva2VuLlxuXHRcdGlmICh0ICE9PSBUb2tlbi5FT0YpIHtcblx0XHRcdHRoaXMuY29uc3VtZShpbnB1dCk7XG5cdFx0fVxuXHRcdGlmICh0YXJnZXQuaXNBY2NlcHRTdGF0ZSkge1xuXHRcdFx0dGhpcy5jYXB0dXJlU2ltU3RhdGUodGhpcy5wcmV2QWNjZXB0LCBpbnB1dCwgdGFyZ2V0KTtcblx0XHRcdGlmICh0ID09PSBUb2tlbi5FT0YpIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHQgPSBpbnB1dC5MQSgxKTtcblx0XHRzID0gdGFyZ2V0OyAvLyBmbGlwOyBjdXJyZW50IERGQSB0YXJnZXQgYmVjb21lcyBuZXcgc3JjL2Zyb20gc3RhdGVcblx0fVxuXHRyZXR1cm4gdGhpcy5mYWlsT3JBY2NlcHQodGhpcy5wcmV2QWNjZXB0LCBpbnB1dCwgcy5jb25maWdzLCB0KTtcbn07XG5cbi8vIEdldCBhbiBleGlzdGluZyB0YXJnZXQgc3RhdGUgZm9yIGFuIGVkZ2UgaW4gdGhlIERGQS4gSWYgdGhlIHRhcmdldCBzdGF0ZVxuLy8gZm9yIHRoZSBlZGdlIGhhcyBub3QgeWV0IGJlZW4gY29tcHV0ZWQgb3IgaXMgb3RoZXJ3aXNlIG5vdCBhdmFpbGFibGUsXG4vLyB0aGlzIG1ldGhvZCByZXR1cm5zIHtAY29kZSBudWxsfS5cbi8vXG4vLyBAcGFyYW0gcyBUaGUgY3VycmVudCBERkEgc3RhdGVcbi8vIEBwYXJhbSB0IFRoZSBuZXh0IGlucHV0IHN5bWJvbFxuLy8gQHJldHVybiBUaGUgZXhpc3RpbmcgdGFyZ2V0IERGQSBzdGF0ZSBmb3IgdGhlIGdpdmVuIGlucHV0IHN5bWJvbFxuLy8ge0Bjb2RlIHR9LCBvciB7QGNvZGUgbnVsbH0gaWYgdGhlIHRhcmdldCBzdGF0ZSBmb3IgdGhpcyBlZGdlIGlzIG5vdFxuLy8gYWxyZWFkeSBjYWNoZWRcbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5nZXRFeGlzdGluZ1RhcmdldFN0YXRlID0gZnVuY3Rpb24ocywgdCkge1xuXHRpZiAocy5lZGdlcyA9PT0gbnVsbCB8fCB0IDwgTGV4ZXJBVE5TaW11bGF0b3IuTUlOX0RGQV9FREdFIHx8IHQgPiBMZXhlckFUTlNpbXVsYXRvci5NQVhfREZBX0VER0UpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdHZhciB0YXJnZXQgPSBzLmVkZ2VzW3QgLSBMZXhlckFUTlNpbXVsYXRvci5NSU5fREZBX0VER0VdO1xuXHRpZih0YXJnZXQ9PT11bmRlZmluZWQpIHtcblx0XHR0YXJnZXQgPSBudWxsO1xuXHR9XG5cdGlmIChMZXhlckFUTlNpbXVsYXRvci5kZWJ1ZyAmJiB0YXJnZXQgIT09IG51bGwpIHtcblx0XHRjb25zb2xlLmxvZyhcInJldXNlIHN0YXRlIFwiICsgcy5zdGF0ZU51bWJlciArIFwiIGVkZ2UgdG8gXCIgKyB0YXJnZXQuc3RhdGVOdW1iZXIpO1xuXHR9XG5cdHJldHVybiB0YXJnZXQ7XG59O1xuXG4vLyBDb21wdXRlIGEgdGFyZ2V0IHN0YXRlIGZvciBhbiBlZGdlIGluIHRoZSBERkEsIGFuZCBhdHRlbXB0IHRvIGFkZCB0aGVcbi8vIGNvbXB1dGVkIHN0YXRlIGFuZCBjb3JyZXNwb25kaW5nIGVkZ2UgdG8gdGhlIERGQS5cbi8vXG4vLyBAcGFyYW0gaW5wdXQgVGhlIGlucHV0IHN0cmVhbVxuLy8gQHBhcmFtIHMgVGhlIGN1cnJlbnQgREZBIHN0YXRlXG4vLyBAcGFyYW0gdCBUaGUgbmV4dCBpbnB1dCBzeW1ib2xcbi8vXG4vLyBAcmV0dXJuIFRoZSBjb21wdXRlZCB0YXJnZXQgREZBIHN0YXRlIGZvciB0aGUgZ2l2ZW4gaW5wdXQgc3ltYm9sXG4vLyB7QGNvZGUgdH0uIElmIHtAY29kZSB0fSBkb2VzIG5vdCBsZWFkIHRvIGEgdmFsaWQgREZBIHN0YXRlLCB0aGlzIG1ldGhvZFxuLy8gcmV0dXJucyB7QGxpbmsgLy9FUlJPUn0uXG5MZXhlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuY29tcHV0ZVRhcmdldFN0YXRlID0gZnVuY3Rpb24oaW5wdXQsIHMsIHQpIHtcblx0dmFyIHJlYWNoID0gbmV3IE9yZGVyZWRBVE5Db25maWdTZXQoKTtcblx0Ly8gaWYgd2UgZG9uJ3QgZmluZCBhbiBleGlzdGluZyBERkEgc3RhdGVcblx0Ly8gRmlsbCByZWFjaCBzdGFydGluZyBmcm9tIGNsb3N1cmUsIGZvbGxvd2luZyB0IHRyYW5zaXRpb25zXG5cdHRoaXMuZ2V0UmVhY2hhYmxlQ29uZmlnU2V0KGlucHV0LCBzLmNvbmZpZ3MsIHJlYWNoLCB0KTtcblxuXHRpZiAocmVhY2guaXRlbXMubGVuZ3RoID09PSAwKSB7IC8vIHdlIGdvdCBub3doZXJlIG9uIHQgZnJvbSBzXG5cdFx0aWYgKCFyZWFjaC5oYXNTZW1hbnRpY0NvbnRleHQpIHtcblx0XHRcdC8vIHdlIGdvdCBub3doZXJlIG9uIHQsIGRvbid0IHRocm93IG91dCB0aGlzIGtub3dsZWRnZTsgaXQnZFxuXHRcdFx0Ly8gY2F1c2UgYSBmYWlsb3ZlciBmcm9tIERGQSBsYXRlci5cblx0XHRcdHRoaXMuYWRkREZBRWRnZShzLCB0LCBBVE5TaW11bGF0b3IuRVJST1IpO1xuXHRcdH1cblx0XHQvLyBzdG9wIHdoZW4gd2UgY2FuJ3QgbWF0Y2ggYW55IG1vcmUgY2hhclxuXHRcdHJldHVybiBBVE5TaW11bGF0b3IuRVJST1I7XG5cdH1cblx0Ly8gQWRkIGFuIGVkZ2UgZnJvbSBzIHRvIHRhcmdldCBERkEgZm91bmQvY3JlYXRlZCBmb3IgcmVhY2hcblx0cmV0dXJuIHRoaXMuYWRkREZBRWRnZShzLCB0LCBudWxsLCByZWFjaCk7XG59O1xuXG5MZXhlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZmFpbE9yQWNjZXB0ID0gZnVuY3Rpb24ocHJldkFjY2VwdCwgaW5wdXQsIHJlYWNoLCB0KSB7XG5cdGlmICh0aGlzLnByZXZBY2NlcHQuZGZhU3RhdGUgIT09IG51bGwpIHtcblx0XHR2YXIgbGV4ZXJBY3Rpb25FeGVjdXRvciA9IHByZXZBY2NlcHQuZGZhU3RhdGUubGV4ZXJBY3Rpb25FeGVjdXRvcjtcblx0XHR0aGlzLmFjY2VwdChpbnB1dCwgbGV4ZXJBY3Rpb25FeGVjdXRvciwgdGhpcy5zdGFydEluZGV4LFxuXHRcdFx0XHRwcmV2QWNjZXB0LmluZGV4LCBwcmV2QWNjZXB0LmxpbmUsIHByZXZBY2NlcHQuY29sdW1uKTtcblx0XHRyZXR1cm4gcHJldkFjY2VwdC5kZmFTdGF0ZS5wcmVkaWN0aW9uO1xuXHR9IGVsc2Uge1xuXHRcdC8vIGlmIG5vIGFjY2VwdCBhbmQgRU9GIGlzIGZpcnN0IGNoYXIsIHJldHVybiBFT0Zcblx0XHRpZiAodCA9PT0gVG9rZW4uRU9GICYmIGlucHV0LmluZGV4ID09PSB0aGlzLnN0YXJ0SW5kZXgpIHtcblx0XHRcdHJldHVybiBUb2tlbi5FT0Y7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBMZXhlck5vVmlhYmxlQWx0RXhjZXB0aW9uKHRoaXMucmVjb2csIGlucHV0LCB0aGlzLnN0YXJ0SW5kZXgsIHJlYWNoKTtcblx0fVxufTtcblxuLy8gR2l2ZW4gYSBzdGFydGluZyBjb25maWd1cmF0aW9uIHNldCwgZmlndXJlIG91dCBhbGwgQVROIGNvbmZpZ3VyYXRpb25zXG4vLyB3ZSBjYW4gcmVhY2ggdXBvbiBpbnB1dCB7QGNvZGUgdH0uIFBhcmFtZXRlciB7QGNvZGUgcmVhY2h9IGlzIGEgcmV0dXJuXG4vLyBwYXJhbWV0ZXIuXG5MZXhlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0UmVhY2hhYmxlQ29uZmlnU2V0ID0gZnVuY3Rpb24oaW5wdXQsIGNsb3N1cmUsXG5cdFx0cmVhY2gsIHQpIHtcblx0Ly8gdGhpcyBpcyB1c2VkIHRvIHNraXAgcHJvY2Vzc2luZyBmb3IgY29uZmlncyB3aGljaCBoYXZlIGEgbG93ZXIgcHJpb3JpdHlcblx0Ly8gdGhhbiBhIGNvbmZpZyB0aGF0IGFscmVhZHkgcmVhY2hlZCBhbiBhY2NlcHQgc3RhdGUgZm9yIHRoZSBzYW1lIHJ1bGVcblx0dmFyIHNraXBBbHQgPSBBVE4uSU5WQUxJRF9BTFRfTlVNQkVSO1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IGNsb3N1cmUuaXRlbXMubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgY2ZnID0gY2xvc3VyZS5pdGVtc1tpXTtcblx0XHR2YXIgY3VycmVudEFsdFJlYWNoZWRBY2NlcHRTdGF0ZSA9IChjZmcuYWx0ID09PSBza2lwQWx0KTtcblx0XHRpZiAoY3VycmVudEFsdFJlYWNoZWRBY2NlcHRTdGF0ZSAmJiBjZmcucGFzc2VkVGhyb3VnaE5vbkdyZWVkeURlY2lzaW9uKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cdFx0aWYgKExleGVyQVROU2ltdWxhdG9yLmRlYnVnKSB7XG5cdFx0XHRjb25zb2xlLmxvZyhcInRlc3RpbmcgJXMgYXQgJXNcXG5cIiwgdGhpcy5nZXRUb2tlbk5hbWUodCksIGNmZ1xuXHRcdFx0XHRcdC50b1N0cmluZyh0aGlzLnJlY29nLCB0cnVlKSk7XG5cdFx0fVxuXHRcdGZvciAodmFyIGogPSAwOyBqIDwgY2ZnLnN0YXRlLnRyYW5zaXRpb25zLmxlbmd0aDsgaisrKSB7XG5cdFx0XHR2YXIgdHJhbnMgPSBjZmcuc3RhdGUudHJhbnNpdGlvbnNbal07IC8vIGZvciBlYWNoIHRyYW5zaXRpb25cblx0XHRcdHZhciB0YXJnZXQgPSB0aGlzLmdldFJlYWNoYWJsZVRhcmdldCh0cmFucywgdCk7XG5cdFx0XHRpZiAodGFyZ2V0ICE9PSBudWxsKSB7XG5cdFx0XHRcdHZhciBsZXhlckFjdGlvbkV4ZWN1dG9yID0gY2ZnLmxleGVyQWN0aW9uRXhlY3V0b3I7XG5cdFx0XHRcdGlmIChsZXhlckFjdGlvbkV4ZWN1dG9yICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0bGV4ZXJBY3Rpb25FeGVjdXRvciA9IGxleGVyQWN0aW9uRXhlY3V0b3IuZml4T2Zmc2V0QmVmb3JlTWF0Y2goaW5wdXQuaW5kZXggLSB0aGlzLnN0YXJ0SW5kZXgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHZhciB0cmVhdEVvZkFzRXBzaWxvbiA9ICh0ID09PSBUb2tlbi5FT0YpO1xuXHRcdFx0XHR2YXIgY29uZmlnID0gbmV3IExleGVyQVROQ29uZmlnKHtzdGF0ZTp0YXJnZXQsIGxleGVyQWN0aW9uRXhlY3V0b3I6bGV4ZXJBY3Rpb25FeGVjdXRvcn0sIGNmZyk7XG5cdFx0XHRcdGlmICh0aGlzLmNsb3N1cmUoaW5wdXQsIGNvbmZpZywgcmVhY2gsXG5cdFx0XHRcdFx0XHRjdXJyZW50QWx0UmVhY2hlZEFjY2VwdFN0YXRlLCB0cnVlLCB0cmVhdEVvZkFzRXBzaWxvbikpIHtcblx0XHRcdFx0XHQvLyBhbnkgcmVtYWluaW5nIGNvbmZpZ3MgZm9yIHRoaXMgYWx0IGhhdmUgYSBsb3dlciBwcmlvcml0eVxuXHRcdFx0XHRcdC8vIHRoYW4gdGhlIG9uZSB0aGF0IGp1c3QgcmVhY2hlZCBhbiBhY2NlcHQgc3RhdGUuXG5cdFx0XHRcdFx0c2tpcEFsdCA9IGNmZy5hbHQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbihpbnB1dCwgbGV4ZXJBY3Rpb25FeGVjdXRvcixcblx0XHRzdGFydEluZGV4LCBpbmRleCwgbGluZSwgY2hhclBvcykge1xuXHRpZiAoTGV4ZXJBVE5TaW11bGF0b3IuZGVidWcpIHtcblx0XHRjb25zb2xlLmxvZyhcIkFDVElPTiAlc1xcblwiLCBsZXhlckFjdGlvbkV4ZWN1dG9yKTtcblx0fVxuXHQvLyBzZWVrIHRvIGFmdGVyIGxhc3QgY2hhciBpbiB0b2tlblxuXHRpbnB1dC5zZWVrKGluZGV4KTtcblx0dGhpcy5saW5lID0gbGluZTtcblx0dGhpcy5jb2x1bW4gPSBjaGFyUG9zO1xuXHRpZiAobGV4ZXJBY3Rpb25FeGVjdXRvciAhPT0gbnVsbCAmJiB0aGlzLnJlY29nICE9PSBudWxsKSB7XG5cdFx0bGV4ZXJBY3Rpb25FeGVjdXRvci5leGVjdXRlKHRoaXMucmVjb2csIGlucHV0LCBzdGFydEluZGV4KTtcblx0fVxufTtcblxuTGV4ZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmdldFJlYWNoYWJsZVRhcmdldCA9IGZ1bmN0aW9uKHRyYW5zLCB0KSB7XG5cdGlmICh0cmFucy5tYXRjaGVzKHQsIDAsIExleGVyLk1BWF9DSEFSX1ZBTFVFKSkge1xuXHRcdHJldHVybiB0cmFucy50YXJnZXQ7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cbn07XG5cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5jb21wdXRlU3RhcnRTdGF0ZSA9IGZ1bmN0aW9uKGlucHV0LCBwKSB7XG5cdHZhciBpbml0aWFsQ29udGV4dCA9IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZO1xuXHR2YXIgY29uZmlncyA9IG5ldyBPcmRlcmVkQVROQ29uZmlnU2V0KCk7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgcC50cmFuc2l0aW9ucy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciB0YXJnZXQgPSBwLnRyYW5zaXRpb25zW2ldLnRhcmdldDtcbiAgICAgICAgdmFyIGNmZyA9IG5ldyBMZXhlckFUTkNvbmZpZyh7c3RhdGU6dGFyZ2V0LCBhbHQ6aSsxLCBjb250ZXh0OmluaXRpYWxDb250ZXh0fSwgbnVsbCk7XG5cdFx0dGhpcy5jbG9zdXJlKGlucHV0LCBjZmcsIGNvbmZpZ3MsIGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xuXHR9XG5cdHJldHVybiBjb25maWdzO1xufTtcblxuLy8gU2luY2UgdGhlIGFsdGVybmF0aXZlcyB3aXRoaW4gYW55IGxleGVyIGRlY2lzaW9uIGFyZSBvcmRlcmVkIGJ5XG4vLyBwcmVmZXJlbmNlLCB0aGlzIG1ldGhvZCBzdG9wcyBwdXJzdWluZyB0aGUgY2xvc3VyZSBhcyBzb29uIGFzIGFuIGFjY2VwdFxuLy8gc3RhdGUgaXMgcmVhY2hlZC4gQWZ0ZXIgdGhlIGZpcnN0IGFjY2VwdCBzdGF0ZSBpcyByZWFjaGVkIGJ5IGRlcHRoLWZpcnN0XG4vLyBzZWFyY2ggZnJvbSB7QGNvZGUgY29uZmlnfSwgYWxsIG90aGVyIChwb3RlbnRpYWxseSByZWFjaGFibGUpIHN0YXRlcyBmb3Jcbi8vIHRoaXMgcnVsZSB3b3VsZCBoYXZlIGEgbG93ZXIgcHJpb3JpdHkuXG4vL1xuLy8gQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgYW4gYWNjZXB0IHN0YXRlIGlzIHJlYWNoZWQsIG90aGVyd2lzZVxuLy8ge0Bjb2RlIGZhbHNlfS5cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5jbG9zdXJlID0gZnVuY3Rpb24oaW5wdXQsIGNvbmZpZywgY29uZmlncyxcblx0XHRjdXJyZW50QWx0UmVhY2hlZEFjY2VwdFN0YXRlLCBzcGVjdWxhdGl2ZSwgdHJlYXRFb2ZBc0Vwc2lsb24pIHtcblx0dmFyIGNmZyA9IG51bGw7XG5cdGlmIChMZXhlckFUTlNpbXVsYXRvci5kZWJ1Zykge1xuXHRcdGNvbnNvbGUubG9nKFwiY2xvc3VyZShcIiArIGNvbmZpZy50b1N0cmluZyh0aGlzLnJlY29nLCB0cnVlKSArIFwiKVwiKTtcblx0fVxuXHRpZiAoY29uZmlnLnN0YXRlIGluc3RhbmNlb2YgUnVsZVN0b3BTdGF0ZSkge1xuXHRcdGlmIChMZXhlckFUTlNpbXVsYXRvci5kZWJ1Zykge1xuXHRcdFx0aWYgKHRoaXMucmVjb2cgIT09IG51bGwpIHtcblx0XHRcdFx0Y29uc29sZS5sb2coXCJjbG9zdXJlIGF0ICVzIHJ1bGUgc3RvcCAlc1xcblwiLCB0aGlzLnJlY29nLnJ1bGVOYW1lc1tjb25maWcuc3RhdGUucnVsZUluZGV4XSwgY29uZmlnKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnNvbGUubG9nKFwiY2xvc3VyZSBhdCBydWxlIHN0b3AgJXNcXG5cIiwgY29uZmlnKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKGNvbmZpZy5jb250ZXh0ID09PSBudWxsIHx8IGNvbmZpZy5jb250ZXh0Lmhhc0VtcHR5UGF0aCgpKSB7XG5cdFx0XHRpZiAoY29uZmlnLmNvbnRleHQgPT09IG51bGwgfHwgY29uZmlnLmNvbnRleHQuaXNFbXB0eSgpKSB7XG5cdFx0XHRcdGNvbmZpZ3MuYWRkKGNvbmZpZyk7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uZmlncy5hZGQobmV3IExleGVyQVROQ29uZmlnKHsgc3RhdGU6Y29uZmlnLnN0YXRlLCBjb250ZXh0OlByZWRpY3Rpb25Db250ZXh0LkVNUFRZfSwgY29uZmlnKSk7XG5cdFx0XHRcdGN1cnJlbnRBbHRSZWFjaGVkQWNjZXB0U3RhdGUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoY29uZmlnLmNvbnRleHQgIT09IG51bGwgJiYgIWNvbmZpZy5jb250ZXh0LmlzRW1wdHkoKSkge1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBjb25maWcuY29udGV4dC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAoY29uZmlnLmNvbnRleHQuZ2V0UmV0dXJuU3RhdGUoaSkgIT09IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZX1JFVFVSTl9TVEFURSkge1xuXHRcdFx0XHRcdHZhciBuZXdDb250ZXh0ID0gY29uZmlnLmNvbnRleHQuZ2V0UGFyZW50KGkpOyAvLyBcInBvcFwiIHJldHVybiBzdGF0ZVxuXHRcdFx0XHRcdHZhciByZXR1cm5TdGF0ZSA9IHRoaXMuYXRuLnN0YXRlc1tjb25maWcuY29udGV4dC5nZXRSZXR1cm5TdGF0ZShpKV07XG5cdFx0XHRcdFx0Y2ZnID0gbmV3IExleGVyQVROQ29uZmlnKHsgc3RhdGU6cmV0dXJuU3RhdGUsIGNvbnRleHQ6bmV3Q29udGV4dCB9LCBjb25maWcpO1xuXHRcdFx0XHRcdGN1cnJlbnRBbHRSZWFjaGVkQWNjZXB0U3RhdGUgPSB0aGlzLmNsb3N1cmUoaW5wdXQsIGNmZyxcblx0XHRcdFx0XHRcdFx0Y29uZmlncywgY3VycmVudEFsdFJlYWNoZWRBY2NlcHRTdGF0ZSwgc3BlY3VsYXRpdmUsXG5cdFx0XHRcdFx0XHRcdHRyZWF0RW9mQXNFcHNpbG9uKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gY3VycmVudEFsdFJlYWNoZWRBY2NlcHRTdGF0ZTtcblx0fVxuXHQvLyBvcHRpbWl6YXRpb25cblx0aWYgKCFjb25maWcuc3RhdGUuZXBzaWxvbk9ubHlUcmFuc2l0aW9ucykge1xuXHRcdGlmICghY3VycmVudEFsdFJlYWNoZWRBY2NlcHRTdGF0ZSB8fCAhY29uZmlnLnBhc3NlZFRocm91Z2hOb25HcmVlZHlEZWNpc2lvbikge1xuXHRcdFx0Y29uZmlncy5hZGQoY29uZmlnKTtcblx0XHR9XG5cdH1cblx0Zm9yICh2YXIgaiA9IDA7IGogPCBjb25maWcuc3RhdGUudHJhbnNpdGlvbnMubGVuZ3RoOyBqKyspIHtcblx0XHR2YXIgdHJhbnMgPSBjb25maWcuc3RhdGUudHJhbnNpdGlvbnNbal07XG5cdFx0Y2ZnID0gdGhpcy5nZXRFcHNpbG9uVGFyZ2V0KGlucHV0LCBjb25maWcsIHRyYW5zLCBjb25maWdzLCBzcGVjdWxhdGl2ZSwgdHJlYXRFb2ZBc0Vwc2lsb24pO1xuXHRcdGlmIChjZmcgIT09IG51bGwpIHtcblx0XHRcdGN1cnJlbnRBbHRSZWFjaGVkQWNjZXB0U3RhdGUgPSB0aGlzLmNsb3N1cmUoaW5wdXQsIGNmZywgY29uZmlncyxcblx0XHRcdFx0XHRjdXJyZW50QWx0UmVhY2hlZEFjY2VwdFN0YXRlLCBzcGVjdWxhdGl2ZSwgdHJlYXRFb2ZBc0Vwc2lsb24pO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gY3VycmVudEFsdFJlYWNoZWRBY2NlcHRTdGF0ZTtcbn07XG5cbi8vIHNpZGUtZWZmZWN0OiBjYW4gYWx0ZXIgY29uZmlncy5oYXNTZW1hbnRpY0NvbnRleHRcbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5nZXRFcHNpbG9uVGFyZ2V0ID0gZnVuY3Rpb24oaW5wdXQsIGNvbmZpZywgdHJhbnMsXG5cdFx0Y29uZmlncywgc3BlY3VsYXRpdmUsIHRyZWF0RW9mQXNFcHNpbG9uKSB7XG5cdHZhciBjZmcgPSBudWxsO1xuXHRpZiAodHJhbnMuc2VyaWFsaXphdGlvblR5cGUgPT09IFRyYW5zaXRpb24uUlVMRSkge1xuXHRcdHZhciBuZXdDb250ZXh0ID0gU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQuY3JlYXRlKGNvbmZpZy5jb250ZXh0LCB0cmFucy5mb2xsb3dTdGF0ZS5zdGF0ZU51bWJlcik7XG5cdFx0Y2ZnID0gbmV3IExleGVyQVROQ29uZmlnKCB7IHN0YXRlOnRyYW5zLnRhcmdldCwgY29udGV4dDpuZXdDb250ZXh0fSwgY29uZmlnKTtcblx0fSBlbHNlIGlmICh0cmFucy5zZXJpYWxpemF0aW9uVHlwZSA9PT0gVHJhbnNpdGlvbi5QUkVDRURFTkNFKSB7XG5cdFx0dGhyb3cgXCJQcmVjZWRlbmNlIHByZWRpY2F0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gbGV4ZXJzLlwiO1xuXHR9IGVsc2UgaWYgKHRyYW5zLnNlcmlhbGl6YXRpb25UeXBlID09PSBUcmFuc2l0aW9uLlBSRURJQ0FURSkge1xuXHRcdC8vIFRyYWNrIHRyYXZlcnNpbmcgc2VtYW50aWMgcHJlZGljYXRlcy4gSWYgd2UgdHJhdmVyc2UsXG5cdFx0Ly8gd2UgY2Fubm90IGFkZCBhIERGQSBzdGF0ZSBmb3IgdGhpcyBcInJlYWNoXCIgY29tcHV0YXRpb25cblx0XHQvLyBiZWNhdXNlIHRoZSBERkEgd291bGQgbm90IHRlc3QgdGhlIHByZWRpY2F0ZSBhZ2FpbiBpbiB0aGVcblx0XHQvLyBmdXR1cmUuIFJhdGhlciB0aGFuIGNyZWF0aW5nIGNvbGxlY3Rpb25zIG9mIHNlbWFudGljIHByZWRpY2F0ZXNcblx0XHQvLyBsaWtlIHYzIGFuZCB0ZXN0aW5nIHRoZW0gb24gcHJlZGljdGlvbiwgdjQgd2lsbCB0ZXN0IHRoZW0gb24gdGhlXG5cdFx0Ly8gZmx5IGFsbCB0aGUgdGltZSB1c2luZyB0aGUgQVROIG5vdCB0aGUgREZBLiBUaGlzIGlzIHNsb3dlciBidXRcblx0XHQvLyBzZW1hbnRpY2FsbHkgaXQncyBub3QgdXNlZCB0aGF0IG9mdGVuLiBPbmUgb2YgdGhlIGtleSBlbGVtZW50cyB0b1xuXHRcdC8vIHRoaXMgcHJlZGljYXRlIG1lY2hhbmlzbSBpcyBub3QgYWRkaW5nIERGQSBzdGF0ZXMgdGhhdCBzZWVcblx0XHQvLyBwcmVkaWNhdGVzIGltbWVkaWF0ZWx5IGFmdGVyd2FyZHMgaW4gdGhlIEFUTi4gRm9yIGV4YW1wbGUsXG5cblx0XHQvLyBhIDogSUQge3AxfT8gfCBJRCB7cDJ9PyA7XG5cblx0XHQvLyBzaG91bGQgY3JlYXRlIHRoZSBzdGFydCBzdGF0ZSBmb3IgcnVsZSAnYScgKHRvIHNhdmUgc3RhcnQgc3RhdGVcblx0XHQvLyBjb21wZXRpdGlvbiksIGJ1dCBzaG91bGQgbm90IGNyZWF0ZSB0YXJnZXQgb2YgSUQgc3RhdGUuIFRoZVxuXHRcdC8vIGNvbGxlY3Rpb24gb2YgQVROIHN0YXRlcyB0aGUgZm9sbG93aW5nIElEIHJlZmVyZW5jZXMgaW5jbHVkZXNcblx0XHQvLyBzdGF0ZXMgcmVhY2hlZCBieSB0cmF2ZXJzaW5nIHByZWRpY2F0ZXMuIFNpbmNlIHRoaXMgaXMgd2hlbiB3ZVxuXHRcdC8vIHRlc3QgdGhlbSwgd2UgY2Fubm90IGNhc2ggdGhlIERGQSBzdGF0ZSB0YXJnZXQgb2YgSUQuXG5cblx0XHRpZiAoTGV4ZXJBVE5TaW11bGF0b3IuZGVidWcpIHtcblx0XHRcdGNvbnNvbGUubG9nKFwiRVZBTCBydWxlIFwiICsgdHJhbnMucnVsZUluZGV4ICsgXCI6XCIgKyB0cmFucy5wcmVkSW5kZXgpO1xuXHRcdH1cblx0XHRjb25maWdzLmhhc1NlbWFudGljQ29udGV4dCA9IHRydWU7XG5cdFx0aWYgKHRoaXMuZXZhbHVhdGVQcmVkaWNhdGUoaW5wdXQsIHRyYW5zLnJ1bGVJbmRleCwgdHJhbnMucHJlZEluZGV4LCBzcGVjdWxhdGl2ZSkpIHtcblx0XHRcdGNmZyA9IG5ldyBMZXhlckFUTkNvbmZpZyh7IHN0YXRlOnRyYW5zLnRhcmdldH0sIGNvbmZpZyk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKHRyYW5zLnNlcmlhbGl6YXRpb25UeXBlID09PSBUcmFuc2l0aW9uLkFDVElPTikge1xuXHRcdGlmIChjb25maWcuY29udGV4dCA9PT0gbnVsbCB8fCBjb25maWcuY29udGV4dC5oYXNFbXB0eVBhdGgoKSkge1xuXHRcdFx0Ly8gZXhlY3V0ZSBhY3Rpb25zIGFueXdoZXJlIGluIHRoZSBzdGFydCBydWxlIGZvciBhIHRva2VuLlxuXHRcdFx0Ly9cblx0XHRcdC8vIFRPRE86IGlmIHRoZSBlbnRyeSBydWxlIGlzIGludm9rZWQgcmVjdXJzaXZlbHksIHNvbWVcblx0XHRcdC8vIGFjdGlvbnMgbWF5IGJlIGV4ZWN1dGVkIGR1cmluZyB0aGUgcmVjdXJzaXZlIGNhbGwuIFRoZVxuXHRcdFx0Ly8gcHJvYmxlbSBjYW4gYXBwZWFyIHdoZW4gaGFzRW1wdHlQYXRoKCkgaXMgdHJ1ZSBidXRcblx0XHRcdC8vIGlzRW1wdHkoKSBpcyBmYWxzZS4gSW4gdGhpcyBjYXNlLCB0aGUgY29uZmlnIG5lZWRzIHRvIGJlXG5cdFx0XHQvLyBzcGxpdCBpbnRvIHR3byBjb250ZXh0cyAtIG9uZSB3aXRoIGp1c3QgdGhlIGVtcHR5IHBhdGhcblx0XHRcdC8vIGFuZCBhbm90aGVyIHdpdGggZXZlcnl0aGluZyBidXQgdGhlIGVtcHR5IHBhdGguXG5cdFx0XHQvLyBVbmZvcnR1bmF0ZWx5LCB0aGUgY3VycmVudCBhbGdvcml0aG0gZG9lcyBub3QgYWxsb3dcblx0XHRcdC8vIGdldEVwc2lsb25UYXJnZXQgdG8gcmV0dXJuIHR3byBjb25maWd1cmF0aW9ucywgc29cblx0XHRcdC8vIGFkZGl0aW9uYWwgbW9kaWZpY2F0aW9ucyBhcmUgbmVlZGVkIGJlZm9yZSB3ZSBjYW4gc3VwcG9ydFxuXHRcdFx0Ly8gdGhlIHNwbGl0IG9wZXJhdGlvbi5cblx0XHRcdHZhciBsZXhlckFjdGlvbkV4ZWN1dG9yID0gTGV4ZXJBY3Rpb25FeGVjdXRvci5hcHBlbmQoY29uZmlnLmxleGVyQWN0aW9uRXhlY3V0b3IsXG5cdFx0XHRcdFx0dGhpcy5hdG4ubGV4ZXJBY3Rpb25zW3RyYW5zLmFjdGlvbkluZGV4XSk7XG5cdFx0XHRjZmcgPSBuZXcgTGV4ZXJBVE5Db25maWcoeyBzdGF0ZTp0cmFucy50YXJnZXQsIGxleGVyQWN0aW9uRXhlY3V0b3I6bGV4ZXJBY3Rpb25FeGVjdXRvciB9LCBjb25maWcpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBpZ25vcmUgYWN0aW9ucyBpbiByZWZlcmVuY2VkIHJ1bGVzXG5cdFx0XHRjZmcgPSBuZXcgTGV4ZXJBVE5Db25maWcoIHsgc3RhdGU6dHJhbnMudGFyZ2V0fSwgY29uZmlnKTtcblx0XHR9XG5cdH0gZWxzZSBpZiAodHJhbnMuc2VyaWFsaXphdGlvblR5cGUgPT09IFRyYW5zaXRpb24uRVBTSUxPTikge1xuXHRcdGNmZyA9IG5ldyBMZXhlckFUTkNvbmZpZyh7IHN0YXRlOnRyYW5zLnRhcmdldH0sIGNvbmZpZyk7XG5cdH0gZWxzZSBpZiAodHJhbnMuc2VyaWFsaXphdGlvblR5cGUgPT09IFRyYW5zaXRpb24uQVRPTSB8fFxuXHRcdFx0XHR0cmFucy5zZXJpYWxpemF0aW9uVHlwZSA9PT0gVHJhbnNpdGlvbi5SQU5HRSB8fFxuXHRcdFx0XHR0cmFucy5zZXJpYWxpemF0aW9uVHlwZSA9PT0gVHJhbnNpdGlvbi5TRVQpIHtcblx0XHRpZiAodHJlYXRFb2ZBc0Vwc2lsb24pIHtcblx0XHRcdGlmICh0cmFucy5tYXRjaGVzKFRva2VuLkVPRiwgMCwgTGV4ZXIuTUFYX0NIQVJfVkFMVUUpKSB7XG5cdFx0XHRcdGNmZyA9IG5ldyBMZXhlckFUTkNvbmZpZyggeyBzdGF0ZTp0cmFucy50YXJnZXQgfSwgY29uZmlnKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIGNmZztcbn07XG5cbi8vIEV2YWx1YXRlIGEgcHJlZGljYXRlIHNwZWNpZmllZCBpbiB0aGUgbGV4ZXIuXG4vL1xuLy8gPHA+SWYge0Bjb2RlIHNwZWN1bGF0aXZlfSBpcyB7QGNvZGUgdHJ1ZX0sIHRoaXMgbWV0aG9kIHdhcyBjYWxsZWQgYmVmb3JlXG4vLyB7QGxpbmsgLy9jb25zdW1lfSBmb3IgdGhlIG1hdGNoZWQgY2hhcmFjdGVyLiBUaGlzIG1ldGhvZCBzaG91bGQgY2FsbFxuLy8ge0BsaW5rIC8vY29uc3VtZX0gYmVmb3JlIGV2YWx1YXRpbmcgdGhlIHByZWRpY2F0ZSB0byBlbnN1cmUgcG9zaXRpb25cbi8vIHNlbnNpdGl2ZSB2YWx1ZXMsIGluY2x1ZGluZyB7QGxpbmsgTGV4ZXIvL2dldFRleHR9LCB7QGxpbmsgTGV4ZXIvL2dldExpbmV9LFxuLy8gYW5kIHtAbGluayBMZXhlci8vZ2V0Y29sdW1ufSwgcHJvcGVybHkgcmVmbGVjdCB0aGUgY3VycmVudFxuLy8gbGV4ZXIgc3RhdGUuIFRoaXMgbWV0aG9kIHNob3VsZCByZXN0b3JlIHtAY29kZSBpbnB1dH0gYW5kIHRoZSBzaW11bGF0b3Jcbi8vIHRvIHRoZSBvcmlnaW5hbCBzdGF0ZSBiZWZvcmUgcmV0dXJuaW5nIChpLmUuIHVuZG8gdGhlIGFjdGlvbnMgbWFkZSBieSB0aGVcbi8vIGNhbGwgdG8ge0BsaW5rIC8vY29uc3VtZX0uPC9wPlxuLy9cbi8vIEBwYXJhbSBpbnB1dCBUaGUgaW5wdXQgc3RyZWFtLlxuLy8gQHBhcmFtIHJ1bGVJbmRleCBUaGUgcnVsZSBjb250YWluaW5nIHRoZSBwcmVkaWNhdGUuXG4vLyBAcGFyYW0gcHJlZEluZGV4IFRoZSBpbmRleCBvZiB0aGUgcHJlZGljYXRlIHdpdGhpbiB0aGUgcnVsZS5cbi8vIEBwYXJhbSBzcGVjdWxhdGl2ZSB7QGNvZGUgdHJ1ZX0gaWYgdGhlIGN1cnJlbnQgaW5kZXggaW4ge0Bjb2RlIGlucHV0fSBpc1xuLy8gb25lIGNoYXJhY3RlciBiZWZvcmUgdGhlIHByZWRpY2F0ZSdzIGxvY2F0aW9uLlxuLy9cbi8vIEByZXR1cm4ge0Bjb2RlIHRydWV9IGlmIHRoZSBzcGVjaWZpZWQgcHJlZGljYXRlIGV2YWx1YXRlcyB0b1xuLy8ge0Bjb2RlIHRydWV9LlxuLy8gL1xuTGV4ZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmV2YWx1YXRlUHJlZGljYXRlID0gZnVuY3Rpb24oaW5wdXQsIHJ1bGVJbmRleCxcblx0XHRwcmVkSW5kZXgsIHNwZWN1bGF0aXZlKSB7XG5cdC8vIGFzc3VtZSB0cnVlIGlmIG5vIHJlY29nbml6ZXIgd2FzIHByb3ZpZGVkXG5cdGlmICh0aGlzLnJlY29nID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0aWYgKCFzcGVjdWxhdGl2ZSkge1xuXHRcdHJldHVybiB0aGlzLnJlY29nLnNlbXByZWQobnVsbCwgcnVsZUluZGV4LCBwcmVkSW5kZXgpO1xuXHR9XG5cdHZhciBzYXZlZGNvbHVtbiA9IHRoaXMuY29sdW1uO1xuXHR2YXIgc2F2ZWRMaW5lID0gdGhpcy5saW5lO1xuXHR2YXIgaW5kZXggPSBpbnB1dC5pbmRleDtcblx0dmFyIG1hcmtlciA9IGlucHV0Lm1hcmsoKTtcblx0dHJ5IHtcblx0XHR0aGlzLmNvbnN1bWUoaW5wdXQpO1xuXHRcdHJldHVybiB0aGlzLnJlY29nLnNlbXByZWQobnVsbCwgcnVsZUluZGV4LCBwcmVkSW5kZXgpO1xuXHR9IGZpbmFsbHkge1xuXHRcdHRoaXMuY29sdW1uID0gc2F2ZWRjb2x1bW47XG5cdFx0dGhpcy5saW5lID0gc2F2ZWRMaW5lO1xuXHRcdGlucHV0LnNlZWsoaW5kZXgpO1xuXHRcdGlucHV0LnJlbGVhc2UobWFya2VyKTtcblx0fVxufTtcblxuTGV4ZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmNhcHR1cmVTaW1TdGF0ZSA9IGZ1bmN0aW9uKHNldHRpbmdzLCBpbnB1dCwgZGZhU3RhdGUpIHtcblx0c2V0dGluZ3MuaW5kZXggPSBpbnB1dC5pbmRleDtcblx0c2V0dGluZ3MubGluZSA9IHRoaXMubGluZTtcblx0c2V0dGluZ3MuY29sdW1uID0gdGhpcy5jb2x1bW47XG5cdHNldHRpbmdzLmRmYVN0YXRlID0gZGZhU3RhdGU7XG59O1xuXG5MZXhlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuYWRkREZBRWRnZSA9IGZ1bmN0aW9uKGZyb21fLCB0aywgdG8sIGNmZ3MpIHtcblx0aWYgKHRvID09PSB1bmRlZmluZWQpIHtcblx0XHR0byA9IG51bGw7XG5cdH1cblx0aWYgKGNmZ3MgPT09IHVuZGVmaW5lZCkge1xuXHRcdGNmZ3MgPSBudWxsO1xuXHR9XG5cdGlmICh0byA9PT0gbnVsbCAmJiBjZmdzICE9PSBudWxsKSB7XG5cdFx0Ly8gbGVhZGluZyB0byB0aGlzIGNhbGwsIEFUTkNvbmZpZ1NldC5oYXNTZW1hbnRpY0NvbnRleHQgaXMgdXNlZCBhcyBhXG5cdFx0Ly8gbWFya2VyIGluZGljYXRpbmcgZHluYW1pYyBwcmVkaWNhdGUgZXZhbHVhdGlvbiBtYWtlcyB0aGlzIGVkZ2Vcblx0XHQvLyBkZXBlbmRlbnQgb24gdGhlIHNwZWNpZmljIGlucHV0IHNlcXVlbmNlLCBzbyB0aGUgc3RhdGljIGVkZ2UgaW4gdGhlXG5cdFx0Ly8gREZBIHNob3VsZCBiZSBvbWl0dGVkLiBUaGUgdGFyZ2V0IERGQVN0YXRlIGlzIHN0aWxsIGNyZWF0ZWQgc2luY2Vcblx0XHQvLyBleGVjQVROIGhhcyB0aGUgYWJpbGl0eSB0byByZXN5bmNocm9uaXplIHdpdGggdGhlIERGQSBzdGF0ZSBjYWNoZVxuXHRcdC8vIGZvbGxvd2luZyB0aGUgcHJlZGljYXRlIGV2YWx1YXRpb24gc3RlcC5cblx0XHQvL1xuXHRcdC8vIFRKUCBub3RlczogbmV4dCB0aW1lIHRocm91Z2ggdGhlIERGQSwgd2Ugc2VlIGEgcHJlZCBhZ2FpbiBhbmQgZXZhbC5cblx0XHQvLyBJZiB0aGF0IGdldHMgdXMgdG8gYSBwcmV2aW91c2x5IGNyZWF0ZWQgKGJ1dCBkYW5nbGluZykgREZBXG5cdFx0Ly8gc3RhdGUsIHdlIGNhbiBjb250aW51ZSBpbiBwdXJlIERGQSBtb2RlIGZyb20gdGhlcmUuXG5cdFx0Ly8gL1xuXHRcdHZhciBzdXBwcmVzc0VkZ2UgPSBjZmdzLmhhc1NlbWFudGljQ29udGV4dDtcblx0XHRjZmdzLmhhc1NlbWFudGljQ29udGV4dCA9IGZhbHNlO1xuXG5cdFx0dG8gPSB0aGlzLmFkZERGQVN0YXRlKGNmZ3MpO1xuXG5cdFx0aWYgKHN1cHByZXNzRWRnZSkge1xuXHRcdFx0cmV0dXJuIHRvO1xuXHRcdH1cblx0fVxuXHQvLyBhZGQgdGhlIGVkZ2Vcblx0aWYgKHRrIDwgTGV4ZXJBVE5TaW11bGF0b3IuTUlOX0RGQV9FREdFIHx8IHRrID4gTGV4ZXJBVE5TaW11bGF0b3IuTUFYX0RGQV9FREdFKSB7XG5cdFx0Ly8gT25seSB0cmFjayBlZGdlcyB3aXRoaW4gdGhlIERGQSBib3VuZHNcblx0XHRyZXR1cm4gdG87XG5cdH1cblx0aWYgKExleGVyQVROU2ltdWxhdG9yLmRlYnVnKSB7XG5cdFx0Y29uc29sZS5sb2coXCJFREdFIFwiICsgZnJvbV8gKyBcIiAtPiBcIiArIHRvICsgXCIgdXBvbiBcIiArIHRrKTtcblx0fVxuXHRpZiAoZnJvbV8uZWRnZXMgPT09IG51bGwpIHtcblx0XHQvLyBtYWtlIHJvb20gZm9yIHRva2VucyAxLi5uIGFuZCAtMSBtYXNxdWVyYWRpbmcgYXMgaW5kZXggMFxuXHRcdGZyb21fLmVkZ2VzID0gW107XG5cdH1cblx0ZnJvbV8uZWRnZXNbdGsgLSBMZXhlckFUTlNpbXVsYXRvci5NSU5fREZBX0VER0VdID0gdG87IC8vIGNvbm5lY3RcblxuXHRyZXR1cm4gdG87XG59O1xuXG4vLyBBZGQgYSBuZXcgREZBIHN0YXRlIGlmIHRoZXJlIGlzbid0IG9uZSB3aXRoIHRoaXMgc2V0IG9mXG4vLyBjb25maWd1cmF0aW9ucyBhbHJlYWR5LiBUaGlzIG1ldGhvZCBhbHNvIGRldGVjdHMgdGhlIGZpcnN0XG4vLyBjb25maWd1cmF0aW9uIGNvbnRhaW5pbmcgYW4gQVROIHJ1bGUgc3RvcCBzdGF0ZS4gTGF0ZXIsIHdoZW5cbi8vIHRyYXZlcnNpbmcgdGhlIERGQSwgd2Ugd2lsbCBrbm93IHdoaWNoIHJ1bGUgdG8gYWNjZXB0LlxuTGV4ZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmFkZERGQVN0YXRlID0gZnVuY3Rpb24oY29uZmlncykge1xuXHR2YXIgcHJvcG9zZWQgPSBuZXcgREZBU3RhdGUobnVsbCwgY29uZmlncyk7XG5cdHZhciBmaXJzdENvbmZpZ1dpdGhSdWxlU3RvcFN0YXRlID0gbnVsbDtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBjb25maWdzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIGNmZyA9IGNvbmZpZ3MuaXRlbXNbaV07XG5cdFx0aWYgKGNmZy5zdGF0ZSBpbnN0YW5jZW9mIFJ1bGVTdG9wU3RhdGUpIHtcblx0XHRcdGZpcnN0Q29uZmlnV2l0aFJ1bGVTdG9wU3RhdGUgPSBjZmc7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblx0aWYgKGZpcnN0Q29uZmlnV2l0aFJ1bGVTdG9wU3RhdGUgIT09IG51bGwpIHtcblx0XHRwcm9wb3NlZC5pc0FjY2VwdFN0YXRlID0gdHJ1ZTtcblx0XHRwcm9wb3NlZC5sZXhlckFjdGlvbkV4ZWN1dG9yID0gZmlyc3RDb25maWdXaXRoUnVsZVN0b3BTdGF0ZS5sZXhlckFjdGlvbkV4ZWN1dG9yO1xuXHRcdHByb3Bvc2VkLnByZWRpY3Rpb24gPSB0aGlzLmF0bi5ydWxlVG9Ub2tlblR5cGVbZmlyc3RDb25maWdXaXRoUnVsZVN0b3BTdGF0ZS5zdGF0ZS5ydWxlSW5kZXhdO1xuXHR9XG5cdHZhciBkZmEgPSB0aGlzLmRlY2lzaW9uVG9ERkFbdGhpcy5tb2RlXTtcblx0dmFyIGV4aXN0aW5nID0gZGZhLnN0YXRlcy5nZXQocHJvcG9zZWQpO1xuXHRpZiAoZXhpc3RpbmchPT1udWxsKSB7XG5cdFx0cmV0dXJuIGV4aXN0aW5nO1xuXHR9XG5cdHZhciBuZXdTdGF0ZSA9IHByb3Bvc2VkO1xuXHRuZXdTdGF0ZS5zdGF0ZU51bWJlciA9IGRmYS5zdGF0ZXMubGVuZ3RoO1xuXHRjb25maWdzLnNldFJlYWRvbmx5KHRydWUpO1xuXHRuZXdTdGF0ZS5jb25maWdzID0gY29uZmlncztcblx0ZGZhLnN0YXRlcy5hZGQobmV3U3RhdGUpO1xuXHRyZXR1cm4gbmV3U3RhdGU7XG59O1xuXG5MZXhlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0REZBID0gZnVuY3Rpb24obW9kZSkge1xuXHRyZXR1cm4gdGhpcy5kZWNpc2lvblRvREZBW21vZGVdO1xufTtcblxuLy8gR2V0IHRoZSB0ZXh0IG1hdGNoZWQgc28gZmFyIGZvciB0aGUgY3VycmVudCB0b2tlbi5cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5nZXRUZXh0ID0gZnVuY3Rpb24oaW5wdXQpIHtcblx0Ly8gaW5kZXggaXMgZmlyc3QgbG9va2FoZWFkIGNoYXIsIGRvbid0IGluY2x1ZGUuXG5cdHJldHVybiBpbnB1dC5nZXRUZXh0KHRoaXMuc3RhcnRJbmRleCwgaW5wdXQuaW5kZXggLSAxKTtcbn07XG5cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5jb25zdW1lID0gZnVuY3Rpb24oaW5wdXQpIHtcblx0dmFyIGN1ckNoYXIgPSBpbnB1dC5MQSgxKTtcblx0aWYgKGN1ckNoYXIgPT09IFwiXFxuXCIuY2hhckNvZGVBdCgwKSkge1xuXHRcdHRoaXMubGluZSArPSAxO1xuXHRcdHRoaXMuY29sdW1uID0gMDtcblx0fSBlbHNlIHtcblx0XHR0aGlzLmNvbHVtbiArPSAxO1xuXHR9XG5cdGlucHV0LmNvbnN1bWUoKTtcbn07XG5cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5nZXRUb2tlbk5hbWUgPSBmdW5jdGlvbih0dCkge1xuXHRpZiAodHQgPT09IC0xKSB7XG5cdFx0cmV0dXJuIFwiRU9GXCI7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFwiJ1wiICsgU3RyaW5nLmZyb21DaGFyQ29kZSh0dCkgKyBcIidcIjtcblx0fVxufTtcblxuZXhwb3J0cy5MZXhlckFUTlNpbXVsYXRvciA9IExleGVyQVROU2ltdWxhdG9yO1xuIiwiLy9cbi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbiAvL1xuXG5mdW5jdGlvbiBMZXhlckFjdGlvblR5cGUoKSB7XG59XG5cbkxleGVyQWN0aW9uVHlwZS5DSEFOTkVMID0gMDsgICAgIC8vVGhlIHR5cGUgb2YgYSB7QGxpbmsgTGV4ZXJDaGFubmVsQWN0aW9ufSBhY3Rpb24uXG5MZXhlckFjdGlvblR5cGUuQ1VTVE9NID0gMTsgICAgICAvL1RoZSB0eXBlIG9mIGEge0BsaW5rIExleGVyQ3VzdG9tQWN0aW9ufSBhY3Rpb24uXG5MZXhlckFjdGlvblR5cGUuTU9ERSA9IDI7ICAgICAgICAvL1RoZSB0eXBlIG9mIGEge0BsaW5rIExleGVyTW9kZUFjdGlvbn0gYWN0aW9uLlxuTGV4ZXJBY3Rpb25UeXBlLk1PUkUgPSAzOyAgICAgICAgLy9UaGUgdHlwZSBvZiBhIHtAbGluayBMZXhlck1vcmVBY3Rpb259IGFjdGlvbi5cbkxleGVyQWN0aW9uVHlwZS5QT1BfTU9ERSA9IDQ7ICAgIC8vVGhlIHR5cGUgb2YgYSB7QGxpbmsgTGV4ZXJQb3BNb2RlQWN0aW9ufSBhY3Rpb24uXG5MZXhlckFjdGlvblR5cGUuUFVTSF9NT0RFID0gNTsgICAvL1RoZSB0eXBlIG9mIGEge0BsaW5rIExleGVyUHVzaE1vZGVBY3Rpb259IGFjdGlvbi5cbkxleGVyQWN0aW9uVHlwZS5TS0lQID0gNjsgICAgICAgIC8vVGhlIHR5cGUgb2YgYSB7QGxpbmsgTGV4ZXJTa2lwQWN0aW9ufSBhY3Rpb24uXG5MZXhlckFjdGlvblR5cGUuVFlQRSA9IDc7ICAgICAgICAvL1RoZSB0eXBlIG9mIGEge0BsaW5rIExleGVyVHlwZUFjdGlvbn0gYWN0aW9uLlxuXG5mdW5jdGlvbiBMZXhlckFjdGlvbihhY3Rpb24pIHtcbiAgICB0aGlzLmFjdGlvblR5cGUgPSBhY3Rpb247XG4gICAgdGhpcy5pc1Bvc2l0aW9uRGVwZW5kZW50ID0gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkxleGVyQWN0aW9uLnByb3RvdHlwZS5oYXNoQ29kZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBoYXNoID0gbmV3IEhhc2goKTtcbiAgICB0aGlzLnVwZGF0ZUhhc2hDb2RlKGhhc2gpO1xuICAgIHJldHVybiBoYXNoLmZpbmlzaCgpXG59O1xuXG5MZXhlckFjdGlvbi5wcm90b3R5cGUudXBkYXRlSGFzaENvZGUgPSBmdW5jdGlvbihoYXNoKSB7XG4gICAgaGFzaC51cGRhdGUodGhpcy5hY3Rpb25UeXBlKTtcbn07XG5cbkxleGVyQWN0aW9uLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbihvdGhlcikge1xuICAgIHJldHVybiB0aGlzID09PSBvdGhlcjtcbn07XG5cblxuXG4vL1xuLy8gSW1wbGVtZW50cyB0aGUge0Bjb2RlIHNraXB9IGxleGVyIGFjdGlvbiBieSBjYWxsaW5nIHtAbGluayBMZXhlci8vc2tpcH0uXG4vL1xuLy8gPHA+VGhlIHtAY29kZSBza2lwfSBjb21tYW5kIGRvZXMgbm90IGhhdmUgYW55IHBhcmFtZXRlcnMsIHNvIHRoaXMgYWN0aW9uIGlzXG4vLyBpbXBsZW1lbnRlZCBhcyBhIHNpbmdsZXRvbiBpbnN0YW5jZSBleHBvc2VkIGJ5IHtAbGluayAvL0lOU1RBTkNFfS48L3A+XG5mdW5jdGlvbiBMZXhlclNraXBBY3Rpb24oKSB7XG5cdExleGVyQWN0aW9uLmNhbGwodGhpcywgTGV4ZXJBY3Rpb25UeXBlLlNLSVApO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuTGV4ZXJTa2lwQWN0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTGV4ZXJBY3Rpb24ucHJvdG90eXBlKTtcbkxleGVyU2tpcEFjdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMZXhlclNraXBBY3Rpb247XG5cbi8vIFByb3ZpZGVzIGEgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgcGFyYW1ldGVybGVzcyBsZXhlciBhY3Rpb24uXG5MZXhlclNraXBBY3Rpb24uSU5TVEFOQ0UgPSBuZXcgTGV4ZXJTa2lwQWN0aW9uKCk7XG5cbkxleGVyU2tpcEFjdGlvbi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGxleGVyKSB7XG4gICAgbGV4ZXIuc2tpcCgpO1xufTtcblxuTGV4ZXJTa2lwQWN0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gXCJza2lwXCI7XG59O1xuXG4vLyAgSW1wbGVtZW50cyB0aGUge0Bjb2RlIHR5cGV9IGxleGVyIGFjdGlvbiBieSBjYWxsaW5nIHtAbGluayBMZXhlci8vc2V0VHlwZX1cbi8vIHdpdGggdGhlIGFzc2lnbmVkIHR5cGUuXG5mdW5jdGlvbiBMZXhlclR5cGVBY3Rpb24odHlwZSkge1xuXHRMZXhlckFjdGlvbi5jYWxsKHRoaXMsIExleGVyQWN0aW9uVHlwZS5UWVBFKTtcblx0dGhpcy50eXBlID0gdHlwZTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkxleGVyVHlwZUFjdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKExleGVyQWN0aW9uLnByb3RvdHlwZSk7XG5MZXhlclR5cGVBY3Rpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTGV4ZXJUeXBlQWN0aW9uO1xuXG5MZXhlclR5cGVBY3Rpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihsZXhlcikge1xuICAgIGxleGVyLnR5cGUgPSB0aGlzLnR5cGU7XG59O1xuXG5MZXhlclR5cGVBY3Rpb24ucHJvdG90eXBlLnVwZGF0ZUhhc2hDb2RlID0gZnVuY3Rpb24oaGFzaCkge1xuICAgIGhhc2gudXBkYXRlKHRoaXMuYWN0aW9uVHlwZSwgdGhpcy50eXBlKTtcbn07XG5cblxuTGV4ZXJUeXBlQWN0aW9uLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbihvdGhlcikge1xuICAgIGlmKHRoaXMgPT09IG90aGVyKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoISAob3RoZXIgaW5zdGFuY2VvZiBMZXhlclR5cGVBY3Rpb24pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlID09PSBvdGhlci50eXBlO1xuICAgIH1cbn07XG5cbkxleGVyVHlwZUFjdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJ0eXBlKFwiICsgdGhpcy50eXBlICsgXCIpXCI7XG59O1xuXG4vLyBJbXBsZW1lbnRzIHRoZSB7QGNvZGUgcHVzaE1vZGV9IGxleGVyIGFjdGlvbiBieSBjYWxsaW5nXG4vLyB7QGxpbmsgTGV4ZXIvL3B1c2hNb2RlfSB3aXRoIHRoZSBhc3NpZ25lZCBtb2RlLlxuZnVuY3Rpb24gTGV4ZXJQdXNoTW9kZUFjdGlvbihtb2RlKSB7XG5cdExleGVyQWN0aW9uLmNhbGwodGhpcywgTGV4ZXJBY3Rpb25UeXBlLlBVU0hfTU9ERSk7XG4gICAgdGhpcy5tb2RlID0gbW9kZTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuTGV4ZXJQdXNoTW9kZUFjdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKExleGVyQWN0aW9uLnByb3RvdHlwZSk7XG5MZXhlclB1c2hNb2RlQWN0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExleGVyUHVzaE1vZGVBY3Rpb247XG5cbi8vIDxwPlRoaXMgYWN0aW9uIGlzIGltcGxlbWVudGVkIGJ5IGNhbGxpbmcge0BsaW5rIExleGVyLy9wdXNoTW9kZX0gd2l0aCB0aGVcbi8vIHZhbHVlIHByb3ZpZGVkIGJ5IHtAbGluayAvL2dldE1vZGV9LjwvcD5cbkxleGVyUHVzaE1vZGVBY3Rpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihsZXhlcikge1xuICAgIGxleGVyLnB1c2hNb2RlKHRoaXMubW9kZSk7XG59O1xuXG5MZXhlclB1c2hNb2RlQWN0aW9uLnByb3RvdHlwZS51cGRhdGVIYXNoQ29kZSA9IGZ1bmN0aW9uKGhhc2gpIHtcbiAgICBoYXNoLnVwZGF0ZSh0aGlzLmFjdGlvblR5cGUsIHRoaXMubW9kZSk7XG59O1xuXG5MZXhlclB1c2hNb2RlQWN0aW9uLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbihvdGhlcikge1xuICAgIGlmICh0aGlzID09PSBvdGhlcikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKCEgKG90aGVyIGluc3RhbmNlb2YgTGV4ZXJQdXNoTW9kZUFjdGlvbikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUgPT09IG90aGVyLm1vZGU7XG4gICAgfVxufTtcblxuTGV4ZXJQdXNoTW9kZUFjdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIFwicHVzaE1vZGUoXCIgKyB0aGlzLm1vZGUgKyBcIilcIjtcbn07XG5cblxuLy8gSW1wbGVtZW50cyB0aGUge0Bjb2RlIHBvcE1vZGV9IGxleGVyIGFjdGlvbiBieSBjYWxsaW5nIHtAbGluayBMZXhlci8vcG9wTW9kZX0uXG4vL1xuLy8gPHA+VGhlIHtAY29kZSBwb3BNb2RlfSBjb21tYW5kIGRvZXMgbm90IGhhdmUgYW55IHBhcmFtZXRlcnMsIHNvIHRoaXMgYWN0aW9uIGlzXG4vLyBpbXBsZW1lbnRlZCBhcyBhIHNpbmdsZXRvbiBpbnN0YW5jZSBleHBvc2VkIGJ5IHtAbGluayAvL0lOU1RBTkNFfS48L3A+XG5mdW5jdGlvbiBMZXhlclBvcE1vZGVBY3Rpb24oKSB7XG5cdExleGVyQWN0aW9uLmNhbGwodGhpcyxMZXhlckFjdGlvblR5cGUuUE9QX01PREUpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuTGV4ZXJQb3BNb2RlQWN0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTGV4ZXJBY3Rpb24ucHJvdG90eXBlKTtcbkxleGVyUG9wTW9kZUFjdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMZXhlclBvcE1vZGVBY3Rpb247XG5cbkxleGVyUG9wTW9kZUFjdGlvbi5JTlNUQU5DRSA9IG5ldyBMZXhlclBvcE1vZGVBY3Rpb24oKTtcblxuLy8gPHA+VGhpcyBhY3Rpb24gaXMgaW1wbGVtZW50ZWQgYnkgY2FsbGluZyB7QGxpbmsgTGV4ZXIvL3BvcE1vZGV9LjwvcD5cbkxleGVyUG9wTW9kZUFjdGlvbi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGxleGVyKSB7XG4gICAgbGV4ZXIucG9wTW9kZSgpO1xufTtcblxuTGV4ZXJQb3BNb2RlQWN0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gXCJwb3BNb2RlXCI7XG59O1xuXG4vLyBJbXBsZW1lbnRzIHRoZSB7QGNvZGUgbW9yZX0gbGV4ZXIgYWN0aW9uIGJ5IGNhbGxpbmcge0BsaW5rIExleGVyLy9tb3JlfS5cbi8vXG4vLyA8cD5UaGUge0Bjb2RlIG1vcmV9IGNvbW1hbmQgZG9lcyBub3QgaGF2ZSBhbnkgcGFyYW1ldGVycywgc28gdGhpcyBhY3Rpb24gaXNcbi8vIGltcGxlbWVudGVkIGFzIGEgc2luZ2xldG9uIGluc3RhbmNlIGV4cG9zZWQgYnkge0BsaW5rIC8vSU5TVEFOQ0V9LjwvcD5cbmZ1bmN0aW9uIExleGVyTW9yZUFjdGlvbigpIHtcblx0TGV4ZXJBY3Rpb24uY2FsbCh0aGlzLCBMZXhlckFjdGlvblR5cGUuTU9SRSk7XG5cdHJldHVybiB0aGlzO1xufVxuXG5MZXhlck1vcmVBY3Rpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShMZXhlckFjdGlvbi5wcm90b3R5cGUpO1xuTGV4ZXJNb3JlQWN0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExleGVyTW9yZUFjdGlvbjtcblxuTGV4ZXJNb3JlQWN0aW9uLklOU1RBTkNFID0gbmV3IExleGVyTW9yZUFjdGlvbigpO1xuXG4vLyA8cD5UaGlzIGFjdGlvbiBpcyBpbXBsZW1lbnRlZCBieSBjYWxsaW5nIHtAbGluayBMZXhlci8vcG9wTW9kZX0uPC9wPlxuTGV4ZXJNb3JlQWN0aW9uLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24obGV4ZXIpIHtcbiAgICBsZXhlci5tb3JlKCk7XG59O1xuXG5MZXhlck1vcmVBY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFwibW9yZVwiO1xufTtcblxuXG4vLyBJbXBsZW1lbnRzIHRoZSB7QGNvZGUgbW9kZX0gbGV4ZXIgYWN0aW9uIGJ5IGNhbGxpbmcge0BsaW5rIExleGVyLy9tb2RlfSB3aXRoXG4vLyB0aGUgYXNzaWduZWQgbW9kZS5cbmZ1bmN0aW9uIExleGVyTW9kZUFjdGlvbihtb2RlKSB7XG5cdExleGVyQWN0aW9uLmNhbGwodGhpcywgTGV4ZXJBY3Rpb25UeXBlLk1PREUpO1xuICAgIHRoaXMubW9kZSA9IG1vZGU7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkxleGVyTW9kZUFjdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKExleGVyQWN0aW9uLnByb3RvdHlwZSk7XG5MZXhlck1vZGVBY3Rpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTGV4ZXJNb2RlQWN0aW9uO1xuXG4vLyA8cD5UaGlzIGFjdGlvbiBpcyBpbXBsZW1lbnRlZCBieSBjYWxsaW5nIHtAbGluayBMZXhlci8vbW9kZX0gd2l0aCB0aGVcbi8vIHZhbHVlIHByb3ZpZGVkIGJ5IHtAbGluayAvL2dldE1vZGV9LjwvcD5cbkxleGVyTW9kZUFjdGlvbi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGxleGVyKSB7XG4gICAgbGV4ZXIubW9kZSh0aGlzLm1vZGUpO1xufTtcblxuTGV4ZXJNb2RlQWN0aW9uLnByb3RvdHlwZS51cGRhdGVIYXNoQ29kZSA9IGZ1bmN0aW9uKGhhc2gpIHtcbiAgICBoYXNoLnVwZGF0ZSh0aGlzLmFjdGlvblR5cGUsIHRoaXMubW9kZSk7XG59O1xuXG5MZXhlck1vZGVBY3Rpb24ucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uKG90aGVyKSB7XG4gICAgaWYgKHRoaXMgPT09IG90aGVyKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoISAob3RoZXIgaW5zdGFuY2VvZiBMZXhlck1vZGVBY3Rpb24pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlID09PSBvdGhlci5tb2RlO1xuICAgIH1cbn07XG5cbkxleGVyTW9kZUFjdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJtb2RlKFwiICsgdGhpcy5tb2RlICsgXCIpXCI7XG59O1xuXG4vLyBFeGVjdXRlcyBhIGN1c3RvbSBsZXhlciBhY3Rpb24gYnkgY2FsbGluZyB7QGxpbmsgUmVjb2duaXplci8vYWN0aW9ufSB3aXRoIHRoZVxuLy8gcnVsZSBhbmQgYWN0aW9uIGluZGV4ZXMgYXNzaWduZWQgdG8gdGhlIGN1c3RvbSBhY3Rpb24uIFRoZSBpbXBsZW1lbnRhdGlvbiBvZlxuLy8gYSBjdXN0b20gYWN0aW9uIGlzIGFkZGVkIHRvIHRoZSBnZW5lcmF0ZWQgY29kZSBmb3IgdGhlIGxleGVyIGluIGFuIG92ZXJyaWRlXG4vLyBvZiB7QGxpbmsgUmVjb2duaXplci8vYWN0aW9ufSB3aGVuIHRoZSBncmFtbWFyIGlzIGNvbXBpbGVkLlxuLy9cbi8vIDxwPlRoaXMgY2xhc3MgbWF5IHJlcHJlc2VudCBlbWJlZGRlZCBhY3Rpb25zIGNyZWF0ZWQgd2l0aCB0aGUgPGNvZGU+ey4uLn08L2NvZGU+XG4vLyBzeW50YXggaW4gQU5UTFIgNCwgYXMgd2VsbCBhcyBhY3Rpb25zIGNyZWF0ZWQgZm9yIGxleGVyIGNvbW1hbmRzIHdoZXJlIHRoZVxuLy8gY29tbWFuZCBhcmd1bWVudCBjb3VsZCBub3QgYmUgZXZhbHVhdGVkIHdoZW4gdGhlIGdyYW1tYXIgd2FzIGNvbXBpbGVkLjwvcD5cblxuXG4gICAgLy8gQ29uc3RydWN0cyBhIGN1c3RvbSBsZXhlciBhY3Rpb24gd2l0aCB0aGUgc3BlY2lmaWVkIHJ1bGUgYW5kIGFjdGlvblxuICAgIC8vIGluZGV4ZXMuXG4gICAgLy9cbiAgICAvLyBAcGFyYW0gcnVsZUluZGV4IFRoZSBydWxlIGluZGV4IHRvIHVzZSBmb3IgY2FsbHMgdG9cbiAgICAvLyB7QGxpbmsgUmVjb2duaXplci8vYWN0aW9ufS5cbiAgICAvLyBAcGFyYW0gYWN0aW9uSW5kZXggVGhlIGFjdGlvbiBpbmRleCB0byB1c2UgZm9yIGNhbGxzIHRvXG4gICAgLy8ge0BsaW5rIFJlY29nbml6ZXIvL2FjdGlvbn0uXG5cbmZ1bmN0aW9uIExleGVyQ3VzdG9tQWN0aW9uKHJ1bGVJbmRleCwgYWN0aW9uSW5kZXgpIHtcblx0TGV4ZXJBY3Rpb24uY2FsbCh0aGlzLCBMZXhlckFjdGlvblR5cGUuQ1VTVE9NKTtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IHJ1bGVJbmRleDtcbiAgICB0aGlzLmFjdGlvbkluZGV4ID0gYWN0aW9uSW5kZXg7XG4gICAgdGhpcy5pc1Bvc2l0aW9uRGVwZW5kZW50ID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuTGV4ZXJDdXN0b21BY3Rpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShMZXhlckFjdGlvbi5wcm90b3R5cGUpO1xuTGV4ZXJDdXN0b21BY3Rpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTGV4ZXJDdXN0b21BY3Rpb247XG5cbi8vIDxwPkN1c3RvbSBhY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBieSBjYWxsaW5nIHtAbGluayBMZXhlci8vYWN0aW9ufSB3aXRoIHRoZVxuLy8gYXBwcm9wcmlhdGUgcnVsZSBhbmQgYWN0aW9uIGluZGV4ZXMuPC9wPlxuTGV4ZXJDdXN0b21BY3Rpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihsZXhlcikge1xuICAgIGxleGVyLmFjdGlvbihudWxsLCB0aGlzLnJ1bGVJbmRleCwgdGhpcy5hY3Rpb25JbmRleCk7XG59O1xuXG5MZXhlckN1c3RvbUFjdGlvbi5wcm90b3R5cGUudXBkYXRlSGFzaENvZGUgPSBmdW5jdGlvbihoYXNoKSB7XG4gICAgaGFzaC51cGRhdGUodGhpcy5hY3Rpb25UeXBlLCB0aGlzLnJ1bGVJbmRleCwgdGhpcy5hY3Rpb25JbmRleCk7XG59O1xuXG5MZXhlckN1c3RvbUFjdGlvbi5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24ob3RoZXIpIHtcbiAgICBpZiAodGhpcyA9PT0gb3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICghIChvdGhlciBpbnN0YW5jZW9mIExleGVyQ3VzdG9tQWN0aW9uKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucnVsZUluZGV4ID09PSBvdGhlci5ydWxlSW5kZXggJiYgdGhpcy5hY3Rpb25JbmRleCA9PT0gb3RoZXIuYWN0aW9uSW5kZXg7XG4gICAgfVxufTtcblxuLy8gSW1wbGVtZW50cyB0aGUge0Bjb2RlIGNoYW5uZWx9IGxleGVyIGFjdGlvbiBieSBjYWxsaW5nXG4vLyB7QGxpbmsgTGV4ZXIvL3NldENoYW5uZWx9IHdpdGggdGhlIGFzc2lnbmVkIGNoYW5uZWwuXG4vLyBDb25zdHJ1Y3RzIGEgbmV3IHtAY29kZSBjaGFubmVsfSBhY3Rpb24gd2l0aCB0aGUgc3BlY2lmaWVkIGNoYW5uZWwgdmFsdWUuXG4vLyBAcGFyYW0gY2hhbm5lbCBUaGUgY2hhbm5lbCB2YWx1ZSB0byBwYXNzIHRvIHtAbGluayBMZXhlci8vc2V0Q2hhbm5lbH0uXG5mdW5jdGlvbiBMZXhlckNoYW5uZWxBY3Rpb24oY2hhbm5lbCkge1xuXHRMZXhlckFjdGlvbi5jYWxsKHRoaXMsIExleGVyQWN0aW9uVHlwZS5DSEFOTkVMKTtcbiAgICB0aGlzLmNoYW5uZWwgPSBjaGFubmVsO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5MZXhlckNoYW5uZWxBY3Rpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShMZXhlckFjdGlvbi5wcm90b3R5cGUpO1xuTGV4ZXJDaGFubmVsQWN0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExleGVyQ2hhbm5lbEFjdGlvbjtcblxuLy8gPHA+VGhpcyBhY3Rpb24gaXMgaW1wbGVtZW50ZWQgYnkgY2FsbGluZyB7QGxpbmsgTGV4ZXIvL3NldENoYW5uZWx9IHdpdGggdGhlXG4vLyB2YWx1ZSBwcm92aWRlZCBieSB7QGxpbmsgLy9nZXRDaGFubmVsfS48L3A+XG5MZXhlckNoYW5uZWxBY3Rpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihsZXhlcikge1xuICAgIGxleGVyLl9jaGFubmVsID0gdGhpcy5jaGFubmVsO1xufTtcblxuTGV4ZXJDaGFubmVsQWN0aW9uLnByb3RvdHlwZS51cGRhdGVIYXNoQ29kZSA9IGZ1bmN0aW9uKGhhc2gpIHtcbiAgICBoYXNoLnVwZGF0ZSh0aGlzLmFjdGlvblR5cGUsIHRoaXMuY2hhbm5lbCk7XG59O1xuXG5MZXhlckNoYW5uZWxBY3Rpb24ucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uKG90aGVyKSB7XG4gICAgaWYgKHRoaXMgPT09IG90aGVyKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoISAob3RoZXIgaW5zdGFuY2VvZiBMZXhlckNoYW5uZWxBY3Rpb24pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGFubmVsID09PSBvdGhlci5jaGFubmVsO1xuICAgIH1cbn07XG5cbkxleGVyQ2hhbm5lbEFjdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJjaGFubmVsKFwiICsgdGhpcy5jaGFubmVsICsgXCIpXCI7XG59O1xuXG4vLyBUaGlzIGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBMZXhlckFjdGlvbn0gaXMgdXNlZCBmb3IgdHJhY2tpbmcgaW5wdXQgb2Zmc2V0c1xuLy8gZm9yIHBvc2l0aW9uLWRlcGVuZGVudCBhY3Rpb25zIHdpdGhpbiBhIHtAbGluayBMZXhlckFjdGlvbkV4ZWN1dG9yfS5cbi8vXG4vLyA8cD5UaGlzIGFjdGlvbiBpcyBub3Qgc2VyaWFsaXplZCBhcyBwYXJ0IG9mIHRoZSBBVE4sIGFuZCBpcyBvbmx5IHJlcXVpcmVkIGZvclxuLy8gcG9zaXRpb24tZGVwZW5kZW50IGxleGVyIGFjdGlvbnMgd2hpY2ggYXBwZWFyIGF0IGEgbG9jYXRpb24gb3RoZXIgdGhhbiB0aGVcbi8vIGVuZCBvZiBhIHJ1bGUuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IERGQSBvcHRpbWl6YXRpb25zIGVtcGxveWVkIGZvclxuLy8gbGV4ZXIgYWN0aW9ucywgc2VlIHtAbGluayBMZXhlckFjdGlvbkV4ZWN1dG9yLy9hcHBlbmR9IGFuZFxuLy8ge0BsaW5rIExleGVyQWN0aW9uRXhlY3V0b3IvL2ZpeE9mZnNldEJlZm9yZU1hdGNofS48L3A+XG5cbi8vIENvbnN0cnVjdHMgYSBuZXcgaW5kZXhlZCBjdXN0b20gYWN0aW9uIGJ5IGFzc29jaWF0aW5nIGEgY2hhcmFjdGVyIG9mZnNldFxuLy8gd2l0aCBhIHtAbGluayBMZXhlckFjdGlvbn0uXG4vL1xuLy8gPHA+Tm90ZTogVGhpcyBjbGFzcyBpcyBvbmx5IHJlcXVpcmVkIGZvciBsZXhlciBhY3Rpb25zIGZvciB3aGljaFxuLy8ge0BsaW5rIExleGVyQWN0aW9uLy9pc1Bvc2l0aW9uRGVwZW5kZW50fSByZXR1cm5zIHtAY29kZSB0cnVlfS48L3A+XG4vL1xuLy8gQHBhcmFtIG9mZnNldCBUaGUgb2Zmc2V0IGludG8gdGhlIGlucHV0IHtAbGluayBDaGFyU3RyZWFtfSwgcmVsYXRpdmUgdG9cbi8vIHRoZSB0b2tlbiBzdGFydCBpbmRleCwgYXQgd2hpY2ggdGhlIHNwZWNpZmllZCBsZXhlciBhY3Rpb24gc2hvdWxkIGJlXG4vLyBleGVjdXRlZC5cbi8vIEBwYXJhbSBhY3Rpb24gVGhlIGxleGVyIGFjdGlvbiB0byBleGVjdXRlIGF0IGEgcGFydGljdWxhciBvZmZzZXQgaW4gdGhlXG4vLyBpbnB1dCB7QGxpbmsgQ2hhclN0cmVhbX0uXG5mdW5jdGlvbiBMZXhlckluZGV4ZWRDdXN0b21BY3Rpb24ob2Zmc2V0LCBhY3Rpb24pIHtcblx0TGV4ZXJBY3Rpb24uY2FsbCh0aGlzLCBhY3Rpb24uYWN0aW9uVHlwZSk7XG4gICAgdGhpcy5vZmZzZXQgPSBvZmZzZXQ7XG4gICAgdGhpcy5hY3Rpb24gPSBhY3Rpb247XG4gICAgdGhpcy5pc1Bvc2l0aW9uRGVwZW5kZW50ID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuTGV4ZXJJbmRleGVkQ3VzdG9tQWN0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTGV4ZXJBY3Rpb24ucHJvdG90eXBlKTtcbkxleGVySW5kZXhlZEN1c3RvbUFjdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMZXhlckluZGV4ZWRDdXN0b21BY3Rpb247XG5cbi8vIDxwPlRoaXMgbWV0aG9kIGNhbGxzIHtAbGluayAvL2V4ZWN1dGV9IG9uIHRoZSByZXN1bHQgb2Yge0BsaW5rIC8vZ2V0QWN0aW9ufVxuLy8gdXNpbmcgdGhlIHByb3ZpZGVkIHtAY29kZSBsZXhlcn0uPC9wPlxuTGV4ZXJJbmRleGVkQ3VzdG9tQWN0aW9uLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24obGV4ZXIpIHtcbiAgICAvLyBhc3N1bWUgdGhlIGlucHV0IHN0cmVhbSBwb3NpdGlvbiB3YXMgcHJvcGVybHkgc2V0IGJ5IHRoZSBjYWxsaW5nIGNvZGVcbiAgICB0aGlzLmFjdGlvbi5leGVjdXRlKGxleGVyKTtcbn07XG5cbkxleGVySW5kZXhlZEN1c3RvbUFjdGlvbi5wcm90b3R5cGUudXBkYXRlSGFzaENvZGUgPSBmdW5jdGlvbihoYXNoKSB7XG4gICAgaGFzaC51cGRhdGUodGhpcy5hY3Rpb25UeXBlLCB0aGlzLm9mZnNldCwgdGhpcy5hY3Rpb24pO1xufTtcblxuTGV4ZXJJbmRleGVkQ3VzdG9tQWN0aW9uLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbihvdGhlcikge1xuICAgIGlmICh0aGlzID09PSBvdGhlcikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKCEgKG90aGVyIGluc3RhbmNlb2YgTGV4ZXJJbmRleGVkQ3VzdG9tQWN0aW9uKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub2Zmc2V0ID09PSBvdGhlci5vZmZzZXQgJiYgdGhpcy5hY3Rpb24gPT09IG90aGVyLmFjdGlvbjtcbiAgICB9XG59O1xuXG5cbmV4cG9ydHMuTGV4ZXJBY3Rpb25UeXBlID0gTGV4ZXJBY3Rpb25UeXBlO1xuZXhwb3J0cy5MZXhlclNraXBBY3Rpb24gPSBMZXhlclNraXBBY3Rpb247XG5leHBvcnRzLkxleGVyQ2hhbm5lbEFjdGlvbiA9IExleGVyQ2hhbm5lbEFjdGlvbjtcbmV4cG9ydHMuTGV4ZXJDdXN0b21BY3Rpb24gPSBMZXhlckN1c3RvbUFjdGlvbjtcbmV4cG9ydHMuTGV4ZXJJbmRleGVkQ3VzdG9tQWN0aW9uID0gTGV4ZXJJbmRleGVkQ3VzdG9tQWN0aW9uO1xuZXhwb3J0cy5MZXhlck1vcmVBY3Rpb24gPSBMZXhlck1vcmVBY3Rpb247XG5leHBvcnRzLkxleGVyVHlwZUFjdGlvbiA9IExleGVyVHlwZUFjdGlvbjtcbmV4cG9ydHMuTGV4ZXJQdXNoTW9kZUFjdGlvbiA9IExleGVyUHVzaE1vZGVBY3Rpb247XG5leHBvcnRzLkxleGVyUG9wTW9kZUFjdGlvbiA9IExleGVyUG9wTW9kZUFjdGlvbjtcbmV4cG9ydHMuTGV4ZXJNb2RlQWN0aW9uID0gTGV4ZXJNb2RlQWN0aW9uOyIsIi8vXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vLy9cblxuLy8gUmVwcmVzZW50cyBhbiBleGVjdXRvciBmb3IgYSBzZXF1ZW5jZSBvZiBsZXhlciBhY3Rpb25zIHdoaWNoIHRyYXZlcnNlZCBkdXJpbmdcbi8vIHRoZSBtYXRjaGluZyBvcGVyYXRpb24gb2YgYSBsZXhlciBydWxlICh0b2tlbikuXG4vL1xuLy8gPHA+VGhlIGV4ZWN1dG9yIHRyYWNrcyBwb3NpdGlvbiBpbmZvcm1hdGlvbiBmb3IgcG9zaXRpb24tZGVwZW5kZW50IGxleGVyIGFjdGlvbnNcbi8vIGVmZmljaWVudGx5LCBlbnN1cmluZyB0aGF0IGFjdGlvbnMgYXBwZWFyaW5nIG9ubHkgYXQgdGhlIGVuZCBvZiB0aGUgcnVsZSBkb1xuLy8gbm90IGNhdXNlIGJsb2F0aW5nIG9mIHRoZSB7QGxpbmsgREZBfSBjcmVhdGVkIGZvciB0aGUgbGV4ZXIuPC9wPlxuXG52YXIgaGFzaFN0dWZmID0gcmVxdWlyZShcIi4uL1V0aWxzXCIpLmhhc2hTdHVmZjtcbnZhciBMZXhlckluZGV4ZWRDdXN0b21BY3Rpb24gPSByZXF1aXJlKCcuL0xleGVyQWN0aW9uJykuTGV4ZXJJbmRleGVkQ3VzdG9tQWN0aW9uO1xuXG5mdW5jdGlvbiBMZXhlckFjdGlvbkV4ZWN1dG9yKGxleGVyQWN0aW9ucykge1xuXHR0aGlzLmxleGVyQWN0aW9ucyA9IGxleGVyQWN0aW9ucyA9PT0gbnVsbCA/IFtdIDogbGV4ZXJBY3Rpb25zO1xuXHQvLyBDYWNoZXMgdGhlIHJlc3VsdCBvZiB7QGxpbmsgLy9oYXNoQ29kZX0gc2luY2UgdGhlIGhhc2ggY29kZSBpcyBhbiBlbGVtZW50XG5cdC8vIG9mIHRoZSBwZXJmb3JtYW5jZS1jcml0aWNhbCB7QGxpbmsgTGV4ZXJBVE5Db25maWcvL2hhc2hDb2RlfSBvcGVyYXRpb24uXG5cdHRoaXMuY2FjaGVkSGFzaENvZGUgPSBoYXNoU3R1ZmYobGV4ZXJBY3Rpb25zKTsgLy8gXCJcIi5qb2luKFtzdHIobGEpIGZvciBsYSBpblxuXHQvLyBsZXhlckFjdGlvbnNdKSlcblx0cmV0dXJuIHRoaXM7XG59XG5cbi8vIENyZWF0ZXMgYSB7QGxpbmsgTGV4ZXJBY3Rpb25FeGVjdXRvcn0gd2hpY2ggZXhlY3V0ZXMgdGhlIGFjdGlvbnMgZm9yXG4vLyB0aGUgaW5wdXQge0Bjb2RlIGxleGVyQWN0aW9uRXhlY3V0b3J9IGZvbGxvd2VkIGJ5IGEgc3BlY2lmaWVkXG4vLyB7QGNvZGUgbGV4ZXJBY3Rpb259LlxuLy9cbi8vIEBwYXJhbSBsZXhlckFjdGlvbkV4ZWN1dG9yIFRoZSBleGVjdXRvciBmb3IgYWN0aW9ucyBhbHJlYWR5IHRyYXZlcnNlZCBieVxuLy8gdGhlIGxleGVyIHdoaWxlIG1hdGNoaW5nIGEgdG9rZW4gd2l0aGluIGEgcGFydGljdWxhclxuLy8ge0BsaW5rIExleGVyQVROQ29uZmlnfS4gSWYgdGhpcyBpcyB7QGNvZGUgbnVsbH0sIHRoZSBtZXRob2QgYmVoYXZlcyBhc1xuLy8gdGhvdWdoIGl0IHdlcmUgYW4gZW1wdHkgZXhlY3V0b3IuXG4vLyBAcGFyYW0gbGV4ZXJBY3Rpb24gVGhlIGxleGVyIGFjdGlvbiB0byBleGVjdXRlIGFmdGVyIHRoZSBhY3Rpb25zXG4vLyBzcGVjaWZpZWQgaW4ge0Bjb2RlIGxleGVyQWN0aW9uRXhlY3V0b3J9LlxuLy9cbi8vIEByZXR1cm4gQSB7QGxpbmsgTGV4ZXJBY3Rpb25FeGVjdXRvcn0gZm9yIGV4ZWN1dGluZyB0aGUgY29tYmluZSBhY3Rpb25zXG4vLyBvZiB7QGNvZGUgbGV4ZXJBY3Rpb25FeGVjdXRvcn0gYW5kIHtAY29kZSBsZXhlckFjdGlvbn0uXG5MZXhlckFjdGlvbkV4ZWN1dG9yLmFwcGVuZCA9IGZ1bmN0aW9uKGxleGVyQWN0aW9uRXhlY3V0b3IsIGxleGVyQWN0aW9uKSB7XG5cdGlmIChsZXhlckFjdGlvbkV4ZWN1dG9yID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIG5ldyBMZXhlckFjdGlvbkV4ZWN1dG9yKFsgbGV4ZXJBY3Rpb24gXSk7XG5cdH1cblx0dmFyIGxleGVyQWN0aW9ucyA9IGxleGVyQWN0aW9uRXhlY3V0b3IubGV4ZXJBY3Rpb25zLmNvbmNhdChbIGxleGVyQWN0aW9uIF0pO1xuXHRyZXR1cm4gbmV3IExleGVyQWN0aW9uRXhlY3V0b3IobGV4ZXJBY3Rpb25zKTtcbn07XG5cbi8vIENyZWF0ZXMgYSB7QGxpbmsgTGV4ZXJBY3Rpb25FeGVjdXRvcn0gd2hpY2ggZW5jb2RlcyB0aGUgY3VycmVudCBvZmZzZXRcbi8vIGZvciBwb3NpdGlvbi1kZXBlbmRlbnQgbGV4ZXIgYWN0aW9ucy5cbi8vXG4vLyA8cD5Ob3JtYWxseSwgd2hlbiB0aGUgZXhlY3V0b3IgZW5jb3VudGVycyBsZXhlciBhY3Rpb25zIHdoZXJlXG4vLyB7QGxpbmsgTGV4ZXJBY3Rpb24vL2lzUG9zaXRpb25EZXBlbmRlbnR9IHJldHVybnMge0Bjb2RlIHRydWV9LCBpdCBjYWxsc1xuLy8ge0BsaW5rIEludFN0cmVhbS8vc2Vla30gb24gdGhlIGlucHV0IHtAbGluayBDaGFyU3RyZWFtfSB0byBzZXQgdGhlIGlucHV0XG4vLyBwb3NpdGlvbiB0byB0aGUgPGVtPmVuZDwvZW0+IG9mIHRoZSBjdXJyZW50IHRva2VuLiBUaGlzIGJlaGF2aW9yIHByb3ZpZGVzXG4vLyBmb3IgZWZmaWNpZW50IERGQSByZXByZXNlbnRhdGlvbiBvZiBsZXhlciBhY3Rpb25zIHdoaWNoIGFwcGVhciBhdCB0aGUgZW5kXG4vLyBvZiBhIGxleGVyIHJ1bGUsIGV2ZW4gd2hlbiB0aGUgbGV4ZXIgcnVsZSBtYXRjaGVzIGEgdmFyaWFibGUgbnVtYmVyIG9mXG4vLyBjaGFyYWN0ZXJzLjwvcD5cbi8vXG4vLyA8cD5QcmlvciB0byB0cmF2ZXJzaW5nIGEgbWF0Y2ggdHJhbnNpdGlvbiBpbiB0aGUgQVROLCB0aGUgY3VycmVudCBvZmZzZXRcbi8vIGZyb20gdGhlIHRva2VuIHN0YXJ0IGluZGV4IGlzIGFzc2lnbmVkIHRvIGFsbCBwb3NpdGlvbi1kZXBlbmRlbnQgbGV4ZXJcbi8vIGFjdGlvbnMgd2hpY2ggaGF2ZSBub3QgYWxyZWFkeSBiZWVuIGFzc2lnbmVkIGEgZml4ZWQgb2Zmc2V0LiBCeSBzdG9yaW5nXG4vLyB0aGUgb2Zmc2V0cyByZWxhdGl2ZSB0byB0aGUgdG9rZW4gc3RhcnQgaW5kZXgsIHRoZSBERkEgcmVwcmVzZW50YXRpb24gb2Zcbi8vIGxleGVyIGFjdGlvbnMgd2hpY2ggYXBwZWFyIGluIHRoZSBtaWRkbGUgb2YgdG9rZW5zIHJlbWFpbnMgZWZmaWNpZW50IGR1ZVxuLy8gdG8gc2hhcmluZyBhbW9uZyB0b2tlbnMgb2YgdGhlIHNhbWUgbGVuZ3RoLCByZWdhcmRsZXNzIG9mIHRoZWlyIGFic29sdXRlXG4vLyBwb3NpdGlvbiBpbiB0aGUgaW5wdXQgc3RyZWFtLjwvcD5cbi8vXG4vLyA8cD5JZiB0aGUgY3VycmVudCBleGVjdXRvciBhbHJlYWR5IGhhcyBvZmZzZXRzIGFzc2lnbmVkIHRvIGFsbFxuLy8gcG9zaXRpb24tZGVwZW5kZW50IGxleGVyIGFjdGlvbnMsIHRoZSBtZXRob2QgcmV0dXJucyB7QGNvZGUgdGhpc30uPC9wPlxuLy9cbi8vIEBwYXJhbSBvZmZzZXQgVGhlIGN1cnJlbnQgb2Zmc2V0IHRvIGFzc2lnbiB0byBhbGwgcG9zaXRpb24tZGVwZW5kZW50XG4vLyBsZXhlciBhY3Rpb25zIHdoaWNoIGRvIG5vdCBhbHJlYWR5IGhhdmUgb2Zmc2V0cyBhc3NpZ25lZC5cbi8vXG4vLyBAcmV0dXJuIEEge0BsaW5rIExleGVyQWN0aW9uRXhlY3V0b3J9IHdoaWNoIHN0b3JlcyBpbnB1dCBzdHJlYW0gb2Zmc2V0c1xuLy8gZm9yIGFsbCBwb3NpdGlvbi1kZXBlbmRlbnQgbGV4ZXIgYWN0aW9ucy5cbi8vIC9cbkxleGVyQWN0aW9uRXhlY3V0b3IucHJvdG90eXBlLmZpeE9mZnNldEJlZm9yZU1hdGNoID0gZnVuY3Rpb24ob2Zmc2V0KSB7XG5cdHZhciB1cGRhdGVkTGV4ZXJBY3Rpb25zID0gbnVsbDtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxleGVyQWN0aW9ucy5sZW5ndGg7IGkrKykge1xuXHRcdGlmICh0aGlzLmxleGVyQWN0aW9uc1tpXS5pc1Bvc2l0aW9uRGVwZW5kZW50ICYmXG5cdFx0XHRcdCEodGhpcy5sZXhlckFjdGlvbnNbaV0gaW5zdGFuY2VvZiBMZXhlckluZGV4ZWRDdXN0b21BY3Rpb24pKSB7XG5cdFx0XHRpZiAodXBkYXRlZExleGVyQWN0aW9ucyA9PT0gbnVsbCkge1xuXHRcdFx0XHR1cGRhdGVkTGV4ZXJBY3Rpb25zID0gdGhpcy5sZXhlckFjdGlvbnMuY29uY2F0KFtdKTtcblx0XHRcdH1cblx0XHRcdHVwZGF0ZWRMZXhlckFjdGlvbnNbaV0gPSBuZXcgTGV4ZXJJbmRleGVkQ3VzdG9tQWN0aW9uKG9mZnNldCxcblx0XHRcdFx0XHR0aGlzLmxleGVyQWN0aW9uc1tpXSk7XG5cdFx0fVxuXHR9XG5cdGlmICh1cGRhdGVkTGV4ZXJBY3Rpb25zID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIG5ldyBMZXhlckFjdGlvbkV4ZWN1dG9yKHVwZGF0ZWRMZXhlckFjdGlvbnMpO1xuXHR9XG59O1xuXG4vLyBFeGVjdXRlIHRoZSBhY3Rpb25zIGVuY2Fwc3VsYXRlZCBieSB0aGlzIGV4ZWN1dG9yIHdpdGhpbiB0aGUgY29udGV4dCBvZiBhXG4vLyBwYXJ0aWN1bGFyIHtAbGluayBMZXhlcn0uXG4vL1xuLy8gPHA+VGhpcyBtZXRob2QgY2FsbHMge0BsaW5rIEludFN0cmVhbS8vc2Vla30gdG8gc2V0IHRoZSBwb3NpdGlvbiBvZiB0aGVcbi8vIHtAY29kZSBpbnB1dH0ge0BsaW5rIENoYXJTdHJlYW19IHByaW9yIHRvIGNhbGxpbmdcbi8vIHtAbGluayBMZXhlckFjdGlvbi8vZXhlY3V0ZX0gb24gYSBwb3NpdGlvbi1kZXBlbmRlbnQgYWN0aW9uLiBCZWZvcmUgdGhlXG4vLyBtZXRob2QgcmV0dXJucywgdGhlIGlucHV0IHBvc2l0aW9uIHdpbGwgYmUgcmVzdG9yZWQgdG8gdGhlIHNhbWUgcG9zaXRpb25cbi8vIGl0IHdhcyBpbiB3aGVuIHRoZSBtZXRob2Qgd2FzIGludm9rZWQuPC9wPlxuLy9cbi8vIEBwYXJhbSBsZXhlciBUaGUgbGV4ZXIgaW5zdGFuY2UuXG4vLyBAcGFyYW0gaW5wdXQgVGhlIGlucHV0IHN0cmVhbSB3aGljaCBpcyB0aGUgc291cmNlIGZvciB0aGUgY3VycmVudCB0b2tlbi5cbi8vIFdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkLCB0aGUgY3VycmVudCB7QGxpbmsgSW50U3RyZWFtLy9pbmRleH0gZm9yXG4vLyB7QGNvZGUgaW5wdXR9IHNob3VsZCBiZSB0aGUgc3RhcnQgb2YgdGhlIGZvbGxvd2luZyB0b2tlbiwgaS5lLiAxXG4vLyBjaGFyYWN0ZXIgcGFzdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IHRva2VuLlxuLy8gQHBhcmFtIHN0YXJ0SW5kZXggVGhlIHRva2VuIHN0YXJ0IGluZGV4LiBUaGlzIHZhbHVlIG1heSBiZSBwYXNzZWQgdG9cbi8vIHtAbGluayBJbnRTdHJlYW0vL3NlZWt9IHRvIHNldCB0aGUge0Bjb2RlIGlucHV0fSBwb3NpdGlvbiB0byB0aGUgYmVnaW5uaW5nXG4vLyBvZiB0aGUgdG9rZW4uXG4vLyAvXG5MZXhlckFjdGlvbkV4ZWN1dG9yLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24obGV4ZXIsIGlucHV0LCBzdGFydEluZGV4KSB7XG5cdHZhciByZXF1aXJlc1NlZWsgPSBmYWxzZTtcblx0dmFyIHN0b3BJbmRleCA9IGlucHV0LmluZGV4O1xuXHR0cnkge1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZXhlckFjdGlvbnMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBsZXhlckFjdGlvbiA9IHRoaXMubGV4ZXJBY3Rpb25zW2ldO1xuXHRcdFx0aWYgKGxleGVyQWN0aW9uIGluc3RhbmNlb2YgTGV4ZXJJbmRleGVkQ3VzdG9tQWN0aW9uKSB7XG5cdFx0XHRcdHZhciBvZmZzZXQgPSBsZXhlckFjdGlvbi5vZmZzZXQ7XG5cdFx0XHRcdGlucHV0LnNlZWsoc3RhcnRJbmRleCArIG9mZnNldCk7XG5cdFx0XHRcdGxleGVyQWN0aW9uID0gbGV4ZXJBY3Rpb24uYWN0aW9uO1xuXHRcdFx0XHRyZXF1aXJlc1NlZWsgPSAoc3RhcnRJbmRleCArIG9mZnNldCkgIT09IHN0b3BJbmRleDtcblx0XHRcdH0gZWxzZSBpZiAobGV4ZXJBY3Rpb24uaXNQb3NpdGlvbkRlcGVuZGVudCkge1xuXHRcdFx0XHRpbnB1dC5zZWVrKHN0b3BJbmRleCk7XG5cdFx0XHRcdHJlcXVpcmVzU2VlayA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0bGV4ZXJBY3Rpb24uZXhlY3V0ZShsZXhlcik7XG5cdFx0fVxuXHR9IGZpbmFsbHkge1xuXHRcdGlmIChyZXF1aXJlc1NlZWspIHtcblx0XHRcdGlucHV0LnNlZWsoc3RvcEluZGV4KTtcblx0XHR9XG5cdH1cbn07XG5cbkxleGVyQWN0aW9uRXhlY3V0b3IucHJvdG90eXBlLmhhc2hDb2RlID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLmNhY2hlZEhhc2hDb2RlO1xufTtcblxuTGV4ZXJBY3Rpb25FeGVjdXRvci5wcm90b3R5cGUudXBkYXRlSGFzaENvZGUgPSBmdW5jdGlvbihoYXNoKSB7XG4gICAgaGFzaC51cGRhdGUodGhpcy5jYWNoZWRIYXNoQ29kZSk7XG59O1xuXG5cbkxleGVyQWN0aW9uRXhlY3V0b3IucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uKG90aGVyKSB7XG5cdGlmICh0aGlzID09PSBvdGhlcikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGVsc2UgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBMZXhlckFjdGlvbkV4ZWN1dG9yKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBlbHNlIGlmICh0aGlzLmNhY2hlZEhhc2hDb2RlICE9IG90aGVyLmNhY2hlZEhhc2hDb2RlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9IGVsc2UgaWYgKHRoaXMubGV4ZXJBY3Rpb25zLmxlbmd0aCAhPSBvdGhlci5sZXhlckFjdGlvbnMubGVuZ3RoKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9IGVsc2Uge1xuXHRcdHZhciBudW1BY3Rpb25zID0gdGhpcy5sZXhlckFjdGlvbnMubGVuZ3RoXG5cdFx0Zm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgbnVtQWN0aW9uczsgKytpZHgpIHtcblx0XHRcdGlmICghdGhpcy5sZXhlckFjdGlvbnNbaWR4XS5lcXVhbHMob3RoZXIubGV4ZXJBY3Rpb25zW2lkeF0pKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn07XG5cbmV4cG9ydHMuTGV4ZXJBY3Rpb25FeGVjdXRvciA9IExleGVyQWN0aW9uRXhlY3V0b3I7XG4iLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy9cblxuLy9cbi8vIFRoZSBlbWJvZGltZW50IG9mIHRoZSBhZGFwdGl2ZSBMTCgqKSwgQUxMKCopLCBwYXJzaW5nIHN0cmF0ZWd5LlxuLy9cbi8vIDxwPlxuLy8gVGhlIGJhc2ljIGNvbXBsZXhpdHkgb2YgdGhlIGFkYXB0aXZlIHN0cmF0ZWd5IG1ha2VzIGl0IGhhcmRlciB0byB1bmRlcnN0YW5kLlxuLy8gV2UgYmVnaW4gd2l0aCBBVE4gc2ltdWxhdGlvbiB0byBidWlsZCBwYXRocyBpbiBhIERGQS4gU3Vic2VxdWVudCBwcmVkaWN0aW9uXG4vLyByZXF1ZXN0cyBnbyB0aHJvdWdoIHRoZSBERkEgZmlyc3QuIElmIHRoZXkgcmVhY2ggYSBzdGF0ZSB3aXRob3V0IGFuIGVkZ2UgZm9yXG4vLyB0aGUgY3VycmVudCBzeW1ib2wsIHRoZSBhbGdvcml0aG0gZmFpbHMgb3ZlciB0byB0aGUgQVROIHNpbXVsYXRpb24gdG9cbi8vIGNvbXBsZXRlIHRoZSBERkEgcGF0aCBmb3IgdGhlIGN1cnJlbnQgaW5wdXQgKHVudGlsIGl0IGZpbmRzIGEgY29uZmxpY3Qgc3RhdGVcbi8vIG9yIHVuaXF1ZWx5IHByZWRpY3Rpbmcgc3RhdGUpLjwvcD5cbi8vXG4vLyA8cD5cbi8vIEFsbCBvZiB0aGF0IGlzIGRvbmUgd2l0aG91dCB1c2luZyB0aGUgb3V0ZXIgY29udGV4dCBiZWNhdXNlIHdlIHdhbnQgdG8gY3JlYXRlXG4vLyBhIERGQSB0aGF0IGlzIG5vdCBkZXBlbmRlbnQgdXBvbiB0aGUgcnVsZSBpbnZvY2F0aW9uIHN0YWNrIHdoZW4gd2UgZG8gYVxuLy8gcHJlZGljdGlvbi4gT25lIERGQSB3b3JrcyBpbiBhbGwgY29udGV4dHMuIFdlIGF2b2lkIHVzaW5nIGNvbnRleHQgbm90XG4vLyBuZWNlc3NhcmlseSBiZWNhdXNlIGl0J3Mgc2xvd2VyLCBhbHRob3VnaCBpdCBjYW4gYmUsIGJ1dCBiZWNhdXNlIG9mIHRoZSBERkFcbi8vIGNhY2hpbmcgcHJvYmxlbS4gVGhlIGNsb3N1cmUgcm91dGluZSBvbmx5IGNvbnNpZGVycyB0aGUgcnVsZSBpbnZvY2F0aW9uIHN0YWNrXG4vLyBjcmVhdGVkIGR1cmluZyBwcmVkaWN0aW9uIGJlZ2lubmluZyBpbiB0aGUgZGVjaXNpb24gcnVsZS4gRm9yIGV4YW1wbGUsIGlmXG4vLyBwcmVkaWN0aW9uIG9jY3VycyB3aXRob3V0IGludm9raW5nIGFub3RoZXIgcnVsZSdzIEFUTiwgdGhlcmUgYXJlIG5vIGNvbnRleHRcbi8vIHN0YWNrcyBpbiB0aGUgY29uZmlndXJhdGlvbnMuIFdoZW4gbGFjayBvZiBjb250ZXh0IGxlYWRzIHRvIGEgY29uZmxpY3QsIHdlXG4vLyBkb24ndCBrbm93IGlmIGl0J3MgYW4gYW1iaWd1aXR5IG9yIGEgd2Vha25lc3MgaW4gdGhlIHN0cm9uZyBMTCgqKSBwYXJzaW5nXG4vLyBzdHJhdGVneSAodmVyc3VzIGZ1bGwgTEwoKikpLjwvcD5cbi8vXG4vLyA8cD5cbi8vIFdoZW4gU0xMIHlpZWxkcyBhIGNvbmZpZ3VyYXRpb24gc2V0IHdpdGggY29uZmxpY3QsIHdlIHJld2luZCB0aGUgaW5wdXQgYW5kXG4vLyByZXRyeSB0aGUgQVROIHNpbXVsYXRpb24sIHRoaXMgdGltZSB1c2luZyBmdWxsIG91dGVyIGNvbnRleHQgd2l0aG91dCBhZGRpbmdcbi8vIHRvIHRoZSBERkEuIENvbmZpZ3VyYXRpb24gY29udGV4dCBzdGFja3Mgd2lsbCBiZSB0aGUgZnVsbCBpbnZvY2F0aW9uIHN0YWNrc1xuLy8gZnJvbSB0aGUgc3RhcnQgcnVsZS4gSWYgd2UgZ2V0IGEgY29uZmxpY3QgdXNpbmcgZnVsbCBjb250ZXh0LCB0aGVuIHdlIGNhblxuLy8gZGVmaW5pdGl2ZWx5IHNheSB3ZSBoYXZlIGEgdHJ1ZSBhbWJpZ3VpdHkgZm9yIHRoYXQgaW5wdXQgc2VxdWVuY2UuIElmIHdlXG4vLyBkb24ndCBnZXQgYSBjb25mbGljdCwgaXQgaW1wbGllcyB0aGF0IHRoZSBkZWNpc2lvbiBpcyBzZW5zaXRpdmUgdG8gdGhlIG91dGVyXG4vLyBjb250ZXh0LiAoSXQgaXMgbm90IGNvbnRleHQtc2Vuc2l0aXZlIGluIHRoZSBzZW5zZSBvZiBjb250ZXh0LXNlbnNpdGl2ZVxuLy8gZ3JhbW1hcnMuKTwvcD5cbi8vXG4vLyA8cD5cbi8vIFRoZSBuZXh0IHRpbWUgd2UgcmVhY2ggdGhpcyBERkEgc3RhdGUgd2l0aCBhbiBTTEwgY29uZmxpY3QsIHRocm91Z2ggREZBXG4vLyBzaW11bGF0aW9uLCB3ZSB3aWxsIGFnYWluIHJldHJ5IHRoZSBBVE4gc2ltdWxhdGlvbiB1c2luZyBmdWxsIGNvbnRleHQgbW9kZS5cbi8vIFRoaXMgaXMgc2xvdyBiZWNhdXNlIHdlIGNhbid0IHNhdmUgdGhlIHJlc3VsdHMgYW5kIGhhdmUgdG8gXCJpbnRlcnByZXRcIiB0aGVcbi8vIEFUTiBlYWNoIHRpbWUgd2UgZ2V0IHRoYXQgaW5wdXQuPC9wPlxuLy9cbi8vIDxwPlxuLy8gPHN0cm9uZz5DQUNISU5HIEZVTEwgQ09OVEVYVCBQUkVESUNUSU9OUzwvc3Ryb25nPjwvcD5cbi8vXG4vLyA8cD5cbi8vIFdlIGNvdWxkIGNhY2hlIHJlc3VsdHMgZnJvbSBmdWxsIGNvbnRleHQgdG8gcHJlZGljdGVkIGFsdGVybmF0aXZlIGVhc2lseSBhbmRcbi8vIHRoYXQgc2F2ZXMgYSBsb3Qgb2YgdGltZSBidXQgZG9lc24ndCB3b3JrIGluIHByZXNlbmNlIG9mIHByZWRpY2F0ZXMuIFRoZSBzZXRcbi8vIG9mIHZpc2libGUgcHJlZGljYXRlcyBmcm9tIHRoZSBBVE4gc3RhcnQgc3RhdGUgY2hhbmdlcyBkZXBlbmRpbmcgb24gdGhlXG4vLyBjb250ZXh0LCBiZWNhdXNlIGNsb3N1cmUgY2FuIGZhbGwgb2ZmIHRoZSBlbmQgb2YgYSBydWxlLiBJIHRyaWVkIHRvIGNhY2hlXG4vLyB0dXBsZXMgKHN0YWNrIGNvbnRleHQsIHNlbWFudGljIGNvbnRleHQsIHByZWRpY3RlZCBhbHQpIGJ1dCBpdCB3YXMgc2xvd2VyXG4vLyB0aGFuIGludGVycHJldGluZyBhbmQgbXVjaCBtb3JlIGNvbXBsaWNhdGVkLiBBbHNvIHJlcXVpcmVkIGEgaHVnZSBhbW91bnQgb2Zcbi8vIG1lbW9yeS4gVGhlIGdvYWwgaXMgbm90IHRvIGNyZWF0ZSB0aGUgd29ybGQncyBmYXN0ZXN0IHBhcnNlciBhbnl3YXkuIEknZCBsaWtlXG4vLyB0byBrZWVwIHRoaXMgYWxnb3JpdGhtIHNpbXBsZS4gQnkgbGF1bmNoaW5nIG11bHRpcGxlIHRocmVhZHMsIHdlIGNhbiBpbXByb3ZlXG4vLyB0aGUgc3BlZWQgb2YgcGFyc2luZyBhY3Jvc3MgYSBsYXJnZSBudW1iZXIgb2YgZmlsZXMuPC9wPlxuLy9cbi8vIDxwPlxuLy8gVGhlcmUgaXMgbm8gc3RyaWN0IG9yZGVyaW5nIGJldHdlZW4gdGhlIGFtb3VudCBvZiBpbnB1dCB1c2VkIGJ5IFNMTCB2cyBMTCxcbi8vIHdoaWNoIG1ha2VzIGl0IHJlYWxseSBoYXJkIHRvIGJ1aWxkIGEgY2FjaGUgZm9yIGZ1bGwgY29udGV4dC4gTGV0J3Mgc2F5IHRoYXRcbi8vIHdlIGhhdmUgaW5wdXQgQSBCIEMgdGhhdCBsZWFkcyB0byBhbiBTTEwgY29uZmxpY3Qgd2l0aCBmdWxsIGNvbnRleHQgWC4gVGhhdFxuLy8gaW1wbGllcyB0aGF0IHVzaW5nIFggd2UgbWlnaHQgb25seSB1c2UgQSBCIGJ1dCB3ZSBjb3VsZCBhbHNvIHVzZSBBIEIgQyBEIHRvXG4vLyByZXNvbHZlIGNvbmZsaWN0LiBJbnB1dCBBIEIgQyBEIGNvdWxkIHByZWRpY3QgYWx0ZXJuYXRpdmUgMSBpbiBvbmUgcG9zaXRpb25cbi8vIGluIHRoZSBpbnB1dCBhbmQgQSBCIEMgRSBjb3VsZCBwcmVkaWN0IGFsdGVybmF0aXZlIDIgaW4gYW5vdGhlciBwb3NpdGlvbiBpblxuLy8gaW5wdXQuIFRoZSBjb25mbGljdGluZyBTTEwgY29uZmlndXJhdGlvbnMgY291bGQgc3RpbGwgYmUgbm9uLXVuaXF1ZSBpbiB0aGVcbi8vIGZ1bGwgY29udGV4dCBwcmVkaWN0aW9uLCB3aGljaCB3b3VsZCBsZWFkIHVzIHRvIHJlcXVpcmluZyBtb3JlIGlucHV0IHRoYW4gdGhlXG4vLyBvcmlnaW5hbCBBIEIgQy5cdFRvIG1ha2UgYVx0cHJlZGljdGlvbiBjYWNoZSB3b3JrLCB3ZSBoYXZlIHRvIHRyYWNrXHR0aGUgZXhhY3Rcbi8vIGlucHV0XHR1c2VkIGR1cmluZyB0aGUgcHJldmlvdXMgcHJlZGljdGlvbi4gVGhhdCBhbW91bnRzIHRvIGEgY2FjaGUgdGhhdCBtYXBzXG4vLyBYIHRvIGEgc3BlY2lmaWMgREZBIGZvciB0aGF0IGNvbnRleHQuPC9wPlxuLy9cbi8vIDxwPlxuLy8gU29tZXRoaW5nIHNob3VsZCBiZSBkb25lIGZvciBsZWZ0LXJlY3Vyc2l2ZSBleHByZXNzaW9uIHByZWRpY3Rpb25zLiBUaGV5IGFyZVxuLy8gbGlrZWx5IExMKDEpICsgcHJlZCBldmFsLiBFYXNpZXIgdG8gZG8gdGhlIHdob2xlIFNMTCB1bmxlc3MgZXJyb3IgYW5kIHJldHJ5XG4vLyB3aXRoIGZ1bGwgTEwgdGhpbmcgU2FtIGRvZXMuPC9wPlxuLy9cbi8vIDxwPlxuLy8gPHN0cm9uZz5BVk9JRElORyBGVUxMIENPTlRFWFQgUFJFRElDVElPTjwvc3Ryb25nPjwvcD5cbi8vXG4vLyA8cD5cbi8vIFdlIGF2b2lkIGRvaW5nIGZ1bGwgY29udGV4dCByZXRyeSB3aGVuIHRoZSBvdXRlciBjb250ZXh0IGlzIGVtcHR5LCB3ZSBkaWQgbm90XG4vLyBkaXAgaW50byB0aGUgb3V0ZXIgY29udGV4dCBieSBmYWxsaW5nIG9mZiB0aGUgZW5kIG9mIHRoZSBkZWNpc2lvbiBzdGF0ZSBydWxlLFxuLy8gb3Igd2hlbiB3ZSBmb3JjZSBTTEwgbW9kZS48L3A+XG4vL1xuLy8gPHA+XG4vLyBBcyBhbiBleGFtcGxlIG9mIHRoZSBub3QgZGlwIGludG8gb3V0ZXIgY29udGV4dCBjYXNlLCBjb25zaWRlciBhcyBzdXBlclxuLy8gY29uc3RydWN0b3IgY2FsbHMgdmVyc3VzIGZ1bmN0aW9uIGNhbGxzLiBPbmUgZ3JhbW1hciBtaWdodCBsb29rIGxpa2Vcbi8vIHRoaXM6PC9wPlxuLy9cbi8vIDxwcmU+XG4vLyBjdG9yQm9keVxuLy8gICA6ICd7JyBzdXBlckNhbGw/IHN0YXQqICd9J1xuLy8gICA7XG4vLyA8L3ByZT5cbi8vXG4vLyA8cD5cbi8vIE9yLCB5b3UgbWlnaHQgc2VlIHNvbWV0aGluZyBsaWtlPC9wPlxuLy9cbi8vIDxwcmU+XG4vLyBzdGF0XG4vLyAgIDogc3VwZXJDYWxsICc7J1xuLy8gICB8IGV4cHJlc3Npb24gJzsnXG4vLyAgIHwgLi4uXG4vLyAgIDtcbi8vIDwvcHJlPlxuLy9cbi8vIDxwPlxuLy8gSW4gYm90aCBjYXNlcyBJIGJlbGlldmUgdGhhdCBubyBjbG9zdXJlIG9wZXJhdGlvbnMgd2lsbCBkaXAgaW50byB0aGUgb3V0ZXJcbi8vIGNvbnRleHQuIEluIHRoZSBmaXJzdCBjYXNlIGN0b3JCb2R5IGluIHRoZSB3b3JzdCBjYXNlIHdpbGwgc3RvcCBhdCB0aGUgJ30nLlxuLy8gSW4gdGhlIDJuZCBjYXNlIGl0IHNob3VsZCBzdG9wIGF0IHRoZSAnOycuIEJvdGggY2FzZXMgc2hvdWxkIHN0YXkgd2l0aGluIHRoZVxuLy8gZW50cnkgcnVsZSBhbmQgbm90IGRpcCBpbnRvIHRoZSBvdXRlciBjb250ZXh0LjwvcD5cbi8vXG4vLyA8cD5cbi8vIDxzdHJvbmc+UFJFRElDQVRFUzwvc3Ryb25nPjwvcD5cbi8vXG4vLyA8cD5cbi8vIFByZWRpY2F0ZXMgYXJlIGFsd2F5cyBldmFsdWF0ZWQgaWYgcHJlc2VudCBpbiBlaXRoZXIgU0xMIG9yIExMIGJvdGguIFNMTCBhbmRcbi8vIExMIHNpbXVsYXRpb24gZGVhbHMgd2l0aCBwcmVkaWNhdGVzIGRpZmZlcmVudGx5LiBTTEwgY29sbGVjdHMgcHJlZGljYXRlcyBhc1xuLy8gaXQgcGVyZm9ybXMgY2xvc3VyZSBvcGVyYXRpb25zIGxpa2UgQU5UTFIgdjMgZGlkLiBJdCBkZWxheXMgcHJlZGljYXRlXG4vLyBldmFsdWF0aW9uIHVudGlsIGl0IHJlYWNoZXMgYW5kIGFjY2VwdCBzdGF0ZS4gVGhpcyBhbGxvd3MgdXMgdG8gY2FjaGUgdGhlIFNMTFxuLy8gQVROIHNpbXVsYXRpb24gd2hlcmVhcywgaWYgd2UgaGFkIGV2YWx1YXRlZCBwcmVkaWNhdGVzIG9uLXRoZS1mbHkgZHVyaW5nXG4vLyBjbG9zdXJlLCB0aGUgREZBIHN0YXRlIGNvbmZpZ3VyYXRpb24gc2V0cyB3b3VsZCBiZSBkaWZmZXJlbnQgYW5kIHdlIGNvdWxkbid0XG4vLyBidWlsZCB1cCBhIHN1aXRhYmxlIERGQS48L3A+XG4vL1xuLy8gPHA+XG4vLyBXaGVuIGJ1aWxkaW5nIGEgREZBIGFjY2VwdCBzdGF0ZSBkdXJpbmcgQVROIHNpbXVsYXRpb24sIHdlIGV2YWx1YXRlIGFueVxuLy8gcHJlZGljYXRlcyBhbmQgcmV0dXJuIHRoZSBzb2xlIHNlbWFudGljYWxseSB2YWxpZCBhbHRlcm5hdGl2ZS4gSWYgdGhlcmUgaXNcbi8vIG1vcmUgdGhhbiAxIGFsdGVybmF0aXZlLCB3ZSByZXBvcnQgYW4gYW1iaWd1aXR5LiBJZiB0aGVyZSBhcmUgMCBhbHRlcm5hdGl2ZXMsXG4vLyB3ZSB0aHJvdyBhbiBleGNlcHRpb24uIEFsdGVybmF0aXZlcyB3aXRob3V0IHByZWRpY2F0ZXMgYWN0IGxpa2UgdGhleSBoYXZlXG4vLyB0cnVlIHByZWRpY2F0ZXMuIFRoZSBzaW1wbGUgd2F5IHRvIHRoaW5rIGFib3V0IGl0IGlzIHRvIHN0cmlwIGF3YXkgYWxsXG4vLyBhbHRlcm5hdGl2ZXMgd2l0aCBmYWxzZSBwcmVkaWNhdGVzIGFuZCBjaG9vc2UgdGhlIG1pbmltdW0gYWx0ZXJuYXRpdmUgdGhhdFxuLy8gcmVtYWlucy48L3A+XG4vL1xuLy8gPHA+XG4vLyBXaGVuIHdlIHN0YXJ0IGluIHRoZSBERkEgYW5kIHJlYWNoIGFuIGFjY2VwdCBzdGF0ZSB0aGF0J3MgcHJlZGljYXRlZCwgd2UgdGVzdFxuLy8gdGhvc2UgYW5kIHJldHVybiB0aGUgbWluaW11bSBzZW1hbnRpY2FsbHkgdmlhYmxlIGFsdGVybmF0aXZlLiBJZiBub1xuLy8gYWx0ZXJuYXRpdmVzIGFyZSB2aWFibGUsIHdlIHRocm93IGFuIGV4Y2VwdGlvbi48L3A+XG4vL1xuLy8gPHA+XG4vLyBEdXJpbmcgZnVsbCBMTCBBVE4gc2ltdWxhdGlvbiwgY2xvc3VyZSBhbHdheXMgZXZhbHVhdGVzIHByZWRpY2F0ZXMgYW5kXG4vLyBvbi10aGUtZmx5LiBUaGlzIGlzIGNydWNpYWwgdG8gcmVkdWNpbmcgdGhlIGNvbmZpZ3VyYXRpb24gc2V0IHNpemUgZHVyaW5nXG4vLyBjbG9zdXJlLiBJdCBoaXRzIGEgbGFuZG1pbmUgd2hlbiBwYXJzaW5nIHdpdGggdGhlIEphdmEgZ3JhbW1hciwgZm9yIGV4YW1wbGUsXG4vLyB3aXRob3V0IHRoaXMgb24tdGhlLWZseSBldmFsdWF0aW9uLjwvcD5cbi8vXG4vLyA8cD5cbi8vIDxzdHJvbmc+U0hBUklORyBERkE8L3N0cm9uZz48L3A+XG4vL1xuLy8gPHA+XG4vLyBBbGwgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIHBhcnNlciBzaGFyZSB0aGUgc2FtZSBkZWNpc2lvbiBERkFzIHRocm91Z2ggYVxuLy8gc3RhdGljIGZpZWxkLiBFYWNoIGluc3RhbmNlIGdldHMgaXRzIG93biBBVE4gc2ltdWxhdG9yIGJ1dCB0aGV5IHNoYXJlIHRoZVxuLy8gc2FtZSB7QGxpbmsgLy9kZWNpc2lvblRvREZBfSBmaWVsZC4gVGhleSBhbHNvIHNoYXJlIGFcbi8vIHtAbGluayBQcmVkaWN0aW9uQ29udGV4dENhY2hlfSBvYmplY3QgdGhhdCBtYWtlcyBzdXJlIHRoYXQgYWxsXG4vLyB7QGxpbmsgUHJlZGljdGlvbkNvbnRleHR9IG9iamVjdHMgYXJlIHNoYXJlZCBhbW9uZyB0aGUgREZBIHN0YXRlcy4gVGhpcyBtYWtlc1xuLy8gYSBiaWcgc2l6ZSBkaWZmZXJlbmNlLjwvcD5cbi8vXG4vLyA8cD5cbi8vIDxzdHJvbmc+VEhSRUFEIFNBRkVUWTwvc3Ryb25nPjwvcD5cbi8vXG4vLyA8cD5cbi8vIFRoZSB7QGxpbmsgUGFyc2VyQVROU2ltdWxhdG9yfSBsb2NrcyBvbiB0aGUge0BsaW5rIC8vZGVjaXNpb25Ub0RGQX0gZmllbGQgd2hlblxuLy8gaXQgYWRkcyBhIG5ldyBERkEgb2JqZWN0IHRvIHRoYXQgYXJyYXkuIHtAbGluayAvL2FkZERGQUVkZ2V9XG4vLyBsb2NrcyBvbiB0aGUgREZBIGZvciB0aGUgY3VycmVudCBkZWNpc2lvbiB3aGVuIHNldHRpbmcgdGhlXG4vLyB7QGxpbmsgREZBU3RhdGUvL2VkZ2VzfSBmaWVsZC4ge0BsaW5rIC8vYWRkREZBU3RhdGV9IGxvY2tzIG9uXG4vLyB0aGUgREZBIGZvciB0aGUgY3VycmVudCBkZWNpc2lvbiB3aGVuIGxvb2tpbmcgdXAgYSBERkEgc3RhdGUgdG8gc2VlIGlmIGl0XG4vLyBhbHJlYWR5IGV4aXN0cy4gV2UgbXVzdCBtYWtlIHN1cmUgdGhhdCBhbGwgcmVxdWVzdHMgdG8gYWRkIERGQSBzdGF0ZXMgdGhhdFxuLy8gYXJlIGVxdWl2YWxlbnQgcmVzdWx0IGluIHRoZSBzYW1lIHNoYXJlZCBERkEgb2JqZWN0LiBUaGlzIGlzIGJlY2F1c2UgbG90cyBvZlxuLy8gdGhyZWFkcyB3aWxsIGJlIHRyeWluZyB0byB1cGRhdGUgdGhlIERGQSBhdCBvbmNlLiBUaGVcbi8vIHtAbGluayAvL2FkZERGQVN0YXRlfSBtZXRob2QgYWxzbyBsb2NrcyBpbnNpZGUgdGhlIERGQSBsb2NrXG4vLyBidXQgdGhpcyB0aW1lIG9uIHRoZSBzaGFyZWQgY29udGV4dCBjYWNoZSB3aGVuIGl0IHJlYnVpbGRzIHRoZVxuLy8gY29uZmlndXJhdGlvbnMnIHtAbGluayBQcmVkaWN0aW9uQ29udGV4dH0gb2JqZWN0cyB1c2luZyBjYWNoZWRcbi8vIHN1YmdyYXBocy9ub2Rlcy4gTm8gb3RoZXIgbG9ja2luZyBvY2N1cnMsIGV2ZW4gZHVyaW5nIERGQSBzaW11bGF0aW9uLiBUaGlzIGlzXG4vLyBzYWZlIGFzIGxvbmcgYXMgd2UgY2FuIGd1YXJhbnRlZSB0aGF0IGFsbCB0aHJlYWRzIHJlZmVyZW5jaW5nXG4vLyB7QGNvZGUgcy5lZGdlW3RdfSBnZXQgdGhlIHNhbWUgcGh5c2ljYWwgdGFyZ2V0IHtAbGluayBERkFTdGF0ZX0sIG9yXG4vLyB7QGNvZGUgbnVsbH0uIE9uY2UgaW50byB0aGUgREZBLCB0aGUgREZBIHNpbXVsYXRpb24gZG9lcyBub3QgcmVmZXJlbmNlIHRoZVxuLy8ge0BsaW5rIERGQS8vc3RhdGVzfSBtYXAuIEl0IGZvbGxvd3MgdGhlIHtAbGluayBERkFTdGF0ZS8vZWRnZXN9IGZpZWxkIHRvIG5ld1xuLy8gdGFyZ2V0cy4gVGhlIERGQSBzaW11bGF0b3Igd2lsbCBlaXRoZXIgZmluZCB7QGxpbmsgREZBU3RhdGUvL2VkZ2VzfSB0byBiZVxuLy8ge0Bjb2RlIG51bGx9LCB0byBiZSBub24te0Bjb2RlIG51bGx9IGFuZCB7QGNvZGUgZGZhLmVkZ2VzW3RdfSBudWxsLCBvclxuLy8ge0Bjb2RlIGRmYS5lZGdlc1t0XX0gdG8gYmUgbm9uLW51bGwuIFRoZVxuLy8ge0BsaW5rIC8vYWRkREZBRWRnZX0gbWV0aG9kIGNvdWxkIGJlIHJhY2luZyB0byBzZXQgdGhlIGZpZWxkXG4vLyBidXQgaW4gZWl0aGVyIGNhc2UgdGhlIERGQSBzaW11bGF0b3Igd29ya3M7IGlmIHtAY29kZSBudWxsfSwgYW5kIHJlcXVlc3RzIEFUTlxuLy8gc2ltdWxhdGlvbi4gSXQgY291bGQgYWxzbyByYWNlIHRyeWluZyB0byBnZXQge0Bjb2RlIGRmYS5lZGdlc1t0XX0sIGJ1dCBlaXRoZXJcbi8vIHdheSBpdCB3aWxsIHdvcmsgYmVjYXVzZSBpdCdzIG5vdCBkb2luZyBhIHRlc3QgYW5kIHNldCBvcGVyYXRpb24uPC9wPlxuLy9cbi8vIDxwPlxuLy8gPHN0cm9uZz5TdGFydGluZyB3aXRoIFNMTCB0aGVuIGZhaWxpbmcgdG8gY29tYmluZWQgU0xML0xMIChUd28tU3RhZ2Vcbi8vIFBhcnNpbmcpPC9zdHJvbmc+PC9wPlxuLy9cbi8vIDxwPlxuLy8gU2FtIHBvaW50ZWQgb3V0IHRoYXQgaWYgU0xMIGRvZXMgbm90IGdpdmUgYSBzeW50YXggZXJyb3IsIHRoZW4gdGhlcmUgaXMgbm9cbi8vIHBvaW50IGluIGRvaW5nIGZ1bGwgTEwsIHdoaWNoIGlzIHNsb3dlci4gV2Ugb25seSBoYXZlIHRvIHRyeSBMTCBpZiB3ZSBnZXQgYVxuLy8gc3ludGF4IGVycm9yLiBGb3IgbWF4aW11bSBzcGVlZCwgU2FtIHN0YXJ0cyB0aGUgcGFyc2VyIHNldCB0byBwdXJlIFNMTFxuLy8gbW9kZSB3aXRoIHRoZSB7QGxpbmsgQmFpbEVycm9yU3RyYXRlZ3l9OjwvcD5cbi8vXG4vLyA8cHJlPlxuLy8gcGFyc2VyLntAbGluayBQYXJzZXIvL2dldEludGVycHJldGVyKCkgZ2V0SW50ZXJwcmV0ZXIoKX0ue0BsaW5rIC8vc2V0UHJlZGljdGlvbk1vZGUgc2V0UHJlZGljdGlvbk1vZGV9e0Bjb2RlICh9e0BsaW5rIFByZWRpY3Rpb25Nb2RlLy9TTEx9e0Bjb2RlICl9O1xuLy8gcGFyc2VyLntAbGluayBQYXJzZXIvL3NldEVycm9ySGFuZGxlciBzZXRFcnJvckhhbmRsZXJ9KG5ldyB7QGxpbmsgQmFpbEVycm9yU3RyYXRlZ3l9KCkpO1xuLy8gPC9wcmU+XG4vL1xuLy8gPHA+XG4vLyBJZiBpdCBkb2VzIG5vdCBnZXQgYSBzeW50YXggZXJyb3IsIHRoZW4gd2UncmUgZG9uZS4gSWYgaXQgZG9lcyBnZXQgYSBzeW50YXhcbi8vIGVycm9yLCB3ZSBuZWVkIHRvIHJldHJ5IHdpdGggdGhlIGNvbWJpbmVkIFNMTC9MTCBzdHJhdGVneS48L3A+XG4vL1xuLy8gPHA+XG4vLyBUaGUgcmVhc29uIHRoaXMgd29ya3MgaXMgYXMgZm9sbG93cy4gSWYgdGhlcmUgYXJlIG5vIFNMTCBjb25mbGljdHMsIHRoZW4gdGhlXG4vLyBncmFtbWFyIGlzIFNMTCAoYXQgbGVhc3QgZm9yIHRoYXQgaW5wdXQgc2V0KS4gSWYgdGhlcmUgaXMgYW4gU0xMIGNvbmZsaWN0LFxuLy8gdGhlIGZ1bGwgTEwgYW5hbHlzaXMgbXVzdCB5aWVsZCBhIHNldCBvZiB2aWFibGUgYWx0ZXJuYXRpdmVzIHdoaWNoIGlzIGFcbi8vIHN1YnNldCBvZiB0aGUgYWx0ZXJuYXRpdmVzIHJlcG9ydGVkIGJ5IFNMTC4gSWYgdGhlIExMIHNldCBpcyBhIHNpbmdsZXRvbixcbi8vIHRoZW4gdGhlIGdyYW1tYXIgaXMgTEwgYnV0IG5vdCBTTEwuIElmIHRoZSBMTCBzZXQgaXMgdGhlIHNhbWUgc2l6ZSBhcyB0aGUgU0xMXG4vLyBzZXQsIHRoZSBkZWNpc2lvbiBpcyBTTEwuIElmIHRoZSBMTCBzZXQgaGFzIHNpemUgJmd0OyAxLCB0aGVuIHRoYXQgZGVjaXNpb25cbi8vIGlzIHRydWx5IGFtYmlndW91cyBvbiB0aGUgY3VycmVudCBpbnB1dC4gSWYgdGhlIExMIHNldCBpcyBzbWFsbGVyLCB0aGVuIHRoZVxuLy8gU0xMIGNvbmZsaWN0IHJlc29sdXRpb24gbWlnaHQgY2hvb3NlIGFuIGFsdGVybmF0aXZlIHRoYXQgdGhlIGZ1bGwgTEwgd291bGRcbi8vIHJ1bGUgb3V0IGFzIGEgcG9zc2liaWxpdHkgYmFzZWQgdXBvbiBiZXR0ZXIgY29udGV4dCBpbmZvcm1hdGlvbi4gSWYgdGhhdCdzXG4vLyB0aGUgY2FzZSwgdGhlbiB0aGUgU0xMIHBhcnNlIHdpbGwgZGVmaW5pdGVseSBnZXQgYW4gZXJyb3IgYmVjYXVzZSB0aGUgZnVsbCBMTFxuLy8gYW5hbHlzaXMgc2F5cyBpdCdzIG5vdCB2aWFibGUuIElmIFNMTCBjb25mbGljdCByZXNvbHV0aW9uIGNob29zZXMgYW5cbi8vIGFsdGVybmF0aXZlIHdpdGhpbiB0aGUgTEwgc2V0LCB0aGVtIGJvdGggU0xMIGFuZCBMTCB3b3VsZCBjaG9vc2UgdGhlIHNhbWVcbi8vIGFsdGVybmF0aXZlIGJlY2F1c2UgdGhleSBib3RoIGNob29zZSB0aGUgbWluaW11bSBvZiBtdWx0aXBsZSBjb25mbGljdGluZ1xuLy8gYWx0ZXJuYXRpdmVzLjwvcD5cbi8vXG4vLyA8cD5cbi8vIExldCdzIHNheSB3ZSBoYXZlIGEgc2V0IG9mIFNMTCBjb25mbGljdGluZyBhbHRlcm5hdGl2ZXMge0Bjb2RlIHsxLCAyLCAzfX0gYW5kXG4vLyBhIHNtYWxsZXIgTEwgc2V0IGNhbGxlZCA8ZW0+czwvZW0+LiBJZiA8ZW0+czwvZW0+IGlzIHtAY29kZSB7MiwgM319LCB0aGVuIFNMTFxuLy8gcGFyc2luZyB3aWxsIGdldCBhbiBlcnJvciBiZWNhdXNlIFNMTCB3aWxsIHB1cnN1ZSBhbHRlcm5hdGl2ZSAxLiBJZlxuLy8gPGVtPnM8L2VtPiBpcyB7QGNvZGUgezEsIDJ9fSBvciB7QGNvZGUgezEsIDN9fSB0aGVuIGJvdGggU0xMIGFuZCBMTCB3aWxsXG4vLyBjaG9vc2UgdGhlIHNhbWUgYWx0ZXJuYXRpdmUgYmVjYXVzZSBhbHRlcm5hdGl2ZSBvbmUgaXMgdGhlIG1pbmltdW0gb2YgZWl0aGVyXG4vLyBzZXQuIElmIDxlbT5zPC9lbT4gaXMge0Bjb2RlIHsyfX0gb3Ige0Bjb2RlIHszfX0gdGhlbiBTTEwgd2lsbCBnZXQgYSBzeW50YXhcbi8vIGVycm9yLiBJZiA8ZW0+czwvZW0+IGlzIHtAY29kZSB7MX19IHRoZW4gU0xMIHdpbGwgc3VjY2VlZC48L3A+XG4vL1xuLy8gPHA+XG4vLyBPZiBjb3Vyc2UsIGlmIHRoZSBpbnB1dCBpcyBpbnZhbGlkLCB0aGVuIHdlIHdpbGwgZ2V0IGFuIGVycm9yIGZvciBzdXJlIGluXG4vLyBib3RoIFNMTCBhbmQgTEwgcGFyc2luZy4gRXJyb25lb3VzIGlucHV0IHdpbGwgdGhlcmVmb3JlIHJlcXVpcmUgMiBwYXNzZXMgb3ZlclxuLy8gdGhlIGlucHV0LjwvcD5cbi8vXG5cbnZhciBVdGlscyA9IHJlcXVpcmUoJy4vLi4vVXRpbHMnKTtcbnZhciBTZXQgPSBVdGlscy5TZXQ7XG52YXIgQml0U2V0ID0gVXRpbHMuQml0U2V0O1xudmFyIERvdWJsZURpY3QgPSBVdGlscy5Eb3VibGVEaWN0O1xudmFyIEFUTiA9IHJlcXVpcmUoJy4vQVROJykuQVROO1xudmFyIEFUTlN0YXRlID0gcmVxdWlyZSgnLi9BVE5TdGF0ZScpLkFUTlN0YXRlO1xudmFyIEFUTkNvbmZpZyA9IHJlcXVpcmUoJy4vQVROQ29uZmlnJykuQVROQ29uZmlnO1xudmFyIEFUTkNvbmZpZ1NldCA9IHJlcXVpcmUoJy4vQVROQ29uZmlnU2V0JykuQVROQ29uZmlnU2V0O1xudmFyIFRva2VuID0gcmVxdWlyZSgnLi8uLi9Ub2tlbicpLlRva2VuO1xudmFyIERGQVN0YXRlID0gcmVxdWlyZSgnLi8uLi9kZmEvREZBU3RhdGUnKS5ERkFTdGF0ZTtcbnZhciBQcmVkUHJlZGljdGlvbiA9IHJlcXVpcmUoJy4vLi4vZGZhL0RGQVN0YXRlJykuUHJlZFByZWRpY3Rpb247XG52YXIgQVROU2ltdWxhdG9yID0gcmVxdWlyZSgnLi9BVE5TaW11bGF0b3InKS5BVE5TaW11bGF0b3I7XG52YXIgUHJlZGljdGlvbk1vZGUgPSByZXF1aXJlKCcuL1ByZWRpY3Rpb25Nb2RlJykuUHJlZGljdGlvbk1vZGU7XG52YXIgUnVsZUNvbnRleHQgPSByZXF1aXJlKCcuLy4uL1J1bGVDb250ZXh0JykuUnVsZUNvbnRleHQ7XG52YXIgUGFyc2VyUnVsZUNvbnRleHQgPSByZXF1aXJlKCcuLy4uL1BhcnNlclJ1bGVDb250ZXh0JykuUGFyc2VyUnVsZUNvbnRleHQ7XG52YXIgU2VtYW50aWNDb250ZXh0ID0gcmVxdWlyZSgnLi9TZW1hbnRpY0NvbnRleHQnKS5TZW1hbnRpY0NvbnRleHQ7XG52YXIgU3Rhckxvb3BFbnRyeVN0YXRlID0gcmVxdWlyZSgnLi9BVE5TdGF0ZScpLlN0YXJMb29wRW50cnlTdGF0ZTtcbnZhciBSdWxlU3RvcFN0YXRlID0gcmVxdWlyZSgnLi9BVE5TdGF0ZScpLlJ1bGVTdG9wU3RhdGU7XG52YXIgUHJlZGljdGlvbkNvbnRleHQgPSByZXF1aXJlKCcuLy4uL1ByZWRpY3Rpb25Db250ZXh0JykuUHJlZGljdGlvbkNvbnRleHQ7XG52YXIgSW50ZXJ2YWwgPSByZXF1aXJlKCcuLy4uL0ludGVydmFsU2V0JykuSW50ZXJ2YWw7XG52YXIgVHJhbnNpdGlvbnMgPSByZXF1aXJlKCcuL1RyYW5zaXRpb24nKTtcbnZhciBUcmFuc2l0aW9uID0gVHJhbnNpdGlvbnMuVHJhbnNpdGlvbjtcbnZhciBTZXRUcmFuc2l0aW9uID0gVHJhbnNpdGlvbnMuU2V0VHJhbnNpdGlvbjtcbnZhciBOb3RTZXRUcmFuc2l0aW9uID0gVHJhbnNpdGlvbnMuTm90U2V0VHJhbnNpdGlvbjtcbnZhciBSdWxlVHJhbnNpdGlvbiA9IFRyYW5zaXRpb25zLlJ1bGVUcmFuc2l0aW9uO1xudmFyIEFjdGlvblRyYW5zaXRpb24gPSBUcmFuc2l0aW9ucy5BY3Rpb25UcmFuc2l0aW9uO1xudmFyIE5vVmlhYmxlQWx0RXhjZXB0aW9uID0gcmVxdWlyZSgnLi8uLi9lcnJvci9FcnJvcnMnKS5Ob1ZpYWJsZUFsdEV4Y2VwdGlvbjtcblxudmFyIFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0ID0gcmVxdWlyZSgnLi8uLi9QcmVkaWN0aW9uQ29udGV4dCcpLlNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0O1xudmFyIHByZWRpY3Rpb25Db250ZXh0RnJvbVJ1bGVDb250ZXh0ID0gcmVxdWlyZSgnLi8uLi9QcmVkaWN0aW9uQ29udGV4dCcpLnByZWRpY3Rpb25Db250ZXh0RnJvbVJ1bGVDb250ZXh0O1xuXG5mdW5jdGlvbiBQYXJzZXJBVE5TaW11bGF0b3IocGFyc2VyLCBhdG4sIGRlY2lzaW9uVG9ERkEsIHNoYXJlZENvbnRleHRDYWNoZSkge1xuXHRBVE5TaW11bGF0b3IuY2FsbCh0aGlzLCBhdG4sIHNoYXJlZENvbnRleHRDYWNoZSk7XG4gICAgdGhpcy5wYXJzZXIgPSBwYXJzZXI7XG4gICAgdGhpcy5kZWNpc2lvblRvREZBID0gZGVjaXNpb25Ub0RGQTtcbiAgICAvLyBTTEwsIExMLCBvciBMTCArIGV4YWN0IGFtYmlnIGRldGVjdGlvbj8vL1xuICAgIHRoaXMucHJlZGljdGlvbk1vZGUgPSBQcmVkaWN0aW9uTW9kZS5MTDtcbiAgICAvLyBMQU1FIGdsb2JhbHMgdG8gYXZvaWQgcGFyYW1ldGVycyEhISEhIEkgbmVlZCB0aGVzZSBkb3duIGRlZXAgaW4gcHJlZFRyYW5zaXRpb25cbiAgICB0aGlzLl9pbnB1dCA9IG51bGw7XG4gICAgdGhpcy5fc3RhcnRJbmRleCA9IDA7XG4gICAgdGhpcy5fb3V0ZXJDb250ZXh0ID0gbnVsbDtcbiAgICB0aGlzLl9kZmEgPSBudWxsO1xuICAgIC8vIEVhY2ggcHJlZGljdGlvbiBvcGVyYXRpb24gdXNlcyBhIGNhY2hlIGZvciBtZXJnZSBvZiBwcmVkaWN0aW9uIGNvbnRleHRzLlxuICAgIC8vICBEb24ndCBrZWVwIGFyb3VuZCBhcyBpdCB3YXN0ZXMgaHVnZSBhbW91bnRzIG9mIG1lbW9yeS4gRG91YmxlS2V5TWFwXG4gICAgLy8gIGlzbid0IHN5bmNocm9uaXplZCBidXQgd2UncmUgb2sgc2luY2UgdHdvIHRocmVhZHMgc2hvdWxkbid0IHJldXNlIHNhbWVcbiAgICAvLyAgcGFyc2VyL2F0bnNpbSBvYmplY3QgYmVjYXVzZSBpdCBjYW4gb25seSBoYW5kbGUgb25lIGlucHV0IGF0IGEgdGltZS5cbiAgICAvLyAgVGhpcyBtYXBzIGdyYXBocyBhIGFuZCBiIHRvIG1lcmdlZCByZXN1bHQgYy4gKGEsYikmcmFycjtjLiBXZSBjYW4gYXZvaWRcbiAgICAvLyAgdGhlIG1lcmdlIGlmIHdlIGV2ZXIgc2VlIGEgYW5kIGIgYWdhaW4uICBOb3RlIHRoYXQgKGIsYSkmcmFycjtjIHNob3VsZFxuICAgIC8vICBhbHNvIGJlIGV4YW1pbmVkIGR1cmluZyBjYWNoZSBsb29rdXAuXG4gICAgLy9cbiAgICB0aGlzLm1lcmdlQ2FjaGUgPSBudWxsO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBVE5TaW11bGF0b3IucHJvdG90eXBlKTtcblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJzZXJBVE5TaW11bGF0b3I7XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZGVidWcgPSBmYWxzZTtcblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZGVidWdfY2xvc3VyZSA9IGZhbHNlO1xuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5kZWJ1Z19hZGQgPSBmYWxzZTtcblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZGVidWdfbGlzdF9hdG5fZGVjaXNpb25zID0gZmFsc2U7XG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmRmYV9kZWJ1ZyA9IGZhbHNlO1xuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5yZXRyeV9kZWJ1ZyA9IGZhbHNlO1xuXG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbigpIHtcbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuYWRhcHRpdmVQcmVkaWN0ID0gZnVuY3Rpb24oaW5wdXQsIGRlY2lzaW9uLCBvdXRlckNvbnRleHQpIHtcbiAgICBpZiAodGhpcy5kZWJ1ZyB8fCB0aGlzLmRlYnVnX2xpc3RfYXRuX2RlY2lzaW9ucykge1xuICAgICAgICBjb25zb2xlLmxvZyhcImFkYXB0aXZlUHJlZGljdCBkZWNpc2lvbiBcIiArIGRlY2lzaW9uICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBleGVjIExBKDEpPT1cIiArIHRoaXMuZ2V0TG9va2FoZWFkTmFtZShpbnB1dCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIGxpbmUgXCIgKyBpbnB1dC5MVCgxKS5saW5lICsgXCI6XCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LkxUKDEpLmNvbHVtbik7XG4gICAgfVxuICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG4gICAgdGhpcy5fc3RhcnRJbmRleCA9IGlucHV0LmluZGV4O1xuICAgIHRoaXMuX291dGVyQ29udGV4dCA9IG91dGVyQ29udGV4dDtcblxuICAgIHZhciBkZmEgPSB0aGlzLmRlY2lzaW9uVG9ERkFbZGVjaXNpb25dO1xuICAgIHRoaXMuX2RmYSA9IGRmYTtcbiAgICB2YXIgbSA9IGlucHV0Lm1hcmsoKTtcbiAgICB2YXIgaW5kZXggPSBpbnB1dC5pbmRleDtcblxuICAgIC8vIE5vdyB3ZSBhcmUgY2VydGFpbiB0byBoYXZlIGEgc3BlY2lmaWMgZGVjaXNpb24ncyBERkFcbiAgICAvLyBCdXQsIGRvIHdlIHN0aWxsIG5lZWQgYW4gaW5pdGlhbCBzdGF0ZT9cbiAgICB0cnkge1xuICAgICAgICB2YXIgczA7XG4gICAgICAgIGlmIChkZmEucHJlY2VkZW5jZURmYSkge1xuICAgICAgICAgICAgLy8gdGhlIHN0YXJ0IHN0YXRlIGZvciBhIHByZWNlZGVuY2UgREZBIGRlcGVuZHMgb24gdGhlIGN1cnJlbnRcbiAgICAgICAgICAgIC8vIHBhcnNlciBwcmVjZWRlbmNlLCBhbmQgaXMgcHJvdmlkZWQgYnkgYSBERkEgbWV0aG9kLlxuICAgICAgICAgICAgczAgPSBkZmEuZ2V0UHJlY2VkZW5jZVN0YXJ0U3RhdGUodGhpcy5wYXJzZXIuZ2V0UHJlY2VkZW5jZSgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHRoZSBzdGFydCBzdGF0ZSBmb3IgYSBcInJlZ3VsYXJcIiBERkEgaXMganVzdCBzMFxuICAgICAgICAgICAgczAgPSBkZmEuczA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMwPT09bnVsbCkge1xuICAgICAgICAgICAgaWYgKG91dGVyQ29udGV4dD09PW51bGwpIHtcbiAgICAgICAgICAgICAgICBvdXRlckNvbnRleHQgPSBSdWxlQ29udGV4dC5FTVBUWTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnIHx8IHRoaXMuZGVidWdfbGlzdF9hdG5fZGVjaXNpb25zKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJwcmVkaWN0QVROIGRlY2lzaW9uIFwiICsgZGZhLmRlY2lzaW9uICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgZXhlYyBMQSgxKT09XCIgKyB0aGlzLmdldExvb2thaGVhZE5hbWUoaW5wdXQpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIsIG91dGVyQ29udGV4dD1cIiArIG91dGVyQ29udGV4dC50b1N0cmluZyh0aGlzLnBhcnNlci5ydWxlTmFtZXMpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGZ1bGxDdHggPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBzMF9jbG9zdXJlID0gdGhpcy5jb21wdXRlU3RhcnRTdGF0ZShkZmEuYXRuU3RhcnRTdGF0ZSwgUnVsZUNvbnRleHQuRU1QVFksIGZ1bGxDdHgpO1xuXG4gICAgICAgICAgICBpZiggZGZhLnByZWNlZGVuY2VEZmEpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgcHJlY2VkZW5jZSBERkEsIHdlIHVzZSBhcHBseVByZWNlZGVuY2VGaWx0ZXJcbiAgICAgICAgICAgICAgICAvLyB0byBjb252ZXJ0IHRoZSBjb21wdXRlZCBzdGFydCBzdGF0ZSB0byBhIHByZWNlZGVuY2Ugc3RhcnRcbiAgICAgICAgICAgICAgICAvLyBzdGF0ZS4gV2UgdGhlbiB1c2UgREZBLnNldFByZWNlZGVuY2VTdGFydFN0YXRlIHRvIHNldCB0aGVcbiAgICAgICAgICAgICAgICAvLyBhcHByb3ByaWF0ZSBzdGFydCBzdGF0ZSBmb3IgdGhlIHByZWNlZGVuY2UgbGV2ZWwgcmF0aGVyXG4gICAgICAgICAgICAgICAgLy8gdGhhbiBzaW1wbHkgc2V0dGluZyBERkEuczAuXG4gICAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgICBkZmEuczAuY29uZmlncyA9IHMwX2Nsb3N1cmU7IC8vIG5vdCB1c2VkIGZvciBwcmVkaWN0aW9uIGJ1dCB1c2VmdWwgdG8ga25vdyBzdGFydCBjb25maWdzIGFueXdheVxuICAgICAgICAgICAgICAgIHMwX2Nsb3N1cmUgPSB0aGlzLmFwcGx5UHJlY2VkZW5jZUZpbHRlcihzMF9jbG9zdXJlKTtcbiAgICAgICAgICAgICAgICBzMCA9IHRoaXMuYWRkREZBU3RhdGUoZGZhLCBuZXcgREZBU3RhdGUobnVsbCwgczBfY2xvc3VyZSkpO1xuICAgICAgICAgICAgICAgIGRmYS5zZXRQcmVjZWRlbmNlU3RhcnRTdGF0ZSh0aGlzLnBhcnNlci5nZXRQcmVjZWRlbmNlKCksIHMwKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgczAgPSB0aGlzLmFkZERGQVN0YXRlKGRmYSwgbmV3IERGQVN0YXRlKG51bGwsIHMwX2Nsb3N1cmUpKTtcbiAgICAgICAgICAgICAgICBkZmEuczAgPSBzMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgYWx0ID0gdGhpcy5leGVjQVROKGRmYSwgczAsIGlucHV0LCBpbmRleCwgb3V0ZXJDb250ZXh0KTtcbiAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiREZBIGFmdGVyIHByZWRpY3RBVE46IFwiICsgZGZhLnRvU3RyaW5nKHRoaXMucGFyc2VyLmxpdGVyYWxOYW1lcykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhbHQ7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5fZGZhID0gbnVsbDtcbiAgICAgICAgdGhpcy5tZXJnZUNhY2hlID0gbnVsbDsgLy8gd2FjayBjYWNoZSBhZnRlciBlYWNoIHByZWRpY3Rpb25cbiAgICAgICAgaW5wdXQuc2VlayhpbmRleCk7XG4gICAgICAgIGlucHV0LnJlbGVhc2UobSk7XG4gICAgfVxufTtcbi8vIFBlcmZvcm1zIEFUTiBzaW11bGF0aW9uIHRvIGNvbXB1dGUgYSBwcmVkaWN0ZWQgYWx0ZXJuYXRpdmUgYmFzZWRcbi8vICB1cG9uIHRoZSByZW1haW5pbmcgaW5wdXQsIGJ1dCBhbHNvIHVwZGF0ZXMgdGhlIERGQSBjYWNoZSB0byBhdm9pZFxuLy8gIGhhdmluZyB0byB0cmF2ZXJzZSB0aGUgQVROIGFnYWluIGZvciB0aGUgc2FtZSBpbnB1dCBzZXF1ZW5jZS5cblxuLy8gVGhlcmUgYXJlIHNvbWUga2V5IGNvbmRpdGlvbnMgd2UncmUgbG9va2luZyBmb3IgYWZ0ZXIgY29tcHV0aW5nIGEgbmV3XG4vLyBzZXQgb2YgQVROIGNvbmZpZ3MgKHByb3Bvc2VkIERGQSBzdGF0ZSk6XG4gICAgICAvLyBpZiB0aGUgc2V0IGlzIGVtcHR5LCB0aGVyZSBpcyBubyB2aWFibGUgYWx0ZXJuYXRpdmUgZm9yIGN1cnJlbnQgc3ltYm9sXG4gICAgICAvLyBkb2VzIHRoZSBzdGF0ZSB1bmlxdWVseSBwcmVkaWN0IGFuIGFsdGVybmF0aXZlP1xuICAgICAgLy8gZG9lcyB0aGUgc3RhdGUgaGF2ZSBhIGNvbmZsaWN0IHRoYXQgd291bGQgcHJldmVudCB1cyBmcm9tXG4gICAgICAvLyAgIHB1dHRpbmcgaXQgb24gdGhlIHdvcmsgbGlzdD9cblxuLy8gV2UgYWxzbyBoYXZlIHNvbWUga2V5IG9wZXJhdGlvbnMgdG8gZG86XG4gICAgICAvLyBhZGQgYW4gZWRnZSBmcm9tIHByZXZpb3VzIERGQSBzdGF0ZSB0byBwb3RlbnRpYWxseSBuZXcgREZBIHN0YXRlLCBELFxuICAgICAgLy8gICB1cG9uIGN1cnJlbnQgc3ltYm9sIGJ1dCBvbmx5IGlmIGFkZGluZyB0byB3b3JrIGxpc3QsIHdoaWNoIG1lYW5zIGluIGFsbFxuICAgICAgLy8gICBjYXNlcyBleGNlcHQgbm8gdmlhYmxlIGFsdGVybmF0aXZlIChhbmQgcG9zc2libHkgbm9uLWdyZWVkeSBkZWNpc2lvbnM/KVxuICAgICAgLy8gY29sbGVjdGluZyBwcmVkaWNhdGVzIGFuZCBhZGRpbmcgc2VtYW50aWMgY29udGV4dCB0byBERkEgYWNjZXB0IHN0YXRlc1xuICAgICAgLy8gYWRkaW5nIHJ1bGUgY29udGV4dCB0byBjb250ZXh0LXNlbnNpdGl2ZSBERkEgYWNjZXB0IHN0YXRlc1xuICAgICAgLy8gY29uc3VtaW5nIGFuIGlucHV0IHN5bWJvbFxuICAgICAgLy8gcmVwb3J0aW5nIGEgY29uZmxpY3RcbiAgICAgIC8vIHJlcG9ydGluZyBhbiBhbWJpZ3VpdHlcbiAgICAgIC8vIHJlcG9ydGluZyBhIGNvbnRleHQgc2Vuc2l0aXZpdHlcbiAgICAgIC8vIHJlcG9ydGluZyBpbnN1ZmZpY2llbnQgcHJlZGljYXRlc1xuXG4vLyBjb3ZlciB0aGVzZSBjYXNlczpcbi8vICAgIGRlYWQgZW5kXG4vLyAgICBzaW5nbGUgYWx0XG4vLyAgICBzaW5nbGUgYWx0ICsgcHJlZHNcbi8vICAgIGNvbmZsaWN0XG4vLyAgICBjb25mbGljdCArIHByZWRzXG4vL1xuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5leGVjQVROID0gZnVuY3Rpb24oZGZhLCBzMCwgaW5wdXQsIHN0YXJ0SW5kZXgsIG91dGVyQ29udGV4dCApIHtcbiAgICBpZiAodGhpcy5kZWJ1ZyB8fCB0aGlzLmRlYnVnX2xpc3RfYXRuX2RlY2lzaW9ucykge1xuICAgICAgICBjb25zb2xlLmxvZyhcImV4ZWNBVE4gZGVjaXNpb24gXCIgKyBkZmEuZGVjaXNpb24gK1xuICAgICAgICAgICAgICAgIFwiIGV4ZWMgTEEoMSk9PVwiICsgdGhpcy5nZXRMb29rYWhlYWROYW1lKGlucHV0KSArXG4gICAgICAgICAgICAgICAgXCIgbGluZSBcIiArIGlucHV0LkxUKDEpLmxpbmUgKyBcIjpcIiArIGlucHV0LkxUKDEpLmNvbHVtbik7XG4gICAgfVxuICAgIHZhciBhbHQ7XG4gICAgdmFyIHByZXZpb3VzRCA9IHMwO1xuXG4gICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJzMCA9IFwiICsgczApO1xuICAgIH1cbiAgICB2YXIgdCA9IGlucHV0LkxBKDEpO1xuICAgIHdoaWxlKHRydWUpIHsgLy8gd2hpbGUgbW9yZSB3b3JrXG4gICAgICAgIHZhciBEID0gdGhpcy5nZXRFeGlzdGluZ1RhcmdldFN0YXRlKHByZXZpb3VzRCwgdCk7XG4gICAgICAgIGlmKEQ9PT1udWxsKSB7XG4gICAgICAgICAgICBEID0gdGhpcy5jb21wdXRlVGFyZ2V0U3RhdGUoZGZhLCBwcmV2aW91c0QsIHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmKEQ9PT1BVE5TaW11bGF0b3IuRVJST1IpIHtcbiAgICAgICAgICAgIC8vIGlmIGFueSBjb25maWdzIGluIHByZXZpb3VzIGRpcHBlZCBpbnRvIG91dGVyIGNvbnRleHQsIHRoYXRcbiAgICAgICAgICAgIC8vIG1lYW5zIHRoYXQgaW5wdXQgdXAgdG8gdCBhY3R1YWxseSBmaW5pc2hlZCBlbnRyeSBydWxlXG4gICAgICAgICAgICAvLyBhdCBsZWFzdCBmb3IgU0xMIGRlY2lzaW9uLiBGdWxsIExMIGRvZXNuJ3QgZGlwIGludG8gb3V0ZXJcbiAgICAgICAgICAgIC8vIHNvIGRvbid0IG5lZWQgc3BlY2lhbCBjYXNlLlxuICAgICAgICAgICAgLy8gV2Ugd2lsbCBnZXQgYW4gZXJyb3Igbm8gbWF0dGVyIHdoYXQgc28gZGVsYXkgdW50aWwgYWZ0ZXJcbiAgICAgICAgICAgIC8vIGRlY2lzaW9uOyBiZXR0ZXIgZXJyb3IgbWVzc2FnZS4gQWxzbywgbm8gcmVhY2hhYmxlIHRhcmdldFxuICAgICAgICAgICAgLy8gQVROIHN0YXRlcyBpbiBTTEwgaW1wbGllcyBMTCB3aWxsIGFsc28gZ2V0IG5vd2hlcmUuXG4gICAgICAgICAgICAvLyBJZiBjb25mbGljdCBpbiBzdGF0ZXMgdGhhdCBkaXAgb3V0LCBjaG9vc2UgbWluIHNpbmNlIHdlXG4gICAgICAgICAgICAvLyB3aWxsIGdldCBlcnJvciBubyBtYXR0ZXIgd2hhdC5cbiAgICAgICAgICAgIHZhciBlID0gdGhpcy5ub1ZpYWJsZUFsdChpbnB1dCwgb3V0ZXJDb250ZXh0LCBwcmV2aW91c0QuY29uZmlncywgc3RhcnRJbmRleCk7XG4gICAgICAgICAgICBpbnB1dC5zZWVrKHN0YXJ0SW5kZXgpO1xuICAgICAgICAgICAgYWx0ID0gdGhpcy5nZXRTeW5WYWxpZE9yU2VtSW52YWxpZEFsdFRoYXRGaW5pc2hlZERlY2lzaW9uRW50cnlSdWxlKHByZXZpb3VzRC5jb25maWdzLCBvdXRlckNvbnRleHQpO1xuICAgICAgICAgICAgaWYoYWx0IT09QVROLklOVkFMSURfQUxUX05VTUJFUikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhbHQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYoRC5yZXF1aXJlc0Z1bGxDb250ZXh0ICYmIHRoaXMucHJlZGljdGlvbk1vZGUgIT09IFByZWRpY3Rpb25Nb2RlLlNMTCkge1xuICAgICAgICAgICAgLy8gSUYgUFJFRFMsIE1JR0hUIFJFU09MVkUgVE8gU0lOR0xFIEFMVCA9PiBTTEwgKG9yIHN5bnRheCBlcnJvcilcbiAgICAgICAgICAgIHZhciBjb25mbGljdGluZ0FsdHMgPSBudWxsO1xuICAgICAgICAgICAgaWYgKEQucHJlZGljYXRlcyE9PW51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkRGQSBzdGF0ZSBoYXMgcHJlZHMgaW4gREZBIHNpbSBMTCBmYWlsb3ZlclwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIGNvbmZsaWN0SW5kZXggPSBpbnB1dC5pbmRleDtcbiAgICAgICAgICAgICAgICBpZihjb25mbGljdEluZGV4ICE9PSBzdGFydEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIGlucHV0LnNlZWsoc3RhcnRJbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbmZsaWN0aW5nQWx0cyA9IHRoaXMuZXZhbFNlbWFudGljQ29udGV4dChELnByZWRpY2F0ZXMsIG91dGVyQ29udGV4dCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbmZsaWN0aW5nQWx0cy5sZW5ndGg9PT0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRnVsbCBMTCBhdm9pZGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25mbGljdGluZ0FsdHMubWluVmFsdWUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNvbmZsaWN0SW5kZXggIT09IHN0YXJ0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVzdG9yZSB0aGUgaW5kZXggc28gcmVwb3J0aW5nIHRoZSBmYWxsYmFjayB0byBmdWxsXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnRleHQgb2NjdXJzIHdpdGggdGhlIGluZGV4IGF0IHRoZSBjb3JyZWN0IHNwb3RcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQuc2Vlayhjb25mbGljdEluZGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5kZmFfZGVidWcpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImN0eCBzZW5zaXRpdmUgc3RhdGUgXCIgKyBvdXRlckNvbnRleHQgK1wiIGluIFwiICsgRCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZnVsbEN0eCA9IHRydWU7XG4gICAgICAgICAgICB2YXIgczBfY2xvc3VyZSA9IHRoaXMuY29tcHV0ZVN0YXJ0U3RhdGUoZGZhLmF0blN0YXJ0U3RhdGUsIG91dGVyQ29udGV4dCwgZnVsbEN0eCk7XG4gICAgICAgICAgICB0aGlzLnJlcG9ydEF0dGVtcHRpbmdGdWxsQ29udGV4dChkZmEsIGNvbmZsaWN0aW5nQWx0cywgRC5jb25maWdzLCBzdGFydEluZGV4LCBpbnB1dC5pbmRleCk7XG4gICAgICAgICAgICBhbHQgPSB0aGlzLmV4ZWNBVE5XaXRoRnVsbENvbnRleHQoZGZhLCBELCBzMF9jbG9zdXJlLCBpbnB1dCwgc3RhcnRJbmRleCwgb3V0ZXJDb250ZXh0KTtcbiAgICAgICAgICAgIHJldHVybiBhbHQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEQuaXNBY2NlcHRTdGF0ZSkge1xuICAgICAgICAgICAgaWYgKEQucHJlZGljYXRlcz09PW51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gRC5wcmVkaWN0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHN0b3BJbmRleCA9IGlucHV0LmluZGV4O1xuICAgICAgICAgICAgaW5wdXQuc2VlayhzdGFydEluZGV4KTtcbiAgICAgICAgICAgIHZhciBhbHRzID0gdGhpcy5ldmFsU2VtYW50aWNDb250ZXh0KEQucHJlZGljYXRlcywgb3V0ZXJDb250ZXh0LCB0cnVlKTtcbiAgICAgICAgICAgIGlmIChhbHRzLmxlbmd0aD09PTApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyB0aGlzLm5vVmlhYmxlQWx0KGlucHV0LCBvdXRlckNvbnRleHQsIEQuY29uZmlncywgc3RhcnRJbmRleCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGFsdHMubGVuZ3RoPT09MSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhbHRzLm1pblZhbHVlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIHJlcG9ydCBhbWJpZ3VpdHkgYWZ0ZXIgcHJlZGljYXRlIGV2YWx1YXRpb24gdG8gbWFrZSBzdXJlIHRoZSBjb3JyZWN0IHNldCBvZiBhbWJpZyBhbHRzIGlzIHJlcG9ydGVkLlxuICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0QW1iaWd1aXR5KGRmYSwgRCwgc3RhcnRJbmRleCwgc3RvcEluZGV4LCBmYWxzZSwgYWx0cywgRC5jb25maWdzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWx0cy5taW5WYWx1ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHByZXZpb3VzRCA9IEQ7XG5cbiAgICAgICAgaWYgKHQgIT09IFRva2VuLkVPRikge1xuICAgICAgICAgICAgaW5wdXQuY29uc3VtZSgpO1xuICAgICAgICAgICAgdCA9IGlucHV0LkxBKDEpO1xuICAgICAgICB9XG4gICAgfVxufTtcbi8vXG4vLyBHZXQgYW4gZXhpc3RpbmcgdGFyZ2V0IHN0YXRlIGZvciBhbiBlZGdlIGluIHRoZSBERkEuIElmIHRoZSB0YXJnZXQgc3RhdGVcbi8vIGZvciB0aGUgZWRnZSBoYXMgbm90IHlldCBiZWVuIGNvbXB1dGVkIG9yIGlzIG90aGVyd2lzZSBub3QgYXZhaWxhYmxlLFxuLy8gdGhpcyBtZXRob2QgcmV0dXJucyB7QGNvZGUgbnVsbH0uXG4vL1xuLy8gQHBhcmFtIHByZXZpb3VzRCBUaGUgY3VycmVudCBERkEgc3RhdGVcbi8vIEBwYXJhbSB0IFRoZSBuZXh0IGlucHV0IHN5bWJvbFxuLy8gQHJldHVybiBUaGUgZXhpc3RpbmcgdGFyZ2V0IERGQSBzdGF0ZSBmb3IgdGhlIGdpdmVuIGlucHV0IHN5bWJvbFxuLy8ge0Bjb2RlIHR9LCBvciB7QGNvZGUgbnVsbH0gaWYgdGhlIHRhcmdldCBzdGF0ZSBmb3IgdGhpcyBlZGdlIGlzIG5vdFxuLy8gYWxyZWFkeSBjYWNoZWRcbi8vXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmdldEV4aXN0aW5nVGFyZ2V0U3RhdGUgPSBmdW5jdGlvbihwcmV2aW91c0QsIHQpIHtcbiAgICB2YXIgZWRnZXMgPSBwcmV2aW91c0QuZWRnZXM7XG4gICAgaWYgKGVkZ2VzPT09bnVsbCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZWRnZXNbdCArIDFdIHx8IG51bGw7XG4gICAgfVxufTtcbi8vXG4vLyBDb21wdXRlIGEgdGFyZ2V0IHN0YXRlIGZvciBhbiBlZGdlIGluIHRoZSBERkEsIGFuZCBhdHRlbXB0IHRvIGFkZCB0aGVcbi8vIGNvbXB1dGVkIHN0YXRlIGFuZCBjb3JyZXNwb25kaW5nIGVkZ2UgdG8gdGhlIERGQS5cbi8vXG4vLyBAcGFyYW0gZGZhIFRoZSBERkFcbi8vIEBwYXJhbSBwcmV2aW91c0QgVGhlIGN1cnJlbnQgREZBIHN0YXRlXG4vLyBAcGFyYW0gdCBUaGUgbmV4dCBpbnB1dCBzeW1ib2xcbi8vXG4vLyBAcmV0dXJuIFRoZSBjb21wdXRlZCB0YXJnZXQgREZBIHN0YXRlIGZvciB0aGUgZ2l2ZW4gaW5wdXQgc3ltYm9sXG4vLyB7QGNvZGUgdH0uIElmIHtAY29kZSB0fSBkb2VzIG5vdCBsZWFkIHRvIGEgdmFsaWQgREZBIHN0YXRlLCB0aGlzIG1ldGhvZFxuLy8gcmV0dXJucyB7QGxpbmsgLy9FUlJPUn0uXG4vL1xuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5jb21wdXRlVGFyZ2V0U3RhdGUgPSBmdW5jdGlvbihkZmEsIHByZXZpb3VzRCwgdCkge1xuICAgdmFyIHJlYWNoID0gdGhpcy5jb21wdXRlUmVhY2hTZXQocHJldmlvdXNELmNvbmZpZ3MsIHQsIGZhbHNlKTtcbiAgICBpZihyZWFjaD09PW51bGwpIHtcbiAgICAgICAgdGhpcy5hZGRERkFFZGdlKGRmYSwgcHJldmlvdXNELCB0LCBBVE5TaW11bGF0b3IuRVJST1IpO1xuICAgICAgICByZXR1cm4gQVROU2ltdWxhdG9yLkVSUk9SO1xuICAgIH1cbiAgICAvLyBjcmVhdGUgbmV3IHRhcmdldCBzdGF0ZTsgd2UnbGwgYWRkIHRvIERGQSBhZnRlciBpdCdzIGNvbXBsZXRlXG4gICAgdmFyIEQgPSBuZXcgREZBU3RhdGUobnVsbCwgcmVhY2gpO1xuXG4gICAgdmFyIHByZWRpY3RlZEFsdCA9IHRoaXMuZ2V0VW5pcXVlQWx0KHJlYWNoKTtcblxuICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgIHZhciBhbHRTdWJTZXRzID0gUHJlZGljdGlvbk1vZGUuZ2V0Q29uZmxpY3RpbmdBbHRTdWJzZXRzKHJlYWNoKTtcbiAgICAgICAgY29uc29sZS5sb2coXCJTTEwgYWx0U3ViU2V0cz1cIiArIFV0aWxzLmFycmF5VG9TdHJpbmcoYWx0U3ViU2V0cykgK1xuICAgICAgICAgICAgICAgICAgICBcIiwgcHJldmlvdXM9XCIgKyBwcmV2aW91c0QuY29uZmlncyArXG4gICAgICAgICAgICAgICAgICAgIFwiLCBjb25maWdzPVwiICsgcmVhY2ggK1xuICAgICAgICAgICAgICAgICAgICBcIiwgcHJlZGljdD1cIiArIHByZWRpY3RlZEFsdCArXG4gICAgICAgICAgICAgICAgICAgIFwiLCBhbGxTdWJzZXRzQ29uZmxpY3Q9XCIgK1xuICAgICAgICAgICAgICAgICAgICBQcmVkaWN0aW9uTW9kZS5hbGxTdWJzZXRzQ29uZmxpY3QoYWx0U3ViU2V0cykgKyBcIiwgY29uZmxpY3RpbmdBbHRzPVwiICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRDb25mbGljdGluZ0FsdHMocmVhY2gpKTtcbiAgICB9XG4gICAgaWYgKHByZWRpY3RlZEFsdCE9PUFUTi5JTlZBTElEX0FMVF9OVU1CRVIpIHtcbiAgICAgICAgLy8gTk8gQ09ORkxJQ1QsIFVOSVFVRUxZIFBSRURJQ1RFRCBBTFRcbiAgICAgICAgRC5pc0FjY2VwdFN0YXRlID0gdHJ1ZTtcbiAgICAgICAgRC5jb25maWdzLnVuaXF1ZUFsdCA9IHByZWRpY3RlZEFsdDtcbiAgICAgICAgRC5wcmVkaWN0aW9uID0gcHJlZGljdGVkQWx0O1xuICAgIH0gZWxzZSBpZiAoUHJlZGljdGlvbk1vZGUuaGFzU0xMQ29uZmxpY3RUZXJtaW5hdGluZ1ByZWRpY3Rpb24odGhpcy5wcmVkaWN0aW9uTW9kZSwgcmVhY2gpKSB7XG4gICAgICAgIC8vIE1PUkUgVEhBTiBPTkUgVklBQkxFIEFMVEVSTkFUSVZFXG4gICAgICAgIEQuY29uZmlncy5jb25mbGljdGluZ0FsdHMgPSB0aGlzLmdldENvbmZsaWN0aW5nQWx0cyhyZWFjaCk7XG4gICAgICAgIEQucmVxdWlyZXNGdWxsQ29udGV4dCA9IHRydWU7XG4gICAgICAgIC8vIGluIFNMTC1vbmx5IG1vZGUsIHdlIHdpbGwgc3RvcCBhdCB0aGlzIHN0YXRlIGFuZCByZXR1cm4gdGhlIG1pbmltdW0gYWx0XG4gICAgICAgIEQuaXNBY2NlcHRTdGF0ZSA9IHRydWU7XG4gICAgICAgIEQucHJlZGljdGlvbiA9IEQuY29uZmlncy5jb25mbGljdGluZ0FsdHMubWluVmFsdWUoKTtcbiAgICB9XG4gICAgaWYgKEQuaXNBY2NlcHRTdGF0ZSAmJiBELmNvbmZpZ3MuaGFzU2VtYW50aWNDb250ZXh0KSB7XG4gICAgICAgIHRoaXMucHJlZGljYXRlREZBU3RhdGUoRCwgdGhpcy5hdG4uZ2V0RGVjaXNpb25TdGF0ZShkZmEuZGVjaXNpb24pKTtcbiAgICAgICAgaWYoIEQucHJlZGljYXRlcyE9PW51bGwpIHtcbiAgICAgICAgICAgIEQucHJlZGljdGlvbiA9IEFUTi5JTlZBTElEX0FMVF9OVU1CRVI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gYWxsIGFkZHMgdG8gZGZhIGFyZSBkb25lIGFmdGVyIHdlJ3ZlIGNyZWF0ZWQgZnVsbCBEIHN0YXRlXG4gICAgRCA9IHRoaXMuYWRkREZBRWRnZShkZmEsIHByZXZpb3VzRCwgdCwgRCk7XG4gICAgcmV0dXJuIEQ7XG59O1xuXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLnByZWRpY2F0ZURGQVN0YXRlID0gZnVuY3Rpb24oZGZhU3RhdGUsIGRlY2lzaW9uU3RhdGUpIHtcbiAgICAvLyBXZSBuZWVkIHRvIHRlc3QgYWxsIHByZWRpY2F0ZXMsIGV2ZW4gaW4gREZBIHN0YXRlcyB0aGF0XG4gICAgLy8gdW5pcXVlbHkgcHJlZGljdCBhbHRlcm5hdGl2ZS5cbiAgICB2YXIgbmFsdHMgPSBkZWNpc2lvblN0YXRlLnRyYW5zaXRpb25zLmxlbmd0aDtcbiAgICAvLyBVcGRhdGUgREZBIHNvIHJlYWNoIGJlY29tZXMgYWNjZXB0IHN0YXRlIHdpdGggKHByZWRpY2F0ZSxhbHQpXG4gICAgLy8gcGFpcnMgaWYgcHJlZHMgZm91bmQgZm9yIGNvbmZsaWN0aW5nIGFsdHNcbiAgICB2YXIgYWx0c1RvQ29sbGVjdFByZWRzRnJvbSA9IHRoaXMuZ2V0Q29uZmxpY3RpbmdBbHRzT3JVbmlxdWVBbHQoZGZhU3RhdGUuY29uZmlncyk7XG4gICAgdmFyIGFsdFRvUHJlZCA9IHRoaXMuZ2V0UHJlZHNGb3JBbWJpZ0FsdHMoYWx0c1RvQ29sbGVjdFByZWRzRnJvbSwgZGZhU3RhdGUuY29uZmlncywgbmFsdHMpO1xuICAgIGlmIChhbHRUb1ByZWQhPT1udWxsKSB7XG4gICAgICAgIGRmYVN0YXRlLnByZWRpY2F0ZXMgPSB0aGlzLmdldFByZWRpY2F0ZVByZWRpY3Rpb25zKGFsdHNUb0NvbGxlY3RQcmVkc0Zyb20sIGFsdFRvUHJlZCk7XG4gICAgICAgIGRmYVN0YXRlLnByZWRpY3Rpb24gPSBBVE4uSU5WQUxJRF9BTFRfTlVNQkVSOyAvLyBtYWtlIHN1cmUgd2UgdXNlIHByZWRzXG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhlcmUgYXJlIHByZWRzIGluIGNvbmZpZ3MgYnV0IHRoZXkgbWlnaHQgZ28gYXdheVxuICAgICAgICAvLyB3aGVuIE9SJ2QgdG9nZXRoZXIgbGlrZSB7cH0/IHx8IE5PTkUgPT0gTk9ORS4gSWYgbmVpdGhlclxuICAgICAgICAvLyBhbHQgaGFzIHByZWRzLCByZXNvbHZlIHRvIG1pbiBhbHRcbiAgICAgICAgZGZhU3RhdGUucHJlZGljdGlvbiA9IGFsdHNUb0NvbGxlY3RQcmVkc0Zyb20ubWluVmFsdWUoKTtcbiAgICB9XG59O1xuXG4vLyBjb21lcyBiYWNrIHdpdGggcmVhY2gudW5pcXVlQWx0IHNldCB0byBhIHZhbGlkIGFsdFxuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5leGVjQVROV2l0aEZ1bGxDb250ZXh0ID0gZnVuY3Rpb24oZGZhLCBELCAvLyBob3cgZmFyIHdlIGdvdCBiZWZvcmUgZmFpbGluZyBvdmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRlckNvbnRleHQpIHtcbiAgICBpZiAodGhpcy5kZWJ1ZyB8fCB0aGlzLmRlYnVnX2xpc3RfYXRuX2RlY2lzaW9ucykge1xuICAgICAgICBjb25zb2xlLmxvZyhcImV4ZWNBVE5XaXRoRnVsbENvbnRleHQgXCIrczApO1xuICAgIH1cbiAgICB2YXIgZnVsbEN0eCA9IHRydWU7XG4gICAgdmFyIGZvdW5kRXhhY3RBbWJpZyA9IGZhbHNlO1xuICAgIHZhciByZWFjaCA9IG51bGw7XG4gICAgdmFyIHByZXZpb3VzID0gczA7XG4gICAgaW5wdXQuc2VlayhzdGFydEluZGV4KTtcbiAgICB2YXIgdCA9IGlucHV0LkxBKDEpO1xuICAgIHZhciBwcmVkaWN0ZWRBbHQgPSAtMTtcbiAgICB3aGlsZSAodHJ1ZSkgeyAvLyB3aGlsZSBtb3JlIHdvcmtcbiAgICAgICAgcmVhY2ggPSB0aGlzLmNvbXB1dGVSZWFjaFNldChwcmV2aW91cywgdCwgZnVsbEN0eCk7XG4gICAgICAgIGlmIChyZWFjaD09PW51bGwpIHtcbiAgICAgICAgICAgIC8vIGlmIGFueSBjb25maWdzIGluIHByZXZpb3VzIGRpcHBlZCBpbnRvIG91dGVyIGNvbnRleHQsIHRoYXRcbiAgICAgICAgICAgIC8vIG1lYW5zIHRoYXQgaW5wdXQgdXAgdG8gdCBhY3R1YWxseSBmaW5pc2hlZCBlbnRyeSBydWxlXG4gICAgICAgICAgICAvLyBhdCBsZWFzdCBmb3IgTEwgZGVjaXNpb24uIEZ1bGwgTEwgZG9lc24ndCBkaXAgaW50byBvdXRlclxuICAgICAgICAgICAgLy8gc28gZG9uJ3QgbmVlZCBzcGVjaWFsIGNhc2UuXG4gICAgICAgICAgICAvLyBXZSB3aWxsIGdldCBhbiBlcnJvciBubyBtYXR0ZXIgd2hhdCBzbyBkZWxheSB1bnRpbCBhZnRlclxuICAgICAgICAgICAgLy8gZGVjaXNpb247IGJldHRlciBlcnJvciBtZXNzYWdlLiBBbHNvLCBubyByZWFjaGFibGUgdGFyZ2V0XG4gICAgICAgICAgICAvLyBBVE4gc3RhdGVzIGluIFNMTCBpbXBsaWVzIExMIHdpbGwgYWxzbyBnZXQgbm93aGVyZS5cbiAgICAgICAgICAgIC8vIElmIGNvbmZsaWN0IGluIHN0YXRlcyB0aGF0IGRpcCBvdXQsIGNob29zZSBtaW4gc2luY2Ugd2VcbiAgICAgICAgICAgIC8vIHdpbGwgZ2V0IGVycm9yIG5vIG1hdHRlciB3aGF0LlxuICAgICAgICAgICAgdmFyIGUgPSB0aGlzLm5vVmlhYmxlQWx0KGlucHV0LCBvdXRlckNvbnRleHQsIHByZXZpb3VzLCBzdGFydEluZGV4KTtcbiAgICAgICAgICAgIGlucHV0LnNlZWsoc3RhcnRJbmRleCk7XG4gICAgICAgICAgICB2YXIgYWx0ID0gdGhpcy5nZXRTeW5WYWxpZE9yU2VtSW52YWxpZEFsdFRoYXRGaW5pc2hlZERlY2lzaW9uRW50cnlSdWxlKHByZXZpb3VzLCBvdXRlckNvbnRleHQpO1xuICAgICAgICAgICAgaWYoYWx0IT09QVROLklOVkFMSURfQUxUX05VTUJFUikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhbHQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGFsdFN1YlNldHMgPSBQcmVkaWN0aW9uTW9kZS5nZXRDb25mbGljdGluZ0FsdFN1YnNldHMocmVhY2gpO1xuICAgICAgICBpZih0aGlzLmRlYnVnKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkxMIGFsdFN1YlNldHM9XCIgKyBhbHRTdWJTZXRzICsgXCIsIHByZWRpY3Q9XCIgK1xuICAgICAgICAgICAgICAgICAgUHJlZGljdGlvbk1vZGUuZ2V0VW5pcXVlQWx0KGFsdFN1YlNldHMpICsgXCIsIHJlc29sdmVzVG9KdXN0T25lVmlhYmxlQWx0PVwiICtcbiAgICAgICAgICAgICAgICAgIFByZWRpY3Rpb25Nb2RlLnJlc29sdmVzVG9KdXN0T25lVmlhYmxlQWx0KGFsdFN1YlNldHMpKTtcbiAgICAgICAgfVxuICAgICAgICByZWFjaC51bmlxdWVBbHQgPSB0aGlzLmdldFVuaXF1ZUFsdChyZWFjaCk7XG4gICAgICAgIC8vIHVuaXF1ZSBwcmVkaWN0aW9uP1xuICAgICAgICBpZihyZWFjaC51bmlxdWVBbHQhPT1BVE4uSU5WQUxJRF9BTFRfTlVNQkVSKSB7XG4gICAgICAgICAgICBwcmVkaWN0ZWRBbHQgPSByZWFjaC51bmlxdWVBbHQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByZWRpY3Rpb25Nb2RlICE9PSBQcmVkaWN0aW9uTW9kZS5MTF9FWEFDVF9BTUJJR19ERVRFQ1RJT04pIHtcbiAgICAgICAgICAgIHByZWRpY3RlZEFsdCA9IFByZWRpY3Rpb25Nb2RlLnJlc29sdmVzVG9KdXN0T25lVmlhYmxlQWx0KGFsdFN1YlNldHMpO1xuICAgICAgICAgICAgaWYocHJlZGljdGVkQWx0ICE9PSBBVE4uSU5WQUxJRF9BTFRfTlVNQkVSKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJbiBleGFjdCBhbWJpZ3VpdHkgbW9kZSwgd2UgbmV2ZXIgdHJ5IHRvIHRlcm1pbmF0ZSBlYXJseS5cbiAgICAgICAgICAgIC8vIEp1c3Qga2VlcHMgc2NhcmZpbmcgdW50aWwgd2Uga25vdyB3aGF0IHRoZSBjb25mbGljdCBpc1xuICAgICAgICAgICAgaWYgKFByZWRpY3Rpb25Nb2RlLmFsbFN1YnNldHNDb25mbGljdChhbHRTdWJTZXRzKSAmJiBQcmVkaWN0aW9uTW9kZS5hbGxTdWJzZXRzRXF1YWwoYWx0U3ViU2V0cykpIHtcbiAgICAgICAgICAgICAgICBmb3VuZEV4YWN0QW1iaWcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHByZWRpY3RlZEFsdCA9IFByZWRpY3Rpb25Nb2RlLmdldFNpbmdsZVZpYWJsZUFsdChhbHRTdWJTZXRzKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGVsc2UgdGhlcmUgYXJlIG11bHRpcGxlIG5vbi1jb25mbGljdGluZyBzdWJzZXRzIG9yXG4gICAgICAgICAgICAvLyB3ZSdyZSBub3Qgc3VyZSB3aGF0IHRoZSBhbWJpZ3VpdHkgaXMgeWV0LlxuICAgICAgICAgICAgLy8gU28sIGtlZXAgZ29pbmcuXG4gICAgICAgIH1cbiAgICAgICAgcHJldmlvdXMgPSByZWFjaDtcbiAgICAgICAgaWYoIHQgIT09IFRva2VuLkVPRikge1xuICAgICAgICAgICAgaW5wdXQuY29uc3VtZSgpO1xuICAgICAgICAgICAgdCA9IGlucHV0LkxBKDEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIElmIHRoZSBjb25maWd1cmF0aW9uIHNldCB1bmlxdWVseSBwcmVkaWN0cyBhbiBhbHRlcm5hdGl2ZSxcbiAgICAvLyB3aXRob3V0IGNvbmZsaWN0LCB0aGVuIHdlIGtub3cgdGhhdCBpdCdzIGEgZnVsbCBMTCBkZWNpc2lvblxuICAgIC8vIG5vdCBTTEwuXG4gICAgaWYgKHJlYWNoLnVuaXF1ZUFsdCAhPT0gQVROLklOVkFMSURfQUxUX05VTUJFUiApIHtcbiAgICAgICAgdGhpcy5yZXBvcnRDb250ZXh0U2Vuc2l0aXZpdHkoZGZhLCBwcmVkaWN0ZWRBbHQsIHJlYWNoLCBzdGFydEluZGV4LCBpbnB1dC5pbmRleCk7XG4gICAgICAgIHJldHVybiBwcmVkaWN0ZWRBbHQ7XG4gICAgfVxuICAgIC8vIFdlIGRvIG5vdCBjaGVjayBwcmVkaWNhdGVzIGhlcmUgYmVjYXVzZSB3ZSBoYXZlIGNoZWNrZWQgdGhlbVxuICAgIC8vIG9uLXRoZS1mbHkgd2hlbiBkb2luZyBmdWxsIGNvbnRleHQgcHJlZGljdGlvbi5cblxuICAgIC8vXG4gICAgLy8gSW4gbm9uLWV4YWN0IGFtYmlndWl0eSBkZXRlY3Rpb24gbW9kZSwgd2UgbWlnaHRcdGFjdHVhbGx5IGJlIGFibGUgdG9cbiAgICAvLyBkZXRlY3QgYW4gZXhhY3QgYW1iaWd1aXR5LCBidXQgSSdtIG5vdCBnb2luZyB0byBzcGVuZCB0aGUgY3ljbGVzXG4gICAgLy8gbmVlZGVkIHRvIGNoZWNrLiBXZSBvbmx5IGVtaXQgYW1iaWd1aXR5IHdhcm5pbmdzIGluIGV4YWN0IGFtYmlndWl0eVxuICAgIC8vIG1vZGUuXG4gICAgLy9cbiAgICAvLyBGb3IgZXhhbXBsZSwgd2UgbWlnaHQga25vdyB0aGF0IHdlIGhhdmUgY29uZmxpY3RpbmcgY29uZmlndXJhdGlvbnMuXG4gICAgLy8gQnV0LCB0aGF0IGRvZXMgbm90IG1lYW4gdGhhdCB0aGVyZSBpcyBubyB3YXkgZm9yd2FyZCB3aXRob3V0IGFcbiAgICAvLyBjb25mbGljdC4gSXQncyBwb3NzaWJsZSB0byBoYXZlIG5vbmNvbmZsaWN0aW5nIGFsdCBzdWJzZXRzIGFzIGluOlxuXG4gICAgLy8gYWx0U3ViU2V0cz1bezEsIDJ9LCB7MSwgMn0sIHsxfSwgezEsIDJ9XVxuXG4gICAgLy8gZnJvbVxuICAgIC8vXG4gICAgLy8gICAgWygxNywxLFs1ICRdKSwgKDEzLDEsWzUgMTAgJF0pLCAoMjEsMSxbNSAxMCAkXSksICgxMSwxLFskXSksXG4gICAgLy8gICAgICgxMywyLFs1IDEwICRdKSwgKDIxLDIsWzUgMTAgJF0pLCAoMTEsMixbJF0pXVxuICAgIC8vXG4gICAgLy8gSW4gdGhpcyBjYXNlLCAoMTcsMSxbNSAkXSkgaW5kaWNhdGVzIHRoZXJlIGlzIHNvbWUgbmV4dCBzZXF1ZW5jZSB0aGF0XG4gICAgLy8gd291bGQgcmVzb2x2ZSB0aGlzIHdpdGhvdXQgY29uZmxpY3QgdG8gYWx0ZXJuYXRpdmUgMS4gQW55IG90aGVyIHZpYWJsZVxuICAgIC8vIG5leHQgc2VxdWVuY2UsIGhvd2V2ZXIsIGlzIGFzc29jaWF0ZWQgd2l0aCBhIGNvbmZsaWN0LiAgV2Ugc3RvcFxuICAgIC8vIGxvb2tpbmcgZm9yIGlucHV0IGJlY2F1c2Ugbm8gYW1vdW50IG9mIGZ1cnRoZXIgbG9va2FoZWFkIHdpbGwgYWx0ZXJcbiAgICAvLyB0aGUgZmFjdCB0aGF0IHdlIHNob3VsZCBwcmVkaWN0IGFsdGVybmF0aXZlIDEuICBXZSBqdXN0IGNhbid0IHNheSBmb3JcbiAgICAvLyBzdXJlIHRoYXQgdGhlcmUgaXMgYW4gYW1iaWd1aXR5IHdpdGhvdXQgbG9va2luZyBmdXJ0aGVyLlxuXG4gICAgdGhpcy5yZXBvcnRBbWJpZ3VpdHkoZGZhLCBELCBzdGFydEluZGV4LCBpbnB1dC5pbmRleCwgZm91bmRFeGFjdEFtYmlnLCBudWxsLCByZWFjaCk7XG5cbiAgICByZXR1cm4gcHJlZGljdGVkQWx0O1xufTtcblxuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5jb21wdXRlUmVhY2hTZXQgPSBmdW5jdGlvbihjbG9zdXJlLCB0LCBmdWxsQ3R4KSB7XG4gICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJpbiBjb21wdXRlUmVhY2hTZXQsIHN0YXJ0aW5nIGNsb3N1cmU6IFwiICsgY2xvc3VyZSk7XG4gICAgfVxuICAgIGlmKCB0aGlzLm1lcmdlQ2FjaGU9PT1udWxsKSB7XG4gICAgICAgIHRoaXMubWVyZ2VDYWNoZSA9IG5ldyBEb3VibGVEaWN0KCk7XG4gICAgfVxuICAgIHZhciBpbnRlcm1lZGlhdGUgPSBuZXcgQVROQ29uZmlnU2V0KGZ1bGxDdHgpO1xuXG4gICAgLy8gQ29uZmlndXJhdGlvbnMgYWxyZWFkeSBpbiBhIHJ1bGUgc3RvcCBzdGF0ZSBpbmRpY2F0ZSByZWFjaGluZyB0aGUgZW5kXG4gICAgLy8gb2YgdGhlIGRlY2lzaW9uIHJ1bGUgKGxvY2FsIGNvbnRleHQpIG9yIGVuZCBvZiB0aGUgc3RhcnQgcnVsZSAoZnVsbFxuICAgIC8vIGNvbnRleHQpLiBPbmNlIHJlYWNoZWQsIHRoZXNlIGNvbmZpZ3VyYXRpb25zIGFyZSBuZXZlciB1cGRhdGVkIGJ5IGFcbiAgICAvLyBjbG9zdXJlIG9wZXJhdGlvbiwgc28gdGhleSBhcmUgaGFuZGxlZCBzZXBhcmF0ZWx5IGZvciB0aGUgcGVyZm9ybWFuY2VcbiAgICAvLyBhZHZhbnRhZ2Ugb2YgaGF2aW5nIGEgc21hbGxlciBpbnRlcm1lZGlhdGUgc2V0IHdoZW4gY2FsbGluZyBjbG9zdXJlLlxuICAgIC8vXG4gICAgLy8gRm9yIGZ1bGwtY29udGV4dCByZWFjaCBvcGVyYXRpb25zLCBzZXBhcmF0ZSBoYW5kbGluZyBpcyByZXF1aXJlZCB0b1xuICAgIC8vIGVuc3VyZSB0aGF0IHRoZSBhbHRlcm5hdGl2ZSBtYXRjaGluZyB0aGUgbG9uZ2VzdCBvdmVyYWxsIHNlcXVlbmNlIGlzXG4gICAgLy8gY2hvc2VuIHdoZW4gbXVsdGlwbGUgc3VjaCBjb25maWd1cmF0aW9ucyBjYW4gbWF0Y2ggdGhlIGlucHV0LlxuXG4gICAgdmFyIHNraXBwZWRTdG9wU3RhdGVzID0gbnVsbDtcblxuICAgIC8vIEZpcnN0IGZpZ3VyZSBvdXQgd2hlcmUgd2UgY2FuIHJlYWNoIG9uIGlucHV0IHRcbiAgICBmb3IgKHZhciBpPTA7IGk8Y2xvc3VyZS5pdGVtcy5sZW5ndGg7aSsrKSB7XG4gICAgICAgIHZhciBjID0gY2xvc3VyZS5pdGVtc1tpXTtcbiAgICAgICAgaWYodGhpcy5kZWJ1Z19hZGQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwidGVzdGluZyBcIiArIHRoaXMuZ2V0VG9rZW5OYW1lKHQpICsgXCIgYXQgXCIgKyBjKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYy5zdGF0ZSBpbnN0YW5jZW9mIFJ1bGVTdG9wU3RhdGUpIHtcbiAgICAgICAgICAgIGlmIChmdWxsQ3R4IHx8IHQgPT09IFRva2VuLkVPRikge1xuICAgICAgICAgICAgICAgIGlmIChza2lwcGVkU3RvcFN0YXRlcz09PW51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgc2tpcHBlZFN0b3BTdGF0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2tpcHBlZFN0b3BTdGF0ZXMucHVzaChjKTtcbiAgICAgICAgICAgICAgICBpZih0aGlzLmRlYnVnX2FkZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImFkZGVkIFwiICsgYyArIFwiIHRvIHNraXBwZWRTdG9wU3RhdGVzXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGZvcih2YXIgaj0wO2o8Yy5zdGF0ZS50cmFuc2l0aW9ucy5sZW5ndGg7aisrKSB7XG4gICAgICAgICAgICB2YXIgdHJhbnMgPSBjLnN0YXRlLnRyYW5zaXRpb25zW2pdO1xuICAgICAgICAgICAgdmFyIHRhcmdldCA9IHRoaXMuZ2V0UmVhY2hhYmxlVGFyZ2V0KHRyYW5zLCB0KTtcbiAgICAgICAgICAgIGlmICh0YXJnZXQhPT1udWxsKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNmZyA9IG5ldyBBVE5Db25maWcoe3N0YXRlOnRhcmdldH0sIGMpO1xuICAgICAgICAgICAgICAgIGludGVybWVkaWF0ZS5hZGQoY2ZnLCB0aGlzLm1lcmdlQ2FjaGUpO1xuICAgICAgICAgICAgICAgIGlmKHRoaXMuZGVidWdfYWRkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiYWRkZWQgXCIgKyBjZmcgKyBcIiB0byBpbnRlcm1lZGlhdGVcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIE5vdyBmaWd1cmUgb3V0IHdoZXJlIHRoZSByZWFjaCBvcGVyYXRpb24gY2FuIHRha2UgdXMuLi5cbiAgICB2YXIgcmVhY2ggPSBudWxsO1xuXG4gICAgLy8gVGhpcyBibG9jayBvcHRpbWl6ZXMgdGhlIHJlYWNoIG9wZXJhdGlvbiBmb3IgaW50ZXJtZWRpYXRlIHNldHMgd2hpY2hcbiAgICAvLyB0cml2aWFsbHkgaW5kaWNhdGUgYSB0ZXJtaW5hdGlvbiBzdGF0ZSBmb3IgdGhlIG92ZXJhbGxcbiAgICAvLyBhZGFwdGl2ZVByZWRpY3Qgb3BlcmF0aW9uLlxuICAgIC8vXG4gICAgLy8gVGhlIGNvbmRpdGlvbnMgYXNzdW1lIHRoYXQgaW50ZXJtZWRpYXRlXG4gICAgLy8gY29udGFpbnMgYWxsIGNvbmZpZ3VyYXRpb25zIHJlbGV2YW50IHRvIHRoZSByZWFjaCBzZXQsIGJ1dCB0aGlzXG4gICAgLy8gY29uZGl0aW9uIGlzIG5vdCB0cnVlIHdoZW4gb25lIG9yIG1vcmUgY29uZmlndXJhdGlvbnMgaGF2ZSBiZWVuXG4gICAgLy8gd2l0aGhlbGQgaW4gc2tpcHBlZFN0b3BTdGF0ZXMsIG9yIHdoZW4gdGhlIGN1cnJlbnQgc3ltYm9sIGlzIEVPRi5cbiAgICAvL1xuICAgIGlmIChza2lwcGVkU3RvcFN0YXRlcz09PW51bGwgJiYgdCE9PVRva2VuLkVPRikge1xuICAgICAgICBpZiAoaW50ZXJtZWRpYXRlLml0ZW1zLmxlbmd0aD09PTEpIHtcbiAgICAgICAgICAgIC8vIERvbid0IHB1cnN1ZSB0aGUgY2xvc3VyZSBpZiB0aGVyZSBpcyBqdXN0IG9uZSBzdGF0ZS5cbiAgICAgICAgICAgIC8vIEl0IGNhbiBvbmx5IGhhdmUgb25lIGFsdGVybmF0aXZlOyBqdXN0IGFkZCB0byByZXN1bHRcbiAgICAgICAgICAgIC8vIEFsc28gZG9uJ3QgcHVyc3VlIHRoZSBjbG9zdXJlIGlmIHRoZXJlIGlzIHVuaXF1ZSBhbHRlcm5hdGl2ZVxuICAgICAgICAgICAgLy8gYW1vbmcgdGhlIGNvbmZpZ3VyYXRpb25zLlxuICAgICAgICAgICAgcmVhY2ggPSBpbnRlcm1lZGlhdGU7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5nZXRVbmlxdWVBbHQoaW50ZXJtZWRpYXRlKSE9PUFUTi5JTlZBTElEX0FMVF9OVU1CRVIpIHtcbiAgICAgICAgICAgIC8vIEFsc28gZG9uJ3QgcHVyc3VlIHRoZSBjbG9zdXJlIGlmIHRoZXJlIGlzIHVuaXF1ZSBhbHRlcm5hdGl2ZVxuICAgICAgICAgICAgLy8gYW1vbmcgdGhlIGNvbmZpZ3VyYXRpb25zLlxuICAgICAgICAgICAgcmVhY2ggPSBpbnRlcm1lZGlhdGU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gSWYgdGhlIHJlYWNoIHNldCBjb3VsZCBub3QgYmUgdHJpdmlhbGx5IGRldGVybWluZWQsIHBlcmZvcm0gYSBjbG9zdXJlXG4gICAgLy8gb3BlcmF0aW9uIG9uIHRoZSBpbnRlcm1lZGlhdGUgc2V0IHRvIGNvbXB1dGUgaXRzIGluaXRpYWwgdmFsdWUuXG4gICAgLy9cbiAgICBpZiAocmVhY2g9PT1udWxsKSB7XG4gICAgICAgIHJlYWNoID0gbmV3IEFUTkNvbmZpZ1NldChmdWxsQ3R4KTtcbiAgICAgICAgdmFyIGNsb3N1cmVCdXN5ID0gbmV3IFNldCgpO1xuICAgICAgICB2YXIgdHJlYXRFb2ZBc0Vwc2lsb24gPSB0ID09PSBUb2tlbi5FT0Y7XG4gICAgICAgIGZvciAodmFyIGs9MDsgazxpbnRlcm1lZGlhdGUuaXRlbXMubGVuZ3RoO2srKykge1xuICAgICAgICAgICAgdGhpcy5jbG9zdXJlKGludGVybWVkaWF0ZS5pdGVtc1trXSwgcmVhY2gsIGNsb3N1cmVCdXN5LCBmYWxzZSwgZnVsbEN0eCwgdHJlYXRFb2ZBc0Vwc2lsb24pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0ID09PSBUb2tlbi5FT0YpIHtcbiAgICAgICAgLy8gQWZ0ZXIgY29uc3VtaW5nIEVPRiBubyBhZGRpdGlvbmFsIGlucHV0IGlzIHBvc3NpYmxlLCBzbyB3ZSBhcmVcbiAgICAgICAgLy8gb25seSBpbnRlcmVzdGVkIGluIGNvbmZpZ3VyYXRpb25zIHdoaWNoIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGVcbiAgICAgICAgLy8gZGVjaXNpb24gcnVsZSAobG9jYWwgY29udGV4dCkgb3IgZW5kIG9mIHRoZSBzdGFydCBydWxlIChmdWxsXG4gICAgICAgIC8vIGNvbnRleHQpLiBVcGRhdGUgcmVhY2ggdG8gY29udGFpbiBvbmx5IHRoZXNlIGNvbmZpZ3VyYXRpb25zLiBUaGlzXG4gICAgICAgIC8vIGhhbmRsZXMgYm90aCBleHBsaWNpdCBFT0YgdHJhbnNpdGlvbnMgaW4gdGhlIGdyYW1tYXIgYW5kIGltcGxpY2l0XG4gICAgICAgIC8vIEVPRiB0cmFuc2l0aW9ucyBmb2xsb3dpbmcgdGhlIGVuZCBvZiB0aGUgZGVjaXNpb24gb3Igc3RhcnQgcnVsZS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gV2hlbiByZWFjaD09aW50ZXJtZWRpYXRlLCBubyBjbG9zdXJlIG9wZXJhdGlvbiB3YXMgcGVyZm9ybWVkLiBJblxuICAgICAgICAvLyB0aGlzIGNhc2UsIHJlbW92ZUFsbENvbmZpZ3NOb3RJblJ1bGVTdG9wU3RhdGUgbmVlZHMgdG8gY2hlY2sgZm9yXG4gICAgICAgIC8vIHJlYWNoYWJsZSBydWxlIHN0b3Agc3RhdGVzIGFzIHdlbGwgYXMgY29uZmlndXJhdGlvbnMgYWxyZWFkeSBpblxuICAgICAgICAvLyBhIHJ1bGUgc3RvcCBzdGF0ZS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gVGhpcyBpcyBoYW5kbGVkIGJlZm9yZSB0aGUgY29uZmlndXJhdGlvbnMgaW4gc2tpcHBlZFN0b3BTdGF0ZXMsXG4gICAgICAgIC8vIGJlY2F1c2UgYW55IGNvbmZpZ3VyYXRpb25zIHBvdGVudGlhbGx5IGFkZGVkIGZyb20gdGhhdCBsaXN0IGFyZVxuICAgICAgICAvLyBhbHJlYWR5IGd1YXJhbnRlZWQgdG8gbWVldCB0aGlzIGNvbmRpdGlvbiB3aGV0aGVyIG9yIG5vdCBpdCdzXG4gICAgICAgIC8vIHJlcXVpcmVkLlxuICAgICAgICAvL1xuICAgICAgICByZWFjaCA9IHRoaXMucmVtb3ZlQWxsQ29uZmlnc05vdEluUnVsZVN0b3BTdGF0ZShyZWFjaCwgcmVhY2ggPT09IGludGVybWVkaWF0ZSk7XG4gICAgfVxuICAgIC8vIElmIHNraXBwZWRTdG9wU3RhdGVzIT09bnVsbCwgdGhlbiBpdCBjb250YWlucyBhdCBsZWFzdCBvbmVcbiAgICAvLyBjb25maWd1cmF0aW9uLiBGb3IgZnVsbC1jb250ZXh0IHJlYWNoIG9wZXJhdGlvbnMsIHRoZXNlXG4gICAgLy8gY29uZmlndXJhdGlvbnMgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBzdGFydCBydWxlLCBpbiB3aGljaCBjYXNlIHdlXG4gICAgLy8gb25seSBhZGQgdGhlbSBiYWNrIHRvIHJlYWNoIGlmIG5vIGNvbmZpZ3VyYXRpb24gZHVyaW5nIHRoZSBjdXJyZW50XG4gICAgLy8gY2xvc3VyZSBvcGVyYXRpb24gcmVhY2hlZCBzdWNoIGEgc3RhdGUuIFRoaXMgZW5zdXJlcyBhZGFwdGl2ZVByZWRpY3RcbiAgICAvLyBjaG9vc2VzIGFuIGFsdGVybmF0aXZlIG1hdGNoaW5nIHRoZSBsb25nZXN0IG92ZXJhbGwgc2VxdWVuY2Ugd2hlblxuICAgIC8vIG11bHRpcGxlIGFsdGVybmF0aXZlcyBhcmUgdmlhYmxlLlxuICAgIC8vXG4gICAgaWYgKHNraXBwZWRTdG9wU3RhdGVzIT09bnVsbCAmJiAoICghIGZ1bGxDdHgpIHx8ICghIFByZWRpY3Rpb25Nb2RlLmhhc0NvbmZpZ0luUnVsZVN0b3BTdGF0ZShyZWFjaCkpKSkge1xuICAgICAgICBmb3IgKHZhciBsPTA7IGw8c2tpcHBlZFN0b3BTdGF0ZXMubGVuZ3RoO2wrKykge1xuICAgICAgICAgICAgcmVhY2guYWRkKHNraXBwZWRTdG9wU3RhdGVzW2xdLCB0aGlzLm1lcmdlQ2FjaGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChyZWFjaC5pdGVtcy5sZW5ndGg9PT0wKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiByZWFjaDtcbiAgICB9XG59O1xuLy9cbi8vIFJldHVybiBhIGNvbmZpZ3VyYXRpb24gc2V0IGNvbnRhaW5pbmcgb25seSB0aGUgY29uZmlndXJhdGlvbnMgZnJvbVxuLy8ge0Bjb2RlIGNvbmZpZ3N9IHdoaWNoIGFyZSBpbiBhIHtAbGluayBSdWxlU3RvcFN0YXRlfS4gSWYgYWxsXG4vLyBjb25maWd1cmF0aW9ucyBpbiB7QGNvZGUgY29uZmlnc30gYXJlIGFscmVhZHkgaW4gYSBydWxlIHN0b3Agc3RhdGUsIHRoaXNcbi8vIG1ldGhvZCBzaW1wbHkgcmV0dXJucyB7QGNvZGUgY29uZmlnc30uXG4vL1xuLy8gPHA+V2hlbiB7QGNvZGUgbG9va1RvRW5kT2ZSdWxlfSBpcyB0cnVlLCB0aGlzIG1ldGhvZCB1c2VzXG4vLyB7QGxpbmsgQVROLy9uZXh0VG9rZW5zfSBmb3IgZWFjaCBjb25maWd1cmF0aW9uIGluIHtAY29kZSBjb25maWdzfSB3aGljaCBpc1xuLy8gbm90IGFscmVhZHkgaW4gYSBydWxlIHN0b3Agc3RhdGUgdG8gc2VlIGlmIGEgcnVsZSBzdG9wIHN0YXRlIGlzIHJlYWNoYWJsZVxuLy8gZnJvbSB0aGUgY29uZmlndXJhdGlvbiB2aWEgZXBzaWxvbi1vbmx5IHRyYW5zaXRpb25zLjwvcD5cbi8vXG4vLyBAcGFyYW0gY29uZmlncyB0aGUgY29uZmlndXJhdGlvbiBzZXQgdG8gdXBkYXRlXG4vLyBAcGFyYW0gbG9va1RvRW5kT2ZSdWxlIHdoZW4gdHJ1ZSwgdGhpcyBtZXRob2QgY2hlY2tzIGZvciBydWxlIHN0b3Agc3RhdGVzXG4vLyByZWFjaGFibGUgYnkgZXBzaWxvbi1vbmx5IHRyYW5zaXRpb25zIGZyb20gZWFjaCBjb25maWd1cmF0aW9uIGluXG4vLyB7QGNvZGUgY29uZmlnc30uXG4vL1xuLy8gQHJldHVybiB7QGNvZGUgY29uZmlnc30gaWYgYWxsIGNvbmZpZ3VyYXRpb25zIGluIHtAY29kZSBjb25maWdzfSBhcmUgaW4gYVxuLy8gcnVsZSBzdG9wIHN0YXRlLCBvdGhlcndpc2UgcmV0dXJuIGEgbmV3IGNvbmZpZ3VyYXRpb24gc2V0IGNvbnRhaW5pbmcgb25seVxuLy8gdGhlIGNvbmZpZ3VyYXRpb25zIGZyb20ge0Bjb2RlIGNvbmZpZ3N9IHdoaWNoIGFyZSBpbiBhIHJ1bGUgc3RvcCBzdGF0ZVxuLy9cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUucmVtb3ZlQWxsQ29uZmlnc05vdEluUnVsZVN0b3BTdGF0ZSA9IGZ1bmN0aW9uKGNvbmZpZ3MsIGxvb2tUb0VuZE9mUnVsZSkge1xuICAgIGlmIChQcmVkaWN0aW9uTW9kZS5hbGxDb25maWdzSW5SdWxlU3RvcFN0YXRlcyhjb25maWdzKSkge1xuICAgICAgICByZXR1cm4gY29uZmlncztcbiAgICB9XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBBVE5Db25maWdTZXQoY29uZmlncy5mdWxsQ3R4KTtcbiAgICBmb3IodmFyIGk9MDsgaTxjb25maWdzLml0ZW1zLmxlbmd0aDtpKyspIHtcbiAgICAgICAgdmFyIGNvbmZpZyA9IGNvbmZpZ3MuaXRlbXNbaV07XG4gICAgICAgIGlmIChjb25maWcuc3RhdGUgaW5zdGFuY2VvZiBSdWxlU3RvcFN0YXRlKSB7XG4gICAgICAgICAgICByZXN1bHQuYWRkKGNvbmZpZywgdGhpcy5tZXJnZUNhY2hlKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb29rVG9FbmRPZlJ1bGUgJiYgY29uZmlnLnN0YXRlLmVwc2lsb25Pbmx5VHJhbnNpdGlvbnMpIHtcbiAgICAgICAgICAgIHZhciBuZXh0VG9rZW5zID0gdGhpcy5hdG4ubmV4dFRva2Vucyhjb25maWcuc3RhdGUpO1xuICAgICAgICAgICAgaWYgKG5leHRUb2tlbnMuY29udGFpbnMoVG9rZW4uRVBTSUxPTikpIHtcbiAgICAgICAgICAgICAgICB2YXIgZW5kT2ZSdWxlU3RhdGUgPSB0aGlzLmF0bi5ydWxlVG9TdG9wU3RhdGVbY29uZmlnLnN0YXRlLnJ1bGVJbmRleF07XG4gICAgICAgICAgICAgICAgcmVzdWx0LmFkZChuZXcgQVROQ29uZmlnKHtzdGF0ZTplbmRPZlJ1bGVTdGF0ZX0sIGNvbmZpZyksIHRoaXMubWVyZ2VDYWNoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuY29tcHV0ZVN0YXJ0U3RhdGUgPSBmdW5jdGlvbihwLCBjdHgsIGZ1bGxDdHgpIHtcbiAgICAvLyBhbHdheXMgYXQgbGVhc3QgdGhlIGltcGxpY2l0IGNhbGwgdG8gc3RhcnQgcnVsZVxuICAgIHZhciBpbml0aWFsQ29udGV4dCA9IHByZWRpY3Rpb25Db250ZXh0RnJvbVJ1bGVDb250ZXh0KHRoaXMuYXRuLCBjdHgpO1xuICAgIHZhciBjb25maWdzID0gbmV3IEFUTkNvbmZpZ1NldChmdWxsQ3R4KTtcbiAgICBmb3IodmFyIGk9MDtpPHAudHJhbnNpdGlvbnMubGVuZ3RoO2krKykge1xuICAgICAgICB2YXIgdGFyZ2V0ID0gcC50cmFuc2l0aW9uc1tpXS50YXJnZXQ7XG4gICAgICAgIHZhciBjID0gbmV3IEFUTkNvbmZpZyh7IHN0YXRlOnRhcmdldCwgYWx0OmkrMSwgY29udGV4dDppbml0aWFsQ29udGV4dCB9LCBudWxsKTtcbiAgICAgICAgdmFyIGNsb3N1cmVCdXN5ID0gbmV3IFNldCgpO1xuICAgICAgICB0aGlzLmNsb3N1cmUoYywgY29uZmlncywgY2xvc3VyZUJ1c3ksIHRydWUsIGZ1bGxDdHgsIGZhbHNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbmZpZ3M7XG59O1xuXG4vL1xuLy8gVGhpcyBtZXRob2QgdHJhbnNmb3JtcyB0aGUgc3RhcnQgc3RhdGUgY29tcHV0ZWQgYnlcbi8vIHtAbGluayAvL2NvbXB1dGVTdGFydFN0YXRlfSB0byB0aGUgc3BlY2lhbCBzdGFydCBzdGF0ZSB1c2VkIGJ5IGFcbi8vIHByZWNlZGVuY2UgREZBIGZvciBhIHBhcnRpY3VsYXIgcHJlY2VkZW5jZSB2YWx1ZS4gVGhlIHRyYW5zZm9ybWF0aW9uXG4vLyBwcm9jZXNzIGFwcGxpZXMgdGhlIGZvbGxvd2luZyBjaGFuZ2VzIHRvIHRoZSBzdGFydCBzdGF0ZSdzIGNvbmZpZ3VyYXRpb25cbi8vIHNldC5cbi8vXG4vLyA8b2w+XG4vLyA8bGk+RXZhbHVhdGUgdGhlIHByZWNlZGVuY2UgcHJlZGljYXRlcyBmb3IgZWFjaCBjb25maWd1cmF0aW9uIHVzaW5nXG4vLyB7QGxpbmsgU2VtYW50aWNDb250ZXh0Ly9ldmFsUHJlY2VkZW5jZX0uPC9saT5cbi8vIDxsaT5SZW1vdmUgYWxsIGNvbmZpZ3VyYXRpb25zIHdoaWNoIHByZWRpY3QgYW4gYWx0ZXJuYXRpdmUgZ3JlYXRlciB0aGFuXG4vLyAxLCBmb3Igd2hpY2ggYW5vdGhlciBjb25maWd1cmF0aW9uIHRoYXQgcHJlZGljdHMgYWx0ZXJuYXRpdmUgMSBpcyBpbiB0aGVcbi8vIHNhbWUgQVROIHN0YXRlIHdpdGggdGhlIHNhbWUgcHJlZGljdGlvbiBjb250ZXh0LiBUaGlzIHRyYW5zZm9ybWF0aW9uIGlzXG4vLyB2YWxpZCBmb3IgdGhlIGZvbGxvd2luZyByZWFzb25zOlxuLy8gPHVsPlxuLy8gPGxpPlRoZSBjbG9zdXJlIGJsb2NrIGNhbm5vdCBjb250YWluIGFueSBlcHNpbG9uIHRyYW5zaXRpb25zIHdoaWNoIGJ5cGFzc1xuLy8gdGhlIGJvZHkgb2YgdGhlIGNsb3N1cmUsIHNvIGFsbCBzdGF0ZXMgcmVhY2hhYmxlIHZpYSBhbHRlcm5hdGl2ZSAxIGFyZVxuLy8gcGFydCBvZiB0aGUgcHJlY2VkZW5jZSBhbHRlcm5hdGl2ZXMgb2YgdGhlIHRyYW5zZm9ybWVkIGxlZnQtcmVjdXJzaXZlXG4vLyBydWxlLjwvbGk+XG4vLyA8bGk+VGhlIFwicHJpbWFyeVwiIHBvcnRpb24gb2YgYSBsZWZ0IHJlY3Vyc2l2ZSBydWxlIGNhbm5vdCBjb250YWluIGFuXG4vLyBlcHNpbG9uIHRyYW5zaXRpb24sIHNvIHRoZSBvbmx5IHdheSBhbiBhbHRlcm5hdGl2ZSBvdGhlciB0aGFuIDEgY2FuIGV4aXN0XG4vLyBpbiBhIHN0YXRlIHRoYXQgaXMgYWxzbyByZWFjaGFibGUgdmlhIGFsdGVybmF0aXZlIDEgaXMgYnkgbmVzdGluZyBjYWxsc1xuLy8gdG8gdGhlIGxlZnQtcmVjdXJzaXZlIHJ1bGUsIHdpdGggdGhlIG91dGVyIGNhbGxzIG5vdCBiZWluZyBhdCB0aGVcbi8vIHByZWZlcnJlZCBwcmVjZWRlbmNlIGxldmVsLjwvbGk+XG4vLyA8L3VsPlxuLy8gPC9saT5cbi8vIDwvb2w+XG4vL1xuLy8gPHA+XG4vLyBUaGUgcHJlZGljdGlvbiBjb250ZXh0IG11c3QgYmUgY29uc2lkZXJlZCBieSB0aGlzIGZpbHRlciB0byBhZGRyZXNzXG4vLyBzaXR1YXRpb25zIGxpa2UgdGhlIGZvbGxvd2luZy5cbi8vIDwvcD5cbi8vIDxjb2RlPlxuLy8gPHByZT5cbi8vIGdyYW1tYXIgVEE7XG4vLyBwcm9nOiBzdGF0ZW1lbnQqIEVPRjtcbi8vIHN0YXRlbWVudDogbGV0dGVyQSB8IHN0YXRlbWVudCBsZXR0ZXJBICdiJyA7XG4vLyBsZXR0ZXJBOiAnYSc7XG4vLyA8L3ByZT5cbi8vIDwvY29kZT5cbi8vIDxwPlxuLy8gSWYgdGhlIGFib3ZlIGdyYW1tYXIsIHRoZSBBVE4gc3RhdGUgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSB0b2tlblxuLy8gcmVmZXJlbmNlIHtAY29kZSAnYSd9IGluIHtAY29kZSBsZXR0ZXJBfSBpcyByZWFjaGFibGUgZnJvbSB0aGUgbGVmdCBlZGdlXG4vLyBvZiBib3RoIHRoZSBwcmltYXJ5IGFuZCBjbG9zdXJlIGJsb2NrcyBvZiB0aGUgbGVmdC1yZWN1cnNpdmUgcnVsZVxuLy8ge0Bjb2RlIHN0YXRlbWVudH0uIFRoZSBwcmVkaWN0aW9uIGNvbnRleHQgYXNzb2NpYXRlZCB3aXRoIGVhY2ggb2YgdGhlc2Vcbi8vIGNvbmZpZ3VyYXRpb25zIGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiB0aGVtLCBhbmQgcHJldmVudHMgdGhlIGFsdGVybmF0aXZlXG4vLyB3aGljaCBzdGVwcGVkIG91dCB0byB7QGNvZGUgcHJvZ30gKGFuZCB0aGVuIGJhY2sgaW4gdG8ge0Bjb2RlIHN0YXRlbWVudH1cbi8vIGZyb20gYmVpbmcgZWxpbWluYXRlZCBieSB0aGUgZmlsdGVyLlxuLy8gPC9wPlxuLy9cbi8vIEBwYXJhbSBjb25maWdzIFRoZSBjb25maWd1cmF0aW9uIHNldCBjb21wdXRlZCBieVxuLy8ge0BsaW5rIC8vY29tcHV0ZVN0YXJ0U3RhdGV9IGFzIHRoZSBzdGFydCBzdGF0ZSBmb3IgdGhlIERGQS5cbi8vIEByZXR1cm4gVGhlIHRyYW5zZm9ybWVkIGNvbmZpZ3VyYXRpb24gc2V0IHJlcHJlc2VudGluZyB0aGUgc3RhcnQgc3RhdGVcbi8vIGZvciBhIHByZWNlZGVuY2UgREZBIGF0IGEgcGFydGljdWxhciBwcmVjZWRlbmNlIGxldmVsIChkZXRlcm1pbmVkIGJ5XG4vLyBjYWxsaW5nIHtAbGluayBQYXJzZXIvL2dldFByZWNlZGVuY2V9KS5cbi8vXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmFwcGx5UHJlY2VkZW5jZUZpbHRlciA9IGZ1bmN0aW9uKGNvbmZpZ3MpIHtcblx0dmFyIGNvbmZpZztcblx0dmFyIHN0YXRlc0Zyb21BbHQxID0gW107XG4gICAgdmFyIGNvbmZpZ1NldCA9IG5ldyBBVE5Db25maWdTZXQoY29uZmlncy5mdWxsQ3R4KTtcbiAgICBmb3IodmFyIGk9MDsgaTxjb25maWdzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbmZpZyA9IGNvbmZpZ3MuaXRlbXNbaV07XG4gICAgICAgIC8vIGhhbmRsZSBhbHQgMSBmaXJzdFxuICAgICAgICBpZiAoY29uZmlnLmFsdCAhPT0gMSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHVwZGF0ZWRDb250ZXh0ID0gY29uZmlnLnNlbWFudGljQ29udGV4dC5ldmFsUHJlY2VkZW5jZSh0aGlzLnBhcnNlciwgdGhpcy5fb3V0ZXJDb250ZXh0KTtcbiAgICAgICAgaWYgKHVwZGF0ZWRDb250ZXh0PT09bnVsbCkge1xuICAgICAgICAgICAgLy8gdGhlIGNvbmZpZ3VyYXRpb24gd2FzIGVsaW1pbmF0ZWRcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlc0Zyb21BbHQxW2NvbmZpZy5zdGF0ZS5zdGF0ZU51bWJlcl0gPSBjb25maWcuY29udGV4dDtcbiAgICAgICAgaWYgKHVwZGF0ZWRDb250ZXh0ICE9PSBjb25maWcuc2VtYW50aWNDb250ZXh0KSB7XG4gICAgICAgICAgICBjb25maWdTZXQuYWRkKG5ldyBBVE5Db25maWcoe3NlbWFudGljQ29udGV4dDp1cGRhdGVkQ29udGV4dH0sIGNvbmZpZyksIHRoaXMubWVyZ2VDYWNoZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWdTZXQuYWRkKGNvbmZpZywgdGhpcy5tZXJnZUNhY2hlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmb3IoaT0wOyBpPGNvbmZpZ3MuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uZmlnID0gY29uZmlncy5pdGVtc1tpXTtcbiAgICAgICAgaWYgKGNvbmZpZy5hbHQgPT09IDEpIHtcbiAgICAgICAgICAgIC8vIGFscmVhZHkgaGFuZGxlZFxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSW4gdGhlIGZ1dHVyZSwgdGhpcyBlbGltaW5hdGlvbiBzdGVwIGNvdWxkIGJlIHVwZGF0ZWQgdG8gYWxzb1xuICAgICAgICAvLyBmaWx0ZXIgdGhlIHByZWRpY3Rpb24gY29udGV4dCBmb3IgYWx0ZXJuYXRpdmVzIHByZWRpY3RpbmcgYWx0PjFcbiAgICAgICAgLy8gKGJhc2ljYWxseSBhIGdyYXBoIHN1YnRyYWN0aW9uIGFsZ29yaXRobSkuXG5cdFx0aWYgKCFjb25maWcucHJlY2VkZW5jZUZpbHRlclN1cHByZXNzZWQpIHtcbiAgICAgICAgICAgIHZhciBjb250ZXh0ID0gc3RhdGVzRnJvbUFsdDFbY29uZmlnLnN0YXRlLnN0YXRlTnVtYmVyXSB8fCBudWxsO1xuICAgICAgICAgICAgaWYgKGNvbnRleHQhPT1udWxsICYmIGNvbnRleHQuZXF1YWxzKGNvbmZpZy5jb250ZXh0KSkge1xuICAgICAgICAgICAgICAgIC8vIGVsaW1pbmF0ZWRcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblx0XHR9XG4gICAgICAgIGNvbmZpZ1NldC5hZGQoY29uZmlnLCB0aGlzLm1lcmdlQ2FjaGUpO1xuICAgIH1cbiAgICByZXR1cm4gY29uZmlnU2V0O1xufTtcblxuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5nZXRSZWFjaGFibGVUYXJnZXQgPSBmdW5jdGlvbih0cmFucywgdHR5cGUpIHtcbiAgICBpZiAodHJhbnMubWF0Y2hlcyh0dHlwZSwgMCwgdGhpcy5hdG4ubWF4VG9rZW5UeXBlKSkge1xuICAgICAgICByZXR1cm4gdHJhbnMudGFyZ2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0UHJlZHNGb3JBbWJpZ0FsdHMgPSBmdW5jdGlvbihhbWJpZ0FsdHMsIGNvbmZpZ3MsIG5hbHRzKSB7XG4gICAgLy8gUkVBQ0g9WzF8MXxbXXwwOjAsIDF8MnxbXXwwOjFdXG4gICAgLy8gYWx0VG9QcmVkIHN0YXJ0cyBhcyBhbiBhcnJheSBvZiBhbGwgbnVsbCBjb250ZXh0cy4gVGhlIGVudHJ5IGF0IGluZGV4IGlcbiAgICAvLyBjb3JyZXNwb25kcyB0byBhbHRlcm5hdGl2ZSBpLiBhbHRUb1ByZWRbaV0gbWF5IGhhdmUgb25lIG9mIHRocmVlIHZhbHVlczpcbiAgICAvLyAgIDEuIG51bGw6IG5vIEFUTkNvbmZpZyBjIGlzIGZvdW5kIHN1Y2ggdGhhdCBjLmFsdD09aVxuICAgIC8vICAgMi4gU2VtYW50aWNDb250ZXh0Lk5PTkU6IEF0IGxlYXN0IG9uZSBBVE5Db25maWcgYyBleGlzdHMgc3VjaCB0aGF0XG4gICAgLy8gICAgICBjLmFsdD09aSBhbmQgYy5zZW1hbnRpY0NvbnRleHQ9PVNlbWFudGljQ29udGV4dC5OT05FLiBJbiBvdGhlciB3b3JkcyxcbiAgICAvLyAgICAgIGFsdCBpIGhhcyBhdCBsZWFzdCBvbmUgdW5wcmVkaWNhdGVkIGNvbmZpZy5cbiAgICAvLyAgIDMuIE5vbi1OT05FIFNlbWFudGljIENvbnRleHQ6IFRoZXJlIGV4aXN0cyBhdCBsZWFzdCBvbmUsIGFuZCBmb3IgYWxsXG4gICAgLy8gICAgICBBVE5Db25maWcgYyBzdWNoIHRoYXQgYy5hbHQ9PWksIGMuc2VtYW50aWNDb250ZXh0IT1TZW1hbnRpY0NvbnRleHQuTk9ORS5cbiAgICAvL1xuICAgIC8vIEZyb20gdGhpcywgaXQgaXMgY2xlYXIgdGhhdCBOT05FfHxhbnl0aGluZz09Tk9ORS5cbiAgICAvL1xuICAgIHZhciBhbHRUb1ByZWQgPSBbXTtcbiAgICBmb3IodmFyIGk9MDtpPGNvbmZpZ3MuaXRlbXMubGVuZ3RoO2krKykge1xuICAgICAgICB2YXIgYyA9IGNvbmZpZ3MuaXRlbXNbaV07XG4gICAgICAgIGlmKGFtYmlnQWx0cy5jb250YWlucyggYy5hbHQgKSkge1xuICAgICAgICAgICAgYWx0VG9QcmVkW2MuYWx0XSA9IFNlbWFudGljQ29udGV4dC5vckNvbnRleHQoYWx0VG9QcmVkW2MuYWx0XSB8fCBudWxsLCBjLnNlbWFudGljQ29udGV4dCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFyIG5QcmVkQWx0cyA9IDA7XG4gICAgZm9yIChpID0xO2k8IG5hbHRzKzE7aSsrKSB7XG4gICAgICAgIHZhciBwcmVkID0gYWx0VG9QcmVkW2ldIHx8IG51bGw7XG4gICAgICAgIGlmIChwcmVkPT09bnVsbCkge1xuICAgICAgICAgICAgYWx0VG9QcmVkW2ldID0gU2VtYW50aWNDb250ZXh0Lk5PTkU7XG4gICAgICAgIH0gZWxzZSBpZiAocHJlZCAhPT0gU2VtYW50aWNDb250ZXh0Lk5PTkUpIHtcbiAgICAgICAgICAgIG5QcmVkQWx0cyArPSAxO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIG5vbmFtYmlnIGFsdHMgYXJlIG51bGwgaW4gYWx0VG9QcmVkXG4gICAgaWYgKG5QcmVkQWx0cz09PTApIHtcbiAgICAgICAgYWx0VG9QcmVkID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJnZXRQcmVkc0ZvckFtYmlnQWx0cyByZXN1bHQgXCIgKyBVdGlscy5hcnJheVRvU3RyaW5nKGFsdFRvUHJlZCkpO1xuICAgIH1cbiAgICByZXR1cm4gYWx0VG9QcmVkO1xufTtcblxuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5nZXRQcmVkaWNhdGVQcmVkaWN0aW9ucyA9IGZ1bmN0aW9uKGFtYmlnQWx0cywgYWx0VG9QcmVkKSB7XG4gICAgdmFyIHBhaXJzID0gW107XG4gICAgdmFyIGNvbnRhaW5zUHJlZGljYXRlID0gZmFsc2U7XG4gICAgZm9yICh2YXIgaT0xOyBpPGFsdFRvUHJlZC5sZW5ndGg7aSsrKSB7XG4gICAgICAgIHZhciBwcmVkID0gYWx0VG9QcmVkW2ldO1xuICAgICAgICAvLyB1bnByZWRpY2F0ZWQgaXMgaW5kaWNhdGVkIGJ5IFNlbWFudGljQ29udGV4dC5OT05FXG4gICAgICAgIGlmKCBhbWJpZ0FsdHMhPT1udWxsICYmIGFtYmlnQWx0cy5jb250YWlucyggaSApKSB7XG4gICAgICAgICAgICBwYWlycy5wdXNoKG5ldyBQcmVkUHJlZGljdGlvbihwcmVkLCBpKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByZWQgIT09IFNlbWFudGljQ29udGV4dC5OT05FKSB7XG4gICAgICAgICAgICBjb250YWluc1ByZWRpY2F0ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKCEgY29udGFpbnNQcmVkaWNhdGUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBwYWlycztcbn07XG5cbi8vXG4vLyBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGltcHJvdmUgdGhlIGxvY2FsaXphdGlvbiBvZiBlcnJvciBtZXNzYWdlcyBieVxuLy8gY2hvb3NpbmcgYW4gYWx0ZXJuYXRpdmUgcmF0aGVyIHRoYW4gdGhyb3dpbmcgYVxuLy8ge0BsaW5rIE5vVmlhYmxlQWx0RXhjZXB0aW9ufSBpbiBwYXJ0aWN1bGFyIHByZWRpY3Rpb24gc2NlbmFyaW9zIHdoZXJlIHRoZVxuLy8ge0BsaW5rIC8vRVJST1J9IHN0YXRlIHdhcyByZWFjaGVkIGR1cmluZyBBVE4gc2ltdWxhdGlvbi5cbi8vXG4vLyA8cD5cbi8vIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kIHVzZXMgdGhlIGZvbGxvd2luZ1xuLy8gYWxnb3JpdGhtIHRvIGlkZW50aWZ5IGFuIEFUTiBjb25maWd1cmF0aW9uIHdoaWNoIHN1Y2Nlc3NmdWxseSBwYXJzZWQgdGhlXG4vLyBkZWNpc2lvbiBlbnRyeSBydWxlLiBDaG9vc2luZyBzdWNoIGFuIGFsdGVybmF0aXZlIGVuc3VyZXMgdGhhdCB0aGVcbi8vIHtAbGluayBQYXJzZXJSdWxlQ29udGV4dH0gcmV0dXJuZWQgYnkgdGhlIGNhbGxpbmcgcnVsZSB3aWxsIGJlIGNvbXBsZXRlXG4vLyBhbmQgdmFsaWQsIGFuZCB0aGUgc3ludGF4IGVycm9yIHdpbGwgYmUgcmVwb3J0ZWQgbGF0ZXIgYXQgYSBtb3JlXG4vLyBsb2NhbGl6ZWQgbG9jYXRpb24uPC9wPlxuLy9cbi8vIDx1bD5cbi8vIDxsaT5JZiBhIHN5bnRhY3RpY2FsbHkgdmFsaWQgcGF0aCBvciBwYXRocyByZWFjaCB0aGUgZW5kIG9mIHRoZSBkZWNpc2lvbiBydWxlIGFuZFxuLy8gdGhleSBhcmUgc2VtYW50aWNhbGx5IHZhbGlkIGlmIHByZWRpY2F0ZWQsIHJldHVybiB0aGUgbWluIGFzc29jaWF0ZWQgYWx0LjwvbGk+XG4vLyA8bGk+RWxzZSwgaWYgYSBzZW1hbnRpY2FsbHkgaW52YWxpZCBidXQgc3ludGFjdGljYWxseSB2YWxpZCBwYXRoIGV4aXN0XG4vLyBvciBwYXRocyBleGlzdCwgcmV0dXJuIHRoZSBtaW5pbXVtIGFzc29jaWF0ZWQgYWx0LlxuLy8gPC9saT5cbi8vIDxsaT5PdGhlcndpc2UsIHJldHVybiB7QGxpbmsgQVROLy9JTlZBTElEX0FMVF9OVU1CRVJ9LjwvbGk+XG4vLyA8L3VsPlxuLy9cbi8vIDxwPlxuLy8gSW4gc29tZSBzY2VuYXJpb3MsIHRoZSBhbGdvcml0aG0gZGVzY3JpYmVkIGFib3ZlIGNvdWxkIHByZWRpY3QgYW5cbi8vIGFsdGVybmF0aXZlIHdoaWNoIHdpbGwgcmVzdWx0IGluIGEge0BsaW5rIEZhaWxlZFByZWRpY2F0ZUV4Y2VwdGlvbn0gaW5cbi8vIHRoZSBwYXJzZXIuIFNwZWNpZmljYWxseSwgdGhpcyBjb3VsZCBvY2N1ciBpZiB0aGUgPGVtPm9ubHk8L2VtPiBjb25maWd1cmF0aW9uXG4vLyBjYXBhYmxlIG9mIHN1Y2Nlc3NmdWxseSBwYXJzaW5nIHRvIHRoZSBlbmQgb2YgdGhlIGRlY2lzaW9uIHJ1bGUgaXNcbi8vIGJsb2NrZWQgYnkgYSBzZW1hbnRpYyBwcmVkaWNhdGUuIEJ5IGNob29zaW5nIHRoaXMgYWx0ZXJuYXRpdmUgd2l0aGluXG4vLyB7QGxpbmsgLy9hZGFwdGl2ZVByZWRpY3R9IGluc3RlYWQgb2YgdGhyb3dpbmcgYVxuLy8ge0BsaW5rIE5vVmlhYmxlQWx0RXhjZXB0aW9ufSwgdGhlIHJlc3VsdGluZ1xuLy8ge0BsaW5rIEZhaWxlZFByZWRpY2F0ZUV4Y2VwdGlvbn0gaW4gdGhlIHBhcnNlciB3aWxsIGlkZW50aWZ5IHRoZSBzcGVjaWZpY1xuLy8gcHJlZGljYXRlIHdoaWNoIGlzIHByZXZlbnRpbmcgdGhlIHBhcnNlciBmcm9tIHN1Y2Nlc3NmdWxseSBwYXJzaW5nIHRoZVxuLy8gZGVjaXNpb24gcnVsZSwgd2hpY2ggaGVscHMgZGV2ZWxvcGVycyBpZGVudGlmeSBhbmQgY29ycmVjdCBsb2dpYyBlcnJvcnNcbi8vIGluIHNlbWFudGljIHByZWRpY2F0ZXMuXG4vLyA8L3A+XG4vL1xuLy8gQHBhcmFtIGNvbmZpZ3MgVGhlIEFUTiBjb25maWd1cmF0aW9ucyB3aGljaCB3ZXJlIHZhbGlkIGltbWVkaWF0ZWx5IGJlZm9yZVxuLy8gdGhlIHtAbGluayAvL0VSUk9SfSBzdGF0ZSB3YXMgcmVhY2hlZFxuLy8gQHBhcmFtIG91dGVyQ29udGV4dCBUaGUgaXMgdGhlIFxcZ2FtbWFfMCBpbml0aWFsIHBhcnNlciBjb250ZXh0IGZyb20gdGhlIHBhcGVyXG4vLyBvciB0aGUgcGFyc2VyIHN0YWNrIGF0IHRoZSBpbnN0YW50IGJlZm9yZSBwcmVkaWN0aW9uIGNvbW1lbmNlcy5cbi8vXG4vLyBAcmV0dXJuIFRoZSB2YWx1ZSB0byByZXR1cm4gZnJvbSB7QGxpbmsgLy9hZGFwdGl2ZVByZWRpY3R9LCBvclxuLy8ge0BsaW5rIEFUTi8vSU5WQUxJRF9BTFRfTlVNQkVSfSBpZiBhIHN1aXRhYmxlIGFsdGVybmF0aXZlIHdhcyBub3Rcbi8vIGlkZW50aWZpZWQgYW5kIHtAbGluayAvL2FkYXB0aXZlUHJlZGljdH0gc2hvdWxkIHJlcG9ydCBhbiBlcnJvciBpbnN0ZWFkLlxuLy9cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0U3luVmFsaWRPclNlbUludmFsaWRBbHRUaGF0RmluaXNoZWREZWNpc2lvbkVudHJ5UnVsZSA9IGZ1bmN0aW9uKGNvbmZpZ3MsIG91dGVyQ29udGV4dCkge1xuICAgIHZhciBjZmdzID0gdGhpcy5zcGxpdEFjY29yZGluZ1RvU2VtYW50aWNWYWxpZGl0eShjb25maWdzLCBvdXRlckNvbnRleHQpO1xuICAgIHZhciBzZW1WYWxpZENvbmZpZ3MgPSBjZmdzWzBdO1xuICAgIHZhciBzZW1JbnZhbGlkQ29uZmlncyA9IGNmZ3NbMV07XG4gICAgdmFyIGFsdCA9IHRoaXMuZ2V0QWx0VGhhdEZpbmlzaGVkRGVjaXNpb25FbnRyeVJ1bGUoc2VtVmFsaWRDb25maWdzKTtcbiAgICBpZiAoYWx0IT09QVROLklOVkFMSURfQUxUX05VTUJFUikgeyAvLyBzZW1hbnRpY2FsbHkvc3ludGFjdGljYWxseSB2aWFibGUgcGF0aCBleGlzdHNcbiAgICAgICAgcmV0dXJuIGFsdDtcbiAgICB9XG4gICAgLy8gSXMgdGhlcmUgYSBzeW50YWN0aWNhbGx5IHZhbGlkIHBhdGggd2l0aCBhIGZhaWxlZCBwcmVkP1xuICAgIGlmIChzZW1JbnZhbGlkQ29uZmlncy5pdGVtcy5sZW5ndGg+MCkge1xuICAgICAgICBhbHQgPSB0aGlzLmdldEFsdFRoYXRGaW5pc2hlZERlY2lzaW9uRW50cnlSdWxlKHNlbUludmFsaWRDb25maWdzKTtcbiAgICAgICAgaWYgKGFsdCE9PUFUTi5JTlZBTElEX0FMVF9OVU1CRVIpIHsgLy8gc3ludGFjdGljYWxseSB2aWFibGUgcGF0aCBleGlzdHNcbiAgICAgICAgICAgIHJldHVybiBhbHQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIEFUTi5JTlZBTElEX0FMVF9OVU1CRVI7XG59O1xuXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmdldEFsdFRoYXRGaW5pc2hlZERlY2lzaW9uRW50cnlSdWxlID0gZnVuY3Rpb24oY29uZmlncykge1xuICAgIHZhciBhbHRzID0gW107XG4gICAgZm9yKHZhciBpPTA7aTxjb25maWdzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjID0gY29uZmlncy5pdGVtc1tpXTtcbiAgICAgICAgaWYgKGMucmVhY2hlc0ludG9PdXRlckNvbnRleHQ+MCB8fCAoKGMuc3RhdGUgaW5zdGFuY2VvZiBSdWxlU3RvcFN0YXRlKSAmJiBjLmNvbnRleHQuaGFzRW1wdHlQYXRoKCkpKSB7XG4gICAgICAgICAgICBpZihhbHRzLmluZGV4T2YoYy5hbHQpPDApIHtcbiAgICAgICAgICAgICAgICBhbHRzLnB1c2goYy5hbHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChhbHRzLmxlbmd0aD09PTApIHtcbiAgICAgICAgcmV0dXJuIEFUTi5JTlZBTElEX0FMVF9OVU1CRVI7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWluLmFwcGx5KG51bGwsIGFsdHMpO1xuICAgIH1cbn07XG4vLyBXYWxrIHRoZSBsaXN0IG9mIGNvbmZpZ3VyYXRpb25zIGFuZCBzcGxpdCB0aGVtIGFjY29yZGluZyB0b1xuLy8gIHRob3NlIHRoYXQgaGF2ZSBwcmVkcyBldmFsdWF0aW5nIHRvIHRydWUvZmFsc2UuICBJZiBubyBwcmVkLCBhc3N1bWVcbi8vICB0cnVlIHByZWQgYW5kIGluY2x1ZGUgaW4gc3VjY2VlZGVkIHNldC4gIFJldHVybnMgUGFpciBvZiBzZXRzLlxuLy9cbi8vICBDcmVhdGUgYSBuZXcgc2V0IHNvIGFzIG5vdCB0byBhbHRlciB0aGUgaW5jb21pbmcgcGFyYW1ldGVyLlxuLy9cbi8vICBBc3N1bXB0aW9uOiB0aGUgaW5wdXQgc3RyZWFtIGhhcyBiZWVuIHJlc3RvcmVkIHRvIHRoZSBzdGFydGluZyBwb2ludFxuLy8gIHByZWRpY3Rpb24sIHdoaWNoIGlzIHdoZXJlIHByZWRpY2F0ZXMgbmVlZCB0byBldmFsdWF0ZS5cbi8vXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLnNwbGl0QWNjb3JkaW5nVG9TZW1hbnRpY1ZhbGlkaXR5ID0gZnVuY3Rpb24oIGNvbmZpZ3MsIG91dGVyQ29udGV4dCkge1xuICAgIHZhciBzdWNjZWVkZWQgPSBuZXcgQVROQ29uZmlnU2V0KGNvbmZpZ3MuZnVsbEN0eCk7XG4gICAgdmFyIGZhaWxlZCA9IG5ldyBBVE5Db25maWdTZXQoY29uZmlncy5mdWxsQ3R4KTtcbiAgICBmb3IodmFyIGk9MDtpPGNvbmZpZ3MuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGMgPSBjb25maWdzLml0ZW1zW2ldO1xuICAgICAgICBpZiAoYy5zZW1hbnRpY0NvbnRleHQgIT09IFNlbWFudGljQ29udGV4dC5OT05FKSB7XG4gICAgICAgICAgICB2YXIgcHJlZGljYXRlRXZhbHVhdGlvblJlc3VsdCA9IGMuc2VtYW50aWNDb250ZXh0LmV2YWx1YXRlKHRoaXMucGFyc2VyLCBvdXRlckNvbnRleHQpO1xuICAgICAgICAgICAgaWYgKHByZWRpY2F0ZUV2YWx1YXRpb25SZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBzdWNjZWVkZWQuYWRkKGMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmYWlsZWQuYWRkKGMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3VjY2VlZGVkLmFkZChjKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gW3N1Y2NlZWRlZCwgZmFpbGVkXTtcbn07XG5cbi8vIExvb2sgdGhyb3VnaCBhIGxpc3Qgb2YgcHJlZGljYXRlL2FsdCBwYWlycywgcmV0dXJuaW5nIGFsdHMgZm9yIHRoZVxuLy8gIHBhaXJzIHRoYXQgd2luLiBBIHtAY29kZSBOT05FfSBwcmVkaWNhdGUgaW5kaWNhdGVzIGFuIGFsdCBjb250YWluaW5nIGFuXG4vLyAgdW5wcmVkaWNhdGVkIGNvbmZpZyB3aGljaCBiZWhhdmVzIGFzIFwiYWx3YXlzIHRydWUuXCIgSWYgIWNvbXBsZXRlXG4vLyAgdGhlbiB3ZSBzdG9wIGF0IHRoZSBmaXJzdCBwcmVkaWNhdGUgdGhhdCBldmFsdWF0ZXMgdG8gdHJ1ZS4gVGhpc1xuLy8gIGluY2x1ZGVzIHBhaXJzIHdpdGggbnVsbCBwcmVkaWNhdGVzLlxuLy9cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZXZhbFNlbWFudGljQ29udGV4dCA9IGZ1bmN0aW9uKHByZWRQcmVkaWN0aW9ucywgb3V0ZXJDb250ZXh0LCBjb21wbGV0ZSkge1xuICAgIHZhciBwcmVkaWN0aW9ucyA9IG5ldyBCaXRTZXQoKTtcbiAgICBmb3IodmFyIGk9MDtpPHByZWRQcmVkaWN0aW9ucy5sZW5ndGg7aSsrKSB7XG4gICAgXHR2YXIgcGFpciA9IHByZWRQcmVkaWN0aW9uc1tpXTtcbiAgICAgICAgaWYgKHBhaXIucHJlZCA9PT0gU2VtYW50aWNDb250ZXh0Lk5PTkUpIHtcbiAgICAgICAgICAgIHByZWRpY3Rpb25zLmFkZChwYWlyLmFsdCk7XG4gICAgICAgICAgICBpZiAoISBjb21wbGV0ZSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHByZWRpY2F0ZUV2YWx1YXRpb25SZXN1bHQgPSBwYWlyLnByZWQuZXZhbHVhdGUodGhpcy5wYXJzZXIsIG91dGVyQ29udGV4dCk7XG4gICAgICAgIGlmICh0aGlzLmRlYnVnIHx8IHRoaXMuZGZhX2RlYnVnKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcImV2YWwgcHJlZCBcIiArIHBhaXIgKyBcIj1cIiArIHByZWRpY2F0ZUV2YWx1YXRpb25SZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcmVkaWNhdGVFdmFsdWF0aW9uUmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kZWJ1ZyB8fCB0aGlzLmRmYV9kZWJ1Zykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiUFJFRElDVCBcIiArIHBhaXIuYWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByZWRpY3Rpb25zLmFkZChwYWlyLmFsdCk7XG4gICAgICAgICAgICBpZiAoISBjb21wbGV0ZSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcmVkaWN0aW9ucztcbn07XG5cbi8vIFRPRE86IElmIHdlIGFyZSBkb2luZyBwcmVkaWNhdGVzLCB0aGVyZSBpcyBubyBwb2ludCBpbiBwdXJzdWluZ1xuLy8gICAgIGNsb3N1cmUgb3BlcmF0aW9ucyBpZiB3ZSByZWFjaCBhIERGQSBzdGF0ZSB0aGF0IHVuaXF1ZWx5IHByZWRpY3RzXG4vLyAgICAgYWx0ZXJuYXRpdmUuIFdlIHdpbGwgbm90IGJlIGNhY2hpbmcgdGhhdCBERkEgc3RhdGUgYW5kIGl0IGlzIGFcbi8vICAgICB3YXN0ZSB0byBwdXJzdWUgdGhlIGNsb3N1cmUuIE1pZ2h0IGhhdmUgdG8gYWR2YW5jZSB3aGVuIHdlIGRvXG4vLyAgICAgYW1iaWcgZGV0ZWN0aW9uIHRob3VnaHQgOihcbi8vXG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuY2xvc3VyZSA9IGZ1bmN0aW9uKGNvbmZpZywgY29uZmlncywgY2xvc3VyZUJ1c3ksIGNvbGxlY3RQcmVkaWNhdGVzLCBmdWxsQ3R4LCB0cmVhdEVvZkFzRXBzaWxvbikge1xuICAgIHZhciBpbml0aWFsRGVwdGggPSAwO1xuICAgIHRoaXMuY2xvc3VyZUNoZWNraW5nU3RvcFN0YXRlKGNvbmZpZywgY29uZmlncywgY2xvc3VyZUJ1c3ksIGNvbGxlY3RQcmVkaWNhdGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsQ3R4LCBpbml0aWFsRGVwdGgsIHRyZWF0RW9mQXNFcHNpbG9uKTtcbn07XG5cblxuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5jbG9zdXJlQ2hlY2tpbmdTdG9wU3RhdGUgPSBmdW5jdGlvbihjb25maWcsIGNvbmZpZ3MsIGNsb3N1cmVCdXN5LCBjb2xsZWN0UHJlZGljYXRlcywgZnVsbEN0eCwgZGVwdGgsIHRyZWF0RW9mQXNFcHNpbG9uKSB7XG4gICAgaWYgKHRoaXMuZGVidWcgfHwgdGhpcy5kZWJ1Z19jbG9zdXJlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiY2xvc3VyZShcIiArIGNvbmZpZy50b1N0cmluZyh0aGlzLnBhcnNlcix0cnVlKSArIFwiKVwiKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJjb25maWdzKFwiICsgY29uZmlncy50b1N0cmluZygpICsgXCIpXCIpO1xuICAgICAgICBpZihjb25maWcucmVhY2hlc0ludG9PdXRlckNvbnRleHQ+NTApIHtcbiAgICAgICAgICAgIHRocm93IFwicHJvYmxlbVwiO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChjb25maWcuc3RhdGUgaW5zdGFuY2VvZiBSdWxlU3RvcFN0YXRlKSB7XG4gICAgICAgIC8vIFdlIGhpdCBydWxlIGVuZC4gSWYgd2UgaGF2ZSBjb250ZXh0IGluZm8sIHVzZSBpdFxuICAgICAgICAvLyBydW4gdGhydSBhbGwgcG9zc2libGUgc3RhY2sgdG9wcyBpbiBjdHhcbiAgICAgICAgaWYgKCEgY29uZmlnLmNvbnRleHQuaXNFbXB0eSgpKSB7XG4gICAgICAgICAgICBmb3IgKCB2YXIgaSA9MDsgaTxjb25maWcuY29udGV4dC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChjb25maWcuY29udGV4dC5nZXRSZXR1cm5TdGF0ZShpKSA9PT0gUHJlZGljdGlvbkNvbnRleHQuRU1QVFlfUkVUVVJOX1NUQVRFKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmdWxsQ3R4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maWdzLmFkZChuZXcgQVROQ29uZmlnKHtzdGF0ZTpjb25maWcuc3RhdGUsIGNvbnRleHQ6UHJlZGljdGlvbkNvbnRleHQuRU1QVFl9LCBjb25maWcpLCB0aGlzLm1lcmdlQ2FjaGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBoYXZlIG5vIGNvbnRleHQgaW5mbywganVzdCBjaGFzZSBmb2xsb3cgbGlua3MgKGlmIGdyZWVkeSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJGQUxMSU5HIG9mZiBydWxlIFwiICsgdGhpcy5nZXRSdWxlTmFtZShjb25maWcuc3RhdGUucnVsZUluZGV4KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3N1cmVfKGNvbmZpZywgY29uZmlncywgY2xvc3VyZUJ1c3ksIGNvbGxlY3RQcmVkaWNhdGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbEN0eCwgZGVwdGgsIHRyZWF0RW9mQXNFcHNpbG9uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIHJldHVyblN0YXRlID0gdGhpcy5hdG4uc3RhdGVzW2NvbmZpZy5jb250ZXh0LmdldFJldHVyblN0YXRlKGkpXTtcbiAgICAgICAgICAgICAgICB2YXIgbmV3Q29udGV4dCA9IGNvbmZpZy5jb250ZXh0LmdldFBhcmVudChpKTsgLy8gXCJwb3BcIiByZXR1cm4gc3RhdGVcbiAgICAgICAgICAgICAgICB2YXIgcGFybXMgPSB7c3RhdGU6cmV0dXJuU3RhdGUsIGFsdDpjb25maWcuYWx0LCBjb250ZXh0Om5ld0NvbnRleHQsIHNlbWFudGljQ29udGV4dDpjb25maWcuc2VtYW50aWNDb250ZXh0fTtcbiAgICAgICAgICAgICAgICB2YXIgYyA9IG5ldyBBVE5Db25maWcocGFybXMsIG51bGwpO1xuICAgICAgICAgICAgICAgIC8vIFdoaWxlIHdlIGhhdmUgY29udGV4dCB0byBwb3AgYmFjayBmcm9tLCB3ZSBtYXkgaGF2ZVxuICAgICAgICAgICAgICAgIC8vIGdvdHRlbiB0aGF0IGNvbnRleHQgQUZURVIgaGF2aW5nIGZhbGxpbmcgb2ZmIGEgcnVsZS5cbiAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgd2UgdHJhY2sgdGhhdCB3ZSBhcmUgbm93IG91dCBvZiBjb250ZXh0LlxuICAgICAgICAgICAgICAgIGMucmVhY2hlc0ludG9PdXRlckNvbnRleHQgPSBjb25maWcucmVhY2hlc0ludG9PdXRlckNvbnRleHQ7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zdXJlQ2hlY2tpbmdTdG9wU3RhdGUoYywgY29uZmlncywgY2xvc3VyZUJ1c3ksIGNvbGxlY3RQcmVkaWNhdGVzLCBmdWxsQ3R4LCBkZXB0aCAtIDEsIHRyZWF0RW9mQXNFcHNpbG9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIGlmKCBmdWxsQ3R4KSB7XG4gICAgICAgICAgICAvLyByZWFjaGVkIGVuZCBvZiBzdGFydCBydWxlXG4gICAgICAgICAgICBjb25maWdzLmFkZChjb25maWcsIHRoaXMubWVyZ2VDYWNoZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBlbHNlIGlmIHdlIGhhdmUgbm8gY29udGV4dCBpbmZvLCBqdXN0IGNoYXNlIGZvbGxvdyBsaW5rcyAoaWYgZ3JlZWR5KVxuICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkZBTExJTkcgb2ZmIHJ1bGUgXCIgKyB0aGlzLmdldFJ1bGVOYW1lKGNvbmZpZy5zdGF0ZS5ydWxlSW5kZXgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNsb3N1cmVfKGNvbmZpZywgY29uZmlncywgY2xvc3VyZUJ1c3ksIGNvbGxlY3RQcmVkaWNhdGVzLCBmdWxsQ3R4LCBkZXB0aCwgdHJlYXRFb2ZBc0Vwc2lsb24pO1xufTtcblxuXG4vLyBEbyB0aGUgYWN0dWFsIHdvcmsgb2Ygd2Fsa2luZyBlcHNpbG9uIGVkZ2VzLy9cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuY2xvc3VyZV8gPSBmdW5jdGlvbihjb25maWcsIGNvbmZpZ3MsIGNsb3N1cmVCdXN5LCBjb2xsZWN0UHJlZGljYXRlcywgZnVsbEN0eCwgZGVwdGgsIHRyZWF0RW9mQXNFcHNpbG9uKSB7XG4gICAgdmFyIHAgPSBjb25maWcuc3RhdGU7XG4gICAgLy8gb3B0aW1pemF0aW9uXG4gICAgaWYgKCEgcC5lcHNpbG9uT25seVRyYW5zaXRpb25zKSB7XG4gICAgICAgIGNvbmZpZ3MuYWRkKGNvbmZpZywgdGhpcy5tZXJnZUNhY2hlKTtcbiAgICAgICAgLy8gbWFrZSBzdXJlIHRvIG5vdCByZXR1cm4gaGVyZSwgYmVjYXVzZSBFT0YgdHJhbnNpdGlvbnMgY2FuIGFjdCBhc1xuICAgICAgICAvLyBib3RoIGVwc2lsb24gdHJhbnNpdGlvbnMgYW5kIG5vbi1lcHNpbG9uIHRyYW5zaXRpb25zLlxuICAgIH1cbiAgICBmb3IodmFyIGkgPSAwO2k8cC50cmFuc2l0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZihpPT0wICYmIHRoaXMuY2FuRHJvcExvb3BFbnRyeUVkZ2VJbkxlZnRSZWN1cnNpdmVSdWxlKGNvbmZpZykpXG4gICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICB2YXIgdCA9IHAudHJhbnNpdGlvbnNbaV07XG4gICAgICAgIHZhciBjb250aW51ZUNvbGxlY3RpbmcgPSBjb2xsZWN0UHJlZGljYXRlcyAmJiAhKHQgaW5zdGFuY2VvZiBBY3Rpb25UcmFuc2l0aW9uKTtcbiAgICAgICAgdmFyIGMgPSB0aGlzLmdldEVwc2lsb25UYXJnZXQoY29uZmlnLCB0LCBjb250aW51ZUNvbGxlY3RpbmcsIGRlcHRoID09PSAwLCBmdWxsQ3R4LCB0cmVhdEVvZkFzRXBzaWxvbik7XG4gICAgICAgIGlmIChjIT09bnVsbCkge1xuICAgICAgICAgICAgdmFyIG5ld0RlcHRoID0gZGVwdGg7XG4gICAgICAgICAgICBpZiAoIGNvbmZpZy5zdGF0ZSBpbnN0YW5jZW9mIFJ1bGVTdG9wU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAvLyB0YXJnZXQgZmVsbCBvZmYgZW5kIG9mIHJ1bGU7IG1hcmsgcmVzdWx0aW5nIGMgYXMgaGF2aW5nIGRpcHBlZCBpbnRvIG91dGVyIGNvbnRleHRcbiAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBnZXQgaGVyZSBpZiBpbmNvbWluZyBjb25maWcgd2FzIHJ1bGUgc3RvcCBhbmQgd2UgaGFkIGNvbnRleHRcbiAgICAgICAgICAgICAgICAvLyB0cmFjayBob3cgZmFyIHdlIGRpcCBpbnRvIG91dGVyIGNvbnRleHQuICBNaWdodFxuICAgICAgICAgICAgICAgIC8vIGNvbWUgaW4gaGFuZHkgYW5kIHdlIGF2b2lkIGV2YWx1YXRpbmcgY29udGV4dCBkZXBlbmRlbnRcbiAgICAgICAgICAgICAgICAvLyBwcmVkcyBpZiB0aGlzIGlzID4gMC5cblx0XHRcdFx0aWYgKHRoaXMuX2RmYSAhPT0gbnVsbCAmJiB0aGlzLl9kZmEucHJlY2VkZW5jZURmYSkge1xuXHRcdFx0XHRcdGlmICh0Lm91dGVybW9zdFByZWNlZGVuY2VSZXR1cm4gPT09IHRoaXMuX2RmYS5hdG5TdGFydFN0YXRlLnJ1bGVJbmRleCkge1xuXHRcdFx0XHRcdFx0Yy5wcmVjZWRlbmNlRmlsdGVyU3VwcHJlc3NlZCA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cbiAgICAgICAgICAgICAgICBjLnJlYWNoZXNJbnRvT3V0ZXJDb250ZXh0ICs9IDE7XG4gICAgICAgICAgICAgICAgaWYgKGNsb3N1cmVCdXN5LmFkZChjKSE9PWMpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gYXZvaWQgaW5maW5pdGUgcmVjdXJzaW9uIGZvciByaWdodC1yZWN1cnNpdmUgcnVsZXNcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbmZpZ3MuZGlwc0ludG9PdXRlckNvbnRleHQgPSB0cnVlOyAvLyBUT0RPOiBjYW4gcmVtb3ZlPyBvbmx5IGNhcmUgd2hlbiB3ZSBhZGQgdG8gc2V0IHBlciBtaWRkbGUgb2YgdGhpcyBtZXRob2RcbiAgICAgICAgICAgICAgICBuZXdEZXB0aCAtPSAxO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZGlwcyBpbnRvIG91dGVyIGN0eDogXCIgKyBjKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghdC5pc0Vwc2lsb24gJiYgY2xvc3VyZUJ1c3kuYWRkKGMpIT09Yyl7XG4gICAgICAgICAgICAgICAgICAgIC8vIGF2b2lkIGluZmluaXRlIHJlY3Vyc2lvbiBmb3IgRU9GKiBhbmQgRU9GK1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHQgaW5zdGFuY2VvZiBSdWxlVHJhbnNpdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAvLyBsYXRjaCB3aGVuIG5ld0RlcHRoIGdvZXMgbmVnYXRpdmUgLSBvbmNlIHdlIHN0ZXAgb3V0IG9mIHRoZSBlbnRyeSBjb250ZXh0IHdlIGNhbid0IHJldHVyblxuICAgICAgICAgICAgICAgICAgICBpZiAobmV3RGVwdGggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3RGVwdGggKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2xvc3VyZUNoZWNraW5nU3RvcFN0YXRlKGMsIGNvbmZpZ3MsIGNsb3N1cmVCdXN5LCBjb250aW51ZUNvbGxlY3RpbmcsIGZ1bGxDdHgsIG5ld0RlcHRoLCB0cmVhdEVvZkFzRXBzaWxvbik7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuY2FuRHJvcExvb3BFbnRyeUVkZ2VJbkxlZnRSZWN1cnNpdmVSdWxlID0gZnVuY3Rpb24oY29uZmlnKSB7XG4gICAgLy8gcmV0dXJuIEZhbHNlXG4gICAgdmFyIHAgPSBjb25maWcuc3RhdGU7XG4gICAgLy8gRmlyc3QgY2hlY2sgdG8gc2VlIGlmIHdlIGFyZSBpbiBTdGFyTG9vcEVudHJ5U3RhdGUgZ2VuZXJhdGVkIGR1cmluZ1xuICAgIC8vIGxlZnQtcmVjdXJzaW9uIGVsaW1pbmF0aW9uLiBGb3IgZWZmaWNpZW5jeSwgYWxzbyBjaGVjayBpZlxuICAgIC8vIHRoZSBjb250ZXh0IGhhcyBhbiBlbXB0eSBzdGFjayBjYXNlLiBJZiBzbywgaXQgd291bGQgbWVhblxuICAgIC8vIGdsb2JhbCBGT0xMT1cgc28gd2UgY2FuJ3QgcGVyZm9ybSBvcHRpbWl6YXRpb25cbiAgICAvLyBBcmUgd2UgdGhlIHNwZWNpYWwgbG9vcCBlbnRyeS9leGl0IHN0YXRlPyBvciBTTEwgd2lsZGNhcmRcbiAgICBpZihwLnN0YXRlVHlwZSAhPSBBVE5TdGF0ZS5TVEFSX0xPT1BfRU5UUlkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpZihwLnN0YXRlVHlwZSAhPSBBVE5TdGF0ZS5TVEFSX0xPT1BfRU5UUlkgfHwgIXAuaXNQcmVjZWRlbmNlRGVjaXNpb24gfHxcbiAgICAgICAgICAgY29uZmlnLmNvbnRleHQuaXNFbXB0eSgpIHx8IGNvbmZpZy5jb250ZXh0Lmhhc0VtcHR5UGF0aCgpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBSZXF1aXJlIGFsbCByZXR1cm4gc3RhdGVzIHRvIHJldHVybiBiYWNrIHRvIHRoZSBzYW1lIHJ1bGUgdGhhdCBwIGlzIGluLlxuICAgIHZhciBudW1DdHhzID0gY29uZmlnLmNvbnRleHQubGVuZ3RoO1xuICAgIGZvcih2YXIgaT0wOyBpPG51bUN0eHM7IGkrKykgeyAvLyBmb3IgZWFjaCBzdGFjayBjb250ZXh0XG4gICAgICAgIHZhciByZXR1cm5TdGF0ZSA9IHRoaXMuYXRuLnN0YXRlc1tjb25maWcuY29udGV4dC5nZXRSZXR1cm5TdGF0ZShpKV07XG4gICAgICAgIGlmIChyZXR1cm5TdGF0ZS5ydWxlSW5kZXggIT0gcC5ydWxlSW5kZXgpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIGRlY2lzaW9uU3RhcnRTdGF0ZSA9IHAudHJhbnNpdGlvbnNbMF0udGFyZ2V0O1xuICAgIHZhciBibG9ja0VuZFN0YXRlTnVtID0gZGVjaXNpb25TdGFydFN0YXRlLmVuZFN0YXRlLnN0YXRlTnVtYmVyO1xuICAgIHZhciBibG9ja0VuZFN0YXRlID0gdGhpcy5hdG4uc3RhdGVzW2Jsb2NrRW5kU3RhdGVOdW1dO1xuXG4gICAgLy8gVmVyaWZ5IHRoYXQgdGhlIHRvcCBvZiBlYWNoIHN0YWNrIGNvbnRleHQgbGVhZHMgdG8gbG9vcCBlbnRyeS9leGl0XG4gICAgLy8gc3RhdGUgdGhyb3VnaCBlcHNpbG9uIGVkZ2VzIGFuZCB3L28gbGVhdmluZyBydWxlLlxuICAgIGZvcih2YXIgaT0wOyBpPG51bUN0eHM7IGkrKykgeyAvLyBmb3IgZWFjaCBzdGFjayBjb250ZXh0XG4gICAgICAgIHZhciByZXR1cm5TdGF0ZU51bWJlciA9IGNvbmZpZy5jb250ZXh0LmdldFJldHVyblN0YXRlKGkpO1xuICAgICAgICB2YXIgcmV0dXJuU3RhdGUgPSB0aGlzLmF0bi5zdGF0ZXNbcmV0dXJuU3RhdGVOdW1iZXJdO1xuICAgICAgICAvLyBhbGwgc3RhdGVzIG11c3QgaGF2ZSBzaW5nbGUgb3V0Z29pbmcgZXBzaWxvbiBlZGdlXG4gICAgICAgIGlmIChyZXR1cm5TdGF0ZS50cmFuc2l0aW9ucy5sZW5ndGggIT0gMSB8fCAhcmV0dXJuU3RhdGUudHJhbnNpdGlvbnNbMF0uaXNFcHNpbG9uKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIC8vIExvb2sgZm9yIHByZWZpeCBvcCBjYXNlIGxpa2UgJ25vdCBleHByJywgKCcgdHlwZSAnKScgZXhwclxuICAgICAgICB2YXIgcmV0dXJuU3RhdGVUYXJnZXQgPSByZXR1cm5TdGF0ZS50cmFuc2l0aW9uc1swXS50YXJnZXQ7XG4gICAgICAgIGlmICggcmV0dXJuU3RhdGUuc3RhdGVUeXBlID09IEFUTlN0YXRlLkJMT0NLX0VORCAmJiByZXR1cm5TdGF0ZVRhcmdldCA9PSBwIClcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgIC8vIExvb2sgZm9yICdleHByIG9wIGV4cHInIG9yIGNhc2Ugd2hlcmUgZXhwcidzIHJldHVybiBzdGF0ZSBpcyBibG9jayBlbmRcbiAgICAgICAgLy8gb2YgKC4uLikqIGludGVybmFsIGJsb2NrOyB0aGUgYmxvY2sgZW5kIHBvaW50cyB0byBsb29wIGJhY2tcbiAgICAgICAgLy8gd2hpY2ggcG9pbnRzIHRvIHAgYnV0IHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgdGhhdFxuICAgICAgICBpZiAoIHJldHVyblN0YXRlID09IGJsb2NrRW5kU3RhdGUgKVxuICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgLy8gTG9vayBmb3IgdGVybmFyeSBleHByID8gZXhwciA6IGV4cHIuIFRoZSByZXR1cm4gc3RhdGUgcG9pbnRzIGF0IGJsb2NrIGVuZCxcbiAgICAgICAgLy8gd2hpY2ggcG9pbnRzIGF0IGxvb3AgZW50cnkgc3RhdGVcbiAgICAgICAgaWYgKCByZXR1cm5TdGF0ZVRhcmdldCA9PSBibG9ja0VuZFN0YXRlIClcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgIC8vIExvb2sgZm9yIGNvbXBsZXggcHJlZml4ICdiZXR3ZWVuIGV4cHIgYW5kIGV4cHInIGNhc2Ugd2hlcmUgMm5kIGV4cHInc1xuICAgICAgICAvLyByZXR1cm4gc3RhdGUgcG9pbnRzIGF0IGJsb2NrIGVuZCBzdGF0ZSBvZiAoLi4uKSogaW50ZXJuYWwgYmxvY2tcbiAgICAgICAgaWYgKHJldHVyblN0YXRlVGFyZ2V0LnN0YXRlVHlwZSA9PSBBVE5TdGF0ZS5CTE9DS19FTkQgJiYgcmV0dXJuU3RhdGVUYXJnZXQudHJhbnNpdGlvbnMubGVuZ3RoID09IDFcbiAgICAgICAgICAgICAgICAmJiByZXR1cm5TdGF0ZVRhcmdldC50cmFuc2l0aW9uc1swXS5pc0Vwc2lsb24gJiYgcmV0dXJuU3RhdGVUYXJnZXQudHJhbnNpdGlvbnNbMF0udGFyZ2V0ID09IHApXG4gICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAvLyBhbnl0aGluZyBlbHNlIGFpbid0IGNvbmZvcm1pbmdcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cblxuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5nZXRSdWxlTmFtZSA9IGZ1bmN0aW9uKCBpbmRleCkge1xuICAgIGlmICh0aGlzLnBhcnNlciE9PW51bGwgJiYgaW5kZXg+PTApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VyLnJ1bGVOYW1lc1tpbmRleF07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFwiPHJ1bGUgXCIgKyBpbmRleCArIFwiPlwiO1xuICAgIH1cbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0RXBzaWxvblRhcmdldCA9IGZ1bmN0aW9uKGNvbmZpZywgdCwgY29sbGVjdFByZWRpY2F0ZXMsIGluQ29udGV4dCwgZnVsbEN0eCwgdHJlYXRFb2ZBc0Vwc2lsb24pIHtcbiAgICBzd2l0Y2godC5zZXJpYWxpemF0aW9uVHlwZSkge1xuICAgIGNhc2UgVHJhbnNpdGlvbi5SVUxFOlxuICAgICAgICByZXR1cm4gdGhpcy5ydWxlVHJhbnNpdGlvbihjb25maWcsIHQpO1xuICAgIGNhc2UgVHJhbnNpdGlvbi5QUkVDRURFTkNFOlxuICAgICAgICByZXR1cm4gdGhpcy5wcmVjZWRlbmNlVHJhbnNpdGlvbihjb25maWcsIHQsIGNvbGxlY3RQcmVkaWNhdGVzLCBpbkNvbnRleHQsIGZ1bGxDdHgpO1xuICAgIGNhc2UgVHJhbnNpdGlvbi5QUkVESUNBVEU6XG4gICAgICAgIHJldHVybiB0aGlzLnByZWRUcmFuc2l0aW9uKGNvbmZpZywgdCwgY29sbGVjdFByZWRpY2F0ZXMsIGluQ29udGV4dCwgZnVsbEN0eCk7XG4gICAgY2FzZSBUcmFuc2l0aW9uLkFDVElPTjpcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aW9uVHJhbnNpdGlvbihjb25maWcsIHQpO1xuICAgIGNhc2UgVHJhbnNpdGlvbi5FUFNJTE9OOlxuICAgICAgICByZXR1cm4gbmV3IEFUTkNvbmZpZyh7c3RhdGU6dC50YXJnZXR9LCBjb25maWcpO1xuICAgIGNhc2UgVHJhbnNpdGlvbi5BVE9NOlxuICAgIGNhc2UgVHJhbnNpdGlvbi5SQU5HRTpcbiAgICBjYXNlIFRyYW5zaXRpb24uU0VUOlxuICAgICAgICAvLyBFT0YgdHJhbnNpdGlvbnMgYWN0IGxpa2UgZXBzaWxvbiB0cmFuc2l0aW9ucyBhZnRlciB0aGUgZmlyc3QgRU9GXG4gICAgICAgIC8vIHRyYW5zaXRpb24gaXMgdHJhdmVyc2VkXG4gICAgICAgIGlmICh0cmVhdEVvZkFzRXBzaWxvbikge1xuICAgICAgICAgICAgaWYgKHQubWF0Y2hlcyhUb2tlbi5FT0YsIDAsIDEpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBVE5Db25maWcoe3N0YXRlOiB0LnRhcmdldH0sIGNvbmZpZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgZGVmYXVsdDpcbiAgICBcdHJldHVybiBudWxsO1xuICAgIH1cbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuYWN0aW9uVHJhbnNpdGlvbiA9IGZ1bmN0aW9uKGNvbmZpZywgdCkge1xuICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgIHZhciBpbmRleCA9IHQuYWN0aW9uSW5kZXg9PS0xID8gNjU1MzUgOiB0LmFjdGlvbkluZGV4O1xuICAgICAgICBjb25zb2xlLmxvZyhcIkFDVElPTiBlZGdlIFwiICsgdC5ydWxlSW5kZXggKyBcIjpcIiArIGluZGV4KTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBBVE5Db25maWcoe3N0YXRlOnQudGFyZ2V0fSwgY29uZmlnKTtcbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUucHJlY2VkZW5jZVRyYW5zaXRpb24gPSBmdW5jdGlvbihjb25maWcsIHB0LCAgY29sbGVjdFByZWRpY2F0ZXMsIGluQ29udGV4dCwgZnVsbEN0eCkge1xuICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiUFJFRCAoY29sbGVjdFByZWRpY2F0ZXM9XCIgKyBjb2xsZWN0UHJlZGljYXRlcyArIFwiKSBcIiArXG4gICAgICAgICAgICAgICAgcHQucHJlY2VkZW5jZSArIFwiPj1fcCwgY3R4IGRlcGVuZGVudD10cnVlXCIpO1xuICAgICAgICBpZiAodGhpcy5wYXJzZXIhPT1udWxsKSB7XG4gICAgICAgIFx0Y29uc29sZS5sb2coXCJjb250ZXh0IHN1cnJvdW5kaW5nIHByZWQgaXMgXCIgKyBVdGlscy5hcnJheVRvU3RyaW5nKHRoaXMucGFyc2VyLmdldFJ1bGVJbnZvY2F0aW9uU3RhY2soKSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhciBjID0gbnVsbDtcbiAgICBpZiAoY29sbGVjdFByZWRpY2F0ZXMgJiYgaW5Db250ZXh0KSB7XG4gICAgICAgIGlmIChmdWxsQ3R4KSB7XG4gICAgICAgICAgICAvLyBJbiBmdWxsIGNvbnRleHQgbW9kZSwgd2UgY2FuIGV2YWx1YXRlIHByZWRpY2F0ZXMgb24tdGhlLWZseVxuICAgICAgICAgICAgLy8gZHVyaW5nIGNsb3N1cmUsIHdoaWNoIGRyYW1hdGljYWxseSByZWR1Y2VzIHRoZSBzaXplIG9mXG4gICAgICAgICAgICAvLyB0aGUgY29uZmlnIHNldHMuIEl0IGFsc28gb2J2aWF0ZXMgdGhlIG5lZWQgdG8gdGVzdCBwcmVkaWNhdGVzXG4gICAgICAgICAgICAvLyBsYXRlciBkdXJpbmcgY29uZmxpY3QgcmVzb2x1dGlvbi5cbiAgICAgICAgICAgIHZhciBjdXJyZW50UG9zaXRpb24gPSB0aGlzLl9pbnB1dC5pbmRleDtcbiAgICAgICAgICAgIHRoaXMuX2lucHV0LnNlZWsodGhpcy5fc3RhcnRJbmRleCk7XG4gICAgICAgICAgICB2YXIgcHJlZFN1Y2NlZWRzID0gcHQuZ2V0UHJlZGljYXRlKCkuZXZhbHVhdGUodGhpcy5wYXJzZXIsIHRoaXMuX291dGVyQ29udGV4dCk7XG4gICAgICAgICAgICB0aGlzLl9pbnB1dC5zZWVrKGN1cnJlbnRQb3NpdGlvbik7XG4gICAgICAgICAgICBpZiAocHJlZFN1Y2NlZWRzKSB7XG4gICAgICAgICAgICAgICAgYyA9IG5ldyBBVE5Db25maWcoe3N0YXRlOnB0LnRhcmdldH0sIGNvbmZpZyk7IC8vIG5vIHByZWQgY29udGV4dFxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIG5ld1NlbUN0eCA9IFNlbWFudGljQ29udGV4dC5hbmRDb250ZXh0KGNvbmZpZy5zZW1hbnRpY0NvbnRleHQsIHB0LmdldFByZWRpY2F0ZSgpKTtcbiAgICAgICAgICAgIGMgPSBuZXcgQVROQ29uZmlnKHtzdGF0ZTpwdC50YXJnZXQsIHNlbWFudGljQ29udGV4dDpuZXdTZW1DdHh9LCBjb25maWcpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYyA9IG5ldyBBVE5Db25maWcoe3N0YXRlOnB0LnRhcmdldH0sIGNvbmZpZyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiY29uZmlnIGZyb20gcHJlZCB0cmFuc2l0aW9uPVwiICsgYyk7XG4gICAgfVxuICAgIHJldHVybiBjO1xufTtcblxuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5wcmVkVHJhbnNpdGlvbiA9IGZ1bmN0aW9uKGNvbmZpZywgcHQsIGNvbGxlY3RQcmVkaWNhdGVzLCBpbkNvbnRleHQsIGZ1bGxDdHgpIHtcbiAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICBjb25zb2xlLmxvZyhcIlBSRUQgKGNvbGxlY3RQcmVkaWNhdGVzPVwiICsgY29sbGVjdFByZWRpY2F0ZXMgKyBcIikgXCIgKyBwdC5ydWxlSW5kZXggK1xuICAgICAgICAgICAgICAgIFwiOlwiICsgcHQucHJlZEluZGV4ICsgXCIsIGN0eCBkZXBlbmRlbnQ9XCIgKyBwdC5pc0N0eERlcGVuZGVudCk7XG4gICAgICAgIGlmICh0aGlzLnBhcnNlciE9PW51bGwpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiY29udGV4dCBzdXJyb3VuZGluZyBwcmVkIGlzIFwiICsgVXRpbHMuYXJyYXlUb1N0cmluZyh0aGlzLnBhcnNlci5nZXRSdWxlSW52b2NhdGlvblN0YWNrKCkpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgYyA9IG51bGw7XG4gICAgaWYgKGNvbGxlY3RQcmVkaWNhdGVzICYmICgocHQuaXNDdHhEZXBlbmRlbnQgJiYgaW5Db250ZXh0KSB8fCAhIHB0LmlzQ3R4RGVwZW5kZW50KSkge1xuICAgICAgICBpZiAoZnVsbEN0eCkge1xuICAgICAgICAgICAgLy8gSW4gZnVsbCBjb250ZXh0IG1vZGUsIHdlIGNhbiBldmFsdWF0ZSBwcmVkaWNhdGVzIG9uLXRoZS1mbHlcbiAgICAgICAgICAgIC8vIGR1cmluZyBjbG9zdXJlLCB3aGljaCBkcmFtYXRpY2FsbHkgcmVkdWNlcyB0aGUgc2l6ZSBvZlxuICAgICAgICAgICAgLy8gdGhlIGNvbmZpZyBzZXRzLiBJdCBhbHNvIG9idmlhdGVzIHRoZSBuZWVkIHRvIHRlc3QgcHJlZGljYXRlc1xuICAgICAgICAgICAgLy8gbGF0ZXIgZHVyaW5nIGNvbmZsaWN0IHJlc29sdXRpb24uXG4gICAgICAgICAgICB2YXIgY3VycmVudFBvc2l0aW9uID0gdGhpcy5faW5wdXQuaW5kZXg7XG4gICAgICAgICAgICB0aGlzLl9pbnB1dC5zZWVrKHRoaXMuX3N0YXJ0SW5kZXgpO1xuICAgICAgICAgICAgdmFyIHByZWRTdWNjZWVkcyA9IHB0LmdldFByZWRpY2F0ZSgpLmV2YWx1YXRlKHRoaXMucGFyc2VyLCB0aGlzLl9vdXRlckNvbnRleHQpO1xuICAgICAgICAgICAgdGhpcy5faW5wdXQuc2VlayhjdXJyZW50UG9zaXRpb24pO1xuICAgICAgICAgICAgaWYgKHByZWRTdWNjZWVkcykge1xuICAgICAgICAgICAgICAgIGMgPSBuZXcgQVROQ29uZmlnKHtzdGF0ZTpwdC50YXJnZXR9LCBjb25maWcpOyAvLyBubyBwcmVkIGNvbnRleHRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBuZXdTZW1DdHggPSBTZW1hbnRpY0NvbnRleHQuYW5kQ29udGV4dChjb25maWcuc2VtYW50aWNDb250ZXh0LCBwdC5nZXRQcmVkaWNhdGUoKSk7XG4gICAgICAgICAgICBjID0gbmV3IEFUTkNvbmZpZyh7c3RhdGU6cHQudGFyZ2V0LCBzZW1hbnRpY0NvbnRleHQ6bmV3U2VtQ3R4fSwgY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGMgPSBuZXcgQVROQ29uZmlnKHtzdGF0ZTpwdC50YXJnZXR9LCBjb25maWcpO1xuICAgIH1cbiAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICBjb25zb2xlLmxvZyhcImNvbmZpZyBmcm9tIHByZWQgdHJhbnNpdGlvbj1cIiArIGMpO1xuICAgIH1cbiAgICByZXR1cm4gYztcbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUucnVsZVRyYW5zaXRpb24gPSBmdW5jdGlvbihjb25maWcsIHQpIHtcbiAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICBjb25zb2xlLmxvZyhcIkNBTEwgcnVsZSBcIiArIHRoaXMuZ2V0UnVsZU5hbWUodC50YXJnZXQucnVsZUluZGV4KSArIFwiLCBjdHg9XCIgKyBjb25maWcuY29udGV4dCk7XG4gICAgfVxuICAgIHZhciByZXR1cm5TdGF0ZSA9IHQuZm9sbG93U3RhdGU7XG4gICAgdmFyIG5ld0NvbnRleHQgPSBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dC5jcmVhdGUoY29uZmlnLmNvbnRleHQsIHJldHVyblN0YXRlLnN0YXRlTnVtYmVyKTtcbiAgICByZXR1cm4gbmV3IEFUTkNvbmZpZyh7c3RhdGU6dC50YXJnZXQsIGNvbnRleHQ6bmV3Q29udGV4dH0sIGNvbmZpZyApO1xufTtcblxuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5nZXRDb25mbGljdGluZ0FsdHMgPSBmdW5jdGlvbihjb25maWdzKSB7XG4gICAgdmFyIGFsdHNldHMgPSBQcmVkaWN0aW9uTW9kZS5nZXRDb25mbGljdGluZ0FsdFN1YnNldHMoY29uZmlncyk7XG4gICAgcmV0dXJuIFByZWRpY3Rpb25Nb2RlLmdldEFsdHMoYWx0c2V0cyk7XG59O1xuXG4gLy8gU2FtIHBvaW50ZWQgb3V0IGEgcHJvYmxlbSB3aXRoIHRoZSBwcmV2aW91cyBkZWZpbml0aW9uLCB2Mywgb2ZcbiAvLyBhbWJpZ3VvdXMgc3RhdGVzLiBJZiB3ZSBoYXZlIGFub3RoZXIgc3RhdGUgYXNzb2NpYXRlZCB3aXRoIGNvbmZsaWN0aW5nXG4gLy8gYWx0ZXJuYXRpdmVzLCB3ZSBzaG91bGQga2VlcCBnb2luZy4gRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgZ3JhbW1hclxuIC8vXG4gLy8gcyA6IChJRCB8IElEIElEPykgJzsnIDtcbiAvL1xuIC8vIFdoZW4gdGhlIEFUTiBzaW11bGF0aW9uIHJlYWNoZXMgdGhlIHN0YXRlIGJlZm9yZSAnOycsIGl0IGhhcyBhIERGQVxuIC8vIHN0YXRlIHRoYXQgbG9va3MgbGlrZTogWzEyfDF8W10sIDZ8MnxbXSwgMTJ8MnxbXV0uIE5hdHVyYWxseVxuIC8vIDEyfDF8W10gYW5kIDEyfDJ8W10gY29uZmxpY3QsIGJ1dCB3ZSBjYW5ub3Qgc3RvcCBwcm9jZXNzaW5nIHRoaXMgbm9kZVxuIC8vIGJlY2F1c2UgYWx0ZXJuYXRpdmUgdG8gaGFzIGFub3RoZXIgd2F5IHRvIGNvbnRpbnVlLCB2aWEgWzZ8MnxbXV0uXG4gLy8gVGhlIGtleSBpcyB0aGF0IHdlIGhhdmUgYSBzaW5nbGUgc3RhdGUgdGhhdCBoYXMgY29uZmlnJ3Mgb25seSBhc3NvY2lhdGVkXG4gLy8gd2l0aCBhIHNpbmdsZSBhbHRlcm5hdGl2ZSwgMiwgYW5kIGNydWNpYWxseSB0aGUgc3RhdGUgdHJhbnNpdGlvbnNcbiAvLyBhbW9uZyB0aGUgY29uZmlndXJhdGlvbnMgYXJlIGFsbCBub24tZXBzaWxvbiB0cmFuc2l0aW9ucy4gVGhhdCBtZWFuc1xuIC8vIHdlIGRvbid0IGNvbnNpZGVyIGFueSBjb25mbGljdHMgdGhhdCBpbmNsdWRlIGFsdGVybmF0aXZlIDIuIFNvLCB3ZVxuIC8vIGlnbm9yZSB0aGUgY29uZmxpY3QgYmV0d2VlbiBhbHRzIDEgYW5kIDIuIFdlIGlnbm9yZSBhIHNldCBvZlxuIC8vIGNvbmZsaWN0aW5nIGFsdHMgd2hlbiB0aGVyZSBpcyBhbiBpbnRlcnNlY3Rpb24gd2l0aCBhbiBhbHRlcm5hdGl2ZVxuIC8vIGFzc29jaWF0ZWQgd2l0aCBhIHNpbmdsZSBhbHQgc3RhdGUgaW4gdGhlIHN0YXRlJnJhcnI7Y29uZmlnLWxpc3QgbWFwLlxuIC8vXG4gLy8gSXQncyBhbHNvIHRoZSBjYXNlIHRoYXQgd2UgbWlnaHQgaGF2ZSB0d28gY29uZmxpY3RpbmcgY29uZmlndXJhdGlvbnMgYnV0XG4gLy8gYWxzbyBhIDNyZCBub25jb25mbGljdGluZyBjb25maWd1cmF0aW9uIGZvciBhIGRpZmZlcmVudCBhbHRlcm5hdGl2ZTpcbiAvLyBbMXwxfFtdLCAxfDJ8W10sIDh8M3xbXV0uIFRoaXMgY2FuIGNvbWUgYWJvdXQgZnJvbSBncmFtbWFyOlxuIC8vXG4gLy8gYSA6IEEgfCBBIHwgQSBCIDtcbiAvL1xuIC8vIEFmdGVyIG1hdGNoaW5nIGlucHV0IEEsIHdlIHJlYWNoIHRoZSBzdG9wIHN0YXRlIGZvciBydWxlIEEsIHN0YXRlIDEuXG4gLy8gU3RhdGUgOCBpcyB0aGUgc3RhdGUgcmlnaHQgYmVmb3JlIEIuIENsZWFybHkgYWx0ZXJuYXRpdmVzIDEgYW5kIDJcbiAvLyBjb25mbGljdCBhbmQgbm8gYW1vdW50IG9mIGZ1cnRoZXIgbG9va2FoZWFkIHdpbGwgc2VwYXJhdGUgdGhlIHR3by5cbiAvLyBIb3dldmVyLCBhbHRlcm5hdGl2ZSAzIHdpbGwgYmUgYWJsZSB0byBjb250aW51ZSBhbmQgc28gd2UgZG8gbm90XG4gLy8gc3RvcCB3b3JraW5nIG9uIHRoaXMgc3RhdGUuIEluIHRoZSBwcmV2aW91cyBleGFtcGxlLCB3ZSdyZSBjb25jZXJuZWRcbiAvLyB3aXRoIHN0YXRlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbmZsaWN0aW5nIGFsdGVybmF0aXZlcy4gSGVyZSBhbHRcbiAvLyAzIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbmZsaWN0aW5nIGNvbmZpZ3MsIGJ1dCBzaW5jZSB3ZSBjYW4gY29udGludWVcbiAvLyBsb29raW5nIGZvciBpbnB1dCByZWFzb25hYmx5LCBJIGRvbid0IGRlY2xhcmUgdGhlIHN0YXRlIGRvbmUuIFdlXG4gLy8gaWdub3JlIGEgc2V0IG9mIGNvbmZsaWN0aW5nIGFsdHMgd2hlbiB3ZSBoYXZlIGFuIGFsdGVybmF0aXZlXG4gLy8gdGhhdCB3ZSBzdGlsbCBuZWVkIHRvIHB1cnN1ZS5cbi8vXG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0Q29uZmxpY3RpbmdBbHRzT3JVbmlxdWVBbHQgPSBmdW5jdGlvbihjb25maWdzKSB7XG4gICAgdmFyIGNvbmZsaWN0aW5nQWx0cyA9IG51bGw7XG4gICAgaWYgKGNvbmZpZ3MudW5pcXVlQWx0IT09IEFUTi5JTlZBTElEX0FMVF9OVU1CRVIpIHtcbiAgICAgICAgY29uZmxpY3RpbmdBbHRzID0gbmV3IEJpdFNldCgpO1xuICAgICAgICBjb25mbGljdGluZ0FsdHMuYWRkKGNvbmZpZ3MudW5pcXVlQWx0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25mbGljdGluZ0FsdHMgPSBjb25maWdzLmNvbmZsaWN0aW5nQWx0cztcbiAgICB9XG4gICAgcmV0dXJuIGNvbmZsaWN0aW5nQWx0cztcbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0VG9rZW5OYW1lID0gZnVuY3Rpb24oIHQpIHtcbiAgICBpZiAodD09PVRva2VuLkVPRikge1xuICAgICAgICByZXR1cm4gXCJFT0ZcIjtcbiAgICB9XG4gICAgaWYoIHRoaXMucGFyc2VyIT09bnVsbCAmJiB0aGlzLnBhcnNlci5saXRlcmFsTmFtZXMhPT1udWxsKSB7XG4gICAgICAgIGlmICh0ID49IHRoaXMucGFyc2VyLmxpdGVyYWxOYW1lcy5sZW5ndGggJiYgdCA+PSB0aGlzLnBhcnNlci5zeW1ib2xpY05hbWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJcIiArIHQgKyBcIiB0dHlwZSBvdXQgb2YgcmFuZ2U6IFwiICsgdGhpcy5wYXJzZXIubGl0ZXJhbE5hbWVzKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiXCIgKyB0aGlzLnBhcnNlci5nZXRJbnB1dFN0cmVhbSgpLmdldFRva2VucygpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBuYW1lID0gdGhpcy5wYXJzZXIubGl0ZXJhbE5hbWVzW3RdIHx8IHRoaXMucGFyc2VyLnN5bWJvbGljTmFtZXNbdF07XG4gICAgICAgICAgICByZXR1cm4gbmFtZSArIFwiPFwiICsgdCArIFwiPlwiO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBcIlwiICsgdDtcbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0TG9va2FoZWFkTmFtZSA9IGZ1bmN0aW9uKGlucHV0KSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW5OYW1lKGlucHV0LkxBKDEpKTtcbn07XG5cbi8vIFVzZWQgZm9yIGRlYnVnZ2luZyBpbiBhZGFwdGl2ZVByZWRpY3QgYXJvdW5kIGV4ZWNBVE4gYnV0IEkgY3V0XG4vLyAgaXQgb3V0IGZvciBjbGFyaXR5IG5vdyB0aGF0IGFsZy4gd29ya3Mgd2VsbC4gV2UgY2FuIGxlYXZlIHRoaXNcbi8vICBcImRlYWRcIiBjb2RlIGZvciBhIGJpdC5cbi8vXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmR1bXBEZWFkRW5kQ29uZmlncyA9IGZ1bmN0aW9uKG52YWUpIHtcbiAgICBjb25zb2xlLmxvZyhcImRlYWQgZW5kIGNvbmZpZ3M6IFwiKTtcbiAgICB2YXIgZGVjcyA9IG52YWUuZ2V0RGVhZEVuZENvbmZpZ3MoKTtcbiAgICBmb3IodmFyIGk9MDsgaTxkZWNzLmxlbmd0aDsgaSsrKSB7XG4gICAgXHR2YXIgYyA9IGRlY3NbaV07XG4gICAgICAgIHZhciB0cmFucyA9IFwibm8gZWRnZXNcIjtcbiAgICAgICAgaWYgKGMuc3RhdGUudHJhbnNpdGlvbnMubGVuZ3RoPjApIHtcbiAgICAgICAgICAgIHZhciB0ID0gYy5zdGF0ZS50cmFuc2l0aW9uc1swXTtcbiAgICAgICAgICAgIGlmICh0IGluc3RhbmNlb2YgQXRvbVRyYW5zaXRpb24pIHtcbiAgICAgICAgICAgICAgICB0cmFucyA9IFwiQXRvbSBcIisgdGhpcy5nZXRUb2tlbk5hbWUodC5sYWJlbCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHQgaW5zdGFuY2VvZiBTZXRUcmFuc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgdmFyIG5lZyA9ICh0IGluc3RhbmNlb2YgTm90U2V0VHJhbnNpdGlvbik7XG4gICAgICAgICAgICAgICAgdHJhbnMgPSAobmVnID8gXCJ+XCIgOiBcIlwiKSArIFwiU2V0IFwiICsgdC5zZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5lcnJvcihjLnRvU3RyaW5nKHRoaXMucGFyc2VyLCB0cnVlKSArIFwiOlwiICsgdHJhbnMpO1xuICAgIH1cbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUubm9WaWFibGVBbHQgPSBmdW5jdGlvbihpbnB1dCwgb3V0ZXJDb250ZXh0LCBjb25maWdzLCBzdGFydEluZGV4KSB7XG4gICAgcmV0dXJuIG5ldyBOb1ZpYWJsZUFsdEV4Y2VwdGlvbih0aGlzLnBhcnNlciwgaW5wdXQsIGlucHV0LmdldChzdGFydEluZGV4KSwgaW5wdXQuTFQoMSksIGNvbmZpZ3MsIG91dGVyQ29udGV4dCk7XG59O1xuXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmdldFVuaXF1ZUFsdCA9IGZ1bmN0aW9uKGNvbmZpZ3MpIHtcbiAgICB2YXIgYWx0ID0gQVROLklOVkFMSURfQUxUX05VTUJFUjtcbiAgICBmb3IodmFyIGk9MDtpPGNvbmZpZ3MuaXRlbXMubGVuZ3RoO2krKykge1xuICAgIFx0dmFyIGMgPSBjb25maWdzLml0ZW1zW2ldO1xuICAgICAgICBpZiAoYWx0ID09PSBBVE4uSU5WQUxJRF9BTFRfTlVNQkVSKSB7XG4gICAgICAgICAgICBhbHQgPSBjLmFsdCAvLyBmb3VuZCBmaXJzdCBhbHRcbiAgICAgICAgfSBlbHNlIGlmKCBjLmFsdCE9PWFsdCkge1xuICAgICAgICAgICAgcmV0dXJuIEFUTi5JTlZBTElEX0FMVF9OVU1CRVI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFsdDtcbn07XG5cbi8vXG4vLyBBZGQgYW4gZWRnZSB0byB0aGUgREZBLCBpZiBwb3NzaWJsZS4gVGhpcyBtZXRob2QgY2FsbHNcbi8vIHtAbGluayAvL2FkZERGQVN0YXRlfSB0byBlbnN1cmUgdGhlIHtAY29kZSB0b30gc3RhdGUgaXMgcHJlc2VudCBpbiB0aGVcbi8vIERGQS4gSWYge0Bjb2RlIGZyb219IGlzIHtAY29kZSBudWxsfSwgb3IgaWYge0Bjb2RlIHR9IGlzIG91dHNpZGUgdGhlXG4vLyByYW5nZSBvZiBlZGdlcyB0aGF0IGNhbiBiZSByZXByZXNlbnRlZCBpbiB0aGUgREZBIHRhYmxlcywgdGhpcyBtZXRob2Rcbi8vIHJldHVybnMgd2l0aG91dCBhZGRpbmcgdGhlIGVkZ2UgdG8gdGhlIERGQS5cbi8vXG4vLyA8cD5JZiB7QGNvZGUgdG99IGlzIHtAY29kZSBudWxsfSwgdGhpcyBtZXRob2QgcmV0dXJucyB7QGNvZGUgbnVsbH0uXG4vLyBPdGhlcndpc2UsIHRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHtAbGluayBERkFTdGF0ZX0gcmV0dXJuZWQgYnkgY2FsbGluZ1xuLy8ge0BsaW5rIC8vYWRkREZBU3RhdGV9IGZvciB0aGUge0Bjb2RlIHRvfSBzdGF0ZS48L3A+XG4vL1xuLy8gQHBhcmFtIGRmYSBUaGUgREZBXG4vLyBAcGFyYW0gZnJvbSBUaGUgc291cmNlIHN0YXRlIGZvciB0aGUgZWRnZVxuLy8gQHBhcmFtIHQgVGhlIGlucHV0IHN5bWJvbFxuLy8gQHBhcmFtIHRvIFRoZSB0YXJnZXQgc3RhdGUgZm9yIHRoZSBlZGdlXG4vL1xuLy8gQHJldHVybiBJZiB7QGNvZGUgdG99IGlzIHtAY29kZSBudWxsfSwgdGhpcyBtZXRob2QgcmV0dXJucyB7QGNvZGUgbnVsbH07XG4vLyBvdGhlcndpc2UgdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgcmVzdWx0IG9mIGNhbGxpbmcge0BsaW5rIC8vYWRkREZBU3RhdGV9XG4vLyBvbiB7QGNvZGUgdG99XG4vL1xuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5hZGRERkFFZGdlID0gZnVuY3Rpb24oZGZhLCBmcm9tXywgdCwgdG8pIHtcbiAgICBpZiggdGhpcy5kZWJ1Zykge1xuICAgICAgICBjb25zb2xlLmxvZyhcIkVER0UgXCIgKyBmcm9tXyArIFwiIC0+IFwiICsgdG8gKyBcIiB1cG9uIFwiICsgdGhpcy5nZXRUb2tlbk5hbWUodCkpO1xuICAgIH1cbiAgICBpZiAodG89PT1udWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB0byA9IHRoaXMuYWRkREZBU3RhdGUoZGZhLCB0byk7IC8vIHVzZWQgZXhpc3RpbmcgaWYgcG9zc2libGUgbm90IGluY29taW5nXG4gICAgaWYgKGZyb21fPT09bnVsbCB8fCB0IDwgLTEgfHwgdCA+IHRoaXMuYXRuLm1heFRva2VuVHlwZSkge1xuICAgICAgICByZXR1cm4gdG87XG4gICAgfVxuICAgIGlmIChmcm9tXy5lZGdlcz09PW51bGwpIHtcbiAgICAgICAgZnJvbV8uZWRnZXMgPSBbXTtcbiAgICB9XG4gICAgZnJvbV8uZWRnZXNbdCsxXSA9IHRvOyAvLyBjb25uZWN0XG5cbiAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICB2YXIgbGl0ZXJhbE5hbWVzID0gdGhpcy5wYXJzZXI9PT1udWxsID8gbnVsbCA6IHRoaXMucGFyc2VyLmxpdGVyYWxOYW1lcztcbiAgICAgICAgdmFyIHN5bWJvbGljTmFtZXMgPSB0aGlzLnBhcnNlcj09PW51bGwgPyBudWxsIDogdGhpcy5wYXJzZXIuc3ltYm9saWNOYW1lcztcbiAgICAgICAgY29uc29sZS5sb2coXCJERkE9XFxuXCIgKyBkZmEudG9TdHJpbmcobGl0ZXJhbE5hbWVzLCBzeW1ib2xpY05hbWVzKSk7XG4gICAgfVxuICAgIHJldHVybiB0bztcbn07XG4vL1xuLy8gQWRkIHN0YXRlIHtAY29kZSBEfSB0byB0aGUgREZBIGlmIGl0IGlzIG5vdCBhbHJlYWR5IHByZXNlbnQsIGFuZCByZXR1cm5cbi8vIHRoZSBhY3R1YWwgaW5zdGFuY2Ugc3RvcmVkIGluIHRoZSBERkEuIElmIGEgc3RhdGUgZXF1aXZhbGVudCB0byB7QGNvZGUgRH1cbi8vIGlzIGFscmVhZHkgaW4gdGhlIERGQSwgdGhlIGV4aXN0aW5nIHN0YXRlIGlzIHJldHVybmVkLiBPdGhlcndpc2UgdGhpc1xuLy8gbWV0aG9kIHJldHVybnMge0Bjb2RlIER9IGFmdGVyIGFkZGluZyBpdCB0byB0aGUgREZBLlxuLy9cbi8vIDxwPklmIHtAY29kZSBEfSBpcyB7QGxpbmsgLy9FUlJPUn0sIHRoaXMgbWV0aG9kIHJldHVybnMge0BsaW5rIC8vRVJST1J9IGFuZFxuLy8gZG9lcyBub3QgY2hhbmdlIHRoZSBERkEuPC9wPlxuLy9cbi8vIEBwYXJhbSBkZmEgVGhlIGRmYVxuLy8gQHBhcmFtIEQgVGhlIERGQSBzdGF0ZSB0byBhZGRcbi8vIEByZXR1cm4gVGhlIHN0YXRlIHN0b3JlZCBpbiB0aGUgREZBLiBUaGlzIHdpbGwgYmUgZWl0aGVyIHRoZSBleGlzdGluZ1xuLy8gc3RhdGUgaWYge0Bjb2RlIER9IGlzIGFscmVhZHkgaW4gdGhlIERGQSwgb3Ige0Bjb2RlIER9IGl0c2VsZiBpZiB0aGVcbi8vIHN0YXRlIHdhcyBub3QgYWxyZWFkeSBwcmVzZW50LlxuLy9cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuYWRkREZBU3RhdGUgPSBmdW5jdGlvbihkZmEsIEQpIHtcbiAgICBpZiAoRCA9PSBBVE5TaW11bGF0b3IuRVJST1IpIHtcbiAgICAgICAgcmV0dXJuIEQ7XG4gICAgfVxuICAgIHZhciBleGlzdGluZyA9IGRmYS5zdGF0ZXMuZ2V0KEQpO1xuICAgIGlmKGV4aXN0aW5nIT09bnVsbCkge1xuICAgICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfVxuICAgIEQuc3RhdGVOdW1iZXIgPSBkZmEuc3RhdGVzLmxlbmd0aDtcbiAgICBpZiAoISBELmNvbmZpZ3MucmVhZE9ubHkpIHtcbiAgICAgICAgRC5jb25maWdzLm9wdGltaXplQ29uZmlncyh0aGlzKTtcbiAgICAgICAgRC5jb25maWdzLnNldFJlYWRvbmx5KHRydWUpO1xuICAgIH1cbiAgICBkZmEuc3RhdGVzLmFkZChEKTtcbiAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICBjb25zb2xlLmxvZyhcImFkZGluZyBuZXcgREZBIHN0YXRlOiBcIiArIEQpO1xuICAgIH1cbiAgICByZXR1cm4gRDtcbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUucmVwb3J0QXR0ZW1wdGluZ0Z1bGxDb250ZXh0ID0gZnVuY3Rpb24oZGZhLCBjb25mbGljdGluZ0FsdHMsIGNvbmZpZ3MsIHN0YXJ0SW5kZXgsIHN0b3BJbmRleCkge1xuICAgIGlmICh0aGlzLmRlYnVnIHx8IHRoaXMucmV0cnlfZGVidWcpIHtcbiAgICAgICAgdmFyIGludGVydmFsID0gbmV3IEludGVydmFsKHN0YXJ0SW5kZXgsIHN0b3BJbmRleCArIDEpO1xuICAgICAgICBjb25zb2xlLmxvZyhcInJlcG9ydEF0dGVtcHRpbmdGdWxsQ29udGV4dCBkZWNpc2lvbj1cIiArIGRmYS5kZWNpc2lvbiArIFwiOlwiICsgY29uZmlncyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBcIiwgaW5wdXQ9XCIgKyB0aGlzLnBhcnNlci5nZXRUb2tlblN0cmVhbSgpLmdldFRleHQoaW50ZXJ2YWwpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucGFyc2VyIT09bnVsbCkge1xuICAgICAgICB0aGlzLnBhcnNlci5nZXRFcnJvckxpc3RlbmVyRGlzcGF0Y2goKS5yZXBvcnRBdHRlbXB0aW5nRnVsbENvbnRleHQodGhpcy5wYXJzZXIsIGRmYSwgc3RhcnRJbmRleCwgc3RvcEluZGV4LCBjb25mbGljdGluZ0FsdHMsIGNvbmZpZ3MpO1xuICAgIH1cbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUucmVwb3J0Q29udGV4dFNlbnNpdGl2aXR5ID0gZnVuY3Rpb24oZGZhLCBwcmVkaWN0aW9uLCBjb25maWdzLCBzdGFydEluZGV4LCBzdG9wSW5kZXgpIHtcbiAgICBpZiAodGhpcy5kZWJ1ZyB8fCB0aGlzLnJldHJ5X2RlYnVnKSB7XG4gICAgICAgIHZhciBpbnRlcnZhbCA9IG5ldyBJbnRlcnZhbChzdGFydEluZGV4LCBzdG9wSW5kZXggKyAxKTtcbiAgICAgICAgY29uc29sZS5sb2coXCJyZXBvcnRDb250ZXh0U2Vuc2l0aXZpdHkgZGVjaXNpb249XCIgKyBkZmEuZGVjaXNpb24gKyBcIjpcIiArIGNvbmZpZ3MgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIsIGlucHV0PVwiICsgdGhpcy5wYXJzZXIuZ2V0VG9rZW5TdHJlYW0oKS5nZXRUZXh0KGludGVydmFsKSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnBhcnNlciE9PW51bGwpIHtcbiAgICAgICAgdGhpcy5wYXJzZXIuZ2V0RXJyb3JMaXN0ZW5lckRpc3BhdGNoKCkucmVwb3J0Q29udGV4dFNlbnNpdGl2aXR5KHRoaXMucGFyc2VyLCBkZmEsIHN0YXJ0SW5kZXgsIHN0b3BJbmRleCwgcHJlZGljdGlvbiwgY29uZmlncyk7XG4gICAgfVxufTtcblxuLy8gSWYgY29udGV4dCBzZW5zaXRpdmUgcGFyc2luZywgd2Uga25vdyBpdCdzIGFtYmlndWl0eSBub3QgY29uZmxpY3QvL1xuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5yZXBvcnRBbWJpZ3VpdHkgPSBmdW5jdGlvbihkZmEsIEQsIHN0YXJ0SW5kZXgsIHN0b3BJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGFjdCwgYW1iaWdBbHRzLCBjb25maWdzICkge1xuICAgIGlmICh0aGlzLmRlYnVnIHx8IHRoaXMucmV0cnlfZGVidWcpIHtcbiAgICAgICAgdmFyIGludGVydmFsID0gbmV3IEludGVydmFsKHN0YXJ0SW5kZXgsIHN0b3BJbmRleCArIDEpO1xuICAgICAgICBjb25zb2xlLmxvZyhcInJlcG9ydEFtYmlndWl0eSBcIiArIGFtYmlnQWx0cyArIFwiOlwiICsgY29uZmlncyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBcIiwgaW5wdXQ9XCIgKyB0aGlzLnBhcnNlci5nZXRUb2tlblN0cmVhbSgpLmdldFRleHQoaW50ZXJ2YWwpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucGFyc2VyIT09bnVsbCkge1xuICAgICAgICB0aGlzLnBhcnNlci5nZXRFcnJvckxpc3RlbmVyRGlzcGF0Y2goKS5yZXBvcnRBbWJpZ3VpdHkodGhpcy5wYXJzZXIsIGRmYSwgc3RhcnRJbmRleCwgc3RvcEluZGV4LCBleGFjdCwgYW1iaWdBbHRzLCBjb25maWdzKTtcbiAgICB9XG59O1xuXG5leHBvcnRzLlBhcnNlckFUTlNpbXVsYXRvciA9IFBhcnNlckFUTlNpbXVsYXRvcjsiLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy9cbi8vXG4vLyBUaGlzIGVudW1lcmF0aW9uIGRlZmluZXMgdGhlIHByZWRpY3Rpb24gbW9kZXMgYXZhaWxhYmxlIGluIEFOVExSIDQgYWxvbmcgd2l0aFxuLy8gdXRpbGl0eSBtZXRob2RzIGZvciBhbmFseXppbmcgY29uZmlndXJhdGlvbiBzZXRzIGZvciBjb25mbGljdHMgYW5kL29yXG4vLyBhbWJpZ3VpdGllcy5cblxudmFyIFNldCA9IHJlcXVpcmUoJy4vLi4vVXRpbHMnKS5TZXQ7XG52YXIgTWFwID0gcmVxdWlyZSgnLi8uLi9VdGlscycpLk1hcDtcbnZhciBCaXRTZXQgPSByZXF1aXJlKCcuLy4uL1V0aWxzJykuQml0U2V0O1xudmFyIEFsdERpY3QgPSByZXF1aXJlKCcuLy4uL1V0aWxzJykuQWx0RGljdDtcbnZhciBBVE4gPSByZXF1aXJlKCcuL0FUTicpLkFUTjtcbnZhciBSdWxlU3RvcFN0YXRlID0gcmVxdWlyZSgnLi9BVE5TdGF0ZScpLlJ1bGVTdG9wU3RhdGU7XG52YXIgQVROQ29uZmlnU2V0ID0gcmVxdWlyZSgnLi9BVE5Db25maWdTZXQnKS5BVE5Db25maWdTZXQ7XG52YXIgQVROQ29uZmlnID0gcmVxdWlyZSgnLi9BVE5Db25maWcnKS5BVE5Db25maWc7XG52YXIgU2VtYW50aWNDb250ZXh0ID0gcmVxdWlyZSgnLi9TZW1hbnRpY0NvbnRleHQnKS5TZW1hbnRpY0NvbnRleHQ7XG52YXIgSGFzaCA9IHJlcXVpcmUoXCIuLi9VdGlsc1wiKS5IYXNoO1xudmFyIGhhc2hTdHVmZiA9IHJlcXVpcmUoJy4vLi4vVXRpbHMnKS5oYXNoU3R1ZmY7XG52YXIgZXF1YWxBcnJheXMgPSByZXF1aXJlKCcuLy4uL1V0aWxzJykuZXF1YWxBcnJheXM7XG5cbmZ1bmN0aW9uIFByZWRpY3Rpb25Nb2RlKCkge1xuXHRyZXR1cm4gdGhpcztcbn1cblxuLy9cbi8vIFRoZSBTTEwoKikgcHJlZGljdGlvbiBtb2RlLiBUaGlzIHByZWRpY3Rpb24gbW9kZSBpZ25vcmVzIHRoZSBjdXJyZW50XG4vLyBwYXJzZXIgY29udGV4dCB3aGVuIG1ha2luZyBwcmVkaWN0aW9ucy4gVGhpcyBpcyB0aGUgZmFzdGVzdCBwcmVkaWN0aW9uXG4vLyBtb2RlLCBhbmQgcHJvdmlkZXMgY29ycmVjdCByZXN1bHRzIGZvciBtYW55IGdyYW1tYXJzLiBUaGlzIHByZWRpY3Rpb25cbi8vIG1vZGUgaXMgbW9yZSBwb3dlcmZ1bCB0aGFuIHRoZSBwcmVkaWN0aW9uIG1vZGUgcHJvdmlkZWQgYnkgQU5UTFIgMywgYnV0XG4vLyBtYXkgcmVzdWx0IGluIHN5bnRheCBlcnJvcnMgZm9yIGdyYW1tYXIgYW5kIGlucHV0IGNvbWJpbmF0aW9ucyB3aGljaCBhcmVcbi8vIG5vdCBTTEwuXG4vL1xuLy8gPHA+XG4vLyBXaGVuIHVzaW5nIHRoaXMgcHJlZGljdGlvbiBtb2RlLCB0aGUgcGFyc2VyIHdpbGwgZWl0aGVyIHJldHVybiBhIGNvcnJlY3Rcbi8vIHBhcnNlIHRyZWUgKGkuZS4gdGhlIHNhbWUgcGFyc2UgdHJlZSB0aGF0IHdvdWxkIGJlIHJldHVybmVkIHdpdGggdGhlXG4vLyB7QGxpbmsgLy9MTH0gcHJlZGljdGlvbiBtb2RlKSwgb3IgaXQgd2lsbCByZXBvcnQgYSBzeW50YXggZXJyb3IuIElmIGFcbi8vIHN5bnRheCBlcnJvciBpcyBlbmNvdW50ZXJlZCB3aGVuIHVzaW5nIHRoZSB7QGxpbmsgLy9TTEx9IHByZWRpY3Rpb24gbW9kZSxcbi8vIGl0IG1heSBiZSBkdWUgdG8gZWl0aGVyIGFuIGFjdHVhbCBzeW50YXggZXJyb3IgaW4gdGhlIGlucHV0IG9yIGluZGljYXRlXG4vLyB0aGF0IHRoZSBwYXJ0aWN1bGFyIGNvbWJpbmF0aW9uIG9mIGdyYW1tYXIgYW5kIGlucHV0IHJlcXVpcmVzIHRoZSBtb3JlXG4vLyBwb3dlcmZ1bCB7QGxpbmsgLy9MTH0gcHJlZGljdGlvbiBhYmlsaXRpZXMgdG8gY29tcGxldGUgc3VjY2Vzc2Z1bGx5LjwvcD5cbi8vXG4vLyA8cD5cbi8vIFRoaXMgcHJlZGljdGlvbiBtb2RlIGRvZXMgbm90IHByb3ZpZGUgYW55IGd1YXJhbnRlZXMgZm9yIHByZWRpY3Rpb25cbi8vIGJlaGF2aW9yIGZvciBzeW50YWN0aWNhbGx5LWluY29ycmVjdCBpbnB1dHMuPC9wPlxuLy9cblByZWRpY3Rpb25Nb2RlLlNMTCA9IDA7XG4vL1xuLy8gVGhlIExMKCopIHByZWRpY3Rpb24gbW9kZS4gVGhpcyBwcmVkaWN0aW9uIG1vZGUgYWxsb3dzIHRoZSBjdXJyZW50IHBhcnNlclxuLy8gY29udGV4dCB0byBiZSB1c2VkIGZvciByZXNvbHZpbmcgU0xMIGNvbmZsaWN0cyB0aGF0IG9jY3VyIGR1cmluZ1xuLy8gcHJlZGljdGlvbi4gVGhpcyBpcyB0aGUgZmFzdGVzdCBwcmVkaWN0aW9uIG1vZGUgdGhhdCBndWFyYW50ZWVzIGNvcnJlY3Rcbi8vIHBhcnNlIHJlc3VsdHMgZm9yIGFsbCBjb21iaW5hdGlvbnMgb2YgZ3JhbW1hcnMgd2l0aCBzeW50YWN0aWNhbGx5IGNvcnJlY3Rcbi8vIGlucHV0cy5cbi8vXG4vLyA8cD5cbi8vIFdoZW4gdXNpbmcgdGhpcyBwcmVkaWN0aW9uIG1vZGUsIHRoZSBwYXJzZXIgd2lsbCBtYWtlIGNvcnJlY3QgZGVjaXNpb25zXG4vLyBmb3IgYWxsIHN5bnRhY3RpY2FsbHktY29ycmVjdCBncmFtbWFyIGFuZCBpbnB1dCBjb21iaW5hdGlvbnMuIEhvd2V2ZXIsIGluXG4vLyBjYXNlcyB3aGVyZSB0aGUgZ3JhbW1hciBpcyB0cnVseSBhbWJpZ3VvdXMgdGhpcyBwcmVkaWN0aW9uIG1vZGUgbWlnaHQgbm90XG4vLyByZXBvcnQgYSBwcmVjaXNlIGFuc3dlciBmb3IgPGVtPmV4YWN0bHkgd2hpY2g8L2VtPiBhbHRlcm5hdGl2ZXMgYXJlXG4vLyBhbWJpZ3VvdXMuPC9wPlxuLy9cbi8vIDxwPlxuLy8gVGhpcyBwcmVkaWN0aW9uIG1vZGUgZG9lcyBub3QgcHJvdmlkZSBhbnkgZ3VhcmFudGVlcyBmb3IgcHJlZGljdGlvblxuLy8gYmVoYXZpb3IgZm9yIHN5bnRhY3RpY2FsbHktaW5jb3JyZWN0IGlucHV0cy48L3A+XG4vL1xuUHJlZGljdGlvbk1vZGUuTEwgPSAxO1xuLy9cbi8vIFRoZSBMTCgqKSBwcmVkaWN0aW9uIG1vZGUgd2l0aCBleGFjdCBhbWJpZ3VpdHkgZGV0ZWN0aW9uLiBJbiBhZGRpdGlvbiB0b1xuLy8gdGhlIGNvcnJlY3RuZXNzIGd1YXJhbnRlZXMgcHJvdmlkZWQgYnkgdGhlIHtAbGluayAvL0xMfSBwcmVkaWN0aW9uIG1vZGUsXG4vLyB0aGlzIHByZWRpY3Rpb24gbW9kZSBpbnN0cnVjdHMgdGhlIHByZWRpY3Rpb24gYWxnb3JpdGhtIHRvIGRldGVybWluZSB0aGVcbi8vIGNvbXBsZXRlIGFuZCBleGFjdCBzZXQgb2YgYW1iaWd1b3VzIGFsdGVybmF0aXZlcyBmb3IgZXZlcnkgYW1iaWd1b3VzXG4vLyBkZWNpc2lvbiBlbmNvdW50ZXJlZCB3aGlsZSBwYXJzaW5nLlxuLy9cbi8vIDxwPlxuLy8gVGhpcyBwcmVkaWN0aW9uIG1vZGUgbWF5IGJlIHVzZWQgZm9yIGRpYWdub3NpbmcgYW1iaWd1aXRpZXMgZHVyaW5nXG4vLyBncmFtbWFyIGRldmVsb3BtZW50LiBEdWUgdG8gdGhlIHBlcmZvcm1hbmNlIG92ZXJoZWFkIG9mIGNhbGN1bGF0aW5nIHNldHNcbi8vIG9mIGFtYmlndW91cyBhbHRlcm5hdGl2ZXMsIHRoaXMgcHJlZGljdGlvbiBtb2RlIHNob3VsZCBiZSBhdm9pZGVkIHdoZW5cbi8vIHRoZSBleGFjdCByZXN1bHRzIGFyZSBub3QgbmVjZXNzYXJ5LjwvcD5cbi8vXG4vLyA8cD5cbi8vIFRoaXMgcHJlZGljdGlvbiBtb2RlIGRvZXMgbm90IHByb3ZpZGUgYW55IGd1YXJhbnRlZXMgZm9yIHByZWRpY3Rpb25cbi8vIGJlaGF2aW9yIGZvciBzeW50YWN0aWNhbGx5LWluY29ycmVjdCBpbnB1dHMuPC9wPlxuLy9cblByZWRpY3Rpb25Nb2RlLkxMX0VYQUNUX0FNQklHX0RFVEVDVElPTiA9IDI7XG5cblxuLy9cbi8vIENvbXB1dGVzIHRoZSBTTEwgcHJlZGljdGlvbiB0ZXJtaW5hdGlvbiBjb25kaXRpb24uXG4vL1xuLy8gPHA+XG4vLyBUaGlzIG1ldGhvZCBjb21wdXRlcyB0aGUgU0xMIHByZWRpY3Rpb24gdGVybWluYXRpb24gY29uZGl0aW9uIGZvciBib3RoIG9mXG4vLyB0aGUgZm9sbG93aW5nIGNhc2VzLjwvcD5cbi8vXG4vLyA8dWw+XG4vLyA8bGk+VGhlIHVzdWFsIFNMTCtMTCBmYWxsYmFjayB1cG9uIFNMTCBjb25mbGljdDwvbGk+XG4vLyA8bGk+UHVyZSBTTEwgd2l0aG91dCBMTCBmYWxsYmFjazwvbGk+XG4vLyA8L3VsPlxuLy9cbi8vIDxwPjxzdHJvbmc+Q09NQklORUQgU0xMK0xMIFBBUlNJTkc8L3N0cm9uZz48L3A+XG4vL1xuLy8gPHA+V2hlbiBMTC1mYWxsYmFjayBpcyBlbmFibGVkIHVwb24gU0xMIGNvbmZsaWN0LCBjb3JyZWN0IHByZWRpY3Rpb25zIGFyZVxuLy8gZW5zdXJlZCByZWdhcmRsZXNzIG9mIGhvdyB0aGUgdGVybWluYXRpb24gY29uZGl0aW9uIGlzIGNvbXB1dGVkIGJ5IHRoaXNcbi8vIG1ldGhvZC4gRHVlIHRvIHRoZSBzdWJzdGFudGlhbGx5IGhpZ2hlciBjb3N0IG9mIExMIHByZWRpY3Rpb24sIHRoZVxuLy8gcHJlZGljdGlvbiBzaG91bGQgb25seSBmYWxsIGJhY2sgdG8gTEwgd2hlbiB0aGUgYWRkaXRpb25hbCBsb29rYWhlYWRcbi8vIGNhbm5vdCBsZWFkIHRvIGEgdW5pcXVlIFNMTCBwcmVkaWN0aW9uLjwvcD5cbi8vXG4vLyA8cD5Bc3N1bWluZyBjb21iaW5lZCBTTEwrTEwgcGFyc2luZywgYW4gU0xMIGNvbmZpZ3VyYXRpb24gc2V0IHdpdGggb25seVxuLy8gY29uZmxpY3Rpbmcgc3Vic2V0cyBzaG91bGQgZmFsbCBiYWNrIHRvIGZ1bGwgTEwsIGV2ZW4gaWYgdGhlXG4vLyBjb25maWd1cmF0aW9uIHNldHMgZG9uJ3QgcmVzb2x2ZSB0byB0aGUgc2FtZSBhbHRlcm5hdGl2ZSAoZS5nLlxuLy8ge0Bjb2RlIHsxLDJ9fSBhbmQge0Bjb2RlIHszLDR9fS4gSWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIG5vbi1jb25mbGljdGluZ1xuLy8gY29uZmlndXJhdGlvbiwgU0xMIGNvdWxkIGNvbnRpbnVlIHdpdGggdGhlIGhvcGVzIHRoYXQgbW9yZSBsb29rYWhlYWQgd2lsbFxuLy8gcmVzb2x2ZSB2aWEgb25lIG9mIHRob3NlIG5vbi1jb25mbGljdGluZyBjb25maWd1cmF0aW9ucy48L3A+XG4vL1xuLy8gPHA+SGVyZSdzIHRoZSBwcmVkaWN0aW9uIHRlcm1pbmF0aW9uIHJ1bGUgdGhlbTogU0xMIChmb3IgU0xMK0xMIHBhcnNpbmcpXG4vLyBzdG9wcyB3aGVuIGl0IHNlZXMgb25seSBjb25mbGljdGluZyBjb25maWd1cmF0aW9uIHN1YnNldHMuIEluIGNvbnRyYXN0LFxuLy8gZnVsbCBMTCBrZWVwcyBnb2luZyB3aGVuIHRoZXJlIGlzIHVuY2VydGFpbnR5LjwvcD5cbi8vXG4vLyA8cD48c3Ryb25nPkhFVVJJU1RJQzwvc3Ryb25nPjwvcD5cbi8vXG4vLyA8cD5BcyBhIGhldXJpc3RpYywgd2Ugc3RvcCBwcmVkaWN0aW9uIHdoZW4gd2Ugc2VlIGFueSBjb25mbGljdGluZyBzdWJzZXRcbi8vIHVubGVzcyB3ZSBzZWUgYSBzdGF0ZSB0aGF0IG9ubHkgaGFzIG9uZSBhbHRlcm5hdGl2ZSBhc3NvY2lhdGVkIHdpdGggaXQuXG4vLyBUaGUgc2luZ2xlLWFsdC1zdGF0ZSB0aGluZyBsZXRzIHByZWRpY3Rpb24gY29udGludWUgdXBvbiBydWxlcyBsaWtlXG4vLyAob3RoZXJ3aXNlLCBpdCB3b3VsZCBhZG1pdCBkZWZlYXQgdG9vIHNvb24pOjwvcD5cbi8vXG4vLyA8cD57QGNvZGUgWzEyfDF8W10sIDZ8MnxbXSwgMTJ8MnxbXV0uIHMgOiAoSUQgfCBJRCBJRD8pICc7JyA7fTwvcD5cbi8vXG4vLyA8cD5XaGVuIHRoZSBBVE4gc2ltdWxhdGlvbiByZWFjaGVzIHRoZSBzdGF0ZSBiZWZvcmUge0Bjb2RlICc7J30sIGl0IGhhcyBhXG4vLyBERkEgc3RhdGUgdGhhdCBsb29rcyBsaWtlOiB7QGNvZGUgWzEyfDF8W10sIDZ8MnxbXSwgMTJ8MnxbXV19LiBOYXR1cmFsbHlcbi8vIHtAY29kZSAxMnwxfFtdfSBhbmQge0Bjb2RlIDEyfDJ8W119IGNvbmZsaWN0LCBidXQgd2UgY2Fubm90IHN0b3Bcbi8vIHByb2Nlc3NpbmcgdGhpcyBub2RlIGJlY2F1c2UgYWx0ZXJuYXRpdmUgdG8gaGFzIGFub3RoZXIgd2F5IHRvIGNvbnRpbnVlLFxuLy8gdmlhIHtAY29kZSBbNnwyfFtdXX0uPC9wPlxuLy9cbi8vIDxwPkl0IGFsc28gbGV0J3MgdXMgY29udGludWUgZm9yIHRoaXMgcnVsZTo8L3A+XG4vL1xuLy8gPHA+e0Bjb2RlIFsxfDF8W10sIDF8MnxbXSwgOHwzfFtdXSBhIDogQSB8IEEgfCBBIEIgO308L3A+XG4vL1xuLy8gPHA+QWZ0ZXIgbWF0Y2hpbmcgaW5wdXQgQSwgd2UgcmVhY2ggdGhlIHN0b3Agc3RhdGUgZm9yIHJ1bGUgQSwgc3RhdGUgMS5cbi8vIFN0YXRlIDggaXMgdGhlIHN0YXRlIHJpZ2h0IGJlZm9yZSBCLiBDbGVhcmx5IGFsdGVybmF0aXZlcyAxIGFuZCAyXG4vLyBjb25mbGljdCBhbmQgbm8gYW1vdW50IG9mIGZ1cnRoZXIgbG9va2FoZWFkIHdpbGwgc2VwYXJhdGUgdGhlIHR3by5cbi8vIEhvd2V2ZXIsIGFsdGVybmF0aXZlIDMgd2lsbCBiZSBhYmxlIHRvIGNvbnRpbnVlIGFuZCBzbyB3ZSBkbyBub3Qgc3RvcFxuLy8gd29ya2luZyBvbiB0aGlzIHN0YXRlLiBJbiB0aGUgcHJldmlvdXMgZXhhbXBsZSwgd2UncmUgY29uY2VybmVkIHdpdGhcbi8vIHN0YXRlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbmZsaWN0aW5nIGFsdGVybmF0aXZlcy4gSGVyZSBhbHQgMyBpcyBub3Rcbi8vIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29uZmxpY3RpbmcgY29uZmlncywgYnV0IHNpbmNlIHdlIGNhbiBjb250aW51ZVxuLy8gbG9va2luZyBmb3IgaW5wdXQgcmVhc29uYWJseSwgZG9uJ3QgZGVjbGFyZSB0aGUgc3RhdGUgZG9uZS48L3A+XG4vL1xuLy8gPHA+PHN0cm9uZz5QVVJFIFNMTCBQQVJTSU5HPC9zdHJvbmc+PC9wPlxuLy9cbi8vIDxwPlRvIGhhbmRsZSBwdXJlIFNMTCBwYXJzaW5nLCBhbGwgd2UgaGF2ZSB0byBkbyBpcyBtYWtlIHN1cmUgdGhhdCB3ZVxuLy8gY29tYmluZSBzdGFjayBjb250ZXh0cyBmb3IgY29uZmlndXJhdGlvbnMgdGhhdCBkaWZmZXIgb25seSBieSBzZW1hbnRpY1xuLy8gcHJlZGljYXRlLiBGcm9tIHRoZXJlLCB3ZSBjYW4gZG8gdGhlIHVzdWFsIFNMTCB0ZXJtaW5hdGlvbiBoZXVyaXN0aWMuPC9wPlxuLy9cbi8vIDxwPjxzdHJvbmc+UFJFRElDQVRFUyBJTiBTTEwrTEwgUEFSU0lORzwvc3Ryb25nPjwvcD5cbi8vXG4vLyA8cD5TTEwgZGVjaXNpb25zIGRvbid0IGV2YWx1YXRlIHByZWRpY2F0ZXMgdW50aWwgYWZ0ZXIgdGhleSByZWFjaCBERkEgc3RvcFxuLy8gc3RhdGVzIGJlY2F1c2UgdGhleSBuZWVkIHRvIGNyZWF0ZSB0aGUgREZBIGNhY2hlIHRoYXQgd29ya3MgaW4gYWxsXG4vLyBzZW1hbnRpYyBzaXR1YXRpb25zLiBJbiBjb250cmFzdCwgZnVsbCBMTCBldmFsdWF0ZXMgcHJlZGljYXRlcyBjb2xsZWN0ZWRcbi8vIGR1cmluZyBzdGFydCBzdGF0ZSBjb21wdXRhdGlvbiBzbyBpdCBjYW4gaWdub3JlIHByZWRpY2F0ZXMgdGhlcmVhZnRlci5cbi8vIFRoaXMgbWVhbnMgdGhhdCBTTEwgdGVybWluYXRpb24gZGV0ZWN0aW9uIGNhbiB0b3RhbGx5IGlnbm9yZSBzZW1hbnRpY1xuLy8gcHJlZGljYXRlcy48L3A+XG4vL1xuLy8gPHA+SW1wbGVtZW50YXRpb24td2lzZSwge0BsaW5rIEFUTkNvbmZpZ1NldH0gY29tYmluZXMgc3RhY2sgY29udGV4dHMgYnV0IG5vdFxuLy8gc2VtYW50aWMgcHJlZGljYXRlIGNvbnRleHRzIHNvIHdlIG1pZ2h0IHNlZSB0d28gY29uZmlndXJhdGlvbnMgbGlrZSB0aGVcbi8vIGZvbGxvd2luZy48L3A+XG4vL1xuLy8gPHA+e0Bjb2RlIChzLCAxLCB4LCB7fSksIChzLCAxLCB4Jywge3B9KX08L3A+XG4vL1xuLy8gPHA+QmVmb3JlIHRlc3RpbmcgdGhlc2UgY29uZmlndXJhdGlvbnMgYWdhaW5zdCBvdGhlcnMsIHdlIGhhdmUgdG8gbWVyZ2Vcbi8vIHtAY29kZSB4fSBhbmQge0Bjb2RlIHgnfSAod2l0aG91dCBtb2RpZnlpbmcgdGhlIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb25zKS5cbi8vIEZvciBleGFtcGxlLCB3ZSB0ZXN0IHtAY29kZSAoeCt4Jyk9PXgnJ30gd2hlbiBsb29raW5nIGZvciBjb25mbGljdHMgaW5cbi8vIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbnMuPC9wPlxuLy9cbi8vIDxwPntAY29kZSAocywgMSwgeCwge30pLCAocywgMSwgeCcsIHtwfSksIChzLCAyLCB4JycsIHt9KX08L3A+XG4vL1xuLy8gPHA+SWYgdGhlIGNvbmZpZ3VyYXRpb24gc2V0IGhhcyBwcmVkaWNhdGVzIChhcyBpbmRpY2F0ZWQgYnlcbi8vIHtAbGluayBBVE5Db25maWdTZXQvL2hhc1NlbWFudGljQ29udGV4dH0pLCB0aGlzIGFsZ29yaXRobSBtYWtlcyBhIGNvcHkgb2Zcbi8vIHRoZSBjb25maWd1cmF0aW9ucyB0byBzdHJpcCBvdXQgYWxsIG9mIHRoZSBwcmVkaWNhdGVzIHNvIHRoYXQgYSBzdGFuZGFyZFxuLy8ge0BsaW5rIEFUTkNvbmZpZ1NldH0gd2lsbCBtZXJnZSBldmVyeXRoaW5nIGlnbm9yaW5nIHByZWRpY2F0ZXMuPC9wPlxuLy9cblByZWRpY3Rpb25Nb2RlLmhhc1NMTENvbmZsaWN0VGVybWluYXRpbmdQcmVkaWN0aW9uID0gZnVuY3Rpb24oIG1vZGUsIGNvbmZpZ3MpIHtcbiAgICAvLyBDb25maWdzIGluIHJ1bGUgc3RvcCBzdGF0ZXMgaW5kaWNhdGUgcmVhY2hpbmcgdGhlIGVuZCBvZiB0aGUgZGVjaXNpb25cbiAgICAvLyBydWxlIChsb2NhbCBjb250ZXh0KSBvciBlbmQgb2Ygc3RhcnQgcnVsZSAoZnVsbCBjb250ZXh0KS4gSWYgYWxsXG4gICAgLy8gY29uZmlncyBtZWV0IHRoaXMgY29uZGl0aW9uLCB0aGVuIG5vbmUgb2YgdGhlIGNvbmZpZ3VyYXRpb25zIGlzIGFibGVcbiAgICAvLyB0byBtYXRjaCBhZGRpdGlvbmFsIGlucHV0IHNvIHdlIHRlcm1pbmF0ZSBwcmVkaWN0aW9uLlxuICAgIC8vXG4gICAgaWYgKFByZWRpY3Rpb25Nb2RlLmFsbENvbmZpZ3NJblJ1bGVTdG9wU3RhdGVzKGNvbmZpZ3MpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICAvLyBwdXJlIFNMTCBtb2RlIHBhcnNpbmdcbiAgICBpZiAobW9kZSA9PT0gUHJlZGljdGlvbk1vZGUuU0xMKSB7XG4gICAgICAgIC8vIERvbid0IGJvdGhlciB3aXRoIGNvbWJpbmluZyBjb25maWdzIGZyb20gZGlmZmVyZW50IHNlbWFudGljXG4gICAgICAgIC8vIGNvbnRleHRzIGlmIHdlIGNhbiBmYWlsIG92ZXIgdG8gZnVsbCBMTDsgY29zdHMgbW9yZSB0aW1lXG4gICAgICAgIC8vIHNpbmNlIHdlJ2xsIG9mdGVuIGZhaWwgb3ZlciBhbnl3YXkuXG4gICAgICAgIGlmIChjb25maWdzLmhhc1NlbWFudGljQ29udGV4dCkge1xuICAgICAgICAgICAgLy8gZHVwIGNvbmZpZ3MsIHRvc3Npbmcgb3V0IHNlbWFudGljIHByZWRpY2F0ZXNcbiAgICAgICAgICAgIHZhciBkdXAgPSBuZXcgQVROQ29uZmlnU2V0KCk7XG4gICAgICAgICAgICBmb3IodmFyIGk9MDtpPGNvbmZpZ3MuaXRlbXMubGVuZ3RoO2krKykge1xuICAgICAgICAgICAgXHR2YXIgYyA9IGNvbmZpZ3MuaXRlbXNbaV07XG4gICAgICAgICAgICAgICAgYyA9IG5ldyBBVE5Db25maWcoe3NlbWFudGljQ29udGV4dDpTZW1hbnRpY0NvbnRleHQuTk9ORX0sIGMpO1xuICAgICAgICAgICAgICAgIGR1cC5hZGQoYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25maWdzID0gZHVwO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5vdyB3ZSBoYXZlIGNvbWJpbmVkIGNvbnRleHRzIGZvciBjb25maWdzIHdpdGggZGlzc2ltaWxhciBwcmVkc1xuICAgIH1cbiAgICAvLyBwdXJlIFNMTCBvciBjb21iaW5lZCBTTEwrTEwgbW9kZSBwYXJzaW5nXG4gICAgdmFyIGFsdHNldHMgPSBQcmVkaWN0aW9uTW9kZS5nZXRDb25mbGljdGluZ0FsdFN1YnNldHMoY29uZmlncyk7XG4gICAgcmV0dXJuIFByZWRpY3Rpb25Nb2RlLmhhc0NvbmZsaWN0aW5nQWx0U2V0KGFsdHNldHMpICYmICFQcmVkaWN0aW9uTW9kZS5oYXNTdGF0ZUFzc29jaWF0ZWRXaXRoT25lQWx0KGNvbmZpZ3MpO1xufTtcblxuLy8gQ2hlY2tzIGlmIGFueSBjb25maWd1cmF0aW9uIGluIHtAY29kZSBjb25maWdzfSBpcyBpbiBhXG4vLyB7QGxpbmsgUnVsZVN0b3BTdGF0ZX0uIENvbmZpZ3VyYXRpb25zIG1lZXRpbmcgdGhpcyBjb25kaXRpb24gaGF2ZSByZWFjaGVkXG4vLyB0aGUgZW5kIG9mIHRoZSBkZWNpc2lvbiBydWxlIChsb2NhbCBjb250ZXh0KSBvciBlbmQgb2Ygc3RhcnQgcnVsZSAoZnVsbFxuLy8gY29udGV4dCkuXG4vL1xuLy8gQHBhcmFtIGNvbmZpZ3MgdGhlIGNvbmZpZ3VyYXRpb24gc2V0IHRvIHRlc3Rcbi8vIEByZXR1cm4ge0Bjb2RlIHRydWV9IGlmIGFueSBjb25maWd1cmF0aW9uIGluIHtAY29kZSBjb25maWdzfSBpcyBpbiBhXG4vLyB7QGxpbmsgUnVsZVN0b3BTdGF0ZX0sIG90aGVyd2lzZSB7QGNvZGUgZmFsc2V9XG5QcmVkaWN0aW9uTW9kZS5oYXNDb25maWdJblJ1bGVTdG9wU3RhdGUgPSBmdW5jdGlvbihjb25maWdzKSB7XG5cdGZvcih2YXIgaT0wO2k8Y29uZmlncy5pdGVtcy5sZW5ndGg7aSsrKSB7XG5cdFx0dmFyIGMgPSBjb25maWdzLml0ZW1zW2ldO1xuICAgICAgICBpZiAoYy5zdGF0ZSBpbnN0YW5jZW9mIFJ1bGVTdG9wU3RhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cdH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vLyBDaGVja3MgaWYgYWxsIGNvbmZpZ3VyYXRpb25zIGluIHtAY29kZSBjb25maWdzfSBhcmUgaW4gYVxuLy8ge0BsaW5rIFJ1bGVTdG9wU3RhdGV9LiBDb25maWd1cmF0aW9ucyBtZWV0aW5nIHRoaXMgY29uZGl0aW9uIGhhdmUgcmVhY2hlZFxuLy8gdGhlIGVuZCBvZiB0aGUgZGVjaXNpb24gcnVsZSAobG9jYWwgY29udGV4dCkgb3IgZW5kIG9mIHN0YXJ0IHJ1bGUgKGZ1bGxcbi8vIGNvbnRleHQpLlxuLy9cbi8vIEBwYXJhbSBjb25maWdzIHRoZSBjb25maWd1cmF0aW9uIHNldCB0byB0ZXN0XG4vLyBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiBhbGwgY29uZmlndXJhdGlvbnMgaW4ge0Bjb2RlIGNvbmZpZ3N9IGFyZSBpbiBhXG4vLyB7QGxpbmsgUnVsZVN0b3BTdGF0ZX0sIG90aGVyd2lzZSB7QGNvZGUgZmFsc2V9XG5QcmVkaWN0aW9uTW9kZS5hbGxDb25maWdzSW5SdWxlU3RvcFN0YXRlcyA9IGZ1bmN0aW9uKGNvbmZpZ3MpIHtcblx0Zm9yKHZhciBpPTA7aTxjb25maWdzLml0ZW1zLmxlbmd0aDtpKyspIHtcblx0XHR2YXIgYyA9IGNvbmZpZ3MuaXRlbXNbaV07XG4gICAgICAgIGlmICghKGMuc3RhdGUgaW5zdGFuY2VvZiBSdWxlU3RvcFN0YXRlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cdH1cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8vXG4vLyBGdWxsIExMIHByZWRpY3Rpb24gdGVybWluYXRpb24uXG4vL1xuLy8gPHA+Q2FuIHdlIHN0b3AgbG9va2luZyBhaGVhZCBkdXJpbmcgQVROIHNpbXVsYXRpb24gb3IgaXMgdGhlcmUgc29tZVxuLy8gdW5jZXJ0YWludHkgYXMgdG8gd2hpY2ggYWx0ZXJuYXRpdmUgd2Ugd2lsbCB1bHRpbWF0ZWx5IHBpY2ssIGFmdGVyXG4vLyBjb25zdW1pbmcgbW9yZSBpbnB1dD8gRXZlbiBpZiB0aGVyZSBhcmUgcGFydGlhbCBjb25mbGljdHMsIHdlIG1pZ2h0IGtub3dcbi8vIHRoYXQgZXZlcnl0aGluZyBpcyBnb2luZyB0byByZXNvbHZlIHRvIHRoZSBzYW1lIG1pbmltdW0gYWx0ZXJuYXRpdmUuIFRoYXRcbi8vIG1lYW5zIHdlIGNhbiBzdG9wIHNpbmNlIG5vIG1vcmUgbG9va2FoZWFkIHdpbGwgY2hhbmdlIHRoYXQgZmFjdC4gT24gdGhlXG4vLyBvdGhlciBoYW5kLCB0aGVyZSBtaWdodCBiZSBtdWx0aXBsZSBjb25mbGljdHMgdGhhdCByZXNvbHZlIHRvIGRpZmZlcmVudFxuLy8gbWluaW11bXMuIFRoYXQgbWVhbnMgd2UgbmVlZCBtb3JlIGxvb2sgYWhlYWQgdG8gZGVjaWRlIHdoaWNoIG9mIHRob3NlXG4vLyBhbHRlcm5hdGl2ZXMgd2Ugc2hvdWxkIHByZWRpY3QuPC9wPlxuLy9cbi8vIDxwPlRoZSBiYXNpYyBpZGVhIGlzIHRvIHNwbGl0IHRoZSBzZXQgb2YgY29uZmlndXJhdGlvbnMge0Bjb2RlIEN9LCBpbnRvXG4vLyBjb25mbGljdGluZyBzdWJzZXRzIHtAY29kZSAocywgXywgY3R4LCBfKX0gYW5kIHNpbmdsZXRvbiBzdWJzZXRzIHdpdGhcbi8vIG5vbi1jb25mbGljdGluZyBjb25maWd1cmF0aW9ucy4gVHdvIGNvbmZpZ3VyYXRpb25zIGNvbmZsaWN0IGlmIHRoZXkgaGF2ZVxuLy8gaWRlbnRpY2FsIHtAbGluayBBVE5Db25maWcvL3N0YXRlfSBhbmQge0BsaW5rIEFUTkNvbmZpZy8vY29udGV4dH0gdmFsdWVzXG4vLyBidXQgZGlmZmVyZW50IHtAbGluayBBVE5Db25maWcvL2FsdH0gdmFsdWUsIGUuZy4ge0Bjb2RlIChzLCBpLCBjdHgsIF8pfVxuLy8gYW5kIHtAY29kZSAocywgaiwgY3R4LCBfKX0gZm9yIHtAY29kZSBpIT1qfS48L3A+XG4vL1xuLy8gPHA+UmVkdWNlIHRoZXNlIGNvbmZpZ3VyYXRpb24gc3Vic2V0cyB0byB0aGUgc2V0IG9mIHBvc3NpYmxlIGFsdGVybmF0aXZlcy5cbi8vIFlvdSBjYW4gY29tcHV0ZSB0aGUgYWx0ZXJuYXRpdmUgc3Vic2V0cyBpbiBvbmUgcGFzcyBhcyBmb2xsb3dzOjwvcD5cbi8vXG4vLyA8cD57QGNvZGUgQV9zLGN0eCA9IHtpIHwgKHMsIGksIGN0eCwgXyl9fSBmb3IgZWFjaCBjb25maWd1cmF0aW9uIGluXG4vLyB7QGNvZGUgQ30gaG9sZGluZyB7QGNvZGUgc30gYW5kIHtAY29kZSBjdHh9IGZpeGVkLjwvcD5cbi8vXG4vLyA8cD5PciBpbiBwc2V1ZG8tY29kZSwgZm9yIGVhY2ggY29uZmlndXJhdGlvbiB7QGNvZGUgY30gaW4ge0Bjb2RlIEN9OjwvcD5cbi8vXG4vLyA8cHJlPlxuLy8gbWFwW2NdIFU9IGMue0BsaW5rIEFUTkNvbmZpZy8vYWx0IGFsdH0gLy8gbWFwIGhhc2gvZXF1YWxzIHVzZXMgcyBhbmQgeCwgbm90XG4vLyBhbHQgYW5kIG5vdCBwcmVkXG4vLyA8L3ByZT5cbi8vXG4vLyA8cD5UaGUgdmFsdWVzIGluIHtAY29kZSBtYXB9IGFyZSB0aGUgc2V0IG9mIHtAY29kZSBBX3MsY3R4fSBzZXRzLjwvcD5cbi8vXG4vLyA8cD5JZiB7QGNvZGUgfEFfcyxjdHh8PTF9IHRoZW4gdGhlcmUgaXMgbm8gY29uZmxpY3QgYXNzb2NpYXRlZCB3aXRoXG4vLyB7QGNvZGUgc30gYW5kIHtAY29kZSBjdHh9LjwvcD5cbi8vXG4vLyA8cD5SZWR1Y2UgdGhlIHN1YnNldHMgdG8gc2luZ2xldG9ucyBieSBjaG9vc2luZyBhIG1pbmltdW0gb2YgZWFjaCBzdWJzZXQuIElmXG4vLyB0aGUgdW5pb24gb2YgdGhlc2UgYWx0ZXJuYXRpdmUgc3Vic2V0cyBpcyBhIHNpbmdsZXRvbiwgdGhlbiBubyBhbW91bnQgb2Zcbi8vIG1vcmUgbG9va2FoZWFkIHdpbGwgaGVscCB1cy4gV2Ugd2lsbCBhbHdheXMgcGljayB0aGF0IGFsdGVybmF0aXZlLiBJZixcbi8vIGhvd2V2ZXIsIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgYWx0ZXJuYXRpdmUsIHRoZW4gd2UgYXJlIHVuY2VydGFpbiB3aGljaFxuLy8gYWx0ZXJuYXRpdmUgdG8gcHJlZGljdCBhbmQgbXVzdCBjb250aW51ZSBsb29raW5nIGZvciByZXNvbHV0aW9uLiBXZSBtYXlcbi8vIG9yIG1heSBub3QgZGlzY292ZXIgYW4gYW1iaWd1aXR5IGluIHRoZSBmdXR1cmUsIGV2ZW4gaWYgdGhlcmUgYXJlIG5vXG4vLyBjb25mbGljdGluZyBzdWJzZXRzIHRoaXMgcm91bmQuPC9wPlxuLy9cbi8vIDxwPlRoZSBiaWdnZXN0IHNpbiBpcyB0byB0ZXJtaW5hdGUgZWFybHkgYmVjYXVzZSBpdCBtZWFucyB3ZSd2ZSBtYWRlIGFcbi8vIGRlY2lzaW9uIGJ1dCB3ZXJlIHVuY2VydGFpbiBhcyB0byB0aGUgZXZlbnR1YWwgb3V0Y29tZS4gV2UgaGF2ZW4ndCB1c2VkXG4vLyBlbm91Z2ggbG9va2FoZWFkLiBPbiB0aGUgb3RoZXIgaGFuZCwgYW5ub3VuY2luZyBhIGNvbmZsaWN0IHRvbyBsYXRlIGlzIG5vXG4vLyBiaWcgZGVhbDsgeW91IHdpbGwgc3RpbGwgaGF2ZSB0aGUgY29uZmxpY3QuIEl0J3MganVzdCBpbmVmZmljaWVudC4gSXRcbi8vIG1pZ2h0IGV2ZW4gbG9vayB1bnRpbCB0aGUgZW5kIG9mIGZpbGUuPC9wPlxuLy9cbi8vIDxwPk5vIHNwZWNpYWwgY29uc2lkZXJhdGlvbiBmb3Igc2VtYW50aWMgcHJlZGljYXRlcyBpcyByZXF1aXJlZCBiZWNhdXNlXG4vLyBwcmVkaWNhdGVzIGFyZSBldmFsdWF0ZWQgb24tdGhlLWZseSBmb3IgZnVsbCBMTCBwcmVkaWN0aW9uLCBlbnN1cmluZyB0aGF0XG4vLyBubyBjb25maWd1cmF0aW9uIGNvbnRhaW5zIGEgc2VtYW50aWMgY29udGV4dCBkdXJpbmcgdGhlIHRlcm1pbmF0aW9uXG4vLyBjaGVjay48L3A+XG4vL1xuLy8gPHA+PHN0cm9uZz5DT05GTElDVElORyBDT05GSUdTPC9zdHJvbmc+PC9wPlxuLy9cbi8vIDxwPlR3byBjb25maWd1cmF0aW9ucyB7QGNvZGUgKHMsIGksIHgpfSBhbmQge0Bjb2RlIChzLCBqLCB4Jyl9LCBjb25mbGljdFxuLy8gd2hlbiB7QGNvZGUgaSE9an0gYnV0IHtAY29kZSB4PXgnfS4gQmVjYXVzZSB3ZSBtZXJnZSBhbGxcbi8vIHtAY29kZSAocywgaSwgXyl9IGNvbmZpZ3VyYXRpb25zIHRvZ2V0aGVyLCB0aGF0IG1lYW5zIHRoYXQgdGhlcmUgYXJlIGF0XG4vLyBtb3N0IHtAY29kZSBufSBjb25maWd1cmF0aW9ucyBhc3NvY2lhdGVkIHdpdGggc3RhdGUge0Bjb2RlIHN9IGZvclxuLy8ge0Bjb2RlIG59IHBvc3NpYmxlIGFsdGVybmF0aXZlcyBpbiB0aGUgZGVjaXNpb24uIFRoZSBtZXJnZWQgc3RhY2tzXG4vLyBjb21wbGljYXRlIHRoZSBjb21wYXJpc29uIG9mIGNvbmZpZ3VyYXRpb24gY29udGV4dHMge0Bjb2RlIHh9IGFuZFxuLy8ge0Bjb2RlIHgnfS4gU2FtIGNoZWNrcyB0byBzZWUgaWYgb25lIGlzIGEgc3Vic2V0IG9mIHRoZSBvdGhlciBieSBjYWxsaW5nXG4vLyBtZXJnZSBhbmQgY2hlY2tpbmcgdG8gc2VlIGlmIHRoZSBtZXJnZWQgcmVzdWx0IGlzIGVpdGhlciB7QGNvZGUgeH0gb3Jcbi8vIHtAY29kZSB4J30uIElmIHRoZSB7QGNvZGUgeH0gYXNzb2NpYXRlZCB3aXRoIGxvd2VzdCBhbHRlcm5hdGl2ZSB7QGNvZGUgaX1cbi8vIGlzIHRoZSBzdXBlcnNldCwgdGhlbiB7QGNvZGUgaX0gaXMgdGhlIG9ubHkgcG9zc2libGUgcHJlZGljdGlvbiBzaW5jZSB0aGVcbi8vIG90aGVycyByZXNvbHZlIHRvIHtAY29kZSBtaW4oaSl9IGFzIHdlbGwuIEhvd2V2ZXIsIGlmIHtAY29kZSB4fSBpc1xuLy8gYXNzb2NpYXRlZCB3aXRoIHtAY29kZSBqPml9IHRoZW4gYXQgbGVhc3Qgb25lIHN0YWNrIGNvbmZpZ3VyYXRpb24gZm9yXG4vLyB7QGNvZGUgan0gaXMgbm90IGluIGNvbmZsaWN0IHdpdGggYWx0ZXJuYXRpdmUge0Bjb2RlIGl9LiBUaGUgYWxnb3JpdGhtXG4vLyBzaG91bGQga2VlcCBnb2luZywgbG9va2luZyBmb3IgbW9yZSBsb29rYWhlYWQgZHVlIHRvIHRoZSB1bmNlcnRhaW50eS48L3A+XG4vL1xuLy8gPHA+Rm9yIHNpbXBsaWNpdHksIEknbSBkb2luZyBhIGVxdWFsaXR5IGNoZWNrIGJldHdlZW4ge0Bjb2RlIHh9IGFuZFxuLy8ge0Bjb2RlIHgnfSB0aGF0IGxldHMgdGhlIGFsZ29yaXRobSBjb250aW51ZSB0byBjb25zdW1lIGxvb2thaGVhZCBsb25nZXJcbi8vIHRoYW4gbmVjZXNzYXJ5LiBUaGUgcmVhc29uIEkgbGlrZSB0aGUgZXF1YWxpdHkgaXMgb2YgY291cnNlIHRoZVxuLy8gc2ltcGxpY2l0eSBidXQgYWxzbyBiZWNhdXNlIHRoYXQgaXMgdGhlIHRlc3QgeW91IG5lZWQgdG8gZGV0ZWN0IHRoZVxuLy8gYWx0ZXJuYXRpdmVzIHRoYXQgYXJlIGFjdHVhbGx5IGluIGNvbmZsaWN0LjwvcD5cbi8vXG4vLyA8cD48c3Ryb25nPkNPTlRJTlVFL1NUT1AgUlVMRTwvc3Ryb25nPjwvcD5cbi8vXG4vLyA8cD5Db250aW51ZSBpZiB1bmlvbiBvZiByZXNvbHZlZCBhbHRlcm5hdGl2ZSBzZXRzIGZyb20gbm9uLWNvbmZsaWN0aW5nIGFuZFxuLy8gY29uZmxpY3RpbmcgYWx0ZXJuYXRpdmUgc3Vic2V0cyBoYXMgbW9yZSB0aGFuIG9uZSBhbHRlcm5hdGl2ZS4gV2UgYXJlXG4vLyB1bmNlcnRhaW4gYWJvdXQgd2hpY2ggYWx0ZXJuYXRpdmUgdG8gcHJlZGljdC48L3A+XG4vL1xuLy8gPHA+VGhlIGNvbXBsZXRlIHNldCBvZiBhbHRlcm5hdGl2ZXMsIHtAY29kZSBbaSBmb3IgKF8saSxfKV19LCB0ZWxscyB1cyB3aGljaFxuLy8gYWx0ZXJuYXRpdmVzIGFyZSBzdGlsbCBpbiB0aGUgcnVubmluZyBmb3IgdGhlIGFtb3VudCBvZiBpbnB1dCB3ZSd2ZVxuLy8gY29uc3VtZWQgYXQgdGhpcyBwb2ludC4gVGhlIGNvbmZsaWN0aW5nIHNldHMgbGV0IHVzIHRvIHN0cmlwIGF3YXlcbi8vIGNvbmZpZ3VyYXRpb25zIHRoYXQgd29uJ3QgbGVhZCB0byBtb3JlIHN0YXRlcyBiZWNhdXNlIHdlIHJlc29sdmVcbi8vIGNvbmZsaWN0cyB0byB0aGUgY29uZmlndXJhdGlvbiB3aXRoIGEgbWluaW11bSBhbHRlcm5hdGUgZm9yIHRoZVxuLy8gY29uZmxpY3Rpbmcgc2V0LjwvcD5cbi8vXG4vLyA8cD48c3Ryb25nPkNBU0VTPC9zdHJvbmc+PC9wPlxuLy9cbi8vIDx1bD5cbi8vXG4vLyA8bGk+bm8gY29uZmxpY3RzIGFuZCBtb3JlIHRoYW4gMSBhbHRlcm5hdGl2ZSBpbiBzZXQgPSZndDsgY29udGludWU8L2xpPlxuLy9cbi8vIDxsaT4ge0Bjb2RlIChzLCAxLCB4KX0sIHtAY29kZSAocywgMiwgeCl9LCB7QGNvZGUgKHMsIDMsIHopfSxcbi8vIHtAY29kZSAocycsIDEsIHkpfSwge0Bjb2RlIChzJywgMiwgeSl9IHlpZWxkcyBub24tY29uZmxpY3Rpbmcgc2V0XG4vLyB7QGNvZGUgezN9fSBVIGNvbmZsaWN0aW5nIHNldHMge0Bjb2RlIG1pbih7MSwyfSl9IFUge0Bjb2RlIG1pbih7MSwyfSl9ID1cbi8vIHtAY29kZSB7MSwzfX0gPSZndDsgY29udGludWVcbi8vIDwvbGk+XG4vL1xuLy8gPGxpPntAY29kZSAocywgMSwgeCl9LCB7QGNvZGUgKHMsIDIsIHgpfSwge0Bjb2RlIChzJywgMSwgeSl9LFxuLy8ge0Bjb2RlIChzJywgMiwgeSl9LCB7QGNvZGUgKHMnJywgMSwgeil9IHlpZWxkcyBub24tY29uZmxpY3Rpbmcgc2V0XG4vLyB7QGNvZGUgezF9fSBVIGNvbmZsaWN0aW5nIHNldHMge0Bjb2RlIG1pbih7MSwyfSl9IFUge0Bjb2RlIG1pbih7MSwyfSl9ID1cbi8vIHtAY29kZSB7MX19ID0mZ3Q7IHN0b3AgYW5kIHByZWRpY3QgMTwvbGk+XG4vL1xuLy8gPGxpPntAY29kZSAocywgMSwgeCl9LCB7QGNvZGUgKHMsIDIsIHgpfSwge0Bjb2RlIChzJywgMSwgeSl9LFxuLy8ge0Bjb2RlIChzJywgMiwgeSl9IHlpZWxkcyBjb25mbGljdGluZywgcmVkdWNlZCBzZXRzIHtAY29kZSB7MX19IFVcbi8vIHtAY29kZSB7MX19ID0ge0Bjb2RlIHsxfX0gPSZndDsgc3RvcCBhbmQgcHJlZGljdCAxLCBjYW4gYW5ub3VuY2Vcbi8vIGFtYmlndWl0eSB7QGNvZGUgezEsMn19PC9saT5cbi8vXG4vLyA8bGk+e0Bjb2RlIChzLCAxLCB4KX0sIHtAY29kZSAocywgMiwgeCl9LCB7QGNvZGUgKHMnLCAyLCB5KX0sXG4vLyB7QGNvZGUgKHMnLCAzLCB5KX0geWllbGRzIGNvbmZsaWN0aW5nLCByZWR1Y2VkIHNldHMge0Bjb2RlIHsxfX0gVVxuLy8ge0Bjb2RlIHsyfX0gPSB7QGNvZGUgezEsMn19ID0mZ3Q7IGNvbnRpbnVlPC9saT5cbi8vXG4vLyA8bGk+e0Bjb2RlIChzLCAxLCB4KX0sIHtAY29kZSAocywgMiwgeCl9LCB7QGNvZGUgKHMnLCAzLCB5KX0sXG4vLyB7QGNvZGUgKHMnLCA0LCB5KX0geWllbGRzIGNvbmZsaWN0aW5nLCByZWR1Y2VkIHNldHMge0Bjb2RlIHsxfX0gVVxuLy8ge0Bjb2RlIHszfX0gPSB7QGNvZGUgezEsM319ID0mZ3Q7IGNvbnRpbnVlPC9saT5cbi8vXG4vLyA8L3VsPlxuLy9cbi8vIDxwPjxzdHJvbmc+RVhBQ1QgQU1CSUdVSVRZIERFVEVDVElPTjwvc3Ryb25nPjwvcD5cbi8vXG4vLyA8cD5JZiBhbGwgc3RhdGVzIHJlcG9ydCB0aGUgc2FtZSBjb25mbGljdGluZyBzZXQgb2YgYWx0ZXJuYXRpdmVzLCB0aGVuIHdlXG4vLyBrbm93IHdlIGhhdmUgdGhlIGV4YWN0IGFtYmlndWl0eSBzZXQuPC9wPlxuLy9cbi8vIDxwPjxjb2RlPnxBXzxlbT5pPC9lbT58Jmd0OzE8L2NvZGU+IGFuZFxuLy8gPGNvZGU+QV88ZW0+aTwvZW0+ID0gQV88ZW0+ajwvZW0+PC9jb2RlPiBmb3IgYWxsIDxlbT5pPC9lbT4sIDxlbT5qPC9lbT4uPC9wPlxuLy9cbi8vIDxwPkluIG90aGVyIHdvcmRzLCB3ZSBjb250aW51ZSBleGFtaW5pbmcgbG9va2FoZWFkIHVudGlsIGFsbCB7QGNvZGUgQV9pfVxuLy8gaGF2ZSBtb3JlIHRoYW4gb25lIGFsdGVybmF0aXZlIGFuZCBhbGwge0Bjb2RlIEFfaX0gYXJlIHRoZSBzYW1lLiBJZlxuLy8ge0Bjb2RlIEE9e3sxLDJ9LCB7MSwzfX19LCB0aGVuIHJlZ3VsYXIgTEwgcHJlZGljdGlvbiB3b3VsZCB0ZXJtaW5hdGVcbi8vIGJlY2F1c2UgdGhlIHJlc29sdmVkIHNldCBpcyB7QGNvZGUgezF9fS4gVG8gZGV0ZXJtaW5lIHdoYXQgdGhlIHJlYWxcbi8vIGFtYmlndWl0eSBpcywgd2UgaGF2ZSB0byBrbm93IHdoZXRoZXIgdGhlIGFtYmlndWl0eSBpcyBiZXR3ZWVuIG9uZSBhbmRcbi8vIHR3byBvciBvbmUgYW5kIHRocmVlIHNvIHdlIGtlZXAgZ29pbmcuIFdlIGNhbiBvbmx5IHN0b3AgcHJlZGljdGlvbiB3aGVuXG4vLyB3ZSBuZWVkIGV4YWN0IGFtYmlndWl0eSBkZXRlY3Rpb24gd2hlbiB0aGUgc2V0cyBsb29rIGxpa2Vcbi8vIHtAY29kZSBBPXt7MSwyfX19IG9yIHtAY29kZSB7ezEsMn0sezEsMn19fSwgZXRjLi4uPC9wPlxuLy9cblByZWRpY3Rpb25Nb2RlLnJlc29sdmVzVG9KdXN0T25lVmlhYmxlQWx0ID0gZnVuY3Rpb24oYWx0c2V0cykge1xuICAgIHJldHVybiBQcmVkaWN0aW9uTW9kZS5nZXRTaW5nbGVWaWFibGVBbHQoYWx0c2V0cyk7XG59O1xuXG4vL1xuLy8gRGV0ZXJtaW5lcyBpZiBldmVyeSBhbHRlcm5hdGl2ZSBzdWJzZXQgaW4ge0Bjb2RlIGFsdHNldHN9IGNvbnRhaW5zIG1vcmVcbi8vIHRoYW4gb25lIGFsdGVybmF0aXZlLlxuLy9cbi8vIEBwYXJhbSBhbHRzZXRzIGEgY29sbGVjdGlvbiBvZiBhbHRlcm5hdGl2ZSBzdWJzZXRzXG4vLyBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiBldmVyeSB7QGxpbmsgQml0U2V0fSBpbiB7QGNvZGUgYWx0c2V0c30gaGFzXG4vLyB7QGxpbmsgQml0U2V0Ly9jYXJkaW5hbGl0eSBjYXJkaW5hbGl0eX0gJmd0OyAxLCBvdGhlcndpc2Uge0Bjb2RlIGZhbHNlfVxuLy9cblByZWRpY3Rpb25Nb2RlLmFsbFN1YnNldHNDb25mbGljdCA9IGZ1bmN0aW9uKGFsdHNldHMpIHtcbiAgICByZXR1cm4gISBQcmVkaWN0aW9uTW9kZS5oYXNOb25Db25mbGljdGluZ0FsdFNldChhbHRzZXRzKTtcbn07XG4vL1xuLy8gRGV0ZXJtaW5lcyBpZiBhbnkgc2luZ2xlIGFsdGVybmF0aXZlIHN1YnNldCBpbiB7QGNvZGUgYWx0c2V0c30gY29udGFpbnNcbi8vIGV4YWN0bHkgb25lIGFsdGVybmF0aXZlLlxuLy9cbi8vIEBwYXJhbSBhbHRzZXRzIGEgY29sbGVjdGlvbiBvZiBhbHRlcm5hdGl2ZSBzdWJzZXRzXG4vLyBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiB7QGNvZGUgYWx0c2V0c30gY29udGFpbnMgYSB7QGxpbmsgQml0U2V0fSB3aXRoXG4vLyB7QGxpbmsgQml0U2V0Ly9jYXJkaW5hbGl0eSBjYXJkaW5hbGl0eX0gMSwgb3RoZXJ3aXNlIHtAY29kZSBmYWxzZX1cbi8vXG5QcmVkaWN0aW9uTW9kZS5oYXNOb25Db25mbGljdGluZ0FsdFNldCA9IGZ1bmN0aW9uKGFsdHNldHMpIHtcblx0Zm9yKHZhciBpPTA7aTxhbHRzZXRzLmxlbmd0aDtpKyspIHtcblx0XHR2YXIgYWx0cyA9IGFsdHNldHNbaV07XG4gICAgICAgIGlmIChhbHRzLmxlbmd0aD09PTEpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cdH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vL1xuLy8gRGV0ZXJtaW5lcyBpZiBhbnkgc2luZ2xlIGFsdGVybmF0aXZlIHN1YnNldCBpbiB7QGNvZGUgYWx0c2V0c30gY29udGFpbnNcbi8vIG1vcmUgdGhhbiBvbmUgYWx0ZXJuYXRpdmUuXG4vL1xuLy8gQHBhcmFtIGFsdHNldHMgYSBjb2xsZWN0aW9uIG9mIGFsdGVybmF0aXZlIHN1YnNldHNcbi8vIEByZXR1cm4ge0Bjb2RlIHRydWV9IGlmIHtAY29kZSBhbHRzZXRzfSBjb250YWlucyBhIHtAbGluayBCaXRTZXR9IHdpdGhcbi8vIHtAbGluayBCaXRTZXQvL2NhcmRpbmFsaXR5IGNhcmRpbmFsaXR5fSAmZ3Q7IDEsIG90aGVyd2lzZSB7QGNvZGUgZmFsc2V9XG4vL1xuUHJlZGljdGlvbk1vZGUuaGFzQ29uZmxpY3RpbmdBbHRTZXQgPSBmdW5jdGlvbihhbHRzZXRzKSB7XG5cdGZvcih2YXIgaT0wO2k8YWx0c2V0cy5sZW5ndGg7aSsrKSB7XG5cdFx0dmFyIGFsdHMgPSBhbHRzZXRzW2ldO1xuICAgICAgICBpZiAoYWx0cy5sZW5ndGg+MSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblx0fVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8vXG4vLyBEZXRlcm1pbmVzIGlmIGV2ZXJ5IGFsdGVybmF0aXZlIHN1YnNldCBpbiB7QGNvZGUgYWx0c2V0c30gaXMgZXF1aXZhbGVudC5cbi8vXG4vLyBAcGFyYW0gYWx0c2V0cyBhIGNvbGxlY3Rpb24gb2YgYWx0ZXJuYXRpdmUgc3Vic2V0c1xuLy8gQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgZXZlcnkgbWVtYmVyIG9mIHtAY29kZSBhbHRzZXRzfSBpcyBlcXVhbCB0byB0aGVcbi8vIG90aGVycywgb3RoZXJ3aXNlIHtAY29kZSBmYWxzZX1cbi8vXG5QcmVkaWN0aW9uTW9kZS5hbGxTdWJzZXRzRXF1YWwgPSBmdW5jdGlvbihhbHRzZXRzKSB7XG4gICAgdmFyIGZpcnN0ID0gbnVsbDtcblx0Zm9yKHZhciBpPTA7aTxhbHRzZXRzLmxlbmd0aDtpKyspIHtcblx0XHR2YXIgYWx0cyA9IGFsdHNldHNbaV07XG4gICAgICAgIGlmIChmaXJzdCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgZmlyc3QgPSBhbHRzO1xuICAgICAgICB9IGVsc2UgaWYgKGFsdHMhPT1maXJzdCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cdH1cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8vXG4vLyBSZXR1cm5zIHRoZSB1bmlxdWUgYWx0ZXJuYXRpdmUgcHJlZGljdGVkIGJ5IGFsbCBhbHRlcm5hdGl2ZSBzdWJzZXRzIGluXG4vLyB7QGNvZGUgYWx0c2V0c30uIElmIG5vIHN1Y2ggYWx0ZXJuYXRpdmUgZXhpc3RzLCB0aGlzIG1ldGhvZCByZXR1cm5zXG4vLyB7QGxpbmsgQVROLy9JTlZBTElEX0FMVF9OVU1CRVJ9LlxuLy9cbi8vIEBwYXJhbSBhbHRzZXRzIGEgY29sbGVjdGlvbiBvZiBhbHRlcm5hdGl2ZSBzdWJzZXRzXG4vL1xuUHJlZGljdGlvbk1vZGUuZ2V0VW5pcXVlQWx0ID0gZnVuY3Rpb24oYWx0c2V0cykge1xuICAgIHZhciBhbGwgPSBQcmVkaWN0aW9uTW9kZS5nZXRBbHRzKGFsdHNldHMpO1xuICAgIGlmIChhbGwubGVuZ3RoPT09MSkge1xuICAgICAgICByZXR1cm4gYWxsLm1pblZhbHVlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIEFUTi5JTlZBTElEX0FMVF9OVU1CRVI7XG4gICAgfVxufTtcblxuLy8gR2V0cyB0aGUgY29tcGxldGUgc2V0IG9mIHJlcHJlc2VudGVkIGFsdGVybmF0aXZlcyBmb3IgYSBjb2xsZWN0aW9uIG9mXG4vLyBhbHRlcm5hdGl2ZSBzdWJzZXRzLiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSB1bmlvbiBvZiBlYWNoIHtAbGluayBCaXRTZXR9XG4vLyBpbiB7QGNvZGUgYWx0c2V0c30uXG4vL1xuLy8gQHBhcmFtIGFsdHNldHMgYSBjb2xsZWN0aW9uIG9mIGFsdGVybmF0aXZlIHN1YnNldHNcbi8vIEByZXR1cm4gdGhlIHNldCBvZiByZXByZXNlbnRlZCBhbHRlcm5hdGl2ZXMgaW4ge0Bjb2RlIGFsdHNldHN9XG4vL1xuUHJlZGljdGlvbk1vZGUuZ2V0QWx0cyA9IGZ1bmN0aW9uKGFsdHNldHMpIHtcbiAgICB2YXIgYWxsID0gbmV3IEJpdFNldCgpO1xuICAgIGFsdHNldHMubWFwKCBmdW5jdGlvbihhbHRzKSB7IGFsbC5vcihhbHRzKTsgfSk7XG4gICAgcmV0dXJuIGFsbDtcbn07XG5cbi8vXG4vLyBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIGNvbmZsaWN0aW5nIGFsdCBzdWJzZXRzIGZyb20gYSBjb25maWd1cmF0aW9uIHNldC5cbi8vIEZvciBlYWNoIGNvbmZpZ3VyYXRpb24ge0Bjb2RlIGN9IGluIHtAY29kZSBjb25maWdzfTpcbi8vXG4vLyA8cHJlPlxuLy8gbWFwW2NdIFU9IGMue0BsaW5rIEFUTkNvbmZpZy8vYWx0IGFsdH0gLy8gbWFwIGhhc2gvZXF1YWxzIHVzZXMgcyBhbmQgeCwgbm90XG4vLyBhbHQgYW5kIG5vdCBwcmVkXG4vLyA8L3ByZT5cblxuUHJlZGljdGlvbk1vZGUuZ2V0Q29uZmxpY3RpbmdBbHRTdWJzZXRzID0gZnVuY3Rpb24oY29uZmlncykge1xuICAgIHZhciBjb25maWdUb0FsdHMgPSBuZXcgTWFwKCk7XG4gICAgY29uZmlnVG9BbHRzLmhhc2hGdW5jdGlvbiA9IGZ1bmN0aW9uKGNmZykgeyBoYXNoU3R1ZmYoY2ZnLnN0YXRlLnN0YXRlTnVtYmVyLCBjZmcuY29udGV4dCk7IH07XG4gICAgY29uZmlnVG9BbHRzLmVxdWFsc0Z1bmN0aW9uID0gZnVuY3Rpb24oYzEsIGMyKSB7IHJldHVybiBjMS5zdGF0ZS5zdGF0ZU51bWJlcj09YzIuc3RhdGUuc3RhdGVOdW1iZXIgJiYgYzEuY29udGV4dC5lcXVhbHMoYzIuY29udGV4dCk7fVxuICAgIGNvbmZpZ3MuaXRlbXMubWFwKGZ1bmN0aW9uKGNmZykge1xuICAgICAgICB2YXIgYWx0cyA9IGNvbmZpZ1RvQWx0cy5nZXQoY2ZnKTtcbiAgICAgICAgaWYgKGFsdHMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGFsdHMgPSBuZXcgQml0U2V0KCk7XG4gICAgICAgICAgICBjb25maWdUb0FsdHMucHV0KGNmZywgYWx0cyk7XG4gICAgICAgIH1cbiAgICAgICAgYWx0cy5hZGQoY2ZnLmFsdCk7XG5cdH0pO1xuICAgIHJldHVybiBjb25maWdUb0FsdHMuZ2V0VmFsdWVzKCk7XG59O1xuXG4vL1xuLy8gR2V0IGEgbWFwIGZyb20gc3RhdGUgdG8gYWx0IHN1YnNldCBmcm9tIGEgY29uZmlndXJhdGlvbiBzZXQuIEZvciBlYWNoXG4vLyBjb25maWd1cmF0aW9uIHtAY29kZSBjfSBpbiB7QGNvZGUgY29uZmlnc306XG4vL1xuLy8gPHByZT5cbi8vIG1hcFtjLntAbGluayBBVE5Db25maWcvL3N0YXRlIHN0YXRlfV0gVT0gYy57QGxpbmsgQVROQ29uZmlnLy9hbHQgYWx0fVxuLy8gPC9wcmU+XG4vL1xuUHJlZGljdGlvbk1vZGUuZ2V0U3RhdGVUb0FsdE1hcCA9IGZ1bmN0aW9uKGNvbmZpZ3MpIHtcbiAgICB2YXIgbSA9IG5ldyBBbHREaWN0KCk7XG4gICAgY29uZmlncy5pdGVtcy5tYXAoZnVuY3Rpb24oYykge1xuICAgICAgICB2YXIgYWx0cyA9IG0uZ2V0KGMuc3RhdGUpO1xuICAgICAgICBpZiAoYWx0cyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgYWx0cyA9IG5ldyBCaXRTZXQoKTtcbiAgICAgICAgICAgIG0ucHV0KGMuc3RhdGUsIGFsdHMpO1xuICAgICAgICB9XG4gICAgICAgIGFsdHMuYWRkKGMuYWx0KTtcbiAgICB9KTtcbiAgICByZXR1cm4gbTtcbn07XG5cblByZWRpY3Rpb25Nb2RlLmhhc1N0YXRlQXNzb2NpYXRlZFdpdGhPbmVBbHQgPSBmdW5jdGlvbihjb25maWdzKSB7XG4gICAgdmFyIHZhbHVlcyA9IFByZWRpY3Rpb25Nb2RlLmdldFN0YXRlVG9BbHRNYXAoY29uZmlncykudmFsdWVzKCk7XG4gICAgZm9yKHZhciBpPTA7aTx2YWx1ZXMubGVuZ3RoO2krKykge1xuICAgICAgICBpZiAodmFsdWVzW2ldLmxlbmd0aD09PTEpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cblByZWRpY3Rpb25Nb2RlLmdldFNpbmdsZVZpYWJsZUFsdCA9IGZ1bmN0aW9uKGFsdHNldHMpIHtcbiAgICB2YXIgcmVzdWx0ID0gbnVsbDtcblx0Zm9yKHZhciBpPTA7aTxhbHRzZXRzLmxlbmd0aDtpKyspIHtcblx0XHR2YXIgYWx0cyA9IGFsdHNldHNbaV07XG4gICAgICAgIHZhciBtaW5BbHQgPSBhbHRzLm1pblZhbHVlKCk7XG4gICAgICAgIGlmKHJlc3VsdD09PW51bGwpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IG1pbkFsdDtcbiAgICAgICAgfSBlbHNlIGlmKHJlc3VsdCE9PW1pbkFsdCkgeyAvLyBtb3JlIHRoYW4gMSB2aWFibGUgYWx0XG4gICAgICAgICAgICByZXR1cm4gQVROLklOVkFMSURfQUxUX05VTUJFUjtcbiAgICAgICAgfVxuXHR9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydHMuUHJlZGljdGlvbk1vZGUgPSBQcmVkaWN0aW9uTW9kZTtcbiIsIi8vXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vL1xuXG4vLyBBIHRyZWUgc3RydWN0dXJlIHVzZWQgdG8gcmVjb3JkIHRoZSBzZW1hbnRpYyBjb250ZXh0IGluIHdoaWNoXG4vLyAgYW4gQVROIGNvbmZpZ3VyYXRpb24gaXMgdmFsaWQuICBJdCdzIGVpdGhlciBhIHNpbmdsZSBwcmVkaWNhdGUsXG4vLyAgYSBjb25qdW5jdGlvbiB7QGNvZGUgcDEmJnAyfSwgb3IgYSBzdW0gb2YgcHJvZHVjdHMge0Bjb2RlIHAxfHxwMn0uXG4vL1xuLy8gIDxwPkkgaGF2ZSBzY29wZWQgdGhlIHtAbGluayBBTkR9LCB7QGxpbmsgT1J9LCBhbmQge0BsaW5rIFByZWRpY2F0ZX0gc3ViY2xhc3NlcyBvZlxuLy8gIHtAbGluayBTZW1hbnRpY0NvbnRleHR9IHdpdGhpbiB0aGUgc2NvcGUgb2YgdGhpcyBvdXRlciBjbGFzcy48L3A+XG4vL1xuXG52YXIgU2V0ID0gcmVxdWlyZSgnLi8uLi9VdGlscycpLlNldDtcbnZhciBIYXNoID0gcmVxdWlyZSgnLi8uLi9VdGlscycpLkhhc2g7XG5cbmZ1bmN0aW9uIFNlbWFudGljQ29udGV4dCgpIHtcblx0cmV0dXJuIHRoaXM7XG59XG5cblNlbWFudGljQ29udGV4dC5wcm90b3R5cGUuaGFzaENvZGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgaGFzaCA9IG5ldyBIYXNoKCk7XG4gICAgdGhpcy51cGRhdGVIYXNoQ29kZShoYXNoKTtcbiAgICByZXR1cm4gaGFzaC5maW5pc2goKTtcbn07XG5cbi8vIEZvciBjb250ZXh0IGluZGVwZW5kZW50IHByZWRpY2F0ZXMsIHdlIGV2YWx1YXRlIHRoZW0gd2l0aG91dCBhIGxvY2FsXG4vLyBjb250ZXh0IChpLmUuLCBudWxsIGNvbnRleHQpLiBUaGF0IHdheSwgd2UgY2FuIGV2YWx1YXRlIHRoZW0gd2l0aG91dFxuLy8gaGF2aW5nIHRvIGNyZWF0ZSBwcm9wZXIgcnVsZS1zcGVjaWZpYyBjb250ZXh0IGR1cmluZyBwcmVkaWN0aW9uIChhc1xuLy8gb3Bwb3NlZCB0byB0aGUgcGFyc2VyLCB3aGljaCBjcmVhdGVzIHRoZW0gbmF0dXJhbGx5KS4gSW4gYSBwcmFjdGljYWxcbi8vIHNlbnNlLCB0aGlzIGF2b2lkcyBhIGNhc3QgZXhjZXB0aW9uIGZyb20gUnVsZUNvbnRleHQgdG8gbXlydWxlQ29udGV4dC5cbi8vXG4vLyA8cD5Gb3IgY29udGV4dCBkZXBlbmRlbnQgcHJlZGljYXRlcywgd2UgbXVzdCBwYXNzIGluIGEgbG9jYWwgY29udGV4dCBzbyB0aGF0XG4vLyByZWZlcmVuY2VzIHN1Y2ggYXMgJGFyZyBldmFsdWF0ZSBwcm9wZXJseSBhcyBfbG9jYWxjdHguYXJnLiBXZSBvbmx5XG4vLyBjYXB0dXJlIGNvbnRleHQgZGVwZW5kZW50IHByZWRpY2F0ZXMgaW4gdGhlIGNvbnRleHQgaW4gd2hpY2ggd2UgYmVnaW5cbi8vIHByZWRpY3Rpb24sIHNvIHdlIHBhc3NlZCBpbiB0aGUgb3V0ZXIgY29udGV4dCBoZXJlIGluIGNhc2Ugb2YgY29udGV4dFxuLy8gZGVwZW5kZW50IHByZWRpY2F0ZSBldmFsdWF0aW9uLjwvcD5cbi8vXG5TZW1hbnRpY0NvbnRleHQucHJvdG90eXBlLmV2YWx1YXRlID0gZnVuY3Rpb24ocGFyc2VyLCBvdXRlckNvbnRleHQpIHtcbn07XG5cbi8vXG4vLyBFdmFsdWF0ZSB0aGUgcHJlY2VkZW5jZSBwcmVkaWNhdGVzIGZvciB0aGUgY29udGV4dCBhbmQgcmVkdWNlIHRoZSByZXN1bHQuXG4vL1xuLy8gQHBhcmFtIHBhcnNlciBUaGUgcGFyc2VyIGluc3RhbmNlLlxuLy8gQHBhcmFtIG91dGVyQ29udGV4dCBUaGUgY3VycmVudCBwYXJzZXIgY29udGV4dCBvYmplY3QuXG4vLyBAcmV0dXJuIFRoZSBzaW1wbGlmaWVkIHNlbWFudGljIGNvbnRleHQgYWZ0ZXIgcHJlY2VkZW5jZSBwcmVkaWNhdGVzIGFyZVxuLy8gZXZhbHVhdGVkLCB3aGljaCB3aWxsIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlcy5cbi8vIDx1bD5cbi8vIDxsaT57QGxpbmsgLy9OT05FfTogaWYgdGhlIHByZWRpY2F0ZSBzaW1wbGlmaWVzIHRvIHtAY29kZSB0cnVlfSBhZnRlclxuLy8gcHJlY2VkZW5jZSBwcmVkaWNhdGVzIGFyZSBldmFsdWF0ZWQuPC9saT5cbi8vIDxsaT57QGNvZGUgbnVsbH06IGlmIHRoZSBwcmVkaWNhdGUgc2ltcGxpZmllcyB0byB7QGNvZGUgZmFsc2V9IGFmdGVyXG4vLyBwcmVjZWRlbmNlIHByZWRpY2F0ZXMgYXJlIGV2YWx1YXRlZC48L2xpPlxuLy8gPGxpPntAY29kZSB0aGlzfTogaWYgdGhlIHNlbWFudGljIGNvbnRleHQgaXMgbm90IGNoYW5nZWQgYXMgYSByZXN1bHQgb2Zcbi8vIHByZWNlZGVuY2UgcHJlZGljYXRlIGV2YWx1YXRpb24uPC9saT5cbi8vIDxsaT5BIG5vbi17QGNvZGUgbnVsbH0ge0BsaW5rIFNlbWFudGljQ29udGV4dH06IHRoZSBuZXcgc2ltcGxpZmllZFxuLy8gc2VtYW50aWMgY29udGV4dCBhZnRlciBwcmVjZWRlbmNlIHByZWRpY2F0ZXMgYXJlIGV2YWx1YXRlZC48L2xpPlxuLy8gPC91bD5cbi8vXG5TZW1hbnRpY0NvbnRleHQucHJvdG90eXBlLmV2YWxQcmVjZWRlbmNlID0gZnVuY3Rpb24ocGFyc2VyLCBvdXRlckNvbnRleHQpIHtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5TZW1hbnRpY0NvbnRleHQuYW5kQ29udGV4dCA9IGZ1bmN0aW9uKGEsIGIpIHtcblx0aWYgKGEgPT09IG51bGwgfHwgYSA9PT0gU2VtYW50aWNDb250ZXh0Lk5PTkUpIHtcblx0XHRyZXR1cm4gYjtcblx0fVxuXHRpZiAoYiA9PT0gbnVsbCB8fCBiID09PSBTZW1hbnRpY0NvbnRleHQuTk9ORSkge1xuXHRcdHJldHVybiBhO1xuXHR9XG5cdHZhciByZXN1bHQgPSBuZXcgQU5EKGEsIGIpO1xuXHRpZiAocmVzdWx0Lm9wbmRzLmxlbmd0aCA9PT0gMSkge1xuXHRcdHJldHVybiByZXN1bHQub3BuZHNbMF07XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxufTtcblxuU2VtYW50aWNDb250ZXh0Lm9yQ29udGV4dCA9IGZ1bmN0aW9uKGEsIGIpIHtcblx0aWYgKGEgPT09IG51bGwpIHtcblx0XHRyZXR1cm4gYjtcblx0fVxuXHRpZiAoYiA9PT0gbnVsbCkge1xuXHRcdHJldHVybiBhO1xuXHR9XG5cdGlmIChhID09PSBTZW1hbnRpY0NvbnRleHQuTk9ORSB8fCBiID09PSBTZW1hbnRpY0NvbnRleHQuTk9ORSkge1xuXHRcdHJldHVybiBTZW1hbnRpY0NvbnRleHQuTk9ORTtcblx0fVxuXHR2YXIgcmVzdWx0ID0gbmV3IE9SKGEsIGIpO1xuXHRpZiAocmVzdWx0Lm9wbmRzLmxlbmd0aCA9PT0gMSkge1xuXHRcdHJldHVybiByZXN1bHQub3BuZHNbMF07XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxufTtcblxuZnVuY3Rpb24gUHJlZGljYXRlKHJ1bGVJbmRleCwgcHJlZEluZGV4LCBpc0N0eERlcGVuZGVudCkge1xuXHRTZW1hbnRpY0NvbnRleHQuY2FsbCh0aGlzKTtcblx0dGhpcy5ydWxlSW5kZXggPSBydWxlSW5kZXggPT09IHVuZGVmaW5lZCA/IC0xIDogcnVsZUluZGV4O1xuXHR0aGlzLnByZWRJbmRleCA9IHByZWRJbmRleCA9PT0gdW5kZWZpbmVkID8gLTEgOiBwcmVkSW5kZXg7XG5cdHRoaXMuaXNDdHhEZXBlbmRlbnQgPSBpc0N0eERlcGVuZGVudCA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBpc0N0eERlcGVuZGVudDsgLy8gZS5nLiwgJGkgcmVmIGluIHByZWRcblx0cmV0dXJuIHRoaXM7XG59XG5cblByZWRpY2F0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNlbWFudGljQ29udGV4dC5wcm90b3R5cGUpO1xuUHJlZGljYXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByZWRpY2F0ZTtcblxuLy9UaGUgZGVmYXVsdCB7QGxpbmsgU2VtYW50aWNDb250ZXh0fSwgd2hpY2ggaXMgc2VtYW50aWNhbGx5IGVxdWl2YWxlbnQgdG9cbi8vYSBwcmVkaWNhdGUgb2YgdGhlIGZvcm0ge0Bjb2RlIHt0cnVlfT99LlxuLy9cblNlbWFudGljQ29udGV4dC5OT05FID0gbmV3IFByZWRpY2F0ZSgpO1xuXG5cblByZWRpY2F0ZS5wcm90b3R5cGUuZXZhbHVhdGUgPSBmdW5jdGlvbihwYXJzZXIsIG91dGVyQ29udGV4dCkge1xuXHR2YXIgbG9jYWxjdHggPSB0aGlzLmlzQ3R4RGVwZW5kZW50ID8gb3V0ZXJDb250ZXh0IDogbnVsbDtcblx0cmV0dXJuIHBhcnNlci5zZW1wcmVkKGxvY2FsY3R4LCB0aGlzLnJ1bGVJbmRleCwgdGhpcy5wcmVkSW5kZXgpO1xufTtcblxuUHJlZGljYXRlLnByb3RvdHlwZS51cGRhdGVIYXNoQ29kZSA9IGZ1bmN0aW9uKGhhc2gpIHtcblx0aGFzaC51cGRhdGUodGhpcy5ydWxlSW5kZXgsIHRoaXMucHJlZEluZGV4LCB0aGlzLmlzQ3R4RGVwZW5kZW50KTtcbn07XG5cblByZWRpY2F0ZS5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24ob3RoZXIpIHtcblx0aWYgKHRoaXMgPT09IG90aGVyKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSBpZiAoIShvdGhlciBpbnN0YW5jZW9mIFByZWRpY2F0ZSkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHRoaXMucnVsZUluZGV4ID09PSBvdGhlci5ydWxlSW5kZXggJiZcblx0XHRcdFx0dGhpcy5wcmVkSW5kZXggPT09IG90aGVyLnByZWRJbmRleCAmJlxuXHRcdFx0XHR0aGlzLmlzQ3R4RGVwZW5kZW50ID09PSBvdGhlci5pc0N0eERlcGVuZGVudDtcblx0fVxufTtcblxuUHJlZGljYXRlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gXCJ7XCIgKyB0aGlzLnJ1bGVJbmRleCArIFwiOlwiICsgdGhpcy5wcmVkSW5kZXggKyBcIn0/XCI7XG59O1xuXG5mdW5jdGlvbiBQcmVjZWRlbmNlUHJlZGljYXRlKHByZWNlZGVuY2UpIHtcblx0U2VtYW50aWNDb250ZXh0LmNhbGwodGhpcyk7XG5cdHRoaXMucHJlY2VkZW5jZSA9IHByZWNlZGVuY2UgPT09IHVuZGVmaW5lZCA/IDAgOiBwcmVjZWRlbmNlO1xufVxuXG5QcmVjZWRlbmNlUHJlZGljYXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2VtYW50aWNDb250ZXh0LnByb3RvdHlwZSk7XG5QcmVjZWRlbmNlUHJlZGljYXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByZWNlZGVuY2VQcmVkaWNhdGU7XG5cblByZWNlZGVuY2VQcmVkaWNhdGUucHJvdG90eXBlLmV2YWx1YXRlID0gZnVuY3Rpb24ocGFyc2VyLCBvdXRlckNvbnRleHQpIHtcblx0cmV0dXJuIHBhcnNlci5wcmVjcHJlZChvdXRlckNvbnRleHQsIHRoaXMucHJlY2VkZW5jZSk7XG59O1xuXG5QcmVjZWRlbmNlUHJlZGljYXRlLnByb3RvdHlwZS5ldmFsUHJlY2VkZW5jZSA9IGZ1bmN0aW9uKHBhcnNlciwgb3V0ZXJDb250ZXh0KSB7XG5cdGlmIChwYXJzZXIucHJlY3ByZWQob3V0ZXJDb250ZXh0LCB0aGlzLnByZWNlZGVuY2UpKSB7XG5cdFx0cmV0dXJuIFNlbWFudGljQ29udGV4dC5OT05FO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG59O1xuXG5QcmVjZWRlbmNlUHJlZGljYXRlLnByb3RvdHlwZS5jb21wYXJlVG8gPSBmdW5jdGlvbihvdGhlcikge1xuXHRyZXR1cm4gdGhpcy5wcmVjZWRlbmNlIC0gb3RoZXIucHJlY2VkZW5jZTtcbn07XG5cblByZWNlZGVuY2VQcmVkaWNhdGUucHJvdG90eXBlLnVwZGF0ZUhhc2hDb2RlID0gZnVuY3Rpb24oaGFzaCkge1xuICAgIGhhc2gudXBkYXRlKDMxKTtcbn07XG5cblByZWNlZGVuY2VQcmVkaWNhdGUucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uKG90aGVyKSB7XG5cdGlmICh0aGlzID09PSBvdGhlcikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGVsc2UgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBQcmVjZWRlbmNlUHJlZGljYXRlKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdGhpcy5wcmVjZWRlbmNlID09PSBvdGhlci5wcmVjZWRlbmNlO1xuXHR9XG59O1xuXG5QcmVjZWRlbmNlUHJlZGljYXRlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gXCJ7XCIrdGhpcy5wcmVjZWRlbmNlK1wiPj1wcmVjfT9cIjtcbn07XG5cblxuXG5QcmVjZWRlbmNlUHJlZGljYXRlLmZpbHRlclByZWNlZGVuY2VQcmVkaWNhdGVzID0gZnVuY3Rpb24oc2V0KSB7XG5cdHZhciByZXN1bHQgPSBbXTtcblx0c2V0LnZhbHVlcygpLm1hcCggZnVuY3Rpb24oY29udGV4dCkge1xuXHRcdGlmIChjb250ZXh0IGluc3RhbmNlb2YgUHJlY2VkZW5jZVByZWRpY2F0ZSkge1xuXHRcdFx0cmVzdWx0LnB1c2goY29udGV4dCk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIHJlc3VsdDtcbn07XG5cblxuLy8gQSBzZW1hbnRpYyBjb250ZXh0IHdoaWNoIGlzIHRydWUgd2hlbmV2ZXIgbm9uZSBvZiB0aGUgY29udGFpbmVkIGNvbnRleHRzXG4vLyBpcyBmYWxzZS5cbi8vXG5mdW5jdGlvbiBBTkQoYSwgYikge1xuXHRTZW1hbnRpY0NvbnRleHQuY2FsbCh0aGlzKTtcblx0dmFyIG9wZXJhbmRzID0gbmV3IFNldCgpO1xuXHRpZiAoYSBpbnN0YW5jZW9mIEFORCkge1xuXHRcdGEub3BuZHMubWFwKGZ1bmN0aW9uKG8pIHtcblx0XHRcdG9wZXJhbmRzLmFkZChvKTtcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvcGVyYW5kcy5hZGQoYSk7XG5cdH1cblx0aWYgKGIgaW5zdGFuY2VvZiBBTkQpIHtcblx0XHRiLm9wbmRzLm1hcChmdW5jdGlvbihvKSB7XG5cdFx0XHRvcGVyYW5kcy5hZGQobyk7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0b3BlcmFuZHMuYWRkKGIpO1xuXHR9XG5cdHZhciBwcmVjZWRlbmNlUHJlZGljYXRlcyA9IFByZWNlZGVuY2VQcmVkaWNhdGUuZmlsdGVyUHJlY2VkZW5jZVByZWRpY2F0ZXMob3BlcmFuZHMpO1xuXHRpZiAocHJlY2VkZW5jZVByZWRpY2F0ZXMubGVuZ3RoID4gMCkge1xuXHRcdC8vIGludGVyZXN0ZWQgaW4gdGhlIHRyYW5zaXRpb24gd2l0aCB0aGUgbG93ZXN0IHByZWNlZGVuY2Vcblx0XHR2YXIgcmVkdWNlZCA9IG51bGw7XG5cdFx0cHJlY2VkZW5jZVByZWRpY2F0ZXMubWFwKCBmdW5jdGlvbihwKSB7XG5cdFx0XHRpZihyZWR1Y2VkPT09bnVsbCB8fCBwLnByZWNlZGVuY2U8cmVkdWNlZC5wcmVjZWRlbmNlKSB7XG5cdFx0XHRcdHJlZHVjZWQgPSBwO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdG9wZXJhbmRzLmFkZChyZWR1Y2VkKTtcblx0fVxuXHR0aGlzLm9wbmRzID0gb3BlcmFuZHMudmFsdWVzKCk7XG5cdHJldHVybiB0aGlzO1xufVxuXG5BTkQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTZW1hbnRpY0NvbnRleHQucHJvdG90eXBlKTtcbkFORC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBTkQ7XG5cbkFORC5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24ob3RoZXIpIHtcblx0aWYgKHRoaXMgPT09IG90aGVyKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSBpZiAoIShvdGhlciBpbnN0YW5jZW9mIEFORCkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHRoaXMub3BuZHMgPT09IG90aGVyLm9wbmRzO1xuXHR9XG59O1xuXG5BTkQucHJvdG90eXBlLnVwZGF0ZUhhc2hDb2RlID0gZnVuY3Rpb24oaGFzaCkge1xuICAgIGhhc2gudXBkYXRlKHRoaXMub3BuZHMsIFwiQU5EXCIpO1xufTtcbi8vXG4vLyB7QGluaGVyaXREb2N9XG4vL1xuLy8gPHA+XG4vLyBUaGUgZXZhbHVhdGlvbiBvZiBwcmVkaWNhdGVzIGJ5IHRoaXMgY29udGV4dCBpcyBzaG9ydC1jaXJjdWl0aW5nLCBidXRcbi8vIHVub3JkZXJlZC48L3A+XG4vL1xuQU5ELnByb3RvdHlwZS5ldmFsdWF0ZSA9IGZ1bmN0aW9uKHBhcnNlciwgb3V0ZXJDb250ZXh0KSB7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5vcG5kcy5sZW5ndGg7IGkrKykge1xuXHRcdGlmICghdGhpcy5vcG5kc1tpXS5ldmFsdWF0ZShwYXJzZXIsIG91dGVyQ29udGV4dCkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHRydWU7XG59O1xuXG5BTkQucHJvdG90eXBlLmV2YWxQcmVjZWRlbmNlID0gZnVuY3Rpb24ocGFyc2VyLCBvdXRlckNvbnRleHQpIHtcblx0dmFyIGRpZmZlcnMgPSBmYWxzZTtcblx0dmFyIG9wZXJhbmRzID0gW107XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5vcG5kcy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBjb250ZXh0ID0gdGhpcy5vcG5kc1tpXTtcblx0XHR2YXIgZXZhbHVhdGVkID0gY29udGV4dC5ldmFsUHJlY2VkZW5jZShwYXJzZXIsIG91dGVyQ29udGV4dCk7XG5cdFx0ZGlmZmVycyB8PSAoZXZhbHVhdGVkICE9PSBjb250ZXh0KTtcblx0XHRpZiAoZXZhbHVhdGVkID09PSBudWxsKSB7XG5cdFx0XHQvLyBUaGUgQU5EIGNvbnRleHQgaXMgZmFsc2UgaWYgYW55IGVsZW1lbnQgaXMgZmFsc2Vcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH0gZWxzZSBpZiAoZXZhbHVhdGVkICE9PSBTZW1hbnRpY0NvbnRleHQuTk9ORSkge1xuXHRcdFx0Ly8gUmVkdWNlIHRoZSByZXN1bHQgYnkgc2tpcHBpbmcgdHJ1ZSBlbGVtZW50c1xuXHRcdFx0b3BlcmFuZHMucHVzaChldmFsdWF0ZWQpO1xuXHRcdH1cblx0fVxuXHRpZiAoIWRpZmZlcnMpIHtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHRpZiAob3BlcmFuZHMubGVuZ3RoID09PSAwKSB7XG5cdFx0Ly8gYWxsIGVsZW1lbnRzIHdlcmUgdHJ1ZSwgc28gdGhlIEFORCBjb250ZXh0IGlzIHRydWVcblx0XHRyZXR1cm4gU2VtYW50aWNDb250ZXh0Lk5PTkU7XG5cdH1cblx0dmFyIHJlc3VsdCA9IG51bGw7XG5cdG9wZXJhbmRzLm1hcChmdW5jdGlvbihvKSB7XG5cdFx0cmVzdWx0ID0gcmVzdWx0ID09PSBudWxsID8gbyA6IFNlbWFudGljQ29udGV4dC5hbmRDb250ZXh0KHJlc3VsdCwgbyk7XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcblxuQU5ELnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgcyA9IFwiXCI7XG5cdHRoaXMub3BuZHMubWFwKGZ1bmN0aW9uKG8pIHtcblx0XHRzICs9IFwiJiYgXCIgKyBvLnRvU3RyaW5nKCk7XG5cdH0pO1xuXHRyZXR1cm4gcy5sZW5ndGggPiAzID8gcy5zbGljZSgzKSA6IHM7XG59O1xuXG4vL1xuLy8gQSBzZW1hbnRpYyBjb250ZXh0IHdoaWNoIGlzIHRydWUgd2hlbmV2ZXIgYXQgbGVhc3Qgb25lIG9mIHRoZSBjb250YWluZWRcbi8vIGNvbnRleHRzIGlzIHRydWUuXG4vL1xuZnVuY3Rpb24gT1IoYSwgYikge1xuXHRTZW1hbnRpY0NvbnRleHQuY2FsbCh0aGlzKTtcblx0dmFyIG9wZXJhbmRzID0gbmV3IFNldCgpO1xuXHRpZiAoYSBpbnN0YW5jZW9mIE9SKSB7XG5cdFx0YS5vcG5kcy5tYXAoZnVuY3Rpb24obykge1xuXHRcdFx0b3BlcmFuZHMuYWRkKG8pO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG9wZXJhbmRzLmFkZChhKTtcblx0fVxuXHRpZiAoYiBpbnN0YW5jZW9mIE9SKSB7XG5cdFx0Yi5vcG5kcy5tYXAoZnVuY3Rpb24obykge1xuXHRcdFx0b3BlcmFuZHMuYWRkKG8pO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG9wZXJhbmRzLmFkZChiKTtcblx0fVxuXG5cdHZhciBwcmVjZWRlbmNlUHJlZGljYXRlcyA9IFByZWNlZGVuY2VQcmVkaWNhdGUuZmlsdGVyUHJlY2VkZW5jZVByZWRpY2F0ZXMob3BlcmFuZHMpO1xuXHRpZiAocHJlY2VkZW5jZVByZWRpY2F0ZXMubGVuZ3RoID4gMCkge1xuXHRcdC8vIGludGVyZXN0ZWQgaW4gdGhlIHRyYW5zaXRpb24gd2l0aCB0aGUgaGlnaGVzdCBwcmVjZWRlbmNlXG5cdFx0dmFyIHMgPSBwcmVjZWRlbmNlUHJlZGljYXRlcy5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcblx0XHRcdHJldHVybiBhLmNvbXBhcmVUbyhiKTtcblx0XHR9KTtcblx0XHR2YXIgcmVkdWNlZCA9IHNbcy5sZW5ndGgtMV07XG5cdFx0b3BlcmFuZHMuYWRkKHJlZHVjZWQpO1xuXHR9XG5cdHRoaXMub3BuZHMgPSBvcGVyYW5kcy52YWx1ZXMoKTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbk9SLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2VtYW50aWNDb250ZXh0LnByb3RvdHlwZSk7XG5PUi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBPUjtcblxuT1IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gZnVuY3Rpb24ob3RoZXIpIHtcblx0aWYgKHRoaXMgPT09IG90aGVyKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSBpZiAoIShvdGhlciBpbnN0YW5jZW9mIE9SKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdGhpcy5vcG5kcyA9PT0gb3RoZXIub3BuZHM7XG5cdH1cbn07XG5cbk9SLnByb3RvdHlwZS51cGRhdGVIYXNoQ29kZSA9IGZ1bmN0aW9uKGhhc2gpIHtcbiAgICBoYXNoLnVwZGF0ZSh0aGlzLm9wbmRzLCBcIk9SXCIpO1xufTtcblxuLy8gPHA+XG4vLyBUaGUgZXZhbHVhdGlvbiBvZiBwcmVkaWNhdGVzIGJ5IHRoaXMgY29udGV4dCBpcyBzaG9ydC1jaXJjdWl0aW5nLCBidXRcbi8vIHVub3JkZXJlZC48L3A+XG4vL1xuT1IucHJvdG90eXBlLmV2YWx1YXRlID0gZnVuY3Rpb24ocGFyc2VyLCBvdXRlckNvbnRleHQpIHtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm9wbmRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0aWYgKHRoaXMub3BuZHNbaV0uZXZhbHVhdGUocGFyc2VyLCBvdXRlckNvbnRleHQpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcblxuT1IucHJvdG90eXBlLmV2YWxQcmVjZWRlbmNlID0gZnVuY3Rpb24ocGFyc2VyLCBvdXRlckNvbnRleHQpIHtcblx0dmFyIGRpZmZlcnMgPSBmYWxzZTtcblx0dmFyIG9wZXJhbmRzID0gW107XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5vcG5kcy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBjb250ZXh0ID0gdGhpcy5vcG5kc1tpXTtcblx0XHR2YXIgZXZhbHVhdGVkID0gY29udGV4dC5ldmFsUHJlY2VkZW5jZShwYXJzZXIsIG91dGVyQ29udGV4dCk7XG5cdFx0ZGlmZmVycyB8PSAoZXZhbHVhdGVkICE9PSBjb250ZXh0KTtcblx0XHRpZiAoZXZhbHVhdGVkID09PSBTZW1hbnRpY0NvbnRleHQuTk9ORSkge1xuXHRcdFx0Ly8gVGhlIE9SIGNvbnRleHQgaXMgdHJ1ZSBpZiBhbnkgZWxlbWVudCBpcyB0cnVlXG5cdFx0XHRyZXR1cm4gU2VtYW50aWNDb250ZXh0Lk5PTkU7XG5cdFx0fSBlbHNlIGlmIChldmFsdWF0ZWQgIT09IG51bGwpIHtcblx0XHRcdC8vIFJlZHVjZSB0aGUgcmVzdWx0IGJ5IHNraXBwaW5nIGZhbHNlIGVsZW1lbnRzXG5cdFx0XHRvcGVyYW5kcy5wdXNoKGV2YWx1YXRlZCk7XG5cdFx0fVxuXHR9XG5cdGlmICghZGlmZmVycykge1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdGlmIChvcGVyYW5kcy5sZW5ndGggPT09IDApIHtcblx0XHQvLyBhbGwgZWxlbWVudHMgd2VyZSBmYWxzZSwgc28gdGhlIE9SIGNvbnRleHQgaXMgZmFsc2Vcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHR2YXIgcmVzdWx0ID0gbnVsbDtcblx0b3BlcmFuZHMubWFwKGZ1bmN0aW9uKG8pIHtcblx0XHRyZXR1cm4gcmVzdWx0ID09PSBudWxsID8gbyA6IFNlbWFudGljQ29udGV4dC5vckNvbnRleHQocmVzdWx0LCBvKTtcblx0fSk7XG5cdHJldHVybiByZXN1bHQ7XG59O1xuXG5PUi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0dmFyIHMgPSBcIlwiO1xuXHR0aGlzLm9wbmRzLm1hcChmdW5jdGlvbihvKSB7XG5cdFx0cyArPSBcInx8IFwiICsgby50b1N0cmluZygpO1xuXHR9KTtcblx0cmV0dXJuIHMubGVuZ3RoID4gMyA/IHMuc2xpY2UoMykgOiBzO1xufTtcblxuZXhwb3J0cy5TZW1hbnRpY0NvbnRleHQgPSBTZW1hbnRpY0NvbnRleHQ7XG5leHBvcnRzLlByZWNlZGVuY2VQcmVkaWNhdGUgPSBQcmVjZWRlbmNlUHJlZGljYXRlO1xuZXhwb3J0cy5QcmVkaWNhdGUgPSBQcmVkaWNhdGU7XG4iLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vL1xuXG4vLyAgQW4gQVROIHRyYW5zaXRpb24gYmV0d2VlbiBhbnkgdHdvIEFUTiBzdGF0ZXMuICBTdWJjbGFzc2VzIGRlZmluZVxuLy8gIGF0b20sIHNldCwgZXBzaWxvbiwgYWN0aW9uLCBwcmVkaWNhdGUsIHJ1bGUgdHJhbnNpdGlvbnMuXG4vL1xuLy8gIDxwPlRoaXMgaXMgYSBvbmUgd2F5IGxpbmsuICBJdCBlbWFuYXRlcyBmcm9tIGEgc3RhdGUgKHVzdWFsbHkgdmlhIGEgbGlzdCBvZlxuLy8gIHRyYW5zaXRpb25zKSBhbmQgaGFzIGEgdGFyZ2V0IHN0YXRlLjwvcD5cbi8vXG4vLyAgPHA+U2luY2Ugd2UgbmV2ZXIgaGF2ZSB0byBjaGFuZ2UgdGhlIEFUTiB0cmFuc2l0aW9ucyBvbmNlIHdlIGNvbnN0cnVjdCBpdCxcbi8vICB3ZSBjYW4gZml4IHRoZXNlIHRyYW5zaXRpb25zIGFzIHNwZWNpZmljIGNsYXNzZXMuIFRoZSBERkEgdHJhbnNpdGlvbnNcbi8vICBvbiB0aGUgb3RoZXIgaGFuZCBuZWVkIHRvIHVwZGF0ZSB0aGUgbGFiZWxzIGFzIGl0IGFkZHMgdHJhbnNpdGlvbnMgdG9cbi8vICB0aGUgc3RhdGVzLiBXZSdsbCB1c2UgdGhlIHRlcm0gRWRnZSBmb3IgdGhlIERGQSB0byBkaXN0aW5ndWlzaCB0aGVtIGZyb21cbi8vICBBVE4gdHJhbnNpdGlvbnMuPC9wPlxuXG52YXIgVG9rZW4gPSByZXF1aXJlKCcuLy4uL1Rva2VuJykuVG9rZW47XG52YXIgSW50ZXJ2YWwgPSByZXF1aXJlKCcuLy4uL0ludGVydmFsU2V0JykuSW50ZXJ2YWw7XG52YXIgSW50ZXJ2YWxTZXQgPSByZXF1aXJlKCcuLy4uL0ludGVydmFsU2V0JykuSW50ZXJ2YWxTZXQ7XG52YXIgUHJlZGljYXRlID0gcmVxdWlyZSgnLi9TZW1hbnRpY0NvbnRleHQnKS5QcmVkaWNhdGU7XG52YXIgUHJlY2VkZW5jZVByZWRpY2F0ZSA9IHJlcXVpcmUoJy4vU2VtYW50aWNDb250ZXh0JykuUHJlY2VkZW5jZVByZWRpY2F0ZTtcblxuZnVuY3Rpb24gVHJhbnNpdGlvbiAodGFyZ2V0KSB7XG4gICAgLy8gVGhlIHRhcmdldCBvZiB0aGlzIHRyYW5zaXRpb24uXG4gICAgaWYgKHRhcmdldD09PXVuZGVmaW5lZCB8fCB0YXJnZXQ9PT1udWxsKSB7XG4gICAgICAgIHRocm93IFwidGFyZ2V0IGNhbm5vdCBiZSBudWxsLlwiO1xuICAgIH1cbiAgICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgICAvLyBBcmUgd2UgZXBzaWxvbiwgYWN0aW9uLCBzZW1wcmVkP1xuICAgIHRoaXMuaXNFcHNpbG9uID0gZmFsc2U7XG4gICAgdGhpcy5sYWJlbCA9IG51bGw7XG4gICAgcmV0dXJuIHRoaXM7XG59XG4gICAgLy8gY29uc3RhbnRzIGZvciBzZXJpYWxpemF0aW9uXG5UcmFuc2l0aW9uLkVQU0lMT04gPSAxO1xuVHJhbnNpdGlvbi5SQU5HRSA9IDI7XG5UcmFuc2l0aW9uLlJVTEUgPSAzO1xuVHJhbnNpdGlvbi5QUkVESUNBVEUgPSA0OyAvLyBlLmcuLCB7aXNUeXBlKGlucHV0LkxUKDEpKX0/XG5UcmFuc2l0aW9uLkFUT00gPSA1O1xuVHJhbnNpdGlvbi5BQ1RJT04gPSA2O1xuVHJhbnNpdGlvbi5TRVQgPSA3OyAvLyB+KEF8Qikgb3IgfmF0b20sIHdpbGRjYXJkLCB3aGljaCBjb252ZXJ0IHRvIG5leHQgMlxuVHJhbnNpdGlvbi5OT1RfU0VUID0gODtcblRyYW5zaXRpb24uV0lMRENBUkQgPSA5O1xuVHJhbnNpdGlvbi5QUkVDRURFTkNFID0gMTA7XG5cblRyYW5zaXRpb24uc2VyaWFsaXphdGlvbk5hbWVzID0gW1xuICAgICAgICAgICAgXCJJTlZBTElEXCIsXG4gICAgICAgICAgICBcIkVQU0lMT05cIixcbiAgICAgICAgICAgIFwiUkFOR0VcIixcbiAgICAgICAgICAgIFwiUlVMRVwiLFxuICAgICAgICAgICAgXCJQUkVESUNBVEVcIixcbiAgICAgICAgICAgIFwiQVRPTVwiLFxuICAgICAgICAgICAgXCJBQ1RJT05cIixcbiAgICAgICAgICAgIFwiU0VUXCIsXG4gICAgICAgICAgICBcIk5PVF9TRVRcIixcbiAgICAgICAgICAgIFwiV0lMRENBUkRcIixcbiAgICAgICAgICAgIFwiUFJFQ0VERU5DRVwiXG4gICAgICAgIF07XG5cblRyYW5zaXRpb24uc2VyaWFsaXphdGlvblR5cGVzID0ge1xuICAgICAgICBFcHNpbG9uVHJhbnNpdGlvbjogVHJhbnNpdGlvbi5FUFNJTE9OLFxuICAgICAgICBSYW5nZVRyYW5zaXRpb246IFRyYW5zaXRpb24uUkFOR0UsXG4gICAgICAgIFJ1bGVUcmFuc2l0aW9uOiBUcmFuc2l0aW9uLlJVTEUsXG4gICAgICAgIFByZWRpY2F0ZVRyYW5zaXRpb246IFRyYW5zaXRpb24uUFJFRElDQVRFLFxuICAgICAgICBBdG9tVHJhbnNpdGlvbjogVHJhbnNpdGlvbi5BVE9NLFxuICAgICAgICBBY3Rpb25UcmFuc2l0aW9uOiBUcmFuc2l0aW9uLkFDVElPTixcbiAgICAgICAgU2V0VHJhbnNpdGlvbjogVHJhbnNpdGlvbi5TRVQsXG4gICAgICAgIE5vdFNldFRyYW5zaXRpb246IFRyYW5zaXRpb24uTk9UX1NFVCxcbiAgICAgICAgV2lsZGNhcmRUcmFuc2l0aW9uOiBUcmFuc2l0aW9uLldJTERDQVJELFxuICAgICAgICBQcmVjZWRlbmNlUHJlZGljYXRlVHJhbnNpdGlvbjogVHJhbnNpdGlvbi5QUkVDRURFTkNFXG4gICAgfTtcblxuXG4vLyBUT0RPOiBtYWtlIGFsbCB0cmFuc2l0aW9ucyBzZXRzPyBubywgc2hvdWxkIHJlbW92ZSBzZXQgZWRnZXNcbmZ1bmN0aW9uIEF0b21UcmFuc2l0aW9uKHRhcmdldCwgbGFiZWwpIHtcblx0VHJhbnNpdGlvbi5jYWxsKHRoaXMsIHRhcmdldCk7XG5cdHRoaXMubGFiZWxfID0gbGFiZWw7IC8vIFRoZSB0b2tlbiB0eXBlIG9yIGNoYXJhY3RlciB2YWx1ZTsgb3IsIHNpZ25pZmllcyBzcGVjaWFsIGxhYmVsLlxuICAgIHRoaXMubGFiZWwgPSB0aGlzLm1ha2VMYWJlbCgpO1xuICAgIHRoaXMuc2VyaWFsaXphdGlvblR5cGUgPSBUcmFuc2l0aW9uLkFUT007XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkF0b21UcmFuc2l0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVHJhbnNpdGlvbi5wcm90b3R5cGUpO1xuQXRvbVRyYW5zaXRpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQXRvbVRyYW5zaXRpb247XG5cbkF0b21UcmFuc2l0aW9uLnByb3RvdHlwZS5tYWtlTGFiZWwgPSBmdW5jdGlvbigpIHtcblx0dmFyIHMgPSBuZXcgSW50ZXJ2YWxTZXQoKTtcbiAgICBzLmFkZE9uZSh0aGlzLmxhYmVsXyk7XG4gICAgcmV0dXJuIHM7XG59O1xuXG5BdG9tVHJhbnNpdGlvbi5wcm90b3R5cGUubWF0Y2hlcyA9IGZ1bmN0aW9uKCBzeW1ib2wsIG1pblZvY2FiU3ltYm9sLCAgbWF4Vm9jYWJTeW1ib2wpIHtcbiAgICByZXR1cm4gdGhpcy5sYWJlbF8gPT09IHN5bWJvbDtcbn07XG5cbkF0b21UcmFuc2l0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5sYWJlbF87XG59O1xuXG5mdW5jdGlvbiBSdWxlVHJhbnNpdGlvbihydWxlU3RhcnQsIHJ1bGVJbmRleCwgcHJlY2VkZW5jZSwgZm9sbG93U3RhdGUpIHtcblx0VHJhbnNpdGlvbi5jYWxsKHRoaXMsIHJ1bGVTdGFydCk7XG4gICAgdGhpcy5ydWxlSW5kZXggPSBydWxlSW5kZXg7IC8vIHB0ciB0byB0aGUgcnVsZSBkZWZpbml0aW9uIG9iamVjdCBmb3IgdGhpcyBydWxlIHJlZlxuICAgIHRoaXMucHJlY2VkZW5jZSA9IHByZWNlZGVuY2U7XG4gICAgdGhpcy5mb2xsb3dTdGF0ZSA9IGZvbGxvd1N0YXRlOyAvLyB3aGF0IG5vZGUgdG8gYmVnaW4gY29tcHV0YXRpb25zIGZvbGxvd2luZyByZWYgdG8gcnVsZVxuICAgIHRoaXMuc2VyaWFsaXphdGlvblR5cGUgPSBUcmFuc2l0aW9uLlJVTEU7XG4gICAgdGhpcy5pc0Vwc2lsb24gPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5SdWxlVHJhbnNpdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRyYW5zaXRpb24ucHJvdG90eXBlKTtcblJ1bGVUcmFuc2l0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJ1bGVUcmFuc2l0aW9uO1xuXG5SdWxlVHJhbnNpdGlvbi5wcm90b3R5cGUubWF0Y2hlcyA9IGZ1bmN0aW9uKHN5bWJvbCwgbWluVm9jYWJTeW1ib2wsICBtYXhWb2NhYlN5bWJvbCkge1xuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG5cbmZ1bmN0aW9uIEVwc2lsb25UcmFuc2l0aW9uKHRhcmdldCwgb3V0ZXJtb3N0UHJlY2VkZW5jZVJldHVybikge1xuXHRUcmFuc2l0aW9uLmNhbGwodGhpcywgdGFyZ2V0KTtcbiAgICB0aGlzLnNlcmlhbGl6YXRpb25UeXBlID0gVHJhbnNpdGlvbi5FUFNJTE9OO1xuICAgIHRoaXMuaXNFcHNpbG9uID0gdHJ1ZTtcbiAgICB0aGlzLm91dGVybW9zdFByZWNlZGVuY2VSZXR1cm4gPSBvdXRlcm1vc3RQcmVjZWRlbmNlUmV0dXJuO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5FcHNpbG9uVHJhbnNpdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRyYW5zaXRpb24ucHJvdG90eXBlKTtcbkVwc2lsb25UcmFuc2l0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEVwc2lsb25UcmFuc2l0aW9uO1xuXG5FcHNpbG9uVHJhbnNpdGlvbi5wcm90b3R5cGUubWF0Y2hlcyA9IGZ1bmN0aW9uKCBzeW1ib2wsIG1pblZvY2FiU3ltYm9sLCAgbWF4Vm9jYWJTeW1ib2wpIHtcblx0cmV0dXJuIGZhbHNlO1xufTtcblxuRXBzaWxvblRyYW5zaXRpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiBcImVwc2lsb25cIjtcbn07XG5cbmZ1bmN0aW9uIFJhbmdlVHJhbnNpdGlvbih0YXJnZXQsIHN0YXJ0LCBzdG9wKSB7XG5cdFRyYW5zaXRpb24uY2FsbCh0aGlzLCB0YXJnZXQpO1xuXHR0aGlzLnNlcmlhbGl6YXRpb25UeXBlID0gVHJhbnNpdGlvbi5SQU5HRTtcbiAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7XG4gICAgdGhpcy5zdG9wID0gc3RvcDtcbiAgICB0aGlzLmxhYmVsID0gdGhpcy5tYWtlTGFiZWwoKTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuUmFuZ2VUcmFuc2l0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVHJhbnNpdGlvbi5wcm90b3R5cGUpO1xuUmFuZ2VUcmFuc2l0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJhbmdlVHJhbnNpdGlvbjtcblxuUmFuZ2VUcmFuc2l0aW9uLnByb3RvdHlwZS5tYWtlTGFiZWwgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcyA9IG5ldyBJbnRlcnZhbFNldCgpO1xuICAgIHMuYWRkUmFuZ2UodGhpcy5zdGFydCwgdGhpcy5zdG9wKTtcbiAgICByZXR1cm4gcztcbn07XG5cblJhbmdlVHJhbnNpdGlvbi5wcm90b3R5cGUubWF0Y2hlcyA9IGZ1bmN0aW9uKHN5bWJvbCwgbWluVm9jYWJTeW1ib2wsICBtYXhWb2NhYlN5bWJvbCkge1xuXHRyZXR1cm4gc3ltYm9sID49IHRoaXMuc3RhcnQgJiYgc3ltYm9sIDw9IHRoaXMuc3RvcDtcbn07XG5cblJhbmdlVHJhbnNpdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIFwiJ1wiICsgU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLnN0YXJ0KSArIFwiJy4uJ1wiICsgU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLnN0b3ApICsgXCInXCI7XG59O1xuXG5mdW5jdGlvbiBBYnN0cmFjdFByZWRpY2F0ZVRyYW5zaXRpb24odGFyZ2V0KSB7XG5cdFRyYW5zaXRpb24uY2FsbCh0aGlzLCB0YXJnZXQpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuQWJzdHJhY3RQcmVkaWNhdGVUcmFuc2l0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVHJhbnNpdGlvbi5wcm90b3R5cGUpO1xuQWJzdHJhY3RQcmVkaWNhdGVUcmFuc2l0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEFic3RyYWN0UHJlZGljYXRlVHJhbnNpdGlvbjtcblxuZnVuY3Rpb24gUHJlZGljYXRlVHJhbnNpdGlvbih0YXJnZXQsIHJ1bGVJbmRleCwgcHJlZEluZGV4LCBpc0N0eERlcGVuZGVudCkge1xuXHRBYnN0cmFjdFByZWRpY2F0ZVRyYW5zaXRpb24uY2FsbCh0aGlzLCB0YXJnZXQpO1xuICAgIHRoaXMuc2VyaWFsaXphdGlvblR5cGUgPSBUcmFuc2l0aW9uLlBSRURJQ0FURTtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IHJ1bGVJbmRleDtcbiAgICB0aGlzLnByZWRJbmRleCA9IHByZWRJbmRleDtcbiAgICB0aGlzLmlzQ3R4RGVwZW5kZW50ID0gaXNDdHhEZXBlbmRlbnQ7IC8vIGUuZy4sICRpIHJlZiBpbiBwcmVkXG4gICAgdGhpcy5pc0Vwc2lsb24gPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5QcmVkaWNhdGVUcmFuc2l0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQWJzdHJhY3RQcmVkaWNhdGVUcmFuc2l0aW9uLnByb3RvdHlwZSk7XG5QcmVkaWNhdGVUcmFuc2l0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByZWRpY2F0ZVRyYW5zaXRpb247XG5cblByZWRpY2F0ZVRyYW5zaXRpb24ucHJvdG90eXBlLm1hdGNoZXMgPSBmdW5jdGlvbihzeW1ib2wsIG1pblZvY2FiU3ltYm9sLCAgbWF4Vm9jYWJTeW1ib2wpIHtcblx0cmV0dXJuIGZhbHNlO1xufTtcblxuUHJlZGljYXRlVHJhbnNpdGlvbi5wcm90b3R5cGUuZ2V0UHJlZGljYXRlID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiBuZXcgUHJlZGljYXRlKHRoaXMucnVsZUluZGV4LCB0aGlzLnByZWRJbmRleCwgdGhpcy5pc0N0eERlcGVuZGVudCk7XG59O1xuXG5QcmVkaWNhdGVUcmFuc2l0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gXCJwcmVkX1wiICsgdGhpcy5ydWxlSW5kZXggKyBcIjpcIiArIHRoaXMucHJlZEluZGV4O1xufTtcblxuZnVuY3Rpb24gQWN0aW9uVHJhbnNpdGlvbih0YXJnZXQsIHJ1bGVJbmRleCwgYWN0aW9uSW5kZXgsIGlzQ3R4RGVwZW5kZW50KSB7XG5cdFRyYW5zaXRpb24uY2FsbCh0aGlzLCB0YXJnZXQpO1xuICAgIHRoaXMuc2VyaWFsaXphdGlvblR5cGUgPSBUcmFuc2l0aW9uLkFDVElPTjtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IHJ1bGVJbmRleDtcbiAgICB0aGlzLmFjdGlvbkluZGV4ID0gYWN0aW9uSW5kZXg9PT11bmRlZmluZWQgPyAtMSA6IGFjdGlvbkluZGV4O1xuICAgIHRoaXMuaXNDdHhEZXBlbmRlbnQgPSBpc0N0eERlcGVuZGVudD09PXVuZGVmaW5lZCA/IGZhbHNlIDogaXNDdHhEZXBlbmRlbnQ7IC8vIGUuZy4sICRpIHJlZiBpbiBwcmVkXG4gICAgdGhpcy5pc0Vwc2lsb24gPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5BY3Rpb25UcmFuc2l0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVHJhbnNpdGlvbi5wcm90b3R5cGUpO1xuQWN0aW9uVHJhbnNpdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBY3Rpb25UcmFuc2l0aW9uO1xuXG5cbkFjdGlvblRyYW5zaXRpb24ucHJvdG90eXBlLm1hdGNoZXMgPSBmdW5jdGlvbihzeW1ib2wsIG1pblZvY2FiU3ltYm9sLCAgbWF4Vm9jYWJTeW1ib2wpIHtcblx0cmV0dXJuIGZhbHNlO1xufTtcblxuQWN0aW9uVHJhbnNpdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIFwiYWN0aW9uX1wiICsgdGhpcy5ydWxlSW5kZXggKyBcIjpcIiArIHRoaXMuYWN0aW9uSW5kZXg7XG59O1xuXG5cbi8vIEEgdHJhbnNpdGlvbiBjb250YWluaW5nIGEgc2V0IG9mIHZhbHVlcy5cbmZ1bmN0aW9uIFNldFRyYW5zaXRpb24odGFyZ2V0LCBzZXQpIHtcblx0VHJhbnNpdGlvbi5jYWxsKHRoaXMsIHRhcmdldCk7XG5cdHRoaXMuc2VyaWFsaXphdGlvblR5cGUgPSBUcmFuc2l0aW9uLlNFVDtcbiAgICBpZiAoc2V0ICE9PXVuZGVmaW5lZCAmJiBzZXQgIT09bnVsbCkge1xuICAgICAgICB0aGlzLmxhYmVsID0gc2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubGFiZWwgPSBuZXcgSW50ZXJ2YWxTZXQoKTtcbiAgICAgICAgdGhpcy5sYWJlbC5hZGRPbmUoVG9rZW4uSU5WQUxJRF9UWVBFKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cblNldFRyYW5zaXRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUcmFuc2l0aW9uLnByb3RvdHlwZSk7XG5TZXRUcmFuc2l0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNldFRyYW5zaXRpb247XG5cblNldFRyYW5zaXRpb24ucHJvdG90eXBlLm1hdGNoZXMgPSBmdW5jdGlvbihzeW1ib2wsIG1pblZvY2FiU3ltYm9sLCAgbWF4Vm9jYWJTeW1ib2wpIHtcblx0cmV0dXJuIHRoaXMubGFiZWwuY29udGFpbnMoc3ltYm9sKTtcbn07XG5cblxuU2V0VHJhbnNpdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMubGFiZWwudG9TdHJpbmcoKTtcbn07XG5cbmZ1bmN0aW9uIE5vdFNldFRyYW5zaXRpb24odGFyZ2V0LCBzZXQpIHtcblx0U2V0VHJhbnNpdGlvbi5jYWxsKHRoaXMsIHRhcmdldCwgc2V0KTtcblx0dGhpcy5zZXJpYWxpemF0aW9uVHlwZSA9IFRyYW5zaXRpb24uTk9UX1NFVDtcblx0cmV0dXJuIHRoaXM7XG59XG5cbk5vdFNldFRyYW5zaXRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTZXRUcmFuc2l0aW9uLnByb3RvdHlwZSk7XG5Ob3RTZXRUcmFuc2l0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE5vdFNldFRyYW5zaXRpb247XG5cbk5vdFNldFRyYW5zaXRpb24ucHJvdG90eXBlLm1hdGNoZXMgPSBmdW5jdGlvbihzeW1ib2wsIG1pblZvY2FiU3ltYm9sLCAgbWF4Vm9jYWJTeW1ib2wpIHtcblx0cmV0dXJuIHN5bWJvbCA+PSBtaW5Wb2NhYlN5bWJvbCAmJiBzeW1ib2wgPD0gbWF4Vm9jYWJTeW1ib2wgJiZcblx0XHRcdCFTZXRUcmFuc2l0aW9uLnByb3RvdHlwZS5tYXRjaGVzLmNhbGwodGhpcywgc3ltYm9sLCBtaW5Wb2NhYlN5bWJvbCwgbWF4Vm9jYWJTeW1ib2wpO1xufTtcblxuTm90U2V0VHJhbnNpdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuICd+JyArIFNldFRyYW5zaXRpb24ucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGhpcyk7XG59O1xuXG5mdW5jdGlvbiBXaWxkY2FyZFRyYW5zaXRpb24odGFyZ2V0KSB7XG5cdFRyYW5zaXRpb24uY2FsbCh0aGlzLCB0YXJnZXQpO1xuXHR0aGlzLnNlcmlhbGl6YXRpb25UeXBlID0gVHJhbnNpdGlvbi5XSUxEQ0FSRDtcblx0cmV0dXJuIHRoaXM7XG59XG5cbldpbGRjYXJkVHJhbnNpdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRyYW5zaXRpb24ucHJvdG90eXBlKTtcbldpbGRjYXJkVHJhbnNpdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBXaWxkY2FyZFRyYW5zaXRpb247XG5cblxuV2lsZGNhcmRUcmFuc2l0aW9uLnByb3RvdHlwZS5tYXRjaGVzID0gZnVuY3Rpb24oc3ltYm9sLCBtaW5Wb2NhYlN5bWJvbCwgIG1heFZvY2FiU3ltYm9sKSB7XG5cdHJldHVybiBzeW1ib2wgPj0gbWluVm9jYWJTeW1ib2wgJiYgc3ltYm9sIDw9IG1heFZvY2FiU3ltYm9sO1xufTtcblxuV2lsZGNhcmRUcmFuc2l0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gXCIuXCI7XG59O1xuXG5mdW5jdGlvbiBQcmVjZWRlbmNlUHJlZGljYXRlVHJhbnNpdGlvbih0YXJnZXQsIHByZWNlZGVuY2UpIHtcblx0QWJzdHJhY3RQcmVkaWNhdGVUcmFuc2l0aW9uLmNhbGwodGhpcywgdGFyZ2V0KTtcbiAgICB0aGlzLnNlcmlhbGl6YXRpb25UeXBlID0gVHJhbnNpdGlvbi5QUkVDRURFTkNFO1xuICAgIHRoaXMucHJlY2VkZW5jZSA9IHByZWNlZGVuY2U7XG4gICAgdGhpcy5pc0Vwc2lsb24gPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5QcmVjZWRlbmNlUHJlZGljYXRlVHJhbnNpdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFic3RyYWN0UHJlZGljYXRlVHJhbnNpdGlvbi5wcm90b3R5cGUpO1xuUHJlY2VkZW5jZVByZWRpY2F0ZVRyYW5zaXRpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUHJlY2VkZW5jZVByZWRpY2F0ZVRyYW5zaXRpb247XG5cblByZWNlZGVuY2VQcmVkaWNhdGVUcmFuc2l0aW9uLnByb3RvdHlwZS5tYXRjaGVzID0gZnVuY3Rpb24oc3ltYm9sLCBtaW5Wb2NhYlN5bWJvbCwgIG1heFZvY2FiU3ltYm9sKSB7XG5cdHJldHVybiBmYWxzZTtcbn07XG5cblByZWNlZGVuY2VQcmVkaWNhdGVUcmFuc2l0aW9uLnByb3RvdHlwZS5nZXRQcmVkaWNhdGUgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIG5ldyBQcmVjZWRlbmNlUHJlZGljYXRlKHRoaXMucHJlY2VkZW5jZSk7XG59O1xuXG5QcmVjZWRlbmNlUHJlZGljYXRlVHJhbnNpdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMucHJlY2VkZW5jZSArIFwiID49IF9wXCI7XG59O1xuXG5leHBvcnRzLlRyYW5zaXRpb24gPSBUcmFuc2l0aW9uO1xuZXhwb3J0cy5BdG9tVHJhbnNpdGlvbiA9IEF0b21UcmFuc2l0aW9uO1xuZXhwb3J0cy5TZXRUcmFuc2l0aW9uID0gU2V0VHJhbnNpdGlvbjtcbmV4cG9ydHMuTm90U2V0VHJhbnNpdGlvbiA9IE5vdFNldFRyYW5zaXRpb247XG5leHBvcnRzLlJ1bGVUcmFuc2l0aW9uID0gUnVsZVRyYW5zaXRpb247XG5leHBvcnRzLkFjdGlvblRyYW5zaXRpb24gPSBBY3Rpb25UcmFuc2l0aW9uO1xuZXhwb3J0cy5FcHNpbG9uVHJhbnNpdGlvbiA9IEVwc2lsb25UcmFuc2l0aW9uO1xuZXhwb3J0cy5SYW5nZVRyYW5zaXRpb24gPSBSYW5nZVRyYW5zaXRpb247XG5leHBvcnRzLldpbGRjYXJkVHJhbnNpdGlvbiA9IFdpbGRjYXJkVHJhbnNpdGlvbjtcbmV4cG9ydHMuUHJlZGljYXRlVHJhbnNpdGlvbiA9IFByZWRpY2F0ZVRyYW5zaXRpb247XG5leHBvcnRzLlByZWNlZGVuY2VQcmVkaWNhdGVUcmFuc2l0aW9uID0gUHJlY2VkZW5jZVByZWRpY2F0ZVRyYW5zaXRpb247XG5leHBvcnRzLkFic3RyYWN0UHJlZGljYXRlVHJhbnNpdGlvbiA9IEFic3RyYWN0UHJlZGljYXRlVHJhbnNpdGlvbjsiLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG5cbmV4cG9ydHMuQVROID0gcmVxdWlyZSgnLi9BVE4nKS5BVE47XG5leHBvcnRzLkFUTkRlc2VyaWFsaXplciA9IHJlcXVpcmUoJy4vQVRORGVzZXJpYWxpemVyJykuQVRORGVzZXJpYWxpemVyO1xuZXhwb3J0cy5MZXhlckFUTlNpbXVsYXRvciA9IHJlcXVpcmUoJy4vTGV4ZXJBVE5TaW11bGF0b3InKS5MZXhlckFUTlNpbXVsYXRvcjtcbmV4cG9ydHMuUGFyc2VyQVROU2ltdWxhdG9yID0gcmVxdWlyZSgnLi9QYXJzZXJBVE5TaW11bGF0b3InKS5QYXJzZXJBVE5TaW11bGF0b3I7XG5leHBvcnRzLlByZWRpY3Rpb25Nb2RlID0gcmVxdWlyZSgnLi9QcmVkaWN0aW9uTW9kZScpLlByZWRpY3Rpb25Nb2RlO1xuIiwiLy9cbi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cblxudmFyIFNldCA9IHJlcXVpcmUoXCIuLi9VdGlsc1wiKS5TZXQ7XG52YXIgREZBU3RhdGUgPSByZXF1aXJlKCcuL0RGQVN0YXRlJykuREZBU3RhdGU7XG52YXIgU3Rhckxvb3BFbnRyeVN0YXRlID0gcmVxdWlyZSgnLi4vYXRuL0FUTlN0YXRlJykuU3Rhckxvb3BFbnRyeVN0YXRlO1xudmFyIEFUTkNvbmZpZ1NldCA9IHJlcXVpcmUoJy4vLi4vYXRuL0FUTkNvbmZpZ1NldCcpLkFUTkNvbmZpZ1NldDtcbnZhciBERkFTZXJpYWxpemVyID0gcmVxdWlyZSgnLi9ERkFTZXJpYWxpemVyJykuREZBU2VyaWFsaXplcjtcbnZhciBMZXhlckRGQVNlcmlhbGl6ZXIgPSByZXF1aXJlKCcuL0RGQVNlcmlhbGl6ZXInKS5MZXhlckRGQVNlcmlhbGl6ZXI7XG5cblxuXG5mdW5jdGlvbiBERkEoYXRuU3RhcnRTdGF0ZSwgZGVjaXNpb24pIHtcblx0aWYgKGRlY2lzaW9uID09PSB1bmRlZmluZWQpIHtcblx0XHRkZWNpc2lvbiA9IDA7XG5cdH1cblx0Ly8gRnJvbSB3aGljaCBBVE4gc3RhdGUgZGlkIHdlIGNyZWF0ZSB0aGlzIERGQT9cblx0dGhpcy5hdG5TdGFydFN0YXRlID0gYXRuU3RhcnRTdGF0ZTtcblx0dGhpcy5kZWNpc2lvbiA9IGRlY2lzaW9uO1xuXHQvLyBBIHNldCBvZiBhbGwgREZBIHN0YXRlcy4gVXNlIHtAbGluayBNYXB9IHNvIHdlIGNhbiBnZXQgb2xkIHN0YXRlIGJhY2tcblx0Ly8gKHtAbGluayBTZXR9IG9ubHkgYWxsb3dzIHlvdSB0byBzZWUgaWYgaXQncyB0aGVyZSkuXG5cdHRoaXMuX3N0YXRlcyA9IG5ldyBTZXQoKTtcblx0dGhpcy5zMCA9IG51bGw7XG5cdC8vIHtAY29kZSB0cnVlfSBpZiB0aGlzIERGQSBpcyBmb3IgYSBwcmVjZWRlbmNlIGRlY2lzaW9uOyBvdGhlcndpc2UsXG5cdC8vIHtAY29kZSBmYWxzZX0uIFRoaXMgaXMgdGhlIGJhY2tpbmcgZmllbGQgZm9yIHtAbGluayAvL2lzUHJlY2VkZW5jZURmYX0sXG5cdC8vIHtAbGluayAvL3NldFByZWNlZGVuY2VEZmF9LlxuXHR0aGlzLnByZWNlZGVuY2VEZmEgPSBmYWxzZTtcbiAgICBpZiAoYXRuU3RhcnRTdGF0ZSBpbnN0YW5jZW9mIFN0YXJMb29wRW50cnlTdGF0ZSlcbiAgICB7XG4gICAgICAgIGlmIChhdG5TdGFydFN0YXRlLmlzUHJlY2VkZW5jZURlY2lzaW9uKSB7XG4gICAgICAgICAgICB0aGlzLnByZWNlZGVuY2VEZmEgPSB0cnVlO1xuICAgICAgICAgICAgdmFyIHByZWNlZGVuY2VTdGF0ZSA9IG5ldyBERkFTdGF0ZShudWxsLCBuZXcgQVROQ29uZmlnU2V0KCkpO1xuICAgICAgICAgICAgcHJlY2VkZW5jZVN0YXRlLmVkZ2VzID0gW107XG4gICAgICAgICAgICBwcmVjZWRlbmNlU3RhdGUuaXNBY2NlcHRTdGF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgcHJlY2VkZW5jZVN0YXRlLnJlcXVpcmVzRnVsbENvbnRleHQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuczAgPSBwcmVjZWRlbmNlU3RhdGU7XG4gICAgICAgIH1cbiAgICB9XG5cdHJldHVybiB0aGlzO1xufVxuXG4vLyBHZXQgdGhlIHN0YXJ0IHN0YXRlIGZvciBhIHNwZWNpZmljIHByZWNlZGVuY2UgdmFsdWUuXG4vL1xuLy8gQHBhcmFtIHByZWNlZGVuY2UgVGhlIGN1cnJlbnQgcHJlY2VkZW5jZS5cbi8vIEByZXR1cm4gVGhlIHN0YXJ0IHN0YXRlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHNwZWNpZmllZCBwcmVjZWRlbmNlLCBvclxuLy8ge0Bjb2RlIG51bGx9IGlmIG5vIHN0YXJ0IHN0YXRlIGV4aXN0cyBmb3IgdGhlIHNwZWNpZmllZCBwcmVjZWRlbmNlLlxuLy9cbi8vIEB0aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlmIHRoaXMgaXMgbm90IGEgcHJlY2VkZW5jZSBERkEuXG4vLyBAc2VlIC8vaXNQcmVjZWRlbmNlRGZhKClcblxuREZBLnByb3RvdHlwZS5nZXRQcmVjZWRlbmNlU3RhcnRTdGF0ZSA9IGZ1bmN0aW9uKHByZWNlZGVuY2UpIHtcblx0aWYgKCEodGhpcy5wcmVjZWRlbmNlRGZhKSkge1xuXHRcdHRocm93IChcIk9ubHkgcHJlY2VkZW5jZSBERkFzIG1heSBjb250YWluIGEgcHJlY2VkZW5jZSBzdGFydCBzdGF0ZS5cIik7XG5cdH1cblx0Ly8gczAuZWRnZXMgaXMgbmV2ZXIgbnVsbCBmb3IgYSBwcmVjZWRlbmNlIERGQVxuXHRpZiAocHJlY2VkZW5jZSA8IDAgfHwgcHJlY2VkZW5jZSA+PSB0aGlzLnMwLmVkZ2VzLmxlbmd0aCkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdHJldHVybiB0aGlzLnMwLmVkZ2VzW3ByZWNlZGVuY2VdIHx8IG51bGw7XG59O1xuXG4vLyBTZXQgdGhlIHN0YXJ0IHN0YXRlIGZvciBhIHNwZWNpZmljIHByZWNlZGVuY2UgdmFsdWUuXG4vL1xuLy8gQHBhcmFtIHByZWNlZGVuY2UgVGhlIGN1cnJlbnQgcHJlY2VkZW5jZS5cbi8vIEBwYXJhbSBzdGFydFN0YXRlIFRoZSBzdGFydCBzdGF0ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBzcGVjaWZpZWRcbi8vIHByZWNlZGVuY2UuXG4vL1xuLy8gQHRocm93cyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaWYgdGhpcyBpcyBub3QgYSBwcmVjZWRlbmNlIERGQS5cbi8vIEBzZWUgLy9pc1ByZWNlZGVuY2VEZmEoKVxuLy9cbkRGQS5wcm90b3R5cGUuc2V0UHJlY2VkZW5jZVN0YXJ0U3RhdGUgPSBmdW5jdGlvbihwcmVjZWRlbmNlLCBzdGFydFN0YXRlKSB7XG5cdGlmICghKHRoaXMucHJlY2VkZW5jZURmYSkpIHtcblx0XHR0aHJvdyAoXCJPbmx5IHByZWNlZGVuY2UgREZBcyBtYXkgY29udGFpbiBhIHByZWNlZGVuY2Ugc3RhcnQgc3RhdGUuXCIpO1xuXHR9XG5cdGlmIChwcmVjZWRlbmNlIDwgMCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIHN5bmNocm9uaXphdGlvbiBvbiBzMCBoZXJlIGlzIG9rLiB3aGVuIHRoZSBERkEgaXMgdHVybmVkIGludG8gYVxuXHQvLyBwcmVjZWRlbmNlIERGQSwgczAgd2lsbCBiZSBpbml0aWFsaXplZCBvbmNlIGFuZCBub3QgdXBkYXRlZCBhZ2FpblxuXHQvLyBzMC5lZGdlcyBpcyBuZXZlciBudWxsIGZvciBhIHByZWNlZGVuY2UgREZBXG5cdHRoaXMuczAuZWRnZXNbcHJlY2VkZW5jZV0gPSBzdGFydFN0YXRlO1xufTtcblxuLy9cbi8vIFNldHMgd2hldGhlciB0aGlzIGlzIGEgcHJlY2VkZW5jZSBERkEuIElmIHRoZSBzcGVjaWZpZWQgdmFsdWUgZGlmZmVyc1xuLy8gZnJvbSB0aGUgY3VycmVudCBERkEgY29uZmlndXJhdGlvbiwgdGhlIGZvbGxvd2luZyBhY3Rpb25zIGFyZSB0YWtlbjtcbi8vIG90aGVyd2lzZSBubyBjaGFuZ2VzIGFyZSBtYWRlIHRvIHRoZSBjdXJyZW50IERGQS5cbi8vXG4vLyA8dWw+XG4vLyA8bGk+VGhlIHtAbGluayAvL3N0YXRlc30gbWFwIGlzIGNsZWFyZWQ8L2xpPlxuLy8gPGxpPklmIHtAY29kZSBwcmVjZWRlbmNlRGZhfSBpcyB7QGNvZGUgZmFsc2V9LCB0aGUgaW5pdGlhbCBzdGF0ZVxuLy8ge0BsaW5rIC8vczB9IGlzIHNldCB0byB7QGNvZGUgbnVsbH07IG90aGVyd2lzZSwgaXQgaXMgaW5pdGlhbGl6ZWQgdG8gYSBuZXdcbi8vIHtAbGluayBERkFTdGF0ZX0gd2l0aCBhbiBlbXB0eSBvdXRnb2luZyB7QGxpbmsgREZBU3RhdGUvL2VkZ2VzfSBhcnJheSB0b1xuLy8gc3RvcmUgdGhlIHN0YXJ0IHN0YXRlcyBmb3IgaW5kaXZpZHVhbCBwcmVjZWRlbmNlIHZhbHVlcy48L2xpPlxuLy8gPGxpPlRoZSB7QGxpbmsgLy9wcmVjZWRlbmNlRGZhfSBmaWVsZCBpcyB1cGRhdGVkPC9saT5cbi8vIDwvdWw+XG4vL1xuLy8gQHBhcmFtIHByZWNlZGVuY2VEZmEge0Bjb2RlIHRydWV9IGlmIHRoaXMgaXMgYSBwcmVjZWRlbmNlIERGQTsgb3RoZXJ3aXNlLFxuLy8ge0Bjb2RlIGZhbHNlfVxuXG5ERkEucHJvdG90eXBlLnNldFByZWNlZGVuY2VEZmEgPSBmdW5jdGlvbihwcmVjZWRlbmNlRGZhKSB7XG5cdGlmICh0aGlzLnByZWNlZGVuY2VEZmEhPT1wcmVjZWRlbmNlRGZhKSB7XG5cdFx0dGhpcy5fc3RhdGVzID0gbmV3IERGQVN0YXRlc1NldCgpO1xuXHRcdGlmIChwcmVjZWRlbmNlRGZhKSB7XG5cdFx0XHR2YXIgcHJlY2VkZW5jZVN0YXRlID0gbmV3IERGQVN0YXRlKG51bGwsIG5ldyBBVE5Db25maWdTZXQoKSk7XG5cdFx0XHRwcmVjZWRlbmNlU3RhdGUuZWRnZXMgPSBbXTtcblx0XHRcdHByZWNlZGVuY2VTdGF0ZS5pc0FjY2VwdFN0YXRlID0gZmFsc2U7XG5cdFx0XHRwcmVjZWRlbmNlU3RhdGUucmVxdWlyZXNGdWxsQ29udGV4dCA9IGZhbHNlO1xuXHRcdFx0dGhpcy5zMCA9IHByZWNlZGVuY2VTdGF0ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zMCA9IG51bGw7XG5cdFx0fVxuXHRcdHRoaXMucHJlY2VkZW5jZURmYSA9IHByZWNlZGVuY2VEZmE7XG5cdH1cbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShERkEucHJvdG90eXBlLCBcInN0YXRlc1wiLCB7XG5cdGdldCA6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLl9zdGF0ZXM7XG5cdH1cbn0pO1xuXG4vLyBSZXR1cm4gYSBsaXN0IG9mIGFsbCBzdGF0ZXMgaW4gdGhpcyBERkEsIG9yZGVyZWQgYnkgc3RhdGUgbnVtYmVyLlxuREZBLnByb3RvdHlwZS5zb3J0ZWRTdGF0ZXMgPSBmdW5jdGlvbigpIHtcblx0dmFyIGxpc3QgPSB0aGlzLl9zdGF0ZXMudmFsdWVzKCk7XG5cdHJldHVybiBsaXN0LnNvcnQoZnVuY3Rpb24oYSwgYikge1xuXHRcdHJldHVybiBhLnN0YXRlTnVtYmVyIC0gYi5zdGF0ZU51bWJlcjtcblx0fSk7XG59O1xuXG5ERkEucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24obGl0ZXJhbE5hbWVzLCBzeW1ib2xpY05hbWVzKSB7XG5cdGxpdGVyYWxOYW1lcyA9IGxpdGVyYWxOYW1lcyB8fCBudWxsO1xuXHRzeW1ib2xpY05hbWVzID0gc3ltYm9saWNOYW1lcyB8fCBudWxsO1xuXHRpZiAodGhpcy5zMCA9PT0gbnVsbCkge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cdHZhciBzZXJpYWxpemVyID0gbmV3IERGQVNlcmlhbGl6ZXIodGhpcywgbGl0ZXJhbE5hbWVzLCBzeW1ib2xpY05hbWVzKTtcblx0cmV0dXJuIHNlcmlhbGl6ZXIudG9TdHJpbmcoKTtcbn07XG5cbkRGQS5wcm90b3R5cGUudG9MZXhlclN0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRpZiAodGhpcy5zMCA9PT0gbnVsbCkge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cdHZhciBzZXJpYWxpemVyID0gbmV3IExleGVyREZBU2VyaWFsaXplcih0aGlzKTtcblx0cmV0dXJuIHNlcmlhbGl6ZXIudG9TdHJpbmcoKTtcbn07XG5cbmV4cG9ydHMuREZBID0gREZBO1xuIiwiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuXG4vLyBBIERGQSB3YWxrZXIgdGhhdCBrbm93cyBob3cgdG8gZHVtcCB0aGVtIHRvIHNlcmlhbGl6ZWQgc3RyaW5ncy4jL1xuXG5cbmZ1bmN0aW9uIERGQVNlcmlhbGl6ZXIoZGZhLCBsaXRlcmFsTmFtZXMsIHN5bWJvbGljTmFtZXMpIHtcblx0dGhpcy5kZmEgPSBkZmE7XG5cdHRoaXMubGl0ZXJhbE5hbWVzID0gbGl0ZXJhbE5hbWVzIHx8IFtdO1xuXHR0aGlzLnN5bWJvbGljTmFtZXMgPSBzeW1ib2xpY05hbWVzIHx8IFtdO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuREZBU2VyaWFsaXplci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgIGlmKHRoaXMuZGZhLnMwID09PSBudWxsKSB7XG4gICAgICAgcmV0dXJuIG51bGw7XG4gICB9XG4gICB2YXIgYnVmID0gXCJcIjtcbiAgIHZhciBzdGF0ZXMgPSB0aGlzLmRmYS5zb3J0ZWRTdGF0ZXMoKTtcbiAgIGZvcih2YXIgaT0wO2k8c3RhdGVzLmxlbmd0aDtpKyspIHtcbiAgICAgICB2YXIgcyA9IHN0YXRlc1tpXTtcbiAgICAgICBpZihzLmVkZ2VzIT09bnVsbCkge1xuICAgICAgICAgICAgdmFyIG4gPSBzLmVkZ2VzLmxlbmd0aDtcbiAgICAgICAgICAgIGZvcih2YXIgaj0wO2o8bjtqKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgdCA9IHMuZWRnZXNbal0gfHwgbnVsbDtcbiAgICAgICAgICAgICAgICBpZih0IT09bnVsbCAmJiB0LnN0YXRlTnVtYmVyICE9PSAweDdGRkZGRkZGKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1ZiA9IGJ1Zi5jb25jYXQodGhpcy5nZXRTdGF0ZVN0cmluZyhzKSk7XG4gICAgICAgICAgICAgICAgICAgIGJ1ZiA9IGJ1Zi5jb25jYXQoXCItXCIpO1xuICAgICAgICAgICAgICAgICAgICBidWYgPSBidWYuY29uY2F0KHRoaXMuZ2V0RWRnZUxhYmVsKGopKTtcbiAgICAgICAgICAgICAgICAgICAgYnVmID0gYnVmLmNvbmNhdChcIi0+XCIpO1xuICAgICAgICAgICAgICAgICAgICBidWYgPSBidWYuY29uY2F0KHRoaXMuZ2V0U3RhdGVTdHJpbmcodCkpO1xuICAgICAgICAgICAgICAgICAgICBidWYgPSBidWYuY29uY2F0KCdcXG4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgfVxuICAgfVxuICAgcmV0dXJuIGJ1Zi5sZW5ndGg9PT0wID8gbnVsbCA6IGJ1Zjtcbn07XG5cbkRGQVNlcmlhbGl6ZXIucHJvdG90eXBlLmdldEVkZ2VMYWJlbCA9IGZ1bmN0aW9uKGkpIHtcbiAgICBpZiAoaT09PTApIHtcbiAgICAgICAgcmV0dXJuIFwiRU9GXCI7XG4gICAgfSBlbHNlIGlmKHRoaXMubGl0ZXJhbE5hbWVzICE9PW51bGwgfHwgdGhpcy5zeW1ib2xpY05hbWVzIT09bnVsbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5saXRlcmFsTmFtZXNbaS0xXSB8fCB0aGlzLnN5bWJvbGljTmFtZXNbaS0xXTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShpLTEpO1xuICAgIH1cbn07XG5cbkRGQVNlcmlhbGl6ZXIucHJvdG90eXBlLmdldFN0YXRlU3RyaW5nID0gZnVuY3Rpb24ocykge1xuICAgIHZhciBiYXNlU3RhdGVTdHIgPSAoIHMuaXNBY2NlcHRTdGF0ZSA/IFwiOlwiIDogXCJcIikgKyBcInNcIiArIHMuc3RhdGVOdW1iZXIgKyAoIHMucmVxdWlyZXNGdWxsQ29udGV4dCA/IFwiXlwiIDogXCJcIik7XG4gICAgaWYocy5pc0FjY2VwdFN0YXRlKSB7XG4gICAgICAgIGlmIChzLnByZWRpY2F0ZXMgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBiYXNlU3RhdGVTdHIgKyBcIj0+XCIgKyBzLnByZWRpY2F0ZXMudG9TdHJpbmcoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBiYXNlU3RhdGVTdHIgKyBcIj0+XCIgKyBzLnByZWRpY3Rpb24udG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBiYXNlU3RhdGVTdHI7XG4gICAgfVxufTtcblxuZnVuY3Rpb24gTGV4ZXJERkFTZXJpYWxpemVyKGRmYSkge1xuXHRERkFTZXJpYWxpemVyLmNhbGwodGhpcywgZGZhLCBudWxsKTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkxleGVyREZBU2VyaWFsaXplci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERGQVNlcmlhbGl6ZXIucHJvdG90eXBlKTtcbkxleGVyREZBU2VyaWFsaXplci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMZXhlckRGQVNlcmlhbGl6ZXI7XG5cbkxleGVyREZBU2VyaWFsaXplci5wcm90b3R5cGUuZ2V0RWRnZUxhYmVsID0gZnVuY3Rpb24oaSkge1xuXHRyZXR1cm4gXCInXCIgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpICsgXCInXCI7XG59O1xuXG5leHBvcnRzLkRGQVNlcmlhbGl6ZXIgPSBERkFTZXJpYWxpemVyO1xuZXhwb3J0cy5MZXhlckRGQVNlcmlhbGl6ZXIgPSBMZXhlckRGQVNlcmlhbGl6ZXI7XG5cbiIsIi8vXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vLy9cblxudmFyIEFUTkNvbmZpZ1NldCA9IHJlcXVpcmUoJy4vLi4vYXRuL0FUTkNvbmZpZ1NldCcpLkFUTkNvbmZpZ1NldDtcbnZhciBVdGlscyA9IHJlcXVpcmUoJy4vLi4vVXRpbHMnKTtcbnZhciBIYXNoID0gVXRpbHMuSGFzaDtcbnZhciBTZXQgPSBVdGlscy5TZXQ7XG5cbi8vIE1hcCBhIHByZWRpY2F0ZSB0byBhIHByZWRpY3RlZCBhbHRlcm5hdGl2ZS4vLy9cblxuZnVuY3Rpb24gUHJlZFByZWRpY3Rpb24ocHJlZCwgYWx0KSB7XG5cdHRoaXMuYWx0ID0gYWx0O1xuXHR0aGlzLnByZWQgPSBwcmVkO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuUHJlZFByZWRpY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiBcIihcIiArIHRoaXMucHJlZCArIFwiLCBcIiArIHRoaXMuYWx0ICsgXCIpXCI7XG59O1xuXG4vLyBBIERGQSBzdGF0ZSByZXByZXNlbnRzIGEgc2V0IG9mIHBvc3NpYmxlIEFUTiBjb25maWd1cmF0aW9ucy5cbi8vIEFzIEFobywgU2V0aGksIFVsbG1hbiBwLiAxMTcgc2F5cyBcIlRoZSBERkEgdXNlcyBpdHMgc3RhdGVcbi8vIHRvIGtlZXAgdHJhY2sgb2YgYWxsIHBvc3NpYmxlIHN0YXRlcyB0aGUgQVROIGNhbiBiZSBpbiBhZnRlclxuLy8gcmVhZGluZyBlYWNoIGlucHV0IHN5bWJvbC4gVGhhdCBpcyB0byBzYXksIGFmdGVyIHJlYWRpbmdcbi8vIGlucHV0IGExYTIuLmFuLCB0aGUgREZBIGlzIGluIGEgc3RhdGUgdGhhdCByZXByZXNlbnRzIHRoZVxuLy8gc3Vic2V0IFQgb2YgdGhlIHN0YXRlcyBvZiB0aGUgQVROIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIHRoZVxuLy8gQVROJ3Mgc3RhcnQgc3RhdGUgYWxvbmcgc29tZSBwYXRoIGxhYmVsZWQgYTFhMi4uYW4uXCJcbi8vIEluIGNvbnZlbnRpb25hbCBORkEmcmFycjtERkEgY29udmVyc2lvbiwgdGhlcmVmb3JlLCB0aGUgc3Vic2V0IFRcbi8vIHdvdWxkIGJlIGEgYml0c2V0IHJlcHJlc2VudGluZyB0aGUgc2V0IG9mIHN0YXRlcyB0aGVcbi8vIEFUTiBjb3VsZCBiZSBpbi4gV2UgbmVlZCB0byB0cmFjayB0aGUgYWx0IHByZWRpY3RlZCBieSBlYWNoXG4vLyBzdGF0ZSBhcyB3ZWxsLCBob3dldmVyLiBNb3JlIGltcG9ydGFudGx5LCB3ZSBuZWVkIHRvIG1haW50YWluXG4vLyBhIHN0YWNrIG9mIHN0YXRlcywgdHJhY2tpbmcgdGhlIGNsb3N1cmUgb3BlcmF0aW9ucyBhcyB0aGV5XG4vLyBqdW1wIGZyb20gcnVsZSB0byBydWxlLCBlbXVsYXRpbmcgcnVsZSBpbnZvY2F0aW9ucyAobWV0aG9kIGNhbGxzKS5cbi8vIEkgaGF2ZSB0byBhZGQgYSBzdGFjayB0byBzaW11bGF0ZSB0aGUgcHJvcGVyIGxvb2thaGVhZCBzZXF1ZW5jZXMgZm9yXG4vLyB0aGUgdW5kZXJseWluZyBMTCBncmFtbWFyIGZyb20gd2hpY2ggdGhlIEFUTiB3YXMgZGVyaXZlZC5cbi8vXG4vLyA8cD5JIHVzZSBhIHNldCBvZiBBVE5Db25maWcgb2JqZWN0cyBub3Qgc2ltcGxlIHN0YXRlcy4gQW4gQVROQ29uZmlnXG4vLyBpcyBib3RoIGEgc3RhdGUgKGFsYSBub3JtYWwgY29udmVyc2lvbikgYW5kIGEgUnVsZUNvbnRleHQgZGVzY3JpYmluZ1xuLy8gdGhlIGNoYWluIG9mIHJ1bGVzIChpZiBhbnkpIGZvbGxvd2VkIHRvIGFycml2ZSBhdCB0aGF0IHN0YXRlLjwvcD5cbi8vXG4vLyA8cD5BIERGQSBzdGF0ZSBtYXkgaGF2ZSBtdWx0aXBsZSByZWZlcmVuY2VzIHRvIGEgcGFydGljdWxhciBzdGF0ZSxcbi8vIGJ1dCB3aXRoIGRpZmZlcmVudCBBVE4gY29udGV4dHMgKHdpdGggc2FtZSBvciBkaWZmZXJlbnQgYWx0cylcbi8vIG1lYW5pbmcgdGhhdCBzdGF0ZSB3YXMgcmVhY2hlZCB2aWEgYSBkaWZmZXJlbnQgc2V0IG9mIHJ1bGUgaW52b2NhdGlvbnMuPC9wPlxuLy8gL1xuXG5mdW5jdGlvbiBERkFTdGF0ZShzdGF0ZU51bWJlciwgY29uZmlncykge1xuXHRpZiAoc3RhdGVOdW1iZXIgPT09IG51bGwpIHtcblx0XHRzdGF0ZU51bWJlciA9IC0xO1xuXHR9XG5cdGlmIChjb25maWdzID09PSBudWxsKSB7XG5cdFx0Y29uZmlncyA9IG5ldyBBVE5Db25maWdTZXQoKTtcblx0fVxuXHR0aGlzLnN0YXRlTnVtYmVyID0gc3RhdGVOdW1iZXI7XG5cdHRoaXMuY29uZmlncyA9IGNvbmZpZ3M7XG5cdC8vIHtAY29kZSBlZGdlc1tzeW1ib2xdfSBwb2ludHMgdG8gdGFyZ2V0IG9mIHN5bWJvbC4gU2hpZnQgdXAgYnkgMSBzbyAoLTEpXG5cdC8vIHtAbGluayBUb2tlbi8vRU9GfSBtYXBzIHRvIHtAY29kZSBlZGdlc1swXX0uXG5cdHRoaXMuZWRnZXMgPSBudWxsO1xuXHR0aGlzLmlzQWNjZXB0U3RhdGUgPSBmYWxzZTtcblx0Ly8gaWYgYWNjZXB0IHN0YXRlLCB3aGF0IHR0eXBlIGRvIHdlIG1hdGNoIG9yIGFsdCBkbyB3ZSBwcmVkaWN0P1xuXHQvLyBUaGlzIGlzIHNldCB0byB7QGxpbmsgQVROLy9JTlZBTElEX0FMVF9OVU1CRVJ9IHdoZW4ge0BsaW5rXG5cdC8vIC8vcHJlZGljYXRlc317QGNvZGUgIT1udWxsfSBvclxuXHQvLyB7QGxpbmsgLy9yZXF1aXJlc0Z1bGxDb250ZXh0fS5cblx0dGhpcy5wcmVkaWN0aW9uID0gMDtcblx0dGhpcy5sZXhlckFjdGlvbkV4ZWN1dG9yID0gbnVsbDtcblx0Ly8gSW5kaWNhdGVzIHRoYXQgdGhpcyBzdGF0ZSB3YXMgY3JlYXRlZCBkdXJpbmcgU0xMIHByZWRpY3Rpb24gdGhhdFxuXHQvLyBkaXNjb3ZlcmVkIGEgY29uZmxpY3QgYmV0d2VlbiB0aGUgY29uZmlndXJhdGlvbnMgaW4gdGhlIHN0YXRlLiBGdXR1cmVcblx0Ly8ge0BsaW5rIFBhcnNlckFUTlNpbXVsYXRvci8vZXhlY0FUTn0gaW52b2NhdGlvbnMgaW1tZWRpYXRlbHkganVtcGVkIGRvaW5nXG5cdC8vIGZ1bGwgY29udGV4dCBwcmVkaWN0aW9uIGlmIHRoaXMgZmllbGQgaXMgdHJ1ZS5cblx0dGhpcy5yZXF1aXJlc0Z1bGxDb250ZXh0ID0gZmFsc2U7XG5cdC8vIER1cmluZyBTTEwgcGFyc2luZywgdGhpcyBpcyBhIGxpc3Qgb2YgcHJlZGljYXRlcyBhc3NvY2lhdGVkIHdpdGggdGhlXG5cdC8vIEFUTiBjb25maWd1cmF0aW9ucyBvZiB0aGUgREZBIHN0YXRlLiBXaGVuIHdlIGhhdmUgcHJlZGljYXRlcyxcblx0Ly8ge0BsaW5rIC8vcmVxdWlyZXNGdWxsQ29udGV4dH0gaXMge0Bjb2RlIGZhbHNlfSBzaW5jZSBmdWxsIGNvbnRleHRcblx0Ly8gcHJlZGljdGlvbiBldmFsdWF0ZXMgcHJlZGljYXRlc1xuXHQvLyBvbi10aGUtZmx5LiBJZiB0aGlzIGlzIG5vdCBudWxsLCB0aGVuIHtAbGluayAvL3ByZWRpY3Rpb259IGlzXG5cdC8vIHtAbGluayBBVE4vL0lOVkFMSURfQUxUX05VTUJFUn0uXG5cdC8vXG5cdC8vIDxwPldlIG9ubHkgdXNlIHRoZXNlIGZvciBub24te0BsaW5rIC8vcmVxdWlyZXNGdWxsQ29udGV4dH0gYnV0XG5cdC8vIGNvbmZsaWN0aW5nIHN0YXRlcy4gVGhhdFxuXHQvLyBtZWFucyB3ZSBrbm93IGZyb20gdGhlIGNvbnRleHQgKGl0J3MgJCBvciB3ZSBkb24ndCBkaXAgaW50byBvdXRlclxuXHQvLyBjb250ZXh0KSB0aGF0IGl0J3MgYW4gYW1iaWd1aXR5IG5vdCBhIGNvbmZsaWN0LjwvcD5cblx0Ly9cblx0Ly8gPHA+VGhpcyBsaXN0IGlzIGNvbXB1dGVkIGJ5IHtAbGlua1xuXHQvLyBQYXJzZXJBVE5TaW11bGF0b3IvL3ByZWRpY2F0ZURGQVN0YXRlfS48L3A+XG5cdHRoaXMucHJlZGljYXRlcyA9IG51bGw7XG5cdHJldHVybiB0aGlzO1xufVxuXG4vLyBHZXQgdGhlIHNldCBvZiBhbGwgYWx0cyBtZW50aW9uZWQgYnkgYWxsIEFUTiBjb25maWd1cmF0aW9ucyBpbiB0aGlzXG4vLyBERkEgc3RhdGUuXG5ERkFTdGF0ZS5wcm90b3R5cGUuZ2V0QWx0U2V0ID0gZnVuY3Rpb24oKSB7XG5cdHZhciBhbHRzID0gbmV3IFNldCgpO1xuXHRpZiAodGhpcy5jb25maWdzICE9PSBudWxsKSB7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvbmZpZ3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBjID0gdGhpcy5jb25maWdzW2ldO1xuXHRcdFx0YWx0cy5hZGQoYy5hbHQpO1xuXHRcdH1cblx0fVxuXHRpZiAoYWx0cy5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gYWx0cztcblx0fVxufTtcblxuLy8gVHdvIHtAbGluayBERkFTdGF0ZX0gaW5zdGFuY2VzIGFyZSBlcXVhbCBpZiB0aGVpciBBVE4gY29uZmlndXJhdGlvbiBzZXRzXG4vLyBhcmUgdGhlIHNhbWUuIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gc2VlIGlmIGEgc3RhdGUgYWxyZWFkeSBleGlzdHMuXG4vL1xuLy8gPHA+QmVjYXVzZSB0aGUgbnVtYmVyIG9mIGFsdGVybmF0aXZlcyBhbmQgbnVtYmVyIG9mIEFUTiBjb25maWd1cmF0aW9ucyBhcmVcbi8vIGZpbml0ZSwgdGhlcmUgaXMgYSBmaW5pdGUgbnVtYmVyIG9mIERGQSBzdGF0ZXMgdGhhdCBjYW4gYmUgcHJvY2Vzc2VkLlxuLy8gVGhpcyBpcyBuZWNlc3NhcnkgdG8gc2hvdyB0aGF0IHRoZSBhbGdvcml0aG0gdGVybWluYXRlcy48L3A+XG4vL1xuLy8gPHA+Q2Fubm90IHRlc3QgdGhlIERGQSBzdGF0ZSBudW1iZXJzIGhlcmUgYmVjYXVzZSBpblxuLy8ge0BsaW5rIFBhcnNlckFUTlNpbXVsYXRvci8vYWRkREZBU3RhdGV9IHdlIG5lZWQgdG8ga25vdyBpZiBhbnkgb3RoZXIgc3RhdGVcbi8vIGV4aXN0cyB0aGF0IGhhcyB0aGlzIGV4YWN0IHNldCBvZiBBVE4gY29uZmlndXJhdGlvbnMuIFRoZVxuLy8ge0BsaW5rIC8vc3RhdGVOdW1iZXJ9IGlzIGlycmVsZXZhbnQuPC9wPlxuREZBU3RhdGUucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uKG90aGVyKSB7XG5cdC8vIGNvbXBhcmUgc2V0IG9mIEFUTiBjb25maWd1cmF0aW9ucyBpbiB0aGlzIHNldCB3aXRoIG90aGVyXG5cdHJldHVybiB0aGlzID09PSBvdGhlciB8fFxuXHRcdFx0KG90aGVyIGluc3RhbmNlb2YgREZBU3RhdGUgJiZcblx0XHRcdFx0dGhpcy5jb25maWdzLmVxdWFscyhvdGhlci5jb25maWdzKSk7XG59O1xuXG5ERkFTdGF0ZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0dmFyIHMgPSBcIlwiICsgdGhpcy5zdGF0ZU51bWJlciArIFwiOlwiICsgdGhpcy5jb25maWdzO1xuXHRpZih0aGlzLmlzQWNjZXB0U3RhdGUpIHtcbiAgICAgICAgcyA9IHMgKyBcIj0+XCI7XG4gICAgICAgIGlmICh0aGlzLnByZWRpY2F0ZXMgIT09IG51bGwpXG4gICAgICAgICAgICBzID0gcyArIHRoaXMucHJlZGljYXRlcztcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcyA9IHMgKyB0aGlzLnByZWRpY3Rpb247XG4gICAgfVxuXHRyZXR1cm4gcztcbn07XG5cbkRGQVN0YXRlLnByb3RvdHlwZS5oYXNoQ29kZSA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgaGFzaCA9IG5ldyBIYXNoKCk7XG5cdGhhc2gudXBkYXRlKHRoaXMuY29uZmlncyk7XG5cdGlmKHRoaXMuaXNBY2NlcHRTdGF0ZSkge1xuICAgICAgICBpZiAodGhpcy5wcmVkaWNhdGVzICE9PSBudWxsKVxuICAgICAgICAgICAgaGFzaC51cGRhdGUodGhpcy5wcmVkaWNhdGVzKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgaGFzaC51cGRhdGUodGhpcy5wcmVkaWN0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIGhhc2guZmluaXNoKCk7XG59O1xuXG5leHBvcnRzLkRGQVN0YXRlID0gREZBU3RhdGU7XG5leHBvcnRzLlByZWRQcmVkaWN0aW9uID0gUHJlZFByZWRpY3Rpb247XG4iLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG5cbmV4cG9ydHMuREZBID0gcmVxdWlyZSgnLi9ERkEnKS5ERkE7XG5leHBvcnRzLkRGQVNlcmlhbGl6ZXIgPSByZXF1aXJlKCcuL0RGQVNlcmlhbGl6ZXInKS5ERkFTZXJpYWxpemVyO1xuZXhwb3J0cy5MZXhlckRGQVNlcmlhbGl6ZXIgPSByZXF1aXJlKCcuL0RGQVNlcmlhbGl6ZXInKS5MZXhlckRGQVNlcmlhbGl6ZXI7XG5leHBvcnRzLlByZWRQcmVkaWN0aW9uID0gcmVxdWlyZSgnLi9ERkFTdGF0ZScpLlByZWRQcmVkaWN0aW9uO1xuIiwiLy9cbi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbi8vXG5cbi8vXG4vLyBUaGlzIGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBBTlRMUkVycm9yTGlzdGVuZXJ9IGNhbiBiZSB1c2VkIHRvIGlkZW50aWZ5XG4vLyBjZXJ0YWluIHBvdGVudGlhbCBjb3JyZWN0bmVzcyBhbmQgcGVyZm9ybWFuY2UgcHJvYmxlbXMgaW4gZ3JhbW1hcnMuIFwiUmVwb3J0c1wiXG4vLyBhcmUgbWFkZSBieSBjYWxsaW5nIHtAbGluayBQYXJzZXIvL25vdGlmeUVycm9yTGlzdGVuZXJzfSB3aXRoIHRoZSBhcHByb3ByaWF0ZVxuLy8gbWVzc2FnZS5cbi8vXG4vLyA8dWw+XG4vLyA8bGk+PGI+QW1iaWd1aXRpZXM8L2I+OiBUaGVzZSBhcmUgY2FzZXMgd2hlcmUgbW9yZSB0aGFuIG9uZSBwYXRoIHRocm91Z2ggdGhlXG4vLyBncmFtbWFyIGNhbiBtYXRjaCB0aGUgaW5wdXQuPC9saT5cbi8vIDxsaT48Yj5XZWFrIGNvbnRleHQgc2Vuc2l0aXZpdHk8L2I+OiBUaGVzZSBhcmUgY2FzZXMgd2hlcmUgZnVsbC1jb250ZXh0XG4vLyBwcmVkaWN0aW9uIHJlc29sdmVkIGFuIFNMTCBjb25mbGljdCB0byBhIHVuaXF1ZSBhbHRlcm5hdGl2ZSB3aGljaCBlcXVhbGVkIHRoZVxuLy8gbWluaW11bSBhbHRlcm5hdGl2ZSBvZiB0aGUgU0xMIGNvbmZsaWN0LjwvbGk+XG4vLyA8bGk+PGI+U3Ryb25nIChmb3JjZWQpIGNvbnRleHQgc2Vuc2l0aXZpdHk8L2I+OiBUaGVzZSBhcmUgY2FzZXMgd2hlcmUgdGhlXG4vLyBmdWxsLWNvbnRleHQgcHJlZGljdGlvbiByZXNvbHZlZCBhbiBTTEwgY29uZmxpY3QgdG8gYSB1bmlxdWUgYWx0ZXJuYXRpdmUsXG4vLyA8ZW0+YW5kPC9lbT4gdGhlIG1pbmltdW0gYWx0ZXJuYXRpdmUgb2YgdGhlIFNMTCBjb25mbGljdCB3YXMgZm91bmQgdG8gbm90IGJlXG4vLyBhIHRydWx5IHZpYWJsZSBhbHRlcm5hdGl2ZS4gVHdvLXN0YWdlIHBhcnNpbmcgY2Fubm90IGJlIHVzZWQgZm9yIGlucHV0cyB3aGVyZVxuLy8gdGhpcyBzaXR1YXRpb24gb2NjdXJzLjwvbGk+XG4vLyA8L3VsPlxuXG52YXIgQml0U2V0ID0gcmVxdWlyZSgnLi8uLi9VdGlscycpLkJpdFNldDtcbnZhciBFcnJvckxpc3RlbmVyID0gcmVxdWlyZSgnLi9FcnJvckxpc3RlbmVyJykuRXJyb3JMaXN0ZW5lcjtcbnZhciBJbnRlcnZhbCA9IHJlcXVpcmUoJy4vLi4vSW50ZXJ2YWxTZXQnKS5JbnRlcnZhbDtcblxuZnVuY3Rpb24gRGlhZ25vc3RpY0Vycm9yTGlzdGVuZXIoZXhhY3RPbmx5KSB7XG5cdEVycm9yTGlzdGVuZXIuY2FsbCh0aGlzKTtcblx0ZXhhY3RPbmx5ID0gZXhhY3RPbmx5IHx8IHRydWU7XG5cdC8vIHdoZXRoZXIgYWxsIGFtYmlndWl0aWVzIG9yIG9ubHkgZXhhY3QgYW1iaWd1aXRpZXMgYXJlIHJlcG9ydGVkLlxuXHR0aGlzLmV4YWN0T25seSA9IGV4YWN0T25seTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkRpYWdub3N0aWNFcnJvckxpc3RlbmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUpO1xuRGlhZ25vc3RpY0Vycm9yTGlzdGVuZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRGlhZ25vc3RpY0Vycm9yTGlzdGVuZXI7XG5cbkRpYWdub3N0aWNFcnJvckxpc3RlbmVyLnByb3RvdHlwZS5yZXBvcnRBbWJpZ3VpdHkgPSBmdW5jdGlvbihyZWNvZ25pemVyLCBkZmEsXG5cdFx0c3RhcnRJbmRleCwgc3RvcEluZGV4LCBleGFjdCwgYW1iaWdBbHRzLCBjb25maWdzKSB7XG5cdGlmICh0aGlzLmV4YWN0T25seSAmJiAhZXhhY3QpIHtcblx0XHRyZXR1cm47XG5cdH1cblx0dmFyIG1zZyA9IFwicmVwb3J0QW1iaWd1aXR5IGQ9XCIgK1xuXHRcdFx0dGhpcy5nZXREZWNpc2lvbkRlc2NyaXB0aW9uKHJlY29nbml6ZXIsIGRmYSkgK1xuXHRcdFx0XCI6IGFtYmlnQWx0cz1cIiArXG5cdFx0XHR0aGlzLmdldENvbmZsaWN0aW5nQWx0cyhhbWJpZ0FsdHMsIGNvbmZpZ3MpICtcblx0XHRcdFwiLCBpbnB1dD0nXCIgK1xuXHRcdFx0cmVjb2duaXplci5nZXRUb2tlblN0cmVhbSgpLmdldFRleHQobmV3IEludGVydmFsKHN0YXJ0SW5kZXgsIHN0b3BJbmRleCkpICsgXCInXCI7XG5cdHJlY29nbml6ZXIubm90aWZ5RXJyb3JMaXN0ZW5lcnMobXNnKTtcbn07XG5cbkRpYWdub3N0aWNFcnJvckxpc3RlbmVyLnByb3RvdHlwZS5yZXBvcnRBdHRlbXB0aW5nRnVsbENvbnRleHQgPSBmdW5jdGlvbihcblx0XHRyZWNvZ25pemVyLCBkZmEsIHN0YXJ0SW5kZXgsIHN0b3BJbmRleCwgY29uZmxpY3RpbmdBbHRzLCBjb25maWdzKSB7XG5cdHZhciBtc2cgPSBcInJlcG9ydEF0dGVtcHRpbmdGdWxsQ29udGV4dCBkPVwiICtcblx0XHRcdHRoaXMuZ2V0RGVjaXNpb25EZXNjcmlwdGlvbihyZWNvZ25pemVyLCBkZmEpICtcblx0XHRcdFwiLCBpbnB1dD0nXCIgK1xuXHRcdFx0cmVjb2duaXplci5nZXRUb2tlblN0cmVhbSgpLmdldFRleHQobmV3IEludGVydmFsKHN0YXJ0SW5kZXgsIHN0b3BJbmRleCkpICsgXCInXCI7XG5cdHJlY29nbml6ZXIubm90aWZ5RXJyb3JMaXN0ZW5lcnMobXNnKTtcbn07XG5cbkRpYWdub3N0aWNFcnJvckxpc3RlbmVyLnByb3RvdHlwZS5yZXBvcnRDb250ZXh0U2Vuc2l0aXZpdHkgPSBmdW5jdGlvbihcblx0XHRyZWNvZ25pemVyLCBkZmEsIHN0YXJ0SW5kZXgsIHN0b3BJbmRleCwgcHJlZGljdGlvbiwgY29uZmlncykge1xuXHR2YXIgbXNnID0gXCJyZXBvcnRDb250ZXh0U2Vuc2l0aXZpdHkgZD1cIiArXG5cdFx0XHR0aGlzLmdldERlY2lzaW9uRGVzY3JpcHRpb24ocmVjb2duaXplciwgZGZhKSArXG5cdFx0XHRcIiwgaW5wdXQ9J1wiICtcblx0XHRcdHJlY29nbml6ZXIuZ2V0VG9rZW5TdHJlYW0oKS5nZXRUZXh0KG5ldyBJbnRlcnZhbChzdGFydEluZGV4LCBzdG9wSW5kZXgpKSArIFwiJ1wiO1xuXHRyZWNvZ25pemVyLm5vdGlmeUVycm9yTGlzdGVuZXJzKG1zZyk7XG59O1xuXG5EaWFnbm9zdGljRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUuZ2V0RGVjaXNpb25EZXNjcmlwdGlvbiA9IGZ1bmN0aW9uKHJlY29nbml6ZXIsIGRmYSkge1xuXHR2YXIgZGVjaXNpb24gPSBkZmEuZGVjaXNpb247XG5cdHZhciBydWxlSW5kZXggPSBkZmEuYXRuU3RhcnRTdGF0ZS5ydWxlSW5kZXg7XG5cblx0dmFyIHJ1bGVOYW1lcyA9IHJlY29nbml6ZXIucnVsZU5hbWVzO1xuXHRpZiAocnVsZUluZGV4IDwgMCB8fCBydWxlSW5kZXggPj0gcnVsZU5hbWVzLmxlbmd0aCkge1xuXHRcdHJldHVybiBcIlwiICsgZGVjaXNpb247XG5cdH1cblx0dmFyIHJ1bGVOYW1lID0gcnVsZU5hbWVzW3J1bGVJbmRleF0gfHwgbnVsbDtcblx0aWYgKHJ1bGVOYW1lID09PSBudWxsIHx8IHJ1bGVOYW1lLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiBcIlwiICsgZGVjaXNpb247XG5cdH1cblx0cmV0dXJuIFwiXCIgKyBkZWNpc2lvbiArIFwiIChcIiArIHJ1bGVOYW1lICsgXCIpXCI7XG59O1xuXG4vL1xuLy8gQ29tcHV0ZXMgdGhlIHNldCBvZiBjb25mbGljdGluZyBvciBhbWJpZ3VvdXMgYWx0ZXJuYXRpdmVzIGZyb20gYVxuLy8gY29uZmlndXJhdGlvbiBzZXQsIGlmIHRoYXQgaW5mb3JtYXRpb24gd2FzIG5vdCBhbHJlYWR5IHByb3ZpZGVkIGJ5IHRoZVxuLy8gcGFyc2VyLlxuLy9cbi8vIEBwYXJhbSByZXBvcnRlZEFsdHMgVGhlIHNldCBvZiBjb25mbGljdGluZyBvciBhbWJpZ3VvdXMgYWx0ZXJuYXRpdmVzLCBhc1xuLy8gcmVwb3J0ZWQgYnkgdGhlIHBhcnNlci5cbi8vIEBwYXJhbSBjb25maWdzIFRoZSBjb25mbGljdGluZyBvciBhbWJpZ3VvdXMgY29uZmlndXJhdGlvbiBzZXQuXG4vLyBAcmV0dXJuIFJldHVybnMge0Bjb2RlIHJlcG9ydGVkQWx0c30gaWYgaXQgaXMgbm90IHtAY29kZSBudWxsfSwgb3RoZXJ3aXNlXG4vLyByZXR1cm5zIHRoZSBzZXQgb2YgYWx0ZXJuYXRpdmVzIHJlcHJlc2VudGVkIGluIHtAY29kZSBjb25maWdzfS5cbi8vXG5EaWFnbm9zdGljRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUuZ2V0Q29uZmxpY3RpbmdBbHRzID0gZnVuY3Rpb24ocmVwb3J0ZWRBbHRzLCBjb25maWdzKSB7XG5cdGlmIChyZXBvcnRlZEFsdHMgIT09IG51bGwpIHtcblx0XHRyZXR1cm4gcmVwb3J0ZWRBbHRzO1xuXHR9XG5cdHZhciByZXN1bHQgPSBuZXcgQml0U2V0KCk7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgY29uZmlncy5pdGVtcy5sZW5ndGg7IGkrKykge1xuXHRcdHJlc3VsdC5hZGQoY29uZmlncy5pdGVtc1tpXS5hbHQpO1xuXHR9XG5cdHJldHVybiBcIntcIiArIHJlc3VsdC52YWx1ZXMoKS5qb2luKFwiLCBcIikgKyBcIn1cIjtcbn07XG5cbmV4cG9ydHMuRGlhZ25vc3RpY0Vycm9yTGlzdGVuZXIgPSBEaWFnbm9zdGljRXJyb3JMaXN0ZW5lcjsiLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuXG4vLyBQcm92aWRlcyBhbiBlbXB0eSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBBTlRMUkVycm9yTGlzdGVuZXJ9LiBUaGVcbi8vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgZWFjaCBtZXRob2QgZG9lcyBub3RoaW5nLCBidXQgY2FuIGJlIG92ZXJyaWRkZW4gYXNcbi8vIG5lY2Vzc2FyeS5cblxuZnVuY3Rpb24gRXJyb3JMaXN0ZW5lcigpIHtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkVycm9yTGlzdGVuZXIucHJvdG90eXBlLnN5bnRheEVycm9yID0gZnVuY3Rpb24ocmVjb2duaXplciwgb2ZmZW5kaW5nU3ltYm9sLCBsaW5lLCBjb2x1bW4sIG1zZywgZSkge1xufTtcblxuRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUucmVwb3J0QW1iaWd1aXR5ID0gZnVuY3Rpb24ocmVjb2duaXplciwgZGZhLCBzdGFydEluZGV4LCBzdG9wSW5kZXgsIGV4YWN0LCBhbWJpZ0FsdHMsIGNvbmZpZ3MpIHtcbn07XG5cbkVycm9yTGlzdGVuZXIucHJvdG90eXBlLnJlcG9ydEF0dGVtcHRpbmdGdWxsQ29udGV4dCA9IGZ1bmN0aW9uKHJlY29nbml6ZXIsIGRmYSwgc3RhcnRJbmRleCwgc3RvcEluZGV4LCBjb25mbGljdGluZ0FsdHMsIGNvbmZpZ3MpIHtcbn07XG5cbkVycm9yTGlzdGVuZXIucHJvdG90eXBlLnJlcG9ydENvbnRleHRTZW5zaXRpdml0eSA9IGZ1bmN0aW9uKHJlY29nbml6ZXIsIGRmYSwgc3RhcnRJbmRleCwgc3RvcEluZGV4LCBwcmVkaWN0aW9uLCBjb25maWdzKSB7XG59O1xuXG5mdW5jdGlvbiBDb25zb2xlRXJyb3JMaXN0ZW5lcigpIHtcblx0RXJyb3JMaXN0ZW5lci5jYWxsKHRoaXMpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuQ29uc29sZUVycm9yTGlzdGVuZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvckxpc3RlbmVyLnByb3RvdHlwZSk7XG5Db25zb2xlRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb25zb2xlRXJyb3JMaXN0ZW5lcjtcblxuLy9cbi8vIFByb3ZpZGVzIGEgZGVmYXVsdCBpbnN0YW5jZSBvZiB7QGxpbmsgQ29uc29sZUVycm9yTGlzdGVuZXJ9LlxuLy9cbkNvbnNvbGVFcnJvckxpc3RlbmVyLklOU1RBTkNFID0gbmV3IENvbnNvbGVFcnJvckxpc3RlbmVyKCk7XG5cbi8vXG4vLyB7QGluaGVyaXREb2N9XG4vL1xuLy8gPHA+XG4vLyBUaGlzIGltcGxlbWVudGF0aW9uIHByaW50cyBtZXNzYWdlcyB0byB7QGxpbmsgU3lzdGVtLy9lcnJ9IGNvbnRhaW5pbmcgdGhlXG4vLyB2YWx1ZXMgb2Yge0Bjb2RlIGxpbmV9LCB7QGNvZGUgY2hhclBvc2l0aW9uSW5MaW5lfSwgYW5kIHtAY29kZSBtc2d9IHVzaW5nXG4vLyB0aGUgZm9sbG93aW5nIGZvcm1hdC48L3A+XG4vL1xuLy8gPHByZT5cbi8vIGxpbmUgPGVtPmxpbmU8L2VtPjo8ZW0+Y2hhclBvc2l0aW9uSW5MaW5lPC9lbT4gPGVtPm1zZzwvZW0+XG4vLyA8L3ByZT5cbi8vXG5Db25zb2xlRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUuc3ludGF4RXJyb3IgPSBmdW5jdGlvbihyZWNvZ25pemVyLCBvZmZlbmRpbmdTeW1ib2wsIGxpbmUsIGNvbHVtbiwgbXNnLCBlKSB7XG4gICAgY29uc29sZS5lcnJvcihcImxpbmUgXCIgKyBsaW5lICsgXCI6XCIgKyBjb2x1bW4gKyBcIiBcIiArIG1zZyk7XG59O1xuXG5mdW5jdGlvbiBQcm94eUVycm9yTGlzdGVuZXIoZGVsZWdhdGVzKSB7XG5cdEVycm9yTGlzdGVuZXIuY2FsbCh0aGlzKTtcbiAgICBpZiAoZGVsZWdhdGVzPT09bnVsbCkge1xuICAgICAgICB0aHJvdyBcImRlbGVnYXRlc1wiO1xuICAgIH1cbiAgICB0aGlzLmRlbGVnYXRlcyA9IGRlbGVnYXRlcztcblx0cmV0dXJuIHRoaXM7XG59XG5cblByb3h5RXJyb3JMaXN0ZW5lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yTGlzdGVuZXIucHJvdG90eXBlKTtcblByb3h5RXJyb3JMaXN0ZW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcm94eUVycm9yTGlzdGVuZXI7XG5cblByb3h5RXJyb3JMaXN0ZW5lci5wcm90b3R5cGUuc3ludGF4RXJyb3IgPSBmdW5jdGlvbihyZWNvZ25pemVyLCBvZmZlbmRpbmdTeW1ib2wsIGxpbmUsIGNvbHVtbiwgbXNnLCBlKSB7XG4gICAgdGhpcy5kZWxlZ2F0ZXMubWFwKGZ1bmN0aW9uKGQpIHsgZC5zeW50YXhFcnJvcihyZWNvZ25pemVyLCBvZmZlbmRpbmdTeW1ib2wsIGxpbmUsIGNvbHVtbiwgbXNnLCBlKTsgfSk7XG59O1xuXG5Qcm94eUVycm9yTGlzdGVuZXIucHJvdG90eXBlLnJlcG9ydEFtYmlndWl0eSA9IGZ1bmN0aW9uKHJlY29nbml6ZXIsIGRmYSwgc3RhcnRJbmRleCwgc3RvcEluZGV4LCBleGFjdCwgYW1iaWdBbHRzLCBjb25maWdzKSB7XG4gICAgdGhpcy5kZWxlZ2F0ZXMubWFwKGZ1bmN0aW9uKGQpIHsgZC5yZXBvcnRBbWJpZ3VpdHkocmVjb2duaXplciwgZGZhLCBzdGFydEluZGV4LCBzdG9wSW5kZXgsIGV4YWN0LCBhbWJpZ0FsdHMsIGNvbmZpZ3MpOyB9KTtcbn07XG5cblByb3h5RXJyb3JMaXN0ZW5lci5wcm90b3R5cGUucmVwb3J0QXR0ZW1wdGluZ0Z1bGxDb250ZXh0ID0gZnVuY3Rpb24ocmVjb2duaXplciwgZGZhLCBzdGFydEluZGV4LCBzdG9wSW5kZXgsIGNvbmZsaWN0aW5nQWx0cywgY29uZmlncykge1xuXHR0aGlzLmRlbGVnYXRlcy5tYXAoZnVuY3Rpb24oZCkgeyBkLnJlcG9ydEF0dGVtcHRpbmdGdWxsQ29udGV4dChyZWNvZ25pemVyLCBkZmEsIHN0YXJ0SW5kZXgsIHN0b3BJbmRleCwgY29uZmxpY3RpbmdBbHRzLCBjb25maWdzKTsgfSk7XG59O1xuXG5Qcm94eUVycm9yTGlzdGVuZXIucHJvdG90eXBlLnJlcG9ydENvbnRleHRTZW5zaXRpdml0eSA9IGZ1bmN0aW9uKHJlY29nbml6ZXIsIGRmYSwgc3RhcnRJbmRleCwgc3RvcEluZGV4LCBwcmVkaWN0aW9uLCBjb25maWdzKSB7XG5cdHRoaXMuZGVsZWdhdGVzLm1hcChmdW5jdGlvbihkKSB7IGQucmVwb3J0Q29udGV4dFNlbnNpdGl2aXR5KHJlY29nbml6ZXIsIGRmYSwgc3RhcnRJbmRleCwgc3RvcEluZGV4LCBwcmVkaWN0aW9uLCBjb25maWdzKTsgfSk7XG59O1xuXG5leHBvcnRzLkVycm9yTGlzdGVuZXIgPSBFcnJvckxpc3RlbmVyO1xuZXhwb3J0cy5Db25zb2xlRXJyb3JMaXN0ZW5lciA9IENvbnNvbGVFcnJvckxpc3RlbmVyO1xuZXhwb3J0cy5Qcm94eUVycm9yTGlzdGVuZXIgPSBQcm94eUVycm9yTGlzdGVuZXI7XG5cbiIsIi8vXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vL1xuXG52YXIgVG9rZW4gPSByZXF1aXJlKCcuLy4uL1Rva2VuJykuVG9rZW47XG52YXIgRXJyb3JzID0gcmVxdWlyZSgnLi9FcnJvcnMnKTtcbnZhciBOb1ZpYWJsZUFsdEV4Y2VwdGlvbiA9IEVycm9ycy5Ob1ZpYWJsZUFsdEV4Y2VwdGlvbjtcbnZhciBJbnB1dE1pc21hdGNoRXhjZXB0aW9uID0gRXJyb3JzLklucHV0TWlzbWF0Y2hFeGNlcHRpb247XG52YXIgRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9uID0gRXJyb3JzLkZhaWxlZFByZWRpY2F0ZUV4Y2VwdGlvbjtcbnZhciBQYXJzZUNhbmNlbGxhdGlvbkV4Y2VwdGlvbiA9IEVycm9ycy5QYXJzZUNhbmNlbGxhdGlvbkV4Y2VwdGlvbjtcbnZhciBBVE5TdGF0ZSA9IHJlcXVpcmUoJy4vLi4vYXRuL0FUTlN0YXRlJykuQVROU3RhdGU7XG52YXIgSW50ZXJ2YWwgPSByZXF1aXJlKCcuLy4uL0ludGVydmFsU2V0JykuSW50ZXJ2YWw7XG52YXIgSW50ZXJ2YWxTZXQgPSByZXF1aXJlKCcuLy4uL0ludGVydmFsU2V0JykuSW50ZXJ2YWxTZXQ7XG5cbmZ1bmN0aW9uIEVycm9yU3RyYXRlZ3koKSB7XG5cbn1cblxuRXJyb3JTdHJhdGVneS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbihyZWNvZ25pemVyKXtcbn07XG5cbkVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlY292ZXJJbmxpbmUgPSBmdW5jdGlvbihyZWNvZ25pemVyKXtcbn07XG5cbkVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlY292ZXIgPSBmdW5jdGlvbihyZWNvZ25pemVyLCBlKXtcbn07XG5cbkVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbihyZWNvZ25pemVyKXtcbn07XG5cbkVycm9yU3RyYXRlZ3kucHJvdG90eXBlLmluRXJyb3JSZWNvdmVyeU1vZGUgPSBmdW5jdGlvbihyZWNvZ25pemVyKXtcbn07XG5cbkVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlcG9ydEVycm9yID0gZnVuY3Rpb24ocmVjb2duaXplcil7XG59O1xuXG5cblxuLy8gVGhpcyBpcyB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB7QGxpbmsgQU5UTFJFcnJvclN0cmF0ZWd5fSB1c2VkIGZvclxuLy8gZXJyb3IgcmVwb3J0aW5nIGFuZCByZWNvdmVyeSBpbiBBTlRMUiBwYXJzZXJzLlxuLy9cbmZ1bmN0aW9uIERlZmF1bHRFcnJvclN0cmF0ZWd5KCkge1xuXHRFcnJvclN0cmF0ZWd5LmNhbGwodGhpcyk7XG4gICAgLy8gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGVycm9yIHN0cmF0ZWd5IGlzIGN1cnJlbnRseSBcInJlY292ZXJpbmcgZnJvbSBhblxuICAgIC8vIGVycm9yXCIuIFRoaXMgaXMgdXNlZCB0byBzdXBwcmVzcyByZXBvcnRpbmcgbXVsdGlwbGUgZXJyb3IgbWVzc2FnZXMgd2hpbGVcbiAgICAvLyBhdHRlbXB0aW5nIHRvIHJlY292ZXIgZnJvbSBhIGRldGVjdGVkIHN5bnRheCBlcnJvci5cbiAgICAvL1xuICAgIC8vIEBzZWUgLy9pbkVycm9yUmVjb3ZlcnlNb2RlXG4gICAgLy9cbiAgICB0aGlzLmVycm9yUmVjb3ZlcnlNb2RlID0gZmFsc2U7XG5cbiAgICAvLyBUaGUgaW5kZXggaW50byB0aGUgaW5wdXQgc3RyZWFtIHdoZXJlIHRoZSBsYXN0IGVycm9yIG9jY3VycmVkLlxuICAgIC8vIFRoaXMgaXMgdXNlZCB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzIHdoZXJlIGFuIGVycm9yIGlzIGZvdW5kXG4gICAgLy8gYnV0IG5vIHRva2VuIGlzIGNvbnN1bWVkIGR1cmluZyByZWNvdmVyeS4uLmFub3RoZXIgZXJyb3IgaXMgZm91bmQsXG4gICAgLy8gYWQgbmF1c2V1bS4gVGhpcyBpcyBhIGZhaWxzYWZlIG1lY2hhbmlzbSB0byBndWFyYW50ZWUgdGhhdCBhdCBsZWFzdFxuICAgIC8vIG9uZSB0b2tlbi90cmVlIG5vZGUgaXMgY29uc3VtZWQgZm9yIHR3byBlcnJvcnMuXG4gICAgLy9cbiAgICB0aGlzLmxhc3RFcnJvckluZGV4ID0gLTE7XG4gICAgdGhpcy5sYXN0RXJyb3JTdGF0ZXMgPSBudWxsO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5EZWZhdWx0RXJyb3JTdHJhdGVneS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yU3RyYXRlZ3kucHJvdG90eXBlKTtcbkRlZmF1bHRFcnJvclN0cmF0ZWd5LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERlZmF1bHRFcnJvclN0cmF0ZWd5O1xuXG4vLyA8cD5UaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBzaW1wbHkgY2FsbHMge0BsaW5rIC8vZW5kRXJyb3JDb25kaXRpb259IHRvXG4vLyBlbnN1cmUgdGhhdCB0aGUgaGFuZGxlciBpcyBub3QgaW4gZXJyb3IgcmVjb3ZlcnkgbW9kZS48L3A+XG5EZWZhdWx0RXJyb3JTdHJhdGVneS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbihyZWNvZ25pemVyKSB7XG4gICAgdGhpcy5lbmRFcnJvckNvbmRpdGlvbihyZWNvZ25pemVyKTtcbn07XG5cbi8vXG4vLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gZW50ZXIgZXJyb3IgcmVjb3ZlcnkgbW9kZSB3aGVuIGEgcmVjb2duaXRpb25cbi8vIGV4Y2VwdGlvbiBpcyByZXBvcnRlZC5cbi8vXG4vLyBAcGFyYW0gcmVjb2duaXplciB0aGUgcGFyc2VyIGluc3RhbmNlXG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLmJlZ2luRXJyb3JDb25kaXRpb24gPSBmdW5jdGlvbihyZWNvZ25pemVyKSB7XG4gICAgdGhpcy5lcnJvclJlY292ZXJ5TW9kZSA9IHRydWU7XG59O1xuXG5EZWZhdWx0RXJyb3JTdHJhdGVneS5wcm90b3R5cGUuaW5FcnJvclJlY292ZXJ5TW9kZSA9IGZ1bmN0aW9uKHJlY29nbml6ZXIpIHtcbiAgICByZXR1cm4gdGhpcy5lcnJvclJlY292ZXJ5TW9kZTtcbn07XG5cbi8vXG4vLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gbGVhdmUgZXJyb3IgcmVjb3ZlcnkgbW9kZSBhZnRlciByZWNvdmVyaW5nIGZyb21cbi8vIGEgcmVjb2duaXRpb24gZXhjZXB0aW9uLlxuLy9cbi8vIEBwYXJhbSByZWNvZ25pemVyXG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLmVuZEVycm9yQ29uZGl0aW9uID0gZnVuY3Rpb24ocmVjb2duaXplcikge1xuICAgIHRoaXMuZXJyb3JSZWNvdmVyeU1vZGUgPSBmYWxzZTtcbiAgICB0aGlzLmxhc3RFcnJvclN0YXRlcyA9IG51bGw7XG4gICAgdGhpcy5sYXN0RXJyb3JJbmRleCA9IC0xO1xufTtcblxuLy9cbi8vIHtAaW5oZXJpdERvY31cbi8vXG4vLyA8cD5UaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBzaW1wbHkgY2FsbHMge0BsaW5rIC8vZW5kRXJyb3JDb25kaXRpb259LjwvcD5cbi8vXG5EZWZhdWx0RXJyb3JTdHJhdGVneS5wcm90b3R5cGUucmVwb3J0TWF0Y2ggPSBmdW5jdGlvbihyZWNvZ25pemVyKSB7XG4gICAgdGhpcy5lbmRFcnJvckNvbmRpdGlvbihyZWNvZ25pemVyKTtcbn07XG5cbi8vXG4vLyB7QGluaGVyaXREb2N9XG4vL1xuLy8gPHA+VGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBpbW1lZGlhdGVseSBpZiB0aGUgaGFuZGxlciBpcyBhbHJlYWR5XG4vLyBpbiBlcnJvciByZWNvdmVyeSBtb2RlLiBPdGhlcndpc2UsIGl0IGNhbGxzIHtAbGluayAvL2JlZ2luRXJyb3JDb25kaXRpb259XG4vLyBhbmQgZGlzcGF0Y2hlcyB0aGUgcmVwb3J0aW5nIHRhc2sgYmFzZWQgb24gdGhlIHJ1bnRpbWUgdHlwZSBvZiB7QGNvZGUgZX1cbi8vIGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIHRhYmxlLjwvcD5cbi8vXG4vLyA8dWw+XG4vLyA8bGk+e0BsaW5rIE5vVmlhYmxlQWx0RXhjZXB0aW9ufTogRGlzcGF0Y2hlcyB0aGUgY2FsbCB0b1xuLy8ge0BsaW5rIC8vcmVwb3J0Tm9WaWFibGVBbHRlcm5hdGl2ZX08L2xpPlxuLy8gPGxpPntAbGluayBJbnB1dE1pc21hdGNoRXhjZXB0aW9ufTogRGlzcGF0Y2hlcyB0aGUgY2FsbCB0b1xuLy8ge0BsaW5rIC8vcmVwb3J0SW5wdXRNaXNtYXRjaH08L2xpPlxuLy8gPGxpPntAbGluayBGYWlsZWRQcmVkaWNhdGVFeGNlcHRpb259OiBEaXNwYXRjaGVzIHRoZSBjYWxsIHRvXG4vLyB7QGxpbmsgLy9yZXBvcnRGYWlsZWRQcmVkaWNhdGV9PC9saT5cbi8vIDxsaT5BbGwgb3RoZXIgdHlwZXM6IGNhbGxzIHtAbGluayBQYXJzZXIvL25vdGlmeUVycm9yTGlzdGVuZXJzfSB0byByZXBvcnRcbi8vIHRoZSBleGNlcHRpb248L2xpPlxuLy8gPC91bD5cbi8vXG5EZWZhdWx0RXJyb3JTdHJhdGVneS5wcm90b3R5cGUucmVwb3J0RXJyb3IgPSBmdW5jdGlvbihyZWNvZ25pemVyLCBlKSB7XG4gICAvLyBpZiB3ZSd2ZSBhbHJlYWR5IHJlcG9ydGVkIGFuIGVycm9yIGFuZCBoYXZlIG5vdCBtYXRjaGVkIGEgdG9rZW5cbiAgIC8vIHlldCBzdWNjZXNzZnVsbHksIGRvbid0IHJlcG9ydCBhbnkgZXJyb3JzLlxuICAgIGlmKHRoaXMuaW5FcnJvclJlY292ZXJ5TW9kZShyZWNvZ25pemVyKSkge1xuICAgICAgICByZXR1cm47IC8vIGRvbid0IHJlcG9ydCBzcHVyaW91cyBlcnJvcnNcbiAgICB9XG4gICAgdGhpcy5iZWdpbkVycm9yQ29uZGl0aW9uKHJlY29nbml6ZXIpO1xuICAgIGlmICggZSBpbnN0YW5jZW9mIE5vVmlhYmxlQWx0RXhjZXB0aW9uICkge1xuICAgICAgICB0aGlzLnJlcG9ydE5vVmlhYmxlQWx0ZXJuYXRpdmUocmVjb2duaXplciwgZSk7XG4gICAgfSBlbHNlIGlmICggZSBpbnN0YW5jZW9mIElucHV0TWlzbWF0Y2hFeGNlcHRpb24gKSB7XG4gICAgICAgIHRoaXMucmVwb3J0SW5wdXRNaXNtYXRjaChyZWNvZ25pemVyLCBlKTtcbiAgICB9IGVsc2UgaWYgKCBlIGluc3RhbmNlb2YgRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9uICkge1xuICAgICAgICB0aGlzLnJlcG9ydEZhaWxlZFByZWRpY2F0ZShyZWNvZ25pemVyLCBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhcInVua25vd24gcmVjb2duaXRpb24gZXJyb3IgdHlwZTogXCIgKyBlLmNvbnN0cnVjdG9yLm5hbWUpO1xuICAgICAgICBjb25zb2xlLmxvZyhlLnN0YWNrKTtcbiAgICAgICAgcmVjb2duaXplci5ub3RpZnlFcnJvckxpc3RlbmVycyhlLmdldE9mZmVuZGluZ1Rva2VuKCksIGUuZ2V0TWVzc2FnZSgpLCBlKTtcbiAgICB9XG59O1xuLy9cbi8vIHtAaW5oZXJpdERvY31cbi8vXG4vLyA8cD5UaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXN5bmNocm9uaXplcyB0aGUgcGFyc2VyIGJ5IGNvbnN1bWluZyB0b2tlbnNcbi8vIHVudGlsIHdlIGZpbmQgb25lIGluIHRoZSByZXN5bmNocm9uaXphdGlvbiBzZXQtLWxvb3NlbHkgdGhlIHNldCBvZiB0b2tlbnNcbi8vIHRoYXQgY2FuIGZvbGxvdyB0aGUgY3VycmVudCBydWxlLjwvcD5cbi8vXG5EZWZhdWx0RXJyb3JTdHJhdGVneS5wcm90b3R5cGUucmVjb3ZlciA9IGZ1bmN0aW9uKHJlY29nbml6ZXIsIGUpIHtcbiAgICBpZiAodGhpcy5sYXN0RXJyb3JJbmRleD09PXJlY29nbml6ZXIuZ2V0SW5wdXRTdHJlYW0oKS5pbmRleCAmJlxuICAgICAgICB0aGlzLmxhc3RFcnJvclN0YXRlcyAhPT0gbnVsbCAmJiB0aGlzLmxhc3RFcnJvclN0YXRlcy5pbmRleE9mKHJlY29nbml6ZXIuc3RhdGUpPj0wKSB7XG5cdFx0Ly8gdWggb2gsIGFub3RoZXIgZXJyb3IgYXQgc2FtZSB0b2tlbiBpbmRleCBhbmQgcHJldmlvdXNseS12aXNpdGVkXG5cdFx0Ly8gc3RhdGUgaW4gQVROOyBtdXN0IGJlIGEgY2FzZSB3aGVyZSBMVCgxKSBpcyBpbiB0aGUgcmVjb3Zlcnlcblx0XHQvLyB0b2tlbiBzZXQgc28gbm90aGluZyBnb3QgY29uc3VtZWQuIENvbnN1bWUgYSBzaW5nbGUgdG9rZW5cblx0XHQvLyBhdCBsZWFzdCB0byBwcmV2ZW50IGFuIGluZmluaXRlIGxvb3A7IHRoaXMgaXMgYSBmYWlsc2FmZS5cblx0XHRyZWNvZ25pemVyLmNvbnN1bWUoKTtcbiAgICB9XG4gICAgdGhpcy5sYXN0RXJyb3JJbmRleCA9IHJlY29nbml6ZXIuX2lucHV0LmluZGV4O1xuICAgIGlmICh0aGlzLmxhc3RFcnJvclN0YXRlcyA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLmxhc3RFcnJvclN0YXRlcyA9IFtdO1xuICAgIH1cbiAgICB0aGlzLmxhc3RFcnJvclN0YXRlcy5wdXNoKHJlY29nbml6ZXIuc3RhdGUpO1xuICAgIHZhciBmb2xsb3dTZXQgPSB0aGlzLmdldEVycm9yUmVjb3ZlcnlTZXQocmVjb2duaXplcik7XG4gICAgdGhpcy5jb25zdW1lVW50aWwocmVjb2duaXplciwgZm9sbG93U2V0KTtcbn07XG5cbi8vIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBBTlRMUkVycm9yU3RyYXRlZ3kvL3N5bmN9IG1ha2VzIHN1cmVcbi8vIHRoYXQgdGhlIGN1cnJlbnQgbG9va2FoZWFkIHN5bWJvbCBpcyBjb25zaXN0ZW50IHdpdGggd2hhdCB3ZXJlIGV4cGVjdGluZ1xuLy8gYXQgdGhpcyBwb2ludCBpbiB0aGUgQVROLiBZb3UgY2FuIGNhbGwgdGhpcyBhbnl0aW1lIGJ1dCBBTlRMUiBvbmx5XG4vLyBnZW5lcmF0ZXMgY29kZSB0byBjaGVjayBiZWZvcmUgc3VicnVsZXMvbG9vcHMgYW5kIGVhY2ggaXRlcmF0aW9uLlxuLy9cbi8vIDxwPkltcGxlbWVudHMgSmltIElkbGUncyBtYWdpYyBzeW5jIG1lY2hhbmlzbSBpbiBjbG9zdXJlcyBhbmQgb3B0aW9uYWxcbi8vIHN1YnJ1bGVzLiBFLmcuLDwvcD5cbi8vXG4vLyA8cHJlPlxuLy8gYSA6IHN5bmMgKCBzdHVmZiBzeW5jICkqIDtcbi8vIHN5bmMgOiB7Y29uc3VtZSB0byB3aGF0IGNhbiBmb2xsb3cgc3luY30gO1xuLy8gPC9wcmU+XG4vL1xuLy8gQXQgdGhlIHN0YXJ0IG9mIGEgc3ViIHJ1bGUgdXBvbiBlcnJvciwge0BsaW5rIC8vc3luY30gcGVyZm9ybXMgc2luZ2xlXG4vLyB0b2tlbiBkZWxldGlvbiwgaWYgcG9zc2libGUuIElmIGl0IGNhbid0IGRvIHRoYXQsIGl0IGJhaWxzIG9uIHRoZSBjdXJyZW50XG4vLyBydWxlIGFuZCB1c2VzIHRoZSBkZWZhdWx0IGVycm9yIHJlY292ZXJ5LCB3aGljaCBjb25zdW1lcyB1bnRpbCB0aGVcbi8vIHJlc3luY2hyb25pemF0aW9uIHNldCBvZiB0aGUgY3VycmVudCBydWxlLlxuLy9cbi8vIDxwPklmIHRoZSBzdWIgcnVsZSBpcyBvcHRpb25hbCAoe0Bjb2RlICguLi4pP30sIHtAY29kZSAoLi4uKSp9LCBvciBibG9ja1xuLy8gd2l0aCBhbiBlbXB0eSBhbHRlcm5hdGl2ZSksIHRoZW4gdGhlIGV4cGVjdGVkIHNldCBpbmNsdWRlcyB3aGF0IGZvbGxvd3Ncbi8vIHRoZSBzdWJydWxlLjwvcD5cbi8vXG4vLyA8cD5EdXJpbmcgbG9vcCBpdGVyYXRpb24sIGl0IGNvbnN1bWVzIHVudGlsIGl0IHNlZXMgYSB0b2tlbiB0aGF0IGNhbiBzdGFydCBhXG4vLyBzdWIgcnVsZSBvciB3aGF0IGZvbGxvd3MgbG9vcC4gWWVzLCB0aGF0IGlzIHByZXR0eSBhZ2dyZXNzaXZlLiBXZSBvcHQgdG9cbi8vIHN0YXkgaW4gdGhlIGxvb3AgYXMgbG9uZyBhcyBwb3NzaWJsZS48L3A+XG4vL1xuLy8gPHA+PHN0cm9uZz5PUklHSU5TPC9zdHJvbmc+PC9wPlxuLy9cbi8vIDxwPlByZXZpb3VzIHZlcnNpb25zIG9mIEFOVExSIGRpZCBhIHBvb3Igam9iIG9mIHRoZWlyIHJlY292ZXJ5IHdpdGhpbiBsb29wcy5cbi8vIEEgc2luZ2xlIG1pc21hdGNoIHRva2VuIG9yIG1pc3NpbmcgdG9rZW4gd291bGQgZm9yY2UgdGhlIHBhcnNlciB0byBiYWlsXG4vLyBvdXQgb2YgdGhlIGVudGlyZSBydWxlcyBzdXJyb3VuZGluZyB0aGUgbG9vcC4gU28sIGZvciBydWxlPC9wPlxuLy9cbi8vIDxwcmU+XG4vLyBjbGFzc0RlZiA6ICdjbGFzcycgSUQgJ3snIG1lbWJlciogJ30nXG4vLyA8L3ByZT5cbi8vXG4vLyBpbnB1dCB3aXRoIGFuIGV4dHJhIHRva2VuIGJldHdlZW4gbWVtYmVycyB3b3VsZCBmb3JjZSB0aGUgcGFyc2VyIHRvXG4vLyBjb25zdW1lIHVudGlsIGl0IGZvdW5kIHRoZSBuZXh0IGNsYXNzIGRlZmluaXRpb24gcmF0aGVyIHRoYW4gdGhlIG5leHRcbi8vIG1lbWJlciBkZWZpbml0aW9uIG9mIHRoZSBjdXJyZW50IGNsYXNzLlxuLy9cbi8vIDxwPlRoaXMgZnVuY3Rpb25hbGl0eSBjb3N0IGEgbGl0dGxlIGJpdCBvZiBlZmZvcnQgYmVjYXVzZSB0aGUgcGFyc2VyIGhhcyB0b1xuLy8gY29tcGFyZSB0b2tlbiBzZXQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsb29wIGFuZCBhdCBlYWNoIGl0ZXJhdGlvbi4gSWYgZm9yXG4vLyBzb21lIHJlYXNvbiBzcGVlZCBpcyBzdWZmZXJpbmcgZm9yIHlvdSwgeW91IGNhbiB0dXJuIG9mZiB0aGlzXG4vLyBmdW5jdGlvbmFsaXR5IGJ5IHNpbXBseSBvdmVycmlkaW5nIHRoaXMgbWV0aG9kIGFzIGEgYmxhbmsgeyB9LjwvcD5cbi8vXG5EZWZhdWx0RXJyb3JTdHJhdGVneS5wcm90b3R5cGUuc3luYyA9IGZ1bmN0aW9uKHJlY29nbml6ZXIpIHtcbiAgICAvLyBJZiBhbHJlYWR5IHJlY292ZXJpbmcsIGRvbid0IHRyeSB0byBzeW5jXG4gICAgaWYgKHRoaXMuaW5FcnJvclJlY292ZXJ5TW9kZShyZWNvZ25pemVyKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBzID0gcmVjb2duaXplci5faW50ZXJwLmF0bi5zdGF0ZXNbcmVjb2duaXplci5zdGF0ZV07XG4gICAgdmFyIGxhID0gcmVjb2duaXplci5nZXRUb2tlblN0cmVhbSgpLkxBKDEpO1xuICAgIC8vIHRyeSBjaGVhcGVyIHN1YnNldCBmaXJzdDsgbWlnaHQgZ2V0IGx1Y2t5LiBzZWVtcyB0byBzaGF2ZSBhIHdlZSBiaXQgb2ZmXG4gICAgdmFyIG5leHRUb2tlbnMgPSByZWNvZ25pemVyLmF0bi5uZXh0VG9rZW5zKHMpO1xuICAgIGlmIChuZXh0VG9rZW5zLmNvbnRhaW5zKFRva2VuLkVQU0lMT04pIHx8IG5leHRUb2tlbnMuY29udGFpbnMobGEpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3dpdGNoIChzLnN0YXRlVHlwZSkge1xuICAgIGNhc2UgQVROU3RhdGUuQkxPQ0tfU1RBUlQ6XG4gICAgY2FzZSBBVE5TdGF0ZS5TVEFSX0JMT0NLX1NUQVJUOlxuICAgIGNhc2UgQVROU3RhdGUuUExVU19CTE9DS19TVEFSVDpcbiAgICBjYXNlIEFUTlN0YXRlLlNUQVJfTE9PUF9FTlRSWTpcbiAgICAgICAvLyByZXBvcnQgZXJyb3IgYW5kIHJlY292ZXIgaWYgcG9zc2libGVcbiAgICAgICAgaWYoIHRoaXMuc2luZ2xlVG9rZW5EZWxldGlvbihyZWNvZ25pemVyKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IElucHV0TWlzbWF0Y2hFeGNlcHRpb24ocmVjb2duaXplcik7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgY2FzZSBBVE5TdGF0ZS5QTFVTX0xPT1BfQkFDSzpcbiAgICBjYXNlIEFUTlN0YXRlLlNUQVJfTE9PUF9CQUNLOlxuICAgICAgICB0aGlzLnJlcG9ydFVud2FudGVkVG9rZW4ocmVjb2duaXplcik7XG4gICAgICAgIHZhciBleHBlY3RpbmcgPSBuZXcgSW50ZXJ2YWxTZXQoKTtcbiAgICAgICAgZXhwZWN0aW5nLmFkZFNldChyZWNvZ25pemVyLmdldEV4cGVjdGVkVG9rZW5zKCkpO1xuICAgICAgICB2YXIgd2hhdEZvbGxvd3NMb29wSXRlcmF0aW9uT3JSdWxlID0gZXhwZWN0aW5nLmFkZFNldCh0aGlzLmdldEVycm9yUmVjb3ZlcnlTZXQocmVjb2duaXplcikpO1xuICAgICAgICB0aGlzLmNvbnN1bWVVbnRpbChyZWNvZ25pemVyLCB3aGF0Rm9sbG93c0xvb3BJdGVyYXRpb25PclJ1bGUpO1xuICAgICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgICAvLyBkbyBub3RoaW5nIGlmIHdlIGNhbid0IGlkZW50aWZ5IHRoZSBleGFjdCBraW5kIG9mIEFUTiBzdGF0ZVxuICAgIH1cbn07XG5cbi8vIFRoaXMgaXMgY2FsbGVkIGJ5IHtAbGluayAvL3JlcG9ydEVycm9yfSB3aGVuIHRoZSBleGNlcHRpb24gaXMgYVxuLy8ge0BsaW5rIE5vVmlhYmxlQWx0RXhjZXB0aW9ufS5cbi8vXG4vLyBAc2VlIC8vcmVwb3J0RXJyb3Jcbi8vXG4vLyBAcGFyYW0gcmVjb2duaXplciB0aGUgcGFyc2VyIGluc3RhbmNlXG4vLyBAcGFyYW0gZSB0aGUgcmVjb2duaXRpb24gZXhjZXB0aW9uXG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlcG9ydE5vVmlhYmxlQWx0ZXJuYXRpdmUgPSBmdW5jdGlvbihyZWNvZ25pemVyLCBlKSB7XG4gICAgdmFyIHRva2VucyA9IHJlY29nbml6ZXIuZ2V0VG9rZW5TdHJlYW0oKTtcbiAgICB2YXIgaW5wdXQ7XG4gICAgaWYodG9rZW5zICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChlLnN0YXJ0VG9rZW4udHlwZT09PVRva2VuLkVPRikge1xuICAgICAgICAgICAgaW5wdXQgPSBcIjxFT0Y+XCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbnB1dCA9IHRva2Vucy5nZXRUZXh0KG5ldyBJbnRlcnZhbChlLnN0YXJ0VG9rZW4udG9rZW5JbmRleCwgZS5vZmZlbmRpbmdUb2tlbi50b2tlbkluZGV4KSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBpbnB1dCA9IFwiPHVua25vd24gaW5wdXQ+XCI7XG4gICAgfVxuICAgIHZhciBtc2cgPSBcIm5vIHZpYWJsZSBhbHRlcm5hdGl2ZSBhdCBpbnB1dCBcIiArIHRoaXMuZXNjYXBlV1NBbmRRdW90ZShpbnB1dCk7XG4gICAgcmVjb2duaXplci5ub3RpZnlFcnJvckxpc3RlbmVycyhtc2csIGUub2ZmZW5kaW5nVG9rZW4sIGUpO1xufTtcblxuLy9cbi8vIFRoaXMgaXMgY2FsbGVkIGJ5IHtAbGluayAvL3JlcG9ydEVycm9yfSB3aGVuIHRoZSBleGNlcHRpb24gaXMgYW5cbi8vIHtAbGluayBJbnB1dE1pc21hdGNoRXhjZXB0aW9ufS5cbi8vXG4vLyBAc2VlIC8vcmVwb3J0RXJyb3Jcbi8vXG4vLyBAcGFyYW0gcmVjb2duaXplciB0aGUgcGFyc2VyIGluc3RhbmNlXG4vLyBAcGFyYW0gZSB0aGUgcmVjb2duaXRpb24gZXhjZXB0aW9uXG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlcG9ydElucHV0TWlzbWF0Y2ggPSBmdW5jdGlvbihyZWNvZ25pemVyLCBlKSB7XG4gICAgdmFyIG1zZyA9IFwibWlzbWF0Y2hlZCBpbnB1dCBcIiArIHRoaXMuZ2V0VG9rZW5FcnJvckRpc3BsYXkoZS5vZmZlbmRpbmdUb2tlbikgK1xuICAgICAgICAgIFwiIGV4cGVjdGluZyBcIiArIGUuZ2V0RXhwZWN0ZWRUb2tlbnMoKS50b1N0cmluZyhyZWNvZ25pemVyLmxpdGVyYWxOYW1lcywgcmVjb2duaXplci5zeW1ib2xpY05hbWVzKTtcbiAgICByZWNvZ25pemVyLm5vdGlmeUVycm9yTGlzdGVuZXJzKG1zZywgZS5vZmZlbmRpbmdUb2tlbiwgZSk7XG59O1xuXG4vL1xuLy8gVGhpcyBpcyBjYWxsZWQgYnkge0BsaW5rIC8vcmVwb3J0RXJyb3J9IHdoZW4gdGhlIGV4Y2VwdGlvbiBpcyBhXG4vLyB7QGxpbmsgRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9ufS5cbi8vXG4vLyBAc2VlIC8vcmVwb3J0RXJyb3Jcbi8vXG4vLyBAcGFyYW0gcmVjb2duaXplciB0aGUgcGFyc2VyIGluc3RhbmNlXG4vLyBAcGFyYW0gZSB0aGUgcmVjb2duaXRpb24gZXhjZXB0aW9uXG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlcG9ydEZhaWxlZFByZWRpY2F0ZSA9IGZ1bmN0aW9uKHJlY29nbml6ZXIsIGUpIHtcbiAgICB2YXIgcnVsZU5hbWUgPSByZWNvZ25pemVyLnJ1bGVOYW1lc1tyZWNvZ25pemVyLl9jdHgucnVsZUluZGV4XTtcbiAgICB2YXIgbXNnID0gXCJydWxlIFwiICsgcnVsZU5hbWUgKyBcIiBcIiArIGUubWVzc2FnZTtcbiAgICByZWNvZ25pemVyLm5vdGlmeUVycm9yTGlzdGVuZXJzKG1zZywgZS5vZmZlbmRpbmdUb2tlbiwgZSk7XG59O1xuXG4vLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gcmVwb3J0IGEgc3ludGF4IGVycm9yIHdoaWNoIHJlcXVpcmVzIHRoZSByZW1vdmFsXG4vLyBvZiBhIHRva2VuIGZyb20gdGhlIGlucHV0IHN0cmVhbS4gQXQgdGhlIHRpbWUgdGhpcyBtZXRob2QgaXMgY2FsbGVkLCB0aGVcbi8vIGVycm9uZW91cyBzeW1ib2wgaXMgY3VycmVudCB7QGNvZGUgTFQoMSl9IHN5bWJvbCBhbmQgaGFzIG5vdCB5ZXQgYmVlblxuLy8gcmVtb3ZlZCBmcm9tIHRoZSBpbnB1dCBzdHJlYW0uIFdoZW4gdGhpcyBtZXRob2QgcmV0dXJucyxcbi8vIHtAY29kZSByZWNvZ25pemVyfSBpcyBpbiBlcnJvciByZWNvdmVyeSBtb2RlLlxuLy9cbi8vIDxwPlRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHtAbGluayAvL3NpbmdsZVRva2VuRGVsZXRpb259IGlkZW50aWZpZXNcbi8vIHNpbmdsZS10b2tlbiBkZWxldGlvbiBhcyBhIHZpYWJsZSByZWNvdmVyeSBzdHJhdGVneSBmb3IgYSBtaXNtYXRjaGVkXG4vLyBpbnB1dCBlcnJvci48L3A+XG4vL1xuLy8gPHA+VGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gc2ltcGx5IHJldHVybnMgaWYgdGhlIGhhbmRsZXIgaXMgYWxyZWFkeSBpblxuLy8gZXJyb3IgcmVjb3ZlcnkgbW9kZS4gT3RoZXJ3aXNlLCBpdCBjYWxscyB7QGxpbmsgLy9iZWdpbkVycm9yQ29uZGl0aW9ufSB0b1xuLy8gZW50ZXIgZXJyb3IgcmVjb3ZlcnkgbW9kZSwgZm9sbG93ZWQgYnkgY2FsbGluZ1xuLy8ge0BsaW5rIFBhcnNlci8vbm90aWZ5RXJyb3JMaXN0ZW5lcnN9LjwvcD5cbi8vXG4vLyBAcGFyYW0gcmVjb2duaXplciB0aGUgcGFyc2VyIGluc3RhbmNlXG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlcG9ydFVud2FudGVkVG9rZW4gPSBmdW5jdGlvbihyZWNvZ25pemVyKSB7XG4gICAgaWYgKHRoaXMuaW5FcnJvclJlY292ZXJ5TW9kZShyZWNvZ25pemVyKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuYmVnaW5FcnJvckNvbmRpdGlvbihyZWNvZ25pemVyKTtcbiAgICB2YXIgdCA9IHJlY29nbml6ZXIuZ2V0Q3VycmVudFRva2VuKCk7XG4gICAgdmFyIHRva2VuTmFtZSA9IHRoaXMuZ2V0VG9rZW5FcnJvckRpc3BsYXkodCk7XG4gICAgdmFyIGV4cGVjdGluZyA9IHRoaXMuZ2V0RXhwZWN0ZWRUb2tlbnMocmVjb2duaXplcik7XG4gICAgdmFyIG1zZyA9IFwiZXh0cmFuZW91cyBpbnB1dCBcIiArIHRva2VuTmFtZSArIFwiIGV4cGVjdGluZyBcIiArXG4gICAgICAgIGV4cGVjdGluZy50b1N0cmluZyhyZWNvZ25pemVyLmxpdGVyYWxOYW1lcywgcmVjb2duaXplci5zeW1ib2xpY05hbWVzKTtcbiAgICByZWNvZ25pemVyLm5vdGlmeUVycm9yTGlzdGVuZXJzKG1zZywgdCwgbnVsbCk7XG59O1xuLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIHJlcG9ydCBhIHN5bnRheCBlcnJvciB3aGljaCByZXF1aXJlcyB0aGVcbi8vIGluc2VydGlvbiBvZiBhIG1pc3NpbmcgdG9rZW4gaW50byB0aGUgaW5wdXQgc3RyZWFtLiBBdCB0aGUgdGltZSB0aGlzXG4vLyBtZXRob2QgaXMgY2FsbGVkLCB0aGUgbWlzc2luZyB0b2tlbiBoYXMgbm90IHlldCBiZWVuIGluc2VydGVkLiBXaGVuIHRoaXNcbi8vIG1ldGhvZCByZXR1cm5zLCB7QGNvZGUgcmVjb2duaXplcn0gaXMgaW4gZXJyb3IgcmVjb3ZlcnkgbW9kZS5cbi8vXG4vLyA8cD5UaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB7QGxpbmsgLy9zaW5nbGVUb2tlbkluc2VydGlvbn0gaWRlbnRpZmllc1xuLy8gc2luZ2xlLXRva2VuIGluc2VydGlvbiBhcyBhIHZpYWJsZSByZWNvdmVyeSBzdHJhdGVneSBmb3IgYSBtaXNtYXRjaGVkXG4vLyBpbnB1dCBlcnJvci48L3A+XG4vL1xuLy8gPHA+VGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gc2ltcGx5IHJldHVybnMgaWYgdGhlIGhhbmRsZXIgaXMgYWxyZWFkeSBpblxuLy8gZXJyb3IgcmVjb3ZlcnkgbW9kZS4gT3RoZXJ3aXNlLCBpdCBjYWxscyB7QGxpbmsgLy9iZWdpbkVycm9yQ29uZGl0aW9ufSB0b1xuLy8gZW50ZXIgZXJyb3IgcmVjb3ZlcnkgbW9kZSwgZm9sbG93ZWQgYnkgY2FsbGluZ1xuLy8ge0BsaW5rIFBhcnNlci8vbm90aWZ5RXJyb3JMaXN0ZW5lcnN9LjwvcD5cbi8vXG4vLyBAcGFyYW0gcmVjb2duaXplciB0aGUgcGFyc2VyIGluc3RhbmNlXG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlcG9ydE1pc3NpbmdUb2tlbiA9IGZ1bmN0aW9uKHJlY29nbml6ZXIpIHtcbiAgICBpZiAoIHRoaXMuaW5FcnJvclJlY292ZXJ5TW9kZShyZWNvZ25pemVyKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuYmVnaW5FcnJvckNvbmRpdGlvbihyZWNvZ25pemVyKTtcbiAgICB2YXIgdCA9IHJlY29nbml6ZXIuZ2V0Q3VycmVudFRva2VuKCk7XG4gICAgdmFyIGV4cGVjdGluZyA9IHRoaXMuZ2V0RXhwZWN0ZWRUb2tlbnMocmVjb2duaXplcik7XG4gICAgdmFyIG1zZyA9IFwibWlzc2luZyBcIiArIGV4cGVjdGluZy50b1N0cmluZyhyZWNvZ25pemVyLmxpdGVyYWxOYW1lcywgcmVjb2duaXplci5zeW1ib2xpY05hbWVzKSArXG4gICAgICAgICAgXCIgYXQgXCIgKyB0aGlzLmdldFRva2VuRXJyb3JEaXNwbGF5KHQpO1xuICAgIHJlY29nbml6ZXIubm90aWZ5RXJyb3JMaXN0ZW5lcnMobXNnLCB0LCBudWxsKTtcbn07XG5cbi8vIDxwPlRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGF0dGVtcHRzIHRvIHJlY292ZXIgZnJvbSB0aGUgbWlzbWF0Y2hlZCBpbnB1dFxuLy8gYnkgdXNpbmcgc2luZ2xlIHRva2VuIGluc2VydGlvbiBhbmQgZGVsZXRpb24gYXMgZGVzY3JpYmVkIGJlbG93LiBJZiB0aGVcbi8vIHJlY292ZXJ5IGF0dGVtcHQgZmFpbHMsIHRoaXMgbWV0aG9kIHRocm93cyBhblxuLy8ge0BsaW5rIElucHV0TWlzbWF0Y2hFeGNlcHRpb259LjwvcD5cbi8vXG4vLyA8cD48c3Ryb25nPkVYVFJBIFRPS0VOPC9zdHJvbmc+IChzaW5nbGUgdG9rZW4gZGVsZXRpb24pPC9wPlxuLy9cbi8vIDxwPntAY29kZSBMQSgxKX0gaXMgbm90IHdoYXQgd2UgYXJlIGxvb2tpbmcgZm9yLiBJZiB7QGNvZGUgTEEoMil9IGhhcyB0aGVcbi8vIHJpZ2h0IHRva2VuLCBob3dldmVyLCB0aGVuIGFzc3VtZSB7QGNvZGUgTEEoMSl9IGlzIHNvbWUgZXh0cmEgc3B1cmlvdXNcbi8vIHRva2VuIGFuZCBkZWxldGUgaXQuIFRoZW4gY29uc3VtZSBhbmQgcmV0dXJuIHRoZSBuZXh0IHRva2VuICh3aGljaCB3YXNcbi8vIHRoZSB7QGNvZGUgTEEoMil9IHRva2VuKSBhcyB0aGUgc3VjY2Vzc2Z1bCByZXN1bHQgb2YgdGhlIG1hdGNoIG9wZXJhdGlvbi48L3A+XG4vL1xuLy8gPHA+VGhpcyByZWNvdmVyeSBzdHJhdGVneSBpcyBpbXBsZW1lbnRlZCBieSB7QGxpbmtcbi8vIC8vc2luZ2xlVG9rZW5EZWxldGlvbn0uPC9wPlxuLy9cbi8vIDxwPjxzdHJvbmc+TUlTU0lORyBUT0tFTjwvc3Ryb25nPiAoc2luZ2xlIHRva2VuIGluc2VydGlvbik8L3A+XG4vL1xuLy8gPHA+SWYgY3VycmVudCB0b2tlbiAoYXQge0Bjb2RlIExBKDEpfSkgaXMgY29uc2lzdGVudCB3aXRoIHdoYXQgY291bGQgY29tZVxuLy8gYWZ0ZXIgdGhlIGV4cGVjdGVkIHtAY29kZSBMQSgxKX0gdG9rZW4sIHRoZW4gYXNzdW1lIHRoZSB0b2tlbiBpcyBtaXNzaW5nXG4vLyBhbmQgdXNlIHRoZSBwYXJzZXIncyB7QGxpbmsgVG9rZW5GYWN0b3J5fSB0byBjcmVhdGUgaXQgb24gdGhlIGZseS4gVGhlXG4vLyBcImluc2VydGlvblwiIGlzIHBlcmZvcm1lZCBieSByZXR1cm5pbmcgdGhlIGNyZWF0ZWQgdG9rZW4gYXMgdGhlIHN1Y2Nlc3NmdWxcbi8vIHJlc3VsdCBvZiB0aGUgbWF0Y2ggb3BlcmF0aW9uLjwvcD5cbi8vXG4vLyA8cD5UaGlzIHJlY292ZXJ5IHN0cmF0ZWd5IGlzIGltcGxlbWVudGVkIGJ5IHtAbGlua1xuLy8gLy9zaW5nbGVUb2tlbkluc2VydGlvbn0uPC9wPlxuLy9cbi8vIDxwPjxzdHJvbmc+RVhBTVBMRTwvc3Ryb25nPjwvcD5cbi8vXG4vLyA8cD5Gb3IgZXhhbXBsZSwgSW5wdXQge0Bjb2RlIGk9KDM7fSBpcyBjbGVhcmx5IG1pc3NpbmcgdGhlIHtAY29kZSAnKSd9LiBXaGVuXG4vLyB0aGUgcGFyc2VyIHJldHVybnMgZnJvbSB0aGUgbmVzdGVkIGNhbGwgdG8ge0Bjb2RlIGV4cHJ9LCBpdCB3aWxsIGhhdmVcbi8vIGNhbGwgY2hhaW46PC9wPlxuLy9cbi8vIDxwcmU+XG4vLyBzdGF0ICZyYXJyOyBleHByICZyYXJyOyBhdG9tXG4vLyA8L3ByZT5cbi8vXG4vLyBhbmQgaXQgd2lsbCBiZSB0cnlpbmcgdG8gbWF0Y2ggdGhlIHtAY29kZSAnKSd9IGF0IHRoaXMgcG9pbnQgaW4gdGhlXG4vLyBkZXJpdmF0aW9uOlxuLy9cbi8vIDxwcmU+XG4vLyA9Jmd0OyBJRCAnPScgJygnIElOVCAnKScgKCcrJyBhdG9tKSogJzsnXG4vLyBeXG4vLyA8L3ByZT5cbi8vXG4vLyBUaGUgYXR0ZW1wdCB0byBtYXRjaCB7QGNvZGUgJyknfSB3aWxsIGZhaWwgd2hlbiBpdCBzZWVzIHtAY29kZSAnOyd9IGFuZFxuLy8gY2FsbCB7QGxpbmsgLy9yZWNvdmVySW5saW5lfS4gVG8gcmVjb3ZlciwgaXQgc2VlcyB0aGF0IHtAY29kZSBMQSgxKT09JzsnfVxuLy8gaXMgaW4gdGhlIHNldCBvZiB0b2tlbnMgdGhhdCBjYW4gZm9sbG93IHRoZSB7QGNvZGUgJyknfSB0b2tlbiByZWZlcmVuY2Vcbi8vIGluIHJ1bGUge0Bjb2RlIGF0b219LiBJdCBjYW4gYXNzdW1lIHRoYXQgeW91IGZvcmdvdCB0aGUge0Bjb2RlICcpJ30uXG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlY292ZXJJbmxpbmUgPSBmdW5jdGlvbihyZWNvZ25pemVyKSB7XG4gICAgLy8gU0lOR0xFIFRPS0VOIERFTEVUSU9OXG4gICAgdmFyIG1hdGNoZWRTeW1ib2wgPSB0aGlzLnNpbmdsZVRva2VuRGVsZXRpb24ocmVjb2duaXplcik7XG4gICAgaWYgKG1hdGNoZWRTeW1ib2wgIT09IG51bGwpIHtcbiAgICAgICAgLy8gd2UgaGF2ZSBkZWxldGVkIHRoZSBleHRyYSB0b2tlbi5cbiAgICAgICAgLy8gbm93LCBtb3ZlIHBhc3QgdHR5cGUgdG9rZW4gYXMgaWYgYWxsIHdlcmUgb2tcbiAgICAgICAgcmVjb2duaXplci5jb25zdW1lKCk7XG4gICAgICAgIHJldHVybiBtYXRjaGVkU3ltYm9sO1xuICAgIH1cbiAgICAvLyBTSU5HTEUgVE9LRU4gSU5TRVJUSU9OXG4gICAgaWYgKHRoaXMuc2luZ2xlVG9rZW5JbnNlcnRpb24ocmVjb2duaXplcikpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TWlzc2luZ1N5bWJvbChyZWNvZ25pemVyKTtcbiAgICB9XG4gICAgLy8gZXZlbiB0aGF0IGRpZG4ndCB3b3JrOyBtdXN0IHRocm93IHRoZSBleGNlcHRpb25cbiAgICB0aHJvdyBuZXcgSW5wdXRNaXNtYXRjaEV4Y2VwdGlvbihyZWNvZ25pemVyKTtcbn07XG5cbi8vXG4vLyBUaGlzIG1ldGhvZCBpbXBsZW1lbnRzIHRoZSBzaW5nbGUtdG9rZW4gaW5zZXJ0aW9uIGlubGluZSBlcnJvciByZWNvdmVyeVxuLy8gc3RyYXRlZ3kuIEl0IGlzIGNhbGxlZCBieSB7QGxpbmsgLy9yZWNvdmVySW5saW5lfSBpZiB0aGUgc2luZ2xlLXRva2VuXG4vLyBkZWxldGlvbiBzdHJhdGVneSBmYWlscyB0byByZWNvdmVyIGZyb20gdGhlIG1pc21hdGNoZWQgaW5wdXQuIElmIHRoaXNcbi8vIG1ldGhvZCByZXR1cm5zIHtAY29kZSB0cnVlfSwge0Bjb2RlIHJlY29nbml6ZXJ9IHdpbGwgYmUgaW4gZXJyb3IgcmVjb3Zlcnlcbi8vIG1vZGUuXG4vL1xuLy8gPHA+VGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCBzaW5nbGUtdG9rZW4gaW5zZXJ0aW9uIGlzIHZpYWJsZSBieVxuLy8gY2hlY2tpbmcgaWYgdGhlIHtAY29kZSBMQSgxKX0gaW5wdXQgc3ltYm9sIGNvdWxkIGJlIHN1Y2Nlc3NmdWxseSBtYXRjaGVkXG4vLyBpZiBpdCB3ZXJlIGluc3RlYWQgdGhlIHtAY29kZSBMQSgyKX0gc3ltYm9sLiBJZiB0aGlzIG1ldGhvZCByZXR1cm5zXG4vLyB7QGNvZGUgdHJ1ZX0sIHRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIGFuZCBpbnNlcnRpbmcgYVxuLy8gdG9rZW4gd2l0aCB0aGUgY29ycmVjdCB0eXBlIHRvIHByb2R1Y2UgdGhpcyBiZWhhdmlvci48L3A+XG4vL1xuLy8gQHBhcmFtIHJlY29nbml6ZXIgdGhlIHBhcnNlciBpbnN0YW5jZVxuLy8gQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgc2luZ2xlLXRva2VuIGluc2VydGlvbiBpcyBhIHZpYWJsZSByZWNvdmVyeVxuLy8gc3RyYXRlZ3kgZm9yIHRoZSBjdXJyZW50IG1pc21hdGNoZWQgaW5wdXQsIG90aGVyd2lzZSB7QGNvZGUgZmFsc2V9XG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnNpbmdsZVRva2VuSW5zZXJ0aW9uID0gZnVuY3Rpb24ocmVjb2duaXplcikge1xuICAgIHZhciBjdXJyZW50U3ltYm9sVHlwZSA9IHJlY29nbml6ZXIuZ2V0VG9rZW5TdHJlYW0oKS5MQSgxKTtcbiAgICAvLyBpZiBjdXJyZW50IHRva2VuIGlzIGNvbnNpc3RlbnQgd2l0aCB3aGF0IGNvdWxkIGNvbWUgYWZ0ZXIgY3VycmVudFxuICAgIC8vIEFUTiBzdGF0ZSwgdGhlbiB3ZSBrbm93IHdlJ3JlIG1pc3NpbmcgYSB0b2tlbjsgZXJyb3IgcmVjb3ZlcnlcbiAgICAvLyBpcyBmcmVlIHRvIGNvbmp1cmUgdXAgYW5kIGluc2VydCB0aGUgbWlzc2luZyB0b2tlblxuICAgIHZhciBhdG4gPSByZWNvZ25pemVyLl9pbnRlcnAuYXRuO1xuICAgIHZhciBjdXJyZW50U3RhdGUgPSBhdG4uc3RhdGVzW3JlY29nbml6ZXIuc3RhdGVdO1xuICAgIHZhciBuZXh0ID0gY3VycmVudFN0YXRlLnRyYW5zaXRpb25zWzBdLnRhcmdldDtcbiAgICB2YXIgZXhwZWN0aW5nQXRMTDIgPSBhdG4ubmV4dFRva2VucyhuZXh0LCByZWNvZ25pemVyLl9jdHgpO1xuICAgIGlmIChleHBlY3RpbmdBdExMMi5jb250YWlucyhjdXJyZW50U3ltYm9sVHlwZSkgKXtcbiAgICAgICAgdGhpcy5yZXBvcnRNaXNzaW5nVG9rZW4ocmVjb2duaXplcik7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59O1xuXG4vLyBUaGlzIG1ldGhvZCBpbXBsZW1lbnRzIHRoZSBzaW5nbGUtdG9rZW4gZGVsZXRpb24gaW5saW5lIGVycm9yIHJlY292ZXJ5XG4vLyBzdHJhdGVneS4gSXQgaXMgY2FsbGVkIGJ5IHtAbGluayAvL3JlY292ZXJJbmxpbmV9IHRvIGF0dGVtcHQgdG8gcmVjb3ZlclxuLy8gZnJvbSBtaXNtYXRjaGVkIGlucHV0LiBJZiB0aGlzIG1ldGhvZCByZXR1cm5zIG51bGwsIHRoZSBwYXJzZXIgYW5kIGVycm9yXG4vLyBoYW5kbGVyIHN0YXRlIHdpbGwgbm90IGhhdmUgY2hhbmdlZC4gSWYgdGhpcyBtZXRob2QgcmV0dXJucyBub24tbnVsbCxcbi8vIHtAY29kZSByZWNvZ25pemVyfSB3aWxsIDxlbT5ub3Q8L2VtPiBiZSBpbiBlcnJvciByZWNvdmVyeSBtb2RlIHNpbmNlIHRoZVxuLy8gcmV0dXJuZWQgdG9rZW4gd2FzIGEgc3VjY2Vzc2Z1bCBtYXRjaC5cbi8vXG4vLyA8cD5JZiB0aGUgc2luZ2xlLXRva2VuIGRlbGV0aW9uIGlzIHN1Y2Nlc3NmdWwsIHRoaXMgbWV0aG9kIGNhbGxzXG4vLyB7QGxpbmsgLy9yZXBvcnRVbndhbnRlZFRva2VufSB0byByZXBvcnQgdGhlIGVycm9yLCBmb2xsb3dlZCBieVxuLy8ge0BsaW5rIFBhcnNlci8vY29uc3VtZX0gdG8gYWN0dWFsbHkgXCJkZWxldGVcIiB0aGUgZXh0cmFuZW91cyB0b2tlbi4gVGhlbixcbi8vIGJlZm9yZSByZXR1cm5pbmcge0BsaW5rIC8vcmVwb3J0TWF0Y2h9IGlzIGNhbGxlZCB0byBzaWduYWwgYSBzdWNjZXNzZnVsXG4vLyBtYXRjaC48L3A+XG4vL1xuLy8gQHBhcmFtIHJlY29nbml6ZXIgdGhlIHBhcnNlciBpbnN0YW5jZVxuLy8gQHJldHVybiB0aGUgc3VjY2Vzc2Z1bGx5IG1hdGNoZWQge0BsaW5rIFRva2VufSBpbnN0YW5jZSBpZiBzaW5nbGUtdG9rZW5cbi8vIGRlbGV0aW9uIHN1Y2Nlc3NmdWxseSByZWNvdmVycyBmcm9tIHRoZSBtaXNtYXRjaGVkIGlucHV0LCBvdGhlcndpc2Vcbi8vIHtAY29kZSBudWxsfVxuLy9cbkRlZmF1bHRFcnJvclN0cmF0ZWd5LnByb3RvdHlwZS5zaW5nbGVUb2tlbkRlbGV0aW9uID0gZnVuY3Rpb24ocmVjb2duaXplcikge1xuICAgIHZhciBuZXh0VG9rZW5UeXBlID0gcmVjb2duaXplci5nZXRUb2tlblN0cmVhbSgpLkxBKDIpO1xuICAgIHZhciBleHBlY3RpbmcgPSB0aGlzLmdldEV4cGVjdGVkVG9rZW5zKHJlY29nbml6ZXIpO1xuICAgIGlmIChleHBlY3RpbmcuY29udGFpbnMobmV4dFRva2VuVHlwZSkpIHtcbiAgICAgICAgdGhpcy5yZXBvcnRVbndhbnRlZFRva2VuKHJlY29nbml6ZXIpO1xuICAgICAgICAvLyBwcmludChcInJlY292ZXJGcm9tTWlzbWF0Y2hlZFRva2VuIGRlbGV0aW5nIFwiIFxcXG4gICAgICAgIC8vICsgc3RyKHJlY29nbml6ZXIuZ2V0VG9rZW5TdHJlYW0oKS5MVCgxKSkgXFxcbiAgICAgICAgLy8gKyBcIiBzaW5jZSBcIiArIHN0cihyZWNvZ25pemVyLmdldFRva2VuU3RyZWFtKCkuTFQoMikpIFxcXG4gICAgICAgIC8vICsgXCIgaXMgd2hhdCB3ZSB3YW50XCIsIGZpbGU9c3lzLnN0ZGVycilcbiAgICAgICAgcmVjb2duaXplci5jb25zdW1lKCk7IC8vIHNpbXBseSBkZWxldGUgZXh0cmEgdG9rZW5cbiAgICAgICAgLy8gd2Ugd2FudCB0byByZXR1cm4gdGhlIHRva2VuIHdlJ3JlIGFjdHVhbGx5IG1hdGNoaW5nXG4gICAgICAgIHZhciBtYXRjaGVkU3ltYm9sID0gcmVjb2duaXplci5nZXRDdXJyZW50VG9rZW4oKTtcbiAgICAgICAgdGhpcy5yZXBvcnRNYXRjaChyZWNvZ25pemVyKTsgLy8gd2Uga25vdyBjdXJyZW50IHRva2VuIGlzIGNvcnJlY3RcbiAgICAgICAgcmV0dXJuIG1hdGNoZWRTeW1ib2w7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufTtcblxuLy8gQ29uanVyZSB1cCBhIG1pc3NpbmcgdG9rZW4gZHVyaW5nIGVycm9yIHJlY292ZXJ5LlxuLy9cbi8vIFRoZSByZWNvZ25pemVyIGF0dGVtcHRzIHRvIHJlY292ZXIgZnJvbSBzaW5nbGUgbWlzc2luZ1xuLy8gc3ltYm9scy4gQnV0LCBhY3Rpb25zIG1pZ2h0IHJlZmVyIHRvIHRoYXQgbWlzc2luZyBzeW1ib2wuXG4vLyBGb3IgZXhhbXBsZSwgeD1JRCB7ZigkeCk7fS4gVGhlIGFjdGlvbiBjbGVhcmx5IGFzc3VtZXNcbi8vIHRoYXQgdGhlcmUgaGFzIGJlZW4gYW4gaWRlbnRpZmllciBtYXRjaGVkIHByZXZpb3VzbHkgYW5kIHRoYXRcbi8vICR4IHBvaW50cyBhdCB0aGF0IHRva2VuLiBJZiB0aGF0IHRva2VuIGlzIG1pc3NpbmcsIGJ1dFxuLy8gdGhlIG5leHQgdG9rZW4gaW4gdGhlIHN0cmVhbSBpcyB3aGF0IHdlIHdhbnQgd2UgYXNzdW1lIHRoYXRcbi8vIHRoaXMgdG9rZW4gaXMgbWlzc2luZyBhbmQgd2Uga2VlcCBnb2luZy4gQmVjYXVzZSB3ZVxuLy8gaGF2ZSB0byByZXR1cm4gc29tZSB0b2tlbiB0byByZXBsYWNlIHRoZSBtaXNzaW5nIHRva2VuLFxuLy8gd2UgaGF2ZSB0byBjb25qdXJlIG9uZSB1cC4gVGhpcyBtZXRob2QgZ2l2ZXMgdGhlIHVzZXIgY29udHJvbFxuLy8gb3ZlciB0aGUgdG9rZW5zIHJldHVybmVkIGZvciBtaXNzaW5nIHRva2Vucy4gTW9zdGx5LFxuLy8geW91IHdpbGwgd2FudCB0byBjcmVhdGUgc29tZXRoaW5nIHNwZWNpYWwgZm9yIGlkZW50aWZpZXJcbi8vIHRva2Vucy4gRm9yIGxpdGVyYWxzIHN1Y2ggYXMgJ3snIGFuZCAnLCcsIHRoZSBkZWZhdWx0XG4vLyBhY3Rpb24gaW4gdGhlIHBhcnNlciBvciB0cmVlIHBhcnNlciB3b3Jrcy4gSXQgc2ltcGx5IGNyZWF0ZXNcbi8vIGEgQ29tbW9uVG9rZW4gb2YgdGhlIGFwcHJvcHJpYXRlIHR5cGUuIFRoZSB0ZXh0IHdpbGwgYmUgdGhlIHRva2VuLlxuLy8gSWYgeW91IGNoYW5nZSB3aGF0IHRva2VucyBtdXN0IGJlIGNyZWF0ZWQgYnkgdGhlIGxleGVyLFxuLy8gb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gY3JlYXRlIHRoZSBhcHByb3ByaWF0ZSB0b2tlbnMuXG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLmdldE1pc3NpbmdTeW1ib2wgPSBmdW5jdGlvbihyZWNvZ25pemVyKSB7XG4gICAgdmFyIGN1cnJlbnRTeW1ib2wgPSByZWNvZ25pemVyLmdldEN1cnJlbnRUb2tlbigpO1xuICAgIHZhciBleHBlY3RpbmcgPSB0aGlzLmdldEV4cGVjdGVkVG9rZW5zKHJlY29nbml6ZXIpO1xuICAgIHZhciBleHBlY3RlZFRva2VuVHlwZSA9IGV4cGVjdGluZy5maXJzdCgpOyAvLyBnZXQgYW55IGVsZW1lbnRcbiAgICB2YXIgdG9rZW5UZXh0O1xuICAgIGlmIChleHBlY3RlZFRva2VuVHlwZT09PVRva2VuLkVPRikge1xuICAgICAgICB0b2tlblRleHQgPSBcIjxtaXNzaW5nIEVPRj5cIjtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0b2tlblRleHQgPSBcIjxtaXNzaW5nIFwiICsgcmVjb2duaXplci5saXRlcmFsTmFtZXNbZXhwZWN0ZWRUb2tlblR5cGVdICsgXCI+XCI7XG4gICAgfVxuICAgIHZhciBjdXJyZW50ID0gY3VycmVudFN5bWJvbDtcbiAgICB2YXIgbG9va2JhY2sgPSByZWNvZ25pemVyLmdldFRva2VuU3RyZWFtKCkuTFQoLTEpO1xuICAgIGlmIChjdXJyZW50LnR5cGU9PT1Ub2tlbi5FT0YgJiYgbG9va2JhY2sgIT09IG51bGwpIHtcbiAgICAgICAgY3VycmVudCA9IGxvb2tiYWNrO1xuICAgIH1cbiAgICByZXR1cm4gcmVjb2duaXplci5nZXRUb2tlbkZhY3RvcnkoKS5jcmVhdGUoY3VycmVudC5zb3VyY2UsXG4gICAgICAgIGV4cGVjdGVkVG9rZW5UeXBlLCB0b2tlblRleHQsIFRva2VuLkRFRkFVTFRfQ0hBTk5FTCxcbiAgICAgICAgLTEsIC0xLCBjdXJyZW50LmxpbmUsIGN1cnJlbnQuY29sdW1uKTtcbn07XG5cbkRlZmF1bHRFcnJvclN0cmF0ZWd5LnByb3RvdHlwZS5nZXRFeHBlY3RlZFRva2VucyA9IGZ1bmN0aW9uKHJlY29nbml6ZXIpIHtcbiAgICByZXR1cm4gcmVjb2duaXplci5nZXRFeHBlY3RlZFRva2VucygpO1xufTtcblxuLy8gSG93IHNob3VsZCBhIHRva2VuIGJlIGRpc3BsYXllZCBpbiBhbiBlcnJvciBtZXNzYWdlPyBUaGUgZGVmYXVsdFxuLy8gaXMgdG8gZGlzcGxheSBqdXN0IHRoZSB0ZXh0LCBidXQgZHVyaW5nIGRldmVsb3BtZW50IHlvdSBtaWdodFxuLy8gd2FudCB0byBoYXZlIGEgbG90IG9mIGluZm9ybWF0aW9uIHNwaXQgb3V0LiBPdmVycmlkZSBpbiB0aGF0IGNhc2Vcbi8vIHRvIHVzZSB0LnRvU3RyaW5nKCkgKHdoaWNoLCBmb3IgQ29tbW9uVG9rZW4sIGR1bXBzIGV2ZXJ5dGhpbmcgYWJvdXRcbi8vIHRoZSB0b2tlbikuIFRoaXMgaXMgYmV0dGVyIHRoYW4gZm9yY2luZyB5b3UgdG8gb3ZlcnJpZGUgYSBtZXRob2QgaW5cbi8vIHlvdXIgdG9rZW4gb2JqZWN0cyBiZWNhdXNlIHlvdSBkb24ndCBoYXZlIHRvIGdvIG1vZGlmeSB5b3VyIGxleGVyXG4vLyBzbyB0aGF0IGl0IGNyZWF0ZXMgYSBuZXcgSmF2YSB0eXBlLlxuLy9cbkRlZmF1bHRFcnJvclN0cmF0ZWd5LnByb3RvdHlwZS5nZXRUb2tlbkVycm9yRGlzcGxheSA9IGZ1bmN0aW9uKHQpIHtcbiAgICBpZiAodCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gXCI8bm8gdG9rZW4+XCI7XG4gICAgfVxuICAgIHZhciBzID0gdC50ZXh0O1xuICAgIGlmIChzID09PSBudWxsKSB7XG4gICAgICAgIGlmICh0LnR5cGU9PT1Ub2tlbi5FT0YpIHtcbiAgICAgICAgICAgIHMgPSBcIjxFT0Y+XCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzID0gXCI8XCIgKyB0LnR5cGUgKyBcIj5cIjtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5lc2NhcGVXU0FuZFF1b3RlKHMpO1xufTtcblxuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLmVzY2FwZVdTQW5kUXVvdGUgPSBmdW5jdGlvbihzKSB7XG4gICAgcyA9IHMucmVwbGFjZSgvXFxuL2csXCJcXFxcblwiKTtcbiAgICBzID0gcy5yZXBsYWNlKC9cXHIvZyxcIlxcXFxyXCIpO1xuICAgIHMgPSBzLnJlcGxhY2UoL1xcdC9nLFwiXFxcXHRcIik7XG4gICAgcmV0dXJuIFwiJ1wiICsgcyArIFwiJ1wiO1xufTtcblxuLy8gQ29tcHV0ZSB0aGUgZXJyb3IgcmVjb3Zlcnkgc2V0IGZvciB0aGUgY3VycmVudCBydWxlLiBEdXJpbmdcbi8vIHJ1bGUgaW52b2NhdGlvbiwgdGhlIHBhcnNlciBwdXNoZXMgdGhlIHNldCBvZiB0b2tlbnMgdGhhdCBjYW5cbi8vIGZvbGxvdyB0aGF0IHJ1bGUgcmVmZXJlbmNlIG9uIHRoZSBzdGFjazsgdGhpcyBhbW91bnRzIHRvXG4vLyBjb21wdXRpbmcgRklSU1Qgb2Ygd2hhdCBmb2xsb3dzIHRoZSBydWxlIHJlZmVyZW5jZSBpbiB0aGVcbi8vIGVuY2xvc2luZyBydWxlLiBTZWUgTGluZWFyQXBwcm94aW1hdG9yLkZJUlNUKCkuXG4vLyBUaGlzIGxvY2FsIGZvbGxvdyBzZXQgb25seSBpbmNsdWRlcyB0b2tlbnNcbi8vIGZyb20gd2l0aGluIHRoZSBydWxlOyBpLmUuLCB0aGUgRklSU1QgY29tcHV0YXRpb24gZG9uZSBieVxuLy8gQU5UTFIgc3RvcHMgYXQgdGhlIGVuZCBvZiBhIHJ1bGUuXG4vL1xuLy8gRVhBTVBMRVxuLy9cbi8vIFdoZW4geW91IGZpbmQgYSBcIm5vIHZpYWJsZSBhbHQgZXhjZXB0aW9uXCIsIHRoZSBpbnB1dCBpcyBub3Rcbi8vIGNvbnNpc3RlbnQgd2l0aCBhbnkgb2YgdGhlIGFsdGVybmF0aXZlcyBmb3IgcnVsZSByLiBUaGUgYmVzdFxuLy8gdGhpbmcgdG8gZG8gaXMgdG8gY29uc3VtZSB0b2tlbnMgdW50aWwgeW91IHNlZSBzb21ldGhpbmcgdGhhdFxuLy8gY2FuIGxlZ2FsbHkgZm9sbG93IGEgY2FsbCB0byByLy9vciogYW55IHJ1bGUgdGhhdCBjYWxsZWQgci5cbi8vIFlvdSBkb24ndCB3YW50IHRoZSBleGFjdCBzZXQgb2YgdmlhYmxlIG5leHQgdG9rZW5zIGJlY2F1c2UgdGhlXG4vLyBpbnB1dCBtaWdodCBqdXN0IGJlIG1pc3NpbmcgYSB0b2tlbi0teW91IG1pZ2h0IGNvbnN1bWUgdGhlXG4vLyByZXN0IG9mIHRoZSBpbnB1dCBsb29raW5nIGZvciBvbmUgb2YgdGhlIG1pc3NpbmcgdG9rZW5zLlxuLy9cbi8vIENvbnNpZGVyIGdyYW1tYXI6XG4vL1xuLy8gYSA6ICdbJyBiICddJ1xuLy8gfCAnKCcgYiAnKSdcbi8vIDtcbi8vIGIgOiBjICdeJyBJTlQgO1xuLy8gYyA6IElEXG4vLyB8IElOVFxuLy8gO1xuLy9cbi8vIEF0IGVhY2ggcnVsZSBpbnZvY2F0aW9uLCB0aGUgc2V0IG9mIHRva2VucyB0aGF0IGNvdWxkIGZvbGxvd1xuLy8gdGhhdCBydWxlIGlzIHB1c2hlZCBvbiBhIHN0YWNrLiBIZXJlIGFyZSB0aGUgdmFyaW91c1xuLy8gY29udGV4dC1zZW5zaXRpdmUgZm9sbG93IHNldHM6XG4vL1xuLy8gRk9MTE9XKGIxX2luX2EpID0gRklSU1QoJ10nKSA9ICddJ1xuLy8gRk9MTE9XKGIyX2luX2EpID0gRklSU1QoJyknKSA9ICcpJ1xuLy8gRk9MTE9XKGNfaW5fYikgPSBGSVJTVCgnXicpID0gJ14nXG4vL1xuLy8gVXBvbiBlcnJvbmVvdXMgaW5wdXQgXCJbXVwiLCB0aGUgY2FsbCBjaGFpbiBpc1xuLy9cbi8vIGEgLT4gYiAtPiBjXG4vL1xuLy8gYW5kLCBoZW5jZSwgdGhlIGZvbGxvdyBjb250ZXh0IHN0YWNrIGlzOlxuLy9cbi8vIGRlcHRoIGZvbGxvdyBzZXQgc3RhcnQgb2YgcnVsZSBleGVjdXRpb25cbi8vIDAgPEVPRj4gYSAoZnJvbSBtYWluKCkpXG4vLyAxICddJyBiXG4vLyAyICdeJyBjXG4vL1xuLy8gTm90aWNlIHRoYXQgJyknIGlzIG5vdCBpbmNsdWRlZCwgYmVjYXVzZSBiIHdvdWxkIGhhdmUgdG8gaGF2ZVxuLy8gYmVlbiBjYWxsZWQgZnJvbSBhIGRpZmZlcmVudCBjb250ZXh0IGluIHJ1bGUgYSBmb3IgJyknIHRvIGJlXG4vLyBpbmNsdWRlZC5cbi8vXG4vLyBGb3IgZXJyb3IgcmVjb3ZlcnksIHdlIGNhbm5vdCBjb25zaWRlciBGT0xMT1coYylcbi8vIChjb250ZXh0LXNlbnNpdGl2ZSBvciBvdGhlcndpc2UpLiBXZSBuZWVkIHRoZSBjb21iaW5lZCBzZXQgb2Zcbi8vIGFsbCBjb250ZXh0LXNlbnNpdGl2ZSBGT0xMT1cgc2V0cy0tdGhlIHNldCBvZiBhbGwgdG9rZW5zIHRoYXRcbi8vIGNvdWxkIGZvbGxvdyBhbnkgcmVmZXJlbmNlIGluIHRoZSBjYWxsIGNoYWluLiBXZSBuZWVkIHRvXG4vLyByZXN5bmMgdG8gb25lIG9mIHRob3NlIHRva2Vucy4gTm90ZSB0aGF0IEZPTExPVyhjKT0nXicgYW5kIGlmXG4vLyB3ZSByZXN5bmMnZCB0byB0aGF0IHRva2VuLCB3ZSdkIGNvbnN1bWUgdW50aWwgRU9GLiBXZSBuZWVkIHRvXG4vLyBzeW5jIHRvIGNvbnRleHQtc2Vuc2l0aXZlIEZPTExPV3MgZm9yIGEsIGIsIGFuZCBjOiB7J10nLCdeJ30uXG4vLyBJbiB0aGlzIGNhc2UsIGZvciBpbnB1dCBcIltdXCIsIExBKDEpIGlzICddJyBhbmQgaW4gdGhlIHNldCwgc28gd2Ugd291bGRcbi8vIG5vdCBjb25zdW1lIGFueXRoaW5nLiBBZnRlciBwcmludGluZyBhbiBlcnJvciwgcnVsZSBjIHdvdWxkXG4vLyByZXR1cm4gbm9ybWFsbHkuIFJ1bGUgYiB3b3VsZCBub3QgZmluZCB0aGUgcmVxdWlyZWQgJ14nIHRob3VnaC5cbi8vIEF0IHRoaXMgcG9pbnQsIGl0IGdldHMgYSBtaXNtYXRjaGVkIHRva2VuIGVycm9yIGFuZCB0aHJvd3MgYW5cbi8vIGV4Y2VwdGlvbiAoc2luY2UgTEEoMSkgaXMgbm90IGluIHRoZSB2aWFibGUgZm9sbG93aW5nIHRva2VuXG4vLyBzZXQpLiBUaGUgcnVsZSBleGNlcHRpb24gaGFuZGxlciB0cmllcyB0byByZWNvdmVyLCBidXQgZmluZHNcbi8vIHRoZSBzYW1lIHJlY292ZXJ5IHNldCBhbmQgZG9lc24ndCBjb25zdW1lIGFueXRoaW5nLiBSdWxlIGJcbi8vIGV4aXRzIG5vcm1hbGx5IHJldHVybmluZyB0byBydWxlIGEuIE5vdyBpdCBmaW5kcyB0aGUgJ10nIChhbmRcbi8vIHdpdGggdGhlIHN1Y2Nlc3NmdWwgbWF0Y2ggZXhpdHMgZXJyb3JSZWNvdmVyeSBtb2RlKS5cbi8vXG4vLyBTbywgeW91IGNhbiBzZWUgdGhhdCB0aGUgcGFyc2VyIHdhbGtzIHVwIHRoZSBjYWxsIGNoYWluIGxvb2tpbmdcbi8vIGZvciB0aGUgdG9rZW4gdGhhdCB3YXMgYSBtZW1iZXIgb2YgdGhlIHJlY292ZXJ5IHNldC5cbi8vXG4vLyBFcnJvcnMgYXJlIG5vdCBnZW5lcmF0ZWQgaW4gZXJyb3JSZWNvdmVyeSBtb2RlLlxuLy9cbi8vIEFOVExSJ3MgZXJyb3IgcmVjb3ZlcnkgbWVjaGFuaXNtIGlzIGJhc2VkIHVwb24gb3JpZ2luYWwgaWRlYXM6XG4vL1xuLy8gXCJBbGdvcml0aG1zICsgRGF0YSBTdHJ1Y3R1cmVzID0gUHJvZ3JhbXNcIiBieSBOaWtsYXVzIFdpcnRoXG4vL1xuLy8gYW5kXG4vL1xuLy8gXCJBIG5vdGUgb24gZXJyb3IgcmVjb3ZlcnkgaW4gcmVjdXJzaXZlIGRlc2NlbnQgcGFyc2Vyc1wiOlxuLy8gaHR0cDovL3BvcnRhbC5hY20ub3JnL2NpdGF0aW9uLmNmbT9pZD05NDc5MDIuOTQ3OTA1XG4vL1xuLy8gTGF0ZXIsIEpvc2VmIEdyb3NjaCBoYWQgc29tZSBnb29kIGlkZWFzOlxuLy9cbi8vIFwiRWZmaWNpZW50IGFuZCBDb21mb3J0YWJsZSBFcnJvciBSZWNvdmVyeSBpbiBSZWN1cnNpdmUgRGVzY2VudFxuLy8gUGFyc2Vyc1wiOlxuLy8gZnRwOi8vd3d3LmNvY29sYWIuY29tL3Byb2R1Y3RzL2NvY2t0YWlsL2RvY2E0LnBzL2VsbC5wcy56aXBcbi8vXG4vLyBMaWtlIEdyb3NjaCBJIGltcGxlbWVudCBjb250ZXh0LXNlbnNpdGl2ZSBGT0xMT1cgc2V0cyB0aGF0IGFyZSBjb21iaW5lZFxuLy8gYXQgcnVuLXRpbWUgdXBvbiBlcnJvciB0byBhdm9pZCBvdmVyaGVhZCBkdXJpbmcgcGFyc2luZy5cbi8vXG5EZWZhdWx0RXJyb3JTdHJhdGVneS5wcm90b3R5cGUuZ2V0RXJyb3JSZWNvdmVyeVNldCA9IGZ1bmN0aW9uKHJlY29nbml6ZXIpIHtcbiAgICB2YXIgYXRuID0gcmVjb2duaXplci5faW50ZXJwLmF0bjtcbiAgICB2YXIgY3R4ID0gcmVjb2duaXplci5fY3R4O1xuICAgIHZhciByZWNvdmVyU2V0ID0gbmV3IEludGVydmFsU2V0KCk7XG4gICAgd2hpbGUgKGN0eCAhPT0gbnVsbCAmJiBjdHguaW52b2tpbmdTdGF0ZT49MCkge1xuICAgICAgICAvLyBjb21wdXRlIHdoYXQgZm9sbG93cyB3aG8gaW52b2tlZCB1c1xuICAgICAgICB2YXIgaW52b2tpbmdTdGF0ZSA9IGF0bi5zdGF0ZXNbY3R4Lmludm9raW5nU3RhdGVdO1xuICAgICAgICB2YXIgcnQgPSBpbnZva2luZ1N0YXRlLnRyYW5zaXRpb25zWzBdO1xuICAgICAgICB2YXIgZm9sbG93ID0gYXRuLm5leHRUb2tlbnMocnQuZm9sbG93U3RhdGUpO1xuICAgICAgICByZWNvdmVyU2V0LmFkZFNldChmb2xsb3cpO1xuICAgICAgICBjdHggPSBjdHgucGFyZW50Q3R4O1xuICAgIH1cbiAgICByZWNvdmVyU2V0LnJlbW92ZU9uZShUb2tlbi5FUFNJTE9OKTtcbiAgICByZXR1cm4gcmVjb3ZlclNldDtcbn07XG5cbi8vIENvbnN1bWUgdG9rZW5zIHVudGlsIG9uZSBtYXRjaGVzIHRoZSBnaXZlbiB0b2tlbiBzZXQuLy9cbkRlZmF1bHRFcnJvclN0cmF0ZWd5LnByb3RvdHlwZS5jb25zdW1lVW50aWwgPSBmdW5jdGlvbihyZWNvZ25pemVyLCBzZXQpIHtcbiAgICB2YXIgdHR5cGUgPSByZWNvZ25pemVyLmdldFRva2VuU3RyZWFtKCkuTEEoMSk7XG4gICAgd2hpbGUoIHR0eXBlICE9PSBUb2tlbi5FT0YgJiYgIXNldC5jb250YWlucyh0dHlwZSkpIHtcbiAgICAgICAgcmVjb2duaXplci5jb25zdW1lKCk7XG4gICAgICAgIHR0eXBlID0gcmVjb2duaXplci5nZXRUb2tlblN0cmVhbSgpLkxBKDEpO1xuICAgIH1cbn07XG5cbi8vXG4vLyBUaGlzIGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBBTlRMUkVycm9yU3RyYXRlZ3l9IHJlc3BvbmRzIHRvIHN5bnRheCBlcnJvcnNcbi8vIGJ5IGltbWVkaWF0ZWx5IGNhbmNlbGluZyB0aGUgcGFyc2Ugb3BlcmF0aW9uIHdpdGggYVxuLy8ge0BsaW5rIFBhcnNlQ2FuY2VsbGF0aW9uRXhjZXB0aW9ufS4gVGhlIGltcGxlbWVudGF0aW9uIGVuc3VyZXMgdGhhdCB0aGVcbi8vIHtAbGluayBQYXJzZXJSdWxlQ29udGV4dC8vZXhjZXB0aW9ufSBmaWVsZCBpcyBzZXQgZm9yIGFsbCBwYXJzZSB0cmVlIG5vZGVzXG4vLyB0aGF0IHdlcmUgbm90IGNvbXBsZXRlZCBwcmlvciB0byBlbmNvdW50ZXJpbmcgdGhlIGVycm9yLlxuLy9cbi8vIDxwPlxuLy8gVGhpcyBlcnJvciBzdHJhdGVneSBpcyB1c2VmdWwgaW4gdGhlIGZvbGxvd2luZyBzY2VuYXJpb3MuPC9wPlxuLy9cbi8vIDx1bD5cbi8vIDxsaT48c3Ryb25nPlR3by1zdGFnZSBwYXJzaW5nOjwvc3Ryb25nPiBUaGlzIGVycm9yIHN0cmF0ZWd5IGFsbG93cyB0aGUgZmlyc3Rcbi8vIHN0YWdlIG9mIHR3by1zdGFnZSBwYXJzaW5nIHRvIGltbWVkaWF0ZWx5IHRlcm1pbmF0ZSBpZiBhbiBlcnJvciBpc1xuLy8gZW5jb3VudGVyZWQsIGFuZCBpbW1lZGlhdGVseSBmYWxsIGJhY2sgdG8gdGhlIHNlY29uZCBzdGFnZS4gSW4gYWRkaXRpb24gdG9cbi8vIGF2b2lkaW5nIHdhc3RlZCB3b3JrIGJ5IGF0dGVtcHRpbmcgdG8gcmVjb3ZlciBmcm9tIGVycm9ycyBoZXJlLCB0aGUgZW1wdHlcbi8vIGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBCYWlsRXJyb3JTdHJhdGVneS8vc3luY30gaW1wcm92ZXMgdGhlIHBlcmZvcm1hbmNlIG9mXG4vLyB0aGUgZmlyc3Qgc3RhZ2UuPC9saT5cbi8vIDxsaT48c3Ryb25nPlNpbGVudCB2YWxpZGF0aW9uOjwvc3Ryb25nPiBXaGVuIHN5bnRheCBlcnJvcnMgYXJlIG5vdCBiZWluZ1xuLy8gcmVwb3J0ZWQgb3IgbG9nZ2VkLCBhbmQgdGhlIHBhcnNlIHJlc3VsdCBpcyBzaW1wbHkgaWdub3JlZCBpZiBlcnJvcnMgb2NjdXIsXG4vLyB0aGUge0BsaW5rIEJhaWxFcnJvclN0cmF0ZWd5fSBhdm9pZHMgd2FzdGluZyB3b3JrIG9uIHJlY292ZXJpbmcgZnJvbSBlcnJvcnNcbi8vIHdoZW4gdGhlIHJlc3VsdCB3aWxsIGJlIGlnbm9yZWQgZWl0aGVyIHdheS48L2xpPlxuLy8gPC91bD5cbi8vXG4vLyA8cD5cbi8vIHtAY29kZSBteXBhcnNlci5zZXRFcnJvckhhbmRsZXIobmV3IEJhaWxFcnJvclN0cmF0ZWd5KCkpO308L3A+XG4vL1xuLy8gQHNlZSBQYXJzZXIvL3NldEVycm9ySGFuZGxlcihBTlRMUkVycm9yU3RyYXRlZ3kpXG4vL1xuZnVuY3Rpb24gQmFpbEVycm9yU3RyYXRlZ3koKSB7XG5cdERlZmF1bHRFcnJvclN0cmF0ZWd5LmNhbGwodGhpcyk7XG5cdHJldHVybiB0aGlzO1xufVxuXG5CYWlsRXJyb3JTdHJhdGVneS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERlZmF1bHRFcnJvclN0cmF0ZWd5LnByb3RvdHlwZSk7XG5CYWlsRXJyb3JTdHJhdGVneS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCYWlsRXJyb3JTdHJhdGVneTtcblxuLy8gSW5zdGVhZCBvZiByZWNvdmVyaW5nIGZyb20gZXhjZXB0aW9uIHtAY29kZSBlfSwgcmUtdGhyb3cgaXQgd3JhcHBlZFxuLy8gaW4gYSB7QGxpbmsgUGFyc2VDYW5jZWxsYXRpb25FeGNlcHRpb259IHNvIGl0IGlzIG5vdCBjYXVnaHQgYnkgdGhlXG4vLyBydWxlIGZ1bmN0aW9uIGNhdGNoZXMuIFVzZSB7QGxpbmsgRXhjZXB0aW9uLy9nZXRDYXVzZSgpfSB0byBnZXQgdGhlXG4vLyBvcmlnaW5hbCB7QGxpbmsgUmVjb2duaXRpb25FeGNlcHRpb259LlxuLy9cbkJhaWxFcnJvclN0cmF0ZWd5LnByb3RvdHlwZS5yZWNvdmVyID0gZnVuY3Rpb24ocmVjb2duaXplciwgZSkge1xuICAgIHZhciBjb250ZXh0ID0gcmVjb2duaXplci5fY3R4O1xuICAgIHdoaWxlIChjb250ZXh0ICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnRleHQuZXhjZXB0aW9uID0gZTtcbiAgICAgICAgY29udGV4dCA9IGNvbnRleHQucGFyZW50Q3R4O1xuICAgIH1cbiAgICB0aHJvdyBuZXcgUGFyc2VDYW5jZWxsYXRpb25FeGNlcHRpb24oZSk7XG59O1xuXG4vLyBNYWtlIHN1cmUgd2UgZG9uJ3QgYXR0ZW1wdCB0byByZWNvdmVyIGlubGluZTsgaWYgdGhlIHBhcnNlclxuLy8gc3VjY2Vzc2Z1bGx5IHJlY292ZXJzLCBpdCB3b24ndCB0aHJvdyBhbiBleGNlcHRpb24uXG4vL1xuQmFpbEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlY292ZXJJbmxpbmUgPSBmdW5jdGlvbihyZWNvZ25pemVyKSB7XG4gICAgdGhpcy5yZWNvdmVyKHJlY29nbml6ZXIsIG5ldyBJbnB1dE1pc21hdGNoRXhjZXB0aW9uKHJlY29nbml6ZXIpKTtcbn07XG5cbi8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBhdHRlbXB0IHRvIHJlY292ZXIgZnJvbSBwcm9ibGVtcyBpbiBzdWJydWxlcy4vL1xuQmFpbEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbihyZWNvZ25pemVyKSB7XG4gICAgLy8gcGFzc1xufTtcblxuZXhwb3J0cy5CYWlsRXJyb3JTdHJhdGVneSA9IEJhaWxFcnJvclN0cmF0ZWd5O1xuZXhwb3J0cy5EZWZhdWx0RXJyb3JTdHJhdGVneSA9IERlZmF1bHRFcnJvclN0cmF0ZWd5O1xuIiwiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuXG4vLyBUaGUgcm9vdCBvZiB0aGUgQU5UTFIgZXhjZXB0aW9uIGhpZXJhcmNoeS4gSW4gZ2VuZXJhbCwgQU5UTFIgdHJhY2tzIGp1c3Rcbi8vICAzIGtpbmRzIG9mIGVycm9yczogcHJlZGljdGlvbiBlcnJvcnMsIGZhaWxlZCBwcmVkaWNhdGUgZXJyb3JzLCBhbmRcbi8vICBtaXNtYXRjaGVkIGlucHV0IGVycm9ycy4gSW4gZWFjaCBjYXNlLCB0aGUgcGFyc2VyIGtub3dzIHdoZXJlIGl0IGlzXG4vLyAgaW4gdGhlIGlucHV0LCB3aGVyZSBpdCBpcyBpbiB0aGUgQVROLCB0aGUgcnVsZSBpbnZvY2F0aW9uIHN0YWNrLFxuLy8gIGFuZCB3aGF0IGtpbmQgb2YgcHJvYmxlbSBvY2N1cnJlZC5cblxudmFyIFByZWRpY2F0ZVRyYW5zaXRpb24gPSByZXF1aXJlKCcuLy4uL2F0bi9UcmFuc2l0aW9uJykuUHJlZGljYXRlVHJhbnNpdGlvbjtcblxuZnVuY3Rpb24gUmVjb2duaXRpb25FeGNlcHRpb24ocGFyYW1zKSB7XG5cdEVycm9yLmNhbGwodGhpcyk7XG5cdGlmICghIUVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFJlY29nbml0aW9uRXhjZXB0aW9uKTtcblx0fSBlbHNlIHtcblx0XHR2YXIgc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcblx0fVxuXHR0aGlzLm1lc3NhZ2UgPSBwYXJhbXMubWVzc2FnZTtcbiAgICB0aGlzLnJlY29nbml6ZXIgPSBwYXJhbXMucmVjb2duaXplcjtcbiAgICB0aGlzLmlucHV0ID0gcGFyYW1zLmlucHV0O1xuICAgIHRoaXMuY3R4ID0gcGFyYW1zLmN0eDtcbiAgICAvLyBUaGUgY3VycmVudCB7QGxpbmsgVG9rZW59IHdoZW4gYW4gZXJyb3Igb2NjdXJyZWQuIFNpbmNlIG5vdCBhbGwgc3RyZWFtc1xuICAgIC8vIHN1cHBvcnQgYWNjZXNzaW5nIHN5bWJvbHMgYnkgaW5kZXgsIHdlIGhhdmUgdG8gdHJhY2sgdGhlIHtAbGluayBUb2tlbn1cbiAgICAvLyBpbnN0YW5jZSBpdHNlbGYuXG4gICAgdGhpcy5vZmZlbmRpbmdUb2tlbiA9IG51bGw7XG4gICAgLy8gR2V0IHRoZSBBVE4gc3RhdGUgbnVtYmVyIHRoZSBwYXJzZXIgd2FzIGluIGF0IHRoZSB0aW1lIHRoZSBlcnJvclxuICAgIC8vIG9jY3VycmVkLiBGb3Ige0BsaW5rIE5vVmlhYmxlQWx0RXhjZXB0aW9ufSBhbmRcbiAgICAvLyB7QGxpbmsgTGV4ZXJOb1ZpYWJsZUFsdEV4Y2VwdGlvbn0gZXhjZXB0aW9ucywgdGhpcyBpcyB0aGVcbiAgICAvLyB7QGxpbmsgRGVjaXNpb25TdGF0ZX0gbnVtYmVyLiBGb3Igb3RoZXJzLCBpdCBpcyB0aGUgc3RhdGUgd2hvc2Ugb3V0Z29pbmdcbiAgICAvLyBlZGdlIHdlIGNvdWxkbid0IG1hdGNoLlxuICAgIHRoaXMub2ZmZW5kaW5nU3RhdGUgPSAtMTtcbiAgICBpZiAodGhpcy5yZWNvZ25pemVyIT09bnVsbCkge1xuICAgICAgICB0aGlzLm9mZmVuZGluZ1N0YXRlID0gdGhpcy5yZWNvZ25pemVyLnN0YXRlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn1cblxuUmVjb2duaXRpb25FeGNlcHRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpO1xuUmVjb2duaXRpb25FeGNlcHRpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVjb2duaXRpb25FeGNlcHRpb247XG5cbi8vIDxwPklmIHRoZSBzdGF0ZSBudW1iZXIgaXMgbm90IGtub3duLCB0aGlzIG1ldGhvZCByZXR1cm5zIC0xLjwvcD5cblxuLy9cbi8vIEdldHMgdGhlIHNldCBvZiBpbnB1dCBzeW1ib2xzIHdoaWNoIGNvdWxkIHBvdGVudGlhbGx5IGZvbGxvdyB0aGVcbi8vIHByZXZpb3VzbHkgbWF0Y2hlZCBzeW1ib2wgYXQgdGhlIHRpbWUgdGhpcyBleGNlcHRpb24gd2FzIHRocm93bi5cbi8vXG4vLyA8cD5JZiB0aGUgc2V0IG9mIGV4cGVjdGVkIHRva2VucyBpcyBub3Qga25vd24gYW5kIGNvdWxkIG5vdCBiZSBjb21wdXRlZCxcbi8vIHRoaXMgbWV0aG9kIHJldHVybnMge0Bjb2RlIG51bGx9LjwvcD5cbi8vXG4vLyBAcmV0dXJuIFRoZSBzZXQgb2YgdG9rZW4gdHlwZXMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBmb2xsb3cgdGhlIGN1cnJlbnRcbi8vIHN0YXRlIGluIHRoZSBBVE4sIG9yIHtAY29kZSBudWxsfSBpZiB0aGUgaW5mb3JtYXRpb24gaXMgbm90IGF2YWlsYWJsZS5cbi8vIC9cblJlY29nbml0aW9uRXhjZXB0aW9uLnByb3RvdHlwZS5nZXRFeHBlY3RlZFRva2VucyA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLnJlY29nbml6ZXIhPT1udWxsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlY29nbml6ZXIuYXRuLmdldEV4cGVjdGVkVG9rZW5zKHRoaXMub2ZmZW5kaW5nU3RhdGUsIHRoaXMuY3R4KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59O1xuXG5SZWNvZ25pdGlvbkV4Y2VwdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlO1xufTtcblxuZnVuY3Rpb24gTGV4ZXJOb1ZpYWJsZUFsdEV4Y2VwdGlvbihsZXhlciwgaW5wdXQsIHN0YXJ0SW5kZXgsIGRlYWRFbmRDb25maWdzKSB7XG5cdFJlY29nbml0aW9uRXhjZXB0aW9uLmNhbGwodGhpcywge21lc3NhZ2U6XCJcIiwgcmVjb2duaXplcjpsZXhlciwgaW5wdXQ6aW5wdXQsIGN0eDpudWxsfSk7XG4gICAgdGhpcy5zdGFydEluZGV4ID0gc3RhcnRJbmRleDtcbiAgICB0aGlzLmRlYWRFbmRDb25maWdzID0gZGVhZEVuZENvbmZpZ3M7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkxleGVyTm9WaWFibGVBbHRFeGNlcHRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShSZWNvZ25pdGlvbkV4Y2VwdGlvbi5wcm90b3R5cGUpO1xuTGV4ZXJOb1ZpYWJsZUFsdEV4Y2VwdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMZXhlck5vVmlhYmxlQWx0RXhjZXB0aW9uO1xuXG5MZXhlck5vVmlhYmxlQWx0RXhjZXB0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBzeW1ib2wgPSBcIlwiO1xuICAgIGlmICh0aGlzLnN0YXJ0SW5kZXggPj0gMCAmJiB0aGlzLnN0YXJ0SW5kZXggPCB0aGlzLmlucHV0LnNpemUpIHtcbiAgICAgICAgc3ltYm9sID0gdGhpcy5pbnB1dC5nZXRUZXh0KCh0aGlzLnN0YXJ0SW5kZXgsdGhpcy5zdGFydEluZGV4KSk7XG4gICAgfVxuICAgIHJldHVybiBcIkxleGVyTm9WaWFibGVBbHRFeGNlcHRpb25cIiArIHN5bWJvbDtcbn07XG5cbi8vIEluZGljYXRlcyB0aGF0IHRoZSBwYXJzZXIgY291bGQgbm90IGRlY2lkZSB3aGljaCBvZiB0d28gb3IgbW9yZSBwYXRoc1xuLy8gdG8gdGFrZSBiYXNlZCB1cG9uIHRoZSByZW1haW5pbmcgaW5wdXQuIEl0IHRyYWNrcyB0aGUgc3RhcnRpbmcgdG9rZW5cbi8vIG9mIHRoZSBvZmZlbmRpbmcgaW5wdXQgYW5kIGFsc28ga25vd3Mgd2hlcmUgdGhlIHBhcnNlciB3YXNcbi8vIGluIHRoZSB2YXJpb3VzIHBhdGhzIHdoZW4gdGhlIGVycm9yLiBSZXBvcnRlZCBieSByZXBvcnROb1ZpYWJsZUFsdGVybmF0aXZlKClcbi8vXG5mdW5jdGlvbiBOb1ZpYWJsZUFsdEV4Y2VwdGlvbihyZWNvZ25pemVyLCBpbnB1dCwgc3RhcnRUb2tlbiwgb2ZmZW5kaW5nVG9rZW4sIGRlYWRFbmRDb25maWdzLCBjdHgpIHtcblx0Y3R4ID0gY3R4IHx8IHJlY29nbml6ZXIuX2N0eDtcblx0b2ZmZW5kaW5nVG9rZW4gPSBvZmZlbmRpbmdUb2tlbiB8fCByZWNvZ25pemVyLmdldEN1cnJlbnRUb2tlbigpO1xuXHRzdGFydFRva2VuID0gc3RhcnRUb2tlbiB8fCByZWNvZ25pemVyLmdldEN1cnJlbnRUb2tlbigpO1xuXHRpbnB1dCA9IGlucHV0IHx8IHJlY29nbml6ZXIuZ2V0SW5wdXRTdHJlYW0oKTtcblx0UmVjb2duaXRpb25FeGNlcHRpb24uY2FsbCh0aGlzLCB7bWVzc2FnZTpcIlwiLCByZWNvZ25pemVyOnJlY29nbml6ZXIsIGlucHV0OmlucHV0LCBjdHg6Y3R4fSk7XG4gICAgLy8gV2hpY2ggY29uZmlndXJhdGlvbnMgZGlkIHdlIHRyeSBhdCBpbnB1dC5pbmRleCgpIHRoYXQgY291bGRuJ3QgbWF0Y2hcblx0Ly8gaW5wdXQuTFQoMSk/Ly9cbiAgICB0aGlzLmRlYWRFbmRDb25maWdzID0gZGVhZEVuZENvbmZpZ3M7XG4gICAgLy8gVGhlIHRva2VuIG9iamVjdCBhdCB0aGUgc3RhcnQgaW5kZXg7IHRoZSBpbnB1dCBzdHJlYW0gbWlnaHRcbiAgICAvLyBub3QgYmUgYnVmZmVyaW5nIHRva2VucyBzbyBnZXQgYSByZWZlcmVuY2UgdG8gaXQuIChBdCB0aGVcbiAgICAvLyB0aW1lIHRoZSBlcnJvciBvY2N1cnJlZCwgb2YgY291cnNlIHRoZSBzdHJlYW0gbmVlZHMgdG8ga2VlcCBhXG4gICAgLy8gYnVmZmVyIGFsbCBvZiB0aGUgdG9rZW5zIGJ1dCBsYXRlciB3ZSBtaWdodCBub3QgaGF2ZSBhY2Nlc3MgdG8gdGhvc2UuKVxuICAgIHRoaXMuc3RhcnRUb2tlbiA9IHN0YXJ0VG9rZW47XG4gICAgdGhpcy5vZmZlbmRpbmdUb2tlbiA9IG9mZmVuZGluZ1Rva2VuO1xufVxuXG5Ob1ZpYWJsZUFsdEV4Y2VwdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFJlY29nbml0aW9uRXhjZXB0aW9uLnByb3RvdHlwZSk7XG5Ob1ZpYWJsZUFsdEV4Y2VwdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBOb1ZpYWJsZUFsdEV4Y2VwdGlvbjtcblxuLy8gVGhpcyBzaWduaWZpZXMgYW55IGtpbmQgb2YgbWlzbWF0Y2hlZCBpbnB1dCBleGNlcHRpb25zIHN1Y2ggYXNcbi8vIHdoZW4gdGhlIGN1cnJlbnQgaW5wdXQgZG9lcyBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIHRva2VuLlxuLy9cbmZ1bmN0aW9uIElucHV0TWlzbWF0Y2hFeGNlcHRpb24ocmVjb2duaXplcikge1xuXHRSZWNvZ25pdGlvbkV4Y2VwdGlvbi5jYWxsKHRoaXMsIHttZXNzYWdlOlwiXCIsIHJlY29nbml6ZXI6cmVjb2duaXplciwgaW5wdXQ6cmVjb2duaXplci5nZXRJbnB1dFN0cmVhbSgpLCBjdHg6cmVjb2duaXplci5fY3R4fSk7XG4gICAgdGhpcy5vZmZlbmRpbmdUb2tlbiA9IHJlY29nbml6ZXIuZ2V0Q3VycmVudFRva2VuKCk7XG59XG5cbklucHV0TWlzbWF0Y2hFeGNlcHRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShSZWNvZ25pdGlvbkV4Y2VwdGlvbi5wcm90b3R5cGUpO1xuSW5wdXRNaXNtYXRjaEV4Y2VwdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnB1dE1pc21hdGNoRXhjZXB0aW9uO1xuXG4vLyBBIHNlbWFudGljIHByZWRpY2F0ZSBmYWlsZWQgZHVyaW5nIHZhbGlkYXRpb24uIFZhbGlkYXRpb24gb2YgcHJlZGljYXRlc1xuLy8gb2NjdXJzIHdoZW4gbm9ybWFsbHkgcGFyc2luZyB0aGUgYWx0ZXJuYXRpdmUganVzdCBsaWtlIG1hdGNoaW5nIGEgdG9rZW4uXG4vLyBEaXNhbWJpZ3VhdGluZyBwcmVkaWNhdGUgZXZhbHVhdGlvbiBvY2N1cnMgd2hlbiB3ZSB0ZXN0IGEgcHJlZGljYXRlIGR1cmluZ1xuLy8gcHJlZGljdGlvbi5cblxuZnVuY3Rpb24gRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9uKHJlY29nbml6ZXIsIHByZWRpY2F0ZSwgbWVzc2FnZSkge1xuXHRSZWNvZ25pdGlvbkV4Y2VwdGlvbi5jYWxsKHRoaXMsIHttZXNzYWdlOnRoaXMuZm9ybWF0TWVzc2FnZShwcmVkaWNhdGUsbWVzc2FnZSB8fCBudWxsKSwgcmVjb2duaXplcjpyZWNvZ25pemVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OnJlY29nbml6ZXIuZ2V0SW5wdXRTdHJlYW0oKSwgY3R4OnJlY29nbml6ZXIuX2N0eH0pO1xuICAgIHZhciBzID0gcmVjb2duaXplci5faW50ZXJwLmF0bi5zdGF0ZXNbcmVjb2duaXplci5zdGF0ZV07XG4gICAgdmFyIHRyYW5zID0gcy50cmFuc2l0aW9uc1swXTtcbiAgICBpZiAodHJhbnMgaW5zdGFuY2VvZiBQcmVkaWNhdGVUcmFuc2l0aW9uKSB7XG4gICAgICAgIHRoaXMucnVsZUluZGV4ID0gdHJhbnMucnVsZUluZGV4O1xuICAgICAgICB0aGlzLnByZWRpY2F0ZUluZGV4ID0gdHJhbnMucHJlZEluZGV4O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucnVsZUluZGV4ID0gMDtcbiAgICAgICAgdGhpcy5wcmVkaWNhdGVJbmRleCA9IDA7XG4gICAgfVxuICAgIHRoaXMucHJlZGljYXRlID0gcHJlZGljYXRlO1xuICAgIHRoaXMub2ZmZW5kaW5nVG9rZW4gPSByZWNvZ25pemVyLmdldEN1cnJlbnRUb2tlbigpO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5GYWlsZWRQcmVkaWNhdGVFeGNlcHRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShSZWNvZ25pdGlvbkV4Y2VwdGlvbi5wcm90b3R5cGUpO1xuRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEZhaWxlZFByZWRpY2F0ZUV4Y2VwdGlvbjtcblxuRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9uLnByb3RvdHlwZS5mb3JtYXRNZXNzYWdlID0gZnVuY3Rpb24ocHJlZGljYXRlLCBtZXNzYWdlKSB7XG4gICAgaWYgKG1lc3NhZ2UgIT09bnVsbCkge1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gXCJmYWlsZWQgcHJlZGljYXRlOiB7XCIgKyBwcmVkaWNhdGUgKyBcIn0/XCI7XG4gICAgfVxufTtcblxuZnVuY3Rpb24gUGFyc2VDYW5jZWxsYXRpb25FeGNlcHRpb24oKSB7XG5cdEVycm9yLmNhbGwodGhpcyk7XG5cdEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFBhcnNlQ2FuY2VsbGF0aW9uRXhjZXB0aW9uKTtcblx0cmV0dXJuIHRoaXM7XG59XG5cblBhcnNlQ2FuY2VsbGF0aW9uRXhjZXB0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcblBhcnNlQ2FuY2VsbGF0aW9uRXhjZXB0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnNlQ2FuY2VsbGF0aW9uRXhjZXB0aW9uO1xuXG5leHBvcnRzLlJlY29nbml0aW9uRXhjZXB0aW9uID0gUmVjb2duaXRpb25FeGNlcHRpb247XG5leHBvcnRzLk5vVmlhYmxlQWx0RXhjZXB0aW9uID0gTm9WaWFibGVBbHRFeGNlcHRpb247XG5leHBvcnRzLkxleGVyTm9WaWFibGVBbHRFeGNlcHRpb24gPSBMZXhlck5vVmlhYmxlQWx0RXhjZXB0aW9uO1xuZXhwb3J0cy5JbnB1dE1pc21hdGNoRXhjZXB0aW9uID0gSW5wdXRNaXNtYXRjaEV4Y2VwdGlvbjtcbmV4cG9ydHMuRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9uID0gRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9uO1xuZXhwb3J0cy5QYXJzZUNhbmNlbGxhdGlvbkV4Y2VwdGlvbiA9IFBhcnNlQ2FuY2VsbGF0aW9uRXhjZXB0aW9uO1xuIiwiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuXG5leHBvcnRzLlJlY29nbml0aW9uRXhjZXB0aW9uID0gcmVxdWlyZSgnLi9FcnJvcnMnKS5SZWNvZ25pdGlvbkV4Y2VwdGlvbjtcbmV4cG9ydHMuTm9WaWFibGVBbHRFeGNlcHRpb24gPSByZXF1aXJlKCcuL0Vycm9ycycpLk5vVmlhYmxlQWx0RXhjZXB0aW9uO1xuZXhwb3J0cy5MZXhlck5vVmlhYmxlQWx0RXhjZXB0aW9uID0gcmVxdWlyZSgnLi9FcnJvcnMnKS5MZXhlck5vVmlhYmxlQWx0RXhjZXB0aW9uO1xuZXhwb3J0cy5JbnB1dE1pc21hdGNoRXhjZXB0aW9uID0gcmVxdWlyZSgnLi9FcnJvcnMnKS5JbnB1dE1pc21hdGNoRXhjZXB0aW9uO1xuZXhwb3J0cy5GYWlsZWRQcmVkaWNhdGVFeGNlcHRpb24gPSByZXF1aXJlKCcuL0Vycm9ycycpLkZhaWxlZFByZWRpY2F0ZUV4Y2VwdGlvbjtcbmV4cG9ydHMuRGlhZ25vc3RpY0Vycm9yTGlzdGVuZXIgPSByZXF1aXJlKCcuL0RpYWdub3N0aWNFcnJvckxpc3RlbmVyJykuRGlhZ25vc3RpY0Vycm9yTGlzdGVuZXI7XG5leHBvcnRzLkJhaWxFcnJvclN0cmF0ZWd5ID0gcmVxdWlyZSgnLi9FcnJvclN0cmF0ZWd5JykuQmFpbEVycm9yU3RyYXRlZ3k7XG5leHBvcnRzLkVycm9yTGlzdGVuZXIgPSByZXF1aXJlKCcuL0Vycm9yTGlzdGVuZXInKS5FcnJvckxpc3RlbmVyO1xuIiwiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuZXhwb3J0cy5hdG4gPSByZXF1aXJlKCcuL2F0bi9pbmRleCcpO1xuZXhwb3J0cy5jb2RlcG9pbnRhdCA9IHJlcXVpcmUoJy4vcG9seWZpbGxzL2NvZGVwb2ludGF0Jyk7XG5leHBvcnRzLmRmYSA9IHJlcXVpcmUoJy4vZGZhL2luZGV4Jyk7XG5leHBvcnRzLmZyb21jb2RlcG9pbnQgPSByZXF1aXJlKCcuL3BvbHlmaWxscy9mcm9tY29kZXBvaW50Jyk7XG5leHBvcnRzLnRyZWUgPSByZXF1aXJlKCcuL3RyZWUvaW5kZXgnKTtcbmV4cG9ydHMuZXJyb3IgPSByZXF1aXJlKCcuL2Vycm9yL2luZGV4Jyk7XG5leHBvcnRzLlRva2VuID0gcmVxdWlyZSgnLi9Ub2tlbicpLlRva2VuO1xuZXhwb3J0cy5DaGFyU3RyZWFtcyA9IHJlcXVpcmUoJy4vQ2hhclN0cmVhbXMnKS5DaGFyU3RyZWFtcztcbmV4cG9ydHMuQ29tbW9uVG9rZW4gPSByZXF1aXJlKCcuL1Rva2VuJykuQ29tbW9uVG9rZW47XG5leHBvcnRzLklucHV0U3RyZWFtID0gcmVxdWlyZSgnLi9JbnB1dFN0cmVhbScpLklucHV0U3RyZWFtO1xuZXhwb3J0cy5GaWxlU3RyZWFtID0gcmVxdWlyZSgnLi9GaWxlU3RyZWFtJykuRmlsZVN0cmVhbTtcbmV4cG9ydHMuQ29tbW9uVG9rZW5TdHJlYW0gPSByZXF1aXJlKCcuL0NvbW1vblRva2VuU3RyZWFtJykuQ29tbW9uVG9rZW5TdHJlYW07XG5leHBvcnRzLkxleGVyID0gcmVxdWlyZSgnLi9MZXhlcicpLkxleGVyO1xuZXhwb3J0cy5QYXJzZXIgPSByZXF1aXJlKCcuL1BhcnNlcicpLlBhcnNlcjtcbnZhciBwYyA9IHJlcXVpcmUoJy4vUHJlZGljdGlvbkNvbnRleHQnKTtcbmV4cG9ydHMuUHJlZGljdGlvbkNvbnRleHRDYWNoZSA9IHBjLlByZWRpY3Rpb25Db250ZXh0Q2FjaGU7XG5leHBvcnRzLlBhcnNlclJ1bGVDb250ZXh0ID0gcmVxdWlyZSgnLi9QYXJzZXJSdWxlQ29udGV4dCcpLlBhcnNlclJ1bGVDb250ZXh0O1xuZXhwb3J0cy5JbnRlcnZhbCA9IHJlcXVpcmUoJy4vSW50ZXJ2YWxTZXQnKS5JbnRlcnZhbDtcbmV4cG9ydHMuVXRpbHMgPSByZXF1aXJlKCcuL1V0aWxzJyk7XG4iLCIvKiEgaHR0cHM6Ly9tdGhzLmJlL2NvZGVwb2ludGF0IHYwLjIuMCBieSBAbWF0aGlhcyAqL1xuaWYgKCFTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0KSB7XG5cdChmdW5jdGlvbigpIHtcblx0XHQndXNlIHN0cmljdCc7IC8vIG5lZWRlZCB0byBzdXBwb3J0IGBhcHBseWAvYGNhbGxgIHdpdGggYHVuZGVmaW5lZGAvYG51bGxgXG5cdFx0dmFyIGRlZmluZVByb3BlcnR5ID0gKGZ1bmN0aW9uKCkge1xuXHRcdFx0Ly8gSUUgOCBvbmx5IHN1cHBvcnRzIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG9uIERPTSBlbGVtZW50c1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dmFyIG9iamVjdCA9IHt9O1xuXHRcdFx0XHR2YXIgJGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXHRcdFx0XHR2YXIgcmVzdWx0ID0gJGRlZmluZVByb3BlcnR5KG9iamVjdCwgb2JqZWN0LCBvYmplY3QpICYmICRkZWZpbmVQcm9wZXJ0eTtcblx0XHRcdH0gY2F0Y2goZXJyb3IpIHt9XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0oKSk7XG5cdFx0dmFyIGNvZGVQb2ludEF0ID0gZnVuY3Rpb24ocG9zaXRpb24pIHtcblx0XHRcdGlmICh0aGlzID09IG51bGwpIHtcblx0XHRcdFx0dGhyb3cgVHlwZUVycm9yKCk7XG5cdFx0XHR9XG5cdFx0XHR2YXIgc3RyaW5nID0gU3RyaW5nKHRoaXMpO1xuXHRcdFx0dmFyIHNpemUgPSBzdHJpbmcubGVuZ3RoO1xuXHRcdFx0Ly8gYFRvSW50ZWdlcmBcblx0XHRcdHZhciBpbmRleCA9IHBvc2l0aW9uID8gTnVtYmVyKHBvc2l0aW9uKSA6IDA7XG5cdFx0XHRpZiAoaW5kZXggIT0gaW5kZXgpIHsgLy8gYmV0dGVyIGBpc05hTmBcblx0XHRcdFx0aW5kZXggPSAwO1xuXHRcdFx0fVxuXHRcdFx0Ly8gQWNjb3VudCBmb3Igb3V0LW9mLWJvdW5kcyBpbmRpY2VzOlxuXHRcdFx0aWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBzaXplKSB7XG5cdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0XHQvLyBHZXQgdGhlIGZpcnN0IGNvZGUgdW5pdFxuXHRcdFx0dmFyIGZpcnN0ID0gc3RyaW5nLmNoYXJDb2RlQXQoaW5kZXgpO1xuXHRcdFx0dmFyIHNlY29uZDtcblx0XHRcdGlmICggLy8gY2hlY2sgaWYgaXTigJlzIHRoZSBzdGFydCBvZiBhIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0XHRcdGZpcnN0ID49IDB4RDgwMCAmJiBmaXJzdCA8PSAweERCRkYgJiYgLy8gaGlnaCBzdXJyb2dhdGVcblx0XHRcdFx0c2l6ZSA+IGluZGV4ICsgMSAvLyB0aGVyZSBpcyBhIG5leHQgY29kZSB1bml0XG5cdFx0XHQpIHtcblx0XHRcdFx0c2Vjb25kID0gc3RyaW5nLmNoYXJDb2RlQXQoaW5kZXggKyAxKTtcblx0XHRcdFx0aWYgKHNlY29uZCA+PSAweERDMDAgJiYgc2Vjb25kIDw9IDB4REZGRikgeyAvLyBsb3cgc3Vycm9nYXRlXG5cdFx0XHRcdFx0Ly8gaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmcjc3Vycm9nYXRlLWZvcm11bGFlXG5cdFx0XHRcdFx0cmV0dXJuIChmaXJzdCAtIDB4RDgwMCkgKiAweDQwMCArIHNlY29uZCAtIDB4REMwMCArIDB4MTAwMDA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmaXJzdDtcblx0XHR9O1xuXHRcdGlmIChkZWZpbmVQcm9wZXJ0eSkge1xuXHRcdFx0ZGVmaW5lUHJvcGVydHkoU3RyaW5nLnByb3RvdHlwZSwgJ2NvZGVQb2ludEF0Jywge1xuXHRcdFx0XHQndmFsdWUnOiBjb2RlUG9pbnRBdCxcblx0XHRcdFx0J2NvbmZpZ3VyYWJsZSc6IHRydWUsXG5cdFx0XHRcdCd3cml0YWJsZSc6IHRydWVcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0ID0gY29kZVBvaW50QXQ7XG5cdFx0fVxuXHR9KCkpO1xufVxuIiwiLyohIGh0dHBzOi8vbXRocy5iZS9mcm9tY29kZXBvaW50IHYwLjIuMSBieSBAbWF0aGlhcyAqL1xuaWYgKCFTdHJpbmcuZnJvbUNvZGVQb2ludCkge1xuXHQoZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGRlZmluZVByb3BlcnR5ID0gKGZ1bmN0aW9uKCkge1xuXHRcdFx0Ly8gSUUgOCBvbmx5IHN1cHBvcnRzIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG9uIERPTSBlbGVtZW50c1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dmFyIG9iamVjdCA9IHt9O1xuXHRcdFx0XHR2YXIgJGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXHRcdFx0XHR2YXIgcmVzdWx0ID0gJGRlZmluZVByb3BlcnR5KG9iamVjdCwgb2JqZWN0LCBvYmplY3QpICYmICRkZWZpbmVQcm9wZXJ0eTtcblx0XHRcdH0gY2F0Y2goZXJyb3IpIHt9XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0oKSk7XG5cdFx0dmFyIHN0cmluZ0Zyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG5cdFx0dmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblx0XHR2YXIgZnJvbUNvZGVQb2ludCA9IGZ1bmN0aW9uKF8pIHtcblx0XHRcdHZhciBNQVhfU0laRSA9IDB4NDAwMDtcblx0XHRcdHZhciBjb2RlVW5pdHMgPSBbXTtcblx0XHRcdHZhciBoaWdoU3Vycm9nYXRlO1xuXHRcdFx0dmFyIGxvd1N1cnJvZ2F0ZTtcblx0XHRcdHZhciBpbmRleCA9IC0xO1xuXHRcdFx0dmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0XHRpZiAoIWxlbmd0aCkge1xuXHRcdFx0XHRyZXR1cm4gJyc7XG5cdFx0XHR9XG5cdFx0XHR2YXIgcmVzdWx0ID0gJyc7XG5cdFx0XHR3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuXHRcdFx0XHR2YXIgY29kZVBvaW50ID0gTnVtYmVyKGFyZ3VtZW50c1tpbmRleF0pO1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0IWlzRmluaXRlKGNvZGVQb2ludCkgfHwgLy8gYE5hTmAsIGArSW5maW5pdHlgLCBvciBgLUluZmluaXR5YFxuXHRcdFx0XHRcdGNvZGVQb2ludCA8IDAgfHwgLy8gbm90IGEgdmFsaWQgVW5pY29kZSBjb2RlIHBvaW50XG5cdFx0XHRcdFx0Y29kZVBvaW50ID4gMHgxMEZGRkYgfHwgLy8gbm90IGEgdmFsaWQgVW5pY29kZSBjb2RlIHBvaW50XG5cdFx0XHRcdFx0Zmxvb3IoY29kZVBvaW50KSAhPSBjb2RlUG9pbnQgLy8gbm90IGFuIGludGVnZXJcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0dGhyb3cgUmFuZ2VFcnJvcignSW52YWxpZCBjb2RlIHBvaW50OiAnICsgY29kZVBvaW50KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoY29kZVBvaW50IDw9IDB4RkZGRikgeyAvLyBCTVAgY29kZSBwb2ludFxuXHRcdFx0XHRcdGNvZGVVbml0cy5wdXNoKGNvZGVQb2ludCk7XG5cdFx0XHRcdH0gZWxzZSB7IC8vIEFzdHJhbCBjb2RlIHBvaW50OyBzcGxpdCBpbiBzdXJyb2dhdGUgaGFsdmVzXG5cdFx0XHRcdFx0Ly8gaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmcjc3Vycm9nYXRlLWZvcm11bGFlXG5cdFx0XHRcdFx0Y29kZVBvaW50IC09IDB4MTAwMDA7XG5cdFx0XHRcdFx0aGlnaFN1cnJvZ2F0ZSA9IChjb2RlUG9pbnQgPj4gMTApICsgMHhEODAwO1xuXHRcdFx0XHRcdGxvd1N1cnJvZ2F0ZSA9IChjb2RlUG9pbnQgJSAweDQwMCkgKyAweERDMDA7XG5cdFx0XHRcdFx0Y29kZVVuaXRzLnB1c2goaGlnaFN1cnJvZ2F0ZSwgbG93U3Vycm9nYXRlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoaW5kZXggKyAxID09IGxlbmd0aCB8fCBjb2RlVW5pdHMubGVuZ3RoID4gTUFYX1NJWkUpIHtcblx0XHRcdFx0XHRyZXN1bHQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIGNvZGVVbml0cyk7XG5cdFx0XHRcdFx0Y29kZVVuaXRzLmxlbmd0aCA9IDA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fTtcblx0XHRpZiAoZGVmaW5lUHJvcGVydHkpIHtcblx0XHRcdGRlZmluZVByb3BlcnR5KFN0cmluZywgJ2Zyb21Db2RlUG9pbnQnLCB7XG5cdFx0XHRcdCd2YWx1ZSc6IGZyb21Db2RlUG9pbnQsXG5cdFx0XHRcdCdjb25maWd1cmFibGUnOiB0cnVlLFxuXHRcdFx0XHQnd3JpdGFibGUnOiB0cnVlXG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0U3RyaW5nLmZyb21Db2RlUG9pbnQgPSBmcm9tQ29kZVBvaW50O1xuXHRcdH1cblx0fSgpKTtcbn1cbiIsIi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbi8vL1xuXG4vLyBUaGUgYmFzaWMgbm90aW9uIG9mIGEgdHJlZSBoYXMgYSBwYXJlbnQsIGEgcGF5bG9hZCwgYW5kIGEgbGlzdCBvZiBjaGlsZHJlbi5cbi8vICBJdCBpcyB0aGUgbW9zdCBhYnN0cmFjdCBpbnRlcmZhY2UgZm9yIGFsbCB0aGUgdHJlZXMgdXNlZCBieSBBTlRMUi5cbi8vL1xuXG52YXIgVG9rZW4gPSByZXF1aXJlKCcuLy4uL1Rva2VuJykuVG9rZW47XG52YXIgSW50ZXJ2YWwgPSByZXF1aXJlKCcuLy4uL0ludGVydmFsU2V0JykuSW50ZXJ2YWw7XG52YXIgSU5WQUxJRF9JTlRFUlZBTCA9IG5ldyBJbnRlcnZhbCgtMSwgLTIpO1xudmFyIFV0aWxzID0gcmVxdWlyZSgnLi4vVXRpbHMuanMnKTtcblxuXG5mdW5jdGlvbiBUcmVlKCkge1xuXHRyZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gU3ludGF4VHJlZSgpIHtcblx0VHJlZS5jYWxsKHRoaXMpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuU3ludGF4VHJlZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRyZWUucHJvdG90eXBlKTtcblN5bnRheFRyZWUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3ludGF4VHJlZTtcblxuZnVuY3Rpb24gUGFyc2VUcmVlKCkge1xuXHRTeW50YXhUcmVlLmNhbGwodGhpcyk7XG5cdHJldHVybiB0aGlzO1xufVxuXG5QYXJzZVRyZWUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTeW50YXhUcmVlLnByb3RvdHlwZSk7XG5QYXJzZVRyZWUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFyc2VUcmVlO1xuXG5mdW5jdGlvbiBSdWxlTm9kZSgpIHtcblx0UGFyc2VUcmVlLmNhbGwodGhpcyk7XG5cdHJldHVybiB0aGlzO1xufVxuXG5SdWxlTm9kZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFBhcnNlVHJlZS5wcm90b3R5cGUpO1xuUnVsZU5vZGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUnVsZU5vZGU7XG5cbmZ1bmN0aW9uIFRlcm1pbmFsTm9kZSgpIHtcblx0UGFyc2VUcmVlLmNhbGwodGhpcyk7XG5cdHJldHVybiB0aGlzO1xufVxuXG5UZXJtaW5hbE5vZGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShQYXJzZVRyZWUucHJvdG90eXBlKTtcblRlcm1pbmFsTm9kZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXJtaW5hbE5vZGU7XG5cbmZ1bmN0aW9uIEVycm9yTm9kZSgpIHtcblx0VGVybWluYWxOb2RlLmNhbGwodGhpcyk7XG5cdHJldHVybiB0aGlzO1xufVxuXG5FcnJvck5vZGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXJtaW5hbE5vZGUucHJvdG90eXBlKTtcbkVycm9yTm9kZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBFcnJvck5vZGU7XG5cbmZ1bmN0aW9uIFBhcnNlVHJlZVZpc2l0b3IoKSB7XG5cdHJldHVybiB0aGlzO1xufVxuXG5QYXJzZVRyZWVWaXNpdG9yLnByb3RvdHlwZS52aXNpdCA9IGZ1bmN0aW9uKGN0eCkge1xuIFx0aWYgKEFycmF5LmlzQXJyYXkoY3R4KSkge1xuXHRcdHJldHVybiBjdHgubWFwKGZ1bmN0aW9uKGNoaWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGQuYWNjZXB0KHRoaXMpO1xuICAgICAgICB9LCB0aGlzKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gY3R4LmFjY2VwdCh0aGlzKTtcblx0fVxufTtcblxuUGFyc2VUcmVlVmlzaXRvci5wcm90b3R5cGUudmlzaXRDaGlsZHJlbiA9IGZ1bmN0aW9uKGN0eCkge1xuXHRpZiAoY3R4LmNoaWxkcmVuKSB7XG5cdFx0cmV0dXJuIHRoaXMudmlzaXQoY3R4LmNoaWxkcmVuKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxufVxuXG5QYXJzZVRyZWVWaXNpdG9yLnByb3RvdHlwZS52aXNpdFRlcm1pbmFsID0gZnVuY3Rpb24obm9kZSkge1xufTtcblxuUGFyc2VUcmVlVmlzaXRvci5wcm90b3R5cGUudmlzaXRFcnJvck5vZGUgPSBmdW5jdGlvbihub2RlKSB7XG59O1xuXG5cbmZ1bmN0aW9uIFBhcnNlVHJlZUxpc3RlbmVyKCkge1xuXHRyZXR1cm4gdGhpcztcbn1cblxuUGFyc2VUcmVlTGlzdGVuZXIucHJvdG90eXBlLnZpc2l0VGVybWluYWwgPSBmdW5jdGlvbihub2RlKSB7XG59O1xuXG5QYXJzZVRyZWVMaXN0ZW5lci5wcm90b3R5cGUudmlzaXRFcnJvck5vZGUgPSBmdW5jdGlvbihub2RlKSB7XG59O1xuXG5QYXJzZVRyZWVMaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJFdmVyeVJ1bGUgPSBmdW5jdGlvbihub2RlKSB7XG59O1xuXG5QYXJzZVRyZWVMaXN0ZW5lci5wcm90b3R5cGUuZXhpdEV2ZXJ5UnVsZSA9IGZ1bmN0aW9uKG5vZGUpIHtcbn07XG5cbmZ1bmN0aW9uIFRlcm1pbmFsTm9kZUltcGwoc3ltYm9sKSB7XG5cdFRlcm1pbmFsTm9kZS5jYWxsKHRoaXMpO1xuXHR0aGlzLnBhcmVudEN0eCA9IG51bGw7XG5cdHRoaXMuc3ltYm9sID0gc3ltYm9sO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuVGVybWluYWxOb2RlSW1wbC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRlcm1pbmFsTm9kZS5wcm90b3R5cGUpO1xuVGVybWluYWxOb2RlSW1wbC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXJtaW5hbE5vZGVJbXBsO1xuXG5UZXJtaW5hbE5vZGVJbXBsLnByb3RvdHlwZS5nZXRDaGlsZCA9IGZ1bmN0aW9uKGkpIHtcblx0cmV0dXJuIG51bGw7XG59O1xuXG5UZXJtaW5hbE5vZGVJbXBsLnByb3RvdHlwZS5nZXRTeW1ib2wgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuc3ltYm9sO1xufTtcblxuVGVybWluYWxOb2RlSW1wbC5wcm90b3R5cGUuZ2V0UGFyZW50ID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLnBhcmVudEN0eDtcbn07XG5cblRlcm1pbmFsTm9kZUltcGwucHJvdG90eXBlLmdldFBheWxvYWQgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuc3ltYm9sO1xufTtcblxuVGVybWluYWxOb2RlSW1wbC5wcm90b3R5cGUuZ2V0U291cmNlSW50ZXJ2YWwgPSBmdW5jdGlvbigpIHtcblx0aWYgKHRoaXMuc3ltYm9sID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIElOVkFMSURfSU5URVJWQUw7XG5cdH1cblx0dmFyIHRva2VuSW5kZXggPSB0aGlzLnN5bWJvbC50b2tlbkluZGV4O1xuXHRyZXR1cm4gbmV3IEludGVydmFsKHRva2VuSW5kZXgsIHRva2VuSW5kZXgpO1xufTtcblxuVGVybWluYWxOb2RlSW1wbC5wcm90b3R5cGUuZ2V0Q2hpbGRDb3VudCA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gMDtcbn07XG5cblRlcm1pbmFsTm9kZUltcGwucHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uKHZpc2l0b3IpIHtcblx0cmV0dXJuIHZpc2l0b3IudmlzaXRUZXJtaW5hbCh0aGlzKTtcbn07XG5cblRlcm1pbmFsTm9kZUltcGwucHJvdG90eXBlLmdldFRleHQgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuc3ltYm9sLnRleHQ7XG59O1xuXG5UZXJtaW5hbE5vZGVJbXBsLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRpZiAodGhpcy5zeW1ib2wudHlwZSA9PT0gVG9rZW4uRU9GKSB7XG5cdFx0cmV0dXJuIFwiPEVPRj5cIjtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdGhpcy5zeW1ib2wudGV4dDtcblx0fVxufTtcblxuLy8gUmVwcmVzZW50cyBhIHRva2VuIHRoYXQgd2FzIGNvbnN1bWVkIGR1cmluZyByZXN5bmNocm9uaXphdGlvblxuLy8gcmF0aGVyIHRoYW4gZHVyaW5nIGEgdmFsaWQgbWF0Y2ggb3BlcmF0aW9uLiBGb3IgZXhhbXBsZSxcbi8vIHdlIHdpbGwgY3JlYXRlIHRoaXMga2luZCBvZiBhIG5vZGUgZHVyaW5nIHNpbmdsZSB0b2tlbiBpbnNlcnRpb25cbi8vIGFuZCBkZWxldGlvbiBhcyB3ZWxsIGFzIGR1cmluZyBcImNvbnN1bWUgdW50aWwgZXJyb3IgcmVjb3Zlcnkgc2V0XCJcbi8vIHVwb24gbm8gdmlhYmxlIGFsdGVybmF0aXZlIGV4Y2VwdGlvbnMuXG5cbmZ1bmN0aW9uIEVycm9yTm9kZUltcGwodG9rZW4pIHtcblx0VGVybWluYWxOb2RlSW1wbC5jYWxsKHRoaXMsIHRva2VuKTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkVycm9yTm9kZUltcGwucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXJtaW5hbE5vZGVJbXBsLnByb3RvdHlwZSk7XG5FcnJvck5vZGVJbXBsLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEVycm9yTm9kZUltcGw7XG5cbkVycm9yTm9kZUltcGwucHJvdG90eXBlLmlzRXJyb3JOb2RlID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0cnVlO1xufTtcblxuRXJyb3JOb2RlSW1wbC5wcm90b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24odmlzaXRvcikge1xuXHRyZXR1cm4gdmlzaXRvci52aXNpdEVycm9yTm9kZSh0aGlzKTtcbn07XG5cbmZ1bmN0aW9uIFBhcnNlVHJlZVdhbGtlcigpIHtcblx0cmV0dXJuIHRoaXM7XG59XG5cblBhcnNlVHJlZVdhbGtlci5wcm90b3R5cGUud2FsayA9IGZ1bmN0aW9uKGxpc3RlbmVyLCB0KSB7XG5cdHZhciBlcnJvck5vZGUgPSB0IGluc3RhbmNlb2YgRXJyb3JOb2RlIHx8XG5cdFx0XHQodC5pc0Vycm9yTm9kZSAhPT0gdW5kZWZpbmVkICYmIHQuaXNFcnJvck5vZGUoKSk7XG5cdGlmIChlcnJvck5vZGUpIHtcblx0XHRsaXN0ZW5lci52aXNpdEVycm9yTm9kZSh0KTtcblx0fSBlbHNlIGlmICh0IGluc3RhbmNlb2YgVGVybWluYWxOb2RlKSB7XG5cdFx0bGlzdGVuZXIudmlzaXRUZXJtaW5hbCh0KTtcblx0fSBlbHNlIHtcblx0XHR0aGlzLmVudGVyUnVsZShsaXN0ZW5lciwgdCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0LmdldENoaWxkQ291bnQoKTsgaSsrKSB7XG5cdFx0XHR2YXIgY2hpbGQgPSB0LmdldENoaWxkKGkpO1xuXHRcdFx0dGhpcy53YWxrKGxpc3RlbmVyLCBjaGlsZCk7XG5cdFx0fVxuXHRcdHRoaXMuZXhpdFJ1bGUobGlzdGVuZXIsIHQpO1xuXHR9XG59O1xuLy9cbi8vIFRoZSBkaXNjb3Zlcnkgb2YgYSBydWxlIG5vZGUsIGludm9sdmVzIHNlbmRpbmcgdHdvIGV2ZW50czogdGhlIGdlbmVyaWNcbi8vIHtAbGluayBQYXJzZVRyZWVMaXN0ZW5lci8vZW50ZXJFdmVyeVJ1bGV9IGFuZCBhXG4vLyB7QGxpbmsgUnVsZUNvbnRleHR9LXNwZWNpZmljIGV2ZW50LiBGaXJzdCB3ZSB0cmlnZ2VyIHRoZSBnZW5lcmljIGFuZCB0aGVuXG4vLyB0aGUgcnVsZSBzcGVjaWZpYy4gV2UgdG8gdGhlbSBpbiByZXZlcnNlIG9yZGVyIHVwb24gZmluaXNoaW5nIHRoZSBub2RlLlxuLy9cblBhcnNlVHJlZVdhbGtlci5wcm90b3R5cGUuZW50ZXJSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIsIHIpIHtcblx0dmFyIGN0eCA9IHIuZ2V0UnVsZUNvbnRleHQoKTtcblx0bGlzdGVuZXIuZW50ZXJFdmVyeVJ1bGUoY3R4KTtcblx0Y3R4LmVudGVyUnVsZShsaXN0ZW5lcik7XG59O1xuXG5QYXJzZVRyZWVXYWxrZXIucHJvdG90eXBlLmV4aXRSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIsIHIpIHtcblx0dmFyIGN0eCA9IHIuZ2V0UnVsZUNvbnRleHQoKTtcblx0Y3R4LmV4aXRSdWxlKGxpc3RlbmVyKTtcblx0bGlzdGVuZXIuZXhpdEV2ZXJ5UnVsZShjdHgpO1xufTtcblxuUGFyc2VUcmVlV2Fsa2VyLkRFRkFVTFQgPSBuZXcgUGFyc2VUcmVlV2Fsa2VyKCk7XG5cbmV4cG9ydHMuUnVsZU5vZGUgPSBSdWxlTm9kZTtcbmV4cG9ydHMuRXJyb3JOb2RlID0gRXJyb3JOb2RlO1xuZXhwb3J0cy5UZXJtaW5hbE5vZGUgPSBUZXJtaW5hbE5vZGU7XG5leHBvcnRzLkVycm9yTm9kZUltcGwgPSBFcnJvck5vZGVJbXBsO1xuZXhwb3J0cy5UZXJtaW5hbE5vZGVJbXBsID0gVGVybWluYWxOb2RlSW1wbDtcbmV4cG9ydHMuUGFyc2VUcmVlTGlzdGVuZXIgPSBQYXJzZVRyZWVMaXN0ZW5lcjtcbmV4cG9ydHMuUGFyc2VUcmVlVmlzaXRvciA9IFBhcnNlVHJlZVZpc2l0b3I7XG5leHBvcnRzLlBhcnNlVHJlZVdhbGtlciA9IFBhcnNlVHJlZVdhbGtlcjtcbmV4cG9ydHMuSU5WQUxJRF9JTlRFUlZBTCA9IElOVkFMSURfSU5URVJWQUw7XG4iLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG5cbnZhciBVdGlscyA9IHJlcXVpcmUoJy4vLi4vVXRpbHMnKTtcbnZhciBUb2tlbiA9IHJlcXVpcmUoJy4vLi4vVG9rZW4nKS5Ub2tlbjtcbnZhciBSdWxlTm9kZSA9IHJlcXVpcmUoJy4vVHJlZScpLlJ1bGVOb2RlO1xudmFyIEVycm9yTm9kZSA9IHJlcXVpcmUoJy4vVHJlZScpLkVycm9yTm9kZTtcbnZhciBUZXJtaW5hbE5vZGUgPSByZXF1aXJlKCcuL1RyZWUnKS5UZXJtaW5hbE5vZGU7XG52YXIgUGFyc2VyUnVsZUNvbnRleHQgPSByZXF1aXJlKCcuLy4uL1BhcnNlclJ1bGVDb250ZXh0JykuUGFyc2VyUnVsZUNvbnRleHQ7XG52YXIgUnVsZUNvbnRleHQgPSByZXF1aXJlKCcuLy4uL1J1bGVDb250ZXh0JykuUnVsZUNvbnRleHQ7XG52YXIgSU5WQUxJRF9BTFRfTlVNQkVSID0gcmVxdWlyZSgnLi8uLi9hdG4vQVROJykuSU5WQUxJRF9BTFRfTlVNQkVSO1xuXG5cbi8qKiBBIHNldCBvZiB1dGlsaXR5IHJvdXRpbmVzIHVzZWZ1bCBmb3IgYWxsIGtpbmRzIG9mIEFOVExSIHRyZWVzLiAqL1xuZnVuY3Rpb24gVHJlZXMoKSB7XG59XG5cbi8vIFByaW50IG91dCBhIHdob2xlIHRyZWUgaW4gTElTUCBmb3JtLiB7QGxpbmsgLy9nZXROb2RlVGV4dH0gaXMgdXNlZCBvbiB0aGVcbi8vICBub2RlIHBheWxvYWRzIHRvIGdldCB0aGUgdGV4dCBmb3IgdGhlIG5vZGVzLiAgRGV0ZWN0XG4vLyAgcGFyc2UgdHJlZXMgYW5kIGV4dHJhY3QgZGF0YSBhcHByb3ByaWF0ZWx5LlxuVHJlZXMudG9TdHJpbmdUcmVlID0gZnVuY3Rpb24odHJlZSwgcnVsZU5hbWVzLCByZWNvZykge1xuXHRydWxlTmFtZXMgPSBydWxlTmFtZXMgfHwgbnVsbDtcblx0cmVjb2cgPSByZWNvZyB8fCBudWxsO1xuICAgIGlmKHJlY29nIT09bnVsbCkge1xuICAgICAgIHJ1bGVOYW1lcyA9IHJlY29nLnJ1bGVOYW1lcztcbiAgICB9XG4gICAgdmFyIHMgPSBUcmVlcy5nZXROb2RlVGV4dCh0cmVlLCBydWxlTmFtZXMpO1xuICAgIHMgPSBVdGlscy5lc2NhcGVXaGl0ZXNwYWNlKHMsIGZhbHNlKTtcbiAgICB2YXIgYyA9IHRyZWUuZ2V0Q2hpbGRDb3VudCgpO1xuICAgIGlmKGM9PT0wKSB7XG4gICAgICAgIHJldHVybiBzO1xuICAgIH1cbiAgICB2YXIgcmVzID0gXCIoXCIgKyBzICsgJyAnO1xuICAgIGlmKGM+MCkge1xuICAgICAgICBzID0gVHJlZXMudG9TdHJpbmdUcmVlKHRyZWUuZ2V0Q2hpbGQoMCksIHJ1bGVOYW1lcyk7XG4gICAgICAgIHJlcyA9IHJlcy5jb25jYXQocyk7XG4gICAgfVxuICAgIGZvcih2YXIgaT0xO2k8YztpKyspIHtcbiAgICAgICAgcyA9IFRyZWVzLnRvU3RyaW5nVHJlZSh0cmVlLmdldENoaWxkKGkpLCBydWxlTmFtZXMpO1xuICAgICAgICByZXMgPSByZXMuY29uY2F0KCcgJyArIHMpO1xuICAgIH1cbiAgICByZXMgPSByZXMuY29uY2F0KFwiKVwiKTtcbiAgICByZXR1cm4gcmVzO1xufTtcblxuVHJlZXMuZ2V0Tm9kZVRleHQgPSBmdW5jdGlvbih0LCBydWxlTmFtZXMsIHJlY29nKSB7XG5cdHJ1bGVOYW1lcyA9IHJ1bGVOYW1lcyB8fCBudWxsO1xuXHRyZWNvZyA9IHJlY29nIHx8IG51bGw7XG4gICAgaWYocmVjb2chPT1udWxsKSB7XG4gICAgICAgIHJ1bGVOYW1lcyA9IHJlY29nLnJ1bGVOYW1lcztcbiAgICB9XG4gICAgaWYocnVsZU5hbWVzIT09bnVsbCkge1xuICAgICAgIGlmICh0IGluc3RhbmNlb2YgUnVsZUNvbnRleHQpIHtcbiAgICAgICAgICAgdmFyIGFsdE51bWJlciA9IHQuZ2V0QWx0TnVtYmVyKCk7XG4gICAgICAgICAgIGlmICggYWx0TnVtYmVyIT1JTlZBTElEX0FMVF9OVU1CRVIgKSB7XG4gICAgICAgICAgICAgICByZXR1cm4gcnVsZU5hbWVzW3QucnVsZUluZGV4XStcIjpcIithbHROdW1iZXI7XG4gICAgICAgICAgIH1cbiAgICAgICAgICAgcmV0dXJuIHJ1bGVOYW1lc1t0LnJ1bGVJbmRleF07XG4gICAgICAgfSBlbHNlIGlmICggdCBpbnN0YW5jZW9mIEVycm9yTm9kZSkge1xuICAgICAgICAgICByZXR1cm4gdC50b1N0cmluZygpO1xuICAgICAgIH0gZWxzZSBpZih0IGluc3RhbmNlb2YgVGVybWluYWxOb2RlKSB7XG4gICAgICAgICAgIGlmKHQuc3ltYm9sIT09bnVsbCkge1xuICAgICAgICAgICAgICAgcmV0dXJuIHQuc3ltYm9sLnRleHQ7XG4gICAgICAgICAgIH1cbiAgICAgICB9XG4gICAgfVxuICAgIC8vIG5vIHJlY29nIGZvciBydWxlIG5hbWVzXG4gICAgdmFyIHBheWxvYWQgPSB0LmdldFBheWxvYWQoKTtcbiAgICBpZiAocGF5bG9hZCBpbnN0YW5jZW9mIFRva2VuICkge1xuICAgICAgIHJldHVybiBwYXlsb2FkLnRleHQ7XG4gICAgfVxuICAgIHJldHVybiB0LmdldFBheWxvYWQoKS50b1N0cmluZygpO1xufTtcblxuXG4vLyBSZXR1cm4gb3JkZXJlZCBsaXN0IG9mIGFsbCBjaGlsZHJlbiBvZiB0aGlzIG5vZGVcblRyZWVzLmdldENoaWxkcmVuID0gZnVuY3Rpb24odCkge1xuXHR2YXIgbGlzdCA9IFtdO1xuXHRmb3IodmFyIGk9MDtpPHQuZ2V0Q2hpbGRDb3VudCgpO2krKykge1xuXHRcdGxpc3QucHVzaCh0LmdldENoaWxkKGkpKTtcblx0fVxuXHRyZXR1cm4gbGlzdDtcbn07XG5cbi8vIFJldHVybiBhIGxpc3Qgb2YgYWxsIGFuY2VzdG9ycyBvZiB0aGlzIG5vZGUuICBUaGUgZmlyc3Qgbm9kZSBvZlxuLy8gIGxpc3QgaXMgdGhlIHJvb3QgYW5kIHRoZSBsYXN0IGlzIHRoZSBwYXJlbnQgb2YgdGhpcyBub2RlLlxuLy9cblRyZWVzLmdldEFuY2VzdG9ycyA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgYW5jZXN0b3JzID0gW107XG4gICAgdCA9IHQuZ2V0UGFyZW50KCk7XG4gICAgd2hpbGUodCE9PW51bGwpIHtcbiAgICAgICAgYW5jZXN0b3JzID0gW3RdLmNvbmNhdChhbmNlc3RvcnMpO1xuICAgICAgICB0ID0gdC5nZXRQYXJlbnQoKTtcbiAgICB9XG4gICAgcmV0dXJuIGFuY2VzdG9ycztcbn07XG5cblRyZWVzLmZpbmRBbGxUb2tlbk5vZGVzID0gZnVuY3Rpb24odCwgdHR5cGUpIHtcbiAgICByZXR1cm4gVHJlZXMuZmluZEFsbE5vZGVzKHQsIHR0eXBlLCB0cnVlKTtcbn07XG5cblRyZWVzLmZpbmRBbGxSdWxlTm9kZXMgPSBmdW5jdGlvbih0LCBydWxlSW5kZXgpIHtcblx0cmV0dXJuIFRyZWVzLmZpbmRBbGxOb2Rlcyh0LCBydWxlSW5kZXgsIGZhbHNlKTtcbn07XG5cblRyZWVzLmZpbmRBbGxOb2RlcyA9IGZ1bmN0aW9uKHQsIGluZGV4LCBmaW5kVG9rZW5zKSB7XG5cdHZhciBub2RlcyA9IFtdO1xuXHRUcmVlcy5fZmluZEFsbE5vZGVzKHQsIGluZGV4LCBmaW5kVG9rZW5zLCBub2Rlcyk7XG5cdHJldHVybiBub2Rlcztcbn07XG5cblRyZWVzLl9maW5kQWxsTm9kZXMgPSBmdW5jdGlvbih0LCBpbmRleCwgZmluZFRva2Vucywgbm9kZXMpIHtcblx0Ly8gY2hlY2sgdGhpcyBub2RlICh0aGUgcm9vdCkgZmlyc3Rcblx0aWYoZmluZFRva2VucyAmJiAodCBpbnN0YW5jZW9mIFRlcm1pbmFsTm9kZSkpIHtcblx0XHRpZih0LnN5bWJvbC50eXBlPT09aW5kZXgpIHtcblx0XHRcdG5vZGVzLnB1c2godCk7XG5cdFx0fVxuXHR9IGVsc2UgaWYoIWZpbmRUb2tlbnMgJiYgKHQgaW5zdGFuY2VvZiBQYXJzZXJSdWxlQ29udGV4dCkpIHtcblx0XHRpZih0LnJ1bGVJbmRleD09PWluZGV4KSB7XG5cdFx0XHRub2Rlcy5wdXNoKHQpO1xuXHRcdH1cblx0fVxuXHQvLyBjaGVjayBjaGlsZHJlblxuXHRmb3IodmFyIGk9MDtpPHQuZ2V0Q2hpbGRDb3VudCgpO2krKykge1xuXHRcdFRyZWVzLl9maW5kQWxsTm9kZXModC5nZXRDaGlsZChpKSwgaW5kZXgsIGZpbmRUb2tlbnMsIG5vZGVzKTtcblx0fVxufTtcblxuVHJlZXMuZGVzY2VuZGFudHMgPSBmdW5jdGlvbih0KSB7XG5cdHZhciBub2RlcyA9IFt0XTtcbiAgICBmb3IodmFyIGk9MDtpPHQuZ2V0Q2hpbGRDb3VudCgpO2krKykge1xuICAgICAgICBub2RlcyA9IG5vZGVzLmNvbmNhdChUcmVlcy5kZXNjZW5kYW50cyh0LmdldENoaWxkKGkpKSk7XG4gICAgfVxuICAgIHJldHVybiBub2Rlcztcbn07XG5cblxuZXhwb3J0cy5UcmVlcyA9IFRyZWVzOyIsIi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cblxudmFyIFRyZWUgPSByZXF1aXJlKCcuL1RyZWUnKTtcbmV4cG9ydHMuVHJlZXMgPSByZXF1aXJlKCcuL1RyZWVzJykuVHJlZXM7XG5leHBvcnRzLlJ1bGVOb2RlID0gVHJlZS5SdWxlTm9kZTtcbmV4cG9ydHMuUGFyc2VUcmVlTGlzdGVuZXIgPSBUcmVlLlBhcnNlVHJlZUxpc3RlbmVyO1xuZXhwb3J0cy5QYXJzZVRyZWVWaXNpdG9yID0gVHJlZS5QYXJzZVRyZWVWaXNpdG9yO1xuZXhwb3J0cy5QYXJzZVRyZWVXYWxrZXIgPSBUcmVlLlBhcnNlVHJlZVdhbGtlcjtcbiIsIiIsIi8qKlxuICogQGxpY2Vuc2UgQ29tcGxleC5qcyB2Mi4wLjExIDExLzAyLzIwMTZcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYsIFJvYmVydCBFaXNlbGUgKHJvYmVydEB4YXJnLm9yZylcbiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBvciBHUEwgVmVyc2lvbiAyIGxpY2Vuc2VzLlxuICoqL1xuXG4vKipcbiAqXG4gKiBUaGlzIGNsYXNzIGFsbG93cyB0aGUgbWFuaXB1bGF0aW9uIG9mIGNvbXBsZXggbnVtYmVycy5cbiAqIFlvdSBjYW4gcGFzcyBhIGNvbXBsZXggbnVtYmVyIGluIGRpZmZlcmVudCBmb3JtYXRzLiBFaXRoZXIgYXMgb2JqZWN0LCBkb3VibGUsIHN0cmluZyBvciB0d28gaW50ZWdlciBwYXJhbWV0ZXJzLlxuICpcbiAqIE9iamVjdCBmb3JtXG4gKiB7IHJlOiA8cmVhbD4sIGltOiA8aW1hZ2luYXJ5PiB9XG4gKiB7IGFyZzogPGFuZ2xlPiwgYWJzOiA8cmFkaXVzPiB9XG4gKiB7IHBoaTogPGFuZ2xlPiwgcjogPHJhZGl1cz4gfVxuICpcbiAqIEFycmF5IC8gVmVjdG9yIGZvcm1cbiAqIFsgcmVhbCwgaW1hZ2luYXJ5IF1cbiAqXG4gKiBEb3VibGUgZm9ybVxuICogOTkuMyAtIFNpbmdsZSBkb3VibGUgdmFsdWVcbiAqXG4gKiBTdHJpbmcgZm9ybVxuICogJzIzLjEzMzcnIC0gU2ltcGxlIHJlYWwgbnVtYmVyXG4gKiAnMTUrM2knIC0gYSBzaW1wbGUgY29tcGxleCBudW1iZXJcbiAqICczLWknIC0gYSBzaW1wbGUgY29tcGxleCBudW1iZXJcbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIHZhciBjID0gbmV3IENvbXBsZXgoJzk5LjMrOGknKTtcbiAqIGMubXVsKHtyOiAzLCBpOiA5fSkuZGl2KDQuOSkuc3ViKDMsIDIpO1xuICpcbiAqL1xuXG4oZnVuY3Rpb24ocm9vdCkge1xuXG4gICd1c2Ugc3RyaWN0JztcblxuICB2YXIgY29zaCA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gKE1hdGguZXhwKHgpICsgTWF0aC5leHAoLXgpKSAqIDAuNTtcbiAgfTtcblxuICB2YXIgc2luaCA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gKE1hdGguZXhwKHgpIC0gTWF0aC5leHAoLXgpKSAqIDAuNTtcbiAgfTtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyBjb3MoeCkgLSAxIHVzaW5nIFRheWxvciBzZXJpZXMgaWYgeCBpcyBzbWFsbC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHhcbiAgICogQHJldHVybnMge251bWJlcn0gY29zKHgpIC0gMVxuICAgKi9cblxuICB2YXIgY29zbTEgPSBmdW5jdGlvbih4KSB7XG4gICAgdmFyIGxpbWl0ID0gTWF0aC5QSS80O1xuICAgIGlmICh4IDwgLWxpbWl0IHx8IHggPiBsaW1pdCkge1xuICAgICAgcmV0dXJuIChNYXRoLmNvcyh4KSAtIDEuMCk7XG4gICAgfVxuXG4gICAgdmFyIHh4ID0geCAqIHg7XG4gICAgcmV0dXJuIHh4ICpcbiAgICAgICgtMC41ICsgeHggKlxuICAgICAgICAoMS8yNCArIHh4ICpcbiAgICAgICAgICAoLTEvNzIwICsgeHggKlxuICAgICAgICAgICAgKDEvNDAzMjAgKyB4eCAqXG4gICAgICAgICAgICAgICgtMS8zNjI4ODAwICsgeHggKlxuICAgICAgICAgICAgICAgICgxLzQ3OTAwMTQ2MDAgKyB4eCAqXG4gICAgICAgICAgICAgICAgICAoLTEvODcxNzgyOTEyMDAgKyB4eCAqXG4gICAgICAgICAgICAgICAgICAgICgxLzIwOTIyNzg5ODg4MDAwKVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICB9O1xuXG4gIHZhciBoeXBvdCA9IGZ1bmN0aW9uKHgsIHkpIHtcblxuICAgIHZhciBhID0gTWF0aC5hYnMoeCk7XG4gICAgdmFyIGIgPSBNYXRoLmFicyh5KTtcblxuICAgIGlmIChhIDwgMzAwMCAmJiBiIDwgMzAwMCkge1xuICAgICAgcmV0dXJuIE1hdGguc3FydChhICogYSArIGIgKiBiKTtcbiAgICB9XG5cbiAgICBpZiAoYSA8IGIpIHtcbiAgICAgIGEgPSBiO1xuICAgICAgYiA9IHggLyB5O1xuICAgIH0gZWxzZSB7XG4gICAgICBiID0geSAvIHg7XG4gICAgfVxuICAgIHJldHVybiBhICogTWF0aC5zcXJ0KDEgKyBiICogYik7XG4gIH07XG5cbiAgdmFyIHBhcnNlcl9leGl0ID0gZnVuY3Rpb24oKSB7XG4gICAgdGhyb3cgU3ludGF4RXJyb3IoJ0ludmFsaWQgUGFyYW0nKTtcbiAgfTtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyBsb2coc3FydChhXjIrYl4yKSkgaW4gYSB3YXkgdG8gYXZvaWQgb3ZlcmZsb3dzXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBiXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBmdW5jdGlvbiBsb2dIeXBvdChhLCBiKSB7XG5cbiAgICB2YXIgX2EgPSBNYXRoLmFicyhhKTtcbiAgICB2YXIgX2IgPSBNYXRoLmFicyhiKTtcblxuICAgIGlmIChhID09PSAwKSB7XG4gICAgICByZXR1cm4gTWF0aC5sb2coX2IpO1xuICAgIH1cblxuICAgIGlmIChiID09PSAwKSB7XG4gICAgICByZXR1cm4gTWF0aC5sb2coX2EpO1xuICAgIH1cblxuICAgIGlmIChfYSA8IDMwMDAgJiYgX2IgPCAzMDAwKSB7XG4gICAgICByZXR1cm4gTWF0aC5sb2coYSAqIGEgKyBiICogYikgKiAwLjU7XG4gICAgfVxuXG4gICAgLyogSSBnb3QgNCBpZGVhcyB0byBjb21wdXRlIHRoaXMgcHJvcGVydHkgd2l0aG91dCBvdmVyZmxvdzpcbiAgICAgKlxuICAgICAqIFRlc3RpbmcgMTAwMDAwMCB0aW1lcyB3aXRoIHJhbmRvbSBzYW1wbGVzIGZvciBhLGIg4oiIIFsxLCAxMDAwMDAwMDAwXSBhZ2FpbnN0IGEgYmlnIGRlY2ltYWwgbGlicmFyeSB0byBnZXQgYW4gZXJyb3IgZXN0aW1hdGVcbiAgICAgKlxuICAgICAqIDEuIE9ubHkgZWxpbWluYXRlIHRoZSBzcXVhcmUgcm9vdDogKE9WRVJBTEwgRVJST1I6IDMuOTEyMjQ4MzAzMDk1MTExNmUtMTEpXG5cbiAgICAgTWF0aC5sb2coYSAqIGEgKyBiICogYikgLyAyXG5cbiAgICAgKlxuICAgICAqXG4gICAgICogMi4gVHJ5IHRvIHVzZSB0aGUgbm9uLW92ZXJmbG93aW5nIHB5dGhhZ29yYXM6IChPVkVSQUxMIEVSUk9SOiA4Ljg4OTc2MDAzOTIxMDE1OWUtMTApXG5cbiAgICAgdmFyIGZuID0gZnVuY3Rpb24oYSwgYikge1xuICAgICBhID0gTWF0aC5hYnMoYSk7XG4gICAgIGIgPSBNYXRoLmFicyhiKTtcbiAgICAgdmFyIHQgPSBNYXRoLm1pbihhLCBiKTtcbiAgICAgYSA9IE1hdGgubWF4KGEsIGIpO1xuICAgICB0ID0gdCAvIGE7XG5cbiAgICAgcmV0dXJuIE1hdGgubG9nKGEpICsgTWF0aC5sb2coMSArIHQgKiB0KSAvIDI7XG4gICAgIH07XG5cbiAgICAgKiAzLiBBYnVzZSB0aGUgaWRlbnRpdHkgY29zKGF0YW4oeS94KSA9IHggLyBzcXJ0KHheMit5XjIpOiAoT1ZFUkFMTCBFUlJPUjogMy40NzgwMTc4NzM3MDM3MjA0ZS0xMClcblxuICAgICBNYXRoLmxvZyhhIC8gTWF0aC5jb3MoTWF0aC5hdGFuMihiLCBhKSkpXG5cbiAgICAgKiA0LiBVc2UgMy4gYW5kIGFwcGx5IGxvZyBydWxlczogKE9WRVJBTEwgRVJST1I6IDEuMjAxNDA4NzUwMjYyMDg5NmUtOSlcblxuICAgICBNYXRoLmxvZyhhKSAtIE1hdGgubG9nKE1hdGguY29zKE1hdGguYXRhbjIoYiwgYSkpKVxuXG4gICAgICovXG5cbiAgICByZXR1cm4gTWF0aC5sb2coYSAvIE1hdGguY29zKE1hdGguYXRhbjIoYiwgYSkpKTtcbiAgfVxuXG4gIHZhciBwYXJzZSA9IGZ1bmN0aW9uKGEsIGIpIHtcblxuICAgIHZhciB6ID0geydyZSc6IDAsICdpbSc6IDB9O1xuXG4gICAgaWYgKGEgPT09IHVuZGVmaW5lZCB8fCBhID09PSBudWxsKSB7XG4gICAgICB6WydyZSddID1cbiAgICAgICAgICAgICAgelsnaW0nXSA9IDA7XG4gICAgfSBlbHNlIGlmIChiICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHpbJ3JlJ10gPSBhO1xuICAgICAgelsnaW0nXSA9IGI7XG4gICAgfSBlbHNlXG4gICAgICBzd2l0Y2ggKHR5cGVvZiBhKSB7XG5cbiAgICAgICAgY2FzZSAnb2JqZWN0JzpcblxuICAgICAgICAgIGlmICgnaW0nIGluIGEgJiYgJ3JlJyBpbiBhKSB7XG4gICAgICAgICAgICB6WydyZSddID0gYVsncmUnXTtcbiAgICAgICAgICAgIHpbJ2ltJ10gPSBhWydpbSddO1xuICAgICAgICAgIH0gZWxzZSBpZiAoJ2FicycgaW4gYSAmJiAnYXJnJyBpbiBhKSB7XG4gICAgICAgICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShhWydhYnMnXSkgJiYgTnVtYmVyLmlzRmluaXRlKGFbJ2FyZyddKSkge1xuICAgICAgICAgICAgICByZXR1cm4gQ29tcGxleFsnSU5GSU5JVFknXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHpbJ3JlJ10gPSBhWydhYnMnXSAqIE1hdGguY29zKGFbJ2FyZyddKTtcbiAgICAgICAgICAgIHpbJ2ltJ10gPSBhWydhYnMnXSAqIE1hdGguc2luKGFbJ2FyZyddKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCdyJyBpbiBhICYmICdwaGknIGluIGEpIHtcbiAgICAgICAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKGFbJ3InXSkgJiYgTnVtYmVyLmlzRmluaXRlKGFbJ3BoaSddKSkge1xuICAgICAgICAgICAgICByZXR1cm4gQ29tcGxleFsnSU5GSU5JVFknXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHpbJ3JlJ10gPSBhWydyJ10gKiBNYXRoLmNvcyhhWydwaGknXSk7XG4gICAgICAgICAgICB6WydpbSddID0gYVsnciddICogTWF0aC5zaW4oYVsncGhpJ10pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYS5sZW5ndGggPT09IDIpIHsgLy8gUXVpY2sgYXJyYXkgY2hlY2tcbiAgICAgICAgICAgIHpbJ3JlJ10gPSBhWzBdO1xuICAgICAgICAgICAgelsnaW0nXSA9IGFbMV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcnNlcl9leGl0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3N0cmluZyc6XG5cbiAgICAgICAgICB6WydpbSddID0gLyogdm9pZCAqL1xuICAgICAgICAgICAgICAgICAgelsncmUnXSA9IDA7XG5cbiAgICAgICAgICB2YXIgdG9rZW5zID0gYS5tYXRjaCgvXFxkK1xcLj9cXGQqZVsrLV0/XFxkK3xcXGQrXFwuP1xcZCp8XFwuXFxkK3wuL2cpO1xuICAgICAgICAgIHZhciBwbHVzID0gMTtcbiAgICAgICAgICB2YXIgbWludXMgPSAwO1xuXG4gICAgICAgICAgaWYgKHRva2VucyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcGFyc2VyX2V4aXQoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuXG4gICAgICAgICAgICB2YXIgYyA9IHRva2Vuc1tpXTtcblxuICAgICAgICAgICAgaWYgKGMgPT09ICcgJyB8fCBjID09PSAnXFx0JyB8fCBjID09PSAnXFxuJykge1xuICAgICAgICAgICAgICAvKiB2b2lkICovXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09ICcrJykge1xuICAgICAgICAgICAgICBwbHVzKys7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09ICctJykge1xuICAgICAgICAgICAgICBtaW51cysrO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjID09PSAnaScgfHwgYyA9PT0gJ0knKSB7XG5cbiAgICAgICAgICAgICAgaWYgKHBsdXMgKyBtaW51cyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHBhcnNlcl9leGl0KCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodG9rZW5zW2kgKyAxXSAhPT0gJyAnICYmICFpc05hTih0b2tlbnNbaSArIDFdKSkge1xuICAgICAgICAgICAgICAgIHpbJ2ltJ10gKz0gcGFyc2VGbG9hdCgobWludXMgJSAyID8gJy0nIDogJycpICsgdG9rZW5zW2kgKyAxXSk7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHpbJ2ltJ10gKz0gcGFyc2VGbG9hdCgobWludXMgJSAyID8gJy0nIDogJycpICsgJzEnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBwbHVzID0gbWludXMgPSAwO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICAgIGlmIChwbHVzICsgbWludXMgPT09IDAgfHwgaXNOYU4oYykpIHtcbiAgICAgICAgICAgICAgICBwYXJzZXJfZXhpdCgpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHRva2Vuc1tpICsgMV0gPT09ICdpJyB8fCB0b2tlbnNbaSArIDFdID09PSAnSScpIHtcbiAgICAgICAgICAgICAgICB6WydpbSddICs9IHBhcnNlRmxvYXQoKG1pbnVzICUgMiA/ICctJyA6ICcnKSArIGMpO1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB6WydyZSddICs9IHBhcnNlRmxvYXQoKG1pbnVzICUgMiA/ICctJyA6ICcnKSArIGMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHBsdXMgPSBtaW51cyA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gU3RpbGwgc29tZXRoaW5nIG9uIHRoZSBzdGFja1xuICAgICAgICAgIGlmIChwbHVzICsgbWludXMgPiAwKSB7XG4gICAgICAgICAgICBwYXJzZXJfZXhpdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICAgIHpbJ2ltJ10gPSAwO1xuICAgICAgICAgIHpbJ3JlJ10gPSBhO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcGFyc2VyX2V4aXQoKTtcbiAgICAgIH1cblxuICAgIGlmIChpc05hTih6WydyZSddKSB8fCBpc05hTih6WydpbSddKSkge1xuICAgICAgLy8gSWYgYSBjYWxjdWxhdGlvbiBpcyBOYU4sIHdlIHRyZWF0IGl0IGFzIE5hTiBhbmQgZG9uJ3QgdGhyb3dcbiAgICAgIC8vcGFyc2VyX2V4aXQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gejtcbiAgfTtcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgKi9cbiAgZnVuY3Rpb24gQ29tcGxleChhLCBiKSB7XG5cbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQ29tcGxleCkpIHtcbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChhLCBiKTtcbiAgICB9XG5cbiAgICB2YXIgeiA9IHBhcnNlKGEsIGIpO1xuXG4gICAgdGhpc1sncmUnXSA9IHpbJ3JlJ107XG4gICAgdGhpc1snaW0nXSA9IHpbJ2ltJ107XG4gIH1cblxuICBDb21wbGV4LnByb3RvdHlwZSA9IHtcblxuICAgICdyZSc6IDAsXG4gICAgJ2ltJzogMCxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZXMgdGhlIHNpZ24gb2YgYSBjb21wbGV4IG51bWJlciwgd2hpY2ggaXMgYSBub3JtYWxpemVkIGNvbXBsZXhcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdzaWduJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIHZhciBhYnMgPSB0aGlzWydhYnMnXSgpO1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIHRoaXNbJ3JlJ10gLyBhYnMsXG4gICAgICAgICAgICAgIHRoaXNbJ2ltJ10gLyBhYnMpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBBZGRzIHR3byBjb21wbGV4IG51bWJlcnNcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdhZGQnOiBmdW5jdGlvbihhLCBiKSB7XG5cbiAgICAgIHZhciB6ID0gbmV3IENvbXBsZXgoYSwgYik7XG5cbiAgICAgIC8vIEluZmluaXR5ICsgSW5maW5pdHkgPSBOYU5cbiAgICAgIGlmICh0aGlzWydpc0luZmluaXRlJ10oKSAmJiB6Wydpc0luZmluaXRlJ10oKSkge1xuICAgICAgICByZXR1cm4gQ29tcGxleFsnTkFOJ107XG4gICAgICB9XG5cbiAgICAgIC8vIEluZmluaXR5ICsgeiA9IEluZmluaXR5IHsgd2hlcmUgeiAhPSBJbmZpbml0eSB9XG4gICAgICBpZiAodGhpc1snaXNJbmZpbml0ZSddKCkgfHwgelsnaXNJbmZpbml0ZSddKCkpIHtcbiAgICAgICAgcmV0dXJuIENvbXBsZXhbJ0lORklOSVRZJ107XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgdGhpc1sncmUnXSArIHpbJ3JlJ10sXG4gICAgICAgICAgICAgIHRoaXNbJ2ltJ10gKyB6WydpbSddKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU3VidHJhY3RzIHR3byBjb21wbGV4IG51bWJlcnNcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdzdWInOiBmdW5jdGlvbihhLCBiKSB7XG5cbiAgICAgIHZhciB6ID0gbmV3IENvbXBsZXgoYSwgYik7XG5cbiAgICAgIC8vIEluZmluaXR5IC0gSW5maW5pdHkgPSBOYU5cbiAgICAgIGlmICh0aGlzWydpc0luZmluaXRlJ10oKSAmJiB6Wydpc0luZmluaXRlJ10oKSkge1xuICAgICAgICByZXR1cm4gQ29tcGxleFsnTkFOJ107XG4gICAgICB9XG5cbiAgICAgIC8vIEluZmluaXR5IC0geiA9IEluZmluaXR5IHsgd2hlcmUgeiAhPSBJbmZpbml0eSB9XG4gICAgICBpZiAodGhpc1snaXNJbmZpbml0ZSddKCkgfHwgelsnaXNJbmZpbml0ZSddKCkpIHtcbiAgICAgICAgcmV0dXJuIENvbXBsZXhbJ0lORklOSVRZJ107XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgdGhpc1sncmUnXSAtIHpbJ3JlJ10sXG4gICAgICAgICAgICAgIHRoaXNbJ2ltJ10gLSB6WydpbSddKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTXVsdGlwbGllcyB0d28gY29tcGxleCBudW1iZXJzXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnbXVsJzogZnVuY3Rpb24oYSwgYikge1xuXG4gICAgICB2YXIgeiA9IG5ldyBDb21wbGV4KGEsIGIpO1xuXG4gICAgICAvLyBJbmZpbml0eSAqIDAgPSBOYU5cbiAgICAgIGlmICgodGhpc1snaXNJbmZpbml0ZSddKCkgJiYgelsnaXNaZXJvJ10oKSkgfHwgKHRoaXNbJ2lzWmVybyddKCkgJiYgelsnaXNJbmZpbml0ZSddKCkpKSB7XG4gICAgICAgIHJldHVybiBDb21wbGV4WydOQU4nXTtcbiAgICAgIH1cblxuICAgICAgLy8gSW5maW5pdHkgKiB6ID0gSW5maW5pdHkgeyB3aGVyZSB6ICE9IDAgfVxuICAgICAgaWYgKHRoaXNbJ2lzSW5maW5pdGUnXSgpIHx8IHpbJ2lzSW5maW5pdGUnXSgpKSB7XG4gICAgICAgIHJldHVybiBDb21wbGV4WydJTkZJTklUWSddO1xuICAgICAgfVxuXG4gICAgICAvLyBTaG9ydCBjaXJjdWl0IGZvciByZWFsIHZhbHVlc1xuICAgICAgaWYgKHpbJ2ltJ10gPT09IDAgJiYgdGhpc1snaW0nXSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgodGhpc1sncmUnXSAqIHpbJ3JlJ10sIDApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIHRoaXNbJ3JlJ10gKiB6WydyZSddIC0gdGhpc1snaW0nXSAqIHpbJ2ltJ10sXG4gICAgICAgICAgICAgIHRoaXNbJ3JlJ10gKiB6WydpbSddICsgdGhpc1snaW0nXSAqIHpbJ3JlJ10pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBEaXZpZGVzIHR3byBjb21wbGV4IG51bWJlcnNcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdkaXYnOiBmdW5jdGlvbihhLCBiKSB7XG5cbiAgICAgIHZhciB6ID0gbmV3IENvbXBsZXgoYSwgYik7XG5cbiAgICAgIC8vIDAgLyAwID0gTmFOIGFuZCBJbmZpbml0eSAvIEluZmluaXR5ID0gTmFOXG4gICAgICBpZiAoKHRoaXNbJ2lzWmVybyddKCkgJiYgelsnaXNaZXJvJ10oKSkgfHwgKHRoaXNbJ2lzSW5maW5pdGUnXSgpICYmIHpbJ2lzSW5maW5pdGUnXSgpKSkge1xuICAgICAgICByZXR1cm4gQ29tcGxleFsnTkFOJ107XG4gICAgICB9XG5cbiAgICAgIC8vIEluZmluaXR5IC8gMCA9IEluZmluaXR5XG4gICAgICBpZiAodGhpc1snaXNJbmZpbml0ZSddKCkgfHwgelsnaXNaZXJvJ10oKSkge1xuICAgICAgICByZXR1cm4gQ29tcGxleFsnSU5GSU5JVFknXTtcbiAgICAgIH1cblxuICAgICAgLy8gMCAvIEluZmluaXR5ID0gMFxuICAgICAgaWYgKHRoaXNbJ2lzWmVybyddKCkgfHwgelsnaXNJbmZpbml0ZSddKCkpIHtcbiAgICAgICAgcmV0dXJuIENvbXBsZXhbJ1pFUk8nXTtcbiAgICAgIH1cblxuICAgICAgYSA9IHRoaXNbJ3JlJ107XG4gICAgICBiID0gdGhpc1snaW0nXTtcblxuICAgICAgdmFyIGMgPSB6WydyZSddO1xuICAgICAgdmFyIGQgPSB6WydpbSddO1xuICAgICAgdmFyIHQsIHg7XG5cbiAgICAgIGlmICgwID09PSBkKSB7XG4gICAgICAgIC8vIERpdmlzb3IgaXMgcmVhbFxuICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoYSAvIGMsIGIgLyBjKTtcbiAgICAgIH1cblxuICAgICAgaWYgKE1hdGguYWJzKGMpIDwgTWF0aC5hYnMoZCkpIHtcblxuICAgICAgICB4ID0gYyAvIGQ7XG4gICAgICAgIHQgPSBjICogeCArIGQ7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICAgIChhICogeCArIGIpIC8gdCxcbiAgICAgICAgICAgICAgICAoYiAqIHggLSBhKSAvIHQpO1xuXG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIHggPSBkIC8gYztcbiAgICAgICAgdCA9IGQgKiB4ICsgYztcblxuICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgICAgKGEgKyBiICogeCkgLyB0LFxuICAgICAgICAgICAgICAgIChiIC0gYSAqIHgpIC8gdCk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgcG93ZXIgb2YgdHdvIGNvbXBsZXggbnVtYmVyc1xuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ3Bvdyc6IGZ1bmN0aW9uKGEsIGIpIHtcblxuICAgICAgdmFyIHogPSBuZXcgQ29tcGxleChhLCBiKTtcblxuICAgICAgYSA9IHRoaXNbJ3JlJ107XG4gICAgICBiID0gdGhpc1snaW0nXTtcblxuICAgICAgaWYgKHpbJ2lzWmVybyddKCkpIHtcbiAgICAgICAgcmV0dXJuIENvbXBsZXhbJ09ORSddO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGUgZXhwb25lbnQgaXMgcmVhbFxuICAgICAgaWYgKHpbJ2ltJ10gPT09IDApIHtcblxuICAgICAgICBpZiAoYiA9PT0gMCAmJiBhID49IDApIHtcblxuICAgICAgICAgIHJldHVybiBuZXcgQ29tcGxleChNYXRoLnBvdyhhLCB6WydyZSddKSwgMCk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChhID09PSAwKSB7IC8vIElmIGJhc2UgaXMgZnVsbHkgaW1hZ2luYXJ5XG5cbiAgICAgICAgICBzd2l0Y2ggKCh6WydyZSddICUgNCArIDQpICUgNCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoTWF0aC5wb3coYiwgelsncmUnXSksIDApO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoMCwgTWF0aC5wb3coYiwgelsncmUnXSkpO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoLU1hdGgucG93KGIsIHpbJ3JlJ10pLCAwKTtcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KDAsIC1NYXRoLnBvdyhiLCB6WydyZSddKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8qIEkgY291bGRuJ3QgZmluZCBhIGdvb2QgZm9ybXVsYSwgc28gaGVyZSBpcyBhIGRlcml2YXRpb24gYW5kIG9wdGltaXphdGlvblxuICAgICAgICpcbiAgICAgICAqIHpfMV56XzIgPSAoYSArIGJpKV4oYyArIGRpKVxuICAgICAgICogICAgICAgICA9IGV4cCgoYyArIGRpKSAqIGxvZyhhICsgYmkpXG4gICAgICAgKiAgICAgICAgID0gcG93KGFeMiArIGJeMiwgKGMgKyBkaSkgLyAyKSAqIGV4cChpKGMgKyBkaSlhdGFuMihiLCBhKSlcbiAgICAgICAqID0+Li4uXG4gICAgICAgKiBSZSA9IChwb3coYV4yICsgYl4yLCBjIC8gMikgKiBleHAoLWQgKiBhdGFuMihiLCBhKSkpICogY29zKGQgKiBsb2coYV4yICsgYl4yKSAvIDIgKyBjICogYXRhbjIoYiwgYSkpXG4gICAgICAgKiBJbSA9IChwb3coYV4yICsgYl4yLCBjIC8gMikgKiBleHAoLWQgKiBhdGFuMihiLCBhKSkpICogc2luKGQgKiBsb2coYV4yICsgYl4yKSAvIDIgKyBjICogYXRhbjIoYiwgYSkpXG4gICAgICAgKlxuICAgICAgICogPT4uLi5cbiAgICAgICAqIFJlID0gZXhwKGMgKiBsb2coc3FydChhXjIgKyBiXjIpKSAtIGQgKiBhdGFuMihiLCBhKSkgKiBjb3MoZCAqIGxvZyhzcXJ0KGFeMiArIGJeMikpICsgYyAqIGF0YW4yKGIsIGEpKVxuICAgICAgICogSW0gPSBleHAoYyAqIGxvZyhzcXJ0KGFeMiArIGJeMikpIC0gZCAqIGF0YW4yKGIsIGEpKSAqIHNpbihkICogbG9nKHNxcnQoYV4yICsgYl4yKSkgKyBjICogYXRhbjIoYiwgYSkpXG4gICAgICAgKlxuICAgICAgICogPT5cbiAgICAgICAqIFJlID0gZXhwKGMgKiBsb2dzcTIgLSBkICogYXJnKHpfMSkpICogY29zKGQgKiBsb2dzcTIgKyBjICogYXJnKHpfMSkpXG4gICAgICAgKiBJbSA9IGV4cChjICogbG9nc3EyIC0gZCAqIGFyZyh6XzEpKSAqIHNpbihkICogbG9nc3EyICsgYyAqIGFyZyh6XzEpKVxuICAgICAgICpcbiAgICAgICAqL1xuXG4gICAgICBpZiAoYSA9PT0gMCAmJiBiID09PSAwICYmIHpbJ3JlJ10gPiAwICYmIHpbJ2ltJ10gPj0gMCkge1xuICAgICAgICByZXR1cm4gQ29tcGxleFsnWkVSTyddO1xuICAgICAgfVxuXG4gICAgICB2YXIgYXJnID0gTWF0aC5hdGFuMihiLCBhKTtcbiAgICAgIHZhciBsb2ggPSBsb2dIeXBvdChhLCBiKTtcblxuICAgICAgYSA9IE1hdGguZXhwKHpbJ3JlJ10gKiBsb2ggLSB6WydpbSddICogYXJnKTtcbiAgICAgIGIgPSB6WydpbSddICogbG9oICsgelsncmUnXSAqIGFyZztcbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgYSAqIE1hdGguY29zKGIpLFxuICAgICAgICAgICAgICBhICogTWF0aC5zaW4oYikpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGNvbXBsZXggc3F1YXJlIHJvb3RcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdzcXJ0JzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIHZhciBhID0gdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gdGhpc1snaW0nXTtcbiAgICAgIHZhciByID0gdGhpc1snYWJzJ10oKTtcblxuICAgICAgdmFyIHJlLCBpbTtcblxuICAgICAgaWYgKGEgPj0gMCkge1xuXG4gICAgICAgIGlmIChiID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KE1hdGguc3FydChhKSwgMCk7XG4gICAgICAgIH1cblxuICAgICAgICByZSA9IDAuNSAqIE1hdGguc3FydCgyLjAgKiAociArIGEpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlID0gTWF0aC5hYnMoYikgLyBNYXRoLnNxcnQoMiAqIChyIC0gYSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoYSA8PSAwKSB7XG4gICAgICAgIGltID0gMC41ICogTWF0aC5zcXJ0KDIuMCAqIChyIC0gYSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW0gPSBNYXRoLmFicyhiKSAvIE1hdGguc3FydCgyICogKHIgKyBhKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChyZSwgYiA8IDAgPyAtaW0gOiBpbSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBleHBvbmVudFxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2V4cCc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICB2YXIgdG1wID0gTWF0aC5leHAodGhpc1sncmUnXSk7XG5cbiAgICAgIGlmICh0aGlzWydpbSddID09PSAwKSB7XG4gICAgICAgIC8vcmV0dXJuIG5ldyBDb21wbGV4KHRtcCwgMCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIHRtcCAqIE1hdGguY29zKHRoaXNbJ2ltJ10pLFxuICAgICAgICAgICAgICB0bXAgKiBNYXRoLnNpbih0aGlzWydpbSddKSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBleHBvbmVudCBhbmQgc3VidHJhY3RzIG9uZS5cbiAgICAgKlxuICAgICAqIFRoaXMgbWF5IGJlIG1vcmUgYWNjdXJhdGUgdGhhbiBgQ29tcGxleCh4KS5leHAoKS5zdWIoMSlgIGlmXG4gICAgICogYHhgIGlzIHNtYWxsLlxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2V4cG0xJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIC8qKlxuICAgICAgICogZXhwKGEgKyBpKmIpIC0gMVxuICAgICAgID0gZXhwKGEpICogKGNvcyhiKSArIGoqc2luKGIpKSAtIDFcbiAgICAgICA9IGV4cG0xKGEpKmNvcyhiKSArIGNvc20xKGIpICsgaipleHAoYSkqc2luKGIpXG4gICAgICAgKi9cblxuICAgICAgdmFyIGEgPSB0aGlzWydyZSddO1xuICAgICAgdmFyIGIgPSB0aGlzWydpbSddO1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIE1hdGguZXhwbTEoYSkgKiBNYXRoLmNvcyhiKSArIGNvc20xKGIpLFxuICAgICAgICAgICAgICBNYXRoLmV4cChhKSAqIE1hdGguc2luKGIpKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBuYXR1cmFsIGxvZ1xuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2xvZyc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107XG5cbiAgICAgIGlmIChiID09PSAwICYmIGEgPiAwKSB7XG4gICAgICAgIC8vcmV0dXJuIG5ldyBDb21wbGV4KE1hdGgubG9nKGEpLCAwKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICBsb2dIeXBvdChhLCBiKSxcbiAgICAgICAgICAgICAgTWF0aC5hdGFuMihiLCBhKSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgbWFnbml0dWRlIG9mIHRoZSBjb21wbGV4IG51bWJlclxuICAgICAqXG4gICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAgKi9cbiAgICAnYWJzJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIHJldHVybiBoeXBvdCh0aGlzWydyZSddLCB0aGlzWydpbSddKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBhbmdsZSBvZiB0aGUgY29tcGxleCBudW1iZXJcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAgICovXG4gICAgJ2FyZyc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICByZXR1cm4gTWF0aC5hdGFuMih0aGlzWydpbSddLCB0aGlzWydyZSddKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBzaW5lIG9mIHRoZSBjb21wbGV4IG51bWJlclxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ3Npbic6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBzaW4oYykgPSAoZV5iIC0gZV4oLWIpKSAvICgyaSlcblxuICAgICAgdmFyIGEgPSB0aGlzWydyZSddO1xuICAgICAgdmFyIGIgPSB0aGlzWydpbSddO1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIE1hdGguc2luKGEpICogY29zaChiKSxcbiAgICAgICAgICAgICAgTWF0aC5jb3MoYSkgKiBzaW5oKGIpKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb3NpbmVcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdjb3MnOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gY29zKHopID0gKGVeYiArIGVeKC1iKSkgLyAyXG5cbiAgICAgIHZhciBhID0gdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gdGhpc1snaW0nXTtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICBNYXRoLmNvcyhhKSAqIGNvc2goYiksXG4gICAgICAgICAgICAgIC1NYXRoLnNpbihhKSAqIHNpbmgoYikpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIHRhbmdlbnRcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICd0YW4nOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gdGFuKGMpID0gKGVeKGNpKSAtIGVeKC1jaSkpIC8gKGkoZV4oY2kpICsgZV4oLWNpKSkpXG5cbiAgICAgIHZhciBhID0gMiAqIHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IDIgKiB0aGlzWydpbSddO1xuICAgICAgdmFyIGQgPSBNYXRoLmNvcyhhKSArIGNvc2goYik7XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgTWF0aC5zaW4oYSkgLyBkLFxuICAgICAgICAgICAgICBzaW5oKGIpIC8gZCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY290YW5nZW50XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnY290JzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIC8vIGNvdChjKSA9IGkoZV4oY2kpICsgZV4oLWNpKSkgLyAoZV4oY2kpIC0gZV4oLWNpKSlcblxuICAgICAgdmFyIGEgPSAyICogdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gMiAqIHRoaXNbJ2ltJ107XG4gICAgICB2YXIgZCA9IE1hdGguY29zKGEpIC0gY29zaChiKTtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICAtTWF0aC5zaW4oYSkgLyBkLFxuICAgICAgICAgICAgICBzaW5oKGIpIC8gZCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgc2VjYW50XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnc2VjJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIC8vIHNlYyhjKSA9IDIgLyAoZV4oY2kpICsgZV4oLWNpKSlcblxuICAgICAgdmFyIGEgPSB0aGlzWydyZSddO1xuICAgICAgdmFyIGIgPSB0aGlzWydpbSddO1xuICAgICAgdmFyIGQgPSAwLjUgKiBjb3NoKDIgKiBiKSArIDAuNSAqIE1hdGguY29zKDIgKiBhKTtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICBNYXRoLmNvcyhhKSAqIGNvc2goYikgLyBkLFxuICAgICAgICAgICAgICBNYXRoLnNpbihhKSAqIHNpbmgoYikgLyBkKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb3NlY2Fuc1xuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2NzYyc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBjc2MoYykgPSAyaSAvIChlXihjaSkgLSBlXigtY2kpKVxuXG4gICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107XG4gICAgICB2YXIgZCA9IDAuNSAqIGNvc2goMiAqIGIpIC0gMC41ICogTWF0aC5jb3MoMiAqIGEpO1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIE1hdGguc2luKGEpICogY29zaChiKSAvIGQsXG4gICAgICAgICAgICAgIC1NYXRoLmNvcyhhKSAqIHNpbmgoYikgLyBkKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IGFyY3VzIHNpbnVzXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnYXNpbic6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBhc2luKGMpID0gLWkgKiBsb2coY2kgKyBzcXJ0KDEgLSBjXjIpKVxuXG4gICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107XG5cbiAgICAgIHZhciB0MSA9IG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICBiICogYiAtIGEgKiBhICsgMSxcbiAgICAgICAgICAgICAgLTIgKiBhICogYilbJ3NxcnQnXSgpO1xuXG4gICAgICB2YXIgdDIgPSBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgdDFbJ3JlJ10gLSBiLFxuICAgICAgICAgICAgICB0MVsnaW0nXSArIGEpWydsb2cnXSgpO1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgodDJbJ2ltJ10sIC10MlsncmUnXSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBhcmN1cyBjb3NpbnVzXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnYWNvcyc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBhY29zKGMpID0gaSAqIGxvZyhjIC0gaSAqIHNxcnQoMSAtIGNeMikpXG5cbiAgICAgIHZhciBhID0gdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gdGhpc1snaW0nXTtcblxuICAgICAgdmFyIHQxID0gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIGIgKiBiIC0gYSAqIGEgKyAxLFxuICAgICAgICAgICAgICAtMiAqIGEgKiBiKVsnc3FydCddKCk7XG5cbiAgICAgIHZhciB0MiA9IG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICB0MVsncmUnXSAtIGIsXG4gICAgICAgICAgICAgIHQxWydpbSddICsgYSlbJ2xvZyddKCk7XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChNYXRoLlBJIC8gMiAtIHQyWydpbSddLCB0MlsncmUnXSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBhcmN1cyB0YW5nZW50XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnYXRhbic6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBhdGFuKGMpID0gaSAvIDIgbG9nKChpICsgeCkgLyAoaSAtIHgpKVxuXG4gICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107XG5cbiAgICAgIGlmIChhID09PSAwKSB7XG5cbiAgICAgICAgaWYgKGIgPT09IDEpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoMCwgSW5maW5pdHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGIgPT09IC0xKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KDAsIC1JbmZpbml0eSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGQgPSBhICogYSArICgxLjAgLSBiKSAqICgxLjAgLSBiKTtcblxuICAgICAgdmFyIHQxID0gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgICgxIC0gYiAqIGIgLSBhICogYSkgLyBkLFxuICAgICAgICAgICAgICAtMiAqIGEgLyBkKS5sb2coKTtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KC0wLjUgKiB0MVsnaW0nXSwgMC41ICogdDFbJ3JlJ10pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGNvbXBsZXggYXJjdXMgY290YW5nZW50XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnYWNvdCc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBhY290KGMpID0gaSAvIDIgbG9nKChjIC0gaSkgLyAoYyArIGkpKVxuXG4gICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107XG5cbiAgICAgIGlmIChiID09PSAwKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29tcGxleChNYXRoLmF0YW4yKDEsIGEpLCAwKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGQgPSBhICogYSArIGIgKiBiO1xuICAgICAgcmV0dXJuIChkICE9PSAwKVxuICAgICAgICAgICAgICA/IG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICAgICAgICAgIGEgLyBkLFxuICAgICAgICAgICAgICAgICAgICAgIC1iIC8gZCkuYXRhbigpXG4gICAgICAgICAgICAgIDogbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgICAgICAgICAgKGEgIT09IDApID8gYSAvIDAgOiAwLFxuICAgICAgICAgICAgICAgICAgICAgIChiICE9PSAwKSA/IC1iIC8gMCA6IDApLmF0YW4oKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IGFyY3VzIHNlY2FudFxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2FzZWMnOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gYXNlYyhjKSA9IC1pICogbG9nKDEgLyBjICsgc3FydCgxIC0gaSAvIGNeMikpXG5cbiAgICAgIHZhciBhID0gdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gdGhpc1snaW0nXTtcblxuICAgICAgaWYgKGEgPT09IDAgJiYgYiA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoMCwgSW5maW5pdHkpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZCA9IGEgKiBhICsgYiAqIGI7XG4gICAgICByZXR1cm4gKGQgIT09IDApXG4gICAgICAgICAgICAgID8gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgICAgICAgICAgYSAvIGQsXG4gICAgICAgICAgICAgICAgICAgICAgLWIgLyBkKS5hY29zKClcbiAgICAgICAgICAgICAgOiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgICAgICAgICAoYSAhPT0gMCkgPyBhIC8gMCA6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgKGIgIT09IDApID8gLWIgLyAwIDogMCkuYWNvcygpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGNvbXBsZXggYXJjdXMgY29zZWNhbnNcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdhY3NjJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIC8vIGFjc2MoYykgPSAtaSAqIGxvZyhpIC8gYyArIHNxcnQoMSAtIDEgLyBjXjIpKVxuXG4gICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107XG5cbiAgICAgIGlmIChhID09PSAwICYmIGIgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KE1hdGguUEkgLyAyLCBJbmZpbml0eSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBkID0gYSAqIGEgKyBiICogYjtcbiAgICAgIHJldHVybiAoZCAhPT0gMClcbiAgICAgICAgICAgICAgPyBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgICAgICAgICBhIC8gZCxcbiAgICAgICAgICAgICAgICAgICAgICAtYiAvIGQpLmFzaW4oKVxuICAgICAgICAgICAgICA6IG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICAgICAgICAgIChhICE9PSAwKSA/IGEgLyAwIDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAoYiAhPT0gMCkgPyAtYiAvIDAgOiAwKS5hc2luKCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBzaW5oXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnc2luaCc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBzaW5oKGMpID0gKGVeYyAtIGVeLWMpIC8gMlxuXG4gICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgc2luaChhKSAqIE1hdGguY29zKGIpLFxuICAgICAgICAgICAgICBjb3NoKGEpICogTWF0aC5zaW4oYikpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGNvbXBsZXggY29zaFxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2Nvc2gnOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gY29zaChjKSA9IChlXmMgKyBlXi1jKSAvIDJcblxuICAgICAgdmFyIGEgPSB0aGlzWydyZSddO1xuICAgICAgdmFyIGIgPSB0aGlzWydpbSddO1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIGNvc2goYSkgKiBNYXRoLmNvcyhiKSxcbiAgICAgICAgICAgICAgc2luaChhKSAqIE1hdGguc2luKGIpKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IHRhbmhcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICd0YW5oJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIC8vIHRhbmgoYykgPSAoZV5jIC0gZV4tYykgLyAoZV5jICsgZV4tYylcblxuICAgICAgdmFyIGEgPSAyICogdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gMiAqIHRoaXNbJ2ltJ107XG4gICAgICB2YXIgZCA9IGNvc2goYSkgKyBNYXRoLmNvcyhiKTtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICBzaW5oKGEpIC8gZCxcbiAgICAgICAgICAgICAgTWF0aC5zaW4oYikgLyBkKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IGNvdGhcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdjb3RoJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIC8vIGNvdGgoYykgPSAoZV5jICsgZV4tYykgLyAoZV5jIC0gZV4tYylcblxuICAgICAgdmFyIGEgPSAyICogdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gMiAqIHRoaXNbJ2ltJ107XG4gICAgICB2YXIgZCA9IGNvc2goYSkgLSBNYXRoLmNvcyhiKTtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICBzaW5oKGEpIC8gZCxcbiAgICAgICAgICAgICAgLU1hdGguc2luKGIpIC8gZCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBjb3RoXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnY3NjaCc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBjc2NoKGMpID0gMiAvIChlXmMgLSBlXi1jKVxuXG4gICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107XG4gICAgICB2YXIgZCA9IE1hdGguY29zKDIgKiBiKSAtIGNvc2goMiAqIGEpO1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIC0yICogc2luaChhKSAqIE1hdGguY29zKGIpIC8gZCxcbiAgICAgICAgICAgICAgMiAqIGNvc2goYSkgKiBNYXRoLnNpbihiKSAvIGQpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGNvbXBsZXggc2VjaFxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ3NlY2gnOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gc2VjaChjKSA9IDIgLyAoZV5jICsgZV4tYylcblxuICAgICAgdmFyIGEgPSB0aGlzWydyZSddO1xuICAgICAgdmFyIGIgPSB0aGlzWydpbSddO1xuICAgICAgdmFyIGQgPSBNYXRoLmNvcygyICogYikgKyBjb3NoKDIgKiBhKTtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICAyICogY29zaChhKSAqIE1hdGguY29zKGIpIC8gZCxcbiAgICAgICAgICAgICAgLTIgKiBzaW5oKGEpICogTWF0aC5zaW4oYikgLyBkKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IGFzaW5oXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnYXNpbmgnOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gYXNpbmgoYykgPSBsb2coYyArIHNxcnQoY14yICsgMSkpXG5cbiAgICAgIHZhciB0bXAgPSB0aGlzWydpbSddO1xuICAgICAgdGhpc1snaW0nXSA9IC10aGlzWydyZSddO1xuICAgICAgdGhpc1sncmUnXSA9IHRtcDtcbiAgICAgIHZhciByZXMgPSB0aGlzWydhc2luJ10oKTtcblxuICAgICAgdGhpc1sncmUnXSA9IC10aGlzWydpbSddO1xuICAgICAgdGhpc1snaW0nXSA9IHRtcDtcbiAgICAgIHRtcCA9IHJlc1sncmUnXTtcblxuICAgICAgcmVzWydyZSddID0gLXJlc1snaW0nXTtcbiAgICAgIHJlc1snaW0nXSA9IHRtcDtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBhc2luaFxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2Fjb3NoJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIC8vIGFjb3NoKGMpID0gbG9nKGMgKyBzcXJ0KGNeMiAtIDEpKVxuXG4gICAgICB2YXIgcmVzID0gdGhpc1snYWNvcyddKCk7XG4gICAgICBpZiAocmVzWydpbSddIDw9IDApIHtcbiAgICAgICAgdmFyIHRtcCA9IHJlc1sncmUnXTtcbiAgICAgICAgcmVzWydyZSddID0gLXJlc1snaW0nXTtcbiAgICAgICAgcmVzWydpbSddID0gdG1wO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHRtcCA9IHJlc1snaW0nXTtcbiAgICAgICAgcmVzWydpbSddID0gLXJlc1sncmUnXTtcbiAgICAgICAgcmVzWydyZSddID0gdG1wO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IGF0YW5oXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnYXRhbmgnOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gYXRhbmgoYykgPSBsb2coKDErYykgLyAoMS1jKSkgLyAyXG5cbiAgICAgIHZhciBhID0gdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gdGhpc1snaW0nXTtcblxuICAgICAgdmFyIG5vSU0gPSBhID4gMSAmJiBiID09PSAwO1xuICAgICAgdmFyIG9uZU1pbnVzID0gMSAtIGE7XG4gICAgICB2YXIgb25lUGx1cyA9IDEgKyBhO1xuICAgICAgdmFyIGQgPSBvbmVNaW51cyAqIG9uZU1pbnVzICsgYiAqIGI7XG5cbiAgICAgIHZhciB4ID0gKGQgIT09IDApXG4gICAgICAgICAgICAgID8gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgICAgICAgICAgKG9uZVBsdXMgKiBvbmVNaW51cyAtIGIgKiBiKSAvIGQsXG4gICAgICAgICAgICAgICAgICAgICAgKGIgKiBvbmVNaW51cyArIG9uZVBsdXMgKiBiKSAvIGQpXG4gICAgICAgICAgICAgIDogbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgICAgICAgICAgKGEgIT09IC0xKSA/IChhIC8gMCkgOiAwLFxuICAgICAgICAgICAgICAgICAgICAgIChiICE9PSAwKSA/IChiIC8gMCkgOiAwKTtcblxuICAgICAgdmFyIHRlbXAgPSB4WydyZSddO1xuICAgICAgeFsncmUnXSA9IGxvZ0h5cG90KHhbJ3JlJ10sIHhbJ2ltJ10pIC8gMjtcbiAgICAgIHhbJ2ltJ10gPSBNYXRoLmF0YW4yKHhbJ2ltJ10sIHRlbXApIC8gMjtcbiAgICAgIGlmIChub0lNKSB7XG4gICAgICAgIHhbJ2ltJ10gPSAteFsnaW0nXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB4O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGNvbXBsZXggYWNvdGhcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdhY290aCc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBhY290aChjKSA9IGxvZygoYysxKSAvIChjLTEpKSAvIDJcblxuICAgICAgdmFyIGEgPSB0aGlzWydyZSddO1xuICAgICAgdmFyIGIgPSB0aGlzWydpbSddO1xuXG4gICAgICBpZiAoYSA9PT0gMCAmJiBiID09PSAwKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29tcGxleCgwLCBNYXRoLlBJIC8gMik7XG4gICAgICB9XG5cbiAgICAgIHZhciBkID0gYSAqIGEgKyBiICogYjtcbiAgICAgIHJldHVybiAoZCAhPT0gMClcbiAgICAgICAgICAgICAgPyBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgICAgICAgICBhIC8gZCxcbiAgICAgICAgICAgICAgICAgICAgICAtYiAvIGQpLmF0YW5oKClcbiAgICAgICAgICAgICAgOiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgICAgICAgICAoYSAhPT0gMCkgPyBhIC8gMCA6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgKGIgIT09IDApID8gLWIgLyAwIDogMCkuYXRhbmgoKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IGFjc2NoXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnYWNzY2gnOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gYWNzY2goYykgPSBsb2coKDErc3FydCgxK2NeMikpL2MpXG5cbiAgICAgIHZhciBhID0gdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gdGhpc1snaW0nXTtcblxuICAgICAgaWYgKGIgPT09IDApIHtcblxuICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgICAgKGEgIT09IDApXG4gICAgICAgICAgICAgICAgPyBNYXRoLmxvZyhhICsgTWF0aC5zcXJ0KGEgKiBhICsgMSkpXG4gICAgICAgICAgICAgICAgOiBJbmZpbml0eSwgMCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBkID0gYSAqIGEgKyBiICogYjtcbiAgICAgIHJldHVybiAoZCAhPT0gMClcbiAgICAgICAgICAgICAgPyBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgICAgICAgICBhIC8gZCxcbiAgICAgICAgICAgICAgICAgICAgICAtYiAvIGQpLmFzaW5oKClcbiAgICAgICAgICAgICAgOiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgICAgICAgICAoYSAhPT0gMCkgPyBhIC8gMCA6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgKGIgIT09IDApID8gLWIgLyAwIDogMCkuYXNpbmgoKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IGFzZWNoXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnYXNlY2gnOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gYXNlY2goYykgPSBsb2coKDErc3FydCgxLWNeMikpL2MpXG5cbiAgICAgIHZhciBhID0gdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gdGhpc1snaW0nXTtcblxuICAgICAgaWYgKHRoaXNbJ2lzWmVybyddKCkpIHtcbiAgICAgICAgcmV0dXJuIENvbXBsZXhbJ0lORklOSVRZJ107XG4gICAgICB9XG5cbiAgICAgIHZhciBkID0gYSAqIGEgKyBiICogYjtcbiAgICAgIHJldHVybiAoZCAhPT0gMClcbiAgICAgICAgICAgICAgPyBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgICAgICAgICBhIC8gZCxcbiAgICAgICAgICAgICAgICAgICAgICAtYiAvIGQpLmFjb3NoKClcbiAgICAgICAgICAgICAgOiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgICAgICAgICAoYSAhPT0gMCkgPyBhIC8gMCA6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgKGIgIT09IDApID8gLWIgLyAwIDogMCkuYWNvc2goKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IGludmVyc2UgMS96XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnaW52ZXJzZSc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyAxIC8gMCA9IEluZmluaXR5IGFuZCAxIC8gSW5maW5pdHkgPSAwXG4gICAgICBpZiAodGhpc1snaXNaZXJvJ10oKSkge1xuICAgICAgICByZXR1cm4gQ29tcGxleFsnSU5GSU5JVFknXTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXNbJ2lzSW5maW5pdGUnXSgpKSB7XG4gICAgICAgIHJldHVybiBDb21wbGV4WydaRVJPJ107XG4gICAgICB9XG5cbiAgICAgIHZhciBhID0gdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gdGhpc1snaW0nXTtcblxuICAgICAgdmFyIGQgPSBhICogYSArIGIgKiBiO1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoYSAvIGQsIC1iIC8gZCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGNvbXBsZXggY29uanVnYXRlXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnY29uanVnYXRlJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleCh0aGlzWydyZSddLCAtdGhpc1snaW0nXSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG5lZ2F0ZWQgY29tcGxleCBudW1iZXJcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICduZWcnOiBmdW5jdGlvbigpIHtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KC10aGlzWydyZSddLCAtdGhpc1snaW0nXSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENlaWxzIHRoZSBhY3R1YWwgY29tcGxleCBudW1iZXJcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdjZWlsJzogZnVuY3Rpb24ocGxhY2VzKSB7XG5cbiAgICAgIHBsYWNlcyA9IE1hdGgucG93KDEwLCBwbGFjZXMgfHwgMCk7XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgTWF0aC5jZWlsKHRoaXNbJ3JlJ10gKiBwbGFjZXMpIC8gcGxhY2VzLFxuICAgICAgICAgICAgICBNYXRoLmNlaWwodGhpc1snaW0nXSAqIHBsYWNlcykgLyBwbGFjZXMpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBGbG9vcnMgdGhlIGFjdHVhbCBjb21wbGV4IG51bWJlclxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2Zsb29yJzogZnVuY3Rpb24ocGxhY2VzKSB7XG5cbiAgICAgIHBsYWNlcyA9IE1hdGgucG93KDEwLCBwbGFjZXMgfHwgMCk7XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgTWF0aC5mbG9vcih0aGlzWydyZSddICogcGxhY2VzKSAvIHBsYWNlcyxcbiAgICAgICAgICAgICAgTWF0aC5mbG9vcih0aGlzWydpbSddICogcGxhY2VzKSAvIHBsYWNlcyk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENlaWxzIHRoZSBhY3R1YWwgY29tcGxleCBudW1iZXJcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdyb3VuZCc6IGZ1bmN0aW9uKHBsYWNlcykge1xuXG4gICAgICBwbGFjZXMgPSBNYXRoLnBvdygxMCwgcGxhY2VzIHx8IDApO1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIE1hdGgucm91bmQodGhpc1sncmUnXSAqIHBsYWNlcykgLyBwbGFjZXMsXG4gICAgICAgICAgICAgIE1hdGgucm91bmQodGhpc1snaW0nXSAqIHBsYWNlcykgLyBwbGFjZXMpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb21wYXJlcyB0d28gY29tcGxleCBudW1iZXJzXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogbmV3IENvbXBsZXgoSW5maW5pdHkpLmVxdWFscyhJbmZpbml0eSkgPT09IGZhbHNlXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICAnZXF1YWxzJzogZnVuY3Rpb24oYSwgYikge1xuXG4gICAgICB2YXIgeiA9IG5ldyBDb21wbGV4KGEsIGIpO1xuXG4gICAgICByZXR1cm4gTWF0aC5hYnMoelsncmUnXSAtIHRoaXNbJ3JlJ10pIDw9IENvbXBsZXhbJ0VQU0lMT04nXSAmJlxuICAgICAgICAgICAgICBNYXRoLmFicyh6WydpbSddIC0gdGhpc1snaW0nXSkgPD0gQ29tcGxleFsnRVBTSUxPTiddO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDbG9uZXMgdGhlIGFjdHVhbCBvYmplY3RcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdjbG9uZSc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgodGhpc1sncmUnXSwgdGhpc1snaW0nXSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdldHMgYSBzdHJpbmcgb2YgdGhlIGFjdHVhbCBjb21wbGV4IG51bWJlclxuICAgICAqXG4gICAgICogQHJldHVybnMge3N0cmluZ31cbiAgICAgKi9cbiAgICAndG9TdHJpbmcnOiBmdW5jdGlvbigpIHtcblxuICAgICAgdmFyIGEgPSB0aGlzWydyZSddO1xuICAgICAgdmFyIGIgPSB0aGlzWydpbSddO1xuICAgICAgdmFyIHJldCA9ICcnO1xuXG4gICAgICBpZiAodGhpc1snaXNOYU4nXSgpKSB7XG4gICAgICAgIHJldHVybiAnTmFOJztcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXNbJ2lzWmVybyddKCkpIHtcbiAgICAgICAgcmV0dXJuICcwJztcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXNbJ2lzSW5maW5pdGUnXSgpKSB7XG4gICAgICAgIHJldHVybiAnSW5maW5pdHknO1xuICAgICAgfVxuXG4gICAgICBpZiAoYSAhPT0gMCkge1xuICAgICAgICByZXQgKz0gYTtcbiAgICAgIH1cblxuICAgICAgaWYgKGIgIT09IDApIHtcblxuICAgICAgICBpZiAoYSAhPT0gMCkge1xuICAgICAgICAgIHJldCArPSBiIDwgMCA/ICcgLSAnIDogJyArICc7XG4gICAgICAgIH0gZWxzZSBpZiAoYiA8IDApIHtcbiAgICAgICAgICByZXQgKz0gJy0nO1xuICAgICAgICB9XG5cbiAgICAgICAgYiA9IE1hdGguYWJzKGIpO1xuXG4gICAgICAgIGlmICgxICE9PSBiKSB7XG4gICAgICAgICAgcmV0ICs9IGI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0ICs9ICdpJztcbiAgICAgIH1cblxuICAgICAgaWYgKCFyZXQpXG4gICAgICAgIHJldHVybiAnMCc7XG5cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGFjdHVhbCBudW1iZXIgYXMgYSB2ZWN0b3JcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtBcnJheX1cbiAgICAgKi9cbiAgICAndG9WZWN0b3InOiBmdW5jdGlvbigpIHtcblxuICAgICAgcmV0dXJuIFt0aGlzWydyZSddLCB0aGlzWydpbSddXTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgYWN0dWFsIHJlYWwgdmFsdWUgb2YgdGhlIGN1cnJlbnQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfG51bGx9XG4gICAgICovXG4gICAgJ3ZhbHVlT2YnOiBmdW5jdGlvbigpIHtcblxuICAgICAgaWYgKHRoaXNbJ2ltJ10gPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbJ3JlJ107XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgY29tcGxleCBudW1iZXIgaXMgbm90IG9uIHRoZSBSaWVtYW5uIHNwaGVyZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgICdpc05hTic6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGlzTmFOKHRoaXNbJ3JlJ10pIHx8IGlzTmFOKHRoaXNbJ2ltJ10pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IGEgY29tcGxleCBudW1iZXIgaXMgYXQgdGhlIHplcm8gcG9sZSBvZiB0aGVcbiAgICAgKiBSaWVtYW5uIHNwaGVyZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgICdpc1plcm8nOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICh0aGlzWydyZSddID09PSAwIHx8IHRoaXNbJ3JlJ10gPT09IC0wKSAmJlxuICAgICAgICAgICAgICAodGhpc1snaW0nXSA9PT0gMCB8fCB0aGlzWydpbSddID09PSAtMClcbiAgICAgICAgICAgICAgKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgY29tcGxleCBudW1iZXIgaXMgbm90IGF0IHRoZSBpbmZpbml0eSBwb2xlIG9mIHRoZVxuICAgICAqIFJpZW1hbm4gc3BoZXJlLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgJ2lzRmluaXRlJzogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gaXNGaW5pdGUodGhpc1sncmUnXSkgJiYgaXNGaW5pdGUodGhpc1snaW0nXSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIERldGVybWluZXMgd2hldGhlciBvciBub3QgYSBjb21wbGV4IG51bWJlciBpcyBhdCB0aGUgaW5maW5pdHkgcG9sZSBvZiB0aGVcbiAgICAgKiBSaWVtYW5uIHNwaGVyZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgICdpc0luZmluaXRlJzogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gISh0aGlzWydpc05hTiddKCkgfHwgdGhpc1snaXNGaW5pdGUnXSgpKTtcbiAgICB9XG4gIH07XG5cbiAgQ29tcGxleFsnWkVSTyddID0gbmV3IENvbXBsZXgoMCwgMCk7XG4gIENvbXBsZXhbJ09ORSddID0gbmV3IENvbXBsZXgoMSwgMCk7XG4gIENvbXBsZXhbJ0knXSA9IG5ldyBDb21wbGV4KDAsIDEpO1xuICBDb21wbGV4WydQSSddID0gbmV3IENvbXBsZXgoTWF0aC5QSSwgMCk7XG4gIENvbXBsZXhbJ0UnXSA9IG5ldyBDb21wbGV4KE1hdGguRSwgMCk7XG4gIENvbXBsZXhbJ0lORklOSVRZJ10gPSBuZXcgQ29tcGxleChJbmZpbml0eSwgSW5maW5pdHkpO1xuICBDb21wbGV4WydOQU4nXSA9IG5ldyBDb21wbGV4KE5hTiwgTmFOKTtcbiAgQ29tcGxleFsnRVBTSUxPTiddID0gMWUtMTY7XG5cbiAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lWydhbWQnXSkge1xuICAgIGRlZmluZShbXSwgZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gQ29tcGxleDtcbiAgICB9KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsndmFsdWUnOiB0cnVlfSk7XG4gICAgQ29tcGxleFsnZGVmYXVsdCddID0gQ29tcGxleDtcbiAgICBDb21wbGV4WydDb21wbGV4J10gPSBDb21wbGV4O1xuICAgIG1vZHVsZVsnZXhwb3J0cyddID0gQ29tcGxleDtcbiAgfSBlbHNlIHtcbiAgICByb290WydDb21wbGV4J10gPSBDb21wbGV4O1xuICB9XG5cbn0pKHRoaXMpO1xuIiwiOyhmdW5jdGlvbiAoZ2xvYmFsU2NvcGUpIHtcclxuICAndXNlIHN0cmljdCc7XHJcblxyXG5cclxuICAvKlxyXG4gICAqICBkZWNpbWFsLmpzIHYxMC4yLjBcclxuICAgKiAgQW4gYXJiaXRyYXJ5LXByZWNpc2lvbiBEZWNpbWFsIHR5cGUgZm9yIEphdmFTY3JpcHQuXHJcbiAgICogIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWtlTWNsL2RlY2ltYWwuanNcclxuICAgKiAgQ29weXJpZ2h0IChjKSAyMDE5IE1pY2hhZWwgTWNsYXVnaGxpbiA8TThjaDg4bEBnbWFpbC5jb20+XHJcbiAgICogIE1JVCBMaWNlbmNlXHJcbiAgICovXHJcblxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRURJVEFCTEUgREVGQVVMVFMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xyXG5cclxuXHJcbiAgICAvLyBUaGUgbWF4aW11bSBleHBvbmVudCBtYWduaXR1ZGUuXHJcbiAgICAvLyBUaGUgbGltaXQgb24gdGhlIHZhbHVlIG9mIGB0b0V4cE5lZ2AsIGB0b0V4cFBvc2AsIGBtaW5FYCBhbmQgYG1heEVgLlxyXG4gIHZhciBFWFBfTElNSVQgPSA5ZTE1LCAgICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIDllMTVcclxuXHJcbiAgICAvLyBUaGUgbGltaXQgb24gdGhlIHZhbHVlIG9mIGBwcmVjaXNpb25gLCBhbmQgb24gdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBhcmd1bWVudCB0b1xyXG4gICAgLy8gYHRvRGVjaW1hbFBsYWNlc2AsIGB0b0V4cG9uZW50aWFsYCwgYHRvRml4ZWRgLCBgdG9QcmVjaXNpb25gIGFuZCBgdG9TaWduaWZpY2FudERpZ2l0c2AuXHJcbiAgICBNQVhfRElHSVRTID0gMWU5LCAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gMWU5XHJcblxyXG4gICAgLy8gQmFzZSBjb252ZXJzaW9uIGFscGhhYmV0LlxyXG4gICAgTlVNRVJBTFMgPSAnMDEyMzQ1Njc4OWFiY2RlZicsXHJcblxyXG4gICAgLy8gVGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mIDEwICgxMDI1IGRpZ2l0cykuXHJcbiAgICBMTjEwID0gJzIuMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0Njg0MzY0MjA3NjAxMTAxNDg4NjI4NzcyOTc2MDMzMzI3OTAwOTY3NTcyNjA5Njc3MzUyNDgwMjM1OTk3MjA1MDg5NTk4Mjk4MzQxOTY3Nzg0MDQyMjg2MjQ4NjMzNDA5NTI1NDY1MDgyODA2NzU2NjY2Mjg3MzY5MDk4NzgxNjg5NDgyOTA3MjA4MzI1NTU0NjgwODQzNzk5ODk0ODI2MjMzMTk4NTI4MzkzNTA1MzA4OTY1Mzc3NzMyNjI4ODQ2MTYzMzY2MjIyMjg3Njk4MjE5ODg2NzQ2NTQzNjY3NDc0NDA0MjQzMjc0MzY1MTU1MDQ4OTM0MzE0OTM5MzkxNDc5NjE5NDA0NDAwMjIyMTA1MTAxNzE0MTc0ODAwMzY4ODA4NDAxMjY0NzA4MDY4NTU2Nzc0MzIxNjIyODM1NTIyMDExNDgwNDY2MzcxNTY1OTEyMTM3MzQ1MDc0Nzg1Njk0NzY4MzQ2MzYxNjc5MjEwMTgwNjQ0NTA3MDY0ODAwMDI3NzUwMjY4NDkxNjc0NjU1MDU4Njg1NjkzNTY3MzQyMDY3MDU4MTEzNjQyOTIyNDU1NDQwNTc1ODkyNTcyNDIwODI0MTMxNDY5NTY4OTAxNjc1ODk0MDI1Njc3NjMxMTM1NjkxOTI5MjAzMzM3NjU4NzE0MTY2MDIzMDEwNTcwMzA4OTYzNDU3MjA3NTQ0MDM3MDg0NzQ2OTk0MDE2ODI2OTI4MjgwODQ4MTE4NDI4OTMxNDg0ODUyNDk0ODY0NDg3MTkyNzgwOTY3NjI3MTI3NTc3NTM5NzAyNzY2ODYwNTk1MjQ5NjcxNjY3NDE4MzQ4NTcwNDQyMjUwNzE5Nzk2NTAwNDcxNDk1MTA1MDQ5MjIxNDc3NjU2NzYzNjkzODY2Mjk3Njk3OTUyMjExMDcxODI2NDU0OTczNDc3MjY2MjQyNTcwOTQyOTMyMjU4Mjc5ODUwMjU4NTUwOTc4NTI2NTM4MzIwNzYwNjcyNjMxNzE2NDMwOTUwNTk5NTA4NzgwNzUyMzcxMDMzMzEwMTE5Nzg1NzU0NzMzMTU0MTQyMTgwODQyNzU0Mzg2MzU5MTc3ODExNzA1NDMwOTgyNzQ4MjM4NTA0NTY0ODAxOTA5NTYxMDI5OTI5MTgyNDMxODIzNzUyNTM1NzcwOTc1MDUzOTU2NTE4NzY5NzUxMDM3NDk3MDg4ODY5MjE4MDIwNTE4OTMzOTUwNzIzODUzOTIwNTE0NDYzNDE5NzI2NTI4NzI4Njk2NTExMDg2MjU3MTQ5MjE5ODg0OTk3ODc0ODg3Mzc3MTM0NTY4NjIwOTE2NzA1OCcsXHJcblxyXG4gICAgLy8gUGkgKDEwMjUgZGlnaXRzKS5cclxuICAgIFBJID0gJzMuMTQxNTkyNjUzNTg5NzkzMjM4NDYyNjQzMzgzMjc5NTAyODg0MTk3MTY5Mzk5Mzc1MTA1ODIwOTc0OTQ0NTkyMzA3ODE2NDA2Mjg2MjA4OTk4NjI4MDM0ODI1MzQyMTE3MDY3OTgyMTQ4MDg2NTEzMjgyMzA2NjQ3MDkzODQ0NjA5NTUwNTgyMjMxNzI1MzU5NDA4MTI4NDgxMTE3NDUwMjg0MTAyNzAxOTM4NTIxMTA1NTU5NjQ0NjIyOTQ4OTU0OTMwMzgxOTY0NDI4ODEwOTc1NjY1OTMzNDQ2MTI4NDc1NjQ4MjMzNzg2NzgzMTY1MjcxMjAxOTA5MTQ1NjQ4NTY2OTIzNDYwMzQ4NjEwNDU0MzI2NjQ4MjEzMzkzNjA3MjYwMjQ5MTQxMjczNzI0NTg3MDA2NjA2MzE1NTg4MTc0ODgxNTIwOTIwOTYyODI5MjU0MDkxNzE1MzY0MzY3ODkyNTkwMzYwMDExMzMwNTMwNTQ4ODIwNDY2NTIxMzg0MTQ2OTUxOTQxNTExNjA5NDMzMDU3MjcwMzY1NzU5NTkxOTUzMDkyMTg2MTE3MzgxOTMyNjExNzkzMTA1MTE4NTQ4MDc0NDYyMzc5OTYyNzQ5NTY3MzUxODg1NzUyNzI0ODkxMjI3OTM4MTgzMDExOTQ5MTI5ODMzNjczMzYyNDQwNjU2NjQzMDg2MDIxMzk0OTQ2Mzk1MjI0NzM3MTkwNzAyMTc5ODYwOTQzNzAyNzcwNTM5MjE3MTc2MjkzMTc2NzUyMzg0Njc0ODE4NDY3NjY5NDA1MTMyMDAwNTY4MTI3MTQ1MjYzNTYwODI3Nzg1NzcxMzQyNzU3Nzg5NjA5MTczNjM3MTc4NzIxNDY4NDQwOTAxMjI0OTUzNDMwMTQ2NTQ5NTg1MzcxMDUwNzkyMjc5Njg5MjU4OTIzNTQyMDE5OTU2MTEyMTI5MDIxOTYwODY0MDM0NDE4MTU5ODEzNjI5Nzc0NzcxMzA5OTYwNTE4NzA3MjExMzQ5OTk5OTk4MzcyOTc4MDQ5OTUxMDU5NzMxNzMyODE2MDk2MzE4NTk1MDI0NDU5NDU1MzQ2OTA4MzAyNjQyNTIyMzA4MjUzMzQ0Njg1MDM1MjYxOTMxMTg4MTcxMDEwMDAzMTM3ODM4NzUyODg2NTg3NTMzMjA4MzgxNDIwNjE3MTc3NjY5MTQ3MzAzNTk4MjUzNDkwNDI4NzU1NDY4NzMxMTU5NTYyODYzODgyMzUzNzg3NTkzNzUxOTU3NzgxODU3NzgwNTMyMTcxMjI2ODA2NjEzMDAxOTI3ODc2NjExMTk1OTA5MjE2NDIwMTk4OTM4MDk1MjU3MjAxMDY1NDg1ODYzMjc4OScsXHJcblxyXG5cclxuICAgIC8vIFRoZSBpbml0aWFsIGNvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBvZiB0aGUgRGVjaW1hbCBjb25zdHJ1Y3Rvci5cclxuICAgIERFRkFVTFRTID0ge1xyXG5cclxuICAgICAgLy8gVGhlc2UgdmFsdWVzIG11c3QgYmUgaW50ZWdlcnMgd2l0aGluIHRoZSBzdGF0ZWQgcmFuZ2VzIChpbmNsdXNpdmUpLlxyXG4gICAgICAvLyBNb3N0IG9mIHRoZXNlIHZhbHVlcyBjYW4gYmUgY2hhbmdlZCBhdCBydW4tdGltZSB1c2luZyB0aGUgYERlY2ltYWwuY29uZmlnYCBtZXRob2QuXHJcblxyXG4gICAgICAvLyBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIG9mIHRoZSByZXN1bHQgb2YgYSBjYWxjdWxhdGlvbiBvciBiYXNlIGNvbnZlcnNpb24uXHJcbiAgICAgIC8vIEUuZy4gYERlY2ltYWwuY29uZmlnKHsgcHJlY2lzaW9uOiAyMCB9KTtgXHJcbiAgICAgIHByZWNpc2lvbjogMjAsICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEgdG8gTUFYX0RJR0lUU1xyXG5cclxuICAgICAgLy8gVGhlIHJvdW5kaW5nIG1vZGUgdXNlZCB3aGVuIHJvdW5kaW5nIHRvIGBwcmVjaXNpb25gLlxyXG4gICAgICAvL1xyXG4gICAgICAvLyBST1VORF9VUCAgICAgICAgIDAgQXdheSBmcm9tIHplcm8uXHJcbiAgICAgIC8vIFJPVU5EX0RPV04gICAgICAgMSBUb3dhcmRzIHplcm8uXHJcbiAgICAgIC8vIFJPVU5EX0NFSUwgICAgICAgMiBUb3dhcmRzICtJbmZpbml0eS5cclxuICAgICAgLy8gUk9VTkRfRkxPT1IgICAgICAzIFRvd2FyZHMgLUluZmluaXR5LlxyXG4gICAgICAvLyBST1VORF9IQUxGX1VQICAgIDQgVG93YXJkcyBuZWFyZXN0IG5laWdoYm91ci4gSWYgZXF1aWRpc3RhbnQsIHVwLlxyXG4gICAgICAvLyBST1VORF9IQUxGX0RPV04gIDUgVG93YXJkcyBuZWFyZXN0IG5laWdoYm91ci4gSWYgZXF1aWRpc3RhbnQsIGRvd24uXHJcbiAgICAgIC8vIFJPVU5EX0hBTEZfRVZFTiAgNiBUb3dhcmRzIG5lYXJlc3QgbmVpZ2hib3VyLiBJZiBlcXVpZGlzdGFudCwgdG93YXJkcyBldmVuIG5laWdoYm91ci5cclxuICAgICAgLy8gUk9VTkRfSEFMRl9DRUlMICA3IFRvd2FyZHMgbmVhcmVzdCBuZWlnaGJvdXIuIElmIGVxdWlkaXN0YW50LCB0b3dhcmRzICtJbmZpbml0eS5cclxuICAgICAgLy8gUk9VTkRfSEFMRl9GTE9PUiA4IFRvd2FyZHMgbmVhcmVzdCBuZWlnaGJvdXIuIElmIGVxdWlkaXN0YW50LCB0b3dhcmRzIC1JbmZpbml0eS5cclxuICAgICAgLy9cclxuICAgICAgLy8gRS5nLlxyXG4gICAgICAvLyBgRGVjaW1hbC5yb3VuZGluZyA9IDQ7YFxyXG4gICAgICAvLyBgRGVjaW1hbC5yb3VuZGluZyA9IERlY2ltYWwuUk9VTkRfSEFMRl9VUDtgXHJcbiAgICAgIHJvdW5kaW5nOiA0LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gOFxyXG5cclxuICAgICAgLy8gVGhlIG1vZHVsbyBtb2RlIHVzZWQgd2hlbiBjYWxjdWxhdGluZyB0aGUgbW9kdWx1czogYSBtb2Qgbi5cclxuICAgICAgLy8gVGhlIHF1b3RpZW50IChxID0gYSAvIG4pIGlzIGNhbGN1bGF0ZWQgYWNjb3JkaW5nIHRvIHRoZSBjb3JyZXNwb25kaW5nIHJvdW5kaW5nIG1vZGUuXHJcbiAgICAgIC8vIFRoZSByZW1haW5kZXIgKHIpIGlzIGNhbGN1bGF0ZWQgYXM6IHIgPSBhIC0gbiAqIHEuXHJcbiAgICAgIC8vXHJcbiAgICAgIC8vIFVQICAgICAgICAgMCBUaGUgcmVtYWluZGVyIGlzIHBvc2l0aXZlIGlmIHRoZSBkaXZpZGVuZCBpcyBuZWdhdGl2ZSwgZWxzZSBpcyBuZWdhdGl2ZS5cclxuICAgICAgLy8gRE9XTiAgICAgICAxIFRoZSByZW1haW5kZXIgaGFzIHRoZSBzYW1lIHNpZ24gYXMgdGhlIGRpdmlkZW5kIChKYXZhU2NyaXB0ICUpLlxyXG4gICAgICAvLyBGTE9PUiAgICAgIDMgVGhlIHJlbWFpbmRlciBoYXMgdGhlIHNhbWUgc2lnbiBhcyB0aGUgZGl2aXNvciAoUHl0aG9uICUpLlxyXG4gICAgICAvLyBIQUxGX0VWRU4gIDYgVGhlIElFRUUgNzU0IHJlbWFpbmRlciBmdW5jdGlvbi5cclxuICAgICAgLy8gRVVDTElEICAgICA5IEV1Y2xpZGlhbiBkaXZpc2lvbi4gcSA9IHNpZ24obikgKiBmbG9vcihhIC8gYWJzKG4pKS4gQWx3YXlzIHBvc2l0aXZlLlxyXG4gICAgICAvL1xyXG4gICAgICAvLyBUcnVuY2F0ZWQgZGl2aXNpb24gKDEpLCBmbG9vcmVkIGRpdmlzaW9uICgzKSwgdGhlIElFRUUgNzU0IHJlbWFpbmRlciAoNiksIGFuZCBFdWNsaWRpYW5cclxuICAgICAgLy8gZGl2aXNpb24gKDkpIGFyZSBjb21tb25seSB1c2VkIGZvciB0aGUgbW9kdWx1cyBvcGVyYXRpb24uIFRoZSBvdGhlciByb3VuZGluZyBtb2RlcyBjYW4gYWxzb1xyXG4gICAgICAvLyBiZSB1c2VkLCBidXQgdGhleSBtYXkgbm90IGdpdmUgdXNlZnVsIHJlc3VsdHMuXHJcbiAgICAgIG1vZHVsbzogMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gOVxyXG5cclxuICAgICAgLy8gVGhlIGV4cG9uZW50IHZhbHVlIGF0IGFuZCBiZW5lYXRoIHdoaWNoIGB0b1N0cmluZ2AgcmV0dXJucyBleHBvbmVudGlhbCBub3RhdGlvbi5cclxuICAgICAgLy8gSmF2YVNjcmlwdCBudW1iZXJzOiAtN1xyXG4gICAgICB0b0V4cE5lZzogLTcsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIC1FWFBfTElNSVRcclxuXHJcbiAgICAgIC8vIFRoZSBleHBvbmVudCB2YWx1ZSBhdCBhbmQgYWJvdmUgd2hpY2ggYHRvU3RyaW5nYCByZXR1cm5zIGV4cG9uZW50aWFsIG5vdGF0aW9uLlxyXG4gICAgICAvLyBKYXZhU2NyaXB0IG51bWJlcnM6IDIxXHJcbiAgICAgIHRvRXhwUG9zOiAgMjEsICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gRVhQX0xJTUlUXHJcblxyXG4gICAgICAvLyBUaGUgbWluaW11bSBleHBvbmVudCB2YWx1ZSwgYmVuZWF0aCB3aGljaCB1bmRlcmZsb3cgdG8gemVybyBvY2N1cnMuXHJcbiAgICAgIC8vIEphdmFTY3JpcHQgbnVtYmVyczogLTMyNCAgKDVlLTMyNClcclxuICAgICAgbWluRTogLUVYUF9MSU1JVCwgICAgICAgICAgICAgICAgICAgICAgLy8gLTEgdG8gLUVYUF9MSU1JVFxyXG5cclxuICAgICAgLy8gVGhlIG1heGltdW0gZXhwb25lbnQgdmFsdWUsIGFib3ZlIHdoaWNoIG92ZXJmbG93IHRvIEluZmluaXR5IG9jY3Vycy5cclxuICAgICAgLy8gSmF2YVNjcmlwdCBudW1iZXJzOiAzMDggICgxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOClcclxuICAgICAgbWF4RTogRVhQX0xJTUlULCAgICAgICAgICAgICAgICAgICAgICAgLy8gMSB0byBFWFBfTElNSVRcclxuXHJcbiAgICAgIC8vIFdoZXRoZXIgdG8gdXNlIGNyeXB0b2dyYXBoaWNhbGx5LXNlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24sIGlmIGF2YWlsYWJsZS5cclxuICAgICAgY3J5cHRvOiBmYWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJ1ZS9mYWxzZVxyXG4gICAgfSxcclxuXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVORCBPRiBFRElUQUJMRSBERUZBVUxUUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC8vXHJcblxyXG5cclxuICAgIERlY2ltYWwsIGluZXhhY3QsIG5vQ29uZmxpY3QsIHF1YWRyYW50LFxyXG4gICAgZXh0ZXJuYWwgPSB0cnVlLFxyXG5cclxuICAgIGRlY2ltYWxFcnJvciA9ICdbRGVjaW1hbEVycm9yXSAnLFxyXG4gICAgaW52YWxpZEFyZ3VtZW50ID0gZGVjaW1hbEVycm9yICsgJ0ludmFsaWQgYXJndW1lbnQ6ICcsXHJcbiAgICBwcmVjaXNpb25MaW1pdEV4Y2VlZGVkID0gZGVjaW1hbEVycm9yICsgJ1ByZWNpc2lvbiBsaW1pdCBleGNlZWRlZCcsXHJcbiAgICBjcnlwdG9VbmF2YWlsYWJsZSA9IGRlY2ltYWxFcnJvciArICdjcnlwdG8gdW5hdmFpbGFibGUnLFxyXG5cclxuICAgIG1hdGhmbG9vciA9IE1hdGguZmxvb3IsXHJcbiAgICBtYXRocG93ID0gTWF0aC5wb3csXHJcblxyXG4gICAgaXNCaW5hcnkgPSAvXjBiKFswMV0rKFxcLlswMV0qKT98XFwuWzAxXSspKHBbKy1dP1xcZCspPyQvaSxcclxuICAgIGlzSGV4ID0gL14weChbMC05YS1mXSsoXFwuWzAtOWEtZl0qKT98XFwuWzAtOWEtZl0rKShwWystXT9cXGQrKT8kL2ksXHJcbiAgICBpc09jdGFsID0gL14wbyhbMC03XSsoXFwuWzAtN10qKT98XFwuWzAtN10rKShwWystXT9cXGQrKT8kL2ksXHJcbiAgICBpc0RlY2ltYWwgPSAvXihcXGQrKFxcLlxcZCopP3xcXC5cXGQrKShlWystXT9cXGQrKT8kL2ksXHJcblxyXG4gICAgQkFTRSA9IDFlNyxcclxuICAgIExPR19CQVNFID0gNyxcclxuICAgIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxLFxyXG5cclxuICAgIExOMTBfUFJFQ0lTSU9OID0gTE4xMC5sZW5ndGggLSAxLFxyXG4gICAgUElfUFJFQ0lTSU9OID0gUEkubGVuZ3RoIC0gMSxcclxuXHJcbiAgICAvLyBEZWNpbWFsLnByb3RvdHlwZSBvYmplY3RcclxuICAgIFAgPSB7IG5hbWU6ICdbb2JqZWN0IERlY2ltYWxdJyB9O1xyXG5cclxuXHJcbiAgLy8gRGVjaW1hbCBwcm90b3R5cGUgbWV0aG9kc1xyXG5cclxuXHJcbiAgLypcclxuICAgKiAgYWJzb2x1dGVWYWx1ZSAgICAgICAgICAgICBhYnNcclxuICAgKiAgY2VpbFxyXG4gICAqICBjb21wYXJlZFRvICAgICAgICAgICAgICAgIGNtcFxyXG4gICAqICBjb3NpbmUgICAgICAgICAgICAgICAgICAgIGNvc1xyXG4gICAqICBjdWJlUm9vdCAgICAgICAgICAgICAgICAgIGNicnRcclxuICAgKiAgZGVjaW1hbFBsYWNlcyAgICAgICAgICAgICBkcFxyXG4gICAqICBkaXZpZGVkQnkgICAgICAgICAgICAgICAgIGRpdlxyXG4gICAqICBkaXZpZGVkVG9JbnRlZ2VyQnkgICAgICAgIGRpdlRvSW50XHJcbiAgICogIGVxdWFscyAgICAgICAgICAgICAgICAgICAgZXFcclxuICAgKiAgZmxvb3JcclxuICAgKiAgZ3JlYXRlclRoYW4gICAgICAgICAgICAgICBndFxyXG4gICAqICBncmVhdGVyVGhhbk9yRXF1YWxUbyAgICAgIGd0ZVxyXG4gICAqICBoeXBlcmJvbGljQ29zaW5lICAgICAgICAgIGNvc2hcclxuICAgKiAgaHlwZXJib2xpY1NpbmUgICAgICAgICAgICBzaW5oXHJcbiAgICogIGh5cGVyYm9saWNUYW5nZW50ICAgICAgICAgdGFuaFxyXG4gICAqICBpbnZlcnNlQ29zaW5lICAgICAgICAgICAgIGFjb3NcclxuICAgKiAgaW52ZXJzZUh5cGVyYm9saWNDb3NpbmUgICBhY29zaFxyXG4gICAqICBpbnZlcnNlSHlwZXJib2xpY1NpbmUgICAgIGFzaW5oXHJcbiAgICogIGludmVyc2VIeXBlcmJvbGljVGFuZ2VudCAgYXRhbmhcclxuICAgKiAgaW52ZXJzZVNpbmUgICAgICAgICAgICAgICBhc2luXHJcbiAgICogIGludmVyc2VUYW5nZW50ICAgICAgICAgICAgYXRhblxyXG4gICAqICBpc0Zpbml0ZVxyXG4gICAqICBpc0ludGVnZXIgICAgICAgICAgICAgICAgIGlzSW50XHJcbiAgICogIGlzTmFOXHJcbiAgICogIGlzTmVnYXRpdmUgICAgICAgICAgICAgICAgaXNOZWdcclxuICAgKiAgaXNQb3NpdGl2ZSAgICAgICAgICAgICAgICBpc1Bvc1xyXG4gICAqICBpc1plcm9cclxuICAgKiAgbGVzc1RoYW4gICAgICAgICAgICAgICAgICBsdFxyXG4gICAqICBsZXNzVGhhbk9yRXF1YWxUbyAgICAgICAgIGx0ZVxyXG4gICAqICBsb2dhcml0aG0gICAgICAgICAgICAgICAgIGxvZ1xyXG4gICAqICBbbWF4aW11bV0gICAgICAgICAgICAgICAgIFttYXhdXHJcbiAgICogIFttaW5pbXVtXSAgICAgICAgICAgICAgICAgW21pbl1cclxuICAgKiAgbWludXMgICAgICAgICAgICAgICAgICAgICBzdWJcclxuICAgKiAgbW9kdWxvICAgICAgICAgICAgICAgICAgICBtb2RcclxuICAgKiAgbmF0dXJhbEV4cG9uZW50aWFsICAgICAgICBleHBcclxuICAgKiAgbmF0dXJhbExvZ2FyaXRobSAgICAgICAgICBsblxyXG4gICAqICBuZWdhdGVkICAgICAgICAgICAgICAgICAgIG5lZ1xyXG4gICAqICBwbHVzICAgICAgICAgICAgICAgICAgICAgIGFkZFxyXG4gICAqICBwcmVjaXNpb24gICAgICAgICAgICAgICAgIHNkXHJcbiAgICogIHJvdW5kXHJcbiAgICogIHNpbmUgICAgICAgICAgICAgICAgICAgICAgc2luXHJcbiAgICogIHNxdWFyZVJvb3QgICAgICAgICAgICAgICAgc3FydFxyXG4gICAqICB0YW5nZW50ICAgICAgICAgICAgICAgICAgIHRhblxyXG4gICAqICB0aW1lcyAgICAgICAgICAgICAgICAgICAgIG11bFxyXG4gICAqICB0b0JpbmFyeVxyXG4gICAqICB0b0RlY2ltYWxQbGFjZXMgICAgICAgICAgIHRvRFBcclxuICAgKiAgdG9FeHBvbmVudGlhbFxyXG4gICAqICB0b0ZpeGVkXHJcbiAgICogIHRvRnJhY3Rpb25cclxuICAgKiAgdG9IZXhhZGVjaW1hbCAgICAgICAgICAgICB0b0hleFxyXG4gICAqICB0b05lYXJlc3RcclxuICAgKiAgdG9OdW1iZXJcclxuICAgKiAgdG9PY3RhbFxyXG4gICAqICB0b1Bvd2VyICAgICAgICAgICAgICAgICAgIHBvd1xyXG4gICAqICB0b1ByZWNpc2lvblxyXG4gICAqICB0b1NpZ25pZmljYW50RGlnaXRzICAgICAgIHRvU0RcclxuICAgKiAgdG9TdHJpbmdcclxuICAgKiAgdHJ1bmNhdGVkICAgICAgICAgICAgICAgICB0cnVuY1xyXG4gICAqICB2YWx1ZU9mICAgICAgICAgICAgICAgICAgIHRvSlNPTlxyXG4gICAqL1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5hYnNvbHV0ZVZhbHVlID0gUC5hYnMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgeCA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMpO1xyXG4gICAgaWYgKHgucyA8IDApIHgucyA9IDE7XHJcbiAgICByZXR1cm4gZmluYWxpc2UoeCk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCByb3VuZGVkIHRvIGEgd2hvbGUgbnVtYmVyIGluIHRoZVxyXG4gICAqIGRpcmVjdGlvbiBvZiBwb3NpdGl2ZSBJbmZpbml0eS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuY2VpbCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiBmaW5hbGlzZShuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzKSwgdGhpcy5lICsgMSwgMik7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuXHJcbiAgICogICAxICAgIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgaXMgZ3JlYXRlciB0aGFuIHRoZSB2YWx1ZSBvZiBgeWAsXHJcbiAgICogIC0xICAgIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgaXMgbGVzcyB0aGFuIHRoZSB2YWx1ZSBvZiBgeWAsXHJcbiAgICogICAwICAgIGlmIHRoZXkgaGF2ZSB0aGUgc2FtZSB2YWx1ZSxcclxuICAgKiAgIE5hTiAgaWYgdGhlIHZhbHVlIG9mIGVpdGhlciBEZWNpbWFsIGlzIE5hTi5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuY29tcGFyZWRUbyA9IFAuY21wID0gZnVuY3Rpb24gKHkpIHtcclxuICAgIHZhciBpLCBqLCB4ZEwsIHlkTCxcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIHhkID0geC5kLFxyXG4gICAgICB5ZCA9ICh5ID0gbmV3IHguY29uc3RydWN0b3IoeSkpLmQsXHJcbiAgICAgIHhzID0geC5zLFxyXG4gICAgICB5cyA9IHkucztcclxuXHJcbiAgICAvLyBFaXRoZXIgTmFOIG9yIMKxSW5maW5pdHk/XHJcbiAgICBpZiAoIXhkIHx8ICF5ZCkge1xyXG4gICAgICByZXR1cm4gIXhzIHx8ICF5cyA/IE5hTiA6IHhzICE9PSB5cyA/IHhzIDogeGQgPT09IHlkID8gMCA6ICF4ZCBeIHhzIDwgMCA/IDEgOiAtMTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBFaXRoZXIgemVybz9cclxuICAgIGlmICgheGRbMF0gfHwgIXlkWzBdKSByZXR1cm4geGRbMF0gPyB4cyA6IHlkWzBdID8gLXlzIDogMDtcclxuXHJcbiAgICAvLyBTaWducyBkaWZmZXI/XHJcbiAgICBpZiAoeHMgIT09IHlzKSByZXR1cm4geHM7XHJcblxyXG4gICAgLy8gQ29tcGFyZSBleHBvbmVudHMuXHJcbiAgICBpZiAoeC5lICE9PSB5LmUpIHJldHVybiB4LmUgPiB5LmUgXiB4cyA8IDAgPyAxIDogLTE7XHJcblxyXG4gICAgeGRMID0geGQubGVuZ3RoO1xyXG4gICAgeWRMID0geWQubGVuZ3RoO1xyXG5cclxuICAgIC8vIENvbXBhcmUgZGlnaXQgYnkgZGlnaXQuXHJcbiAgICBmb3IgKGkgPSAwLCBqID0geGRMIDwgeWRMID8geGRMIDogeWRMOyBpIDwgajsgKytpKSB7XHJcbiAgICAgIGlmICh4ZFtpXSAhPT0geWRbaV0pIHJldHVybiB4ZFtpXSA+IHlkW2ldIF4geHMgPCAwID8gMSA6IC0xO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENvbXBhcmUgbGVuZ3Rocy5cclxuICAgIHJldHVybiB4ZEwgPT09IHlkTCA/IDAgOiB4ZEwgPiB5ZEwgXiB4cyA8IDAgPyAxIDogLTE7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGNvc2luZSBvZiB0aGUgdmFsdWUgaW4gcmFkaWFucyBvZiB0aGlzIERlY2ltYWwuXHJcbiAgICpcclxuICAgKiBEb21haW46IFstSW5maW5pdHksIEluZmluaXR5XVxyXG4gICAqIFJhbmdlOiBbLTEsIDFdXHJcbiAgICpcclxuICAgKiBjb3MoMCkgICAgICAgICA9IDFcclxuICAgKiBjb3MoLTApICAgICAgICA9IDFcclxuICAgKiBjb3MoSW5maW5pdHkpICA9IE5hTlxyXG4gICAqIGNvcygtSW5maW5pdHkpID0gTmFOXHJcbiAgICogY29zKE5hTikgICAgICAgPSBOYU5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuY29zaW5lID0gUC5jb3MgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgcHIsIHJtLFxyXG4gICAgICB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7XHJcblxyXG4gICAgaWYgKCF4LmQpIHJldHVybiBuZXcgQ3RvcihOYU4pO1xyXG5cclxuICAgIC8vIGNvcygwKSA9IGNvcygtMCkgPSAxXHJcbiAgICBpZiAoIXguZFswXSkgcmV0dXJuIG5ldyBDdG9yKDEpO1xyXG5cclxuICAgIHByID0gQ3Rvci5wcmVjaXNpb247XHJcbiAgICBybSA9IEN0b3Iucm91bmRpbmc7XHJcbiAgICBDdG9yLnByZWNpc2lvbiA9IHByICsgTWF0aC5tYXgoeC5lLCB4LnNkKCkpICsgTE9HX0JBU0U7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gMTtcclxuXHJcbiAgICB4ID0gY29zaW5lKEN0b3IsIHRvTGVzc1RoYW5IYWxmUGkoQ3RvciwgeCkpO1xyXG5cclxuICAgIEN0b3IucHJlY2lzaW9uID0gcHI7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gcm07XHJcblxyXG4gICAgcmV0dXJuIGZpbmFsaXNlKHF1YWRyYW50ID09IDIgfHwgcXVhZHJhbnQgPT0gMyA/IHgubmVnKCkgOiB4LCBwciwgcm0sIHRydWUpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGN1YmUgcm9vdCBvZiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsLCByb3VuZGVkIHRvXHJcbiAgICogYHByZWNpc2lvbmAgc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqICBjYnJ0KDApICA9ICAwXHJcbiAgICogIGNicnQoLTApID0gLTBcclxuICAgKiAgY2JydCgxKSAgPSAgMVxyXG4gICAqICBjYnJ0KC0xKSA9IC0xXHJcbiAgICogIGNicnQoTikgID0gIE5cclxuICAgKiAgY2JydCgtSSkgPSAtSVxyXG4gICAqICBjYnJ0KEkpICA9ICBJXHJcbiAgICpcclxuICAgKiBNYXRoLmNicnQoeCkgPSAoeCA8IDAgPyAtTWF0aC5wb3coLXgsIDEvMykgOiBNYXRoLnBvdyh4LCAxLzMpKVxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5jdWJlUm9vdCA9IFAuY2JydCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBlLCBtLCBuLCByLCByZXAsIHMsIHNkLCB0LCB0MywgdDNwbHVzeCxcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIGlmICgheC5pc0Zpbml0ZSgpIHx8IHguaXNaZXJvKCkpIHJldHVybiBuZXcgQ3Rvcih4KTtcclxuICAgIGV4dGVybmFsID0gZmFsc2U7XHJcblxyXG4gICAgLy8gSW5pdGlhbCBlc3RpbWF0ZS5cclxuICAgIHMgPSB4LnMgKiBtYXRocG93KHgucyAqIHgsIDEgLyAzKTtcclxuXHJcbiAgICAgLy8gTWF0aC5jYnJ0IHVuZGVyZmxvdy9vdmVyZmxvdz9cclxuICAgICAvLyBQYXNzIHggdG8gTWF0aC5wb3cgYXMgaW50ZWdlciwgdGhlbiBhZGp1c3QgdGhlIGV4cG9uZW50IG9mIHRoZSByZXN1bHQuXHJcbiAgICBpZiAoIXMgfHwgTWF0aC5hYnMocykgPT0gMSAvIDApIHtcclxuICAgICAgbiA9IGRpZ2l0c1RvU3RyaW5nKHguZCk7XHJcbiAgICAgIGUgPSB4LmU7XHJcblxyXG4gICAgICAvLyBBZGp1c3QgbiBleHBvbmVudCBzbyBpdCBpcyBhIG11bHRpcGxlIG9mIDMgYXdheSBmcm9tIHggZXhwb25lbnQuXHJcbiAgICAgIGlmIChzID0gKGUgLSBuLmxlbmd0aCArIDEpICUgMykgbiArPSAocyA9PSAxIHx8IHMgPT0gLTIgPyAnMCcgOiAnMDAnKTtcclxuICAgICAgcyA9IG1hdGhwb3cobiwgMSAvIDMpO1xyXG5cclxuICAgICAgLy8gUmFyZWx5LCBlIG1heSBiZSBvbmUgbGVzcyB0aGFuIHRoZSByZXN1bHQgZXhwb25lbnQgdmFsdWUuXHJcbiAgICAgIGUgPSBtYXRoZmxvb3IoKGUgKyAxKSAvIDMpIC0gKGUgJSAzID09IChlIDwgMCA/IC0xIDogMikpO1xyXG5cclxuICAgICAgaWYgKHMgPT0gMSAvIDApIHtcclxuICAgICAgICBuID0gJzVlJyArIGU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbiA9IHMudG9FeHBvbmVudGlhbCgpO1xyXG4gICAgICAgIG4gPSBuLnNsaWNlKDAsIG4uaW5kZXhPZignZScpICsgMSkgKyBlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByID0gbmV3IEN0b3Iobik7XHJcbiAgICAgIHIucyA9IHgucztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHIgPSBuZXcgQ3RvcihzLnRvU3RyaW5nKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHNkID0gKGUgPSBDdG9yLnByZWNpc2lvbikgKyAzO1xyXG5cclxuICAgIC8vIEhhbGxleSdzIG1ldGhvZC5cclxuICAgIC8vIFRPRE8/IENvbXBhcmUgTmV3dG9uJ3MgbWV0aG9kLlxyXG4gICAgZm9yICg7Oykge1xyXG4gICAgICB0ID0gcjtcclxuICAgICAgdDMgPSB0LnRpbWVzKHQpLnRpbWVzKHQpO1xyXG4gICAgICB0M3BsdXN4ID0gdDMucGx1cyh4KTtcclxuICAgICAgciA9IGRpdmlkZSh0M3BsdXN4LnBsdXMoeCkudGltZXModCksIHQzcGx1c3gucGx1cyh0MyksIHNkICsgMiwgMSk7XHJcblxyXG4gICAgICAvLyBUT0RPPyBSZXBsYWNlIHdpdGggZm9yLWxvb3AgYW5kIGNoZWNrUm91bmRpbmdEaWdpdHMuXHJcbiAgICAgIGlmIChkaWdpdHNUb1N0cmluZyh0LmQpLnNsaWNlKDAsIHNkKSA9PT0gKG4gPSBkaWdpdHNUb1N0cmluZyhyLmQpKS5zbGljZSgwLCBzZCkpIHtcclxuICAgICAgICBuID0gbi5zbGljZShzZCAtIDMsIHNkICsgMSk7XHJcblxyXG4gICAgICAgIC8vIFRoZSA0dGggcm91bmRpbmcgZGlnaXQgbWF5IGJlIGluIGVycm9yIGJ5IC0xIHNvIGlmIHRoZSA0IHJvdW5kaW5nIGRpZ2l0cyBhcmUgOTk5OSBvciA0OTk5XHJcbiAgICAgICAgLy8gLCBpLmUuIGFwcHJvYWNoaW5nIGEgcm91bmRpbmcgYm91bmRhcnksIGNvbnRpbnVlIHRoZSBpdGVyYXRpb24uXHJcbiAgICAgICAgaWYgKG4gPT0gJzk5OTknIHx8ICFyZXAgJiYgbiA9PSAnNDk5OScpIHtcclxuXHJcbiAgICAgICAgICAvLyBPbiB0aGUgZmlyc3QgaXRlcmF0aW9uIG9ubHksIGNoZWNrIHRvIHNlZSBpZiByb3VuZGluZyB1cCBnaXZlcyB0aGUgZXhhY3QgcmVzdWx0IGFzIHRoZVxyXG4gICAgICAgICAgLy8gbmluZXMgbWF5IGluZmluaXRlbHkgcmVwZWF0LlxyXG4gICAgICAgICAgaWYgKCFyZXApIHtcclxuICAgICAgICAgICAgZmluYWxpc2UodCwgZSArIDEsIDApO1xyXG5cclxuICAgICAgICAgICAgaWYgKHQudGltZXModCkudGltZXModCkuZXEoeCkpIHtcclxuICAgICAgICAgICAgICByID0gdDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHNkICs9IDQ7XHJcbiAgICAgICAgICByZXAgPSAxO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgLy8gSWYgdGhlIHJvdW5kaW5nIGRpZ2l0cyBhcmUgbnVsbCwgMHswLDR9IG9yIDUwezAsM30sIGNoZWNrIGZvciBhbiBleGFjdCByZXN1bHQuXHJcbiAgICAgICAgICAvLyBJZiBub3QsIHRoZW4gdGhlcmUgYXJlIGZ1cnRoZXIgZGlnaXRzIGFuZCBtIHdpbGwgYmUgdHJ1dGh5LlxyXG4gICAgICAgICAgaWYgKCErbiB8fCAhK24uc2xpY2UoMSkgJiYgbi5jaGFyQXQoMCkgPT0gJzUnKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBUcnVuY2F0ZSB0byB0aGUgZmlyc3Qgcm91bmRpbmcgZGlnaXQuXHJcbiAgICAgICAgICAgIGZpbmFsaXNlKHIsIGUgKyAxLCAxKTtcclxuICAgICAgICAgICAgbSA9ICFyLnRpbWVzKHIpLnRpbWVzKHIpLmVxKHgpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGV4dGVybmFsID0gdHJ1ZTtcclxuXHJcbiAgICByZXR1cm4gZmluYWxpc2UociwgZSwgQ3Rvci5yb3VuZGluZywgbSk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIHRoZSBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMgb2YgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbC5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuZGVjaW1hbFBsYWNlcyA9IFAuZHAgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgdyxcclxuICAgICAgZCA9IHRoaXMuZCxcclxuICAgICAgbiA9IE5hTjtcclxuXHJcbiAgICBpZiAoZCkge1xyXG4gICAgICB3ID0gZC5sZW5ndGggLSAxO1xyXG4gICAgICBuID0gKHcgLSBtYXRoZmxvb3IodGhpcy5lIC8gTE9HX0JBU0UpKSAqIExPR19CQVNFO1xyXG5cclxuICAgICAgLy8gU3VidHJhY3QgdGhlIG51bWJlciBvZiB0cmFpbGluZyB6ZXJvcyBvZiB0aGUgbGFzdCB3b3JkLlxyXG4gICAgICB3ID0gZFt3XTtcclxuICAgICAgaWYgKHcpIGZvciAoOyB3ICUgMTAgPT0gMDsgdyAvPSAxMCkgbi0tO1xyXG4gICAgICBpZiAobiA8IDApIG4gPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqICBuIC8gMCA9IElcclxuICAgKiAgbiAvIE4gPSBOXHJcbiAgICogIG4gLyBJID0gMFxyXG4gICAqICAwIC8gbiA9IDBcclxuICAgKiAgMCAvIDAgPSBOXHJcbiAgICogIDAgLyBOID0gTlxyXG4gICAqICAwIC8gSSA9IDBcclxuICAgKiAgTiAvIG4gPSBOXHJcbiAgICogIE4gLyAwID0gTlxyXG4gICAqICBOIC8gTiA9IE5cclxuICAgKiAgTiAvIEkgPSBOXHJcbiAgICogIEkgLyBuID0gSVxyXG4gICAqICBJIC8gMCA9IElcclxuICAgKiAgSSAvIE4gPSBOXHJcbiAgICogIEkgLyBJID0gTlxyXG4gICAqXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCBkaXZpZGVkIGJ5IGB5YCwgcm91bmRlZCB0b1xyXG4gICAqIGBwcmVjaXNpb25gIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKi9cclxuICBQLmRpdmlkZWRCeSA9IFAuZGl2ID0gZnVuY3Rpb24gKHkpIHtcclxuICAgIHJldHVybiBkaXZpZGUodGhpcywgbmV3IHRoaXMuY29uc3RydWN0b3IoeSkpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBpbnRlZ2VyIHBhcnQgb2YgZGl2aWRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbFxyXG4gICAqIGJ5IHRoZSB2YWx1ZSBvZiBgeWAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmAgc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuZGl2aWRlZFRvSW50ZWdlckJ5ID0gUC5kaXZUb0ludCA9IGZ1bmN0aW9uICh5KSB7XHJcbiAgICB2YXIgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG4gICAgcmV0dXJuIGZpbmFsaXNlKGRpdmlkZSh4LCBuZXcgQ3Rvcih5KSwgMCwgMSwgMSksIEN0b3IucHJlY2lzaW9uLCBDdG9yLnJvdW5kaW5nKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGlzIGVxdWFsIHRvIHRoZSB2YWx1ZSBvZiBgeWAsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICpcclxuICAgKi9cclxuICBQLmVxdWFscyA9IFAuZXEgPSBmdW5jdGlvbiAoeSkge1xyXG4gICAgcmV0dXJuIHRoaXMuY21wKHkpID09PSAwO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgcm91bmRlZCB0byBhIHdob2xlIG51bWJlciBpbiB0aGVcclxuICAgKiBkaXJlY3Rpb24gb2YgbmVnYXRpdmUgSW5maW5pdHkuXHJcbiAgICpcclxuICAgKi9cclxuICBQLmZsb29yID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIGZpbmFsaXNlKG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMpLCB0aGlzLmUgKyAxLCAzKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGlzIGdyZWF0ZXIgdGhhbiB0aGUgdmFsdWUgb2YgYHlgLCBvdGhlcndpc2UgcmV0dXJuXHJcbiAgICogZmFsc2UuXHJcbiAgICpcclxuICAgKi9cclxuICBQLmdyZWF0ZXJUaGFuID0gUC5ndCA9IGZ1bmN0aW9uICh5KSB7XHJcbiAgICByZXR1cm4gdGhpcy5jbXAoeSkgPiAwO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSB2YWx1ZSBvZiBgeWAsXHJcbiAgICogb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuZ3JlYXRlclRoYW5PckVxdWFsVG8gPSBQLmd0ZSA9IGZ1bmN0aW9uICh5KSB7XHJcbiAgICB2YXIgayA9IHRoaXMuY21wKHkpO1xyXG4gICAgcmV0dXJuIGsgPT0gMSB8fCBrID09PSAwO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBoeXBlcmJvbGljIGNvc2luZSBvZiB0aGUgdmFsdWUgaW4gcmFkaWFucyBvZiB0aGlzXHJcbiAgICogRGVjaW1hbC5cclxuICAgKlxyXG4gICAqIERvbWFpbjogWy1JbmZpbml0eSwgSW5maW5pdHldXHJcbiAgICogUmFuZ2U6IFsxLCBJbmZpbml0eV1cclxuICAgKlxyXG4gICAqIGNvc2goeCkgPSAxICsgeF4yLzIhICsgeF40LzQhICsgeF42LzYhICsgLi4uXHJcbiAgICpcclxuICAgKiBjb3NoKDApICAgICAgICAgPSAxXHJcbiAgICogY29zaCgtMCkgICAgICAgID0gMVxyXG4gICAqIGNvc2goSW5maW5pdHkpICA9IEluZmluaXR5XHJcbiAgICogY29zaCgtSW5maW5pdHkpID0gSW5maW5pdHlcclxuICAgKiBjb3NoKE5hTikgICAgICAgPSBOYU5cclxuICAgKlxyXG4gICAqICB4ICAgICAgICB0aW1lIHRha2VuIChtcykgICByZXN1bHRcclxuICAgKiAxMDAwICAgICAgOSAgICAgICAgICAgICAgICAgOS44NTAzNTU1NzAwODUyMzQ5Njk0ZSs0MzNcclxuICAgKiAxMDAwMCAgICAgMjUgICAgICAgICAgICAgICAgNC40MDM0MDkxMTI4MzE0NjA3OTM2ZSs0MzQyXHJcbiAgICogMTAwMDAwICAgIDE3MSAgICAgICAgICAgICAgIDEuNDAzMzMxNjgwMjEzMDYxNTg5N2UrNDM0MjlcclxuICAgKiAxMDAwMDAwICAgMzgxNyAgICAgICAgICAgICAgMS41MTY2MDc2OTg0MDEwNDM3NzI1ZSs0MzQyOTRcclxuICAgKiAxMDAwMDAwMCAgYWJhbmRvbmVkIGFmdGVyIDIgbWludXRlIHdhaXRcclxuICAgKlxyXG4gICAqIFRPRE8/IENvbXBhcmUgcGVyZm9ybWFuY2Ugb2YgY29zaCh4KSA9IDAuNSAqIChleHAoeCkgKyBleHAoLXgpKVxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5oeXBlcmJvbGljQ29zaW5lID0gUC5jb3NoID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGssIG4sIHByLCBybSwgbGVuLFxyXG4gICAgICB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3IsXHJcbiAgICAgIG9uZSA9IG5ldyBDdG9yKDEpO1xyXG5cclxuICAgIGlmICgheC5pc0Zpbml0ZSgpKSByZXR1cm4gbmV3IEN0b3IoeC5zID8gMSAvIDAgOiBOYU4pO1xyXG4gICAgaWYgKHguaXNaZXJvKCkpIHJldHVybiBvbmU7XHJcblxyXG4gICAgcHIgPSBDdG9yLnByZWNpc2lvbjtcclxuICAgIHJtID0gQ3Rvci5yb3VuZGluZztcclxuICAgIEN0b3IucHJlY2lzaW9uID0gcHIgKyBNYXRoLm1heCh4LmUsIHguc2QoKSkgKyA0O1xyXG4gICAgQ3Rvci5yb3VuZGluZyA9IDE7XHJcbiAgICBsZW4gPSB4LmQubGVuZ3RoO1xyXG5cclxuICAgIC8vIEFyZ3VtZW50IHJlZHVjdGlvbjogY29zKDR4KSA9IDEgLSA4Y29zXjIoeCkgKyA4Y29zXjQoeCkgKyAxXHJcbiAgICAvLyBpLmUuIGNvcyh4KSA9IDEgLSBjb3NeMih4LzQpKDggLSA4Y29zXjIoeC80KSlcclxuXHJcbiAgICAvLyBFc3RpbWF0ZSB0aGUgb3B0aW11bSBudW1iZXIgb2YgdGltZXMgdG8gdXNlIHRoZSBhcmd1bWVudCByZWR1Y3Rpb24uXHJcbiAgICAvLyBUT0RPPyBFc3RpbWF0aW9uIHJldXNlZCBmcm9tIGNvc2luZSgpIGFuZCBtYXkgbm90IGJlIG9wdGltYWwgaGVyZS5cclxuICAgIGlmIChsZW4gPCAzMikge1xyXG4gICAgICBrID0gTWF0aC5jZWlsKGxlbiAvIDMpO1xyXG4gICAgICBuID0gKDEgLyB0aW55UG93KDQsIGspKS50b1N0cmluZygpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgayA9IDE2O1xyXG4gICAgICBuID0gJzIuMzI4MzA2NDM2NTM4Njk2Mjg5MDYyNWUtMTAnO1xyXG4gICAgfVxyXG5cclxuICAgIHggPSB0YXlsb3JTZXJpZXMoQ3RvciwgMSwgeC50aW1lcyhuKSwgbmV3IEN0b3IoMSksIHRydWUpO1xyXG5cclxuICAgIC8vIFJldmVyc2UgYXJndW1lbnQgcmVkdWN0aW9uXHJcbiAgICB2YXIgY29zaDJfeCxcclxuICAgICAgaSA9IGssXHJcbiAgICAgIGQ4ID0gbmV3IEN0b3IoOCk7XHJcbiAgICBmb3IgKDsgaS0tOykge1xyXG4gICAgICBjb3NoMl94ID0geC50aW1lcyh4KTtcclxuICAgICAgeCA9IG9uZS5taW51cyhjb3NoMl94LnRpbWVzKGQ4Lm1pbnVzKGNvc2gyX3gudGltZXMoZDgpKSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmaW5hbGlzZSh4LCBDdG9yLnByZWNpc2lvbiA9IHByLCBDdG9yLnJvdW5kaW5nID0gcm0sIHRydWUpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBoeXBlcmJvbGljIHNpbmUgb2YgdGhlIHZhbHVlIGluIHJhZGlhbnMgb2YgdGhpc1xyXG4gICAqIERlY2ltYWwuXHJcbiAgICpcclxuICAgKiBEb21haW46IFstSW5maW5pdHksIEluZmluaXR5XVxyXG4gICAqIFJhbmdlOiBbLUluZmluaXR5LCBJbmZpbml0eV1cclxuICAgKlxyXG4gICAqIHNpbmgoeCkgPSB4ICsgeF4zLzMhICsgeF41LzUhICsgeF43LzchICsgLi4uXHJcbiAgICpcclxuICAgKiBzaW5oKDApICAgICAgICAgPSAwXHJcbiAgICogc2luaCgtMCkgICAgICAgID0gLTBcclxuICAgKiBzaW5oKEluZmluaXR5KSAgPSBJbmZpbml0eVxyXG4gICAqIHNpbmgoLUluZmluaXR5KSA9IC1JbmZpbml0eVxyXG4gICAqIHNpbmgoTmFOKSAgICAgICA9IE5hTlxyXG4gICAqXHJcbiAgICogeCAgICAgICAgdGltZSB0YWtlbiAobXMpXHJcbiAgICogMTAgICAgICAgMiBtc1xyXG4gICAqIDEwMCAgICAgIDUgbXNcclxuICAgKiAxMDAwICAgICAxNCBtc1xyXG4gICAqIDEwMDAwICAgIDgyIG1zXHJcbiAgICogMTAwMDAwICAgODg2IG1zICAgICAgICAgICAgMS40MDMzMzE2ODAyMTMwNjE1ODk3ZSs0MzQyOVxyXG4gICAqIDIwMDAwMCAgIDI2MTMgbXNcclxuICAgKiAzMDAwMDAgICA1NDA3IG1zXHJcbiAgICogNDAwMDAwICAgODgyNCBtc1xyXG4gICAqIDUwMDAwMCAgIDEzMDI2IG1zICAgICAgICAgIDguNzA4MDY0MzYxMjcxODA4NDEyOWUrMjE3MTQ2XHJcbiAgICogMTAwMDAwMCAgNDg1NDMgbXNcclxuICAgKlxyXG4gICAqIFRPRE8/IENvbXBhcmUgcGVyZm9ybWFuY2Ugb2Ygc2luaCh4KSA9IDAuNSAqIChleHAoeCkgLSBleHAoLXgpKVxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5oeXBlcmJvbGljU2luZSA9IFAuc2luaCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBrLCBwciwgcm0sIGxlbixcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIGlmICgheC5pc0Zpbml0ZSgpIHx8IHguaXNaZXJvKCkpIHJldHVybiBuZXcgQ3Rvcih4KTtcclxuXHJcbiAgICBwciA9IEN0b3IucHJlY2lzaW9uO1xyXG4gICAgcm0gPSBDdG9yLnJvdW5kaW5nO1xyXG4gICAgQ3Rvci5wcmVjaXNpb24gPSBwciArIE1hdGgubWF4KHguZSwgeC5zZCgpKSArIDQ7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gMTtcclxuICAgIGxlbiA9IHguZC5sZW5ndGg7XHJcblxyXG4gICAgaWYgKGxlbiA8IDMpIHtcclxuICAgICAgeCA9IHRheWxvclNlcmllcyhDdG9yLCAyLCB4LCB4LCB0cnVlKTtcclxuICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAvLyBBbHRlcm5hdGl2ZSBhcmd1bWVudCByZWR1Y3Rpb246IHNpbmgoM3gpID0gc2luaCh4KSgzICsgNHNpbmheMih4KSlcclxuICAgICAgLy8gaS5lLiBzaW5oKHgpID0gc2luaCh4LzMpKDMgKyA0c2luaF4yKHgvMykpXHJcbiAgICAgIC8vIDMgbXVsdGlwbGljYXRpb25zIGFuZCAxIGFkZGl0aW9uXHJcblxyXG4gICAgICAvLyBBcmd1bWVudCByZWR1Y3Rpb246IHNpbmgoNXgpID0gc2luaCh4KSg1ICsgc2luaF4yKHgpKDIwICsgMTZzaW5oXjIoeCkpKVxyXG4gICAgICAvLyBpLmUuIHNpbmgoeCkgPSBzaW5oKHgvNSkoNSArIHNpbmheMih4LzUpKDIwICsgMTZzaW5oXjIoeC81KSkpXHJcbiAgICAgIC8vIDQgbXVsdGlwbGljYXRpb25zIGFuZCAyIGFkZGl0aW9uc1xyXG5cclxuICAgICAgLy8gRXN0aW1hdGUgdGhlIG9wdGltdW0gbnVtYmVyIG9mIHRpbWVzIHRvIHVzZSB0aGUgYXJndW1lbnQgcmVkdWN0aW9uLlxyXG4gICAgICBrID0gMS40ICogTWF0aC5zcXJ0KGxlbik7XHJcbiAgICAgIGsgPSBrID4gMTYgPyAxNiA6IGsgfCAwO1xyXG5cclxuICAgICAgeCA9IHgudGltZXMoMSAvIHRpbnlQb3coNSwgaykpO1xyXG4gICAgICB4ID0gdGF5bG9yU2VyaWVzKEN0b3IsIDIsIHgsIHgsIHRydWUpO1xyXG5cclxuICAgICAgLy8gUmV2ZXJzZSBhcmd1bWVudCByZWR1Y3Rpb25cclxuICAgICAgdmFyIHNpbmgyX3gsXHJcbiAgICAgICAgZDUgPSBuZXcgQ3Rvcig1KSxcclxuICAgICAgICBkMTYgPSBuZXcgQ3RvcigxNiksXHJcbiAgICAgICAgZDIwID0gbmV3IEN0b3IoMjApO1xyXG4gICAgICBmb3IgKDsgay0tOykge1xyXG4gICAgICAgIHNpbmgyX3ggPSB4LnRpbWVzKHgpO1xyXG4gICAgICAgIHggPSB4LnRpbWVzKGQ1LnBsdXMoc2luaDJfeC50aW1lcyhkMTYudGltZXMoc2luaDJfeCkucGx1cyhkMjApKSkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgQ3Rvci5wcmVjaXNpb24gPSBwcjtcclxuICAgIEN0b3Iucm91bmRpbmcgPSBybTtcclxuXHJcbiAgICByZXR1cm4gZmluYWxpc2UoeCwgcHIsIHJtLCB0cnVlKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgaHlwZXJib2xpYyB0YW5nZW50IG9mIHRoZSB2YWx1ZSBpbiByYWRpYW5zIG9mIHRoaXNcclxuICAgKiBEZWNpbWFsLlxyXG4gICAqXHJcbiAgICogRG9tYWluOiBbLUluZmluaXR5LCBJbmZpbml0eV1cclxuICAgKiBSYW5nZTogWy0xLCAxXVxyXG4gICAqXHJcbiAgICogdGFuaCh4KSA9IHNpbmgoeCkgLyBjb3NoKHgpXHJcbiAgICpcclxuICAgKiB0YW5oKDApICAgICAgICAgPSAwXHJcbiAgICogdGFuaCgtMCkgICAgICAgID0gLTBcclxuICAgKiB0YW5oKEluZmluaXR5KSAgPSAxXHJcbiAgICogdGFuaCgtSW5maW5pdHkpID0gLTFcclxuICAgKiB0YW5oKE5hTikgICAgICAgPSBOYU5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuaHlwZXJib2xpY1RhbmdlbnQgPSBQLnRhbmggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgcHIsIHJtLFxyXG4gICAgICB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7XHJcblxyXG4gICAgaWYgKCF4LmlzRmluaXRlKCkpIHJldHVybiBuZXcgQ3Rvcih4LnMpO1xyXG4gICAgaWYgKHguaXNaZXJvKCkpIHJldHVybiBuZXcgQ3Rvcih4KTtcclxuXHJcbiAgICBwciA9IEN0b3IucHJlY2lzaW9uO1xyXG4gICAgcm0gPSBDdG9yLnJvdW5kaW5nO1xyXG4gICAgQ3Rvci5wcmVjaXNpb24gPSBwciArIDc7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gMTtcclxuXHJcbiAgICByZXR1cm4gZGl2aWRlKHguc2luaCgpLCB4LmNvc2goKSwgQ3Rvci5wcmVjaXNpb24gPSBwciwgQ3Rvci5yb3VuZGluZyA9IHJtKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgYXJjY29zaW5lIChpbnZlcnNlIGNvc2luZSkgaW4gcmFkaWFucyBvZiB0aGUgdmFsdWUgb2ZcclxuICAgKiB0aGlzIERlY2ltYWwuXHJcbiAgICpcclxuICAgKiBEb21haW46IFstMSwgMV1cclxuICAgKiBSYW5nZTogWzAsIHBpXVxyXG4gICAqXHJcbiAgICogYWNvcyh4KSA9IHBpLzIgLSBhc2luKHgpXHJcbiAgICpcclxuICAgKiBhY29zKDApICAgICAgID0gcGkvMlxyXG4gICAqIGFjb3MoLTApICAgICAgPSBwaS8yXHJcbiAgICogYWNvcygxKSAgICAgICA9IDBcclxuICAgKiBhY29zKC0xKSAgICAgID0gcGlcclxuICAgKiBhY29zKDEvMikgICAgID0gcGkvM1xyXG4gICAqIGFjb3MoLTEvMikgICAgPSAyKnBpLzNcclxuICAgKiBhY29zKHx4fCA+IDEpID0gTmFOXHJcbiAgICogYWNvcyhOYU4pICAgICA9IE5hTlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5pbnZlcnNlQ29zaW5lID0gUC5hY29zID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGhhbGZQaSxcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yLFxyXG4gICAgICBrID0geC5hYnMoKS5jbXAoMSksXHJcbiAgICAgIHByID0gQ3Rvci5wcmVjaXNpb24sXHJcbiAgICAgIHJtID0gQ3Rvci5yb3VuZGluZztcclxuXHJcbiAgICBpZiAoayAhPT0gLTEpIHtcclxuICAgICAgcmV0dXJuIGsgPT09IDBcclxuICAgICAgICAvLyB8eHwgaXMgMVxyXG4gICAgICAgID8geC5pc05lZygpID8gZ2V0UGkoQ3RvciwgcHIsIHJtKSA6IG5ldyBDdG9yKDApXHJcbiAgICAgICAgLy8gfHh8ID4gMSBvciB4IGlzIE5hTlxyXG4gICAgICAgIDogbmV3IEN0b3IoTmFOKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoeC5pc1plcm8oKSkgcmV0dXJuIGdldFBpKEN0b3IsIHByICsgNCwgcm0pLnRpbWVzKDAuNSk7XHJcblxyXG4gICAgLy8gVE9ETz8gU3BlY2lhbCBjYXNlIGFjb3MoMC41KSA9IHBpLzMgYW5kIGFjb3MoLTAuNSkgPSAyKnBpLzNcclxuXHJcbiAgICBDdG9yLnByZWNpc2lvbiA9IHByICsgNjtcclxuICAgIEN0b3Iucm91bmRpbmcgPSAxO1xyXG5cclxuICAgIHggPSB4LmFzaW4oKTtcclxuICAgIGhhbGZQaSA9IGdldFBpKEN0b3IsIHByICsgNCwgcm0pLnRpbWVzKDAuNSk7XHJcblxyXG4gICAgQ3Rvci5wcmVjaXNpb24gPSBwcjtcclxuICAgIEN0b3Iucm91bmRpbmcgPSBybTtcclxuXHJcbiAgICByZXR1cm4gaGFsZlBpLm1pbnVzKHgpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBpbnZlcnNlIG9mIHRoZSBoeXBlcmJvbGljIGNvc2luZSBpbiByYWRpYW5zIG9mIHRoZVxyXG4gICAqIHZhbHVlIG9mIHRoaXMgRGVjaW1hbC5cclxuICAgKlxyXG4gICAqIERvbWFpbjogWzEsIEluZmluaXR5XVxyXG4gICAqIFJhbmdlOiBbMCwgSW5maW5pdHldXHJcbiAgICpcclxuICAgKiBhY29zaCh4KSA9IGxuKHggKyBzcXJ0KHheMiAtIDEpKVxyXG4gICAqXHJcbiAgICogYWNvc2goeCA8IDEpICAgICA9IE5hTlxyXG4gICAqIGFjb3NoKE5hTikgICAgICAgPSBOYU5cclxuICAgKiBhY29zaChJbmZpbml0eSkgID0gSW5maW5pdHlcclxuICAgKiBhY29zaCgtSW5maW5pdHkpID0gTmFOXHJcbiAgICogYWNvc2goMCkgICAgICAgICA9IE5hTlxyXG4gICAqIGFjb3NoKC0wKSAgICAgICAgPSBOYU5cclxuICAgKiBhY29zaCgxKSAgICAgICAgID0gMFxyXG4gICAqIGFjb3NoKC0xKSAgICAgICAgPSBOYU5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuaW52ZXJzZUh5cGVyYm9saWNDb3NpbmUgPSBQLmFjb3NoID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHByLCBybSxcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIGlmICh4Lmx0ZSgxKSkgcmV0dXJuIG5ldyBDdG9yKHguZXEoMSkgPyAwIDogTmFOKTtcclxuICAgIGlmICgheC5pc0Zpbml0ZSgpKSByZXR1cm4gbmV3IEN0b3IoeCk7XHJcblxyXG4gICAgcHIgPSBDdG9yLnByZWNpc2lvbjtcclxuICAgIHJtID0gQ3Rvci5yb3VuZGluZztcclxuICAgIEN0b3IucHJlY2lzaW9uID0gcHIgKyBNYXRoLm1heChNYXRoLmFicyh4LmUpLCB4LnNkKCkpICsgNDtcclxuICAgIEN0b3Iucm91bmRpbmcgPSAxO1xyXG4gICAgZXh0ZXJuYWwgPSBmYWxzZTtcclxuXHJcbiAgICB4ID0geC50aW1lcyh4KS5taW51cygxKS5zcXJ0KCkucGx1cyh4KTtcclxuXHJcbiAgICBleHRlcm5hbCA9IHRydWU7XHJcbiAgICBDdG9yLnByZWNpc2lvbiA9IHByO1xyXG4gICAgQ3Rvci5yb3VuZGluZyA9IHJtO1xyXG5cclxuICAgIHJldHVybiB4LmxuKCk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGludmVyc2Ugb2YgdGhlIGh5cGVyYm9saWMgc2luZSBpbiByYWRpYW5zIG9mIHRoZSB2YWx1ZVxyXG4gICAqIG9mIHRoaXMgRGVjaW1hbC5cclxuICAgKlxyXG4gICAqIERvbWFpbjogWy1JbmZpbml0eSwgSW5maW5pdHldXHJcbiAgICogUmFuZ2U6IFstSW5maW5pdHksIEluZmluaXR5XVxyXG4gICAqXHJcbiAgICogYXNpbmgoeCkgPSBsbih4ICsgc3FydCh4XjIgKyAxKSlcclxuICAgKlxyXG4gICAqIGFzaW5oKE5hTikgICAgICAgPSBOYU5cclxuICAgKiBhc2luaChJbmZpbml0eSkgID0gSW5maW5pdHlcclxuICAgKiBhc2luaCgtSW5maW5pdHkpID0gLUluZmluaXR5XHJcbiAgICogYXNpbmgoMCkgICAgICAgICA9IDBcclxuICAgKiBhc2luaCgtMCkgICAgICAgID0gLTBcclxuICAgKlxyXG4gICAqL1xyXG4gIFAuaW52ZXJzZUh5cGVyYm9saWNTaW5lID0gUC5hc2luaCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBwciwgcm0sXHJcbiAgICAgIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjtcclxuXHJcbiAgICBpZiAoIXguaXNGaW5pdGUoKSB8fCB4LmlzWmVybygpKSByZXR1cm4gbmV3IEN0b3IoeCk7XHJcblxyXG4gICAgcHIgPSBDdG9yLnByZWNpc2lvbjtcclxuICAgIHJtID0gQ3Rvci5yb3VuZGluZztcclxuICAgIEN0b3IucHJlY2lzaW9uID0gcHIgKyAyICogTWF0aC5tYXgoTWF0aC5hYnMoeC5lKSwgeC5zZCgpKSArIDY7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gMTtcclxuICAgIGV4dGVybmFsID0gZmFsc2U7XHJcblxyXG4gICAgeCA9IHgudGltZXMoeCkucGx1cygxKS5zcXJ0KCkucGx1cyh4KTtcclxuXHJcbiAgICBleHRlcm5hbCA9IHRydWU7XHJcbiAgICBDdG9yLnByZWNpc2lvbiA9IHByO1xyXG4gICAgQ3Rvci5yb3VuZGluZyA9IHJtO1xyXG5cclxuICAgIHJldHVybiB4LmxuKCk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGludmVyc2Ugb2YgdGhlIGh5cGVyYm9saWMgdGFuZ2VudCBpbiByYWRpYW5zIG9mIHRoZVxyXG4gICAqIHZhbHVlIG9mIHRoaXMgRGVjaW1hbC5cclxuICAgKlxyXG4gICAqIERvbWFpbjogWy0xLCAxXVxyXG4gICAqIFJhbmdlOiBbLUluZmluaXR5LCBJbmZpbml0eV1cclxuICAgKlxyXG4gICAqIGF0YW5oKHgpID0gMC41ICogbG4oKDEgKyB4KSAvICgxIC0geCkpXHJcbiAgICpcclxuICAgKiBhdGFuaCh8eHwgPiAxKSAgID0gTmFOXHJcbiAgICogYXRhbmgoTmFOKSAgICAgICA9IE5hTlxyXG4gICAqIGF0YW5oKEluZmluaXR5KSAgPSBOYU5cclxuICAgKiBhdGFuaCgtSW5maW5pdHkpID0gTmFOXHJcbiAgICogYXRhbmgoMCkgICAgICAgICA9IDBcclxuICAgKiBhdGFuaCgtMCkgICAgICAgID0gLTBcclxuICAgKiBhdGFuaCgxKSAgICAgICAgID0gSW5maW5pdHlcclxuICAgKiBhdGFuaCgtMSkgICAgICAgID0gLUluZmluaXR5XHJcbiAgICpcclxuICAgKi9cclxuICBQLmludmVyc2VIeXBlcmJvbGljVGFuZ2VudCA9IFAuYXRhbmggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgcHIsIHJtLCB3cHIsIHhzZCxcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIGlmICgheC5pc0Zpbml0ZSgpKSByZXR1cm4gbmV3IEN0b3IoTmFOKTtcclxuICAgIGlmICh4LmUgPj0gMCkgcmV0dXJuIG5ldyBDdG9yKHguYWJzKCkuZXEoMSkgPyB4LnMgLyAwIDogeC5pc1plcm8oKSA/IHggOiBOYU4pO1xyXG5cclxuICAgIHByID0gQ3Rvci5wcmVjaXNpb247XHJcbiAgICBybSA9IEN0b3Iucm91bmRpbmc7XHJcbiAgICB4c2QgPSB4LnNkKCk7XHJcblxyXG4gICAgaWYgKE1hdGgubWF4KHhzZCwgcHIpIDwgMiAqIC14LmUgLSAxKSByZXR1cm4gZmluYWxpc2UobmV3IEN0b3IoeCksIHByLCBybSwgdHJ1ZSk7XHJcblxyXG4gICAgQ3Rvci5wcmVjaXNpb24gPSB3cHIgPSB4c2QgLSB4LmU7XHJcblxyXG4gICAgeCA9IGRpdmlkZSh4LnBsdXMoMSksIG5ldyBDdG9yKDEpLm1pbnVzKHgpLCB3cHIgKyBwciwgMSk7XHJcblxyXG4gICAgQ3Rvci5wcmVjaXNpb24gPSBwciArIDQ7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gMTtcclxuXHJcbiAgICB4ID0geC5sbigpO1xyXG5cclxuICAgIEN0b3IucHJlY2lzaW9uID0gcHI7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gcm07XHJcblxyXG4gICAgcmV0dXJuIHgudGltZXMoMC41KTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgYXJjc2luZSAoaW52ZXJzZSBzaW5lKSBpbiByYWRpYW5zIG9mIHRoZSB2YWx1ZSBvZiB0aGlzXHJcbiAgICogRGVjaW1hbC5cclxuICAgKlxyXG4gICAqIERvbWFpbjogWy1JbmZpbml0eSwgSW5maW5pdHldXHJcbiAgICogUmFuZ2U6IFstcGkvMiwgcGkvMl1cclxuICAgKlxyXG4gICAqIGFzaW4oeCkgPSAyKmF0YW4oeC8oMSArIHNxcnQoMSAtIHheMikpKVxyXG4gICAqXHJcbiAgICogYXNpbigwKSAgICAgICA9IDBcclxuICAgKiBhc2luKC0wKSAgICAgID0gLTBcclxuICAgKiBhc2luKDEvMikgICAgID0gcGkvNlxyXG4gICAqIGFzaW4oLTEvMikgICAgPSAtcGkvNlxyXG4gICAqIGFzaW4oMSkgICAgICAgPSBwaS8yXHJcbiAgICogYXNpbigtMSkgICAgICA9IC1waS8yXHJcbiAgICogYXNpbih8eHwgPiAxKSA9IE5hTlxyXG4gICAqIGFzaW4oTmFOKSAgICAgPSBOYU5cclxuICAgKlxyXG4gICAqIFRPRE8/IENvbXBhcmUgcGVyZm9ybWFuY2Ugb2YgVGF5bG9yIHNlcmllcy5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuaW52ZXJzZVNpbmUgPSBQLmFzaW4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgaGFsZlBpLCBrLFxyXG4gICAgICBwciwgcm0sXHJcbiAgICAgIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjtcclxuXHJcbiAgICBpZiAoeC5pc1plcm8oKSkgcmV0dXJuIG5ldyBDdG9yKHgpO1xyXG5cclxuICAgIGsgPSB4LmFicygpLmNtcCgxKTtcclxuICAgIHByID0gQ3Rvci5wcmVjaXNpb247XHJcbiAgICBybSA9IEN0b3Iucm91bmRpbmc7XHJcblxyXG4gICAgaWYgKGsgIT09IC0xKSB7XHJcblxyXG4gICAgICAvLyB8eHwgaXMgMVxyXG4gICAgICBpZiAoayA9PT0gMCkge1xyXG4gICAgICAgIGhhbGZQaSA9IGdldFBpKEN0b3IsIHByICsgNCwgcm0pLnRpbWVzKDAuNSk7XHJcbiAgICAgICAgaGFsZlBpLnMgPSB4LnM7XHJcbiAgICAgICAgcmV0dXJuIGhhbGZQaTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gfHh8ID4gMSBvciB4IGlzIE5hTlxyXG4gICAgICByZXR1cm4gbmV3IEN0b3IoTmFOKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBUT0RPPyBTcGVjaWFsIGNhc2UgYXNpbigxLzIpID0gcGkvNiBhbmQgYXNpbigtMS8yKSA9IC1waS82XHJcblxyXG4gICAgQ3Rvci5wcmVjaXNpb24gPSBwciArIDY7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gMTtcclxuXHJcbiAgICB4ID0geC5kaXYobmV3IEN0b3IoMSkubWludXMoeC50aW1lcyh4KSkuc3FydCgpLnBsdXMoMSkpLmF0YW4oKTtcclxuXHJcbiAgICBDdG9yLnByZWNpc2lvbiA9IHByO1xyXG4gICAgQ3Rvci5yb3VuZGluZyA9IHJtO1xyXG5cclxuICAgIHJldHVybiB4LnRpbWVzKDIpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBhcmN0YW5nZW50IChpbnZlcnNlIHRhbmdlbnQpIGluIHJhZGlhbnMgb2YgdGhlIHZhbHVlXHJcbiAgICogb2YgdGhpcyBEZWNpbWFsLlxyXG4gICAqXHJcbiAgICogRG9tYWluOiBbLUluZmluaXR5LCBJbmZpbml0eV1cclxuICAgKiBSYW5nZTogWy1waS8yLCBwaS8yXVxyXG4gICAqXHJcbiAgICogYXRhbih4KSA9IHggLSB4XjMvMyArIHheNS81IC0geF43LzcgKyAuLi5cclxuICAgKlxyXG4gICAqIGF0YW4oMCkgICAgICAgICA9IDBcclxuICAgKiBhdGFuKC0wKSAgICAgICAgPSAtMFxyXG4gICAqIGF0YW4oMSkgICAgICAgICA9IHBpLzRcclxuICAgKiBhdGFuKC0xKSAgICAgICAgPSAtcGkvNFxyXG4gICAqIGF0YW4oSW5maW5pdHkpICA9IHBpLzJcclxuICAgKiBhdGFuKC1JbmZpbml0eSkgPSAtcGkvMlxyXG4gICAqIGF0YW4oTmFOKSAgICAgICA9IE5hTlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5pbnZlcnNlVGFuZ2VudCA9IFAuYXRhbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBpLCBqLCBrLCBuLCBweCwgdCwgciwgd3ByLCB4MixcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yLFxyXG4gICAgICBwciA9IEN0b3IucHJlY2lzaW9uLFxyXG4gICAgICBybSA9IEN0b3Iucm91bmRpbmc7XHJcblxyXG4gICAgaWYgKCF4LmlzRmluaXRlKCkpIHtcclxuICAgICAgaWYgKCF4LnMpIHJldHVybiBuZXcgQ3RvcihOYU4pO1xyXG4gICAgICBpZiAocHIgKyA0IDw9IFBJX1BSRUNJU0lPTikge1xyXG4gICAgICAgIHIgPSBnZXRQaShDdG9yLCBwciArIDQsIHJtKS50aW1lcygwLjUpO1xyXG4gICAgICAgIHIucyA9IHgucztcclxuICAgICAgICByZXR1cm4gcjtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh4LmlzWmVybygpKSB7XHJcbiAgICAgIHJldHVybiBuZXcgQ3Rvcih4KTtcclxuICAgIH0gZWxzZSBpZiAoeC5hYnMoKS5lcSgxKSAmJiBwciArIDQgPD0gUElfUFJFQ0lTSU9OKSB7XHJcbiAgICAgIHIgPSBnZXRQaShDdG9yLCBwciArIDQsIHJtKS50aW1lcygwLjI1KTtcclxuICAgICAgci5zID0geC5zO1xyXG4gICAgICByZXR1cm4gcjtcclxuICAgIH1cclxuXHJcbiAgICBDdG9yLnByZWNpc2lvbiA9IHdwciA9IHByICsgMTA7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gMTtcclxuXHJcbiAgICAvLyBUT0RPPyBpZiAoeCA+PSAxICYmIHByIDw9IFBJX1BSRUNJU0lPTikgYXRhbih4KSA9IGhhbGZQaSAqIHgucyAtIGF0YW4oMSAvIHgpO1xyXG5cclxuICAgIC8vIEFyZ3VtZW50IHJlZHVjdGlvblxyXG4gICAgLy8gRW5zdXJlIHx4fCA8IDAuNDJcclxuICAgIC8vIGF0YW4oeCkgPSAyICogYXRhbih4IC8gKDEgKyBzcXJ0KDEgKyB4XjIpKSlcclxuXHJcbiAgICBrID0gTWF0aC5taW4oMjgsIHdwciAvIExPR19CQVNFICsgMiB8IDApO1xyXG5cclxuICAgIGZvciAoaSA9IGs7IGk7IC0taSkgeCA9IHguZGl2KHgudGltZXMoeCkucGx1cygxKS5zcXJ0KCkucGx1cygxKSk7XHJcblxyXG4gICAgZXh0ZXJuYWwgPSBmYWxzZTtcclxuXHJcbiAgICBqID0gTWF0aC5jZWlsKHdwciAvIExPR19CQVNFKTtcclxuICAgIG4gPSAxO1xyXG4gICAgeDIgPSB4LnRpbWVzKHgpO1xyXG4gICAgciA9IG5ldyBDdG9yKHgpO1xyXG4gICAgcHggPSB4O1xyXG5cclxuICAgIC8vIGF0YW4oeCkgPSB4IC0geF4zLzMgKyB4XjUvNSAtIHheNy83ICsgLi4uXHJcbiAgICBmb3IgKDsgaSAhPT0gLTE7KSB7XHJcbiAgICAgIHB4ID0gcHgudGltZXMoeDIpO1xyXG4gICAgICB0ID0gci5taW51cyhweC5kaXYobiArPSAyKSk7XHJcblxyXG4gICAgICBweCA9IHB4LnRpbWVzKHgyKTtcclxuICAgICAgciA9IHQucGx1cyhweC5kaXYobiArPSAyKSk7XHJcblxyXG4gICAgICBpZiAoci5kW2pdICE9PSB2b2lkIDApIGZvciAoaSA9IGo7IHIuZFtpXSA9PT0gdC5kW2ldICYmIGktLTspO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChrKSByID0gci50aW1lcygyIDw8IChrIC0gMSkpO1xyXG5cclxuICAgIGV4dGVybmFsID0gdHJ1ZTtcclxuXHJcbiAgICByZXR1cm4gZmluYWxpc2UociwgQ3Rvci5wcmVjaXNpb24gPSBwciwgQ3Rvci5yb3VuZGluZyA9IHJtLCB0cnVlKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGlzIGEgZmluaXRlIG51bWJlciwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuaXNGaW5pdGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gISF0aGlzLmQ7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCBpcyBhbiBpbnRlZ2VyLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5pc0ludGVnZXIgPSBQLmlzSW50ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuICEhdGhpcy5kICYmIG1hdGhmbG9vcih0aGlzLmUgLyBMT0dfQkFTRSkgPiB0aGlzLmQubGVuZ3RoIC0gMjtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGlzIE5hTiwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuaXNOYU4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gIXRoaXMucztcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGlzIG5lZ2F0aXZlLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5pc05lZ2F0aXZlID0gUC5pc05lZyA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB0aGlzLnMgPCAwO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgaXMgcG9zaXRpdmUsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICpcclxuICAgKi9cclxuICBQLmlzUG9zaXRpdmUgPSBQLmlzUG9zID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHRoaXMucyA+IDA7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCBpcyAwIG9yIC0wLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5pc1plcm8gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gISF0aGlzLmQgJiYgdGhpcy5kWzBdID09PSAwO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgaXMgbGVzcyB0aGFuIGB5YCwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAubGVzc1RoYW4gPSBQLmx0ID0gZnVuY3Rpb24gKHkpIHtcclxuICAgIHJldHVybiB0aGlzLmNtcCh5KSA8IDA7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYHlgLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5sZXNzVGhhbk9yRXF1YWxUbyA9IFAubHRlID0gZnVuY3Rpb24gKHkpIHtcclxuICAgIHJldHVybiB0aGlzLmNtcCh5KSA8IDE7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIHRoZSBsb2dhcml0aG0gb2YgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCB0byB0aGUgc3BlY2lmaWVkIGJhc2UsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmBcclxuICAgKiBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogSWYgbm8gYmFzZSBpcyBzcGVjaWZpZWQsIHJldHVybiBsb2dbMTBdKGFyZykuXHJcbiAgICpcclxuICAgKiBsb2dbYmFzZV0oYXJnKSA9IGxuKGFyZykgLyBsbihiYXNlKVxyXG4gICAqXHJcbiAgICogVGhlIHJlc3VsdCB3aWxsIGFsd2F5cyBiZSBjb3JyZWN0bHkgcm91bmRlZCBpZiB0aGUgYmFzZSBvZiB0aGUgbG9nIGlzIDEwLCBhbmQgJ2FsbW9zdCBhbHdheXMnXHJcbiAgICogb3RoZXJ3aXNlOlxyXG4gICAqXHJcbiAgICogRGVwZW5kaW5nIG9uIHRoZSByb3VuZGluZyBtb2RlLCB0aGUgcmVzdWx0IG1heSBiZSBpbmNvcnJlY3RseSByb3VuZGVkIGlmIHRoZSBmaXJzdCBmaWZ0ZWVuXHJcbiAgICogcm91bmRpbmcgZGlnaXRzIGFyZSBbNDldOTk5OTk5OTk5OTk5OTkgb3IgWzUwXTAwMDAwMDAwMDAwMDAwLiBJbiB0aGF0IGNhc2UsIHRoZSBtYXhpbXVtIGVycm9yXHJcbiAgICogYmV0d2VlbiB0aGUgcmVzdWx0IGFuZCB0aGUgY29ycmVjdGx5IHJvdW5kZWQgcmVzdWx0IHdpbGwgYmUgb25lIHVscCAodW5pdCBpbiB0aGUgbGFzdCBwbGFjZSkuXHJcbiAgICpcclxuICAgKiBsb2dbLWJdKGEpICAgICAgID0gTmFOXHJcbiAgICogbG9nWzBdKGEpICAgICAgICA9IE5hTlxyXG4gICAqIGxvZ1sxXShhKSAgICAgICAgPSBOYU5cclxuICAgKiBsb2dbTmFOXShhKSAgICAgID0gTmFOXHJcbiAgICogbG9nW0luZmluaXR5XShhKSA9IE5hTlxyXG4gICAqIGxvZ1tiXSgwKSAgICAgICAgPSAtSW5maW5pdHlcclxuICAgKiBsb2dbYl0oLTApICAgICAgID0gLUluZmluaXR5XHJcbiAgICogbG9nW2JdKC1hKSAgICAgICA9IE5hTlxyXG4gICAqIGxvZ1tiXSgxKSAgICAgICAgPSAwXHJcbiAgICogbG9nW2JdKEluZmluaXR5KSA9IEluZmluaXR5XHJcbiAgICogbG9nW2JdKE5hTikgICAgICA9IE5hTlxyXG4gICAqXHJcbiAgICogW2Jhc2VdIHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IFRoZSBiYXNlIG9mIHRoZSBsb2dhcml0aG0uXHJcbiAgICpcclxuICAgKi9cclxuICBQLmxvZ2FyaXRobSA9IFAubG9nID0gZnVuY3Rpb24gKGJhc2UpIHtcclxuICAgIHZhciBpc0Jhc2UxMCwgZCwgZGVub21pbmF0b3IsIGssIGluZiwgbnVtLCBzZCwgcixcclxuICAgICAgYXJnID0gdGhpcyxcclxuICAgICAgQ3RvciA9IGFyZy5jb25zdHJ1Y3RvcixcclxuICAgICAgcHIgPSBDdG9yLnByZWNpc2lvbixcclxuICAgICAgcm0gPSBDdG9yLnJvdW5kaW5nLFxyXG4gICAgICBndWFyZCA9IDU7XHJcblxyXG4gICAgLy8gRGVmYXVsdCBiYXNlIGlzIDEwLlxyXG4gICAgaWYgKGJhc2UgPT0gbnVsbCkge1xyXG4gICAgICBiYXNlID0gbmV3IEN0b3IoMTApO1xyXG4gICAgICBpc0Jhc2UxMCA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBiYXNlID0gbmV3IEN0b3IoYmFzZSk7XHJcbiAgICAgIGQgPSBiYXNlLmQ7XHJcblxyXG4gICAgICAvLyBSZXR1cm4gTmFOIGlmIGJhc2UgaXMgbmVnYXRpdmUsIG9yIG5vbi1maW5pdGUsIG9yIGlzIDAgb3IgMS5cclxuICAgICAgaWYgKGJhc2UucyA8IDAgfHwgIWQgfHwgIWRbMF0gfHwgYmFzZS5lcSgxKSkgcmV0dXJuIG5ldyBDdG9yKE5hTik7XHJcblxyXG4gICAgICBpc0Jhc2UxMCA9IGJhc2UuZXEoMTApO1xyXG4gICAgfVxyXG5cclxuICAgIGQgPSBhcmcuZDtcclxuXHJcbiAgICAvLyBJcyBhcmcgbmVnYXRpdmUsIG5vbi1maW5pdGUsIDAgb3IgMT9cclxuICAgIGlmIChhcmcucyA8IDAgfHwgIWQgfHwgIWRbMF0gfHwgYXJnLmVxKDEpKSB7XHJcbiAgICAgIHJldHVybiBuZXcgQ3RvcihkICYmICFkWzBdID8gLTEgLyAwIDogYXJnLnMgIT0gMSA/IE5hTiA6IGQgPyAwIDogMSAvIDApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFRoZSByZXN1bHQgd2lsbCBoYXZlIGEgbm9uLXRlcm1pbmF0aW5nIGRlY2ltYWwgZXhwYW5zaW9uIGlmIGJhc2UgaXMgMTAgYW5kIGFyZyBpcyBub3QgYW5cclxuICAgIC8vIGludGVnZXIgcG93ZXIgb2YgMTAuXHJcbiAgICBpZiAoaXNCYXNlMTApIHtcclxuICAgICAgaWYgKGQubGVuZ3RoID4gMSkge1xyXG4gICAgICAgIGluZiA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZm9yIChrID0gZFswXTsgayAlIDEwID09PSAwOykgayAvPSAxMDtcclxuICAgICAgICBpbmYgPSBrICE9PSAxO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZXh0ZXJuYWwgPSBmYWxzZTtcclxuICAgIHNkID0gcHIgKyBndWFyZDtcclxuICAgIG51bSA9IG5hdHVyYWxMb2dhcml0aG0oYXJnLCBzZCk7XHJcbiAgICBkZW5vbWluYXRvciA9IGlzQmFzZTEwID8gZ2V0TG4xMChDdG9yLCBzZCArIDEwKSA6IG5hdHVyYWxMb2dhcml0aG0oYmFzZSwgc2QpO1xyXG5cclxuICAgIC8vIFRoZSByZXN1bHQgd2lsbCBoYXZlIDUgcm91bmRpbmcgZGlnaXRzLlxyXG4gICAgciA9IGRpdmlkZShudW0sIGRlbm9taW5hdG9yLCBzZCwgMSk7XHJcblxyXG4gICAgLy8gSWYgYXQgYSByb3VuZGluZyBib3VuZGFyeSwgaS5lLiB0aGUgcmVzdWx0J3Mgcm91bmRpbmcgZGlnaXRzIGFyZSBbNDldOTk5OSBvciBbNTBdMDAwMCxcclxuICAgIC8vIGNhbGN1bGF0ZSAxMCBmdXJ0aGVyIGRpZ2l0cy5cclxuICAgIC8vXHJcbiAgICAvLyBJZiB0aGUgcmVzdWx0IGlzIGtub3duIHRvIGhhdmUgYW4gaW5maW5pdGUgZGVjaW1hbCBleHBhbnNpb24sIHJlcGVhdCB0aGlzIHVudGlsIGl0IGlzIGNsZWFyXHJcbiAgICAvLyB0aGF0IHRoZSByZXN1bHQgaXMgYWJvdmUgb3IgYmVsb3cgdGhlIGJvdW5kYXJ5LiBPdGhlcndpc2UsIGlmIGFmdGVyIGNhbGN1bGF0aW5nIHRoZSAxMFxyXG4gICAgLy8gZnVydGhlciBkaWdpdHMsIHRoZSBsYXN0IDE0IGFyZSBuaW5lcywgcm91bmQgdXAgYW5kIGFzc3VtZSB0aGUgcmVzdWx0IGlzIGV4YWN0LlxyXG4gICAgLy8gQWxzbyBhc3N1bWUgdGhlIHJlc3VsdCBpcyBleGFjdCBpZiB0aGUgbGFzdCAxNCBhcmUgemVyby5cclxuICAgIC8vXHJcbiAgICAvLyBFeGFtcGxlIG9mIGEgcmVzdWx0IHRoYXQgd2lsbCBiZSBpbmNvcnJlY3RseSByb3VuZGVkOlxyXG4gICAgLy8gbG9nWzEwNDg1NzZdKDQ1MDM1OTk2MjczNzA1MDIpID0gMi42MDAwMDAwMDAwMDAwMDAwOTYxMDI3OTUxMTQ0NDc0Ni4uLlxyXG4gICAgLy8gVGhlIGFib3ZlIHJlc3VsdCBjb3JyZWN0bHkgcm91bmRlZCB1c2luZyBST1VORF9DRUlMIHRvIDEgZGVjaW1hbCBwbGFjZSBzaG91bGQgYmUgMi43LCBidXQgaXRcclxuICAgIC8vIHdpbGwgYmUgZ2l2ZW4gYXMgMi42IGFzIHRoZXJlIGFyZSAxNSB6ZXJvcyBpbW1lZGlhdGVseSBhZnRlciB0aGUgcmVxdWVzdGVkIGRlY2ltYWwgcGxhY2UsIHNvXHJcbiAgICAvLyB0aGUgZXhhY3QgcmVzdWx0IHdvdWxkIGJlIGFzc3VtZWQgdG8gYmUgMi42LCB3aGljaCByb3VuZGVkIHVzaW5nIFJPVU5EX0NFSUwgdG8gMSBkZWNpbWFsXHJcbiAgICAvLyBwbGFjZSBpcyBzdGlsbCAyLjYuXHJcbiAgICBpZiAoY2hlY2tSb3VuZGluZ0RpZ2l0cyhyLmQsIGsgPSBwciwgcm0pKSB7XHJcblxyXG4gICAgICBkbyB7XHJcbiAgICAgICAgc2QgKz0gMTA7XHJcbiAgICAgICAgbnVtID0gbmF0dXJhbExvZ2FyaXRobShhcmcsIHNkKTtcclxuICAgICAgICBkZW5vbWluYXRvciA9IGlzQmFzZTEwID8gZ2V0TG4xMChDdG9yLCBzZCArIDEwKSA6IG5hdHVyYWxMb2dhcml0aG0oYmFzZSwgc2QpO1xyXG4gICAgICAgIHIgPSBkaXZpZGUobnVtLCBkZW5vbWluYXRvciwgc2QsIDEpO1xyXG5cclxuICAgICAgICBpZiAoIWluZikge1xyXG5cclxuICAgICAgICAgIC8vIENoZWNrIGZvciAxNCBuaW5lcyBmcm9tIHRoZSAybmQgcm91bmRpbmcgZGlnaXQsIGFzIHRoZSBmaXJzdCBtYXkgYmUgNC5cclxuICAgICAgICAgIGlmICgrZGlnaXRzVG9TdHJpbmcoci5kKS5zbGljZShrICsgMSwgayArIDE1KSArIDEgPT0gMWUxNCkge1xyXG4gICAgICAgICAgICByID0gZmluYWxpc2UociwgcHIgKyAxLCAwKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH0gd2hpbGUgKGNoZWNrUm91bmRpbmdEaWdpdHMoci5kLCBrICs9IDEwLCBybSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGV4dGVybmFsID0gdHJ1ZTtcclxuXHJcbiAgICByZXR1cm4gZmluYWxpc2UociwgcHIsIHJtKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgbWF4aW11bSBvZiB0aGUgYXJndW1lbnRzIGFuZCB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsLlxyXG4gICAqXHJcbiAgICogYXJndW1lbnRzIHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICpcclxuICBQLm1heCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmNhbGwoYXJndW1lbnRzLCB0aGlzKTtcclxuICAgIHJldHVybiBtYXhPck1pbih0aGlzLmNvbnN0cnVjdG9yLCBhcmd1bWVudHMsICdsdCcpO1xyXG4gIH07XHJcbiAgICovXHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBtaW5pbXVtIG9mIHRoZSBhcmd1bWVudHMgYW5kIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwuXHJcbiAgICpcclxuICAgKiBhcmd1bWVudHMge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gIFAubWluID0gZnVuY3Rpb24gKCkge1xyXG4gICAgQXJyYXkucHJvdG90eXBlLnB1c2guY2FsbChhcmd1bWVudHMsIHRoaXMpO1xyXG4gICAgcmV0dXJuIG1heE9yTWluKHRoaXMuY29uc3RydWN0b3IsIGFyZ3VtZW50cywgJ2d0Jyk7XHJcbiAgfTtcclxuICAgKi9cclxuXHJcblxyXG4gIC8qXHJcbiAgICogIG4gLSAwID0gblxyXG4gICAqICBuIC0gTiA9IE5cclxuICAgKiAgbiAtIEkgPSAtSVxyXG4gICAqICAwIC0gbiA9IC1uXHJcbiAgICogIDAgLSAwID0gMFxyXG4gICAqICAwIC0gTiA9IE5cclxuICAgKiAgMCAtIEkgPSAtSVxyXG4gICAqICBOIC0gbiA9IE5cclxuICAgKiAgTiAtIDAgPSBOXHJcbiAgICogIE4gLSBOID0gTlxyXG4gICAqICBOIC0gSSA9IE5cclxuICAgKiAgSSAtIG4gPSBJXHJcbiAgICogIEkgLSAwID0gSVxyXG4gICAqICBJIC0gTiA9IE5cclxuICAgKiAgSSAtIEkgPSBOXHJcbiAgICpcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIG1pbnVzIGB5YCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYFxyXG4gICAqIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKi9cclxuICBQLm1pbnVzID0gUC5zdWIgPSBmdW5jdGlvbiAoeSkge1xyXG4gICAgdmFyIGQsIGUsIGksIGosIGssIGxlbiwgcHIsIHJtLCB4ZCwgeGUsIHhMVHksIHlkLFxyXG4gICAgICB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7XHJcblxyXG4gICAgeSA9IG5ldyBDdG9yKHkpO1xyXG5cclxuICAgIC8vIElmIGVpdGhlciBpcyBub3QgZmluaXRlLi4uXHJcbiAgICBpZiAoIXguZCB8fCAheS5kKSB7XHJcblxyXG4gICAgICAvLyBSZXR1cm4gTmFOIGlmIGVpdGhlciBpcyBOYU4uXHJcbiAgICAgIGlmICgheC5zIHx8ICF5LnMpIHkgPSBuZXcgQ3RvcihOYU4pO1xyXG5cclxuICAgICAgLy8gUmV0dXJuIHkgbmVnYXRlZCBpZiB4IGlzIGZpbml0ZSBhbmQgeSBpcyDCsUluZmluaXR5LlxyXG4gICAgICBlbHNlIGlmICh4LmQpIHkucyA9IC15LnM7XHJcblxyXG4gICAgICAvLyBSZXR1cm4geCBpZiB5IGlzIGZpbml0ZSBhbmQgeCBpcyDCsUluZmluaXR5LlxyXG4gICAgICAvLyBSZXR1cm4geCBpZiBib3RoIGFyZSDCsUluZmluaXR5IHdpdGggZGlmZmVyZW50IHNpZ25zLlxyXG4gICAgICAvLyBSZXR1cm4gTmFOIGlmIGJvdGggYXJlIMKxSW5maW5pdHkgd2l0aCB0aGUgc2FtZSBzaWduLlxyXG4gICAgICBlbHNlIHkgPSBuZXcgQ3Rvcih5LmQgfHwgeC5zICE9PSB5LnMgPyB4IDogTmFOKTtcclxuXHJcbiAgICAgIHJldHVybiB5O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIElmIHNpZ25zIGRpZmZlci4uLlxyXG4gICAgaWYgKHgucyAhPSB5LnMpIHtcclxuICAgICAgeS5zID0gLXkucztcclxuICAgICAgcmV0dXJuIHgucGx1cyh5KTtcclxuICAgIH1cclxuXHJcbiAgICB4ZCA9IHguZDtcclxuICAgIHlkID0geS5kO1xyXG4gICAgcHIgPSBDdG9yLnByZWNpc2lvbjtcclxuICAgIHJtID0gQ3Rvci5yb3VuZGluZztcclxuXHJcbiAgICAvLyBJZiBlaXRoZXIgaXMgemVyby4uLlxyXG4gICAgaWYgKCF4ZFswXSB8fCAheWRbMF0pIHtcclxuXHJcbiAgICAgIC8vIFJldHVybiB5IG5lZ2F0ZWQgaWYgeCBpcyB6ZXJvIGFuZCB5IGlzIG5vbi16ZXJvLlxyXG4gICAgICBpZiAoeWRbMF0pIHkucyA9IC15LnM7XHJcblxyXG4gICAgICAvLyBSZXR1cm4geCBpZiB5IGlzIHplcm8gYW5kIHggaXMgbm9uLXplcm8uXHJcbiAgICAgIGVsc2UgaWYgKHhkWzBdKSB5ID0gbmV3IEN0b3IoeCk7XHJcblxyXG4gICAgICAvLyBSZXR1cm4gemVybyBpZiBib3RoIGFyZSB6ZXJvLlxyXG4gICAgICAvLyBGcm9tIElFRUUgNzU0ICgyMDA4KSA2LjM6IDAgLSAwID0gLTAgLSAtMCA9IC0wIHdoZW4gcm91bmRpbmcgdG8gLUluZmluaXR5LlxyXG4gICAgICBlbHNlIHJldHVybiBuZXcgQ3RvcihybSA9PT0gMyA/IC0wIDogMCk7XHJcblxyXG4gICAgICByZXR1cm4gZXh0ZXJuYWwgPyBmaW5hbGlzZSh5LCBwciwgcm0pIDogeTtcclxuICAgIH1cclxuXHJcbiAgICAvLyB4IGFuZCB5IGFyZSBmaW5pdGUsIG5vbi16ZXJvIG51bWJlcnMgd2l0aCB0aGUgc2FtZSBzaWduLlxyXG5cclxuICAgIC8vIENhbGN1bGF0ZSBiYXNlIDFlNyBleHBvbmVudHMuXHJcbiAgICBlID0gbWF0aGZsb29yKHkuZSAvIExPR19CQVNFKTtcclxuICAgIHhlID0gbWF0aGZsb29yKHguZSAvIExPR19CQVNFKTtcclxuXHJcbiAgICB4ZCA9IHhkLnNsaWNlKCk7XHJcbiAgICBrID0geGUgLSBlO1xyXG5cclxuICAgIC8vIElmIGJhc2UgMWU3IGV4cG9uZW50cyBkaWZmZXIuLi5cclxuICAgIGlmIChrKSB7XHJcbiAgICAgIHhMVHkgPSBrIDwgMDtcclxuXHJcbiAgICAgIGlmICh4TFR5KSB7XHJcbiAgICAgICAgZCA9IHhkO1xyXG4gICAgICAgIGsgPSAtaztcclxuICAgICAgICBsZW4gPSB5ZC5sZW5ndGg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZCA9IHlkO1xyXG4gICAgICAgIGUgPSB4ZTtcclxuICAgICAgICBsZW4gPSB4ZC5sZW5ndGg7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIE51bWJlcnMgd2l0aCBtYXNzaXZlbHkgZGlmZmVyZW50IGV4cG9uZW50cyB3b3VsZCByZXN1bHQgaW4gYSB2ZXJ5IGhpZ2ggbnVtYmVyIG9mXHJcbiAgICAgIC8vIHplcm9zIG5lZWRpbmcgdG8gYmUgcHJlcGVuZGVkLCBidXQgdGhpcyBjYW4gYmUgYXZvaWRlZCB3aGlsZSBzdGlsbCBlbnN1cmluZyBjb3JyZWN0XHJcbiAgICAgIC8vIHJvdW5kaW5nIGJ5IGxpbWl0aW5nIHRoZSBudW1iZXIgb2YgemVyb3MgdG8gYE1hdGguY2VpbChwciAvIExPR19CQVNFKSArIDJgLlxyXG4gICAgICBpID0gTWF0aC5tYXgoTWF0aC5jZWlsKHByIC8gTE9HX0JBU0UpLCBsZW4pICsgMjtcclxuXHJcbiAgICAgIGlmIChrID4gaSkge1xyXG4gICAgICAgIGsgPSBpO1xyXG4gICAgICAgIGQubGVuZ3RoID0gMTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gUHJlcGVuZCB6ZXJvcyB0byBlcXVhbGlzZSBleHBvbmVudHMuXHJcbiAgICAgIGQucmV2ZXJzZSgpO1xyXG4gICAgICBmb3IgKGkgPSBrOyBpLS07KSBkLnB1c2goMCk7XHJcbiAgICAgIGQucmV2ZXJzZSgpO1xyXG5cclxuICAgIC8vIEJhc2UgMWU3IGV4cG9uZW50cyBlcXVhbC5cclxuICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAvLyBDaGVjayBkaWdpdHMgdG8gZGV0ZXJtaW5lIHdoaWNoIGlzIHRoZSBiaWdnZXIgbnVtYmVyLlxyXG5cclxuICAgICAgaSA9IHhkLmxlbmd0aDtcclxuICAgICAgbGVuID0geWQubGVuZ3RoO1xyXG4gICAgICB4TFR5ID0gaSA8IGxlbjtcclxuICAgICAgaWYgKHhMVHkpIGxlbiA9IGk7XHJcblxyXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICBpZiAoeGRbaV0gIT0geWRbaV0pIHtcclxuICAgICAgICAgIHhMVHkgPSB4ZFtpXSA8IHlkW2ldO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBrID0gMDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoeExUeSkge1xyXG4gICAgICBkID0geGQ7XHJcbiAgICAgIHhkID0geWQ7XHJcbiAgICAgIHlkID0gZDtcclxuICAgICAgeS5zID0gLXkucztcclxuICAgIH1cclxuXHJcbiAgICBsZW4gPSB4ZC5sZW5ndGg7XHJcblxyXG4gICAgLy8gQXBwZW5kIHplcm9zIHRvIGB4ZGAgaWYgc2hvcnRlci5cclxuICAgIC8vIERvbid0IGFkZCB6ZXJvcyB0byBgeWRgIGlmIHNob3J0ZXIgYXMgc3VidHJhY3Rpb24gb25seSBuZWVkcyB0byBzdGFydCBhdCBgeWRgIGxlbmd0aC5cclxuICAgIGZvciAoaSA9IHlkLmxlbmd0aCAtIGxlbjsgaSA+IDA7IC0taSkgeGRbbGVuKytdID0gMDtcclxuXHJcbiAgICAvLyBTdWJ0cmFjdCB5ZCBmcm9tIHhkLlxyXG4gICAgZm9yIChpID0geWQubGVuZ3RoOyBpID4gazspIHtcclxuXHJcbiAgICAgIGlmICh4ZFstLWldIDwgeWRbaV0pIHtcclxuICAgICAgICBmb3IgKGogPSBpOyBqICYmIHhkWy0tal0gPT09IDA7KSB4ZFtqXSA9IEJBU0UgLSAxO1xyXG4gICAgICAgIC0teGRbal07XHJcbiAgICAgICAgeGRbaV0gKz0gQkFTRTtcclxuICAgICAgfVxyXG5cclxuICAgICAgeGRbaV0gLT0geWRbaV07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgZm9yICg7IHhkWy0tbGVuXSA9PT0gMDspIHhkLnBvcCgpO1xyXG5cclxuICAgIC8vIFJlbW92ZSBsZWFkaW5nIHplcm9zIGFuZCBhZGp1c3QgZXhwb25lbnQgYWNjb3JkaW5nbHkuXHJcbiAgICBmb3IgKDsgeGRbMF0gPT09IDA7IHhkLnNoaWZ0KCkpIC0tZTtcclxuXHJcbiAgICAvLyBaZXJvP1xyXG4gICAgaWYgKCF4ZFswXSkgcmV0dXJuIG5ldyBDdG9yKHJtID09PSAzID8gLTAgOiAwKTtcclxuXHJcbiAgICB5LmQgPSB4ZDtcclxuICAgIHkuZSA9IGdldEJhc2UxMEV4cG9uZW50KHhkLCBlKTtcclxuXHJcbiAgICByZXR1cm4gZXh0ZXJuYWwgPyBmaW5hbGlzZSh5LCBwciwgcm0pIDogeTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiAgIG4gJSAwID0gIE5cclxuICAgKiAgIG4gJSBOID0gIE5cclxuICAgKiAgIG4gJSBJID0gIG5cclxuICAgKiAgIDAgJSBuID0gIDBcclxuICAgKiAgLTAgJSBuID0gLTBcclxuICAgKiAgIDAgJSAwID0gIE5cclxuICAgKiAgIDAgJSBOID0gIE5cclxuICAgKiAgIDAgJSBJID0gIDBcclxuICAgKiAgIE4gJSBuID0gIE5cclxuICAgKiAgIE4gJSAwID0gIE5cclxuICAgKiAgIE4gJSBOID0gIE5cclxuICAgKiAgIE4gJSBJID0gIE5cclxuICAgKiAgIEkgJSBuID0gIE5cclxuICAgKiAgIEkgJSAwID0gIE5cclxuICAgKiAgIEkgJSBOID0gIE5cclxuICAgKiAgIEkgJSBJID0gIE5cclxuICAgKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgbW9kdWxvIGB5YCwgcm91bmRlZCB0b1xyXG4gICAqIGBwcmVjaXNpb25gIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiBUaGUgcmVzdWx0IGRlcGVuZHMgb24gdGhlIG1vZHVsbyBtb2RlLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5tb2R1bG8gPSBQLm1vZCA9IGZ1bmN0aW9uICh5KSB7XHJcbiAgICB2YXIgcSxcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIHkgPSBuZXcgQ3Rvcih5KTtcclxuXHJcbiAgICAvLyBSZXR1cm4gTmFOIGlmIHggaXMgwrFJbmZpbml0eSBvciBOYU4sIG9yIHkgaXMgTmFOIG9yIMKxMC5cclxuICAgIGlmICgheC5kIHx8ICF5LnMgfHwgeS5kICYmICF5LmRbMF0pIHJldHVybiBuZXcgQ3RvcihOYU4pO1xyXG5cclxuICAgIC8vIFJldHVybiB4IGlmIHkgaXMgwrFJbmZpbml0eSBvciB4IGlzIMKxMC5cclxuICAgIGlmICgheS5kIHx8IHguZCAmJiAheC5kWzBdKSB7XHJcbiAgICAgIHJldHVybiBmaW5hbGlzZShuZXcgQ3Rvcih4KSwgQ3Rvci5wcmVjaXNpb24sIEN0b3Iucm91bmRpbmcpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFByZXZlbnQgcm91bmRpbmcgb2YgaW50ZXJtZWRpYXRlIGNhbGN1bGF0aW9ucy5cclxuICAgIGV4dGVybmFsID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKEN0b3IubW9kdWxvID09IDkpIHtcclxuXHJcbiAgICAgIC8vIEV1Y2xpZGlhbiBkaXZpc2lvbjogcSA9IHNpZ24oeSkgKiBmbG9vcih4IC8gYWJzKHkpKVxyXG4gICAgICAvLyByZXN1bHQgPSB4IC0gcSAqIHkgICAgd2hlcmUgIDAgPD0gcmVzdWx0IDwgYWJzKHkpXHJcbiAgICAgIHEgPSBkaXZpZGUoeCwgeS5hYnMoKSwgMCwgMywgMSk7XHJcbiAgICAgIHEucyAqPSB5LnM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBxID0gZGl2aWRlKHgsIHksIDAsIEN0b3IubW9kdWxvLCAxKTtcclxuICAgIH1cclxuXHJcbiAgICBxID0gcS50aW1lcyh5KTtcclxuXHJcbiAgICBleHRlcm5hbCA9IHRydWU7XHJcblxyXG4gICAgcmV0dXJuIHgubWludXMocSk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIG5hdHVyYWwgZXhwb25lbnRpYWwgb2YgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCxcclxuICAgKiBpLmUuIHRoZSBiYXNlIGUgcmFpc2VkIHRvIHRoZSBwb3dlciB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gXHJcbiAgICogc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAubmF0dXJhbEV4cG9uZW50aWFsID0gUC5leHAgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gbmF0dXJhbEV4cG9uZW50aWFsKHRoaXMpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBuYXR1cmFsIGxvZ2FyaXRobSBvZiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsLFxyXG4gICAqIHJvdW5kZWQgdG8gYHByZWNpc2lvbmAgc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAubmF0dXJhbExvZ2FyaXRobSA9IFAubG4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gbmF0dXJhbExvZ2FyaXRobSh0aGlzKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIG5lZ2F0ZWQsIGkuZS4gYXMgaWYgbXVsdGlwbGllZCBieVxyXG4gICAqIC0xLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5uZWdhdGVkID0gUC5uZWcgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgeCA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMpO1xyXG4gICAgeC5zID0gLXgucztcclxuICAgIHJldHVybiBmaW5hbGlzZSh4KTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiAgbiArIDAgPSBuXHJcbiAgICogIG4gKyBOID0gTlxyXG4gICAqICBuICsgSSA9IElcclxuICAgKiAgMCArIG4gPSBuXHJcbiAgICogIDAgKyAwID0gMFxyXG4gICAqICAwICsgTiA9IE5cclxuICAgKiAgMCArIEkgPSBJXHJcbiAgICogIE4gKyBuID0gTlxyXG4gICAqICBOICsgMCA9IE5cclxuICAgKiAgTiArIE4gPSBOXHJcbiAgICogIE4gKyBJID0gTlxyXG4gICAqICBJICsgbiA9IElcclxuICAgKiAgSSArIDAgPSBJXHJcbiAgICogIEkgKyBOID0gTlxyXG4gICAqICBJICsgSSA9IElcclxuICAgKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgcGx1cyBgeWAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmBcclxuICAgKiBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5wbHVzID0gUC5hZGQgPSBmdW5jdGlvbiAoeSkge1xyXG4gICAgdmFyIGNhcnJ5LCBkLCBlLCBpLCBrLCBsZW4sIHByLCBybSwgeGQsIHlkLFxyXG4gICAgICB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7XHJcblxyXG4gICAgeSA9IG5ldyBDdG9yKHkpO1xyXG5cclxuICAgIC8vIElmIGVpdGhlciBpcyBub3QgZmluaXRlLi4uXHJcbiAgICBpZiAoIXguZCB8fCAheS5kKSB7XHJcblxyXG4gICAgICAvLyBSZXR1cm4gTmFOIGlmIGVpdGhlciBpcyBOYU4uXHJcbiAgICAgIGlmICgheC5zIHx8ICF5LnMpIHkgPSBuZXcgQ3RvcihOYU4pO1xyXG5cclxuICAgICAgLy8gUmV0dXJuIHggaWYgeSBpcyBmaW5pdGUgYW5kIHggaXMgwrFJbmZpbml0eS5cclxuICAgICAgLy8gUmV0dXJuIHggaWYgYm90aCBhcmUgwrFJbmZpbml0eSB3aXRoIHRoZSBzYW1lIHNpZ24uXHJcbiAgICAgIC8vIFJldHVybiBOYU4gaWYgYm90aCBhcmUgwrFJbmZpbml0eSB3aXRoIGRpZmZlcmVudCBzaWducy5cclxuICAgICAgLy8gUmV0dXJuIHkgaWYgeCBpcyBmaW5pdGUgYW5kIHkgaXMgwrFJbmZpbml0eS5cclxuICAgICAgZWxzZSBpZiAoIXguZCkgeSA9IG5ldyBDdG9yKHkuZCB8fCB4LnMgPT09IHkucyA/IHggOiBOYU4pO1xyXG5cclxuICAgICAgcmV0dXJuIHk7XHJcbiAgICB9XHJcblxyXG4gICAgIC8vIElmIHNpZ25zIGRpZmZlci4uLlxyXG4gICAgaWYgKHgucyAhPSB5LnMpIHtcclxuICAgICAgeS5zID0gLXkucztcclxuICAgICAgcmV0dXJuIHgubWludXMoeSk7XHJcbiAgICB9XHJcblxyXG4gICAgeGQgPSB4LmQ7XHJcbiAgICB5ZCA9IHkuZDtcclxuICAgIHByID0gQ3Rvci5wcmVjaXNpb247XHJcbiAgICBybSA9IEN0b3Iucm91bmRpbmc7XHJcblxyXG4gICAgLy8gSWYgZWl0aGVyIGlzIHplcm8uLi5cclxuICAgIGlmICgheGRbMF0gfHwgIXlkWzBdKSB7XHJcblxyXG4gICAgICAvLyBSZXR1cm4geCBpZiB5IGlzIHplcm8uXHJcbiAgICAgIC8vIFJldHVybiB5IGlmIHkgaXMgbm9uLXplcm8uXHJcbiAgICAgIGlmICgheWRbMF0pIHkgPSBuZXcgQ3Rvcih4KTtcclxuXHJcbiAgICAgIHJldHVybiBleHRlcm5hbCA/IGZpbmFsaXNlKHksIHByLCBybSkgOiB5O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHggYW5kIHkgYXJlIGZpbml0ZSwgbm9uLXplcm8gbnVtYmVycyB3aXRoIHRoZSBzYW1lIHNpZ24uXHJcblxyXG4gICAgLy8gQ2FsY3VsYXRlIGJhc2UgMWU3IGV4cG9uZW50cy5cclxuICAgIGsgPSBtYXRoZmxvb3IoeC5lIC8gTE9HX0JBU0UpO1xyXG4gICAgZSA9IG1hdGhmbG9vcih5LmUgLyBMT0dfQkFTRSk7XHJcblxyXG4gICAgeGQgPSB4ZC5zbGljZSgpO1xyXG4gICAgaSA9IGsgLSBlO1xyXG5cclxuICAgIC8vIElmIGJhc2UgMWU3IGV4cG9uZW50cyBkaWZmZXIuLi5cclxuICAgIGlmIChpKSB7XHJcblxyXG4gICAgICBpZiAoaSA8IDApIHtcclxuICAgICAgICBkID0geGQ7XHJcbiAgICAgICAgaSA9IC1pO1xyXG4gICAgICAgIGxlbiA9IHlkLmxlbmd0aDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBkID0geWQ7XHJcbiAgICAgICAgZSA9IGs7XHJcbiAgICAgICAgbGVuID0geGQubGVuZ3RoO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBMaW1pdCBudW1iZXIgb2YgemVyb3MgcHJlcGVuZGVkIHRvIG1heChjZWlsKHByIC8gTE9HX0JBU0UpLCBsZW4pICsgMS5cclxuICAgICAgayA9IE1hdGguY2VpbChwciAvIExPR19CQVNFKTtcclxuICAgICAgbGVuID0gayA+IGxlbiA/IGsgKyAxIDogbGVuICsgMTtcclxuXHJcbiAgICAgIGlmIChpID4gbGVuKSB7XHJcbiAgICAgICAgaSA9IGxlbjtcclxuICAgICAgICBkLmxlbmd0aCA9IDE7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFByZXBlbmQgemVyb3MgdG8gZXF1YWxpc2UgZXhwb25lbnRzLiBOb3RlOiBGYXN0ZXIgdG8gdXNlIHJldmVyc2UgdGhlbiBkbyB1bnNoaWZ0cy5cclxuICAgICAgZC5yZXZlcnNlKCk7XHJcbiAgICAgIGZvciAoOyBpLS07KSBkLnB1c2goMCk7XHJcbiAgICAgIGQucmV2ZXJzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGxlbiA9IHhkLmxlbmd0aDtcclxuICAgIGkgPSB5ZC5sZW5ndGg7XHJcblxyXG4gICAgLy8gSWYgeWQgaXMgbG9uZ2VyIHRoYW4geGQsIHN3YXAgeGQgYW5kIHlkIHNvIHhkIHBvaW50cyB0byB0aGUgbG9uZ2VyIGFycmF5LlxyXG4gICAgaWYgKGxlbiAtIGkgPCAwKSB7XHJcbiAgICAgIGkgPSBsZW47XHJcbiAgICAgIGQgPSB5ZDtcclxuICAgICAgeWQgPSB4ZDtcclxuICAgICAgeGQgPSBkO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE9ubHkgc3RhcnQgYWRkaW5nIGF0IHlkLmxlbmd0aCAtIDEgYXMgdGhlIGZ1cnRoZXIgZGlnaXRzIG9mIHhkIGNhbiBiZSBsZWZ0IGFzIHRoZXkgYXJlLlxyXG4gICAgZm9yIChjYXJyeSA9IDA7IGk7KSB7XHJcbiAgICAgIGNhcnJ5ID0gKHhkWy0taV0gPSB4ZFtpXSArIHlkW2ldICsgY2FycnkpIC8gQkFTRSB8IDA7XHJcbiAgICAgIHhkW2ldICU9IEJBU0U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNhcnJ5KSB7XHJcbiAgICAgIHhkLnVuc2hpZnQoY2FycnkpO1xyXG4gICAgICArK2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgLy8gTm8gbmVlZCB0byBjaGVjayBmb3IgemVybywgYXMgK3ggKyAreSAhPSAwICYmIC14ICsgLXkgIT0gMFxyXG4gICAgZm9yIChsZW4gPSB4ZC5sZW5ndGg7IHhkWy0tbGVuXSA9PSAwOykgeGQucG9wKCk7XHJcblxyXG4gICAgeS5kID0geGQ7XHJcbiAgICB5LmUgPSBnZXRCYXNlMTBFeHBvbmVudCh4ZCwgZSk7XHJcblxyXG4gICAgcmV0dXJuIGV4dGVybmFsID8gZmluYWxpc2UoeSwgcHIsIHJtKSA6IHk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIHRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIG9mIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwuXHJcbiAgICpcclxuICAgKiBbel0ge2Jvb2xlYW58bnVtYmVyfSBXaGV0aGVyIHRvIGNvdW50IGludGVnZXItcGFydCB0cmFpbGluZyB6ZXJvczogdHJ1ZSwgZmFsc2UsIDEgb3IgMC5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAucHJlY2lzaW9uID0gUC5zZCA9IGZ1bmN0aW9uICh6KSB7XHJcbiAgICB2YXIgayxcclxuICAgICAgeCA9IHRoaXM7XHJcblxyXG4gICAgaWYgKHogIT09IHZvaWQgMCAmJiB6ICE9PSAhIXogJiYgeiAhPT0gMSAmJiB6ICE9PSAwKSB0aHJvdyBFcnJvcihpbnZhbGlkQXJndW1lbnQgKyB6KTtcclxuXHJcbiAgICBpZiAoeC5kKSB7XHJcbiAgICAgIGsgPSBnZXRQcmVjaXNpb24oeC5kKTtcclxuICAgICAgaWYgKHogJiYgeC5lICsgMSA+IGspIGsgPSB4LmUgKyAxO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgayA9IE5hTjtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaztcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIHJvdW5kZWQgdG8gYSB3aG9sZSBudW1iZXIgdXNpbmdcclxuICAgKiByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKi9cclxuICBQLnJvdW5kID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjtcclxuXHJcbiAgICByZXR1cm4gZmluYWxpc2UobmV3IEN0b3IoeCksIHguZSArIDEsIEN0b3Iucm91bmRpbmcpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBzaW5lIG9mIHRoZSB2YWx1ZSBpbiByYWRpYW5zIG9mIHRoaXMgRGVjaW1hbC5cclxuICAgKlxyXG4gICAqIERvbWFpbjogWy1JbmZpbml0eSwgSW5maW5pdHldXHJcbiAgICogUmFuZ2U6IFstMSwgMV1cclxuICAgKlxyXG4gICAqIHNpbih4KSA9IHggLSB4XjMvMyEgKyB4XjUvNSEgLSAuLi5cclxuICAgKlxyXG4gICAqIHNpbigwKSAgICAgICAgID0gMFxyXG4gICAqIHNpbigtMCkgICAgICAgID0gLTBcclxuICAgKiBzaW4oSW5maW5pdHkpICA9IE5hTlxyXG4gICAqIHNpbigtSW5maW5pdHkpID0gTmFOXHJcbiAgICogc2luKE5hTikgICAgICAgPSBOYU5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuc2luZSA9IFAuc2luID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHByLCBybSxcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIGlmICgheC5pc0Zpbml0ZSgpKSByZXR1cm4gbmV3IEN0b3IoTmFOKTtcclxuICAgIGlmICh4LmlzWmVybygpKSByZXR1cm4gbmV3IEN0b3IoeCk7XHJcblxyXG4gICAgcHIgPSBDdG9yLnByZWNpc2lvbjtcclxuICAgIHJtID0gQ3Rvci5yb3VuZGluZztcclxuICAgIEN0b3IucHJlY2lzaW9uID0gcHIgKyBNYXRoLm1heCh4LmUsIHguc2QoKSkgKyBMT0dfQkFTRTtcclxuICAgIEN0b3Iucm91bmRpbmcgPSAxO1xyXG5cclxuICAgIHggPSBzaW5lKEN0b3IsIHRvTGVzc1RoYW5IYWxmUGkoQ3RvciwgeCkpO1xyXG5cclxuICAgIEN0b3IucHJlY2lzaW9uID0gcHI7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gcm07XHJcblxyXG4gICAgcmV0dXJuIGZpbmFsaXNlKHF1YWRyYW50ID4gMiA/IHgubmVnKCkgOiB4LCBwciwgcm0sIHRydWUpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBzcXVhcmUgcm9vdCBvZiB0aGlzIERlY2ltYWwsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmBcclxuICAgKiBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogIHNxcnQoLW4pID0gIE5cclxuICAgKiAgc3FydChOKSAgPSAgTlxyXG4gICAqICBzcXJ0KC1JKSA9ICBOXHJcbiAgICogIHNxcnQoSSkgID0gIElcclxuICAgKiAgc3FydCgwKSAgPSAgMFxyXG4gICAqICBzcXJ0KC0wKSA9IC0wXHJcbiAgICpcclxuICAgKi9cclxuICBQLnNxdWFyZVJvb3QgPSBQLnNxcnQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgbSwgbiwgc2QsIHIsIHJlcCwgdCxcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIGQgPSB4LmQsXHJcbiAgICAgIGUgPSB4LmUsXHJcbiAgICAgIHMgPSB4LnMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIC8vIE5lZ2F0aXZlL05hTi9JbmZpbml0eS96ZXJvP1xyXG4gICAgaWYgKHMgIT09IDEgfHwgIWQgfHwgIWRbMF0pIHtcclxuICAgICAgcmV0dXJuIG5ldyBDdG9yKCFzIHx8IHMgPCAwICYmICghZCB8fCBkWzBdKSA/IE5hTiA6IGQgPyB4IDogMSAvIDApO1xyXG4gICAgfVxyXG5cclxuICAgIGV4dGVybmFsID0gZmFsc2U7XHJcblxyXG4gICAgLy8gSW5pdGlhbCBlc3RpbWF0ZS5cclxuICAgIHMgPSBNYXRoLnNxcnQoK3gpO1xyXG5cclxuICAgIC8vIE1hdGguc3FydCB1bmRlcmZsb3cvb3ZlcmZsb3c/XHJcbiAgICAvLyBQYXNzIHggdG8gTWF0aC5zcXJ0IGFzIGludGVnZXIsIHRoZW4gYWRqdXN0IHRoZSBleHBvbmVudCBvZiB0aGUgcmVzdWx0LlxyXG4gICAgaWYgKHMgPT0gMCB8fCBzID09IDEgLyAwKSB7XHJcbiAgICAgIG4gPSBkaWdpdHNUb1N0cmluZyhkKTtcclxuXHJcbiAgICAgIGlmICgobi5sZW5ndGggKyBlKSAlIDIgPT0gMCkgbiArPSAnMCc7XHJcbiAgICAgIHMgPSBNYXRoLnNxcnQobik7XHJcbiAgICAgIGUgPSBtYXRoZmxvb3IoKGUgKyAxKSAvIDIpIC0gKGUgPCAwIHx8IGUgJSAyKTtcclxuXHJcbiAgICAgIGlmIChzID09IDEgLyAwKSB7XHJcbiAgICAgICAgbiA9ICcxZScgKyBlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG4gPSBzLnRvRXhwb25lbnRpYWwoKTtcclxuICAgICAgICBuID0gbi5zbGljZSgwLCBuLmluZGV4T2YoJ2UnKSArIDEpICsgZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgciA9IG5ldyBDdG9yKG4pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgciA9IG5ldyBDdG9yKHMudG9TdHJpbmcoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2QgPSAoZSA9IEN0b3IucHJlY2lzaW9uKSArIDM7XHJcblxyXG4gICAgLy8gTmV3dG9uLVJhcGhzb24gaXRlcmF0aW9uLlxyXG4gICAgZm9yICg7Oykge1xyXG4gICAgICB0ID0gcjtcclxuICAgICAgciA9IHQucGx1cyhkaXZpZGUoeCwgdCwgc2QgKyAyLCAxKSkudGltZXMoMC41KTtcclxuXHJcbiAgICAgIC8vIFRPRE8/IFJlcGxhY2Ugd2l0aCBmb3ItbG9vcCBhbmQgY2hlY2tSb3VuZGluZ0RpZ2l0cy5cclxuICAgICAgaWYgKGRpZ2l0c1RvU3RyaW5nKHQuZCkuc2xpY2UoMCwgc2QpID09PSAobiA9IGRpZ2l0c1RvU3RyaW5nKHIuZCkpLnNsaWNlKDAsIHNkKSkge1xyXG4gICAgICAgIG4gPSBuLnNsaWNlKHNkIC0gMywgc2QgKyAxKTtcclxuXHJcbiAgICAgICAgLy8gVGhlIDR0aCByb3VuZGluZyBkaWdpdCBtYXkgYmUgaW4gZXJyb3IgYnkgLTEgc28gaWYgdGhlIDQgcm91bmRpbmcgZGlnaXRzIGFyZSA5OTk5IG9yXHJcbiAgICAgICAgLy8gNDk5OSwgaS5lLiBhcHByb2FjaGluZyBhIHJvdW5kaW5nIGJvdW5kYXJ5LCBjb250aW51ZSB0aGUgaXRlcmF0aW9uLlxyXG4gICAgICAgIGlmIChuID09ICc5OTk5JyB8fCAhcmVwICYmIG4gPT0gJzQ5OTknKSB7XHJcblxyXG4gICAgICAgICAgLy8gT24gdGhlIGZpcnN0IGl0ZXJhdGlvbiBvbmx5LCBjaGVjayB0byBzZWUgaWYgcm91bmRpbmcgdXAgZ2l2ZXMgdGhlIGV4YWN0IHJlc3VsdCBhcyB0aGVcclxuICAgICAgICAgIC8vIG5pbmVzIG1heSBpbmZpbml0ZWx5IHJlcGVhdC5cclxuICAgICAgICAgIGlmICghcmVwKSB7XHJcbiAgICAgICAgICAgIGZpbmFsaXNlKHQsIGUgKyAxLCAwKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0LnRpbWVzKHQpLmVxKHgpKSB7XHJcbiAgICAgICAgICAgICAgciA9IHQ7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBzZCArPSA0O1xyXG4gICAgICAgICAgcmVwID0gMTtcclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgIC8vIElmIHRoZSByb3VuZGluZyBkaWdpdHMgYXJlIG51bGwsIDB7MCw0fSBvciA1MHswLDN9LCBjaGVjayBmb3IgYW4gZXhhY3QgcmVzdWx0LlxyXG4gICAgICAgICAgLy8gSWYgbm90LCB0aGVuIHRoZXJlIGFyZSBmdXJ0aGVyIGRpZ2l0cyBhbmQgbSB3aWxsIGJlIHRydXRoeS5cclxuICAgICAgICAgIGlmICghK24gfHwgIStuLnNsaWNlKDEpICYmIG4uY2hhckF0KDApID09ICc1Jykge1xyXG5cclxuICAgICAgICAgICAgLy8gVHJ1bmNhdGUgdG8gdGhlIGZpcnN0IHJvdW5kaW5nIGRpZ2l0LlxyXG4gICAgICAgICAgICBmaW5hbGlzZShyLCBlICsgMSwgMSk7XHJcbiAgICAgICAgICAgIG0gPSAhci50aW1lcyhyKS5lcSh4KTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBleHRlcm5hbCA9IHRydWU7XHJcblxyXG4gICAgcmV0dXJuIGZpbmFsaXNlKHIsIGUsIEN0b3Iucm91bmRpbmcsIG0pO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSB0YW5nZW50IG9mIHRoZSB2YWx1ZSBpbiByYWRpYW5zIG9mIHRoaXMgRGVjaW1hbC5cclxuICAgKlxyXG4gICAqIERvbWFpbjogWy1JbmZpbml0eSwgSW5maW5pdHldXHJcbiAgICogUmFuZ2U6IFstSW5maW5pdHksIEluZmluaXR5XVxyXG4gICAqXHJcbiAgICogdGFuKDApICAgICAgICAgPSAwXHJcbiAgICogdGFuKC0wKSAgICAgICAgPSAtMFxyXG4gICAqIHRhbihJbmZpbml0eSkgID0gTmFOXHJcbiAgICogdGFuKC1JbmZpbml0eSkgPSBOYU5cclxuICAgKiB0YW4oTmFOKSAgICAgICA9IE5hTlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC50YW5nZW50ID0gUC50YW4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgcHIsIHJtLFxyXG4gICAgICB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7XHJcblxyXG4gICAgaWYgKCF4LmlzRmluaXRlKCkpIHJldHVybiBuZXcgQ3RvcihOYU4pO1xyXG4gICAgaWYgKHguaXNaZXJvKCkpIHJldHVybiBuZXcgQ3Rvcih4KTtcclxuXHJcbiAgICBwciA9IEN0b3IucHJlY2lzaW9uO1xyXG4gICAgcm0gPSBDdG9yLnJvdW5kaW5nO1xyXG4gICAgQ3Rvci5wcmVjaXNpb24gPSBwciArIDEwO1xyXG4gICAgQ3Rvci5yb3VuZGluZyA9IDE7XHJcblxyXG4gICAgeCA9IHguc2luKCk7XHJcbiAgICB4LnMgPSAxO1xyXG4gICAgeCA9IGRpdmlkZSh4LCBuZXcgQ3RvcigxKS5taW51cyh4LnRpbWVzKHgpKS5zcXJ0KCksIHByICsgMTAsIDApO1xyXG5cclxuICAgIEN0b3IucHJlY2lzaW9uID0gcHI7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gcm07XHJcblxyXG4gICAgcmV0dXJuIGZpbmFsaXNlKHF1YWRyYW50ID09IDIgfHwgcXVhZHJhbnQgPT0gNCA/IHgubmVnKCkgOiB4LCBwciwgcm0sIHRydWUpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqICBuICogMCA9IDBcclxuICAgKiAgbiAqIE4gPSBOXHJcbiAgICogIG4gKiBJID0gSVxyXG4gICAqICAwICogbiA9IDBcclxuICAgKiAgMCAqIDAgPSAwXHJcbiAgICogIDAgKiBOID0gTlxyXG4gICAqICAwICogSSA9IE5cclxuICAgKiAgTiAqIG4gPSBOXHJcbiAgICogIE4gKiAwID0gTlxyXG4gICAqICBOICogTiA9IE5cclxuICAgKiAgTiAqIEkgPSBOXHJcbiAgICogIEkgKiBuID0gSVxyXG4gICAqICBJICogMCA9IE5cclxuICAgKiAgSSAqIE4gPSBOXHJcbiAgICogIEkgKiBJID0gSVxyXG4gICAqXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhpcyBEZWNpbWFsIHRpbWVzIGB5YCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYCBzaWduaWZpY2FudFxyXG4gICAqIGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKi9cclxuICBQLnRpbWVzID0gUC5tdWwgPSBmdW5jdGlvbiAoeSkge1xyXG4gICAgdmFyIGNhcnJ5LCBlLCBpLCBrLCByLCByTCwgdCwgeGRMLCB5ZEwsXHJcbiAgICAgIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcixcclxuICAgICAgeGQgPSB4LmQsXHJcbiAgICAgIHlkID0gKHkgPSBuZXcgQ3Rvcih5KSkuZDtcclxuXHJcbiAgICB5LnMgKj0geC5zO1xyXG5cclxuICAgICAvLyBJZiBlaXRoZXIgaXMgTmFOLCDCsUluZmluaXR5IG9yIMKxMC4uLlxyXG4gICAgaWYgKCF4ZCB8fCAheGRbMF0gfHwgIXlkIHx8ICF5ZFswXSkge1xyXG5cclxuICAgICAgcmV0dXJuIG5ldyBDdG9yKCF5LnMgfHwgeGQgJiYgIXhkWzBdICYmICF5ZCB8fCB5ZCAmJiAheWRbMF0gJiYgIXhkXHJcblxyXG4gICAgICAgIC8vIFJldHVybiBOYU4gaWYgZWl0aGVyIGlzIE5hTi5cclxuICAgICAgICAvLyBSZXR1cm4gTmFOIGlmIHggaXMgwrEwIGFuZCB5IGlzIMKxSW5maW5pdHksIG9yIHkgaXMgwrEwIGFuZCB4IGlzIMKxSW5maW5pdHkuXHJcbiAgICAgICAgPyBOYU5cclxuXHJcbiAgICAgICAgLy8gUmV0dXJuIMKxSW5maW5pdHkgaWYgZWl0aGVyIGlzIMKxSW5maW5pdHkuXHJcbiAgICAgICAgLy8gUmV0dXJuIMKxMCBpZiBlaXRoZXIgaXMgwrEwLlxyXG4gICAgICAgIDogIXhkIHx8ICF5ZCA/IHkucyAvIDAgOiB5LnMgKiAwKTtcclxuICAgIH1cclxuXHJcbiAgICBlID0gbWF0aGZsb29yKHguZSAvIExPR19CQVNFKSArIG1hdGhmbG9vcih5LmUgLyBMT0dfQkFTRSk7XHJcbiAgICB4ZEwgPSB4ZC5sZW5ndGg7XHJcbiAgICB5ZEwgPSB5ZC5sZW5ndGg7XHJcblxyXG4gICAgLy8gRW5zdXJlIHhkIHBvaW50cyB0byB0aGUgbG9uZ2VyIGFycmF5LlxyXG4gICAgaWYgKHhkTCA8IHlkTCkge1xyXG4gICAgICByID0geGQ7XHJcbiAgICAgIHhkID0geWQ7XHJcbiAgICAgIHlkID0gcjtcclxuICAgICAgckwgPSB4ZEw7XHJcbiAgICAgIHhkTCA9IHlkTDtcclxuICAgICAgeWRMID0gckw7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSW5pdGlhbGlzZSB0aGUgcmVzdWx0IGFycmF5IHdpdGggemVyb3MuXHJcbiAgICByID0gW107XHJcbiAgICByTCA9IHhkTCArIHlkTDtcclxuICAgIGZvciAoaSA9IHJMOyBpLS07KSByLnB1c2goMCk7XHJcblxyXG4gICAgLy8gTXVsdGlwbHkhXHJcbiAgICBmb3IgKGkgPSB5ZEw7IC0taSA+PSAwOykge1xyXG4gICAgICBjYXJyeSA9IDA7XHJcbiAgICAgIGZvciAoayA9IHhkTCArIGk7IGsgPiBpOykge1xyXG4gICAgICAgIHQgPSByW2tdICsgeWRbaV0gKiB4ZFtrIC0gaSAtIDFdICsgY2Fycnk7XHJcbiAgICAgICAgcltrLS1dID0gdCAlIEJBU0UgfCAwO1xyXG4gICAgICAgIGNhcnJ5ID0gdCAvIEJBU0UgfCAwO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByW2tdID0gKHJba10gKyBjYXJyeSkgJSBCQVNFIHwgMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZW1vdmUgdHJhaWxpbmcgemVyb3MuXHJcbiAgICBmb3IgKDsgIXJbLS1yTF07KSByLnBvcCgpO1xyXG5cclxuICAgIGlmIChjYXJyeSkgKytlO1xyXG4gICAgZWxzZSByLnNoaWZ0KCk7XHJcblxyXG4gICAgeS5kID0gcjtcclxuICAgIHkuZSA9IGdldEJhc2UxMEV4cG9uZW50KHIsIGUpO1xyXG5cclxuICAgIHJldHVybiBleHRlcm5hbCA/IGZpbmFsaXNlKHksIEN0b3IucHJlY2lzaW9uLCBDdG9yLnJvdW5kaW5nKSA6IHk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGluIGJhc2UgMiwgcm91bmQgdG8gYHNkYCBzaWduaWZpY2FudFxyXG4gICAqIGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGBybWAuXHJcbiAgICpcclxuICAgKiBJZiB0aGUgb3B0aW9uYWwgYHNkYCBhcmd1bWVudCBpcyBwcmVzZW50IHRoZW4gcmV0dXJuIGJpbmFyeSBleHBvbmVudGlhbCBub3RhdGlvbi5cclxuICAgKlxyXG4gICAqIFtzZF0ge251bWJlcn0gU2lnbmlmaWNhbnQgZGlnaXRzLiBJbnRlZ2VyLCAxIHRvIE1BWF9ESUdJVFMgaW5jbHVzaXZlLlxyXG4gICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAudG9CaW5hcnkgPSBmdW5jdGlvbiAoc2QsIHJtKSB7XHJcbiAgICByZXR1cm4gdG9TdHJpbmdCaW5hcnkodGhpcywgMiwgc2QsIHJtKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIHJvdW5kZWQgdG8gYSBtYXhpbXVtIG9mIGBkcGBcclxuICAgKiBkZWNpbWFsIHBsYWNlcyB1c2luZyByb3VuZGluZyBtb2RlIGBybWAgb3IgYHJvdW5kaW5nYCBpZiBgcm1gIGlzIG9taXR0ZWQuXHJcbiAgICpcclxuICAgKiBJZiBgZHBgIGlzIG9taXR0ZWQsIHJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwuXHJcbiAgICpcclxuICAgKiBbZHBdIHtudW1iZXJ9IERlY2ltYWwgcGxhY2VzLiBJbnRlZ2VyLCAwIHRvIE1BWF9ESUdJVFMgaW5jbHVzaXZlLlxyXG4gICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAudG9EZWNpbWFsUGxhY2VzID0gUC50b0RQID0gZnVuY3Rpb24gKGRwLCBybSkge1xyXG4gICAgdmFyIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjtcclxuXHJcbiAgICB4ID0gbmV3IEN0b3IoeCk7XHJcbiAgICBpZiAoZHAgPT09IHZvaWQgMCkgcmV0dXJuIHg7XHJcblxyXG4gICAgY2hlY2tJbnQzMihkcCwgMCwgTUFYX0RJR0lUUyk7XHJcblxyXG4gICAgaWYgKHJtID09PSB2b2lkIDApIHJtID0gQ3Rvci5yb3VuZGluZztcclxuICAgIGVsc2UgY2hlY2tJbnQzMihybSwgMCwgOCk7XHJcblxyXG4gICAgcmV0dXJuIGZpbmFsaXNlKHgsIGRwICsgeC5lICsgMSwgcm0pO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCBpbiBleHBvbmVudGlhbCBub3RhdGlvbiByb3VuZGVkIHRvXHJcbiAgICogYGRwYCBmaXhlZCBkZWNpbWFsIHBsYWNlcyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiBbZHBdIHtudW1iZXJ9IERlY2ltYWwgcGxhY2VzLiBJbnRlZ2VyLCAwIHRvIE1BWF9ESUdJVFMgaW5jbHVzaXZlLlxyXG4gICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAudG9FeHBvbmVudGlhbCA9IGZ1bmN0aW9uIChkcCwgcm0pIHtcclxuICAgIHZhciBzdHIsXHJcbiAgICAgIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjtcclxuXHJcbiAgICBpZiAoZHAgPT09IHZvaWQgMCkge1xyXG4gICAgICBzdHIgPSBmaW5pdGVUb1N0cmluZyh4LCB0cnVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNoZWNrSW50MzIoZHAsIDAsIE1BWF9ESUdJVFMpO1xyXG5cclxuICAgICAgaWYgKHJtID09PSB2b2lkIDApIHJtID0gQ3Rvci5yb3VuZGluZztcclxuICAgICAgZWxzZSBjaGVja0ludDMyKHJtLCAwLCA4KTtcclxuXHJcbiAgICAgIHggPSBmaW5hbGlzZShuZXcgQ3Rvcih4KSwgZHAgKyAxLCBybSk7XHJcbiAgICAgIHN0ciA9IGZpbml0ZVRvU3RyaW5nKHgsIHRydWUsIGRwICsgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHguaXNOZWcoKSAmJiAheC5pc1plcm8oKSA/ICctJyArIHN0ciA6IHN0cjtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgaW4gbm9ybWFsIChmaXhlZC1wb2ludCkgbm90YXRpb24gdG9cclxuICAgKiBgZHBgIGZpeGVkIGRlY2ltYWwgcGxhY2VzIGFuZCByb3VuZGVkIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJtYCBvciBgcm91bmRpbmdgIGlmIGBybWAgaXNcclxuICAgKiBvbWl0dGVkLlxyXG4gICAqXHJcbiAgICogQXMgd2l0aCBKYXZhU2NyaXB0IG51bWJlcnMsICgtMCkudG9GaXhlZCgwKSBpcyAnMCcsIGJ1dCBlLmcuICgtMC4wMDAwMSkudG9GaXhlZCgwKSBpcyAnLTAnLlxyXG4gICAqXHJcbiAgICogW2RwXSB7bnVtYmVyfSBEZWNpbWFsIHBsYWNlcy4gSW50ZWdlciwgMCB0byBNQVhfRElHSVRTIGluY2x1c2l2ZS5cclxuICAgKiBbcm1dIHtudW1iZXJ9IFJvdW5kaW5nIG1vZGUuIEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICpcclxuICAgKiAoLTApLnRvRml4ZWQoMCkgaXMgJzAnLCBidXQgKC0wLjEpLnRvRml4ZWQoMCkgaXMgJy0wJy5cclxuICAgKiAoLTApLnRvRml4ZWQoMSkgaXMgJzAuMCcsIGJ1dCAoLTAuMDEpLnRvRml4ZWQoMSkgaXMgJy0wLjAnLlxyXG4gICAqICgtMCkudG9GaXhlZCgzKSBpcyAnMC4wMDAnLlxyXG4gICAqICgtMC41KS50b0ZpeGVkKDApIGlzICctMCcuXHJcbiAgICpcclxuICAgKi9cclxuICBQLnRvRml4ZWQgPSBmdW5jdGlvbiAoZHAsIHJtKSB7XHJcbiAgICB2YXIgc3RyLCB5LFxyXG4gICAgICB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7XHJcblxyXG4gICAgaWYgKGRwID09PSB2b2lkIDApIHtcclxuICAgICAgc3RyID0gZmluaXRlVG9TdHJpbmcoeCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjaGVja0ludDMyKGRwLCAwLCBNQVhfRElHSVRTKTtcclxuXHJcbiAgICAgIGlmIChybSA9PT0gdm9pZCAwKSBybSA9IEN0b3Iucm91bmRpbmc7XHJcbiAgICAgIGVsc2UgY2hlY2tJbnQzMihybSwgMCwgOCk7XHJcblxyXG4gICAgICB5ID0gZmluYWxpc2UobmV3IEN0b3IoeCksIGRwICsgeC5lICsgMSwgcm0pO1xyXG4gICAgICBzdHIgPSBmaW5pdGVUb1N0cmluZyh5LCBmYWxzZSwgZHAgKyB5LmUgKyAxKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBUbyBkZXRlcm1pbmUgd2hldGhlciB0byBhZGQgdGhlIG1pbnVzIHNpZ24gbG9vayBhdCB0aGUgdmFsdWUgYmVmb3JlIGl0IHdhcyByb3VuZGVkLFxyXG4gICAgLy8gaS5lLiBsb29rIGF0IGB4YCByYXRoZXIgdGhhbiBgeWAuXHJcbiAgICByZXR1cm4geC5pc05lZygpICYmICF4LmlzWmVybygpID8gJy0nICsgc3RyIDogc3RyO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhbiBhcnJheSByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCBhcyBhIHNpbXBsZSBmcmFjdGlvbiB3aXRoIGFuIGludGVnZXJcclxuICAgKiBudW1lcmF0b3IgYW5kIGFuIGludGVnZXIgZGVub21pbmF0b3IuXHJcbiAgICpcclxuICAgKiBUaGUgZGVub21pbmF0b3Igd2lsbCBiZSBhIHBvc2l0aXZlIG5vbi16ZXJvIHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgc3BlY2lmaWVkIG1heGltdW1cclxuICAgKiBkZW5vbWluYXRvci4gSWYgYSBtYXhpbXVtIGRlbm9taW5hdG9yIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBkZW5vbWluYXRvciB3aWxsIGJlIHRoZSBsb3dlc3RcclxuICAgKiB2YWx1ZSBuZWNlc3NhcnkgdG8gcmVwcmVzZW50IHRoZSBudW1iZXIgZXhhY3RseS5cclxuICAgKlxyXG4gICAqIFttYXhEXSB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfSBNYXhpbXVtIGRlbm9taW5hdG9yLiBJbnRlZ2VyID49IDEgYW5kIDwgSW5maW5pdHkuXHJcbiAgICpcclxuICAgKi9cclxuICBQLnRvRnJhY3Rpb24gPSBmdW5jdGlvbiAobWF4RCkge1xyXG4gICAgdmFyIGQsIGQwLCBkMSwgZDIsIGUsIGssIG4sIG4wLCBuMSwgcHIsIHEsIHIsXHJcbiAgICAgIHggPSB0aGlzLFxyXG4gICAgICB4ZCA9IHguZCxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7XHJcblxyXG4gICAgaWYgKCF4ZCkgcmV0dXJuIG5ldyBDdG9yKHgpO1xyXG5cclxuICAgIG4xID0gZDAgPSBuZXcgQ3RvcigxKTtcclxuICAgIGQxID0gbjAgPSBuZXcgQ3RvcigwKTtcclxuXHJcbiAgICBkID0gbmV3IEN0b3IoZDEpO1xyXG4gICAgZSA9IGQuZSA9IGdldFByZWNpc2lvbih4ZCkgLSB4LmUgLSAxO1xyXG4gICAgayA9IGUgJSBMT0dfQkFTRTtcclxuICAgIGQuZFswXSA9IG1hdGhwb3coMTAsIGsgPCAwID8gTE9HX0JBU0UgKyBrIDogayk7XHJcblxyXG4gICAgaWYgKG1heEQgPT0gbnVsbCkge1xyXG5cclxuICAgICAgLy8gZCBpcyAxMCoqZSwgdGhlIG1pbmltdW0gbWF4LWRlbm9taW5hdG9yIG5lZWRlZC5cclxuICAgICAgbWF4RCA9IGUgPiAwID8gZCA6IG4xO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbiA9IG5ldyBDdG9yKG1heEQpO1xyXG4gICAgICBpZiAoIW4uaXNJbnQoKSB8fCBuLmx0KG4xKSkgdGhyb3cgRXJyb3IoaW52YWxpZEFyZ3VtZW50ICsgbik7XHJcbiAgICAgIG1heEQgPSBuLmd0KGQpID8gKGUgPiAwID8gZCA6IG4xKSA6IG47XHJcbiAgICB9XHJcblxyXG4gICAgZXh0ZXJuYWwgPSBmYWxzZTtcclxuICAgIG4gPSBuZXcgQ3RvcihkaWdpdHNUb1N0cmluZyh4ZCkpO1xyXG4gICAgcHIgPSBDdG9yLnByZWNpc2lvbjtcclxuICAgIEN0b3IucHJlY2lzaW9uID0gZSA9IHhkLmxlbmd0aCAqIExPR19CQVNFICogMjtcclxuXHJcbiAgICBmb3IgKDs7KSAge1xyXG4gICAgICBxID0gZGl2aWRlKG4sIGQsIDAsIDEsIDEpO1xyXG4gICAgICBkMiA9IGQwLnBsdXMocS50aW1lcyhkMSkpO1xyXG4gICAgICBpZiAoZDIuY21wKG1heEQpID09IDEpIGJyZWFrO1xyXG4gICAgICBkMCA9IGQxO1xyXG4gICAgICBkMSA9IGQyO1xyXG4gICAgICBkMiA9IG4xO1xyXG4gICAgICBuMSA9IG4wLnBsdXMocS50aW1lcyhkMikpO1xyXG4gICAgICBuMCA9IGQyO1xyXG4gICAgICBkMiA9IGQ7XHJcbiAgICAgIGQgPSBuLm1pbnVzKHEudGltZXMoZDIpKTtcclxuICAgICAgbiA9IGQyO1xyXG4gICAgfVxyXG5cclxuICAgIGQyID0gZGl2aWRlKG1heEQubWludXMoZDApLCBkMSwgMCwgMSwgMSk7XHJcbiAgICBuMCA9IG4wLnBsdXMoZDIudGltZXMobjEpKTtcclxuICAgIGQwID0gZDAucGx1cyhkMi50aW1lcyhkMSkpO1xyXG4gICAgbjAucyA9IG4xLnMgPSB4LnM7XHJcblxyXG4gICAgLy8gRGV0ZXJtaW5lIHdoaWNoIGZyYWN0aW9uIGlzIGNsb3NlciB0byB4LCBuMC9kMCBvciBuMS9kMT9cclxuICAgIHIgPSBkaXZpZGUobjEsIGQxLCBlLCAxKS5taW51cyh4KS5hYnMoKS5jbXAoZGl2aWRlKG4wLCBkMCwgZSwgMSkubWludXMoeCkuYWJzKCkpIDwgMVxyXG4gICAgICAgID8gW24xLCBkMV0gOiBbbjAsIGQwXTtcclxuXHJcbiAgICBDdG9yLnByZWNpc2lvbiA9IHByO1xyXG4gICAgZXh0ZXJuYWwgPSB0cnVlO1xyXG5cclxuICAgIHJldHVybiByO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCBpbiBiYXNlIDE2LCByb3VuZCB0byBgc2RgIHNpZ25pZmljYW50XHJcbiAgICogZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJtYC5cclxuICAgKlxyXG4gICAqIElmIHRoZSBvcHRpb25hbCBgc2RgIGFyZ3VtZW50IGlzIHByZXNlbnQgdGhlbiByZXR1cm4gYmluYXJ5IGV4cG9uZW50aWFsIG5vdGF0aW9uLlxyXG4gICAqXHJcbiAgICogW3NkXSB7bnVtYmVyfSBTaWduaWZpY2FudCBkaWdpdHMuIEludGVnZXIsIDEgdG8gTUFYX0RJR0lUUyBpbmNsdXNpdmUuXHJcbiAgICogW3JtXSB7bnVtYmVyfSBSb3VuZGluZyBtb2RlLiBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC50b0hleGFkZWNpbWFsID0gUC50b0hleCA9IGZ1bmN0aW9uIChzZCwgcm0pIHtcclxuICAgIHJldHVybiB0b1N0cmluZ0JpbmFyeSh0aGlzLCAxNiwgc2QsIHJtKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm5zIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIG5lYXJlc3QgbXVsdGlwbGUgb2YgYHlgIGluIHRoZSBkaXJlY3Rpb24gb2Ygcm91bmRpbmdcclxuICAgKiBtb2RlIGBybWAsIG9yIGBEZWNpbWFsLnJvdW5kaW5nYCBpZiBgcm1gIGlzIG9taXR0ZWQsIHRvIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwuXHJcbiAgICpcclxuICAgKiBUaGUgcmV0dXJuIHZhbHVlIHdpbGwgYWx3YXlzIGhhdmUgdGhlIHNhbWUgc2lnbiBhcyB0aGlzIERlY2ltYWwsIHVubGVzcyBlaXRoZXIgdGhpcyBEZWNpbWFsXHJcbiAgICogb3IgYHlgIGlzIE5hTiwgaW4gd2hpY2ggY2FzZSB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgYWxzbyBiZSBOYU4uXHJcbiAgICpcclxuICAgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIG5vdCBhZmZlY3RlZCBieSB0aGUgdmFsdWUgb2YgYHByZWNpc2lvbmAuXHJcbiAgICpcclxuICAgKiB5IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IFRoZSBtYWduaXR1ZGUgdG8gcm91bmQgdG8gYSBtdWx0aXBsZSBvZi5cclxuICAgKiBbcm1dIHtudW1iZXJ9IFJvdW5kaW5nIG1vZGUuIEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICpcclxuICAgKiAndG9OZWFyZXN0KCkgcm91bmRpbmcgbW9kZSBub3QgYW4gaW50ZWdlcjoge3JtfSdcclxuICAgKiAndG9OZWFyZXN0KCkgcm91bmRpbmcgbW9kZSBvdXQgb2YgcmFuZ2U6IHtybX0nXHJcbiAgICpcclxuICAgKi9cclxuICBQLnRvTmVhcmVzdCA9IGZ1bmN0aW9uICh5LCBybSkge1xyXG4gICAgdmFyIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjtcclxuXHJcbiAgICB4ID0gbmV3IEN0b3IoeCk7XHJcblxyXG4gICAgaWYgKHkgPT0gbnVsbCkge1xyXG5cclxuICAgICAgLy8gSWYgeCBpcyBub3QgZmluaXRlLCByZXR1cm4geC5cclxuICAgICAgaWYgKCF4LmQpIHJldHVybiB4O1xyXG5cclxuICAgICAgeSA9IG5ldyBDdG9yKDEpO1xyXG4gICAgICBybSA9IEN0b3Iucm91bmRpbmc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB5ID0gbmV3IEN0b3IoeSk7XHJcbiAgICAgIGlmIChybSA9PT0gdm9pZCAwKSB7XHJcbiAgICAgICAgcm0gPSBDdG9yLnJvdW5kaW5nO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNoZWNrSW50MzIocm0sIDAsIDgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBJZiB4IGlzIG5vdCBmaW5pdGUsIHJldHVybiB4IGlmIHkgaXMgbm90IE5hTiwgZWxzZSBOYU4uXHJcbiAgICAgIGlmICgheC5kKSByZXR1cm4geS5zID8geCA6IHk7XHJcblxyXG4gICAgICAvLyBJZiB5IGlzIG5vdCBmaW5pdGUsIHJldHVybiBJbmZpbml0eSB3aXRoIHRoZSBzaWduIG9mIHggaWYgeSBpcyBJbmZpbml0eSwgZWxzZSBOYU4uXHJcbiAgICAgIGlmICgheS5kKSB7XHJcbiAgICAgICAgaWYgKHkucykgeS5zID0geC5zO1xyXG4gICAgICAgIHJldHVybiB5O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSWYgeSBpcyBub3QgemVybywgY2FsY3VsYXRlIHRoZSBuZWFyZXN0IG11bHRpcGxlIG9mIHkgdG8geC5cclxuICAgIGlmICh5LmRbMF0pIHtcclxuICAgICAgZXh0ZXJuYWwgPSBmYWxzZTtcclxuICAgICAgeCA9IGRpdmlkZSh4LCB5LCAwLCBybSwgMSkudGltZXMoeSk7XHJcbiAgICAgIGV4dGVybmFsID0gdHJ1ZTtcclxuICAgICAgZmluYWxpc2UoeCk7XHJcblxyXG4gICAgLy8gSWYgeSBpcyB6ZXJvLCByZXR1cm4gemVybyB3aXRoIHRoZSBzaWduIG9mIHguXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB5LnMgPSB4LnM7XHJcbiAgICAgIHggPSB5O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB4O1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGNvbnZlcnRlZCB0byBhIG51bWJlciBwcmltaXRpdmUuXHJcbiAgICogWmVybyBrZWVwcyBpdHMgc2lnbi5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAudG9OdW1iZXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gK3RoaXM7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGluIGJhc2UgOCwgcm91bmQgdG8gYHNkYCBzaWduaWZpY2FudFxyXG4gICAqIGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGBybWAuXHJcbiAgICpcclxuICAgKiBJZiB0aGUgb3B0aW9uYWwgYHNkYCBhcmd1bWVudCBpcyBwcmVzZW50IHRoZW4gcmV0dXJuIGJpbmFyeSBleHBvbmVudGlhbCBub3RhdGlvbi5cclxuICAgKlxyXG4gICAqIFtzZF0ge251bWJlcn0gU2lnbmlmaWNhbnQgZGlnaXRzLiBJbnRlZ2VyLCAxIHRvIE1BWF9ESUdJVFMgaW5jbHVzaXZlLlxyXG4gICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAudG9PY3RhbCA9IGZ1bmN0aW9uIChzZCwgcm0pIHtcclxuICAgIHJldHVybiB0b1N0cmluZ0JpbmFyeSh0aGlzLCA4LCBzZCwgcm0pO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgcmFpc2VkIHRvIHRoZSBwb3dlciBgeWAsIHJvdW5kZWRcclxuICAgKiB0byBgcHJlY2lzaW9uYCBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogRUNNQVNjcmlwdCBjb21wbGlhbnQuXHJcbiAgICpcclxuICAgKiAgIHBvdyh4LCBOYU4pICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBOYU5cclxuICAgKiAgIHBvdyh4LCDCsTApICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMVxyXG5cclxuICAgKiAgIHBvdyhOYU4sIG5vbi16ZXJvKSAgICAgICAgICAgICAgICAgICAgPSBOYU5cclxuICAgKiAgIHBvdyhhYnMoeCkgPiAxLCArSW5maW5pdHkpICAgICAgICAgICAgPSArSW5maW5pdHlcclxuICAgKiAgIHBvdyhhYnMoeCkgPiAxLCAtSW5maW5pdHkpICAgICAgICAgICAgPSArMFxyXG4gICAqICAgcG93KGFicyh4KSA9PSAxLCDCsUluZmluaXR5KSAgICAgICAgICAgPSBOYU5cclxuICAgKiAgIHBvdyhhYnMoeCkgPCAxLCArSW5maW5pdHkpICAgICAgICAgICAgPSArMFxyXG4gICAqICAgcG93KGFicyh4KSA8IDEsIC1JbmZpbml0eSkgICAgICAgICAgICA9ICtJbmZpbml0eVxyXG4gICAqICAgcG93KCtJbmZpbml0eSwgeSA+IDApICAgICAgICAgICAgICAgICA9ICtJbmZpbml0eVxyXG4gICAqICAgcG93KCtJbmZpbml0eSwgeSA8IDApICAgICAgICAgICAgICAgICA9ICswXHJcbiAgICogICBwb3coLUluZmluaXR5LCBvZGQgaW50ZWdlciA+IDApICAgICAgID0gLUluZmluaXR5XHJcbiAgICogICBwb3coLUluZmluaXR5LCBldmVuIGludGVnZXIgPiAwKSAgICAgID0gK0luZmluaXR5XHJcbiAgICogICBwb3coLUluZmluaXR5LCBvZGQgaW50ZWdlciA8IDApICAgICAgID0gLTBcclxuICAgKiAgIHBvdygtSW5maW5pdHksIGV2ZW4gaW50ZWdlciA8IDApICAgICAgPSArMFxyXG4gICAqICAgcG93KCswLCB5ID4gMCkgICAgICAgICAgICAgICAgICAgICAgICA9ICswXHJcbiAgICogICBwb3coKzAsIHkgPCAwKSAgICAgICAgICAgICAgICAgICAgICAgID0gK0luZmluaXR5XHJcbiAgICogICBwb3coLTAsIG9kZCBpbnRlZ2VyID4gMCkgICAgICAgICAgICAgID0gLTBcclxuICAgKiAgIHBvdygtMCwgZXZlbiBpbnRlZ2VyID4gMCkgICAgICAgICAgICAgPSArMFxyXG4gICAqICAgcG93KC0wLCBvZGQgaW50ZWdlciA8IDApICAgICAgICAgICAgICA9IC1JbmZpbml0eVxyXG4gICAqICAgcG93KC0wLCBldmVuIGludGVnZXIgPCAwKSAgICAgICAgICAgICA9ICtJbmZpbml0eVxyXG4gICAqICAgcG93KGZpbml0ZSB4IDwgMCwgZmluaXRlIG5vbi1pbnRlZ2VyKSA9IE5hTlxyXG4gICAqXHJcbiAgICogRm9yIG5vbi1pbnRlZ2VyIG9yIHZlcnkgbGFyZ2UgZXhwb25lbnRzIHBvdyh4LCB5KSBpcyBjYWxjdWxhdGVkIHVzaW5nXHJcbiAgICpcclxuICAgKiAgIHheeSA9IGV4cCh5KmxuKHgpKVxyXG4gICAqXHJcbiAgICogQXNzdW1pbmcgdGhlIGZpcnN0IDE1IHJvdW5kaW5nIGRpZ2l0cyBhcmUgZWFjaCBlcXVhbGx5IGxpa2VseSB0byBiZSBhbnkgZGlnaXQgMC05LCB0aGVcclxuICAgKiBwcm9iYWJpbGl0eSBvZiBhbiBpbmNvcnJlY3RseSByb3VuZGVkIHJlc3VsdFxyXG4gICAqIFAoWzQ5XTl7MTR9IHwgWzUwXTB7MTR9KSA9IDIgKiAwLjIgKiAxMF4tMTQgPSA0ZS0xNSA9IDEvMi41ZSsxNFxyXG4gICAqIGkuZS4gMSBpbiAyNTAsMDAwLDAwMCwwMDAsMDAwXHJcbiAgICpcclxuICAgKiBJZiBhIHJlc3VsdCBpcyBpbmNvcnJlY3RseSByb3VuZGVkIHRoZSBtYXhpbXVtIGVycm9yIHdpbGwgYmUgMSB1bHAgKHVuaXQgaW4gbGFzdCBwbGFjZSkuXHJcbiAgICpcclxuICAgKiB5IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IFRoZSBwb3dlciB0byB3aGljaCB0byByYWlzZSB0aGlzIERlY2ltYWwuXHJcbiAgICpcclxuICAgKi9cclxuICBQLnRvUG93ZXIgPSBQLnBvdyA9IGZ1bmN0aW9uICh5KSB7XHJcbiAgICB2YXIgZSwgaywgcHIsIHIsIHJtLCBzLFxyXG4gICAgICB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3IsXHJcbiAgICAgIHluID0gKyh5ID0gbmV3IEN0b3IoeSkpO1xyXG5cclxuICAgIC8vIEVpdGhlciDCsUluZmluaXR5LCBOYU4gb3IgwrEwP1xyXG4gICAgaWYgKCF4LmQgfHwgIXkuZCB8fCAheC5kWzBdIHx8ICF5LmRbMF0pIHJldHVybiBuZXcgQ3RvcihtYXRocG93KCt4LCB5bikpO1xyXG5cclxuICAgIHggPSBuZXcgQ3Rvcih4KTtcclxuXHJcbiAgICBpZiAoeC5lcSgxKSkgcmV0dXJuIHg7XHJcblxyXG4gICAgcHIgPSBDdG9yLnByZWNpc2lvbjtcclxuICAgIHJtID0gQ3Rvci5yb3VuZGluZztcclxuXHJcbiAgICBpZiAoeS5lcSgxKSkgcmV0dXJuIGZpbmFsaXNlKHgsIHByLCBybSk7XHJcblxyXG4gICAgLy8geSBleHBvbmVudFxyXG4gICAgZSA9IG1hdGhmbG9vcih5LmUgLyBMT0dfQkFTRSk7XHJcblxyXG4gICAgLy8gSWYgeSBpcyBhIHNtYWxsIGludGVnZXIgdXNlIHRoZSAnZXhwb25lbnRpYXRpb24gYnkgc3F1YXJpbmcnIGFsZ29yaXRobS5cclxuICAgIGlmIChlID49IHkuZC5sZW5ndGggLSAxICYmIChrID0geW4gPCAwID8gLXluIDogeW4pIDw9IE1BWF9TQUZFX0lOVEVHRVIpIHtcclxuICAgICAgciA9IGludFBvdyhDdG9yLCB4LCBrLCBwcik7XHJcbiAgICAgIHJldHVybiB5LnMgPCAwID8gbmV3IEN0b3IoMSkuZGl2KHIpIDogZmluYWxpc2UociwgcHIsIHJtKTtcclxuICAgIH1cclxuXHJcbiAgICBzID0geC5zO1xyXG5cclxuICAgIC8vIGlmIHggaXMgbmVnYXRpdmVcclxuICAgIGlmIChzIDwgMCkge1xyXG5cclxuICAgICAgLy8gaWYgeSBpcyBub3QgYW4gaW50ZWdlclxyXG4gICAgICBpZiAoZSA8IHkuZC5sZW5ndGggLSAxKSByZXR1cm4gbmV3IEN0b3IoTmFOKTtcclxuXHJcbiAgICAgIC8vIFJlc3VsdCBpcyBwb3NpdGl2ZSBpZiB4IGlzIG5lZ2F0aXZlIGFuZCB0aGUgbGFzdCBkaWdpdCBvZiBpbnRlZ2VyIHkgaXMgZXZlbi5cclxuICAgICAgaWYgKCh5LmRbZV0gJiAxKSA9PSAwKSBzID0gMTtcclxuXHJcbiAgICAgIC8vIGlmIHguZXEoLTEpXHJcbiAgICAgIGlmICh4LmUgPT0gMCAmJiB4LmRbMF0gPT0gMSAmJiB4LmQubGVuZ3RoID09IDEpIHtcclxuICAgICAgICB4LnMgPSBzO1xyXG4gICAgICAgIHJldHVybiB4O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRXN0aW1hdGUgcmVzdWx0IGV4cG9uZW50LlxyXG4gICAgLy8geF55ID0gMTBeZSwgIHdoZXJlIGUgPSB5ICogbG9nMTAoeClcclxuICAgIC8vIGxvZzEwKHgpID0gbG9nMTAoeF9zaWduaWZpY2FuZCkgKyB4X2V4cG9uZW50XHJcbiAgICAvLyBsb2cxMCh4X3NpZ25pZmljYW5kKSA9IGxuKHhfc2lnbmlmaWNhbmQpIC8gbG4oMTApXHJcbiAgICBrID0gbWF0aHBvdygreCwgeW4pO1xyXG4gICAgZSA9IGsgPT0gMCB8fCAhaXNGaW5pdGUoaylcclxuICAgICAgPyBtYXRoZmxvb3IoeW4gKiAoTWF0aC5sb2coJzAuJyArIGRpZ2l0c1RvU3RyaW5nKHguZCkpIC8gTWF0aC5MTjEwICsgeC5lICsgMSkpXHJcbiAgICAgIDogbmV3IEN0b3IoayArICcnKS5lO1xyXG5cclxuICAgIC8vIEV4cG9uZW50IGVzdGltYXRlIG1heSBiZSBpbmNvcnJlY3QgZS5nLiB4OiAwLjk5OTk5OTk5OTk5OTk5OTk5OSwgeTogMi4yOSwgZTogMCwgci5lOiAtMS5cclxuXHJcbiAgICAvLyBPdmVyZmxvdy91bmRlcmZsb3c/XHJcbiAgICBpZiAoZSA+IEN0b3IubWF4RSArIDEgfHwgZSA8IEN0b3IubWluRSAtIDEpIHJldHVybiBuZXcgQ3RvcihlID4gMCA/IHMgLyAwIDogMCk7XHJcblxyXG4gICAgZXh0ZXJuYWwgPSBmYWxzZTtcclxuICAgIEN0b3Iucm91bmRpbmcgPSB4LnMgPSAxO1xyXG5cclxuICAgIC8vIEVzdGltYXRlIHRoZSBleHRyYSBndWFyZCBkaWdpdHMgbmVlZGVkIHRvIGVuc3VyZSBmaXZlIGNvcnJlY3Qgcm91bmRpbmcgZGlnaXRzIGZyb21cclxuICAgIC8vIG5hdHVyYWxMb2dhcml0aG0oeCkuIEV4YW1wbGUgb2YgZmFpbHVyZSB3aXRob3V0IHRoZXNlIGV4dHJhIGRpZ2l0cyAocHJlY2lzaW9uOiAxMCk6XHJcbiAgICAvLyBuZXcgRGVjaW1hbCgyLjMyNDU2KS5wb3coJzIwODc5ODc0MzY1MzQ1NjYuNDY0MTEnKVxyXG4gICAgLy8gc2hvdWxkIGJlIDEuMTYyMzc3ODIzZSs3NjQ5MTQ5MDUxNzM4MTUsIGJ1dCBpcyAxLjE2MjM1NTgyM2UrNzY0OTE0OTA1MTczODE1XHJcbiAgICBrID0gTWF0aC5taW4oMTIsIChlICsgJycpLmxlbmd0aCk7XHJcblxyXG4gICAgLy8gciA9IHheeSA9IGV4cCh5KmxuKHgpKVxyXG4gICAgciA9IG5hdHVyYWxFeHBvbmVudGlhbCh5LnRpbWVzKG5hdHVyYWxMb2dhcml0aG0oeCwgcHIgKyBrKSksIHByKTtcclxuXHJcbiAgICAvLyByIG1heSBiZSBJbmZpbml0eSwgZS5nLiAoMC45OTk5OTk5OTk5OTk5OTk5KS5wb3coLTFlKzQwKVxyXG4gICAgaWYgKHIuZCkge1xyXG5cclxuICAgICAgLy8gVHJ1bmNhdGUgdG8gdGhlIHJlcXVpcmVkIHByZWNpc2lvbiBwbHVzIGZpdmUgcm91bmRpbmcgZGlnaXRzLlxyXG4gICAgICByID0gZmluYWxpc2UociwgcHIgKyA1LCAxKTtcclxuXHJcbiAgICAgIC8vIElmIHRoZSByb3VuZGluZyBkaWdpdHMgYXJlIFs0OV05OTk5IG9yIFs1MF0wMDAwIGluY3JlYXNlIHRoZSBwcmVjaXNpb24gYnkgMTAgYW5kIHJlY2FsY3VsYXRlXHJcbiAgICAgIC8vIHRoZSByZXN1bHQuXHJcbiAgICAgIGlmIChjaGVja1JvdW5kaW5nRGlnaXRzKHIuZCwgcHIsIHJtKSkge1xyXG4gICAgICAgIGUgPSBwciArIDEwO1xyXG5cclxuICAgICAgICAvLyBUcnVuY2F0ZSB0byB0aGUgaW5jcmVhc2VkIHByZWNpc2lvbiBwbHVzIGZpdmUgcm91bmRpbmcgZGlnaXRzLlxyXG4gICAgICAgIHIgPSBmaW5hbGlzZShuYXR1cmFsRXhwb25lbnRpYWwoeS50aW1lcyhuYXR1cmFsTG9nYXJpdGhtKHgsIGUgKyBrKSksIGUpLCBlICsgNSwgMSk7XHJcblxyXG4gICAgICAgIC8vIENoZWNrIGZvciAxNCBuaW5lcyBmcm9tIHRoZSAybmQgcm91bmRpbmcgZGlnaXQgKHRoZSBmaXJzdCByb3VuZGluZyBkaWdpdCBtYXkgYmUgNCBvciA5KS5cclxuICAgICAgICBpZiAoK2RpZ2l0c1RvU3RyaW5nKHIuZCkuc2xpY2UocHIgKyAxLCBwciArIDE1KSArIDEgPT0gMWUxNCkge1xyXG4gICAgICAgICAgciA9IGZpbmFsaXNlKHIsIHByICsgMSwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgci5zID0gcztcclxuICAgIGV4dGVybmFsID0gdHJ1ZTtcclxuICAgIEN0b3Iucm91bmRpbmcgPSBybTtcclxuXHJcbiAgICByZXR1cm4gZmluYWxpc2UociwgcHIsIHJtKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgcm91bmRlZCB0byBgc2RgIHNpZ25pZmljYW50IGRpZ2l0c1xyXG4gICAqIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIFJldHVybiBleHBvbmVudGlhbCBub3RhdGlvbiBpZiBgc2RgIGlzIGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBuZWNlc3NhcnkgdG8gcmVwcmVzZW50XHJcbiAgICogdGhlIGludGVnZXIgcGFydCBvZiB0aGUgdmFsdWUgaW4gbm9ybWFsIG5vdGF0aW9uLlxyXG4gICAqXHJcbiAgICogW3NkXSB7bnVtYmVyfSBTaWduaWZpY2FudCBkaWdpdHMuIEludGVnZXIsIDEgdG8gTUFYX0RJR0lUUyBpbmNsdXNpdmUuXHJcbiAgICogW3JtXSB7bnVtYmVyfSBSb3VuZGluZyBtb2RlLiBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC50b1ByZWNpc2lvbiA9IGZ1bmN0aW9uIChzZCwgcm0pIHtcclxuICAgIHZhciBzdHIsXHJcbiAgICAgIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjtcclxuXHJcbiAgICBpZiAoc2QgPT09IHZvaWQgMCkge1xyXG4gICAgICBzdHIgPSBmaW5pdGVUb1N0cmluZyh4LCB4LmUgPD0gQ3Rvci50b0V4cE5lZyB8fCB4LmUgPj0gQ3Rvci50b0V4cFBvcyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjaGVja0ludDMyKHNkLCAxLCBNQVhfRElHSVRTKTtcclxuXHJcbiAgICAgIGlmIChybSA9PT0gdm9pZCAwKSBybSA9IEN0b3Iucm91bmRpbmc7XHJcbiAgICAgIGVsc2UgY2hlY2tJbnQzMihybSwgMCwgOCk7XHJcblxyXG4gICAgICB4ID0gZmluYWxpc2UobmV3IEN0b3IoeCksIHNkLCBybSk7XHJcbiAgICAgIHN0ciA9IGZpbml0ZVRvU3RyaW5nKHgsIHNkIDw9IHguZSB8fCB4LmUgPD0gQ3Rvci50b0V4cE5lZywgc2QpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB4LmlzTmVnKCkgJiYgIXguaXNaZXJvKCkgPyAnLScgKyBzdHIgOiBzdHI7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCByb3VuZGVkIHRvIGEgbWF4aW11bSBvZiBgc2RgXHJcbiAgICogc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJtYCwgb3IgdG8gYHByZWNpc2lvbmAgYW5kIGByb3VuZGluZ2AgcmVzcGVjdGl2ZWx5IGlmXHJcbiAgICogb21pdHRlZC5cclxuICAgKlxyXG4gICAqIFtzZF0ge251bWJlcn0gU2lnbmlmaWNhbnQgZGlnaXRzLiBJbnRlZ2VyLCAxIHRvIE1BWF9ESUdJVFMgaW5jbHVzaXZlLlxyXG4gICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgKlxyXG4gICAqICd0b1NEKCkgZGlnaXRzIG91dCBvZiByYW5nZToge3NkfSdcclxuICAgKiAndG9TRCgpIGRpZ2l0cyBub3QgYW4gaW50ZWdlcjoge3NkfSdcclxuICAgKiAndG9TRCgpIHJvdW5kaW5nIG1vZGUgbm90IGFuIGludGVnZXI6IHtybX0nXHJcbiAgICogJ3RvU0QoKSByb3VuZGluZyBtb2RlIG91dCBvZiByYW5nZToge3JtfSdcclxuICAgKlxyXG4gICAqL1xyXG4gIFAudG9TaWduaWZpY2FudERpZ2l0cyA9IFAudG9TRCA9IGZ1bmN0aW9uIChzZCwgcm0pIHtcclxuICAgIHZhciB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7XHJcblxyXG4gICAgaWYgKHNkID09PSB2b2lkIDApIHtcclxuICAgICAgc2QgPSBDdG9yLnByZWNpc2lvbjtcclxuICAgICAgcm0gPSBDdG9yLnJvdW5kaW5nO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY2hlY2tJbnQzMihzZCwgMSwgTUFYX0RJR0lUUyk7XHJcblxyXG4gICAgICBpZiAocm0gPT09IHZvaWQgMCkgcm0gPSBDdG9yLnJvdW5kaW5nO1xyXG4gICAgICBlbHNlIGNoZWNrSW50MzIocm0sIDAsIDgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmaW5hbGlzZShuZXcgQ3Rvcih4KSwgc2QsIHJtKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwuXHJcbiAgICpcclxuICAgKiBSZXR1cm4gZXhwb25lbnRpYWwgbm90YXRpb24gaWYgdGhpcyBEZWNpbWFsIGhhcyBhIHBvc2l0aXZlIGV4cG9uZW50IGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhblxyXG4gICAqIGB0b0V4cFBvc2AsIG9yIGEgbmVnYXRpdmUgZXhwb25lbnQgZXF1YWwgdG8gb3IgbGVzcyB0aGFuIGB0b0V4cE5lZ2AuXHJcbiAgICpcclxuICAgKi9cclxuICBQLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcixcclxuICAgICAgc3RyID0gZmluaXRlVG9TdHJpbmcoeCwgeC5lIDw9IEN0b3IudG9FeHBOZWcgfHwgeC5lID49IEN0b3IudG9FeHBQb3MpO1xyXG5cclxuICAgIHJldHVybiB4LmlzTmVnKCkgJiYgIXguaXNaZXJvKCkgPyAnLScgKyBzdHIgOiBzdHI7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCB0cnVuY2F0ZWQgdG8gYSB3aG9sZSBudW1iZXIuXHJcbiAgICpcclxuICAgKi9cclxuICBQLnRydW5jYXRlZCA9IFAudHJ1bmMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gZmluYWxpc2UobmV3IHRoaXMuY29uc3RydWN0b3IodGhpcyksIHRoaXMuZSArIDEsIDEpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbC5cclxuICAgKiBVbmxpa2UgYHRvU3RyaW5nYCwgbmVnYXRpdmUgemVybyB3aWxsIGluY2x1ZGUgdGhlIG1pbnVzIHNpZ24uXHJcbiAgICpcclxuICAgKi9cclxuICBQLnZhbHVlT2YgPSBQLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3IsXHJcbiAgICAgIHN0ciA9IGZpbml0ZVRvU3RyaW5nKHgsIHguZSA8PSBDdG9yLnRvRXhwTmVnIHx8IHguZSA+PSBDdG9yLnRvRXhwUG9zKTtcclxuXHJcbiAgICByZXR1cm4geC5pc05lZygpID8gJy0nICsgc3RyIDogc3RyO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gIC8vIEFkZCBhbGlhc2VzIHRvIG1hdGNoIEJpZ0RlY2ltYWwgbWV0aG9kIG5hbWVzLlxyXG4gIC8vIFAuYWRkID0gUC5wbHVzO1xyXG4gIFAuc3VidHJhY3QgPSBQLm1pbnVzO1xyXG4gIFAubXVsdGlwbHkgPSBQLnRpbWVzO1xyXG4gIFAuZGl2aWRlID0gUC5kaXY7XHJcbiAgUC5yZW1haW5kZXIgPSBQLm1vZDtcclxuICBQLmNvbXBhcmVUbyA9IFAuY21wO1xyXG4gIFAubmVnYXRlID0gUC5uZWc7XHJcbiAgICovXHJcblxyXG5cclxuICAvLyBIZWxwZXIgZnVuY3Rpb25zIGZvciBEZWNpbWFsLnByb3RvdHlwZSAoUCkgYW5kL29yIERlY2ltYWwgbWV0aG9kcywgYW5kIHRoZWlyIGNhbGxlcnMuXHJcblxyXG5cclxuICAvKlxyXG4gICAqICBkaWdpdHNUb1N0cmluZyAgICAgICAgICAgUC5jdWJlUm9vdCwgUC5sb2dhcml0aG0sIFAuc3F1YXJlUm9vdCwgUC50b0ZyYWN0aW9uLCBQLnRvUG93ZXIsXHJcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5pdGVUb1N0cmluZywgbmF0dXJhbEV4cG9uZW50aWFsLCBuYXR1cmFsTG9nYXJpdGhtXHJcbiAgICogIGNoZWNrSW50MzIgICAgICAgICAgICAgICBQLnRvRGVjaW1hbFBsYWNlcywgUC50b0V4cG9uZW50aWFsLCBQLnRvRml4ZWQsIFAudG9OZWFyZXN0LFxyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgUC50b1ByZWNpc2lvbiwgUC50b1NpZ25pZmljYW50RGlnaXRzLCB0b1N0cmluZ0JpbmFyeSwgcmFuZG9tXHJcbiAgICogIGNoZWNrUm91bmRpbmdEaWdpdHMgICAgICBQLmxvZ2FyaXRobSwgUC50b1Bvd2VyLCBuYXR1cmFsRXhwb25lbnRpYWwsIG5hdHVyYWxMb2dhcml0aG1cclxuICAgKiAgY29udmVydEJhc2UgICAgICAgICAgICAgIHRvU3RyaW5nQmluYXJ5LCBwYXJzZU90aGVyXHJcbiAgICogIGNvcyAgICAgICAgICAgICAgICAgICAgICBQLmNvc1xyXG4gICAqICBkaXZpZGUgICAgICAgICAgICAgICAgICAgUC5hdGFuaCwgUC5jdWJlUm9vdCwgUC5kaXZpZGVkQnksIFAuZGl2aWRlZFRvSW50ZWdlckJ5LFxyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgUC5sb2dhcml0aG0sIFAubW9kdWxvLCBQLnNxdWFyZVJvb3QsIFAudGFuLCBQLnRhbmgsIFAudG9GcmFjdGlvbixcclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFAudG9OZWFyZXN0LCB0b1N0cmluZ0JpbmFyeSwgbmF0dXJhbEV4cG9uZW50aWFsLCBuYXR1cmFsTG9nYXJpdGhtLFxyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF5bG9yU2VyaWVzLCBhdGFuMiwgcGFyc2VPdGhlclxyXG4gICAqICBmaW5hbGlzZSAgICAgICAgICAgICAgICAgUC5hYnNvbHV0ZVZhbHVlLCBQLmF0YW4sIFAuYXRhbmgsIFAuY2VpbCwgUC5jb3MsIFAuY29zaCxcclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFAuY3ViZVJvb3QsIFAuZGl2aWRlZFRvSW50ZWdlckJ5LCBQLmZsb29yLCBQLmxvZ2FyaXRobSwgUC5taW51cyxcclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFAubW9kdWxvLCBQLm5lZ2F0ZWQsIFAucGx1cywgUC5yb3VuZCwgUC5zaW4sIFAuc2luaCwgUC5zcXVhcmVSb290LFxyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgUC50YW4sIFAudGltZXMsIFAudG9EZWNpbWFsUGxhY2VzLCBQLnRvRXhwb25lbnRpYWwsIFAudG9GaXhlZCxcclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFAudG9OZWFyZXN0LCBQLnRvUG93ZXIsIFAudG9QcmVjaXNpb24sIFAudG9TaWduaWZpY2FudERpZ2l0cyxcclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFAudHJ1bmNhdGVkLCBkaXZpZGUsIGdldExuMTAsIGdldFBpLCBuYXR1cmFsRXhwb25lbnRpYWwsXHJcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBuYXR1cmFsTG9nYXJpdGhtLCBjZWlsLCBmbG9vciwgcm91bmQsIHRydW5jXHJcbiAgICogIGZpbml0ZVRvU3RyaW5nICAgICAgICAgICBQLnRvRXhwb25lbnRpYWwsIFAudG9GaXhlZCwgUC50b1ByZWNpc2lvbiwgUC50b1N0cmluZywgUC52YWx1ZU9mLFxyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9TdHJpbmdCaW5hcnlcclxuICAgKiAgZ2V0QmFzZTEwRXhwb25lbnQgICAgICAgIFAubWludXMsIFAucGx1cywgUC50aW1lcywgcGFyc2VPdGhlclxyXG4gICAqICBnZXRMbjEwICAgICAgICAgICAgICAgICAgUC5sb2dhcml0aG0sIG5hdHVyYWxMb2dhcml0aG1cclxuICAgKiAgZ2V0UGkgICAgICAgICAgICAgICAgICAgIFAuYWNvcywgUC5hc2luLCBQLmF0YW4sIHRvTGVzc1RoYW5IYWxmUGksIGF0YW4yXHJcbiAgICogIGdldFByZWNpc2lvbiAgICAgICAgICAgICBQLnByZWNpc2lvbiwgUC50b0ZyYWN0aW9uXHJcbiAgICogIGdldFplcm9TdHJpbmcgICAgICAgICAgICBkaWdpdHNUb1N0cmluZywgZmluaXRlVG9TdHJpbmdcclxuICAgKiAgaW50UG93ICAgICAgICAgICAgICAgICAgIFAudG9Qb3dlciwgcGFyc2VPdGhlclxyXG4gICAqICBpc09kZCAgICAgICAgICAgICAgICAgICAgdG9MZXNzVGhhbkhhbGZQaVxyXG4gICAqICBtYXhPck1pbiAgICAgICAgICAgICAgICAgbWF4LCBtaW5cclxuICAgKiAgbmF0dXJhbEV4cG9uZW50aWFsICAgICAgIFAubmF0dXJhbEV4cG9uZW50aWFsLCBQLnRvUG93ZXJcclxuICAgKiAgbmF0dXJhbExvZ2FyaXRobSAgICAgICAgIFAuYWNvc2gsIFAuYXNpbmgsIFAuYXRhbmgsIFAubG9nYXJpdGhtLCBQLm5hdHVyYWxMb2dhcml0aG0sXHJcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBQLnRvUG93ZXIsIG5hdHVyYWxFeHBvbmVudGlhbFxyXG4gICAqICBub25GaW5pdGVUb1N0cmluZyAgICAgICAgZmluaXRlVG9TdHJpbmcsIHRvU3RyaW5nQmluYXJ5XHJcbiAgICogIHBhcnNlRGVjaW1hbCAgICAgICAgICAgICBEZWNpbWFsXHJcbiAgICogIHBhcnNlT3RoZXIgICAgICAgICAgICAgICBEZWNpbWFsXHJcbiAgICogIHNpbiAgICAgICAgICAgICAgICAgICAgICBQLnNpblxyXG4gICAqICB0YXlsb3JTZXJpZXMgICAgICAgICAgICAgUC5jb3NoLCBQLnNpbmgsIGNvcywgc2luXHJcbiAgICogIHRvTGVzc1RoYW5IYWxmUGkgICAgICAgICBQLmNvcywgUC5zaW5cclxuICAgKiAgdG9TdHJpbmdCaW5hcnkgICAgICAgICAgIFAudG9CaW5hcnksIFAudG9IZXhhZGVjaW1hbCwgUC50b09jdGFsXHJcbiAgICogIHRydW5jYXRlICAgICAgICAgICAgICAgICBpbnRQb3dcclxuICAgKlxyXG4gICAqICBUaHJvd3M6ICAgICAgICAgICAgICAgICAgUC5sb2dhcml0aG0sIFAucHJlY2lzaW9uLCBQLnRvRnJhY3Rpb24sIGNoZWNrSW50MzIsIGdldExuMTAsIGdldFBpLFxyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0dXJhbExvZ2FyaXRobSwgY29uZmlnLCBwYXJzZU90aGVyLCByYW5kb20sIERlY2ltYWxcclxuICAgKi9cclxuXHJcblxyXG4gIGZ1bmN0aW9uIGRpZ2l0c1RvU3RyaW5nKGQpIHtcclxuICAgIHZhciBpLCBrLCB3cyxcclxuICAgICAgaW5kZXhPZkxhc3RXb3JkID0gZC5sZW5ndGggLSAxLFxyXG4gICAgICBzdHIgPSAnJyxcclxuICAgICAgdyA9IGRbMF07XHJcblxyXG4gICAgaWYgKGluZGV4T2ZMYXN0V29yZCA+IDApIHtcclxuICAgICAgc3RyICs9IHc7XHJcbiAgICAgIGZvciAoaSA9IDE7IGkgPCBpbmRleE9mTGFzdFdvcmQ7IGkrKykge1xyXG4gICAgICAgIHdzID0gZFtpXSArICcnO1xyXG4gICAgICAgIGsgPSBMT0dfQkFTRSAtIHdzLmxlbmd0aDtcclxuICAgICAgICBpZiAoaykgc3RyICs9IGdldFplcm9TdHJpbmcoayk7XHJcbiAgICAgICAgc3RyICs9IHdzO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB3ID0gZFtpXTtcclxuICAgICAgd3MgPSB3ICsgJyc7XHJcbiAgICAgIGsgPSBMT0dfQkFTRSAtIHdzLmxlbmd0aDtcclxuICAgICAgaWYgKGspIHN0ciArPSBnZXRaZXJvU3RyaW5nKGspO1xyXG4gICAgfSBlbHNlIGlmICh3ID09PSAwKSB7XHJcbiAgICAgIHJldHVybiAnMCc7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHplcm9zIG9mIGxhc3Qgdy5cclxuICAgIGZvciAoOyB3ICUgMTAgPT09IDA7KSB3IC89IDEwO1xyXG5cclxuICAgIHJldHVybiBzdHIgKyB3O1xyXG4gIH1cclxuXHJcblxyXG4gIGZ1bmN0aW9uIGNoZWNrSW50MzIoaSwgbWluLCBtYXgpIHtcclxuICAgIGlmIChpICE9PSB+fmkgfHwgaSA8IG1pbiB8fCBpID4gbWF4KSB7XHJcbiAgICAgIHRocm93IEVycm9yKGludmFsaWRBcmd1bWVudCArIGkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogQ2hlY2sgNSByb3VuZGluZyBkaWdpdHMgaWYgYHJlcGVhdGluZ2AgaXMgbnVsbCwgNCBvdGhlcndpc2UuXHJcbiAgICogYHJlcGVhdGluZyA9PSBudWxsYCBpZiBjYWxsZXIgaXMgYGxvZ2Agb3IgYHBvd2AsXHJcbiAgICogYHJlcGVhdGluZyAhPSBudWxsYCBpZiBjYWxsZXIgaXMgYG5hdHVyYWxMb2dhcml0aG1gIG9yIGBuYXR1cmFsRXhwb25lbnRpYWxgLlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGNoZWNrUm91bmRpbmdEaWdpdHMoZCwgaSwgcm0sIHJlcGVhdGluZykge1xyXG4gICAgdmFyIGRpLCBrLCByLCByZDtcclxuXHJcbiAgICAvLyBHZXQgdGhlIGxlbmd0aCBvZiB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgYXJyYXkgZC5cclxuICAgIGZvciAoayA9IGRbMF07IGsgPj0gMTA7IGsgLz0gMTApIC0taTtcclxuXHJcbiAgICAvLyBJcyB0aGUgcm91bmRpbmcgZGlnaXQgaW4gdGhlIGZpcnN0IHdvcmQgb2YgZD9cclxuICAgIGlmICgtLWkgPCAwKSB7XHJcbiAgICAgIGkgKz0gTE9HX0JBU0U7XHJcbiAgICAgIGRpID0gMDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRpID0gTWF0aC5jZWlsKChpICsgMSkgLyBMT0dfQkFTRSk7XHJcbiAgICAgIGkgJT0gTE9HX0JBU0U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaSBpcyB0aGUgaW5kZXggKDAgLSA2KSBvZiB0aGUgcm91bmRpbmcgZGlnaXQuXHJcbiAgICAvLyBFLmcuIGlmIHdpdGhpbiB0aGUgd29yZCAzNDg3NTYzIHRoZSBmaXJzdCByb3VuZGluZyBkaWdpdCBpcyA1LFxyXG4gICAgLy8gdGhlbiBpID0gNCwgayA9IDEwMDAsIHJkID0gMzQ4NzU2MyAlIDEwMDAgPSA1NjNcclxuICAgIGsgPSBtYXRocG93KDEwLCBMT0dfQkFTRSAtIGkpO1xyXG4gICAgcmQgPSBkW2RpXSAlIGsgfCAwO1xyXG5cclxuICAgIGlmIChyZXBlYXRpbmcgPT0gbnVsbCkge1xyXG4gICAgICBpZiAoaSA8IDMpIHtcclxuICAgICAgICBpZiAoaSA9PSAwKSByZCA9IHJkIC8gMTAwIHwgMDtcclxuICAgICAgICBlbHNlIGlmIChpID09IDEpIHJkID0gcmQgLyAxMCB8IDA7XHJcbiAgICAgICAgciA9IHJtIDwgNCAmJiByZCA9PSA5OTk5OSB8fCBybSA+IDMgJiYgcmQgPT0gNDk5OTkgfHwgcmQgPT0gNTAwMDAgfHwgcmQgPT0gMDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByID0gKHJtIDwgNCAmJiByZCArIDEgPT0gayB8fCBybSA+IDMgJiYgcmQgKyAxID09IGsgLyAyKSAmJlxyXG4gICAgICAgICAgKGRbZGkgKyAxXSAvIGsgLyAxMDAgfCAwKSA9PSBtYXRocG93KDEwLCBpIC0gMikgLSAxIHx8XHJcbiAgICAgICAgICAgIChyZCA9PSBrIC8gMiB8fCByZCA9PSAwKSAmJiAoZFtkaSArIDFdIC8gayAvIDEwMCB8IDApID09IDA7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChpIDwgNCkge1xyXG4gICAgICAgIGlmIChpID09IDApIHJkID0gcmQgLyAxMDAwIHwgMDtcclxuICAgICAgICBlbHNlIGlmIChpID09IDEpIHJkID0gcmQgLyAxMDAgfCAwO1xyXG4gICAgICAgIGVsc2UgaWYgKGkgPT0gMikgcmQgPSByZCAvIDEwIHwgMDtcclxuICAgICAgICByID0gKHJlcGVhdGluZyB8fCBybSA8IDQpICYmIHJkID09IDk5OTkgfHwgIXJlcGVhdGluZyAmJiBybSA+IDMgJiYgcmQgPT0gNDk5OTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByID0gKChyZXBlYXRpbmcgfHwgcm0gPCA0KSAmJiByZCArIDEgPT0gayB8fFxyXG4gICAgICAgICghcmVwZWF0aW5nICYmIHJtID4gMykgJiYgcmQgKyAxID09IGsgLyAyKSAmJlxyXG4gICAgICAgICAgKGRbZGkgKyAxXSAvIGsgLyAxMDAwIHwgMCkgPT0gbWF0aHBvdygxMCwgaSAtIDMpIC0gMTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIENvbnZlcnQgc3RyaW5nIG9mIGBiYXNlSW5gIHRvIGFuIGFycmF5IG9mIG51bWJlcnMgb2YgYGJhc2VPdXRgLlxyXG4gIC8vIEVnLiBjb252ZXJ0QmFzZSgnMjU1JywgMTAsIDE2KSByZXR1cm5zIFsxNSwgMTVdLlxyXG4gIC8vIEVnLiBjb252ZXJ0QmFzZSgnZmYnLCAxNiwgMTApIHJldHVybnMgWzIsIDUsIDVdLlxyXG4gIGZ1bmN0aW9uIGNvbnZlcnRCYXNlKHN0ciwgYmFzZUluLCBiYXNlT3V0KSB7XHJcbiAgICB2YXIgaixcclxuICAgICAgYXJyID0gWzBdLFxyXG4gICAgICBhcnJMLFxyXG4gICAgICBpID0gMCxcclxuICAgICAgc3RyTCA9IHN0ci5sZW5ndGg7XHJcblxyXG4gICAgZm9yICg7IGkgPCBzdHJMOykge1xyXG4gICAgICBmb3IgKGFyckwgPSBhcnIubGVuZ3RoOyBhcnJMLS07KSBhcnJbYXJyTF0gKj0gYmFzZUluO1xyXG4gICAgICBhcnJbMF0gKz0gTlVNRVJBTFMuaW5kZXhPZihzdHIuY2hhckF0KGkrKykpO1xyXG4gICAgICBmb3IgKGogPSAwOyBqIDwgYXJyLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgaWYgKGFycltqXSA+IGJhc2VPdXQgLSAxKSB7XHJcbiAgICAgICAgICBpZiAoYXJyW2ogKyAxXSA9PT0gdm9pZCAwKSBhcnJbaiArIDFdID0gMDtcclxuICAgICAgICAgIGFycltqICsgMV0gKz0gYXJyW2pdIC8gYmFzZU91dCB8IDA7XHJcbiAgICAgICAgICBhcnJbal0gJT0gYmFzZU91dDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYXJyLnJldmVyc2UoKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIGNvcyh4KSA9IDEgLSB4XjIvMiEgKyB4XjQvNCEgLSAuLi5cclxuICAgKiB8eHwgPCBwaS8yXHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBjb3NpbmUoQ3RvciwgeCkge1xyXG4gICAgdmFyIGssIHksXHJcbiAgICAgIGxlbiA9IHguZC5sZW5ndGg7XHJcblxyXG4gICAgLy8gQXJndW1lbnQgcmVkdWN0aW9uOiBjb3MoNHgpID0gOCooY29zXjQoeCkgLSBjb3NeMih4KSkgKyAxXHJcbiAgICAvLyBpLmUuIGNvcyh4KSA9IDgqKGNvc140KHgvNCkgLSBjb3NeMih4LzQpKSArIDFcclxuXHJcbiAgICAvLyBFc3RpbWF0ZSB0aGUgb3B0aW11bSBudW1iZXIgb2YgdGltZXMgdG8gdXNlIHRoZSBhcmd1bWVudCByZWR1Y3Rpb24uXHJcbiAgICBpZiAobGVuIDwgMzIpIHtcclxuICAgICAgayA9IE1hdGguY2VpbChsZW4gLyAzKTtcclxuICAgICAgeSA9ICgxIC8gdGlueVBvdyg0LCBrKSkudG9TdHJpbmcoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGsgPSAxNjtcclxuICAgICAgeSA9ICcyLjMyODMwNjQzNjUzODY5NjI4OTA2MjVlLTEwJztcclxuICAgIH1cclxuXHJcbiAgICBDdG9yLnByZWNpc2lvbiArPSBrO1xyXG5cclxuICAgIHggPSB0YXlsb3JTZXJpZXMoQ3RvciwgMSwgeC50aW1lcyh5KSwgbmV3IEN0b3IoMSkpO1xyXG5cclxuICAgIC8vIFJldmVyc2UgYXJndW1lbnQgcmVkdWN0aW9uXHJcbiAgICBmb3IgKHZhciBpID0gazsgaS0tOykge1xyXG4gICAgICB2YXIgY29zMnggPSB4LnRpbWVzKHgpO1xyXG4gICAgICB4ID0gY29zMngudGltZXMoY29zMngpLm1pbnVzKGNvczJ4KS50aW1lcyg4KS5wbHVzKDEpO1xyXG4gICAgfVxyXG5cclxuICAgIEN0b3IucHJlY2lzaW9uIC09IGs7XHJcblxyXG4gICAgcmV0dXJuIHg7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBQZXJmb3JtIGRpdmlzaW9uIGluIHRoZSBzcGVjaWZpZWQgYmFzZS5cclxuICAgKi9cclxuICB2YXIgZGl2aWRlID0gKGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAvLyBBc3N1bWVzIG5vbi16ZXJvIHggYW5kIGssIGFuZCBoZW5jZSBub24temVybyByZXN1bHQuXHJcbiAgICBmdW5jdGlvbiBtdWx0aXBseUludGVnZXIoeCwgaywgYmFzZSkge1xyXG4gICAgICB2YXIgdGVtcCxcclxuICAgICAgICBjYXJyeSA9IDAsXHJcbiAgICAgICAgaSA9IHgubGVuZ3RoO1xyXG5cclxuICAgICAgZm9yICh4ID0geC5zbGljZSgpOyBpLS07KSB7XHJcbiAgICAgICAgdGVtcCA9IHhbaV0gKiBrICsgY2Fycnk7XHJcbiAgICAgICAgeFtpXSA9IHRlbXAgJSBiYXNlIHwgMDtcclxuICAgICAgICBjYXJyeSA9IHRlbXAgLyBiYXNlIHwgMDtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNhcnJ5KSB4LnVuc2hpZnQoY2FycnkpO1xyXG5cclxuICAgICAgcmV0dXJuIHg7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gY29tcGFyZShhLCBiLCBhTCwgYkwpIHtcclxuICAgICAgdmFyIGksIHI7XHJcblxyXG4gICAgICBpZiAoYUwgIT0gYkwpIHtcclxuICAgICAgICByID0gYUwgPiBiTCA/IDEgOiAtMTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBmb3IgKGkgPSByID0gMDsgaSA8IGFMOyBpKyspIHtcclxuICAgICAgICAgIGlmIChhW2ldICE9IGJbaV0pIHtcclxuICAgICAgICAgICAgciA9IGFbaV0gPiBiW2ldID8gMSA6IC0xO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiByO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHN1YnRyYWN0KGEsIGIsIGFMLCBiYXNlKSB7XHJcbiAgICAgIHZhciBpID0gMDtcclxuXHJcbiAgICAgIC8vIFN1YnRyYWN0IGIgZnJvbSBhLlxyXG4gICAgICBmb3IgKDsgYUwtLTspIHtcclxuICAgICAgICBhW2FMXSAtPSBpO1xyXG4gICAgICAgIGkgPSBhW2FMXSA8IGJbYUxdID8gMSA6IDA7XHJcbiAgICAgICAgYVthTF0gPSBpICogYmFzZSArIGFbYUxdIC0gYlthTF07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFJlbW92ZSBsZWFkaW5nIHplcm9zLlxyXG4gICAgICBmb3IgKDsgIWFbMF0gJiYgYS5sZW5ndGggPiAxOykgYS5zaGlmdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmdW5jdGlvbiAoeCwgeSwgcHIsIHJtLCBkcCwgYmFzZSkge1xyXG4gICAgICB2YXIgY21wLCBlLCBpLCBrLCBsb2dCYXNlLCBtb3JlLCBwcm9kLCBwcm9kTCwgcSwgcWQsIHJlbSwgcmVtTCwgcmVtMCwgc2QsIHQsIHhpLCB4TCwgeWQwLFxyXG4gICAgICAgIHlMLCB5eixcclxuICAgICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcixcclxuICAgICAgICBzaWduID0geC5zID09IHkucyA/IDEgOiAtMSxcclxuICAgICAgICB4ZCA9IHguZCxcclxuICAgICAgICB5ZCA9IHkuZDtcclxuXHJcbiAgICAgIC8vIEVpdGhlciBOYU4sIEluZmluaXR5IG9yIDA/XHJcbiAgICAgIGlmICgheGQgfHwgIXhkWzBdIHx8ICF5ZCB8fCAheWRbMF0pIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIG5ldyBDdG9yKC8vIFJldHVybiBOYU4gaWYgZWl0aGVyIE5hTiwgb3IgYm90aCBJbmZpbml0eSBvciAwLlxyXG4gICAgICAgICAgIXgucyB8fCAheS5zIHx8ICh4ZCA/IHlkICYmIHhkWzBdID09IHlkWzBdIDogIXlkKSA/IE5hTiA6XHJcblxyXG4gICAgICAgICAgLy8gUmV0dXJuIMKxMCBpZiB4IGlzIDAgb3IgeSBpcyDCsUluZmluaXR5LCBvciByZXR1cm4gwrFJbmZpbml0eSBhcyB5IGlzIDAuXHJcbiAgICAgICAgICB4ZCAmJiB4ZFswXSA9PSAwIHx8ICF5ZCA/IHNpZ24gKiAwIDogc2lnbiAvIDApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoYmFzZSkge1xyXG4gICAgICAgIGxvZ0Jhc2UgPSAxO1xyXG4gICAgICAgIGUgPSB4LmUgLSB5LmU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYmFzZSA9IEJBU0U7XHJcbiAgICAgICAgbG9nQmFzZSA9IExPR19CQVNFO1xyXG4gICAgICAgIGUgPSBtYXRoZmxvb3IoeC5lIC8gbG9nQmFzZSkgLSBtYXRoZmxvb3IoeS5lIC8gbG9nQmFzZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHlMID0geWQubGVuZ3RoO1xyXG4gICAgICB4TCA9IHhkLmxlbmd0aDtcclxuICAgICAgcSA9IG5ldyBDdG9yKHNpZ24pO1xyXG4gICAgICBxZCA9IHEuZCA9IFtdO1xyXG5cclxuICAgICAgLy8gUmVzdWx0IGV4cG9uZW50IG1heSBiZSBvbmUgbGVzcyB0aGFuIGUuXHJcbiAgICAgIC8vIFRoZSBkaWdpdCBhcnJheSBvZiBhIERlY2ltYWwgZnJvbSB0b1N0cmluZ0JpbmFyeSBtYXkgaGF2ZSB0cmFpbGluZyB6ZXJvcy5cclxuICAgICAgZm9yIChpID0gMDsgeWRbaV0gPT0gKHhkW2ldIHx8IDApOyBpKyspO1xyXG5cclxuICAgICAgaWYgKHlkW2ldID4gKHhkW2ldIHx8IDApKSBlLS07XHJcblxyXG4gICAgICBpZiAocHIgPT0gbnVsbCkge1xyXG4gICAgICAgIHNkID0gcHIgPSBDdG9yLnByZWNpc2lvbjtcclxuICAgICAgICBybSA9IEN0b3Iucm91bmRpbmc7XHJcbiAgICAgIH0gZWxzZSBpZiAoZHApIHtcclxuICAgICAgICBzZCA9IHByICsgKHguZSAtIHkuZSkgKyAxO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHNkID0gcHI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChzZCA8IDApIHtcclxuICAgICAgICBxZC5wdXNoKDEpO1xyXG4gICAgICAgIG1vcmUgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAvLyBDb252ZXJ0IHByZWNpc2lvbiBpbiBudW1iZXIgb2YgYmFzZSAxMCBkaWdpdHMgdG8gYmFzZSAxZTcgZGlnaXRzLlxyXG4gICAgICAgIHNkID0gc2QgLyBsb2dCYXNlICsgMiB8IDA7XHJcbiAgICAgICAgaSA9IDA7XHJcblxyXG4gICAgICAgIC8vIGRpdmlzb3IgPCAxZTdcclxuICAgICAgICBpZiAoeUwgPT0gMSkge1xyXG4gICAgICAgICAgayA9IDA7XHJcbiAgICAgICAgICB5ZCA9IHlkWzBdO1xyXG4gICAgICAgICAgc2QrKztcclxuXHJcbiAgICAgICAgICAvLyBrIGlzIHRoZSBjYXJyeS5cclxuICAgICAgICAgIGZvciAoOyAoaSA8IHhMIHx8IGspICYmIHNkLS07IGkrKykge1xyXG4gICAgICAgICAgICB0ID0gayAqIGJhc2UgKyAoeGRbaV0gfHwgMCk7XHJcbiAgICAgICAgICAgIHFkW2ldID0gdCAvIHlkIHwgMDtcclxuICAgICAgICAgICAgayA9IHQgJSB5ZCB8IDA7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgbW9yZSA9IGsgfHwgaSA8IHhMO1xyXG5cclxuICAgICAgICAvLyBkaXZpc29yID49IDFlN1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgLy8gTm9ybWFsaXNlIHhkIGFuZCB5ZCBzbyBoaWdoZXN0IG9yZGVyIGRpZ2l0IG9mIHlkIGlzID49IGJhc2UvMlxyXG4gICAgICAgICAgayA9IGJhc2UgLyAoeWRbMF0gKyAxKSB8IDA7XHJcblxyXG4gICAgICAgICAgaWYgKGsgPiAxKSB7XHJcbiAgICAgICAgICAgIHlkID0gbXVsdGlwbHlJbnRlZ2VyKHlkLCBrLCBiYXNlKTtcclxuICAgICAgICAgICAgeGQgPSBtdWx0aXBseUludGVnZXIoeGQsIGssIGJhc2UpO1xyXG4gICAgICAgICAgICB5TCA9IHlkLmxlbmd0aDtcclxuICAgICAgICAgICAgeEwgPSB4ZC5sZW5ndGg7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgeGkgPSB5TDtcclxuICAgICAgICAgIHJlbSA9IHhkLnNsaWNlKDAsIHlMKTtcclxuICAgICAgICAgIHJlbUwgPSByZW0ubGVuZ3RoO1xyXG5cclxuICAgICAgICAgIC8vIEFkZCB6ZXJvcyB0byBtYWtlIHJlbWFpbmRlciBhcyBsb25nIGFzIGRpdmlzb3IuXHJcbiAgICAgICAgICBmb3IgKDsgcmVtTCA8IHlMOykgcmVtW3JlbUwrK10gPSAwO1xyXG5cclxuICAgICAgICAgIHl6ID0geWQuc2xpY2UoKTtcclxuICAgICAgICAgIHl6LnVuc2hpZnQoMCk7XHJcbiAgICAgICAgICB5ZDAgPSB5ZFswXTtcclxuXHJcbiAgICAgICAgICBpZiAoeWRbMV0gPj0gYmFzZSAvIDIpICsreWQwO1xyXG5cclxuICAgICAgICAgIGRvIHtcclxuICAgICAgICAgICAgayA9IDA7XHJcblxyXG4gICAgICAgICAgICAvLyBDb21wYXJlIGRpdmlzb3IgYW5kIHJlbWFpbmRlci5cclxuICAgICAgICAgICAgY21wID0gY29tcGFyZSh5ZCwgcmVtLCB5TCwgcmVtTCk7XHJcblxyXG4gICAgICAgICAgICAvLyBJZiBkaXZpc29yIDwgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICBpZiAoY21wIDwgMCkge1xyXG5cclxuICAgICAgICAgICAgICAvLyBDYWxjdWxhdGUgdHJpYWwgZGlnaXQsIGsuXHJcbiAgICAgICAgICAgICAgcmVtMCA9IHJlbVswXTtcclxuICAgICAgICAgICAgICBpZiAoeUwgIT0gcmVtTCkgcmVtMCA9IHJlbTAgKiBiYXNlICsgKHJlbVsxXSB8fCAwKTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gayB3aWxsIGJlIGhvdyBtYW55IHRpbWVzIHRoZSBkaXZpc29yIGdvZXMgaW50byB0aGUgY3VycmVudCByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgayA9IHJlbTAgLyB5ZDAgfCAwO1xyXG5cclxuICAgICAgICAgICAgICAvLyAgQWxnb3JpdGhtOlxyXG4gICAgICAgICAgICAgIC8vICAxLiBwcm9kdWN0ID0gZGl2aXNvciAqIHRyaWFsIGRpZ2l0IChrKVxyXG4gICAgICAgICAgICAgIC8vICAyLiBpZiBwcm9kdWN0ID4gcmVtYWluZGVyOiBwcm9kdWN0IC09IGRpdmlzb3IsIGstLVxyXG4gICAgICAgICAgICAgIC8vICAzLiByZW1haW5kZXIgLT0gcHJvZHVjdFxyXG4gICAgICAgICAgICAgIC8vICA0LiBpZiBwcm9kdWN0IHdhcyA8IHJlbWFpbmRlciBhdCAyOlxyXG4gICAgICAgICAgICAgIC8vICAgIDUuIGNvbXBhcmUgbmV3IHJlbWFpbmRlciBhbmQgZGl2aXNvclxyXG4gICAgICAgICAgICAgIC8vICAgIDYuIElmIHJlbWFpbmRlciA+IGRpdmlzb3I6IHJlbWFpbmRlciAtPSBkaXZpc29yLCBrKytcclxuXHJcbiAgICAgICAgICAgICAgaWYgKGsgPiAxKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoayA+PSBiYXNlKSBrID0gYmFzZSAtIDE7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gcHJvZHVjdCA9IGRpdmlzb3IgKiB0cmlhbCBkaWdpdC5cclxuICAgICAgICAgICAgICAgIHByb2QgPSBtdWx0aXBseUludGVnZXIoeWQsIGssIGJhc2UpO1xyXG4gICAgICAgICAgICAgICAgcHJvZEwgPSBwcm9kLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIHJlbUwgPSByZW0ubGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIENvbXBhcmUgcHJvZHVjdCBhbmQgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgICAgY21wID0gY29tcGFyZShwcm9kLCByZW0sIHByb2RMLCByZW1MKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBwcm9kdWN0ID4gcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgICAgaWYgKGNtcCA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgIGstLTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIC8vIFN1YnRyYWN0IGRpdmlzb3IgZnJvbSBwcm9kdWN0LlxyXG4gICAgICAgICAgICAgICAgICBzdWJ0cmFjdChwcm9kLCB5TCA8IHByb2RMID8geXogOiB5ZCwgcHJvZEwsIGJhc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gY21wIGlzIC0xLlxyXG4gICAgICAgICAgICAgICAgLy8gSWYgayBpcyAwLCB0aGVyZSBpcyBubyBuZWVkIHRvIGNvbXBhcmUgeWQgYW5kIHJlbSBhZ2FpbiBiZWxvdywgc28gY2hhbmdlIGNtcCB0byAxXHJcbiAgICAgICAgICAgICAgICAvLyB0byBhdm9pZCBpdC4gSWYgayBpcyAxIHRoZXJlIGlzIGEgbmVlZCB0byBjb21wYXJlIHlkIGFuZCByZW0gYWdhaW4gYmVsb3cuXHJcbiAgICAgICAgICAgICAgICBpZiAoayA9PSAwKSBjbXAgPSBrID0gMTtcclxuICAgICAgICAgICAgICAgIHByb2QgPSB5ZC5zbGljZSgpO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgcHJvZEwgPSBwcm9kLmxlbmd0aDtcclxuICAgICAgICAgICAgICBpZiAocHJvZEwgPCByZW1MKSBwcm9kLnVuc2hpZnQoMCk7XHJcblxyXG4gICAgICAgICAgICAgIC8vIFN1YnRyYWN0IHByb2R1Y3QgZnJvbSByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgc3VidHJhY3QocmVtLCBwcm9kLCByZW1MLCBiYXNlKTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gSWYgcHJvZHVjdCB3YXMgPCBwcmV2aW91cyByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgaWYgKGNtcCA9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgcmVtTCA9IHJlbS5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gQ29tcGFyZSBkaXZpc29yIGFuZCBuZXcgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgICAgY21wID0gY29tcGFyZSh5ZCwgcmVtLCB5TCwgcmVtTCk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gSWYgZGl2aXNvciA8IG5ldyByZW1haW5kZXIsIHN1YnRyYWN0IGRpdmlzb3IgZnJvbSByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgICBpZiAoY21wIDwgMSkge1xyXG4gICAgICAgICAgICAgICAgICBrKys7XHJcblxyXG4gICAgICAgICAgICAgICAgICAvLyBTdWJ0cmFjdCBkaXZpc29yIGZyb20gcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgICAgICBzdWJ0cmFjdChyZW0sIHlMIDwgcmVtTCA/IHl6IDogeWQsIHJlbUwsIGJhc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgcmVtTCA9IHJlbS5sZW5ndGg7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY21wID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgaysrO1xyXG4gICAgICAgICAgICAgIHJlbSA9IFswXTtcclxuICAgICAgICAgICAgfSAgICAvLyBpZiBjbXAgPT09IDEsIGsgd2lsbCBiZSAwXHJcblxyXG4gICAgICAgICAgICAvLyBBZGQgdGhlIG5leHQgZGlnaXQsIGssIHRvIHRoZSByZXN1bHQgYXJyYXkuXHJcbiAgICAgICAgICAgIHFkW2krK10gPSBrO1xyXG5cclxuICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSByZW1haW5kZXIuXHJcbiAgICAgICAgICAgIGlmIChjbXAgJiYgcmVtWzBdKSB7XHJcbiAgICAgICAgICAgICAgcmVtW3JlbUwrK10gPSB4ZFt4aV0gfHwgMDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByZW0gPSBbeGRbeGldXTtcclxuICAgICAgICAgICAgICByZW1MID0gMTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIH0gd2hpbGUgKCh4aSsrIDwgeEwgfHwgcmVtWzBdICE9PSB2b2lkIDApICYmIHNkLS0pO1xyXG5cclxuICAgICAgICAgIG1vcmUgPSByZW1bMF0gIT09IHZvaWQgMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIExlYWRpbmcgemVybz9cclxuICAgICAgICBpZiAoIXFkWzBdKSBxZC5zaGlmdCgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBsb2dCYXNlIGlzIDEgd2hlbiBkaXZpZGUgaXMgYmVpbmcgdXNlZCBmb3IgYmFzZSBjb252ZXJzaW9uLlxyXG4gICAgICBpZiAobG9nQmFzZSA9PSAxKSB7XHJcbiAgICAgICAgcS5lID0gZTtcclxuICAgICAgICBpbmV4YWN0ID0gbW9yZTtcclxuICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgLy8gVG8gY2FsY3VsYXRlIHEuZSwgZmlyc3QgZ2V0IHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIHFkWzBdLlxyXG4gICAgICAgIGZvciAoaSA9IDEsIGsgPSBxZFswXTsgayA+PSAxMDsgayAvPSAxMCkgaSsrO1xyXG4gICAgICAgIHEuZSA9IGkgKyBlICogbG9nQmFzZSAtIDE7XHJcblxyXG4gICAgICAgIGZpbmFsaXNlKHEsIGRwID8gcHIgKyBxLmUgKyAxIDogcHIsIHJtLCBtb3JlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHE7XHJcbiAgICB9O1xyXG4gIH0pKCk7XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJvdW5kIGB4YCB0byBgc2RgIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGBybWAuXHJcbiAgICogQ2hlY2sgZm9yIG92ZXIvdW5kZXItZmxvdy5cclxuICAgKi9cclxuICAgZnVuY3Rpb24gZmluYWxpc2UoeCwgc2QsIHJtLCBpc1RydW5jYXRlZCkge1xyXG4gICAgdmFyIGRpZ2l0cywgaSwgaiwgaywgcmQsIHJvdW5kVXAsIHcsIHhkLCB4ZGksXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIC8vIERvbid0IHJvdW5kIGlmIHNkIGlzIG51bGwgb3IgdW5kZWZpbmVkLlxyXG4gICAgb3V0OiBpZiAoc2QgIT0gbnVsbCkge1xyXG4gICAgICB4ZCA9IHguZDtcclxuXHJcbiAgICAgIC8vIEluZmluaXR5L05hTi5cclxuICAgICAgaWYgKCF4ZCkgcmV0dXJuIHg7XHJcblxyXG4gICAgICAvLyByZDogdGhlIHJvdW5kaW5nIGRpZ2l0LCBpLmUuIHRoZSBkaWdpdCBhZnRlciB0aGUgZGlnaXQgdGhhdCBtYXkgYmUgcm91bmRlZCB1cC5cclxuICAgICAgLy8gdzogdGhlIHdvcmQgb2YgeGQgY29udGFpbmluZyByZCwgYSBiYXNlIDFlNyBudW1iZXIuXHJcbiAgICAgIC8vIHhkaTogdGhlIGluZGV4IG9mIHcgd2l0aGluIHhkLlxyXG4gICAgICAvLyBkaWdpdHM6IHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIHcuXHJcbiAgICAgIC8vIGk6IHdoYXQgd291bGQgYmUgdGhlIGluZGV4IG9mIHJkIHdpdGhpbiB3IGlmIGFsbCB0aGUgbnVtYmVycyB3ZXJlIDcgZGlnaXRzIGxvbmcgKGkuZS4gaWZcclxuICAgICAgLy8gdGhleSBoYWQgbGVhZGluZyB6ZXJvcylcclxuICAgICAgLy8gajogaWYgPiAwLCB0aGUgYWN0dWFsIGluZGV4IG9mIHJkIHdpdGhpbiB3IChpZiA8IDAsIHJkIGlzIGEgbGVhZGluZyB6ZXJvKS5cclxuXHJcbiAgICAgIC8vIEdldCB0aGUgbGVuZ3RoIG9mIHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBkaWdpdHMgYXJyYXkgeGQuXHJcbiAgICAgIGZvciAoZGlnaXRzID0gMSwgayA9IHhkWzBdOyBrID49IDEwOyBrIC89IDEwKSBkaWdpdHMrKztcclxuICAgICAgaSA9IHNkIC0gZGlnaXRzO1xyXG5cclxuICAgICAgLy8gSXMgdGhlIHJvdW5kaW5nIGRpZ2l0IGluIHRoZSBmaXJzdCB3b3JkIG9mIHhkP1xyXG4gICAgICBpZiAoaSA8IDApIHtcclxuICAgICAgICBpICs9IExPR19CQVNFO1xyXG4gICAgICAgIGogPSBzZDtcclxuICAgICAgICB3ID0geGRbeGRpID0gMF07XHJcblxyXG4gICAgICAgIC8vIEdldCB0aGUgcm91bmRpbmcgZGlnaXQgYXQgaW5kZXggaiBvZiB3LlxyXG4gICAgICAgIHJkID0gdyAvIG1hdGhwb3coMTAsIGRpZ2l0cyAtIGogLSAxKSAlIDEwIHwgMDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB4ZGkgPSBNYXRoLmNlaWwoKGkgKyAxKSAvIExPR19CQVNFKTtcclxuICAgICAgICBrID0geGQubGVuZ3RoO1xyXG4gICAgICAgIGlmICh4ZGkgPj0gaykge1xyXG4gICAgICAgICAgaWYgKGlzVHJ1bmNhdGVkKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBOZWVkZWQgYnkgYG5hdHVyYWxFeHBvbmVudGlhbGAsIGBuYXR1cmFsTG9nYXJpdGhtYCBhbmQgYHNxdWFyZVJvb3RgLlxyXG4gICAgICAgICAgICBmb3IgKDsgaysrIDw9IHhkaTspIHhkLnB1c2goMCk7XHJcbiAgICAgICAgICAgIHcgPSByZCA9IDA7XHJcbiAgICAgICAgICAgIGRpZ2l0cyA9IDE7XHJcbiAgICAgICAgICAgIGkgJT0gTE9HX0JBU0U7XHJcbiAgICAgICAgICAgIGogPSBpIC0gTE9HX0JBU0UgKyAxO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYnJlYWsgb3V0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB3ID0gayA9IHhkW3hkaV07XHJcblxyXG4gICAgICAgICAgLy8gR2V0IHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIHcuXHJcbiAgICAgICAgICBmb3IgKGRpZ2l0cyA9IDE7IGsgPj0gMTA7IGsgLz0gMTApIGRpZ2l0cysrO1xyXG5cclxuICAgICAgICAgIC8vIEdldCB0aGUgaW5kZXggb2YgcmQgd2l0aGluIHcuXHJcbiAgICAgICAgICBpICU9IExPR19CQVNFO1xyXG5cclxuICAgICAgICAgIC8vIEdldCB0aGUgaW5kZXggb2YgcmQgd2l0aGluIHcsIGFkanVzdGVkIGZvciBsZWFkaW5nIHplcm9zLlxyXG4gICAgICAgICAgLy8gVGhlIG51bWJlciBvZiBsZWFkaW5nIHplcm9zIG9mIHcgaXMgZ2l2ZW4gYnkgTE9HX0JBU0UgLSBkaWdpdHMuXHJcbiAgICAgICAgICBqID0gaSAtIExPR19CQVNFICsgZGlnaXRzO1xyXG5cclxuICAgICAgICAgIC8vIEdldCB0aGUgcm91bmRpbmcgZGlnaXQgYXQgaW5kZXggaiBvZiB3LlxyXG4gICAgICAgICAgcmQgPSBqIDwgMCA/IDAgOiB3IC8gbWF0aHBvdygxMCwgZGlnaXRzIC0gaiAtIDEpICUgMTAgfCAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gQXJlIHRoZXJlIGFueSBub24temVybyBkaWdpdHMgYWZ0ZXIgdGhlIHJvdW5kaW5nIGRpZ2l0P1xyXG4gICAgICBpc1RydW5jYXRlZCA9IGlzVHJ1bmNhdGVkIHx8IHNkIDwgMCB8fFxyXG4gICAgICAgIHhkW3hkaSArIDFdICE9PSB2b2lkIDAgfHwgKGogPCAwID8gdyA6IHcgJSBtYXRocG93KDEwLCBkaWdpdHMgLSBqIC0gMSkpO1xyXG5cclxuICAgICAgLy8gVGhlIGV4cHJlc3Npb24gYHcgJSBtYXRocG93KDEwLCBkaWdpdHMgLSBqIC0gMSlgIHJldHVybnMgYWxsIHRoZSBkaWdpdHMgb2YgdyB0byB0aGUgcmlnaHRcclxuICAgICAgLy8gb2YgdGhlIGRpZ2l0IGF0IChsZWZ0LXRvLXJpZ2h0KSBpbmRleCBqLCBlLmcuIGlmIHcgaXMgOTA4NzE0IGFuZCBqIGlzIDIsIHRoZSBleHByZXNzaW9uXHJcbiAgICAgIC8vIHdpbGwgZ2l2ZSA3MTQuXHJcblxyXG4gICAgICByb3VuZFVwID0gcm0gPCA0XHJcbiAgICAgICAgPyAocmQgfHwgaXNUcnVuY2F0ZWQpICYmIChybSA9PSAwIHx8IHJtID09ICh4LnMgPCAwID8gMyA6IDIpKVxyXG4gICAgICAgIDogcmQgPiA1IHx8IHJkID09IDUgJiYgKHJtID09IDQgfHwgaXNUcnVuY2F0ZWQgfHwgcm0gPT0gNiAmJlxyXG5cclxuICAgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgdGhlIGRpZ2l0IHRvIHRoZSBsZWZ0IG9mIHRoZSByb3VuZGluZyBkaWdpdCBpcyBvZGQuXHJcbiAgICAgICAgICAoKGkgPiAwID8gaiA+IDAgPyB3IC8gbWF0aHBvdygxMCwgZGlnaXRzIC0gaikgOiAwIDogeGRbeGRpIC0gMV0pICUgMTApICYgMSB8fFxyXG4gICAgICAgICAgICBybSA9PSAoeC5zIDwgMCA/IDggOiA3KSk7XHJcblxyXG4gICAgICBpZiAoc2QgPCAxIHx8ICF4ZFswXSkge1xyXG4gICAgICAgIHhkLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgaWYgKHJvdW5kVXApIHtcclxuXHJcbiAgICAgICAgICAvLyBDb252ZXJ0IHNkIHRvIGRlY2ltYWwgcGxhY2VzLlxyXG4gICAgICAgICAgc2QgLT0geC5lICsgMTtcclxuXHJcbiAgICAgICAgICAvLyAxLCAwLjEsIDAuMDEsIDAuMDAxLCAwLjAwMDEgZXRjLlxyXG4gICAgICAgICAgeGRbMF0gPSBtYXRocG93KDEwLCAoTE9HX0JBU0UgLSBzZCAlIExPR19CQVNFKSAlIExPR19CQVNFKTtcclxuICAgICAgICAgIHguZSA9IC1zZCB8fCAwO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgLy8gWmVyby5cclxuICAgICAgICAgIHhkWzBdID0geC5lID0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB4O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBSZW1vdmUgZXhjZXNzIGRpZ2l0cy5cclxuICAgICAgaWYgKGkgPT0gMCkge1xyXG4gICAgICAgIHhkLmxlbmd0aCA9IHhkaTtcclxuICAgICAgICBrID0gMTtcclxuICAgICAgICB4ZGktLTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB4ZC5sZW5ndGggPSB4ZGkgKyAxO1xyXG4gICAgICAgIGsgPSBtYXRocG93KDEwLCBMT0dfQkFTRSAtIGkpO1xyXG5cclxuICAgICAgICAvLyBFLmcuIDU2NzAwIGJlY29tZXMgNTYwMDAgaWYgNyBpcyB0aGUgcm91bmRpbmcgZGlnaXQuXHJcbiAgICAgICAgLy8gaiA+IDAgbWVhbnMgaSA+IG51bWJlciBvZiBsZWFkaW5nIHplcm9zIG9mIHcuXHJcbiAgICAgICAgeGRbeGRpXSA9IGogPiAwID8gKHcgLyBtYXRocG93KDEwLCBkaWdpdHMgLSBqKSAlIG1hdGhwb3coMTAsIGopIHwgMCkgKiBrIDogMDtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHJvdW5kVXApIHtcclxuICAgICAgICBmb3IgKDs7KSB7XHJcblxyXG4gICAgICAgICAgLy8gSXMgdGhlIGRpZ2l0IHRvIGJlIHJvdW5kZWQgdXAgaW4gdGhlIGZpcnN0IHdvcmQgb2YgeGQ/XHJcbiAgICAgICAgICBpZiAoeGRpID09IDApIHtcclxuXHJcbiAgICAgICAgICAgIC8vIGkgd2lsbCBiZSB0aGUgbGVuZ3RoIG9mIHhkWzBdIGJlZm9yZSBrIGlzIGFkZGVkLlxyXG4gICAgICAgICAgICBmb3IgKGkgPSAxLCBqID0geGRbMF07IGogPj0gMTA7IGogLz0gMTApIGkrKztcclxuICAgICAgICAgICAgaiA9IHhkWzBdICs9IGs7XHJcbiAgICAgICAgICAgIGZvciAoayA9IDE7IGogPj0gMTA7IGogLz0gMTApIGsrKztcclxuXHJcbiAgICAgICAgICAgIC8vIGlmIGkgIT0gayB0aGUgbGVuZ3RoIGhhcyBpbmNyZWFzZWQuXHJcbiAgICAgICAgICAgIGlmIChpICE9IGspIHtcclxuICAgICAgICAgICAgICB4LmUrKztcclxuICAgICAgICAgICAgICBpZiAoeGRbMF0gPT0gQkFTRSkgeGRbMF0gPSAxO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHhkW3hkaV0gKz0gaztcclxuICAgICAgICAgICAgaWYgKHhkW3hkaV0gIT0gQkFTRSkgYnJlYWs7XHJcbiAgICAgICAgICAgIHhkW3hkaS0tXSA9IDA7XHJcbiAgICAgICAgICAgIGsgPSAxO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgICBmb3IgKGkgPSB4ZC5sZW5ndGg7IHhkWy0taV0gPT09IDA7KSB4ZC5wb3AoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZXh0ZXJuYWwpIHtcclxuXHJcbiAgICAgIC8vIE92ZXJmbG93P1xyXG4gICAgICBpZiAoeC5lID4gQ3Rvci5tYXhFKSB7XHJcblxyXG4gICAgICAgIC8vIEluZmluaXR5LlxyXG4gICAgICAgIHguZCA9IG51bGw7XHJcbiAgICAgICAgeC5lID0gTmFOO1xyXG5cclxuICAgICAgLy8gVW5kZXJmbG93P1xyXG4gICAgICB9IGVsc2UgaWYgKHguZSA8IEN0b3IubWluRSkge1xyXG5cclxuICAgICAgICAvLyBaZXJvLlxyXG4gICAgICAgIHguZSA9IDA7XHJcbiAgICAgICAgeC5kID0gWzBdO1xyXG4gICAgICAgIC8vIEN0b3IudW5kZXJmbG93ID0gdHJ1ZTtcclxuICAgICAgfSAvLyBlbHNlIEN0b3IudW5kZXJmbG93ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHg7XHJcbiAgfVxyXG5cclxuXHJcbiAgZnVuY3Rpb24gZmluaXRlVG9TdHJpbmcoeCwgaXNFeHAsIHNkKSB7XHJcbiAgICBpZiAoIXguaXNGaW5pdGUoKSkgcmV0dXJuIG5vbkZpbml0ZVRvU3RyaW5nKHgpO1xyXG4gICAgdmFyIGssXHJcbiAgICAgIGUgPSB4LmUsXHJcbiAgICAgIHN0ciA9IGRpZ2l0c1RvU3RyaW5nKHguZCksXHJcbiAgICAgIGxlbiA9IHN0ci5sZW5ndGg7XHJcblxyXG4gICAgaWYgKGlzRXhwKSB7XHJcbiAgICAgIGlmIChzZCAmJiAoayA9IHNkIC0gbGVuKSA+IDApIHtcclxuICAgICAgICBzdHIgPSBzdHIuY2hhckF0KDApICsgJy4nICsgc3RyLnNsaWNlKDEpICsgZ2V0WmVyb1N0cmluZyhrKTtcclxuICAgICAgfSBlbHNlIGlmIChsZW4gPiAxKSB7XHJcbiAgICAgICAgc3RyID0gc3RyLmNoYXJBdCgwKSArICcuJyArIHN0ci5zbGljZSgxKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgc3RyID0gc3RyICsgKHguZSA8IDAgPyAnZScgOiAnZSsnKSArIHguZTtcclxuICAgIH0gZWxzZSBpZiAoZSA8IDApIHtcclxuICAgICAgc3RyID0gJzAuJyArIGdldFplcm9TdHJpbmcoLWUgLSAxKSArIHN0cjtcclxuICAgICAgaWYgKHNkICYmIChrID0gc2QgLSBsZW4pID4gMCkgc3RyICs9IGdldFplcm9TdHJpbmcoayk7XHJcbiAgICB9IGVsc2UgaWYgKGUgPj0gbGVuKSB7XHJcbiAgICAgIHN0ciArPSBnZXRaZXJvU3RyaW5nKGUgKyAxIC0gbGVuKTtcclxuICAgICAgaWYgKHNkICYmIChrID0gc2QgLSBlIC0gMSkgPiAwKSBzdHIgPSBzdHIgKyAnLicgKyBnZXRaZXJvU3RyaW5nKGspO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKChrID0gZSArIDEpIDwgbGVuKSBzdHIgPSBzdHIuc2xpY2UoMCwgaykgKyAnLicgKyBzdHIuc2xpY2Uoayk7XHJcbiAgICAgIGlmIChzZCAmJiAoayA9IHNkIC0gbGVuKSA+IDApIHtcclxuICAgICAgICBpZiAoZSArIDEgPT09IGxlbikgc3RyICs9ICcuJztcclxuICAgICAgICBzdHIgKz0gZ2V0WmVyb1N0cmluZyhrKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzdHI7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gQ2FsY3VsYXRlIHRoZSBiYXNlIDEwIGV4cG9uZW50IGZyb20gdGhlIGJhc2UgMWU3IGV4cG9uZW50LlxyXG4gIGZ1bmN0aW9uIGdldEJhc2UxMEV4cG9uZW50KGRpZ2l0cywgZSkge1xyXG4gICAgdmFyIHcgPSBkaWdpdHNbMF07XHJcblxyXG4gICAgLy8gQWRkIHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBkaWdpdHMgYXJyYXkuXHJcbiAgICBmb3IgKCBlICo9IExPR19CQVNFOyB3ID49IDEwOyB3IC89IDEwKSBlKys7XHJcbiAgICByZXR1cm4gZTtcclxuICB9XHJcblxyXG5cclxuICBmdW5jdGlvbiBnZXRMbjEwKEN0b3IsIHNkLCBwcikge1xyXG4gICAgaWYgKHNkID4gTE4xMF9QUkVDSVNJT04pIHtcclxuXHJcbiAgICAgIC8vIFJlc2V0IGdsb2JhbCBzdGF0ZSBpbiBjYXNlIHRoZSBleGNlcHRpb24gaXMgY2F1Z2h0LlxyXG4gICAgICBleHRlcm5hbCA9IHRydWU7XHJcbiAgICAgIGlmIChwcikgQ3Rvci5wcmVjaXNpb24gPSBwcjtcclxuICAgICAgdGhyb3cgRXJyb3IocHJlY2lzaW9uTGltaXRFeGNlZWRlZCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmluYWxpc2UobmV3IEN0b3IoTE4xMCksIHNkLCAxLCB0cnVlKTtcclxuICB9XHJcblxyXG5cclxuICBmdW5jdGlvbiBnZXRQaShDdG9yLCBzZCwgcm0pIHtcclxuICAgIGlmIChzZCA+IFBJX1BSRUNJU0lPTikgdGhyb3cgRXJyb3IocHJlY2lzaW9uTGltaXRFeGNlZWRlZCk7XHJcbiAgICByZXR1cm4gZmluYWxpc2UobmV3IEN0b3IoUEkpLCBzZCwgcm0sIHRydWUpO1xyXG4gIH1cclxuXHJcblxyXG4gIGZ1bmN0aW9uIGdldFByZWNpc2lvbihkaWdpdHMpIHtcclxuICAgIHZhciB3ID0gZGlnaXRzLmxlbmd0aCAtIDEsXHJcbiAgICAgIGxlbiA9IHcgKiBMT0dfQkFTRSArIDE7XHJcblxyXG4gICAgdyA9IGRpZ2l0c1t3XTtcclxuXHJcbiAgICAvLyBJZiBub24temVyby4uLlxyXG4gICAgaWYgKHcpIHtcclxuXHJcbiAgICAgIC8vIFN1YnRyYWN0IHRoZSBudW1iZXIgb2YgdHJhaWxpbmcgemVyb3Mgb2YgdGhlIGxhc3Qgd29yZC5cclxuICAgICAgZm9yICg7IHcgJSAxMCA9PSAwOyB3IC89IDEwKSBsZW4tLTtcclxuXHJcbiAgICAgIC8vIEFkZCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBvZiB0aGUgZmlyc3Qgd29yZC5cclxuICAgICAgZm9yICh3ID0gZGlnaXRzWzBdOyB3ID49IDEwOyB3IC89IDEwKSBsZW4rKztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGVuO1xyXG4gIH1cclxuXHJcblxyXG4gIGZ1bmN0aW9uIGdldFplcm9TdHJpbmcoaykge1xyXG4gICAgdmFyIHpzID0gJyc7XHJcbiAgICBmb3IgKDsgay0tOykgenMgKz0gJzAnO1xyXG4gICAgcmV0dXJuIHpzO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIERlY2ltYWwgYHhgIHRvIHRoZSBwb3dlciBgbmAsIHdoZXJlIGBuYCBpcyBhblxyXG4gICAqIGludGVnZXIgb2YgdHlwZSBudW1iZXIuXHJcbiAgICpcclxuICAgKiBJbXBsZW1lbnRzICdleHBvbmVudGlhdGlvbiBieSBzcXVhcmluZycuIENhbGxlZCBieSBgcG93YCBhbmQgYHBhcnNlT3RoZXJgLlxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gaW50UG93KEN0b3IsIHgsIG4sIHByKSB7XHJcbiAgICB2YXIgaXNUcnVuY2F0ZWQsXHJcbiAgICAgIHIgPSBuZXcgQ3RvcigxKSxcclxuXHJcbiAgICAgIC8vIE1heCBuIG9mIDkwMDcxOTkyNTQ3NDA5OTEgdGFrZXMgNTMgbG9vcCBpdGVyYXRpb25zLlxyXG4gICAgICAvLyBNYXhpbXVtIGRpZ2l0cyBhcnJheSBsZW5ndGg7IGxlYXZlcyBbMjgsIDM0XSBndWFyZCBkaWdpdHMuXHJcbiAgICAgIGsgPSBNYXRoLmNlaWwocHIgLyBMT0dfQkFTRSArIDQpO1xyXG5cclxuICAgIGV4dGVybmFsID0gZmFsc2U7XHJcblxyXG4gICAgZm9yICg7Oykge1xyXG4gICAgICBpZiAobiAlIDIpIHtcclxuICAgICAgICByID0gci50aW1lcyh4KTtcclxuICAgICAgICBpZiAodHJ1bmNhdGUoci5kLCBrKSkgaXNUcnVuY2F0ZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBuID0gbWF0aGZsb29yKG4gLyAyKTtcclxuICAgICAgaWYgKG4gPT09IDApIHtcclxuXHJcbiAgICAgICAgLy8gVG8gZW5zdXJlIGNvcnJlY3Qgcm91bmRpbmcgd2hlbiByLmQgaXMgdHJ1bmNhdGVkLCBpbmNyZW1lbnQgdGhlIGxhc3Qgd29yZCBpZiBpdCBpcyB6ZXJvLlxyXG4gICAgICAgIG4gPSByLmQubGVuZ3RoIC0gMTtcclxuICAgICAgICBpZiAoaXNUcnVuY2F0ZWQgJiYgci5kW25dID09PSAwKSArK3IuZFtuXTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgeCA9IHgudGltZXMoeCk7XHJcbiAgICAgIHRydW5jYXRlKHguZCwgayk7XHJcbiAgICB9XHJcblxyXG4gICAgZXh0ZXJuYWwgPSB0cnVlO1xyXG5cclxuICAgIHJldHVybiByO1xyXG4gIH1cclxuXHJcblxyXG4gIGZ1bmN0aW9uIGlzT2RkKG4pIHtcclxuICAgIHJldHVybiBuLmRbbi5kLmxlbmd0aCAtIDFdICYgMTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIEhhbmRsZSBgbWF4YCBhbmQgYG1pbmAuIGBsdGd0YCBpcyAnbHQnIG9yICdndCcuXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gbWF4T3JNaW4oQ3RvciwgYXJncywgbHRndCkge1xyXG4gICAgdmFyIHksXHJcbiAgICAgIHggPSBuZXcgQ3RvcihhcmdzWzBdKSxcclxuICAgICAgaSA9IDA7XHJcblxyXG4gICAgZm9yICg7ICsraSA8IGFyZ3MubGVuZ3RoOykge1xyXG4gICAgICB5ID0gbmV3IEN0b3IoYXJnc1tpXSk7XHJcbiAgICAgIGlmICgheS5zKSB7XHJcbiAgICAgICAgeCA9IHk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH0gZWxzZSBpZiAoeFtsdGd0XSh5KSkge1xyXG4gICAgICAgIHggPSB5O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHg7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgbmF0dXJhbCBleHBvbmVudGlhbCBvZiBgeGAgcm91bmRlZCB0byBgc2RgIHNpZ25pZmljYW50XHJcbiAgICogZGlnaXRzLlxyXG4gICAqXHJcbiAgICogVGF5bG9yL01hY2xhdXJpbiBzZXJpZXMuXHJcbiAgICpcclxuICAgKiBleHAoeCkgPSB4XjAvMCEgKyB4XjEvMSEgKyB4XjIvMiEgKyB4XjMvMyEgKyAuLi5cclxuICAgKlxyXG4gICAqIEFyZ3VtZW50IHJlZHVjdGlvbjpcclxuICAgKiAgIFJlcGVhdCB4ID0geCAvIDMyLCBrICs9IDUsIHVudGlsIHx4fCA8IDAuMVxyXG4gICAqICAgZXhwKHgpID0gZXhwKHggLyAyXmspXigyXmspXHJcbiAgICpcclxuICAgKiBQcmV2aW91c2x5LCB0aGUgYXJndW1lbnQgd2FzIGluaXRpYWxseSByZWR1Y2VkIGJ5XHJcbiAgICogZXhwKHgpID0gZXhwKHIpICogMTBeayAgd2hlcmUgciA9IHggLSBrICogbG4xMCwgayA9IGZsb29yKHggLyBsbjEwKVxyXG4gICAqIHRvIGZpcnN0IHB1dCByIGluIHRoZSByYW5nZSBbMCwgbG4xMF0sIGJlZm9yZSBkaXZpZGluZyBieSAzMiB1bnRpbCB8eHwgPCAwLjEsIGJ1dCB0aGlzIHdhc1xyXG4gICAqIGZvdW5kIHRvIGJlIHNsb3dlciB0aGFuIGp1c3QgZGl2aWRpbmcgcmVwZWF0ZWRseSBieSAzMiBhcyBhYm92ZS5cclxuICAgKlxyXG4gICAqIE1heCBpbnRlZ2VyIGFyZ3VtZW50OiBleHAoJzIwNzIzMjY1ODM2OTQ2NDEzJykgPSA2LjNlKzkwMDAwMDAwMDAwMDAwMDBcclxuICAgKiBNaW4gaW50ZWdlciBhcmd1bWVudDogZXhwKCctMjA3MjMyNjU4MzY5NDY0MTEnKSA9IDEuMmUtOTAwMDAwMDAwMDAwMDAwMFxyXG4gICAqIChNYXRoIG9iamVjdCBpbnRlZ2VyIG1pbi9tYXg6IE1hdGguZXhwKDcwOSkgPSA4LjJlKzMwNywgTWF0aC5leHAoLTc0NSkgPSA1ZS0zMjQpXHJcbiAgICpcclxuICAgKiAgZXhwKEluZmluaXR5KSAgPSBJbmZpbml0eVxyXG4gICAqICBleHAoLUluZmluaXR5KSA9IDBcclxuICAgKiAgZXhwKE5hTikgICAgICAgPSBOYU5cclxuICAgKiAgZXhwKMKxMCkgICAgICAgID0gMVxyXG4gICAqXHJcbiAgICogIGV4cCh4KSBpcyBub24tdGVybWluYXRpbmcgZm9yIGFueSBmaW5pdGUsIG5vbi16ZXJvIHguXHJcbiAgICpcclxuICAgKiAgVGhlIHJlc3VsdCB3aWxsIGFsd2F5cyBiZSBjb3JyZWN0bHkgcm91bmRlZC5cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIG5hdHVyYWxFeHBvbmVudGlhbCh4LCBzZCkge1xyXG4gICAgdmFyIGRlbm9taW5hdG9yLCBndWFyZCwgaiwgcG93LCBzdW0sIHQsIHdwcixcclxuICAgICAgcmVwID0gMCxcclxuICAgICAgaSA9IDAsXHJcbiAgICAgIGsgPSAwLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcixcclxuICAgICAgcm0gPSBDdG9yLnJvdW5kaW5nLFxyXG4gICAgICBwciA9IEN0b3IucHJlY2lzaW9uO1xyXG5cclxuICAgIC8vIDAvTmFOL0luZmluaXR5P1xyXG4gICAgaWYgKCF4LmQgfHwgIXguZFswXSB8fCB4LmUgPiAxNykge1xyXG5cclxuICAgICAgcmV0dXJuIG5ldyBDdG9yKHguZFxyXG4gICAgICAgID8gIXguZFswXSA/IDEgOiB4LnMgPCAwID8gMCA6IDEgLyAwXHJcbiAgICAgICAgOiB4LnMgPyB4LnMgPCAwID8gMCA6IHggOiAwIC8gMCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHNkID09IG51bGwpIHtcclxuICAgICAgZXh0ZXJuYWwgPSBmYWxzZTtcclxuICAgICAgd3ByID0gcHI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB3cHIgPSBzZDtcclxuICAgIH1cclxuXHJcbiAgICB0ID0gbmV3IEN0b3IoMC4wMzEyNSk7XHJcblxyXG4gICAgLy8gd2hpbGUgYWJzKHgpID49IDAuMVxyXG4gICAgd2hpbGUgKHguZSA+IC0yKSB7XHJcblxyXG4gICAgICAvLyB4ID0geCAvIDJeNVxyXG4gICAgICB4ID0geC50aW1lcyh0KTtcclxuICAgICAgayArPSA1O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFVzZSAyICogbG9nMTAoMl5rKSArIDUgKGVtcGlyaWNhbGx5IGRlcml2ZWQpIHRvIGVzdGltYXRlIHRoZSBpbmNyZWFzZSBpbiBwcmVjaXNpb25cclxuICAgIC8vIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIGZpcnN0IDQgcm91bmRpbmcgZGlnaXRzIGFyZSBjb3JyZWN0LlxyXG4gICAgZ3VhcmQgPSBNYXRoLmxvZyhtYXRocG93KDIsIGspKSAvIE1hdGguTE4xMCAqIDIgKyA1IHwgMDtcclxuICAgIHdwciArPSBndWFyZDtcclxuICAgIGRlbm9taW5hdG9yID0gcG93ID0gc3VtID0gbmV3IEN0b3IoMSk7XHJcbiAgICBDdG9yLnByZWNpc2lvbiA9IHdwcjtcclxuXHJcbiAgICBmb3IgKDs7KSB7XHJcbiAgICAgIHBvdyA9IGZpbmFsaXNlKHBvdy50aW1lcyh4KSwgd3ByLCAxKTtcclxuICAgICAgZGVub21pbmF0b3IgPSBkZW5vbWluYXRvci50aW1lcygrK2kpO1xyXG4gICAgICB0ID0gc3VtLnBsdXMoZGl2aWRlKHBvdywgZGVub21pbmF0b3IsIHdwciwgMSkpO1xyXG5cclxuICAgICAgaWYgKGRpZ2l0c1RvU3RyaW5nKHQuZCkuc2xpY2UoMCwgd3ByKSA9PT0gZGlnaXRzVG9TdHJpbmcoc3VtLmQpLnNsaWNlKDAsIHdwcikpIHtcclxuICAgICAgICBqID0gaztcclxuICAgICAgICB3aGlsZSAoai0tKSBzdW0gPSBmaW5hbGlzZShzdW0udGltZXMoc3VtKSwgd3ByLCAxKTtcclxuXHJcbiAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBmaXJzdCA0IHJvdW5kaW5nIGRpZ2l0cyBhcmUgWzQ5XTk5OS5cclxuICAgICAgICAvLyBJZiBzbywgcmVwZWF0IHRoZSBzdW1tYXRpb24gd2l0aCBhIGhpZ2hlciBwcmVjaXNpb24sIG90aGVyd2lzZVxyXG4gICAgICAgIC8vIGUuZy4gd2l0aCBwcmVjaXNpb246IDE4LCByb3VuZGluZzogMVxyXG4gICAgICAgIC8vIGV4cCgxOC40MDQyNzI0NjI1OTUwMzQwODM1Njc3OTM5MTk4NDM3NjEpID0gOTgzNzI1NjAuMTIyOTk5OTk5OSAoc2hvdWxkIGJlIDk4MzcyNTYwLjEyMylcclxuICAgICAgICAvLyBgd3ByIC0gZ3VhcmRgIGlzIHRoZSBpbmRleCBvZiBmaXJzdCByb3VuZGluZyBkaWdpdC5cclxuICAgICAgICBpZiAoc2QgPT0gbnVsbCkge1xyXG5cclxuICAgICAgICAgIGlmIChyZXAgPCAzICYmIGNoZWNrUm91bmRpbmdEaWdpdHMoc3VtLmQsIHdwciAtIGd1YXJkLCBybSwgcmVwKSkge1xyXG4gICAgICAgICAgICBDdG9yLnByZWNpc2lvbiA9IHdwciArPSAxMDtcclxuICAgICAgICAgICAgZGVub21pbmF0b3IgPSBwb3cgPSB0ID0gbmV3IEN0b3IoMSk7XHJcbiAgICAgICAgICAgIGkgPSAwO1xyXG4gICAgICAgICAgICByZXArKztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmaW5hbGlzZShzdW0sIEN0b3IucHJlY2lzaW9uID0gcHIsIHJtLCBleHRlcm5hbCA9IHRydWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBDdG9yLnByZWNpc2lvbiA9IHByO1xyXG4gICAgICAgICAgcmV0dXJuIHN1bTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHN1bSA9IHQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgbmF0dXJhbCBsb2dhcml0aG0gb2YgYHhgIHJvdW5kZWQgdG8gYHNkYCBzaWduaWZpY2FudFxyXG4gICAqIGRpZ2l0cy5cclxuICAgKlxyXG4gICAqICBsbigtbikgICAgICAgID0gTmFOXHJcbiAgICogIGxuKDApICAgICAgICAgPSAtSW5maW5pdHlcclxuICAgKiAgbG4oLTApICAgICAgICA9IC1JbmZpbml0eVxyXG4gICAqICBsbigxKSAgICAgICAgID0gMFxyXG4gICAqICBsbihJbmZpbml0eSkgID0gSW5maW5pdHlcclxuICAgKiAgbG4oLUluZmluaXR5KSA9IE5hTlxyXG4gICAqICBsbihOYU4pICAgICAgID0gTmFOXHJcbiAgICpcclxuICAgKiAgbG4obikgKG4gIT0gMSkgaXMgbm9uLXRlcm1pbmF0aW5nLlxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gbmF0dXJhbExvZ2FyaXRobSh5LCBzZCkge1xyXG4gICAgdmFyIGMsIGMwLCBkZW5vbWluYXRvciwgZSwgbnVtZXJhdG9yLCByZXAsIHN1bSwgdCwgd3ByLCB4MSwgeDIsXHJcbiAgICAgIG4gPSAxLFxyXG4gICAgICBndWFyZCA9IDEwLFxyXG4gICAgICB4ID0geSxcclxuICAgICAgeGQgPSB4LmQsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yLFxyXG4gICAgICBybSA9IEN0b3Iucm91bmRpbmcsXHJcbiAgICAgIHByID0gQ3Rvci5wcmVjaXNpb247XHJcblxyXG4gICAgLy8gSXMgeCBuZWdhdGl2ZSBvciBJbmZpbml0eSwgTmFOLCAwIG9yIDE/XHJcbiAgICBpZiAoeC5zIDwgMCB8fCAheGQgfHwgIXhkWzBdIHx8ICF4LmUgJiYgeGRbMF0gPT0gMSAmJiB4ZC5sZW5ndGggPT0gMSkge1xyXG4gICAgICByZXR1cm4gbmV3IEN0b3IoeGQgJiYgIXhkWzBdID8gLTEgLyAwIDogeC5zICE9IDEgPyBOYU4gOiB4ZCA/IDAgOiB4KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2QgPT0gbnVsbCkge1xyXG4gICAgICBleHRlcm5hbCA9IGZhbHNlO1xyXG4gICAgICB3cHIgPSBwcjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHdwciA9IHNkO1xyXG4gICAgfVxyXG5cclxuICAgIEN0b3IucHJlY2lzaW9uID0gd3ByICs9IGd1YXJkO1xyXG4gICAgYyA9IGRpZ2l0c1RvU3RyaW5nKHhkKTtcclxuICAgIGMwID0gYy5jaGFyQXQoMCk7XHJcblxyXG4gICAgaWYgKE1hdGguYWJzKGUgPSB4LmUpIDwgMS41ZTE1KSB7XHJcblxyXG4gICAgICAvLyBBcmd1bWVudCByZWR1Y3Rpb24uXHJcbiAgICAgIC8vIFRoZSBzZXJpZXMgY29udmVyZ2VzIGZhc3RlciB0aGUgY2xvc2VyIHRoZSBhcmd1bWVudCBpcyB0byAxLCBzbyB1c2luZ1xyXG4gICAgICAvLyBsbihhXmIpID0gYiAqIGxuKGEpLCAgIGxuKGEpID0gbG4oYV5iKSAvIGJcclxuICAgICAgLy8gbXVsdGlwbHkgdGhlIGFyZ3VtZW50IGJ5IGl0c2VsZiB1bnRpbCB0aGUgbGVhZGluZyBkaWdpdHMgb2YgdGhlIHNpZ25pZmljYW5kIGFyZSA3LCA4LCA5LFxyXG4gICAgICAvLyAxMCwgMTEsIDEyIG9yIDEzLCByZWNvcmRpbmcgdGhlIG51bWJlciBvZiBtdWx0aXBsaWNhdGlvbnMgc28gdGhlIHN1bSBvZiB0aGUgc2VyaWVzIGNhblxyXG4gICAgICAvLyBsYXRlciBiZSBkaXZpZGVkIGJ5IHRoaXMgbnVtYmVyLCB0aGVuIHNlcGFyYXRlIG91dCB0aGUgcG93ZXIgb2YgMTAgdXNpbmdcclxuICAgICAgLy8gbG4oYSoxMF5iKSA9IGxuKGEpICsgYipsbigxMCkuXHJcblxyXG4gICAgICAvLyBtYXggbiBpcyAyMSAoZ2l2ZXMgMC45LCAxLjAgb3IgMS4xKSAoOWUxNSAvIDIxID0gNC4yZTE0KS5cclxuICAgICAgLy93aGlsZSAoYzAgPCA5ICYmIGMwICE9IDEgfHwgYzAgPT0gMSAmJiBjLmNoYXJBdCgxKSA+IDEpIHtcclxuICAgICAgLy8gbWF4IG4gaXMgNiAoZ2l2ZXMgMC43IC0gMS4zKVxyXG4gICAgICB3aGlsZSAoYzAgPCA3ICYmIGMwICE9IDEgfHwgYzAgPT0gMSAmJiBjLmNoYXJBdCgxKSA+IDMpIHtcclxuICAgICAgICB4ID0geC50aW1lcyh5KTtcclxuICAgICAgICBjID0gZGlnaXRzVG9TdHJpbmcoeC5kKTtcclxuICAgICAgICBjMCA9IGMuY2hhckF0KDApO1xyXG4gICAgICAgIG4rKztcclxuICAgICAgfVxyXG5cclxuICAgICAgZSA9IHguZTtcclxuXHJcbiAgICAgIGlmIChjMCA+IDEpIHtcclxuICAgICAgICB4ID0gbmV3IEN0b3IoJzAuJyArIGMpO1xyXG4gICAgICAgIGUrKztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB4ID0gbmV3IEN0b3IoYzAgKyAnLicgKyBjLnNsaWNlKDEpKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuXHJcbiAgICAgIC8vIFRoZSBhcmd1bWVudCByZWR1Y3Rpb24gbWV0aG9kIGFib3ZlIG1heSByZXN1bHQgaW4gb3ZlcmZsb3cgaWYgdGhlIGFyZ3VtZW50IHkgaXMgYSBtYXNzaXZlXHJcbiAgICAgIC8vIG51bWJlciB3aXRoIGV4cG9uZW50ID49IDE1MDAwMDAwMDAwMDAwMDAgKDllMTUgLyA2ID0gMS41ZTE1KSwgc28gaW5zdGVhZCByZWNhbGwgdGhpc1xyXG4gICAgICAvLyBmdW5jdGlvbiB1c2luZyBsbih4KjEwXmUpID0gbG4oeCkgKyBlKmxuKDEwKS5cclxuICAgICAgdCA9IGdldExuMTAoQ3Rvciwgd3ByICsgMiwgcHIpLnRpbWVzKGUgKyAnJyk7XHJcbiAgICAgIHggPSBuYXR1cmFsTG9nYXJpdGhtKG5ldyBDdG9yKGMwICsgJy4nICsgYy5zbGljZSgxKSksIHdwciAtIGd1YXJkKS5wbHVzKHQpO1xyXG4gICAgICBDdG9yLnByZWNpc2lvbiA9IHByO1xyXG5cclxuICAgICAgcmV0dXJuIHNkID09IG51bGwgPyBmaW5hbGlzZSh4LCBwciwgcm0sIGV4dGVybmFsID0gdHJ1ZSkgOiB4O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHgxIGlzIHggcmVkdWNlZCB0byBhIHZhbHVlIG5lYXIgMS5cclxuICAgIHgxID0geDtcclxuXHJcbiAgICAvLyBUYXlsb3Igc2VyaWVzLlxyXG4gICAgLy8gbG4oeSkgPSBsbigoMSArIHgpLygxIC0geCkpID0gMih4ICsgeF4zLzMgKyB4XjUvNSArIHheNy83ICsgLi4uKVxyXG4gICAgLy8gd2hlcmUgeCA9ICh5IC0gMSkvKHkgKyAxKSAgICAofHh8IDwgMSlcclxuICAgIHN1bSA9IG51bWVyYXRvciA9IHggPSBkaXZpZGUoeC5taW51cygxKSwgeC5wbHVzKDEpLCB3cHIsIDEpO1xyXG4gICAgeDIgPSBmaW5hbGlzZSh4LnRpbWVzKHgpLCB3cHIsIDEpO1xyXG4gICAgZGVub21pbmF0b3IgPSAzO1xyXG5cclxuICAgIGZvciAoOzspIHtcclxuICAgICAgbnVtZXJhdG9yID0gZmluYWxpc2UobnVtZXJhdG9yLnRpbWVzKHgyKSwgd3ByLCAxKTtcclxuICAgICAgdCA9IHN1bS5wbHVzKGRpdmlkZShudW1lcmF0b3IsIG5ldyBDdG9yKGRlbm9taW5hdG9yKSwgd3ByLCAxKSk7XHJcblxyXG4gICAgICBpZiAoZGlnaXRzVG9TdHJpbmcodC5kKS5zbGljZSgwLCB3cHIpID09PSBkaWdpdHNUb1N0cmluZyhzdW0uZCkuc2xpY2UoMCwgd3ByKSkge1xyXG4gICAgICAgIHN1bSA9IHN1bS50aW1lcygyKTtcclxuXHJcbiAgICAgICAgLy8gUmV2ZXJzZSB0aGUgYXJndW1lbnQgcmVkdWN0aW9uLiBDaGVjayB0aGF0IGUgaXMgbm90IDAgYmVjYXVzZSwgYmVzaWRlcyBwcmV2ZW50aW5nIGFuXHJcbiAgICAgICAgLy8gdW5uZWNlc3NhcnkgY2FsY3VsYXRpb24sIC0wICsgMCA9ICswIGFuZCB0byBlbnN1cmUgY29ycmVjdCByb3VuZGluZyAtMCBuZWVkcyB0byBzdGF5IC0wLlxyXG4gICAgICAgIGlmIChlICE9PSAwKSBzdW0gPSBzdW0ucGx1cyhnZXRMbjEwKEN0b3IsIHdwciArIDIsIHByKS50aW1lcyhlICsgJycpKTtcclxuICAgICAgICBzdW0gPSBkaXZpZGUoc3VtLCBuZXcgQ3RvcihuKSwgd3ByLCAxKTtcclxuXHJcbiAgICAgICAgLy8gSXMgcm0gPiAzIGFuZCB0aGUgZmlyc3QgNCByb3VuZGluZyBkaWdpdHMgNDk5OSwgb3Igcm0gPCA0IChvciB0aGUgc3VtbWF0aW9uIGhhc1xyXG4gICAgICAgIC8vIGJlZW4gcmVwZWF0ZWQgcHJldmlvdXNseSkgYW5kIHRoZSBmaXJzdCA0IHJvdW5kaW5nIGRpZ2l0cyA5OTk5P1xyXG4gICAgICAgIC8vIElmIHNvLCByZXN0YXJ0IHRoZSBzdW1tYXRpb24gd2l0aCBhIGhpZ2hlciBwcmVjaXNpb24sIG90aGVyd2lzZVxyXG4gICAgICAgIC8vIGUuZy4gd2l0aCBwcmVjaXNpb246IDEyLCByb3VuZGluZzogMVxyXG4gICAgICAgIC8vIGxuKDEzNTUyMDAyOC42MTI2MDkxNzE0MjY1MzgxNTMzKSA9IDE4LjcyNDYyOTk5OTkgd2hlbiBpdCBzaG91bGQgYmUgMTguNzI0NjMuXHJcbiAgICAgICAgLy8gYHdwciAtIGd1YXJkYCBpcyB0aGUgaW5kZXggb2YgZmlyc3Qgcm91bmRpbmcgZGlnaXQuXHJcbiAgICAgICAgaWYgKHNkID09IG51bGwpIHtcclxuICAgICAgICAgIGlmIChjaGVja1JvdW5kaW5nRGlnaXRzKHN1bS5kLCB3cHIgLSBndWFyZCwgcm0sIHJlcCkpIHtcclxuICAgICAgICAgICAgQ3Rvci5wcmVjaXNpb24gPSB3cHIgKz0gZ3VhcmQ7XHJcbiAgICAgICAgICAgIHQgPSBudW1lcmF0b3IgPSB4ID0gZGl2aWRlKHgxLm1pbnVzKDEpLCB4MS5wbHVzKDEpLCB3cHIsIDEpO1xyXG4gICAgICAgICAgICB4MiA9IGZpbmFsaXNlKHgudGltZXMoeCksIHdwciwgMSk7XHJcbiAgICAgICAgICAgIGRlbm9taW5hdG9yID0gcmVwID0gMTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmaW5hbGlzZShzdW0sIEN0b3IucHJlY2lzaW9uID0gcHIsIHJtLCBleHRlcm5hbCA9IHRydWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBDdG9yLnByZWNpc2lvbiA9IHByO1xyXG4gICAgICAgICAgcmV0dXJuIHN1bTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHN1bSA9IHQ7XHJcbiAgICAgIGRlbm9taW5hdG9yICs9IDI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gwrFJbmZpbml0eSwgTmFOLlxyXG4gIGZ1bmN0aW9uIG5vbkZpbml0ZVRvU3RyaW5nKHgpIHtcclxuICAgIC8vIFVuc2lnbmVkLlxyXG4gICAgcmV0dXJuIFN0cmluZyh4LnMgKiB4LnMgLyAwKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFBhcnNlIHRoZSB2YWx1ZSBvZiBhIG5ldyBEZWNpbWFsIGB4YCBmcm9tIHN0cmluZyBgc3RyYC5cclxuICAgKi9cclxuICBmdW5jdGlvbiBwYXJzZURlY2ltYWwoeCwgc3RyKSB7XHJcbiAgICB2YXIgZSwgaSwgbGVuO1xyXG5cclxuICAgIC8vIERlY2ltYWwgcG9pbnQ/XHJcbiAgICBpZiAoKGUgPSBzdHIuaW5kZXhPZignLicpKSA+IC0xKSBzdHIgPSBzdHIucmVwbGFjZSgnLicsICcnKTtcclxuXHJcbiAgICAvLyBFeHBvbmVudGlhbCBmb3JtP1xyXG4gICAgaWYgKChpID0gc3RyLnNlYXJjaCgvZS9pKSkgPiAwKSB7XHJcblxyXG4gICAgICAvLyBEZXRlcm1pbmUgZXhwb25lbnQuXHJcbiAgICAgIGlmIChlIDwgMCkgZSA9IGk7XHJcbiAgICAgIGUgKz0gK3N0ci5zbGljZShpICsgMSk7XHJcbiAgICAgIHN0ciA9IHN0ci5zdWJzdHJpbmcoMCwgaSk7XHJcbiAgICB9IGVsc2UgaWYgKGUgPCAwKSB7XHJcblxyXG4gICAgICAvLyBJbnRlZ2VyLlxyXG4gICAgICBlID0gc3RyLmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBEZXRlcm1pbmUgbGVhZGluZyB6ZXJvcy5cclxuICAgIGZvciAoaSA9IDA7IHN0ci5jaGFyQ29kZUF0KGkpID09PSA0ODsgaSsrKTtcclxuXHJcbiAgICAvLyBEZXRlcm1pbmUgdHJhaWxpbmcgemVyb3MuXHJcbiAgICBmb3IgKGxlbiA9IHN0ci5sZW5ndGg7IHN0ci5jaGFyQ29kZUF0KGxlbiAtIDEpID09PSA0ODsgLS1sZW4pO1xyXG4gICAgc3RyID0gc3RyLnNsaWNlKGksIGxlbik7XHJcblxyXG4gICAgaWYgKHN0cikge1xyXG4gICAgICBsZW4gLT0gaTtcclxuICAgICAgeC5lID0gZSA9IGUgLSBpIC0gMTtcclxuICAgICAgeC5kID0gW107XHJcblxyXG4gICAgICAvLyBUcmFuc2Zvcm0gYmFzZVxyXG5cclxuICAgICAgLy8gZSBpcyB0aGUgYmFzZSAxMCBleHBvbmVudC5cclxuICAgICAgLy8gaSBpcyB3aGVyZSB0byBzbGljZSBzdHIgdG8gZ2V0IHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBkaWdpdHMgYXJyYXkuXHJcbiAgICAgIGkgPSAoZSArIDEpICUgTE9HX0JBU0U7XHJcbiAgICAgIGlmIChlIDwgMCkgaSArPSBMT0dfQkFTRTtcclxuXHJcbiAgICAgIGlmIChpIDwgbGVuKSB7XHJcbiAgICAgICAgaWYgKGkpIHguZC5wdXNoKCtzdHIuc2xpY2UoMCwgaSkpO1xyXG4gICAgICAgIGZvciAobGVuIC09IExPR19CQVNFOyBpIDwgbGVuOykgeC5kLnB1c2goK3N0ci5zbGljZShpLCBpICs9IExPR19CQVNFKSk7XHJcbiAgICAgICAgc3RyID0gc3RyLnNsaWNlKGkpO1xyXG4gICAgICAgIGkgPSBMT0dfQkFTRSAtIHN0ci5sZW5ndGg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaSAtPSBsZW47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZvciAoOyBpLS07KSBzdHIgKz0gJzAnO1xyXG4gICAgICB4LmQucHVzaCgrc3RyKTtcclxuXHJcbiAgICAgIGlmIChleHRlcm5hbCkge1xyXG5cclxuICAgICAgICAvLyBPdmVyZmxvdz9cclxuICAgICAgICBpZiAoeC5lID4geC5jb25zdHJ1Y3Rvci5tYXhFKSB7XHJcblxyXG4gICAgICAgICAgLy8gSW5maW5pdHkuXHJcbiAgICAgICAgICB4LmQgPSBudWxsO1xyXG4gICAgICAgICAgeC5lID0gTmFOO1xyXG5cclxuICAgICAgICAvLyBVbmRlcmZsb3c/XHJcbiAgICAgICAgfSBlbHNlIGlmICh4LmUgPCB4LmNvbnN0cnVjdG9yLm1pbkUpIHtcclxuXHJcbiAgICAgICAgICAvLyBaZXJvLlxyXG4gICAgICAgICAgeC5lID0gMDtcclxuICAgICAgICAgIHguZCA9IFswXTtcclxuICAgICAgICAgIC8vIHguY29uc3RydWN0b3IudW5kZXJmbG93ID0gdHJ1ZTtcclxuICAgICAgICB9IC8vIGVsc2UgeC5jb25zdHJ1Y3Rvci51bmRlcmZsb3cgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuXHJcbiAgICAgIC8vIFplcm8uXHJcbiAgICAgIHguZSA9IDA7XHJcbiAgICAgIHguZCA9IFswXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4geDtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFBhcnNlIHRoZSB2YWx1ZSBvZiBhIG5ldyBEZWNpbWFsIGB4YCBmcm9tIGEgc3RyaW5nIGBzdHJgLCB3aGljaCBpcyBub3QgYSBkZWNpbWFsIHZhbHVlLlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIHBhcnNlT3RoZXIoeCwgc3RyKSB7XHJcbiAgICB2YXIgYmFzZSwgQ3RvciwgZGl2aXNvciwgaSwgaXNGbG9hdCwgbGVuLCBwLCB4ZCwgeGU7XHJcblxyXG4gICAgaWYgKHN0ciA9PT0gJ0luZmluaXR5JyB8fCBzdHIgPT09ICdOYU4nKSB7XHJcbiAgICAgIGlmICghK3N0cikgeC5zID0gTmFOO1xyXG4gICAgICB4LmUgPSBOYU47XHJcbiAgICAgIHguZCA9IG51bGw7XHJcbiAgICAgIHJldHVybiB4O1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpc0hleC50ZXN0KHN0cikpICB7XHJcbiAgICAgIGJhc2UgPSAxNjtcclxuICAgICAgc3RyID0gc3RyLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB9IGVsc2UgaWYgKGlzQmluYXJ5LnRlc3Qoc3RyKSkgIHtcclxuICAgICAgYmFzZSA9IDI7XHJcbiAgICB9IGVsc2UgaWYgKGlzT2N0YWwudGVzdChzdHIpKSAge1xyXG4gICAgICBiYXNlID0gODtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IEVycm9yKGludmFsaWRBcmd1bWVudCArIHN0cik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSXMgdGhlcmUgYSBiaW5hcnkgZXhwb25lbnQgcGFydD9cclxuICAgIGkgPSBzdHIuc2VhcmNoKC9wL2kpO1xyXG5cclxuICAgIGlmIChpID4gMCkge1xyXG4gICAgICBwID0gK3N0ci5zbGljZShpICsgMSk7XHJcbiAgICAgIHN0ciA9IHN0ci5zdWJzdHJpbmcoMiwgaSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzdHIgPSBzdHIuc2xpY2UoMik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ29udmVydCBgc3RyYCBhcyBhbiBpbnRlZ2VyIHRoZW4gZGl2aWRlIHRoZSByZXN1bHQgYnkgYGJhc2VgIHJhaXNlZCB0byBhIHBvd2VyIHN1Y2ggdGhhdCB0aGVcclxuICAgIC8vIGZyYWN0aW9uIHBhcnQgd2lsbCBiZSByZXN0b3JlZC5cclxuICAgIGkgPSBzdHIuaW5kZXhPZignLicpO1xyXG4gICAgaXNGbG9hdCA9IGkgPj0gMDtcclxuICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIGlmIChpc0Zsb2F0KSB7XHJcbiAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKCcuJywgJycpO1xyXG4gICAgICBsZW4gPSBzdHIubGVuZ3RoO1xyXG4gICAgICBpID0gbGVuIC0gaTtcclxuXHJcbiAgICAgIC8vIGxvZ1sxMF0oMTYpID0gMS4yMDQxLi4uICwgbG9nWzEwXSg4OCkgPSAxLjk0NDQuLi4uXHJcbiAgICAgIGRpdmlzb3IgPSBpbnRQb3coQ3RvciwgbmV3IEN0b3IoYmFzZSksIGksIGkgKiAyKTtcclxuICAgIH1cclxuXHJcbiAgICB4ZCA9IGNvbnZlcnRCYXNlKHN0ciwgYmFzZSwgQkFTRSk7XHJcbiAgICB4ZSA9IHhkLmxlbmd0aCAtIDE7XHJcblxyXG4gICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgZm9yIChpID0geGU7IHhkW2ldID09PSAwOyAtLWkpIHhkLnBvcCgpO1xyXG4gICAgaWYgKGkgPCAwKSByZXR1cm4gbmV3IEN0b3IoeC5zICogMCk7XHJcbiAgICB4LmUgPSBnZXRCYXNlMTBFeHBvbmVudCh4ZCwgeGUpO1xyXG4gICAgeC5kID0geGQ7XHJcbiAgICBleHRlcm5hbCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIEF0IHdoYXQgcHJlY2lzaW9uIHRvIHBlcmZvcm0gdGhlIGRpdmlzaW9uIHRvIGVuc3VyZSBleGFjdCBjb252ZXJzaW9uP1xyXG4gICAgLy8gbWF4RGVjaW1hbEludGVnZXJQYXJ0RGlnaXRDb3VudCA9IGNlaWwobG9nWzEwXShiKSAqIG90aGVyQmFzZUludGVnZXJQYXJ0RGlnaXRDb3VudClcclxuICAgIC8vIGxvZ1sxMF0oMikgPSAwLjMwMTAzLCBsb2dbMTBdKDgpID0gMC45MDMwOSwgbG9nWzEwXSgxNikgPSAxLjIwNDEyXHJcbiAgICAvLyBFLmcuIGNlaWwoMS4yICogMykgPSA0LCBzbyB1cCB0byA0IGRlY2ltYWwgZGlnaXRzIGFyZSBuZWVkZWQgdG8gcmVwcmVzZW50IDMgaGV4IGludCBkaWdpdHMuXHJcbiAgICAvLyBtYXhEZWNpbWFsRnJhY3Rpb25QYXJ0RGlnaXRDb3VudCA9IHtIZXg6NHxPY3Q6M3xCaW46MX0gKiBvdGhlckJhc2VGcmFjdGlvblBhcnREaWdpdENvdW50XHJcbiAgICAvLyBUaGVyZWZvcmUgdXNpbmcgNCAqIHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIHN0ciB3aWxsIGFsd2F5cyBiZSBlbm91Z2guXHJcbiAgICBpZiAoaXNGbG9hdCkgeCA9IGRpdmlkZSh4LCBkaXZpc29yLCBsZW4gKiA0KTtcclxuXHJcbiAgICAvLyBNdWx0aXBseSBieSB0aGUgYmluYXJ5IGV4cG9uZW50IHBhcnQgaWYgcHJlc2VudC5cclxuICAgIGlmIChwKSB4ID0geC50aW1lcyhNYXRoLmFicyhwKSA8IDU0ID8gbWF0aHBvdygyLCBwKSA6IERlY2ltYWwucG93KDIsIHApKTtcclxuICAgIGV4dGVybmFsID0gdHJ1ZTtcclxuXHJcbiAgICByZXR1cm4geDtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIHNpbih4KSA9IHggLSB4XjMvMyEgKyB4XjUvNSEgLSAuLi5cclxuICAgKiB8eHwgPCBwaS8yXHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBzaW5lKEN0b3IsIHgpIHtcclxuICAgIHZhciBrLFxyXG4gICAgICBsZW4gPSB4LmQubGVuZ3RoO1xyXG5cclxuICAgIGlmIChsZW4gPCAzKSByZXR1cm4gdGF5bG9yU2VyaWVzKEN0b3IsIDIsIHgsIHgpO1xyXG5cclxuICAgIC8vIEFyZ3VtZW50IHJlZHVjdGlvbjogc2luKDV4KSA9IDE2KnNpbl41KHgpIC0gMjAqc2luXjMoeCkgKyA1KnNpbih4KVxyXG4gICAgLy8gaS5lLiBzaW4oeCkgPSAxNipzaW5eNSh4LzUpIC0gMjAqc2luXjMoeC81KSArIDUqc2luKHgvNSlcclxuICAgIC8vIGFuZCAgc2luKHgpID0gc2luKHgvNSkoNSArIHNpbl4yKHgvNSkoMTZzaW5eMih4LzUpIC0gMjApKVxyXG5cclxuICAgIC8vIEVzdGltYXRlIHRoZSBvcHRpbXVtIG51bWJlciBvZiB0aW1lcyB0byB1c2UgdGhlIGFyZ3VtZW50IHJlZHVjdGlvbi5cclxuICAgIGsgPSAxLjQgKiBNYXRoLnNxcnQobGVuKTtcclxuICAgIGsgPSBrID4gMTYgPyAxNiA6IGsgfCAwO1xyXG5cclxuICAgIHggPSB4LnRpbWVzKDEgLyB0aW55UG93KDUsIGspKTtcclxuICAgIHggPSB0YXlsb3JTZXJpZXMoQ3RvciwgMiwgeCwgeCk7XHJcblxyXG4gICAgLy8gUmV2ZXJzZSBhcmd1bWVudCByZWR1Y3Rpb25cclxuICAgIHZhciBzaW4yX3gsXHJcbiAgICAgIGQ1ID0gbmV3IEN0b3IoNSksXHJcbiAgICAgIGQxNiA9IG5ldyBDdG9yKDE2KSxcclxuICAgICAgZDIwID0gbmV3IEN0b3IoMjApO1xyXG4gICAgZm9yICg7IGstLTspIHtcclxuICAgICAgc2luMl94ID0geC50aW1lcyh4KTtcclxuICAgICAgeCA9IHgudGltZXMoZDUucGx1cyhzaW4yX3gudGltZXMoZDE2LnRpbWVzKHNpbjJfeCkubWludXMoZDIwKSkpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4geDtcclxuICB9XHJcblxyXG5cclxuICAvLyBDYWxjdWxhdGUgVGF5bG9yIHNlcmllcyBmb3IgYGNvc2AsIGBjb3NoYCwgYHNpbmAgYW5kIGBzaW5oYC5cclxuICBmdW5jdGlvbiB0YXlsb3JTZXJpZXMoQ3RvciwgbiwgeCwgeSwgaXNIeXBlcmJvbGljKSB7XHJcbiAgICB2YXIgaiwgdCwgdSwgeDIsXHJcbiAgICAgIGkgPSAxLFxyXG4gICAgICBwciA9IEN0b3IucHJlY2lzaW9uLFxyXG4gICAgICBrID0gTWF0aC5jZWlsKHByIC8gTE9HX0JBU0UpO1xyXG5cclxuICAgIGV4dGVybmFsID0gZmFsc2U7XHJcbiAgICB4MiA9IHgudGltZXMoeCk7XHJcbiAgICB1ID0gbmV3IEN0b3IoeSk7XHJcblxyXG4gICAgZm9yICg7Oykge1xyXG4gICAgICB0ID0gZGl2aWRlKHUudGltZXMoeDIpLCBuZXcgQ3RvcihuKysgKiBuKyspLCBwciwgMSk7XHJcbiAgICAgIHUgPSBpc0h5cGVyYm9saWMgPyB5LnBsdXModCkgOiB5Lm1pbnVzKHQpO1xyXG4gICAgICB5ID0gZGl2aWRlKHQudGltZXMoeDIpLCBuZXcgQ3RvcihuKysgKiBuKyspLCBwciwgMSk7XHJcbiAgICAgIHQgPSB1LnBsdXMoeSk7XHJcblxyXG4gICAgICBpZiAodC5kW2tdICE9PSB2b2lkIDApIHtcclxuICAgICAgICBmb3IgKGogPSBrOyB0LmRbal0gPT09IHUuZFtqXSAmJiBqLS07KTtcclxuICAgICAgICBpZiAoaiA9PSAtMSkgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGogPSB1O1xyXG4gICAgICB1ID0geTtcclxuICAgICAgeSA9IHQ7XHJcbiAgICAgIHQgPSBqO1xyXG4gICAgICBpKys7XHJcbiAgICB9XHJcblxyXG4gICAgZXh0ZXJuYWwgPSB0cnVlO1xyXG4gICAgdC5kLmxlbmd0aCA9IGsgKyAxO1xyXG5cclxuICAgIHJldHVybiB0O1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIEV4cG9uZW50IGUgbXVzdCBiZSBwb3NpdGl2ZSBhbmQgbm9uLXplcm8uXHJcbiAgZnVuY3Rpb24gdGlueVBvdyhiLCBlKSB7XHJcbiAgICB2YXIgbiA9IGI7XHJcbiAgICB3aGlsZSAoLS1lKSBuICo9IGI7XHJcbiAgICByZXR1cm4gbjtcclxuICB9XHJcblxyXG5cclxuICAvLyBSZXR1cm4gdGhlIGFic29sdXRlIHZhbHVlIG9mIGB4YCByZWR1Y2VkIHRvIGxlc3MgdGhhbiBvciBlcXVhbCB0byBoYWxmIHBpLlxyXG4gIGZ1bmN0aW9uIHRvTGVzc1RoYW5IYWxmUGkoQ3RvciwgeCkge1xyXG4gICAgdmFyIHQsXHJcbiAgICAgIGlzTmVnID0geC5zIDwgMCxcclxuICAgICAgcGkgPSBnZXRQaShDdG9yLCBDdG9yLnByZWNpc2lvbiwgMSksXHJcbiAgICAgIGhhbGZQaSA9IHBpLnRpbWVzKDAuNSk7XHJcblxyXG4gICAgeCA9IHguYWJzKCk7XHJcblxyXG4gICAgaWYgKHgubHRlKGhhbGZQaSkpIHtcclxuICAgICAgcXVhZHJhbnQgPSBpc05lZyA/IDQgOiAxO1xyXG4gICAgICByZXR1cm4geDtcclxuICAgIH1cclxuXHJcbiAgICB0ID0geC5kaXZUb0ludChwaSk7XHJcblxyXG4gICAgaWYgKHQuaXNaZXJvKCkpIHtcclxuICAgICAgcXVhZHJhbnQgPSBpc05lZyA/IDMgOiAyO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgeCA9IHgubWludXModC50aW1lcyhwaSkpO1xyXG5cclxuICAgICAgLy8gMCA8PSB4IDwgcGlcclxuICAgICAgaWYgKHgubHRlKGhhbGZQaSkpIHtcclxuICAgICAgICBxdWFkcmFudCA9IGlzT2RkKHQpID8gKGlzTmVnID8gMiA6IDMpIDogKGlzTmVnID8gNCA6IDEpO1xyXG4gICAgICAgIHJldHVybiB4O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBxdWFkcmFudCA9IGlzT2RkKHQpID8gKGlzTmVnID8gMSA6IDQpIDogKGlzTmVnID8gMyA6IDIpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB4Lm1pbnVzKHBpKS5hYnMoKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiB0aGUgdmFsdWUgb2YgRGVjaW1hbCBgeGAgYXMgYSBzdHJpbmcgaW4gYmFzZSBgYmFzZU91dGAuXHJcbiAgICpcclxuICAgKiBJZiB0aGUgb3B0aW9uYWwgYHNkYCBhcmd1bWVudCBpcyBwcmVzZW50IGluY2x1ZGUgYSBiaW5hcnkgZXhwb25lbnQgc3VmZml4LlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIHRvU3RyaW5nQmluYXJ5KHgsIGJhc2VPdXQsIHNkLCBybSkge1xyXG4gICAgdmFyIGJhc2UsIGUsIGksIGssIGxlbiwgcm91bmRVcCwgc3RyLCB4ZCwgeSxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3IsXHJcbiAgICAgIGlzRXhwID0gc2QgIT09IHZvaWQgMDtcclxuXHJcbiAgICBpZiAoaXNFeHApIHtcclxuICAgICAgY2hlY2tJbnQzMihzZCwgMSwgTUFYX0RJR0lUUyk7XHJcbiAgICAgIGlmIChybSA9PT0gdm9pZCAwKSBybSA9IEN0b3Iucm91bmRpbmc7XHJcbiAgICAgIGVsc2UgY2hlY2tJbnQzMihybSwgMCwgOCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzZCA9IEN0b3IucHJlY2lzaW9uO1xyXG4gICAgICBybSA9IEN0b3Iucm91bmRpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF4LmlzRmluaXRlKCkpIHtcclxuICAgICAgc3RyID0gbm9uRmluaXRlVG9TdHJpbmcoeCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzdHIgPSBmaW5pdGVUb1N0cmluZyh4KTtcclxuICAgICAgaSA9IHN0ci5pbmRleE9mKCcuJyk7XHJcblxyXG4gICAgICAvLyBVc2UgZXhwb25lbnRpYWwgbm90YXRpb24gYWNjb3JkaW5nIHRvIGB0b0V4cFBvc2AgYW5kIGB0b0V4cE5lZ2A/IE5vLCBidXQgaWYgcmVxdWlyZWQ6XHJcbiAgICAgIC8vIG1heEJpbmFyeUV4cG9uZW50ID0gZmxvb3IoKGRlY2ltYWxFeHBvbmVudCArIDEpICogbG9nWzJdKDEwKSlcclxuICAgICAgLy8gbWluQmluYXJ5RXhwb25lbnQgPSBmbG9vcihkZWNpbWFsRXhwb25lbnQgKiBsb2dbMl0oMTApKVxyXG4gICAgICAvLyBsb2dbMl0oMTApID0gMy4zMjE5MjgwOTQ4ODczNjIzNDc4NzAzMTk0Mjk0ODkzOTAxNzU4NjRcclxuXHJcbiAgICAgIGlmIChpc0V4cCkge1xyXG4gICAgICAgIGJhc2UgPSAyO1xyXG4gICAgICAgIGlmIChiYXNlT3V0ID09IDE2KSB7XHJcbiAgICAgICAgICBzZCA9IHNkICogNCAtIDM7XHJcbiAgICAgICAgfSBlbHNlIGlmIChiYXNlT3V0ID09IDgpIHtcclxuICAgICAgICAgIHNkID0gc2QgKiAzIC0gMjtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYmFzZSA9IGJhc2VPdXQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIENvbnZlcnQgdGhlIG51bWJlciBhcyBhbiBpbnRlZ2VyIHRoZW4gZGl2aWRlIHRoZSByZXN1bHQgYnkgaXRzIGJhc2UgcmFpc2VkIHRvIGEgcG93ZXIgc3VjaFxyXG4gICAgICAvLyB0aGF0IHRoZSBmcmFjdGlvbiBwYXJ0IHdpbGwgYmUgcmVzdG9yZWQuXHJcblxyXG4gICAgICAvLyBOb24taW50ZWdlci5cclxuICAgICAgaWYgKGkgPj0gMCkge1xyXG4gICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKCcuJywgJycpO1xyXG4gICAgICAgIHkgPSBuZXcgQ3RvcigxKTtcclxuICAgICAgICB5LmUgPSBzdHIubGVuZ3RoIC0gaTtcclxuICAgICAgICB5LmQgPSBjb252ZXJ0QmFzZShmaW5pdGVUb1N0cmluZyh5KSwgMTAsIGJhc2UpO1xyXG4gICAgICAgIHkuZSA9IHkuZC5sZW5ndGg7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHhkID0gY29udmVydEJhc2Uoc3RyLCAxMCwgYmFzZSk7XHJcbiAgICAgIGUgPSBsZW4gPSB4ZC5sZW5ndGg7XHJcblxyXG4gICAgICAvLyBSZW1vdmUgdHJhaWxpbmcgemVyb3MuXHJcbiAgICAgIGZvciAoOyB4ZFstLWxlbl0gPT0gMDspIHhkLnBvcCgpO1xyXG5cclxuICAgICAgaWYgKCF4ZFswXSkge1xyXG4gICAgICAgIHN0ciA9IGlzRXhwID8gJzBwKzAnIDogJzAnO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChpIDwgMCkge1xyXG4gICAgICAgICAgZS0tO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB4ID0gbmV3IEN0b3IoeCk7XHJcbiAgICAgICAgICB4LmQgPSB4ZDtcclxuICAgICAgICAgIHguZSA9IGU7XHJcbiAgICAgICAgICB4ID0gZGl2aWRlKHgsIHksIHNkLCBybSwgMCwgYmFzZSk7XHJcbiAgICAgICAgICB4ZCA9IHguZDtcclxuICAgICAgICAgIGUgPSB4LmU7XHJcbiAgICAgICAgICByb3VuZFVwID0gaW5leGFjdDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFRoZSByb3VuZGluZyBkaWdpdCwgaS5lLiB0aGUgZGlnaXQgYWZ0ZXIgdGhlIGRpZ2l0IHRoYXQgbWF5IGJlIHJvdW5kZWQgdXAuXHJcbiAgICAgICAgaSA9IHhkW3NkXTtcclxuICAgICAgICBrID0gYmFzZSAvIDI7XHJcbiAgICAgICAgcm91bmRVcCA9IHJvdW5kVXAgfHwgeGRbc2QgKyAxXSAhPT0gdm9pZCAwO1xyXG5cclxuICAgICAgICByb3VuZFVwID0gcm0gPCA0XHJcbiAgICAgICAgICA/IChpICE9PSB2b2lkIDAgfHwgcm91bmRVcCkgJiYgKHJtID09PSAwIHx8IHJtID09PSAoeC5zIDwgMCA/IDMgOiAyKSlcclxuICAgICAgICAgIDogaSA+IGsgfHwgaSA9PT0gayAmJiAocm0gPT09IDQgfHwgcm91bmRVcCB8fCBybSA9PT0gNiAmJiB4ZFtzZCAtIDFdICYgMSB8fFxyXG4gICAgICAgICAgICBybSA9PT0gKHgucyA8IDAgPyA4IDogNykpO1xyXG5cclxuICAgICAgICB4ZC5sZW5ndGggPSBzZDtcclxuXHJcbiAgICAgICAgaWYgKHJvdW5kVXApIHtcclxuXHJcbiAgICAgICAgICAvLyBSb3VuZGluZyB1cCBtYXkgbWVhbiB0aGUgcHJldmlvdXMgZGlnaXQgaGFzIHRvIGJlIHJvdW5kZWQgdXAgYW5kIHNvIG9uLlxyXG4gICAgICAgICAgZm9yICg7ICsreGRbLS1zZF0gPiBiYXNlIC0gMTspIHtcclxuICAgICAgICAgICAgeGRbc2RdID0gMDtcclxuICAgICAgICAgICAgaWYgKCFzZCkge1xyXG4gICAgICAgICAgICAgICsrZTtcclxuICAgICAgICAgICAgICB4ZC51bnNoaWZ0KDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBEZXRlcm1pbmUgdHJhaWxpbmcgemVyb3MuXHJcbiAgICAgICAgZm9yIChsZW4gPSB4ZC5sZW5ndGg7ICF4ZFtsZW4gLSAxXTsgLS1sZW4pO1xyXG5cclxuICAgICAgICAvLyBFLmcuIFs0LCAxMSwgMTVdIGJlY29tZXMgNGJmLlxyXG4gICAgICAgIGZvciAoaSA9IDAsIHN0ciA9ICcnOyBpIDwgbGVuOyBpKyspIHN0ciArPSBOVU1FUkFMUy5jaGFyQXQoeGRbaV0pO1xyXG5cclxuICAgICAgICAvLyBBZGQgYmluYXJ5IGV4cG9uZW50IHN1ZmZpeD9cclxuICAgICAgICBpZiAoaXNFeHApIHtcclxuICAgICAgICAgIGlmIChsZW4gPiAxKSB7XHJcbiAgICAgICAgICAgIGlmIChiYXNlT3V0ID09IDE2IHx8IGJhc2VPdXQgPT0gOCkge1xyXG4gICAgICAgICAgICAgIGkgPSBiYXNlT3V0ID09IDE2ID8gNCA6IDM7XHJcbiAgICAgICAgICAgICAgZm9yICgtLWxlbjsgbGVuICUgaTsgbGVuKyspIHN0ciArPSAnMCc7XHJcbiAgICAgICAgICAgICAgeGQgPSBjb252ZXJ0QmFzZShzdHIsIGJhc2UsIGJhc2VPdXQpO1xyXG4gICAgICAgICAgICAgIGZvciAobGVuID0geGQubGVuZ3RoOyAheGRbbGVuIC0gMV07IC0tbGVuKTtcclxuXHJcbiAgICAgICAgICAgICAgLy8geGRbMF0gd2lsbCBhbHdheXMgYmUgYmUgMVxyXG4gICAgICAgICAgICAgIGZvciAoaSA9IDEsIHN0ciA9ICcxLic7IGkgPCBsZW47IGkrKykgc3RyICs9IE5VTUVSQUxTLmNoYXJBdCh4ZFtpXSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgc3RyID0gc3RyLmNoYXJBdCgwKSArICcuJyArIHN0ci5zbGljZSgxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHN0ciA9ICBzdHIgKyAoZSA8IDAgPyAncCcgOiAncCsnKSArIGU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChlIDwgMCkge1xyXG4gICAgICAgICAgZm9yICg7ICsrZTspIHN0ciA9ICcwJyArIHN0cjtcclxuICAgICAgICAgIHN0ciA9ICcwLicgKyBzdHI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICgrK2UgPiBsZW4pIGZvciAoZSAtPSBsZW47IGUtLSA7KSBzdHIgKz0gJzAnO1xyXG4gICAgICAgICAgZWxzZSBpZiAoZSA8IGxlbikgc3RyID0gc3RyLnNsaWNlKDAsIGUpICsgJy4nICsgc3RyLnNsaWNlKGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgc3RyID0gKGJhc2VPdXQgPT0gMTYgPyAnMHgnIDogYmFzZU91dCA9PSAyID8gJzBiJyA6IGJhc2VPdXQgPT0gOCA/ICcwbycgOiAnJykgKyBzdHI7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHgucyA8IDAgPyAnLScgKyBzdHIgOiBzdHI7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gRG9lcyBub3Qgc3RyaXAgdHJhaWxpbmcgemVyb3MuXHJcbiAgZnVuY3Rpb24gdHJ1bmNhdGUoYXJyLCBsZW4pIHtcclxuICAgIGlmIChhcnIubGVuZ3RoID4gbGVuKSB7XHJcbiAgICAgIGFyci5sZW5ndGggPSBsZW47XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8vIERlY2ltYWwgbWV0aG9kc1xyXG5cclxuXHJcbiAgLypcclxuICAgKiAgYWJzXHJcbiAgICogIGFjb3NcclxuICAgKiAgYWNvc2hcclxuICAgKiAgYWRkXHJcbiAgICogIGFzaW5cclxuICAgKiAgYXNpbmhcclxuICAgKiAgYXRhblxyXG4gICAqICBhdGFuaFxyXG4gICAqICBhdGFuMlxyXG4gICAqICBjYnJ0XHJcbiAgICogIGNlaWxcclxuICAgKiAgY2xvbmVcclxuICAgKiAgY29uZmlnXHJcbiAgICogIGNvc1xyXG4gICAqICBjb3NoXHJcbiAgICogIGRpdlxyXG4gICAqICBleHBcclxuICAgKiAgZmxvb3JcclxuICAgKiAgaHlwb3RcclxuICAgKiAgbG5cclxuICAgKiAgbG9nXHJcbiAgICogIGxvZzJcclxuICAgKiAgbG9nMTBcclxuICAgKiAgbWF4XHJcbiAgICogIG1pblxyXG4gICAqICBtb2RcclxuICAgKiAgbXVsXHJcbiAgICogIHBvd1xyXG4gICAqICByYW5kb21cclxuICAgKiAgcm91bmRcclxuICAgKiAgc2V0XHJcbiAgICogIHNpZ25cclxuICAgKiAgc2luXHJcbiAgICogIHNpbmhcclxuICAgKiAgc3FydFxyXG4gICAqICBzdWJcclxuICAgKiAgdGFuXHJcbiAgICogIHRhbmhcclxuICAgKiAgdHJ1bmNcclxuICAgKi9cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGFic29sdXRlIHZhbHVlIG9mIGB4YC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGFicyh4KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkuYWJzKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgYXJjY29zaW5lIGluIHJhZGlhbnMgb2YgYHhgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gYWNvcyh4KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkuYWNvcygpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGludmVyc2Ugb2YgdGhlIGh5cGVyYm9saWMgY29zaW5lIG9mIGB4YCwgcm91bmRlZCB0b1xyXG4gICAqIGBwcmVjaXNpb25gIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IEEgdmFsdWUgaW4gcmFkaWFucy5cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGFjb3NoKHgpIHtcclxuICAgIHJldHVybiBuZXcgdGhpcyh4KS5hY29zaCgpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIHN1bSBvZiBgeGAgYW5kIGB5YCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYCBzaWduaWZpY2FudFxyXG4gICAqIGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICogeSB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gYWRkKHgsIHkpIHtcclxuICAgIHJldHVybiBuZXcgdGhpcyh4KS5wbHVzKHkpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGFyY3NpbmUgaW4gcmFkaWFucyBvZiBgeGAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmBcclxuICAgKiBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gYXNpbih4KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkuYXNpbigpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGludmVyc2Ugb2YgdGhlIGh5cGVyYm9saWMgc2luZSBvZiBgeGAsIHJvdW5kZWQgdG9cclxuICAgKiBgcHJlY2lzaW9uYCBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfSBBIHZhbHVlIGluIHJhZGlhbnMuXHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBhc2luaCh4KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkuYXNpbmgoKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBhcmN0YW5nZW50IGluIHJhZGlhbnMgb2YgYHhgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gXHJcbiAgICogc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGF0YW4oeCkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLmF0YW4oKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBpbnZlcnNlIG9mIHRoZSBoeXBlcmJvbGljIHRhbmdlbnQgb2YgYHhgLCByb3VuZGVkIHRvXHJcbiAgICogYHByZWNpc2lvbmAgc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH0gQSB2YWx1ZSBpbiByYWRpYW5zLlxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gYXRhbmgoeCkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLmF0YW5oKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgYXJjdGFuZ2VudCBpbiByYWRpYW5zIG9mIGB5L3hgIGluIHRoZSByYW5nZSAtcGkgdG8gcGlcclxuICAgKiAoaW5jbHVzaXZlKSwgcm91bmRlZCB0byBgcHJlY2lzaW9uYCBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogRG9tYWluOiBbLUluZmluaXR5LCBJbmZpbml0eV1cclxuICAgKiBSYW5nZTogWy1waSwgcGldXHJcbiAgICpcclxuICAgKiB5IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IFRoZSB5LWNvb3JkaW5hdGUuXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfSBUaGUgeC1jb29yZGluYXRlLlxyXG4gICAqXHJcbiAgICogYXRhbjIowrEwLCAtMCkgICAgICAgICAgICAgICA9IMKxcGlcclxuICAgKiBhdGFuMijCsTAsICswKSAgICAgICAgICAgICAgID0gwrEwXHJcbiAgICogYXRhbjIowrEwLCAteCkgICAgICAgICAgICAgICA9IMKxcGkgZm9yIHggPiAwXHJcbiAgICogYXRhbjIowrEwLCB4KSAgICAgICAgICAgICAgICA9IMKxMCBmb3IgeCA+IDBcclxuICAgKiBhdGFuMigteSwgwrEwKSAgICAgICAgICAgICAgID0gLXBpLzIgZm9yIHkgPiAwXHJcbiAgICogYXRhbjIoeSwgwrEwKSAgICAgICAgICAgICAgICA9IHBpLzIgZm9yIHkgPiAwXHJcbiAgICogYXRhbjIowrF5LCAtSW5maW5pdHkpICAgICAgICA9IMKxcGkgZm9yIGZpbml0ZSB5ID4gMFxyXG4gICAqIGF0YW4yKMKxeSwgK0luZmluaXR5KSAgICAgICAgPSDCsTAgZm9yIGZpbml0ZSB5ID4gMFxyXG4gICAqIGF0YW4yKMKxSW5maW5pdHksIHgpICAgICAgICAgPSDCsXBpLzIgZm9yIGZpbml0ZSB4XHJcbiAgICogYXRhbjIowrFJbmZpbml0eSwgLUluZmluaXR5KSA9IMKxMypwaS80XHJcbiAgICogYXRhbjIowrFJbmZpbml0eSwgK0luZmluaXR5KSA9IMKxcGkvNFxyXG4gICAqIGF0YW4yKE5hTiwgeCkgPSBOYU5cclxuICAgKiBhdGFuMih5LCBOYU4pID0gTmFOXHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBhdGFuMih5LCB4KSB7XHJcbiAgICB5ID0gbmV3IHRoaXMoeSk7XHJcbiAgICB4ID0gbmV3IHRoaXMoeCk7XHJcbiAgICB2YXIgcixcclxuICAgICAgcHIgPSB0aGlzLnByZWNpc2lvbixcclxuICAgICAgcm0gPSB0aGlzLnJvdW5kaW5nLFxyXG4gICAgICB3cHIgPSBwciArIDQ7XHJcblxyXG4gICAgLy8gRWl0aGVyIE5hTlxyXG4gICAgaWYgKCF5LnMgfHwgIXgucykge1xyXG4gICAgICByID0gbmV3IHRoaXMoTmFOKTtcclxuXHJcbiAgICAvLyBCb3RoIMKxSW5maW5pdHlcclxuICAgIH0gZWxzZSBpZiAoIXkuZCAmJiAheC5kKSB7XHJcbiAgICAgIHIgPSBnZXRQaSh0aGlzLCB3cHIsIDEpLnRpbWVzKHgucyA+IDAgPyAwLjI1IDogMC43NSk7XHJcbiAgICAgIHIucyA9IHkucztcclxuXHJcbiAgICAvLyB4IGlzIMKxSW5maW5pdHkgb3IgeSBpcyDCsTBcclxuICAgIH0gZWxzZSBpZiAoIXguZCB8fCB5LmlzWmVybygpKSB7XHJcbiAgICAgIHIgPSB4LnMgPCAwID8gZ2V0UGkodGhpcywgcHIsIHJtKSA6IG5ldyB0aGlzKDApO1xyXG4gICAgICByLnMgPSB5LnM7XHJcblxyXG4gICAgLy8geSBpcyDCsUluZmluaXR5IG9yIHggaXMgwrEwXHJcbiAgICB9IGVsc2UgaWYgKCF5LmQgfHwgeC5pc1plcm8oKSkge1xyXG4gICAgICByID0gZ2V0UGkodGhpcywgd3ByLCAxKS50aW1lcygwLjUpO1xyXG4gICAgICByLnMgPSB5LnM7XHJcblxyXG4gICAgLy8gQm90aCBub24temVybyBhbmQgZmluaXRlXHJcbiAgICB9IGVsc2UgaWYgKHgucyA8IDApIHtcclxuICAgICAgdGhpcy5wcmVjaXNpb24gPSB3cHI7XHJcbiAgICAgIHRoaXMucm91bmRpbmcgPSAxO1xyXG4gICAgICByID0gdGhpcy5hdGFuKGRpdmlkZSh5LCB4LCB3cHIsIDEpKTtcclxuICAgICAgeCA9IGdldFBpKHRoaXMsIHdwciwgMSk7XHJcbiAgICAgIHRoaXMucHJlY2lzaW9uID0gcHI7XHJcbiAgICAgIHRoaXMucm91bmRpbmcgPSBybTtcclxuICAgICAgciA9IHkucyA8IDAgPyByLm1pbnVzKHgpIDogci5wbHVzKHgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgciA9IHRoaXMuYXRhbihkaXZpZGUoeSwgeCwgd3ByLCAxKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHI7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgY3ViZSByb290IG9mIGB4YCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYCBzaWduaWZpY2FudFxyXG4gICAqIGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBjYnJ0KHgpIHtcclxuICAgIHJldHVybiBuZXcgdGhpcyh4KS5jYnJ0KCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyBgeGAgcm91bmRlZCB0byBhbiBpbnRlZ2VyIHVzaW5nIGBST1VORF9DRUlMYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGNlaWwoeCkge1xyXG4gICAgcmV0dXJuIGZpbmFsaXNlKHggPSBuZXcgdGhpcyh4KSwgeC5lICsgMSwgMik7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBDb25maWd1cmUgZ2xvYmFsIHNldHRpbmdzIGZvciBhIERlY2ltYWwgY29uc3RydWN0b3IuXHJcbiAgICpcclxuICAgKiBgb2JqYCBpcyBhbiBvYmplY3Qgd2l0aCBvbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMsXHJcbiAgICpcclxuICAgKiAgIHByZWNpc2lvbiAge251bWJlcn1cclxuICAgKiAgIHJvdW5kaW5nICAge251bWJlcn1cclxuICAgKiAgIHRvRXhwTmVnICAge251bWJlcn1cclxuICAgKiAgIHRvRXhwUG9zICAge251bWJlcn1cclxuICAgKiAgIG1heEUgICAgICAge251bWJlcn1cclxuICAgKiAgIG1pbkUgICAgICAge251bWJlcn1cclxuICAgKiAgIG1vZHVsbyAgICAge251bWJlcn1cclxuICAgKiAgIGNyeXB0byAgICAge2Jvb2xlYW58bnVtYmVyfVxyXG4gICAqICAgZGVmYXVsdHMgICB7dHJ1ZX1cclxuICAgKlxyXG4gICAqIEUuZy4gRGVjaW1hbC5jb25maWcoeyBwcmVjaXNpb246IDIwLCByb3VuZGluZzogNCB9KVxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gY29uZmlnKG9iaikge1xyXG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHRocm93IEVycm9yKGRlY2ltYWxFcnJvciArICdPYmplY3QgZXhwZWN0ZWQnKTtcclxuICAgIHZhciBpLCBwLCB2LFxyXG4gICAgICB1c2VEZWZhdWx0cyA9IG9iai5kZWZhdWx0cyA9PT0gdHJ1ZSxcclxuICAgICAgcHMgPSBbXHJcbiAgICAgICAgJ3ByZWNpc2lvbicsIDEsIE1BWF9ESUdJVFMsXHJcbiAgICAgICAgJ3JvdW5kaW5nJywgMCwgOCxcclxuICAgICAgICAndG9FeHBOZWcnLCAtRVhQX0xJTUlULCAwLFxyXG4gICAgICAgICd0b0V4cFBvcycsIDAsIEVYUF9MSU1JVCxcclxuICAgICAgICAnbWF4RScsIDAsIEVYUF9MSU1JVCxcclxuICAgICAgICAnbWluRScsIC1FWFBfTElNSVQsIDAsXHJcbiAgICAgICAgJ21vZHVsbycsIDAsIDlcclxuICAgICAgXTtcclxuXHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgcHMubGVuZ3RoOyBpICs9IDMpIHtcclxuICAgICAgaWYgKHAgPSBwc1tpXSwgdXNlRGVmYXVsdHMpIHRoaXNbcF0gPSBERUZBVUxUU1twXTtcclxuICAgICAgaWYgKCh2ID0gb2JqW3BdKSAhPT0gdm9pZCAwKSB7XHJcbiAgICAgICAgaWYgKG1hdGhmbG9vcih2KSA9PT0gdiAmJiB2ID49IHBzW2kgKyAxXSAmJiB2IDw9IHBzW2kgKyAyXSkgdGhpc1twXSA9IHY7XHJcbiAgICAgICAgZWxzZSB0aHJvdyBFcnJvcihpbnZhbGlkQXJndW1lbnQgKyBwICsgJzogJyArIHYpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHAgPSAnY3J5cHRvJywgdXNlRGVmYXVsdHMpIHRoaXNbcF0gPSBERUZBVUxUU1twXTtcclxuICAgIGlmICgodiA9IG9ialtwXSkgIT09IHZvaWQgMCkge1xyXG4gICAgICBpZiAodiA9PT0gdHJ1ZSB8fCB2ID09PSBmYWxzZSB8fCB2ID09PSAwIHx8IHYgPT09IDEpIHtcclxuICAgICAgICBpZiAodikge1xyXG4gICAgICAgICAgaWYgKHR5cGVvZiBjcnlwdG8gIT0gJ3VuZGVmaW5lZCcgJiYgY3J5cHRvICYmXHJcbiAgICAgICAgICAgIChjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzIHx8IGNyeXB0by5yYW5kb21CeXRlcykpIHtcclxuICAgICAgICAgICAgdGhpc1twXSA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihjcnlwdG9VbmF2YWlsYWJsZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXNbcF0gPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhyb3cgRXJyb3IoaW52YWxpZEFyZ3VtZW50ICsgcCArICc6ICcgKyB2KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGNvc2luZSBvZiBgeGAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmAgc2lnbmlmaWNhbnRcclxuICAgKiBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfSBBIHZhbHVlIGluIHJhZGlhbnMuXHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBjb3MoeCkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLmNvcygpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGh5cGVyYm9saWMgY29zaW5lIG9mIGB4YCwgcm91bmRlZCB0byBwcmVjaXNpb25cclxuICAgKiBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfSBBIHZhbHVlIGluIHJhZGlhbnMuXHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBjb3NoKHgpIHtcclxuICAgIHJldHVybiBuZXcgdGhpcyh4KS5jb3NoKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBDcmVhdGUgYW5kIHJldHVybiBhIERlY2ltYWwgY29uc3RydWN0b3Igd2l0aCB0aGUgc2FtZSBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMgYXMgdGhpcyBEZWNpbWFsXHJcbiAgICogY29uc3RydWN0b3IuXHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBjbG9uZShvYmopIHtcclxuICAgIHZhciBpLCBwLCBwcztcclxuXHJcbiAgICAvKlxyXG4gICAgICogVGhlIERlY2ltYWwgY29uc3RydWN0b3IgYW5kIGV4cG9ydGVkIGZ1bmN0aW9uLlxyXG4gICAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgaW5zdGFuY2UuXHJcbiAgICAgKlxyXG4gICAgICogdiB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfSBBIG51bWVyaWMgdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBEZWNpbWFsKHYpIHtcclxuICAgICAgdmFyIGUsIGksIHQsXHJcbiAgICAgICAgeCA9IHRoaXM7XHJcblxyXG4gICAgICAvLyBEZWNpbWFsIGNhbGxlZCB3aXRob3V0IG5ldy5cclxuICAgICAgaWYgKCEoeCBpbnN0YW5jZW9mIERlY2ltYWwpKSByZXR1cm4gbmV3IERlY2ltYWwodik7XHJcblxyXG4gICAgICAvLyBSZXRhaW4gYSByZWZlcmVuY2UgdG8gdGhpcyBEZWNpbWFsIGNvbnN0cnVjdG9yLCBhbmQgc2hhZG93IERlY2ltYWwucHJvdG90eXBlLmNvbnN0cnVjdG9yXHJcbiAgICAgIC8vIHdoaWNoIHBvaW50cyB0byBPYmplY3QuXHJcbiAgICAgIHguY29uc3RydWN0b3IgPSBEZWNpbWFsO1xyXG5cclxuICAgICAgLy8gRHVwbGljYXRlLlxyXG4gICAgICBpZiAodiBpbnN0YW5jZW9mIERlY2ltYWwpIHtcclxuICAgICAgICB4LnMgPSB2LnM7XHJcblxyXG4gICAgICAgIGlmIChleHRlcm5hbCkge1xyXG4gICAgICAgICAgaWYgKCF2LmQgfHwgdi5lID4gRGVjaW1hbC5tYXhFKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBJbmZpbml0eS5cclxuICAgICAgICAgICAgeC5lID0gTmFOO1xyXG4gICAgICAgICAgICB4LmQgPSBudWxsO1xyXG4gICAgICAgICAgfSBlbHNlIGlmICh2LmUgPCBEZWNpbWFsLm1pbkUpIHtcclxuXHJcbiAgICAgICAgICAgIC8vIFplcm8uXHJcbiAgICAgICAgICAgIHguZSA9IDA7XHJcbiAgICAgICAgICAgIHguZCA9IFswXTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHguZSA9IHYuZTtcclxuICAgICAgICAgICAgeC5kID0gdi5kLnNsaWNlKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHguZSA9IHYuZTtcclxuICAgICAgICAgIHguZCA9IHYuZCA/IHYuZC5zbGljZSgpIDogdi5kO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0ID0gdHlwZW9mIHY7XHJcblxyXG4gICAgICBpZiAodCA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICBpZiAodiA9PT0gMCkge1xyXG4gICAgICAgICAgeC5zID0gMSAvIHYgPCAwID8gLTEgOiAxO1xyXG4gICAgICAgICAgeC5lID0gMDtcclxuICAgICAgICAgIHguZCA9IFswXTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2IDwgMCkge1xyXG4gICAgICAgICAgdiA9IC12O1xyXG4gICAgICAgICAgeC5zID0gLTE7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHgucyA9IDE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBGYXN0IHBhdGggZm9yIHNtYWxsIGludGVnZXJzLlxyXG4gICAgICAgIGlmICh2ID09PSB+fnYgJiYgdiA8IDFlNykge1xyXG4gICAgICAgICAgZm9yIChlID0gMCwgaSA9IHY7IGkgPj0gMTA7IGkgLz0gMTApIGUrKztcclxuXHJcbiAgICAgICAgICBpZiAoZXh0ZXJuYWwpIHtcclxuICAgICAgICAgICAgaWYgKGUgPiBEZWNpbWFsLm1heEUpIHtcclxuICAgICAgICAgICAgICB4LmUgPSBOYU47XHJcbiAgICAgICAgICAgICAgeC5kID0gbnVsbDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChlIDwgRGVjaW1hbC5taW5FKSB7XHJcbiAgICAgICAgICAgICAgeC5lID0gMDtcclxuICAgICAgICAgICAgICB4LmQgPSBbMF07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgeC5lID0gZTtcclxuICAgICAgICAgICAgICB4LmQgPSBbdl07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHguZSA9IGU7XHJcbiAgICAgICAgICAgIHguZCA9IFt2XTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIC8vIEluZmluaXR5LCBOYU4uXHJcbiAgICAgICAgfSBlbHNlIGlmICh2ICogMCAhPT0gMCkge1xyXG4gICAgICAgICAgaWYgKCF2KSB4LnMgPSBOYU47XHJcbiAgICAgICAgICB4LmUgPSBOYU47XHJcbiAgICAgICAgICB4LmQgPSBudWxsO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHBhcnNlRGVjaW1hbCh4LCB2LnRvU3RyaW5nKCkpO1xyXG5cclxuICAgICAgfSBlbHNlIGlmICh0ICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHRocm93IEVycm9yKGludmFsaWRBcmd1bWVudCArIHYpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBNaW51cyBzaWduP1xyXG4gICAgICBpZiAoKGkgPSB2LmNoYXJDb2RlQXQoMCkpID09PSA0NSkge1xyXG4gICAgICAgIHYgPSB2LnNsaWNlKDEpO1xyXG4gICAgICAgIHgucyA9IC0xO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIFBsdXMgc2lnbj9cclxuICAgICAgICBpZiAoaSA9PT0gNDMpIHYgPSB2LnNsaWNlKDEpO1xyXG4gICAgICAgIHgucyA9IDE7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBpc0RlY2ltYWwudGVzdCh2KSA/IHBhcnNlRGVjaW1hbCh4LCB2KSA6IHBhcnNlT3RoZXIoeCwgdik7XHJcbiAgICB9XHJcblxyXG4gICAgRGVjaW1hbC5wcm90b3R5cGUgPSBQO1xyXG5cclxuICAgIERlY2ltYWwuUk9VTkRfVVAgPSAwO1xyXG4gICAgRGVjaW1hbC5ST1VORF9ET1dOID0gMTtcclxuICAgIERlY2ltYWwuUk9VTkRfQ0VJTCA9IDI7XHJcbiAgICBEZWNpbWFsLlJPVU5EX0ZMT09SID0gMztcclxuICAgIERlY2ltYWwuUk9VTkRfSEFMRl9VUCA9IDQ7XHJcbiAgICBEZWNpbWFsLlJPVU5EX0hBTEZfRE9XTiA9IDU7XHJcbiAgICBEZWNpbWFsLlJPVU5EX0hBTEZfRVZFTiA9IDY7XHJcbiAgICBEZWNpbWFsLlJPVU5EX0hBTEZfQ0VJTCA9IDc7XHJcbiAgICBEZWNpbWFsLlJPVU5EX0hBTEZfRkxPT1IgPSA4O1xyXG4gICAgRGVjaW1hbC5FVUNMSUQgPSA5O1xyXG5cclxuICAgIERlY2ltYWwuY29uZmlnID0gRGVjaW1hbC5zZXQgPSBjb25maWc7XHJcbiAgICBEZWNpbWFsLmNsb25lID0gY2xvbmU7XHJcbiAgICBEZWNpbWFsLmlzRGVjaW1hbCA9IGlzRGVjaW1hbEluc3RhbmNlO1xyXG5cclxuICAgIERlY2ltYWwuYWJzID0gYWJzO1xyXG4gICAgRGVjaW1hbC5hY29zID0gYWNvcztcclxuICAgIERlY2ltYWwuYWNvc2ggPSBhY29zaDsgICAgICAgIC8vIEVTNlxyXG4gICAgRGVjaW1hbC5hZGQgPSBhZGQ7XHJcbiAgICBEZWNpbWFsLmFzaW4gPSBhc2luO1xyXG4gICAgRGVjaW1hbC5hc2luaCA9IGFzaW5oOyAgICAgICAgLy8gRVM2XHJcbiAgICBEZWNpbWFsLmF0YW4gPSBhdGFuO1xyXG4gICAgRGVjaW1hbC5hdGFuaCA9IGF0YW5oOyAgICAgICAgLy8gRVM2XHJcbiAgICBEZWNpbWFsLmF0YW4yID0gYXRhbjI7XHJcbiAgICBEZWNpbWFsLmNicnQgPSBjYnJ0OyAgICAgICAgICAvLyBFUzZcclxuICAgIERlY2ltYWwuY2VpbCA9IGNlaWw7XHJcbiAgICBEZWNpbWFsLmNvcyA9IGNvcztcclxuICAgIERlY2ltYWwuY29zaCA9IGNvc2g7ICAgICAgICAgIC8vIEVTNlxyXG4gICAgRGVjaW1hbC5kaXYgPSBkaXY7XHJcbiAgICBEZWNpbWFsLmV4cCA9IGV4cDtcclxuICAgIERlY2ltYWwuZmxvb3IgPSBmbG9vcjtcclxuICAgIERlY2ltYWwuaHlwb3QgPSBoeXBvdDsgICAgICAgIC8vIEVTNlxyXG4gICAgRGVjaW1hbC5sbiA9IGxuO1xyXG4gICAgRGVjaW1hbC5sb2cgPSBsb2c7XHJcbiAgICBEZWNpbWFsLmxvZzEwID0gbG9nMTA7ICAgICAgICAvLyBFUzZcclxuICAgIERlY2ltYWwubG9nMiA9IGxvZzI7ICAgICAgICAgIC8vIEVTNlxyXG4gICAgRGVjaW1hbC5tYXggPSBtYXg7XHJcbiAgICBEZWNpbWFsLm1pbiA9IG1pbjtcclxuICAgIERlY2ltYWwubW9kID0gbW9kO1xyXG4gICAgRGVjaW1hbC5tdWwgPSBtdWw7XHJcbiAgICBEZWNpbWFsLnBvdyA9IHBvdztcclxuICAgIERlY2ltYWwucmFuZG9tID0gcmFuZG9tO1xyXG4gICAgRGVjaW1hbC5yb3VuZCA9IHJvdW5kO1xyXG4gICAgRGVjaW1hbC5zaWduID0gc2lnbjsgICAgICAgICAgLy8gRVM2XHJcbiAgICBEZWNpbWFsLnNpbiA9IHNpbjtcclxuICAgIERlY2ltYWwuc2luaCA9IHNpbmg7ICAgICAgICAgIC8vIEVTNlxyXG4gICAgRGVjaW1hbC5zcXJ0ID0gc3FydDtcclxuICAgIERlY2ltYWwuc3ViID0gc3ViO1xyXG4gICAgRGVjaW1hbC50YW4gPSB0YW47XHJcbiAgICBEZWNpbWFsLnRhbmggPSB0YW5oOyAgICAgICAgICAvLyBFUzZcclxuICAgIERlY2ltYWwudHJ1bmMgPSB0cnVuYzsgICAgICAgIC8vIEVTNlxyXG5cclxuICAgIGlmIChvYmogPT09IHZvaWQgMCkgb2JqID0ge307XHJcbiAgICBpZiAob2JqKSB7XHJcbiAgICAgIGlmIChvYmouZGVmYXVsdHMgIT09IHRydWUpIHtcclxuICAgICAgICBwcyA9IFsncHJlY2lzaW9uJywgJ3JvdW5kaW5nJywgJ3RvRXhwTmVnJywgJ3RvRXhwUG9zJywgJ21heEUnLCAnbWluRScsICdtb2R1bG8nLCAnY3J5cHRvJ107XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHBzLmxlbmd0aDspIGlmICghb2JqLmhhc093blByb3BlcnR5KHAgPSBwc1tpKytdKSkgb2JqW3BdID0gdGhpc1twXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIERlY2ltYWwuY29uZmlnKG9iaik7XHJcblxyXG4gICAgcmV0dXJuIERlY2ltYWw7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyBgeGAgZGl2aWRlZCBieSBgeWAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmAgc2lnbmlmaWNhbnRcclxuICAgKiBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqIHkge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGRpdih4LCB5KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkuZGl2KHkpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIG5hdHVyYWwgZXhwb25lbnRpYWwgb2YgYHhgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gXHJcbiAgICogc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH0gVGhlIHBvd2VyIHRvIHdoaWNoIHRvIHJhaXNlIHRoZSBiYXNlIG9mIHRoZSBuYXR1cmFsIGxvZy5cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGV4cCh4KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkuZXhwKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyBgeGAgcm91bmQgdG8gYW4gaW50ZWdlciB1c2luZyBgUk9VTkRfRkxPT1JgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gZmxvb3IoeCkge1xyXG4gICAgcmV0dXJuIGZpbmFsaXNlKHggPSBuZXcgdGhpcyh4KSwgeC5lICsgMSwgMyk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgc3F1YXJlIHJvb3Qgb2YgdGhlIHN1bSBvZiB0aGUgc3F1YXJlcyBvZiB0aGUgYXJndW1lbnRzLFxyXG4gICAqIHJvdW5kZWQgdG8gYHByZWNpc2lvbmAgc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIGh5cG90KGEsIGIsIC4uLikgPSBzcXJ0KGFeMiArIGJeMiArIC4uLilcclxuICAgKlxyXG4gICAqIGFyZ3VtZW50cyB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gaHlwb3QoKSB7XHJcbiAgICB2YXIgaSwgbixcclxuICAgICAgdCA9IG5ldyB0aGlzKDApO1xyXG5cclxuICAgIGV4dGVybmFsID0gZmFsc2U7XHJcblxyXG4gICAgZm9yIChpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7KSB7XHJcbiAgICAgIG4gPSBuZXcgdGhpcyhhcmd1bWVudHNbaSsrXSk7XHJcbiAgICAgIGlmICghbi5kKSB7XHJcbiAgICAgICAgaWYgKG4ucykge1xyXG4gICAgICAgICAgZXh0ZXJuYWwgPSB0cnVlO1xyXG4gICAgICAgICAgcmV0dXJuIG5ldyB0aGlzKDEgLyAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdCA9IG47XHJcbiAgICAgIH0gZWxzZSBpZiAodC5kKSB7XHJcbiAgICAgICAgdCA9IHQucGx1cyhuLnRpbWVzKG4pKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGV4dGVybmFsID0gdHJ1ZTtcclxuXHJcbiAgICByZXR1cm4gdC5zcXJ0KCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gdHJ1ZSBpZiBvYmplY3QgaXMgYSBEZWNpbWFsIGluc3RhbmNlICh3aGVyZSBEZWNpbWFsIGlzIGFueSBEZWNpbWFsIGNvbnN0cnVjdG9yKSxcclxuICAgKiBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gaXNEZWNpbWFsSW5zdGFuY2Uob2JqKSB7XHJcbiAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgRGVjaW1hbCB8fCBvYmogJiYgb2JqLm5hbWUgPT09ICdbb2JqZWN0IERlY2ltYWxdJyB8fCBmYWxzZTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBuYXR1cmFsIGxvZ2FyaXRobSBvZiBgeGAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmBcclxuICAgKiBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gbG4oeCkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLmxuKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgbG9nIG9mIGB4YCB0byB0aGUgYmFzZSBgeWAsIG9yIHRvIGJhc2UgMTAgaWYgbm8gYmFzZVxyXG4gICAqIGlzIHNwZWNpZmllZCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYCBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogbG9nW3ldKHgpXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IFRoZSBhcmd1bWVudCBvZiB0aGUgbG9nYXJpdGhtLlxyXG4gICAqIHkge251bWJlcnxzdHJpbmd8RGVjaW1hbH0gVGhlIGJhc2Ugb2YgdGhlIGxvZ2FyaXRobS5cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGxvZyh4LCB5KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkubG9nKHkpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGJhc2UgMiBsb2dhcml0aG0gb2YgYHhgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gXHJcbiAgICogc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGxvZzIoeCkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLmxvZygyKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBiYXNlIDEwIGxvZ2FyaXRobSBvZiBgeGAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmBcclxuICAgKiBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gbG9nMTAoeCkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLmxvZygxMCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgbWF4aW11bSBvZiB0aGUgYXJndW1lbnRzLlxyXG4gICAqXHJcbiAgICogYXJndW1lbnRzIHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBtYXgoKSB7XHJcbiAgICByZXR1cm4gbWF4T3JNaW4odGhpcywgYXJndW1lbnRzLCAnbHQnKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBtaW5pbXVtIG9mIHRoZSBhcmd1bWVudHMuXHJcbiAgICpcclxuICAgKiBhcmd1bWVudHMge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIG1pbigpIHtcclxuICAgIHJldHVybiBtYXhPck1pbih0aGlzLCBhcmd1bWVudHMsICdndCcpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgYHhgIG1vZHVsbyBgeWAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmAgc2lnbmlmaWNhbnQgZGlnaXRzXHJcbiAgICogdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqIHkge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIG1vZCh4LCB5KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkubW9kKHkpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgYHhgIG11bHRpcGxpZWQgYnkgYHlgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gIHNpZ25pZmljYW50XHJcbiAgICogZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKiB5IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBtdWwoeCwgeSkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLm11bCh5KTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIGB4YCByYWlzZWQgdG8gdGhlIHBvd2VyIGB5YCwgcm91bmRlZCB0byBwcmVjaXNpb25cclxuICAgKiBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfSBUaGUgYmFzZS5cclxuICAgKiB5IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IFRoZSBleHBvbmVudC5cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIHBvdyh4LCB5KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkucG93KHkpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJucyBhIG5ldyBEZWNpbWFsIHdpdGggYSByYW5kb20gdmFsdWUgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIDAgYW5kIGxlc3MgdGhhbiAxLCBhbmQgd2l0aFxyXG4gICAqIGBzZGAsIG9yIGBEZWNpbWFsLnByZWNpc2lvbmAgaWYgYHNkYCBpcyBvbWl0dGVkLCBzaWduaWZpY2FudCBkaWdpdHMgKG9yIGxlc3MgaWYgdHJhaWxpbmcgemVyb3NcclxuICAgKiBhcmUgcHJvZHVjZWQpLlxyXG4gICAqXHJcbiAgICogW3NkXSB7bnVtYmVyfSBTaWduaWZpY2FudCBkaWdpdHMuIEludGVnZXIsIDAgdG8gTUFYX0RJR0lUUyBpbmNsdXNpdmUuXHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiByYW5kb20oc2QpIHtcclxuICAgIHZhciBkLCBlLCBrLCBuLFxyXG4gICAgICBpID0gMCxcclxuICAgICAgciA9IG5ldyB0aGlzKDEpLFxyXG4gICAgICByZCA9IFtdO1xyXG5cclxuICAgIGlmIChzZCA9PT0gdm9pZCAwKSBzZCA9IHRoaXMucHJlY2lzaW9uO1xyXG4gICAgZWxzZSBjaGVja0ludDMyKHNkLCAxLCBNQVhfRElHSVRTKTtcclxuXHJcbiAgICBrID0gTWF0aC5jZWlsKHNkIC8gTE9HX0JBU0UpO1xyXG5cclxuICAgIGlmICghdGhpcy5jcnlwdG8pIHtcclxuICAgICAgZm9yICg7IGkgPCBrOykgcmRbaSsrXSA9IE1hdGgucmFuZG9tKCkgKiAxZTcgfCAwO1xyXG5cclxuICAgIC8vIEJyb3dzZXJzIHN1cHBvcnRpbmcgY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5cclxuICAgIH0gZWxzZSBpZiAoY3J5cHRvLmdldFJhbmRvbVZhbHVlcykge1xyXG4gICAgICBkID0gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDMyQXJyYXkoaykpO1xyXG5cclxuICAgICAgZm9yICg7IGkgPCBrOykge1xyXG4gICAgICAgIG4gPSBkW2ldO1xyXG5cclxuICAgICAgICAvLyAwIDw9IG4gPCA0Mjk0OTY3Mjk2XHJcbiAgICAgICAgLy8gUHJvYmFiaWxpdHkgbiA+PSA0LjI5ZTksIGlzIDQ5NjcyOTYgLyA0Mjk0OTY3Mjk2ID0gMC4wMDExNiAoMSBpbiA4NjUpLlxyXG4gICAgICAgIGlmIChuID49IDQuMjllOSkge1xyXG4gICAgICAgICAgZFtpXSA9IGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KDEpKVswXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgIC8vIDAgPD0gbiA8PSA0Mjg5OTk5OTk5XHJcbiAgICAgICAgICAvLyAwIDw9IChuICUgMWU3KSA8PSA5OTk5OTk5XHJcbiAgICAgICAgICByZFtpKytdID0gbiAlIDFlNztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAvLyBOb2RlLmpzIHN1cHBvcnRpbmcgY3J5cHRvLnJhbmRvbUJ5dGVzLlxyXG4gICAgfSBlbHNlIGlmIChjcnlwdG8ucmFuZG9tQnl0ZXMpIHtcclxuXHJcbiAgICAgIC8vIGJ1ZmZlclxyXG4gICAgICBkID0gY3J5cHRvLnJhbmRvbUJ5dGVzKGsgKj0gNCk7XHJcblxyXG4gICAgICBmb3IgKDsgaSA8IGs7KSB7XHJcblxyXG4gICAgICAgIC8vIDAgPD0gbiA8IDIxNDc0ODM2NDhcclxuICAgICAgICBuID0gZFtpXSArIChkW2kgKyAxXSA8PCA4KSArIChkW2kgKyAyXSA8PCAxNikgKyAoKGRbaSArIDNdICYgMHg3ZikgPDwgMjQpO1xyXG5cclxuICAgICAgICAvLyBQcm9iYWJpbGl0eSBuID49IDIuMTRlOSwgaXMgNzQ4MzY0OCAvIDIxNDc0ODM2NDggPSAwLjAwMzUgKDEgaW4gMjg2KS5cclxuICAgICAgICBpZiAobiA+PSAyLjE0ZTkpIHtcclxuICAgICAgICAgIGNyeXB0by5yYW5kb21CeXRlcyg0KS5jb3B5KGQsIGkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgLy8gMCA8PSBuIDw9IDIxMzk5OTk5OTlcclxuICAgICAgICAgIC8vIDAgPD0gKG4gJSAxZTcpIDw9IDk5OTk5OTlcclxuICAgICAgICAgIHJkLnB1c2gobiAlIDFlNyk7XHJcbiAgICAgICAgICBpICs9IDQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpID0gayAvIDQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBFcnJvcihjcnlwdG9VbmF2YWlsYWJsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgayA9IHJkWy0taV07XHJcbiAgICBzZCAlPSBMT0dfQkFTRTtcclxuXHJcbiAgICAvLyBDb252ZXJ0IHRyYWlsaW5nIGRpZ2l0cyB0byB6ZXJvcyBhY2NvcmRpbmcgdG8gc2QuXHJcbiAgICBpZiAoayAmJiBzZCkge1xyXG4gICAgICBuID0gbWF0aHBvdygxMCwgTE9HX0JBU0UgLSBzZCk7XHJcbiAgICAgIHJkW2ldID0gKGsgLyBuIHwgMCkgKiBuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFJlbW92ZSB0cmFpbGluZyB3b3JkcyB3aGljaCBhcmUgemVyby5cclxuICAgIGZvciAoOyByZFtpXSA9PT0gMDsgaS0tKSByZC5wb3AoKTtcclxuXHJcbiAgICAvLyBaZXJvP1xyXG4gICAgaWYgKGkgPCAwKSB7XHJcbiAgICAgIGUgPSAwO1xyXG4gICAgICByZCA9IFswXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGUgPSAtMTtcclxuXHJcbiAgICAgIC8vIFJlbW92ZSBsZWFkaW5nIHdvcmRzIHdoaWNoIGFyZSB6ZXJvIGFuZCBhZGp1c3QgZXhwb25lbnQgYWNjb3JkaW5nbHkuXHJcbiAgICAgIGZvciAoOyByZFswXSA9PT0gMDsgZSAtPSBMT0dfQkFTRSkgcmQuc2hpZnQoKTtcclxuXHJcbiAgICAgIC8vIENvdW50IHRoZSBkaWdpdHMgb2YgdGhlIGZpcnN0IHdvcmQgb2YgcmQgdG8gZGV0ZXJtaW5lIGxlYWRpbmcgemVyb3MuXHJcbiAgICAgIGZvciAoayA9IDEsIG4gPSByZFswXTsgbiA+PSAxMDsgbiAvPSAxMCkgaysrO1xyXG5cclxuICAgICAgLy8gQWRqdXN0IHRoZSBleHBvbmVudCBmb3IgbGVhZGluZyB6ZXJvcyBvZiB0aGUgZmlyc3Qgd29yZCBvZiByZC5cclxuICAgICAgaWYgKGsgPCBMT0dfQkFTRSkgZSAtPSBMT0dfQkFTRSAtIGs7XHJcbiAgICB9XHJcblxyXG4gICAgci5lID0gZTtcclxuICAgIHIuZCA9IHJkO1xyXG5cclxuICAgIHJldHVybiByO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgYHhgIHJvdW5kZWQgdG8gYW4gaW50ZWdlciB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiBUbyBlbXVsYXRlIGBNYXRoLnJvdW5kYCwgc2V0IHJvdW5kaW5nIHRvIDcgKFJPVU5EX0hBTEZfQ0VJTCkuXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiByb3VuZCh4KSB7XHJcbiAgICByZXR1cm4gZmluYWxpc2UoeCA9IG5ldyB0aGlzKHgpLCB4LmUgKyAxLCB0aGlzLnJvdW5kaW5nKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVyblxyXG4gICAqICAgMSAgICBpZiB4ID4gMCxcclxuICAgKiAgLTEgICAgaWYgeCA8IDAsXHJcbiAgICogICAwICAgIGlmIHggaXMgMCxcclxuICAgKiAgLTAgICAgaWYgeCBpcyAtMCxcclxuICAgKiAgIE5hTiAgb3RoZXJ3aXNlXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBzaWduKHgpIHtcclxuICAgIHggPSBuZXcgdGhpcyh4KTtcclxuICAgIHJldHVybiB4LmQgPyAoeC5kWzBdID8geC5zIDogMCAqIHgucykgOiB4LnMgfHwgTmFOO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIHNpbmUgb2YgYHhgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gIHNpZ25pZmljYW50IGRpZ2l0c1xyXG4gICAqIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH0gQSB2YWx1ZSBpbiByYWRpYW5zLlxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gc2luKHgpIHtcclxuICAgIHJldHVybiBuZXcgdGhpcyh4KS5zaW4oKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBoeXBlcmJvbGljIHNpbmUgb2YgYHhgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gXHJcbiAgICogc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH0gQSB2YWx1ZSBpbiByYWRpYW5zLlxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gc2luaCh4KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkuc2luaCgpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIHNxdWFyZSByb290IG9mIGB4YCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYCBzaWduaWZpY2FudFxyXG4gICAqIGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBzcXJ0KHgpIHtcclxuICAgIHJldHVybiBuZXcgdGhpcyh4KS5zcXJ0KCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyBgeGAgbWludXMgYHlgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gIHNpZ25pZmljYW50IGRpZ2l0c1xyXG4gICAqIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKiB5IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBzdWIoeCwgeSkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLnN1Yih5KTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSB0YW5nZW50IG9mIGB4YCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYCBzaWduaWZpY2FudFxyXG4gICAqIGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IEEgdmFsdWUgaW4gcmFkaWFucy5cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIHRhbih4KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkudGFuKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgaHlwZXJib2xpYyB0YW5nZW50IG9mIGB4YCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYFxyXG4gICAqIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IEEgdmFsdWUgaW4gcmFkaWFucy5cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIHRhbmgoeCkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLnRhbmgoKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIGB4YCB0cnVuY2F0ZWQgdG8gYW4gaW50ZWdlci5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIHRydW5jKHgpIHtcclxuICAgIHJldHVybiBmaW5hbGlzZSh4ID0gbmV3IHRoaXMoeCksIHguZSArIDEsIDEpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIENyZWF0ZSBhbmQgY29uZmlndXJlIGluaXRpYWwgRGVjaW1hbCBjb25zdHJ1Y3Rvci5cclxuICBEZWNpbWFsID0gY2xvbmUoREVGQVVMVFMpO1xyXG5cclxuICBEZWNpbWFsWydkZWZhdWx0J10gPSBEZWNpbWFsLkRlY2ltYWwgPSBEZWNpbWFsO1xyXG5cclxuICAvLyBDcmVhdGUgdGhlIGludGVybmFsIGNvbnN0YW50cyBmcm9tIHRoZWlyIHN0cmluZyB2YWx1ZXMuXHJcbiAgTE4xMCA9IG5ldyBEZWNpbWFsKExOMTApO1xyXG4gIFBJID0gbmV3IERlY2ltYWwoUEkpO1xyXG5cclxuXHJcbiAgLy8gRXhwb3J0LlxyXG5cclxuXHJcbiAgLy8gQU1ELlxyXG4gIGlmICh0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xyXG4gICAgZGVmaW5lKGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuIERlY2ltYWw7XHJcbiAgICB9KTtcclxuXHJcbiAgLy8gTm9kZSBhbmQgb3RoZXIgZW52aXJvbm1lbnRzIHRoYXQgc3VwcG9ydCBtb2R1bGUuZXhwb3J0cy5cclxuICB9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgIT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcclxuICAgIGlmICh0eXBlb2YgU3ltYm9sID09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJykge1xyXG4gICAgICBQW1N5bWJvbC5mb3IoJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJyldID0gUC50b1N0cmluZztcclxuICAgICAgUFtTeW1ib2wudG9TdHJpbmdUYWddID0gJ0RlY2ltYWwnO1xyXG4gICAgfVxyXG5cclxuICAgIG1vZHVsZS5leHBvcnRzID0gRGVjaW1hbDtcclxuXHJcbiAgLy8gQnJvd3Nlci5cclxuICB9IGVsc2Uge1xyXG4gICAgaWYgKCFnbG9iYWxTY29wZSkge1xyXG4gICAgICBnbG9iYWxTY29wZSA9IHR5cGVvZiBzZWxmICE9ICd1bmRlZmluZWQnICYmIHNlbGYgJiYgc2VsZi5zZWxmID09IHNlbGYgPyBzZWxmIDogd2luZG93O1xyXG4gICAgfVxyXG5cclxuICAgIG5vQ29uZmxpY3QgPSBnbG9iYWxTY29wZS5EZWNpbWFsO1xyXG4gICAgRGVjaW1hbC5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICBnbG9iYWxTY29wZS5EZWNpbWFsID0gbm9Db25mbGljdDtcclxuICAgICAgcmV0dXJuIERlY2ltYWw7XHJcbiAgICB9O1xyXG5cclxuICAgIGdsb2JhbFNjb3BlLkRlY2ltYWwgPSBEZWNpbWFsO1xyXG4gIH1cclxufSkodGhpcyk7XHJcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vLyBNYXAgdGhlIGNoYXJhY3RlcnMgdG8gZXNjYXBlIHRvIHRoZWlyIGVzY2FwZWQgdmFsdWVzLiBUaGUgbGlzdCBpcyBkZXJpdmVkXG4vLyBmcm9tIGh0dHA6Ly93d3cuY2VzcGVkZXMub3JnL2Jsb2cvODUvaG93LXRvLWVzY2FwZS1sYXRleC1zcGVjaWFsLWNoYXJhY3RlcnNcblxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxudmFyIGRlZmF1bHRFc2NhcGVzID0ge1xuICBcIntcIjogXCJcXFxce1wiLFxuICBcIn1cIjogXCJcXFxcfVwiLFxuICBcIlxcXFxcIjogXCJcXFxcdGV4dGJhY2tzbGFzaHt9XCIsXG4gIFwiI1wiOiBcIlxcXFwjXCIsXG4gICQ6IFwiXFxcXCRcIixcbiAgXCIlXCI6IFwiXFxcXCVcIixcbiAgXCImXCI6IFwiXFxcXCZcIixcbiAgXCJeXCI6IFwiXFxcXHRleHRhc2NpaWNpcmN1bXt9XCIsXG4gIF86IFwiXFxcXF9cIixcbiAgXCJ+XCI6IFwiXFxcXHRleHRhc2NpaXRpbGRle31cIlxufTtcbnZhciBmb3JtYXRFc2NhcGVzID0ge1xuICBcIlxcdTIwMTNcIjogXCJcXFxcLS1cIixcbiAgXCJcXHUyMDE0XCI6IFwiXFxcXC0tLVwiLFxuICBcIiBcIjogXCJ+XCIsXG4gIFwiXFx0XCI6IFwiXFxcXHFxdWFke31cIixcbiAgXCJcXHJcXG5cIjogXCJcXFxcbmV3bGluZXt9XCIsXG4gIFwiXFxuXCI6IFwiXFxcXG5ld2xpbmV7fVwiXG59O1xuXG52YXIgZGVmYXVsdEVzY2FwZU1hcEZuID0gZnVuY3Rpb24gZGVmYXVsdEVzY2FwZU1hcEZuKGRlZmF1bHRFc2NhcGVzLCBmb3JtYXRFc2NhcGVzKSB7XG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgZGVmYXVsdEVzY2FwZXMsIGZvcm1hdEVzY2FwZXMpO1xufTtcblxuLyoqXG4gKiBFc2NhcGUgYSBzdHJpbmcgdG8gYmUgdXNlZCBpbiBMYVRlWCBkb2N1bWVudHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIHRoZSBzdHJpbmcgdG8gYmUgZXNjYXBlZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gcGFyYW1zLnByZXNlcnZlRm9ybWF0dGluZyB3aGV0aGVyIGZvcm1hdHRpbmcgZXNjYXBlcyBzaG91bGRcbiAqICBiZSBwZXJmb3JtZWQgKGRlZmF1bHQ6IGZhbHNlKS5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHBhcmFtcy5lc2NhcGVNYXBGbiB0aGUgZnVuY3Rpb24gdG8gbW9kaWZ5IHRoZSBlc2NhcGUgbWFwcy5cbiAqIEByZXR1cm4ge3N0cmluZ30gdGhlIGVzY2FwZWQgc3RyaW5nLCByZWFkeSB0byBiZSB1c2VkIGluIExhVGVYLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgdmFyIF9yZWYgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgICAgX3JlZiRwcmVzZXJ2ZUZvcm1hdHRpID0gX3JlZi5wcmVzZXJ2ZUZvcm1hdHRpbmcsXG4gICAgICBwcmVzZXJ2ZUZvcm1hdHRpbmcgPSBfcmVmJHByZXNlcnZlRm9ybWF0dGkgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogX3JlZiRwcmVzZXJ2ZUZvcm1hdHRpLFxuICAgICAgX3JlZiRlc2NhcGVNYXBGbiA9IF9yZWYuZXNjYXBlTWFwRm4sXG4gICAgICBlc2NhcGVNYXBGbiA9IF9yZWYkZXNjYXBlTWFwRm4gPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRFc2NhcGVNYXBGbiA6IF9yZWYkZXNjYXBlTWFwRm47XG5cbiAgdmFyIHJ1bm5pbmdTdHIgPSBTdHJpbmcoc3RyKTtcbiAgdmFyIHJlc3VsdCA9IFwiXCI7XG5cbiAgdmFyIGVzY2FwZXMgPSBlc2NhcGVNYXBGbihfZXh0ZW5kcyh7fSwgZGVmYXVsdEVzY2FwZXMpLCBwcmVzZXJ2ZUZvcm1hdHRpbmcgPyBfZXh0ZW5kcyh7fSwgZm9ybWF0RXNjYXBlcykgOiB7fSk7XG4gIHZhciBlc2NhcGVLZXlzID0gT2JqZWN0LmtleXMoZXNjYXBlcyk7IC8vIGFzIGl0IGlzIHJldXNlZCBsYXRlciBvblxuXG4gIC8vIEFsZ29yaXRobTogR28gdGhyb3VnaCB0aGUgc3RyaW5nIGNoYXJhY3RlciBieSBjaGFyYWN0ZXIsIGlmIGl0IG1hdGNoZXNcbiAgLy8gd2l0aCBvbmUgb2YgdGhlIHNwZWNpYWwgY2hhcmFjdGVycyB0aGVuIHdlJ2xsIHJlcGxhY2UgaXQgd2l0aCB0aGUgZXNjYXBlZFxuICAvLyB2ZXJzaW9uLlxuXG4gIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKCkge1xuICAgIHZhciBzcGVjaWFsQ2hhckZvdW5kID0gZmFsc2U7XG4gICAgZXNjYXBlS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXksIGluZGV4KSB7XG4gICAgICBpZiAoc3BlY2lhbENoYXJGb3VuZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAocnVubmluZ1N0ci5sZW5ndGggPj0ga2V5Lmxlbmd0aCAmJiBydW5uaW5nU3RyLnNsaWNlKDAsIGtleS5sZW5ndGgpID09PSBrZXkpIHtcbiAgICAgICAgcmVzdWx0ICs9IGVzY2FwZXNbZXNjYXBlS2V5c1tpbmRleF1dO1xuICAgICAgICBydW5uaW5nU3RyID0gcnVubmluZ1N0ci5zbGljZShrZXkubGVuZ3RoLCBydW5uaW5nU3RyLmxlbmd0aCk7XG4gICAgICAgIHNwZWNpYWxDaGFyRm91bmQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghc3BlY2lhbENoYXJGb3VuZCkge1xuICAgICAgcmVzdWx0ICs9IHJ1bm5pbmdTdHIuc2xpY2UoMCwgMSk7XG4gICAgICBydW5uaW5nU3RyID0gcnVubmluZ1N0ci5zbGljZSgxLCBydW5uaW5nU3RyLmxlbmd0aCk7XG4gICAgfVxuICB9O1xuXG4gIHdoaWxlIChydW5uaW5nU3RyKSB7XG4gICAgX2xvb3AoKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTsiLCIvKipcbiAqIEBsaWNlbnNlIEZyYWN0aW9uLmpzIHY0LjAuMTIgMDkvMDkvMjAxNVxuICogaHR0cDovL3d3dy54YXJnLm9yZy8yMDE0LzAzL3JhdGlvbmFsLW51bWJlcnMtaW4tamF2YXNjcmlwdC9cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUsIFJvYmVydCBFaXNlbGUgKHJvYmVydEB4YXJnLm9yZylcbiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBvciBHUEwgVmVyc2lvbiAyIGxpY2Vuc2VzLlxuICoqL1xuXG5cbi8qKlxuICpcbiAqIFRoaXMgY2xhc3Mgb2ZmZXJzIHRoZSBwb3NzaWJpbGl0eSB0byBjYWxjdWxhdGUgZnJhY3Rpb25zLlxuICogWW91IGNhbiBwYXNzIGEgZnJhY3Rpb24gaW4gZGlmZmVyZW50IGZvcm1hdHMuIEVpdGhlciBhcyBhcnJheSwgYXMgZG91YmxlLCBhcyBzdHJpbmcgb3IgYXMgYW4gaW50ZWdlci5cbiAqXG4gKiBBcnJheS9PYmplY3QgZm9ybVxuICogWyAwID0+IDxub21pbmF0b3I+LCAxID0+IDxkZW5vbWluYXRvcj4gXVxuICogWyBuID0+IDxub21pbmF0b3I+LCBkID0+IDxkZW5vbWluYXRvcj4gXVxuICpcbiAqIEludGVnZXIgZm9ybVxuICogLSBTaW5nbGUgaW50ZWdlciB2YWx1ZVxuICpcbiAqIERvdWJsZSBmb3JtXG4gKiAtIFNpbmdsZSBkb3VibGUgdmFsdWVcbiAqXG4gKiBTdHJpbmcgZm9ybVxuICogMTIzLjQ1NiAtIGEgc2ltcGxlIGRvdWJsZVxuICogMTIzLzQ1NiAtIGEgc3RyaW5nIGZyYWN0aW9uXG4gKiAxMjMuJzQ1NicgLSBhIGRvdWJsZSB3aXRoIHJlcGVhdGluZyBkZWNpbWFsIHBsYWNlc1xuICogMTIzLig0NTYpIC0gc3lub255bVxuICogMTIzLjQ1JzYnIC0gYSBkb3VibGUgd2l0aCByZXBlYXRpbmcgbGFzdCBwbGFjZVxuICogMTIzLjQ1KDYpIC0gc3lub255bVxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogdmFyIGYgPSBuZXcgRnJhY3Rpb24oXCI5LjQnMzEnXCIpO1xuICogZi5tdWwoWy00LCAzXSkuZGl2KDQuOSk7XG4gKlxuICovXG5cbihmdW5jdGlvbihyb290KSB7XG5cbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgLy8gTWF4aW11bSBzZWFyY2ggZGVwdGggZm9yIGN5Y2xpYyByYXRpb25hbCBudW1iZXJzLiAyMDAwIHNob3VsZCBiZSBtb3JlIHRoYW4gZW5vdWdoLlxuICAvLyBFeGFtcGxlOiAxLzcgPSAwLigxNDI4NTcpIGhhcyA2IHJlcGVhdGluZyBkZWNpbWFsIHBsYWNlcy5cbiAgLy8gSWYgTUFYX0NZQ0xFX0xFTiBnZXRzIHJlZHVjZWQsIGxvbmcgY3ljbGVzIHdpbGwgbm90IGJlIGRldGVjdGVkIGFuZCB0b1N0cmluZygpIG9ubHkgZ2V0cyB0aGUgZmlyc3QgMTAgZGlnaXRzXG4gIHZhciBNQVhfQ1lDTEVfTEVOID0gMjAwMDtcblxuICAvLyBQYXJzZWQgZGF0YSB0byBhdm9pZCBjYWxsaW5nIFwibmV3XCIgYWxsIHRoZSB0aW1lXG4gIHZhciBQID0ge1xuICAgIFwic1wiOiAxLFxuICAgIFwiblwiOiAwLFxuICAgIFwiZFwiOiAxXG4gIH07XG5cbiAgZnVuY3Rpb24gY3JlYXRlRXJyb3IobmFtZSkge1xuXG4gICAgZnVuY3Rpb24gZXJyb3JDb25zdHJ1Y3RvcigpIHtcbiAgICAgIHZhciB0ZW1wID0gRXJyb3IuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIHRlbXBbJ25hbWUnXSA9IHRoaXNbJ25hbWUnXSA9IG5hbWU7XG4gICAgICB0aGlzWydzdGFjayddID0gdGVtcFsnc3RhY2snXTtcbiAgICAgIHRoaXNbJ21lc3NhZ2UnXSA9IHRlbXBbJ21lc3NhZ2UnXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFcnJvciBjb25zdHJ1Y3RvclxuICAgICAqXG4gICAgICogQGNvbnN0cnVjdG9yXG4gICAgICovXG4gICAgZnVuY3Rpb24gSW50ZXJtZWRpYXRlSW5oZXJpdG9yKCkge31cbiAgICBJbnRlcm1lZGlhdGVJbmhlcml0b3IucHJvdG90eXBlID0gRXJyb3IucHJvdG90eXBlO1xuICAgIGVycm9yQ29uc3RydWN0b3IucHJvdG90eXBlID0gbmV3IEludGVybWVkaWF0ZUluaGVyaXRvcigpO1xuXG4gICAgcmV0dXJuIGVycm9yQ29uc3RydWN0b3I7XG4gIH1cblxuICB2YXIgRGl2aXNpb25CeVplcm8gPSBGcmFjdGlvblsnRGl2aXNpb25CeVplcm8nXSA9IGNyZWF0ZUVycm9yKCdEaXZpc2lvbkJ5WmVybycpO1xuICB2YXIgSW52YWxpZFBhcmFtZXRlciA9IEZyYWN0aW9uWydJbnZhbGlkUGFyYW1ldGVyJ10gPSBjcmVhdGVFcnJvcignSW52YWxpZFBhcmFtZXRlcicpO1xuXG4gIGZ1bmN0aW9uIGFzc2lnbihuLCBzKSB7XG5cbiAgICBpZiAoaXNOYU4obiA9IHBhcnNlSW50KG4sIDEwKSkpIHtcbiAgICAgIHRocm93SW52YWxpZFBhcmFtKCk7XG4gICAgfVxuICAgIHJldHVybiBuICogcztcbiAgfVxuXG4gIGZ1bmN0aW9uIHRocm93SW52YWxpZFBhcmFtKCkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkUGFyYW1ldGVyKCk7XG4gIH1cblxuICB2YXIgcGFyc2UgPSBmdW5jdGlvbihwMSwgcDIpIHtcblxuICAgIHZhciBuID0gMCwgZCA9IDEsIHMgPSAxO1xuICAgIHZhciB2ID0gMCwgdyA9IDAsIHggPSAwLCB5ID0gMSwgeiA9IDE7XG5cbiAgICB2YXIgQSA9IDAsIEIgPSAxO1xuICAgIHZhciBDID0gMSwgRCA9IDE7XG5cbiAgICB2YXIgTiA9IDEwMDAwMDAwO1xuICAgIHZhciBNO1xuXG4gICAgaWYgKHAxID09PSB1bmRlZmluZWQgfHwgcDEgPT09IG51bGwpIHtcbiAgICAgIC8qIHZvaWQgKi9cbiAgICB9IGVsc2UgaWYgKHAyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG4gPSBwMTtcbiAgICAgIGQgPSBwMjtcbiAgICAgIHMgPSBuICogZDtcbiAgICB9IGVsc2VcbiAgICAgIHN3aXRjaCAodHlwZW9mIHAxKSB7XG5cbiAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKFwiZFwiIGluIHAxICYmIFwiblwiIGluIHAxKSB7XG4gICAgICAgICAgICBuID0gcDFbXCJuXCJdO1xuICAgICAgICAgICAgZCA9IHAxW1wiZFwiXTtcbiAgICAgICAgICAgIGlmIChcInNcIiBpbiBwMSlcbiAgICAgICAgICAgICAgbiAqPSBwMVtcInNcIl07XG4gICAgICAgICAgfSBlbHNlIGlmICgwIGluIHAxKSB7XG4gICAgICAgICAgICBuID0gcDFbMF07XG4gICAgICAgICAgICBpZiAoMSBpbiBwMSlcbiAgICAgICAgICAgICAgZCA9IHAxWzFdO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvd0ludmFsaWRQYXJhbSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzID0gbiAqIGQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKHAxIDwgMCkge1xuICAgICAgICAgICAgcyA9IHAxO1xuICAgICAgICAgICAgcDEgPSAtcDE7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHAxICUgMSA9PT0gMCkge1xuICAgICAgICAgICAgbiA9IHAxO1xuICAgICAgICAgIH0gZWxzZSBpZiAocDEgPiAwKSB7IC8vIGNoZWNrIGZvciAhPSAwLCBzY2FsZSB3b3VsZCBiZWNvbWUgTmFOIChsb2coMCkpLCB3aGljaCBjb252ZXJnZXMgcmVhbGx5IHNsb3dcblxuICAgICAgICAgICAgaWYgKHAxID49IDEpIHtcbiAgICAgICAgICAgICAgeiA9IE1hdGgucG93KDEwLCBNYXRoLmZsb29yKDEgKyBNYXRoLmxvZyhwMSkgLyBNYXRoLkxOMTApKTtcbiAgICAgICAgICAgICAgcDEgLz0gejtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gVXNpbmcgRmFyZXkgU2VxdWVuY2VzXG4gICAgICAgICAgICAvLyBodHRwOi8vd3d3LmpvaG5kY29vay5jb20vYmxvZy8yMDEwLzEwLzIwL2Jlc3QtcmF0aW9uYWwtYXBwcm94aW1hdGlvbi9cblxuICAgICAgICAgICAgd2hpbGUgKEIgPD0gTiAmJiBEIDw9IE4pIHtcbiAgICAgICAgICAgICAgTSA9IChBICsgQykgLyAoQiArIEQpO1xuXG4gICAgICAgICAgICAgIGlmIChwMSA9PT0gTSkge1xuICAgICAgICAgICAgICAgIGlmIChCICsgRCA8PSBOKSB7XG4gICAgICAgICAgICAgICAgICBuID0gQSArIEM7XG4gICAgICAgICAgICAgICAgICBkID0gQiArIEQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChEID4gQikge1xuICAgICAgICAgICAgICAgICAgbiA9IEM7XG4gICAgICAgICAgICAgICAgICBkID0gRDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgbiA9IEE7XG4gICAgICAgICAgICAgICAgICBkID0gQjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICAgIGlmIChwMSA+IE0pIHtcbiAgICAgICAgICAgICAgICAgIEEgKz0gQztcbiAgICAgICAgICAgICAgICAgIEIgKz0gRDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgQyArPSBBO1xuICAgICAgICAgICAgICAgICAgRCArPSBCO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChCID4gTikge1xuICAgICAgICAgICAgICAgICAgbiA9IEM7XG4gICAgICAgICAgICAgICAgICBkID0gRDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgbiA9IEE7XG4gICAgICAgICAgICAgICAgICBkID0gQjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG4gKj0gejtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzTmFOKHAxKSB8fCBpc05hTihwMikpIHtcbiAgICAgICAgICAgIGQgPSBuID0gTmFOO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgIHtcbiAgICAgICAgICBCID0gcDEubWF0Y2goL1xcZCt8Li9nKTtcblxuICAgICAgICAgIGlmIChCID09PSBudWxsKVxuICAgICAgICAgICAgdGhyb3dJbnZhbGlkUGFyYW0oKTtcblxuICAgICAgICAgIGlmIChCW0FdID09PSAnLScpIHsvLyBDaGVjayBmb3IgbWludXMgc2lnbiBhdCB0aGUgYmVnaW5uaW5nXG4gICAgICAgICAgICBzID0gLTE7XG4gICAgICAgICAgICBBKys7XG4gICAgICAgICAgfSBlbHNlIGlmIChCW0FdID09PSAnKycpIHsvLyBDaGVjayBmb3IgcGx1cyBzaWduIGF0IHRoZSBiZWdpbm5pbmdcbiAgICAgICAgICAgIEErKztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoQi5sZW5ndGggPT09IEEgKyAxKSB7IC8vIENoZWNrIGlmIGl0J3MganVzdCBhIHNpbXBsZSBudW1iZXIgXCIxMjM0XCJcbiAgICAgICAgICAgIHcgPSBhc3NpZ24oQltBKytdLCBzKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKEJbQSArIDFdID09PSAnLicgfHwgQltBXSA9PT0gJy4nKSB7IC8vIENoZWNrIGlmIGl0J3MgYSBkZWNpbWFsIG51bWJlclxuXG4gICAgICAgICAgICBpZiAoQltBXSAhPT0gJy4nKSB7IC8vIEhhbmRsZSAwLjUgYW5kIC41XG4gICAgICAgICAgICAgIHYgPSBhc3NpZ24oQltBKytdLCBzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEErKztcblxuICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGRlY2ltYWwgcGxhY2VzXG4gICAgICAgICAgICBpZiAoQSArIDEgPT09IEIubGVuZ3RoIHx8IEJbQSArIDFdID09PSAnKCcgJiYgQltBICsgM10gPT09ICcpJyB8fCBCW0EgKyAxXSA9PT0gXCInXCIgJiYgQltBICsgM10gPT09IFwiJ1wiKSB7XG4gICAgICAgICAgICAgIHcgPSBhc3NpZ24oQltBXSwgcyk7XG4gICAgICAgICAgICAgIHkgPSBNYXRoLnBvdygxMCwgQltBXS5sZW5ndGgpO1xuICAgICAgICAgICAgICBBKys7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIENoZWNrIGZvciByZXBlYXRpbmcgcGxhY2VzXG4gICAgICAgICAgICBpZiAoQltBXSA9PT0gJygnICYmIEJbQSArIDJdID09PSAnKScgfHwgQltBXSA9PT0gXCInXCIgJiYgQltBICsgMl0gPT09IFwiJ1wiKSB7XG4gICAgICAgICAgICAgIHggPSBhc3NpZ24oQltBICsgMV0sIHMpO1xuICAgICAgICAgICAgICB6ID0gTWF0aC5wb3coMTAsIEJbQSArIDFdLmxlbmd0aCkgLSAxO1xuICAgICAgICAgICAgICBBICs9IDM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKEJbQSArIDFdID09PSAnLycgfHwgQltBICsgMV0gPT09ICc6JykgeyAvLyBDaGVjayBmb3IgYSBzaW1wbGUgZnJhY3Rpb24gXCIxMjMvNDU2XCIgb3IgXCIxMjM6NDU2XCJcbiAgICAgICAgICAgIHcgPSBhc3NpZ24oQltBXSwgcyk7XG4gICAgICAgICAgICB5ID0gYXNzaWduKEJbQSArIDJdLCAxKTtcbiAgICAgICAgICAgIEEgKz0gMztcbiAgICAgICAgICB9IGVsc2UgaWYgKEJbQSArIDNdID09PSAnLycgJiYgQltBICsgMV0gPT09ICcgJykgeyAvLyBDaGVjayBmb3IgYSBjb21wbGV4IGZyYWN0aW9uIFwiMTIzIDEvMlwiXG4gICAgICAgICAgICB2ID0gYXNzaWduKEJbQV0sIHMpO1xuICAgICAgICAgICAgdyA9IGFzc2lnbihCW0EgKyAyXSwgcyk7XG4gICAgICAgICAgICB5ID0gYXNzaWduKEJbQSArIDRdLCAxKTtcbiAgICAgICAgICAgIEEgKz0gNTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoQi5sZW5ndGggPD0gQSkgeyAvLyBDaGVjayBmb3IgbW9yZSB0b2tlbnMgb24gdGhlIHN0YWNrXG4gICAgICAgICAgICBkID0geSAqIHo7XG4gICAgICAgICAgICBzID0gLyogdm9pZCAqL1xuICAgICAgICAgICAgICAgICAgICBuID0geCArIGQgKiB2ICsgeiAqIHc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvKiBGYWxsIHRocm91Z2ggb24gZXJyb3IgKi9cbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93SW52YWxpZFBhcmFtKCk7XG4gICAgICB9XG5cbiAgICBpZiAoZCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IERpdmlzaW9uQnlaZXJvKCk7XG4gICAgfVxuXG4gICAgUFtcInNcIl0gPSBzIDwgMCA/IC0xIDogMTtcbiAgICBQW1wiblwiXSA9IE1hdGguYWJzKG4pO1xuICAgIFBbXCJkXCJdID0gTWF0aC5hYnMoZCk7XG4gIH07XG5cbiAgZnVuY3Rpb24gbW9kcG93KGIsIGUsIG0pIHtcblxuICAgIHZhciByID0gMTtcbiAgICBmb3IgKDsgZSA+IDA7IGIgPSAoYiAqIGIpICUgbSwgZSA+Pj0gMSkge1xuXG4gICAgICBpZiAoZSAmIDEpIHtcbiAgICAgICAgciA9IChyICogYikgJSBtO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcjtcbiAgfVxuXG5cbiAgZnVuY3Rpb24gY3ljbGVMZW4obiwgZCkge1xuXG4gICAgZm9yICg7IGQgJSAyID09PSAwO1xuICAgICAgICAgICAgZCAvPSAyKSB7XG4gICAgfVxuXG4gICAgZm9yICg7IGQgJSA1ID09PSAwO1xuICAgICAgICAgICAgZCAvPSA1KSB7XG4gICAgfVxuXG4gICAgaWYgKGQgPT09IDEpIC8vIENhdGNoIG5vbi1jeWNsaWMgbnVtYmVyc1xuICAgICAgcmV0dXJuIDA7XG5cbiAgICAvLyBJZiB3ZSB3b3VsZCBsaWtlIHRvIGNvbXB1dGUgcmVhbGx5IGxhcmdlIG51bWJlcnMgcXVpY2tlciwgd2UgY291bGQgbWFrZSB1c2Ugb2YgRmVybWF0J3MgbGl0dGxlIHRoZW9yZW06XG4gICAgLy8gMTBeKGQtMSkgJSBkID09IDFcbiAgICAvLyBIb3dldmVyLCB3ZSBkb24ndCBuZWVkIHN1Y2ggbGFyZ2UgbnVtYmVycyBhbmQgTUFYX0NZQ0xFX0xFTiBzaG91bGQgYmUgdGhlIGNhcHN0b25lLFxuICAgIC8vIGFzIHdlIHdhbnQgdG8gdHJhbnNsYXRlIHRoZSBudW1iZXJzIHRvIHN0cmluZ3MuXG5cbiAgICB2YXIgcmVtID0gMTAgJSBkO1xuICAgIHZhciB0ID0gMTtcblxuICAgIGZvciAoOyByZW0gIT09IDE7IHQrKykge1xuICAgICAgcmVtID0gcmVtICogMTAgJSBkO1xuXG4gICAgICBpZiAodCA+IE1BWF9DWUNMRV9MRU4pXG4gICAgICAgIHJldHVybiAwOyAvLyBSZXR1cm5pbmcgMCBoZXJlIG1lYW5zIHRoYXQgd2UgZG9uJ3QgcHJpbnQgaXQgYXMgYSBjeWNsaWMgbnVtYmVyLiBJdCdzIGxpa2VseSB0aGF0IHRoZSBhbnN3ZXIgaXMgYGQtMWBcbiAgICB9XG4gICAgcmV0dXJuIHQ7XG4gIH1cblxuXG4gICAgIGZ1bmN0aW9uIGN5Y2xlU3RhcnQobiwgZCwgbGVuKSB7XG5cbiAgICB2YXIgcmVtMSA9IDE7XG4gICAgdmFyIHJlbTIgPSBtb2Rwb3coMTAsIGxlbiwgZCk7XG5cbiAgICBmb3IgKHZhciB0ID0gMDsgdCA8IDMwMDsgdCsrKSB7IC8vIHMgPCB+bG9nMTAoTnVtYmVyLk1BWF9WQUxVRSlcbiAgICAgIC8vIFNvbHZlIDEwXnMgPT0gMTBeKHMrdCkgKG1vZCBkKVxuXG4gICAgICBpZiAocmVtMSA9PT0gcmVtMilcbiAgICAgICAgcmV0dXJuIHQ7XG5cbiAgICAgIHJlbTEgPSByZW0xICogMTAgJSBkO1xuICAgICAgcmVtMiA9IHJlbTIgKiAxMCAlIGQ7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2NkKGEsIGIpIHtcblxuICAgIGlmICghYSlcbiAgICAgIHJldHVybiBiO1xuICAgIGlmICghYilcbiAgICAgIHJldHVybiBhO1xuXG4gICAgd2hpbGUgKDEpIHtcbiAgICAgIGEgJT0gYjtcbiAgICAgIGlmICghYSlcbiAgICAgICAgcmV0dXJuIGI7XG4gICAgICBiICU9IGE7XG4gICAgICBpZiAoIWIpXG4gICAgICAgIHJldHVybiBhO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogTW9kdWxlIGNvbnN0cnVjdG9yXG4gICAqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge251bWJlcnxGcmFjdGlvbj19IGFcbiAgICogQHBhcmFtIHtudW1iZXI9fSBiXG4gICAqL1xuICBmdW5jdGlvbiBGcmFjdGlvbihhLCBiKSB7XG5cbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRnJhY3Rpb24pKSB7XG4gICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKGEsIGIpO1xuICAgIH1cblxuICAgIHBhcnNlKGEsIGIpO1xuXG4gICAgaWYgKEZyYWN0aW9uWydSRURVQ0UnXSkge1xuICAgICAgYSA9IGdjZChQW1wiZFwiXSwgUFtcIm5cIl0pOyAvLyBBYnVzZSBhXG4gICAgfSBlbHNlIHtcbiAgICAgIGEgPSAxO1xuICAgIH1cblxuICAgIHRoaXNbXCJzXCJdID0gUFtcInNcIl07XG4gICAgdGhpc1tcIm5cIl0gPSBQW1wiblwiXSAvIGE7XG4gICAgdGhpc1tcImRcIl0gPSBQW1wiZFwiXSAvIGE7XG4gIH1cblxuICAvKipcbiAgICogQm9vbGVhbiBnbG9iYWwgdmFyaWFibGUgdG8gYmUgYWJsZSB0byBkaXNhYmxlIGF1dG9tYXRpYyByZWR1Y3Rpb24gb2YgdGhlIGZyYWN0aW9uXG4gICAqXG4gICAqL1xuICBGcmFjdGlvblsnUkVEVUNFJ10gPSAxO1xuXG4gIEZyYWN0aW9uLnByb3RvdHlwZSA9IHtcblxuICAgIFwic1wiOiAxLFxuICAgIFwiblwiOiAwLFxuICAgIFwiZFwiOiAxLFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgYWJzb2x1dGUgdmFsdWVcbiAgICAgKlxuICAgICAqIEV4OiBuZXcgRnJhY3Rpb24oLTQpLmFicygpID0+IDRcbiAgICAgKiovXG4gICAgXCJhYnNcIjogZnVuY3Rpb24oKSB7XG5cbiAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24odGhpc1tcIm5cIl0sIHRoaXNbXCJkXCJdKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSW52ZXJ0cyB0aGUgc2lnbiBvZiB0aGUgY3VycmVudCBmcmFjdGlvblxuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbigtNCkubmVnKCkgPT4gNFxuICAgICAqKi9cbiAgICBcIm5lZ1wiOiBmdW5jdGlvbigpIHtcblxuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbigtdGhpc1tcInNcIl0gKiB0aGlzW1wiblwiXSwgdGhpc1tcImRcIl0pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBBZGRzIHR3byByYXRpb25hbCBudW1iZXJzXG4gICAgICpcbiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKHtuOiAyLCBkOiAzfSkuYWRkKFwiMTQuOVwiKSA9PiA0NjcgLyAzMFxuICAgICAqKi9cbiAgICBcImFkZFwiOiBmdW5jdGlvbihhLCBiKSB7XG5cbiAgICAgIHBhcnNlKGEsIGIpO1xuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbihcbiAgICAgICAgICAgICAgdGhpc1tcInNcIl0gKiB0aGlzW1wiblwiXSAqIFBbXCJkXCJdICsgUFtcInNcIl0gKiB0aGlzW1wiZFwiXSAqIFBbXCJuXCJdLFxuICAgICAgICAgICAgICB0aGlzW1wiZFwiXSAqIFBbXCJkXCJdXG4gICAgICAgICAgICAgICk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFN1YnRyYWN0cyB0d28gcmF0aW9uYWwgbnVtYmVyc1xuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbih7bjogMiwgZDogM30pLmFkZChcIjE0LjlcIikgPT4gLTQyNyAvIDMwXG4gICAgICoqL1xuICAgIFwic3ViXCI6IGZ1bmN0aW9uKGEsIGIpIHtcblxuICAgICAgcGFyc2UoYSwgYik7XG4gICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKFxuICAgICAgICAgICAgICB0aGlzW1wic1wiXSAqIHRoaXNbXCJuXCJdICogUFtcImRcIl0gLSBQW1wic1wiXSAqIHRoaXNbXCJkXCJdICogUFtcIm5cIl0sXG4gICAgICAgICAgICAgIHRoaXNbXCJkXCJdICogUFtcImRcIl1cbiAgICAgICAgICAgICAgKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTXVsdGlwbGllcyB0d28gcmF0aW9uYWwgbnVtYmVyc1xuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbihcIi0xNy4oMzQ1KVwiKS5tdWwoMykgPT4gNTc3NiAvIDExMVxuICAgICAqKi9cbiAgICBcIm11bFwiOiBmdW5jdGlvbihhLCBiKSB7XG5cbiAgICAgIHBhcnNlKGEsIGIpO1xuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbihcbiAgICAgICAgICAgICAgdGhpc1tcInNcIl0gKiBQW1wic1wiXSAqIHRoaXNbXCJuXCJdICogUFtcIm5cIl0sXG4gICAgICAgICAgICAgIHRoaXNbXCJkXCJdICogUFtcImRcIl1cbiAgICAgICAgICAgICAgKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRGl2aWRlcyB0d28gcmF0aW9uYWwgbnVtYmVyc1xuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbihcIi0xNy4oMzQ1KVwiKS5pbnZlcnNlKCkuZGl2KDMpXG4gICAgICoqL1xuICAgIFwiZGl2XCI6IGZ1bmN0aW9uKGEsIGIpIHtcblxuICAgICAgcGFyc2UoYSwgYik7XG4gICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKFxuICAgICAgICAgICAgICB0aGlzW1wic1wiXSAqIFBbXCJzXCJdICogdGhpc1tcIm5cIl0gKiBQW1wiZFwiXSxcbiAgICAgICAgICAgICAgdGhpc1tcImRcIl0gKiBQW1wiblwiXVxuICAgICAgICAgICAgICApO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDbG9uZXMgdGhlIGFjdHVhbCBvYmplY3RcbiAgICAgKlxuICAgICAqIEV4OiBuZXcgRnJhY3Rpb24oXCItMTcuKDM0NSlcIikuY2xvbmUoKVxuICAgICAqKi9cbiAgICBcImNsb25lXCI6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbih0aGlzKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgbW9kdWxvIG9mIHR3byByYXRpb25hbCBudW1iZXJzIC0gYSBtb3JlIHByZWNpc2UgZm1vZFxuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbignNC4oMyknKS5tb2QoWzcsIDhdKSA9PiAoMTMvMykgJSAoNy84KSA9ICg1LzYpXG4gICAgICoqL1xuICAgIFwibW9kXCI6IGZ1bmN0aW9uKGEsIGIpIHtcblxuICAgICAgaWYgKGlzTmFOKHRoaXNbJ24nXSkgfHwgaXNOYU4odGhpc1snZCddKSkge1xuICAgICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKE5hTik7XG4gICAgICB9XG5cbiAgICAgIGlmIChhID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbih0aGlzW1wic1wiXSAqIHRoaXNbXCJuXCJdICUgdGhpc1tcImRcIl0sIDEpO1xuICAgICAgfVxuXG4gICAgICBwYXJzZShhLCBiKTtcbiAgICAgIGlmICgwID09PSBQW1wiblwiXSAmJiAwID09PSB0aGlzW1wiZFwiXSkge1xuICAgICAgICBGcmFjdGlvbigwLCAwKTsgLy8gVGhyb3cgRGl2aXNpb25CeVplcm9cbiAgICAgIH1cblxuICAgICAgLypcbiAgICAgICAqIEZpcnN0IHNpbGx5IGF0dGVtcHQsIGtpbmRhIHNsb3dcbiAgICAgICAqXG4gICAgICAgcmV0dXJuIHRoYXRbXCJzdWJcIl0oe1xuICAgICAgIFwiblwiOiBudW1bXCJuXCJdICogTWF0aC5mbG9vcigodGhpcy5uIC8gdGhpcy5kKSAvIChudW0ubiAvIG51bS5kKSksXG4gICAgICAgXCJkXCI6IG51bVtcImRcIl0sXG4gICAgICAgXCJzXCI6IHRoaXNbXCJzXCJdXG4gICAgICAgfSk7Ki9cblxuICAgICAgLypcbiAgICAgICAqIE5ldyBhdHRlbXB0OiBhMSAvIGIxID0gYTIgLyBiMiAqIHEgKyByXG4gICAgICAgKiA9PiBiMiAqIGExID0gYTIgKiBiMSAqIHEgKyBiMSAqIGIyICogclxuICAgICAgICogPT4gKGIyICogYTEgJSBhMiAqIGIxKSAvIChiMSAqIGIyKVxuICAgICAgICovXG4gICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKFxuICAgICAgICAgICAgICB0aGlzW1wic1wiXSAqIChQW1wiZFwiXSAqIHRoaXNbXCJuXCJdKSAlIChQW1wiblwiXSAqIHRoaXNbXCJkXCJdKSxcbiAgICAgICAgICAgICAgUFtcImRcIl0gKiB0aGlzW1wiZFwiXVxuICAgICAgICAgICAgICApO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBmcmFjdGlvbmFsIGdjZCBvZiB0d28gcmF0aW9uYWwgbnVtYmVyc1xuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbig1LDgpLmdjZCgzLDcpID0+IDEvNTZcbiAgICAgKi9cbiAgICBcImdjZFwiOiBmdW5jdGlvbihhLCBiKSB7XG5cbiAgICAgIHBhcnNlKGEsIGIpO1xuXG4gICAgICAvLyBnY2QoYSAvIGIsIGMgLyBkKSA9IGdjZChhLCBjKSAvIGxjbShiLCBkKVxuXG4gICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKGdjZChQW1wiblwiXSwgdGhpc1tcIm5cIl0pICogZ2NkKFBbXCJkXCJdLCB0aGlzW1wiZFwiXSksIFBbXCJkXCJdICogdGhpc1tcImRcIl0pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBmcmFjdGlvbmFsIGxjbSBvZiB0d28gcmF0aW9uYWwgbnVtYmVyc1xuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbig1LDgpLmxjbSgzLDcpID0+IDE1XG4gICAgICovXG4gICAgXCJsY21cIjogZnVuY3Rpb24oYSwgYikge1xuXG4gICAgICBwYXJzZShhLCBiKTtcblxuICAgICAgLy8gbGNtKGEgLyBiLCBjIC8gZCkgPSBsY20oYSwgYykgLyBnY2QoYiwgZClcblxuICAgICAgaWYgKFBbXCJuXCJdID09PSAwICYmIHRoaXNbXCJuXCJdID09PSAwKSB7XG4gICAgICAgIHJldHVybiBuZXcgRnJhY3Rpb247XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKFBbXCJuXCJdICogdGhpc1tcIm5cIl0sIGdjZChQW1wiblwiXSwgdGhpc1tcIm5cIl0pICogZ2NkKFBbXCJkXCJdLCB0aGlzW1wiZFwiXSkpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBjZWlsIG9mIGEgcmF0aW9uYWwgbnVtYmVyXG4gICAgICpcbiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKCc0LigzKScpLmNlaWwoKSA9PiAoNSAvIDEpXG4gICAgICoqL1xuICAgIFwiY2VpbFwiOiBmdW5jdGlvbihwbGFjZXMpIHtcblxuICAgICAgcGxhY2VzID0gTWF0aC5wb3coMTAsIHBsYWNlcyB8fCAwKTtcblxuICAgICAgaWYgKGlzTmFOKHRoaXNbXCJuXCJdKSB8fCBpc05hTih0aGlzW1wiZFwiXSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbihOYU4pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbihNYXRoLmNlaWwocGxhY2VzICogdGhpc1tcInNcIl0gKiB0aGlzW1wiblwiXSAvIHRoaXNbXCJkXCJdKSwgcGxhY2VzKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgZmxvb3Igb2YgYSByYXRpb25hbCBudW1iZXJcbiAgICAgKlxuICAgICAqIEV4OiBuZXcgRnJhY3Rpb24oJzQuKDMpJykuZmxvb3IoKSA9PiAoNCAvIDEpXG4gICAgICoqL1xuICAgIFwiZmxvb3JcIjogZnVuY3Rpb24ocGxhY2VzKSB7XG5cbiAgICAgIHBsYWNlcyA9IE1hdGgucG93KDEwLCBwbGFjZXMgfHwgMCk7XG5cbiAgICAgIGlmIChpc05hTih0aGlzW1wiblwiXSkgfHwgaXNOYU4odGhpc1tcImRcIl0pKSB7XG4gICAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24oTmFOKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24oTWF0aC5mbG9vcihwbGFjZXMgKiB0aGlzW1wic1wiXSAqIHRoaXNbXCJuXCJdIC8gdGhpc1tcImRcIl0pLCBwbGFjZXMpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSb3VuZHMgYSByYXRpb25hbCBudW1iZXJzXG4gICAgICpcbiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKCc0LigzKScpLnJvdW5kKCkgPT4gKDQgLyAxKVxuICAgICAqKi9cbiAgICBcInJvdW5kXCI6IGZ1bmN0aW9uKHBsYWNlcykge1xuXG4gICAgICBwbGFjZXMgPSBNYXRoLnBvdygxMCwgcGxhY2VzIHx8IDApO1xuXG4gICAgICBpZiAoaXNOYU4odGhpc1tcIm5cIl0pIHx8IGlzTmFOKHRoaXNbXCJkXCJdKSkge1xuICAgICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKE5hTik7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKE1hdGgucm91bmQocGxhY2VzICogdGhpc1tcInNcIl0gKiB0aGlzW1wiblwiXSAvIHRoaXNbXCJkXCJdKSwgcGxhY2VzKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgaW52ZXJzZSBvZiB0aGUgZnJhY3Rpb24sIG1lYW5zIG51bWVyYXRvciBhbmQgZGVudW1lcmF0b3IgYXJlIGV4Y2hhbmdlZFxuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbihbLTMsIDRdKS5pbnZlcnNlKCkgPT4gLTQgLyAzXG4gICAgICoqL1xuICAgIFwiaW52ZXJzZVwiOiBmdW5jdGlvbigpIHtcblxuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbih0aGlzW1wic1wiXSAqIHRoaXNbXCJkXCJdLCB0aGlzW1wiblwiXSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZXMgdGhlIGZyYWN0aW9uIHRvIHNvbWUgaW50ZWdlciBleHBvbmVudFxuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbigtMSwyKS5wb3coLTMpID0+IC04XG4gICAgICovXG4gICAgXCJwb3dcIjogZnVuY3Rpb24obSkge1xuXG4gICAgICBpZiAobSA8IDApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbihNYXRoLnBvdyh0aGlzWydzJ10gKiB0aGlzW1wiZFwiXSwgLW0pLCBNYXRoLnBvdyh0aGlzW1wiblwiXSwgLW0pKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24oTWF0aC5wb3codGhpc1sncyddICogdGhpc1tcIm5cIl0sIG0pLCBNYXRoLnBvdyh0aGlzW1wiZFwiXSwgbSkpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiB0d28gcmF0aW9uYWwgbnVtYmVycyBhcmUgdGhlIHNhbWVcbiAgICAgKlxuICAgICAqIEV4OiBuZXcgRnJhY3Rpb24oMTkuNikuZXF1YWxzKFs5OCwgNV0pO1xuICAgICAqKi9cbiAgICBcImVxdWFsc1wiOiBmdW5jdGlvbihhLCBiKSB7XG5cbiAgICAgIHBhcnNlKGEsIGIpO1xuICAgICAgcmV0dXJuIHRoaXNbXCJzXCJdICogdGhpc1tcIm5cIl0gKiBQW1wiZFwiXSA9PT0gUFtcInNcIl0gKiBQW1wiblwiXSAqIHRoaXNbXCJkXCJdOyAvLyBTYW1lIGFzIGNvbXBhcmUoKSA9PT0gMFxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiB0d28gcmF0aW9uYWwgbnVtYmVycyBhcmUgdGhlIHNhbWVcbiAgICAgKlxuICAgICAqIEV4OiBuZXcgRnJhY3Rpb24oMTkuNikuZXF1YWxzKFs5OCwgNV0pO1xuICAgICAqKi9cbiAgICBcImNvbXBhcmVcIjogZnVuY3Rpb24oYSwgYikge1xuXG4gICAgICBwYXJzZShhLCBiKTtcbiAgICAgIHZhciB0ID0gKHRoaXNbXCJzXCJdICogdGhpc1tcIm5cIl0gKiBQW1wiZFwiXSAtIFBbXCJzXCJdICogUFtcIm5cIl0gKiB0aGlzW1wiZFwiXSk7XG4gICAgICByZXR1cm4gKDAgPCB0KSAtICh0IDwgMCk7XG4gICAgfSxcblxuICAgIFwic2ltcGxpZnlcIjogZnVuY3Rpb24oZXBzKSB7XG5cbiAgICAgIC8vIEZpcnN0IG5haXZlIGltcGxlbWVudGF0aW9uLCBuZWVkcyBpbXByb3ZlbWVudFxuXG4gICAgICBpZiAoaXNOYU4odGhpc1snbiddKSB8fCBpc05hTih0aGlzWydkJ10pKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICB2YXIgY29udCA9IHRoaXNbJ2FicyddKClbJ3RvQ29udGludWVkJ10oKTtcblxuICAgICAgZXBzID0gZXBzIHx8IDAuMDAxO1xuXG4gICAgICBmdW5jdGlvbiByZWMoYSkge1xuICAgICAgICBpZiAoYS5sZW5ndGggPT09IDEpXG4gICAgICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbihhWzBdKTtcbiAgICAgICAgcmV0dXJuIHJlYyhhLnNsaWNlKDEpKVsnaW52ZXJzZSddKClbJ2FkZCddKGFbMF0pO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHRtcCA9IHJlYyhjb250LnNsaWNlKDAsIGkgKyAxKSk7XG4gICAgICAgIGlmICh0bXBbJ3N1YiddKHRoaXNbJ2FicyddKCkpWydhYnMnXSgpLnZhbHVlT2YoKSA8IGVwcykge1xuICAgICAgICAgIHJldHVybiB0bXBbJ211bCddKHRoaXNbJ3MnXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiB0d28gcmF0aW9uYWwgbnVtYmVycyBhcmUgZGl2aXNpYmxlXG4gICAgICpcbiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKDE5LjYpLmRpdmlzaWJsZSgxLjUpO1xuICAgICAqL1xuICAgIFwiZGl2aXNpYmxlXCI6IGZ1bmN0aW9uKGEsIGIpIHtcblxuICAgICAgcGFyc2UoYSwgYik7XG4gICAgICByZXR1cm4gISghKFBbXCJuXCJdICogdGhpc1tcImRcIl0pIHx8ICgodGhpc1tcIm5cIl0gKiBQW1wiZFwiXSkgJSAoUFtcIm5cIl0gKiB0aGlzW1wiZFwiXSkpKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIGZyYWN0aW9uXG4gICAgICpcbiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKFwiMTAwLic5MTgyMydcIikudmFsdWVPZigpID0+IDEwMC45MTgyMzkxODIzOTE4M1xuICAgICAqKi9cbiAgICAndmFsdWVPZic6IGZ1bmN0aW9uKCkge1xuXG4gICAgICByZXR1cm4gdGhpc1tcInNcIl0gKiB0aGlzW1wiblwiXSAvIHRoaXNbXCJkXCJdO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgc3RyaW5nLWZyYWN0aW9uIHJlcHJlc2VudGF0aW9uIG9mIGEgRnJhY3Rpb24gb2JqZWN0XG4gICAgICpcbiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKFwiMS4nMydcIikudG9GcmFjdGlvbigpID0+IFwiNCAxLzNcIlxuICAgICAqKi9cbiAgICAndG9GcmFjdGlvbic6IGZ1bmN0aW9uKGV4Y2x1ZGVXaG9sZSkge1xuXG4gICAgICB2YXIgd2hvbGUsIHN0ciA9IFwiXCI7XG4gICAgICB2YXIgbiA9IHRoaXNbXCJuXCJdO1xuICAgICAgdmFyIGQgPSB0aGlzW1wiZFwiXTtcbiAgICAgIGlmICh0aGlzW1wic1wiXSA8IDApIHtcbiAgICAgICAgc3RyICs9ICctJztcbiAgICAgIH1cblxuICAgICAgaWYgKGQgPT09IDEpIHtcbiAgICAgICAgc3RyICs9IG47XG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIGlmIChleGNsdWRlV2hvbGUgJiYgKHdob2xlID0gTWF0aC5mbG9vcihuIC8gZCkpID4gMCkge1xuICAgICAgICAgIHN0ciArPSB3aG9sZTtcbiAgICAgICAgICBzdHIgKz0gXCIgXCI7XG4gICAgICAgICAgbiAlPSBkO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RyICs9IG47XG4gICAgICAgIHN0ciArPSAnLyc7XG4gICAgICAgIHN0ciArPSBkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGxhdGV4IHJlcHJlc2VudGF0aW9uIG9mIGEgRnJhY3Rpb24gb2JqZWN0XG4gICAgICpcbiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKFwiMS4nMydcIikudG9MYXRleCgpID0+IFwiXFxmcmFjezR9ezN9XCJcbiAgICAgKiovXG4gICAgJ3RvTGF0ZXgnOiBmdW5jdGlvbihleGNsdWRlV2hvbGUpIHtcblxuICAgICAgdmFyIHdob2xlLCBzdHIgPSBcIlwiO1xuICAgICAgdmFyIG4gPSB0aGlzW1wiblwiXTtcbiAgICAgIHZhciBkID0gdGhpc1tcImRcIl07XG4gICAgICBpZiAodGhpc1tcInNcIl0gPCAwKSB7XG4gICAgICAgIHN0ciArPSAnLSc7XG4gICAgICB9XG5cbiAgICAgIGlmIChkID09PSAxKSB7XG4gICAgICAgIHN0ciArPSBuO1xuICAgICAgfSBlbHNlIHtcblxuICAgICAgICBpZiAoZXhjbHVkZVdob2xlICYmICh3aG9sZSA9IE1hdGguZmxvb3IobiAvIGQpKSA+IDApIHtcbiAgICAgICAgICBzdHIgKz0gd2hvbGU7XG4gICAgICAgICAgbiAlPSBkO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RyICs9IFwiXFxcXGZyYWN7XCI7XG4gICAgICAgIHN0ciArPSBuO1xuICAgICAgICBzdHIgKz0gJ317JztcbiAgICAgICAgc3RyICs9IGQ7XG4gICAgICAgIHN0ciArPSAnfSc7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIGNvbnRpbnVlZCBmcmFjdGlvbiBlbGVtZW50c1xuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbihcIjcvOFwiKS50b0NvbnRpbnVlZCgpID0+IFswLDEsN11cbiAgICAgKi9cbiAgICAndG9Db250aW51ZWQnOiBmdW5jdGlvbigpIHtcblxuICAgICAgdmFyIHQ7XG4gICAgICB2YXIgYSA9IHRoaXNbJ24nXTtcbiAgICAgIHZhciBiID0gdGhpc1snZCddO1xuICAgICAgdmFyIHJlcyA9IFtdO1xuXG4gICAgICBpZiAoaXNOYU4odGhpc1snbiddKSB8fCBpc05hTih0aGlzWydkJ10pKSB7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9XG5cbiAgICAgIGRvIHtcbiAgICAgICAgcmVzLnB1c2goTWF0aC5mbG9vcihhIC8gYikpO1xuICAgICAgICB0ID0gYSAlIGI7XG4gICAgICAgIGEgPSBiO1xuICAgICAgICBiID0gdDtcbiAgICAgIH0gd2hpbGUgKGEgIT09IDEpO1xuXG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgZnJhY3Rpb24gd2l0aCBhbGwgZGlnaXRzXG4gICAgICpcbiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKFwiMTAwLic5MTgyMydcIikudG9TdHJpbmcoKSA9PiBcIjEwMC4oOTE4MjMpXCJcbiAgICAgKiovXG4gICAgJ3RvU3RyaW5nJzogZnVuY3Rpb24oZGVjKSB7XG5cbiAgICAgIHZhciBnO1xuICAgICAgdmFyIE4gPSB0aGlzW1wiblwiXTtcbiAgICAgIHZhciBEID0gdGhpc1tcImRcIl07XG5cbiAgICAgIGlmIChpc05hTihOKSB8fCBpc05hTihEKSkge1xuICAgICAgICByZXR1cm4gXCJOYU5cIjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFGcmFjdGlvblsnUkVEVUNFJ10pIHtcbiAgICAgICAgZyA9IGdjZChOLCBEKTtcbiAgICAgICAgTiAvPSBnO1xuICAgICAgICBEIC89IGc7XG4gICAgICB9XG5cbiAgICAgIGRlYyA9IGRlYyB8fCAxNTsgLy8gMTUgPSBkZWNpbWFsIHBsYWNlcyB3aGVuIG5vIHJlcGl0YXRpb25cblxuICAgICAgdmFyIGN5Y0xlbiA9IGN5Y2xlTGVuKE4sIEQpOyAvLyBDeWNsZSBsZW5ndGhcbiAgICAgIHZhciBjeWNPZmYgPSBjeWNsZVN0YXJ0KE4sIEQsIGN5Y0xlbik7IC8vIEN5Y2xlIHN0YXJ0XG5cbiAgICAgIHZhciBzdHIgPSB0aGlzWydzJ10gPT09IC0xID8gXCItXCIgOiBcIlwiO1xuXG4gICAgICBzdHIgKz0gTiAvIEQgfCAwO1xuXG4gICAgICBOICU9IEQ7XG4gICAgICBOICo9IDEwO1xuXG4gICAgICBpZiAoTilcbiAgICAgICAgc3RyICs9IFwiLlwiO1xuXG4gICAgICBpZiAoY3ljTGVuKSB7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IGN5Y09mZjsgaS0tOyApIHtcbiAgICAgICAgICBzdHIgKz0gTiAvIEQgfCAwO1xuICAgICAgICAgIE4gJT0gRDtcbiAgICAgICAgICBOICo9IDEwO1xuICAgICAgICB9XG4gICAgICAgIHN0ciArPSBcIihcIjtcbiAgICAgICAgZm9yICh2YXIgaSA9IGN5Y0xlbjsgaS0tOyApIHtcbiAgICAgICAgICBzdHIgKz0gTiAvIEQgfCAwO1xuICAgICAgICAgIE4gJT0gRDtcbiAgICAgICAgICBOICo9IDEwO1xuICAgICAgICB9XG4gICAgICAgIHN0ciArPSBcIilcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAodmFyIGkgPSBkZWM7IE4gJiYgaS0tOyApIHtcbiAgICAgICAgICBzdHIgKz0gTiAvIEQgfCAwO1xuICAgICAgICAgIE4gJT0gRDtcbiAgICAgICAgICBOICo9IDEwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH1cbiAgfTtcblxuICBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZVtcImFtZFwiXSkge1xuICAgIGRlZmluZShbXSwgZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gRnJhY3Rpb247XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsndmFsdWUnOiB0cnVlfSk7XG4gICAgRnJhY3Rpb25bJ2RlZmF1bHQnXSA9IEZyYWN0aW9uO1xuICAgIEZyYWN0aW9uWydGcmFjdGlvbiddID0gRnJhY3Rpb247XG4gICAgbW9kdWxlWydleHBvcnRzJ10gPSBGcmFjdGlvbjtcbiAgfSBlbHNlIHtcbiAgICByb290WydGcmFjdGlvbiddID0gRnJhY3Rpb247XG4gIH1cblxufSkodGhpcyk7XG4iLCIvKlxyXG4gKiBOYXR1cmFsIFNvcnQgYWxnb3JpdGhtIGZvciBKYXZhc2NyaXB0IC0gVmVyc2lvbiAwLjcgLSBSZWxlYXNlZCB1bmRlciBNSVQgbGljZW5zZVxyXG4gKiBBdXRob3I6IEppbSBQYWxtZXIgKGJhc2VkIG9uIGNodW5raW5nIGlkZWEgZnJvbSBEYXZlIEtvZWxsZSlcclxuICovXHJcbi8qanNoaW50IHVudXNlZDpmYWxzZSAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG5hdHVyYWxTb3J0IChhLCBiKSB7XHJcblx0XCJ1c2Ugc3RyaWN0XCI7XHJcblx0dmFyIHJlID0gLyheKFsrXFwtXT8oPzowfFsxLTldXFxkKikoPzpcXC5cXGQqKT8oPzpbZUVdWytcXC1dP1xcZCspPyk/JHxeMHhbMC05YS1mXSskfFxcZCspL2dpLFxyXG5cdFx0c3JlID0gLyheWyBdKnxbIF0qJCkvZyxcclxuXHRcdGRyZSA9IC8oXihbXFx3IF0rLD9bXFx3IF0rKT9bXFx3IF0rLD9bXFx3IF0rXFxkKzpcXGQrKDpcXGQrKT9bXFx3IF0/fF5cXGR7MSw0fVtcXC9cXC1dXFxkezEsNH1bXFwvXFwtXVxcZHsxLDR9fF5cXHcrLCBcXHcrIFxcZCssIFxcZHs0fSkvLFxyXG5cdFx0aHJlID0gL14weFswLTlhLWZdKyQvaSxcclxuXHRcdG9yZSA9IC9eMC8sXHJcblx0XHRpID0gZnVuY3Rpb24ocykgeyByZXR1cm4gbmF0dXJhbFNvcnQuaW5zZW5zaXRpdmUgJiYgKCcnICsgcykudG9Mb3dlckNhc2UoKSB8fCAnJyArIHM7IH0sXHJcblx0XHQvLyBjb252ZXJ0IGFsbCB0byBzdHJpbmdzIHN0cmlwIHdoaXRlc3BhY2VcclxuXHRcdHggPSBpKGEpLnJlcGxhY2Uoc3JlLCAnJykgfHwgJycsXHJcblx0XHR5ID0gaShiKS5yZXBsYWNlKHNyZSwgJycpIHx8ICcnLFxyXG5cdFx0Ly8gY2h1bmsvdG9rZW5pemVcclxuXHRcdHhOID0geC5yZXBsYWNlKHJlLCAnXFwwJDFcXDAnKS5yZXBsYWNlKC9cXDAkLywnJykucmVwbGFjZSgvXlxcMC8sJycpLnNwbGl0KCdcXDAnKSxcclxuXHRcdHlOID0geS5yZXBsYWNlKHJlLCAnXFwwJDFcXDAnKS5yZXBsYWNlKC9cXDAkLywnJykucmVwbGFjZSgvXlxcMC8sJycpLnNwbGl0KCdcXDAnKSxcclxuXHRcdC8vIG51bWVyaWMsIGhleCBvciBkYXRlIGRldGVjdGlvblxyXG5cdFx0eEQgPSBwYXJzZUludCh4Lm1hdGNoKGhyZSksIDE2KSB8fCAoeE4ubGVuZ3RoICE9PSAxICYmIHgubWF0Y2goZHJlKSAmJiBEYXRlLnBhcnNlKHgpKSxcclxuXHRcdHlEID0gcGFyc2VJbnQoeS5tYXRjaChocmUpLCAxNikgfHwgeEQgJiYgeS5tYXRjaChkcmUpICYmIERhdGUucGFyc2UoeSkgfHwgbnVsbCxcclxuXHRcdG9GeE5jTCwgb0Z5TmNMO1xyXG5cdC8vIGZpcnN0IHRyeSBhbmQgc29ydCBIZXggY29kZXMgb3IgRGF0ZXNcclxuXHRpZiAoeUQpIHtcclxuXHRcdGlmICggeEQgPCB5RCApIHsgcmV0dXJuIC0xOyB9XHJcblx0XHRlbHNlIGlmICggeEQgPiB5RCApIHsgcmV0dXJuIDE7IH1cclxuXHR9XHJcblx0Ly8gbmF0dXJhbCBzb3J0aW5nIHRocm91Z2ggc3BsaXQgbnVtZXJpYyBzdHJpbmdzIGFuZCBkZWZhdWx0IHN0cmluZ3NcclxuXHRmb3IodmFyIGNMb2M9MCwgbnVtUz1NYXRoLm1heCh4Ti5sZW5ndGgsIHlOLmxlbmd0aCk7IGNMb2MgPCBudW1TOyBjTG9jKyspIHtcclxuXHRcdC8vIGZpbmQgZmxvYXRzIG5vdCBzdGFydGluZyB3aXRoICcwJywgc3RyaW5nIG9yIDAgaWYgbm90IGRlZmluZWQgKENsaW50IFByaWVzdClcclxuXHRcdG9GeE5jTCA9ICEoeE5bY0xvY10gfHwgJycpLm1hdGNoKG9yZSkgJiYgcGFyc2VGbG9hdCh4TltjTG9jXSkgfHwgeE5bY0xvY10gfHwgMDtcclxuXHRcdG9GeU5jTCA9ICEoeU5bY0xvY10gfHwgJycpLm1hdGNoKG9yZSkgJiYgcGFyc2VGbG9hdCh5TltjTG9jXSkgfHwgeU5bY0xvY10gfHwgMDtcclxuXHRcdC8vIGhhbmRsZSBudW1lcmljIHZzIHN0cmluZyBjb21wYXJpc29uIC0gbnVtYmVyIDwgc3RyaW5nIC0gKEt5bGUgQWRhbXMpXHJcblx0XHRpZiAoaXNOYU4ob0Z4TmNMKSAhPT0gaXNOYU4ob0Z5TmNMKSkgeyByZXR1cm4gKGlzTmFOKG9GeE5jTCkpID8gMSA6IC0xOyB9XHJcblx0XHQvLyByZWx5IG9uIHN0cmluZyBjb21wYXJpc29uIGlmIGRpZmZlcmVudCB0eXBlcyAtIGkuZS4gJzAyJyA8IDIgIT0gJzAyJyA8ICcyJ1xyXG5cdFx0ZWxzZSBpZiAodHlwZW9mIG9GeE5jTCAhPT0gdHlwZW9mIG9GeU5jTCkge1xyXG5cdFx0XHRvRnhOY0wgKz0gJyc7XHJcblx0XHRcdG9GeU5jTCArPSAnJztcclxuXHRcdH1cclxuXHRcdGlmIChvRnhOY0wgPCBvRnlOY0wpIHsgcmV0dXJuIC0xOyB9XHJcblx0XHRpZiAob0Z4TmNMID4gb0Z5TmNMKSB7IHJldHVybiAxOyB9XHJcblx0fVxyXG5cdHJldHVybiAwO1xyXG59O1xyXG4iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlVmVyc2lvbiA9IGV4cG9ydHMuY3JlYXRlVXBwZXJjYXNlRSA9IGV4cG9ydHMuY3JlYXRlVXBwZXJjYXNlUGkgPSBleHBvcnRzLmNyZWF0ZUkgPSBleHBvcnRzLmNyZWF0ZVNRUlQyID0gZXhwb3J0cy5jcmVhdGVTUVJUMV8yID0gZXhwb3J0cy5jcmVhdGVMT0cxMEUgPSBleHBvcnRzLmNyZWF0ZUxPRzJFID0gZXhwb3J0cy5jcmVhdGVMTjEwID0gZXhwb3J0cy5jcmVhdGVMTjIgPSBleHBvcnRzLmNyZWF0ZVBoaSA9IGV4cG9ydHMuY3JlYXRlRSA9IGV4cG9ydHMuY3JlYXRlVGF1ID0gZXhwb3J0cy5jcmVhdGVQaSA9IGV4cG9ydHMuY3JlYXRlTmFOID0gZXhwb3J0cy5jcmVhdGVJbmZpbml0eSA9IGV4cG9ydHMuY3JlYXRlTnVsbCA9IGV4cG9ydHMuY3JlYXRlRmFsc2UgPSBleHBvcnRzLmNyZWF0ZVRydWUgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfdmVyc2lvbiA9IHJlcXVpcmUoXCIuL3ZlcnNpb25cIik7XG5cbnZhciBfY29uc3RhbnRzID0gcmVxdWlyZShcIi4vdXRpbHMvYmlnbnVtYmVyL2NvbnN0YW50c1wiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBjcmVhdGVUcnVlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKCd0cnVlJywgW10sIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRydWU7XG59KTtcbmV4cG9ydHMuY3JlYXRlVHJ1ZSA9IGNyZWF0ZVRydWU7XG52YXIgY3JlYXRlRmFsc2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkoJ2ZhbHNlJywgW10sIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZhbHNlO1xufSk7XG5leHBvcnRzLmNyZWF0ZUZhbHNlID0gY3JlYXRlRmFsc2U7XG52YXIgY3JlYXRlTnVsbCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KSgnbnVsbCcsIFtdLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBudWxsO1xufSk7XG5leHBvcnRzLmNyZWF0ZU51bGwgPSBjcmVhdGVOdWxsO1xudmFyIGNyZWF0ZUluZmluaXR5ID0gLyogI19fUFVSRV9fICovcmVjcmVhdGVGYWN0b3J5KCdJbmZpbml0eScsIFsnY29uZmlnJywgJz9CaWdOdW1iZXInXSwgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXI7XG4gIHJldHVybiBjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJyA/IG5ldyBCaWdOdW1iZXIoSW5maW5pdHkpIDogSW5maW5pdHk7XG59KTtcbmV4cG9ydHMuY3JlYXRlSW5maW5pdHkgPSBjcmVhdGVJbmZpbml0eTtcbnZhciBjcmVhdGVOYU4gPSAvKiAjX19QVVJFX18gKi9yZWNyZWF0ZUZhY3RvcnkoJ05hTicsIFsnY29uZmlnJywgJz9CaWdOdW1iZXInXSwgZnVuY3Rpb24gKF9yZWYyKSB7XG4gIHZhciBjb25maWcgPSBfcmVmMi5jb25maWcsXG4gICAgICBCaWdOdW1iZXIgPSBfcmVmMi5CaWdOdW1iZXI7XG4gIHJldHVybiBjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJyA/IG5ldyBCaWdOdW1iZXIoTmFOKSA6IE5hTjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVOYU4gPSBjcmVhdGVOYU47XG52YXIgY3JlYXRlUGkgPSAvKiAjX19QVVJFX18gKi9yZWNyZWF0ZUZhY3RvcnkoJ3BpJywgWydjb25maWcnLCAnP0JpZ051bWJlciddLCBmdW5jdGlvbiAoX3JlZjMpIHtcbiAgdmFyIGNvbmZpZyA9IF9yZWYzLmNvbmZpZyxcbiAgICAgIEJpZ051bWJlciA9IF9yZWYzLkJpZ051bWJlcjtcbiAgcmV0dXJuIGNvbmZpZy5udW1iZXIgPT09ICdCaWdOdW1iZXInID8gKDAsIF9jb25zdGFudHMuY3JlYXRlQmlnTnVtYmVyUGkpKEJpZ051bWJlcikgOiBfbnVtYmVyLnBpO1xufSk7XG5leHBvcnRzLmNyZWF0ZVBpID0gY3JlYXRlUGk7XG52YXIgY3JlYXRlVGF1ID0gLyogI19fUFVSRV9fICovcmVjcmVhdGVGYWN0b3J5KCd0YXUnLCBbJ2NvbmZpZycsICc/QmlnTnVtYmVyJ10sIGZ1bmN0aW9uIChfcmVmNCkge1xuICB2YXIgY29uZmlnID0gX3JlZjQuY29uZmlnLFxuICAgICAgQmlnTnVtYmVyID0gX3JlZjQuQmlnTnVtYmVyO1xuICByZXR1cm4gY29uZmlnLm51bWJlciA9PT0gJ0JpZ051bWJlcicgPyAoMCwgX2NvbnN0YW50cy5jcmVhdGVCaWdOdW1iZXJUYXUpKEJpZ051bWJlcikgOiBfbnVtYmVyLnRhdTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVUYXUgPSBjcmVhdGVUYXU7XG52YXIgY3JlYXRlRSA9IC8qICNfX1BVUkVfXyAqL3JlY3JlYXRlRmFjdG9yeSgnZScsIFsnY29uZmlnJywgJz9CaWdOdW1iZXInXSwgZnVuY3Rpb24gKF9yZWY1KSB7XG4gIHZhciBjb25maWcgPSBfcmVmNS5jb25maWcsXG4gICAgICBCaWdOdW1iZXIgPSBfcmVmNS5CaWdOdW1iZXI7XG4gIHJldHVybiBjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJyA/ICgwLCBfY29uc3RhbnRzLmNyZWF0ZUJpZ051bWJlckUpKEJpZ051bWJlcikgOiBfbnVtYmVyLmU7XG59KTsgLy8gZ29sZGVuIHJhdGlvLCAoMStzcXJ0KDUpKS8yXG5cbmV4cG9ydHMuY3JlYXRlRSA9IGNyZWF0ZUU7XG52YXIgY3JlYXRlUGhpID0gLyogI19fUFVSRV9fICovcmVjcmVhdGVGYWN0b3J5KCdwaGknLCBbJ2NvbmZpZycsICc/QmlnTnVtYmVyJ10sIGZ1bmN0aW9uIChfcmVmNikge1xuICB2YXIgY29uZmlnID0gX3JlZjYuY29uZmlnLFxuICAgICAgQmlnTnVtYmVyID0gX3JlZjYuQmlnTnVtYmVyO1xuICByZXR1cm4gY29uZmlnLm51bWJlciA9PT0gJ0JpZ051bWJlcicgPyAoMCwgX2NvbnN0YW50cy5jcmVhdGVCaWdOdW1iZXJQaGkpKEJpZ051bWJlcikgOiBfbnVtYmVyLnBoaTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVQaGkgPSBjcmVhdGVQaGk7XG52YXIgY3JlYXRlTE4yID0gLyogI19fUFVSRV9fICovcmVjcmVhdGVGYWN0b3J5KCdMTjInLCBbJ2NvbmZpZycsICc/QmlnTnVtYmVyJ10sIGZ1bmN0aW9uIChfcmVmNykge1xuICB2YXIgY29uZmlnID0gX3JlZjcuY29uZmlnLFxuICAgICAgQmlnTnVtYmVyID0gX3JlZjcuQmlnTnVtYmVyO1xuICByZXR1cm4gY29uZmlnLm51bWJlciA9PT0gJ0JpZ051bWJlcicgPyBuZXcgQmlnTnVtYmVyKDIpLmxuKCkgOiBNYXRoLkxOMjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVMTjIgPSBjcmVhdGVMTjI7XG52YXIgY3JlYXRlTE4xMCA9IC8qICNfX1BVUkVfXyAqL3JlY3JlYXRlRmFjdG9yeSgnTE4xMCcsIFsnY29uZmlnJywgJz9CaWdOdW1iZXInXSwgZnVuY3Rpb24gKF9yZWY4KSB7XG4gIHZhciBjb25maWcgPSBfcmVmOC5jb25maWcsXG4gICAgICBCaWdOdW1iZXIgPSBfcmVmOC5CaWdOdW1iZXI7XG4gIHJldHVybiBjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJyA/IG5ldyBCaWdOdW1iZXIoMTApLmxuKCkgOiBNYXRoLkxOMTA7XG59KTtcbmV4cG9ydHMuY3JlYXRlTE4xMCA9IGNyZWF0ZUxOMTA7XG52YXIgY3JlYXRlTE9HMkUgPSAvKiAjX19QVVJFX18gKi9yZWNyZWF0ZUZhY3RvcnkoJ0xPRzJFJywgWydjb25maWcnLCAnP0JpZ051bWJlciddLCBmdW5jdGlvbiAoX3JlZjkpIHtcbiAgdmFyIGNvbmZpZyA9IF9yZWY5LmNvbmZpZyxcbiAgICAgIEJpZ051bWJlciA9IF9yZWY5LkJpZ051bWJlcjtcbiAgcmV0dXJuIGNvbmZpZy5udW1iZXIgPT09ICdCaWdOdW1iZXInID8gbmV3IEJpZ051bWJlcigxKS5kaXYobmV3IEJpZ051bWJlcigyKS5sbigpKSA6IE1hdGguTE9HMkU7XG59KTtcbmV4cG9ydHMuY3JlYXRlTE9HMkUgPSBjcmVhdGVMT0cyRTtcbnZhciBjcmVhdGVMT0cxMEUgPSAvKiAjX19QVVJFX18gKi9yZWNyZWF0ZUZhY3RvcnkoJ0xPRzEwRScsIFsnY29uZmlnJywgJz9CaWdOdW1iZXInXSwgZnVuY3Rpb24gKF9yZWYxMCkge1xuICB2YXIgY29uZmlnID0gX3JlZjEwLmNvbmZpZyxcbiAgICAgIEJpZ051bWJlciA9IF9yZWYxMC5CaWdOdW1iZXI7XG4gIHJldHVybiBjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJyA/IG5ldyBCaWdOdW1iZXIoMSkuZGl2KG5ldyBCaWdOdW1iZXIoMTApLmxuKCkpIDogTWF0aC5MT0cxMEU7XG59KTtcbmV4cG9ydHMuY3JlYXRlTE9HMTBFID0gY3JlYXRlTE9HMTBFO1xudmFyIGNyZWF0ZVNRUlQxXzIgPSAvKiAjX19QVVJFX18gKi9yZWNyZWF0ZUZhY3RvcnkoIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY2FtZWxjYXNlXG4nU1FSVDFfMicsIFsnY29uZmlnJywgJz9CaWdOdW1iZXInXSwgZnVuY3Rpb24gKF9yZWYxMSkge1xuICB2YXIgY29uZmlnID0gX3JlZjExLmNvbmZpZyxcbiAgICAgIEJpZ051bWJlciA9IF9yZWYxMS5CaWdOdW1iZXI7XG4gIHJldHVybiBjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJyA/IG5ldyBCaWdOdW1iZXIoJzAuNScpLnNxcnQoKSA6IE1hdGguU1FSVDFfMjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTUVJUMV8yID0gY3JlYXRlU1FSVDFfMjtcbnZhciBjcmVhdGVTUVJUMiA9IC8qICNfX1BVUkVfXyAqL3JlY3JlYXRlRmFjdG9yeSgnU1FSVDInLCBbJ2NvbmZpZycsICc/QmlnTnVtYmVyJ10sIGZ1bmN0aW9uIChfcmVmMTIpIHtcbiAgdmFyIGNvbmZpZyA9IF9yZWYxMi5jb25maWcsXG4gICAgICBCaWdOdW1iZXIgPSBfcmVmMTIuQmlnTnVtYmVyO1xuICByZXR1cm4gY29uZmlnLm51bWJlciA9PT0gJ0JpZ051bWJlcicgPyBuZXcgQmlnTnVtYmVyKDIpLnNxcnQoKSA6IE1hdGguU1FSVDI7XG59KTtcbmV4cG9ydHMuY3JlYXRlU1FSVDIgPSBjcmVhdGVTUVJUMjtcbnZhciBjcmVhdGVJID0gLyogI19fUFVSRV9fICovcmVjcmVhdGVGYWN0b3J5KCdpJywgWydDb21wbGV4J10sIGZ1bmN0aW9uIChfcmVmMTMpIHtcbiAgdmFyIENvbXBsZXggPSBfcmVmMTMuQ29tcGxleDtcbiAgcmV0dXJuIENvbXBsZXguSTtcbn0pOyAvLyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIHY1XG5cbmV4cG9ydHMuY3JlYXRlSSA9IGNyZWF0ZUk7XG52YXIgY3JlYXRlVXBwZXJjYXNlUGkgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkoJ1BJJywgWydwaSddLCBmdW5jdGlvbiAoX3JlZjE0KSB7XG4gIHZhciBwaSA9IF9yZWYxNC5waTtcbiAgcmV0dXJuIHBpO1xufSk7XG5leHBvcnRzLmNyZWF0ZVVwcGVyY2FzZVBpID0gY3JlYXRlVXBwZXJjYXNlUGk7XG52YXIgY3JlYXRlVXBwZXJjYXNlRSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KSgnRScsIFsnZSddLCBmdW5jdGlvbiAoX3JlZjE1KSB7XG4gIHZhciBlID0gX3JlZjE1LmU7XG4gIHJldHVybiBlO1xufSk7XG5leHBvcnRzLmNyZWF0ZVVwcGVyY2FzZUUgPSBjcmVhdGVVcHBlcmNhc2VFO1xudmFyIGNyZWF0ZVZlcnNpb24gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkoJ3ZlcnNpb24nLCBbXSwgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gX3ZlcnNpb24udmVyc2lvbjtcbn0pOyAvLyBoZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGEgZmFjdG9yeSB3aXRoIGEgZmxhZyByZWNyZWF0ZU9uQ29uZmlnQ2hhbmdlXG4vLyBpZGVhOiBhbGxvdyBwYXNzaW5nIG9wdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYXR0YWNoZWQgdG8gdGhlIGZhY3RvcnkgZnVuY3Rpb24gYXMgNHRoIGFyZ3VtZW50P1xuXG5leHBvcnRzLmNyZWF0ZVZlcnNpb24gPSBjcmVhdGVWZXJzaW9uO1xuXG5mdW5jdGlvbiByZWNyZWF0ZUZhY3RvcnkobmFtZSwgZGVwZW5kZW5jaWVzLCBjcmVhdGUpIHtcbiAgcmV0dXJuICgwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGNyZWF0ZSwge1xuICAgIHJlY3JlYXRlT25Db25maWdDaGFuZ2U6IHRydWVcbiAgfSk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkRFRkFVTFRfQ09ORklHID0gdm9pZCAwO1xudmFyIERFRkFVTFRfQ09ORklHID0ge1xuICAvLyBtaW5pbXVtIHJlbGF0aXZlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gY29tcGFyZWQgdmFsdWVzLFxuICAvLyB1c2VkIGJ5IGFsbCBjb21wYXJpc29uIGZ1bmN0aW9uc1xuICBlcHNpbG9uOiAxZS0xMixcbiAgLy8gdHlwZSBvZiBkZWZhdWx0IG1hdHJpeCBvdXRwdXQuIENob29zZSAnbWF0cml4JyAoZGVmYXVsdCkgb3IgJ2FycmF5J1xuICBtYXRyaXg6ICdNYXRyaXgnLFxuICAvLyB0eXBlIG9mIGRlZmF1bHQgbnVtYmVyIG91dHB1dC4gQ2hvb3NlICdudW1iZXInIChkZWZhdWx0KSAnQmlnTnVtYmVyJywgb3IgJ0ZyYWN0aW9uXG4gIG51bWJlcjogJ251bWJlcicsXG4gIC8vIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMgaW4gQmlnTnVtYmVyc1xuICBwcmVjaXNpb246IDY0LFxuICAvLyBwcmVkaWN0YWJsZSBvdXRwdXQgdHlwZSBvZiBmdW5jdGlvbnMuIFdoZW4gdHJ1ZSwgb3V0cHV0IHR5cGUgZGVwZW5kcyBvbmx5XG4gIC8vIG9uIHRoZSBpbnB1dCB0eXBlcy4gV2hlbiBmYWxzZSAoZGVmYXVsdCksIG91dHB1dCB0eXBlIGNhbiB2YXJ5IGRlcGVuZGluZ1xuICAvLyBvbiBpbnB1dCB2YWx1ZXMuIEZvciBleGFtcGxlIGBtYXRoLnNxcnQoLTQpYCByZXR1cm5zIGBjb21wbGV4KCcyaScpYCB3aGVuXG4gIC8vIHByZWRpY3RhYmxlIGlzIGZhbHNlLCBhbmQgcmV0dXJucyBgTmFOYCB3aGVuIHRydWUuXG4gIHByZWRpY3RhYmxlOiBmYWxzZSxcbiAgLy8gcmFuZG9tIHNlZWQgZm9yIHNlZWRlZCBwc2V1ZG8gcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uXG4gIC8vIG51bGwgPSByYW5kb21seSBzZWVkXG4gIHJhbmRvbVNlZWQ6IG51bGxcbn07XG5leHBvcnRzLkRFRkFVTFRfQ09ORklHID0gREVGQVVMVF9DT05GSUc7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlID0gY3JlYXRlO1xuXG5yZXF1aXJlKFwiLi8uLi91dGlscy9wb2x5ZmlsbHNcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4vLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgZW1pdHRlciA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuLy4uL3V0aWxzL2VtaXR0ZXJcIikpO1xuXG52YXIgX2ltcG9ydCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2ltcG9ydFwiKTtcblxudmFyIF9jb25maWcgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9jb25maWdcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2xvZyA9IHJlcXVpcmUoXCIuLi91dGlscy9sb2dcIik7XG5cbnZhciBfQXJndW1lbnRzRXJyb3IgPSByZXF1aXJlKFwiLi4vZXJyb3IvQXJndW1lbnRzRXJyb3JcIik7XG5cbnZhciBfRGltZW5zaW9uRXJyb3IgPSByZXF1aXJlKFwiLi4vZXJyb3IvRGltZW5zaW9uRXJyb3JcIik7XG5cbnZhciBfSW5kZXhFcnJvciA9IHJlcXVpcmUoXCIuLi9lcnJvci9JbmRleEVycm9yXCIpO1xuXG52YXIgX2NvbmZpZzIgPSByZXF1aXJlKFwiLi9jb25maWdcIik7XG5cbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSgpIHsgaWYgKHR5cGVvZiBXZWFrTWFwICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBudWxsOyB2YXIgY2FjaGUgPSBuZXcgV2Vha01hcCgpOyBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoKSB7IHJldHVybiBjYWNoZTsgfTsgcmV0dXJuIGNhY2hlOyB9XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKG9iaikgeyBpZiAob2JqICYmIG9iai5fX2VzTW9kdWxlKSB7IHJldHVybiBvYmo7IH0gaWYgKG9iaiA9PT0gbnVsbCB8fCBfdHlwZW9mKG9iaikgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG9iaiAhPT0gXCJmdW5jdGlvblwiKSB7IHJldHVybiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfSB2YXIgY2FjaGUgPSBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoKTsgaWYgKGNhY2hlICYmIGNhY2hlLmhhcyhvYmopKSB7IHJldHVybiBjYWNoZS5nZXQob2JqKTsgfSB2YXIgbmV3T2JqID0ge307IHZhciBoYXNQcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIga2V5IGluIG9iaikgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkgeyB2YXIgZGVzYyA9IGhhc1Byb3BlcnR5RGVzY3JpcHRvciA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBrZXkpIDogbnVsbDsgaWYgKGRlc2MgJiYgKGRlc2MuZ2V0IHx8IGRlc2Muc2V0KSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkobmV3T2JqLCBrZXksIGRlc2MpOyB9IGVsc2UgeyBuZXdPYmpba2V5XSA9IG9ialtrZXldOyB9IH0gfSBuZXdPYmpbXCJkZWZhdWx0XCJdID0gb2JqOyBpZiAoY2FjaGUpIHsgY2FjaGUuc2V0KG9iaiwgbmV3T2JqKTsgfSByZXR1cm4gbmV3T2JqOyB9XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbi8qKlxuICogQ3JlYXRlIGEgbWF0aGpzIGluc3RhbmNlIGZyb20gZ2l2ZW4gZmFjdG9yeSBmdW5jdGlvbnMgYW5kIG9wdGlvbmFsbHkgY29uZmlnXG4gKlxuICogVXNhZ2U6XG4gKlxuICogICAgIGNvbnN0IG1hdGhqczEgPSBjcmVhdGUoeyBjcmVhdGVBZGQsIGNyZWF0ZU11bHRpcGx5LCAuLi59KVxuICogICAgIGNvbnN0IGNvbmZpZyA9IHsgbnVtYmVyOiAnQmlnTnVtYmVyJyB9XG4gKiAgICAgY29uc3QgbWF0aGpzMiA9IGNyZWF0ZShhbGwsIGNvbmZpZylcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW2ZhY3Rvcmllc10gQW4gb2JqZWN0IHdpdGggZmFjdG9yeSBmdW5jdGlvbnNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgb2JqZWN0IGNhbiBjb250YWluIG5lc3RlZCBvYmplY3RzLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbCBuZXN0ZWQgb2JqZWN0cyB3aWxsIGJlIGZsYXR0ZW5lZC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbY29uZmlnXSAgICBBdmFpbGFibGUgb3B0aW9uczpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtudW1iZXJ9IGVwc2lsb25cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWluaW11bSByZWxhdGl2ZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmVkIHZhbHVlcywgdXNlZCBieSBhbGwgY29tcGFyaXNvbiBmdW5jdGlvbnMuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nfSBtYXRyaXhcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQSBzdHJpbmcgJ01hdHJpeCcgKGRlZmF1bHQpIG9yICdBcnJheScuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nfSBudW1iZXJcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQSBzdHJpbmcgJ251bWJlcicgKGRlZmF1bHQpLCAnQmlnTnVtYmVyJywgb3IgJ0ZyYWN0aW9uJ1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAge251bWJlcn0gcHJlY2lzaW9uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIGZvciBCaWdOdW1iZXJzLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3QgYXBwbGljYWJsZSBmb3IgTnVtYmVycy5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtib29sZWFufSBwcmVkaWN0YWJsZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVkaWN0YWJsZSBvdXRwdXQgdHlwZSBvZiBmdW5jdGlvbnMuIFdoZW4gdHJ1ZSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IHR5cGUgZGVwZW5kcyBvbmx5IG9uIHRoZSBpbnB1dCB0eXBlcy4gV2hlblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSAoZGVmYXVsdCksIG91dHB1dCB0eXBlIGNhbiB2YXJ5IGRlcGVuZGluZ1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiBpbnB1dCB2YWx1ZXMuIEZvciBleGFtcGxlIGBtYXRoLnNxcnQoLTQpYFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5zIGBjb21wbGV4KCcyaScpYCB3aGVuIHByZWRpY3RhYmxlIGlzIGZhbHNlLCBhbmRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJucyBgTmFOYCB3aGVuIHRydWUuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nfSByYW5kb21TZWVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJhbmRvbSBzZWVkIGZvciBzZWVkZWQgcHNldWRvIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXQgdG8gbnVsbCB0byByYW5kb21seSBzZWVkLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBhIGJhcmUtYm9uZSBtYXRoLmpzIGluc3RhbmNlIGNvbnRhaW5pbmdcbiAqICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uczpcbiAqICAgICAgICAgICAgICAgICAgIC0gYGltcG9ydGAgdG8gYWRkIG5ldyBmdW5jdGlvbnNcbiAqICAgICAgICAgICAgICAgICAgIC0gYGNvbmZpZ2AgdG8gY2hhbmdlIGNvbmZpZ3VyYXRpb25cbiAqICAgICAgICAgICAgICAgICAgIC0gYG9uYCwgYG9mZmAsIGBvbmNlYCwgYGVtaXRgIGZvciBldmVudHNcbiAqL1xuZnVuY3Rpb24gY3JlYXRlKGZhY3RvcmllcywgY29uZmlnKSB7XG4gIHZhciBjb25maWdJbnRlcm5hbCA9IF9leHRlbmRzKHt9LCBfY29uZmlnMi5ERUZBVUxUX0NPTkZJRywgY29uZmlnKTsgLy8gc2ltcGxlIHRlc3QgZm9yIEVTNSBzdXBwb3J0XG5cblxuICBpZiAodHlwZW9mIE9iamVjdC5jcmVhdGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0VTNSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgSmF2YVNjcmlwdCBlbmdpbmUuICcgKyAnUGxlYXNlIGxvYWQgdGhlIGVzNS1zaGltIGFuZCBlczUtc2hhbSBsaWJyYXJ5IGZvciBjb21wYXRpYmlsaXR5LicpO1xuICB9IC8vIGNyZWF0ZSB0aGUgbWF0aGpzIGluc3RhbmNlXG5cblxuICB2YXIgbWF0aCA9IGVtaXR0ZXIubWl4aW4oe1xuICAgIC8vIG9ubHkgaGVyZSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBmb3IgbGVnYWN5IGZhY3RvcnkgZnVuY3Rpb25zXG4gICAgaXNOdW1iZXI6IF9pcy5pc051bWJlcixcbiAgICBpc0NvbXBsZXg6IF9pcy5pc0NvbXBsZXgsXG4gICAgaXNCaWdOdW1iZXI6IF9pcy5pc0JpZ051bWJlcixcbiAgICBpc0ZyYWN0aW9uOiBfaXMuaXNGcmFjdGlvbixcbiAgICBpc1VuaXQ6IF9pcy5pc1VuaXQsXG4gICAgaXNTdHJpbmc6IF9pcy5pc1N0cmluZyxcbiAgICBpc0FycmF5OiBfaXMuaXNBcnJheSxcbiAgICBpc01hdHJpeDogX2lzLmlzTWF0cml4LFxuICAgIGlzQ29sbGVjdGlvbjogX2lzLmlzQ29sbGVjdGlvbixcbiAgICBpc0RlbnNlTWF0cml4OiBfaXMuaXNEZW5zZU1hdHJpeCxcbiAgICBpc1NwYXJzZU1hdHJpeDogX2lzLmlzU3BhcnNlTWF0cml4LFxuICAgIGlzUmFuZ2U6IF9pcy5pc1JhbmdlLFxuICAgIGlzSW5kZXg6IF9pcy5pc0luZGV4LFxuICAgIGlzQm9vbGVhbjogX2lzLmlzQm9vbGVhbixcbiAgICBpc1Jlc3VsdFNldDogX2lzLmlzUmVzdWx0U2V0LFxuICAgIGlzSGVscDogX2lzLmlzSGVscCxcbiAgICBpc0Z1bmN0aW9uOiBfaXMuaXNGdW5jdGlvbixcbiAgICBpc0RhdGU6IF9pcy5pc0RhdGUsXG4gICAgaXNSZWdFeHA6IF9pcy5pc1JlZ0V4cCxcbiAgICBpc09iamVjdDogX2lzLmlzT2JqZWN0LFxuICAgIGlzTnVsbDogX2lzLmlzTnVsbCxcbiAgICBpc1VuZGVmaW5lZDogX2lzLmlzVW5kZWZpbmVkLFxuICAgIGlzQWNjZXNzb3JOb2RlOiBfaXMuaXNBY2Nlc3Nvck5vZGUsXG4gICAgaXNBcnJheU5vZGU6IF9pcy5pc0FycmF5Tm9kZSxcbiAgICBpc0Fzc2lnbm1lbnROb2RlOiBfaXMuaXNBc3NpZ25tZW50Tm9kZSxcbiAgICBpc0Jsb2NrTm9kZTogX2lzLmlzQmxvY2tOb2RlLFxuICAgIGlzQ29uZGl0aW9uYWxOb2RlOiBfaXMuaXNDb25kaXRpb25hbE5vZGUsXG4gICAgaXNDb25zdGFudE5vZGU6IF9pcy5pc0NvbnN0YW50Tm9kZSxcbiAgICBpc0Z1bmN0aW9uQXNzaWdubWVudE5vZGU6IF9pcy5pc0Z1bmN0aW9uQXNzaWdubWVudE5vZGUsXG4gICAgaXNGdW5jdGlvbk5vZGU6IF9pcy5pc0Z1bmN0aW9uTm9kZSxcbiAgICBpc0luZGV4Tm9kZTogX2lzLmlzSW5kZXhOb2RlLFxuICAgIGlzTm9kZTogX2lzLmlzTm9kZSxcbiAgICBpc09iamVjdE5vZGU6IF9pcy5pc09iamVjdE5vZGUsXG4gICAgaXNPcGVyYXRvck5vZGU6IF9pcy5pc09wZXJhdG9yTm9kZSxcbiAgICBpc1BhcmVudGhlc2lzTm9kZTogX2lzLmlzUGFyZW50aGVzaXNOb2RlLFxuICAgIGlzUmFuZ2VOb2RlOiBfaXMuaXNSYW5nZU5vZGUsXG4gICAgaXNTeW1ib2xOb2RlOiBfaXMuaXNTeW1ib2xOb2RlLFxuICAgIGlzQ2hhaW46IF9pcy5pc0NoYWluXG4gIH0pOyAvLyBsb2FkIGNvbmZpZyBmdW5jdGlvbiBhbmQgYXBwbHkgcHJvdmlkZWQgY29uZmlnXG5cbiAgbWF0aC5jb25maWcgPSAoMCwgX2NvbmZpZy5jb25maWdGYWN0b3J5KShjb25maWdJbnRlcm5hbCwgbWF0aC5lbWl0KTtcbiAgbWF0aC5leHByZXNzaW9uID0ge1xuICAgIHRyYW5zZm9ybToge30sXG4gICAgbWF0aFdpdGhUcmFuc2Zvcm06IHtcbiAgICAgIGNvbmZpZzogbWF0aC5jb25maWdcbiAgICB9XG4gIH07IC8vIGNhY2hlZCBmYWN0b3JpZXMgYW5kIGluc3RhbmNlcyB1c2VkIGJ5IGZ1bmN0aW9uIGxvYWRcblxuICB2YXIgbGVnYWN5RmFjdG9yaWVzID0gW107XG4gIHZhciBsZWdhY3lJbnN0YW5jZXMgPSBbXTtcbiAgLyoqXG4gICAqIExvYWQgYSBmdW5jdGlvbiBvciBkYXRhIHR5cGUgZnJvbSBhIGZhY3RvcnkuXG4gICAqIElmIHRoZSBmdW5jdGlvbiBvciBkYXRhIHR5cGUgYWxyZWFkeSBleGlzdHMsIHRoZSBleGlzdGluZyBpbnN0YW5jZSBpc1xuICAgKiByZXR1cm5lZC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZmFjdG9yeVxuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG5cbiAgZnVuY3Rpb24gbG9hZChmYWN0b3J5KSB7XG4gICAgaWYgKCgwLCBfZmFjdG9yeS5pc0ZhY3RvcnkpKGZhY3RvcnkpKSB7XG4gICAgICByZXR1cm4gZmFjdG9yeShtYXRoKTtcbiAgICB9XG5cbiAgICB2YXIgZmlyc3RQcm9wZXJ0eSA9IGZhY3RvcnlbT2JqZWN0LmtleXMoZmFjdG9yeSlbMF1dO1xuXG4gICAgaWYgKCgwLCBfZmFjdG9yeS5pc0ZhY3RvcnkpKGZpcnN0UHJvcGVydHkpKSB7XG4gICAgICByZXR1cm4gZmlyc3RQcm9wZXJ0eShtYXRoKTtcbiAgICB9XG5cbiAgICBpZiAoISgwLCBfb2JqZWN0LmlzTGVnYWN5RmFjdG9yeSkoZmFjdG9yeSkpIHtcbiAgICAgIGNvbnNvbGUud2FybignRmFjdG9yeSBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIGB0eXBlYCwgYG5hbWVgLCBhbmQgYGZhY3RvcnlgIGV4cGVjdGVkJywgZmFjdG9yeSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhY3Rvcnkgb2JqZWN0IHdpdGggcHJvcGVydGllcyBgdHlwZWAsIGBuYW1lYCwgYW5kIGBmYWN0b3J5YCBleHBlY3RlZCcpO1xuICAgIH1cblxuICAgIHZhciBpbmRleCA9IGxlZ2FjeUZhY3Rvcmllcy5pbmRleE9mKGZhY3RvcnkpO1xuICAgIHZhciBpbnN0YW5jZTtcblxuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIC8vIGRvZXNuJ3QgeWV0IGV4aXN0XG4gICAgICBpZiAoZmFjdG9yeS5tYXRoID09PSB0cnVlKSB7XG4gICAgICAgIC8vIHBhc3Mgd2l0aCBtYXRoIG5hbWVzcGFjZVxuICAgICAgICBpbnN0YW5jZSA9IGZhY3RvcnkuZmFjdG9yeShtYXRoLnR5cGUsIGNvbmZpZ0ludGVybmFsLCBsb2FkLCBtYXRoLnR5cGVkLCBtYXRoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluc3RhbmNlID0gZmFjdG9yeS5mYWN0b3J5KG1hdGgudHlwZSwgY29uZmlnSW50ZXJuYWwsIGxvYWQsIG1hdGgudHlwZWQpO1xuICAgICAgfSAvLyBhcHBlbmQgdG8gdGhlIGNhY2hlXG5cblxuICAgICAgbGVnYWN5RmFjdG9yaWVzLnB1c2goZmFjdG9yeSk7XG4gICAgICBsZWdhY3lJbnN0YW5jZXMucHVzaChpbnN0YW5jZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGFscmVhZHkgZXhpc3RpbmcgZnVuY3Rpb24sIHJldHVybiB0aGUgY2FjaGVkIGluc3RhbmNlXG4gICAgICBpbnN0YW5jZSA9IGxlZ2FjeUluc3RhbmNlc1tpbmRleF07XG4gICAgfVxuXG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgdmFyIGltcG9ydGVkRmFjdG9yaWVzID0ge307IC8vIGxvYWQgdGhlIGltcG9ydCBmdW5jdGlvblxuXG4gIGZ1bmN0aW9uIGxhenlUeXBlZCgpIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGgudHlwZWQuYXBwbHkobWF0aC50eXBlZCwgYXJncyk7XG4gIH1cblxuICB2YXIgaW50ZXJuYWxJbXBvcnQgPSAoMCwgX2ltcG9ydC5pbXBvcnRGYWN0b3J5KShsYXp5VHlwZWQsIGxvYWQsIG1hdGgsIGltcG9ydGVkRmFjdG9yaWVzKTtcbiAgbWF0aFtcImltcG9ydFwiXSA9IGludGVybmFsSW1wb3J0OyAvLyBsaXN0ZW4gZm9yIGNoYW5nZXMgaW4gY29uZmlnLCBpbXBvcnQgYWxsIGZ1bmN0aW9ucyBhZ2FpbiB3aGVuIGNoYW5nZWRcbiAgLy8gVE9ETzogbW92ZSB0aGlzIGxpc3RlbmVyIGludG8gdGhlIGltcG9ydCBmdW5jdGlvbj9cblxuICBtYXRoLm9uKCdjb25maWcnLCBmdW5jdGlvbiAoKSB7XG4gICAgKDAsIF9vYmplY3QudmFsdWVzKShpbXBvcnRlZEZhY3RvcmllcykuZm9yRWFjaChmdW5jdGlvbiAoZmFjdG9yeSkge1xuICAgICAgaWYgKGZhY3RvcnkgJiYgZmFjdG9yeS5tZXRhICYmIGZhY3RvcnkubWV0YS5yZWNyZWF0ZU9uQ29uZmlnQ2hhbmdlKSB7XG4gICAgICAgIC8vIEZJWE1FOiBvbmx5IHJlLWNyZWF0ZSB3aGVuIHRoZSBjdXJyZW50IGluc3RhbmNlIGlzIHRoZSBzYW1lIGFzIHdhcyBpbml0aWFsbHkgY3JlYXRlZFxuICAgICAgICAvLyBGSVhNRTogZGVsZXRlIHRoZSBmdW5jdGlvbnMvY29uc3RhbnRzIGJlZm9yZSBpbXBvcnRpbmcgdGhlbSBhZ2Fpbj9cbiAgICAgICAgaW50ZXJuYWxJbXBvcnQoZmFjdG9yeSwge1xuICAgICAgICAgIG92ZXJyaWRlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTsgLy8gdGhlIGNyZWF0ZSBmdW5jdGlvbiBleHBvc2VkIG9uIHRoZSBtYXRoanMgaW5zdGFuY2UgaXMgYm91bmQgdG9cbiAgLy8gdGhlIGZhY3RvcnkgZnVuY3Rpb25zIHBhc3NlZCBiZWZvcmVcblxuICBtYXRoLmNyZWF0ZSA9IGNyZWF0ZS5iaW5kKG51bGwsIGZhY3Rvcmllcyk7IC8vIGV4cG9ydCBmYWN0b3J5IGZ1bmN0aW9uXG5cbiAgbWF0aC5mYWN0b3J5ID0gX2ZhY3RvcnkuZmFjdG9yeTsgLy8gaW1wb3J0IHRoZSBmYWN0b3J5IGZ1bmN0aW9ucyBsaWtlIGNyZWF0ZUFkZCBhcyBhbiBhcnJheSBpbnN0ZWFkIG9mIG9iamVjdCxcbiAgLy8gZWxzZSB0aGV5IHdpbGwgZ2V0IGEgZGlmZmVyZW50IG5hbWluZyAoYGNyZWF0ZUFkZGAgaW5zdGVhZCBvZiBgYWRkYCkuXG5cbiAgbWF0aFtcImltcG9ydFwiXSgoMCwgX29iamVjdC52YWx1ZXMpKCgwLCBfb2JqZWN0LmRlZXBGbGF0dGVuKShmYWN0b3JpZXMpKSk7IC8vIFRPRE86IGRlcHJlY2F0ZWQgc2luY2UgdjYuMC4wLiBDbGVhbiB1cCBzb21lIGRheVxuXG4gIHZhciBtb3ZlZE5hbWVzID0gWyd0eXBlLmlzTnVtYmVyJywgJ3R5cGUuaXNDb21wbGV4JywgJ3R5cGUuaXNCaWdOdW1iZXInLCAndHlwZS5pc0ZyYWN0aW9uJywgJ3R5cGUuaXNVbml0JywgJ3R5cGUuaXNTdHJpbmcnLCAndHlwZS5pc0FycmF5JywgJ3R5cGUuaXNNYXRyaXgnLCAndHlwZS5pc0RlbnNlTWF0cml4JywgJ3R5cGUuaXNTcGFyc2VNYXRyaXgnLCAndHlwZS5pc0NvbGxlY3Rpb24nLCAndHlwZS5pc1JhbmdlJywgJ3R5cGUuaXNJbmRleCcsICd0eXBlLmlzQm9vbGVhbicsICd0eXBlLmlzUmVzdWx0U2V0JywgJ3R5cGUuaXNIZWxwJywgJ3R5cGUuaXNGdW5jdGlvbicsICd0eXBlLmlzRGF0ZScsICd0eXBlLmlzUmVnRXhwJywgJ3R5cGUuaXNPYmplY3QnLCAndHlwZS5pc051bGwnLCAndHlwZS5pc1VuZGVmaW5lZCcsICd0eXBlLmlzQWNjZXNzb3JOb2RlJywgJ3R5cGUuaXNBcnJheU5vZGUnLCAndHlwZS5pc0Fzc2lnbm1lbnROb2RlJywgJ3R5cGUuaXNCbG9ja05vZGUnLCAndHlwZS5pc0NvbmRpdGlvbmFsTm9kZScsICd0eXBlLmlzQ29uc3RhbnROb2RlJywgJ3R5cGUuaXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlJywgJ3R5cGUuaXNGdW5jdGlvbk5vZGUnLCAndHlwZS5pc0luZGV4Tm9kZScsICd0eXBlLmlzTm9kZScsICd0eXBlLmlzT2JqZWN0Tm9kZScsICd0eXBlLmlzT3BlcmF0b3JOb2RlJywgJ3R5cGUuaXNQYXJlbnRoZXNpc05vZGUnLCAndHlwZS5pc1JhbmdlTm9kZScsICd0eXBlLmlzU3ltYm9sTm9kZScsICd0eXBlLmlzQ2hhaW4nLCAndHlwZS5CaWdOdW1iZXInLCAndHlwZS5DaGFpbicsICd0eXBlLkNvbXBsZXgnLCAndHlwZS5GcmFjdGlvbicsICd0eXBlLk1hdHJpeCcsICd0eXBlLkRlbnNlTWF0cml4JywgJ3R5cGUuU3BhcnNlTWF0cml4JywgJ3R5cGUuU3BhJywgJ3R5cGUuRmlib25hY2NpSGVhcCcsICd0eXBlLkltbXV0YWJsZURlbnNlTWF0cml4JywgJ3R5cGUuSW5kZXgnLCAndHlwZS5SYW5nZScsICd0eXBlLlJlc3VsdFNldCcsICd0eXBlLlVuaXQnLCAndHlwZS5IZWxwJywgJ3R5cGUuUGFyc2VyJywgJ2V4cHJlc3Npb24ucGFyc2UnLCAnZXhwcmVzc2lvbi5QYXJzZXInLCAnZXhwcmVzc2lvbi5ub2RlLkFjY2Vzc29yTm9kZScsICdleHByZXNzaW9uLm5vZGUuQXJyYXlOb2RlJywgJ2V4cHJlc3Npb24ubm9kZS5Bc3NpZ25tZW50Tm9kZScsICdleHByZXNzaW9uLm5vZGUuQmxvY2tOb2RlJywgJ2V4cHJlc3Npb24ubm9kZS5Db25kaXRpb25hbE5vZGUnLCAnZXhwcmVzc2lvbi5ub2RlLkNvbnN0YW50Tm9kZScsICdleHByZXNzaW9uLm5vZGUuSW5kZXhOb2RlJywgJ2V4cHJlc3Npb24ubm9kZS5GdW5jdGlvbkFzc2lnbm1lbnROb2RlJywgJ2V4cHJlc3Npb24ubm9kZS5GdW5jdGlvbk5vZGUnLCAnZXhwcmVzc2lvbi5ub2RlLk5vZGUnLCAnZXhwcmVzc2lvbi5ub2RlLk9iamVjdE5vZGUnLCAnZXhwcmVzc2lvbi5ub2RlLk9wZXJhdG9yTm9kZScsICdleHByZXNzaW9uLm5vZGUuUGFyZW50aGVzaXNOb2RlJywgJ2V4cHJlc3Npb24ubm9kZS5SYW5nZU5vZGUnLCAnZXhwcmVzc2lvbi5ub2RlLlJlbGF0aW9uYWxOb2RlJywgJ2V4cHJlc3Npb24ubm9kZS5TeW1ib2xOb2RlJywgJ2pzb24ucmV2aXZlcicsICdlcnJvci5Bcmd1bWVudHNFcnJvcicsICdlcnJvci5EaW1lbnNpb25FcnJvcicsICdlcnJvci5JbmRleEVycm9yJ107XG4gIG1vdmVkTmFtZXMuZm9yRWFjaChmdW5jdGlvbiAoZnVsbE5hbWUpIHtcbiAgICB2YXIgcGFydHMgPSBmdWxsTmFtZS5zcGxpdCgnLicpO1xuICAgIHZhciBwYXRoID0gKDAsIF9hcnJheS5pbml0aWFsKShwYXJ0cyk7XG4gICAgdmFyIG5hbWUgPSAoMCwgX2FycmF5Lmxhc3QpKHBhcnRzKTtcbiAgICB2YXIgb2JqID0gKDAsIF9vYmplY3QudHJhdmVyc2UpKG1hdGgsIHBhdGgpO1xuICAgICgwLCBfb2JqZWN0LmxhenkpKG9iaiwgbmFtZSwgZnVuY3Rpb24gKCkge1xuICAgICAgKDAsIF9sb2cud2Fybk9uY2UpKFwibWF0aC5cIi5jb25jYXQoZnVsbE5hbWUsIFwiIGlzIG1vdmVkIHRvIG1hdGguXCIpLmNvbmNhdChuYW1lLCBcIiBpbiB2Ni4wLjAuIFwiKSArICdQbGVhc2UgdXNlIHRoZSBuZXcgbG9jYXRpb24gaW5zdGVhZC4nKTtcbiAgICAgIHJldHVybiBtYXRoW25hbWVdO1xuICAgIH0pO1xuICB9KTtcbiAgKDAsIF9vYmplY3QubGF6eSkobWF0aC5leHByZXNzaW9uLCAnZG9jcycsIGZ1bmN0aW9uICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21hdGguZXhwcmVzc2lvbi5kb2NzIGhhcyBiZWVuIG1vdmVkLiAnICsgJ1BsZWFzZSBpbXBvcnQgdmlhIFwiaW1wb3J0IHsgZG9jcyB9IGZyb20gXFwnbWF0aGpzXFwnXCInKTtcbiAgfSk7XG4gIG1hdGguQXJndW1lbnRzRXJyb3IgPSBfQXJndW1lbnRzRXJyb3IuQXJndW1lbnRzRXJyb3I7XG4gIG1hdGguRGltZW5zaW9uRXJyb3IgPSBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3I7XG4gIG1hdGguSW5kZXhFcnJvciA9IF9JbmRleEVycm9yLkluZGV4RXJyb3I7XG4gIHJldHVybiBtYXRoO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb25maWdGYWN0b3J5ID0gY29uZmlnRmFjdG9yeTtcbmV4cG9ydHMuTlVNQkVSX09QVElPTlMgPSBleHBvcnRzLk1BVFJJWF9PUFRJT05TID0gdm9pZCAwO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfY29uZmlnMiA9IHJlcXVpcmUoXCIuLi9jb25maWdcIik7XG5cbnZhciBNQVRSSVhfT1BUSU9OUyA9IFsnTWF0cml4JywgJ0FycmF5J107IC8vIHZhbGlkIHZhbHVlcyBmb3Igb3B0aW9uIG1hdHJpeFxuXG5leHBvcnRzLk1BVFJJWF9PUFRJT05TID0gTUFUUklYX09QVElPTlM7XG52YXIgTlVNQkVSX09QVElPTlMgPSBbJ251bWJlcicsICdCaWdOdW1iZXInLCAnRnJhY3Rpb24nXTsgLy8gdmFsaWQgdmFsdWVzIGZvciBvcHRpb24gbnVtYmVyXG5cbmV4cG9ydHMuTlVNQkVSX09QVElPTlMgPSBOVU1CRVJfT1BUSU9OUztcblxuZnVuY3Rpb24gY29uZmlnRmFjdG9yeShjb25maWcsIGVtaXQpIHtcbiAgLyoqXG4gICAqIFNldCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIG1hdGguanMsIGFuZCBnZXQgY3VycmVudCBvcHRpb25zLlxuICAgKiBXaWxsIGVtaXQgYSAnY29uZmlnJyBldmVudCwgd2l0aCBhcmd1bWVudHMgKGN1cnIsIHByZXYsIGNoYW5nZXMpLlxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYXZhaWxhYmxlIG9uIGEgbWF0aGpzIGluc3RhbmNlIGNyZWF0ZWQgdXNpbmcgYGNyZWF0ZWAuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguY29uZmlnKGNvbmZpZzogT2JqZWN0KTogT2JqZWN0XG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKlxuICAgKiAgICAgaW1wb3J0IHsgY3JlYXRlLCBhbGwgfSBmcm9tICdtYXRoanMnXG4gICAqXG4gICAqICAgICAvLyBjcmVhdGUgYSBtYXRoanMgaW5zdGFuY2VcbiAgICogICAgIGNvbnN0IG1hdGggPSBjcmVhdGUoYWxsKVxuICAgKlxuICAgKiAgICAgbWF0aC5jb25maWcoKS5udW1iZXIgICAgICAgICAgICAgICAgLy8gb3V0cHV0cyAnbnVtYmVyJ1xuICAgKiAgICAgbWF0aC5ldmFsdWF0ZSgnMC40JykgICAgICAgICAgICAgICAgLy8gb3V0cHV0cyBudW1iZXIgMC40XG4gICAqICAgICBtYXRoLmNvbmZpZyh7bnVtYmVyOiAnRnJhY3Rpb24nfSlcbiAgICogICAgIG1hdGguZXZhbHVhdGUoJzAuNCcpICAgICAgICAgICAgICAgIC8vIG91dHB1dHMgRnJhY3Rpb24gMi81XG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gQXZhaWxhYmxlIG9wdGlvbnM6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtudW1iZXJ9IGVwc2lsb25cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNaW5pbXVtIHJlbGF0aXZlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d29cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJlZCB2YWx1ZXMsIHVzZWQgYnkgYWxsIGNvbXBhcmlzb24gZnVuY3Rpb25zLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nfSBtYXRyaXhcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIHN0cmluZyAnTWF0cml4JyAoZGVmYXVsdCkgb3IgJ0FycmF5Jy5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0cmluZ30gbnVtYmVyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQSBzdHJpbmcgJ251bWJlcicgKGRlZmF1bHQpLCAnQmlnTnVtYmVyJywgb3IgJ0ZyYWN0aW9uJ1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bnVtYmVyfSBwcmVjaXNpb25cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cyBmb3IgQmlnTnVtYmVycy5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3QgYXBwbGljYWJsZSBmb3IgTnVtYmVycy5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0cmluZ30gcGFyZW50aGVzaXNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3cgdG8gZGlzcGxheSBwYXJlbnRoZXNlcyBpbiBMYVRlWCBhbmQgc3RyaW5nXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nfSByYW5kb21TZWVkXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmFuZG9tIHNlZWQgZm9yIHNlZWRlZCBwc2V1ZG8gcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0IHRvIG51bGwgdG8gcmFuZG9tbHkgc2VlZC5cbiAgICogQHJldHVybiB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIGZ1bmN0aW9uIF9jb25maWcob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICB2YXIgcHJldiA9ICgwLCBfb2JqZWN0Lm1hcE9iamVjdCkoY29uZmlnLCBfb2JqZWN0LmNsb25lKTsgLy8gdmFsaWRhdGUgc29tZSBvZiB0aGUgb3B0aW9uc1xuXG4gICAgICB2YWxpZGF0ZU9wdGlvbihvcHRpb25zLCAnbWF0cml4JywgTUFUUklYX09QVElPTlMpO1xuICAgICAgdmFsaWRhdGVPcHRpb24ob3B0aW9ucywgJ251bWJlcicsIE5VTUJFUl9PUFRJT05TKTsgLy8gbWVyZ2Ugb3B0aW9uc1xuXG4gICAgICAoMCwgX29iamVjdC5kZWVwRXh0ZW5kKShjb25maWcsIG9wdGlvbnMpO1xuICAgICAgdmFyIGN1cnIgPSAoMCwgX29iamVjdC5tYXBPYmplY3QpKGNvbmZpZywgX29iamVjdC5jbG9uZSk7XG4gICAgICB2YXIgY2hhbmdlcyA9ICgwLCBfb2JqZWN0Lm1hcE9iamVjdCkob3B0aW9ucywgX29iamVjdC5jbG9uZSk7IC8vIGVtaXQgJ2NvbmZpZycgZXZlbnRcblxuICAgICAgZW1pdCgnY29uZmlnJywgY3VyciwgcHJldiwgY2hhbmdlcyk7XG4gICAgICByZXR1cm4gY3VycjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICgwLCBfb2JqZWN0Lm1hcE9iamVjdCkoY29uZmlnLCBfb2JqZWN0LmNsb25lKTtcbiAgICB9XG4gIH0gLy8gYXR0YWNoIHRoZSB2YWxpZCBvcHRpb25zIHRvIHRoZSBmdW5jdGlvbiBzbyB0aGV5IGNhbiBiZSBleHRlbmRlZFxuXG5cbiAgX2NvbmZpZy5NQVRSSVhfT1BUSU9OUyA9IE1BVFJJWF9PUFRJT05TO1xuICBfY29uZmlnLk5VTUJFUl9PUFRJT05TID0gTlVNQkVSX09QVElPTlM7IC8vIGF0dGFjaCB0aGUgY29uZmlnIHByb3BlcnRpZXMgYXMgcmVhZG9ubHkgcHJvcGVydGllcyB0byB0aGUgY29uZmlnIGZ1bmN0aW9uXG5cbiAgT2JqZWN0LmtleXMoX2NvbmZpZzIuREVGQVVMVF9DT05GSUcpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY29uZmlnLCBrZXksIHtcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gY29uZmlnW2tleV07XG4gICAgICB9LFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIF9jb25maWc7XG59XG4vKipcbiAqIFRlc3Qgd2hldGhlciBhbiBBcnJheSBjb250YWlucyBhIHNwZWNpZmljIGl0ZW0uXG4gKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBhcnJheVxuICogQHBhcmFtIHtzdHJpbmd9IGl0ZW1cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cblxuXG5mdW5jdGlvbiBjb250YWlucyhhcnJheSwgaXRlbSkge1xuICByZXR1cm4gYXJyYXkuaW5kZXhPZihpdGVtKSAhPT0gLTE7XG59XG4vKipcbiAqIEZpbmQgYSBzdHJpbmcgaW4gYW4gYXJyYXkuIENhc2UgaW5zZW5zaXRpdmUgc2VhcmNoXG4gKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBhcnJheVxuICogQHBhcmFtIHtzdHJpbmd9IGl0ZW1cbiAqIEByZXR1cm4ge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggd2hlbiBmb3VuZC4gUmV0dXJucyAtMSB3aGVuIG5vdCBmb3VuZFxuICovXG5cblxuZnVuY3Rpb24gZmluZEluZGV4KGFycmF5LCBpdGVtKSB7XG4gIHJldHVybiBhcnJheS5tYXAoZnVuY3Rpb24gKGkpIHtcbiAgICByZXR1cm4gaS50b0xvd2VyQ2FzZSgpO1xuICB9KS5pbmRleE9mKGl0ZW0udG9Mb3dlckNhc2UoKSk7XG59XG4vKipcbiAqIFZhbGlkYXRlIGFuIG9wdGlvblxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgICAgICAgICBPYmplY3Qgd2l0aCBvcHRpb25zXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAgICAgICAgICAgIE5hbWUgb2YgdGhlIG9wdGlvbiB0byB2YWxpZGF0ZVxuICogQHBhcmFtIHtBcnJheS48c3RyaW5nPn0gdmFsdWVzICBBcnJheSB3aXRoIHZhbGlkIHZhbHVlcyBmb3IgdGhpcyBvcHRpb25cbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlT3B0aW9uKG9wdGlvbnMsIG5hbWUsIHZhbHVlcykge1xuICBpZiAob3B0aW9uc1tuYW1lXSAhPT0gdW5kZWZpbmVkICYmICFjb250YWlucyh2YWx1ZXMsIG9wdGlvbnNbbmFtZV0pKSB7XG4gICAgdmFyIGluZGV4ID0gZmluZEluZGV4KHZhbHVlcywgb3B0aW9uc1tuYW1lXSk7XG5cbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAvLyByaWdodCB2YWx1ZSwgd3JvbmcgY2FzaW5nXG4gICAgICAvLyBUT0RPOiBsb3dlciBjYXNlIHZhbHVlcyBhcmUgZGVwcmVjYXRlZCBzaW5jZSB2MywgcmVtb3ZlIHRoaXMgd2FybmluZyBzb21lIGRheS5cbiAgICAgIGNvbnNvbGUud2FybignV2FybmluZzogV3JvbmcgY2FzaW5nIGZvciBjb25maWd1cmF0aW9uIG9wdGlvbiBcIicgKyBuYW1lICsgJ1wiLCBzaG91bGQgYmUgXCInICsgdmFsdWVzW2luZGV4XSArICdcIiBpbnN0ZWFkIG9mIFwiJyArIG9wdGlvbnNbbmFtZV0gKyAnXCIuJyk7XG4gICAgICBvcHRpb25zW25hbWVdID0gdmFsdWVzW2luZGV4XTsgLy8gY2hhbmdlIHRoZSBvcHRpb24gdG8gdGhlIHJpZ2h0IGNhc2luZ1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB1bmtub3duIHZhbHVlXG4gICAgICBjb25zb2xlLndhcm4oJ1dhcm5pbmc6IFVua25vd24gdmFsdWUgXCInICsgb3B0aW9uc1tuYW1lXSArICdcIiBmb3IgY29uZmlndXJhdGlvbiBvcHRpb24gXCInICsgbmFtZSArICdcIi4gQXZhaWxhYmxlIG9wdGlvbnM6ICcgKyB2YWx1ZXMubWFwKEpTT04uc3RyaW5naWZ5KS5qb2luKCcsICcpICsgJy4nKTtcbiAgICB9XG4gIH1cbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRGVwcmVjYXRlZEltcG9ydCA9IGNyZWF0ZURlcHJlY2F0ZWRJbXBvcnQ7XG5cbmZ1bmN0aW9uIGNyZWF0ZURlcHJlY2F0ZWRJbXBvcnQoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBkZXByZWNhdGVkSW1wb3J0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIGdsb2JhbCBpbXBvcnQgZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZSBhbnltb3JlIGluIHY2LjAuMC4gXFxuJyArICdQbGVhc2UgY3JlYXRlIGEgbWF0aGpzIGluc3RhbmNlIGlmIHlvdSB3YW50IHRvIGltcG9ydCBmdW5jdGlvbnMuIFxcbicgKyAnRXhhbXBsZTpcXG4nICsgJ1xcbicgKyAnICBpbXBvcnQgeyBjcmVhdGUsIGFsbCB9IGZyb20gXFwnbWF0aGpzXFwnO1xcbicgKyAnICBjb25zdCBtYXRoanMgPSBjcmVhdGUoYWxsKTtcXG4nICsgJyAgbWF0aGpzLmltcG9ydCguLi4pO1xcbicpO1xuICB9O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pbXBvcnRGYWN0b3J5ID0gaW1wb3J0RmFjdG9yeTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9Bcmd1bWVudHNFcnJvciA9IHJlcXVpcmUoXCIuLi8uLi9lcnJvci9Bcmd1bWVudHNFcnJvclwiKTtcblxudmFyIF9sb2cgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbG9nXCIpO1xuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIGltcG9ydEZhY3RvcnkodHlwZWQsIGxvYWQsIG1hdGgsIGltcG9ydGVkRmFjdG9yaWVzKSB7XG4gIC8qKlxuICAgKiBJbXBvcnQgZnVuY3Rpb25zIGZyb20gYW4gb2JqZWN0IG9yIGEgbW9kdWxlLlxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYXZhaWxhYmxlIG9uIGEgbWF0aGpzIGluc3RhbmNlIGNyZWF0ZWQgdXNpbmcgYGNyZWF0ZWAuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5pbXBvcnQoZnVuY3Rpb25zKVxuICAgKiAgICBtYXRoLmltcG9ydChmdW5jdGlvbnMsIG9wdGlvbnMpXG4gICAqXG4gICAqIFdoZXJlOlxuICAgKlxuICAgKiAtIGBmdW5jdGlvbnM6IE9iamVjdGBcbiAgICogICBBbiBvYmplY3Qgd2l0aCBmdW5jdGlvbnMgb3IgZmFjdG9yaWVzIHRvIGJlIGltcG9ydGVkLlxuICAgKiAtIGBvcHRpb25zOiBPYmplY3RgIEFuIG9iamVjdCB3aXRoIGltcG9ydCBvcHRpb25zLiBBdmFpbGFibGUgb3B0aW9uczpcbiAgICogICAtIGBvdmVycmlkZTogYm9vbGVhbmBcbiAgICogICAgIElmIHRydWUsIGV4aXN0aW5nIGZ1bmN0aW9ucyB3aWxsIGJlIG92ZXJ3cml0dGVuLiBGYWxzZSBieSBkZWZhdWx0LlxuICAgKiAgIC0gYHNpbGVudDogYm9vbGVhbmBcbiAgICogICAgIElmIHRydWUsIHRoZSBmdW5jdGlvbiB3aWxsIG5vdCB0aHJvdyBlcnJvcnMgb24gZHVwbGljYXRlcyBvciBpbnZhbGlkXG4gICAqICAgICB0eXBlcy4gRmFsc2UgYnkgZGVmYXVsdC5cbiAgICogICAtIGB3cmFwOiBib29sZWFuYFxuICAgKiAgICAgSWYgdHJ1ZSwgdGhlIGZ1bmN0aW9ucyB3aWxsIGJlIHdyYXBwZWQgaW4gYSB3cmFwcGVyIGZ1bmN0aW9uXG4gICAqICAgICB3aGljaCBjb252ZXJ0cyBkYXRhIHR5cGVzIGxpa2UgTWF0cml4IHRvIHByaW1pdGl2ZSBkYXRhIHR5cGVzIGxpa2UgQXJyYXkuXG4gICAqICAgICBUaGUgd3JhcHBlciBpcyBuZWVkZWQgd2hlbiBleHRlbmRpbmcgbWF0aC5qcyB3aXRoIGxpYnJhcmllcyB3aGljaCBkbyBub3RcbiAgICogICAgIHN1cHBvcnQgdGhlc2UgZGF0YSB0eXBlLiBGYWxzZSBieSBkZWZhdWx0LlxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgaW1wb3J0IHsgY3JlYXRlLCBhbGwgfSBmcm9tICdtYXRoanMnXG4gICAqICAgIGltcG9ydCAqIGFzIG51bWJlcnMgZnJvbSAnbnVtYmVycydcbiAgICpcbiAgICogICAgLy8gY3JlYXRlIGEgbWF0aGpzIGluc3RhbmNlXG4gICAqICAgIGNvbnN0IG1hdGggPSBjcmVhdGUoYWxsKVxuICAgKlxuICAgKiAgICAvLyBkZWZpbmUgbmV3IGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzXG4gICAqICAgIG1hdGguaW1wb3J0KHtcbiAgICogICAgICBteXZhbHVlOiA0MixcbiAgICogICAgICBoZWxsbzogZnVuY3Rpb24gKG5hbWUpIHtcbiAgICogICAgICAgIHJldHVybiAnaGVsbG8sICcgKyBuYW1lICsgJyEnXG4gICAqICAgICAgfVxuICAgKiAgICB9KVxuICAgKlxuICAgKiAgICAvLyB1c2UgdGhlIGltcG9ydGVkIGZ1bmN0aW9uIGFuZCB2YXJpYWJsZVxuICAgKiAgICBtYXRoLm15dmFsdWUgKiAyICAgICAgICAgICAgICAgLy8gODRcbiAgICogICAgbWF0aC5oZWxsbygndXNlcicpICAgICAgICAgICAgIC8vICdoZWxsbywgdXNlciEnXG4gICAqXG4gICAqICAgIC8vIGltcG9ydCB0aGUgbnBtIG1vZHVsZSAnbnVtYmVycydcbiAgICogICAgLy8gKG11c3QgYmUgaW5zdGFsbGVkIGZpcnN0IHdpdGggYG5wbSBpbnN0YWxsIG51bWJlcnNgKVxuICAgKiAgICBtYXRoLmltcG9ydChudW1iZXJzLCB7d3JhcDogdHJ1ZX0pXG4gICAqXG4gICAqICAgIG1hdGguZmlib25hY2NpKDcpIC8vIHJldHVybnMgMTNcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3QgfCBBcnJheX0gZnVuY3Rpb25zICBPYmplY3Qgd2l0aCBmdW5jdGlvbnMgdG8gYmUgaW1wb3J0ZWQuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gICAgICAgICAgSW1wb3J0IG9wdGlvbnMuXG4gICAqL1xuICBmdW5jdGlvbiBtYXRoSW1wb3J0KGZ1bmN0aW9ucywgb3B0aW9ucykge1xuICAgIHZhciBudW0gPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgaWYgKG51bSAhPT0gMSAmJiBudW0gIT09IDIpIHtcbiAgICAgIHRocm93IG5ldyBfQXJndW1lbnRzRXJyb3IuQXJndW1lbnRzRXJyb3IoJ2ltcG9ydCcsIG51bSwgMSwgMik7XG4gICAgfVxuXG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmxhdHRlbkltcG9ydHMoZmxhdFZhbHVlcywgdmFsdWUsIG5hbWUpIHtcbiAgICAgIGlmICgoMCwgX29iamVjdC5pc0xlZ2FjeUZhY3RvcnkpKHZhbHVlKSkge1xuICAgICAgICAvLyBsZWdhY3kgZmFjdG9yaWVzIGRvbid0IGFsd2F5cyBoYXZlIGEgbmFtZSxcbiAgICAgICAgLy8gbGV0J3Mgbm90IGhhbmRsZSB0aGVtIHZpYSB0aGUgbmV3IGZsYXRWYWx1ZXNcbiAgICAgICAgX2ltcG9ydExlZ2FjeUZhY3RvcnkodmFsdWUsIG9wdGlvbnMpO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIGZsYXR0ZW5JbXBvcnRzKGZsYXRWYWx1ZXMsIGl0ZW0pO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoX3R5cGVvZih2YWx1ZSkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGZvciAodmFyIF9uYW1lIGluIHZhbHVlKSB7XG4gICAgICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KSh2YWx1ZSwgX25hbWUpKSB7XG4gICAgICAgICAgICBmbGF0dGVuSW1wb3J0cyhmbGF0VmFsdWVzLCB2YWx1ZVtfbmFtZV0sIF9uYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoKDAsIF9mYWN0b3J5LmlzRmFjdG9yeSkodmFsdWUpIHx8IG5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YXIgZmxhdE5hbWUgPSAoMCwgX2ZhY3RvcnkuaXNGYWN0b3J5KSh2YWx1ZSkgPyBpc1RyYW5zZm9ybUZ1bmN0aW9uRmFjdG9yeSh2YWx1ZSkgPyB2YWx1ZS5mbiArICcudHJhbnNmb3JtJyA6IC8vIFRPRE86IHRoaXMgaXMgdWdseVxuICAgICAgICB2YWx1ZS5mbiA6IG5hbWU7IC8vIHdlIGFsbG93IGltcG9ydGluZyB0aGUgc2FtZSBmdW5jdGlvbiB0d2ljZSBpZiBpdCBwb2ludHMgdG8gdGhlIHNhbWUgaW1wbGVtZW50YXRpb25cblxuICAgICAgICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKGZsYXRWYWx1ZXMsIGZsYXROYW1lKSAmJiBmbGF0VmFsdWVzW2ZsYXROYW1lXSAhPT0gdmFsdWUgJiYgIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW1wb3J0IFwiJyArIGZsYXROYW1lICsgJ1wiIHR3aWNlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBmbGF0VmFsdWVzW2ZsYXROYW1lXSA9IHZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ZhY3RvcnksIE9iamVjdCwgb3IgQXJyYXkgZXhwZWN0ZWQnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBmbGF0VmFsdWVzID0ge307XG4gICAgZmxhdHRlbkltcG9ydHMoZmxhdFZhbHVlcywgZnVuY3Rpb25zKTtcblxuICAgIGZvciAodmFyIG5hbWUgaW4gZmxhdFZhbHVlcykge1xuICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShmbGF0VmFsdWVzLCBuYW1lKSkge1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnaW1wb3J0JywgbmFtZSlcbiAgICAgICAgdmFyIHZhbHVlID0gZmxhdFZhbHVlc1tuYW1lXTtcblxuICAgICAgICBpZiAoKDAsIF9mYWN0b3J5LmlzRmFjdG9yeSkodmFsdWUpKSB7XG4gICAgICAgICAgLy8gd2UgaWdub3JlIG5hbWUgaGVyZSBhbmQgZW5mb3JjZSB0aGUgbmFtZSBvZiB0aGUgZmFjdG9yeVxuICAgICAgICAgIC8vIG1heWJlIGF0IHNvbWUgcG9pbnQgd2UgZG8gd2FudCB0byBhbGxvdyBvdmVycmlkaW5nIGl0XG4gICAgICAgICAgLy8gaW4gdGhhdCBjYXNlIHdlIGNhbiBpbXBsZW1lbnQgYW4gb3B0aW9uIG92ZXJyaWRlRmFjdG9yeU5hbWVzOiB0cnVlXG4gICAgICAgICAgX2ltcG9ydEZhY3RvcnkodmFsdWUsIG9wdGlvbnMpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzU3VwcG9ydGVkVHlwZSh2YWx1ZSkpIHtcbiAgICAgICAgICBfaW1wb3J0KG5hbWUsIHZhbHVlLCBvcHRpb25zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGYWN0b3J5LCBPYmplY3QsIG9yIEFycmF5IGV4cGVjdGVkJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBBZGQgYSBwcm9wZXJ0eSB0byB0aGUgbWF0aCBuYW1lc3BhY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAgU2VlIGltcG9ydCBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgb3B0aW9uc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9pbXBvcnQobmFtZSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgICAvLyBUT0RPOiByZWZhY3RvciB0aGlzIGZ1bmN0aW9uLCBpdCdzIHRvIGNvbXBsaWNhdGVkIGFuZCBjb250YWlucyBkdXBsaWNhdGUgY29kZVxuICAgIGlmIChvcHRpb25zLndyYXAgJiYgdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBjcmVhdGUgYSB3cmFwcGVyIGFyb3VuZCB0aGUgZnVuY3Rpb25cbiAgICAgIHZhbHVlID0gX3dyYXAodmFsdWUpO1xuICAgIH0gLy8gdHVybiBhIHBsYWluIGZ1bmN0aW9uIHdpdGggYSB0eXBlZC1mdW5jdGlvbiBzaWduYXR1cmUgaW50byBhIHR5cGVkLWZ1bmN0aW9uXG5cblxuICAgIGlmIChoYXNUeXBlZEZ1bmN0aW9uU2lnbmF0dXJlKHZhbHVlKSkge1xuICAgICAgdmFsdWUgPSB0eXBlZChuYW1lLCBfZGVmaW5lUHJvcGVydHkoe30sIHZhbHVlLnNpZ25hdHVyZSwgdmFsdWUpKTtcbiAgICB9XG5cbiAgICBpZiAoaXNUeXBlZEZ1bmN0aW9uKG1hdGhbbmFtZV0pICYmIGlzVHlwZWRGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgIGlmIChvcHRpb25zLm92ZXJyaWRlKSB7XG4gICAgICAgIC8vIGdpdmUgdGhlIHR5cGVkIGZ1bmN0aW9uIHRoZSByaWdodCBuYW1lXG4gICAgICAgIHZhbHVlID0gdHlwZWQobmFtZSwgdmFsdWUuc2lnbmF0dXJlcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBtZXJnZSB0aGUgZXhpc3RpbmcgYW5kIHR5cGVkIGZ1bmN0aW9uXG4gICAgICAgIHZhbHVlID0gdHlwZWQobWF0aFtuYW1lXSwgdmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBtYXRoW25hbWVdID0gdmFsdWU7XG4gICAgICBkZWxldGUgaW1wb3J0ZWRGYWN0b3JpZXNbbmFtZV07XG5cbiAgICAgIF9pbXBvcnRUcmFuc2Zvcm0obmFtZSwgdmFsdWUpO1xuXG4gICAgICBtYXRoLmVtaXQoJ2ltcG9ydCcsIG5hbWUsIGZ1bmN0aW9uIHJlc29sdmVyKCkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAobWF0aFtuYW1lXSA9PT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMub3ZlcnJpZGUpIHtcbiAgICAgIG1hdGhbbmFtZV0gPSB2YWx1ZTtcbiAgICAgIGRlbGV0ZSBpbXBvcnRlZEZhY3Rvcmllc1tuYW1lXTtcblxuICAgICAgX2ltcG9ydFRyYW5zZm9ybShuYW1lLCB2YWx1ZSk7XG5cbiAgICAgIG1hdGguZW1pdCgnaW1wb3J0JywgbmFtZSwgZnVuY3Rpb24gcmVzb2x2ZXIoKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGltcG9ydCBcIicgKyBuYW1lICsgJ1wiOiBhbHJlYWR5IGV4aXN0cycpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIF9pbXBvcnRUcmFuc2Zvcm0obmFtZSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlLnRyYW5zZm9ybSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbWF0aC5leHByZXNzaW9uLnRyYW5zZm9ybVtuYW1lXSA9IHZhbHVlLnRyYW5zZm9ybTtcblxuICAgICAgaWYgKGFsbG93ZWRJbkV4cHJlc3Npb25zKG5hbWUpKSB7XG4gICAgICAgIG1hdGguZXhwcmVzc2lvbi5tYXRoV2l0aFRyYW5zZm9ybVtuYW1lXSA9IHZhbHVlLnRyYW5zZm9ybTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gcmVtb3ZlIGV4aXN0aW5nIHRyYW5zZm9ybVxuICAgICAgZGVsZXRlIG1hdGguZXhwcmVzc2lvbi50cmFuc2Zvcm1bbmFtZV07XG5cbiAgICAgIGlmIChhbGxvd2VkSW5FeHByZXNzaW9ucyhuYW1lKSkge1xuICAgICAgICBtYXRoLmV4cHJlc3Npb24ubWF0aFdpdGhUcmFuc2Zvcm1bbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBfZGVsZXRlVHJhbnNmb3JtKG5hbWUpIHtcbiAgICBkZWxldGUgbWF0aC5leHByZXNzaW9uLnRyYW5zZm9ybVtuYW1lXTtcblxuICAgIGlmIChhbGxvd2VkSW5FeHByZXNzaW9ucyhuYW1lKSkge1xuICAgICAgbWF0aC5leHByZXNzaW9uLm1hdGhXaXRoVHJhbnNmb3JtW25hbWVdID0gbWF0aFtuYW1lXTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIG1hdGguZXhwcmVzc2lvbi5tYXRoV2l0aFRyYW5zZm9ybVtuYW1lXTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHdyYXBwZXIgYSByb3VuZCBhbiBmdW5jdGlvbiB3aGljaCBjb252ZXJ0cyB0aGUgYXJndW1lbnRzXG4gICAqIHRvIHRoZWlyIHByaW1pdGl2ZSB2YWx1ZXMgKGxpa2UgY29udmVydCBhIE1hdHJpeCB0byBBcnJheSlcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAgICogQHJldHVybiB7RnVuY3Rpb259IFJldHVybnMgdGhlIHdyYXBwZWQgZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBfd3JhcChmbikge1xuICAgIHZhciB3cmFwcGVyID0gZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICAgIHZhciBhcmdzID0gW107XG5cbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgdmFyIGFyZyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgYXJnc1tpXSA9IGFyZyAmJiBhcmcudmFsdWVPZigpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm4uYXBwbHkobWF0aCwgYXJncyk7XG4gICAgfTtcblxuICAgIGlmIChmbi50cmFuc2Zvcm0pIHtcbiAgICAgIHdyYXBwZXIudHJhbnNmb3JtID0gZm4udHJhbnNmb3JtO1xuICAgIH1cblxuICAgIHJldHVybiB3cmFwcGVyO1xuICB9XG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gaW5zdGFuY2Ugb2YgYSBmYWN0b3J5IGludG8gbWF0aC5qc1xuICAgKiBAcGFyYW0ge3tmYWN0b3J5OiBGdW5jdGlvbiwgbmFtZTogc3RyaW5nLCBwYXRoOiBzdHJpbmcsIG1hdGg6IGJvb2xlYW59fSBmYWN0b3J5XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zICBTZWUgaW1wb3J0IGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBvcHRpb25zXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICAvLyBUT0RPOiBfaW1wb3J0TGVnYWN5RmFjdG9yeSBpcyBkZXByZWNhdGVkIHNpbmNlIHY2LjAuMCwgY2xlYW4gdXAgc29tZSBkYXlcblxuXG4gIGZ1bmN0aW9uIF9pbXBvcnRMZWdhY3lGYWN0b3J5KGZhY3RvcnksIG9wdGlvbnMpIHtcbiAgICAoMCwgX2xvZy53YXJuT25jZSkoJ0ZhY3RvcmllcyBvZiB0eXBlIHsgbmFtZSwgZmFjdG9yeSB9IGFyZSBkZXByZWNhdGVkIHNpbmNlIHY2LiAnICsgJ1BsZWFzZSBjcmVhdGUgeW91ciBmYWN0b3J5IGZ1bmN0aW9ucyB1c2luZyB0aGUgbWF0aC5mYWN0b3J5IGZ1bmN0aW9uLicpO1xuXG4gICAgaWYgKHR5cGVvZiBmYWN0b3J5Lm5hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICB2YXIgbmFtZSA9IGZhY3RvcnkubmFtZTtcbiAgICAgIHZhciBleGlzdGluZ1RyYW5zZm9ybSA9IChuYW1lIGluIG1hdGguZXhwcmVzc2lvbi50cmFuc2Zvcm0pO1xuICAgICAgdmFyIG5hbWVzcGFjZSA9IGZhY3RvcnkucGF0aCA/ICgwLCBfb2JqZWN0LnRyYXZlcnNlKShtYXRoLCBmYWN0b3J5LnBhdGgpIDogbWF0aDtcbiAgICAgIHZhciBleGlzdGluZyA9ICgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShuYW1lc3BhY2UsIG5hbWUpID8gbmFtZXNwYWNlW25hbWVdIDogdW5kZWZpbmVkO1xuXG4gICAgICB2YXIgcmVzb2x2ZXIgPSBmdW5jdGlvbiByZXNvbHZlcigpIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gbG9hZChmYWN0b3J5KTtcblxuICAgICAgICBpZiAoaW5zdGFuY2UgJiYgdHlwZW9mIGluc3RhbmNlLnRyYW5zZm9ybSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVHJhbnNmb3JtcyBjYW5ub3QgYmUgYXR0YWNoZWQgdG8gZmFjdG9yeSBmdW5jdGlvbnMuICcgKyAnUGxlYXNlIGNyZWF0ZSBhIHNlcGFyYXRlIGZ1bmN0aW9uIGZvciBpdCB3aXRoIGV4cG9ydHMucGF0aD1cImV4cHJlc3Npb24udHJhbnNmb3JtXCInKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc1R5cGVkRnVuY3Rpb24oZXhpc3RpbmcpICYmIGlzVHlwZWRGdW5jdGlvbihpbnN0YW5jZSkpIHtcbiAgICAgICAgICBpZiAob3B0aW9ucy5vdmVycmlkZSkgey8vIHJlcGxhY2UgdGhlIGV4aXN0aW5nIHR5cGVkIGZ1bmN0aW9uIChub3RoaW5nIHRvIGRvKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBtZXJnZSB0aGUgZXhpc3RpbmcgYW5kIG5ldyB0eXBlZCBmdW5jdGlvblxuICAgICAgICAgICAgaW5zdGFuY2UgPSB0eXBlZChleGlzdGluZywgaW5zdGFuY2UpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChleGlzdGluZyA9PT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMub3ZlcnJpZGUpIHtcbiAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW1wb3J0IFwiJyArIG5hbWUgKyAnXCI6IGFscmVhZHkgZXhpc3RzJyk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGlmIChmYWN0b3J5LmxhenkgIT09IGZhbHNlKSB7XG4gICAgICAgICgwLCBfb2JqZWN0LmxhenkpKG5hbWVzcGFjZSwgbmFtZSwgcmVzb2x2ZXIpO1xuXG4gICAgICAgIGlmIChleGlzdGluZ1RyYW5zZm9ybSkge1xuICAgICAgICAgIF9kZWxldGVUcmFuc2Zvcm0obmFtZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGZhY3RvcnkucGF0aCA9PT0gJ2V4cHJlc3Npb24udHJhbnNmb3JtJyB8fCBsZWdhY3lGYWN0b3J5QWxsb3dlZEluRXhwcmVzc2lvbnMoZmFjdG9yeSkpIHtcbiAgICAgICAgICAgICgwLCBfb2JqZWN0LmxhenkpKG1hdGguZXhwcmVzc2lvbi5tYXRoV2l0aFRyYW5zZm9ybSwgbmFtZSwgcmVzb2x2ZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmFtZXNwYWNlW25hbWVdID0gcmVzb2x2ZXIoKTtcblxuICAgICAgICBpZiAoZXhpc3RpbmdUcmFuc2Zvcm0pIHtcbiAgICAgICAgICBfZGVsZXRlVHJhbnNmb3JtKG5hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChmYWN0b3J5LnBhdGggPT09ICdleHByZXNzaW9uLnRyYW5zZm9ybScgfHwgbGVnYWN5RmFjdG9yeUFsbG93ZWRJbkV4cHJlc3Npb25zKGZhY3RvcnkpKSB7XG4gICAgICAgICAgICBtYXRoLmV4cHJlc3Npb24ubWF0aFdpdGhUcmFuc2Zvcm1bbmFtZV0gPSByZXNvbHZlcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIga2V5ID0gZmFjdG9yeS5wYXRoID8gZmFjdG9yeS5wYXRoICsgJy4nICsgZmFjdG9yeS5uYW1lIDogZmFjdG9yeS5uYW1lO1xuICAgICAgaW1wb3J0ZWRGYWN0b3JpZXNba2V5XSA9IGZhY3Rvcnk7XG4gICAgICBtYXRoLmVtaXQoJ2ltcG9ydCcsIG5hbWUsIHJlc29sdmVyLCBmYWN0b3J5LnBhdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB1bm5hbWVkIGZhY3RvcnkuXG4gICAgICAvLyBubyBsYXp5IGxvYWRpbmdcbiAgICAgIGxvYWQoZmFjdG9yeSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gaW5zdGFuY2Ugb2YgYSBmYWN0b3J5IGludG8gbWF0aC5qc1xuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKHNjb3BlOiBvYmplY3QpfSBmYWN0b3J5XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zICBTZWUgaW1wb3J0IGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBvcHRpb25zXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZT1mYWN0b3J5Lm5hbWVdIE9wdGlvbmFsIGN1c3RvbSBuYW1lXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX2ltcG9ydEZhY3RvcnkoZmFjdG9yeSwgb3B0aW9ucykge1xuICAgIHZhciBuYW1lID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmYWN0b3J5LmZuO1xuXG4gICAgaWYgKCgwLCBfYXJyYXkuY29udGFpbnMpKG5hbWUsICcuJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmFjdG9yeSBuYW1lIHNob3VsZCBub3QgY29udGFpbiBhIG5lc3RlZCBwYXRoLiAnICsgJ05hbWU6ICcgKyBKU09OLnN0cmluZ2lmeShuYW1lKSk7XG4gICAgfVxuXG4gICAgdmFyIG5hbWVzcGFjZSA9IGlzVHJhbnNmb3JtRnVuY3Rpb25GYWN0b3J5KGZhY3RvcnkpID8gbWF0aC5leHByZXNzaW9uLnRyYW5zZm9ybSA6IG1hdGg7XG4gICAgdmFyIGV4aXN0aW5nVHJhbnNmb3JtID0gKG5hbWUgaW4gbWF0aC5leHByZXNzaW9uLnRyYW5zZm9ybSk7XG4gICAgdmFyIGV4aXN0aW5nID0gKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKG5hbWVzcGFjZSwgbmFtZSkgPyBuYW1lc3BhY2VbbmFtZV0gOiB1bmRlZmluZWQ7XG5cbiAgICB2YXIgcmVzb2x2ZXIgPSBmdW5jdGlvbiByZXNvbHZlcigpIHtcbiAgICAgIC8vIGNvbGxlY3QgYWxsIGRlcGVuZGVuY2llcywgaGFuZGxlIGZpbmRpbmcgYm90aCBmdW5jdGlvbnMgYW5kIGNsYXNzZXMgYW5kIG90aGVyIHNwZWNpYWwgY2FzZXNcbiAgICAgIHZhciBkZXBlbmRlbmNpZXMgPSB7fTtcbiAgICAgIGZhY3RvcnkuZGVwZW5kZW5jaWVzLm1hcChfZmFjdG9yeS5zdHJpcE9wdGlvbmFsTm90YXRpb24pLmZvckVhY2goZnVuY3Rpb24gKGRlcGVuZGVuY3kpIHtcbiAgICAgICAgaWYgKCgwLCBfYXJyYXkuY29udGFpbnMpKGRlcGVuZGVuY3ksICcuJykpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhY3RvcnkgZGVwZW5kZW5jeSBzaG91bGQgbm90IGNvbnRhaW4gYSBuZXN0ZWQgcGF0aC4gJyArICdOYW1lOiAnICsgSlNPTi5zdHJpbmdpZnkoZGVwZW5kZW5jeSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlcGVuZGVuY3kgPT09ICdtYXRoJykge1xuICAgICAgICAgIGRlcGVuZGVuY2llcy5tYXRoID0gbWF0aDtcbiAgICAgICAgfSBlbHNlIGlmIChkZXBlbmRlbmN5ID09PSAnbWF0aFdpdGhUcmFuc2Zvcm0nKSB7XG4gICAgICAgICAgZGVwZW5kZW5jaWVzLm1hdGhXaXRoVHJhbnNmb3JtID0gbWF0aC5leHByZXNzaW9uLm1hdGhXaXRoVHJhbnNmb3JtO1xuICAgICAgICB9IGVsc2UgaWYgKGRlcGVuZGVuY3kgPT09ICdjbGFzc2VzJykge1xuICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZSBmb3IganNvbiByZXZpdmVyXG4gICAgICAgICAgZGVwZW5kZW5jaWVzLmNsYXNzZXMgPSBtYXRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlcGVuZGVuY2llc1tkZXBlbmRlbmN5XSA9IG1hdGhbZGVwZW5kZW5jeV07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdmFyIGluc3RhbmNlID0gLyogI19fUFVSRV9fICovZmFjdG9yeShkZXBlbmRlbmNpZXMpO1xuXG4gICAgICBpZiAoaW5zdGFuY2UgJiYgdHlwZW9mIGluc3RhbmNlLnRyYW5zZm9ybSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RyYW5zZm9ybXMgY2Fubm90IGJlIGF0dGFjaGVkIHRvIGZhY3RvcnkgZnVuY3Rpb25zLiAnICsgJ1BsZWFzZSBjcmVhdGUgYSBzZXBhcmF0ZSBmdW5jdGlvbiBmb3IgaXQgd2l0aCBleHBvcnRzLnBhdGg9XCJleHByZXNzaW9uLnRyYW5zZm9ybVwiJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChleGlzdGluZyA9PT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMub3ZlcnJpZGUpIHtcbiAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNUeXBlZEZ1bmN0aW9uKGV4aXN0aW5nKSAmJiBpc1R5cGVkRnVuY3Rpb24oaW5zdGFuY2UpKSB7XG4gICAgICAgIC8vIG1lcmdlIHRoZSBleGlzdGluZyBhbmQgbmV3IHR5cGVkIGZ1bmN0aW9uXG4gICAgICAgIHJldHVybiB0eXBlZChleGlzdGluZywgaW5zdGFuY2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgLy8ga2VlcCBleGlzdGluZywgaWdub3JlIGltcG9ydGVkIGZ1bmN0aW9uXG4gICAgICAgIHJldHVybiBleGlzdGluZztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGltcG9ydCBcIicgKyBuYW1lICsgJ1wiOiBhbHJlYWR5IGV4aXN0cycpO1xuICAgICAgfVxuICAgIH07IC8vIFRPRE86IGFkZCB1bml0IHRlc3Qgd2l0aCBub24tbGF6eSBmYWN0b3J5XG5cblxuICAgIGlmICghZmFjdG9yeS5tZXRhIHx8IGZhY3RvcnkubWV0YS5sYXp5ICE9PSBmYWxzZSkge1xuICAgICAgKDAsIF9vYmplY3QubGF6eSkobmFtZXNwYWNlLCBuYW1lLCByZXNvbHZlcik7IC8vIEZJWE1FOiByZW1vdmUgdGhlIGBpZiAoZXhpc3RpbmcgJiZgIGNvbmRpdGlvbiBhZ2Fpbi4gQ2FuIHdlIG1ha2Ugc3VyZSBzdWJzZXQgaXMgbG9hZGVkIGJlZm9yZSBzdWJzZXQudHJhbnNmb3JtPyAoTmFtZSBjb2xsaXNpb24sIGFuZCBubyBkZXBlbmRlbmNpZXMgYmV0d2VlbiB0aGUgdHdvKVxuXG4gICAgICBpZiAoZXhpc3RpbmcgJiYgZXhpc3RpbmdUcmFuc2Zvcm0pIHtcbiAgICAgICAgX2RlbGV0ZVRyYW5zZm9ybShuYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc1RyYW5zZm9ybUZ1bmN0aW9uRmFjdG9yeShmYWN0b3J5KSB8fCBmYWN0b3J5QWxsb3dlZEluRXhwcmVzc2lvbnMoZmFjdG9yeSkpIHtcbiAgICAgICAgICAoMCwgX29iamVjdC5sYXp5KShtYXRoLmV4cHJlc3Npb24ubWF0aFdpdGhUcmFuc2Zvcm0sIG5hbWUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBuYW1lc3BhY2VbbmFtZV07XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbmFtZXNwYWNlW25hbWVdID0gcmVzb2x2ZXIoKTsgLy8gRklYTUU6IHJlbW92ZSB0aGUgYGlmIChleGlzdGluZyAmJmAgY29uZGl0aW9uIGFnYWluLiBDYW4gd2UgbWFrZSBzdXJlIHN1YnNldCBpcyBsb2FkZWQgYmVmb3JlIHN1YnNldC50cmFuc2Zvcm0/IChOYW1lIGNvbGxpc2lvbiwgYW5kIG5vIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRoZSB0d28pXG5cbiAgICAgIGlmIChleGlzdGluZyAmJiBleGlzdGluZ1RyYW5zZm9ybSkge1xuICAgICAgICBfZGVsZXRlVHJhbnNmb3JtKG5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzVHJhbnNmb3JtRnVuY3Rpb25GYWN0b3J5KGZhY3RvcnkpIHx8IGZhY3RvcnlBbGxvd2VkSW5FeHByZXNzaW9ucyhmYWN0b3J5KSkge1xuICAgICAgICAgICgwLCBfb2JqZWN0LmxhenkpKG1hdGguZXhwcmVzc2lvbi5tYXRoV2l0aFRyYW5zZm9ybSwgbmFtZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5hbWVzcGFjZVtuYW1lXTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gVE9ETzogaW1wcm92ZSBmYWN0b3JpZXMsIHN0b3JlIGEgbGlzdCB3aXRoIGltcG9ydHMgaW5zdGVhZCB3aGljaCBjYW4gYmUgcmUtcGxheWVkXG5cblxuICAgIGltcG9ydGVkRmFjdG9yaWVzW25hbWVdID0gZmFjdG9yeTtcbiAgICBtYXRoLmVtaXQoJ2ltcG9ydCcsIG5hbWUsIHJlc29sdmVyKTtcbiAgfVxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciBnaXZlbiBvYmplY3QgaXMgYSB0eXBlIHdoaWNoIGNhbiBiZSBpbXBvcnRlZFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uIHwgbnVtYmVyIHwgc3RyaW5nIHwgYm9vbGVhbiB8IG51bGwgfCBVbml0IHwgQ29tcGxleH0gb2JqZWN0XG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gaXNTdXBwb3J0ZWRUeXBlKG9iamVjdCkge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBvYmplY3QgPT09ICdudW1iZXInIHx8IHR5cGVvZiBvYmplY3QgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBvYmplY3QgPT09ICdib29sZWFuJyB8fCBvYmplY3QgPT09IG51bGwgfHwgKDAsIF9pcy5pc1VuaXQpKG9iamVjdCkgfHwgKDAsIF9pcy5pc0NvbXBsZXgpKG9iamVjdCkgfHwgKDAsIF9pcy5pc0JpZ051bWJlcikob2JqZWN0KSB8fCAoMCwgX2lzLmlzRnJhY3Rpb24pKG9iamVjdCkgfHwgKDAsIF9pcy5pc01hdHJpeCkob2JqZWN0KSB8fCBBcnJheS5pc0FycmF5KG9iamVjdCk7XG4gIH1cbiAgLyoqXG4gICAqIFRlc3Qgd2hldGhlciBhIGdpdmVuIHRoaW5nIGlzIGEgdHlwZWQtZnVuY3Rpb25cbiAgICogQHBhcmFtIHsqfSBmblxuICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgd2hlbiBgZm5gIGlzIGEgdHlwZWQtZnVuY3Rpb25cbiAgICovXG5cblxuICBmdW5jdGlvbiBpc1R5cGVkRnVuY3Rpb24oZm4pIHtcbiAgICByZXR1cm4gdHlwZW9mIGZuID09PSAnZnVuY3Rpb24nICYmIF90eXBlb2YoZm4uc2lnbmF0dXJlcykgPT09ICdvYmplY3QnO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFzVHlwZWRGdW5jdGlvblNpZ25hdHVyZShmbikge1xuICAgIHJldHVybiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGZuLnNpZ25hdHVyZSA9PT0gJ3N0cmluZyc7XG4gIH1cblxuICBmdW5jdGlvbiBhbGxvd2VkSW5FeHByZXNzaW9ucyhuYW1lKSB7XG4gICAgcmV0dXJuICEoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkodW5zYWZlLCBuYW1lKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxlZ2FjeUZhY3RvcnlBbGxvd2VkSW5FeHByZXNzaW9ucyhmYWN0b3J5KSB7XG4gICAgcmV0dXJuIGZhY3RvcnkucGF0aCA9PT0gdW5kZWZpbmVkICYmICEoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkodW5zYWZlLCBmYWN0b3J5Lm5hbWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gZmFjdG9yeUFsbG93ZWRJbkV4cHJlc3Npb25zKGZhY3RvcnkpIHtcbiAgICByZXR1cm4gZmFjdG9yeS5mbi5pbmRleE9mKCcuJykgPT09IC0xICYmIC8vIEZJWE1FOiBtYWtlIGNoZWNraW5nIG9uIHBhdGggcmVkdW5kYW50LCBjaGVjayBvbiBtZXRhIGRhdGEgaW5zdGVhZFxuICAgICEoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkodW5zYWZlLCBmYWN0b3J5LmZuKSAmJiAoIWZhY3RvcnkubWV0YSB8fCAhZmFjdG9yeS5tZXRhLmlzQ2xhc3MpO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNUcmFuc2Zvcm1GdW5jdGlvbkZhY3RvcnkoZmFjdG9yeSkge1xuICAgIHJldHVybiBmYWN0b3J5ICE9PSB1bmRlZmluZWQgJiYgZmFjdG9yeS5tZXRhICE9PSB1bmRlZmluZWQgJiYgZmFjdG9yeS5tZXRhLmlzVHJhbnNmb3JtRnVuY3Rpb24gPT09IHRydWUgfHwgZmFsc2U7XG4gIH0gLy8gbmFtZXNwYWNlcyBhbmQgZnVuY3Rpb25zIG5vdCBhdmFpbGFibGUgaW4gdGhlIHBhcnNlciBmb3Igc2FmZXR5IHJlYXNvbnNcblxuXG4gIHZhciB1bnNhZmUgPSB7XG4gICAgZXhwcmVzc2lvbjogdHJ1ZSxcbiAgICB0eXBlOiB0cnVlLFxuICAgIGRvY3M6IHRydWUsXG4gICAgZXJyb3I6IHRydWUsXG4gICAganNvbjogdHJ1ZSxcbiAgICBjaGFpbjogdHJ1ZSAvLyBjaGFpbiBtZXRob2Qgbm90IHN1cHBvcnRlZC4gTm90ZSB0aGF0IHRoZXJlIGlzIGEgdW5pdCBjaGFpbiB0b28uXG5cbiAgfTtcbiAgcmV0dXJuIG1hdGhJbXBvcnQ7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVR5cGVkID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX3R5cGVkRnVuY3Rpb24gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJ0eXBlZC1mdW5jdGlvblwiKSk7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG4vKipcbiAqIENyZWF0ZSBhIHR5cGVkLWZ1bmN0aW9uIHdoaWNoIGNoZWNrcyB0aGUgdHlwZXMgb2YgdGhlIGFyZ3VtZW50cyBhbmRcbiAqIGNhbiBtYXRjaCB0aGVtIGFnYWluc3QgbXVsdGlwbGUgcHJvdmlkZWQgc2lnbmF0dXJlcy4gVGhlIHR5cGVkLWZ1bmN0aW9uXG4gKiBhdXRvbWF0aWNhbGx5IGNvbnZlcnRzIGlucHV0cyBpbiBvcmRlciB0byBmaW5kIGEgbWF0Y2hpbmcgc2lnbmF0dXJlLlxuICogVHlwZWQgZnVuY3Rpb25zIHRocm93IGluZm9ybWF0aXZlIGVycm9ycyBpbiBjYXNlIG9mIHdyb25nIGlucHV0IGFyZ3VtZW50cy5cbiAqXG4gKiBTZWUgdGhlIGxpYnJhcnkgW3R5cGVkLWZ1bmN0aW9uXShodHRwczovL2dpdGh1Yi5jb20vam9zZGVqb25nL3R5cGVkLWZ1bmN0aW9uKVxuICogZm9yIGRldGFpbGVkIGRvY3VtZW50YXRpb24uXG4gKlxuICogU3ludGF4OlxuICpcbiAqICAgICBtYXRoLnR5cGVkKG5hbWUsIHNpZ25hdHVyZXMpIDogZnVuY3Rpb25cbiAqICAgICBtYXRoLnR5cGVkKHNpZ25hdHVyZXMpIDogZnVuY3Rpb25cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgICAgLy8gY3JlYXRlIGEgdHlwZWQgZnVuY3Rpb24gd2l0aCBtdWx0aXBsZSB0eXBlcyBwZXIgYXJndW1lbnQgKHR5cGUgdW5pb24pXG4gKiAgICAgY29uc3QgZm4yID0gdHlwZWQoe1xuICogICAgICAgJ251bWJlciB8IGJvb2xlYW4nOiBmdW5jdGlvbiAoYikge1xuICogICAgICAgICByZXR1cm4gJ2IgaXMgYSBudW1iZXIgb3IgYm9vbGVhbidcbiAqICAgICAgIH0sXG4gKiAgICAgICAnc3RyaW5nLCBudW1iZXIgfCBib29sZWFuJzogZnVuY3Rpb24gKGEsIGIpIHtcbiAqICAgICAgICAgcmV0dXJuICdhIGlzIGEgc3RyaW5nLCBiIGlzIGEgbnVtYmVyIG9yIGJvb2xlYW4nXG4gKiAgICAgICB9XG4gKiAgICAgfSlcbiAqXG4gKiAgICAgLy8gY3JlYXRlIGEgdHlwZWQgZnVuY3Rpb24gd2l0aCBhbiBhbnkgdHlwZSBhcmd1bWVudFxuICogICAgIGNvbnN0IGxvZyA9IHR5cGVkKHtcbiAqICAgICAgICdzdHJpbmcsIGFueSc6IGZ1bmN0aW9uIChldmVudCwgZGF0YSkge1xuICogICAgICAgICBjb25zb2xlLmxvZygnZXZlbnQ6ICcgKyBldmVudCArICcsIGRhdGE6ICcgKyBKU09OLnN0cmluZ2lmeShkYXRhKSlcbiAqICAgICAgIH1cbiAqICAgICB9KVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZV0gICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbmFsIG5hbWUgZm9yIHRoZSB0eXBlZC1mdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBmdW5jdGlvbj59IHNpZ25hdHVyZXMgICBPYmplY3Qgd2l0aCBvbmUgb3IgbXVsdGlwbGUgZnVuY3Rpb24gc2lnbmF0dXJlc1xuICogQHJldHVybnMge2Z1bmN0aW9ufSBUaGUgY3JlYXRlZCB0eXBlZC1mdW5jdGlvbi5cbiAqL1xuLy8gcmV0dXJucyBhIG5ldyBpbnN0YW5jZSBvZiB0eXBlZC1mdW5jdGlvblxudmFyIF9jcmVhdGVUeXBlZDIgPSBmdW5jdGlvbiBfY3JlYXRlVHlwZWQoKSB7XG4gIC8vIGluaXRpYWxseSwgcmV0dXJuIHRoZSBvcmlnaW5hbCBpbnN0YW5jZSBvZiB0eXBlZC1mdW5jdGlvblxuICAvLyBjb25zZWN1dGl2ZWx5LCByZXR1cm4gYSBuZXcgaW5zdGFuY2UgZnJvbSB0eXBlZC5jcmVhdGUuXG4gIF9jcmVhdGVUeXBlZDIgPSBfdHlwZWRGdW5jdGlvbltcImRlZmF1bHRcIl0uY3JlYXRlO1xuICByZXR1cm4gX3R5cGVkRnVuY3Rpb25bXCJkZWZhdWx0XCJdO1xufTtcblxudmFyIGRlcGVuZGVuY2llcyA9IFsnP0JpZ051bWJlcicsICc/Q29tcGxleCcsICc/RGVuc2VNYXRyaXgnLCAnP0ZyYWN0aW9uJ107XG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGEgbmV3IHR5cGVkIGluc3RhbmNlXG4gKiBAcGFyYW0ge09iamVjdH0gZGVwZW5kZW5jaWVzICAgT2JqZWN0IHdpdGggZGF0YSB0eXBlcyBsaWtlIENvbXBsZXggYW5kIEJpZ051bWJlclxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5cbnZhciBjcmVhdGVUeXBlZCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KSgndHlwZWQnLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIGNyZWF0ZVR5cGVkKF9yZWYpIHtcbiAgdmFyIEJpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyLFxuICAgICAgQ29tcGxleCA9IF9yZWYuQ29tcGxleCxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeCxcbiAgICAgIEZyYWN0aW9uID0gX3JlZi5GcmFjdGlvbjtcblxuICAvLyBUT0RPOiB0eXBlZC1mdW5jdGlvbiBtdXN0IGJlIGFibGUgdG8gc2lsZW50bHkgaWdub3JlIHNpZ25hdHVyZXMgd2l0aCB1bmtub3duIGRhdGEgdHlwZXNcbiAgLy8gZ2V0IGEgbmV3IGluc3RhbmNlIG9mIHR5cGVkLWZ1bmN0aW9uXG4gIHZhciB0eXBlZCA9IF9jcmVhdGVUeXBlZDIoKTsgLy8gZGVmaW5lIGFsbCB0eXBlcy4gVGhlIG9yZGVyIG9mIHRoZSB0eXBlcyBkZXRlcm1pbmVzIGluIHdoaWNoIG9yZGVyIGZ1bmN0aW9uXG4gIC8vIGFyZ3VtZW50cyBhcmUgdHlwZS1jaGVja2VkIChzbyBmb3IgcGVyZm9ybWFuY2UgaXQncyBpbXBvcnRhbnQgdG8gcHV0IHRoZVxuICAvLyBtb3N0IHVzZWQgdHlwZXMgZmlyc3QpLlxuXG5cbiAgdHlwZWQudHlwZXMgPSBbe1xuICAgIG5hbWU6ICdudW1iZXInLFxuICAgIHRlc3Q6IF9pcy5pc051bWJlclxuICB9LCB7XG4gICAgbmFtZTogJ0NvbXBsZXgnLFxuICAgIHRlc3Q6IF9pcy5pc0NvbXBsZXhcbiAgfSwge1xuICAgIG5hbWU6ICdCaWdOdW1iZXInLFxuICAgIHRlc3Q6IF9pcy5pc0JpZ051bWJlclxuICB9LCB7XG4gICAgbmFtZTogJ0ZyYWN0aW9uJyxcbiAgICB0ZXN0OiBfaXMuaXNGcmFjdGlvblxuICB9LCB7XG4gICAgbmFtZTogJ1VuaXQnLFxuICAgIHRlc3Q6IF9pcy5pc1VuaXRcbiAgfSwge1xuICAgIG5hbWU6ICdzdHJpbmcnLFxuICAgIHRlc3Q6IF9pcy5pc1N0cmluZ1xuICB9LCB7XG4gICAgbmFtZTogJ0NoYWluJyxcbiAgICB0ZXN0OiBfaXMuaXNDaGFpblxuICB9LCB7XG4gICAgbmFtZTogJ0FycmF5JyxcbiAgICB0ZXN0OiBfaXMuaXNBcnJheVxuICB9LCB7XG4gICAgbmFtZTogJ01hdHJpeCcsXG4gICAgdGVzdDogX2lzLmlzTWF0cml4XG4gIH0sIHtcbiAgICBuYW1lOiAnRGVuc2VNYXRyaXgnLFxuICAgIHRlc3Q6IF9pcy5pc0RlbnNlTWF0cml4XG4gIH0sIHtcbiAgICBuYW1lOiAnU3BhcnNlTWF0cml4JyxcbiAgICB0ZXN0OiBfaXMuaXNTcGFyc2VNYXRyaXhcbiAgfSwge1xuICAgIG5hbWU6ICdSYW5nZScsXG4gICAgdGVzdDogX2lzLmlzUmFuZ2VcbiAgfSwge1xuICAgIG5hbWU6ICdJbmRleCcsXG4gICAgdGVzdDogX2lzLmlzSW5kZXhcbiAgfSwge1xuICAgIG5hbWU6ICdib29sZWFuJyxcbiAgICB0ZXN0OiBfaXMuaXNCb29sZWFuXG4gIH0sIHtcbiAgICBuYW1lOiAnUmVzdWx0U2V0JyxcbiAgICB0ZXN0OiBfaXMuaXNSZXN1bHRTZXRcbiAgfSwge1xuICAgIG5hbWU6ICdIZWxwJyxcbiAgICB0ZXN0OiBfaXMuaXNIZWxwXG4gIH0sIHtcbiAgICBuYW1lOiAnZnVuY3Rpb24nLFxuICAgIHRlc3Q6IF9pcy5pc0Z1bmN0aW9uXG4gIH0sIHtcbiAgICBuYW1lOiAnRGF0ZScsXG4gICAgdGVzdDogX2lzLmlzRGF0ZVxuICB9LCB7XG4gICAgbmFtZTogJ1JlZ0V4cCcsXG4gICAgdGVzdDogX2lzLmlzUmVnRXhwXG4gIH0sIHtcbiAgICBuYW1lOiAnbnVsbCcsXG4gICAgdGVzdDogX2lzLmlzTnVsbFxuICB9LCB7XG4gICAgbmFtZTogJ3VuZGVmaW5lZCcsXG4gICAgdGVzdDogX2lzLmlzVW5kZWZpbmVkXG4gIH0sIHtcbiAgICBuYW1lOiAnQWNjZXNzb3JOb2RlJyxcbiAgICB0ZXN0OiBfaXMuaXNBY2Nlc3Nvck5vZGVcbiAgfSwge1xuICAgIG5hbWU6ICdBcnJheU5vZGUnLFxuICAgIHRlc3Q6IF9pcy5pc0FycmF5Tm9kZVxuICB9LCB7XG4gICAgbmFtZTogJ0Fzc2lnbm1lbnROb2RlJyxcbiAgICB0ZXN0OiBfaXMuaXNBc3NpZ25tZW50Tm9kZVxuICB9LCB7XG4gICAgbmFtZTogJ0Jsb2NrTm9kZScsXG4gICAgdGVzdDogX2lzLmlzQmxvY2tOb2RlXG4gIH0sIHtcbiAgICBuYW1lOiAnQ29uZGl0aW9uYWxOb2RlJyxcbiAgICB0ZXN0OiBfaXMuaXNDb25kaXRpb25hbE5vZGVcbiAgfSwge1xuICAgIG5hbWU6ICdDb25zdGFudE5vZGUnLFxuICAgIHRlc3Q6IF9pcy5pc0NvbnN0YW50Tm9kZVxuICB9LCB7XG4gICAgbmFtZTogJ0Z1bmN0aW9uTm9kZScsXG4gICAgdGVzdDogX2lzLmlzRnVuY3Rpb25Ob2RlXG4gIH0sIHtcbiAgICBuYW1lOiAnRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZScsXG4gICAgdGVzdDogX2lzLmlzRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZVxuICB9LCB7XG4gICAgbmFtZTogJ0luZGV4Tm9kZScsXG4gICAgdGVzdDogX2lzLmlzSW5kZXhOb2RlXG4gIH0sIHtcbiAgICBuYW1lOiAnTm9kZScsXG4gICAgdGVzdDogX2lzLmlzTm9kZVxuICB9LCB7XG4gICAgbmFtZTogJ09iamVjdE5vZGUnLFxuICAgIHRlc3Q6IF9pcy5pc09iamVjdE5vZGVcbiAgfSwge1xuICAgIG5hbWU6ICdPcGVyYXRvck5vZGUnLFxuICAgIHRlc3Q6IF9pcy5pc09wZXJhdG9yTm9kZVxuICB9LCB7XG4gICAgbmFtZTogJ1BhcmVudGhlc2lzTm9kZScsXG4gICAgdGVzdDogX2lzLmlzUGFyZW50aGVzaXNOb2RlXG4gIH0sIHtcbiAgICBuYW1lOiAnUmFuZ2VOb2RlJyxcbiAgICB0ZXN0OiBfaXMuaXNSYW5nZU5vZGVcbiAgfSwge1xuICAgIG5hbWU6ICdTeW1ib2xOb2RlJyxcbiAgICB0ZXN0OiBfaXMuaXNTeW1ib2xOb2RlXG4gIH0sIHtcbiAgICBuYW1lOiAnT2JqZWN0JyxcbiAgICB0ZXN0OiBfaXMuaXNPYmplY3RcbiAgfSAvLyBvcmRlciAnT2JqZWN0JyBsYXN0LCBpdCBtYXRjaGVzIG9uIG90aGVyIGNsYXNzZXMgdG9vXG4gIF07XG4gIHR5cGVkLmNvbnZlcnNpb25zID0gW3tcbiAgICBmcm9tOiAnbnVtYmVyJyxcbiAgICB0bzogJ0JpZ051bWJlcicsXG4gICAgY29udmVydDogZnVuY3Rpb24gY29udmVydCh4KSB7XG4gICAgICBpZiAoIUJpZ051bWJlcikge1xuICAgICAgICB0aHJvd05vQmlnbnVtYmVyKHgpO1xuICAgICAgfSAvLyBub3RlOiBjb252ZXJzaW9uIGZyb20gbnVtYmVyIHRvIEJpZ051bWJlciBjYW4gZmFpbCBpZiB4IGhhcyA+MTUgZGlnaXRzXG5cblxuICAgICAgaWYgKCgwLCBfbnVtYmVyLmRpZ2l0cykoeCkgPiAxNSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgaW1wbGljaXRseSBjb252ZXJ0IGEgbnVtYmVyIHdpdGggPjE1IHNpZ25pZmljYW50IGRpZ2l0cyB0byBCaWdOdW1iZXIgJyArICcodmFsdWU6ICcgKyB4ICsgJykuICcgKyAnVXNlIGZ1bmN0aW9uIGJpZ251bWJlcih4KSB0byBjb252ZXJ0IHRvIEJpZ051bWJlci4nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoeCk7XG4gICAgfVxuICB9LCB7XG4gICAgZnJvbTogJ251bWJlcicsXG4gICAgdG86ICdDb21wbGV4JyxcbiAgICBjb252ZXJ0OiBmdW5jdGlvbiBjb252ZXJ0KHgpIHtcbiAgICAgIGlmICghQ29tcGxleCkge1xuICAgICAgICB0aHJvd05vQ29tcGxleCh4KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgsIDApO1xuICAgIH1cbiAgfSwge1xuICAgIGZyb206ICdudW1iZXInLFxuICAgIHRvOiAnc3RyaW5nJyxcbiAgICBjb252ZXJ0OiBmdW5jdGlvbiBjb252ZXJ0KHgpIHtcbiAgICAgIHJldHVybiB4ICsgJyc7XG4gICAgfVxuICB9LCB7XG4gICAgZnJvbTogJ0JpZ051bWJlcicsXG4gICAgdG86ICdDb21wbGV4JyxcbiAgICBjb252ZXJ0OiBmdW5jdGlvbiBjb252ZXJ0KHgpIHtcbiAgICAgIGlmICghQ29tcGxleCkge1xuICAgICAgICB0aHJvd05vQ29tcGxleCh4KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgudG9OdW1iZXIoKSwgMCk7XG4gICAgfVxuICB9LCB7XG4gICAgZnJvbTogJ0ZyYWN0aW9uJyxcbiAgICB0bzogJ0JpZ051bWJlcicsXG4gICAgY29udmVydDogZnVuY3Rpb24gY29udmVydCh4KSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgaW1wbGljaXRseSBjb252ZXJ0IGEgRnJhY3Rpb24gdG8gQmlnTnVtYmVyIG9yIHZpY2UgdmVyc2EuICcgKyAnVXNlIGZ1bmN0aW9uIGJpZ251bWJlcih4KSB0byBjb252ZXJ0IHRvIEJpZ051bWJlciBvciBmcmFjdGlvbih4KSB0byBjb252ZXJ0IHRvIEZyYWN0aW9uLicpO1xuICAgIH1cbiAgfSwge1xuICAgIGZyb206ICdGcmFjdGlvbicsXG4gICAgdG86ICdDb21wbGV4JyxcbiAgICBjb252ZXJ0OiBmdW5jdGlvbiBjb252ZXJ0KHgpIHtcbiAgICAgIGlmICghQ29tcGxleCkge1xuICAgICAgICB0aHJvd05vQ29tcGxleCh4KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgudmFsdWVPZigpLCAwKTtcbiAgICB9XG4gIH0sIHtcbiAgICBmcm9tOiAnbnVtYmVyJyxcbiAgICB0bzogJ0ZyYWN0aW9uJyxcbiAgICBjb252ZXJ0OiBmdW5jdGlvbiBjb252ZXJ0KHgpIHtcbiAgICAgIGlmICghRnJhY3Rpb24pIHtcbiAgICAgICAgdGhyb3dOb0ZyYWN0aW9uKHgpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZiA9IG5ldyBGcmFjdGlvbih4KTtcblxuICAgICAgaWYgKGYudmFsdWVPZigpICE9PSB4KSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBpbXBsaWNpdGx5IGNvbnZlcnQgYSBudW1iZXIgdG8gYSBGcmFjdGlvbiB3aGVuIHRoZXJlIHdpbGwgYmUgYSBsb3NzIG9mIHByZWNpc2lvbiAnICsgJyh2YWx1ZTogJyArIHggKyAnKS4gJyArICdVc2UgZnVuY3Rpb24gZnJhY3Rpb24oeCkgdG8gY29udmVydCB0byBGcmFjdGlvbi4nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGY7XG4gICAgfVxuICB9LCB7XG4gICAgLy8gRklYTUU6IGFkZCBjb252ZXJzaW9uIGZyb20gRnJhY3Rpb24gdG8gbnVtYmVyLCBmb3IgZXhhbXBsZSBmb3IgYHNxcnQoZnJhY3Rpb24oMSwzKSlgXG4gICAgLy8gIGZyb206ICdGcmFjdGlvbicsXG4gICAgLy8gIHRvOiAnbnVtYmVyJyxcbiAgICAvLyAgY29udmVydDogZnVuY3Rpb24gKHgpIHtcbiAgICAvLyAgICByZXR1cm4geC52YWx1ZU9mKClcbiAgICAvLyAgfVxuICAgIC8vIH0sIHtcbiAgICBmcm9tOiAnc3RyaW5nJyxcbiAgICB0bzogJ251bWJlcicsXG4gICAgY29udmVydDogZnVuY3Rpb24gY29udmVydCh4KSB7XG4gICAgICB2YXIgbiA9IE51bWJlcih4KTtcblxuICAgICAgaWYgKGlzTmFOKG4pKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbnZlcnQgXCInICsgeCArICdcIiB0byBhIG51bWJlcicpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbjtcbiAgICB9XG4gIH0sIHtcbiAgICBmcm9tOiAnc3RyaW5nJyxcbiAgICB0bzogJ0JpZ051bWJlcicsXG4gICAgY29udmVydDogZnVuY3Rpb24gY29udmVydCh4KSB7XG4gICAgICBpZiAoIUJpZ051bWJlcikge1xuICAgICAgICB0aHJvd05vQmlnbnVtYmVyKHgpO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbmV3IEJpZ051bWJlcih4KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IFwiJyArIHggKyAnXCIgdG8gQmlnTnVtYmVyJyk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAgZnJvbTogJ3N0cmluZycsXG4gICAgdG86ICdGcmFjdGlvbicsXG4gICAgY29udmVydDogZnVuY3Rpb24gY29udmVydCh4KSB7XG4gICAgICBpZiAoIUZyYWN0aW9uKSB7XG4gICAgICAgIHRocm93Tm9GcmFjdGlvbih4KTtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbih4KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IFwiJyArIHggKyAnXCIgdG8gRnJhY3Rpb24nKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBmcm9tOiAnc3RyaW5nJyxcbiAgICB0bzogJ0NvbXBsZXgnLFxuICAgIGNvbnZlcnQ6IGZ1bmN0aW9uIGNvbnZlcnQoeCkge1xuICAgICAgaWYgKCFDb21wbGV4KSB7XG4gICAgICAgIHRocm93Tm9Db21wbGV4KHgpO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoeCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY29udmVydCBcIicgKyB4ICsgJ1wiIHRvIENvbXBsZXgnKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBmcm9tOiAnYm9vbGVhbicsXG4gICAgdG86ICdudW1iZXInLFxuICAgIGNvbnZlcnQ6IGZ1bmN0aW9uIGNvbnZlcnQoeCkge1xuICAgICAgcmV0dXJuICt4O1xuICAgIH1cbiAgfSwge1xuICAgIGZyb206ICdib29sZWFuJyxcbiAgICB0bzogJ0JpZ051bWJlcicsXG4gICAgY29udmVydDogZnVuY3Rpb24gY29udmVydCh4KSB7XG4gICAgICBpZiAoIUJpZ051bWJlcikge1xuICAgICAgICB0aHJvd05vQmlnbnVtYmVyKHgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IEJpZ051bWJlcigreCk7XG4gICAgfVxuICB9LCB7XG4gICAgZnJvbTogJ2Jvb2xlYW4nLFxuICAgIHRvOiAnRnJhY3Rpb24nLFxuICAgIGNvbnZlcnQ6IGZ1bmN0aW9uIGNvbnZlcnQoeCkge1xuICAgICAgaWYgKCFGcmFjdGlvbikge1xuICAgICAgICB0aHJvd05vRnJhY3Rpb24oeCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24oK3gpO1xuICAgIH1cbiAgfSwge1xuICAgIGZyb206ICdib29sZWFuJyxcbiAgICB0bzogJ3N0cmluZycsXG4gICAgY29udmVydDogZnVuY3Rpb24gY29udmVydCh4KSB7XG4gICAgICByZXR1cm4gU3RyaW5nKHgpO1xuICAgIH1cbiAgfSwge1xuICAgIGZyb206ICdBcnJheScsXG4gICAgdG86ICdNYXRyaXgnLFxuICAgIGNvbnZlcnQ6IGZ1bmN0aW9uIGNvbnZlcnQoYXJyYXkpIHtcbiAgICAgIGlmICghRGVuc2VNYXRyaXgpIHtcbiAgICAgICAgdGhyb3dOb01hdHJpeCgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IERlbnNlTWF0cml4KGFycmF5KTtcbiAgICB9XG4gIH0sIHtcbiAgICBmcm9tOiAnTWF0cml4JyxcbiAgICB0bzogJ0FycmF5JyxcbiAgICBjb252ZXJ0OiBmdW5jdGlvbiBjb252ZXJ0KG1hdHJpeCkge1xuICAgICAgcmV0dXJuIG1hdHJpeC52YWx1ZU9mKCk7XG4gICAgfVxuICB9XTtcbiAgcmV0dXJuIHR5cGVkO1xufSk7XG5leHBvcnRzLmNyZWF0ZVR5cGVkID0gY3JlYXRlVHlwZWQ7XG5cbmZ1bmN0aW9uIHRocm93Tm9CaWdudW1iZXIoeCkge1xuICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgY29udmVydCB2YWx1ZSBcIi5jb25jYXQoeCwgXCIgaW50byBhIEJpZ051bWJlcjogbm8gY2xhc3MgJ0JpZ051bWJlcicgcHJvdmlkZWRcIikpO1xufVxuXG5mdW5jdGlvbiB0aHJvd05vQ29tcGxleCh4KSB7XG4gIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBjb252ZXJ0IHZhbHVlIFwiLmNvbmNhdCh4LCBcIiBpbnRvIGEgQ29tcGxleCBudW1iZXI6IG5vIGNsYXNzICdDb21wbGV4JyBwcm92aWRlZFwiKSk7XG59XG5cbmZ1bmN0aW9uIHRocm93Tm9NYXRyaXgoKSB7XG4gIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbnZlcnQgYXJyYXkgaW50byBhIE1hdHJpeDogbm8gY2xhc3MgXFwnRGVuc2VNYXRyaXhcXCcgcHJvdmlkZWQnKTtcbn1cblxuZnVuY3Rpb24gdGhyb3dOb0ZyYWN0aW9uKHgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGNvbnZlcnQgdmFsdWUgXCIuY29uY2F0KHgsIFwiIGludG8gYSBGcmFjdGlvbiwgbm8gY2xhc3MgJ0ZyYWN0aW9uJyBwcm92aWRlZC5cIikpO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFsbCA9IHZvaWQgMDtcblxudmFyIGFsbEZhY3RvcmllcyA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuLi9mYWN0b3JpZXNBbnlcIikpO1xuXG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoKSB7IGlmICh0eXBlb2YgV2Vha01hcCAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gbnVsbDsgdmFyIGNhY2hlID0gbmV3IFdlYWtNYXAoKTsgX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlID0gZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKCkgeyByZXR1cm4gY2FjaGU7IH07IHJldHVybiBjYWNoZTsgfVxuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChvYmopIHsgaWYgKG9iaiAmJiBvYmouX19lc01vZHVsZSkgeyByZXR1cm4gb2JqOyB9IGlmIChvYmogPT09IG51bGwgfHwgX3R5cGVvZihvYmopICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBvYmogIT09IFwiZnVuY3Rpb25cIikgeyByZXR1cm4geyBcImRlZmF1bHRcIjogb2JqIH07IH0gdmFyIGNhY2hlID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKCk7IGlmIChjYWNoZSAmJiBjYWNoZS5oYXMob2JqKSkgeyByZXR1cm4gY2FjaGUuZ2V0KG9iaik7IH0gdmFyIG5ld09iaiA9IHt9OyB2YXIgaGFzUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7IGZvciAodmFyIGtleSBpbiBvYmopIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHsgdmFyIGRlc2MgPSBoYXNQcm9wZXJ0eURlc2NyaXB0b3IgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwga2V5KSA6IG51bGw7IGlmIChkZXNjICYmIChkZXNjLmdldCB8fCBkZXNjLnNldCkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5ld09iaiwga2V5LCBkZXNjKTsgfSBlbHNlIHsgbmV3T2JqW2tleV0gPSBvYmpba2V5XTsgfSB9IH0gbmV3T2JqW1wiZGVmYXVsdFwiXSA9IG9iajsgaWYgKGNhY2hlKSB7IGNhY2hlLnNldChvYmosIG5ld09iaik7IH0gcmV0dXJuIG5ld09iajsgfVxuXG4vLyBjcmVhdGluZyBhbGwgZmFjdG9yaWVzIGhlcmUgaW4gYSBzZXBhcmF0ZSBmaWxlIGlzIG5lZWRlZCB0byBnZXQgdHJlZS1zaGFraW5nIHdvcmtpbmdcbnZhciBhbGwgPSBhbGxGYWN0b3JpZXM7XG5leHBvcnRzLmFsbCA9IGFsbDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29uZmlnID0gdm9pZCAwO1xuXG52YXIgX2NvbmZpZyA9IHJlcXVpcmUoXCIuLi9jb3JlL2NvbmZpZ1wiKTtcblxudmFyIF9jb25maWcyID0gcmVxdWlyZShcIi4uL2NvcmUvZnVuY3Rpb24vY29uZmlnXCIpO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG4vLyBjcmVhdGUgYSByZWFkLW9ubHkgdmVyc2lvbiBvZiBjb25maWdcbnZhciBjb25maWcgPSAvKiAjX19QVVJFX18gKi9mdW5jdGlvbiBjb25maWcob3B0aW9ucykge1xuICBpZiAob3B0aW9ucykge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIGdsb2JhbCBjb25maWcgaXMgcmVhZG9ubHkuIFxcbicgKyAnUGxlYXNlIGNyZWF0ZSBhIG1hdGhqcyBpbnN0YW5jZSBpZiB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbi4gXFxuJyArICdFeGFtcGxlOlxcbicgKyAnXFxuJyArICcgIGltcG9ydCB7IGNyZWF0ZSwgYWxsIH0gZnJvbSBcXCdtYXRoanNcXCc7XFxuJyArICcgIGNvbnN0IG1hdGhqcyA9IGNyZWF0ZShhbGwpO1xcbicgKyAnICBtYXRoanMuY29uZmlnKHsgbnVtYmVyOiBcXCdCaWdOdW1iZXJcXCcgfSk7XFxuJyk7XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmZyZWV6ZShfY29uZmlnLkRFRkFVTFRfQ09ORklHKTtcbn07XG5cbmV4cG9ydHMuY29uZmlnID0gY29uZmlnO1xuXG5fZXh0ZW5kcyhjb25maWcsIF9jb25maWcuREVGQVVMVF9DT05GSUcsIHtcbiAgTUFUUklYX09QVElPTlM6IF9jb25maWcyLk1BVFJJWF9PUFRJT05TLFxuICBOVU1CRVJfT1BUSU9OUzogX2NvbmZpZzIuTlVNQkVSX09QVElPTlNcbn0pOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHlwZWREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJlc3VsdFNldERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUmVzdWx0U2V0LlJlc3VsdFNldERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJCaWdOdW1iZXJEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJDb21wbGV4RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJGcmFjdGlvbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRnJhY3Rpb25DbGFzcy5GcmFjdGlvbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJSYW5nZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUmFuZ2VDbGFzcy5SYW5nZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJNYXRyaXhEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc01hdHJpeENsYXNzLk1hdHJpeERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJEZW5zZU1hdHJpeERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjbG9uZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ2xvbmUuY2xvbmVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNJbnRlZ2VyRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNJc0ludGVnZXIuaXNJbnRlZ2VyRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzTmVnYXRpdmVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0lzTmVnYXRpdmUuaXNOZWdhdGl2ZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc051bWVyaWNEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0lzTnVtZXJpYy5pc051bWVyaWNEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaGFzTnVtZXJpY1ZhbHVlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNIYXNOdW1lcmljVmFsdWUuaGFzTnVtZXJpY1ZhbHVlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzUG9zaXRpdmVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0lzUG9zaXRpdmUuaXNQb3NpdGl2ZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc1plcm9EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0lzWmVyby5pc1plcm9EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNOYU5EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0lzTmFOLmlzTmFORGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInR5cGVPZkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVHlwZU9mLnR5cGVPZkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0eXBlb2ZEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0RlcHJlY2F0ZWRUeXBlb2YudHlwZW9mRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5lcXVhbFNjYWxhckRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTcGFyc2VNYXRyaXhEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzLlNwYXJzZU1hdHJpeERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJudW1iZXJEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc051bWJlci5udW1iZXJEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RyaW5nRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTdHJpbmcuc3RyaW5nRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImJvb2xlYW5EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0Jvb2xlYW4uYm9vbGVhbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJiaWdudW1iZXJEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0JpZ251bWJlci5iaWdudW1iZXJEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29tcGxleERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ29tcGxleC5jb21wbGV4RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZyYWN0aW9uRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNGcmFjdGlvbi5mcmFjdGlvbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtYXRyaXhEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3BsaXRVbml0RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTcGxpdFVuaXQuc3BsaXRVbml0RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInVuYXJ5TWludXNEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1VuYXJ5TWludXMudW5hcnlNaW51c0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ1bmFyeVBsdXNEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1VuYXJ5UGx1cy51bmFyeVBsdXNEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYWJzRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBYnMuYWJzRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFwcGx5RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBcHBseS5hcHBseURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhZGRTY2FsYXJEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0FkZFNjYWxhci5hZGRTY2FsYXJEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY2JydERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ2JydC5jYnJ0RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNlaWxEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NlaWwuY2VpbERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjdWJlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDdWJlLmN1YmVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZXhwRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNFeHAuZXhwRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImV4cG0xRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNFeHBtLmV4cG0xRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZpeERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRml4LmZpeERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmbG9vckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRmxvb3IuZmxvb3JEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2NkRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNHY2QuZ2NkRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImxjbURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTGNtLmxjbURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsb2cxMERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTG9nLmxvZzEwRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImxvZzJEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0xvZzIubG9nMkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtb2REZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc01vZC5tb2REZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLm11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm11bHRpcGx5RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNNdWx0aXBseS5tdWx0aXBseURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJudGhSb290RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNOdGhSb290Lm50aFJvb3REZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2lnbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU2lnbi5zaWduRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNxcnREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NxcnQuc3FydERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzcXVhcmVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NxdWFyZS5zcXVhcmVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3VidHJhY3REZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1N1YnRyYWN0LnN1YnRyYWN0RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInhnY2REZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1hnY2QueGdjZERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkb3RNdWx0aXBseURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRG90TXVsdGlwbHkuZG90TXVsdGlwbHlEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYml0QW5kRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNCaXRBbmQuYml0QW5kRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImJpdE5vdERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQml0Tm90LmJpdE5vdERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJiaXRPckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQml0T3IuYml0T3JEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYml0WG9yRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNCaXRYb3IuYml0WG9yRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFyZ0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQXJnLmFyZ0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb25qRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDb25qLmNvbmpEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaW1EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0ltLmltRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNSZS5yZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJub3REZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc05vdC5ub3REZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwib3JEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc09yLm9yRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInhvckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzWG9yLnhvckRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb25jYXREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NvbmNhdC5jb25jYXREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29sdW1uRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDb2x1bW4uY29sdW1uRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyb3NzRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDcm9zcy5jcm9zc0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkaWFnRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNEaWFnLmRpYWdEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZXllRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNFeWUuZXllRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZpbHRlckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRmlsdGVyLmZpbHRlckRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmbGF0dGVuRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNGbGF0dGVuLmZsYXR0ZW5EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZm9yRWFjaERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRm9yRWFjaC5mb3JFYWNoRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdldE1hdHJpeERhdGFUeXBlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNHZXRNYXRyaXhEYXRhVHlwZS5nZXRNYXRyaXhEYXRhVHlwZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpZGVudGl0eURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzSWRlbnRpdHkuaWRlbnRpdHlEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwia3JvbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzS3Jvbi5rcm9uRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1hcERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTWFwLm1hcERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJvbmVzRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNPbmVzLm9uZXNEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmFuZ2VEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1JhbmdlLnJhbmdlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlc2hhcGVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1Jlc2hhcGUucmVzaGFwZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZXNpemVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1Jlc2l6ZS5yZXNpemVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicm93RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNSb3cucm93RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNpemVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NpemUuc2l6ZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzcXVlZXplRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTcXVlZXplLnNxdWVlemVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3Vic2V0RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTdWJzZXQuc3Vic2V0RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRyYW5zcG9zZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVHJhbnNwb3NlLnRyYW5zcG9zZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjdHJhbnNwb3NlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDdHJhbnNwb3NlLmN0cmFuc3Bvc2VEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiemVyb3NEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1plcm9zLnplcm9zRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVyZkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRXJmLmVyZkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtb2RlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNNb2RlLm1vZGVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicHJvZERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUHJvZC5wcm9kRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZvcm1hdERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRm9ybWF0LmZvcm1hdERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwcmludERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUHJpbnQucHJpbnREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidG9EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1RvLnRvRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzUHJpbWVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0lzUHJpbWUuaXNQcmltZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJudW1lcmljRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNOdW1lcmljLm51bWVyaWNEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInBvd0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUG93LnBvd0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyb3VuZERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUm91bmQucm91bmREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibG9nRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNMb2czLmxvZ0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsb2cxcERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTG9nMXAubG9nMXBEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibnRoUm9vdHNEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc050aFJvb3RzLm50aFJvb3RzRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRvdFBvd0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRG90UG93LmRvdFBvd0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkb3REaXZpZGVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0RvdERpdmlkZS5kb3REaXZpZGVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibHNvbHZlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNMc29sdmUubHNvbHZlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInVzb2x2ZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVXNvbHZlLnVzb2x2ZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsZWZ0U2hpZnREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0xlZnRTaGlmdC5sZWZ0U2hpZnREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmlnaHRBcml0aFNoaWZ0RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNSaWdodEFyaXRoU2hpZnQucmlnaHRBcml0aFNoaWZ0RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJpZ2h0TG9nU2hpZnREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1JpZ2h0TG9nU2hpZnQucmlnaHRMb2dTaGlmdERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhbmREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0FuZC5hbmREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29tcGFyZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ29tcGFyZS5jb21wYXJlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvbXBhcmVOYXR1cmFsRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbC5jb21wYXJlTmF0dXJhbERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb21wYXJlVGV4dERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ29tcGFyZVRleHQuY29tcGFyZVRleHREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZXF1YWxEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0VxdWFsLmVxdWFsRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVxdWFsVGV4dERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRXF1YWxUZXh0LmVxdWFsVGV4dERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzbWFsbGVyRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTbWFsbGVyLnNtYWxsZXJEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic21hbGxlckVxRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTbWFsbGVyRXEuc21hbGxlckVxRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImxhcmdlckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTGFyZ2VyLmxhcmdlckRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsYXJnZXJFcURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTGFyZ2VyRXEubGFyZ2VyRXFEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVlcEVxdWFsRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNEZWVwRXF1YWwuZGVlcEVxdWFsRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInVuZXF1YWxEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1VuZXF1YWwudW5lcXVhbERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwYXJ0aXRpb25TZWxlY3REZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1BhcnRpdGlvblNlbGVjdC5wYXJ0aXRpb25TZWxlY3REZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic29ydERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU29ydC5zb3J0RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1heERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTWF4Lm1heERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtaW5EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc01pbi5taW5EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSW1tdXRhYmxlRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0ltbXV0YWJsZURlbnNlTWF0cml4Q2xhc3MuSW1tdXRhYmxlRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSW5kZXhEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuSW5kZXhEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRmlib25hY2NpSGVhcERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRmlib25hY2NpSGVhcENsYXNzLkZpYm9uYWNjaUhlYXBEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU3BhRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTcGFDbGFzcy5TcGFEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVW5pdERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidW5pdERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVW5pdEZ1bmN0aW9uLnVuaXREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3BhcnNlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTcGFyc2Uuc3BhcnNlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVVuaXREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NyZWF0ZVVuaXQuY3JlYXRlVW5pdERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhY29zRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBY29zLmFjb3NEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYWNvc2hEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0Fjb3NoLmFjb3NoRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFjb3REZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0Fjb3QuYWNvdERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhY290aERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQWNvdGguYWNvdGhEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYWNzY0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQWNzYy5hY3NjRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFjc2NoRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBY3NjaC5hY3NjaERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhc2VjRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBc2VjLmFzZWNEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXNlY2hEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0FzZWNoLmFzZWNoRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFzaW5EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0FzaW4uYXNpbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhc2luaERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQXNpbmguYXNpbmhEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXRhbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQXRhbi5hdGFuRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImF0YW4yRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBdGFuMi5hdGFuMkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhdGFuaERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQXRhbmguYXRhbmhEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29zRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDb3MuY29zRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvc2hEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0Nvc2guY29zaERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb3REZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NvdC5jb3REZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY290aERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ290aC5jb3RoRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNzY0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ3NjLmNzY0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjc2NoRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDc2NoLmNzY2hEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2VjRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTZWMuc2VjRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNlY2hEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NlY2guc2VjaERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzaW5EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1Npbi5zaW5EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2luaERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU2luaC5zaW5oRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRhbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVGFuLnRhbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0YW5oRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNUYW5oLnRhbmhEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2V0Q2FydGVzaWFuRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTZXRDYXJ0ZXNpYW4uc2V0Q2FydGVzaWFuRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNldERpZmZlcmVuY2VEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NldERpZmZlcmVuY2Uuc2V0RGlmZmVyZW5jZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzZXREaXN0aW5jdERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU2V0RGlzdGluY3Quc2V0RGlzdGluY3REZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2V0SW50ZXJzZWN0RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTZXRJbnRlcnNlY3Quc2V0SW50ZXJzZWN0RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNldElzU3Vic2V0RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTZXRJc1N1YnNldC5zZXRJc1N1YnNldERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzZXRNdWx0aXBsaWNpdHlEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NldE11bHRpcGxpY2l0eS5zZXRNdWx0aXBsaWNpdHlEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2V0UG93ZXJzZXREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NldFBvd2Vyc2V0LnNldFBvd2Vyc2V0RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNldFNpemVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NldFNpemUuc2V0U2l6ZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzZXRTeW1EaWZmZXJlbmNlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTZXRTeW1EaWZmZXJlbmNlLnNldFN5bURpZmZlcmVuY2VEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2V0VW5pb25EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NldFVuaW9uLnNldFVuaW9uRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFkZERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQWRkLmFkZERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJoeXBvdERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzSHlwb3QuaHlwb3REZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTm9ybS5ub3JtRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRvdERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRG90LmRvdERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0cmFjZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVHJhY2UudHJhY2VEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaW5kZXhEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0luZGV4LmluZGV4RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk5vZGVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc05vZGUuTm9kZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJBY2Nlc3Nvck5vZGVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0FjY2Vzc29yTm9kZS5BY2Nlc3Nvck5vZGVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQXJyYXlOb2RlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBcnJheU5vZGUuQXJyYXlOb2RlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkFzc2lnbm1lbnROb2RlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBc3NpZ25tZW50Tm9kZS5Bc3NpZ25tZW50Tm9kZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJCbG9ja05vZGVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0Jsb2NrTm9kZS5CbG9ja05vZGVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ29uZGl0aW9uYWxOb2RlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDb25kaXRpb25hbE5vZGUuQ29uZGl0aW9uYWxOb2RlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkNvbnN0YW50Tm9kZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ29uc3RhbnROb2RlLkNvbnN0YW50Tm9kZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJGdW5jdGlvbkFzc2lnbm1lbnROb2RlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlLkZ1bmN0aW9uQXNzaWdubWVudE5vZGVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSW5kZXhOb2RlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNJbmRleE5vZGUuSW5kZXhOb2RlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk9iamVjdE5vZGVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc09iamVjdE5vZGUuT2JqZWN0Tm9kZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJPcGVyYXRvck5vZGVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc09wZXJhdG9yTm9kZS5PcGVyYXRvck5vZGVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUGFyZW50aGVzaXNOb2RlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNQYXJlbnRoZXNpc05vZGUuUGFyZW50aGVzaXNOb2RlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJhbmdlTm9kZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUmFuZ2VOb2RlLlJhbmdlTm9kZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJSZWxhdGlvbmFsTm9kZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUmVsYXRpb25hbE5vZGUuUmVsYXRpb25hbE5vZGVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU3ltYm9sTm9kZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU3ltYm9sTm9kZS5TeW1ib2xOb2RlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkZ1bmN0aW9uTm9kZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRnVuY3Rpb25Ob2RlLkZ1bmN0aW9uTm9kZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwYXJzZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUGFyc2UucGFyc2VEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29tcGlsZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ29tcGlsZS5jb21waWxlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImV2YWx1YXRlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNFdmFsdWF0ZS5ldmFsdWF0ZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJldmFsRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNEZXByZWNhdGVkRXZhbC5ldmFsRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlBhcnNlckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUGFyc2VyQ2xhc3MuUGFyc2VyRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInBhcnNlckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUGFyc2VyLnBhcnNlckRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsdXBEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0x1cC5sdXBEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicXJEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1FyLnFyRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNsdURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU2x1LnNsdURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsdXNvbHZlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNMdXNvbHZlLmx1c29sdmVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSGVscERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzSGVscENsYXNzLkhlbHBEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ2hhaW5EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NoYWluQ2xhc3MuQ2hhaW5EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaGVscERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzSGVscC5oZWxwRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNoYWluRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDaGFpbi5jaGFpbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZXREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0RldC5kZXREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaW52RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNJbnYuaW52RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVpZ3NEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0VpZ3MuZWlnc0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJleHBtRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNFeHBtMi5leHBtRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNxcnRtRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTcXJ0bS5zcXJ0bURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkaXZpZGVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0RpdmlkZS5kaXZpZGVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGlzdGFuY2VEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0Rpc3RhbmNlLmRpc3RhbmNlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImludGVyc2VjdERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzSW50ZXJzZWN0LmludGVyc2VjdERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdW1EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1N1bS5zdW1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibWVhbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTWVhbi5tZWFuRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1lZGlhbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTWVkaWFuLm1lZGlhbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtYWREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc01hZC5tYWREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidmFyaWFuY2VEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1ZhcmlhbmNlLnZhcmlhbmNlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInZhckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRGVwcmVjYXRlZFZhci52YXJEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicXVhbnRpbGVTZXFEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1F1YW50aWxlU2VxLnF1YW50aWxlU2VxRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0ZERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU3RkLnN0ZERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb21iaW5hdGlvbnNEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NvbWJpbmF0aW9ucy5jb21iaW5hdGlvbnNEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29tYmluYXRpb25zV2l0aFJlcERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ29tYmluYXRpb25zV2l0aFJlcC5jb21iaW5hdGlvbnNXaXRoUmVwRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdhbW1hRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNHYW1tYS5nYW1tYURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmYWN0b3JpYWxEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0ZhY3RvcmlhbC5mYWN0b3JpYWxEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwia2xkaXZlcmdlbmNlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNLbGRpdmVyZ2VuY2Uua2xkaXZlcmdlbmNlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm11bHRpbm9taWFsRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNNdWx0aW5vbWlhbC5tdWx0aW5vbWlhbERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwZXJtdXRhdGlvbnNEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1Blcm11dGF0aW9ucy5wZXJtdXRhdGlvbnNEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGlja1JhbmRvbURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUGlja1JhbmRvbS5waWNrUmFuZG9tRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJhbmRvbURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUmFuZG9tLnJhbmRvbURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyYW5kb21JbnREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1JhbmRvbUludC5yYW5kb21JbnREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RpcmxpbmdTMkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU3RpcmxpbmdTLnN0aXJsaW5nUzJEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYmVsbE51bWJlcnNEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0JlbGxOdW1iZXJzLmJlbGxOdW1iZXJzRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNhdGFsYW5EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NhdGFsYW4uY2F0YWxhbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb21wb3NpdGlvbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ29tcG9zaXRpb24uY29tcG9zaXRpb25EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2ltcGxpZnlEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NpbXBsaWZ5LnNpbXBsaWZ5RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlcml2YXRpdmVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0Rlcml2YXRpdmUuZGVyaXZhdGl2ZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyYXRpb25hbGl6ZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUmF0aW9uYWxpemUucmF0aW9uYWxpemVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmV2aXZlckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUmV2aXZlci5yZXZpdmVyRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlcGxhY2VyRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNSZXBsYWNlci5yZXBsYWNlckRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNFLmVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVXBwZXJjYXNlRS5FRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZhbHNlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNGYWxzZS5mYWxzZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNJLmlEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSW5maW5pdHlEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0luZmluaXR5LkluZmluaXR5RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkxOMTBEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0xOLkxOMTBEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTE4yRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNMTjIuTE4yRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkxPRzEwRURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTE9HMTBFLkxPRzEwRURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJMT0cyRURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTE9HMkUuTE9HMkVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTmFORGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNOYU4uTmFORGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm51bGxEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc051bGwubnVsbERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwaGlEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1BoaS5waGlEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGlEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1BpLnBpRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlBJRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNVcHBlcmNhc2VQaS5QSURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTUVJUMV8yRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTUVJUMV8uU1FSVDFfMkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTUVJUMkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU1FSVC5TUVJUMkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0YXVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1RhdS50YXVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHJ1ZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVHJ1ZS50cnVlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInZlcnNpb25EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1ZlcnNpb24udmVyc2lvbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhdG9taWNNYXNzRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBdG9taWNNYXNzLmF0b21pY01hc3NEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXZvZ2Fkcm9EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0F2b2dhZHJvLmF2b2dhZHJvRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImJvaHJNYWduZXRvbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQm9ock1hZ25ldG9uLmJvaHJNYWduZXRvbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJib2hyUmFkaXVzRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNCb2hyUmFkaXVzLmJvaHJSYWRpdXNEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYm9sdHptYW5uRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNCb2x0em1hbm4uYm9sdHptYW5uRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNsYXNzaWNhbEVsZWN0cm9uUmFkaXVzRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDbGFzc2ljYWxFbGVjdHJvblJhZGl1cy5jbGFzc2ljYWxFbGVjdHJvblJhZGl1c0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb25kdWN0YW5jZVF1YW50dW1EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NvbmR1Y3RhbmNlUXVhbnR1bS5jb25kdWN0YW5jZVF1YW50dW1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY291bG9tYkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ291bG9tYi5jb3Vsb21iRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRldXRlcm9uTWFzc0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRGV1dGVyb25NYXNzLmRldXRlcm9uTWFzc0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJlZmltb3ZGYWN0b3JEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0VmaW1vdkZhY3Rvci5lZmltb3ZGYWN0b3JEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZWxlY3RyaWNDb25zdGFudERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRWxlY3RyaWNDb25zdGFudC5lbGVjdHJpY0NvbnN0YW50RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVsZWN0cm9uTWFzc0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRWxlY3Ryb25NYXNzLmVsZWN0cm9uTWFzc0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJlbGVtZW50YXJ5Q2hhcmdlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNFbGVtZW50YXJ5Q2hhcmdlLmVsZW1lbnRhcnlDaGFyZ2VEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZmFyYWRheURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRmFyYWRheS5mYXJhZGF5RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZlcm1pQ291cGxpbmdEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0Zlcm1pQ291cGxpbmcuZmVybWlDb3VwbGluZ0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmaW5lU3RydWN0dXJlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNGaW5lU3RydWN0dXJlLmZpbmVTdHJ1Y3R1cmVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZmlyc3RSYWRpYXRpb25EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0ZpcnN0UmFkaWF0aW9uLmZpcnN0UmFkaWF0aW9uRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdhc0NvbnN0YW50RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNHYXNDb25zdGFudC5nYXNDb25zdGFudERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJncmF2aXRhdGlvbkNvbnN0YW50RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNHcmF2aXRhdGlvbkNvbnN0YW50LmdyYXZpdGF0aW9uQ29uc3RhbnREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ3Jhdml0eURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzR3Jhdml0eS5ncmF2aXR5RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImhhcnRyZWVFbmVyZ3lEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0hhcnRyZWVFbmVyZ3kuaGFydHJlZUVuZXJneURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNJbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtLmludmVyc2VDb25kdWN0YW5jZVF1YW50dW1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwia2xpdHppbmdEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0tsaXR6aW5nLmtsaXR6aW5nRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImxvc2NobWlkdERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTG9zY2htaWR0Lmxvc2NobWlkdERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtYWduZXRpY0NvbnN0YW50RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNNYWduZXRpY0NvbnN0YW50Lm1hZ25ldGljQ29uc3RhbnREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibWFnbmV0aWNGbHV4UXVhbnR1bURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTWFnbmV0aWNGbHV4UXVhbnR1bS5tYWduZXRpY0ZsdXhRdWFudHVtRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1vbGFyTWFzc0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTW9sYXJNYXNzLm1vbGFyTWFzc0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtb2xhck1hc3NDMTJEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc01vbGFyTWFzc0MubW9sYXJNYXNzQzEyRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1vbGFyUGxhbmNrQ29uc3RhbnREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc01vbGFyUGxhbmNrQ29uc3RhbnQubW9sYXJQbGFuY2tDb25zdGFudERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtb2xhclZvbHVtZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTW9sYXJWb2x1bWUubW9sYXJWb2x1bWVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibmV1dHJvbk1hc3NEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc05ldXRyb25NYXNzLm5ldXRyb25NYXNzRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm51Y2xlYXJNYWduZXRvbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTnVjbGVhck1hZ25ldG9uLm51Y2xlYXJNYWduZXRvbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwbGFuY2tDaGFyZ2VEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1BsYW5ja0NoYXJnZS5wbGFuY2tDaGFyZ2VEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGxhbmNrQ29uc3RhbnREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1BsYW5ja0NvbnN0YW50LnBsYW5ja0NvbnN0YW50RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInBsYW5ja0xlbmd0aERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUGxhbmNrTGVuZ3RoLnBsYW5ja0xlbmd0aERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwbGFuY2tNYXNzRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNQbGFuY2tNYXNzLnBsYW5ja01hc3NEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGxhbmNrVGVtcGVyYXR1cmVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1BsYW5ja1RlbXBlcmF0dXJlLnBsYW5ja1RlbXBlcmF0dXJlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInBsYW5ja1RpbWVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1BsYW5ja1RpbWUucGxhbmNrVGltZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwcm90b25NYXNzRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNQcm90b25NYXNzLnByb3Rvbk1hc3NEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicXVhbnR1bU9mQ2lyY3VsYXRpb25EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1F1YW50dW1PZkNpcmN1bGF0aW9uLnF1YW50dW1PZkNpcmN1bGF0aW9uRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlZHVjZWRQbGFuY2tDb25zdGFudERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUmVkdWNlZFBsYW5ja0NvbnN0YW50LnJlZHVjZWRQbGFuY2tDb25zdGFudERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyeWRiZXJnRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNSeWRiZXJnLnJ5ZGJlcmdEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2Fja3VyVGV0cm9kZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU2Fja3VyVGV0cm9kZS5zYWNrdXJUZXRyb2RlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNlY29uZFJhZGlhdGlvbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU2Vjb25kUmFkaWF0aW9uLnNlY29uZFJhZGlhdGlvbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzcGVlZE9mTGlnaHREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NwZWVkT2ZMaWdodC5zcGVlZE9mTGlnaHREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RlZmFuQm9sdHptYW5uRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTdGVmYW5Cb2x0em1hbm4uc3RlZmFuQm9sdHptYW5uRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRob21zb25Dcm9zc1NlY3Rpb25EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1Rob21zb25Dcm9zc1NlY3Rpb24udGhvbXNvbkNyb3NzU2VjdGlvbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ2YWN1dW1JbXBlZGFuY2VEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1ZhY3V1bUltcGVkYW5jZS52YWN1dW1JbXBlZGFuY2VEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwid2Vha01peGluZ0FuZ2xlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNXZWFrTWl4aW5nQW5nbGUud2Vha01peGluZ0FuZ2xlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIndpZW5EaXNwbGFjZW1lbnREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1dpZW5EaXNwbGFjZW1lbnQud2llbkRpc3BsYWNlbWVudERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhcHBseVRyYW5zZm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQXBwbHlUcmFuc2Zvcm0uYXBwbHlUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29sdW1uVHJhbnNmb3JtRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDb2x1bW5UcmFuc2Zvcm0uY29sdW1uVHJhbnNmb3JtRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZpbHRlclRyYW5zZm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRmlsdGVyVHJhbnNmb3JtLmZpbHRlclRyYW5zZm9ybURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmb3JFYWNoVHJhbnNmb3JtRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNGb3JFYWNoVHJhbnNmb3JtLmZvckVhY2hUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaW5kZXhUcmFuc2Zvcm1EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0luZGV4VHJhbnNmb3JtLmluZGV4VHJhbnNmb3JtRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1hcFRyYW5zZm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTWFwVHJhbnNmb3JtLm1hcFRyYW5zZm9ybURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtYXhUcmFuc2Zvcm1EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc01heFRyYW5zZm9ybS5tYXhUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibWVhblRyYW5zZm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTWVhblRyYW5zZm9ybS5tZWFuVHJhbnNmb3JtRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1pblRyYW5zZm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTWluVHJhbnNmb3JtLm1pblRyYW5zZm9ybURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyYW5nZVRyYW5zZm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUmFuZ2VUcmFuc2Zvcm0ucmFuZ2VUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicm93VHJhbnNmb3JtRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNSb3dUcmFuc2Zvcm0ucm93VHJhbnNmb3JtRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN1YnNldFRyYW5zZm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU3Vic2V0VHJhbnNmb3JtLnN1YnNldFRyYW5zZm9ybURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb25jYXRUcmFuc2Zvcm1EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NvbmNhdFRyYW5zZm9ybS5jb25jYXRUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RkVHJhbnNmb3JtRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTdGRUcmFuc2Zvcm0uc3RkVHJhbnNmb3JtRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN1bVRyYW5zZm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU3VtVHJhbnNmb3JtLnN1bVRyYW5zZm9ybURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ2YXJpYW5jZVRyYW5zZm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVmFyaWFuY2VUcmFuc2Zvcm0udmFyaWFuY2VUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYWxsXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9hbGxGYWN0b3JpZXNBbnkuYWxsO1xuICB9XG59KTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUmVzdWx0U2V0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1Jlc3VsdFNldC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRnJhY3Rpb25DbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUmFuZ2VDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYW5nZUNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDbG9uZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDbG9uZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNJbnRlZ2VyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0lzSW50ZWdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNOZWdhdGl2ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJc05lZ2F0aXZlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc051bWVyaWMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSXNOdW1lcmljLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNIYXNOdW1lcmljVmFsdWUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSGFzTnVtZXJpY1ZhbHVlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc1Bvc2l0aXZlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0lzUG9zaXRpdmUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzWmVybyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJc1plcm8uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzTmFOID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0lzTmFOLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlT2YgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVHlwZU9mLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEZXByZWNhdGVkVHlwZW9mID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RlcHJlY2F0ZWRUeXBlb2YuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTnVtYmVyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc051bWJlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3RyaW5nID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N0cmluZy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQm9vbGVhbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNCb29sZWFuLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdudW1iZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQmlnbnVtYmVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbXBsZXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZyYWN0aW9uID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZyYWN0aW9uLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTcGxpdFVuaXQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3BsaXRVbml0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1VuYXJ5TWludXMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuYXJ5UGx1cyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNVbmFyeVBsdXMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FicyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBYnMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FwcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FwcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDYnJ0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NicnQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NlaWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ2VpbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ3ViZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDdWJlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFeHAgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRXhwLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFeHBtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0V4cG0xLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGbG9vciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGbG9vci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzR2NkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0djZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTGNtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xjbS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTG9nID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xvZzEwLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMb2cyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xvZzIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01vZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNb2QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNdWx0aXBseS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTnRoUm9vdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNOdGhSb290LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaWduID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NpZ24uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NxcnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3FydC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3F1YXJlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NxdWFyZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3VidHJhY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3VidHJhY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1hnY2QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzWGdjZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRG90TXVsdGlwbHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRG90TXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpdEFuZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNCaXRBbmQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpdE5vdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNCaXROb3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpdE9yID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0JpdE9yLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNCaXRYb3IgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQml0WG9yLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBcmcgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQXJnLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb25qID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbmouZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ltID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ltLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTm90ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc05vdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzT3IgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzT3IuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1hvciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNYb3IuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbmNhdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb25jYXQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbHVtbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb2x1bW4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Nyb3NzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Nyb3NzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEaWFnID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RpYWcuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0V5ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNFeWUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZpbHRlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGaWx0ZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZsYXR0ZW4gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmxhdHRlbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRm9yRWFjaCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGb3JFYWNoLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNHZXRNYXRyaXhEYXRhVHlwZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNHZXRNYXRyaXhEYXRhVHlwZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSWRlbnRpdHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSWRlbnRpdHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0tyb24gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzS3Jvbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWFwID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01hcC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzT25lcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNPbmVzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSYW5nZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYW5nZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUmVzaGFwZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSZXNoYXBlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSZXNpemUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmVzaXplLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSb3cgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUm93LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaXplID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NpemUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NxdWVlemUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3F1ZWV6ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3Vic2V0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N1YnNldC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHJhbnNwb3NlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1RyYW5zcG9zZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ3RyYW5zcG9zZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDdHJhbnNwb3NlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNaZXJvcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNaZXJvcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXJmID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VyZi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTW9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQcm9kID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1Byb2QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Zvcm1hdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGb3JtYXQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1ByaW50ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1ByaW50LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUbyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUby5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNQcmltZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJc1ByaW1lLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNOdW1lcmljID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc051bWVyaWMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BvdyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQb3cuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1JvdW5kID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1JvdW5kLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMb2czID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xvZy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTG9nMXAgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTG9nMXAuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc050aFJvb3RzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc050aFJvb3RzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEb3RQb3cgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRG90UG93LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEb3REaXZpZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRG90RGl2aWRlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMc29sdmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTHNvbHZlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVc29sdmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVXNvbHZlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMZWZ0U2hpZnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTGVmdFNoaWZ0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSaWdodEFyaXRoU2hpZnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmlnaHRBcml0aFNoaWZ0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSaWdodExvZ1NoaWZ0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1JpZ2h0TG9nU2hpZnQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FuZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBbmQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBhcmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29tcGFyZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBhcmVUZXh0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbXBhcmVUZXh0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNFcXVhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxUZXh0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VxdWFsVGV4dC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU21hbGxlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTbWFsbGVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTbWFsbGVyRXEgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU21hbGxlckVxLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMYXJnZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTGFyZ2VyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMYXJnZXJFcSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMYXJnZXJFcS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVlcEVxdWFsID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RlZXBFcXVhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5lcXVhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNVbmVxdWFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQYXJ0aXRpb25TZWxlY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGFydGl0aW9uU2VsZWN0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTb3J0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NvcnQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01heCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNYXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01pbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNaW4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ltbXV0YWJsZURlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSW1tdXRhYmxlRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJbmRleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGaWJvbmFjY2lIZWFwQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmlib25hY2NpSGVhcENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTcGFDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTcGFDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdEZ1bmN0aW9uID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1VuaXRGdW5jdGlvbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3BhcnNlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NwYXJzZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ3JlYXRlVW5pdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDcmVhdGVVbml0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBY29zID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Fjb3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Fjb3NoID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Fjb3NoLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBY290ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Fjb3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Fjb3RoID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Fjb3RoLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBY3NjID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Fjc2MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Fjc2NoID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Fjc2NoLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBc2VjID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FzZWMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FzZWNoID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FzZWNoLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBc2luID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FzaW4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FzaW5oID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FzaW5oLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBdGFuID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0F0YW4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0F0YW4yID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0F0YW4yLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBdGFuaCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBdGFuaC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29zID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Nvcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29zaCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb3NoLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ290LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb3RoID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvdGguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NzYyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDc2MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NzY2ggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ3NjaC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2VjID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NlYy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2VjaCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZWNoLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaW4gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2luLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaW5oID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NpbmguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1RhbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUYW4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1RhbmggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVGFuaC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2V0Q2FydGVzaWFuID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NldENhcnRlc2lhbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2V0RGlmZmVyZW5jZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZXREaWZmZXJlbmNlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTZXREaXN0aW5jdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZXREaXN0aW5jdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2V0SW50ZXJzZWN0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NldEludGVyc2VjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2V0SXNTdWJzZXQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0SXNTdWJzZXQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NldE11bHRpcGxpY2l0eSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZXRNdWx0aXBsaWNpdHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NldFBvd2Vyc2V0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NldFBvd2Vyc2V0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTZXRTaXplID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NldFNpemUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NldFN5bURpZmZlcmVuY2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0U3ltRGlmZmVyZW5jZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2V0VW5pb24gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0VW5pb24uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBZGQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0h5cG90ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0h5cG90LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNOb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc05vcm0uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RvdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNEb3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1RyYWNlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1RyYWNlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJbmRleC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBY2Nlc3Nvck5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQWNjZXNzb3JOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBcnJheU5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQXJyYXlOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBc3NpZ25tZW50Tm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBc3NpZ25tZW50Tm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmxvY2tOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Jsb2NrTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29uZGl0aW9uYWxOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbmRpdGlvbmFsTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29uc3RhbnROb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbnN0YW50Tm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleE5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSW5kZXhOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNPYmplY3ROb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc09iamVjdE5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc09wZXJhdG9yTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNPcGVyYXRvck5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BhcmVudGhlc2lzTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQYXJlbnRoZXNpc05vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1JhbmdlTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYW5nZU5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1JlbGF0aW9uYWxOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1JlbGF0aW9uYWxOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTeW1ib2xOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N5bWJvbE5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Z1bmN0aW9uTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGdW5jdGlvbk5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BhcnNlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1BhcnNlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21waWxlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbXBpbGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0V2YWx1YXRlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0V2YWx1YXRlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEZXByZWNhdGVkRXZhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNEZXByZWNhdGVkRXZhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGFyc2VyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGFyc2VyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BhcnNlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQYXJzZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0x1cCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMdXAuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1FyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1FyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTbHUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2x1LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMdXNvbHZlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0x1c29sdmUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0hlbHBDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNIZWxwQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NoYWluQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ2hhaW5DbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSGVscCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNIZWxwLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDaGFpbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDaGFpbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGV0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RldC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW52ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ludi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRWlncyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNFaWdzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFeHBtMiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNFeHBtLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTcXJ0bSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTcXJ0bS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RpdmlkZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGlzdGFuY2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRGlzdGFuY2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ludGVyc2VjdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJbnRlcnNlY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1bSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTdW0uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01lYW4gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTWVhbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWVkaWFuID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01lZGlhbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWFkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01hZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVmFyaWFuY2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVmFyaWFuY2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlcHJlY2F0ZWRWYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRGVwcmVjYXRlZFZhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUXVhbnRpbGVTZXEgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUXVhbnRpbGVTZXEuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N0ZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTdGQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbWJpbmF0aW9ucyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb21iaW5hdGlvbnMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbWJpbmF0aW9uc1dpdGhSZXAgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29tYmluYXRpb25zV2l0aFJlcC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzR2FtbWEgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzR2FtbWEuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZhY3RvcmlhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGYWN0b3JpYWwuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0tsZGl2ZXJnZW5jZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNLbGRpdmVyZ2VuY2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpbm9taWFsID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc011bHRpbm9taWFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQZXJtdXRhdGlvbnMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGVybXV0YXRpb25zLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQaWNrUmFuZG9tID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1BpY2tSYW5kb20uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1JhbmRvbSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYW5kb20uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1JhbmRvbUludCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYW5kb21JbnQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N0aXJsaW5nUyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTdGlybGluZ1MyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNCZWxsTnVtYmVycyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNCZWxsTnVtYmVycy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ2F0YWxhbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDYXRhbGFuLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wb3NpdGlvbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb21wb3NpdGlvbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2ltcGxpZnkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2ltcGxpZnkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Rlcml2YXRpdmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRGVyaXZhdGl2ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUmF0aW9uYWxpemUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmF0aW9uYWxpemUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1Jldml2ZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmV2aXZlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUmVwbGFjZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmVwbGFjZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVXBwZXJjYXNlRSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNVcHBlcmNhc2VFLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGYWxzZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGYWxzZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmZpbml0eSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJbmZpbml0eS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTE4gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTE4xMC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTE4yID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xOMi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTE9HMTBFID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xPRzEwRS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTE9HMkUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTE9HMkUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc05hTiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNOYU4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc051bGwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTnVsbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGhpID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1BoaS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VwcGVyY2FzZVBpID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1VwcGVyY2FzZVBpLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTUVJUMV8gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU1FSVDFfMi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU1FSVCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTUVJUMi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVGF1ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1RhdS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHJ1ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUcnVlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNWZXJzaW9uID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1ZlcnNpb24uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0F0b21pY01hc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQXRvbWljTWFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQXZvZ2Fkcm8gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQXZvZ2Fkcm8uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0JvaHJNYWduZXRvbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNCb2hyTWFnbmV0b24uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0JvaHJSYWRpdXMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQm9oclJhZGl1cy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQm9sdHptYW5uID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0JvbHR6bWFubi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ2xhc3NpY2FsRWxlY3Ryb25SYWRpdXMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ2xhc3NpY2FsRWxlY3Ryb25SYWRpdXMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbmR1Y3RhbmNlUXVhbnR1bSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb25kdWN0YW5jZVF1YW50dW0uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvdWxvbWIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ291bG9tYi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGV1dGVyb25NYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RldXRlcm9uTWFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRWZpbW92RmFjdG9yID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VmaW1vdkZhY3Rvci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRWxlY3RyaWNDb25zdGFudCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNFbGVjdHJpY0NvbnN0YW50LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFbGVjdHJvbk1hc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRWxlY3Ryb25NYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFbGVtZW50YXJ5Q2hhcmdlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VsZW1lbnRhcnlDaGFyZ2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZhcmFkYXkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmFyYWRheS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRmVybWlDb3VwbGluZyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGZXJtaUNvdXBsaW5nLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGaW5lU3RydWN0dXJlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZpbmVTdHJ1Y3R1cmUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZpcnN0UmFkaWF0aW9uID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZpcnN0UmFkaWF0aW9uLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNHYXNDb25zdGFudCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNHYXNDb25zdGFudC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzR3Jhdml0YXRpb25Db25zdGFudCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNHcmF2aXRhdGlvbkNvbnN0YW50LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNHcmF2aXR5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0dyYXZpdHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0hhcnRyZWVFbmVyZ3kgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSGFydHJlZUVuZXJneS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNLbGl0emluZyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNLbGl0emluZy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTG9zY2htaWR0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xvc2NobWlkdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWFnbmV0aWNDb25zdGFudCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNYWduZXRpY0NvbnN0YW50LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYWduZXRpY0ZsdXhRdWFudHVtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01hZ25ldGljRmx1eFF1YW50dW0uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01vbGFyTWFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNb2xhck1hc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01vbGFyTWFzc0MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTW9sYXJNYXNzQzEyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNb2xhclBsYW5ja0NvbnN0YW50ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01vbGFyUGxhbmNrQ29uc3RhbnQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01vbGFyVm9sdW1lID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01vbGFyVm9sdW1lLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNOZXV0cm9uTWFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNOZXV0cm9uTWFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTnVjbGVhck1hZ25ldG9uID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc051Y2xlYXJNYWduZXRvbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGxhbmNrQ2hhcmdlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1BsYW5ja0NoYXJnZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGxhbmNrQ29uc3RhbnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGxhbmNrQ29uc3RhbnQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BsYW5ja0xlbmd0aCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQbGFuY2tMZW5ndGguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BsYW5ja01hc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGxhbmNrTWFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGxhbmNrVGVtcGVyYXR1cmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGxhbmNrVGVtcGVyYXR1cmUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BsYW5ja1RpbWUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGxhbmNrVGltZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUHJvdG9uTWFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQcm90b25NYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNRdWFudHVtT2ZDaXJjdWxhdGlvbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNRdWFudHVtT2ZDaXJjdWxhdGlvbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUmVkdWNlZFBsYW5ja0NvbnN0YW50ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1JlZHVjZWRQbGFuY2tDb25zdGFudC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUnlkYmVyZyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSeWRiZXJnLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTYWNrdXJUZXRyb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NhY2t1clRldHJvZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NlY29uZFJhZGlhdGlvbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZWNvbmRSYWRpYXRpb24uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NwZWVkT2ZMaWdodCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTcGVlZE9mTGlnaHQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N0ZWZhbkJvbHR6bWFubiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTdGVmYW5Cb2x0em1hbm4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1Rob21zb25Dcm9zc1NlY3Rpb24gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVGhvbXNvbkNyb3NzU2VjdGlvbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVmFjdXVtSW1wZWRhbmNlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1ZhY3V1bUltcGVkYW5jZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzV2Vha01peGluZ0FuZ2xlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1dlYWtNaXhpbmdBbmdsZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzV2llbkRpc3BsYWNlbWVudCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNXaWVuRGlzcGxhY2VtZW50LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBcHBseVRyYW5zZm9ybSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBcHBseVRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29sdW1uVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbHVtblRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRmlsdGVyVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZpbHRlclRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRm9yRWFjaFRyYW5zZm9ybSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGb3JFYWNoVHJhbnNmb3JtLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleFRyYW5zZm9ybSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJbmRleFRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWFwVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01hcFRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF4VHJhbnNmb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01heFRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWVhblRyYW5zZm9ybSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNZWFuVHJhbnNmb3JtLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNaW5UcmFuc2Zvcm0gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTWluVHJhbnNmb3JtLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSYW5nZVRyYW5zZm9ybSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYW5nZVRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUm93VHJhbnNmb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1Jvd1RyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3Vic2V0VHJhbnNmb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N1YnNldFRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29uY2F0VHJhbnNmb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbmNhdFRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3RkVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N0ZFRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3VtVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N1bVRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVmFyaWFuY2VUcmFuc2Zvcm0gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVmFyaWFuY2VUcmFuc2Zvcm0uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2FsbEZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuL2FsbEZhY3Rvcmllc0FueS5qc1wiKTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWJzRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYWJzRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBYnM6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQWJzXG59O1xuZXhwb3J0cy5hYnNEZXBlbmRlbmNpZXMgPSBhYnNEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkFjY2Vzc29yTm9kZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3Vic2V0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3Vic2V0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIEFjY2Vzc29yTm9kZURlcGVuZGVuY2llcyA9IHtcbiAgTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc05vZGUuTm9kZURlcGVuZGVuY2llcyxcbiAgc3Vic2V0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3Vic2V0LnN1YnNldERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQWNjZXNzb3JOb2RlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUFjY2Vzc29yTm9kZVxufTtcbmV4cG9ydHMuQWNjZXNzb3JOb2RlRGVwZW5kZW5jaWVzID0gQWNjZXNzb3JOb2RlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hY29zRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBhY29zRGVwZW5kZW5jaWVzID0ge1xuICBDb21wbGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLkNvbXBsZXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFjb3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQWNvc1xufTtcbmV4cG9ydHMuYWNvc0RlcGVuZGVuY2llcyA9IGFjb3NEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFjb3NoRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBhY29zaERlcGVuZGVuY2llcyA9IHtcbiAgQ29tcGxleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5Db21wbGV4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBY29zaDogX2ZhY3Rvcmllc0FueS5jcmVhdGVBY29zaFxufTtcbmV4cG9ydHMuYWNvc2hEZXBlbmRlbmNpZXMgPSBhY29zaERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWNvdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGFjb3REZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQWNvdDogX2ZhY3Rvcmllc0FueS5jcmVhdGVBY290XG59O1xuZXhwb3J0cy5hY290RGVwZW5kZW5jaWVzID0gYWNvdERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWNvdGhEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGFjb3RoRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQWNvdGg6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQWNvdGhcbn07XG5leHBvcnRzLmFjb3RoRGVwZW5kZW5jaWVzID0gYWNvdGhEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFjc2NEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGFjc2NEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgQ29tcGxleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5Db21wbGV4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBY3NjOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUFjc2Ncbn07XG5leHBvcnRzLmFjc2NEZXBlbmRlbmNpZXMgPSBhY3NjRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hY3NjaERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGFjc2NoRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFjc2NoOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUFjc2NoXG59O1xuZXhwb3J0cy5hY3NjaERlcGVuZGVuY2llcyA9IGFjc2NoRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hZGREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3BhcnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGFkZERlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBTcGFyc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcy5TcGFyc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGFkZFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZFNjYWxhci5hZGRTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFkZDogX2ZhY3Rvcmllc0FueS5jcmVhdGVBZGRcbn07XG5leHBvcnRzLmFkZERlcGVuZGVuY2llcyA9IGFkZERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWRkU2NhbGFyRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYWRkU2NhbGFyRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBZGRTY2FsYXI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQWRkU2NhbGFyXG59O1xuZXhwb3J0cy5hZGRTY2FsYXJEZXBlbmRlbmNpZXMgPSBhZGRTY2FsYXJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFuZERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc05vdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc05vdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzWmVyb3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNaZXJvcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBhbmREZXBlbmRlbmNpZXMgPSB7XG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG5vdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc05vdC5ub3REZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIHplcm9zRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzWmVyb3MuemVyb3NEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFuZDogX2ZhY3Rvcmllc0FueS5jcmVhdGVBbmRcbn07XG5leHBvcnRzLmFuZERlcGVuZGVuY2llcyA9IGFuZERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYXBwbHlEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNJbnRlZ2VyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNJbnRlZ2VyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGFwcGx5RGVwZW5kZW5jaWVzID0ge1xuICBpc0ludGVnZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc0ludGVnZXIuaXNJbnRlZ2VyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBcHBseTogX2ZhY3Rvcmllc0FueS5jcmVhdGVBcHBseVxufTtcbmV4cG9ydHMuYXBwbHlEZXBlbmRlbmNpZXMgPSBhcHBseURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYXBwbHlUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNJbnRlZ2VyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNJbnRlZ2VyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGFwcGx5VHJhbnNmb3JtRGVwZW5kZW5jaWVzID0ge1xuICBpc0ludGVnZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc0ludGVnZXIuaXNJbnRlZ2VyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBcHBseVRyYW5zZm9ybTogX2ZhY3Rvcmllc0FueS5jcmVhdGVBcHBseVRyYW5zZm9ybVxufTtcbmV4cG9ydHMuYXBwbHlUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSBhcHBseVRyYW5zZm9ybURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYXJnRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYXJnRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBcmc6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQXJnXG59O1xuZXhwb3J0cy5hcmdEZXBlbmRlbmNpZXMgPSBhcmdEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkFycmF5Tm9kZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBBcnJheU5vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOb2RlLk5vZGVEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFycmF5Tm9kZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVBcnJheU5vZGVcbn07XG5leHBvcnRzLkFycmF5Tm9kZURlcGVuZGVuY2llcyA9IEFycmF5Tm9kZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYXNlY0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYXNlY0RlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBDb21wbGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLkNvbXBsZXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFzZWM6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQXNlY1xufTtcbmV4cG9ydHMuYXNlY0RlcGVuZGVuY2llcyA9IGFzZWNEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFzZWNoRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBhc2VjaERlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBDb21wbGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLkNvbXBsZXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFzZWNoOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUFzZWNoXG59O1xuZXhwb3J0cy5hc2VjaERlcGVuZGVuY2llcyA9IGFzZWNoRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hc2luRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBhc2luRGVwZW5kZW5jaWVzID0ge1xuICBDb21wbGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLkNvbXBsZXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFzaW46IF9mYWN0b3JpZXNBbnkuY3JlYXRlQXNpblxufTtcbmV4cG9ydHMuYXNpbkRlcGVuZGVuY2llcyA9IGFzaW5EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFzaW5oRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYXNpbmhEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFzaW5oOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUFzaW5oXG59O1xuZXhwb3J0cy5hc2luaERlcGVuZGVuY2llcyA9IGFzaW5oRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5Bc3NpZ25tZW50Tm9kZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc05vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJzZXQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJzZXQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgQXNzaWdubWVudE5vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOb2RlLk5vZGVEZXBlbmRlbmNpZXMsXG4gIHN1YnNldERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnNldC5zdWJzZXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFzc2lnbm1lbnROb2RlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUFzc2lnbm1lbnROb2RlXG59O1xuZXhwb3J0cy5Bc3NpZ25tZW50Tm9kZURlcGVuZGVuY2llcyA9IEFzc2lnbm1lbnROb2RlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hdGFuRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYXRhbkRlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQXRhbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVBdGFuXG59O1xuZXhwb3J0cy5hdGFuRGVwZW5kZW5jaWVzID0gYXRhbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYXRhbjJEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBhdGFuMkRlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUF0YW4yOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUF0YW4yXG59O1xuZXhwb3J0cy5hdGFuMkRlcGVuZGVuY2llcyA9IGF0YW4yRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hdGFuaERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYXRhbmhEZXBlbmRlbmNpZXMgPSB7XG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQXRhbmg6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQXRhbmhcbn07XG5leHBvcnRzLmF0YW5oRGVwZW5kZW5jaWVzID0gYXRhbmhEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmF0b21pY01hc3NEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGF0b21pY01hc3NEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBdG9taWNNYXNzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUF0b21pY01hc3Ncbn07XG5leHBvcnRzLmF0b21pY01hc3NEZXBlbmRlbmNpZXMgPSBhdG9taWNNYXNzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hdm9nYWRyb0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYXZvZ2Fkcm9EZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBdm9nYWRybzogX2ZhY3Rvcmllc0FueS5jcmVhdGVBdm9nYWRyb1xufTtcbmV4cG9ydHMuYXZvZ2Fkcm9EZXBlbmRlbmNpZXMgPSBhdm9nYWRyb0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYmVsbE51bWJlcnNEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc0ludGVnZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc0ludGVnZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzTmVnYXRpdmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc05lZ2F0aXZlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdGlybGluZ1MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdGlybGluZ1MyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGJlbGxOdW1iZXJzRGVwZW5kZW5jaWVzID0ge1xuICBhZGRTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuYWRkU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBpc0ludGVnZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc0ludGVnZXIuaXNJbnRlZ2VyRGVwZW5kZW5jaWVzLFxuICBpc05lZ2F0aXZlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSXNOZWdhdGl2ZS5pc05lZ2F0aXZlRGVwZW5kZW5jaWVzLFxuICBzdGlybGluZ1MyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3RpcmxpbmdTLnN0aXJsaW5nUzJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUJlbGxOdW1iZXJzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUJlbGxOdW1iZXJzXG59O1xuZXhwb3J0cy5iZWxsTnVtYmVyc0RlcGVuZGVuY2llcyA9IGJlbGxOdW1iZXJzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBCaWdOdW1iZXJEZXBlbmRlbmNpZXMgPSB7XG4gIGNyZWF0ZUJpZ051bWJlckNsYXNzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUJpZ051bWJlckNsYXNzXG59O1xuZXhwb3J0cy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMgPSBCaWdOdW1iZXJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJpZ251bWJlckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGJpZ251bWJlckRlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVCaWdudW1iZXI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQmlnbnVtYmVyXG59O1xuZXhwb3J0cy5iaWdudW1iZXJEZXBlbmRlbmNpZXMgPSBiaWdudW1iZXJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJpdEFuZERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYml0QW5kRGVwZW5kZW5jaWVzID0ge1xuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVCaXRBbmQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQml0QW5kXG59O1xuZXhwb3J0cy5iaXRBbmREZXBlbmRlbmNpZXMgPSBiaXRBbmREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJpdE5vdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGJpdE5vdERlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQml0Tm90OiBfZmFjdG9yaWVzQW55LmNyZWF0ZUJpdE5vdFxufTtcbmV4cG9ydHMuYml0Tm90RGVwZW5kZW5jaWVzID0gYml0Tm90RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5iaXRPckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGJpdE9yRGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUJpdE9yOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUJpdE9yXG59O1xuZXhwb3J0cy5iaXRPckRlcGVuZGVuY2llcyA9IGJpdE9yRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5iaXRYb3JEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBiaXRYb3JEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQml0WG9yOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUJpdFhvclxufTtcbmV4cG9ydHMuYml0WG9yRGVwZW5kZW5jaWVzID0gYml0WG9yRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5CbG9ja05vZGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc05vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1Jlc3VsdFNldCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1Jlc3VsdFNldC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBCbG9ja05vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOb2RlLk5vZGVEZXBlbmRlbmNpZXMsXG4gIFJlc3VsdFNldERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1Jlc3VsdFNldC5SZXN1bHRTZXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUJsb2NrTm9kZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVCbG9ja05vZGVcbn07XG5leHBvcnRzLkJsb2NrTm9kZURlcGVuZGVuY2llcyA9IEJsb2NrTm9kZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYm9ock1hZ25ldG9uRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBib2hyTWFnbmV0b25EZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVCb2hyTWFnbmV0b246IF9mYWN0b3JpZXNBbnkuY3JlYXRlQm9ock1hZ25ldG9uXG59O1xuZXhwb3J0cy5ib2hyTWFnbmV0b25EZXBlbmRlbmNpZXMgPSBib2hyTWFnbmV0b25EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJvaHJSYWRpdXNEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGJvaHJSYWRpdXNEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVCb2hyUmFkaXVzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUJvaHJSYWRpdXNcbn07XG5leHBvcnRzLmJvaHJSYWRpdXNEZXBlbmRlbmNpZXMgPSBib2hyUmFkaXVzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5ib2x0em1hbm5EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGJvbHR6bWFubkRlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUJvbHR6bWFubjogX2ZhY3Rvcmllc0FueS5jcmVhdGVCb2x0em1hbm5cbn07XG5leHBvcnRzLmJvbHR6bWFubkRlcGVuZGVuY2llcyA9IGJvbHR6bWFubkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYm9vbGVhbkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGJvb2xlYW5EZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUJvb2xlYW46IF9mYWN0b3JpZXNBbnkuY3JlYXRlQm9vbGVhblxufTtcbmV4cG9ydHMuYm9vbGVhbkRlcGVuZGVuY2llcyA9IGJvb2xlYW5EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNhdGFsYW5EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21iaW5hdGlvbnMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21iaW5hdGlvbnMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNJbnRlZ2VyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNJbnRlZ2VyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc05lZ2F0aXZlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNOZWdhdGl2ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjYXRhbGFuRGVwZW5kZW5jaWVzID0ge1xuICBhZGRTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuYWRkU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBjb21iaW5hdGlvbnNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21iaW5hdGlvbnMuY29tYmluYXRpb25zRGVwZW5kZW5jaWVzLFxuICBkaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBpc0ludGVnZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc0ludGVnZXIuaXNJbnRlZ2VyRGVwZW5kZW5jaWVzLFxuICBpc05lZ2F0aXZlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSXNOZWdhdGl2ZS5pc05lZ2F0aXZlRGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLm11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDYXRhbGFuOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNhdGFsYW5cbn07XG5leHBvcnRzLmNhdGFsYW5EZXBlbmRlbmNpZXMgPSBjYXRhbGFuRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jYnJ0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRnJhY3Rpb25DbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzTmVnYXRpdmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc05lZ2F0aXZlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuYXJ5TWludXMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGNicnREZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgQ29tcGxleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5Db21wbGV4RGVwZW5kZW5jaWVzLFxuICBGcmFjdGlvbkRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MuRnJhY3Rpb25EZXBlbmRlbmNpZXMsXG4gIGlzTmVnYXRpdmVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc05lZ2F0aXZlLmlzTmVnYXRpdmVEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIHVuYXJ5TWludXNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzLnVuYXJ5TWludXNEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUNicnQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ2JydFxufTtcbmV4cG9ydHMuY2JydERlcGVuZGVuY2llcyA9IGNicnREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNlaWxEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzUm91bmQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNSb3VuZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjZWlsRGVwZW5kZW5jaWVzID0ge1xuICByb3VuZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1JvdW5kLnJvdW5kRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDZWlsOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNlaWxcbn07XG5leHBvcnRzLmNlaWxEZXBlbmRlbmNpZXMgPSBjZWlsRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jaGFpbkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDaGFpbkNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ2hhaW5DbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjaGFpbkRlcGVuZGVuY2llcyA9IHtcbiAgQ2hhaW5EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDaGFpbkNsYXNzLkNoYWluRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDaGFpbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVDaGFpblxufTtcbmV4cG9ydHMuY2hhaW5EZXBlbmRlbmNpZXMgPSBjaGFpbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuQ2hhaW5EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBDaGFpbkRlcGVuZGVuY2llcyA9IHtcbiAgY3JlYXRlQ2hhaW5DbGFzczogX2ZhY3Rvcmllc0FueS5jcmVhdGVDaGFpbkNsYXNzXG59O1xuZXhwb3J0cy5DaGFpbkRlcGVuZGVuY2llcyA9IENoYWluRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jbGFzc2ljYWxFbGVjdHJvblJhZGl1c0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY2xhc3NpY2FsRWxlY3Ryb25SYWRpdXNEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDbGFzc2ljYWxFbGVjdHJvblJhZGl1czogX2ZhY3Rvcmllc0FueS5jcmVhdGVDbGFzc2ljYWxFbGVjdHJvblJhZGl1c1xufTtcbmV4cG9ydHMuY2xhc3NpY2FsRWxlY3Ryb25SYWRpdXNEZXBlbmRlbmNpZXMgPSBjbGFzc2ljYWxFbGVjdHJvblJhZGl1c0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY2xvbmVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjbG9uZURlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ2xvbmU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ2xvbmVcbn07XG5leHBvcnRzLmNsb25lRGVwZW5kZW5jaWVzID0gY2xvbmVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbHVtbkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSYW5nZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1JhbmdlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGNvbHVtbkRlcGVuZGVuY2llcyA9IHtcbiAgSW5kZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJbmRleENsYXNzLkluZGV4RGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICByYW5nZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1JhbmdlLnJhbmdlRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDb2x1bW46IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29sdW1uXG59O1xuZXhwb3J0cy5jb2x1bW5EZXBlbmRlbmNpZXMgPSBjb2x1bW5EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbHVtblRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSYW5nZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1JhbmdlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGNvbHVtblRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHtcbiAgSW5kZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJbmRleENsYXNzLkluZGV4RGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICByYW5nZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1JhbmdlLnJhbmdlRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDb2x1bW5UcmFuc2Zvcm06IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29sdW1uVHJhbnNmb3JtXG59O1xuZXhwb3J0cy5jb2x1bW5UcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSBjb2x1bW5UcmFuc2Zvcm1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbWJpbmF0aW9uc0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGNvbWJpbmF0aW9uc0RlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ29tYmluYXRpb25zOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbWJpbmF0aW9uc1xufTtcbmV4cG9ydHMuY29tYmluYXRpb25zRGVwZW5kZW5jaWVzID0gY29tYmluYXRpb25zRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb21iaW5hdGlvbnNXaXRoUmVwRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY29tYmluYXRpb25zV2l0aFJlcERlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ29tYmluYXRpb25zV2l0aFJlcDogX2ZhY3Rvcmllc0FueS5jcmVhdGVDb21iaW5hdGlvbnNXaXRoUmVwXG59O1xuZXhwb3J0cy5jb21iaW5hdGlvbnNXaXRoUmVwRGVwZW5kZW5jaWVzID0gY29tYmluYXRpb25zV2l0aFJlcERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tcGFyZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRnJhY3Rpb25DbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjb21wYXJlRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgRnJhY3Rpb25EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGcmFjdGlvbkNsYXNzLkZyYWN0aW9uRGVwZW5kZW5jaWVzLFxuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDb21wYXJlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbXBhcmVcbn07XG5leHBvcnRzLmNvbXBhcmVEZXBlbmRlbmNpZXMgPSBjb21wYXJlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb21wYXJlTmF0dXJhbERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wYXJlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGFyZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjb21wYXJlTmF0dXJhbERlcGVuZGVuY2llcyA9IHtcbiAgY29tcGFyZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBhcmUuY29tcGFyZURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ29tcGFyZU5hdHVyYWw6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29tcGFyZU5hdHVyYWxcbn07XG5leHBvcnRzLmNvbXBhcmVOYXR1cmFsRGVwZW5kZW5jaWVzID0gY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbXBhcmVUZXh0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjb21wYXJlVGV4dERlcGVuZGVuY2llcyA9IHtcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ29tcGFyZVRleHQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29tcGFyZVRleHRcbn07XG5leHBvcnRzLmNvbXBhcmVUZXh0RGVwZW5kZW5jaWVzID0gY29tcGFyZVRleHREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbXBpbGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGFyc2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNQYXJzZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjb21waWxlRGVwZW5kZW5jaWVzID0ge1xuICBwYXJzZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1BhcnNlLnBhcnNlRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDb21waWxlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbXBpbGVcbn07XG5leHBvcnRzLmNvbXBpbGVEZXBlbmRlbmNpZXMgPSBjb21waWxlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb21wbGV4RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjb21wbGV4RGVwZW5kZW5jaWVzID0ge1xuICBDb21wbGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLkNvbXBsZXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUNvbXBsZXg6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29tcGxleFxufTtcbmV4cG9ydHMuY29tcGxleERlcGVuZGVuY2llcyA9IGNvbXBsZXhEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkNvbXBsZXhEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBDb21wbGV4RGVwZW5kZW5jaWVzID0ge1xuICBjcmVhdGVDb21wbGV4Q2xhc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29tcGxleENsYXNzXG59O1xuZXhwb3J0cy5Db21wbGV4RGVwZW5kZW5jaWVzID0gQ29tcGxleERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tcG9zaXRpb25EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21iaW5hdGlvbnMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21iaW5hdGlvbnMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzSW50ZWdlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzSW50ZWdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNOZWdhdGl2ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzTmVnYXRpdmUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzUG9zaXRpdmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc1Bvc2l0aXZlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMYXJnZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNMYXJnZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY29tcG9zaXRpb25EZXBlbmRlbmNpZXMgPSB7XG4gIGFkZFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZFNjYWxhci5hZGRTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGNvbWJpbmF0aW9uc0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbWJpbmF0aW9ucy5jb21iaW5hdGlvbnNEZXBlbmRlbmNpZXMsXG4gIGlzSW50ZWdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzSW50ZWdlci5pc0ludGVnZXJEZXBlbmRlbmNpZXMsXG4gIGlzTmVnYXRpdmVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc05lZ2F0aXZlLmlzTmVnYXRpdmVEZXBlbmRlbmNpZXMsXG4gIGlzUG9zaXRpdmVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc1Bvc2l0aXZlLmlzUG9zaXRpdmVEZXBlbmRlbmNpZXMsXG4gIGxhcmdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0xhcmdlci5sYXJnZXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUNvbXBvc2l0aW9uOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbXBvc2l0aW9uXG59O1xuZXhwb3J0cy5jb21wb3NpdGlvbkRlcGVuZGVuY2llcyA9IGNvbXBvc2l0aW9uRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb25jYXREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNJbnRlZ2VyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNJbnRlZ2VyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY29uY2F0RGVwZW5kZW5jaWVzID0ge1xuICBpc0ludGVnZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc0ludGVnZXIuaXNJbnRlZ2VyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDb25jYXQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29uY2F0XG59O1xuZXhwb3J0cy5jb25jYXREZXBlbmRlbmNpZXMgPSBjb25jYXREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbmNhdFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNJc0ludGVnZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc0ludGVnZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjb25jYXRUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB7XG4gIGlzSW50ZWdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzSW50ZWdlci5pc0ludGVnZXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUNvbmNhdFRyYW5zZm9ybTogX2ZhY3Rvcmllc0FueS5jcmVhdGVDb25jYXRUcmFuc2Zvcm1cbn07XG5leHBvcnRzLmNvbmNhdFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IGNvbmNhdFRyYW5zZm9ybURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuQ29uZGl0aW9uYWxOb2RlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc05vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIENvbmRpdGlvbmFsTm9kZURlcGVuZGVuY2llcyA9IHtcbiAgTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc05vZGUuTm9kZURlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ29uZGl0aW9uYWxOb2RlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbmRpdGlvbmFsTm9kZVxufTtcbmV4cG9ydHMuQ29uZGl0aW9uYWxOb2RlRGVwZW5kZW5jaWVzID0gQ29uZGl0aW9uYWxOb2RlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb25kdWN0YW5jZVF1YW50dW1EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGNvbmR1Y3RhbmNlUXVhbnR1bURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUNvbmR1Y3RhbmNlUXVhbnR1bTogX2ZhY3Rvcmllc0FueS5jcmVhdGVDb25kdWN0YW5jZVF1YW50dW1cbn07XG5leHBvcnRzLmNvbmR1Y3RhbmNlUXVhbnR1bURlcGVuZGVuY2llcyA9IGNvbmR1Y3RhbmNlUXVhbnR1bURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29uakRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGNvbmpEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUNvbmo6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29ualxufTtcbmV4cG9ydHMuY29uakRlcGVuZGVuY2llcyA9IGNvbmpEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkNvbnN0YW50Tm9kZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBDb25zdGFudE5vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOb2RlLk5vZGVEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUNvbnN0YW50Tm9kZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVDb25zdGFudE5vZGVcbn07XG5leHBvcnRzLkNvbnN0YW50Tm9kZURlcGVuZGVuY2llcyA9IENvbnN0YW50Tm9kZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29zRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY29zRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDb3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29zXG59O1xuZXhwb3J0cy5jb3NEZXBlbmRlbmNpZXMgPSBjb3NEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvc2hEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjb3NoRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDb3NoOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvc2hcbn07XG5leHBvcnRzLmNvc2hEZXBlbmRlbmNpZXMgPSBjb3NoRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb3REZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjb3REZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ290OiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvdFxufTtcbmV4cG9ydHMuY290RGVwZW5kZW5jaWVzID0gY290RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb3RoRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY290aERlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDb3RoOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvdGhcbn07XG5leHBvcnRzLmNvdGhEZXBlbmRlbmNpZXMgPSBjb3RoRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb3Vsb21iRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjb3Vsb21iRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ291bG9tYjogX2ZhY3Rvcmllc0FueS5jcmVhdGVDb3Vsb21iXG59O1xuZXhwb3J0cy5jb3Vsb21iRGVwZW5kZW5jaWVzID0gY291bG9tYkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlVW5pdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY3JlYXRlVW5pdERlcGVuZGVuY2llcyA9IHtcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDcmVhdGVVbml0OiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNyZWF0ZVVuaXRcbn07XG5leHBvcnRzLmNyZWF0ZVVuaXREZXBlbmRlbmNpZXMgPSBjcmVhdGVVbml0RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcm9zc0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnRyYWN0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3VidHJhY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY3Jvc3NEZXBlbmRlbmNpZXMgPSB7XG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXMsXG4gIHN1YnRyYWN0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3VidHJhY3Quc3VidHJhY3REZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUNyb3NzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNyb3NzXG59O1xuZXhwb3J0cy5jcm9zc0RlcGVuZGVuY2llcyA9IGNyb3NzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jc2NEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjc2NEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ3NjOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNzY1xufTtcbmV4cG9ydHMuY3NjRGVwZW5kZW5jaWVzID0gY3NjRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jc2NoRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY3NjaERlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDc2NoOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNzY2hcbn07XG5leHBvcnRzLmNzY2hEZXBlbmRlbmNpZXMgPSBjc2NoRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jdHJhbnNwb3NlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbmogPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb25qLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUcmFuc3Bvc2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUcmFuc3Bvc2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY3RyYW5zcG9zZURlcGVuZGVuY2llcyA9IHtcbiAgY29uakRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbmouY29uakRlcGVuZGVuY2llcyxcbiAgdHJhbnNwb3NlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHJhbnNwb3NlLnRyYW5zcG9zZURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ3RyYW5zcG9zZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVDdHJhbnNwb3NlXG59O1xuZXhwb3J0cy5jdHJhbnNwb3NlRGVwZW5kZW5jaWVzID0gY3RyYW5zcG9zZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3ViZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGN1YmVEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUN1YmU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ3ViZVxufTtcbmV4cG9ydHMuY3ViZURlcGVuZGVuY2llcyA9IGN1YmVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZXBFcXVhbERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGRlZXBFcXVhbERlcGVuZGVuY2llcyA9IHtcbiAgZXF1YWxEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbC5lcXVhbERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRGVlcEVxdWFsOiBfZmFjdG9yaWVzQW55LmNyZWF0ZURlZXBFcXVhbFxufTtcbmV4cG9ydHMuZGVlcEVxdWFsRGVwZW5kZW5jaWVzID0gZGVlcEVxdWFsRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzID0ge1xuICBNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXhDbGFzcy5NYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZURlbnNlTWF0cml4Q2xhc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRGVuc2VNYXRyaXhDbGFzc1xufTtcbmV4cG9ydHMuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMgPSBEZW5zZU1hdHJpeERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZXZhbERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNFdmFsdWF0ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0V2YWx1YXRlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGV2YWxEZXBlbmRlbmNpZXMgPSB7XG4gIGV2YWx1YXRlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXZhbHVhdGUuZXZhbHVhdGVEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZURlcHJlY2F0ZWRFdmFsOiBfZmFjdG9yaWVzQW55LmNyZWF0ZURlcHJlY2F0ZWRFdmFsXG59O1xuZXhwb3J0cy5ldmFsRGVwZW5kZW5jaWVzID0gZXZhbERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudHlwZW9mRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdHlwZW9mRGVwZW5kZW5jaWVzID0ge1xuICBjcmVhdGVEZXByZWNhdGVkVHlwZW9mOiBfZmFjdG9yaWVzQW55LmNyZWF0ZURlcHJlY2F0ZWRUeXBlb2Zcbn07XG5leHBvcnRzLnR5cGVvZkRlcGVuZGVuY2llcyA9IHR5cGVvZkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudmFyRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1ZhcmlhbmNlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVmFyaWFuY2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdmFyRGVwZW5kZW5jaWVzID0ge1xuICB2YXJpYW5jZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1ZhcmlhbmNlLnZhcmlhbmNlRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVEZXByZWNhdGVkVmFyOiBfZmFjdG9yaWVzQW55LmNyZWF0ZURlcHJlY2F0ZWRWYXJcbn07XG5leHBvcnRzLnZhckRlcGVuZGVuY2llcyA9IHZhckRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVyaXZhdGl2ZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDb25zdGFudE5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb25zdGFudE5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Z1bmN0aW9uTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Z1bmN0aW9uTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzT3BlcmF0b3JOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzT3BlcmF0b3JOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQYXJlbnRoZXNpc05vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNQYXJlbnRoZXNpc05vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N5bWJvbE5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTeW1ib2xOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc1plcm8gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc1plcm8uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc051bWVyaWMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNOdW1lcmljLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQYXJzZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1BhcnNlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaW1wbGlmeSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NpbXBsaWZ5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGRlcml2YXRpdmVEZXBlbmRlbmNpZXMgPSB7XG4gIENvbnN0YW50Tm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbnN0YW50Tm9kZS5Db25zdGFudE5vZGVEZXBlbmRlbmNpZXMsXG4gIEZ1bmN0aW9uTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0Z1bmN0aW9uTm9kZS5GdW5jdGlvbk5vZGVEZXBlbmRlbmNpZXMsXG4gIE9wZXJhdG9yTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc09wZXJhdG9yTm9kZS5PcGVyYXRvck5vZGVEZXBlbmRlbmNpZXMsXG4gIFBhcmVudGhlc2lzTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1BhcmVudGhlc2lzTm9kZS5QYXJlbnRoZXNpc05vZGVEZXBlbmRlbmNpZXMsXG4gIFN5bWJvbE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTeW1ib2xOb2RlLlN5bWJvbE5vZGVEZXBlbmRlbmNpZXMsXG4gIGVxdWFsRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWwuZXF1YWxEZXBlbmRlbmNpZXMsXG4gIGlzWmVyb0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzWmVyby5pc1plcm9EZXBlbmRlbmNpZXMsXG4gIG51bWVyaWNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOdW1lcmljLm51bWVyaWNEZXBlbmRlbmNpZXMsXG4gIHBhcnNlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUGFyc2UucGFyc2VEZXBlbmRlbmNpZXMsXG4gIHNpbXBsaWZ5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU2ltcGxpZnkuc2ltcGxpZnlEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZURlcml2YXRpdmU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRGVyaXZhdGl2ZVxufTtcbmV4cG9ydHMuZGVyaXZhdGl2ZURlcGVuZGVuY2llcyA9IGRlcml2YXRpdmVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRldERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNMdXAgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNMdXAuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3VidHJhY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5hcnlNaW51cyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuYXJ5TWludXMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZGV0RGVwZW5kZW5jaWVzID0ge1xuICBsdXBEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNMdXAubHVwRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5Lm11bHRpcGx5RGVwZW5kZW5jaWVzLFxuICBzdWJ0cmFjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnRyYWN0LnN1YnRyYWN0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICB1bmFyeU1pbnVzRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5hcnlNaW51cy51bmFyeU1pbnVzRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVEZXQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRGV0XG59O1xuZXhwb3J0cy5kZXREZXBlbmRlbmNpZXMgPSBkZXREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRldXRlcm9uTWFzc0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZGV1dGVyb25NYXNzRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRGV1dGVyb25NYXNzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZURldXRlcm9uTWFzc1xufTtcbmV4cG9ydHMuZGV1dGVyb25NYXNzRGVwZW5kZW5jaWVzID0gZGV1dGVyb25NYXNzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kaWFnRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZGlhZ0RlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBTcGFyc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcy5TcGFyc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZURpYWc6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRGlhZ1xufTtcbmV4cG9ydHMuZGlhZ0RlcGVuZGVuY2llcyA9IGRpYWdEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRpc3RhbmNlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FicyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Ficy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NxcnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTcXJ0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJ0cmFjdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1YnRyYWN0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5hcnlNaW51cy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBkaXN0YW5jZURlcGVuZGVuY2llcyA9IHtcbiAgYWJzRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWJzLmFic0RlcGVuZGVuY2llcyxcbiAgYWRkU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmFkZFNjYWxhckRlcGVuZGVuY2llcyxcbiAgZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmRpdmlkZVNjYWxhckRlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5tdWx0aXBseVNjYWxhckRlcGVuZGVuY2llcyxcbiAgc3FydERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NxcnQuc3FydERlcGVuZGVuY2llcyxcbiAgc3VidHJhY3REZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5zdWJ0cmFjdERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgdW5hcnlNaW51c0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuYXJ5TWludXMudW5hcnlNaW51c0RlcGVuZGVuY2llcyxcbiAgY3JlYXRlRGlzdGFuY2U6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRGlzdGFuY2Vcbn07XG5leHBvcnRzLmRpc3RhbmNlRGVwZW5kZW5jaWVzID0gZGlzdGFuY2VEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRpdmlkZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ludiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0ludi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGRpdmlkZURlcGVuZGVuY2llcyA9IHtcbiAgZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmRpdmlkZVNjYWxhckRlcGVuZGVuY2llcyxcbiAgZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5lcXVhbFNjYWxhckRlcGVuZGVuY2llcyxcbiAgaW52RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSW52LmludkRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseS5tdWx0aXBseURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRGl2aWRlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZURpdmlkZVxufTtcbmV4cG9ydHMuZGl2aWRlRGVwZW5kZW5jaWVzID0gZGl2aWRlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTnVtZXJpYyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc051bWVyaWMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzID0ge1xuICBudW1lcmljRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTnVtZXJpYy5udW1lcmljRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVEaXZpZGVTY2FsYXI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRGl2aWRlU2NhbGFyXG59O1xuZXhwb3J0cy5kaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXMgPSBkaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRvdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZG90RGVwZW5kZW5jaWVzID0ge1xuICBhZGREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGQuYWRkRGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5Lm11bHRpcGx5RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVEb3Q6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRG90XG59O1xuZXhwb3J0cy5kb3REZXBlbmRlbmNpZXMgPSBkb3REZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRvdERpdmlkZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZG90RGl2aWRlRGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGRpdmlkZVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5kaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZURvdERpdmlkZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVEb3REaXZpZGVcbn07XG5leHBvcnRzLmRvdERpdmlkZURlcGVuZGVuY2llcyA9IGRvdERpdmlkZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZG90TXVsdGlwbHlEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGRvdE11bHRpcGx5RGVwZW5kZW5jaWVzID0ge1xuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLm11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVEb3RNdWx0aXBseTogX2ZhY3Rvcmllc0FueS5jcmVhdGVEb3RNdWx0aXBseVxufTtcbmV4cG9ydHMuZG90TXVsdGlwbHlEZXBlbmRlbmNpZXMgPSBkb3RNdWx0aXBseURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZG90UG93RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BvdyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1Bvdy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBkb3RQb3dEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5lcXVhbFNjYWxhckRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgcG93RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUG93LnBvd0RlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRG90UG93OiBfZmFjdG9yaWVzQW55LmNyZWF0ZURvdFBvd1xufTtcbmV4cG9ydHMuZG90UG93RGVwZW5kZW5jaWVzID0gZG90UG93RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVFOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUVcbn07XG5leHBvcnRzLmVEZXBlbmRlbmNpZXMgPSBlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lZmltb3ZGYWN0b3JEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBlZmltb3ZGYWN0b3JEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlRWZpbW92RmFjdG9yOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUVmaW1vdkZhY3RvclxufTtcbmV4cG9ydHMuZWZpbW92RmFjdG9yRGVwZW5kZW5jaWVzID0gZWZpbW92RmFjdG9yRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5laWdzRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FicyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Ficy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0F0YW4gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBdGFuLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdudW1iZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdudW1iZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Nvcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW52ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW52LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NpbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1Npbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3VidHJhY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBlaWdzRGVwZW5kZW5jaWVzID0ge1xuICBhYnNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBYnMuYWJzRGVwZW5kZW5jaWVzLFxuICBhZGREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGQuYWRkRGVwZW5kZW5jaWVzLFxuICBhZGRTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuYWRkU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBhdGFuRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQXRhbi5hdGFuRGVwZW5kZW5jaWVzLFxuICBiaWdudW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdudW1iZXIuYmlnbnVtYmVyRGVwZW5kZW5jaWVzLFxuICBjb3NEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb3MuY29zRGVwZW5kZW5jaWVzLFxuICBlcXVhbERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsLmVxdWFsRGVwZW5kZW5jaWVzLFxuICBpbnZEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJbnYuaW52RGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5Lm11bHRpcGx5RGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLm11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzLFxuICBzaW5EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTaW4uc2luRGVwZW5kZW5jaWVzLFxuICBzdWJ0cmFjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnRyYWN0LnN1YnRyYWN0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVFaWdzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUVpZ3Ncbn07XG5leHBvcnRzLmVpZ3NEZXBlbmRlbmNpZXMgPSBlaWdzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lbGVjdHJpY0NvbnN0YW50RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBlbGVjdHJpY0NvbnN0YW50RGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRWxlY3RyaWNDb25zdGFudDogX2ZhY3Rvcmllc0FueS5jcmVhdGVFbGVjdHJpY0NvbnN0YW50XG59O1xuZXhwb3J0cy5lbGVjdHJpY0NvbnN0YW50RGVwZW5kZW5jaWVzID0gZWxlY3RyaWNDb25zdGFudERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZWxlY3Ryb25NYXNzRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBlbGVjdHJvbk1hc3NEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVFbGVjdHJvbk1hc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRWxlY3Ryb25NYXNzXG59O1xuZXhwb3J0cy5lbGVjdHJvbk1hc3NEZXBlbmRlbmNpZXMgPSBlbGVjdHJvbk1hc3NEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmVsZW1lbnRhcnlDaGFyZ2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGVsZW1lbnRhcnlDaGFyZ2VEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVFbGVtZW50YXJ5Q2hhcmdlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUVsZW1lbnRhcnlDaGFyZ2Vcbn07XG5leHBvcnRzLmVsZW1lbnRhcnlDaGFyZ2VEZXBlbmRlbmNpZXMgPSBlbGVtZW50YXJ5Q2hhcmdlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lcXVhbERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGVxdWFsRGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUVxdWFsOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUVxdWFsXG59O1xuZXhwb3J0cy5lcXVhbERlcGVuZGVuY2llcyA9IGVxdWFsRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lcXVhbFNjYWxhckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVFcXVhbFNjYWxhcjogX2ZhY3Rvcmllc0FueS5jcmVhdGVFcXVhbFNjYWxhclxufTtcbmV4cG9ydHMuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMgPSBlcXVhbFNjYWxhckRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZXF1YWxUZXh0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBhcmVUZXh0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGFyZVRleHQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzWmVybyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzWmVyby5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBlcXVhbFRleHREZXBlbmRlbmNpZXMgPSB7XG4gIGNvbXBhcmVUZXh0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGFyZVRleHQuY29tcGFyZVRleHREZXBlbmRlbmNpZXMsXG4gIGlzWmVyb0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzWmVyby5pc1plcm9EZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUVxdWFsVGV4dDogX2ZhY3Rvcmllc0FueS5jcmVhdGVFcXVhbFRleHRcbn07XG5leHBvcnRzLmVxdWFsVGV4dERlcGVuZGVuY2llcyA9IGVxdWFsVGV4dERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZXJmRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZXJmRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVFcmY6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRXJmXG59O1xuZXhwb3J0cy5lcmZEZXBlbmRlbmNpZXMgPSBlcmZEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmV2YWx1YXRlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1BhcnNlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUGFyc2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZXZhbHVhdGVEZXBlbmRlbmNpZXMgPSB7XG4gIHBhcnNlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUGFyc2UucGFyc2VEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUV2YWx1YXRlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUV2YWx1YXRlXG59O1xuZXhwb3J0cy5ldmFsdWF0ZURlcGVuZGVuY2llcyA9IGV2YWx1YXRlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5leHBEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBleHBEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUV4cDogX2ZhY3Rvcmllc0FueS5jcmVhdGVFeHBcbn07XG5leHBvcnRzLmV4cERlcGVuZGVuY2llcyA9IGV4cERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZXhwbURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNBYnMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBYnMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSWRlbnRpdHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJZGVudGl0eS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW52ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW52LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGV4cG1EZXBlbmRlbmNpZXMgPSB7XG4gIGFic0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0Ficy5hYnNEZXBlbmRlbmNpZXMsXG4gIGFkZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZC5hZGREZXBlbmRlbmNpZXMsXG4gIGlkZW50aXR5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSWRlbnRpdHkuaWRlbnRpdHlEZXBlbmRlbmNpZXMsXG4gIGludkRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0ludi5pbnZEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUV4cG06IF9mYWN0b3JpZXNBbnkuY3JlYXRlRXhwbVxufTtcbmV4cG9ydHMuZXhwbURlcGVuZGVuY2llcyA9IGV4cG1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmV4cG0xRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBleHBtMURlcGVuZGVuY2llcyA9IHtcbiAgQ29tcGxleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5Db21wbGV4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVFeHBtMTogX2ZhY3Rvcmllc0FueS5jcmVhdGVFeHBtMVxufTtcbmV4cG9ydHMuZXhwbTFEZXBlbmRlbmNpZXMgPSBleHBtMURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZXllRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZXllRGVwZW5kZW5jaWVzID0ge1xuICBjcmVhdGVFeWU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRXllXG59O1xuZXhwb3J0cy5leWVEZXBlbmRlbmNpZXMgPSBleWVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZhY3RvcmlhbERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNHYW1tYSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0dhbW1hLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZhY3RvcmlhbERlcGVuZGVuY2llcyA9IHtcbiAgZ2FtbWFEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNHYW1tYS5nYW1tYURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRmFjdG9yaWFsOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUZhY3RvcmlhbFxufTtcbmV4cG9ydHMuZmFjdG9yaWFsRGVwZW5kZW5jaWVzID0gZmFjdG9yaWFsRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5mYWxzZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZhbHNlRGVwZW5kZW5jaWVzID0ge1xuICBjcmVhdGVGYWxzZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVGYWxzZVxufTtcbmV4cG9ydHMuZmFsc2VEZXBlbmRlbmNpZXMgPSBmYWxzZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZmFyYWRheURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZmFyYWRheURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUZhcmFkYXk6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRmFyYWRheVxufTtcbmV4cG9ydHMuZmFyYWRheURlcGVuZGVuY2llcyA9IGZhcmFkYXlEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZlcm1pQ291cGxpbmdEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZlcm1pQ291cGxpbmdEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVGZXJtaUNvdXBsaW5nOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUZlcm1pQ291cGxpbmdcbn07XG5leHBvcnRzLmZlcm1pQ291cGxpbmdEZXBlbmRlbmNpZXMgPSBmZXJtaUNvdXBsaW5nRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5GaWJvbmFjY2lIZWFwRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0xhcmdlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0xhcmdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU21hbGxlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NtYWxsZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgRmlib25hY2NpSGVhcERlcGVuZGVuY2llcyA9IHtcbiAgbGFyZ2VyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTGFyZ2VyLmxhcmdlckRlcGVuZGVuY2llcyxcbiAgc21hbGxlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NtYWxsZXIuc21hbGxlckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlRmlib25hY2NpSGVhcENsYXNzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUZpYm9uYWNjaUhlYXBDbGFzc1xufTtcbmV4cG9ydHMuRmlib25hY2NpSGVhcERlcGVuZGVuY2llcyA9IEZpYm9uYWNjaUhlYXBEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZpbHRlckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZpbHRlckRlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRmlsdGVyOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUZpbHRlclxufTtcbmV4cG9ydHMuZmlsdGVyRGVwZW5kZW5jaWVzID0gZmlsdGVyRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5maWx0ZXJUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBmaWx0ZXJUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUZpbHRlclRyYW5zZm9ybTogX2ZhY3Rvcmllc0FueS5jcmVhdGVGaWx0ZXJUcmFuc2Zvcm1cbn07XG5leHBvcnRzLmZpbHRlclRyYW5zZm9ybURlcGVuZGVuY2llcyA9IGZpbHRlclRyYW5zZm9ybURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZmluZVN0cnVjdHVyZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZpbmVTdHJ1Y3R1cmVEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlRmluZVN0cnVjdHVyZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVGaW5lU3RydWN0dXJlXG59O1xuZXhwb3J0cy5maW5lU3RydWN0dXJlRGVwZW5kZW5jaWVzID0gZmluZVN0cnVjdHVyZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZmlyc3RSYWRpYXRpb25EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZpcnN0UmFkaWF0aW9uRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRmlyc3RSYWRpYXRpb246IF9mYWN0b3JpZXNBbnkuY3JlYXRlRmlyc3RSYWRpYXRpb25cbn07XG5leHBvcnRzLmZpcnN0UmFkaWF0aW9uRGVwZW5kZW5jaWVzID0gZmlyc3RSYWRpYXRpb25EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZpeERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NlaWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDZWlsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGbG9vciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Zsb29yLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZpeERlcGVuZGVuY2llcyA9IHtcbiAgQ29tcGxleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5Db21wbGV4RGVwZW5kZW5jaWVzLFxuICBjZWlsRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ2VpbC5jZWlsRGVwZW5kZW5jaWVzLFxuICBmbG9vckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0Zsb29yLmZsb29yRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVGaXg6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRml4XG59O1xuZXhwb3J0cy5maXhEZXBlbmRlbmNpZXMgPSBmaXhEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZsYXR0ZW5EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZsYXR0ZW5EZXBlbmRlbmNpZXMgPSB7XG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUZsYXR0ZW46IF9mYWN0b3JpZXNBbnkuY3JlYXRlRmxhdHRlblxufTtcbmV4cG9ydHMuZmxhdHRlbkRlcGVuZGVuY2llcyA9IGZsYXR0ZW5EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZsb29yRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1JvdW5kID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUm91bmQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZmxvb3JEZXBlbmRlbmNpZXMgPSB7XG4gIHJvdW5kRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUm91bmQucm91bmREZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUZsb29yOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUZsb29yXG59O1xuZXhwb3J0cy5mbG9vckRlcGVuZGVuY2llcyA9IGZsb29yRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5mb3JFYWNoRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZm9yRWFjaERlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRm9yRWFjaDogX2ZhY3Rvcmllc0FueS5jcmVhdGVGb3JFYWNoXG59O1xuZXhwb3J0cy5mb3JFYWNoRGVwZW5kZW5jaWVzID0gZm9yRWFjaERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZm9yRWFjaFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZvckVhY2hUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUZvckVhY2hUcmFuc2Zvcm06IF9mYWN0b3JpZXNBbnkuY3JlYXRlRm9yRWFjaFRyYW5zZm9ybVxufTtcbmV4cG9ydHMuZm9yRWFjaFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IGZvckVhY2hUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZvcm1hdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZvcm1hdERlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRm9ybWF0OiBfZmFjdG9yaWVzQW55LmNyZWF0ZUZvcm1hdFxufTtcbmV4cG9ydHMuZm9ybWF0RGVwZW5kZW5jaWVzID0gZm9ybWF0RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5mcmFjdGlvbkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNGcmFjdGlvbkNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRnJhY3Rpb25DbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBmcmFjdGlvbkRlcGVuZGVuY2llcyA9IHtcbiAgRnJhY3Rpb25EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGcmFjdGlvbkNsYXNzLkZyYWN0aW9uRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVGcmFjdGlvbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVGcmFjdGlvblxufTtcbmV4cG9ydHMuZnJhY3Rpb25EZXBlbmRlbmNpZXMgPSBmcmFjdGlvbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuRnJhY3Rpb25EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBGcmFjdGlvbkRlcGVuZGVuY2llcyA9IHtcbiAgY3JlYXRlRnJhY3Rpb25DbGFzczogX2ZhY3Rvcmllc0FueS5jcmVhdGVGcmFjdGlvbkNsYXNzXG59O1xuZXhwb3J0cy5GcmFjdGlvbkRlcGVuZGVuY2llcyA9IEZyYWN0aW9uRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5GdW5jdGlvbkFzc2lnbm1lbnROb2RlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc05vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIEZ1bmN0aW9uQXNzaWdubWVudE5vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOb2RlLk5vZGVEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUZ1bmN0aW9uQXNzaWdubWVudE5vZGU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZVxufTtcbmV4cG9ydHMuRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZURlcGVuZGVuY2llcyA9IEZ1bmN0aW9uQXNzaWdubWVudE5vZGVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkZ1bmN0aW9uTm9kZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3ltYm9sTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N5bWJvbE5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgRnVuY3Rpb25Ob2RlRGVwZW5kZW5jaWVzID0ge1xuICBOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTm9kZS5Ob2RlRGVwZW5kZW5jaWVzLFxuICBTeW1ib2xOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3ltYm9sTm9kZS5TeW1ib2xOb2RlRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVGdW5jdGlvbk5vZGU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRnVuY3Rpb25Ob2RlXG59O1xuZXhwb3J0cy5GdW5jdGlvbk5vZGVEZXBlbmRlbmNpZXMgPSBGdW5jdGlvbk5vZGVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmdhbW1hRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUG93ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUG93LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGdhbW1hRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5tdWx0aXBseVNjYWxhckRlcGVuZGVuY2llcyxcbiAgcG93RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUG93LnBvd0RlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlR2FtbWE6IF9mYWN0b3JpZXNBbnkuY3JlYXRlR2FtbWFcbn07XG5leHBvcnRzLmdhbW1hRGVwZW5kZW5jaWVzID0gZ2FtbWFEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmdhc0NvbnN0YW50RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBnYXNDb25zdGFudERlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUdhc0NvbnN0YW50OiBfZmFjdG9yaWVzQW55LmNyZWF0ZUdhc0NvbnN0YW50XG59O1xuZXhwb3J0cy5nYXNDb25zdGFudERlcGVuZGVuY2llcyA9IGdhc0NvbnN0YW50RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5nY2REZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBnY2REZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVHY2Q6IF9mYWN0b3JpZXNBbnkuY3JlYXRlR2NkXG59O1xuZXhwb3J0cy5nY2REZXBlbmRlbmNpZXMgPSBnY2REZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmdldE1hdHJpeERhdGFUeXBlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZ2V0TWF0cml4RGF0YVR5cGVEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUdldE1hdHJpeERhdGFUeXBlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUdldE1hdHJpeERhdGFUeXBlXG59O1xuZXhwb3J0cy5nZXRNYXRyaXhEYXRhVHlwZURlcGVuZGVuY2llcyA9IGdldE1hdHJpeERhdGFUeXBlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5ncmF2aXRhdGlvbkNvbnN0YW50RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBncmF2aXRhdGlvbkNvbnN0YW50RGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlR3Jhdml0YXRpb25Db25zdGFudDogX2ZhY3Rvcmllc0FueS5jcmVhdGVHcmF2aXRhdGlvbkNvbnN0YW50XG59O1xuZXhwb3J0cy5ncmF2aXRhdGlvbkNvbnN0YW50RGVwZW5kZW5jaWVzID0gZ3Jhdml0YXRpb25Db25zdGFudERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZ3Jhdml0eURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZ3Jhdml0eURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUdyYXZpdHk6IF9mYWN0b3JpZXNBbnkuY3JlYXRlR3Jhdml0eVxufTtcbmV4cG9ydHMuZ3Jhdml0eURlcGVuZGVuY2llcyA9IGdyYXZpdHlEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmhhcnRyZWVFbmVyZ3lEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGhhcnRyZWVFbmVyZ3lEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVIYXJ0cmVlRW5lcmd5OiBfZmFjdG9yaWVzQW55LmNyZWF0ZUhhcnRyZWVFbmVyZ3lcbn07XG5leHBvcnRzLmhhcnRyZWVFbmVyZ3lEZXBlbmRlbmNpZXMgPSBoYXJ0cmVlRW5lcmd5RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5oYXNOdW1lcmljVmFsdWVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNOdW1lcmljID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNOdW1lcmljLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGhhc051bWVyaWNWYWx1ZURlcGVuZGVuY2llcyA9IHtcbiAgaXNOdW1lcmljRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSXNOdW1lcmljLmlzTnVtZXJpY0RlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlSGFzTnVtZXJpY1ZhbHVlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUhhc051bWVyaWNWYWx1ZVxufTtcbmV4cG9ydHMuaGFzTnVtZXJpY1ZhbHVlRGVwZW5kZW5jaWVzID0gaGFzTnVtZXJpY1ZhbHVlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5oZWxwRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0hlbHBDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0hlbHBDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBoZWxwRGVwZW5kZW5jaWVzID0ge1xuICBIZWxwRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSGVscENsYXNzLkhlbHBEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUhlbHA6IF9mYWN0b3JpZXNBbnkuY3JlYXRlSGVscFxufTtcbmV4cG9ydHMuaGVscERlcGVuZGVuY2llcyA9IGhlbHBEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkhlbHBEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGFyc2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNQYXJzZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBIZWxwRGVwZW5kZW5jaWVzID0ge1xuICBwYXJzZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1BhcnNlLnBhcnNlRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVIZWxwQ2xhc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlSGVscENsYXNzXG59O1xuZXhwb3J0cy5IZWxwRGVwZW5kZW5jaWVzID0gSGVscERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaHlwb3REZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWJzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWJzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNQb3NpdGl2ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzUG9zaXRpdmUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NtYWxsZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTbWFsbGVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTcXJ0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3FydC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBoeXBvdERlcGVuZGVuY2llcyA9IHtcbiAgYWJzRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWJzLmFic0RlcGVuZGVuY2llcyxcbiAgYWRkU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmFkZFNjYWxhckRlcGVuZGVuY2llcyxcbiAgZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmRpdmlkZVNjYWxhckRlcGVuZGVuY2llcyxcbiAgaXNQb3NpdGl2ZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzUG9zaXRpdmUuaXNQb3NpdGl2ZURlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5tdWx0aXBseVNjYWxhckRlcGVuZGVuY2llcyxcbiAgc21hbGxlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NtYWxsZXIuc21hbGxlckRlcGVuZGVuY2llcyxcbiAgc3FydERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NxcnQuc3FydERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlSHlwb3Q6IF9mYWN0b3JpZXNBbnkuY3JlYXRlSHlwb3Rcbn07XG5leHBvcnRzLmh5cG90RGVwZW5kZW5jaWVzID0gaHlwb3REZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmlEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGlEZXBlbmRlbmNpZXMgPSB7XG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgY3JlYXRlSTogX2ZhY3Rvcmllc0FueS5jcmVhdGVJXG59O1xuZXhwb3J0cy5pRGVwZW5kZW5jaWVzID0gaURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaWRlbnRpdHlEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3BhcnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBpZGVudGl0eURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIFNwYXJzZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzLlNwYXJzZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlSWRlbnRpdHk6IF9mYWN0b3JpZXNBbnkuY3JlYXRlSWRlbnRpdHlcbn07XG5leHBvcnRzLmlkZW50aXR5RGVwZW5kZW5jaWVzID0gaWRlbnRpdHlEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmltRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgaW1EZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUltOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUltXG59O1xuZXhwb3J0cy5pbURlcGVuZGVuY2llcyA9IGltRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5JbW11dGFibGVEZW5zZU1hdHJpeERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU21hbGxlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NtYWxsZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgSW1tdXRhYmxlRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgc21hbGxlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NtYWxsZXIuc21hbGxlckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlSW1tdXRhYmxlRGVuc2VNYXRyaXhDbGFzczogX2ZhY3Rvcmllc0FueS5jcmVhdGVJbW11dGFibGVEZW5zZU1hdHJpeENsYXNzXG59O1xuZXhwb3J0cy5JbW11dGFibGVEZW5zZU1hdHJpeERlcGVuZGVuY2llcyA9IEltbXV0YWJsZURlbnNlTWF0cml4RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pbmRleERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBpbmRleERlcGVuZGVuY2llcyA9IHtcbiAgSW5kZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJbmRleENsYXNzLkluZGV4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVJbmRleDogX2ZhY3Rvcmllc0FueS5jcmVhdGVJbmRleFxufTtcbmV4cG9ydHMuaW5kZXhEZXBlbmRlbmNpZXMgPSBpbmRleERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuSW5kZXhEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW1tdXRhYmxlRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0ltbXV0YWJsZURlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgSW5kZXhEZXBlbmRlbmNpZXMgPSB7XG4gIEltbXV0YWJsZURlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSW1tdXRhYmxlRGVuc2VNYXRyaXhDbGFzcy5JbW11dGFibGVEZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgY3JlYXRlSW5kZXhDbGFzczogX2ZhY3Rvcmllc0FueS5jcmVhdGVJbmRleENsYXNzXG59O1xuZXhwb3J0cy5JbmRleERlcGVuZGVuY2llcyA9IEluZGV4RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5JbmRleE5vZGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc05vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1JhbmdlQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNSYW5nZUNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaXplID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU2l6ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBJbmRleE5vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOb2RlLk5vZGVEZXBlbmRlbmNpZXMsXG4gIFJhbmdlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUmFuZ2VDbGFzcy5SYW5nZURlcGVuZGVuY2llcyxcbiAgc2l6ZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NpemUuc2l6ZURlcGVuZGVuY2llcyxcbiAgY3JlYXRlSW5kZXhOb2RlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUluZGV4Tm9kZVxufTtcbmV4cG9ydHMuSW5kZXhOb2RlRGVwZW5kZW5jaWVzID0gSW5kZXhOb2RlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pbmRleFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBpbmRleFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHtcbiAgSW5kZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJbmRleENsYXNzLkluZGV4RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVJbmRleFRyYW5zZm9ybTogX2ZhY3Rvcmllc0FueS5jcmVhdGVJbmRleFRyYW5zZm9ybVxufTtcbmV4cG9ydHMuaW5kZXhUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSBpbmRleFRyYW5zZm9ybURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuSW5maW5pdHlEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBJbmZpbml0eURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVJbmZpbml0eTogX2ZhY3Rvcmllc0FueS5jcmVhdGVJbmZpbml0eVxufTtcbmV4cG9ydHMuSW5maW5pdHlEZXBlbmRlbmNpZXMgPSBJbmZpbml0eURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaW50ZXJzZWN0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FicyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Ficy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTbWFsbGVyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU21hbGxlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3VidHJhY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBpbnRlcnNlY3REZXBlbmRlbmNpZXMgPSB7XG4gIGFic0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0Ficy5hYnNEZXBlbmRlbmNpZXMsXG4gIGFkZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZC5hZGREZXBlbmRlbmNpZXMsXG4gIGFkZFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZFNjYWxhci5hZGRTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGRpdmlkZVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5kaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIubXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIHNtYWxsZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTbWFsbGVyLnNtYWxsZXJEZXBlbmRlbmNpZXMsXG4gIHN1YnRyYWN0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3VidHJhY3Quc3VidHJhY3REZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUludGVyc2VjdDogX2ZhY3Rvcmllc0FueS5jcmVhdGVJbnRlcnNlY3Rcbn07XG5leHBvcnRzLmludGVyc2VjdERlcGVuZGVuY2llcyA9IGludGVyc2VjdERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaW52RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FicyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Ficy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEZXQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZXQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSWRlbnRpdHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJZGVudGl0eS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5hcnlNaW51cy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBpbnZEZXBlbmRlbmNpZXMgPSB7XG4gIGFic0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0Ficy5hYnNEZXBlbmRlbmNpZXMsXG4gIGFkZFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZFNjYWxhci5hZGRTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGRldERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RldC5kZXREZXBlbmRlbmNpZXMsXG4gIGRpdmlkZVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5kaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGlkZW50aXR5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSWRlbnRpdHkuaWRlbnRpdHlEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIHVuYXJ5TWludXNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzLnVuYXJ5TWludXNEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUludjogX2ZhY3Rvcmllc0FueS5jcmVhdGVJbnZcbn07XG5leHBvcnRzLmludkRlcGVuZGVuY2llcyA9IGludkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgaW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUludmVyc2VDb25kdWN0YW5jZVF1YW50dW06IF9mYWN0b3JpZXNBbnkuY3JlYXRlSW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bVxufTtcbmV4cG9ydHMuaW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bURlcGVuZGVuY2llcyA9IGludmVyc2VDb25kdWN0YW5jZVF1YW50dW1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmlzSW50ZWdlckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGlzSW50ZWdlckRlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlSXNJbnRlZ2VyOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUlzSW50ZWdlclxufTtcbmV4cG9ydHMuaXNJbnRlZ2VyRGVwZW5kZW5jaWVzID0gaXNJbnRlZ2VyRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pc05hTkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGlzTmFORGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVJc05hTjogX2ZhY3Rvcmllc0FueS5jcmVhdGVJc05hTlxufTtcbmV4cG9ydHMuaXNOYU5EZXBlbmRlbmNpZXMgPSBpc05hTkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaXNOZWdhdGl2ZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGlzTmVnYXRpdmVEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUlzTmVnYXRpdmU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlSXNOZWdhdGl2ZVxufTtcbmV4cG9ydHMuaXNOZWdhdGl2ZURlcGVuZGVuY2llcyA9IGlzTmVnYXRpdmVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmlzTnVtZXJpY0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGlzTnVtZXJpY0RlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlSXNOdW1lcmljOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUlzTnVtZXJpY1xufTtcbmV4cG9ydHMuaXNOdW1lcmljRGVwZW5kZW5jaWVzID0gaXNOdW1lcmljRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pc1Bvc2l0aXZlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgaXNQb3NpdGl2ZURlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlSXNQb3NpdGl2ZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVJc1Bvc2l0aXZlXG59O1xuZXhwb3J0cy5pc1Bvc2l0aXZlRGVwZW5kZW5jaWVzID0gaXNQb3NpdGl2ZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaXNQcmltZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGlzUHJpbWVEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUlzUHJpbWU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlSXNQcmltZVxufTtcbmV4cG9ydHMuaXNQcmltZURlcGVuZGVuY2llcyA9IGlzUHJpbWVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmlzWmVyb0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGlzWmVyb0RlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlSXNaZXJvOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUlzWmVyb1xufTtcbmV4cG9ydHMuaXNaZXJvRGVwZW5kZW5jaWVzID0gaXNaZXJvRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5rbGRpdmVyZ2VuY2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEb3REaXZpZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEb3REaXZpZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzTnVtZXJpYyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzTnVtZXJpYy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTG9nID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTG9nLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1bSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1bS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBrbGRpdmVyZ2VuY2VEZXBlbmRlbmNpZXMgPSB7XG4gIGRpdmlkZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZS5kaXZpZGVEZXBlbmRlbmNpZXMsXG4gIGRvdERpdmlkZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RvdERpdmlkZS5kb3REaXZpZGVEZXBlbmRlbmNpZXMsXG4gIGlzTnVtZXJpY0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzTnVtZXJpYy5pc051bWVyaWNEZXBlbmRlbmNpZXMsXG4gIGxvZ0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0xvZy5sb2dEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXMsXG4gIHN1bURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1bS5zdW1EZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUtsZGl2ZXJnZW5jZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVLbGRpdmVyZ2VuY2Vcbn07XG5leHBvcnRzLmtsZGl2ZXJnZW5jZURlcGVuZGVuY2llcyA9IGtsZGl2ZXJnZW5jZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMua2xpdHppbmdEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGtsaXR6aW5nRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlS2xpdHppbmc6IF9mYWN0b3JpZXNBbnkuY3JlYXRlS2xpdHppbmdcbn07XG5leHBvcnRzLmtsaXR6aW5nRGVwZW5kZW5jaWVzID0ga2xpdHppbmdEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmtyb25EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGtyb25EZXBlbmRlbmNpZXMgPSB7XG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIubXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUtyb246IF9mYWN0b3JpZXNBbnkuY3JlYXRlS3JvblxufTtcbmV4cG9ydHMua3JvbkRlcGVuZGVuY2llcyA9IGtyb25EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkxOMTBEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBMTjEwRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUxOMTA6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTE4xMFxufTtcbmV4cG9ydHMuTE4xMERlcGVuZGVuY2llcyA9IExOMTBEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkxOMkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIExOMkRlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVMTjI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTE4yXG59O1xuZXhwb3J0cy5MTjJEZXBlbmRlbmNpZXMgPSBMTjJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkxPRzEwRURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIExPRzEwRURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVMT0cxMEU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTE9HMTBFXG59O1xuZXhwb3J0cy5MT0cxMEVEZXBlbmRlbmNpZXMgPSBMT0cxMEVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkxPRzJFRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgTE9HMkVEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlTE9HMkU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTE9HMkVcbn07XG5leHBvcnRzLkxPRzJFRGVwZW5kZW5jaWVzID0gTE9HMkVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxhcmdlckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGxhcmdlckRlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVMYXJnZXI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTGFyZ2VyXG59O1xuZXhwb3J0cy5sYXJnZXJEZXBlbmRlbmNpZXMgPSBsYXJnZXJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxhcmdlckVxRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbGFyZ2VyRXFEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTGFyZ2VyRXE6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTGFyZ2VyRXFcbn07XG5leHBvcnRzLmxhcmdlckVxRGVwZW5kZW5jaWVzID0gbGFyZ2VyRXFEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxjbURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbGNtRGVwZW5kZW5jaWVzID0ge1xuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVMY206IF9mYWN0b3JpZXNBbnkuY3JlYXRlTGNtXG59O1xuZXhwb3J0cy5sY21EZXBlbmRlbmNpZXMgPSBsY21EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxlZnRTaGlmdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNaZXJvcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1plcm9zLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGxlZnRTaGlmdERlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICB6ZXJvc0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1plcm9zLnplcm9zRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVMZWZ0U2hpZnQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTGVmdFNoaWZ0XG59O1xuZXhwb3J0cy5sZWZ0U2hpZnREZXBlbmRlbmNpZXMgPSBsZWZ0U2hpZnREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxvZ0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBsb2dEZXBlbmRlbmNpZXMgPSB7XG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmRpdmlkZVNjYWxhckRlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTG9nOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUxvZ1xufTtcbmV4cG9ydHMubG9nRGVwZW5kZW5jaWVzID0gbG9nRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5sb2cxMERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbG9nMTBEZXBlbmRlbmNpZXMgPSB7XG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTG9nMTA6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTG9nMTBcbn07XG5leHBvcnRzLmxvZzEwRGVwZW5kZW5jaWVzID0gbG9nMTBEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxvZzFwRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMb2cgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNMb2cuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbG9nMXBEZXBlbmRlbmNpZXMgPSB7XG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmRpdmlkZVNjYWxhckRlcGVuZGVuY2llcyxcbiAgbG9nRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTG9nLmxvZ0RlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTG9nMXA6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTG9nMXBcbn07XG5leHBvcnRzLmxvZzFwRGVwZW5kZW5jaWVzID0gbG9nMXBEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxvZzJEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGxvZzJEZXBlbmRlbmNpZXMgPSB7XG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTG9nMjogX2ZhY3Rvcmllc0FueS5jcmVhdGVMb2cyXG59O1xuZXhwb3J0cy5sb2cyRGVwZW5kZW5jaWVzID0gbG9nMkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubG9zY2htaWR0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBsb3NjaG1pZHREZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVMb3NjaG1pZHQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTG9zY2htaWR0XG59O1xuZXhwb3J0cy5sb3NjaG1pZHREZXBlbmRlbmNpZXMgPSBsb3NjaG1pZHREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxzb2x2ZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnRyYWN0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3VidHJhY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbHNvbHZlRGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGRpdmlkZVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5kaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIubXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIHN1YnRyYWN0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3VidHJhY3Quc3VidHJhY3REZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUxzb2x2ZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVMc29sdmVcbn07XG5leHBvcnRzLmxzb2x2ZURlcGVuZGVuY2llcyA9IGxzb2x2ZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubHVwRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTcGFDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NwYUNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBYnMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBYnMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMYXJnZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNMYXJnZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3VidHJhY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5hcnlNaW51cyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuYXJ5TWludXMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbHVwRGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIFNwYURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NwYUNsYXNzLlNwYURlcGVuZGVuY2llcyxcbiAgU3BhcnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3BhcnNlTWF0cml4Q2xhc3MuU3BhcnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBhYnNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBYnMuYWJzRGVwZW5kZW5jaWVzLFxuICBhZGRTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuYWRkU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBkaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBsYXJnZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNMYXJnZXIubGFyZ2VyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLm11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzLFxuICBzdWJ0cmFjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnRyYWN0LnN1YnRyYWN0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICB1bmFyeU1pbnVzRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5hcnlNaW51cy51bmFyeU1pbnVzRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVMdXA6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTHVwXG59O1xuZXhwb3J0cy5sdXBEZXBlbmRlbmNpZXMgPSBsdXBEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmx1c29sdmVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0xzb2x2ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0xzb2x2ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTHVwID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTHVwLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NsdSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NsdS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVXNvbHZlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVXNvbHZlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGx1c29sdmVEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgbHNvbHZlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTHNvbHZlLmxzb2x2ZURlcGVuZGVuY2llcyxcbiAgbHVwRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTHVwLmx1cERlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgc2x1RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU2x1LnNsdURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgdXNvbHZlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVXNvbHZlLnVzb2x2ZURlcGVuZGVuY2llcyxcbiAgY3JlYXRlTHVzb2x2ZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVMdXNvbHZlXG59O1xuZXhwb3J0cy5sdXNvbHZlRGVwZW5kZW5jaWVzID0gbHVzb2x2ZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWFkRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FicyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Ficy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWFwID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWFwLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNZWRpYW4gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNZWRpYW4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnRyYWN0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3VidHJhY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbWFkRGVwZW5kZW5jaWVzID0ge1xuICBhYnNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBYnMuYWJzRGVwZW5kZW5jaWVzLFxuICBtYXBEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXAubWFwRGVwZW5kZW5jaWVzLFxuICBtZWRpYW5EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNZWRpYW4ubWVkaWFuRGVwZW5kZW5jaWVzLFxuICBzdWJ0cmFjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnRyYWN0LnN1YnRyYWN0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNYWQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTWFkXG59O1xuZXhwb3J0cy5tYWREZXBlbmRlbmNpZXMgPSBtYWREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1hZ25ldGljQ29uc3RhbnREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG1hZ25ldGljQ29uc3RhbnREZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNYWduZXRpY0NvbnN0YW50OiBfZmFjdG9yaWVzQW55LmNyZWF0ZU1hZ25ldGljQ29uc3RhbnRcbn07XG5leHBvcnRzLm1hZ25ldGljQ29uc3RhbnREZXBlbmRlbmNpZXMgPSBtYWduZXRpY0NvbnN0YW50RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tYWduZXRpY0ZsdXhRdWFudHVtRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBtYWduZXRpY0ZsdXhRdWFudHVtRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTWFnbmV0aWNGbHV4UXVhbnR1bTogX2ZhY3Rvcmllc0FueS5jcmVhdGVNYWduZXRpY0ZsdXhRdWFudHVtXG59O1xuZXhwb3J0cy5tYWduZXRpY0ZsdXhRdWFudHVtRGVwZW5kZW5jaWVzID0gbWFnbmV0aWNGbHV4UXVhbnR1bURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWFwRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbWFwRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNYXA6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTWFwXG59O1xuZXhwb3J0cy5tYXBEZXBlbmRlbmNpZXMgPSBtYXBEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1hcFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG1hcFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTWFwVHJhbnNmb3JtOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU1hcFRyYW5zZm9ybVxufTtcbmV4cG9ydHMubWFwVHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gbWFwVHJhbnNmb3JtRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tYXRyaXhEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3BhcnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbWF0cml4RGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIE1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeENsYXNzLk1hdHJpeERlcGVuZGVuY2llcyxcbiAgU3BhcnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3BhcnNlTWF0cml4Q2xhc3MuU3BhcnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNYXRyaXg6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTWF0cml4XG59O1xuZXhwb3J0cy5tYXRyaXhEZXBlbmRlbmNpZXMgPSBtYXRyaXhEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLk1hdHJpeERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIE1hdHJpeERlcGVuZGVuY2llcyA9IHtcbiAgY3JlYXRlTWF0cml4Q2xhc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTWF0cml4Q2xhc3Ncbn07XG5leHBvcnRzLk1hdHJpeERlcGVuZGVuY2llcyA9IE1hdHJpeERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWF4RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0xhcmdlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0xhcmdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBtYXhEZXBlbmRlbmNpZXMgPSB7XG4gIGxhcmdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0xhcmdlci5sYXJnZXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU1heDogX2ZhY3Rvcmllc0FueS5jcmVhdGVNYXhcbn07XG5leHBvcnRzLm1heERlcGVuZGVuY2llcyA9IG1heERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWF4VHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0xhcmdlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0xhcmdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBtYXhUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB7XG4gIGxhcmdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0xhcmdlci5sYXJnZXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU1heFRyYW5zZm9ybTogX2ZhY3Rvcmllc0FueS5jcmVhdGVNYXhUcmFuc2Zvcm1cbn07XG5leHBvcnRzLm1heFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IG1heFRyYW5zZm9ybURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWVhbkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBtZWFuRGVwZW5kZW5jaWVzID0ge1xuICBhZGREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGQuYWRkRGVwZW5kZW5jaWVzLFxuICBkaXZpZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEaXZpZGUuZGl2aWRlRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNZWFuOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU1lYW5cbn07XG5leHBvcnRzLm1lYW5EZXBlbmRlbmNpZXMgPSBtZWFuRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tZWFuVHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG1lYW5UcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB7XG4gIGFkZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZC5hZGREZXBlbmRlbmNpZXMsXG4gIGRpdmlkZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZS5kaXZpZGVEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU1lYW5UcmFuc2Zvcm06IF9mYWN0b3JpZXNBbnkuY3JlYXRlTWVhblRyYW5zZm9ybVxufTtcbmV4cG9ydHMubWVhblRyYW5zZm9ybURlcGVuZGVuY2llcyA9IG1lYW5UcmFuc2Zvcm1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1lZGlhbkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBhcmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wYXJlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEaXZpZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEaXZpZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BhcnRpdGlvblNlbGVjdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1BhcnRpdGlvblNlbGVjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBtZWRpYW5EZXBlbmRlbmNpZXMgPSB7XG4gIGFkZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZC5hZGREZXBlbmRlbmNpZXMsXG4gIGNvbXBhcmVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wYXJlLmNvbXBhcmVEZXBlbmRlbmNpZXMsXG4gIGRpdmlkZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZS5kaXZpZGVEZXBlbmRlbmNpZXMsXG4gIHBhcnRpdGlvblNlbGVjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1BhcnRpdGlvblNlbGVjdC5wYXJ0aXRpb25TZWxlY3REZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU1lZGlhbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVNZWRpYW5cbn07XG5leHBvcnRzLm1lZGlhbkRlcGVuZGVuY2llcyA9IG1lZGlhbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWluRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1NtYWxsZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTbWFsbGVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG1pbkRlcGVuZGVuY2llcyA9IHtcbiAgc21hbGxlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NtYWxsZXIuc21hbGxlckRlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTWluOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU1pblxufTtcbmV4cG9ydHMubWluRGVwZW5kZW5jaWVzID0gbWluRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5taW5UcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzU21hbGxlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NtYWxsZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbWluVHJhbnNmb3JtRGVwZW5kZW5jaWVzID0ge1xuICBzbWFsbGVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU21hbGxlci5zbWFsbGVyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNaW5UcmFuc2Zvcm06IF9mYWN0b3JpZXNBbnkuY3JlYXRlTWluVHJhbnNmb3JtXG59O1xuZXhwb3J0cy5taW5UcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSBtaW5UcmFuc2Zvcm1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1vZERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG1vZERlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNb2Q6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTW9kXG59O1xuZXhwb3J0cy5tb2REZXBlbmRlbmNpZXMgPSBtb2REZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1vZGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNOYU4gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc05hTi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNOdW1lcmljID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNOdW1lcmljLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG1vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIGlzTmFORGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSXNOYU4uaXNOYU5EZXBlbmRlbmNpZXMsXG4gIGlzTnVtZXJpY0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzTnVtZXJpYy5pc051bWVyaWNEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU1vZGU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTW9kZVxufTtcbmV4cG9ydHMubW9kZURlcGVuZGVuY2llcyA9IG1vZGVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1vbGFyTWFzc0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbW9sYXJNYXNzRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTW9sYXJNYXNzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU1vbGFyTWFzc1xufTtcbmV4cG9ydHMubW9sYXJNYXNzRGVwZW5kZW5jaWVzID0gbW9sYXJNYXNzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tb2xhck1hc3NDMTJEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG1vbGFyTWFzc0MxMkRlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU1vbGFyTWFzc0MxMjogX2ZhY3Rvcmllc0FueS5jcmVhdGVNb2xhck1hc3NDMTJcbn07XG5leHBvcnRzLm1vbGFyTWFzc0MxMkRlcGVuZGVuY2llcyA9IG1vbGFyTWFzc0MxMkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubW9sYXJQbGFuY2tDb25zdGFudERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbW9sYXJQbGFuY2tDb25zdGFudERlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU1vbGFyUGxhbmNrQ29uc3RhbnQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTW9sYXJQbGFuY2tDb25zdGFudFxufTtcbmV4cG9ydHMubW9sYXJQbGFuY2tDb25zdGFudERlcGVuZGVuY2llcyA9IG1vbGFyUGxhbmNrQ29uc3RhbnREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1vbGFyVm9sdW1lRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBtb2xhclZvbHVtZURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU1vbGFyVm9sdW1lOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU1vbGFyVm9sdW1lXG59O1xuZXhwb3J0cy5tb2xhclZvbHVtZURlcGVuZGVuY2llcyA9IG1vbGFyVm9sdW1lRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tdWx0aW5vbWlhbERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRmFjdG9yaWFsID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRmFjdG9yaWFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc0ludGVnZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc0ludGVnZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzUG9zaXRpdmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc1Bvc2l0aXZlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG11bHRpbm9taWFsRGVwZW5kZW5jaWVzID0ge1xuICBhZGREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGQuYWRkRGVwZW5kZW5jaWVzLFxuICBkaXZpZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEaXZpZGUuZGl2aWRlRGVwZW5kZW5jaWVzLFxuICBmYWN0b3JpYWxEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGYWN0b3JpYWwuZmFjdG9yaWFsRGVwZW5kZW5jaWVzLFxuICBpc0ludGVnZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc0ludGVnZXIuaXNJbnRlZ2VyRGVwZW5kZW5jaWVzLFxuICBpc1Bvc2l0aXZlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSXNQb3NpdGl2ZS5pc1Bvc2l0aXZlRGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5Lm11bHRpcGx5RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNdWx0aW5vbWlhbDogX2ZhY3Rvcmllc0FueS5jcmVhdGVNdWx0aW5vbWlhbFxufTtcbmV4cG9ydHMubXVsdGlub21pYWxEZXBlbmRlbmNpZXMgPSBtdWx0aW5vbWlhbERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubXVsdGlwbHlEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbXVsdGlwbHlEZXBlbmRlbmNpZXMgPSB7XG4gIGFkZFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZFNjYWxhci5hZGRTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIubXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU11bHRpcGx5OiBfZmFjdG9yaWVzQW55LmNyZWF0ZU11bHRpcGx5XG59O1xuZXhwb3J0cy5tdWx0aXBseURlcGVuZGVuY2llcyA9IG11bHRpcGx5RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tdWx0aXBseVNjYWxhckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNdWx0aXBseVNjYWxhcjogX2ZhY3Rvcmllc0FueS5jcmVhdGVNdWx0aXBseVNjYWxhclxufTtcbmV4cG9ydHMubXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXMgPSBtdWx0aXBseVNjYWxhckRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuTmFORGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgTmFORGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU5hTjogX2ZhY3Rvcmllc0FueS5jcmVhdGVOYU5cbn07XG5leHBvcnRzLk5hTkRlcGVuZGVuY2llcyA9IE5hTkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubmV1dHJvbk1hc3NEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG5ldXRyb25NYXNzRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTmV1dHJvbk1hc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTmV1dHJvbk1hc3Ncbn07XG5leHBvcnRzLm5ldXRyb25NYXNzRGVwZW5kZW5jaWVzID0gbmV1dHJvbk1hc3NEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLk5vZGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBOb2RlRGVwZW5kZW5jaWVzID0ge1xuICBjcmVhdGVOb2RlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU5vZGVcbn07XG5leHBvcnRzLk5vZGVEZXBlbmRlbmNpZXMgPSBOb2RlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5ub3JtRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FicyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Ficy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb25qID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29uai5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTGFyZ2VyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTGFyZ2VyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BvdyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1Bvdy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU21hbGxlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NtYWxsZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NxcnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTcXJ0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG5vcm1EZXBlbmRlbmNpZXMgPSB7XG4gIGFic0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0Ficy5hYnNEZXBlbmRlbmNpZXMsXG4gIGFkZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZC5hZGREZXBlbmRlbmNpZXMsXG4gIGNvbmpEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb25qLmNvbmpEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGxhcmdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0xhcmdlci5sYXJnZXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXMsXG4gIHBvd0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1Bvdy5wb3dEZXBlbmRlbmNpZXMsXG4gIHNtYWxsZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTbWFsbGVyLnNtYWxsZXJEZXBlbmRlbmNpZXMsXG4gIHNxcnREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTcXJ0LnNxcnREZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU5vcm06IF9mYWN0b3JpZXNBbnkuY3JlYXRlTm9ybVxufTtcbmV4cG9ydHMubm9ybURlcGVuZGVuY2llcyA9IG5vcm1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm5vdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG5vdERlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTm90OiBfZmFjdG9yaWVzQW55LmNyZWF0ZU5vdFxufTtcbmV4cG9ydHMubm90RGVwZW5kZW5jaWVzID0gbm90RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5udGhSb290RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBudGhSb290RGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU50aFJvb3Q6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTnRoUm9vdFxufTtcbmV4cG9ydHMubnRoUm9vdERlcGVuZGVuY2llcyA9IG50aFJvb3REZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm50aFJvb3RzRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG50aFJvb3RzRGVwZW5kZW5jaWVzID0ge1xuICBDb21wbGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLkNvbXBsZXhEZXBlbmRlbmNpZXMsXG4gIGRpdmlkZVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5kaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU50aFJvb3RzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU50aFJvb3RzXG59O1xuZXhwb3J0cy5udGhSb290c0RlcGVuZGVuY2llcyA9IG50aFJvb3RzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5udWNsZWFyTWFnbmV0b25EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG51Y2xlYXJNYWduZXRvbkRlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU51Y2xlYXJNYWduZXRvbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVOdWNsZWFyTWFnbmV0b25cbn07XG5leHBvcnRzLm51Y2xlYXJNYWduZXRvbkRlcGVuZGVuY2llcyA9IG51Y2xlYXJNYWduZXRvbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubnVsbERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG51bGxEZXBlbmRlbmNpZXMgPSB7XG4gIGNyZWF0ZU51bGw6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTnVsbFxufTtcbmV4cG9ydHMubnVsbERlcGVuZGVuY2llcyA9IG51bGxEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm51bWJlckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG51bWJlckRlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTnVtYmVyOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU51bWJlclxufTtcbmV4cG9ydHMubnVtYmVyRGVwZW5kZW5jaWVzID0gbnVtYmVyRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5udW1lcmljRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ251bWJlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ251bWJlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRnJhY3Rpb24gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGcmFjdGlvbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTnVtYmVyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTnVtYmVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG51bWVyaWNEZXBlbmRlbmNpZXMgPSB7XG4gIGJpZ251bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ251bWJlci5iaWdudW1iZXJEZXBlbmRlbmNpZXMsXG4gIGZyYWN0aW9uRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRnJhY3Rpb24uZnJhY3Rpb25EZXBlbmRlbmNpZXMsXG4gIG51bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc051bWJlci5udW1iZXJEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU51bWVyaWM6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTnVtZXJpY1xufTtcbmV4cG9ydHMubnVtZXJpY0RlcGVuZGVuY2llcyA9IG51bWVyaWNEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLk9iamVjdE5vZGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc05vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgT2JqZWN0Tm9kZURlcGVuZGVuY2llcyA9IHtcbiAgTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc05vZGUuTm9kZURlcGVuZGVuY2llcyxcbiAgY3JlYXRlT2JqZWN0Tm9kZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVPYmplY3ROb2RlXG59O1xuZXhwb3J0cy5PYmplY3ROb2RlRGVwZW5kZW5jaWVzID0gT2JqZWN0Tm9kZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMub25lc0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgb25lc0RlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVPbmVzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU9uZXNcbn07XG5leHBvcnRzLm9uZXNEZXBlbmRlbmNpZXMgPSBvbmVzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5PcGVyYXRvck5vZGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc05vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgT3BlcmF0b3JOb2RlRGVwZW5kZW5jaWVzID0ge1xuICBOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTm9kZS5Ob2RlRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVPcGVyYXRvck5vZGU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlT3BlcmF0b3JOb2RlXG59O1xuZXhwb3J0cy5PcGVyYXRvck5vZGVEZXBlbmRlbmNpZXMgPSBPcGVyYXRvck5vZGVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm9yRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgb3JEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5lcXVhbFNjYWxhckRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlT3I6IF9mYWN0b3JpZXNBbnkuY3JlYXRlT3Jcbn07XG5leHBvcnRzLm9yRGVwZW5kZW5jaWVzID0gb3JEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLlBhcmVudGhlc2lzTm9kZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBQYXJlbnRoZXNpc05vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOb2RlLk5vZGVEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVBhcmVudGhlc2lzTm9kZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVQYXJlbnRoZXNpc05vZGVcbn07XG5leHBvcnRzLlBhcmVudGhlc2lzTm9kZURlcGVuZGVuY2llcyA9IFBhcmVudGhlc2lzTm9kZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucGFyc2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWNjZXNzb3JOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWNjZXNzb3JOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBcnJheU5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBcnJheU5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Fzc2lnbm1lbnROb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQXNzaWdubWVudE5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Jsb2NrTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Jsb2NrTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29uZGl0aW9uYWxOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29uZGl0aW9uYWxOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb25zdGFudE5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb25zdGFudE5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Z1bmN0aW9uQXNzaWdubWVudE5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGdW5jdGlvbk5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGdW5jdGlvbk5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0luZGV4Tm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0luZGV4Tm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzT2JqZWN0Tm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc09iamVjdE5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc09wZXJhdG9yTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc09wZXJhdG9yTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGFyZW50aGVzaXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUGFyZW50aGVzaXNOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSYW5nZU5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNSYW5nZU5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1JlbGF0aW9uYWxOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUmVsYXRpb25hbE5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N5bWJvbE5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTeW1ib2xOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNOdW1lcmljID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTnVtZXJpYy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBwYXJzZURlcGVuZGVuY2llcyA9IHtcbiAgQWNjZXNzb3JOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWNjZXNzb3JOb2RlLkFjY2Vzc29yTm9kZURlcGVuZGVuY2llcyxcbiAgQXJyYXlOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQXJyYXlOb2RlLkFycmF5Tm9kZURlcGVuZGVuY2llcyxcbiAgQXNzaWdubWVudE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBc3NpZ25tZW50Tm9kZS5Bc3NpZ25tZW50Tm9kZURlcGVuZGVuY2llcyxcbiAgQmxvY2tOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmxvY2tOb2RlLkJsb2NrTm9kZURlcGVuZGVuY2llcyxcbiAgQ29uZGl0aW9uYWxOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29uZGl0aW9uYWxOb2RlLkNvbmRpdGlvbmFsTm9kZURlcGVuZGVuY2llcyxcbiAgQ29uc3RhbnROb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29uc3RhbnROb2RlLkNvbnN0YW50Tm9kZURlcGVuZGVuY2llcyxcbiAgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0Z1bmN0aW9uQXNzaWdubWVudE5vZGUuRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZURlcGVuZGVuY2llcyxcbiAgRnVuY3Rpb25Ob2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRnVuY3Rpb25Ob2RlLkZ1bmN0aW9uTm9kZURlcGVuZGVuY2llcyxcbiAgSW5kZXhOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSW5kZXhOb2RlLkluZGV4Tm9kZURlcGVuZGVuY2llcyxcbiAgT2JqZWN0Tm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc09iamVjdE5vZGUuT2JqZWN0Tm9kZURlcGVuZGVuY2llcyxcbiAgT3BlcmF0b3JOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzT3BlcmF0b3JOb2RlLk9wZXJhdG9yTm9kZURlcGVuZGVuY2llcyxcbiAgUGFyZW50aGVzaXNOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUGFyZW50aGVzaXNOb2RlLlBhcmVudGhlc2lzTm9kZURlcGVuZGVuY2llcyxcbiAgUmFuZ2VOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUmFuZ2VOb2RlLlJhbmdlTm9kZURlcGVuZGVuY2llcyxcbiAgUmVsYXRpb25hbE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNSZWxhdGlvbmFsTm9kZS5SZWxhdGlvbmFsTm9kZURlcGVuZGVuY2llcyxcbiAgU3ltYm9sTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N5bWJvbE5vZGUuU3ltYm9sTm9kZURlcGVuZGVuY2llcyxcbiAgbnVtZXJpY0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc051bWVyaWMubnVtZXJpY0RlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUGFyc2U6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUGFyc2Vcbn07XG5leHBvcnRzLnBhcnNlRGVwZW5kZW5jaWVzID0gcGFyc2VEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBhcnNlckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNQYXJzZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1BhcnNlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHBhcnNlckRlcGVuZGVuY2llcyA9IHtcbiAgUGFyc2VyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUGFyc2VyQ2xhc3MuUGFyc2VyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVQYXJzZXI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUGFyc2VyXG59O1xuZXhwb3J0cy5wYXJzZXJEZXBlbmRlbmNpZXMgPSBwYXJzZXJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLlBhcnNlckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNQYXJzZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1BhcnNlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIFBhcnNlckRlcGVuZGVuY2llcyA9IHtcbiAgcGFyc2VEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNQYXJzZS5wYXJzZURlcGVuZGVuY2llcyxcbiAgY3JlYXRlUGFyc2VyQ2xhc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUGFyc2VyQ2xhc3Ncbn07XG5leHBvcnRzLlBhcnNlckRlcGVuZGVuY2llcyA9IFBhcnNlckRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucGFydGl0aW9uU2VsZWN0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBhcmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wYXJlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc05hTiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzTmFOLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc051bWVyaWMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc051bWVyaWMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcGFydGl0aW9uU2VsZWN0RGVwZW5kZW5jaWVzID0ge1xuICBjb21wYXJlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGFyZS5jb21wYXJlRGVwZW5kZW5jaWVzLFxuICBpc05hTkRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzTmFOLmlzTmFORGVwZW5kZW5jaWVzLFxuICBpc051bWVyaWNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc051bWVyaWMuaXNOdW1lcmljRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVQYXJ0aXRpb25TZWxlY3Q6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUGFydGl0aW9uU2VsZWN0XG59O1xuZXhwb3J0cy5wYXJ0aXRpb25TZWxlY3REZXBlbmRlbmNpZXMgPSBwYXJ0aXRpb25TZWxlY3REZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBlcm11dGF0aW9uc0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNGYWN0b3JpYWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGYWN0b3JpYWwuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcGVybXV0YXRpb25zRGVwZW5kZW5jaWVzID0ge1xuICBmYWN0b3JpYWxEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGYWN0b3JpYWwuZmFjdG9yaWFsRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVQZXJtdXRhdGlvbnM6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUGVybXV0YXRpb25zXG59O1xuZXhwb3J0cy5wZXJtdXRhdGlvbnNEZXBlbmRlbmNpZXMgPSBwZXJtdXRhdGlvbnNEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBoaURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHBoaURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVQaGk6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUGhpXG59O1xuZXhwb3J0cy5waGlEZXBlbmRlbmNpZXMgPSBwaGlEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBpRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcGlEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlUGk6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUGlcbn07XG5leHBvcnRzLnBpRGVwZW5kZW5jaWVzID0gcGlEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBpY2tSYW5kb21EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBwaWNrUmFuZG9tRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVQaWNrUmFuZG9tOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVBpY2tSYW5kb21cbn07XG5leHBvcnRzLnBpY2tSYW5kb21EZXBlbmRlbmNpZXMgPSBwaWNrUmFuZG9tRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5wbGFuY2tDaGFyZ2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHBsYW5ja0NoYXJnZURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVBsYW5ja0NoYXJnZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVQbGFuY2tDaGFyZ2Vcbn07XG5leHBvcnRzLnBsYW5ja0NoYXJnZURlcGVuZGVuY2llcyA9IHBsYW5ja0NoYXJnZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucGxhbmNrQ29uc3RhbnREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHBsYW5ja0NvbnN0YW50RGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUGxhbmNrQ29uc3RhbnQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUGxhbmNrQ29uc3RhbnRcbn07XG5leHBvcnRzLnBsYW5ja0NvbnN0YW50RGVwZW5kZW5jaWVzID0gcGxhbmNrQ29uc3RhbnREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBsYW5ja0xlbmd0aERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcGxhbmNrTGVuZ3RoRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUGxhbmNrTGVuZ3RoOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVBsYW5ja0xlbmd0aFxufTtcbmV4cG9ydHMucGxhbmNrTGVuZ3RoRGVwZW5kZW5jaWVzID0gcGxhbmNrTGVuZ3RoRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5wbGFuY2tNYXNzRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBwbGFuY2tNYXNzRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUGxhbmNrTWFzczogX2ZhY3Rvcmllc0FueS5jcmVhdGVQbGFuY2tNYXNzXG59O1xuZXhwb3J0cy5wbGFuY2tNYXNzRGVwZW5kZW5jaWVzID0gcGxhbmNrTWFzc0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucGxhbmNrVGVtcGVyYXR1cmVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHBsYW5ja1RlbXBlcmF0dXJlRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUGxhbmNrVGVtcGVyYXR1cmU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUGxhbmNrVGVtcGVyYXR1cmVcbn07XG5leHBvcnRzLnBsYW5ja1RlbXBlcmF0dXJlRGVwZW5kZW5jaWVzID0gcGxhbmNrVGVtcGVyYXR1cmVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBsYW5ja1RpbWVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHBsYW5ja1RpbWVEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVQbGFuY2tUaW1lOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVBsYW5ja1RpbWVcbn07XG5leHBvcnRzLnBsYW5ja1RpbWVEZXBlbmRlbmNpZXMgPSBwbGFuY2tUaW1lRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5wb3dEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGcmFjdGlvbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0ZyYWN0aW9uLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJZGVudGl0eSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lkZW50aXR5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc051bWJlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc051bWJlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBwb3dEZXBlbmRlbmNpZXMgPSB7XG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgZnJhY3Rpb25EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGcmFjdGlvbi5mcmFjdGlvbkRlcGVuZGVuY2llcyxcbiAgaWRlbnRpdHlEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJZGVudGl0eS5pZGVudGl0eURlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseS5tdWx0aXBseURlcGVuZGVuY2llcyxcbiAgbnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTnVtYmVyLm51bWJlckRlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUG93OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVBvd1xufTtcbmV4cG9ydHMucG93RGVwZW5kZW5jaWVzID0gcG93RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5wcmludERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHByaW50RGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVQcmludDogX2ZhY3Rvcmllc0FueS5jcmVhdGVQcmludFxufTtcbmV4cG9ydHMucHJpbnREZXBlbmRlbmNpZXMgPSBwcmludERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucHJvZERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHByb2REZXBlbmRlbmNpZXMgPSB7XG4gIG11bHRpcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVByb2Q6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUHJvZFxufTtcbmV4cG9ydHMucHJvZERlcGVuZGVuY2llcyA9IHByb2REZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnByb3Rvbk1hc3NEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHByb3Rvbk1hc3NEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVQcm90b25NYXNzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVByb3Rvbk1hc3Ncbn07XG5leHBvcnRzLnByb3Rvbk1hc3NEZXBlbmRlbmNpZXMgPSBwcm90b25NYXNzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5xckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wbGV4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb25qID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29uai5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJZGVudGl0eSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lkZW50aXR5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc1plcm8gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc1plcm8uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2lnbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NpZ24uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NxcnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTcXJ0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJ0cmFjdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1YnRyYWN0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5hcnlNaW51cy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzWmVyb3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNaZXJvcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBxckRlcGVuZGVuY2llcyA9IHtcbiAgYWRkU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmFkZFNjYWxhckRlcGVuZGVuY2llcyxcbiAgY29tcGxleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBsZXguY29tcGxleERlcGVuZGVuY2llcyxcbiAgY29uakRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbmouY29uakRlcGVuZGVuY2llcyxcbiAgZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmRpdmlkZVNjYWxhckRlcGVuZGVuY2llcyxcbiAgZXF1YWxEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbC5lcXVhbERlcGVuZGVuY2llcyxcbiAgaWRlbnRpdHlEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJZGVudGl0eS5pZGVudGl0eURlcGVuZGVuY2llcyxcbiAgaXNaZXJvRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSXNaZXJvLmlzWmVyb0RlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5tdWx0aXBseVNjYWxhckRlcGVuZGVuY2llcyxcbiAgc2lnbkRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NpZ24uc2lnbkRlcGVuZGVuY2llcyxcbiAgc3FydERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NxcnQuc3FydERlcGVuZGVuY2llcyxcbiAgc3VidHJhY3REZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5zdWJ0cmFjdERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgdW5hcnlNaW51c0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuYXJ5TWludXMudW5hcnlNaW51c0RlcGVuZGVuY2llcyxcbiAgemVyb3NEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNaZXJvcy56ZXJvc0RlcGVuZGVuY2llcyxcbiAgY3JlYXRlUXI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUXJcbn07XG5leHBvcnRzLnFyRGVwZW5kZW5jaWVzID0gcXJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnF1YW50aWxlU2VxRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGFyZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBhcmUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BhcnRpdGlvblNlbGVjdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1BhcnRpdGlvblNlbGVjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBxdWFudGlsZVNlcURlcGVuZGVuY2llcyA9IHtcbiAgYWRkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWRkLmFkZERlcGVuZGVuY2llcyxcbiAgY29tcGFyZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBhcmUuY29tcGFyZURlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseS5tdWx0aXBseURlcGVuZGVuY2llcyxcbiAgcGFydGl0aW9uU2VsZWN0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUGFydGl0aW9uU2VsZWN0LnBhcnRpdGlvblNlbGVjdERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUXVhbnRpbGVTZXE6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUXVhbnRpbGVTZXFcbn07XG5leHBvcnRzLnF1YW50aWxlU2VxRGVwZW5kZW5jaWVzID0gcXVhbnRpbGVTZXFEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnF1YW50dW1PZkNpcmN1bGF0aW9uRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBxdWFudHVtT2ZDaXJjdWxhdGlvbkRlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVF1YW50dW1PZkNpcmN1bGF0aW9uOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVF1YW50dW1PZkNpcmN1bGF0aW9uXG59O1xuZXhwb3J0cy5xdWFudHVtT2ZDaXJjdWxhdGlvbkRlcGVuZGVuY2llcyA9IHF1YW50dW1PZkNpcmN1bGF0aW9uRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yYW5kb21EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciByYW5kb21EZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVJhbmRvbTogX2ZhY3Rvcmllc0FueS5jcmVhdGVSYW5kb21cbn07XG5leHBvcnRzLnJhbmRvbURlcGVuZGVuY2llcyA9IHJhbmRvbURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmFuZG9tSW50RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcmFuZG9tSW50RGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVSYW5kb21JbnQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUmFuZG9tSW50XG59O1xuZXhwb3J0cy5yYW5kb21JbnREZXBlbmRlbmNpZXMgPSByYW5kb21JbnREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJhbmdlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ251bWJlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ251bWJlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMYXJnZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNMYXJnZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0xhcmdlckVxID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTGFyZ2VyRXEuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NtYWxsZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTbWFsbGVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTbWFsbGVyRXEgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTbWFsbGVyRXEuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcmFuZ2VEZXBlbmRlbmNpZXMgPSB7XG4gIGJpZ251bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ251bWJlci5iaWdudW1iZXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGxhcmdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0xhcmdlci5sYXJnZXJEZXBlbmRlbmNpZXMsXG4gIGxhcmdlckVxRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTGFyZ2VyRXEubGFyZ2VyRXFEZXBlbmRlbmNpZXMsXG4gIHNtYWxsZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTbWFsbGVyLnNtYWxsZXJEZXBlbmRlbmNpZXMsXG4gIHNtYWxsZXJFcURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NtYWxsZXJFcS5zbWFsbGVyRXFEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVJhbmdlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVJhbmdlXG59O1xuZXhwb3J0cy5yYW5nZURlcGVuZGVuY2llcyA9IHJhbmdlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5SYW5nZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIFJhbmdlRGVwZW5kZW5jaWVzID0ge1xuICBjcmVhdGVSYW5nZUNsYXNzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVJhbmdlQ2xhc3Ncbn07XG5leHBvcnRzLlJhbmdlRGVwZW5kZW5jaWVzID0gUmFuZ2VEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLlJhbmdlTm9kZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBSYW5nZU5vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOb2RlLk5vZGVEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVJhbmdlTm9kZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVSYW5nZU5vZGVcbn07XG5leHBvcnRzLlJhbmdlTm9kZURlcGVuZGVuY2llcyA9IFJhbmdlTm9kZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmFuZ2VUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnbnVtYmVyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnbnVtYmVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0xhcmdlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0xhcmdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTGFyZ2VyRXEgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNMYXJnZXJFcS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU21hbGxlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NtYWxsZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NtYWxsZXJFcSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NtYWxsZXJFcS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciByYW5nZVRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHtcbiAgYmlnbnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnbnVtYmVyLmJpZ251bWJlckRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgbGFyZ2VyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTGFyZ2VyLmxhcmdlckRlcGVuZGVuY2llcyxcbiAgbGFyZ2VyRXFEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNMYXJnZXJFcS5sYXJnZXJFcURlcGVuZGVuY2llcyxcbiAgc21hbGxlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NtYWxsZXIuc21hbGxlckRlcGVuZGVuY2llcyxcbiAgc21hbGxlckVxRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU21hbGxlckVxLnNtYWxsZXJFcURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUmFuZ2VUcmFuc2Zvcm06IF9mYWN0b3JpZXNBbnkuY3JlYXRlUmFuZ2VUcmFuc2Zvcm1cbn07XG5leHBvcnRzLnJhbmdlVHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gcmFuZ2VUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJhdGlvbmFsaXplRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ251bWJlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ251bWJlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRnJhY3Rpb24gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGcmFjdGlvbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29uc3RhbnROb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29uc3RhbnROb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGdW5jdGlvbk5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGdW5jdGlvbk5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc09wZXJhdG9yTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc09wZXJhdG9yTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGFyZW50aGVzaXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUGFyZW50aGVzaXNOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTeW1ib2xOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3ltYm9sTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEaXZpZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEaXZpZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWwuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzWmVybyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzWmVyby5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGFyc2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNQYXJzZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUG93ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUG93LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaW1wbGlmeSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NpbXBsaWZ5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJ0cmFjdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1YnRyYWN0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHJhdGlvbmFsaXplRGVwZW5kZW5jaWVzID0ge1xuICBiaWdudW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdudW1iZXIuYmlnbnVtYmVyRGVwZW5kZW5jaWVzLFxuICBmcmFjdGlvbkRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0ZyYWN0aW9uLmZyYWN0aW9uRGVwZW5kZW5jaWVzLFxuICBDb25zdGFudE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb25zdGFudE5vZGUuQ29uc3RhbnROb2RlRGVwZW5kZW5jaWVzLFxuICBGdW5jdGlvbk5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGdW5jdGlvbk5vZGUuRnVuY3Rpb25Ob2RlRGVwZW5kZW5jaWVzLFxuICBPcGVyYXRvck5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNPcGVyYXRvck5vZGUuT3BlcmF0b3JOb2RlRGVwZW5kZW5jaWVzLFxuICBQYXJlbnRoZXNpc05vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNQYXJlbnRoZXNpc05vZGUuUGFyZW50aGVzaXNOb2RlRGVwZW5kZW5jaWVzLFxuICBTeW1ib2xOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3ltYm9sTm9kZS5TeW1ib2xOb2RlRGVwZW5kZW5jaWVzLFxuICBhZGREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGQuYWRkRGVwZW5kZW5jaWVzLFxuICBkaXZpZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEaXZpZGUuZGl2aWRlRGVwZW5kZW5jaWVzLFxuICBlcXVhbERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsLmVxdWFsRGVwZW5kZW5jaWVzLFxuICBpc1plcm9EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc1plcm8uaXNaZXJvRGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5Lm11bHRpcGx5RGVwZW5kZW5jaWVzLFxuICBwYXJzZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1BhcnNlLnBhcnNlRGVwZW5kZW5jaWVzLFxuICBwb3dEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNQb3cucG93RGVwZW5kZW5jaWVzLFxuICBzaW1wbGlmeURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NpbXBsaWZ5LnNpbXBsaWZ5RGVwZW5kZW5jaWVzLFxuICBzdWJ0cmFjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnRyYWN0LnN1YnRyYWN0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVSYXRpb25hbGl6ZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVSYXRpb25hbGl6ZVxufTtcbmV4cG9ydHMucmF0aW9uYWxpemVEZXBlbmRlbmNpZXMgPSByYXRpb25hbGl6ZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciByZURlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUmU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUmVcbn07XG5leHBvcnRzLnJlRGVwZW5kZW5jaWVzID0gcmVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJlZHVjZWRQbGFuY2tDb25zdGFudERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcmVkdWNlZFBsYW5ja0NvbnN0YW50RGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUmVkdWNlZFBsYW5ja0NvbnN0YW50OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVJlZHVjZWRQbGFuY2tDb25zdGFudFxufTtcbmV4cG9ydHMucmVkdWNlZFBsYW5ja0NvbnN0YW50RGVwZW5kZW5jaWVzID0gcmVkdWNlZFBsYW5ja0NvbnN0YW50RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5SZWxhdGlvbmFsTm9kZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBSZWxhdGlvbmFsTm9kZURlcGVuZGVuY2llcyA9IHtcbiAgTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc05vZGUuTm9kZURlcGVuZGVuY2llcyxcbiAgY3JlYXRlUmVsYXRpb25hbE5vZGU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUmVsYXRpb25hbE5vZGVcbn07XG5leHBvcnRzLlJlbGF0aW9uYWxOb2RlRGVwZW5kZW5jaWVzID0gUmVsYXRpb25hbE5vZGVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJlcGxhY2VyRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcmVwbGFjZXJEZXBlbmRlbmNpZXMgPSB7XG4gIGNyZWF0ZVJlcGxhY2VyOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVJlcGxhY2VyXG59O1xuZXhwb3J0cy5yZXBsYWNlckRlcGVuZGVuY2llcyA9IHJlcGxhY2VyRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yZXNoYXBlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzSW50ZWdlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzSW50ZWdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHJlc2hhcGVEZXBlbmRlbmNpZXMgPSB7XG4gIGlzSW50ZWdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzSW50ZWdlci5pc0ludGVnZXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVJlc2hhcGU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUmVzaGFwZVxufTtcbmV4cG9ydHMucmVzaGFwZURlcGVuZGVuY2llcyA9IHJlc2hhcGVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJlc2l6ZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcmVzaXplRGVwZW5kZW5jaWVzID0ge1xuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVSZXNpemU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUmVzaXplXG59O1xuZXhwb3J0cy5yZXNpemVEZXBlbmRlbmNpZXMgPSByZXNpemVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLlJlc3VsdFNldERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIFJlc3VsdFNldERlcGVuZGVuY2llcyA9IHtcbiAgY3JlYXRlUmVzdWx0U2V0OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVJlc3VsdFNldFxufTtcbmV4cG9ydHMuUmVzdWx0U2V0RGVwZW5kZW5jaWVzID0gUmVzdWx0U2V0RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yZXZpdmVyRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcmV2aXZlckRlcGVuZGVuY2llcyA9IHtcbiAgY3JlYXRlUmV2aXZlcjogX2ZhY3Rvcmllc0FueS5jcmVhdGVSZXZpdmVyXG59O1xuZXhwb3J0cy5yZXZpdmVyRGVwZW5kZW5jaWVzID0gcmV2aXZlckRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmlnaHRBcml0aFNoaWZ0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1plcm9zID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzWmVyb3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcmlnaHRBcml0aFNoaWZ0RGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIHplcm9zRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzWmVyb3MuemVyb3NEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVJpZ2h0QXJpdGhTaGlmdDogX2ZhY3Rvcmllc0FueS5jcmVhdGVSaWdodEFyaXRoU2hpZnRcbn07XG5leHBvcnRzLnJpZ2h0QXJpdGhTaGlmdERlcGVuZGVuY2llcyA9IHJpZ2h0QXJpdGhTaGlmdERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmlnaHRMb2dTaGlmdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNaZXJvcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1plcm9zLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHJpZ2h0TG9nU2hpZnREZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5lcXVhbFNjYWxhckRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgemVyb3NEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNaZXJvcy56ZXJvc0RlcGVuZGVuY2llcyxcbiAgY3JlYXRlUmlnaHRMb2dTaGlmdDogX2ZhY3Rvcmllc0FueS5jcmVhdGVSaWdodExvZ1NoaWZ0XG59O1xuZXhwb3J0cy5yaWdodExvZ1NoaWZ0RGVwZW5kZW5jaWVzID0gcmlnaHRMb2dTaGlmdERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucm91bmREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzWmVyb3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNaZXJvcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciByb3VuZERlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIHplcm9zRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzWmVyb3MuemVyb3NEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVJvdW5kOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVJvdW5kXG59O1xuZXhwb3J0cy5yb3VuZERlcGVuZGVuY2llcyA9IHJvdW5kRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yb3dEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUmFuZ2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNSYW5nZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciByb3dEZXBlbmRlbmNpZXMgPSB7XG4gIEluZGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5JbmRleERlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgcmFuZ2VEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNSYW5nZS5yYW5nZURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUm93OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVJvd1xufTtcbmV4cG9ydHMucm93RGVwZW5kZW5jaWVzID0gcm93RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yb3dUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUmFuZ2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNSYW5nZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciByb3dUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB7XG4gIEluZGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5JbmRleERlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgcmFuZ2VEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNSYW5nZS5yYW5nZURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUm93VHJhbnNmb3JtOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVJvd1RyYW5zZm9ybVxufTtcbmV4cG9ydHMucm93VHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gcm93VHJhbnNmb3JtRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yeWRiZXJnRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciByeWRiZXJnRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUnlkYmVyZzogX2ZhY3Rvcmllc0FueS5jcmVhdGVSeWRiZXJnXG59O1xuZXhwb3J0cy5yeWRiZXJnRGVwZW5kZW5jaWVzID0gcnlkYmVyZ0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuU1FSVDFfMkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbGluZSBjYW1lbGNhc2VcbnZhciBTUVJUMV8yRGVwZW5kZW5jaWVzID0ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGNhbWVsY2FzZVxuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNRUlQxXzI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU1FSVDFfMlxufTtcbmV4cG9ydHMuU1FSVDFfMkRlcGVuZGVuY2llcyA9IFNRUlQxXzJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLlNRUlQyRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgU1FSVDJEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlU1FSVDI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU1FSVDJcbn07XG5leHBvcnRzLlNRUlQyRGVwZW5kZW5jaWVzID0gU1FSVDJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNhY2t1clRldHJvZGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzYWNrdXJUZXRyb2RlRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNhY2t1clRldHJvZGU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU2Fja3VyVGV0cm9kZVxufTtcbmV4cG9ydHMuc2Fja3VyVGV0cm9kZURlcGVuZGVuY2llcyA9IHNhY2t1clRldHJvZGVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNlY0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNlY0RlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTZWM6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU2VjXG59O1xuZXhwb3J0cy5zZWNEZXBlbmRlbmNpZXMgPSBzZWNEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNlY2hEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzZWNoRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNlY2g6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU2VjaFxufTtcbmV4cG9ydHMuc2VjaERlcGVuZGVuY2llcyA9IHNlY2hEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNlY29uZFJhZGlhdGlvbkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc2Vjb25kUmFkaWF0aW9uRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU2Vjb25kUmFkaWF0aW9uOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNlY29uZFJhZGlhdGlvblxufTtcbmV4cG9ydHMuc2Vjb25kUmFkaWF0aW9uRGVwZW5kZW5jaWVzID0gc2Vjb25kUmFkaWF0aW9uRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXRDYXJ0ZXNpYW5EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0luZGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJbmRleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBhcmVOYXR1cmFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaXplID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU2l6ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3Vic2V0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3Vic2V0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNldENhcnRlc2lhbkRlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBJbmRleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuSW5kZXhEZXBlbmRlbmNpZXMsXG4gIGNvbXBhcmVOYXR1cmFsRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXMsXG4gIHNpemVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTaXplLnNpemVEZXBlbmRlbmNpZXMsXG4gIHN1YnNldERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnNldC5zdWJzZXREZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNldENhcnRlc2lhbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVTZXRDYXJ0ZXNpYW5cbn07XG5leHBvcnRzLnNldENhcnRlc2lhbkRlcGVuZGVuY2llcyA9IHNldENhcnRlc2lhbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2V0RGlmZmVyZW5jZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBhcmVOYXR1cmFsID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NpemUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTaXplLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJzZXQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJzZXQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc2V0RGlmZmVyZW5jZURlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBJbmRleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuSW5kZXhEZXBlbmRlbmNpZXMsXG4gIGNvbXBhcmVOYXR1cmFsRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXMsXG4gIHNpemVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTaXplLnNpemVEZXBlbmRlbmNpZXMsXG4gIHN1YnNldERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnNldC5zdWJzZXREZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNldERpZmZlcmVuY2U6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU2V0RGlmZmVyZW5jZVxufTtcbmV4cG9ydHMuc2V0RGlmZmVyZW5jZURlcGVuZGVuY2llcyA9IHNldERpZmZlcmVuY2VEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNldERpc3RpbmN0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2l6ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NpemUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnNldCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1YnNldC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzZXREaXN0aW5jdERlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBJbmRleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuSW5kZXhEZXBlbmRlbmNpZXMsXG4gIGNvbXBhcmVOYXR1cmFsRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXMsXG4gIHNpemVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTaXplLnNpemVEZXBlbmRlbmNpZXMsXG4gIHN1YnNldERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnNldC5zdWJzZXREZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNldERpc3RpbmN0OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNldERpc3RpbmN0XG59O1xuZXhwb3J0cy5zZXREaXN0aW5jdERlcGVuZGVuY2llcyA9IHNldERpc3RpbmN0RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXRJbnRlcnNlY3REZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0luZGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJbmRleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBhcmVOYXR1cmFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaXplID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU2l6ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3Vic2V0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3Vic2V0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNldEludGVyc2VjdERlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBJbmRleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuSW5kZXhEZXBlbmRlbmNpZXMsXG4gIGNvbXBhcmVOYXR1cmFsRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXMsXG4gIHNpemVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTaXplLnNpemVEZXBlbmRlbmNpZXMsXG4gIHN1YnNldERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnNldC5zdWJzZXREZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNldEludGVyc2VjdDogX2ZhY3Rvcmllc0FueS5jcmVhdGVTZXRJbnRlcnNlY3Rcbn07XG5leHBvcnRzLnNldEludGVyc2VjdERlcGVuZGVuY2llcyA9IHNldEludGVyc2VjdERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2V0SXNTdWJzZXREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBhcmVOYXR1cmFsID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NpemUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTaXplLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJzZXQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJzZXQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc2V0SXNTdWJzZXREZXBlbmRlbmNpZXMgPSB7XG4gIEluZGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5JbmRleERlcGVuZGVuY2llcyxcbiAgY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbC5jb21wYXJlTmF0dXJhbERlcGVuZGVuY2llcyxcbiAgc2l6ZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NpemUuc2l6ZURlcGVuZGVuY2llcyxcbiAgc3Vic2V0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3Vic2V0LnN1YnNldERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU2V0SXNTdWJzZXQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU2V0SXNTdWJzZXRcbn07XG5leHBvcnRzLnNldElzU3Vic2V0RGVwZW5kZW5jaWVzID0gc2V0SXNTdWJzZXREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNldE11bHRpcGxpY2l0eURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2l6ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NpemUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnNldCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1YnNldC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzZXRNdWx0aXBsaWNpdHlEZXBlbmRlbmNpZXMgPSB7XG4gIEluZGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5JbmRleERlcGVuZGVuY2llcyxcbiAgY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbC5jb21wYXJlTmF0dXJhbERlcGVuZGVuY2llcyxcbiAgc2l6ZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NpemUuc2l6ZURlcGVuZGVuY2llcyxcbiAgc3Vic2V0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3Vic2V0LnN1YnNldERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU2V0TXVsdGlwbGljaXR5OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNldE11bHRpcGxpY2l0eVxufTtcbmV4cG9ydHMuc2V0TXVsdGlwbGljaXR5RGVwZW5kZW5jaWVzID0gc2V0TXVsdGlwbGljaXR5RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXRQb3dlcnNldERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2l6ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NpemUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnNldCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1YnNldC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzZXRQb3dlcnNldERlcGVuZGVuY2llcyA9IHtcbiAgSW5kZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJbmRleENsYXNzLkluZGV4RGVwZW5kZW5jaWVzLFxuICBjb21wYXJlTmF0dXJhbERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBhcmVOYXR1cmFsLmNvbXBhcmVOYXR1cmFsRGVwZW5kZW5jaWVzLFxuICBzaXplRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU2l6ZS5zaXplRGVwZW5kZW5jaWVzLFxuICBzdWJzZXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTdWJzZXQuc3Vic2V0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTZXRQb3dlcnNldDogX2ZhY3Rvcmllc0FueS5jcmVhdGVTZXRQb3dlcnNldFxufTtcbmV4cG9ydHMuc2V0UG93ZXJzZXREZXBlbmRlbmNpZXMgPSBzZXRQb3dlcnNldERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2V0U2l6ZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBhcmVOYXR1cmFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNldFNpemVEZXBlbmRlbmNpZXMgPSB7XG4gIGNvbXBhcmVOYXR1cmFsRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNldFNpemU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU2V0U2l6ZVxufTtcbmV4cG9ydHMuc2V0U2l6ZURlcGVuZGVuY2llcyA9IHNldFNpemVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNldFN5bURpZmZlcmVuY2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbmNhdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbmNhdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2V0RGlmZmVyZW5jZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NldERpZmZlcmVuY2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NpemUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTaXplLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJzZXQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJzZXQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc2V0U3ltRGlmZmVyZW5jZURlcGVuZGVuY2llcyA9IHtcbiAgSW5kZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJbmRleENsYXNzLkluZGV4RGVwZW5kZW5jaWVzLFxuICBjb25jYXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb25jYXQuY29uY2F0RGVwZW5kZW5jaWVzLFxuICBzZXREaWZmZXJlbmNlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU2V0RGlmZmVyZW5jZS5zZXREaWZmZXJlbmNlRGVwZW5kZW5jaWVzLFxuICBzaXplRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU2l6ZS5zaXplRGVwZW5kZW5jaWVzLFxuICBzdWJzZXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTdWJzZXQuc3Vic2V0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTZXRTeW1EaWZmZXJlbmNlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNldFN5bURpZmZlcmVuY2Vcbn07XG5leHBvcnRzLnNldFN5bURpZmZlcmVuY2VEZXBlbmRlbmNpZXMgPSBzZXRTeW1EaWZmZXJlbmNlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXRVbmlvbkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29uY2F0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29uY2F0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTZXRJbnRlcnNlY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTZXRJbnRlcnNlY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NldFN5bURpZmZlcmVuY2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTZXRTeW1EaWZmZXJlbmNlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaXplID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU2l6ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3Vic2V0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3Vic2V0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNldFVuaW9uRGVwZW5kZW5jaWVzID0ge1xuICBJbmRleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuSW5kZXhEZXBlbmRlbmNpZXMsXG4gIGNvbmNhdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbmNhdC5jb25jYXREZXBlbmRlbmNpZXMsXG4gIHNldEludGVyc2VjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NldEludGVyc2VjdC5zZXRJbnRlcnNlY3REZXBlbmRlbmNpZXMsXG4gIHNldFN5bURpZmZlcmVuY2VEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTZXRTeW1EaWZmZXJlbmNlLnNldFN5bURpZmZlcmVuY2VEZXBlbmRlbmNpZXMsXG4gIHNpemVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTaXplLnNpemVEZXBlbmRlbmNpZXMsXG4gIHN1YnNldERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnNldC5zdWJzZXREZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNldFVuaW9uOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNldFVuaW9uXG59O1xuZXhwb3J0cy5zZXRVbmlvbkRlcGVuZGVuY2llcyA9IHNldFVuaW9uRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zaWduRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGcmFjdGlvbkNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGxleC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzaWduRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIEZyYWN0aW9uRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRnJhY3Rpb25DbGFzcy5GcmFjdGlvbkRlcGVuZGVuY2llcyxcbiAgY29tcGxleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBsZXguY29tcGxleERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU2lnbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVTaWduXG59O1xuZXhwb3J0cy5zaWduRGVwZW5kZW5jaWVzID0gc2lnbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2ltcGxpZnlEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnbnVtYmVyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnbnVtYmVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGcmFjdGlvbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0ZyYWN0aW9uLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb25zdGFudE5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb25zdGFudE5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Z1bmN0aW9uTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Z1bmN0aW9uTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzT3BlcmF0b3JOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzT3BlcmF0b3JOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQYXJlbnRoZXNpc05vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNQYXJlbnRoZXNpc05vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N5bWJvbE5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTeW1ib2xOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNaZXJvID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNaZXJvLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQYXJzZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1BhcnNlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQb3cgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNQb3cuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnRyYWN0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3VidHJhY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc2ltcGxpZnlEZXBlbmRlbmNpZXMgPSB7XG4gIGJpZ251bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ251bWJlci5iaWdudW1iZXJEZXBlbmRlbmNpZXMsXG4gIGZyYWN0aW9uRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRnJhY3Rpb24uZnJhY3Rpb25EZXBlbmRlbmNpZXMsXG4gIENvbnN0YW50Tm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbnN0YW50Tm9kZS5Db25zdGFudE5vZGVEZXBlbmRlbmNpZXMsXG4gIEZ1bmN0aW9uTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0Z1bmN0aW9uTm9kZS5GdW5jdGlvbk5vZGVEZXBlbmRlbmNpZXMsXG4gIE9wZXJhdG9yTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc09wZXJhdG9yTm9kZS5PcGVyYXRvck5vZGVEZXBlbmRlbmNpZXMsXG4gIFBhcmVudGhlc2lzTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1BhcmVudGhlc2lzTm9kZS5QYXJlbnRoZXNpc05vZGVEZXBlbmRlbmNpZXMsXG4gIFN5bWJvbE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTeW1ib2xOb2RlLlN5bWJvbE5vZGVEZXBlbmRlbmNpZXMsXG4gIGFkZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZC5hZGREZXBlbmRlbmNpZXMsXG4gIGRpdmlkZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZS5kaXZpZGVEZXBlbmRlbmNpZXMsXG4gIGVxdWFsRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWwuZXF1YWxEZXBlbmRlbmNpZXMsXG4gIGlzWmVyb0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzWmVyby5pc1plcm9EZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXMsXG4gIHBhcnNlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUGFyc2UucGFyc2VEZXBlbmRlbmNpZXMsXG4gIHBvd0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1Bvdy5wb3dEZXBlbmRlbmNpZXMsXG4gIHN1YnRyYWN0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3VidHJhY3Quc3VidHJhY3REZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNpbXBsaWZ5OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNpbXBsaWZ5XG59O1xuZXhwb3J0cy5zaW1wbGlmeURlcGVuZGVuY2llcyA9IHNpbXBsaWZ5RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zaW5EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzaW5EZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNpbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVTaW5cbn07XG5leHBvcnRzLnNpbkRlcGVuZGVuY2llcyA9IHNpbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2luaERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNpbmhEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNpbmg6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU2luaFxufTtcbmV4cG9ydHMuc2luaERlcGVuZGVuY2llcyA9IHNpbmhEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNpemVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNpemVEZXBlbmRlbmNpZXMgPSB7XG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNpemU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU2l6ZVxufTtcbmV4cG9ydHMuc2l6ZURlcGVuZGVuY2llcyA9IHNpemVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNsdURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBYnMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBYnMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMYXJnZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNMYXJnZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0xhcmdlckVxID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTGFyZ2VyRXEuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnRyYWN0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3VidHJhY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1RyYW5zcG9zZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1RyYW5zcG9zZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzbHVEZXBlbmRlbmNpZXMgPSB7XG4gIFNwYXJzZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzLlNwYXJzZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgYWJzRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWJzLmFic0RlcGVuZGVuY2llcyxcbiAgYWRkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWRkLmFkZERlcGVuZGVuY2llcyxcbiAgZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmRpdmlkZVNjYWxhckRlcGVuZGVuY2llcyxcbiAgbGFyZ2VyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTGFyZ2VyLmxhcmdlckRlcGVuZGVuY2llcyxcbiAgbGFyZ2VyRXFEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNMYXJnZXJFcS5sYXJnZXJFcURlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseS5tdWx0aXBseURlcGVuZGVuY2llcyxcbiAgc3VidHJhY3REZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5zdWJ0cmFjdERlcGVuZGVuY2llcyxcbiAgdHJhbnNwb3NlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHJhbnNwb3NlLnRyYW5zcG9zZURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU2x1OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNsdVxufTtcbmV4cG9ydHMuc2x1RGVwZW5kZW5jaWVzID0gc2x1RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zbWFsbGVyRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc21hbGxlckRlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTbWFsbGVyOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNtYWxsZXJcbn07XG5leHBvcnRzLnNtYWxsZXJEZXBlbmRlbmNpZXMgPSBzbWFsbGVyRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zbWFsbGVyRXFEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzbWFsbGVyRXFEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU21hbGxlckVxOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNtYWxsZXJFcVxufTtcbmV4cG9ydHMuc21hbGxlckVxRGVwZW5kZW5jaWVzID0gc21hbGxlckVxRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zb3J0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBhcmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wYXJlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBhcmVOYXR1cmFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc29ydERlcGVuZGVuY2llcyA9IHtcbiAgY29tcGFyZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBhcmUuY29tcGFyZURlcGVuZGVuY2llcyxcbiAgY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbC5jb21wYXJlTmF0dXJhbERlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU29ydDogX2ZhY3Rvcmllc0FueS5jcmVhdGVTb3J0XG59O1xuZXhwb3J0cy5zb3J0RGVwZW5kZW5jaWVzID0gc29ydERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuU3BhRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZpYm9uYWNjaUhlYXBDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0ZpYm9uYWNjaUhlYXBDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIFNwYURlcGVuZGVuY2llcyA9IHtcbiAgRmlib25hY2NpSGVhcERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0ZpYm9uYWNjaUhlYXBDbGFzcy5GaWJvbmFjY2lIZWFwRGVwZW5kZW5jaWVzLFxuICBhZGRTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuYWRkU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTcGFDbGFzczogX2ZhY3Rvcmllc0FueS5jcmVhdGVTcGFDbGFzc1xufTtcbmV4cG9ydHMuU3BhRGVwZW5kZW5jaWVzID0gU3BhRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zcGFyc2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3BhcnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzcGFyc2VEZXBlbmRlbmNpZXMgPSB7XG4gIFNwYXJzZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzLlNwYXJzZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU3BhcnNlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNwYXJzZVxufTtcbmV4cG9ydHMuc3BhcnNlRGVwZW5kZW5jaWVzID0gc3BhcnNlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5TcGFyc2VNYXRyaXhEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBTcGFyc2VNYXRyaXhEZXBlbmRlbmNpZXMgPSB7XG4gIE1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeENsYXNzLk1hdHJpeERlcGVuZGVuY2llcyxcbiAgZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5lcXVhbFNjYWxhckRlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU3BhcnNlTWF0cml4Q2xhc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU3BhcnNlTWF0cml4Q2xhc3Ncbn07XG5leHBvcnRzLlNwYXJzZU1hdHJpeERlcGVuZGVuY2llcyA9IFNwYXJzZU1hdHJpeERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3BlZWRPZkxpZ2h0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzcGVlZE9mTGlnaHREZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTcGVlZE9mTGlnaHQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU3BlZWRPZkxpZ2h0XG59O1xuZXhwb3J0cy5zcGVlZE9mTGlnaHREZXBlbmRlbmNpZXMgPSBzcGVlZE9mTGlnaHREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNwbGl0VW5pdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNwbGl0VW5pdERlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU3BsaXRVbml0OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNwbGl0VW5pdFxufTtcbmV4cG9ydHMuc3BsaXRVbml0RGVwZW5kZW5jaWVzID0gc3BsaXRVbml0RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zcXJ0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzcXJ0RGVwZW5kZW5jaWVzID0ge1xuICBDb21wbGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLkNvbXBsZXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNxcnQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU3FydFxufTtcbmV4cG9ydHMuc3FydERlcGVuZGVuY2llcyA9IHNxcnREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNxcnRtRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FicyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Ficy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJZGVudGl0eSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lkZW50aXR5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJbnYgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJbnYuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01heCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01heC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2l6ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NpemUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NxcnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTcXJ0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJ0cmFjdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1YnRyYWN0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNxcnRtRGVwZW5kZW5jaWVzID0ge1xuICBhYnNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBYnMuYWJzRGVwZW5kZW5jaWVzLFxuICBhZGREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGQuYWRkRGVwZW5kZW5jaWVzLFxuICBpZGVudGl0eURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lkZW50aXR5LmlkZW50aXR5RGVwZW5kZW5jaWVzLFxuICBpbnZEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJbnYuaW52RGVwZW5kZW5jaWVzLFxuICBtYXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXgubWF4RGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5Lm11bHRpcGx5RGVwZW5kZW5jaWVzLFxuICBzaXplRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU2l6ZS5zaXplRGVwZW5kZW5jaWVzLFxuICBzcXJ0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3FydC5zcXJ0RGVwZW5kZW5jaWVzLFxuICBzdWJ0cmFjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnRyYWN0LnN1YnRyYWN0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTcXJ0bTogX2ZhY3Rvcmllc0FueS5jcmVhdGVTcXJ0bVxufTtcbmV4cG9ydHMuc3FydG1EZXBlbmRlbmNpZXMgPSBzcXJ0bURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3F1YXJlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc3F1YXJlRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTcXVhcmU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU3F1YXJlXG59O1xuZXhwb3J0cy5zcXVhcmVEZXBlbmRlbmNpZXMgPSBzcXVhcmVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNxdWVlemVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNxdWVlemVEZXBlbmRlbmNpZXMgPSB7XG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNxdWVlemU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU3F1ZWV6ZVxufTtcbmV4cG9ydHMuc3F1ZWV6ZURlcGVuZGVuY2llcyA9IHNxdWVlemVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnN0ZERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNTcXJ0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3FydC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVmFyaWFuY2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNWYXJpYW5jZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzdGREZXBlbmRlbmNpZXMgPSB7XG4gIHNxcnREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTcXJ0LnNxcnREZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIHZhcmlhbmNlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVmFyaWFuY2UudmFyaWFuY2VEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVN0ZDogX2ZhY3Rvcmllc0FueS5jcmVhdGVTdGRcbn07XG5leHBvcnRzLnN0ZERlcGVuZGVuY2llcyA9IHN0ZERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3RkVHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1NxcnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTcXJ0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNWYXJpYW5jZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1ZhcmlhbmNlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHN0ZFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHtcbiAgc3FydERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NxcnQuc3FydERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgdmFyaWFuY2VEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNWYXJpYW5jZS52YXJpYW5jZURlcGVuZGVuY2llcyxcbiAgY3JlYXRlU3RkVHJhbnNmb3JtOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVN0ZFRyYW5zZm9ybVxufTtcbmV4cG9ydHMuc3RkVHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gc3RkVHJhbnNmb3JtRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zdGVmYW5Cb2x0em1hbm5EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHN0ZWZhbkJvbHR6bWFubkRlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVN0ZWZhbkJvbHR6bWFubjogX2ZhY3Rvcmllc0FueS5jcmVhdGVTdGVmYW5Cb2x0em1hbm5cbn07XG5leHBvcnRzLnN0ZWZhbkJvbHR6bWFubkRlcGVuZGVuY2llcyA9IHN0ZWZhbkJvbHR6bWFubkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3RpcmxpbmdTMkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbWJpbmF0aW9ucyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbWJpbmF0aW9ucy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGYWN0b3JpYWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGYWN0b3JpYWwuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzSW50ZWdlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzSW50ZWdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNOZWdhdGl2ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzTmVnYXRpdmUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0xhcmdlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0xhcmdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUG93ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUG93LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJ0cmFjdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1YnRyYWN0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHN0aXJsaW5nUzJEZXBlbmRlbmNpZXMgPSB7XG4gIGFkZFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZFNjYWxhci5hZGRTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGNvbWJpbmF0aW9uc0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbWJpbmF0aW9ucy5jb21iaW5hdGlvbnNEZXBlbmRlbmNpZXMsXG4gIGRpdmlkZVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5kaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGZhY3RvcmlhbERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0ZhY3RvcmlhbC5mYWN0b3JpYWxEZXBlbmRlbmNpZXMsXG4gIGlzSW50ZWdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzSW50ZWdlci5pc0ludGVnZXJEZXBlbmRlbmNpZXMsXG4gIGlzTmVnYXRpdmVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc05lZ2F0aXZlLmlzTmVnYXRpdmVEZXBlbmRlbmNpZXMsXG4gIGxhcmdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0xhcmdlci5sYXJnZXJEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIubXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIHBvd0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1Bvdy5wb3dEZXBlbmRlbmNpZXMsXG4gIHN1YnRyYWN0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3VidHJhY3Quc3VidHJhY3REZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVN0aXJsaW5nUzI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU3RpcmxpbmdTMlxufTtcbmV4cG9ydHMuc3RpcmxpbmdTMkRlcGVuZGVuY2llcyA9IHN0aXJsaW5nUzJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnN0cmluZ0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHN0cmluZ0RlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU3RyaW5nOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVN0cmluZ1xufTtcbmV4cG9ydHMuc3RyaW5nRGVwZW5kZW5jaWVzID0gc3RyaW5nRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zdWJzZXREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHN1YnNldERlcGVuZGVuY2llcyA9IHtcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU3Vic2V0OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVN1YnNldFxufTtcbmV4cG9ydHMuc3Vic2V0RGVwZW5kZW5jaWVzID0gc3Vic2V0RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zdWJzZXRUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHN1YnNldFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHtcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU3Vic2V0VHJhbnNmb3JtOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVN1YnNldFRyYW5zZm9ybVxufTtcbmV4cG9ydHMuc3Vic2V0VHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gc3Vic2V0VHJhbnNmb3JtRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zdWJ0cmFjdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuYXJ5TWludXMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHN1YnRyYWN0RGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGFkZFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZFNjYWxhci5hZGRTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIHVuYXJ5TWludXNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzLnVuYXJ5TWludXNEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVN1YnRyYWN0OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVN1YnRyYWN0XG59O1xuZXhwb3J0cy5zdWJ0cmFjdERlcGVuZGVuY2llcyA9IHN1YnRyYWN0RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zdW1EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnbnVtYmVyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnbnVtYmVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGcmFjdGlvbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0ZyYWN0aW9uLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc3VtRGVwZW5kZW5jaWVzID0ge1xuICBiaWdudW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdudW1iZXIuYmlnbnVtYmVyRGVwZW5kZW5jaWVzLFxuICBmcmFjdGlvbkRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0ZyYWN0aW9uLmZyYWN0aW9uRGVwZW5kZW5jaWVzLFxuICBhZGREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGQuYWRkRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTdW06IF9mYWN0b3JpZXNBbnkuY3JlYXRlU3VtXG59O1xuZXhwb3J0cy5zdW1EZXBlbmRlbmNpZXMgPSBzdW1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnN1bVRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdudW1iZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdudW1iZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZyYWN0aW9uID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRnJhY3Rpb24uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzdW1UcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB7XG4gIGJpZ251bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ251bWJlci5iaWdudW1iZXJEZXBlbmRlbmNpZXMsXG4gIGZyYWN0aW9uRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRnJhY3Rpb24uZnJhY3Rpb25EZXBlbmRlbmNpZXMsXG4gIGFkZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZC5hZGREZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVN1bVRyYW5zZm9ybTogX2ZhY3Rvcmllc0FueS5jcmVhdGVTdW1UcmFuc2Zvcm1cbn07XG5leHBvcnRzLnN1bVRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHN1bVRyYW5zZm9ybURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuU3ltYm9sTm9kZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc05vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIFN5bWJvbE5vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc05vZGUuTm9kZURlcGVuZGVuY2llcyxcbiAgY3JlYXRlU3ltYm9sTm9kZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVTeW1ib2xOb2RlXG59O1xuZXhwb3J0cy5TeW1ib2xOb2RlRGVwZW5kZW5jaWVzID0gU3ltYm9sTm9kZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudGFuRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdGFuRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVUYW46IF9mYWN0b3JpZXNBbnkuY3JlYXRlVGFuXG59O1xuZXhwb3J0cy50YW5EZXBlbmRlbmNpZXMgPSB0YW5EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnRhbmhEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciB0YW5oRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVUYW5oOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVRhbmhcbn07XG5leHBvcnRzLnRhbmhEZXBlbmRlbmNpZXMgPSB0YW5oRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy50YXVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciB0YXVEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlVGF1OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVRhdVxufTtcbmV4cG9ydHMudGF1RGVwZW5kZW5jaWVzID0gdGF1RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy50aG9tc29uQ3Jvc3NTZWN0aW9uRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciB0aG9tc29uQ3Jvc3NTZWN0aW9uRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlVGhvbXNvbkNyb3NzU2VjdGlvbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVUaG9tc29uQ3Jvc3NTZWN0aW9uXG59O1xuZXhwb3J0cy50aG9tc29uQ3Jvc3NTZWN0aW9uRGVwZW5kZW5jaWVzID0gdGhvbXNvbkNyb3NzU2VjdGlvbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudG9EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHRvRGVwZW5kZW5jaWVzID0ge1xuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVUbzogX2ZhY3Rvcmllc0FueS5jcmVhdGVUb1xufTtcbmV4cG9ydHMudG9EZXBlbmRlbmNpZXMgPSB0b0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudHJhY2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdHJhY2VEZXBlbmRlbmNpZXMgPSB7XG4gIGFkZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZC5hZGREZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVRyYWNlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVRyYWNlXG59O1xuZXhwb3J0cy50cmFjZURlcGVuZGVuY2llcyA9IHRyYWNlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy50cmFuc3Bvc2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHRyYW5zcG9zZURlcGVuZGVuY2llcyA9IHtcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlVHJhbnNwb3NlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVRyYW5zcG9zZVxufTtcbmV4cG9ydHMudHJhbnNwb3NlRGVwZW5kZW5jaWVzID0gdHJhbnNwb3NlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy50cnVlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdHJ1ZURlcGVuZGVuY2llcyA9IHtcbiAgY3JlYXRlVHJ1ZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVUcnVlXG59O1xuZXhwb3J0cy50cnVlRGVwZW5kZW5jaWVzID0gdHJ1ZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudHlwZU9mRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdHlwZU9mRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVUeXBlT2Y6IF9mYWN0b3JpZXNBbnkuY3JlYXRlVHlwZU9mXG59O1xuZXhwb3J0cy50eXBlT2ZEZXBlbmRlbmNpZXMgPSB0eXBlT2ZEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnR5cGVkRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGcmFjdGlvbkNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHR5cGVkRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBGcmFjdGlvbkRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MuRnJhY3Rpb25EZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVR5cGVkOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVR5cGVkXG59O1xuZXhwb3J0cy50eXBlZERlcGVuZGVuY2llcyA9IHR5cGVkRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy51bmFyeU1pbnVzRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdW5hcnlNaW51c0RlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlVW5hcnlNaW51czogX2ZhY3Rvcmllc0FueS5jcmVhdGVVbmFyeU1pbnVzXG59O1xuZXhwb3J0cy51bmFyeU1pbnVzRGVwZW5kZW5jaWVzID0gdW5hcnlNaW51c0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudW5hcnlQbHVzRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdW5hcnlQbHVzRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVVuYXJ5UGx1czogX2ZhY3Rvcmllc0FueS5jcmVhdGVVbmFyeVBsdXNcbn07XG5leHBvcnRzLnVuYXJ5UGx1c0RlcGVuZGVuY2llcyA9IHVuYXJ5UGx1c0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudW5lcXVhbERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHVuZXF1YWxEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5lcXVhbFNjYWxhckRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlVW5lcXVhbDogX2ZhY3Rvcmllc0FueS5jcmVhdGVVbmVxdWFsXG59O1xuZXhwb3J0cy51bmVxdWFsRGVwZW5kZW5jaWVzID0gdW5lcXVhbERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuVW5pdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGcmFjdGlvbkNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBYnMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBYnMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Zvcm1hdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Zvcm1hdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNOdW1lcmljID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNOdW1lcmljLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNOdW1iZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNOdW1iZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BvdyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1Bvdy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUm91bmQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNSb3VuZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3VidHJhY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBVbml0RGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgRnJhY3Rpb25EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGcmFjdGlvbkNsYXNzLkZyYWN0aW9uRGVwZW5kZW5jaWVzLFxuICBhYnNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBYnMuYWJzRGVwZW5kZW5jaWVzLFxuICBhZGRTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuYWRkU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBkaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBlcXVhbERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsLmVxdWFsRGVwZW5kZW5jaWVzLFxuICBmaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGaXguZml4RGVwZW5kZW5jaWVzLFxuICBmb3JtYXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGb3JtYXQuZm9ybWF0RGVwZW5kZW5jaWVzLFxuICBpc051bWVyaWNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc051bWVyaWMuaXNOdW1lcmljRGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLm11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzLFxuICBudW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOdW1iZXIubnVtYmVyRGVwZW5kZW5jaWVzLFxuICBwb3dEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNQb3cucG93RGVwZW5kZW5jaWVzLFxuICByb3VuZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1JvdW5kLnJvdW5kRGVwZW5kZW5jaWVzLFxuICBzdWJ0cmFjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnRyYWN0LnN1YnRyYWN0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVVbml0Q2xhc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlVW5pdENsYXNzXG59O1xuZXhwb3J0cy5Vbml0RGVwZW5kZW5jaWVzID0gVW5pdERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudW5pdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdW5pdERlcGVuZGVuY2llcyA9IHtcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVVbml0RnVuY3Rpb246IF9mYWN0b3JpZXNBbnkuY3JlYXRlVW5pdEZ1bmN0aW9uXG59O1xuZXhwb3J0cy51bml0RGVwZW5kZW5jaWVzID0gdW5pdERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuRURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNFID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBFRGVwZW5kZW5jaWVzID0ge1xuICBlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRS5lRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVVcHBlcmNhc2VFOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVVwcGVyY2FzZUVcbn07XG5leHBvcnRzLkVEZXBlbmRlbmNpZXMgPSBFRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5QSURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNQaSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1BpLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIFBJRGVwZW5kZW5jaWVzID0ge1xuICBwaURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1BpLnBpRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVVcHBlcmNhc2VQaTogX2ZhY3Rvcmllc0FueS5jcmVhdGVVcHBlcmNhc2VQaVxufTtcbmV4cG9ydHMuUElEZXBlbmRlbmNpZXMgPSBQSURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudXNvbHZlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3VidHJhY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciB1c29sdmVEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmRpdmlkZVNjYWxhckRlcGVuZGVuY2llcyxcbiAgZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5lcXVhbFNjYWxhckRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5tdWx0aXBseVNjYWxhckRlcGVuZGVuY2llcyxcbiAgc3VidHJhY3REZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5zdWJ0cmFjdERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlVXNvbHZlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVVzb2x2ZVxufTtcbmV4cG9ydHMudXNvbHZlRGVwZW5kZW5jaWVzID0gdXNvbHZlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy52YWN1dW1JbXBlZGFuY2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHZhY3V1bUltcGVkYW5jZURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVZhY3V1bUltcGVkYW5jZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVWYWN1dW1JbXBlZGFuY2Vcbn07XG5leHBvcnRzLnZhY3V1bUltcGVkYW5jZURlcGVuZGVuY2llcyA9IHZhY3V1bUltcGVkYW5jZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudmFyaWFuY2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBcHBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FwcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEaXZpZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEaXZpZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzTmFOID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNOYU4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnRyYWN0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3VidHJhY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdmFyaWFuY2VEZXBlbmRlbmNpZXMgPSB7XG4gIGFkZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZC5hZGREZXBlbmRlbmNpZXMsXG4gIGFwcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQXBwbHkuYXBwbHlEZXBlbmRlbmNpZXMsXG4gIGRpdmlkZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZS5kaXZpZGVEZXBlbmRlbmNpZXMsXG4gIGlzTmFORGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSXNOYU4uaXNOYU5EZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXMsXG4gIHN1YnRyYWN0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3VidHJhY3Quc3VidHJhY3REZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVZhcmlhbmNlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVZhcmlhbmNlXG59O1xuZXhwb3J0cy52YXJpYW5jZURlcGVuZGVuY2llcyA9IHZhcmlhbmNlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy52YXJpYW5jZVRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FwcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQXBwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNOYU4gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc05hTi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3VidHJhY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciB2YXJpYW5jZVRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHtcbiAgYWRkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWRkLmFkZERlcGVuZGVuY2llcyxcbiAgYXBwbHlEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBcHBseS5hcHBseURlcGVuZGVuY2llcyxcbiAgZGl2aWRlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlLmRpdmlkZURlcGVuZGVuY2llcyxcbiAgaXNOYU5EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc05hTi5pc05hTkRlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseS5tdWx0aXBseURlcGVuZGVuY2llcyxcbiAgc3VidHJhY3REZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5zdWJ0cmFjdERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlVmFyaWFuY2VUcmFuc2Zvcm06IF9mYWN0b3JpZXNBbnkuY3JlYXRlVmFyaWFuY2VUcmFuc2Zvcm1cbn07XG5leHBvcnRzLnZhcmlhbmNlVHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gdmFyaWFuY2VUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnZlcnNpb25EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciB2ZXJzaW9uRGVwZW5kZW5jaWVzID0ge1xuICBjcmVhdGVWZXJzaW9uOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVZlcnNpb25cbn07XG5leHBvcnRzLnZlcnNpb25EZXBlbmRlbmNpZXMgPSB2ZXJzaW9uRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy53ZWFrTWl4aW5nQW5nbGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciB3ZWFrTWl4aW5nQW5nbGVEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlV2Vha01peGluZ0FuZ2xlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVdlYWtNaXhpbmdBbmdsZVxufTtcbmV4cG9ydHMud2Vha01peGluZ0FuZ2xlRGVwZW5kZW5jaWVzID0gd2Vha01peGluZ0FuZ2xlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy53aWVuRGlzcGxhY2VtZW50RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciB3aWVuRGlzcGxhY2VtZW50RGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlV2llbkRpc3BsYWNlbWVudDogX2ZhY3Rvcmllc0FueS5jcmVhdGVXaWVuRGlzcGxhY2VtZW50XG59O1xuZXhwb3J0cy53aWVuRGlzcGxhY2VtZW50RGVwZW5kZW5jaWVzID0gd2llbkRpc3BsYWNlbWVudERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMueGdjZERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgeGdjZERlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVYZ2NkOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVhnY2Rcbn07XG5leHBvcnRzLnhnY2REZXBlbmRlbmNpZXMgPSB4Z2NkRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy54b3JEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciB4b3JEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlWG9yOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVhvclxufTtcbmV4cG9ydHMueG9yRGVwZW5kZW5jaWVzID0geG9yRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy56ZXJvc0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgemVyb3NEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlWmVyb3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlWmVyb3Ncbn07XG5leHBvcnRzLnplcm9zRGVwZW5kZW5jaWVzID0gemVyb3NEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmVycm9yID0gZXhwb3J0cy5qc29uID0gZXhwb3J0cy5leHByZXNzaW9uID0gZXhwb3J0cy50eXBlID0gZXhwb3J0cy5kZXByZWNhdGVkVHlwZW9mID0gZXhwb3J0cy5kZXByZWNhdGVkVmFyID0gZXhwb3J0cy5kZXByZWNhdGVkSW1wb3J0ID0gZXhwb3J0cy5kZXByZWNhdGVkRXZhbCA9IHZvaWQgMDtcblxudmFyIF9ldmFsID0gcmVxdWlyZShcIi4uL2V4cHJlc3Npb24vZnVuY3Rpb24vZXZhbFwiKTtcblxudmFyIF9kZXByZWNhdGVkSW1wb3J0ID0gcmVxdWlyZShcIi4uL2NvcmUvZnVuY3Rpb24vZGVwcmVjYXRlZEltcG9ydFwiKTtcblxudmFyIF92YXJpYW5jZSA9IHJlcXVpcmUoXCIuLi9mdW5jdGlvbi9zdGF0aXN0aWNzL3ZhcmlhbmNlXCIpO1xuXG52YXIgX3R5cGVPZiA9IHJlcXVpcmUoXCIuLi9mdW5jdGlvbi91dGlscy90eXBlT2ZcIik7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfQXJndW1lbnRzRXJyb3IgPSByZXF1aXJlKFwiLi4vZXJyb3IvQXJndW1lbnRzRXJyb3JcIik7XG5cbnZhciBfRGltZW5zaW9uRXJyb3IgPSByZXF1aXJlKFwiLi4vZXJyb3IvRGltZW5zaW9uRXJyb3JcIik7XG5cbnZhciBfSW5kZXhFcnJvciA9IHJlcXVpcmUoXCIuLi9lcnJvci9JbmRleEVycm9yXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfbG9nID0gcmVxdWlyZShcIi4uL3V0aWxzL2xvZ1wiKTtcblxudmFyIF9wdXJlRnVuY3Rpb25zQW55ID0gcmVxdWlyZShcIi4vcHVyZUZ1bmN0aW9uc0FueS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfaW1wdXJlRnVuY3Rpb25zQW55ID0gcmVxdWlyZShcIi4vaW1wdXJlRnVuY3Rpb25zQW55LmdlbmVyYXRlZFwiKTtcblxuLy8gVE9ETzogZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDYuMC4wLiBEYXRlOiAyMDE5LTA0LTE0XG4vLyBcImRlcHJlY2F0ZWRFdmFsXCIgaXMgYWxzbyBleHBvc2VkIGFzIFwiZXZhbFwiIGluIHRoZSBjb2RlIGNvbXBpbGVkIHRvIEVTNStDb21tb25Kc1xudmFyIGRlcHJlY2F0ZWRFdmFsID0gLyogI19fUFVSRV9fICovKDAsIF9ldmFsLmNyZWF0ZURlcHJlY2F0ZWRFdmFsKSh7XG4gIGV2YWx1YXRlOiBfaW1wdXJlRnVuY3Rpb25zQW55LmV2YWx1YXRlXG59KTsgLy8gXCJkZXByZWNhdGVkSW1wb3J0XCIgaXMgYWxzbyBleHBvc2VkIGFzIFwiaW1wb3J0XCIgaW4gdGhlIGNvZGUgY29tcGlsZWQgdG8gRVM1K0NvbW1vbkpzXG5cbmV4cG9ydHMuZGVwcmVjYXRlZEV2YWwgPSBkZXByZWNhdGVkRXZhbDtcbnZhciBkZXByZWNhdGVkSW1wb3J0ID0gLyogI19fUFVSRV9fICovKDAsIF9kZXByZWNhdGVkSW1wb3J0LmNyZWF0ZURlcHJlY2F0ZWRJbXBvcnQpKHt9KTsgLy8gXCJkZXByZWNhdGVkVmFyXCIgaXMgYWxzbyBleHBvc2VkIGFzIFwidmFyXCIgaW4gdGhlIGNvZGUgY29tcGlsZWQgdG8gRVM1K0NvbW1vbkpzXG5cbmV4cG9ydHMuZGVwcmVjYXRlZEltcG9ydCA9IGRlcHJlY2F0ZWRJbXBvcnQ7XG52YXIgZGVwcmVjYXRlZFZhciA9IC8qICNfX1BVUkVfXyAqLygwLCBfdmFyaWFuY2UuY3JlYXRlRGVwcmVjYXRlZFZhcikoe1xuICB2YXJpYW5jZTogX3B1cmVGdW5jdGlvbnNBbnkudmFyaWFuY2Vcbn0pOyAvLyBcImRlcHJlY2F0ZWRUeXBlb2ZcIiBpcyBhbHNvIGV4cG9zZWQgYXMgXCJ0eXBlb2ZcIiBpbiB0aGUgY29kZSBjb21waWxlZCB0byBFUzUrQ29tbW9uSnNcblxuZXhwb3J0cy5kZXByZWNhdGVkVmFyID0gZGVwcmVjYXRlZFZhcjtcbnZhciBkZXByZWNhdGVkVHlwZW9mID0gLyogI19fUFVSRV9fICovKDAsIF90eXBlT2YuY3JlYXRlRGVwcmVjYXRlZFR5cGVvZikoe1xuICB0eXBlT2Y6IF9wdXJlRnVuY3Rpb25zQW55LnR5cGVPZlxufSk7XG5leHBvcnRzLmRlcHJlY2F0ZWRUeXBlb2YgPSBkZXByZWNhdGVkVHlwZW9mO1xudmFyIHR5cGUgPSAvKiAjX19QVVJFX18gKi9jcmVhdGVEZXByZWNhdGVkUHJvcGVydGllcygndHlwZScsIHtcbiAgaXNOdW1iZXI6IF9pcy5pc051bWJlcixcbiAgaXNDb21wbGV4OiBfaXMuaXNDb21wbGV4LFxuICBpc0JpZ051bWJlcjogX2lzLmlzQmlnTnVtYmVyLFxuICBpc0ZyYWN0aW9uOiBfaXMuaXNGcmFjdGlvbixcbiAgaXNVbml0OiBfaXMuaXNVbml0LFxuICBpc1N0cmluZzogX2lzLmlzU3RyaW5nLFxuICBpc0FycmF5OiBfaXMuaXNBcnJheSxcbiAgaXNNYXRyaXg6IF9pcy5pc01hdHJpeCxcbiAgaXNDb2xsZWN0aW9uOiBfaXMuaXNDb2xsZWN0aW9uLFxuICBpc0RlbnNlTWF0cml4OiBfaXMuaXNEZW5zZU1hdHJpeCxcbiAgaXNTcGFyc2VNYXRyaXg6IF9pcy5pc1NwYXJzZU1hdHJpeCxcbiAgaXNSYW5nZTogX2lzLmlzUmFuZ2UsXG4gIGlzSW5kZXg6IF9pcy5pc0luZGV4LFxuICBpc0Jvb2xlYW46IF9pcy5pc0Jvb2xlYW4sXG4gIGlzUmVzdWx0U2V0OiBfaXMuaXNSZXN1bHRTZXQsXG4gIGlzSGVscDogX2lzLmlzSGVscCxcbiAgaXNGdW5jdGlvbjogX2lzLmlzRnVuY3Rpb24sXG4gIGlzRGF0ZTogX2lzLmlzRGF0ZSxcbiAgaXNSZWdFeHA6IF9pcy5pc1JlZ0V4cCxcbiAgaXNPYmplY3Q6IF9pcy5pc09iamVjdCxcbiAgaXNOdWxsOiBfaXMuaXNOdWxsLFxuICBpc1VuZGVmaW5lZDogX2lzLmlzVW5kZWZpbmVkLFxuICBpc0FjY2Vzc29yTm9kZTogX2lzLmlzQWNjZXNzb3JOb2RlLFxuICBpc0FycmF5Tm9kZTogX2lzLmlzQXJyYXlOb2RlLFxuICBpc0Fzc2lnbm1lbnROb2RlOiBfaXMuaXNBc3NpZ25tZW50Tm9kZSxcbiAgaXNCbG9ja05vZGU6IF9pcy5pc0Jsb2NrTm9kZSxcbiAgaXNDb25kaXRpb25hbE5vZGU6IF9pcy5pc0NvbmRpdGlvbmFsTm9kZSxcbiAgaXNDb25zdGFudE5vZGU6IF9pcy5pc0NvbnN0YW50Tm9kZSxcbiAgaXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlOiBfaXMuaXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlLFxuICBpc0Z1bmN0aW9uTm9kZTogX2lzLmlzRnVuY3Rpb25Ob2RlLFxuICBpc0luZGV4Tm9kZTogX2lzLmlzSW5kZXhOb2RlLFxuICBpc05vZGU6IF9pcy5pc05vZGUsXG4gIGlzT2JqZWN0Tm9kZTogX2lzLmlzT2JqZWN0Tm9kZSxcbiAgaXNPcGVyYXRvck5vZGU6IF9pcy5pc09wZXJhdG9yTm9kZSxcbiAgaXNQYXJlbnRoZXNpc05vZGU6IF9pcy5pc1BhcmVudGhlc2lzTm9kZSxcbiAgaXNSYW5nZU5vZGU6IF9pcy5pc1JhbmdlTm9kZSxcbiAgaXNTeW1ib2xOb2RlOiBfaXMuaXNTeW1ib2xOb2RlLFxuICBpc0NoYWluOiBfaXMuaXNDaGFpbixcbiAgQmlnTnVtYmVyOiBfcHVyZUZ1bmN0aW9uc0FueS5CaWdOdW1iZXIsXG4gIENoYWluOiBfaW1wdXJlRnVuY3Rpb25zQW55LkNoYWluLFxuICBDb21wbGV4OiBfcHVyZUZ1bmN0aW9uc0FueS5Db21wbGV4LFxuICBGcmFjdGlvbjogX3B1cmVGdW5jdGlvbnNBbnkuRnJhY3Rpb24sXG4gIE1hdHJpeDogX3B1cmVGdW5jdGlvbnNBbnkuTWF0cml4LFxuICBEZW5zZU1hdHJpeDogX3B1cmVGdW5jdGlvbnNBbnkuRGVuc2VNYXRyaXgsXG4gIFNwYXJzZU1hdHJpeDogX3B1cmVGdW5jdGlvbnNBbnkuU3BhcnNlTWF0cml4LFxuICBTcGE6IF9wdXJlRnVuY3Rpb25zQW55LlNwYSxcbiAgRmlib25hY2NpSGVhcDogX3B1cmVGdW5jdGlvbnNBbnkuRmlib25hY2NpSGVhcCxcbiAgSW1tdXRhYmxlRGVuc2VNYXRyaXg6IF9wdXJlRnVuY3Rpb25zQW55LkltbXV0YWJsZURlbnNlTWF0cml4LFxuICBJbmRleDogX3B1cmVGdW5jdGlvbnNBbnkuSW5kZXgsXG4gIFJhbmdlOiBfcHVyZUZ1bmN0aW9uc0FueS5SYW5nZSxcbiAgUmVzdWx0U2V0OiBfcHVyZUZ1bmN0aW9uc0FueS5SZXN1bHRTZXQsXG4gIFVuaXQ6IF9wdXJlRnVuY3Rpb25zQW55LlVuaXQsXG4gIEhlbHA6IF9pbXB1cmVGdW5jdGlvbnNBbnkuSGVscCxcbiAgUGFyc2VyOiBfaW1wdXJlRnVuY3Rpb25zQW55LlBhcnNlclxufSk7XG5leHBvcnRzLnR5cGUgPSB0eXBlO1xudmFyIGV4cHJlc3Npb24gPSAvKiAjX19QVVJFX18gKi9jcmVhdGVEZXByZWNhdGVkUHJvcGVydGllcygnZXhwcmVzc2lvbicsIHtcbiAgcGFyc2U6IF9pbXB1cmVGdW5jdGlvbnNBbnkucGFyc2UsXG4gIFBhcnNlcjogX2ltcHVyZUZ1bmN0aW9uc0FueS5QYXJzZXIsXG4gIG5vZGU6IGNyZWF0ZURlcHJlY2F0ZWRQcm9wZXJ0aWVzKCdleHByZXNzaW9uLm5vZGUnLCB7XG4gICAgQWNjZXNzb3JOb2RlOiBfaW1wdXJlRnVuY3Rpb25zQW55LkFjY2Vzc29yTm9kZSxcbiAgICBBcnJheU5vZGU6IF9pbXB1cmVGdW5jdGlvbnNBbnkuQXJyYXlOb2RlLFxuICAgIEFzc2lnbm1lbnROb2RlOiBfaW1wdXJlRnVuY3Rpb25zQW55LkFzc2lnbm1lbnROb2RlLFxuICAgIEJsb2NrTm9kZTogX2ltcHVyZUZ1bmN0aW9uc0FueS5CbG9ja05vZGUsXG4gICAgQ29uZGl0aW9uYWxOb2RlOiBfaW1wdXJlRnVuY3Rpb25zQW55LkNvbmRpdGlvbmFsTm9kZSxcbiAgICBDb25zdGFudE5vZGU6IF9pbXB1cmVGdW5jdGlvbnNBbnkuQ29uc3RhbnROb2RlLFxuICAgIEluZGV4Tm9kZTogX2ltcHVyZUZ1bmN0aW9uc0FueS5JbmRleE5vZGUsXG4gICAgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZTogX2ltcHVyZUZ1bmN0aW9uc0FueS5GdW5jdGlvbkFzc2lnbm1lbnROb2RlLFxuICAgIEZ1bmN0aW9uTm9kZTogX2ltcHVyZUZ1bmN0aW9uc0FueS5GdW5jdGlvbk5vZGUsXG4gICAgTm9kZTogX2ltcHVyZUZ1bmN0aW9uc0FueS5Ob2RlLFxuICAgIE9iamVjdE5vZGU6IF9pbXB1cmVGdW5jdGlvbnNBbnkuT2JqZWN0Tm9kZSxcbiAgICBPcGVyYXRvck5vZGU6IF9pbXB1cmVGdW5jdGlvbnNBbnkuT3BlcmF0b3JOb2RlLFxuICAgIFBhcmVudGhlc2lzTm9kZTogX2ltcHVyZUZ1bmN0aW9uc0FueS5QYXJlbnRoZXNpc05vZGUsXG4gICAgUmFuZ2VOb2RlOiBfaW1wdXJlRnVuY3Rpb25zQW55LlJhbmdlTm9kZSxcbiAgICBSZWxhdGlvbmFsTm9kZTogX2ltcHVyZUZ1bmN0aW9uc0FueS5SZWxhdGlvbmFsTm9kZSxcbiAgICBTeW1ib2xOb2RlOiBfaW1wdXJlRnVuY3Rpb25zQW55LlN5bWJvbE5vZGVcbiAgfSlcbn0pO1xuZXhwb3J0cy5leHByZXNzaW9uID0gZXhwcmVzc2lvbjtcbnZhciBqc29uID0gLyogI19fUFVSRV9fICovY3JlYXRlRGVwcmVjYXRlZFByb3BlcnRpZXMoJ2pzb24nLCB7XG4gIHJldml2ZXI6IF9pbXB1cmVGdW5jdGlvbnNBbnkucmV2aXZlclxufSk7XG5leHBvcnRzLmpzb24gPSBqc29uO1xudmFyIGVycm9yID0gLyogI19fUFVSRV9fICovY3JlYXRlRGVwcmVjYXRlZFByb3BlcnRpZXMoJ2Vycm9yJywge1xuICBBcmd1bWVudHNFcnJvcjogX0FyZ3VtZW50c0Vycm9yLkFyZ3VtZW50c0Vycm9yLFxuICBEaW1lbnNpb25FcnJvcjogX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yLFxuICBJbmRleEVycm9yOiBfSW5kZXhFcnJvci5JbmRleEVycm9yXG59KTtcbmV4cG9ydHMuZXJyb3IgPSBlcnJvcjtcblxuZnVuY3Rpb24gY3JlYXRlRGVwcmVjYXRlZFByb3BlcnRpZXMocGF0aCwgcHJvcHMpIHtcbiAgdmFyIG9iaiA9IHt9O1xuICBPYmplY3Qua2V5cyhwcm9wcykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICgwLCBfb2JqZWN0LmxhenkpKG9iaiwgbmFtZSwgZnVuY3Rpb24gKCkge1xuICAgICAgKDAsIF9sb2cud2Fybk9uY2UpKFwibWF0aC5cIi5jb25jYXQocGF0aCwgXCIuXCIpLmNvbmNhdChuYW1lLCBcIiBpcyBtb3ZlZCB0byBtYXRoLlwiKS5jb25jYXQobmFtZSwgXCIgaW4gdjYuMC4wLiBcIikgKyAnUGxlYXNlIHVzZSB0aGUgbmV3IGxvY2F0aW9uIGluc3RlYWQuJyk7XG4gICAgICByZXR1cm4gcHJvcHNbbmFtZV07XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gb2JqO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZG9jc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZW1iZWRkZWREb2NzLmVtYmVkZGVkRG9jcztcbiAgfVxufSk7XG5leHBvcnRzLmRlcml2YXRpdmUgPSBleHBvcnRzLmhlbHAgPSBleHBvcnRzLnJhdGlvbmFsaXplID0gZXhwb3J0cy5zaW1wbGlmeSA9IGV4cG9ydHMucGFyc2VyID0gZXhwb3J0cy5jb21waWxlID0gZXhwb3J0cy5IZWxwID0gZXhwb3J0cy5QYXJzZXIgPSBleHBvcnRzLmV2YWx1YXRlID0gZXhwb3J0cy5wYXJzZSA9IGV4cG9ydHMuRnVuY3Rpb25Ob2RlID0gZXhwb3J0cy5TeW1ib2xOb2RlID0gZXhwb3J0cy5Bc3NpZ25tZW50Tm9kZSA9IGV4cG9ydHMuSW5kZXhOb2RlID0gZXhwb3J0cy5BY2Nlc3Nvck5vZGUgPSBleHBvcnRzLmNoYWluID0gZXhwb3J0cy5GdW5jdGlvbkFzc2lnbm1lbnROb2RlID0gZXhwb3J0cy5SYW5nZU5vZGUgPSBleHBvcnRzLk9wZXJhdG9yTm9kZSA9IGV4cG9ydHMuQ29uZGl0aW9uYWxOb2RlID0gZXhwb3J0cy5yZXZpdmVyID0gZXhwb3J0cy5DaGFpbiA9IGV4cG9ydHMuUmVsYXRpb25hbE5vZGUgPSBleHBvcnRzLlBhcmVudGhlc2lzTm9kZSA9IGV4cG9ydHMuT2JqZWN0Tm9kZSA9IGV4cG9ydHMuQ29uc3RhbnROb2RlID0gZXhwb3J0cy5CbG9ja05vZGUgPSBleHBvcnRzLkFycmF5Tm9kZSA9IGV4cG9ydHMuTm9kZSA9IHZvaWQgMDtcblxudmFyIF9jb25maWdSZWFkb25seSA9IHJlcXVpcmUoXCIuL2NvbmZpZ1JlYWRvbmx5XCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi9mYWN0b3JpZXNBbnlcIik7XG5cbnZhciBfcHVyZUZ1bmN0aW9uc0FueSA9IHJlcXVpcmUoXCIuL3B1cmVGdW5jdGlvbnNBbnkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2VtYmVkZGVkRG9jcyA9IHJlcXVpcmUoXCIuLi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9lbWJlZGRlZERvY3NcIik7XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbnZhciBtYXRoID0ge307IC8vIE5PVCBwdXJlIVxuXG52YXIgbWF0aFdpdGhUcmFuc2Zvcm0gPSB7fTsgLy8gTk9UIHB1cmUhXG5cbnZhciBjbGFzc2VzID0ge307IC8vIE5PVCBwdXJlIVxuXG52YXIgTm9kZSA9ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU5vZGUpKHtcbiAgbWF0aFdpdGhUcmFuc2Zvcm06IG1hdGhXaXRoVHJhbnNmb3JtXG59KTtcbmV4cG9ydHMuTm9kZSA9IE5vZGU7XG52YXIgQXJyYXlOb2RlID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQXJyYXlOb2RlKSh7XG4gIE5vZGU6IE5vZGVcbn0pO1xuZXhwb3J0cy5BcnJheU5vZGUgPSBBcnJheU5vZGU7XG52YXIgQmxvY2tOb2RlID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQmxvY2tOb2RlKSh7XG4gIE5vZGU6IE5vZGUsXG4gIFJlc3VsdFNldDogX3B1cmVGdW5jdGlvbnNBbnkuUmVzdWx0U2V0XG59KTtcbmV4cG9ydHMuQmxvY2tOb2RlID0gQmxvY2tOb2RlO1xudmFyIENvbnN0YW50Tm9kZSA9ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbnN0YW50Tm9kZSkoe1xuICBOb2RlOiBOb2RlXG59KTtcbmV4cG9ydHMuQ29uc3RhbnROb2RlID0gQ29uc3RhbnROb2RlO1xudmFyIE9iamVjdE5vZGUgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVPYmplY3ROb2RlKSh7XG4gIE5vZGU6IE5vZGVcbn0pO1xuZXhwb3J0cy5PYmplY3ROb2RlID0gT2JqZWN0Tm9kZTtcbnZhciBQYXJlbnRoZXNpc05vZGUgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVQYXJlbnRoZXNpc05vZGUpKHtcbiAgTm9kZTogTm9kZVxufSk7XG5leHBvcnRzLlBhcmVudGhlc2lzTm9kZSA9IFBhcmVudGhlc2lzTm9kZTtcbnZhciBSZWxhdGlvbmFsTm9kZSA9ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVJlbGF0aW9uYWxOb2RlKSh7XG4gIE5vZGU6IE5vZGVcbn0pO1xuZXhwb3J0cy5SZWxhdGlvbmFsTm9kZSA9IFJlbGF0aW9uYWxOb2RlO1xudmFyIENoYWluID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ2hhaW5DbGFzcykoe1xuICBtYXRoOiBtYXRoXG59KTtcbmV4cG9ydHMuQ2hhaW4gPSBDaGFpbjtcbnZhciByZXZpdmVyID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUmV2aXZlcikoe1xuICBjbGFzc2VzOiBjbGFzc2VzXG59KTtcbmV4cG9ydHMucmV2aXZlciA9IHJldml2ZXI7XG52YXIgQ29uZGl0aW9uYWxOb2RlID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29uZGl0aW9uYWxOb2RlKSh7XG4gIE5vZGU6IE5vZGVcbn0pO1xuZXhwb3J0cy5Db25kaXRpb25hbE5vZGUgPSBDb25kaXRpb25hbE5vZGU7XG52YXIgT3BlcmF0b3JOb2RlID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlT3BlcmF0b3JOb2RlKSh7XG4gIE5vZGU6IE5vZGVcbn0pO1xuZXhwb3J0cy5PcGVyYXRvck5vZGUgPSBPcGVyYXRvck5vZGU7XG52YXIgUmFuZ2VOb2RlID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUmFuZ2VOb2RlKSh7XG4gIE5vZGU6IE5vZGVcbn0pO1xuZXhwb3J0cy5SYW5nZU5vZGUgPSBSYW5nZU5vZGU7XG52YXIgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSA9ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUZ1bmN0aW9uQXNzaWdubWVudE5vZGUpKHtcbiAgTm9kZTogTm9kZSxcbiAgdHlwZWQ6IF9wdXJlRnVuY3Rpb25zQW55LnR5cGVkXG59KTtcbmV4cG9ydHMuRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSA9IEZ1bmN0aW9uQXNzaWdubWVudE5vZGU7XG52YXIgY2hhaW4gPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDaGFpbikoe1xuICBDaGFpbjogQ2hhaW4sXG4gIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxufSk7XG5leHBvcnRzLmNoYWluID0gY2hhaW47XG52YXIgQWNjZXNzb3JOb2RlID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQWNjZXNzb3JOb2RlKSh7XG4gIE5vZGU6IE5vZGUsXG4gIHN1YnNldDogX3B1cmVGdW5jdGlvbnNBbnkuc3Vic2V0XG59KTtcbmV4cG9ydHMuQWNjZXNzb3JOb2RlID0gQWNjZXNzb3JOb2RlO1xudmFyIEluZGV4Tm9kZSA9ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUluZGV4Tm9kZSkoe1xuICBOb2RlOiBOb2RlLFxuICBSYW5nZTogX3B1cmVGdW5jdGlvbnNBbnkuUmFuZ2UsXG4gIHNpemU6IF9wdXJlRnVuY3Rpb25zQW55LnNpemVcbn0pO1xuZXhwb3J0cy5JbmRleE5vZGUgPSBJbmRleE5vZGU7XG52YXIgQXNzaWdubWVudE5vZGUgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVBc3NpZ25tZW50Tm9kZSkoe1xuICBtYXRyaXg6IF9wdXJlRnVuY3Rpb25zQW55Lm1hdHJpeCxcbiAgTm9kZTogTm9kZSxcbiAgc3Vic2V0OiBfcHVyZUZ1bmN0aW9uc0FueS5zdWJzZXRcbn0pO1xuZXhwb3J0cy5Bc3NpZ25tZW50Tm9kZSA9IEFzc2lnbm1lbnROb2RlO1xudmFyIFN5bWJvbE5vZGUgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTeW1ib2xOb2RlKSh7XG4gIFVuaXQ6IF9wdXJlRnVuY3Rpb25zQW55LlVuaXQsXG4gIE5vZGU6IE5vZGUsXG4gIG1hdGg6IG1hdGhcbn0pO1xuZXhwb3J0cy5TeW1ib2xOb2RlID0gU3ltYm9sTm9kZTtcbnZhciBGdW5jdGlvbk5vZGUgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVGdW5jdGlvbk5vZGUpKHtcbiAgTm9kZTogTm9kZSxcbiAgU3ltYm9sTm9kZTogU3ltYm9sTm9kZSxcbiAgbWF0aDogbWF0aFxufSk7XG5leHBvcnRzLkZ1bmN0aW9uTm9kZSA9IEZ1bmN0aW9uTm9kZTtcbnZhciBwYXJzZSA9ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVBhcnNlKSh7XG4gIEFjY2Vzc29yTm9kZTogQWNjZXNzb3JOb2RlLFxuICBBcnJheU5vZGU6IEFycmF5Tm9kZSxcbiAgQXNzaWdubWVudE5vZGU6IEFzc2lnbm1lbnROb2RlLFxuICBCbG9ja05vZGU6IEJsb2NrTm9kZSxcbiAgQ29uZGl0aW9uYWxOb2RlOiBDb25kaXRpb25hbE5vZGUsXG4gIENvbnN0YW50Tm9kZTogQ29uc3RhbnROb2RlLFxuICBGdW5jdGlvbkFzc2lnbm1lbnROb2RlOiBGdW5jdGlvbkFzc2lnbm1lbnROb2RlLFxuICBGdW5jdGlvbk5vZGU6IEZ1bmN0aW9uTm9kZSxcbiAgSW5kZXhOb2RlOiBJbmRleE5vZGUsXG4gIE9iamVjdE5vZGU6IE9iamVjdE5vZGUsXG4gIE9wZXJhdG9yTm9kZTogT3BlcmF0b3JOb2RlLFxuICBQYXJlbnRoZXNpc05vZGU6IFBhcmVudGhlc2lzTm9kZSxcbiAgUmFuZ2VOb2RlOiBSYW5nZU5vZGUsXG4gIFJlbGF0aW9uYWxOb2RlOiBSZWxhdGlvbmFsTm9kZSxcbiAgU3ltYm9sTm9kZTogU3ltYm9sTm9kZSxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICBudW1lcmljOiBfcHVyZUZ1bmN0aW9uc0FueS5udW1lcmljLFxuICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbn0pO1xuZXhwb3J0cy5wYXJzZSA9IHBhcnNlO1xudmFyIGV2YWx1YXRlID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRXZhbHVhdGUpKHtcbiAgcGFyc2U6IHBhcnNlLFxuICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbn0pO1xuZXhwb3J0cy5ldmFsdWF0ZSA9IGV2YWx1YXRlO1xudmFyIFBhcnNlciA9ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVBhcnNlckNsYXNzKSh7XG4gIHBhcnNlOiBwYXJzZVxufSk7XG5leHBvcnRzLlBhcnNlciA9IFBhcnNlcjtcbnZhciBIZWxwID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlSGVscENsYXNzKSh7XG4gIHBhcnNlOiBwYXJzZVxufSk7XG5leHBvcnRzLkhlbHAgPSBIZWxwO1xudmFyIGNvbXBpbGUgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb21waWxlKSh7XG4gIHBhcnNlOiBwYXJzZSxcbiAgdHlwZWQ6IF9wdXJlRnVuY3Rpb25zQW55LnR5cGVkXG59KTtcbmV4cG9ydHMuY29tcGlsZSA9IGNvbXBpbGU7XG52YXIgcGFyc2VyID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUGFyc2VyKSh7XG4gIFBhcnNlcjogUGFyc2VyLFxuICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbn0pO1xuZXhwb3J0cy5wYXJzZXIgPSBwYXJzZXI7XG52YXIgc2ltcGxpZnkgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTaW1wbGlmeSkoe1xuICBiaWdudW1iZXI6IF9wdXJlRnVuY3Rpb25zQW55LmJpZ251bWJlcixcbiAgZnJhY3Rpb246IF9wdXJlRnVuY3Rpb25zQW55LmZyYWN0aW9uLFxuICBDb25zdGFudE5vZGU6IENvbnN0YW50Tm9kZSxcbiAgRnVuY3Rpb25Ob2RlOiBGdW5jdGlvbk5vZGUsXG4gIE9wZXJhdG9yTm9kZTogT3BlcmF0b3JOb2RlLFxuICBQYXJlbnRoZXNpc05vZGU6IFBhcmVudGhlc2lzTm9kZSxcbiAgU3ltYm9sTm9kZTogU3ltYm9sTm9kZSxcbiAgYWRkOiBfcHVyZUZ1bmN0aW9uc0FueS5hZGQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgZGl2aWRlOiBfcHVyZUZ1bmN0aW9uc0FueS5kaXZpZGUsXG4gIGVxdWFsOiBfcHVyZUZ1bmN0aW9uc0FueS5lcXVhbCxcbiAgaXNaZXJvOiBfcHVyZUZ1bmN0aW9uc0FueS5pc1plcm8sXG4gIG1hdGhXaXRoVHJhbnNmb3JtOiBtYXRoV2l0aFRyYW5zZm9ybSxcbiAgbXVsdGlwbHk6IF9wdXJlRnVuY3Rpb25zQW55Lm11bHRpcGx5LFxuICBwYXJzZTogcGFyc2UsXG4gIHBvdzogX3B1cmVGdW5jdGlvbnNBbnkucG93LFxuICBzdWJ0cmFjdDogX3B1cmVGdW5jdGlvbnNBbnkuc3VidHJhY3QsXG4gIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxufSk7XG5leHBvcnRzLnNpbXBsaWZ5ID0gc2ltcGxpZnk7XG52YXIgcmF0aW9uYWxpemUgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSYXRpb25hbGl6ZSkoe1xuICBiaWdudW1iZXI6IF9wdXJlRnVuY3Rpb25zQW55LmJpZ251bWJlcixcbiAgZnJhY3Rpb246IF9wdXJlRnVuY3Rpb25zQW55LmZyYWN0aW9uLFxuICBDb25zdGFudE5vZGU6IENvbnN0YW50Tm9kZSxcbiAgRnVuY3Rpb25Ob2RlOiBGdW5jdGlvbk5vZGUsXG4gIE9wZXJhdG9yTm9kZTogT3BlcmF0b3JOb2RlLFxuICBQYXJlbnRoZXNpc05vZGU6IFBhcmVudGhlc2lzTm9kZSxcbiAgU3ltYm9sTm9kZTogU3ltYm9sTm9kZSxcbiAgYWRkOiBfcHVyZUZ1bmN0aW9uc0FueS5hZGQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgZGl2aWRlOiBfcHVyZUZ1bmN0aW9uc0FueS5kaXZpZGUsXG4gIGVxdWFsOiBfcHVyZUZ1bmN0aW9uc0FueS5lcXVhbCxcbiAgaXNaZXJvOiBfcHVyZUZ1bmN0aW9uc0FueS5pc1plcm8sXG4gIG1hdGhXaXRoVHJhbnNmb3JtOiBtYXRoV2l0aFRyYW5zZm9ybSxcbiAgbXVsdGlwbHk6IF9wdXJlRnVuY3Rpb25zQW55Lm11bHRpcGx5LFxuICBwYXJzZTogcGFyc2UsXG4gIHBvdzogX3B1cmVGdW5jdGlvbnNBbnkucG93LFxuICBzaW1wbGlmeTogc2ltcGxpZnksXG4gIHN1YnRyYWN0OiBfcHVyZUZ1bmN0aW9uc0FueS5zdWJ0cmFjdCxcbiAgdHlwZWQ6IF9wdXJlRnVuY3Rpb25zQW55LnR5cGVkXG59KTtcbmV4cG9ydHMucmF0aW9uYWxpemUgPSByYXRpb25hbGl6ZTtcbnZhciBoZWxwID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlSGVscCkoe1xuICBIZWxwOiBIZWxwLFxuICBtYXRoV2l0aFRyYW5zZm9ybTogbWF0aFdpdGhUcmFuc2Zvcm0sXG4gIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxufSk7XG5leHBvcnRzLmhlbHAgPSBoZWxwO1xudmFyIGRlcml2YXRpdmUgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVEZXJpdmF0aXZlKSh7XG4gIENvbnN0YW50Tm9kZTogQ29uc3RhbnROb2RlLFxuICBGdW5jdGlvbk5vZGU6IEZ1bmN0aW9uTm9kZSxcbiAgT3BlcmF0b3JOb2RlOiBPcGVyYXRvck5vZGUsXG4gIFBhcmVudGhlc2lzTm9kZTogUGFyZW50aGVzaXNOb2RlLFxuICBTeW1ib2xOb2RlOiBTeW1ib2xOb2RlLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIGVxdWFsOiBfcHVyZUZ1bmN0aW9uc0FueS5lcXVhbCxcbiAgaXNaZXJvOiBfcHVyZUZ1bmN0aW9uc0FueS5pc1plcm8sXG4gIG51bWVyaWM6IF9wdXJlRnVuY3Rpb25zQW55Lm51bWVyaWMsXG4gIHBhcnNlOiBwYXJzZSxcbiAgc2ltcGxpZnk6IHNpbXBsaWZ5LFxuICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbn0pO1xuZXhwb3J0cy5kZXJpdmF0aXZlID0gZGVyaXZhdGl2ZTtcblxuX2V4dGVuZHMobWF0aCwge1xuICAndHlwZW9mJzogX3B1cmVGdW5jdGlvbnNBbnkudHlwZU9mLFxuICBleWU6IF9wdXJlRnVuY3Rpb25zQW55LmV5ZSxcbiAgcmV2aXZlcjogcmV2aXZlcixcbiAgXCJmYWxzZVwiOiBfcHVyZUZ1bmN0aW9uc0FueS5fZmFsc2UsXG4gIFwibnVsbFwiOiBfcHVyZUZ1bmN0aW9uc0FueS5fbnVsbCxcbiAgXCJ0cnVlXCI6IF9wdXJlRnVuY3Rpb25zQW55Ll90cnVlLFxuICByZXBsYWNlcjogX3B1cmVGdW5jdGlvbnNBbnkucmVwbGFjZXIsXG4gIGk6IF9wdXJlRnVuY3Rpb25zQW55LmksXG4gIExOMTA6IF9wdXJlRnVuY3Rpb25zQW55LkxOMTAsXG4gIExPRzEwRTogX3B1cmVGdW5jdGlvbnNBbnkuTE9HMTBFLFxuICBOYU46IF9wdXJlRnVuY3Rpb25zQW55Ll9OYU4sXG4gIHBpOiBfcHVyZUZ1bmN0aW9uc0FueS5waSxcbiAgU1FSVDFfMjogX3B1cmVGdW5jdGlvbnNBbnkuU1FSVDFfMixcbiAgdGF1OiBfcHVyZUZ1bmN0aW9uc0FueS50YXUsXG4gIGVmaW1vdkZhY3RvcjogX3B1cmVGdW5jdGlvbnNBbnkuZWZpbW92RmFjdG9yLFxuICBmaW5lU3RydWN0dXJlOiBfcHVyZUZ1bmN0aW9uc0FueS5maW5lU3RydWN0dXJlLFxuICBzYWNrdXJUZXRyb2RlOiBfcHVyZUZ1bmN0aW9uc0FueS5zYWNrdXJUZXRyb2RlLFxuICB3ZWFrTWl4aW5nQW5nbGU6IF9wdXJlRnVuY3Rpb25zQW55LndlYWtNaXhpbmdBbmdsZSxcbiAgZTogX3B1cmVGdW5jdGlvbnNBbnkuZSxcbiAgSW5maW5pdHk6IF9wdXJlRnVuY3Rpb25zQW55Ll9JbmZpbml0eSxcbiAgTE9HMkU6IF9wdXJlRnVuY3Rpb25zQW55LkxPRzJFLFxuICAnUEknOiBfcHVyZUZ1bmN0aW9uc0FueS5waSxcbiAgdmVyc2lvbjogX3B1cmVGdW5jdGlvbnNBbnkudmVyc2lvbixcbiAgJ0UnOiBfcHVyZUZ1bmN0aW9uc0FueS5lLFxuICBwaGk6IF9wdXJlRnVuY3Rpb25zQW55LnBoaSxcbiAgdHlwZWQ6IF9wdXJlRnVuY3Rpb25zQW55LnR5cGVkLFxuICBpc0ludGVnZXI6IF9wdXJlRnVuY3Rpb25zQW55LmlzSW50ZWdlcixcbiAgaXNOdW1lcmljOiBfcHVyZUZ1bmN0aW9uc0FueS5pc051bWVyaWMsXG4gIGlzUG9zaXRpdmU6IF9wdXJlRnVuY3Rpb25zQW55LmlzUG9zaXRpdmUsXG4gIGlzTmFOOiBfcHVyZUZ1bmN0aW9uc0FueS5pc05hTixcbiAgZXF1YWxTY2FsYXI6IF9wdXJlRnVuY3Rpb25zQW55LmVxdWFsU2NhbGFyLFxuICBudW1iZXI6IF9wdXJlRnVuY3Rpb25zQW55Lm51bWJlcixcbiAgXCJib29sZWFuXCI6IF9wdXJlRnVuY3Rpb25zQW55W1wiYm9vbGVhblwiXSxcbiAgY29tcGxleDogX3B1cmVGdW5jdGlvbnNBbnkuY29tcGxleCxcbiAgc3BsaXRVbml0OiBfcHVyZUZ1bmN0aW9uc0FueS5zcGxpdFVuaXQsXG4gIHVuYXJ5UGx1czogX3B1cmVGdW5jdGlvbnNBbnkudW5hcnlQbHVzLFxuICBhcHBseTogX3B1cmVGdW5jdGlvbnNBbnkuYXBwbHksXG4gIGN1YmU6IF9wdXJlRnVuY3Rpb25zQW55LmN1YmUsXG4gIGV4cG0xOiBfcHVyZUZ1bmN0aW9uc0FueS5leHBtMSxcbiAgbG9nMTA6IF9wdXJlRnVuY3Rpb25zQW55LmxvZzEwLFxuICBtdWx0aXBseVNjYWxhcjogX3B1cmVGdW5jdGlvbnNBbnkubXVsdGlwbHlTY2FsYXIsXG4gIHNpZ246IF9wdXJlRnVuY3Rpb25zQW55LnNpZ24sXG4gIHNxdWFyZTogX3B1cmVGdW5jdGlvbnNBbnkuc3F1YXJlLFxuICBiaXROb3Q6IF9wdXJlRnVuY3Rpb25zQW55LmJpdE5vdCxcbiAgYXJnOiBfcHVyZUZ1bmN0aW9uc0FueS5hcmcsXG4gIGltOiBfcHVyZUZ1bmN0aW9uc0FueS5pbSxcbiAgbm90OiBfcHVyZUZ1bmN0aW9uc0FueS5ub3QsXG4gIGZpbHRlcjogX3B1cmVGdW5jdGlvbnNBbnkuZmlsdGVyLFxuICBmb3JFYWNoOiBfcHVyZUZ1bmN0aW9uc0FueS5mb3JFYWNoLFxuICBtYXA6IF9wdXJlRnVuY3Rpb25zQW55Lm1hcCxcbiAgZXJmOiBfcHVyZUZ1bmN0aW9uc0FueS5lcmYsXG4gIGZvcm1hdDogX3B1cmVGdW5jdGlvbnNBbnkuZm9ybWF0LFxuICBpc1ByaW1lOiBfcHVyZUZ1bmN0aW9uc0FueS5pc1ByaW1lLFxuICBhY29zOiBfcHVyZUZ1bmN0aW9uc0FueS5hY29zLFxuICBhY290OiBfcHVyZUZ1bmN0aW9uc0FueS5hY290LFxuICBhY3NjOiBfcHVyZUZ1bmN0aW9uc0FueS5hY3NjLFxuICBhc2VjOiBfcHVyZUZ1bmN0aW9uc0FueS5hc2VjLFxuICBhc2luOiBfcHVyZUZ1bmN0aW9uc0FueS5hc2luLFxuICBhdGFuOiBfcHVyZUZ1bmN0aW9uc0FueS5hdGFuLFxuICBhdGFuaDogX3B1cmVGdW5jdGlvbnNBbnkuYXRhbmgsXG4gIGNvc2g6IF9wdXJlRnVuY3Rpb25zQW55LmNvc2gsXG4gIGNvdGg6IF9wdXJlRnVuY3Rpb25zQW55LmNvdGgsXG4gIGNzY2g6IF9wdXJlRnVuY3Rpb25zQW55LmNzY2gsXG4gIHNlY2g6IF9wdXJlRnVuY3Rpb25zQW55LnNlY2gsXG4gIHNpbmg6IF9wdXJlRnVuY3Rpb25zQW55LnNpbmgsXG4gIHRhbmg6IF9wdXJlRnVuY3Rpb25zQW55LnRhbmgsXG4gIGNoYWluOiBjaGFpbixcbiAgY29tYmluYXRpb25zOiBfcHVyZUZ1bmN0aW9uc0FueS5jb21iaW5hdGlvbnMsXG4gIHBpY2tSYW5kb206IF9wdXJlRnVuY3Rpb25zQW55LnBpY2tSYW5kb20sXG4gIHJhbmRvbUludDogX3B1cmVGdW5jdGlvbnNBbnkucmFuZG9tSW50LFxuICBMTjI6IF9wdXJlRnVuY3Rpb25zQW55LkxOMixcbiAgY2xvbmU6IF9wdXJlRnVuY3Rpb25zQW55LmNsb25lLFxuICBoYXNOdW1lcmljVmFsdWU6IF9wdXJlRnVuY3Rpb25zQW55Lmhhc051bWVyaWNWYWx1ZSxcbiAgdHlwZU9mOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlT2YsXG4gIHN0cmluZzogX3B1cmVGdW5jdGlvbnNBbnkuc3RyaW5nLFxuICBmcmFjdGlvbjogX3B1cmVGdW5jdGlvbnNBbnkuZnJhY3Rpb24sXG4gIHVuYXJ5TWludXM6IF9wdXJlRnVuY3Rpb25zQW55LnVuYXJ5TWludXMsXG4gIGFkZFNjYWxhcjogX3B1cmVGdW5jdGlvbnNBbnkuYWRkU2NhbGFyLFxuICBleHA6IF9wdXJlRnVuY3Rpb25zQW55LmV4cCxcbiAgbG9nMjogX3B1cmVGdW5jdGlvbnNBbnkubG9nMixcbiAgc3FydDogX3B1cmVGdW5jdGlvbnNBbnkuc3FydCxcbiAgY29uajogX3B1cmVGdW5jdGlvbnNBbnkuY29uaixcbiAgZ2V0TWF0cml4RGF0YVR5cGU6IF9wdXJlRnVuY3Rpb25zQW55LmdldE1hdHJpeERhdGFUeXBlLFxuICBtb2RlOiBfcHVyZUZ1bmN0aW9uc0FueS5tb2RlLFxuICBwcmludDogX3B1cmVGdW5jdGlvbnNBbnkucHJpbnQsXG4gIGFjb3NoOiBfcHVyZUZ1bmN0aW9uc0FueS5hY29zaCxcbiAgYWNzY2g6IF9wdXJlRnVuY3Rpb25zQW55LmFjc2NoLFxuICBhc2luaDogX3B1cmVGdW5jdGlvbnNBbnkuYXNpbmgsXG4gIGNvczogX3B1cmVGdW5jdGlvbnNBbnkuY29zLFxuICBjc2M6IF9wdXJlRnVuY3Rpb25zQW55LmNzYyxcbiAgc2luOiBfcHVyZUZ1bmN0aW9uc0FueS5zaW4sXG4gIGNvbWJpbmF0aW9uc1dpdGhSZXA6IF9wdXJlRnVuY3Rpb25zQW55LmNvbWJpbmF0aW9uc1dpdGhSZXAsXG4gIHJhbmRvbTogX3B1cmVGdW5jdGlvbnNBbnkucmFuZG9tLFxuICBTUVJUMjogX3B1cmVGdW5jdGlvbnNBbnkuU1FSVDIsXG4gIGlzTmVnYXRpdmU6IF9wdXJlRnVuY3Rpb25zQW55LmlzTmVnYXRpdmUsXG4gIG1hdHJpeDogX3B1cmVGdW5jdGlvbnNBbnkubWF0cml4LFxuICBjYnJ0OiBfcHVyZUZ1bmN0aW9uc0FueS5jYnJ0LFxuICBnY2Q6IF9wdXJlRnVuY3Rpb25zQW55LmdjZCxcbiAgbW9kOiBfcHVyZUZ1bmN0aW9uc0FueS5tb2QsXG4gIG50aFJvb3Q6IF9wdXJlRnVuY3Rpb25zQW55Lm50aFJvb3QsXG4gIHhnY2Q6IF9wdXJlRnVuY3Rpb25zQW55LnhnY2QsXG4gIGJpdEFuZDogX3B1cmVGdW5jdGlvbnNBbnkuYml0QW5kLFxuICBiaXRYb3I6IF9wdXJlRnVuY3Rpb25zQW55LmJpdFhvcixcbiAgb3I6IF9wdXJlRnVuY3Rpb25zQW55Lm9yLFxuICBjb25jYXQ6IF9wdXJlRnVuY3Rpb25zQW55LmNvbmNhdCxcbiAgZGlhZzogX3B1cmVGdW5jdGlvbnNBbnkuZGlhZyxcbiAgaWRlbnRpdHk6IF9wdXJlRnVuY3Rpb25zQW55LmlkZW50aXR5LFxuICBvbmVzOiBfcHVyZUZ1bmN0aW9uc0FueS5vbmVzLFxuICByZXNoYXBlOiBfcHVyZUZ1bmN0aW9uc0FueS5yZXNoYXBlLFxuICBzaXplOiBfcHVyZUZ1bmN0aW9uc0FueS5zaXplLFxuICBzdWJzZXQ6IF9wdXJlRnVuY3Rpb25zQW55LnN1YnNldCxcbiAgemVyb3M6IF9wdXJlRnVuY3Rpb25zQW55Lnplcm9zLFxuICB0bzogX3B1cmVGdW5jdGlvbnNBbnkudG8sXG4gIHJvdW5kOiBfcHVyZUZ1bmN0aW9uc0FueS5yb3VuZCxcbiAgbGVmdFNoaWZ0OiBfcHVyZUZ1bmN0aW9uc0FueS5sZWZ0U2hpZnQsXG4gIHJpZ2h0TG9nU2hpZnQ6IF9wdXJlRnVuY3Rpb25zQW55LnJpZ2h0TG9nU2hpZnQsXG4gIGNvbXBhcmU6IF9wdXJlRnVuY3Rpb25zQW55LmNvbXBhcmUsXG4gIGNvbXBhcmVUZXh0OiBfcHVyZUZ1bmN0aW9uc0FueS5jb21wYXJlVGV4dCxcbiAgc21hbGxlcjogX3B1cmVGdW5jdGlvbnNBbnkuc21hbGxlcixcbiAgbGFyZ2VyOiBfcHVyZUZ1bmN0aW9uc0FueS5sYXJnZXIsXG4gIHVuZXF1YWw6IF9wdXJlRnVuY3Rpb25zQW55LnVuZXF1YWwsXG4gIG1heDogX3B1cmVGdW5jdGlvbnNBbnkubWF4LFxuICBzcGFyc2U6IF9wdXJlRnVuY3Rpb25zQW55LnNwYXJzZSxcbiAgYWNvdGg6IF9wdXJlRnVuY3Rpb25zQW55LmFjb3RoLFxuICBhdGFuMjogX3B1cmVGdW5jdGlvbnNBbnkuYXRhbjIsXG4gIHNlYzogX3B1cmVGdW5jdGlvbnNBbnkuc2VjLFxuICBhZGQ6IF9wdXJlRnVuY3Rpb25zQW55LmFkZCxcbiAgdHJhY2U6IF9wdXJlRnVuY3Rpb25zQW55LnRyYWNlLFxuICBjb21wb3NpdGlvbjogX3B1cmVGdW5jdGlvbnNBbnkuY29tcG9zaXRpb24sXG4gIGlzWmVybzogX3B1cmVGdW5jdGlvbnNBbnkuaXNaZXJvLFxuICBhYnM6IF9wdXJlRnVuY3Rpb25zQW55LmFicyxcbiAgZmxvb3I6IF9wdXJlRnVuY3Rpb25zQW55LmZsb29yLFxuICBtdWx0aXBseTogX3B1cmVGdW5jdGlvbnNBbnkubXVsdGlwbHksXG4gIGRvdE11bHRpcGx5OiBfcHVyZUZ1bmN0aW9uc0FueS5kb3RNdWx0aXBseSxcbiAgcmU6IF9wdXJlRnVuY3Rpb25zQW55LnJlLFxuICBmbGF0dGVuOiBfcHVyZUZ1bmN0aW9uc0FueS5mbGF0dGVuLFxuICByZXNpemU6IF9wdXJlRnVuY3Rpb25zQW55LnJlc2l6ZSxcbiAgc3F1ZWV6ZTogX3B1cmVGdW5jdGlvbnNBbnkuc3F1ZWV6ZSxcbiAgcHJvZDogX3B1cmVGdW5jdGlvbnNBbnkucHJvZCxcbiAgcG93OiBfcHVyZUZ1bmN0aW9uc0FueS5wb3csXG4gIGRvdFBvdzogX3B1cmVGdW5jdGlvbnNBbnkuZG90UG93LFxuICByaWdodEFyaXRoU2hpZnQ6IF9wdXJlRnVuY3Rpb25zQW55LnJpZ2h0QXJpdGhTaGlmdCxcbiAgY29tcGFyZU5hdHVyYWw6IF9wdXJlRnVuY3Rpb25zQW55LmNvbXBhcmVOYXR1cmFsLFxuICBlcXVhbFRleHQ6IF9wdXJlRnVuY3Rpb25zQW55LmVxdWFsVGV4dCxcbiAgbGFyZ2VyRXE6IF9wdXJlRnVuY3Rpb25zQW55LmxhcmdlckVxLFxuICBwYXJ0aXRpb25TZWxlY3Q6IF9wdXJlRnVuY3Rpb25zQW55LnBhcnRpdGlvblNlbGVjdCxcbiAgbWluOiBfcHVyZUZ1bmN0aW9uc0FueS5taW4sXG4gIGFzZWNoOiBfcHVyZUZ1bmN0aW9uc0FueS5hc2VjaCxcbiAgdGFuOiBfcHVyZUZ1bmN0aW9uc0FueS50YW4sXG4gIHNldFNpemU6IF9wdXJlRnVuY3Rpb25zQW55LnNldFNpemUsXG4gIG5vcm06IF9wdXJlRnVuY3Rpb25zQW55Lm5vcm0sXG4gIHF1YW50aWxlU2VxOiBfcHVyZUZ1bmN0aW9uc0FueS5xdWFudGlsZVNlcSxcbiAgZ2FtbWE6IF9wdXJlRnVuY3Rpb25zQW55LmdhbW1hLFxuICBiaWdudW1iZXI6IF9wdXJlRnVuY3Rpb25zQW55LmJpZ251bWJlcixcbiAgbGNtOiBfcHVyZUZ1bmN0aW9uc0FueS5sY20sXG4gIGJpdE9yOiBfcHVyZUZ1bmN0aW9uc0FueS5iaXRPcixcbiAga3JvbjogX3B1cmVGdW5jdGlvbnNBbnkua3JvbixcbiAgdHJhbnNwb3NlOiBfcHVyZUZ1bmN0aW9uc0FueS50cmFuc3Bvc2UsXG4gIG51bWVyaWM6IF9wdXJlRnVuY3Rpb25zQW55Lm51bWVyaWMsXG4gIGFuZDogX3B1cmVGdW5jdGlvbnNBbnkuYW5kLFxuICBzbWFsbGVyRXE6IF9wdXJlRnVuY3Rpb25zQW55LnNtYWxsZXJFcSxcbiAgc29ydDogX3B1cmVGdW5jdGlvbnNBbnkuc29ydCxcbiAgY290OiBfcHVyZUZ1bmN0aW9uc0FueS5jb3QsXG4gIGRvdDogX3B1cmVGdW5jdGlvbnNBbnkuZG90LFxuICBzdW06IF9wdXJlRnVuY3Rpb25zQW55LnN1bSxcbiAgZmFjdG9yaWFsOiBfcHVyZUZ1bmN0aW9uc0FueS5mYWN0b3JpYWwsXG4gIHBlcm11dGF0aW9uczogX3B1cmVGdW5jdGlvbnNBbnkucGVybXV0YXRpb25zLFxuICBjZWlsOiBfcHVyZUZ1bmN0aW9uc0FueS5jZWlsLFxuICBzdWJ0cmFjdDogX3B1cmVGdW5jdGlvbnNBbnkuc3VidHJhY3QsXG4gIGNyb3NzOiBfcHVyZUZ1bmN0aW9uc0FueS5jcm9zcyxcbiAgY3RyYW5zcG9zZTogX3B1cmVGdW5jdGlvbnNBbnkuY3RyYW5zcG9zZSxcbiAgZXF1YWw6IF9wdXJlRnVuY3Rpb25zQW55LmVxdWFsLFxuICBzZXRDYXJ0ZXNpYW46IF9wdXJlRnVuY3Rpb25zQW55LnNldENhcnRlc2lhbixcbiAgc2V0RGlzdGluY3Q6IF9wdXJlRnVuY3Rpb25zQW55LnNldERpc3RpbmN0LFxuICBzZXRJc1N1YnNldDogX3B1cmVGdW5jdGlvbnNBbnkuc2V0SXNTdWJzZXQsXG4gIHNldFBvd2Vyc2V0OiBfcHVyZUZ1bmN0aW9uc0FueS5zZXRQb3dlcnNldCxcbiAgaW5kZXg6IF9wdXJlRnVuY3Rpb25zQW55LmluZGV4LFxuICBmaXg6IF9wdXJlRnVuY3Rpb25zQW55LmZpeCxcbiAgcmFuZ2U6IF9wdXJlRnVuY3Rpb25zQW55LnJhbmdlLFxuICBkaXZpZGVTY2FsYXI6IF9wdXJlRnVuY3Rpb25zQW55LmRpdmlkZVNjYWxhcixcbiAgbnRoUm9vdHM6IF9wdXJlRnVuY3Rpb25zQW55Lm50aFJvb3RzLFxuICBsc29sdmU6IF9wdXJlRnVuY3Rpb25zQW55Lmxzb2x2ZSxcbiAgZGVlcEVxdWFsOiBfcHVyZUZ1bmN0aW9uc0FueS5kZWVwRXF1YWwsXG4gIHNldERpZmZlcmVuY2U6IF9wdXJlRnVuY3Rpb25zQW55LnNldERpZmZlcmVuY2UsXG4gIHNldE11bHRpcGxpY2l0eTogX3B1cmVGdW5jdGlvbnNBbnkuc2V0TXVsdGlwbGljaXR5LFxuICBoeXBvdDogX3B1cmVGdW5jdGlvbnNBbnkuaHlwb3QsXG4gIGx1cDogX3B1cmVGdW5jdGlvbnNBbnkubHVwLFxuICBzbHU6IF9wdXJlRnVuY3Rpb25zQW55LnNsdSxcbiAgZGV0OiBfcHVyZUZ1bmN0aW9uc0FueS5kZXQsXG4gIGRpc3RhbmNlOiBfcHVyZUZ1bmN0aW9uc0FueS5kaXN0YW5jZSxcbiAgc3RpcmxpbmdTMjogX3B1cmVGdW5jdGlvbnNBbnkuc3RpcmxpbmdTMixcbiAgY2F0YWxhbjogX3B1cmVGdW5jdGlvbnNBbnkuY2F0YWxhbixcbiAgeG9yOiBfcHVyZUZ1bmN0aW9uc0FueS54b3IsXG4gIHJvdzogX3B1cmVGdW5jdGlvbnNBbnkucm93LFxuICBkb3REaXZpZGU6IF9wdXJlRnVuY3Rpb25zQW55LmRvdERpdmlkZSxcbiAgY3JlYXRlVW5pdDogX3B1cmVGdW5jdGlvbnNBbnkuY3JlYXRlVW5pdCxcbiAgc2V0U3ltRGlmZmVyZW5jZTogX3B1cmVGdW5jdGlvbnNBbnkuc2V0U3ltRGlmZmVyZW5jZSxcbiAgcXI6IF9wdXJlRnVuY3Rpb25zQW55LnFyLFxuICBpbnY6IF9wdXJlRnVuY3Rpb25zQW55LmludixcbiAgZXhwbTogX3B1cmVGdW5jdGlvbnNBbnkuZXhwbSxcbiAgZGl2aWRlOiBfcHVyZUZ1bmN0aW9uc0FueS5kaXZpZGUsXG4gIG1lYW46IF9wdXJlRnVuY3Rpb25zQW55Lm1lYW4sXG4gIHZhcmlhbmNlOiBfcHVyZUZ1bmN0aW9uc0FueS52YXJpYW5jZSxcbiAgc3RkOiBfcHVyZUZ1bmN0aW9uc0FueS5zdGQsXG4gIG11bHRpbm9taWFsOiBfcHVyZUZ1bmN0aW9uc0FueS5tdWx0aW5vbWlhbCxcbiAgYXRvbWljTWFzczogX3B1cmVGdW5jdGlvbnNBbnkuYXRvbWljTWFzcyxcbiAgYm9ock1hZ25ldG9uOiBfcHVyZUZ1bmN0aW9uc0FueS5ib2hyTWFnbmV0b24sXG4gIGJvbHR6bWFubjogX3B1cmVGdW5jdGlvbnNBbnkuYm9sdHptYW5uLFxuICBjb25kdWN0YW5jZVF1YW50dW06IF9wdXJlRnVuY3Rpb25zQW55LmNvbmR1Y3RhbmNlUXVhbnR1bSxcbiAgZGV1dGVyb25NYXNzOiBfcHVyZUZ1bmN0aW9uc0FueS5kZXV0ZXJvbk1hc3MsXG4gIGVsZWN0cm9uTWFzczogX3B1cmVGdW5jdGlvbnNBbnkuZWxlY3Ryb25NYXNzLFxuICBmYXJhZGF5OiBfcHVyZUZ1bmN0aW9uc0FueS5mYXJhZGF5LFxuICBmaXJzdFJhZGlhdGlvbjogX3B1cmVGdW5jdGlvbnNBbnkuZmlyc3RSYWRpYXRpb24sXG4gIGdyYXZpdGF0aW9uQ29uc3RhbnQ6IF9wdXJlRnVuY3Rpb25zQW55LmdyYXZpdGF0aW9uQ29uc3RhbnQsXG4gIGhhcnRyZWVFbmVyZ3k6IF9wdXJlRnVuY3Rpb25zQW55LmhhcnRyZWVFbmVyZ3ksXG4gIGtsaXR6aW5nOiBfcHVyZUZ1bmN0aW9uc0FueS5rbGl0emluZyxcbiAgbWFnbmV0aWNDb25zdGFudDogX3B1cmVGdW5jdGlvbnNBbnkubWFnbmV0aWNDb25zdGFudCxcbiAgbW9sYXJNYXNzOiBfcHVyZUZ1bmN0aW9uc0FueS5tb2xhck1hc3MsXG4gIG1vbGFyUGxhbmNrQ29uc3RhbnQ6IF9wdXJlRnVuY3Rpb25zQW55Lm1vbGFyUGxhbmNrQ29uc3RhbnQsXG4gIG5ldXRyb25NYXNzOiBfcHVyZUZ1bmN0aW9uc0FueS5uZXV0cm9uTWFzcyxcbiAgcGxhbmNrQ2hhcmdlOiBfcHVyZUZ1bmN0aW9uc0FueS5wbGFuY2tDaGFyZ2UsXG4gIHBsYW5ja0xlbmd0aDogX3B1cmVGdW5jdGlvbnNBbnkucGxhbmNrTGVuZ3RoLFxuICBwbGFuY2tUZW1wZXJhdHVyZTogX3B1cmVGdW5jdGlvbnNBbnkucGxhbmNrVGVtcGVyYXR1cmUsXG4gIHByb3Rvbk1hc3M6IF9wdXJlRnVuY3Rpb25zQW55LnByb3Rvbk1hc3MsXG4gIHJlZHVjZWRQbGFuY2tDb25zdGFudDogX3B1cmVGdW5jdGlvbnNBbnkucmVkdWNlZFBsYW5ja0NvbnN0YW50LFxuICBzZWNvbmRSYWRpYXRpb246IF9wdXJlRnVuY3Rpb25zQW55LnNlY29uZFJhZGlhdGlvbixcbiAgc3RlZmFuQm9sdHptYW5uOiBfcHVyZUZ1bmN0aW9uc0FueS5zdGVmYW5Cb2x0em1hbm4sXG4gIHZhY3V1bUltcGVkYW5jZTogX3B1cmVGdW5jdGlvbnNBbnkudmFjdXVtSW1wZWRhbmNlLFxuICBjb2x1bW46IF9wdXJlRnVuY3Rpb25zQW55LmNvbHVtbixcbiAgdXNvbHZlOiBfcHVyZUZ1bmN0aW9uc0FueS51c29sdmUsXG4gIHNldEludGVyc2VjdDogX3B1cmVGdW5jdGlvbnNBbnkuc2V0SW50ZXJzZWN0LFxuICBsdXNvbHZlOiBfcHVyZUZ1bmN0aW9uc0FueS5sdXNvbHZlLFxuICBlaWdzOiBfcHVyZUZ1bmN0aW9uc0FueS5laWdzLFxuICBpbnRlcnNlY3Q6IF9wdXJlRnVuY3Rpb25zQW55LmludGVyc2VjdCxcbiAgJ3Zhcic6IF9wdXJlRnVuY3Rpb25zQW55LnZhcmlhbmNlLFxuICBiZWxsTnVtYmVyczogX3B1cmVGdW5jdGlvbnNBbnkuYmVsbE51bWJlcnMsXG4gIGF2b2dhZHJvOiBfcHVyZUZ1bmN0aW9uc0FueS5hdm9nYWRybyxcbiAgY2xhc3NpY2FsRWxlY3Ryb25SYWRpdXM6IF9wdXJlRnVuY3Rpb25zQW55LmNsYXNzaWNhbEVsZWN0cm9uUmFkaXVzLFxuICBlbGVjdHJpY0NvbnN0YW50OiBfcHVyZUZ1bmN0aW9uc0FueS5lbGVjdHJpY0NvbnN0YW50LFxuICBmZXJtaUNvdXBsaW5nOiBfcHVyZUZ1bmN0aW9uc0FueS5mZXJtaUNvdXBsaW5nLFxuICBncmF2aXR5OiBfcHVyZUZ1bmN0aW9uc0FueS5ncmF2aXR5LFxuICBsb3NjaG1pZHQ6IF9wdXJlRnVuY3Rpb25zQW55Lmxvc2NobWlkdCxcbiAgbW9sYXJNYXNzQzEyOiBfcHVyZUZ1bmN0aW9uc0FueS5tb2xhck1hc3NDMTIsXG4gIG51Y2xlYXJNYWduZXRvbjogX3B1cmVGdW5jdGlvbnNBbnkubnVjbGVhck1hZ25ldG9uLFxuICBwbGFuY2tNYXNzOiBfcHVyZUZ1bmN0aW9uc0FueS5wbGFuY2tNYXNzLFxuICBxdWFudHVtT2ZDaXJjdWxhdGlvbjogX3B1cmVGdW5jdGlvbnNBbnkucXVhbnR1bU9mQ2lyY3VsYXRpb24sXG4gIHNwZWVkT2ZMaWdodDogX3B1cmVGdW5jdGlvbnNBbnkuc3BlZWRPZkxpZ2h0LFxuICB3aWVuRGlzcGxhY2VtZW50OiBfcHVyZUZ1bmN0aW9uc0FueS53aWVuRGlzcGxhY2VtZW50LFxuICBsb2c6IF9wdXJlRnVuY3Rpb25zQW55LmxvZyxcbiAgdW5pdDogX3B1cmVGdW5jdGlvbnNBbnkudW5pdCxcbiAgcGFyc2U6IHBhcnNlLFxuICBldmFsdWF0ZTogZXZhbHVhdGUsXG4gIHNxcnRtOiBfcHVyZUZ1bmN0aW9uc0FueS5zcXJ0bSxcbiAga2xkaXZlcmdlbmNlOiBfcHVyZUZ1bmN0aW9uc0FueS5rbGRpdmVyZ2VuY2UsXG4gIGJvaHJSYWRpdXM6IF9wdXJlRnVuY3Rpb25zQW55LmJvaHJSYWRpdXMsXG4gIGVsZW1lbnRhcnlDaGFyZ2U6IF9wdXJlRnVuY3Rpb25zQW55LmVsZW1lbnRhcnlDaGFyZ2UsXG4gIGludmVyc2VDb25kdWN0YW5jZVF1YW50dW06IF9wdXJlRnVuY3Rpb25zQW55LmludmVyc2VDb25kdWN0YW5jZVF1YW50dW0sXG4gIG1vbGFyVm9sdW1lOiBfcHVyZUZ1bmN0aW9uc0FueS5tb2xhclZvbHVtZSxcbiAgcGxhbmNrVGltZTogX3B1cmVGdW5jdGlvbnNBbnkucGxhbmNrVGltZSxcbiAgdGhvbXNvbkNyb3NzU2VjdGlvbjogX3B1cmVGdW5jdGlvbnNBbnkudGhvbXNvbkNyb3NzU2VjdGlvbixcbiAgbG9nMXA6IF9wdXJlRnVuY3Rpb25zQW55LmxvZzFwLFxuICBjb21waWxlOiBjb21waWxlLFxuICBwYXJzZXI6IHBhcnNlcixcbiAgbWVkaWFuOiBfcHVyZUZ1bmN0aW9uc0FueS5tZWRpYW4sXG4gIHNpbXBsaWZ5OiBzaW1wbGlmeSxcbiAgcmF0aW9uYWxpemU6IHJhdGlvbmFsaXplLFxuICBnYXNDb25zdGFudDogX3B1cmVGdW5jdGlvbnNBbnkuZ2FzQ29uc3RhbnQsXG4gIHBsYW5ja0NvbnN0YW50OiBfcHVyZUZ1bmN0aW9uc0FueS5wbGFuY2tDb25zdGFudCxcbiAgc2V0VW5pb246IF9wdXJlRnVuY3Rpb25zQW55LnNldFVuaW9uLFxuICBoZWxwOiBoZWxwLFxuICBkZXJpdmF0aXZlOiBkZXJpdmF0aXZlLFxuICBtYWduZXRpY0ZsdXhRdWFudHVtOiBfcHVyZUZ1bmN0aW9uc0FueS5tYWduZXRpY0ZsdXhRdWFudHVtLFxuICAnZXZhbCc6IGV2YWx1YXRlLFxuICBjb3Vsb21iOiBfcHVyZUZ1bmN0aW9uc0FueS5jb3Vsb21iLFxuICBtYWQ6IF9wdXJlRnVuY3Rpb25zQW55Lm1hZCxcbiAgcnlkYmVyZzogX3B1cmVGdW5jdGlvbnNBbnkucnlkYmVyZyxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcblxuX2V4dGVuZHMobWF0aFdpdGhUcmFuc2Zvcm0sIG1hdGgsIHtcbiAgYXBwbHk6ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUFwcGx5VHJhbnNmb3JtKSh7XG4gICAgaXNJbnRlZ2VyOiBfcHVyZUZ1bmN0aW9uc0FueS5pc0ludGVnZXIsXG4gICAgdHlwZWQ6IF9wdXJlRnVuY3Rpb25zQW55LnR5cGVkXG4gIH0pLFxuICBmaWx0ZXI6ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUZpbHRlclRyYW5zZm9ybSkoe1xuICAgIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxuICB9KSxcbiAgbWFwOiAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVNYXBUcmFuc2Zvcm0pKHtcbiAgICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbiAgfSksXG4gIGZvckVhY2g6ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUZvckVhY2hUcmFuc2Zvcm0pKHtcbiAgICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbiAgfSksXG4gIG1heDogKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTWF4VHJhbnNmb3JtKSh7XG4gICAgbGFyZ2VyOiBfcHVyZUZ1bmN0aW9uc0FueS5sYXJnZXIsXG4gICAgdHlwZWQ6IF9wdXJlRnVuY3Rpb25zQW55LnR5cGVkXG4gIH0pLFxuICBtaW46ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU1pblRyYW5zZm9ybSkoe1xuICAgIHNtYWxsZXI6IF9wdXJlRnVuY3Rpb25zQW55LnNtYWxsZXIsXG4gICAgdHlwZWQ6IF9wdXJlRnVuY3Rpb25zQW55LnR5cGVkXG4gIH0pLFxuICBzdWJzZXQ6ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVN1YnNldFRyYW5zZm9ybSkoe1xuICAgIG1hdHJpeDogX3B1cmVGdW5jdGlvbnNBbnkubWF0cml4LFxuICAgIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxuICB9KSxcbiAgY29uY2F0OiAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb25jYXRUcmFuc2Zvcm0pKHtcbiAgICBpc0ludGVnZXI6IF9wdXJlRnVuY3Rpb25zQW55LmlzSW50ZWdlcixcbiAgICBtYXRyaXg6IF9wdXJlRnVuY3Rpb25zQW55Lm1hdHJpeCxcbiAgICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbiAgfSksXG4gIHJhbmdlOiAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSYW5nZVRyYW5zZm9ybSkoe1xuICAgIGJpZ251bWJlcjogX3B1cmVGdW5jdGlvbnNBbnkuYmlnbnVtYmVyLFxuICAgIG1hdHJpeDogX3B1cmVGdW5jdGlvbnNBbnkubWF0cml4LFxuICAgIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgICBsYXJnZXI6IF9wdXJlRnVuY3Rpb25zQW55LmxhcmdlcixcbiAgICBsYXJnZXJFcTogX3B1cmVGdW5jdGlvbnNBbnkubGFyZ2VyRXEsXG4gICAgc21hbGxlcjogX3B1cmVGdW5jdGlvbnNBbnkuc21hbGxlcixcbiAgICBzbWFsbGVyRXE6IF9wdXJlRnVuY3Rpb25zQW55LnNtYWxsZXJFcSxcbiAgICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbiAgfSksXG4gIHN1bTogKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3VtVHJhbnNmb3JtKSh7XG4gICAgYmlnbnVtYmVyOiBfcHVyZUZ1bmN0aW9uc0FueS5iaWdudW1iZXIsXG4gICAgZnJhY3Rpb246IF9wdXJlRnVuY3Rpb25zQW55LmZyYWN0aW9uLFxuICAgIGFkZDogX3B1cmVGdW5jdGlvbnNBbnkuYWRkLFxuICAgIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbiAgfSksXG4gIGluZGV4OiAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVJbmRleFRyYW5zZm9ybSkoe1xuICAgIEluZGV4OiBfcHVyZUZ1bmN0aW9uc0FueS5JbmRleFxuICB9KSxcbiAgY29sdW1uOiAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb2x1bW5UcmFuc2Zvcm0pKHtcbiAgICBJbmRleDogX3B1cmVGdW5jdGlvbnNBbnkuSW5kZXgsXG4gICAgbWF0cml4OiBfcHVyZUZ1bmN0aW9uc0FueS5tYXRyaXgsXG4gICAgcmFuZ2U6IF9wdXJlRnVuY3Rpb25zQW55LnJhbmdlLFxuICAgIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxuICB9KSxcbiAgcm93OiAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSb3dUcmFuc2Zvcm0pKHtcbiAgICBJbmRleDogX3B1cmVGdW5jdGlvbnNBbnkuSW5kZXgsXG4gICAgbWF0cml4OiBfcHVyZUZ1bmN0aW9uc0FueS5tYXRyaXgsXG4gICAgcmFuZ2U6IF9wdXJlRnVuY3Rpb25zQW55LnJhbmdlLFxuICAgIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxuICB9KSxcbiAgbWVhbjogKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTWVhblRyYW5zZm9ybSkoe1xuICAgIGFkZDogX3B1cmVGdW5jdGlvbnNBbnkuYWRkLFxuICAgIGRpdmlkZTogX3B1cmVGdW5jdGlvbnNBbnkuZGl2aWRlLFxuICAgIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxuICB9KSxcbiAgdmFyaWFuY2U6ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVZhcmlhbmNlVHJhbnNmb3JtKSh7XG4gICAgYWRkOiBfcHVyZUZ1bmN0aW9uc0FueS5hZGQsXG4gICAgYXBwbHk6IF9wdXJlRnVuY3Rpb25zQW55LmFwcGx5LFxuICAgIGRpdmlkZTogX3B1cmVGdW5jdGlvbnNBbnkuZGl2aWRlLFxuICAgIGlzTmFOOiBfcHVyZUZ1bmN0aW9uc0FueS5pc05hTixcbiAgICBtdWx0aXBseTogX3B1cmVGdW5jdGlvbnNBbnkubXVsdGlwbHksXG4gICAgc3VidHJhY3Q6IF9wdXJlRnVuY3Rpb25zQW55LnN1YnRyYWN0LFxuICAgIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxuICB9KSxcbiAgc3RkOiAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTdGRUcmFuc2Zvcm0pKHtcbiAgICBzcXJ0OiBfcHVyZUZ1bmN0aW9uc0FueS5zcXJ0LFxuICAgIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZCxcbiAgICB2YXJpYW5jZTogX3B1cmVGdW5jdGlvbnNBbnkudmFyaWFuY2VcbiAgfSlcbn0pO1xuXG5fZXh0ZW5kcyhjbGFzc2VzLCB7XG4gIFJlc3VsdFNldDogX3B1cmVGdW5jdGlvbnNBbnkuUmVzdWx0U2V0LFxuICBDb21wbGV4OiBfcHVyZUZ1bmN0aW9uc0FueS5Db21wbGV4LFxuICBSYW5nZTogX3B1cmVGdW5jdGlvbnNBbnkuUmFuZ2UsXG4gIE5vZGU6IE5vZGUsXG4gIEFycmF5Tm9kZTogQXJyYXlOb2RlLFxuICBCbG9ja05vZGU6IEJsb2NrTm9kZSxcbiAgQ29uc3RhbnROb2RlOiBDb25zdGFudE5vZGUsXG4gIE9iamVjdE5vZGU6IE9iamVjdE5vZGUsXG4gIFBhcmVudGhlc2lzTm9kZTogUGFyZW50aGVzaXNOb2RlLFxuICBSZWxhdGlvbmFsTm9kZTogUmVsYXRpb25hbE5vZGUsXG4gIENoYWluOiBDaGFpbixcbiAgQmlnTnVtYmVyOiBfcHVyZUZ1bmN0aW9uc0FueS5CaWdOdW1iZXIsXG4gIE1hdHJpeDogX3B1cmVGdW5jdGlvbnNBbnkuTWF0cml4LFxuICBDb25kaXRpb25hbE5vZGU6IENvbmRpdGlvbmFsTm9kZSxcbiAgT3BlcmF0b3JOb2RlOiBPcGVyYXRvck5vZGUsXG4gIEZyYWN0aW9uOiBfcHVyZUZ1bmN0aW9uc0FueS5GcmFjdGlvbixcbiAgUmFuZ2VOb2RlOiBSYW5nZU5vZGUsXG4gIERlbnNlTWF0cml4OiBfcHVyZUZ1bmN0aW9uc0FueS5EZW5zZU1hdHJpeCxcbiAgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZTogRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSxcbiAgU3BhcnNlTWF0cml4OiBfcHVyZUZ1bmN0aW9uc0FueS5TcGFyc2VNYXRyaXgsXG4gIEltbXV0YWJsZURlbnNlTWF0cml4OiBfcHVyZUZ1bmN0aW9uc0FueS5JbW11dGFibGVEZW5zZU1hdHJpeCxcbiAgRmlib25hY2NpSGVhcDogX3B1cmVGdW5jdGlvbnNBbnkuRmlib25hY2NpSGVhcCxcbiAgQWNjZXNzb3JOb2RlOiBBY2Nlc3Nvck5vZGUsXG4gIEluZGV4Tm9kZTogSW5kZXhOb2RlLFxuICBTcGE6IF9wdXJlRnVuY3Rpb25zQW55LlNwYSxcbiAgQXNzaWdubWVudE5vZGU6IEFzc2lnbm1lbnROb2RlLFxuICBJbmRleDogX3B1cmVGdW5jdGlvbnNBbnkuSW5kZXgsXG4gIFVuaXQ6IF9wdXJlRnVuY3Rpb25zQW55LlVuaXQsXG4gIFN5bWJvbE5vZGU6IFN5bWJvbE5vZGUsXG4gIEZ1bmN0aW9uTm9kZTogRnVuY3Rpb25Ob2RlLFxuICBQYXJzZXI6IFBhcnNlcixcbiAgSGVscDogSGVscFxufSk7XG5cbkNoYWluLmNyZWF0ZVByb3h5KG1hdGgpOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xudmFyIF9leHBvcnROYW1lcyA9IHtcbiAgY29uZmlnOiB0cnVlLFxuICBJbmRleEVycm9yOiB0cnVlLFxuICBEaW1lbnNpb25FcnJvcjogdHJ1ZSxcbiAgQXJndW1lbnRzRXJyb3I6IHRydWUsXG4gIGNyZWF0ZTogdHJ1ZSxcbiAgZmFjdG9yeTogdHJ1ZVxufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvbmZpZ1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29uZmlnUmVhZG9ubHkuY29uZmlnO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkluZGV4RXJyb3JcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0luZGV4RXJyb3IuSW5kZXhFcnJvcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJEaW1lbnNpb25FcnJvclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3I7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQXJndW1lbnRzRXJyb3JcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0FyZ3VtZW50c0Vycm9yLkFyZ3VtZW50c0Vycm9yO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY3JlYXRlLmNyZWF0ZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmYWN0b3J5XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9mYWN0b3J5LmZhY3Rvcnk7XG4gIH1cbn0pO1xuXG52YXIgX2NvbmZpZ1JlYWRvbmx5ID0gcmVxdWlyZShcIi4vY29uZmlnUmVhZG9ubHlcIik7XG5cbnZhciBfcHVyZUZ1bmN0aW9uc0FueSA9IHJlcXVpcmUoXCIuL3B1cmVGdW5jdGlvbnNBbnkuZ2VuZXJhdGVkXCIpO1xuXG5PYmplY3Qua2V5cyhfcHVyZUZ1bmN0aW9uc0FueSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIGlmIChrZXkgPT09IFwiZGVmYXVsdFwiIHx8IGtleSA9PT0gXCJfX2VzTW9kdWxlXCIpIHJldHVybjtcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfZXhwb3J0TmFtZXMsIGtleSkpIHJldHVybjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gX3B1cmVGdW5jdGlvbnNBbnlba2V5XTtcbiAgICB9XG4gIH0pO1xufSk7XG5cbnZhciBfaW1wdXJlRnVuY3Rpb25zQW55ID0gcmVxdWlyZShcIi4vaW1wdXJlRnVuY3Rpb25zQW55LmdlbmVyYXRlZFwiKTtcblxuT2JqZWN0LmtleXMoX2ltcHVyZUZ1bmN0aW9uc0FueSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIGlmIChrZXkgPT09IFwiZGVmYXVsdFwiIHx8IGtleSA9PT0gXCJfX2VzTW9kdWxlXCIpIHJldHVybjtcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfZXhwb3J0TmFtZXMsIGtleSkpIHJldHVybjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gX2ltcHVyZUZ1bmN0aW9uc0FueVtrZXldO1xuICAgIH1cbiAgfSk7XG59KTtcblxudmFyIF90eXBlQ2hlY2tzID0gcmVxdWlyZShcIi4vdHlwZUNoZWNrc1wiKTtcblxuT2JqZWN0LmtleXMoX3R5cGVDaGVja3MpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBpZiAoa2V5ID09PSBcImRlZmF1bHRcIiB8fCBrZXkgPT09IFwiX19lc01vZHVsZVwiKSByZXR1cm47XG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX2V4cG9ydE5hbWVzLCBrZXkpKSByZXR1cm47XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIF90eXBlQ2hlY2tzW2tleV07XG4gICAgfVxuICB9KTtcbn0pO1xuXG52YXIgX0luZGV4RXJyb3IgPSByZXF1aXJlKFwiLi4vZXJyb3IvSW5kZXhFcnJvclwiKTtcblxudmFyIF9EaW1lbnNpb25FcnJvciA9IHJlcXVpcmUoXCIuLi9lcnJvci9EaW1lbnNpb25FcnJvclwiKTtcblxudmFyIF9Bcmd1bWVudHNFcnJvciA9IHJlcXVpcmUoXCIuLi9lcnJvci9Bcmd1bWVudHNFcnJvclwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBbnkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkuZ2VuZXJhdGVkXCIpO1xuXG5PYmplY3Qua2V5cyhfZGVwZW5kZW5jaWVzQW55KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgaWYgKGtleSA9PT0gXCJkZWZhdWx0XCIgfHwga2V5ID09PSBcIl9fZXNNb2R1bGVcIikgcmV0dXJuO1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9leHBvcnROYW1lcywga2V5KSkgcmV0dXJuO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQW55W2tleV07XG4gICAgfVxuICB9KTtcbn0pO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi9mYWN0b3JpZXNBbnlcIik7XG5cbk9iamVjdC5rZXlzKF9mYWN0b3JpZXNBbnkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBpZiAoa2V5ID09PSBcImRlZmF1bHRcIiB8fCBrZXkgPT09IFwiX19lc01vZHVsZVwiKSByZXR1cm47XG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX2V4cG9ydE5hbWVzLCBrZXkpKSByZXR1cm47XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIF9mYWN0b3JpZXNBbnlba2V5XTtcbiAgICB9XG4gIH0pO1xufSk7XG5cbnZhciBfY3JlYXRlID0gcmVxdWlyZShcIi4uL2NvcmUvY3JlYXRlXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9kZXByZWNhdGVkQW55ID0gcmVxdWlyZShcIi4vZGVwcmVjYXRlZEFueVwiKTtcblxuT2JqZWN0LmtleXMoX2RlcHJlY2F0ZWRBbnkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBpZiAoa2V5ID09PSBcImRlZmF1bHRcIiB8fCBrZXkgPT09IFwiX19lc01vZHVsZVwiKSByZXR1cm47XG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX2V4cG9ydE5hbWVzLCBrZXkpKSByZXR1cm47XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIF9kZXByZWNhdGVkQW55W2tleV07XG4gICAgfVxuICB9KTtcbn0pO1xuXG5leHBvcnRzWyd2YXInXSA9IGV4cG9ydHMuZGVwcmVjYXRlZFZhcjtcbmV4cG9ydHNbJ3R5cGVvZiddID0gZXhwb3J0cy5kZXByZWNhdGVkVHlwZW9mO1xuZXhwb3J0c1snZXZhbCddID0gZXhwb3J0cy5kZXByZWNhdGVkRXZhbDtcbmV4cG9ydHNbJ2ltcG9ydCddID0gZXhwb3J0cy5kZXByZWNhdGVkSW1wb3J0O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNicnQgPSBleHBvcnRzLm1hdHJpeCA9IGV4cG9ydHMuU3BhcnNlTWF0cml4ID0gZXhwb3J0cy5pc05lZ2F0aXZlID0gZXhwb3J0cy5TUVJUMiA9IGV4cG9ydHMucmFuZG9tID0gZXhwb3J0cy5jb21iaW5hdGlvbnNXaXRoUmVwID0gZXhwb3J0cy5zaW4gPSBleHBvcnRzLmNzYyA9IGV4cG9ydHMuY29zID0gZXhwb3J0cy5hc2luaCA9IGV4cG9ydHMuYWNzY2ggPSBleHBvcnRzLmFjb3NoID0gZXhwb3J0cy5wcmludCA9IGV4cG9ydHMubW9kZSA9IGV4cG9ydHMuZ2V0TWF0cml4RGF0YVR5cGUgPSBleHBvcnRzLmNvbmogPSBleHBvcnRzLnNxcnQgPSBleHBvcnRzLmxvZzIgPSBleHBvcnRzLmV4cCA9IGV4cG9ydHMuYWRkU2NhbGFyID0gZXhwb3J0cy51bmFyeU1pbnVzID0gZXhwb3J0cy5mcmFjdGlvbiA9IGV4cG9ydHMuc3RyaW5nID0gZXhwb3J0cy50eXBlT2YgPSBleHBvcnRzLmhhc051bWVyaWNWYWx1ZSA9IGV4cG9ydHMuY2xvbmUgPSBleHBvcnRzLkxOMiA9IGV4cG9ydHMucmFuZG9tSW50ID0gZXhwb3J0cy5waWNrUmFuZG9tID0gZXhwb3J0cy5jb21iaW5hdGlvbnMgPSBleHBvcnRzLnRhbmggPSBleHBvcnRzLnNpbmggPSBleHBvcnRzLnNlY2ggPSBleHBvcnRzLmNzY2ggPSBleHBvcnRzLmNvdGggPSBleHBvcnRzLmNvc2ggPSBleHBvcnRzLmF0YW5oID0gZXhwb3J0cy5hdGFuID0gZXhwb3J0cy5hc2luID0gZXhwb3J0cy5hc2VjID0gZXhwb3J0cy5hY3NjID0gZXhwb3J0cy5hY290ID0gZXhwb3J0cy5hY29zID0gZXhwb3J0cy5pc1ByaW1lID0gZXhwb3J0cy5mb3JtYXQgPSBleHBvcnRzLmVyZiA9IGV4cG9ydHMubWFwID0gZXhwb3J0cy5mb3JFYWNoID0gZXhwb3J0cy5maWx0ZXIgPSBleHBvcnRzLm5vdCA9IGV4cG9ydHMuaW0gPSBleHBvcnRzLmFyZyA9IGV4cG9ydHMuYml0Tm90ID0gZXhwb3J0cy5zcXVhcmUgPSBleHBvcnRzLnNpZ24gPSBleHBvcnRzLm11bHRpcGx5U2NhbGFyID0gZXhwb3J0cy5sb2cxMCA9IGV4cG9ydHMuZXhwbTEgPSBleHBvcnRzLmN1YmUgPSBleHBvcnRzLmFwcGx5ID0gZXhwb3J0cy51bmFyeVBsdXMgPSBleHBvcnRzLnNwbGl0VW5pdCA9IGV4cG9ydHMuY29tcGxleCA9IGV4cG9ydHNbXCJib29sZWFuXCJdID0gZXhwb3J0cy5udW1iZXIgPSBleHBvcnRzLmVxdWFsU2NhbGFyID0gZXhwb3J0cy5pc05hTiA9IGV4cG9ydHMuaXNQb3NpdGl2ZSA9IGV4cG9ydHMuaXNOdW1lcmljID0gZXhwb3J0cy5pc0ludGVnZXIgPSBleHBvcnRzLnR5cGVkID0gZXhwb3J0cy5waGkgPSBleHBvcnRzLkRlbnNlTWF0cml4ID0gZXhwb3J0cy52ZXJzaW9uID0gZXhwb3J0cy5MT0cyRSA9IGV4cG9ydHMuX0luZmluaXR5ID0gZXhwb3J0cy5lID0gZXhwb3J0cy5GcmFjdGlvbiA9IGV4cG9ydHMud2Vha01peGluZ0FuZ2xlID0gZXhwb3J0cy5zYWNrdXJUZXRyb2RlID0gZXhwb3J0cy5maW5lU3RydWN0dXJlID0gZXhwb3J0cy5lZmltb3ZGYWN0b3IgPSBleHBvcnRzLnRhdSA9IGV4cG9ydHMuU1FSVDFfMiA9IGV4cG9ydHMucGkgPSBleHBvcnRzLl9OYU4gPSBleHBvcnRzLkxPRzEwRSA9IGV4cG9ydHMuTE4xMCA9IGV4cG9ydHMuaSA9IGV4cG9ydHMucmVwbGFjZXIgPSBleHBvcnRzLk1hdHJpeCA9IGV4cG9ydHMuQmlnTnVtYmVyID0gZXhwb3J0cy5fdHJ1ZSA9IGV4cG9ydHMuX251bGwgPSBleHBvcnRzLl9mYWxzZSA9IGV4cG9ydHMuZXllID0gZXhwb3J0cy5SYW5nZSA9IGV4cG9ydHMuQ29tcGxleCA9IGV4cG9ydHMuUmVzdWx0U2V0ID0gdm9pZCAwO1xuZXhwb3J0cy54b3IgPSBleHBvcnRzLmNhdGFsYW4gPSBleHBvcnRzLnN0aXJsaW5nUzIgPSBleHBvcnRzLmRpc3RhbmNlID0gZXhwb3J0cy5kZXQgPSBleHBvcnRzLnNsdSA9IGV4cG9ydHMubHVwID0gZXhwb3J0cy5oeXBvdCA9IGV4cG9ydHMuc2V0TXVsdGlwbGljaXR5ID0gZXhwb3J0cy5zZXREaWZmZXJlbmNlID0gZXhwb3J0cy5kZWVwRXF1YWwgPSBleHBvcnRzLmxzb2x2ZSA9IGV4cG9ydHMubnRoUm9vdHMgPSBleHBvcnRzLmRpdmlkZVNjYWxhciA9IGV4cG9ydHMucmFuZ2UgPSBleHBvcnRzLmZpeCA9IGV4cG9ydHMuaW5kZXggPSBleHBvcnRzLnNldFBvd2Vyc2V0ID0gZXhwb3J0cy5zZXRJc1N1YnNldCA9IGV4cG9ydHMuc2V0RGlzdGluY3QgPSBleHBvcnRzLnNldENhcnRlc2lhbiA9IGV4cG9ydHMuSW5kZXggPSBleHBvcnRzLmVxdWFsID0gZXhwb3J0cy5jdHJhbnNwb3NlID0gZXhwb3J0cy5jcm9zcyA9IGV4cG9ydHMuc3VidHJhY3QgPSBleHBvcnRzLmNlaWwgPSBleHBvcnRzLnBlcm11dGF0aW9ucyA9IGV4cG9ydHMuZmFjdG9yaWFsID0gZXhwb3J0cy5zdW0gPSBleHBvcnRzLmRvdCA9IGV4cG9ydHMuY290ID0gZXhwb3J0cy5zb3J0ID0gZXhwb3J0cy5zbWFsbGVyRXEgPSBleHBvcnRzLmFuZCA9IGV4cG9ydHMubnVtZXJpYyA9IGV4cG9ydHMudHJhbnNwb3NlID0gZXhwb3J0cy5rcm9uID0gZXhwb3J0cy5iaXRPciA9IGV4cG9ydHMubGNtID0gZXhwb3J0cy5iaWdudW1iZXIgPSBleHBvcnRzLmdhbW1hID0gZXhwb3J0cy5xdWFudGlsZVNlcSA9IGV4cG9ydHMubm9ybSA9IGV4cG9ydHMuc2V0U2l6ZSA9IGV4cG9ydHMudGFuID0gZXhwb3J0cy5hc2VjaCA9IGV4cG9ydHMuU3BhID0gZXhwb3J0cy5taW4gPSBleHBvcnRzLnBhcnRpdGlvblNlbGVjdCA9IGV4cG9ydHMubGFyZ2VyRXEgPSBleHBvcnRzLmVxdWFsVGV4dCA9IGV4cG9ydHMuY29tcGFyZU5hdHVyYWwgPSBleHBvcnRzLnJpZ2h0QXJpdGhTaGlmdCA9IGV4cG9ydHMuZG90UG93ID0gZXhwb3J0cy5wb3cgPSBleHBvcnRzLnByb2QgPSBleHBvcnRzLnNxdWVlemUgPSBleHBvcnRzLnJlc2l6ZSA9IGV4cG9ydHMuZmxhdHRlbiA9IGV4cG9ydHMucmUgPSBleHBvcnRzLmRvdE11bHRpcGx5ID0gZXhwb3J0cy5tdWx0aXBseSA9IGV4cG9ydHMuZmxvb3IgPSBleHBvcnRzLmFicyA9IGV4cG9ydHMuaXNaZXJvID0gZXhwb3J0cy5jb21wb3NpdGlvbiA9IGV4cG9ydHMudHJhY2UgPSBleHBvcnRzLmFkZCA9IGV4cG9ydHMuc2VjID0gZXhwb3J0cy5hdGFuMiA9IGV4cG9ydHMuYWNvdGggPSBleHBvcnRzLnNwYXJzZSA9IGV4cG9ydHMuRmlib25hY2NpSGVhcCA9IGV4cG9ydHMuSW1tdXRhYmxlRGVuc2VNYXRyaXggPSBleHBvcnRzLm1heCA9IGV4cG9ydHMudW5lcXVhbCA9IGV4cG9ydHMubGFyZ2VyID0gZXhwb3J0cy5zbWFsbGVyID0gZXhwb3J0cy5jb21wYXJlVGV4dCA9IGV4cG9ydHMuY29tcGFyZSA9IGV4cG9ydHMucmlnaHRMb2dTaGlmdCA9IGV4cG9ydHMubGVmdFNoaWZ0ID0gZXhwb3J0cy5yb3VuZCA9IGV4cG9ydHMudG8gPSBleHBvcnRzLnplcm9zID0gZXhwb3J0cy5zdWJzZXQgPSBleHBvcnRzLnNpemUgPSBleHBvcnRzLnJlc2hhcGUgPSBleHBvcnRzLm9uZXMgPSBleHBvcnRzLmlkZW50aXR5ID0gZXhwb3J0cy5kaWFnID0gZXhwb3J0cy5jb25jYXQgPSBleHBvcnRzLm9yID0gZXhwb3J0cy5iaXRYb3IgPSBleHBvcnRzLmJpdEFuZCA9IGV4cG9ydHMueGdjZCA9IGV4cG9ydHMubnRoUm9vdCA9IGV4cG9ydHMubW9kID0gZXhwb3J0cy5nY2QgPSB2b2lkIDA7XG5leHBvcnRzLnJ5ZGJlcmcgPSBleHBvcnRzLm1hZCA9IGV4cG9ydHMuY291bG9tYiA9IGV4cG9ydHMubWFnbmV0aWNGbHV4UXVhbnR1bSA9IGV4cG9ydHMuc2V0VW5pb24gPSBleHBvcnRzLnBsYW5ja0NvbnN0YW50ID0gZXhwb3J0cy5nYXNDb25zdGFudCA9IGV4cG9ydHMubWVkaWFuID0gZXhwb3J0cy5sb2cxcCA9IGV4cG9ydHMudGhvbXNvbkNyb3NzU2VjdGlvbiA9IGV4cG9ydHMucGxhbmNrVGltZSA9IGV4cG9ydHMubW9sYXJWb2x1bWUgPSBleHBvcnRzLmludmVyc2VDb25kdWN0YW5jZVF1YW50dW0gPSBleHBvcnRzLmVsZW1lbnRhcnlDaGFyZ2UgPSBleHBvcnRzLmJvaHJSYWRpdXMgPSBleHBvcnRzLmtsZGl2ZXJnZW5jZSA9IGV4cG9ydHMuc3FydG0gPSBleHBvcnRzLnVuaXQgPSBleHBvcnRzLmxvZyA9IGV4cG9ydHMud2llbkRpc3BsYWNlbWVudCA9IGV4cG9ydHMuc3BlZWRPZkxpZ2h0ID0gZXhwb3J0cy5xdWFudHVtT2ZDaXJjdWxhdGlvbiA9IGV4cG9ydHMucGxhbmNrTWFzcyA9IGV4cG9ydHMubnVjbGVhck1hZ25ldG9uID0gZXhwb3J0cy5tb2xhck1hc3NDMTIgPSBleHBvcnRzLmxvc2NobWlkdCA9IGV4cG9ydHMuZ3Jhdml0eSA9IGV4cG9ydHMuZmVybWlDb3VwbGluZyA9IGV4cG9ydHMuZWxlY3RyaWNDb25zdGFudCA9IGV4cG9ydHMuY2xhc3NpY2FsRWxlY3Ryb25SYWRpdXMgPSBleHBvcnRzLmF2b2dhZHJvID0gZXhwb3J0cy5iZWxsTnVtYmVycyA9IGV4cG9ydHMuaW50ZXJzZWN0ID0gZXhwb3J0cy5laWdzID0gZXhwb3J0cy5sdXNvbHZlID0gZXhwb3J0cy5zZXRJbnRlcnNlY3QgPSBleHBvcnRzLnVzb2x2ZSA9IGV4cG9ydHMuY29sdW1uID0gZXhwb3J0cy52YWN1dW1JbXBlZGFuY2UgPSBleHBvcnRzLnN0ZWZhbkJvbHR6bWFubiA9IGV4cG9ydHMuc2Vjb25kUmFkaWF0aW9uID0gZXhwb3J0cy5yZWR1Y2VkUGxhbmNrQ29uc3RhbnQgPSBleHBvcnRzLnByb3Rvbk1hc3MgPSBleHBvcnRzLnBsYW5ja1RlbXBlcmF0dXJlID0gZXhwb3J0cy5wbGFuY2tMZW5ndGggPSBleHBvcnRzLnBsYW5ja0NoYXJnZSA9IGV4cG9ydHMubmV1dHJvbk1hc3MgPSBleHBvcnRzLm1vbGFyUGxhbmNrQ29uc3RhbnQgPSBleHBvcnRzLm1vbGFyTWFzcyA9IGV4cG9ydHMubWFnbmV0aWNDb25zdGFudCA9IGV4cG9ydHMua2xpdHppbmcgPSBleHBvcnRzLmhhcnRyZWVFbmVyZ3kgPSBleHBvcnRzLmdyYXZpdGF0aW9uQ29uc3RhbnQgPSBleHBvcnRzLmZpcnN0UmFkaWF0aW9uID0gZXhwb3J0cy5mYXJhZGF5ID0gZXhwb3J0cy5lbGVjdHJvbk1hc3MgPSBleHBvcnRzLmRldXRlcm9uTWFzcyA9IGV4cG9ydHMuY29uZHVjdGFuY2VRdWFudHVtID0gZXhwb3J0cy5ib2x0em1hbm4gPSBleHBvcnRzLmJvaHJNYWduZXRvbiA9IGV4cG9ydHMuYXRvbWljTWFzcyA9IGV4cG9ydHMubXVsdGlub21pYWwgPSBleHBvcnRzLnN0ZCA9IGV4cG9ydHMudmFyaWFuY2UgPSBleHBvcnRzLm1lYW4gPSBleHBvcnRzLmRpdmlkZSA9IGV4cG9ydHMuZXhwbSA9IGV4cG9ydHMuaW52ID0gZXhwb3J0cy5xciA9IGV4cG9ydHMuc2V0U3ltRGlmZmVyZW5jZSA9IGV4cG9ydHMuY3JlYXRlVW5pdCA9IGV4cG9ydHMuVW5pdCA9IGV4cG9ydHMuZG90RGl2aWRlID0gZXhwb3J0cy5yb3cgPSB2b2lkIDA7XG5cbnZhciBfY29uZmlnUmVhZG9ubHkgPSByZXF1aXJlKFwiLi9jb25maWdSZWFkb25seVwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vZmFjdG9yaWVzQW55XCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIFJlc3VsdFNldCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVJlc3VsdFNldCkoe30pO1xuZXhwb3J0cy5SZXN1bHRTZXQgPSBSZXN1bHRTZXQ7XG52YXIgQ29tcGxleCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbXBsZXhDbGFzcykoe30pO1xuZXhwb3J0cy5Db21wbGV4ID0gQ29tcGxleDtcbnZhciBSYW5nZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVJhbmdlQ2xhc3MpKHt9KTtcbmV4cG9ydHMuUmFuZ2UgPSBSYW5nZTtcbnZhciBleWUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVFeWUpKHt9KTtcbmV4cG9ydHMuZXllID0gZXllO1xuXG52YXIgX2ZhbHNlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRmFsc2UpKHt9KTtcblxuZXhwb3J0cy5fZmFsc2UgPSBfZmFsc2U7XG5cbnZhciBfbnVsbCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU51bGwpKHt9KTtcblxuZXhwb3J0cy5fbnVsbCA9IF9udWxsO1xuXG52YXIgX3RydWUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVUcnVlKSh7fSk7XG5cbmV4cG9ydHMuX3RydWUgPSBfdHJ1ZTtcbnZhciBCaWdOdW1iZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVCaWdOdW1iZXJDbGFzcykoe1xuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5CaWdOdW1iZXIgPSBCaWdOdW1iZXI7XG52YXIgTWF0cml4ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTWF0cml4Q2xhc3MpKHt9KTtcbmV4cG9ydHMuTWF0cml4ID0gTWF0cml4O1xudmFyIHJlcGxhY2VyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUmVwbGFjZXIpKHt9KTtcbmV4cG9ydHMucmVwbGFjZXIgPSByZXBsYWNlcjtcbnZhciBpID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlSSkoe1xuICBDb21wbGV4OiBDb21wbGV4XG59KTtcbmV4cG9ydHMuaSA9IGk7XG52YXIgTE4xMCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUxOMTApKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLkxOMTAgPSBMTjEwO1xudmFyIExPRzEwRSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUxPRzEwRSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuTE9HMTBFID0gTE9HMTBFO1xuXG52YXIgX05hTiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU5hTikoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcblxuZXhwb3J0cy5fTmFOID0gX05hTjtcbnZhciBwaSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVBpKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5waSA9IHBpO1xudmFyIFNRUlQxXzIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTUVJUMV8yKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5TUVJUMV8yID0gU1FSVDFfMjtcbnZhciB0YXUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVUYXUpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLnRhdSA9IHRhdTtcbnZhciBlZmltb3ZGYWN0b3IgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVFZmltb3ZGYWN0b3IpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmVmaW1vdkZhY3RvciA9IGVmaW1vdkZhY3RvcjtcbnZhciBmaW5lU3RydWN0dXJlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRmluZVN0cnVjdHVyZSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuZmluZVN0cnVjdHVyZSA9IGZpbmVTdHJ1Y3R1cmU7XG52YXIgc2Fja3VyVGV0cm9kZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNhY2t1clRldHJvZGUpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLnNhY2t1clRldHJvZGUgPSBzYWNrdXJUZXRyb2RlO1xudmFyIHdlYWtNaXhpbmdBbmdsZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVdlYWtNaXhpbmdBbmdsZSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMud2Vha01peGluZ0FuZ2xlID0gd2Vha01peGluZ0FuZ2xlO1xudmFyIEZyYWN0aW9uID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRnJhY3Rpb25DbGFzcykoe30pO1xuZXhwb3J0cy5GcmFjdGlvbiA9IEZyYWN0aW9uO1xudmFyIGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVFKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5lID0gZTtcblxudmFyIF9JbmZpbml0eSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUluZmluaXR5KSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuXG5leHBvcnRzLl9JbmZpbml0eSA9IF9JbmZpbml0eTtcbnZhciBMT0cyRSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUxPRzJFKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5MT0cyRSA9IExPRzJFO1xudmFyIHZlcnNpb24gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVWZXJzaW9uKSh7fSk7XG5leHBvcnRzLnZlcnNpb24gPSB2ZXJzaW9uO1xudmFyIERlbnNlTWF0cml4ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRGVuc2VNYXRyaXhDbGFzcykoe1xuICBNYXRyaXg6IE1hdHJpeFxufSk7XG5leHBvcnRzLkRlbnNlTWF0cml4ID0gRGVuc2VNYXRyaXg7XG52YXIgcGhpID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUGhpKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5waGkgPSBwaGk7XG52YXIgdHlwZWQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVUeXBlZCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBGcmFjdGlvbjogRnJhY3Rpb25cbn0pO1xuZXhwb3J0cy50eXBlZCA9IHR5cGVkO1xudmFyIGlzSW50ZWdlciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUlzSW50ZWdlcikoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5pc0ludGVnZXIgPSBpc0ludGVnZXI7XG52YXIgaXNOdW1lcmljID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlSXNOdW1lcmljKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmlzTnVtZXJpYyA9IGlzTnVtZXJpYztcbnZhciBpc1Bvc2l0aXZlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlSXNQb3NpdGl2ZSkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5pc1Bvc2l0aXZlID0gaXNQb3NpdGl2ZTtcbnZhciBpc05hTiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUlzTmFOKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmlzTmFOID0gaXNOYU47XG52YXIgZXF1YWxTY2FsYXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVFcXVhbFNjYWxhcikoe1xuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmVxdWFsU2NhbGFyID0gZXF1YWxTY2FsYXI7XG52YXIgbnVtYmVyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTnVtYmVyKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm51bWJlciA9IG51bWJlcjtcblxudmFyIF9ib29sZWFuID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQm9vbGVhbikoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuXG5leHBvcnRzW1wiYm9vbGVhblwiXSA9IF9ib29sZWFuO1xudmFyIGNvbXBsZXggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb21wbGV4KSh7XG4gIENvbXBsZXg6IENvbXBsZXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNvbXBsZXggPSBjb21wbGV4O1xudmFyIHNwbGl0VW5pdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNwbGl0VW5pdCkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5zcGxpdFVuaXQgPSBzcGxpdFVuaXQ7XG52YXIgdW5hcnlQbHVzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlVW5hcnlQbHVzKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnVuYXJ5UGx1cyA9IHVuYXJ5UGx1cztcbnZhciBhcHBseSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUFwcGx5KSh7XG4gIGlzSW50ZWdlcjogaXNJbnRlZ2VyLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5hcHBseSA9IGFwcGx5O1xudmFyIGN1YmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDdWJlKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmN1YmUgPSBjdWJlO1xudmFyIGV4cG0xID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRXhwbTEpKHtcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZXhwbTEgPSBleHBtMTtcbnZhciBsb2cxMCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUxvZzEwKSh7XG4gIENvbXBsZXg6IENvbXBsZXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMubG9nMTAgPSBsb2cxMDtcbnZhciBtdWx0aXBseVNjYWxhciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU11bHRpcGx5U2NhbGFyKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm11bHRpcGx5U2NhbGFyID0gbXVsdGlwbHlTY2FsYXI7XG52YXIgc2lnbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNpZ24pKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIEZyYWN0aW9uOiBGcmFjdGlvbixcbiAgY29tcGxleDogY29tcGxleCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc2lnbiA9IHNpZ247XG52YXIgc3F1YXJlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3F1YXJlKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNxdWFyZSA9IHNxdWFyZTtcbnZhciBiaXROb3QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVCaXROb3QpKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuYml0Tm90ID0gYml0Tm90O1xudmFyIGFyZyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUFyZykoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5hcmcgPSBhcmc7XG52YXIgaW0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVJbSkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5pbSA9IGltO1xudmFyIG5vdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU5vdCkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5ub3QgPSBub3Q7XG52YXIgZmlsdGVyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRmlsdGVyKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmZpbHRlciA9IGZpbHRlcjtcbnZhciBmb3JFYWNoID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRm9yRWFjaCkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5mb3JFYWNoID0gZm9yRWFjaDtcbnZhciBtYXAgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVNYXApKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMubWFwID0gbWFwO1xudmFyIGVyZiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUVyZikoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5lcmYgPSBlcmY7XG52YXIgZm9ybWF0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRm9ybWF0KSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmZvcm1hdCA9IGZvcm1hdDtcbnZhciBpc1ByaW1lID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlSXNQcmltZSkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5pc1ByaW1lID0gaXNQcmltZTtcbnZhciBhY29zID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQWNvcykoe1xuICBDb21wbGV4OiBDb21wbGV4LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmFjb3MgPSBhY29zO1xudmFyIGFjb3QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVBY290KSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5hY290ID0gYWNvdDtcbnZhciBhY3NjID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQWNzYykoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5hY3NjID0gYWNzYztcbnZhciBhc2VjID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQXNlYykoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5hc2VjID0gYXNlYztcbnZhciBhc2luID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQXNpbikoe1xuICBDb21wbGV4OiBDb21wbGV4LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmFzaW4gPSBhc2luO1xudmFyIGF0YW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVBdGFuKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmF0YW4gPSBhdGFuO1xudmFyIGF0YW5oID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQXRhbmgpKHtcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5hdGFuaCA9IGF0YW5oO1xudmFyIGNvc2ggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb3NoKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNvc2ggPSBjb3NoO1xudmFyIGNvdGggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb3RoKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5jb3RoID0gY290aDtcbnZhciBjc2NoID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ3NjaCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuY3NjaCA9IGNzY2g7XG52YXIgc2VjaCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNlY2gpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNlY2ggPSBzZWNoO1xudmFyIHNpbmggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTaW5oKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNpbmggPSBzaW5oO1xudmFyIHRhbmggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVUYW5oKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnRhbmggPSB0YW5oO1xudmFyIGNvbWJpbmF0aW9ucyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbWJpbmF0aW9ucykoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5jb21iaW5hdGlvbnMgPSBjb21iaW5hdGlvbnM7XG52YXIgcGlja1JhbmRvbSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVBpY2tSYW5kb20pKHtcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5waWNrUmFuZG9tID0gcGlja1JhbmRvbTtcbnZhciByYW5kb21JbnQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSYW5kb21JbnQpKHtcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5yYW5kb21JbnQgPSByYW5kb21JbnQ7XG52YXIgTE4yID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTE4yKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5MTjIgPSBMTjI7XG52YXIgY2xvbmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDbG9uZSkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5jbG9uZSA9IGNsb25lO1xudmFyIGhhc051bWVyaWNWYWx1ZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUhhc051bWVyaWNWYWx1ZSkoe1xuICBpc051bWVyaWM6IGlzTnVtZXJpYyxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuaGFzTnVtZXJpY1ZhbHVlID0gaGFzTnVtZXJpY1ZhbHVlO1xudmFyIHR5cGVPZiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVR5cGVPZikoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy50eXBlT2YgPSB0eXBlT2Y7XG52YXIgc3RyaW5nID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3RyaW5nKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnN0cmluZyA9IHN0cmluZztcbnZhciBmcmFjdGlvbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUZyYWN0aW9uKSh7XG4gIEZyYWN0aW9uOiBGcmFjdGlvbixcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZnJhY3Rpb24gPSBmcmFjdGlvbjtcbnZhciB1bmFyeU1pbnVzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlVW5hcnlNaW51cykoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy51bmFyeU1pbnVzID0gdW5hcnlNaW51cztcbnZhciBhZGRTY2FsYXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVBZGRTY2FsYXIpKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuYWRkU2NhbGFyID0gYWRkU2NhbGFyO1xudmFyIGV4cCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUV4cCkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5leHAgPSBleHA7XG52YXIgbG9nMiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUxvZzIpKHtcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5sb2cyID0gbG9nMjtcbnZhciBzcXJ0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3FydCkoe1xuICBDb21wbGV4OiBDb21wbGV4LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNxcnQgPSBzcXJ0O1xudmFyIGNvbmogPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb25qKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNvbmogPSBjb25qO1xudmFyIGdldE1hdHJpeERhdGFUeXBlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlR2V0TWF0cml4RGF0YVR5cGUpKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZ2V0TWF0cml4RGF0YVR5cGUgPSBnZXRNYXRyaXhEYXRhVHlwZTtcbnZhciBtb2RlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTW9kZSkoe1xuICBpc05hTjogaXNOYU4sXG4gIGlzTnVtZXJpYzogaXNOdW1lcmljLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5tb2RlID0gbW9kZTtcbnZhciBwcmludCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVByaW50KSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnByaW50ID0gcHJpbnQ7XG52YXIgYWNvc2ggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVBY29zaCkoe1xuICBDb21wbGV4OiBDb21wbGV4LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmFjb3NoID0gYWNvc2g7XG52YXIgYWNzY2ggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVBY3NjaCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuYWNzY2ggPSBhY3NjaDtcbnZhciBhc2luaCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUFzaW5oKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmFzaW5oID0gYXNpbmg7XG52YXIgY29zID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29zKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNvcyA9IGNvcztcbnZhciBjc2MgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDc2MpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNzYyA9IGNzYztcbnZhciBzaW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTaW4pKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc2luID0gc2luO1xudmFyIGNvbWJpbmF0aW9uc1dpdGhSZXAgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb21iaW5hdGlvbnNXaXRoUmVwKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNvbWJpbmF0aW9uc1dpdGhSZXAgPSBjb21iaW5hdGlvbnNXaXRoUmVwO1xudmFyIHJhbmRvbSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVJhbmRvbSkoe1xuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnJhbmRvbSA9IHJhbmRvbTtcbnZhciBTUVJUMiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNRUlQyKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5TUVJUMiA9IFNRUlQyO1xudmFyIGlzTmVnYXRpdmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVJc05lZ2F0aXZlKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmlzTmVnYXRpdmUgPSBpc05lZ2F0aXZlO1xudmFyIFNwYXJzZU1hdHJpeCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNwYXJzZU1hdHJpeENsYXNzKSh7XG4gIE1hdHJpeDogTWF0cml4LFxuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLlNwYXJzZU1hdHJpeCA9IFNwYXJzZU1hdHJpeDtcbnZhciBtYXRyaXggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVNYXRyaXgpKHtcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBNYXRyaXg6IE1hdHJpeCxcbiAgU3BhcnNlTWF0cml4OiBTcGFyc2VNYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm1hdHJpeCA9IG1hdHJpeDtcbnZhciBjYnJ0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ2JydCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgRnJhY3Rpb246IEZyYWN0aW9uLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIGlzTmVnYXRpdmU6IGlzTmVnYXRpdmUsXG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWQsXG4gIHVuYXJ5TWludXM6IHVuYXJ5TWludXNcbn0pO1xuZXhwb3J0cy5jYnJ0ID0gY2JydDtcbnZhciBnY2QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVHY2QpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZ2NkID0gZ2NkO1xudmFyIG1vZCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU1vZCkoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm1vZCA9IG1vZDtcbnZhciBudGhSb290ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTnRoUm9vdCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMubnRoUm9vdCA9IG50aFJvb3Q7XG52YXIgeGdjZCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVhnY2QpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnhnY2QgPSB4Z2NkO1xudmFyIGJpdEFuZCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUJpdEFuZCkoe1xuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5iaXRBbmQgPSBiaXRBbmQ7XG52YXIgYml0WG9yID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQml0WG9yKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmJpdFhvciA9IGJpdFhvcjtcbnZhciBvciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU9yKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMub3IgPSBvcjtcbnZhciBjb25jYXQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb25jYXQpKHtcbiAgaXNJbnRlZ2VyOiBpc0ludGVnZXIsXG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5jb25jYXQgPSBjb25jYXQ7XG52YXIgZGlhZyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZURpYWcpKHtcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBTcGFyc2VNYXRyaXg6IFNwYXJzZU1hdHJpeCxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmRpYWcgPSBkaWFnO1xudmFyIGlkZW50aXR5ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlSWRlbnRpdHkpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgU3BhcnNlTWF0cml4OiBTcGFyc2VNYXRyaXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmlkZW50aXR5ID0gaWRlbnRpdHk7XG52YXIgb25lcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU9uZXMpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm9uZXMgPSBvbmVzO1xudmFyIHJlc2hhcGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSZXNoYXBlKSh7XG4gIGlzSW50ZWdlcjogaXNJbnRlZ2VyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMucmVzaGFwZSA9IHJlc2hhcGU7XG52YXIgc2l6ZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNpemUpKHtcbiAgbWF0cml4OiBtYXRyaXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc2l6ZSA9IHNpemU7XG52YXIgc3Vic2V0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3Vic2V0KSh7XG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5zdWJzZXQgPSBzdWJzZXQ7XG52YXIgemVyb3MgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVaZXJvcykoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuemVyb3MgPSB6ZXJvcztcbnZhciB0byA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVRvKSh7XG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy50byA9IHRvO1xudmFyIHJvdW5kID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUm91bmQpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkLFxuICB6ZXJvczogemVyb3Ncbn0pO1xuZXhwb3J0cy5yb3VuZCA9IHJvdW5kO1xudmFyIGxlZnRTaGlmdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUxlZnRTaGlmdCkoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZCxcbiAgemVyb3M6IHplcm9zXG59KTtcbmV4cG9ydHMubGVmdFNoaWZ0ID0gbGVmdFNoaWZ0O1xudmFyIHJpZ2h0TG9nU2hpZnQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSaWdodExvZ1NoaWZ0KSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkLFxuICB6ZXJvczogemVyb3Ncbn0pO1xuZXhwb3J0cy5yaWdodExvZ1NoaWZ0ID0gcmlnaHRMb2dTaGlmdDtcbnZhciBjb21wYXJlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29tcGFyZSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBGcmFjdGlvbjogRnJhY3Rpb24sXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuY29tcGFyZSA9IGNvbXBhcmU7XG52YXIgY29tcGFyZVRleHQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb21wYXJlVGV4dCkoe1xuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuY29tcGFyZVRleHQgPSBjb21wYXJlVGV4dDtcbnZhciBzbWFsbGVyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU21hbGxlcikoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNtYWxsZXIgPSBzbWFsbGVyO1xudmFyIGxhcmdlciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUxhcmdlcikoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmxhcmdlciA9IGxhcmdlcjtcbnZhciB1bmVxdWFsID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlVW5lcXVhbCkoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMudW5lcXVhbCA9IHVuZXF1YWw7XG52YXIgbWF4ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTWF4KSh7XG4gIGxhcmdlcjogbGFyZ2VyLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5tYXggPSBtYXg7XG52YXIgSW1tdXRhYmxlRGVuc2VNYXRyaXggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVJbW11dGFibGVEZW5zZU1hdHJpeENsYXNzKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgc21hbGxlcjogc21hbGxlclxufSk7XG5leHBvcnRzLkltbXV0YWJsZURlbnNlTWF0cml4ID0gSW1tdXRhYmxlRGVuc2VNYXRyaXg7XG52YXIgRmlib25hY2NpSGVhcCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUZpYm9uYWNjaUhlYXBDbGFzcykoe1xuICBsYXJnZXI6IGxhcmdlcixcbiAgc21hbGxlcjogc21hbGxlclxufSk7XG5leHBvcnRzLkZpYm9uYWNjaUhlYXAgPSBGaWJvbmFjY2lIZWFwO1xudmFyIHNwYXJzZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNwYXJzZSkoe1xuICBTcGFyc2VNYXRyaXg6IFNwYXJzZU1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc3BhcnNlID0gc3BhcnNlO1xudmFyIGFjb3RoID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQWNvdGgpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIENvbXBsZXg6IENvbXBsZXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuYWNvdGggPSBhY290aDtcbnZhciBhdGFuMiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUF0YW4yKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmF0YW4yID0gYXRhbjI7XG52YXIgc2VjID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU2VjKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5zZWMgPSBzZWM7XG52YXIgYWRkID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQWRkKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgU3BhcnNlTWF0cml4OiBTcGFyc2VNYXRyaXgsXG4gIGFkZFNjYWxhcjogYWRkU2NhbGFyLFxuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5hZGQgPSBhZGQ7XG52YXIgdHJhY2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVUcmFjZSkoe1xuICBhZGQ6IGFkZCxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnRyYWNlID0gdHJhY2U7XG52YXIgY29tcG9zaXRpb24gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb21wb3NpdGlvbikoe1xuICBhZGRTY2FsYXI6IGFkZFNjYWxhcixcbiAgY29tYmluYXRpb25zOiBjb21iaW5hdGlvbnMsXG4gIGlzSW50ZWdlcjogaXNJbnRlZ2VyLFxuICBpc05lZ2F0aXZlOiBpc05lZ2F0aXZlLFxuICBpc1Bvc2l0aXZlOiBpc1Bvc2l0aXZlLFxuICBsYXJnZXI6IGxhcmdlcixcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuY29tcG9zaXRpb24gPSBjb21wb3NpdGlvbjtcbnZhciBpc1plcm8gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVJc1plcm8pKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuaXNaZXJvID0gaXNaZXJvO1xudmFyIGFicyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUFicykoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5hYnMgPSBhYnM7XG52YXIgZmxvb3IgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVGbG9vcikoe1xuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIHJvdW5kOiByb3VuZCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZmxvb3IgPSBmbG9vcjtcbnZhciBtdWx0aXBseSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU11bHRpcGx5KSh7XG4gIGFkZFNjYWxhcjogYWRkU2NhbGFyLFxuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIG1hdHJpeDogbWF0cml4LFxuICBtdWx0aXBseVNjYWxhcjogbXVsdGlwbHlTY2FsYXIsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm11bHRpcGx5ID0gbXVsdGlwbHk7XG52YXIgZG90TXVsdGlwbHkgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVEb3RNdWx0aXBseSkoe1xuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIG1hdHJpeDogbWF0cml4LFxuICBtdWx0aXBseVNjYWxhcjogbXVsdGlwbHlTY2FsYXIsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmRvdE11bHRpcGx5ID0gZG90TXVsdGlwbHk7XG52YXIgcmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSZSkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5yZSA9IHJlO1xudmFyIGZsYXR0ZW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVGbGF0dGVuKSh7XG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5mbGF0dGVuID0gZmxhdHRlbjtcbnZhciByZXNpemUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSZXNpemUpKHtcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICBtYXRyaXg6IG1hdHJpeFxufSk7XG5leHBvcnRzLnJlc2l6ZSA9IHJlc2l6ZTtcbnZhciBzcXVlZXplID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3F1ZWV6ZSkoe1xuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc3F1ZWV6ZSA9IHNxdWVlemU7XG52YXIgcHJvZCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVByb2QpKHtcbiAgbXVsdGlwbHk6IG11bHRpcGx5LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5wcm9kID0gcHJvZDtcbnZhciBwb3cgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVQb3cpKHtcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICBmcmFjdGlvbjogZnJhY3Rpb24sXG4gIGlkZW50aXR5OiBpZGVudGl0eSxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgbnVtYmVyOiBudW1iZXIsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnBvdyA9IHBvdztcbnZhciBkb3RQb3cgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVEb3RQb3cpKHtcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIG1hdHJpeDogbWF0cml4LFxuICBwb3c6IHBvdyxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZG90UG93ID0gZG90UG93O1xudmFyIHJpZ2h0QXJpdGhTaGlmdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVJpZ2h0QXJpdGhTaGlmdCkoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZCxcbiAgemVyb3M6IHplcm9zXG59KTtcbmV4cG9ydHMucmlnaHRBcml0aFNoaWZ0ID0gcmlnaHRBcml0aFNoaWZ0O1xudmFyIGNvbXBhcmVOYXR1cmFsID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29tcGFyZU5hdHVyYWwpKHtcbiAgY29tcGFyZTogY29tcGFyZSxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuY29tcGFyZU5hdHVyYWwgPSBjb21wYXJlTmF0dXJhbDtcbnZhciBlcXVhbFRleHQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVFcXVhbFRleHQpKHtcbiAgY29tcGFyZVRleHQ6IGNvbXBhcmVUZXh0LFxuICBpc1plcm86IGlzWmVybyxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZXF1YWxUZXh0ID0gZXF1YWxUZXh0O1xudmFyIGxhcmdlckVxID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTGFyZ2VyRXEpKHtcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5sYXJnZXJFcSA9IGxhcmdlckVxO1xudmFyIHBhcnRpdGlvblNlbGVjdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVBhcnRpdGlvblNlbGVjdCkoe1xuICBjb21wYXJlOiBjb21wYXJlLFxuICBpc05hTjogaXNOYU4sXG4gIGlzTnVtZXJpYzogaXNOdW1lcmljLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5wYXJ0aXRpb25TZWxlY3QgPSBwYXJ0aXRpb25TZWxlY3Q7XG52YXIgbWluID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTWluKSh7XG4gIHNtYWxsZXI6IHNtYWxsZXIsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm1pbiA9IG1pbjtcbnZhciBTcGEgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTcGFDbGFzcykoe1xuICBGaWJvbmFjY2lIZWFwOiBGaWJvbmFjY2lIZWFwLFxuICBhZGRTY2FsYXI6IGFkZFNjYWxhcixcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG59KTtcbmV4cG9ydHMuU3BhID0gU3BhO1xudmFyIGFzZWNoID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQXNlY2gpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIENvbXBsZXg6IENvbXBsZXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuYXNlY2ggPSBhc2VjaDtcbnZhciB0YW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVUYW4pKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMudGFuID0gdGFuO1xudmFyIHNldFNpemUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTZXRTaXplKSh7XG4gIGNvbXBhcmVOYXR1cmFsOiBjb21wYXJlTmF0dXJhbCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc2V0U2l6ZSA9IHNldFNpemU7XG52YXIgbm9ybSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU5vcm0pKHtcbiAgYWJzOiBhYnMsXG4gIGFkZDogYWRkLFxuICBjb25qOiBjb25qLFxuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIGxhcmdlcjogbGFyZ2VyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgbXVsdGlwbHk6IG11bHRpcGx5LFxuICBwb3c6IHBvdyxcbiAgc21hbGxlcjogc21hbGxlcixcbiAgc3FydDogc3FydCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMubm9ybSA9IG5vcm07XG52YXIgcXVhbnRpbGVTZXEgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVRdWFudGlsZVNlcSkoe1xuICBhZGQ6IGFkZCxcbiAgY29tcGFyZTogY29tcGFyZSxcbiAgbXVsdGlwbHk6IG11bHRpcGx5LFxuICBwYXJ0aXRpb25TZWxlY3Q6IHBhcnRpdGlvblNlbGVjdCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMucXVhbnRpbGVTZXEgPSBxdWFudGlsZVNlcTtcbnZhciBnYW1tYSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUdhbW1hKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBDb21wbGV4OiBDb21wbGV4LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIG11bHRpcGx5U2NhbGFyOiBtdWx0aXBseVNjYWxhcixcbiAgcG93OiBwb3csXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmdhbW1hID0gZ2FtbWE7XG52YXIgYmlnbnVtYmVyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQmlnbnVtYmVyKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5iaWdudW1iZXIgPSBiaWdudW1iZXI7XG52YXIgbGNtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTGNtKSh7XG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmxjbSA9IGxjbTtcbnZhciBiaXRPciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUJpdE9yKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuYml0T3IgPSBiaXRPcjtcbnZhciBrcm9uID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlS3Jvbikoe1xuICBtYXRyaXg6IG1hdHJpeCxcbiAgbXVsdGlwbHlTY2FsYXI6IG11bHRpcGx5U2NhbGFyLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5rcm9uID0ga3JvbjtcbnZhciB0cmFuc3Bvc2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVUcmFuc3Bvc2UpKHtcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnRyYW5zcG9zZSA9IHRyYW5zcG9zZTtcbnZhciBudW1lcmljID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTnVtZXJpYykoe1xuICBiaWdudW1iZXI6IGJpZ251bWJlcixcbiAgZnJhY3Rpb246IGZyYWN0aW9uLFxuICBudW1iZXI6IG51bWJlclxufSk7XG5leHBvcnRzLm51bWVyaWMgPSBudW1lcmljO1xudmFyIGFuZCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUFuZCkoe1xuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIG1hdHJpeDogbWF0cml4LFxuICBub3Q6IG5vdCxcbiAgdHlwZWQ6IHR5cGVkLFxuICB6ZXJvczogemVyb3Ncbn0pO1xuZXhwb3J0cy5hbmQgPSBhbmQ7XG52YXIgc21hbGxlckVxID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU21hbGxlckVxKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc21hbGxlckVxID0gc21hbGxlckVxO1xudmFyIHNvcnQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTb3J0KSh7XG4gIGNvbXBhcmU6IGNvbXBhcmUsXG4gIGNvbXBhcmVOYXR1cmFsOiBjb21wYXJlTmF0dXJhbCxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNvcnQgPSBzb3J0O1xudmFyIGNvdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvdCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuY290ID0gY290O1xudmFyIGRvdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZURvdCkoe1xuICBhZGQ6IGFkZCxcbiAgbXVsdGlwbHk6IG11bHRpcGx5LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5kb3QgPSBkb3Q7XG52YXIgc3VtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3VtKSh7XG4gIGJpZ251bWJlcjogYmlnbnVtYmVyLFxuICBmcmFjdGlvbjogZnJhY3Rpb24sXG4gIGFkZDogYWRkLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnN1bSA9IHN1bTtcbnZhciBmYWN0b3JpYWwgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVGYWN0b3JpYWwpKHtcbiAgZ2FtbWE6IGdhbW1hLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5mYWN0b3JpYWwgPSBmYWN0b3JpYWw7XG52YXIgcGVybXV0YXRpb25zID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUGVybXV0YXRpb25zKSh7XG4gIGZhY3RvcmlhbDogZmFjdG9yaWFsLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5wZXJtdXRhdGlvbnMgPSBwZXJtdXRhdGlvbnM7XG52YXIgY2VpbCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNlaWwpKHtcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICByb3VuZDogcm91bmQsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNlaWwgPSBjZWlsO1xudmFyIHN1YnRyYWN0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3VidHJhY3QpKHtcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBhZGRTY2FsYXI6IGFkZFNjYWxhcixcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkLFxuICB1bmFyeU1pbnVzOiB1bmFyeU1pbnVzXG59KTtcbmV4cG9ydHMuc3VidHJhY3QgPSBzdWJ0cmFjdDtcbnZhciBjcm9zcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNyb3NzKSh7XG4gIG1hdHJpeDogbWF0cml4LFxuICBtdWx0aXBseTogbXVsdGlwbHksXG4gIHN1YnRyYWN0OiBzdWJ0cmFjdCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuY3Jvc3MgPSBjcm9zcztcbnZhciBjdHJhbnNwb3NlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ3RyYW5zcG9zZSkoe1xuICBjb25qOiBjb25qLFxuICB0cmFuc3Bvc2U6IHRyYW5zcG9zZSxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuY3RyYW5zcG9zZSA9IGN0cmFuc3Bvc2U7XG52YXIgZXF1YWwgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVFcXVhbCkoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmVxdWFsID0gZXF1YWw7XG52YXIgSW5kZXggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVJbmRleENsYXNzKSh7XG4gIEltbXV0YWJsZURlbnNlTWF0cml4OiBJbW11dGFibGVEZW5zZU1hdHJpeFxufSk7XG5leHBvcnRzLkluZGV4ID0gSW5kZXg7XG52YXIgc2V0Q2FydGVzaWFuID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU2V0Q2FydGVzaWFuKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgSW5kZXg6IEluZGV4LFxuICBjb21wYXJlTmF0dXJhbDogY29tcGFyZU5hdHVyYWwsXG4gIHNpemU6IHNpemUsXG4gIHN1YnNldDogc3Vic2V0LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5zZXRDYXJ0ZXNpYW4gPSBzZXRDYXJ0ZXNpYW47XG52YXIgc2V0RGlzdGluY3QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTZXREaXN0aW5jdCkoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIEluZGV4OiBJbmRleCxcbiAgY29tcGFyZU5hdHVyYWw6IGNvbXBhcmVOYXR1cmFsLFxuICBzaXplOiBzaXplLFxuICBzdWJzZXQ6IHN1YnNldCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc2V0RGlzdGluY3QgPSBzZXREaXN0aW5jdDtcbnZhciBzZXRJc1N1YnNldCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNldElzU3Vic2V0KSh7XG4gIEluZGV4OiBJbmRleCxcbiAgY29tcGFyZU5hdHVyYWw6IGNvbXBhcmVOYXR1cmFsLFxuICBzaXplOiBzaXplLFxuICBzdWJzZXQ6IHN1YnNldCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc2V0SXNTdWJzZXQgPSBzZXRJc1N1YnNldDtcbnZhciBzZXRQb3dlcnNldCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNldFBvd2Vyc2V0KSh7XG4gIEluZGV4OiBJbmRleCxcbiAgY29tcGFyZU5hdHVyYWw6IGNvbXBhcmVOYXR1cmFsLFxuICBzaXplOiBzaXplLFxuICBzdWJzZXQ6IHN1YnNldCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc2V0UG93ZXJzZXQgPSBzZXRQb3dlcnNldDtcbnZhciBpbmRleCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUluZGV4KSh7XG4gIEluZGV4OiBJbmRleCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuaW5kZXggPSBpbmRleDtcbnZhciBmaXggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVGaXgpKHtcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgY2VpbDogY2VpbCxcbiAgZmxvb3I6IGZsb29yLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5maXggPSBmaXg7XG52YXIgcmFuZ2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSYW5nZSkoe1xuICBiaWdudW1iZXI6IGJpZ251bWJlcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgbGFyZ2VyOiBsYXJnZXIsXG4gIGxhcmdlckVxOiBsYXJnZXJFcSxcbiAgc21hbGxlcjogc21hbGxlcixcbiAgc21hbGxlckVxOiBzbWFsbGVyRXEsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnJhbmdlID0gcmFuZ2U7XG52YXIgZGl2aWRlU2NhbGFyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRGl2aWRlU2NhbGFyKSh7XG4gIG51bWVyaWM6IG51bWVyaWMsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmRpdmlkZVNjYWxhciA9IGRpdmlkZVNjYWxhcjtcbnZhciBudGhSb290cyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU50aFJvb3RzKSh7XG4gIENvbXBsZXg6IENvbXBsZXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgZGl2aWRlU2NhbGFyOiBkaXZpZGVTY2FsYXIsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm50aFJvb3RzID0gbnRoUm9vdHM7XG52YXIgbHNvbHZlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTHNvbHZlKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgZGl2aWRlU2NhbGFyOiBkaXZpZGVTY2FsYXIsXG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIG11bHRpcGx5U2NhbGFyOiBtdWx0aXBseVNjYWxhcixcbiAgc3VidHJhY3Q6IHN1YnRyYWN0LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5sc29sdmUgPSBsc29sdmU7XG52YXIgZGVlcEVxdWFsID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRGVlcEVxdWFsKSh7XG4gIGVxdWFsOiBlcXVhbCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZGVlcEVxdWFsID0gZGVlcEVxdWFsO1xudmFyIHNldERpZmZlcmVuY2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTZXREaWZmZXJlbmNlKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgSW5kZXg6IEluZGV4LFxuICBjb21wYXJlTmF0dXJhbDogY29tcGFyZU5hdHVyYWwsXG4gIHNpemU6IHNpemUsXG4gIHN1YnNldDogc3Vic2V0LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5zZXREaWZmZXJlbmNlID0gc2V0RGlmZmVyZW5jZTtcbnZhciBzZXRNdWx0aXBsaWNpdHkgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTZXRNdWx0aXBsaWNpdHkpKHtcbiAgSW5kZXg6IEluZGV4LFxuICBjb21wYXJlTmF0dXJhbDogY29tcGFyZU5hdHVyYWwsXG4gIHNpemU6IHNpemUsXG4gIHN1YnNldDogc3Vic2V0LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5zZXRNdWx0aXBsaWNpdHkgPSBzZXRNdWx0aXBsaWNpdHk7XG52YXIgaHlwb3QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVIeXBvdCkoe1xuICBhYnM6IGFicyxcbiAgYWRkU2NhbGFyOiBhZGRTY2FsYXIsXG4gIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICBpc1Bvc2l0aXZlOiBpc1Bvc2l0aXZlLFxuICBtdWx0aXBseVNjYWxhcjogbXVsdGlwbHlTY2FsYXIsXG4gIHNtYWxsZXI6IHNtYWxsZXIsXG4gIHNxcnQ6IHNxcnQsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmh5cG90ID0gaHlwb3Q7XG52YXIgbHVwID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTHVwKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgU3BhOiBTcGEsXG4gIFNwYXJzZU1hdHJpeDogU3BhcnNlTWF0cml4LFxuICBhYnM6IGFicyxcbiAgYWRkU2NhbGFyOiBhZGRTY2FsYXIsXG4gIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIGxhcmdlcjogbGFyZ2VyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgbXVsdGlwbHlTY2FsYXI6IG11bHRpcGx5U2NhbGFyLFxuICBzdWJ0cmFjdDogc3VidHJhY3QsXG4gIHR5cGVkOiB0eXBlZCxcbiAgdW5hcnlNaW51czogdW5hcnlNaW51c1xufSk7XG5leHBvcnRzLmx1cCA9IGx1cDtcbnZhciBzbHUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTbHUpKHtcbiAgU3BhcnNlTWF0cml4OiBTcGFyc2VNYXRyaXgsXG4gIGFiczogYWJzLFxuICBhZGQ6IGFkZCxcbiAgZGl2aWRlU2NhbGFyOiBkaXZpZGVTY2FsYXIsXG4gIGxhcmdlcjogbGFyZ2VyLFxuICBsYXJnZXJFcTogbGFyZ2VyRXEsXG4gIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgc3VidHJhY3Q6IHN1YnRyYWN0LFxuICB0cmFuc3Bvc2U6IHRyYW5zcG9zZSxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc2x1ID0gc2x1O1xudmFyIGRldCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZURldCkoe1xuICBsdXA6IGx1cCxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgc3VidHJhY3Q6IHN1YnRyYWN0LFxuICB0eXBlZDogdHlwZWQsXG4gIHVuYXJ5TWludXM6IHVuYXJ5TWludXNcbn0pO1xuZXhwb3J0cy5kZXQgPSBkZXQ7XG52YXIgZGlzdGFuY2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVEaXN0YW5jZSkoe1xuICBhYnM6IGFicyxcbiAgYWRkU2NhbGFyOiBhZGRTY2FsYXIsXG4gIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICBtdWx0aXBseVNjYWxhcjogbXVsdGlwbHlTY2FsYXIsXG4gIHNxcnQ6IHNxcnQsXG4gIHN1YnRyYWN0OiBzdWJ0cmFjdCxcbiAgdHlwZWQ6IHR5cGVkLFxuICB1bmFyeU1pbnVzOiB1bmFyeU1pbnVzXG59KTtcbmV4cG9ydHMuZGlzdGFuY2UgPSBkaXN0YW5jZTtcbnZhciBzdGlybGluZ1MyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3RpcmxpbmdTMikoe1xuICBhZGRTY2FsYXI6IGFkZFNjYWxhcixcbiAgY29tYmluYXRpb25zOiBjb21iaW5hdGlvbnMsXG4gIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICBmYWN0b3JpYWw6IGZhY3RvcmlhbCxcbiAgaXNJbnRlZ2VyOiBpc0ludGVnZXIsXG4gIGlzTmVnYXRpdmU6IGlzTmVnYXRpdmUsXG4gIGxhcmdlcjogbGFyZ2VyLFxuICBtdWx0aXBseVNjYWxhcjogbXVsdGlwbHlTY2FsYXIsXG4gIHBvdzogcG93LFxuICBzdWJ0cmFjdDogc3VidHJhY3QsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnN0aXJsaW5nUzIgPSBzdGlybGluZ1MyO1xudmFyIGNhdGFsYW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDYXRhbGFuKSh7XG4gIGFkZFNjYWxhcjogYWRkU2NhbGFyLFxuICBjb21iaW5hdGlvbnM6IGNvbWJpbmF0aW9ucyxcbiAgZGl2aWRlU2NhbGFyOiBkaXZpZGVTY2FsYXIsXG4gIGlzSW50ZWdlcjogaXNJbnRlZ2VyLFxuICBpc05lZ2F0aXZlOiBpc05lZ2F0aXZlLFxuICBtdWx0aXBseVNjYWxhcjogbXVsdGlwbHlTY2FsYXIsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNhdGFsYW4gPSBjYXRhbGFuO1xudmFyIHhvciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVhvcikoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy54b3IgPSB4b3I7XG52YXIgcm93ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUm93KSh7XG4gIEluZGV4OiBJbmRleCxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHJhbmdlOiByYW5nZSxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMucm93ID0gcm93O1xudmFyIGRvdERpdmlkZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZURvdERpdmlkZSkoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5kb3REaXZpZGUgPSBkb3REaXZpZGU7XG52YXIgVW5pdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVVuaXRDbGFzcykoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgRnJhY3Rpb246IEZyYWN0aW9uLFxuICBhYnM6IGFicyxcbiAgYWRkU2NhbGFyOiBhZGRTY2FsYXIsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgZGl2aWRlU2NhbGFyOiBkaXZpZGVTY2FsYXIsXG4gIGVxdWFsOiBlcXVhbCxcbiAgZml4OiBmaXgsXG4gIGZvcm1hdDogZm9ybWF0LFxuICBpc051bWVyaWM6IGlzTnVtZXJpYyxcbiAgbXVsdGlwbHlTY2FsYXI6IG11bHRpcGx5U2NhbGFyLFxuICBudW1iZXI6IG51bWJlcixcbiAgcG93OiBwb3csXG4gIHJvdW5kOiByb3VuZCxcbiAgc3VidHJhY3Q6IHN1YnRyYWN0XG59KTtcbmV4cG9ydHMuVW5pdCA9IFVuaXQ7XG52YXIgY3JlYXRlVW5pdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNyZWF0ZVVuaXQpKHtcbiAgVW5pdDogVW5pdCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuY3JlYXRlVW5pdCA9IGNyZWF0ZVVuaXQ7XG52YXIgc2V0U3ltRGlmZmVyZW5jZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNldFN5bURpZmZlcmVuY2UpKHtcbiAgSW5kZXg6IEluZGV4LFxuICBjb25jYXQ6IGNvbmNhdCxcbiAgc2V0RGlmZmVyZW5jZTogc2V0RGlmZmVyZW5jZSxcbiAgc2l6ZTogc2l6ZSxcbiAgc3Vic2V0OiBzdWJzZXQsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNldFN5bURpZmZlcmVuY2UgPSBzZXRTeW1EaWZmZXJlbmNlO1xudmFyIHFyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUXIpKHtcbiAgYWRkU2NhbGFyOiBhZGRTY2FsYXIsXG4gIGNvbXBsZXg6IGNvbXBsZXgsXG4gIGNvbmo6IGNvbmosXG4gIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICBlcXVhbDogZXF1YWwsXG4gIGlkZW50aXR5OiBpZGVudGl0eSxcbiAgaXNaZXJvOiBpc1plcm8sXG4gIG1hdHJpeDogbWF0cml4LFxuICBtdWx0aXBseVNjYWxhcjogbXVsdGlwbHlTY2FsYXIsXG4gIHNpZ246IHNpZ24sXG4gIHNxcnQ6IHNxcnQsXG4gIHN1YnRyYWN0OiBzdWJ0cmFjdCxcbiAgdHlwZWQ6IHR5cGVkLFxuICB1bmFyeU1pbnVzOiB1bmFyeU1pbnVzLFxuICB6ZXJvczogemVyb3Ncbn0pO1xuZXhwb3J0cy5xciA9IHFyO1xudmFyIGludiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUludikoe1xuICBhYnM6IGFicyxcbiAgYWRkU2NhbGFyOiBhZGRTY2FsYXIsXG4gIGRldDogZGV0LFxuICBkaXZpZGVTY2FsYXI6IGRpdmlkZVNjYWxhcixcbiAgaWRlbnRpdHk6IGlkZW50aXR5LFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgbXVsdGlwbHk6IG11bHRpcGx5LFxuICB0eXBlZDogdHlwZWQsXG4gIHVuYXJ5TWludXM6IHVuYXJ5TWludXNcbn0pO1xuZXhwb3J0cy5pbnYgPSBpbnY7XG52YXIgZXhwbSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUV4cG0pKHtcbiAgYWJzOiBhYnMsXG4gIGFkZDogYWRkLFxuICBpZGVudGl0eTogaWRlbnRpdHksXG4gIGludjogaW52LFxuICBtdWx0aXBseTogbXVsdGlwbHksXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmV4cG0gPSBleHBtO1xudmFyIGRpdmlkZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZURpdmlkZSkoe1xuICBkaXZpZGVTY2FsYXI6IGRpdmlkZVNjYWxhcixcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBpbnY6IGludixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZGl2aWRlID0gZGl2aWRlO1xudmFyIG1lYW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVNZWFuKSh7XG4gIGFkZDogYWRkLFxuICBkaXZpZGU6IGRpdmlkZSxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMubWVhbiA9IG1lYW47XG52YXIgdmFyaWFuY2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVWYXJpYW5jZSkoe1xuICBhZGQ6IGFkZCxcbiAgYXBwbHk6IGFwcGx5LFxuICBkaXZpZGU6IGRpdmlkZSxcbiAgaXNOYU46IGlzTmFOLFxuICBtdWx0aXBseTogbXVsdGlwbHksXG4gIHN1YnRyYWN0OiBzdWJ0cmFjdCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMudmFyaWFuY2UgPSB2YXJpYW5jZTtcbnZhciBzdGQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTdGQpKHtcbiAgc3FydDogc3FydCxcbiAgdHlwZWQ6IHR5cGVkLFxuICB2YXJpYW5jZTogdmFyaWFuY2Vcbn0pO1xuZXhwb3J0cy5zdGQgPSBzdGQ7XG52YXIgbXVsdGlub21pYWwgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVNdWx0aW5vbWlhbCkoe1xuICBhZGQ6IGFkZCxcbiAgZGl2aWRlOiBkaXZpZGUsXG4gIGZhY3RvcmlhbDogZmFjdG9yaWFsLFxuICBpc0ludGVnZXI6IGlzSW50ZWdlcixcbiAgaXNQb3NpdGl2ZTogaXNQb3NpdGl2ZSxcbiAgbXVsdGlwbHk6IG11bHRpcGx5LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5tdWx0aW5vbWlhbCA9IG11bHRpbm9taWFsO1xudmFyIGF0b21pY01hc3MgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVBdG9taWNNYXNzKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5hdG9taWNNYXNzID0gYXRvbWljTWFzcztcbnZhciBib2hyTWFnbmV0b24gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVCb2hyTWFnbmV0b24pKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmJvaHJNYWduZXRvbiA9IGJvaHJNYWduZXRvbjtcbnZhciBib2x0em1hbm4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVCb2x0em1hbm4pKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmJvbHR6bWFubiA9IGJvbHR6bWFubjtcbnZhciBjb25kdWN0YW5jZVF1YW50dW0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb25kdWN0YW5jZVF1YW50dW0pKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmNvbmR1Y3RhbmNlUXVhbnR1bSA9IGNvbmR1Y3RhbmNlUXVhbnR1bTtcbnZhciBkZXV0ZXJvbk1hc3MgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVEZXV0ZXJvbk1hc3MpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmRldXRlcm9uTWFzcyA9IGRldXRlcm9uTWFzcztcbnZhciBlbGVjdHJvbk1hc3MgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVFbGVjdHJvbk1hc3MpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmVsZWN0cm9uTWFzcyA9IGVsZWN0cm9uTWFzcztcbnZhciBmYXJhZGF5ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRmFyYWRheSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuZmFyYWRheSA9IGZhcmFkYXk7XG52YXIgZmlyc3RSYWRpYXRpb24gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVGaXJzdFJhZGlhdGlvbikoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuZmlyc3RSYWRpYXRpb24gPSBmaXJzdFJhZGlhdGlvbjtcbnZhciBncmF2aXRhdGlvbkNvbnN0YW50ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlR3Jhdml0YXRpb25Db25zdGFudCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuZ3Jhdml0YXRpb25Db25zdGFudCA9IGdyYXZpdGF0aW9uQ29uc3RhbnQ7XG52YXIgaGFydHJlZUVuZXJneSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUhhcnRyZWVFbmVyZ3kpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmhhcnRyZWVFbmVyZ3kgPSBoYXJ0cmVlRW5lcmd5O1xudmFyIGtsaXR6aW5nID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlS2xpdHppbmcpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmtsaXR6aW5nID0ga2xpdHppbmc7XG52YXIgbWFnbmV0aWNDb25zdGFudCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU1hZ25ldGljQ29uc3RhbnQpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLm1hZ25ldGljQ29uc3RhbnQgPSBtYWduZXRpY0NvbnN0YW50O1xudmFyIG1vbGFyTWFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU1vbGFyTWFzcykoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMubW9sYXJNYXNzID0gbW9sYXJNYXNzO1xudmFyIG1vbGFyUGxhbmNrQ29uc3RhbnQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVNb2xhclBsYW5ja0NvbnN0YW50KSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5tb2xhclBsYW5ja0NvbnN0YW50ID0gbW9sYXJQbGFuY2tDb25zdGFudDtcbnZhciBuZXV0cm9uTWFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU5ldXRyb25NYXNzKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5uZXV0cm9uTWFzcyA9IG5ldXRyb25NYXNzO1xudmFyIHBsYW5ja0NoYXJnZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVBsYW5ja0NoYXJnZSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMucGxhbmNrQ2hhcmdlID0gcGxhbmNrQ2hhcmdlO1xudmFyIHBsYW5ja0xlbmd0aCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVBsYW5ja0xlbmd0aCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMucGxhbmNrTGVuZ3RoID0gcGxhbmNrTGVuZ3RoO1xudmFyIHBsYW5ja1RlbXBlcmF0dXJlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUGxhbmNrVGVtcGVyYXR1cmUpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLnBsYW5ja1RlbXBlcmF0dXJlID0gcGxhbmNrVGVtcGVyYXR1cmU7XG52YXIgcHJvdG9uTWFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVByb3Rvbk1hc3MpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLnByb3Rvbk1hc3MgPSBwcm90b25NYXNzO1xudmFyIHJlZHVjZWRQbGFuY2tDb25zdGFudCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVJlZHVjZWRQbGFuY2tDb25zdGFudCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMucmVkdWNlZFBsYW5ja0NvbnN0YW50ID0gcmVkdWNlZFBsYW5ja0NvbnN0YW50O1xudmFyIHNlY29uZFJhZGlhdGlvbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNlY29uZFJhZGlhdGlvbikoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuc2Vjb25kUmFkaWF0aW9uID0gc2Vjb25kUmFkaWF0aW9uO1xudmFyIHN0ZWZhbkJvbHR6bWFubiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVN0ZWZhbkJvbHR6bWFubikoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuc3RlZmFuQm9sdHptYW5uID0gc3RlZmFuQm9sdHptYW5uO1xudmFyIHZhY3V1bUltcGVkYW5jZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVZhY3V1bUltcGVkYW5jZSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMudmFjdXVtSW1wZWRhbmNlID0gdmFjdXVtSW1wZWRhbmNlO1xudmFyIGNvbHVtbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbHVtbikoe1xuICBJbmRleDogSW5kZXgsXG4gIG1hdHJpeDogbWF0cml4LFxuICByYW5nZTogcmFuZ2UsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNvbHVtbiA9IGNvbHVtbjtcbnZhciB1c29sdmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVVc29sdmUpKHtcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBkaXZpZGVTY2FsYXI6IGRpdmlkZVNjYWxhcixcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgbXVsdGlwbHlTY2FsYXI6IG11bHRpcGx5U2NhbGFyLFxuICBzdWJ0cmFjdDogc3VidHJhY3QsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnVzb2x2ZSA9IHVzb2x2ZTtcbnZhciBzZXRJbnRlcnNlY3QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTZXRJbnRlcnNlY3QpKHtcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBJbmRleDogSW5kZXgsXG4gIGNvbXBhcmVOYXR1cmFsOiBjb21wYXJlTmF0dXJhbCxcbiAgc2l6ZTogc2l6ZSxcbiAgc3Vic2V0OiBzdWJzZXQsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNldEludGVyc2VjdCA9IHNldEludGVyc2VjdDtcbnZhciBsdXNvbHZlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTHVzb2x2ZSkoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGxzb2x2ZTogbHNvbHZlLFxuICBsdXA6IGx1cCxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHNsdTogc2x1LFxuICB0eXBlZDogdHlwZWQsXG4gIHVzb2x2ZTogdXNvbHZlXG59KTtcbmV4cG9ydHMubHVzb2x2ZSA9IGx1c29sdmU7XG52YXIgZWlncyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUVpZ3MpKHtcbiAgYWJzOiBhYnMsXG4gIGFkZDogYWRkLFxuICBhZGRTY2FsYXI6IGFkZFNjYWxhcixcbiAgYXRhbjogYXRhbixcbiAgYmlnbnVtYmVyOiBiaWdudW1iZXIsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgY29zOiBjb3MsXG4gIGVxdWFsOiBlcXVhbCxcbiAgaW52OiBpbnYsXG4gIG1hdHJpeDogbWF0cml4LFxuICBtdWx0aXBseTogbXVsdGlwbHksXG4gIG11bHRpcGx5U2NhbGFyOiBtdWx0aXBseVNjYWxhcixcbiAgc2luOiBzaW4sXG4gIHN1YnRyYWN0OiBzdWJ0cmFjdCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZWlncyA9IGVpZ3M7XG52YXIgaW50ZXJzZWN0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlSW50ZXJzZWN0KSh7XG4gIGFiczogYWJzLFxuICBhZGQ6IGFkZCxcbiAgYWRkU2NhbGFyOiBhZGRTY2FsYXIsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgZGl2aWRlU2NhbGFyOiBkaXZpZGVTY2FsYXIsXG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgbXVsdGlwbHlTY2FsYXI6IG11bHRpcGx5U2NhbGFyLFxuICBzbWFsbGVyOiBzbWFsbGVyLFxuICBzdWJ0cmFjdDogc3VidHJhY3QsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmludGVyc2VjdCA9IGludGVyc2VjdDtcbnZhciBiZWxsTnVtYmVycyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUJlbGxOdW1iZXJzKSh7XG4gIGFkZFNjYWxhcjogYWRkU2NhbGFyLFxuICBpc0ludGVnZXI6IGlzSW50ZWdlcixcbiAgaXNOZWdhdGl2ZTogaXNOZWdhdGl2ZSxcbiAgc3RpcmxpbmdTMjogc3RpcmxpbmdTMixcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuYmVsbE51bWJlcnMgPSBiZWxsTnVtYmVycztcbnZhciBhdm9nYWRybyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUF2b2dhZHJvKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5hdm9nYWRybyA9IGF2b2dhZHJvO1xudmFyIGNsYXNzaWNhbEVsZWN0cm9uUmFkaXVzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ2xhc3NpY2FsRWxlY3Ryb25SYWRpdXMpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmNsYXNzaWNhbEVsZWN0cm9uUmFkaXVzID0gY2xhc3NpY2FsRWxlY3Ryb25SYWRpdXM7XG52YXIgZWxlY3RyaWNDb25zdGFudCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUVsZWN0cmljQ29uc3RhbnQpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmVsZWN0cmljQ29uc3RhbnQgPSBlbGVjdHJpY0NvbnN0YW50O1xudmFyIGZlcm1pQ291cGxpbmcgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVGZXJtaUNvdXBsaW5nKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5mZXJtaUNvdXBsaW5nID0gZmVybWlDb3VwbGluZztcbnZhciBncmF2aXR5ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlR3Jhdml0eSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuZ3Jhdml0eSA9IGdyYXZpdHk7XG52YXIgbG9zY2htaWR0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTG9zY2htaWR0KSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5sb3NjaG1pZHQgPSBsb3NjaG1pZHQ7XG52YXIgbW9sYXJNYXNzQzEyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTW9sYXJNYXNzQzEyKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5tb2xhck1hc3NDMTIgPSBtb2xhck1hc3NDMTI7XG52YXIgbnVjbGVhck1hZ25ldG9uID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTnVjbGVhck1hZ25ldG9uKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5udWNsZWFyTWFnbmV0b24gPSBudWNsZWFyTWFnbmV0b247XG52YXIgcGxhbmNrTWFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVBsYW5ja01hc3MpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLnBsYW5ja01hc3MgPSBwbGFuY2tNYXNzO1xudmFyIHF1YW50dW1PZkNpcmN1bGF0aW9uID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUXVhbnR1bU9mQ2lyY3VsYXRpb24pKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLnF1YW50dW1PZkNpcmN1bGF0aW9uID0gcXVhbnR1bU9mQ2lyY3VsYXRpb247XG52YXIgc3BlZWRPZkxpZ2h0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3BlZWRPZkxpZ2h0KSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5zcGVlZE9mTGlnaHQgPSBzcGVlZE9mTGlnaHQ7XG52YXIgd2llbkRpc3BsYWNlbWVudCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVdpZW5EaXNwbGFjZW1lbnQpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLndpZW5EaXNwbGFjZW1lbnQgPSB3aWVuRGlzcGxhY2VtZW50O1xudmFyIGxvZyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUxvZykoe1xuICBDb21wbGV4OiBDb21wbGV4LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5sb2cgPSBsb2c7XG52YXIgdW5pdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVVuaXRGdW5jdGlvbikoe1xuICBVbml0OiBVbml0LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy51bml0ID0gdW5pdDtcbnZhciBzcXJ0bSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNxcnRtKSh7XG4gIGFiczogYWJzLFxuICBhZGQ6IGFkZCxcbiAgaWRlbnRpdHk6IGlkZW50aXR5LFxuICBpbnY6IGludixcbiAgbWF4OiBtYXgsXG4gIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgc2l6ZTogc2l6ZSxcbiAgc3FydDogc3FydCxcbiAgc3VidHJhY3Q6IHN1YnRyYWN0LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5zcXJ0bSA9IHNxcnRtO1xudmFyIGtsZGl2ZXJnZW5jZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUtsZGl2ZXJnZW5jZSkoe1xuICBkaXZpZGU6IGRpdmlkZSxcbiAgZG90RGl2aWRlOiBkb3REaXZpZGUsXG4gIGlzTnVtZXJpYzogaXNOdW1lcmljLFxuICBsb2c6IGxvZyxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgc3VtOiBzdW0sXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmtsZGl2ZXJnZW5jZSA9IGtsZGl2ZXJnZW5jZTtcbnZhciBib2hyUmFkaXVzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQm9oclJhZGl1cykoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuYm9oclJhZGl1cyA9IGJvaHJSYWRpdXM7XG52YXIgZWxlbWVudGFyeUNoYXJnZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUVsZW1lbnRhcnlDaGFyZ2UpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmVsZW1lbnRhcnlDaGFyZ2UgPSBlbGVtZW50YXJ5Q2hhcmdlO1xudmFyIGludmVyc2VDb25kdWN0YW5jZVF1YW50dW0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVJbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5pbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtID0gaW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bTtcbnZhciBtb2xhclZvbHVtZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU1vbGFyVm9sdW1lKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5tb2xhclZvbHVtZSA9IG1vbGFyVm9sdW1lO1xudmFyIHBsYW5ja1RpbWUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVQbGFuY2tUaW1lKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5wbGFuY2tUaW1lID0gcGxhbmNrVGltZTtcbnZhciB0aG9tc29uQ3Jvc3NTZWN0aW9uID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlVGhvbXNvbkNyb3NzU2VjdGlvbikoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMudGhvbXNvbkNyb3NzU2VjdGlvbiA9IHRob21zb25Dcm9zc1NlY3Rpb247XG52YXIgbG9nMXAgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVMb2cxcCkoe1xuICBDb21wbGV4OiBDb21wbGV4LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICBsb2c6IGxvZyxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMubG9nMXAgPSBsb2cxcDtcbnZhciBtZWRpYW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVNZWRpYW4pKHtcbiAgYWRkOiBhZGQsXG4gIGNvbXBhcmU6IGNvbXBhcmUsXG4gIGRpdmlkZTogZGl2aWRlLFxuICBwYXJ0aXRpb25TZWxlY3Q6IHBhcnRpdGlvblNlbGVjdCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMubWVkaWFuID0gbWVkaWFuO1xudmFyIGdhc0NvbnN0YW50ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlR2FzQ29uc3RhbnQpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmdhc0NvbnN0YW50ID0gZ2FzQ29uc3RhbnQ7XG52YXIgcGxhbmNrQ29uc3RhbnQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVQbGFuY2tDb25zdGFudCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMucGxhbmNrQ29uc3RhbnQgPSBwbGFuY2tDb25zdGFudDtcbnZhciBzZXRVbmlvbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNldFVuaW9uKSh7XG4gIEluZGV4OiBJbmRleCxcbiAgY29uY2F0OiBjb25jYXQsXG4gIHNldEludGVyc2VjdDogc2V0SW50ZXJzZWN0LFxuICBzZXRTeW1EaWZmZXJlbmNlOiBzZXRTeW1EaWZmZXJlbmNlLFxuICBzaXplOiBzaXplLFxuICBzdWJzZXQ6IHN1YnNldCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc2V0VW5pb24gPSBzZXRVbmlvbjtcbnZhciBtYWduZXRpY0ZsdXhRdWFudHVtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTWFnbmV0aWNGbHV4UXVhbnR1bSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMubWFnbmV0aWNGbHV4UXVhbnR1bSA9IG1hZ25ldGljRmx1eFF1YW50dW07XG52YXIgY291bG9tYiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvdWxvbWIpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmNvdWxvbWIgPSBjb3Vsb21iO1xudmFyIG1hZCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU1hZCkoe1xuICBhYnM6IGFicyxcbiAgbWFwOiBtYXAsXG4gIG1lZGlhbjogbWVkaWFuLFxuICBzdWJ0cmFjdDogc3VidHJhY3QsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm1hZCA9IG1hZDtcbnZhciByeWRiZXJnID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUnlkYmVyZykoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMucnlkYmVyZyA9IHJ5ZGJlcmc7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0FjY2Vzc29yTm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNBY2Nlc3Nvck5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNBcnJheVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNBcnJheTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0FycmF5Tm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNBcnJheU5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNBc3NpZ25tZW50Tm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNBc3NpZ25tZW50Tm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0JpZ051bWJlclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNCaWdOdW1iZXI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNCbG9ja05vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzQmxvY2tOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzQm9vbGVhblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNCb29sZWFuO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzQ2hhaW5cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzQ2hhaW47XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNDb2xsZWN0aW9uXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc0NvbGxlY3Rpb247XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNDb21wbGV4XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc0NvbXBsZXg7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNDb25kaXRpb25hbE5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzQ29uZGl0aW9uYWxOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzQ29uc3RhbnROb2RlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc0NvbnN0YW50Tm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0RhdGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzRGF0ZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0RlbnNlTWF0cml4XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc0RlbnNlTWF0cml4O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzRnJhY3Rpb25cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzRnJhY3Rpb247XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNGdW5jdGlvblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNGdW5jdGlvbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0Z1bmN0aW9uQXNzaWdubWVudE5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0Z1bmN0aW9uTm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNGdW5jdGlvbk5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNIZWxwXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc0hlbHA7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNJbmRleFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNJbmRleDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0luZGV4Tm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNJbmRleE5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNNYXRyaXhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzTWF0cml4O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzTm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzTnVsbFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNOdWxsO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzTnVtYmVyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc051bWJlcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc1N0cmluZ1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNTdHJpbmc7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNVbmRlZmluZWRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzVW5kZWZpbmVkO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzT2JqZWN0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc09iamVjdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc09iamVjdE5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzT2JqZWN0Tm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc09wZXJhdG9yTm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNPcGVyYXRvck5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNQYXJlbnRoZXNpc05vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzUGFyZW50aGVzaXNOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzUmFuZ2VcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzUmFuZ2U7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNSYW5nZU5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzUmFuZ2VOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzUmVnRXhwXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc1JlZ0V4cDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc1Jlc3VsdFNldFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNSZXN1bHRTZXQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNTcGFyc2VNYXRyaXhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzU3BhcnNlTWF0cml4O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzU3ltYm9sTm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNTeW1ib2xOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzVW5pdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNVbml0O1xuICB9XG59KTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi91dGlscy9pc1wiKTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuQXJndW1lbnRzRXJyb3IgPSBBcmd1bWVudHNFcnJvcjtcblxuLyoqXG4gKiBDcmVhdGUgYSBzeW50YXggZXJyb3Igd2l0aCB0aGUgbWVzc2FnZTpcbiAqICAgICAnV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyBpbiBmdW5jdGlvbiA8Zm4+ICg8Y291bnQ+IHByb3ZpZGVkLCA8bWluPi08bWF4PiBleHBlY3RlZCknXG4gKiBAcGFyYW0ge3N0cmluZ30gZm4gICAgIEZ1bmN0aW9uIG5hbWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb3VudCAgQWN0dWFsIGFyZ3VtZW50IGNvdW50XG4gKiBAcGFyYW0ge251bWJlcn0gbWluICAgIE1pbmltdW0gcmVxdWlyZWQgYXJndW1lbnQgY291bnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBbbWF4XSAgTWF4aW11bSByZXF1aXJlZCBhcmd1bWVudCBjb3VudFxuICogQGV4dGVuZHMgRXJyb3JcbiAqL1xuZnVuY3Rpb24gQXJndW1lbnRzRXJyb3IoZm4sIGNvdW50LCBtaW4sIG1heCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQXJndW1lbnRzRXJyb3IpKSB7XG4gICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgfVxuXG4gIHRoaXMuZm4gPSBmbjtcbiAgdGhpcy5jb3VudCA9IGNvdW50O1xuICB0aGlzLm1pbiA9IG1pbjtcbiAgdGhpcy5tYXggPSBtYXg7XG4gIHRoaXMubWVzc2FnZSA9ICdXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzIGluIGZ1bmN0aW9uICcgKyBmbiArICcgKCcgKyBjb3VudCArICcgcHJvdmlkZWQsICcgKyBtaW4gKyAobWF4ICE9PSB1bmRlZmluZWQgJiYgbWF4ICE9PSBudWxsID8gJy0nICsgbWF4IDogJycpICsgJyBleHBlY3RlZCknO1xuICB0aGlzLnN0YWNrID0gbmV3IEVycm9yKCkuc3RhY2s7XG59XG5cbkFyZ3VtZW50c0Vycm9yLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuQXJndW1lbnRzRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRXJyb3I7XG5Bcmd1bWVudHNFcnJvci5wcm90b3R5cGUubmFtZSA9ICdBcmd1bWVudHNFcnJvcic7XG5Bcmd1bWVudHNFcnJvci5wcm90b3R5cGUuaXNBcmd1bWVudHNFcnJvciA9IHRydWU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkRpbWVuc2lvbkVycm9yID0gRGltZW5zaW9uRXJyb3I7XG5cbi8qKlxuICogQ3JlYXRlIGEgcmFuZ2UgZXJyb3Igd2l0aCB0aGUgbWVzc2FnZTpcbiAqICAgICAnRGltZW5zaW9uIG1pc21hdGNoICg8YWN0dWFsIHNpemU+ICE9IDxleHBlY3RlZCBzaXplPiknXG4gKiBAcGFyYW0ge251bWJlciB8IG51bWJlcltdfSBhY3R1YWwgICAgICAgIFRoZSBhY3R1YWwgc2l6ZVxuICogQHBhcmFtIHtudW1iZXIgfCBudW1iZXJbXX0gZXhwZWN0ZWQgICAgICBUaGUgZXhwZWN0ZWQgc2l6ZVxuICogQHBhcmFtIHtzdHJpbmd9IFtyZWxhdGlvbj0nIT0nXSAgICAgICAgICBPcHRpb25hbCByZWxhdGlvbiBiZXR3ZWVuIGFjdHVhbFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZXhwZWN0ZWQgc2l6ZTogJyE9JywgJzwnLCBldGMuXG4gKiBAZXh0ZW5kcyBSYW5nZUVycm9yXG4gKi9cbmZ1bmN0aW9uIERpbWVuc2lvbkVycm9yKGFjdHVhbCwgZXhwZWN0ZWQsIHJlbGF0aW9uKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBEaW1lbnNpb25FcnJvcikpIHtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICB9XG5cbiAgdGhpcy5hY3R1YWwgPSBhY3R1YWw7XG4gIHRoaXMuZXhwZWN0ZWQgPSBleHBlY3RlZDtcbiAgdGhpcy5yZWxhdGlvbiA9IHJlbGF0aW9uO1xuICB0aGlzLm1lc3NhZ2UgPSAnRGltZW5zaW9uIG1pc21hdGNoICgnICsgKEFycmF5LmlzQXJyYXkoYWN0dWFsKSA/ICdbJyArIGFjdHVhbC5qb2luKCcsICcpICsgJ10nIDogYWN0dWFsKSArICcgJyArICh0aGlzLnJlbGF0aW9uIHx8ICchPScpICsgJyAnICsgKEFycmF5LmlzQXJyYXkoZXhwZWN0ZWQpID8gJ1snICsgZXhwZWN0ZWQuam9pbignLCAnKSArICddJyA6IGV4cGVjdGVkKSArICcpJztcbiAgdGhpcy5zdGFjayA9IG5ldyBFcnJvcigpLnN0YWNrO1xufVxuXG5EaW1lbnNpb25FcnJvci5wcm90b3R5cGUgPSBuZXcgUmFuZ2VFcnJvcigpO1xuRGltZW5zaW9uRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmFuZ2VFcnJvcjtcbkRpbWVuc2lvbkVycm9yLnByb3RvdHlwZS5uYW1lID0gJ0RpbWVuc2lvbkVycm9yJztcbkRpbWVuc2lvbkVycm9yLnByb3RvdHlwZS5pc0RpbWVuc2lvbkVycm9yID0gdHJ1ZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuSW5kZXhFcnJvciA9IEluZGV4RXJyb3I7XG5cbi8qKlxuICogQ3JlYXRlIGEgcmFuZ2UgZXJyb3Igd2l0aCB0aGUgbWVzc2FnZTpcbiAqICAgICAnSW5kZXggb3V0IG9mIHJhbmdlIChpbmRleCA8IG1pbiknXG4gKiAgICAgJ0luZGV4IG91dCBvZiByYW5nZSAoaW5kZXggPCBtYXgpJ1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCAgICAgVGhlIGFjdHVhbCBpbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IFttaW49MF0gICBNaW5pbXVtIGluZGV4IChpbmNsdWRlZClcbiAqIEBwYXJhbSB7bnVtYmVyfSBbbWF4XSAgICAgTWF4aW11bSBpbmRleCAoZXhjbHVkZWQpXG4gKiBAZXh0ZW5kcyBSYW5nZUVycm9yXG4gKi9cbmZ1bmN0aW9uIEluZGV4RXJyb3IoaW5kZXgsIG1pbiwgbWF4KSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBJbmRleEVycm9yKSkge1xuICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7XG4gIH1cblxuICB0aGlzLmluZGV4ID0gaW5kZXg7XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAzKSB7XG4gICAgdGhpcy5taW4gPSAwO1xuICAgIHRoaXMubWF4ID0gbWluO1xuICB9IGVsc2Uge1xuICAgIHRoaXMubWluID0gbWluO1xuICAgIHRoaXMubWF4ID0gbWF4O1xuICB9XG5cbiAgaWYgKHRoaXMubWluICE9PSB1bmRlZmluZWQgJiYgdGhpcy5pbmRleCA8IHRoaXMubWluKSB7XG4gICAgdGhpcy5tZXNzYWdlID0gJ0luZGV4IG91dCBvZiByYW5nZSAoJyArIHRoaXMuaW5kZXggKyAnIDwgJyArIHRoaXMubWluICsgJyknO1xuICB9IGVsc2UgaWYgKHRoaXMubWF4ICE9PSB1bmRlZmluZWQgJiYgdGhpcy5pbmRleCA+PSB0aGlzLm1heCkge1xuICAgIHRoaXMubWVzc2FnZSA9ICdJbmRleCBvdXQgb2YgcmFuZ2UgKCcgKyB0aGlzLmluZGV4ICsgJyA+ICcgKyAodGhpcy5tYXggLSAxKSArICcpJztcbiAgfSBlbHNlIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSAnSW5kZXggb3V0IG9mIHJhbmdlICgnICsgdGhpcy5pbmRleCArICcpJztcbiAgfVxuXG4gIHRoaXMuc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcbn1cblxuSW5kZXhFcnJvci5wcm90b3R5cGUgPSBuZXcgUmFuZ2VFcnJvcigpO1xuSW5kZXhFcnJvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSYW5nZUVycm9yO1xuSW5kZXhFcnJvci5wcm90b3R5cGUubmFtZSA9ICdJbmRleEVycm9yJztcbkluZGV4RXJyb3IucHJvdG90eXBlLmlzSW5kZXhFcnJvciA9IHRydWU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUhlbHBDbGFzcyA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi91dGlscy9pc1wiKTtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdIZWxwJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3BhcnNlJ107XG52YXIgY3JlYXRlSGVscENsYXNzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHBhcnNlID0gX3JlZi5wYXJzZTtcblxuICAvKipcbiAgICogRG9jdW1lbnRhdGlvbiBvYmplY3RcbiAgICogQHBhcmFtIHtPYmplY3R9IGRvYyAgT2JqZWN0IGNvbnRhaW5pbmcgcHJvcGVydGllczpcbiAgICogICAgICAgICAgICAgICAgICAgICAge3N0cmluZ30gbmFtZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nfSBjYXRlZ29yeVxuICAgKiAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nfSBkZXNjcmlwdGlvblxuICAgKiAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nW119IHN5bnRheFxuICAgKiAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nW119IGV4YW1wbGVzXG4gICAqICAgICAgICAgICAgICAgICAgICAgIHtzdHJpbmdbXX0gc2VlYWxzb1xuICAgKiBAY29uc3RydWN0b3JcbiAgICovXG4gIGZ1bmN0aW9uIEhlbHAoZG9jKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEhlbHApKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH1cblxuICAgIGlmICghZG9jKSB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwiZG9jXCIgbWlzc2luZycpO1xuICAgIHRoaXMuZG9jID0gZG9jO1xuICB9XG4gIC8qKlxuICAgKiBBdHRhY2ggdHlwZSBpbmZvcm1hdGlvblxuICAgKi9cblxuXG4gIEhlbHAucHJvdG90eXBlLnR5cGUgPSAnSGVscCc7XG4gIEhlbHAucHJvdG90eXBlLmlzSGVscCA9IHRydWU7XG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgSGVscCBvYmplY3RcbiAgICogQHJldHVybiB7c3RyaW5nfSBSZXR1cm5zIGEgc3RyaW5nXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIEhlbHAucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBkb2MgPSB0aGlzLmRvYyB8fCB7fTtcbiAgICB2YXIgZGVzYyA9ICdcXG4nO1xuXG4gICAgaWYgKGRvYy5uYW1lKSB7XG4gICAgICBkZXNjICs9ICdOYW1lOiAnICsgZG9jLm5hbWUgKyAnXFxuXFxuJztcbiAgICB9XG5cbiAgICBpZiAoZG9jLmNhdGVnb3J5KSB7XG4gICAgICBkZXNjICs9ICdDYXRlZ29yeTogJyArIGRvYy5jYXRlZ29yeSArICdcXG5cXG4nO1xuICAgIH1cblxuICAgIGlmIChkb2MuZGVzY3JpcHRpb24pIHtcbiAgICAgIGRlc2MgKz0gJ0Rlc2NyaXB0aW9uOlxcbiAgICAnICsgZG9jLmRlc2NyaXB0aW9uICsgJ1xcblxcbic7XG4gICAgfVxuXG4gICAgaWYgKGRvYy5zeW50YXgpIHtcbiAgICAgIGRlc2MgKz0gJ1N5bnRheDpcXG4gICAgJyArIGRvYy5zeW50YXguam9pbignXFxuICAgICcpICsgJ1xcblxcbic7XG4gICAgfVxuXG4gICAgaWYgKGRvYy5leGFtcGxlcykge1xuICAgICAgZGVzYyArPSAnRXhhbXBsZXM6XFxuJztcbiAgICAgIHZhciBzY29wZSA9IHt9O1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvYy5leGFtcGxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZXhwciA9IGRvYy5leGFtcGxlc1tpXTtcbiAgICAgICAgZGVzYyArPSAnICAgICcgKyBleHByICsgJ1xcbic7XG4gICAgICAgIHZhciByZXMgPSB2b2lkIDA7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBub3RlOiByZXMgY2FuIGJlIHVuZGVmaW5lZCB3aGVuIGBleHByYCBpcyBhbiBlbXB0eSBzdHJpbmdcbiAgICAgICAgICByZXMgPSBwYXJzZShleHByKS5jb21waWxlKCkuZXZhbHVhdGUoc2NvcGUpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgcmVzID0gZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCAmJiAhKDAsIF9pcy5pc0hlbHApKHJlcykpIHtcbiAgICAgICAgICBkZXNjICs9ICcgICAgICAgICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKHJlcywge1xuICAgICAgICAgICAgcHJlY2lzaW9uOiAxNFxuICAgICAgICAgIH0pICsgJ1xcbic7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZGVzYyArPSAnXFxuJztcbiAgICB9XG5cbiAgICBpZiAoZG9jLnNlZWFsc28gJiYgZG9jLnNlZWFsc28ubGVuZ3RoKSB7XG4gICAgICBkZXNjICs9ICdTZWUgYWxzbzogJyArIGRvYy5zZWVhbHNvLmpvaW4oJywgJykgKyAnXFxuJztcbiAgICB9XG5cbiAgICByZXR1cm4gZGVzYztcbiAgfTtcbiAgLyoqXG4gICAqIEV4cG9ydCB0aGUgaGVscCBvYmplY3QgdG8gSlNPTlxuICAgKi9cblxuXG4gIEhlbHAucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgb2JqID0gKDAsIF9vYmplY3QuY2xvbmUpKHRoaXMuZG9jKTtcbiAgICBvYmoubWF0aGpzID0gJ0hlbHAnO1xuICAgIHJldHVybiBvYmo7XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhIEhlbHAgb2JqZWN0IGZyb20gYSBKU09OIG9iamVjdFxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvblxuICAgKiBAcmV0dXJucyB7SGVscH0gUmV0dXJucyBhIG5ldyBIZWxwIG9iamVjdFxuICAgKi9cblxuXG4gIEhlbHAuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHZhciBkb2MgPSB7fTtcblxuICAgIGZvciAodmFyIHByb3AgaW4ganNvbikge1xuICAgICAgaWYgKHByb3AgIT09ICdtYXRoanMnKSB7XG4gICAgICAgIC8vIGlnbm9yZSBtYXRoanMgZmllbGRcbiAgICAgICAgZG9jW3Byb3BdID0ganNvbltwcm9wXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEhlbHAoZG9jKTtcbiAgfTtcbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIEhlbHAgb2JqZWN0XG4gICAqL1xuXG5cbiAgSGVscC5wcm90b3R5cGUudmFsdWVPZiA9IEhlbHAucHJvdG90eXBlLnRvU3RyaW5nO1xuICByZXR1cm4gSGVscDtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUhlbHBDbGFzcyA9IGNyZWF0ZUhlbHBDbGFzczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUGFyc2VyQ2xhc3MgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfY3VzdG9tcyA9IHJlcXVpcmUoXCIuLi91dGlscy9jdXN0b21zXCIpO1xuXG52YXIgX2xvZyA9IHJlcXVpcmUoXCIuLi91dGlscy9sb2dcIik7XG5cbnZhciBuYW1lID0gJ1BhcnNlcic7XG52YXIgZGVwZW5kZW5jaWVzID0gWydwYXJzZSddO1xudmFyIGNyZWF0ZVBhcnNlckNsYXNzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHBhcnNlID0gX3JlZi5wYXJzZTtcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yIFBhcnNlclxuICAgKiBQYXJzZXIgY29udGFpbnMgbWV0aG9kcyB0byBldmFsdWF0ZSBvciBwYXJzZSBleHByZXNzaW9ucywgYW5kIGhhcyBhIG51bWJlclxuICAgKiBvZiBjb252ZW5pZW5jZSBtZXRob2RzIHRvIGdldCwgc2V0LCBhbmQgcmVtb3ZlIHZhcmlhYmxlcyBmcm9tIG1lbW9yeS4gUGFyc2VyXG4gICAqIGtlZXBzIGEgc2NvcGUgY29udGFpbmluZyB2YXJpYWJsZXMgaW4gbWVtb3J5LCB3aGljaCBpcyB1c2VkIGZvciBhbGxcbiAgICogZXZhbHVhdGlvbnMuXG4gICAqXG4gICAqIE1ldGhvZHM6XG4gICAqICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlci5ldmFsdWF0ZShleHByKSAgLy8gZXZhbHVhdGUgYW4gZXhwcmVzc2lvblxuICAgKiAgICBjb25zdCB2YWx1ZSA9IHBhcnNlci5nZXQobmFtZSkgICAgICAgIC8vIHJldHJpZXZlIGEgdmFyaWFibGUgZnJvbSB0aGUgcGFyc2VyXG4gICAqICAgIGNvbnN0IHZhbHVlcyA9IHBhcnNlci5nZXRBbGwoKSAgICAgICAgLy8gcmV0cmlldmUgYWxsIGRlZmluZWQgdmFyaWFibGVzXG4gICAqICAgIHBhcnNlci5zZXQobmFtZSwgdmFsdWUpICAgICAgICAgICAgICAgLy8gc2V0IGEgdmFyaWFibGUgaW4gdGhlIHBhcnNlclxuICAgKiAgICBwYXJzZXIucmVtb3ZlKG5hbWUpICAgICAgICAgICAgICAgICAgIC8vIGNsZWFyIGEgdmFyaWFibGUgZnJvbSB0aGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwYXJzZXJzIHNjb3BlXG4gICAqICAgIHBhcnNlci5jbGVhcigpICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2xlYXIgdGhlIHBhcnNlcnMgc2NvcGVcbiAgICpcbiAgICogRXhhbXBsZSB1c2FnZTpcbiAgICogICAgY29uc3QgcGFyc2VyID0gbmV3IFBhcnNlcigpXG4gICAqICAgIC8vIE5vdGU6IHRoZXJlIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHdoaWNoIGNhbiBiZSB1c2VkIGluc3RlYWQ6XG4gICAqICAgIC8vIGNvbnN0IHBhcnNlciA9IG5ldyBtYXRoLnBhcnNlcigpXG4gICAqXG4gICAqICAgIC8vIGV2YWx1YXRlIGV4cHJlc3Npb25zXG4gICAqICAgIHBhcnNlci5ldmFsdWF0ZSgnc3FydCgzXjIgKyA0XjIpJykgICAgICAgIC8vIDVcbiAgICogICAgcGFyc2VyLmV2YWx1YXRlKCdzcXJ0KC00KScpICAgICAgICAgICAgICAgLy8gMmlcbiAgICogICAgcGFyc2VyLmV2YWx1YXRlKCcyIGluY2ggaW4gY20nKSAgICAgICAgICAgLy8gNS4wOCBjbVxuICAgKiAgICBwYXJzZXIuZXZhbHVhdGUoJ2Nvcyg0NSBkZWcpJykgICAgICAgICAgICAvLyAwLjcwNzEwNjc4MTE4NjU0NzZcbiAgICpcbiAgICogICAgLy8gZGVmaW5lIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zXG4gICAqICAgIHBhcnNlci5ldmFsdWF0ZSgneCA9IDcgLyAyJykgICAgICAgICAgICAgIC8vIDMuNVxuICAgKiAgICBwYXJzZXIuZXZhbHVhdGUoJ3ggKyAzJykgICAgICAgICAgICAgICAgICAvLyA2LjVcbiAgICogICAgcGFyc2VyLmV2YWx1YXRlKCdmdW5jdGlvbiBmKHgsIHkpID0geF55JykgLy8gZih4LCB5KVxuICAgKiAgICBwYXJzZXIuZXZhbHVhdGUoJ2YoMiwgMyknKSAgICAgICAgICAgICAgICAvLyA4XG4gICAqXG4gICAqICAgIC8vIGdldCBhbmQgc2V0IHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zXG4gICAqICAgIGNvbnN0IHggPSBwYXJzZXIuZ2V0KCd4JykgICAgICAgICAgICAgICAgIC8vIDdcbiAgICogICAgY29uc3QgZiA9IHBhcnNlci5nZXQoJ2YnKSAgICAgICAgICAgICAgICAgLy8gZnVuY3Rpb25cbiAgICogICAgY29uc3QgZyA9IGYoMywgMikgICAgICAgICAgICAgICAgICAgICAgICAgLy8gOVxuICAgKiAgICBwYXJzZXIuc2V0KCdoJywgNTAwKVxuICAgKiAgICBjb25zdCBpID0gcGFyc2VyLmV2YWx1YXRlKCdoIC8gMicpICAgICAgICAvLyAyNTBcbiAgICogICAgcGFyc2VyLnNldCgnaGVsbG8nLCBmdW5jdGlvbiAobmFtZSkge1xuICAgKiAgICAgICAgcmV0dXJuICdoZWxsbywgJyArIG5hbWUgKyAnISdcbiAgICogICAgfSlcbiAgICogICAgcGFyc2VyLmV2YWx1YXRlKCdoZWxsbyhcInVzZXJcIiknKSAgICAgICAgICAvLyBcImhlbGxvLCB1c2VyIVwiXG4gICAqXG4gICAqICAgIC8vIGNsZWFyIGRlZmluZWQgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXNcbiAgICogICAgcGFyc2VyLmNsZWFyKClcbiAgICpcbiAgICovXG4gIGZ1bmN0aW9uIFBhcnNlcigpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUGFyc2VyKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG5cbiAgICB0aGlzLnNjb3BlID0ge307XG4gIH1cbiAgLyoqXG4gICAqIEF0dGFjaCB0eXBlIGluZm9ybWF0aW9uXG4gICAqL1xuXG5cbiAgUGFyc2VyLnByb3RvdHlwZS50eXBlID0gJ1BhcnNlcic7XG4gIFBhcnNlci5wcm90b3R5cGUuaXNQYXJzZXIgPSB0cnVlO1xuICAvKipcbiAgICogUGFyc2UgYW4gZXhwcmVzc2lvbiBhbmQgcmV0dXJuIHRoZSBwYXJzZWQgZnVuY3Rpb24gbm9kZS5cbiAgICogVGhlIG5vZGUgdHJlZSBjYW4gYmUgY29tcGlsZWQgdmlhIGBjb2RlID0gbm9kZS5jb21waWxlKG1hdGgpYCxcbiAgICogYW5kIHRoZSBjb21waWxlZCBjb2RlIGNhbiBiZSBleGVjdXRlZCBhcyBgY29kZS5ldmFsdWF0ZShbc2NvcGVdKWBcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4cHJcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAdGhyb3dzIHtFcnJvcn1cbiAgICovXG5cbiAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uIChleHByKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQYXJzZXIucGFyc2UgaXMgZGVwcmVjYXRlZC4gVXNlIG1hdGgucGFyc2UgaW5zdGVhZC4nKTtcbiAgfTtcbiAgLyoqXG4gICAqIFBhcnNlIGFuZCBjb21waWxlIGFuIGV4cHJlc3Npb24sIHJldHVybiB0aGUgY29tcGlsZWQgamF2YXNjcmlwdCBjb2RlLlxuICAgKiBUaGUgbm9kZSBjYW4gYmUgZXZhbHVhdGVkIHZpYSBjb2RlLmV2YWx1YXRlKFtzY29wZV0pXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHByXG4gICAqIEByZXR1cm4ge3tldmFsdWF0ZTogZnVuY3Rpb259fSBjb2RlXG4gICAqIEB0aHJvd3Mge0Vycm9yfVxuICAgKi9cblxuXG4gIFBhcnNlci5wcm90b3R5cGUuY29tcGlsZSA9IGZ1bmN0aW9uIChleHByKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQYXJzZXIuY29tcGlsZSBpcyBkZXByZWNhdGVkLiBVc2UgbWF0aC5jb21waWxlIGluc3RlYWQuJyk7XG4gIH07XG4gIC8qKlxuICAgKiBQYXJzZSBhbmQgZXZhbHVhdGUgdGhlIGdpdmVuIGV4cHJlc3Npb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4cHIgICBBIHN0cmluZyBjb250YWluaW5nIGFuIGV4cHJlc3Npb24sIGZvciBleGFtcGxlIFwiMiszXCJcbiAgICogQHJldHVybiB7Kn0gcmVzdWx0ICAgICBUaGUgcmVzdWx0LCBvciB1bmRlZmluZWQgd2hlbiB0aGUgZXhwcmVzc2lvbiB3YXMgZW1wdHlcbiAgICogQHRocm93cyB7RXJyb3J9XG4gICAqL1xuXG5cbiAgUGFyc2VyLnByb3RvdHlwZS5ldmFsdWF0ZSA9IGZ1bmN0aW9uIChleHByKSB7XG4gICAgLy8gVE9ETzogdmFsaWRhdGUgYXJndW1lbnRzXG4gICAgcmV0dXJuIHBhcnNlKGV4cHIpLmNvbXBpbGUoKS5ldmFsdWF0ZSh0aGlzLnNjb3BlKTtcbiAgfTtcbiAgLyoqXG4gICAqIFBhcnNlIGFuZCBldmFsdWF0ZSB0aGUgZ2l2ZW4gZXhwcmVzc2lvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXhwciAgIEEgc3RyaW5nIGNvbnRhaW5pbmcgYW4gZXhwcmVzc2lvbiwgZm9yIGV4YW1wbGUgXCIyKzNcIlxuICAgKiBAcmV0dXJuIHsqfSByZXN1bHQgICAgIFRoZSByZXN1bHQsIG9yIHVuZGVmaW5lZCB3aGVuIHRoZSBleHByZXNzaW9uIHdhcyBlbXB0eVxuICAgKiBAdGhyb3dzIHtFcnJvcn1cbiAgICovXG4gIC8vIFRPRE86IERlcHJlY2F0ZWQgc2luY2UgdjYuMC4wLiBDbGVhbiB1cCBzb21lIGRheVxuXG5cbiAgUGFyc2VyLnByb3RvdHlwZS5ldmFsID0gZnVuY3Rpb24gKGV4cHIpIHtcbiAgICAoMCwgX2xvZy53YXJuT25jZSkoJ01ldGhvZCBQYXJzZXIuZXZhbCBpcyByZW5hbWVkIHRvIFBhcnNlci5ldmFsdWF0ZS4gUGxlYXNlIHVzZSB0aGUgbmV3IG1ldGhvZCBuYW1lLicpO1xuICAgIHJldHVybiB0aGlzLmV2YWx1YXRlKGV4cHIpO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgdmFyaWFibGUgKGEgZnVuY3Rpb24gb3IgdmFyaWFibGUpIGJ5IG5hbWUgZnJvbSB0aGUgcGFyc2VycyBzY29wZS5cbiAgICogUmV0dXJucyB1bmRlZmluZWQgd2hlbiBub3QgZm91bmRcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHJldHVybiB7KiB8IHVuZGVmaW5lZH0gdmFsdWVcbiAgICovXG5cblxuICBQYXJzZXIucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgLy8gVE9ETzogdmFsaWRhdGUgYXJndW1lbnRzXG4gICAgcmV0dXJuIG5hbWUgaW4gdGhpcy5zY29wZSA/ICgwLCBfY3VzdG9tcy5nZXRTYWZlUHJvcGVydHkpKHRoaXMuc2NvcGUsIG5hbWUpIDogdW5kZWZpbmVkO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgbWFwIHdpdGggYWxsIGRlZmluZWQgdmFyaWFibGVzXG4gICAqIEByZXR1cm4ge09iamVjdH0gdmFsdWVzXG4gICAqL1xuXG5cbiAgUGFyc2VyLnByb3RvdHlwZS5nZXRBbGwgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICgwLCBfb2JqZWN0LmV4dGVuZCkoe30sIHRoaXMuc2NvcGUpO1xuICB9O1xuICAvKipcbiAgICogU2V0IGEgc3ltYm9sIChhIGZ1bmN0aW9uIG9yIHZhcmlhYmxlKSBieSBuYW1lIGZyb20gdGhlIHBhcnNlcnMgc2NvcGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7KiB8IHVuZGVmaW5lZH0gdmFsdWVcbiAgICovXG5cblxuICBQYXJzZXIucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgIC8vIFRPRE86IHZhbGlkYXRlIGFyZ3VtZW50c1xuICAgIHJldHVybiAoMCwgX2N1c3RvbXMuc2V0U2FmZVByb3BlcnR5KSh0aGlzLnNjb3BlLCBuYW1lLCB2YWx1ZSk7XG4gIH07XG4gIC8qKlxuICAgKiBSZW1vdmUgYSB2YXJpYWJsZSBmcm9tIHRoZSBwYXJzZXJzIHNjb3BlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqL1xuXG5cbiAgUGFyc2VyLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIC8vIFRPRE86IHZhbGlkYXRlIGFyZ3VtZW50c1xuICAgIGRlbGV0ZSB0aGlzLnNjb3BlW25hbWVdO1xuICB9O1xuICAvKipcbiAgICogQ2xlYXIgdGhlIHNjb3BlIHdpdGggdmFyaWFibGVzIGFuZCBmdW5jdGlvbnNcbiAgICovXG5cblxuICBQYXJzZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIF9uYW1lIGluIHRoaXMuc2NvcGUpIHtcbiAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkodGhpcy5zY29wZSwgX25hbWUpKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnNjb3BlW19uYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFBhcnNlcjtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVBhcnNlckNsYXNzID0gY3JlYXRlUGFyc2VyQ2xhc3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkluZmluaXR5RG9jcyA9IHZvaWQgMDtcbnZhciBJbmZpbml0eURvY3MgPSB7XG4gIG5hbWU6ICdJbmZpbml0eScsXG4gIGNhdGVnb3J5OiAnQ29uc3RhbnRzJyxcbiAgc3ludGF4OiBbJ0luZmluaXR5J10sXG4gIGRlc2NyaXB0aW9uOiAnSW5maW5pdHksIGEgbnVtYmVyIHdoaWNoIGlzIGxhcmdlciB0aGFuIHRoZSBtYXhpbXVtIG51bWJlciB0aGF0IGNhbiBiZSBoYW5kbGVkIGJ5IGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLicsXG4gIGV4YW1wbGVzOiBbJ0luZmluaXR5JywgJzEgLyAwJ10sXG4gIHNlZWFsc286IFtdXG59O1xuZXhwb3J0cy5JbmZpbml0eURvY3MgPSBJbmZpbml0eURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkxOMTBEb2NzID0gdm9pZCAwO1xudmFyIExOMTBEb2NzID0ge1xuICBuYW1lOiAnTE4xMCcsXG4gIGNhdGVnb3J5OiAnQ29uc3RhbnRzJyxcbiAgc3ludGF4OiBbJ0xOMTAnXSxcbiAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBuYXR1cmFsIGxvZ2FyaXRobSBvZiAxMCwgYXBwcm94aW1hdGVseSBlcXVhbCB0byAyLjMwMicsXG4gIGV4YW1wbGVzOiBbJ0xOMTAnLCAnbG9nKDEwKSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMuTE4xMERvY3MgPSBMTjEwRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuTE4yRG9jcyA9IHZvaWQgMDtcbnZhciBMTjJEb2NzID0ge1xuICBuYW1lOiAnTE4yJyxcbiAgY2F0ZWdvcnk6ICdDb25zdGFudHMnLFxuICBzeW50YXg6IFsnTE4yJ10sXG4gIGRlc2NyaXB0aW9uOiAnUmV0dXJucyB0aGUgbmF0dXJhbCBsb2dhcml0aG0gb2YgMiwgYXBwcm94aW1hdGVseSBlcXVhbCB0byAwLjY5MycsXG4gIGV4YW1wbGVzOiBbJ0xOMicsICdsb2coMiknXSxcbiAgc2VlYWxzbzogW11cbn07XG5leHBvcnRzLkxOMkRvY3MgPSBMTjJEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5MT0cxMEVEb2NzID0gdm9pZCAwO1xudmFyIExPRzEwRURvY3MgPSB7XG4gIG5hbWU6ICdMT0cxMEUnLFxuICBjYXRlZ29yeTogJ0NvbnN0YW50cycsXG4gIHN5bnRheDogWydMT0cxMEUnXSxcbiAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBiYXNlLTEwIGxvZ2FyaXRobSBvZiBFLCBhcHByb3hpbWF0ZWx5IGVxdWFsIHRvIDAuNDM0JyxcbiAgZXhhbXBsZXM6IFsnTE9HMTBFJywgJ2xvZyhlLCAxMCknXSxcbiAgc2VlYWxzbzogW11cbn07XG5leHBvcnRzLkxPRzEwRURvY3MgPSBMT0cxMEVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5MT0cyRURvY3MgPSB2b2lkIDA7XG52YXIgTE9HMkVEb2NzID0ge1xuICBuYW1lOiAnTE9HMkUnLFxuICBjYXRlZ29yeTogJ0NvbnN0YW50cycsXG4gIHN5bnRheDogWydMT0cyRSddLFxuICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdGhlIGJhc2UtMiBsb2dhcml0aG0gb2YgRSwgYXBwcm94aW1hdGVseSBlcXVhbCB0byAxLjQ0MicsXG4gIGV4YW1wbGVzOiBbJ0xPRzJFJywgJ2xvZyhlLCAyKSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMuTE9HMkVEb2NzID0gTE9HMkVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5OYU5Eb2NzID0gdm9pZCAwO1xudmFyIE5hTkRvY3MgPSB7XG4gIG5hbWU6ICdOYU4nLFxuICBjYXRlZ29yeTogJ0NvbnN0YW50cycsXG4gIHN5bnRheDogWydOYU4nXSxcbiAgZGVzY3JpcHRpb246ICdOb3QgYSBudW1iZXInLFxuICBleGFtcGxlczogWydOYU4nLCAnMCAvIDAnXSxcbiAgc2VlYWxzbzogW11cbn07XG5leHBvcnRzLk5hTkRvY3MgPSBOYU5Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5TUVJUMTJEb2NzID0gdm9pZCAwO1xudmFyIFNRUlQxMkRvY3MgPSB7XG4gIG5hbWU6ICdTUVJUMV8yJyxcbiAgY2F0ZWdvcnk6ICdDb25zdGFudHMnLFxuICBzeW50YXg6IFsnU1FSVDFfMiddLFxuICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdGhlIHNxdWFyZSByb290IG9mIDEvMiwgYXBwcm94aW1hdGVseSBlcXVhbCB0byAwLjcwNycsXG4gIGV4YW1wbGVzOiBbJ1NRUlQxXzInLCAnc3FydCgxLzIpJ10sXG4gIHNlZWFsc286IFtdXG59O1xuZXhwb3J0cy5TUVJUMTJEb2NzID0gU1FSVDEyRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuU1FSVDJEb2NzID0gdm9pZCAwO1xudmFyIFNRUlQyRG9jcyA9IHtcbiAgbmFtZTogJ1NRUlQyJyxcbiAgY2F0ZWdvcnk6ICdDb25zdGFudHMnLFxuICBzeW50YXg6IFsnU1FSVDInXSxcbiAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBzcXVhcmUgcm9vdCBvZiAyLCBhcHByb3hpbWF0ZWx5IGVxdWFsIHRvIDEuNDE0JyxcbiAgZXhhbXBsZXM6IFsnU1FSVDInLCAnc3FydCgyKSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMuU1FSVDJEb2NzID0gU1FSVDJEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lRG9jcyA9IHZvaWQgMDtcbnZhciBlRG9jcyA9IHtcbiAgbmFtZTogJ2UnLFxuICBjYXRlZ29yeTogJ0NvbnN0YW50cycsXG4gIHN5bnRheDogWydlJ10sXG4gIGRlc2NyaXB0aW9uOiAnRXVsZXJcXCdzIG51bWJlciwgdGhlIGJhc2Ugb2YgdGhlIG5hdHVyYWwgbG9nYXJpdGhtLiBBcHByb3hpbWF0ZWx5IGVxdWFsIHRvIDIuNzE4MjgnLFxuICBleGFtcGxlczogWydlJywgJ2UgXiAyJywgJ2V4cCgyKScsICdsb2coZSknXSxcbiAgc2VlYWxzbzogWydleHAnXVxufTtcbmV4cG9ydHMuZURvY3MgPSBlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZmFsc2VEb2NzID0gdm9pZCAwO1xudmFyIGZhbHNlRG9jcyA9IHtcbiAgbmFtZTogJ2ZhbHNlJyxcbiAgY2F0ZWdvcnk6ICdDb25zdGFudHMnLFxuICBzeW50YXg6IFsnZmFsc2UnXSxcbiAgZGVzY3JpcHRpb246ICdCb29sZWFuIHZhbHVlIGZhbHNlJyxcbiAgZXhhbXBsZXM6IFsnZmFsc2UnXSxcbiAgc2VlYWxzbzogWyd0cnVlJ11cbn07XG5leHBvcnRzLmZhbHNlRG9jcyA9IGZhbHNlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaURvY3MgPSB2b2lkIDA7XG52YXIgaURvY3MgPSB7XG4gIG5hbWU6ICdpJyxcbiAgY2F0ZWdvcnk6ICdDb25zdGFudHMnLFxuICBzeW50YXg6IFsnaSddLFxuICBkZXNjcmlwdGlvbjogJ0ltYWdpbmFyeSB1bml0LCBkZWZpbmVkIGFzIGkqaT0tMS4gQSBjb21wbGV4IG51bWJlciBpcyBkZXNjcmliZWQgYXMgYSArIGIqaSwgd2hlcmUgYSBpcyB0aGUgcmVhbCBwYXJ0LCBhbmQgYiBpcyB0aGUgaW1hZ2luYXJ5IHBhcnQuJyxcbiAgZXhhbXBsZXM6IFsnaScsICdpICogaScsICdzcXJ0KC0xKSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMuaURvY3MgPSBpRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubnVsbERvY3MgPSB2b2lkIDA7XG52YXIgbnVsbERvY3MgPSB7XG4gIG5hbWU6ICdudWxsJyxcbiAgY2F0ZWdvcnk6ICdDb25zdGFudHMnLFxuICBzeW50YXg6IFsnbnVsbCddLFxuICBkZXNjcmlwdGlvbjogJ1ZhbHVlIG51bGwnLFxuICBleGFtcGxlczogWydudWxsJ10sXG4gIHNlZWFsc286IFsndHJ1ZScsICdmYWxzZSddXG59O1xuZXhwb3J0cy5udWxsRG9jcyA9IG51bGxEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5waGlEb2NzID0gdm9pZCAwO1xudmFyIHBoaURvY3MgPSB7XG4gIG5hbWU6ICdwaGknLFxuICBjYXRlZ29yeTogJ0NvbnN0YW50cycsXG4gIHN5bnRheDogWydwaGknXSxcbiAgZGVzY3JpcHRpb246ICdQaGkgaXMgdGhlIGdvbGRlbiByYXRpby4gVHdvIHF1YW50aXRpZXMgYXJlIGluIHRoZSBnb2xkZW4gcmF0aW8gaWYgdGhlaXIgcmF0aW8gaXMgdGhlIHNhbWUgYXMgdGhlIHJhdGlvIG9mIHRoZWlyIHN1bSB0byB0aGUgbGFyZ2VyIG9mIHRoZSB0d28gcXVhbnRpdGllcy4gUGhpIGlzIGRlZmluZWQgYXMgYCgxICsgc3FydCg1KSkgLyAyYCBhbmQgaXMgYXBwcm94aW1hdGVseSAxLjYxODAzNC4uLicsXG4gIGV4YW1wbGVzOiBbJ3BoaSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMucGhpRG9jcyA9IHBoaURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBpRG9jcyA9IHZvaWQgMDtcbnZhciBwaURvY3MgPSB7XG4gIG5hbWU6ICdwaScsXG4gIGNhdGVnb3J5OiAnQ29uc3RhbnRzJyxcbiAgc3ludGF4OiBbJ3BpJ10sXG4gIGRlc2NyaXB0aW9uOiAnVGhlIG51bWJlciBwaSBpcyBhIG1hdGhlbWF0aWNhbCBjb25zdGFudCB0aGF0IGlzIHRoZSByYXRpbyBvZiBhIGNpcmNsZVxcJ3MgY2lyY3VtZmVyZW5jZSB0byBpdHMgZGlhbWV0ZXIsIGFuZCBpcyBhcHByb3hpbWF0ZWx5IGVxdWFsIHRvIDMuMTQxNTknLFxuICBleGFtcGxlczogWydwaScsICdzaW4ocGkvMiknXSxcbiAgc2VlYWxzbzogWyd0YXUnXVxufTtcbmV4cG9ydHMucGlEb2NzID0gcGlEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy50YXVEb2NzID0gdm9pZCAwO1xudmFyIHRhdURvY3MgPSB7XG4gIG5hbWU6ICd0YXUnLFxuICBjYXRlZ29yeTogJ0NvbnN0YW50cycsXG4gIHN5bnRheDogWyd0YXUnXSxcbiAgZGVzY3JpcHRpb246ICdUYXUgaXMgdGhlIHJhdGlvIGNvbnN0YW50IG9mIGEgY2lyY2xlXFwncyBjaXJjdW1mZXJlbmNlIHRvIHJhZGl1cywgZXF1YWwgdG8gMiAqIHBpLCBhcHByb3hpbWF0ZWx5IDYuMjgzMi4nLFxuICBleGFtcGxlczogWyd0YXUnLCAnMiAqIHBpJ10sXG4gIHNlZWFsc286IFsncGknXVxufTtcbmV4cG9ydHMudGF1RG9jcyA9IHRhdURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnRydWVEb2NzID0gdm9pZCAwO1xudmFyIHRydWVEb2NzID0ge1xuICBuYW1lOiAndHJ1ZScsXG4gIGNhdGVnb3J5OiAnQ29uc3RhbnRzJyxcbiAgc3ludGF4OiBbJ3RydWUnXSxcbiAgZGVzY3JpcHRpb246ICdCb29sZWFuIHZhbHVlIHRydWUnLFxuICBleGFtcGxlczogWyd0cnVlJ10sXG4gIHNlZWFsc286IFsnZmFsc2UnXVxufTtcbmV4cG9ydHMudHJ1ZURvY3MgPSB0cnVlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudmVyc2lvbkRvY3MgPSB2b2lkIDA7XG52YXIgdmVyc2lvbkRvY3MgPSB7XG4gIG5hbWU6ICd2ZXJzaW9uJyxcbiAgY2F0ZWdvcnk6ICdDb25zdGFudHMnLFxuICBzeW50YXg6IFsndmVyc2lvbiddLFxuICBkZXNjcmlwdGlvbjogJ0Egc3RyaW5nIHdpdGggdGhlIHZlcnNpb24gbnVtYmVyIG9mIG1hdGguanMnLFxuICBleGFtcGxlczogWyd2ZXJzaW9uJ10sXG4gIHNlZWFsc286IFtdXG59O1xuZXhwb3J0cy52ZXJzaW9uRG9jcyA9IHZlcnNpb25Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5iaWdudW1iZXJEb2NzID0gdm9pZCAwO1xudmFyIGJpZ251bWJlckRvY3MgPSB7XG4gIG5hbWU6ICdiaWdudW1iZXInLFxuICBjYXRlZ29yeTogJ0NvbnN0cnVjdGlvbicsXG4gIHN5bnRheDogWydiaWdudW1iZXIoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDcmVhdGUgYSBiaWcgbnVtYmVyIGZyb20gYSBudW1iZXIgb3Igc3RyaW5nLicsXG4gIGV4YW1wbGVzOiBbJzAuMSArIDAuMicsICdiaWdudW1iZXIoMC4xKSArIGJpZ251bWJlcigwLjIpJywgJ2JpZ251bWJlcihcIjcuMlwiKScsICdiaWdudW1iZXIoXCI3LjJlNTAwXCIpJywgJ2JpZ251bWJlcihbMC4xLCAwLjIsIDAuM10pJ10sXG4gIHNlZWFsc286IFsnYm9vbGVhbicsICdjb21wbGV4JywgJ2ZyYWN0aW9uJywgJ2luZGV4JywgJ21hdHJpeCcsICdzdHJpbmcnLCAndW5pdCddXG59O1xuZXhwb3J0cy5iaWdudW1iZXJEb2NzID0gYmlnbnVtYmVyRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYm9vbGVhbkRvY3MgPSB2b2lkIDA7XG52YXIgYm9vbGVhbkRvY3MgPSB7XG4gIG5hbWU6ICdib29sZWFuJyxcbiAgY2F0ZWdvcnk6ICdDb25zdHJ1Y3Rpb24nLFxuICBzeW50YXg6IFsneCcsICdib29sZWFuKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29udmVydCBhIHN0cmluZyBvciBudW1iZXIgaW50byBhIGJvb2xlYW4uJyxcbiAgZXhhbXBsZXM6IFsnYm9vbGVhbigwKScsICdib29sZWFuKDEpJywgJ2Jvb2xlYW4oMyknLCAnYm9vbGVhbihcInRydWVcIiknLCAnYm9vbGVhbihcImZhbHNlXCIpJywgJ2Jvb2xlYW4oWzEsIDAsIDEsIDFdKSddLFxuICBzZWVhbHNvOiBbJ2JpZ251bWJlcicsICdjb21wbGV4JywgJ2luZGV4JywgJ21hdHJpeCcsICdudW1iZXInLCAnc3RyaW5nJywgJ3VuaXQnXVxufTtcbmV4cG9ydHMuYm9vbGVhbkRvY3MgPSBib29sZWFuRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tcGxleERvY3MgPSB2b2lkIDA7XG52YXIgY29tcGxleERvY3MgPSB7XG4gIG5hbWU6ICdjb21wbGV4JyxcbiAgY2F0ZWdvcnk6ICdDb25zdHJ1Y3Rpb24nLFxuICBzeW50YXg6IFsnY29tcGxleCgpJywgJ2NvbXBsZXgocmUsIGltKScsICdjb21wbGV4KHN0cmluZyknXSxcbiAgZGVzY3JpcHRpb246ICdDcmVhdGUgYSBjb21wbGV4IG51bWJlci4nLFxuICBleGFtcGxlczogWydjb21wbGV4KCknLCAnY29tcGxleCgyLCAzKScsICdjb21wbGV4KFwiNyAtIDJpXCIpJ10sXG4gIHNlZWFsc286IFsnYmlnbnVtYmVyJywgJ2Jvb2xlYW4nLCAnaW5kZXgnLCAnbWF0cml4JywgJ251bWJlcicsICdzdHJpbmcnLCAndW5pdCddXG59O1xuZXhwb3J0cy5jb21wbGV4RG9jcyA9IGNvbXBsZXhEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVVbml0RG9jcyA9IHZvaWQgMDtcbnZhciBjcmVhdGVVbml0RG9jcyA9IHtcbiAgbmFtZTogJ2NyZWF0ZVVuaXQnLFxuICBjYXRlZ29yeTogJ0NvbnN0cnVjdGlvbicsXG4gIHN5bnRheDogWydjcmVhdGVVbml0KGRlZmluaXRpb25zKScsICdjcmVhdGVVbml0KG5hbWUsIGRlZmluaXRpb24pJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIGEgdXNlci1kZWZpbmVkIHVuaXQgYW5kIHJlZ2lzdGVyIGl0IHdpdGggdGhlIFVuaXQgdHlwZS4nLFxuICBleGFtcGxlczogWydjcmVhdGVVbml0KFwiZm9vXCIpJywgJ2NyZWF0ZVVuaXQoXCJrbm90XCIsIHtkZWZpbml0aW9uOiBcIjAuNTE0NDQ0NDQ0IG0vc1wiLCBhbGlhc2VzOiBbXCJrbm90c1wiLCBcImt0XCIsIFwia3RzXCJdfSknLCAnY3JlYXRlVW5pdChcIm1waFwiLCBcIjEgbWlsZS9ob3VyXCIpJ10sXG4gIHNlZWFsc286IFsndW5pdCcsICdzcGxpdFVuaXQnXVxufTtcbmV4cG9ydHMuY3JlYXRlVW5pdERvY3MgPSBjcmVhdGVVbml0RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZnJhY3Rpb25Eb2NzID0gdm9pZCAwO1xudmFyIGZyYWN0aW9uRG9jcyA9IHtcbiAgbmFtZTogJ2ZyYWN0aW9uJyxcbiAgY2F0ZWdvcnk6ICdDb25zdHJ1Y3Rpb24nLFxuICBzeW50YXg6IFsnZnJhY3Rpb24obnVtKScsICdmcmFjdGlvbihudW0sZGVuKSddLFxuICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSBhIGZyYWN0aW9uIGZyb20gYSBudW1iZXIgb3IgZnJvbSBhIG51bWVyYXRvciBhbmQgZGVub21pbmF0b3IuJyxcbiAgZXhhbXBsZXM6IFsnZnJhY3Rpb24oMC4xMjUpJywgJ2ZyYWN0aW9uKDEsIDMpICsgZnJhY3Rpb24oMiwgNSknXSxcbiAgc2VlYWxzbzogWydiaWdudW1iZXInLCAnYm9vbGVhbicsICdjb21wbGV4JywgJ2luZGV4JywgJ21hdHJpeCcsICdzdHJpbmcnLCAndW5pdCddXG59O1xuZXhwb3J0cy5mcmFjdGlvbkRvY3MgPSBmcmFjdGlvbkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmluZGV4RG9jcyA9IHZvaWQgMDtcbnZhciBpbmRleERvY3MgPSB7XG4gIG5hbWU6ICdpbmRleCcsXG4gIGNhdGVnb3J5OiAnQ29uc3RydWN0aW9uJyxcbiAgc3ludGF4OiBbJ1tzdGFydF0nLCAnW3N0YXJ0OmVuZF0nLCAnW3N0YXJ0OnN0ZXA6ZW5kXScsICdbc3RhcnQxLCBzdGFydCAyLCAuLi5dJywgJ1tzdGFydDE6ZW5kMSwgc3RhcnQyOmVuZDIsIC4uLl0nLCAnW3N0YXJ0MTpzdGVwMTplbmQxLCBzdGFydDI6c3RlcDI6ZW5kMiwgLi4uXSddLFxuICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSBhbiBpbmRleCB0byBnZXQgb3IgcmVwbGFjZSBhIHN1YnNldCBvZiBhIG1hdHJpeCcsXG4gIGV4YW1wbGVzOiBbJ1tdJywgJ1sxLCAyLCAzXScsICdBID0gWzEsIDIsIDM7IDQsIDUsIDZdJywgJ0FbMSwgOl0nLCAnQVsxLCAyXSA9IDUwJywgJ0FbMDoyLCAwOjJdID0gb25lcygyLCAyKSddLFxuICBzZWVhbHNvOiBbJ2JpZ251bWJlcicsICdib29sZWFuJywgJ2NvbXBsZXgnLCAnbWF0cml4LCcsICdudW1iZXInLCAncmFuZ2UnLCAnc3RyaW5nJywgJ3VuaXQnXVxufTtcbmV4cG9ydHMuaW5kZXhEb2NzID0gaW5kZXhEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tYXRyaXhEb2NzID0gdm9pZCAwO1xudmFyIG1hdHJpeERvY3MgPSB7XG4gIG5hbWU6ICdtYXRyaXgnLFxuICBjYXRlZ29yeTogJ0NvbnN0cnVjdGlvbicsXG4gIHN5bnRheDogWydbXScsICdbYTEsIGIxLCAuLi47IGEyLCBiMiwgLi4uXScsICdtYXRyaXgoKScsICdtYXRyaXgoXCJkZW5zZVwiKScsICdtYXRyaXgoWy4uLl0pJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIGEgbWF0cml4LicsXG4gIGV4YW1wbGVzOiBbJ1tdJywgJ1sxLCAyLCAzXScsICdbMSwgMiwgMzsgNCwgNSwgNl0nLCAnbWF0cml4KCknLCAnbWF0cml4KFszLCA0XSknLCAnbWF0cml4KFszLCA0OyA1LCA2XSwgXCJzcGFyc2VcIiknLCAnbWF0cml4KFszLCA0OyA1LCA2XSwgXCJzcGFyc2VcIiwgXCJudW1iZXJcIiknXSxcbiAgc2VlYWxzbzogWydiaWdudW1iZXInLCAnYm9vbGVhbicsICdjb21wbGV4JywgJ2luZGV4JywgJ251bWJlcicsICdzdHJpbmcnLCAndW5pdCcsICdzcGFyc2UnXVxufTtcbmV4cG9ydHMubWF0cml4RG9jcyA9IG1hdHJpeERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm51bWJlckRvY3MgPSB2b2lkIDA7XG52YXIgbnVtYmVyRG9jcyA9IHtcbiAgbmFtZTogJ251bWJlcicsXG4gIGNhdGVnb3J5OiAnQ29uc3RydWN0aW9uJyxcbiAgc3ludGF4OiBbJ3gnLCAnbnVtYmVyKHgpJywgJ251bWJlcih1bml0LCB2YWx1ZWxlc3NVbml0KSddLFxuICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSBhIG51bWJlciBvciBjb252ZXJ0IGEgc3RyaW5nIG9yIGJvb2xlYW4gaW50byBhIG51bWJlci4nLFxuICBleGFtcGxlczogWycyJywgJzJlMycsICc0LjA1JywgJ251bWJlcigyKScsICdudW1iZXIoXCI3LjJcIiknLCAnbnVtYmVyKHRydWUpJywgJ251bWJlcihbdHJ1ZSwgZmFsc2UsIHRydWUsIHRydWVdKScsICdudW1iZXIodW5pdChcIjUyY21cIiksIFwibVwiKSddLFxuICBzZWVhbHNvOiBbJ2JpZ251bWJlcicsICdib29sZWFuJywgJ2NvbXBsZXgnLCAnZnJhY3Rpb24nLCAnaW5kZXgnLCAnbWF0cml4JywgJ3N0cmluZycsICd1bml0J11cbn07XG5leHBvcnRzLm51bWJlckRvY3MgPSBudW1iZXJEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zcGFyc2VEb2NzID0gdm9pZCAwO1xudmFyIHNwYXJzZURvY3MgPSB7XG4gIG5hbWU6ICdzcGFyc2UnLFxuICBjYXRlZ29yeTogJ0NvbnN0cnVjdGlvbicsXG4gIHN5bnRheDogWydzcGFyc2UoKScsICdzcGFyc2UoW2ExLCBiMSwgLi4uOyBhMSwgYjIsIC4uLl0pJywgJ3NwYXJzZShbYTEsIGIxLCAuLi47IGExLCBiMiwgLi4uXSwgXCJudW1iZXJcIiknXSxcbiAgZGVzY3JpcHRpb246ICdDcmVhdGUgYSBzcGFyc2UgbWF0cml4LicsXG4gIGV4YW1wbGVzOiBbJ3NwYXJzZSgpJywgJ3NwYXJzZShbMywgNDsgNSwgNl0pJywgJ3NwYXJzZShbMywgMDsgNSwgMF0sIFwibnVtYmVyXCIpJ10sXG4gIHNlZWFsc286IFsnYmlnbnVtYmVyJywgJ2Jvb2xlYW4nLCAnY29tcGxleCcsICdpbmRleCcsICdudW1iZXInLCAnc3RyaW5nJywgJ3VuaXQnLCAnbWF0cml4J11cbn07XG5leHBvcnRzLnNwYXJzZURvY3MgPSBzcGFyc2VEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zcGxpdFVuaXREb2NzID0gdm9pZCAwO1xudmFyIHNwbGl0VW5pdERvY3MgPSB7XG4gIG5hbWU6ICdzcGxpdFVuaXQnLFxuICBjYXRlZ29yeTogJ0NvbnN0cnVjdGlvbicsXG4gIHN5bnRheDogWydzcGxpdFVuaXQodW5pdDogVW5pdCwgcGFydHM6IFVuaXRbXSknXSxcbiAgZGVzY3JpcHRpb246ICdTcGxpdCBhIHVuaXQgaW4gYW4gYXJyYXkgb2YgdW5pdHMgd2hvc2Ugc3VtIGlzIGVxdWFsIHRvIHRoZSBvcmlnaW5hbCB1bml0LicsXG4gIGV4YW1wbGVzOiBbJ3NwbGl0VW5pdCgxIG0sIFtcImZlZXRcIiwgXCJpbmNoXCJdKSddLFxuICBzZWVhbHNvOiBbJ3VuaXQnLCAnY3JlYXRlVW5pdCddXG59O1xuZXhwb3J0cy5zcGxpdFVuaXREb2NzID0gc3BsaXRVbml0RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3RyaW5nRG9jcyA9IHZvaWQgMDtcbnZhciBzdHJpbmdEb2NzID0ge1xuICBuYW1lOiAnc3RyaW5nJyxcbiAgY2F0ZWdvcnk6ICdDb25zdHJ1Y3Rpb24nLFxuICBzeW50YXg6IFsnXCJ0ZXh0XCInLCAnc3RyaW5nKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIGEgc3RyaW5nIG9yIGNvbnZlcnQgYSB2YWx1ZSB0byBhIHN0cmluZycsXG4gIGV4YW1wbGVzOiBbJ1wiSGVsbG8gV29ybGQhXCInLCAnc3RyaW5nKDQuMiknLCAnc3RyaW5nKDMgKyAyaSknXSxcbiAgc2VlYWxzbzogWydiaWdudW1iZXInLCAnYm9vbGVhbicsICdjb21wbGV4JywgJ2luZGV4JywgJ21hdHJpeCcsICdudW1iZXInLCAndW5pdCddXG59O1xuZXhwb3J0cy5zdHJpbmdEb2NzID0gc3RyaW5nRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudW5pdERvY3MgPSB2b2lkIDA7XG52YXIgdW5pdERvY3MgPSB7XG4gIG5hbWU6ICd1bml0JyxcbiAgY2F0ZWdvcnk6ICdDb25zdHJ1Y3Rpb24nLFxuICBzeW50YXg6IFsndmFsdWUgdW5pdCcsICd1bml0KHZhbHVlLCB1bml0KScsICd1bml0KHN0cmluZyknXSxcbiAgZGVzY3JpcHRpb246ICdDcmVhdGUgYSB1bml0LicsXG4gIGV4YW1wbGVzOiBbJzUuNSBtbScsICczIGluY2gnLCAndW5pdCg3LjEsIFwia2lsb2dyYW1cIiknLCAndW5pdChcIjIzIGRlZ1wiKSddLFxuICBzZWVhbHNvOiBbJ2JpZ251bWJlcicsICdib29sZWFuJywgJ2NvbXBsZXgnLCAnaW5kZXgnLCAnbWF0cml4JywgJ251bWJlcicsICdzdHJpbmcnXVxufTtcbmV4cG9ydHMudW5pdERvY3MgPSB1bml0RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29uZmlnRG9jcyA9IHZvaWQgMDtcbnZhciBjb25maWdEb2NzID0ge1xuICBuYW1lOiAnY29uZmlnJyxcbiAgY2F0ZWdvcnk6ICdDb3JlJyxcbiAgc3ludGF4OiBbJ2NvbmZpZygpJywgJ2NvbmZpZyhvcHRpb25zKSddLFxuICBkZXNjcmlwdGlvbjogJ0dldCBjb25maWd1cmF0aW9uIG9yIGNoYW5nZSBjb25maWd1cmF0aW9uLicsXG4gIGV4YW1wbGVzOiBbJ2NvbmZpZygpJywgJzEvMyArIDEvNCcsICdjb25maWcoe251bWJlcjogXCJGcmFjdGlvblwifSknLCAnMS8zICsgMS80J10sXG4gIHNlZWFsc286IFtdXG59O1xuZXhwb3J0cy5jb25maWdEb2NzID0gY29uZmlnRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaW1wb3J0RG9jcyA9IHZvaWQgMDtcbnZhciBpbXBvcnREb2NzID0ge1xuICBuYW1lOiAnaW1wb3J0JyxcbiAgY2F0ZWdvcnk6ICdDb3JlJyxcbiAgc3ludGF4OiBbJ2ltcG9ydChmdW5jdGlvbnMpJywgJ2ltcG9ydChmdW5jdGlvbnMsIG9wdGlvbnMpJ10sXG4gIGRlc2NyaXB0aW9uOiAnSW1wb3J0IGZ1bmN0aW9ucyBvciBjb25zdGFudHMgZnJvbSBhbiBvYmplY3QuJyxcbiAgZXhhbXBsZXM6IFsnaW1wb3J0KHtteUZuOiBmKHgpPXheMiwgbXlDb25zdGFudDogMzIgfSknLCAnbXlGbigyKScsICdteUNvbnN0YW50J10sXG4gIHNlZWFsc286IFtdXG59O1xuZXhwb3J0cy5pbXBvcnREb2NzID0gaW1wb3J0RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudHlwZWREb2NzID0gdm9pZCAwO1xudmFyIHR5cGVkRG9jcyA9IHtcbiAgbmFtZTogJ3R5cGVkJyxcbiAgY2F0ZWdvcnk6ICdDb3JlJyxcbiAgc3ludGF4OiBbJ3R5cGVkKHNpZ25hdHVyZXMpJywgJ3R5cGVkKG5hbWUsIHNpZ25hdHVyZXMpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIGEgdHlwZWQgZnVuY3Rpb24uJyxcbiAgZXhhbXBsZXM6IFsnZG91YmxlID0gdHlwZWQoeyBcIm51bWJlciwgbnVtYmVyXCI6IGYoeCk9eCt4IH0pJywgJ2RvdWJsZSgyKScsICdkb3VibGUoXCJoZWxsb1wiKSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMudHlwZWREb2NzID0gdHlwZWREb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lbWJlZGRlZERvY3MgPSB2b2lkIDA7XG5cbnZhciBfYmlnbnVtYmVyID0gcmVxdWlyZShcIi4vY29uc3RydWN0aW9uL2JpZ251bWJlclwiKTtcblxudmFyIF90eXBlT2YgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy90eXBlT2ZcIik7XG5cbnZhciBfaXNaZXJvID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdXRpbHMvaXNaZXJvXCIpO1xuXG52YXIgX2lzUHJpbWUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy9pc1ByaW1lXCIpO1xuXG52YXIgX2lzUG9zaXRpdmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy9pc1Bvc2l0aXZlXCIpO1xuXG52YXIgX2lzTnVtZXJpYyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3V0aWxzL2lzTnVtZXJpY1wiKTtcblxudmFyIF9oYXNOdW1lcmljVmFsdWUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy9oYXNOdW1lcmljVmFsdWVcIik7XG5cbnZhciBfaXNOZWdhdGl2ZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3V0aWxzL2lzTmVnYXRpdmVcIik7XG5cbnZhciBfaXNJbnRlZ2VyID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdXRpbHMvaXNJbnRlZ2VyXCIpO1xuXG52YXIgX2lzTmFOID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdXRpbHMvaXNOYU5cIik7XG5cbnZhciBfZm9ybWF0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdXRpbHMvZm9ybWF0XCIpO1xuXG52YXIgX2Nsb25lID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdXRpbHMvY2xvbmVcIik7XG5cbnZhciBfdG8gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91bml0cy90b1wiKTtcblxudmFyIF90YW5oID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3RhbmhcIik7XG5cbnZhciBfdGFuID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3RhblwiKTtcblxudmFyIF9zaW5oID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NpbmhcIik7XG5cbnZhciBfc2VjaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9zZWNoXCIpO1xuXG52YXIgX3NlYyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9zZWNcIik7XG5cbnZhciBfY3NjaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9jc2NoXCIpO1xuXG52YXIgX2NzYyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9jc2NcIik7XG5cbnZhciBfY290aCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9jb3RoXCIpO1xuXG52YXIgX2NvdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9jb3RcIik7XG5cbnZhciBfY29zaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9jb3NoXCIpO1xuXG52YXIgX2NvcyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9jb3NcIik7XG5cbnZhciBfYXRhbiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hdGFuMlwiKTtcblxudmFyIF9hdGFuaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hdGFuaFwiKTtcblxudmFyIF9hdGFuMiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hdGFuXCIpO1xuXG52YXIgX2FzaW5oID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2FzaW5oXCIpO1xuXG52YXIgX2FzaW4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXNpblwiKTtcblxudmFyIF9hc2VjaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hc2VjaFwiKTtcblxudmFyIF9hc2VjID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2FzZWNcIik7XG5cbnZhciBfYWNzY2ggPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNzY2hcIik7XG5cbnZhciBfYWNzYyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY3NjXCIpO1xuXG52YXIgX2Fjb3RoID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjb3RoXCIpO1xuXG52YXIgX2Fjb3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNvdFwiKTtcblxudmFyIF9hY29zaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY29zaFwiKTtcblxudmFyIF9hY29zID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjb3NcIik7XG5cbnZhciBfc3VtID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RhdGlzdGljcy9zdW1cIik7XG5cbnZhciBfc3RkID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RhdGlzdGljcy9zdGRcIik7XG5cbnZhciBfcXVhbnRpbGVTZXEgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zdGF0aXN0aWNzL3F1YW50aWxlU2VxXCIpO1xuXG52YXIgX3Byb2QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zdGF0aXN0aWNzL3Byb2RcIik7XG5cbnZhciBfbW9kZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbW9kZVwiKTtcblxudmFyIF9taW4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zdGF0aXN0aWNzL21pblwiKTtcblxudmFyIF9tZWRpYW4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zdGF0aXN0aWNzL21lZGlhblwiKTtcblxudmFyIF9tZWFuID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RhdGlzdGljcy9tZWFuXCIpO1xuXG52YXIgX21heCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbWF4XCIpO1xuXG52YXIgX21hZCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbWFkXCIpO1xuXG52YXIgX2VyZiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3NwZWNpYWwvZXJmXCIpO1xuXG52YXIgX3NldFVuaW9uID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldFVuaW9uXCIpO1xuXG52YXIgX3NldFN5bURpZmZlcmVuY2UgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zZXQvc2V0U3ltRGlmZmVyZW5jZVwiKTtcblxudmFyIF9zZXRTaXplID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldFNpemVcIik7XG5cbnZhciBfc2V0UG93ZXJzZXQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zZXQvc2V0UG93ZXJzZXRcIik7XG5cbnZhciBfc2V0TXVsdGlwbGljaXR5ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldE11bHRpcGxpY2l0eVwiKTtcblxudmFyIF9zZXRJc1N1YnNldCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3NldC9zZXRJc1N1YnNldFwiKTtcblxudmFyIF9zZXRJbnRlcnNlY3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zZXQvc2V0SW50ZXJzZWN0XCIpO1xuXG52YXIgX3NldERpc3RpbmN0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldERpc3RpbmN0XCIpO1xuXG52YXIgX3NldERpZmZlcmVuY2UgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zZXQvc2V0RGlmZmVyZW5jZVwiKTtcblxudmFyIF9zZXRDYXJ0ZXNpYW4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zZXQvc2V0Q2FydGVzaWFuXCIpO1xuXG52YXIgX3VuZXF1YWwgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9yZWxhdGlvbmFsL3VuZXF1YWxcIik7XG5cbnZhciBfc21hbGxlckVxID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcmVsYXRpb25hbC9zbWFsbGVyRXFcIik7XG5cbnZhciBfc21hbGxlciA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3JlbGF0aW9uYWwvc21hbGxlclwiKTtcblxudmFyIF9sYXJnZXJFcSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3JlbGF0aW9uYWwvbGFyZ2VyRXFcIik7XG5cbnZhciBfbGFyZ2VyID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcmVsYXRpb25hbC9sYXJnZXJcIik7XG5cbnZhciBfZXF1YWxUZXh0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcmVsYXRpb25hbC9lcXVhbFRleHRcIik7XG5cbnZhciBfZXF1YWwgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9yZWxhdGlvbmFsL2VxdWFsXCIpO1xuXG52YXIgX2RlZXBFcXVhbCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3JlbGF0aW9uYWwvZGVlcEVxdWFsXCIpO1xuXG52YXIgX2NvbXBhcmVUZXh0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcmVsYXRpb25hbC9jb21wYXJlVGV4dFwiKTtcblxudmFyIF9jb21wYXJlTmF0dXJhbCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3JlbGF0aW9uYWwvY29tcGFyZU5hdHVyYWxcIik7XG5cbnZhciBfY29tcGFyZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3JlbGF0aW9uYWwvY29tcGFyZVwiKTtcblxudmFyIF9yYW5kb21JbnQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9yYW5kb21JbnRcIik7XG5cbnZhciBfcmFuZG9tID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcHJvYmFiaWxpdHkvcmFuZG9tXCIpO1xuXG52YXIgX3BpY2tSYW5kb20gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9waWNrUmFuZG9tXCIpO1xuXG52YXIgX3Blcm11dGF0aW9ucyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3Blcm11dGF0aW9uc1wiKTtcblxudmFyIF9tdWx0aW5vbWlhbCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L211bHRpbm9taWFsXCIpO1xuXG52YXIgX2tsZGl2ZXJnZW5jZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2tsZGl2ZXJnZW5jZVwiKTtcblxudmFyIF9nYW1tYSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2dhbW1hXCIpO1xuXG52YXIgX2ZhY3RvcmlhbCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2ZhY3RvcmlhbFwiKTtcblxudmFyIF9jb21iaW5hdGlvbnMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9jb21iaW5hdGlvbnNcIik7XG5cbnZhciBfY29tYmluYXRpb25zV2l0aFJlcCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2NvbWJpbmF0aW9uc1dpdGhSZXBcIik7XG5cbnZhciBfemVyb3MgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvemVyb3NcIik7XG5cbnZhciBfdHJhbnNwb3NlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3RyYW5zcG9zZVwiKTtcblxudmFyIF90cmFjZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC90cmFjZVwiKTtcblxudmFyIF9zdWJzZXQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvc3Vic2V0XCIpO1xuXG52YXIgX3NxdWVlemUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvc3F1ZWV6ZVwiKTtcblxudmFyIF9zb3J0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3NvcnRcIik7XG5cbnZhciBfc2l6ZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9zaXplXCIpO1xuXG52YXIgX3Jlc2hhcGUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvcmVzaGFwZVwiKTtcblxudmFyIF9yZXNpemUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvcmVzaXplXCIpO1xuXG52YXIgX3JhbmdlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3JhbmdlXCIpO1xuXG52YXIgX3BhcnRpdGlvblNlbGVjdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9wYXJ0aXRpb25TZWxlY3RcIik7XG5cbnZhciBfb25lcyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9vbmVzXCIpO1xuXG52YXIgX21hcCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9tYXBcIik7XG5cbnZhciBfa3JvbiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9rcm9uXCIpO1xuXG52YXIgX2ludiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9pbnZcIik7XG5cbnZhciBfZm9yRWFjaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9mb3JFYWNoXCIpO1xuXG52YXIgX2ZsYXR0ZW4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvZmxhdHRlblwiKTtcblxudmFyIF9maWx0ZXIgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvZmlsdGVyXCIpO1xuXG52YXIgX2lkZW50aXR5ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2lkZW50aXR5XCIpO1xuXG52YXIgX2dldE1hdHJpeERhdGFUeXBlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2dldE1hdHJpeERhdGFUeXBlXCIpO1xuXG52YXIgX2RvdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9kb3RcIik7XG5cbnZhciBfZGlhZyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9kaWFnXCIpO1xuXG52YXIgX2RldCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9kZXRcIik7XG5cbnZhciBfY3RyYW5zcG9zZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9jdHJhbnNwb3NlXCIpO1xuXG52YXIgX2Nyb3NzID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2Nyb3NzXCIpO1xuXG52YXIgX2NvbmNhdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9jb25jYXRcIik7XG5cbnZhciBfeG9yID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbG9naWNhbC94b3JcIik7XG5cbnZhciBfb3IgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9sb2dpY2FsL29yXCIpO1xuXG52YXIgX25vdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2xvZ2ljYWwvbm90XCIpO1xuXG52YXIgX2FuZCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2xvZ2ljYWwvYW5kXCIpO1xuXG52YXIgX2ludGVyc2VjdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2dlb21ldHJ5L2ludGVyc2VjdFwiKTtcblxudmFyIF9kaXN0YW5jZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2dlb21ldHJ5L2Rpc3RhbmNlXCIpO1xuXG52YXIgX2hlbHAgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9leHByZXNzaW9uL2hlbHBcIik7XG5cbnZhciBfZXZhbHVhdGUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9leHByZXNzaW9uL2V2YWx1YXRlXCIpO1xuXG52YXIgX2ltID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vY29tcGxleC9pbVwiKTtcblxudmFyIF9yZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2NvbXBsZXgvcmVcIik7XG5cbnZhciBfY29uaiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2NvbXBsZXgvY29ualwiKTtcblxudmFyIF9hcmcgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9jb21wbGV4L2FyZ1wiKTtcblxudmFyIF90eXBlZCA9IHJlcXVpcmUoXCIuL2NvcmUvdHlwZWRcIik7XG5cbnZhciBfaW1wb3J0ID0gcmVxdWlyZShcIi4vY29yZS9pbXBvcnRcIik7XG5cbnZhciBfY29uZmlnID0gcmVxdWlyZShcIi4vY29yZS9jb25maWdcIik7XG5cbnZhciBfc3RpcmxpbmdTID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vY29tYmluYXRvcmljcy9zdGlybGluZ1MyXCIpO1xuXG52YXIgX2NvbXBvc2l0aW9uID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vY29tYmluYXRvcmljcy9jb21wb3NpdGlvblwiKTtcblxudmFyIF9jYXRhbGFuID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vY29tYmluYXRvcmljcy9jYXRhbGFuXCIpO1xuXG52YXIgX2JlbGxOdW1iZXJzID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vY29tYmluYXRvcmljcy9iZWxsTnVtYmVyc1wiKTtcblxudmFyIF9yaWdodExvZ1NoaWZ0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYml0d2lzZS9yaWdodExvZ1NoaWZ0XCIpO1xuXG52YXIgX3JpZ2h0QXJpdGhTaGlmdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2JpdHdpc2UvcmlnaHRBcml0aFNoaWZ0XCIpO1xuXG52YXIgX2xlZnRTaGlmdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2JpdHdpc2UvbGVmdFNoaWZ0XCIpO1xuXG52YXIgX2JpdFhvciA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2JpdHdpc2UvYml0WG9yXCIpO1xuXG52YXIgX2JpdE9yID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYml0d2lzZS9iaXRPclwiKTtcblxudmFyIF9iaXROb3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9iaXR3aXNlL2JpdE5vdFwiKTtcblxudmFyIF9iaXRBbmQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9iaXR3aXNlL2JpdEFuZFwiKTtcblxudmFyIF94Z2NkID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy94Z2NkXCIpO1xuXG52YXIgX3VuYXJ5UGx1cyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvdW5hcnlQbHVzXCIpO1xuXG52YXIgX3VuYXJ5TWludXMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL3VuYXJ5TWludXNcIik7XG5cbnZhciBfc3F1YXJlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9zcXVhcmVcIik7XG5cbnZhciBfc3FydG0gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL3NxcnRtXCIpO1xuXG52YXIgX3NxcnQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL3NxcnRcIik7XG5cbnZhciBfc2lnbiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvc2lnblwiKTtcblxudmFyIF9yb3VuZCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvcm91bmRcIik7XG5cbnZhciBfcG93ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9wb3dcIik7XG5cbnZhciBfbnRoUm9vdHMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL250aFJvb3RzXCIpO1xuXG52YXIgX250aFJvb3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL250aFJvb3RcIik7XG5cbnZhciBfbm9ybSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvbm9ybVwiKTtcblxudmFyIF9tdWx0aXBseSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvbXVsdGlwbHlcIik7XG5cbnZhciBfbW9kID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9tb2RcIik7XG5cbnZhciBfbG9nID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9sb2cxMFwiKTtcblxudmFyIF9sb2cxcCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvbG9nMXBcIik7XG5cbnZhciBfbG9nMiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvbG9nMlwiKTtcblxudmFyIF9sb2czID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9sb2dcIik7XG5cbnZhciBfbGNtID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9sY21cIik7XG5cbnZhciBfaHlwb3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2h5cG90XCIpO1xuXG52YXIgX2djZCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZ2NkXCIpO1xuXG52YXIgX2Zsb29yID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9mbG9vclwiKTtcblxudmFyIF9maXggPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2ZpeFwiKTtcblxudmFyIF9leHBtID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9leHBtMVwiKTtcblxudmFyIF9leHBtMiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZXhwbVwiKTtcblxudmFyIF9laWdzID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2VpZ3NcIik7XG5cbnZhciBfZXhwID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9leHBcIik7XG5cbnZhciBfZG90TXVsdGlwbHkgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2RvdE11bHRpcGx5XCIpO1xuXG52YXIgX2RvdERpdmlkZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZG90RGl2aWRlXCIpO1xuXG52YXIgX2RpdmlkZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZGl2aWRlXCIpO1xuXG52YXIgX2N1YmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2N1YmVcIik7XG5cbnZhciBfY2VpbCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvY2VpbFwiKTtcblxudmFyIF9jYnJ0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9jYnJ0XCIpO1xuXG52YXIgX2FkZCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvYWRkXCIpO1xuXG52YXIgX2FicyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvYWJzXCIpO1xuXG52YXIgX3FyID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYWxnZWJyYS9xclwiKTtcblxudmFyIF91c29sdmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hbGdlYnJhL3Vzb2x2ZVwiKTtcblxudmFyIF9zbHUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hbGdlYnJhL3NsdVwiKTtcblxudmFyIF9yYXRpb25hbGl6ZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FsZ2VicmEvcmF0aW9uYWxpemVcIik7XG5cbnZhciBfc2ltcGxpZnkgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hbGdlYnJhL3NpbXBsaWZ5XCIpO1xuXG52YXIgX2x1cCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FsZ2VicmEvbHVwXCIpO1xuXG52YXIgX2xzb2x2ZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FsZ2VicmEvbHNvbHZlXCIpO1xuXG52YXIgX2Rlcml2YXRpdmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hbGdlYnJhL2Rlcml2YXRpdmVcIik7XG5cbnZhciBfdmVyc2lvbiA9IHJlcXVpcmUoXCIuL2NvbnN0YW50cy92ZXJzaW9uXCIpO1xuXG52YXIgX3RydWUgPSByZXF1aXJlKFwiLi9jb25zdGFudHMvdHJ1ZVwiKTtcblxudmFyIF90YXUgPSByZXF1aXJlKFwiLi9jb25zdGFudHMvdGF1XCIpO1xuXG52YXIgX1NRUlQgPSByZXF1aXJlKFwiLi9jb25zdGFudHMvU1FSVDJcIik7XG5cbnZhciBfU1FSVDFfID0gcmVxdWlyZShcIi4vY29uc3RhbnRzL1NRUlQxXzJcIik7XG5cbnZhciBfcGhpID0gcmVxdWlyZShcIi4vY29uc3RhbnRzL3BoaVwiKTtcblxudmFyIF9waSA9IHJlcXVpcmUoXCIuL2NvbnN0YW50cy9waVwiKTtcblxudmFyIF9udWxsID0gcmVxdWlyZShcIi4vY29uc3RhbnRzL251bGxcIik7XG5cbnZhciBfTmFOID0gcmVxdWlyZShcIi4vY29uc3RhbnRzL05hTlwiKTtcblxudmFyIF9MT0cxMEUgPSByZXF1aXJlKFwiLi9jb25zdGFudHMvTE9HMTBFXCIpO1xuXG52YXIgX0xPRzJFID0gcmVxdWlyZShcIi4vY29uc3RhbnRzL0xPRzJFXCIpO1xuXG52YXIgX0xOID0gcmVxdWlyZShcIi4vY29uc3RhbnRzL0xOMTBcIik7XG5cbnZhciBfTE4yID0gcmVxdWlyZShcIi4vY29uc3RhbnRzL0xOMlwiKTtcblxudmFyIF9JbmZpbml0eSA9IHJlcXVpcmUoXCIuL2NvbnN0YW50cy9JbmZpbml0eVwiKTtcblxudmFyIF9pID0gcmVxdWlyZShcIi4vY29uc3RhbnRzL2lcIik7XG5cbnZhciBfZmFsc2UgPSByZXF1aXJlKFwiLi9jb25zdGFudHMvZmFsc2VcIik7XG5cbnZhciBfZSA9IHJlcXVpcmUoXCIuL2NvbnN0YW50cy9lXCIpO1xuXG52YXIgX3VuaXQgPSByZXF1aXJlKFwiLi9jb25zdHJ1Y3Rpb24vdW5pdFwiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi9jb25zdHJ1Y3Rpb24vc3RyaW5nXCIpO1xuXG52YXIgX3NwbGl0VW5pdCA9IHJlcXVpcmUoXCIuL2NvbnN0cnVjdGlvbi9zcGxpdFVuaXRcIik7XG5cbnZhciBfc3BhcnNlID0gcmVxdWlyZShcIi4vY29uc3RydWN0aW9uL3NwYXJzZVwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi9jb25zdHJ1Y3Rpb24vbnVtYmVyXCIpO1xuXG52YXIgX21hdHJpeCA9IHJlcXVpcmUoXCIuL2NvbnN0cnVjdGlvbi9tYXRyaXhcIik7XG5cbnZhciBfY29uc3RydWN0aW9uID0gcmVxdWlyZShcIi4vY29uc3RydWN0aW9uXCIpO1xuXG52YXIgX2ZyYWN0aW9uID0gcmVxdWlyZShcIi4vY29uc3RydWN0aW9uL2ZyYWN0aW9uXCIpO1xuXG52YXIgX2NyZWF0ZVVuaXQgPSByZXF1aXJlKFwiLi9jb25zdHJ1Y3Rpb24vY3JlYXRlVW5pdFwiKTtcblxudmFyIF9jb21wbGV4ID0gcmVxdWlyZShcIi4vY29uc3RydWN0aW9uL2NvbXBsZXhcIik7XG5cbnZhciBfYm9vbGVhbiA9IHJlcXVpcmUoXCIuL2NvbnN0cnVjdGlvbi9ib29sZWFuXCIpO1xuXG52YXIgX2RvdFBvdyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZG90UG93XCIpO1xuXG52YXIgX2x1c29sdmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hbGdlYnJhL2x1c29sdmVcIik7XG5cbnZhciBfc3VidHJhY3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL3N1YnRyYWN0XCIpO1xuXG52YXIgX3ZhcmlhbmNlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RhdGlzdGljcy92YXJpYW5jZVwiKTtcblxudmFyIF9zaW4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvc2luXCIpO1xuXG52YXIgX251bWVyaWMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy9udW1lcmljXCIpO1xuXG52YXIgX2NvbHVtbiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9jb2x1bW5cIik7XG5cbnZhciBfcm93ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3Jvd1wiKTtcblxudmFyIGVtYmVkZGVkRG9jcyA9IHtcbiAgLy8gY29uc3RydWN0aW9uIGZ1bmN0aW9uc1xuICBiaWdudW1iZXI6IF9iaWdudW1iZXIuYmlnbnVtYmVyRG9jcyxcbiAgXCJib29sZWFuXCI6IF9ib29sZWFuLmJvb2xlYW5Eb2NzLFxuICBjb21wbGV4OiBfY29tcGxleC5jb21wbGV4RG9jcyxcbiAgY3JlYXRlVW5pdDogX2NyZWF0ZVVuaXQuY3JlYXRlVW5pdERvY3MsXG4gIGZyYWN0aW9uOiBfZnJhY3Rpb24uZnJhY3Rpb25Eb2NzLFxuICBpbmRleDogX2NvbnN0cnVjdGlvbi5pbmRleERvY3MsXG4gIG1hdHJpeDogX21hdHJpeC5tYXRyaXhEb2NzLFxuICBudW1iZXI6IF9udW1iZXIubnVtYmVyRG9jcyxcbiAgc3BhcnNlOiBfc3BhcnNlLnNwYXJzZURvY3MsXG4gIHNwbGl0VW5pdDogX3NwbGl0VW5pdC5zcGxpdFVuaXREb2NzLFxuICBzdHJpbmc6IF9zdHJpbmcuc3RyaW5nRG9jcyxcbiAgdW5pdDogX3VuaXQudW5pdERvY3MsXG4gIC8vIGNvbnN0YW50c1xuICBlOiBfZS5lRG9jcyxcbiAgRTogX2UuZURvY3MsXG4gIFwiZmFsc2VcIjogX2ZhbHNlLmZhbHNlRG9jcyxcbiAgaTogX2kuaURvY3MsXG4gIEluZmluaXR5OiBfSW5maW5pdHkuSW5maW5pdHlEb2NzLFxuICBMTjI6IF9MTjIuTE4yRG9jcyxcbiAgTE4xMDogX0xOLkxOMTBEb2NzLFxuICBMT0cyRTogX0xPRzJFLkxPRzJFRG9jcyxcbiAgTE9HMTBFOiBfTE9HMTBFLkxPRzEwRURvY3MsXG4gIE5hTjogX05hTi5OYU5Eb2NzLFxuICBcIm51bGxcIjogX251bGwubnVsbERvY3MsXG4gIHBpOiBfcGkucGlEb2NzLFxuICBQSTogX3BpLnBpRG9jcyxcbiAgcGhpOiBfcGhpLnBoaURvY3MsXG4gIFNRUlQxXzI6IF9TUVJUMV8uU1FSVDEyRG9jcyxcbiAgU1FSVDI6IF9TUVJULlNRUlQyRG9jcyxcbiAgdGF1OiBfdGF1LnRhdURvY3MsXG4gIFwidHJ1ZVwiOiBfdHJ1ZS50cnVlRG9jcyxcbiAgdmVyc2lvbjogX3ZlcnNpb24udmVyc2lvbkRvY3MsXG4gIC8vIHBoeXNpY2FsIGNvbnN0YW50c1xuICAvLyBUT0RPOiBtb3JlIGRldGFpbGVkIGRvY3MgZm9yIHBoeXNpY2FsIGNvbnN0YW50c1xuICBzcGVlZE9mTGlnaHQ6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1NwZWVkIG9mIGxpZ2h0IGluIHZhY3V1bScsXG4gICAgZXhhbXBsZXM6IFsnc3BlZWRPZkxpZ2h0J11cbiAgfSxcbiAgZ3Jhdml0YXRpb25Db25zdGFudDoge1xuICAgIGRlc2NyaXB0aW9uOiAnTmV3dG9uaWFuIGNvbnN0YW50IG9mIGdyYXZpdGF0aW9uJyxcbiAgICBleGFtcGxlczogWydncmF2aXRhdGlvbkNvbnN0YW50J11cbiAgfSxcbiAgcGxhbmNrQ29uc3RhbnQ6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1BsYW5jayBjb25zdGFudCcsXG4gICAgZXhhbXBsZXM6IFsncGxhbmNrQ29uc3RhbnQnXVxuICB9LFxuICByZWR1Y2VkUGxhbmNrQ29uc3RhbnQ6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1JlZHVjZWQgUGxhbmNrIGNvbnN0YW50JyxcbiAgICBleGFtcGxlczogWydyZWR1Y2VkUGxhbmNrQ29uc3RhbnQnXVxuICB9LFxuICBtYWduZXRpY0NvbnN0YW50OiB7XG4gICAgZGVzY3JpcHRpb246ICdNYWduZXRpYyBjb25zdGFudCAodmFjdXVtIHBlcm1lYWJpbGl0eSknLFxuICAgIGV4YW1wbGVzOiBbJ21hZ25ldGljQ29uc3RhbnQnXVxuICB9LFxuICBlbGVjdHJpY0NvbnN0YW50OiB7XG4gICAgZGVzY3JpcHRpb246ICdFbGVjdHJpYyBjb25zdGFudCAodmFjdXVtIHBlcm1lYWJpbGl0eSknLFxuICAgIGV4YW1wbGVzOiBbJ2VsZWN0cmljQ29uc3RhbnQnXVxuICB9LFxuICB2YWN1dW1JbXBlZGFuY2U6IHtcbiAgICBkZXNjcmlwdGlvbjogJ0NoYXJhY3RlcmlzdGljIGltcGVkYW5jZSBvZiB2YWN1dW0nLFxuICAgIGV4YW1wbGVzOiBbJ3ZhY3V1bUltcGVkYW5jZSddXG4gIH0sXG4gIGNvdWxvbWI6IHtcbiAgICBkZXNjcmlwdGlvbjogJ0NvdWxvbWJcXCdzIGNvbnN0YW50JyxcbiAgICBleGFtcGxlczogWydjb3Vsb21iJ11cbiAgfSxcbiAgZWxlbWVudGFyeUNoYXJnZToge1xuICAgIGRlc2NyaXB0aW9uOiAnRWxlbWVudGFyeSBjaGFyZ2UnLFxuICAgIGV4YW1wbGVzOiBbJ2VsZW1lbnRhcnlDaGFyZ2UnXVxuICB9LFxuICBib2hyTWFnbmV0b246IHtcbiAgICBkZXNjcmlwdGlvbjogJ0JvcmggbWFnbmV0b24nLFxuICAgIGV4YW1wbGVzOiBbJ2JvaHJNYWduZXRvbiddXG4gIH0sXG4gIGNvbmR1Y3RhbmNlUXVhbnR1bToge1xuICAgIGRlc2NyaXB0aW9uOiAnQ29uZHVjdGFuY2UgcXVhbnR1bScsXG4gICAgZXhhbXBsZXM6IFsnY29uZHVjdGFuY2VRdWFudHVtJ11cbiAgfSxcbiAgaW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bToge1xuICAgIGRlc2NyaXB0aW9uOiAnSW52ZXJzZSBjb25kdWN0YW5jZSBxdWFudHVtJyxcbiAgICBleGFtcGxlczogWydpbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtJ11cbiAgfSxcbiAgLy8gam9zZXBoc29uOiB7ZGVzY3JpcHRpb246ICdKb3NlcGhzb24gY29uc3RhbnQnLCBleGFtcGxlczogWydqb3NlcGhzb24nXX0sXG4gIG1hZ25ldGljRmx1eFF1YW50dW06IHtcbiAgICBkZXNjcmlwdGlvbjogJ01hZ25ldGljIGZsdXggcXVhbnR1bScsXG4gICAgZXhhbXBsZXM6IFsnbWFnbmV0aWNGbHV4UXVhbnR1bSddXG4gIH0sXG4gIG51Y2xlYXJNYWduZXRvbjoge1xuICAgIGRlc2NyaXB0aW9uOiAnTnVjbGVhciBtYWduZXRvbicsXG4gICAgZXhhbXBsZXM6IFsnbnVjbGVhck1hZ25ldG9uJ11cbiAgfSxcbiAga2xpdHppbmc6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1ZvbiBLbGl0emluZyBjb25zdGFudCcsXG4gICAgZXhhbXBsZXM6IFsna2xpdHppbmcnXVxuICB9LFxuICBib2hyUmFkaXVzOiB7XG4gICAgZGVzY3JpcHRpb246ICdCb3JoIHJhZGl1cycsXG4gICAgZXhhbXBsZXM6IFsnYm9oclJhZGl1cyddXG4gIH0sXG4gIGNsYXNzaWNhbEVsZWN0cm9uUmFkaXVzOiB7XG4gICAgZGVzY3JpcHRpb246ICdDbGFzc2ljYWwgZWxlY3Ryb24gcmFkaXVzJyxcbiAgICBleGFtcGxlczogWydjbGFzc2ljYWxFbGVjdHJvblJhZGl1cyddXG4gIH0sXG4gIGVsZWN0cm9uTWFzczoge1xuICAgIGRlc2NyaXB0aW9uOiAnRWxlY3Ryb24gbWFzcycsXG4gICAgZXhhbXBsZXM6IFsnZWxlY3Ryb25NYXNzJ11cbiAgfSxcbiAgZmVybWlDb3VwbGluZzoge1xuICAgIGRlc2NyaXB0aW9uOiAnRmVybWkgY291cGxpbmcgY29uc3RhbnQnLFxuICAgIGV4YW1wbGVzOiBbJ2Zlcm1pQ291cGxpbmcnXVxuICB9LFxuICBmaW5lU3RydWN0dXJlOiB7XG4gICAgZGVzY3JpcHRpb246ICdGaW5lLXN0cnVjdHVyZSBjb25zdGFudCcsXG4gICAgZXhhbXBsZXM6IFsnZmluZVN0cnVjdHVyZSddXG4gIH0sXG4gIGhhcnRyZWVFbmVyZ3k6IHtcbiAgICBkZXNjcmlwdGlvbjogJ0hhcnRyZWUgZW5lcmd5JyxcbiAgICBleGFtcGxlczogWydoYXJ0cmVlRW5lcmd5J11cbiAgfSxcbiAgcHJvdG9uTWFzczoge1xuICAgIGRlc2NyaXB0aW9uOiAnUHJvdG9uIG1hc3MnLFxuICAgIGV4YW1wbGVzOiBbJ3Byb3Rvbk1hc3MnXVxuICB9LFxuICBkZXV0ZXJvbk1hc3M6IHtcbiAgICBkZXNjcmlwdGlvbjogJ0RldXRlcm9uIE1hc3MnLFxuICAgIGV4YW1wbGVzOiBbJ2RldXRlcm9uTWFzcyddXG4gIH0sXG4gIG5ldXRyb25NYXNzOiB7XG4gICAgZGVzY3JpcHRpb246ICdOZXV0cm9uIG1hc3MnLFxuICAgIGV4YW1wbGVzOiBbJ25ldXRyb25NYXNzJ11cbiAgfSxcbiAgcXVhbnR1bU9mQ2lyY3VsYXRpb246IHtcbiAgICBkZXNjcmlwdGlvbjogJ1F1YW50dW0gb2YgY2lyY3VsYXRpb24nLFxuICAgIGV4YW1wbGVzOiBbJ3F1YW50dW1PZkNpcmN1bGF0aW9uJ11cbiAgfSxcbiAgcnlkYmVyZzoge1xuICAgIGRlc2NyaXB0aW9uOiAnUnlkYmVyZyBjb25zdGFudCcsXG4gICAgZXhhbXBsZXM6IFsncnlkYmVyZyddXG4gIH0sXG4gIHRob21zb25Dcm9zc1NlY3Rpb246IHtcbiAgICBkZXNjcmlwdGlvbjogJ1Rob21zb24gY3Jvc3Mgc2VjdGlvbicsXG4gICAgZXhhbXBsZXM6IFsndGhvbXNvbkNyb3NzU2VjdGlvbiddXG4gIH0sXG4gIHdlYWtNaXhpbmdBbmdsZToge1xuICAgIGRlc2NyaXB0aW9uOiAnV2VhayBtaXhpbmcgYW5nbGUnLFxuICAgIGV4YW1wbGVzOiBbJ3dlYWtNaXhpbmdBbmdsZSddXG4gIH0sXG4gIGVmaW1vdkZhY3Rvcjoge1xuICAgIGRlc2NyaXB0aW9uOiAnRWZpbW92IGZhY3RvcicsXG4gICAgZXhhbXBsZXM6IFsnZWZpbW92RmFjdG9yJ11cbiAgfSxcbiAgYXRvbWljTWFzczoge1xuICAgIGRlc2NyaXB0aW9uOiAnQXRvbWljIG1hc3MgY29uc3RhbnQnLFxuICAgIGV4YW1wbGVzOiBbJ2F0b21pY01hc3MnXVxuICB9LFxuICBhdm9nYWRybzoge1xuICAgIGRlc2NyaXB0aW9uOiAnQXZvZ2Fkcm9cXCdzIG51bWJlcicsXG4gICAgZXhhbXBsZXM6IFsnYXZvZ2Fkcm8nXVxuICB9LFxuICBib2x0em1hbm46IHtcbiAgICBkZXNjcmlwdGlvbjogJ0JvbHR6bWFubiBjb25zdGFudCcsXG4gICAgZXhhbXBsZXM6IFsnYm9sdHptYW5uJ11cbiAgfSxcbiAgZmFyYWRheToge1xuICAgIGRlc2NyaXB0aW9uOiAnRmFyYWRheSBjb25zdGFudCcsXG4gICAgZXhhbXBsZXM6IFsnZmFyYWRheSddXG4gIH0sXG4gIGZpcnN0UmFkaWF0aW9uOiB7XG4gICAgZGVzY3JpcHRpb246ICdGaXJzdCByYWRpYXRpb24gY29uc3RhbnQnLFxuICAgIGV4YW1wbGVzOiBbJ2ZpcnN0UmFkaWF0aW9uJ11cbiAgfSxcbiAgbG9zY2htaWR0OiB7XG4gICAgZGVzY3JpcHRpb246ICdMb3NjaG1pZHQgY29uc3RhbnQgYXQgVD0yNzMuMTUgSyBhbmQgcD0xMDEuMzI1IGtQYScsXG4gICAgZXhhbXBsZXM6IFsnbG9zY2htaWR0J11cbiAgfSxcbiAgZ2FzQ29uc3RhbnQ6IHtcbiAgICBkZXNjcmlwdGlvbjogJ0dhcyBjb25zdGFudCcsXG4gICAgZXhhbXBsZXM6IFsnZ2FzQ29uc3RhbnQnXVxuICB9LFxuICBtb2xhclBsYW5ja0NvbnN0YW50OiB7XG4gICAgZGVzY3JpcHRpb246ICdNb2xhciBQbGFuY2sgY29uc3RhbnQnLFxuICAgIGV4YW1wbGVzOiBbJ21vbGFyUGxhbmNrQ29uc3RhbnQnXVxuICB9LFxuICBtb2xhclZvbHVtZToge1xuICAgIGRlc2NyaXB0aW9uOiAnTW9sYXIgdm9sdW1lIG9mIGFuIGlkZWFsIGdhcyBhdCBUPTI3My4xNSBLIGFuZCBwPTEwMS4zMjUga1BhJyxcbiAgICBleGFtcGxlczogWydtb2xhclZvbHVtZSddXG4gIH0sXG4gIHNhY2t1clRldHJvZGU6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1NhY2t1ci1UZXRyb2RlIGNvbnN0YW50IGF0IFQ9MSBLIGFuZCBwPTEwMS4zMjUga1BhJyxcbiAgICBleGFtcGxlczogWydzYWNrdXJUZXRyb2RlJ11cbiAgfSxcbiAgc2Vjb25kUmFkaWF0aW9uOiB7XG4gICAgZGVzY3JpcHRpb246ICdTZWNvbmQgcmFkaWF0aW9uIGNvbnN0YW50JyxcbiAgICBleGFtcGxlczogWydzZWNvbmRSYWRpYXRpb24nXVxuICB9LFxuICBzdGVmYW5Cb2x0em1hbm46IHtcbiAgICBkZXNjcmlwdGlvbjogJ1N0ZWZhbi1Cb2x0em1hbm4gY29uc3RhbnQnLFxuICAgIGV4YW1wbGVzOiBbJ3N0ZWZhbkJvbHR6bWFubiddXG4gIH0sXG4gIHdpZW5EaXNwbGFjZW1lbnQ6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1dpZW4gZGlzcGxhY2VtZW50IGxhdyBjb25zdGFudCcsXG4gICAgZXhhbXBsZXM6IFsnd2llbkRpc3BsYWNlbWVudCddXG4gIH0sXG4gIC8vIHNwZWN0cmFsUmFkaWFuY2U6IHtkZXNjcmlwdGlvbjogJ0ZpcnN0IHJhZGlhdGlvbiBjb25zdGFudCBmb3Igc3BlY3RyYWwgcmFkaWFuY2UnLCBleGFtcGxlczogWydzcGVjdHJhbFJhZGlhbmNlJ119LFxuICBtb2xhck1hc3M6IHtcbiAgICBkZXNjcmlwdGlvbjogJ01vbGFyIG1hc3MgY29uc3RhbnQnLFxuICAgIGV4YW1wbGVzOiBbJ21vbGFyTWFzcyddXG4gIH0sXG4gIG1vbGFyTWFzc0MxMjoge1xuICAgIGRlc2NyaXB0aW9uOiAnTW9sYXIgbWFzcyBjb25zdGFudCBvZiBjYXJib24tMTInLFxuICAgIGV4YW1wbGVzOiBbJ21vbGFyTWFzc0MxMiddXG4gIH0sXG4gIGdyYXZpdHk6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1N0YW5kYXJkIGFjY2VsZXJhdGlvbiBvZiBncmF2aXR5IChzdGFuZGFyZCBhY2NlbGVyYXRpb24gb2YgZnJlZS1mYWxsIG9uIEVhcnRoKScsXG4gICAgZXhhbXBsZXM6IFsnZ3Jhdml0eSddXG4gIH0sXG4gIHBsYW5ja0xlbmd0aDoge1xuICAgIGRlc2NyaXB0aW9uOiAnUGxhbmNrIGxlbmd0aCcsXG4gICAgZXhhbXBsZXM6IFsncGxhbmNrTGVuZ3RoJ11cbiAgfSxcbiAgcGxhbmNrTWFzczoge1xuICAgIGRlc2NyaXB0aW9uOiAnUGxhbmNrIG1hc3MnLFxuICAgIGV4YW1wbGVzOiBbJ3BsYW5ja01hc3MnXVxuICB9LFxuICBwbGFuY2tUaW1lOiB7XG4gICAgZGVzY3JpcHRpb246ICdQbGFuY2sgdGltZScsXG4gICAgZXhhbXBsZXM6IFsncGxhbmNrVGltZSddXG4gIH0sXG4gIHBsYW5ja0NoYXJnZToge1xuICAgIGRlc2NyaXB0aW9uOiAnUGxhbmNrIGNoYXJnZScsXG4gICAgZXhhbXBsZXM6IFsncGxhbmNrQ2hhcmdlJ11cbiAgfSxcbiAgcGxhbmNrVGVtcGVyYXR1cmU6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1BsYW5jayB0ZW1wZXJhdHVyZScsXG4gICAgZXhhbXBsZXM6IFsncGxhbmNrVGVtcGVyYXR1cmUnXVxuICB9LFxuICAvLyBmdW5jdGlvbnMgLSBhbGdlYnJhXG4gIGRlcml2YXRpdmU6IF9kZXJpdmF0aXZlLmRlcml2YXRpdmVEb2NzLFxuICBsc29sdmU6IF9sc29sdmUubHNvbHZlRG9jcyxcbiAgbHVwOiBfbHVwLmx1cERvY3MsXG4gIGx1c29sdmU6IF9sdXNvbHZlLmx1c29sdmVEb2NzLFxuICBzaW1wbGlmeTogX3NpbXBsaWZ5LnNpbXBsaWZ5RG9jcyxcbiAgcmF0aW9uYWxpemU6IF9yYXRpb25hbGl6ZS5yYXRpb25hbGl6ZURvY3MsXG4gIHNsdTogX3NsdS5zbHVEb2NzLFxuICB1c29sdmU6IF91c29sdmUudXNvbHZlRG9jcyxcbiAgcXI6IF9xci5xckRvY3MsXG4gIC8vIGZ1bmN0aW9ucyAtIGFyaXRobWV0aWNcbiAgYWJzOiBfYWJzLmFic0RvY3MsXG4gIGFkZDogX2FkZC5hZGREb2NzLFxuICBjYnJ0OiBfY2JydC5jYnJ0RG9jcyxcbiAgY2VpbDogX2NlaWwuY2VpbERvY3MsXG4gIGN1YmU6IF9jdWJlLmN1YmVEb2NzLFxuICBkaXZpZGU6IF9kaXZpZGUuZGl2aWRlRG9jcyxcbiAgZG90RGl2aWRlOiBfZG90RGl2aWRlLmRvdERpdmlkZURvY3MsXG4gIGRvdE11bHRpcGx5OiBfZG90TXVsdGlwbHkuZG90TXVsdGlwbHlEb2NzLFxuICBkb3RQb3c6IF9kb3RQb3cuZG90UG93RG9jcyxcbiAgZXhwOiBfZXhwLmV4cERvY3MsXG4gIGV4cG06IF9leHBtMi5leHBtRG9jcyxcbiAgZXhwbTE6IF9leHBtLmV4cG0xRG9jcyxcbiAgZml4OiBfZml4LmZpeERvY3MsXG4gIGZsb29yOiBfZmxvb3IuZmxvb3JEb2NzLFxuICBnY2Q6IF9nY2QuZ2NkRG9jcyxcbiAgaHlwb3Q6IF9oeXBvdC5oeXBvdERvY3MsXG4gIGxjbTogX2xjbS5sY21Eb2NzLFxuICBsb2c6IF9sb2czLmxvZ0RvY3MsXG4gIGxvZzI6IF9sb2cyLmxvZzJEb2NzLFxuICBsb2cxcDogX2xvZzFwLmxvZzFwRG9jcyxcbiAgbG9nMTA6IF9sb2cubG9nMTBEb2NzLFxuICBtb2Q6IF9tb2QubW9kRG9jcyxcbiAgbXVsdGlwbHk6IF9tdWx0aXBseS5tdWx0aXBseURvY3MsXG4gIG5vcm06IF9ub3JtLm5vcm1Eb2NzLFxuICBudGhSb290OiBfbnRoUm9vdC5udGhSb290RG9jcyxcbiAgbnRoUm9vdHM6IF9udGhSb290cy5udGhSb290c0RvY3MsXG4gIHBvdzogX3Bvdy5wb3dEb2NzLFxuICByb3VuZDogX3JvdW5kLnJvdW5kRG9jcyxcbiAgc2lnbjogX3NpZ24uc2lnbkRvY3MsXG4gIHNxcnQ6IF9zcXJ0LnNxcnREb2NzLFxuICBzcXJ0bTogX3NxcnRtLnNxcnRtRG9jcyxcbiAgc3F1YXJlOiBfc3F1YXJlLnNxdWFyZURvY3MsXG4gIHN1YnRyYWN0OiBfc3VidHJhY3Quc3VidHJhY3REb2NzLFxuICB1bmFyeU1pbnVzOiBfdW5hcnlNaW51cy51bmFyeU1pbnVzRG9jcyxcbiAgdW5hcnlQbHVzOiBfdW5hcnlQbHVzLnVuYXJ5UGx1c0RvY3MsXG4gIHhnY2Q6IF94Z2NkLnhnY2REb2NzLFxuICAvLyBmdW5jdGlvbnMgLSBiaXR3aXNlXG4gIGJpdEFuZDogX2JpdEFuZC5iaXRBbmREb2NzLFxuICBiaXROb3Q6IF9iaXROb3QuYml0Tm90RG9jcyxcbiAgYml0T3I6IF9iaXRPci5iaXRPckRvY3MsXG4gIGJpdFhvcjogX2JpdFhvci5iaXRYb3JEb2NzLFxuICBsZWZ0U2hpZnQ6IF9sZWZ0U2hpZnQubGVmdFNoaWZ0RG9jcyxcbiAgcmlnaHRBcml0aFNoaWZ0OiBfcmlnaHRBcml0aFNoaWZ0LnJpZ2h0QXJpdGhTaGlmdERvY3MsXG4gIHJpZ2h0TG9nU2hpZnQ6IF9yaWdodExvZ1NoaWZ0LnJpZ2h0TG9nU2hpZnREb2NzLFxuICAvLyBmdW5jdGlvbnMgLSBjb21iaW5hdG9yaWNzXG4gIGJlbGxOdW1iZXJzOiBfYmVsbE51bWJlcnMuYmVsbE51bWJlcnNEb2NzLFxuICBjYXRhbGFuOiBfY2F0YWxhbi5jYXRhbGFuRG9jcyxcbiAgY29tcG9zaXRpb246IF9jb21wb3NpdGlvbi5jb21wb3NpdGlvbkRvY3MsXG4gIHN0aXJsaW5nUzI6IF9zdGlybGluZ1Muc3RpcmxpbmdTMkRvY3MsXG4gIC8vIGZ1bmN0aW9ucyAtIGNvcmVcbiAgY29uZmlnOiBfY29uZmlnLmNvbmZpZ0RvY3MsXG4gIFwiaW1wb3J0XCI6IF9pbXBvcnQuaW1wb3J0RG9jcyxcbiAgdHlwZWQ6IF90eXBlZC50eXBlZERvY3MsXG4gIC8vIGZ1bmN0aW9ucyAtIGNvbXBsZXhcbiAgYXJnOiBfYXJnLmFyZ0RvY3MsXG4gIGNvbmo6IF9jb25qLmNvbmpEb2NzLFxuICByZTogX3JlLnJlRG9jcyxcbiAgaW06IF9pbS5pbURvY3MsXG4gIC8vIGZ1bmN0aW9ucyAtIGV4cHJlc3Npb25cbiAgZXZhbHVhdGU6IF9ldmFsdWF0ZS5ldmFsdWF0ZURvY3MsXG4gIGV2YWw6IF9ldmFsdWF0ZS5ldmFsdWF0ZURvY3MsXG4gIC8vIFRPRE86IGRlcHJlY2F0ZWQsIGNsZWFudXAgaW4gdjdcbiAgaGVscDogX2hlbHAuaGVscERvY3MsXG4gIC8vIGZ1bmN0aW9ucyAtIGdlb21ldHJ5XG4gIGRpc3RhbmNlOiBfZGlzdGFuY2UuZGlzdGFuY2VEb2NzLFxuICBpbnRlcnNlY3Q6IF9pbnRlcnNlY3QuaW50ZXJzZWN0RG9jcyxcbiAgLy8gZnVuY3Rpb25zIC0gbG9naWNhbFxuICBhbmQ6IF9hbmQuYW5kRG9jcyxcbiAgbm90OiBfbm90Lm5vdERvY3MsXG4gIG9yOiBfb3Iub3JEb2NzLFxuICB4b3I6IF94b3IueG9yRG9jcyxcbiAgLy8gZnVuY3Rpb25zIC0gbWF0cml4XG4gIGNvbmNhdDogX2NvbmNhdC5jb25jYXREb2NzLFxuICBjcm9zczogX2Nyb3NzLmNyb3NzRG9jcyxcbiAgY29sdW1uOiBfY29sdW1uLmNvbHVtbkRvY3MsXG4gIGN0cmFuc3Bvc2U6IF9jdHJhbnNwb3NlLmN0cmFuc3Bvc2VEb2NzLFxuICBkZXQ6IF9kZXQuZGV0RG9jcyxcbiAgZGlhZzogX2RpYWcuZGlhZ0RvY3MsXG4gIGRvdDogX2RvdC5kb3REb2NzLFxuICBnZXRNYXRyaXhEYXRhVHlwZTogX2dldE1hdHJpeERhdGFUeXBlLmdldE1hdHJpeERhdGFUeXBlRG9jcyxcbiAgaWRlbnRpdHk6IF9pZGVudGl0eS5pZGVudGl0eURvY3MsXG4gIGZpbHRlcjogX2ZpbHRlci5maWx0ZXJEb2NzLFxuICBmbGF0dGVuOiBfZmxhdHRlbi5mbGF0dGVuRG9jcyxcbiAgZm9yRWFjaDogX2ZvckVhY2guZm9yRWFjaERvY3MsXG4gIGludjogX2ludi5pbnZEb2NzLFxuICBlaWdzOiBfZWlncy5laWdzRG9jcyxcbiAga3JvbjogX2tyb24ua3JvbkRvY3MsXG4gIG1hcDogX21hcC5tYXBEb2NzLFxuICBvbmVzOiBfb25lcy5vbmVzRG9jcyxcbiAgcGFydGl0aW9uU2VsZWN0OiBfcGFydGl0aW9uU2VsZWN0LnBhcnRpdGlvblNlbGVjdERvY3MsXG4gIHJhbmdlOiBfcmFuZ2UucmFuZ2VEb2NzLFxuICByZXNpemU6IF9yZXNpemUucmVzaXplRG9jcyxcbiAgcmVzaGFwZTogX3Jlc2hhcGUucmVzaGFwZURvY3MsXG4gIHJvdzogX3Jvdy5yb3dEb2NzLFxuICBzaXplOiBfc2l6ZS5zaXplRG9jcyxcbiAgc29ydDogX3NvcnQuc29ydERvY3MsXG4gIHNxdWVlemU6IF9zcXVlZXplLnNxdWVlemVEb2NzLFxuICBzdWJzZXQ6IF9zdWJzZXQuc3Vic2V0RG9jcyxcbiAgdHJhY2U6IF90cmFjZS50cmFjZURvY3MsXG4gIHRyYW5zcG9zZTogX3RyYW5zcG9zZS50cmFuc3Bvc2VEb2NzLFxuICB6ZXJvczogX3plcm9zLnplcm9zRG9jcyxcbiAgLy8gZnVuY3Rpb25zIC0gcHJvYmFiaWxpdHlcbiAgY29tYmluYXRpb25zOiBfY29tYmluYXRpb25zLmNvbWJpbmF0aW9uc0RvY3MsXG4gIGNvbWJpbmF0aW9uc1dpdGhSZXA6IF9jb21iaW5hdGlvbnNXaXRoUmVwLmNvbWJpbmF0aW9uc1dpdGhSZXBEb2NzLFxuICAvLyBkaXN0cmlidXRpb246IGRpc3RyaWJ1dGlvbkRvY3MsXG4gIGZhY3RvcmlhbDogX2ZhY3RvcmlhbC5mYWN0b3JpYWxEb2NzLFxuICBnYW1tYTogX2dhbW1hLmdhbW1hRG9jcyxcbiAga2xkaXZlcmdlbmNlOiBfa2xkaXZlcmdlbmNlLmtsZGl2ZXJnZW5jZURvY3MsXG4gIG11bHRpbm9taWFsOiBfbXVsdGlub21pYWwubXVsdGlub21pYWxEb2NzLFxuICBwZXJtdXRhdGlvbnM6IF9wZXJtdXRhdGlvbnMucGVybXV0YXRpb25zRG9jcyxcbiAgcGlja1JhbmRvbTogX3BpY2tSYW5kb20ucGlja1JhbmRvbURvY3MsXG4gIHJhbmRvbTogX3JhbmRvbS5yYW5kb21Eb2NzLFxuICByYW5kb21JbnQ6IF9yYW5kb21JbnQucmFuZG9tSW50RG9jcyxcbiAgLy8gZnVuY3Rpb25zIC0gcmVsYXRpb25hbFxuICBjb21wYXJlOiBfY29tcGFyZS5jb21wYXJlRG9jcyxcbiAgY29tcGFyZU5hdHVyYWw6IF9jb21wYXJlTmF0dXJhbC5jb21wYXJlTmF0dXJhbERvY3MsXG4gIGNvbXBhcmVUZXh0OiBfY29tcGFyZVRleHQuY29tcGFyZVRleHREb2NzLFxuICBkZWVwRXF1YWw6IF9kZWVwRXF1YWwuZGVlcEVxdWFsRG9jcyxcbiAgZXF1YWw6IF9lcXVhbC5lcXVhbERvY3MsXG4gIGVxdWFsVGV4dDogX2VxdWFsVGV4dC5lcXVhbFRleHREb2NzLFxuICBsYXJnZXI6IF9sYXJnZXIubGFyZ2VyRG9jcyxcbiAgbGFyZ2VyRXE6IF9sYXJnZXJFcS5sYXJnZXJFcURvY3MsXG4gIHNtYWxsZXI6IF9zbWFsbGVyLnNtYWxsZXJEb2NzLFxuICBzbWFsbGVyRXE6IF9zbWFsbGVyRXEuc21hbGxlckVxRG9jcyxcbiAgdW5lcXVhbDogX3VuZXF1YWwudW5lcXVhbERvY3MsXG4gIC8vIGZ1bmN0aW9ucyAtIHNldFxuICBzZXRDYXJ0ZXNpYW46IF9zZXRDYXJ0ZXNpYW4uc2V0Q2FydGVzaWFuRG9jcyxcbiAgc2V0RGlmZmVyZW5jZTogX3NldERpZmZlcmVuY2Uuc2V0RGlmZmVyZW5jZURvY3MsXG4gIHNldERpc3RpbmN0OiBfc2V0RGlzdGluY3Quc2V0RGlzdGluY3REb2NzLFxuICBzZXRJbnRlcnNlY3Q6IF9zZXRJbnRlcnNlY3Quc2V0SW50ZXJzZWN0RG9jcyxcbiAgc2V0SXNTdWJzZXQ6IF9zZXRJc1N1YnNldC5zZXRJc1N1YnNldERvY3MsXG4gIHNldE11bHRpcGxpY2l0eTogX3NldE11bHRpcGxpY2l0eS5zZXRNdWx0aXBsaWNpdHlEb2NzLFxuICBzZXRQb3dlcnNldDogX3NldFBvd2Vyc2V0LnNldFBvd2Vyc2V0RG9jcyxcbiAgc2V0U2l6ZTogX3NldFNpemUuc2V0U2l6ZURvY3MsXG4gIHNldFN5bURpZmZlcmVuY2U6IF9zZXRTeW1EaWZmZXJlbmNlLnNldFN5bURpZmZlcmVuY2VEb2NzLFxuICBzZXRVbmlvbjogX3NldFVuaW9uLnNldFVuaW9uRG9jcyxcbiAgLy8gZnVuY3Rpb25zIC0gc3BlY2lhbFxuICBlcmY6IF9lcmYuZXJmRG9jcyxcbiAgLy8gZnVuY3Rpb25zIC0gc3RhdGlzdGljc1xuICBtYWQ6IF9tYWQubWFkRG9jcyxcbiAgbWF4OiBfbWF4Lm1heERvY3MsXG4gIG1lYW46IF9tZWFuLm1lYW5Eb2NzLFxuICBtZWRpYW46IF9tZWRpYW4ubWVkaWFuRG9jcyxcbiAgbWluOiBfbWluLm1pbkRvY3MsXG4gIG1vZGU6IF9tb2RlLm1vZGVEb2NzLFxuICBwcm9kOiBfcHJvZC5wcm9kRG9jcyxcbiAgcXVhbnRpbGVTZXE6IF9xdWFudGlsZVNlcS5xdWFudGlsZVNlcURvY3MsXG4gIHN0ZDogX3N0ZC5zdGREb2NzLFxuICBzdW06IF9zdW0uc3VtRG9jcyxcbiAgdmFyaWFuY2U6IF92YXJpYW5jZS52YXJpYW5jZURvY3MsXG4gIFwidmFyXCI6IF92YXJpYW5jZS52YXJpYW5jZURvY3MsXG4gIC8vIFRPRE86IGRlcHJlY2F0ZWQsIGNsZWFudXAgaW4gdjdcbiAgLy8gZnVuY3Rpb25zIC0gdHJpZ29ub21ldHJ5XG4gIGFjb3M6IF9hY29zLmFjb3NEb2NzLFxuICBhY29zaDogX2Fjb3NoLmFjb3NoRG9jcyxcbiAgYWNvdDogX2Fjb3QuYWNvdERvY3MsXG4gIGFjb3RoOiBfYWNvdGguYWNvdGhEb2NzLFxuICBhY3NjOiBfYWNzYy5hY3NjRG9jcyxcbiAgYWNzY2g6IF9hY3NjaC5hY3NjaERvY3MsXG4gIGFzZWM6IF9hc2VjLmFzZWNEb2NzLFxuICBhc2VjaDogX2FzZWNoLmFzZWNoRG9jcyxcbiAgYXNpbjogX2FzaW4uYXNpbkRvY3MsXG4gIGFzaW5oOiBfYXNpbmguYXNpbmhEb2NzLFxuICBhdGFuOiBfYXRhbjIuYXRhbkRvY3MsXG4gIGF0YW5oOiBfYXRhbmguYXRhbmhEb2NzLFxuICBhdGFuMjogX2F0YW4uYXRhbjJEb2NzLFxuICBjb3M6IF9jb3MuY29zRG9jcyxcbiAgY29zaDogX2Nvc2guY29zaERvY3MsXG4gIGNvdDogX2NvdC5jb3REb2NzLFxuICBjb3RoOiBfY290aC5jb3RoRG9jcyxcbiAgY3NjOiBfY3NjLmNzY0RvY3MsXG4gIGNzY2g6IF9jc2NoLmNzY2hEb2NzLFxuICBzZWM6IF9zZWMuc2VjRG9jcyxcbiAgc2VjaDogX3NlY2guc2VjaERvY3MsXG4gIHNpbjogX3Npbi5zaW5Eb2NzLFxuICBzaW5oOiBfc2luaC5zaW5oRG9jcyxcbiAgdGFuOiBfdGFuLnRhbkRvY3MsXG4gIHRhbmg6IF90YW5oLnRhbmhEb2NzLFxuICAvLyBmdW5jdGlvbnMgLSB1bml0c1xuICB0bzogX3RvLnRvRG9jcyxcbiAgLy8gZnVuY3Rpb25zIC0gdXRpbHNcbiAgY2xvbmU6IF9jbG9uZS5jbG9uZURvY3MsXG4gIGZvcm1hdDogX2Zvcm1hdC5mb3JtYXREb2NzLFxuICBpc05hTjogX2lzTmFOLmlzTmFORG9jcyxcbiAgaXNJbnRlZ2VyOiBfaXNJbnRlZ2VyLmlzSW50ZWdlckRvY3MsXG4gIGlzTmVnYXRpdmU6IF9pc05lZ2F0aXZlLmlzTmVnYXRpdmVEb2NzLFxuICBpc051bWVyaWM6IF9pc051bWVyaWMuaXNOdW1lcmljRG9jcyxcbiAgaGFzTnVtZXJpY1ZhbHVlOiBfaGFzTnVtZXJpY1ZhbHVlLmhhc051bWVyaWNWYWx1ZURvY3MsXG4gIGlzUG9zaXRpdmU6IF9pc1Bvc2l0aXZlLmlzUG9zaXRpdmVEb2NzLFxuICBpc1ByaW1lOiBfaXNQcmltZS5pc1ByaW1lRG9jcyxcbiAgaXNaZXJvOiBfaXNaZXJvLmlzWmVyb0RvY3MsXG4gIC8vIHByaW50OiBwcmludERvY3MgLy8gVE9ETzogYWRkIGRvY3VtZW50YXRpb24gZm9yIHByaW50IGFzIHNvb24gYXMgdGhlIHBhcnNlciBzdXBwb3J0cyBvYmplY3RzLlxuICB0eXBlT2Y6IF90eXBlT2YudHlwZU9mRG9jcyxcbiAgXCJ0eXBlb2ZcIjogX3R5cGVPZi50eXBlT2ZEb2NzLFxuICAvLyBUT0RPOiBkZXByZWNhdGVkLCBjbGVhbnVwIGluIHY3XG4gIG51bWVyaWM6IF9udW1lcmljLm51bWVyaWNEb2NzXG59O1xuZXhwb3J0cy5lbWJlZGRlZERvY3MgPSBlbWJlZGRlZERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlcml2YXRpdmVEb2NzID0gdm9pZCAwO1xudmFyIGRlcml2YXRpdmVEb2NzID0ge1xuICBuYW1lOiAnZGVyaXZhdGl2ZScsXG4gIGNhdGVnb3J5OiAnQWxnZWJyYScsXG4gIHN5bnRheDogWydkZXJpdmF0aXZlKGV4cHIsIHZhcmlhYmxlKScsICdkZXJpdmF0aXZlKGV4cHIsIHZhcmlhYmxlLCB7c2ltcGxpZnk6IGJvb2xlYW59KSddLFxuICBkZXNjcmlwdGlvbjogJ1Rha2VzIHRoZSBkZXJpdmF0aXZlIG9mIGFuIGV4cHJlc3Npb24gZXhwcmVzc2VkIGluIHBhcnNlciBOb2Rlcy4gVGhlIGRlcml2YXRpdmUgd2lsbCBiZSB0YWtlbiBvdmVyIHRoZSBzdXBwbGllZCB2YXJpYWJsZSBpbiB0aGUgc2Vjb25kIHBhcmFtZXRlci4gSWYgdGhlcmUgYXJlIG11bHRpcGxlIHZhcmlhYmxlcyBpbiB0aGUgZXhwcmVzc2lvbiwgaXQgd2lsbCByZXR1cm4gYSBwYXJ0aWFsIGRlcml2YXRpdmUuJyxcbiAgZXhhbXBsZXM6IFsnZGVyaXZhdGl2ZShcIjJ4XjNcIiwgXCJ4XCIpJywgJ2Rlcml2YXRpdmUoXCIyeF4zXCIsIFwieFwiLCB7c2ltcGxpZnk6IGZhbHNlfSknLCAnZGVyaXZhdGl2ZShcIjJ4XjIgKyAzeCArIDRcIiwgXCJ4XCIpJywgJ2Rlcml2YXRpdmUoXCJzaW4oMngpXCIsIFwieFwiKScsICdmID0gcGFyc2UoXCJ4XjIgKyB4XCIpJywgJ3ggPSBwYXJzZShcInhcIiknLCAnZGYgPSBkZXJpdmF0aXZlKGYsIHgpJywgJ2RmLmV2YWx1YXRlKHt4OiAzfSknXSxcbiAgc2VlYWxzbzogWydzaW1wbGlmeScsICdwYXJzZScsICdldmFsdWF0ZSddXG59O1xuZXhwb3J0cy5kZXJpdmF0aXZlRG9jcyA9IGRlcml2YXRpdmVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5sc29sdmVEb2NzID0gdm9pZCAwO1xudmFyIGxzb2x2ZURvY3MgPSB7XG4gIG5hbWU6ICdsc29sdmUnLFxuICBjYXRlZ29yeTogJ0FsZ2VicmEnLFxuICBzeW50YXg6IFsneD1sc29sdmUoTCwgYiknXSxcbiAgZGVzY3JpcHRpb246ICdTb2x2ZXMgdGhlIGxpbmVhciBzeXN0ZW0gTCAqIHggPSBiIHdoZXJlIEwgaXMgYW4gW24geCBuXSBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeCBhbmQgYiBpcyBhIFtuXSBjb2x1bW4gdmVjdG9yLicsXG4gIGV4YW1wbGVzOiBbJ2EgPSBbLTIsIDM7IDIsIDFdJywgJ2IgPSBbMTEsIDldJywgJ3ggPSBsc29sdmUoYSwgYiknXSxcbiAgc2VlYWxzbzogWydsdXAnLCAnbHVzb2x2ZScsICd1c29sdmUnLCAnbWF0cml4JywgJ3NwYXJzZSddXG59O1xuZXhwb3J0cy5sc29sdmVEb2NzID0gbHNvbHZlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubHVwRG9jcyA9IHZvaWQgMDtcbnZhciBsdXBEb2NzID0ge1xuICBuYW1lOiAnbHVwJyxcbiAgY2F0ZWdvcnk6ICdBbGdlYnJhJyxcbiAgc3ludGF4OiBbJ2x1cChtKSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgTWF0cml4IExVIGRlY29tcG9zaXRpb24gd2l0aCBwYXJ0aWFsIHBpdm90aW5nLiBNYXRyaXggQSBpcyBkZWNvbXBvc2VkIGluIHRocmVlIG1hdHJpY2VzIChMLCBVLCBQKSB3aGVyZSBQICogQSA9IEwgKiBVJyxcbiAgZXhhbXBsZXM6IFsnbHVwKFtbMiwgMV0sIFsxLCA0XV0pJywgJ2x1cChtYXRyaXgoW1syLCAxXSwgWzEsIDRdXSkpJywgJ2x1cChzcGFyc2UoW1syLCAxXSwgWzEsIDRdXSkpJ10sXG4gIHNlZWFsc286IFsnbHVzb2x2ZScsICdsc29sdmUnLCAndXNvbHZlJywgJ21hdHJpeCcsICdzcGFyc2UnLCAnc2x1JywgJ3FyJ11cbn07XG5leHBvcnRzLmx1cERvY3MgPSBsdXBEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5sdXNvbHZlRG9jcyA9IHZvaWQgMDtcbnZhciBsdXNvbHZlRG9jcyA9IHtcbiAgbmFtZTogJ2x1c29sdmUnLFxuICBjYXRlZ29yeTogJ0FsZ2VicmEnLFxuICBzeW50YXg6IFsneD1sdXNvbHZlKEEsIGIpJywgJ3g9bHVzb2x2ZShsdSwgYiknXSxcbiAgZGVzY3JpcHRpb246ICdTb2x2ZXMgdGhlIGxpbmVhciBzeXN0ZW0gQSAqIHggPSBiIHdoZXJlIEEgaXMgYW4gW24geCBuXSBtYXRyaXggYW5kIGIgaXMgYSBbbl0gY29sdW1uIHZlY3Rvci4nLFxuICBleGFtcGxlczogWydhID0gWy0yLCAzOyAyLCAxXScsICdiID0gWzExLCA5XScsICd4ID0gbHVzb2x2ZShhLCBiKSddLFxuICBzZWVhbHNvOiBbJ2x1cCcsICdzbHUnLCAnbHNvbHZlJywgJ3Vzb2x2ZScsICdtYXRyaXgnLCAnc3BhcnNlJ11cbn07XG5leHBvcnRzLmx1c29sdmVEb2NzID0gbHVzb2x2ZURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnFyRG9jcyA9IHZvaWQgMDtcbnZhciBxckRvY3MgPSB7XG4gIG5hbWU6ICdxcicsXG4gIGNhdGVnb3J5OiAnQWxnZWJyYScsXG4gIHN5bnRheDogWydxcihBKSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZXMgdGhlIE1hdHJpeCBRUiBkZWNvbXBvc2l0aW9uLiBNYXRyaXggYEFgIGlzIGRlY29tcG9zZWQgaW4gdHdvIG1hdHJpY2VzIChgUWAsIGBSYCkgd2hlcmUgYFFgIGlzIGFuIG9ydGhvZ29uYWwgbWF0cml4IGFuZCBgUmAgaXMgYW4gdXBwZXIgdHJpYW5ndWxhciBtYXRyaXguJyxcbiAgZXhhbXBsZXM6IFsncXIoW1sxLCAtMSwgIDRdLCBbMSwgIDQsIC0yXSwgWzEsICA0LCAgMl0sIFsxLCAgLTEsIDBdXSknXSxcbiAgc2VlYWxzbzogWydsdXAnLCAnc2x1JywgJ21hdHJpeCddXG59O1xuZXhwb3J0cy5xckRvY3MgPSBxckRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJhdGlvbmFsaXplRG9jcyA9IHZvaWQgMDtcbnZhciByYXRpb25hbGl6ZURvY3MgPSB7XG4gIG5hbWU6ICdyYXRpb25hbGl6ZScsXG4gIGNhdGVnb3J5OiAnQWxnZWJyYScsXG4gIHN5bnRheDogWydyYXRpb25hbGl6ZShleHByKScsICdyYXRpb25hbGl6ZShleHByLCBzY29wZSknLCAncmF0aW9uYWxpemUoZXhwciwgc2NvcGUsIGRldGFpbGVkKSddLFxuICBkZXNjcmlwdGlvbjogJ1RyYW5zZm9ybSBhIHJhdGlvbmFsaXphYmxlIGV4cHJlc3Npb24gaW4gYSByYXRpb25hbCBmcmFjdGlvbi4gSWYgcmF0aW9uYWwgZnJhY3Rpb24gaXMgb25lIHZhcmlhYmxlIHBvbHlub21pYWwgdGhlbiBjb252ZXJ0cyB0aGUgbnVtZXJhdG9yIGFuZCBkZW5vbWluYXRvciBpbiBjYW5vbmljYWwgZm9ybSwgd2l0aCBkZWNyZWFzaW5nIGV4cG9uZW50cywgcmV0dXJuaW5nIHRoZSBjb2VmZmljaWVudHMgb2YgbnVtZXJhdG9yLicsXG4gIGV4YW1wbGVzOiBbJ3JhdGlvbmFsaXplKFwiMngveSAtIHkvKHgrMSlcIiknLCAncmF0aW9uYWxpemUoXCIyeC95IC0geS8oeCsxKVwiLCB0cnVlKSddLFxuICBzZWVhbHNvOiBbJ3NpbXBsaWZ5J11cbn07XG5leHBvcnRzLnJhdGlvbmFsaXplRG9jcyA9IHJhdGlvbmFsaXplRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2ltcGxpZnlEb2NzID0gdm9pZCAwO1xudmFyIHNpbXBsaWZ5RG9jcyA9IHtcbiAgbmFtZTogJ3NpbXBsaWZ5JyxcbiAgY2F0ZWdvcnk6ICdBbGdlYnJhJyxcbiAgc3ludGF4OiBbJ3NpbXBsaWZ5KGV4cHIpJywgJ3NpbXBsaWZ5KGV4cHIsIHJ1bGVzKSddLFxuICBkZXNjcmlwdGlvbjogJ1NpbXBsaWZ5IGFuIGV4cHJlc3Npb24gdHJlZS4nLFxuICBleGFtcGxlczogWydzaW1wbGlmeShcIjMgKyAyIC8gNFwiKScsICdzaW1wbGlmeShcIjJ4ICsgeFwiKScsICdmID0gcGFyc2UoXCJ4ICogKHggKyAyICsgeClcIiknLCAnc2ltcGxpZmllZCA9IHNpbXBsaWZ5KGYpJywgJ3NpbXBsaWZpZWQuZXZhbHVhdGUoe3g6IDJ9KSddLFxuICBzZWVhbHNvOiBbJ2Rlcml2YXRpdmUnLCAncGFyc2UnLCAnZXZhbHVhdGUnXVxufTtcbmV4cG9ydHMuc2ltcGxpZnlEb2NzID0gc2ltcGxpZnlEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zbHVEb2NzID0gdm9pZCAwO1xudmFyIHNsdURvY3MgPSB7XG4gIG5hbWU6ICdzbHUnLFxuICBjYXRlZ29yeTogJ0FsZ2VicmEnLFxuICBzeW50YXg6IFsnc2x1KEEsIG9yZGVyLCB0aHJlc2hvbGQpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBNYXRyaXggTFUgZGVjb21wb3NpdGlvbiB3aXRoIGZ1bGwgcGl2b3RpbmcuIE1hdHJpeCBBIGlzIGRlY29tcG9zZWQgaW4gdHdvIG1hdHJpY2VzIChMLCBVKSBhbmQgdHdvIHBlcm11dGF0aW9uIHZlY3RvcnMgKHBpbnYsIHEpIHdoZXJlIFAgKiBBICogUSA9IEwgKiBVJyxcbiAgZXhhbXBsZXM6IFsnc2x1KHNwYXJzZShbNC41LCAwLCAzLjIsIDA7IDMuMSwgMi45LCAwLCAwLjk7IDAsIDEuNywgMywgMDsgMy41LCAwLjQsIDAsIDFdKSwgMSwgMC4wMDEpJ10sXG4gIHNlZWFsc286IFsnbHVzb2x2ZScsICdsc29sdmUnLCAndXNvbHZlJywgJ21hdHJpeCcsICdzcGFyc2UnLCAnbHVwJywgJ3FyJ11cbn07XG5leHBvcnRzLnNsdURvY3MgPSBzbHVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy51c29sdmVEb2NzID0gdm9pZCAwO1xudmFyIHVzb2x2ZURvY3MgPSB7XG4gIG5hbWU6ICd1c29sdmUnLFxuICBjYXRlZ29yeTogJ0FsZ2VicmEnLFxuICBzeW50YXg6IFsneD11c29sdmUoVSwgYiknXSxcbiAgZGVzY3JpcHRpb246ICdTb2x2ZXMgdGhlIGxpbmVhciBzeXN0ZW0gVSAqIHggPSBiIHdoZXJlIFUgaXMgYW4gW24geCBuXSB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeCBhbmQgYiBpcyBhIFtuXSBjb2x1bW4gdmVjdG9yLicsXG4gIGV4YW1wbGVzOiBbJ3g9dXNvbHZlKHNwYXJzZShbMSwgMSwgMSwgMTsgMCwgMSwgMSwgMTsgMCwgMCwgMSwgMTsgMCwgMCwgMCwgMV0pLCBbMTsgMjsgMzsgNF0pJ10sXG4gIHNlZWFsc286IFsnbHVwJywgJ2x1c29sdmUnLCAnbHNvbHZlJywgJ21hdHJpeCcsICdzcGFyc2UnXVxufTtcbmV4cG9ydHMudXNvbHZlRG9jcyA9IHVzb2x2ZURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFic0RvY3MgPSB2b2lkIDA7XG52YXIgYWJzRG9jcyA9IHtcbiAgbmFtZTogJ2FicycsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydhYnMoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBhYnNvbHV0ZSB2YWx1ZS4nLFxuICBleGFtcGxlczogWydhYnMoMy41KScsICdhYnMoLTQuMiknXSxcbiAgc2VlYWxzbzogWydzaWduJ11cbn07XG5leHBvcnRzLmFic0RvY3MgPSBhYnNEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hZGREb2NzID0gdm9pZCAwO1xudmFyIGFkZERvY3MgPSB7XG4gIG5hbWU6ICdhZGQnLFxuICBjYXRlZ29yeTogJ09wZXJhdG9ycycsXG4gIHN5bnRheDogWyd4ICsgeScsICdhZGQoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdBZGQgdHdvIHZhbHVlcy4nLFxuICBleGFtcGxlczogWydhID0gMi4xICsgMy42JywgJ2EgLSAzLjYnLCAnMyArIDJpJywgJzMgY20gKyAyIGluY2gnLCAnXCIyLjNcIiArIFwiNFwiJ10sXG4gIHNlZWFsc286IFsnc3VidHJhY3QnXVxufTtcbmV4cG9ydHMuYWRkRG9jcyA9IGFkZERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNicnREb2NzID0gdm9pZCAwO1xudmFyIGNicnREb2NzID0ge1xuICBuYW1lOiAnY2JydCcsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydjYnJ0KHgpJywgJ2NicnQoeCwgYWxsUm9vdHMpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgY3ViaWMgcm9vdCB2YWx1ZS4gSWYgeCA9IHkgKiB5ICogeSwgdGhlbiB5IGlzIHRoZSBjdWJpYyByb290IG9mIHguIFdoZW4gYHhgIGlzIGEgbnVtYmVyIG9yIGNvbXBsZXggbnVtYmVyLCBhbiBvcHRpb25hbCBzZWNvbmQgYXJndW1lbnQgYGFsbFJvb3RzYCBjYW4gYmUgcHJvdmlkZWQgdG8gcmV0dXJuIGFsbCB0aHJlZSBjdWJpYyByb290cy4gSWYgbm90IHByb3ZpZGVkLCB0aGUgcHJpbmNpcGFsIHJvb3QgaXMgcmV0dXJuZWQnLFxuICBleGFtcGxlczogWydjYnJ0KDY0KScsICdjdWJlKDQpJywgJ2NicnQoLTgpJywgJ2NicnQoMiArIDNpKScsICdjYnJ0KDhpKScsICdjYnJ0KDhpLCB0cnVlKScsICdjYnJ0KDI3IG1eMyknXSxcbiAgc2VlYWxzbzogWydzcXVhcmUnLCAnc3FydCcsICdjdWJlJywgJ211bHRpcGx5J11cbn07XG5leHBvcnRzLmNicnREb2NzID0gY2JydERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNlaWxEb2NzID0gdm9pZCAwO1xudmFyIGNlaWxEb2NzID0ge1xuICBuYW1lOiAnY2VpbCcsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydjZWlsKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnUm91bmQgYSB2YWx1ZSB0b3dhcmRzIHBsdXMgaW5maW5pdHkuIElmIHggaXMgY29tcGxleCwgYm90aCByZWFsIGFuZCBpbWFnaW5hcnkgcGFydCBhcmUgcm91bmRlZCB0b3dhcmRzIHBsdXMgaW5maW5pdHkuJyxcbiAgZXhhbXBsZXM6IFsnY2VpbCgzLjIpJywgJ2NlaWwoMy44KScsICdjZWlsKC00LjIpJ10sXG4gIHNlZWFsc286IFsnZmxvb3InLCAnZml4JywgJ3JvdW5kJ11cbn07XG5leHBvcnRzLmNlaWxEb2NzID0gY2VpbERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmN1YmVEb2NzID0gdm9pZCAwO1xudmFyIGN1YmVEb2NzID0ge1xuICBuYW1lOiAnY3ViZScsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydjdWJlKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgY3ViZSBvZiBhIHZhbHVlLiBUaGUgY3ViZSBvZiB4IGlzIHggKiB4ICogeC4nLFxuICBleGFtcGxlczogWydjdWJlKDIpJywgJzJeMycsICcyICogMiAqIDInXSxcbiAgc2VlYWxzbzogWydtdWx0aXBseScsICdzcXVhcmUnLCAncG93J11cbn07XG5leHBvcnRzLmN1YmVEb2NzID0gY3ViZURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRpdmlkZURvY3MgPSB2b2lkIDA7XG52YXIgZGl2aWRlRG9jcyA9IHtcbiAgbmFtZTogJ2RpdmlkZScsXG4gIGNhdGVnb3J5OiAnT3BlcmF0b3JzJyxcbiAgc3ludGF4OiBbJ3ggLyB5JywgJ2RpdmlkZSh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0RpdmlkZSB0d28gdmFsdWVzLicsXG4gIGV4YW1wbGVzOiBbJ2EgPSAyIC8gMycsICdhICogMycsICc0LjUgLyAyJywgJzMgKyA0IC8gMicsICcoMyArIDQpIC8gMicsICcxOCBrbSAvIDQuNSddLFxuICBzZWVhbHNvOiBbJ211bHRpcGx5J11cbn07XG5leHBvcnRzLmRpdmlkZURvY3MgPSBkaXZpZGVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kb3REaXZpZGVEb2NzID0gdm9pZCAwO1xudmFyIGRvdERpdmlkZURvY3MgPSB7XG4gIG5hbWU6ICdkb3REaXZpZGUnLFxuICBjYXRlZ29yeTogJ09wZXJhdG9ycycsXG4gIHN5bnRheDogWyd4IC4vIHknLCAnZG90RGl2aWRlKHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnRGl2aWRlIHR3byB2YWx1ZXMgZWxlbWVudCB3aXNlLicsXG4gIGV4YW1wbGVzOiBbJ2EgPSBbMSwgMiwgMzsgNCwgNSwgNl0nLCAnYiA9IFsyLCAxLCAxOyAzLCAyLCA1XScsICdhIC4vIGInXSxcbiAgc2VlYWxzbzogWydtdWx0aXBseScsICdkb3RNdWx0aXBseScsICdkaXZpZGUnXVxufTtcbmV4cG9ydHMuZG90RGl2aWRlRG9jcyA9IGRvdERpdmlkZURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRvdE11bHRpcGx5RG9jcyA9IHZvaWQgMDtcbnZhciBkb3RNdWx0aXBseURvY3MgPSB7XG4gIG5hbWU6ICdkb3RNdWx0aXBseScsXG4gIGNhdGVnb3J5OiAnT3BlcmF0b3JzJyxcbiAgc3ludGF4OiBbJ3ggLiogeScsICdkb3RNdWx0aXBseSh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ011bHRpcGx5IHR3byB2YWx1ZXMgZWxlbWVudCB3aXNlLicsXG4gIGV4YW1wbGVzOiBbJ2EgPSBbMSwgMiwgMzsgNCwgNSwgNl0nLCAnYiA9IFsyLCAxLCAxOyAzLCAyLCA1XScsICdhIC4qIGInXSxcbiAgc2VlYWxzbzogWydtdWx0aXBseScsICdkaXZpZGUnLCAnZG90RGl2aWRlJ11cbn07XG5leHBvcnRzLmRvdE11bHRpcGx5RG9jcyA9IGRvdE11bHRpcGx5RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZG90UG93RG9jcyA9IHZvaWQgMDtcbnZhciBkb3RQb3dEb2NzID0ge1xuICBuYW1lOiAnZG90UG93JyxcbiAgY2F0ZWdvcnk6ICdPcGVyYXRvcnMnLFxuICBzeW50YXg6IFsneCAuXiB5JywgJ2RvdFBvdyh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZXMgdGhlIHBvd2VyIG9mIHggdG8geSBlbGVtZW50IHdpc2UuJyxcbiAgZXhhbXBsZXM6IFsnYSA9IFsxLCAyLCAzOyA0LCA1LCA2XScsICdhIC5eIDInXSxcbiAgc2VlYWxzbzogWydwb3cnXVxufTtcbmV4cG9ydHMuZG90UG93RG9jcyA9IGRvdFBvd0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmV4cERvY3MgPSB2b2lkIDA7XG52YXIgZXhwRG9jcyA9IHtcbiAgbmFtZTogJ2V4cCcsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydleHAoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIGV4cG9uZW50IG9mIGEgdmFsdWUuJyxcbiAgZXhhbXBsZXM6IFsnZXhwKDEuMyknLCAnZSBeIDEuMycsICdsb2coZXhwKDEuMykpJywgJ3ggPSAyLjQnLCAnKGV4cChpKngpID09IGNvcyh4KSArIGkqc2luKHgpKSAgICMgRXVsZXJcXCdzIGZvcm11bGEnXSxcbiAgc2VlYWxzbzogWydleHBtJywgJ2V4cG0xJywgJ3BvdycsICdsb2cnXVxufTtcbmV4cG9ydHMuZXhwRG9jcyA9IGV4cERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmV4cG1Eb2NzID0gdm9pZCAwO1xudmFyIGV4cG1Eb2NzID0ge1xuICBuYW1lOiAnZXhwbScsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydleHAoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBtYXRyaXggZXhwb25lbnRpYWwsIGV4cG0oQSkgPSBlXkEuICcgKyAnVGhlIG1hdHJpeCBtdXN0IGJlIHNxdWFyZS4gJyArICdOb3QgdG8gYmUgY29uZnVzZWQgd2l0aCBleHAoYSksIHdoaWNoIHBlcmZvcm1zIGVsZW1lbnQtd2lzZSBleHBvbmVudGlhdGlvbi4nLFxuICBleGFtcGxlczogWydleHBtKFtbMCwyXSxbMCwwXV0pJ10sXG4gIHNlZWFsc286IFsnZXhwJ11cbn07XG5leHBvcnRzLmV4cG1Eb2NzID0gZXhwbURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmV4cG0xRG9jcyA9IHZvaWQgMDtcbnZhciBleHBtMURvY3MgPSB7XG4gIG5hbWU6ICdleHBtMScsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydleHBtMSh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgdmFsdWUgb2Ygc3VidHJhY3RpbmcgMSBmcm9tIHRoZSBleHBvbmVudGlhbCB2YWx1ZS4nLFxuICBleGFtcGxlczogWydleHBtMSgyKScsICdwb3coZSwgMikgLSAxJywgJ2xvZyhleHBtMSgyKSArIDEpJ10sXG4gIHNlZWFsc286IFsnZXhwJywgJ3BvdycsICdsb2cnXVxufTtcbmV4cG9ydHMuZXhwbTFEb2NzID0gZXhwbTFEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5maXhEb2NzID0gdm9pZCAwO1xudmFyIGZpeERvY3MgPSB7XG4gIG5hbWU6ICdmaXgnLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsnZml4KHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnUm91bmQgYSB2YWx1ZSB0b3dhcmRzIHplcm8uIElmIHggaXMgY29tcGxleCwgYm90aCByZWFsIGFuZCBpbWFnaW5hcnkgcGFydCBhcmUgcm91bmRlZCB0b3dhcmRzIHplcm8uJyxcbiAgZXhhbXBsZXM6IFsnZml4KDMuMiknLCAnZml4KDMuOCknLCAnZml4KC00LjIpJywgJ2ZpeCgtNC44KSddLFxuICBzZWVhbHNvOiBbJ2NlaWwnLCAnZmxvb3InLCAncm91bmQnXVxufTtcbmV4cG9ydHMuZml4RG9jcyA9IGZpeERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZsb29yRG9jcyA9IHZvaWQgMDtcbnZhciBmbG9vckRvY3MgPSB7XG4gIG5hbWU6ICdmbG9vcicsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydmbG9vcih4KSddLFxuICBkZXNjcmlwdGlvbjogJ1JvdW5kIGEgdmFsdWUgdG93YXJkcyBtaW51cyBpbmZpbml0eS5JZiB4IGlzIGNvbXBsZXgsIGJvdGggcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnQgYXJlIHJvdW5kZWQgdG93YXJkcyBtaW51cyBpbmZpbml0eS4nLFxuICBleGFtcGxlczogWydmbG9vcigzLjIpJywgJ2Zsb29yKDMuOCknLCAnZmxvb3IoLTQuMiknXSxcbiAgc2VlYWxzbzogWydjZWlsJywgJ2ZpeCcsICdyb3VuZCddXG59O1xuZXhwb3J0cy5mbG9vckRvY3MgPSBmbG9vckRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmdjZERvY3MgPSB2b2lkIDA7XG52YXIgZ2NkRG9jcyA9IHtcbiAgbmFtZTogJ2djZCcsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydnY2QoYSwgYiknLCAnZ2NkKGEsIGIsIGMsIC4uLiknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBncmVhdGVzdCBjb21tb24gZGl2aXNvci4nLFxuICBleGFtcGxlczogWydnY2QoOCwgMTIpJywgJ2djZCgtNCwgNiknLCAnZ2NkKDI1LCAxNSwgLTEwKSddLFxuICBzZWVhbHNvOiBbJ2xjbScsICd4Z2NkJ11cbn07XG5leHBvcnRzLmdjZERvY3MgPSBnY2REb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5oeXBvdERvY3MgPSB2b2lkIDA7XG52YXIgaHlwb3REb2NzID0ge1xuICBuYW1lOiAnaHlwb3QnLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsnaHlwb3QoYSwgYiwgYywgLi4uKScsICdoeXBvdChbYSwgYiwgYywgLi4uXSknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIGh5cG90ZW51c2Egb2YgYSBsaXN0IHdpdGggdmFsdWVzLiAnLFxuICBleGFtcGxlczogWydoeXBvdCgzLCA0KScsICdzcXJ0KDNeMiArIDReMiknLCAnaHlwb3QoLTIpJywgJ2h5cG90KFszLCA0LCA1XSknXSxcbiAgc2VlYWxzbzogWydhYnMnLCAnbm9ybSddXG59O1xuZXhwb3J0cy5oeXBvdERvY3MgPSBoeXBvdERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxjbURvY3MgPSB2b2lkIDA7XG52YXIgbGNtRG9jcyA9IHtcbiAgbmFtZTogJ2xjbScsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydsY20oeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBsZWFzdCBjb21tb24gbXVsdGlwbGUuJyxcbiAgZXhhbXBsZXM6IFsnbGNtKDQsIDYpJywgJ2xjbSg2LCAyMSknLCAnbGNtKDYsIDIxLCA1KSddLFxuICBzZWVhbHNvOiBbJ2djZCddXG59O1xuZXhwb3J0cy5sY21Eb2NzID0gbGNtRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubG9nRG9jcyA9IHZvaWQgMDtcbnZhciBsb2dEb2NzID0ge1xuICBuYW1lOiAnbG9nJyxcbiAgY2F0ZWdvcnk6ICdBcml0aG1ldGljJyxcbiAgc3ludGF4OiBbJ2xvZyh4KScsICdsb2coeCwgYmFzZSknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBsb2dhcml0aG0gb2YgYSB2YWx1ZS4gSWYgbm8gYmFzZSBpcyBwcm92aWRlZCwgdGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mIHggaXMgY2FsY3VsYXRlZC4gSWYgYmFzZSBpZiBwcm92aWRlZCwgdGhlIGxvZ2FyaXRobSBpcyBjYWxjdWxhdGVkIGZvciB0aGUgc3BlY2lmaWVkIGJhc2UuIGxvZyh4LCBiYXNlKSBpcyBkZWZpbmVkIGFzIGxvZyh4KSAvIGxvZyhiYXNlKS4nLFxuICBleGFtcGxlczogWydsb2coMy41KScsICdhID0gbG9nKDIuNCknLCAnZXhwKGEpJywgJzEwIF4gNCcsICdsb2coMTAwMDAsIDEwKScsICdsb2coMTAwMDApIC8gbG9nKDEwKScsICdiID0gbG9nKDEwMjQsIDIpJywgJzIgXiBiJ10sXG4gIHNlZWFsc286IFsnZXhwJywgJ2xvZzFwJywgJ2xvZzInLCAnbG9nMTAnXVxufTtcbmV4cG9ydHMubG9nRG9jcyA9IGxvZ0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxvZzEwRG9jcyA9IHZvaWQgMDtcbnZhciBsb2cxMERvY3MgPSB7XG4gIG5hbWU6ICdsb2cxMCcsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydsb2cxMCh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIDEwLWJhc2UgbG9nYXJpdGhtIG9mIGEgdmFsdWUuJyxcbiAgZXhhbXBsZXM6IFsnbG9nMTAoMC4wMDAwMSknLCAnbG9nMTAoMTAwMDApJywgJzEwIF4gNCcsICdsb2coMTAwMDApIC8gbG9nKDEwKScsICdsb2coMTAwMDAsIDEwKSddLFxuICBzZWVhbHNvOiBbJ2V4cCcsICdsb2cnXVxufTtcbmV4cG9ydHMubG9nMTBEb2NzID0gbG9nMTBEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5sb2cxcERvY3MgPSB2b2lkIDA7XG52YXIgbG9nMXBEb2NzID0ge1xuICBuYW1lOiAnbG9nMXAnLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsnbG9nMXAoeCknLCAnbG9nMXAoeCwgYmFzZSknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIGxvZ2FyaXRobSBvZiBhIGB2YWx1ZSsxYCcsXG4gIGV4YW1wbGVzOiBbJ2xvZzFwKDIuNSknLCAnZXhwKGxvZzFwKDEuNCkpJywgJ3BvdygxMCwgNCknLCAnbG9nMXAoOTk5OSwgMTApJywgJ2xvZzFwKDk5OTkpIC8gbG9nKDEwKSddLFxuICBzZWVhbHNvOiBbJ2V4cCcsICdsb2cnLCAnbG9nMicsICdsb2cxMCddXG59O1xuZXhwb3J0cy5sb2cxcERvY3MgPSBsb2cxcERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxvZzJEb2NzID0gdm9pZCAwO1xudmFyIGxvZzJEb2NzID0ge1xuICBuYW1lOiAnbG9nMicsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydsb2cyKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSAyLWJhc2Ugb2YgYSB2YWx1ZS4gVGhpcyBpcyB0aGUgc2FtZSBhcyBjYWxjdWxhdGluZyBgbG9nKHgsIDIpYC4nLFxuICBleGFtcGxlczogWydsb2cyKDAuMDMxMjUpJywgJ2xvZzIoMTYpJywgJ2xvZzIoMTYpIC8gbG9nMigyKScsICdwb3coMiwgNCknXSxcbiAgc2VlYWxzbzogWydleHAnLCAnbG9nMXAnLCAnbG9nJywgJ2xvZzEwJ11cbn07XG5leHBvcnRzLmxvZzJEb2NzID0gbG9nMkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1vZERvY3MgPSB2b2lkIDA7XG52YXIgbW9kRG9jcyA9IHtcbiAgbmFtZTogJ21vZCcsXG4gIGNhdGVnb3J5OiAnT3BlcmF0b3JzJyxcbiAgc3ludGF4OiBbJ3ggJSB5JywgJ3ggbW9kIHknLCAnbW9kKHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlcyB0aGUgbW9kdWx1cywgdGhlIHJlbWFpbmRlciBvZiBhbiBpbnRlZ2VyIGRpdmlzaW9uLicsXG4gIGV4YW1wbGVzOiBbJzcgJSAzJywgJzExICUgMicsICcxMCBtb2QgNCcsICdpc09kZCh4KSA9IHggJSAyJywgJ2lzT2RkKDIpJywgJ2lzT2RkKDMpJ10sXG4gIHNlZWFsc286IFsnZGl2aWRlJ11cbn07XG5leHBvcnRzLm1vZERvY3MgPSBtb2REb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tdWx0aXBseURvY3MgPSB2b2lkIDA7XG52YXIgbXVsdGlwbHlEb2NzID0ge1xuICBuYW1lOiAnbXVsdGlwbHknLFxuICBjYXRlZ29yeTogJ09wZXJhdG9ycycsXG4gIHN5bnRheDogWyd4ICogeScsICdtdWx0aXBseSh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ211bHRpcGx5IHR3byB2YWx1ZXMuJyxcbiAgZXhhbXBsZXM6IFsnYSA9IDIuMSAqIDMuNCcsICdhIC8gMy40JywgJzIgKiAzICsgNCcsICcyICogKDMgKyA0KScsICczICogMi4xIGttJ10sXG4gIHNlZWFsc286IFsnZGl2aWRlJ11cbn07XG5leHBvcnRzLm11bHRpcGx5RG9jcyA9IG11bHRpcGx5RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubm9ybURvY3MgPSB2b2lkIDA7XG52YXIgbm9ybURvY3MgPSB7XG4gIG5hbWU6ICdub3JtJyxcbiAgY2F0ZWdvcnk6ICdBcml0aG1ldGljJyxcbiAgc3ludGF4OiBbJ25vcm0oeCknLCAnbm9ybSh4LCBwKSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgbm9ybSBvZiBhIG51bWJlciwgdmVjdG9yIG9yIG1hdHJpeC4nLFxuICBleGFtcGxlczogWydhYnMoLTMuNSknLCAnbm9ybSgtMy41KScsICdub3JtKDMgLSA0aSknLCAnbm9ybShbMSwgMiwgLTNdLCBJbmZpbml0eSknLCAnbm9ybShbMSwgMiwgLTNdLCAtSW5maW5pdHkpJywgJ25vcm0oWzMsIDRdLCAyKScsICdub3JtKFtbMSwgMl0sIFszLCA0XV0sIDEpJywgJ25vcm0oW1sxLCAyXSwgWzMsIDRdXSwgXCJpbmZcIiknLCAnbm9ybShbWzEsIDJdLCBbMywgNF1dLCBcImZyb1wiKSddXG59O1xuZXhwb3J0cy5ub3JtRG9jcyA9IG5vcm1Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5udGhSb290RG9jcyA9IHZvaWQgMDtcbnZhciBudGhSb290RG9jcyA9IHtcbiAgbmFtZTogJ250aFJvb3QnLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsnbnRoUm9vdChhKScsICdudGhSb290KGEsIHJvb3QpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBudGggcm9vdCBvZiBhIHZhbHVlLiAnICsgJ1RoZSBwcmluY2lwYWwgbnRoIHJvb3Qgb2YgYSBwb3NpdGl2ZSByZWFsIG51bWJlciBBLCAnICsgJ2lzIHRoZSBwb3NpdGl2ZSByZWFsIHNvbHV0aW9uIG9mIHRoZSBlcXVhdGlvbiBcInhecm9vdCA9IEFcIi4nLFxuICBleGFtcGxlczogWyc0IF4gMycsICdudGhSb290KDY0LCAzKScsICdudGhSb290KDksIDIpJywgJ3NxcnQoOSknXSxcbiAgc2VlYWxzbzogWydudGhSb290cycsICdwb3cnLCAnc3FydCddXG59O1xuZXhwb3J0cy5udGhSb290RG9jcyA9IG50aFJvb3REb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5udGhSb290c0RvY3MgPSB2b2lkIDA7XG52YXIgbnRoUm9vdHNEb2NzID0ge1xuICBuYW1lOiAnbnRoUm9vdHMnLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsnbnRoUm9vdHMoQSknLCAnbnRoUm9vdHMoQSwgcm9vdCknXSxcbiAgZGVzY3JpcHRpb246ICcnICsgJ0NhbGN1bGF0ZSB0aGUgbnRoIHJvb3RzIG9mIGEgdmFsdWUuICcgKyAnQW4gbnRoIHJvb3Qgb2YgYSBwb3NpdGl2ZSByZWFsIG51bWJlciBBLCAnICsgJ2lzIGEgcG9zaXRpdmUgcmVhbCBzb2x1dGlvbiBvZiB0aGUgZXF1YXRpb24gXCJ4XnJvb3QgPSBBXCIuICcgKyAnVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGFycmF5IG9mIGNvbXBsZXggdmFsdWVzLicsXG4gIGV4YW1wbGVzOiBbJ250aFJvb3RzKDEpJywgJ250aFJvb3RzKDEsIDMpJ10sXG4gIHNlZWFsc286IFsnc3FydCcsICdwb3cnLCAnbnRoUm9vdCddXG59O1xuZXhwb3J0cy5udGhSb290c0RvY3MgPSBudGhSb290c0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBvd0RvY3MgPSB2b2lkIDA7XG52YXIgcG93RG9jcyA9IHtcbiAgbmFtZTogJ3BvdycsXG4gIGNhdGVnb3J5OiAnT3BlcmF0b3JzJyxcbiAgc3ludGF4OiBbJ3ggXiB5JywgJ3Bvdyh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZXMgdGhlIHBvd2VyIG9mIHggdG8geSwgeF55LicsXG4gIGV4YW1wbGVzOiBbJzJeMycsICcyKjIqMicsICcxICsgZSBeIChwaSAqIGkpJ10sXG4gIHNlZWFsc286IFsnbXVsdGlwbHknLCAnbnRoUm9vdCcsICdudGhSb290cycsICdzcXJ0J11cbn07XG5leHBvcnRzLnBvd0RvY3MgPSBwb3dEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yb3VuZERvY3MgPSB2b2lkIDA7XG52YXIgcm91bmREb2NzID0ge1xuICBuYW1lOiAncm91bmQnLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsncm91bmQoeCknLCAncm91bmQoeCwgbiknXSxcbiAgZGVzY3JpcHRpb246ICdyb3VuZCBhIHZhbHVlIHRvd2FyZHMgdGhlIG5lYXJlc3QgaW50ZWdlci5JZiB4IGlzIGNvbXBsZXgsIGJvdGggcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnQgYXJlIHJvdW5kZWQgdG93YXJkcyB0aGUgbmVhcmVzdCBpbnRlZ2VyLiBXaGVuIG4gaXMgc3BlY2lmaWVkLCB0aGUgdmFsdWUgaXMgcm91bmRlZCB0byBuIGRlY2ltYWxzLicsXG4gIGV4YW1wbGVzOiBbJ3JvdW5kKDMuMiknLCAncm91bmQoMy44KScsICdyb3VuZCgtNC4yKScsICdyb3VuZCgtNC44KScsICdyb3VuZChwaSwgMyknLCAncm91bmQoMTIzLjQ1Njc4LCAyKSddLFxuICBzZWVhbHNvOiBbJ2NlaWwnLCAnZmxvb3InLCAnZml4J11cbn07XG5leHBvcnRzLnJvdW5kRG9jcyA9IHJvdW5kRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2lnbkRvY3MgPSB2b2lkIDA7XG52YXIgc2lnbkRvY3MgPSB7XG4gIG5hbWU6ICdzaWduJyxcbiAgY2F0ZWdvcnk6ICdBcml0aG1ldGljJyxcbiAgc3ludGF4OiBbJ3NpZ24oeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBzaWduIG9mIGEgdmFsdWUuIFRoZSBzaWduIG9mIGEgdmFsdWUgeCBpcyAxIHdoZW4geD4xLCAtMSB3aGVuIHg8MCwgYW5kIDAgd2hlbiB4PTAuJyxcbiAgZXhhbXBsZXM6IFsnc2lnbigzLjUpJywgJ3NpZ24oLTQuMiknLCAnc2lnbigwKSddLFxuICBzZWVhbHNvOiBbJ2FicyddXG59O1xuZXhwb3J0cy5zaWduRG9jcyA9IHNpZ25Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zcXJ0RG9jcyA9IHZvaWQgMDtcbnZhciBzcXJ0RG9jcyA9IHtcbiAgbmFtZTogJ3NxcnQnLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsnc3FydCh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIHNxdWFyZSByb290IHZhbHVlLiBJZiB4ID0geSAqIHksIHRoZW4geSBpcyB0aGUgc3F1YXJlIHJvb3Qgb2YgeC4nLFxuICBleGFtcGxlczogWydzcXJ0KDI1KScsICc1ICogNScsICdzcXJ0KC0xKSddLFxuICBzZWVhbHNvOiBbJ3NxdWFyZScsICdzcXJ0bScsICdtdWx0aXBseScsICdudGhSb290JywgJ250aFJvb3RzJywgJ3BvdyddXG59O1xuZXhwb3J0cy5zcXJ0RG9jcyA9IHNxcnREb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zcXJ0bURvY3MgPSB2b2lkIDA7XG52YXIgc3FydG1Eb2NzID0ge1xuICBuYW1lOiAnc3FydG0nLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsnc3FydG0oeCknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIHByaW5jaXBhbCBzcXVhcmUgcm9vdCBvZiBhIHNxdWFyZSBtYXRyaXguIFRoZSBwcmluY2lwYWwgc3F1YXJlIHJvb3QgbWF0cml4IGBYYCBvZiBhbm90aGVyIG1hdHJpeCBgQWAgaXMgc3VjaCB0aGF0IGBYICogWCA9IEFgLicsXG4gIGV4YW1wbGVzOiBbJ3NxcnRtKFtbMSwgMl0sIFszLCA0XV0pJ10sXG4gIHNlZWFsc286IFsnc3FydCcsICdhYnMnLCAnc3F1YXJlJywgJ211bHRpcGx5J11cbn07XG5leHBvcnRzLnNxcnRtRG9jcyA9IHNxcnRtRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3F1YXJlRG9jcyA9IHZvaWQgMDtcbnZhciBzcXVhcmVEb2NzID0ge1xuICBuYW1lOiAnc3F1YXJlJyxcbiAgY2F0ZWdvcnk6ICdBcml0aG1ldGljJyxcbiAgc3ludGF4OiBbJ3NxdWFyZSh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIHNxdWFyZSBvZiBhIHZhbHVlLiBUaGUgc3F1YXJlIG9mIHggaXMgeCAqIHguJyxcbiAgZXhhbXBsZXM6IFsnc3F1YXJlKDMpJywgJ3NxcnQoOSknLCAnM14yJywgJzMgKiAzJ10sXG4gIHNlZWFsc286IFsnbXVsdGlwbHknLCAncG93JywgJ3NxcnQnLCAnY3ViZSddXG59O1xuZXhwb3J0cy5zcXVhcmVEb2NzID0gc3F1YXJlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3VidHJhY3REb2NzID0gdm9pZCAwO1xudmFyIHN1YnRyYWN0RG9jcyA9IHtcbiAgbmFtZTogJ3N1YnRyYWN0JyxcbiAgY2F0ZWdvcnk6ICdPcGVyYXRvcnMnLFxuICBzeW50YXg6IFsneCAtIHknLCAnc3VidHJhY3QoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdzdWJ0cmFjdCB0d28gdmFsdWVzLicsXG4gIGV4YW1wbGVzOiBbJ2EgPSA1LjMgLSAyJywgJ2EgKyAyJywgJzIvMyAtIDEvNicsICcyICogMyAtIDMnLCAnMi4xIGttIC0gNTAwbSddLFxuICBzZWVhbHNvOiBbJ2FkZCddXG59O1xuZXhwb3J0cy5zdWJ0cmFjdERvY3MgPSBzdWJ0cmFjdERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnVuYXJ5TWludXNEb2NzID0gdm9pZCAwO1xudmFyIHVuYXJ5TWludXNEb2NzID0ge1xuICBuYW1lOiAndW5hcnlNaW51cycsXG4gIGNhdGVnb3J5OiAnT3BlcmF0b3JzJyxcbiAgc3ludGF4OiBbJy14JywgJ3VuYXJ5TWludXMoeCknXSxcbiAgZGVzY3JpcHRpb246ICdJbnZlcnNlIHRoZSBzaWduIG9mIGEgdmFsdWUuIENvbnZlcnRzIGJvb2xlYW5zIGFuZCBzdHJpbmdzIHRvIG51bWJlcnMuJyxcbiAgZXhhbXBsZXM6IFsnLTQuNScsICctKC01LjYpJywgJy1cIjIyXCInXSxcbiAgc2VlYWxzbzogWydhZGQnLCAnc3VidHJhY3QnLCAndW5hcnlQbHVzJ11cbn07XG5leHBvcnRzLnVuYXJ5TWludXNEb2NzID0gdW5hcnlNaW51c0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnVuYXJ5UGx1c0RvY3MgPSB2b2lkIDA7XG52YXIgdW5hcnlQbHVzRG9jcyA9IHtcbiAgbmFtZTogJ3VuYXJ5UGx1cycsXG4gIGNhdGVnb3J5OiAnT3BlcmF0b3JzJyxcbiAgc3ludGF4OiBbJyt4JywgJ3VuYXJ5UGx1cyh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbnZlcnRzIGJvb2xlYW5zIGFuZCBzdHJpbmdzIHRvIG51bWJlcnMuJyxcbiAgZXhhbXBsZXM6IFsnK3RydWUnLCAnK1wiMlwiJ10sXG4gIHNlZWFsc286IFsnYWRkJywgJ3N1YnRyYWN0JywgJ3VuYXJ5TWludXMnXVxufTtcbmV4cG9ydHMudW5hcnlQbHVzRG9jcyA9IHVuYXJ5UGx1c0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnhnY2REb2NzID0gdm9pZCAwO1xudmFyIHhnY2REb2NzID0ge1xuICBuYW1lOiAneGdjZCcsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWyd4Z2NkKGEsIGIpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBleHRlbmRlZCBncmVhdGVzdCBjb21tb24gZGl2aXNvciBmb3IgdHdvIHZhbHVlcy4gVGhlIHJlc3VsdCBpcyBhbiBhcnJheSBbZCwgeCwgeV0gd2l0aCAzIGVudHJpZXMsIHdoZXJlIGQgaXMgdGhlIGdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yLCBhbmQgZCA9IHggKiBhICsgeSAqIGIuJyxcbiAgZXhhbXBsZXM6IFsneGdjZCg4LCAxMiknLCAnZ2NkKDgsIDEyKScsICd4Z2NkKDM2MTYzLCAyMTE5OSknXSxcbiAgc2VlYWxzbzogWydnY2QnLCAnbGNtJ11cbn07XG5leHBvcnRzLnhnY2REb2NzID0geGdjZERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJpdEFuZERvY3MgPSB2b2lkIDA7XG52YXIgYml0QW5kRG9jcyA9IHtcbiAgbmFtZTogJ2JpdEFuZCcsXG4gIGNhdGVnb3J5OiAnQml0d2lzZScsXG4gIHN5bnRheDogWyd4ICYgeScsICdiaXRBbmQoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdCaXR3aXNlIEFORCBvcGVyYXRpb24uIFBlcmZvcm1zIHRoZSBsb2dpY2FsIEFORCBvcGVyYXRpb24gb24gZWFjaCBwYWlyIG9mIHRoZSBjb3JyZXNwb25kaW5nIGJpdHMgb2YgdGhlIHR3byBnaXZlbiB2YWx1ZXMgYnkgbXVsdGlwbHlpbmcgdGhlbS4gSWYgYm90aCBiaXRzIGluIHRoZSBjb21wYXJlZCBwb3NpdGlvbiBhcmUgMSwgdGhlIGJpdCBpbiB0aGUgcmVzdWx0aW5nIGJpbmFyeSByZXByZXNlbnRhdGlvbiBpcyAxLCBvdGhlcndpc2UsIHRoZSByZXN1bHQgaXMgMCcsXG4gIGV4YW1wbGVzOiBbJzUgJiAzJywgJ2JpdEFuZCg1MywgMTMxKScsICdbMSwgMTIsIDMxXSAmIDQyJ10sXG4gIHNlZWFsc286IFsnYml0Tm90JywgJ2JpdE9yJywgJ2JpdFhvcicsICdsZWZ0U2hpZnQnLCAncmlnaHRBcml0aFNoaWZ0JywgJ3JpZ2h0TG9nU2hpZnQnXVxufTtcbmV4cG9ydHMuYml0QW5kRG9jcyA9IGJpdEFuZERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJpdE5vdERvY3MgPSB2b2lkIDA7XG52YXIgYml0Tm90RG9jcyA9IHtcbiAgbmFtZTogJ2JpdE5vdCcsXG4gIGNhdGVnb3J5OiAnQml0d2lzZScsXG4gIHN5bnRheDogWyd+eCcsICdiaXROb3QoeCknXSxcbiAgZGVzY3JpcHRpb246ICdCaXR3aXNlIE5PVCBvcGVyYXRpb24uIFBlcmZvcm1zIGEgbG9naWNhbCBuZWdhdGlvbiBvbiBlYWNoIGJpdCBvZiB0aGUgZ2l2ZW4gdmFsdWUuIEJpdHMgdGhhdCBhcmUgMCBiZWNvbWUgMSwgYW5kIHRob3NlIHRoYXQgYXJlIDEgYmVjb21lIDAuJyxcbiAgZXhhbXBsZXM6IFsnfjEnLCAnfjInLCAnYml0Tm90KFsyLCAtMywgNF0pJ10sXG4gIHNlZWFsc286IFsnYml0QW5kJywgJ2JpdE9yJywgJ2JpdFhvcicsICdsZWZ0U2hpZnQnLCAncmlnaHRBcml0aFNoaWZ0JywgJ3JpZ2h0TG9nU2hpZnQnXVxufTtcbmV4cG9ydHMuYml0Tm90RG9jcyA9IGJpdE5vdERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJpdE9yRG9jcyA9IHZvaWQgMDtcbnZhciBiaXRPckRvY3MgPSB7XG4gIG5hbWU6ICdiaXRPcicsXG4gIGNhdGVnb3J5OiAnQml0d2lzZScsXG4gIHN5bnRheDogWyd4IHwgeScsICdiaXRPcih4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0JpdHdpc2UgT1Igb3BlcmF0aW9uLiBQZXJmb3JtcyB0aGUgbG9naWNhbCBpbmNsdXNpdmUgT1Igb3BlcmF0aW9uIG9uIGVhY2ggcGFpciBvZiBjb3JyZXNwb25kaW5nIGJpdHMgb2YgdGhlIHR3byBnaXZlbiB2YWx1ZXMuIFRoZSByZXN1bHQgaW4gZWFjaCBwb3NpdGlvbiBpcyAxIGlmIHRoZSBmaXJzdCBiaXQgaXMgMSBvciB0aGUgc2Vjb25kIGJpdCBpcyAxIG9yIGJvdGggYml0cyBhcmUgMSwgb3RoZXJ3aXNlLCB0aGUgcmVzdWx0IGlzIDAuJyxcbiAgZXhhbXBsZXM6IFsnNSB8IDMnLCAnYml0T3IoWzEsIDIsIDNdLCA0KSddLFxuICBzZWVhbHNvOiBbJ2JpdEFuZCcsICdiaXROb3QnLCAnYml0WG9yJywgJ2xlZnRTaGlmdCcsICdyaWdodEFyaXRoU2hpZnQnLCAncmlnaHRMb2dTaGlmdCddXG59O1xuZXhwb3J0cy5iaXRPckRvY3MgPSBiaXRPckRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJpdFhvckRvY3MgPSB2b2lkIDA7XG52YXIgYml0WG9yRG9jcyA9IHtcbiAgbmFtZTogJ2JpdFhvcicsXG4gIGNhdGVnb3J5OiAnQml0d2lzZScsXG4gIHN5bnRheDogWydiaXRYb3IoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdCaXR3aXNlIFhPUiBvcGVyYXRpb24sIGV4Y2x1c2l2ZSBPUi4gUGVyZm9ybXMgdGhlIGxvZ2ljYWwgZXhjbHVzaXZlIE9SIG9wZXJhdGlvbiBvbiBlYWNoIHBhaXIgb2YgY29ycmVzcG9uZGluZyBiaXRzIG9mIHRoZSB0d28gZ2l2ZW4gdmFsdWVzLiBUaGUgcmVzdWx0IGluIGVhY2ggcG9zaXRpb24gaXMgMSBpZiBvbmx5IHRoZSBmaXJzdCBiaXQgaXMgMSBvciBvbmx5IHRoZSBzZWNvbmQgYml0IGlzIDEsIGJ1dCB3aWxsIGJlIDAgaWYgYm90aCBhcmUgMCBvciBib3RoIGFyZSAxLicsXG4gIGV4YW1wbGVzOiBbJ2JpdE9yKDEsIDIpJywgJ2JpdFhvcihbMiwgMywgNF0sIDQpJ10sXG4gIHNlZWFsc286IFsnYml0QW5kJywgJ2JpdE5vdCcsICdiaXRPcicsICdsZWZ0U2hpZnQnLCAncmlnaHRBcml0aFNoaWZ0JywgJ3JpZ2h0TG9nU2hpZnQnXVxufTtcbmV4cG9ydHMuYml0WG9yRG9jcyA9IGJpdFhvckRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxlZnRTaGlmdERvY3MgPSB2b2lkIDA7XG52YXIgbGVmdFNoaWZ0RG9jcyA9IHtcbiAgbmFtZTogJ2xlZnRTaGlmdCcsXG4gIGNhdGVnb3J5OiAnQml0d2lzZScsXG4gIHN5bnRheDogWyd4IDw8IHknLCAnbGVmdFNoaWZ0KHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQml0d2lzZSBsZWZ0IGxvZ2ljYWwgc2hpZnQgb2YgYSB2YWx1ZSB4IGJ5IHkgbnVtYmVyIG9mIGJpdHMuJyxcbiAgZXhhbXBsZXM6IFsnNCA8PCAxJywgJzggPj4gMSddLFxuICBzZWVhbHNvOiBbJ2JpdEFuZCcsICdiaXROb3QnLCAnYml0T3InLCAnYml0WG9yJywgJ3JpZ2h0QXJpdGhTaGlmdCcsICdyaWdodExvZ1NoaWZ0J11cbn07XG5leHBvcnRzLmxlZnRTaGlmdERvY3MgPSBsZWZ0U2hpZnREb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yaWdodEFyaXRoU2hpZnREb2NzID0gdm9pZCAwO1xudmFyIHJpZ2h0QXJpdGhTaGlmdERvY3MgPSB7XG4gIG5hbWU6ICdyaWdodEFyaXRoU2hpZnQnLFxuICBjYXRlZ29yeTogJ0JpdHdpc2UnLFxuICBzeW50YXg6IFsneCA+PiB5JywgJ3JpZ2h0QXJpdGhTaGlmdCh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0JpdHdpc2UgcmlnaHQgYXJpdGhtZXRpYyBzaGlmdCBvZiBhIHZhbHVlIHggYnkgeSBudW1iZXIgb2YgYml0cy4nLFxuICBleGFtcGxlczogWyc4ID4+IDEnLCAnNCA8PCAxJywgJy0xMiA+PiAyJ10sXG4gIHNlZWFsc286IFsnYml0QW5kJywgJ2JpdE5vdCcsICdiaXRPcicsICdiaXRYb3InLCAnbGVmdFNoaWZ0JywgJ3JpZ2h0TG9nU2hpZnQnXVxufTtcbmV4cG9ydHMucmlnaHRBcml0aFNoaWZ0RG9jcyA9IHJpZ2h0QXJpdGhTaGlmdERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJpZ2h0TG9nU2hpZnREb2NzID0gdm9pZCAwO1xudmFyIHJpZ2h0TG9nU2hpZnREb2NzID0ge1xuICBuYW1lOiAncmlnaHRMb2dTaGlmdCcsXG4gIGNhdGVnb3J5OiAnQml0d2lzZScsXG4gIHN5bnRheDogWyd4ID4+PiB5JywgJ3JpZ2h0TG9nU2hpZnQoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdCaXR3aXNlIHJpZ2h0IGxvZ2ljYWwgc2hpZnQgb2YgYSB2YWx1ZSB4IGJ5IHkgbnVtYmVyIG9mIGJpdHMuJyxcbiAgZXhhbXBsZXM6IFsnOCA+Pj4gMScsICc0IDw8IDEnLCAnLTEyID4+PiAyJ10sXG4gIHNlZWFsc286IFsnYml0QW5kJywgJ2JpdE5vdCcsICdiaXRPcicsICdiaXRYb3InLCAnbGVmdFNoaWZ0JywgJ3JpZ2h0QXJpdGhTaGlmdCddXG59O1xuZXhwb3J0cy5yaWdodExvZ1NoaWZ0RG9jcyA9IHJpZ2h0TG9nU2hpZnREb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5iZWxsTnVtYmVyc0RvY3MgPSB2b2lkIDA7XG52YXIgYmVsbE51bWJlcnNEb2NzID0ge1xuICBuYW1lOiAnYmVsbE51bWJlcnMnLFxuICBjYXRlZ29yeTogJ0NvbWJpbmF0b3JpY3MnLFxuICBzeW50YXg6IFsnYmVsbE51bWJlcnMobiknXSxcbiAgZGVzY3JpcHRpb246ICdUaGUgQmVsbCBOdW1iZXJzIGNvdW50IHRoZSBudW1iZXIgb2YgcGFydGl0aW9ucyBvZiBhIHNldC4gQSBwYXJ0aXRpb24gaXMgYSBwYWlyd2lzZSBkaXNqb2ludCBzdWJzZXQgb2YgUyB3aG9zZSB1bmlvbiBpcyBTLiBgYmVsbE51bWJlcnNgIG9ubHkgdGFrZXMgaW50ZWdlciBhcmd1bWVudHMuIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIG11c3QgYmUgZW5mb3JjZWQ6IG4gPj0gMC4nLFxuICBleGFtcGxlczogWydiZWxsTnVtYmVycygzKScsICdiZWxsTnVtYmVycyg4KSddLFxuICBzZWVhbHNvOiBbJ3N0aXJsaW5nUzInXVxufTtcbmV4cG9ydHMuYmVsbE51bWJlcnNEb2NzID0gYmVsbE51bWJlcnNEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jYXRhbGFuRG9jcyA9IHZvaWQgMDtcbnZhciBjYXRhbGFuRG9jcyA9IHtcbiAgbmFtZTogJ2NhdGFsYW4nLFxuICBjYXRlZ29yeTogJ0NvbWJpbmF0b3JpY3MnLFxuICBzeW50YXg6IFsnY2F0YWxhbihuKSddLFxuICBkZXNjcmlwdGlvbjogJ1RoZSBDYXRhbGFuIE51bWJlcnMgZW51bWVyYXRlIGNvbWJpbmF0b3JpYWwgc3RydWN0dXJlcyBvZiBtYW55IGRpZmZlcmVudCB0eXBlcy4gY2F0YWxhbiBvbmx5IHRha2VzIGludGVnZXIgYXJndW1lbnRzLiBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbiBtdXN0IGJlIGVuZm9yY2VkOiBuID49IDAuJyxcbiAgZXhhbXBsZXM6IFsnY2F0YWxhbigzKScsICdjYXRhbGFuKDgpJ10sXG4gIHNlZWFsc286IFsnYmVsbE51bWJlcnMnXVxufTtcbmV4cG9ydHMuY2F0YWxhbkRvY3MgPSBjYXRhbGFuRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tcG9zaXRpb25Eb2NzID0gdm9pZCAwO1xudmFyIGNvbXBvc2l0aW9uRG9jcyA9IHtcbiAgbmFtZTogJ2NvbXBvc2l0aW9uJyxcbiAgY2F0ZWdvcnk6ICdDb21iaW5hdG9yaWNzJyxcbiAgc3ludGF4OiBbJ2NvbXBvc2l0aW9uKG4sIGspJ10sXG4gIGRlc2NyaXB0aW9uOiAnVGhlIGNvbXBvc2l0aW9uIGNvdW50cyBvZiBuIGludG8gayBwYXJ0cy4gY29tcG9zaXRpb24gb25seSB0YWtlcyBpbnRlZ2VyIGFyZ3VtZW50cy4gVGhlIGZvbGxvd2luZyBjb25kaXRpb24gbXVzdCBiZSBlbmZvcmNlZDogayA8PSBuLicsXG4gIGV4YW1wbGVzOiBbJ2NvbXBvc2l0aW9uKDUsIDMpJ10sXG4gIHNlZWFsc286IFsnY29tYmluYXRpb25zJ11cbn07XG5leHBvcnRzLmNvbXBvc2l0aW9uRG9jcyA9IGNvbXBvc2l0aW9uRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3RpcmxpbmdTMkRvY3MgPSB2b2lkIDA7XG52YXIgc3RpcmxpbmdTMkRvY3MgPSB7XG4gIG5hbWU6ICdzdGlybGluZ1MyJyxcbiAgY2F0ZWdvcnk6ICdDb21iaW5hdG9yaWNzJyxcbiAgc3ludGF4OiBbJ3N0aXJsaW5nUzIobiwgayknXSxcbiAgZGVzY3JpcHRpb246ICdoZSBTdGlybGluZyBudW1iZXJzIG9mIHRoZSBzZWNvbmQga2luZCwgY291bnRzIHRoZSBudW1iZXIgb2Ygd2F5cyB0byBwYXJ0aXRpb24gYSBzZXQgb2YgbiBsYWJlbGxlZCBvYmplY3RzIGludG8gayBub25lbXB0eSB1bmxhYmVsbGVkIHN1YnNldHMuIGBzdGlybGluZ1MyYCBvbmx5IHRha2VzIGludGVnZXIgYXJndW1lbnRzLiBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbiBtdXN0IGJlIGVuZm9yY2VkOiBrIDw9IG4uIElmIG4gPSBrIG9yIGsgPSAxLCB0aGVuIHMobixrKSA9IDEuJyxcbiAgZXhhbXBsZXM6IFsnc3RpcmxpbmdTMig1LCAzKSddLFxuICBzZWVhbHNvOiBbJ2JlbGxOdW1iZXJzJ11cbn07XG5leHBvcnRzLnN0aXJsaW5nUzJEb2NzID0gc3RpcmxpbmdTMkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFyZ0RvY3MgPSB2b2lkIDA7XG52YXIgYXJnRG9jcyA9IHtcbiAgbmFtZTogJ2FyZycsXG4gIGNhdGVnb3J5OiAnQ29tcGxleCcsXG4gIHN5bnRheDogWydhcmcoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBhcmd1bWVudCBvZiBhIGNvbXBsZXggdmFsdWUuIElmIHggPSBhK2JpLCB0aGUgYXJndW1lbnQgaXMgY29tcHV0ZWQgYXMgYXRhbjIoYiwgYSkuJyxcbiAgZXhhbXBsZXM6IFsnYXJnKDIgKyAyaSknLCAnYXRhbjIoMywgMiknLCAnYXJnKDIgKyAzaSknXSxcbiAgc2VlYWxzbzogWydyZScsICdpbScsICdjb25qJywgJ2FicyddXG59O1xuZXhwb3J0cy5hcmdEb2NzID0gYXJnRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29uakRvY3MgPSB2b2lkIDA7XG52YXIgY29uakRvY3MgPSB7XG4gIG5hbWU6ICdjb25qJyxcbiAgY2F0ZWdvcnk6ICdDb21wbGV4JyxcbiAgc3ludGF4OiBbJ2NvbmooeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBjb21wbGV4IGNvbmp1Z2F0ZSBvZiBhIGNvbXBsZXggdmFsdWUuIElmIHggPSBhK2JpLCB0aGUgY29tcGxleCBjb25qdWdhdGUgaXMgYS1iaS4nLFxuICBleGFtcGxlczogWydjb25qKDIgKyAzaSknLCAnY29uaigyIC0gM2kpJywgJ2NvbmooLTUuMmkpJ10sXG4gIHNlZWFsc286IFsncmUnLCAnaW0nLCAnYWJzJywgJ2FyZyddXG59O1xuZXhwb3J0cy5jb25qRG9jcyA9IGNvbmpEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pbURvY3MgPSB2b2lkIDA7XG52YXIgaW1Eb2NzID0ge1xuICBuYW1lOiAnaW0nLFxuICBjYXRlZ29yeTogJ0NvbXBsZXgnLFxuICBzeW50YXg6IFsnaW0oeCknXSxcbiAgZGVzY3JpcHRpb246ICdHZXQgdGhlIGltYWdpbmFyeSBwYXJ0IG9mIGEgY29tcGxleCBudW1iZXIuJyxcbiAgZXhhbXBsZXM6IFsnaW0oMiArIDNpKScsICdyZSgyICsgM2kpJywgJ2ltKC01LjJpKScsICdpbSgyLjQpJ10sXG4gIHNlZWFsc286IFsncmUnLCAnY29uaicsICdhYnMnLCAnYXJnJ11cbn07XG5leHBvcnRzLmltRG9jcyA9IGltRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmVEb2NzID0gdm9pZCAwO1xudmFyIHJlRG9jcyA9IHtcbiAgbmFtZTogJ3JlJyxcbiAgY2F0ZWdvcnk6ICdDb21wbGV4JyxcbiAgc3ludGF4OiBbJ3JlKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnR2V0IHRoZSByZWFsIHBhcnQgb2YgYSBjb21wbGV4IG51bWJlci4nLFxuICBleGFtcGxlczogWydyZSgyICsgM2kpJywgJ2ltKDIgKyAzaSknLCAncmUoLTUuMmkpJywgJ3JlKDIuNCknXSxcbiAgc2VlYWxzbzogWydpbScsICdjb25qJywgJ2FicycsICdhcmcnXVxufTtcbmV4cG9ydHMucmVEb2NzID0gcmVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5ldmFsdWF0ZURvY3MgPSB2b2lkIDA7XG52YXIgZXZhbHVhdGVEb2NzID0ge1xuICBuYW1lOiAnZXZhbHVhdGUnLFxuICBjYXRlZ29yeTogJ0V4cHJlc3Npb24nLFxuICBzeW50YXg6IFsnZXZhbHVhdGUoZXhwcmVzc2lvbiknLCAnZXZhbHVhdGUoW2V4cHIxLCBleHByMiwgZXhwcjMsIC4uLl0pJ10sXG4gIGRlc2NyaXB0aW9uOiAnRXZhbHVhdGUgYW4gZXhwcmVzc2lvbiBvciBhbiBhcnJheSB3aXRoIGV4cHJlc3Npb25zLicsXG4gIGV4YW1wbGVzOiBbJ2V2YWx1YXRlKFwiMiArIDNcIiknLCAnZXZhbHVhdGUoXCJzcXJ0KFwiICsgNCArIFwiKVwiKSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMuZXZhbHVhdGVEb2NzID0gZXZhbHVhdGVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5oZWxwRG9jcyA9IHZvaWQgMDtcbnZhciBoZWxwRG9jcyA9IHtcbiAgbmFtZTogJ2hlbHAnLFxuICBjYXRlZ29yeTogJ0V4cHJlc3Npb24nLFxuICBzeW50YXg6IFsnaGVscChvYmplY3QpJywgJ2hlbHAoc3RyaW5nKSddLFxuICBkZXNjcmlwdGlvbjogJ0Rpc3BsYXkgZG9jdW1lbnRhdGlvbiBvbiBhIGZ1bmN0aW9uIG9yIGRhdGEgdHlwZS4nLFxuICBleGFtcGxlczogWydoZWxwKHNxcnQpJywgJ2hlbHAoXCJjb21wbGV4XCIpJ10sXG4gIHNlZWFsc286IFtdXG59O1xuZXhwb3J0cy5oZWxwRG9jcyA9IGhlbHBEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kaXN0YW5jZURvY3MgPSB2b2lkIDA7XG52YXIgZGlzdGFuY2VEb2NzID0ge1xuICBuYW1lOiAnZGlzdGFuY2UnLFxuICBjYXRlZ29yeTogJ0dlb21ldHJ5JyxcbiAgc3ludGF4OiBbJ2Rpc3RhbmNlKFt4MSwgeTFdLCBbeDIsIHkyXSknLCAnZGlzdGFuY2UoW1t4MSwgeTFdLCBbeDIsIHkyXV0pJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlcyB0aGUgRXVjbGlkZWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHBvaW50cy4nLFxuICBleGFtcGxlczogWydkaXN0YW5jZShbMCwwXSwgWzQsNF0pJywgJ2Rpc3RhbmNlKFtbMCwwXSwgWzQsNF1dKSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMuZGlzdGFuY2VEb2NzID0gZGlzdGFuY2VEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pbnRlcnNlY3REb2NzID0gdm9pZCAwO1xudmFyIGludGVyc2VjdERvY3MgPSB7XG4gIG5hbWU6ICdpbnRlcnNlY3QnLFxuICBjYXRlZ29yeTogJ0dlb21ldHJ5JyxcbiAgc3ludGF4OiBbJ2ludGVyc2VjdChleHByMSwgZXhwcjIsIGV4cHIzLCBleHByNCknLCAnaW50ZXJzZWN0KGV4cHIxLCBleHByMiwgZXhwcjMpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZXMgdGhlIGludGVyc2VjdGlvbiBwb2ludCBvZiBsaW5lcyBhbmQvb3IgcGxhbmVzLicsXG4gIGV4YW1wbGVzOiBbJ2ludGVyc2VjdChbMCwgMF0sIFsxMCwgMTBdLCBbMTAsIDBdLCBbMCwgMTBdKScsICdpbnRlcnNlY3QoWzEsIDAsIDFdLCAgWzQsIC0yLCAyXSwgWzEsIDEsIDEsIDZdKSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMuaW50ZXJzZWN0RG9jcyA9IGludGVyc2VjdERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFuZERvY3MgPSB2b2lkIDA7XG52YXIgYW5kRG9jcyA9IHtcbiAgbmFtZTogJ2FuZCcsXG4gIGNhdGVnb3J5OiAnTG9naWNhbCcsXG4gIHN5bnRheDogWyd4IGFuZCB5JywgJ2FuZCh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0xvZ2ljYWwgYW5kLiBUZXN0IHdoZXRoZXIgdHdvIHZhbHVlcyBhcmUgYm90aCBkZWZpbmVkIHdpdGggYSBub256ZXJvL25vbmVtcHR5IHZhbHVlLicsXG4gIGV4YW1wbGVzOiBbJ3RydWUgYW5kIGZhbHNlJywgJ3RydWUgYW5kIHRydWUnLCAnMiBhbmQgNCddLFxuICBzZWVhbHNvOiBbJ25vdCcsICdvcicsICd4b3InXVxufTtcbmV4cG9ydHMuYW5kRG9jcyA9IGFuZERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm5vdERvY3MgPSB2b2lkIDA7XG52YXIgbm90RG9jcyA9IHtcbiAgbmFtZTogJ25vdCcsXG4gIGNhdGVnb3J5OiAnTG9naWNhbCcsXG4gIHN5bnRheDogWydub3QgeCcsICdub3QoeCknXSxcbiAgZGVzY3JpcHRpb246ICdMb2dpY2FsIG5vdC4gRmxpcHMgdGhlIGJvb2xlYW4gdmFsdWUgb2YgZ2l2ZW4gYXJndW1lbnQuJyxcbiAgZXhhbXBsZXM6IFsnbm90IHRydWUnLCAnbm90IGZhbHNlJywgJ25vdCAyJywgJ25vdCAwJ10sXG4gIHNlZWFsc286IFsnYW5kJywgJ29yJywgJ3hvciddXG59O1xuZXhwb3J0cy5ub3REb2NzID0gbm90RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMub3JEb2NzID0gdm9pZCAwO1xudmFyIG9yRG9jcyA9IHtcbiAgbmFtZTogJ29yJyxcbiAgY2F0ZWdvcnk6ICdMb2dpY2FsJyxcbiAgc3ludGF4OiBbJ3ggb3IgeScsICdvcih4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0xvZ2ljYWwgb3IuIFRlc3QgaWYgYXQgbGVhc3Qgb25lIHZhbHVlIGlzIGRlZmluZWQgd2l0aCBhIG5vbnplcm8vbm9uZW1wdHkgdmFsdWUuJyxcbiAgZXhhbXBsZXM6IFsndHJ1ZSBvciBmYWxzZScsICdmYWxzZSBvciBmYWxzZScsICcwIG9yIDQnXSxcbiAgc2VlYWxzbzogWydub3QnLCAnYW5kJywgJ3hvciddXG59O1xuZXhwb3J0cy5vckRvY3MgPSBvckRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnhvckRvY3MgPSB2b2lkIDA7XG52YXIgeG9yRG9jcyA9IHtcbiAgbmFtZTogJ3hvcicsXG4gIGNhdGVnb3J5OiAnTG9naWNhbCcsXG4gIHN5bnRheDogWyd4IHhvciB5JywgJ3hvcih4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0xvZ2ljYWwgZXhjbHVzaXZlIG9yLCB4b3IuIFRlc3Qgd2hldGhlciBvbmUgYW5kIG9ubHkgb25lIHZhbHVlIGlzIGRlZmluZWQgd2l0aCBhIG5vbnplcm8vbm9uZW1wdHkgdmFsdWUuJyxcbiAgZXhhbXBsZXM6IFsndHJ1ZSB4b3IgZmFsc2UnLCAnZmFsc2UgeG9yIGZhbHNlJywgJ3RydWUgeG9yIHRydWUnLCAnMCB4b3IgNCddLFxuICBzZWVhbHNvOiBbJ25vdCcsICdhbmQnLCAnb3InXVxufTtcbmV4cG9ydHMueG9yRG9jcyA9IHhvckRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbHVtbkRvY3MgPSB2b2lkIDA7XG52YXIgY29sdW1uRG9jcyA9IHtcbiAgbmFtZTogJ2NvbHVtbicsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ2NvbHVtbih4LCBpbmRleCknXSxcbiAgZGVzY3JpcHRpb246ICdSZXR1cm4gYSBjb2x1bW4gZnJvbSBhIG1hdHJpeCBvciBhcnJheS4nLFxuICBleGFtcGxlczogWydBID0gW1sxLCAyXSwgWzMsIDRdXScsICdjb2x1bW4oQSwgMSknLCAnY29sdW1uKEEsIDIpJ10sXG4gIHNlZWFsc286IFsncm93J11cbn07XG5leHBvcnRzLmNvbHVtbkRvY3MgPSBjb2x1bW5Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb25jYXREb2NzID0gdm9pZCAwO1xudmFyIGNvbmNhdERvY3MgPSB7XG4gIG5hbWU6ICdjb25jYXQnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWydjb25jYXQoQSwgQiwgQywgLi4uKScsICdjb25jYXQoQSwgQiwgQywgLi4uLCBkaW0pJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29uY2F0ZW5hdGUgbWF0cmljZXMuIEJ5IGRlZmF1bHQsIHRoZSBtYXRyaWNlcyBhcmUgY29uY2F0ZW5hdGVkIGJ5IHRoZSBsYXN0IGRpbWVuc2lvbi4gVGhlIGRpbWVuc2lvbiBvbiB3aGljaCB0byBjb25jYXRlbmF0ZSBjYW4gYmUgcHJvdmlkZWQgYXMgbGFzdCBhcmd1bWVudC4nLFxuICBleGFtcGxlczogWydBID0gWzEsIDI7IDUsIDZdJywgJ0IgPSBbMywgNDsgNywgOF0nLCAnY29uY2F0KEEsIEIpJywgJ2NvbmNhdChBLCBCLCAxKScsICdjb25jYXQoQSwgQiwgMiknXSxcbiAgc2VlYWxzbzogWydkZXQnLCAnZGlhZycsICdpZGVudGl0eScsICdpbnYnLCAnb25lcycsICdyYW5nZScsICdzaXplJywgJ3NxdWVlemUnLCAnc3Vic2V0JywgJ3RyYWNlJywgJ3RyYW5zcG9zZScsICd6ZXJvcyddXG59O1xuZXhwb3J0cy5jb25jYXREb2NzID0gY29uY2F0RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3Jvc3NEb2NzID0gdm9pZCAwO1xudmFyIGNyb3NzRG9jcyA9IHtcbiAgbmFtZTogJ2Nyb3NzJyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsnY3Jvc3MoQSwgQiknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIGNyb3NzIHByb2R1Y3QgZm9yIHR3byB2ZWN0b3JzIGluIHRocmVlIGRpbWVuc2lvbmFsIHNwYWNlLicsXG4gIGV4YW1wbGVzOiBbJ2Nyb3NzKFsxLCAxLCAwXSwgIFswLCAxLCAxXSknLCAnY3Jvc3MoWzMsIC0zLCAxXSwgWzQsIDksIDJdKScsICdjcm9zcyhbMiwgMywgNF0sICBbNSwgNiwgN10pJ10sXG4gIHNlZWFsc286IFsnbXVsdGlwbHknLCAnZG90J11cbn07XG5leHBvcnRzLmNyb3NzRG9jcyA9IGNyb3NzRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3RyYW5zcG9zZURvY3MgPSB2b2lkIDA7XG52YXIgY3RyYW5zcG9zZURvY3MgPSB7XG4gIG5hbWU6ICdjdHJhbnNwb3NlJyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsneFxcJycsICdjdHJhbnNwb3NlKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcGxleCBDb25qdWdhdGUgYW5kIFRyYW5zcG9zZSBhIG1hdHJpeCcsXG4gIGV4YW1wbGVzOiBbJ2EgPSBbMSwgMiwgMzsgNCwgNSwgNl0nLCAnYVxcJycsICdjdHJhbnNwb3NlKGEpJ10sXG4gIHNlZWFsc286IFsnY29uY2F0JywgJ2RldCcsICdkaWFnJywgJ2lkZW50aXR5JywgJ2ludicsICdvbmVzJywgJ3JhbmdlJywgJ3NpemUnLCAnc3F1ZWV6ZScsICdzdWJzZXQnLCAndHJhY2UnLCAnemVyb3MnXVxufTtcbmV4cG9ydHMuY3RyYW5zcG9zZURvY3MgPSBjdHJhbnNwb3NlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGV0RG9jcyA9IHZvaWQgMDtcbnZhciBkZXREb2NzID0ge1xuICBuYW1lOiAnZGV0JyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsnZGV0KHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudCBvZiBhIG1hdHJpeCcsXG4gIGV4YW1wbGVzOiBbJ2RldChbMSwgMjsgMywgNF0pJywgJ2RldChbLTIsIDIsIDM7IC0xLCAxLCAzOyAyLCAwLCAtMV0pJ10sXG4gIHNlZWFsc286IFsnY29uY2F0JywgJ2RpYWcnLCAnaWRlbnRpdHknLCAnaW52JywgJ29uZXMnLCAncmFuZ2UnLCAnc2l6ZScsICdzcXVlZXplJywgJ3N1YnNldCcsICd0cmFjZScsICd0cmFuc3Bvc2UnLCAnemVyb3MnXVxufTtcbmV4cG9ydHMuZGV0RG9jcyA9IGRldERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRpYWdEb2NzID0gdm9pZCAwO1xudmFyIGRpYWdEb2NzID0ge1xuICBuYW1lOiAnZGlhZycsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ2RpYWcoeCknLCAnZGlhZyh4LCBrKSddLFxuICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSBhIGRpYWdvbmFsIG1hdHJpeCBvciByZXRyaWV2ZSB0aGUgZGlhZ29uYWwgb2YgYSBtYXRyaXguIFdoZW4geCBpcyBhIHZlY3RvciwgYSBtYXRyaXggd2l0aCB0aGUgdmVjdG9yIHZhbHVlcyBvbiB0aGUgZGlhZ29uYWwgd2lsbCBiZSByZXR1cm5lZC4gV2hlbiB4IGlzIGEgbWF0cml4LCBhIHZlY3RvciB3aXRoIHRoZSBkaWFnb25hbCB2YWx1ZXMgb2YgdGhlIG1hdHJpeCBpcyByZXR1cm5lZC4gV2hlbiBrIGlzIHByb3ZpZGVkLCB0aGUgay10aCBkaWFnb25hbCB3aWxsIGJlIGZpbGxlZCBpbiBvciByZXRyaWV2ZWQsIGlmIGsgaXMgcG9zaXRpdmUsIHRoZSB2YWx1ZXMgYXJlIHBsYWNlZCBvbiB0aGUgc3VwZXIgZGlhZ29uYWwuIFdoZW4gayBpcyBuZWdhdGl2ZSwgdGhlIHZhbHVlcyBhcmUgcGxhY2VkIG9uIHRoZSBzdWIgZGlhZ29uYWwuJyxcbiAgZXhhbXBsZXM6IFsnZGlhZygxOjMpJywgJ2RpYWcoMTozLCAxKScsICdhID0gWzEsIDIsIDM7IDQsIDUsIDY7IDcsIDgsIDldJywgJ2RpYWcoYSknXSxcbiAgc2VlYWxzbzogWydjb25jYXQnLCAnZGV0JywgJ2lkZW50aXR5JywgJ2ludicsICdvbmVzJywgJ3JhbmdlJywgJ3NpemUnLCAnc3F1ZWV6ZScsICdzdWJzZXQnLCAndHJhY2UnLCAndHJhbnNwb3NlJywgJ3plcm9zJ11cbn07XG5leHBvcnRzLmRpYWdEb2NzID0gZGlhZ0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRvdERvY3MgPSB2b2lkIDA7XG52YXIgZG90RG9jcyA9IHtcbiAgbmFtZTogJ2RvdCcsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ2RvdChBLCBCKScsICdBICogQiddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgZG90IHByb2R1Y3Qgb2YgdHdvIHZlY3RvcnMuICcgKyAnVGhlIGRvdCBwcm9kdWN0IG9mIEEgPSBbYTEsIGEyLCBhMywgLi4uLCBhbl0gYW5kIEIgPSBbYjEsIGIyLCBiMywgLi4uLCBibl0gJyArICdpcyBkZWZpbmVkIGFzIGRvdChBLCBCKSA9IGExICogYjEgKyBhMiAqIGIyICsgYTMgKiBiMyArIC4uLiArIGFuICogYm4nLFxuICBleGFtcGxlczogWydkb3QoWzIsIDQsIDFdLCBbMiwgMiwgM10pJywgJ1syLCA0LCAxXSAqIFsyLCAyLCAzXSddLFxuICBzZWVhbHNvOiBbJ211bHRpcGx5JywgJ2Nyb3NzJ11cbn07XG5leHBvcnRzLmRvdERvY3MgPSBkb3REb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5laWdzRG9jcyA9IHZvaWQgMDtcbnZhciBlaWdzRG9jcyA9IHtcbiAgbmFtZTogJ2VpZ3MnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWydlaWdzKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBlaWdlbnZhbHVlcyBhbmQgZWlnZW52ZWN0b3JzIG9mIGEgcmVhbCBzeW1tZXRyaWMgbWF0cml4JyxcbiAgZXhhbXBsZXM6IFsnZWlncyhbWzUsIDIuM10sIFsyLjMsIDFdXSknXSxcbiAgc2VlYWxzbzogWydpbnYnXVxufTtcbmV4cG9ydHMuZWlnc0RvY3MgPSBlaWdzRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZmlsdGVyRG9jcyA9IHZvaWQgMDtcbnZhciBmaWx0ZXJEb2NzID0ge1xuICBuYW1lOiAnZmlsdGVyJyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsnZmlsdGVyKHgsIHRlc3QpJ10sXG4gIGRlc2NyaXB0aW9uOiAnRmlsdGVyIGl0ZW1zIGluIGEgbWF0cml4LicsXG4gIGV4YW1wbGVzOiBbJ2lzUG9zaXRpdmUoeCkgPSB4ID4gMCcsICdmaWx0ZXIoWzYsIC0yLCAtMSwgNCwgM10sIGlzUG9zaXRpdmUpJywgJ2ZpbHRlcihbNiwgLTIsIDAsIDEsIDBdLCB4ICE9IDApJ10sXG4gIHNlZWFsc286IFsnc29ydCcsICdtYXAnLCAnZm9yRWFjaCddXG59O1xuZXhwb3J0cy5maWx0ZXJEb2NzID0gZmlsdGVyRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZmxhdHRlbkRvY3MgPSB2b2lkIDA7XG52YXIgZmxhdHRlbkRvY3MgPSB7XG4gIG5hbWU6ICdmbGF0dGVuJyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsnZmxhdHRlbih4KSddLFxuICBkZXNjcmlwdGlvbjogJ0ZsYXR0ZW4gYSBtdWx0aSBkaW1lbnNpb25hbCBtYXRyaXggaW50byBhIHNpbmdsZSBkaW1lbnNpb25hbCBtYXRyaXguJyxcbiAgZXhhbXBsZXM6IFsnYSA9IFsxLCAyLCAzOyA0LCA1LCA2XScsICdzaXplKGEpJywgJ2IgPSBmbGF0dGVuKGEpJywgJ3NpemUoYiknXSxcbiAgc2VlYWxzbzogWydjb25jYXQnLCAncmVzaXplJywgJ3NpemUnLCAnc3F1ZWV6ZSddXG59O1xuZXhwb3J0cy5mbGF0dGVuRG9jcyA9IGZsYXR0ZW5Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5mb3JFYWNoRG9jcyA9IHZvaWQgMDtcbnZhciBmb3JFYWNoRG9jcyA9IHtcbiAgbmFtZTogJ2ZvckVhY2gnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWydmb3JFYWNoKHgsIGNhbGxiYWNrKSddLFxuICBkZXNjcmlwdGlvbjogJ0l0ZXJhdGVzIG92ZXIgYWxsIGVsZW1lbnRzIG9mIGEgbWF0cml4L2FycmF5LCBhbmQgZXhlY3V0ZXMgdGhlIGdpdmVuIGNhbGxiYWNrIGZ1bmN0aW9uLicsXG4gIGV4YW1wbGVzOiBbJ2ZvckVhY2goWzEsIDIsIDNdLCBmdW5jdGlvbih2YWwpIHsgY29uc29sZS5sb2codmFsKSB9KSddLFxuICBzZWVhbHNvOiBbJ21hcCcsICdzb3J0JywgJ2ZpbHRlciddXG59O1xuZXhwb3J0cy5mb3JFYWNoRG9jcyA9IGZvckVhY2hEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5nZXRNYXRyaXhEYXRhVHlwZURvY3MgPSB2b2lkIDA7XG52YXIgZ2V0TWF0cml4RGF0YVR5cGVEb2NzID0ge1xuICBuYW1lOiAnZ2V0TWF0cml4RGF0YVR5cGUnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWydnZXRNYXRyaXhEYXRhVHlwZSh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0ZpbmQgdGhlIGRhdGEgdHlwZSBvZiBhbGwgZWxlbWVudHMgaW4gYSBtYXRyaXggb3IgYXJyYXksICcgKyAnZm9yIGV4YW1wbGUgXCJudW1iZXJcIiBpZiBhbGwgaXRlbXMgYXJlIGEgbnVtYmVyICcgKyAnYW5kIFwiQ29tcGxleFwiIGlmIGFsbCB2YWx1ZXMgYXJlIGNvbXBsZXggbnVtYmVycy4gJyArICdJZiBhIG1hdHJpeCBjb250YWlucyBtb3JlIHRoYW4gb25lIGRhdGEgdHlwZSwgaXQgd2lsbCByZXR1cm4gXCJtaXhlZFwiLicsXG4gIGV4YW1wbGVzOiBbJ2dldE1hdHJpeERhdGFUeXBlKFsxLCAyLCAzXSknLCAnZ2V0TWF0cml4RGF0YVR5cGUoW1s1IGNtXSwgWzIgaW5jaF1dKScsICdnZXRNYXRyaXhEYXRhVHlwZShbMSwgXCJ0ZXh0XCJdKScsICdnZXRNYXRyaXhEYXRhVHlwZShbMSwgYmlnbnVtYmVyKDQpXSknXSxcbiAgc2VlYWxzbzogWydtYXRyaXgnLCAnc3BhcnNlJywgJ3R5cGVPZiddXG59O1xuZXhwb3J0cy5nZXRNYXRyaXhEYXRhVHlwZURvY3MgPSBnZXRNYXRyaXhEYXRhVHlwZURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmlkZW50aXR5RG9jcyA9IHZvaWQgMDtcbnZhciBpZGVudGl0eURvY3MgPSB7XG4gIG5hbWU6ICdpZGVudGl0eScsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ2lkZW50aXR5KG4pJywgJ2lkZW50aXR5KG0sIG4pJywgJ2lkZW50aXR5KFttLCBuXSknXSxcbiAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBpZGVudGl0eSBtYXRyaXggd2l0aCBzaXplIG0tYnktbi4gVGhlIG1hdHJpeCBoYXMgb25lcyBvbiB0aGUgZGlhZ29uYWwgYW5kIHplcm9zIGVsc2V3aGVyZS4nLFxuICBleGFtcGxlczogWydpZGVudGl0eSgzKScsICdpZGVudGl0eSgzLCA1KScsICdhID0gWzEsIDIsIDM7IDQsIDUsIDZdJywgJ2lkZW50aXR5KHNpemUoYSkpJ10sXG4gIHNlZWFsc286IFsnY29uY2F0JywgJ2RldCcsICdkaWFnJywgJ2ludicsICdvbmVzJywgJ3JhbmdlJywgJ3NpemUnLCAnc3F1ZWV6ZScsICdzdWJzZXQnLCAndHJhY2UnLCAndHJhbnNwb3NlJywgJ3plcm9zJ11cbn07XG5leHBvcnRzLmlkZW50aXR5RG9jcyA9IGlkZW50aXR5RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaW52RG9jcyA9IHZvaWQgMDtcbnZhciBpbnZEb2NzID0ge1xuICBuYW1lOiAnaW52JyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsnaW52KHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBpbnZlcnNlIG9mIGEgbWF0cml4JyxcbiAgZXhhbXBsZXM6IFsnaW52KFsxLCAyOyAzLCA0XSknLCAnaW52KDQpJywgJzEgLyA0J10sXG4gIHNlZWFsc286IFsnY29uY2F0JywgJ2RldCcsICdkaWFnJywgJ2lkZW50aXR5JywgJ29uZXMnLCAncmFuZ2UnLCAnc2l6ZScsICdzcXVlZXplJywgJ3N1YnNldCcsICd0cmFjZScsICd0cmFuc3Bvc2UnLCAnemVyb3MnXVxufTtcbmV4cG9ydHMuaW52RG9jcyA9IGludkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmtyb25Eb2NzID0gdm9pZCAwO1xudmFyIGtyb25Eb2NzID0ge1xuICBuYW1lOiAna3JvbicsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ2tyb24oeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGVzIHRoZSBrcm9uZWNrZXIgcHJvZHVjdCBvZiAyIG1hdHJpY2VzIG9yIHZlY3RvcnMuJyxcbiAgZXhhbXBsZXM6IFsna3JvbihbWzEsIDBdLCBbMCwgMV1dLCBbWzEsIDJdLCBbMywgNF1dKScsICdrcm9uKFsxLDFdLCBbMiwzLDRdKSddLFxuICBzZWVhbHNvOiBbJ211bHRpcGx5JywgJ2RvdCcsICdjcm9zcyddXG59O1xuZXhwb3J0cy5rcm9uRG9jcyA9IGtyb25Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tYXBEb2NzID0gdm9pZCAwO1xudmFyIG1hcERvY3MgPSB7XG4gIG5hbWU6ICdtYXAnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWydtYXAoeCwgY2FsbGJhY2spJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIGEgbmV3IG1hdHJpeCBvciBhcnJheSB3aXRoIHRoZSByZXN1bHRzIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBleGVjdXRlZCBvbiBlYWNoIGVudHJ5IG9mIHRoZSBtYXRyaXgvYXJyYXkuJyxcbiAgZXhhbXBsZXM6IFsnbWFwKFsxLCAyLCAzXSwgc3F1YXJlKSddLFxuICBzZWVhbHNvOiBbJ2ZpbHRlcicsICdmb3JFYWNoJ11cbn07XG5leHBvcnRzLm1hcERvY3MgPSBtYXBEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5vbmVzRG9jcyA9IHZvaWQgMDtcbnZhciBvbmVzRG9jcyA9IHtcbiAgbmFtZTogJ29uZXMnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWydvbmVzKG0pJywgJ29uZXMobSwgbiknLCAnb25lcyhtLCBuLCBwLCAuLi4pJywgJ29uZXMoW21dKScsICdvbmVzKFttLCBuXSknLCAnb25lcyhbbSwgbiwgcCwgLi4uXSknXSxcbiAgZGVzY3JpcHRpb246ICdDcmVhdGUgYSBtYXRyaXggY29udGFpbmluZyBvbmVzLicsXG4gIGV4YW1wbGVzOiBbJ29uZXMoMyknLCAnb25lcygzLCA1KScsICdvbmVzKFsyLDNdKSAqIDQuNScsICdhID0gWzEsIDIsIDM7IDQsIDUsIDZdJywgJ29uZXMoc2l6ZShhKSknXSxcbiAgc2VlYWxzbzogWydjb25jYXQnLCAnZGV0JywgJ2RpYWcnLCAnaWRlbnRpdHknLCAnaW52JywgJ3JhbmdlJywgJ3NpemUnLCAnc3F1ZWV6ZScsICdzdWJzZXQnLCAndHJhY2UnLCAndHJhbnNwb3NlJywgJ3plcm9zJ11cbn07XG5leHBvcnRzLm9uZXNEb2NzID0gb25lc0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBhcnRpdGlvblNlbGVjdERvY3MgPSB2b2lkIDA7XG52YXIgcGFydGl0aW9uU2VsZWN0RG9jcyA9IHtcbiAgbmFtZTogJ3BhcnRpdGlvblNlbGVjdCcsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ3BhcnRpdGlvblNlbGVjdCh4LCBrKScsICdwYXJ0aXRpb25TZWxlY3QoeCwgaywgY29tcGFyZSknXSxcbiAgZGVzY3JpcHRpb246ICdQYXJ0aXRpb24tYmFzZWQgc2VsZWN0aW9uIG9mIGFuIGFycmF5IG9yIDFEIG1hdHJpeC4gV2lsbCBmaW5kIHRoZSBrdGggc21hbGxlc3QgdmFsdWUsIGFuZCBtdXRhdGVzIHRoZSBpbnB1dCBhcnJheS4gVXNlcyBRdWlja3NlbGVjdC4nLFxuICBleGFtcGxlczogWydwYXJ0aXRpb25TZWxlY3QoWzUsIDEwLCAxXSwgMiknLCAncGFydGl0aW9uU2VsZWN0KFtcIkNcIiwgXCJCXCIsIFwiQVwiLCBcIkRcIl0sIDEpJ10sXG4gIHNlZWFsc286IFsnc29ydCddXG59O1xuZXhwb3J0cy5wYXJ0aXRpb25TZWxlY3REb2NzID0gcGFydGl0aW9uU2VsZWN0RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmFuZ2VEb2NzID0gdm9pZCAwO1xudmFyIHJhbmdlRG9jcyA9IHtcbiAgbmFtZTogJ3JhbmdlJyxcbiAgY2F0ZWdvcnk6ICdUeXBlJyxcbiAgc3ludGF4OiBbJ3N0YXJ0OmVuZCcsICdzdGFydDpzdGVwOmVuZCcsICdyYW5nZShzdGFydCwgZW5kKScsICdyYW5nZShzdGFydCwgZW5kLCBzdGVwKScsICdyYW5nZShzdHJpbmcpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIGEgcmFuZ2UuIExvd2VyIGJvdW5kIG9mIHRoZSByYW5nZSBpcyBpbmNsdWRlZCwgdXBwZXIgYm91bmQgaXMgZXhjbHVkZWQuJyxcbiAgZXhhbXBsZXM6IFsnMTo1JywgJzM6LTE6LTMnLCAncmFuZ2UoMywgNyknLCAncmFuZ2UoMCwgMTIsIDIpJywgJ3JhbmdlKFwiNDoxMFwiKScsICdhID0gWzEsIDIsIDMsIDQ7IDUsIDYsIDcsIDhdJywgJ2FbMToyLCAxOjJdJ10sXG4gIHNlZWFsc286IFsnY29uY2F0JywgJ2RldCcsICdkaWFnJywgJ2lkZW50aXR5JywgJ2ludicsICdvbmVzJywgJ3NpemUnLCAnc3F1ZWV6ZScsICdzdWJzZXQnLCAndHJhY2UnLCAndHJhbnNwb3NlJywgJ3plcm9zJ11cbn07XG5leHBvcnRzLnJhbmdlRG9jcyA9IHJhbmdlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmVzaGFwZURvY3MgPSB2b2lkIDA7XG52YXIgcmVzaGFwZURvY3MgPSB7XG4gIG5hbWU6ICdyZXNoYXBlJyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsncmVzaGFwZSh4LCBzaXplcyknXSxcbiAgZGVzY3JpcHRpb246ICdSZXNoYXBlIGEgbXVsdGkgZGltZW5zaW9uYWwgYXJyYXkgdG8gZml0IHRoZSBzcGVjaWZpZWQgZGltZW5zaW9ucy4nLFxuICBleGFtcGxlczogWydyZXNoYXBlKFsxLCAyLCAzLCA0LCA1LCA2XSwgWzIsIDNdKScsICdyZXNoYXBlKFtbMSwgMl0sIFszLCA0XV0sIFsxLCA0XSknLCAncmVzaGFwZShbWzEsIDJdLCBbMywgNF1dLCBbNF0pJ10sXG4gIHNlZWFsc286IFsnc2l6ZScsICdzcXVlZXplJywgJ3Jlc2l6ZSddXG59O1xuZXhwb3J0cy5yZXNoYXBlRG9jcyA9IHJlc2hhcGVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yZXNpemVEb2NzID0gdm9pZCAwO1xudmFyIHJlc2l6ZURvY3MgPSB7XG4gIG5hbWU6ICdyZXNpemUnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWydyZXNpemUoeCwgc2l6ZSknLCAncmVzaXplKHgsIHNpemUsIGRlZmF1bHRWYWx1ZSknXSxcbiAgZGVzY3JpcHRpb246ICdSZXNpemUgYSBtYXRyaXguJyxcbiAgZXhhbXBsZXM6IFsncmVzaXplKFsxLDIsMyw0LDVdLCBbM10pJywgJ3Jlc2l6ZShbMSwyLDNdLCBbNV0pJywgJ3Jlc2l6ZShbMSwyLDNdLCBbNV0sIC0xKScsICdyZXNpemUoMiwgWzIsIDNdKScsICdyZXNpemUoXCJoZWxsb1wiLCBbOF0sIFwiIVwiKSddLFxuICBzZWVhbHNvOiBbJ3NpemUnLCAnc3Vic2V0JywgJ3NxdWVlemUnLCAncmVzaGFwZSddXG59O1xuZXhwb3J0cy5yZXNpemVEb2NzID0gcmVzaXplRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucm93RG9jcyA9IHZvaWQgMDtcbnZhciByb3dEb2NzID0ge1xuICBuYW1lOiAncm93JyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsncm93KHgsIGluZGV4KSddLFxuICBkZXNjcmlwdGlvbjogJ1JldHVybiBhIHJvdyBmcm9tIGEgbWF0cml4IG9yIGFycmF5LicsXG4gIGV4YW1wbGVzOiBbJ0EgPSBbWzEsIDJdLCBbMywgNF1dJywgJ3JvdyhBLCAxKScsICdyb3coQSwgMiknXSxcbiAgc2VlYWxzbzogWydjb2x1bW4nXVxufTtcbmV4cG9ydHMucm93RG9jcyA9IHJvd0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNpemVEb2NzID0gdm9pZCAwO1xudmFyIHNpemVEb2NzID0ge1xuICBuYW1lOiAnc2l6ZScsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ3NpemUoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIHNpemUgb2YgYSBtYXRyaXguJyxcbiAgZXhhbXBsZXM6IFsnc2l6ZSgyLjMpJywgJ3NpemUoXCJoZWxsbyB3b3JsZFwiKScsICdhID0gWzEsIDI7IDMsIDQ7IDUsIDZdJywgJ3NpemUoYSknLCAnc2l6ZSgxOjYpJ10sXG4gIHNlZWFsc286IFsnY29uY2F0JywgJ2RldCcsICdkaWFnJywgJ2lkZW50aXR5JywgJ2ludicsICdvbmVzJywgJ3JhbmdlJywgJ3NxdWVlemUnLCAnc3Vic2V0JywgJ3RyYWNlJywgJ3RyYW5zcG9zZScsICd6ZXJvcyddXG59O1xuZXhwb3J0cy5zaXplRG9jcyA9IHNpemVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zb3J0RG9jcyA9IHZvaWQgMDtcbnZhciBzb3J0RG9jcyA9IHtcbiAgbmFtZTogJ3NvcnQnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWydzb3J0KHgpJywgJ3NvcnQoeCwgY29tcGFyZSknXSxcbiAgZGVzY3JpcHRpb246ICdTb3J0IHRoZSBpdGVtcyBpbiBhIG1hdHJpeC4gQ29tcGFyZSBjYW4gYmUgYSBzdHJpbmcgXCJhc2NcIiwgXCJkZXNjXCIsIFwibmF0dXJhbFwiLCBvciBhIGN1c3RvbSBzb3J0IGZ1bmN0aW9uLicsXG4gIGV4YW1wbGVzOiBbJ3NvcnQoWzUsIDEwLCAxXSknLCAnc29ydChbXCJDXCIsIFwiQlwiLCBcIkFcIiwgXCJEXCJdKScsICdzb3J0QnlMZW5ndGgoYSwgYikgPSBzaXplKGEpWzFdIC0gc2l6ZShiKVsxXScsICdzb3J0KFtcIkxhbmdkb25cIiwgXCJUb21cIiwgXCJTYXJhXCJdLCBzb3J0QnlMZW5ndGgpJywgJ3NvcnQoW1wiMTBcIiwgXCIxXCIsIFwiMlwiXSwgXCJuYXR1cmFsXCIpJ10sXG4gIHNlZWFsc286IFsnbWFwJywgJ2ZpbHRlcicsICdmb3JFYWNoJ11cbn07XG5leHBvcnRzLnNvcnREb2NzID0gc29ydERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNxdWVlemVEb2NzID0gdm9pZCAwO1xudmFyIHNxdWVlemVEb2NzID0ge1xuICBuYW1lOiAnc3F1ZWV6ZScsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ3NxdWVlemUoeCknXSxcbiAgZGVzY3JpcHRpb246ICdSZW1vdmUgaW5uZXIgYW5kIG91dGVyIHNpbmdsZXRvbiBkaW1lbnNpb25zIGZyb20gYSBtYXRyaXguJyxcbiAgZXhhbXBsZXM6IFsnYSA9IHplcm9zKDMsMiwxKScsICdzaXplKHNxdWVlemUoYSkpJywgJ2IgPSB6ZXJvcygxLDEsMyknLCAnc2l6ZShzcXVlZXplKGIpKSddLFxuICBzZWVhbHNvOiBbJ2NvbmNhdCcsICdkZXQnLCAnZGlhZycsICdpZGVudGl0eScsICdpbnYnLCAnb25lcycsICdyYW5nZScsICdzaXplJywgJ3N1YnNldCcsICd0cmFjZScsICd0cmFuc3Bvc2UnLCAnemVyb3MnXVxufTtcbmV4cG9ydHMuc3F1ZWV6ZURvY3MgPSBzcXVlZXplRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3Vic2V0RG9jcyA9IHZvaWQgMDtcbnZhciBzdWJzZXREb2NzID0ge1xuICBuYW1lOiAnc3Vic2V0JyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsndmFsdWUoaW5kZXgpJywgJ3ZhbHVlKGluZGV4KSA9IHJlcGxhY2VtZW50JywgJ3N1YnNldCh2YWx1ZSwgW2luZGV4XSknLCAnc3Vic2V0KHZhbHVlLCBbaW5kZXhdLCByZXBsYWNlbWVudCknXSxcbiAgZGVzY3JpcHRpb246ICdHZXQgb3Igc2V0IGEgc3Vic2V0IG9mIGEgbWF0cml4IG9yIHN0cmluZy4gJyArICdJbmRleGVzIGFyZSBvbmUtYmFzZWQuICcgKyAnQm90aCB0aGUgcmFuZ2VzIGxvd2VyLWJvdW5kIGFuZCB1cHBlci1ib3VuZCBhcmUgaW5jbHVkZWQuJyxcbiAgZXhhbXBsZXM6IFsnZCA9IFsxLCAyOyAzLCA0XScsICdlID0gW10nLCAnZVsxLCAxOjJdID0gWzUsIDZdJywgJ2VbMiwgOl0gPSBbNywgOF0nLCAnZiA9IGQgKiBlJywgJ2ZbMiwgMV0nLCAnZls6LCAxXSddLFxuICBzZWVhbHNvOiBbJ2NvbmNhdCcsICdkZXQnLCAnZGlhZycsICdpZGVudGl0eScsICdpbnYnLCAnb25lcycsICdyYW5nZScsICdzaXplJywgJ3NxdWVlemUnLCAndHJhY2UnLCAndHJhbnNwb3NlJywgJ3plcm9zJ11cbn07XG5leHBvcnRzLnN1YnNldERvY3MgPSBzdWJzZXREb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy50cmFjZURvY3MgPSB2b2lkIDA7XG52YXIgdHJhY2VEb2NzID0ge1xuICBuYW1lOiAndHJhY2UnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWyd0cmFjZShBKSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgdHJhY2Ugb2YgYSBtYXRyaXg6IHRoZSBzdW0gb2YgdGhlIGVsZW1lbnRzIG9uIHRoZSBtYWluIGRpYWdvbmFsIG9mIGEgc3F1YXJlIG1hdHJpeC4nLFxuICBleGFtcGxlczogWydBID0gWzEsIDIsIDM7IC0xLCAyLCAzOyAyLCAwLCAzXScsICd0cmFjZShBKSddLFxuICBzZWVhbHNvOiBbJ2NvbmNhdCcsICdkZXQnLCAnZGlhZycsICdpZGVudGl0eScsICdpbnYnLCAnb25lcycsICdyYW5nZScsICdzaXplJywgJ3NxdWVlemUnLCAnc3Vic2V0JywgJ3RyYW5zcG9zZScsICd6ZXJvcyddXG59O1xuZXhwb3J0cy50cmFjZURvY3MgPSB0cmFjZURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnRyYW5zcG9zZURvY3MgPSB2b2lkIDA7XG52YXIgdHJhbnNwb3NlRG9jcyA9IHtcbiAgbmFtZTogJ3RyYW5zcG9zZScsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ3hcXCcnLCAndHJhbnNwb3NlKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnVHJhbnNwb3NlIGEgbWF0cml4JyxcbiAgZXhhbXBsZXM6IFsnYSA9IFsxLCAyLCAzOyA0LCA1LCA2XScsICdhXFwnJywgJ3RyYW5zcG9zZShhKSddLFxuICBzZWVhbHNvOiBbJ2NvbmNhdCcsICdkZXQnLCAnZGlhZycsICdpZGVudGl0eScsICdpbnYnLCAnb25lcycsICdyYW5nZScsICdzaXplJywgJ3NxdWVlemUnLCAnc3Vic2V0JywgJ3RyYWNlJywgJ3plcm9zJ11cbn07XG5leHBvcnRzLnRyYW5zcG9zZURvY3MgPSB0cmFuc3Bvc2VEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy56ZXJvc0RvY3MgPSB2b2lkIDA7XG52YXIgemVyb3NEb2NzID0ge1xuICBuYW1lOiAnemVyb3MnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWyd6ZXJvcyhtKScsICd6ZXJvcyhtLCBuKScsICd6ZXJvcyhtLCBuLCBwLCAuLi4pJywgJ3plcm9zKFttXSknLCAnemVyb3MoW20sIG5dKScsICd6ZXJvcyhbbSwgbiwgcCwgLi4uXSknXSxcbiAgZGVzY3JpcHRpb246ICdDcmVhdGUgYSBtYXRyaXggY29udGFpbmluZyB6ZXJvcy4nLFxuICBleGFtcGxlczogWyd6ZXJvcygzKScsICd6ZXJvcygzLCA1KScsICdhID0gWzEsIDIsIDM7IDQsIDUsIDZdJywgJ3plcm9zKHNpemUoYSkpJ10sXG4gIHNlZWFsc286IFsnY29uY2F0JywgJ2RldCcsICdkaWFnJywgJ2lkZW50aXR5JywgJ2ludicsICdvbmVzJywgJ3JhbmdlJywgJ3NpemUnLCAnc3F1ZWV6ZScsICdzdWJzZXQnLCAndHJhY2UnLCAndHJhbnNwb3NlJ11cbn07XG5leHBvcnRzLnplcm9zRG9jcyA9IHplcm9zRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tYmluYXRpb25zRG9jcyA9IHZvaWQgMDtcbnZhciBjb21iaW5hdGlvbnNEb2NzID0ge1xuICBuYW1lOiAnY29tYmluYXRpb25zJyxcbiAgY2F0ZWdvcnk6ICdQcm9iYWJpbGl0eScsXG4gIHN5bnRheDogWydjb21iaW5hdGlvbnMobiwgayknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBudW1iZXIgb2YgY29tYmluYXRpb25zIG9mIG4gaXRlbXMgdGFrZW4gayBhdCBhIHRpbWUnLFxuICBleGFtcGxlczogWydjb21iaW5hdGlvbnMoNywgNSknXSxcbiAgc2VlYWxzbzogWydjb21iaW5hdGlvbnNXaXRoUmVwJywgJ3Blcm11dGF0aW9ucycsICdmYWN0b3JpYWwnXVxufTtcbmV4cG9ydHMuY29tYmluYXRpb25zRG9jcyA9IGNvbWJpbmF0aW9uc0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbWJpbmF0aW9uc1dpdGhSZXBEb2NzID0gdm9pZCAwO1xudmFyIGNvbWJpbmF0aW9uc1dpdGhSZXBEb2NzID0ge1xuICBuYW1lOiAnY29tYmluYXRpb25zV2l0aFJlcCcsXG4gIGNhdGVnb3J5OiAnUHJvYmFiaWxpdHknLFxuICBzeW50YXg6IFsnY29tYmluYXRpb25zV2l0aFJlcChuLCBrKSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIG51bWJlciBvZiBjb21iaW5hdGlvbnMgb2YgbiBpdGVtcyB0YWtlbiBrIGF0IGEgdGltZSB3aXRoIHJlcGxhY2VtZW50cy4nLFxuICBleGFtcGxlczogWydjb21iaW5hdGlvbnNXaXRoUmVwKDcsIDUpJ10sXG4gIHNlZWFsc286IFsnY29tYmluYXRpb25zJywgJ3Blcm11dGF0aW9ucycsICdmYWN0b3JpYWwnXVxufTtcbmV4cG9ydHMuY29tYmluYXRpb25zV2l0aFJlcERvY3MgPSBjb21iaW5hdGlvbnNXaXRoUmVwRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZmFjdG9yaWFsRG9jcyA9IHZvaWQgMDtcbnZhciBmYWN0b3JpYWxEb2NzID0ge1xuICBuYW1lOiAnZmFjdG9yaWFsJyxcbiAgY2F0ZWdvcnk6ICdQcm9iYWJpbGl0eScsXG4gIHN5bnRheDogWyduIScsICdmYWN0b3JpYWwobiknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBmYWN0b3JpYWwgb2YgYSB2YWx1ZScsXG4gIGV4YW1wbGVzOiBbJzUhJywgJzUgKiA0ICogMyAqIDIgKiAxJywgJzMhJ10sXG4gIHNlZWFsc286IFsnY29tYmluYXRpb25zJywgJ2NvbWJpbmF0aW9uc1dpdGhSZXAnLCAncGVybXV0YXRpb25zJywgJ2dhbW1hJ11cbn07XG5leHBvcnRzLmZhY3RvcmlhbERvY3MgPSBmYWN0b3JpYWxEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5nYW1tYURvY3MgPSB2b2lkIDA7XG52YXIgZ2FtbWFEb2NzID0ge1xuICBuYW1lOiAnZ2FtbWEnLFxuICBjYXRlZ29yeTogJ1Byb2JhYmlsaXR5JyxcbiAgc3ludGF4OiBbJ2dhbW1hKG4pJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgZ2FtbWEgZnVuY3Rpb24uIEZvciBzbWFsbCB2YWx1ZXMsIHRoZSBMYW5jem9zIGFwcHJveGltYXRpb24gaXMgdXNlZCwgYW5kIGZvciBsYXJnZSB2YWx1ZXMgdGhlIGV4dGVuZGVkIFN0aXJsaW5nIGFwcHJveGltYXRpb24uJyxcbiAgZXhhbXBsZXM6IFsnZ2FtbWEoNCknLCAnMyEnLCAnZ2FtbWEoMS8yKScsICdzcXJ0KHBpKSddLFxuICBzZWVhbHNvOiBbJ2ZhY3RvcmlhbCddXG59O1xuZXhwb3J0cy5nYW1tYURvY3MgPSBnYW1tYURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmtsZGl2ZXJnZW5jZURvY3MgPSB2b2lkIDA7XG52YXIga2xkaXZlcmdlbmNlRG9jcyA9IHtcbiAgbmFtZTogJ2tsZGl2ZXJnZW5jZScsXG4gIGNhdGVnb3J5OiAnUHJvYmFiaWxpdHknLFxuICBzeW50YXg6IFsna2xkaXZlcmdlbmNlKHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBLdWxsYmFjay1MZWlibGVyIChLTCkgZGl2ZXJnZW5jZSAgYmV0d2VlbiB0d28gZGlzdHJpYnV0aW9ucy4nLFxuICBleGFtcGxlczogWydrbGRpdmVyZ2VuY2UoWzAuNywwLjUsMC40XSwgWzAuMiwwLjksMC41XSknXSxcbiAgc2VlYWxzbzogW11cbn07XG5leHBvcnRzLmtsZGl2ZXJnZW5jZURvY3MgPSBrbGRpdmVyZ2VuY2VEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tdWx0aW5vbWlhbERvY3MgPSB2b2lkIDA7XG52YXIgbXVsdGlub21pYWxEb2NzID0ge1xuICBuYW1lOiAnbXVsdGlub21pYWwnLFxuICBjYXRlZ29yeTogJ1Byb2JhYmlsaXR5JyxcbiAgc3ludGF4OiBbJ211bHRpbm9taWFsKEEpJ10sXG4gIGRlc2NyaXB0aW9uOiAnTXVsdGlub21pYWwgQ29lZmZpY2llbnRzIGNvbXB1dGUgdGhlIG51bWJlciBvZiB3YXlzIG9mIHBpY2tpbmcgYTEsIGEyLCAuLi4sIGFpIHVub3JkZXJlZCBvdXRjb21lcyBmcm9tIGBuYCBwb3NzaWJpbGl0aWVzLiBtdWx0aW5vbWlhbCB0YWtlcyBvbmUgYXJyYXkgb2YgaW50ZWdlcnMgYXMgYW4gYXJndW1lbnQuIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIG11c3QgYmUgZW5mb3JjZWQ6IGV2ZXJ5IGFpID4gMC4nLFxuICBleGFtcGxlczogWydtdWx0aW5vbWlhbChbMSwgMiwgMV0pJ10sXG4gIHNlZWFsc286IFsnY29tYmluYXRpb25zJywgJ2ZhY3RvcmlhbCddXG59O1xuZXhwb3J0cy5tdWx0aW5vbWlhbERvY3MgPSBtdWx0aW5vbWlhbERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBlcm11dGF0aW9uc0RvY3MgPSB2b2lkIDA7XG52YXIgcGVybXV0YXRpb25zRG9jcyA9IHtcbiAgbmFtZTogJ3Blcm11dGF0aW9ucycsXG4gIGNhdGVnb3J5OiAnUHJvYmFiaWxpdHknLFxuICBzeW50YXg6IFsncGVybXV0YXRpb25zKG4pJywgJ3Blcm11dGF0aW9ucyhuLCBrKSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIG51bWJlciBvZiBwZXJtdXRhdGlvbnMgb2YgbiBpdGVtcyB0YWtlbiBrIGF0IGEgdGltZScsXG4gIGV4YW1wbGVzOiBbJ3Blcm11dGF0aW9ucyg1KScsICdwZXJtdXRhdGlvbnMoNSwgMyknXSxcbiAgc2VlYWxzbzogWydjb21iaW5hdGlvbnMnLCAnY29tYmluYXRpb25zV2l0aFJlcCcsICdmYWN0b3JpYWwnXVxufTtcbmV4cG9ydHMucGVybXV0YXRpb25zRG9jcyA9IHBlcm11dGF0aW9uc0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBpY2tSYW5kb21Eb2NzID0gdm9pZCAwO1xudmFyIHBpY2tSYW5kb21Eb2NzID0ge1xuICBuYW1lOiAncGlja1JhbmRvbScsXG4gIGNhdGVnb3J5OiAnUHJvYmFiaWxpdHknLFxuICBzeW50YXg6IFsncGlja1JhbmRvbShhcnJheSknLCAncGlja1JhbmRvbShhcnJheSwgbnVtYmVyKScsICdwaWNrUmFuZG9tKGFycmF5LCB3ZWlnaHRzKScsICdwaWNrUmFuZG9tKGFycmF5LCBudW1iZXIsIHdlaWdodHMpJywgJ3BpY2tSYW5kb20oYXJyYXksIHdlaWdodHMsIG51bWJlciknXSxcbiAgZGVzY3JpcHRpb246ICdQaWNrIGEgcmFuZG9tIGVudHJ5IGZyb20gYSBnaXZlbiBhcnJheS4nLFxuICBleGFtcGxlczogWydwaWNrUmFuZG9tKDA6MTApJywgJ3BpY2tSYW5kb20oWzEsIDMsIDEsIDZdKScsICdwaWNrUmFuZG9tKFsxLCAzLCAxLCA2XSwgMiknLCAncGlja1JhbmRvbShbMSwgMywgMSwgNl0sIFsyLCAzLCAyLCAxXSknLCAncGlja1JhbmRvbShbMSwgMywgMSwgNl0sIDIsIFsyLCAzLCAyLCAxXSknLCAncGlja1JhbmRvbShbMSwgMywgMSwgNl0sIFsyLCAzLCAyLCAxXSwgMiknXSxcbiAgc2VlYWxzbzogWydyYW5kb20nLCAncmFuZG9tSW50J11cbn07XG5leHBvcnRzLnBpY2tSYW5kb21Eb2NzID0gcGlja1JhbmRvbURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJhbmRvbURvY3MgPSB2b2lkIDA7XG52YXIgcmFuZG9tRG9jcyA9IHtcbiAgbmFtZTogJ3JhbmRvbScsXG4gIGNhdGVnb3J5OiAnUHJvYmFiaWxpdHknLFxuICBzeW50YXg6IFsncmFuZG9tKCknLCAncmFuZG9tKG1heCknLCAncmFuZG9tKG1pbiwgbWF4KScsICdyYW5kb20oc2l6ZSknLCAncmFuZG9tKHNpemUsIG1heCknLCAncmFuZG9tKHNpemUsIG1pbiwgbWF4KSddLFxuICBkZXNjcmlwdGlvbjogJ1JldHVybiBhIHJhbmRvbSBudW1iZXIuJyxcbiAgZXhhbXBsZXM6IFsncmFuZG9tKCknLCAncmFuZG9tKDEwLCAyMCknLCAncmFuZG9tKFsyLCAzXSknXSxcbiAgc2VlYWxzbzogWydwaWNrUmFuZG9tJywgJ3JhbmRvbUludCddXG59O1xuZXhwb3J0cy5yYW5kb21Eb2NzID0gcmFuZG9tRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmFuZG9tSW50RG9jcyA9IHZvaWQgMDtcbnZhciByYW5kb21JbnREb2NzID0ge1xuICBuYW1lOiAncmFuZG9tSW50JyxcbiAgY2F0ZWdvcnk6ICdQcm9iYWJpbGl0eScsXG4gIHN5bnRheDogWydyYW5kb21JbnQobWF4KScsICdyYW5kb21JbnQobWluLCBtYXgpJywgJ3JhbmRvbUludChzaXplKScsICdyYW5kb21JbnQoc2l6ZSwgbWF4KScsICdyYW5kb21JbnQoc2l6ZSwgbWluLCBtYXgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnUmV0dXJuIGEgcmFuZG9tIGludGVnZXIgbnVtYmVyJyxcbiAgZXhhbXBsZXM6IFsncmFuZG9tSW50KDEwLCAyMCknLCAncmFuZG9tSW50KFsyLCAzXSwgMTApJ10sXG4gIHNlZWFsc286IFsncGlja1JhbmRvbScsICdyYW5kb20nXVxufTtcbmV4cG9ydHMucmFuZG9tSW50RG9jcyA9IHJhbmRvbUludERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbXBhcmVEb2NzID0gdm9pZCAwO1xudmFyIGNvbXBhcmVEb2NzID0ge1xuICBuYW1lOiAnY29tcGFyZScsXG4gIGNhdGVnb3J5OiAnUmVsYXRpb25hbCcsXG4gIHN5bnRheDogWydjb21wYXJlKHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcGFyZSB0d28gdmFsdWVzLiAnICsgJ1JldHVybnMgMSB3aGVuIHggPiB5LCAtMSB3aGVuIHggPCB5LCBhbmQgMCB3aGVuIHggPT0geS4nLFxuICBleGFtcGxlczogWydjb21wYXJlKDIsIDMpJywgJ2NvbXBhcmUoMywgMiknLCAnY29tcGFyZSgyLCAyKScsICdjb21wYXJlKDVjbSwgNDBtbSknLCAnY29tcGFyZSgyLCBbMSwgMiwgM10pJ10sXG4gIHNlZWFsc286IFsnZXF1YWwnLCAndW5lcXVhbCcsICdzbWFsbGVyJywgJ3NtYWxsZXJFcScsICdsYXJnZXJFcScsICdjb21wYXJlTmF0dXJhbCcsICdjb21wYXJlVGV4dCddXG59O1xuZXhwb3J0cy5jb21wYXJlRG9jcyA9IGNvbXBhcmVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb21wYXJlTmF0dXJhbERvY3MgPSB2b2lkIDA7XG52YXIgY29tcGFyZU5hdHVyYWxEb2NzID0ge1xuICBuYW1lOiAnY29tcGFyZU5hdHVyYWwnLFxuICBjYXRlZ29yeTogJ1JlbGF0aW9uYWwnLFxuICBzeW50YXg6IFsnY29tcGFyZU5hdHVyYWwoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wYXJlIHR3byB2YWx1ZXMgb2YgYW55IHR5cGUgaW4gYSBkZXRlcm1pbmlzdGljLCBuYXR1cmFsIHdheS4gJyArICdSZXR1cm5zIDEgd2hlbiB4ID4geSwgLTEgd2hlbiB4IDwgeSwgYW5kIDAgd2hlbiB4ID09IHkuJyxcbiAgZXhhbXBsZXM6IFsnY29tcGFyZU5hdHVyYWwoMiwgMyknLCAnY29tcGFyZU5hdHVyYWwoMywgMiknLCAnY29tcGFyZU5hdHVyYWwoMiwgMiknLCAnY29tcGFyZU5hdHVyYWwoNWNtLCA0MG1tKScsICdjb21wYXJlTmF0dXJhbChcIjJcIiwgXCIxMFwiKScsICdjb21wYXJlTmF0dXJhbCgyICsgM2ksIDIgKyA0aSknLCAnY29tcGFyZU5hdHVyYWwoWzEsIDIsIDRdLCBbMSwgMiwgM10pJywgJ2NvbXBhcmVOYXR1cmFsKFsxLCA1XSwgWzEsIDIsIDNdKScsICdjb21wYXJlTmF0dXJhbChbMSwgMl0sIFsxLCAyXSknLCAnY29tcGFyZU5hdHVyYWwoe2E6IDJ9LCB7YTogNH0pJ10sXG4gIHNlZWFsc286IFsnZXF1YWwnLCAndW5lcXVhbCcsICdzbWFsbGVyJywgJ3NtYWxsZXJFcScsICdsYXJnZXJFcScsICdjb21wYXJlJywgJ2NvbXBhcmVUZXh0J11cbn07XG5leHBvcnRzLmNvbXBhcmVOYXR1cmFsRG9jcyA9IGNvbXBhcmVOYXR1cmFsRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tcGFyZVRleHREb2NzID0gdm9pZCAwO1xudmFyIGNvbXBhcmVUZXh0RG9jcyA9IHtcbiAgbmFtZTogJ2NvbXBhcmVUZXh0JyxcbiAgY2F0ZWdvcnk6ICdSZWxhdGlvbmFsJyxcbiAgc3ludGF4OiBbJ2NvbXBhcmVUZXh0KHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcGFyZSB0d28gc3RyaW5ncyBsZXhpY2FsbHkuIENvbXBhcmlzb24gaXMgY2FzZSBzZW5zaXRpdmUuICcgKyAnUmV0dXJucyAxIHdoZW4geCA+IHksIC0xIHdoZW4geCA8IHksIGFuZCAwIHdoZW4geCA9PSB5LicsXG4gIGV4YW1wbGVzOiBbJ2NvbXBhcmVUZXh0KFwiQlwiLCBcIkFcIiknLCAnY29tcGFyZVRleHQoXCJBXCIsIFwiQlwiKScsICdjb21wYXJlVGV4dChcIkFcIiwgXCJBXCIpJywgJ2NvbXBhcmVUZXh0KFwiMlwiLCBcIjEwXCIpJywgJ2NvbXBhcmUoXCIyXCIsIFwiMTBcIiknLCAnY29tcGFyZSgyLCAxMCknLCAnY29tcGFyZU5hdHVyYWwoXCIyXCIsIFwiMTBcIiknLCAnY29tcGFyZVRleHQoXCJCXCIsIFtcIkFcIiwgXCJCXCIsIFwiQ1wiXSknXSxcbiAgc2VlYWxzbzogWydjb21wYXJlJywgJ2NvbXBhcmVOYXR1cmFsJ11cbn07XG5leHBvcnRzLmNvbXBhcmVUZXh0RG9jcyA9IGNvbXBhcmVUZXh0RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVlcEVxdWFsRG9jcyA9IHZvaWQgMDtcbnZhciBkZWVwRXF1YWxEb2NzID0ge1xuICBuYW1lOiAnZGVlcEVxdWFsJyxcbiAgY2F0ZWdvcnk6ICdSZWxhdGlvbmFsJyxcbiAgc3ludGF4OiBbJ2RlZXBFcXVhbCh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0NoZWNrIGVxdWFsaXR5IG9mIHR3byBtYXRyaWNlcyBlbGVtZW50IHdpc2UuIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2l6ZSBvZiBib3RoIG1hdHJpY2VzIGlzIGVxdWFsIGFuZCB3aGVuIGFuZCBlYWNoIG9mIHRoZSBlbGVtZW50cyBhcmUgZXF1YWwuJyxcbiAgZXhhbXBsZXM6IFsnZGVlcEVxdWFsKFsxLDMsNF0sIFsxLDMsNF0pJywgJ2RlZXBFcXVhbChbMSwzLDRdLCBbMSwzXSknXSxcbiAgc2VlYWxzbzogWydlcXVhbCcsICd1bmVxdWFsJywgJ3NtYWxsZXInLCAnbGFyZ2VyJywgJ3NtYWxsZXJFcScsICdsYXJnZXJFcScsICdjb21wYXJlJ11cbn07XG5leHBvcnRzLmRlZXBFcXVhbERvY3MgPSBkZWVwRXF1YWxEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lcXVhbERvY3MgPSB2b2lkIDA7XG52YXIgZXF1YWxEb2NzID0ge1xuICBuYW1lOiAnZXF1YWwnLFxuICBjYXRlZ29yeTogJ1JlbGF0aW9uYWwnLFxuICBzeW50YXg6IFsneCA9PSB5JywgJ2VxdWFsKHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2hlY2sgZXF1YWxpdHkgb2YgdHdvIHZhbHVlcy4gUmV0dXJucyB0cnVlIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWFsLCBhbmQgZmFsc2UgaWYgbm90LicsXG4gIGV4YW1wbGVzOiBbJzIrMiA9PSAzJywgJzIrMiA9PSA0JywgJ2EgPSAzLjInLCAnYiA9IDYtMi44JywgJ2EgPT0gYicsICc1MGNtID09IDAuNW0nXSxcbiAgc2VlYWxzbzogWyd1bmVxdWFsJywgJ3NtYWxsZXInLCAnbGFyZ2VyJywgJ3NtYWxsZXJFcScsICdsYXJnZXJFcScsICdjb21wYXJlJywgJ2RlZXBFcXVhbCcsICdlcXVhbFRleHQnXVxufTtcbmV4cG9ydHMuZXF1YWxEb2NzID0gZXF1YWxEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lcXVhbFRleHREb2NzID0gdm9pZCAwO1xudmFyIGVxdWFsVGV4dERvY3MgPSB7XG4gIG5hbWU6ICdlcXVhbFRleHQnLFxuICBjYXRlZ29yeTogJ1JlbGF0aW9uYWwnLFxuICBzeW50YXg6IFsnZXF1YWxUZXh0KHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2hlY2sgZXF1YWxpdHkgb2YgdHdvIHN0cmluZ3MuIENvbXBhcmlzb24gaXMgY2FzZSBzZW5zaXRpdmUuIFJldHVybnMgdHJ1ZSBpZiB0aGUgdmFsdWVzIGFyZSBlcXVhbCwgYW5kIGZhbHNlIGlmIG5vdC4nLFxuICBleGFtcGxlczogWydlcXVhbFRleHQoXCJIZWxsb1wiLCBcIkhlbGxvXCIpJywgJ2VxdWFsVGV4dChcImFcIiwgXCJBXCIpJywgJ2VxdWFsKFwiMmUzXCIsIFwiMjAwMFwiKScsICdlcXVhbFRleHQoXCIyZTNcIiwgXCIyMDAwXCIpJywgJ2VxdWFsVGV4dChcIkJcIiwgW1wiQVwiLCBcIkJcIiwgXCJDXCJdKSddLFxuICBzZWVhbHNvOiBbJ2NvbXBhcmUnLCAnY29tcGFyZU5hdHVyYWwnLCAnY29tcGFyZVRleHQnLCAnZXF1YWwnXVxufTtcbmV4cG9ydHMuZXF1YWxUZXh0RG9jcyA9IGVxdWFsVGV4dERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxhcmdlckRvY3MgPSB2b2lkIDA7XG52YXIgbGFyZ2VyRG9jcyA9IHtcbiAgbmFtZTogJ2xhcmdlcicsXG4gIGNhdGVnb3J5OiAnUmVsYXRpb25hbCcsXG4gIHN5bnRheDogWyd4ID4geScsICdsYXJnZXIoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdDaGVjayBpZiB2YWx1ZSB4IGlzIGxhcmdlciB0aGFuIHkuIFJldHVybnMgdHJ1ZSBpZiB4IGlzIGxhcmdlciB0aGFuIHksIGFuZCBmYWxzZSBpZiBub3QuJyxcbiAgZXhhbXBsZXM6IFsnMiA+IDMnLCAnNSA+IDIqMicsICdhID0gMy4zJywgJ2IgPSA2LTIuOCcsICcoYSA+IGIpJywgJyhiIDwgYSknLCAnNSBjbSA+IDIgaW5jaCddLFxuICBzZWVhbHNvOiBbJ2VxdWFsJywgJ3VuZXF1YWwnLCAnc21hbGxlcicsICdzbWFsbGVyRXEnLCAnbGFyZ2VyRXEnLCAnY29tcGFyZSddXG59O1xuZXhwb3J0cy5sYXJnZXJEb2NzID0gbGFyZ2VyRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubGFyZ2VyRXFEb2NzID0gdm9pZCAwO1xudmFyIGxhcmdlckVxRG9jcyA9IHtcbiAgbmFtZTogJ2xhcmdlckVxJyxcbiAgY2F0ZWdvcnk6ICdSZWxhdGlvbmFsJyxcbiAgc3ludGF4OiBbJ3ggPj0geScsICdsYXJnZXJFcSh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0NoZWNrIGlmIHZhbHVlIHggaXMgbGFyZ2VyIG9yIGVxdWFsIHRvIHkuIFJldHVybnMgdHJ1ZSBpZiB4IGlzIGxhcmdlciBvciBlcXVhbCB0byB5LCBhbmQgZmFsc2UgaWYgbm90LicsXG4gIGV4YW1wbGVzOiBbJzIgPj0gMSsxJywgJzIgPiAxKzEnLCAnYSA9IDMuMicsICdiID0gNi0yLjgnLCAnKGEgPj0gYiknXSxcbiAgc2VlYWxzbzogWydlcXVhbCcsICd1bmVxdWFsJywgJ3NtYWxsZXJFcScsICdzbWFsbGVyJywgJ2NvbXBhcmUnXVxufTtcbmV4cG9ydHMubGFyZ2VyRXFEb2NzID0gbGFyZ2VyRXFEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zbWFsbGVyRG9jcyA9IHZvaWQgMDtcbnZhciBzbWFsbGVyRG9jcyA9IHtcbiAgbmFtZTogJ3NtYWxsZXInLFxuICBjYXRlZ29yeTogJ1JlbGF0aW9uYWwnLFxuICBzeW50YXg6IFsneCA8IHknLCAnc21hbGxlcih4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0NoZWNrIGlmIHZhbHVlIHggaXMgc21hbGxlciB0aGFuIHZhbHVlIHkuIFJldHVybnMgdHJ1ZSBpZiB4IGlzIHNtYWxsZXIgdGhhbiB5LCBhbmQgZmFsc2UgaWYgbm90LicsXG4gIGV4YW1wbGVzOiBbJzIgPCAzJywgJzUgPCAyKjInLCAnYSA9IDMuMycsICdiID0gNi0yLjgnLCAnKGEgPCBiKScsICc1IGNtIDwgMiBpbmNoJ10sXG4gIHNlZWFsc286IFsnZXF1YWwnLCAndW5lcXVhbCcsICdsYXJnZXInLCAnc21hbGxlckVxJywgJ2xhcmdlckVxJywgJ2NvbXBhcmUnXVxufTtcbmV4cG9ydHMuc21hbGxlckRvY3MgPSBzbWFsbGVyRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc21hbGxlckVxRG9jcyA9IHZvaWQgMDtcbnZhciBzbWFsbGVyRXFEb2NzID0ge1xuICBuYW1lOiAnc21hbGxlckVxJyxcbiAgY2F0ZWdvcnk6ICdSZWxhdGlvbmFsJyxcbiAgc3ludGF4OiBbJ3ggPD0geScsICdzbWFsbGVyRXEoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdDaGVjayBpZiB2YWx1ZSB4IGlzIHNtYWxsZXIgb3IgZXF1YWwgdG8gdmFsdWUgeS4gUmV0dXJucyB0cnVlIGlmIHggaXMgc21hbGxlciB0aGFuIHksIGFuZCBmYWxzZSBpZiBub3QuJyxcbiAgZXhhbXBsZXM6IFsnMiA8PSAxKzEnLCAnMiA8IDErMScsICdhID0gMy4yJywgJ2IgPSA2LTIuOCcsICcoYSA8PSBiKSddLFxuICBzZWVhbHNvOiBbJ2VxdWFsJywgJ3VuZXF1YWwnLCAnbGFyZ2VyJywgJ3NtYWxsZXInLCAnbGFyZ2VyRXEnLCAnY29tcGFyZSddXG59O1xuZXhwb3J0cy5zbWFsbGVyRXFEb2NzID0gc21hbGxlckVxRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudW5lcXVhbERvY3MgPSB2b2lkIDA7XG52YXIgdW5lcXVhbERvY3MgPSB7XG4gIG5hbWU6ICd1bmVxdWFsJyxcbiAgY2F0ZWdvcnk6ICdSZWxhdGlvbmFsJyxcbiAgc3ludGF4OiBbJ3ggIT0geScsICd1bmVxdWFsKHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2hlY2sgdW5lcXVhbGl0eSBvZiB0d28gdmFsdWVzLiBSZXR1cm5zIHRydWUgaWYgdGhlIHZhbHVlcyBhcmUgdW5lcXVhbCwgYW5kIGZhbHNlIGlmIHRoZXkgYXJlIGVxdWFsLicsXG4gIGV4YW1wbGVzOiBbJzIrMiAhPSAzJywgJzIrMiAhPSA0JywgJ2EgPSAzLjInLCAnYiA9IDYtMi44JywgJ2EgIT0gYicsICc1MGNtICE9IDAuNW0nLCAnNSBjbSAhPSAyIGluY2gnXSxcbiAgc2VlYWxzbzogWydlcXVhbCcsICdzbWFsbGVyJywgJ2xhcmdlcicsICdzbWFsbGVyRXEnLCAnbGFyZ2VyRXEnLCAnY29tcGFyZScsICdkZWVwRXF1YWwnXVxufTtcbmV4cG9ydHMudW5lcXVhbERvY3MgPSB1bmVxdWFsRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2V0Q2FydGVzaWFuRG9jcyA9IHZvaWQgMDtcbnZhciBzZXRDYXJ0ZXNpYW5Eb2NzID0ge1xuICBuYW1lOiAnc2V0Q2FydGVzaWFuJyxcbiAgY2F0ZWdvcnk6ICdTZXQnLFxuICBzeW50YXg6IFsnc2V0Q2FydGVzaWFuKHNldDEsIHNldDIpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIHRoZSBjYXJ0ZXNpYW4gcHJvZHVjdCBvZiB0d28gKG11bHRpKXNldHMuIE11bHRpLWRpbWVuc2lvbiBhcnJheXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gc2luZ2xlLWRpbWVuc2lvbiBhcnJheXMgYmVmb3JlIHRoZSBvcGVyYXRpb24uJyxcbiAgZXhhbXBsZXM6IFsnc2V0Q2FydGVzaWFuKFsxLCAyXSwgWzMsIDRdKSddLFxuICBzZWVhbHNvOiBbJ3NldFVuaW9uJywgJ3NldEludGVyc2VjdCcsICdzZXREaWZmZXJlbmNlJywgJ3NldFBvd2Vyc2V0J11cbn07XG5leHBvcnRzLnNldENhcnRlc2lhbkRvY3MgPSBzZXRDYXJ0ZXNpYW5Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXREaWZmZXJlbmNlRG9jcyA9IHZvaWQgMDtcbnZhciBzZXREaWZmZXJlbmNlRG9jcyA9IHtcbiAgbmFtZTogJ3NldERpZmZlcmVuY2UnLFxuICBjYXRlZ29yeTogJ1NldCcsXG4gIHN5bnRheDogWydzZXREaWZmZXJlbmNlKHNldDEsIHNldDIpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIHRoZSBkaWZmZXJlbmNlIG9mIHR3byAobXVsdGkpc2V0czogZXZlcnkgZWxlbWVudCBvZiBzZXQxLCB0aGF0IGlzIG5vdCB0aGUgZWxlbWVudCBvZiBzZXQyLiBNdWx0aS1kaW1lbnNpb24gYXJyYXlzIHdpbGwgYmUgY29udmVydGVkIHRvIHNpbmdsZS1kaW1lbnNpb24gYXJyYXlzIGJlZm9yZSB0aGUgb3BlcmF0aW9uLicsXG4gIGV4YW1wbGVzOiBbJ3NldERpZmZlcmVuY2UoWzEsIDIsIDMsIDRdLCBbMywgNCwgNSwgNl0pJywgJ3NldERpZmZlcmVuY2UoW1sxLCAyXSwgWzMsIDRdXSwgW1szLCA0XSwgWzUsIDZdXSknXSxcbiAgc2VlYWxzbzogWydzZXRVbmlvbicsICdzZXRJbnRlcnNlY3QnLCAnc2V0U3ltRGlmZmVyZW5jZSddXG59O1xuZXhwb3J0cy5zZXREaWZmZXJlbmNlRG9jcyA9IHNldERpZmZlcmVuY2VEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXREaXN0aW5jdERvY3MgPSB2b2lkIDA7XG52YXIgc2V0RGlzdGluY3REb2NzID0ge1xuICBuYW1lOiAnc2V0RGlzdGluY3QnLFxuICBjYXRlZ29yeTogJ1NldCcsXG4gIHN5bnRheDogWydzZXREaXN0aW5jdChzZXQpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29sbGVjdCB0aGUgZGlzdGluY3QgZWxlbWVudHMgb2YgYSBtdWx0aXNldC4gQSBtdWx0aS1kaW1lbnNpb24gYXJyYXkgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBzaW5nbGUtZGltZW5zaW9uIGFycmF5IGJlZm9yZSB0aGUgb3BlcmF0aW9uLicsXG4gIGV4YW1wbGVzOiBbJ3NldERpc3RpbmN0KFsxLCAxLCAxLCAyLCAyLCAzXSknXSxcbiAgc2VlYWxzbzogWydzZXRNdWx0aXBsaWNpdHknXVxufTtcbmV4cG9ydHMuc2V0RGlzdGluY3REb2NzID0gc2V0RGlzdGluY3REb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXRJbnRlcnNlY3REb2NzID0gdm9pZCAwO1xudmFyIHNldEludGVyc2VjdERvY3MgPSB7XG4gIG5hbWU6ICdzZXRJbnRlcnNlY3QnLFxuICBjYXRlZ29yeTogJ1NldCcsXG4gIHN5bnRheDogWydzZXRJbnRlcnNlY3Qoc2V0MSwgc2V0MiknXSxcbiAgZGVzY3JpcHRpb246ICdDcmVhdGUgdGhlIGludGVyc2VjdGlvbiBvZiB0d28gKG11bHRpKXNldHMuIE11bHRpLWRpbWVuc2lvbiBhcnJheXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gc2luZ2xlLWRpbWVuc2lvbiBhcnJheXMgYmVmb3JlIHRoZSBvcGVyYXRpb24uJyxcbiAgZXhhbXBsZXM6IFsnc2V0SW50ZXJzZWN0KFsxLCAyLCAzLCA0XSwgWzMsIDQsIDUsIDZdKScsICdzZXRJbnRlcnNlY3QoW1sxLCAyXSwgWzMsIDRdXSwgW1szLCA0XSwgWzUsIDZdXSknXSxcbiAgc2VlYWxzbzogWydzZXRVbmlvbicsICdzZXREaWZmZXJlbmNlJ11cbn07XG5leHBvcnRzLnNldEludGVyc2VjdERvY3MgPSBzZXRJbnRlcnNlY3REb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXRJc1N1YnNldERvY3MgPSB2b2lkIDA7XG52YXIgc2V0SXNTdWJzZXREb2NzID0ge1xuICBuYW1lOiAnc2V0SXNTdWJzZXQnLFxuICBjYXRlZ29yeTogJ1NldCcsXG4gIHN5bnRheDogWydzZXRJc1N1YnNldChzZXQxLCBzZXQyKSddLFxuICBkZXNjcmlwdGlvbjogJ0NoZWNrIHdoZXRoZXIgYSAobXVsdGkpc2V0IGlzIGEgc3Vic2V0IG9mIGFub3RoZXIgKG11bHRpKXNldDogZXZlcnkgZWxlbWVudCBvZiBzZXQxIGlzIHRoZSBlbGVtZW50IG9mIHNldDIuIE11bHRpLWRpbWVuc2lvbiBhcnJheXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gc2luZ2xlLWRpbWVuc2lvbiBhcnJheXMgYmVmb3JlIHRoZSBvcGVyYXRpb24uJyxcbiAgZXhhbXBsZXM6IFsnc2V0SXNTdWJzZXQoWzEsIDJdLCBbMywgNCwgNSwgNl0pJywgJ3NldElzU3Vic2V0KFszLCA0XSwgWzMsIDQsIDUsIDZdKSddLFxuICBzZWVhbHNvOiBbJ3NldFVuaW9uJywgJ3NldEludGVyc2VjdCcsICdzZXREaWZmZXJlbmNlJ11cbn07XG5leHBvcnRzLnNldElzU3Vic2V0RG9jcyA9IHNldElzU3Vic2V0RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2V0TXVsdGlwbGljaXR5RG9jcyA9IHZvaWQgMDtcbnZhciBzZXRNdWx0aXBsaWNpdHlEb2NzID0ge1xuICBuYW1lOiAnc2V0TXVsdGlwbGljaXR5JyxcbiAgY2F0ZWdvcnk6ICdTZXQnLFxuICBzeW50YXg6IFsnc2V0TXVsdGlwbGljaXR5KGVsZW1lbnQsIHNldCknXSxcbiAgZGVzY3JpcHRpb246ICdDb3VudCB0aGUgbXVsdGlwbGljaXR5IG9mIGFuIGVsZW1lbnQgaW4gYSBtdWx0aXNldC4gQSBtdWx0aS1kaW1lbnNpb24gYXJyYXkgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBzaW5nbGUtZGltZW5zaW9uIGFycmF5IGJlZm9yZSB0aGUgb3BlcmF0aW9uLicsXG4gIGV4YW1wbGVzOiBbJ3NldE11bHRpcGxpY2l0eSgxLCBbMSwgMiwgMiwgNF0pJywgJ3NldE11bHRpcGxpY2l0eSgyLCBbMSwgMiwgMiwgNF0pJ10sXG4gIHNlZWFsc286IFsnc2V0RGlzdGluY3QnLCAnc2V0U2l6ZSddXG59O1xuZXhwb3J0cy5zZXRNdWx0aXBsaWNpdHlEb2NzID0gc2V0TXVsdGlwbGljaXR5RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2V0UG93ZXJzZXREb2NzID0gdm9pZCAwO1xudmFyIHNldFBvd2Vyc2V0RG9jcyA9IHtcbiAgbmFtZTogJ3NldFBvd2Vyc2V0JyxcbiAgY2F0ZWdvcnk6ICdTZXQnLFxuICBzeW50YXg6IFsnc2V0UG93ZXJzZXQoc2V0KSddLFxuICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSB0aGUgcG93ZXJzZXQgb2YgYSAobXVsdGkpc2V0OiB0aGUgcG93ZXJzZXQgY29udGFpbnMgdmVyeSBwb3NzaWJsZSBzdWJzZXRzIG9mIGEgKG11bHRpKXNldC4gQSBtdWx0aS1kaW1lbnNpb24gYXJyYXkgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBzaW5nbGUtZGltZW5zaW9uIGFycmF5IGJlZm9yZSB0aGUgb3BlcmF0aW9uLicsXG4gIGV4YW1wbGVzOiBbJ3NldFBvd2Vyc2V0KFsxLCAyLCAzXSknXSxcbiAgc2VlYWxzbzogWydzZXRDYXJ0ZXNpYW4nXVxufTtcbmV4cG9ydHMuc2V0UG93ZXJzZXREb2NzID0gc2V0UG93ZXJzZXREb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXRTaXplRG9jcyA9IHZvaWQgMDtcbnZhciBzZXRTaXplRG9jcyA9IHtcbiAgbmFtZTogJ3NldFNpemUnLFxuICBjYXRlZ29yeTogJ1NldCcsXG4gIHN5bnRheDogWydzZXRTaXplKHNldCknLCAnc2V0U2l6ZShzZXQsIHVuaXF1ZSknXSxcbiAgZGVzY3JpcHRpb246ICdDb3VudCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIG9mIGEgKG11bHRpKXNldC4gV2hlbiB0aGUgc2Vjb25kIHBhcmFtZXRlciBcInVuaXF1ZVwiIGlzIHRydWUsIGNvdW50IG9ubHkgdGhlIHVuaXF1ZSB2YWx1ZXMuIEEgbXVsdGktZGltZW5zaW9uIGFycmF5IHdpbGwgYmUgY29udmVydGVkIHRvIGEgc2luZ2xlLWRpbWVuc2lvbiBhcnJheSBiZWZvcmUgdGhlIG9wZXJhdGlvbi4nLFxuICBleGFtcGxlczogWydzZXRTaXplKFsxLCAyLCAyLCA0XSknLCAnc2V0U2l6ZShbMSwgMiwgMiwgNF0sIHRydWUpJ10sXG4gIHNlZWFsc286IFsnc2V0VW5pb24nLCAnc2V0SW50ZXJzZWN0JywgJ3NldERpZmZlcmVuY2UnXVxufTtcbmV4cG9ydHMuc2V0U2l6ZURvY3MgPSBzZXRTaXplRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2V0U3ltRGlmZmVyZW5jZURvY3MgPSB2b2lkIDA7XG52YXIgc2V0U3ltRGlmZmVyZW5jZURvY3MgPSB7XG4gIG5hbWU6ICdzZXRTeW1EaWZmZXJlbmNlJyxcbiAgY2F0ZWdvcnk6ICdTZXQnLFxuICBzeW50YXg6IFsnc2V0U3ltRGlmZmVyZW5jZShzZXQxLCBzZXQyKSddLFxuICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSB0aGUgc3ltbWV0cmljIGRpZmZlcmVuY2Ugb2YgdHdvIChtdWx0aSlzZXRzLiBNdWx0aS1kaW1lbnNpb24gYXJyYXlzIHdpbGwgYmUgY29udmVydGVkIHRvIHNpbmdsZS1kaW1lbnNpb24gYXJyYXlzIGJlZm9yZSB0aGUgb3BlcmF0aW9uLicsXG4gIGV4YW1wbGVzOiBbJ3NldFN5bURpZmZlcmVuY2UoWzEsIDIsIDMsIDRdLCBbMywgNCwgNSwgNl0pJywgJ3NldFN5bURpZmZlcmVuY2UoW1sxLCAyXSwgWzMsIDRdXSwgW1szLCA0XSwgWzUsIDZdXSknXSxcbiAgc2VlYWxzbzogWydzZXRVbmlvbicsICdzZXRJbnRlcnNlY3QnLCAnc2V0RGlmZmVyZW5jZSddXG59O1xuZXhwb3J0cy5zZXRTeW1EaWZmZXJlbmNlRG9jcyA9IHNldFN5bURpZmZlcmVuY2VEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXRVbmlvbkRvY3MgPSB2b2lkIDA7XG52YXIgc2V0VW5pb25Eb2NzID0ge1xuICBuYW1lOiAnc2V0VW5pb24nLFxuICBjYXRlZ29yeTogJ1NldCcsXG4gIHN5bnRheDogWydzZXRVbmlvbihzZXQxLCBzZXQyKSddLFxuICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSB0aGUgdW5pb24gb2YgdHdvIChtdWx0aSlzZXRzLiBNdWx0aS1kaW1lbnNpb24gYXJyYXlzIHdpbGwgYmUgY29udmVydGVkIHRvIHNpbmdsZS1kaW1lbnNpb24gYXJyYXlzIGJlZm9yZSB0aGUgb3BlcmF0aW9uLicsXG4gIGV4YW1wbGVzOiBbJ3NldFVuaW9uKFsxLCAyLCAzLCA0XSwgWzMsIDQsIDUsIDZdKScsICdzZXRVbmlvbihbWzEsIDJdLCBbMywgNF1dLCBbWzMsIDRdLCBbNSwgNl1dKSddLFxuICBzZWVhbHNvOiBbJ3NldEludGVyc2VjdCcsICdzZXREaWZmZXJlbmNlJ11cbn07XG5leHBvcnRzLnNldFVuaW9uRG9jcyA9IHNldFVuaW9uRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZXJmRG9jcyA9IHZvaWQgMDtcbnZhciBlcmZEb2NzID0ge1xuICBuYW1lOiAnZXJmJyxcbiAgY2F0ZWdvcnk6ICdTcGVjaWFsJyxcbiAgc3ludGF4OiBbJ2VyZih4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGVyZiBmdW5jdGlvbiBvZiBhIHZhbHVlIHVzaW5nIGEgcmF0aW9uYWwgQ2hlYnlzaGV2IGFwcHJveGltYXRpb25zIGZvciBkaWZmZXJlbnQgaW50ZXJ2YWxzIG9mIHgnLFxuICBleGFtcGxlczogWydlcmYoMC4yKScsICdlcmYoLTAuNSknLCAnZXJmKDQpJ10sXG4gIHNlZWFsc286IFtdXG59O1xuZXhwb3J0cy5lcmZEb2NzID0gZXJmRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWFkRG9jcyA9IHZvaWQgMDtcbnZhciBtYWREb2NzID0ge1xuICBuYW1lOiAnbWFkJyxcbiAgY2F0ZWdvcnk6ICdTdGF0aXN0aWNzJyxcbiAgc3ludGF4OiBbJ21hZChhLCBiLCBjLCAuLi4pJywgJ21hZChBKSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIG1lZGlhbiBhYnNvbHV0ZSBkZXZpYXRpb24gb2YgYSBtYXRyaXggb3IgYSBsaXN0IHdpdGggdmFsdWVzLiBUaGUgbWVkaWFuIGFic29sdXRlIGRldmlhdGlvbiBpcyBkZWZpbmVkIGFzIHRoZSBtZWRpYW4gb2YgdGhlIGFic29sdXRlIGRldmlhdGlvbnMgZnJvbSB0aGUgbWVkaWFuLicsXG4gIGV4YW1wbGVzOiBbJ21hZCgxMCwgMjAsIDMwKScsICdtYWQoWzEsIDIsIDNdKSddLFxuICBzZWVhbHNvOiBbJ21lYW4nLCAnbWVkaWFuJywgJ3N0ZCcsICdhYnMnXVxufTtcbmV4cG9ydHMubWFkRG9jcyA9IG1hZERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1heERvY3MgPSB2b2lkIDA7XG52YXIgbWF4RG9jcyA9IHtcbiAgbmFtZTogJ21heCcsXG4gIGNhdGVnb3J5OiAnU3RhdGlzdGljcycsXG4gIHN5bnRheDogWydtYXgoYSwgYiwgYywgLi4uKScsICdtYXgoQSknLCAnbWF4KEEsIGRpbSknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBtYXhpbXVtIHZhbHVlIG9mIGEgbGlzdCBvZiB2YWx1ZXMuJyxcbiAgZXhhbXBsZXM6IFsnbWF4KDIsIDMsIDQsIDEpJywgJ21heChbMiwgMywgNCwgMV0pJywgJ21heChbMiwgNTsgNCwgM10pJywgJ21heChbMiwgNTsgNCwgM10sIDEpJywgJ21heChbMiwgNTsgNCwgM10sIDIpJywgJ21heCgyLjcsIDcuMSwgLTQuNSwgMi4wLCA0LjEpJywgJ21pbigyLjcsIDcuMSwgLTQuNSwgMi4wLCA0LjEpJ10sXG4gIHNlZWFsc286IFsnbWVhbicsICdtZWRpYW4nLCAnbWluJywgJ3Byb2QnLCAnc3RkJywgJ3N1bScsICd2YXJpYW5jZSddXG59O1xuZXhwb3J0cy5tYXhEb2NzID0gbWF4RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWVhbkRvY3MgPSB2b2lkIDA7XG52YXIgbWVhbkRvY3MgPSB7XG4gIG5hbWU6ICdtZWFuJyxcbiAgY2F0ZWdvcnk6ICdTdGF0aXN0aWNzJyxcbiAgc3ludGF4OiBbJ21lYW4oYSwgYiwgYywgLi4uKScsICdtZWFuKEEpJywgJ21lYW4oQSwgZGltKSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGFyaXRobWV0aWMgbWVhbiBvZiBhIGxpc3Qgb2YgdmFsdWVzLicsXG4gIGV4YW1wbGVzOiBbJ21lYW4oMiwgMywgNCwgMSknLCAnbWVhbihbMiwgMywgNCwgMV0pJywgJ21lYW4oWzIsIDU7IDQsIDNdKScsICdtZWFuKFsyLCA1OyA0LCAzXSwgMSknLCAnbWVhbihbMiwgNTsgNCwgM10sIDIpJywgJ21lYW4oWzEuMCwgMi43LCAzLjIsIDQuMF0pJ10sXG4gIHNlZWFsc286IFsnbWF4JywgJ21lZGlhbicsICdtaW4nLCAncHJvZCcsICdzdGQnLCAnc3VtJywgJ3ZhcmlhbmNlJ11cbn07XG5leHBvcnRzLm1lYW5Eb2NzID0gbWVhbkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1lZGlhbkRvY3MgPSB2b2lkIDA7XG52YXIgbWVkaWFuRG9jcyA9IHtcbiAgbmFtZTogJ21lZGlhbicsXG4gIGNhdGVnb3J5OiAnU3RhdGlzdGljcycsXG4gIHN5bnRheDogWydtZWRpYW4oYSwgYiwgYywgLi4uKScsICdtZWRpYW4oQSknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBtZWRpYW4gb2YgYWxsIHZhbHVlcy4gVGhlIHZhbHVlcyBhcmUgc29ydGVkIGFuZCB0aGUgbWlkZGxlIHZhbHVlIGlzIHJldHVybmVkLiBJbiBjYXNlIG9mIGFuIGV2ZW4gbnVtYmVyIG9mIHZhbHVlcywgdGhlIGF2ZXJhZ2Ugb2YgdGhlIHR3byBtaWRkbGUgdmFsdWVzIGlzIHJldHVybmVkLicsXG4gIGV4YW1wbGVzOiBbJ21lZGlhbig1LCAyLCA3KScsICdtZWRpYW4oWzMsIC0xLCA1LCA3XSknXSxcbiAgc2VlYWxzbzogWydtYXgnLCAnbWVhbicsICdtaW4nLCAncHJvZCcsICdzdGQnLCAnc3VtJywgJ3ZhcmlhbmNlJywgJ3F1YW50aWxlU2VxJ11cbn07XG5leHBvcnRzLm1lZGlhbkRvY3MgPSBtZWRpYW5Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5taW5Eb2NzID0gdm9pZCAwO1xudmFyIG1pbkRvY3MgPSB7XG4gIG5hbWU6ICdtaW4nLFxuICBjYXRlZ29yeTogJ1N0YXRpc3RpY3MnLFxuICBzeW50YXg6IFsnbWluKGEsIGIsIGMsIC4uLiknLCAnbWluKEEpJywgJ21pbihBLCBkaW0pJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgbWluaW11bSB2YWx1ZSBvZiBhIGxpc3Qgb2YgdmFsdWVzLicsXG4gIGV4YW1wbGVzOiBbJ21pbigyLCAzLCA0LCAxKScsICdtaW4oWzIsIDMsIDQsIDFdKScsICdtaW4oWzIsIDU7IDQsIDNdKScsICdtaW4oWzIsIDU7IDQsIDNdLCAxKScsICdtaW4oWzIsIDU7IDQsIDNdLCAyKScsICdtaW4oMi43LCA3LjEsIC00LjUsIDIuMCwgNC4xKScsICdtYXgoMi43LCA3LjEsIC00LjUsIDIuMCwgNC4xKSddLFxuICBzZWVhbHNvOiBbJ21heCcsICdtZWFuJywgJ21lZGlhbicsICdwcm9kJywgJ3N0ZCcsICdzdW0nLCAndmFyaWFuY2UnXVxufTtcbmV4cG9ydHMubWluRG9jcyA9IG1pbkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1vZGVEb2NzID0gdm9pZCAwO1xudmFyIG1vZGVEb2NzID0ge1xuICBuYW1lOiAnbW9kZScsXG4gIGNhdGVnb3J5OiAnU3RhdGlzdGljcycsXG4gIHN5bnRheDogWydtb2RlKGEsIGIsIGMsIC4uLiknLCAnbW9kZShBKScsICdtb2RlKEEsIGEsIGIsIEIsIGMsIC4uLiknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlcyB0aGUgbW9kZSBvZiBhbGwgdmFsdWVzIGFzIGFuIGFycmF5LiBJbiBjYXNlIG1vZGUgYmVpbmcgbW9yZSB0aGFuIG9uZSwgbXVsdGlwbGUgdmFsdWVzIGFyZSByZXR1cm5lZCBpbiBhbiBhcnJheS4nLFxuICBleGFtcGxlczogWydtb2RlKDIsIDEsIDQsIDMsIDEpJywgJ21vZGUoWzEsIDIuNywgMy4yLCA0LCAyLjddKScsICdtb2RlKDEsIDQsIDYsIDEsIDYpJ10sXG4gIHNlZWFsc286IFsnbWF4JywgJ21lYW4nLCAnbWluJywgJ21lZGlhbicsICdwcm9kJywgJ3N0ZCcsICdzdW0nLCAndmFyaWFuY2UnXVxufTtcbmV4cG9ydHMubW9kZURvY3MgPSBtb2RlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucHJvZERvY3MgPSB2b2lkIDA7XG52YXIgcHJvZERvY3MgPSB7XG4gIG5hbWU6ICdwcm9kJyxcbiAgY2F0ZWdvcnk6ICdTdGF0aXN0aWNzJyxcbiAgc3ludGF4OiBbJ3Byb2QoYSwgYiwgYywgLi4uKScsICdwcm9kKEEpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgcHJvZHVjdCBvZiBhbGwgdmFsdWVzLicsXG4gIGV4YW1wbGVzOiBbJ3Byb2QoMiwgMywgNCknLCAncHJvZChbMiwgMywgNF0pJywgJ3Byb2QoWzIsIDU7IDQsIDNdKSddLFxuICBzZWVhbHNvOiBbJ21heCcsICdtZWFuJywgJ21pbicsICdtZWRpYW4nLCAnbWluJywgJ3N0ZCcsICdzdW0nLCAndmFyaWFuY2UnXVxufTtcbmV4cG9ydHMucHJvZERvY3MgPSBwcm9kRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucXVhbnRpbGVTZXFEb2NzID0gdm9pZCAwO1xudmFyIHF1YW50aWxlU2VxRG9jcyA9IHtcbiAgbmFtZTogJ3F1YW50aWxlU2VxJyxcbiAgY2F0ZWdvcnk6ICdTdGF0aXN0aWNzJyxcbiAgc3ludGF4OiBbJ3F1YW50aWxlU2VxKEEsIHByb2JbLCBzb3J0ZWRdKScsICdxdWFudGlsZVNlcShBLCBbcHJvYjEsIHByb2IyLCAuLi5dWywgc29ydGVkXSknLCAncXVhbnRpbGVTZXEoQSwgTlssIHNvcnRlZF0pJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgcHJvYiBvcmRlciBxdWFudGlsZSBvZiBhIG1hdHJpeCBvciBhIGxpc3Qgd2l0aCB2YWx1ZXMuIFRoZSBzZXF1ZW5jZSBpcyBzb3J0ZWQgYW5kIHRoZSBtaWRkbGUgdmFsdWUgaXMgcmV0dXJuZWQuIFN1cHBvcnRlZCB0eXBlcyBvZiBzZXF1ZW5jZSB2YWx1ZXMgYXJlOiBOdW1iZXIsIEJpZ051bWJlciwgVW5pdCBTdXBwb3J0ZWQgdHlwZXMgb2YgcHJvYmFibGl0eSBhcmU6IE51bWJlciwgQmlnTnVtYmVyLiBcXG5cXG5JbiBjYXNlIG9mIGEgKG11bHRpIGRpbWVuc2lvbmFsKSBhcnJheSBvciBtYXRyaXgsIHRoZSBwcm9iIG9yZGVyIHF1YW50aWxlIG9mIGFsbCBlbGVtZW50cyB3aWxsIGJlIGNhbGN1bGF0ZWQuJyxcbiAgZXhhbXBsZXM6IFsncXVhbnRpbGVTZXEoWzMsIC0xLCA1LCA3XSwgMC41KScsICdxdWFudGlsZVNlcShbMywgLTEsIDUsIDddLCBbMS8zLCAyLzNdKScsICdxdWFudGlsZVNlcShbMywgLTEsIDUsIDddLCAyKScsICdxdWFudGlsZVNlcShbLTEsIDMsIDUsIDddLCAwLjUsIHRydWUpJ10sXG4gIHNlZWFsc286IFsnbWVhbicsICdtZWRpYW4nLCAnbWluJywgJ21heCcsICdwcm9kJywgJ3N0ZCcsICdzdW0nLCAndmFyaWFuY2UnXVxufTtcbmV4cG9ydHMucXVhbnRpbGVTZXFEb2NzID0gcXVhbnRpbGVTZXFEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zdGREb2NzID0gdm9pZCAwO1xudmFyIHN0ZERvY3MgPSB7XG4gIG5hbWU6ICdzdGQnLFxuICBjYXRlZ29yeTogJ1N0YXRpc3RpY3MnLFxuICBzeW50YXg6IFsnc3RkKGEsIGIsIGMsIC4uLiknLCAnc3RkKEEpJywgJ3N0ZChBLCBub3JtYWxpemF0aW9uKSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIHN0YW5kYXJkIGRldmlhdGlvbiBvZiBhbGwgdmFsdWVzLCBkZWZpbmVkIGFzIHN0ZChBKSA9IHNxcnQodmFyaWFuY2UoQSkpLiBPcHRpb25hbCBwYXJhbWV0ZXIgbm9ybWFsaXphdGlvbiBjYW4gYmUgXCJ1bmJpYXNlZFwiIChkZWZhdWx0KSwgXCJ1bmNvcnJlY3RlZFwiLCBvciBcImJpYXNlZFwiLicsXG4gIGV4YW1wbGVzOiBbJ3N0ZCgyLCA0LCA2KScsICdzdGQoWzIsIDQsIDYsIDhdKScsICdzdGQoWzIsIDQsIDYsIDhdLCBcInVuY29ycmVjdGVkXCIpJywgJ3N0ZChbMiwgNCwgNiwgOF0sIFwiYmlhc2VkXCIpJywgJ3N0ZChbMSwgMiwgMzsgNCwgNSwgNl0pJ10sXG4gIHNlZWFsc286IFsnbWF4JywgJ21lYW4nLCAnbWluJywgJ21lZGlhbicsICdwcm9kJywgJ3N1bScsICd2YXJpYW5jZSddXG59O1xuZXhwb3J0cy5zdGREb2NzID0gc3RkRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3VtRG9jcyA9IHZvaWQgMDtcbnZhciBzdW1Eb2NzID0ge1xuICBuYW1lOiAnc3VtJyxcbiAgY2F0ZWdvcnk6ICdTdGF0aXN0aWNzJyxcbiAgc3ludGF4OiBbJ3N1bShhLCBiLCBjLCAuLi4pJywgJ3N1bShBKSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIHN1bSBvZiBhbGwgdmFsdWVzLicsXG4gIGV4YW1wbGVzOiBbJ3N1bSgyLCAzLCA0LCAxKScsICdzdW0oWzIsIDMsIDQsIDFdKScsICdzdW0oWzIsIDU7IDQsIDNdKSddLFxuICBzZWVhbHNvOiBbJ21heCcsICdtZWFuJywgJ21lZGlhbicsICdtaW4nLCAncHJvZCcsICdzdGQnLCAnc3VtJywgJ3ZhcmlhbmNlJ11cbn07XG5leHBvcnRzLnN1bURvY3MgPSBzdW1Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy52YXJpYW5jZURvY3MgPSB2b2lkIDA7XG52YXIgdmFyaWFuY2VEb2NzID0ge1xuICBuYW1lOiAndmFyaWFuY2UnLFxuICBjYXRlZ29yeTogJ1N0YXRpc3RpY3MnLFxuICBzeW50YXg6IFsndmFyaWFuY2UoYSwgYiwgYywgLi4uKScsICd2YXJpYW5jZShBKScsICd2YXJpYW5jZShBLCBub3JtYWxpemF0aW9uKSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIHZhcmlhbmNlIG9mIGFsbCB2YWx1ZXMuIE9wdGlvbmFsIHBhcmFtZXRlciBub3JtYWxpemF0aW9uIGNhbiBiZSBcInVuYmlhc2VkXCIgKGRlZmF1bHQpLCBcInVuY29ycmVjdGVkXCIsIG9yIFwiYmlhc2VkXCIuJyxcbiAgZXhhbXBsZXM6IFsndmFyaWFuY2UoMiwgNCwgNiknLCAndmFyaWFuY2UoWzIsIDQsIDYsIDhdKScsICd2YXJpYW5jZShbMiwgNCwgNiwgOF0sIFwidW5jb3JyZWN0ZWRcIiknLCAndmFyaWFuY2UoWzIsIDQsIDYsIDhdLCBcImJpYXNlZFwiKScsICd2YXJpYW5jZShbMSwgMiwgMzsgNCwgNSwgNl0pJ10sXG4gIHNlZWFsc286IFsnbWF4JywgJ21lYW4nLCAnbWluJywgJ21lZGlhbicsICdtaW4nLCAncHJvZCcsICdzdGQnLCAnc3VtJ11cbn07XG5leHBvcnRzLnZhcmlhbmNlRG9jcyA9IHZhcmlhbmNlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWNvc0RvY3MgPSB2b2lkIDA7XG52YXIgYWNvc0RvY3MgPSB7XG4gIG5hbWU6ICdhY29zJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnYWNvcyh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGludmVyc2UgY29zaW5lIG9mIGEgdmFsdWUgaW4gcmFkaWFucy4nLFxuICBleGFtcGxlczogWydhY29zKDAuNSknLCAnYWNvcyhjb3MoMi4zKSknXSxcbiAgc2VlYWxzbzogWydjb3MnLCAnYXRhbicsICdhc2luJ11cbn07XG5leHBvcnRzLmFjb3NEb2NzID0gYWNvc0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFjb3NoRG9jcyA9IHZvaWQgMDtcbnZhciBhY29zaERvY3MgPSB7XG4gIG5hbWU6ICdhY29zaCcsXG4gIGNhdGVnb3J5OiAnVHJpZ29ub21ldHJ5JyxcbiAgc3ludGF4OiBbJ2Fjb3NoKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBoeXBlcmJvbGljIGFyY2NvcyBvZiBhIHZhbHVlLCBkZWZpbmVkIGFzIGBhY29zaCh4KSA9IGxuKHNxcnQoeF4yIC0gMSkgKyB4KWAuJyxcbiAgZXhhbXBsZXM6IFsnYWNvc2goMS41KSddLFxuICBzZWVhbHNvOiBbJ2Nvc2gnLCAnYXNpbmgnLCAnYXRhbmgnXVxufTtcbmV4cG9ydHMuYWNvc2hEb2NzID0gYWNvc2hEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hY290RG9jcyA9IHZvaWQgMDtcbnZhciBhY290RG9jcyA9IHtcbiAgbmFtZTogJ2Fjb3QnLFxuICBjYXRlZ29yeTogJ1RyaWdvbm9tZXRyeScsXG4gIHN5bnRheDogWydhY290KHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBpbnZlcnNlIGNvdGFuZ2VudCBvZiBhIHZhbHVlLicsXG4gIGV4YW1wbGVzOiBbJ2Fjb3QoMC41KScsICdhY290KGNvdCgwLjUpKScsICdhY290KDIpJ10sXG4gIHNlZWFsc286IFsnY290JywgJ2F0YW4nXVxufTtcbmV4cG9ydHMuYWNvdERvY3MgPSBhY290RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWNvdGhEb2NzID0gdm9pZCAwO1xudmFyIGFjb3RoRG9jcyA9IHtcbiAgbmFtZTogJ2Fjb3RoJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnYWNvdGgoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgYXJjY290YW5nZW50IG9mIGEgdmFsdWUsIGRlZmluZWQgYXMgYGFjb3RoKHgpID0gKGxuKCh4KzEpL3gpICsgbG4oeC8oeC0xKSkpIC8gMmAuJyxcbiAgZXhhbXBsZXM6IFsnYWNvdGgoMiknLCAnYWNvdGgoMC41KSddLFxuICBzZWVhbHNvOiBbJ2Fjc2NoJywgJ2FzZWNoJ11cbn07XG5leHBvcnRzLmFjb3RoRG9jcyA9IGFjb3RoRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWNzY0RvY3MgPSB2b2lkIDA7XG52YXIgYWNzY0RvY3MgPSB7XG4gIG5hbWU6ICdhY3NjJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnYWNzYyh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgaW52ZXJzZSBjb3RhbmdlbnQgb2YgYSB2YWx1ZS4nLFxuICBleGFtcGxlczogWydhY3NjKDIpJywgJ2Fjc2MoY3NjKDAuNSkpJywgJ2Fjc2MoMC41KSddLFxuICBzZWVhbHNvOiBbJ2NzYycsICdhc2luJywgJ2FzZWMnXVxufTtcbmV4cG9ydHMuYWNzY0RvY3MgPSBhY3NjRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWNzY2hEb2NzID0gdm9pZCAwO1xudmFyIGFjc2NoRG9jcyA9IHtcbiAgbmFtZTogJ2Fjc2NoJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnYWNzY2goeCknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgYXJjY29zZWNhbnQgb2YgYSB2YWx1ZSwgZGVmaW5lZCBhcyBgYWNzY2goeCkgPSBsbigxL3ggKyBzcXJ0KDEveF4yICsgMSkpYC4nLFxuICBleGFtcGxlczogWydhY3NjaCgwLjUpJ10sXG4gIHNlZWFsc286IFsnYXNlY2gnLCAnYWNvdGgnXVxufTtcbmV4cG9ydHMuYWNzY2hEb2NzID0gYWNzY2hEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hc2VjRG9jcyA9IHZvaWQgMDtcbnZhciBhc2VjRG9jcyA9IHtcbiAgbmFtZTogJ2FzZWMnLFxuICBjYXRlZ29yeTogJ1RyaWdvbm9tZXRyeScsXG4gIHN5bnRheDogWydhc2VjKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBpbnZlcnNlIHNlY2FudCBvZiBhIHZhbHVlLicsXG4gIGV4YW1wbGVzOiBbJ2FzZWMoMC41KScsICdhc2VjKHNlYygwLjUpKScsICdhc2VjKDIpJ10sXG4gIHNlZWFsc286IFsnYWNvcycsICdhY290JywgJ2Fjc2MnXVxufTtcbmV4cG9ydHMuYXNlY0RvY3MgPSBhc2VjRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYXNlY2hEb2NzID0gdm9pZCAwO1xudmFyIGFzZWNoRG9jcyA9IHtcbiAgbmFtZTogJ2FzZWNoJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnYXNlY2goeCknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIGludmVyc2Ugc2VjYW50IG9mIGEgdmFsdWUuJyxcbiAgZXhhbXBsZXM6IFsnYXNlY2goMC41KSddLFxuICBzZWVhbHNvOiBbJ2Fjc2NoJywgJ2Fjb3RoJ11cbn07XG5leHBvcnRzLmFzZWNoRG9jcyA9IGFzZWNoRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYXNpbkRvY3MgPSB2b2lkIDA7XG52YXIgYXNpbkRvY3MgPSB7XG4gIG5hbWU6ICdhc2luJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnYXNpbih4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGludmVyc2Ugc2luZSBvZiBhIHZhbHVlIGluIHJhZGlhbnMuJyxcbiAgZXhhbXBsZXM6IFsnYXNpbigwLjUpJywgJ2FzaW4oc2luKDAuNSkpJ10sXG4gIHNlZWFsc286IFsnc2luJywgJ2Fjb3MnLCAnYXRhbiddXG59O1xuZXhwb3J0cy5hc2luRG9jcyA9IGFzaW5Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hc2luaERvY3MgPSB2b2lkIDA7XG52YXIgYXNpbmhEb2NzID0ge1xuICBuYW1lOiAnYXNpbmgnLFxuICBjYXRlZ29yeTogJ1RyaWdvbm9tZXRyeScsXG4gIHN5bnRheDogWydhc2luaCh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgaHlwZXJib2xpYyBhcmNzaW5lIG9mIGEgdmFsdWUsIGRlZmluZWQgYXMgYGFzaW5oKHgpID0gbG4oeCArIHNxcnQoeF4yICsgMSkpYC4nLFxuICBleGFtcGxlczogWydhc2luaCgwLjUpJ10sXG4gIHNlZWFsc286IFsnYWNvc2gnLCAnYXRhbmgnXVxufTtcbmV4cG9ydHMuYXNpbmhEb2NzID0gYXNpbmhEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hdGFuRG9jcyA9IHZvaWQgMDtcbnZhciBhdGFuRG9jcyA9IHtcbiAgbmFtZTogJ2F0YW4nLFxuICBjYXRlZ29yeTogJ1RyaWdvbm9tZXRyeScsXG4gIHN5bnRheDogWydhdGFuKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgaW52ZXJzZSB0YW5nZW50IG9mIGEgdmFsdWUgaW4gcmFkaWFucy4nLFxuICBleGFtcGxlczogWydhdGFuKDAuNSknLCAnYXRhbih0YW4oMC41KSknXSxcbiAgc2VlYWxzbzogWyd0YW4nLCAnYWNvcycsICdhc2luJ11cbn07XG5leHBvcnRzLmF0YW5Eb2NzID0gYXRhbkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmF0YW4yRG9jcyA9IHZvaWQgMDtcbnZhciBhdGFuMkRvY3MgPSB7XG4gIG5hbWU6ICdhdGFuMicsXG4gIGNhdGVnb3J5OiAnVHJpZ29ub21ldHJ5JyxcbiAgc3ludGF4OiBbJ2F0YW4yKHksIHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZXMgdGhlIHByaW5jaXBhbCB2YWx1ZSBvZiB0aGUgYXJjIHRhbmdlbnQgb2YgeS94IGluIHJhZGlhbnMuJyxcbiAgZXhhbXBsZXM6IFsnYXRhbjIoMiwgMikgLyBwaScsICdhbmdsZSA9IDYwIGRlZyBpbiByYWQnLCAneCA9IGNvcyhhbmdsZSknLCAneSA9IHNpbihhbmdsZSknLCAnYXRhbjIoeSwgeCknXSxcbiAgc2VlYWxzbzogWydzaW4nLCAnY29zJywgJ3RhbiddXG59O1xuZXhwb3J0cy5hdGFuMkRvY3MgPSBhdGFuMkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmF0YW5oRG9jcyA9IHZvaWQgMDtcbnZhciBhdGFuaERvY3MgPSB7XG4gIG5hbWU6ICdhdGFuaCcsXG4gIGNhdGVnb3J5OiAnVHJpZ29ub21ldHJ5JyxcbiAgc3ludGF4OiBbJ2F0YW5oKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBoeXBlcmJvbGljIGFyY3RhbmdlbnQgb2YgYSB2YWx1ZSwgZGVmaW5lZCBhcyBgYXRhbmgoeCkgPSBsbigoMSArIHgpLygxIC0geCkpIC8gMmAuJyxcbiAgZXhhbXBsZXM6IFsnYXRhbmgoMC41KSddLFxuICBzZWVhbHNvOiBbJ2Fjb3NoJywgJ2FzaW5oJ11cbn07XG5leHBvcnRzLmF0YW5oRG9jcyA9IGF0YW5oRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29zRG9jcyA9IHZvaWQgMDtcbnZhciBjb3NEb2NzID0ge1xuICBuYW1lOiAnY29zJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnY29zKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgY29zaW5lIG9mIHggaW4gcmFkaWFucy4nLFxuICBleGFtcGxlczogWydjb3MoMiknLCAnY29zKHBpIC8gNCkgXiAyJywgJ2NvcygxODAgZGVnKScsICdjb3MoNjAgZGVnKScsICdzaW4oMC4yKV4yICsgY29zKDAuMileMiddLFxuICBzZWVhbHNvOiBbJ2Fjb3MnLCAnc2luJywgJ3RhbiddXG59O1xuZXhwb3J0cy5jb3NEb2NzID0gY29zRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29zaERvY3MgPSB2b2lkIDA7XG52YXIgY29zaERvY3MgPSB7XG4gIG5hbWU6ICdjb3NoJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnY29zaCh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGh5cGVyYm9saWMgY29zaW5lIG9mIHggaW4gcmFkaWFucy4nLFxuICBleGFtcGxlczogWydjb3NoKDAuNSknXSxcbiAgc2VlYWxzbzogWydzaW5oJywgJ3RhbmgnLCAnY290aCddXG59O1xuZXhwb3J0cy5jb3NoRG9jcyA9IGNvc2hEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb3REb2NzID0gdm9pZCAwO1xudmFyIGNvdERvY3MgPSB7XG4gIG5hbWU6ICdjb3QnLFxuICBjYXRlZ29yeTogJ1RyaWdvbm9tZXRyeScsXG4gIHN5bnRheDogWydjb3QoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBjb3RhbmdlbnQgb2YgeCBpbiByYWRpYW5zLiBEZWZpbmVkIGFzIDEvdGFuKHgpJyxcbiAgZXhhbXBsZXM6IFsnY290KDIpJywgJzEgLyB0YW4oMiknXSxcbiAgc2VlYWxzbzogWydzZWMnLCAnY3NjJywgJ3RhbiddXG59O1xuZXhwb3J0cy5jb3REb2NzID0gY290RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY290aERvY3MgPSB2b2lkIDA7XG52YXIgY290aERvY3MgPSB7XG4gIG5hbWU6ICdjb3RoJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnY290aCh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGh5cGVyYm9saWMgY290YW5nZW50IG9mIHggaW4gcmFkaWFucy4nLFxuICBleGFtcGxlczogWydjb3RoKDIpJywgJzEgLyB0YW5oKDIpJ10sXG4gIHNlZWFsc286IFsnc2VjaCcsICdjc2NoJywgJ3RhbmgnXVxufTtcbmV4cG9ydHMuY290aERvY3MgPSBjb3RoRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3NjRG9jcyA9IHZvaWQgMDtcbnZhciBjc2NEb2NzID0ge1xuICBuYW1lOiAnY3NjJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnY3NjKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgY29zZWNhbnQgb2YgeCBpbiByYWRpYW5zLiBEZWZpbmVkIGFzIDEvc2luKHgpJyxcbiAgZXhhbXBsZXM6IFsnY3NjKDIpJywgJzEgLyBzaW4oMiknXSxcbiAgc2VlYWxzbzogWydzZWMnLCAnY290JywgJ3NpbiddXG59O1xuZXhwb3J0cy5jc2NEb2NzID0gY3NjRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3NjaERvY3MgPSB2b2lkIDA7XG52YXIgY3NjaERvY3MgPSB7XG4gIG5hbWU6ICdjc2NoJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnY3NjaCh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGh5cGVyYm9saWMgY29zZWNhbnQgb2YgeCBpbiByYWRpYW5zLiBEZWZpbmVkIGFzIDEvc2luaCh4KScsXG4gIGV4YW1wbGVzOiBbJ2NzY2goMiknLCAnMSAvIHNpbmgoMiknXSxcbiAgc2VlYWxzbzogWydzZWNoJywgJ2NvdGgnLCAnc2luaCddXG59O1xuZXhwb3J0cy5jc2NoRG9jcyA9IGNzY2hEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZWNEb2NzID0gdm9pZCAwO1xudmFyIHNlY0RvY3MgPSB7XG4gIG5hbWU6ICdzZWMnLFxuICBjYXRlZ29yeTogJ1RyaWdvbm9tZXRyeScsXG4gIHN5bnRheDogWydzZWMoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBzZWNhbnQgb2YgeCBpbiByYWRpYW5zLiBEZWZpbmVkIGFzIDEvY29zKHgpJyxcbiAgZXhhbXBsZXM6IFsnc2VjKDIpJywgJzEgLyBjb3MoMiknXSxcbiAgc2VlYWxzbzogWydjb3QnLCAnY3NjJywgJ2NvcyddXG59O1xuZXhwb3J0cy5zZWNEb2NzID0gc2VjRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2VjaERvY3MgPSB2b2lkIDA7XG52YXIgc2VjaERvY3MgPSB7XG4gIG5hbWU6ICdzZWNoJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnc2VjaCh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGh5cGVyYm9saWMgc2VjYW50IG9mIHggaW4gcmFkaWFucy4gRGVmaW5lZCBhcyAxL2Nvc2goeCknLFxuICBleGFtcGxlczogWydzZWNoKDIpJywgJzEgLyBjb3NoKDIpJ10sXG4gIHNlZWFsc286IFsnY290aCcsICdjc2NoJywgJ2Nvc2gnXVxufTtcbmV4cG9ydHMuc2VjaERvY3MgPSBzZWNoRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2luRG9jcyA9IHZvaWQgMDtcbnZhciBzaW5Eb2NzID0ge1xuICBuYW1lOiAnc2luJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnc2luKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgc2luZSBvZiB4IGluIHJhZGlhbnMuJyxcbiAgZXhhbXBsZXM6IFsnc2luKDIpJywgJ3NpbihwaSAvIDQpIF4gMicsICdzaW4oOTAgZGVnKScsICdzaW4oMzAgZGVnKScsICdzaW4oMC4yKV4yICsgY29zKDAuMileMiddLFxuICBzZWVhbHNvOiBbJ2FzaW4nLCAnY29zJywgJ3RhbiddXG59O1xuZXhwb3J0cy5zaW5Eb2NzID0gc2luRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2luaERvY3MgPSB2b2lkIDA7XG52YXIgc2luaERvY3MgPSB7XG4gIG5hbWU6ICdzaW5oJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnc2luaCh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGh5cGVyYm9saWMgc2luZSBvZiB4IGluIHJhZGlhbnMuJyxcbiAgZXhhbXBsZXM6IFsnc2luaCgwLjUpJ10sXG4gIHNlZWFsc286IFsnY29zaCcsICd0YW5oJ11cbn07XG5leHBvcnRzLnNpbmhEb2NzID0gc2luaERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnRhbkRvY3MgPSB2b2lkIDA7XG52YXIgdGFuRG9jcyA9IHtcbiAgbmFtZTogJ3RhbicsXG4gIGNhdGVnb3J5OiAnVHJpZ29ub21ldHJ5JyxcbiAgc3ludGF4OiBbJ3Rhbih4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIHRhbmdlbnQgb2YgeCBpbiByYWRpYW5zLicsXG4gIGV4YW1wbGVzOiBbJ3RhbigwLjUpJywgJ3NpbigwLjUpIC8gY29zKDAuNSknLCAndGFuKHBpIC8gNCknLCAndGFuKDQ1IGRlZyknXSxcbiAgc2VlYWxzbzogWydhdGFuJywgJ3NpbicsICdjb3MnXVxufTtcbmV4cG9ydHMudGFuRG9jcyA9IHRhbkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnRhbmhEb2NzID0gdm9pZCAwO1xudmFyIHRhbmhEb2NzID0ge1xuICBuYW1lOiAndGFuaCcsXG4gIGNhdGVnb3J5OiAnVHJpZ29ub21ldHJ5JyxcbiAgc3ludGF4OiBbJ3RhbmgoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBoeXBlcmJvbGljIHRhbmdlbnQgb2YgeCBpbiByYWRpYW5zLicsXG4gIGV4YW1wbGVzOiBbJ3RhbmgoMC41KScsICdzaW5oKDAuNSkgLyBjb3NoKDAuNSknXSxcbiAgc2VlYWxzbzogWydzaW5oJywgJ2Nvc2gnXVxufTtcbmV4cG9ydHMudGFuaERvY3MgPSB0YW5oRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudG9Eb2NzID0gdm9pZCAwO1xudmFyIHRvRG9jcyA9IHtcbiAgbmFtZTogJ3RvJyxcbiAgY2F0ZWdvcnk6ICdVbml0cycsXG4gIHN5bnRheDogWyd4IHRvIHVuaXQnLCAndG8oeCwgdW5pdCknXSxcbiAgZGVzY3JpcHRpb246ICdDaGFuZ2UgdGhlIHVuaXQgb2YgYSB2YWx1ZS4nLFxuICBleGFtcGxlczogWyc1IGluY2ggdG8gY20nLCAnMy4ya2cgdG8gZycsICcxNiBieXRlcyBpbiBiaXRzJ10sXG4gIHNlZWFsc286IFtdXG59O1xuZXhwb3J0cy50b0RvY3MgPSB0b0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNsb25lRG9jcyA9IHZvaWQgMDtcbnZhciBjbG9uZURvY3MgPSB7XG4gIG5hbWU6ICdjbG9uZScsXG4gIGNhdGVnb3J5OiAnVXRpbHMnLFxuICBzeW50YXg6IFsnY2xvbmUoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDbG9uZSBhIHZhcmlhYmxlLiBDcmVhdGVzIGEgY29weSBvZiBwcmltaXRpdmUgdmFyaWFibGVzLGFuZCBhIGRlZXAgY29weSBvZiBtYXRyaWNlcycsXG4gIGV4YW1wbGVzOiBbJ2Nsb25lKDMuNSknLCAnY2xvbmUoMiAtIDRpKScsICdjbG9uZSg0NSBkZWcpJywgJ2Nsb25lKFsxLCAyOyAzLCA0XSknLCAnY2xvbmUoXCJoZWxsbyB3b3JsZFwiKSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMuY2xvbmVEb2NzID0gY2xvbmVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5mb3JtYXREb2NzID0gdm9pZCAwO1xudmFyIGZvcm1hdERvY3MgPSB7XG4gIG5hbWU6ICdmb3JtYXQnLFxuICBjYXRlZ29yeTogJ1V0aWxzJyxcbiAgc3ludGF4OiBbJ2Zvcm1hdCh2YWx1ZSknLCAnZm9ybWF0KHZhbHVlLCBwcmVjaXNpb24pJ10sXG4gIGRlc2NyaXB0aW9uOiAnRm9ybWF0IGEgdmFsdWUgb2YgYW55IHR5cGUgYXMgc3RyaW5nLicsXG4gIGV4YW1wbGVzOiBbJ2Zvcm1hdCgyLjMpJywgJ2Zvcm1hdCgzIC0gNGkpJywgJ2Zvcm1hdChbXSknLCAnZm9ybWF0KHBpLCAzKSddLFxuICBzZWVhbHNvOiBbJ3ByaW50J11cbn07XG5leHBvcnRzLmZvcm1hdERvY3MgPSBmb3JtYXREb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5oYXNOdW1lcmljVmFsdWVEb2NzID0gdm9pZCAwO1xudmFyIGhhc051bWVyaWNWYWx1ZURvY3MgPSB7XG4gIG5hbWU6ICdoYXNOdW1lcmljVmFsdWUnLFxuICBjYXRlZ29yeTogJ1V0aWxzJyxcbiAgc3ludGF4OiBbJ2hhc051bWVyaWNWYWx1ZSh4KSddLFxuICBkZXNjcmlwdGlvbjogJ1Rlc3Qgd2hldGhlciBhIHZhbHVlIGlzIGFuIG51bWVyaWMgdmFsdWUuICcgKyAnSW4gY2FzZSBvZiBhIHN0cmluZywgdHJ1ZSBpcyByZXR1cm5lZCBpZiB0aGUgc3RyaW5nIGNvbnRhaW5zIGEgbnVtZXJpYyB2YWx1ZS4nLFxuICBleGFtcGxlczogWydoYXNOdW1lcmljVmFsdWUoMiknLCAnaGFzTnVtZXJpY1ZhbHVlKFwiMlwiKScsICdpc051bWVyaWMoXCIyXCIpJywgJ2hhc051bWVyaWNWYWx1ZSgwKScsICdoYXNOdW1lcmljVmFsdWUoYmlnbnVtYmVyKDUwMCkpJywgJ2hhc051bWVyaWNWYWx1ZShmcmFjdGlvbigwLjEyNSkpJywgJ2hhc051bWVyaWNWYWx1ZSgyICsgM2kpJywgJ2hhc051bWVyaWNWYWx1ZShbMi4zLCBcImZvb1wiLCBmYWxzZV0pJ10sXG4gIHNlZWFsc286IFsnaXNJbnRlZ2VyJywgJ2lzWmVybycsICdpc05lZ2F0aXZlJywgJ2lzUG9zaXRpdmUnLCAnaXNOYU4nLCAnaXNOdW1lcmljJ11cbn07XG5leHBvcnRzLmhhc051bWVyaWNWYWx1ZURvY3MgPSBoYXNOdW1lcmljVmFsdWVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pc0ludGVnZXJEb2NzID0gdm9pZCAwO1xudmFyIGlzSW50ZWdlckRvY3MgPSB7XG4gIG5hbWU6ICdpc0ludGVnZXInLFxuICBjYXRlZ29yeTogJ1V0aWxzJyxcbiAgc3ludGF4OiBbJ2lzSW50ZWdlcih4KSddLFxuICBkZXNjcmlwdGlvbjogJ1Rlc3Qgd2hldGhlciBhIHZhbHVlIGlzIGFuIGludGVnZXIgbnVtYmVyLicsXG4gIGV4YW1wbGVzOiBbJ2lzSW50ZWdlcigyKScsICdpc0ludGVnZXIoMy41KScsICdpc0ludGVnZXIoWzMsIDAuNSwgLTJdKSddLFxuICBzZWVhbHNvOiBbJ2lzTmVnYXRpdmUnLCAnaXNOdW1lcmljJywgJ2lzUG9zaXRpdmUnLCAnaXNaZXJvJ11cbn07XG5leHBvcnRzLmlzSW50ZWdlckRvY3MgPSBpc0ludGVnZXJEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pc05hTkRvY3MgPSB2b2lkIDA7XG52YXIgaXNOYU5Eb2NzID0ge1xuICBuYW1lOiAnaXNOYU4nLFxuICBjYXRlZ29yeTogJ1V0aWxzJyxcbiAgc3ludGF4OiBbJ2lzTmFOKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnVGVzdCB3aGV0aGVyIGEgdmFsdWUgaXMgTmFOIChub3QgYSBudW1iZXIpJyxcbiAgZXhhbXBsZXM6IFsnaXNOYU4oMiknLCAnaXNOYU4oMCAvIDApJywgJ2lzTmFOKE5hTiknLCAnaXNOYU4oSW5maW5pdHkpJ10sXG4gIHNlZWFsc286IFsnaXNOZWdhdGl2ZScsICdpc051bWVyaWMnLCAnaXNQb3NpdGl2ZScsICdpc1plcm8nXVxufTtcbmV4cG9ydHMuaXNOYU5Eb2NzID0gaXNOYU5Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pc05lZ2F0aXZlRG9jcyA9IHZvaWQgMDtcbnZhciBpc05lZ2F0aXZlRG9jcyA9IHtcbiAgbmFtZTogJ2lzTmVnYXRpdmUnLFxuICBjYXRlZ29yeTogJ1V0aWxzJyxcbiAgc3ludGF4OiBbJ2lzTmVnYXRpdmUoeCknXSxcbiAgZGVzY3JpcHRpb246ICdUZXN0IHdoZXRoZXIgYSB2YWx1ZSBpcyBuZWdhdGl2ZTogc21hbGxlciB0aGFuIHplcm8uJyxcbiAgZXhhbXBsZXM6IFsnaXNOZWdhdGl2ZSgyKScsICdpc05lZ2F0aXZlKDApJywgJ2lzTmVnYXRpdmUoLTQpJywgJ2lzTmVnYXRpdmUoWzMsIDAuNSwgLTJdKSddLFxuICBzZWVhbHNvOiBbJ2lzSW50ZWdlcicsICdpc051bWVyaWMnLCAnaXNQb3NpdGl2ZScsICdpc1plcm8nXVxufTtcbmV4cG9ydHMuaXNOZWdhdGl2ZURvY3MgPSBpc05lZ2F0aXZlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaXNOdW1lcmljRG9jcyA9IHZvaWQgMDtcbnZhciBpc051bWVyaWNEb2NzID0ge1xuICBuYW1lOiAnaXNOdW1lcmljJyxcbiAgY2F0ZWdvcnk6ICdVdGlscycsXG4gIHN5bnRheDogWydpc051bWVyaWMoeCknXSxcbiAgZGVzY3JpcHRpb246ICdUZXN0IHdoZXRoZXIgYSB2YWx1ZSBpcyBhIG51bWVyaWMgdmFsdWUuICcgKyAnUmV0dXJucyB0cnVlIHdoZW4gdGhlIGlucHV0IGlzIGEgbnVtYmVyLCBCaWdOdW1iZXIsIEZyYWN0aW9uLCBvciBib29sZWFuLicsXG4gIGV4YW1wbGVzOiBbJ2lzTnVtZXJpYygyKScsICdpc051bWVyaWMoXCIyXCIpJywgJ2hhc051bWVyaWNWYWx1ZShcIjJcIiknLCAnaXNOdW1lcmljKDApJywgJ2lzTnVtZXJpYyhiaWdudW1iZXIoNTAwKSknLCAnaXNOdW1lcmljKGZyYWN0aW9uKDAuMTI1KSknLCAnaXNOdW1lcmljKDIgKyAzaSknLCAnaXNOdW1lcmljKFsyLjMsIFwiZm9vXCIsIGZhbHNlXSknXSxcbiAgc2VlYWxzbzogWydpc0ludGVnZXInLCAnaXNaZXJvJywgJ2lzTmVnYXRpdmUnLCAnaXNQb3NpdGl2ZScsICdpc05hTicsICdoYXNOdW1lcmljVmFsdWUnXVxufTtcbmV4cG9ydHMuaXNOdW1lcmljRG9jcyA9IGlzTnVtZXJpY0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmlzUG9zaXRpdmVEb2NzID0gdm9pZCAwO1xudmFyIGlzUG9zaXRpdmVEb2NzID0ge1xuICBuYW1lOiAnaXNQb3NpdGl2ZScsXG4gIGNhdGVnb3J5OiAnVXRpbHMnLFxuICBzeW50YXg6IFsnaXNQb3NpdGl2ZSh4KSddLFxuICBkZXNjcmlwdGlvbjogJ1Rlc3Qgd2hldGhlciBhIHZhbHVlIGlzIHBvc2l0aXZlOiBsYXJnZXIgdGhhbiB6ZXJvLicsXG4gIGV4YW1wbGVzOiBbJ2lzUG9zaXRpdmUoMiknLCAnaXNQb3NpdGl2ZSgwKScsICdpc1Bvc2l0aXZlKC00KScsICdpc1Bvc2l0aXZlKFszLCAwLjUsIC0yXSknXSxcbiAgc2VlYWxzbzogWydpc0ludGVnZXInLCAnaXNOdW1lcmljJywgJ2lzTmVnYXRpdmUnLCAnaXNaZXJvJ11cbn07XG5leHBvcnRzLmlzUG9zaXRpdmVEb2NzID0gaXNQb3NpdGl2ZURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmlzUHJpbWVEb2NzID0gdm9pZCAwO1xudmFyIGlzUHJpbWVEb2NzID0ge1xuICBuYW1lOiAnaXNQcmltZScsXG4gIGNhdGVnb3J5OiAnVXRpbHMnLFxuICBzeW50YXg6IFsnaXNQcmltZSh4KSddLFxuICBkZXNjcmlwdGlvbjogJ1Rlc3Qgd2hldGhlciBhIHZhbHVlIGlzIHByaW1lOiBoYXMgbm8gZGl2aXNvcnMgb3RoZXIgdGhhbiBpdHNlbGYgYW5kIG9uZS4nLFxuICBleGFtcGxlczogWydpc1ByaW1lKDMpJywgJ2lzUHJpbWUoLTIpJywgJ2lzUHJpbWUoWzIsIDE3LCAxMDBdKSddLFxuICBzZWVhbHNvOiBbJ2lzSW50ZWdlcicsICdpc051bWVyaWMnLCAnaXNOZWdhdGl2ZScsICdpc1plcm8nXVxufTtcbmV4cG9ydHMuaXNQcmltZURvY3MgPSBpc1ByaW1lRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaXNaZXJvRG9jcyA9IHZvaWQgMDtcbnZhciBpc1plcm9Eb2NzID0ge1xuICBuYW1lOiAnaXNaZXJvJyxcbiAgY2F0ZWdvcnk6ICdVdGlscycsXG4gIHN5bnRheDogWydpc1plcm8oeCknXSxcbiAgZGVzY3JpcHRpb246ICdUZXN0IHdoZXRoZXIgYSB2YWx1ZSBpcyB6ZXJvLicsXG4gIGV4YW1wbGVzOiBbJ2lzWmVybygyKScsICdpc1plcm8oMCknLCAnaXNaZXJvKC00KScsICdpc1plcm8oWzMsIDAsIC0yLCAwXSknXSxcbiAgc2VlYWxzbzogWydpc0ludGVnZXInLCAnaXNOdW1lcmljJywgJ2lzTmVnYXRpdmUnLCAnaXNQb3NpdGl2ZSddXG59O1xuZXhwb3J0cy5pc1plcm9Eb2NzID0gaXNaZXJvRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubnVtZXJpY0RvY3MgPSB2b2lkIDA7XG52YXIgbnVtZXJpY0RvY3MgPSB7XG4gIG5hbWU6ICdudW1lcmljJyxcbiAgY2F0ZWdvcnk6ICdVdGlscycsXG4gIHN5bnRheDogWydudW1lcmljKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29udmVydCBhIG51bWVyaWMgaW5wdXQgdG8gYSBzcGVjaWZpYyBudW1lcmljIHR5cGU6IG51bWJlciwgQmlnTnVtYmVyLCBvciBGcmFjdGlvbi4nLFxuICBleGFtcGxlczogWydudW1lcmljKFwiNFwiKScsICdudW1lcmljKFwiNFwiLCBcIm51bWJlclwiKScsICdudW1lcmljKFwiNFwiLCBcIkJpZ051bWJlclwiKScsICdudW1lcmljKFwiNFwiLCBcIkZyYWN0aW9uKScsICdudW1lcmljKDQsIFwiRnJhY3Rpb25cIiknLCAnbnVtZXJpYyhmcmFjdGlvbigyLCA1KSwgXCJudW1iZXIpJ10sXG4gIHNlZWFsc286IFsnbnVtYmVyJywgJ2ZyYWN0aW9uJywgJ2JpZ251bWJlcicsICdzdHJpbmcnLCAnZm9ybWF0J11cbn07XG5leHBvcnRzLm51bWVyaWNEb2NzID0gbnVtZXJpY0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnR5cGVPZkRvY3MgPSB2b2lkIDA7XG52YXIgdHlwZU9mRG9jcyA9IHtcbiAgbmFtZTogJ3R5cGVPZicsXG4gIGNhdGVnb3J5OiAnVXRpbHMnLFxuICBzeW50YXg6IFsndHlwZU9mKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnR2V0IHRoZSB0eXBlIG9mIGEgdmFyaWFibGUuJyxcbiAgZXhhbXBsZXM6IFsndHlwZU9mKDMuNSknLCAndHlwZU9mKDIgLSA0aSknLCAndHlwZU9mKDQ1IGRlZyknLCAndHlwZU9mKFwiaGVsbG8gd29ybGRcIiknXSxcbiAgc2VlYWxzbzogWydnZXRNYXRyaXhEYXRhVHlwZSddXG59O1xuZXhwb3J0cy50eXBlT2ZEb2NzID0gdHlwZU9mRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ29tcGlsZSA9IHZvaWQgMDtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdjb21waWxlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ3BhcnNlJ107XG52YXIgY3JlYXRlQ29tcGlsZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBwYXJzZSA9IF9yZWYucGFyc2U7XG5cbiAgLyoqXG4gICAqIFBhcnNlIGFuZCBjb21waWxlIGFuIGV4cHJlc3Npb24uXG4gICAqIFJldHVybnMgYSBhbiBvYmplY3Qgd2l0aCBhIGZ1bmN0aW9uIGBldmFsdWF0ZShbc2NvcGVdKWAgdG8gZXZhbHVhdGUgdGhlXG4gICAqIGNvbXBpbGVkIGV4cHJlc3Npb24uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguY29tcGlsZShleHByKSAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBvbmUgbm9kZVxuICAgKiAgICAgbWF0aC5jb21waWxlKFtleHByMSwgZXhwcjIsIGV4cHIzLCAuLi5dKSAvLyByZXR1cm5zIGFuIGFycmF5IHdpdGggbm9kZXNcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBjb25zdCBjb2RlMSA9IG1hdGguY29tcGlsZSgnc3FydCgzXjIgKyA0XjIpJylcbiAgICogICAgIGNvZGUxLmV2YWx1YXRlKCkgLy8gNVxuICAgKlxuICAgKiAgICAgbGV0IHNjb3BlID0ge2E6IDMsIGI6IDR9XG4gICAqICAgICBjb25zdCBjb2RlMiA9IG1hdGguY29tcGlsZSgnYSAqIGInKSAvLyAxMlxuICAgKiAgICAgY29kZTIuZXZhbHVhdGUoc2NvcGUpIC8vIDEyXG4gICAqICAgICBzY29wZS5hID0gNVxuICAgKiAgICAgY29kZTIuZXZhbHVhdGUoc2NvcGUpIC8vIDIwXG4gICAqXG4gICAqICAgICBjb25zdCBub2RlcyA9IG1hdGguY29tcGlsZShbJ2EgPSAzJywgJ2IgPSA0JywgJ2EgKiBiJ10pXG4gICAqICAgICBub2Rlc1syXS5ldmFsdWF0ZSgpIC8vIDEyXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBwYXJzZSwgZXZhbHVhdGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBzdHJpbmdbXSB8IEFycmF5IHwgTWF0cml4fSBleHByXG4gICAqICAgICAgICAgICAgVGhlIGV4cHJlc3Npb24gdG8gYmUgY29tcGlsZWRcbiAgICogQHJldHVybiB7e2V2YWx1YXRlOiBGdW5jdGlvbn0gfCBBcnJheS48e2V2YWx1YXRlOiBGdW5jdGlvbn0+fSBjb2RlXG4gICAqICAgICAgICAgICAgQW4gb2JqZWN0IHdpdGggdGhlIGNvbXBpbGVkIGV4cHJlc3Npb25cbiAgICogQHRocm93cyB7RXJyb3J9XG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIHN0cmluZzogZnVuY3Rpb24gc3RyaW5nKGV4cHIpIHtcbiAgICAgIHJldHVybiBwYXJzZShleHByKS5jb21waWxlKCk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeChleHByKSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKGV4cHIsIGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgICByZXR1cm4gcGFyc2UoZW50cnkpLmNvbXBpbGUoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlQ29tcGlsZSA9IGNyZWF0ZUNvbXBpbGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZURlcHJlY2F0ZWRFdmFsID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9sb2cgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbG9nXCIpO1xuXG4vLyBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDYuMC4wLiBEYXRlOiAyMDE4LTEyLTA1XG52YXIgY3JlYXRlRGVwcmVjYXRlZEV2YWwgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkoJ2V2YWwnLCBbJ2V2YWx1YXRlJ10sIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBldmFsdWF0ZSA9IF9yZWYuZXZhbHVhdGU7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgKDAsIF9sb2cud2Fybk9uY2UpKCdGdW5jdGlvbiBcImV2YWxcIiBoYXMgYmVlbiByZW5hbWVkIHRvIFwiZXZhbHVhdGVcIiBpbiB2Ni4wLjAsIHBsZWFzZSB1c2UgdGhlIG5ldyBmdW5jdGlvbiBpbnN0ZWFkLicpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiBldmFsdWF0ZS5hcHBseShldmFsdWF0ZSwgYXJncyk7XG4gIH07XG59KTtcbmV4cG9ydHMuY3JlYXRlRGVwcmVjYXRlZEV2YWwgPSBjcmVhdGVEZXByZWNhdGVkRXZhbDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRXZhbHVhdGUgPSB2b2lkIDA7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnZXZhbHVhdGUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAncGFyc2UnXTtcbnZhciBjcmVhdGVFdmFsdWF0ZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBwYXJzZSA9IF9yZWYucGFyc2U7XG5cbiAgLyoqXG4gICAqIEV2YWx1YXRlIGFuIGV4cHJlc3Npb24uXG4gICAqXG4gICAqIE5vdGUgdGhlIGV2YWx1YXRpbmcgYXJiaXRyYXJ5IGV4cHJlc3Npb25zIG1heSBpbnZvbHZlIHNlY3VyaXR5IHJpc2tzLFxuICAgKiBzZWUgW2h0dHBzOi8vbWF0aGpzLm9yZy9kb2NzL2V4cHJlc3Npb25zL3NlY3VyaXR5Lmh0bWxdKGh0dHBzOi8vbWF0aGpzLm9yZy9kb2NzL2V4cHJlc3Npb25zL3NlY3VyaXR5Lmh0bWwpIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLmV2YWx1YXRlKGV4cHIpXG4gICAqICAgICBtYXRoLmV2YWx1YXRlKGV4cHIsIHNjb3BlKVxuICAgKiAgICAgbWF0aC5ldmFsdWF0ZShbZXhwcjEsIGV4cHIyLCBleHByMywgLi4uXSlcbiAgICogICAgIG1hdGguZXZhbHVhdGUoW2V4cHIxLCBleHByMiwgZXhwcjMsIC4uLl0sIHNjb3BlKVxuICAgKlxuICAgKiBFeGFtcGxlOlxuICAgKlxuICAgKiAgICAgbWF0aC5ldmFsdWF0ZSgnKDIrMykvNCcpICAgICAgICAgICAgICAgIC8vIDEuMjVcbiAgICogICAgIG1hdGguZXZhbHVhdGUoJ3NxcnQoM14yICsgNF4yKScpICAgICAgICAvLyA1XG4gICAqICAgICBtYXRoLmV2YWx1YXRlKCdzcXJ0KC00KScpICAgICAgICAgICAgICAgLy8gMmlcbiAgICogICAgIG1hdGguZXZhbHVhdGUoWydhPTMnLCAnYj00JywgJ2EqYiddKSAgICAvLyBbMywgNCwgMTJdXG4gICAqXG4gICAqICAgICBsZXQgc2NvcGUgPSB7YTozLCBiOjR9XG4gICAqICAgICBtYXRoLmV2YWx1YXRlKCdhICogYicsIHNjb3BlKSAgICAgICAgICAgLy8gMTJcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIHBhcnNlLCBjb21waWxlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgc3RyaW5nW10gfCBNYXRyaXh9IGV4cHIgICBUaGUgZXhwcmVzc2lvbiB0byBiZSBldmFsdWF0ZWRcbiAgICogQHBhcmFtIHtPYmplY3R9IFtzY29wZV0gICAgICAgICAgICAgICAgICAgIFNjb3BlIHRvIHJlYWQvd3JpdGUgdmFyaWFibGVzXG4gICAqIEByZXR1cm4geyp9IFRoZSByZXN1bHQgb2YgdGhlIGV4cHJlc3Npb25cbiAgICogQHRocm93cyB7RXJyb3J9XG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIHN0cmluZzogZnVuY3Rpb24gc3RyaW5nKGV4cHIpIHtcbiAgICAgIHZhciBzY29wZSA9IHt9O1xuICAgICAgcmV0dXJuIHBhcnNlKGV4cHIpLmNvbXBpbGUoKS5ldmFsdWF0ZShzY29wZSk7XG4gICAgfSxcbiAgICAnc3RyaW5nLCBPYmplY3QnOiBmdW5jdGlvbiBzdHJpbmdPYmplY3QoZXhwciwgc2NvcGUpIHtcbiAgICAgIHJldHVybiBwYXJzZShleHByKS5jb21waWxlKCkuZXZhbHVhdGUoc2NvcGUpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoZXhwcikge1xuICAgICAgdmFyIHNjb3BlID0ge307XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKGV4cHIsIGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgICByZXR1cm4gcGFyc2UoZW50cnkpLmNvbXBpbGUoKS5ldmFsdWF0ZShzY29wZSk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCwgT2JqZWN0JzogZnVuY3Rpb24gQXJyYXlNYXRyaXhPYmplY3QoZXhwciwgc2NvcGUpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoZXhwciwgZnVuY3Rpb24gKGVudHJ5KSB7XG4gICAgICAgIHJldHVybiBwYXJzZShlbnRyeSkuY29tcGlsZSgpLmV2YWx1YXRlKHNjb3BlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlRXZhbHVhdGUgPSBjcmVhdGVFdmFsdWF0ZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlSGVscCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY3VzdG9tcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jdXN0b21zXCIpO1xuXG52YXIgX2VtYmVkZGVkRG9jcyA9IHJlcXVpcmUoXCIuLi9lbWJlZGRlZERvY3MvZW1iZWRkZWREb2NzXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBuYW1lID0gJ2hlbHAnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0aFdpdGhUcmFuc2Zvcm0nLCAnSGVscCddO1xudmFyIGNyZWF0ZUhlbHAgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0aFdpdGhUcmFuc2Zvcm0gPSBfcmVmLm1hdGhXaXRoVHJhbnNmb3JtLFxuICAgICAgSGVscCA9IF9yZWYuSGVscDtcblxuICAvKipcbiAgICogUmV0cmlldmUgaGVscCBvbiBhIGZ1bmN0aW9uIG9yIGRhdGEgdHlwZS5cbiAgICogSGVscCBmaWxlcyBhcmUgcmV0cmlldmVkIGZyb20gdGhlIGVtYmVkZGVkIGRvY3VtZW50YXRpb24gaW4gbWF0aC5kb2NzLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguaGVscChzZWFyY2gpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBjb25zb2xlLmxvZyhtYXRoLmhlbHAoJ3NpbicpLnRvU3RyaW5nKCkpXG4gICAqICAgIGNvbnNvbGUubG9nKG1hdGguaGVscChtYXRoLmFkZCkudG9TdHJpbmcoKSlcbiAgICogICAgY29uc29sZS5sb2cobWF0aC5oZWxwKG1hdGguYWRkKS50b0pTT04oKSlcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbiB8IHN0cmluZyB8IE9iamVjdH0gc2VhcmNoICAgQSBmdW5jdGlvbiBvciBmdW5jdGlvbiBuYW1lXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB3aGljaCB0byBnZXQgaGVscFxuICAgKiBAcmV0dXJuIHtIZWxwfSBBIGhlbHAgb2JqZWN0XG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIGFueTogZnVuY3Rpb24gYW55KHNlYXJjaCkge1xuICAgICAgdmFyIHByb3A7XG4gICAgICB2YXIgc2VhcmNoTmFtZSA9IHNlYXJjaDtcblxuICAgICAgaWYgKHR5cGVvZiBzZWFyY2ggIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGZvciAocHJvcCBpbiBtYXRoV2l0aFRyYW5zZm9ybSkge1xuICAgICAgICAgIC8vIHNlYXJjaCBpbiBmdW5jdGlvbnMgYW5kIGNvbnN0YW50c1xuICAgICAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkobWF0aFdpdGhUcmFuc2Zvcm0sIHByb3ApICYmIHNlYXJjaCA9PT0gbWF0aFdpdGhUcmFuc2Zvcm1bcHJvcF0pIHtcbiAgICAgICAgICAgIHNlYXJjaE5hbWUgPSBwcm9wO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8qIFRPRE86IGltcGxlbWVudCBoZWxwIGZvciBkYXRhIHR5cGVzXG4gICAgICAgICBpZiAoIXRleHQpIHtcbiAgICAgICAgIC8vIHNlYXJjaCBkYXRhIHR5cGVcbiAgICAgICAgIGZvciAocHJvcCBpbiBtYXRoLnR5cGUpIHtcbiAgICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eShtYXRoLCBwcm9wKSkge1xuICAgICAgICAgaWYgKHNlYXJjaCA9PT0gbWF0aC50eXBlW3Byb3BdKSB7XG4gICAgICAgICB0ZXh0ID0gcHJvcFxuICAgICAgICAgYnJlYWtcbiAgICAgICAgIH1cbiAgICAgICAgIH1cbiAgICAgICAgIH1cbiAgICAgICAgIH1cbiAgICAgICAgICovXG5cbiAgICAgIH1cblxuICAgICAgdmFyIGRvYyA9ICgwLCBfY3VzdG9tcy5nZXRTYWZlUHJvcGVydHkpKF9lbWJlZGRlZERvY3MuZW1iZWRkZWREb2NzLCBzZWFyY2hOYW1lKTtcblxuICAgICAgaWYgKCFkb2MpIHtcbiAgICAgICAgdmFyIHNlYXJjaFRleHQgPSB0eXBlb2Ygc2VhcmNoTmFtZSA9PT0gJ2Z1bmN0aW9uJyA/IHNlYXJjaE5hbWUubmFtZSA6IHNlYXJjaE5hbWU7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gZG9jdW1lbnRhdGlvbiBmb3VuZCBvbiBcIicgKyBzZWFyY2hUZXh0ICsgJ1wiJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgSGVscChkb2MpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlSGVscCA9IGNyZWF0ZUhlbHA7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVBhcnNlciA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3BhcnNlcic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdQYXJzZXInXTtcbnZhciBjcmVhdGVQYXJzZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgUGFyc2VyID0gX3JlZi5QYXJzZXI7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHBhcnNlci4gVGhlIGZ1bmN0aW9uIGNyZWF0ZXMgYSBuZXcgYG1hdGguUGFyc2VyYCBvYmplY3QuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5wYXJzZXIoKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIGNvbnN0IHBhcnNlciA9IG5ldyBtYXRoLnBhcnNlcigpXG4gICAqXG4gICAqICAgICAvLyBldmFsdWF0ZSBleHByZXNzaW9uc1xuICAgKiAgICAgY29uc3QgYSA9IHBhcnNlci5ldmFsdWF0ZSgnc3FydCgzXjIgKyA0XjIpJykgLy8gNVxuICAgKiAgICAgY29uc3QgYiA9IHBhcnNlci5ldmFsdWF0ZSgnc3FydCgtNCknKSAgICAgICAgLy8gMmlcbiAgICogICAgIGNvbnN0IGMgPSBwYXJzZXIuZXZhbHVhdGUoJzIgaW5jaCBpbiBjbScpICAgIC8vIDUuMDggY21cbiAgICogICAgIGNvbnN0IGQgPSBwYXJzZXIuZXZhbHVhdGUoJ2Nvcyg0NSBkZWcpJykgICAgIC8vIDAuNzA3MTA2NzgxMTg2NTQ3NlxuICAgKlxuICAgKiAgICAgLy8gZGVmaW5lIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zXG4gICAqICAgICBwYXJzZXIuZXZhbHVhdGUoJ3ggPSA3IC8gMicpICAgICAgICAgICAgICAgICAvLyAzLjVcbiAgICogICAgIHBhcnNlci5ldmFsdWF0ZSgneCArIDMnKSAgICAgICAgICAgICAgICAgICAgIC8vIDYuNVxuICAgKiAgICAgcGFyc2VyLmV2YWx1YXRlKCdmdW5jdGlvbiBmKHgsIHkpID0geF55JykgICAgLy8gZih4LCB5KVxuICAgKiAgICAgcGFyc2VyLmV2YWx1YXRlKCdmKDIsIDMpJykgICAgICAgICAgICAgICAgICAgLy8gOFxuICAgKlxuICAgKiAgICAgLy8gZ2V0IGFuZCBzZXQgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnNcbiAgICogICAgIGNvbnN0IHggPSBwYXJzZXIuZ2V0KCd4JykgICAgICAgICAgICAgICAgLy8gN1xuICAgKiAgICAgY29uc3QgZiA9IHBhcnNlci5nZXQoJ2YnKSAgICAgICAgICAgICAgICAvLyBmdW5jdGlvblxuICAgKiAgICAgY29uc3QgZyA9IGYoMywgMikgICAgICAgICAgICAgICAgICAgICAgICAvLyA5XG4gICAqICAgICBwYXJzZXIuc2V0KCdoJywgNTAwKVxuICAgKiAgICAgY29uc3QgaSA9IHBhcnNlci5ldmFsdWF0ZSgnaCAvIDInKSAgICAgICAvLyAyNTBcbiAgICogICAgIHBhcnNlci5zZXQoJ2hlbGxvJywgZnVuY3Rpb24gKG5hbWUpIHtcbiAgICogICAgICAgcmV0dXJuICdoZWxsbywgJyArIG5hbWUgKyAnISdcbiAgICogICAgIH0pXG4gICAqICAgICBwYXJzZXIuZXZhbHVhdGUoJ2hlbGxvKFwidXNlclwiKScpICAgICAgICAgLy8gXCJoZWxsbywgdXNlciFcIlxuICAgKlxuICAgKiAgICAgLy8gY2xlYXIgZGVmaW5lZCBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlc1xuICAgKiAgICAgcGFyc2VyLmNsZWFyKClcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGV2YWx1YXRlLCBjb21waWxlLCBwYXJzZVxuICAgKlxuICAgKiBAcmV0dXJuIHtQYXJzZXJ9IFBhcnNlclxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnJzogZnVuY3Rpb24gXygpIHtcbiAgICAgIHJldHVybiBuZXcgUGFyc2VyKCk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVQYXJzZXIgPSBjcmVhdGVQYXJzZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmtleXdvcmRzID0gdm9pZCAwO1xuLy8gUmVzZXJ2ZWQga2V5d29yZHMgbm90IGFsbG93ZWQgdG8gdXNlIGluIHRoZSBwYXJzZXJcbnZhciBrZXl3b3JkcyA9IHtcbiAgZW5kOiB0cnVlXG59O1xuZXhwb3J0cy5rZXl3b3JkcyA9IGtleXdvcmRzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBY2Nlc3Nvck5vZGUgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfY3VzdG9tcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jdXN0b21zXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9hY2Nlc3MgPSByZXF1aXJlKFwiLi91dGlscy9hY2Nlc3NcIik7XG5cbnZhciBuYW1lID0gJ0FjY2Vzc29yTm9kZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydzdWJzZXQnLCAnTm9kZSddO1xudmFyIGNyZWF0ZUFjY2Vzc29yTm9kZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBzdWJzZXQgPSBfcmVmLnN1YnNldCxcbiAgICAgIE5vZGUgPSBfcmVmLk5vZGU7XG4gIHZhciBhY2Nlc3MgPSAoMCwgX2FjY2Vzcy5hY2Nlc3NGYWN0b3J5KSh7XG4gICAgc3Vic2V0OiBzdWJzZXRcbiAgfSk7XG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3IgQWNjZXNzb3JOb2RlXG4gICAqIEBleHRlbmRzIHtOb2RlfVxuICAgKiBBY2Nlc3MgYW4gb2JqZWN0IHByb3BlcnR5IG9yIGdldCBhIG1hdHJpeCBzdWJzZXRcbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBvYmplY3QgICAgICAgICAgICAgICAgIFRoZSBvYmplY3QgZnJvbSB3aGljaCB0byByZXRyaWV2ZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBwcm9wZXJ0eSBvciBzdWJzZXQuXG4gICAqIEBwYXJhbSB7SW5kZXhOb2RlfSBpbmRleCAgICAgICAgICAgICBJbmRleE5vZGUgY29udGFpbmluZyByYW5nZXNcbiAgICovXG5cbiAgZnVuY3Rpb24gQWNjZXNzb3JOb2RlKG9iamVjdCwgaW5kZXgpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQWNjZXNzb3JOb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG5cbiAgICBpZiAoISgwLCBfaXMuaXNOb2RlKShvYmplY3QpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdOb2RlIGV4cGVjdGVkIGZvciBwYXJhbWV0ZXIgXCJvYmplY3RcIicpO1xuICAgIH1cblxuICAgIGlmICghKDAsIF9pcy5pc0luZGV4Tm9kZSkoaW5kZXgpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbmRleE5vZGUgZXhwZWN0ZWQgZm9yIHBhcmFtZXRlciBcImluZGV4XCInKTtcbiAgICB9XG5cbiAgICB0aGlzLm9iamVjdCA9IG9iamVjdCB8fCBudWxsO1xuICAgIHRoaXMuaW5kZXggPSBpbmRleDsgLy8gcmVhZG9ubHkgcHJvcGVydHkgbmFtZVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICduYW1lJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmluZGV4KSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXguaXNPYmplY3RQcm9wZXJ0eSgpID8gdGhpcy5pbmRleC5nZXRPYmplY3RQcm9wZXJ0eSgpIDogJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMub2JqZWN0Lm5hbWUgfHwgJyc7XG4gICAgICAgIH1cbiAgICAgIH0uYmluZCh0aGlzKSxcbiAgICAgIHNldDogZnVuY3Rpb24gc2V0KCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBhc3NpZ24gYSBuZXcgbmFtZSwgbmFtZSBpcyByZWFkLW9ubHknKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIEFjY2Vzc29yTm9kZS5wcm90b3R5cGUgPSBuZXcgTm9kZSgpO1xuICBBY2Nlc3Nvck5vZGUucHJvdG90eXBlLnR5cGUgPSAnQWNjZXNzb3JOb2RlJztcbiAgQWNjZXNzb3JOb2RlLnByb3RvdHlwZS5pc0FjY2Vzc29yTm9kZSA9IHRydWU7XG4gIC8qKlxuICAgKiBDb21waWxlIGEgbm9kZSBpbnRvIGEgSmF2YVNjcmlwdCBmdW5jdGlvbi5cbiAgICogVGhpcyBiYXNpY2FsbHkgcHJlLWNhbGN1bGF0ZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSBhbmQgb25seSBsZWF2ZXMgb3BlblxuICAgKiBjYWxjdWxhdGlvbnMgd2hpY2ggZGVwZW5kIG9uIGEgZHluYW1pYyBzY29wZSB3aXRoIHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG1hdGggICAgIE1hdGguanMgbmFtZXNwYWNlIHdpdGggZnVuY3Rpb25zIGFuZCBjb25zdGFudHMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdOYW1lcyBBbiBvYmplY3Qgd2l0aCBhcmd1bWVudCBuYW1lcyBhcyBrZXkgYW5kIGB0cnVlYFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdmFsdWUuIFVzZWQgaW4gdGhlIFN5bWJvbE5vZGUgdG8gb3B0aW1pemVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudHMgZnJvbSB1c2VyIGFzc2lnbmVkIGZ1bmN0aW9uc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZSBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKSBvciBzcGVjaWFsIHN5bWJvbHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UgYGVuZGAgKHNlZSBJbmRleE5vZGUpLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgbGlrZTpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICBldmFsTm9kZShzY29wZTogT2JqZWN0LCBhcmdzOiBPYmplY3QsIGNvbnRleHQ6ICopXG4gICAqL1xuXG4gIEFjY2Vzc29yTm9kZS5wcm90b3R5cGUuX2NvbXBpbGUgPSBmdW5jdGlvbiAobWF0aCwgYXJnTmFtZXMpIHtcbiAgICB2YXIgZXZhbE9iamVjdCA9IHRoaXMub2JqZWN0Ll9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTtcblxuICAgIHZhciBldmFsSW5kZXggPSB0aGlzLmluZGV4Ll9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTtcblxuICAgIGlmICh0aGlzLmluZGV4LmlzT2JqZWN0UHJvcGVydHkoKSkge1xuICAgICAgdmFyIHByb3AgPSB0aGlzLmluZGV4LmdldE9iamVjdFByb3BlcnR5KCk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gZXZhbEFjY2Vzc29yTm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIF9jdXN0b21zLmdldFNhZmVQcm9wZXJ0eSkoZXZhbE9iamVjdChzY29wZSwgYXJncywgY29udGV4dCksIHByb3ApO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxBY2Nlc3Nvck5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgdmFyIG9iamVjdCA9IGV2YWxPYmplY3Qoc2NvcGUsIGFyZ3MsIGNvbnRleHQpO1xuICAgICAgICB2YXIgaW5kZXggPSBldmFsSW5kZXgoc2NvcGUsIGFyZ3MsIG9iamVjdCk7IC8vIHdlIHBhc3Mgb2JqZWN0IGhlcmUgaW5zdGVhZCBvZiBjb250ZXh0XG5cbiAgICAgICAgcmV0dXJuIGFjY2VzcyhvYmplY3QsIGluZGV4KTtcbiAgICAgIH07XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBlYWNoIG9mIHRoZSBjaGlsZCBub2RlcyBvZiB0aGlzIG5vZGVcbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpfSBjYWxsYmFja1xuICAgKi9cblxuXG4gIEFjY2Vzc29yTm9kZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIGNhbGxiYWNrKHRoaXMub2JqZWN0LCAnb2JqZWN0JywgdGhpcyk7XG4gICAgY2FsbGJhY2sodGhpcy5pbmRleCwgJ2luZGV4JywgdGhpcyk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgQWNjZXNzb3JOb2RlIGhhdmluZyBpdCdzIGNoaWxkcyBiZSB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nXG4gICAqIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCBvZiB0aGUgY2hpbGRzIG9mIHRoZSBvcmlnaW5hbCBub2RlLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSk6IE5vZGV9IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHtBY2Nlc3Nvck5vZGV9IFJldHVybnMgYSB0cmFuc2Zvcm1lZCBjb3B5IG9mIHRoZSBub2RlXG4gICAqL1xuXG5cbiAgQWNjZXNzb3JOb2RlLnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICByZXR1cm4gbmV3IEFjY2Vzc29yTm9kZSh0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy5vYmplY3QsICdvYmplY3QnLCB0aGlzKSksIHRoaXMuX2lmTm9kZShjYWxsYmFjayh0aGlzLmluZGV4LCAnaW5kZXgnLCB0aGlzKSkpO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgY2xvbmUgb2YgdGhpcyBub2RlLCBhIHNoYWxsb3cgY29weVxuICAgKiBAcmV0dXJuIHtBY2Nlc3Nvck5vZGV9XG4gICAqL1xuXG5cbiAgQWNjZXNzb3JOb2RlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IEFjY2Vzc29yTm9kZSh0aGlzLm9iamVjdCwgdGhpcy5pbmRleCk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBBY2Nlc3Nvck5vZGUucHJvdG90eXBlLl90b1N0cmluZyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIG9iamVjdCA9IHRoaXMub2JqZWN0LnRvU3RyaW5nKG9wdGlvbnMpO1xuXG4gICAgaWYgKG5lZWRQYXJlbnRoZXNpcyh0aGlzLm9iamVjdCkpIHtcbiAgICAgIG9iamVjdCA9ICcoJyArIG9iamVjdCArICcpJztcbiAgICB9XG5cbiAgICByZXR1cm4gb2JqZWN0ICsgdGhpcy5pbmRleC50b1N0cmluZyhvcHRpb25zKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBIVE1MIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBBY2Nlc3Nvck5vZGUucHJvdG90eXBlLnRvSFRNTCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIG9iamVjdCA9IHRoaXMub2JqZWN0LnRvSFRNTChvcHRpb25zKTtcblxuICAgIGlmIChuZWVkUGFyZW50aGVzaXModGhpcy5vYmplY3QpKSB7XG4gICAgICBvYmplY3QgPSAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4oPC9zcGFuPicgKyBvYmplY3QgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4pPC9zcGFuPic7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iamVjdCArIHRoaXMuaW5kZXgudG9IVE1MKG9wdGlvbnMpO1xuICB9O1xuICAvKipcbiAgICogR2V0IExhVGVYIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBBY2Nlc3Nvck5vZGUucHJvdG90eXBlLl90b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIG9iamVjdCA9IHRoaXMub2JqZWN0LnRvVGV4KG9wdGlvbnMpO1xuXG4gICAgaWYgKG5lZWRQYXJlbnRoZXNpcyh0aGlzLm9iamVjdCkpIHtcbiAgICAgIG9iamVjdCA9ICdcXFxcbGVmdChcXCcgKyBvYmplY3QgKyBcXCdcXFxccmlnaHQpJztcbiAgICB9XG5cbiAgICByZXR1cm4gb2JqZWN0ICsgdGhpcy5pbmRleC50b1RleChvcHRpb25zKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGVcbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG5cblxuICBBY2Nlc3Nvck5vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnQWNjZXNzb3JOb2RlJyxcbiAgICAgIG9iamVjdDogdGhpcy5vYmplY3QsXG4gICAgICBpbmRleDogdGhpcy5pbmRleFxuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhbiBBY2Nlc3Nvck5vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIkFjY2Vzc29yTm9kZVwiLCBvYmplY3Q6IC4uLiwgaW5kZXg6IC4uLn1gLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgbWF0aGpzIGlzIG9wdGlvbmFsXG4gICAqIEByZXR1cm5zIHtBY2Nlc3Nvck5vZGV9XG4gICAqL1xuXG5cbiAgQWNjZXNzb3JOb2RlLmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICByZXR1cm4gbmV3IEFjY2Vzc29yTm9kZShqc29uLm9iamVjdCwganNvbi5pbmRleCk7XG4gIH07XG4gIC8qKlxuICAgKiBBcmUgcGFyZW50aGVzaXMgbmVlZGVkP1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIG5lZWRQYXJlbnRoZXNpcyhub2RlKSB7XG4gICAgLy8gVE9ETzogbWF5YmUgbWFrZSBhIG1ldGhvZCBvbiB0aGUgbm9kZXMgd2hpY2ggdGVsbHMgd2hldGhlciB0aGV5IG5lZWQgcGFyZW50aGVzaXM/XG4gICAgcmV0dXJuICEoKDAsIF9pcy5pc0FjY2Vzc29yTm9kZSkobm9kZSkgfHwgKDAsIF9pcy5pc0FycmF5Tm9kZSkobm9kZSkgfHwgKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkobm9kZSkgfHwgKDAsIF9pcy5pc0Z1bmN0aW9uTm9kZSkobm9kZSkgfHwgKDAsIF9pcy5pc09iamVjdE5vZGUpKG5vZGUpIHx8ICgwLCBfaXMuaXNQYXJlbnRoZXNpc05vZGUpKG5vZGUpIHx8ICgwLCBfaXMuaXNTeW1ib2xOb2RlKShub2RlKSk7XG4gIH1cblxuICByZXR1cm4gQWNjZXNzb3JOb2RlO1xufSwge1xuICBpc0NsYXNzOiB0cnVlLFxuICBpc05vZGU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBY2Nlc3Nvck5vZGUgPSBjcmVhdGVBY2Nlc3Nvck5vZGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFycmF5Tm9kZSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ0FycmF5Tm9kZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydOb2RlJ107XG52YXIgY3JlYXRlQXJyYXlOb2RlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIE5vZGUgPSBfcmVmLk5vZGU7XG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvciBBcnJheU5vZGVcbiAgICogQGV4dGVuZHMge05vZGV9XG4gICAqIEhvbGRzIGFuIDEtZGltZW5zaW9uYWwgYXJyYXkgd2l0aCBpdGVtc1xuICAgKiBAcGFyYW0ge05vZGVbXX0gW2l0ZW1zXSAgIDEgZGltZW5zaW9uYWwgYXJyYXkgd2l0aCBpdGVtc1xuICAgKi9cbiAgZnVuY3Rpb24gQXJyYXlOb2RlKGl0ZW1zKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEFycmF5Tm9kZSkpIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7XG4gICAgfVxuXG4gICAgdGhpcy5pdGVtcyA9IGl0ZW1zIHx8IFtdOyAvLyB2YWxpZGF0ZSBpbnB1dFxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMuaXRlbXMpIHx8ICF0aGlzLml0ZW1zLmV2ZXJ5KF9pcy5pc05vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSBjb250YWluaW5nIE5vZGVzIGV4cGVjdGVkJyk7XG4gICAgfSAvLyBUT0RPOiBkZXByZWNhdGVkIHNpbmNlIHYzLCByZW1vdmUgc29tZSBkYXlcblxuXG4gICAgdmFyIGRlcHJlY2F0ZWQgPSBmdW5jdGlvbiBkZXByZWNhdGVkKCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm9wZXJ0eSBgQXJyYXlOb2RlLm5vZGVzYCBpcyBkZXByZWNhdGVkLCB1c2UgYEFycmF5Tm9kZS5pdGVtc2AgaW5zdGVhZCcpO1xuICAgIH07XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ25vZGVzJywge1xuICAgICAgZ2V0OiBkZXByZWNhdGVkLFxuICAgICAgc2V0OiBkZXByZWNhdGVkXG4gICAgfSk7XG4gIH1cblxuICBBcnJheU5vZGUucHJvdG90eXBlID0gbmV3IE5vZGUoKTtcbiAgQXJyYXlOb2RlLnByb3RvdHlwZS50eXBlID0gJ0FycmF5Tm9kZSc7XG4gIEFycmF5Tm9kZS5wcm90b3R5cGUuaXNBcnJheU5vZGUgPSB0cnVlO1xuICAvKipcbiAgICogQ29tcGlsZSBhIG5vZGUgaW50byBhIEphdmFTY3JpcHQgZnVuY3Rpb24uXG4gICAqIFRoaXMgYmFzaWNhbGx5IHByZS1jYWxjdWxhdGVzIGFzIG11Y2ggYXMgcG9zc2libGUgYW5kIG9ubHkgbGVhdmVzIG9wZW5cbiAgICogY2FsY3VsYXRpb25zIHdoaWNoIGRlcGVuZCBvbiBhIGR5bmFtaWMgc2NvcGUgd2l0aCB2YXJpYWJsZXMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBtYXRoICAgICBNYXRoLmpzIG5hbWVzcGFjZSB3aXRoIGZ1bmN0aW9ucyBhbmQgY29uc3RhbnRzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gYXJnTmFtZXMgQW4gb2JqZWN0IHdpdGggYXJndW1lbnQgbmFtZXMgYXMga2V5IGFuZCBgdHJ1ZWBcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHZhbHVlLiBVc2VkIGluIHRoZSBTeW1ib2xOb2RlIHRvIG9wdGltaXplXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJndW1lbnRzIGZyb20gdXNlciBhc3NpZ25lZCBmdW5jdGlvbnNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIChzZWUgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSkgb3Igc3BlY2lhbCBzeW1ib2xzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlIGBlbmRgIChzZWUgSW5kZXhOb2RlKS5cbiAgICogQHJldHVybiB7ZnVuY3Rpb259IFJldHVybnMgYSBmdW5jdGlvbiB3aGljaCBjYW4gYmUgY2FsbGVkIGxpa2U6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgZXZhbE5vZGUoc2NvcGU6IE9iamVjdCwgYXJnczogT2JqZWN0LCBjb250ZXh0OiAqKVxuICAgKi9cblxuICBBcnJheU5vZGUucHJvdG90eXBlLl9jb21waWxlID0gZnVuY3Rpb24gKG1hdGgsIGFyZ05hbWVzKSB7XG4gICAgdmFyIGV2YWxJdGVtcyA9ICgwLCBfYXJyYXkubWFwKSh0aGlzLml0ZW1zLCBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuIGl0ZW0uX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpO1xuICAgIH0pO1xuICAgIHZhciBhc01hdHJpeCA9IG1hdGguY29uZmlnLm1hdHJpeCAhPT0gJ0FycmF5JztcblxuICAgIGlmIChhc01hdHJpeCkge1xuICAgICAgdmFyIG1hdHJpeCA9IG1hdGgubWF0cml4O1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxBcnJheU5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIG1hdHJpeCgoMCwgX2FycmF5Lm1hcCkoZXZhbEl0ZW1zLCBmdW5jdGlvbiAoZXZhbEl0ZW0pIHtcbiAgICAgICAgICByZXR1cm4gZXZhbEl0ZW0oc2NvcGUsIGFyZ3MsIGNvbnRleHQpO1xuICAgICAgICB9KSk7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gZXZhbEFycmF5Tm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIF9hcnJheS5tYXApKGV2YWxJdGVtcywgZnVuY3Rpb24gKGV2YWxJdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIGV2YWxJdGVtKHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZWFjaCBvZiB0aGUgY2hpbGQgbm9kZXMgb2YgdGhpcyBub2RlXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKX0gY2FsbGJhY2tcbiAgICovXG5cblxuICBBcnJheU5vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBub2RlID0gdGhpcy5pdGVtc1tpXTtcbiAgICAgIGNhbGxiYWNrKG5vZGUsICdpdGVtc1snICsgaSArICddJywgdGhpcyk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IEFycmF5Tm9kZSBoYXZpbmcgaXQncyBjaGlsZHMgYmUgdGhlIHJlc3VsdHMgb2YgY2FsbGluZ1xuICAgKiB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggb2YgdGhlIGNoaWxkcyBvZiB0aGUgb3JpZ2luYWwgbm9kZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpOiBOb2RlfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7QXJyYXlOb2RlfSBSZXR1cm5zIGEgdHJhbnNmb3JtZWQgY29weSBvZiB0aGUgbm9kZVxuICAgKi9cblxuXG4gIEFycmF5Tm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgdmFyIGl0ZW1zID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGl0ZW1zW2ldID0gdGhpcy5faWZOb2RlKGNhbGxiYWNrKHRoaXMuaXRlbXNbaV0sICdpdGVtc1snICsgaSArICddJywgdGhpcykpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgQXJyYXlOb2RlKGl0ZW1zKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoaXMgbm9kZSwgYSBzaGFsbG93IGNvcHlcbiAgICogQHJldHVybiB7QXJyYXlOb2RlfVxuICAgKi9cblxuXG4gIEFycmF5Tm9kZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBBcnJheU5vZGUodGhpcy5pdGVtcy5zbGljZSgwKSk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqIEBvdmVycmlkZVxuICAgKi9cblxuXG4gIEFycmF5Tm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgaXRlbXMgPSB0aGlzLml0ZW1zLm1hcChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgcmV0dXJuIG5vZGUudG9TdHJpbmcob3B0aW9ucyk7XG4gICAgfSk7XG4gICAgcmV0dXJuICdbJyArIGl0ZW1zLmpvaW4oJywgJykgKyAnXSc7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBub2RlXG4gICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAqL1xuXG5cbiAgQXJyYXlOb2RlLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hdGhqczogJ0FycmF5Tm9kZScsXG4gICAgICBpdGVtczogdGhpcy5pdGVtc1xuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhbiBBcnJheU5vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIkFycmF5Tm9kZVwiLCBpdGVtczogWy4uLl19YCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG1hdGhqcyBpcyBvcHRpb25hbFxuICAgKiBAcmV0dXJucyB7QXJyYXlOb2RlfVxuICAgKi9cblxuXG4gIEFycmF5Tm9kZS5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgcmV0dXJuIG5ldyBBcnJheU5vZGUoanNvbi5pdGVtcyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgSFRNTCByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKiBAb3ZlcnJpZGVcbiAgICovXG5cblxuICBBcnJheU5vZGUucHJvdG90eXBlLnRvSFRNTCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIGl0ZW1zID0gdGhpcy5pdGVtcy5tYXAoZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIHJldHVybiBub2RlLnRvSFRNTChvcHRpb25zKTtcbiAgICB9KTtcbiAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXNxdWFyZS1wYXJlbnRoZXNpc1wiPls8L3NwYW4+JyArIGl0ZW1zLmpvaW4oJzxzcGFuIGNsYXNzPVwibWF0aC1zZXBhcmF0b3JcIj4sPC9zcGFuPicpICsgJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXNxdWFyZS1wYXJlbnRoZXNpc1wiPl08L3NwYW4+JztcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBMYVRlWCByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIEFycmF5Tm9kZS5wcm90b3R5cGUuX3RvVGV4ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgcyA9ICdcXFxcYmVnaW57Ym1hdHJpeH0nO1xuICAgIHRoaXMuaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgaWYgKG5vZGUuaXRlbXMpIHtcbiAgICAgICAgcyArPSBub2RlLml0ZW1zLm1hcChmdW5jdGlvbiAoY2hpbGROb2RlKSB7XG4gICAgICAgICAgcmV0dXJuIGNoaWxkTm9kZS50b1RleChvcHRpb25zKTtcbiAgICAgICAgfSkuam9pbignJicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcyArPSBub2RlLnRvVGV4KG9wdGlvbnMpO1xuICAgICAgfSAvLyBuZXcgbGluZVxuXG5cbiAgICAgIHMgKz0gJ1xcXFxcXFxcJztcbiAgICB9KTtcbiAgICBzICs9ICdcXFxcZW5ke2JtYXRyaXh9JztcbiAgICByZXR1cm4gcztcbiAgfTtcblxuICByZXR1cm4gQXJyYXlOb2RlO1xufSwge1xuICBpc0NsYXNzOiB0cnVlLFxuICBpc05vZGU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBcnJheU5vZGUgPSBjcmVhdGVBcnJheU5vZGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFzc2lnbm1lbnROb2RlID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2N1c3RvbXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY3VzdG9tc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYWNjZXNzID0gcmVxdWlyZShcIi4vdXRpbHMvYWNjZXNzXCIpO1xuXG52YXIgX2Fzc2lnbiA9IHJlcXVpcmUoXCIuL3V0aWxzL2Fzc2lnblwiKTtcblxudmFyIF9vcGVyYXRvcnMgPSByZXF1aXJlKFwiLi4vb3BlcmF0b3JzXCIpO1xuXG52YXIgbmFtZSA9ICdBc3NpZ25tZW50Tm9kZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydzdWJzZXQnLCAnP21hdHJpeCcsIC8vIEZJWE1FOiBzaG91bGQgbm90IGJlIG5lZWRlZCBhdCBhbGwsIHNob3VsZCBiZSBoYW5kbGVkIGJ5IHN1YnNldFxuJ05vZGUnXTtcbnZhciBjcmVhdGVBc3NpZ25tZW50Tm9kZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBzdWJzZXQgPSBfcmVmLnN1YnNldCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgTm9kZSA9IF9yZWYuTm9kZTtcbiAgdmFyIGFjY2VzcyA9ICgwLCBfYWNjZXNzLmFjY2Vzc0ZhY3RvcnkpKHtcbiAgICBzdWJzZXQ6IHN1YnNldFxuICB9KTtcbiAgdmFyIGFzc2lnbiA9ICgwLCBfYXNzaWduLmFzc2lnbkZhY3RvcnkpKHtcbiAgICBzdWJzZXQ6IHN1YnNldCxcbiAgICBtYXRyaXg6IG1hdHJpeFxuICB9KTtcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvciBBc3NpZ25tZW50Tm9kZVxuICAgKiBAZXh0ZW5kcyB7Tm9kZX1cbiAgICpcbiAgICogRGVmaW5lIGEgc3ltYm9sLCBsaWtlIGBhPTMuMmAsIHVwZGF0ZSBhIHByb3BlcnR5IGxpa2UgYGEuYj0zLjJgLCBvclxuICAgKiByZXBsYWNlIGEgc3Vic2V0IG9mIGEgbWF0cml4IGxpa2UgYEFbMiwyXT00MmAuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG5ldyBBc3NpZ25tZW50Tm9kZShzeW1ib2wsIHZhbHVlKVxuICAgKiAgICAgbmV3IEFzc2lnbm1lbnROb2RlKG9iamVjdCwgaW5kZXgsIHZhbHVlKVxuICAgKlxuICAgKiBVc2FnZTpcbiAgICpcbiAgICogICAgbmV3IEFzc2lnbm1lbnROb2RlKG5ldyBTeW1ib2xOb2RlKCdhJyksIG5ldyBDb25zdGFudE5vZGUoMikpICAgICAgICAgICAgICAgICAgICAgICAvLyBhPTJcbiAgICogICAgbmV3IEFzc2lnbm1lbnROb2RlKG5ldyBTeW1ib2xOb2RlKCdhJyksIG5ldyBJbmRleE5vZGUoJ2InKSwgbmV3IENvbnN0YW50Tm9kZSgyKSkgICAvLyBhLmI9MlxuICAgKiAgICBuZXcgQXNzaWdubWVudE5vZGUobmV3IFN5bWJvbE5vZGUoJ2EnKSwgbmV3IEluZGV4Tm9kZSgxLCAyKSwgbmV3IENvbnN0YW50Tm9kZSgzKSkgIC8vIGFbMSwyXT0zXG4gICAqXG4gICAqIEBwYXJhbSB7U3ltYm9sTm9kZSB8IEFjY2Vzc29yTm9kZX0gb2JqZWN0ICBPYmplY3Qgb24gd2hpY2ggdG8gYXNzaWduIGEgdmFsdWVcbiAgICogQHBhcmFtIHtJbmRleE5vZGV9IFtpbmRleD1udWxsXSAgICAgICAgICAgIEluZGV4LCBwcm9wZXJ0eSBuYW1lIG9yIG1hdHJpeFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXguIE9wdGlvbmFsLiBJZiBub3QgcHJvdmlkZWRcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBgb2JqZWN0YCBpcyBhIFN5bWJvbE5vZGUsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcHJvcGVydHkgaXMgYXNzaWduZWQgdG8gdGhlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWwgc2NvcGUuXG4gICAqIEBwYXJhbSB7Tm9kZX0gdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgdG8gYmUgYXNzaWduZWRcbiAgICovXG5cbiAgZnVuY3Rpb24gQXNzaWdubWVudE5vZGUob2JqZWN0LCBpbmRleCwgdmFsdWUpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQXNzaWdubWVudE5vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH1cblxuICAgIHRoaXMub2JqZWN0ID0gb2JqZWN0O1xuICAgIHRoaXMuaW5kZXggPSB2YWx1ZSA/IGluZGV4IDogbnVsbDtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWUgfHwgaW5kZXg7IC8vIHZhbGlkYXRlIGlucHV0XG5cbiAgICBpZiAoISgwLCBfaXMuaXNTeW1ib2xOb2RlKShvYmplY3QpICYmICEoMCwgX2lzLmlzQWNjZXNzb3JOb2RlKShvYmplY3QpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTeW1ib2xOb2RlIG9yIEFjY2Vzc29yTm9kZSBleHBlY3RlZCBhcyBcIm9iamVjdFwiJyk7XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfaXMuaXNTeW1ib2xOb2RlKShvYmplY3QpICYmIG9iamVjdC5uYW1lID09PSAnZW5kJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgYXNzaWduIHRvIHN5bWJvbCBcImVuZFwiJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaW5kZXggJiYgISgwLCBfaXMuaXNJbmRleE5vZGUpKHRoaXMuaW5kZXgpKSB7XG4gICAgICAvLyBpbmRleCBpcyBvcHRpb25hbFxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW5kZXhOb2RlIGV4cGVjdGVkIGFzIFwiaW5kZXhcIicpO1xuICAgIH1cblxuICAgIGlmICghKDAsIF9pcy5pc05vZGUpKHRoaXMudmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdOb2RlIGV4cGVjdGVkIGFzIFwidmFsdWVcIicpO1xuICAgIH0gLy8gcmVhZG9ubHkgcHJvcGVydHkgbmFtZVxuXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ25hbWUnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5kZXgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5pbmRleC5pc09iamVjdFByb3BlcnR5KCkgPyB0aGlzLmluZGV4LmdldE9iamVjdFByb3BlcnR5KCkgOiAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5vYmplY3QubmFtZSB8fCAnJztcbiAgICAgICAgfVxuICAgICAgfS5iaW5kKHRoaXMpLFxuICAgICAgc2V0OiBmdW5jdGlvbiBzZXQoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGFzc2lnbiBhIG5ldyBuYW1lLCBuYW1lIGlzIHJlYWQtb25seScpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgQXNzaWdubWVudE5vZGUucHJvdG90eXBlID0gbmV3IE5vZGUoKTtcbiAgQXNzaWdubWVudE5vZGUucHJvdG90eXBlLnR5cGUgPSAnQXNzaWdubWVudE5vZGUnO1xuICBBc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUuaXNBc3NpZ25tZW50Tm9kZSA9IHRydWU7XG4gIC8qKlxuICAgKiBDb21waWxlIGEgbm9kZSBpbnRvIGEgSmF2YVNjcmlwdCBmdW5jdGlvbi5cbiAgICogVGhpcyBiYXNpY2FsbHkgcHJlLWNhbGN1bGF0ZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSBhbmQgb25seSBsZWF2ZXMgb3BlblxuICAgKiBjYWxjdWxhdGlvbnMgd2hpY2ggZGVwZW5kIG9uIGEgZHluYW1pYyBzY29wZSB3aXRoIHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG1hdGggICAgIE1hdGguanMgbmFtZXNwYWNlIHdpdGggZnVuY3Rpb25zIGFuZCBjb25zdGFudHMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdOYW1lcyBBbiBvYmplY3Qgd2l0aCBhcmd1bWVudCBuYW1lcyBhcyBrZXkgYW5kIGB0cnVlYFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdmFsdWUuIFVzZWQgaW4gdGhlIFN5bWJvbE5vZGUgdG8gb3B0aW1pemVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudHMgZnJvbSB1c2VyIGFzc2lnbmVkIGZ1bmN0aW9uc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZSBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKSBvciBzcGVjaWFsIHN5bWJvbHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UgYGVuZGAgKHNlZSBJbmRleE5vZGUpLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgbGlrZTpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICBldmFsTm9kZShzY29wZTogT2JqZWN0LCBhcmdzOiBPYmplY3QsIGNvbnRleHQ6ICopXG4gICAqL1xuXG4gIEFzc2lnbm1lbnROb2RlLnByb3RvdHlwZS5fY29tcGlsZSA9IGZ1bmN0aW9uIChtYXRoLCBhcmdOYW1lcykge1xuICAgIHZhciBldmFsT2JqZWN0ID0gdGhpcy5vYmplY3QuX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpO1xuXG4gICAgdmFyIGV2YWxJbmRleCA9IHRoaXMuaW5kZXggPyB0aGlzLmluZGV4Ll9jb21waWxlKG1hdGgsIGFyZ05hbWVzKSA6IG51bGw7XG5cbiAgICB2YXIgZXZhbFZhbHVlID0gdGhpcy52YWx1ZS5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7XG5cbiAgICB2YXIgbmFtZSA9IHRoaXMub2JqZWN0Lm5hbWU7XG5cbiAgICBpZiAoIXRoaXMuaW5kZXgpIHtcbiAgICAgIC8vIGFwcGx5IGEgdmFyaWFibGUgdG8gdGhlIHNjb3BlLCBmb3IgZXhhbXBsZSBgYT0yYFxuICAgICAgaWYgKCEoMCwgX2lzLmlzU3ltYm9sTm9kZSkodGhpcy5vYmplY3QpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1N5bWJvbE5vZGUgZXhwZWN0ZWQgYXMgb2JqZWN0Jyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmdW5jdGlvbiBldmFsQXNzaWdubWVudE5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfY3VzdG9tcy5zZXRTYWZlUHJvcGVydHkpKHNjb3BlLCBuYW1lLCBldmFsVmFsdWUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICh0aGlzLmluZGV4LmlzT2JqZWN0UHJvcGVydHkoKSkge1xuICAgICAgLy8gYXBwbHkgYW4gb2JqZWN0IHByb3BlcnR5IGZvciBleGFtcGxlIGBhLmI9MmBcbiAgICAgIHZhciBwcm9wID0gdGhpcy5pbmRleC5nZXRPYmplY3RQcm9wZXJ0eSgpO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxBc3NpZ25tZW50Tm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICB2YXIgb2JqZWN0ID0gZXZhbE9iamVjdChzY29wZSwgYXJncywgY29udGV4dCk7XG4gICAgICAgIHZhciB2YWx1ZSA9IGV2YWxWYWx1ZShzY29wZSwgYXJncywgY29udGV4dCk7XG4gICAgICAgIHJldHVybiAoMCwgX2N1c3RvbXMuc2V0U2FmZVByb3BlcnR5KShvYmplY3QsIHByb3AsIHZhbHVlKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzU3ltYm9sTm9kZSkodGhpcy5vYmplY3QpKSB7XG4gICAgICAvLyB1cGRhdGUgYSBtYXRyaXggc3Vic2V0LCBmb3IgZXhhbXBsZSBgYVsyXT0zYFxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxBc3NpZ25tZW50Tm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICB2YXIgY2hpbGRPYmplY3QgPSBldmFsT2JqZWN0KHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcbiAgICAgICAgdmFyIHZhbHVlID0gZXZhbFZhbHVlKHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcbiAgICAgICAgdmFyIGluZGV4ID0gZXZhbEluZGV4KHNjb3BlLCBhcmdzLCBjaGlsZE9iamVjdCk7IC8vIEltcG9ydGFudDogIHdlIHBhc3MgY2hpbGRPYmplY3QgaW5zdGVhZCBvZiBjb250ZXh0XG5cbiAgICAgICAgKDAsIF9jdXN0b21zLnNldFNhZmVQcm9wZXJ0eSkoc2NvcGUsIG5hbWUsIGFzc2lnbihjaGlsZE9iamVjdCwgaW5kZXgsIHZhbHVlKSk7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGlzQWNjZXNzb3JOb2RlKG5vZGUub2JqZWN0KSA9PT0gdHJ1ZVxuICAgICAgLy8gdXBkYXRlIGEgbWF0cml4IHN1YnNldCwgZm9yIGV4YW1wbGUgYGEuYlsyXT0zYFxuICAgICAgLy8gd2Ugd2lsbCBub3QgdXNlIHRoZSBjb21waWxlIGZ1bmN0aW9uIG9mIHRoZSBBY2Nlc3Nvck5vZGUsIGJ1dCBjb21waWxlIGl0XG4gICAgICAvLyBvdXJzZWx2ZXMgaGVyZSBhcyB3ZSBuZWVkIHRoZSBwYXJlbnQgb2JqZWN0IG9mIHRoZSBBY2Nlc3Nvck5vZGU6XG4gICAgICAvLyB3ZWUgbmVlZCB0byBhcHBseSB0aGUgdXBkYXRlZCBvYmplY3QgdG8gcGFyZW50IG9iamVjdFxuICAgICAgdmFyIGV2YWxQYXJlbnRPYmplY3QgPSB0aGlzLm9iamVjdC5vYmplY3QuX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpO1xuXG4gICAgICBpZiAodGhpcy5vYmplY3QuaW5kZXguaXNPYmplY3RQcm9wZXJ0eSgpKSB7XG4gICAgICAgIHZhciBwYXJlbnRQcm9wID0gdGhpcy5vYmplY3QuaW5kZXguZ2V0T2JqZWN0UHJvcGVydHkoKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxBc3NpZ25tZW50Tm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICAgIHZhciBwYXJlbnQgPSBldmFsUGFyZW50T2JqZWN0KHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcbiAgICAgICAgICB2YXIgY2hpbGRPYmplY3QgPSAoMCwgX2N1c3RvbXMuZ2V0U2FmZVByb3BlcnR5KShwYXJlbnQsIHBhcmVudFByb3ApO1xuICAgICAgICAgIHZhciBpbmRleCA9IGV2YWxJbmRleChzY29wZSwgYXJncywgY2hpbGRPYmplY3QpOyAvLyBJbXBvcnRhbnQ6IHdlIHBhc3MgY2hpbGRPYmplY3QgaW5zdGVhZCBvZiBjb250ZXh0XG5cbiAgICAgICAgICB2YXIgdmFsdWUgPSBldmFsVmFsdWUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpO1xuICAgICAgICAgICgwLCBfY3VzdG9tcy5zZXRTYWZlUHJvcGVydHkpKHBhcmVudCwgcGFyZW50UHJvcCwgYXNzaWduKGNoaWxkT2JqZWN0LCBpbmRleCwgdmFsdWUpKTtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBpZiBzb21lIHBhcmFtZXRlcnMgdXNlIHRoZSAnZW5kJyBwYXJhbWV0ZXIsIHdlIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBzaXplXG4gICAgICAgIHZhciBldmFsUGFyZW50SW5kZXggPSB0aGlzLm9iamVjdC5pbmRleC5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxBc3NpZ25tZW50Tm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICAgIHZhciBwYXJlbnQgPSBldmFsUGFyZW50T2JqZWN0KHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcbiAgICAgICAgICB2YXIgcGFyZW50SW5kZXggPSBldmFsUGFyZW50SW5kZXgoc2NvcGUsIGFyZ3MsIHBhcmVudCk7IC8vIEltcG9ydGFudDogd2UgcGFzcyBwYXJlbnQgaW5zdGVhZCBvZiBjb250ZXh0XG5cbiAgICAgICAgICB2YXIgY2hpbGRPYmplY3QgPSBhY2Nlc3MocGFyZW50LCBwYXJlbnRJbmRleCk7XG4gICAgICAgICAgdmFyIGluZGV4ID0gZXZhbEluZGV4KHNjb3BlLCBhcmdzLCBjaGlsZE9iamVjdCk7IC8vIEltcG9ydGFudDogIHdlIHBhc3MgY2hpbGRPYmplY3QgaW5zdGVhZCBvZiBjb250ZXh0XG5cbiAgICAgICAgICB2YXIgdmFsdWUgPSBldmFsVmFsdWUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpO1xuICAgICAgICAgIGFzc2lnbihwYXJlbnQsIHBhcmVudEluZGV4LCBhc3NpZ24oY2hpbGRPYmplY3QsIGluZGV4LCB2YWx1ZSkpO1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGVhY2ggb2YgdGhlIGNoaWxkIG5vZGVzIG9mIHRoaXMgbm9kZVxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSl9IGNhbGxiYWNrXG4gICAqL1xuXG5cbiAgQXNzaWdubWVudE5vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBjYWxsYmFjayh0aGlzLm9iamVjdCwgJ29iamVjdCcsIHRoaXMpO1xuXG4gICAgaWYgKHRoaXMuaW5kZXgpIHtcbiAgICAgIGNhbGxiYWNrKHRoaXMuaW5kZXgsICdpbmRleCcsIHRoaXMpO1xuICAgIH1cblxuICAgIGNhbGxiYWNrKHRoaXMudmFsdWUsICd2YWx1ZScsIHRoaXMpO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IEFzc2lnbm1lbnROb2RlIGhhdmluZyBpdCdzIGNoaWxkcyBiZSB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nXG4gICAqIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCBvZiB0aGUgY2hpbGRzIG9mIHRoZSBvcmlnaW5hbCBub2RlLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSk6IE5vZGV9IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHtBc3NpZ25tZW50Tm9kZX0gUmV0dXJucyBhIHRyYW5zZm9ybWVkIGNvcHkgb2YgdGhlIG5vZGVcbiAgICovXG5cblxuICBBc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgdmFyIG9iamVjdCA9IHRoaXMuX2lmTm9kZShjYWxsYmFjayh0aGlzLm9iamVjdCwgJ29iamVjdCcsIHRoaXMpKTtcblxuICAgIHZhciBpbmRleCA9IHRoaXMuaW5kZXggPyB0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy5pbmRleCwgJ2luZGV4JywgdGhpcykpIDogbnVsbDtcblxuICAgIHZhciB2YWx1ZSA9IHRoaXMuX2lmTm9kZShjYWxsYmFjayh0aGlzLnZhbHVlLCAndmFsdWUnLCB0aGlzKSk7XG5cbiAgICByZXR1cm4gbmV3IEFzc2lnbm1lbnROb2RlKG9iamVjdCwgaW5kZXgsIHZhbHVlKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoaXMgbm9kZSwgYSBzaGFsbG93IGNvcHlcbiAgICogQHJldHVybiB7QXNzaWdubWVudE5vZGV9XG4gICAqL1xuXG5cbiAgQXNzaWdubWVudE5vZGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgQXNzaWdubWVudE5vZGUodGhpcy5vYmplY3QsIHRoaXMuaW5kZXgsIHRoaXMudmFsdWUpO1xuICB9O1xuICAvKlxuICAgKiBJcyBwYXJlbnRoZXNpcyBuZWVkZWQ/XG4gICAqIEBwYXJhbSB7bm9kZX0gbm9kZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3BhcmVudGhlc2lzPSdrZWVwJ11cbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBuZWVkUGFyZW50aGVzaXMobm9kZSwgcGFyZW50aGVzaXMpIHtcbiAgICBpZiAoIXBhcmVudGhlc2lzKSB7XG4gICAgICBwYXJlbnRoZXNpcyA9ICdrZWVwJztcbiAgICB9XG5cbiAgICB2YXIgcHJlY2VkZW5jZSA9ICgwLCBfb3BlcmF0b3JzLmdldFByZWNlZGVuY2UpKG5vZGUsIHBhcmVudGhlc2lzKTtcbiAgICB2YXIgZXhwclByZWNlZGVuY2UgPSAoMCwgX29wZXJhdG9ycy5nZXRQcmVjZWRlbmNlKShub2RlLnZhbHVlLCBwYXJlbnRoZXNpcyk7XG4gICAgcmV0dXJuIHBhcmVudGhlc2lzID09PSAnYWxsJyB8fCBleHByUHJlY2VkZW5jZSAhPT0gbnVsbCAmJiBleHByUHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBBc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgb2JqZWN0ID0gdGhpcy5vYmplY3QudG9TdHJpbmcob3B0aW9ucyk7XG4gICAgdmFyIGluZGV4ID0gdGhpcy5pbmRleCA/IHRoaXMuaW5kZXgudG9TdHJpbmcob3B0aW9ucykgOiAnJztcbiAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlLnRvU3RyaW5nKG9wdGlvbnMpO1xuXG4gICAgaWYgKG5lZWRQYXJlbnRoZXNpcyh0aGlzLCBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMpKSB7XG4gICAgICB2YWx1ZSA9ICcoJyArIHZhbHVlICsgJyknO1xuICAgIH1cblxuICAgIHJldHVybiBvYmplY3QgKyBpbmRleCArICcgPSAnICsgdmFsdWU7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBub2RlXG4gICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAqL1xuXG5cbiAgQXNzaWdubWVudE5vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnQXNzaWdubWVudE5vZGUnLFxuICAgICAgb2JqZWN0OiB0aGlzLm9iamVjdCxcbiAgICAgIGluZGV4OiB0aGlzLmluZGV4LFxuICAgICAgdmFsdWU6IHRoaXMudmFsdWVcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogSW5zdGFudGlhdGUgYW4gQXNzaWdubWVudE5vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIkFzc2lnbm1lbnROb2RlXCIsIG9iamVjdDogLi4uLCBpbmRleDogLi4uLCB2YWx1ZTogLi4ufWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge0Fzc2lnbm1lbnROb2RlfVxuICAgKi9cblxuXG4gIEFzc2lnbm1lbnROb2RlLmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICByZXR1cm4gbmV3IEFzc2lnbm1lbnROb2RlKGpzb24ub2JqZWN0LCBqc29uLmluZGV4LCBqc29uLnZhbHVlKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBIVE1MIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBBc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgb2JqZWN0ID0gdGhpcy5vYmplY3QudG9IVE1MKG9wdGlvbnMpO1xuICAgIHZhciBpbmRleCA9IHRoaXMuaW5kZXggPyB0aGlzLmluZGV4LnRvSFRNTChvcHRpb25zKSA6ICcnO1xuICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWUudG9IVE1MKG9wdGlvbnMpO1xuXG4gICAgaWYgKG5lZWRQYXJlbnRoZXNpcyh0aGlzLCBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMpKSB7XG4gICAgICB2YWx1ZSA9ICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyYW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPig8L3NwYW4+JyArIHZhbHVlICsgJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJhbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KTwvc3Bhbj4nO1xuICAgIH1cblxuICAgIHJldHVybiBvYmplY3QgKyBpbmRleCArICc8c3BhbiBjbGFzcz1cIm1hdGgtb3BlcmF0b3IgbWF0aC1hc3NpZ25tZW50LW9wZXJhdG9yIG1hdGgtdmFyaWFibGUtYXNzaWdubWVudC1vcGVyYXRvciBtYXRoLWJpbmFyeS1vcGVyYXRvclwiPj08L3NwYW4+JyArIHZhbHVlO1xuICB9O1xuICAvKipcbiAgICogR2V0IExhVGVYIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBBc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUuX3RvVGV4ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgb2JqZWN0ID0gdGhpcy5vYmplY3QudG9UZXgob3B0aW9ucyk7XG4gICAgdmFyIGluZGV4ID0gdGhpcy5pbmRleCA/IHRoaXMuaW5kZXgudG9UZXgob3B0aW9ucykgOiAnJztcbiAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlLnRvVGV4KG9wdGlvbnMpO1xuXG4gICAgaWYgKG5lZWRQYXJlbnRoZXNpcyh0aGlzLCBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMpKSB7XG4gICAgICB2YWx1ZSA9IFwiXFxcXGxlZnQoXCIuY29uY2F0KHZhbHVlLCBcIlxcXFxyaWdodClcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iamVjdCArIGluZGV4ICsgJzo9JyArIHZhbHVlO1xuICB9O1xuXG4gIHJldHVybiBBc3NpZ25tZW50Tm9kZTtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZSxcbiAgaXNOb2RlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQXNzaWdubWVudE5vZGUgPSBjcmVhdGVBc3NpZ25tZW50Tm9kZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQmxvY2tOb2RlID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnQmxvY2tOb2RlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ1Jlc3VsdFNldCcsICdOb2RlJ107XG52YXIgY3JlYXRlQmxvY2tOb2RlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIFJlc3VsdFNldCA9IF9yZWYuUmVzdWx0U2V0LFxuICAgICAgTm9kZSA9IF9yZWYuTm9kZTtcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yIEJsb2NrTm9kZVxuICAgKiBAZXh0ZW5kcyB7Tm9kZX1cbiAgICogSG9sZHMgYSBzZXQgd2l0aCBibG9ja3NcbiAgICogQHBhcmFtIHtBcnJheS48e25vZGU6IE5vZGV9IHwge25vZGU6IE5vZGUsIHZpc2libGU6IGJvb2xlYW59Pn0gYmxvY2tzXG4gICAqICAgICAgICAgICAgQW4gYXJyYXkgd2l0aCBibG9ja3MsIHdoZXJlIGEgYmxvY2sgaXMgY29uc3RydWN0ZWQgYXMgYW4gT2JqZWN0XG4gICAqICAgICAgICAgICAgd2l0aCBwcm9wZXJ0aWVzIGJsb2NrLCB3aGljaCBpcyBhIE5vZGUsIGFuZCB2aXNpYmxlLCB3aGljaCBpc1xuICAgKiAgICAgICAgICAgIGEgYm9vbGVhbi4gVGhlIHByb3BlcnR5IHZpc2libGUgaXMgb3B0aW9uYWwgYW5kIGlzIHRydWUgYnkgZGVmYXVsdFxuICAgKi9cbiAgZnVuY3Rpb24gQmxvY2tOb2RlKGJsb2Nrcykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBCbG9ja05vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH0gLy8gdmFsaWRhdGUgaW5wdXQsIGNvcHkgYmxvY2tzXG5cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShibG9ja3MpKSB0aHJvdyBuZXcgRXJyb3IoJ0FycmF5IGV4cGVjdGVkJyk7XG4gICAgdGhpcy5ibG9ja3MgPSBibG9ja3MubWFwKGZ1bmN0aW9uIChibG9jaykge1xuICAgICAgdmFyIG5vZGUgPSBibG9jayAmJiBibG9jay5ub2RlO1xuICAgICAgdmFyIHZpc2libGUgPSBibG9jayAmJiBibG9jay52aXNpYmxlICE9PSB1bmRlZmluZWQgPyBibG9jay52aXNpYmxlIDogdHJ1ZTtcbiAgICAgIGlmICghKDAsIF9pcy5pc05vZGUpKG5vZGUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm9wZXJ0eSBcIm5vZGVcIiBtdXN0IGJlIGEgTm9kZScpO1xuICAgICAgaWYgKHR5cGVvZiB2aXNpYmxlICE9PSAnYm9vbGVhbicpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Byb3BlcnR5IFwidmlzaWJsZVwiIG11c3QgYmUgYSBib29sZWFuJyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICB2aXNpYmxlOiB2aXNpYmxlXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgQmxvY2tOb2RlLnByb3RvdHlwZSA9IG5ldyBOb2RlKCk7XG4gIEJsb2NrTm9kZS5wcm90b3R5cGUudHlwZSA9ICdCbG9ja05vZGUnO1xuICBCbG9ja05vZGUucHJvdG90eXBlLmlzQmxvY2tOb2RlID0gdHJ1ZTtcbiAgLyoqXG4gICAqIENvbXBpbGUgYSBub2RlIGludG8gYSBKYXZhU2NyaXB0IGZ1bmN0aW9uLlxuICAgKiBUaGlzIGJhc2ljYWxseSBwcmUtY2FsY3VsYXRlcyBhcyBtdWNoIGFzIHBvc3NpYmxlIGFuZCBvbmx5IGxlYXZlcyBvcGVuXG4gICAqIGNhbGN1bGF0aW9ucyB3aGljaCBkZXBlbmQgb24gYSBkeW5hbWljIHNjb3BlIHdpdGggdmFyaWFibGVzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gbWF0aCAgICAgTWF0aC5qcyBuYW1lc3BhY2Ugd2l0aCBmdW5jdGlvbnMgYW5kIGNvbnN0YW50cy5cbiAgICogQHBhcmFtIHtPYmplY3R9IGFyZ05hbWVzIEFuIG9iamVjdCB3aXRoIGFyZ3VtZW50IG5hbWVzIGFzIGtleSBhbmQgYHRydWVgXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBhcyB2YWx1ZS4gVXNlZCBpbiB0aGUgU3ltYm9sTm9kZSB0byBvcHRpbWl6ZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFyZ3VtZW50cyBmcm9tIHVzZXIgYXNzaWduZWQgZnVuY3Rpb25zXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VlIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUpIG9yIHNwZWNpYWwgc3ltYm9sc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSBgZW5kYCAoc2VlIEluZGV4Tm9kZSkuXG4gICAqIEByZXR1cm4ge2Z1bmN0aW9ufSBSZXR1cm5zIGEgZnVuY3Rpb24gd2hpY2ggY2FuIGJlIGNhbGxlZCBsaWtlOlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWxOb2RlKHNjb3BlOiBPYmplY3QsIGFyZ3M6IE9iamVjdCwgY29udGV4dDogKilcbiAgICovXG5cbiAgQmxvY2tOb2RlLnByb3RvdHlwZS5fY29tcGlsZSA9IGZ1bmN0aW9uIChtYXRoLCBhcmdOYW1lcykge1xuICAgIHZhciBldmFsQmxvY2tzID0gKDAsIF9hcnJheS5tYXApKHRoaXMuYmxvY2tzLCBmdW5jdGlvbiAoYmxvY2spIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGV2YWx1YXRlOiBibG9jay5ub2RlLl9jb21waWxlKG1hdGgsIGFyZ05hbWVzKSxcbiAgICAgICAgdmlzaWJsZTogYmxvY2sudmlzaWJsZVxuICAgICAgfTtcbiAgICB9KTtcbiAgICByZXR1cm4gZnVuY3Rpb24gZXZhbEJsb2NrTm9kZXMoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAoMCwgX2FycmF5LmZvckVhY2gpKGV2YWxCbG9ja3MsIGZ1bmN0aW9uIGV2YWxCbG9ja05vZGUoYmxvY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGJsb2NrLmV2YWx1YXRlKHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcblxuICAgICAgICBpZiAoYmxvY2sudmlzaWJsZSkge1xuICAgICAgICAgIHJlc3VsdHMucHVzaChyZXN1bHQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXcgUmVzdWx0U2V0KHJlc3VsdHMpO1xuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGVhY2ggb2YgdGhlIGNoaWxkIGJsb2NrcyBvZiB0aGlzIG5vZGVcbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpfSBjYWxsYmFja1xuICAgKi9cblxuXG4gIEJsb2NrTm9kZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ibG9ja3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNhbGxiYWNrKHRoaXMuYmxvY2tzW2ldLm5vZGUsICdibG9ja3NbJyArIGkgKyAnXS5ub2RlJywgdGhpcyk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IEJsb2NrTm9kZSBoYXZpbmcgaXQncyBjaGlsZHMgYmUgdGhlIHJlc3VsdHMgb2YgY2FsbGluZ1xuICAgKiB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggb2YgdGhlIGNoaWxkcyBvZiB0aGUgb3JpZ2luYWwgbm9kZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpOiBOb2RlfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7QmxvY2tOb2RlfSBSZXR1cm5zIGEgdHJhbnNmb3JtZWQgY29weSBvZiB0aGUgbm9kZVxuICAgKi9cblxuXG4gIEJsb2NrTm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgdmFyIGJsb2NrcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmJsb2Nrcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGJsb2NrID0gdGhpcy5ibG9ja3NbaV07XG5cbiAgICAgIHZhciBub2RlID0gdGhpcy5faWZOb2RlKGNhbGxiYWNrKGJsb2NrLm5vZGUsICdibG9ja3NbJyArIGkgKyAnXS5ub2RlJywgdGhpcykpO1xuXG4gICAgICBibG9ja3NbaV0gPSB7XG4gICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgIHZpc2libGU6IGJsb2NrLnZpc2libGVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBCbG9ja05vZGUoYmxvY2tzKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoaXMgbm9kZSwgYSBzaGFsbG93IGNvcHlcbiAgICogQHJldHVybiB7QmxvY2tOb2RlfVxuICAgKi9cblxuXG4gIEJsb2NrTm9kZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGJsb2NrcyA9IHRoaXMuYmxvY2tzLm1hcChmdW5jdGlvbiAoYmxvY2spIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5vZGU6IGJsb2NrLm5vZGUsXG4gICAgICAgIHZpc2libGU6IGJsb2NrLnZpc2libGVcbiAgICAgIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBCbG9ja05vZGUoYmxvY2tzKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuXG5cbiAgQmxvY2tOb2RlLnByb3RvdHlwZS5fdG9TdHJpbmcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmJsb2Nrcy5tYXAoZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICByZXR1cm4gcGFyYW0ubm9kZS50b1N0cmluZyhvcHRpb25zKSArIChwYXJhbS52aXNpYmxlID8gJycgOiAnOycpO1xuICAgIH0pLmpvaW4oJ1xcbicpO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cblxuXG4gIEJsb2NrTm9kZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdCbG9ja05vZGUnLFxuICAgICAgYmxvY2tzOiB0aGlzLmJsb2Nrc1xuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhbiBCbG9ja05vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIkJsb2NrTm9kZVwiLCBibG9ja3M6IFt7bm9kZTogLi4uLCB2aXNpYmxlOiBmYWxzZX0sIC4uLl19YCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG1hdGhqcyBpcyBvcHRpb25hbFxuICAgKiBAcmV0dXJucyB7QmxvY2tOb2RlfVxuICAgKi9cblxuXG4gIEJsb2NrTm9kZS5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgcmV0dXJuIG5ldyBCbG9ja05vZGUoanNvbi5ibG9ja3MpO1xuICB9O1xuICAvKipcbiAgICogR2V0IEhUTUwgcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuXG5cbiAgQmxvY2tOb2RlLnByb3RvdHlwZS50b0hUTUwgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmJsb2Nrcy5tYXAoZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICByZXR1cm4gcGFyYW0ubm9kZS50b0hUTUwob3B0aW9ucykgKyAocGFyYW0udmlzaWJsZSA/ICcnIDogJzxzcGFuIGNsYXNzPVwibWF0aC1zZXBhcmF0b3JcIj47PC9zcGFuPicpO1xuICAgIH0pLmpvaW4oJzxzcGFuIGNsYXNzPVwibWF0aC1zZXBhcmF0b3JcIj48YnIgLz48L3NwYW4+Jyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgTGFUZVggcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBCbG9ja05vZGUucHJvdG90eXBlLl90b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMuYmxvY2tzLm1hcChmdW5jdGlvbiAocGFyYW0pIHtcbiAgICAgIHJldHVybiBwYXJhbS5ub2RlLnRvVGV4KG9wdGlvbnMpICsgKHBhcmFtLnZpc2libGUgPyAnJyA6ICc7Jyk7XG4gICAgfSkuam9pbignXFxcXDtcXFxcO1xcbicpO1xuICB9O1xuXG4gIHJldHVybiBCbG9ja05vZGU7XG59LCB7XG4gIGlzQ2xhc3M6IHRydWUsXG4gIGlzTm9kZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUJsb2NrTm9kZSA9IGNyZWF0ZUJsb2NrTm9kZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ29uZGl0aW9uYWxOb2RlID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9vcGVyYXRvcnMgPSByZXF1aXJlKFwiLi4vb3BlcmF0b3JzXCIpO1xuXG52YXIgbmFtZSA9ICdDb25kaXRpb25hbE5vZGUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnTm9kZSddO1xudmFyIGNyZWF0ZUNvbmRpdGlvbmFsTm9kZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBOb2RlID0gX3JlZi5Ob2RlO1xuXG4gIC8qKlxuICAgKiBBIGxhenkgZXZhbHVhdGluZyBjb25kaXRpb25hbCBvcGVyYXRvcjogJ2NvbmRpdGlvbiA/IHRydWVFeHByIDogZmFsc2VFeHByJ1xuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IGNvbmRpdGlvbiAgIENvbmRpdGlvbiwgbXVzdCByZXN1bHQgaW4gYSBib29sZWFuXG4gICAqIEBwYXJhbSB7Tm9kZX0gdHJ1ZUV4cHIgICAgRXhwcmVzc2lvbiBldmFsdWF0ZWQgd2hlbiBjb25kaXRpb24gaXMgdHJ1ZVxuICAgKiBAcGFyYW0ge05vZGV9IGZhbHNlRXhwciAgIEV4cHJlc3Npb24gZXZhbHVhdGVkIHdoZW4gY29uZGl0aW9uIGlzIHRydWVcbiAgICpcbiAgICogQGNvbnN0cnVjdG9yIENvbmRpdGlvbmFsTm9kZVxuICAgKiBAZXh0ZW5kcyB7Tm9kZX1cbiAgICovXG4gIGZ1bmN0aW9uIENvbmRpdGlvbmFsTm9kZShjb25kaXRpb24sIHRydWVFeHByLCBmYWxzZUV4cHIpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQ29uZGl0aW9uYWxOb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG5cbiAgICBpZiAoISgwLCBfaXMuaXNOb2RlKShjb25kaXRpb24pKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXJhbWV0ZXIgY29uZGl0aW9uIG11c3QgYmUgYSBOb2RlJyk7XG4gICAgaWYgKCEoMCwgX2lzLmlzTm9kZSkodHJ1ZUV4cHIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXJhbWV0ZXIgdHJ1ZUV4cHIgbXVzdCBiZSBhIE5vZGUnKTtcbiAgICBpZiAoISgwLCBfaXMuaXNOb2RlKShmYWxzZUV4cHIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXJhbWV0ZXIgZmFsc2VFeHByIG11c3QgYmUgYSBOb2RlJyk7XG4gICAgdGhpcy5jb25kaXRpb24gPSBjb25kaXRpb247XG4gICAgdGhpcy50cnVlRXhwciA9IHRydWVFeHByO1xuICAgIHRoaXMuZmFsc2VFeHByID0gZmFsc2VFeHByO1xuICB9XG5cbiAgQ29uZGl0aW9uYWxOb2RlLnByb3RvdHlwZSA9IG5ldyBOb2RlKCk7XG4gIENvbmRpdGlvbmFsTm9kZS5wcm90b3R5cGUudHlwZSA9ICdDb25kaXRpb25hbE5vZGUnO1xuICBDb25kaXRpb25hbE5vZGUucHJvdG90eXBlLmlzQ29uZGl0aW9uYWxOb2RlID0gdHJ1ZTtcbiAgLyoqXG4gICAqIENvbXBpbGUgYSBub2RlIGludG8gYSBKYXZhU2NyaXB0IGZ1bmN0aW9uLlxuICAgKiBUaGlzIGJhc2ljYWxseSBwcmUtY2FsY3VsYXRlcyBhcyBtdWNoIGFzIHBvc3NpYmxlIGFuZCBvbmx5IGxlYXZlcyBvcGVuXG4gICAqIGNhbGN1bGF0aW9ucyB3aGljaCBkZXBlbmQgb24gYSBkeW5hbWljIHNjb3BlIHdpdGggdmFyaWFibGVzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gbWF0aCAgICAgTWF0aC5qcyBuYW1lc3BhY2Ugd2l0aCBmdW5jdGlvbnMgYW5kIGNvbnN0YW50cy5cbiAgICogQHBhcmFtIHtPYmplY3R9IGFyZ05hbWVzIEFuIG9iamVjdCB3aXRoIGFyZ3VtZW50IG5hbWVzIGFzIGtleSBhbmQgYHRydWVgXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBhcyB2YWx1ZS4gVXNlZCBpbiB0aGUgU3ltYm9sTm9kZSB0byBvcHRpbWl6ZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFyZ3VtZW50cyBmcm9tIHVzZXIgYXNzaWduZWQgZnVuY3Rpb25zXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VlIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUpIG9yIHNwZWNpYWwgc3ltYm9sc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSBgZW5kYCAoc2VlIEluZGV4Tm9kZSkuXG4gICAqIEByZXR1cm4ge2Z1bmN0aW9ufSBSZXR1cm5zIGEgZnVuY3Rpb24gd2hpY2ggY2FuIGJlIGNhbGxlZCBsaWtlOlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWxOb2RlKHNjb3BlOiBPYmplY3QsIGFyZ3M6IE9iamVjdCwgY29udGV4dDogKilcbiAgICovXG5cbiAgQ29uZGl0aW9uYWxOb2RlLnByb3RvdHlwZS5fY29tcGlsZSA9IGZ1bmN0aW9uIChtYXRoLCBhcmdOYW1lcykge1xuICAgIHZhciBldmFsQ29uZGl0aW9uID0gdGhpcy5jb25kaXRpb24uX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpO1xuXG4gICAgdmFyIGV2YWxUcnVlRXhwciA9IHRoaXMudHJ1ZUV4cHIuX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpO1xuXG4gICAgdmFyIGV2YWxGYWxzZUV4cHIgPSB0aGlzLmZhbHNlRXhwci5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gZXZhbENvbmRpdGlvbmFsTm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgcmV0dXJuIHRlc3RDb25kaXRpb24oZXZhbENvbmRpdGlvbihzY29wZSwgYXJncywgY29udGV4dCkpID8gZXZhbFRydWVFeHByKHNjb3BlLCBhcmdzLCBjb250ZXh0KSA6IGV2YWxGYWxzZUV4cHIoc2NvcGUsIGFyZ3MsIGNvbnRleHQpO1xuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGVhY2ggb2YgdGhlIGNoaWxkIG5vZGVzIG9mIHRoaXMgbm9kZVxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSl9IGNhbGxiYWNrXG4gICAqL1xuXG5cbiAgQ29uZGl0aW9uYWxOb2RlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgY2FsbGJhY2sodGhpcy5jb25kaXRpb24sICdjb25kaXRpb24nLCB0aGlzKTtcbiAgICBjYWxsYmFjayh0aGlzLnRydWVFeHByLCAndHJ1ZUV4cHInLCB0aGlzKTtcbiAgICBjYWxsYmFjayh0aGlzLmZhbHNlRXhwciwgJ2ZhbHNlRXhwcicsIHRoaXMpO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IENvbmRpdGlvbmFsTm9kZSBoYXZpbmcgaXQncyBjaGlsZHMgYmUgdGhlIHJlc3VsdHMgb2YgY2FsbGluZ1xuICAgKiB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggb2YgdGhlIGNoaWxkcyBvZiB0aGUgb3JpZ2luYWwgbm9kZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpOiBOb2RlfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7Q29uZGl0aW9uYWxOb2RlfSBSZXR1cm5zIGEgdHJhbnNmb3JtZWQgY29weSBvZiB0aGUgbm9kZVxuICAgKi9cblxuXG4gIENvbmRpdGlvbmFsTm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIG5ldyBDb25kaXRpb25hbE5vZGUodGhpcy5faWZOb2RlKGNhbGxiYWNrKHRoaXMuY29uZGl0aW9uLCAnY29uZGl0aW9uJywgdGhpcykpLCB0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy50cnVlRXhwciwgJ3RydWVFeHByJywgdGhpcykpLCB0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy5mYWxzZUV4cHIsICdmYWxzZUV4cHInLCB0aGlzKSkpO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgY2xvbmUgb2YgdGhpcyBub2RlLCBhIHNoYWxsb3cgY29weVxuICAgKiBAcmV0dXJuIHtDb25kaXRpb25hbE5vZGV9XG4gICAqL1xuXG5cbiAgQ29uZGl0aW9uYWxOb2RlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IENvbmRpdGlvbmFsTm9kZSh0aGlzLmNvbmRpdGlvbiwgdGhpcy50cnVlRXhwciwgdGhpcy5mYWxzZUV4cHIpO1xuICB9O1xuICAvKipcbiAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIENvbmRpdGlvbmFsTm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgcGFyZW50aGVzaXMgPSBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMgPyBvcHRpb25zLnBhcmVudGhlc2lzIDogJ2tlZXAnO1xuICAgIHZhciBwcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkodGhpcywgcGFyZW50aGVzaXMpOyAvLyBFbmNsb3NlIEFyZ3VtZW50cyBpbiBwYXJlbnRoZXNlcyBpZiB0aGV5IGFyZSBhbiBPcGVyYXRvck5vZGVcbiAgICAvLyBvciBoYXZlIGxvd2VyIG9yIGVxdWFsIHByZWNlZGVuY2VcbiAgICAvLyBOT1RFOiBlbmNsb3NpbmcgYWxsIE9wZXJhdG9yTm9kZXMgaW4gcGFyZW50aGVzZXMgaXMgYSBkZWNpc2lvblxuICAgIC8vIHB1cmVseSBiYXNlZCBvbiBhZXN0aGV0aWNzIGFuZCByZWFkYWJpbGl0eVxuXG4gICAgdmFyIGNvbmRpdGlvbiA9IHRoaXMuY29uZGl0aW9uLnRvU3RyaW5nKG9wdGlvbnMpO1xuICAgIHZhciBjb25kaXRpb25QcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkodGhpcy5jb25kaXRpb24sIHBhcmVudGhlc2lzKTtcblxuICAgIGlmIChwYXJlbnRoZXNpcyA9PT0gJ2FsbCcgfHwgdGhpcy5jb25kaXRpb24udHlwZSA9PT0gJ09wZXJhdG9yTm9kZScgfHwgY29uZGl0aW9uUHJlY2VkZW5jZSAhPT0gbnVsbCAmJiBjb25kaXRpb25QcmVjZWRlbmNlIDw9IHByZWNlZGVuY2UpIHtcbiAgICAgIGNvbmRpdGlvbiA9ICcoJyArIGNvbmRpdGlvbiArICcpJztcbiAgICB9XG5cbiAgICB2YXIgdHJ1ZUV4cHIgPSB0aGlzLnRydWVFeHByLnRvU3RyaW5nKG9wdGlvbnMpO1xuICAgIHZhciB0cnVlUHJlY2VkZW5jZSA9ICgwLCBfb3BlcmF0b3JzLmdldFByZWNlZGVuY2UpKHRoaXMudHJ1ZUV4cHIsIHBhcmVudGhlc2lzKTtcblxuICAgIGlmIChwYXJlbnRoZXNpcyA9PT0gJ2FsbCcgfHwgdGhpcy50cnVlRXhwci50eXBlID09PSAnT3BlcmF0b3JOb2RlJyB8fCB0cnVlUHJlY2VkZW5jZSAhPT0gbnVsbCAmJiB0cnVlUHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlKSB7XG4gICAgICB0cnVlRXhwciA9ICcoJyArIHRydWVFeHByICsgJyknO1xuICAgIH1cblxuICAgIHZhciBmYWxzZUV4cHIgPSB0aGlzLmZhbHNlRXhwci50b1N0cmluZyhvcHRpb25zKTtcbiAgICB2YXIgZmFsc2VQcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkodGhpcy5mYWxzZUV4cHIsIHBhcmVudGhlc2lzKTtcblxuICAgIGlmIChwYXJlbnRoZXNpcyA9PT0gJ2FsbCcgfHwgdGhpcy5mYWxzZUV4cHIudHlwZSA9PT0gJ09wZXJhdG9yTm9kZScgfHwgZmFsc2VQcmVjZWRlbmNlICE9PSBudWxsICYmIGZhbHNlUHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlKSB7XG4gICAgICBmYWxzZUV4cHIgPSAnKCcgKyBmYWxzZUV4cHIgKyAnKSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmRpdGlvbiArICcgPyAnICsgdHJ1ZUV4cHIgKyAnIDogJyArIGZhbHNlRXhwcjtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGVcbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG5cblxuICBDb25kaXRpb25hbE5vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnQ29uZGl0aW9uYWxOb2RlJyxcbiAgICAgIGNvbmRpdGlvbjogdGhpcy5jb25kaXRpb24sXG4gICAgICB0cnVlRXhwcjogdGhpcy50cnVlRXhwcixcbiAgICAgIGZhbHNlRXhwcjogdGhpcy5mYWxzZUV4cHJcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogSW5zdGFudGlhdGUgYW4gQ29uZGl0aW9uYWxOb2RlIGZyb20gaXRzIEpTT04gcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIEFuIG9iamVjdCBzdHJ1Y3R1cmVkIGxpa2VcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJDb25kaXRpb25hbE5vZGVcIiwgXCJjb25kaXRpb25cIjogLi4uLCBcInRydWVFeHByXCI6IC4uLiwgXCJmYWxzZUV4cHJcIjogLi4ufWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge0NvbmRpdGlvbmFsTm9kZX1cbiAgICovXG5cblxuICBDb25kaXRpb25hbE5vZGUuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBuZXcgQ29uZGl0aW9uYWxOb2RlKGpzb24uY29uZGl0aW9uLCBqc29uLnRydWVFeHByLCBqc29uLmZhbHNlRXhwcik7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgSFRNTCByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIENvbmRpdGlvbmFsTm9kZS5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgcGFyZW50aGVzaXMgPSBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMgPyBvcHRpb25zLnBhcmVudGhlc2lzIDogJ2tlZXAnO1xuICAgIHZhciBwcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkodGhpcywgcGFyZW50aGVzaXMpOyAvLyBFbmNsb3NlIEFyZ3VtZW50cyBpbiBwYXJlbnRoZXNlcyBpZiB0aGV5IGFyZSBhbiBPcGVyYXRvck5vZGVcbiAgICAvLyBvciBoYXZlIGxvd2VyIG9yIGVxdWFsIHByZWNlZGVuY2VcbiAgICAvLyBOT1RFOiBlbmNsb3NpbmcgYWxsIE9wZXJhdG9yTm9kZXMgaW4gcGFyZW50aGVzZXMgaXMgYSBkZWNpc2lvblxuICAgIC8vIHB1cmVseSBiYXNlZCBvbiBhZXN0aGV0aWNzIGFuZCByZWFkYWJpbGl0eVxuXG4gICAgdmFyIGNvbmRpdGlvbiA9IHRoaXMuY29uZGl0aW9uLnRvSFRNTChvcHRpb25zKTtcbiAgICB2YXIgY29uZGl0aW9uUHJlY2VkZW5jZSA9ICgwLCBfb3BlcmF0b3JzLmdldFByZWNlZGVuY2UpKHRoaXMuY29uZGl0aW9uLCBwYXJlbnRoZXNpcyk7XG5cbiAgICBpZiAocGFyZW50aGVzaXMgPT09ICdhbGwnIHx8IHRoaXMuY29uZGl0aW9uLnR5cGUgPT09ICdPcGVyYXRvck5vZGUnIHx8IGNvbmRpdGlvblByZWNlZGVuY2UgIT09IG51bGwgJiYgY29uZGl0aW9uUHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlKSB7XG4gICAgICBjb25kaXRpb24gPSAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4oPC9zcGFuPicgKyBjb25kaXRpb24gKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4pPC9zcGFuPic7XG4gICAgfVxuXG4gICAgdmFyIHRydWVFeHByID0gdGhpcy50cnVlRXhwci50b0hUTUwob3B0aW9ucyk7XG4gICAgdmFyIHRydWVQcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkodGhpcy50cnVlRXhwciwgcGFyZW50aGVzaXMpO1xuXG4gICAgaWYgKHBhcmVudGhlc2lzID09PSAnYWxsJyB8fCB0aGlzLnRydWVFeHByLnR5cGUgPT09ICdPcGVyYXRvck5vZGUnIHx8IHRydWVQcmVjZWRlbmNlICE9PSBudWxsICYmIHRydWVQcmVjZWRlbmNlIDw9IHByZWNlZGVuY2UpIHtcbiAgICAgIHRydWVFeHByID0gJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KDwvc3Bhbj4nICsgdHJ1ZUV4cHIgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4pPC9zcGFuPic7XG4gICAgfVxuXG4gICAgdmFyIGZhbHNlRXhwciA9IHRoaXMuZmFsc2VFeHByLnRvSFRNTChvcHRpb25zKTtcbiAgICB2YXIgZmFsc2VQcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkodGhpcy5mYWxzZUV4cHIsIHBhcmVudGhlc2lzKTtcblxuICAgIGlmIChwYXJlbnRoZXNpcyA9PT0gJ2FsbCcgfHwgdGhpcy5mYWxzZUV4cHIudHlwZSA9PT0gJ09wZXJhdG9yTm9kZScgfHwgZmFsc2VQcmVjZWRlbmNlICE9PSBudWxsICYmIGZhbHNlUHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlKSB7XG4gICAgICBmYWxzZUV4cHIgPSAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4oPC9zcGFuPicgKyBmYWxzZUV4cHIgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4pPC9zcGFuPic7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmRpdGlvbiArICc8c3BhbiBjbGFzcz1cIm1hdGgtb3BlcmF0b3IgbWF0aC1jb25kaXRpb25hbC1vcGVyYXRvclwiPj88L3NwYW4+JyArIHRydWVFeHByICsgJzxzcGFuIGNsYXNzPVwibWF0aC1vcGVyYXRvciBtYXRoLWNvbmRpdGlvbmFsLW9wZXJhdG9yXCI+Ojwvc3Bhbj4nICsgZmFsc2VFeHByO1xuICB9O1xuICAvKipcbiAgICogR2V0IExhVGVYIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqL1xuXG5cbiAgQ29uZGl0aW9uYWxOb2RlLnByb3RvdHlwZS5fdG9UZXggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHJldHVybiAnXFxcXGJlZ2lue2Nhc2VzfSB7JyArIHRoaXMudHJ1ZUV4cHIudG9UZXgob3B0aW9ucykgKyAnfSwgJlxcXFxxdWFke1xcXFx0ZXh0e2lmIH1cXFxcOycgKyB0aGlzLmNvbmRpdGlvbi50b1RleChvcHRpb25zKSArICd9XFxcXFxcXFx7JyArIHRoaXMuZmFsc2VFeHByLnRvVGV4KG9wdGlvbnMpICsgJ30sICZcXFxccXVhZHtcXFxcdGV4dHtvdGhlcndpc2V9fVxcXFxlbmR7Y2FzZXN9JztcbiAgfTtcbiAgLyoqXG4gICAqIFRlc3Qgd2hldGhlciBhIGNvbmRpdGlvbiBpcyBtZXRcbiAgICogQHBhcmFtIHsqfSBjb25kaXRpb25cbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgY29uZGl0aW9uIGlzIHRydWUgb3Igbm9uLXplcm8sIGVsc2UgZmFsc2VcbiAgICovXG5cblxuICBmdW5jdGlvbiB0ZXN0Q29uZGl0aW9uKGNvbmRpdGlvbikge1xuICAgIGlmICh0eXBlb2YgY29uZGl0aW9uID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgY29uZGl0aW9uID09PSAnYm9vbGVhbicgfHwgdHlwZW9mIGNvbmRpdGlvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiAhIWNvbmRpdGlvbjtcbiAgICB9XG5cbiAgICBpZiAoY29uZGl0aW9uKSB7XG4gICAgICBpZiAoKDAsIF9pcy5pc0JpZ051bWJlcikoY29uZGl0aW9uKSkge1xuICAgICAgICByZXR1cm4gIWNvbmRpdGlvbi5pc1plcm8oKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCgwLCBfaXMuaXNDb21wbGV4KShjb25kaXRpb24pKSB7XG4gICAgICAgIHJldHVybiAhIShjb25kaXRpb24ucmUgfHwgY29uZGl0aW9uLmltKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCgwLCBfaXMuaXNVbml0KShjb25kaXRpb24pKSB7XG4gICAgICAgIHJldHVybiAhIWNvbmRpdGlvbi52YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29uZGl0aW9uID09PSBudWxsIHx8IGNvbmRpdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5zdXBwb3J0ZWQgdHlwZSBvZiBjb25kaXRpb24gXCInICsgKDAsIF9pcy50eXBlT2YpKGNvbmRpdGlvbikgKyAnXCInKTtcbiAgfVxuXG4gIHJldHVybiBDb25kaXRpb25hbE5vZGU7XG59LCB7XG4gIGlzQ2xhc3M6IHRydWUsXG4gIGlzTm9kZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNvbmRpdGlvbmFsTm9kZSA9IGNyZWF0ZUNvbmRpdGlvbmFsTm9kZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ29uc3RhbnROb2RlID0gdm9pZCAwO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfbGF0ZXggPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbGF0ZXhcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdDb25zdGFudE5vZGUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnTm9kZSddO1xudmFyIGNyZWF0ZUNvbnN0YW50Tm9kZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBOb2RlID0gX3JlZi5Ob2RlO1xuXG4gIC8qKlxuICAgKiBBIENvbnN0YW50Tm9kZSBob2xkcyBhIGNvbnN0YW50IHZhbHVlIGxpa2UgYSBudW1iZXIgb3Igc3RyaW5nLlxuICAgKlxuICAgKiBVc2FnZTpcbiAgICpcbiAgICogICAgIG5ldyBDb25zdGFudE5vZGUoMi4zKVxuICAgKiAgICAgbmV3IENvbnN0YW50Tm9kZSgnaGVsbG8nKVxuICAgKlxuICAgKiBAcGFyYW0geyp9IHZhbHVlICAgIFZhbHVlIGNhbiBiZSBhbnkgdHlwZSAobnVtYmVyLCBCaWdOdW1iZXIsIHN0cmluZywgLi4uKVxuICAgKiBAY29uc3RydWN0b3IgQ29uc3RhbnROb2RlXG4gICAqIEBleHRlbmRzIHtOb2RlfVxuICAgKi9cbiAgZnVuY3Rpb24gQ29uc3RhbnROb2RlKHZhbHVlKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIENvbnN0YW50Tm9kZSkpIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7XG4gICAgfVxuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICAgIC8vIFRPRE86IHJlbW92ZSBkZXByZWNhdGlvbiBlcnJvciBzb21lIGRheSAoY3JlYXRlZCAyMDE4LTAxLTIzKVxuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCduZXcgQ29uc3RhbnROb2RlKHZhbHVlU3RyLCB2YWx1ZVR5cGUpIGlzIG5vdCBzdXBwb3J0ZWQgYW55bW9yZSBzaW5jZSBtYXRoIHY0LjAuMC4gVXNlIG5ldyBDb25zdGFudE5vZGUodmFsdWUpIGluc3RlYWQsIHdoZXJlIHZhbHVlIGlzIGEgbm9uLXN0cmluZ2lmaWVkIHZhbHVlLicpO1xuICAgIH1cblxuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIENvbnN0YW50Tm9kZS5wcm90b3R5cGUgPSBuZXcgTm9kZSgpO1xuICBDb25zdGFudE5vZGUucHJvdG90eXBlLnR5cGUgPSAnQ29uc3RhbnROb2RlJztcbiAgQ29uc3RhbnROb2RlLnByb3RvdHlwZS5pc0NvbnN0YW50Tm9kZSA9IHRydWU7XG4gIC8qKlxuICAgKiBDb21waWxlIGEgbm9kZSBpbnRvIGEgSmF2YVNjcmlwdCBmdW5jdGlvbi5cbiAgICogVGhpcyBiYXNpY2FsbHkgcHJlLWNhbGN1bGF0ZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSBhbmQgb25seSBsZWF2ZXMgb3BlblxuICAgKiBjYWxjdWxhdGlvbnMgd2hpY2ggZGVwZW5kIG9uIGEgZHluYW1pYyBzY29wZSB3aXRoIHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG1hdGggICAgIE1hdGguanMgbmFtZXNwYWNlIHdpdGggZnVuY3Rpb25zIGFuZCBjb25zdGFudHMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdOYW1lcyBBbiBvYmplY3Qgd2l0aCBhcmd1bWVudCBuYW1lcyBhcyBrZXkgYW5kIGB0cnVlYFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdmFsdWUuIFVzZWQgaW4gdGhlIFN5bWJvbE5vZGUgdG8gb3B0aW1pemVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudHMgZnJvbSB1c2VyIGFzc2lnbmVkIGZ1bmN0aW9uc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZSBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKSBvciBzcGVjaWFsIHN5bWJvbHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UgYGVuZGAgKHNlZSBJbmRleE5vZGUpLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgbGlrZTpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICBldmFsTm9kZShzY29wZTogT2JqZWN0LCBhcmdzOiBPYmplY3QsIGNvbnRleHQ6ICopXG4gICAqL1xuXG4gIENvbnN0YW50Tm9kZS5wcm90b3R5cGUuX2NvbXBpbGUgPSBmdW5jdGlvbiAobWF0aCwgYXJnTmFtZXMpIHtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgIHJldHVybiBmdW5jdGlvbiBldmFsQ29uc3RhbnROb2RlKCkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGVhY2ggb2YgdGhlIGNoaWxkIG5vZGVzIG9mIHRoaXMgbm9kZVxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSl9IGNhbGxiYWNrXG4gICAqL1xuXG5cbiAgQ29uc3RhbnROb2RlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7fSAvLyBub3RoaW5nIHRvIGRvLCB3ZSBkb24ndCBoYXZlIGNoaWxkc1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgQ29uc3RhbnROb2RlIGhhdmluZyBpdCdzIGNoaWxkcyBiZSB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nXG4gICAqIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCBvZiB0aGUgY2hpbGRzIG9mIHRoZSBvcmlnaW5hbCBub2RlLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSkgOiBOb2RlfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7Q29uc3RhbnROb2RlfSBSZXR1cm5zIGEgY2xvbmUgb2YgdGhlIG5vZGVcbiAgICovXG4gIDtcblxuICBDb25zdGFudE5vZGUucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIG5vZGUsIGEgc2hhbGxvdyBjb3B5XG4gICAqIEByZXR1cm4ge0NvbnN0YW50Tm9kZX1cbiAgICovXG5cblxuICBDb25zdGFudE5vZGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgQ29uc3RhbnROb2RlKHRoaXMudmFsdWUpO1xuICB9O1xuICAvKipcbiAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIENvbnN0YW50Tm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gKDAsIF9zdHJpbmcuZm9ybWF0KSh0aGlzLnZhbHVlLCBvcHRpb25zKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBIVE1MIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqL1xuXG5cbiAgQ29uc3RhbnROb2RlLnByb3RvdHlwZS50b0hUTUwgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciB2YWx1ZSA9IHRoaXMuX3RvU3RyaW5nKG9wdGlvbnMpO1xuXG4gICAgc3dpdGNoICgoMCwgX2lzLnR5cGVPZikodGhpcy52YWx1ZSkpIHtcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICBjYXNlICdCaWdOdW1iZXInOlxuICAgICAgY2FzZSAnRnJhY3Rpb24nOlxuICAgICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1udW1iZXJcIj4nICsgdmFsdWUgKyAnPC9zcGFuPic7XG5cbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJtYXRoLXN0cmluZ1wiPicgKyB2YWx1ZSArICc8L3NwYW4+JztcblxuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJtYXRoLWJvb2xlYW5cIj4nICsgdmFsdWUgKyAnPC9zcGFuPic7XG5cbiAgICAgIGNhc2UgJ251bGwnOlxuICAgICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1udWxsLXN5bWJvbFwiPicgKyB2YWx1ZSArICc8L3NwYW4+JztcblxuICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgcmV0dXJuICc8c3BhbiBjbGFzcz1cIm1hdGgtdW5kZWZpbmVkXCI+JyArIHZhbHVlICsgJzwvc3Bhbj4nO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1zeW1ib2xcIj4nICsgdmFsdWUgKyAnPC9zcGFuPic7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cblxuXG4gIENvbnN0YW50Tm9kZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdDb25zdGFudE5vZGUnLFxuICAgICAgdmFsdWU6IHRoaXMudmFsdWVcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogSW5zdGFudGlhdGUgYSBDb25zdGFudE5vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIlN5bWJvbE5vZGVcIiwgdmFsdWU6IDIuM31gLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgbWF0aGpzIGlzIG9wdGlvbmFsXG4gICAqIEByZXR1cm5zIHtDb25zdGFudE5vZGV9XG4gICAqL1xuXG5cbiAgQ29uc3RhbnROb2RlLmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICByZXR1cm4gbmV3IENvbnN0YW50Tm9kZShqc29uLnZhbHVlKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBMYVRlWCByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIENvbnN0YW50Tm9kZS5wcm90b3R5cGUuX3RvVGV4ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLl90b1N0cmluZyhvcHRpb25zKTtcblxuICAgIHN3aXRjaCAoKDAsIF9pcy50eXBlT2YpKHRoaXMudmFsdWUpKSB7XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICByZXR1cm4gJ1xcXFxtYXRodHR7JyArICgwLCBfbGF0ZXguZXNjYXBlTGF0ZXgpKHZhbHVlKSArICd9JztcblxuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIGNhc2UgJ0JpZ051bWJlcic6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoIWlzRmluaXRlKHRoaXMudmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZS52YWx1ZU9mKCkgPCAwID8gJy1cXFxcaW5mdHknIDogJ1xcXFxpbmZ0eSc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGluZGV4ID0gdmFsdWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdlJyk7XG5cbiAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUuc3Vic3RyaW5nKDAsIGluZGV4KSArICdcXFxcY2RvdDEwXnsnICsgdmFsdWUuc3Vic3RyaW5nKGluZGV4ICsgMSkgKyAnfSc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcblxuICAgICAgY2FzZSAnRnJhY3Rpb24nOlxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZS50b0xhdGV4KCk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIENvbnN0YW50Tm9kZTtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZSxcbiAgaXNOb2RlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ29uc3RhbnROb2RlID0gY3JlYXRlQ29uc3RhbnROb2RlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVGdW5jdGlvbkFzc2lnbm1lbnROb2RlID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2tleXdvcmRzID0gcmVxdWlyZShcIi4uL2tleXdvcmRzXCIpO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfbGF0ZXggPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbGF0ZXhcIik7XG5cbnZhciBfb3BlcmF0b3JzID0gcmVxdWlyZShcIi4uL29wZXJhdG9yc1wiKTtcblxudmFyIF9jdXN0b21zID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2N1c3RvbXNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdGdW5jdGlvbkFzc2lnbm1lbnROb2RlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ05vZGUnXTtcbnZhciBjcmVhdGVGdW5jdGlvbkFzc2lnbm1lbnROb2RlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIE5vZGUgPSBfcmVmLk5vZGU7XG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvciBGdW5jdGlvbkFzc2lnbm1lbnROb2RlXG4gICAqIEBleHRlbmRzIHtOb2RlfVxuICAgKiBGdW5jdGlvbiBhc3NpZ25tZW50XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lICAgICAgICAgICBGdW5jdGlvbiBuYW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nW10gfCBBcnJheS48e25hbWU6IHN0cmluZywgdHlwZTogc3RyaW5nfT59IHBhcmFtc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkgd2l0aCBmdW5jdGlvbiBwYXJhbWV0ZXIgbmFtZXMsIG9yIGFuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSB3aXRoIG9iamVjdHMgY29udGFpbmluZyB0aGUgbmFtZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHR5cGUgb2YgdGhlIHBhcmFtZXRlclxuICAgKiBAcGFyYW0ge05vZGV9IGV4cHIgICAgICAgICAgICAgVGhlIGZ1bmN0aW9uIGV4cHJlc3Npb25cbiAgICovXG4gIGZ1bmN0aW9uIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUobmFtZSwgcGFyYW1zLCBleHByKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH0gLy8gdmFsaWRhdGUgaW5wdXRcblxuXG4gICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykgdGhyb3cgbmV3IFR5cGVFcnJvcignU3RyaW5nIGV4cGVjdGVkIGZvciBwYXJhbWV0ZXIgXCJuYW1lXCInKTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocGFyYW1zKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgY29udGFpbmluZyBzdHJpbmdzIG9yIG9iamVjdHMgZXhwZWN0ZWQgZm9yIHBhcmFtZXRlciBcInBhcmFtc1wiJyk7XG4gICAgaWYgKCEoMCwgX2lzLmlzTm9kZSkoZXhwcikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vZGUgZXhwZWN0ZWQgZm9yIHBhcmFtZXRlciBcImV4cHJcIicpO1xuICAgIGlmIChuYW1lIGluIF9rZXl3b3Jkcy5rZXl3b3JkcykgdGhyb3cgbmV3IEVycm9yKCdJbGxlZ2FsIGZ1bmN0aW9uIG5hbWUsIFwiJyArIG5hbWUgKyAnXCIgaXMgYSByZXNlcnZlZCBrZXl3b3JkJyk7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLnBhcmFtcyA9IHBhcmFtcy5tYXAoZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICByZXR1cm4gcGFyYW0gJiYgcGFyYW0ubmFtZSB8fCBwYXJhbTtcbiAgICB9KTtcbiAgICB0aGlzLnR5cGVzID0gcGFyYW1zLm1hcChmdW5jdGlvbiAocGFyYW0pIHtcbiAgICAgIHJldHVybiBwYXJhbSAmJiBwYXJhbS50eXBlIHx8ICdhbnknO1xuICAgIH0pO1xuICAgIHRoaXMuZXhwciA9IGV4cHI7XG4gIH1cblxuICBGdW5jdGlvbkFzc2lnbm1lbnROb2RlLnByb3RvdHlwZSA9IG5ldyBOb2RlKCk7XG4gIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUucHJvdG90eXBlLnR5cGUgPSAnRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSc7XG4gIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUucHJvdG90eXBlLmlzRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSA9IHRydWU7XG4gIC8qKlxuICAgKiBDb21waWxlIGEgbm9kZSBpbnRvIGEgSmF2YVNjcmlwdCBmdW5jdGlvbi5cbiAgICogVGhpcyBiYXNpY2FsbHkgcHJlLWNhbGN1bGF0ZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSBhbmQgb25seSBsZWF2ZXMgb3BlblxuICAgKiBjYWxjdWxhdGlvbnMgd2hpY2ggZGVwZW5kIG9uIGEgZHluYW1pYyBzY29wZSB3aXRoIHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG1hdGggICAgIE1hdGguanMgbmFtZXNwYWNlIHdpdGggZnVuY3Rpb25zIGFuZCBjb25zdGFudHMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdOYW1lcyBBbiBvYmplY3Qgd2l0aCBhcmd1bWVudCBuYW1lcyBhcyBrZXkgYW5kIGB0cnVlYFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdmFsdWUuIFVzZWQgaW4gdGhlIFN5bWJvbE5vZGUgdG8gb3B0aW1pemVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudHMgZnJvbSB1c2VyIGFzc2lnbmVkIGZ1bmN0aW9uc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZSBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKSBvciBzcGVjaWFsIHN5bWJvbHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UgYGVuZGAgKHNlZSBJbmRleE5vZGUpLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgbGlrZTpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICBldmFsTm9kZShzY29wZTogT2JqZWN0LCBhcmdzOiBPYmplY3QsIGNvbnRleHQ6ICopXG4gICAqL1xuXG4gIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUucHJvdG90eXBlLl9jb21waWxlID0gZnVuY3Rpb24gKG1hdGgsIGFyZ05hbWVzKSB7XG4gICAgdmFyIGNoaWxkQXJnTmFtZXMgPSBPYmplY3QuY3JlYXRlKGFyZ05hbWVzKTtcbiAgICAoMCwgX2FycmF5LmZvckVhY2gpKHRoaXMucGFyYW1zLCBmdW5jdGlvbiAocGFyYW0pIHtcbiAgICAgIGNoaWxkQXJnTmFtZXNbcGFyYW1dID0gdHJ1ZTtcbiAgICB9KTsgLy8gY29tcGlsZSB0aGUgZnVuY3Rpb24gZXhwcmVzc2lvbiB3aXRoIHRoZSBjaGlsZCBhcmdzXG5cbiAgICB2YXIgZXZhbEV4cHIgPSB0aGlzLmV4cHIuX2NvbXBpbGUobWF0aCwgY2hpbGRBcmdOYW1lcyk7XG5cbiAgICB2YXIgbmFtZSA9IHRoaXMubmFtZTtcbiAgICB2YXIgcGFyYW1zID0gdGhpcy5wYXJhbXM7XG4gICAgdmFyIHNpZ25hdHVyZSA9ICgwLCBfYXJyYXkuam9pbikodGhpcy50eXBlcywgJywnKTtcbiAgICB2YXIgc3ludGF4ID0gbmFtZSArICcoJyArICgwLCBfYXJyYXkuam9pbikodGhpcy5wYXJhbXMsICcsICcpICsgJyknO1xuICAgIHJldHVybiBmdW5jdGlvbiBldmFsRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgdmFyIHNpZ25hdHVyZXMgPSB7fTtcblxuICAgICAgc2lnbmF0dXJlc1tzaWduYXR1cmVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY2hpbGRBcmdzID0gT2JqZWN0LmNyZWF0ZShhcmdzKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNoaWxkQXJnc1twYXJhbXNbaV1dID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGV2YWxFeHByKHNjb3BlLCBjaGlsZEFyZ3MsIGNvbnRleHQpO1xuICAgICAgfTtcblxuICAgICAgdmFyIGZuID0gdHlwZWQobmFtZSwgc2lnbmF0dXJlcyk7XG4gICAgICBmbi5zeW50YXggPSBzeW50YXg7XG4gICAgICAoMCwgX2N1c3RvbXMuc2V0U2FmZVByb3BlcnR5KShzY29wZSwgbmFtZSwgZm4pO1xuICAgICAgcmV0dXJuIGZuO1xuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGVhY2ggb2YgdGhlIGNoaWxkIG5vZGVzIG9mIHRoaXMgbm9kZVxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSl9IGNhbGxiYWNrXG4gICAqL1xuXG5cbiAgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIGNhbGxiYWNrKHRoaXMuZXhwciwgJ2V4cHInLCB0aGlzKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBGdW5jdGlvbkFzc2lnbm1lbnROb2RlIGhhdmluZyBpdCdzIGNoaWxkcyBiZSB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nXG4gICAqIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCBvZiB0aGUgY2hpbGRzIG9mIHRoZSBvcmlnaW5hbCBub2RlLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSk6IE5vZGV9IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbkFzc2lnbm1lbnROb2RlfSBSZXR1cm5zIGEgdHJhbnNmb3JtZWQgY29weSBvZiB0aGUgbm9kZVxuICAgKi9cblxuXG4gIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHZhciBleHByID0gdGhpcy5faWZOb2RlKGNhbGxiYWNrKHRoaXMuZXhwciwgJ2V4cHInLCB0aGlzKSk7XG5cbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uQXNzaWdubWVudE5vZGUodGhpcy5uYW1lLCB0aGlzLnBhcmFtcy5zbGljZSgwKSwgZXhwcik7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIG5vZGUsIGEgc2hhbGxvdyBjb3B5XG4gICAqIEByZXR1cm4ge0Z1bmN0aW9uQXNzaWdubWVudE5vZGV9XG4gICAqL1xuXG5cbiAgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKHRoaXMubmFtZSwgdGhpcy5wYXJhbXMuc2xpY2UoMCksIHRoaXMuZXhwcik7XG4gIH07XG4gIC8qKlxuICAgKiBJcyBwYXJlbnRoZXNpcyBuZWVkZWQ/XG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyZW50aGVzaXNcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBuZWVkUGFyZW50aGVzaXMobm9kZSwgcGFyZW50aGVzaXMpIHtcbiAgICB2YXIgcHJlY2VkZW5jZSA9ICgwLCBfb3BlcmF0b3JzLmdldFByZWNlZGVuY2UpKG5vZGUsIHBhcmVudGhlc2lzKTtcbiAgICB2YXIgZXhwclByZWNlZGVuY2UgPSAoMCwgX29wZXJhdG9ycy5nZXRQcmVjZWRlbmNlKShub2RlLmV4cHIsIHBhcmVudGhlc2lzKTtcbiAgICByZXR1cm4gcGFyZW50aGVzaXMgPT09ICdhbGwnIHx8IGV4cHJQcmVjZWRlbmNlICE9PSBudWxsICYmIGV4cHJQcmVjZWRlbmNlIDw9IHByZWNlZGVuY2U7XG4gIH1cbiAgLyoqXG4gICAqIGdldCBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBGdW5jdGlvbkFzc2lnbm1lbnROb2RlLnByb3RvdHlwZS5fdG9TdHJpbmcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBwYXJlbnRoZXNpcyA9IG9wdGlvbnMgJiYgb3B0aW9ucy5wYXJlbnRoZXNpcyA/IG9wdGlvbnMucGFyZW50aGVzaXMgOiAna2VlcCc7XG4gICAgdmFyIGV4cHIgPSB0aGlzLmV4cHIudG9TdHJpbmcob3B0aW9ucyk7XG5cbiAgICBpZiAobmVlZFBhcmVudGhlc2lzKHRoaXMsIHBhcmVudGhlc2lzKSkge1xuICAgICAgZXhwciA9ICcoJyArIGV4cHIgKyAnKSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubmFtZSArICcoJyArIHRoaXMucGFyYW1zLmpvaW4oJywgJykgKyAnKSA9ICcgKyBleHByO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cblxuXG4gIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdHlwZXMgPSB0aGlzLnR5cGVzO1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdGdW5jdGlvbkFzc2lnbm1lbnROb2RlJyxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIHBhcmFtczogdGhpcy5wYXJhbXMubWFwKGZ1bmN0aW9uIChwYXJhbSwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBwYXJhbSxcbiAgICAgICAgICB0eXBlOiB0eXBlc1tpbmRleF1cbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICAgZXhwcjogdGhpcy5leHByXG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIEluc3RhbnRpYXRlIGFuIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIkZ1bmN0aW9uQXNzaWdubWVudE5vZGVcIiwgbmFtZTogLi4uLCBwYXJhbXM6IC4uLiwgZXhwcjogLi4ufWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge0Z1bmN0aW9uQXNzaWdubWVudE5vZGV9XG4gICAqL1xuXG5cbiAgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZS5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKGpzb24ubmFtZSwganNvbi5wYXJhbXMsIGpzb24uZXhwcik7XG4gIH07XG4gIC8qKlxuICAgKiBnZXQgSFRNTCByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUucHJvdG90eXBlLnRvSFRNTCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIHBhcmVudGhlc2lzID0gb3B0aW9ucyAmJiBvcHRpb25zLnBhcmVudGhlc2lzID8gb3B0aW9ucy5wYXJlbnRoZXNpcyA6ICdrZWVwJztcbiAgICB2YXIgcGFyYW1zID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFyYW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBwYXJhbXMucHVzaCgnPHNwYW4gY2xhc3M9XCJtYXRoLXN5bWJvbCBtYXRoLXBhcmFtZXRlclwiPicgKyAoMCwgX3N0cmluZy5lc2NhcGUpKHRoaXMucGFyYW1zW2ldKSArICc8L3NwYW4+Jyk7XG4gICAgfVxuXG4gICAgdmFyIGV4cHIgPSB0aGlzLmV4cHIudG9IVE1MKG9wdGlvbnMpO1xuXG4gICAgaWYgKG5lZWRQYXJlbnRoZXNpcyh0aGlzLCBwYXJlbnRoZXNpcykpIHtcbiAgICAgIGV4cHIgPSAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4oPC9zcGFuPicgKyBleHByICsgJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KTwvc3Bhbj4nO1xuICAgIH1cblxuICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJtYXRoLWZ1bmN0aW9uXCI+JyArICgwLCBfc3RyaW5nLmVzY2FwZSkodGhpcy5uYW1lKSArICc8L3NwYW4+JyArICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPig8L3NwYW4+JyArIHBhcmFtcy5qb2luKCc8c3BhbiBjbGFzcz1cIm1hdGgtc2VwYXJhdG9yXCI+LDwvc3Bhbj4nKSArICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPik8L3NwYW4+PHNwYW4gY2xhc3M9XCJtYXRoLW9wZXJhdG9yIG1hdGgtYXNzaWdubWVudC1vcGVyYXRvciBtYXRoLXZhcmlhYmxlLWFzc2lnbm1lbnQtb3BlcmF0b3IgbWF0aC1iaW5hcnktb3BlcmF0b3JcIj49PC9zcGFuPicgKyBleHByO1xuICB9O1xuICAvKipcbiAgICogZ2V0IExhVGVYIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqL1xuXG5cbiAgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUuX3RvVGV4ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgcGFyZW50aGVzaXMgPSBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMgPyBvcHRpb25zLnBhcmVudGhlc2lzIDogJ2tlZXAnO1xuICAgIHZhciBleHByID0gdGhpcy5leHByLnRvVGV4KG9wdGlvbnMpO1xuXG4gICAgaWYgKG5lZWRQYXJlbnRoZXNpcyh0aGlzLCBwYXJlbnRoZXNpcykpIHtcbiAgICAgIGV4cHIgPSBcIlxcXFxsZWZ0KFwiLmNvbmNhdChleHByLCBcIlxcXFxyaWdodClcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuICdcXFxcbWF0aHJteycgKyB0aGlzLm5hbWUgKyAnfVxcXFxsZWZ0KCcgKyB0aGlzLnBhcmFtcy5tYXAoX2xhdGV4LnRvU3ltYm9sKS5qb2luKCcsJykgKyAnXFxcXHJpZ2h0KTo9JyArIGV4cHI7XG4gIH07XG5cbiAgcmV0dXJuIEZ1bmN0aW9uQXNzaWdubWVudE5vZGU7XG59LCB7XG4gIGlzQ2xhc3M6IHRydWUsXG4gIGlzTm9kZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUZ1bmN0aW9uQXNzaWdubWVudE5vZGUgPSBjcmVhdGVGdW5jdGlvbkFzc2lnbm1lbnROb2RlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVGdW5jdGlvbk5vZGUgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3N0cmluZ1wiKTtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2N1c3RvbXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY3VzdG9tc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfbGF0ZXggPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbGF0ZXhcIik7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxudmFyIG5hbWUgPSAnRnVuY3Rpb25Ob2RlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ21hdGgnLCAnTm9kZScsICdTeW1ib2xOb2RlJ107XG52YXIgY3JlYXRlRnVuY3Rpb25Ob2RlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIG1hdGggPSBfcmVmLm1hdGgsXG4gICAgICBOb2RlID0gX3JlZi5Ob2RlLFxuICAgICAgU3ltYm9sTm9kZSA9IF9yZWYuU3ltYm9sTm9kZTtcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yIEZ1bmN0aW9uTm9kZVxuICAgKiBAZXh0ZW5kcyB7Li9Ob2RlfVxuICAgKiBpbnZva2UgYSBsaXN0IHdpdGggYXJndW1lbnRzIG9uIGEgbm9kZVxuICAgKiBAcGFyYW0gey4vTm9kZSB8IHN0cmluZ30gZm4gTm9kZSByZXNvbHZpbmcgd2l0aCBhIGZ1bmN0aW9uIG9uIHdoaWNoIHRvIGludm9rZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGFyZ3VtZW50cywgdHlwaWNhbGx5IGEgU3ltYm9Ob2RlIG9yIEFjY2Vzc29yTm9kZVxuICAgKiBAcGFyYW0gey4vTm9kZVtdfSBhcmdzXG4gICAqL1xuICBmdW5jdGlvbiBGdW5jdGlvbk5vZGUoZm4sIGFyZ3MpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRnVuY3Rpb25Ob2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnc3RyaW5nJykge1xuICAgICAgZm4gPSBuZXcgU3ltYm9sTm9kZShmbik7XG4gICAgfSAvLyB2YWxpZGF0ZSBpbnB1dFxuXG5cbiAgICBpZiAoISgwLCBfaXMuaXNOb2RlKShmbikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vZGUgZXhwZWN0ZWQgYXMgcGFyYW1ldGVyIFwiZm5cIicpO1xuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFyZ3MpIHx8ICFhcmdzLmV2ZXJ5KF9pcy5pc05vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSBjb250YWluaW5nIE5vZGVzIGV4cGVjdGVkIGZvciBwYXJhbWV0ZXIgXCJhcmdzXCInKTtcbiAgICB9XG5cbiAgICB0aGlzLmZuID0gZm47XG4gICAgdGhpcy5hcmdzID0gYXJncyB8fCBbXTsgLy8gcmVhZG9ubHkgcHJvcGVydHkgbmFtZVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICduYW1lJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZuLm5hbWUgfHwgJyc7XG4gICAgICB9LmJpbmQodGhpcyksXG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldCgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgYXNzaWduIGEgbmV3IG5hbWUsIG5hbWUgaXMgcmVhZC1vbmx5Jyk7XG4gICAgICB9XG4gICAgfSk7IC8vIFRPRE86IGRlcHJlY2F0ZWQgc2luY2UgdjMsIHJlbW92ZSBzb21lIGRheVxuXG4gICAgdmFyIGRlcHJlY2F0ZWQgPSBmdW5jdGlvbiBkZXByZWNhdGVkKCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm9wZXJ0eSBgRnVuY3Rpb25Ob2RlLm9iamVjdGAgaXMgZGVwcmVjYXRlZCwgdXNlIGBGdW5jdGlvbk5vZGUuZm5gIGluc3RlYWQnKTtcbiAgICB9O1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdvYmplY3QnLCB7XG4gICAgICBnZXQ6IGRlcHJlY2F0ZWQsXG4gICAgICBzZXQ6IGRlcHJlY2F0ZWRcbiAgICB9KTtcbiAgfVxuXG4gIEZ1bmN0aW9uTm9kZS5wcm90b3R5cGUgPSBuZXcgTm9kZSgpO1xuICBGdW5jdGlvbk5vZGUucHJvdG90eXBlLnR5cGUgPSAnRnVuY3Rpb25Ob2RlJztcbiAgRnVuY3Rpb25Ob2RlLnByb3RvdHlwZS5pc0Z1bmN0aW9uTm9kZSA9IHRydWU7XG4gIC8qKlxuICAgKiBDb21waWxlIGEgbm9kZSBpbnRvIGEgSmF2YVNjcmlwdCBmdW5jdGlvbi5cbiAgICogVGhpcyBiYXNpY2FsbHkgcHJlLWNhbGN1bGF0ZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSBhbmQgb25seSBsZWF2ZXMgb3BlblxuICAgKiBjYWxjdWxhdGlvbnMgd2hpY2ggZGVwZW5kIG9uIGEgZHluYW1pYyBzY29wZSB3aXRoIHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG1hdGggICAgIE1hdGguanMgbmFtZXNwYWNlIHdpdGggZnVuY3Rpb25zIGFuZCBjb25zdGFudHMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdOYW1lcyBBbiBvYmplY3Qgd2l0aCBhcmd1bWVudCBuYW1lcyBhcyBrZXkgYW5kIGB0cnVlYFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdmFsdWUuIFVzZWQgaW4gdGhlIFN5bWJvbE5vZGUgdG8gb3B0aW1pemVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudHMgZnJvbSB1c2VyIGFzc2lnbmVkIGZ1bmN0aW9uc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZSBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKSBvciBzcGVjaWFsIHN5bWJvbHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UgYGVuZGAgKHNlZSBJbmRleE5vZGUpLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgbGlrZTpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICBldmFsTm9kZShzY29wZTogT2JqZWN0LCBhcmdzOiBPYmplY3QsIGNvbnRleHQ6ICopXG4gICAqL1xuXG4gIEZ1bmN0aW9uTm9kZS5wcm90b3R5cGUuX2NvbXBpbGUgPSBmdW5jdGlvbiAobWF0aCwgYXJnTmFtZXMpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRnVuY3Rpb25Ob2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gdmFsaWQgRnVuY3Rpb25Ob2RlJyk7XG4gICAgfSAvLyBjb21waWxlIGFyZ3VtZW50c1xuXG5cbiAgICB2YXIgZXZhbEFyZ3MgPSAoMCwgX2FycmF5Lm1hcCkodGhpcy5hcmdzLCBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICByZXR1cm4gYXJnLl9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTtcbiAgICB9KTtcblxuICAgIGlmICgoMCwgX2lzLmlzU3ltYm9sTm9kZSkodGhpcy5mbikpIHtcbiAgICAgIC8vIHdlIGNhbiBzdGF0aWNhbGx5IGRldGVybWluZSB3aGV0aGVyIHRoZSBmdW5jdGlvbiBoYXMgYW4gcmF3QXJncyBwcm9wZXJ0eVxuICAgICAgdmFyIF9uYW1lID0gdGhpcy5mbi5uYW1lO1xuICAgICAgdmFyIGZuID0gX25hbWUgaW4gbWF0aCA/ICgwLCBfY3VzdG9tcy5nZXRTYWZlUHJvcGVydHkpKG1hdGgsIF9uYW1lKSA6IHVuZGVmaW5lZDtcbiAgICAgIHZhciBpc1JhdyA9IHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJyAmJiBmbi5yYXdBcmdzID09PSB0cnVlO1xuXG4gICAgICBpZiAoaXNSYXcpIHtcbiAgICAgICAgLy8gcGFzcyB1bmV2YWx1YXRlZCBwYXJhbWV0ZXJzIChub2RlcykgdG8gdGhlIGZ1bmN0aW9uXG4gICAgICAgIC8vIFwicmF3XCIgZXZhbHVhdGlvblxuICAgICAgICB2YXIgcmF3QXJncyA9IHRoaXMuYXJncztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxGdW5jdGlvbk5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgICByZXR1cm4gKF9uYW1lIGluIHNjb3BlID8gKDAsIF9jdXN0b21zLmdldFNhZmVQcm9wZXJ0eSkoc2NvcGUsIF9uYW1lKSA6IGZuKShyYXdBcmdzLCBtYXRoLCBfZXh0ZW5kcyh7fSwgc2NvcGUsIGFyZ3MpKTtcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFwicmVndWxhclwiIGV2YWx1YXRpb25cbiAgICAgICAgaWYgKGV2YWxBcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIHZhciBldmFsQXJnMCA9IGV2YWxBcmdzWzBdO1xuICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBldmFsRnVuY3Rpb25Ob2RlKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICAgICAgICByZXR1cm4gKF9uYW1lIGluIHNjb3BlID8gKDAsIF9jdXN0b21zLmdldFNhZmVQcm9wZXJ0eSkoc2NvcGUsIF9uYW1lKSA6IGZuKShldmFsQXJnMChzY29wZSwgYXJncywgY29udGV4dCkpO1xuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoZXZhbEFyZ3MubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgdmFyIF9ldmFsQXJnID0gZXZhbEFyZ3NbMF07XG4gICAgICAgICAgdmFyIGV2YWxBcmcxID0gZXZhbEFyZ3NbMV07XG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxGdW5jdGlvbk5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgICAgIHJldHVybiAoX25hbWUgaW4gc2NvcGUgPyAoMCwgX2N1c3RvbXMuZ2V0U2FmZVByb3BlcnR5KShzY29wZSwgX25hbWUpIDogZm4pKF9ldmFsQXJnKHNjb3BlLCBhcmdzLCBjb250ZXh0KSwgZXZhbEFyZzEoc2NvcGUsIGFyZ3MsIGNvbnRleHQpKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBldmFsRnVuY3Rpb25Ob2RlKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICAgICAgICByZXR1cm4gKF9uYW1lIGluIHNjb3BlID8gKDAsIF9jdXN0b21zLmdldFNhZmVQcm9wZXJ0eSkoc2NvcGUsIF9uYW1lKSA6IGZuKS5hcHBseShudWxsLCAoMCwgX2FycmF5Lm1hcCkoZXZhbEFyZ3MsIGZ1bmN0aW9uIChldmFsQXJnKSB7XG4gICAgICAgICAgICAgIHJldHVybiBldmFsQXJnKHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQWNjZXNzb3JOb2RlKSh0aGlzLmZuKSAmJiAoMCwgX2lzLmlzSW5kZXhOb2RlKSh0aGlzLmZuLmluZGV4KSAmJiB0aGlzLmZuLmluZGV4LmlzT2JqZWN0UHJvcGVydHkoKSkge1xuICAgICAgLy8gZXhlY3V0ZSB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgcmlnaHQgY29udGV4dDogdGhlIG9iamVjdCBvZiB0aGUgQWNjZXNzb3JOb2RlXG4gICAgICB2YXIgZXZhbE9iamVjdCA9IHRoaXMuZm4ub2JqZWN0Ll9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTtcblxuICAgICAgdmFyIHByb3AgPSB0aGlzLmZuLmluZGV4LmdldE9iamVjdFByb3BlcnR5KCk7XG4gICAgICB2YXIgX3Jhd0FyZ3MgPSB0aGlzLmFyZ3M7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gZXZhbEZ1bmN0aW9uTm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICB2YXIgb2JqZWN0ID0gZXZhbE9iamVjdChzY29wZSwgYXJncywgY29udGV4dCk7XG4gICAgICAgICgwLCBfY3VzdG9tcy52YWxpZGF0ZVNhZmVNZXRob2QpKG9iamVjdCwgcHJvcCk7XG4gICAgICAgIHZhciBpc1JhdyA9IG9iamVjdFtwcm9wXSAmJiBvYmplY3RbcHJvcF0ucmF3QXJncztcbiAgICAgICAgcmV0dXJuIGlzUmF3ID8gb2JqZWN0W3Byb3BdKF9yYXdBcmdzLCBtYXRoLCBfZXh0ZW5kcyh7fSwgc2NvcGUsIGFyZ3MpKSAvLyBcInJhd1wiIGV2YWx1YXRpb25cbiAgICAgICAgOiBvYmplY3RbcHJvcF0uYXBwbHkob2JqZWN0LCAoMCwgX2FycmF5Lm1hcCkoZXZhbEFyZ3MsIGZ1bmN0aW9uIChldmFsQXJnKSB7XG4gICAgICAgICAgLy8gXCJyZWd1bGFyXCIgZXZhbHVhdGlvblxuICAgICAgICAgIHJldHVybiBldmFsQXJnKHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcbiAgICAgICAgfSkpO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gbm9kZS5mbi5pc0FjY2Vzc29yTm9kZSAmJiAhbm9kZS5mbi5pbmRleC5pc09iamVjdFByb3BlcnR5KClcbiAgICAgIC8vIHdlIGhhdmUgdG8gZHluYW1pY2FsbHkgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGZ1bmN0aW9uIGhhcyBhIHJhd0FyZ3MgcHJvcGVydHlcbiAgICAgIHZhciBldmFsRm4gPSB0aGlzLmZuLl9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTtcblxuICAgICAgdmFyIF9yYXdBcmdzMiA9IHRoaXMuYXJncztcbiAgICAgIHJldHVybiBmdW5jdGlvbiBldmFsRnVuY3Rpb25Ob2RlKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICAgIHZhciBmbiA9IGV2YWxGbihzY29wZSwgYXJncywgY29udGV4dCk7XG4gICAgICAgIHZhciBpc1JhdyA9IGZuICYmIGZuLnJhd0FyZ3M7XG4gICAgICAgIHJldHVybiBpc1JhdyA/IGZuKF9yYXdBcmdzMiwgbWF0aCwgX2V4dGVuZHMoe30sIHNjb3BlLCBhcmdzKSkgLy8gXCJyYXdcIiBldmFsdWF0aW9uXG4gICAgICAgIDogZm4uYXBwbHkoZm4sICgwLCBfYXJyYXkubWFwKShldmFsQXJncywgZnVuY3Rpb24gKGV2YWxBcmcpIHtcbiAgICAgICAgICAvLyBcInJlZ3VsYXJcIiBldmFsdWF0aW9uXG4gICAgICAgICAgcmV0dXJuIGV2YWxBcmcoc2NvcGUsIGFyZ3MsIGNvbnRleHQpO1xuICAgICAgICB9KSk7XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZWFjaCBvZiB0aGUgY2hpbGQgbm9kZXMgb2YgdGhpcyBub2RlXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKX0gY2FsbGJhY2tcbiAgICovXG5cblxuICBGdW5jdGlvbk5vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBjYWxsYmFjayh0aGlzLmZuLCAnZm4nLCB0aGlzKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjYWxsYmFjayh0aGlzLmFyZ3NbaV0sICdhcmdzWycgKyBpICsgJ10nLCB0aGlzKTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgRnVuY3Rpb25Ob2RlIGhhdmluZyBpdCdzIGNoaWxkcyBiZSB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nXG4gICAqIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCBvZiB0aGUgY2hpbGRzIG9mIHRoZSBvcmlnaW5hbCBub2RlLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSk6IE5vZGV9IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbk5vZGV9IFJldHVybnMgYSB0cmFuc2Zvcm1lZCBjb3B5IG9mIHRoZSBub2RlXG4gICAqL1xuXG5cbiAgRnVuY3Rpb25Ob2RlLnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICB2YXIgZm4gPSB0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy5mbiwgJ2ZuJywgdGhpcykpO1xuXG4gICAgdmFyIGFyZ3MgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcmdzW2ldID0gdGhpcy5faWZOb2RlKGNhbGxiYWNrKHRoaXMuYXJnc1tpXSwgJ2FyZ3NbJyArIGkgKyAnXScsIHRoaXMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uTm9kZShmbiwgYXJncyk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIG5vZGUsIGEgc2hhbGxvdyBjb3B5XG4gICAqIEByZXR1cm4ge0Z1bmN0aW9uTm9kZX1cbiAgICovXG5cblxuICBGdW5jdGlvbk5vZGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb25Ob2RlKHRoaXMuZm4sIHRoaXMuYXJncy5zbGljZSgwKSk7XG4gIH07IC8vIGJhY2t1cCBOb2RlJ3MgdG9TdHJpbmcgZnVuY3Rpb25cbiAgLy8gQHByaXZhdGVcblxuXG4gIHZhciBub2RlVG9TdHJpbmcgPSBGdW5jdGlvbk5vZGUucHJvdG90eXBlLnRvU3RyaW5nO1xuICAvKipcbiAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvbi4gKHdyYXBwZXIgZnVuY3Rpb24pXG4gICAqIFRoaXMgb3ZlcnJpZGVzIHBhcnRzIG9mIE5vZGUncyB0b1N0cmluZyBmdW5jdGlvbi5cbiAgICogSWYgY2FsbGJhY2sgaXMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgY2FsbGJhY2tzLCBpdFxuICAgKiBjYWxscyB0aGUgY29ycmVjdCBjYWxsYmFjayBmb3IgdGhlIGN1cnJlbnQgbm9kZSxcbiAgICogb3RoZXJ3aXNlIGl0IGZhbGxzIGJhY2sgdG8gY2FsbGluZyBOb2RlJ3MgdG9TdHJpbmdcbiAgICogZnVuY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqIEBvdmVycmlkZVxuICAgKi9cblxuICBGdW5jdGlvbk5vZGUucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgY3VzdG9tU3RyaW5nO1xuICAgIHZhciBuYW1lID0gdGhpcy5mbi50b1N0cmluZyhvcHRpb25zKTtcblxuICAgIGlmIChvcHRpb25zICYmIF90eXBlb2Yob3B0aW9ucy5oYW5kbGVyKSA9PT0gJ29iamVjdCcgJiYgKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKG9wdGlvbnMuaGFuZGxlciwgbmFtZSkpIHtcbiAgICAgIC8vIGNhbGxiYWNrIGlzIGEgbWFwIG9mIGNhbGxiYWNrIGZ1bmN0aW9uc1xuICAgICAgY3VzdG9tU3RyaW5nID0gb3B0aW9ucy5oYW5kbGVyW25hbWVdKHRoaXMsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY3VzdG9tU3RyaW5nICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGN1c3RvbVN0cmluZztcbiAgICB9IC8vIGZhbGwgYmFjayB0byBOb2RlJ3MgdG9TdHJpbmdcblxuXG4gICAgcmV0dXJuIG5vZGVUb1N0cmluZy5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICB9O1xuICAvKipcbiAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIEZ1bmN0aW9uTm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgYXJncyA9IHRoaXMuYXJncy5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgICAgcmV0dXJuIGFyZy50b1N0cmluZyhvcHRpb25zKTtcbiAgICB9KTtcbiAgICB2YXIgZm4gPSAoMCwgX2lzLmlzRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSkodGhpcy5mbikgPyAnKCcgKyB0aGlzLmZuLnRvU3RyaW5nKG9wdGlvbnMpICsgJyknIDogdGhpcy5mbi50b1N0cmluZyhvcHRpb25zKTsgLy8gZm9ybWF0IHRoZSBhcmd1bWVudHMgbGlrZSBcImFkZCgyLCA0LjIpXCJcblxuICAgIHJldHVybiBmbiArICcoJyArIGFyZ3Muam9pbignLCAnKSArICcpJztcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGVcbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG5cblxuICBGdW5jdGlvbk5vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnRnVuY3Rpb25Ob2RlJyxcbiAgICAgIGZuOiB0aGlzLmZuLFxuICAgICAgYXJnczogdGhpcy5hcmdzXG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIEluc3RhbnRpYXRlIGFuIEFzc2lnbm1lbnROb2RlIGZyb20gaXRzIEpTT04gcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIEFuIG9iamVjdCBzdHJ1Y3R1cmVkIGxpa2VcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJGdW5jdGlvbk5vZGVcIiwgZm46IC4uLiwgYXJnczogLi4ufWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge0Z1bmN0aW9uTm9kZX1cbiAgICovXG5cblxuICBGdW5jdGlvbk5vZGUuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb25Ob2RlKGpzb24uZm4sIGpzb24uYXJncyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgSFRNTCByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIEZ1bmN0aW9uTm9kZS5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgYXJncyA9IHRoaXMuYXJncy5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgICAgcmV0dXJuIGFyZy50b0hUTUwob3B0aW9ucyk7XG4gICAgfSk7IC8vIGZvcm1hdCB0aGUgYXJndW1lbnRzIGxpa2UgXCJhZGQoMiwgNC4yKVwiXG5cbiAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1mdW5jdGlvblwiPicgKyAoMCwgX3N0cmluZy5lc2NhcGUpKHRoaXMuZm4pICsgJzwvc3Bhbj48c3BhbiBjbGFzcz1cIm1hdGgtcGFyYW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPig8L3NwYW4+JyArIGFyZ3Muam9pbignPHNwYW4gY2xhc3M9XCJtYXRoLXNlcGFyYXRvclwiPiw8L3NwYW4+JykgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmFudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4pPC9zcGFuPic7XG4gIH07XG4gIC8qXG4gICAqIEV4cGFuZCBhIExhVGVYIHRlbXBsYXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZW1wbGF0ZVxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHByaXZhdGVcbiAgICoqL1xuXG5cbiAgZnVuY3Rpb24gZXhwYW5kVGVtcGxhdGUodGVtcGxhdGUsIG5vZGUsIG9wdGlvbnMpIHtcbiAgICB2YXIgbGF0ZXggPSAnJzsgLy8gTWF0Y2ggZXZlcnl0aGluZyBvZiB0aGUgZm9ybSAke2lkZW50aWZpZXJ9IG9yICR7aWRlbnRpZmllclsyXX0gb3IgJCRcbiAgICAvLyB3aGlsZSBzdWJtYXRjaGluZyBpZGVudGlmaWVyIGFuZCAyIChpbiB0aGUgc2Vjb25kIGNhc2UpXG5cbiAgICB2YXIgcmVnZXggPSBuZXcgUmVnRXhwKCdcXFxcJCg/OlxcXFx7KFthLXpfXVthLXpfMC05XSopKD86XFxcXFsoWzAtOV0rKVxcXFxdKT9cXFxcfXxcXFxcJCknLCAnaWcnKTtcbiAgICB2YXIgaW5wdXRQb3MgPSAwOyAvLyBwb3NpdGlvbiBpbiB0aGUgaW5wdXQgc3RyaW5nXG5cbiAgICB2YXIgbWF0Y2g7XG5cbiAgICB3aGlsZSAoKG1hdGNoID0gcmVnZXguZXhlYyh0ZW1wbGF0ZSkpICE9PSBudWxsKSB7XG4gICAgICAvLyBnbyB0aHJvdWdoIGFsbCBtYXRjaGVzXG4gICAgICAvLyBhZGQgZXZlcnl0aGluZyBpbiBmcm9udCBvZiB0aGUgbWF0Y2ggdG8gdGhlIExhVGVYIHN0cmluZ1xuICAgICAgbGF0ZXggKz0gdGVtcGxhdGUuc3Vic3RyaW5nKGlucHV0UG9zLCBtYXRjaC5pbmRleCk7XG4gICAgICBpbnB1dFBvcyA9IG1hdGNoLmluZGV4O1xuXG4gICAgICBpZiAobWF0Y2hbMF0gPT09ICckJCcpIHtcbiAgICAgICAgLy8gZXNjYXBlZCBkb2xsYXIgc2lnblxuICAgICAgICBsYXRleCArPSAnJCc7XG4gICAgICAgIGlucHV0UG9zKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB0ZW1wbGF0ZSBwYXJhbWV0ZXJcbiAgICAgICAgaW5wdXRQb3MgKz0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgICB2YXIgcHJvcGVydHkgPSBub2RlW21hdGNoWzFdXTtcblxuICAgICAgICBpZiAoIXByb3BlcnR5KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdUZW1wbGF0ZTogUHJvcGVydHkgJyArIG1hdGNoWzFdICsgJyBkb2VzIG5vdCBleGlzdC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtYXRjaFsyXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gbm8gc3F1YXJlIGJyYWNrZXRzXG4gICAgICAgICAgc3dpdGNoIChfdHlwZW9mKHByb3BlcnR5KSkge1xuICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgICAgbGF0ZXggKz0gcHJvcGVydHk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICAgICAgICBpZiAoKDAsIF9pcy5pc05vZGUpKHByb3BlcnR5KSkge1xuICAgICAgICAgICAgICAgIGxhdGV4ICs9IHByb3BlcnR5LnRvVGV4KG9wdGlvbnMpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocHJvcGVydHkpKSB7XG4gICAgICAgICAgICAgICAgLy8gbWFrZSBhcnJheSBvZiBOb2RlcyBpbnRvIGNvbW1hIHNlcGFyYXRlZCBsaXN0XG4gICAgICAgICAgICAgICAgbGF0ZXggKz0gcHJvcGVydHkubWFwKGZ1bmN0aW9uIChhcmcsIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICBpZiAoKDAsIF9pcy5pc05vZGUpKGFyZykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFyZy50b1RleChvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGVtcGxhdGU6ICcgKyBtYXRjaFsxXSArICdbJyArIGluZGV4ICsgJ10gaXMgbm90IGEgTm9kZS4nKTtcbiAgICAgICAgICAgICAgICB9KS5qb2luKCcsJyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGVtcGxhdGU6ICcgKyBtYXRjaFsxXSArICcgaGFzIHRvIGJlIGEgTm9kZSwgU3RyaW5nIG9yIGFycmF5IG9mIE5vZGVzJyk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGVtcGxhdGU6ICcgKyBtYXRjaFsxXSArICcgaGFzIHRvIGJlIGEgTm9kZSwgU3RyaW5nIG9yIGFycmF5IG9mIE5vZGVzJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHdpdGggc3F1YXJlIGJyYWNrZXRzXG4gICAgICAgICAgaWYgKCgwLCBfaXMuaXNOb2RlKShwcm9wZXJ0eVttYXRjaFsyXV0gJiYgcHJvcGVydHlbbWF0Y2hbMl1dKSkge1xuICAgICAgICAgICAgbGF0ZXggKz0gcHJvcGVydHlbbWF0Y2hbMl1dLnRvVGV4KG9wdGlvbnMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUZW1wbGF0ZTogJyArIG1hdGNoWzFdICsgJ1snICsgbWF0Y2hbMl0gKyAnXSBpcyBub3QgYSBOb2RlLicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGxhdGV4ICs9IHRlbXBsYXRlLnNsaWNlKGlucHV0UG9zKTsgLy8gYXBwZW5kIHJlc3Qgb2YgdGhlIHRlbXBsYXRlXG5cbiAgICByZXR1cm4gbGF0ZXg7XG4gIH0gLy8gYmFja3VwIE5vZGUncyB0b1RleCBmdW5jdGlvblxuICAvLyBAcHJpdmF0ZVxuXG5cbiAgdmFyIG5vZGVUb1RleCA9IEZ1bmN0aW9uTm9kZS5wcm90b3R5cGUudG9UZXg7XG4gIC8qKlxuICAgKiBHZXQgTGFUZVggcmVwcmVzZW50YXRpb24uICh3cmFwcGVyIGZ1bmN0aW9uKVxuICAgKiBUaGlzIG92ZXJyaWRlcyBwYXJ0cyBvZiBOb2RlJ3MgdG9UZXggZnVuY3Rpb24uXG4gICAqIElmIGNhbGxiYWNrIGlzIGFuIG9iamVjdCBjb250YWluaW5nIGNhbGxiYWNrcywgaXRcbiAgICogY2FsbHMgdGhlIGNvcnJlY3QgY2FsbGJhY2sgZm9yIHRoZSBjdXJyZW50IG5vZGUsXG4gICAqIG90aGVyd2lzZSBpdCBmYWxscyBiYWNrIHRvIGNhbGxpbmcgTm9kZSdzIHRvVGV4XG4gICAqIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG4gIEZ1bmN0aW9uTm9kZS5wcm90b3R5cGUudG9UZXggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBjdXN0b21UZXg7XG5cbiAgICBpZiAob3B0aW9ucyAmJiBfdHlwZW9mKG9wdGlvbnMuaGFuZGxlcikgPT09ICdvYmplY3QnICYmICgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShvcHRpb25zLmhhbmRsZXIsIHRoaXMubmFtZSkpIHtcbiAgICAgIC8vIGNhbGxiYWNrIGlzIGEgbWFwIG9mIGNhbGxiYWNrIGZ1bmN0aW9uc1xuICAgICAgY3VzdG9tVGV4ID0gb3B0aW9ucy5oYW5kbGVyW3RoaXMubmFtZV0odGhpcywgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjdXN0b21UZXggIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gY3VzdG9tVGV4O1xuICAgIH0gLy8gZmFsbCBiYWNrIHRvIE5vZGUncyB0b1RleFxuXG5cbiAgICByZXR1cm4gbm9kZVRvVGV4LmNhbGwodGhpcywgb3B0aW9ucyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgTGFUZVggcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBGdW5jdGlvbk5vZGUucHJvdG90eXBlLl90b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIGFyZ3MgPSB0aGlzLmFyZ3MubWFwKGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgIC8vIGdldCBMYVRlWCBvZiB0aGUgYXJndW1lbnRzXG4gICAgICByZXR1cm4gYXJnLnRvVGV4KG9wdGlvbnMpO1xuICAgIH0pO1xuICAgIHZhciBsYXRleENvbnZlcnRlcjtcblxuICAgIGlmIChfbGF0ZXgubGF0ZXhGdW5jdGlvbnNbdGhpcy5uYW1lXSkge1xuICAgICAgbGF0ZXhDb252ZXJ0ZXIgPSBfbGF0ZXgubGF0ZXhGdW5jdGlvbnNbdGhpcy5uYW1lXTtcbiAgICB9IC8vIHRvVGV4IHByb3BlcnR5IG9uIHRoZSBmdW5jdGlvbiBpdHNlbGZcblxuXG4gICAgaWYgKG1hdGhbdGhpcy5uYW1lXSAmJiAodHlwZW9mIG1hdGhbdGhpcy5uYW1lXS50b1RleCA9PT0gJ2Z1bmN0aW9uJyB8fCBfdHlwZW9mKG1hdGhbdGhpcy5uYW1lXS50b1RleCkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBtYXRoW3RoaXMubmFtZV0udG9UZXggPT09ICdzdHJpbmcnKSkge1xuICAgICAgLy8gLnRvVGV4IGlzIGEgY2FsbGJhY2sgZnVuY3Rpb25cbiAgICAgIGxhdGV4Q29udmVydGVyID0gbWF0aFt0aGlzLm5hbWVdLnRvVGV4O1xuICAgIH1cblxuICAgIHZhciBjdXN0b21Ub1RleDtcblxuICAgIHN3aXRjaCAoX3R5cGVvZihsYXRleENvbnZlcnRlcikpIHtcbiAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgLy8gYSBjYWxsYmFjayBmdW5jdGlvblxuICAgICAgICBjdXN0b21Ub1RleCA9IGxhdGV4Q29udmVydGVyKHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgLy8gYSB0ZW1wbGF0ZSBzdHJpbmdcbiAgICAgICAgY3VzdG9tVG9UZXggPSBleHBhbmRUZW1wbGF0ZShsYXRleENvbnZlcnRlciwgdGhpcywgb3B0aW9ucyk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICAvLyBhbiBvYmplY3Qgd2l0aCBkaWZmZXJlbnQgXCJjb252ZXJ0ZXJzXCIgZm9yIGRpZmZlcmVudCBudW1iZXJzIG9mIGFyZ3VtZW50c1xuICAgICAgICBzd2l0Y2ggKF90eXBlb2YobGF0ZXhDb252ZXJ0ZXJbYXJncy5sZW5ndGhdKSkge1xuICAgICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgICAgIGN1c3RvbVRvVGV4ID0gbGF0ZXhDb252ZXJ0ZXJbYXJncy5sZW5ndGhdKHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgY3VzdG9tVG9UZXggPSBleHBhbmRUZW1wbGF0ZShsYXRleENvbnZlcnRlclthcmdzLmxlbmd0aF0sIHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY3VzdG9tVG9UZXggIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gY3VzdG9tVG9UZXg7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4cGFuZFRlbXBsYXRlKF9sYXRleC5kZWZhdWx0VGVtcGxhdGUsIHRoaXMsIG9wdGlvbnMpO1xuICB9O1xuICAvKipcbiAgICogR2V0IGlkZW50aWZpZXIuXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBGdW5jdGlvbk5vZGUucHJvdG90eXBlLmdldElkZW50aWZpZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZSArICc6JyArIHRoaXMubmFtZTtcbiAgfTtcblxuICByZXR1cm4gRnVuY3Rpb25Ob2RlO1xufSwge1xuICBpc0NsYXNzOiB0cnVlLFxuICBpc05vZGU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVGdW5jdGlvbk5vZGUgPSBjcmVhdGVGdW5jdGlvbk5vZGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUluZGV4Tm9kZSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvc3RyaW5nXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jdXN0b21zID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2N1c3RvbXNcIik7XG5cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHsgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChpdGVyKSkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkoYXJyKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxudmFyIG5hbWUgPSAnSW5kZXhOb2RlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ1JhbmdlJywgJ05vZGUnLCAnc2l6ZSddO1xudmFyIGNyZWF0ZUluZGV4Tm9kZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBSYW5nZSA9IF9yZWYuUmFuZ2UsXG4gICAgICBOb2RlID0gX3JlZi5Ob2RlLFxuICAgICAgc2l6ZSA9IF9yZWYuc2l6ZTtcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yIEluZGV4Tm9kZVxuICAgKiBAZXh0ZW5kcyBOb2RlXG4gICAqXG4gICAqIERlc2NyaWJlcyBhIHN1YnNldCBvZiBhIG1hdHJpeCBvciBhbiBvYmplY3QgcHJvcGVydHkuXG4gICAqIENhbm5vdCBiZSB1c2VkIG9uIGl0cyBvd24sIG5lZWRzIHRvIGJlIHVzZWQgd2l0aGluIGFuIEFjY2Vzc29yTm9kZSBvclxuICAgKiBBc3NpZ25tZW50Tm9kZS5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlW119IGRpbWVuc2lvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbZG90Tm90YXRpb249ZmFsc2VdICBPcHRpb25hbCBwcm9wZXJ0eSBkZXNjcmliaW5nIHdoZXRoZXJcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGluZGV4IHdhcyB3cml0dGVuIHVzaW5nIGRvdFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGF0aW9uIGxpa2UgYGEuYmAsIG9yIHVzaW5nIGJyYWNrZXRcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RhdGlvbiBsaWtlIGBhW1wiYlwiXWAgKGRlZmF1bHQpLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZWQgdG8gc3RyaW5naWZ5IGFuIEluZGV4Tm9kZS5cbiAgICovXG4gIGZ1bmN0aW9uIEluZGV4Tm9kZShkaW1lbnNpb25zLCBkb3ROb3RhdGlvbikge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBJbmRleE5vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH1cblxuICAgIHRoaXMuZGltZW5zaW9ucyA9IGRpbWVuc2lvbnM7XG4gICAgdGhpcy5kb3ROb3RhdGlvbiA9IGRvdE5vdGF0aW9uIHx8IGZhbHNlOyAvLyB2YWxpZGF0ZSBpbnB1dFxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGRpbWVuc2lvbnMpIHx8ICFkaW1lbnNpb25zLmV2ZXJ5KF9pcy5pc05vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSBjb250YWluaW5nIE5vZGVzIGV4cGVjdGVkIGZvciBwYXJhbWV0ZXIgXCJkaW1lbnNpb25zXCInKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kb3ROb3RhdGlvbiAmJiAhdGhpcy5pc09iamVjdFByb3BlcnR5KCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZG90Tm90YXRpb24gb25seSBhcHBsaWNhYmxlIGZvciBvYmplY3QgcHJvcGVydGllcycpO1xuICAgIH0gLy8gVE9ETzogZGVwcmVjYXRlZCBzaW5jZSB2MywgcmVtb3ZlIHNvbWUgZGF5XG5cblxuICAgIHZhciBkZXByZWNhdGVkID0gZnVuY3Rpb24gZGVwcmVjYXRlZCgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUHJvcGVydHkgYEluZGV4Tm9kZS5vYmplY3RgIGlzIGRlcHJlY2F0ZWQsIHVzZSBgSW5kZXhOb2RlLmZuYCBpbnN0ZWFkJyk7XG4gICAgfTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnb2JqZWN0Jywge1xuICAgICAgZ2V0OiBkZXByZWNhdGVkLFxuICAgICAgc2V0OiBkZXByZWNhdGVkXG4gICAgfSk7XG4gIH1cblxuICBJbmRleE5vZGUucHJvdG90eXBlID0gbmV3IE5vZGUoKTtcbiAgSW5kZXhOb2RlLnByb3RvdHlwZS50eXBlID0gJ0luZGV4Tm9kZSc7XG4gIEluZGV4Tm9kZS5wcm90b3R5cGUuaXNJbmRleE5vZGUgPSB0cnVlO1xuICAvKipcbiAgICogQ29tcGlsZSBhIG5vZGUgaW50byBhIEphdmFTY3JpcHQgZnVuY3Rpb24uXG4gICAqIFRoaXMgYmFzaWNhbGx5IHByZS1jYWxjdWxhdGVzIGFzIG11Y2ggYXMgcG9zc2libGUgYW5kIG9ubHkgbGVhdmVzIG9wZW5cbiAgICogY2FsY3VsYXRpb25zIHdoaWNoIGRlcGVuZCBvbiBhIGR5bmFtaWMgc2NvcGUgd2l0aCB2YXJpYWJsZXMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBtYXRoICAgICBNYXRoLmpzIG5hbWVzcGFjZSB3aXRoIGZ1bmN0aW9ucyBhbmQgY29uc3RhbnRzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gYXJnTmFtZXMgQW4gb2JqZWN0IHdpdGggYXJndW1lbnQgbmFtZXMgYXMga2V5IGFuZCBgdHJ1ZWBcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHZhbHVlLiBVc2VkIGluIHRoZSBTeW1ib2xOb2RlIHRvIG9wdGltaXplXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJndW1lbnRzIGZyb20gdXNlciBhc3NpZ25lZCBmdW5jdGlvbnNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIChzZWUgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSkgb3Igc3BlY2lhbCBzeW1ib2xzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlIGBlbmRgIChzZWUgSW5kZXhOb2RlKS5cbiAgICogQHJldHVybiB7ZnVuY3Rpb259IFJldHVybnMgYSBmdW5jdGlvbiB3aGljaCBjYW4gYmUgY2FsbGVkIGxpa2U6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgZXZhbE5vZGUoc2NvcGU6IE9iamVjdCwgYXJnczogT2JqZWN0LCBjb250ZXh0OiAqKVxuICAgKi9cblxuICBJbmRleE5vZGUucHJvdG90eXBlLl9jb21waWxlID0gZnVuY3Rpb24gKG1hdGgsIGFyZ05hbWVzKSB7XG4gICAgLy8gVE9ETzogaW1wbGVtZW50IHN1cHBvcnQgZm9yIGJpZ251bWJlciAoY3VycmVudGx5IGJpZ251bWJlcnMgYXJlIHNpbGVudGx5XG4gICAgLy8gICAgICAgcmVkdWNlZCB0byBudW1iZXJzIHdoZW4gY2hhbmdpbmcgdGhlIHZhbHVlIHRvIHplcm8tYmFzZWQpXG4gICAgLy8gVE9ETzogT3B0aW1pemF0aW9uOiB3aGVuIHRoZSByYW5nZSB2YWx1ZXMgYXJlIENvbnN0YW50Tm9kZXMsXG4gICAgLy8gICAgICAgd2UgY2FuIGJlZm9yZWhhbmQgcmVzb2x2ZSB0aGUgemVyby1iYXNlZCB2YWx1ZVxuICAgIC8vIG9wdGltaXphdGlvbiBmb3IgYSBzaW1wbGUgb2JqZWN0IHByb3BlcnR5XG4gICAgdmFyIGV2YWxEaW1lbnNpb25zID0gKDAsIF9hcnJheS5tYXApKHRoaXMuZGltZW5zaW9ucywgZnVuY3Rpb24gKHJhbmdlLCBpKSB7XG4gICAgICBpZiAoKDAsIF9pcy5pc1JhbmdlTm9kZSkocmFuZ2UpKSB7XG4gICAgICAgIGlmIChyYW5nZS5uZWVkc0VuZCgpKSB7XG4gICAgICAgICAgLy8gY3JlYXRlIGEgcmFuZ2UgY29udGFpbmluZyBlbmQgKGxpa2UgJzQ6ZW5kJylcbiAgICAgICAgICB2YXIgY2hpbGRBcmdOYW1lcyA9IE9iamVjdC5jcmVhdGUoYXJnTmFtZXMpO1xuICAgICAgICAgIGNoaWxkQXJnTmFtZXMuZW5kID0gdHJ1ZTtcblxuICAgICAgICAgIHZhciBldmFsU3RhcnQgPSByYW5nZS5zdGFydC5fY29tcGlsZShtYXRoLCBjaGlsZEFyZ05hbWVzKTtcblxuICAgICAgICAgIHZhciBldmFsRW5kID0gcmFuZ2UuZW5kLl9jb21waWxlKG1hdGgsIGNoaWxkQXJnTmFtZXMpO1xuXG4gICAgICAgICAgdmFyIGV2YWxTdGVwID0gcmFuZ2Uuc3RlcCA/IHJhbmdlLnN0ZXAuX2NvbXBpbGUobWF0aCwgY2hpbGRBcmdOYW1lcykgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBldmFsRGltZW5zaW9uKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICAgICAgICB2YXIgcyA9IHNpemUoY29udGV4dCkudmFsdWVPZigpO1xuICAgICAgICAgICAgdmFyIGNoaWxkQXJncyA9IE9iamVjdC5jcmVhdGUoYXJncyk7XG4gICAgICAgICAgICBjaGlsZEFyZ3MuZW5kID0gc1tpXTtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVSYW5nZShldmFsU3RhcnQoc2NvcGUsIGNoaWxkQXJncywgY29udGV4dCksIGV2YWxFbmQoc2NvcGUsIGNoaWxkQXJncywgY29udGV4dCksIGV2YWxTdGVwKHNjb3BlLCBjaGlsZEFyZ3MsIGNvbnRleHQpKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGNyZWF0ZSByYW5nZVxuICAgICAgICAgIHZhciBfZXZhbFN0YXJ0ID0gcmFuZ2Uuc3RhcnQuX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpO1xuXG4gICAgICAgICAgdmFyIF9ldmFsRW5kID0gcmFuZ2UuZW5kLl9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTtcblxuICAgICAgICAgIHZhciBfZXZhbFN0ZXAgPSByYW5nZS5zdGVwID8gcmFuZ2Uuc3RlcC5fY29tcGlsZShtYXRoLCBhcmdOYW1lcykgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxEaW1lbnNpb24oc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVSYW5nZShfZXZhbFN0YXJ0KHNjb3BlLCBhcmdzLCBjb250ZXh0KSwgX2V2YWxFbmQoc2NvcGUsIGFyZ3MsIGNvbnRleHQpLCBfZXZhbFN0ZXAoc2NvcGUsIGFyZ3MsIGNvbnRleHQpKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNTeW1ib2xOb2RlKShyYW5nZSkgJiYgcmFuZ2UubmFtZSA9PT0gJ2VuZCcpIHtcbiAgICAgICAgLy8gU3ltYm9sTm9kZSAnZW5kJ1xuICAgICAgICB2YXIgX2NoaWxkQXJnTmFtZXMgPSBPYmplY3QuY3JlYXRlKGFyZ05hbWVzKTtcblxuICAgICAgICBfY2hpbGRBcmdOYW1lcy5lbmQgPSB0cnVlO1xuXG4gICAgICAgIHZhciBldmFsUmFuZ2UgPSByYW5nZS5fY29tcGlsZShtYXRoLCBfY2hpbGRBcmdOYW1lcyk7XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxEaW1lbnNpb24oc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgICB2YXIgcyA9IHNpemUoY29udGV4dCkudmFsdWVPZigpO1xuICAgICAgICAgIHZhciBjaGlsZEFyZ3MgPSBPYmplY3QuY3JlYXRlKGFyZ3MpO1xuICAgICAgICAgIGNoaWxkQXJncy5lbmQgPSBzW2ldO1xuICAgICAgICAgIHJldHVybiBldmFsUmFuZ2Uoc2NvcGUsIGNoaWxkQXJncywgY29udGV4dCk7XG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBDb25zdGFudE5vZGVcbiAgICAgICAgdmFyIF9ldmFsUmFuZ2UgPSByYW5nZS5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxEaW1lbnNpb24oc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgICByZXR1cm4gX2V2YWxSYW5nZShzY29wZSwgYXJncywgY29udGV4dCk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSk7XG4gICAgdmFyIGluZGV4ID0gKDAsIF9jdXN0b21zLmdldFNhZmVQcm9wZXJ0eSkobWF0aCwgJ2luZGV4Jyk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxJbmRleE5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgIHZhciBkaW1lbnNpb25zID0gKDAsIF9hcnJheS5tYXApKGV2YWxEaW1lbnNpb25zLCBmdW5jdGlvbiAoZXZhbERpbWVuc2lvbikge1xuICAgICAgICByZXR1cm4gZXZhbERpbWVuc2lvbihzY29wZSwgYXJncywgY29udGV4dCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBpbmRleC5hcHBseSh2b2lkIDAsIF90b0NvbnN1bWFibGVBcnJheShkaW1lbnNpb25zKSk7XG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZWFjaCBvZiB0aGUgY2hpbGQgbm9kZXMgb2YgdGhpcyBub2RlXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKX0gY2FsbGJhY2tcbiAgICovXG5cblxuICBJbmRleE5vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGltZW5zaW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgY2FsbGJhY2sodGhpcy5kaW1lbnNpb25zW2ldLCAnZGltZW5zaW9uc1snICsgaSArICddJywgdGhpcyk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IEluZGV4Tm9kZSBoYXZpbmcgaXQncyBjaGlsZHMgYmUgdGhlIHJlc3VsdHMgb2YgY2FsbGluZ1xuICAgKiB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggb2YgdGhlIGNoaWxkcyBvZiB0aGUgb3JpZ2luYWwgbm9kZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpOiBOb2RlfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7SW5kZXhOb2RlfSBSZXR1cm5zIGEgdHJhbnNmb3JtZWQgY29weSBvZiB0aGUgbm9kZVxuICAgKi9cblxuXG4gIEluZGV4Tm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgdmFyIGRpbWVuc2lvbnMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kaW1lbnNpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBkaW1lbnNpb25zW2ldID0gdGhpcy5faWZOb2RlKGNhbGxiYWNrKHRoaXMuZGltZW5zaW9uc1tpXSwgJ2RpbWVuc2lvbnNbJyArIGkgKyAnXScsIHRoaXMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEluZGV4Tm9kZShkaW1lbnNpb25zLCB0aGlzLmRvdE5vdGF0aW9uKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoaXMgbm9kZSwgYSBzaGFsbG93IGNvcHlcbiAgICogQHJldHVybiB7SW5kZXhOb2RlfVxuICAgKi9cblxuXG4gIEluZGV4Tm9kZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBJbmRleE5vZGUodGhpcy5kaW1lbnNpb25zLnNsaWNlKDApLCB0aGlzLmRvdE5vdGF0aW9uKTtcbiAgfTtcbiAgLyoqXG4gICAqIFRlc3Qgd2hldGhlciB0aGlzIEluZGV4Tm9kZSBjb250YWlucyBhIHNpbmdsZSBwcm9wZXJ0eSBuYW1lXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgSW5kZXhOb2RlLnByb3RvdHlwZS5pc09iamVjdFByb3BlcnR5ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmRpbWVuc2lvbnMubGVuZ3RoID09PSAxICYmICgwLCBfaXMuaXNDb25zdGFudE5vZGUpKHRoaXMuZGltZW5zaW9uc1swXSkgJiYgdHlwZW9mIHRoaXMuZGltZW5zaW9uc1swXS52YWx1ZSA9PT0gJ3N0cmluZyc7XG4gIH07XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBwcm9wZXJ0eSBuYW1lIGlmIEluZGV4Tm9kZSBjb250YWlucyBhIHByb3BlcnR5LlxuICAgKiBJZiBub3QsIHJldHVybnMgbnVsbC5cbiAgICogQHJldHVybiB7c3RyaW5nIHwgbnVsbH1cbiAgICovXG5cblxuICBJbmRleE5vZGUucHJvdG90eXBlLmdldE9iamVjdFByb3BlcnR5ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmlzT2JqZWN0UHJvcGVydHkoKSA/IHRoaXMuZGltZW5zaW9uc1swXS52YWx1ZSA6IG51bGw7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqL1xuXG5cbiAgSW5kZXhOb2RlLnByb3RvdHlwZS5fdG9TdHJpbmcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIC8vIGZvcm1hdCB0aGUgcGFyYW1ldGVycyBsaWtlIFwiWzEsIDA6NV1cIlxuICAgIHJldHVybiB0aGlzLmRvdE5vdGF0aW9uID8gJy4nICsgdGhpcy5nZXRPYmplY3RQcm9wZXJ0eSgpIDogJ1snICsgdGhpcy5kaW1lbnNpb25zLmpvaW4oJywgJykgKyAnXSc7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBub2RlXG4gICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAqL1xuXG5cbiAgSW5kZXhOb2RlLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hdGhqczogJ0luZGV4Tm9kZScsXG4gICAgICBkaW1lbnNpb25zOiB0aGlzLmRpbWVuc2lvbnMsXG4gICAgICBkb3ROb3RhdGlvbjogdGhpcy5kb3ROb3RhdGlvblxuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhbiBJbmRleE5vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIkluZGV4Tm9kZVwiLCBkaW1lbnNpb25zOiBbLi4uXSwgZG90Tm90YXRpb246IGZhbHNlfWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge0luZGV4Tm9kZX1cbiAgICovXG5cblxuICBJbmRleE5vZGUuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBuZXcgSW5kZXhOb2RlKGpzb24uZGltZW5zaW9ucywganNvbi5kb3ROb3RhdGlvbik7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgSFRNTCByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIEluZGV4Tm9kZS5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAvLyBmb3JtYXQgdGhlIHBhcmFtZXRlcnMgbGlrZSBcIlsxLCAwOjVdXCJcbiAgICB2YXIgZGltZW5zaW9ucyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRpbWVuc2lvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGRpbWVuc2lvbnNbaV0gPSB0aGlzLmRpbWVuc2lvbnNbaV0udG9IVE1MKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZG90Tm90YXRpb24pIHtcbiAgICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJtYXRoLW9wZXJhdG9yIG1hdGgtYWNjZXNzb3Itb3BlcmF0b3JcIj4uPC9zcGFuPicgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXN5bWJvbCBtYXRoLXByb3BlcnR5XCI+JyArICgwLCBfc3RyaW5nLmVzY2FwZSkodGhpcy5nZXRPYmplY3RQcm9wZXJ0eSgpKSArICc8L3NwYW4+JztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyZW50aGVzaXMgbWF0aC1zcXVhcmUtcGFyZW50aGVzaXNcIj5bPC9zcGFuPicgKyBkaW1lbnNpb25zLmpvaW4oJzxzcGFuIGNsYXNzPVwibWF0aC1zZXBhcmF0b3JcIj4sPC9zcGFuPicpICsgJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXNxdWFyZS1wYXJlbnRoZXNpc1wiPl08L3NwYW4+JztcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgTGFUZVggcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBJbmRleE5vZGUucHJvdG90eXBlLl90b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIGRpbWVuc2lvbnMgPSB0aGlzLmRpbWVuc2lvbnMubWFwKGZ1bmN0aW9uIChyYW5nZSkge1xuICAgICAgcmV0dXJuIHJhbmdlLnRvVGV4KG9wdGlvbnMpO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmRvdE5vdGF0aW9uID8gJy4nICsgdGhpcy5nZXRPYmplY3RQcm9wZXJ0eSgpICsgJycgOiAnX3snICsgZGltZW5zaW9ucy5qb2luKCcsJykgKyAnfSc7XG4gIH07IC8vIGhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgYSBSYW5nZSBmcm9tIHN0YXJ0LCBzdGVwIGFuZCBlbmRcblxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVJhbmdlKHN0YXJ0LCBlbmQsIHN0ZXApIHtcbiAgICByZXR1cm4gbmV3IFJhbmdlKCgwLCBfaXMuaXNCaWdOdW1iZXIpKHN0YXJ0KSA/IHN0YXJ0LnRvTnVtYmVyKCkgOiBzdGFydCwgKDAsIF9pcy5pc0JpZ051bWJlcikoZW5kKSA/IGVuZC50b051bWJlcigpIDogZW5kLCAoMCwgX2lzLmlzQmlnTnVtYmVyKShzdGVwKSA/IHN0ZXAudG9OdW1iZXIoKSA6IHN0ZXApO1xuICB9XG5cbiAgcmV0dXJuIEluZGV4Tm9kZTtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZSxcbiAgaXNOb2RlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlSW5kZXhOb2RlID0gY3JlYXRlSW5kZXhOb2RlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVOb2RlID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2tleXdvcmRzID0gcmVxdWlyZShcIi4uL2tleXdvcmRzXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2xvZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9sb2dcIik7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIG5hbWUgPSAnTm9kZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydtYXRoV2l0aFRyYW5zZm9ybSddO1xudmFyIGNyZWF0ZU5vZGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgbWF0aFdpdGhUcmFuc2Zvcm0gPSBfcmVmLm1hdGhXaXRoVHJhbnNmb3JtO1xuXG4gIC8qKlxuICAgKiBOb2RlXG4gICAqL1xuICBmdW5jdGlvbiBOb2RlKCkge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBOb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEV2YWx1YXRlIHRoZSBub2RlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbc2NvcGVdICBTY29wZSB0byByZWFkL3dyaXRlIHZhcmlhYmxlc1xuICAgKiBAcmV0dXJuIHsqfSAgICAgICAgICAgICAgUmV0dXJucyB0aGUgcmVzdWx0XG4gICAqL1xuXG5cbiAgTm9kZS5wcm90b3R5cGUuZXZhbHVhdGUgPSBmdW5jdGlvbiAoc2NvcGUpIHtcbiAgICByZXR1cm4gdGhpcy5jb21waWxlKCkuZXZhbHVhdGUoc2NvcGUpO1xuICB9O1xuICAvKipcbiAgICogRXZhbHVhdGUgdGhlIG5vZGVcbiAgICogQHBhcmFtIHtPYmplY3R9IFtzY29wZV0gIFNjb3BlIHRvIHJlYWQvd3JpdGUgdmFyaWFibGVzXG4gICAqIEByZXR1cm4geyp9ICAgICAgICAgICAgICBSZXR1cm5zIHRoZSByZXN1bHRcbiAgICovXG4gIC8vIFRPRE86IERlcHJlY2F0ZWQgc2luY2UgdjYuMC4wLiBDbGVhbiB1cCBzb21lIGRheVxuXG5cbiAgTm9kZS5wcm90b3R5cGUuZXZhbCA9IGZ1bmN0aW9uIChzY29wZSkge1xuICAgICgwLCBfbG9nLndhcm5PbmNlKSgnTWV0aG9kIE5vZGUuZXZhbCBpcyByZW5hbWVkIHRvIE5vZGUuZXZhbHVhdGUuIFBsZWFzZSB1c2UgdGhlIG5ldyBtZXRob2QgbmFtZS4nKTtcbiAgICByZXR1cm4gdGhpcy5ldmFsdWF0ZShzY29wZSk7XG4gIH07XG5cbiAgTm9kZS5wcm90b3R5cGUudHlwZSA9ICdOb2RlJztcbiAgTm9kZS5wcm90b3R5cGUuaXNOb2RlID0gdHJ1ZTtcbiAgTm9kZS5wcm90b3R5cGUuY29tbWVudCA9ICcnO1xuICAvKipcbiAgICogQ29tcGlsZSB0aGUgbm9kZSBpbnRvIGFuIG9wdGltaXplZCwgZXZhdWF0YWJsZSBKYXZhU2NyaXB0IGZ1bmN0aW9uXG4gICAqIEByZXR1cm4ge3tldmFsdWF0ZTogZnVuY3Rpb24oW09iamVjdF0pfX0gb2JqZWN0XG4gICAqICAgICAgICAgICAgICAgIFJldHVybnMgYW4gb2JqZWN0IHdpdGggYSBmdW5jdGlvbiAnZXZhbHVhdGUnLFxuICAgKiAgICAgICAgICAgICAgICB3aGljaCBjYW4gYmUgaW52b2tlZCBhcyBleHByLmV2YWx1YXRlKFtzY29wZTogT2JqZWN0XSksXG4gICAqICAgICAgICAgICAgICAgIHdoZXJlIHNjb3BlIGlzIGFuIG9wdGlvbmFsIG9iamVjdCB3aXRoXG4gICAqICAgICAgICAgICAgICAgIHZhcmlhYmxlcy5cbiAgICovXG5cbiAgTm9kZS5wcm90b3R5cGUuY29tcGlsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXhwciA9IHRoaXMuX2NvbXBpbGUobWF0aFdpdGhUcmFuc2Zvcm0sIHt9KTtcblxuICAgIHZhciBhcmdzID0ge307XG4gICAgdmFyIGNvbnRleHQgPSBudWxsO1xuXG4gICAgZnVuY3Rpb24gZXZhbHVhdGUoc2NvcGUpIHtcbiAgICAgIHZhciBzID0gc2NvcGUgfHwge307XG5cbiAgICAgIF92YWxpZGF0ZVNjb3BlKHMpO1xuXG4gICAgICByZXR1cm4gZXhwcihzLCBhcmdzLCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZXZhbHVhdGU6IGV2YWx1YXRlLFxuICAgICAgLy8gVE9ETzogRGVwcmVjYXRlZCBzaW5jZSB2Ni4wLjAuIENsZWFuIHVwIHNvbWUgZGF5XG4gICAgICBldmFsOiBmdW5jdGlvbiBkZXByZWNhdGVkRXZhbChzY29wZSkge1xuICAgICAgICAoMCwgX2xvZy53YXJuT25jZSkoJ01ldGhvZCBldmFsIGlzIHJlbmFtZWQgdG8gZXZhbHVhdGUuIFBsZWFzZSB1c2UgdGhlIG5ldyBtZXRob2QuJyk7XG4gICAgICAgIHJldHVybiBldmFsdWF0ZShzY29wZSk7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIENvbXBpbGUgYSBub2RlIGludG8gYSBKYXZhU2NyaXB0IGZ1bmN0aW9uLlxuICAgKiBUaGlzIGJhc2ljYWxseSBwcmUtY2FsY3VsYXRlcyBhcyBtdWNoIGFzIHBvc3NpYmxlIGFuZCBvbmx5IGxlYXZlcyBvcGVuXG4gICAqIGNhbGN1bGF0aW9ucyB3aGljaCBkZXBlbmQgb24gYSBkeW5hbWljIHNjb3BlIHdpdGggdmFyaWFibGVzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gbWF0aCAgICAgTWF0aC5qcyBuYW1lc3BhY2Ugd2l0aCBmdW5jdGlvbnMgYW5kIGNvbnN0YW50cy5cbiAgICogQHBhcmFtIHtPYmplY3R9IGFyZ05hbWVzIEFuIG9iamVjdCB3aXRoIGFyZ3VtZW50IG5hbWVzIGFzIGtleSBhbmQgYHRydWVgXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBhcyB2YWx1ZS4gVXNlZCBpbiB0aGUgU3ltYm9sTm9kZSB0byBvcHRpbWl6ZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFyZ3VtZW50cyBmcm9tIHVzZXIgYXNzaWduZWQgZnVuY3Rpb25zXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VlIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUpIG9yIHNwZWNpYWwgc3ltYm9sc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSBgZW5kYCAoc2VlIEluZGV4Tm9kZSkuXG4gICAqIEByZXR1cm4ge2Z1bmN0aW9ufSBSZXR1cm5zIGEgZnVuY3Rpb24gd2hpY2ggY2FuIGJlIGNhbGxlZCBsaWtlOlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWxOb2RlKHNjb3BlOiBPYmplY3QsIGFyZ3M6IE9iamVjdCwgY29udGV4dDogKilcbiAgICovXG5cblxuICBOb2RlLnByb3RvdHlwZS5fY29tcGlsZSA9IGZ1bmN0aW9uIChtYXRoLCBhcmdOYW1lcykge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIF9jb21waWxlIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBieSB0eXBlICcgKyB0aGlzLnR5cGUpO1xuICB9O1xuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBlYWNoIG9mIHRoZSBjaGlsZCBub2RlcyBvZiB0aGlzIG5vZGVcbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpfSBjYWxsYmFja1xuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAvLyBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGVhY2ggb2YgdGhlIE5vZGUgaW1wbGVtZW50YXRpb25zXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcnVuIGZvckVhY2ggb24gYSBOb2RlIGludGVyZmFjZScpO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IE5vZGUgaGF2aW5nIGl0J3MgY2hpbGRzIGJlIHRoZSByZXN1bHRzIG9mIGNhbGxpbmdcbiAgICogdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBlYWNoIG9mIHRoZSBjaGlsZHMgb2YgdGhlIG9yaWdpbmFsIG5vZGUuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKTogTm9kZX0gY2FsbGJhY2tcbiAgICogQHJldHVybnMge09wZXJhdG9yTm9kZX0gUmV0dXJucyBhIHRyYW5zZm9ybWVkIGNvcHkgb2YgdGhlIG5vZGVcbiAgICovXG5cblxuICBOb2RlLnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAvLyBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGVhY2ggb2YgdGhlIE5vZGUgaW1wbGVtZW50YXRpb25zXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcnVuIG1hcCBvbiBhIE5vZGUgaW50ZXJmYWNlJyk7XG4gIH07XG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB3aGV0aGVyIGFuIG9iamVjdCBpcyBhIE5vZGUsIGZvciB1c2Ugd2l0aCBtYXBcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqIEByZXR1cm5zIHtOb2RlfSBSZXR1cm5zIHRoZSBpbnB1dCBpZiBpdCdzIGEgbm9kZSwgZWxzZSB0aHJvd3MgYW4gRXJyb3JcbiAgICogQHByb3RlY3RlZFxuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLl9pZk5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIGlmICghKDAsIF9pcy5pc05vZGUpKG5vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYWxsYmFjayBmdW5jdGlvbiBtdXN0IHJldHVybiBhIE5vZGUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfTtcbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IHRyYXZlcnNlIGFsbCBub2RlcyBpbiBhIG5vZGUgdHJlZS4gRXhlY3V0ZXMgZ2l2ZW4gY2FsbGJhY2sgZm9yXG4gICAqIHRoaXMgbm9kZSBhbmQgZWFjaCBvZiBpdHMgY2hpbGQgbm9kZXMuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obm9kZTogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpfSBjYWxsYmFja1xuICAgKiAgICAgICAgICBBIGNhbGxiYWNrIGNhbGxlZCBmb3IgZXZlcnkgbm9kZSBpbiB0aGUgbm9kZSB0cmVlLlxuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLnRyYXZlcnNlID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgLy8gZXhlY3V0ZSBjYWxsYmFjayBmb3IgaXRzZWxmXG4gICAgY2FsbGJhY2sodGhpcywgbnVsbCwgbnVsbCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgc3RhbmRhcmQvbm8tY2FsbGJhY2stbGl0ZXJhbFxuICAgIC8vIHJlY3Vyc2l2ZWx5IHRyYXZlcnNlIG92ZXIgYWxsIGNoaWxkcyBvZiBhIG5vZGVcblxuICAgIGZ1bmN0aW9uIF90cmF2ZXJzZShub2RlLCBjYWxsYmFjaykge1xuICAgICAgbm9kZS5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCwgcGF0aCwgcGFyZW50KSB7XG4gICAgICAgIGNhbGxiYWNrKGNoaWxkLCBwYXRoLCBwYXJlbnQpO1xuXG4gICAgICAgIF90cmF2ZXJzZShjaGlsZCwgY2FsbGJhY2spO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgX3RyYXZlcnNlKHRoaXMsIGNhbGxiYWNrKTtcbiAgfTtcbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IHRyYW5zZm9ybSBhIG5vZGUgdHJlZSB2aWEgYSB0cmFuc2Zvcm0gZnVuY3Rpb24uXG4gICAqXG4gICAqIEZvciBleGFtcGxlLCB0byByZXBsYWNlIGFsbCBub2RlcyBvZiB0eXBlIFN5bWJvbE5vZGUgaGF2aW5nIG5hbWUgJ3gnIHdpdGggYVxuICAgKiBDb25zdGFudE5vZGUgd2l0aCB2YWx1ZSAyOlxuICAgKlxuICAgKiAgICAgY29uc3QgcmVzID0gTm9kZS50cmFuc2Zvcm0oZnVuY3Rpb24gKG5vZGUsIHBhdGgsIHBhcmVudCkge1xuICAgKiAgICAgICBpZiAobm9kZSAmJiBub2RlLmlzU3ltYm9sTm9kZSkgJiYgKG5vZGUubmFtZSA9PT0gJ3gnKSkge1xuICAgKiAgICAgICAgIHJldHVybiBuZXcgQ29uc3RhbnROb2RlKDIpXG4gICAqICAgICAgIH1cbiAgICogICAgICAgZWxzZSB7XG4gICAqICAgICAgICAgcmV0dXJuIG5vZGVcbiAgICogICAgICAgfVxuICAgKiAgICAgfSlcbiAgICpcbiAgICogQHBhcmFtIHtmdW5jdGlvbihub2RlOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSkgOiBOb2RlfSBjYWxsYmFja1xuICAgKiAgICAgICAgICBBIG1hcHBpbmcgZnVuY3Rpb24gYWNjZXB0aW5nIGEgbm9kZSwgYW5kIHJldHVybmluZ1xuICAgKiAgICAgICAgICBhIHJlcGxhY2VtZW50IGZvciB0aGUgbm9kZSBvciB0aGUgb3JpZ2luYWwgbm9kZS5cbiAgICogICAgICAgICAgU2lnbmF0dXJlOiBjYWxsYmFjayhub2RlOiBOb2RlLCBpbmRleDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpIDogTm9kZVxuICAgKiBAcmV0dXJuIHtOb2RlfSBSZXR1cm5zIHRoZSBvcmlnaW5hbCBub2RlIG9yIGl0cyByZXBsYWNlbWVudFxuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLnRyYW5zZm9ybSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIGZ1bmN0aW9uIF90cmFuc2Zvcm0oY2hpbGQsIHBhdGgsIHBhcmVudCkge1xuICAgICAgdmFyIHJlcGxhY2VtZW50ID0gY2FsbGJhY2soY2hpbGQsIHBhdGgsIHBhcmVudCk7XG5cbiAgICAgIGlmIChyZXBsYWNlbWVudCAhPT0gY2hpbGQpIHtcbiAgICAgICAgLy8gc3RvcCBpdGVyYXRpbmcgd2hlbiB0aGUgbm9kZSBpcyByZXBsYWNlZFxuICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjaGlsZC5tYXAoX3RyYW5zZm9ybSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF90cmFuc2Zvcm0odGhpcywgbnVsbCwgbnVsbCk7XG4gIH07XG4gIC8qKlxuICAgKiBGaW5kIGFueSBub2RlIGluIHRoZSBub2RlIHRyZWUgbWF0Y2hpbmcgZ2l2ZW4gZmlsdGVyIGZ1bmN0aW9uLiBGb3IgZXhhbXBsZSwgdG9cbiAgICogZmluZCBhbGwgbm9kZXMgb2YgdHlwZSBTeW1ib2xOb2RlIGhhdmluZyBuYW1lICd4JzpcbiAgICpcbiAgICogICAgIGNvbnN0IHJlc3VsdHMgPSBOb2RlLmZpbHRlcihmdW5jdGlvbiAobm9kZSkge1xuICAgKiAgICAgICByZXR1cm4gKG5vZGUgJiYgbm9kZS5pc1N5bWJvbE5vZGUpICYmIChub2RlLm5hbWUgPT09ICd4JylcbiAgICogICAgIH0pXG4gICAqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obm9kZTogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpIDogTm9kZX0gY2FsbGJhY2tcbiAgICogICAgICAgICAgICBBIHRlc3QgZnVuY3Rpb24gcmV0dXJuaW5nIHRydWUgd2hlbiBhIG5vZGUgbWF0Y2hlcywgYW5kIGZhbHNlXG4gICAqICAgICAgICAgICAgb3RoZXJ3aXNlLiBGdW5jdGlvbiBzaWduYXR1cmU6XG4gICAqICAgICAgICAgICAgY2FsbGJhY2sobm9kZTogTm9kZSwgaW5kZXg6IHN0cmluZywgcGFyZW50OiBOb2RlKSA6IGJvb2xlYW5cbiAgICogQHJldHVybiB7Tm9kZVtdfSBub2RlcyAgICAgICBBbiBhcnJheSB3aXRoIG5vZGVzIG1hdGNoaW5nIGdpdmVuIGZpbHRlciBjcml0ZXJpYVxuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLmZpbHRlciA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHZhciBub2RlcyA9IFtdO1xuICAgIHRoaXMudHJhdmVyc2UoZnVuY3Rpb24gKG5vZGUsIHBhdGgsIHBhcmVudCkge1xuICAgICAgaWYgKGNhbGxiYWNrKG5vZGUsIHBhdGgsIHBhcmVudCkpIHtcbiAgICAgICAgbm9kZXMucHVzaChub2RlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gbm9kZXM7XG4gIH07IC8vIFRPRE86IGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAxLjEuMCwgcmVtb3ZlIHRoaXMgc29tZSBkYXlcblxuXG4gIE5vZGUucHJvdG90eXBlLmZpbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGdW5jdGlvbiBOb2RlLmZpbmQgaXMgZGVwcmVjYXRlZC4gVXNlIE5vZGUuZmlsdGVyIGluc3RlYWQuJyk7XG4gIH07IC8vIFRPRE86IGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAxLjEuMCwgcmVtb3ZlIHRoaXMgc29tZSBkYXlcblxuXG4gIE5vZGUucHJvdG90eXBlLm1hdGNoID0gZnVuY3Rpb24gKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRnVuY3Rpb24gTm9kZS5tYXRjaCBpcyBkZXByZWNhdGVkLiBTZWUgZnVuY3Rpb25zIE5vZGUuZmlsdGVyLCBOb2RlLnRyYW5zZm9ybSwgTm9kZS50cmF2ZXJzZS4nKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgb2YgdGhpcyBub2RlXG4gICAqIEByZXR1cm4ge05vZGV9XG4gICAqL1xuXG5cbiAgTm9kZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIG9mIHRoZSBOb2RlIGltcGxlbWVudGF0aW9uc1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNsb25lIGEgTm9kZSBpbnRlcmZhY2UnKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGRlZXAgY2xvbmUgb2YgdGhpcyBub2RlXG4gICAqIEByZXR1cm4ge05vZGV9XG4gICAqL1xuXG5cbiAgTm9kZS5wcm90b3R5cGUuY2xvbmVEZWVwID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgcmV0dXJuIG5vZGUuY2xvbmVEZWVwKCk7XG4gICAgfSk7XG4gIH07XG4gIC8qKlxuICAgKiBEZWVwIGNvbXBhcmUgdGhpcyBub2RlIHdpdGggYW5vdGhlciBub2RlLlxuICAgKiBAcGFyYW0ge05vZGV9IG90aGVyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSB3aGVuIGJvdGggbm9kZXMgYXJlIG9mIHRoZSBzYW1lIHR5cGUgYW5kXG4gICAqICAgICAgICAgICAgICAgICAgIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWVzIChhcyBkbyB0aGVpciBjaGlsZHMpXG4gICAqL1xuXG5cbiAgTm9kZS5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gKG90aGVyKSB7XG4gICAgcmV0dXJuIG90aGVyID8gKDAsIF9vYmplY3QuZGVlcFN0cmljdEVxdWFsKSh0aGlzLCBvdGhlcikgOiBmYWxzZTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb24uICh3cmFwcGVyIGZ1bmN0aW9uKVxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGNhbiBnZXQgYW4gb2JqZWN0IG9mIHRoZSBmb2xsb3dpbmcgZm9ybTpcbiAgICoge1xuICAgKiAgICBoYW5kbGVyOiAvL1RoaXMgY2FuIGJlIGEgY2FsbGJhY2sgZnVuY3Rpb24gb2YgdGhlIGZvcm1cbiAgICogICAgICAgICAgICAgLy8gXCJmdW5jdGlvbiBjYWxsYmFjayhub2RlLCBvcHRpb25zKVwib3JcbiAgICogICAgICAgICAgICAgLy8gYSBtYXAgdGhhdCBtYXBzIGZ1bmN0aW9uIG5hbWVzICh1c2VkIGluIEZ1bmN0aW9uTm9kZXMpXG4gICAqICAgICAgICAgICAgIC8vIHRvIGNhbGxiYWNrc1xuICAgKiAgICBwYXJlbnRoZXNpczogXCJrZWVwXCIgLy90aGUgcGFyZW50aGVzaXMgb3B0aW9uIChUaGlzIGlzIG9wdGlvbmFsKVxuICAgKiB9XG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgY3VzdG9tU3RyaW5nO1xuXG4gICAgaWYgKG9wdGlvbnMgJiYgX3R5cGVvZihvcHRpb25zKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHN3aXRjaCAoX3R5cGVvZihvcHRpb25zLmhhbmRsZXIpKSB7XG4gICAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgICAgIGN1c3RvbVN0cmluZyA9IG9wdGlvbnMuaGFuZGxlcih0aGlzLCBvcHRpb25zKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdCBvciBmdW5jdGlvbiBleHBlY3RlZCBhcyBjYWxsYmFjaycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY3VzdG9tU3RyaW5nICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGN1c3RvbVN0cmluZztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fdG9TdHJpbmcob3B0aW9ucyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBub2RlXG4gICAqIEJvdGggLnRvSlNPTigpIGFuZCB0aGUgc3RhdGljIC5mcm9tSlNPTihqc29uKSBzaG91bGQgYmUgaW1wbGVtZW50ZWQgYnkgYWxsXG4gICAqIGltcGxlbWVudGF0aW9ucyBvZiBOb2RlXG4gICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAqL1xuXG5cbiAgTm9kZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHNlcmlhbGl6ZSBvYmplY3Q6IHRvSlNPTiBub3QgaW1wbGVtZW50ZWQgYnkgJyArIHRoaXMudHlwZSk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgSFRNTCByZXByZXNlbnRhdGlvbi4gKHdyYXBwZXIgZnVuY3Rpb24pXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gY2FuIGdldCBhbiBvYmplY3Qgb2YgdGhlIGZvbGxvd2luZyBmb3JtOlxuICAgKiB7XG4gICAqICAgIGhhbmRsZXI6IC8vVGhpcyBjYW4gYmUgYSBjYWxsYmFjayBmdW5jdGlvbiBvZiB0aGUgZm9ybVxuICAgKiAgICAgICAgICAgICAvLyBcImZ1bmN0aW9uIGNhbGxiYWNrKG5vZGUsIG9wdGlvbnMpXCIgb3JcbiAgICogICAgICAgICAgICAgLy8gYSBtYXAgdGhhdCBtYXBzIGZ1bmN0aW9uIG5hbWVzICh1c2VkIGluIEZ1bmN0aW9uTm9kZXMpXG4gICAqICAgICAgICAgICAgIC8vIHRvIGNhbGxiYWNrc1xuICAgKiAgICBwYXJlbnRoZXNpczogXCJrZWVwXCIgLy90aGUgcGFyZW50aGVzaXMgb3B0aW9uIChUaGlzIGlzIG9wdGlvbmFsKVxuICAgKiB9XG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLnRvSFRNTCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIGN1c3RvbVN0cmluZztcblxuICAgIGlmIChvcHRpb25zICYmIF90eXBlb2Yob3B0aW9ucykgPT09ICdvYmplY3QnKSB7XG4gICAgICBzd2l0Y2ggKF90eXBlb2Yob3B0aW9ucy5oYW5kbGVyKSkge1xuICAgICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgICBjdXN0b21TdHJpbmcgPSBvcHRpb25zLmhhbmRsZXIodGhpcywgb3B0aW9ucyk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qgb3IgZnVuY3Rpb24gZXhwZWN0ZWQgYXMgY2FsbGJhY2snKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGN1c3RvbVN0cmluZyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBjdXN0b21TdHJpbmc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudG9IVE1MKG9wdGlvbnMpO1xuICB9O1xuICAvKipcbiAgICogSW50ZXJuYWwgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgdGhlIHN0cmluZyBvdXRwdXQuXG4gICAqIFRoaXMgaGFzIHRvIGJlIGltcGxlbWVudGVkIGJ5IGV2ZXJ5IE5vZGVcbiAgICpcbiAgICogQHRocm93cyB7RXJyb3J9XG4gICAqL1xuXG5cbiAgTm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBvZiB0aGUgTm9kZSBpbXBsZW1lbnRhdGlvbnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ190b1N0cmluZyBub3QgaW1wbGVtZW50ZWQgZm9yICcgKyB0aGlzLnR5cGUpO1xuICB9O1xuICAvKipcbiAgICogR2V0IExhVGVYIHJlcHJlc2VudGF0aW9uLiAod3JhcHBlciBmdW5jdGlvbilcbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiBjYW4gZ2V0IGFuIG9iamVjdCBvZiB0aGUgZm9sbG93aW5nIGZvcm06XG4gICAqIHtcbiAgICogICAgaGFuZGxlcjogLy9UaGlzIGNhbiBiZSBhIGNhbGxiYWNrIGZ1bmN0aW9uIG9mIHRoZSBmb3JtXG4gICAqICAgICAgICAgICAgIC8vIFwiZnVuY3Rpb24gY2FsbGJhY2sobm9kZSwgb3B0aW9ucylcIm9yXG4gICAqICAgICAgICAgICAgIC8vIGEgbWFwIHRoYXQgbWFwcyBmdW5jdGlvbiBuYW1lcyAodXNlZCBpbiBGdW5jdGlvbk5vZGVzKVxuICAgKiAgICAgICAgICAgICAvLyB0byBjYWxsYmFja3NcbiAgICogICAgcGFyZW50aGVzaXM6IFwia2VlcFwiIC8vdGhlIHBhcmVudGhlc2lzIG9wdGlvbiAoVGhpcyBpcyBvcHRpb25hbClcbiAgICogfVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBOb2RlLnByb3RvdHlwZS50b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIGN1c3RvbVRleDtcblxuICAgIGlmIChvcHRpb25zICYmIF90eXBlb2Yob3B0aW9ucykgPT09ICdvYmplY3QnKSB7XG4gICAgICBzd2l0Y2ggKF90eXBlb2Yob3B0aW9ucy5oYW5kbGVyKSkge1xuICAgICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgICBjdXN0b21UZXggPSBvcHRpb25zLmhhbmRsZXIodGhpcywgb3B0aW9ucyk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qgb3IgZnVuY3Rpb24gZXhwZWN0ZWQgYXMgY2FsbGJhY2snKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGN1c3RvbVRleCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBjdXN0b21UZXg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3RvVGV4KG9wdGlvbnMpO1xuICB9O1xuICAvKipcbiAgICogSW50ZXJuYWwgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgdGhlIExhVGVYIG91dHB1dC5cbiAgICogVGhpcyBoYXMgdG8gYmUgaW1wbGVtZW50ZWQgYnkgZXZlcnkgTm9kZVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gICAqIEB0aHJvd3Mge0Vycm9yfVxuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLl90b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgLy8gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIG9mIHRoZSBOb2RlIGltcGxlbWVudGF0aW9uc1xuICAgIHRocm93IG5ldyBFcnJvcignX3RvVGV4IG5vdCBpbXBsZW1lbnRlZCBmb3IgJyArIHRoaXMudHlwZSk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgaWRlbnRpZmllci5cbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLmdldElkZW50aWZpZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCB0aGUgY29udGVudCBvZiB0aGUgY3VycmVudCBOb2RlLlxuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLmdldENvbnRlbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGUgc3ltYm9sIG5hbWVzIG9mIGEgc2NvcGUuXG4gICAqIFRocm93cyBhbiBlcnJvciB3aGVuIHRoZSBzY29wZSBjb250YWlucyBhbiBpbGxlZ2FsIHN5bWJvbC5cbiAgICogQHBhcmFtIHtPYmplY3R9IHNjb3BlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX3ZhbGlkYXRlU2NvcGUoc2NvcGUpIHtcbiAgICBmb3IgKHZhciBzeW1ib2wgaW4gc2NvcGUpIHtcbiAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoc2NvcGUsIHN5bWJvbCkpIHtcbiAgICAgICAgaWYgKHN5bWJvbCBpbiBfa2V5d29yZHMua2V5d29yZHMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Njb3BlIGNvbnRhaW5zIGFuIGlsbGVnYWwgc3ltYm9sLCBcIicgKyBzeW1ib2wgKyAnXCIgaXMgYSByZXNlcnZlZCBrZXl3b3JkJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gTm9kZTtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZSxcbiAgaXNOb2RlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTm9kZSA9IGNyZWF0ZU5vZGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU9iamVjdE5vZGUgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3N0cmluZ1wiKTtcblxudmFyIF9jdXN0b21zID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2N1c3RvbXNcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIG5hbWUgPSAnT2JqZWN0Tm9kZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydOb2RlJ107XG52YXIgY3JlYXRlT2JqZWN0Tm9kZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBOb2RlID0gX3JlZi5Ob2RlO1xuXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3IgT2JqZWN0Tm9kZVxuICAgKiBAZXh0ZW5kcyB7Tm9kZX1cbiAgICogSG9sZHMgYW4gb2JqZWN0IHdpdGgga2V5cy92YWx1ZXNcbiAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywgTm9kZT59IFtwcm9wZXJ0aWVzXSAgIG9iamVjdCB3aXRoIGtleS92YWx1ZSBwYWlyc1xuICAgKi9cbiAgZnVuY3Rpb24gT2JqZWN0Tm9kZShwcm9wZXJ0aWVzKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIE9iamVjdE5vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH1cblxuICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXMgfHwge307IC8vIHZhbGlkYXRlIGlucHV0XG5cbiAgICBpZiAocHJvcGVydGllcykge1xuICAgICAgaWYgKCEoX3R5cGVvZihwcm9wZXJ0aWVzKSA9PT0gJ29iamVjdCcpIHx8ICFPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKS5ldmVyeShmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHJldHVybiAoMCwgX2lzLmlzTm9kZSkocHJvcGVydGllc1trZXldKTtcbiAgICAgIH0pKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdCBjb250YWluaW5nIE5vZGVzIGV4cGVjdGVkJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgT2JqZWN0Tm9kZS5wcm90b3R5cGUgPSBuZXcgTm9kZSgpO1xuICBPYmplY3ROb2RlLnByb3RvdHlwZS50eXBlID0gJ09iamVjdE5vZGUnO1xuICBPYmplY3ROb2RlLnByb3RvdHlwZS5pc09iamVjdE5vZGUgPSB0cnVlO1xuICAvKipcbiAgICogQ29tcGlsZSBhIG5vZGUgaW50byBhIEphdmFTY3JpcHQgZnVuY3Rpb24uXG4gICAqIFRoaXMgYmFzaWNhbGx5IHByZS1jYWxjdWxhdGVzIGFzIG11Y2ggYXMgcG9zc2libGUgYW5kIG9ubHkgbGVhdmVzIG9wZW5cbiAgICogY2FsY3VsYXRpb25zIHdoaWNoIGRlcGVuZCBvbiBhIGR5bmFtaWMgc2NvcGUgd2l0aCB2YXJpYWJsZXMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBtYXRoICAgICBNYXRoLmpzIG5hbWVzcGFjZSB3aXRoIGZ1bmN0aW9ucyBhbmQgY29uc3RhbnRzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gYXJnTmFtZXMgQW4gb2JqZWN0IHdpdGggYXJndW1lbnQgbmFtZXMgYXMga2V5IGFuZCBgdHJ1ZWBcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHZhbHVlLiBVc2VkIGluIHRoZSBTeW1ib2xOb2RlIHRvIG9wdGltaXplXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJndW1lbnRzIGZyb20gdXNlciBhc3NpZ25lZCBmdW5jdGlvbnNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIChzZWUgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSkgb3Igc3BlY2lhbCBzeW1ib2xzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlIGBlbmRgIChzZWUgSW5kZXhOb2RlKS5cbiAgICogQHJldHVybiB7ZnVuY3Rpb259IFJldHVybnMgYSBmdW5jdGlvbiB3aGljaCBjYW4gYmUgY2FsbGVkIGxpa2U6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgZXZhbE5vZGUoc2NvcGU6IE9iamVjdCwgYXJnczogT2JqZWN0LCBjb250ZXh0OiAqKVxuICAgKi9cblxuICBPYmplY3ROb2RlLnByb3RvdHlwZS5fY29tcGlsZSA9IGZ1bmN0aW9uIChtYXRoLCBhcmdOYW1lcykge1xuICAgIHZhciBldmFsRW50cmllcyA9IHt9O1xuXG4gICAgZm9yICh2YXIga2V5IGluIHRoaXMucHJvcGVydGllcykge1xuICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KSh0aGlzLnByb3BlcnRpZXMsIGtleSkpIHtcbiAgICAgICAgLy8gd2Ugc3RyaW5naWZ5L3BhcnNlIHRoZSBrZXkgaGVyZSB0byByZXNvbHZlIHVuaWNvZGUgY2hhcmFjdGVycyxcbiAgICAgICAgLy8gc28geW91IGNhbm5vdCBjcmVhdGUgYSBrZXkgbGlrZSB7XCJjb1xcXFx1MDA2RXN0cnVjdG9yXCI6IG51bGx9XG4gICAgICAgIHZhciBzdHJpbmdpZmllZEtleSA9ICgwLCBfc3RyaW5nLnN0cmluZ2lmeSkoa2V5KTtcbiAgICAgICAgdmFyIHBhcnNlZEtleSA9IEpTT04ucGFyc2Uoc3RyaW5naWZpZWRLZXkpO1xuXG4gICAgICAgIGlmICghKDAsIF9jdXN0b21zLmlzU2FmZVByb3BlcnR5KSh0aGlzLnByb3BlcnRpZXMsIHBhcnNlZEtleSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGFjY2VzcyB0byBwcm9wZXJ0eSBcIicgKyBwYXJzZWRLZXkgKyAnXCInKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGV2YWxFbnRyaWVzW3BhcnNlZEtleV0gPSB0aGlzLnByb3BlcnRpZXNba2V5XS5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxPYmplY3ROb2RlKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICB2YXIgb2JqID0ge307XG5cbiAgICAgIGZvciAodmFyIF9rZXkgaW4gZXZhbEVudHJpZXMpIHtcbiAgICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShldmFsRW50cmllcywgX2tleSkpIHtcbiAgICAgICAgICBvYmpbX2tleV0gPSBldmFsRW50cmllc1tfa2V5XShzY29wZSwgYXJncywgY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBlYWNoIG9mIHRoZSBjaGlsZCBub2RlcyBvZiB0aGlzIG5vZGVcbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpfSBjYWxsYmFja1xuICAgKi9cblxuXG4gIE9iamVjdE5vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5wcm9wZXJ0aWVzKSB7XG4gICAgICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKHRoaXMucHJvcGVydGllcywga2V5KSkge1xuICAgICAgICBjYWxsYmFjayh0aGlzLnByb3BlcnRpZXNba2V5XSwgJ3Byb3BlcnRpZXNbJyArICgwLCBfc3RyaW5nLnN0cmluZ2lmeSkoa2V5KSArICddJywgdGhpcyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IE9iamVjdE5vZGUgaGF2aW5nIGl0J3MgY2hpbGRzIGJlIHRoZSByZXN1bHRzIG9mIGNhbGxpbmdcbiAgICogdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBlYWNoIG9mIHRoZSBjaGlsZHMgb2YgdGhlIG9yaWdpbmFsIG5vZGUuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKTogTm9kZX0gY2FsbGJhY2tcbiAgICogQHJldHVybnMge09iamVjdE5vZGV9IFJldHVybnMgYSB0cmFuc2Zvcm1lZCBjb3B5IG9mIHRoZSBub2RlXG4gICAqL1xuXG5cbiAgT2JqZWN0Tm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgdmFyIHByb3BlcnRpZXMgPSB7fTtcblxuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnByb3BlcnRpZXMpIHtcbiAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkodGhpcy5wcm9wZXJ0aWVzLCBrZXkpKSB7XG4gICAgICAgIHByb3BlcnRpZXNba2V5XSA9IHRoaXMuX2lmTm9kZShjYWxsYmFjayh0aGlzLnByb3BlcnRpZXNba2V5XSwgJ3Byb3BlcnRpZXNbJyArICgwLCBfc3RyaW5nLnN0cmluZ2lmeSkoa2V5KSArICddJywgdGhpcykpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgT2JqZWN0Tm9kZShwcm9wZXJ0aWVzKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoaXMgbm9kZSwgYSBzaGFsbG93IGNvcHlcbiAgICogQHJldHVybiB7T2JqZWN0Tm9kZX1cbiAgICovXG5cblxuICBPYmplY3ROb2RlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJvcGVydGllcyA9IHt9O1xuXG4gICAgZm9yICh2YXIga2V5IGluIHRoaXMucHJvcGVydGllcykge1xuICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KSh0aGlzLnByb3BlcnRpZXMsIGtleSkpIHtcbiAgICAgICAgcHJvcGVydGllc1trZXldID0gdGhpcy5wcm9wZXJ0aWVzW2tleV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBPYmplY3ROb2RlKHByb3BlcnRpZXMpO1xuICB9O1xuICAvKipcbiAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKiBAb3ZlcnJpZGVcbiAgICovXG5cblxuICBPYmplY3ROb2RlLnByb3RvdHlwZS5fdG9TdHJpbmcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBlbnRyaWVzID0gW107XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5wcm9wZXJ0aWVzKSB7XG4gICAgICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKHRoaXMucHJvcGVydGllcywga2V5KSkge1xuICAgICAgICBlbnRyaWVzLnB1c2goKDAsIF9zdHJpbmcuc3RyaW5naWZ5KShrZXkpICsgJzogJyArIHRoaXMucHJvcGVydGllc1trZXldLnRvU3RyaW5nKG9wdGlvbnMpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gJ3snICsgZW50cmllcy5qb2luKCcsICcpICsgJ30nO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cblxuXG4gIE9iamVjdE5vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnT2JqZWN0Tm9kZScsXG4gICAgICBwcm9wZXJ0aWVzOiB0aGlzLnByb3BlcnRpZXNcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogSW5zdGFudGlhdGUgYW4gT3BlcmF0b3JOb2RlIGZyb20gaXRzIEpTT04gcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIEFuIG9iamVjdCBzdHJ1Y3R1cmVkIGxpa2VcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJPYmplY3ROb2RlXCIsIFwicHJvcGVydGllc1wiOiB7Li4ufX1gLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgbWF0aGpzIGlzIG9wdGlvbmFsXG4gICAqIEByZXR1cm5zIHtPYmplY3ROb2RlfVxuICAgKi9cblxuXG4gIE9iamVjdE5vZGUuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBuZXcgT2JqZWN0Tm9kZShqc29uLnByb3BlcnRpZXMpO1xuICB9O1xuICAvKipcbiAgICogR2V0IEhUTUwgcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuXG5cbiAgT2JqZWN0Tm9kZS5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgZW50cmllcyA9IFtdO1xuXG4gICAgZm9yICh2YXIga2V5IGluIHRoaXMucHJvcGVydGllcykge1xuICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KSh0aGlzLnByb3BlcnRpZXMsIGtleSkpIHtcbiAgICAgICAgZW50cmllcy5wdXNoKCc8c3BhbiBjbGFzcz1cIm1hdGgtc3ltYm9sIG1hdGgtcHJvcGVydHlcIj4nICsgKDAsIF9zdHJpbmcuZXNjYXBlKShrZXkpICsgJzwvc3Bhbj4nICsgJzxzcGFuIGNsYXNzPVwibWF0aC1vcGVyYXRvciBtYXRoLWFzc2lnbm1lbnQtb3BlcmF0b3IgbWF0aC1wcm9wZXJ0eS1hc3NpZ25tZW50LW9wZXJhdG9yIG1hdGgtYmluYXJ5LW9wZXJhdG9yXCI+Ojwvc3Bhbj4nICsgdGhpcy5wcm9wZXJ0aWVzW2tleV0udG9IVE1MKG9wdGlvbnMpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLWN1cmx5LXBhcmVudGhlc2lzXCI+ezwvc3Bhbj4nICsgZW50cmllcy5qb2luKCc8c3BhbiBjbGFzcz1cIm1hdGgtc2VwYXJhdG9yXCI+LDwvc3Bhbj4nKSArICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyZW50aGVzaXMgbWF0aC1jdXJseS1wYXJlbnRoZXNpc1wiPn08L3NwYW4+JztcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBMYVRlWCByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIE9iamVjdE5vZGUucHJvdG90eXBlLl90b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIGVudHJpZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnByb3BlcnRpZXMpIHtcbiAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkodGhpcy5wcm9wZXJ0aWVzLCBrZXkpKSB7XG4gICAgICAgIGVudHJpZXMucHVzaCgnXFxcXG1hdGhiZnsnICsga2V5ICsgJzp9ICYgJyArIHRoaXMucHJvcGVydGllc1trZXldLnRvVGV4KG9wdGlvbnMpICsgJ1xcXFxcXFxcJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFwiXFxcXGxlZnRcXFxce1xcXFxiZWdpbnthcnJheX17bGx9XCIuY29uY2F0KGVudHJpZXMuam9pbignXFxuJyksIFwiXFxcXGVuZHthcnJheX1cXFxccmlnaHRcXFxcfVwiKTtcbiAgfTtcblxuICByZXR1cm4gT2JqZWN0Tm9kZTtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZSxcbiAgaXNOb2RlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlT2JqZWN0Tm9kZSA9IGNyZWF0ZU9iamVjdE5vZGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU9wZXJhdG9yTm9kZSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvc3RyaW5nXCIpO1xuXG52YXIgX2N1c3RvbXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY3VzdG9tc1wiKTtcblxudmFyIF9vcGVyYXRvcnMgPSByZXF1aXJlKFwiLi4vb3BlcmF0b3JzXCIpO1xuXG52YXIgX2xhdGV4ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2xhdGV4XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnT3BlcmF0b3JOb2RlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ05vZGUnXTtcbnZhciBjcmVhdGVPcGVyYXRvck5vZGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgTm9kZSA9IF9yZWYuTm9kZTtcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yIE9wZXJhdG9yTm9kZVxuICAgKiBAZXh0ZW5kcyB7Tm9kZX1cbiAgICogQW4gb3BlcmF0b3Igd2l0aCB0d28gYXJndW1lbnRzLCBsaWtlIDIrM1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3AgICAgICAgICAgIE9wZXJhdG9yIG5hbWUsIGZvciBleGFtcGxlICcrJ1xuICAgKiBAcGFyYW0ge3N0cmluZ30gZm4gICAgICAgICAgIEZ1bmN0aW9uIG5hbWUsIGZvciBleGFtcGxlICdhZGQnXG4gICAqIEBwYXJhbSB7Tm9kZVtdfSBhcmdzICAgICAgICAgT3BlcmF0b3IgYXJndW1lbnRzXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ltcGxpY2l0XSAgSXMgdGhpcyBhbiBpbXBsaWNpdCBtdWx0aXBsaWNhdGlvbj9cbiAgICovXG4gIGZ1bmN0aW9uIE9wZXJhdG9yTm9kZShvcCwgZm4sIGFyZ3MsIGltcGxpY2l0KSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIE9wZXJhdG9yTm9kZSkpIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7XG4gICAgfSAvLyB2YWxpZGF0ZSBpbnB1dFxuXG5cbiAgICBpZiAodHlwZW9mIG9wICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc3RyaW5nIGV4cGVjdGVkIGZvciBwYXJhbWV0ZXIgXCJvcFwiJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3N0cmluZyBleHBlY3RlZCBmb3IgcGFyYW1ldGVyIFwiZm5cIicpO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShhcmdzKSB8fCAhYXJncy5ldmVyeShfaXMuaXNOb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgY29udGFpbmluZyBOb2RlcyBleHBlY3RlZCBmb3IgcGFyYW1ldGVyIFwiYXJnc1wiJyk7XG4gICAgfVxuXG4gICAgdGhpcy5pbXBsaWNpdCA9IGltcGxpY2l0ID09PSB0cnVlO1xuICAgIHRoaXMub3AgPSBvcDtcbiAgICB0aGlzLmZuID0gZm47XG4gICAgdGhpcy5hcmdzID0gYXJncyB8fCBbXTtcbiAgfVxuXG4gIE9wZXJhdG9yTm9kZS5wcm90b3R5cGUgPSBuZXcgTm9kZSgpO1xuICBPcGVyYXRvck5vZGUucHJvdG90eXBlLnR5cGUgPSAnT3BlcmF0b3JOb2RlJztcbiAgT3BlcmF0b3JOb2RlLnByb3RvdHlwZS5pc09wZXJhdG9yTm9kZSA9IHRydWU7XG4gIC8qKlxuICAgKiBDb21waWxlIGEgbm9kZSBpbnRvIGEgSmF2YVNjcmlwdCBmdW5jdGlvbi5cbiAgICogVGhpcyBiYXNpY2FsbHkgcHJlLWNhbGN1bGF0ZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSBhbmQgb25seSBsZWF2ZXMgb3BlblxuICAgKiBjYWxjdWxhdGlvbnMgd2hpY2ggZGVwZW5kIG9uIGEgZHluYW1pYyBzY29wZSB3aXRoIHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG1hdGggICAgIE1hdGguanMgbmFtZXNwYWNlIHdpdGggZnVuY3Rpb25zIGFuZCBjb25zdGFudHMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdOYW1lcyBBbiBvYmplY3Qgd2l0aCBhcmd1bWVudCBuYW1lcyBhcyBrZXkgYW5kIGB0cnVlYFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdmFsdWUuIFVzZWQgaW4gdGhlIFN5bWJvbE5vZGUgdG8gb3B0aW1pemVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudHMgZnJvbSB1c2VyIGFzc2lnbmVkIGZ1bmN0aW9uc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZSBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKSBvciBzcGVjaWFsIHN5bWJvbHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UgYGVuZGAgKHNlZSBJbmRleE5vZGUpLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgbGlrZTpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICBldmFsTm9kZShzY29wZTogT2JqZWN0LCBhcmdzOiBPYmplY3QsIGNvbnRleHQ6ICopXG4gICAqL1xuXG4gIE9wZXJhdG9yTm9kZS5wcm90b3R5cGUuX2NvbXBpbGUgPSBmdW5jdGlvbiAobWF0aCwgYXJnTmFtZXMpIHtcbiAgICAvLyB2YWxpZGF0ZSBmblxuICAgIGlmICh0eXBlb2YgdGhpcy5mbiAhPT0gJ3N0cmluZycgfHwgISgwLCBfY3VzdG9tcy5pc1NhZmVNZXRob2QpKG1hdGgsIHRoaXMuZm4pKSB7XG4gICAgICBpZiAoIW1hdGhbdGhpcy5mbl0pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGdW5jdGlvbiAnICsgdGhpcy5mbiArICcgbWlzc2luZyBpbiBwcm92aWRlZCBuYW1lc3BhY2UgXCJtYXRoXCInKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gYWNjZXNzIHRvIGZ1bmN0aW9uIFwiJyArIHRoaXMuZm4gKyAnXCInKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZm4gPSAoMCwgX2N1c3RvbXMuZ2V0U2FmZVByb3BlcnR5KShtYXRoLCB0aGlzLmZuKTtcbiAgICB2YXIgZXZhbEFyZ3MgPSAoMCwgX2FycmF5Lm1hcCkodGhpcy5hcmdzLCBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICByZXR1cm4gYXJnLl9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTtcbiAgICB9KTtcblxuICAgIGlmIChldmFsQXJncy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHZhciBldmFsQXJnMCA9IGV2YWxBcmdzWzBdO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxPcGVyYXRvck5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGZuKGV2YWxBcmcwKHNjb3BlLCBhcmdzLCBjb250ZXh0KSk7XG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoZXZhbEFyZ3MubGVuZ3RoID09PSAyKSB7XG4gICAgICB2YXIgX2V2YWxBcmcgPSBldmFsQXJnc1swXTtcbiAgICAgIHZhciBldmFsQXJnMSA9IGV2YWxBcmdzWzFdO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxPcGVyYXRvck5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGZuKF9ldmFsQXJnKHNjb3BlLCBhcmdzLCBjb250ZXh0KSwgZXZhbEFyZzEoc2NvcGUsIGFyZ3MsIGNvbnRleHQpKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBldmFsT3BlcmF0b3JOb2RlKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBmbi5hcHBseShudWxsLCAoMCwgX2FycmF5Lm1hcCkoZXZhbEFyZ3MsIGZ1bmN0aW9uIChldmFsQXJnKSB7XG4gICAgICAgICAgcmV0dXJuIGV2YWxBcmcoc2NvcGUsIGFyZ3MsIGNvbnRleHQpO1xuICAgICAgICB9KSk7XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZWFjaCBvZiB0aGUgY2hpbGQgbm9kZXMgb2YgdGhpcyBub2RlXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKX0gY2FsbGJhY2tcbiAgICovXG5cblxuICBPcGVyYXRvck5vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgY2FsbGJhY2sodGhpcy5hcmdzW2ldLCAnYXJnc1snICsgaSArICddJywgdGhpcyk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IE9wZXJhdG9yTm9kZSBoYXZpbmcgaXQncyBjaGlsZHMgYmUgdGhlIHJlc3VsdHMgb2YgY2FsbGluZ1xuICAgKiB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggb2YgdGhlIGNoaWxkcyBvZiB0aGUgb3JpZ2luYWwgbm9kZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpOiBOb2RlfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7T3BlcmF0b3JOb2RlfSBSZXR1cm5zIGEgdHJhbnNmb3JtZWQgY29weSBvZiB0aGUgbm9kZVxuICAgKi9cblxuXG4gIE9wZXJhdG9yTm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcmdzW2ldID0gdGhpcy5faWZOb2RlKGNhbGxiYWNrKHRoaXMuYXJnc1tpXSwgJ2FyZ3NbJyArIGkgKyAnXScsIHRoaXMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yTm9kZSh0aGlzLm9wLCB0aGlzLmZuLCBhcmdzLCB0aGlzLmltcGxpY2l0KTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoaXMgbm9kZSwgYSBzaGFsbG93IGNvcHlcbiAgICogQHJldHVybiB7T3BlcmF0b3JOb2RlfVxuICAgKi9cblxuXG4gIE9wZXJhdG9yTm9kZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUodGhpcy5vcCwgdGhpcy5mbiwgdGhpcy5hcmdzLnNsaWNlKDApLCB0aGlzLmltcGxpY2l0KTtcbiAgfTtcbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgdGhpcyBpcyBhbiB1bmFyeSBPcGVyYXRvck5vZGU6XG4gICAqIGhhcyBleGFjdGx5IG9uZSBhcmd1bWVudCwgbGlrZSBgLWFgLlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgd2hlbiBhbiB1bmFyeSBvcGVyYXRvciBub2RlLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuXG5cbiAgT3BlcmF0b3JOb2RlLnByb3RvdHlwZS5pc1VuYXJ5ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmFyZ3MubGVuZ3RoID09PSAxO1xuICB9O1xuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciB0aGlzIGlzIGEgYmluYXJ5IE9wZXJhdG9yTm9kZTpcbiAgICogaGFzIGV4YWN0bHkgdHdvIGFyZ3VtZW50cywgbGlrZSBgYSArIGJgLlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgd2hlbiBhIGJpbmFyeSBvcGVyYXRvciBub2RlLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuXG5cbiAgT3BlcmF0b3JOb2RlLnByb3RvdHlwZS5pc0JpbmFyeSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5hcmdzLmxlbmd0aCA9PT0gMjtcbiAgfTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB3aGljaCBwYXJlbnRoZXNlcyBhcmUgbmVjZXNzYXJ5LiBHZXRzIGFuIE9wZXJhdG9yTm9kZVxuICAgKiAod2hpY2ggaXMgdGhlIHJvb3Qgb2YgdGhlIHRyZWUpIGFuZCBhbiBBcnJheSBvZiBOb2Rlc1xuICAgKiAodGhpcy5hcmdzKSBhbmQgcmV0dXJucyBhbiBhcnJheSB3aGVyZSAndHJ1ZScgbWVhbnMgdGhhdCBhbiBhcmd1bWVudFxuICAgKiBoYXMgdG8gYmUgZW5jbG9zZWQgaW4gcGFyZW50aGVzZXMgd2hlcmVhcyAnZmFsc2UnIG1lYW5zIHRoZSBvcHBvc2l0ZS5cbiAgICpcbiAgICogQHBhcmFtIHtPcGVyYXRvck5vZGV9IHJvb3RcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhcmVudGhlc2lzXG4gICAqIEBwYXJhbSB7Tm9kZVtdfSBhcmdzXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gbGF0ZXhcbiAgICogQHJldHVybiB7Ym9vbGVhbltdfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGNhbGN1bGF0ZU5lY2Vzc2FyeVBhcmVudGhlc2VzKHJvb3QsIHBhcmVudGhlc2lzLCBpbXBsaWNpdCwgYXJncywgbGF0ZXgpIHtcbiAgICAvLyBwcmVjZWRlbmNlIG9mIHRoZSByb290IE9wZXJhdG9yTm9kZVxuICAgIHZhciBwcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkocm9vdCwgcGFyZW50aGVzaXMpO1xuICAgIHZhciBhc3NvY2lhdGl2aXR5ID0gKDAsIF9vcGVyYXRvcnMuZ2V0QXNzb2NpYXRpdml0eSkocm9vdCwgcGFyZW50aGVzaXMpO1xuXG4gICAgaWYgKHBhcmVudGhlc2lzID09PSAnYWxsJyB8fCBhcmdzLmxlbmd0aCA+IDIgJiYgcm9vdC5nZXRJZGVudGlmaWVyKCkgIT09ICdPcGVyYXRvck5vZGU6YWRkJyAmJiByb290LmdldElkZW50aWZpZXIoKSAhPT0gJ09wZXJhdG9yTm9kZTptdWx0aXBseScpIHtcbiAgICAgIHJldHVybiBhcmdzLm1hcChmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgIHN3aXRjaCAoYXJnLmdldENvbnRlbnQoKS50eXBlKSB7XG4gICAgICAgICAgLy8gTm9kZXMgdGhhdCBkb24ndCBuZWVkIGV4dHJhIHBhcmVudGhlc2VzXG4gICAgICAgICAgY2FzZSAnQXJyYXlOb2RlJzpcbiAgICAgICAgICBjYXNlICdDb25zdGFudE5vZGUnOlxuICAgICAgICAgIGNhc2UgJ1N5bWJvbE5vZGUnOlxuICAgICAgICAgIGNhc2UgJ1BhcmVudGhlc2lzTm9kZSc6XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhciByZXN1bHQ7XG5cbiAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIHJlc3VsdCA9IFtdO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAxOlxuICAgICAgICAvLyB1bmFyeSBvcGVyYXRvcnNcbiAgICAgICAge1xuICAgICAgICAgIC8vIHByZWNlZGVuY2Ugb2YgdGhlIG9wZXJhbmRcbiAgICAgICAgICB2YXIgb3BlcmFuZFByZWNlZGVuY2UgPSAoMCwgX29wZXJhdG9ycy5nZXRQcmVjZWRlbmNlKShhcmdzWzBdLCBwYXJlbnRoZXNpcyk7IC8vIGhhbmRsZSBzcGVjaWFsIGNhc2VzIGZvciBMYVRlWCwgd2hlcmUgc29tZSBvZiB0aGUgcGFyZW50aGVzZXMgYXJlbid0IG5lZWRlZFxuXG4gICAgICAgICAgaWYgKGxhdGV4ICYmIG9wZXJhbmRQcmVjZWRlbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgb3BlcmFuZElkZW50aWZpZXI7XG4gICAgICAgICAgICB2YXIgcm9vdElkZW50aWZpZXI7XG5cbiAgICAgICAgICAgIGlmIChwYXJlbnRoZXNpcyA9PT0gJ2tlZXAnKSB7XG4gICAgICAgICAgICAgIG9wZXJhbmRJZGVudGlmaWVyID0gYXJnc1swXS5nZXRJZGVudGlmaWVyKCk7XG4gICAgICAgICAgICAgIHJvb3RJZGVudGlmaWVyID0gcm9vdC5nZXRJZGVudGlmaWVyKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBJZ25vcmUgUGFyZW50aGVzaXMgTm9kZXMgd2hlbiBub3QgaW4gJ2tlZXAnIG1vZGVcbiAgICAgICAgICAgICAgb3BlcmFuZElkZW50aWZpZXIgPSBhcmdzWzBdLmdldENvbnRlbnQoKS5nZXRJZGVudGlmaWVyKCk7XG4gICAgICAgICAgICAgIHJvb3RJZGVudGlmaWVyID0gcm9vdC5nZXRDb250ZW50KCkuZ2V0SWRlbnRpZmllcigpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoX29wZXJhdG9ycy5wcm9wZXJ0aWVzW3ByZWNlZGVuY2VdW3Jvb3RJZGVudGlmaWVyXS5sYXRleExlZnRQYXJlbnMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIHJlc3VsdCA9IFtmYWxzZV07XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoX29wZXJhdG9ycy5wcm9wZXJ0aWVzW29wZXJhbmRQcmVjZWRlbmNlXVtvcGVyYW5kSWRlbnRpZmllcl0ubGF0ZXhQYXJlbnMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIHJlc3VsdCA9IFtmYWxzZV07XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChvcGVyYW5kUHJlY2VkZW5jZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gaWYgdGhlIG9wZXJhbmQgaGFzIG5vIGRlZmluZWQgcHJlY2VkZW5jZSwgbm8gcGFyZW5zIGFyZSBuZWVkZWRcbiAgICAgICAgICAgIHJlc3VsdCA9IFtmYWxzZV07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAob3BlcmFuZFByZWNlZGVuY2UgPD0gcHJlY2VkZW5jZSkge1xuICAgICAgICAgICAgLy8gaWYgdGhlIG9wZXJhbmRzIHByZWNlZGVuY2UgaXMgbG93ZXIsIHBhcmVucyBhcmUgbmVlZGVkXG4gICAgICAgICAgICByZXN1bHQgPSBbdHJ1ZV07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IC8vIG90aGVyd2lzZSwgbm8gcGFyZW5zIG5lZWRlZFxuXG5cbiAgICAgICAgICByZXN1bHQgPSBbZmFsc2VdO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDI6XG4gICAgICAgIC8vIGJpbmFyeSBvcGVyYXRvcnNcbiAgICAgICAge1xuICAgICAgICAgIHZhciBsaHNQYXJlbnM7IC8vIGxlZnQgaGFuZCBzaWRlIG5lZWRzIHBhcmVudGhlc2lzP1xuICAgICAgICAgIC8vIHByZWNlZGVuY2Ugb2YgdGhlIGxlZnQgaGFuZCBzaWRlXG5cbiAgICAgICAgICB2YXIgbGhzUHJlY2VkZW5jZSA9ICgwLCBfb3BlcmF0b3JzLmdldFByZWNlZGVuY2UpKGFyZ3NbMF0sIHBhcmVudGhlc2lzKTsgLy8gaXMgdGhlIHJvb3Qgbm9kZSBhc3NvY2lhdGl2ZSB3aXRoIHRoZSBsZWZ0IGhhbmQgc2lkZVxuXG4gICAgICAgICAgdmFyIGFzc29jV2l0aExocyA9ICgwLCBfb3BlcmF0b3JzLmlzQXNzb2NpYXRpdmVXaXRoKShyb290LCBhcmdzWzBdLCBwYXJlbnRoZXNpcyk7XG5cbiAgICAgICAgICBpZiAobGhzUHJlY2VkZW5jZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gaWYgdGhlIGxlZnQgaGFuZCBzaWRlIGhhcyBubyBkZWZpbmVkIHByZWNlZGVuY2UsIG5vIHBhcmVucyBhcmUgbmVlZGVkXG4gICAgICAgICAgICAvLyBGdW5jdGlvbk5vZGUgZm9yIGV4YW1wbGVcbiAgICAgICAgICAgIGxoc1BhcmVucyA9IGZhbHNlO1xuICAgICAgICAgIH0gZWxzZSBpZiAobGhzUHJlY2VkZW5jZSA9PT0gcHJlY2VkZW5jZSAmJiBhc3NvY2lhdGl2aXR5ID09PSAncmlnaHQnICYmICFhc3NvY1dpdGhMaHMpIHtcbiAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgZXF1YWwgcHJlY2VkZW5jZSwgaWYgdGhlIHJvb3Qgbm9kZSBpcyBsZWZ0IGFzc29jaWF0aXZlXG4gICAgICAgICAgICAvLyBwYXJlbnMgYXJlICoqbmV2ZXIqKiBuZWNlc3NhcnkgZm9yIHRoZSBsZWZ0IGhhbmQgc2lkZS5cbiAgICAgICAgICAgIC8vIElmIGl0IGlzIHJpZ2h0IGFzc29jaWF0aXZlIGhvd2V2ZXIsIHBhcmVucyBhcmUgbmVjZXNzYXJ5XG4gICAgICAgICAgICAvLyBpZiB0aGUgcm9vdCBub2RlIGlzbid0IGFzc29jaWF0aXZlIHdpdGggdGhlIGxlZnQgaGFuZCBzaWRlXG4gICAgICAgICAgICBsaHNQYXJlbnMgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAobGhzUHJlY2VkZW5jZSA8IHByZWNlZGVuY2UpIHtcbiAgICAgICAgICAgIGxoc1BhcmVucyA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxoc1BhcmVucyA9IGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciByaHNQYXJlbnM7IC8vIHJpZ2h0IGhhbmQgc2lkZSBuZWVkcyBwYXJlbnRoZXNpcz9cbiAgICAgICAgICAvLyBwcmVjZWRlbmNlIG9mIHRoZSByaWdodCBoYW5kIHNpZGVcblxuICAgICAgICAgIHZhciByaHNQcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkoYXJnc1sxXSwgcGFyZW50aGVzaXMpOyAvLyBpcyB0aGUgcm9vdCBub2RlIGFzc29jaWF0aXZlIHdpdGggdGhlIHJpZ2h0IGhhbmQgc2lkZT9cblxuICAgICAgICAgIHZhciBhc3NvY1dpdGhSaHMgPSAoMCwgX29wZXJhdG9ycy5pc0Fzc29jaWF0aXZlV2l0aCkocm9vdCwgYXJnc1sxXSwgcGFyZW50aGVzaXMpO1xuXG4gICAgICAgICAgaWYgKHJoc1ByZWNlZGVuY2UgPT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIGlmIHRoZSByaWdodCBoYW5kIHNpZGUgaGFzIG5vIGRlZmluZWQgcHJlY2VkZW5jZSwgbm8gcGFyZW5zIGFyZSBuZWVkZWRcbiAgICAgICAgICAgIC8vIEZ1bmN0aW9uTm9kZSBmb3IgZXhhbXBsZVxuICAgICAgICAgICAgcmhzUGFyZW5zID0gZmFsc2U7XG4gICAgICAgICAgfSBlbHNlIGlmIChyaHNQcmVjZWRlbmNlID09PSBwcmVjZWRlbmNlICYmIGFzc29jaWF0aXZpdHkgPT09ICdsZWZ0JyAmJiAhYXNzb2NXaXRoUmhzKSB7XG4gICAgICAgICAgICAvLyBJbiBjYXNlIG9mIGVxdWFsIHByZWNlZGVuY2UsIGlmIHRoZSByb290IG5vZGUgaXMgcmlnaHQgYXNzb2NpYXRpdmVcbiAgICAgICAgICAgIC8vIHBhcmVucyBhcmUgKipuZXZlcioqIG5lY2Vzc2FyeSBmb3IgdGhlIHJpZ2h0IGhhbmQgc2lkZS5cbiAgICAgICAgICAgIC8vIElmIGl0IGlzIGxlZnQgYXNzb2NpYXRpdmUgaG93ZXZlciwgcGFyZW5zIGFyZSBuZWNlc3NhcnlcbiAgICAgICAgICAgIC8vIGlmIHRoZSByb290IG5vZGUgaXNuJ3QgYXNzb2NpYXRpdmUgd2l0aCB0aGUgcmlnaHQgaGFuZCBzaWRlXG4gICAgICAgICAgICByaHNQYXJlbnMgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAocmhzUHJlY2VkZW5jZSA8IHByZWNlZGVuY2UpIHtcbiAgICAgICAgICAgIHJoc1BhcmVucyA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJoc1BhcmVucyA9IGZhbHNlO1xuICAgICAgICAgIH0gLy8gaGFuZGxlIHNwZWNpYWwgY2FzZXMgZm9yIExhVGVYLCB3aGVyZSBzb21lIG9mIHRoZSBwYXJlbnRoZXNlcyBhcmVuJ3QgbmVlZGVkXG5cblxuICAgICAgICAgIGlmIChsYXRleCkge1xuICAgICAgICAgICAgdmFyIF9yb290SWRlbnRpZmllcjtcblxuICAgICAgICAgICAgdmFyIGxoc0lkZW50aWZpZXI7XG4gICAgICAgICAgICB2YXIgcmhzSWRlbnRpZmllcjtcblxuICAgICAgICAgICAgaWYgKHBhcmVudGhlc2lzID09PSAna2VlcCcpIHtcbiAgICAgICAgICAgICAgX3Jvb3RJZGVudGlmaWVyID0gcm9vdC5nZXRJZGVudGlmaWVyKCk7XG4gICAgICAgICAgICAgIGxoc0lkZW50aWZpZXIgPSByb290LmFyZ3NbMF0uZ2V0SWRlbnRpZmllcigpO1xuICAgICAgICAgICAgICByaHNJZGVudGlmaWVyID0gcm9vdC5hcmdzWzFdLmdldElkZW50aWZpZXIoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIElnbm9yZSBQYXJlbnRoZXNpc05vZGVzIHdoZW4gbm90IGluICdrZWVwJyBtb2RlXG4gICAgICAgICAgICAgIF9yb290SWRlbnRpZmllciA9IHJvb3QuZ2V0Q29udGVudCgpLmdldElkZW50aWZpZXIoKTtcbiAgICAgICAgICAgICAgbGhzSWRlbnRpZmllciA9IHJvb3QuYXJnc1swXS5nZXRDb250ZW50KCkuZ2V0SWRlbnRpZmllcigpO1xuICAgICAgICAgICAgICByaHNJZGVudGlmaWVyID0gcm9vdC5hcmdzWzFdLmdldENvbnRlbnQoKS5nZXRJZGVudGlmaWVyKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChsaHNQcmVjZWRlbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIGlmIChfb3BlcmF0b3JzLnByb3BlcnRpZXNbcHJlY2VkZW5jZV1bX3Jvb3RJZGVudGlmaWVyXS5sYXRleExlZnRQYXJlbnMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgbGhzUGFyZW5zID0gZmFsc2U7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoX29wZXJhdG9ycy5wcm9wZXJ0aWVzW2xoc1ByZWNlZGVuY2VdW2xoc0lkZW50aWZpZXJdLmxhdGV4UGFyZW5zID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIGxoc1BhcmVucyA9IGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyaHNQcmVjZWRlbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIGlmIChfb3BlcmF0b3JzLnByb3BlcnRpZXNbcHJlY2VkZW5jZV1bX3Jvb3RJZGVudGlmaWVyXS5sYXRleFJpZ2h0UGFyZW5zID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJoc1BhcmVucyA9IGZhbHNlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKF9vcGVyYXRvcnMucHJvcGVydGllc1tyaHNQcmVjZWRlbmNlXVtyaHNJZGVudGlmaWVyXS5sYXRleFBhcmVucyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByaHNQYXJlbnMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlc3VsdCA9IFtsaHNQYXJlbnMsIHJoc1BhcmVuc107XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChyb290LmdldElkZW50aWZpZXIoKSA9PT0gJ09wZXJhdG9yTm9kZTphZGQnIHx8IHJvb3QuZ2V0SWRlbnRpZmllcigpID09PSAnT3BlcmF0b3JOb2RlOm11bHRpcGx5Jykge1xuICAgICAgICAgIHJlc3VsdCA9IGFyZ3MubWFwKGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgICAgIHZhciBhcmdQcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkoYXJnLCBwYXJlbnRoZXNpcyk7XG4gICAgICAgICAgICB2YXIgYXNzb2NXaXRoQXJnID0gKDAsIF9vcGVyYXRvcnMuaXNBc3NvY2lhdGl2ZVdpdGgpKHJvb3QsIGFyZywgcGFyZW50aGVzaXMpO1xuICAgICAgICAgICAgdmFyIGFyZ0Fzc29jaWF0aXZpdHkgPSAoMCwgX29wZXJhdG9ycy5nZXRBc3NvY2lhdGl2aXR5KShhcmcsIHBhcmVudGhlc2lzKTtcblxuICAgICAgICAgICAgaWYgKGFyZ1ByZWNlZGVuY2UgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gaWYgdGhlIGFyZ3VtZW50IGhhcyBubyBkZWZpbmVkIHByZWNlZGVuY2UsIG5vIHBhcmVucyBhcmUgbmVlZGVkXG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJlY2VkZW5jZSA9PT0gYXJnUHJlY2VkZW5jZSAmJiBhc3NvY2lhdGl2aXR5ID09PSBhcmdBc3NvY2lhdGl2aXR5ICYmICFhc3NvY1dpdGhBcmcpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGFyZ1ByZWNlZGVuY2UgPCBwcmVjZWRlbmNlKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICB9IC8vIGhhbmRsZXMgYW4gZWRnZSBjYXNlIG9mICdhdXRvJyBwYXJlbnRoZXNlcyB3aXRoIGltcGxpY2l0IG11bHRpcGxpY2F0aW9uIG9mIENvbnN0YW50Tm9kZVxuICAgIC8vIEluIHRoYXQgY2FzZSBwcmludCBwYXJlbnRoZXNlcyBmb3IgUGFyZW50aGVzaXNOb2RlcyBldmVuIHRob3VnaCB0aGV5IG5vcm1hbGx5IHdvdWxkbid0IGJlXG4gICAgLy8gcHJpbnRlZC5cblxuXG4gICAgaWYgKGFyZ3MubGVuZ3RoID49IDIgJiYgcm9vdC5nZXRJZGVudGlmaWVyKCkgPT09ICdPcGVyYXRvck5vZGU6bXVsdGlwbHknICYmIHJvb3QuaW1wbGljaXQgJiYgcGFyZW50aGVzaXMgPT09ICdhdXRvJyAmJiBpbXBsaWNpdCA9PT0gJ2hpZGUnKSB7XG4gICAgICByZXN1bHQgPSBhcmdzLm1hcChmdW5jdGlvbiAoYXJnLCBpbmRleCkge1xuICAgICAgICB2YXIgaXNQYXJlbnRoZXNpc05vZGUgPSBhcmcuZ2V0SWRlbnRpZmllcigpID09PSAnUGFyZW50aGVzaXNOb2RlJztcblxuICAgICAgICBpZiAocmVzdWx0W2luZGV4XSB8fCBpc1BhcmVudGhlc2lzTm9kZSkge1xuICAgICAgICAgIC8vIHB1dCBpbiBwYXJlbnRoZXNpcz9cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgLyoqXG4gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb24uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqL1xuXG5cbiAgT3BlcmF0b3JOb2RlLnByb3RvdHlwZS5fdG9TdHJpbmcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBwYXJlbnRoZXNpcyA9IG9wdGlvbnMgJiYgb3B0aW9ucy5wYXJlbnRoZXNpcyA/IG9wdGlvbnMucGFyZW50aGVzaXMgOiAna2VlcCc7XG4gICAgdmFyIGltcGxpY2l0ID0gb3B0aW9ucyAmJiBvcHRpb25zLmltcGxpY2l0ID8gb3B0aW9ucy5pbXBsaWNpdCA6ICdoaWRlJztcbiAgICB2YXIgYXJncyA9IHRoaXMuYXJncztcbiAgICB2YXIgcGFyZW5zID0gY2FsY3VsYXRlTmVjZXNzYXJ5UGFyZW50aGVzZXModGhpcywgcGFyZW50aGVzaXMsIGltcGxpY2l0LCBhcmdzLCBmYWxzZSk7XG5cbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDEpIHtcbiAgICAgIC8vIHVuYXJ5IG9wZXJhdG9yc1xuICAgICAgdmFyIGFzc29jID0gKDAsIF9vcGVyYXRvcnMuZ2V0QXNzb2NpYXRpdml0eSkodGhpcywgcGFyZW50aGVzaXMpO1xuICAgICAgdmFyIG9wZXJhbmQgPSBhcmdzWzBdLnRvU3RyaW5nKG9wdGlvbnMpO1xuXG4gICAgICBpZiAocGFyZW5zWzBdKSB7XG4gICAgICAgIG9wZXJhbmQgPSAnKCcgKyBvcGVyYW5kICsgJyknO1xuICAgICAgfSAvLyBmb3IgZXhhbXBsZSBmb3IgXCJub3RcIiwgd2Ugd2FudCBhIHNwYWNlIGJldHdlZW4gb3BlcmFuZCBhbmQgYXJndW1lbnRcblxuXG4gICAgICB2YXIgb3BJc05hbWVkID0gL1thLXpBLVpdKy8udGVzdCh0aGlzLm9wKTtcblxuICAgICAgaWYgKGFzc29jID09PSAncmlnaHQnKSB7XG4gICAgICAgIC8vIHByZWZpeCBvcGVyYXRvclxuICAgICAgICByZXR1cm4gdGhpcy5vcCArIChvcElzTmFtZWQgPyAnICcgOiAnJykgKyBvcGVyYW5kO1xuICAgICAgfSBlbHNlIGlmIChhc3NvYyA9PT0gJ2xlZnQnKSB7XG4gICAgICAgIC8vIHBvc3RmaXhcbiAgICAgICAgcmV0dXJuIG9wZXJhbmQgKyAob3BJc05hbWVkID8gJyAnIDogJycpICsgdGhpcy5vcDtcbiAgICAgIH0gLy8gZmFsbCBiYWNrIHRvIHBvc3RmaXhcblxuXG4gICAgICByZXR1cm4gb3BlcmFuZCArIHRoaXMub3A7XG4gICAgfSBlbHNlIGlmIChhcmdzLmxlbmd0aCA9PT0gMikge1xuICAgICAgdmFyIGxocyA9IGFyZ3NbMF0udG9TdHJpbmcob3B0aW9ucyk7IC8vIGxlZnQgaGFuZCBzaWRlXG5cbiAgICAgIHZhciByaHMgPSBhcmdzWzFdLnRvU3RyaW5nKG9wdGlvbnMpOyAvLyByaWdodCBoYW5kIHNpZGVcblxuICAgICAgaWYgKHBhcmVuc1swXSkge1xuICAgICAgICAvLyBsZWZ0IGhhbmQgc2lkZSBpbiBwYXJlbnRoZXNpcz9cbiAgICAgICAgbGhzID0gJygnICsgbGhzICsgJyknO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyZW5zWzFdKSB7XG4gICAgICAgIC8vIHJpZ2h0IGhhbmQgc2lkZSBpbiBwYXJlbnRoZXNpcz9cbiAgICAgICAgcmhzID0gJygnICsgcmhzICsgJyknO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5pbXBsaWNpdCAmJiB0aGlzLmdldElkZW50aWZpZXIoKSA9PT0gJ09wZXJhdG9yTm9kZTptdWx0aXBseScgJiYgaW1wbGljaXQgPT09ICdoaWRlJykge1xuICAgICAgICByZXR1cm4gbGhzICsgJyAnICsgcmhzO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGhzICsgJyAnICsgdGhpcy5vcCArICcgJyArIHJocztcbiAgICB9IGVsc2UgaWYgKGFyZ3MubGVuZ3RoID4gMiAmJiAodGhpcy5nZXRJZGVudGlmaWVyKCkgPT09ICdPcGVyYXRvck5vZGU6YWRkJyB8fCB0aGlzLmdldElkZW50aWZpZXIoKSA9PT0gJ09wZXJhdG9yTm9kZTptdWx0aXBseScpKSB7XG4gICAgICB2YXIgc3RyaW5naWZpZWRBcmdzID0gYXJncy5tYXAoZnVuY3Rpb24gKGFyZywgaW5kZXgpIHtcbiAgICAgICAgYXJnID0gYXJnLnRvU3RyaW5nKG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChwYXJlbnNbaW5kZXhdKSB7XG4gICAgICAgICAgLy8gcHV0IGluIHBhcmVudGhlc2lzP1xuICAgICAgICAgIGFyZyA9ICcoJyArIGFyZyArICcpJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhcmc7XG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMuaW1wbGljaXQgJiYgdGhpcy5nZXRJZGVudGlmaWVyKCkgPT09ICdPcGVyYXRvck5vZGU6bXVsdGlwbHknICYmIGltcGxpY2l0ID09PSAnaGlkZScpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZ2lmaWVkQXJncy5qb2luKCcgJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdHJpbmdpZmllZEFyZ3Muam9pbignICcgKyB0aGlzLm9wICsgJyAnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZmFsbGJhY2sgdG8gZm9ybWF0dGluZyBhcyBhIGZ1bmN0aW9uIGNhbGxcbiAgICAgIHJldHVybiB0aGlzLmZuICsgJygnICsgdGhpcy5hcmdzLmpvaW4oJywgJykgKyAnKSc7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cblxuXG4gIE9wZXJhdG9yTm9kZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdPcGVyYXRvck5vZGUnLFxuICAgICAgb3A6IHRoaXMub3AsXG4gICAgICBmbjogdGhpcy5mbixcbiAgICAgIGFyZ3M6IHRoaXMuYXJncyxcbiAgICAgIGltcGxpY2l0OiB0aGlzLmltcGxpY2l0XG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIEluc3RhbnRpYXRlIGFuIE9wZXJhdG9yTm9kZSBmcm9tIGl0cyBKU09OIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBqc29uICBBbiBvYmplY3Qgc3RydWN0dXJlZCBsaWtlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiT3BlcmF0b3JOb2RlXCIsIFwib3BcIjogXCIrXCIsIFwiZm5cIjogXCJhZGRcIiwgXCJhcmdzXCI6IFsuLi5dLCBcImltcGxpY2l0XCI6IGZhbHNlfWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge09wZXJhdG9yTm9kZX1cbiAgICovXG5cblxuICBPcGVyYXRvck5vZGUuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKGpzb24ub3AsIGpzb24uZm4sIGpzb24uYXJncywganNvbi5pbXBsaWNpdCk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgSFRNTCByZXByZXNlbnRhdGlvbi5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBPcGVyYXRvck5vZGUucHJvdG90eXBlLnRvSFRNTCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIHBhcmVudGhlc2lzID0gb3B0aW9ucyAmJiBvcHRpb25zLnBhcmVudGhlc2lzID8gb3B0aW9ucy5wYXJlbnRoZXNpcyA6ICdrZWVwJztcbiAgICB2YXIgaW1wbGljaXQgPSBvcHRpb25zICYmIG9wdGlvbnMuaW1wbGljaXQgPyBvcHRpb25zLmltcGxpY2l0IDogJ2hpZGUnO1xuICAgIHZhciBhcmdzID0gdGhpcy5hcmdzO1xuICAgIHZhciBwYXJlbnMgPSBjYWxjdWxhdGVOZWNlc3NhcnlQYXJlbnRoZXNlcyh0aGlzLCBwYXJlbnRoZXNpcywgaW1wbGljaXQsIGFyZ3MsIGZhbHNlKTtcblxuICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgLy8gdW5hcnkgb3BlcmF0b3JzXG4gICAgICB2YXIgYXNzb2MgPSAoMCwgX29wZXJhdG9ycy5nZXRBc3NvY2lhdGl2aXR5KSh0aGlzLCBwYXJlbnRoZXNpcyk7XG4gICAgICB2YXIgb3BlcmFuZCA9IGFyZ3NbMF0udG9IVE1MKG9wdGlvbnMpO1xuXG4gICAgICBpZiAocGFyZW5zWzBdKSB7XG4gICAgICAgIG9wZXJhbmQgPSAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4oPC9zcGFuPicgKyBvcGVyYW5kICsgJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KTwvc3Bhbj4nO1xuICAgICAgfVxuXG4gICAgICBpZiAoYXNzb2MgPT09ICdyaWdodCcpIHtcbiAgICAgICAgLy8gcHJlZml4IG9wZXJhdG9yXG4gICAgICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJtYXRoLW9wZXJhdG9yIG1hdGgtdW5hcnktb3BlcmF0b3IgbWF0aC1sZWZ0aGFuZC11bmFyeS1vcGVyYXRvclwiPicgKyAoMCwgX3N0cmluZy5lc2NhcGUpKHRoaXMub3ApICsgJzwvc3Bhbj4nICsgb3BlcmFuZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHBvc3RmaXggd2hlbiBhc3NvYyA9PT0gJ2xlZnQnIG9yIHVuZGVmaW5lZFxuICAgICAgICByZXR1cm4gb3BlcmFuZCArICc8c3BhbiBjbGFzcz1cIm1hdGgtb3BlcmF0b3IgbWF0aC11bmFyeS1vcGVyYXRvciBtYXRoLXJpZ2h0aGFuZC11bmFyeS1vcGVyYXRvclwiPicgKyAoMCwgX3N0cmluZy5lc2NhcGUpKHRoaXMub3ApICsgJzwvc3Bhbj4nO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYXJncy5sZW5ndGggPT09IDIpIHtcbiAgICAgIC8vIGJpbmFyeSBvcGVyYXRvZXNcbiAgICAgIHZhciBsaHMgPSBhcmdzWzBdLnRvSFRNTChvcHRpb25zKTsgLy8gbGVmdCBoYW5kIHNpZGVcblxuICAgICAgdmFyIHJocyA9IGFyZ3NbMV0udG9IVE1MKG9wdGlvbnMpOyAvLyByaWdodCBoYW5kIHNpZGVcblxuICAgICAgaWYgKHBhcmVuc1swXSkge1xuICAgICAgICAvLyBsZWZ0IGhhbmQgc2lkZSBpbiBwYXJlbnRoZXNpcz9cbiAgICAgICAgbGhzID0gJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KDwvc3Bhbj4nICsgbGhzICsgJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KTwvc3Bhbj4nO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyZW5zWzFdKSB7XG4gICAgICAgIC8vIHJpZ2h0IGhhbmQgc2lkZSBpbiBwYXJlbnRoZXNpcz9cbiAgICAgICAgcmhzID0gJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KDwvc3Bhbj4nICsgcmhzICsgJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KTwvc3Bhbj4nO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5pbXBsaWNpdCAmJiB0aGlzLmdldElkZW50aWZpZXIoKSA9PT0gJ09wZXJhdG9yTm9kZTptdWx0aXBseScgJiYgaW1wbGljaXQgPT09ICdoaWRlJykge1xuICAgICAgICByZXR1cm4gbGhzICsgJzxzcGFuIGNsYXNzPVwibWF0aC1vcGVyYXRvciBtYXRoLWJpbmFyeS1vcGVyYXRvciBtYXRoLWltcGxpY2l0LWJpbmFyeS1vcGVyYXRvclwiPjwvc3Bhbj4nICsgcmhzO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGhzICsgJzxzcGFuIGNsYXNzPVwibWF0aC1vcGVyYXRvciBtYXRoLWJpbmFyeS1vcGVyYXRvciBtYXRoLWV4cGxpY2l0LWJpbmFyeS1vcGVyYXRvclwiPicgKyAoMCwgX3N0cmluZy5lc2NhcGUpKHRoaXMub3ApICsgJzwvc3Bhbj4nICsgcmhzO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgc3RyaW5naWZpZWRBcmdzID0gYXJncy5tYXAoZnVuY3Rpb24gKGFyZywgaW5kZXgpIHtcbiAgICAgICAgYXJnID0gYXJnLnRvSFRNTChvcHRpb25zKTtcblxuICAgICAgICBpZiAocGFyZW5zW2luZGV4XSkge1xuICAgICAgICAgIC8vIHB1dCBpbiBwYXJlbnRoZXNpcz9cbiAgICAgICAgICBhcmcgPSAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4oPC9zcGFuPicgKyBhcmcgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4pPC9zcGFuPic7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXJnO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDIgJiYgKHRoaXMuZ2V0SWRlbnRpZmllcigpID09PSAnT3BlcmF0b3JOb2RlOmFkZCcgfHwgdGhpcy5nZXRJZGVudGlmaWVyKCkgPT09ICdPcGVyYXRvck5vZGU6bXVsdGlwbHknKSkge1xuICAgICAgICBpZiAodGhpcy5pbXBsaWNpdCAmJiB0aGlzLmdldElkZW50aWZpZXIoKSA9PT0gJ09wZXJhdG9yTm9kZTptdWx0aXBseScgJiYgaW1wbGljaXQgPT09ICdoaWRlJykge1xuICAgICAgICAgIHJldHVybiBzdHJpbmdpZmllZEFyZ3Muam9pbignPHNwYW4gY2xhc3M9XCJtYXRoLW9wZXJhdG9yIG1hdGgtYmluYXJ5LW9wZXJhdG9yIG1hdGgtaW1wbGljaXQtYmluYXJ5LW9wZXJhdG9yXCI+PC9zcGFuPicpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN0cmluZ2lmaWVkQXJncy5qb2luKCc8c3BhbiBjbGFzcz1cIm1hdGgtb3BlcmF0b3IgbWF0aC1iaW5hcnktb3BlcmF0b3IgbWF0aC1leHBsaWNpdC1iaW5hcnktb3BlcmF0b3JcIj4nICsgKDAsIF9zdHJpbmcuZXNjYXBlKSh0aGlzLm9wKSArICc8L3NwYW4+Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBmYWxsYmFjayB0byBmb3JtYXR0aW5nIGFzIGEgZnVuY3Rpb24gY2FsbFxuICAgICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1mdW5jdGlvblwiPicgKyAoMCwgX3N0cmluZy5lc2NhcGUpKHRoaXMuZm4pICsgJzwvc3Bhbj48c3BhbiBjbGFzcz1cIm1hdGgtcGFyYW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPig8L3NwYW4+JyArIHN0cmluZ2lmaWVkQXJncy5qb2luKCc8c3BhbiBjbGFzcz1cIm1hdGgtc2VwYXJhdG9yXCI+LDwvc3Bhbj4nKSArICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyYW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPik8L3NwYW4+JztcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgTGFUZVggcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBPcGVyYXRvck5vZGUucHJvdG90eXBlLl90b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIHBhcmVudGhlc2lzID0gb3B0aW9ucyAmJiBvcHRpb25zLnBhcmVudGhlc2lzID8gb3B0aW9ucy5wYXJlbnRoZXNpcyA6ICdrZWVwJztcbiAgICB2YXIgaW1wbGljaXQgPSBvcHRpb25zICYmIG9wdGlvbnMuaW1wbGljaXQgPyBvcHRpb25zLmltcGxpY2l0IDogJ2hpZGUnO1xuICAgIHZhciBhcmdzID0gdGhpcy5hcmdzO1xuICAgIHZhciBwYXJlbnMgPSBjYWxjdWxhdGVOZWNlc3NhcnlQYXJlbnRoZXNlcyh0aGlzLCBwYXJlbnRoZXNpcywgaW1wbGljaXQsIGFyZ3MsIHRydWUpO1xuICAgIHZhciBvcCA9IF9sYXRleC5sYXRleE9wZXJhdG9yc1t0aGlzLmZuXTtcbiAgICBvcCA9IHR5cGVvZiBvcCA9PT0gJ3VuZGVmaW5lZCcgPyB0aGlzLm9wIDogb3A7IC8vIGZhbGwgYmFjayB0byB1c2luZyB0aGlzLm9wXG5cbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDEpIHtcbiAgICAgIC8vIHVuYXJ5IG9wZXJhdG9yc1xuICAgICAgdmFyIGFzc29jID0gKDAsIF9vcGVyYXRvcnMuZ2V0QXNzb2NpYXRpdml0eSkodGhpcywgcGFyZW50aGVzaXMpO1xuICAgICAgdmFyIG9wZXJhbmQgPSBhcmdzWzBdLnRvVGV4KG9wdGlvbnMpO1xuXG4gICAgICBpZiAocGFyZW5zWzBdKSB7XG4gICAgICAgIG9wZXJhbmQgPSBcIlxcXFxsZWZ0KFwiLmNvbmNhdChvcGVyYW5kLCBcIlxcXFxyaWdodClcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChhc3NvYyA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAvLyBwcmVmaXggb3BlcmF0b3JcbiAgICAgICAgcmV0dXJuIG9wICsgb3BlcmFuZDtcbiAgICAgIH0gZWxzZSBpZiAoYXNzb2MgPT09ICdsZWZ0Jykge1xuICAgICAgICAvLyBwb3N0Zml4IG9wZXJhdG9yXG4gICAgICAgIHJldHVybiBvcGVyYW5kICsgb3A7XG4gICAgICB9IC8vIGZhbGwgYmFjayB0byBwb3N0Zml4XG5cblxuICAgICAgcmV0dXJuIG9wZXJhbmQgKyBvcDtcbiAgICB9IGVsc2UgaWYgKGFyZ3MubGVuZ3RoID09PSAyKSB7XG4gICAgICAvLyBiaW5hcnkgb3BlcmF0b3JzXG4gICAgICB2YXIgbGhzID0gYXJnc1swXTsgLy8gbGVmdCBoYW5kIHNpZGVcblxuICAgICAgdmFyIGxoc1RleCA9IGxocy50b1RleChvcHRpb25zKTtcblxuICAgICAgaWYgKHBhcmVuc1swXSkge1xuICAgICAgICBsaHNUZXggPSBcIlxcXFxsZWZ0KFwiLmNvbmNhdChsaHNUZXgsIFwiXFxcXHJpZ2h0KVwiKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHJocyA9IGFyZ3NbMV07IC8vIHJpZ2h0IGhhbmQgc2lkZVxuXG4gICAgICB2YXIgcmhzVGV4ID0gcmhzLnRvVGV4KG9wdGlvbnMpO1xuXG4gICAgICBpZiAocGFyZW5zWzFdKSB7XG4gICAgICAgIHJoc1RleCA9IFwiXFxcXGxlZnQoXCIuY29uY2F0KHJoc1RleCwgXCJcXFxccmlnaHQpXCIpO1xuICAgICAgfSAvLyBoYW5kbGUgc29tZSBleGNlcHRpb25zIChkdWUgdG8gdGhlIHdheSBMYVRlWCB3b3JrcylcblxuXG4gICAgICB2YXIgbGhzSWRlbnRpZmllcjtcblxuICAgICAgaWYgKHBhcmVudGhlc2lzID09PSAna2VlcCcpIHtcbiAgICAgICAgbGhzSWRlbnRpZmllciA9IGxocy5nZXRJZGVudGlmaWVyKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJZ25vcmUgUGFyZW50aGVzaXNOb2RlcyBpZiBpbiAna2VlcCcgbW9kZVxuICAgICAgICBsaHNJZGVudGlmaWVyID0gbGhzLmdldENvbnRlbnQoKS5nZXRJZGVudGlmaWVyKCk7XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAodGhpcy5nZXRJZGVudGlmaWVyKCkpIHtcbiAgICAgICAgY2FzZSAnT3BlcmF0b3JOb2RlOmRpdmlkZSc6XG4gICAgICAgICAgLy8gb3AgY29udGFpbnMgJ1xcXFxmcmFjJyBhdCB0aGlzIHBvaW50XG4gICAgICAgICAgcmV0dXJuIG9wICsgJ3snICsgbGhzVGV4ICsgJ30nICsgJ3snICsgcmhzVGV4ICsgJ30nO1xuXG4gICAgICAgIGNhc2UgJ09wZXJhdG9yTm9kZTpwb3cnOlxuICAgICAgICAgIGxoc1RleCA9ICd7JyArIGxoc1RleCArICd9JztcbiAgICAgICAgICByaHNUZXggPSAneycgKyByaHNUZXggKyAnfSc7XG5cbiAgICAgICAgICBzd2l0Y2ggKGxoc0lkZW50aWZpZXIpIHtcbiAgICAgICAgICAgIGNhc2UgJ0NvbmRpdGlvbmFsTm9kZSc6IC8vXG5cbiAgICAgICAgICAgIGNhc2UgJ09wZXJhdG9yTm9kZTpkaXZpZGUnOlxuICAgICAgICAgICAgICBsaHNUZXggPSBcIlxcXFxsZWZ0KFwiLmNvbmNhdChsaHNUZXgsIFwiXFxcXHJpZ2h0KVwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdPcGVyYXRvck5vZGU6bXVsdGlwbHknOlxuICAgICAgICAgIGlmICh0aGlzLmltcGxpY2l0ICYmIGltcGxpY2l0ID09PSAnaGlkZScpIHtcbiAgICAgICAgICAgIHJldHVybiBsaHNUZXggKyAnficgKyByaHNUZXg7XG4gICAgICAgICAgfVxuXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBsaHNUZXggKyBvcCArIHJoc1RleDtcbiAgICB9IGVsc2UgaWYgKGFyZ3MubGVuZ3RoID4gMiAmJiAodGhpcy5nZXRJZGVudGlmaWVyKCkgPT09ICdPcGVyYXRvck5vZGU6YWRkJyB8fCB0aGlzLmdldElkZW50aWZpZXIoKSA9PT0gJ09wZXJhdG9yTm9kZTptdWx0aXBseScpKSB7XG4gICAgICB2YXIgdGV4aWZpZWRBcmdzID0gYXJncy5tYXAoZnVuY3Rpb24gKGFyZywgaW5kZXgpIHtcbiAgICAgICAgYXJnID0gYXJnLnRvVGV4KG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChwYXJlbnNbaW5kZXhdKSB7XG4gICAgICAgICAgYXJnID0gXCJcXFxcbGVmdChcIi5jb25jYXQoYXJnLCBcIlxcXFxyaWdodClcIik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXJnO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLmdldElkZW50aWZpZXIoKSA9PT0gJ09wZXJhdG9yTm9kZTptdWx0aXBseScgJiYgdGhpcy5pbXBsaWNpdCkge1xuICAgICAgICByZXR1cm4gdGV4aWZpZWRBcmdzLmpvaW4oJ34nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRleGlmaWVkQXJncy5qb2luKG9wKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZmFsbCBiYWNrIHRvIGZvcm1hdHRpbmcgYXMgYSBmdW5jdGlvbiBjYWxsXG4gICAgICAvLyBhcyB0aGlzIGlzIGEgZmFsbGJhY2ssIGl0IGRvZXNuJ3QgdXNlXG4gICAgICAvLyBmYW5jeSBmdW5jdGlvbiBuYW1lc1xuICAgICAgcmV0dXJuICdcXFxcbWF0aHJteycgKyB0aGlzLmZuICsgJ31cXFxcbGVmdCgnICsgYXJncy5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgICAgICByZXR1cm4gYXJnLnRvVGV4KG9wdGlvbnMpO1xuICAgICAgfSkuam9pbignLCcpICsgJ1xcXFxyaWdodCknO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEdldCBpZGVudGlmaWVyLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG5cbiAgT3BlcmF0b3JOb2RlLnByb3RvdHlwZS5nZXRJZGVudGlmaWVyID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGUgKyAnOicgKyB0aGlzLmZuO1xuICB9O1xuXG4gIHJldHVybiBPcGVyYXRvck5vZGU7XG59LCB7XG4gIGlzQ2xhc3M6IHRydWUsXG4gIGlzTm9kZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU9wZXJhdG9yTm9kZSA9IGNyZWF0ZU9wZXJhdG9yTm9kZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUGFyZW50aGVzaXNOb2RlID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnUGFyZW50aGVzaXNOb2RlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ05vZGUnXTtcbnZhciBjcmVhdGVQYXJlbnRoZXNpc05vZGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgTm9kZSA9IF9yZWYuTm9kZTtcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yIFBhcmVudGhlc2lzTm9kZVxuICAgKiBAZXh0ZW5kcyB7Tm9kZX1cbiAgICogQSBwYXJlbnRoZXNpcyBub2RlIGRlc2NyaWJlcyBtYW51YWwgcGFyZW50aGVzaXMgZnJvbSB0aGUgdXNlciBpbnB1dFxuICAgKiBAcGFyYW0ge05vZGV9IGNvbnRlbnRcbiAgICogQGV4dGVuZHMge05vZGV9XG4gICAqL1xuICBmdW5jdGlvbiBQYXJlbnRoZXNpc05vZGUoY29udGVudCkge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQYXJlbnRoZXNpc05vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH0gLy8gdmFsaWRhdGUgaW5wdXRcblxuXG4gICAgaWYgKCEoMCwgX2lzLmlzTm9kZSkoY29udGVudCkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vZGUgZXhwZWN0ZWQgZm9yIHBhcmFtZXRlciBcImNvbnRlbnRcIicpO1xuICAgIH1cblxuICAgIHRoaXMuY29udGVudCA9IGNvbnRlbnQ7XG4gIH1cblxuICBQYXJlbnRoZXNpc05vZGUucHJvdG90eXBlID0gbmV3IE5vZGUoKTtcbiAgUGFyZW50aGVzaXNOb2RlLnByb3RvdHlwZS50eXBlID0gJ1BhcmVudGhlc2lzTm9kZSc7XG4gIFBhcmVudGhlc2lzTm9kZS5wcm90b3R5cGUuaXNQYXJlbnRoZXNpc05vZGUgPSB0cnVlO1xuICAvKipcbiAgICogQ29tcGlsZSBhIG5vZGUgaW50byBhIEphdmFTY3JpcHQgZnVuY3Rpb24uXG4gICAqIFRoaXMgYmFzaWNhbGx5IHByZS1jYWxjdWxhdGVzIGFzIG11Y2ggYXMgcG9zc2libGUgYW5kIG9ubHkgbGVhdmVzIG9wZW5cbiAgICogY2FsY3VsYXRpb25zIHdoaWNoIGRlcGVuZCBvbiBhIGR5bmFtaWMgc2NvcGUgd2l0aCB2YXJpYWJsZXMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBtYXRoICAgICBNYXRoLmpzIG5hbWVzcGFjZSB3aXRoIGZ1bmN0aW9ucyBhbmQgY29uc3RhbnRzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gYXJnTmFtZXMgQW4gb2JqZWN0IHdpdGggYXJndW1lbnQgbmFtZXMgYXMga2V5IGFuZCBgdHJ1ZWBcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHZhbHVlLiBVc2VkIGluIHRoZSBTeW1ib2xOb2RlIHRvIG9wdGltaXplXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJndW1lbnRzIGZyb20gdXNlciBhc3NpZ25lZCBmdW5jdGlvbnNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIChzZWUgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSkgb3Igc3BlY2lhbCBzeW1ib2xzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlIGBlbmRgIChzZWUgSW5kZXhOb2RlKS5cbiAgICogQHJldHVybiB7ZnVuY3Rpb259IFJldHVybnMgYSBmdW5jdGlvbiB3aGljaCBjYW4gYmUgY2FsbGVkIGxpa2U6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgZXZhbE5vZGUoc2NvcGU6IE9iamVjdCwgYXJnczogT2JqZWN0LCBjb250ZXh0OiAqKVxuICAgKi9cblxuICBQYXJlbnRoZXNpc05vZGUucHJvdG90eXBlLl9jb21waWxlID0gZnVuY3Rpb24gKG1hdGgsIGFyZ05hbWVzKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGVudC5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgdGhlIGNvbnRlbnQgb2YgdGhlIGN1cnJlbnQgTm9kZS5cbiAgICogQHJldHVybiB7Tm9kZX0gY29udGVudFxuICAgKiBAb3ZlcnJpZGVcbiAgICoqL1xuXG5cbiAgUGFyZW50aGVzaXNOb2RlLnByb3RvdHlwZS5nZXRDb250ZW50ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRlbnQuZ2V0Q29udGVudCgpO1xuICB9O1xuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBlYWNoIG9mIHRoZSBjaGlsZCBub2RlcyBvZiB0aGlzIG5vZGVcbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpfSBjYWxsYmFja1xuICAgKi9cblxuXG4gIFBhcmVudGhlc2lzTm9kZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIGNhbGxiYWNrKHRoaXMuY29udGVudCwgJ2NvbnRlbnQnLCB0aGlzKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBQYXJlbnRoZXNpc05vZGUgaGF2aW5nIGl0J3MgY2hpbGRzIGJlIHRoZSByZXN1bHRzIG9mIGNhbGxpbmdcbiAgICogdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBlYWNoIG9mIHRoZSBjaGlsZHMgb2YgdGhlIG9yaWdpbmFsIG5vZGUuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKSA6IE5vZGV9IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHtQYXJlbnRoZXNpc05vZGV9IFJldHVybnMgYSBjbG9uZSBvZiB0aGUgbm9kZVxuICAgKi9cblxuXG4gIFBhcmVudGhlc2lzTm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgdmFyIGNvbnRlbnQgPSBjYWxsYmFjayh0aGlzLmNvbnRlbnQsICdjb250ZW50JywgdGhpcyk7XG4gICAgcmV0dXJuIG5ldyBQYXJlbnRoZXNpc05vZGUoY29udGVudCk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIG5vZGUsIGEgc2hhbGxvdyBjb3B5XG4gICAqIEByZXR1cm4ge1BhcmVudGhlc2lzTm9kZX1cbiAgICovXG5cblxuICBQYXJlbnRoZXNpc05vZGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgUGFyZW50aGVzaXNOb2RlKHRoaXMuY29udGVudCk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqIEBvdmVycmlkZVxuICAgKi9cblxuXG4gIFBhcmVudGhlc2lzTm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMgfHwgb3B0aW9ucyAmJiAhb3B0aW9ucy5wYXJlbnRoZXNpcyB8fCBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMgPT09ICdrZWVwJykge1xuICAgICAgcmV0dXJuICcoJyArIHRoaXMuY29udGVudC50b1N0cmluZyhvcHRpb25zKSArICcpJztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jb250ZW50LnRvU3RyaW5nKG9wdGlvbnMpO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cblxuXG4gIFBhcmVudGhlc2lzTm9kZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdQYXJlbnRoZXNpc05vZGUnLFxuICAgICAgY29udGVudDogdGhpcy5jb250ZW50XG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIEluc3RhbnRpYXRlIGFuIFBhcmVudGhlc2lzTm9kZSBmcm9tIGl0cyBKU09OIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBqc29uICBBbiBvYmplY3Qgc3RydWN0dXJlZCBsaWtlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiUGFyZW50aGVzaXNOb2RlXCIsIFwiY29udGVudFwiOiAuLi59YCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG1hdGhqcyBpcyBvcHRpb25hbFxuICAgKiBAcmV0dXJucyB7UGFyZW50aGVzaXNOb2RlfVxuICAgKi9cblxuXG4gIFBhcmVudGhlc2lzTm9kZS5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgcmV0dXJuIG5ldyBQYXJlbnRoZXNpc05vZGUoanNvbi5jb250ZW50KTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBIVE1MIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqIEBvdmVycmlkZVxuICAgKi9cblxuXG4gIFBhcmVudGhlc2lzTm9kZS5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMgfHwgb3B0aW9ucyAmJiAhb3B0aW9ucy5wYXJlbnRoZXNpcyB8fCBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMgPT09ICdrZWVwJykge1xuICAgICAgcmV0dXJuICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPig8L3NwYW4+JyArIHRoaXMuY29udGVudC50b0hUTUwob3B0aW9ucykgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4pPC9zcGFuPic7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29udGVudC50b0hUTUwob3B0aW9ucyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgTGFUZVggcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuXG5cbiAgUGFyZW50aGVzaXNOb2RlLnByb3RvdHlwZS5fdG9UZXggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIGlmICghb3B0aW9ucyB8fCBvcHRpb25zICYmICFvcHRpb25zLnBhcmVudGhlc2lzIHx8IG9wdGlvbnMgJiYgb3B0aW9ucy5wYXJlbnRoZXNpcyA9PT0gJ2tlZXAnKSB7XG4gICAgICByZXR1cm4gXCJcXFxcbGVmdChcIi5jb25jYXQodGhpcy5jb250ZW50LnRvVGV4KG9wdGlvbnMpLCBcIlxcXFxyaWdodClcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29udGVudC50b1RleChvcHRpb25zKTtcbiAgfTtcblxuICByZXR1cm4gUGFyZW50aGVzaXNOb2RlO1xufSwge1xuICBpc0NsYXNzOiB0cnVlLFxuICBpc05vZGU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVQYXJlbnRoZXNpc05vZGUgPSBjcmVhdGVQYXJlbnRoZXNpc05vZGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJhbmdlTm9kZSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfb3BlcmF0b3JzID0gcmVxdWlyZShcIi4uL29wZXJhdG9yc1wiKTtcblxudmFyIG5hbWUgPSAnUmFuZ2VOb2RlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ05vZGUnXTtcbnZhciBjcmVhdGVSYW5nZU5vZGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgTm9kZSA9IF9yZWYuTm9kZTtcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yIFJhbmdlTm9kZVxuICAgKiBAZXh0ZW5kcyB7Tm9kZX1cbiAgICogY3JlYXRlIGEgcmFuZ2VcbiAgICogQHBhcmFtIHtOb2RlfSBzdGFydCAgaW5jbHVkZWQgbG93ZXItYm91bmRcbiAgICogQHBhcmFtIHtOb2RlfSBlbmQgICAgaW5jbHVkZWQgdXBwZXItYm91bmRcbiAgICogQHBhcmFtIHtOb2RlfSBbc3RlcF0gb3B0aW9uYWwgc3RlcFxuICAgKi9cbiAgZnVuY3Rpb24gUmFuZ2VOb2RlKHN0YXJ0LCBlbmQsIHN0ZXApIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmFuZ2VOb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9IC8vIHZhbGlkYXRlIGlucHV0c1xuXG5cbiAgICBpZiAoISgwLCBfaXMuaXNOb2RlKShzdGFydCkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vZGUgZXhwZWN0ZWQnKTtcbiAgICBpZiAoISgwLCBfaXMuaXNOb2RlKShlbmQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdOb2RlIGV4cGVjdGVkJyk7XG4gICAgaWYgKHN0ZXAgJiYgISgwLCBfaXMuaXNOb2RlKShzdGVwKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignTm9kZSBleHBlY3RlZCcpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMykgdGhyb3cgbmV3IEVycm9yKCdUb28gbWFueSBhcmd1bWVudHMnKTtcbiAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7IC8vIGluY2x1ZGVkIGxvd2VyLWJvdW5kXG5cbiAgICB0aGlzLmVuZCA9IGVuZDsgLy8gaW5jbHVkZWQgdXBwZXItYm91bmRcblxuICAgIHRoaXMuc3RlcCA9IHN0ZXAgfHwgbnVsbDsgLy8gb3B0aW9uYWwgc3RlcFxuICB9XG5cbiAgUmFuZ2VOb2RlLnByb3RvdHlwZSA9IG5ldyBOb2RlKCk7XG4gIFJhbmdlTm9kZS5wcm90b3R5cGUudHlwZSA9ICdSYW5nZU5vZGUnO1xuICBSYW5nZU5vZGUucHJvdG90eXBlLmlzUmFuZ2VOb2RlID0gdHJ1ZTtcbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgdGhlIFJhbmdlTm9kZSBuZWVkcyB0aGUgYGVuZGAgc3ltYm9sIHRvIGJlIGRlZmluZWQuXG4gICAqIFRoaXMgZW5kIGlzIHRoZSBzaXplIG9mIHRoZSBNYXRyaXggaW4gY3VycmVudCBkaW1lbnNpb24uXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuXG4gIFJhbmdlTm9kZS5wcm90b3R5cGUubmVlZHNFbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gZmluZCBhbGwgYGVuZGAgc3ltYm9scyBpbiB0aGlzIFJhbmdlTm9kZVxuICAgIHZhciBlbmRTeW1ib2xzID0gdGhpcy5maWx0ZXIoZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIHJldHVybiAoMCwgX2lzLmlzU3ltYm9sTm9kZSkobm9kZSkgJiYgbm9kZS5uYW1lID09PSAnZW5kJztcbiAgICB9KTtcbiAgICByZXR1cm4gZW5kU3ltYm9scy5sZW5ndGggPiAwO1xuICB9O1xuICAvKipcbiAgICogQ29tcGlsZSBhIG5vZGUgaW50byBhIEphdmFTY3JpcHQgZnVuY3Rpb24uXG4gICAqIFRoaXMgYmFzaWNhbGx5IHByZS1jYWxjdWxhdGVzIGFzIG11Y2ggYXMgcG9zc2libGUgYW5kIG9ubHkgbGVhdmVzIG9wZW5cbiAgICogY2FsY3VsYXRpb25zIHdoaWNoIGRlcGVuZCBvbiBhIGR5bmFtaWMgc2NvcGUgd2l0aCB2YXJpYWJsZXMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBtYXRoICAgICBNYXRoLmpzIG5hbWVzcGFjZSB3aXRoIGZ1bmN0aW9ucyBhbmQgY29uc3RhbnRzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gYXJnTmFtZXMgQW4gb2JqZWN0IHdpdGggYXJndW1lbnQgbmFtZXMgYXMga2V5IGFuZCBgdHJ1ZWBcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHZhbHVlLiBVc2VkIGluIHRoZSBTeW1ib2xOb2RlIHRvIG9wdGltaXplXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJndW1lbnRzIGZyb20gdXNlciBhc3NpZ25lZCBmdW5jdGlvbnNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIChzZWUgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSkgb3Igc3BlY2lhbCBzeW1ib2xzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlIGBlbmRgIChzZWUgSW5kZXhOb2RlKS5cbiAgICogQHJldHVybiB7ZnVuY3Rpb259IFJldHVybnMgYSBmdW5jdGlvbiB3aGljaCBjYW4gYmUgY2FsbGVkIGxpa2U6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgZXZhbE5vZGUoc2NvcGU6IE9iamVjdCwgYXJnczogT2JqZWN0LCBjb250ZXh0OiAqKVxuICAgKi9cblxuXG4gIFJhbmdlTm9kZS5wcm90b3R5cGUuX2NvbXBpbGUgPSBmdW5jdGlvbiAobWF0aCwgYXJnTmFtZXMpIHtcbiAgICB2YXIgcmFuZ2UgPSBtYXRoLnJhbmdlO1xuXG4gICAgdmFyIGV2YWxTdGFydCA9IHRoaXMuc3RhcnQuX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpO1xuXG4gICAgdmFyIGV2YWxFbmQgPSB0aGlzLmVuZC5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7XG5cbiAgICBpZiAodGhpcy5zdGVwKSB7XG4gICAgICB2YXIgZXZhbFN0ZXAgPSB0aGlzLnN0ZXAuX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpO1xuXG4gICAgICByZXR1cm4gZnVuY3Rpb24gZXZhbFJhbmdlTm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gcmFuZ2UoZXZhbFN0YXJ0KHNjb3BlLCBhcmdzLCBjb250ZXh0KSwgZXZhbEVuZChzY29wZSwgYXJncywgY29udGV4dCksIGV2YWxTdGVwKHNjb3BlLCBhcmdzLCBjb250ZXh0KSk7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gZXZhbFJhbmdlTm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gcmFuZ2UoZXZhbFN0YXJ0KHNjb3BlLCBhcmdzLCBjb250ZXh0KSwgZXZhbEVuZChzY29wZSwgYXJncywgY29udGV4dCkpO1xuICAgICAgfTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGVhY2ggb2YgdGhlIGNoaWxkIG5vZGVzIG9mIHRoaXMgbm9kZVxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSl9IGNhbGxiYWNrXG4gICAqL1xuXG5cbiAgUmFuZ2VOb2RlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgY2FsbGJhY2sodGhpcy5zdGFydCwgJ3N0YXJ0JywgdGhpcyk7XG4gICAgY2FsbGJhY2sodGhpcy5lbmQsICdlbmQnLCB0aGlzKTtcblxuICAgIGlmICh0aGlzLnN0ZXApIHtcbiAgICAgIGNhbGxiYWNrKHRoaXMuc3RlcCwgJ3N0ZXAnLCB0aGlzKTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgUmFuZ2VOb2RlIGhhdmluZyBpdCdzIGNoaWxkcyBiZSB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nXG4gICAqIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCBvZiB0aGUgY2hpbGRzIG9mIHRoZSBvcmlnaW5hbCBub2RlLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSk6IE5vZGV9IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHtSYW5nZU5vZGV9IFJldHVybnMgYSB0cmFuc2Zvcm1lZCBjb3B5IG9mIHRoZSBub2RlXG4gICAqL1xuXG5cbiAgUmFuZ2VOb2RlLnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICByZXR1cm4gbmV3IFJhbmdlTm9kZSh0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy5zdGFydCwgJ3N0YXJ0JywgdGhpcykpLCB0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy5lbmQsICdlbmQnLCB0aGlzKSksIHRoaXMuc3RlcCAmJiB0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy5zdGVwLCAnc3RlcCcsIHRoaXMpKSk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIG5vZGUsIGEgc2hhbGxvdyBjb3B5XG4gICAqIEByZXR1cm4ge1JhbmdlTm9kZX1cbiAgICovXG5cblxuICBSYW5nZU5vZGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgUmFuZ2VOb2RlKHRoaXMuc3RhcnQsIHRoaXMuZW5kLCB0aGlzLnN0ZXAgJiYgdGhpcy5zdGVwKTtcbiAgfTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgbmVjZXNzYXJ5IHBhcmVudGhlc2VzXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyZW50aGVzaXNcbiAgICogQHJldHVybiB7T2JqZWN0fSBwYXJlbnRoZXNlc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGNhbGN1bGF0ZU5lY2Vzc2FyeVBhcmVudGhlc2VzKG5vZGUsIHBhcmVudGhlc2lzKSB7XG4gICAgdmFyIHByZWNlZGVuY2UgPSAoMCwgX29wZXJhdG9ycy5nZXRQcmVjZWRlbmNlKShub2RlLCBwYXJlbnRoZXNpcyk7XG4gICAgdmFyIHBhcmVucyA9IHt9O1xuICAgIHZhciBzdGFydFByZWNlZGVuY2UgPSAoMCwgX29wZXJhdG9ycy5nZXRQcmVjZWRlbmNlKShub2RlLnN0YXJ0LCBwYXJlbnRoZXNpcyk7XG4gICAgcGFyZW5zLnN0YXJ0ID0gc3RhcnRQcmVjZWRlbmNlICE9PSBudWxsICYmIHN0YXJ0UHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlIHx8IHBhcmVudGhlc2lzID09PSAnYWxsJztcblxuICAgIGlmIChub2RlLnN0ZXApIHtcbiAgICAgIHZhciBzdGVwUHJlY2VkZW5jZSA9ICgwLCBfb3BlcmF0b3JzLmdldFByZWNlZGVuY2UpKG5vZGUuc3RlcCwgcGFyZW50aGVzaXMpO1xuICAgICAgcGFyZW5zLnN0ZXAgPSBzdGVwUHJlY2VkZW5jZSAhPT0gbnVsbCAmJiBzdGVwUHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlIHx8IHBhcmVudGhlc2lzID09PSAnYWxsJztcbiAgICB9XG5cbiAgICB2YXIgZW5kUHJlY2VkZW5jZSA9ICgwLCBfb3BlcmF0b3JzLmdldFByZWNlZGVuY2UpKG5vZGUuZW5kLCBwYXJlbnRoZXNpcyk7XG4gICAgcGFyZW5zLmVuZCA9IGVuZFByZWNlZGVuY2UgIT09IG51bGwgJiYgZW5kUHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlIHx8IHBhcmVudGhlc2lzID09PSAnYWxsJztcbiAgICByZXR1cm4gcGFyZW5zO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqL1xuXG5cbiAgUmFuZ2VOb2RlLnByb3RvdHlwZS5fdG9TdHJpbmcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBwYXJlbnRoZXNpcyA9IG9wdGlvbnMgJiYgb3B0aW9ucy5wYXJlbnRoZXNpcyA/IG9wdGlvbnMucGFyZW50aGVzaXMgOiAna2VlcCc7XG4gICAgdmFyIHBhcmVucyA9IGNhbGN1bGF0ZU5lY2Vzc2FyeVBhcmVudGhlc2VzKHRoaXMsIHBhcmVudGhlc2lzKTsgLy8gZm9ybWF0IHN0cmluZyBhcyBzdGFydDpzdGVwOnN0b3BcblxuICAgIHZhciBzdHI7XG4gICAgdmFyIHN0YXJ0ID0gdGhpcy5zdGFydC50b1N0cmluZyhvcHRpb25zKTtcblxuICAgIGlmIChwYXJlbnMuc3RhcnQpIHtcbiAgICAgIHN0YXJ0ID0gJygnICsgc3RhcnQgKyAnKSc7XG4gICAgfVxuXG4gICAgc3RyID0gc3RhcnQ7XG5cbiAgICBpZiAodGhpcy5zdGVwKSB7XG4gICAgICB2YXIgc3RlcCA9IHRoaXMuc3RlcC50b1N0cmluZyhvcHRpb25zKTtcblxuICAgICAgaWYgKHBhcmVucy5zdGVwKSB7XG4gICAgICAgIHN0ZXAgPSAnKCcgKyBzdGVwICsgJyknO1xuICAgICAgfVxuXG4gICAgICBzdHIgKz0gJzonICsgc3RlcDtcbiAgICB9XG5cbiAgICB2YXIgZW5kID0gdGhpcy5lbmQudG9TdHJpbmcob3B0aW9ucyk7XG5cbiAgICBpZiAocGFyZW5zLmVuZCkge1xuICAgICAgZW5kID0gJygnICsgZW5kICsgJyknO1xuICAgIH1cblxuICAgIHN0ciArPSAnOicgKyBlbmQ7XG4gICAgcmV0dXJuIHN0cjtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGVcbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG5cblxuICBSYW5nZU5vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnUmFuZ2VOb2RlJyxcbiAgICAgIHN0YXJ0OiB0aGlzLnN0YXJ0LFxuICAgICAgZW5kOiB0aGlzLmVuZCxcbiAgICAgIHN0ZXA6IHRoaXMuc3RlcFxuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhbiBSYW5nZU5vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIlJhbmdlTm9kZVwiLCBcInN0YXJ0XCI6IC4uLiwgXCJlbmRcIjogLi4uLCBcInN0ZXBcIjogLi4ufWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge1JhbmdlTm9kZX1cbiAgICovXG5cblxuICBSYW5nZU5vZGUuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBuZXcgUmFuZ2VOb2RlKGpzb24uc3RhcnQsIGpzb24uZW5kLCBqc29uLnN0ZXApO1xuICB9O1xuICAvKipcbiAgICogR2V0IEhUTUwgcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBSYW5nZU5vZGUucHJvdG90eXBlLnRvSFRNTCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIHBhcmVudGhlc2lzID0gb3B0aW9ucyAmJiBvcHRpb25zLnBhcmVudGhlc2lzID8gb3B0aW9ucy5wYXJlbnRoZXNpcyA6ICdrZWVwJztcbiAgICB2YXIgcGFyZW5zID0gY2FsY3VsYXRlTmVjZXNzYXJ5UGFyZW50aGVzZXModGhpcywgcGFyZW50aGVzaXMpOyAvLyBmb3JtYXQgc3RyaW5nIGFzIHN0YXJ0OnN0ZXA6c3RvcFxuXG4gICAgdmFyIHN0cjtcbiAgICB2YXIgc3RhcnQgPSB0aGlzLnN0YXJ0LnRvSFRNTChvcHRpb25zKTtcblxuICAgIGlmIChwYXJlbnMuc3RhcnQpIHtcbiAgICAgIHN0YXJ0ID0gJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KDwvc3Bhbj4nICsgc3RhcnQgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4pPC9zcGFuPic7XG4gICAgfVxuXG4gICAgc3RyID0gc3RhcnQ7XG5cbiAgICBpZiAodGhpcy5zdGVwKSB7XG4gICAgICB2YXIgc3RlcCA9IHRoaXMuc3RlcC50b0hUTUwob3B0aW9ucyk7XG5cbiAgICAgIGlmIChwYXJlbnMuc3RlcCkge1xuICAgICAgICBzdGVwID0gJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KDwvc3Bhbj4nICsgc3RlcCArICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPik8L3NwYW4+JztcbiAgICAgIH1cblxuICAgICAgc3RyICs9ICc8c3BhbiBjbGFzcz1cIm1hdGgtb3BlcmF0b3IgbWF0aC1yYW5nZS1vcGVyYXRvclwiPjo8L3NwYW4+JyArIHN0ZXA7XG4gICAgfVxuXG4gICAgdmFyIGVuZCA9IHRoaXMuZW5kLnRvSFRNTChvcHRpb25zKTtcblxuICAgIGlmIChwYXJlbnMuZW5kKSB7XG4gICAgICBlbmQgPSAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4oPC9zcGFuPicgKyBlbmQgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4pPC9zcGFuPic7XG4gICAgfVxuXG4gICAgc3RyICs9ICc8c3BhbiBjbGFzcz1cIm1hdGgtb3BlcmF0b3IgbWF0aC1yYW5nZS1vcGVyYXRvclwiPjo8L3NwYW4+JyArIGVuZDtcbiAgICByZXR1cm4gc3RyO1xuICB9O1xuICAvKipcbiAgICogR2V0IExhVGVYIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbXMge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIFJhbmdlTm9kZS5wcm90b3R5cGUuX3RvVGV4ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgcGFyZW50aGVzaXMgPSBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMgPyBvcHRpb25zLnBhcmVudGhlc2lzIDogJ2tlZXAnO1xuICAgIHZhciBwYXJlbnMgPSBjYWxjdWxhdGVOZWNlc3NhcnlQYXJlbnRoZXNlcyh0aGlzLCBwYXJlbnRoZXNpcyk7XG4gICAgdmFyIHN0ciA9IHRoaXMuc3RhcnQudG9UZXgob3B0aW9ucyk7XG5cbiAgICBpZiAocGFyZW5zLnN0YXJ0KSB7XG4gICAgICBzdHIgPSBcIlxcXFxsZWZ0KFwiLmNvbmNhdChzdHIsIFwiXFxcXHJpZ2h0KVwiKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdGVwKSB7XG4gICAgICB2YXIgc3RlcCA9IHRoaXMuc3RlcC50b1RleChvcHRpb25zKTtcblxuICAgICAgaWYgKHBhcmVucy5zdGVwKSB7XG4gICAgICAgIHN0ZXAgPSBcIlxcXFxsZWZ0KFwiLmNvbmNhdChzdGVwLCBcIlxcXFxyaWdodClcIik7XG4gICAgICB9XG5cbiAgICAgIHN0ciArPSAnOicgKyBzdGVwO1xuICAgIH1cblxuICAgIHZhciBlbmQgPSB0aGlzLmVuZC50b1RleChvcHRpb25zKTtcblxuICAgIGlmIChwYXJlbnMuZW5kKSB7XG4gICAgICBlbmQgPSBcIlxcXFxsZWZ0KFwiLmNvbmNhdChlbmQsIFwiXFxcXHJpZ2h0KVwiKTtcbiAgICB9XG5cbiAgICBzdHIgKz0gJzonICsgZW5kO1xuICAgIHJldHVybiBzdHI7XG4gIH07XG5cbiAgcmV0dXJuIFJhbmdlTm9kZTtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZSxcbiAgaXNOb2RlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUmFuZ2VOb2RlID0gY3JlYXRlUmFuZ2VOb2RlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVSZWxhdGlvbmFsTm9kZSA9IHZvaWQgMDtcblxudmFyIF9vcGVyYXRvcnMgPSByZXF1aXJlKFwiLi4vb3BlcmF0b3JzXCIpO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfY3VzdG9tcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jdXN0b21zXCIpO1xuXG52YXIgX2xhdGV4ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2xhdGV4XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnUmVsYXRpb25hbE5vZGUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnTm9kZSddO1xudmFyIGNyZWF0ZVJlbGF0aW9uYWxOb2RlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIE5vZGUgPSBfcmVmLk5vZGU7XG5cbiAgLyoqXG4gICAqIEEgbm9kZSByZXByZXNlbnRpbmcgYSBjaGFpbmVkIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24sIHN1Y2ggYXMgJ3ggPiB5ID4geidcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmdbXX0gY29uZGl0aW9uYWxzICAgQW4gYXJyYXkgb2YgY29uZGl0aW9uYWwgb3BlcmF0b3JzIHVzZWQgdG8gY29tcGFyZSB0aGUgcGFyYW1ldGVyc1xuICAgKiBAcGFyYW0ge05vZGVbXX0gcGFyYW1zICAgVGhlIHBhcmFtZXRlcnMgdGhhdCB3aWxsIGJlIGNvbXBhcmVkXG4gICAqXG4gICAqIEBjb25zdHJ1Y3RvciBSZWxhdGlvbmFsTm9kZVxuICAgKiBAZXh0ZW5kcyB7Tm9kZX1cbiAgICovXG4gIGZ1bmN0aW9uIFJlbGF0aW9uYWxOb2RlKGNvbmRpdGlvbmFscywgcGFyYW1zKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlbGF0aW9uYWxOb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29uZGl0aW9uYWxzKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignUGFyYW1ldGVyIGNvbmRpdGlvbmFscyBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBhcmFtcykpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BhcmFtZXRlciBwYXJhbXMgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgIGlmIChjb25kaXRpb25hbHMubGVuZ3RoICE9PSBwYXJhbXMubGVuZ3RoIC0gMSkgdGhyb3cgbmV3IFR5cGVFcnJvcignUGFyYW1ldGVyIHBhcmFtcyBtdXN0IGNvbnRhaW4gZXhhY3RseSBvbmUgbW9yZSBlbGVtZW50IHRoYW4gcGFyYW1ldGVyIGNvbmRpdGlvbmFscycpO1xuICAgIHRoaXMuY29uZGl0aW9uYWxzID0gY29uZGl0aW9uYWxzO1xuICAgIHRoaXMucGFyYW1zID0gcGFyYW1zO1xuICB9XG5cbiAgUmVsYXRpb25hbE5vZGUucHJvdG90eXBlID0gbmV3IE5vZGUoKTtcbiAgUmVsYXRpb25hbE5vZGUucHJvdG90eXBlLnR5cGUgPSAnUmVsYXRpb25hbE5vZGUnO1xuICBSZWxhdGlvbmFsTm9kZS5wcm90b3R5cGUuaXNSZWxhdGlvbmFsTm9kZSA9IHRydWU7XG4gIC8qKlxuICAgKiBDb21waWxlIGEgbm9kZSBpbnRvIGEgSmF2YVNjcmlwdCBmdW5jdGlvbi5cbiAgICogVGhpcyBiYXNpY2FsbHkgcHJlLWNhbGN1bGF0ZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSBhbmQgb25seSBsZWF2ZXMgb3BlblxuICAgKiBjYWxjdWxhdGlvbnMgd2hpY2ggZGVwZW5kIG9uIGEgZHluYW1pYyBzY29wZSB3aXRoIHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG1hdGggICAgIE1hdGguanMgbmFtZXNwYWNlIHdpdGggZnVuY3Rpb25zIGFuZCBjb25zdGFudHMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdOYW1lcyBBbiBvYmplY3Qgd2l0aCBhcmd1bWVudCBuYW1lcyBhcyBrZXkgYW5kIGB0cnVlYFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdmFsdWUuIFVzZWQgaW4gdGhlIFN5bWJvbE5vZGUgdG8gb3B0aW1pemVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudHMgZnJvbSB1c2VyIGFzc2lnbmVkIGZ1bmN0aW9uc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZSBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKSBvciBzcGVjaWFsIHN5bWJvbHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UgYGVuZGAgKHNlZSBJbmRleE5vZGUpLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgbGlrZTpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICBldmFsTm9kZShzY29wZTogT2JqZWN0LCBhcmdzOiBPYmplY3QsIGNvbnRleHQ6ICopXG4gICAqL1xuXG4gIFJlbGF0aW9uYWxOb2RlLnByb3RvdHlwZS5fY29tcGlsZSA9IGZ1bmN0aW9uIChtYXRoLCBhcmdOYW1lcykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgY29tcGlsZWQgPSB0aGlzLnBhcmFtcy5tYXAoZnVuY3Rpb24gKHApIHtcbiAgICAgIHJldHVybiBwLl9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTtcbiAgICB9KTtcbiAgICByZXR1cm4gZnVuY3Rpb24gZXZhbFJlbGF0aW9uYWxOb2RlKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICB2YXIgZXZhbExocztcbiAgICAgIHZhciBldmFsUmhzID0gY29tcGlsZWRbMF0oc2NvcGUsIGFyZ3MsIGNvbnRleHQpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGYuY29uZGl0aW9uYWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGV2YWxMaHMgPSBldmFsUmhzO1xuICAgICAgICBldmFsUmhzID0gY29tcGlsZWRbaSArIDFdKHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcbiAgICAgICAgdmFyIGNvbmRGbiA9ICgwLCBfY3VzdG9tcy5nZXRTYWZlUHJvcGVydHkpKG1hdGgsIHNlbGYuY29uZGl0aW9uYWxzW2ldKTtcblxuICAgICAgICBpZiAoIWNvbmRGbihldmFsTGhzLCBldmFsUmhzKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBlYWNoIG9mIHRoZSBjaGlsZCBub2RlcyBvZiB0aGlzIG5vZGVcbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpfSBjYWxsYmFja1xuICAgKi9cblxuXG4gIFJlbGF0aW9uYWxOb2RlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMucGFyYW1zLmZvckVhY2goZnVuY3Rpb24gKG4sIGkpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayhuLCAncGFyYW1zWycgKyBpICsgJ10nLCBfdGhpcyk7XG4gICAgfSwgdGhpcyk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgUmVsYXRpb25hbE5vZGUgaGF2aW5nIGl0cyBjaGlsZHMgYmUgdGhlIHJlc3VsdHMgb2YgY2FsbGluZ1xuICAgKiB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggb2YgdGhlIGNoaWxkcyBvZiB0aGUgb3JpZ2luYWwgbm9kZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpOiBOb2RlfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7UmVsYXRpb25hbE5vZGV9IFJldHVybnMgYSB0cmFuc2Zvcm1lZCBjb3B5IG9mIHRoZSBub2RlXG4gICAqL1xuXG5cbiAgUmVsYXRpb25hbE5vZGUucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgcmV0dXJuIG5ldyBSZWxhdGlvbmFsTm9kZSh0aGlzLmNvbmRpdGlvbmFscy5zbGljZSgpLCB0aGlzLnBhcmFtcy5tYXAoZnVuY3Rpb24gKG4sIGkpIHtcbiAgICAgIHJldHVybiBfdGhpczIuX2lmTm9kZShjYWxsYmFjayhuLCAncGFyYW1zWycgKyBpICsgJ10nLCBfdGhpczIpKTtcbiAgICB9LCB0aGlzKSk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIG5vZGUsIGEgc2hhbGxvdyBjb3B5XG4gICAqIEByZXR1cm4ge1JlbGF0aW9uYWxOb2RlfVxuICAgKi9cblxuXG4gIFJlbGF0aW9uYWxOb2RlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IFJlbGF0aW9uYWxOb2RlKHRoaXMuY29uZGl0aW9uYWxzLCB0aGlzLnBhcmFtcyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIFJlbGF0aW9uYWxOb2RlLnByb3RvdHlwZS5fdG9TdHJpbmcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBwYXJlbnRoZXNpcyA9IG9wdGlvbnMgJiYgb3B0aW9ucy5wYXJlbnRoZXNpcyA/IG9wdGlvbnMucGFyZW50aGVzaXMgOiAna2VlcCc7XG4gICAgdmFyIHByZWNlZGVuY2UgPSAoMCwgX29wZXJhdG9ycy5nZXRQcmVjZWRlbmNlKSh0aGlzLCBwYXJlbnRoZXNpcyk7XG4gICAgdmFyIHBhcmFtU3RyaW5ncyA9IHRoaXMucGFyYW1zLm1hcChmdW5jdGlvbiAocCwgaW5kZXgpIHtcbiAgICAgIHZhciBwYXJhbVByZWNlZGVuY2UgPSAoMCwgX29wZXJhdG9ycy5nZXRQcmVjZWRlbmNlKShwLCBwYXJlbnRoZXNpcyk7XG4gICAgICByZXR1cm4gcGFyZW50aGVzaXMgPT09ICdhbGwnIHx8IHBhcmFtUHJlY2VkZW5jZSAhPT0gbnVsbCAmJiBwYXJhbVByZWNlZGVuY2UgPD0gcHJlY2VkZW5jZSA/ICcoJyArIHAudG9TdHJpbmcob3B0aW9ucykgKyAnKScgOiBwLnRvU3RyaW5nKG9wdGlvbnMpO1xuICAgIH0pO1xuICAgIHZhciBvcGVyYXRvck1hcCA9IHtcbiAgICAgIGVxdWFsOiAnPT0nLFxuICAgICAgdW5lcXVhbDogJyE9JyxcbiAgICAgIHNtYWxsZXI6ICc8JyxcbiAgICAgIGxhcmdlcjogJz4nLFxuICAgICAgc21hbGxlckVxOiAnPD0nLFxuICAgICAgbGFyZ2VyRXE6ICc+PSdcbiAgICB9O1xuICAgIHZhciByZXQgPSBwYXJhbVN0cmluZ3NbMF07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29uZGl0aW9uYWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXQgKz0gJyAnICsgb3BlcmF0b3JNYXBbdGhpcy5jb25kaXRpb25hbHNbaV1dICsgJyAnICsgcGFyYW1TdHJpbmdzW2kgKyAxXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cblxuXG4gIFJlbGF0aW9uYWxOb2RlLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hdGhqczogJ1JlbGF0aW9uYWxOb2RlJyxcbiAgICAgIGNvbmRpdGlvbmFsczogdGhpcy5jb25kaXRpb25hbHMsXG4gICAgICBwYXJhbXM6IHRoaXMucGFyYW1zXG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIEluc3RhbnRpYXRlIGEgUmVsYXRpb25hbE5vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIlJlbGF0aW9uYWxOb2RlXCIsIFwiY29uZGl0aW9uXCI6IC4uLiwgXCJ0cnVlRXhwclwiOiAuLi4sIFwiZmFsc2VFeHByXCI6IC4uLn1gLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgbWF0aGpzIGlzIG9wdGlvbmFsXG4gICAqIEByZXR1cm5zIHtSZWxhdGlvbmFsTm9kZX1cbiAgICovXG5cblxuICBSZWxhdGlvbmFsTm9kZS5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgcmV0dXJuIG5ldyBSZWxhdGlvbmFsTm9kZShqc29uLmNvbmRpdGlvbmFscywganNvbi5wYXJhbXMpO1xuICB9O1xuICAvKipcbiAgICogR2V0IEhUTUwgcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBSZWxhdGlvbmFsTm9kZS5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgcGFyZW50aGVzaXMgPSBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMgPyBvcHRpb25zLnBhcmVudGhlc2lzIDogJ2tlZXAnO1xuICAgIHZhciBwcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkodGhpcywgcGFyZW50aGVzaXMpO1xuICAgIHZhciBwYXJhbVN0cmluZ3MgPSB0aGlzLnBhcmFtcy5tYXAoZnVuY3Rpb24gKHAsIGluZGV4KSB7XG4gICAgICB2YXIgcGFyYW1QcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkocCwgcGFyZW50aGVzaXMpO1xuICAgICAgcmV0dXJuIHBhcmVudGhlc2lzID09PSAnYWxsJyB8fCBwYXJhbVByZWNlZGVuY2UgIT09IG51bGwgJiYgcGFyYW1QcmVjZWRlbmNlIDw9IHByZWNlZGVuY2UgPyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4oPC9zcGFuPicgKyBwLnRvSFRNTChvcHRpb25zKSArICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPik8L3NwYW4+JyA6IHAudG9IVE1MKG9wdGlvbnMpO1xuICAgIH0pO1xuICAgIHZhciBvcGVyYXRvck1hcCA9IHtcbiAgICAgIGVxdWFsOiAnPT0nLFxuICAgICAgdW5lcXVhbDogJyE9JyxcbiAgICAgIHNtYWxsZXI6ICc8JyxcbiAgICAgIGxhcmdlcjogJz4nLFxuICAgICAgc21hbGxlckVxOiAnPD0nLFxuICAgICAgbGFyZ2VyRXE6ICc+PSdcbiAgICB9O1xuICAgIHZhciByZXQgPSBwYXJhbVN0cmluZ3NbMF07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29uZGl0aW9uYWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXQgKz0gJzxzcGFuIGNsYXNzPVwibWF0aC1vcGVyYXRvciBtYXRoLWJpbmFyeS1vcGVyYXRvciBtYXRoLWV4cGxpY2l0LWJpbmFyeS1vcGVyYXRvclwiPicgKyAoMCwgX3N0cmluZy5lc2NhcGUpKG9wZXJhdG9yTWFwW3RoaXMuY29uZGl0aW9uYWxzW2ldXSkgKyAnPC9zcGFuPicgKyBwYXJhbVN0cmluZ3NbaSArIDFdO1xuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgTGFUZVggcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBSZWxhdGlvbmFsTm9kZS5wcm90b3R5cGUuX3RvVGV4ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgcGFyZW50aGVzaXMgPSBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMgPyBvcHRpb25zLnBhcmVudGhlc2lzIDogJ2tlZXAnO1xuICAgIHZhciBwcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkodGhpcywgcGFyZW50aGVzaXMpO1xuICAgIHZhciBwYXJhbVN0cmluZ3MgPSB0aGlzLnBhcmFtcy5tYXAoZnVuY3Rpb24gKHAsIGluZGV4KSB7XG4gICAgICB2YXIgcGFyYW1QcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkocCwgcGFyZW50aGVzaXMpO1xuICAgICAgcmV0dXJuIHBhcmVudGhlc2lzID09PSAnYWxsJyB8fCBwYXJhbVByZWNlZGVuY2UgIT09IG51bGwgJiYgcGFyYW1QcmVjZWRlbmNlIDw9IHByZWNlZGVuY2UgPyAnXFxcXGxlZnQoJyArIHAudG9UZXgob3B0aW9ucykgKyAnXFxyaWdodCknIDogcC50b1RleChvcHRpb25zKTtcbiAgICB9KTtcbiAgICB2YXIgcmV0ID0gcGFyYW1TdHJpbmdzWzBdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvbmRpdGlvbmFscy5sZW5ndGg7IGkrKykge1xuICAgICAgcmV0ICs9IF9sYXRleC5sYXRleE9wZXJhdG9yc1t0aGlzLmNvbmRpdGlvbmFsc1tpXV0gKyBwYXJhbVN0cmluZ3NbaSArIDFdO1xuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH07XG5cbiAgcmV0dXJuIFJlbGF0aW9uYWxOb2RlO1xufSwge1xuICBpc0NsYXNzOiB0cnVlLFxuICBpc05vZGU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVSZWxhdGlvbmFsTm9kZSA9IGNyZWF0ZVJlbGF0aW9uYWxOb2RlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTeW1ib2xOb2RlID0gdm9pZCAwO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfY3VzdG9tcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jdXN0b21zXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9sYXRleCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9sYXRleFwiKTtcblxudmFyIG5hbWUgPSAnU3ltYm9sTm9kZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydtYXRoJywgJz9Vbml0JywgJ05vZGUnXTtcbnZhciBjcmVhdGVTeW1ib2xOb2RlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIG1hdGggPSBfcmVmLm1hdGgsXG4gICAgICBVbml0ID0gX3JlZi5Vbml0LFxuICAgICAgTm9kZSA9IF9yZWYuTm9kZTtcblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciBzb21lIG5hbWUgaXMgYSB2YWx1ZWxlc3MgdW5pdCBsaWtlIFwiaW5jaFwiLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgZnVuY3Rpb24gaXNWYWx1ZWxlc3NVbml0KG5hbWUpIHtcbiAgICByZXR1cm4gVW5pdCA/IFVuaXQuaXNWYWx1ZWxlc3NVbml0KG5hbWUpIDogZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvciBTeW1ib2xOb2RlXG4gICAqIEBleHRlbmRzIHtOb2RlfVxuICAgKiBBIHN5bWJvbCBub2RlIGNhbiBob2xkIGFuZCByZXNvbHZlIGEgc3ltYm9sXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBleHRlbmRzIHtOb2RlfVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIFN5bWJvbE5vZGUobmFtZSkge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTeW1ib2xOb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9IC8vIHZhbGlkYXRlIGlucHV0XG5cblxuICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1N0cmluZyBleHBlY3RlZCBmb3IgcGFyYW1ldGVyIFwibmFtZVwiJyk7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgfVxuXG4gIFN5bWJvbE5vZGUucHJvdG90eXBlID0gbmV3IE5vZGUoKTtcbiAgU3ltYm9sTm9kZS5wcm90b3R5cGUudHlwZSA9ICdTeW1ib2xOb2RlJztcbiAgU3ltYm9sTm9kZS5wcm90b3R5cGUuaXNTeW1ib2xOb2RlID0gdHJ1ZTtcbiAgLyoqXG4gICAqIENvbXBpbGUgYSBub2RlIGludG8gYSBKYXZhU2NyaXB0IGZ1bmN0aW9uLlxuICAgKiBUaGlzIGJhc2ljYWxseSBwcmUtY2FsY3VsYXRlcyBhcyBtdWNoIGFzIHBvc3NpYmxlIGFuZCBvbmx5IGxlYXZlcyBvcGVuXG4gICAqIGNhbGN1bGF0aW9ucyB3aGljaCBkZXBlbmQgb24gYSBkeW5hbWljIHNjb3BlIHdpdGggdmFyaWFibGVzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gbWF0aCAgICAgTWF0aC5qcyBuYW1lc3BhY2Ugd2l0aCBmdW5jdGlvbnMgYW5kIGNvbnN0YW50cy5cbiAgICogQHBhcmFtIHtPYmplY3R9IGFyZ05hbWVzIEFuIG9iamVjdCB3aXRoIGFyZ3VtZW50IG5hbWVzIGFzIGtleSBhbmQgYHRydWVgXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBhcyB2YWx1ZS4gVXNlZCBpbiB0aGUgU3ltYm9sTm9kZSB0byBvcHRpbWl6ZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFyZ3VtZW50cyBmcm9tIHVzZXIgYXNzaWduZWQgZnVuY3Rpb25zXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VlIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUpIG9yIHNwZWNpYWwgc3ltYm9sc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSBgZW5kYCAoc2VlIEluZGV4Tm9kZSkuXG4gICAqIEByZXR1cm4ge2Z1bmN0aW9ufSBSZXR1cm5zIGEgZnVuY3Rpb24gd2hpY2ggY2FuIGJlIGNhbGxlZCBsaWtlOlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWxOb2RlKHNjb3BlOiBPYmplY3QsIGFyZ3M6IE9iamVjdCwgY29udGV4dDogKilcbiAgICovXG5cbiAgU3ltYm9sTm9kZS5wcm90b3R5cGUuX2NvbXBpbGUgPSBmdW5jdGlvbiAobWF0aCwgYXJnTmFtZXMpIHtcbiAgICB2YXIgbmFtZSA9IHRoaXMubmFtZTtcblxuICAgIGlmIChhcmdOYW1lc1tuYW1lXSA9PT0gdHJ1ZSkge1xuICAgICAgLy8gdGhpcyBpcyBhIEZ1bmN0aW9uQXNzaWdubWVudCBhcmd1bWVudFxuICAgICAgLy8gKGxpa2UgYW4geCB3aGVuIGluc2lkZSB0aGUgZXhwcmVzc2lvbiBvZiBhIGZ1bmN0aW9uIGFzc2lnbm1lbnQgYGYoeCkgPSAuLi5gKVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gYXJnc1tuYW1lXTtcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChuYW1lIGluIG1hdGgpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIG5hbWUgaW4gc2NvcGUgPyAoMCwgX2N1c3RvbXMuZ2V0U2FmZVByb3BlcnR5KShzY29wZSwgbmFtZSkgOiAoMCwgX2N1c3RvbXMuZ2V0U2FmZVByb3BlcnR5KShtYXRoLCBuYW1lKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBpc1VuaXQgPSBpc1ZhbHVlbGVzc1VuaXQobmFtZSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBuYW1lIGluIHNjb3BlID8gKDAsIF9jdXN0b21zLmdldFNhZmVQcm9wZXJ0eSkoc2NvcGUsIG5hbWUpIDogaXNVbml0ID8gbmV3IFVuaXQobnVsbCwgbmFtZSkgOiB1bmRlZihuYW1lKTtcbiAgICAgIH07XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBlYWNoIG9mIHRoZSBjaGlsZCBub2RlcyBvZiB0aGlzIG5vZGVcbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpfSBjYWxsYmFja1xuICAgKi9cblxuXG4gIFN5bWJvbE5vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHt9IC8vIG5vdGhpbmcgdG8gZG8sIHdlIGRvbid0IGhhdmUgY2hpbGRzXG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBTeW1ib2xOb2RlIGhhdmluZyBpdCdzIGNoaWxkcyBiZSB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nXG4gICAqIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCBvZiB0aGUgY2hpbGRzIG9mIHRoZSBvcmlnaW5hbCBub2RlLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSkgOiBOb2RlfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7U3ltYm9sTm9kZX0gUmV0dXJucyBhIGNsb25lIG9mIHRoZSBub2RlXG4gICAqL1xuICA7XG5cbiAgU3ltYm9sTm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKTtcbiAgfTtcbiAgLyoqXG4gICAqIFRocm93cyBhbiBlcnJvciAnVW5kZWZpbmVkIHN5bWJvbCB7bmFtZX0nXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gdW5kZWYobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5kZWZpbmVkIHN5bWJvbCAnICsgbmFtZSk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoaXMgbm9kZSwgYSBzaGFsbG93IGNvcHlcbiAgICogQHJldHVybiB7U3ltYm9sTm9kZX1cbiAgICovXG5cblxuICBTeW1ib2xOb2RlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IFN5bWJvbE5vZGUodGhpcy5uYW1lKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuXG5cbiAgU3ltYm9sTm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lO1xuICB9O1xuICAvKipcbiAgICogR2V0IEhUTUwgcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuXG5cbiAgU3ltYm9sTm9kZS5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgbmFtZSA9ICgwLCBfc3RyaW5nLmVzY2FwZSkodGhpcy5uYW1lKTtcblxuICAgIGlmIChuYW1lID09PSAndHJ1ZScgfHwgbmFtZSA9PT0gJ2ZhbHNlJykge1xuICAgICAgcmV0dXJuICc8c3BhbiBjbGFzcz1cIm1hdGgtc3ltYm9sIG1hdGgtYm9vbGVhblwiPicgKyBuYW1lICsgJzwvc3Bhbj4nO1xuICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ2knKSB7XG4gICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1zeW1ib2wgbWF0aC1pbWFnaW5hcnktc3ltYm9sXCI+JyArIG5hbWUgKyAnPC9zcGFuPic7XG4gICAgfSBlbHNlIGlmIChuYW1lID09PSAnSW5maW5pdHknKSB7XG4gICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1zeW1ib2wgbWF0aC1pbmZpbml0eS1zeW1ib2xcIj4nICsgbmFtZSArICc8L3NwYW4+JztcbiAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdOYU4nKSB7XG4gICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1zeW1ib2wgbWF0aC1uYW4tc3ltYm9sXCI+JyArIG5hbWUgKyAnPC9zcGFuPic7XG4gICAgfSBlbHNlIGlmIChuYW1lID09PSAnbnVsbCcpIHtcbiAgICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJtYXRoLXN5bWJvbCBtYXRoLW51bGwtc3ltYm9sXCI+JyArIG5hbWUgKyAnPC9zcGFuPic7XG4gICAgfSBlbHNlIGlmIChuYW1lID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuICc8c3BhbiBjbGFzcz1cIm1hdGgtc3ltYm9sIG1hdGgtdW5kZWZpbmVkLXN5bWJvbFwiPicgKyBuYW1lICsgJzwvc3Bhbj4nO1xuICAgIH1cblxuICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJtYXRoLXN5bWJvbFwiPicgKyBuYW1lICsgJzwvc3Bhbj4nO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cblxuXG4gIFN5bWJvbE5vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnU3ltYm9sTm9kZScsXG4gICAgICBuYW1lOiB0aGlzLm5hbWVcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogSW5zdGFudGlhdGUgYSBTeW1ib2xOb2RlIGZyb20gaXRzIEpTT04gcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIEFuIG9iamVjdCBzdHJ1Y3R1cmVkIGxpa2VcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJTeW1ib2xOb2RlXCIsIG5hbWU6IFwieFwifWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge1N5bWJvbE5vZGV9XG4gICAqL1xuXG5cbiAgU3ltYm9sTm9kZS5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgcmV0dXJuIG5ldyBTeW1ib2xOb2RlKGpzb24ubmFtZSk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgTGFUZVggcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuXG5cbiAgU3ltYm9sTm9kZS5wcm90b3R5cGUuX3RvVGV4ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgaXNVbml0ID0gZmFsc2U7XG5cbiAgICBpZiAodHlwZW9mIG1hdGhbdGhpcy5uYW1lXSA9PT0gJ3VuZGVmaW5lZCcgJiYgaXNWYWx1ZWxlc3NVbml0KHRoaXMubmFtZSkpIHtcbiAgICAgIGlzVW5pdCA9IHRydWU7XG4gICAgfVxuXG4gICAgdmFyIHN5bWJvbCA9ICgwLCBfbGF0ZXgudG9TeW1ib2wpKHRoaXMubmFtZSwgaXNVbml0KTtcblxuICAgIGlmIChzeW1ib2xbMF0gPT09ICdcXFxcJykge1xuICAgICAgLy8gbm8gc3BhY2UgbmVlZGVkIGlmIHRoZSBzeW1ib2wgc3RhcnRzIHdpdGggJ1xcJ1xuICAgICAgcmV0dXJuIHN5bWJvbDtcbiAgICB9IC8vIHRoZSBzcGFjZSBwcmV2ZW50cyBzeW1ib2xzIGZyb20gYnJlYWtpbmcgc3R1ZmYgbGlrZSAnXFxjZG90JyBpZiBpdCdzIHdyaXR0ZW4gcmlnaHQgYmVmb3JlIHRoZSBzeW1ib2xcblxuXG4gICAgcmV0dXJuICcgJyArIHN5bWJvbDtcbiAgfTtcblxuICByZXR1cm4gU3ltYm9sTm9kZTtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZSxcbiAgaXNOb2RlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3ltYm9sTm9kZSA9IGNyZWF0ZVN5bWJvbE5vZGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFjY2Vzc0ZhY3RvcnkgPSBhY2Nlc3NGYWN0b3J5O1xuXG52YXIgX2Vycm9yVHJhbnNmb3JtID0gcmVxdWlyZShcIi4uLy4uL3RyYW5zZm9ybS91dGlscy9lcnJvclRyYW5zZm9ybVwiKTtcblxudmFyIF9jdXN0b21zID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2N1c3RvbXNcIik7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gYWNjZXNzRmFjdG9yeShfcmVmKSB7XG4gIHZhciBzdWJzZXQgPSBfcmVmLnN1YnNldDtcblxuICAvKipcbiAgICogUmV0cmlldmUgcGFydCBvZiBhbiBvYmplY3Q6XG4gICAqXG4gICAqIC0gUmV0cmlldmUgYSBwcm9wZXJ0eSBmcm9tIGFuIG9iamVjdFxuICAgKiAtIFJldHJpZXZlIGEgcGFydCBvZiBhIHN0cmluZ1xuICAgKiAtIFJldHJpZXZlIGEgbWF0cml4IHN1YnNldFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdCB8IEFycmF5IHwgTWF0cml4IHwgc3RyaW5nfSBvYmplY3RcbiAgICogQHBhcmFtIHtJbmRleH0gaW5kZXhcbiAgICogQHJldHVybiB7T2JqZWN0IHwgQXJyYXkgfCBNYXRyaXggfCBzdHJpbmd9IFJldHVybnMgdGhlIHN1YnNldFxuICAgKi9cbiAgcmV0dXJuIGZ1bmN0aW9uIGFjY2VzcyhvYmplY3QsIGluZGV4KSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcbiAgICAgICAgcmV0dXJuIHN1YnNldChvYmplY3QsIGluZGV4KTtcbiAgICAgIH0gZWxzZSBpZiAob2JqZWN0ICYmIHR5cGVvZiBvYmplY3Quc3Vic2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIE1hdHJpeFxuICAgICAgICByZXR1cm4gb2JqZWN0LnN1YnNldChpbmRleCk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIFRPRE86IG1vdmUgZ2V0U3RyaW5nU3Vic2V0IGludG8gYSBzZXBhcmF0ZSB1dGlsIGZpbGUsIHVzZSB0aGF0XG4gICAgICAgIHJldHVybiBzdWJzZXQob2JqZWN0LCBpbmRleCk7XG4gICAgICB9IGVsc2UgaWYgKF90eXBlb2Yob2JqZWN0KSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKCFpbmRleC5pc09iamVjdFByb3BlcnR5KCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgYXBwbHkgYSBudW1lcmljIGluZGV4IGFzIG9iamVjdCBwcm9wZXJ0eScpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICgwLCBfY3VzdG9tcy5nZXRTYWZlUHJvcGVydHkpKG9iamVjdCwgaW5kZXguZ2V0T2JqZWN0UHJvcGVydHkoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgYXBwbHkgaW5kZXg6IHVuc3VwcG9ydGVkIHR5cGUgb2Ygb2JqZWN0Jyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aHJvdyAoMCwgX2Vycm9yVHJhbnNmb3JtLmVycm9yVHJhbnNmb3JtKShlcnIpO1xuICAgIH1cbiAgfTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYXNzaWduRmFjdG9yeSA9IGFzc2lnbkZhY3Rvcnk7XG5cbnZhciBfZXJyb3JUcmFuc2Zvcm0gPSByZXF1aXJlKFwiLi4vLi4vdHJhbnNmb3JtL3V0aWxzL2Vycm9yVHJhbnNmb3JtXCIpO1xuXG52YXIgX2N1c3RvbXMgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvY3VzdG9tc1wiKTtcblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBhc3NpZ25GYWN0b3J5KF9yZWYpIHtcbiAgdmFyIHN1YnNldCA9IF9yZWYuc3Vic2V0LFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXg7XG5cbiAgLyoqXG4gICAqIFJlcGxhY2UgcGFydCBvZiBhbiBvYmplY3Q6XG4gICAqXG4gICAqIC0gQXNzaWduIGEgcHJvcGVydHkgdG8gYW4gb2JqZWN0XG4gICAqIC0gUmVwbGFjZSBhIHBhcnQgb2YgYSBzdHJpbmdcbiAgICogLSBSZXBsYWNlIGEgbWF0cml4IHN1YnNldFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdCB8IEFycmF5IHwgTWF0cml4IHwgc3RyaW5nfSBvYmplY3RcbiAgICogQHBhcmFtIHtJbmRleH0gaW5kZXhcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcmV0dXJuIHtPYmplY3QgfCBBcnJheSB8IE1hdHJpeCB8IHN0cmluZ30gUmV0dXJucyB0aGUgb3JpZ2luYWwgb2JqZWN0XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgaW4gY2FzZSBvZiBhIHN0cmluZ1xuICAgKi9cbiAgLy8gVE9ETzogY2hhbmdlIGFzc2lnbiB0byByZXR1cm4gdGhlIHZhbHVlIGluc3RlYWQgb2YgdGhlIG9iamVjdFxuICByZXR1cm4gZnVuY3Rpb24gYXNzaWduKG9iamVjdCwgaW5kZXgsIHZhbHVlKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcbiAgICAgICAgLy8gd2UgdXNlIG1hdHJpeC5zdWJzZXQgaGVyZSBpbnN0ZWFkIG9mIHRoZSBmdW5jdGlvbiBzdWJzZXQgYmVjYXVzZSB3ZSBtdXN0IG5vdCBjbG9uZSB0aGUgY29udGVudHNcbiAgICAgICAgcmV0dXJuIG1hdHJpeChvYmplY3QpLnN1YnNldChpbmRleCwgdmFsdWUpLnZhbHVlT2YoKTtcbiAgICAgIH0gZWxzZSBpZiAob2JqZWN0ICYmIHR5cGVvZiBvYmplY3Quc3Vic2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIE1hdHJpeFxuICAgICAgICByZXR1cm4gb2JqZWN0LnN1YnNldChpbmRleCwgdmFsdWUpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBUT0RPOiBtb3ZlIHNldFN0cmluZ1N1YnNldCBpbnRvIGEgc2VwYXJhdGUgdXRpbCBmaWxlLCB1c2UgdGhhdFxuICAgICAgICByZXR1cm4gc3Vic2V0KG9iamVjdCwgaW5kZXgsIHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoX3R5cGVvZihvYmplY3QpID09PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAoIWluZGV4LmlzT2JqZWN0UHJvcGVydHkoKSkge1xuICAgICAgICAgIHRocm93IFR5cGVFcnJvcignQ2Fubm90IGFwcGx5IGEgbnVtZXJpYyBpbmRleCBhcyBvYmplY3QgcHJvcGVydHknKTtcbiAgICAgICAgfVxuXG4gICAgICAgICgwLCBfY3VzdG9tcy5zZXRTYWZlUHJvcGVydHkpKG9iamVjdCwgaW5kZXguZ2V0T2JqZWN0UHJvcGVydHkoKSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGFwcGx5IGluZGV4OiB1bnN1cHBvcnRlZCB0eXBlIG9mIG9iamVjdCcpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgKDAsIF9lcnJvclRyYW5zZm9ybS5lcnJvclRyYW5zZm9ybSkoZXJyKTtcbiAgICB9XG4gIH07XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmdldFByZWNlZGVuY2UgPSBnZXRQcmVjZWRlbmNlO1xuZXhwb3J0cy5nZXRBc3NvY2lhdGl2aXR5ID0gZ2V0QXNzb2NpYXRpdml0eTtcbmV4cG9ydHMuaXNBc3NvY2lhdGl2ZVdpdGggPSBpc0Fzc29jaWF0aXZlV2l0aDtcbmV4cG9ydHMucHJvcGVydGllcyA9IHZvaWQgMDtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG4vLyBsaXN0IG9mIGlkZW50aWZpZXJzIG9mIG5vZGVzIGluIG9yZGVyIG9mIHRoZWlyIHByZWNlZGVuY2Vcbi8vIGFsc28gY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgbGVmdC9yaWdodCBhc3NvY2lhdGl2aXR5XG4vLyBhbmQgd2hpY2ggb3RoZXIgb3BlcmF0b3IgdGhlIG9wZXJhdG9yIGlzIGFzc29jaWF0aXZlIHdpdGhcbi8vIEV4YW1wbGU6XG4vLyBhZGRpdGlvbiBpcyBhc3NvY2lhdGl2ZSB3aXRoIGFkZGl0aW9uIGFuZCBzdWJ0cmFjdGlvbiwgYmVjYXVzZTpcbi8vIChhK2IpK2M9YSsoYitjKVxuLy8gKGErYiktYz1hKyhiLWMpXG4vL1xuLy8gcG9zdGZpeCBvcGVyYXRvcnMgYXJlIGxlZnQgYXNzb2NpYXRpdmUsIHByZWZpeCBvcGVyYXRvcnNcbi8vIGFyZSByaWdodCBhc3NvY2lhdGl2ZVxuLy9cbi8vIEl0J3MgYWxzbyBwb3NzaWJsZSB0byBzZXQgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuLy8gbGF0ZXhQYXJlbnM6IGlmIHNldCB0byBmYWxzZSwgdGhpcyBub2RlIGRvZXNuJ3QgbmVlZCB0byBiZSBlbmNsb3NlZFxuLy8gICAgICAgICAgICAgIGluIHBhcmVudGhlc2VzIHdoZW4gdXNpbmcgTGFUZVhcbi8vIGxhdGV4TGVmdFBhcmVuczogaWYgc2V0IHRvIGZhbHNlLCB0aGlzICFPcGVyYXRvck5vZGUncyFcbi8vICAgICAgICAgICAgICAgICAgbGVmdCBhcmd1bWVudCBkb2Vzbid0IG5lZWQgdG8gYmUgZW5jbG9zZWRcbi8vICAgICAgICAgICAgICAgICAgaW4gcGFyZW50aGVzZXNcbi8vIGxhdGV4UmlnaHRQYXJlbnM6IHRoZSBzYW1lIGZvciB0aGUgcmlnaHQgYXJndW1lbnRcbnZhciBwcm9wZXJ0aWVzID0gW3tcbiAgLy8gYXNzaWdubWVudFxuICBBc3NpZ25tZW50Tm9kZToge30sXG4gIEZ1bmN0aW9uQXNzaWdubWVudE5vZGU6IHt9XG59LCB7XG4gIC8vIGNvbmRpdGlvbmFsIGV4cHJlc3Npb25cbiAgQ29uZGl0aW9uYWxOb2RlOiB7XG4gICAgbGF0ZXhMZWZ0UGFyZW5zOiBmYWxzZSxcbiAgICBsYXRleFJpZ2h0UGFyZW5zOiBmYWxzZSxcbiAgICBsYXRleFBhcmVuczogZmFsc2UgLy8gY29uZGl0aW9uYWxzIGRvbid0IG5lZWQgcGFyZW50aGVzZXMgaW4gTGFUZVggYmVjYXVzZVxuICAgIC8vIHRoZXkgYXJlIDIgZGltZW5zaW9uYWxcblxuICB9XG59LCB7XG4gIC8vIGxvZ2ljYWwgb3JcbiAgJ09wZXJhdG9yTm9kZTpvcic6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCcsXG4gICAgYXNzb2NpYXRpdmVXaXRoOiBbXVxuICB9XG59LCB7XG4gIC8vIGxvZ2ljYWwgeG9yXG4gICdPcGVyYXRvck5vZGU6eG9yJzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFtdXG4gIH1cbn0sIHtcbiAgLy8gbG9naWNhbCBhbmRcbiAgJ09wZXJhdG9yTm9kZTphbmQnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW11cbiAgfVxufSwge1xuICAvLyBiaXR3aXNlIG9yXG4gICdPcGVyYXRvck5vZGU6Yml0T3InOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW11cbiAgfVxufSwge1xuICAvLyBiaXR3aXNlIHhvclxuICAnT3BlcmF0b3JOb2RlOmJpdFhvcic6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCcsXG4gICAgYXNzb2NpYXRpdmVXaXRoOiBbXVxuICB9XG59LCB7XG4gIC8vIGJpdHdpc2UgYW5kXG4gICdPcGVyYXRvck5vZGU6Yml0QW5kJzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFtdXG4gIH1cbn0sIHtcbiAgLy8gcmVsYXRpb25hbCBvcGVyYXRvcnNcbiAgJ09wZXJhdG9yTm9kZTplcXVhbCc6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCcsXG4gICAgYXNzb2NpYXRpdmVXaXRoOiBbXVxuICB9LFxuICAnT3BlcmF0b3JOb2RlOnVuZXF1YWwnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW11cbiAgfSxcbiAgJ09wZXJhdG9yTm9kZTpzbWFsbGVyJzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFtdXG4gIH0sXG4gICdPcGVyYXRvck5vZGU6bGFyZ2VyJzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFtdXG4gIH0sXG4gICdPcGVyYXRvck5vZGU6c21hbGxlckVxJzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFtdXG4gIH0sXG4gICdPcGVyYXRvck5vZGU6bGFyZ2VyRXEnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW11cbiAgfSxcbiAgUmVsYXRpb25hbE5vZGU6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCcsXG4gICAgYXNzb2NpYXRpdmVXaXRoOiBbXVxuICB9XG59LCB7XG4gIC8vIGJpdHNoaWZ0IG9wZXJhdG9yc1xuICAnT3BlcmF0b3JOb2RlOmxlZnRTaGlmdCc6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCcsXG4gICAgYXNzb2NpYXRpdmVXaXRoOiBbXVxuICB9LFxuICAnT3BlcmF0b3JOb2RlOnJpZ2h0QXJpdGhTaGlmdCc6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCcsXG4gICAgYXNzb2NpYXRpdmVXaXRoOiBbXVxuICB9LFxuICAnT3BlcmF0b3JOb2RlOnJpZ2h0TG9nU2hpZnQnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW11cbiAgfVxufSwge1xuICAvLyB1bml0IGNvbnZlcnNpb25cbiAgJ09wZXJhdG9yTm9kZTp0byc6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCcsXG4gICAgYXNzb2NpYXRpdmVXaXRoOiBbXVxuICB9XG59LCB7XG4gIC8vIHJhbmdlXG4gIFJhbmdlTm9kZToge31cbn0sIHtcbiAgLy8gYWRkaXRpb24sIHN1YnRyYWN0aW9uXG4gICdPcGVyYXRvck5vZGU6YWRkJzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFsnT3BlcmF0b3JOb2RlOmFkZCcsICdPcGVyYXRvck5vZGU6c3VidHJhY3QnXVxuICB9LFxuICAnT3BlcmF0b3JOb2RlOnN1YnRyYWN0Jzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFtdXG4gIH1cbn0sIHtcbiAgLy8gbXVsdGlwbHksIGRpdmlkZSwgbW9kdWx1c1xuICAnT3BlcmF0b3JOb2RlOm11bHRpcGx5Jzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFsnT3BlcmF0b3JOb2RlOm11bHRpcGx5JywgJ09wZXJhdG9yTm9kZTpkaXZpZGUnLCAnT3BlcmF0b3I6ZG90TXVsdGlwbHknLCAnT3BlcmF0b3I6ZG90RGl2aWRlJ11cbiAgfSxcbiAgJ09wZXJhdG9yTm9kZTpkaXZpZGUnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW10sXG4gICAgbGF0ZXhMZWZ0UGFyZW5zOiBmYWxzZSxcbiAgICBsYXRleFJpZ2h0UGFyZW5zOiBmYWxzZSxcbiAgICBsYXRleFBhcmVuczogZmFsc2UgLy8gZnJhY3Rpb25zIGRvbid0IHJlcXVpcmUgcGFyZW50aGVzZXMgYmVjYXVzZVxuICAgIC8vIHRoZXkncmUgMiBkaW1lbnNpb25hbCwgc28gcGFyZW5zIGFyZW4ndCBuZWVkZWRcbiAgICAvLyBpbiBMYVRlWFxuXG4gIH0sXG4gICdPcGVyYXRvck5vZGU6ZG90TXVsdGlwbHknOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogWydPcGVyYXRvck5vZGU6bXVsdGlwbHknLCAnT3BlcmF0b3JOb2RlOmRpdmlkZScsICdPcGVyYXRvck5vZGU6ZG90TXVsdGlwbHknLCAnT3BlcmF0b3JOb2RlOmRvRGl2aWRlJ11cbiAgfSxcbiAgJ09wZXJhdG9yTm9kZTpkb3REaXZpZGUnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW11cbiAgfSxcbiAgJ09wZXJhdG9yTm9kZTptb2QnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW11cbiAgfVxufSwge1xuICAvLyB1bmFyeSBwcmVmaXggb3BlcmF0b3JzXG4gICdPcGVyYXRvck5vZGU6dW5hcnlQbHVzJzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdyaWdodCdcbiAgfSxcbiAgJ09wZXJhdG9yTm9kZTp1bmFyeU1pbnVzJzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdyaWdodCdcbiAgfSxcbiAgJ09wZXJhdG9yTm9kZTpiaXROb3QnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ3JpZ2h0J1xuICB9LFxuICAnT3BlcmF0b3JOb2RlOm5vdCc6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAncmlnaHQnXG4gIH1cbn0sIHtcbiAgLy8gZXhwb25lbnRpYXRpb25cbiAgJ09wZXJhdG9yTm9kZTpwb3cnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ3JpZ2h0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFtdLFxuICAgIGxhdGV4UmlnaHRQYXJlbnM6IGZhbHNlIC8vIHRoZSBleHBvbmVudCBkb2Vzbid0IG5lZWQgcGFyZW50aGVzZXMgaW5cbiAgICAvLyBMYVRlWCBiZWNhdXNlIGl0J3MgMiBkaW1lbnNpb25hbFxuICAgIC8vIChpdCdzIG9uIHRvcClcblxuICB9LFxuICAnT3BlcmF0b3JOb2RlOmRvdFBvdyc6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAncmlnaHQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW11cbiAgfVxufSwge1xuICAvLyBmYWN0b3JpYWxcbiAgJ09wZXJhdG9yTm9kZTpmYWN0b3JpYWwnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnXG4gIH1cbn0sIHtcbiAgLy8gbWF0cml4IHRyYW5zcG9zZVxuICAnT3BlcmF0b3JOb2RlOnRyYW5zcG9zZSc6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCdcbiAgfVxufV07XG4vKipcbiAqIEdldCB0aGUgcHJlY2VkZW5jZSBvZiBhIE5vZGUuXG4gKiBIaWdoZXIgbnVtYmVyIGZvciBoaWdoZXIgcHJlY2VkZW5jZSwgc3RhcnRpbmcgd2l0aCAwLlxuICogUmV0dXJucyBudWxsIGlmIHRoZSBwcmVjZWRlbmNlIGlzIHVuZGVmaW5lZC5cbiAqXG4gKiBAcGFyYW0ge05vZGV9IF9ub2RlXG4gKiBAcGFyYW0ge3N0cmluZ30gcGFyZW50aGVzaXNcbiAqIEByZXR1cm4ge251bWJlciB8IG51bGx9XG4gKi9cblxuZXhwb3J0cy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcblxuZnVuY3Rpb24gZ2V0UHJlY2VkZW5jZShfbm9kZSwgcGFyZW50aGVzaXMpIHtcbiAgdmFyIG5vZGUgPSBfbm9kZTtcblxuICBpZiAocGFyZW50aGVzaXMgIT09ICdrZWVwJykge1xuICAgIC8vIFBhcmVudGhlc2lzTm9kZXMgYXJlIG9ubHkgaWdub3JlZCB3aGVuIG5vdCBpbiAna2VlcCcgbW9kZVxuICAgIG5vZGUgPSBfbm9kZS5nZXRDb250ZW50KCk7XG4gIH1cblxuICB2YXIgaWRlbnRpZmllciA9IG5vZGUuZ2V0SWRlbnRpZmllcigpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChpZGVudGlmaWVyIGluIHByb3BlcnRpZXNbaV0pIHtcbiAgICAgIHJldHVybiBpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuLyoqXG4gKiBHZXQgdGhlIGFzc29jaWF0aXZpdHkgb2YgYW4gb3BlcmF0b3IgKGxlZnQgb3IgcmlnaHQpLlxuICogUmV0dXJucyBhIHN0cmluZyBjb250YWluaW5nICdsZWZ0JyBvciAncmlnaHQnIG9yIG51bGwgaWZcbiAqIHRoZSBhc3NvY2lhdGl2aXR5IGlzIG5vdCBkZWZpbmVkLlxuICpcbiAqIEBwYXJhbSB7Tm9kZX1cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXJlbnRoZXNpc1xuICogQHJldHVybiB7c3RyaW5nfG51bGx9XG4gKiBAdGhyb3dzIHtFcnJvcn1cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldEFzc29jaWF0aXZpdHkoX25vZGUsIHBhcmVudGhlc2lzKSB7XG4gIHZhciBub2RlID0gX25vZGU7XG5cbiAgaWYgKHBhcmVudGhlc2lzICE9PSAna2VlcCcpIHtcbiAgICAvLyBQYXJlbnRoZXNpc05vZGVzIGFyZSBvbmx5IGlnbm9yZWQgd2hlbiBub3QgaW4gJ2tlZXAnIG1vZGVcbiAgICBub2RlID0gX25vZGUuZ2V0Q29udGVudCgpO1xuICB9XG5cbiAgdmFyIGlkZW50aWZpZXIgPSBub2RlLmdldElkZW50aWZpZXIoKTtcbiAgdmFyIGluZGV4ID0gZ2V0UHJlY2VkZW5jZShub2RlLCBwYXJlbnRoZXNpcyk7XG5cbiAgaWYgKGluZGV4ID09PSBudWxsKSB7XG4gICAgLy8gbm9kZSBpc24ndCBpbiB0aGUgbGlzdFxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIHByb3BlcnR5ID0gcHJvcGVydGllc1tpbmRleF1baWRlbnRpZmllcl07XG5cbiAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShwcm9wZXJ0eSwgJ2Fzc29jaWF0aXZpdHknKSkge1xuICAgIGlmIChwcm9wZXJ0eS5hc3NvY2lhdGl2aXR5ID09PSAnbGVmdCcpIHtcbiAgICAgIHJldHVybiAnbGVmdCc7XG4gICAgfVxuXG4gICAgaWYgKHByb3BlcnR5LmFzc29jaWF0aXZpdHkgPT09ICdyaWdodCcpIHtcbiAgICAgIHJldHVybiAncmlnaHQnO1xuICAgIH0gLy8gYXNzb2NpYXRpdml0eSBpcyBpbnZhbGlkXG5cblxuICAgIHRocm93IEVycm9yKCdcXCcnICsgaWRlbnRpZmllciArICdcXCcgaGFzIHRoZSBpbnZhbGlkIGFzc29jaWF0aXZpdHkgXFwnJyArIHByb3BlcnR5LmFzc29jaWF0aXZpdHkgKyAnXFwnLicpO1xuICB9IC8vIGFzc29jaWF0aXZpdHkgaXMgdW5kZWZpbmVkXG5cblxuICByZXR1cm4gbnVsbDtcbn1cbi8qKlxuICogQ2hlY2sgaWYgYW4gb3BlcmF0b3IgaXMgYXNzb2NpYXRpdmUgd2l0aCBhbm90aGVyIG9wZXJhdG9yLlxuICogUmV0dXJucyBlaXRoZXIgdHJ1ZSBvciBmYWxzZSBvciBudWxsIGlmIG5vdCBkZWZpbmVkLlxuICpcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZUFcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZUJcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXJlbnRoZXNpc1xuICogQHJldHVybiB7Ym9vbGVhbiB8IG51bGx9XG4gKi9cblxuXG5mdW5jdGlvbiBpc0Fzc29jaWF0aXZlV2l0aChub2RlQSwgbm9kZUIsIHBhcmVudGhlc2lzKSB7XG4gIC8vIFBhcmVudGhlc2lzTm9kZXMgYXJlIG9ubHkgaWdub3JlZCB3aGVuIG5vdCBpbiAna2VlcCcgbW9kZVxuICB2YXIgYSA9IHBhcmVudGhlc2lzICE9PSAna2VlcCcgPyBub2RlQS5nZXRDb250ZW50KCkgOiBub2RlQTtcbiAgdmFyIGIgPSBwYXJlbnRoZXNpcyAhPT0gJ2tlZXAnID8gbm9kZUEuZ2V0Q29udGVudCgpIDogbm9kZUI7XG4gIHZhciBpZGVudGlmaWVyQSA9IGEuZ2V0SWRlbnRpZmllcigpO1xuICB2YXIgaWRlbnRpZmllckIgPSBiLmdldElkZW50aWZpZXIoKTtcbiAgdmFyIGluZGV4ID0gZ2V0UHJlY2VkZW5jZShhLCBwYXJlbnRoZXNpcyk7XG5cbiAgaWYgKGluZGV4ID09PSBudWxsKSB7XG4gICAgLy8gbm9kZSBpc24ndCBpbiB0aGUgbGlzdFxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIHByb3BlcnR5ID0gcHJvcGVydGllc1tpbmRleF1baWRlbnRpZmllckFdO1xuXG4gIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkocHJvcGVydHksICdhc3NvY2lhdGl2ZVdpdGgnKSAmJiBwcm9wZXJ0eS5hc3NvY2lhdGl2ZVdpdGggaW5zdGFuY2VvZiBBcnJheSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydHkuYXNzb2NpYXRpdmVXaXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocHJvcGVydHkuYXNzb2NpYXRpdmVXaXRoW2ldID09PSBpZGVudGlmaWVyQikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gYXNzb2NpYXRpdmVXaXRoIGlzIG5vdCBkZWZpbmVkXG5cblxuICByZXR1cm4gbnVsbDtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUGFyc2UgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG52YXIgbmFtZSA9ICdwYXJzZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdudW1lcmljJywgJ2NvbmZpZycsICdBY2Nlc3Nvck5vZGUnLCAnQXJyYXlOb2RlJywgJ0Fzc2lnbm1lbnROb2RlJywgJ0Jsb2NrTm9kZScsICdDb25kaXRpb25hbE5vZGUnLCAnQ29uc3RhbnROb2RlJywgJ0Z1bmN0aW9uQXNzaWdubWVudE5vZGUnLCAnRnVuY3Rpb25Ob2RlJywgJ0luZGV4Tm9kZScsICdPYmplY3ROb2RlJywgJ09wZXJhdG9yTm9kZScsICdQYXJlbnRoZXNpc05vZGUnLCAnUmFuZ2VOb2RlJywgJ1JlbGF0aW9uYWxOb2RlJywgJ1N5bWJvbE5vZGUnXTtcbnZhciBjcmVhdGVQYXJzZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBudW1lcmljID0gX3JlZi5udW1lcmljLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBBY2Nlc3Nvck5vZGUgPSBfcmVmLkFjY2Vzc29yTm9kZSxcbiAgICAgIEFycmF5Tm9kZSA9IF9yZWYuQXJyYXlOb2RlLFxuICAgICAgQXNzaWdubWVudE5vZGUgPSBfcmVmLkFzc2lnbm1lbnROb2RlLFxuICAgICAgQmxvY2tOb2RlID0gX3JlZi5CbG9ja05vZGUsXG4gICAgICBDb25kaXRpb25hbE5vZGUgPSBfcmVmLkNvbmRpdGlvbmFsTm9kZSxcbiAgICAgIENvbnN0YW50Tm9kZSA9IF9yZWYuQ29uc3RhbnROb2RlLFxuICAgICAgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSA9IF9yZWYuRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSxcbiAgICAgIEZ1bmN0aW9uTm9kZSA9IF9yZWYuRnVuY3Rpb25Ob2RlLFxuICAgICAgSW5kZXhOb2RlID0gX3JlZi5JbmRleE5vZGUsXG4gICAgICBPYmplY3ROb2RlID0gX3JlZi5PYmplY3ROb2RlLFxuICAgICAgT3BlcmF0b3JOb2RlID0gX3JlZi5PcGVyYXRvck5vZGUsXG4gICAgICBQYXJlbnRoZXNpc05vZGUgPSBfcmVmLlBhcmVudGhlc2lzTm9kZSxcbiAgICAgIFJhbmdlTm9kZSA9IF9yZWYuUmFuZ2VOb2RlLFxuICAgICAgUmVsYXRpb25hbE5vZGUgPSBfcmVmLlJlbGF0aW9uYWxOb2RlLFxuICAgICAgU3ltYm9sTm9kZSA9IF9yZWYuU3ltYm9sTm9kZTtcblxuICAvKipcbiAgICogUGFyc2UgYW4gZXhwcmVzc2lvbi4gUmV0dXJucyBhIG5vZGUgdHJlZSwgd2hpY2ggY2FuIGJlIGV2YWx1YXRlZCBieVxuICAgKiBpbnZva2luZyBub2RlLmV2YWx1YXRlKCkuXG4gICAqXG4gICAqIE5vdGUgdGhlIGV2YWx1YXRpbmcgYXJiaXRyYXJ5IGV4cHJlc3Npb25zIG1heSBpbnZvbHZlIHNlY3VyaXR5IHJpc2tzLFxuICAgKiBzZWUgW2h0dHBzOi8vbWF0aGpzLm9yZy9kb2NzL2V4cHJlc3Npb25zL3NlY3VyaXR5Lmh0bWxdKGh0dHBzOi8vbWF0aGpzLm9yZy9kb2NzL2V4cHJlc3Npb25zL3NlY3VyaXR5Lmh0bWwpIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLnBhcnNlKGV4cHIpXG4gICAqICAgICBtYXRoLnBhcnNlKGV4cHIsIG9wdGlvbnMpXG4gICAqICAgICBtYXRoLnBhcnNlKFtleHByMSwgZXhwcjIsIGV4cHIzLCAuLi5dKVxuICAgKiAgICAgbWF0aC5wYXJzZShbZXhwcjEsIGV4cHIyLCBleHByMywgLi4uXSwgb3B0aW9ucylcbiAgICpcbiAgICogRXhhbXBsZTpcbiAgICpcbiAgICogICAgIGNvbnN0IG5vZGUxID0gbWF0aC5wYXJzZSgnc3FydCgzXjIgKyA0XjIpJylcbiAgICogICAgIG5vZGUxLmNvbXBpbGUoKS5ldmFsdWF0ZSgpIC8vIDVcbiAgICpcbiAgICogICAgIGxldCBzY29wZSA9IHthOjMsIGI6NH1cbiAgICogICAgIGNvbnN0IG5vZGUyID0gbWF0aC5wYXJzZSgnYSAqIGInKSAvLyAxMlxuICAgKiAgICAgY29uc3QgY29kZTIgPSBub2RlMi5jb21waWxlKClcbiAgICogICAgIGNvZGUyLmV2YWx1YXRlKHNjb3BlKSAvLyAxMlxuICAgKiAgICAgc2NvcGUuYSA9IDVcbiAgICogICAgIGNvZGUyLmV2YWx1YXRlKHNjb3BlKSAvLyAyMFxuICAgKlxuICAgKiAgICAgY29uc3Qgbm9kZXMgPSBtYXRoLnBhcnNlKFsnYSA9IDMnLCAnYiA9IDQnLCAnYSAqIGInXSlcbiAgICogICAgIG5vZGVzWzJdLmNvbXBpbGUoKS5ldmFsdWF0ZSgpIC8vIDEyXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgZXZhbHVhdGUsIGNvbXBpbGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBzdHJpbmdbXSB8IE1hdHJpeH0gZXhwciAgICAgICAgICBFeHByZXNzaW9uIHRvIGJlIHBhcnNlZFxuICAgKiBAcGFyYW0ge3tub2RlczogT2JqZWN0PHN0cmluZywgTm9kZT59fSBbb3B0aW9uc10gIEF2YWlsYWJsZSBvcHRpb25zOlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gYG5vZGVzYCBhIHNldCBvZiBjdXN0b20gbm9kZXNcbiAgICogQHJldHVybiB7Tm9kZSB8IE5vZGVbXX0gbm9kZVxuICAgKiBAdGhyb3dzIHtFcnJvcn1cbiAgICovXG4gIHZhciBwYXJzZSA9IHR5cGVkKG5hbWUsIHtcbiAgICBzdHJpbmc6IGZ1bmN0aW9uIHN0cmluZyhleHByZXNzaW9uKSB7XG4gICAgICByZXR1cm4gcGFyc2VTdGFydChleHByZXNzaW9uLCB7fSk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeChleHByZXNzaW9ucykge1xuICAgICAgcmV0dXJuIHBhcnNlTXVsdGlwbGUoZXhwcmVzc2lvbnMsIHt9KTtcbiAgICB9LFxuICAgICdzdHJpbmcsIE9iamVjdCc6IGZ1bmN0aW9uIHN0cmluZ09iamVjdChleHByZXNzaW9uLCBvcHRpb25zKSB7XG4gICAgICB2YXIgZXh0cmFOb2RlcyA9IG9wdGlvbnMubm9kZXMgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubm9kZXMgOiB7fTtcbiAgICAgIHJldHVybiBwYXJzZVN0YXJ0KGV4cHJlc3Npb24sIGV4dHJhTm9kZXMpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4LCBPYmplY3QnOiBwYXJzZU11bHRpcGxlXG4gIH0pO1xuXG4gIGZ1bmN0aW9uIHBhcnNlTXVsdGlwbGUoZXhwcmVzc2lvbnMpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgdmFyIGV4dHJhTm9kZXMgPSBvcHRpb25zLm5vZGVzICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm5vZGVzIDoge307IC8vIHBhcnNlIGFuIGFycmF5IG9yIG1hdHJpeCB3aXRoIGV4cHJlc3Npb25zXG5cbiAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKGV4cHJlc3Npb25zLCBmdW5jdGlvbiAoZWxlbSkge1xuICAgICAgaWYgKHR5cGVvZiBlbGVtICE9PSAnc3RyaW5nJykgdGhyb3cgbmV3IFR5cGVFcnJvcignU3RyaW5nIGV4cGVjdGVkJyk7XG4gICAgICByZXR1cm4gcGFyc2VTdGFydChlbGVtLCBleHRyYU5vZGVzKTtcbiAgICB9KTtcbiAgfSAvLyB0b2tlbiB0eXBlcyBlbnVtZXJhdGlvblxuXG5cbiAgdmFyIFRPS0VOVFlQRSA9IHtcbiAgICBOVUxMOiAwLFxuICAgIERFTElNSVRFUjogMSxcbiAgICBOVU1CRVI6IDIsXG4gICAgU1lNQk9MOiAzLFxuICAgIFVOS05PV046IDRcbiAgfTsgLy8gbWFwIHdpdGggYWxsIGRlbGltaXRlcnNcblxuICB2YXIgREVMSU1JVEVSUyA9IHtcbiAgICAnLCc6IHRydWUsXG4gICAgJygnOiB0cnVlLFxuICAgICcpJzogdHJ1ZSxcbiAgICAnWyc6IHRydWUsXG4gICAgJ10nOiB0cnVlLFxuICAgICd7JzogdHJ1ZSxcbiAgICAnfSc6IHRydWUsXG4gICAgJ1wiJzogdHJ1ZSxcbiAgICAnXFwnJzogdHJ1ZSxcbiAgICAnOyc6IHRydWUsXG4gICAgJysnOiB0cnVlLFxuICAgICctJzogdHJ1ZSxcbiAgICAnKic6IHRydWUsXG4gICAgJy4qJzogdHJ1ZSxcbiAgICAnLyc6IHRydWUsXG4gICAgJy4vJzogdHJ1ZSxcbiAgICAnJSc6IHRydWUsXG4gICAgJ14nOiB0cnVlLFxuICAgICcuXic6IHRydWUsXG4gICAgJ34nOiB0cnVlLFxuICAgICchJzogdHJ1ZSxcbiAgICAnJic6IHRydWUsXG4gICAgJ3wnOiB0cnVlLFxuICAgICdefCc6IHRydWUsXG4gICAgJz0nOiB0cnVlLFxuICAgICc6JzogdHJ1ZSxcbiAgICAnPyc6IHRydWUsXG4gICAgJz09JzogdHJ1ZSxcbiAgICAnIT0nOiB0cnVlLFxuICAgICc8JzogdHJ1ZSxcbiAgICAnPic6IHRydWUsXG4gICAgJzw9JzogdHJ1ZSxcbiAgICAnPj0nOiB0cnVlLFxuICAgICc8PCc6IHRydWUsXG4gICAgJz4+JzogdHJ1ZSxcbiAgICAnPj4+JzogdHJ1ZVxuICB9OyAvLyBtYXAgd2l0aCBhbGwgbmFtZWQgZGVsaW1pdGVyc1xuXG4gIHZhciBOQU1FRF9ERUxJTUlURVJTID0ge1xuICAgIG1vZDogdHJ1ZSxcbiAgICB0bzogdHJ1ZSxcbiAgICBcImluXCI6IHRydWUsXG4gICAgYW5kOiB0cnVlLFxuICAgIHhvcjogdHJ1ZSxcbiAgICBvcjogdHJ1ZSxcbiAgICBub3Q6IHRydWVcbiAgfTtcbiAgdmFyIENPTlNUQU5UUyA9IHtcbiAgICBcInRydWVcIjogdHJ1ZSxcbiAgICBcImZhbHNlXCI6IGZhbHNlLFxuICAgIFwibnVsbFwiOiBudWxsLFxuICAgIHVuZGVmaW5lZDogdW5kZWZpbmVkXG4gIH07XG4gIHZhciBOVU1FUklDX0NPTlNUQU5UUyA9IFsnTmFOJywgJ0luZmluaXR5J107XG5cbiAgZnVuY3Rpb24gaW5pdGlhbFN0YXRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICBleHRyYU5vZGVzOiB7fSxcbiAgICAgIC8vIGN1cnJlbnQgZXh0cmEgbm9kZXMsIG11c3QgYmUgY2FyZWZ1bCBub3QgdG8gbXV0YXRlXG4gICAgICBleHByZXNzaW9uOiAnJyxcbiAgICAgIC8vIGN1cnJlbnQgZXhwcmVzc2lvblxuICAgICAgY29tbWVudDogJycsXG4gICAgICAvLyBsYXN0IHBhcnNlZCBjb21tZW50XG4gICAgICBpbmRleDogMCxcbiAgICAgIC8vIGN1cnJlbnQgaW5kZXggaW4gZXhwclxuICAgICAgdG9rZW46ICcnLFxuICAgICAgLy8gY3VycmVudCB0b2tlblxuICAgICAgdG9rZW5UeXBlOiBUT0tFTlRZUEUuTlVMTCxcbiAgICAgIC8vIHR5cGUgb2YgdGhlIHRva2VuXG4gICAgICBuZXN0aW5nTGV2ZWw6IDAsXG4gICAgICAvLyBsZXZlbCBvZiBuZXN0aW5nIGluc2lkZSBwYXJhbWV0ZXJzLCB1c2VkIHRvIGlnbm9yZSBuZXdsaW5lIGNoYXJhY3RlcnNcbiAgICAgIGNvbmRpdGlvbmFsTGV2ZWw6IG51bGwgLy8gd2hlbiBhIGNvbmRpdGlvbmFsIGlzIGJlaW5nIHBhcnNlZCwgdGhlIGxldmVsIG9mIHRoZSBjb25kaXRpb25hbCBpcyBzdG9yZWQgaGVyZVxuXG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogVmlldyB1cHRvIGBsZW5ndGhgIGNoYXJhY3RlcnMgb2YgdGhlIGV4cHJlc3Npb24gc3RhcnRpbmcgYXQgdGhlIGN1cnJlbnQgY2hhcmFjdGVyLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9MV0gTnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gdmlld1xuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGN1cnJlbnRTdHJpbmcoc3RhdGUsIGxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZS5leHByZXNzaW9uLnN1YnN0cihzdGF0ZS5pbmRleCwgbGVuZ3RoKTtcbiAgfVxuICAvKipcbiAgICogVmlldyB0aGUgY3VycmVudCBjaGFyYWN0ZXIuIFJldHVybnMgJycgaWYgZW5kIG9mIGV4cHJlc3Npb24gaXMgcmVhY2hlZC5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gY3VycmVudENoYXJhY3RlcihzdGF0ZSkge1xuICAgIHJldHVybiBjdXJyZW50U3RyaW5nKHN0YXRlLCAxKTtcbiAgfVxuICAvKipcbiAgICogR2V0IHRoZSBuZXh0IGNoYXJhY3RlciBmcm9tIHRoZSBleHByZXNzaW9uLlxuICAgKiBUaGUgY2hhcmFjdGVyIGlzIHN0b3JlZCBpbnRvIHRoZSBjaGFyIGMuIElmIHRoZSBlbmQgb2YgdGhlIGV4cHJlc3Npb24gaXNcbiAgICogcmVhY2hlZCwgdGhlIGZ1bmN0aW9uIHB1dHMgYW4gZW1wdHkgc3RyaW5nIGluIGMuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gbmV4dChzdGF0ZSkge1xuICAgIHN0YXRlLmluZGV4Kys7XG4gIH1cbiAgLyoqXG4gICAqIFByZXZpZXcgdGhlIHByZXZpb3VzIGNoYXJhY3RlciBmcm9tIHRoZSBleHByZXNzaW9uLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IGNOZXh0XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcHJldkNoYXJhY3RlcihzdGF0ZSkge1xuICAgIHJldHVybiBzdGF0ZS5leHByZXNzaW9uLmNoYXJBdChzdGF0ZS5pbmRleCAtIDEpO1xuICB9XG4gIC8qKlxuICAgKiBQcmV2aWV3IHRoZSBuZXh0IGNoYXJhY3RlciBmcm9tIHRoZSBleHByZXNzaW9uLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IGNOZXh0XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gbmV4dENoYXJhY3RlcihzdGF0ZSkge1xuICAgIHJldHVybiBzdGF0ZS5leHByZXNzaW9uLmNoYXJBdChzdGF0ZS5pbmRleCArIDEpO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgbmV4dCB0b2tlbiBpbiB0aGUgY3VycmVudCBzdHJpbmcgZXhwci5cbiAgICogVGhlIHRva2VuIGFuZCB0b2tlbiB0eXBlIGFyZSBhdmFpbGFibGUgYXMgdG9rZW4gYW5kIHRva2VuVHlwZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGdldFRva2VuKHN0YXRlKSB7XG4gICAgc3RhdGUudG9rZW5UeXBlID0gVE9LRU5UWVBFLk5VTEw7XG4gICAgc3RhdGUudG9rZW4gPSAnJztcbiAgICBzdGF0ZS5jb21tZW50ID0gJyc7IC8vIHNraXAgb3ZlciB3aGl0ZXNwYWNlc1xuICAgIC8vIHNwYWNlLCB0YWIsIGFuZCBuZXdsaW5lIHdoZW4gaW5zaWRlIHBhcmFtZXRlcnNcblxuICAgIHdoaWxlIChwYXJzZS5pc1doaXRlc3BhY2UoY3VycmVudENoYXJhY3RlcihzdGF0ZSksIHN0YXRlLm5lc3RpbmdMZXZlbCkpIHtcbiAgICAgIG5leHQoc3RhdGUpO1xuICAgIH0gLy8gc2tpcCBjb21tZW50XG5cblxuICAgIGlmIChjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSA9PT0gJyMnKSB7XG4gICAgICB3aGlsZSAoY3VycmVudENoYXJhY3RlcihzdGF0ZSkgIT09ICdcXG4nICYmIGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpICE9PSAnJykge1xuICAgICAgICBzdGF0ZS5jb21tZW50ICs9IGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpO1xuICAgICAgICBuZXh0KHN0YXRlKTtcbiAgICAgIH1cbiAgICB9IC8vIGNoZWNrIGZvciBlbmQgb2YgZXhwcmVzc2lvblxuXG5cbiAgICBpZiAoY3VycmVudENoYXJhY3RlcihzdGF0ZSkgPT09ICcnKSB7XG4gICAgICAvLyB0b2tlbiBpcyBzdGlsbCBlbXB0eVxuICAgICAgc3RhdGUudG9rZW5UeXBlID0gVE9LRU5UWVBFLkRFTElNSVRFUjtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIGNoZWNrIGZvciBuZXcgbGluZSBjaGFyYWN0ZXJcblxuXG4gICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpID09PSAnXFxuJyAmJiAhc3RhdGUubmVzdGluZ0xldmVsKSB7XG4gICAgICBzdGF0ZS50b2tlblR5cGUgPSBUT0tFTlRZUEUuREVMSU1JVEVSO1xuICAgICAgc3RhdGUudG9rZW4gPSBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKTtcbiAgICAgIG5leHQoc3RhdGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjMSA9IGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpO1xuICAgIHZhciBjMiA9IGN1cnJlbnRTdHJpbmcoc3RhdGUsIDIpO1xuICAgIHZhciBjMyA9IGN1cnJlbnRTdHJpbmcoc3RhdGUsIDMpO1xuXG4gICAgaWYgKGMzLmxlbmd0aCA9PT0gMyAmJiBERUxJTUlURVJTW2MzXSkge1xuICAgICAgc3RhdGUudG9rZW5UeXBlID0gVE9LRU5UWVBFLkRFTElNSVRFUjtcbiAgICAgIHN0YXRlLnRva2VuID0gYzM7XG4gICAgICBuZXh0KHN0YXRlKTtcbiAgICAgIG5leHQoc3RhdGUpO1xuICAgICAgbmV4dChzdGF0ZSk7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBjaGVjayBmb3IgZGVsaW1pdGVycyBjb25zaXN0aW5nIG9mIDIgY2hhcmFjdGVyc1xuXG5cbiAgICBpZiAoYzIubGVuZ3RoID09PSAyICYmIERFTElNSVRFUlNbYzJdKSB7XG4gICAgICBzdGF0ZS50b2tlblR5cGUgPSBUT0tFTlRZUEUuREVMSU1JVEVSO1xuICAgICAgc3RhdGUudG9rZW4gPSBjMjtcbiAgICAgIG5leHQoc3RhdGUpO1xuICAgICAgbmV4dChzdGF0ZSk7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBjaGVjayBmb3IgZGVsaW1pdGVycyBjb25zaXN0aW5nIG9mIDEgY2hhcmFjdGVyXG5cblxuICAgIGlmIChERUxJTUlURVJTW2MxXSkge1xuICAgICAgc3RhdGUudG9rZW5UeXBlID0gVE9LRU5UWVBFLkRFTElNSVRFUjtcbiAgICAgIHN0YXRlLnRva2VuID0gYzE7XG4gICAgICBuZXh0KHN0YXRlKTtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIGNoZWNrIGZvciBhIG51bWJlclxuXG5cbiAgICBpZiAocGFyc2UuaXNEaWdpdERvdChjMSkpIHtcbiAgICAgIHN0YXRlLnRva2VuVHlwZSA9IFRPS0VOVFlQRS5OVU1CRVI7IC8vIGdldCBudW1iZXIsIGNhbiBoYXZlIGEgc2luZ2xlIGRvdFxuXG4gICAgICBpZiAoY3VycmVudENoYXJhY3RlcihzdGF0ZSkgPT09ICcuJykge1xuICAgICAgICBzdGF0ZS50b2tlbiArPSBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKTtcbiAgICAgICAgbmV4dChzdGF0ZSk7XG5cbiAgICAgICAgaWYgKCFwYXJzZS5pc0RpZ2l0KGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpKSkge1xuICAgICAgICAgIC8vIHRoaXMgaXMgbm8gbnVtYmVyLCBpdCBpcyBqdXN0IGEgZG90IChjYW4gYmUgZG90IG5vdGF0aW9uKVxuICAgICAgICAgIHN0YXRlLnRva2VuVHlwZSA9IFRPS0VOVFlQRS5ERUxJTUlURVI7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdoaWxlIChwYXJzZS5pc0RpZ2l0KGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpKSkge1xuICAgICAgICAgIHN0YXRlLnRva2VuICs9IGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpO1xuICAgICAgICAgIG5leHQoc3RhdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcnNlLmlzRGVjaW1hbE1hcmsoY3VycmVudENoYXJhY3RlcihzdGF0ZSksIG5leHRDaGFyYWN0ZXIoc3RhdGUpKSkge1xuICAgICAgICAgIHN0YXRlLnRva2VuICs9IGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpO1xuICAgICAgICAgIG5leHQoc3RhdGUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHdoaWxlIChwYXJzZS5pc0RpZ2l0KGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpKSkge1xuICAgICAgICBzdGF0ZS50b2tlbiArPSBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKTtcbiAgICAgICAgbmV4dChzdGF0ZSk7XG4gICAgICB9IC8vIGNoZWNrIGZvciBleHBvbmVudGlhbCBub3RhdGlvbiBsaWtlIFwiMi4zZS00XCIsIFwiMS4yM2U1MFwiIG9yIFwiMmUrNFwiXG5cblxuICAgICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpID09PSAnRScgfHwgY3VycmVudENoYXJhY3RlcihzdGF0ZSkgPT09ICdlJykge1xuICAgICAgICBpZiAocGFyc2UuaXNEaWdpdChuZXh0Q2hhcmFjdGVyKHN0YXRlKSkgfHwgbmV4dENoYXJhY3RlcihzdGF0ZSkgPT09ICctJyB8fCBuZXh0Q2hhcmFjdGVyKHN0YXRlKSA9PT0gJysnKSB7XG4gICAgICAgICAgc3RhdGUudG9rZW4gKz0gY3VycmVudENoYXJhY3RlcihzdGF0ZSk7XG4gICAgICAgICAgbmV4dChzdGF0ZSk7XG5cbiAgICAgICAgICBpZiAoY3VycmVudENoYXJhY3RlcihzdGF0ZSkgPT09ICcrJyB8fCBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSA9PT0gJy0nKSB7XG4gICAgICAgICAgICBzdGF0ZS50b2tlbiArPSBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKTtcbiAgICAgICAgICAgIG5leHQoc3RhdGUpO1xuICAgICAgICAgIH0gLy8gU2NpZW50aWZpYyBub3RhdGlvbiBNVVNUIGJlIGZvbGxvd2VkIGJ5IGFuIGV4cG9uZW50XG5cblxuICAgICAgICAgIGlmICghcGFyc2UuaXNEaWdpdChjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSkpIHtcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnRGlnaXQgZXhwZWN0ZWQsIGdvdCBcIicgKyBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSArICdcIicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHdoaWxlIChwYXJzZS5pc0RpZ2l0KGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpKSkge1xuICAgICAgICAgICAgc3RhdGUudG9rZW4gKz0gY3VycmVudENoYXJhY3RlcihzdGF0ZSk7XG4gICAgICAgICAgICBuZXh0KHN0YXRlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocGFyc2UuaXNEZWNpbWFsTWFyayhjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSwgbmV4dENoYXJhY3RlcihzdGF0ZSkpKSB7XG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ0RpZ2l0IGV4cGVjdGVkLCBnb3QgXCInICsgY3VycmVudENoYXJhY3RlcihzdGF0ZSkgKyAnXCInKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAobmV4dENoYXJhY3RlcihzdGF0ZSkgPT09ICcuJykge1xuICAgICAgICAgIG5leHQoc3RhdGUpO1xuICAgICAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnRGlnaXQgZXhwZWN0ZWQsIGdvdCBcIicgKyBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSArICdcIicpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9IC8vIGNoZWNrIGZvciB2YXJpYWJsZXMsIGZ1bmN0aW9ucywgbmFtZWQgb3BlcmF0b3JzXG5cblxuICAgIGlmIChwYXJzZS5pc0FscGhhKGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpLCBwcmV2Q2hhcmFjdGVyKHN0YXRlKSwgbmV4dENoYXJhY3RlcihzdGF0ZSkpKSB7XG4gICAgICB3aGlsZSAocGFyc2UuaXNBbHBoYShjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSwgcHJldkNoYXJhY3RlcihzdGF0ZSksIG5leHRDaGFyYWN0ZXIoc3RhdGUpKSB8fCBwYXJzZS5pc0RpZ2l0KGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpKSkge1xuICAgICAgICBzdGF0ZS50b2tlbiArPSBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKTtcbiAgICAgICAgbmV4dChzdGF0ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoTkFNRURfREVMSU1JVEVSUywgc3RhdGUudG9rZW4pKSB7XG4gICAgICAgIHN0YXRlLnRva2VuVHlwZSA9IFRPS0VOVFlQRS5ERUxJTUlURVI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS50b2tlblR5cGUgPSBUT0tFTlRZUEUuU1lNQk9MO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfSAvLyBzb21ldGhpbmcgdW5rbm93biBpcyBmb3VuZCwgd3JvbmcgY2hhcmFjdGVycyAtPiBhIHN5bnRheCBlcnJvclxuXG5cbiAgICBzdGF0ZS50b2tlblR5cGUgPSBUT0tFTlRZUEUuVU5LTk9XTjtcblxuICAgIHdoaWxlIChjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSAhPT0gJycpIHtcbiAgICAgIHN0YXRlLnRva2VuICs9IGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpO1xuICAgICAgbmV4dChzdGF0ZSk7XG4gICAgfVxuXG4gICAgdGhyb3cgY3JlYXRlU3ludGF4RXJyb3Ioc3RhdGUsICdTeW50YXggZXJyb3IgaW4gcGFydCBcIicgKyBzdGF0ZS50b2tlbiArICdcIicpO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgbmV4dCB0b2tlbiBhbmQgc2tpcCBuZXdsaW5lIHRva2Vuc1xuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpIHtcbiAgICBkbyB7XG4gICAgICBnZXRUb2tlbihzdGF0ZSk7XG4gICAgfSB3aGlsZSAoc3RhdGUudG9rZW4gPT09ICdcXG4nKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uXG5cbiAgfVxuICAvKipcbiAgICogT3BlbiBwYXJhbWV0ZXJzLlxuICAgKiBOZXcgbGluZSBjaGFyYWN0ZXJzIHdpbGwgYmUgaWdub3JlZCB1bnRpbCBjbG9zZVBhcmFtcyhzdGF0ZSkgaXMgY2FsbGVkXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gb3BlblBhcmFtcyhzdGF0ZSkge1xuICAgIHN0YXRlLm5lc3RpbmdMZXZlbCsrO1xuICB9XG4gIC8qKlxuICAgKiBDbG9zZSBwYXJhbWV0ZXJzLlxuICAgKiBOZXcgbGluZSBjaGFyYWN0ZXJzIHdpbGwgbm8gbG9uZ2VyIGJlIGlnbm9yZWRcbiAgICovXG5cblxuICBmdW5jdGlvbiBjbG9zZVBhcmFtcyhzdGF0ZSkge1xuICAgIHN0YXRlLm5lc3RpbmdMZXZlbC0tO1xuICB9XG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgY3VycmVudCBjaGFyYWN0ZXIgYGNgIGlzIGEgdmFsaWQgYWxwaGEgY2hhcmFjdGVyOlxuICAgKlxuICAgKiAtIEEgbGF0aW4gbGV0dGVyICh1cHBlciBvciBsb3dlciBjYXNlKSBBc2NpaTogYS16LCBBLVpcbiAgICogLSBBbiB1bmRlcnNjb3JlICAgICAgICAgICAgICAgICAgICAgICAgQXNjaWk6IF9cbiAgICogLSBBIGRvbGxhciBzaWduICAgICAgICAgICAgICAgICAgICAgICAgQXNjaWk6ICRcbiAgICogLSBBIGxhdGluIGxldHRlciB3aXRoIGFjY2VudHMgICAgICAgICAgVW5pY29kZTogXFx1MDBDMCAtIFxcdTAyQUZcbiAgICogLSBBIGdyZWVrIGxldHRlciAgICAgICAgICAgICAgICAgICAgICAgVW5pY29kZTogXFx1MDM3MCAtIFxcdTAzRkZcbiAgICogLSBBIG1hdGhlbWF0aWNhbCBhbHBoYW51bWVyaWMgc3ltYm9sICAgVW5pY29kZTogXFx1ezFENDAwfSAtIFxcdXsxRDdGRn0gZXhjbHVkaW5nIGludmFsaWQgY29kZSBwb2ludHNcbiAgICpcbiAgICogVGhlIHByZXZpb3VzIGFuZCBuZXh0IGNoYXJhY3RlcnMgYXJlIG5lZWRlZCB0byBkZXRlcm1pbmUgd2hldGhlclxuICAgKiB0aGlzIGNoYXJhY3RlciBpcyBwYXJ0IG9mIGEgdW5pY29kZSBzdXJyb2dhdGUgcGFpci5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGMgICAgICBDdXJyZW50IGNoYXJhY3RlciBpbiB0aGUgZXhwcmVzc2lvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gY1ByZXYgIFByZXZpb3VzIGNoYXJhY3RlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gY05leHQgIE5leHQgY2hhcmFjdGVyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgcGFyc2UuaXNBbHBoYSA9IGZ1bmN0aW9uIGlzQWxwaGEoYywgY1ByZXYsIGNOZXh0KSB7XG4gICAgcmV0dXJuIHBhcnNlLmlzVmFsaWRMYXRpbk9yR3JlZWsoYykgfHwgcGFyc2UuaXNWYWxpZE1hdGhTeW1ib2woYywgY05leHQpIHx8IHBhcnNlLmlzVmFsaWRNYXRoU3ltYm9sKGNQcmV2LCBjKTtcbiAgfTtcbiAgLyoqXG4gICAqIFRlc3Qgd2hldGhlciBhIGNoYXJhY3RlciBpcyBhIHZhbGlkIGxhdGluLCBncmVlaywgb3IgbGV0dGVyLWxpa2UgY2hhcmFjdGVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgcGFyc2UuaXNWYWxpZExhdGluT3JHcmVlayA9IGZ1bmN0aW9uIGlzVmFsaWRMYXRpbk9yR3JlZWsoYykge1xuICAgIHJldHVybiAvXlthLXpBLVpfJFxcdTAwQzAtXFx1MDJBRlxcdTAzNzAtXFx1MDNGRlxcdTIxMDAtXFx1MjE0Rl0kLy50ZXN0KGMpO1xuICB9O1xuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIHR3byBnaXZlbiAxNiBiaXQgY2hhcmFjdGVycyBmb3JtIGEgc3Vycm9nYXRlIHBhaXIgb2YgYVxuICAgKiB1bmljb2RlIG1hdGggc3ltYm9sLlxuICAgKlxuICAgKiBodHRwczovL3VuaWNvZGUtdGFibGUuY29tL2VuL1xuICAgKiBodHRwczovL3d3dy53aWtpd2FuZC5jb20vZW4vTWF0aGVtYXRpY2FsX29wZXJhdG9yc19hbmRfc3ltYm9sc19pbl9Vbmljb2RlXG4gICAqXG4gICAqIE5vdGU6IEluIEVTNiB3aWxsIGJlIHVuaWNvZGUgYXdhcmU6XG4gICAqIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzI4MDcxMi9qYXZhc2NyaXB0LXVuaWNvZGUtcmVnZXhlc1xuICAgKiBodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvZXM2LXVuaWNvZGUtcmVnZXhcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGhpZ2hcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxvd1xuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cblxuXG4gIHBhcnNlLmlzVmFsaWRNYXRoU3ltYm9sID0gZnVuY3Rpb24gaXNWYWxpZE1hdGhTeW1ib2woaGlnaCwgbG93KSB7XG4gICAgcmV0dXJuIC9eW1xcdUQ4MzVdJC8udGVzdChoaWdoKSAmJiAvXltcXHVEQzAwLVxcdURGRkZdJC8udGVzdChsb3cpICYmIC9eW15cXHVEQzU1XFx1REM5RFxcdURDQTBcXHVEQ0ExXFx1RENBM1xcdURDQTRcXHVEQ0E3XFx1RENBOFxcdURDQURcXHVEQ0JBXFx1RENCQ1xcdURDQzRcXHVERDA2XFx1REQwQlxcdUREMENcXHVERDE1XFx1REQxRFxcdUREM0FcXHVERDNGXFx1REQ0NVxcdURENDctXFx1REQ0OVxcdURENTFcXHVERUE2XFx1REVBN1xcdURGQ0NcXHVERkNEXSQvLnRlc3QobG93KTtcbiAgfTtcbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgZ2l2ZW4gY2hhcmFjdGVyIGMgaXMgYSB3aGl0ZSBzcGFjZSBjaGFyYWN0ZXI6IHNwYWNlLCB0YWIsIG9yIGVudGVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBuZXN0aW5nTGV2ZWxcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG5cblxuICBwYXJzZS5pc1doaXRlc3BhY2UgPSBmdW5jdGlvbiBpc1doaXRlc3BhY2UoYywgbmVzdGluZ0xldmVsKSB7XG4gICAgLy8gVE9ETzogYWxzbyB0YWtlICdcXHInIGNhcnJpYWdlIHJldHVybiBhcyBuZXdsaW5lPyBPciBkb2VzIHRoYXQgZ2l2ZSBwcm9ibGVtcyBvbiBtYWM/XG4gICAgcmV0dXJuIGMgPT09ICcgJyB8fCBjID09PSAnXFx0JyB8fCBjID09PSAnXFxuJyAmJiBuZXN0aW5nTGV2ZWwgPiAwO1xuICB9O1xuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIHRoZSBjaGFyYWN0ZXIgYyBpcyBhIGRlY2ltYWwgbWFyayAoZG90KS5cbiAgICogVGhpcyBpcyB0aGUgY2FzZSB3aGVuIGl0J3Mgbm90IHRoZSBzdGFydCBvZiBhIGRlbGltaXRlciAnLionLCAnLi8nLCBvciAnLl4nXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjTmV4dFxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cblxuXG4gIHBhcnNlLmlzRGVjaW1hbE1hcmsgPSBmdW5jdGlvbiBpc0RlY2ltYWxNYXJrKGMsIGNOZXh0KSB7XG4gICAgcmV0dXJuIGMgPT09ICcuJyAmJiBjTmV4dCAhPT0gJy8nICYmIGNOZXh0ICE9PSAnKicgJiYgY05leHQgIT09ICdeJztcbiAgfTtcbiAgLyoqXG4gICAqIGNoZWNrcyBpZiB0aGUgZ2l2ZW4gY2hhciBjIGlzIGEgZGlnaXQgb3IgZG90XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjICAgYSBzdHJpbmcgd2l0aCBvbmUgY2hhcmFjdGVyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgcGFyc2UuaXNEaWdpdERvdCA9IGZ1bmN0aW9uIGlzRGlnaXREb3QoYykge1xuICAgIHJldHVybiBjID49ICcwJyAmJiBjIDw9ICc5JyB8fCBjID09PSAnLic7XG4gIH07XG4gIC8qKlxuICAgKiBjaGVja3MgaWYgdGhlIGdpdmVuIGNoYXIgYyBpcyBhIGRpZ2l0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjICAgYSBzdHJpbmcgd2l0aCBvbmUgY2hhcmFjdGVyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgcGFyc2UuaXNEaWdpdCA9IGZ1bmN0aW9uIGlzRGlnaXQoYykge1xuICAgIHJldHVybiBjID49ICcwJyAmJiBjIDw9ICc5JztcbiAgfTtcbiAgLyoqXG4gICAqIFN0YXJ0IG9mIHRoZSBwYXJzZSBsZXZlbHMgYmVsb3csIGluIG9yZGVyIG9mIHByZWNlZGVuY2VcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlU3RhcnQoZXhwcmVzc2lvbiwgZXh0cmFOb2Rlcykge1xuICAgIHZhciBzdGF0ZSA9IGluaXRpYWxTdGF0ZSgpO1xuXG4gICAgX2V4dGVuZHMoc3RhdGUsIHtcbiAgICAgIGV4cHJlc3Npb246IGV4cHJlc3Npb24sXG4gICAgICBleHRyYU5vZGVzOiBleHRyYU5vZGVzXG4gICAgfSk7XG5cbiAgICBnZXRUb2tlbihzdGF0ZSk7XG4gICAgdmFyIG5vZGUgPSBwYXJzZUJsb2NrKHN0YXRlKTsgLy8gY2hlY2sgZm9yIGdhcmJhZ2UgYXQgdGhlIGVuZCBvZiB0aGUgZXhwcmVzc2lvblxuICAgIC8vIGFuIGV4cHJlc3Npb24gZW5kcyB3aXRoIGEgZW1wdHkgY2hhcmFjdGVyICcnIGFuZCB0b2tlblR5cGUgREVMSU1JVEVSXG5cbiAgICBpZiAoc3RhdGUudG9rZW4gIT09ICcnKSB7XG4gICAgICBpZiAoc3RhdGUudG9rZW5UeXBlID09PSBUT0tFTlRZUEUuREVMSU1JVEVSKSB7XG4gICAgICAgIC8vIHVzZXIgZW50ZXJlZCBhIG5vdCBleGlzdGluZyBvcGVyYXRvciBsaWtlIFwiLy9cIlxuICAgICAgICAvLyBUT0RPOiBnaXZlIGhpbnRzIGZvciBhbGlhc2VzLCBmb3IgZXhhbXBsZSB3aXRoIFwiPD5cIiBnaXZlIGFzIGhpbnQgXCIgZGlkIHlvdSBtZWFuICE9PSA/XCJcbiAgICAgICAgdGhyb3cgY3JlYXRlRXJyb3Ioc3RhdGUsICdVbmV4cGVjdGVkIG9wZXJhdG9yICcgKyBzdGF0ZS50b2tlbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ1VuZXhwZWN0ZWQgcGFydCBcIicgKyBzdGF0ZS50b2tlbiArICdcIicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZSBhIGJsb2NrIHdpdGggZXhwcmVzc2lvbnMuIEV4cHJlc3Npb25zIGNhbiBiZSBzZXBhcmF0ZWQgYnkgYSBuZXdsaW5lXG4gICAqIGNoYXJhY3RlciAnXFxuJywgb3IgYnkgYSBzZW1pY29sb24gJzsnLiBJbiBjYXNlIG9mIGEgc2VtaWNvbG9uLCBubyBvdXRwdXRcbiAgICogb2YgdGhlIHByZWNlZGluZyBsaW5lIGlzIHJldHVybmVkLlxuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VCbG9jayhzdGF0ZSkge1xuICAgIHZhciBub2RlO1xuICAgIHZhciBibG9ja3MgPSBbXTtcbiAgICB2YXIgdmlzaWJsZTtcblxuICAgIGlmIChzdGF0ZS50b2tlbiAhPT0gJycgJiYgc3RhdGUudG9rZW4gIT09ICdcXG4nICYmIHN0YXRlLnRva2VuICE9PSAnOycpIHtcbiAgICAgIG5vZGUgPSBwYXJzZUFzc2lnbm1lbnQoc3RhdGUpO1xuICAgICAgbm9kZS5jb21tZW50ID0gc3RhdGUuY29tbWVudDtcbiAgICB9IC8vIFRPRE86IHNpbXBsaWZ5IHRoaXMgbG9vcFxuXG5cbiAgICB3aGlsZSAoc3RhdGUudG9rZW4gPT09ICdcXG4nIHx8IHN0YXRlLnRva2VuID09PSAnOycpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvblxuICAgICAgaWYgKGJsb2Nrcy5sZW5ndGggPT09IDAgJiYgbm9kZSkge1xuICAgICAgICB2aXNpYmxlID0gc3RhdGUudG9rZW4gIT09ICc7JztcbiAgICAgICAgYmxvY2tzLnB1c2goe1xuICAgICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgICAgdmlzaWJsZTogdmlzaWJsZVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuXG4gICAgICBpZiAoc3RhdGUudG9rZW4gIT09ICdcXG4nICYmIHN0YXRlLnRva2VuICE9PSAnOycgJiYgc3RhdGUudG9rZW4gIT09ICcnKSB7XG4gICAgICAgIG5vZGUgPSBwYXJzZUFzc2lnbm1lbnQoc3RhdGUpO1xuICAgICAgICBub2RlLmNvbW1lbnQgPSBzdGF0ZS5jb21tZW50O1xuICAgICAgICB2aXNpYmxlID0gc3RhdGUudG9rZW4gIT09ICc7JztcbiAgICAgICAgYmxvY2tzLnB1c2goe1xuICAgICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgICAgdmlzaWJsZTogdmlzaWJsZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYmxvY2tzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBuZXcgQmxvY2tOb2RlKGJsb2Nrcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghbm9kZSkge1xuICAgICAgICBub2RlID0gbmV3IENvbnN0YW50Tm9kZSh1bmRlZmluZWQpO1xuICAgICAgICBub2RlLmNvbW1lbnQgPSBzdGF0ZS5jb21tZW50O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEFzc2lnbm1lbnQgb2YgYSBmdW5jdGlvbiBvciB2YXJpYWJsZSxcbiAgICogLSBjYW4gYmUgYSB2YXJpYWJsZSBsaWtlICdhPTIuMydcbiAgICogLSBvciBhIHVwZGF0aW5nIGFuIGV4aXN0aW5nIHZhcmlhYmxlIGxpa2UgJ21hdHJpeCgyLDM6NSk9WzYsNyw4XSdcbiAgICogLSBkZWZpbmluZyBhIGZ1bmN0aW9uIGxpa2UgJ2YoeCkgPSB4XjInXG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZUFzc2lnbm1lbnQoc3RhdGUpIHtcbiAgICB2YXIgbmFtZSwgYXJncywgdmFsdWUsIHZhbGlkO1xuICAgIHZhciBub2RlID0gcGFyc2VDb25kaXRpb25hbChzdGF0ZSk7XG5cbiAgICBpZiAoc3RhdGUudG9rZW4gPT09ICc9Jykge1xuICAgICAgaWYgKCgwLCBfaXMuaXNTeW1ib2xOb2RlKShub2RlKSkge1xuICAgICAgICAvLyBwYXJzZSBhIHZhcmlhYmxlIGFzc2lnbm1lbnQgbGlrZSAnYSA9IDIvMydcbiAgICAgICAgbmFtZSA9IG5vZGUubmFtZTtcbiAgICAgICAgZ2V0VG9rZW5Ta2lwTmV3bGluZShzdGF0ZSk7XG4gICAgICAgIHZhbHVlID0gcGFyc2VBc3NpZ25tZW50KHN0YXRlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBBc3NpZ25tZW50Tm9kZShuZXcgU3ltYm9sTm9kZShuYW1lKSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQWNjZXNzb3JOb2RlKShub2RlKSkge1xuICAgICAgICAvLyBwYXJzZSBhIG1hdHJpeCBzdWJzZXQgYXNzaWdubWVudCBsaWtlICdBWzEsMl0gPSA0J1xuICAgICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTtcbiAgICAgICAgdmFsdWUgPSBwYXJzZUFzc2lnbm1lbnQoc3RhdGUpO1xuICAgICAgICByZXR1cm4gbmV3IEFzc2lnbm1lbnROb2RlKG5vZGUub2JqZWN0LCBub2RlLmluZGV4LCB2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNGdW5jdGlvbk5vZGUpKG5vZGUpICYmICgwLCBfaXMuaXNTeW1ib2xOb2RlKShub2RlLmZuKSkge1xuICAgICAgICAvLyBwYXJzZSBmdW5jdGlvbiBhc3NpZ25tZW50IGxpa2UgJ2YoeCkgPSB4XjInXG4gICAgICAgIHZhbGlkID0gdHJ1ZTtcbiAgICAgICAgYXJncyA9IFtdO1xuICAgICAgICBuYW1lID0gbm9kZS5uYW1lO1xuICAgICAgICBub2RlLmFyZ3MuZm9yRWFjaChmdW5jdGlvbiAoYXJnLCBpbmRleCkge1xuICAgICAgICAgIGlmICgoMCwgX2lzLmlzU3ltYm9sTm9kZSkoYXJnKSkge1xuICAgICAgICAgICAgYXJnc1tpbmRleF0gPSBhcmcubmFtZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh2YWxpZCkge1xuICAgICAgICAgIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpO1xuICAgICAgICAgIHZhbHVlID0gcGFyc2VBc3NpZ25tZW50KHN0YXRlKTtcbiAgICAgICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uQXNzaWdubWVudE5vZGUobmFtZSwgYXJncywgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnSW52YWxpZCBsZWZ0IGhhbmQgc2lkZSBvZiBhc3NpZ25tZW50IG9wZXJhdG9yID0nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICAvKipcbiAgICogY29uZGl0aW9uYWwgb3BlcmF0aW9uXG4gICAqXG4gICAqICAgICBjb25kaXRpb24gPyB0cnVlUGFydCA6IGZhbHNlUGFydFxuICAgKlxuICAgKiBOb3RlOiBjb25kaXRpb25hbCBvcGVyYXRvciBpcyByaWdodC1hc3NvY2lhdGl2ZVxuICAgKlxuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VDb25kaXRpb25hbChzdGF0ZSkge1xuICAgIHZhciBub2RlID0gcGFyc2VMb2dpY2FsT3Ioc3RhdGUpO1xuXG4gICAgd2hpbGUgKHN0YXRlLnRva2VuID09PSAnPycpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvblxuICAgICAgLy8gc2V0IGEgY29uZGl0aW9uYWwgbGV2ZWwsIHRoZSByYW5nZSBvcGVyYXRvciB3aWxsIGJlIGlnbm9yZWQgYXMgbG9uZ1xuICAgICAgLy8gYXMgY29uZGl0aW9uYWxMZXZlbCA9PT0gc3RhdGUubmVzdGluZ0xldmVsLlxuICAgICAgdmFyIHByZXYgPSBzdGF0ZS5jb25kaXRpb25hbExldmVsO1xuICAgICAgc3RhdGUuY29uZGl0aW9uYWxMZXZlbCA9IHN0YXRlLm5lc3RpbmdMZXZlbDtcbiAgICAgIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpO1xuICAgICAgdmFyIGNvbmRpdGlvbiA9IG5vZGU7XG4gICAgICB2YXIgdHJ1ZUV4cHIgPSBwYXJzZUFzc2lnbm1lbnQoc3RhdGUpO1xuICAgICAgaWYgKHN0YXRlLnRva2VuICE9PSAnOicpIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnRmFsc2UgcGFydCBvZiBjb25kaXRpb25hbCBleHByZXNzaW9uIGV4cGVjdGVkJyk7XG4gICAgICBzdGF0ZS5jb25kaXRpb25hbExldmVsID0gbnVsbDtcbiAgICAgIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpO1xuICAgICAgdmFyIGZhbHNlRXhwciA9IHBhcnNlQXNzaWdubWVudChzdGF0ZSk7IC8vIE5vdGU6IGNoZWNrIGZvciBjb25kaXRpb25hbCBvcGVyYXRvciBhZ2FpbiwgcmlnaHQgYXNzb2NpYXRpdml0eVxuXG4gICAgICBub2RlID0gbmV3IENvbmRpdGlvbmFsTm9kZShjb25kaXRpb24sIHRydWVFeHByLCBmYWxzZUV4cHIpOyAvLyByZXN0b3JlIHRoZSBwcmV2aW91cyBjb25kaXRpb25hbCBsZXZlbFxuXG4gICAgICBzdGF0ZS5jb25kaXRpb25hbExldmVsID0gcHJldjtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICAvKipcbiAgICogbG9naWNhbCBvciwgJ3ggb3IgeSdcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlTG9naWNhbE9yKHN0YXRlKSB7XG4gICAgdmFyIG5vZGUgPSBwYXJzZUxvZ2ljYWxYb3Ioc3RhdGUpO1xuXG4gICAgd2hpbGUgKHN0YXRlLnRva2VuID09PSAnb3InKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVubW9kaWZpZWQtbG9vcC1jb25kaXRpb25cbiAgICAgIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpO1xuICAgICAgbm9kZSA9IG5ldyBPcGVyYXRvck5vZGUoJ29yJywgJ29yJywgW25vZGUsIHBhcnNlTG9naWNhbFhvcihzdGF0ZSldKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICAvKipcbiAgICogbG9naWNhbCBleGNsdXNpdmUgb3IsICd4IHhvciB5J1xuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VMb2dpY2FsWG9yKHN0YXRlKSB7XG4gICAgdmFyIG5vZGUgPSBwYXJzZUxvZ2ljYWxBbmQoc3RhdGUpO1xuXG4gICAgd2hpbGUgKHN0YXRlLnRva2VuID09PSAneG9yJykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uXG4gICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTtcbiAgICAgIG5vZGUgPSBuZXcgT3BlcmF0b3JOb2RlKCd4b3InLCAneG9yJywgW25vZGUsIHBhcnNlTG9naWNhbEFuZChzdGF0ZSldKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICAvKipcbiAgICogbG9naWNhbCBhbmQsICd4IGFuZCB5J1xuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VMb2dpY2FsQW5kKHN0YXRlKSB7XG4gICAgdmFyIG5vZGUgPSBwYXJzZUJpdHdpc2VPcihzdGF0ZSk7XG5cbiAgICB3aGlsZSAoc3RhdGUudG9rZW4gPT09ICdhbmQnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVubW9kaWZpZWQtbG9vcC1jb25kaXRpb25cbiAgICAgIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpO1xuICAgICAgbm9kZSA9IG5ldyBPcGVyYXRvck5vZGUoJ2FuZCcsICdhbmQnLCBbbm9kZSwgcGFyc2VCaXR3aXNlT3Ioc3RhdGUpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgLyoqXG4gICAqIGJpdHdpc2Ugb3IsICd4IHwgeSdcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlQml0d2lzZU9yKHN0YXRlKSB7XG4gICAgdmFyIG5vZGUgPSBwYXJzZUJpdHdpc2VYb3Ioc3RhdGUpO1xuXG4gICAgd2hpbGUgKHN0YXRlLnRva2VuID09PSAnfCcpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvblxuICAgICAgZ2V0VG9rZW5Ta2lwTmV3bGluZShzdGF0ZSk7XG4gICAgICBub2RlID0gbmV3IE9wZXJhdG9yTm9kZSgnfCcsICdiaXRPcicsIFtub2RlLCBwYXJzZUJpdHdpc2VYb3Ioc3RhdGUpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgLyoqXG4gICAqIGJpdHdpc2UgZXhjbHVzaXZlIG9yICh4b3IpLCAneCBefCB5J1xuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VCaXR3aXNlWG9yKHN0YXRlKSB7XG4gICAgdmFyIG5vZGUgPSBwYXJzZUJpdHdpc2VBbmQoc3RhdGUpO1xuXG4gICAgd2hpbGUgKHN0YXRlLnRva2VuID09PSAnXnwnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVubW9kaWZpZWQtbG9vcC1jb25kaXRpb25cbiAgICAgIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpO1xuICAgICAgbm9kZSA9IG5ldyBPcGVyYXRvck5vZGUoJ158JywgJ2JpdFhvcicsIFtub2RlLCBwYXJzZUJpdHdpc2VBbmQoc3RhdGUpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgLyoqXG4gICAqIGJpdHdpc2UgYW5kLCAneCAmIHknXG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZUJpdHdpc2VBbmQoc3RhdGUpIHtcbiAgICB2YXIgbm9kZSA9IHBhcnNlUmVsYXRpb25hbChzdGF0ZSk7XG5cbiAgICB3aGlsZSAoc3RhdGUudG9rZW4gPT09ICcmJykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uXG4gICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTtcbiAgICAgIG5vZGUgPSBuZXcgT3BlcmF0b3JOb2RlKCcmJywgJ2JpdEFuZCcsIFtub2RlLCBwYXJzZVJlbGF0aW9uYWwoc3RhdGUpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlIGEgY2hhaW5lZCBjb25kaXRpb25hbCwgbGlrZSAnYSA+IGIgPj0gYydcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlUmVsYXRpb25hbChzdGF0ZSkge1xuICAgIHZhciBwYXJhbXMgPSBbcGFyc2VTaGlmdChzdGF0ZSldO1xuICAgIHZhciBjb25kaXRpb25hbHMgPSBbXTtcbiAgICB2YXIgb3BlcmF0b3JzID0ge1xuICAgICAgJz09JzogJ2VxdWFsJyxcbiAgICAgICchPSc6ICd1bmVxdWFsJyxcbiAgICAgICc8JzogJ3NtYWxsZXInLFxuICAgICAgJz4nOiAnbGFyZ2VyJyxcbiAgICAgICc8PSc6ICdzbWFsbGVyRXEnLFxuICAgICAgJz49JzogJ2xhcmdlckVxJ1xuICAgIH07XG5cbiAgICB3aGlsZSAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKG9wZXJhdG9ycywgc3RhdGUudG9rZW4pKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVubW9kaWZpZWQtbG9vcC1jb25kaXRpb25cbiAgICAgIHZhciBjb25kID0ge1xuICAgICAgICBuYW1lOiBzdGF0ZS50b2tlbixcbiAgICAgICAgZm46IG9wZXJhdG9yc1tzdGF0ZS50b2tlbl1cbiAgICAgIH07XG4gICAgICBjb25kaXRpb25hbHMucHVzaChjb25kKTtcbiAgICAgIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpO1xuICAgICAgcGFyYW1zLnB1c2gocGFyc2VTaGlmdChzdGF0ZSkpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMubGVuZ3RoID09PSAxKSB7XG4gICAgICByZXR1cm4gcGFyYW1zWzBdO1xuICAgIH0gZWxzZSBpZiAocGFyYW1zLmxlbmd0aCA9PT0gMikge1xuICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUoY29uZGl0aW9uYWxzWzBdLm5hbWUsIGNvbmRpdGlvbmFsc1swXS5mbiwgcGFyYW1zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBSZWxhdGlvbmFsTm9kZShjb25kaXRpb25hbHMubWFwKGZ1bmN0aW9uIChjKSB7XG4gICAgICAgIHJldHVybiBjLmZuO1xuICAgICAgfSksIHBhcmFtcyk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBCaXR3aXNlIGxlZnQgc2hpZnQsIGJpdHdpc2UgcmlnaHQgYXJpdGhtZXRpYyBzaGlmdCwgYml0d2lzZSByaWdodCBsb2dpY2FsIHNoaWZ0XG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZVNoaWZ0KHN0YXRlKSB7XG4gICAgdmFyIG5vZGUsIG5hbWUsIGZuLCBwYXJhbXM7XG4gICAgbm9kZSA9IHBhcnNlQ29udmVyc2lvbihzdGF0ZSk7XG4gICAgdmFyIG9wZXJhdG9ycyA9IHtcbiAgICAgICc8PCc6ICdsZWZ0U2hpZnQnLFxuICAgICAgJz4+JzogJ3JpZ2h0QXJpdGhTaGlmdCcsXG4gICAgICAnPj4+JzogJ3JpZ2h0TG9nU2hpZnQnXG4gICAgfTtcblxuICAgIHdoaWxlICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkob3BlcmF0b3JzLCBzdGF0ZS50b2tlbikpIHtcbiAgICAgIG5hbWUgPSBzdGF0ZS50b2tlbjtcbiAgICAgIGZuID0gb3BlcmF0b3JzW25hbWVdO1xuICAgICAgZ2V0VG9rZW5Ta2lwTmV3bGluZShzdGF0ZSk7XG4gICAgICBwYXJhbXMgPSBbbm9kZSwgcGFyc2VDb252ZXJzaW9uKHN0YXRlKV07XG4gICAgICBub2RlID0gbmV3IE9wZXJhdG9yTm9kZShuYW1lLCBmbiwgcGFyYW1zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICAvKipcbiAgICogY29udmVyc2lvbiBvcGVyYXRvcnMgJ3RvJyBhbmQgJ2luJ1xuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VDb252ZXJzaW9uKHN0YXRlKSB7XG4gICAgdmFyIG5vZGUsIG5hbWUsIGZuLCBwYXJhbXM7XG4gICAgbm9kZSA9IHBhcnNlUmFuZ2Uoc3RhdGUpO1xuICAgIHZhciBvcGVyYXRvcnMgPSB7XG4gICAgICB0bzogJ3RvJyxcbiAgICAgIFwiaW5cIjogJ3RvJyAvLyBhbGlhcyBvZiAndG8nXG5cbiAgICB9O1xuXG4gICAgd2hpbGUgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShvcGVyYXRvcnMsIHN0YXRlLnRva2VuKSkge1xuICAgICAgbmFtZSA9IHN0YXRlLnRva2VuO1xuICAgICAgZm4gPSBvcGVyYXRvcnNbbmFtZV07XG4gICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTtcblxuICAgICAgaWYgKG5hbWUgPT09ICdpbicgJiYgc3RhdGUudG9rZW4gPT09ICcnKSB7XG4gICAgICAgIC8vIGVuZCBvZiBleHByZXNzaW9uIC0+IHRoaXMgaXMgdGhlIHVuaXQgJ2luJyAoJ2luY2gnKVxuICAgICAgICBub2RlID0gbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFtub2RlLCBuZXcgU3ltYm9sTm9kZSgnaW4nKV0sIHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gb3BlcmF0b3IgJ2EgdG8gYicgb3IgJ2EgaW4gYidcbiAgICAgICAgcGFyYW1zID0gW25vZGUsIHBhcnNlUmFuZ2Uoc3RhdGUpXTtcbiAgICAgICAgbm9kZSA9IG5ldyBPcGVyYXRvck5vZGUobmFtZSwgZm4sIHBhcmFtcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgLyoqXG4gICAqIHBhcnNlIHJhbmdlLCBcInN0YXJ0OmVuZFwiLCBcInN0YXJ0OnN0ZXA6ZW5kXCIsIFwiOlwiLCBcInN0YXJ0OlwiLCBcIjplbmRcIiwgZXRjXG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZVJhbmdlKHN0YXRlKSB7XG4gICAgdmFyIG5vZGU7XG4gICAgdmFyIHBhcmFtcyA9IFtdO1xuXG4gICAgaWYgKHN0YXRlLnRva2VuID09PSAnOicpIHtcbiAgICAgIC8vIGltcGxpY2l0IHN0YXJ0PTEgKG9uZS1iYXNlZClcbiAgICAgIG5vZGUgPSBuZXcgQ29uc3RhbnROb2RlKDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBleHBsaWNpdCBzdGFydFxuICAgICAgbm9kZSA9IHBhcnNlQWRkU3VidHJhY3Qoc3RhdGUpO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZS50b2tlbiA9PT0gJzonICYmIHN0YXRlLmNvbmRpdGlvbmFsTGV2ZWwgIT09IHN0YXRlLm5lc3RpbmdMZXZlbCkge1xuICAgICAgLy8gd2UgaWdub3JlIHRoZSByYW5nZSBvcGVyYXRvciB3aGVuIGEgY29uZGl0aW9uYWwgb3BlcmF0b3IgaXMgYmVpbmcgcHJvY2Vzc2VkIG9uIHRoZSBzYW1lIGxldmVsXG4gICAgICBwYXJhbXMucHVzaChub2RlKTsgLy8gcGFyc2Ugc3RlcCBhbmQgZW5kXG5cbiAgICAgIHdoaWxlIChzdGF0ZS50b2tlbiA9PT0gJzonICYmIHBhcmFtcy5sZW5ndGggPCAzKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvblxuICAgICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTtcblxuICAgICAgICBpZiAoc3RhdGUudG9rZW4gPT09ICcpJyB8fCBzdGF0ZS50b2tlbiA9PT0gJ10nIHx8IHN0YXRlLnRva2VuID09PSAnLCcgfHwgc3RhdGUudG9rZW4gPT09ICcnKSB7XG4gICAgICAgICAgLy8gaW1wbGljaXQgZW5kXG4gICAgICAgICAgcGFyYW1zLnB1c2gobmV3IFN5bWJvbE5vZGUoJ2VuZCcpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBleHBsaWNpdCBlbmRcbiAgICAgICAgICBwYXJhbXMucHVzaChwYXJzZUFkZFN1YnRyYWN0KHN0YXRlKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHBhcmFtcy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgLy8gcGFyYW1zID0gW3N0YXJ0LCBzdGVwLCBlbmRdXG4gICAgICAgIG5vZGUgPSBuZXcgUmFuZ2VOb2RlKHBhcmFtc1swXSwgcGFyYW1zWzJdLCBwYXJhbXNbMV0pOyAvLyBzdGFydCwgZW5kLCBzdGVwXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBsZW5ndGggPT09IDJcbiAgICAgICAgLy8gcGFyYW1zID0gW3N0YXJ0LCBlbmRdXG4gICAgICAgIG5vZGUgPSBuZXcgUmFuZ2VOb2RlKHBhcmFtc1swXSwgcGFyYW1zWzFdKTsgLy8gc3RhcnQsIGVuZFxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG4gIC8qKlxuICAgKiBhZGQgb3Igc3VidHJhY3RcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlQWRkU3VidHJhY3Qoc3RhdGUpIHtcbiAgICB2YXIgbm9kZSwgbmFtZSwgZm4sIHBhcmFtcztcbiAgICBub2RlID0gcGFyc2VNdWx0aXBseURpdmlkZShzdGF0ZSk7XG4gICAgdmFyIG9wZXJhdG9ycyA9IHtcbiAgICAgICcrJzogJ2FkZCcsXG4gICAgICAnLSc6ICdzdWJ0cmFjdCdcbiAgICB9O1xuXG4gICAgd2hpbGUgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShvcGVyYXRvcnMsIHN0YXRlLnRva2VuKSkge1xuICAgICAgbmFtZSA9IHN0YXRlLnRva2VuO1xuICAgICAgZm4gPSBvcGVyYXRvcnNbbmFtZV07XG4gICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTtcbiAgICAgIHBhcmFtcyA9IFtub2RlLCBwYXJzZU11bHRpcGx5RGl2aWRlKHN0YXRlKV07XG4gICAgICBub2RlID0gbmV3IE9wZXJhdG9yTm9kZShuYW1lLCBmbiwgcGFyYW1zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICAvKipcbiAgICogbXVsdGlwbHksIGRpdmlkZSwgbW9kdWx1c1xuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VNdWx0aXBseURpdmlkZShzdGF0ZSkge1xuICAgIHZhciBub2RlLCBsYXN0LCBuYW1lLCBmbjtcbiAgICBub2RlID0gcGFyc2VJbXBsaWNpdE11bHRpcGxpY2F0aW9uKHN0YXRlKTtcbiAgICBsYXN0ID0gbm9kZTtcbiAgICB2YXIgb3BlcmF0b3JzID0ge1xuICAgICAgJyonOiAnbXVsdGlwbHknLFxuICAgICAgJy4qJzogJ2RvdE11bHRpcGx5JyxcbiAgICAgICcvJzogJ2RpdmlkZScsXG4gICAgICAnLi8nOiAnZG90RGl2aWRlJyxcbiAgICAgICclJzogJ21vZCcsXG4gICAgICBtb2Q6ICdtb2QnXG4gICAgfTtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKG9wZXJhdG9ycywgc3RhdGUudG9rZW4pKSB7XG4gICAgICAgIC8vIGV4cGxpY2l0IG9wZXJhdG9yc1xuICAgICAgICBuYW1lID0gc3RhdGUudG9rZW47XG4gICAgICAgIGZuID0gb3BlcmF0b3JzW25hbWVdO1xuICAgICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTtcbiAgICAgICAgbGFzdCA9IHBhcnNlSW1wbGljaXRNdWx0aXBsaWNhdGlvbihzdGF0ZSk7XG4gICAgICAgIG5vZGUgPSBuZXcgT3BlcmF0b3JOb2RlKG5hbWUsIGZuLCBbbm9kZSwgbGFzdF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgLyoqXG4gICAqIGltcGxpY2l0IG11bHRpcGxpY2F0aW9uXG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZUltcGxpY2l0TXVsdGlwbGljYXRpb24oc3RhdGUpIHtcbiAgICB2YXIgbm9kZSwgbGFzdDtcbiAgICBub2RlID0gcGFyc2VSdWxlMihzdGF0ZSk7XG4gICAgbGFzdCA9IG5vZGU7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKHN0YXRlLnRva2VuVHlwZSA9PT0gVE9LRU5UWVBFLlNZTUJPTCB8fCBzdGF0ZS50b2tlbiA9PT0gJ2luJyAmJiAoMCwgX2lzLmlzQ29uc3RhbnROb2RlKShub2RlKSB8fCBzdGF0ZS50b2tlblR5cGUgPT09IFRPS0VOVFlQRS5OVU1CRVIgJiYgISgwLCBfaXMuaXNDb25zdGFudE5vZGUpKGxhc3QpICYmICghKDAsIF9pcy5pc09wZXJhdG9yTm9kZSkobGFzdCkgfHwgbGFzdC5vcCA9PT0gJyEnKSB8fCBzdGF0ZS50b2tlbiA9PT0gJygnKSB7XG4gICAgICAgIC8vIHBhcnNlIGltcGxpY2l0IG11bHRpcGxpY2F0aW9uXG4gICAgICAgIC8vXG4gICAgICAgIC8vIHN5bWJvbDogICAgICBpbXBsaWNpdCBtdWx0aXBsaWNhdGlvbiBsaWtlICcyYScsICcoMiszKWEnLCAnYSBiJ1xuICAgICAgICAvLyBudW1iZXI6ICAgICAgaW1wbGljaXQgbXVsdGlwbGljYXRpb24gbGlrZSAnKDIrMykyJ1xuICAgICAgICAvLyBwYXJlbnRoZXNpczogaW1wbGljaXQgbXVsdGlwbGljYXRpb24gbGlrZSAnMigzKzQpJywgJygzKzQpKDErMiknXG4gICAgICAgIGxhc3QgPSBwYXJzZVJ1bGUyKHN0YXRlKTtcbiAgICAgICAgbm9kZSA9IG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbbm9kZSwgbGFzdF0sIHRydWVcbiAgICAgICAgLyogaW1wbGljaXQgKi9cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG4gIC8qKlxuICAgKiBJbmZhbW91cyBcInJ1bGUgMlwiIGFzIGRlc2NyaWJlZCBpbiBodHRwczovL2dpdGh1Yi5jb20vam9zZGVqb25nL21hdGhqcy9pc3N1ZXMvNzkyI2lzc3VlY29tbWVudC0zNjEwNjUzNzBcbiAgICogRXhwbGljaXQgZGl2aXNpb24gZ2V0cyBoaWdoZXIgcHJlY2VkZW5jZSB0aGFuIGltcGxpY2l0IG11bHRpcGxpY2F0aW9uXG4gICAqIHdoZW4gdGhlIGRpdmlzaW9uIG1hdGNoZXMgdGhpcyBwYXR0ZXJuOiBbbnVtYmVyXSAvIFtudW1iZXJdIFtzeW1ib2xdXG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZVJ1bGUyKHN0YXRlKSB7XG4gICAgdmFyIG5vZGUgPSBwYXJzZVVuYXJ5KHN0YXRlKTtcbiAgICB2YXIgbGFzdCA9IG5vZGU7XG4gICAgdmFyIHRva2VuU3RhdGVzID0gW107XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgLy8gTWF0Y2ggdGhlIFwibnVtYmVyIC9cIiBwYXJ0IG9mIHRoZSBwYXR0ZXJuIFwibnVtYmVyIC8gbnVtYmVyIHN5bWJvbFwiXG4gICAgICBpZiAoc3RhdGUudG9rZW4gPT09ICcvJyAmJiAoMCwgX2lzLmlzQ29uc3RhbnROb2RlKShsYXN0KSkge1xuICAgICAgICAvLyBMb29rIGFoZWFkIHRvIHNlZSBpZiB0aGUgbmV4dCB0b2tlbiBpcyBhIG51bWJlclxuICAgICAgICB0b2tlblN0YXRlcy5wdXNoKF9leHRlbmRzKHt9LCBzdGF0ZSkpO1xuICAgICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTsgLy8gTWF0Y2ggdGhlIFwibnVtYmVyIC8gbnVtYmVyXCIgcGFydCBvZiB0aGUgcGF0dGVyblxuXG4gICAgICAgIGlmIChzdGF0ZS50b2tlblR5cGUgPT09IFRPS0VOVFlQRS5OVU1CRVIpIHtcbiAgICAgICAgICAvLyBMb29rIGFoZWFkIGFnYWluXG4gICAgICAgICAgdG9rZW5TdGF0ZXMucHVzaChfZXh0ZW5kcyh7fSwgc3RhdGUpKTtcbiAgICAgICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTsgLy8gTWF0Y2ggdGhlIFwic3ltYm9sXCIgcGFydCBvZiB0aGUgcGF0dGVybiwgb3IgYSBsZWZ0IHBhcmVudGhlc2lzXG5cbiAgICAgICAgICBpZiAoc3RhdGUudG9rZW5UeXBlID09PSBUT0tFTlRZUEUuU1lNQk9MIHx8IHN0YXRlLnRva2VuID09PSAnKCcpIHtcbiAgICAgICAgICAgIC8vIFdlJ3ZlIG1hdGNoZWQgdGhlIHBhdHRlcm4gXCJudW1iZXIgLyBudW1iZXIgc3ltYm9sXCIuXG4gICAgICAgICAgICAvLyBSZXdpbmQgb25jZSBhbmQgYnVpbGQgdGhlIFwibnVtYmVyIC8gbnVtYmVyXCIgbm9kZTsgdGhlIHN5bWJvbCB3aWxsIGJlIGNvbnN1bWVkIGxhdGVyXG4gICAgICAgICAgICBfZXh0ZW5kcyhzdGF0ZSwgdG9rZW5TdGF0ZXMucG9wKCkpO1xuXG4gICAgICAgICAgICB0b2tlblN0YXRlcy5wb3AoKTtcbiAgICAgICAgICAgIGxhc3QgPSBwYXJzZVVuYXJ5KHN0YXRlKTtcbiAgICAgICAgICAgIG5vZGUgPSBuZXcgT3BlcmF0b3JOb2RlKCcvJywgJ2RpdmlkZScsIFtub2RlLCBsYXN0XSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE5vdCBhIG1hdGNoLCBzbyByZXdpbmRcbiAgICAgICAgICAgIHRva2VuU3RhdGVzLnBvcCgpO1xuXG4gICAgICAgICAgICBfZXh0ZW5kcyhzdGF0ZSwgdG9rZW5TdGF0ZXMucG9wKCkpO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gTm90IGEgbWF0Y2gsIHNvIHJld2luZFxuICAgICAgICAgIF9leHRlbmRzKHN0YXRlLCB0b2tlblN0YXRlcy5wb3AoKSk7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgLyoqXG4gICAqIFVuYXJ5IHBsdXMgYW5kIG1pbnVzLCBhbmQgbG9naWNhbCBhbmQgYml0d2lzZSBub3RcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlVW5hcnkoc3RhdGUpIHtcbiAgICB2YXIgbmFtZSwgcGFyYW1zLCBmbjtcbiAgICB2YXIgb3BlcmF0b3JzID0ge1xuICAgICAgJy0nOiAndW5hcnlNaW51cycsXG4gICAgICAnKyc6ICd1bmFyeVBsdXMnLFxuICAgICAgJ34nOiAnYml0Tm90JyxcbiAgICAgIG5vdDogJ25vdCdcbiAgICB9O1xuXG4gICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShvcGVyYXRvcnMsIHN0YXRlLnRva2VuKSkge1xuICAgICAgZm4gPSBvcGVyYXRvcnNbc3RhdGUudG9rZW5dO1xuICAgICAgbmFtZSA9IHN0YXRlLnRva2VuO1xuICAgICAgZ2V0VG9rZW5Ta2lwTmV3bGluZShzdGF0ZSk7XG4gICAgICBwYXJhbXMgPSBbcGFyc2VVbmFyeShzdGF0ZSldO1xuICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUobmFtZSwgZm4sIHBhcmFtcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlUG93KHN0YXRlKTtcbiAgfVxuICAvKipcbiAgICogcG93ZXJcbiAgICogTm90ZTogcG93ZXIgb3BlcmF0b3IgaXMgcmlnaHQgYXNzb2NpYXRpdmVcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlUG93KHN0YXRlKSB7XG4gICAgdmFyIG5vZGUsIG5hbWUsIGZuLCBwYXJhbXM7XG4gICAgbm9kZSA9IHBhcnNlTGVmdEhhbmRPcGVyYXRvcnMoc3RhdGUpO1xuXG4gICAgaWYgKHN0YXRlLnRva2VuID09PSAnXicgfHwgc3RhdGUudG9rZW4gPT09ICcuXicpIHtcbiAgICAgIG5hbWUgPSBzdGF0ZS50b2tlbjtcbiAgICAgIGZuID0gbmFtZSA9PT0gJ14nID8gJ3BvdycgOiAnZG90UG93JztcbiAgICAgIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpO1xuICAgICAgcGFyYW1zID0gW25vZGUsIHBhcnNlVW5hcnkoc3RhdGUpXTsgLy8gR28gYmFjayB0byB1bmFyeSwgd2UgY2FuIGhhdmUgJzJeLTMnXG5cbiAgICAgIG5vZGUgPSBuZXcgT3BlcmF0b3JOb2RlKG5hbWUsIGZuLCBwYXJhbXMpO1xuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG4gIC8qKlxuICAgKiBMZWZ0IGhhbmQgb3BlcmF0b3JzOiBmYWN0b3JpYWwgeCEsIGN0cmFuc3Bvc2UgeCdcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlTGVmdEhhbmRPcGVyYXRvcnMoc3RhdGUpIHtcbiAgICB2YXIgbm9kZSwgbmFtZSwgZm4sIHBhcmFtcztcbiAgICBub2RlID0gcGFyc2VDdXN0b21Ob2RlcyhzdGF0ZSk7XG4gICAgdmFyIG9wZXJhdG9ycyA9IHtcbiAgICAgICchJzogJ2ZhY3RvcmlhbCcsXG4gICAgICAnXFwnJzogJ2N0cmFuc3Bvc2UnXG4gICAgfTtcblxuICAgIHdoaWxlICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkob3BlcmF0b3JzLCBzdGF0ZS50b2tlbikpIHtcbiAgICAgIG5hbWUgPSBzdGF0ZS50b2tlbjtcbiAgICAgIGZuID0gb3BlcmF0b3JzW25hbWVdO1xuICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgICAgcGFyYW1zID0gW25vZGVdO1xuICAgICAgbm9kZSA9IG5ldyBPcGVyYXRvck5vZGUobmFtZSwgZm4sIHBhcmFtcyk7XG4gICAgICBub2RlID0gcGFyc2VBY2Nlc3NvcnMoc3RhdGUsIG5vZGUpO1xuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZSBhIGN1c3RvbSBub2RlIGhhbmRsZXIuIEEgbm9kZSBoYW5kbGVyIGNhbiBiZSB1c2VkIHRvIHByb2Nlc3NcbiAgICogbm9kZXMgaW4gYSBjdXN0b20gd2F5LCBmb3IgZXhhbXBsZSBmb3IgaGFuZGxpbmcgYSBwbG90LlxuICAgKlxuICAgKiBBIGhhbmRsZXIgbXVzdCBiZSBwYXNzZWQgYXMgc2Vjb25kIGFyZ3VtZW50IG9mIHRoZSBwYXJzZSBmdW5jdGlvbi5cbiAgICogLSBtdXN0IGV4dGVuZCBtYXRoLmV4cHJlc3Npb24ubm9kZS5Ob2RlXG4gICAqIC0gbXVzdCBjb250YWluIGEgZnVuY3Rpb24gX2NvbXBpbGUoZGVmczogT2JqZWN0KSA6IHN0cmluZ1xuICAgKiAtIG11c3QgY29udGFpbiBhIGZ1bmN0aW9uIGZpbmQoZmlsdGVyOiBPYmplY3QpIDogTm9kZVtdXG4gICAqIC0gbXVzdCBjb250YWluIGEgZnVuY3Rpb24gdG9TdHJpbmcoKSA6IHN0cmluZ1xuICAgKiAtIHRoZSBjb25zdHJ1Y3RvciBpcyBjYWxsZWQgd2l0aCBhIHNpbmdsZSBhcmd1bWVudCBjb250YWluaW5nIGFsbCBwYXJhbWV0ZXJzXG4gICAqXG4gICAqIEZvciBleGFtcGxlOlxuICAgKlxuICAgKiAgICAgbm9kZXMgPSB7XG4gICAqICAgICAgICdwbG90JzogUGxvdEhhbmRsZXJcbiAgICogICAgIH1cbiAgICpcbiAgICogVGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBoYW5kbGVyIGlzIGNhbGxlZCBhczpcbiAgICpcbiAgICogICAgIG5vZGUgPSBuZXcgUGxvdEhhbmRsZXIocGFyYW1zKVxuICAgKlxuICAgKiBUaGUgaGFuZGxlciB3aWxsIGJlIGludm9rZWQgd2hlbiBldmFsdWF0aW5nIGFuIGV4cHJlc3Npb24gbGlrZTpcbiAgICpcbiAgICogICAgIG5vZGUgPSBtYXRoLnBhcnNlKCdwbG90KHNpbih4KSwgeCknLCBub2RlcylcbiAgICpcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlQ3VzdG9tTm9kZXMoc3RhdGUpIHtcbiAgICB2YXIgcGFyYW1zID0gW107XG5cbiAgICBpZiAoc3RhdGUudG9rZW5UeXBlID09PSBUT0tFTlRZUEUuU1lNQk9MICYmICgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShzdGF0ZS5leHRyYU5vZGVzLCBzdGF0ZS50b2tlbikpIHtcbiAgICAgIHZhciBDdXN0b21Ob2RlID0gc3RhdGUuZXh0cmFOb2Rlc1tzdGF0ZS50b2tlbl07XG4gICAgICBnZXRUb2tlbihzdGF0ZSk7IC8vIHBhcnNlIHBhcmFtZXRlcnNcblxuICAgICAgaWYgKHN0YXRlLnRva2VuID09PSAnKCcpIHtcbiAgICAgICAgcGFyYW1zID0gW107XG4gICAgICAgIG9wZW5QYXJhbXMoc3RhdGUpO1xuICAgICAgICBnZXRUb2tlbihzdGF0ZSk7XG5cbiAgICAgICAgaWYgKHN0YXRlLnRva2VuICE9PSAnKScpIHtcbiAgICAgICAgICBwYXJhbXMucHVzaChwYXJzZUFzc2lnbm1lbnQoc3RhdGUpKTsgLy8gcGFyc2UgYSBsaXN0IHdpdGggcGFyYW1ldGVyc1xuXG4gICAgICAgICAgd2hpbGUgKHN0YXRlLnRva2VuID09PSAnLCcpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvblxuICAgICAgICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgICAgICAgICAgcGFyYW1zLnB1c2gocGFyc2VBc3NpZ25tZW50KHN0YXRlKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXRlLnRva2VuICE9PSAnKScpIHtcbiAgICAgICAgICB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ1BhcmVudGhlc2lzICkgZXhwZWN0ZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNsb3NlUGFyYW1zKHN0YXRlKTtcbiAgICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgICAgfSAvLyBjcmVhdGUgYSBuZXcgY3VzdG9tIG5vZGVcbiAgICAgIC8vIG5vaW5zcGVjdGlvbiBKU1ZhbGlkYXRlVHlwZXNcblxuXG4gICAgICByZXR1cm4gbmV3IEN1c3RvbU5vZGUocGFyYW1zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VTeW1ib2woc3RhdGUpO1xuICB9XG4gIC8qKlxuICAgKiBwYXJzZSBzeW1ib2xzOiBmdW5jdGlvbnMsIHZhcmlhYmxlcywgY29uc3RhbnRzLCB1bml0c1xuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VTeW1ib2woc3RhdGUpIHtcbiAgICB2YXIgbm9kZSwgbmFtZTtcblxuICAgIGlmIChzdGF0ZS50b2tlblR5cGUgPT09IFRPS0VOVFlQRS5TWU1CT0wgfHwgc3RhdGUudG9rZW5UeXBlID09PSBUT0tFTlRZUEUuREVMSU1JVEVSICYmIHN0YXRlLnRva2VuIGluIE5BTUVEX0RFTElNSVRFUlMpIHtcbiAgICAgIG5hbWUgPSBzdGF0ZS50b2tlbjtcbiAgICAgIGdldFRva2VuKHN0YXRlKTtcblxuICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShDT05TVEFOVFMsIG5hbWUpKSB7XG4gICAgICAgIC8vIHRydWUsIGZhbHNlLCBudWxsLCAuLi5cbiAgICAgICAgbm9kZSA9IG5ldyBDb25zdGFudE5vZGUoQ09OU1RBTlRTW25hbWVdKTtcbiAgICAgIH0gZWxzZSBpZiAoTlVNRVJJQ19DT05TVEFOVFMuaW5kZXhPZihuYW1lKSAhPT0gLTEpIHtcbiAgICAgICAgLy8gTmFOLCBJbmZpbml0eVxuICAgICAgICBub2RlID0gbmV3IENvbnN0YW50Tm9kZShudW1lcmljKG5hbWUsICdudW1iZXInKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlID0gbmV3IFN5bWJvbE5vZGUobmFtZSk7XG4gICAgICB9IC8vIHBhcnNlIGZ1bmN0aW9uIHBhcmFtZXRlcnMgYW5kIG1hdHJpeCBpbmRleFxuXG5cbiAgICAgIG5vZGUgPSBwYXJzZUFjY2Vzc29ycyhzdGF0ZSwgbm9kZSk7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VEb3VibGVRdW90ZXNTdHJpbmcoc3RhdGUpO1xuICB9XG4gIC8qKlxuICAgKiBwYXJzZSBhY2Nlc3NvcnM6XG4gICAqIC0gZnVuY3Rpb24gaW52b2NhdGlvbiBpbiByb3VuZCBicmFja2V0cyAoLi4uKSwgZm9yIGV4YW1wbGUgc3FydCgyKVxuICAgKiAtIGluZGV4IGVuY2xvc2VkIGluIHNxdWFyZSBicmFja2V0cyBbLi4uXSwgZm9yIGV4YW1wbGUgQVsyLDNdXG4gICAqIC0gZG90IG5vdGF0aW9uIGZvciBwcm9wZXJ0aWVzLCBsaWtlIGZvby5iYXJcbiAgICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAgICBOb2RlIG9uIHdoaWNoIHRvIGFwcGx5IHRoZSBwYXJhbWV0ZXJzLiBJZiB0aGVyZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYXJlIG5vIHBhcmFtZXRlcnMgaW4gdGhlIGV4cHJlc3Npb24sIHRoZSBub2RlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICBpdHNlbGYgaXMgcmV0dXJuZWRcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gW3R5cGVzXSAgRmlsdGVyIHRoZSB0eXBlcyBvZiBub3RhdGlvbnNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuIGJlIFsnKCcsICdbJywgJy4nXVxuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VBY2Nlc3NvcnMoc3RhdGUsIG5vZGUsIHR5cGVzKSB7XG4gICAgdmFyIHBhcmFtcztcblxuICAgIHdoaWxlICgoc3RhdGUudG9rZW4gPT09ICcoJyB8fCBzdGF0ZS50b2tlbiA9PT0gJ1snIHx8IHN0YXRlLnRva2VuID09PSAnLicpICYmICghdHlwZXMgfHwgdHlwZXMuaW5kZXhPZihzdGF0ZS50b2tlbikgIT09IC0xKSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uXG4gICAgICBwYXJhbXMgPSBbXTtcblxuICAgICAgaWYgKHN0YXRlLnRva2VuID09PSAnKCcpIHtcbiAgICAgICAgaWYgKCgwLCBfaXMuaXNTeW1ib2xOb2RlKShub2RlKSB8fCAoMCwgX2lzLmlzQWNjZXNzb3JOb2RlKShub2RlKSkge1xuICAgICAgICAgIC8vIGZ1bmN0aW9uIGludm9jYXRpb24gbGlrZSBmbigyLCAzKSBvciBvYmouZm4oMiwgMylcbiAgICAgICAgICBvcGVuUGFyYW1zKHN0YXRlKTtcbiAgICAgICAgICBnZXRUb2tlbihzdGF0ZSk7XG5cbiAgICAgICAgICBpZiAoc3RhdGUudG9rZW4gIT09ICcpJykge1xuICAgICAgICAgICAgcGFyYW1zLnB1c2gocGFyc2VBc3NpZ25tZW50KHN0YXRlKSk7IC8vIHBhcnNlIGEgbGlzdCB3aXRoIHBhcmFtZXRlcnNcblxuICAgICAgICAgICAgd2hpbGUgKHN0YXRlLnRva2VuID09PSAnLCcpIHtcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uXG4gICAgICAgICAgICAgIGdldFRva2VuKHN0YXRlKTtcbiAgICAgICAgICAgICAgcGFyYW1zLnB1c2gocGFyc2VBc3NpZ25tZW50KHN0YXRlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHN0YXRlLnRva2VuICE9PSAnKScpIHtcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnUGFyZW50aGVzaXMgKSBleHBlY3RlZCcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNsb3NlUGFyYW1zKHN0YXRlKTtcbiAgICAgICAgICBnZXRUb2tlbihzdGF0ZSk7XG4gICAgICAgICAgbm9kZSA9IG5ldyBGdW5jdGlvbk5vZGUobm9kZSwgcGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBpbXBsaWNpdCBtdWx0aXBsaWNhdGlvbiBsaWtlICgyKzMpKDQrNSkgb3Igc3FydCgyKSgxKzIpXG4gICAgICAgICAgLy8gZG9uJ3QgcGFyc2UgaXQgaGVyZSBidXQgbGV0IGl0IGJlIGhhbmRsZWQgYnkgcGFyc2VJbXBsaWNpdE11bHRpcGxpY2F0aW9uXG4gICAgICAgICAgLy8gd2l0aCBjb3JyZWN0IHByZWNlZGVuY2VcbiAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzdGF0ZS50b2tlbiA9PT0gJ1snKSB7XG4gICAgICAgIC8vIGluZGV4IG5vdGF0aW9uIGxpa2UgdmFyaWFibGVbMiwgM11cbiAgICAgICAgb3BlblBhcmFtcyhzdGF0ZSk7XG4gICAgICAgIGdldFRva2VuKHN0YXRlKTtcblxuICAgICAgICBpZiAoc3RhdGUudG9rZW4gIT09ICddJykge1xuICAgICAgICAgIHBhcmFtcy5wdXNoKHBhcnNlQXNzaWdubWVudChzdGF0ZSkpOyAvLyBwYXJzZSBhIGxpc3Qgd2l0aCBwYXJhbWV0ZXJzXG5cbiAgICAgICAgICB3aGlsZSAoc3RhdGUudG9rZW4gPT09ICcsJykge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uXG4gICAgICAgICAgICBnZXRUb2tlbihzdGF0ZSk7XG4gICAgICAgICAgICBwYXJhbXMucHVzaChwYXJzZUFzc2lnbm1lbnQoc3RhdGUpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdGUudG9rZW4gIT09ICddJykge1xuICAgICAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnUGFyZW50aGVzaXMgXSBleHBlY3RlZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2xvc2VQYXJhbXMoc3RhdGUpO1xuICAgICAgICBnZXRUb2tlbihzdGF0ZSk7XG4gICAgICAgIG5vZGUgPSBuZXcgQWNjZXNzb3JOb2RlKG5vZGUsIG5ldyBJbmRleE5vZGUocGFyYW1zKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBkb3Qgbm90YXRpb24gbGlrZSB2YXJpYWJsZS5wcm9wXG4gICAgICAgIGdldFRva2VuKHN0YXRlKTtcblxuICAgICAgICBpZiAoc3RhdGUudG9rZW5UeXBlICE9PSBUT0tFTlRZUEUuU1lNQk9MKSB7XG4gICAgICAgICAgdGhyb3cgY3JlYXRlU3ludGF4RXJyb3Ioc3RhdGUsICdQcm9wZXJ0eSBuYW1lIGV4cGVjdGVkIGFmdGVyIGRvdCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgcGFyYW1zLnB1c2gobmV3IENvbnN0YW50Tm9kZShzdGF0ZS50b2tlbikpO1xuICAgICAgICBnZXRUb2tlbihzdGF0ZSk7XG4gICAgICAgIHZhciBkb3ROb3RhdGlvbiA9IHRydWU7XG4gICAgICAgIG5vZGUgPSBuZXcgQWNjZXNzb3JOb2RlKG5vZGUsIG5ldyBJbmRleE5vZGUocGFyYW1zLCBkb3ROb3RhdGlvbikpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZSBhIGRvdWJsZSBxdW90ZXMgc3RyaW5nLlxuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VEb3VibGVRdW90ZXNTdHJpbmcoc3RhdGUpIHtcbiAgICB2YXIgbm9kZSwgc3RyO1xuXG4gICAgaWYgKHN0YXRlLnRva2VuID09PSAnXCInKSB7XG4gICAgICBzdHIgPSBwYXJzZURvdWJsZVF1b3Rlc1N0cmluZ1Rva2VuKHN0YXRlKTsgLy8gY3JlYXRlIGNvbnN0YW50XG5cbiAgICAgIG5vZGUgPSBuZXcgQ29uc3RhbnROb2RlKHN0cik7IC8vIHBhcnNlIGluZGV4IHBhcmFtZXRlcnNcblxuICAgICAgbm9kZSA9IHBhcnNlQWNjZXNzb3JzKHN0YXRlLCBub2RlKTtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZVNpbmdsZVF1b3Rlc1N0cmluZyhzdGF0ZSk7XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlIGEgc3RyaW5nIHN1cnJvdW5kZWQgYnkgZG91YmxlIHF1b3RlcyBcIi4uLlwiXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZURvdWJsZVF1b3Rlc1N0cmluZ1Rva2VuKHN0YXRlKSB7XG4gICAgdmFyIHN0ciA9ICcnO1xuXG4gICAgd2hpbGUgKGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpICE9PSAnJyAmJiBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSAhPT0gJ1wiJykge1xuICAgICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpID09PSAnXFxcXCcpIHtcbiAgICAgICAgLy8gZXNjYXBlIGNoYXJhY3RlciwgaW1tZWRpYXRlbHkgcHJvY2VzcyB0aGUgbmV4dFxuICAgICAgICAvLyBjaGFyYWN0ZXIgdG8gcHJldmVudCBzdG9wcGluZyBhdCBhIG5leHQgJ1xcXCInXG4gICAgICAgIHN0ciArPSBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKTtcbiAgICAgICAgbmV4dChzdGF0ZSk7XG4gICAgICB9XG5cbiAgICAgIHN0ciArPSBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKTtcbiAgICAgIG5leHQoc3RhdGUpO1xuICAgIH1cblxuICAgIGdldFRva2VuKHN0YXRlKTtcblxuICAgIGlmIChzdGF0ZS50b2tlbiAhPT0gJ1wiJykge1xuICAgICAgdGhyb3cgY3JlYXRlU3ludGF4RXJyb3Ioc3RhdGUsICdFbmQgb2Ygc3RyaW5nIFwiIGV4cGVjdGVkJyk7XG4gICAgfVxuXG4gICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgIHJldHVybiBKU09OLnBhcnNlKCdcIicgKyBzdHIgKyAnXCInKTsgLy8gdW5lc2NhcGUgZXNjYXBlZCBjaGFyYWN0ZXJzXG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlIGEgc2luZ2xlIHF1b3RlcyBzdHJpbmcuXG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZVNpbmdsZVF1b3Rlc1N0cmluZyhzdGF0ZSkge1xuICAgIHZhciBub2RlLCBzdHI7XG5cbiAgICBpZiAoc3RhdGUudG9rZW4gPT09ICdcXCcnKSB7XG4gICAgICBzdHIgPSBwYXJzZVNpbmdsZVF1b3Rlc1N0cmluZ1Rva2VuKHN0YXRlKTsgLy8gY3JlYXRlIGNvbnN0YW50XG5cbiAgICAgIG5vZGUgPSBuZXcgQ29uc3RhbnROb2RlKHN0cik7IC8vIHBhcnNlIGluZGV4IHBhcmFtZXRlcnNcblxuICAgICAgbm9kZSA9IHBhcnNlQWNjZXNzb3JzKHN0YXRlLCBub2RlKTtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZU1hdHJpeChzdGF0ZSk7XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlIGEgc3RyaW5nIHN1cnJvdW5kZWQgYnkgc2luZ2xlIHF1b3RlcyAnLi4uJ1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VTaW5nbGVRdW90ZXNTdHJpbmdUb2tlbihzdGF0ZSkge1xuICAgIHZhciBzdHIgPSAnJztcblxuICAgIHdoaWxlIChjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSAhPT0gJycgJiYgY3VycmVudENoYXJhY3RlcihzdGF0ZSkgIT09ICdcXCcnKSB7XG4gICAgICBpZiAoY3VycmVudENoYXJhY3RlcihzdGF0ZSkgPT09ICdcXFxcJykge1xuICAgICAgICAvLyBlc2NhcGUgY2hhcmFjdGVyLCBpbW1lZGlhdGVseSBwcm9jZXNzIHRoZSBuZXh0XG4gICAgICAgIC8vIGNoYXJhY3RlciB0byBwcmV2ZW50IHN0b3BwaW5nIGF0IGEgbmV4dCAnXFwnJ1xuICAgICAgICBzdHIgKz0gY3VycmVudENoYXJhY3RlcihzdGF0ZSk7XG4gICAgICAgIG5leHQoc3RhdGUpO1xuICAgICAgfVxuXG4gICAgICBzdHIgKz0gY3VycmVudENoYXJhY3RlcihzdGF0ZSk7XG4gICAgICBuZXh0KHN0YXRlKTtcbiAgICB9XG5cbiAgICBnZXRUb2tlbihzdGF0ZSk7XG5cbiAgICBpZiAoc3RhdGUudG9rZW4gIT09ICdcXCcnKSB7XG4gICAgICB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ0VuZCBvZiBzdHJpbmcgXFwnIGV4cGVjdGVkJyk7XG4gICAgfVxuXG4gICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgIHJldHVybiBKU09OLnBhcnNlKCdcIicgKyBzdHIgKyAnXCInKTsgLy8gdW5lc2NhcGUgZXNjYXBlZCBjaGFyYWN0ZXJzXG4gIH1cbiAgLyoqXG4gICAqIHBhcnNlIHRoZSBtYXRyaXhcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlTWF0cml4KHN0YXRlKSB7XG4gICAgdmFyIGFycmF5LCBwYXJhbXMsIHJvd3MsIGNvbHM7XG5cbiAgICBpZiAoc3RhdGUudG9rZW4gPT09ICdbJykge1xuICAgICAgLy8gbWF0cml4IFsuLi5dXG4gICAgICBvcGVuUGFyYW1zKHN0YXRlKTtcbiAgICAgIGdldFRva2VuKHN0YXRlKTtcblxuICAgICAgaWYgKHN0YXRlLnRva2VuICE9PSAnXScpIHtcbiAgICAgICAgLy8gdGhpcyBpcyBhIG5vbi1lbXB0eSBtYXRyaXhcbiAgICAgICAgdmFyIHJvdyA9IHBhcnNlUm93KHN0YXRlKTtcblxuICAgICAgICBpZiAoc3RhdGUudG9rZW4gPT09ICc7Jykge1xuICAgICAgICAgIC8vIDIgZGltZW5zaW9uYWwgYXJyYXlcbiAgICAgICAgICByb3dzID0gMTtcbiAgICAgICAgICBwYXJhbXMgPSBbcm93XTsgLy8gdGhlIHJvd3Mgb2YgdGhlIG1hdHJpeCBhcmUgc2VwYXJhdGVkIGJ5IGRvdC1jb21tYSdzXG5cbiAgICAgICAgICB3aGlsZSAoc3RhdGUudG9rZW4gPT09ICc7Jykge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uXG4gICAgICAgICAgICBnZXRUb2tlbihzdGF0ZSk7XG4gICAgICAgICAgICBwYXJhbXNbcm93c10gPSBwYXJzZVJvdyhzdGF0ZSk7XG4gICAgICAgICAgICByb3dzKys7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHN0YXRlLnRva2VuICE9PSAnXScpIHtcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnRW5kIG9mIG1hdHJpeCBdIGV4cGVjdGVkJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2xvc2VQYXJhbXMoc3RhdGUpO1xuICAgICAgICAgIGdldFRva2VuKHN0YXRlKTsgLy8gY2hlY2sgaWYgdGhlIG51bWJlciBvZiBjb2x1bW5zIG1hdGNoZXMgaW4gYWxsIHJvd3NcblxuICAgICAgICAgIGNvbHMgPSBwYXJhbXNbMF0uaXRlbXMubGVuZ3RoO1xuXG4gICAgICAgICAgZm9yICh2YXIgciA9IDE7IHIgPCByb3dzOyByKyspIHtcbiAgICAgICAgICAgIGlmIChwYXJhbXNbcl0uaXRlbXMubGVuZ3RoICE9PSBjb2xzKSB7XG4gICAgICAgICAgICAgIHRocm93IGNyZWF0ZUVycm9yKHN0YXRlLCAnQ29sdW1uIGRpbWVuc2lvbnMgbWlzbWF0Y2ggJyArICcoJyArIHBhcmFtc1tyXS5pdGVtcy5sZW5ndGggKyAnICE9PSAnICsgY29scyArICcpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYXJyYXkgPSBuZXcgQXJyYXlOb2RlKHBhcmFtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gMSBkaW1lbnNpb25hbCB2ZWN0b3JcbiAgICAgICAgICBpZiAoc3RhdGUudG9rZW4gIT09ICddJykge1xuICAgICAgICAgICAgdGhyb3cgY3JlYXRlU3ludGF4RXJyb3Ioc3RhdGUsICdFbmQgb2YgbWF0cml4IF0gZXhwZWN0ZWQnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjbG9zZVBhcmFtcyhzdGF0ZSk7XG4gICAgICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgICAgICAgIGFycmF5ID0gcm93O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB0aGlzIGlzIGFuIGVtcHR5IG1hdHJpeCBcIlsgXVwiXG4gICAgICAgIGNsb3NlUGFyYW1zKHN0YXRlKTtcbiAgICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgICAgICBhcnJheSA9IG5ldyBBcnJheU5vZGUoW10pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFyc2VBY2Nlc3NvcnMoc3RhdGUsIGFycmF5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VPYmplY3Qoc3RhdGUpO1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZSBhIHNpbmdsZSBjb21tYS1zZXBhcmF0ZWQgcm93IGZyb20gYSBtYXRyaXgsIGxpa2UgJ2EsIGIsIGMnXG4gICAqIEByZXR1cm4ge0FycmF5Tm9kZX0gbm9kZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlUm93KHN0YXRlKSB7XG4gICAgdmFyIHBhcmFtcyA9IFtwYXJzZUFzc2lnbm1lbnQoc3RhdGUpXTtcbiAgICB2YXIgbGVuID0gMTtcblxuICAgIHdoaWxlIChzdGF0ZS50b2tlbiA9PT0gJywnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVubW9kaWZpZWQtbG9vcC1jb25kaXRpb25cbiAgICAgIGdldFRva2VuKHN0YXRlKTsgLy8gcGFyc2UgZXhwcmVzc2lvblxuXG4gICAgICBwYXJhbXNbbGVuXSA9IHBhcnNlQXNzaWdubWVudChzdGF0ZSk7XG4gICAgICBsZW4rKztcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEFycmF5Tm9kZShwYXJhbXMpO1xuICB9XG4gIC8qKlxuICAgKiBwYXJzZSBhbiBvYmplY3QsIGVuY2xvc2VkIGluIGFuZ2xlIGJyYWNrZXRzey4uLn0sIGZvciBleGFtcGxlIHt2YWx1ZTogMn1cbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlT2JqZWN0KHN0YXRlKSB7XG4gICAgaWYgKHN0YXRlLnRva2VuID09PSAneycpIHtcbiAgICAgIG9wZW5QYXJhbXMoc3RhdGUpO1xuICAgICAgdmFyIGtleTtcbiAgICAgIHZhciBwcm9wZXJ0aWVzID0ge307XG5cbiAgICAgIGRvIHtcbiAgICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuXG4gICAgICAgIGlmIChzdGF0ZS50b2tlbiAhPT0gJ30nKSB7XG4gICAgICAgICAgLy8gcGFyc2Uga2V5XG4gICAgICAgICAgaWYgKHN0YXRlLnRva2VuID09PSAnXCInKSB7XG4gICAgICAgICAgICBrZXkgPSBwYXJzZURvdWJsZVF1b3Rlc1N0cmluZ1Rva2VuKHN0YXRlKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLnRva2VuID09PSAnXFwnJykge1xuICAgICAgICAgICAga2V5ID0gcGFyc2VTaW5nbGVRdW90ZXNTdHJpbmdUb2tlbihzdGF0ZSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS50b2tlblR5cGUgPT09IFRPS0VOVFlQRS5TWU1CT0wgfHwgc3RhdGUudG9rZW5UeXBlID09PSBUT0tFTlRZUEUuREVMSU1JVEVSICYmIHN0YXRlLnRva2VuIGluIE5BTUVEX0RFTElNSVRFUlMpIHtcbiAgICAgICAgICAgIGtleSA9IHN0YXRlLnRva2VuO1xuICAgICAgICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ1N5bWJvbCBvciBzdHJpbmcgZXhwZWN0ZWQgYXMgb2JqZWN0IGtleScpO1xuICAgICAgICAgIH0gLy8gcGFyc2Uga2V5L3ZhbHVlIHNlcGFyYXRvclxuXG5cbiAgICAgICAgICBpZiAoc3RhdGUudG9rZW4gIT09ICc6Jykge1xuICAgICAgICAgICAgdGhyb3cgY3JlYXRlU3ludGF4RXJyb3Ioc3RhdGUsICdDb2xvbiA6IGV4cGVjdGVkIGFmdGVyIG9iamVjdCBrZXknKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBnZXRUb2tlbihzdGF0ZSk7IC8vIHBhcnNlIGtleVxuXG4gICAgICAgICAgcHJvcGVydGllc1trZXldID0gcGFyc2VBc3NpZ25tZW50KHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfSB3aGlsZSAoc3RhdGUudG9rZW4gPT09ICcsJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvblxuXG5cbiAgICAgIGlmIChzdGF0ZS50b2tlbiAhPT0gJ30nKSB7XG4gICAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnQ29tbWEgLCBvciBicmFja2V0IH0gZXhwZWN0ZWQgYWZ0ZXIgb2JqZWN0IHZhbHVlJyk7XG4gICAgICB9XG5cbiAgICAgIGNsb3NlUGFyYW1zKHN0YXRlKTtcbiAgICAgIGdldFRva2VuKHN0YXRlKTtcbiAgICAgIHZhciBub2RlID0gbmV3IE9iamVjdE5vZGUocHJvcGVydGllcyk7IC8vIHBhcnNlIGluZGV4IHBhcmFtZXRlcnNcblxuICAgICAgbm9kZSA9IHBhcnNlQWNjZXNzb3JzKHN0YXRlLCBub2RlKTtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZU51bWJlcihzdGF0ZSk7XG4gIH1cbiAgLyoqXG4gICAqIHBhcnNlIGEgbnVtYmVyXG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZU51bWJlcihzdGF0ZSkge1xuICAgIHZhciBudW1iZXJTdHI7XG5cbiAgICBpZiAoc3RhdGUudG9rZW5UeXBlID09PSBUT0tFTlRZUEUuTlVNQkVSKSB7XG4gICAgICAvLyB0aGlzIGlzIGEgbnVtYmVyXG4gICAgICBudW1iZXJTdHIgPSBzdGF0ZS50b2tlbjtcbiAgICAgIGdldFRva2VuKHN0YXRlKTtcbiAgICAgIHJldHVybiBuZXcgQ29uc3RhbnROb2RlKG51bWVyaWMobnVtYmVyU3RyLCBjb25maWcubnVtYmVyKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlUGFyZW50aGVzZXMoc3RhdGUpO1xuICB9XG4gIC8qKlxuICAgKiBwYXJlbnRoZXNlc1xuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VQYXJlbnRoZXNlcyhzdGF0ZSkge1xuICAgIHZhciBub2RlOyAvLyBjaGVjayBpZiBpdCBpcyBhIHBhcmVudGhlc2l6ZWQgZXhwcmVzc2lvblxuXG4gICAgaWYgKHN0YXRlLnRva2VuID09PSAnKCcpIHtcbiAgICAgIC8vIHBhcmVudGhlc2VzICguLi4pXG4gICAgICBvcGVuUGFyYW1zKHN0YXRlKTtcbiAgICAgIGdldFRva2VuKHN0YXRlKTtcbiAgICAgIG5vZGUgPSBwYXJzZUFzc2lnbm1lbnQoc3RhdGUpOyAvLyBzdGFydCBhZ2FpblxuXG4gICAgICBpZiAoc3RhdGUudG9rZW4gIT09ICcpJykge1xuICAgICAgICB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ1BhcmVudGhlc2lzICkgZXhwZWN0ZWQnKTtcbiAgICAgIH1cblxuICAgICAgY2xvc2VQYXJhbXMoc3RhdGUpO1xuICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgICAgbm9kZSA9IG5ldyBQYXJlbnRoZXNpc05vZGUobm9kZSk7XG4gICAgICBub2RlID0gcGFyc2VBY2Nlc3NvcnMoc3RhdGUsIG5vZGUpO1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlRW5kKHN0YXRlKTtcbiAgfVxuICAvKipcbiAgICogRXZhbHVhdGVkIHdoZW4gdGhlIGV4cHJlc3Npb24gaXMgbm90IHlldCBlbmRlZCBidXQgZXhwZWN0ZWQgdG8gZW5kXG4gICAqIEByZXR1cm4ge05vZGV9IHJlc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlRW5kKHN0YXRlKSB7XG4gICAgaWYgKHN0YXRlLnRva2VuID09PSAnJykge1xuICAgICAgLy8gc3ludGF4IGVycm9yIG9yIHVuZXhwZWN0ZWQgZW5kIG9mIGV4cHJlc3Npb25cbiAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnVW5leHBlY3RlZCBlbmQgb2YgZXhwcmVzc2lvbicpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ1ZhbHVlIGV4cGVjdGVkJyk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBTaG9ydGN1dCBmb3IgZ2V0dGluZyB0aGUgY3VycmVudCByb3cgdmFsdWUgKG9uZSBiYXNlZClcbiAgICogUmV0dXJucyB0aGUgbGluZSBvZiB0aGUgY3VycmVudGx5IGhhbmRsZWQgZXhwcmVzc2lvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICAvKiBUT0RPOiBpbXBsZW1lbnQga2VlcGluZyB0cmFjayBvbiB0aGUgcm93IG51bWJlclxuICBmdW5jdGlvbiByb3cgKCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgKi9cblxuICAvKipcbiAgICogU2hvcnRjdXQgZm9yIGdldHRpbmcgdGhlIGN1cnJlbnQgY29sIHZhbHVlIChvbmUgYmFzZWQpXG4gICAqIFJldHVybnMgdGhlIGNvbHVtbiAocG9zaXRpb24pIHdoZXJlIHRoZSBsYXN0IHN0YXRlLnRva2VuIHN0YXJ0c1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGNvbChzdGF0ZSkge1xuICAgIHJldHVybiBzdGF0ZS5pbmRleCAtIHN0YXRlLnRva2VuLmxlbmd0aCArIDE7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBlcnJvclxuICAgKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VcbiAgICogQHJldHVybiB7U3ludGF4RXJyb3J9IGluc3RhbnRpYXRlZCBlcnJvclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCBtZXNzYWdlKSB7XG4gICAgdmFyIGMgPSBjb2woc3RhdGUpO1xuICAgIHZhciBlcnJvciA9IG5ldyBTeW50YXhFcnJvcihtZXNzYWdlICsgJyAoY2hhciAnICsgYyArICcpJyk7XG4gICAgZXJyb3JbXCJjaGFyXCJdID0gYztcbiAgICByZXR1cm4gZXJyb3I7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBlcnJvclxuICAgKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VcbiAgICogQHJldHVybiB7RXJyb3J9IGluc3RhbnRpYXRlZCBlcnJvclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVycm9yKHN0YXRlLCBtZXNzYWdlKSB7XG4gICAgdmFyIGMgPSBjb2woc3RhdGUpO1xuICAgIHZhciBlcnJvciA9IG5ldyBTeW50YXhFcnJvcihtZXNzYWdlICsgJyAoY2hhciAnICsgYyArICcpJyk7XG4gICAgZXJyb3JbXCJjaGFyXCJdID0gYztcbiAgICByZXR1cm4gZXJyb3I7XG4gIH1cblxuICByZXR1cm4gcGFyc2U7XG59KTtcbmV4cG9ydHMuY3JlYXRlUGFyc2UgPSBjcmVhdGVQYXJzZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQXBwbHlUcmFuc2Zvcm0gPSB2b2lkIDA7XG5cbnZhciBfZXJyb3JUcmFuc2Zvcm0gPSByZXF1aXJlKFwiLi91dGlscy9lcnJvclRyYW5zZm9ybVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYXBwbHkgPSByZXF1aXJlKFwiLi4vLi4vZnVuY3Rpb24vbWF0cml4L2FwcGx5XCIpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgbmFtZSA9ICdhcHBseSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdpc0ludGVnZXInXTtcbi8qKlxuICogQXR0YWNoIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIHRvIG1hdGguYXBwbHlcbiAqIEFkZHMgYSBwcm9wZXJ0eSB0cmFuc2Zvcm0gY29udGFpbmluZyB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uLlxuICpcbiAqIFRoaXMgdHJhbnNmb3JtIGNoYW5nZWQgdGhlIGxhc3QgYGRpbWAgcGFyYW1ldGVyIG9mIGZ1bmN0aW9uIGFwcGx5XG4gKiBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvIGJhc2VkXG4gKi9cblxudmFyIGNyZWF0ZUFwcGx5VHJhbnNmb3JtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGlzSW50ZWdlciA9IF9yZWYuaXNJbnRlZ2VyO1xuICB2YXIgYXBwbHkgPSAoMCwgX2FwcGx5LmNyZWF0ZUFwcGx5KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGlzSW50ZWdlcjogaXNJbnRlZ2VyXG4gIH0pOyAvLyBAc2VlOiBjb21tZW50IG9mIGNvbmNhdCBpdHNlbGZcblxuICByZXR1cm4gdHlwZWQoJ2FwcGx5Jywge1xuICAgICcuLi5hbnknOiBmdW5jdGlvbiBhbnkoYXJncykge1xuICAgICAgLy8gY2hhbmdlIGRpbSBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvLWJhc2VkXG4gICAgICB2YXIgZGltID0gYXJnc1sxXTtcblxuICAgICAgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKGRpbSkpIHtcbiAgICAgICAgYXJnc1sxXSA9IGRpbSAtIDE7XG4gICAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKGRpbSkpIHtcbiAgICAgICAgYXJnc1sxXSA9IGRpbS5taW51cygxKTtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGFwcGx5LmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93ICgwLCBfZXJyb3JUcmFuc2Zvcm0uZXJyb3JUcmFuc2Zvcm0pKGVycik7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn0sIHtcbiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFwcGx5VHJhbnNmb3JtID0gY3JlYXRlQXBwbHlUcmFuc2Zvcm07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNvbHVtblRyYW5zZm9ybSA9IHZvaWQgMDtcblxudmFyIF9lcnJvclRyYW5zZm9ybSA9IHJlcXVpcmUoXCIuL3V0aWxzL2Vycm9yVHJhbnNmb3JtXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2x1bW4gPSByZXF1aXJlKFwiLi4vLi4vZnVuY3Rpb24vbWF0cml4L2NvbHVtblwiKTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIG5hbWUgPSAnY29sdW1uJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ0luZGV4JywgJ21hdHJpeCcsICdyYW5nZSddO1xuLyoqXG4gKiBBdHRhY2ggYSB0cmFuc2Zvcm0gZnVuY3Rpb24gdG8gbWF0cml4LmNvbHVtblxuICogQWRkcyBhIHByb3BlcnR5IHRyYW5zZm9ybSBjb250YWluaW5nIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24uXG4gKlxuICogVGhpcyB0cmFuc2Zvcm0gY2hhbmdlZCB0aGUgbGFzdCBgaW5kZXhgIHBhcmFtZXRlciBvZiBmdW5jdGlvbiBjb2x1bW5cbiAqIGZyb20gemVyby1iYXNlZCB0byBvbmUtYmFzZWRcbiAqL1xuXG52YXIgY3JlYXRlQ29sdW1uVHJhbnNmb3JtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIEluZGV4ID0gX3JlZi5JbmRleCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgcmFuZ2UgPSBfcmVmLnJhbmdlO1xuICB2YXIgY29sdW1uID0gKDAsIF9jb2x1bW4uY3JlYXRlQ29sdW1uKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIEluZGV4OiBJbmRleCxcbiAgICBtYXRyaXg6IG1hdHJpeCxcbiAgICByYW5nZTogcmFuZ2VcbiAgfSk7IC8vIEBzZWU6IGNvbW1lbnQgb2YgY29sdW1uIGl0c2VsZlxuXG4gIHJldHVybiB0eXBlZCgnY29sdW1uJywge1xuICAgICcuLi5hbnknOiBmdW5jdGlvbiBhbnkoYXJncykge1xuICAgICAgLy8gY2hhbmdlIGxhc3QgYXJndW1lbnQgZnJvbSB6ZXJvLWJhc2VkIHRvIG9uZS1iYXNlZFxuICAgICAgdmFyIGxhc3RJbmRleCA9IGFyZ3MubGVuZ3RoIC0gMTtcbiAgICAgIHZhciBsYXN0ID0gYXJnc1tsYXN0SW5kZXhdO1xuXG4gICAgICBpZiAoKDAsIF9pcy5pc051bWJlcikobGFzdCkpIHtcbiAgICAgICAgYXJnc1tsYXN0SW5kZXhdID0gbGFzdCAtIDE7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBjb2x1bW4uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgKDAsIF9lcnJvclRyYW5zZm9ybS5lcnJvclRyYW5zZm9ybSkoZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufSwge1xuICBpc1RyYW5zZm9ybUZ1bmN0aW9uOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ29sdW1uVHJhbnNmb3JtID0gY3JlYXRlQ29sdW1uVHJhbnNmb3JtOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb25jYXRUcmFuc2Zvcm0gPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZXJyb3JUcmFuc2Zvcm0gPSByZXF1aXJlKFwiLi91dGlscy9lcnJvclRyYW5zZm9ybVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29uY2F0ID0gcmVxdWlyZShcIi4uLy4uL2Z1bmN0aW9uL21hdHJpeC9jb25jYXRcIik7XG5cbnZhciBuYW1lID0gJ2NvbmNhdCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnaXNJbnRlZ2VyJ107XG52YXIgY3JlYXRlQ29uY2F0VHJhbnNmb3JtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgaXNJbnRlZ2VyID0gX3JlZi5pc0ludGVnZXI7XG4gIHZhciBjb25jYXQgPSAoMCwgX2NvbmNhdC5jcmVhdGVDb25jYXQpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgbWF0cml4OiBtYXRyaXgsXG4gICAgaXNJbnRlZ2VyOiBpc0ludGVnZXJcbiAgfSk7XG4gIC8qKlxuICAgKiBBdHRhY2ggYSB0cmFuc2Zvcm0gZnVuY3Rpb24gdG8gbWF0aC5yYW5nZVxuICAgKiBBZGRzIGEgcHJvcGVydHkgdHJhbnNmb3JtIGNvbnRhaW5pbmcgdGhlIHRyYW5zZm9ybSBmdW5jdGlvbi5cbiAgICpcbiAgICogVGhpcyB0cmFuc2Zvcm0gY2hhbmdlZCB0aGUgbGFzdCBgZGltYCBwYXJhbWV0ZXIgb2YgZnVuY3Rpb24gY29uY2F0XG4gICAqIGZyb20gb25lLWJhc2VkIHRvIHplcm8gYmFzZWRcbiAgICovXG5cbiAgcmV0dXJuIHR5cGVkKCdjb25jYXQnLCB7XG4gICAgJy4uLmFueSc6IGZ1bmN0aW9uIGFueShhcmdzKSB7XG4gICAgICAvLyBjaGFuZ2UgbGFzdCBhcmd1bWVudCBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvLWJhc2VkXG4gICAgICB2YXIgbGFzdEluZGV4ID0gYXJncy5sZW5ndGggLSAxO1xuICAgICAgdmFyIGxhc3QgPSBhcmdzW2xhc3RJbmRleF07XG5cbiAgICAgIGlmICgoMCwgX2lzLmlzTnVtYmVyKShsYXN0KSkge1xuICAgICAgICBhcmdzW2xhc3RJbmRleF0gPSBsYXN0IC0gMTtcbiAgICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc0JpZ051bWJlcikobGFzdCkpIHtcbiAgICAgICAgYXJnc1tsYXN0SW5kZXhdID0gbGFzdC5taW51cygxKTtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGNvbmNhdC5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyAoMCwgX2Vycm9yVHJhbnNmb3JtLmVycm9yVHJhbnNmb3JtKShlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59LCB7XG4gIGlzVHJhbnNmb3JtRnVuY3Rpb246IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb25jYXRUcmFuc2Zvcm0gPSBjcmVhdGVDb25jYXRUcmFuc2Zvcm07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUZpbHRlclRyYW5zZm9ybSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mdW5jdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mdW5jdGlvblwiKTtcblxudmFyIF9jb21waWxlSW5saW5lRXhwcmVzc2lvbiA9IHJlcXVpcmUoXCIuL3V0aWxzL2NvbXBpbGVJbmxpbmVFeHByZXNzaW9uXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnZmlsdGVyJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlRmlsdGVyVHJhbnNmb3JtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogQXR0YWNoIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIHRvIG1hdGguZmlsdGVyXG4gICAqIEFkZHMgYSBwcm9wZXJ0eSB0cmFuc2Zvcm0gY29udGFpbmluZyB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBUaGlzIHRyYW5zZm9ybSBhZGRzIHN1cHBvcnQgZm9yIGVxdWF0aW9ucyBhcyB0ZXN0IGZ1bmN0aW9uIGZvciBtYXRoLmZpbHRlcixcbiAgICogc28geW91IGNhbiBkbyBzb21ldGhpbmcgbGlrZSAnZmlsdGVyKFszLCAtMiwgNV0sIHggPiAwKScuXG4gICAqL1xuICBmdW5jdGlvbiBmaWx0ZXJUcmFuc2Zvcm0oYXJncywgbWF0aCwgc2NvcGUpIHtcbiAgICB2YXIgeCwgY2FsbGJhY2s7XG5cbiAgICBpZiAoYXJnc1swXSkge1xuICAgICAgeCA9IGFyZ3NbMF0uY29tcGlsZSgpLmV2YWx1YXRlKHNjb3BlKTtcbiAgICB9XG5cbiAgICBpZiAoYXJnc1sxXSkge1xuICAgICAgaWYgKCgwLCBfaXMuaXNTeW1ib2xOb2RlKShhcmdzWzFdKSB8fCAoMCwgX2lzLmlzRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSkoYXJnc1sxXSkpIHtcbiAgICAgICAgLy8gYSBmdW5jdGlvbiBwb2ludGVyLCBsaWtlIGZpbHRlcihbMywgLTIsIDVdLCBteVRlc3RGdW5jdGlvbilcbiAgICAgICAgY2FsbGJhY2sgPSBhcmdzWzFdLmNvbXBpbGUoKS5ldmFsdWF0ZShzY29wZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBhbiBleHByZXNzaW9uIGxpa2UgZmlsdGVyKFszLCAtMiwgNV0sIHggPiAwKVxuICAgICAgICBjYWxsYmFjayA9ICgwLCBfY29tcGlsZUlubGluZUV4cHJlc3Npb24uY29tcGlsZUlubGluZUV4cHJlc3Npb24pKGFyZ3NbMV0sIG1hdGgsIHNjb3BlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVyKHgsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIGZpbHRlclRyYW5zZm9ybS5yYXdBcmdzID0gdHJ1ZTsgLy8gb25lIGJhc2VkIHZlcnNpb24gb2YgZnVuY3Rpb24gZmlsdGVyXG5cbiAgdmFyIGZpbHRlciA9IHR5cGVkKCdmaWx0ZXInLCB7XG4gICAgJ0FycmF5LCBmdW5jdGlvbic6IF9maWx0ZXIsXG4gICAgJ01hdHJpeCwgZnVuY3Rpb24nOiBmdW5jdGlvbiBNYXRyaXhGdW5jdGlvbih4LCB0ZXN0KSB7XG4gICAgICByZXR1cm4geC5jcmVhdGUoX2ZpbHRlcih4LnRvQXJyYXkoKSwgdGVzdCkpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBSZWdFeHAnOiBfYXJyYXkuZmlsdGVyUmVnRXhwLFxuICAgICdNYXRyaXgsIFJlZ0V4cCc6IGZ1bmN0aW9uIE1hdHJpeFJlZ0V4cCh4LCB0ZXN0KSB7XG4gICAgICByZXR1cm4geC5jcmVhdGUoKDAsIF9hcnJheS5maWx0ZXJSZWdFeHApKHgudG9BcnJheSgpLCB0ZXN0KSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGZpbHRlclRyYW5zZm9ybTtcbn0sIHtcbiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZVxufSk7XG4vKipcbiAqIEZpbHRlciB2YWx1ZXMgaW4gYSBjYWxsYmFjayBnaXZlbiBhIGNhbGxiYWNrIGZ1bmN0aW9uXG4gKlxuICogISEhIFBhc3NlcyBhIG9uZS1iYXNlZCBpbmRleCAhISFcbiAqXG4gKiBAcGFyYW0ge0FycmF5fSB4XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7QXJyYXl9IFJldHVybnMgdGhlIGZpbHRlcmVkIGFycmF5XG4gKiBAcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMuY3JlYXRlRmlsdGVyVHJhbnNmb3JtID0gY3JlYXRlRmlsdGVyVHJhbnNmb3JtO1xuXG5mdW5jdGlvbiBfZmlsdGVyKHgsIGNhbGxiYWNrKSB7XG4gIC8vIGZpZ3VyZSBvdXQgd2hhdCBudW1iZXIgb2YgYXJndW1lbnRzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBleHBlY3RzXG4gIHZhciBhcmdzID0gKDAsIF9mdW5jdGlvbi5tYXhBcmd1bWVudENvdW50KShjYWxsYmFjayk7XG4gIHJldHVybiAoMCwgX2FycmF5LmZpbHRlcikoeCwgZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgYXJyYXkpIHtcbiAgICAvLyBpbnZva2UgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGggdGhlIHJpZ2h0IG51bWJlciBvZiBhcmd1bWVudHNcbiAgICBpZiAoYXJncyA9PT0gMSkge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKGFyZ3MgPT09IDIpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayh2YWx1ZSwgW2luZGV4ICsgMV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyAzIG9yIC0xXG4gICAgICByZXR1cm4gY2FsbGJhY2sodmFsdWUsIFtpbmRleCArIDFdLCBhcnJheSk7XG4gICAgfVxuICB9KTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRm9yRWFjaFRyYW5zZm9ybSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mdW5jdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mdW5jdGlvblwiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29tcGlsZUlubGluZUV4cHJlc3Npb24gPSByZXF1aXJlKFwiLi91dGlscy9jb21waWxlSW5saW5lRXhwcmVzc2lvblwiKTtcblxudmFyIG5hbWUgPSAnZm9yRWFjaCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUZvckVhY2hUcmFuc2Zvcm0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBBdHRhY2ggYSB0cmFuc2Zvcm0gZnVuY3Rpb24gdG8gbWF0aC5mb3JFYWNoXG4gICAqIEFkZHMgYSBwcm9wZXJ0eSB0cmFuc2Zvcm0gY29udGFpbmluZyB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBUaGlzIHRyYW5zZm9ybSBjcmVhdGVzIGEgb25lLWJhc2VkIGluZGV4IGluc3RlYWQgb2YgYSB6ZXJvLWJhc2VkIGluZGV4XG4gICAqL1xuICBmdW5jdGlvbiBmb3JFYWNoVHJhbnNmb3JtKGFyZ3MsIG1hdGgsIHNjb3BlKSB7XG4gICAgdmFyIHgsIGNhbGxiYWNrO1xuXG4gICAgaWYgKGFyZ3NbMF0pIHtcbiAgICAgIHggPSBhcmdzWzBdLmNvbXBpbGUoKS5ldmFsdWF0ZShzY29wZSk7XG4gICAgfVxuXG4gICAgaWYgKGFyZ3NbMV0pIHtcbiAgICAgIGlmICgoMCwgX2lzLmlzU3ltYm9sTm9kZSkoYXJnc1sxXSkgfHwgKDAsIF9pcy5pc0Z1bmN0aW9uQXNzaWdubWVudE5vZGUpKGFyZ3NbMV0pKSB7XG4gICAgICAgIC8vIGEgZnVuY3Rpb24gcG9pbnRlciwgbGlrZSBmb3JFYWNoKFszLCAtMiwgNV0sIG15VGVzdEZ1bmN0aW9uKVxuICAgICAgICBjYWxsYmFjayA9IGFyZ3NbMV0uY29tcGlsZSgpLmV2YWx1YXRlKHNjb3BlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGFuIGV4cHJlc3Npb24gbGlrZSBmb3JFYWNoKFszLCAtMiwgNV0sIHggPiAwID8gY2FsbGJhY2sxKHgpIDogY2FsbGJhY2syKHgpIClcbiAgICAgICAgY2FsbGJhY2sgPSAoMCwgX2NvbXBpbGVJbmxpbmVFeHByZXNzaW9uLmNvbXBpbGVJbmxpbmVFeHByZXNzaW9uKShhcmdzWzFdLCBtYXRoLCBzY29wZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIF9mb3JFYWNoKHgsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIGZvckVhY2hUcmFuc2Zvcm0ucmF3QXJncyA9IHRydWU7IC8vIG9uZS1iYXNlZCB2ZXJzaW9uIG9mIGZvckVhY2hcblxuICB2YXIgX2ZvckVhY2ggPSB0eXBlZCgnZm9yRWFjaCcsIHtcbiAgICAnQXJyYXkgfCBNYXRyaXgsIGZ1bmN0aW9uJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhGdW5jdGlvbihhcnJheSwgY2FsbGJhY2spIHtcbiAgICAgIC8vIGZpZ3VyZSBvdXQgd2hhdCBudW1iZXIgb2YgYXJndW1lbnRzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBleHBlY3RzXG4gICAgICB2YXIgYXJncyA9ICgwLCBfZnVuY3Rpb24ubWF4QXJndW1lbnRDb3VudCkoY2FsbGJhY2spO1xuXG4gICAgICB2YXIgcmVjdXJzZSA9IGZ1bmN0aW9uIHJlY3Vyc2UodmFsdWUsIGluZGV4KSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICgwLCBfYXJyYXkuZm9yRWFjaCkodmFsdWUsIGZ1bmN0aW9uIChjaGlsZCwgaSkge1xuICAgICAgICAgICAgLy8gd2UgY3JlYXRlIGEgY29weSBvZiB0aGUgaW5kZXggYXJyYXkgYW5kIGFwcGVuZCB0aGUgbmV3IGluZGV4IHZhbHVlXG4gICAgICAgICAgICByZWN1cnNlKGNoaWxkLCBpbmRleC5jb25jYXQoaSArIDEpKTsgLy8gb25lIGJhc2VkIGluZGV4LCBoZW5jZSBpKzFcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBpbnZva2UgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGggdGhlIHJpZ2h0IG51bWJlciBvZiBhcmd1bWVudHNcbiAgICAgICAgICBpZiAoYXJncyA9PT0gMSkge1xuICAgICAgICAgICAgY2FsbGJhY2sodmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYXJncyA9PT0gMikge1xuICAgICAgICAgICAgY2FsbGJhY2sodmFsdWUsIGluZGV4KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gMyBvciAtMVxuICAgICAgICAgICAgY2FsbGJhY2sodmFsdWUsIGluZGV4LCBhcnJheSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZWN1cnNlKGFycmF5LnZhbHVlT2YoKSwgW10pOyAvLyBwYXNzIEFycmF5XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZm9yRWFjaFRyYW5zZm9ybTtcbn0sIHtcbiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUZvckVhY2hUcmFuc2Zvcm0gPSBjcmVhdGVGb3JFYWNoVHJhbnNmb3JtOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVJbmRleFRyYW5zZm9ybSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2luZGV4JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ0luZGV4J107XG52YXIgY3JlYXRlSW5kZXhUcmFuc2Zvcm0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgSW5kZXggPSBfcmVmLkluZGV4O1xuXG4gIC8qKlxuICAgKiBBdHRhY2ggYSB0cmFuc2Zvcm0gZnVuY3Rpb24gdG8gbWF0aC5pbmRleFxuICAgKiBBZGRzIGEgcHJvcGVydHkgdHJhbnNmb3JtIGNvbnRhaW5pbmcgdGhlIHRyYW5zZm9ybSBmdW5jdGlvbi5cbiAgICpcbiAgICogVGhpcyB0cmFuc2Zvcm0gY3JlYXRlcyBhIG9uZS1iYXNlZCBpbmRleCBpbnN0ZWFkIG9mIGEgemVyby1iYXNlZCBpbmRleFxuICAgKi9cbiAgcmV0dXJuIGZ1bmN0aW9uIGluZGV4VHJhbnNmb3JtKCkge1xuICAgIHZhciBhcmdzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgdmFyIGFyZyA9IGFyZ3VtZW50c1tpXTsgLy8gY2hhbmdlIGZyb20gb25lLWJhc2VkIHRvIHplcm8gYmFzZWQsIGFuZCBjb252ZXJ0IEJpZ051bWJlciB0byBudW1iZXJcblxuICAgICAgaWYgKCgwLCBfaXMuaXNSYW5nZSkoYXJnKSkge1xuICAgICAgICBhcmcuc3RhcnQtLTtcbiAgICAgICAgYXJnLmVuZCAtPSBhcmcuc3RlcCA+IDAgPyAwIDogMjtcbiAgICAgIH0gZWxzZSBpZiAoYXJnICYmIGFyZy5pc1NldCA9PT0gdHJ1ZSkge1xuICAgICAgICBhcmcgPSBhcmcubWFwKGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgcmV0dXJuIHYgLSAxO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc0FycmF5KShhcmcpIHx8ICgwLCBfaXMuaXNNYXRyaXgpKGFyZykpIHtcbiAgICAgICAgYXJnID0gYXJnLm1hcChmdW5jdGlvbiAodikge1xuICAgICAgICAgIHJldHVybiB2IC0gMTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKGFyZykpIHtcbiAgICAgICAgYXJnLS07XG4gICAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKGFyZykpIHtcbiAgICAgICAgYXJnID0gYXJnLnRvTnVtYmVyKCkgLSAxO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYXJnID09PSAnc3RyaW5nJykgey8vIGxlYXZlIGFzIGlzXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdEaW1lbnNpb24gbXVzdCBiZSBhbiBBcnJheSwgTWF0cml4LCBudW1iZXIsIHN0cmluZywgb3IgUmFuZ2UnKTtcbiAgICAgIH1cblxuICAgICAgYXJnc1tpXSA9IGFyZztcbiAgICB9XG5cbiAgICB2YXIgcmVzID0gbmV3IEluZGV4KCk7XG4gICAgSW5kZXguYXBwbHkocmVzLCBhcmdzKTtcbiAgICByZXR1cm4gcmVzO1xuICB9O1xufSwge1xuICBpc1RyYW5zZm9ybUZ1bmN0aW9uOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlSW5kZXhUcmFuc2Zvcm0gPSBjcmVhdGVJbmRleFRyYW5zZm9ybTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTWFwVHJhbnNmb3JtID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2Z1bmN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2Z1bmN0aW9uXCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb21waWxlSW5saW5lRXhwcmVzc2lvbiA9IHJlcXVpcmUoXCIuL3V0aWxzL2NvbXBpbGVJbmxpbmVFeHByZXNzaW9uXCIpO1xuXG52YXIgbmFtZSA9ICdtYXAnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVNYXBUcmFuc2Zvcm0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBBdHRhY2ggYSB0cmFuc2Zvcm0gZnVuY3Rpb24gdG8gbWF0aC5tYXBcbiAgICogQWRkcyBhIHByb3BlcnR5IHRyYW5zZm9ybSBjb250YWluaW5nIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24uXG4gICAqXG4gICAqIFRoaXMgdHJhbnNmb3JtIGNyZWF0ZXMgYSBvbmUtYmFzZWQgaW5kZXggaW5zdGVhZCBvZiBhIHplcm8tYmFzZWQgaW5kZXhcbiAgICovXG4gIGZ1bmN0aW9uIG1hcFRyYW5zZm9ybShhcmdzLCBtYXRoLCBzY29wZSkge1xuICAgIHZhciB4LCBjYWxsYmFjaztcblxuICAgIGlmIChhcmdzWzBdKSB7XG4gICAgICB4ID0gYXJnc1swXS5jb21waWxlKCkuZXZhbHVhdGUoc2NvcGUpO1xuICAgIH1cblxuICAgIGlmIChhcmdzWzFdKSB7XG4gICAgICBpZiAoKDAsIF9pcy5pc1N5bWJvbE5vZGUpKGFyZ3NbMV0pIHx8ICgwLCBfaXMuaXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlKShhcmdzWzFdKSkge1xuICAgICAgICAvLyBhIGZ1bmN0aW9uIHBvaW50ZXIsIGxpa2UgZmlsdGVyKFszLCAtMiwgNV0sIG15VGVzdEZ1bmN0aW9uKVxuICAgICAgICBjYWxsYmFjayA9IGFyZ3NbMV0uY29tcGlsZSgpLmV2YWx1YXRlKHNjb3BlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGFuIGV4cHJlc3Npb24gbGlrZSBmaWx0ZXIoWzMsIC0yLCA1XSwgeCA+IDApXG4gICAgICAgIGNhbGxiYWNrID0gKDAsIF9jb21waWxlSW5saW5lRXhwcmVzc2lvbi5jb21waWxlSW5saW5lRXhwcmVzc2lvbikoYXJnc1sxXSwgbWF0aCwgc2NvcGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXAoeCwgY2FsbGJhY2spO1xuICB9XG5cbiAgbWFwVHJhbnNmb3JtLnJhd0FyZ3MgPSB0cnVlOyAvLyBvbmUtYmFzZWQgdmVyc2lvbiBvZiBtYXAgZnVuY3Rpb25cblxuICB2YXIgbWFwID0gdHlwZWQoJ21hcCcsIHtcbiAgICAnQXJyYXksIGZ1bmN0aW9uJzogZnVuY3Rpb24gQXJyYXlGdW5jdGlvbih4LCBjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIF9tYXAoeCwgY2FsbGJhY2ssIHgpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgZnVuY3Rpb24nOiBmdW5jdGlvbiBNYXRyaXhGdW5jdGlvbih4LCBjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHguY3JlYXRlKF9tYXAoeC52YWx1ZU9mKCksIGNhbGxiYWNrLCB4KSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG1hcFRyYW5zZm9ybTtcbn0sIHtcbiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZVxufSk7XG4vKipcbiAqIE1hcCBmb3IgYSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheS4gT25lLWJhc2VkIGluZGV4ZXNcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHBhcmFtIHtBcnJheX0gb3JpZ1xuICogQHJldHVybiB7QXJyYXl9XG4gKiBAcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMuY3JlYXRlTWFwVHJhbnNmb3JtID0gY3JlYXRlTWFwVHJhbnNmb3JtO1xuXG5mdW5jdGlvbiBfbWFwKGFycmF5LCBjYWxsYmFjaywgb3JpZykge1xuICAvLyBmaWd1cmUgb3V0IHdoYXQgbnVtYmVyIG9mIGFyZ3VtZW50cyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZXhwZWN0c1xuICB2YXIgYXJnc0NvdW50ID0gKDAsIF9mdW5jdGlvbi5tYXhBcmd1bWVudENvdW50KShjYWxsYmFjayk7XG5cbiAgZnVuY3Rpb24gcmVjdXJzZSh2YWx1ZSwgaW5kZXgpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiAoMCwgX2FycmF5Lm1hcCkodmFsdWUsIGZ1bmN0aW9uIChjaGlsZCwgaSkge1xuICAgICAgICAvLyB3ZSBjcmVhdGUgYSBjb3B5IG9mIHRoZSBpbmRleCBhcnJheSBhbmQgYXBwZW5kIHRoZSBuZXcgaW5kZXggdmFsdWVcbiAgICAgICAgcmV0dXJuIHJlY3Vyc2UoY2hpbGQsIGluZGV4LmNvbmNhdChpICsgMSkpOyAvLyBvbmUgYmFzZWQgaW5kZXgsIGhlbmNlIGkgKyAxXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaW52b2tlIHRoZSAodHlwZWQpIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGggdGhlIHJpZ2h0IG51bWJlciBvZiBhcmd1bWVudHNcbiAgICAgIGlmIChhcmdzQ291bnQgPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoYXJnc0NvdW50ID09PSAyKSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayh2YWx1ZSwgaW5kZXgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gMyBvciAtMVxuICAgICAgICByZXR1cm4gY2FsbGJhY2sodmFsdWUsIGluZGV4LCBvcmlnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVjdXJzZShhcnJheSwgW10pO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVNYXhUcmFuc2Zvcm0gPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2Vycm9yVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vdXRpbHMvZXJyb3JUcmFuc2Zvcm1cIik7XG5cbnZhciBfbWF4ID0gcmVxdWlyZShcIi4uLy4uL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbWF4XCIpO1xuXG52YXIgbmFtZSA9ICdtYXgnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbGFyZ2VyJ107XG52YXIgY3JlYXRlTWF4VHJhbnNmb3JtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGxhcmdlciA9IF9yZWYubGFyZ2VyO1xuICB2YXIgbWF4ID0gKDAsIF9tYXguY3JlYXRlTWF4KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGxhcmdlcjogbGFyZ2VyXG4gIH0pO1xuICAvKipcbiAgICogQXR0YWNoIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIHRvIG1hdGgubWF4XG4gICAqIEFkZHMgYSBwcm9wZXJ0eSB0cmFuc2Zvcm0gY29udGFpbmluZyB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBUaGlzIHRyYW5zZm9ybSBjaGFuZ2VkIHRoZSBsYXN0IGBkaW1gIHBhcmFtZXRlciBvZiBmdW5jdGlvbiBtYXhcbiAgICogZnJvbSBvbmUtYmFzZWQgdG8gemVybyBiYXNlZFxuICAgKi9cblxuICByZXR1cm4gdHlwZWQoJ21heCcsIHtcbiAgICAnLi4uYW55JzogZnVuY3Rpb24gYW55KGFyZ3MpIHtcbiAgICAgIC8vIGNoYW5nZSBsYXN0IGFyZ3VtZW50IGRpbSBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvLWJhc2VkXG4gICAgICBpZiAoYXJncy5sZW5ndGggPT09IDIgJiYgKDAsIF9pcy5pc0NvbGxlY3Rpb24pKGFyZ3NbMF0pKSB7XG4gICAgICAgIHZhciBkaW0gPSBhcmdzWzFdO1xuXG4gICAgICAgIGlmICgoMCwgX2lzLmlzTnVtYmVyKShkaW0pKSB7XG4gICAgICAgICAgYXJnc1sxXSA9IGRpbSAtIDE7XG4gICAgICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc0JpZ051bWJlcikoZGltKSkge1xuICAgICAgICAgIGFyZ3NbMV0gPSBkaW0ubWludXMoMSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1heC5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyAoMCwgX2Vycm9yVHJhbnNmb3JtLmVycm9yVHJhbnNmb3JtKShlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59LCB7XG4gIGlzVHJhbnNmb3JtRnVuY3Rpb246IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVNYXhUcmFuc2Zvcm0gPSBjcmVhdGVNYXhUcmFuc2Zvcm07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU1lYW5UcmFuc2Zvcm0gPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2Vycm9yVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vdXRpbHMvZXJyb3JUcmFuc2Zvcm1cIik7XG5cbnZhciBfbWVhbiA9IHJlcXVpcmUoXCIuLi8uLi9mdW5jdGlvbi9zdGF0aXN0aWNzL21lYW5cIik7XG5cbnZhciBuYW1lID0gJ21lYW4nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnYWRkJywgJ2RpdmlkZSddO1xudmFyIGNyZWF0ZU1lYW5UcmFuc2Zvcm0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgYWRkID0gX3JlZi5hZGQsXG4gICAgICBkaXZpZGUgPSBfcmVmLmRpdmlkZTtcbiAgdmFyIG1lYW4gPSAoMCwgX21lYW4uY3JlYXRlTWVhbikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBhZGQ6IGFkZCxcbiAgICBkaXZpZGU6IGRpdmlkZVxuICB9KTtcbiAgLyoqXG4gICAqIEF0dGFjaCBhIHRyYW5zZm9ybSBmdW5jdGlvbiB0byBtYXRoLm1lYW5cbiAgICogQWRkcyBhIHByb3BlcnR5IHRyYW5zZm9ybSBjb250YWluaW5nIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24uXG4gICAqXG4gICAqIFRoaXMgdHJhbnNmb3JtIGNoYW5nZWQgdGhlIGxhc3QgYGRpbWAgcGFyYW1ldGVyIG9mIGZ1bmN0aW9uIG1lYW5cbiAgICogZnJvbSBvbmUtYmFzZWQgdG8gemVybyBiYXNlZFxuICAgKi9cblxuICByZXR1cm4gdHlwZWQoJ21lYW4nLCB7XG4gICAgJy4uLmFueSc6IGZ1bmN0aW9uIGFueShhcmdzKSB7XG4gICAgICAvLyBjaGFuZ2UgbGFzdCBhcmd1bWVudCBkaW0gZnJvbSBvbmUtYmFzZWQgdG8gemVyby1iYXNlZFxuICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAyICYmICgwLCBfaXMuaXNDb2xsZWN0aW9uKShhcmdzWzBdKSkge1xuICAgICAgICB2YXIgZGltID0gYXJnc1sxXTtcblxuICAgICAgICBpZiAoKDAsIF9pcy5pc051bWJlcikoZGltKSkge1xuICAgICAgICAgIGFyZ3NbMV0gPSBkaW0gLSAxO1xuICAgICAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKGRpbSkpIHtcbiAgICAgICAgICBhcmdzWzFdID0gZGltLm1pbnVzKDEpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtZWFuLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93ICgwLCBfZXJyb3JUcmFuc2Zvcm0uZXJyb3JUcmFuc2Zvcm0pKGVycik7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn0sIHtcbiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU1lYW5UcmFuc2Zvcm0gPSBjcmVhdGVNZWFuVHJhbnNmb3JtOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVNaW5UcmFuc2Zvcm0gPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2Vycm9yVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vdXRpbHMvZXJyb3JUcmFuc2Zvcm1cIik7XG5cbnZhciBfbWluID0gcmVxdWlyZShcIi4uLy4uL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbWluXCIpO1xuXG52YXIgbmFtZSA9ICdtaW4nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnc21hbGxlciddO1xudmFyIGNyZWF0ZU1pblRyYW5zZm9ybSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBzbWFsbGVyID0gX3JlZi5zbWFsbGVyO1xuICB2YXIgbWluID0gKDAsIF9taW4uY3JlYXRlTWluKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIHNtYWxsZXI6IHNtYWxsZXJcbiAgfSk7XG4gIC8qKlxuICAgKiBBdHRhY2ggYSB0cmFuc2Zvcm0gZnVuY3Rpb24gdG8gbWF0aC5taW5cbiAgICogQWRkcyBhIHByb3BlcnR5IHRyYW5zZm9ybSBjb250YWluaW5nIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24uXG4gICAqXG4gICAqIFRoaXMgdHJhbnNmb3JtIGNoYW5nZWQgdGhlIGxhc3QgYGRpbWAgcGFyYW1ldGVyIG9mIGZ1bmN0aW9uIG1pblxuICAgKiBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvIGJhc2VkXG4gICAqL1xuXG4gIHJldHVybiB0eXBlZCgnbWluJywge1xuICAgICcuLi5hbnknOiBmdW5jdGlvbiBhbnkoYXJncykge1xuICAgICAgLy8gY2hhbmdlIGxhc3QgYXJndW1lbnQgZGltIGZyb20gb25lLWJhc2VkIHRvIHplcm8tYmFzZWRcbiAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMiAmJiAoMCwgX2lzLmlzQ29sbGVjdGlvbikoYXJnc1swXSkpIHtcbiAgICAgICAgdmFyIGRpbSA9IGFyZ3NbMV07XG5cbiAgICAgICAgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKGRpbSkpIHtcbiAgICAgICAgICBhcmdzWzFdID0gZGltIC0gMTtcbiAgICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShkaW0pKSB7XG4gICAgICAgICAgYXJnc1sxXSA9IGRpbS5taW51cygxKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbWluLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93ICgwLCBfZXJyb3JUcmFuc2Zvcm0uZXJyb3JUcmFuc2Zvcm0pKGVycik7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn0sIHtcbiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU1pblRyYW5zZm9ybSA9IGNyZWF0ZU1pblRyYW5zZm9ybTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUmFuZ2VUcmFuc2Zvcm0gPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX3JhbmdlID0gcmVxdWlyZShcIi4uLy4uL2Z1bmN0aW9uL21hdHJpeC9yYW5nZVwiKTtcblxudmFyIG5hbWUgPSAncmFuZ2UnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJz9tYXRyaXgnLCAnP2JpZ251bWJlcicsICdzbWFsbGVyJywgJ3NtYWxsZXJFcScsICdsYXJnZXInLCAnbGFyZ2VyRXEnXTtcbnZhciBjcmVhdGVSYW5nZVRyYW5zZm9ybSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgYmlnbnVtYmVyID0gX3JlZi5iaWdudW1iZXIsXG4gICAgICBzbWFsbGVyID0gX3JlZi5zbWFsbGVyLFxuICAgICAgc21hbGxlckVxID0gX3JlZi5zbWFsbGVyRXEsXG4gICAgICBsYXJnZXIgPSBfcmVmLmxhcmdlcixcbiAgICAgIGxhcmdlckVxID0gX3JlZi5sYXJnZXJFcTtcbiAgdmFyIHJhbmdlID0gKDAsIF9yYW5nZS5jcmVhdGVSYW5nZSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBjb25maWc6IGNvbmZpZyxcbiAgICBtYXRyaXg6IG1hdHJpeCxcbiAgICBiaWdudW1iZXI6IGJpZ251bWJlcixcbiAgICBzbWFsbGVyOiBzbWFsbGVyLFxuICAgIHNtYWxsZXJFcTogc21hbGxlckVxLFxuICAgIGxhcmdlcjogbGFyZ2VyLFxuICAgIGxhcmdlckVxOiBsYXJnZXJFcVxuICB9KTtcbiAgLyoqXG4gICAqIEF0dGFjaCBhIHRyYW5zZm9ybSBmdW5jdGlvbiB0byBtYXRoLnJhbmdlXG4gICAqIEFkZHMgYSBwcm9wZXJ0eSB0cmFuc2Zvcm0gY29udGFpbmluZyB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBUaGlzIHRyYW5zZm9ybSBjcmVhdGVzIGEgcmFuZ2Ugd2hpY2ggaW5jbHVkZXMgdGhlIGVuZCB2YWx1ZVxuICAgKi9cblxuICByZXR1cm4gdHlwZWQoJ3JhbmdlJywge1xuICAgICcuLi5hbnknOiBmdW5jdGlvbiBhbnkoYXJncykge1xuICAgICAgdmFyIGxhc3RJbmRleCA9IGFyZ3MubGVuZ3RoIC0gMTtcbiAgICAgIHZhciBsYXN0ID0gYXJnc1tsYXN0SW5kZXhdO1xuXG4gICAgICBpZiAodHlwZW9mIGxhc3QgIT09ICdib29sZWFuJykge1xuICAgICAgICAvLyBhcHBlbmQgYSBwYXJhbWV0ZXIgaW5jbHVkZUVuZD10cnVlXG4gICAgICAgIGFyZ3MucHVzaCh0cnVlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJhbmdlLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgIH1cbiAgfSk7XG59LCB7XG4gIGlzVHJhbnNmb3JtRnVuY3Rpb246IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVSYW5nZVRyYW5zZm9ybSA9IGNyZWF0ZVJhbmdlVHJhbnNmb3JtOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVSb3dUcmFuc2Zvcm0gPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX3JvdyA9IHJlcXVpcmUoXCIuLi8uLi9mdW5jdGlvbi9tYXRyaXgvcm93XCIpO1xuXG52YXIgX2Vycm9yVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vdXRpbHMvZXJyb3JUcmFuc2Zvcm1cIik7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBuYW1lID0gJ3Jvdyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdJbmRleCcsICdtYXRyaXgnLCAncmFuZ2UnXTtcbi8qKlxuICogQXR0YWNoIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIHRvIG1hdHJpeC5jb2x1bW5cbiAqIEFkZHMgYSBwcm9wZXJ0eSB0cmFuc2Zvcm0gY29udGFpbmluZyB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uLlxuICpcbiAqIFRoaXMgdHJhbnNmb3JtIGNoYW5nZWQgdGhlIGxhc3QgYGluZGV4YCBwYXJhbWV0ZXIgb2YgZnVuY3Rpb24gY29sdW1uXG4gKiBmcm9tIHplcm8tYmFzZWQgdG8gb25lLWJhc2VkXG4gKi9cblxudmFyIGNyZWF0ZVJvd1RyYW5zZm9ybSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBJbmRleCA9IF9yZWYuSW5kZXgsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIHJhbmdlID0gX3JlZi5yYW5nZTtcbiAgdmFyIHJvdyA9ICgwLCBfcm93LmNyZWF0ZVJvdykoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBJbmRleDogSW5kZXgsXG4gICAgbWF0cml4OiBtYXRyaXgsXG4gICAgcmFuZ2U6IHJhbmdlXG4gIH0pOyAvLyBAc2VlOiBjb21tZW50IG9mIHJvdyBpdHNlbGZcblxuICByZXR1cm4gdHlwZWQoJ3JvdycsIHtcbiAgICAnLi4uYW55JzogZnVuY3Rpb24gYW55KGFyZ3MpIHtcbiAgICAgIC8vIGNoYW5nZSBsYXN0IGFyZ3VtZW50IGZyb20gemVyby1iYXNlZCB0byBvbmUtYmFzZWRcbiAgICAgIHZhciBsYXN0SW5kZXggPSBhcmdzLmxlbmd0aCAtIDE7XG4gICAgICB2YXIgbGFzdCA9IGFyZ3NbbGFzdEluZGV4XTtcblxuICAgICAgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKGxhc3QpKSB7XG4gICAgICAgIGFyZ3NbbGFzdEluZGV4XSA9IGxhc3QgLSAxO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gcm93LmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93ICgwLCBfZXJyb3JUcmFuc2Zvcm0uZXJyb3JUcmFuc2Zvcm0pKGVycik7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn0sIHtcbiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJvd1RyYW5zZm9ybSA9IGNyZWF0ZVJvd1RyYW5zZm9ybTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3RkVHJhbnNmb3JtID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9zdGQgPSByZXF1aXJlKFwiLi4vLi4vZnVuY3Rpb24vc3RhdGlzdGljcy9zdGRcIik7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZXJyb3JUcmFuc2Zvcm0gPSByZXF1aXJlKFwiLi91dGlscy9lcnJvclRyYW5zZm9ybVwiKTtcblxudmFyIG5hbWUgPSAnc3RkJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ3NxcnQnLCAndmFyaWFuY2UnXTtcbi8qKlxuICogQXR0YWNoIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIHRvIG1hdGguc3RkXG4gKiBBZGRzIGEgcHJvcGVydHkgdHJhbnNmb3JtIGNvbnRhaW5pbmcgdGhlIHRyYW5zZm9ybSBmdW5jdGlvbi5cbiAqXG4gKiBUaGlzIHRyYW5zZm9ybSBjaGFuZ2VkIHRoZSBgZGltYCBwYXJhbWV0ZXIgb2YgZnVuY3Rpb24gc3RkXG4gKiBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvIGJhc2VkXG4gKi9cblxudmFyIGNyZWF0ZVN0ZFRyYW5zZm9ybSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBzcXJ0ID0gX3JlZi5zcXJ0LFxuICAgICAgdmFyaWFuY2UgPSBfcmVmLnZhcmlhbmNlO1xuICB2YXIgc3RkID0gKDAsIF9zdGQuY3JlYXRlU3RkKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIHNxcnQ6IHNxcnQsXG4gICAgdmFyaWFuY2U6IHZhcmlhbmNlXG4gIH0pO1xuICByZXR1cm4gdHlwZWQoJ3N0ZCcsIHtcbiAgICAnLi4uYW55JzogZnVuY3Rpb24gYW55KGFyZ3MpIHtcbiAgICAgIC8vIGNoYW5nZSBsYXN0IGFyZ3VtZW50IGRpbSBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvLWJhc2VkXG4gICAgICBpZiAoYXJncy5sZW5ndGggPj0gMiAmJiAoMCwgX2lzLmlzQ29sbGVjdGlvbikoYXJnc1swXSkpIHtcbiAgICAgICAgdmFyIGRpbSA9IGFyZ3NbMV07XG5cbiAgICAgICAgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKGRpbSkpIHtcbiAgICAgICAgICBhcmdzWzFdID0gZGltIC0gMTtcbiAgICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShkaW0pKSB7XG4gICAgICAgICAgYXJnc1sxXSA9IGRpbS5taW51cygxKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gc3RkLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93ICgwLCBfZXJyb3JUcmFuc2Zvcm0uZXJyb3JUcmFuc2Zvcm0pKGVycik7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn0sIHtcbiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVN0ZFRyYW5zZm9ybSA9IGNyZWF0ZVN0ZFRyYW5zZm9ybTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3Vic2V0VHJhbnNmb3JtID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9lcnJvclRyYW5zZm9ybSA9IHJlcXVpcmUoXCIuL3V0aWxzL2Vycm9yVHJhbnNmb3JtXCIpO1xuXG52YXIgX3N1YnNldCA9IHJlcXVpcmUoXCIuLi8uLi9mdW5jdGlvbi9tYXRyaXgvc3Vic2V0XCIpO1xuXG52YXIgbmFtZSA9ICdzdWJzZXQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4J107XG52YXIgY3JlYXRlU3Vic2V0VHJhbnNmb3JtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4O1xuICB2YXIgc3Vic2V0ID0gKDAsIF9zdWJzZXQuY3JlYXRlU3Vic2V0KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIG1hdHJpeDogbWF0cml4XG4gIH0pO1xuICAvKipcbiAgICogQXR0YWNoIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIHRvIG1hdGguc3Vic2V0XG4gICAqIEFkZHMgYSBwcm9wZXJ0eSB0cmFuc2Zvcm0gY29udGFpbmluZyB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBUaGlzIHRyYW5zZm9ybSBjcmVhdGVzIGEgcmFuZ2Ugd2hpY2ggaW5jbHVkZXMgdGhlIGVuZCB2YWx1ZVxuICAgKi9cblxuICByZXR1cm4gdHlwZWQoJ3N1YnNldCcsIHtcbiAgICAnLi4uYW55JzogZnVuY3Rpb24gYW55KGFyZ3MpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBzdWJzZXQuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgKDAsIF9lcnJvclRyYW5zZm9ybS5lcnJvclRyYW5zZm9ybSkoZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufSwge1xuICBpc1RyYW5zZm9ybUZ1bmN0aW9uOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3Vic2V0VHJhbnNmb3JtID0gY3JlYXRlU3Vic2V0VHJhbnNmb3JtOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTdW1UcmFuc2Zvcm0gPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2Vycm9yVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vdXRpbHMvZXJyb3JUcmFuc2Zvcm1cIik7XG5cbnZhciBfc3VtID0gcmVxdWlyZShcIi4uLy4uL2Z1bmN0aW9uL3N0YXRpc3RpY3Mvc3VtXCIpO1xuXG4vKipcbiAqIEF0dGFjaCBhIHRyYW5zZm9ybSBmdW5jdGlvbiB0byBtYXRoLnN1bVxuICogQWRkcyBhIHByb3BlcnR5IHRyYW5zZm9ybSBjb250YWluaW5nIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24uXG4gKlxuICogVGhpcyB0cmFuc2Zvcm0gY2hhbmdlZCB0aGUgbGFzdCBgZGltYCBwYXJhbWV0ZXIgb2YgZnVuY3Rpb24gbWVhblxuICogZnJvbSBvbmUtYmFzZWQgdG8gemVybyBiYXNlZFxuICovXG52YXIgbmFtZSA9ICdzdW0nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ2FkZCcsICc/YmlnbnVtYmVyJywgJz9mcmFjdGlvbiddO1xudmFyIGNyZWF0ZVN1bVRyYW5zZm9ybSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIGFkZCA9IF9yZWYuYWRkLFxuICAgICAgYmlnbnVtYmVyID0gX3JlZi5iaWdudW1iZXIsXG4gICAgICBmcmFjdGlvbiA9IF9yZWYuZnJhY3Rpb247XG4gIHZhciBzdW0gPSAoMCwgX3N1bS5jcmVhdGVTdW0pKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgY29uZmlnOiBjb25maWcsXG4gICAgYWRkOiBhZGQsXG4gICAgYmlnbnVtYmVyOiBiaWdudW1iZXIsXG4gICAgZnJhY3Rpb246IGZyYWN0aW9uXG4gIH0pO1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICcuLi5hbnknOiBmdW5jdGlvbiBhbnkoYXJncykge1xuICAgICAgLy8gY2hhbmdlIGxhc3QgYXJndW1lbnQgZGltIGZyb20gb25lLWJhc2VkIHRvIHplcm8tYmFzZWRcbiAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMiAmJiAoMCwgX2lzLmlzQ29sbGVjdGlvbikoYXJnc1swXSkpIHtcbiAgICAgICAgdmFyIGRpbSA9IGFyZ3NbMV07XG5cbiAgICAgICAgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKGRpbSkpIHtcbiAgICAgICAgICBhcmdzWzFdID0gZGltIC0gMTtcbiAgICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShkaW0pKSB7XG4gICAgICAgICAgYXJnc1sxXSA9IGRpbS5taW51cygxKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gc3VtLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93ICgwLCBfZXJyb3JUcmFuc2Zvcm0uZXJyb3JUcmFuc2Zvcm0pKGVycik7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn0sIHtcbiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVN1bVRyYW5zZm9ybSA9IGNyZWF0ZVN1bVRyYW5zZm9ybTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tcGlsZUlubGluZUV4cHJlc3Npb24gPSBjb21waWxlSW5saW5lRXhwcmVzc2lvbjtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9pc1wiKTtcblxuLyoqXG4gKiBDb21waWxlIGFuIGlubGluZSBleHByZXNzaW9uIGxpa2UgXCJ4ID4gMFwiXG4gKiBAcGFyYW0ge05vZGV9IGV4cHJlc3Npb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXRoXG4gKiBAcGFyYW0ge09iamVjdH0gc2NvcGVcbiAqIEByZXR1cm4ge2Z1bmN0aW9ufSBSZXR1cm5zIGEgZnVuY3Rpb24gd2l0aCBvbmUgYXJndW1lbnQgd2hpY2ggZmlsbHMgaW4gdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkIHZhcmlhYmxlIChsaWtlIFwieFwiKSBhbmQgZXZhbHVhdGVzIHRoZSBleHByZXNzaW9uXG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGVJbmxpbmVFeHByZXNzaW9uKGV4cHJlc3Npb24sIG1hdGgsIHNjb3BlKSB7XG4gIC8vIGZpbmQgYW4gdW5kZWZpbmVkIHN5bWJvbFxuICB2YXIgc3ltYm9sID0gZXhwcmVzc2lvbi5maWx0ZXIoZnVuY3Rpb24gKG5vZGUpIHtcbiAgICByZXR1cm4gKDAsIF9pcy5pc1N5bWJvbE5vZGUpKG5vZGUpICYmICEobm9kZS5uYW1lIGluIG1hdGgpICYmICEobm9kZS5uYW1lIGluIHNjb3BlKTtcbiAgfSlbMF07XG5cbiAgaWYgKCFzeW1ib2wpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHVuZGVmaW5lZCB2YXJpYWJsZSBmb3VuZCBpbiBpbmxpbmUgZXhwcmVzc2lvbiBcIicgKyBleHByZXNzaW9uICsgJ1wiJyk7XG4gIH0gLy8gY3JlYXRlIGEgdGVzdCBmdW5jdGlvbiBmb3IgdGhpcyBlcXVhdGlvblxuXG5cbiAgdmFyIG5hbWUgPSBzeW1ib2wubmFtZTsgLy8gdmFyaWFibGUgbmFtZVxuXG4gIHZhciBzdWJTY29wZSA9IE9iamVjdC5jcmVhdGUoc2NvcGUpO1xuICB2YXIgZXEgPSBleHByZXNzaW9uLmNvbXBpbGUoKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlubGluZUV4cHJlc3Npb24oeCkge1xuICAgIHN1YlNjb3BlW25hbWVdID0geDtcbiAgICByZXR1cm4gZXEuZXZhbHVhdGUoc3ViU2NvcGUpO1xuICB9O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lcnJvclRyYW5zZm9ybSA9IGVycm9yVHJhbnNmb3JtO1xuXG52YXIgX0luZGV4RXJyb3IgPSByZXF1aXJlKFwiLi4vLi4vLi4vZXJyb3IvSW5kZXhFcnJvclwiKTtcblxuLyoqXG4gKiBUcmFuc2Zvcm0gemVyby1iYXNlZCBpbmRpY2VzIHRvIG9uZS1iYXNlZCBpbmRpY2VzIGluIGVycm9yc1xuICogQHBhcmFtIHtFcnJvcn0gZXJyXG4gKiBAcmV0dXJucyB7RXJyb3IgfCBJbmRleEVycm9yfSBSZXR1cm5zIHRoZSB0cmFuc2Zvcm1lZCBlcnJvclxuICovXG5mdW5jdGlvbiBlcnJvclRyYW5zZm9ybShlcnIpIHtcbiAgaWYgKGVyciAmJiBlcnIuaXNJbmRleEVycm9yKSB7XG4gICAgcmV0dXJuIG5ldyBfSW5kZXhFcnJvci5JbmRleEVycm9yKGVyci5pbmRleCArIDEsIGVyci5taW4gKyAxLCBlcnIubWF4ICE9PSB1bmRlZmluZWQgPyBlcnIubWF4ICsgMSA6IHVuZGVmaW5lZCk7XG4gIH1cblxuICByZXR1cm4gZXJyO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVWYXJpYW5jZVRyYW5zZm9ybSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZXJyb3JUcmFuc2Zvcm0gPSByZXF1aXJlKFwiLi91dGlscy9lcnJvclRyYW5zZm9ybVwiKTtcblxudmFyIF92YXJpYW5jZSA9IHJlcXVpcmUoXCIuLi8uLi9mdW5jdGlvbi9zdGF0aXN0aWNzL3ZhcmlhbmNlXCIpO1xuXG52YXIgbmFtZSA9ICd2YXJpYW5jZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdhZGQnLCAnc3VidHJhY3QnLCAnbXVsdGlwbHknLCAnZGl2aWRlJywgJ2FwcGx5JywgJ2lzTmFOJ107XG4vKipcbiAqIEF0dGFjaCBhIHRyYW5zZm9ybSBmdW5jdGlvbiB0byBtYXRoLnZhclxuICogQWRkcyBhIHByb3BlcnR5IHRyYW5zZm9ybSBjb250YWluaW5nIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24uXG4gKlxuICogVGhpcyB0cmFuc2Zvcm0gY2hhbmdlZCB0aGUgYGRpbWAgcGFyYW1ldGVyIG9mIGZ1bmN0aW9uIHZhclxuICogZnJvbSBvbmUtYmFzZWQgdG8gemVybyBiYXNlZFxuICovXG5cbnZhciBjcmVhdGVWYXJpYW5jZVRyYW5zZm9ybSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBhZGQgPSBfcmVmLmFkZCxcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCxcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSxcbiAgICAgIGRpdmlkZSA9IF9yZWYuZGl2aWRlLFxuICAgICAgYXBwbHkgPSBfcmVmLmFwcGx5LFxuICAgICAgaXNOYU4gPSBfcmVmLmlzTmFOO1xuICB2YXIgdmFyaWFuY2UgPSAoMCwgX3ZhcmlhbmNlLmNyZWF0ZVZhcmlhbmNlKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGFkZDogYWRkLFxuICAgIHN1YnRyYWN0OiBzdWJ0cmFjdCxcbiAgICBtdWx0aXBseTogbXVsdGlwbHksXG4gICAgZGl2aWRlOiBkaXZpZGUsXG4gICAgYXBwbHk6IGFwcGx5LFxuICAgIGlzTmFOOiBpc05hTlxuICB9KTtcbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnLi4uYW55JzogZnVuY3Rpb24gYW55KGFyZ3MpIHtcbiAgICAgIC8vIGNoYW5nZSBsYXN0IGFyZ3VtZW50IGRpbSBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvLWJhc2VkXG4gICAgICBpZiAoYXJncy5sZW5ndGggPj0gMiAmJiAoMCwgX2lzLmlzQ29sbGVjdGlvbikoYXJnc1swXSkpIHtcbiAgICAgICAgdmFyIGRpbSA9IGFyZ3NbMV07XG5cbiAgICAgICAgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKGRpbSkpIHtcbiAgICAgICAgICBhcmdzWzFdID0gZGltIC0gMTtcbiAgICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShkaW0pKSB7XG4gICAgICAgICAgYXJnc1sxXSA9IGRpbS5taW51cygxKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdmFyaWFuY2UuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgKDAsIF9lcnJvclRyYW5zZm9ybS5lcnJvclRyYW5zZm9ybSkoZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufSwge1xuICBpc1RyYW5zZm9ybUZ1bmN0aW9uOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlVmFyaWFuY2VUcmFuc2Zvcm0gPSBjcmVhdGVWYXJpYW5jZVRyYW5zZm9ybTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVR5cGVkXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF90eXBlZC5jcmVhdGVUeXBlZDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVSZXN1bHRTZXRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX1Jlc3VsdFNldC5jcmVhdGVSZXN1bHRTZXQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQmlnTnVtYmVyQ2xhc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0JpZ051bWJlci5jcmVhdGVCaWdOdW1iZXJDbGFzcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDb21wbGV4Q2xhc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0NvbXBsZXguY3JlYXRlQ29tcGxleENsYXNzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUZyYWN0aW9uQ2xhc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0ZyYWN0aW9uLmNyZWF0ZUZyYWN0aW9uQ2xhc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUmFuZ2VDbGFzc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfUmFuZ2UuY3JlYXRlUmFuZ2VDbGFzcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVNYXRyaXhDbGFzc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfTWF0cml4LmNyZWF0ZU1hdHJpeENsYXNzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZURlbnNlTWF0cml4Q2xhc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0RlbnNlTWF0cml4LmNyZWF0ZURlbnNlTWF0cml4Q2xhc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ2xvbmVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2Nsb25lLmNyZWF0ZUNsb25lO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUlzSW50ZWdlclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXNJbnRlZ2VyLmNyZWF0ZUlzSW50ZWdlcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVJc05lZ2F0aXZlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pc05lZ2F0aXZlLmNyZWF0ZUlzTmVnYXRpdmU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSXNOdW1lcmljXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pc051bWVyaWMuY3JlYXRlSXNOdW1lcmljO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUhhc051bWVyaWNWYWx1ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaGFzTnVtZXJpY1ZhbHVlLmNyZWF0ZUhhc051bWVyaWNWYWx1ZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVJc1Bvc2l0aXZlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pc1Bvc2l0aXZlLmNyZWF0ZUlzUG9zaXRpdmU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSXNaZXJvXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pc1plcm8uY3JlYXRlSXNaZXJvO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUlzTmFOXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pc05hTi5jcmVhdGVJc05hTjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVUeXBlT2ZcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3R5cGVPZi5jcmVhdGVUeXBlT2Y7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRGVwcmVjYXRlZFR5cGVvZlwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfdHlwZU9mLmNyZWF0ZURlcHJlY2F0ZWRUeXBlb2Y7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRXF1YWxTY2FsYXJcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2VxdWFsU2NhbGFyLmNyZWF0ZUVxdWFsU2NhbGFyO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNwYXJzZU1hdHJpeENsYXNzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9TcGFyc2VNYXRyaXguY3JlYXRlU3BhcnNlTWF0cml4Q2xhc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTnVtYmVyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9udW1iZXIuY3JlYXRlTnVtYmVyO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVN0cmluZ1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc3RyaW5nLmNyZWF0ZVN0cmluZztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVCb29sZWFuXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9ib29sZWFuLmNyZWF0ZUJvb2xlYW47XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQmlnbnVtYmVyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9iaWdudW1iZXIuY3JlYXRlQmlnbnVtYmVyO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvbXBsZXhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbXBsZXguY3JlYXRlQ29tcGxleDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVGcmFjdGlvblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZnJhY3Rpb24uY3JlYXRlRnJhY3Rpb247XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTWF0cml4XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9tYXRyaXguY3JlYXRlTWF0cml4O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNwbGl0VW5pdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc3BsaXRVbml0LmNyZWF0ZVNwbGl0VW5pdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVVbmFyeU1pbnVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF91bmFyeU1pbnVzLmNyZWF0ZVVuYXJ5TWludXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlVW5hcnlQbHVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF91bmFyeVBsdXMuY3JlYXRlVW5hcnlQbHVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUFic1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYWJzLmNyZWF0ZUFicztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBcHBseVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYXBwbHkuY3JlYXRlQXBwbHk7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQWRkU2NhbGFyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9hZGRTY2FsYXIuY3JlYXRlQWRkU2NhbGFyO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNicnRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NicnQuY3JlYXRlQ2JydDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDZWlsXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jZWlsLmNyZWF0ZUNlaWw7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ3ViZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY3ViZS5jcmVhdGVDdWJlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUV4cFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZXhwLmNyZWF0ZUV4cDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVFeHBtMVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZXhwbS5jcmVhdGVFeHBtMTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVGaXhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2ZpeC5jcmVhdGVGaXg7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRmxvb3JcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2Zsb29yLmNyZWF0ZUZsb29yO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUdjZFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZ2NkLmNyZWF0ZUdjZDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVMY21cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2xjbS5jcmVhdGVMY207XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTG9nMTBcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2xvZy5jcmVhdGVMb2cxMDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVMb2cyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9sb2cyLmNyZWF0ZUxvZzI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTW9kXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9tb2QuY3JlYXRlTW9kO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU11bHRpcGx5U2NhbGFyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9tdWx0aXBseVNjYWxhci5jcmVhdGVNdWx0aXBseVNjYWxhcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVNdWx0aXBseVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbXVsdGlwbHkuY3JlYXRlTXVsdGlwbHk7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTnRoUm9vdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbnRoUm9vdC5jcmVhdGVOdGhSb290O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNpZ25cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3NpZ24uY3JlYXRlU2lnbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTcXJ0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zcXJ0LmNyZWF0ZVNxcnQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU3F1YXJlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zcXVhcmUuY3JlYXRlU3F1YXJlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVN1YnRyYWN0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zdWJ0cmFjdC5jcmVhdGVTdWJ0cmFjdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVYZ2NkXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF94Z2NkLmNyZWF0ZVhnY2Q7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRG90TXVsdGlwbHlcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RvdE11bHRpcGx5LmNyZWF0ZURvdE11bHRpcGx5O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUJpdEFuZFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYml0QW5kLmNyZWF0ZUJpdEFuZDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVCaXROb3RcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2JpdE5vdC5jcmVhdGVCaXROb3Q7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQml0T3JcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2JpdE9yLmNyZWF0ZUJpdE9yO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUJpdFhvclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYml0WG9yLmNyZWF0ZUJpdFhvcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBcmdcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2FyZy5jcmVhdGVBcmc7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ29ualwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29uai5jcmVhdGVDb25qO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUltXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pbS5jcmVhdGVJbTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVSZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcmUuY3JlYXRlUmU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTm90XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9ub3QuY3JlYXRlTm90O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU9yXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9vci5jcmVhdGVPcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVYb3JcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3hvci5jcmVhdGVYb3I7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ29uY2F0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb25jYXQuY3JlYXRlQ29uY2F0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvbHVtblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29sdW1uLmNyZWF0ZUNvbHVtbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDcm9zc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY3Jvc3MuY3JlYXRlQ3Jvc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRGlhZ1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGlhZy5jcmVhdGVEaWFnO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUV5ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZXllLmNyZWF0ZUV5ZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVGaWx0ZXJcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2ZpbHRlci5jcmVhdGVGaWx0ZXI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRmxhdHRlblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZmxhdHRlbi5jcmVhdGVGbGF0dGVuO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUZvckVhY2hcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2ZvckVhY2guY3JlYXRlRm9yRWFjaDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVHZXRNYXRyaXhEYXRhVHlwZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZ2V0TWF0cml4RGF0YVR5cGUuY3JlYXRlR2V0TWF0cml4RGF0YVR5cGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSWRlbnRpdHlcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lkZW50aXR5LmNyZWF0ZUlkZW50aXR5O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUtyb25cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2tyb24uY3JlYXRlS3JvbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVNYXBcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX21hcC5jcmVhdGVNYXA7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlT25lc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfb25lcy5jcmVhdGVPbmVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVJhbmdlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9yYW5nZS5jcmVhdGVSYW5nZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVSZXNoYXBlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9yZXNoYXBlLmNyZWF0ZVJlc2hhcGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUmVzaXplXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9yZXNpemUuY3JlYXRlUmVzaXplO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVJvd1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcm93LmNyZWF0ZVJvdztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTaXplXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zaXplLmNyZWF0ZVNpemU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU3F1ZWV6ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc3F1ZWV6ZS5jcmVhdGVTcXVlZXplO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVN1YnNldFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc3Vic2V0LmNyZWF0ZVN1YnNldDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVUcmFuc3Bvc2VcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3RyYW5zcG9zZS5jcmVhdGVUcmFuc3Bvc2U7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ3RyYW5zcG9zZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY3RyYW5zcG9zZS5jcmVhdGVDdHJhbnNwb3NlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVplcm9zXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF96ZXJvcy5jcmVhdGVaZXJvcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVFcmZcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2VyZi5jcmVhdGVFcmY7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTW9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbW9kZS5jcmVhdGVNb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVByb2RcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3Byb2QuY3JlYXRlUHJvZDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVGb3JtYXRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2Zvcm1hdC5jcmVhdGVGb3JtYXQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUHJpbnRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3ByaW50LmNyZWF0ZVByaW50O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVRvXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF90by5jcmVhdGVUbztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVJc1ByaW1lXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pc1ByaW1lLmNyZWF0ZUlzUHJpbWU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTnVtZXJpY1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbnVtZXJpYy5jcmVhdGVOdW1lcmljO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZURpdmlkZVNjYWxhclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGl2aWRlU2NhbGFyLmNyZWF0ZURpdmlkZVNjYWxhcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVQb3dcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3Bvdy5jcmVhdGVQb3c7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUm91bmRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3JvdW5kLmNyZWF0ZVJvdW5kO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUxvZ1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbG9nMy5jcmVhdGVMb2c7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTG9nMXBcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2xvZzFwLmNyZWF0ZUxvZzFwO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU50aFJvb3RzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9udGhSb290cy5jcmVhdGVOdGhSb290cztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVEb3RQb3dcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RvdFBvdy5jcmVhdGVEb3RQb3c7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRG90RGl2aWRlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kb3REaXZpZGUuY3JlYXRlRG90RGl2aWRlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUxzb2x2ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbHNvbHZlLmNyZWF0ZUxzb2x2ZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVVc29sdmVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3Vzb2x2ZS5jcmVhdGVVc29sdmU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTGVmdFNoaWZ0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9sZWZ0U2hpZnQuY3JlYXRlTGVmdFNoaWZ0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVJpZ2h0QXJpdGhTaGlmdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcmlnaHRBcml0aFNoaWZ0LmNyZWF0ZVJpZ2h0QXJpdGhTaGlmdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVSaWdodExvZ1NoaWZ0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9yaWdodExvZ1NoaWZ0LmNyZWF0ZVJpZ2h0TG9nU2hpZnQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQW5kXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9hbmQuY3JlYXRlQW5kO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvbXBhcmVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbXBhcmUuY3JlYXRlQ29tcGFyZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDb21wYXJlTmF0dXJhbFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29tcGFyZU5hdHVyYWwuY3JlYXRlQ29tcGFyZU5hdHVyYWw7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ29tcGFyZVRleHRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbXBhcmVUZXh0LmNyZWF0ZUNvbXBhcmVUZXh0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUVxdWFsXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9lcXVhbC5jcmVhdGVFcXVhbDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVFcXVhbFRleHRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2VxdWFsVGV4dC5jcmVhdGVFcXVhbFRleHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU21hbGxlclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc21hbGxlci5jcmVhdGVTbWFsbGVyO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNtYWxsZXJFcVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc21hbGxlckVxLmNyZWF0ZVNtYWxsZXJFcTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVMYXJnZXJcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2xhcmdlci5jcmVhdGVMYXJnZXI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTGFyZ2VyRXFcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2xhcmdlckVxLmNyZWF0ZUxhcmdlckVxO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZURlZXBFcXVhbFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVlcEVxdWFsLmNyZWF0ZURlZXBFcXVhbDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVVbmVxdWFsXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF91bmVxdWFsLmNyZWF0ZVVuZXF1YWw7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUGFydGl0aW9uU2VsZWN0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9wYXJ0aXRpb25TZWxlY3QuY3JlYXRlUGFydGl0aW9uU2VsZWN0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNvcnRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3NvcnQuY3JlYXRlU29ydDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVNYXhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX21heC5jcmVhdGVNYXg7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTWluXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9taW4uY3JlYXRlTWluO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUltbXV0YWJsZURlbnNlTWF0cml4Q2xhc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0ltbXV0YWJsZURlbnNlTWF0cml4LmNyZWF0ZUltbXV0YWJsZURlbnNlTWF0cml4Q2xhc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSW5kZXhDbGFzc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfTWF0cml4SW5kZXguY3JlYXRlSW5kZXhDbGFzcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVGaWJvbmFjY2lIZWFwQ2xhc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0ZpYm9uYWNjaUhlYXAuY3JlYXRlRmlib25hY2NpSGVhcENsYXNzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNwYUNsYXNzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9TcGEuY3JlYXRlU3BhQ2xhc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlVW5pdENsYXNzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9Vbml0LmNyZWF0ZVVuaXRDbGFzcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVVbml0RnVuY3Rpb25cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3VuaXQuY3JlYXRlVW5pdEZ1bmN0aW9uO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNwYXJzZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc3BhcnNlLmNyZWF0ZVNwYXJzZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDcmVhdGVVbml0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jcmVhdGVVbml0LmNyZWF0ZUNyZWF0ZVVuaXQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQWNvc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYWNvcy5jcmVhdGVBY29zO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUFjb3NoXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9hY29zaC5jcmVhdGVBY29zaDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBY290XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9hY290LmNyZWF0ZUFjb3Q7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQWNvdGhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2Fjb3RoLmNyZWF0ZUFjb3RoO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUFjc2NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2Fjc2MuY3JlYXRlQWNzYztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBY3NjaFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYWNzY2guY3JlYXRlQWNzY2g7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQXNlY1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYXNlYy5jcmVhdGVBc2VjO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUFzZWNoXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9hc2VjaC5jcmVhdGVBc2VjaDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBc2luXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9hc2luLmNyZWF0ZUFzaW47XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQXNpbmhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2FzaW5oLmNyZWF0ZUFzaW5oO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUF0YW5cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2F0YW4uY3JlYXRlQXRhbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBdGFuMlwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYXRhbjIuY3JlYXRlQXRhbjI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQXRhbmhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2F0YW5oLmNyZWF0ZUF0YW5oO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29zLmNyZWF0ZUNvcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDb3NoXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb3NoLmNyZWF0ZUNvc2g7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ290XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb3QuY3JlYXRlQ290O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvdGhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvdGguY3JlYXRlQ290aDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDc2NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NzYy5jcmVhdGVDc2M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ3NjaFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY3NjaC5jcmVhdGVDc2NoO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNlY1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc2VjLmNyZWF0ZVNlYztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTZWNoXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zZWNoLmNyZWF0ZVNlY2g7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU2luXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zaW4uY3JlYXRlU2luO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNpbmhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3NpbmguY3JlYXRlU2luaDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVUYW5cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3Rhbi5jcmVhdGVUYW47XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlVGFuaFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfdGFuaC5jcmVhdGVUYW5oO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNldENhcnRlc2lhblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc2V0Q2FydGVzaWFuLmNyZWF0ZVNldENhcnRlc2lhbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTZXREaWZmZXJlbmNlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zZXREaWZmZXJlbmNlLmNyZWF0ZVNldERpZmZlcmVuY2U7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU2V0RGlzdGluY3RcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3NldERpc3RpbmN0LmNyZWF0ZVNldERpc3RpbmN0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNldEludGVyc2VjdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc2V0SW50ZXJzZWN0LmNyZWF0ZVNldEludGVyc2VjdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTZXRJc1N1YnNldFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc2V0SXNTdWJzZXQuY3JlYXRlU2V0SXNTdWJzZXQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU2V0TXVsdGlwbGljaXR5XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zZXRNdWx0aXBsaWNpdHkuY3JlYXRlU2V0TXVsdGlwbGljaXR5O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNldFBvd2Vyc2V0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zZXRQb3dlcnNldC5jcmVhdGVTZXRQb3dlcnNldDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTZXRTaXplXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zZXRTaXplLmNyZWF0ZVNldFNpemU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU2V0U3ltRGlmZmVyZW5jZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc2V0U3ltRGlmZmVyZW5jZS5jcmVhdGVTZXRTeW1EaWZmZXJlbmNlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNldFVuaW9uXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zZXRVbmlvbi5jcmVhdGVTZXRVbmlvbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBZGRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2FkZC5jcmVhdGVBZGQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSHlwb3RcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2h5cG90LmNyZWF0ZUh5cG90O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU5vcm1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX25vcm0uY3JlYXRlTm9ybTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVEb3RcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RvdC5jcmVhdGVEb3Q7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlVHJhY2VcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3RyYWNlLmNyZWF0ZVRyYWNlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUluZGV4XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9mdW5jdGlvbi5jcmVhdGVJbmRleDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVOb2RlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9Ob2RlLmNyZWF0ZU5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQWNjZXNzb3JOb2RlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9BY2Nlc3Nvck5vZGUuY3JlYXRlQWNjZXNzb3JOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUFycmF5Tm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfQXJyYXlOb2RlLmNyZWF0ZUFycmF5Tm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBc3NpZ25tZW50Tm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfQXNzaWdubWVudE5vZGUuY3JlYXRlQXNzaWdubWVudE5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQmxvY2tOb2RlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9CbG9ja05vZGUuY3JlYXRlQmxvY2tOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvbmRpdGlvbmFsTm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfQ29uZGl0aW9uYWxOb2RlLmNyZWF0ZUNvbmRpdGlvbmFsTm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDb25zdGFudE5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0NvbnN0YW50Tm9kZS5jcmVhdGVDb25zdGFudE5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZS5jcmVhdGVGdW5jdGlvbkFzc2lnbm1lbnROb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUluZGV4Tm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfSW5kZXhOb2RlLmNyZWF0ZUluZGV4Tm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVPYmplY3ROb2RlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9PYmplY3ROb2RlLmNyZWF0ZU9iamVjdE5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlT3BlcmF0b3JOb2RlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9PcGVyYXRvck5vZGUuY3JlYXRlT3BlcmF0b3JOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVBhcmVudGhlc2lzTm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfUGFyZW50aGVzaXNOb2RlLmNyZWF0ZVBhcmVudGhlc2lzTm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVSYW5nZU5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX1JhbmdlTm9kZS5jcmVhdGVSYW5nZU5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUmVsYXRpb25hbE5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX1JlbGF0aW9uYWxOb2RlLmNyZWF0ZVJlbGF0aW9uYWxOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVN5bWJvbE5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX1N5bWJvbE5vZGUuY3JlYXRlU3ltYm9sTm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVGdW5jdGlvbk5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0Z1bmN0aW9uTm9kZS5jcmVhdGVGdW5jdGlvbk5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUGFyc2VcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BhcnNlLmNyZWF0ZVBhcnNlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvbXBpbGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbXBpbGUuY3JlYXRlQ29tcGlsZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVFdmFsdWF0ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZXZhbHVhdGUuY3JlYXRlRXZhbHVhdGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRGVwcmVjYXRlZEV2YWxcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2V2YWwuY3JlYXRlRGVwcmVjYXRlZEV2YWw7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUGFyc2VyQ2xhc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX1BhcnNlci5jcmVhdGVQYXJzZXJDbGFzcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVQYXJzZXJcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BhcnNlci5jcmVhdGVQYXJzZXI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTHVwXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9sdXAuY3JlYXRlTHVwO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVFyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9xci5jcmVhdGVRcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTbHVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3NsdS5jcmVhdGVTbHU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTHVzb2x2ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbHVzb2x2ZS5jcmVhdGVMdXNvbHZlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUhlbHBDbGFzc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfSGVscC5jcmVhdGVIZWxwQ2xhc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ2hhaW5DbGFzc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfQ2hhaW4uY3JlYXRlQ2hhaW5DbGFzcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVIZWxwXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9oZWxwLmNyZWF0ZUhlbHA7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ2hhaW5cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NoYWluLmNyZWF0ZUNoYWluO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZURldFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGV0LmNyZWF0ZURldDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVJbnZcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2ludi5jcmVhdGVJbnY7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRWlnc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZWlncy5jcmVhdGVFaWdzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUV4cG1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2V4cG0yLmNyZWF0ZUV4cG07XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU3FydG1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3NxcnRtLmNyZWF0ZVNxcnRtO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZURpdmlkZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGl2aWRlLmNyZWF0ZURpdmlkZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVEaXN0YW5jZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGlzdGFuY2UuY3JlYXRlRGlzdGFuY2U7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSW50ZXJzZWN0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pbnRlcnNlY3QuY3JlYXRlSW50ZXJzZWN0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVN1bVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc3VtLmNyZWF0ZVN1bTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVNZWFuXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9tZWFuLmNyZWF0ZU1lYW47XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTWVkaWFuXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9tZWRpYW4uY3JlYXRlTWVkaWFuO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU1hZFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbWFkLmNyZWF0ZU1hZDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVWYXJpYW5jZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfdmFyaWFuY2UuY3JlYXRlVmFyaWFuY2U7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRGVwcmVjYXRlZFZhclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfdmFyaWFuY2UuY3JlYXRlRGVwcmVjYXRlZFZhcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVRdWFudGlsZVNlcVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcXVhbnRpbGVTZXEuY3JlYXRlUXVhbnRpbGVTZXE7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU3RkXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zdGQuY3JlYXRlU3RkO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvbWJpbmF0aW9uc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29tYmluYXRpb25zLmNyZWF0ZUNvbWJpbmF0aW9ucztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDb21iaW5hdGlvbnNXaXRoUmVwXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb21iaW5hdGlvbnNXaXRoUmVwLmNyZWF0ZUNvbWJpbmF0aW9uc1dpdGhSZXA7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlR2FtbWFcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2dhbW1hLmNyZWF0ZUdhbW1hO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUZhY3RvcmlhbFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZmFjdG9yaWFsLmNyZWF0ZUZhY3RvcmlhbDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVLbGRpdmVyZ2VuY2VcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2tsZGl2ZXJnZW5jZS5jcmVhdGVLbGRpdmVyZ2VuY2U7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTXVsdGlub21pYWxcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX211bHRpbm9taWFsLmNyZWF0ZU11bHRpbm9taWFsO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVBlcm11dGF0aW9uc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGVybXV0YXRpb25zLmNyZWF0ZVBlcm11dGF0aW9ucztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVQaWNrUmFuZG9tXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waWNrUmFuZG9tLmNyZWF0ZVBpY2tSYW5kb207XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUmFuZG9tXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9yYW5kb20uY3JlYXRlUmFuZG9tO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVJhbmRvbUludFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcmFuZG9tSW50LmNyZWF0ZVJhbmRvbUludDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTdGlybGluZ1MyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zdGlybGluZ1MuY3JlYXRlU3RpcmxpbmdTMjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVCZWxsTnVtYmVyc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYmVsbE51bWJlcnMuY3JlYXRlQmVsbE51bWJlcnM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ2F0YWxhblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY2F0YWxhbi5jcmVhdGVDYXRhbGFuO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvbXBvc2l0aW9uXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb21wb3NpdGlvbi5jcmVhdGVDb21wb3NpdGlvbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTaW1wbGlmeVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc2ltcGxpZnkuY3JlYXRlU2ltcGxpZnk7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRGVyaXZhdGl2ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVyaXZhdGl2ZS5jcmVhdGVEZXJpdmF0aXZlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVJhdGlvbmFsaXplXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9yYXRpb25hbGl6ZS5jcmVhdGVSYXRpb25hbGl6ZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVSZXZpdmVyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9yZXZpdmVyLmNyZWF0ZVJldml2ZXI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUmVwbGFjZXJcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3JlcGxhY2VyLmNyZWF0ZVJlcGxhY2VyO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbnN0YW50cy5jcmVhdGVFO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVVwcGVyY2FzZUVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbnN0YW50cy5jcmVhdGVVcHBlcmNhc2VFO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUZhbHNlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb25zdGFudHMuY3JlYXRlRmFsc2U7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29uc3RhbnRzLmNyZWF0ZUk7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSW5maW5pdHlcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbnN0YW50cy5jcmVhdGVJbmZpbml0eTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVMTjEwXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb25zdGFudHMuY3JlYXRlTE4xMDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVMTjJcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbnN0YW50cy5jcmVhdGVMTjI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTE9HMTBFXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb25zdGFudHMuY3JlYXRlTE9HMTBFO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUxPRzJFXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb25zdGFudHMuY3JlYXRlTE9HMkU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTmFOXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb25zdGFudHMuY3JlYXRlTmFOO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU51bGxcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbnN0YW50cy5jcmVhdGVOdWxsO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVBoaVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29uc3RhbnRzLmNyZWF0ZVBoaTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVQaVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29uc3RhbnRzLmNyZWF0ZVBpO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVVwcGVyY2FzZVBpXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb25zdGFudHMuY3JlYXRlVXBwZXJjYXNlUGk7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU1FSVDFfMlwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29uc3RhbnRzLmNyZWF0ZVNRUlQxXzI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU1FSVDJcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbnN0YW50cy5jcmVhdGVTUVJUMjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVUYXVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbnN0YW50cy5jcmVhdGVUYXU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlVHJ1ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29uc3RhbnRzLmNyZWF0ZVRydWU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlVmVyc2lvblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29uc3RhbnRzLmNyZWF0ZVZlcnNpb247XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQXRvbWljTWFzc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlQXRvbWljTWFzcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBdm9nYWRyb1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlQXZvZ2Fkcm87XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQm9ock1hZ25ldG9uXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVCb2hyTWFnbmV0b247XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQm9oclJhZGl1c1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlQm9oclJhZGl1cztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVCb2x0em1hbm5cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZUJvbHR6bWFubjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDbGFzc2ljYWxFbGVjdHJvblJhZGl1c1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlQ2xhc3NpY2FsRWxlY3Ryb25SYWRpdXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ29uZHVjdGFuY2VRdWFudHVtXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVDb25kdWN0YW5jZVF1YW50dW07XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ291bG9tYlwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlQ291bG9tYjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVEZXV0ZXJvbk1hc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZURldXRlcm9uTWFzcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVFZmltb3ZGYWN0b3JcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZUVmaW1vdkZhY3RvcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVFbGVjdHJpY0NvbnN0YW50XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVFbGVjdHJpY0NvbnN0YW50O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUVsZWN0cm9uTWFzc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlRWxlY3Ryb25NYXNzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUVsZW1lbnRhcnlDaGFyZ2VcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZUVsZW1lbnRhcnlDaGFyZ2U7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRmFyYWRheVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlRmFyYWRheTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVGZXJtaUNvdXBsaW5nXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVGZXJtaUNvdXBsaW5nO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUZpbmVTdHJ1Y3R1cmVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZUZpbmVTdHJ1Y3R1cmU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRmlyc3RSYWRpYXRpb25cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZUZpcnN0UmFkaWF0aW9uO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUdhc0NvbnN0YW50XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVHYXNDb25zdGFudDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVHcmF2aXRhdGlvbkNvbnN0YW50XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVHcmF2aXRhdGlvbkNvbnN0YW50O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUdyYXZpdHlcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZUdyYXZpdHk7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSGFydHJlZUVuZXJneVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlSGFydHJlZUVuZXJneTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVJbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVJbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUtsaXR6aW5nXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVLbGl0emluZztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVMb3NjaG1pZHRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZUxvc2NobWlkdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVNYWduZXRpY0NvbnN0YW50XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVNYWduZXRpY0NvbnN0YW50O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU1hZ25ldGljRmx1eFF1YW50dW1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZU1hZ25ldGljRmx1eFF1YW50dW07XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTW9sYXJNYXNzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVNb2xhck1hc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTW9sYXJNYXNzQzEyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVNb2xhck1hc3NDMTI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTW9sYXJQbGFuY2tDb25zdGFudFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlTW9sYXJQbGFuY2tDb25zdGFudDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVNb2xhclZvbHVtZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlTW9sYXJWb2x1bWU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTmV1dHJvbk1hc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZU5ldXRyb25NYXNzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU51Y2xlYXJNYWduZXRvblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlTnVjbGVhck1hZ25ldG9uO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVBsYW5ja0NoYXJnZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlUGxhbmNrQ2hhcmdlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVBsYW5ja0NvbnN0YW50XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVQbGFuY2tDb25zdGFudDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVQbGFuY2tMZW5ndGhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZVBsYW5ja0xlbmd0aDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVQbGFuY2tNYXNzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVQbGFuY2tNYXNzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVBsYW5ja1RlbXBlcmF0dXJlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVQbGFuY2tUZW1wZXJhdHVyZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVQbGFuY2tUaW1lXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVQbGFuY2tUaW1lO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVByb3Rvbk1hc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZVByb3Rvbk1hc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUXVhbnR1bU9mQ2lyY3VsYXRpb25cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZVF1YW50dW1PZkNpcmN1bGF0aW9uO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVJlZHVjZWRQbGFuY2tDb25zdGFudFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlUmVkdWNlZFBsYW5ja0NvbnN0YW50O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVJ5ZGJlcmdcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZVJ5ZGJlcmc7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU2Fja3VyVGV0cm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlU2Fja3VyVGV0cm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTZWNvbmRSYWRpYXRpb25cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZVNlY29uZFJhZGlhdGlvbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTcGVlZE9mTGlnaHRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZVNwZWVkT2ZMaWdodDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTdGVmYW5Cb2x0em1hbm5cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZVN0ZWZhbkJvbHR6bWFubjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVUaG9tc29uQ3Jvc3NTZWN0aW9uXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVUaG9tc29uQ3Jvc3NTZWN0aW9uO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVZhY3V1bUltcGVkYW5jZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlVmFjdXVtSW1wZWRhbmNlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVdlYWtNaXhpbmdBbmdsZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlV2Vha01peGluZ0FuZ2xlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVdpZW5EaXNwbGFjZW1lbnRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZVdpZW5EaXNwbGFjZW1lbnQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQXBwbHlUcmFuc2Zvcm1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2FwcGx5Mi5jcmVhdGVBcHBseVRyYW5zZm9ybTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDb2x1bW5UcmFuc2Zvcm1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbHVtbjIuY3JlYXRlQ29sdW1uVHJhbnNmb3JtO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUZpbHRlclRyYW5zZm9ybVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZmlsdGVyMi5jcmVhdGVGaWx0ZXJUcmFuc2Zvcm07XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRm9yRWFjaFRyYW5zZm9ybVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZm9yRWFjaDIuY3JlYXRlRm9yRWFjaFRyYW5zZm9ybTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVJbmRleFRyYW5zZm9ybVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaW5kZXguY3JlYXRlSW5kZXhUcmFuc2Zvcm07XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTWFwVHJhbnNmb3JtXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9tYXAyLmNyZWF0ZU1hcFRyYW5zZm9ybTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVNYXhUcmFuc2Zvcm1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX21heDIuY3JlYXRlTWF4VHJhbnNmb3JtO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU1lYW5UcmFuc2Zvcm1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX21lYW4yLmNyZWF0ZU1lYW5UcmFuc2Zvcm07XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTWluVHJhbnNmb3JtXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9taW4yLmNyZWF0ZU1pblRyYW5zZm9ybTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVSYW5nZVRyYW5zZm9ybVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcmFuZ2UyLmNyZWF0ZVJhbmdlVHJhbnNmb3JtO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVJvd1RyYW5zZm9ybVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcm93Mi5jcmVhdGVSb3dUcmFuc2Zvcm07XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU3Vic2V0VHJhbnNmb3JtXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zdWJzZXQyLmNyZWF0ZVN1YnNldFRyYW5zZm9ybTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDb25jYXRUcmFuc2Zvcm1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbmNhdDIuY3JlYXRlQ29uY2F0VHJhbnNmb3JtO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVN0ZFRyYW5zZm9ybVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc3RkMi5jcmVhdGVTdGRUcmFuc2Zvcm07XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU3VtVHJhbnNmb3JtXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zdW0yLmNyZWF0ZVN1bVRyYW5zZm9ybTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVWYXJpYW5jZVRyYW5zZm9ybVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfdmFyaWFuY2UyLmNyZWF0ZVZhcmlhbmNlVHJhbnNmb3JtO1xuICB9XG59KTtcblxudmFyIF90eXBlZCA9IHJlcXVpcmUoXCIuL2NvcmUvZnVuY3Rpb24vdHlwZWRcIik7XG5cbnZhciBfUmVzdWx0U2V0ID0gcmVxdWlyZShcIi4vdHlwZS9yZXN1bHRzZXQvUmVzdWx0U2V0XCIpO1xuXG52YXIgX0JpZ051bWJlciA9IHJlcXVpcmUoXCIuL3R5cGUvYmlnbnVtYmVyL0JpZ051bWJlclwiKTtcblxudmFyIF9Db21wbGV4ID0gcmVxdWlyZShcIi4vdHlwZS9jb21wbGV4L0NvbXBsZXhcIik7XG5cbnZhciBfRnJhY3Rpb24gPSByZXF1aXJlKFwiLi90eXBlL2ZyYWN0aW9uL0ZyYWN0aW9uXCIpO1xuXG52YXIgX1JhbmdlID0gcmVxdWlyZShcIi4vdHlwZS9tYXRyaXgvUmFuZ2VcIik7XG5cbnZhciBfTWF0cml4ID0gcmVxdWlyZShcIi4vdHlwZS9tYXRyaXgvTWF0cml4XCIpO1xuXG52YXIgX0RlbnNlTWF0cml4ID0gcmVxdWlyZShcIi4vdHlwZS9tYXRyaXgvRGVuc2VNYXRyaXhcIik7XG5cbnZhciBfY2xvbmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy9jbG9uZVwiKTtcblxudmFyIF9pc0ludGVnZXIgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy9pc0ludGVnZXJcIik7XG5cbnZhciBfaXNOZWdhdGl2ZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3V0aWxzL2lzTmVnYXRpdmVcIik7XG5cbnZhciBfaXNOdW1lcmljID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdXRpbHMvaXNOdW1lcmljXCIpO1xuXG52YXIgX2hhc051bWVyaWNWYWx1ZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3V0aWxzL2hhc051bWVyaWNWYWx1ZVwiKTtcblxudmFyIF9pc1Bvc2l0aXZlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdXRpbHMvaXNQb3NpdGl2ZVwiKTtcblxudmFyIF9pc1plcm8gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy9pc1plcm9cIik7XG5cbnZhciBfaXNOYU4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy9pc05hTlwiKTtcblxudmFyIF90eXBlT2YgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy90eXBlT2ZcIik7XG5cbnZhciBfZXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9yZWxhdGlvbmFsL2VxdWFsU2NhbGFyXCIpO1xuXG52YXIgX1NwYXJzZU1hdHJpeCA9IHJlcXVpcmUoXCIuL3R5cGUvbWF0cml4L1NwYXJzZU1hdHJpeFwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi90eXBlL251bWJlclwiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi90eXBlL3N0cmluZ1wiKTtcblxudmFyIF9ib29sZWFuID0gcmVxdWlyZShcIi4vdHlwZS9ib29sZWFuXCIpO1xuXG52YXIgX2JpZ251bWJlciA9IHJlcXVpcmUoXCIuL3R5cGUvYmlnbnVtYmVyL2Z1bmN0aW9uL2JpZ251bWJlclwiKTtcblxudmFyIF9jb21wbGV4ID0gcmVxdWlyZShcIi4vdHlwZS9jb21wbGV4L2Z1bmN0aW9uL2NvbXBsZXhcIik7XG5cbnZhciBfZnJhY3Rpb24gPSByZXF1aXJlKFwiLi90eXBlL2ZyYWN0aW9uL2Z1bmN0aW9uL2ZyYWN0aW9uXCIpO1xuXG52YXIgX21hdHJpeCA9IHJlcXVpcmUoXCIuL3R5cGUvbWF0cml4L2Z1bmN0aW9uL21hdHJpeFwiKTtcblxudmFyIF9zcGxpdFVuaXQgPSByZXF1aXJlKFwiLi90eXBlL3VuaXQvZnVuY3Rpb24vc3BsaXRVbml0XCIpO1xuXG52YXIgX3VuYXJ5TWludXMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL3VuYXJ5TWludXNcIik7XG5cbnZhciBfdW5hcnlQbHVzID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy91bmFyeVBsdXNcIik7XG5cbnZhciBfYWJzID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9hYnNcIik7XG5cbnZhciBfYXBwbHkgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvYXBwbHlcIik7XG5cbnZhciBfYWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9hZGRTY2FsYXJcIik7XG5cbnZhciBfY2JydCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvY2JydFwiKTtcblxudmFyIF9jZWlsID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9jZWlsXCIpO1xuXG52YXIgX2N1YmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2N1YmVcIik7XG5cbnZhciBfZXhwID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9leHBcIik7XG5cbnZhciBfZXhwbSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZXhwbTFcIik7XG5cbnZhciBfZml4ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9maXhcIik7XG5cbnZhciBfZmxvb3IgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2Zsb29yXCIpO1xuXG52YXIgX2djZCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZ2NkXCIpO1xuXG52YXIgX2xjbSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvbGNtXCIpO1xuXG52YXIgX2xvZyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvbG9nMTBcIik7XG5cbnZhciBfbG9nMiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvbG9nMlwiKTtcblxudmFyIF9tb2QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL21vZFwiKTtcblxudmFyIF9tdWx0aXBseVNjYWxhciA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvbXVsdGlwbHlTY2FsYXJcIik7XG5cbnZhciBfbXVsdGlwbHkgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL211bHRpcGx5XCIpO1xuXG52YXIgX250aFJvb3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL250aFJvb3RcIik7XG5cbnZhciBfc2lnbiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvc2lnblwiKTtcblxudmFyIF9zcXJ0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9zcXJ0XCIpO1xuXG52YXIgX3NxdWFyZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvc3F1YXJlXCIpO1xuXG52YXIgX3N1YnRyYWN0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9zdWJ0cmFjdFwiKTtcblxudmFyIF94Z2NkID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy94Z2NkXCIpO1xuXG52YXIgX2RvdE11bHRpcGx5ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9kb3RNdWx0aXBseVwiKTtcblxudmFyIF9iaXRBbmQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9iaXR3aXNlL2JpdEFuZFwiKTtcblxudmFyIF9iaXROb3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9iaXR3aXNlL2JpdE5vdFwiKTtcblxudmFyIF9iaXRPciA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2JpdHdpc2UvYml0T3JcIik7XG5cbnZhciBfYml0WG9yID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYml0d2lzZS9iaXRYb3JcIik7XG5cbnZhciBfYXJnID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vY29tcGxleC9hcmdcIik7XG5cbnZhciBfY29uaiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2NvbXBsZXgvY29ualwiKTtcblxudmFyIF9pbSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2NvbXBsZXgvaW1cIik7XG5cbnZhciBfcmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9jb21wbGV4L3JlXCIpO1xuXG52YXIgX25vdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2xvZ2ljYWwvbm90XCIpO1xuXG52YXIgX29yID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbG9naWNhbC9vclwiKTtcblxudmFyIF94b3IgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9sb2dpY2FsL3hvclwiKTtcblxudmFyIF9jb25jYXQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvY29uY2F0XCIpO1xuXG52YXIgX2NvbHVtbiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9jb2x1bW5cIik7XG5cbnZhciBfY3Jvc3MgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvY3Jvc3NcIik7XG5cbnZhciBfZGlhZyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9kaWFnXCIpO1xuXG52YXIgX2V5ZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9leWVcIik7XG5cbnZhciBfZmlsdGVyID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2ZpbHRlclwiKTtcblxudmFyIF9mbGF0dGVuID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2ZsYXR0ZW5cIik7XG5cbnZhciBfZm9yRWFjaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9mb3JFYWNoXCIpO1xuXG52YXIgX2dldE1hdHJpeERhdGFUeXBlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2dldE1hdHJpeERhdGFUeXBlXCIpO1xuXG52YXIgX2lkZW50aXR5ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2lkZW50aXR5XCIpO1xuXG52YXIgX2tyb24gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgva3JvblwiKTtcblxudmFyIF9tYXAgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvbWFwXCIpO1xuXG52YXIgX29uZXMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvb25lc1wiKTtcblxudmFyIF9yYW5nZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9yYW5nZVwiKTtcblxudmFyIF9yZXNoYXBlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3Jlc2hhcGVcIik7XG5cbnZhciBfcmVzaXplID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3Jlc2l6ZVwiKTtcblxudmFyIF9yb3cgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvcm93XCIpO1xuXG52YXIgX3NpemUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvc2l6ZVwiKTtcblxudmFyIF9zcXVlZXplID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3NxdWVlemVcIik7XG5cbnZhciBfc3Vic2V0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3N1YnNldFwiKTtcblxudmFyIF90cmFuc3Bvc2UgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvdHJhbnNwb3NlXCIpO1xuXG52YXIgX2N0cmFuc3Bvc2UgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvY3RyYW5zcG9zZVwiKTtcblxudmFyIF96ZXJvcyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC96ZXJvc1wiKTtcblxudmFyIF9lcmYgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zcGVjaWFsL2VyZlwiKTtcblxudmFyIF9tb2RlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RhdGlzdGljcy9tb2RlXCIpO1xuXG52YXIgX3Byb2QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zdGF0aXN0aWNzL3Byb2RcIik7XG5cbnZhciBfZm9ybWF0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RyaW5nL2Zvcm1hdFwiKTtcblxudmFyIF9wcmludCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3N0cmluZy9wcmludFwiKTtcblxudmFyIF90byA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3VuaXQvdG9cIik7XG5cbnZhciBfaXNQcmltZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3V0aWxzL2lzUHJpbWVcIik7XG5cbnZhciBfbnVtZXJpYyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3V0aWxzL251bWVyaWNcIik7XG5cbnZhciBfZGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9kaXZpZGVTY2FsYXJcIik7XG5cbnZhciBfcG93ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9wb3dcIik7XG5cbnZhciBfcm91bmQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL3JvdW5kXCIpO1xuXG52YXIgX2xvZzMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2xvZ1wiKTtcblxudmFyIF9sb2cxcCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvbG9nMXBcIik7XG5cbnZhciBfbnRoUm9vdHMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL250aFJvb3RzXCIpO1xuXG52YXIgX2RvdFBvdyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZG90UG93XCIpO1xuXG52YXIgX2RvdERpdmlkZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZG90RGl2aWRlXCIpO1xuXG52YXIgX2xzb2x2ZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FsZ2VicmEvc29sdmVyL2xzb2x2ZVwiKTtcblxudmFyIF91c29sdmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hbGdlYnJhL3NvbHZlci91c29sdmVcIik7XG5cbnZhciBfbGVmdFNoaWZ0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYml0d2lzZS9sZWZ0U2hpZnRcIik7XG5cbnZhciBfcmlnaHRBcml0aFNoaWZ0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYml0d2lzZS9yaWdodEFyaXRoU2hpZnRcIik7XG5cbnZhciBfcmlnaHRMb2dTaGlmdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2JpdHdpc2UvcmlnaHRMb2dTaGlmdFwiKTtcblxudmFyIF9hbmQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9sb2dpY2FsL2FuZFwiKTtcblxudmFyIF9jb21wYXJlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcmVsYXRpb25hbC9jb21wYXJlXCIpO1xuXG52YXIgX2NvbXBhcmVOYXR1cmFsID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcmVsYXRpb25hbC9jb21wYXJlTmF0dXJhbFwiKTtcblxudmFyIF9jb21wYXJlVGV4dCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3JlbGF0aW9uYWwvY29tcGFyZVRleHRcIik7XG5cbnZhciBfZXF1YWwgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9yZWxhdGlvbmFsL2VxdWFsXCIpO1xuXG52YXIgX2VxdWFsVGV4dCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3JlbGF0aW9uYWwvZXF1YWxUZXh0XCIpO1xuXG52YXIgX3NtYWxsZXIgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9yZWxhdGlvbmFsL3NtYWxsZXJcIik7XG5cbnZhciBfc21hbGxlckVxID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcmVsYXRpb25hbC9zbWFsbGVyRXFcIik7XG5cbnZhciBfbGFyZ2VyID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcmVsYXRpb25hbC9sYXJnZXJcIik7XG5cbnZhciBfbGFyZ2VyRXEgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9yZWxhdGlvbmFsL2xhcmdlckVxXCIpO1xuXG52YXIgX2RlZXBFcXVhbCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3JlbGF0aW9uYWwvZGVlcEVxdWFsXCIpO1xuXG52YXIgX3VuZXF1YWwgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9yZWxhdGlvbmFsL3VuZXF1YWxcIik7XG5cbnZhciBfcGFydGl0aW9uU2VsZWN0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3BhcnRpdGlvblNlbGVjdFwiKTtcblxudmFyIF9zb3J0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3NvcnRcIik7XG5cbnZhciBfbWF4ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RhdGlzdGljcy9tYXhcIik7XG5cbnZhciBfbWluID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RhdGlzdGljcy9taW5cIik7XG5cbnZhciBfSW1tdXRhYmxlRGVuc2VNYXRyaXggPSByZXF1aXJlKFwiLi90eXBlL21hdHJpeC9JbW11dGFibGVEZW5zZU1hdHJpeFwiKTtcblxudmFyIF9NYXRyaXhJbmRleCA9IHJlcXVpcmUoXCIuL3R5cGUvbWF0cml4L01hdHJpeEluZGV4XCIpO1xuXG52YXIgX0ZpYm9uYWNjaUhlYXAgPSByZXF1aXJlKFwiLi90eXBlL21hdHJpeC9GaWJvbmFjY2lIZWFwXCIpO1xuXG52YXIgX1NwYSA9IHJlcXVpcmUoXCIuL3R5cGUvbWF0cml4L1NwYVwiKTtcblxudmFyIF9Vbml0ID0gcmVxdWlyZShcIi4vdHlwZS91bml0L1VuaXRcIik7XG5cbnZhciBfdW5pdCA9IHJlcXVpcmUoXCIuL3R5cGUvdW5pdC9mdW5jdGlvbi91bml0XCIpO1xuXG52YXIgX3NwYXJzZSA9IHJlcXVpcmUoXCIuL3R5cGUvbWF0cml4L2Z1bmN0aW9uL3NwYXJzZVwiKTtcblxudmFyIF9jcmVhdGVVbml0ID0gcmVxdWlyZShcIi4vdHlwZS91bml0L2Z1bmN0aW9uL2NyZWF0ZVVuaXRcIik7XG5cbnZhciBfYWNvcyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY29zXCIpO1xuXG52YXIgX2Fjb3NoID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjb3NoXCIpO1xuXG52YXIgX2Fjb3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNvdFwiKTtcblxudmFyIF9hY290aCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY290aFwiKTtcblxudmFyIF9hY3NjID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjc2NcIik7XG5cbnZhciBfYWNzY2ggPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNzY2hcIik7XG5cbnZhciBfYXNlYyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hc2VjXCIpO1xuXG52YXIgX2FzZWNoID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2FzZWNoXCIpO1xuXG52YXIgX2FzaW4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXNpblwiKTtcblxudmFyIF9hc2luaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hc2luaFwiKTtcblxudmFyIF9hdGFuID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2F0YW5cIik7XG5cbnZhciBfYXRhbjIgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXRhbjJcIik7XG5cbnZhciBfYXRhbmggPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXRhbmhcIik7XG5cbnZhciBfY29zID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Nvc1wiKTtcblxudmFyIF9jb3NoID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Nvc2hcIik7XG5cbnZhciBfY290ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2NvdFwiKTtcblxudmFyIF9jb3RoID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2NvdGhcIik7XG5cbnZhciBfY3NjID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2NzY1wiKTtcblxudmFyIF9jc2NoID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2NzY2hcIik7XG5cbnZhciBfc2VjID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NlY1wiKTtcblxudmFyIF9zZWNoID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NlY2hcIik7XG5cbnZhciBfc2luID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NpblwiKTtcblxudmFyIF9zaW5oID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NpbmhcIik7XG5cbnZhciBfdGFuID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3RhblwiKTtcblxudmFyIF90YW5oID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3RhbmhcIik7XG5cbnZhciBfc2V0Q2FydGVzaWFuID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldENhcnRlc2lhblwiKTtcblxudmFyIF9zZXREaWZmZXJlbmNlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldERpZmZlcmVuY2VcIik7XG5cbnZhciBfc2V0RGlzdGluY3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zZXQvc2V0RGlzdGluY3RcIik7XG5cbnZhciBfc2V0SW50ZXJzZWN0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldEludGVyc2VjdFwiKTtcblxudmFyIF9zZXRJc1N1YnNldCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3NldC9zZXRJc1N1YnNldFwiKTtcblxudmFyIF9zZXRNdWx0aXBsaWNpdHkgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zZXQvc2V0TXVsdGlwbGljaXR5XCIpO1xuXG52YXIgX3NldFBvd2Vyc2V0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldFBvd2Vyc2V0XCIpO1xuXG52YXIgX3NldFNpemUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zZXQvc2V0U2l6ZVwiKTtcblxudmFyIF9zZXRTeW1EaWZmZXJlbmNlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldFN5bURpZmZlcmVuY2VcIik7XG5cbnZhciBfc2V0VW5pb24gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zZXQvc2V0VW5pb25cIik7XG5cbnZhciBfYWRkID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9hZGRcIik7XG5cbnZhciBfaHlwb3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2h5cG90XCIpO1xuXG52YXIgX25vcm0gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL25vcm1cIik7XG5cbnZhciBfZG90ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2RvdFwiKTtcblxudmFyIF90cmFjZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC90cmFjZVwiKTtcblxudmFyIF9mdW5jdGlvbiA9IHJlcXVpcmUoXCIuL3R5cGUvbWF0cml4L2Z1bmN0aW9uXCIpO1xuXG52YXIgX05vZGUgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL25vZGUvTm9kZVwiKTtcblxudmFyIF9BY2Nlc3Nvck5vZGUgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL25vZGUvQWNjZXNzb3JOb2RlXCIpO1xuXG52YXIgX0FycmF5Tm9kZSA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vbm9kZS9BcnJheU5vZGVcIik7XG5cbnZhciBfQXNzaWdubWVudE5vZGUgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL25vZGUvQXNzaWdubWVudE5vZGVcIik7XG5cbnZhciBfQmxvY2tOb2RlID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9ub2RlL0Jsb2NrTm9kZVwiKTtcblxudmFyIF9Db25kaXRpb25hbE5vZGUgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL25vZGUvQ29uZGl0aW9uYWxOb2RlXCIpO1xuXG52YXIgX0NvbnN0YW50Tm9kZSA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vbm9kZS9Db25zdGFudE5vZGVcIik7XG5cbnZhciBfRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vbm9kZS9GdW5jdGlvbkFzc2lnbm1lbnROb2RlXCIpO1xuXG52YXIgX0luZGV4Tm9kZSA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vbm9kZS9JbmRleE5vZGVcIik7XG5cbnZhciBfT2JqZWN0Tm9kZSA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vbm9kZS9PYmplY3ROb2RlXCIpO1xuXG52YXIgX09wZXJhdG9yTm9kZSA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vbm9kZS9PcGVyYXRvck5vZGVcIik7XG5cbnZhciBfUGFyZW50aGVzaXNOb2RlID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9ub2RlL1BhcmVudGhlc2lzTm9kZVwiKTtcblxudmFyIF9SYW5nZU5vZGUgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL25vZGUvUmFuZ2VOb2RlXCIpO1xuXG52YXIgX1JlbGF0aW9uYWxOb2RlID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9ub2RlL1JlbGF0aW9uYWxOb2RlXCIpO1xuXG52YXIgX1N5bWJvbE5vZGUgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL25vZGUvU3ltYm9sTm9kZVwiKTtcblxudmFyIF9GdW5jdGlvbk5vZGUgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL25vZGUvRnVuY3Rpb25Ob2RlXCIpO1xuXG52YXIgX3BhcnNlID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9wYXJzZVwiKTtcblxudmFyIF9jb21waWxlID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9mdW5jdGlvbi9jb21waWxlXCIpO1xuXG52YXIgX2V2YWx1YXRlID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9mdW5jdGlvbi9ldmFsdWF0ZVwiKTtcblxudmFyIF9ldmFsID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9mdW5jdGlvbi9ldmFsXCIpO1xuXG52YXIgX1BhcnNlciA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vUGFyc2VyXCIpO1xuXG52YXIgX3BhcnNlciA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vZnVuY3Rpb24vcGFyc2VyXCIpO1xuXG52YXIgX2x1cCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FsZ2VicmEvZGVjb21wb3NpdGlvbi9sdXBcIik7XG5cbnZhciBfcXIgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hbGdlYnJhL2RlY29tcG9zaXRpb24vcXJcIik7XG5cbnZhciBfc2x1ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYWxnZWJyYS9kZWNvbXBvc2l0aW9uL3NsdVwiKTtcblxudmFyIF9sdXNvbHZlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYWxnZWJyYS9zb2x2ZXIvbHVzb2x2ZVwiKTtcblxudmFyIF9IZWxwID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9IZWxwXCIpO1xuXG52YXIgX0NoYWluID0gcmVxdWlyZShcIi4vdHlwZS9jaGFpbi9DaGFpblwiKTtcblxudmFyIF9oZWxwID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9mdW5jdGlvbi9oZWxwXCIpO1xuXG52YXIgX2NoYWluID0gcmVxdWlyZShcIi4vdHlwZS9jaGFpbi9mdW5jdGlvbi9jaGFpblwiKTtcblxudmFyIF9kZXQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvZGV0XCIpO1xuXG52YXIgX2ludiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9pbnZcIik7XG5cbnZhciBfZWlncyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9laWdzXCIpO1xuXG52YXIgX2V4cG0yID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2V4cG1cIik7XG5cbnZhciBfc3FydG0gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvc3FydG1cIik7XG5cbnZhciBfZGl2aWRlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9kaXZpZGVcIik7XG5cbnZhciBfZGlzdGFuY2UgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9nZW9tZXRyeS9kaXN0YW5jZVwiKTtcblxudmFyIF9pbnRlcnNlY3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9nZW9tZXRyeS9pbnRlcnNlY3RcIik7XG5cbnZhciBfc3VtID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RhdGlzdGljcy9zdW1cIik7XG5cbnZhciBfbWVhbiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbWVhblwiKTtcblxudmFyIF9tZWRpYW4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zdGF0aXN0aWNzL21lZGlhblwiKTtcblxudmFyIF9tYWQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zdGF0aXN0aWNzL21hZFwiKTtcblxudmFyIF92YXJpYW5jZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3N0YXRpc3RpY3MvdmFyaWFuY2VcIik7XG5cbnZhciBfcXVhbnRpbGVTZXEgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zdGF0aXN0aWNzL3F1YW50aWxlU2VxXCIpO1xuXG52YXIgX3N0ZCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3N0YXRpc3RpY3Mvc3RkXCIpO1xuXG52YXIgX2NvbWJpbmF0aW9ucyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2NvbWJpbmF0aW9uc1wiKTtcblxudmFyIF9jb21iaW5hdGlvbnNXaXRoUmVwID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcHJvYmFiaWxpdHkvY29tYmluYXRpb25zV2l0aFJlcFwiKTtcblxudmFyIF9nYW1tYSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2dhbW1hXCIpO1xuXG52YXIgX2ZhY3RvcmlhbCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2ZhY3RvcmlhbFwiKTtcblxudmFyIF9rbGRpdmVyZ2VuY2UgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9rbGRpdmVyZ2VuY2VcIik7XG5cbnZhciBfbXVsdGlub21pYWwgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9tdWx0aW5vbWlhbFwiKTtcblxudmFyIF9wZXJtdXRhdGlvbnMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9wZXJtdXRhdGlvbnNcIik7XG5cbnZhciBfcGlja1JhbmRvbSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3BpY2tSYW5kb21cIik7XG5cbnZhciBfcmFuZG9tID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcHJvYmFiaWxpdHkvcmFuZG9tXCIpO1xuXG52YXIgX3JhbmRvbUludCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3JhbmRvbUludFwiKTtcblxudmFyIF9zdGlybGluZ1MgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9jb21iaW5hdG9yaWNzL3N0aXJsaW5nUzJcIik7XG5cbnZhciBfYmVsbE51bWJlcnMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9jb21iaW5hdG9yaWNzL2JlbGxOdW1iZXJzXCIpO1xuXG52YXIgX2NhdGFsYW4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9jb21iaW5hdG9yaWNzL2NhdGFsYW5cIik7XG5cbnZhciBfY29tcG9zaXRpb24gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9jb21iaW5hdG9yaWNzL2NvbXBvc2l0aW9uXCIpO1xuXG52YXIgX3NpbXBsaWZ5ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYWxnZWJyYS9zaW1wbGlmeVwiKTtcblxudmFyIF9kZXJpdmF0aXZlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYWxnZWJyYS9kZXJpdmF0aXZlXCIpO1xuXG52YXIgX3JhdGlvbmFsaXplID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYWxnZWJyYS9yYXRpb25hbGl6ZVwiKTtcblxudmFyIF9yZXZpdmVyID0gcmVxdWlyZShcIi4vanNvbi9yZXZpdmVyXCIpO1xuXG52YXIgX3JlcGxhY2VyID0gcmVxdWlyZShcIi4vanNvbi9yZXBsYWNlclwiKTtcblxudmFyIF9jb25zdGFudHMgPSByZXF1aXJlKFwiLi9jb25zdGFudHNcIik7XG5cbnZhciBfcGh5c2ljYWxDb25zdGFudHMgPSByZXF1aXJlKFwiLi90eXBlL3VuaXQvcGh5c2ljYWxDb25zdGFudHNcIik7XG5cbnZhciBfYXBwbHkyID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi90cmFuc2Zvcm0vYXBwbHkudHJhbnNmb3JtXCIpO1xuXG52YXIgX2NvbHVtbjIgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL3RyYW5zZm9ybS9jb2x1bW4udHJhbnNmb3JtXCIpO1xuXG52YXIgX2ZpbHRlcjIgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL3RyYW5zZm9ybS9maWx0ZXIudHJhbnNmb3JtXCIpO1xuXG52YXIgX2ZvckVhY2gyID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi90cmFuc2Zvcm0vZm9yRWFjaC50cmFuc2Zvcm1cIik7XG5cbnZhciBfaW5kZXggPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL3RyYW5zZm9ybS9pbmRleC50cmFuc2Zvcm1cIik7XG5cbnZhciBfbWFwMiA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vdHJhbnNmb3JtL21hcC50cmFuc2Zvcm1cIik7XG5cbnZhciBfbWF4MiA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vdHJhbnNmb3JtL21heC50cmFuc2Zvcm1cIik7XG5cbnZhciBfbWVhbjIgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL3RyYW5zZm9ybS9tZWFuLnRyYW5zZm9ybVwiKTtcblxudmFyIF9taW4yID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi90cmFuc2Zvcm0vbWluLnRyYW5zZm9ybVwiKTtcblxudmFyIF9yYW5nZTIgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL3RyYW5zZm9ybS9yYW5nZS50cmFuc2Zvcm1cIik7XG5cbnZhciBfcm93MiA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vdHJhbnNmb3JtL3Jvdy50cmFuc2Zvcm1cIik7XG5cbnZhciBfc3Vic2V0MiA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vdHJhbnNmb3JtL3N1YnNldC50cmFuc2Zvcm1cIik7XG5cbnZhciBfY29uY2F0MiA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vdHJhbnNmb3JtL2NvbmNhdC50cmFuc2Zvcm1cIik7XG5cbnZhciBfc3RkMiA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vdHJhbnNmb3JtL3N0ZC50cmFuc2Zvcm1cIik7XG5cbnZhciBfc3VtMiA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vdHJhbnNmb3JtL3N1bS50cmFuc2Zvcm1cIik7XG5cbnZhciBfdmFyaWFuY2UyID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi90cmFuc2Zvcm0vdmFyaWFuY2UudHJhbnNmb3JtXCIpOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVMdXAgPSB2b2lkIDA7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2x1cCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnYWJzJywgJ2FkZFNjYWxhcicsICdkaXZpZGVTY2FsYXInLCAnbXVsdGlwbHlTY2FsYXInLCAnc3VidHJhY3QnLCAnbGFyZ2VyJywgJ2VxdWFsU2NhbGFyJywgJ3VuYXJ5TWludXMnLCAnRGVuc2VNYXRyaXgnLCAnU3BhcnNlTWF0cml4JywgJ1NwYSddO1xudmFyIGNyZWF0ZUx1cCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGFicyA9IF9yZWYuYWJzLFxuICAgICAgYWRkU2NhbGFyID0gX3JlZi5hZGRTY2FsYXIsXG4gICAgICBkaXZpZGVTY2FsYXIgPSBfcmVmLmRpdmlkZVNjYWxhcixcbiAgICAgIG11bHRpcGx5U2NhbGFyID0gX3JlZi5tdWx0aXBseVNjYWxhcixcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCxcbiAgICAgIGxhcmdlciA9IF9yZWYubGFyZ2VyLFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLFxuICAgICAgdW5hcnlNaW51cyA9IF9yZWYudW5hcnlNaW51cyxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeCxcbiAgICAgIFNwYXJzZU1hdHJpeCA9IF9yZWYuU3BhcnNlTWF0cml4LFxuICAgICAgU3BhID0gX3JlZi5TcGE7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgTWF0cml4IExVIGRlY29tcG9zaXRpb24gd2l0aCBwYXJ0aWFsIHBpdm90aW5nLiBNYXRyaXggYEFgIGlzIGRlY29tcG9zZWQgaW4gdHdvIG1hdHJpY2VzIChgTGAsIGBVYCkgYW5kIGFcbiAgICogcm93IHBlcm11dGF0aW9uIHZlY3RvciBgcGAgd2hlcmUgYEFbcCw6XSA9IEwgKiBVYFxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgubHVwKEEpXG4gICAqXG4gICAqIEV4YW1wbGU6XG4gICAqXG4gICAqICAgIGNvbnN0IG0gPSBbWzIsIDFdLCBbMSwgNF1dXG4gICAqICAgIGNvbnN0IHIgPSBtYXRoLmx1cChtKVxuICAgKiAgICAvLyByID0ge1xuICAgKiAgICAvLyAgIEw6IFtbMSwgMF0sIFswLjUsIDFdXSxcbiAgICogICAgLy8gICBVOiBbWzIsIDFdLCBbMCwgMy41XV0sXG4gICAqICAgIC8vICAgUDogWzAsIDFdXG4gICAqICAgIC8vIH1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIHNsdSwgbHNvbHZlLCBsdXNvbHZlLCB1c29sdmVcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXggfCBBcnJheX0gQSAgICBBIHR3byBkaW1lbnNpb25hbCBtYXRyaXggb3IgYXJyYXkgZm9yIHdoaWNoIHRvIGdldCB0aGUgTFVQIGRlY29tcG9zaXRpb24uXG4gICAqXG4gICAqIEByZXR1cm4ge3tMOiBBcnJheSB8IE1hdHJpeCwgVTogQXJyYXkgfCBNYXRyaXgsIFA6IEFycmF5LjxudW1iZXI+fX0gVGhlIGxvd2VyIHRyaWFuZ3VsYXIgbWF0cml4LCB0aGUgdXBwZXIgdHJpYW5ndWxhciBtYXRyaXggYW5kIHRoZSBwZXJtdXRhdGlvbiBtYXRyaXguXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIERlbnNlTWF0cml4OiBmdW5jdGlvbiBEZW5zZU1hdHJpeChtKSB7XG4gICAgICByZXR1cm4gX2RlbnNlTFVQKG0pO1xuICAgIH0sXG4gICAgU3BhcnNlTWF0cml4OiBmdW5jdGlvbiBTcGFyc2VNYXRyaXgobSkge1xuICAgICAgcmV0dXJuIF9zcGFyc2VMVVAobSk7XG4gICAgfSxcbiAgICBBcnJheTogZnVuY3Rpb24gQXJyYXkoYSkge1xuICAgICAgLy8gY3JlYXRlIGRlbnNlIG1hdHJpeCBmcm9tIGFycmF5XG4gICAgICB2YXIgbSA9IG1hdHJpeChhKTsgLy8gbHVwLCB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG5cbiAgICAgIHZhciByID0gX2RlbnNlTFVQKG0pOyAvLyByZXN1bHRcblxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBMOiByLkwudmFsdWVPZigpLFxuICAgICAgICBVOiByLlUudmFsdWVPZigpLFxuICAgICAgICBwOiByLnBcbiAgICAgIH07XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBfZGVuc2VMVVAobSkge1xuICAgIC8vIHJvd3MgJiBjb2x1bW5zXG4gICAgdmFyIHJvd3MgPSBtLl9zaXplWzBdO1xuICAgIHZhciBjb2x1bW5zID0gbS5fc2l6ZVsxXTsgLy8gbWluaW11bSByb3dzIGFuZCBjb2x1bW5zXG5cbiAgICB2YXIgbiA9IE1hdGgubWluKHJvd3MsIGNvbHVtbnMpOyAvLyBtYXRyaXggYXJyYXksIGNsb25lIG9yaWdpbmFsIGRhdGFcblxuICAgIHZhciBkYXRhID0gKDAsIF9vYmplY3QuY2xvbmUpKG0uX2RhdGEpOyAvLyBsIG1hdHJpeCBhcnJheXNcblxuICAgIHZhciBsZGF0YSA9IFtdO1xuICAgIHZhciBsc2l6ZSA9IFtyb3dzLCBuXTsgLy8gdSBtYXRyaXggYXJyYXlzXG5cbiAgICB2YXIgdWRhdGEgPSBbXTtcbiAgICB2YXIgdXNpemUgPSBbbiwgY29sdW1uc107IC8vIHZhcnNcblxuICAgIHZhciBpLCBqLCBrOyAvLyBwZXJtdXRhdGlvbiB2ZWN0b3JcblxuICAgIHZhciBwID0gW107XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICBwW2ldID0gaTtcbiAgICB9IC8vIGxvb3AgY29sdW1uc1xuXG5cbiAgICBmb3IgKGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAvLyBza2lwIGZpcnN0IGNvbHVtbiBpbiB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeFxuICAgICAgaWYgKGogPiAwKSB7XG4gICAgICAgIC8vIGxvb3Agcm93c1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgLy8gbWluIGksalxuICAgICAgICAgIHZhciBtaW4gPSBNYXRoLm1pbihpLCBqKTsgLy8gdltpLCBqXVxuXG4gICAgICAgICAgdmFyIHMgPSAwOyAvLyBsb29wIHVwIHRvIG1pblxuXG4gICAgICAgICAgZm9yIChrID0gMDsgayA8IG1pbjsgaysrKSB7XG4gICAgICAgICAgICAvLyBzID0gbFtpLCBrXSAtIGRhdGFbaywgal1cbiAgICAgICAgICAgIHMgPSBhZGRTY2FsYXIocywgbXVsdGlwbHlTY2FsYXIoZGF0YVtpXVtrXSwgZGF0YVtrXVtqXSkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRhdGFbaV1bal0gPSBzdWJ0cmFjdChkYXRhW2ldW2pdLCBzKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyByb3cgd2l0aCBsYXJnZXIgdmFsdWUgaW4gY3ZlY3Rvciwgcm93ID49IGpcblxuXG4gICAgICB2YXIgcGkgPSBqO1xuICAgICAgdmFyIHBhYnN2ID0gMDtcbiAgICAgIHZhciB2amogPSAwOyAvLyBsb29wIHJvd3NcblxuICAgICAgZm9yIChpID0gajsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAvLyBkYXRhIEAgaSwgalxuICAgICAgICB2YXIgdiA9IGRhdGFbaV1bal07IC8vIGFic29sdXRlIHZhbHVlXG5cbiAgICAgICAgdmFyIGFic3YgPSBhYnModik7IC8vIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBwaXZvdGUgdmFsdWVcblxuICAgICAgICBpZiAobGFyZ2VyKGFic3YsIHBhYnN2KSkge1xuICAgICAgICAgIC8vIHN0b3JlIHJvd1xuICAgICAgICAgIHBpID0gaTsgLy8gdXBkYXRlIG1heCB2YWx1ZVxuXG4gICAgICAgICAgcGFic3YgPSBhYnN2OyAvLyB2YWx1ZSBAIFtqLCBqXVxuXG4gICAgICAgICAgdmpqID0gdjtcbiAgICAgICAgfVxuICAgICAgfSAvLyBzd2FwIHJvd3MgKGogPC0+IHBpKVxuXG5cbiAgICAgIGlmIChqICE9PSBwaSkge1xuICAgICAgICAvLyBzd2FwIHZhbHVlcyBqIDwtPiBwaSBpbiBwXG4gICAgICAgIHBbal0gPSBbcFtwaV0sIHBbcGldID0gcFtqXV1bMF07IC8vIHN3YXAgaiA8LT4gcGkgaW4gZGF0YVxuXG4gICAgICAgIERlbnNlTWF0cml4Ll9zd2FwUm93cyhqLCBwaSwgZGF0YSk7XG4gICAgICB9IC8vIGNoZWNrIGNvbHVtbiBpcyBpbiBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeFxuXG5cbiAgICAgIGlmIChqIDwgcm93cykge1xuICAgICAgICAvLyBsb29wIHJvd3MgKGxvd2VyIHRyaWFuZ3VsYXIgbWF0cml4KVxuICAgICAgICBmb3IgKGkgPSBqICsgMTsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAgIC8vIHZhbHVlIEAgaSwgalxuICAgICAgICAgIHZhciB2aWogPSBkYXRhW2ldW2pdO1xuXG4gICAgICAgICAgaWYgKCFlcXVhbFNjYWxhcih2aWosIDApKSB7XG4gICAgICAgICAgICAvLyB1cGRhdGUgZGF0YVxuICAgICAgICAgICAgZGF0YVtpXVtqXSA9IGRpdmlkZVNjYWxhcihkYXRhW2ldW2pdLCB2amopO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gbG9vcCBjb2x1bW5zXG5cblxuICAgIGZvciAoaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgIC8vIGxvb3Agcm93c1xuICAgICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAvLyBpbml0aWFsaXplIHJvdyBpbiBhcnJheXNcbiAgICAgICAgaWYgKGogPT09IDApIHtcbiAgICAgICAgICAvLyBjaGVjayByb3cgZXhpc3RzIGluIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4XG4gICAgICAgICAgaWYgKGkgPCBjb2x1bW5zKSB7XG4gICAgICAgICAgICAvLyBVXG4gICAgICAgICAgICB1ZGF0YVtpXSA9IFtdO1xuICAgICAgICAgIH0gLy8gTFxuXG5cbiAgICAgICAgICBsZGF0YVtpXSA9IFtdO1xuICAgICAgICB9IC8vIGNoZWNrIHdlIGFyZSBpbiB0aGUgdXBwZXIgdHJpYW5ndWxhciBtYXRyaXhcblxuXG4gICAgICAgIGlmIChpIDwgaikge1xuICAgICAgICAgIC8vIGNoZWNrIHJvdyBleGlzdHMgaW4gdXBwZXIgdHJpYW5ndWxhciBtYXRyaXhcbiAgICAgICAgICBpZiAoaSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAgIC8vIFVcbiAgICAgICAgICAgIHVkYXRhW2ldW2pdID0gZGF0YVtpXVtqXTtcbiAgICAgICAgICB9IC8vIGNoZWNrIGNvbHVtbiBleGlzdHMgaW4gbG93ZXIgdHJpYW5ndWxhciBtYXRyaXhcblxuXG4gICAgICAgICAgaWYgKGogPCByb3dzKSB7XG4gICAgICAgICAgICAvLyBMXG4gICAgICAgICAgICBsZGF0YVtpXVtqXSA9IDA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gLy8gZGlhZ29uYWwgdmFsdWVcblxuXG4gICAgICAgIGlmIChpID09PSBqKSB7XG4gICAgICAgICAgLy8gY2hlY2sgcm93IGV4aXN0cyBpbiB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeFxuICAgICAgICAgIGlmIChpIDwgY29sdW1ucykge1xuICAgICAgICAgICAgLy8gVVxuICAgICAgICAgICAgdWRhdGFbaV1bal0gPSBkYXRhW2ldW2pdO1xuICAgICAgICAgIH0gLy8gY2hlY2sgY29sdW1uIGV4aXN0cyBpbiBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeFxuXG5cbiAgICAgICAgICBpZiAoaiA8IHJvd3MpIHtcbiAgICAgICAgICAgIC8vIExcbiAgICAgICAgICAgIGxkYXRhW2ldW2pdID0gMTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSAvLyBjaGVjayByb3cgZXhpc3RzIGluIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4XG5cblxuICAgICAgICBpZiAoaSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAvLyBVXG4gICAgICAgICAgdWRhdGFbaV1bal0gPSAwO1xuICAgICAgICB9IC8vIGNoZWNrIGNvbHVtbiBleGlzdHMgaW4gbG93ZXIgdHJpYW5ndWxhciBtYXRyaXhcblxuXG4gICAgICAgIGlmIChqIDwgcm93cykge1xuICAgICAgICAgIC8vIExcbiAgICAgICAgICBsZGF0YVtpXVtqXSA9IGRhdGFbaV1bal07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIGwgbWF0cml4XG5cblxuICAgIHZhciBsID0gbmV3IERlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6IGxkYXRhLFxuICAgICAgc2l6ZTogbHNpemVcbiAgICB9KTsgLy8gdSBtYXRyaXhcblxuICAgIHZhciB1ID0gbmV3IERlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6IHVkYXRhLFxuICAgICAgc2l6ZTogdXNpemVcbiAgICB9KTsgLy8gcCB2ZWN0b3JcblxuICAgIHZhciBwdiA9IFtdO1xuXG4gICAgZm9yIChpID0gMCwgbiA9IHAubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICBwdltwW2ldXSA9IGk7XG4gICAgfSAvLyByZXR1cm4gbWF0cmljZXNcblxuXG4gICAgcmV0dXJuIHtcbiAgICAgIEw6IGwsXG4gICAgICBVOiB1LFxuICAgICAgcDogcHYsXG4gICAgICB0b1N0cmluZzogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiAnTDogJyArIHRoaXMuTC50b1N0cmluZygpICsgJ1xcblU6ICcgKyB0aGlzLlUudG9TdHJpbmcoKSArICdcXG5QOiAnICsgdGhpcy5wO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBfc3BhcnNlTFVQKG0pIHtcbiAgICAvLyByb3dzICYgY29sdW1uc1xuICAgIHZhciByb3dzID0gbS5fc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IG0uX3NpemVbMV07IC8vIG1pbmltdW0gcm93cyBhbmQgY29sdW1uc1xuXG4gICAgdmFyIG4gPSBNYXRoLm1pbihyb3dzLCBjb2x1bW5zKTsgLy8gbWF0cml4IGFycmF5cyAod2lsbCBub3QgYmUgbW9kaWZpZWQsIHRoYW5rcyB0byBwZXJtdXRhdGlvbiB2ZWN0b3IpXG5cbiAgICB2YXIgdmFsdWVzID0gbS5fdmFsdWVzO1xuICAgIHZhciBpbmRleCA9IG0uX2luZGV4O1xuICAgIHZhciBwdHIgPSBtLl9wdHI7IC8vIGwgbWF0cml4IGFycmF5c1xuXG4gICAgdmFyIGx2YWx1ZXMgPSBbXTtcbiAgICB2YXIgbGluZGV4ID0gW107XG4gICAgdmFyIGxwdHIgPSBbXTtcbiAgICB2YXIgbHNpemUgPSBbcm93cywgbl07IC8vIHUgbWF0cml4IGFycmF5c1xuXG4gICAgdmFyIHV2YWx1ZXMgPSBbXTtcbiAgICB2YXIgdWluZGV4ID0gW107XG4gICAgdmFyIHVwdHIgPSBbXTtcbiAgICB2YXIgdXNpemUgPSBbbiwgY29sdW1uc107IC8vIHZhcnNcblxuICAgIHZhciBpLCBqLCBrOyAvLyBwZXJtdXRhdGlvbiB2ZWN0b3JzLCAoY3VycmVudCBpbmRleCAtPiBvcmlnaW5hbCBpbmRleCkgYW5kIChvcmlnaW5hbCBpbmRleCAtPiBjdXJyZW50IGluZGV4KVxuXG4gICAgdmFyIHB2Q28gPSBbXTtcbiAgICB2YXIgcHZPYyA9IFtdO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgcHZDb1tpXSA9IGk7XG4gICAgICBwdk9jW2ldID0gaTtcbiAgICB9IC8vIHN3YXAgaW5kaWNlcyBpbiBwZXJtdXRhdGlvbiB2ZWN0b3JzIChjb25kaXRpb24geCA8IHkpIVxuXG5cbiAgICB2YXIgc3dhcEluZGVjZXMgPSBmdW5jdGlvbiBzd2FwSW5kZWNlcyh4LCB5KSB7XG4gICAgICAvLyBmaW5kIHB2IGluZGVjZXMgZ2V0dGluZyBkYXRhIGZyb20geCBhbmQgeVxuICAgICAgdmFyIGt4ID0gcHZPY1t4XTtcbiAgICAgIHZhciBreSA9IHB2T2NbeV07IC8vIHVwZGF0ZSBwZXJtdXRhdGlvbiB2ZWN0b3IgY3VycmVudCAtPiBvcmlnaW5hbFxuXG4gICAgICBwdkNvW2t4XSA9IHk7XG4gICAgICBwdkNvW2t5XSA9IHg7IC8vIHVwZGF0ZSBwZXJtdXRhdGlvbiB2ZWN0b3Igb3JpZ2luYWwgLT4gY3VycmVudFxuXG4gICAgICBwdk9jW3hdID0ga3k7XG4gICAgICBwdk9jW3ldID0ga3g7XG4gICAgfTsgLy8gbG9vcCBjb2x1bW5zXG5cblxuICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKCkge1xuICAgICAgLy8gc3BhcnNlIGFjY3VtdWxhdG9yXG4gICAgICB2YXIgc3BhID0gbmV3IFNwYSgpOyAvLyBjaGVjayBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeCBoYXMgYSB2YWx1ZSBAIGNvbHVtbiBqXG5cbiAgICAgIGlmIChqIDwgcm93cykge1xuICAgICAgICAvLyB1cGRhdGUgcHRyXG4gICAgICAgIGxwdHIucHVzaChsdmFsdWVzLmxlbmd0aCk7IC8vIGZpcnN0IHZhbHVlIGluIGogY29sdW1uIGZvciBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeFxuXG4gICAgICAgIGx2YWx1ZXMucHVzaCgxKTtcbiAgICAgICAgbGluZGV4LnB1c2goaik7XG4gICAgICB9IC8vIHVwZGF0ZSBwdHJcblxuXG4gICAgICB1cHRyLnB1c2godXZhbHVlcy5sZW5ndGgpOyAvLyBrMCA8PSBrIDwgazEgd2hlcmUgazAgPSBfcHRyW2pdICYmIGsxID0gX3B0cltqKzFdXG5cbiAgICAgIHZhciBrMCA9IHB0cltqXTtcbiAgICAgIHZhciBrMSA9IHB0cltqICsgMV07IC8vIGNvcHkgY29sdW1uIGogaW50byBzcGFyc2UgYWNjdW11bGF0b3JcblxuICAgICAgZm9yIChrID0gazA7IGsgPCBrMTsgaysrKSB7XG4gICAgICAgIC8vIHJvd1xuICAgICAgICBpID0gaW5kZXhba107IC8vIGNvcHkgY29sdW1uIHZhbHVlcyBpbnRvIHNwYXJzZSBhY2N1bXVsYXRvciAodXNlIHBlcm11dGF0aW9uIHZlY3RvcilcblxuICAgICAgICBzcGEuc2V0KHB2Q29baV0sIHZhbHVlc1trXSk7XG4gICAgICB9IC8vIHNraXAgZmlyc3QgY29sdW1uIGluIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4XG5cblxuICAgICAgaWYgKGogPiAwKSB7XG4gICAgICAgIC8vIGxvb3Agcm93cyBpbiBjb2x1bW4gaiAoYWJvdmUgZGlhZ29uYWwpXG4gICAgICAgIHNwYS5mb3JFYWNoKDAsIGogLSAxLCBmdW5jdGlvbiAoaywgdmtqKSB7XG4gICAgICAgICAgLy8gbG9vcCByb3dzIGluIGNvbHVtbiBrIChMKVxuICAgICAgICAgIFNwYXJzZU1hdHJpeC5fZm9yRWFjaFJvdyhrLCBsdmFsdWVzLCBsaW5kZXgsIGxwdHIsIGZ1bmN0aW9uIChpLCB2aWspIHtcbiAgICAgICAgICAgIC8vIGNoZWNrIHJvdyBpcyBiZWxvdyBrXG4gICAgICAgICAgICBpZiAoaSA+IGspIHtcbiAgICAgICAgICAgICAgLy8gdXBkYXRlIHNwYSB2YWx1ZVxuICAgICAgICAgICAgICBzcGEuYWNjdW11bGF0ZShpLCB1bmFyeU1pbnVzKG11bHRpcGx5U2NhbGFyKHZpaywgdmtqKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0gLy8gcm93IHdpdGggbGFyZ2VyIHZhbHVlIGluIHNwYSwgcm93ID49IGpcblxuXG4gICAgICB2YXIgcGkgPSBqO1xuICAgICAgdmFyIHZqaiA9IHNwYS5nZXQoaik7XG4gICAgICB2YXIgcGFic3YgPSBhYnModmpqKTsgLy8gbG9vcCB2YWx1ZXMgaW4gc3BhIChvcmRlciBieSByb3csIGJlbG93IGRpYWdvbmFsKVxuXG4gICAgICBzcGEuZm9yRWFjaChqICsgMSwgcm93cyAtIDEsIGZ1bmN0aW9uICh4LCB2KSB7XG4gICAgICAgIC8vIGFic29sdXRlIHZhbHVlXG4gICAgICAgIHZhciBhYnN2ID0gYWJzKHYpOyAvLyB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gcGl2b3RlIHZhbHVlXG5cbiAgICAgICAgaWYgKGxhcmdlcihhYnN2LCBwYWJzdikpIHtcbiAgICAgICAgICAvLyBzdG9yZSByb3dcbiAgICAgICAgICBwaSA9IHg7IC8vIHVwZGF0ZSBtYXggdmFsdWVcblxuICAgICAgICAgIHBhYnN2ID0gYWJzdjsgLy8gdmFsdWUgQCBbaiwgal1cblxuICAgICAgICAgIHZqaiA9IHY7XG4gICAgICAgIH1cbiAgICAgIH0pOyAvLyBzd2FwIHJvd3MgKGogPC0+IHBpKVxuXG4gICAgICBpZiAoaiAhPT0gcGkpIHtcbiAgICAgICAgLy8gc3dhcCB2YWx1ZXMgaiA8LT4gcGkgaW4gTFxuICAgICAgICBTcGFyc2VNYXRyaXguX3N3YXBSb3dzKGosIHBpLCBsc2l6ZVsxXSwgbHZhbHVlcywgbGluZGV4LCBscHRyKTsgLy8gc3dhcCB2YWx1ZXMgaiA8LT4gcGkgaW4gVVxuXG5cbiAgICAgICAgU3BhcnNlTWF0cml4Ll9zd2FwUm93cyhqLCBwaSwgdXNpemVbMV0sIHV2YWx1ZXMsIHVpbmRleCwgdXB0cik7IC8vIHN3YXAgdmFsdWVzIGluIHNwYVxuXG5cbiAgICAgICAgc3BhLnN3YXAoaiwgcGkpOyAvLyB1cGRhdGUgcGVybXV0YXRpb24gdmVjdG9yIChzd2FwIHZhbHVlcyBAIGosIHBpKVxuXG4gICAgICAgIHN3YXBJbmRlY2VzKGosIHBpKTtcbiAgICAgIH0gLy8gbG9vcCB2YWx1ZXMgaW4gc3BhIChvcmRlciBieSByb3cpXG5cblxuICAgICAgc3BhLmZvckVhY2goMCwgcm93cyAtIDEsIGZ1bmN0aW9uICh4LCB2KSB7XG4gICAgICAgIC8vIGNoZWNrIHdlIGFyZSBhYm92ZSBkaWFnb25hbFxuICAgICAgICBpZiAoeCA8PSBqKSB7XG4gICAgICAgICAgLy8gdXBkYXRlIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4XG4gICAgICAgICAgdXZhbHVlcy5wdXNoKHYpO1xuICAgICAgICAgIHVpbmRleC5wdXNoKHgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHVwZGF0ZSB2YWx1ZVxuICAgICAgICAgIHYgPSBkaXZpZGVTY2FsYXIodiwgdmpqKTsgLy8gY2hlY2sgdmFsdWUgaXMgbm9uIHplcm9cblxuICAgICAgICAgIGlmICghZXF1YWxTY2FsYXIodiwgMCkpIHtcbiAgICAgICAgICAgIC8vIHVwZGF0ZSBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeFxuICAgICAgICAgICAgbHZhbHVlcy5wdXNoKHYpO1xuICAgICAgICAgICAgbGluZGV4LnB1c2goeCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgZm9yIChqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgX2xvb3AoKTtcbiAgICB9IC8vIHVwZGF0ZSBwdHJzXG5cblxuICAgIHVwdHIucHVzaCh1dmFsdWVzLmxlbmd0aCk7XG4gICAgbHB0ci5wdXNoKGx2YWx1ZXMubGVuZ3RoKTsgLy8gcmV0dXJuIG1hdHJpY2VzXG5cbiAgICByZXR1cm4ge1xuICAgICAgTDogbmV3IFNwYXJzZU1hdHJpeCh7XG4gICAgICAgIHZhbHVlczogbHZhbHVlcyxcbiAgICAgICAgaW5kZXg6IGxpbmRleCxcbiAgICAgICAgcHRyOiBscHRyLFxuICAgICAgICBzaXplOiBsc2l6ZVxuICAgICAgfSksXG4gICAgICBVOiBuZXcgU3BhcnNlTWF0cml4KHtcbiAgICAgICAgdmFsdWVzOiB1dmFsdWVzLFxuICAgICAgICBpbmRleDogdWluZGV4LFxuICAgICAgICBwdHI6IHVwdHIsXG4gICAgICAgIHNpemU6IHVzaXplXG4gICAgICB9KSxcbiAgICAgIHA6IHB2Q28sXG4gICAgICB0b1N0cmluZzogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiAnTDogJyArIHRoaXMuTC50b1N0cmluZygpICsgJ1xcblU6ICcgKyB0aGlzLlUudG9TdHJpbmcoKSArICdcXG5QOiAnICsgdGhpcy5wO1xuICAgICAgfVxuICAgIH07XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVMdXAgPSBjcmVhdGVMdXA7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVFyID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxudmFyIG5hbWUgPSAncXInO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ3plcm9zJywgJ2lkZW50aXR5JywgJ2lzWmVybycsICdlcXVhbCcsICdzaWduJywgJ3NxcnQnLCAnY29uaicsICd1bmFyeU1pbnVzJywgJ2FkZFNjYWxhcicsICdkaXZpZGVTY2FsYXInLCAnbXVsdGlwbHlTY2FsYXInLCAnc3VidHJhY3QnLCAnY29tcGxleCddO1xudmFyIGNyZWF0ZVFyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgemVyb3MgPSBfcmVmLnplcm9zLFxuICAgICAgaWRlbnRpdHkgPSBfcmVmLmlkZW50aXR5LFxuICAgICAgaXNaZXJvID0gX3JlZi5pc1plcm8sXG4gICAgICBlcXVhbCA9IF9yZWYuZXF1YWwsXG4gICAgICBzaWduID0gX3JlZi5zaWduLFxuICAgICAgc3FydCA9IF9yZWYuc3FydCxcbiAgICAgIGNvbmogPSBfcmVmLmNvbmosXG4gICAgICB1bmFyeU1pbnVzID0gX3JlZi51bmFyeU1pbnVzLFxuICAgICAgYWRkU2NhbGFyID0gX3JlZi5hZGRTY2FsYXIsXG4gICAgICBkaXZpZGVTY2FsYXIgPSBfcmVmLmRpdmlkZVNjYWxhcixcbiAgICAgIG11bHRpcGx5U2NhbGFyID0gX3JlZi5tdWx0aXBseVNjYWxhcixcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCxcbiAgICAgIGNvbXBsZXggPSBfcmVmLmNvbXBsZXg7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgTWF0cml4IFFSIGRlY29tcG9zaXRpb24uIE1hdHJpeCBgQWAgaXMgZGVjb21wb3NlZCBpblxuICAgKiB0d28gbWF0cmljZXMgKGBRYCwgYFJgKSB3aGVyZSBgUWAgaXMgYW5cbiAgICogb3J0aG9nb25hbCBtYXRyaXggYW5kIGBSYCBpcyBhbiB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnFyKEEpXG4gICAqXG4gICAqIEV4YW1wbGU6XG4gICAqXG4gICAqICAgIGNvbnN0IG0gPSBbXG4gICAqICAgICAgWzEsIC0xLCAgNF0sXG4gICAqICAgICAgWzEsICA0LCAtMl0sXG4gICAqICAgICAgWzEsICA0LCAgMl0sXG4gICAqICAgICAgWzEsICAtMSwgMF1cbiAgICogICAgXVxuICAgKiAgICBjb25zdCByZXN1bHQgPSBtYXRoLnFyKG0pXG4gICAqICAgIC8vIHIgPSB7XG4gICAqICAgIC8vICAgUTogW1xuICAgKiAgICAvLyAgICAgWzAuNSwgLTAuNSwgICAwLjVdLFxuICAgKiAgICAvLyAgICAgWzAuNSwgIDAuNSwgIC0wLjVdLFxuICAgKiAgICAvLyAgICAgWzAuNSwgIDAuNSwgICAwLjVdLFxuICAgKiAgICAvLyAgICAgWzAuNSwgLTAuNSwgIC0wLjVdLFxuICAgKiAgICAvLyAgIF0sXG4gICAqICAgIC8vICAgUjogW1xuICAgKiAgICAvLyAgICAgWzIsIDMsICAyXSxcbiAgICogICAgLy8gICAgIFswLCA1LCAtMl0sXG4gICAqICAgIC8vICAgICBbMCwgMCwgIDRdLFxuICAgKiAgICAvLyAgICAgWzAsIDAsICAwXVxuICAgKiAgICAvLyAgIF1cbiAgICogICAgLy8gfVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgbHVwLCBsdXNvbHZlXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4IHwgQXJyYXl9IEEgICAgQSB0d28gZGltZW5zaW9uYWwgbWF0cml4IG9yIGFycmF5XG4gICAqIGZvciB3aGljaCB0byBnZXQgdGhlIFFSIGRlY29tcG9zaXRpb24uXG4gICAqXG4gICAqIEByZXR1cm4ge3tROiBBcnJheSB8IE1hdHJpeCwgUjogQXJyYXkgfCBNYXRyaXh9fSBROiB0aGUgb3J0aG9nb25hbFxuICAgKiBtYXRyaXggYW5kIFI6IHRoZSB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeFxuICAgKi9cbiAgcmV0dXJuIF9leHRlbmRzKHR5cGVkKG5hbWUsIHtcbiAgICBEZW5zZU1hdHJpeDogZnVuY3Rpb24gRGVuc2VNYXRyaXgobSkge1xuICAgICAgcmV0dXJuIF9kZW5zZVFSKG0pO1xuICAgIH0sXG4gICAgU3BhcnNlTWF0cml4OiBmdW5jdGlvbiBTcGFyc2VNYXRyaXgobSkge1xuICAgICAgcmV0dXJuIF9zcGFyc2VRUihtKTtcbiAgICB9LFxuICAgIEFycmF5OiBmdW5jdGlvbiBBcnJheShhKSB7XG4gICAgICAvLyBjcmVhdGUgZGVuc2UgbWF0cml4IGZyb20gYXJyYXlcbiAgICAgIHZhciBtID0gbWF0cml4KGEpOyAvLyBsdXAsIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cblxuICAgICAgdmFyIHIgPSBfZGVuc2VRUihtKTsgLy8gcmVzdWx0XG5cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgUTogci5RLnZhbHVlT2YoKSxcbiAgICAgICAgUjogci5SLnZhbHVlT2YoKVxuICAgICAgfTtcbiAgICB9XG4gIH0pLCB7XG4gICAgX2RlbnNlUVJpbXBsOiBfZGVuc2VRUmltcGxcbiAgfSk7XG5cbiAgZnVuY3Rpb24gX2RlbnNlUVJpbXBsKG0pIHtcbiAgICAvLyByb3dzICYgY29sdW1ucyAobSB4IG4pXG4gICAgdmFyIHJvd3MgPSBtLl9zaXplWzBdOyAvLyBtXG5cbiAgICB2YXIgY29scyA9IG0uX3NpemVbMV07IC8vIG5cblxuICAgIHZhciBRID0gaWRlbnRpdHkoW3Jvd3NdLCAnZGVuc2UnKTtcbiAgICB2YXIgUWRhdGEgPSBRLl9kYXRhO1xuICAgIHZhciBSID0gbS5jbG9uZSgpO1xuICAgIHZhciBSZGF0YSA9IFIuX2RhdGE7IC8vIHZhcnNcblxuICAgIHZhciBpLCBqLCBrO1xuICAgIHZhciB3ID0gemVyb3MoW3Jvd3NdLCAnJyk7XG5cbiAgICBmb3IgKGsgPSAwOyBrIDwgTWF0aC5taW4oY29scywgcm93cyk7ICsraykge1xuICAgICAgLypcbiAgICAgICAqICoqay10aCBIb3VzZWhvbGQgbWF0cml4KipcbiAgICAgICAqXG4gICAgICAgKiBUaGUgbWF0cml4IEkgLSAyKnYqdHJhbnNwb3NlKHYpXG4gICAgICAgKiB4ICAgICA9IGZpcnN0IGNvbHVtbiBvZiBBXG4gICAgICAgKiB4MSAgICA9IGZpcnN0IGVsZW1lbnQgb2YgeFxuICAgICAgICogYWxwaGEgPSB4MSAvIHx4MXwgKiB8eHxcbiAgICAgICAqIGUxICAgID0gdHJhbnBvc2UoWzEsIDAsIDAsIC4uLl0pXG4gICAgICAgKiB1ICAgICA9IHggLSBhbHBoYSAqIGUxXG4gICAgICAgKiB2ICAgICA9IHUgLyB8dXxcbiAgICAgICAqXG4gICAgICAgKiBIb3VzZWhvbGQgbWF0cml4ID0gSSAtIDIgKiB2ICogdHJhbnBvc2UodilcbiAgICAgICAqXG4gICAgICAgKiAgKiBJbml0aWFsbHkgUSA9IEkgYW5kIFIgPSBBLlxuICAgICAgICogICogSG91c2Vob2xkIG1hdHJpeCBpcyBhIHJlZmxlY3Rpb24gaW4gYSBwbGFuZSBub3JtYWwgdG8gdiB3aGljaFxuICAgICAgICogICAgd2lsbCB6ZXJvIG91dCBhbGwgYnV0IHRoZSB0b3AgcmlnaHQgZWxlbWVudCBpbiBSLlxuICAgICAgICogICogQXBwcGx5aW5nIHJlZmxlY3Rpb24gdG8gYm90aCBRIGFuZCBSIHdpbGwgbm90IGNoYW5nZSBwcm9kdWN0LlxuICAgICAgICogICogUmVwZWF0IHRoaXMgcHJvY2VzcyBvbiB0aGUgKDEsMSkgbWlub3IgdG8gZ2V0IFIgYXMgYW4gdXBwZXJcbiAgICAgICAqICAgIHRyaWFuZ3VsYXIgbWF0cml4LlxuICAgICAgICogICogUmVmbGVjdGlvbnMgbGVhdmUgdGhlIG1hZ25pdHVkZSBvZiB0aGUgY29sdW1ucyBvZiBRIHVuY2hhbmdlZFxuICAgICAgICogICAgc28gUSByZW1haW5zIG90aG9nYW5hbC5cbiAgICAgICAqXG4gICAgICAgKi9cbiAgICAgIHZhciBwaXZvdCA9IFJkYXRhW2tdW2tdO1xuICAgICAgdmFyIHNnbiA9IHVuYXJ5TWludXMoZXF1YWwocGl2b3QsIDApID8gMSA6IHNpZ24ocGl2b3QpKTtcbiAgICAgIHZhciBjb25qU2duID0gY29uaihzZ24pO1xuICAgICAgdmFyIGFscGhhU3F1YXJlZCA9IDA7XG5cbiAgICAgIGZvciAoaSA9IGs7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgYWxwaGFTcXVhcmVkID0gYWRkU2NhbGFyKGFscGhhU3F1YXJlZCwgbXVsdGlwbHlTY2FsYXIoUmRhdGFbaV1ba10sIGNvbmooUmRhdGFbaV1ba10pKSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBhbHBoYSA9IG11bHRpcGx5U2NhbGFyKHNnbiwgc3FydChhbHBoYVNxdWFyZWQpKTtcblxuICAgICAgaWYgKCFpc1plcm8oYWxwaGEpKSB7XG4gICAgICAgIC8vIGZpcnN0IGVsZW1lbnQgaW4gdmVjdG9yIHVcbiAgICAgICAgdmFyIHUxID0gc3VidHJhY3QocGl2b3QsIGFscGhhKTsgLy8gdyA9IHYgKiB1MSAvIHx1fCAgICAob25seSBlbGVtZW50cyBrIHRvIChyb3dzLTEpIGFyZSB1c2VkKVxuXG4gICAgICAgIHdba10gPSAxO1xuXG4gICAgICAgIGZvciAoaSA9IGsgKyAxOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgd1tpXSA9IGRpdmlkZVNjYWxhcihSZGF0YVtpXVtrXSwgdTEpO1xuICAgICAgICB9IC8vIHRhdSA9IC0gY29uaih1MSAvIGFscGhhKVxuXG5cbiAgICAgICAgdmFyIHRhdSA9IHVuYXJ5TWludXMoY29uaihkaXZpZGVTY2FsYXIodTEsIGFscGhhKSkpO1xuICAgICAgICB2YXIgcyA9IHZvaWQgMDtcbiAgICAgICAgLypcbiAgICAgICAgICogdGF1IGFuZCB3IGhhdmUgYmVlbiBjaG9vc2VuIHNvIHRoYXRcbiAgICAgICAgICpcbiAgICAgICAgICogMiAqIHYgKiB0cmFucG9zZSh2KSA9IHRhdSAqIHcgKiB0cmFucG9zZSh3KVxuICAgICAgICAgKi9cblxuICAgICAgICAvKlxuICAgICAgICAgKiAtLSBjYWxjdWxhdGUgUiA9IFIgLSB0YXUgKiB3ICogdHJhbnBvc2UodykgKiBSIC0tXG4gICAgICAgICAqIE9ubHkgZG8gY2FsY3VsYXRpb24gd2l0aCByb3dzIGsgdG8gKHJvd3MtMSlcbiAgICAgICAgICogQWRkaXRpb25hbGx5IGNvbHVtbnMgMCB0byAoay0xKSB3aWxsIG5vdCBiZSBjaGFuZ2VkIGJ5IHRoaXNcbiAgICAgICAgICogICBtdWx0aXBsaWNhdGlvbiBzbyBkbyBub3QgYm90aGVyIHJlY2FsY3VsYXRpbmcgdGhlbVxuICAgICAgICAgKi9cblxuICAgICAgICBmb3IgKGogPSBrOyBqIDwgY29sczsgaisrKSB7XG4gICAgICAgICAgcyA9IDAuMDsgLy8gY2FsY3VsYXRlIGp0aCBlbGVtZW50IG9mIFt0cmFucG9zZSh3KSAqIFJdXG5cbiAgICAgICAgICBmb3IgKGkgPSBrOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYWRkU2NhbGFyKHMsIG11bHRpcGx5U2NhbGFyKGNvbmood1tpXSksIFJkYXRhW2ldW2pdKSk7XG4gICAgICAgICAgfSAvLyBjYWxjdWxhdGUgdGhlIGp0aCBlbGVtZW50IG9mIFt0YXUgKiB0cmFuc3Bvc2UodykgKiBSXVxuXG5cbiAgICAgICAgICBzID0gbXVsdGlwbHlTY2FsYXIocywgdGF1KTtcblxuICAgICAgICAgIGZvciAoaSA9IGs7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgICAgIFJkYXRhW2ldW2pdID0gbXVsdGlwbHlTY2FsYXIoc3VidHJhY3QoUmRhdGFbaV1bal0sIG11bHRpcGx5U2NhbGFyKHdbaV0sIHMpKSwgY29ualNnbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8qXG4gICAgICAgICAqIC0tIGNhbGN1bGF0ZSBRID0gUSAtIHRhdSAqIFEgKiB3ICogdHJhbnNwb3NlKHcpIC0tXG4gICAgICAgICAqIFEgaXMgYSBzcXVhcmUgbWF0cml4IChyb3dzIHggcm93cylcbiAgICAgICAgICogT25seSBkbyBjYWxjdWxhdGlvbiB3aXRoIGNvbHVtbnMgayB0byAocm93cy0xKVxuICAgICAgICAgKiBBZGRpdGlvbmFsbHkgcm93cyAwIHRvIChrLTEpIHdpbGwgbm90IGJlIGNoYW5nZWQgYnkgdGhpc1xuICAgICAgICAgKiAgIG11bHRpcGxpY2F0aW9uIHNvIGRvIG5vdCBib3RoZXIgcmVjYWxjdWxhdGluZyB0aGVtXG4gICAgICAgICAqL1xuXG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAgIHMgPSAwLjA7IC8vIGNhbGN1bGF0ZSBpdGggZWxlbWVudCBvZiBbUSAqIHddXG5cbiAgICAgICAgICBmb3IgKGogPSBrOyBqIDwgcm93czsgaisrKSB7XG4gICAgICAgICAgICBzID0gYWRkU2NhbGFyKHMsIG11bHRpcGx5U2NhbGFyKFFkYXRhW2ldW2pdLCB3W2pdKSk7XG4gICAgICAgICAgfSAvLyBjYWxjdWxhdGUgdGhlIGl0aCBlbGVtZW50IG9mIFt0YXUgKiBRICogd11cblxuXG4gICAgICAgICAgcyA9IG11bHRpcGx5U2NhbGFyKHMsIHRhdSk7XG5cbiAgICAgICAgICBmb3IgKGogPSBrOyBqIDwgcm93czsgKytqKSB7XG4gICAgICAgICAgICBRZGF0YVtpXVtqXSA9IGRpdmlkZVNjYWxhcihzdWJ0cmFjdChRZGF0YVtpXVtqXSwgbXVsdGlwbHlTY2FsYXIocywgY29uaih3W2pdKSkpLCBjb25qU2duKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIHJldHVybiBtYXRyaWNlc1xuXG5cbiAgICByZXR1cm4ge1xuICAgICAgUTogUSxcbiAgICAgIFI6IFIsXG4gICAgICB0b1N0cmluZzogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiAnUTogJyArIHRoaXMuUS50b1N0cmluZygpICsgJ1xcblI6ICcgKyB0aGlzLlIudG9TdHJpbmcoKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gX2RlbnNlUVIobSkge1xuICAgIHZhciByZXQgPSBfZGVuc2VRUmltcGwobSk7XG5cbiAgICB2YXIgUmRhdGEgPSByZXQuUi5fZGF0YTtcblxuICAgIGlmIChtLl9kYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhciB6ZXJvID0gUmRhdGFbMF1bMF0udHlwZSA9PT0gJ0NvbXBsZXgnID8gY29tcGxleCgwKSA6IDA7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgUmRhdGEubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpICYmIGogPCAoUmRhdGFbMF0gfHwgW10pLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgUmRhdGFbaV1bal0gPSB6ZXJvO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9zcGFyc2VRUihtKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdxciBub3QgaW1wbGVtZW50ZWQgZm9yIHNwYXJzZSBtYXRyaWNlcyB5ZXQnKTtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZVFyID0gY3JlYXRlUXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNsdSA9IHZvaWQgMDtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jc1NxciA9IHJlcXVpcmUoXCIuLi9zcGFyc2UvY3NTcXJcIik7XG5cbnZhciBfY3NMdSA9IHJlcXVpcmUoXCIuLi9zcGFyc2UvY3NMdVwiKTtcblxudmFyIG5hbWUgPSAnc2x1JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FicycsICdhZGQnLCAnbXVsdGlwbHknLCAndHJhbnNwb3NlJywgJ2RpdmlkZVNjYWxhcicsICdzdWJ0cmFjdCcsICdsYXJnZXInLCAnbGFyZ2VyRXEnLCAnU3BhcnNlTWF0cml4J107XG52YXIgY3JlYXRlU2x1ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGFicyA9IF9yZWYuYWJzLFxuICAgICAgYWRkID0gX3JlZi5hZGQsXG4gICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHksXG4gICAgICB0cmFuc3Bvc2UgPSBfcmVmLnRyYW5zcG9zZSxcbiAgICAgIGRpdmlkZVNjYWxhciA9IF9yZWYuZGl2aWRlU2NhbGFyLFxuICAgICAgc3VidHJhY3QgPSBfcmVmLnN1YnRyYWN0LFxuICAgICAgbGFyZ2VyID0gX3JlZi5sYXJnZXIsXG4gICAgICBsYXJnZXJFcSA9IF9yZWYubGFyZ2VyRXEsXG4gICAgICBTcGFyc2VNYXRyaXggPSBfcmVmLlNwYXJzZU1hdHJpeDtcbiAgdmFyIGNzU3FyID0gKDAsIF9jc1Nxci5jcmVhdGVDc1Nxcikoe1xuICAgIGFkZDogYWRkLFxuICAgIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgICB0cmFuc3Bvc2U6IHRyYW5zcG9zZVxuICB9KTtcbiAgdmFyIGNzTHUgPSAoMCwgX2NzTHUuY3JlYXRlQ3NMdSkoe1xuICAgIGFiczogYWJzLFxuICAgIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICAgIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgICBzdWJ0cmFjdDogc3VidHJhY3QsXG4gICAgbGFyZ2VyOiBsYXJnZXIsXG4gICAgbGFyZ2VyRXE6IGxhcmdlckVxLFxuICAgIFNwYXJzZU1hdHJpeDogU3BhcnNlTWF0cml4XG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBTcGFyc2UgTWF0cml4IExVIGRlY29tcG9zaXRpb24gd2l0aCBmdWxsIHBpdm90aW5nLiBTcGFyc2UgTWF0cml4IGBBYCBpcyBkZWNvbXBvc2VkIGluIHR3byBtYXRyaWNlcyAoYExgLCBgVWApIGFuZCB0d28gcGVybXV0YXRpb24gdmVjdG9ycyAoYHBpbnZgLCBgcWApIHdoZXJlXG4gICAqXG4gICAqIGBQICogQSAqIFEgPSBMICogVWBcbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnNsdShBLCBvcmRlciwgdGhyZXNob2xkKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgY29uc3QgQSA9IG1hdGguc3BhcnNlKFtbNCwzXSwgWzYsIDNdXSlcbiAgICogICAgbWF0aC5zbHUoQSwgMSwgMC4wMDEpXG4gICAqICAgIC8vIHJldHVybnM6XG4gICAqICAgIC8vIHtcbiAgICogICAgLy8gICBMOiBbWzEsIDBdLCBbMS41LCAxXV1cbiAgICogICAgLy8gICBVOiBbWzQsIDNdLCBbMCwgLTEuNV1dXG4gICAqICAgIC8vICAgcDogWzAsIDFdXG4gICAqICAgIC8vICAgcTogWzAsIDFdXG4gICAqICAgIC8vIH1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGx1cCwgbHNvbHZlLCB1c29sdmUsIGx1c29sdmVcbiAgICpcbiAgICogQHBhcmFtIHtTcGFyc2VNYXRyaXh9IEEgICAgICAgICAgICAgIEEgdHdvIGRpbWVuc2lvbmFsIHNwYXJzZSBtYXRyaXggZm9yIHdoaWNoIHRvIGdldCB0aGUgTFUgZGVjb21wb3NpdGlvbi5cbiAgICogQHBhcmFtIHtOdW1iZXJ9ICAgICAgIG9yZGVyICAgICAgICAgIFRoZSBTeW1ib2xpYyBPcmRlcmluZyBhbmQgQW5hbHlzaXMgb3JkZXI6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAtIE5hdHVyYWwgb3JkZXJpbmcsIG5vIHBlcm11dGF0aW9uIHZlY3RvciBxIGlzIHJldHVybmVkXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtIE1hdHJpeCBtdXN0IGJlIHNxdWFyZSwgc3ltYm9saWMgb3JkZXJpbmcgYW5kIGFuYWxpc2lzIGlzIHBlcmZvcm1lZCBvbiBNID0gQSArIEEnXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAtIFN5bWJvbGljIG9yZGVyaW5nIGFuZCBhbmFsaXNpcyBpcyBwZXJmb3JtZWQgb24gTSA9IEEnICogQS4gRGVuc2UgY29sdW1ucyBmcm9tIEEnIGFyZSBkcm9wcGVkLCBBIHJlY3JlYXRlZCBmcm9tIEEnLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIGFwcHJvcHJpYXRlZm9yIExVIGZhY3Rvcml6YXRpb24gb2YgdW5zeW1tZXRyaWMgbWF0cmljZXMuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyAtIFN5bWJvbGljIG9yZGVyaW5nIGFuZCBhbmFsaXNpcyBpcyBwZXJmb3JtZWQgb24gTSA9IEEnICogQS4gVGhpcyBpcyBiZXN0IHVzZWQgZm9yIExVIGZhY3Rvcml6YXRpb24gaXMgbWF0cml4IE0gaGFzIG5vIGRlbnNlIHJvd3MuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgZGVuc2Ugcm93IGlzIGEgcm93IHdpdGggbW9yZSB0aGFuIDEwKnNxcihjb2x1bW5zKSBlbnRyaWVzLlxuICAgKiBAcGFyYW0ge051bWJlcn0gICAgICAgdGhyZXNob2xkICAgICAgIFBhcnRpYWwgcGl2b3RpbmcgdGhyZXNob2xkICgxIGZvciBwYXJ0aWFsIHBpdm90aW5nKVxuICAgKlxuICAgKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeCwgdGhlIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4IGFuZCB0aGUgcGVybXV0YXRpb24gdmVjdG9ycy5cbiAgICovXG5cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnU3BhcnNlTWF0cml4LCBudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeE51bWJlck51bWJlcihhLCBvcmRlciwgdGhyZXNob2xkKSB7XG4gICAgICAvLyB2ZXJpZnkgb3JkZXJcbiAgICAgIGlmICghKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShvcmRlcikgfHwgb3JkZXIgPCAwIHx8IG9yZGVyID4gMykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N5bWJvbGljIE9yZGVyaW5nIGFuZCBBbmFseXNpcyBvcmRlciBtdXN0IGJlIGFuIGludGVnZXIgbnVtYmVyIGluIHRoZSBpbnRlcnZhbCBbMCwgM10nKTtcbiAgICAgIH0gLy8gdmVyaWZ5IHRocmVzaG9sZFxuXG5cbiAgICAgIGlmICh0aHJlc2hvbGQgPCAwIHx8IHRocmVzaG9sZCA+IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJ0aWFsIHBpdm90aW5nIHRocmVzaG9sZCBtdXN0IGJlIGEgbnVtYmVyIGZyb20gMCB0byAxJyk7XG4gICAgICB9IC8vIHBlcmZvcm0gc3ltYm9saWMgb3JkZXJpbmcgYW5kIGFuYWx5c2lzXG5cblxuICAgICAgdmFyIHMgPSBjc1NxcihvcmRlciwgYSwgZmFsc2UpOyAvLyBwZXJmb3JtIGx1IGRlY29tcG9zaXRpb25cblxuICAgICAgdmFyIGYgPSBjc0x1KGEsIHMsIHRocmVzaG9sZCk7IC8vIHJldHVybiBkZWNvbXBvc2l0aW9uXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIEw6IGYuTCxcbiAgICAgICAgVTogZi5VLFxuICAgICAgICBwOiBmLnBpbnYsXG4gICAgICAgIHE6IHMucSxcbiAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgICAgIHJldHVybiAnTDogJyArIHRoaXMuTC50b1N0cmluZygpICsgJ1xcblU6ICcgKyB0aGlzLlUudG9TdHJpbmcoKSArICdcXG5wOiAnICsgdGhpcy5wLnRvU3RyaW5nKCkgKyAodGhpcy5xID8gJ1xcbnE6ICcgKyB0aGlzLnEudG9TdHJpbmcoKSA6ICcnKSArICdcXG4nO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlU2x1ID0gY3JlYXRlU2x1OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVEZXJpdmF0aXZlID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnZGVyaXZhdGl2ZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAncGFyc2UnLCAnc2ltcGxpZnknLCAnZXF1YWwnLCAnaXNaZXJvJywgJ251bWVyaWMnLCAnQ29uc3RhbnROb2RlJywgJ0Z1bmN0aW9uTm9kZScsICdPcGVyYXRvck5vZGUnLCAnUGFyZW50aGVzaXNOb2RlJywgJ1N5bWJvbE5vZGUnXTtcbnZhciBjcmVhdGVEZXJpdmF0aXZlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgcGFyc2UgPSBfcmVmLnBhcnNlLFxuICAgICAgc2ltcGxpZnkgPSBfcmVmLnNpbXBsaWZ5LFxuICAgICAgZXF1YWwgPSBfcmVmLmVxdWFsLFxuICAgICAgaXNaZXJvID0gX3JlZi5pc1plcm8sXG4gICAgICBudW1lcmljID0gX3JlZi5udW1lcmljLFxuICAgICAgQ29uc3RhbnROb2RlID0gX3JlZi5Db25zdGFudE5vZGUsXG4gICAgICBGdW5jdGlvbk5vZGUgPSBfcmVmLkZ1bmN0aW9uTm9kZSxcbiAgICAgIE9wZXJhdG9yTm9kZSA9IF9yZWYuT3BlcmF0b3JOb2RlLFxuICAgICAgUGFyZW50aGVzaXNOb2RlID0gX3JlZi5QYXJlbnRoZXNpc05vZGUsXG4gICAgICBTeW1ib2xOb2RlID0gX3JlZi5TeW1ib2xOb2RlO1xuXG4gIC8qKlxuICAgKiBUYWtlcyB0aGUgZGVyaXZhdGl2ZSBvZiBhbiBleHByZXNzaW9uIGV4cHJlc3NlZCBpbiBwYXJzZXIgTm9kZXMuXG4gICAqIFRoZSBkZXJpdmF0aXZlIHdpbGwgYmUgdGFrZW4gb3ZlciB0aGUgc3VwcGxpZWQgdmFyaWFibGUgaW4gdGhlXG4gICAqIHNlY29uZCBwYXJhbWV0ZXIuIElmIHRoZXJlIGFyZSBtdWx0aXBsZSB2YXJpYWJsZXMgaW4gdGhlIGV4cHJlc3Npb24sXG4gICAqIGl0IHdpbGwgcmV0dXJuIGEgcGFydGlhbCBkZXJpdmF0aXZlLlxuICAgKlxuICAgKiBUaGlzIHVzZXMgcnVsZXMgb2YgZGlmZmVyZW50aWF0aW9uIHdoaWNoIGNhbiBiZSBmb3VuZCBoZXJlOlxuICAgKlxuICAgKiAtIFtEaWZmZXJlbnRpYXRpb24gcnVsZXMgKFdpa2lwZWRpYSldKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0RpZmZlcmVudGlhdGlvbl9ydWxlcylcbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgZGVyaXZhdGl2ZShleHByLCB2YXJpYWJsZSlcbiAgICogICAgIGRlcml2YXRpdmUoZXhwciwgdmFyaWFibGUsIG9wdGlvbnMpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgbWF0aC5kZXJpdmF0aXZlKCd4XjInLCAneCcpICAgICAgICAgICAgICAgICAgICAgLy8gTm9kZSB7MiAqIHh9XG4gICAqICAgICBtYXRoLmRlcml2YXRpdmUoJ3heMicsICd4Jywge3NpbXBsaWZ5OiBmYWxzZX0pICAvLyBOb2RlIHsyICogMSAqIHggXiAoMiAtIDEpXG4gICAqICAgICBtYXRoLmRlcml2YXRpdmUoJ3NpbigyeCknLCAneCcpKSAgICAgICAgICAgICAgICAvLyBOb2RlIHsyICogY29zKDIgKiB4KX1cbiAgICogICAgIG1hdGguZGVyaXZhdGl2ZSgnMip4JywgJ3gnKS5ldmFsdWF0ZSgpICAgICAgICAgIC8vIG51bWJlciAyXG4gICAqICAgICBtYXRoLmRlcml2YXRpdmUoJ3heMicsICd4JykuZXZhbHVhdGUoe3g6IDR9KSAgICAvLyBudW1iZXIgOFxuICAgKiAgICAgY29uc3QgZiA9IG1hdGgucGFyc2UoJ3heMicpXG4gICAqICAgICBjb25zdCB4ID0gbWF0aC5wYXJzZSgneCcpXG4gICAqICAgICBtYXRoLmRlcml2YXRpdmUoZiwgeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb2RlIHsyICogeH1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBzaW1wbGlmeSwgcGFyc2UsIGV2YWx1YXRlXG4gICAqXG4gICAqIEBwYXJhbSAge05vZGUgfCBzdHJpbmd9IGV4cHIgICAgICAgICAgIFRoZSBleHByZXNzaW9uIHRvIGRpZmZlcmVudGlhdGVcbiAgICogQHBhcmFtICB7U3ltYm9sTm9kZSB8IHN0cmluZ30gdmFyaWFibGUgVGhlIHZhcmlhYmxlIG92ZXIgd2hpY2ggdG8gZGlmZmVyZW50aWF0ZVxuICAgKiBAcGFyYW0gIHt7c2ltcGxpZnk6IGJvb2xlYW59fSBbb3B0aW9uc11cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgVGhlcmUgaXMgb25lIG9wdGlvbiBhdmFpbGFibGUsIGBzaW1wbGlmeWAsIHdoaWNoXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHRydWUgYnkgZGVmYXVsdC4gV2hlbiBmYWxzZSwgb3V0cHV0IHdpbGwgbm90XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgIGJlIHNpbXBsaWZpZWQuXG4gICAqIEByZXR1cm4ge0NvbnN0YW50Tm9kZSB8IFN5bWJvbE5vZGUgfCBQYXJlbnRoZXNpc05vZGUgfCBGdW5jdGlvbk5vZGUgfCBPcGVyYXRvck5vZGV9ICAgIFRoZSBkZXJpdmF0aXZlIG9mIGBleHByYFxuICAgKi9cbiAgdmFyIGRlcml2YXRpdmUgPSB0eXBlZCgnZGVyaXZhdGl2ZScsIHtcbiAgICAnTm9kZSwgU3ltYm9sTm9kZSwgT2JqZWN0JzogZnVuY3Rpb24gTm9kZVN5bWJvbE5vZGVPYmplY3QoZXhwciwgdmFyaWFibGUsIG9wdGlvbnMpIHtcbiAgICAgIHZhciBjb25zdE5vZGVzID0ge307XG4gICAgICBjb25zdFRhZyhjb25zdE5vZGVzLCBleHByLCB2YXJpYWJsZS5uYW1lKTtcblxuICAgICAgdmFyIHJlcyA9IF9kZXJpdmF0aXZlKGV4cHIsIGNvbnN0Tm9kZXMpO1xuXG4gICAgICByZXR1cm4gb3B0aW9ucy5zaW1wbGlmeSA/IHNpbXBsaWZ5KHJlcykgOiByZXM7XG4gICAgfSxcbiAgICAnTm9kZSwgU3ltYm9sTm9kZSc6IGZ1bmN0aW9uIE5vZGVTeW1ib2xOb2RlKGV4cHIsIHZhcmlhYmxlKSB7XG4gICAgICByZXR1cm4gZGVyaXZhdGl2ZShleHByLCB2YXJpYWJsZSwge1xuICAgICAgICBzaW1wbGlmeTogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSxcbiAgICAnc3RyaW5nLCBTeW1ib2xOb2RlJzogZnVuY3Rpb24gc3RyaW5nU3ltYm9sTm9kZShleHByLCB2YXJpYWJsZSkge1xuICAgICAgcmV0dXJuIGRlcml2YXRpdmUocGFyc2UoZXhwciksIHZhcmlhYmxlKTtcbiAgICB9LFxuICAgICdzdHJpbmcsIFN5bWJvbE5vZGUsIE9iamVjdCc6IGZ1bmN0aW9uIHN0cmluZ1N5bWJvbE5vZGVPYmplY3QoZXhwciwgdmFyaWFibGUsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBkZXJpdmF0aXZlKHBhcnNlKGV4cHIpLCB2YXJpYWJsZSwgb3B0aW9ucyk7XG4gICAgfSxcbiAgICAnc3RyaW5nLCBzdHJpbmcnOiBmdW5jdGlvbiBzdHJpbmdTdHJpbmcoZXhwciwgdmFyaWFibGUpIHtcbiAgICAgIHJldHVybiBkZXJpdmF0aXZlKHBhcnNlKGV4cHIpLCBwYXJzZSh2YXJpYWJsZSkpO1xuICAgIH0sXG4gICAgJ3N0cmluZywgc3RyaW5nLCBPYmplY3QnOiBmdW5jdGlvbiBzdHJpbmdTdHJpbmdPYmplY3QoZXhwciwgdmFyaWFibGUsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBkZXJpdmF0aXZlKHBhcnNlKGV4cHIpLCBwYXJzZSh2YXJpYWJsZSksIG9wdGlvbnMpO1xuICAgIH0sXG4gICAgJ05vZGUsIHN0cmluZyc6IGZ1bmN0aW9uIE5vZGVTdHJpbmcoZXhwciwgdmFyaWFibGUpIHtcbiAgICAgIHJldHVybiBkZXJpdmF0aXZlKGV4cHIsIHBhcnNlKHZhcmlhYmxlKSk7XG4gICAgfSxcbiAgICAnTm9kZSwgc3RyaW5nLCBPYmplY3QnOiBmdW5jdGlvbiBOb2RlU3RyaW5nT2JqZWN0KGV4cHIsIHZhcmlhYmxlLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gZGVyaXZhdGl2ZShleHByLCBwYXJzZSh2YXJpYWJsZSksIG9wdGlvbnMpO1xuICAgIH0gLy8gVE9ETzogcmVwbGFjZSB0aGUgOCBzaWduYXR1cmVzIGFib3ZlIHdpdGggNCBhcyBzb29uIGFzIHR5cGVkLWZ1bmN0aW9uIHN1cHBvcnRzIG9wdGlvbmFsIGFyZ3VtZW50c1xuXG4gICAgLyogVE9ETzogaW1wbGVtZW50IGFuZCB0ZXN0IHN5bnRheCB3aXRoIG9yZGVyIG9mIGRlcml2YXRpdmVzIC0+IGltcGxlbWVudCBhcyBhbiBvcHRpb24ge29yZGVyOiBudW1iZXJ9XG4gICAgJ05vZGUsIFN5bWJvbE5vZGUsIENvbnN0YW50Tm9kZSc6IGZ1bmN0aW9uIChleHByLCB2YXJpYWJsZSwge29yZGVyfSkge1xuICAgICAgbGV0IHJlcyA9IGV4cHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXI7IGkrKykge1xuICAgICAgICBsZXQgY29uc3ROb2RlcyA9IHt9XG4gICAgICAgIGNvbnN0VGFnKGNvbnN0Tm9kZXMsIGV4cHIsIHZhcmlhYmxlLm5hbWUpXG4gICAgICAgIHJlcyA9IF9kZXJpdmF0aXZlKHJlcywgY29uc3ROb2RlcylcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNcbiAgICB9XG4gICAgKi9cblxuICB9KTtcbiAgZGVyaXZhdGl2ZS5fc2ltcGxpZnkgPSB0cnVlO1xuXG4gIGRlcml2YXRpdmUudG9UZXggPSBmdW5jdGlvbiAoZGVyaXYpIHtcbiAgICByZXR1cm4gX2Rlcml2VGV4LmFwcGx5KG51bGwsIGRlcml2LmFyZ3MpO1xuICB9OyAvLyBGSVhNRTogbW92ZSB0aGUgdG9UZXggbWV0aG9kIG9mIGRlcml2YXRpdmUgdG8gbGF0ZXguanMuIERpZmZpY3VsdHkgaXMgdGhhdCBpdCByZWxpZXMgb24gcGFyc2UuXG4gIC8vIE5PVEU6IHRoZSBvcHRpb25hbCBcIm9yZGVyXCIgcGFyYW1ldGVyIGhlcmUgaXMgY3VycmVudGx5IHVudXNlZFxuXG5cbiAgdmFyIF9kZXJpdlRleCA9IHR5cGVkKCdfZGVyaXZUZXgnLCB7XG4gICAgJ05vZGUsIFN5bWJvbE5vZGUnOiBmdW5jdGlvbiBOb2RlU3ltYm9sTm9kZShleHByLCB4KSB7XG4gICAgICBpZiAoKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkoZXhwcikgJiYgKDAsIF9pcy50eXBlT2YpKGV4cHIudmFsdWUpID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gX2Rlcml2VGV4KHBhcnNlKGV4cHIudmFsdWUpLnRvU3RyaW5nKCksIHgudG9TdHJpbmcoKSwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gX2Rlcml2VGV4KGV4cHIudG9TdHJpbmcoKSwgeC50b1N0cmluZygpLCAxKTtcbiAgICAgIH1cbiAgICB9LFxuICAgICdOb2RlLCBDb25zdGFudE5vZGUnOiBmdW5jdGlvbiBOb2RlQ29uc3RhbnROb2RlKGV4cHIsIHgpIHtcbiAgICAgIGlmICgoMCwgX2lzLnR5cGVPZikoeC52YWx1ZSkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBfZGVyaXZUZXgoZXhwciwgcGFyc2UoeC52YWx1ZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHNlY29uZCBwYXJhbWV0ZXIgdG8gJ2Rlcml2YXRpdmUnIGlzIGEgbm9uLXN0cmluZyBjb25zdGFudFwiKTtcbiAgICAgIH1cbiAgICB9LFxuICAgICdOb2RlLCBTeW1ib2xOb2RlLCBDb25zdGFudE5vZGUnOiBmdW5jdGlvbiBOb2RlU3ltYm9sTm9kZUNvbnN0YW50Tm9kZShleHByLCB4LCBvcmRlcikge1xuICAgICAgcmV0dXJuIF9kZXJpdlRleChleHByLnRvU3RyaW5nKCksIHgubmFtZSwgb3JkZXIudmFsdWUpO1xuICAgIH0sXG4gICAgJ3N0cmluZywgc3RyaW5nLCBudW1iZXInOiBmdW5jdGlvbiBzdHJpbmdTdHJpbmdOdW1iZXIoZXhwciwgeCwgb3JkZXIpIHtcbiAgICAgIHZhciBkO1xuXG4gICAgICBpZiAob3JkZXIgPT09IDEpIHtcbiAgICAgICAgZCA9ICd7ZFxcXFxvdmVyIGQnICsgeCArICd9JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGQgPSAne2ReeycgKyBvcmRlciArICd9XFxcXG92ZXIgZCcgKyB4ICsgJ157JyArIG9yZGVyICsgJ319JztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGQgKyBcIlxcXFxsZWZ0W1wiLmNvbmNhdChleHByLCBcIlxcXFxyaWdodF1cIik7XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIERvZXMgYSBkZXB0aC1maXJzdCBzZWFyY2ggb24gdGhlIGV4cHJlc3Npb24gdHJlZSB0byBpZGVudGlmeSB3aGF0IE5vZGVzXG4gICAqIGFyZSBjb25zdGFudHMgKGUuZy4gMiArIDIpLCBhbmQgc3RvcmVzIHRoZSBvbmVzIHRoYXQgYXJlIGNvbnN0YW50cyBpblxuICAgKiBjb25zdE5vZGVzLiBDbGFzc2lmaWNhdGlvbiBpcyBkb25lIGFzIGZvbGxvd3M6XG4gICAqXG4gICAqICAgMS4gQ29uc3RhbnROb2RlcyBhcmUgY29uc3RhbnRzLlxuICAgKiAgIDIuIElmIHRoZXJlIGV4aXN0cyBhIFN5bWJvbE5vZGUsIG9mIHdoaWNoIHdlIGFyZSBkaWZmZXJlbnRpYXRpbmcgb3ZlcixcbiAgICogICAgICBpbiB0aGUgc3VidHJlZSBpdCBpcyBub3QgY29uc3RhbnQuXG4gICAqXG4gICAqIEBwYXJhbSAge09iamVjdH0gY29uc3ROb2RlcyAgSG9sZHMgdGhlIG5vZGVzIHRoYXQgYXJlIGNvbnN0YW50XG4gICAqIEBwYXJhbSAge0NvbnN0YW50Tm9kZSB8IFN5bWJvbE5vZGUgfCBQYXJlbnRoZXNpc05vZGUgfCBGdW5jdGlvbk5vZGUgfCBPcGVyYXRvck5vZGV9IG5vZGVcbiAgICogQHBhcmFtICB7c3RyaW5nfSB2YXJOYW1lICAgICBWYXJpYWJsZSB0aGF0IHdlIGFyZSBkaWZmZXJlbnRpYXRpbmdcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gIGlmIG5vZGUgaXMgY29uc3RhbnRcbiAgICovXG4gIC8vIFRPRE86IGNhbiB3ZSByZXdyaXRlIGNvbnN0VGFnIGludG8gYSBwdXJlIGZ1bmN0aW9uP1xuXG5cbiAgdmFyIGNvbnN0VGFnID0gdHlwZWQoJ2NvbnN0VGFnJywge1xuICAgICdPYmplY3QsIENvbnN0YW50Tm9kZSwgc3RyaW5nJzogZnVuY3Rpb24gT2JqZWN0Q29uc3RhbnROb2RlU3RyaW5nKGNvbnN0Tm9kZXMsIG5vZGUpIHtcbiAgICAgIGNvbnN0Tm9kZXNbbm9kZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICAnT2JqZWN0LCBTeW1ib2xOb2RlLCBzdHJpbmcnOiBmdW5jdGlvbiBPYmplY3RTeW1ib2xOb2RlU3RyaW5nKGNvbnN0Tm9kZXMsIG5vZGUsIHZhck5hbWUpIHtcbiAgICAgIC8vIFRyZWF0IG90aGVyIHZhcmlhYmxlcyBsaWtlIGNvbnN0YW50cy4gRm9yIHJlYXNvbmluZywgc2VlOlxuICAgICAgLy8gICBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9QYXJ0aWFsX2Rlcml2YXRpdmVcbiAgICAgIGlmIChub2RlLm5hbWUgIT09IHZhck5hbWUpIHtcbiAgICAgICAgY29uc3ROb2Rlc1tub2RlXSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICAnT2JqZWN0LCBQYXJlbnRoZXNpc05vZGUsIHN0cmluZyc6IGZ1bmN0aW9uIE9iamVjdFBhcmVudGhlc2lzTm9kZVN0cmluZyhjb25zdE5vZGVzLCBub2RlLCB2YXJOYW1lKSB7XG4gICAgICByZXR1cm4gY29uc3RUYWcoY29uc3ROb2Rlcywgbm9kZS5jb250ZW50LCB2YXJOYW1lKTtcbiAgICB9LFxuICAgICdPYmplY3QsIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUsIHN0cmluZyc6IGZ1bmN0aW9uIE9iamVjdEZ1bmN0aW9uQXNzaWdubWVudE5vZGVTdHJpbmcoY29uc3ROb2Rlcywgbm9kZSwgdmFyTmFtZSkge1xuICAgICAgaWYgKG5vZGUucGFyYW1zLmluZGV4T2YodmFyTmFtZSkgPT09IC0xKSB7XG4gICAgICAgIGNvbnN0Tm9kZXNbbm9kZV0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnN0VGFnKGNvbnN0Tm9kZXMsIG5vZGUuZXhwciwgdmFyTmFtZSk7XG4gICAgfSxcbiAgICAnT2JqZWN0LCBGdW5jdGlvbk5vZGUgfCBPcGVyYXRvck5vZGUsIHN0cmluZyc6IGZ1bmN0aW9uIE9iamVjdEZ1bmN0aW9uTm9kZU9wZXJhdG9yTm9kZVN0cmluZyhjb25zdE5vZGVzLCBub2RlLCB2YXJOYW1lKSB7XG4gICAgICBpZiAobm9kZS5hcmdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdmFyIGlzQ29uc3QgPSBjb25zdFRhZyhjb25zdE5vZGVzLCBub2RlLmFyZ3NbMF0sIHZhck5hbWUpO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbm9kZS5hcmdzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgaXNDb25zdCA9IGNvbnN0VGFnKGNvbnN0Tm9kZXMsIG5vZGUuYXJnc1tpXSwgdmFyTmFtZSkgJiYgaXNDb25zdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0NvbnN0KSB7XG4gICAgICAgICAgY29uc3ROb2Rlc1tub2RlXSA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBBcHBsaWVzIGRpZmZlcmVudGlhdGlvbiBydWxlcy5cbiAgICpcbiAgICogQHBhcmFtICB7Q29uc3RhbnROb2RlIHwgU3ltYm9sTm9kZSB8IFBhcmVudGhlc2lzTm9kZSB8IEZ1bmN0aW9uTm9kZSB8IE9wZXJhdG9yTm9kZX0gbm9kZVxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGNvbnN0Tm9kZXMgIEhvbGRzIHRoZSBub2RlcyB0aGF0IGFyZSBjb25zdGFudFxuICAgKiBAcmV0dXJuIHtDb25zdGFudE5vZGUgfCBTeW1ib2xOb2RlIHwgUGFyZW50aGVzaXNOb2RlIHwgRnVuY3Rpb25Ob2RlIHwgT3BlcmF0b3JOb2RlfSAgICBUaGUgZGVyaXZhdGl2ZSBvZiBgZXhwcmBcbiAgICovXG5cbiAgdmFyIF9kZXJpdmF0aXZlID0gdHlwZWQoJ19kZXJpdmF0aXZlJywge1xuICAgICdDb25zdGFudE5vZGUsIE9iamVjdCc6IGZ1bmN0aW9uIENvbnN0YW50Tm9kZU9iamVjdChub2RlKSB7XG4gICAgICByZXR1cm4gY3JlYXRlQ29uc3RhbnROb2RlKDApO1xuICAgIH0sXG4gICAgJ1N5bWJvbE5vZGUsIE9iamVjdCc6IGZ1bmN0aW9uIFN5bWJvbE5vZGVPYmplY3Qobm9kZSwgY29uc3ROb2Rlcykge1xuICAgICAgaWYgKGNvbnN0Tm9kZXNbbm9kZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlQ29uc3RhbnROb2RlKDApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY3JlYXRlQ29uc3RhbnROb2RlKDEpO1xuICAgIH0sXG4gICAgJ1BhcmVudGhlc2lzTm9kZSwgT2JqZWN0JzogZnVuY3Rpb24gUGFyZW50aGVzaXNOb2RlT2JqZWN0KG5vZGUsIGNvbnN0Tm9kZXMpIHtcbiAgICAgIHJldHVybiBuZXcgUGFyZW50aGVzaXNOb2RlKF9kZXJpdmF0aXZlKG5vZGUuY29udGVudCwgY29uc3ROb2RlcykpO1xuICAgIH0sXG4gICAgJ0Z1bmN0aW9uQXNzaWdubWVudE5vZGUsIE9iamVjdCc6IGZ1bmN0aW9uIEZ1bmN0aW9uQXNzaWdubWVudE5vZGVPYmplY3Qobm9kZSwgY29uc3ROb2Rlcykge1xuICAgICAgaWYgKGNvbnN0Tm9kZXNbbm9kZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlQ29uc3RhbnROb2RlKDApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX2Rlcml2YXRpdmUobm9kZS5leHByLCBjb25zdE5vZGVzKTtcbiAgICB9LFxuICAgICdGdW5jdGlvbk5vZGUsIE9iamVjdCc6IGZ1bmN0aW9uIEZ1bmN0aW9uTm9kZU9iamVjdChub2RlLCBjb25zdE5vZGVzKSB7XG4gICAgICBpZiAobm9kZS5hcmdzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICBmdW5jQXJnc0NoZWNrKG5vZGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uc3ROb2Rlc1tub2RlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVDb25zdGFudE5vZGUoMCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBhcmcwID0gbm9kZS5hcmdzWzBdO1xuICAgICAgdmFyIGFyZzE7XG4gICAgICB2YXIgZGl2ID0gZmFsc2U7IC8vIGlzIG91dHB1dCBhIGZyYWN0aW9uP1xuXG4gICAgICB2YXIgbmVnYXRpdmUgPSBmYWxzZTsgLy8gaXMgb3V0cHV0IG5lZ2F0aXZlP1xuXG4gICAgICB2YXIgZnVuY0Rlcml2YXRpdmU7XG5cbiAgICAgIHN3aXRjaCAobm9kZS5uYW1lKSB7XG4gICAgICAgIGNhc2UgJ2NicnQnOlxuICAgICAgICAgIC8vIGQvZHgoY2JydCh4KSkgPSAxIC8gKDN4XigyLzMpKVxuICAgICAgICAgIGRpdiA9IHRydWU7XG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW2NyZWF0ZUNvbnN0YW50Tm9kZSgzKSwgbmV3IE9wZXJhdG9yTm9kZSgnXicsICdwb3cnLCBbYXJnMCwgbmV3IE9wZXJhdG9yTm9kZSgnLycsICdkaXZpZGUnLCBbY3JlYXRlQ29uc3RhbnROb2RlKDIpLCBjcmVhdGVDb25zdGFudE5vZGUoMyldKV0pXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnc3FydCc6XG4gICAgICAgIGNhc2UgJ250aFJvb3QnOlxuICAgICAgICAgIC8vIGQvZHgoc3FydCh4KSkgPSAxIC8gKDIqc3FydCh4KSlcbiAgICAgICAgICBpZiAobm9kZS5hcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgZGl2ID0gdHJ1ZTtcbiAgICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFtjcmVhdGVDb25zdGFudE5vZGUoMiksIG5ldyBGdW5jdGlvbk5vZGUoJ3NxcnQnLCBbYXJnMF0pXSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChub2RlLmFyZ3MubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAvLyBSZWFycmFuZ2UgZnJvbSBudGhSb290KHgsIGEpIC0+IHheKDEvYSlcbiAgICAgICAgICAgIGFyZzEgPSBuZXcgT3BlcmF0b3JOb2RlKCcvJywgJ2RpdmlkZScsIFtjcmVhdGVDb25zdGFudE5vZGUoMSksIG5vZGUuYXJnc1sxXV0pOyAvLyBJcyBhIHZhcmlhYmxlP1xuXG4gICAgICAgICAgICBjb25zdE5vZGVzW2FyZzFdID0gY29uc3ROb2Rlc1tub2RlLmFyZ3NbMV1dO1xuICAgICAgICAgICAgcmV0dXJuIF9kZXJpdmF0aXZlKG5ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAsIGFyZzFdKSwgY29uc3ROb2Rlcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnbG9nMTAnOlxuICAgICAgICAgIGFyZzEgPSBjcmVhdGVDb25zdGFudE5vZGUoMTApO1xuXG4gICAgICAgIC8qIGZhbGwgdGhyb3VnaCEgKi9cblxuICAgICAgICBjYXNlICdsb2cnOlxuICAgICAgICAgIGlmICghYXJnMSAmJiBub2RlLmFyZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAvLyBkL2R4KGxvZyh4KSkgPSAxIC8geFxuICAgICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBhcmcwLmNsb25lKCk7XG4gICAgICAgICAgICBkaXYgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5hcmdzLmxlbmd0aCA9PT0gMSAmJiBhcmcxIHx8IG5vZGUuYXJncy5sZW5ndGggPT09IDIgJiYgY29uc3ROb2Rlc1tub2RlLmFyZ3NbMV1dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIGQvZHgobG9nKHgsIGMpKSA9IDEgLyAoeCpsbihjKSlcbiAgICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFthcmcwLmNsb25lKCksIG5ldyBGdW5jdGlvbk5vZGUoJ2xvZycsIFthcmcxIHx8IG5vZGUuYXJnc1sxXV0pXSk7XG4gICAgICAgICAgICBkaXYgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5hcmdzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgLy8gZC9keChsb2coZih4KSwgZyh4KSkpID0gZC9keChsb2coZih4KSkgLyBsb2coZyh4KSkpXG4gICAgICAgICAgICByZXR1cm4gX2Rlcml2YXRpdmUobmV3IE9wZXJhdG9yTm9kZSgnLycsICdkaXZpZGUnLCBbbmV3IEZ1bmN0aW9uTm9kZSgnbG9nJywgW2FyZzBdKSwgbmV3IEZ1bmN0aW9uTm9kZSgnbG9nJywgW25vZGUuYXJnc1sxXV0pXSksIGNvbnN0Tm9kZXMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3Bvdyc6XG4gICAgICAgICAgY29uc3ROb2Rlc1thcmcxXSA9IGNvbnN0Tm9kZXNbbm9kZS5hcmdzWzFdXTsgLy8gUGFzcyB0byBwb3cgb3BlcmF0b3Igbm9kZSBwYXJzZXJcblxuICAgICAgICAgIHJldHVybiBfZGVyaXZhdGl2ZShuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFthcmcwLCBub2RlLmFyZ3NbMV1dKSwgY29uc3ROb2Rlcyk7XG5cbiAgICAgICAgY2FzZSAnZXhwJzpcbiAgICAgICAgICAvLyBkL2R4KGVeeCkgPSBlXnhcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBGdW5jdGlvbk5vZGUoJ2V4cCcsIFthcmcwLmNsb25lKCldKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdzaW4nOlxuICAgICAgICAgIC8vIGQvZHgoc2luKHgpKSA9IGNvcyh4KVxuICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IEZ1bmN0aW9uTm9kZSgnY29zJywgW2FyZzAuY2xvbmUoKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2Nvcyc6XG4gICAgICAgICAgLy8gZC9keChjb3MoeCkpID0gLXNpbih4KVxuICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnLScsICd1bmFyeU1pbnVzJywgW25ldyBGdW5jdGlvbk5vZGUoJ3NpbicsIFthcmcwLmNsb25lKCldKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3Rhbic6XG4gICAgICAgICAgLy8gZC9keCh0YW4oeCkpID0gc2VjKHgpXjJcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW25ldyBGdW5jdGlvbk5vZGUoJ3NlYycsIFthcmcwLmNsb25lKCldKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnc2VjJzpcbiAgICAgICAgICAvLyBkL2R4KHNlYyh4KSkgPSBzZWMoeCl0YW4oeClcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbbm9kZSwgbmV3IEZ1bmN0aW9uTm9kZSgndGFuJywgW2FyZzAuY2xvbmUoKV0pXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnY3NjJzpcbiAgICAgICAgICAvLyBkL2R4KGNzYyh4KSkgPSAtY3NjKHgpY290KHgpXG4gICAgICAgICAgbmVnYXRpdmUgPSB0cnVlO1xuICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFtub2RlLCBuZXcgRnVuY3Rpb25Ob2RlKCdjb3QnLCBbYXJnMC5jbG9uZSgpXSldKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdjb3QnOlxuICAgICAgICAgIC8vIGQvZHgoY290KHgpKSA9IC1jc2MoeCleMlxuICAgICAgICAgIG5lZ2F0aXZlID0gdHJ1ZTtcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW25ldyBGdW5jdGlvbk5vZGUoJ2NzYycsIFthcmcwLmNsb25lKCldKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYXNpbic6XG4gICAgICAgICAgLy8gZC9keChhc2luKHgpKSA9IDEgLyBzcXJ0KDEgLSB4XjIpXG4gICAgICAgICAgZGl2ID0gdHJ1ZTtcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBGdW5jdGlvbk5vZGUoJ3NxcnQnLCBbbmV3IE9wZXJhdG9yTm9kZSgnLScsICdzdWJ0cmFjdCcsIFtjcmVhdGVDb25zdGFudE5vZGUoMSksIG5ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSldKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2Fjb3MnOlxuICAgICAgICAgIC8vIGQvZHgoYWNvcyh4KSkgPSAtMSAvIHNxcnQoMSAtIHheMilcbiAgICAgICAgICBkaXYgPSB0cnVlO1xuICAgICAgICAgIG5lZ2F0aXZlID0gdHJ1ZTtcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBGdW5jdGlvbk5vZGUoJ3NxcnQnLCBbbmV3IE9wZXJhdG9yTm9kZSgnLScsICdzdWJ0cmFjdCcsIFtjcmVhdGVDb25zdGFudE5vZGUoMSksIG5ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSldKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2F0YW4nOlxuICAgICAgICAgIC8vIGQvZHgoYXRhbih4KSkgPSAxIC8gKHheMiArIDEpXG4gICAgICAgICAgZGl2ID0gdHJ1ZTtcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJysnLCAnYWRkJywgW25ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSksIGNyZWF0ZUNvbnN0YW50Tm9kZSgxKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2FzZWMnOlxuICAgICAgICAgIC8vIGQvZHgoYXNlYyh4KSkgPSAxIC8gKHx4fCpzcXJ0KHheMiAtIDEpKVxuICAgICAgICAgIGRpdiA9IHRydWU7XG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW25ldyBGdW5jdGlvbk5vZGUoJ2FicycsIFthcmcwLmNsb25lKCldKSwgbmV3IEZ1bmN0aW9uTm9kZSgnc3FydCcsIFtuZXcgT3BlcmF0b3JOb2RlKCctJywgJ3N1YnRyYWN0JywgW25ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSksIGNyZWF0ZUNvbnN0YW50Tm9kZSgxKV0pXSldKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdhY3NjJzpcbiAgICAgICAgICAvLyBkL2R4KGFjc2MoeCkpID0gLTEgLyAofHh8KnNxcnQoeF4yIC0gMSkpXG4gICAgICAgICAgZGl2ID0gdHJ1ZTtcbiAgICAgICAgICBuZWdhdGl2ZSA9IHRydWU7XG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW25ldyBGdW5jdGlvbk5vZGUoJ2FicycsIFthcmcwLmNsb25lKCldKSwgbmV3IEZ1bmN0aW9uTm9kZSgnc3FydCcsIFtuZXcgT3BlcmF0b3JOb2RlKCctJywgJ3N1YnRyYWN0JywgW25ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSksIGNyZWF0ZUNvbnN0YW50Tm9kZSgxKV0pXSldKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdhY290JzpcbiAgICAgICAgICAvLyBkL2R4KGFjb3QoeCkpID0gLTEgLyAoeF4yICsgMSlcbiAgICAgICAgICBkaXYgPSB0cnVlO1xuICAgICAgICAgIG5lZ2F0aXZlID0gdHJ1ZTtcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJysnLCAnYWRkJywgW25ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSksIGNyZWF0ZUNvbnN0YW50Tm9kZSgxKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3NpbmgnOlxuICAgICAgICAgIC8vIGQvZHgoc2luaCh4KSkgPSBjb3NoKHgpXG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgRnVuY3Rpb25Ob2RlKCdjb3NoJywgW2FyZzAuY2xvbmUoKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2Nvc2gnOlxuICAgICAgICAgIC8vIGQvZHgoY29zaCh4KSkgPSBzaW5oKHgpXG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgRnVuY3Rpb25Ob2RlKCdzaW5oJywgW2FyZzAuY2xvbmUoKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3RhbmgnOlxuICAgICAgICAgIC8vIGQvZHgodGFuaCh4KSkgPSBzZWNoKHgpXjJcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW25ldyBGdW5jdGlvbk5vZGUoJ3NlY2gnLCBbYXJnMC5jbG9uZSgpXSksIGNyZWF0ZUNvbnN0YW50Tm9kZSgyKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3NlY2gnOlxuICAgICAgICAgIC8vIGQvZHgoc2VjaCh4KSkgPSAtc2VjaCh4KXRhbmgoeClcbiAgICAgICAgICBuZWdhdGl2ZSA9IHRydWU7XG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW25vZGUsIG5ldyBGdW5jdGlvbk5vZGUoJ3RhbmgnLCBbYXJnMC5jbG9uZSgpXSldKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdjc2NoJzpcbiAgICAgICAgICAvLyBkL2R4KGNzY2goeCkpID0gLWNzY2goeCljb3RoKHgpXG4gICAgICAgICAgbmVnYXRpdmUgPSB0cnVlO1xuICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFtub2RlLCBuZXcgRnVuY3Rpb25Ob2RlKCdjb3RoJywgW2FyZzAuY2xvbmUoKV0pXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnY290aCc6XG4gICAgICAgICAgLy8gZC9keChjb3RoKHgpKSA9IC1jc2NoKHgpXjJcbiAgICAgICAgICBuZWdhdGl2ZSA9IHRydWU7XG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFtuZXcgRnVuY3Rpb25Ob2RlKCdjc2NoJywgW2FyZzAuY2xvbmUoKV0pLCBjcmVhdGVDb25zdGFudE5vZGUoMildKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdhc2luaCc6XG4gICAgICAgICAgLy8gZC9keChhc2luaCh4KSkgPSAxIC8gc3FydCh4XjIgKyAxKVxuICAgICAgICAgIGRpdiA9IHRydWU7XG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgRnVuY3Rpb25Ob2RlKCdzcXJ0JywgW25ldyBPcGVyYXRvck5vZGUoJysnLCAnYWRkJywgW25ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSksIGNyZWF0ZUNvbnN0YW50Tm9kZSgxKV0pXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYWNvc2gnOlxuICAgICAgICAgIC8vIGQvZHgoYWNvc2goeCkpID0gMSAvIHNxcnQoeF4yIC0gMSk7IFhYWCBwb3RlbnRpYWxseSBvbmx5IGZvciB4ID49IDEgKHRoZSByZWFsIHNwZWN0cnVtKVxuICAgICAgICAgIGRpdiA9IHRydWU7XG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgRnVuY3Rpb25Ob2RlKCdzcXJ0JywgW25ldyBPcGVyYXRvck5vZGUoJy0nLCAnc3VidHJhY3QnLCBbbmV3IE9wZXJhdG9yTm9kZSgnXicsICdwb3cnLCBbYXJnMC5jbG9uZSgpLCBjcmVhdGVDb25zdGFudE5vZGUoMildKSwgY3JlYXRlQ29uc3RhbnROb2RlKDEpXSldKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdhdGFuaCc6XG4gICAgICAgICAgLy8gZC9keChhdGFuaCh4KSkgPSAxIC8gKDEgLSB4XjIpXG4gICAgICAgICAgZGl2ID0gdHJ1ZTtcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJy0nLCAnc3VidHJhY3QnLCBbY3JlYXRlQ29uc3RhbnROb2RlKDEpLCBuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFthcmcwLmNsb25lKCksIGNyZWF0ZUNvbnN0YW50Tm9kZSgyKV0pXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYXNlY2gnOlxuICAgICAgICAgIC8vIGQvZHgoYXNlY2goeCkpID0gLTEgLyAoeCpzcXJ0KDEgLSB4XjIpKVxuICAgICAgICAgIGRpdiA9IHRydWU7XG4gICAgICAgICAgbmVnYXRpdmUgPSB0cnVlO1xuICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFthcmcwLmNsb25lKCksIG5ldyBGdW5jdGlvbk5vZGUoJ3NxcnQnLCBbbmV3IE9wZXJhdG9yTm9kZSgnLScsICdzdWJ0cmFjdCcsIFtjcmVhdGVDb25zdGFudE5vZGUoMSksIG5ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSldKV0pXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYWNzY2gnOlxuICAgICAgICAgIC8vIGQvZHgoYWNzY2goeCkpID0gLTEgLyAofHh8KnNxcnQoeF4yICsgMSkpXG4gICAgICAgICAgZGl2ID0gdHJ1ZTtcbiAgICAgICAgICBuZWdhdGl2ZSA9IHRydWU7XG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW25ldyBGdW5jdGlvbk5vZGUoJ2FicycsIFthcmcwLmNsb25lKCldKSwgbmV3IEZ1bmN0aW9uTm9kZSgnc3FydCcsIFtuZXcgT3BlcmF0b3JOb2RlKCcrJywgJ2FkZCcsIFtuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFthcmcwLmNsb25lKCksIGNyZWF0ZUNvbnN0YW50Tm9kZSgyKV0pLCBjcmVhdGVDb25zdGFudE5vZGUoMSldKV0pXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYWNvdGgnOlxuICAgICAgICAgIC8vIGQvZHgoYWNvdGgoeCkpID0gLTEgLyAoMSAtIHheMilcbiAgICAgICAgICBkaXYgPSB0cnVlO1xuICAgICAgICAgIG5lZ2F0aXZlID0gdHJ1ZTtcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJy0nLCAnc3VidHJhY3QnLCBbY3JlYXRlQ29uc3RhbnROb2RlKDEpLCBuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFthcmcwLmNsb25lKCksIGNyZWF0ZUNvbnN0YW50Tm9kZSgyKV0pXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYWJzJzpcbiAgICAgICAgICAvLyBkL2R4KGFicyh4KSkgPSBhYnMoeCkveFxuICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnLycsICdkaXZpZGUnLCBbbmV3IEZ1bmN0aW9uTm9kZShuZXcgU3ltYm9sTm9kZSgnYWJzJyksIFthcmcwLmNsb25lKCldKSwgYXJnMC5jbG9uZSgpXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnZ2FtbWEnOiAvLyBOZWVkcyBkaWdhbW1hIGZ1bmN0aW9uLCBkL2R4KGdhbW1hKHgpKSA9IGdhbW1hKHgpZGlnYW1tYSh4KVxuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGdW5jdGlvbiBcIicgKyBub2RlLm5hbWUgKyAnXCIgaXMgbm90IHN1cHBvcnRlZCBieSBkZXJpdmF0aXZlLCBvciBhIHdyb25nIG51bWJlciBvZiBhcmd1bWVudHMgaXMgcGFzc2VkJyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBvcCwgZnVuYztcblxuICAgICAgaWYgKGRpdikge1xuICAgICAgICBvcCA9ICcvJztcbiAgICAgICAgZnVuYyA9ICdkaXZpZGUnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3AgPSAnKic7XG4gICAgICAgIGZ1bmMgPSAnbXVsdGlwbHknO1xuICAgICAgfVxuICAgICAgLyogQXBwbHkgY2hhaW4gcnVsZSB0byBhbGwgZnVuY3Rpb25zOlxuICAgICAgICAgRih4KSAgPSBmKGcoeCkpXG4gICAgICAgICBGJyh4KSA9IGcnKHgpKmYnKGcoeCkpICovXG5cblxuICAgICAgdmFyIGNoYWluRGVyaXZhdGl2ZSA9IF9kZXJpdmF0aXZlKGFyZzAsIGNvbnN0Tm9kZXMpO1xuXG4gICAgICBpZiAobmVnYXRpdmUpIHtcbiAgICAgICAgY2hhaW5EZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnLScsICd1bmFyeU1pbnVzJywgW2NoYWluRGVyaXZhdGl2ZV0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IE9wZXJhdG9yTm9kZShvcCwgZnVuYywgW2NoYWluRGVyaXZhdGl2ZSwgZnVuY0Rlcml2YXRpdmVdKTtcbiAgICB9LFxuICAgICdPcGVyYXRvck5vZGUsIE9iamVjdCc6IGZ1bmN0aW9uIE9wZXJhdG9yTm9kZU9iamVjdChub2RlLCBjb25zdE5vZGVzKSB7XG4gICAgICBpZiAoY29uc3ROb2Rlc1tub2RlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVDb25zdGFudE5vZGUoMCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlLm9wID09PSAnKycpIHtcbiAgICAgICAgLy8gZC9keChzdW0oZih4KSkgPSBzdW0oZicoeCkpXG4gICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5vZGUub3AsIG5vZGUuZm4sIG5vZGUuYXJncy5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgICAgICAgIHJldHVybiBfZGVyaXZhdGl2ZShhcmcsIGNvbnN0Tm9kZXMpO1xuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlLm9wID09PSAnLScpIHtcbiAgICAgICAgLy8gZC9keCgrLy1mKHgpKSA9ICsvLWYnKHgpXG4gICAgICAgIGlmIChub2RlLmlzVW5hcnkoKSkge1xuICAgICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5vZGUub3AsIG5vZGUuZm4sIFtfZGVyaXZhdGl2ZShub2RlLmFyZ3NbMF0sIGNvbnN0Tm9kZXMpXSk7XG4gICAgICAgIH0gLy8gTGluZWFyaXR5IG9mIGRpZmZlcmVudGlhdGlvbiwgZC9keChmKHgpICsvLSBnKHgpKSA9IGYnKHgpICsvLSBnJyh4KVxuXG5cbiAgICAgICAgaWYgKG5vZGUuaXNCaW5hcnkoKSkge1xuICAgICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5vZGUub3AsIG5vZGUuZm4sIFtfZGVyaXZhdGl2ZShub2RlLmFyZ3NbMF0sIGNvbnN0Tm9kZXMpLCBfZGVyaXZhdGl2ZShub2RlLmFyZ3NbMV0sIGNvbnN0Tm9kZXMpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUub3AgPT09ICcqJykge1xuICAgICAgICAvLyBkL2R4KGMqZih4KSkgPSBjKmYnKHgpXG4gICAgICAgIHZhciBjb25zdGFudFRlcm1zID0gbm9kZS5hcmdzLmZpbHRlcihmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnN0Tm9kZXNbYXJnXSAhPT0gdW5kZWZpbmVkO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoY29uc3RhbnRUZXJtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdmFyIG5vbkNvbnN0YW50VGVybXMgPSBub2RlLmFyZ3MuZmlsdGVyKGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgICAgIHJldHVybiBjb25zdE5vZGVzW2FyZ10gPT09IHVuZGVmaW5lZDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB2YXIgbm9uQ29uc3RhbnROb2RlID0gbm9uQ29uc3RhbnRUZXJtcy5sZW5ndGggPT09IDEgPyBub25Db25zdGFudFRlcm1zWzBdIDogbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIG5vbkNvbnN0YW50VGVybXMpO1xuICAgICAgICAgIHZhciBuZXdBcmdzID0gY29uc3RhbnRUZXJtcy5jb25jYXQoX2Rlcml2YXRpdmUobm9uQ29uc3RhbnROb2RlLCBjb25zdE5vZGVzKSk7XG4gICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBuZXdBcmdzKTtcbiAgICAgICAgfSAvLyBQcm9kdWN0IFJ1bGUsIGQvZHgoZih4KSpnKHgpKSA9IGYnKHgpKmcoeCkgKyBmKHgpKmcnKHgpXG5cblxuICAgICAgICByZXR1cm4gbmV3IE9wZXJhdG9yTm9kZSgnKycsICdhZGQnLCBub2RlLmFyZ3MubWFwKGZ1bmN0aW9uIChhcmdPdXRlcikge1xuICAgICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5Jywgbm9kZS5hcmdzLm1hcChmdW5jdGlvbiAoYXJnSW5uZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBhcmdJbm5lciA9PT0gYXJnT3V0ZXIgPyBfZGVyaXZhdGl2ZShhcmdJbm5lciwgY29uc3ROb2RlcykgOiBhcmdJbm5lci5jbG9uZSgpO1xuICAgICAgICAgIH0pKTtcbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZS5vcCA9PT0gJy8nICYmIG5vZGUuaXNCaW5hcnkoKSkge1xuICAgICAgICB2YXIgYXJnMCA9IG5vZGUuYXJnc1swXTtcbiAgICAgICAgdmFyIGFyZzEgPSBub2RlLmFyZ3NbMV07IC8vIGQvZHgoZih4KSAvIGMpID0gZicoeCkgLyBjXG5cbiAgICAgICAgaWYgKGNvbnN0Tm9kZXNbYXJnMV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKCcvJywgJ2RpdmlkZScsIFtfZGVyaXZhdGl2ZShhcmcwLCBjb25zdE5vZGVzKSwgYXJnMV0pO1xuICAgICAgICB9IC8vIFJlY2lwcm9jYWwgUnVsZSwgZC9keChjIC8gZih4KSkgPSAtYyhmJyh4KS9mKHgpXjIpXG5cblxuICAgICAgICBpZiAoY29uc3ROb2Rlc1thcmcwXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbbmV3IE9wZXJhdG9yTm9kZSgnLScsICd1bmFyeU1pbnVzJywgW2FyZzBdKSwgbmV3IE9wZXJhdG9yTm9kZSgnLycsICdkaXZpZGUnLCBbX2Rlcml2YXRpdmUoYXJnMSwgY29uc3ROb2RlcyksIG5ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzEuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSldKV0pO1xuICAgICAgICB9IC8vIFF1b3RpZW50IHJ1bGUsIGQvZHgoZih4KSAvIGcoeCkpID0gKGYnKHgpZyh4KSAtIGYoeClnJyh4KSkgLyBnKHgpXjJcblxuXG4gICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKCcvJywgJ2RpdmlkZScsIFtuZXcgT3BlcmF0b3JOb2RlKCctJywgJ3N1YnRyYWN0JywgW25ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbX2Rlcml2YXRpdmUoYXJnMCwgY29uc3ROb2RlcyksIGFyZzEuY2xvbmUoKV0pLCBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW2FyZzAuY2xvbmUoKSwgX2Rlcml2YXRpdmUoYXJnMSwgY29uc3ROb2RlcyldKV0pLCBuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFthcmcxLmNsb25lKCksIGNyZWF0ZUNvbnN0YW50Tm9kZSgyKV0pXSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlLm9wID09PSAnXicgJiYgbm9kZS5pc0JpbmFyeSgpKSB7XG4gICAgICAgIHZhciBfYXJnID0gbm9kZS5hcmdzWzBdO1xuICAgICAgICB2YXIgX2FyZzIgPSBub2RlLmFyZ3NbMV07XG5cbiAgICAgICAgaWYgKGNvbnN0Tm9kZXNbX2FyZ10gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIElmIGlzIHNlY3JldGx5IGNvbnN0YW50OyAwXmYoeCkgPSAxIChpbiBKUyksIDFeZih4KSA9IDFcbiAgICAgICAgICBpZiAoKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkoX2FyZykgJiYgKGlzWmVybyhfYXJnLnZhbHVlKSB8fCBlcXVhbChfYXJnLnZhbHVlLCAxKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVDb25zdGFudE5vZGUoMCk7XG4gICAgICAgICAgfSAvLyBkL2R4KGNeZih4KSkgPSBjXmYoeCkqbG4oYykqZicoeClcblxuXG4gICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbbm9kZSwgbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFtuZXcgRnVuY3Rpb25Ob2RlKCdsb2cnLCBbX2FyZy5jbG9uZSgpXSksIF9kZXJpdmF0aXZlKF9hcmcyLmNsb25lKCksIGNvbnN0Tm9kZXMpXSldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25zdE5vZGVzW19hcmcyXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKCgwLCBfaXMuaXNDb25zdGFudE5vZGUpKF9hcmcyKSkge1xuICAgICAgICAgICAgLy8gSWYgaXMgc2VjcmV0bHkgY29uc3RhbnQ7IGYoeCleMCA9IDEgLT4gZC9keCgxKSA9IDBcbiAgICAgICAgICAgIGlmIChpc1plcm8oX2FyZzIudmFsdWUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBjcmVhdGVDb25zdGFudE5vZGUoMCk7XG4gICAgICAgICAgICB9IC8vIElnbm9yZSBleHBvbmVudDsgZih4KV4xID0gZih4KVxuXG5cbiAgICAgICAgICAgIGlmIChlcXVhbChfYXJnMi52YWx1ZSwgMSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIF9kZXJpdmF0aXZlKF9hcmcsIGNvbnN0Tm9kZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gLy8gRWxlbWVudGFyeSBQb3dlciBSdWxlLCBkL2R4KGYoeCleYykgPSBjKmYnKHgpKmYoeCleKGMtMSlcblxuXG4gICAgICAgICAgdmFyIHBvd01pbnVzT25lID0gbmV3IE9wZXJhdG9yTm9kZSgnXicsICdwb3cnLCBbX2FyZy5jbG9uZSgpLCBuZXcgT3BlcmF0b3JOb2RlKCctJywgJ3N1YnRyYWN0JywgW19hcmcyLCBjcmVhdGVDb25zdGFudE5vZGUoMSldKV0pO1xuICAgICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW19hcmcyLmNsb25lKCksIG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbX2Rlcml2YXRpdmUoX2FyZywgY29uc3ROb2RlcyksIHBvd01pbnVzT25lXSldKTtcbiAgICAgICAgfSAvLyBGdW5jdGlvbmFsIFBvd2VyIFJ1bGUsIGQvZHgoZl5nKSA9IGZeZypbZicqKGcvZikgKyBnJ2xuKGYpXVxuXG5cbiAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbbmV3IE9wZXJhdG9yTm9kZSgnXicsICdwb3cnLCBbX2FyZy5jbG9uZSgpLCBfYXJnMi5jbG9uZSgpXSksIG5ldyBPcGVyYXRvck5vZGUoJysnLCAnYWRkJywgW25ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbX2Rlcml2YXRpdmUoX2FyZywgY29uc3ROb2RlcyksIG5ldyBPcGVyYXRvck5vZGUoJy8nLCAnZGl2aWRlJywgW19hcmcyLmNsb25lKCksIF9hcmcuY2xvbmUoKV0pXSksIG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbX2Rlcml2YXRpdmUoX2FyZzIsIGNvbnN0Tm9kZXMpLCBuZXcgRnVuY3Rpb25Ob2RlKCdsb2cnLCBbX2FyZy5jbG9uZSgpXSldKV0pXSk7XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcignT3BlcmF0b3IgXCInICsgbm9kZS5vcCArICdcIiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGRlcml2YXRpdmUsIG9yIGEgd3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyBpcyBwYXNzZWQnKTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogRW5zdXJlcyB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBmb3IgYSBmdW5jdGlvbiBhcmUgY29ycmVjdCxcbiAgICogYW5kIHdpbGwgdGhyb3cgYW4gZXJyb3Igb3RoZXJ3aXNlLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uTm9kZX0gbm9kZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGZ1bmNBcmdzQ2hlY2sobm9kZSkge1xuICAgIC8vIFRPRE8gYWRkIG1pbiwgbWF4IGV0Y1xuICAgIGlmICgobm9kZS5uYW1lID09PSAnbG9nJyB8fCBub2RlLm5hbWUgPT09ICdudGhSb290JyB8fCBub2RlLm5hbWUgPT09ICdwb3cnKSAmJiBub2RlLmFyZ3MubGVuZ3RoID09PSAyKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBUaGVyZSBzaG91bGQgYmUgYW4gaW5jb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHMgaWYgd2UgcmVhY2ggaGVyZVxuICAgIC8vIENoYW5nZSBhbGwgYXJncyB0byBjb25zdGFudHMgdG8gYXZvaWQgdW5pZGVudGlmaWVkXG4gICAgLy8gc3ltYm9sIGVycm9yIHdoZW4gY29tcGlsaW5nIGZ1bmN0aW9uXG5cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5hcmdzLmxlbmd0aDsgKytpKSB7XG4gICAgICBub2RlLmFyZ3NbaV0gPSBjcmVhdGVDb25zdGFudE5vZGUoMCk7XG4gICAgfVxuXG4gICAgbm9kZS5jb21waWxlKCkuZXZhbHVhdGUoKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIFR5cGVFcnJvciwgYnV0IG5vbmUgZm91bmQnKTtcbiAgfVxuICAvKipcbiAgICogSGVscGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIGNvbnN0YW50IG5vZGUgd2l0aCBhIHNwZWNpZmljIHR5cGVcbiAgICogKG51bWJlciwgQmlnTnVtYmVyLCBGcmFjdGlvbilcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbdmFsdWVUeXBlXVxuICAgKiBAcmV0dXJuIHtDb25zdGFudE5vZGV9XG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gY3JlYXRlQ29uc3RhbnROb2RlKHZhbHVlLCB2YWx1ZVR5cGUpIHtcbiAgICByZXR1cm4gbmV3IENvbnN0YW50Tm9kZShudW1lcmljKHZhbHVlLCB2YWx1ZVR5cGUgfHwgY29uZmlnLm51bWJlcikpO1xuICB9XG5cbiAgcmV0dXJuIGRlcml2YXRpdmU7XG59KTtcbmV4cG9ydHMuY3JlYXRlRGVyaXZhdGl2ZSA9IGNyZWF0ZURlcml2YXRpdmU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJhdGlvbmFsaXplID0gdm9pZCAwO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX3NpbXBsaWZ5Q29uc3RhbnQgPSByZXF1aXJlKFwiLi9zaW1wbGlmeS9zaW1wbGlmeUNvbnN0YW50XCIpO1xuXG52YXIgX3NpbXBsaWZ5Q29yZSA9IHJlcXVpcmUoXCIuL3NpbXBsaWZ5L3NpbXBsaWZ5Q29yZVwiKTtcblxudmFyIG5hbWUgPSAncmF0aW9uYWxpemUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnY29uZmlnJywgJ3R5cGVkJywgJ2VxdWFsJywgJ2lzWmVybycsICdhZGQnLCAnc3VidHJhY3QnLCAnbXVsdGlwbHknLCAnZGl2aWRlJywgJ3BvdycsICdwYXJzZScsICdzaW1wbGlmeScsICc/YmlnbnVtYmVyJywgJz9mcmFjdGlvbicsICdtYXRoV2l0aFRyYW5zZm9ybScsICdDb25zdGFudE5vZGUnLCAnT3BlcmF0b3JOb2RlJywgJ0Z1bmN0aW9uTm9kZScsICdTeW1ib2xOb2RlJywgJ1BhcmVudGhlc2lzTm9kZSddO1xudmFyIGNyZWF0ZVJhdGlvbmFsaXplID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgZXF1YWwgPSBfcmVmLmVxdWFsLFxuICAgICAgaXNaZXJvID0gX3JlZi5pc1plcm8sXG4gICAgICBhZGQgPSBfcmVmLmFkZCxcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCxcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSxcbiAgICAgIGRpdmlkZSA9IF9yZWYuZGl2aWRlLFxuICAgICAgcG93ID0gX3JlZi5wb3csXG4gICAgICBwYXJzZSA9IF9yZWYucGFyc2UsXG4gICAgICBzaW1wbGlmeSA9IF9yZWYuc2ltcGxpZnksXG4gICAgICBmcmFjdGlvbiA9IF9yZWYuZnJhY3Rpb24sXG4gICAgICBiaWdudW1iZXIgPSBfcmVmLmJpZ251bWJlcixcbiAgICAgIG1hdGhXaXRoVHJhbnNmb3JtID0gX3JlZi5tYXRoV2l0aFRyYW5zZm9ybSxcbiAgICAgIENvbnN0YW50Tm9kZSA9IF9yZWYuQ29uc3RhbnROb2RlLFxuICAgICAgT3BlcmF0b3JOb2RlID0gX3JlZi5PcGVyYXRvck5vZGUsXG4gICAgICBGdW5jdGlvbk5vZGUgPSBfcmVmLkZ1bmN0aW9uTm9kZSxcbiAgICAgIFN5bWJvbE5vZGUgPSBfcmVmLlN5bWJvbE5vZGUsXG4gICAgICBQYXJlbnRoZXNpc05vZGUgPSBfcmVmLlBhcmVudGhlc2lzTm9kZTtcbiAgdmFyIHNpbXBsaWZ5Q29uc3RhbnQgPSAoMCwgX3NpbXBsaWZ5Q29uc3RhbnQuY3JlYXRlU2ltcGxpZnlDb25zdGFudCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBjb25maWc6IGNvbmZpZyxcbiAgICBtYXRoV2l0aFRyYW5zZm9ybTogbWF0aFdpdGhUcmFuc2Zvcm0sXG4gICAgZnJhY3Rpb246IGZyYWN0aW9uLFxuICAgIGJpZ251bWJlcjogYmlnbnVtYmVyLFxuICAgIENvbnN0YW50Tm9kZTogQ29uc3RhbnROb2RlLFxuICAgIE9wZXJhdG9yTm9kZTogT3BlcmF0b3JOb2RlLFxuICAgIEZ1bmN0aW9uTm9kZTogRnVuY3Rpb25Ob2RlLFxuICAgIFN5bWJvbE5vZGU6IFN5bWJvbE5vZGVcbiAgfSk7XG4gIHZhciBzaW1wbGlmeUNvcmUgPSAoMCwgX3NpbXBsaWZ5Q29yZS5jcmVhdGVTaW1wbGlmeUNvcmUpKHtcbiAgICBlcXVhbDogZXF1YWwsXG4gICAgaXNaZXJvOiBpc1plcm8sXG4gICAgYWRkOiBhZGQsXG4gICAgc3VidHJhY3Q6IHN1YnRyYWN0LFxuICAgIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgICBkaXZpZGU6IGRpdmlkZSxcbiAgICBwb3c6IHBvdyxcbiAgICBDb25zdGFudE5vZGU6IENvbnN0YW50Tm9kZSxcbiAgICBPcGVyYXRvck5vZGU6IE9wZXJhdG9yTm9kZSxcbiAgICBGdW5jdGlvbk5vZGU6IEZ1bmN0aW9uTm9kZSxcbiAgICBQYXJlbnRoZXNpc05vZGU6IFBhcmVudGhlc2lzTm9kZVxuICB9KTtcbiAgLyoqXG4gICAqIFRyYW5zZm9ybSBhIHJhdGlvbmFsaXphYmxlIGV4cHJlc3Npb24gaW4gYSByYXRpb25hbCBmcmFjdGlvbi5cbiAgICogSWYgcmF0aW9uYWwgZnJhY3Rpb24gaXMgb25lIHZhcmlhYmxlIHBvbHlub21pYWwgdGhlbiBjb252ZXJ0c1xuICAgKiB0aGUgbnVtZXJhdG9yIGFuZCBkZW5vbWluYXRvciBpbiBjYW5vbmljYWwgZm9ybSwgd2l0aCBkZWNyZWFzaW5nXG4gICAqIGV4cG9uZW50cywgcmV0dXJuaW5nIHRoZSBjb2VmZmljaWVudHMgb2YgbnVtZXJhdG9yLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICByYXRpb25hbGl6ZShleHByKVxuICAgKiAgICAgcmF0aW9uYWxpemUoZXhwciwgZGV0YWlsZWQpXG4gICAqICAgICByYXRpb25hbGl6ZShleHByLCBzY29wZSlcbiAgICogICAgIHJhdGlvbmFsaXplKGV4cHIsIHNjb3BlLCBkZXRhaWxlZClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLnJhdGlvbmFsaXplKCdzaW4oeCkreScpXG4gICAqICAgICAgICAgICAgICAgICAgIC8vICBFcnJvcjogVGhlcmUgaXMgYW4gdW5zb2x2ZWQgZnVuY3Rpb24gY2FsbFxuICAgKiAgICAgbWF0aC5yYXRpb25hbGl6ZSgnMngveSAtIHkvKHgrMSknKVxuICAgKiAgICAgICAgICAgICAgICAgICAvLyAoMip4XjIteV4yKzIqeCkvKHgqeSt5KVxuICAgKiAgICAgbWF0aC5yYXRpb25hbGl6ZSgnKDJ4KzEpXjYnKVxuICAgKiAgICAgICAgICAgICAgICAgICAvLyA2NCp4XjYrMTkyKnheNSsyNDAqeF40KzE2MCp4XjMrNjAqeF4yKzEyKngrMVxuICAgKiAgICAgbWF0aC5yYXRpb25hbGl6ZSgnMngvKCAoMngtMSkgLyAoM3grMikgKSAtIDV4LyAoICgzeCs0KSAvICgyeF4yLTUpICkgKyAzJylcbiAgICogICAgICAgICAgICAgICAgICAgLy8gLTIwKnheNCsyOCp4XjMrMTA0KnheMis2KngtMTIpLyg2KnheMis1KngtNClcbiAgICogICAgIG1hdGgucmF0aW9uYWxpemUoJ3gvKDEteCkvKHgtMikvKHgtMykvKHgtNCkgKyAyeC8gKCAoMS0yeCkvKDItM3gpICkvICgoMy00eCkvKDQtNXgpICknKSA9XG4gICAqICAgICAgICAgICAgICAgICAgIC8vICgtMzAqeF43KzM0NCp4XjYtMTUwNip4XjUrMzIwMCp4XjQtMzQ3Mip4XjMrMTg0Nip4XjItMzgxKngpL1xuICAgKiAgICAgICAgICAgICAgICAgICAvLyAgICAgKC04KnheNis5MCp4XjUtMzgzKnheNCs3ODAqeF4zLTc5Nyp4XjIrMzkwKngtNzIpXG4gICAqXG4gICAqICAgICBtYXRoLnJhdGlvbmFsaXplKCd4K3greCt5Jyx7eToxfSkgLy8gMyp4KzFcbiAgICogICAgIG1hdGgucmF0aW9uYWxpemUoJ3greCt4K3knLHt9KSAgICAvLyAzKngreVxuICAgKlxuICAgKiAgICAgY29uc3QgcmV0ID0gbWF0aC5yYXRpb25hbGl6ZSgneCt4K3greScse30sdHJ1ZSlcbiAgICogICAgICAgICAgICAgICAgICAgLy8gcmV0LmV4cHJlc3Npb249Myp4K3ksIHJldC52YXJpYWJsZXMgPSBbXCJ4XCIsXCJ5XCJdXG4gICAqICAgICBjb25zdCByZXQgPSBtYXRoLnJhdGlvbmFsaXplKCctMis1eF4yJyx7fSx0cnVlKVxuICAgKiAgICAgICAgICAgICAgICAgICAvLyByZXQuZXhwcmVzc2lvbj01KnheMi0yLCByZXQudmFyaWFibGVzID0gW1wieFwiXSwgcmV0LmNvZWZmaWNpZW50cz1bLTIsMCw1XVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgIHNpbXBsaWZ5XG4gICAqXG4gICAqIEBwYXJhbSAge05vZGV8c3RyaW5nfSBleHByICAgIFRoZSBleHByZXNzaW9uIHRvIGNoZWNrIGlmIGlzIGEgcG9seW5vbWlhbCBleHByZXNzaW9uXG4gICAqIEBwYXJhbSAge09iamVjdHxib29sZWFufSAgICAgIG9wdGlvbmFsIHNjb3BlIG9mIGV4cHJlc3Npb24gb3IgdHJ1ZSBmb3IgYWxyZWFkeSBldmFsdWF0ZWQgcmF0aW9uYWwgZXhwcmVzc2lvbiBhdCBpbnB1dFxuICAgKiBAcGFyYW0gIHtCb29sZWFufSAgZGV0YWlsZWQgICBvcHRpb25hbCBUcnVlIGlmIHJldHVybiBhbiBvYmplY3QsIGZhbHNlIGlmIHJldHVybiBleHByZXNzaW9uIG5vZGUgKGRlZmF1bHQpXG4gICAqXG4gICAqIEByZXR1cm4ge09iamVjdCB8IE5vZGV9ICAgIFRoZSByYXRpb25hbCBwb2x5bm9taWFsIG9mIGBleHByYCBvciBuYSBvYmplY3RcbiAgICogICAgICAgICAgICB7T2JqZWN0fVxuICAgKiAgICAgICAgICAgICAge0V4cHJlc3Npb24gTm9kZX0gZXhwcmVzc2lvbjogbm9kZSBzaW1wbGlmaWVkIGV4cHJlc3Npb25cbiAgICogICAgICAgICAgICAgIHtFeHByZXNzaW9uIE5vZGV9IG51bWVyYXRvcjogc2ltcGxpZmllZCBudW1lcmF0b3Igb2YgZXhwcmVzc2lvblxuICAgKiAgICAgICAgICAgICAge0V4cHJlc3Npb24gTm9kZSB8IGJvb2xlYW59IGRlbm9taW5hdG9yOiBzaW1wbGlmaWVkIGRlbm9taW5hdG9yIG9yIGZhbHNlIChpZiB0aGVyZSBpcyBubyBkZW5vbWluYXRvcilcbiAgICogICAgICAgICAgICAgIHtBcnJheX0gICAgICAgICAgIHZhcmlhYmxlczogIHZhcmlhYmxlIG5hbWVzXG4gICAqICAgICAgICAgICAgICB7QXJyYXl9ICAgICAgICAgICBjb2VmZmljaWVudHM6IGNvZWZmaWNpZW50cyBvZiBudW1lcmF0b3Igc29ydGVkIGJ5IGluY3JlYXNlZCBleHBvbmVudFxuICAgKiAgICAgICAgICAge0V4cHJlc3Npb24gTm9kZX0gIG5vZGUgc2ltcGxpZmllZCBleHByZXNzaW9uXG4gICAqXG4gICAqL1xuXG4gIHZhciByYXRpb25hbGl6ZSA9IHR5cGVkKG5hbWUsIHtcbiAgICBzdHJpbmc6IGZ1bmN0aW9uIHN0cmluZyhleHByKSB7XG4gICAgICByZXR1cm4gcmF0aW9uYWxpemUocGFyc2UoZXhwciksIHt9LCBmYWxzZSk7XG4gICAgfSxcbiAgICAnc3RyaW5nLCBib29sZWFuJzogZnVuY3Rpb24gc3RyaW5nQm9vbGVhbihleHByLCBkZXRhaWxlZCkge1xuICAgICAgcmV0dXJuIHJhdGlvbmFsaXplKHBhcnNlKGV4cHIpLCB7fSwgZGV0YWlsZWQpO1xuICAgIH0sXG4gICAgJ3N0cmluZywgT2JqZWN0JzogZnVuY3Rpb24gc3RyaW5nT2JqZWN0KGV4cHIsIHNjb3BlKSB7XG4gICAgICByZXR1cm4gcmF0aW9uYWxpemUocGFyc2UoZXhwciksIHNjb3BlLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnc3RyaW5nLCBPYmplY3QsIGJvb2xlYW4nOiBmdW5jdGlvbiBzdHJpbmdPYmplY3RCb29sZWFuKGV4cHIsIHNjb3BlLCBkZXRhaWxlZCkge1xuICAgICAgcmV0dXJuIHJhdGlvbmFsaXplKHBhcnNlKGV4cHIpLCBzY29wZSwgZGV0YWlsZWQpO1xuICAgIH0sXG4gICAgTm9kZTogZnVuY3Rpb24gTm9kZShleHByKSB7XG4gICAgICByZXR1cm4gcmF0aW9uYWxpemUoZXhwciwge30sIGZhbHNlKTtcbiAgICB9LFxuICAgICdOb2RlLCBib29sZWFuJzogZnVuY3Rpb24gTm9kZUJvb2xlYW4oZXhwciwgZGV0YWlsZWQpIHtcbiAgICAgIHJldHVybiByYXRpb25hbGl6ZShleHByLCB7fSwgZGV0YWlsZWQpO1xuICAgIH0sXG4gICAgJ05vZGUsIE9iamVjdCc6IGZ1bmN0aW9uIE5vZGVPYmplY3QoZXhwciwgc2NvcGUpIHtcbiAgICAgIHJldHVybiByYXRpb25hbGl6ZShleHByLCBzY29wZSwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ05vZGUsIE9iamVjdCwgYm9vbGVhbic6IGZ1bmN0aW9uIE5vZGVPYmplY3RCb29sZWFuKGV4cHIsIHNjb3BlLCBkZXRhaWxlZCkge1xuICAgICAgdmFyIHNldFJ1bGVzID0gcnVsZXNSYXRpb25hbGl6ZSgpOyAvLyBSdWxlcyBmb3IgY2hhbmdlIHBvbHlub21pYWwgaW4gbmVhciBjYW5vbmljYWwgZm9ybVxuXG4gICAgICB2YXIgcG9seVJldCA9IHBvbHlub21pYWwoZXhwciwgc2NvcGUsIHRydWUsIHNldFJ1bGVzLmZpcnN0UnVsZXMpOyAvLyBDaGVjayBpZiBleHByZXNzaW9uIGlzIGEgcmF0aW9uYWxpemFibGUgcG9seW5vbWlhbFxuXG4gICAgICB2YXIgblZhcnMgPSBwb2x5UmV0LnZhcmlhYmxlcy5sZW5ndGg7XG4gICAgICBleHByID0gcG9seVJldC5leHByZXNzaW9uO1xuXG4gICAgICBpZiAoblZhcnMgPj0gMSkge1xuICAgICAgICAvLyBJZiBleHByZXNzaW9uIGluIG5vdCBhIGNvbnN0YW50XG4gICAgICAgIGV4cHIgPSBleHBhbmRQb3dlcihleHByKTsgLy8gRmlyc3QgZXhwYW5kIHBvd2VyIG9mIHBvbHlub21pYWxzIChjYW5ub3QgYmUgbWFkZSBmcm9tIHJ1bGVzISlcblxuICAgICAgICB2YXIgc0JlZm9yZTsgLy8gUHJldmlvdXMgZXhwcmVzc2lvblxuXG4gICAgICAgIHZhciBydWxlcztcbiAgICAgICAgdmFyIGVEaXN0ckRpdiA9IHRydWU7XG4gICAgICAgIHZhciByZWRvSW5pYyA9IGZhbHNlO1xuICAgICAgICBleHByID0gc2ltcGxpZnkoZXhwciwgc2V0UnVsZXMuZmlyc3RSdWxlcywge30sIHtcbiAgICAgICAgICBleGFjdEZyYWN0aW9uczogZmFsc2VcbiAgICAgICAgfSk7IC8vIEFwcGx5IHRoZSBpbml0aWFsIHJ1bGVzLCBpbmNsdWRpbmcgc3VjYyBkaXYgcnVsZXNcblxuICAgICAgICB2YXIgcztcblxuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgIC8vIEFwcGx5IGFsdGVybmF0ZWx5ICBzdWNjZXNzaXZlIGRpdmlzaW9uIHJ1bGVzIGFuZCBkaXN0ci5kaXYucnVsZXNcbiAgICAgICAgICBydWxlcyA9IGVEaXN0ckRpdiA/IHNldFJ1bGVzLmRpc3RyRGl2UnVsZXMgOiBzZXRSdWxlcy5zdWNEaXZSdWxlcztcbiAgICAgICAgICBleHByID0gc2ltcGxpZnkoZXhwciwgcnVsZXMpOyAvLyB1bnRpbCBubyBtb3JlIGNoYW5nZXNcblxuICAgICAgICAgIGVEaXN0ckRpdiA9ICFlRGlzdHJEaXY7IC8vIFN3YXAgYmV0d2VlbiBEaXN0ci5EaXYgYW5kIFN1Y2MuIERpdi4gUnVsZXNcblxuICAgICAgICAgIHMgPSBleHByLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICBpZiAocyA9PT0gc0JlZm9yZSkge1xuICAgICAgICAgICAgYnJlYWs7IC8vIE5vIGNoYW5nZXMgOiBlbmQgb2YgdGhlIGxvb3BcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZWRvSW5pYyA9IHRydWU7XG4gICAgICAgICAgc0JlZm9yZSA9IHM7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVkb0luaWMpIHtcbiAgICAgICAgICAvLyBBcHBseSBmaXJzdCBydWxlcyBhZ2FpbiB3aXRob3V0IHN1Y2MgZGl2IHJ1bGVzIChpZiB0aGVyZSBhcmUgY2hhbmdlcylcbiAgICAgICAgICBleHByID0gc2ltcGxpZnkoZXhwciwgc2V0UnVsZXMuZmlyc3RSdWxlc0FnYWluLCB7fSwge1xuICAgICAgICAgICAgZXhhY3RGcmFjdGlvbnM6IGZhbHNlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBleHByID0gc2ltcGxpZnkoZXhwciwgc2V0UnVsZXMuZmluYWxSdWxlcywge30sIHtcbiAgICAgICAgICBleGFjdEZyYWN0aW9uczogZmFsc2VcbiAgICAgICAgfSk7IC8vIEFwcGx5IGZpbmFsIHJ1bGVzXG4gICAgICB9IC8vIE5WYXJzID49IDFcblxuXG4gICAgICB2YXIgY29lZmZpY2llbnRzID0gW107XG4gICAgICB2YXIgcmV0UmF0aW9uYWxpemUgPSB7fTtcblxuICAgICAgaWYgKGV4cHIudHlwZSA9PT0gJ09wZXJhdG9yTm9kZScgJiYgZXhwci5pc0JpbmFyeSgpICYmIGV4cHIub3AgPT09ICcvJykge1xuICAgICAgICAvLyBTZXBhcmF0ZSBudW1lcmF0b3IgZnJvbSBkZW5vbWluYXRvclxuICAgICAgICBpZiAoblZhcnMgPT09IDEpIHtcbiAgICAgICAgICBleHByLmFyZ3NbMF0gPSBwb2x5VG9DYW5vbmljYWwoZXhwci5hcmdzWzBdLCBjb2VmZmljaWVudHMpO1xuICAgICAgICAgIGV4cHIuYXJnc1sxXSA9IHBvbHlUb0Nhbm9uaWNhbChleHByLmFyZ3NbMV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRldGFpbGVkKSB7XG4gICAgICAgICAgcmV0UmF0aW9uYWxpemUubnVtZXJhdG9yID0gZXhwci5hcmdzWzBdO1xuICAgICAgICAgIHJldFJhdGlvbmFsaXplLmRlbm9taW5hdG9yID0gZXhwci5hcmdzWzFdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoblZhcnMgPT09IDEpIHtcbiAgICAgICAgICBleHByID0gcG9seVRvQ2Fub25pY2FsKGV4cHIsIGNvZWZmaWNpZW50cyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGV0YWlsZWQpIHtcbiAgICAgICAgICByZXRSYXRpb25hbGl6ZS5udW1lcmF0b3IgPSBleHByO1xuICAgICAgICAgIHJldFJhdGlvbmFsaXplLmRlbm9taW5hdG9yID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSAvLyBuVmFyc1xuXG5cbiAgICAgIGlmICghZGV0YWlsZWQpIHJldHVybiBleHByO1xuICAgICAgcmV0UmF0aW9uYWxpemUuY29lZmZpY2llbnRzID0gY29lZmZpY2llbnRzO1xuICAgICAgcmV0UmF0aW9uYWxpemUudmFyaWFibGVzID0gcG9seVJldC52YXJpYWJsZXM7XG4gICAgICByZXRSYXRpb25hbGl6ZS5leHByZXNzaW9uID0gZXhwcjtcbiAgICAgIHJldHVybiByZXRSYXRpb25hbGl6ZTtcbiAgICB9IC8vIF5eXl5eXl4gZW5kIG9mIHJhdGlvbmFsaXplIF5eXl5eXl5eXG5cbiAgfSk7IC8vIGVuZCBvZiB0eXBlZCByYXRpb25hbGl6ZVxuXG4gIC8qKlxuICAgKiAgRnVuY3Rpb24gdG8gc2ltcGxpZnkgYW4gZXhwcmVzc2lvbiB1c2luZyBhbiBvcHRpb25hbCBzY29wZSBhbmRcbiAgICogIHJldHVybiBpdCBpZiB0aGUgZXhwcmVzc2lvbiBpcyBhIHBvbHlub21pYWwgZXhwcmVzc2lvbiwgaS5lLlxuICAgKiAgYW4gZXhwcmVzc2lvbiB3aXRoIG9uZSBvciBtb3JlIHZhcmlhYmxlcyBhbmQgdGhlIG9wZXJhdG9yc1xuICAgKiAgKywgLSwgKiwgYW5kIF4sIHdoZXJlIHRoZSBleHBvbmVudCBjYW4gb25seSBiZSBhIHBvc2l0aXZlIGludGVnZXIuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIHBvbHlub21pYWwoZXhwcixzY29wZSxleHRlbmRlZCwgcnVsZXMpXG4gICAqXG4gICAqIEBwYXJhbSAge05vZGUgfCBzdHJpbmd9IGV4cHIgICAgIFRoZSBleHByZXNzaW9uIHRvIHNpbXBsaWZ5IGFuZCBjaGVjayBpZiBpcyBwb2x5bm9taWFsIGV4cHJlc3Npb25cbiAgICogQHBhcmFtICB7b2JqZWN0fSBzY29wZSAgICAgICAgICAgT3B0aW9uYWwgc2NvcGUgZm9yIGV4cHJlc3Npb24gc2ltcGxpZmljYXRpb25cbiAgICogQHBhcmFtICB7Ym9vbGVhbn0gZXh0ZW5kZWQgICAgICAgT3B0aW9uYWwuIERlZmF1bHQgaXMgZmFsc2UuIFdoZW4gdHJ1ZSBhbGxvd3MgZGl2aWRlIG9wZXJhdG9yLlxuICAgKiBAcGFyYW0gIHthcnJheX0gIHJ1bGVzICAgICAgICAgICBPcHRpb25hbC4gRGVmYXVsdCBpcyBubyBydWxlLlxuICAgKlxuICAgKlxuICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAqICAgICAgICAgICAge09iamVjdH0gbm9kZTogICBub2RlIHNpbXBsaWZpZWQgZXhwcmVzc2lvblxuICAgKiAgICAgICAgICAgIHtBcnJheX0gIHZhcmlhYmxlczogIHZhcmlhYmxlIG5hbWVzXG4gICAqL1xuXG4gIGZ1bmN0aW9uIHBvbHlub21pYWwoZXhwciwgc2NvcGUsIGV4dGVuZGVkLCBydWxlcykge1xuICAgIHZhciB2YXJpYWJsZXMgPSBbXTtcbiAgICB2YXIgbm9kZSA9IHNpbXBsaWZ5KGV4cHIsIHJ1bGVzLCBzY29wZSwge1xuICAgICAgZXhhY3RGcmFjdGlvbnM6IGZhbHNlXG4gICAgfSk7IC8vIFJlc29sdmVzIGFueSB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucyB3aXRoIGFsbCBkZWZpbmVkIHBhcmFtZXRlcnNcblxuICAgIGV4dGVuZGVkID0gISFleHRlbmRlZDtcbiAgICB2YXIgb3BlciA9ICcrLSonICsgKGV4dGVuZGVkID8gJy8nIDogJycpO1xuICAgIHJlY1BvbHkobm9kZSk7XG4gICAgdmFyIHJldEZ1bmMgPSB7fTtcbiAgICByZXRGdW5jLmV4cHJlc3Npb24gPSBub2RlO1xuICAgIHJldEZ1bmMudmFyaWFibGVzID0gdmFyaWFibGVzO1xuICAgIHJldHVybiByZXRGdW5jOyAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICAvKipcbiAgICAgKiAgRnVuY3Rpb24gdG8gc2ltcGxpZnkgYW4gZXhwcmVzc2lvbiB1c2luZyBhbiBvcHRpb25hbCBzY29wZSBhbmRcbiAgICAgKiAgcmV0dXJuIGl0IGlmIHRoZSBleHByZXNzaW9uIGlzIGEgcG9seW5vbWlhbCBleHByZXNzaW9uLCBpLmUuXG4gICAgICogIGFuIGV4cHJlc3Npb24gd2l0aCBvbmUgb3IgbW9yZSB2YXJpYWJsZXMgYW5kIHRoZSBvcGVyYXRvcnNcbiAgICAgKiAgKywgLSwgKiwgYW5kIF4sIHdoZXJlIHRoZSBleHBvbmVudCBjYW4gb25seSBiZSBhIHBvc2l0aXZlIGludGVnZXIuXG4gICAgICpcbiAgICAgKiBTeW50YXg6XG4gICAgICpcbiAgICAgKiAgICAgcmVjUG9seShub2RlKVxuICAgICAqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtOb2RlfSBub2RlICAgICAgICAgICAgICAgVGhlIGN1cnJlbnQgc3ViIHRyZWUgZXhwcmVzc2lvbiBpbiByZWN1cnNpb25cbiAgICAgKlxuICAgICAqIEByZXR1cm4gICAgICAgICAgICAgICAgICAgICAgICAgICBub3RoaW5nLCB0aHJvdyBhbiBleGNlcHRpb24gaWYgZXJyb3JcbiAgICAgKi9cblxuICAgIGZ1bmN0aW9uIHJlY1BvbHkobm9kZSkge1xuICAgICAgdmFyIHRwID0gbm9kZS50eXBlOyAvLyBub2RlIHR5cGVcblxuICAgICAgaWYgKHRwID09PSAnRnVuY3Rpb25Ob2RlJykge1xuICAgICAgICAvLyBObyBmdW5jdGlvbiBjYWxsIGluIHBvbHlub21pYWwgZXhwcmVzc2lvblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGlzIGFuIHVuc29sdmVkIGZ1bmN0aW9uIGNhbGwnKTtcbiAgICAgIH0gZWxzZSBpZiAodHAgPT09ICdPcGVyYXRvck5vZGUnKSB7XG4gICAgICAgIGlmIChub2RlLm9wID09PSAnXicpIHtcbiAgICAgICAgICAvLyBUT0RPOiBoYW5kbGUgbmVnYXRpdmUgZXhwb25lbnRzIGxpa2UgaW4gJzEveF4oLTIpJ1xuICAgICAgICAgIGlmIChub2RlLmFyZ3NbMV0udHlwZSAhPT0gJ0NvbnN0YW50Tm9kZScgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikocGFyc2VGbG9hdChub2RlLmFyZ3NbMV0udmFsdWUpKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGVyZSBpcyBhIG5vbi1pbnRlZ2VyIGV4cG9uZW50Jyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlY1BvbHkobm9kZS5hcmdzWzBdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKG9wZXIuaW5kZXhPZihub2RlLm9wKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignT3BlcmF0b3IgJyArIG5vZGUub3AgKyAnIGludmFsaWQgaW4gcG9seW5vbWlhbCBleHByZXNzaW9uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHJlY1BvbHkobm9kZS5hcmdzW2ldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gdHlwZSBvZiBvcGVyYXRvclxuXG4gICAgICB9IGVsc2UgaWYgKHRwID09PSAnU3ltYm9sTm9kZScpIHtcbiAgICAgICAgdmFyIF9uYW1lID0gbm9kZS5uYW1lOyAvLyB2YXJpYWJsZSBuYW1lXG5cbiAgICAgICAgdmFyIHBvcyA9IHZhcmlhYmxlcy5pbmRleE9mKF9uYW1lKTtcblxuICAgICAgICBpZiAocG9zID09PSAtMSkge1xuICAgICAgICAgIC8vIG5ldyB2YXJpYWJsZSBpbiBleHByZXNzaW9uXG4gICAgICAgICAgdmFyaWFibGVzLnB1c2goX25hbWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRwID09PSAnUGFyZW50aGVzaXNOb2RlJykge1xuICAgICAgICByZWNQb2x5KG5vZGUuY29udGVudCk7XG4gICAgICB9IGVsc2UgaWYgKHRwICE9PSAnQ29uc3RhbnROb2RlJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3R5cGUgJyArIHRwICsgJyBpcyBub3QgYWxsb3dlZCBpbiBwb2x5bm9taWFsIGV4cHJlc3Npb24nKTtcbiAgICAgIH1cbiAgICB9IC8vIGVuZCBvZiByZWNQb2x5XG5cbiAgfSAvLyBlbmQgb2YgcG9seW5vbWlhbFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogUmV0dXJuIGEgcnVsZSBzZXQgdG8gcmF0aW9uYWxpemUgYW4gcG9seW5vbWlhbCBleHByZXNzaW9uIGluIHJhdGlvbmFsaXplXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIHJ1bGVzUmF0aW9uYWxpemUoKVxuICAgKlxuICAgKiBAcmV0dXJuIHthcnJheX0gICAgICAgIHJ1bGUgc2V0IHRvIHJhdGlvbmFsaXplIGFuIHBvbHlub21pYWwgZXhwcmVzc2lvblxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHJ1bGVzUmF0aW9uYWxpemUoKSB7XG4gICAgdmFyIG9sZFJ1bGVzID0gW3NpbXBsaWZ5Q29yZSwgLy8gc0NvcmVcbiAgICB7XG4gICAgICBsOiAnbituJyxcbiAgICAgIHI6ICcyKm4nXG4gICAgfSwge1xuICAgICAgbDogJ24rLW4nLFxuICAgICAgcjogJzAnXG4gICAgfSwgc2ltcGxpZnlDb25zdGFudCwgLy8gc0NvbnN0YW50XG4gICAge1xuICAgICAgbDogJ24qKG4xXi0xKScsXG4gICAgICByOiAnbi9uMSdcbiAgICB9LCB7XG4gICAgICBsOiAnbipuMV4tbjInLFxuICAgICAgcjogJ24vbjFebjInXG4gICAgfSwge1xuICAgICAgbDogJ24xXi0xJyxcbiAgICAgIHI6ICcxL24xJ1xuICAgIH0sIHtcbiAgICAgIGw6ICduKihuMS9uMiknLFxuICAgICAgcjogJyhuKm4xKS9uMidcbiAgICB9LCB7XG4gICAgICBsOiAnMSpuJyxcbiAgICAgIHI6ICduJ1xuICAgIH1dO1xuICAgIHZhciBydWxlc0ZpcnN0ID0gW3tcbiAgICAgIGw6ICcoLW4xKS8oLW4yKScsXG4gICAgICByOiAnbjEvbjInXG4gICAgfSwgLy8gVW5hcnkgZGl2aXNpb25cbiAgICB7XG4gICAgICBsOiAnKC1uMSkqKC1uMiknLFxuICAgICAgcjogJ24xKm4yJ1xuICAgIH0sIC8vIFVuYXJ5IG11bHRpcGxpY2F0aW9uXG4gICAge1xuICAgICAgbDogJ24xLS1uMicsXG4gICAgICByOiAnbjErbjInXG4gICAgfSwgLy8gJy0tJyBlbGltaW5hdGlvblxuICAgIHtcbiAgICAgIGw6ICduMS1uMicsXG4gICAgICByOiAnbjErKC1uMiknXG4gICAgfSwgLy8gU3VidHJhY3Rpb24gdHVybiBpbnRvIGFkZCB3aXRoIHVu77+9cnkgbWludXNcbiAgICB7XG4gICAgICBsOiAnKG4xK24yKSpuMycsXG4gICAgICByOiAnKG4xKm4zICsgbjIqbjMpJ1xuICAgIH0sIC8vIERpc3RyaWJ1dGl2ZSAxXG4gICAge1xuICAgICAgbDogJ24xKihuMituMyknLFxuICAgICAgcjogJyhuMSpuMituMSpuMyknXG4gICAgfSwgLy8gRGlzdHJpYnV0aXZlIDJcbiAgICB7XG4gICAgICBsOiAnYzEqbiArIGMyKm4nLFxuICAgICAgcjogJyhjMStjMikqbidcbiAgICB9LCAvLyBKb2luaW5nIGNvbnN0YW50c1xuICAgIHtcbiAgICAgIGw6ICdjMSpuICsgbicsXG4gICAgICByOiAnKGMxKzEpKm4nXG4gICAgfSwgLy8gSm9pbmluZyBjb25zdGFudHNcbiAgICB7XG4gICAgICBsOiAnYzEqbiAtIGMyKm4nLFxuICAgICAgcjogJyhjMS1jMikqbidcbiAgICB9LCAvLyBKb2luaW5nIGNvbnN0YW50c1xuICAgIHtcbiAgICAgIGw6ICdjMSpuIC0gbicsXG4gICAgICByOiAnKGMxLTEpKm4nXG4gICAgfSwgLy8gSm9pbmluZyBjb25zdGFudHNcbiAgICB7XG4gICAgICBsOiAndi9jJyxcbiAgICAgIHI6ICcoMS9jKSp2J1xuICAgIH0sIC8vIHZhcmlhYmxlL2NvbnN0YW50IChuZXchKVxuICAgIHtcbiAgICAgIGw6ICd2Ly1jJyxcbiAgICAgIHI6ICctKDEvYykqdidcbiAgICB9LCAvLyB2YXJpYWJsZS9jb25zdGFudCAobmV3ISlcbiAgICB7XG4gICAgICBsOiAnLXYqLWMnLFxuICAgICAgcjogJ2MqdidcbiAgICB9LCAvLyBJbnZlcnNpb24gY29uc3RhbnQgYW5kIHZhcmlhYmxlIDFcbiAgICB7XG4gICAgICBsOiAnLXYqYycsXG4gICAgICByOiAnLWMqdidcbiAgICB9LCAvLyBJbnZlcnNpb24gY29uc3RhbnQgYW5kIHZhcmlhYmxlIDJcbiAgICB7XG4gICAgICBsOiAndiotYycsXG4gICAgICByOiAnLWMqdidcbiAgICB9LCAvLyBJbnZlcnNpb24gY29uc3RhbnQgYW5kIHZhcmlhYmxlIDNcbiAgICB7XG4gICAgICBsOiAndipjJyxcbiAgICAgIHI6ICdjKnYnXG4gICAgfSwgLy8gSW52ZXJzaW9uIGNvbnN0YW50IGFuZCB2YXJpYWJsZSA0XG4gICAge1xuICAgICAgbDogJy0oLW4xKm4yKScsXG4gICAgICByOiAnKG4xKm4yKSdcbiAgICB9LCAvLyBVbmFyeSBwcm9wYWdhdGlvblxuICAgIHtcbiAgICAgIGw6ICctKG4xKm4yKScsXG4gICAgICByOiAnKC1uMSpuMiknXG4gICAgfSwgLy8gVW5hcnkgcHJvcGFnYXRpb25cbiAgICB7XG4gICAgICBsOiAnLSgtbjErbjIpJyxcbiAgICAgIHI6ICcobjEtbjIpJ1xuICAgIH0sIC8vIFVuYXJ5IHByb3BhZ2F0aW9uXG4gICAge1xuICAgICAgbDogJy0objErbjIpJyxcbiAgICAgIHI6ICcoLW4xLW4yKSdcbiAgICB9LCAvLyBVbmFyeSBwcm9wYWdhdGlvblxuICAgIHtcbiAgICAgIGw6ICcobjFebjIpXm4zJyxcbiAgICAgIHI6ICcobjFeKG4yKm4zKSknXG4gICAgfSwgLy8gUG93ZXIgdG8gUG93ZXJcbiAgICB7XG4gICAgICBsOiAnLSgtbjEvbjIpJyxcbiAgICAgIHI6ICcobjEvbjIpJ1xuICAgIH0sIC8vIERpdmlzaW9uIGFuZCBVbmFyeVxuICAgIHtcbiAgICAgIGw6ICctKG4xL24yKScsXG4gICAgICByOiAnKC1uMS9uMiknXG4gICAgfV07IC8vIERpdmlzYW8gYW5kIFVuYXJ5XG5cbiAgICB2YXIgcnVsZXNEaXN0ckRpdiA9IFt7XG4gICAgICBsOiAnKG4xL24yICsgbjMvbjQpJyxcbiAgICAgIHI6ICcoKG4xKm40ICsgbjMqbjIpLyhuMipuNCkpJ1xuICAgIH0sIC8vIFN1bSBvZiBmcmFjdGlvbnNcbiAgICB7XG4gICAgICBsOiAnKG4xL24yICsgbjMpJyxcbiAgICAgIHI6ICcoKG4xICsgbjMqbjIpL24yKSdcbiAgICB9LCAvLyBTdW0gZnJhY3Rpb24gd2l0aCBudW1iZXIgMVxuICAgIHtcbiAgICAgIGw6ICcobjEgKyBuMi9uMyknLFxuICAgICAgcjogJygobjEqbjMgKyBuMikvbjMpJ1xuICAgIH1dOyAvLyBTdW0gZnJhY3Rpb24gd2l0aCBudW1iZXIgMVxuXG4gICAgdmFyIHJ1bGVzU3VjRGl2ID0gW3tcbiAgICAgIGw6ICcobjEvKG4yL24zKSknLFxuICAgICAgcjogJygobjEqbjMpL24yKSdcbiAgICB9LCAvLyBEaXZpc2lvbiBzaW1wbGlmaWNhdGlvblxuICAgIHtcbiAgICAgIGw6ICcobjEvbjIvbjMpJyxcbiAgICAgIHI6ICcobjEvKG4yKm4zKSknXG4gICAgfV07XG4gICAgdmFyIHNldFJ1bGVzID0ge307IC8vIHJ1bGVzIHNldCBpbiA0IHN0ZXBzLlxuICAgIC8vIEFsbCBydWxlcyA9PiBpbmZpbml0ZSBsb29wXG4gICAgLy8gc2V0UnVsZXMuYWxsUnVsZXMgPW9sZFJ1bGVzLmNvbmNhdChydWxlc0ZpcnN0LHJ1bGVzRGlzdHJEaXYscnVsZXNTdWNEaXYpXG5cbiAgICBzZXRSdWxlcy5maXJzdFJ1bGVzID0gb2xkUnVsZXMuY29uY2F0KHJ1bGVzRmlyc3QsIHJ1bGVzU3VjRGl2KTsgLy8gRmlyc3QgcnVsZSBzZXRcblxuICAgIHNldFJ1bGVzLmRpc3RyRGl2UnVsZXMgPSBydWxlc0Rpc3RyRGl2OyAvLyBKdXN0IGRpc3RyLiBkaXYuIHJ1bGVzXG5cbiAgICBzZXRSdWxlcy5zdWNEaXZSdWxlcyA9IHJ1bGVzU3VjRGl2OyAvLyBKdXMgc3VjYy4gZGl2LiBydWxlc1xuXG4gICAgc2V0UnVsZXMuZmlyc3RSdWxlc0FnYWluID0gb2xkUnVsZXMuY29uY2F0KHJ1bGVzRmlyc3QpOyAvLyBMYXN0IHJ1bGVzIHNldCB3aXRob3V0IHN1Y2MuIGRpdi5cbiAgICAvLyBEaXZpc2lvbiBzaW1wbGlmaWNhdGlvblxuICAgIC8vIFNlY29uZCBydWxlIHNldC5cbiAgICAvLyBUaGVyZSBpcyBubyBhZ2dyZWdhdGUgZXhwcmVzc2lvbiB3aXRoIHBhcmVudGVzaXMsIGJ1dCB0aGUgb25seSB2YXJpYWJsZSBjYW4gYmUgc2NhdHRlcmVkLlxuXG4gICAgc2V0UnVsZXMuZmluYWxSdWxlcyA9IFtzaW1wbGlmeUNvcmUsIC8vIHNpbXBsaWZ5LnJ1bGVzWzBdXG4gICAge1xuICAgICAgbDogJ24qLW4nLFxuICAgICAgcjogJy1uXjInXG4gICAgfSwgLy8gSm9pbmluZyBtdWx0aXBseSB3aXRoIHBvd2VyIDFcbiAgICB7XG4gICAgICBsOiAnbipuJyxcbiAgICAgIHI6ICduXjInXG4gICAgfSwgLy8gSm9pbmluZyBtdWx0aXBseSB3aXRoIHBvd2VyIDJcbiAgICBzaW1wbGlmeUNvbnN0YW50LCAvLyBzaW1wbGlmeS5ydWxlc1sxNF0gb2xkIDNyZCBpbmRleCBpbiBvbGRSdWxlc1xuICAgIHtcbiAgICAgIGw6ICduKi1uXm4xJyxcbiAgICAgIHI6ICctbl4objErMSknXG4gICAgfSwgLy8gSm9pbmluZyBtdWx0aXBseSB3aXRoIHBvd2VyIDNcbiAgICB7XG4gICAgICBsOiAnbipuXm4xJyxcbiAgICAgIHI6ICduXihuMSsxKSdcbiAgICB9LCAvLyBKb2luaW5nIG11bHRpcGx5IHdpdGggcG93ZXIgNFxuICAgIHtcbiAgICAgIGw6ICduXm4xKi1uXm4yJyxcbiAgICAgIHI6ICctbl4objErbjIpJ1xuICAgIH0sIC8vIEpvaW5pbmcgbXVsdGlwbHkgd2l0aCBwb3dlciA1XG4gICAge1xuICAgICAgbDogJ25ebjEqbl5uMicsXG4gICAgICByOiAnbl4objErbjIpJ1xuICAgIH0sIC8vIEpvaW5pbmcgbXVsdGlwbHkgd2l0aCBwb3dlciA2XG4gICAge1xuICAgICAgbDogJ25ebjEqLW4nLFxuICAgICAgcjogJy1uXihuMSsxKSdcbiAgICB9LCAvLyBKb2luaW5nIG11bHRpcGx5IHdpdGggcG93ZXIgN1xuICAgIHtcbiAgICAgIGw6ICduXm4xKm4nLFxuICAgICAgcjogJ25eKG4xKzEpJ1xuICAgIH0sIC8vIEpvaW5pbmcgbXVsdGlwbHkgd2l0aCBwb3dlciA4XG4gICAge1xuICAgICAgbDogJ25ebjEvLW4nLFxuICAgICAgcjogJy1uXihuMS0xKSdcbiAgICB9LCAvLyBKb2luaW5nIG11bHRpcGx5IHdpdGggcG93ZXIgOFxuICAgIHtcbiAgICAgIGw6ICduXm4xL24nLFxuICAgICAgcjogJ25eKG4xLTEpJ1xuICAgIH0sIC8vIEpvaW5pbmcgZGl2aXNpb24gd2l0aCBwb3dlciAxXG4gICAge1xuICAgICAgbDogJ24vLW5ebjEnLFxuICAgICAgcjogJy1uXigxLW4xKSdcbiAgICB9LCAvLyBKb2luaW5nIGRpdmlzaW9uIHdpdGggcG93ZXIgMlxuICAgIHtcbiAgICAgIGw6ICduL25ebjEnLFxuICAgICAgcjogJ25eKDEtbjEpJ1xuICAgIH0sIC8vIEpvaW5pbmcgZGl2aXNpb24gd2l0aCBwb3dlciAzXG4gICAge1xuICAgICAgbDogJ25ebjEvLW5ebjInLFxuICAgICAgcjogJ25eKG4xLW4yKSdcbiAgICB9LCAvLyBKb2luaW5nIGRpdmlzaW9uIHdpdGggcG93ZXIgNFxuICAgIHtcbiAgICAgIGw6ICduXm4xL25ebjInLFxuICAgICAgcjogJ25eKG4xLW4yKSdcbiAgICB9LCAvLyBKb2luaW5nIGRpdmlzaW9uIHdpdGggcG93ZXIgNVxuICAgIHtcbiAgICAgIGw6ICduMSsoLW4yKm4zKScsXG4gICAgICByOiAnbjEtbjIqbjMnXG4gICAgfSwgLy8gU29sdmluZyB1c2VsZXNzIHBhcmVudGhlc2lzIDFcbiAgICB7XG4gICAgICBsOiAndiooLWMpJyxcbiAgICAgIHI6ICctYyp2J1xuICAgIH0sIC8vIFNvbHZpbmcgdXNlbGVzcyB1bmFyeSAyXG4gICAge1xuICAgICAgbDogJ24xKy1uMicsXG4gICAgICByOiAnbjEtbjInXG4gICAgfSwgLy8gU29sdmluZyArLSB0b2dldGhlciAobmV3ISlcbiAgICB7XG4gICAgICBsOiAndipjJyxcbiAgICAgIHI6ICdjKnYnXG4gICAgfSwgLy8gaW52ZXJzaW9uIGNvbnN0YW50IHdpdGggdmFyaWFibGVcbiAgICB7XG4gICAgICBsOiAnKG4xXm4yKV5uMycsXG4gICAgICByOiAnKG4xXihuMipuMykpJ1xuICAgIH0gLy8gUG93ZXIgdG8gUG93ZXJcbiAgICBdO1xuICAgIHJldHVybiBzZXRSdWxlcztcbiAgfSAvLyBFbmQgcnVsZXNSYXRpb25hbGl6ZVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogIEV4cGFuZCByZWN1cnNpdmVseSBhIHRyZWUgbm9kZSBmb3IgaGFuZGxpbmcgd2l0aCBleHByZXNzaW9ucyB3aXRoIGV4cG9uZW50c1xuICAgKiAgKGl0J3Mgbm90IGZvciBjb25zdGFudHMsIHN5bWJvbHMgb3IgZnVuY3Rpb25zIHdpdGggZXhwb25lbnRzKVxuICAgKiAgUFM6IFRoZSBvdGhlciBwYXJhbWV0ZXJzIGFyZSBpbnRlcm5hbCBmb3IgcmVjdXJzaW9uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIGV4cGFuZFBvd2VyKG5vZGUpXG4gICAqXG4gICAqIEBwYXJhbSAge05vZGV9IG5vZGUgICAgICAgICBDdXJyZW50IGV4cHJlc3Npb24gbm9kZVxuICAgKiBAcGFyYW0gIHtub2RlfSBwYXJlbnQgICAgICAgUGFyZW50IGN1cnJlbnQgbm9kZSBpbnNpZGUgdGhlIHJlY3Vyc2lvblxuICAgKiBAcGFyYW0gIChpbnR9ICAgICAgICAgICAgICAgUGFyZW50IG51bWJlciBvZiBjaGlkIGluc2lkZSB0aGUgcmVyY3Vyc2lvblxuICAgKlxuICAgKiBAcmV0dXJuIHtub2RlfSAgICAgICAgbm9kZSBleHByZXNzaW9uIHdpdGggYWxsIHBvd2VycyBleHBhbmRlZC5cbiAgICovXG5cblxuICBmdW5jdGlvbiBleHBhbmRQb3dlcihub2RlLCBwYXJlbnQsIGluZFBhcmVudCkge1xuICAgIHZhciB0cCA9IG5vZGUudHlwZTtcbiAgICB2YXIgaW50ZXJuYWwgPSBhcmd1bWVudHMubGVuZ3RoID4gMTsgLy8gVFJVRSBpbiBpbnRlcm5hbCBjYWxsc1xuXG4gICAgaWYgKHRwID09PSAnT3BlcmF0b3JOb2RlJyAmJiBub2RlLmlzQmluYXJ5KCkpIHtcbiAgICAgIHZhciBkb2VzID0gZmFsc2U7XG4gICAgICB2YXIgdmFsO1xuXG4gICAgICBpZiAobm9kZS5vcCA9PT0gJ14nKSB7XG4gICAgICAgIC8vIEZpcnN0IG9wZXJhdG9yOiBQYXJlbnRoZXNpcyBvciBVbmFyeU1pbnVzXG4gICAgICAgIGlmICgobm9kZS5hcmdzWzBdLnR5cGUgPT09ICdQYXJlbnRoZXNpc05vZGUnIHx8IG5vZGUuYXJnc1swXS50eXBlID09PSAnT3BlcmF0b3JOb2RlJykgJiYgbm9kZS5hcmdzWzFdLnR5cGUgPT09ICdDb25zdGFudE5vZGUnKSB7XG4gICAgICAgICAgLy8gU2Vjb25kIG9wZXJhdG9yOiBDb25zdGFudFxuICAgICAgICAgIHZhbCA9IHBhcnNlRmxvYXQobm9kZS5hcmdzWzFdLnZhbHVlKTtcbiAgICAgICAgICBkb2VzID0gdmFsID49IDIgJiYgKDAsIF9udW1iZXIuaXNJbnRlZ2VyKSh2YWwpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChkb2VzKSB7XG4gICAgICAgIC8vIEV4cG9uZW50ID49IDJcbiAgICAgICAgLy8gQmVmb3JlOlxuICAgICAgICAvLyAgICAgICAgICAgIG9wZXJhdG9yIEEgLS0+IFN1YnRyZWVcbiAgICAgICAgLy8gcGFyZW50IHBvd1xuICAgICAgICAvLyAgICAgICAgICAgIGNvbnN0YW50XG4gICAgICAgIC8vXG4gICAgICAgIGlmICh2YWwgPiAyKSB7XG4gICAgICAgICAgLy8gRXhwb25lbnQgPiAyLFxuICAgICAgICAgIC8vIEFGVEVSOiAgKGV4cG9uZW50ID4gMilcbiAgICAgICAgICAvLyAgICAgICAgICAgICBvcGVyYXRvciBBIC0tPiBTdWJ0cmVlXG4gICAgICAgICAgLy8gcGFyZW50ICAqXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgIGRlZXAgY2xvbmUgKG9wZXJhdG9yIEEgLS0+IFN1YnRyZWVcbiAgICAgICAgICAvLyAgICAgICAgICAgICBwb3dcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgY29uc3RhbnQgLSAxXG4gICAgICAgICAgLy9cbiAgICAgICAgICB2YXIgbkVzcVRvcG8gPSBub2RlLmFyZ3NbMF07XG4gICAgICAgICAgdmFyIG5EaXJUb3BvID0gbmV3IE9wZXJhdG9yTm9kZSgnXicsICdwb3cnLCBbbm9kZS5hcmdzWzBdLmNsb25lRGVlcCgpLCBuZXcgQ29uc3RhbnROb2RlKHZhbCAtIDEpXSk7XG4gICAgICAgICAgbm9kZSA9IG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbbkVzcVRvcG8sIG5EaXJUb3BvXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRXhwbyA9IDIgLSBubyBwb3dlclxuICAgICAgICAgIC8vIEFGVEVSOiAgKGV4cG9uZW50ID0gIDIpXG4gICAgICAgICAgLy8gICAgICAgICAgICAgb3BlcmF0b3IgQSAtLT4gU3VidHJlZVxuICAgICAgICAgIC8vIHBhcmVudCAgIG9wZXJcbiAgICAgICAgICAvLyAgICAgICAgICAgIGRlZXAgY2xvbmUgKG9wZXJhdG9yIEEgLS0+IFN1YnRyZWUpXG4gICAgICAgICAgLy9cbiAgICAgICAgICBub2RlID0gbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFtub2RlLmFyZ3NbMF0sIG5vZGUuYXJnc1swXS5jbG9uZURlZXAoKV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGludGVybmFsKSB7XG4gICAgICAgICAgLy8gQ2hhbmdlIHBhcmVudCByZWZlcmVuY2VzIGluIGludGVybmFsIHJlY3Vyc2l2ZSBjYWxsc1xuICAgICAgICAgIGlmIChpbmRQYXJlbnQgPT09ICdjb250ZW50Jykge1xuICAgICAgICAgICAgcGFyZW50LmNvbnRlbnQgPSBub2RlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJlbnQuYXJnc1tpbmRQYXJlbnRdID0gbm9kZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gZG9lc1xuXG4gICAgfSAvLyBiaW5hcnkgT3BlcmF0b3JOb2RlXG5cblxuICAgIGlmICh0cCA9PT0gJ1BhcmVudGhlc2lzTm9kZScpIHtcbiAgICAgIC8vIFJlY3Vyc2lvblxuICAgICAgZXhwYW5kUG93ZXIobm9kZS5jb250ZW50LCBub2RlLCAnY29udGVudCcpO1xuICAgIH0gZWxzZSBpZiAodHAgIT09ICdDb25zdGFudE5vZGUnICYmIHRwICE9PSAnU3ltYm9sTm9kZScpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5hcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGV4cGFuZFBvd2VyKG5vZGUuYXJnc1tpXSwgbm9kZSwgaSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFpbnRlcm5hbCkge1xuICAgICAgLy8gcmV0dXJuIHRoZSByb290IG5vZGVcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgfSAvLyBFbmQgZXhwYW5kUG93ZXJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIEF1eGlsYXJ5IGZ1bmN0aW9uIGZvciByYXRpb25hbGl6ZVxuICAgKiBDb252ZXJ0IG5lYXIgY2Fub25pY2FsIHBvbHlub21pYWwgaW4gb25lIHZhcmlhYmxlIGluIGEgY2Fub25pY2FsIHBvbHlub21pYWxcbiAgICogd2l0aCBvbmUgdGVybSBmb3IgZWFjaCBleHBvbmVudCBpbiBkZWNyZWFzaW5nIG9yZGVyXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIHBvbHlUb0Nhbm9uaWNhbChub2RlIFssIGNvZWZmaWNpZW50c10pXG4gICAqXG4gICAqIEBwYXJhbSAge05vZGUgfCBzdHJpbmd9IGV4cHIgICAgICAgVGhlIG5lYXIgY2Fub25pY2FsIHBvbHlub21pYWwgZXhwcmVzc2lvbiB0byBjb252ZXJ0IGluIGEgYSBjYW5vbmljYWwgcG9seW5vbWlhbCBleHByZXNzaW9uXG4gICAqXG4gICAqICAgICAgICBUaGUgc3RyaW5nIG9yIHRyZWUgZXhwcmVzc2lvbiBuZWVkcyB0byBiZSBhdCBiZWxvdyBzeW50YXgsIHdpdGggZnJlZSBzcGFjZXM6XG4gICAqICAgICAgICAgKCAgKF4oLSk/IHwgWystXT8gKWN0ZSAoKik/IHZhciAoXmV4cG8pPyAgfCBjdGUgKStcbiAgICogICAgICAgV2hlcmUgJ3ZhcicgaXMgb25lIHZhcmlhYmxlIHdpdGggYW55IHZhbGlkIG5hbWVcbiAgICogICAgICAgICAgICAgJ2N0ZScgYXJlIHJlYWwgbnVtZXJpYyBjb25zdGFudHMgd2l0aCBhbnkgdmFsdWUuIEl0IGNhbiBiZSBvbWl0dGVkIGlmIGVxdWFsIHRoYW4gMVxuICAgKiAgICAgICAgICAgICAnZXhwbycgYXJlIGludGVnZXJzIGdyZWF0ZXIgdGhhbiAwLiBJdCBjYW4gYmUgb21pdHRlZCBpZiBlcXVhbCB0aGFuIDEuXG4gICAqXG4gICAqIEBwYXJhbSAge2FycmF5fSAgIGNvZWZmaWNpZW50cyAgICAgICAgICAgICBPcHRpb25hbCByZXR1cm5zIGNvZWZmaWNpZW50cyBzb3J0ZWQgYnkgaW5jcmVhc2VkIGV4cG9uZW50XG4gICAqXG4gICAqXG4gICAqIEByZXR1cm4ge25vZGV9ICAgICAgICBuZXcgbm9kZSB0cmVlIHdpdGggb25lIHZhcmlhYmxlIHBvbHlub21pYWwgb3Igc3RyaW5nIGVycm9yLlxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBvbHlUb0Nhbm9uaWNhbChub2RlLCBjb2VmZmljaWVudHMpIHtcbiAgICBpZiAoY29lZmZpY2llbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvZWZmaWNpZW50cyA9IFtdO1xuICAgIH0gLy8gY29lZmZpY2llbnRzLlxuXG5cbiAgICBjb2VmZmljaWVudHNbMF0gPSAwOyAvLyBpbmRleCBpcyB0aGUgZXhwb25lbnRcblxuICAgIHZhciBvID0ge307XG4gICAgby5jdGUgPSAxO1xuICAgIG8ub3BlciA9ICcrJzsgLy8gZmlyZTogbWFyayB3aXRoICogb3IgXiB3aGVuIGZpbmRzICogb3IgXiBkb3duIHRyZWUsIHJlc2V0IHRvIFwiXCIgd2l0aCArIGFuZCAtLlxuICAgIC8vICAgICAgIEl0IGlzIHVzZWQgdG8gZGVkdWNlIHRoZSBleHBvbmVudDogMSBmb3IgKiwgMCBmb3IgXCJcIi5cblxuICAgIG8uZmlyZSA9ICcnO1xuICAgIHZhciBtYXhFeHBvID0gMDsgLy8gbWF4aW11bSBleHBvbmVudFxuXG4gICAgdmFyIHZhcm5hbWUgPSAnJzsgLy8gdmFyaWFibGUgbmFtZVxuXG4gICAgcmVjdXJQb2wobm9kZSwgbnVsbCwgbyk7XG4gICAgbWF4RXhwbyA9IGNvZWZmaWNpZW50cy5sZW5ndGggLSAxO1xuICAgIHZhciBmaXJzdCA9IHRydWU7XG4gICAgdmFyIG5vO1xuXG4gICAgZm9yICh2YXIgaSA9IG1heEV4cG87IGkgPj0gMDsgaS0tKSB7XG4gICAgICBpZiAoY29lZmZpY2llbnRzW2ldID09PSAwKSBjb250aW51ZTtcbiAgICAgIHZhciBuMSA9IG5ldyBDb25zdGFudE5vZGUoZmlyc3QgPyBjb2VmZmljaWVudHNbaV0gOiBNYXRoLmFicyhjb2VmZmljaWVudHNbaV0pKTtcbiAgICAgIHZhciBvcCA9IGNvZWZmaWNpZW50c1tpXSA8IDAgPyAnLScgOiAnKyc7XG5cbiAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAvLyBJcyBub3QgYSBjb25zdGFudCB3aXRob3V0IHZhcmlhYmxlXG4gICAgICAgIHZhciBuMiA9IG5ldyBTeW1ib2xOb2RlKHZhcm5hbWUpO1xuXG4gICAgICAgIGlmIChpID4gMSkge1xuICAgICAgICAgIHZhciBuMyA9IG5ldyBDb25zdGFudE5vZGUoaSk7XG4gICAgICAgICAgbjIgPSBuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFtuMiwgbjNdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2VmZmljaWVudHNbaV0gPT09IC0xICYmIGZpcnN0KSB7XG4gICAgICAgICAgbjEgPSBuZXcgT3BlcmF0b3JOb2RlKCctJywgJ3VuYXJ5TWludXMnLCBbbjJdKTtcbiAgICAgICAgfSBlbHNlIGlmIChNYXRoLmFicyhjb2VmZmljaWVudHNbaV0pID09PSAxKSB7XG4gICAgICAgICAgbjEgPSBuMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuMSA9IG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbbjEsIG4yXSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZpcnN0KSB7XG4gICAgICAgIG5vID0gbjE7XG4gICAgICB9IGVsc2UgaWYgKG9wID09PSAnKycpIHtcbiAgICAgICAgbm8gPSBuZXcgT3BlcmF0b3JOb2RlKCcrJywgJ2FkZCcsIFtubywgbjFdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vID0gbmV3IE9wZXJhdG9yTm9kZSgnLScsICdzdWJ0cmFjdCcsIFtubywgbjFdKTtcbiAgICAgIH1cblxuICAgICAgZmlyc3QgPSBmYWxzZTtcbiAgICB9IC8vIGZvclxuXG5cbiAgICBpZiAoZmlyc3QpIHtcbiAgICAgIHJldHVybiBuZXcgQ29uc3RhbnROb2RlKDApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbm87XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlY3Vyc2l2ZSBhdXhpbGFyeSBmdW5jdGlvbiBpbnNpZGUgcG9seVRvQ2Fub25pY2FsIGZvclxuICAgICAqIGNvbnZlcnRpbmcgZXhwcmVzc2lvbiBpbiBjYW5vbmljYWwgZm9ybVxuICAgICAqXG4gICAgICogU3ludGF4OlxuICAgICAqXG4gICAgICogICAgIHJlY3VyUG9sKG5vZGUsIG5vUGFpLCBvYmopXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtOb2RlfSBub2RlICAgICAgICBUaGUgY3VycmVudCBzdWJwb2x5bm9taWFsIGV4cHJlc3Npb25cbiAgICAgKiBAcGFyYW0gIHtOb2RlIHwgTnVsbH0gIG5vUGFpICAgVGhlIGN1cnJlbnQgcGFyZW50IG5vZGVcbiAgICAgKiBAcGFyYW0gIHtvYmplY3R9ICAgIG9iaiAgICAgICAgT2JqZWN0IHdpdGggbWFueSBpbnRlcm5hbCBmbGFnc1xuICAgICAqXG4gICAgICogQHJldHVybiB7fSAgICAgICAgICAgICAgICAgICAgTm8gcmV0dXJuLiBJZiBlcnJvciwgdGhyb3dzIGFuIGV4Y2VwdGlvblxuICAgICAqL1xuXG5cbiAgICBmdW5jdGlvbiByZWN1clBvbChub2RlLCBub1BhaSwgbykge1xuICAgICAgdmFyIHRwID0gbm9kZS50eXBlO1xuXG4gICAgICBpZiAodHAgPT09ICdGdW5jdGlvbk5vZGUnKSB7XG4gICAgICAgIC8vICoqKioqIEZ1bmN0aW9uTmFtZSAqKioqKlxuICAgICAgICAvLyBObyBmdW5jdGlvbiBjYWxsIGluIHBvbHlub21pYWwgZXhwcmVzc2lvblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGlzIGFuIHVuc29sdmVkIGZ1bmN0aW9uIGNhbGwnKTtcbiAgICAgIH0gZWxzZSBpZiAodHAgPT09ICdPcGVyYXRvck5vZGUnKSB7XG4gICAgICAgIC8vICoqKioqIE9wZXJhdG9yTmFtZSAqKioqKlxuICAgICAgICBpZiAoJystKl4nLmluZGV4T2Yobm9kZS5vcCkgPT09IC0xKSB0aHJvdyBuZXcgRXJyb3IoJ09wZXJhdG9yICcgKyBub2RlLm9wICsgJyBpbnZhbGlkJyk7XG5cbiAgICAgICAgaWYgKG5vUGFpICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gLSh1bmFyeSksXiAgOiBjaGlsZHJlbiBvZiAqLCssLVxuICAgICAgICAgIGlmICgobm9kZS5mbiA9PT0gJ3VuYXJ5TWludXMnIHx8IG5vZGUuZm4gPT09ICdwb3cnKSAmJiBub1BhaS5mbiAhPT0gJ2FkZCcgJiYgbm9QYWkuZm4gIT09ICdzdWJ0cmFjdCcgJiYgbm9QYWkuZm4gIT09ICdtdWx0aXBseScpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCAnICsgbm9kZS5vcCArICcgcGxhY2luZycpO1xuICAgICAgICAgIH0gLy8gLSwrLCogOiBjaGlsZHJlbiBvZiArLC1cblxuXG4gICAgICAgICAgaWYgKChub2RlLmZuID09PSAnc3VidHJhY3QnIHx8IG5vZGUuZm4gPT09ICdhZGQnIHx8IG5vZGUuZm4gPT09ICdtdWx0aXBseScpICYmIG5vUGFpLmZuICE9PSAnYWRkJyAmJiBub1BhaS5mbiAhPT0gJ3N1YnRyYWN0Jykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkICcgKyBub2RlLm9wICsgJyBwbGFjaW5nJyk7XG4gICAgICAgICAgfSAvLyAtLCsgOiBmaXJzdCBjaGlsZFxuXG5cbiAgICAgICAgICBpZiAoKG5vZGUuZm4gPT09ICdzdWJ0cmFjdCcgfHwgbm9kZS5mbiA9PT0gJ2FkZCcgfHwgbm9kZS5mbiA9PT0gJ3VuYXJ5TWludXMnKSAmJiBvLm5vRmlsICE9PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgJyArIG5vZGUub3AgKyAnIHBsYWNpbmcnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gSGFzIHBhcmVudFxuICAgICAgICAvLyBGaXJlcnM6IF4sKiAgICAgICBPbGQ6ICAgXiwmLC0odW5hcnkpOiBmaXJlcnNcblxuXG4gICAgICAgIGlmIChub2RlLm9wID09PSAnXicgfHwgbm9kZS5vcCA9PT0gJyonKSB7XG4gICAgICAgICAgby5maXJlID0gbm9kZS5vcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBub2RlLmFyZ3MubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgLy8gKywtOiByZXNldCBmaXJlXG4gICAgICAgICAgaWYgKG5vZGUuZm4gPT09ICd1bmFyeU1pbnVzJykgby5vcGVyID0gJy0nO1xuXG4gICAgICAgICAgaWYgKG5vZGUub3AgPT09ICcrJyB8fCBub2RlLmZuID09PSAnc3VidHJhY3QnKSB7XG4gICAgICAgICAgICBvLmZpcmUgPSAnJztcbiAgICAgICAgICAgIG8uY3RlID0gMTsgLy8gZGVmYXVsdCBpZiB0aGVyZSBpcyBubyBjb25zdGFudFxuXG4gICAgICAgICAgICBvLm9wZXIgPSBfaSA9PT0gMCA/ICcrJyA6IG5vZGUub3A7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgby5ub0ZpbCA9IF9pOyAvLyBudW1iZXIgb2Ygc29uXG5cbiAgICAgICAgICByZWN1clBvbChub2RlLmFyZ3NbX2ldLCBub2RlLCBvKTtcbiAgICAgICAgfSAvLyBmb3IgaW4gY2hpbGRyZW5cblxuICAgICAgfSBlbHNlIGlmICh0cCA9PT0gJ1N5bWJvbE5vZGUnKSB7XG4gICAgICAgIC8vICoqKioqIFN5bWJvbE5hbWUgKioqKipcbiAgICAgICAgaWYgKG5vZGUubmFtZSAhPT0gdmFybmFtZSAmJiB2YXJuYW1lICE9PSAnJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlcmUgaXMgbW9yZSB0aGFuIG9uZSB2YXJpYWJsZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFybmFtZSA9IG5vZGUubmFtZTtcblxuICAgICAgICBpZiAobm9QYWkgPT09IG51bGwpIHtcbiAgICAgICAgICBjb2VmZmljaWVudHNbMV0gPSAxO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBeOiBTeW1ib2wgaXMgRmlyc3QgY2hpbGRcblxuXG4gICAgICAgIGlmIChub1BhaS5vcCA9PT0gJ14nICYmIG8ubm9GaWwgIT09IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0luIHBvd2VyIHRoZSB2YXJpYWJsZSBzaG91bGQgYmUgdGhlIGZpcnN0IHBhcmFtZXRlcicpO1xuICAgICAgICB9IC8vICo6IFN5bWJvbCBpcyBTZWNvbmQgY2hpbGRcblxuXG4gICAgICAgIGlmIChub1BhaS5vcCA9PT0gJyonICYmIG8ubm9GaWwgIT09IDEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0luIG11bHRpcGx5IHRoZSB2YXJpYWJsZSBzaG91bGQgYmUgdGhlIHNlY29uZCBwYXJhbWV0ZXInKTtcbiAgICAgICAgfSAvLyBTeW1ib2w6IGZpcmVycyAnJywqID0+IGl0IG1lYW5zIHRoZXJlIGlzIG5vIGV4cG9uZW50IGFib3ZlLCBzbyBpdCdzIDEgKGN0ZSAqIHZhcilcblxuXG4gICAgICAgIGlmIChvLmZpcmUgPT09ICcnIHx8IG8uZmlyZSA9PT0gJyonKSB7XG4gICAgICAgICAgaWYgKG1heEV4cG8gPCAxKSBjb2VmZmljaWVudHNbMV0gPSAwO1xuICAgICAgICAgIGNvZWZmaWNpZW50c1sxXSArPSBvLmN0ZSAqIChvLm9wZXIgPT09ICcrJyA/IDEgOiAtMSk7XG4gICAgICAgICAgbWF4RXhwbyA9IE1hdGgubWF4KDEsIG1heEV4cG8pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRwID09PSAnQ29uc3RhbnROb2RlJykge1xuICAgICAgICB2YXIgdmFsb3IgPSBwYXJzZUZsb2F0KG5vZGUudmFsdWUpO1xuXG4gICAgICAgIGlmIChub1BhaSA9PT0gbnVsbCkge1xuICAgICAgICAgIGNvZWZmaWNpZW50c1swXSA9IHZhbG9yO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChub1BhaS5vcCA9PT0gJ14nKSB7XG4gICAgICAgICAgLy8gY3RlOiBzZWNvbmQgIGNoaWxkIG9mIHBvd2VyXG4gICAgICAgICAgaWYgKG8ubm9GaWwgIT09IDEpIHRocm93IG5ldyBFcnJvcignQ29uc3RhbnQgY2Fubm90IGJlIHBvd2VyZWQnKTtcblxuICAgICAgICAgIGlmICghKDAsIF9udW1iZXIuaXNJbnRlZ2VyKSh2YWxvcikgfHwgdmFsb3IgPD0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb24taW50ZWdlciBleHBvbmVudCBpcyBub3QgYWxsb3dlZCcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZvciAodmFyIF9pMiA9IG1heEV4cG8gKyAxOyBfaTIgPCB2YWxvcjsgX2kyKyspIHtcbiAgICAgICAgICAgIGNvZWZmaWNpZW50c1tfaTJdID0gMDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodmFsb3IgPiBtYXhFeHBvKSBjb2VmZmljaWVudHNbdmFsb3JdID0gMDtcbiAgICAgICAgICBjb2VmZmljaWVudHNbdmFsb3JdICs9IG8uY3RlICogKG8ub3BlciA9PT0gJysnID8gMSA6IC0xKTtcbiAgICAgICAgICBtYXhFeHBvID0gTWF0aC5tYXgodmFsb3IsIG1heEV4cG8pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG8uY3RlID0gdmFsb3I7IC8vIEN0ZTogZmlyZXIgJycgPT4gVGhlcmUgaXMgbm8gZXhwb25lbnQgYW5kIG5vIG11bHRpcGxpY2F0aW9uLCBzbyB0aGUgZXhwb25lbnQgaXMgMC5cblxuICAgICAgICBpZiAoby5maXJlID09PSAnJykge1xuICAgICAgICAgIGNvZWZmaWNpZW50c1swXSArPSBvLmN0ZSAqIChvLm9wZXIgPT09ICcrJyA/IDEgOiAtMSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVHlwZSAnICsgdHAgKyAnIGlzIG5vdCBhbGxvd2VkJyk7XG4gICAgICB9XG4gICAgfSAvLyBFbmQgb2YgcmVjdXJQb2xcblxuICB9IC8vIEVuZCBvZiBwb2x5VG9DYW5vbmljYWxcblxuXG4gIHJldHVybiByYXRpb25hbGl6ZTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVSYXRpb25hbGl6ZSA9IGNyZWF0ZVJhdGlvbmFsaXplOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTaW1wbGlmeSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfdXRpbCA9IHJlcXVpcmUoXCIuL3NpbXBsaWZ5L3V0aWxcIik7XG5cbnZhciBfc2ltcGxpZnlDb3JlID0gcmVxdWlyZShcIi4vc2ltcGxpZnkvc2ltcGxpZnlDb3JlXCIpO1xuXG52YXIgX3NpbXBsaWZ5Q29uc3RhbnQgPSByZXF1aXJlKFwiLi9zaW1wbGlmeS9zaW1wbGlmeUNvbnN0YW50XCIpO1xuXG52YXIgX3Jlc29sdmUgPSByZXF1aXJlKFwiLi9zaW1wbGlmeS9yZXNvbHZlXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIG5hbWUgPSAnc2ltcGxpZnknO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnY29uZmlnJywgJ3R5cGVkJywgJ3BhcnNlJywgJ2FkZCcsICdzdWJ0cmFjdCcsICdtdWx0aXBseScsICdkaXZpZGUnLCAncG93JywgJ2lzWmVybycsICdlcXVhbCcsICc/ZnJhY3Rpb24nLCAnP2JpZ251bWJlcicsICdtYXRoV2l0aFRyYW5zZm9ybScsICdDb25zdGFudE5vZGUnLCAnRnVuY3Rpb25Ob2RlJywgJ09wZXJhdG9yTm9kZScsICdQYXJlbnRoZXNpc05vZGUnLCAnU3ltYm9sTm9kZSddO1xudmFyIGNyZWF0ZVNpbXBsaWZ5ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgcGFyc2UgPSBfcmVmLnBhcnNlLFxuICAgICAgYWRkID0gX3JlZi5hZGQsXG4gICAgICBzdWJ0cmFjdCA9IF9yZWYuc3VidHJhY3QsXG4gICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHksXG4gICAgICBkaXZpZGUgPSBfcmVmLmRpdmlkZSxcbiAgICAgIHBvdyA9IF9yZWYucG93LFxuICAgICAgaXNaZXJvID0gX3JlZi5pc1plcm8sXG4gICAgICBlcXVhbCA9IF9yZWYuZXF1YWwsXG4gICAgICBmcmFjdGlvbiA9IF9yZWYuZnJhY3Rpb24sXG4gICAgICBiaWdudW1iZXIgPSBfcmVmLmJpZ251bWJlcixcbiAgICAgIG1hdGhXaXRoVHJhbnNmb3JtID0gX3JlZi5tYXRoV2l0aFRyYW5zZm9ybSxcbiAgICAgIENvbnN0YW50Tm9kZSA9IF9yZWYuQ29uc3RhbnROb2RlLFxuICAgICAgRnVuY3Rpb25Ob2RlID0gX3JlZi5GdW5jdGlvbk5vZGUsXG4gICAgICBPcGVyYXRvck5vZGUgPSBfcmVmLk9wZXJhdG9yTm9kZSxcbiAgICAgIFBhcmVudGhlc2lzTm9kZSA9IF9yZWYuUGFyZW50aGVzaXNOb2RlLFxuICAgICAgU3ltYm9sTm9kZSA9IF9yZWYuU3ltYm9sTm9kZTtcbiAgdmFyIHNpbXBsaWZ5Q29uc3RhbnQgPSAoMCwgX3NpbXBsaWZ5Q29uc3RhbnQuY3JlYXRlU2ltcGxpZnlDb25zdGFudCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBjb25maWc6IGNvbmZpZyxcbiAgICBtYXRoV2l0aFRyYW5zZm9ybTogbWF0aFdpdGhUcmFuc2Zvcm0sXG4gICAgZnJhY3Rpb246IGZyYWN0aW9uLFxuICAgIGJpZ251bWJlcjogYmlnbnVtYmVyLFxuICAgIENvbnN0YW50Tm9kZTogQ29uc3RhbnROb2RlLFxuICAgIE9wZXJhdG9yTm9kZTogT3BlcmF0b3JOb2RlLFxuICAgIEZ1bmN0aW9uTm9kZTogRnVuY3Rpb25Ob2RlLFxuICAgIFN5bWJvbE5vZGU6IFN5bWJvbE5vZGVcbiAgfSk7XG4gIHZhciBzaW1wbGlmeUNvcmUgPSAoMCwgX3NpbXBsaWZ5Q29yZS5jcmVhdGVTaW1wbGlmeUNvcmUpKHtcbiAgICBlcXVhbDogZXF1YWwsXG4gICAgaXNaZXJvOiBpc1plcm8sXG4gICAgYWRkOiBhZGQsXG4gICAgc3VidHJhY3Q6IHN1YnRyYWN0LFxuICAgIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgICBkaXZpZGU6IGRpdmlkZSxcbiAgICBwb3c6IHBvdyxcbiAgICBDb25zdGFudE5vZGU6IENvbnN0YW50Tm9kZSxcbiAgICBPcGVyYXRvck5vZGU6IE9wZXJhdG9yTm9kZSxcbiAgICBGdW5jdGlvbk5vZGU6IEZ1bmN0aW9uTm9kZSxcbiAgICBQYXJlbnRoZXNpc05vZGU6IFBhcmVudGhlc2lzTm9kZVxuICB9KTtcbiAgdmFyIHJlc29sdmUgPSAoMCwgX3Jlc29sdmUuY3JlYXRlUmVzb2x2ZSkoe1xuICAgIHBhcnNlOiBwYXJzZSxcbiAgICBGdW5jdGlvbk5vZGU6IEZ1bmN0aW9uTm9kZSxcbiAgICBPcGVyYXRvck5vZGU6IE9wZXJhdG9yTm9kZSxcbiAgICBQYXJlbnRoZXNpc05vZGU6IFBhcmVudGhlc2lzTm9kZVxuICB9KTtcblxuICB2YXIgX2NyZWF0ZVV0aWwgPSAoMCwgX3V0aWwuY3JlYXRlVXRpbCkoe1xuICAgIEZ1bmN0aW9uTm9kZTogRnVuY3Rpb25Ob2RlLFxuICAgIE9wZXJhdG9yTm9kZTogT3BlcmF0b3JOb2RlLFxuICAgIFN5bWJvbE5vZGU6IFN5bWJvbE5vZGVcbiAgfSksXG4gICAgICBpc0NvbW11dGF0aXZlID0gX2NyZWF0ZVV0aWwuaXNDb21tdXRhdGl2ZSxcbiAgICAgIGlzQXNzb2NpYXRpdmUgPSBfY3JlYXRlVXRpbC5pc0Fzc29jaWF0aXZlLFxuICAgICAgZmxhdHRlbiA9IF9jcmVhdGVVdGlsLmZsYXR0ZW4sXG4gICAgICB1bmZsYXR0ZW5yID0gX2NyZWF0ZVV0aWwudW5mbGF0dGVucixcbiAgICAgIHVuZmxhdHRlbmwgPSBfY3JlYXRlVXRpbC51bmZsYXR0ZW5sLFxuICAgICAgY3JlYXRlTWFrZU5vZGVGdW5jdGlvbiA9IF9jcmVhdGVVdGlsLmNyZWF0ZU1ha2VOb2RlRnVuY3Rpb247XG4gIC8qKlxuICAgKiBTaW1wbGlmeSBhbiBleHByZXNzaW9uIHRyZWUuXG4gICAqXG4gICAqIEEgbGlzdCBvZiBydWxlcyBhcmUgYXBwbGllZCB0byBhbiBleHByZXNzaW9uLCByZXBlYXRpbmcgb3ZlciB0aGUgbGlzdCB1bnRpbFxuICAgKiBubyBmdXJ0aGVyIGNoYW5nZXMgYXJlIG1hZGUuXG4gICAqIEl0J3MgcG9zc2libGUgdG8gcGFzcyBhIGN1c3RvbSBzZXQgb2YgcnVsZXMgdG8gdGhlIGZ1bmN0aW9uIGFzIHNlY29uZFxuICAgKiBhcmd1bWVudC4gQSBydWxlIGNhbiBiZSBzcGVjaWZpZWQgYXMgYW4gb2JqZWN0LCBzdHJpbmcsIG9yIGZ1bmN0aW9uOlxuICAgKlxuICAgKiAgICAgY29uc3QgcnVsZXMgPSBbXG4gICAqICAgICAgIHsgbDogJ24xKm4zICsgbjIqbjMnLCByOiAnKG4xK24yKSpuMycgfSxcbiAgICogICAgICAgJ24xKm4zICsgbjIqbjMgLT4gKG4xK24yKSpuMycsXG4gICAqICAgICAgIGZ1bmN0aW9uIChub2RlKSB7XG4gICAqICAgICAgICAgLy8gLi4uIHJldHVybiBhIG5ldyBub2RlIG9yIHJldHVybiB0aGUgbm9kZSB1bmNoYW5nZWRcbiAgICogICAgICAgICByZXR1cm4gbm9kZVxuICAgKiAgICAgICB9XG4gICAqICAgICBdXG4gICAqXG4gICAqIFN0cmluZyBhbmQgb2JqZWN0IHJ1bGVzIGNvbnNpc3Qgb2YgYSBsZWZ0IGFuZCByaWdodCBwYXR0ZXJuLiBUaGUgbGVmdCBpc1xuICAgKiB1c2VkIHRvIG1hdGNoIGFnYWluc3QgdGhlIGV4cHJlc3Npb24gYW5kIHRoZSByaWdodCBkZXRlcm1pbmVzIHdoYXQgbWF0Y2hlc1xuICAgKiBhcmUgcmVwbGFjZWQgd2l0aC4gVGhlIG1haW4gZGlmZmVyZW5jZSBiZXR3ZWVuIGEgcGF0dGVybiBhbmQgYSBub3JtYWxcbiAgICogZXhwcmVzc2lvbiBpcyB0aGF0IHZhcmlhYmxlcyBzdGFydGluZyB3aXRoIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVycyBhcmVcbiAgICogaW50ZXJwcmV0ZWQgYXMgd2lsZGNhcmRzOlxuICAgKlxuICAgKiAtICduJyAtIG1hdGNoZXMgYW55IE5vZGVcbiAgICogLSAnYycgLSBtYXRjaGVzIGFueSBDb25zdGFudE5vZGVcbiAgICogLSAndicgLSBtYXRjaGVzIGFueSBOb2RlIHRoYXQgaXMgbm90IGEgQ29uc3RhbnROb2RlXG4gICAqXG4gICAqIFRoZSBkZWZhdWx0IGxpc3Qgb2YgcnVsZXMgaXMgZXhwb3NlZCBvbiB0aGUgZnVuY3Rpb24gYXMgYHNpbXBsaWZ5LnJ1bGVzYFxuICAgKiBhbmQgY2FuIGJlIHVzZWQgYXMgYSBiYXNpcyB0byBidWlsdCBhIHNldCBvZiBjdXN0b20gcnVsZXMuXG4gICAqXG4gICAqIEZvciBtb3JlIGRldGFpbHMgb24gdGhlIHRoZW9yeSwgc2VlOlxuICAgKlxuICAgKiAtIFtTdHJhdGVnaWVzIGZvciBzaW1wbGlmeWluZyBtYXRoIGV4cHJlc3Npb25zIChTdGFja292ZXJmbG93KV0oaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzU0MDIyNy9zdHJhdGVnaWVzLWZvci1zaW1wbGlmeWluZy1tYXRoLWV4cHJlc3Npb25zKVxuICAgKiAtIFtTeW1ib2xpYyBjb21wdXRhdGlvbiAtIFNpbXBsaWZpY2F0aW9uIChXaWtpcGVkaWEpXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TeW1ib2xpY19jb21wdXRhdGlvbiNTaW1wbGlmaWNhdGlvbilcbiAgICpcbiAgICogIEFuIG9wdGlvbmFsIGBvcHRpb25zYCBhcmd1bWVudCBjYW4gYmUgcGFzc2VkIGFzIGxhc3QgYXJndW1lbnQgb2YgYHNpbXBsaWZ5YC5cbiAgICogIFRoZXJlIGlzIGN1cnJlbnRseSBvbmUgb3B0aW9uIGF2YWlsYWJsZTogYGV4YWN0RnJhY3Rpb25zYCwgYSBib29sZWFuIHdoaWNoXG4gICAqICBpcyBgdHJ1ZWAgYnkgZGVmYXVsdC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgc2ltcGxpZnkoZXhwcilcbiAgICogICAgIHNpbXBsaWZ5KGV4cHIsIHJ1bGVzKVxuICAgKiAgICAgc2ltcGxpZnkoZXhwciwgcnVsZXMpXG4gICAqICAgICBzaW1wbGlmeShleHByLCBydWxlcywgc2NvcGUpXG4gICAqICAgICBzaW1wbGlmeShleHByLCBydWxlcywgc2NvcGUsIG9wdGlvbnMpXG4gICAqICAgICBzaW1wbGlmeShleHByLCBzY29wZSlcbiAgICogICAgIHNpbXBsaWZ5KGV4cHIsIHNjb3BlLCBvcHRpb25zKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGguc2ltcGxpZnkoJzIgKiAxICogeCBeICgyIC0gMSknKSAgICAgIC8vIE5vZGUgXCIyICogeFwiXG4gICAqICAgICBtYXRoLnNpbXBsaWZ5KCcyICogMyAqIHgnLCB7eDogNH0pICAgICAgICAvLyBOb2RlIFwiMjRcIlxuICAgKiAgICAgY29uc3QgZiA9IG1hdGgucGFyc2UoJzIgKiAxICogeCBeICgyIC0gMSknKVxuICAgKiAgICAgbWF0aC5zaW1wbGlmeShmKSAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm9kZSBcIjIgKiB4XCJcbiAgICogICAgIG1hdGguc2ltcGxpZnkoJzAuNCAqIHgnLCB7fSwge2V4YWN0RnJhY3Rpb25zOiB0cnVlfSkgIC8vIE5vZGUgXCJ4ICogMiAvIDVcIlxuICAgKiAgICAgbWF0aC5zaW1wbGlmeSgnMC40ICogeCcsIHt9LCB7ZXhhY3RGcmFjdGlvbnM6IGZhbHNlfSkgLy8gTm9kZSBcIjAuNCAqIHhcIlxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgIGRlcml2YXRpdmUsIHBhcnNlLCBldmFsdWF0ZSwgcmF0aW9uYWxpemVcbiAgICpcbiAgICogQHBhcmFtIHtOb2RlIHwgc3RyaW5nfSBleHByXG4gICAqICAgICAgICAgICAgVGhlIGV4cHJlc3Npb24gdG8gYmUgc2ltcGxpZmllZFxuICAgKiBAcGFyYW0ge0FycmF5PHtsOnN0cmluZywgcjogc3RyaW5nfSB8IHN0cmluZyB8IGZ1bmN0aW9uPn0gW3J1bGVzXVxuICAgKiAgICAgICAgICAgIE9wdGlvbmFsIGxpc3Qgd2l0aCBjdXN0b20gcnVsZXNcbiAgICogQHJldHVybiB7Tm9kZX0gUmV0dXJucyB0aGUgc2ltcGxpZmllZCBmb3JtIG9mIGBleHByYFxuICAgKi9cblxuXG4gIHZhciBzaW1wbGlmeSA9IHR5cGVkKCdzaW1wbGlmeScsIHtcbiAgICBzdHJpbmc6IGZ1bmN0aW9uIHN0cmluZyhleHByKSB7XG4gICAgICByZXR1cm4gc2ltcGxpZnkocGFyc2UoZXhwciksIHNpbXBsaWZ5LnJ1bGVzLCB7fSwge30pO1xuICAgIH0sXG4gICAgJ3N0cmluZywgT2JqZWN0JzogZnVuY3Rpb24gc3RyaW5nT2JqZWN0KGV4cHIsIHNjb3BlKSB7XG4gICAgICByZXR1cm4gc2ltcGxpZnkocGFyc2UoZXhwciksIHNpbXBsaWZ5LnJ1bGVzLCBzY29wZSwge30pO1xuICAgIH0sXG4gICAgJ3N0cmluZywgT2JqZWN0LCBPYmplY3QnOiBmdW5jdGlvbiBzdHJpbmdPYmplY3RPYmplY3QoZXhwciwgc2NvcGUsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBzaW1wbGlmeShwYXJzZShleHByKSwgc2ltcGxpZnkucnVsZXMsIHNjb3BlLCBvcHRpb25zKTtcbiAgICB9LFxuICAgICdzdHJpbmcsIEFycmF5JzogZnVuY3Rpb24gc3RyaW5nQXJyYXkoZXhwciwgcnVsZXMpIHtcbiAgICAgIHJldHVybiBzaW1wbGlmeShwYXJzZShleHByKSwgcnVsZXMsIHt9LCB7fSk7XG4gICAgfSxcbiAgICAnc3RyaW5nLCBBcnJheSwgT2JqZWN0JzogZnVuY3Rpb24gc3RyaW5nQXJyYXlPYmplY3QoZXhwciwgcnVsZXMsIHNjb3BlKSB7XG4gICAgICByZXR1cm4gc2ltcGxpZnkocGFyc2UoZXhwciksIHJ1bGVzLCBzY29wZSwge30pO1xuICAgIH0sXG4gICAgJ3N0cmluZywgQXJyYXksIE9iamVjdCwgT2JqZWN0JzogZnVuY3Rpb24gc3RyaW5nQXJyYXlPYmplY3RPYmplY3QoZXhwciwgcnVsZXMsIHNjb3BlLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gc2ltcGxpZnkocGFyc2UoZXhwciksIHJ1bGVzLCBzY29wZSwgb3B0aW9ucyk7XG4gICAgfSxcbiAgICAnTm9kZSwgT2JqZWN0JzogZnVuY3Rpb24gTm9kZU9iamVjdChleHByLCBzY29wZSkge1xuICAgICAgcmV0dXJuIHNpbXBsaWZ5KGV4cHIsIHNpbXBsaWZ5LnJ1bGVzLCBzY29wZSwge30pO1xuICAgIH0sXG4gICAgJ05vZGUsIE9iamVjdCwgT2JqZWN0JzogZnVuY3Rpb24gTm9kZU9iamVjdE9iamVjdChleHByLCBzY29wZSwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIHNpbXBsaWZ5KGV4cHIsIHNpbXBsaWZ5LnJ1bGVzLCBzY29wZSwgb3B0aW9ucyk7XG4gICAgfSxcbiAgICBOb2RlOiBmdW5jdGlvbiBOb2RlKGV4cHIpIHtcbiAgICAgIHJldHVybiBzaW1wbGlmeShleHByLCBzaW1wbGlmeS5ydWxlcywge30sIHt9KTtcbiAgICB9LFxuICAgICdOb2RlLCBBcnJheSc6IGZ1bmN0aW9uIE5vZGVBcnJheShleHByLCBydWxlcykge1xuICAgICAgcmV0dXJuIHNpbXBsaWZ5KGV4cHIsIHJ1bGVzLCB7fSwge30pO1xuICAgIH0sXG4gICAgJ05vZGUsIEFycmF5LCBPYmplY3QnOiBmdW5jdGlvbiBOb2RlQXJyYXlPYmplY3QoZXhwciwgcnVsZXMsIHNjb3BlKSB7XG4gICAgICByZXR1cm4gc2ltcGxpZnkoZXhwciwgcnVsZXMsIHNjb3BlLCB7fSk7XG4gICAgfSxcbiAgICAnTm9kZSwgQXJyYXksIE9iamVjdCwgT2JqZWN0JzogZnVuY3Rpb24gTm9kZUFycmF5T2JqZWN0T2JqZWN0KGV4cHIsIHJ1bGVzLCBzY29wZSwgb3B0aW9ucykge1xuICAgICAgcnVsZXMgPSBfYnVpbGRSdWxlcyhydWxlcyk7XG4gICAgICB2YXIgcmVzID0gcmVzb2x2ZShleHByLCBzY29wZSk7XG4gICAgICByZXMgPSByZW1vdmVQYXJlbnMocmVzKTtcbiAgICAgIHZhciB2aXNpdGVkID0ge307XG4gICAgICB2YXIgc3RyID0gcmVzLnRvU3RyaW5nKHtcbiAgICAgICAgcGFyZW50aGVzaXM6ICdhbGwnXG4gICAgICB9KTtcblxuICAgICAgd2hpbGUgKCF2aXNpdGVkW3N0cl0pIHtcbiAgICAgICAgdmlzaXRlZFtzdHJdID0gdHJ1ZTtcbiAgICAgICAgX2xhc3RzeW0gPSAwOyAvLyBjb3VudGVyIGZvciBwbGFjZWhvbGRlciBzeW1ib2xzXG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmICh0eXBlb2YgcnVsZXNbaV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJlcyA9IHJ1bGVzW2ldKHJlcywgb3B0aW9ucyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZsYXR0ZW4ocmVzKTtcbiAgICAgICAgICAgIHJlcyA9IGFwcGx5UnVsZShyZXMsIHJ1bGVzW2ldKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB1bmZsYXR0ZW5sKHJlcyk7IC8vIHVzaW5nIGxlZnQtaGVhdnkgYmluYXJ5IHRyZWUgaGVyZSBzaW5jZSBjdXN0b20gcnVsZSBmdW5jdGlvbnMgbWF5IGV4cGVjdCBpdFxuICAgICAgICB9XG5cbiAgICAgICAgc3RyID0gcmVzLnRvU3RyaW5nKHtcbiAgICAgICAgICBwYXJlbnRoZXNpczogJ2FsbCdcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICB9KTtcbiAgc2ltcGxpZnkuc2ltcGxpZnlDb3JlID0gc2ltcGxpZnlDb3JlO1xuICBzaW1wbGlmeS5yZXNvbHZlID0gcmVzb2x2ZTtcblxuICBmdW5jdGlvbiByZW1vdmVQYXJlbnMobm9kZSkge1xuICAgIHJldHVybiBub2RlLnRyYW5zZm9ybShmdW5jdGlvbiAobm9kZSwgcGF0aCwgcGFyZW50KSB7XG4gICAgICByZXR1cm4gKDAsIF9pcy5pc1BhcmVudGhlc2lzTm9kZSkobm9kZSkgPyByZW1vdmVQYXJlbnMobm9kZS5jb250ZW50KSA6IG5vZGU7XG4gICAgfSk7XG4gIH0gLy8gQWxsIGNvbnN0YW50cyB0aGF0IGFyZSBhbGxvd2VkIGluIHJ1bGVzXG5cblxuICB2YXIgU1VQUE9SVEVEX0NPTlNUQU5UUyA9IHtcbiAgICBcInRydWVcIjogdHJ1ZSxcbiAgICBcImZhbHNlXCI6IHRydWUsXG4gICAgZTogdHJ1ZSxcbiAgICBpOiB0cnVlLFxuICAgIEluZmluaXR5OiB0cnVlLFxuICAgIExOMjogdHJ1ZSxcbiAgICBMTjEwOiB0cnVlLFxuICAgIExPRzJFOiB0cnVlLFxuICAgIExPRzEwRTogdHJ1ZSxcbiAgICBOYU46IHRydWUsXG4gICAgcGhpOiB0cnVlLFxuICAgIHBpOiB0cnVlLFxuICAgIFNRUlQxXzI6IHRydWUsXG4gICAgU1FSVDI6IHRydWUsXG4gICAgdGF1OiB0cnVlIC8vIG51bGw6IGZhbHNlLFxuICAgIC8vIHVuZGVmaW5lZDogZmFsc2UsXG4gICAgLy8gdmVyc2lvbjogZmFsc2UsXG5cbiAgfTsgLy8gQXJyYXkgb2Ygc3RyaW5ncywgdXNlZCB0byBidWlsZCB0aGUgcnVsZVNldC5cbiAgLy8gRWFjaCBsIChsZWZ0IHNpZGUpIGFuZCByIChyaWdodCBzaWRlKSBhcmUgcGFyc2VkIGJ5XG4gIC8vIHRoZSBleHByZXNzaW9uIHBhcnNlciBpbnRvIGEgbm9kZSB0cmVlLlxuICAvLyBMZWZ0IGhhbmQgc2lkZXMgYXJlIG1hdGNoZWQgdG8gc3VidHJlZXMgd2l0aGluIHRoZVxuICAvLyBleHByZXNzaW9uIHRvIGJlIHBhcnNlZCBhbmQgcmVwbGFjZWQgd2l0aCB0aGUgcmlnaHRcbiAgLy8gaGFuZCBzaWRlLlxuICAvLyBUT0RPOiBBZGQgc3VwcG9ydCBmb3IgY29uc3RyYWludHMgb24gY29uc3RhbnRzIChlaXRoZXIgaW4gdGhlIGZvcm0gb2YgYSAnPScgZXhwcmVzc2lvbiBvciBhIGNhbGxiYWNrIFtjYWxsYmFjayBhbGxvd3MgdGhpbmdzIGxpa2UgY29tcGFyaW5nIHN5bWJvbHMgYWxwaGFiZXRpY2FsbHldKVxuICAvLyBUbyBldmFsdWF0ZSBsaHMgY29uc3RhbnRzIGZvciByaHMgY29uc3RhbnRzLCB1c2U6IHsgbDogJ2MxK2MyJywgcjogJ2MzJywgZXZhbHVhdGU6ICdjMyA9IGMxICsgYzInIH0uIE11bHRpcGxlIGFzc2lnbm1lbnRzIGFyZSBzZXBhcmF0ZWQgYnkgJzsnIGluIGJsb2NrIGZvcm1hdC5cbiAgLy8gSXQgaXMgcG9zc2libGUgdG8gZ2V0IGludG8gYW4gaW5maW5pdGUgbG9vcCB3aXRoIGNvbmZsaWN0aW5nIHJ1bGVzXG5cbiAgc2ltcGxpZnkucnVsZXMgPSBbc2ltcGxpZnlDb3JlLCAvLyB7IGw6ICduKzAnLCByOiAnbicgfSwgICAgIC8vIHNpbXBsaWZ5Q29yZVxuICAvLyB7IGw6ICduXjAnLCByOiAnMScgfSwgICAgIC8vIHNpbXBsaWZ5Q29yZVxuICAvLyB7IGw6ICcwKm4nLCByOiAnMCcgfSwgICAgIC8vIHNpbXBsaWZ5Q29yZVxuICAvLyB7IGw6ICduL24nLCByOiAnMSd9LCAgICAgIC8vIHNpbXBsaWZ5Q29yZVxuICAvLyB7IGw6ICduXjEnLCByOiAnbicgfSwgICAgIC8vIHNpbXBsaWZ5Q29yZVxuICAvLyB7IGw6ICcrbjEnLCByOiduMScgfSwgICAgIC8vIHNpbXBsaWZ5Q29yZVxuICAvLyB7IGw6ICduLS1uMScsIHI6J24rbjEnIH0sIC8vIHNpbXBsaWZ5Q29yZVxuICB7XG4gICAgbDogJ2xvZyhlKScsXG4gICAgcjogJzEnXG4gIH0sIC8vIHRlbXBvcmFyeSBydWxlc1xuICB7XG4gICAgbDogJ24tbjEnLFxuICAgIHI6ICduKy1uMSdcbiAgfSwgLy8gdGVtcG9yYXJpbHkgcmVwbGFjZSAnc3VidHJhY3QnIHNvIHdlIGNhbiBmdXJ0aGVyIGZsYXR0ZW4gdGhlICdhZGQnIG9wZXJhdG9yXG4gIHtcbiAgICBsOiAnLShjKnYpJyxcbiAgICByOiAnKC1jKSAqIHYnXG4gIH0sIC8vIG1ha2Ugbm9uLWNvbnN0YW50IHRlcm1zIHBvc2l0aXZlXG4gIHtcbiAgICBsOiAnLXYnLFxuICAgIHI6ICcoLTEpICogdidcbiAgfSwge1xuICAgIGw6ICduL24xXm4yJyxcbiAgICByOiAnbipuMV4tbjInXG4gIH0sIC8vIHRlbXBvcmFyaWx5IHJlcGxhY2UgJ2RpdmlkZScgc28gd2UgY2FuIGZ1cnRoZXIgZmxhdHRlbiB0aGUgJ211bHRpcGx5JyBvcGVyYXRvclxuICB7XG4gICAgbDogJ24vbjEnLFxuICAgIHI6ICduKm4xXi0xJ1xuICB9LCAvLyBleHBhbmQgbmVzdGVkIGV4cG9uZW50aWF0aW9uXG4gIHtcbiAgICBsOiAnKG4gXiBuMSkgXiBuMicsXG4gICAgcjogJ24gXiAobjEgKiBuMiknXG4gIH0sIC8vIGNvbGxlY3QgbGlrZSBmYWN0b3JzXG4gIHtcbiAgICBsOiAnbipuJyxcbiAgICByOiAnbl4yJ1xuICB9LCB7XG4gICAgbDogJ24gKiBuXm4xJyxcbiAgICByOiAnbl4objErMSknXG4gIH0sIHtcbiAgICBsOiAnbl5uMSAqIG5ebjInLFxuICAgIHI6ICduXihuMStuMiknXG4gIH0sIC8vIGNvbGxlY3QgbGlrZSB0ZXJtc1xuICB7XG4gICAgbDogJ24rbicsXG4gICAgcjogJzIqbidcbiAgfSwge1xuICAgIGw6ICduKy1uJyxcbiAgICByOiAnMCdcbiAgfSwge1xuICAgIGw6ICduMSpuMiArIG4yJyxcbiAgICByOiAnKG4xKzEpKm4yJ1xuICB9LCB7XG4gICAgbDogJ24xKm4zICsgbjIqbjMnLFxuICAgIHI6ICcobjErbjIpKm4zJ1xuICB9LCAvLyByZW1vdmUgcGFyZW50aGVzaXMgaW4gdGhlIGNhc2Ugb2YgbmVnYXRpbmcgYSBxdWFudGl0aXlcbiAge1xuICAgIGw6ICduMSArIC0xICogKG4yICsgbjMpJyxcbiAgICByOiAnbjEgKyAtMSAqIG4yICsgLTEgKiBuMydcbiAgfSwgc2ltcGxpZnlDb25zdGFudCwge1xuICAgIGw6ICcoLW4pKm4xJyxcbiAgICByOiAnLShuKm4xKSdcbiAgfSwgLy8gbWFrZSBmYWN0b3JzIHBvc2l0aXZlIChhbmQgdW5kbyAnbWFrZSBub24tY29uc3RhbnQgdGVybXMgcG9zaXRpdmUnKVxuICAvLyBvcmRlcmluZyBvZiBjb25zdGFudHNcbiAge1xuICAgIGw6ICdjK3YnLFxuICAgIHI6ICd2K2MnLFxuICAgIGNvbnRleHQ6IHtcbiAgICAgIGFkZDoge1xuICAgICAgICBjb21tdXRhdGl2ZTogZmFsc2VcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBsOiAndipjJyxcbiAgICByOiAnYyp2JyxcbiAgICBjb250ZXh0OiB7XG4gICAgICBtdWx0aXBseToge1xuICAgICAgICBjb21tdXRhdGl2ZTogZmFsc2VcbiAgICAgIH1cbiAgICB9XG4gIH0sIC8vIHVuZG8gdGVtcG9yYXJ5IHJ1bGVzXG4gIC8vIHsgbDogJygtMSkgKiBuJywgcjogJy1uJyB9LCAvLyAjODExIGFkZGVkIHRlc3Qgd2hpY2ggcHJvdmVkIHRoaXMgaXMgcmVkdW5kYW50XG4gIHtcbiAgICBsOiAnbistbjEnLFxuICAgIHI6ICduLW4xJ1xuICB9LCAvLyB1bmRvIHJlcGxhY2UgJ3N1YnRyYWN0J1xuICB7XG4gICAgbDogJ24qKG4xXi0xKScsXG4gICAgcjogJ24vbjEnXG4gIH0sIC8vIHVuZG8gcmVwbGFjZSAnZGl2aWRlJ1xuICB7XG4gICAgbDogJ24qbjFeLW4yJyxcbiAgICByOiAnbi9uMV5uMidcbiAgfSwge1xuICAgIGw6ICduMV4tMScsXG4gICAgcjogJzEvbjEnXG4gIH0sIHtcbiAgICBsOiAnbioobjEvbjIpJyxcbiAgICByOiAnKG4qbjEpL24yJ1xuICB9LCAvLyAnKicgYmVmb3JlICcvJ1xuICB7XG4gICAgbDogJ24tKG4xK24yKScsXG4gICAgcjogJ24tbjEtbjInXG4gIH0sIC8vICctJyBiZWZvcmUgJysnXG4gIC8vIHsgbDogJyhuMS9uMikvbjMnLCByOiAnbjEvKG4yKm4zKScgfSxcbiAgLy8geyBsOiAnKG4qbjEpLyhuKm4yKScsIHI6ICduMS9uMicgfSxcbiAge1xuICAgIGw6ICcxKm4nLFxuICAgIHI6ICduJ1xuICB9LCAvLyB0aGlzIHBhdHRlcm4gY2FuIGJlIHByb2R1Y2VkIGJ5IHNpbXBsaWZ5Q29uc3RhbnRcbiAge1xuICAgIGw6ICduMS8objIvbjMpJyxcbiAgICByOiAnKG4xKm4zKS9uMidcbiAgfV07XG4gIC8qKlxuICAgKiBQYXJzZSB0aGUgc3RyaW5nIGFycmF5IG9mIHJ1bGVzIGludG8gbm9kZXNcbiAgICpcbiAgICogRXhhbXBsZSBzeW50YXggZm9yIHJ1bGVzOlxuICAgKlxuICAgKiBQb3NpdGlvbiBjb25zdGFudHMgdG8gdGhlIGxlZnQgaW4gYSBwcm9kdWN0OlxuICAgKiB7IGw6ICduMSAqIGMxJywgcjogJ2MxICogbjEnIH1cbiAgICogbjEgaXMgYW55IE5vZGUsIGFuZCBjMSBpcyBhIENvbnN0YW50Tm9kZS5cbiAgICpcbiAgICogQXBwbHkgZGlmZmVyZW5jZSBvZiBzcXVhcmVzIGZvcm11bGE6XG4gICAqIHsgbDogJyhuMSAtIG4yKSAqIChuMSArIG4yKScsIHI6ICduMV4yIC0gbjJeMicgfVxuICAgKiBuMSwgbjIgbWVhbiBhbnkgTm9kZS5cbiAgICpcbiAgICogU2hvcnQgaGFuZCBub3RhdGlvbjpcbiAgICogJ24xICogYzEgLT4gYzEgKiBuMSdcbiAgICovXG5cbiAgZnVuY3Rpb24gX2J1aWxkUnVsZXMocnVsZXMpIHtcbiAgICAvLyBBcnJheSBvZiBydWxlcyB0byBiZSB1c2VkIHRvIHNpbXBsaWZ5IGV4cHJlc3Npb25zXG4gICAgdmFyIHJ1bGVTZXQgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBydWxlID0gcnVsZXNbaV07XG4gICAgICB2YXIgbmV3UnVsZSA9IHZvaWQgMDtcblxuICAgICAgdmFyIHJ1bGVUeXBlID0gX3R5cGVvZihydWxlKTtcblxuICAgICAgc3dpdGNoIChydWxlVHlwZSkge1xuICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBsciA9IHJ1bGUuc3BsaXQoJy0+Jyk7XG5cbiAgICAgICAgICAgIGlmIChsci5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgcnVsZSA9IHtcbiAgICAgICAgICAgICAgICBsOiBsclswXSxcbiAgICAgICAgICAgICAgICByOiBsclsxXVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhyb3cgU3ludGF4RXJyb3IoJ0NvdWxkIG5vdCBwYXJzZSBydWxlOiAnICsgcnVsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cblxuICAgICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICAgIG5ld1J1bGUgPSB7XG4gICAgICAgICAgICBsOiByZW1vdmVQYXJlbnMocGFyc2UocnVsZS5sKSksXG4gICAgICAgICAgICByOiByZW1vdmVQYXJlbnMocGFyc2UocnVsZS5yKSlcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKHJ1bGUuY29udGV4dCkge1xuICAgICAgICAgICAgbmV3UnVsZS5ldmFsdWF0ZSA9IHJ1bGUuY29udGV4dDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocnVsZS5ldmFsdWF0ZSkge1xuICAgICAgICAgICAgbmV3UnVsZS5ldmFsdWF0ZSA9IHBhcnNlKHJ1bGUuZXZhbHVhdGUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpc0Fzc29jaWF0aXZlKG5ld1J1bGUubCkpIHtcbiAgICAgICAgICAgIHZhciBtYWtlTm9kZSA9IGNyZWF0ZU1ha2VOb2RlRnVuY3Rpb24obmV3UnVsZS5sKTtcblxuICAgICAgICAgICAgdmFyIGV4cGFuZHN5bSA9IF9nZXRFeHBhbmRQbGFjZWhvbGRlclN5bWJvbCgpO1xuXG4gICAgICAgICAgICBuZXdSdWxlLmV4cGFuZGVkID0ge307XG4gICAgICAgICAgICBuZXdSdWxlLmV4cGFuZGVkLmwgPSBtYWtlTm9kZShbbmV3UnVsZS5sLmNsb25lKCksIGV4cGFuZHN5bV0pOyAvLyBQdXNoIHRoZSBleHBhbmRzeW0gaW50byB0aGUgZGVlcGVzdCBwb3NzaWJsZSBicmFuY2guXG4gICAgICAgICAgICAvLyBUaGlzIGhlbHBzIHRvIG1hdGNoIHRoZSBuZXdSdWxlIGFnYWluc3Qgbm9kZXMgcmV0dXJuZWQgZnJvbSBnZXRTcGxpdHMoKSBsYXRlciBvbi5cblxuICAgICAgICAgICAgZmxhdHRlbihuZXdSdWxlLmV4cGFuZGVkLmwpO1xuICAgICAgICAgICAgdW5mbGF0dGVucihuZXdSdWxlLmV4cGFuZGVkLmwpO1xuICAgICAgICAgICAgbmV3UnVsZS5leHBhbmRlZC5yID0gbWFrZU5vZGUoW25ld1J1bGUuciwgZXhwYW5kc3ltXSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgICAgIG5ld1J1bGUgPSBydWxlO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgVHlwZUVycm9yKCdVbnN1cHBvcnRlZCB0eXBlIG9mIHJ1bGU6ICcgKyBydWxlVHlwZSk7XG4gICAgICB9IC8vIGNvbnNvbGUubG9nKCdBZGRpbmcgcnVsZTogJyArIHJ1bGVzW2ldKVxuICAgICAgLy8gY29uc29sZS5sb2cobmV3UnVsZSlcblxuXG4gICAgICBydWxlU2V0LnB1c2gobmV3UnVsZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJ1bGVTZXQ7XG4gIH1cblxuICB2YXIgX2xhc3RzeW0gPSAwO1xuXG4gIGZ1bmN0aW9uIF9nZXRFeHBhbmRQbGFjZWhvbGRlclN5bWJvbCgpIHtcbiAgICByZXR1cm4gbmV3IFN5bWJvbE5vZGUoJ19wJyArIF9sYXN0c3ltKyspO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc2ltcGxmaWVkIGZvcm0gb2Ygbm9kZSwgb3IgdGhlIG9yaWdpbmFsIG5vZGUgaWYgbm8gc2ltcGxpZmljYXRpb24gd2FzIHBvc3NpYmxlLlxuICAgKlxuICAgKiBAcGFyYW0gIHtDb25zdGFudE5vZGUgfCBTeW1ib2xOb2RlIHwgUGFyZW50aGVzaXNOb2RlIHwgRnVuY3Rpb25Ob2RlIHwgT3BlcmF0b3JOb2RlfSBub2RlXG4gICAqIEByZXR1cm4ge0NvbnN0YW50Tm9kZSB8IFN5bWJvbE5vZGUgfCBQYXJlbnRoZXNpc05vZGUgfCBGdW5jdGlvbk5vZGUgfCBPcGVyYXRvck5vZGV9IFRoZSBzaW1wbGlmaWVkIGZvcm0gb2YgYGV4cHJgLCBvciB0aGUgb3JpZ2luYWwgbm9kZSBpZiBubyBzaW1wbGlmaWNhdGlvbiB3YXMgcG9zc2libGUuXG4gICAqL1xuXG5cbiAgdmFyIGFwcGx5UnVsZSA9IHR5cGVkKCdhcHBseVJ1bGUnLCB7XG4gICAgJ05vZGUsIE9iamVjdCc6IGZ1bmN0aW9uIE5vZGVPYmplY3Qobm9kZSwgcnVsZSkge1xuICAgICAgLy8gY29uc29sZS5sb2coJ0VudGVyaW5nIGFwcGx5UnVsZSgnICsgbm9kZS50b1N0cmluZygpICsgJyknKVxuICAgICAgLy8gRG8gbm90IGNsb25lIG5vZGUgdW5sZXNzIHdlIGZpbmQgYSBtYXRjaFxuICAgICAgdmFyIHJlcyA9IG5vZGU7IC8vIEZpcnN0IHJlcGxhY2Ugb3VyIGNoaWxkIG5vZGVzIHdpdGggdGhlaXIgc2ltcGxpZmllZCB2ZXJzaW9uc1xuICAgICAgLy8gSWYgYSBjaGlsZCBjb3VsZCBub3QgYmUgc2ltcGxpZmllZCwgdGhlIGFzc2lnbm1lbnRzIHdpbGwgaGF2ZVxuICAgICAgLy8gbm8gZWZmZWN0IHNpbmNlIHRoZSBub2RlIGlzIHJldHVybmVkIHVuY2hhbmdlZFxuXG4gICAgICBpZiAocmVzIGluc3RhbmNlb2YgT3BlcmF0b3JOb2RlIHx8IHJlcyBpbnN0YW5jZW9mIEZ1bmN0aW9uTm9kZSkge1xuICAgICAgICBpZiAocmVzLmFyZ3MpIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlcy5hcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICByZXMuYXJnc1tpXSA9IGFwcGx5UnVsZShyZXMuYXJnc1tpXSwgcnVsZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHJlcyBpbnN0YW5jZW9mIFBhcmVudGhlc2lzTm9kZSkge1xuICAgICAgICBpZiAocmVzLmNvbnRlbnQpIHtcbiAgICAgICAgICByZXMuY29udGVudCA9IGFwcGx5UnVsZShyZXMuY29udGVudCwgcnVsZSk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gVHJ5IHRvIG1hdGNoIGEgcnVsZSBhZ2FpbnN0IHRoaXMgbm9kZVxuXG5cbiAgICAgIHZhciByZXBsID0gcnVsZS5yO1xuXG4gICAgICB2YXIgbWF0Y2hlcyA9IF9ydWxlTWF0Y2gocnVsZS5sLCByZXMpWzBdOyAvLyBJZiB0aGUgcnVsZSBpcyBhc3NvY2lhdGl2ZSBvcGVyYXRvciwgd2UgY2FuIHRyeSBtYXRjaGluZyBpdCB3aGlsZSBhbGxvd2luZyBhZGRpdGlvbmFsIHRlcm1zLlxuICAgICAgLy8gVGhpcyBhbGxvd3MgdXMgdG8gbWF0Y2ggcnVsZXMgbGlrZSAnbituJyB0byB0aGUgZXhwcmVzc2lvbiAnKDEreCkreCcgb3IgZXZlbiAneCsxK3gnIGlmIHRoZSBvcGVyYXRvciBpcyBjb21tdXRhdGl2ZS5cblxuXG4gICAgICBpZiAoIW1hdGNoZXMgJiYgcnVsZS5leHBhbmRlZCkge1xuICAgICAgICByZXBsID0gcnVsZS5leHBhbmRlZC5yO1xuICAgICAgICBtYXRjaGVzID0gX3J1bGVNYXRjaChydWxlLmV4cGFuZGVkLmwsIHJlcylbMF07XG4gICAgICB9XG5cbiAgICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICAgIC8vIGNvbnN0IGJlZm9yZSA9IHJlcy50b1N0cmluZyh7cGFyZW50aGVzaXM6ICdhbGwnfSlcbiAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IG5vZGUgYnkgY2xvbmluZyB0aGUgcmhzIG9mIHRoZSBtYXRjaGVkIHJ1bGVcbiAgICAgICAgLy8gd2Uga2VlcCBhbnkgaW1wbGljaXQgbXVsdGlwbGljYXRpb24gc3RhdGUgaWYgcmVsZXZhbnRcbiAgICAgICAgdmFyIGltcGxpY2l0ID0gcmVzLmltcGxpY2l0O1xuICAgICAgICByZXMgPSByZXBsLmNsb25lKCk7XG5cbiAgICAgICAgaWYgKGltcGxpY2l0ICYmICdpbXBsaWNpdCcgaW4gcmVwbCkge1xuICAgICAgICAgIHJlcy5pbXBsaWNpdCA9IHRydWU7XG4gICAgICAgIH0gLy8gUmVwbGFjZSBwbGFjZWhvbGRlcnMgd2l0aCB0aGVpciByZXNwZWN0aXZlIG5vZGVzIHdpdGhvdXQgdHJhdmVyc2luZyBkZWVwZXIgaW50byB0aGUgcmVwbGFjZWQgbm9kZXNcblxuXG4gICAgICAgIHJlcyA9IHJlcy50cmFuc2Zvcm0oZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICBpZiAobm9kZS5pc1N5bWJvbE5vZGUgJiYgKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKG1hdGNoZXMucGxhY2Vob2xkZXJzLCBub2RlLm5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hlcy5wbGFjZWhvbGRlcnNbbm9kZS5uYW1lXS5jbG9uZSgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pOyAvLyBjb25zdCBhZnRlciA9IHJlcy50b1N0cmluZyh7cGFyZW50aGVzaXM6ICdhbGwnfSlcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ1NpbXBsaWZpZWQgJyArIGJlZm9yZSArICcgdG8gJyArIGFmdGVyKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBHZXQgKGJpbmFyeSkgY29tYmluYXRpb25zIG9mIGEgZmxhdHRlbmVkIGJpbmFyeSBub2RlXG4gICAqIGUuZy4gKyhub2RlMSwgbm9kZTIsIG5vZGUzKSAtPiBbXG4gICAqICAgICAgICArKG5vZGUxLCAgKyhub2RlMiwgbm9kZTMpKSxcbiAgICogICAgICAgICsobm9kZTIsICArKG5vZGUxLCBub2RlMykpLFxuICAgKiAgICAgICAgKyhub2RlMywgICsobm9kZTEsIG5vZGUyKSldXG4gICAqXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGdldFNwbGl0cyhub2RlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIHZhciByaWdodCwgcmlnaHRBcmdzO1xuICAgIHZhciBtYWtlTm9kZSA9IGNyZWF0ZU1ha2VOb2RlRnVuY3Rpb24obm9kZSk7XG5cbiAgICBpZiAoaXNDb21tdXRhdGl2ZShub2RlLCBjb250ZXh0KSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmlnaHRBcmdzID0gbm9kZS5hcmdzLnNsaWNlKDApO1xuICAgICAgICByaWdodEFyZ3Muc3BsaWNlKGksIDEpO1xuICAgICAgICByaWdodCA9IHJpZ2h0QXJncy5sZW5ndGggPT09IDEgPyByaWdodEFyZ3NbMF0gOiBtYWtlTm9kZShyaWdodEFyZ3MpO1xuICAgICAgICByZXMucHVzaChtYWtlTm9kZShbbm9kZS5hcmdzW2ldLCByaWdodF0pKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmlnaHRBcmdzID0gbm9kZS5hcmdzLnNsaWNlKDEpO1xuICAgICAgcmlnaHQgPSByaWdodEFyZ3MubGVuZ3RoID09PSAxID8gcmlnaHRBcmdzWzBdIDogbWFrZU5vZGUocmlnaHRBcmdzKTtcbiAgICAgIHJlcy5wdXNoKG1ha2VOb2RlKFtub2RlLmFyZ3NbMF0sIHJpZ2h0XSkpO1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHNldCB1bmlvbiBvZiB0d28gbWF0Y2gtcGxhY2Vob2xkZXJzIG9yIG51bGwgaWYgdGhlcmUgaXMgYSBjb25mbGljdC5cbiAgICovXG5cblxuICBmdW5jdGlvbiBtZXJnZU1hdGNoKG1hdGNoMSwgbWF0Y2gyKSB7XG4gICAgdmFyIHJlcyA9IHtcbiAgICAgIHBsYWNlaG9sZGVyczoge31cbiAgICB9OyAvLyBTb21lIG1hdGNoZXMgbWF5IG5vdCBoYXZlIHBsYWNlaG9sZGVyczsgdGhpcyBpcyBPS1xuXG4gICAgaWYgKCFtYXRjaDEucGxhY2Vob2xkZXJzICYmICFtYXRjaDIucGxhY2Vob2xkZXJzKSB7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0gZWxzZSBpZiAoIW1hdGNoMS5wbGFjZWhvbGRlcnMpIHtcbiAgICAgIHJldHVybiBtYXRjaDI7XG4gICAgfSBlbHNlIGlmICghbWF0Y2gyLnBsYWNlaG9sZGVycykge1xuICAgICAgcmV0dXJuIG1hdGNoMTtcbiAgICB9IC8vIFBsYWNlaG9sZGVycyB3aXRoIHRoZSBzYW1lIGtleSBtdXN0IG1hdGNoIGV4YWN0bHlcblxuXG4gICAgZm9yICh2YXIga2V5IGluIG1hdGNoMS5wbGFjZWhvbGRlcnMpIHtcbiAgICAgIHJlcy5wbGFjZWhvbGRlcnNba2V5XSA9IG1hdGNoMS5wbGFjZWhvbGRlcnNba2V5XTtcblxuICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShtYXRjaDIucGxhY2Vob2xkZXJzLCBrZXkpKSB7XG4gICAgICAgIGlmICghX2V4YWN0TWF0Y2gobWF0Y2gxLnBsYWNlaG9sZGVyc1trZXldLCBtYXRjaDIucGxhY2Vob2xkZXJzW2tleV0pKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBfa2V5IGluIG1hdGNoMi5wbGFjZWhvbGRlcnMpIHtcbiAgICAgIHJlcy5wbGFjZWhvbGRlcnNbX2tleV0gPSBtYXRjaDIucGxhY2Vob2xkZXJzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgLyoqXG4gICAqIENvbWJpbmUgdHdvIGxpc3RzIG9mIG1hdGNoZXMgYnkgYXBwbHlpbmcgbWVyZ2VNYXRjaCB0byB0aGUgY2FydGVzaWFuIHByb2R1Y3Qgb2YgdHdvIGxpc3RzIG9mIG1hdGNoZXMuXG4gICAqIEVhY2ggbGlzdCByZXByZXNlbnRzIG1hdGNoZXMgZm91bmQgaW4gb25lIGNoaWxkIG9mIGEgbm9kZS5cbiAgICovXG5cblxuICBmdW5jdGlvbiBjb21iaW5lQ2hpbGRNYXRjaGVzKGxpc3QxLCBsaXN0Mikge1xuICAgIHZhciByZXMgPSBbXTtcblxuICAgIGlmIChsaXN0MS5sZW5ndGggPT09IDAgfHwgbGlzdDIubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIHZhciBtZXJnZWQ7XG5cbiAgICBmb3IgKHZhciBpMSA9IDA7IGkxIDwgbGlzdDEubGVuZ3RoOyBpMSsrKSB7XG4gICAgICBmb3IgKHZhciBpMiA9IDA7IGkyIDwgbGlzdDIubGVuZ3RoOyBpMisrKSB7XG4gICAgICAgIG1lcmdlZCA9IG1lcmdlTWF0Y2gobGlzdDFbaTFdLCBsaXN0MltpMl0pO1xuXG4gICAgICAgIGlmIChtZXJnZWQpIHtcbiAgICAgICAgICByZXMucHVzaChtZXJnZWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICAvKipcbiAgICogQ29tYmluZSBtdWx0aXBsZSBsaXN0cyBvZiBtYXRjaGVzIGJ5IGFwcGx5aW5nIG1lcmdlTWF0Y2ggdG8gdGhlIGNhcnRlc2lhbiBwcm9kdWN0IG9mIHR3byBsaXN0cyBvZiBtYXRjaGVzLlxuICAgKiBFYWNoIGxpc3QgcmVwcmVzZW50cyBtYXRjaGVzIGZvdW5kIGluIG9uZSBjaGlsZCBvZiBhIG5vZGUuXG4gICAqIFJldHVybnMgYSBsaXN0IG9mIHVuaXF1ZSBtYXRjaGVzLlxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIG1lcmdlQ2hpbGRNYXRjaGVzKGNoaWxkTWF0Y2hlcykge1xuICAgIGlmIChjaGlsZE1hdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gY2hpbGRNYXRjaGVzO1xuICAgIH1cblxuICAgIHZhciBzZXRzID0gY2hpbGRNYXRjaGVzLnJlZHVjZShjb21iaW5lQ2hpbGRNYXRjaGVzKTtcbiAgICB2YXIgdW5pcXVlU2V0cyA9IFtdO1xuICAgIHZhciB1bmlxdWUgPSB7fTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2V0cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHMgPSBKU09OLnN0cmluZ2lmeShzZXRzW2ldKTtcblxuICAgICAgaWYgKCF1bmlxdWVbc10pIHtcbiAgICAgICAgdW5pcXVlW3NdID0gdHJ1ZTtcbiAgICAgICAgdW5pcXVlU2V0cy5wdXNoKHNldHNbaV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmlxdWVTZXRzO1xuICB9XG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgbm9kZSBtYXRjaGVzIHJ1bGUuXG4gICAqXG4gICAqIEBwYXJhbSB7Q29uc3RhbnROb2RlIHwgU3ltYm9sTm9kZSB8IFBhcmVudGhlc2lzTm9kZSB8IEZ1bmN0aW9uTm9kZSB8IE9wZXJhdG9yTm9kZX0gcnVsZVxuICAgKiBAcGFyYW0ge0NvbnN0YW50Tm9kZSB8IFN5bWJvbE5vZGUgfCBQYXJlbnRoZXNpc05vZGUgfCBGdW5jdGlvbk5vZGUgfCBPcGVyYXRvck5vZGV9IG5vZGVcbiAgICogQHJldHVybiB7T2JqZWN0fSBJbmZvcm1hdGlvbiBhYm91dCB0aGUgbWF0Y2gsIGlmIGl0IGV4aXN0cy5cbiAgICovXG5cblxuICBmdW5jdGlvbiBfcnVsZU1hdGNoKHJ1bGUsIG5vZGUsIGlzU3BsaXQpIHtcbiAgICAvLyAgICBjb25zb2xlLmxvZygnRW50ZXJpbmcgX3J1bGVNYXRjaCgnICsgSlNPTi5zdHJpbmdpZnkocnVsZSkgKyAnLCAnICsgSlNPTi5zdHJpbmdpZnkobm9kZSkgKyAnKScpXG4gICAgLy8gICAgY29uc29sZS5sb2coJ3J1bGUgPSAnICsgcnVsZSlcbiAgICAvLyAgICBjb25zb2xlLmxvZygnbm9kZSA9ICcgKyBub2RlKVxuICAgIC8vICAgIGNvbnNvbGUubG9nKCdFbnRlcmluZyBfcnVsZU1hdGNoKCcgKyBydWxlLnRvU3RyaW5nKCkgKyAnLCAnICsgbm9kZS50b1N0cmluZygpICsgJyknKVxuICAgIHZhciByZXMgPSBbe1xuICAgICAgcGxhY2Vob2xkZXJzOiB7fVxuICAgIH1dO1xuXG4gICAgaWYgKHJ1bGUgaW5zdGFuY2VvZiBPcGVyYXRvck5vZGUgJiYgbm9kZSBpbnN0YW5jZW9mIE9wZXJhdG9yTm9kZSB8fCBydWxlIGluc3RhbmNlb2YgRnVuY3Rpb25Ob2RlICYmIG5vZGUgaW5zdGFuY2VvZiBGdW5jdGlvbk5vZGUpIHtcbiAgICAgIC8vIElmIHRoZSBydWxlIGlzIGFuIE9wZXJhdG9yTm9kZSBvciBhIEZ1bmN0aW9uTm9kZSwgdGhlbiBub2RlIG11c3QgbWF0Y2ggZXhhY3RseVxuICAgICAgaWYgKHJ1bGUgaW5zdGFuY2VvZiBPcGVyYXRvck5vZGUpIHtcbiAgICAgICAgaWYgKHJ1bGUub3AgIT09IG5vZGUub3AgfHwgcnVsZS5mbiAhPT0gbm9kZS5mbikge1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChydWxlIGluc3RhbmNlb2YgRnVuY3Rpb25Ob2RlKSB7XG4gICAgICAgIGlmIChydWxlLm5hbWUgIT09IG5vZGUubmFtZSkge1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBydWxlIGFuZCBub2RlIG1hdGNoLiBTZWFyY2ggdGhlIGNoaWxkcmVuIG9mIHJ1bGUgYW5kIG5vZGUuXG5cblxuICAgICAgaWYgKG5vZGUuYXJncy5sZW5ndGggPT09IDEgJiYgcnVsZS5hcmdzLmxlbmd0aCA9PT0gMSB8fCAhaXNBc3NvY2lhdGl2ZShub2RlKSB8fCBpc1NwbGl0KSB7XG4gICAgICAgIC8vIEV4cGVjdCBub24tYXNzb2NpYXRpdmUgb3BlcmF0b3JzIHRvIG1hdGNoIGV4YWN0bHlcbiAgICAgICAgdmFyIGNoaWxkTWF0Y2hlcyA9IFtdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZS5hcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGNoaWxkTWF0Y2ggPSBfcnVsZU1hdGNoKHJ1bGUuYXJnc1tpXSwgbm9kZS5hcmdzW2ldKTtcblxuICAgICAgICAgIGlmIChjaGlsZE1hdGNoLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgLy8gQ2hpbGQgZGlkIG5vdCBtYXRjaCwgc28gc3RvcCBzZWFyY2hpbmcgaW1tZWRpYXRlbHlcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICB9IC8vIFRoZSBjaGlsZCBtYXRjaGVkLCBzbyBhZGQgdGhlIGluZm9ybWF0aW9uIHJldHVybmVkIGZyb20gdGhlIGNoaWxkIHRvIG91ciByZXN1bHRcblxuXG4gICAgICAgICAgY2hpbGRNYXRjaGVzLnB1c2goY2hpbGRNYXRjaCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXMgPSBtZXJnZUNoaWxkTWF0Y2hlcyhjaGlsZE1hdGNoZXMpO1xuICAgICAgfSBlbHNlIGlmIChub2RlLmFyZ3MubGVuZ3RoID49IDIgJiYgcnVsZS5hcmdzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAvLyBub2RlIGlzIGZsYXR0ZW5lZCwgcnVsZSBpcyBub3RcbiAgICAgICAgLy8gQXNzb2NpYXRpdmUgb3BlcmF0b3JzL2Z1bmN0aW9ucyBjYW4gYmUgc3BsaXQgaW4gZGlmZmVyZW50IHdheXMgc28gd2UgY2hlY2sgaWYgdGhlIHJ1bGUgbWF0Y2hlcyBlYWNoXG4gICAgICAgIC8vIHRoZW0gYW5kIHJldHVybiB0aGVpciB1bmlvbi5cbiAgICAgICAgdmFyIHNwbGl0cyA9IGdldFNwbGl0cyhub2RlLCBydWxlLmNvbnRleHQpO1xuICAgICAgICB2YXIgc3BsaXRNYXRjaGVzID0gW107XG5cbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHNwbGl0cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICB2YXIgbWF0Y2hTZXQgPSBfcnVsZU1hdGNoKHJ1bGUsIHNwbGl0c1tfaV0sIHRydWUpOyAvLyByZWN1cnNpbmcgYXQgdGhlIHNhbWUgdHJlZSBkZXB0aCBoZXJlXG5cblxuICAgICAgICAgIHNwbGl0TWF0Y2hlcyA9IHNwbGl0TWF0Y2hlcy5jb25jYXQobWF0Y2hTZXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNwbGl0TWF0Y2hlcztcbiAgICAgIH0gZWxzZSBpZiAocnVsZS5hcmdzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ1VuZXhwZWN0ZWQgbm9uLWJpbmFyeSBhc3NvY2lhdGl2ZSBmdW5jdGlvbjogJyArIHJ1bGUudG9TdHJpbmcoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cyBpbiBydWxlIGFuZCBub2RlLCBzbyBubyBtYXRjaFxuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChydWxlIGluc3RhbmNlb2YgU3ltYm9sTm9kZSkge1xuICAgICAgLy8gSWYgdGhlIHJ1bGUgaXMgYSBTeW1ib2xOb2RlLCB0aGVuIGl0IGNhcnJpZXMgYSBzcGVjaWFsIG1lYW5pbmdcbiAgICAgIC8vIGFjY29yZGluZyB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBzeW1ib2wgbm9kZSBuYW1lLlxuICAgICAgLy8gYy4qIG1hdGNoZXMgYSBDb25zdGFudE5vZGVcbiAgICAgIC8vIG4uKiBtYXRjaGVzIGFueSBub2RlXG4gICAgICBpZiAocnVsZS5uYW1lLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N5bWJvbCBpbiBydWxlIGhhcyAwIGxlbmd0aC4uLiE/Jyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChTVVBQT1JURURfQ09OU1RBTlRTW3J1bGUubmFtZV0pIHtcbiAgICAgICAgLy8gYnVpbHQtaW4gY29uc3RhbnQgbXVzdCBtYXRjaCBleGFjdGx5XG4gICAgICAgIGlmIChydWxlLm5hbWUgIT09IG5vZGUubmFtZSkge1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChydWxlLm5hbWVbMF0gPT09ICduJyB8fCBydWxlLm5hbWUuc3Vic3RyaW5nKDAsIDIpID09PSAnX3AnKSB7XG4gICAgICAgIC8vIHJ1bGUgbWF0Y2hlcyBfYW55dGhpbmdfLCBzbyBhc3NpZ24gdGhpcyBub2RlIHRvIHRoZSBydWxlLm5hbWUgcGxhY2Vob2xkZXJcbiAgICAgICAgLy8gQXNzaWduIG5vZGUgdG8gdGhlIHJ1bGUubmFtZSBwbGFjZWhvbGRlci5cbiAgICAgICAgLy8gT3VyIHBhcmVudCB3aWxsIGNoZWNrIGZvciBtYXRjaGVzIGFtb25nIHBsYWNlaG9sZGVycy5cbiAgICAgICAgcmVzWzBdLnBsYWNlaG9sZGVyc1tydWxlLm5hbWVdID0gbm9kZTtcbiAgICAgIH0gZWxzZSBpZiAocnVsZS5uYW1lWzBdID09PSAndicpIHtcbiAgICAgICAgLy8gcnVsZSBtYXRjaGVzIGFueSB2YXJpYWJsZSB0aGluZyAobm90IGEgQ29uc3RhbnROb2RlKVxuICAgICAgICBpZiAoISgwLCBfaXMuaXNDb25zdGFudE5vZGUpKG5vZGUpKSB7XG4gICAgICAgICAgcmVzWzBdLnBsYWNlaG9sZGVyc1tydWxlLm5hbWVdID0gbm9kZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBNaXMtbWF0Y2g6IHJ1bGUgd2FzIGV4cGVjdGluZyBzb21ldGhpbmcgb3RoZXIgdGhhbiBhIENvbnN0YW50Tm9kZVxuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChydWxlLm5hbWVbMF0gPT09ICdjJykge1xuICAgICAgICAvLyBydWxlIG1hdGNoZXMgYW55IENvbnN0YW50Tm9kZVxuICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIENvbnN0YW50Tm9kZSkge1xuICAgICAgICAgIHJlc1swXS5wbGFjZWhvbGRlcnNbcnVsZS5uYW1lXSA9IG5vZGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gTWlzLW1hdGNoOiBydWxlIHdhcyBleHBlY3RpbmcgYSBDb25zdGFudE5vZGVcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzeW1ib2wgaW4gcnVsZTogJyArIHJ1bGUubmFtZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChydWxlIGluc3RhbmNlb2YgQ29uc3RhbnROb2RlKSB7XG4gICAgICAvLyBMaXRlcmFsIGNvbnN0YW50IG11c3QgbWF0Y2ggZXhhY3RseVxuICAgICAgaWYgKCFlcXVhbChydWxlLnZhbHVlLCBub2RlLnZhbHVlKSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNvbWUgb3RoZXIgbm9kZSB3YXMgZW5jb3VudGVyZWQgd2hpY2ggd2UgYXJlbid0IHByZXBhcmVkIGZvciwgc28gbm8gbWF0Y2hcbiAgICAgIHJldHVybiBbXTtcbiAgICB9IC8vIEl0J3MgYSBtYXRjaCFcbiAgICAvLyBjb25zb2xlLmxvZygnX3J1bGVNYXRjaCgnICsgcnVsZS50b1N0cmluZygpICsgJywgJyArIG5vZGUudG9TdHJpbmcoKSArICcpIGZvdW5kIGEgbWF0Y2gnKVxuXG5cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgcCBhbmQgcSAoYW5kIGFsbCB0aGVpciBjaGlsZHJlbiBub2RlcykgYXJlIGlkZW50aWNhbC5cbiAgICpcbiAgICogQHBhcmFtIHtDb25zdGFudE5vZGUgfCBTeW1ib2xOb2RlIHwgUGFyZW50aGVzaXNOb2RlIHwgRnVuY3Rpb25Ob2RlIHwgT3BlcmF0b3JOb2RlfSBwXG4gICAqIEBwYXJhbSB7Q29uc3RhbnROb2RlIHwgU3ltYm9sTm9kZSB8IFBhcmVudGhlc2lzTm9kZSB8IEZ1bmN0aW9uTm9kZSB8IE9wZXJhdG9yTm9kZX0gcVxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEluZm9ybWF0aW9uIGFib3V0IHRoZSBtYXRjaCwgaWYgaXQgZXhpc3RzLlxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9leGFjdE1hdGNoKHAsIHEpIHtcbiAgICBpZiAocCBpbnN0YW5jZW9mIENvbnN0YW50Tm9kZSAmJiBxIGluc3RhbmNlb2YgQ29uc3RhbnROb2RlKSB7XG4gICAgICBpZiAoIWVxdWFsKHAudmFsdWUsIHEudmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHAgaW5zdGFuY2VvZiBTeW1ib2xOb2RlICYmIHEgaW5zdGFuY2VvZiBTeW1ib2xOb2RlKSB7XG4gICAgICBpZiAocC5uYW1lICE9PSBxLm5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocCBpbnN0YW5jZW9mIE9wZXJhdG9yTm9kZSAmJiBxIGluc3RhbmNlb2YgT3BlcmF0b3JOb2RlIHx8IHAgaW5zdGFuY2VvZiBGdW5jdGlvbk5vZGUgJiYgcSBpbnN0YW5jZW9mIEZ1bmN0aW9uTm9kZSkge1xuICAgICAgaWYgKHAgaW5zdGFuY2VvZiBPcGVyYXRvck5vZGUpIHtcbiAgICAgICAgaWYgKHAub3AgIT09IHEub3AgfHwgcC5mbiAhPT0gcS5mbikge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChwIGluc3RhbmNlb2YgRnVuY3Rpb25Ob2RlKSB7XG4gICAgICAgIGlmIChwLm5hbWUgIT09IHEubmFtZSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocC5hcmdzLmxlbmd0aCAhPT0gcS5hcmdzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcC5hcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghX2V4YWN0TWF0Y2gocC5hcmdzW2ldLCBxLmFyZ3NbaV0pKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBzaW1wbGlmeTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTaW1wbGlmeSA9IGNyZWF0ZVNpbXBsaWZ5OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVSZXNvbHZlID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAncmVzb2x2ZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydwYXJzZScsICdGdW5jdGlvbk5vZGUnLCAnT3BlcmF0b3JOb2RlJywgJ1BhcmVudGhlc2lzTm9kZSddO1xudmFyIGNyZWF0ZVJlc29sdmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgcGFyc2UgPSBfcmVmLnBhcnNlLFxuICAgICAgRnVuY3Rpb25Ob2RlID0gX3JlZi5GdW5jdGlvbk5vZGUsXG4gICAgICBPcGVyYXRvck5vZGUgPSBfcmVmLk9wZXJhdG9yTm9kZSxcbiAgICAgIFBhcmVudGhlc2lzTm9kZSA9IF9yZWYuUGFyZW50aGVzaXNOb2RlO1xuXG4gIC8qKlxuICAgKiByZXNvbHZlKGV4cHIsIHNjb3BlKSByZXBsYWNlcyB2YXJpYWJsZSBub2RlcyB3aXRoIHRoZWlyIHNjb3BlZCB2YWx1ZXNcbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgc2ltcGxpZnkucmVzb2x2ZShleHByLCBzY29wZSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLnNpbXBsaWZ5LnJlc29sdmUoJ3ggKyB5Jywge3g6MSwgeToyfSkgICAgICAgICAgIC8vIE5vZGUgezEgKyAyfVxuICAgKiAgICAgbWF0aC5zaW1wbGlmeS5yZXNvbHZlKG1hdGgucGFyc2UoJ3greScpLCB7eDoxLCB5OjJ9KSAvLyBOb2RlIHsxICsgMn1cbiAgICogICAgIG1hdGguc2ltcGxpZnkoJ3greScsIHt4OjIsIHk6J3greCd9KS50b1N0cmluZygpICAgICAgLy8gXCI2XCJcbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqICAgICBUaGUgZXhwcmVzc2lvbiB0cmVlIHRvIGJlIHNpbXBsaWZpZWRcbiAgICogQHBhcmFtIHtPYmplY3R9IHNjb3BlIHdpdGggdmFyaWFibGVzIHRvIGJlIHJlc29sdmVkXG4gICAqL1xuICBmdW5jdGlvbiByZXNvbHZlKG5vZGUsIHNjb3BlKSB7XG4gICAgaWYgKCFzY29wZSkge1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfaXMuaXNTeW1ib2xOb2RlKShub2RlKSkge1xuICAgICAgdmFyIHZhbHVlID0gc2NvcGVbbm9kZS5uYW1lXTtcblxuICAgICAgaWYgKCgwLCBfaXMuaXNOb2RlKSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUodmFsdWUsIHNjb3BlKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICByZXR1cm4gcGFyc2UoU3RyaW5nKHZhbHVlKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzT3BlcmF0b3JOb2RlKShub2RlKSkge1xuICAgICAgdmFyIGFyZ3MgPSBub2RlLmFyZ3MubWFwKGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUoYXJnLCBzY29wZSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5vZGUub3AsIG5vZGUuZm4sIGFyZ3MsIG5vZGUuaW1wbGljaXQpO1xuICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc1BhcmVudGhlc2lzTm9kZSkobm9kZSkpIHtcbiAgICAgIHJldHVybiBuZXcgUGFyZW50aGVzaXNOb2RlKHJlc29sdmUobm9kZS5jb250ZW50LCBzY29wZSkpO1xuICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc0Z1bmN0aW9uTm9kZSkobm9kZSkpIHtcbiAgICAgIHZhciBfYXJncyA9IG5vZGUuYXJncy5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZShhcmcsIHNjb3BlKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uTm9kZShub2RlLm5hbWUsIF9hcmdzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIHJldHVybiByZXNvbHZlO1xufSk7XG5leHBvcnRzLmNyZWF0ZVJlc29sdmUgPSBjcmVhdGVSZXNvbHZlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTaW1wbGlmeUNvbnN0YW50ID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF91dGlsID0gcmVxdWlyZShcIi4vdXRpbFwiKTtcblxudmFyIF9ub29wID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL25vb3BcIik7XG5cbi8vIFRPRE8gdGhpcyBjb3VsZCBiZSBpbXByb3ZlZCBieSBzaW1wbGlmeWluZyBzZXBlcmF0ZWQgY29uc3RhbnRzIHVuZGVyIGFzc29jaWF0aXZlIGFuZCBjb21tdXRhdGl2ZSBvcGVyYXRvcnNcbnZhciBuYW1lID0gJ3NpbXBsaWZ5Q29uc3RhbnQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ21hdGhXaXRoVHJhbnNmb3JtJywgJz9mcmFjdGlvbicsICc/YmlnbnVtYmVyJywgJ0NvbnN0YW50Tm9kZScsICdPcGVyYXRvck5vZGUnLCAnRnVuY3Rpb25Ob2RlJywgJ1N5bWJvbE5vZGUnXTtcbnZhciBjcmVhdGVTaW1wbGlmeUNvbnN0YW50ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgbWF0aFdpdGhUcmFuc2Zvcm0gPSBfcmVmLm1hdGhXaXRoVHJhbnNmb3JtLFxuICAgICAgZnJhY3Rpb24gPSBfcmVmLmZyYWN0aW9uLFxuICAgICAgYmlnbnVtYmVyID0gX3JlZi5iaWdudW1iZXIsXG4gICAgICBDb25zdGFudE5vZGUgPSBfcmVmLkNvbnN0YW50Tm9kZSxcbiAgICAgIE9wZXJhdG9yTm9kZSA9IF9yZWYuT3BlcmF0b3JOb2RlLFxuICAgICAgRnVuY3Rpb25Ob2RlID0gX3JlZi5GdW5jdGlvbk5vZGUsXG4gICAgICBTeW1ib2xOb2RlID0gX3JlZi5TeW1ib2xOb2RlO1xuXG4gIHZhciBfY3JlYXRlVXRpbCA9ICgwLCBfdXRpbC5jcmVhdGVVdGlsKSh7XG4gICAgRnVuY3Rpb25Ob2RlOiBGdW5jdGlvbk5vZGUsXG4gICAgT3BlcmF0b3JOb2RlOiBPcGVyYXRvck5vZGUsXG4gICAgU3ltYm9sTm9kZTogU3ltYm9sTm9kZVxuICB9KSxcbiAgICAgIGlzQ29tbXV0YXRpdmUgPSBfY3JlYXRlVXRpbC5pc0NvbW11dGF0aXZlLFxuICAgICAgaXNBc3NvY2lhdGl2ZSA9IF9jcmVhdGVVdGlsLmlzQXNzb2NpYXRpdmUsXG4gICAgICBhbGxDaGlsZHJlbiA9IF9jcmVhdGVVdGlsLmFsbENoaWxkcmVuLFxuICAgICAgY3JlYXRlTWFrZU5vZGVGdW5jdGlvbiA9IF9jcmVhdGVVdGlsLmNyZWF0ZU1ha2VOb2RlRnVuY3Rpb247XG5cbiAgZnVuY3Rpb24gc2ltcGxpZnlDb25zdGFudChleHByLCBvcHRpb25zKSB7XG4gICAgdmFyIHJlcyA9IGZvbGRGcmFjdGlvbihleHByLCBvcHRpb25zKTtcbiAgICByZXR1cm4gKDAsIF9pcy5pc05vZGUpKHJlcykgPyByZXMgOiBfdG9Ob2RlKHJlcyk7XG4gIH1cblxuICBmdW5jdGlvbiBfZXZhbChmbm5hbWUsIGFyZ3MsIG9wdGlvbnMpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIF90b051bWJlcihtYXRoV2l0aFRyYW5zZm9ybVtmbm5hbWVdLmFwcGx5KG51bGwsIGFyZ3MpLCBvcHRpb25zKTtcbiAgICB9IGNhdGNoIChpZ25vcmUpIHtcbiAgICAgIC8vIHNvbWV0aW1lcyB0aGUgaW1wbGljaXQgdHlwZSBjb252ZXJzaW9uIGNhdXNlcyB0aGUgZXZhbHVhdGlvbiB0byBmYWlsLCBzbyB3ZSdsbCB0cnkgYWdhaW4gYWZ0ZXIgcmVtb3ZpbmcgRnJhY3Rpb25zXG4gICAgICBhcmdzID0gYXJncy5tYXAoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgaWYgKCgwLCBfaXMuaXNGcmFjdGlvbikoeCkpIHtcbiAgICAgICAgICByZXR1cm4geC52YWx1ZU9mKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4geDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIF90b051bWJlcihtYXRoV2l0aFRyYW5zZm9ybVtmbm5hbWVdLmFwcGx5KG51bGwsIGFyZ3MpLCBvcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICB2YXIgX3RvTm9kZSA9IHR5cGVkKHtcbiAgICBGcmFjdGlvbjogX2ZyYWN0aW9uVG9Ob2RlLFxuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKG4pIHtcbiAgICAgIGlmIChuIDwgMCkge1xuICAgICAgICByZXR1cm4gdW5hcnlNaW51c05vZGUobmV3IENvbnN0YW50Tm9kZSgtbikpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IENvbnN0YW50Tm9kZShuKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKG4pIHtcbiAgICAgIGlmIChuIDwgMCkge1xuICAgICAgICByZXR1cm4gdW5hcnlNaW51c05vZGUobmV3IENvbnN0YW50Tm9kZSgtbikpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IENvbnN0YW50Tm9kZShuKTsgLy8gb2xkIHBhcmFtZXRlcnM6IChuLnRvU3RyaW5nKCksICdudW1iZXInKVxuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleChzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IENvbXBsZXggbnVtYmVyIHRvIE5vZGUnKTtcbiAgICB9XG4gIH0pOyAvLyBjb252ZXJ0IGEgbnVtYmVyIHRvIGEgZnJhY3Rpb24gb25seSBpZiBpdCBjYW4gYmUgZXhwcmVzc2VkIGV4YWN0bHlcblxuXG4gIGZ1bmN0aW9uIF9leGFjdEZyYWN0aW9uKG4sIG9wdGlvbnMpIHtcbiAgICB2YXIgZXhhY3RGcmFjdGlvbnMgPSBvcHRpb25zICYmIG9wdGlvbnMuZXhhY3RGcmFjdGlvbnMgIT09IGZhbHNlO1xuXG4gICAgaWYgKGV4YWN0RnJhY3Rpb25zICYmIGlzRmluaXRlKG4pICYmIGZyYWN0aW9uKSB7XG4gICAgICB2YXIgZiA9IGZyYWN0aW9uKG4pO1xuXG4gICAgICBpZiAoZi52YWx1ZU9mKCkgPT09IG4pIHtcbiAgICAgICAgcmV0dXJuIGY7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG47XG4gIH0gLy8gQ29udmVydCBudW1iZXJzIHRvIGEgcHJlZmVycmVkIG51bWJlciB0eXBlIGluIHByZWZlcmVuY2Ugb3JkZXI6IEZyYWN0aW9uLCBudW1iZXIsIENvbXBsZXhcbiAgLy8gQmlnTnVtYmVycyBhcmUgbGVmdCBhbG9uZVxuXG5cbiAgdmFyIF90b051bWJlciA9IHR5cGVkKHtcbiAgICAnc3RyaW5nLCBPYmplY3QnOiBmdW5jdGlvbiBzdHJpbmdPYmplY3Qocywgb3B0aW9ucykge1xuICAgICAgaWYgKGNvbmZpZy5udW1iZXIgPT09ICdCaWdOdW1iZXInKSB7XG4gICAgICAgIGlmIChiaWdudW1iZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICgwLCBfbm9vcC5ub0JpZ251bWJlcikoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBiaWdudW1iZXIocyk7XG4gICAgICB9IGVsc2UgaWYgKGNvbmZpZy5udW1iZXIgPT09ICdGcmFjdGlvbicpIHtcbiAgICAgICAgaWYgKGZyYWN0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAoMCwgX25vb3Aubm9GcmFjdGlvbikoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmcmFjdGlvbihzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBuID0gcGFyc2VGbG9hdChzKTtcbiAgICAgICAgcmV0dXJuIF9leGFjdEZyYWN0aW9uKG4sIG9wdGlvbnMpO1xuICAgICAgfVxuICAgIH0sXG4gICAgJ0ZyYWN0aW9uLCBPYmplY3QnOiBmdW5jdGlvbiBGcmFjdGlvbk9iamVjdChzLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gcztcbiAgICB9LFxuICAgIC8vIHdlIGRvbid0IG5lZWQgb3B0aW9ucyBoZXJlXG4gICAgJ0JpZ051bWJlciwgT2JqZWN0JzogZnVuY3Rpb24gQmlnTnVtYmVyT2JqZWN0KHMsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBzO1xuICAgIH0sXG4gICAgLy8gd2UgZG9uJ3QgbmVlZCBvcHRpb25zIGhlcmVcbiAgICAnbnVtYmVyLCBPYmplY3QnOiBmdW5jdGlvbiBudW1iZXJPYmplY3Qocywgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIF9leGFjdEZyYWN0aW9uKHMsIG9wdGlvbnMpO1xuICAgIH0sXG4gICAgJ0NvbXBsZXgsIE9iamVjdCc6IGZ1bmN0aW9uIENvbXBsZXhPYmplY3Qocywgb3B0aW9ucykge1xuICAgICAgaWYgKHMuaW0gIT09IDApIHtcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfZXhhY3RGcmFjdGlvbihzLnJlLCBvcHRpb25zKTtcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIHVuYXJ5TWludXNOb2RlKG4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yTm9kZSgnLScsICd1bmFyeU1pbnVzJywgW25dKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9mcmFjdGlvblRvTm9kZShmKSB7XG4gICAgdmFyIG47XG4gICAgdmFyIHZuID0gZi5zICogZi5uO1xuXG4gICAgaWYgKHZuIDwgMCkge1xuICAgICAgbiA9IG5ldyBPcGVyYXRvck5vZGUoJy0nLCAndW5hcnlNaW51cycsIFtuZXcgQ29uc3RhbnROb2RlKC12bildKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbiA9IG5ldyBDb25zdGFudE5vZGUodm4pO1xuICAgIH1cblxuICAgIGlmIChmLmQgPT09IDEpIHtcbiAgICAgIHJldHVybiBuO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKCcvJywgJ2RpdmlkZScsIFtuLCBuZXcgQ29uc3RhbnROb2RlKGYuZCldKTtcbiAgfVxuICAvKlxuICAgKiBDcmVhdGUgYSBiaW5hcnkgdHJlZSBmcm9tIGEgbGlzdCBvZiBGcmFjdGlvbnMgYW5kIE5vZGVzLlxuICAgKiBUcmllcyB0byBmb2xkIEZyYWN0aW9ucyBieSBldmFsdWF0aW5nIHRoZW0gdW50aWwgdGhlIGZpcnN0IE5vZGUgaW4gdGhlIGxpc3QgaXMgaGl0LCBzb1xuICAgKiBgYXJnc2Agc2hvdWxkIGJlIHNvcnRlZCB0byBoYXZlIHRoZSBGcmFjdGlvbnMgYXQgdGhlIHN0YXJ0IChpZiB0aGUgb3BlcmF0b3IgaXMgY29tbXV0YXRpdmUpLlxuICAgKiBAcGFyYW0gYXJncyAtIGxpc3Qgb2YgRnJhY3Rpb25zIGFuZCBOb2Rlc1xuICAgKiBAcGFyYW0gZm4gLSBldmFsdWF0b3IgZm9yIHRoZSBiaW5hcnkgb3BlcmF0aW9uIGV2YWx1YXRvciB0aGF0IGFjY2VwdHMgdHdvIEZyYWN0aW9uc1xuICAgKiBAcGFyYW0gbWFrZU5vZGUgLSBjcmVhdGVzIGEgYmluYXJ5IE9wZXJhdG9yTm9kZS9GdW5jdGlvbk5vZGUgZnJvbSBhIGxpc3Qgb2YgY2hpbGQgTm9kZXNcbiAgICogaWYgYXJncy5sZW5ndGggaXMgMSwgcmV0dXJucyBhcmdzWzBdXG4gICAqIEByZXR1cm4gLSBFaXRoZXIgYSBOb2RlIHJlcHJlc2VudGluZyBhIGJpbmFyeSBleHByZXNzaW9uIG9yIEZyYWN0aW9uXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gZm9sZE9wKGZuLCBhcmdzLCBtYWtlTm9kZSwgb3B0aW9ucykge1xuICAgIHJldHVybiBhcmdzLnJlZHVjZShmdW5jdGlvbiAoYSwgYikge1xuICAgICAgaWYgKCEoMCwgX2lzLmlzTm9kZSkoYSkgJiYgISgwLCBfaXMuaXNOb2RlKShiKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBfZXZhbChmbiwgW2EsIGJdLCBvcHRpb25zKTtcbiAgICAgICAgfSBjYXRjaCAoaWdub3JlYW5kY29udGludWUpIHt9XG5cbiAgICAgICAgYSA9IF90b05vZGUoYSk7XG4gICAgICAgIGIgPSBfdG9Ob2RlKGIpO1xuICAgICAgfSBlbHNlIGlmICghKDAsIF9pcy5pc05vZGUpKGEpKSB7XG4gICAgICAgIGEgPSBfdG9Ob2RlKGEpO1xuICAgICAgfSBlbHNlIGlmICghKDAsIF9pcy5pc05vZGUpKGIpKSB7XG4gICAgICAgIGIgPSBfdG9Ob2RlKGIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbWFrZU5vZGUoW2EsIGJdKTtcbiAgICB9KTtcbiAgfSAvLyBkZXN0cm95cyB0aGUgb3JpZ2luYWwgbm9kZSBhbmQgcmV0dXJucyBhIGZvbGRlZCBvbmVcblxuXG4gIGZ1bmN0aW9uIGZvbGRGcmFjdGlvbihub2RlLCBvcHRpb25zKSB7XG4gICAgc3dpdGNoIChub2RlLnR5cGUpIHtcbiAgICAgIGNhc2UgJ1N5bWJvbE5vZGUnOlxuICAgICAgICByZXR1cm4gbm9kZTtcblxuICAgICAgY2FzZSAnQ29uc3RhbnROb2RlJzpcbiAgICAgICAgaWYgKHR5cGVvZiBub2RlLnZhbHVlID09PSAnbnVtYmVyJyB8fCAhaXNOYU4obm9kZS52YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gX3RvTnVtYmVyKG5vZGUudmFsdWUsIG9wdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vZGU7XG5cbiAgICAgIGNhc2UgJ0Z1bmN0aW9uTm9kZSc6XG4gICAgICAgIGlmIChtYXRoV2l0aFRyYW5zZm9ybVtub2RlLm5hbWVdICYmIG1hdGhXaXRoVHJhbnNmb3JtW25vZGUubmFtZV0ucmF3QXJncykge1xuICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9XG5cbiAgICAgICAge1xuICAgICAgICAgIC8vIFByb2Nlc3Mgb3BlcmF0b3JzIGFzIE9wZXJhdG9yTm9kZVxuICAgICAgICAgIHZhciBvcGVyYXRvckZ1bmN0aW9ucyA9IFsnYWRkJywgJ211bHRpcGx5J107XG5cbiAgICAgICAgICBpZiAob3BlcmF0b3JGdW5jdGlvbnMuaW5kZXhPZihub2RlLm5hbWUpID09PSAtMSkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBub2RlLmFyZ3MubWFwKGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZvbGRGcmFjdGlvbihhcmcsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfSk7IC8vIElmIGFsbCBhcmdzIGFyZSBudW1iZXJzXG5cbiAgICAgICAgICAgIGlmICghYXJncy5zb21lKF9pcy5pc05vZGUpKSB7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9ldmFsKG5vZGUubmFtZSwgYXJncywgb3B0aW9ucyk7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGlnbm9yZWFuZGNvbnRpbmUpIHt9XG4gICAgICAgICAgICB9IC8vIENvbnZlcnQgYWxsIGFyZ3MgdG8gbm9kZXMgYW5kIGNvbnN0cnVjdCBhIHN5bWJvbGljIGZ1bmN0aW9uIGNhbGxcblxuXG4gICAgICAgICAgICBhcmdzID0gYXJncy5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgICAgICAgICAgICByZXR1cm4gKDAsIF9pcy5pc05vZGUpKGFyZykgPyBhcmcgOiBfdG9Ob2RlKGFyZyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRnVuY3Rpb25Ob2RlKG5vZGUubmFtZSwgYXJncyk7XG4gICAgICAgICAgfSBlbHNlIHsvLyB0cmVhdCBhcyBvcGVyYXRvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG5cbiAgICAgIGNhc2UgJ09wZXJhdG9yTm9kZSc6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgZm4gPSBub2RlLmZuLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICB2YXIgX2FyZ3M7XG5cbiAgICAgICAgICB2YXIgcmVzO1xuICAgICAgICAgIHZhciBtYWtlTm9kZSA9IGNyZWF0ZU1ha2VOb2RlRnVuY3Rpb24obm9kZSk7XG5cbiAgICAgICAgICBpZiAoKDAsIF9pcy5pc09wZXJhdG9yTm9kZSkobm9kZSkgJiYgbm9kZS5pc1VuYXJ5KCkpIHtcbiAgICAgICAgICAgIF9hcmdzID0gW2ZvbGRGcmFjdGlvbihub2RlLmFyZ3NbMF0sIG9wdGlvbnMpXTtcblxuICAgICAgICAgICAgaWYgKCEoMCwgX2lzLmlzTm9kZSkoX2FyZ3NbMF0pKSB7XG4gICAgICAgICAgICAgIHJlcyA9IF9ldmFsKGZuLCBfYXJncywgb3B0aW9ucyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXMgPSBtYWtlTm9kZShfYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChpc0Fzc29jaWF0aXZlKG5vZGUpKSB7XG4gICAgICAgICAgICBfYXJncyA9IGFsbENoaWxkcmVuKG5vZGUpO1xuICAgICAgICAgICAgX2FyZ3MgPSBfYXJncy5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgICAgICAgICAgICByZXR1cm4gZm9sZEZyYWN0aW9uKGFyZywgb3B0aW9ucyk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGlzQ29tbXV0YXRpdmUoZm4pKSB7XG4gICAgICAgICAgICAgIC8vIGNvbW11dGF0aXZlIGJpbmFyeSBvcGVyYXRvclxuICAgICAgICAgICAgICB2YXIgY29uc3RzID0gW107XG4gICAgICAgICAgICAgIHZhciB2YXJzID0gW107XG5cbiAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICghKDAsIF9pcy5pc05vZGUpKF9hcmdzW2ldKSkge1xuICAgICAgICAgICAgICAgICAgY29uc3RzLnB1c2goX2FyZ3NbaV0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB2YXJzLnB1c2goX2FyZ3NbaV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChjb25zdHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIHJlcyA9IGZvbGRPcChmbiwgY29uc3RzLCBtYWtlTm9kZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgdmFycy51bnNoaWZ0KHJlcyk7XG4gICAgICAgICAgICAgICAgcmVzID0gZm9sZE9wKGZuLCB2YXJzLCBtYWtlTm9kZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gd2Ugd29uJ3QgY2hhbmdlIHRoZSBjaGlsZHJlbiBvcmRlciBzaW5jZSBpdCdzIG5vdCBuZWNjZXNzYXJ5XG4gICAgICAgICAgICAgICAgcmVzID0gZm9sZE9wKGZuLCBfYXJncywgbWFrZU5vZGUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBub24tY29tbXV0YXRpdmUgYmluYXJ5IG9wZXJhdG9yXG4gICAgICAgICAgICAgIHJlcyA9IGZvbGRPcChmbiwgX2FyZ3MsIG1ha2VOb2RlLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gbm9uLWFzc29jaWF0aXZlIGJpbmFyeSBvcGVyYXRvclxuICAgICAgICAgICAgX2FyZ3MgPSBub2RlLmFyZ3MubWFwKGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZvbGRGcmFjdGlvbihhcmcsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXMgPSBmb2xkT3AoZm4sIF9hcmdzLCBtYWtlTm9kZSwgb3B0aW9ucyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlICdQYXJlbnRoZXNpc05vZGUnOlxuICAgICAgICAvLyByZW1vdmUgdGhlIHVuZWNjZXNzYXJ5IHBhcmVudGhlc2lzXG4gICAgICAgIHJldHVybiBmb2xkRnJhY3Rpb24obm9kZS5jb250ZW50LCBvcHRpb25zKTtcblxuICAgICAgY2FzZSAnQWNjZXNzb3JOb2RlJzpcbiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cblxuICAgICAgY2FzZSAnQXJyYXlOb2RlJzpcbiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cblxuICAgICAgY2FzZSAnQXNzaWdubWVudE5vZGUnOlxuICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuXG4gICAgICBjYXNlICdCbG9ja05vZGUnOlxuICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuXG4gICAgICBjYXNlICdGdW5jdGlvbkFzc2lnbm1lbnROb2RlJzpcbiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cblxuICAgICAgY2FzZSAnSW5kZXhOb2RlJzpcbiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cblxuICAgICAgY2FzZSAnT2JqZWN0Tm9kZSc6XG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG5cbiAgICAgIGNhc2UgJ1JhbmdlTm9kZSc6XG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG5cbiAgICAgIGNhc2UgJ0NvbmRpdGlvbmFsTm9kZSc6XG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuaW1wbGVtZW50ZWQgbm9kZSB0eXBlIGluIHNpbXBsaWZ5Q29uc3RhbnQ6IFwiLmNvbmNhdChub2RlLnR5cGUpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc2ltcGxpZnlDb25zdGFudDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTaW1wbGlmeUNvbnN0YW50ID0gY3JlYXRlU2ltcGxpZnlDb25zdGFudDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU2ltcGxpZnlDb3JlID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnc2ltcGxpZnlDb3JlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ2VxdWFsJywgJ2lzWmVybycsICdhZGQnLCAnc3VidHJhY3QnLCAnbXVsdGlwbHknLCAnZGl2aWRlJywgJ3BvdycsICdDb25zdGFudE5vZGUnLCAnT3BlcmF0b3JOb2RlJywgJ0Z1bmN0aW9uTm9kZScsICdQYXJlbnRoZXNpc05vZGUnXTtcbnZhciBjcmVhdGVTaW1wbGlmeUNvcmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgZXF1YWwgPSBfcmVmLmVxdWFsLFxuICAgICAgaXNaZXJvID0gX3JlZi5pc1plcm8sXG4gICAgICBhZGQgPSBfcmVmLmFkZCxcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCxcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSxcbiAgICAgIGRpdmlkZSA9IF9yZWYuZGl2aWRlLFxuICAgICAgcG93ID0gX3JlZi5wb3csXG4gICAgICBDb25zdGFudE5vZGUgPSBfcmVmLkNvbnN0YW50Tm9kZSxcbiAgICAgIE9wZXJhdG9yTm9kZSA9IF9yZWYuT3BlcmF0b3JOb2RlLFxuICAgICAgRnVuY3Rpb25Ob2RlID0gX3JlZi5GdW5jdGlvbk5vZGUsXG4gICAgICBQYXJlbnRoZXNpc05vZGUgPSBfcmVmLlBhcmVudGhlc2lzTm9kZTtcbiAgdmFyIG5vZGUwID0gbmV3IENvbnN0YW50Tm9kZSgwKTtcbiAgdmFyIG5vZGUxID0gbmV3IENvbnN0YW50Tm9kZSgxKTtcbiAgLyoqXG4gICAqIHNpbXBsaWZ5Q29yZSgpIHBlcmZvcm1zIHNpbmdsZSBwYXNzIHNpbXBsaWZpY2F0aW9uIHN1aXRhYmxlIGZvclxuICAgKiBhcHBsaWNhdGlvbnMgcmVxdWlyaW5nIHVsdGltYXRlIHBlcmZvcm1hbmNlLiBJbiBjb250cmFzdCwgc2ltcGxpZnkoKVxuICAgKiBleHRlbmRzIHNpbXBsaWZ5Q29yZSgpIHdpdGggYWRkaXRpb25hbCBwYXNzZXMgdG8gcHJvdmlkZSBkZWVwZXJcbiAgICogc2ltcGxpZmljYXRpb24uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIHNpbXBsaWZ5LnNpbXBsaWZ5Q29yZShleHByKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIGNvbnN0IGYgPSBtYXRoLnBhcnNlKCcyICogMSAqIHggXiAoMiAtIDEpJylcbiAgICogICAgIG1hdGguc2ltcGxpZnkuc2ltcGlmeUNvcmUoZikgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vZGUgezIgKiB4fVxuICAgKiAgICAgbWF0aC5zaW1wbGlmeSgnMiAqIDEgKiB4IF4gKDIgLSAxKScsIFttYXRoLnNpbXBsaWZ5LnNpbXBpZnlDb3JlXSkgLy8gTm9kZSB7MiAqIHh9XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgZGVyaXZhdGl2ZVxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogICAgIFRoZSBleHByZXNzaW9uIHRvIGJlIHNpbXBsaWZpZWRcbiAgICovXG5cbiAgZnVuY3Rpb24gc2ltcGxpZnlDb3JlKG5vZGUpIHtcbiAgICBpZiAoKDAsIF9pcy5pc09wZXJhdG9yTm9kZSkobm9kZSkgJiYgbm9kZS5pc1VuYXJ5KCkpIHtcbiAgICAgIHZhciBhMCA9IHNpbXBsaWZ5Q29yZShub2RlLmFyZ3NbMF0pO1xuXG4gICAgICBpZiAobm9kZS5vcCA9PT0gJysnKSB7XG4gICAgICAgIC8vIHVuYXJ5IHBsdXNcbiAgICAgICAgcmV0dXJuIGEwO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZS5vcCA9PT0gJy0nKSB7XG4gICAgICAgIC8vIHVuYXJ5IG1pbnVzXG4gICAgICAgIGlmICgoMCwgX2lzLmlzT3BlcmF0b3JOb2RlKShhMCkpIHtcbiAgICAgICAgICBpZiAoYTAuaXNVbmFyeSgpICYmIGEwLm9wID09PSAnLScpIHtcbiAgICAgICAgICAgIHJldHVybiBhMC5hcmdzWzBdO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYTAuaXNCaW5hcnkoKSAmJiBhMC5mbiA9PT0gJ3N1YnRyYWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUoJy0nLCAnc3VidHJhY3QnLCBbYTAuYXJnc1sxXSwgYTAuYXJnc1swXV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5vZGUub3AsIG5vZGUuZm4sIFthMF0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc09wZXJhdG9yTm9kZSkobm9kZSkgJiYgbm9kZS5pc0JpbmFyeSgpKSB7XG4gICAgICB2YXIgX2EgPSBzaW1wbGlmeUNvcmUobm9kZS5hcmdzWzBdKTtcblxuICAgICAgdmFyIGExID0gc2ltcGxpZnlDb3JlKG5vZGUuYXJnc1sxXSk7XG5cbiAgICAgIGlmIChub2RlLm9wID09PSAnKycpIHtcbiAgICAgICAgaWYgKCgwLCBfaXMuaXNDb25zdGFudE5vZGUpKF9hKSkge1xuICAgICAgICAgIGlmIChpc1plcm8oX2EudmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gYTE7XG4gICAgICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQ29uc3RhbnROb2RlKShhMSkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ29uc3RhbnROb2RlKGFkZChfYS52YWx1ZSwgYTEudmFsdWUpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkoYTEpICYmIGlzWmVybyhhMS52YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gX2E7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKDAsIF9pcy5pc09wZXJhdG9yTm9kZSkoYTEpICYmIGExLmlzVW5hcnkoKSAmJiBhMS5vcCA9PT0gJy0nKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUoJy0nLCAnc3VidHJhY3QnLCBbX2EsIGExLmFyZ3NbMF1dKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5vZGUub3AsIG5vZGUuZm4sIGExID8gW19hLCBhMV0gOiBbX2FdKTtcbiAgICAgIH0gZWxzZSBpZiAobm9kZS5vcCA9PT0gJy0nKSB7XG4gICAgICAgIGlmICgoMCwgX2lzLmlzQ29uc3RhbnROb2RlKShfYSkgJiYgYTEpIHtcbiAgICAgICAgICBpZiAoKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkoYTEpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbnN0YW50Tm9kZShzdWJ0cmFjdChfYS52YWx1ZSwgYTEudmFsdWUpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzWmVybyhfYS52YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKCctJywgJ3VuYXJ5TWludXMnLCBbYTFdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gaWYgKG5vZGUuZm4gPT09IFwic3VidHJhY3RcIiAmJiBub2RlLmFyZ3MubGVuZ3RoID09PSAyKSB7XG5cblxuICAgICAgICBpZiAobm9kZS5mbiA9PT0gJ3N1YnRyYWN0Jykge1xuICAgICAgICAgIGlmICgoMCwgX2lzLmlzQ29uc3RhbnROb2RlKShhMSkgJiYgaXNaZXJvKGExLnZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIF9hO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICgoMCwgX2lzLmlzT3BlcmF0b3JOb2RlKShhMSkgJiYgYTEuaXNVbmFyeSgpICYmIGExLm9wID09PSAnLScpIHtcbiAgICAgICAgICAgIHJldHVybiBzaW1wbGlmeUNvcmUobmV3IE9wZXJhdG9yTm9kZSgnKycsICdhZGQnLCBbX2EsIGExLmFyZ3NbMF1dKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUobm9kZS5vcCwgbm9kZS5mbiwgW19hLCBhMV0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG5vZGUub3AgPT09ICcqJykge1xuICAgICAgICBpZiAoKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkoX2EpKSB7XG4gICAgICAgICAgaWYgKGlzWmVybyhfYS52YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBub2RlMDtcbiAgICAgICAgICB9IGVsc2UgaWYgKGVxdWFsKF9hLnZhbHVlLCAxKSkge1xuICAgICAgICAgICAgcmV0dXJuIGExO1xuICAgICAgICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkoYTEpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbnN0YW50Tm9kZShtdWx0aXBseShfYS52YWx1ZSwgYTEudmFsdWUpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkoYTEpKSB7XG4gICAgICAgICAgaWYgKGlzWmVybyhhMS52YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBub2RlMDtcbiAgICAgICAgICB9IGVsc2UgaWYgKGVxdWFsKGExLnZhbHVlLCAxKSkge1xuICAgICAgICAgICAgcmV0dXJuIF9hO1xuICAgICAgICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc09wZXJhdG9yTm9kZSkoX2EpICYmIF9hLmlzQmluYXJ5KCkgJiYgX2Eub3AgPT09IG5vZGUub3ApIHtcbiAgICAgICAgICAgIHZhciBhMDAgPSBfYS5hcmdzWzBdO1xuXG4gICAgICAgICAgICBpZiAoKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkoYTAwKSkge1xuICAgICAgICAgICAgICB2YXIgYTAwYTEgPSBuZXcgQ29uc3RhbnROb2RlKG11bHRpcGx5KGEwMC52YWx1ZSwgYTEudmFsdWUpKTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUobm9kZS5vcCwgbm9kZS5mbiwgW2EwMGExLCBfYS5hcmdzWzFdXSwgbm9kZS5pbXBsaWNpdCk7IC8vIGNvbnN0YW50cyBvbiBsZWZ0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUobm9kZS5vcCwgbm9kZS5mbiwgW2ExLCBfYV0sIG5vZGUuaW1wbGljaXQpOyAvLyBjb25zdGFudHMgb24gbGVmdFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUobm9kZS5vcCwgbm9kZS5mbiwgW19hLCBhMV0sIG5vZGUuaW1wbGljaXQpO1xuICAgICAgfSBlbHNlIGlmIChub2RlLm9wID09PSAnLycpIHtcbiAgICAgICAgaWYgKCgwLCBfaXMuaXNDb25zdGFudE5vZGUpKF9hKSkge1xuICAgICAgICAgIGlmIChpc1plcm8oX2EudmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZTA7XG4gICAgICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQ29uc3RhbnROb2RlKShhMSkgJiYgKGVxdWFsKGExLnZhbHVlLCAxKSB8fCBlcXVhbChhMS52YWx1ZSwgMikgfHwgZXF1YWwoYTEudmFsdWUsIDQpKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb25zdGFudE5vZGUoZGl2aWRlKF9hLnZhbHVlLCBhMS52YWx1ZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5vZGUub3AsIG5vZGUuZm4sIFtfYSwgYTFdKTtcbiAgICAgIH0gZWxzZSBpZiAobm9kZS5vcCA9PT0gJ14nKSB7XG4gICAgICAgIGlmICgoMCwgX2lzLmlzQ29uc3RhbnROb2RlKShhMSkpIHtcbiAgICAgICAgICBpZiAoaXNaZXJvKGExLnZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5vZGUxO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZXF1YWwoYTEudmFsdWUsIDEpKSB7XG4gICAgICAgICAgICByZXR1cm4gX2E7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICgoMCwgX2lzLmlzQ29uc3RhbnROb2RlKShfYSkpIHtcbiAgICAgICAgICAgICAgLy8gZm9sZCBjb25zdGFudFxuICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbnN0YW50Tm9kZShwb3coX2EudmFsdWUsIGExLnZhbHVlKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNPcGVyYXRvck5vZGUpKF9hKSAmJiBfYS5pc0JpbmFyeSgpICYmIF9hLm9wID09PSAnXicpIHtcbiAgICAgICAgICAgICAgdmFyIGEwMSA9IF9hLmFyZ3NbMV07XG5cbiAgICAgICAgICAgICAgaWYgKCgwLCBfaXMuaXNDb25zdGFudE5vZGUpKGEwMSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE9wZXJhdG9yTm9kZShub2RlLm9wLCBub2RlLmZuLCBbX2EuYXJnc1swXSwgbmV3IENvbnN0YW50Tm9kZShtdWx0aXBseShhMDEudmFsdWUsIGExLnZhbHVlKSldKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5vZGUub3AsIG5vZGUuZm4sIFtfYSwgYTFdKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNQYXJlbnRoZXNpc05vZGUpKG5vZGUpKSB7XG4gICAgICB2YXIgYyA9IHNpbXBsaWZ5Q29yZShub2RlLmNvbnRlbnQpO1xuXG4gICAgICBpZiAoKDAsIF9pcy5pc1BhcmVudGhlc2lzTm9kZSkoYykgfHwgKDAsIF9pcy5pc1N5bWJvbE5vZGUpKGMpIHx8ICgwLCBfaXMuaXNDb25zdGFudE5vZGUpKGMpKSB7XG4gICAgICAgIHJldHVybiBjO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IFBhcmVudGhlc2lzTm9kZShjKTtcbiAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNGdW5jdGlvbk5vZGUpKG5vZGUpKSB7XG4gICAgICB2YXIgYXJncyA9IG5vZGUuYXJncy5tYXAoc2ltcGxpZnlDb3JlKS5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgICAgICByZXR1cm4gKDAsIF9pcy5pc1BhcmVudGhlc2lzTm9kZSkoYXJnKSA/IGFyZy5jb250ZW50IDogYXJnO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uTm9kZShzaW1wbGlmeUNvcmUobm9kZS5mbiksIGFyZ3MpO1xuICAgIH0gZWxzZSB7Ly8gY2Fubm90IHNpbXBsaWZ5XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICByZXR1cm4gc2ltcGxpZnlDb3JlO1xufSk7XG5leHBvcnRzLmNyZWF0ZVNpbXBsaWZ5Q29yZSA9IGNyZWF0ZVNpbXBsaWZ5Q29yZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlVXRpbCA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIG5hbWUgPSAnc2ltcGxpZnlVdGlsJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ0Z1bmN0aW9uTm9kZScsICdPcGVyYXRvck5vZGUnLCAnU3ltYm9sTm9kZSddO1xudmFyIGNyZWF0ZVV0aWwgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgRnVuY3Rpb25Ob2RlID0gX3JlZi5GdW5jdGlvbk5vZGUsXG4gICAgICBPcGVyYXRvck5vZGUgPSBfcmVmLk9wZXJhdG9yTm9kZSxcbiAgICAgIFN5bWJvbE5vZGUgPSBfcmVmLlN5bWJvbE5vZGU7XG4gIC8vIFRPRE8gY29tbXV0YXRpdmUvYXNzb2NpYXRpdmUgcHJvcGVydGllcyByZWx5IG9uIHRoZSBhcmd1bWVudHNcbiAgLy8gZS5nLiBtdWx0aXBseSBpcyBub3QgY29tbXV0YXRpdmUgZm9yIG1hdHJpY2VzXG4gIC8vIFRoZSBwcm9wZXJ0aWVzIHNob3VsZCBiZSBjYWxjdWxhdGVkIGZyb20gYW4gYXJndW1lbnQgdG8gc2ltcGxpZnksIG9yIHBvc3NpYmx5IHNvbWV0aGluZyBpbiBtYXRoLmNvbmZpZ1xuICAvLyB0aGUgb3RoZXIgb3B0aW9uIGlzIGZvciB0eXBlZCgpIHRvIHNwZWNpZnkgYSByZXR1cm4gdHlwZSBzbyB0aGF0IHdlIGNhbiBldmFsdWF0ZSB0aGUgdHlwZSBvZiBhcmd1bWVudHNcbiAgdmFyIGNvbW11dGF0aXZlID0ge1xuICAgIGFkZDogdHJ1ZSxcbiAgICBtdWx0aXBseTogdHJ1ZVxuICB9O1xuICB2YXIgYXNzb2NpYXRpdmUgPSB7XG4gICAgYWRkOiB0cnVlLFxuICAgIG11bHRpcGx5OiB0cnVlXG4gIH07XG5cbiAgZnVuY3Rpb24gaXNDb21tdXRhdGl2ZShub2RlLCBjb250ZXh0KSB7XG4gICAgaWYgKCEoMCwgX2lzLmlzT3BlcmF0b3JOb2RlKShub2RlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmFyIG5hbWUgPSBub2RlLmZuLnRvU3RyaW5nKCk7XG5cbiAgICBpZiAoY29udGV4dCAmJiAoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoY29udGV4dCwgbmFtZSkgJiYgKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKGNvbnRleHRbbmFtZV0sICdjb21tdXRhdGl2ZScpKSB7XG4gICAgICByZXR1cm4gY29udGV4dFtuYW1lXS5jb21tdXRhdGl2ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29tbXV0YXRpdmVbbmFtZV0gfHwgZmFsc2U7XG4gIH1cblxuICBmdW5jdGlvbiBpc0Fzc29jaWF0aXZlKG5vZGUsIGNvbnRleHQpIHtcbiAgICBpZiAoISgwLCBfaXMuaXNPcGVyYXRvck5vZGUpKG5vZGUpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIG5hbWUgPSBub2RlLmZuLnRvU3RyaW5nKCk7XG5cbiAgICBpZiAoY29udGV4dCAmJiAoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoY29udGV4dCwgbmFtZSkgJiYgKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKGNvbnRleHRbbmFtZV0sICdhc3NvY2lhdGl2ZScpKSB7XG4gICAgICByZXR1cm4gY29udGV4dFtuYW1lXS5hc3NvY2lhdGl2ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXNzb2NpYXRpdmVbbmFtZV0gfHwgZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIEZsYXR0ZW4gYWxsIGFzc29jaWF0aXZlIG9wZXJhdG9ycyBpbiBhbiBleHByZXNzaW9uIHRyZWUuXG4gICAqIEFzc3VtZXMgcGFyZW50aGVzZXMgaGF2ZSBhbHJlYWR5IGJlZW4gcmVtb3ZlZC5cbiAgICovXG5cblxuICBmdW5jdGlvbiBmbGF0dGVuKG5vZGUpIHtcbiAgICBpZiAoIW5vZGUuYXJncyB8fCBub2RlLmFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICBub2RlLmFyZ3MgPSBhbGxDaGlsZHJlbihub2RlKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5hcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBmbGF0dGVuKG5vZGUuYXJnc1tpXSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIGNoaWxkcmVuIG9mIGEgbm9kZSBhcyBpZiBpdCBoYXMgYmVlbiBmbGF0dGVuZWQuXG4gICAqIFRPRE8gaW1wbGVtZW50IGZvciBGdW5jdGlvbk5vZGVzXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gYWxsQ2hpbGRyZW4obm9kZSkge1xuICAgIHZhciBvcDtcbiAgICB2YXIgY2hpbGRyZW4gPSBbXTtcblxuICAgIHZhciBmaW5kQ2hpbGRyZW4gPSBmdW5jdGlvbiBmaW5kQ2hpbGRyZW4obm9kZSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNoaWxkID0gbm9kZS5hcmdzW2ldO1xuXG4gICAgICAgIGlmICgoMCwgX2lzLmlzT3BlcmF0b3JOb2RlKShjaGlsZCkgJiYgb3AgPT09IGNoaWxkLm9wKSB7XG4gICAgICAgICAgZmluZENoaWxkcmVuKGNoaWxkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoaXNBc3NvY2lhdGl2ZShub2RlKSkge1xuICAgICAgb3AgPSBub2RlLm9wO1xuICAgICAgZmluZENoaWxkcmVuKG5vZGUpO1xuICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbm9kZS5hcmdzO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogIFVuZmxhdHRlbiBhbGwgZmxhdHRlbmVkIG9wZXJhdG9ycyB0byBhIHJpZ2h0LWhlYXZ5IGJpbmFyeSB0cmVlLlxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHVuZmxhdHRlbnIobm9kZSkge1xuICAgIGlmICghbm9kZS5hcmdzIHx8IG5vZGUuYXJncy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbWFrZU5vZGUgPSBjcmVhdGVNYWtlTm9kZUZ1bmN0aW9uKG5vZGUpO1xuICAgIHZhciBsID0gbm9kZS5hcmdzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICB1bmZsYXR0ZW5yKG5vZGUuYXJnc1tpXSk7XG4gICAgfVxuXG4gICAgaWYgKGwgPiAyICYmIGlzQXNzb2NpYXRpdmUobm9kZSkpIHtcbiAgICAgIHZhciBjdXJub2RlID0gbm9kZS5hcmdzLnBvcCgpO1xuXG4gICAgICB3aGlsZSAobm9kZS5hcmdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY3Vybm9kZSA9IG1ha2VOb2RlKFtub2RlLmFyZ3MucG9wKCksIGN1cm5vZGVdKTtcbiAgICAgIH1cblxuICAgICAgbm9kZS5hcmdzID0gY3Vybm9kZS5hcmdzO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogIFVuZmxhdHRlbiBhbGwgZmxhdHRlbmVkIG9wZXJhdG9ycyB0byBhIGxlZnQtaGVhdnkgYmluYXJ5IHRyZWUuXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gdW5mbGF0dGVubChub2RlKSB7XG4gICAgaWYgKCFub2RlLmFyZ3MgfHwgbm9kZS5hcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBtYWtlTm9kZSA9IGNyZWF0ZU1ha2VOb2RlRnVuY3Rpb24obm9kZSk7XG4gICAgdmFyIGwgPSBub2RlLmFyZ3MubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgIHVuZmxhdHRlbmwobm9kZS5hcmdzW2ldKTtcbiAgICB9XG5cbiAgICBpZiAobCA+IDIgJiYgaXNBc3NvY2lhdGl2ZShub2RlKSkge1xuICAgICAgdmFyIGN1cm5vZGUgPSBub2RlLmFyZ3Muc2hpZnQoKTtcblxuICAgICAgd2hpbGUgKG5vZGUuYXJncy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGN1cm5vZGUgPSBtYWtlTm9kZShbY3Vybm9kZSwgbm9kZS5hcmdzLnNoaWZ0KCldKTtcbiAgICAgIH1cblxuICAgICAgbm9kZS5hcmdzID0gY3Vybm9kZS5hcmdzO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU1ha2VOb2RlRnVuY3Rpb24obm9kZSkge1xuICAgIGlmICgoMCwgX2lzLmlzT3BlcmF0b3JOb2RlKShub2RlKSkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUobm9kZS5vcCwgbm9kZS5mbiwgYXJncywgbm9kZS5pbXBsaWNpdCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoYXJncykge1xuICAgICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uTm9kZShuZXcgU3ltYm9sTm9kZShub2RlLm5hbWUpLCBhcmdzKTtcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBjcmVhdGVNYWtlTm9kZUZ1bmN0aW9uOiBjcmVhdGVNYWtlTm9kZUZ1bmN0aW9uLFxuICAgIGlzQ29tbXV0YXRpdmU6IGlzQ29tbXV0YXRpdmUsXG4gICAgaXNBc3NvY2lhdGl2ZTogaXNBc3NvY2lhdGl2ZSxcbiAgICBmbGF0dGVuOiBmbGF0dGVuLFxuICAgIGFsbENoaWxkcmVuOiBhbGxDaGlsZHJlbixcbiAgICB1bmZsYXR0ZW5yOiB1bmZsYXR0ZW5yLFxuICAgIHVuZmxhdHRlbmw6IHVuZmxhdHRlbmxcbiAgfTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVVdGlsID0gY3JlYXRlVXRpbDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTHNvbHZlID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9zb2x2ZVZhbGlkYXRpb24gPSByZXF1aXJlKFwiLi91dGlscy9zb2x2ZVZhbGlkYXRpb25cIik7XG5cbnZhciBuYW1lID0gJ2xzb2x2ZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnZGl2aWRlU2NhbGFyJywgJ211bHRpcGx5U2NhbGFyJywgJ3N1YnRyYWN0JywgJ2VxdWFsU2NhbGFyJywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlTHNvbHZlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgZGl2aWRlU2NhbGFyID0gX3JlZi5kaXZpZGVTY2FsYXIsXG4gICAgICBtdWx0aXBseVNjYWxhciA9IF9yZWYubXVsdGlwbHlTY2FsYXIsXG4gICAgICBzdWJ0cmFjdCA9IF9yZWYuc3VidHJhY3QsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsXG4gICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXg7XG4gIHZhciBzb2x2ZVZhbGlkYXRpb24gPSAoMCwgX3NvbHZlVmFsaWRhdGlvbi5jcmVhdGVTb2x2ZVZhbGlkYXRpb24pKHtcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIC8qKlxuICAgKiBTb2x2ZXMgdGhlIGxpbmVhciBlcXVhdGlvbiBzeXN0ZW0gYnkgZm9yd2FyZHMgc3Vic3RpdHV0aW9uLiBNYXRyaXggbXVzdCBiZSBhIGxvd2VyIHRyaWFuZ3VsYXIgbWF0cml4LlxuICAgKlxuICAgKiBgTCAqIHggPSBiYFxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgubHNvbHZlKEwsIGIpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBjb25zdCBhID0gW1stMiwgM10sIFsyLCAxXV1cbiAgICogICAgY29uc3QgYiA9IFsxMSwgOV1cbiAgICogICAgY29uc3QgeCA9IGxzb2x2ZShhLCBiKSAgLy8gW1stNS41XSwgWzIwXV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGx1cCwgc2x1LCB1c29sdmUsIGx1c29sdmVcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXgsIEFycmF5fSBMICAgICAgIEEgTiB4IE4gbWF0cml4IG9yIGFycmF5IChMKVxuICAgKiBAcGFyYW0ge01hdHJpeCwgQXJyYXl9IGIgICAgICAgQSBjb2x1bW4gdmVjdG9yIHdpdGggdGhlIGIgdmFsdWVzXG4gICAqXG4gICAqIEByZXR1cm4ge0RlbnNlTWF0cml4IHwgQXJyYXl9ICBBIGNvbHVtbiB2ZWN0b3Igd2l0aCB0aGUgbGluZWFyIHN5c3RlbSBzb2x1dGlvbiAoeClcbiAgICovXG5cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnU3BhcnNlTWF0cml4LCBBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFycmF5TWF0cml4KG0sIGIpIHtcbiAgICAgIC8vIHByb2Nlc3MgbWF0cml4XG4gICAgICByZXR1cm4gX3NwYXJzZUZvcndhcmRTdWJzdGl0dXRpb24obSwgYik7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBcnJheU1hdHJpeChtLCBiKSB7XG4gICAgICAvLyBwcm9jZXNzIG1hdHJpeFxuICAgICAgcmV0dXJuIF9kZW5zZUZvcndhcmRTdWJzdGl0dXRpb24obSwgYik7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlBcnJheU1hdHJpeChhLCBiKSB7XG4gICAgICAvLyBjcmVhdGUgZGVuc2UgbWF0cml4IGZyb20gYXJyYXlcbiAgICAgIHZhciBtID0gbWF0cml4KGEpOyAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG5cbiAgICAgIHZhciByID0gX2RlbnNlRm9yd2FyZFN1YnN0aXR1dGlvbihtLCBiKTsgLy8gcmVzdWx0XG5cblxuICAgICAgcmV0dXJuIHIudmFsdWVPZigpO1xuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gX2RlbnNlRm9yd2FyZFN1YnN0aXR1dGlvbihtLCBiKSB7XG4gICAgLy8gdmFsaWRhdGUgbWF0cml4IGFuZCB2ZWN0b3IsIHJldHVybiBjb3B5IG9mIGNvbHVtbiB2ZWN0b3IgYlxuICAgIGIgPSBzb2x2ZVZhbGlkYXRpb24obSwgYiwgdHJ1ZSk7IC8vIGNvbHVtbiB2ZWN0b3IgZGF0YVxuXG4gICAgdmFyIGJkYXRhID0gYi5fZGF0YTsgLy8gcm93cyAmIGNvbHVtbnNcblxuICAgIHZhciByb3dzID0gbS5fc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IG0uX3NpemVbMV07IC8vIHJlc3VsdFxuXG4gICAgdmFyIHggPSBbXTsgLy8gZGF0YVxuXG4gICAgdmFyIGRhdGEgPSBtLl9kYXRhOyAvLyBmb3J3YXJkIHNvbHZlIG0gKiB4ID0gYiwgbG9vcCBjb2x1bW5zXG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgLy8gYltqXVxuICAgICAgdmFyIGJqID0gYmRhdGFbal1bMF0gfHwgMDsgLy8geFtqXVxuXG4gICAgICB2YXIgeGogPSB2b2lkIDA7IC8vIGZvcndhcmQgc3Vic3RpdHV0aW9uIChvdXRlciBwcm9kdWN0KSBhdm9pZHMgaW5uZXIgbG9vcGluZyB3aGVuIGJqID09PSAwXG5cbiAgICAgIGlmICghZXF1YWxTY2FsYXIoYmosIDApKSB7XG4gICAgICAgIC8vIHZhbHVlIEAgW2osIGpdXG4gICAgICAgIHZhciB2amogPSBkYXRhW2pdW2pdOyAvLyBjaGVjayB2ampcblxuICAgICAgICBpZiAoZXF1YWxTY2FsYXIodmpqLCAwKSkge1xuICAgICAgICAgIC8vIHN5c3RlbSBjYW5ub3QgYmUgc29sdmVkXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdMaW5lYXIgc3lzdGVtIGNhbm5vdCBiZSBzb2x2ZWQgc2luY2UgbWF0cml4IGlzIHNpbmd1bGFyJyk7XG4gICAgICAgIH0gLy8gY2FsY3VsYXRlIHhqXG5cblxuICAgICAgICB4aiA9IGRpdmlkZVNjYWxhcihiaiwgdmpqKTsgLy8gbG9vcCByb3dzXG5cbiAgICAgICAgZm9yICh2YXIgaSA9IGogKyAxOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgLy8gdXBkYXRlIGNvcHkgb2YgYlxuICAgICAgICAgIGJkYXRhW2ldID0gW3N1YnRyYWN0KGJkYXRhW2ldWzBdIHx8IDAsIG11bHRpcGx5U2NhbGFyKHhqLCBkYXRhW2ldW2pdKSldO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB6ZXJvIEAgalxuICAgICAgICB4aiA9IDA7XG4gICAgICB9IC8vIHVwZGF0ZSB4XG5cblxuICAgICAgeFtqXSA9IFt4al07XG4gICAgfSAvLyByZXR1cm4gdmVjdG9yXG5cblxuICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoe1xuICAgICAgZGF0YTogeCxcbiAgICAgIHNpemU6IFtyb3dzLCAxXVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gX3NwYXJzZUZvcndhcmRTdWJzdGl0dXRpb24obSwgYikge1xuICAgIC8vIHZhbGlkYXRlIG1hdHJpeCBhbmQgdmVjdG9yLCByZXR1cm4gY29weSBvZiBjb2x1bW4gdmVjdG9yIGJcbiAgICBiID0gc29sdmVWYWxpZGF0aW9uKG0sIGIsIHRydWUpOyAvLyBjb2x1bW4gdmVjdG9yIGRhdGFcblxuICAgIHZhciBiZGF0YSA9IGIuX2RhdGE7IC8vIHJvd3MgJiBjb2x1bW5zXG5cbiAgICB2YXIgcm93cyA9IG0uX3NpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSBtLl9zaXplWzFdOyAvLyBtYXRyaXggYXJyYXlzXG5cbiAgICB2YXIgdmFsdWVzID0gbS5fdmFsdWVzO1xuICAgIHZhciBpbmRleCA9IG0uX2luZGV4O1xuICAgIHZhciBwdHIgPSBtLl9wdHI7IC8vIHZhcnNcblxuICAgIHZhciBpLCBrOyAvLyByZXN1bHRcblxuICAgIHZhciB4ID0gW107IC8vIGZvcndhcmQgc29sdmUgbSAqIHggPSBiLCBsb29wIGNvbHVtbnNcblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAvLyBiW2pdXG4gICAgICB2YXIgYmogPSBiZGF0YVtqXVswXSB8fCAwOyAvLyBmb3J3YXJkIHN1YnN0aXR1dGlvbiAob3V0ZXIgcHJvZHVjdCkgYXZvaWRzIGlubmVyIGxvb3Bpbmcgd2hlbiBiaiA9PT0gMFxuXG4gICAgICBpZiAoIWVxdWFsU2NhbGFyKGJqLCAwKSkge1xuICAgICAgICAvLyB2YWx1ZSBAIFtqLCBqXVxuICAgICAgICB2YXIgdmpqID0gMDsgLy8gbG93ZXIgdHJpYW5ndWxhciBtYXRyaXggdmFsdWVzICYgaW5kZXggKGNvbHVtbiBqKVxuXG4gICAgICAgIHZhciBqdmFsdWVzID0gW107XG4gICAgICAgIHZhciBqaW5kZXggPSBbXTsgLy8gbGFzdCBpbmRleCBpbiBjb2x1bW5cblxuICAgICAgICB2YXIgbCA9IHB0cltqICsgMV07IC8vIHZhbHVlcyBpbiBjb2x1bW4sIGZpbmQgdmFsdWUgQCBbaiwgal1cblxuICAgICAgICBmb3IgKGsgPSBwdHJbal07IGsgPCBsOyBrKyspIHtcbiAgICAgICAgICAvLyByb3dcbiAgICAgICAgICBpID0gaW5kZXhba107IC8vIGNoZWNrIHJvdyAocm93cyBhcmUgbm90IHNvcnRlZCEpXG5cbiAgICAgICAgICBpZiAoaSA9PT0gaikge1xuICAgICAgICAgICAgLy8gdXBkYXRlIHZqalxuICAgICAgICAgICAgdmpqID0gdmFsdWVzW2tdO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaSA+IGopIHtcbiAgICAgICAgICAgIC8vIHN0b3JlIGxvd2VyIHRyaWFuZ3VsYXJcbiAgICAgICAgICAgIGp2YWx1ZXMucHVzaCh2YWx1ZXNba10pO1xuICAgICAgICAgICAgamluZGV4LnB1c2goaSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIGF0IHRoaXMgcG9pbnQgd2UgbXVzdCBoYXZlIGEgdmFsdWUgQCBbaiwgal1cblxuXG4gICAgICAgIGlmIChlcXVhbFNjYWxhcih2amosIDApKSB7XG4gICAgICAgICAgLy8gc3lzdGVtIGNhbm5vdCBiZSBzb2x2ZWQsIHRoZXJlIGlzIG5vIHZhbHVlIEAgW2osIGpdXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdMaW5lYXIgc3lzdGVtIGNhbm5vdCBiZSBzb2x2ZWQgc2luY2UgbWF0cml4IGlzIHNpbmd1bGFyJyk7XG4gICAgICAgIH0gLy8gY2FsY3VsYXRlIHhqXG5cblxuICAgICAgICB2YXIgeGogPSBkaXZpZGVTY2FsYXIoYmosIHZqaik7IC8vIGxvb3AgbG93ZXIgdHJpYW5ndWxhclxuXG4gICAgICAgIGZvciAoayA9IDAsIGwgPSBqaW5kZXgubGVuZ3RoOyBrIDwgbDsgaysrKSB7XG4gICAgICAgICAgLy8gcm93XG4gICAgICAgICAgaSA9IGppbmRleFtrXTsgLy8gdXBkYXRlIGNvcHkgb2YgYlxuXG4gICAgICAgICAgYmRhdGFbaV0gPSBbc3VidHJhY3QoYmRhdGFbaV1bMF0gfHwgMCwgbXVsdGlwbHlTY2FsYXIoeGosIGp2YWx1ZXNba10pKV07XG4gICAgICAgIH0gLy8gdXBkYXRlIHhcblxuXG4gICAgICAgIHhbal0gPSBbeGpdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdXBkYXRlIHhcbiAgICAgICAgeFtqXSA9IFswXTtcbiAgICAgIH1cbiAgICB9IC8vIHJldHVybiB2ZWN0b3JcblxuXG4gICAgcmV0dXJuIG5ldyBEZW5zZU1hdHJpeCh7XG4gICAgICBkYXRhOiB4LFxuICAgICAgc2l6ZTogW3Jvd3MsIDFdXG4gICAgfSk7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVMc29sdmUgPSBjcmVhdGVMc29sdmU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUx1c29sdmUgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX3NvbHZlVmFsaWRhdGlvbiA9IHJlcXVpcmUoXCIuL3V0aWxzL3NvbHZlVmFsaWRhdGlvblwiKTtcblxudmFyIF9jc0lwdmVjID0gcmVxdWlyZShcIi4uL3NwYXJzZS9jc0lwdmVjXCIpO1xuXG52YXIgbmFtZSA9ICdsdXNvbHZlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdsdXAnLCAnc2x1JywgJ3Vzb2x2ZScsICdsc29sdmUnLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVMdXNvbHZlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgbHVwID0gX3JlZi5sdXAsXG4gICAgICBzbHUgPSBfcmVmLnNsdSxcbiAgICAgIHVzb2x2ZSA9IF9yZWYudXNvbHZlLFxuICAgICAgbHNvbHZlID0gX3JlZi5sc29sdmUsXG4gICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXg7XG4gIHZhciBzb2x2ZVZhbGlkYXRpb24gPSAoMCwgX3NvbHZlVmFsaWRhdGlvbi5jcmVhdGVTb2x2ZVZhbGlkYXRpb24pKHtcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIC8qKlxuICAgKiBTb2x2ZXMgdGhlIGxpbmVhciBzeXN0ZW0gYEEgKiB4ID0gYmAgd2hlcmUgYEFgIGlzIGFuIFtuIHggbl0gbWF0cml4IGFuZCBgYmAgaXMgYSBbbl0gY29sdW1uIHZlY3Rvci5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmx1c29sdmUoQSwgYikgICAgIC8vIHJldHVybnMgY29sdW1uIHZlY3RvciB3aXRoIHRoZSBzb2x1dGlvbiB0byB0aGUgbGluZWFyIHN5c3RlbSBBICogeCA9IGJcbiAgICogICAgbWF0aC5sdXNvbHZlKGx1cCwgYikgICAvLyByZXR1cm5zIGNvbHVtbiB2ZWN0b3Igd2l0aCB0aGUgc29sdXRpb24gdG8gdGhlIGxpbmVhciBzeXN0ZW0gQSAqIHggPSBiLCBsdXAgPSBtYXRoLmx1cChBKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgY29uc3QgbSA9IFtbMSwgMCwgMCwgMF0sIFswLCAyLCAwLCAwXSwgWzAsIDAsIDMsIDBdLCBbMCwgMCwgMCwgNF1dXG4gICAqXG4gICAqICAgIGNvbnN0IHggPSBtYXRoLmx1c29sdmUobSwgWy0xLCAtMSwgLTEsIC0xXSkgICAgICAgIC8vIHggPSBbWy0xXSwgWy0wLjVdLCBbLTEvM10sIFstMC4yNV1dXG4gICAqXG4gICAqICAgIGNvbnN0IGYgPSBtYXRoLmx1cChtKVxuICAgKiAgICBjb25zdCB4MSA9IG1hdGgubHVzb2x2ZShmLCBbLTEsIC0xLCAtMSwgLTFdKSAgICAgICAvLyB4MSA9IFtbLTFdLCBbLTAuNV0sIFstMS8zXSwgWy0wLjI1XV1cbiAgICogICAgY29uc3QgeDIgPSBtYXRoLmx1c29sdmUoZiwgWzEsIDIsIDEsIC0xXSkgICAgICAgICAgLy8geDIgPSBbWzFdLCBbMV0sIFsxLzNdLCBbLTAuMjVdXVxuICAgKlxuICAgKiAgICBjb25zdCBhID0gW1stMiwgM10sIFsyLCAxXV1cbiAgICogICAgY29uc3QgYiA9IFsxMSwgOV1cbiAgICogICAgY29uc3QgeCA9IG1hdGgubHVzb2x2ZShhLCBiKSAgLy8gW1syXSwgWzVdXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgbHVwLCBzbHUsIGxzb2x2ZSwgdXNvbHZlXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4IHwgQXJyYXkgfCBPYmplY3R9IEEgICAgICBJbnZlcnRpYmxlIE1hdHJpeCBvciB0aGUgTWF0cml4IExVIGRlY29tcG9zaXRpb25cbiAgICogQHBhcmFtIHtNYXRyaXggfCBBcnJheX0gYiAgICAgICAgICAgICAgIENvbHVtbiBWZWN0b3JcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcmRlcl0gICAgICAgICAgICAgICAgIFRoZSBTeW1ib2xpYyBPcmRlcmluZyBhbmQgQW5hbHlzaXMgb3JkZXIsIHNlZSBzbHUgZm9yIGRldGFpbHMuIE1hdHJpeCBtdXN0IGJlIGEgU3BhcnNlTWF0cml4XG4gICAqIEBwYXJhbSB7TnVtYmVyfSBbdGhyZXNob2xkXSAgICAgICAgICAgICBQYXJ0aWFsIHBpdm90aW5nIHRocmVzaG9sZCAoMSBmb3IgcGFydGlhbCBwaXZvdGluZyksIHNlZSBzbHUgZm9yIGRldGFpbHMuIE1hdHJpeCBtdXN0IGJlIGEgU3BhcnNlTWF0cml4LlxuICAgKlxuICAgKiBAcmV0dXJuIHtEZW5zZU1hdHJpeCB8IEFycmF5fSAgICAgICAgICAgQ29sdW1uIHZlY3RvciB3aXRoIHRoZSBzb2x1dGlvbiB0byB0aGUgbGluZWFyIHN5c3RlbSBBICogeCA9IGJcbiAgICovXG5cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnQXJyYXksIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlBcnJheU1hdHJpeChhLCBiKSB7XG4gICAgICAvLyBjb252ZXJ0IGEgdG8gbWF0cml4XG4gICAgICBhID0gbWF0cml4KGEpOyAvLyBtYXRyaXggbHVwIGRlY29tcG9zaXRpb25cblxuICAgICAgdmFyIGQgPSBsdXAoYSk7IC8vIHNvbHZlXG5cbiAgICAgIHZhciB4ID0gX2x1c29sdmUoZC5MLCBkLlUsIGQucCwgbnVsbCwgYik7IC8vIGNvbnZlcnQgcmVzdWx0IHRvIGFycmF5XG5cblxuICAgICAgcmV0dXJuIHgudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4QXJyYXlNYXRyaXgoYSwgYikge1xuICAgICAgLy8gbWF0cml4IGx1cCBkZWNvbXBvc2l0aW9uXG4gICAgICB2YXIgZCA9IGx1cChhKTsgLy8gc29sdmVcblxuICAgICAgcmV0dXJuIF9sdXNvbHZlKGQuTCwgZC5VLCBkLnAsIG51bGwsIGIpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhBcnJheU1hdHJpeChhLCBiKSB7XG4gICAgICAvLyBtYXRyaXggbHVwIGRlY29tcG9zaXRpb25cbiAgICAgIHZhciBkID0gbHVwKGEpOyAvLyBzb2x2ZVxuXG4gICAgICByZXR1cm4gX2x1c29sdmUoZC5MLCBkLlUsIGQucCwgbnVsbCwgYik7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBBcnJheSB8IE1hdHJpeCwgbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhBcnJheU1hdHJpeE51bWJlck51bWJlcihhLCBiLCBvcmRlciwgdGhyZXNob2xkKSB7XG4gICAgICAvLyBtYXRyaXggbHUgZGVjb21wb3NpdGlvblxuICAgICAgdmFyIGQgPSBzbHUoYSwgb3JkZXIsIHRocmVzaG9sZCk7IC8vIHNvbHZlXG5cbiAgICAgIHJldHVybiBfbHVzb2x2ZShkLkwsIGQuVSwgZC5wLCBkLnEsIGIpO1xuICAgIH0sXG4gICAgJ09iamVjdCwgQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBPYmplY3RBcnJheU1hdHJpeChkLCBiKSB7XG4gICAgICAvLyBzb2x2ZVxuICAgICAgcmV0dXJuIF9sdXNvbHZlKGQuTCwgZC5VLCBkLnAsIGQucSwgYik7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBfdG9NYXRyaXgoYSkge1xuICAgIC8vIGNoZWNrIGl0IGlzIGEgbWF0cml4XG4gICAgaWYgKCgwLCBfaXMuaXNNYXRyaXgpKGEpKSB7XG4gICAgICByZXR1cm4gYTtcbiAgICB9IC8vIGNoZWNrIGFycmF5XG5cblxuICAgIGlmICgoMCwgX2lzLmlzQXJyYXkpKGEpKSB7XG4gICAgICByZXR1cm4gbWF0cml4KGEpO1xuICAgIH0gLy8gdGhyb3dcblxuXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBNYXRyaXggTFUgZGVjb21wb3NpdGlvbicpO1xuICB9XG5cbiAgZnVuY3Rpb24gX2x1c29sdmUobCwgdSwgcCwgcSwgYikge1xuICAgIC8vIHZlcmlmeSBMLCBVLCBQXG4gICAgbCA9IF90b01hdHJpeChsKTtcbiAgICB1ID0gX3RvTWF0cml4KHUpOyAvLyB2YWxpZGF0ZSBtYXRyaXggYW5kIHZlY3RvclxuXG4gICAgYiA9IHNvbHZlVmFsaWRhdGlvbihsLCBiLCBmYWxzZSk7IC8vIGFwcGx5IHJvdyBwZXJtdXRhdGlvbnMgaWYgbmVlZGVkIChiIGlzIGEgRGVuc2VNYXRyaXgpXG5cbiAgICBpZiAocCkge1xuICAgICAgYi5fZGF0YSA9ICgwLCBfY3NJcHZlYy5jc0lwdmVjKShwLCBiLl9kYXRhKTtcbiAgICB9IC8vIHVzZSBmb3J3YXJkIHN1YnN0aXR1dGlvbiB0byByZXNvbHZlIEwgKiB5ID0gYlxuXG5cbiAgICB2YXIgeSA9IGxzb2x2ZShsLCBiKTsgLy8gdXNlIGJhY2t3YXJkIHN1YnN0aXR1dGlvbiB0byByZXNvbHZlIFUgKiB4ID0geVxuXG4gICAgdmFyIHggPSB1c29sdmUodSwgeSk7IC8vIGFwcGx5IGNvbHVtbiBwZXJtdXRhdGlvbnMgaWYgbmVlZGVkICh4IGlzIGEgRGVuc2VNYXRyaXgpXG5cbiAgICBpZiAocSkge1xuICAgICAgeC5fZGF0YSA9ICgwLCBfY3NJcHZlYy5jc0lwdmVjKShxLCB4Ll9kYXRhKTtcbiAgICB9IC8vIHJldHVybiBzb2x1dGlvblxuXG5cbiAgICByZXR1cm4geDtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZUx1c29sdmUgPSBjcmVhdGVMdXNvbHZlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVVc29sdmUgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX3NvbHZlVmFsaWRhdGlvbiA9IHJlcXVpcmUoXCIuL3V0aWxzL3NvbHZlVmFsaWRhdGlvblwiKTtcblxudmFyIG5hbWUgPSAndXNvbHZlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdkaXZpZGVTY2FsYXInLCAnbXVsdGlwbHlTY2FsYXInLCAnc3VidHJhY3QnLCAnZXF1YWxTY2FsYXInLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVVc29sdmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBkaXZpZGVTY2FsYXIgPSBfcmVmLmRpdmlkZVNjYWxhcixcbiAgICAgIG11bHRpcGx5U2NhbGFyID0gX3JlZi5tdWx0aXBseVNjYWxhcixcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcbiAgdmFyIHNvbHZlVmFsaWRhdGlvbiA9ICgwLCBfc29sdmVWYWxpZGF0aW9uLmNyZWF0ZVNvbHZlVmFsaWRhdGlvbikoe1xuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgLyoqXG4gICAqIFNvbHZlcyB0aGUgbGluZWFyIGVxdWF0aW9uIHN5c3RlbSBieSBiYWNrd2FyZCBzdWJzdGl0dXRpb24uIE1hdHJpeCBtdXN0IGJlIGFuIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4LlxuICAgKlxuICAgKiBgVSAqIHggPSBiYFxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgudXNvbHZlKFUsIGIpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBjb25zdCBhID0gW1stMiwgM10sIFsyLCAxXV1cbiAgICogICAgY29uc3QgYiA9IFsxMSwgOV1cbiAgICogICAgY29uc3QgeCA9IHVzb2x2ZShhLCBiKSAgLy8gW1s4XSwgWzldXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgbHVwLCBzbHUsIHVzb2x2ZSwgbHVzb2x2ZVxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeCwgQXJyYXl9IFUgICAgICAgQSBOIHggTiBtYXRyaXggb3IgYXJyYXkgKFUpXG4gICAqIEBwYXJhbSB7TWF0cml4LCBBcnJheX0gYiAgICAgICBBIGNvbHVtbiB2ZWN0b3Igd2l0aCB0aGUgYiB2YWx1ZXNcbiAgICpcbiAgICogQHJldHVybiB7RGVuc2VNYXRyaXggfCBBcnJheX0gIEEgY29sdW1uIHZlY3RvciB3aXRoIHRoZSBsaW5lYXIgc3lzdGVtIHNvbHV0aW9uICh4KVxuICAgKi9cblxuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdTcGFyc2VNYXRyaXgsIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QXJyYXlNYXRyaXgobSwgYikge1xuICAgICAgLy8gcHJvY2VzcyBtYXRyaXhcbiAgICAgIHJldHVybiBfc3BhcnNlQmFja3dhcmRTdWJzdGl0dXRpb24obSwgYik7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBcnJheU1hdHJpeChtLCBiKSB7XG4gICAgICAvLyBwcm9jZXNzIG1hdHJpeFxuICAgICAgcmV0dXJuIF9kZW5zZUJhY2t3YXJkU3Vic3RpdHV0aW9uKG0sIGIpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5QXJyYXlNYXRyaXgoYSwgYikge1xuICAgICAgLy8gY3JlYXRlIGRlbnNlIG1hdHJpeCBmcm9tIGFycmF5XG4gICAgICB2YXIgbSA9IG1hdHJpeChhKTsgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuXG4gICAgICB2YXIgciA9IF9kZW5zZUJhY2t3YXJkU3Vic3RpdHV0aW9uKG0sIGIpOyAvLyByZXN1bHRcblxuXG4gICAgICByZXR1cm4gci52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBfZGVuc2VCYWNrd2FyZFN1YnN0aXR1dGlvbihtLCBiKSB7XG4gICAgLy8gdmFsaWRhdGUgbWF0cml4IGFuZCB2ZWN0b3IsIHJldHVybiBjb3B5IG9mIGNvbHVtbiB2ZWN0b3IgYlxuICAgIGIgPSBzb2x2ZVZhbGlkYXRpb24obSwgYiwgdHJ1ZSk7IC8vIGNvbHVtbiB2ZWN0b3IgZGF0YVxuXG4gICAgdmFyIGJkYXRhID0gYi5fZGF0YTsgLy8gcm93cyAmIGNvbHVtbnNcblxuICAgIHZhciByb3dzID0gbS5fc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IG0uX3NpemVbMV07IC8vIHJlc3VsdFxuXG4gICAgdmFyIHggPSBbXTsgLy8gYXJyYXlzXG5cbiAgICB2YXIgZGF0YSA9IG0uX2RhdGE7IC8vIGJhY2t3YXJkIHNvbHZlIG0gKiB4ID0gYiwgbG9vcCBjb2x1bW5zIChiYWNrd2FyZHMpXG5cbiAgICBmb3IgKHZhciBqID0gY29sdW1ucyAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgICAvLyBiW2pdXG4gICAgICB2YXIgYmogPSBiZGF0YVtqXVswXSB8fCAwOyAvLyB4W2pdXG5cbiAgICAgIHZhciB4aiA9IHZvaWQgMDsgLy8gYmFja3dhcmQgc3Vic3RpdHV0aW9uIChvdXRlciBwcm9kdWN0KSBhdm9pZHMgaW5uZXIgbG9vcGluZyB3aGVuIGJqID09PSAwXG5cbiAgICAgIGlmICghZXF1YWxTY2FsYXIoYmosIDApKSB7XG4gICAgICAgIC8vIHZhbHVlIEAgW2osIGpdXG4gICAgICAgIHZhciB2amogPSBkYXRhW2pdW2pdOyAvLyBjaGVjayB2ampcblxuICAgICAgICBpZiAoZXF1YWxTY2FsYXIodmpqLCAwKSkge1xuICAgICAgICAgIC8vIHN5c3RlbSBjYW5ub3QgYmUgc29sdmVkXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdMaW5lYXIgc3lzdGVtIGNhbm5vdCBiZSBzb2x2ZWQgc2luY2UgbWF0cml4IGlzIHNpbmd1bGFyJyk7XG4gICAgICAgIH0gLy8gY2FsY3VsYXRlIHhqXG5cblxuICAgICAgICB4aiA9IGRpdmlkZVNjYWxhcihiaiwgdmpqKTsgLy8gbG9vcCByb3dzXG5cbiAgICAgICAgZm9yICh2YXIgaSA9IGogLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIC8vIHVwZGF0ZSBjb3B5IG9mIGJcbiAgICAgICAgICBiZGF0YVtpXSA9IFtzdWJ0cmFjdChiZGF0YVtpXVswXSB8fCAwLCBtdWx0aXBseVNjYWxhcih4aiwgZGF0YVtpXVtqXSkpXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gemVybyB2YWx1ZSBAIGpcbiAgICAgICAgeGogPSAwO1xuICAgICAgfSAvLyB1cGRhdGUgeFxuXG5cbiAgICAgIHhbal0gPSBbeGpdO1xuICAgIH0gLy8gcmV0dXJuIGNvbHVtbiB2ZWN0b3JcblxuXG4gICAgcmV0dXJuIG5ldyBEZW5zZU1hdHJpeCh7XG4gICAgICBkYXRhOiB4LFxuICAgICAgc2l6ZTogW3Jvd3MsIDFdXG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBfc3BhcnNlQmFja3dhcmRTdWJzdGl0dXRpb24obSwgYikge1xuICAgIC8vIHZhbGlkYXRlIG1hdHJpeCBhbmQgdmVjdG9yLCByZXR1cm4gY29weSBvZiBjb2x1bW4gdmVjdG9yIGJcbiAgICBiID0gc29sdmVWYWxpZGF0aW9uKG0sIGIsIHRydWUpOyAvLyBjb2x1bW4gdmVjdG9yIGRhdGFcblxuICAgIHZhciBiZGF0YSA9IGIuX2RhdGE7IC8vIHJvd3MgJiBjb2x1bW5zXG5cbiAgICB2YXIgcm93cyA9IG0uX3NpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSBtLl9zaXplWzFdOyAvLyBtYXRyaXggYXJyYXlzXG5cbiAgICB2YXIgdmFsdWVzID0gbS5fdmFsdWVzO1xuICAgIHZhciBpbmRleCA9IG0uX2luZGV4O1xuICAgIHZhciBwdHIgPSBtLl9wdHI7IC8vIHZhcnNcblxuICAgIHZhciBpLCBrOyAvLyByZXN1bHRcblxuICAgIHZhciB4ID0gW107IC8vIGJhY2t3YXJkIHNvbHZlIG0gKiB4ID0gYiwgbG9vcCBjb2x1bW5zIChiYWNrd2FyZHMpXG5cbiAgICBmb3IgKHZhciBqID0gY29sdW1ucyAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgICAvLyBiW2pdXG4gICAgICB2YXIgYmogPSBiZGF0YVtqXVswXSB8fCAwOyAvLyBiYWNrd2FyZCBzdWJzdGl0dXRpb24gKG91dGVyIHByb2R1Y3QpIGF2b2lkcyBpbm5lciBsb29waW5nIHdoZW4gYmogPT09IDBcblxuICAgICAgaWYgKCFlcXVhbFNjYWxhcihiaiwgMCkpIHtcbiAgICAgICAgLy8gdmFsdWUgQCBbaiwgal1cbiAgICAgICAgdmFyIHZqaiA9IDA7IC8vIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4IHZhbHVlcyAmIGluZGV4IChjb2x1bW4gailcblxuICAgICAgICB2YXIganZhbHVlcyA9IFtdO1xuICAgICAgICB2YXIgamluZGV4ID0gW107IC8vIGZpcnN0ICYgbGFzdCBpbmRlY2VzIGluIGNvbHVtblxuXG4gICAgICAgIHZhciBmID0gcHRyW2pdO1xuICAgICAgICB2YXIgbCA9IHB0cltqICsgMV07IC8vIHZhbHVlcyBpbiBjb2x1bW4sIGZpbmQgdmFsdWUgQCBbaiwgal0sIGxvb3AgYmFja3dhcmRzXG5cbiAgICAgICAgZm9yIChrID0gbCAtIDE7IGsgPj0gZjsgay0tKSB7XG4gICAgICAgICAgLy8gcm93XG4gICAgICAgICAgaSA9IGluZGV4W2tdOyAvLyBjaGVjayByb3dcblxuICAgICAgICAgIGlmIChpID09PSBqKSB7XG4gICAgICAgICAgICAvLyB1cGRhdGUgdmpqXG4gICAgICAgICAgICB2amogPSB2YWx1ZXNba107XG4gICAgICAgICAgfSBlbHNlIGlmIChpIDwgaikge1xuICAgICAgICAgICAgLy8gc3RvcmUgdXBwZXIgdHJpYW5ndWxhclxuICAgICAgICAgICAganZhbHVlcy5wdXNoKHZhbHVlc1trXSk7XG4gICAgICAgICAgICBqaW5kZXgucHVzaChpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gYXQgdGhpcyBwb2ludCB3ZSBtdXN0IGhhdmUgYSB2YWx1ZSBAIFtqLCBqXVxuXG5cbiAgICAgICAgaWYgKGVxdWFsU2NhbGFyKHZqaiwgMCkpIHtcbiAgICAgICAgICAvLyBzeXN0ZW0gY2Fubm90IGJlIHNvbHZlZCwgdGhlcmUgaXMgbm8gdmFsdWUgQCBbaiwgal1cbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0xpbmVhciBzeXN0ZW0gY2Fubm90IGJlIHNvbHZlZCBzaW5jZSBtYXRyaXggaXMgc2luZ3VsYXInKTtcbiAgICAgICAgfSAvLyBjYWxjdWxhdGUgeGpcblxuXG4gICAgICAgIHZhciB4aiA9IGRpdmlkZVNjYWxhcihiaiwgdmpqKTsgLy8gbG9vcCB1cHBlciB0cmlhbmd1bGFyXG5cbiAgICAgICAgZm9yIChrID0gMCwgbCA9IGppbmRleC5sZW5ndGg7IGsgPCBsOyBrKyspIHtcbiAgICAgICAgICAvLyByb3dcbiAgICAgICAgICBpID0gamluZGV4W2tdOyAvLyB1cGRhdGUgY29weSBvZiBiXG5cbiAgICAgICAgICBiZGF0YVtpXSA9IFtzdWJ0cmFjdChiZGF0YVtpXVswXSwgbXVsdGlwbHlTY2FsYXIoeGosIGp2YWx1ZXNba10pKV07XG4gICAgICAgIH0gLy8gdXBkYXRlIHhcblxuXG4gICAgICAgIHhbal0gPSBbeGpdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdXBkYXRlIHhcbiAgICAgICAgeFtqXSA9IFswXTtcbiAgICAgIH1cbiAgICB9IC8vIHJldHVybiB2ZWN0b3JcblxuXG4gICAgcmV0dXJuIG5ldyBEZW5zZU1hdHJpeCh7XG4gICAgICBkYXRhOiB4LFxuICAgICAgc2l6ZTogW3Jvd3MsIDFdXG4gICAgfSk7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVVc29sdmUgPSBjcmVhdGVVc29sdmU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNvbHZlVmFsaWRhdGlvbiA9IGNyZWF0ZVNvbHZlVmFsaWRhdGlvbjtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi8uLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi8uLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vdXRpbHMvc3RyaW5nXCIpO1xuXG5mdW5jdGlvbiBjcmVhdGVTb2x2ZVZhbGlkYXRpb24oX3JlZikge1xuICB2YXIgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgbWF0cml4IGFuZCBjb2x1bW4gdmVjdG9yIGIgZm9yIGJhY2t3YXJkL2ZvcndhcmQgc3Vic3RpdHV0aW9uIGFsZ29yaXRobXMuXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSBtICAgICAgICAgICAgQW4gTiB4IE4gbWF0cml4XG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IGIgICAgQSBjb2x1bW4gdmVjdG9yXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gY29weSAgICAgICAgUmV0dXJuIGEgY29weSBvZiB2ZWN0b3IgYlxuICAgKlxuICAgKiBAcmV0dXJuIHtEZW5zZU1hdHJpeH0gICAgICAgIERlbnNlIGNvbHVtbiB2ZWN0b3IgYlxuICAgKi9cbiAgcmV0dXJuIGZ1bmN0aW9uIHNvbHZlVmFsaWRhdGlvbihtLCBiLCBjb3B5KSB7XG4gICAgLy8gbWF0cml4IHNpemVcbiAgICB2YXIgc2l6ZSA9IG0uc2l6ZSgpOyAvLyB2YWxpZGF0ZSBtYXRyaXggZGltZW5zaW9uc1xuXG4gICAgaWYgKHNpemUubGVuZ3RoICE9PSAyKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgdHdvIGRpbWVuc2lvbmFsIChzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShzaXplKSArICcpJyk7XG4gICAgfSAvLyByb3dzICYgY29sdW1uc1xuXG5cbiAgICB2YXIgcm93cyA9IHNpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSBzaXplWzFdOyAvLyB2YWxpZGF0ZSByb3dzICYgY29sdW1uc1xuXG4gICAgaWYgKHJvd3MgIT09IGNvbHVtbnMpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggbXVzdCBiZSBzcXVhcmUgKHNpemU6ICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKHNpemUpICsgJyknKTtcbiAgICB9IC8vIHZhcnNcblxuXG4gICAgdmFyIGRhdGEsIGksIGJkYXRhOyAvLyBjaGVjayBiIGlzIG1hdHJpeFxuXG4gICAgaWYgKCgwLCBfaXMuaXNNYXRyaXgpKGIpKSB7XG4gICAgICAvLyBtYXRyaXggc2l6ZVxuICAgICAgdmFyIG1zaXplID0gYi5zaXplKCk7IC8vIHZlY3RvclxuXG4gICAgICBpZiAobXNpemUubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIC8vIGNoZWNrIHZlY3RvciBsZW5ndGhcbiAgICAgICAgaWYgKG1zaXplWzBdICE9PSByb3dzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RpbWVuc2lvbiBtaXNtYXRjaC4gTWF0cml4IGNvbHVtbnMgbXVzdCBtYXRjaCB2ZWN0b3IgbGVuZ3RoLicpO1xuICAgICAgICB9IC8vIGNyZWF0ZSBkYXRhIGFycmF5XG5cblxuICAgICAgICBkYXRhID0gW107IC8vIG1hdHJpeCBkYXRhIChEZW5zZU1hdHJpeClcblxuICAgICAgICBiZGF0YSA9IGIuX2RhdGE7IC8vIGxvb3AgYiBkYXRhXG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAgIC8vIHJvdyBhcnJheVxuICAgICAgICAgIGRhdGFbaV0gPSBbYmRhdGFbaV1dO1xuICAgICAgICB9IC8vIHJldHVybiBEZW5zZSBNYXRyaXhcblxuXG4gICAgICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoe1xuICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgc2l6ZTogW3Jvd3MsIDFdLFxuICAgICAgICAgIGRhdGF0eXBlOiBiLl9kYXRhdHlwZVxuICAgICAgICB9KTtcbiAgICAgIH0gLy8gdHdvIGRpbWVuc2lvbnNcblxuXG4gICAgICBpZiAobXNpemUubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIC8vIGFycmF5IG11c3QgYmUgYSBjb2x1bW4gdmVjdG9yXG4gICAgICAgIGlmIChtc2l6ZVswXSAhPT0gcm93cyB8fCBtc2l6ZVsxXSAhPT0gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdEaW1lbnNpb24gbWlzbWF0Y2guIE1hdHJpeCBjb2x1bW5zIG11c3QgbWF0Y2ggdmVjdG9yIGxlbmd0aC4nKTtcbiAgICAgICAgfSAvLyBjaGVjayBtYXRyaXggdHlwZVxuXG5cbiAgICAgICAgaWYgKCgwLCBfaXMuaXNEZW5zZU1hdHJpeCkoYikpIHtcbiAgICAgICAgICAvLyBjaGVjayBhIGNvcHkgaXMgbmVlZGVkXG4gICAgICAgICAgaWYgKGNvcHkpIHtcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBkYXRhIGFycmF5XG4gICAgICAgICAgICBkYXRhID0gW107IC8vIG1hdHJpeCBkYXRhIChEZW5zZU1hdHJpeClcblxuICAgICAgICAgICAgYmRhdGEgPSBiLl9kYXRhOyAvLyBsb29wIGIgZGF0YVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgICAgIC8vIHJvdyBhcnJheVxuICAgICAgICAgICAgICBkYXRhW2ldID0gW2JkYXRhW2ldWzBdXTtcbiAgICAgICAgICAgIH0gLy8gcmV0dXJuIERlbnNlIE1hdHJpeFxuXG5cbiAgICAgICAgICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoe1xuICAgICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgICBzaXplOiBbcm93cywgMV0sXG4gICAgICAgICAgICAgIGRhdGF0eXBlOiBiLl9kYXRhdHlwZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSAvLyBiIGlzIGFscmVhZHkgYSBjb2x1bW4gdmVjdG9yXG5cblxuICAgICAgICAgIHJldHVybiBiO1xuICAgICAgICB9IC8vIGNyZWF0ZSBkYXRhIGFycmF5XG5cblxuICAgICAgICBkYXRhID0gW107XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAgIGRhdGFbaV0gPSBbMF07XG4gICAgICAgIH0gLy8gc3BhcnNlIG1hdHJpeCBhcnJheXNcblxuXG4gICAgICAgIHZhciB2YWx1ZXMgPSBiLl92YWx1ZXM7XG4gICAgICAgIHZhciBpbmRleCA9IGIuX2luZGV4O1xuICAgICAgICB2YXIgcHRyID0gYi5fcHRyOyAvLyBsb29wIHZhbHVlcyBpbiBjb2x1bW4gMFxuXG4gICAgICAgIGZvciAodmFyIGsxID0gcHRyWzFdLCBrID0gcHRyWzBdOyBrIDwgazE7IGsrKykge1xuICAgICAgICAgIC8vIHJvd1xuICAgICAgICAgIGkgPSBpbmRleFtrXTsgLy8gYWRkIHRvIGRhdGFcblxuICAgICAgICAgIGRhdGFbaV1bMF0gPSB2YWx1ZXNba107XG4gICAgICAgIH0gLy8gcmV0dXJuIERlbnNlIE1hdHJpeFxuXG5cbiAgICAgICAgcmV0dXJuIG5ldyBEZW5zZU1hdHJpeCh7XG4gICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICBzaXplOiBbcm93cywgMV0sXG4gICAgICAgICAgZGF0YXR5cGU6IGIuX2RhdGF0eXBlXG4gICAgICAgIH0pO1xuICAgICAgfSAvLyB0aHJvdyBlcnJvclxuXG5cbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdEaW1lbnNpb24gbWlzbWF0Y2guIE1hdHJpeCBjb2x1bW5zIG11c3QgbWF0Y2ggdmVjdG9yIGxlbmd0aC4nKTtcbiAgICB9IC8vIGNoZWNrIGIgaXMgYXJyYXlcblxuXG4gICAgaWYgKCgwLCBfaXMuaXNBcnJheSkoYikpIHtcbiAgICAgIC8vIHNpemVcbiAgICAgIHZhciBhc2l6ZSA9ICgwLCBfYXJyYXkuYXJyYXlTaXplKShiKTsgLy8gY2hlY2sgbWF0cml4IGRpbWVuc2lvbnMsIHZlY3RvclxuXG4gICAgICBpZiAoYXNpemUubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIC8vIGNoZWNrIHZlY3RvciBsZW5ndGhcbiAgICAgICAgaWYgKGFzaXplWzBdICE9PSByb3dzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RpbWVuc2lvbiBtaXNtYXRjaC4gTWF0cml4IGNvbHVtbnMgbXVzdCBtYXRjaCB2ZWN0b3IgbGVuZ3RoLicpO1xuICAgICAgICB9IC8vIGNyZWF0ZSBkYXRhIGFycmF5XG5cblxuICAgICAgICBkYXRhID0gW107IC8vIGxvb3AgYlxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgICAvLyByb3cgYXJyYXlcbiAgICAgICAgICBkYXRhW2ldID0gW2JbaV1dO1xuICAgICAgICB9IC8vIHJldHVybiBEZW5zZSBNYXRyaXhcblxuXG4gICAgICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoe1xuICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgc2l6ZTogW3Jvd3MsIDFdXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoYXNpemUubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIC8vIGFycmF5IG11c3QgYmUgYSBjb2x1bW4gdmVjdG9yXG4gICAgICAgIGlmIChhc2l6ZVswXSAhPT0gcm93cyB8fCBhc2l6ZVsxXSAhPT0gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdEaW1lbnNpb24gbWlzbWF0Y2guIE1hdHJpeCBjb2x1bW5zIG11c3QgbWF0Y2ggdmVjdG9yIGxlbmd0aC4nKTtcbiAgICAgICAgfSAvLyBjcmVhdGUgZGF0YSBhcnJheVxuXG5cbiAgICAgICAgZGF0YSA9IFtdOyAvLyBsb29wIGIgZGF0YVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgICAvLyByb3cgYXJyYXlcbiAgICAgICAgICBkYXRhW2ldID0gW2JbaV1bMF1dO1xuICAgICAgICB9IC8vIHJldHVybiBEZW5zZSBNYXRyaXhcblxuXG4gICAgICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoe1xuICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgc2l6ZTogW3Jvd3MsIDFdXG4gICAgICAgIH0pO1xuICAgICAgfSAvLyB0aHJvdyBlcnJvclxuXG5cbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdEaW1lbnNpb24gbWlzbWF0Y2guIE1hdHJpeCBjb2x1bW5zIG11c3QgbWF0Y2ggdmVjdG9yIGxlbmd0aC4nKTtcbiAgICB9XG4gIH07XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNzQW1kID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jc0ZrZWVwID0gcmVxdWlyZShcIi4vY3NGa2VlcFwiKTtcblxudmFyIF9jc0ZsaXAgPSByZXF1aXJlKFwiLi9jc0ZsaXBcIik7XG5cbnZhciBfY3NUZGZzID0gcmVxdWlyZShcIi4vY3NUZGZzXCIpO1xuXG52YXIgbmFtZSA9ICdjc0FtZCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydhZGQnLCAnbXVsdGlwbHknLCAndHJhbnNwb3NlJ107XG52YXIgY3JlYXRlQ3NBbWQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgYWRkID0gX3JlZi5hZGQsXG4gICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHksXG4gICAgICB0cmFuc3Bvc2UgPSBfcmVmLnRyYW5zcG9zZTtcblxuICAvKipcbiAgICogQXBwcm94aW1hdGUgbWluaW11bSBkZWdyZWUgb3JkZXJpbmcuIFRoZSBtaW5pbXVtIGRlZ3JlZSBhbGdvcml0aG0gaXMgYSB3aWRlbHkgdXNlZFxuICAgKiBoZXVyaXN0aWMgZm9yIGZpbmRpbmcgYSBwZXJtdXRhdGlvbiBQIHNvIHRoYXQgUCpBKlAnIGhhcyBmZXdlciBub256ZXJvcyBpbiBpdHMgZmFjdG9yaXphdGlvblxuICAgKiB0aGFuIEEuIEl0IGlzIGEgZ3JlYWR5IG1ldGhvZCB0aGF0IHNlbGVjdHMgdGhlIHNwYXJzZXN0IHBpdm90IHJvdyBhbmQgY29sdW1uIGR1cmluZyB0aGUgY291cnNlXG4gICAqIG9mIGEgcmlnaHQgbG9va2luZyBzcGFyc2UgQ2hvbGVza3kgZmFjdG9yaXphdGlvbi5cbiAgICpcbiAgICogUmVmZXJlbmNlOiBodHRwOi8vZmFjdWx0eS5jc2UudGFtdS5lZHUvZGF2aXMvcHVibGljYXRpb25zLmh0bWxcbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXJ9IG9yZGVyICAgIDA6IE5hdHVyYWwsIDE6IENob2xlc2t5LCAyOiBMVSwgMzogUVJcbiAgICogQHBhcmFtIHtNYXRyaXh9IG0gICAgICAgIFNwYXJzZSBNYXRyaXhcbiAgICovXG4gIHJldHVybiBmdW5jdGlvbiBjc0FtZChvcmRlciwgYSkge1xuICAgIC8vIGNoZWNrIGlucHV0IHBhcmFtZXRlcnNcbiAgICBpZiAoIWEgfHwgb3JkZXIgPD0gMCB8fCBvcmRlciA+IDMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gLy8gYSBtYXRyaXggYXJyYXlzXG5cblxuICAgIHZhciBhc2l6ZSA9IGEuX3NpemU7IC8vIHJvd3MgYW5kIGNvbHVtbnNcblxuICAgIHZhciBtID0gYXNpemVbMF07XG4gICAgdmFyIG4gPSBhc2l6ZVsxXTsgLy8gaW5pdGlhbGl6ZSB2YXJzXG5cbiAgICB2YXIgbGVtYXggPSAwOyAvLyBkZW5zZSB0aHJlc2hvbGRcblxuICAgIHZhciBkZW5zZSA9IE1hdGgubWF4KDE2LCAxMCAqIE1hdGguc3FydChuKSk7XG4gICAgZGVuc2UgPSBNYXRoLm1pbihuIC0gMiwgZGVuc2UpOyAvLyBjcmVhdGUgdGFyZ2V0IG1hdHJpeCBDXG5cbiAgICB2YXIgY20gPSBfY3JlYXRlVGFyZ2V0TWF0cml4KG9yZGVyLCBhLCBtLCBuLCBkZW5zZSk7IC8vIGRyb3AgZGlhZ29uYWwgZW50cmllc1xuXG5cbiAgICAoMCwgX2NzRmtlZXAuY3NGa2VlcCkoY20sIF9kaWFnLCBudWxsKTsgLy8gQyBtYXRyaXggYXJyYXlzXG5cbiAgICB2YXIgY2luZGV4ID0gY20uX2luZGV4O1xuICAgIHZhciBjcHRyID0gY20uX3B0cjsgLy8gbnVtYmVyIG9mIG5vbnplcm8gZWxlbWVudHMgaW4gQ1xuXG4gICAgdmFyIGNueiA9IGNwdHJbbl07IC8vIGFsbG9jYXRlIHJlc3VsdCAobisxKVxuXG4gICAgdmFyIFAgPSBbXTsgLy8gY3JlYXRlIHdvcmtzcGFjZSAoOCAqIChuICsgMSkpXG5cbiAgICB2YXIgVyA9IFtdO1xuICAgIHZhciBsZW4gPSAwOyAvLyBmaXJzdCBuICsgMSBlbnRyaWVzXG5cbiAgICB2YXIgbnYgPSBuICsgMTsgLy8gbmV4dCBuICsgMSBlbnRyaWVzXG5cbiAgICB2YXIgbmV4dCA9IDIgKiAobiArIDEpOyAvLyBuZXh0IG4gKyAxIGVudHJpZXNcblxuICAgIHZhciBoZWFkID0gMyAqIChuICsgMSk7IC8vIG5leHQgbiArIDEgZW50cmllc1xuXG4gICAgdmFyIGVsZW4gPSA0ICogKG4gKyAxKTsgLy8gbmV4dCBuICsgMSBlbnRyaWVzXG5cbiAgICB2YXIgZGVncmVlID0gNSAqIChuICsgMSk7IC8vIG5leHQgbiArIDEgZW50cmllc1xuXG4gICAgdmFyIHcgPSA2ICogKG4gKyAxKTsgLy8gbmV4dCBuICsgMSBlbnRyaWVzXG5cbiAgICB2YXIgaGhlYWQgPSA3ICogKG4gKyAxKTsgLy8gbGFzdCBuICsgMSBlbnRyaWVzXG4gICAgLy8gdXNlIFAgYXMgd29ya3NwYWNlIGZvciBsYXN0XG5cbiAgICB2YXIgbGFzdCA9IFA7IC8vIGluaXRpYWxpemUgcXVvdGllbnQgZ3JhcGhcblxuICAgIHZhciBtYXJrID0gX2luaXRpYWxpemVRdW90aWVudEdyYXBoKG4sIGNwdHIsIFcsIGxlbiwgaGVhZCwgbGFzdCwgbmV4dCwgaGhlYWQsIG52LCB3LCBlbGVuLCBkZWdyZWUpOyAvLyBpbml0aWFsaXplIGRlZ3JlZSBsaXN0c1xuXG5cbiAgICB2YXIgbmVsID0gX2luaXRpYWxpemVEZWdyZWVMaXN0cyhuLCBjcHRyLCBXLCBkZWdyZWUsIGVsZW4sIHcsIGRlbnNlLCBudiwgaGVhZCwgbGFzdCwgbmV4dCk7IC8vIG1pbmltdW0gZGVncmVlIG5vZGVcblxuXG4gICAgdmFyIG1pbmRlZyA9IDA7IC8vIHZhcnNcblxuICAgIHZhciBpLCBqLCBrLCBrMSwgazIsIGUsIHBqLCBsbiwgbnZpLCBwaywgZWxuLCBwMSwgcDIsIHBuLCBoLCBkOyAvLyB3aGlsZSAoc2VsZWN0aW5nIHBpdm90cykgZG9cblxuICAgIHdoaWxlIChuZWwgPCBuKSB7XG4gICAgICAvLyBzZWxlY3Qgbm9kZSBvZiBtaW5pbXVtIGFwcHJveGltYXRlIGRlZ3JlZS4gYW1kKCkgaXMgbm93IHJlYWR5IHRvIHN0YXJ0IGVsaW1pbmF0aW5nIHRoZSBncmFwaC4gSXQgZmlyc3RcbiAgICAgIC8vIGZpbmRzIGEgbm9kZSBrIG9mIG1pbmltdW0gZGVncmVlIGFuZCByZW1vdmVzIGl0IGZyb20gaXRzIGRlZ3JlZSBsaXN0LiBUaGUgdmFyaWFibGUgbmVsIGtlZXBzIHRyYWNrIG9mIHRob3dcbiAgICAgIC8vIG1hbnkgbm9kZXMgaGF2ZSBiZWVuIGVsaW1pbmF0ZWQuXG4gICAgICBmb3IgKGsgPSAtMTsgbWluZGVnIDwgbiAmJiAoayA9IFdbaGVhZCArIG1pbmRlZ10pID09PSAtMTsgbWluZGVnKyspIHtcbiAgICAgICAgO1xuICAgICAgfVxuXG4gICAgICBpZiAoV1tuZXh0ICsga10gIT09IC0xKSB7XG4gICAgICAgIGxhc3RbV1tuZXh0ICsga11dID0gLTE7XG4gICAgICB9IC8vIHJlbW92ZSBrIGZyb20gZGVncmVlIGxpc3RcblxuXG4gICAgICBXW2hlYWQgKyBtaW5kZWddID0gV1tuZXh0ICsga107IC8vIGVsZW5rID0gfEVrfFxuXG4gICAgICB2YXIgZWxlbmsgPSBXW2VsZW4gKyBrXTsgLy8gIyBvZiBub2RlcyBrIHJlcHJlc2VudHNcblxuICAgICAgdmFyIG52ayA9IFdbbnYgKyBrXTsgLy8gV1tudiArIGtdIG5vZGVzIG9mIEEgZWxpbWluYXRlZFxuXG4gICAgICBuZWwgKz0gbnZrOyAvLyBDb25zdHJ1Y3QgYSBuZXcgZWxlbWVudC4gVGhlIG5ldyBlbGVtZW50IExrIGlzIGNvbnN0cnVjdGVkIGluIHBsYWNlIGlmIHxFa3wgPSAwLiBudltpXSBpc1xuICAgICAgLy8gbmVnYXRlZCBmb3IgYWxsIG5vZGVzIGkgaW4gTGsgdG8gZmxhZyB0aGVtIGFzIG1lbWJlcnMgb2YgdGhpcyBzZXQuIEVhY2ggbm9kZSBpIGlzIHJlbW92ZWQgZnJvbSB0aGVcbiAgICAgIC8vIGRlZ3JlZSBsaXN0cy4gQWxsIGVsZW1lbnRzIGUgaW4gRWsgYXJlIGFic29ydmVkIGludG8gZWxlbWVudCBrLlxuXG4gICAgICB2YXIgZGsgPSAwOyAvLyBmbGFnIGsgYXMgaW4gTGtcblxuICAgICAgV1tudiArIGtdID0gLW52aztcbiAgICAgIHZhciBwID0gY3B0cltrXTsgLy8gZG8gaW4gcGxhY2UgaWYgV1tlbGVuICsga10gPT09IDBcblxuICAgICAgdmFyIHBrMSA9IGVsZW5rID09PSAwID8gcCA6IGNuejtcbiAgICAgIHZhciBwazIgPSBwazE7XG5cbiAgICAgIGZvciAoazEgPSAxOyBrMSA8PSBlbGVuayArIDE7IGsxKyspIHtcbiAgICAgICAgaWYgKGsxID4gZWxlbmspIHtcbiAgICAgICAgICAvLyBzZWFyY2ggdGhlIG5vZGVzIGluIGtcbiAgICAgICAgICBlID0gazsgLy8gbGlzdCBvZiBub2RlcyBzdGFydHMgYXQgY2luZGV4W3BqXVxuXG4gICAgICAgICAgcGogPSBwOyAvLyBsZW5ndGggb2YgbGlzdCBvZiBub2RlcyBpbiBrXG5cbiAgICAgICAgICBsbiA9IFdbbGVuICsga10gLSBlbGVuaztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBzZWFyY2ggdGhlIG5vZGVzIGluIGVcbiAgICAgICAgICBlID0gY2luZGV4W3ArK107XG4gICAgICAgICAgcGogPSBjcHRyW2VdOyAvLyBsZW5ndGggb2YgbGlzdCBvZiBub2RlcyBpbiBlXG5cbiAgICAgICAgICBsbiA9IFdbbGVuICsgZV07XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGsyID0gMTsgazIgPD0gbG47IGsyKyspIHtcbiAgICAgICAgICBpID0gY2luZGV4W3BqKytdOyAvLyBjaGVjayAgbm9kZSBpIGRlYWQsIG9yIHNlZW5cblxuICAgICAgICAgIGlmICgobnZpID0gV1tudiArIGldKSA8PSAwKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IC8vIFdbZGVncmVlICsgTGtdICs9IHNpemUgb2Ygbm9kZSBpXG5cblxuICAgICAgICAgIGRrICs9IG52aTsgLy8gbmVnYXRlIFdbbnYgKyBpXSB0byBkZW5vdGUgaSBpbiBMa1xuXG4gICAgICAgICAgV1tudiArIGldID0gLW52aTsgLy8gcGxhY2UgaSBpbiBMa1xuXG4gICAgICAgICAgY2luZGV4W3BrMisrXSA9IGk7XG5cbiAgICAgICAgICBpZiAoV1tuZXh0ICsgaV0gIT09IC0xKSB7XG4gICAgICAgICAgICBsYXN0W1dbbmV4dCArIGldXSA9IGxhc3RbaV07XG4gICAgICAgICAgfSAvLyBjaGVjayB3ZSBuZWVkIHRvIHJlbW92ZSBpIGZyb20gZGVncmVlIGxpc3RcblxuXG4gICAgICAgICAgaWYgKGxhc3RbaV0gIT09IC0xKSB7XG4gICAgICAgICAgICBXW25leHQgKyBsYXN0W2ldXSA9IFdbbmV4dCArIGldO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBXW2hlYWQgKyBXW2RlZ3JlZSArIGldXSA9IFdbbmV4dCArIGldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlICE9PSBrKSB7XG4gICAgICAgICAgLy8gYWJzb3JiIGUgaW50byBrXG4gICAgICAgICAgY3B0cltlXSA9ICgwLCBfY3NGbGlwLmNzRmxpcCkoayk7IC8vIGUgaXMgbm93IGEgZGVhZCBlbGVtZW50XG5cbiAgICAgICAgICBXW3cgKyBlXSA9IDA7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gY2luZGV4W2Nuei4uLm56bWF4XSBpcyBmcmVlXG5cblxuICAgICAgaWYgKGVsZW5rICE9PSAwKSB7XG4gICAgICAgIGNueiA9IHBrMjtcbiAgICAgIH0gLy8gZXh0ZXJuYWwgZGVncmVlIG9mIGsgLSB8TGtcXGl8XG5cblxuICAgICAgV1tkZWdyZWUgKyBrXSA9IGRrOyAvLyBlbGVtZW50IGsgaXMgaW4gY2luZGV4W3BrMS4ucGsyLTFdXG5cbiAgICAgIGNwdHJba10gPSBwazE7XG4gICAgICBXW2xlbiArIGtdID0gcGsyIC0gcGsxOyAvLyBrIGlzIG5vdyBhbiBlbGVtZW50XG5cbiAgICAgIFdbZWxlbiArIGtdID0gLTI7IC8vIEZpbmQgc2V0IGRpZmZlcmVuY2VzLiBUaGUgc2NhbjEgZnVuY3Rpb24gbm93IGNvbXB1dGVzIHRoZSBzZXQgZGlmZmVyZW5jZXMgfExlIFxcIExrfCBmb3IgYWxsIGVsZW1lbnRzIGUuIEF0IHRoZSBzdGFydCBvZiB0aGVcbiAgICAgIC8vIHNjYW4sIG5vIGVudHJ5IGluIHRoZSB3IGFycmF5IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBtYXJrLlxuICAgICAgLy8gY2xlYXIgdyBpZiBuZWNlc3NhcnlcblxuICAgICAgbWFyayA9IF93Y2xlYXIobWFyaywgbGVtYXgsIFcsIHcsIG4pOyAvLyBzY2FuIDE6IGZpbmQgfExlXFxMa3xcblxuICAgICAgZm9yIChwayA9IHBrMTsgcGsgPCBwazI7IHBrKyspIHtcbiAgICAgICAgaSA9IGNpbmRleFtwa107IC8vIGNoZWNrIGlmIFdbZWxlbiArIGldIGVtcHR5LCBza2lwIGl0XG5cbiAgICAgICAgaWYgKChlbG4gPSBXW2VsZW4gKyBpXSkgPD0gMCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IC8vIFdbbnYgKyBpXSB3YXMgbmVnYXRlZFxuXG5cbiAgICAgICAgbnZpID0gLVdbbnYgKyBpXTtcbiAgICAgICAgdmFyIHdudmkgPSBtYXJrIC0gbnZpOyAvLyBzY2FuIEVpXG5cbiAgICAgICAgZm9yIChwID0gY3B0cltpXSwgcDEgPSBjcHRyW2ldICsgZWxuIC0gMTsgcCA8PSBwMTsgcCsrKSB7XG4gICAgICAgICAgZSA9IGNpbmRleFtwXTtcblxuICAgICAgICAgIGlmIChXW3cgKyBlXSA+PSBtYXJrKSB7XG4gICAgICAgICAgICAvLyBkZWNyZW1lbnQgfExlXFxMa3xcbiAgICAgICAgICAgIFdbdyArIGVdIC09IG52aTtcbiAgICAgICAgICB9IGVsc2UgaWYgKFdbdyArIGVdICE9PSAwKSB7XG4gICAgICAgICAgICAvLyBlbnN1cmUgZSBpcyBhIGxpdmUgZWxlbWVudCwgMXN0IHRpbWUgZSBzZWVuIGluIHNjYW4gMVxuICAgICAgICAgICAgV1t3ICsgZV0gPSBXW2RlZ3JlZSArIGVdICsgd252aTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gZGVncmVlIHVwZGF0ZVxuICAgICAgLy8gVGhlIHNlY29uZCBwYXNzIGNvbXB1dGVzIHRoZSBhcHByb3hpbWF0ZSBkZWdyZWUgZGksIHBydW5lcyB0aGUgc2V0cyBFaSBhbmQgQWksIGFuZCBjb21wdXRlcyBhIGhhc2hcbiAgICAgIC8vIGZ1bmN0aW9uIGgoaSkgZm9yIGFsbCBub2RlcyBpbiBMay5cbiAgICAgIC8vIHNjYW4yOiBkZWdyZWUgdXBkYXRlXG5cblxuICAgICAgZm9yIChwayA9IHBrMTsgcGsgPCBwazI7IHBrKyspIHtcbiAgICAgICAgLy8gY29uc2lkZXIgbm9kZSBpIGluIExrXG4gICAgICAgIGkgPSBjaW5kZXhbcGtdO1xuICAgICAgICBwMSA9IGNwdHJbaV07XG4gICAgICAgIHAyID0gcDEgKyBXW2VsZW4gKyBpXSAtIDE7XG4gICAgICAgIHBuID0gcDE7IC8vIHNjYW4gRWlcblxuICAgICAgICBmb3IgKGggPSAwLCBkID0gMCwgcCA9IHAxOyBwIDw9IHAyOyBwKyspIHtcbiAgICAgICAgICBlID0gY2luZGV4W3BdOyAvLyBjaGVjayBlIGlzIGFuIHVuYWJzb3JiZWQgZWxlbWVudFxuXG4gICAgICAgICAgaWYgKFdbdyArIGVdICE9PSAwKSB7XG4gICAgICAgICAgICAvLyBkZXh0ID0gfExlXFxMa3xcbiAgICAgICAgICAgIHZhciBkZXh0ID0gV1t3ICsgZV0gLSBtYXJrO1xuXG4gICAgICAgICAgICBpZiAoZGV4dCA+IDApIHtcbiAgICAgICAgICAgICAgLy8gc3VtIHVwIHRoZSBzZXQgZGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgZCArPSBkZXh0OyAvLyBrZWVwIGUgaW4gRWlcblxuICAgICAgICAgICAgICBjaW5kZXhbcG4rK10gPSBlOyAvLyBjb21wdXRlIHRoZSBoYXNoIG9mIG5vZGUgaVxuXG4gICAgICAgICAgICAgIGggKz0gZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIGFnZ3Jlc3NpdmUgYWJzb3JiLiBlLT5rXG4gICAgICAgICAgICAgIGNwdHJbZV0gPSAoMCwgX2NzRmxpcC5jc0ZsaXApKGspOyAvLyBlIGlzIGEgZGVhZCBlbGVtZW50XG5cbiAgICAgICAgICAgICAgV1t3ICsgZV0gPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBXW2VsZW4gKyBpXSA9IHxFaXxcblxuXG4gICAgICAgIFdbZWxlbiArIGldID0gcG4gLSBwMSArIDE7XG4gICAgICAgIHZhciBwMyA9IHBuO1xuICAgICAgICB2YXIgcDQgPSBwMSArIFdbbGVuICsgaV07IC8vIHBydW5lIGVkZ2VzIGluIEFpXG5cbiAgICAgICAgZm9yIChwID0gcDIgKyAxOyBwIDwgcDQ7IHArKykge1xuICAgICAgICAgIGogPSBjaW5kZXhbcF07IC8vIGNoZWNrIG5vZGUgaiBkZWFkIG9yIGluIExrXG5cbiAgICAgICAgICB2YXIgbnZqID0gV1tudiArIGpdO1xuXG4gICAgICAgICAgaWYgKG52aiA8PSAwKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IC8vIGRlZ3JlZShpKSArPSB8anxcblxuXG4gICAgICAgICAgZCArPSBudmo7IC8vIHBsYWNlIGogaW4gbm9kZSBsaXN0IG9mIGlcblxuICAgICAgICAgIGNpbmRleFtwbisrXSA9IGo7IC8vIGNvbXB1dGUgaGFzaCBmb3Igbm9kZSBpXG5cbiAgICAgICAgICBoICs9IGo7XG4gICAgICAgIH0gLy8gY2hlY2sgZm9yIG1hc3MgZWxpbWluYXRpb25cblxuXG4gICAgICAgIGlmIChkID09PSAwKSB7XG4gICAgICAgICAgLy8gYWJzb3JiIGkgaW50byBrXG4gICAgICAgICAgY3B0cltpXSA9ICgwLCBfY3NGbGlwLmNzRmxpcCkoayk7XG4gICAgICAgICAgbnZpID0gLVdbbnYgKyBpXTsgLy8gfExrfCAtPSB8aXxcblxuICAgICAgICAgIGRrIC09IG52aTsgLy8gfGt8ICs9IFdbbnYgKyBpXVxuXG4gICAgICAgICAgbnZrICs9IG52aTtcbiAgICAgICAgICBuZWwgKz0gbnZpO1xuICAgICAgICAgIFdbbnYgKyBpXSA9IDA7IC8vIG5vZGUgaSBpcyBkZWFkXG5cbiAgICAgICAgICBXW2VsZW4gKyBpXSA9IC0xO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHVwZGF0ZSBkZWdyZWUoaSlcbiAgICAgICAgICBXW2RlZ3JlZSArIGldID0gTWF0aC5taW4oV1tkZWdyZWUgKyBpXSwgZCk7IC8vIG1vdmUgZmlyc3Qgbm9kZSB0byBlbmRcblxuICAgICAgICAgIGNpbmRleFtwbl0gPSBjaW5kZXhbcDNdOyAvLyBtb3ZlIDFzdCBlbC4gdG8gZW5kIG9mIEVpXG5cbiAgICAgICAgICBjaW5kZXhbcDNdID0gY2luZGV4W3AxXTsgLy8gYWRkIGsgYXMgMXN0IGVsZW1lbnQgaW4gb2YgRWlcblxuICAgICAgICAgIGNpbmRleFtwMV0gPSBrOyAvLyBuZXcgbGVuIG9mIGFkai4gbGlzdCBvZiBub2RlIGlcblxuICAgICAgICAgIFdbbGVuICsgaV0gPSBwbiAtIHAxICsgMTsgLy8gZmluYWxpemUgaGFzaCBvZiBpXG5cbiAgICAgICAgICBoID0gKGggPCAwID8gLWggOiBoKSAlIG47IC8vIHBsYWNlIGkgaW4gaGFzaCBidWNrZXRcblxuICAgICAgICAgIFdbbmV4dCArIGldID0gV1toaGVhZCArIGhdO1xuICAgICAgICAgIFdbaGhlYWQgKyBoXSA9IGk7IC8vIHNhdmUgaGFzaCBvZiBpIGluIGxhc3RbaV1cblxuICAgICAgICAgIGxhc3RbaV0gPSBoO1xuICAgICAgICB9XG4gICAgICB9IC8vIGZpbmFsaXplIHxMa3xcblxuXG4gICAgICBXW2RlZ3JlZSArIGtdID0gZGs7XG4gICAgICBsZW1heCA9IE1hdGgubWF4KGxlbWF4LCBkayk7IC8vIGNsZWFyIHdcblxuICAgICAgbWFyayA9IF93Y2xlYXIobWFyayArIGxlbWF4LCBsZW1heCwgVywgdywgbik7IC8vIFN1cGVybm9kZSBkZXRlY3Rpb24uIFN1cGVybm9kZSBkZXRlY3Rpb24gcmVsaWVzIG9uIHRoZSBoYXNoIGZ1bmN0aW9uIGgoaSkgY29tcHV0ZWQgZm9yIGVhY2ggbm9kZSBpLlxuICAgICAgLy8gSWYgdHdvIG5vZGVzIGhhdmUgaWRlbnRpY2FsIGFkamFjZW5jeSBsaXN0cywgdGhlaXIgaGFzaCBmdW5jdGlvbnMgd2lsIGJlIGlkZW50aWNhbC5cblxuICAgICAgZm9yIChwayA9IHBrMTsgcGsgPCBwazI7IHBrKyspIHtcbiAgICAgICAgaSA9IGNpbmRleFtwa107IC8vIGNoZWNrIGkgaXMgZGVhZCwgc2tpcCBpdFxuXG4gICAgICAgIGlmIChXW252ICsgaV0gPj0gMCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IC8vIHNjYW4gaGFzaCBidWNrZXQgb2Ygbm9kZSBpXG5cblxuICAgICAgICBoID0gbGFzdFtpXTtcbiAgICAgICAgaSA9IFdbaGhlYWQgKyBoXTsgLy8gaGFzaCBidWNrZXQgd2lsbCBiZSBlbXB0eVxuXG4gICAgICAgIFdbaGhlYWQgKyBoXSA9IC0xO1xuXG4gICAgICAgIGZvciAoOyBpICE9PSAtMSAmJiBXW25leHQgKyBpXSAhPT0gLTE7IGkgPSBXW25leHQgKyBpXSwgbWFyaysrKSB7XG4gICAgICAgICAgbG4gPSBXW2xlbiArIGldO1xuICAgICAgICAgIGVsbiA9IFdbZWxlbiArIGldO1xuXG4gICAgICAgICAgZm9yIChwID0gY3B0cltpXSArIDE7IHAgPD0gY3B0cltpXSArIGxuIC0gMTsgcCsrKSB7XG4gICAgICAgICAgICBXW3cgKyBjaW5kZXhbcF1dID0gbWFyaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgamxhc3QgPSBpOyAvLyBjb21wYXJlIGkgd2l0aCBhbGwgalxuXG4gICAgICAgICAgZm9yIChqID0gV1tuZXh0ICsgaV07IGogIT09IC0xOykge1xuICAgICAgICAgICAgdmFyIG9rID0gV1tsZW4gKyBqXSA9PT0gbG4gJiYgV1tlbGVuICsgal0gPT09IGVsbjtcblxuICAgICAgICAgICAgZm9yIChwID0gY3B0cltqXSArIDE7IG9rICYmIHAgPD0gY3B0cltqXSArIGxuIC0gMTsgcCsrKSB7XG4gICAgICAgICAgICAgIC8vIGNvbXBhcmUgaSBhbmQgalxuICAgICAgICAgICAgICBpZiAoV1t3ICsgY2luZGV4W3BdXSAhPT0gbWFyaykge1xuICAgICAgICAgICAgICAgIG9rID0gMDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSAvLyBjaGVjayBpIGFuZCBqIGFyZSBpZGVudGljYWxcblxuXG4gICAgICAgICAgICBpZiAob2spIHtcbiAgICAgICAgICAgICAgLy8gYWJzb3JiIGogaW50byBpXG4gICAgICAgICAgICAgIGNwdHJbal0gPSAoMCwgX2NzRmxpcC5jc0ZsaXApKGkpO1xuICAgICAgICAgICAgICBXW252ICsgaV0gKz0gV1tudiArIGpdO1xuICAgICAgICAgICAgICBXW252ICsgal0gPSAwOyAvLyBub2RlIGogaXMgZGVhZFxuXG4gICAgICAgICAgICAgIFdbZWxlbiArIGpdID0gLTE7IC8vIGRlbGV0ZSBqIGZyb20gaGFzaCBidWNrZXRcblxuICAgICAgICAgICAgICBqID0gV1tuZXh0ICsgal07XG4gICAgICAgICAgICAgIFdbbmV4dCArIGpsYXN0XSA9IGo7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBqIGFuZCBpIGFyZSBkaWZmZXJlbnRcbiAgICAgICAgICAgICAgamxhc3QgPSBqO1xuICAgICAgICAgICAgICBqID0gV1tuZXh0ICsgal07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IC8vIEZpbmFsaXplIG5ldyBlbGVtZW50LiBUaGUgZWxpbWluYXRpb24gb2Ygbm9kZSBrIGlzIG5lYXJseSBjb21wbGV0ZS4gQWxsIG5vZGVzIGkgaW4gTGsgYXJlIHNjYW5uZWQgb25lIGxhc3QgdGltZS5cbiAgICAgIC8vIE5vZGUgaSBpcyByZW1vdmVkIGZyb20gTGsgaWYgaXQgaXMgZGVhZC4gVGhlIGZsYWdnZWQgc3RhdHVzIG9mIG52W2ldIGlzIGNsZWFyZWQuXG5cblxuICAgICAgZm9yIChwID0gcGsxLCBwayA9IHBrMTsgcGsgPCBwazI7IHBrKyspIHtcbiAgICAgICAgaSA9IGNpbmRleFtwa107IC8vIGNoZWNrICBpIGlzIGRlYWQsIHNraXAgaXRcblxuICAgICAgICBpZiAoKG52aSA9IC1XW252ICsgaV0pIDw9IDApIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSAvLyByZXN0b3JlIFdbbnYgKyBpXVxuXG5cbiAgICAgICAgV1tudiArIGldID0gbnZpOyAvLyBjb21wdXRlIGV4dGVybmFsIGRlZ3JlZShpKVxuXG4gICAgICAgIGQgPSBXW2RlZ3JlZSArIGldICsgZGsgLSBudmk7XG4gICAgICAgIGQgPSBNYXRoLm1pbihkLCBuIC0gbmVsIC0gbnZpKTtcblxuICAgICAgICBpZiAoV1toZWFkICsgZF0gIT09IC0xKSB7XG4gICAgICAgICAgbGFzdFtXW2hlYWQgKyBkXV0gPSBpO1xuICAgICAgICB9IC8vIHB1dCBpIGJhY2sgaW4gZGVncmVlIGxpc3RcblxuXG4gICAgICAgIFdbbmV4dCArIGldID0gV1toZWFkICsgZF07XG4gICAgICAgIGxhc3RbaV0gPSAtMTtcbiAgICAgICAgV1toZWFkICsgZF0gPSBpOyAvLyBmaW5kIG5ldyBtaW5pbXVtIGRlZ3JlZVxuXG4gICAgICAgIG1pbmRlZyA9IE1hdGgubWluKG1pbmRlZywgZCk7XG4gICAgICAgIFdbZGVncmVlICsgaV0gPSBkOyAvLyBwbGFjZSBpIGluIExrXG5cbiAgICAgICAgY2luZGV4W3ArK10gPSBpO1xuICAgICAgfSAvLyAjIG5vZGVzIGFic29yYmVkIGludG8ga1xuXG5cbiAgICAgIFdbbnYgKyBrXSA9IG52azsgLy8gbGVuZ3RoIG9mIGFkaiBsaXN0IG9mIGVsZW1lbnQga1xuXG4gICAgICBpZiAoKFdbbGVuICsga10gPSBwIC0gcGsxKSA9PT0gMCkge1xuICAgICAgICAvLyBrIGlzIGEgcm9vdCBvZiB0aGUgdHJlZVxuICAgICAgICBjcHRyW2tdID0gLTE7IC8vIGsgaXMgbm93IGEgZGVhZCBlbGVtZW50XG5cbiAgICAgICAgV1t3ICsga10gPSAwO1xuICAgICAgfVxuXG4gICAgICBpZiAoZWxlbmsgIT09IDApIHtcbiAgICAgICAgLy8gZnJlZSB1bnVzZWQgc3BhY2UgaW4gTGtcbiAgICAgICAgY256ID0gcDtcbiAgICAgIH1cbiAgICB9IC8vIFBvc3RvcmRlcmluZy4gVGhlIGVsaW1pbmF0aW9uIGlzIGNvbXBsZXRlLCBidXQgbm8gcGVybXV0YXRpb24gaGFzIGJlZW4gY29tcHV0ZWQuIEFsbCB0aGF0IGlzIGxlZnRcbiAgICAvLyBvZiB0aGUgZ3JhcGggaXMgdGhlIGFzc2VtYmx5IHRyZWUgKHB0cikgYW5kIGEgc2V0IG9mIGRlYWQgbm9kZXMgYW5kIGVsZW1lbnRzIChpIGlzIGEgZGVhZCBub2RlIGlmXG4gICAgLy8gbnZbaV0gaXMgemVybyBhbmQgYSBkZWFkIGVsZW1lbnQgaWYgbnZbaV0gPiAwKS4gSXQgaXMgZnJvbSB0aGlzIGluZm9ybWF0aW9uIG9ubHkgdGhhdCB0aGUgZmluYWwgcGVybXV0YXRpb25cbiAgICAvLyBpcyBjb21wdXRlZC4gVGhlIHRyZWUgaXMgcmVzdG9yZWQgYnkgdW5mbGlwcGluZyBhbGwgb2YgcHRyLlxuICAgIC8vIGZpeCBhc3NlbWJseSB0cmVlXG5cblxuICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgIGNwdHJbaV0gPSAoMCwgX2NzRmxpcC5jc0ZsaXApKGNwdHJbaV0pO1xuICAgIH1cblxuICAgIGZvciAoaiA9IDA7IGogPD0gbjsgaisrKSB7XG4gICAgICBXW2hlYWQgKyBqXSA9IC0xO1xuICAgIH0gLy8gcGxhY2UgdW5vcmRlcmVkIG5vZGVzIGluIGxpc3RzXG5cblxuICAgIGZvciAoaiA9IG47IGogPj0gMDsgai0tKSB7XG4gICAgICAvLyBza2lwIGlmIGogaXMgYW4gZWxlbWVudFxuICAgICAgaWYgKFdbbnYgKyBqXSA+IDApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IC8vIHBsYWNlIGogaW4gbGlzdCBvZiBpdHMgcGFyZW50XG5cblxuICAgICAgV1tuZXh0ICsgal0gPSBXW2hlYWQgKyBjcHRyW2pdXTtcbiAgICAgIFdbaGVhZCArIGNwdHJbal1dID0gajtcbiAgICB9IC8vIHBsYWNlIGVsZW1lbnRzIGluIGxpc3RzXG5cblxuICAgIGZvciAoZSA9IG47IGUgPj0gMDsgZS0tKSB7XG4gICAgICAvLyBza2lwIHVubGVzcyBlIGlzIGFuIGVsZW1lbnRcbiAgICAgIGlmIChXW252ICsgZV0gPD0gMCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNwdHJbZV0gIT09IC0xKSB7XG4gICAgICAgIC8vIHBsYWNlIGUgaW4gbGlzdCBvZiBpdHMgcGFyZW50XG4gICAgICAgIFdbbmV4dCArIGVdID0gV1toZWFkICsgY3B0cltlXV07XG4gICAgICAgIFdbaGVhZCArIGNwdHJbZV1dID0gZTtcbiAgICAgIH1cbiAgICB9IC8vIHBvc3RvcmRlciB0aGUgYXNzZW1ibHkgdHJlZVxuXG5cbiAgICBmb3IgKGsgPSAwLCBpID0gMDsgaSA8PSBuOyBpKyspIHtcbiAgICAgIGlmIChjcHRyW2ldID09PSAtMSkge1xuICAgICAgICBrID0gKDAsIF9jc1RkZnMuY3NUZGZzKShpLCBrLCBXLCBoZWFkLCBuZXh0LCBQLCB3KTtcbiAgICAgIH1cbiAgICB9IC8vIHJlbW92ZSBsYXN0IGl0ZW0gaW4gYXJyYXlcblxuXG4gICAgUC5zcGxpY2UoUC5sZW5ndGggLSAxLCAxKTsgLy8gcmV0dXJuIFBcblxuICAgIHJldHVybiBQO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgbWF0cml4IHRoYXQgd2lsbCBiZSB1c2VkIGJ5IHRoZSBhcHByb3hpbWF0ZSBtaW5pbXVtIGRlZ3JlZSBvcmRlcmluZyBhbGdvcml0aG0uIFRoZSBmdW5jdGlvbiBhY2NlcHRzIHRoZSBtYXRyaXggTSBhcyBpbnB1dCBhbmQgcmV0dXJucyBhIHBlcm11dGF0aW9uXG4gICAqIHZlY3RvciBQLiBUaGUgYW1kIGFsZ29yaXRobSBvcGVyYXRlcyBvbiBhIHN5bW1ldHJpeCBtYXRyaXgsIHNvIG9uZSBvZiB0aHJlZSBzeW1tZXRyaWMgbWF0cmljZXMgaXMgZm9ybWVkLlxuICAgKlxuICAgKiBPcmRlcjogMFxuICAgKiAgIEEgbmF0dXJhbCBvcmRlcmluZyBQPW51bGwgbWF0cml4IGlzIHJldHVybmVkLlxuICAgKlxuICAgKiBPcmRlcjogMVxuICAgKiAgIE1hdHJpeCBtdXN0IGJlIHNxdWFyZS4gVGhpcyBpcyBhcHByb3ByaWF0ZSBmb3IgYSBDaG9sZXNreSBvciBMVSBmYWN0b3JpemF0aW9uLlxuICAgKiAgIFAgPSBNICsgTSdcbiAgICpcbiAgICogT3JkZXI6IDJcbiAgICogICBEZW5zZSBjb2x1bW5zIGZyb20gTScgYXJlIGRyb3BwZWQsIE0gcmVjcmVhdGVkIGZyb20gTScuIFRoaXMgaXMgYXBwcm9wcmlhdGVmb3IgTFUgZmFjdG9yaXphdGlvbiBvZiB1bnN5bW1ldHJpYyBtYXRyaWNlcy5cbiAgICogICBQID0gTScgKiBNXG4gICAqXG4gICAqIE9yZGVyOiAzXG4gICAqICAgVGhpcyBpcyBiZXN0IHVzZWQgZm9yIFFSIGZhY3Rvcml6YXRpb24gb3IgTFUgZmFjdG9yaXphdGlvbiBpcyBtYXRyaXggTSBoYXMgbm8gZGVuc2Ugcm93cy4gQSBkZW5zZSByb3cgaXMgYSByb3cgd2l0aCBtb3JlIHRoYW4gMTAqc3FyKGNvbHVtbnMpIGVudHJpZXMuXG4gICAqICAgUCA9IE0nICogTVxuICAgKi9cblxuICBmdW5jdGlvbiBfY3JlYXRlVGFyZ2V0TWF0cml4KG9yZGVyLCBhLCBtLCBuLCBkZW5zZSkge1xuICAgIC8vIGNvbXB1dGUgQSdcbiAgICB2YXIgYXQgPSB0cmFuc3Bvc2UoYSk7IC8vIGNoZWNrIG9yZGVyID0gMSwgbWF0cml4IG11c3QgYmUgc3F1YXJlXG5cbiAgICBpZiAob3JkZXIgPT09IDEgJiYgbiA9PT0gbSkge1xuICAgICAgLy8gQyA9IEEgKyBBJ1xuICAgICAgcmV0dXJuIGFkZChhLCBhdCk7XG4gICAgfSAvLyBjaGVjayBvcmRlciA9IDIsIGRyb3AgZGVuc2UgY29sdW1ucyBmcm9tIE0nXG5cblxuICAgIGlmIChvcmRlciA9PT0gMikge1xuICAgICAgLy8gdHJhbnNwb3NlIGFycmF5c1xuICAgICAgdmFyIHRpbmRleCA9IGF0Ll9pbmRleDtcbiAgICAgIHZhciB0cHRyID0gYXQuX3B0cjsgLy8gbmV3IGNvbHVtbiBpbmRleFxuXG4gICAgICB2YXIgcDIgPSAwOyAvLyBsb29wIEEnIGNvbHVtbnMgKHJvd3MpXG5cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbTsgaisrKSB7XG4gICAgICAgIC8vIGNvbHVtbiBqIG9mIEFUIHN0YXJ0cyBoZXJlXG4gICAgICAgIHZhciBwID0gdHB0cltqXTsgLy8gbmV3IGNvbHVtbiBqIHN0YXJ0cyBoZXJlXG5cbiAgICAgICAgdHB0cltqXSA9IHAyOyAvLyBza2lwIGRlbnNlIGNvbCBqXG5cbiAgICAgICAgaWYgKHRwdHJbaiArIDFdIC0gcCA+IGRlbnNlKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gLy8gbWFwIHJvd3MgaW4gY29sdW1uIGogb2YgQVxuXG5cbiAgICAgICAgZm9yICh2YXIgcDEgPSB0cHRyW2ogKyAxXTsgcCA8IHAxOyBwKyspIHtcbiAgICAgICAgICB0aW5kZXhbcDIrK10gPSB0aW5kZXhbcF07XG4gICAgICAgIH1cbiAgICAgIH0gLy8gZmluYWxpemUgQVRcblxuXG4gICAgICB0cHRyW21dID0gcDI7IC8vIHJlY3JlYXRlIEEgZnJvbSBuZXcgdHJhbnNwb3NlIG1hdHJpeFxuXG4gICAgICBhID0gdHJhbnNwb3NlKGF0KTsgLy8gdXNlIEEnICogQVxuXG4gICAgICByZXR1cm4gbXVsdGlwbHkoYXQsIGEpO1xuICAgIH0gLy8gdXNlIEEnICogQSwgc3F1YXJlIG9yIHJlY3Rhbmd1bGFyIG1hdHJpeFxuXG5cbiAgICByZXR1cm4gbXVsdGlwbHkoYXQsIGEpO1xuICB9XG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHF1b3RpZW50IGdyYXBoLiBUaGVyZSBhcmUgZm91ciBraW5kIG9mIG5vZGVzIGFuZCBlbGVtZW50cyB0aGF0IG11c3QgYmUgcmVwcmVzZW50ZWQ6XG4gICAqXG4gICAqICAtIEEgbGl2ZSBub2RlIGlzIGEgbm9kZSBpIChvciBhIHN1cGVybm9kZSkgdGhhdCBoYXMgbm90IGJlZW4gc2VsZWN0ZWQgYXMgYSBwaXZvdCBuYWQgaGFzIG5vdCBiZWVuIG1lcmdlZCBpbnRvIGFub3RoZXIgc3VwZXJub2RlLlxuICAgKiAgLSBBIGRlYWQgbm9kZSBpIGlzIG9uZSB0aGF0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgZ3JhcGgsIGhhdmluZyBiZWVuIGFic29ydmVkIGludG8gciA9IGZsaXAocHRyW2ldKS5cbiAgICogIC0gQSBsaXZlIGVsZW1lbnQgZSBpcyBvbmUgdGhhdCBpcyBpbiB0aGUgZ3JhcGgsIGhhdmluZyBiZWVuIGZvcm1lZCB3aGVuIG5vZGUgZSB3YXMgc2VsZWN0ZWQgYXMgdGhlIHBpdm90LlxuICAgKiAgLSBBIGRlYWQgZWxlbWVudCBlIGlzIG9uZSB0aGF0IGhhcyBiZW5uIGFic29ydmVkIGludG8gYSBzdWJzZXF1ZW50IGVsZW1lbnQgcyA9IGZsaXAocHRyW2VdKS5cbiAgICovXG5cblxuICBmdW5jdGlvbiBfaW5pdGlhbGl6ZVF1b3RpZW50R3JhcGgobiwgY3B0ciwgVywgbGVuLCBoZWFkLCBsYXN0LCBuZXh0LCBoaGVhZCwgbnYsIHcsIGVsZW4sIGRlZ3JlZSkge1xuICAgIC8vIEluaXRpYWxpemUgcXVvdGllbnQgZ3JhcGhcbiAgICBmb3IgKHZhciBrID0gMDsgayA8IG47IGsrKykge1xuICAgICAgV1tsZW4gKyBrXSA9IGNwdHJbayArIDFdIC0gY3B0cltrXTtcbiAgICB9XG5cbiAgICBXW2xlbiArIG5dID0gMDsgLy8gaW5pdGlhbGl6ZSB3b3Jrc3BhY2VcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IG47IGkrKykge1xuICAgICAgLy8gZGVncmVlIGxpc3QgaSBpcyBlbXB0eVxuICAgICAgV1toZWFkICsgaV0gPSAtMTtcbiAgICAgIGxhc3RbaV0gPSAtMTtcbiAgICAgIFdbbmV4dCArIGldID0gLTE7IC8vIGhhc2ggbGlzdCBpIGlzIGVtcHR5XG5cbiAgICAgIFdbaGhlYWQgKyBpXSA9IC0xOyAvLyBub2RlIGkgaXMganVzdCBvbmUgbm9kZVxuXG4gICAgICBXW252ICsgaV0gPSAxOyAvLyBub2RlIGkgaXMgYWxpdmVcblxuICAgICAgV1t3ICsgaV0gPSAxOyAvLyBFayBvZiBub2RlIGkgaXMgZW1wdHlcblxuICAgICAgV1tlbGVuICsgaV0gPSAwOyAvLyBkZWdyZWUgb2Ygbm9kZSBpXG5cbiAgICAgIFdbZGVncmVlICsgaV0gPSBXW2xlbiArIGldO1xuICAgIH0gLy8gY2xlYXIgd1xuXG5cbiAgICB2YXIgbWFyayA9IF93Y2xlYXIoMCwgMCwgVywgdywgbik7IC8vIG4gaXMgYSBkZWFkIGVsZW1lbnRcblxuXG4gICAgV1tlbGVuICsgbl0gPSAtMjsgLy8gbiBpcyBhIHJvb3Qgb2YgYXNzZW1ibHkgdHJlZVxuXG4gICAgY3B0cltuXSA9IC0xOyAvLyBuIGlzIGEgZGVhZCBlbGVtZW50XG5cbiAgICBXW3cgKyBuXSA9IDA7IC8vIHJldHVybiBtYXJrXG5cbiAgICByZXR1cm4gbWFyaztcbiAgfVxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBkZWdyZWUgbGlzdHMuIEVhY2ggbm9kZSBpcyBwbGFjZWQgaW4gaXRzIGRlZ3JlZSBsaXN0cy4gTm9kZXMgb2YgemVybyBkZWdyZWUgYXJlIGVsaW1pbmF0ZWQgaW1tZWRpYXRlbHkuIE5vZGVzIHdpdGhcbiAgICogZGVncmVlID49IGRlbnNlIGFyZSBhbHNvbCBlbGltaW5hdGVkIGFuZCBtZXJnZWQgaW50byBhIHBsYWNlaG9sZGVyIG5vZGUgbiwgYSBkZWFkIGVsZW1lbnQuIFRoZXMgbm9kZXMgd2lsbCBhcHBlcmEgbGFzdCBpbiB0aGVcbiAgICogb3V0cHV0IHBlcm11dGF0aW9uIHAuXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX2luaXRpYWxpemVEZWdyZWVMaXN0cyhuLCBjcHRyLCBXLCBkZWdyZWUsIGVsZW4sIHcsIGRlbnNlLCBudiwgaGVhZCwgbGFzdCwgbmV4dCkge1xuICAgIC8vIHJlc3VsdFxuICAgIHZhciBuZWwgPSAwOyAvLyBsb29wIGNvbHVtbnNcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAvLyBkZWdyZWUgQCBpXG4gICAgICB2YXIgZCA9IFdbZGVncmVlICsgaV07IC8vIGNoZWNrIG5vZGUgaSBpcyBlbXB0eVxuXG4gICAgICBpZiAoZCA9PT0gMCkge1xuICAgICAgICAvLyBlbGVtZW50IGkgaXMgZGVhZFxuICAgICAgICBXW2VsZW4gKyBpXSA9IC0yO1xuICAgICAgICBuZWwrKzsgLy8gaSBpcyBhIHJvb3Qgb2YgYXNzZW1ibHkgdHJlZVxuXG4gICAgICAgIGNwdHJbaV0gPSAtMTtcbiAgICAgICAgV1t3ICsgaV0gPSAwO1xuICAgICAgfSBlbHNlIGlmIChkID4gZGVuc2UpIHtcbiAgICAgICAgLy8gYWJzb3JiIGkgaW50byBlbGVtZW50IG5cbiAgICAgICAgV1tudiArIGldID0gMDsgLy8gbm9kZSBpIGlzIGRlYWRcblxuICAgICAgICBXW2VsZW4gKyBpXSA9IC0xO1xuICAgICAgICBuZWwrKztcbiAgICAgICAgY3B0cltpXSA9ICgwLCBfY3NGbGlwLmNzRmxpcCkobik7XG4gICAgICAgIFdbbnYgKyBuXSsrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGggPSBXW2hlYWQgKyBkXTtcblxuICAgICAgICBpZiAoaCAhPT0gLTEpIHtcbiAgICAgICAgICBsYXN0W2hdID0gaTtcbiAgICAgICAgfSAvLyBwdXQgbm9kZSBpIGluIGRlZ3JlZSBsaXN0IGRcblxuXG4gICAgICAgIFdbbmV4dCArIGldID0gV1toZWFkICsgZF07XG4gICAgICAgIFdbaGVhZCArIGRdID0gaTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmVsO1xuICB9XG5cbiAgZnVuY3Rpb24gX3djbGVhcihtYXJrLCBsZW1heCwgVywgdywgbikge1xuICAgIGlmIChtYXJrIDwgMiB8fCBtYXJrICsgbGVtYXggPCAwKSB7XG4gICAgICBmb3IgKHZhciBrID0gMDsgayA8IG47IGsrKykge1xuICAgICAgICBpZiAoV1t3ICsga10gIT09IDApIHtcbiAgICAgICAgICBXW3cgKyBrXSA9IDE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbWFyayA9IDI7XG4gICAgfSAvLyBhdCB0aGlzIHBvaW50LCBXIFswLi5uLTFdIDwgbWFyayBob2xkc1xuXG5cbiAgICByZXR1cm4gbWFyaztcbiAgfVxuXG4gIGZ1bmN0aW9uIF9kaWFnKGksIGopIHtcbiAgICByZXR1cm4gaSAhPT0gajtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZUNzQW1kID0gY3JlYXRlQ3NBbWQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNzQ291bnRzID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jc0xlYWYgPSByZXF1aXJlKFwiLi9jc0xlYWZcIik7XG5cbnZhciBuYW1lID0gJ2NzQ291bnRzJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3RyYW5zcG9zZSddO1xudmFyIGNyZWF0ZUNzQ291bnRzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHRyYW5zcG9zZSA9IF9yZWYudHJhbnNwb3NlO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlcyB0aGUgY29sdW1uIGNvdW50cyB1c2luZyB0aGUgdXBwZXIgdHJpYW5ndWxhciBwYXJ0IG9mIEEuXG4gICAqIEl0IHRyYW5zcG9zZXMgQSBpbnRlcm5hbGx5LCBub25lIG9mIHRoZSBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBtb2RpZmllZC5cbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9IGEgICAgICAgICAgIFRoZSBzcGFyc2UgbWF0cml4IEFcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9IGF0YSAgICAgICAgIENvdW50IHRoZSBjb2x1bW5zIG9mIEEnQSBpbnN0ZWFkXG4gICAqXG4gICAqIEByZXR1cm4gICAgICAgICAgICAgICAgICAgICBBbiBhcnJheSBvZiBzaXplIG4gb2YgdGhlIGNvbHVtbiBjb3VudHMgb3IgbnVsbCBvbiBlcnJvclxuICAgKlxuICAgKiBSZWZlcmVuY2U6IGh0dHA6Ly9mYWN1bHR5LmNzZS50YW11LmVkdS9kYXZpcy9wdWJsaWNhdGlvbnMuaHRtbFxuICAgKi9cbiAgcmV0dXJuIGZ1bmN0aW9uIChhLCBwYXJlbnQsIHBvc3QsIGF0YSkge1xuICAgIC8vIGNoZWNrIGlucHV0c1xuICAgIGlmICghYSB8fCAhcGFyZW50IHx8ICFwb3N0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IC8vIGEgbWF0cml4IGFycmF5c1xuXG5cbiAgICB2YXIgYXNpemUgPSBhLl9zaXplOyAvLyByb3dzIGFuZCBjb2x1bW5zXG5cbiAgICB2YXIgbSA9IGFzaXplWzBdO1xuICAgIHZhciBuID0gYXNpemVbMV07IC8vIHZhcmlhYmxlc1xuXG4gICAgdmFyIGksIGosIGssIEosIHAsIHAwLCBwMTsgLy8gd29ya3NwYWNlIHNpemVcblxuICAgIHZhciBzID0gNCAqIG4gKyAoYXRhID8gbiArIG0gKyAxIDogMCk7IC8vIGFsbG9jYXRlIHdvcmtzcGFjZVxuXG4gICAgdmFyIHcgPSBbXTsgLy8gKHMpXG5cbiAgICB2YXIgYW5jZXN0b3IgPSAwOyAvLyBmaXJzdCBuIGVudHJpZXNcblxuICAgIHZhciBtYXhmaXJzdCA9IG47IC8vIG5leHQgbiBlbnRyaWVzXG5cbiAgICB2YXIgcHJldmxlYWYgPSAyICogbjsgLy8gbmV4dCBuIGVudHJpZXNcblxuICAgIHZhciBmaXJzdCA9IDMgKiBuOyAvLyBuZXh0IG4gZW50cmllc1xuXG4gICAgdmFyIGhlYWQgPSA0ICogbjsgLy8gbmV4dCBuICsgMSBlbnRyaWVzICh1c2VkIHdoZW4gYXRhIGlzIHRydWUpXG5cbiAgICB2YXIgbmV4dCA9IDUgKiBuICsgMTsgLy8gbGFzdCBlbnRyaWVzIGluIHdvcmtzcGFjZVxuICAgIC8vIGNsZWFyIHdvcmtzcGFjZSB3WzAuLnMtMV1cblxuICAgIGZvciAoayA9IDA7IGsgPCBzOyBrKyspIHtcbiAgICAgIHdba10gPSAtMTtcbiAgICB9IC8vIGFsbG9jYXRlIHJlc3VsdFxuXG5cbiAgICB2YXIgY29sY291bnQgPSBbXTsgLy8gKG4pXG4gICAgLy8gQVQgPSBBJ1xuXG4gICAgdmFyIGF0ID0gdHJhbnNwb3NlKGEpOyAvLyBhdCBhcnJheXNcblxuICAgIHZhciB0aW5kZXggPSBhdC5faW5kZXg7XG4gICAgdmFyIHRwdHIgPSBhdC5fcHRyOyAvLyBmaW5kIHdbZmlyc3QgKyBqXVxuXG4gICAgZm9yIChrID0gMDsgayA8IG47IGsrKykge1xuICAgICAgaiA9IHBvc3Rba107IC8vIGNvbGNvdW50W2pdPTEgaWYgaiBpcyBhIGxlYWZcblxuICAgICAgY29sY291bnRbal0gPSB3W2ZpcnN0ICsgal0gPT09IC0xID8gMSA6IDA7XG5cbiAgICAgIGZvciAoOyBqICE9PSAtMSAmJiB3W2ZpcnN0ICsgal0gPT09IC0xOyBqID0gcGFyZW50W2pdKSB7XG4gICAgICAgIHdbZmlyc3QgKyBqXSA9IGs7XG4gICAgICB9XG4gICAgfSAvLyBpbml0aWFsaXplIGF0YSBpZiBuZWVkZWRcblxuXG4gICAgaWYgKGF0YSkge1xuICAgICAgLy8gaW52ZXJ0IHBvc3RcbiAgICAgIGZvciAoayA9IDA7IGsgPCBuOyBrKyspIHtcbiAgICAgICAgd1twb3N0W2tdXSA9IGs7XG4gICAgICB9IC8vIGxvb3Agcm93cyAoY29sdW1ucyBpbiBBVClcblxuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgIC8vIHZhbHVlcyBpbiBjb2x1bW4gaSBvZiBBVFxuICAgICAgICBmb3IgKGsgPSBuLCBwMCA9IHRwdHJbaV0sIHAxID0gdHB0cltpICsgMV0sIHAgPSBwMDsgcCA8IHAxOyBwKyspIHtcbiAgICAgICAgICBrID0gTWF0aC5taW4oaywgd1t0aW5kZXhbcF1dKTtcbiAgICAgICAgfSAvLyBwbGFjZSByb3cgaSBpbiBsaW5rZWQgbGlzdCBrXG5cblxuICAgICAgICB3W25leHQgKyBpXSA9IHdbaGVhZCArIGtdO1xuICAgICAgICB3W2hlYWQgKyBrXSA9IGk7XG4gICAgICB9XG4gICAgfSAvLyBlYWNoIG5vZGUgaW4gaXRzIG93biBzZXRcblxuXG4gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgd1thbmNlc3RvciArIGldID0gaTtcbiAgICB9XG5cbiAgICBmb3IgKGsgPSAwOyBrIDwgbjsgaysrKSB7XG4gICAgICAvLyBqIGlzIHRoZSBrdGggbm9kZSBpbiBwb3N0b3JkZXJlZCBldHJlZVxuICAgICAgaiA9IHBvc3Rba107IC8vIGNoZWNrIGogaXMgbm90IGEgcm9vdFxuXG4gICAgICBpZiAocGFyZW50W2pdICE9PSAtMSkge1xuICAgICAgICBjb2xjb3VudFtwYXJlbnRbal1dLS07XG4gICAgICB9IC8vIEo9aiBmb3IgTEwnPUEgY2FzZVxuXG5cbiAgICAgIGZvciAoSiA9IGF0YSA/IHdbaGVhZCArIGtdIDogajsgSiAhPT0gLTE7IEogPSBhdGEgPyB3W25leHQgKyBKXSA6IC0xKSB7XG4gICAgICAgIGZvciAocCA9IHRwdHJbSl07IHAgPCB0cHRyW0ogKyAxXTsgcCsrKSB7XG4gICAgICAgICAgaSA9IHRpbmRleFtwXTtcbiAgICAgICAgICB2YXIgciA9ICgwLCBfY3NMZWFmLmNzTGVhZikoaSwgaiwgdywgZmlyc3QsIG1heGZpcnN0LCBwcmV2bGVhZiwgYW5jZXN0b3IpOyAvLyBjaGVjayBBKGksaikgaXMgaW4gc2tlbGV0b25cblxuICAgICAgICAgIGlmIChyLmpsZWFmID49IDEpIHtcbiAgICAgICAgICAgIGNvbGNvdW50W2pdKys7XG4gICAgICAgICAgfSAvLyBjaGVjayBhY2NvdW50IGZvciBvdmVybGFwIGluIHFcblxuXG4gICAgICAgICAgaWYgKHIuamxlYWYgPT09IDIpIHtcbiAgICAgICAgICAgIGNvbGNvdW50W3IucV0tLTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHBhcmVudFtqXSAhPT0gLTEpIHtcbiAgICAgICAgd1thbmNlc3RvciArIGpdID0gcGFyZW50W2pdO1xuICAgICAgfVxuICAgIH0gLy8gc3VtIHVwIGNvbGNvdW50J3Mgb2YgZWFjaCBjaGlsZFxuXG5cbiAgICBmb3IgKGogPSAwOyBqIDwgbjsgaisrKSB7XG4gICAgICBpZiAocGFyZW50W2pdICE9PSAtMSkge1xuICAgICAgICBjb2xjb3VudFtwYXJlbnRbal1dICs9IGNvbGNvdW50W2pdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb2xjb3VudDtcbiAgfTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVDc0NvdW50cyA9IGNyZWF0ZUNzQ291bnRzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jc0RmcyA9IGNzRGZzO1xuXG52YXIgX2NzTWFya2VkID0gcmVxdWlyZShcIi4vY3NNYXJrZWRcIik7XG5cbnZhciBfY3NNYXJrID0gcmVxdWlyZShcIi4vY3NNYXJrXCIpO1xuXG52YXIgX2NzVW5mbGlwID0gcmVxdWlyZShcIi4vY3NVbmZsaXBcIik7XG5cbi8qKlxuICogRGVwdGgtZmlyc3Qgc2VhcmNoIGNvbXB1dGVzIHRoZSBub256ZXJvIHBhdHRlcm4geGkgb2YgdGhlIGRpcmVjdGVkIGdyYXBoIEcgKE1hdHJpeCkgc3RhcnRpbmdcbiAqIGF0IG5vZGVzIGluIEIgKHNlZSBjc1JlYWNoKCkpLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSAgaiAgICAgICAgICAgICAgIFRoZSBzdGFydGluZyBub2RlIGZvciB0aGUgREZTIGFsZ29yaXRobVxuICogQHBhcmFtIHtNYXRyaXh9ICBnICAgICAgICAgICAgICAgVGhlIEcgbWF0cml4IHRvIHNlYXJjaCwgcHRyIGFycmF5IG1vZGlmaWVkLCB0aGVuIHJlc3RvcmVkXG4gKiBAcGFyYW0ge051bWJlcn0gIHRvcCAgICAgICAgICAgICBTdGFydCBpbmRleCBpbiBzdGFjayB4aVt0b3AuLm4tMV1cbiAqIEBwYXJhbSB7TnVtYmVyfSAgayAgICAgICAgICAgICAgIFRoZSBrdGggY29sdW1uIGluIEJcbiAqIEBwYXJhbSB7QXJyYXl9ICAgeGkgICAgICAgICAgICAgIFRoZSBub256ZXJvIHBhdHRlcm4geGlbdG9wXSAuLiB4aVtuIC0gMV0sIGFuIGFycmF5IG9mIHNpemUgPSAyICogblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZpcnN0IG4gZW50cmllcyBpcyB0aGUgbm9uemVybyBwYXR0ZXJuLCB0aGUgbGFzdCBuIGVudHJpZXMgaXMgdGhlIHN0YWNrXG4gKiBAcGFyYW0ge0FycmF5fSAgIHBpbnYgICAgICAgICAgICBUaGUgaW52ZXJzZSByb3cgcGVybXV0YXRpb24gdmVjdG9yLCBtdXN0IGJlIG51bGwgZm9yIEwgKiB4ID0gYlxuICpcbiAqIEByZXR1cm4ge051bWJlcn0gICAgICAgICAgICAgICAgIE5ldyB2YWx1ZSBvZiB0b3BcbiAqXG4gKiBSZWZlcmVuY2U6IGh0dHA6Ly9mYWN1bHR5LmNzZS50YW11LmVkdS9kYXZpcy9wdWJsaWNhdGlvbnMuaHRtbFxuICovXG5mdW5jdGlvbiBjc0RmcyhqLCBnLCB0b3AsIHhpLCBwaW52KSB7XG4gIC8vIGcgYXJyYXlzXG4gIHZhciBpbmRleCA9IGcuX2luZGV4O1xuICB2YXIgcHRyID0gZy5fcHRyO1xuICB2YXIgc2l6ZSA9IGcuX3NpemU7IC8vIGNvbHVtbnNcblxuICB2YXIgbiA9IHNpemVbMV07IC8vIHZhcnNcblxuICB2YXIgaSwgcCwgcDI7IC8vIGluaXRpYWxpemUgaGVhZFxuXG4gIHZhciBoZWFkID0gMDsgLy8gaW5pdGlhbGl6ZSB0aGUgcmVjdXJzaW9uIHN0YWNrXG5cbiAgeGlbMF0gPSBqOyAvLyBsb29wXG5cbiAgd2hpbGUgKGhlYWQgPj0gMCkge1xuICAgIC8vIGdldCBqIGZyb20gdGhlIHRvcCBvZiB0aGUgcmVjdXJzaW9uIHN0YWNrXG4gICAgaiA9IHhpW2hlYWRdOyAvLyBhcHBseSBwZXJtdXRhdGlvbiB2ZWN0b3JcblxuICAgIHZhciBqbmV3ID0gcGludiA/IHBpbnZbal0gOiBqOyAvLyBjaGVjayBub2RlIGogaXMgbWFya2VkXG5cbiAgICBpZiAoISgwLCBfY3NNYXJrZWQuY3NNYXJrZWQpKHB0ciwgaikpIHtcbiAgICAgIC8vIG1hcmsgbm9kZSBqIGFzIHZpc2l0ZWRcbiAgICAgICgwLCBfY3NNYXJrLmNzTWFyaykocHRyLCBqKTsgLy8gdXBkYXRlIHN0YWNrIChsYXN0IG4gZW50cmllcyBpbiB4aSlcblxuICAgICAgeGlbbiArIGhlYWRdID0gam5ldyA8IDAgPyAwIDogKDAsIF9jc1VuZmxpcC5jc1VuZmxpcCkocHRyW2puZXddKTtcbiAgICB9IC8vIG5vZGUgaiBkb25lIGlmIG5vIHVudmlzaXRlZCBuZWlnaGJvcnNcblxuXG4gICAgdmFyIGRvbmUgPSAxOyAvLyBleGFtaW5lIGFsbCBuZWlnaGJvcnMgb2Ygaiwgc3RhY2sgKGxhc3QgbiBlbnRyaWVzIGluIHhpKVxuXG4gICAgZm9yIChwID0geGlbbiArIGhlYWRdLCBwMiA9IGpuZXcgPCAwID8gMCA6ICgwLCBfY3NVbmZsaXAuY3NVbmZsaXApKHB0cltqbmV3ICsgMV0pOyBwIDwgcDI7IHArKykge1xuICAgICAgLy8gY29uc2lkZXIgbmVpZ2hib3Igbm9kZSBpXG4gICAgICBpID0gaW5kZXhbcF07IC8vIGNoZWNrIHdlIGhhdmUgdmlzaXRlZCBub2RlIGksIHNraXAgaXRcblxuICAgICAgaWYgKCgwLCBfY3NNYXJrZWQuY3NNYXJrZWQpKHB0ciwgaSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IC8vIHBhdXNlIGRlcHRoLWZpcnN0IHNlYXJjaCBvZiBub2RlIGosIHVwZGF0ZSBzdGFjayAobGFzdCBuIGVudHJpZXMgaW4geGkpXG5cblxuICAgICAgeGlbbiArIGhlYWRdID0gcDsgLy8gc3RhcnQgZGZzIGF0IG5vZGUgaVxuXG4gICAgICB4aVsrK2hlYWRdID0gaTsgLy8gbm9kZSBqIGlzIG5vdCBkb25lXG5cbiAgICAgIGRvbmUgPSAwOyAvLyBicmVhaywgdG8gc3RhcnQgZGZzKGkpXG5cbiAgICAgIGJyZWFrO1xuICAgIH0gLy8gY2hlY2sgZGVwdGgtZmlyc3Qgc2VhcmNoIGF0IG5vZGUgaiBpcyBkb25lXG5cblxuICAgIGlmIChkb25lKSB7XG4gICAgICAvLyByZW1vdmUgaiBmcm9tIHRoZSByZWN1cnNpb24gc3RhY2tcbiAgICAgIGhlYWQtLTsgLy8gYW5kIHBsYWNlIGluIHRoZSBvdXRwdXQgc3RhY2tcblxuICAgICAgeGlbLS10b3BdID0gajtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdG9wO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jc0V0cmVlID0gY3NFdHJlZTtcblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgZWxpbWluYXRpb24gdHJlZSBvZiBNYXRyaXggQSAodXNpbmcgdHJpdShBKSkgb3IgdGhlXG4gKiBlbGltaW5hdGlvbiB0cmVlIG9mIEEnQSB3aXRob3V0IGZvcm1pbmcgQSdBLlxuICpcbiAqIEBwYXJhbSB7TWF0cml4fSAgYSAgICAgICAgICAgICAgIFRoZSBBIE1hdHJpeFxuICogQHBhcmFtIHtib29sZWFufSBhdGEgICAgICAgICAgICAgQSB2YWx1ZSBvZiB0cnVlIHRoZSBmdW5jdGlvbiBjb21wdXRlcyB0aGUgZXRyZWUgb2YgQSdBXG4gKlxuICogUmVmZXJlbmNlOiBodHRwOi8vZmFjdWx0eS5jc2UudGFtdS5lZHUvZGF2aXMvcHVibGljYXRpb25zLmh0bWxcbiAqL1xuZnVuY3Rpb24gY3NFdHJlZShhLCBhdGEpIHtcbiAgLy8gY2hlY2sgaW5wdXRzXG4gIGlmICghYSkge1xuICAgIHJldHVybiBudWxsO1xuICB9IC8vIGEgYXJyYXlzXG5cblxuICB2YXIgYWluZGV4ID0gYS5faW5kZXg7XG4gIHZhciBhcHRyID0gYS5fcHRyO1xuICB2YXIgYXNpemUgPSBhLl9zaXplOyAvLyByb3dzICYgY29sdW1uc1xuXG4gIHZhciBtID0gYXNpemVbMF07XG4gIHZhciBuID0gYXNpemVbMV07IC8vIGFsbG9jYXRlIHJlc3VsdFxuXG4gIHZhciBwYXJlbnQgPSBbXTsgLy8gKG4pXG4gIC8vIGFsbG9jYXRlIHdvcmtzcGFjZVxuXG4gIHZhciB3ID0gW107IC8vIChuICsgKGF0YSA/IG0gOiAwKSlcblxuICB2YXIgYW5jZXN0b3IgPSAwOyAvLyBmaXJzdCBuIGVudHJpZXMgaW4gd1xuXG4gIHZhciBwcmV2ID0gbjsgLy8gbGFzdCBtIGVudHJpZXMgKGF0YSA9IHRydWUpXG5cbiAgdmFyIGksIGluZXh0OyAvLyBjaGVjayB3ZSBhcmUgY2FsY3VsYXRpbmcgQSdBXG5cbiAgaWYgKGF0YSkge1xuICAgIC8vIGluaXRpYWxpemUgd29ya3NwYWNlXG4gICAgZm9yIChpID0gMDsgaSA8IG07IGkrKykge1xuICAgICAgd1twcmV2ICsgaV0gPSAtMTtcbiAgICB9XG4gIH0gLy8gbG9vcCBjb2x1bW5zXG5cblxuICBmb3IgKHZhciBrID0gMDsgayA8IG47IGsrKykge1xuICAgIC8vIG5vZGUgayBoYXMgbm8gcGFyZW50IHlldFxuICAgIHBhcmVudFtrXSA9IC0xOyAvLyBub3IgZG9lcyBrIGhhdmUgYW4gYW5jZXN0b3JcblxuICAgIHdbYW5jZXN0b3IgKyBrXSA9IC0xOyAvLyB2YWx1ZXMgaW4gY29sdW1uIGtcblxuICAgIGZvciAodmFyIHAwID0gYXB0cltrXSwgcDEgPSBhcHRyW2sgKyAxXSwgcCA9IHAwOyBwIDwgcDE7IHArKykge1xuICAgICAgLy8gcm93XG4gICAgICB2YXIgciA9IGFpbmRleFtwXTsgLy8gbm9kZVxuXG4gICAgICBpID0gYXRhID8gd1twcmV2ICsgcl0gOiByOyAvLyB0cmF2ZXJzZSBmcm9tIGkgdG8ga1xuXG4gICAgICBmb3IgKDsgaSAhPT0gLTEgJiYgaSA8IGs7IGkgPSBpbmV4dCkge1xuICAgICAgICAvLyBpbmV4dCA9IGFuY2VzdG9yIG9mIGlcbiAgICAgICAgaW5leHQgPSB3W2FuY2VzdG9yICsgaV07IC8vIHBhdGggY29tcHJlc3Npb25cblxuICAgICAgICB3W2FuY2VzdG9yICsgaV0gPSBrOyAvLyBjaGVjayBubyBhbmMuLCBwYXJlbnQgaXMga1xuXG4gICAgICAgIGlmIChpbmV4dCA9PT0gLTEpIHtcbiAgICAgICAgICBwYXJlbnRbaV0gPSBrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChhdGEpIHtcbiAgICAgICAgd1twcmV2ICsgcl0gPSBrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJlbnQ7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNzRmtlZXAgPSBjc0ZrZWVwO1xuXG4vKipcbiAqIEtlZXBzIGVudHJpZXMgaW4gdGhlIG1hdHJpeCB3aGVuIHRoZSBjYWxsYmFjayBmdW5jdGlvbiByZXR1cm5zIHRydWUsIHJlbW92ZXMgdGhlIGVudHJ5IG90aGVyd2lzZVxuICpcbiAqIEBwYXJhbSB7TWF0cml4fSAgIGEgICAgICAgICAgICAgIFRoZSBzcGFyc2UgbWF0cml4XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAgICAgICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24sIGZ1bmN0aW9uIHdpbGwgYmUgaW52b2tlZCB3aXRoIHRoZSBmb2xsb3dpbmcgYXJnczpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGUgZW50cnkgcm93XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gVGhlIGVudHJ5IGNvbHVtblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoZSBlbnRyeSB2YWx1ZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoZSBzdGF0ZSBwYXJhbWV0ZXJcbiAqIEBwYXJhbSB7YW55fSAgICAgIG90aGVyICAgICAgICAgIFRoZSBzdGF0ZVxuICpcbiAqIEByZXR1cm4gICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBudW1iZXIgb2Ygbm9uemVybyBlbGVtZW50cyBpbiB0aGUgbWF0cml4XG4gKlxuICogUmVmZXJlbmNlOiBodHRwOi8vZmFjdWx0eS5jc2UudGFtdS5lZHUvZGF2aXMvcHVibGljYXRpb25zLmh0bWxcbiAqL1xuZnVuY3Rpb24gY3NGa2VlcChhLCBjYWxsYmFjaywgb3RoZXIpIHtcbiAgLy8gYSBhcnJheXNcbiAgdmFyIGF2YWx1ZXMgPSBhLl92YWx1ZXM7XG4gIHZhciBhaW5kZXggPSBhLl9pbmRleDtcbiAgdmFyIGFwdHIgPSBhLl9wdHI7XG4gIHZhciBhc2l6ZSA9IGEuX3NpemU7IC8vIGNvbHVtbnNcblxuICB2YXIgbiA9IGFzaXplWzFdOyAvLyBub256ZXJvIGl0ZW1zXG5cbiAgdmFyIG56ID0gMDsgLy8gbG9vcCBjb2x1bW5zXG5cbiAgZm9yICh2YXIgaiA9IDA7IGogPCBuOyBqKyspIHtcbiAgICAvLyBnZXQgY3VycmVudCBsb2NhdGlvbiBvZiBjb2wgalxuICAgIHZhciBwID0gYXB0cltqXTsgLy8gcmVjb3JkIG5ldyBsb2NhdGlvbiBvZiBjb2wgalxuXG4gICAgYXB0cltqXSA9IG56O1xuXG4gICAgZm9yICg7IHAgPCBhcHRyW2ogKyAxXTsgcCsrKSB7XG4gICAgICAvLyBjaGVjayB3ZSBuZWVkIHRvIGtlZXAgdGhpcyBpdGVtXG4gICAgICBpZiAoY2FsbGJhY2soYWluZGV4W3BdLCBqLCBhdmFsdWVzID8gYXZhbHVlc1twXSA6IDEsIG90aGVyKSkge1xuICAgICAgICAvLyBrZWVwIEEoaSxqKVxuICAgICAgICBhaW5kZXhbbnpdID0gYWluZGV4W3BdOyAvLyBjaGVjayB3ZSBuZWVkIHRvIHByb2Nlc3MgdmFsdWVzIChwYXR0ZXJuIG9ubHkpXG5cbiAgICAgICAgaWYgKGF2YWx1ZXMpIHtcbiAgICAgICAgICBhdmFsdWVzW256XSA9IGF2YWx1ZXNbcF07XG4gICAgICAgIH0gLy8gaW5jcmVtZW50IG5vbnplcm8gaXRlbXNcblxuXG4gICAgICAgIG56Kys7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIGZpbmFsaXplIEFcblxuXG4gIGFwdHJbbl0gPSBuejsgLy8gdHJpbSBhcnJheXNcblxuICBhaW5kZXguc3BsaWNlKG56LCBhaW5kZXgubGVuZ3RoIC0gbnopOyAvLyBjaGVjayB3ZSBuZWVkIHRvIHByb2Nlc3MgdmFsdWVzIChwYXR0ZXJuIG9ubHkpXG5cbiAgaWYgKGF2YWx1ZXMpIHtcbiAgICBhdmFsdWVzLnNwbGljZShueiwgYXZhbHVlcy5sZW5ndGggLSBueik7XG4gIH0gLy8gcmV0dXJuIG51bWJlciBvZiBub256ZXJvIGl0ZW1zXG5cblxuICByZXR1cm4gbno7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNzRmxpcCA9IGNzRmxpcDtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIFwiZmxpcHNcIiBpdHMgaW5wdXQgYWJvdXQgdGhlIGludGVnZXIgLTEuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9ICBpICAgICAgICAgICAgICAgVGhlIHZhbHVlIHRvIGZsaXBcbiAqXG4gKiBSZWZlcmVuY2U6IGh0dHA6Ly9mYWN1bHR5LmNzZS50YW11LmVkdS9kYXZpcy9wdWJsaWNhdGlvbnMuaHRtbFxuICovXG5mdW5jdGlvbiBjc0ZsaXAoaSkge1xuICAvLyBmbGlwIHRoZSB2YWx1ZVxuICByZXR1cm4gLWkgLSAyO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jc0lwdmVjID0gY3NJcHZlYztcblxuLyoqXG4gKiBQZXJtdXRlcyBhIHZlY3RvcjsgeCA9IFAnYi4gSW4gTUFUTEFCIG5vdGF0aW9uLCB4KHApPWIuXG4gKlxuICogQHBhcmFtIHtBcnJheX0gcCAgICAgICAgICAgVGhlIHBlcm11dGF0aW9uIHZlY3RvciBvZiBsZW5ndGggbi4gbnVsbCB2YWx1ZSBkZW5vdGVzIGlkZW50aXR5XG4gKiBAcGFyYW0ge0FycmF5fSBiICAgICAgICAgICBUaGUgaW5wdXQgdmVjdG9yXG4gKlxuICogQHJldHVybiB7QXJyYXl9ICAgICAgICAgICAgVGhlIG91dHB1dCB2ZWN0b3IgeCA9IFAnYlxuICovXG5mdW5jdGlvbiBjc0lwdmVjKHAsIGIpIHtcbiAgLy8gdmFyc1xuICB2YXIgaztcbiAgdmFyIG4gPSBiLmxlbmd0aDtcbiAgdmFyIHggPSBbXTsgLy8gY2hlY2sgcGVybXV0YXRpb24gdmVjdG9yIHdhcyBwcm92aWRlZCwgcCA9IG51bGwgZGVub3RlcyBpZGVudGl0eVxuXG4gIGlmIChwKSB7XG4gICAgLy8gbG9vcCB2ZWN0b3JcbiAgICBmb3IgKGsgPSAwOyBrIDwgbjsgaysrKSB7XG4gICAgICAvLyBhcHBseSBwZXJtdXRhdGlvblxuICAgICAgeFtwW2tdXSA9IGJba107XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGxvb3AgdmVjdG9yXG4gICAgZm9yIChrID0gMDsgayA8IG47IGsrKykge1xuICAgICAgLy8geFtpXSA9IGJbaV1cbiAgICAgIHhba10gPSBiW2tdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB4O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jc0xlYWYgPSBjc0xlYWY7XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIGlmIGogaXMgYSBsZWFmIG9mIHRoZSBpdGggcm93IHN1YnRyZWUuXG4gKiBDb25zaWRlciBBKGksaiksIG5vZGUgaiBpbiBpdGggcm93IHN1YnRyZWUgYW5kIHJldHVybiBsY2EoanByZXYsailcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gIGkgICAgICAgICAgICAgICBUaGUgaXRoIHJvdyBzdWJ0cmVlXG4gKiBAcGFyYW0ge051bWJlcn0gIGogICAgICAgICAgICAgICBUaGUgbm9kZSB0byB0ZXN0XG4gKiBAcGFyYW0ge0FycmF5fSAgIHcgICAgICAgICAgICAgICBUaGUgd29ya3NwYWNlIGFycmF5XG4gKiBAcGFyYW0ge051bWJlcn0gIGZpcnN0ICAgICAgICAgICBUaGUgaW5kZXggb2Zmc2V0IHdpdGhpbiB0aGUgd29ya3NwYWNlIGZvciB0aGUgZmlyc3QgYXJyYXlcbiAqIEBwYXJhbSB7TnVtYmVyfSAgbWF4Zmlyc3QgICAgICAgIFRoZSBpbmRleCBvZmZzZXQgd2l0aGluIHRoZSB3b3Jrc3BhY2UgZm9yIHRoZSBtYXhmaXJzdCBhcnJheVxuICogQHBhcmFtIHtOdW1iZXJ9ICBwcmV2bGVhZiAgICAgICAgVGhlIGluZGV4IG9mZnNldCB3aXRoaW4gdGhlIHdvcmtzcGFjZSBmb3IgdGhlIHByZXZsZWFmIGFycmF5XG4gKiBAcGFyYW0ge051bWJlcn0gIGFuY2VzdG9yICAgICAgICBUaGUgaW5kZXggb2Zmc2V0IHdpdGhpbiB0aGUgd29ya3NwYWNlIGZvciB0aGUgYW5jZXN0b3IgYXJyYXlcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKlxuICogUmVmZXJlbmNlOiBodHRwOi8vZmFjdWx0eS5jc2UudGFtdS5lZHUvZGF2aXMvcHVibGljYXRpb25zLmh0bWxcbiAqL1xuZnVuY3Rpb24gY3NMZWFmKGksIGosIHcsIGZpcnN0LCBtYXhmaXJzdCwgcHJldmxlYWYsIGFuY2VzdG9yKSB7XG4gIHZhciBzLCBzcGFyZW50OyAvLyBvdXIgcmVzdWx0XG5cbiAgdmFyIGpsZWFmID0gMDtcbiAgdmFyIHE7IC8vIGNoZWNrIGogaXMgYSBsZWFmXG5cbiAgaWYgKGkgPD0gaiB8fCB3W2ZpcnN0ICsgal0gPD0gd1ttYXhmaXJzdCArIGldKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9IC8vIHVwZGF0ZSBtYXggZmlyc3Rbal0gc2VlbiBzbyBmYXJcblxuXG4gIHdbbWF4Zmlyc3QgKyBpXSA9IHdbZmlyc3QgKyBqXTsgLy8ganByZXYgPSBwcmV2aW91cyBsZWFmIG9mIGl0aCBzdWJ0cmVlXG5cbiAgdmFyIGpwcmV2ID0gd1twcmV2bGVhZiArIGldO1xuICB3W3ByZXZsZWFmICsgaV0gPSBqOyAvLyBjaGVjayBqIGlzIGZpcnN0IG9yIHN1YnNlcXVlbnQgbGVhZlxuXG4gIGlmIChqcHJldiA9PT0gLTEpIHtcbiAgICAvLyAxc3QgbGVhZiwgcSA9IHJvb3Qgb2YgaXRoIHN1YnRyZWVcbiAgICBqbGVhZiA9IDE7XG4gICAgcSA9IGk7XG4gIH0gZWxzZSB7XG4gICAgLy8gdXBkYXRlIGpsZWFmXG4gICAgamxlYWYgPSAyOyAvLyBxID0gbGVhc3QgY29tbW9uIGFuY2VzdGVyIChqcHJldixqKVxuXG4gICAgZm9yIChxID0ganByZXY7IHEgIT09IHdbYW5jZXN0b3IgKyBxXTsgcSA9IHdbYW5jZXN0b3IgKyBxXSkge1xuICAgICAgO1xuICAgIH1cblxuICAgIGZvciAocyA9IGpwcmV2OyBzICE9PSBxOyBzID0gc3BhcmVudCkge1xuICAgICAgLy8gcGF0aCBjb21wcmVzc2lvblxuICAgICAgc3BhcmVudCA9IHdbYW5jZXN0b3IgKyBzXTtcbiAgICAgIHdbYW5jZXN0b3IgKyBzXSA9IHE7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBqbGVhZjogamxlYWYsXG4gICAgcTogcVxuICB9O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDc0x1ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jc1Nwc29sdmUgPSByZXF1aXJlKFwiLi9jc1Nwc29sdmVcIik7XG5cbnZhciBuYW1lID0gJ2NzTHUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnYWJzJywgJ2RpdmlkZVNjYWxhcicsICdtdWx0aXBseScsICdzdWJ0cmFjdCcsICdsYXJnZXInLCAnbGFyZ2VyRXEnLCAnU3BhcnNlTWF0cml4J107XG52YXIgY3JlYXRlQ3NMdSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBhYnMgPSBfcmVmLmFicyxcbiAgICAgIGRpdmlkZVNjYWxhciA9IF9yZWYuZGl2aWRlU2NhbGFyLFxuICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5LFxuICAgICAgc3VidHJhY3QgPSBfcmVmLnN1YnRyYWN0LFxuICAgICAgbGFyZ2VyID0gX3JlZi5sYXJnZXIsXG4gICAgICBsYXJnZXJFcSA9IF9yZWYubGFyZ2VyRXEsXG4gICAgICBTcGFyc2VNYXRyaXggPSBfcmVmLlNwYXJzZU1hdHJpeDtcbiAgdmFyIGNzU3Bzb2x2ZSA9ICgwLCBfY3NTcHNvbHZlLmNyZWF0ZUNzU3Bzb2x2ZSkoe1xuICAgIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICAgIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgICBzdWJ0cmFjdDogc3VidHJhY3RcbiAgfSk7XG4gIC8qKlxuICAgKiBDb21wdXRlcyB0aGUgbnVtZXJpYyBMVSBmYWN0b3JpemF0aW9uIG9mIHRoZSBzcGFyc2UgbWF0cml4IEEuIEltcGxlbWVudHMgYSBMZWZ0LWxvb2tpbmcgTFUgZmFjdG9yaXphdGlvblxuICAgKiBhbGdvcml0aG0gdGhhdCBjb21wdXRlcyBMIGFuZCBVIG9uZSBjb2x1bW4gYXQgYSB0dW1lLiBBdCB0aGUga3RoIHN0ZXAsIGl0IGFjY2VzcyBjb2x1bW5zIDEgdG8gay0xIG9mIExcbiAgICogYW5kIGNvbHVtbiBrIG9mIEEuIEdpdmVuIHRoZSBmaWxsLXJlZHVjaW5nIGNvbHVtbiBvcmRlcmluZyBxIChzZWUgcGFyYW1ldGVyIHMpIGNvbXB1dGVzIEwsIFUgYW5kIHBpbnYgc29cbiAgICogTCAqIFUgPSBBKHAsIHEpLCB3aGVyZSBwIGlzIHRoZSBpbnZlcnNlIG9mIHBpbnYuXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgbSAgICAgICAgICAgICAgIFRoZSBBIE1hdHJpeCB0byBmYWN0b3JpemVcbiAgICogQHBhcmFtIHtPYmplY3R9ICBzICAgICAgICAgICAgICAgVGhlIHN5bWJvbGljIGFuYWx5c2lzIGZyb20gY3NTcXIoKS4gUHJvdmlkZXMgdGhlIGZpbGwtcmVkdWNpbmdcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uIG9yZGVyaW5nIHFcbiAgICogQHBhcmFtIHtOdW1iZXJ9ICB0b2wgICAgICAgICAgICAgUGFydGlhbCBwaXZvdGluZyB0aHJlc2hvbGQgKDEgZm9yIHBhcnRpYWwgcGl2b3RpbmcpXG4gICAqXG4gICAqIEByZXR1cm4ge051bWJlcn0gICAgICAgICAgICAgICAgIFRoZSBudW1lcmljIExVIGZhY3Rvcml6YXRpb24gb2YgQSBvciBudWxsXG4gICAqXG4gICAqIFJlZmVyZW5jZTogaHR0cDovL2ZhY3VsdHkuY3NlLnRhbXUuZWR1L2RhdmlzL3B1YmxpY2F0aW9ucy5odG1sXG4gICAqL1xuXG4gIHJldHVybiBmdW5jdGlvbiBjc0x1KG0sIHMsIHRvbCkge1xuICAgIC8vIHZhbGlkYXRlIGlucHV0XG4gICAgaWYgKCFtKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IC8vIG0gYXJyYXlzXG5cblxuICAgIHZhciBzaXplID0gbS5fc2l6ZTsgLy8gY29sdW1uc1xuXG4gICAgdmFyIG4gPSBzaXplWzFdOyAvLyBzeW1ib2xpYyBhbmFseXNpcyByZXN1bHRcblxuICAgIHZhciBxO1xuICAgIHZhciBsbnogPSAxMDA7XG4gICAgdmFyIHVueiA9IDEwMDsgLy8gdXBkYXRlIHN5bWJvbGljIGFuYWx5c2lzIHBhcmFtZXRlcnNcblxuICAgIGlmIChzKSB7XG4gICAgICBxID0gcy5xO1xuICAgICAgbG56ID0gcy5sbnogfHwgbG56O1xuICAgICAgdW56ID0gcy51bnogfHwgdW56O1xuICAgIH0gLy8gTCBhcnJheXNcblxuXG4gICAgdmFyIGx2YWx1ZXMgPSBbXTsgLy8gKGxueilcblxuICAgIHZhciBsaW5kZXggPSBbXTsgLy8gKGxueilcblxuICAgIHZhciBscHRyID0gW107IC8vIChuICsgMSlcbiAgICAvLyBMXG5cbiAgICB2YXIgTCA9IG5ldyBTcGFyc2VNYXRyaXgoe1xuICAgICAgdmFsdWVzOiBsdmFsdWVzLFxuICAgICAgaW5kZXg6IGxpbmRleCxcbiAgICAgIHB0cjogbHB0cixcbiAgICAgIHNpemU6IFtuLCBuXVxuICAgIH0pOyAvLyBVIGFycmF5c1xuXG4gICAgdmFyIHV2YWx1ZXMgPSBbXTsgLy8gKHVueilcblxuICAgIHZhciB1aW5kZXggPSBbXTsgLy8gKHVueilcblxuICAgIHZhciB1cHRyID0gW107IC8vIChuICsgMSlcbiAgICAvLyBVXG5cbiAgICB2YXIgVSA9IG5ldyBTcGFyc2VNYXRyaXgoe1xuICAgICAgdmFsdWVzOiB1dmFsdWVzLFxuICAgICAgaW5kZXg6IHVpbmRleCxcbiAgICAgIHB0cjogdXB0cixcbiAgICAgIHNpemU6IFtuLCBuXVxuICAgIH0pOyAvLyBpbnZlcnNlIG9mIHBlcm11dGF0aW9uIHZlY3RvclxuXG4gICAgdmFyIHBpbnYgPSBbXTsgLy8gKG4pXG4gICAgLy8gdmFyc1xuXG4gICAgdmFyIGksIHA7IC8vIGFsbG9jYXRlIGFycmF5c1xuXG4gICAgdmFyIHggPSBbXTsgLy8gKG4pXG5cbiAgICB2YXIgeGkgPSBbXTsgLy8gKDIgKiBuKVxuICAgIC8vIGluaXRpYWxpemUgdmFyaWFibGVzXG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAvLyBjbGVhciB3b3Jrc3BhY2VcbiAgICAgIHhbaV0gPSAwOyAvLyBubyByb3dzIHBpdm90YWwgeWV0XG5cbiAgICAgIHBpbnZbaV0gPSAtMTsgLy8gbm8gY29scyBvZiBMIHlldFxuXG4gICAgICBscHRyW2kgKyAxXSA9IDA7XG4gICAgfSAvLyByZXNldCBudW1iZXIgb2Ygbm9uemVybyBlbGVtZW50cyBpbiBMIGFuZCBVXG5cblxuICAgIGxueiA9IDA7XG4gICAgdW56ID0gMDsgLy8gY29tcHV0ZSBMKDosaykgYW5kIFUoOixrKVxuXG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCBuOyBrKyspIHtcbiAgICAgIC8vIHVwZGF0ZSBwdHJcbiAgICAgIGxwdHJba10gPSBsbno7XG4gICAgICB1cHRyW2tdID0gdW56OyAvLyBhcHBseSBjb2x1bW4gcGVybXV0YXRpb25zIGlmIG5lZWRlZFxuXG4gICAgICB2YXIgY29sID0gcSA/IHFba10gOiBrOyAvLyBzb2x2ZSB0cmlhbmd1bGFyIHN5c3RlbSwgeCA9IExcXEEoOixjb2wpXG5cbiAgICAgIHZhciB0b3AgPSBjc1Nwc29sdmUoTCwgbSwgY29sLCB4aSwgeCwgcGludiwgMSk7IC8vIGZpbmQgcGl2b3RcblxuICAgICAgdmFyIGlwaXYgPSAtMTtcbiAgICAgIHZhciBhID0gLTE7IC8vIGxvb3AgeGlbXSBmcm9tIHRvcCAtPiBuXG5cbiAgICAgIGZvciAocCA9IHRvcDsgcCA8IG47IHArKykge1xuICAgICAgICAvLyB4W2ldIGlzIG5vbnplcm9cbiAgICAgICAgaSA9IHhpW3BdOyAvLyBjaGVjayByb3cgaSBpcyBub3QgeWV0IHBpdm90YWxcblxuICAgICAgICBpZiAocGludltpXSA8IDApIHtcbiAgICAgICAgICAvLyBhYnNvbHV0ZSB2YWx1ZSBvZiB4W2ldXG4gICAgICAgICAgdmFyIHhhYnMgPSBhYnMoeFtpXSk7IC8vIGNoZWNrIGFic291bHRlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBwaXZvdCB2YWx1ZVxuXG4gICAgICAgICAgaWYgKGxhcmdlcih4YWJzLCBhKSkge1xuICAgICAgICAgICAgLy8gbGFyZ2VzdCBwaXZvdCBjYW5kaWRhdGUgc28gZmFyXG4gICAgICAgICAgICBhID0geGFicztcbiAgICAgICAgICAgIGlwaXYgPSBpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB4KGkpIGlzIHRoZSBlbnRyeSBVKHBpbnZbaV0saylcbiAgICAgICAgICB1aW5kZXhbdW56XSA9IHBpbnZbaV07XG4gICAgICAgICAgdXZhbHVlc1t1bnorK10gPSB4W2ldO1xuICAgICAgICB9XG4gICAgICB9IC8vIHZhbGlkYXRlIHdlIGZvdW5kIGEgdmFsaWQgcGl2b3RcblxuXG4gICAgICBpZiAoaXBpdiA9PT0gLTEgfHwgYSA8PSAwKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSAvLyB1cGRhdGUgYWN0dWFsIHBpdm90IGNvbHVtbiwgZ2l2ZSBwcmVmZXJlbmNlIHRvIGRpYWdvbmFsIHZhbHVlXG5cblxuICAgICAgaWYgKHBpbnZbY29sXSA8IDAgJiYgbGFyZ2VyRXEoYWJzKHhbY29sXSksIG11bHRpcGx5KGEsIHRvbCkpKSB7XG4gICAgICAgIGlwaXYgPSBjb2w7XG4gICAgICB9IC8vIHRoZSBjaG9zZW4gcGl2b3RcblxuXG4gICAgICB2YXIgcGl2b3QgPSB4W2lwaXZdOyAvLyBsYXN0IGVudHJ5IGluIFUoOixrKSBpcyBVKGssaylcblxuICAgICAgdWluZGV4W3Vuel0gPSBrO1xuICAgICAgdXZhbHVlc1t1bnorK10gPSBwaXZvdDsgLy8gaXBpdiBpcyB0aGUga3RoIHBpdm90IHJvd1xuXG4gICAgICBwaW52W2lwaXZdID0gazsgLy8gZmlyc3QgZW50cnkgaW4gTCg6LGspIGlzIEwoayxrKSA9IDFcblxuICAgICAgbGluZGV4W2xuel0gPSBpcGl2O1xuICAgICAgbHZhbHVlc1tsbnorK10gPSAxOyAvLyBMKGsrMTpuLGspID0geCAvIHBpdm90XG5cbiAgICAgIGZvciAocCA9IHRvcDsgcCA8IG47IHArKykge1xuICAgICAgICAvLyByb3dcbiAgICAgICAgaSA9IHhpW3BdOyAvLyBjaGVjayB4KGkpIGlzIGFuIGVudHJ5IGluIEwoOixrKVxuXG4gICAgICAgIGlmIChwaW52W2ldIDwgMCkge1xuICAgICAgICAgIC8vIHNhdmUgdW5wZXJtdXRlZCByb3cgaW4gTFxuICAgICAgICAgIGxpbmRleFtsbnpdID0gaTsgLy8gc2NhbGUgcGl2b3QgY29sdW1uXG5cbiAgICAgICAgICBsdmFsdWVzW2xueisrXSA9IGRpdmlkZVNjYWxhcih4W2ldLCBwaXZvdCk7XG4gICAgICAgIH0gLy8geFswLi5uLTFdID0gMCBmb3IgbmV4dCBrXG5cblxuICAgICAgICB4W2ldID0gMDtcbiAgICAgIH1cbiAgICB9IC8vIHVwZGF0ZSBwdHJcblxuXG4gICAgbHB0cltuXSA9IGxuejtcbiAgICB1cHRyW25dID0gdW56OyAvLyBmaXggcm93IGluZGljZXMgb2YgTCBmb3IgZmluYWwgcGludlxuXG4gICAgZm9yIChwID0gMDsgcCA8IGxuejsgcCsrKSB7XG4gICAgICBsaW5kZXhbcF0gPSBwaW52W2xpbmRleFtwXV07XG4gICAgfSAvLyB0cmltIGFycmF5c1xuXG5cbiAgICBsdmFsdWVzLnNwbGljZShsbnosIGx2YWx1ZXMubGVuZ3RoIC0gbG56KTtcbiAgICBsaW5kZXguc3BsaWNlKGxueiwgbGluZGV4Lmxlbmd0aCAtIGxueik7XG4gICAgdXZhbHVlcy5zcGxpY2UodW56LCB1dmFsdWVzLmxlbmd0aCAtIHVueik7XG4gICAgdWluZGV4LnNwbGljZSh1bnosIHVpbmRleC5sZW5ndGggLSB1bnopOyAvLyByZXR1cm4gTFUgZmFjdG9yXG5cbiAgICByZXR1cm4ge1xuICAgICAgTDogTCxcbiAgICAgIFU6IFUsXG4gICAgICBwaW52OiBwaW52XG4gICAgfTtcbiAgfTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVDc0x1ID0gY3JlYXRlQ3NMdTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3NNYXJrID0gY3NNYXJrO1xuXG52YXIgX2NzRmxpcCA9IHJlcXVpcmUoXCIuL2NzRmxpcFwiKTtcblxuLyoqXG4gKiBNYXJrcyB0aGUgbm9kZSBhdCB3W2pdXG4gKlxuICogQHBhcmFtIHtBcnJheX0gICB3ICAgICAgICAgICAgICAgVGhlIGFycmF5XG4gKiBAcGFyYW0ge051bWJlcn0gIGogICAgICAgICAgICAgICBUaGUgYXJyYXkgaW5kZXhcbiAqXG4gKiBSZWZlcmVuY2U6IGh0dHA6Ly9mYWN1bHR5LmNzZS50YW11LmVkdS9kYXZpcy9wdWJsaWNhdGlvbnMuaHRtbFxuICovXG5mdW5jdGlvbiBjc01hcmsodywgaikge1xuICAvLyBtYXJrIHdbal1cbiAgd1tqXSA9ICgwLCBfY3NGbGlwLmNzRmxpcCkod1tqXSk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNzTWFya2VkID0gY3NNYXJrZWQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBub2RlIGF0IHdbal0gaXMgbWFya2VkXG4gKlxuICogQHBhcmFtIHtBcnJheX0gICB3ICAgICAgICAgICAgICAgVGhlIGFycmF5XG4gKiBAcGFyYW0ge051bWJlcn0gIGogICAgICAgICAgICAgICBUaGUgYXJyYXkgaW5kZXhcbiAqXG4gKiBSZWZlcmVuY2U6IGh0dHA6Ly9mYWN1bHR5LmNzZS50YW11LmVkdS9kYXZpcy9wdWJsaWNhdGlvbnMuaHRtbFxuICovXG5mdW5jdGlvbiBjc01hcmtlZCh3LCBqKSB7XG4gIC8vIGNoZWNrIG5vZGUgaXMgbWFya2VkXG4gIHJldHVybiB3W2pdIDwgMDtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3NQZXJtdXRlID0gY3NQZXJtdXRlO1xuXG4vKipcbiAqIFBlcm11dGVzIGEgc3BhcnNlIG1hdHJpeCBDID0gUCAqIEEgKiBRXG4gKlxuICogQHBhcmFtIHtTcGFyc2VNYXRyaXh9ICBhICAgICAgICAgVGhlIE1hdHJpeCBBXG4gKiBAcGFyYW0ge0FycmF5fSAgIHBpbnYgICAgICAgICAgICBUaGUgcm93IHBlcm11dGF0aW9uIHZlY3RvclxuICogQHBhcmFtIHtBcnJheX0gICBxICAgICAgICAgICAgICAgVGhlIGNvbHVtbiBwZXJtdXRhdGlvbiB2ZWN0b3JcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWVzICAgICAgICAgIENyZWF0ZSBhIHBhdHRlcm4gbWF0cml4IChmYWxzZSksIHZhbHVlcyBhbmQgcGF0dGVybiBvdGhlcndpc2VcbiAqXG4gKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgICAgICBDID0gUCAqIEEgKiBRLCBudWxsIG9uIGVycm9yXG4gKlxuICogUmVmZXJlbmNlOiBodHRwOi8vZmFjdWx0eS5jc2UudGFtdS5lZHUvZGF2aXMvcHVibGljYXRpb25zLmh0bWxcbiAqL1xuZnVuY3Rpb24gY3NQZXJtdXRlKGEsIHBpbnYsIHEsIHZhbHVlcykge1xuICAvLyBhIGFycmF5c1xuICB2YXIgYXZhbHVlcyA9IGEuX3ZhbHVlcztcbiAgdmFyIGFpbmRleCA9IGEuX2luZGV4O1xuICB2YXIgYXB0ciA9IGEuX3B0cjtcbiAgdmFyIGFzaXplID0gYS5fc2l6ZTtcbiAgdmFyIGFkdCA9IGEuX2RhdGF0eXBlOyAvLyByb3dzICYgY29sdW1uc1xuXG4gIHZhciBtID0gYXNpemVbMF07XG4gIHZhciBuID0gYXNpemVbMV07IC8vIGMgYXJyYXlzXG5cbiAgdmFyIGN2YWx1ZXMgPSB2YWx1ZXMgJiYgYS5fdmFsdWVzID8gW10gOiBudWxsO1xuICB2YXIgY2luZGV4ID0gW107IC8vIChhcHRyW25dKVxuXG4gIHZhciBjcHRyID0gW107IC8vIChuICsgMSlcbiAgLy8gaW5pdGlhbGl6ZSB2YXJzXG5cbiAgdmFyIG56ID0gMDsgLy8gbG9vcCBjb2x1bW5zXG5cbiAgZm9yICh2YXIgayA9IDA7IGsgPCBuOyBrKyspIHtcbiAgICAvLyBjb2x1bW4gayBvZiBDIGlzIGNvbHVtbiBxW2tdIG9mIEFcbiAgICBjcHRyW2tdID0gbno7IC8vIGFwcGx5IGNvbHVtbiBwZXJtdXRhdGlvblxuXG4gICAgdmFyIGogPSBxID8gcVtrXSA6IGs7IC8vIGxvb3AgdmFsdWVzIGluIGNvbHVtbiBqIG9mIEFcblxuICAgIGZvciAodmFyIHQwID0gYXB0cltqXSwgdDEgPSBhcHRyW2ogKyAxXSwgdCA9IHQwOyB0IDwgdDE7IHQrKykge1xuICAgICAgLy8gcm93IGkgb2YgQSBpcyByb3cgcGludltpXSBvZiBDXG4gICAgICB2YXIgciA9IHBpbnYgPyBwaW52W2FpbmRleFt0XV0gOiBhaW5kZXhbdF07IC8vIGluZGV4XG5cbiAgICAgIGNpbmRleFtuel0gPSByOyAvLyBjaGVjayB3ZSBuZWVkIHRvIHBvcHVsYXRlIHZhbHVlc1xuXG4gICAgICBpZiAoY3ZhbHVlcykge1xuICAgICAgICBjdmFsdWVzW256XSA9IGF2YWx1ZXNbdF07XG4gICAgICB9IC8vIGluY3JlbWVudCBudW1iZXIgb2Ygbm9uemVybyBlbGVtZW50c1xuXG5cbiAgICAgIG56Kys7XG4gICAgfVxuICB9IC8vIGZpbmFsaXplIHRoZSBsYXN0IGNvbHVtbiBvZiBDXG5cblxuICBjcHRyW25dID0gbno7IC8vIHJldHVybiBDIG1hdHJpeFxuXG4gIHJldHVybiBhLmNyZWF0ZVNwYXJzZU1hdHJpeCh7XG4gICAgdmFsdWVzOiBjdmFsdWVzLFxuICAgIGluZGV4OiBjaW5kZXgsXG4gICAgcHRyOiBjcHRyLFxuICAgIHNpemU6IFttLCBuXSxcbiAgICBkYXRhdHlwZTogYWR0XG4gIH0pO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jc1Bvc3QgPSBjc1Bvc3Q7XG5cbnZhciBfY3NUZGZzID0gcmVxdWlyZShcIi4vY3NUZGZzXCIpO1xuXG4vKipcbiAqIFBvc3Qgb3JkZXIgYSB0cmVlIG9mIGZvcmVzdFxuICpcbiAqIEBwYXJhbSB7QXJyYXl9ICAgcGFyZW50ICAgICAgICAgIFRoZSB0cmVlIG9yIGZvcmVzdFxuICogQHBhcmFtIHtOdW1iZXJ9ICBuICAgICAgICAgICAgICAgTnVtYmVyIG9mIGNvbHVtbnNcbiAqXG4gKiBSZWZlcmVuY2U6IGh0dHA6Ly9mYWN1bHR5LmNzZS50YW11LmVkdS9kYXZpcy9wdWJsaWNhdGlvbnMuaHRtbFxuICovXG5mdW5jdGlvbiBjc1Bvc3QocGFyZW50LCBuKSB7XG4gIC8vIGNoZWNrIGlucHV0c1xuICBpZiAoIXBhcmVudCkge1xuICAgIHJldHVybiBudWxsO1xuICB9IC8vIHZhcnNcblxuXG4gIHZhciBrID0gMDtcbiAgdmFyIGo7IC8vIGFsbG9jYXRlIHJlc3VsdFxuXG4gIHZhciBwb3N0ID0gW107IC8vIChuKVxuICAvLyB3b3Jrc3BhY2UsIGhlYWQ6IGZpcnN0IG4gZW50cmllcywgbmV4dDogbmV4dCBuIGVudHJpZXMsIHN0YWNrOiBsYXN0IG4gZW50cmllc1xuXG4gIHZhciB3ID0gW107IC8vICgzICogbilcblxuICB2YXIgaGVhZCA9IDA7XG4gIHZhciBuZXh0ID0gbjtcbiAgdmFyIHN0YWNrID0gMiAqIG47IC8vIGluaXRpYWxpemUgd29ya3NwYWNlXG5cbiAgZm9yIChqID0gMDsgaiA8IG47IGorKykge1xuICAgIC8vIGVtcHR5IGxpbmtlZCBsaXN0c1xuICAgIHdbaGVhZCArIGpdID0gLTE7XG4gIH0gLy8gdHJhdmVyc2Ugbm9kZXMgaW4gcmV2ZXJzZSBvcmRlclxuXG5cbiAgZm9yIChqID0gbiAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgLy8gY2hlY2sgaiBpcyBhIHJvb3RcbiAgICBpZiAocGFyZW50W2pdID09PSAtMSkge1xuICAgICAgY29udGludWU7XG4gICAgfSAvLyBhZGQgaiB0byBsaXN0IG9mIGl0cyBwYXJlbnRcblxuXG4gICAgd1tuZXh0ICsgal0gPSB3W2hlYWQgKyBwYXJlbnRbal1dO1xuICAgIHdbaGVhZCArIHBhcmVudFtqXV0gPSBqO1xuICB9IC8vIGxvb3Agbm9kZXNcblxuXG4gIGZvciAoaiA9IDA7IGogPCBuOyBqKyspIHtcbiAgICAvLyBza2lwIGogaWYgaXQgaXMgbm90IGEgcm9vdFxuICAgIGlmIChwYXJlbnRbal0gIT09IC0xKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9IC8vIGRlcHRoLWZpcnN0IHNlYXJjaFxuXG5cbiAgICBrID0gKDAsIF9jc1RkZnMuY3NUZGZzKShqLCBrLCB3LCBoZWFkLCBuZXh0LCBwb3N0LCBzdGFjayk7XG4gIH1cblxuICByZXR1cm4gcG9zdDtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3NSZWFjaCA9IGNzUmVhY2g7XG5cbnZhciBfY3NNYXJrZWQgPSByZXF1aXJlKFwiLi9jc01hcmtlZFwiKTtcblxudmFyIF9jc01hcmsgPSByZXF1aXJlKFwiLi9jc01hcmtcIik7XG5cbnZhciBfY3NEZnMgPSByZXF1aXJlKFwiLi9jc0Rmc1wiKTtcblxuLyoqXG4gKiBUaGUgY3NSZWFjaCBmdW5jdGlvbiBjb21wdXRlcyBYID0gUmVhY2goQiksIHdoZXJlIEIgaXMgdGhlIG5vbnplcm8gcGF0dGVybiBvZiB0aGUgbi1ieS0xXG4gKiBzcGFyc2UgY29sdW1uIG9mIHZlY3RvciBiLiBUaGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgc2V0IG9mIG5vZGVzIHJlYWNoYWJsZSBmcm9tIGFueSBub2RlIGluIEIuIFRoZVxuICogbm9uemVybyBwYXR0ZXJuIHhpIG9mIHRoZSBzb2x1dGlvbiB4IHRvIHRoZSBzcGFyc2UgbGluZWFyIHN5c3RlbSBMeD1iIGlzIGdpdmVuIGJ5IFg9UmVhY2goQikuXG4gKlxuICogQHBhcmFtIHtNYXRyaXh9ICBnICAgICAgICAgICAgICAgVGhlIEcgbWF0cml4XG4gKiBAcGFyYW0ge01hdHJpeH0gIGIgICAgICAgICAgICAgICBUaGUgQiBtYXRyaXhcbiAqIEBwYXJhbSB7TnVtYmVyfSAgayAgICAgICAgICAgICAgIFRoZSBrdGggY29sdW1uIGluIEJcbiAqIEBwYXJhbSB7QXJyYXl9ICAgeGkgICAgICAgICAgICAgIFRoZSBub256ZXJvIHBhdHRlcm4geGlbdG9wXSAuLiB4aVtuIC0gMV0sIGFuIGFycmF5IG9mIHNpemUgPSAyICogblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZpcnN0IG4gZW50cmllcyBpcyB0aGUgbm9uemVybyBwYXR0ZXJuLCB0aGUgbGFzdCBuIGVudHJpZXMgaXMgdGhlIHN0YWNrXG4gKiBAcGFyYW0ge0FycmF5fSAgIHBpbnYgICAgICAgICAgICBUaGUgaW52ZXJzZSByb3cgcGVybXV0YXRpb24gdmVjdG9yXG4gKlxuICogQHJldHVybiB7TnVtYmVyfSAgICAgICAgICAgICAgICAgVGhlIGluZGV4IGZvciB0aGUgbm9uemVybyBwYXR0ZXJuXG4gKlxuICogUmVmZXJlbmNlOiBodHRwOi8vZmFjdWx0eS5jc2UudGFtdS5lZHUvZGF2aXMvcHVibGljYXRpb25zLmh0bWxcbiAqL1xuZnVuY3Rpb24gY3NSZWFjaChnLCBiLCBrLCB4aSwgcGludikge1xuICAvLyBnIGFycmF5c1xuICB2YXIgZ3B0ciA9IGcuX3B0cjtcbiAgdmFyIGdzaXplID0gZy5fc2l6ZTsgLy8gYiBhcnJheXNcblxuICB2YXIgYmluZGV4ID0gYi5faW5kZXg7XG4gIHZhciBicHRyID0gYi5fcHRyOyAvLyBjb2x1bW5zXG5cbiAgdmFyIG4gPSBnc2l6ZVsxXTsgLy8gdmFyc1xuXG4gIHZhciBwLCBwMCwgcDE7IC8vIGluaXRpYWxpemUgdG9wXG5cbiAgdmFyIHRvcCA9IG47IC8vIGxvb3AgY29sdW1uIGluZGVjZXMgaW4gQlxuXG4gIGZvciAocDAgPSBicHRyW2tdLCBwMSA9IGJwdHJbayArIDFdLCBwID0gcDA7IHAgPCBwMTsgcCsrKSB7XG4gICAgLy8gbm9kZSBpXG4gICAgdmFyIGkgPSBiaW5kZXhbcF07IC8vIGNoZWNrIG5vZGUgaSBpcyBtYXJrZWRcblxuICAgIGlmICghKDAsIF9jc01hcmtlZC5jc01hcmtlZCkoZ3B0ciwgaSkpIHtcbiAgICAgIC8vIHN0YXJ0IGEgZGZzIGF0IHVubWFya2VkIG5vZGUgaVxuICAgICAgdG9wID0gKDAsIF9jc0Rmcy5jc0RmcykoaSwgZywgdG9wLCB4aSwgcGludik7XG4gICAgfVxuICB9IC8vIGxvb3AgY29sdW1ucyBmcm9tIHRvcCAtPiBuIC0gMVxuXG5cbiAgZm9yIChwID0gdG9wOyBwIDwgbjsgcCsrKSB7XG4gICAgLy8gcmVzdG9yZSBHXG4gICAgKDAsIF9jc01hcmsuY3NNYXJrKShncHRyLCB4aVtwXSk7XG4gIH1cblxuICByZXR1cm4gdG9wO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDc1Nwc29sdmUgPSB2b2lkIDA7XG5cbnZhciBfY3NSZWFjaCA9IHJlcXVpcmUoXCIuL2NzUmVhY2hcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdjc1Nwc29sdmUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnZGl2aWRlU2NhbGFyJywgJ211bHRpcGx5JywgJ3N1YnRyYWN0J107XG52YXIgY3JlYXRlQ3NTcHNvbHZlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIGRpdmlkZVNjYWxhciA9IF9yZWYuZGl2aWRlU2NhbGFyLFxuICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5LFxuICAgICAgc3VidHJhY3QgPSBfcmVmLnN1YnRyYWN0O1xuXG4gIC8qKlxuICAgKiBUaGUgZnVuY3Rpb24gY3NTcHNvbHZlKCkgY29tcHV0ZXMgdGhlIHNvbHV0aW9uIHRvIEcgKiB4ID0gYmssIHdoZXJlIGJrIGlzIHRoZVxuICAgKiBrdGggY29sdW1uIG9mIEIuIFdoZW4gbG8gaXMgdHJ1ZSwgdGhlIGZ1bmN0aW9uIGFzc3VtZXMgRyA9IEwgaXMgbG93ZXIgdHJpYW5ndWxhciB3aXRoIHRoZVxuICAgKiBkaWFnb25hbCBlbnRyeSBhcyB0aGUgZmlyc3QgZW50cnkgaW4gZWFjaCBjb2x1bW4uIFdoZW4gbG8gaXMgdHJ1ZSwgdGhlIGZ1bmN0aW9uIGFzc3VtZXMgRyA9IFVcbiAgICogaXMgdXBwZXIgdHJpYW5ndWxhciB3aXRoIHRoZSBkaWFnb25hbCBlbnRyeSBhcyB0aGUgbGFzdCBlbnRyeSBpbiBlYWNoIGNvbHVtbi5cbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9ICBnICAgICAgICAgICAgICAgVGhlIEcgbWF0cml4XG4gICAqIEBwYXJhbSB7TWF0cml4fSAgYiAgICAgICAgICAgICAgIFRoZSBCIG1hdHJpeFxuICAgKiBAcGFyYW0ge051bWJlcn0gIGsgICAgICAgICAgICAgICBUaGUga3RoIGNvbHVtbiBpbiBCXG4gICAqIEBwYXJhbSB7QXJyYXl9ICAgeGkgICAgICAgICAgICAgIFRoZSBub256ZXJvIHBhdHRlcm4geGlbdG9wXSAuLiB4aVtuIC0gMV0sIGFuIGFycmF5IG9mIHNpemUgPSAyICogblxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZmlyc3QgbiBlbnRyaWVzIGlzIHRoZSBub256ZXJvIHBhdHRlcm4sIHRoZSBsYXN0IG4gZW50cmllcyBpcyB0aGUgc3RhY2tcbiAgICogQHBhcmFtIHtBcnJheX0gICB4ICAgICAgICAgICAgICAgVGhlIHNvbHV0b24gdG8gdGhlIGxpbmVhciBzeXN0ZW0gRyAqIHggPSBiXG4gICAqIEBwYXJhbSB7QXJyYXl9ICAgcGludiAgICAgICAgICAgIFRoZSBpbnZlcnNlIHJvdyBwZXJtdXRhdGlvbiB2ZWN0b3IsIG11c3QgYmUgbnVsbCBmb3IgTCAqIHggPSBiXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gbG8gICAgICAgICAgICAgIFRoZSBsb3dlciAodHJ1ZSkgdXBwZXIgdHJpYW5ndWxhciAoZmFsc2UpIGZsYWdcbiAgICpcbiAgICogQHJldHVybiB7TnVtYmVyfSAgICAgICAgICAgICAgICAgVGhlIGluZGV4IGZvciB0aGUgbm9uemVybyBwYXR0ZXJuXG4gICAqXG4gICAqIFJlZmVyZW5jZTogaHR0cDovL2ZhY3VsdHkuY3NlLnRhbXUuZWR1L2RhdmlzL3B1YmxpY2F0aW9ucy5odG1sXG4gICAqL1xuICByZXR1cm4gZnVuY3Rpb24gY3NTcHNvbHZlKGcsIGIsIGssIHhpLCB4LCBwaW52LCBsbykge1xuICAgIC8vIGcgYXJyYXlzXG4gICAgdmFyIGd2YWx1ZXMgPSBnLl92YWx1ZXM7XG4gICAgdmFyIGdpbmRleCA9IGcuX2luZGV4O1xuICAgIHZhciBncHRyID0gZy5fcHRyO1xuICAgIHZhciBnc2l6ZSA9IGcuX3NpemU7IC8vIGNvbHVtbnNcblxuICAgIHZhciBuID0gZ3NpemVbMV07IC8vIGIgYXJyYXlzXG5cbiAgICB2YXIgYnZhbHVlcyA9IGIuX3ZhbHVlcztcbiAgICB2YXIgYmluZGV4ID0gYi5faW5kZXg7XG4gICAgdmFyIGJwdHIgPSBiLl9wdHI7IC8vIHZhcnNcblxuICAgIHZhciBwLCBwMCwgcDEsIHE7IC8vIHhpW3RvcC4ubi0xXSA9IGNzUmVhY2goQig6LGspKVxuXG4gICAgdmFyIHRvcCA9ICgwLCBfY3NSZWFjaC5jc1JlYWNoKShnLCBiLCBrLCB4aSwgcGludik7IC8vIGNsZWFyIHhcblxuICAgIGZvciAocCA9IHRvcDsgcCA8IG47IHArKykge1xuICAgICAgeFt4aVtwXV0gPSAwO1xuICAgIH0gLy8gc2NhdHRlciBiXG5cblxuICAgIGZvciAocDAgPSBicHRyW2tdLCBwMSA9IGJwdHJbayArIDFdLCBwID0gcDA7IHAgPCBwMTsgcCsrKSB7XG4gICAgICB4W2JpbmRleFtwXV0gPSBidmFsdWVzW3BdO1xuICAgIH0gLy8gbG9vcCBjb2x1bW5zXG5cblxuICAgIGZvciAodmFyIHB4ID0gdG9wOyBweCA8IG47IHB4KyspIHtcbiAgICAgIC8vIHggYXJyYXkgaW5kZXggZm9yIHB4XG4gICAgICB2YXIgaiA9IHhpW3B4XTsgLy8gYXBwbHkgcGVybXV0YXRpb24gdmVjdG9yIChVIHggPSBiKSwgaiBtYXBzIHRvIGNvbHVtbiBKIG9mIEdcblxuICAgICAgdmFyIEogPSBwaW52ID8gcGludltqXSA6IGo7IC8vIGNoZWNrIGNvbHVtbiBKIGlzIGVtcHR5XG5cbiAgICAgIGlmIChKIDwgMCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gLy8gY29sdW1uIHZhbHVlIGluZGVjZXMgaW4gRywgcDAgPD0gcCA8IHAxXG5cblxuICAgICAgcDAgPSBncHRyW0pdO1xuICAgICAgcDEgPSBncHRyW0ogKyAxXTsgLy8geChqKSAvPSBHKGosailcblxuICAgICAgeFtqXSA9IGRpdmlkZVNjYWxhcih4W2pdLCBndmFsdWVzW2xvID8gcDAgOiBwMSAtIDFdKTsgLy8gZmlyc3QgZW50cnkgTChqLGopXG5cbiAgICAgIHAgPSBsbyA/IHAwICsgMSA6IHAwO1xuICAgICAgcSA9IGxvID8gcDEgOiBwMSAtIDE7IC8vIGxvb3BcblxuICAgICAgZm9yICg7IHAgPCBxOyBwKyspIHtcbiAgICAgICAgLy8gcm93XG4gICAgICAgIHZhciBpID0gZ2luZGV4W3BdOyAvLyB4KGkpIC09IEcoaSxqKSAqIHgoailcblxuICAgICAgICB4W2ldID0gc3VidHJhY3QoeFtpXSwgbXVsdGlwbHkoZ3ZhbHVlc1twXSwgeFtqXSkpO1xuICAgICAgfVxuICAgIH0gLy8gcmV0dXJuIHRvcCBvZiBzdGFja1xuXG5cbiAgICByZXR1cm4gdG9wO1xuICB9O1xufSk7XG5leHBvcnRzLmNyZWF0ZUNzU3Bzb2x2ZSA9IGNyZWF0ZUNzU3Bzb2x2ZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ3NTcXIgPSB2b2lkIDA7XG5cbnZhciBfY3NQZXJtdXRlID0gcmVxdWlyZShcIi4vY3NQZXJtdXRlXCIpO1xuXG52YXIgX2NzUG9zdCA9IHJlcXVpcmUoXCIuL2NzUG9zdFwiKTtcblxudmFyIF9jc0V0cmVlID0gcmVxdWlyZShcIi4vY3NFdHJlZVwiKTtcblxudmFyIF9jc0FtZCA9IHJlcXVpcmUoXCIuL2NzQW1kXCIpO1xuXG52YXIgX2NzQ291bnRzID0gcmVxdWlyZShcIi4vY3NDb3VudHNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdjc1Nxcic7XG52YXIgZGVwZW5kZW5jaWVzID0gWydhZGQnLCAnbXVsdGlwbHknLCAndHJhbnNwb3NlJ107XG52YXIgY3JlYXRlQ3NTcXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgYWRkID0gX3JlZi5hZGQsXG4gICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHksXG4gICAgICB0cmFuc3Bvc2UgPSBfcmVmLnRyYW5zcG9zZTtcbiAgdmFyIGNzQW1kID0gKDAsIF9jc0FtZC5jcmVhdGVDc0FtZCkoe1xuICAgIGFkZDogYWRkLFxuICAgIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgICB0cmFuc3Bvc2U6IHRyYW5zcG9zZVxuICB9KTtcbiAgdmFyIGNzQ291bnRzID0gKDAsIF9jc0NvdW50cy5jcmVhdGVDc0NvdW50cykoe1xuICAgIHRyYW5zcG9zZTogdHJhbnNwb3NlXG4gIH0pO1xuICAvKipcbiAgICogU3ltYm9saWMgb3JkZXJpbmcgYW5kIGFuYWx5c2lzIGZvciBRUiBhbmQgTFUgZGVjb21wb3NpdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7TnVtYmVyfSAgb3JkZXIgICAgICAgICAgIFRoZSBvcmRlcmluZyBzdHJhdGVneSAoc2VlIGNzQW1kIGZvciBtb3JlIGRldGFpbHMpXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgYSAgICAgICAgICAgICAgIFRoZSBBIG1hdHJpeFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHFyICAgICAgICAgICAgICBTeW1ib2xpYyBvcmRlcmluZyBhbmQgYW5hbHlzaXMgZm9yIFFSIGRlY29tcG9zaXRpb24gKHRydWUpIG9yXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbGljIG9yZGVyaW5nIGFuZCBhbmFseXNpcyBmb3IgTFUgZGVjb21wb3NpdGlvbiAoZmFsc2UpXG4gICAqXG4gICAqIEByZXR1cm4ge09iamVjdH0gICAgICAgICAgICAgICAgIFRoZSBTeW1ib2xpYyBvcmRlcmluZyBhbmQgYW5hbHlzaXMgZm9yIG1hdHJpeCBBXG4gICAqXG4gICAqIFJlZmVyZW5jZTogaHR0cDovL2ZhY3VsdHkuY3NlLnRhbXUuZWR1L2RhdmlzL3B1YmxpY2F0aW9ucy5odG1sXG4gICAqL1xuXG4gIHJldHVybiBmdW5jdGlvbiBjc1NxcihvcmRlciwgYSwgcXIpIHtcbiAgICAvLyBhIGFycmF5c1xuICAgIHZhciBhcHRyID0gYS5fcHRyO1xuICAgIHZhciBhc2l6ZSA9IGEuX3NpemU7IC8vIGNvbHVtbnNcblxuICAgIHZhciBuID0gYXNpemVbMV07IC8vIHZhcnNcblxuICAgIHZhciBrOyAvLyBzeW1ib2xpYyBhbmFseXNpcyByZXN1bHRcblxuICAgIHZhciBzID0ge307IC8vIGZpbGwtcmVkdWNpbmcgb3JkZXJpbmdcblxuICAgIHMucSA9IGNzQW1kKG9yZGVyLCBhKTsgLy8gdmFsaWRhdGUgcmVzdWx0c1xuXG4gICAgaWYgKG9yZGVyICYmICFzLnEpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gLy8gUVIgc3ltYm9saWMgYW5hbHlzaXNcblxuXG4gICAgaWYgKHFyKSB7XG4gICAgICAvLyBhcHBseSBwZXJtdXRhdGlvbnMgaWYgbmVlZGVkXG4gICAgICB2YXIgYyA9IG9yZGVyID8gKDAsIF9jc1Blcm11dGUuY3NQZXJtdXRlKShhLCBudWxsLCBzLnEsIDApIDogYTsgLy8gZXRyZWUgb2YgQycqQywgd2hlcmUgQz1BKDoscSlcblxuICAgICAgcy5wYXJlbnQgPSAoMCwgX2NzRXRyZWUuY3NFdHJlZSkoYywgMSk7IC8vIHBvc3Qgb3JkZXIgZWxpbWluYXRpb24gdHJlZVxuXG4gICAgICB2YXIgcG9zdCA9ICgwLCBfY3NQb3N0LmNzUG9zdCkocy5wYXJlbnQsIG4pOyAvLyBjb2wgY291bnRzIGNob2woQycqQylcblxuICAgICAgcy5jcCA9IGNzQ291bnRzKGMsIHMucGFyZW50LCBwb3N0LCAxKTsgLy8gY2hlY2sgd2UgaGF2ZSBldmVyeXRoaW5nIG5lZWRlZCB0byBjYWxjdWxhdGUgbnVtYmVyIG9mIG5vbnplcm8gZWxlbWVudHNcblxuICAgICAgaWYgKGMgJiYgcy5wYXJlbnQgJiYgcy5jcCAmJiBfdmNvdW50KGMsIHMpKSB7XG4gICAgICAgIC8vIGNhbGN1bGF0ZSBudW1iZXIgb2Ygbm9uemVybyBlbGVtZW50c1xuICAgICAgICBmb3IgKHMudW56ID0gMCwgayA9IDA7IGsgPCBuOyBrKyspIHtcbiAgICAgICAgICBzLnVueiArPSBzLmNwW2tdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZvciBMVSBmYWN0b3JpemF0aW9uIG9ubHksIGd1ZXNzIG5ueihMKSBhbmQgbm56KFUpXG4gICAgICBzLnVueiA9IDQgKiBhcHRyW25dICsgbjtcbiAgICAgIHMubG56ID0gcy51bno7XG4gICAgfSAvLyByZXR1cm4gcmVzdWx0IFNcblxuXG4gICAgcmV0dXJuIHM7XG4gIH07XG4gIC8qKlxuICAgKiBDb21wdXRlIG5ueihWKSA9IHMubG56LCBzLnBpbnYsIHMubGVmdG1vc3QsIHMubTIgZnJvbSBBIGFuZCBzLnBhcmVudFxuICAgKi9cblxuICBmdW5jdGlvbiBfdmNvdW50KGEsIHMpIHtcbiAgICAvLyBhIGFycmF5c1xuICAgIHZhciBhcHRyID0gYS5fcHRyO1xuICAgIHZhciBhaW5kZXggPSBhLl9pbmRleDtcbiAgICB2YXIgYXNpemUgPSBhLl9zaXplOyAvLyByb3dzICYgY29sdW1uc1xuXG4gICAgdmFyIG0gPSBhc2l6ZVswXTtcbiAgICB2YXIgbiA9IGFzaXplWzFdOyAvLyBpbml0aWFsaXplIHMgYXJyYXlzXG5cbiAgICBzLnBpbnYgPSBbXTsgLy8gKG0gKyBuKVxuXG4gICAgcy5sZWZ0bW9zdCA9IFtdOyAvLyAobSlcbiAgICAvLyB2YXJzXG5cbiAgICB2YXIgcGFyZW50ID0gcy5wYXJlbnQ7XG4gICAgdmFyIHBpbnYgPSBzLnBpbnY7XG4gICAgdmFyIGxlZnRtb3N0ID0gcy5sZWZ0bW9zdDsgLy8gd29ya3NwYWNlLCBuZXh0OiBmaXJzdCBtIGVudHJpZXMsIGhlYWQ6IG5leHQgbiBlbnRyaWVzLCB0YWlsOiBuZXh0IG4gZW50cmllcywgbnF1ZTogbmV4dCBuIGVudHJpZXNcblxuICAgIHZhciB3ID0gW107IC8vIChtICsgMyAqIG4pXG5cbiAgICB2YXIgbmV4dCA9IDA7XG4gICAgdmFyIGhlYWQgPSBtO1xuICAgIHZhciB0YWlsID0gbSArIG47XG4gICAgdmFyIG5xdWUgPSBtICsgMiAqIG47IC8vIHZhcnNcblxuICAgIHZhciBpLCBrLCBwLCBwMCwgcDE7IC8vIGluaXRpYWxpemUgd1xuXG4gICAgZm9yIChrID0gMDsgayA8IG47IGsrKykge1xuICAgICAgLy8gcXVldWUgayBpcyBlbXB0eVxuICAgICAgd1toZWFkICsga10gPSAtMTtcbiAgICAgIHdbdGFpbCArIGtdID0gLTE7XG4gICAgICB3W25xdWUgKyBrXSA9IDA7XG4gICAgfSAvLyBpbml0aWFsaXplIHJvdyBhcnJheXNcblxuXG4gICAgZm9yIChpID0gMDsgaSA8IG07IGkrKykge1xuICAgICAgbGVmdG1vc3RbaV0gPSAtMTtcbiAgICB9IC8vIGxvb3AgY29sdW1ucyBiYWNrd2FyZHNcblxuXG4gICAgZm9yIChrID0gbiAtIDE7IGsgPj0gMDsgay0tKSB7XG4gICAgICAvLyB2YWx1ZXMgJiBpbmRleCBmb3IgY29sdW1uIGtcbiAgICAgIGZvciAocDAgPSBhcHRyW2tdLCBwMSA9IGFwdHJbayArIDFdLCBwID0gcDA7IHAgPCBwMTsgcCsrKSB7XG4gICAgICAgIC8vIGxlZnRtb3N0W2ldID0gbWluKGZpbmQoQShpLDopKSlcbiAgICAgICAgbGVmdG1vc3RbYWluZGV4W3BdXSA9IGs7XG4gICAgICB9XG4gICAgfSAvLyBzY2FuIHJvd3MgaW4gcmV2ZXJzZSBvcmRlclxuXG5cbiAgICBmb3IgKGkgPSBtIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIC8vIHJvdyBpIGlzIG5vdCB5ZXQgb3JkZXJlZFxuICAgICAgcGludltpXSA9IC0xO1xuICAgICAgayA9IGxlZnRtb3N0W2ldOyAvLyBjaGVjayByb3cgaSBpcyBlbXB0eVxuXG4gICAgICBpZiAoayA9PT0gLTEpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IC8vIGZpcnN0IHJvdyBpbiBxdWV1ZSBrXG5cblxuICAgICAgaWYgKHdbbnF1ZSArIGtdKysgPT09IDApIHtcbiAgICAgICAgd1t0YWlsICsga10gPSBpO1xuICAgICAgfSAvLyBwdXQgaSBhdCBoZWFkIG9mIHF1ZXVlIGtcblxuXG4gICAgICB3W25leHQgKyBpXSA9IHdbaGVhZCArIGtdO1xuICAgICAgd1toZWFkICsga10gPSBpO1xuICAgIH1cblxuICAgIHMubG56ID0gMDtcbiAgICBzLm0yID0gbTsgLy8gZmluZCByb3cgcGVybXV0YXRpb24gYW5kIG5ueihWKVxuXG4gICAgZm9yIChrID0gMDsgayA8IG47IGsrKykge1xuICAgICAgLy8gcmVtb3ZlIHJvdyBpIGZyb20gcXVldWUga1xuICAgICAgaSA9IHdbaGVhZCArIGtdOyAvLyBjb3VudCBWKGssaykgYXMgbm9uemVyb1xuXG4gICAgICBzLmxueisrOyAvLyBhZGQgYSBmaWN0aXRpb3VzIHJvd1xuXG4gICAgICBpZiAoaSA8IDApIHtcbiAgICAgICAgaSA9IHMubTIrKztcbiAgICAgIH0gLy8gYXNzb2NpYXRlIHJvdyBpIHdpdGggVig6LGspXG5cblxuICAgICAgcGludltpXSA9IGs7IC8vIHNraXAgaWYgVihrKzE6bSxrKSBpcyBlbXB0eVxuXG4gICAgICBpZiAoLS1ucXVlW2tdIDw9IDApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IC8vIG5xdWVba10gaXMgbm56IChWKGsrMTptLGspKVxuXG5cbiAgICAgIHMubG56ICs9IHdbbnF1ZSArIGtdOyAvLyBtb3ZlIGFsbCByb3dzIHRvIHBhcmVudCBvZiBrXG5cbiAgICAgIHZhciBwYSA9IHBhcmVudFtrXTtcblxuICAgICAgaWYgKHBhICE9PSAtMSkge1xuICAgICAgICBpZiAod1tucXVlICsgcGFdID09PSAwKSB7XG4gICAgICAgICAgd1t0YWlsICsgcGFdID0gd1t0YWlsICsga107XG4gICAgICAgIH1cblxuICAgICAgICB3W25leHQgKyB3W3RhaWwgKyBrXV0gPSB3W2hlYWQgKyBwYV07XG4gICAgICAgIHdbaGVhZCArIHBhXSA9IHdbbmV4dCArIGldO1xuICAgICAgICB3W25xdWUgKyBwYV0gKz0gd1tucXVlICsga107XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChpID0gMDsgaSA8IG07IGkrKykge1xuICAgICAgaWYgKHBpbnZbaV0gPCAwKSB7XG4gICAgICAgIHBpbnZbaV0gPSBrKys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVDc1NxciA9IGNyZWF0ZUNzU3FyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jc1RkZnMgPSBjc1RkZnM7XG5cbi8qKlxuICogRGVwdGgtZmlyc3Qgc2VhcmNoIGFuZCBwb3N0b3JkZXIgb2YgYSB0cmVlIHJvb3RlZCBhdCBub2RlIGpcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gIGogICAgICAgICAgICAgICBUaGUgdHJlZSBub2RlXG4gKiBAcGFyYW0ge051bWJlcn0gIGtcbiAqIEBwYXJhbSB7QXJyYXl9ICAgdyAgICAgICAgICAgICAgIFRoZSB3b3Jrc3BhY2UgYXJyYXlcbiAqIEBwYXJhbSB7TnVtYmVyfSAgaGVhZCAgICAgICAgICAgIFRoZSBpbmRleCBvZmZzZXQgd2l0aGluIHRoZSB3b3Jrc3BhY2UgZm9yIHRoZSBoZWFkIGFycmF5XG4gKiBAcGFyYW0ge051bWJlcn0gIG5leHQgICAgICAgICAgICBUaGUgaW5kZXggb2Zmc2V0IHdpdGhpbiB0aGUgd29ya3NwYWNlIGZvciB0aGUgbmV4dCBhcnJheVxuICogQHBhcmFtIHtBcnJheX0gICBwb3N0ICAgICAgICAgICAgVGhlIHBvc3Qgb3JkZXJpbmcgYXJyYXlcbiAqIEBwYXJhbSB7TnVtYmVyfSAgc3RhY2sgICAgICAgICAgIFRoZSBpbmRleCBvZmZzZXQgd2l0aGluIHRoZSB3b3Jrc3BhY2UgZm9yIHRoZSBzdGFjayBhcnJheVxuICpcbiAqIFJlZmVyZW5jZTogaHR0cDovL2ZhY3VsdHkuY3NlLnRhbXUuZWR1L2RhdmlzL3B1YmxpY2F0aW9ucy5odG1sXG4gKi9cbmZ1bmN0aW9uIGNzVGRmcyhqLCBrLCB3LCBoZWFkLCBuZXh0LCBwb3N0LCBzdGFjaykge1xuICAvLyB2YXJpYWJsZXNcbiAgdmFyIHRvcCA9IDA7IC8vIHBsYWNlIGogb24gdGhlIHN0YWNrXG5cbiAgd1tzdGFja10gPSBqOyAvLyB3aGlsZSAoc3RhY2sgaXMgbm90IGVtcHR5KVxuXG4gIHdoaWxlICh0b3AgPj0gMCkge1xuICAgIC8vIHAgPSB0b3Agb2Ygc3RhY2tcbiAgICB2YXIgcCA9IHdbc3RhY2sgKyB0b3BdOyAvLyBpID0geW91bmdlc3QgY2hpbGQgb2YgcFxuXG4gICAgdmFyIGkgPSB3W2hlYWQgKyBwXTtcblxuICAgIGlmIChpID09PSAtMSkge1xuICAgICAgLy8gcCBoYXMgbm8gdW5vcmRlcmVkIGNoaWxkcmVuIGxlZnRcbiAgICAgIHRvcC0tOyAvLyBub2RlIHAgaXMgdGhlIGt0aCBwb3N0b3JkZXJlZCBub2RlXG5cbiAgICAgIHBvc3RbaysrXSA9IHA7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHJlbW92ZSBpIGZyb20gY2hpbGRyZW4gb2YgcFxuICAgICAgd1toZWFkICsgcF0gPSB3W25leHQgKyBpXTsgLy8gaW5jcmVtZW50IHRvcFxuXG4gICAgICArK3RvcDsgLy8gc3RhcnQgZGZzIG9uIGNoaWxkIG5vZGUgaVxuXG4gICAgICB3W3N0YWNrICsgdG9wXSA9IGk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGs7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNzVW5mbGlwID0gY3NVbmZsaXA7XG5cbnZhciBfY3NGbGlwID0gcmVxdWlyZShcIi4vY3NGbGlwXCIpO1xuXG4vKipcbiAqIEZsaXBzIHRoZSB2YWx1ZSBpZiBpdCBpcyBuZWdhdGl2ZSBvZiByZXR1cm5zIHRoZSBzYW1lIHZhbHVlIG90aGVyd2lzZS5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gIGkgICAgICAgICAgICAgICBUaGUgdmFsdWUgdG8gZmxpcFxuICpcbiAqIFJlZmVyZW5jZTogaHR0cDovL2ZhY3VsdHkuY3NlLnRhbXUuZWR1L2RhdmlzL3B1YmxpY2F0aW9ucy5odG1sXG4gKi9cbmZ1bmN0aW9uIGNzVW5mbGlwKGkpIHtcbiAgLy8gZmxpcCB0aGUgdmFsdWUgaWYgaXQgaXMgbmVnYXRpdmVcbiAgcmV0dXJuIGkgPCAwID8gKDAsIF9jc0ZsaXAuY3NGbGlwKShpKSA6IGk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFicyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2Ficyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUFicyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgYSBudW1iZXIuIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzXG4gICAqIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5hYnMoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguYWJzKDMuNSkgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMy41XG4gICAqICAgIG1hdGguYWJzKC00LjIpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgNC4yXG4gICAqXG4gICAqICAgIG1hdGguYWJzKFszLCAtNSwgLTEsIDAsIDJdKSAgLy8gcmV0dXJucyBBcnJheSBbMywgNSwgMSwgMCwgMl1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIHNpZ25cbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXggfCBVbml0fSB4XG4gICAqICAgICAgICAgICAgQSBudW1iZXIgb3IgbWF0cml4IGZvciB3aGljaCB0byBnZXQgdGhlIGFic29sdXRlIHZhbHVlXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4IHwgVW5pdH1cbiAgICogICAgICAgICAgICBBYnNvbHV0ZSB2YWx1ZSBvZiBgeGBcbiAgICovXG4gIHZhciBhYnMgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmFic051bWJlcixcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmFicygpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHguYWJzKCk7XG4gICAgfSxcbiAgICBGcmFjdGlvbjogZnVuY3Rpb24gRnJhY3Rpb24oeCkge1xuICAgICAgcmV0dXJuIHguYWJzKCk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICAvLyBkZWVwIG1hcCBjb2xsZWN0aW9uLCBza2lwIHplcm9zIHNpbmNlIGFicygwKSA9IDBcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgYWJzLCB0cnVlKTtcbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgcmV0dXJuIHguYWJzKCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGFicztcbn0pO1xuZXhwb3J0cy5jcmVhdGVBYnMgPSBjcmVhdGVBYnM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFkZCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDFcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wNFwiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEwXCIpO1xuXG52YXIgX2FsZ29yaXRobTQgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIG5hbWUgPSAnYWRkJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdhZGRTY2FsYXInLCAnZXF1YWxTY2FsYXInLCAnRGVuc2VNYXRyaXgnLCAnU3BhcnNlTWF0cml4J107XG52YXIgY3JlYXRlQWRkID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgYWRkU2NhbGFyID0gX3JlZi5hZGRTY2FsYXIsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsXG4gICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXgsXG4gICAgICBTcGFyc2VNYXRyaXggPSBfcmVmLlNwYXJzZU1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTAxID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMDEpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNCA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0wNCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMCA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogQWRkIHR3byBvciBtb3JlIHZhbHVlcywgYHggKyB5YC5cbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmFkZCh4LCB5KVxuICAgKiAgICBtYXRoLmFkZCh4LCB5LCB6LCAuLi4pXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmFkZCgyLCAzKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDVcbiAgICogICAgbWF0aC5hZGQoMiwgMywgNCkgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA5XG4gICAqXG4gICAqICAgIGNvbnN0IGEgPSBtYXRoLmNvbXBsZXgoMiwgMylcbiAgICogICAgY29uc3QgYiA9IG1hdGguY29tcGxleCgtNCwgMSlcbiAgICogICAgbWF0aC5hZGQoYSwgYikgICAgICAgICAgICAgICAvLyByZXR1cm5zIENvbXBsZXggLTIgKyA0aVxuICAgKlxuICAgKiAgICBtYXRoLmFkZChbMSwgMiwgM10sIDQpICAgICAgIC8vIHJldHVybnMgQXJyYXkgWzUsIDYsIDddXG4gICAqXG4gICAqICAgIGNvbnN0IGMgPSBtYXRoLnVuaXQoJzUgY20nKVxuICAgKiAgICBjb25zdCBkID0gbWF0aC51bml0KCcyLjEgbW0nKVxuICAgKiAgICBtYXRoLmFkZChjLCBkKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgVW5pdCA1Mi4xIG1tXG4gICAqXG4gICAqICAgIG1hdGguYWRkKFwiMi4zXCIsIFwiNFwiKSAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDYuM1xuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgc3VidHJhY3QsIHN1bVxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggRmlyc3QgdmFsdWUgdG8gYWRkXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geSBTZWNvbmQgdmFsdWUgdG8gYWRkXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0gU3VtIG9mIGB4YCBhbmQgYHlgXG4gICAqL1xuXG4gIHZhciBhZGQgPSB0eXBlZChuYW1lLCAoMCwgX29iamVjdC5leHRlbmQpKHtcbiAgICAvLyB3ZSBleHRlbmQgdGhlIHNpZ25hdHVyZXMgb2YgYWRkU2NhbGFyIHdpdGggc2lnbmF0dXJlcyBkZWFsaW5nIHdpdGggbWF0cmljZXNcbiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTMoeCwgeSwgYWRkU2NhbGFyKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAxKHgsIHksIGFkZFNjYWxhciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDEoeSwgeCwgYWRkU2NhbGFyLCB0cnVlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDQoeCwgeSwgYWRkU2NhbGFyKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhZGQobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFkZChtYXRyaXgoeCksIHkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWRkKHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIERlbnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBhZGRTY2FsYXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTAoeCwgeSwgYWRkU2NhbGFyLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnYW55LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIGFueURlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCBhZGRTY2FsYXIsIHRydWUpO1xuICAgIH0sXG4gICAgJ2FueSwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gYW55U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMCh5LCB4LCBhZGRTY2FsYXIsIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBhbnknOiBmdW5jdGlvbiBBcnJheUFueSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCBhZGRTY2FsYXIsIGZhbHNlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnYW55LCBBcnJheSc6IGZ1bmN0aW9uIGFueUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeSksIHgsIGFkZFNjYWxhciwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ2FueSwgYW55JzogYWRkU2NhbGFyLFxuICAgICdhbnksIGFueSwgLi4uYW55JzogZnVuY3Rpb24gYW55QW55QW55KHgsIHksIHJlc3QpIHtcbiAgICAgIHZhciByZXN1bHQgPSBhZGQoeCwgeSk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXN1bHQgPSBhZGQocmVzdWx0LCByZXN0W2ldKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH0sIGFkZFNjYWxhci5zaWduYXR1cmVzKSk7XG4gIHJldHVybiBhZGQ7XG59KTtcbmV4cG9ydHMuY3JlYXRlQWRkID0gY3JlYXRlQWRkOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBZGRTY2FsYXIgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2FkZFNjYWxhcic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUFkZFNjYWxhciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIEFkZCB0d28gc2NhbGFyIHZhbHVlcywgYHggKyB5YC5cbiAgICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCBmb3IgaW50ZXJuYWwgdXNlOiBpdCBpcyB1c2VkIGJ5IHRoZSBwdWJsaWMgZnVuY3Rpb25cbiAgICogYGFkZGBcbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBzdXBwb3J0IGNvbGxlY3Rpb25zIChBcnJheSBvciBNYXRyaXgpLlxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0fSB4ICAgRmlyc3QgdmFsdWUgdG8gYWRkXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleH0geSAgICAgICAgICBTZWNvbmQgdmFsdWUgdG8gYWRkXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXR9ICAgICBTdW0gb2YgYHhgIGFuZCBgeWBcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHZhciBhZGRTY2FsYXIgPSB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciwgbnVtYmVyJzogX251bWJlci5hZGROdW1iZXIsXG4gICAgJ0NvbXBsZXgsIENvbXBsZXgnOiBmdW5jdGlvbiBDb21wbGV4Q29tcGxleCh4LCB5KSB7XG4gICAgICByZXR1cm4geC5hZGQoeSk7XG4gICAgfSxcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIHgucGx1cyh5KTtcbiAgICB9LFxuICAgICdGcmFjdGlvbiwgRnJhY3Rpb24nOiBmdW5jdGlvbiBGcmFjdGlvbkZyYWN0aW9uKHgsIHkpIHtcbiAgICAgIHJldHVybiB4LmFkZCh5KTtcbiAgICB9LFxuICAgICdVbml0LCBVbml0JzogZnVuY3Rpb24gVW5pdFVuaXQoeCwgeSkge1xuICAgICAgaWYgKHgudmFsdWUgPT09IG51bGwgfHwgeC52YWx1ZSA9PT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlciB4IGNvbnRhaW5zIGEgdW5pdCB3aXRoIHVuZGVmaW5lZCB2YWx1ZScpO1xuICAgICAgaWYgKHkudmFsdWUgPT09IG51bGwgfHwgeS52YWx1ZSA9PT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlciB5IGNvbnRhaW5zIGEgdW5pdCB3aXRoIHVuZGVmaW5lZCB2YWx1ZScpO1xuICAgICAgaWYgKCF4LmVxdWFsQmFzZSh5KSkgdGhyb3cgbmV3IEVycm9yKCdVbml0cyBkbyBub3QgbWF0Y2gnKTtcbiAgICAgIHZhciByZXMgPSB4LmNsb25lKCk7XG4gICAgICByZXMudmFsdWUgPSBhZGRTY2FsYXIocmVzLnZhbHVlLCB5LnZhbHVlKTtcbiAgICAgIHJlcy5maXhQcmVmaXggPSBmYWxzZTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGFkZFNjYWxhcjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVBZGRTY2FsYXIgPSBjcmVhdGVBZGRTY2FsYXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNicnQgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdjYnJ0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ2NvbmZpZycsICd0eXBlZCcsICdpc05lZ2F0aXZlJywgJ3VuYXJ5TWludXMnLCAnbWF0cml4JywgJ0NvbXBsZXgnLCAnQmlnTnVtYmVyJywgJ0ZyYWN0aW9uJ107XG52YXIgY3JlYXRlQ2JydCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGlzTmVnYXRpdmUgPSBfcmVmLmlzTmVnYXRpdmUsXG4gICAgICB1bmFyeU1pbnVzID0gX3JlZi51bmFyeU1pbnVzLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4LFxuICAgICAgQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXIsXG4gICAgICBGcmFjdGlvbiA9IF9yZWYuRnJhY3Rpb247XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgY3ViaWMgcm9vdCBvZiBhIHZhbHVlLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguY2JydCh4KVxuICAgKiAgICBtYXRoLmNicnQoeCwgYWxsUm9vdHMpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmNicnQoMjcpICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAzXG4gICAqICAgIG1hdGguY3ViZSgzKSAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDI3XG4gICAqICAgIG1hdGguY2JydCgtNjQpICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIC00XG4gICAqICAgIG1hdGguY2JydChtYXRoLnVuaXQoJzI3IG1eMycpKSAvLyByZXR1cm5zIFVuaXQgMyBtXG4gICAqICAgIG1hdGguY2JydChbMjcsIDY0LCAxMjVdKSAgICAgICAvLyByZXR1cm5zIFszLCA0LCA1XVxuICAgKlxuICAgKiAgICBjb25zdCB4ID0gbWF0aC5jb21wbGV4KCc4aScpXG4gICAqICAgIG1hdGguY2JydCh4KSAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIENvbXBsZXggMS43MzIwNTA4MDc1Njg5ICsgaVxuICAgKiAgICBtYXRoLmNicnQoeCwgdHJ1ZSkgICAgICAgICAgICAgLy8gcmV0dXJucyBNYXRyaXggW1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgIDEuNzMyMDUwODA3NTY4OSArIGlcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIC0xLjczMjA1MDgwNzU2ODkgKyBpXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAtMmlcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBzcXVhcmUsIHNxcnQsIGN1YmVcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4XG4gICAqICAgICAgICAgICAgVmFsdWUgZm9yIHdoaWNoIHRvIGNhbGN1bGF0ZSB0aGUgY3ViaWMgcm9vdC5cbiAgICogQHBhcmFtIHtib29sZWFufSBbYWxsUm9vdHNdICBPcHRpb25hbCwgZmFsc2UgYnkgZGVmYXVsdC4gT25seSBhcHBsaWNhYmxlXG4gICAqICAgICAgICAgICAgd2hlbiBgeGAgaXMgYSBudW1iZXIgb3IgY29tcGxleCBudW1iZXIuIElmIHRydWUsIGFsbCBjb21wbGV4XG4gICAqICAgICAgICAgICAgcm9vdHMgYXJlIHJldHVybmVkLCBpZiBmYWxzZSAoZGVmYXVsdCkgdGhlIHByaW5jaXBhbCByb290IGlzXG4gICAqICAgICAgICAgICAgcmV0dXJuZWQuXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9XG4gICAqICAgICAgICAgICAgUmV0dXJucyB0aGUgY3ViaWMgcm9vdCBvZiBgeGBcbiAgICovXG4gIHZhciBjYnJ0ID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogX251bWJlci5jYnJ0TnVtYmVyLFxuICAgIC8vIG5vdGU6IHNpZ25hdHVyZSAnbnVtYmVyLCBib29sZWFuJyBpcyBhbHNvIHN1cHBvcnRlZCxcbiAgICAvLyAgICAgICBjcmVhdGVkIGJ5IHR5cGVkIGFzIGl0IGtub3dzIGhvdyB0byBjb252ZXJ0IG51bWJlciB0byBDb21wbGV4XG4gICAgQ29tcGxleDogX2NicnRDb21wbGV4LFxuICAgICdDb21wbGV4LCBib29sZWFuJzogX2NicnRDb21wbGV4LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LmNicnQoKTtcbiAgICB9LFxuICAgIFVuaXQ6IF9jYnJ0VW5pdCxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICAvLyBkZWVwIG1hcCBjb2xsZWN0aW9uLCBza2lwIHplcm9zIHNpbmNlIGNicnQoMCkgPSAwXG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGNicnQsIHRydWUpO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGN1YmljIHJvb3QgZm9yIGEgY29tcGxleCBudW1iZXJcbiAgICogQHBhcmFtIHtDb21wbGV4fSB4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FsbFJvb3RzXSAgIElmIHRydWUsIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiBhbiBhcnJheVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGFsbCB0aHJlZSByb290cy4gSWYgZmFsc2Ugb3IgdW5kZWZpbmVkLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcHJpbmNpcGFsIHJvb3QgaXMgcmV0dXJuZWQuXG4gICAqIEByZXR1cm5zIHtDb21wbGV4IHwgQXJyYXkuPENvbXBsZXg+IHwgTWF0cml4LjxDb21wbGV4Pn0gUmV0dXJucyB0aGUgY3ViaWMgcm9vdChzKSBvZiB4XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9jYnJ0Q29tcGxleCh4LCBhbGxSb290cykge1xuICAgIC8vIGh0dHBzOi8vd3d3Lndpa2l3YW5kLmNvbS9lbi9DdWJlX3Jvb3QjL0NvbXBsZXhfbnVtYmVyc1xuICAgIHZhciBhcmczID0geC5hcmcoKSAvIDM7XG4gICAgdmFyIGFicyA9IHguYWJzKCk7IC8vIHByaW5jaXBhbCByb290OlxuXG4gICAgdmFyIHByaW5jaXBhbCA9IG5ldyBDb21wbGV4KCgwLCBfbnVtYmVyLmNicnROdW1iZXIpKGFicyksIDApLm11bChuZXcgQ29tcGxleCgwLCBhcmczKS5leHAoKSk7XG5cbiAgICBpZiAoYWxsUm9vdHMpIHtcbiAgICAgIHZhciBhbGwgPSBbcHJpbmNpcGFsLCBuZXcgQ29tcGxleCgoMCwgX251bWJlci5jYnJ0TnVtYmVyKShhYnMpLCAwKS5tdWwobmV3IENvbXBsZXgoMCwgYXJnMyArIE1hdGguUEkgKiAyIC8gMykuZXhwKCkpLCBuZXcgQ29tcGxleCgoMCwgX251bWJlci5jYnJ0TnVtYmVyKShhYnMpLCAwKS5tdWwobmV3IENvbXBsZXgoMCwgYXJnMyAtIE1hdGguUEkgKiAyIC8gMykuZXhwKCkpXTtcbiAgICAgIHJldHVybiBjb25maWcubWF0cml4ID09PSAnQXJyYXknID8gYWxsIDogbWF0cml4KGFsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBwcmluY2lwYWw7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGN1YmljIHJvb3QgZm9yIGEgVW5pdFxuICAgKiBAcGFyYW0ge1VuaXR9IHhcbiAgICogQHJldHVybiB7VW5pdH0gUmV0dXJucyB0aGUgY3ViaWMgcm9vdCBvZiB4XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX2NicnRVbml0KHgpIHtcbiAgICBpZiAoeC52YWx1ZSAmJiAoMCwgX2lzLmlzQ29tcGxleCkoeC52YWx1ZSkpIHtcbiAgICAgIHZhciByZXN1bHQgPSB4LmNsb25lKCk7XG4gICAgICByZXN1bHQudmFsdWUgPSAxLjA7XG4gICAgICByZXN1bHQgPSByZXN1bHQucG93KDEuMCAvIDMpOyAvLyBDb21wdXRlIHRoZSB1bml0c1xuXG4gICAgICByZXN1bHQudmFsdWUgPSBfY2JydENvbXBsZXgoeC52YWx1ZSk7IC8vIENvbXB1dGUgdGhlIHZhbHVlXG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBuZWdhdGUgPSBpc05lZ2F0aXZlKHgudmFsdWUpO1xuXG4gICAgICBpZiAobmVnYXRlKSB7XG4gICAgICAgIHgudmFsdWUgPSB1bmFyeU1pbnVzKHgudmFsdWUpO1xuICAgICAgfSAvLyBUT0RPOiBjcmVhdGUgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIHRoaXNcblxuXG4gICAgICB2YXIgdGhpcmQ7XG5cbiAgICAgIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKSh4LnZhbHVlKSkge1xuICAgICAgICB0aGlyZCA9IG5ldyBCaWdOdW1iZXIoMSkuZGl2KDMpO1xuICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzRnJhY3Rpb24pKHgudmFsdWUpKSB7XG4gICAgICAgIHRoaXJkID0gbmV3IEZyYWN0aW9uKDEsIDMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcmQgPSAxIC8gMztcbiAgICAgIH1cblxuICAgICAgdmFyIF9yZXN1bHQgPSB4LnBvdyh0aGlyZCk7XG5cbiAgICAgIGlmIChuZWdhdGUpIHtcbiAgICAgICAgX3Jlc3VsdC52YWx1ZSA9IHVuYXJ5TWludXMoX3Jlc3VsdC52YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfcmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjYnJ0O1xufSk7XG5leHBvcnRzLmNyZWF0ZUNicnQgPSBjcmVhdGVDYnJ0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDZWlsID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9uZWFybHlFcXVhbCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9iaWdudW1iZXIvbmVhcmx5RXF1YWxcIik7XG5cbnZhciBfbnVtYmVyMiA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2NlaWwnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ3JvdW5kJ107XG52YXIgY3JlYXRlQ2VpbCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIHJvdW5kID0gX3JlZi5yb3VuZDtcblxuICAvKipcbiAgICogUm91bmQgYSB2YWx1ZSB0b3dhcmRzIHBsdXMgaW5maW5pdHlcbiAgICogSWYgYHhgIGlzIGNvbXBsZXgsIGJvdGggcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnQgYXJlIHJvdW5kZWQgdG93YXJkcyBwbHVzIGluZmluaXR5LlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguY2VpbCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5jZWlsKDMuMikgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA0XG4gICAqICAgIG1hdGguY2VpbCgzLjgpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgNFxuICAgKiAgICBtYXRoLmNlaWwoLTQuMikgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIC00XG4gICAqICAgIG1hdGguY2VpbCgtNC43KSAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgLTRcbiAgICpcbiAgICogICAgY29uc3QgYyA9IG1hdGguY29tcGxleCgzLjIsIC0yLjcpXG4gICAqICAgIG1hdGguY2VpbChjKSAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDQgLSAyaVxuICAgKlxuICAgKiAgICBtYXRoLmNlaWwoWzMuMiwgMy44LCAtNC43XSkgIC8vIHJldHVybnMgQXJyYXkgWzQsIDQsIC00XVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgZmxvb3IsIGZpeCwgcm91bmRcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHggIE51bWJlciB0byBiZSByb3VuZGVkXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBSb3VuZGVkIHZhbHVlXG4gICAqL1xuICB2YXIgY2VpbCA9IHR5cGVkKCdjZWlsJywge1xuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgICAgIGlmICgoMCwgX251bWJlci5uZWFybHlFcXVhbCkoeCwgcm91bmQoeCksIGNvbmZpZy5lcHNpbG9uKSkge1xuICAgICAgICByZXR1cm4gcm91bmQoeCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gKDAsIF9udW1iZXIyLmNlaWxOdW1iZXIpKHgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5jZWlsKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICBpZiAoKDAsIF9uZWFybHlFcXVhbC5uZWFybHlFcXVhbCkoeCwgcm91bmQoeCksIGNvbmZpZy5lcHNpbG9uKSkge1xuICAgICAgICByZXR1cm4gcm91bmQoeCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4geC5jZWlsKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBGcmFjdGlvbjogZnVuY3Rpb24gRnJhY3Rpb24oeCkge1xuICAgICAgcmV0dXJuIHguY2VpbCgpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSBjZWlsKDApID0gMFxuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBjZWlsLCB0cnVlKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY2VpbDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVDZWlsID0gY3JlYXRlQ2VpbDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ3ViZSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2N1YmUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVDdWJlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogQ29tcHV0ZSB0aGUgY3ViZSBvZiBhIHZhbHVlLCBgeCAqIHggKiB4YC5cbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmN1YmUoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguY3ViZSgyKSAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDhcbiAgICogICAgbWF0aC5wb3coMiwgMykgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgOFxuICAgKiAgICBtYXRoLmN1YmUoNCkgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA2NFxuICAgKiAgICA0ICogNCAqIDQgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA2NFxuICAgKlxuICAgKiAgICBtYXRoLmN1YmUoWzEsIDIsIDMsIDRdKSAvLyByZXR1cm5zIEFycmF5IFsxLCA4LCAyNywgNjRdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBtdWx0aXBseSwgc3F1YXJlLCBwb3csIGNicnRcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXggfCBVbml0fSB4ICBOdW1iZXIgZm9yIHdoaWNoIHRvIGNhbGN1bGF0ZSB0aGUgY3ViZVxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeCB8IFVuaXR9IEN1YmUgb2YgeFxuICAgKi9cbiAgdmFyIGN1YmUgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmN1YmVOdW1iZXIsXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5tdWwoeCkubXVsKHgpOyAvLyBJcyBmYXN0ZXIgdGhhbiBwb3coeCwgMylcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LnRpbWVzKHgpLnRpbWVzKHgpO1xuICAgIH0sXG4gICAgRnJhY3Rpb246IGZ1bmN0aW9uIEZyYWN0aW9uKHgpIHtcbiAgICAgIHJldHVybiB4LnBvdygzKTsgLy8gSXMgZmFzdGVyIHRoYW4gbXVsKCltdWwoKW11bCgpXG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICAvLyBkZWVwIG1hcCBjb2xsZWN0aW9uLCBza2lwIHplcm9zIHNpbmNlIGN1YmUoMCkgPSAwXG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGN1YmUsIHRydWUpO1xuICAgIH0sXG4gICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7XG4gICAgICByZXR1cm4geC5wb3coMyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGN1YmU7XG59KTtcbmV4cG9ydHMuY3JlYXRlQ3ViZSA9IGNyZWF0ZUN1YmU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZURpdmlkZSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTFcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIG5hbWUgPSAnZGl2aWRlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdtdWx0aXBseScsICdlcXVhbFNjYWxhcicsICdkaXZpZGVTY2FsYXInLCAnaW52J107XG52YXIgY3JlYXRlRGl2aWRlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5LFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLFxuICAgICAgZGl2aWRlU2NhbGFyID0gX3JlZi5kaXZpZGVTY2FsYXIsXG4gICAgICBpbnYgPSBfcmVmLmludjtcbiAgdmFyIGFsZ29yaXRobTExID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMTEpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTIuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBEaXZpZGUgdHdvIHZhbHVlcywgYHggLyB5YC5cbiAgICogVG8gZGl2aWRlIG1hdHJpY2VzLCBgeGAgaXMgbXVsdGlwbGllZCB3aXRoIHRoZSBpbnZlcnNlIG9mIGB5YDogYHggKiBpbnYoeSlgLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguZGl2aWRlKHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmRpdmlkZSgyLCAzKSAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDAuNjY2NjY2NjY2NjY2NjY2NlxuICAgKlxuICAgKiAgICBjb25zdCBhID0gbWF0aC5jb21wbGV4KDUsIDE0KVxuICAgKiAgICBjb25zdCBiID0gbWF0aC5jb21wbGV4KDQsIDEpXG4gICAqICAgIG1hdGguZGl2aWRlKGEsIGIpICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDIgKyAzaVxuICAgKlxuICAgKiAgICBjb25zdCBjID0gW1s3LCAtNl0sIFsxMywgLTRdXVxuICAgKiAgICBjb25zdCBkID0gW1sxLCAyXSwgWzQsIDNdXVxuICAgKiAgICBtYXRoLmRpdmlkZShjLCBkKSAgICAgICAgICAgIC8vIHJldHVybnMgQXJyYXkgW1stOSwgNF0sIFstMTEsIDZdXVxuICAgKlxuICAgKiAgICBjb25zdCBlID0gbWF0aC51bml0KCcxOCBrbScpXG4gICAqICAgIG1hdGguZGl2aWRlKGUsIDQuNSkgICAgICAgICAgLy8gcmV0dXJucyBVbml0IDQga21cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIG11bHRpcGx5XG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCAgIE51bWVyYXRvclxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geSAgICAgICAgICBEZW5vbWluYXRvclxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9ICAgICAgICAgICAgICAgICAgICAgIFF1b3RpZW50LCBgeCAvIHlgXG4gICAqL1xuXG4gIHJldHVybiB0eXBlZCgnZGl2aWRlJywgKDAsIF9vYmplY3QuZXh0ZW5kKSh7XG4gICAgLy8gd2UgZXh0ZW5kIHRoZSBzaWduYXR1cmVzIG9mIGRpdmlkZVNjYWxhciB3aXRoIHNpZ25hdHVyZXMgZGVhbGluZyB3aXRoIG1hdHJpY2VzXG4gICAgJ0FycmF5IHwgTWF0cml4LCBBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4QXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gVE9ETzogaW1wbGVtZW50IG1hdHJpeCByaWdodCBkaXZpc2lvbiB1c2luZyBwc2V1ZG8gaW52ZXJzZVxuICAgICAgLy8gaHR0cHM6Ly93d3cubWF0aHdvcmtzLm5sL2hlbHAvbWF0bGFiL3JlZi9tcmRpdmlkZS5odG1sXG4gICAgICAvLyBodHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL29jdGF2ZS9kb2MvaW50ZXJwcmV0ZXIvQXJpdGhtZXRpYy1PcHMuaHRtbFxuICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTIyNjM5MzIvaG93LWRvZXMtZ251LW9jdGF2ZS1tYXRyaXgtZGl2aXNpb24td29yay1nZXR0aW5nLXVuZXhwZWN0ZWQtYmVoYXZpb3VyXG4gICAgICByZXR1cm4gbXVsdGlwbHkoeCwgaW52KHkpKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIGRpdmlkZVNjYWxhciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMSh4LCB5LCBkaXZpZGVTY2FsYXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgZGl2aWRlU2NhbGFyLCBmYWxzZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ2FueSwgQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBhbnlBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gbXVsdGlwbHkoeCwgaW52KHkpKTtcbiAgICB9XG4gIH0sIGRpdmlkZVNjYWxhci5zaWduYXR1cmVzKSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlRGl2aWRlID0gY3JlYXRlRGl2aWRlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVEaXZpZGVTY2FsYXIgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgbmFtZSA9ICdkaXZpZGVTY2FsYXInO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbnVtZXJpYyddO1xudmFyIGNyZWF0ZURpdmlkZVNjYWxhciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBudW1lcmljID0gX3JlZi5udW1lcmljO1xuXG4gIC8qKlxuICAgKiBEaXZpZGUgdHdvIHNjYWxhciB2YWx1ZXMsIGB4IC8geWAuXG4gICAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgZm9yIGludGVybmFsIHVzZTogaXQgaXMgdXNlZCBieSB0aGUgcHVibGljIGZ1bmN0aW9uc1xuICAgKiBgZGl2aWRlYCBhbmQgYGludmAuXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3Qgc3VwcG9ydCBjb2xsZWN0aW9ucyAoQXJyYXkgb3IgTWF0cml4KS5cbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdH0geCAgIE51bWVyYXRvclxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXh9IHkgICAgICAgICAgRGVub21pbmF0b3JcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdH0gICAgIFF1b3RpZW50LCBgeCAvIHlgXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB2YXIgZGl2aWRlU2NhbGFyID0gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geCAvIHk7XG4gICAgfSxcbiAgICAnQ29tcGxleCwgQ29tcGxleCc6IGZ1bmN0aW9uIENvbXBsZXhDb21wbGV4KHgsIHkpIHtcbiAgICAgIHJldHVybiB4LmRpdih5KTtcbiAgICB9LFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IGZ1bmN0aW9uIEJpZ051bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geC5kaXYoeSk7XG4gICAgfSxcbiAgICAnRnJhY3Rpb24sIEZyYWN0aW9uJzogZnVuY3Rpb24gRnJhY3Rpb25GcmFjdGlvbih4LCB5KSB7XG4gICAgICByZXR1cm4geC5kaXYoeSk7XG4gICAgfSxcbiAgICAnVW5pdCwgbnVtYmVyIHwgRnJhY3Rpb24gfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBVbml0TnVtYmVyRnJhY3Rpb25CaWdOdW1iZXIoeCwgeSkge1xuICAgICAgdmFyIHJlcyA9IHguY2xvbmUoKTsgLy8gVE9ETzogbW92ZSB0aGUgZGl2aWRlIGZ1bmN0aW9uIHRvIFVuaXQuanMsIGl0IHVzZXMgaW50ZXJuYWxzIG9mIFVuaXRcblxuICAgICAgdmFyIG9uZSA9IG51bWVyaWMoMSwgKDAsIF9pcy50eXBlT2YpKHkpKTtcbiAgICAgIHJlcy52YWx1ZSA9IGRpdmlkZVNjYWxhcihyZXMudmFsdWUgPT09IG51bGwgPyByZXMuX25vcm1hbGl6ZShvbmUpIDogcmVzLnZhbHVlLCB5KTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgRnJhY3Rpb24gfCBCaWdOdW1iZXIsIFVuaXQnOiBmdW5jdGlvbiBudW1iZXJGcmFjdGlvbkJpZ051bWJlclVuaXQoeCwgeSkge1xuICAgICAgdmFyIHJlcyA9IHkuY2xvbmUoKTtcbiAgICAgIHJlcyA9IHJlcy5wb3coLTEpOyAvLyBUT0RPOiBtb3ZlIHRoZSBkaXZpZGUgZnVuY3Rpb24gdG8gVW5pdC5qcywgaXQgdXNlcyBpbnRlcm5hbHMgb2YgVW5pdFxuXG4gICAgICB2YXIgb25lID0gbnVtZXJpYygxLCAoMCwgX2lzLnR5cGVPZikoeCkpO1xuICAgICAgcmVzLnZhbHVlID0gZGl2aWRlU2NhbGFyKHgsIHkudmFsdWUgPT09IG51bGwgPyB5Ll9ub3JtYWxpemUob25lKSA6IHkudmFsdWUpO1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9LFxuICAgICdVbml0LCBVbml0JzogZnVuY3Rpb24gVW5pdFVuaXQoeCwgeSkge1xuICAgICAgcmV0dXJuIHguZGl2aWRlKHkpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBkaXZpZGVTY2FsYXI7XG59KTtcbmV4cG9ydHMuY3JlYXRlRGl2aWRlU2NhbGFyID0gY3JlYXRlRGl2aWRlU2NhbGFyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVEb3REaXZpZGUgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wMlwiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAzXCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDdcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMVwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEyXCIpO1xuXG52YXIgX2FsZ29yaXRobTYgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNyA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIG5hbWUgPSAnZG90RGl2aWRlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdlcXVhbFNjYWxhcicsICdkaXZpZGVTY2FsYXInLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVEb3REaXZpZGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsXG4gICAgICBkaXZpZGVTY2FsYXIgPSBfcmVmLmRpdmlkZVNjYWxhcixcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTAyID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMDIpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMDMgPSAoMCwgX2FsZ29yaXRobTIuY3JlYXRlQWxnb3JpdGhtMDMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNyA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0wNykoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMSA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0xMSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMiA9ICgwLCBfYWxnb3JpdGhtNS5jcmVhdGVBbGdvcml0aG0xMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtNi5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG03LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogRGl2aWRlIHR3byBtYXRyaWNlcyBlbGVtZW50IHdpc2UuIFRoZSBmdW5jdGlvbiBhY2NlcHRzIGJvdGggbWF0cmljZXMgYW5kXG4gICAqIHNjYWxhciB2YWx1ZXMuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5kb3REaXZpZGUoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguZG90RGl2aWRlKDIsIDQpICAgLy8gcmV0dXJucyAwLjVcbiAgICpcbiAgICogICAgYSA9IFtbOSwgNV0sIFs2LCAxXV1cbiAgICogICAgYiA9IFtbMywgMl0sIFs1LCAyXV1cbiAgICpcbiAgICogICAgbWF0aC5kb3REaXZpZGUoYSwgYikgICAvLyByZXR1cm5zIFtbMywgMi41XSwgWzEuMiwgMC41XV1cbiAgICogICAgbWF0aC5kaXZpZGUoYSwgYikgICAgICAvLyByZXR1cm5zIFtbMS43NSwgMC43NV0sIFstMS43NSwgMi4yNV1dXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBkaXZpZGUsIG11bHRpcGx5LCBkb3RNdWx0aXBseVxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggTnVtZXJhdG9yXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geSBEZW5vbWluYXRvclxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9ICAgICAgICAgICAgICAgICAgICBRdW90aWVudCwgYHggLi8geWBcbiAgICovXG5cbiAgdmFyIGRvdERpdmlkZSA9IHR5cGVkKG5hbWUsIHtcbiAgICAnYW55LCBhbnknOiBkaXZpZGVTY2FsYXIsXG4gICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wNyh4LCB5LCBkaXZpZGVTY2FsYXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHksIHgsIGRpdmlkZVNjYWxhciwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh4LCB5LCBkaXZpZGVTY2FsYXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBkaXZpZGVTY2FsYXIpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGRvdERpdmlkZShtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gZG90RGl2aWRlKG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBkb3REaXZpZGUoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeCwgeSwgZGl2aWRlU2NhbGFyLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIERlbnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBkaXZpZGVTY2FsYXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeSwgeCwgZGl2aWRlU2NhbGFyLCB0cnVlKTtcbiAgICB9LFxuICAgICdhbnksIERlbnNlTWF0cml4JzogZnVuY3Rpb24gYW55RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIGRpdmlkZVNjYWxhciwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIGFueSc6IGZ1bmN0aW9uIEFycmF5QW55KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeCksIHksIGRpdmlkZVNjYWxhciwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgZGl2aWRlU2NhbGFyLCB0cnVlKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGRvdERpdmlkZTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVEb3REaXZpZGUgPSBjcmVhdGVEb3REaXZpZGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZURvdE11bHRpcGx5ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDJcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wOVwiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTExXCIpO1xuXG52YXIgX2FsZ29yaXRobTQgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIG5hbWUgPSAnZG90TXVsdGlwbHknO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2VxdWFsU2NhbGFyJywgJ211bHRpcGx5U2NhbGFyJ107XG52YXIgY3JlYXRlRG90TXVsdGlwbHkgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsXG4gICAgICBtdWx0aXBseVNjYWxhciA9IF9yZWYubXVsdGlwbHlTY2FsYXI7XG4gIHZhciBhbGdvcml0aG0wMiA9ICgwLCBfYWxnb3JpdGhtLmNyZWF0ZUFsZ29yaXRobTAyKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTA5ID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTA5KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTExID0gKDAsIF9hbGdvcml0aG0zLmNyZWF0ZUFsZ29yaXRobTExKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEzID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTEzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTUuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBNdWx0aXBseSB0d28gbWF0cmljZXMgZWxlbWVudCB3aXNlLiBUaGUgZnVuY3Rpb24gYWNjZXB0cyBib3RoIG1hdHJpY2VzIGFuZFxuICAgKiBzY2FsYXIgdmFsdWVzLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguZG90TXVsdGlwbHkoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguZG90TXVsdGlwbHkoMiwgNCkgLy8gcmV0dXJucyA4XG4gICAqXG4gICAqICAgIGEgPSBbWzksIDVdLCBbNiwgMV1dXG4gICAqICAgIGIgPSBbWzMsIDJdLCBbNSwgMl1dXG4gICAqXG4gICAqICAgIG1hdGguZG90TXVsdGlwbHkoYSwgYikgLy8gcmV0dXJucyBbWzI3LCAxMF0sIFszMCwgMl1dXG4gICAqICAgIG1hdGgubXVsdGlwbHkoYSwgYikgICAgLy8gcmV0dXJucyBbWzUyLCAyOF0sIFsyMywgMTRdXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgbXVsdGlwbHksIGRpdmlkZSwgZG90RGl2aWRlXG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCBMZWZ0IGhhbmQgdmFsdWVcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB5IFJpZ2h0IGhhbmQgdmFsdWVcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSAgICAgICAgICAgICAgICAgICAgTXVsdGlwbGljYXRpb24gb2YgYHhgIGFuZCBgeWBcbiAgICovXG5cbiAgdmFyIGRvdE11bHRpcGx5ID0gdHlwZWQobmFtZSwge1xuICAgICdhbnksIGFueSc6IG11bHRpcGx5U2NhbGFyLFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDkoeCwgeSwgbXVsdGlwbHlTY2FsYXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHksIHgsIG11bHRpcGx5U2NhbGFyLCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHgsIHksIG11bHRpcGx5U2NhbGFyLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTMoeCwgeSwgbXVsdGlwbHlTY2FsYXIpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGRvdE11bHRpcGx5KG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBkb3RNdWx0aXBseShtYXRyaXgoeCksIHkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gZG90TXVsdGlwbHkoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeCwgeSwgbXVsdGlwbHlTY2FsYXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIG11bHRpcGx5U2NhbGFyLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnYW55LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTExKHksIHgsIG11bHRpcGx5U2NhbGFyLCB0cnVlKTtcbiAgICB9LFxuICAgICdhbnksIERlbnNlTWF0cml4JzogZnVuY3Rpb24gYW55RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIG11bHRpcGx5U2NhbGFyLCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgbXVsdGlwbHlTY2FsYXIsIGZhbHNlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnYW55LCBBcnJheSc6IGZ1bmN0aW9uIGFueUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeSksIHgsIG11bHRpcGx5U2NhbGFyLCB0cnVlKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGRvdE11bHRpcGx5O1xufSk7XG5leHBvcnRzLmNyZWF0ZURvdE11bHRpcGx5ID0gY3JlYXRlRG90TXVsdGlwbHk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZURvdFBvdyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYWxnb3JpdGhtID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAzXCIpO1xuXG52YXIgX2FsZ29yaXRobTIgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDdcIik7XG5cbnZhciBfYWxnb3JpdGhtMyA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMVwiKTtcblxudmFyIF9hbGdvcml0aG00ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEyXCIpO1xuXG52YXIgX2FsZ29yaXRobTUgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIG5hbWUgPSAnZG90UG93JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2VxdWFsU2NhbGFyJywgJ21hdHJpeCcsICdwb3cnLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVEb3RQb3cgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBwb3cgPSBfcmVmLnBvdyxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTAzID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMDMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNyA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0wNykoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMSA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMiA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0xMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtNS5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG02LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgcG93ZXIgb2YgeCB0byB5IGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmRvdFBvdyh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5kb3RQb3coMiwgMykgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA4XG4gICAqXG4gICAqICAgIGNvbnN0IGEgPSBbWzEsIDJdLCBbNCwgM11dXG4gICAqICAgIG1hdGguZG90UG93KGEsIDIpICAgICAgICAgICAgLy8gcmV0dXJucyBBcnJheSBbWzEsIDRdLCBbMTYsIDldXVxuICAgKiAgICBtYXRoLnBvdyhhLCAyKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgQXJyYXkgW1s5LCA4XSwgWzE2LCAxN11dXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBwb3csIHNxcnQsIG11bHRpcGx5XG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggIFRoZSBiYXNlXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHkgIFRoZSBleHBvbmVudFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSAgICAgICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSBvZiBgeGAgdG8gdGhlIHBvd2VyIGB5YFxuICAgKi9cblxuICB2YXIgZG90UG93ID0gdHlwZWQobmFtZSwge1xuICAgICdhbnksIGFueSc6IHBvdyxcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTA3KHgsIHksIHBvdywgZmFsc2UpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeSwgeCwgcG93LCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHgsIHksIHBvdywgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIHBvdyk7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gZG90UG93KG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBkb3RQb3cobWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGRvdFBvdyh4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMSh4LCB5LCBkb3RQb3csIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIGRvdFBvdywgZmFsc2UpO1xuICAgIH0sXG4gICAgJ2FueSwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gYW55U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih5LCB4LCBkb3RQb3csIHRydWUpO1xuICAgIH0sXG4gICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgZG90UG93LCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgZG90UG93LCBmYWxzZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ2FueSwgQXJyYXknOiBmdW5jdGlvbiBhbnlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCBkb3RQb3csIHRydWUpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZG90UG93O1xufSk7XG5leHBvcnRzLmNyZWF0ZURvdFBvdyA9IGNyZWF0ZURvdFBvdzsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRXhwID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnZXhwJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlRXhwID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBleHBvbmVudCBvZiBhIHZhbHVlLlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguZXhwKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmV4cCgyKSAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDcuMzg5MDU2MDk4OTMwNjQ5NVxuICAgKiAgICBtYXRoLnBvdyhtYXRoLmUsIDIpICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDcuMzg5MDU2MDk4OTMwNjQ5NVxuICAgKiAgICBtYXRoLmxvZyhtYXRoLmV4cCgyKSkgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDJcbiAgICpcbiAgICogICAgbWF0aC5leHAoWzEsIDIsIDNdKVxuICAgKiAgICAvLyByZXR1cm5zIEFycmF5IFtcbiAgICogICAgLy8gICAyLjcxODI4MTgyODQ1OTA0NSxcbiAgICogICAgLy8gICA3LjM4OTA1NjA5ODkzMDY0OTUsXG4gICAqICAgIC8vICAgMjAuMDg1NTM2OTIzMTg3NjY4XG4gICAqICAgIC8vIF1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGV4cG0xLCBsb2csIHBvd1xuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geCAgQSBudW1iZXIgb3IgbWF0cml4IHRvIGV4cG9uZW50aWF0ZVxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IEV4cG9uZW50IG9mIGB4YFxuICAgKi9cbiAgdmFyIGV4cCA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IF9udW1iZXIuZXhwTnVtYmVyLFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHguZXhwKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4geC5leHAoKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIC8vIFRPRE86IGV4cChzcGFyc2UpIHNob3VsZCByZXR1cm4gYSBkZW5zZSBtYXRyaXggc2luY2UgZXhwKDApPT0xXG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGV4cCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGV4cDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVFeHAgPSBjcmVhdGVFeHA7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUV4cG0xID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnZXhwbTEnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnQ29tcGxleCddO1xudmFyIGNyZWF0ZUV4cG0xID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIF9Db21wbGV4ID0gX3JlZi5Db21wbGV4O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIHZhbHVlIG9mIHN1YnRyYWN0aW5nIDEgZnJvbSB0aGUgZXhwb25lbnRpYWwgdmFsdWUuXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5leHBtMSh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5leHBtMSgyKSAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA2LjM4OTA1NjA5ODkzMDY1XG4gICAqICAgIG1hdGgucG93KG1hdGguZSwgMikgLSAxICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgNi4zODkwNTYwOTg5MzA2NDk1XG4gICAqICAgIG1hdGgubG9nKG1hdGguZXhwbTEoMikgKyAxKSAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMlxuICAgKlxuICAgKiAgICBtYXRoLmV4cG0xKFsxLCAyLCAzXSlcbiAgICogICAgLy8gcmV0dXJucyBBcnJheSBbXG4gICAqICAgIC8vICAgMS43MTgyODE4Mjg0NTkwNDUsXG4gICAqICAgIC8vICAgNi4zODkwNTYwOTg5MzA2NDk1LFxuICAgKiAgICAvLyAgIDE5LjA4NTUzNjkyMzE4NzY2OFxuICAgKiAgICAvLyBdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBleHAsIGxvZywgcG93XG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4ICBBIG51bWJlciBvciBtYXRyaXggdG8gYXBwbHkgZXhwbTFcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBFeHBvbmVudCBvZiBgeGBcbiAgICovXG4gIHZhciBleHBtMSA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IF9udW1iZXIuZXhwbTFOdW1iZXIsXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICB2YXIgciA9IE1hdGguZXhwKHgucmUpO1xuICAgICAgcmV0dXJuIG5ldyBfQ29tcGxleChyICogTWF0aC5jb3MoeC5pbSkgLSAxLCByICogTWF0aC5zaW4oeC5pbSkpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHguZXhwKCkubWludXMoMSk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGV4cG0xKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZXhwbTE7XG59KTtcbmV4cG9ydHMuY3JlYXRlRXhwbTEgPSBjcmVhdGVFeHBtMTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRml4ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBuYW1lID0gJ2ZpeCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdDb21wbGV4JywgJ2NlaWwnLCAnZmxvb3InXTtcbnZhciBjcmVhdGVGaXggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgX0NvbXBsZXggPSBfcmVmLkNvbXBsZXgsXG4gICAgICBjZWlsID0gX3JlZi5jZWlsLFxuICAgICAgZmxvb3IgPSBfcmVmLmZsb29yO1xuXG4gIC8qKlxuICAgKiBSb3VuZCBhIHZhbHVlIHRvd2FyZHMgemVyby5cbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmZpeCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5maXgoMy4yKSAgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAzXG4gICAqICAgIG1hdGguZml4KDMuOCkgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgM1xuICAgKiAgICBtYXRoLmZpeCgtNC4yKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIC00XG4gICAqICAgIG1hdGguZml4KC00LjcpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgLTRcbiAgICpcbiAgICogICAgY29uc3QgYyA9IG1hdGguY29tcGxleCgzLjIsIC0yLjcpXG4gICAqICAgIG1hdGguZml4KGMpICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDMgLSAyaVxuICAgKlxuICAgKiAgICBtYXRoLmZpeChbMy4yLCAzLjgsIC00LjddKSAgIC8vIHJldHVybnMgQXJyYXkgWzMsIDMsIC00XVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgY2VpbCwgZmxvb3IsIHJvdW5kXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHggTnVtYmVyIHRvIGJlIHJvdW5kZWRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9ICAgICAgICAgICAgUm91bmRlZCB2YWx1ZVxuICAgKi9cbiAgdmFyIGZpeCA9IHR5cGVkKCdmaXgnLCB7XG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHggPiAwID8gZmxvb3IoeCkgOiBjZWlsKHgpO1xuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4gbmV3IF9Db21wbGV4KHgucmUgPiAwID8gTWF0aC5mbG9vcih4LnJlKSA6IE1hdGguY2VpbCh4LnJlKSwgeC5pbSA+IDAgPyBNYXRoLmZsb29yKHguaW0pIDogTWF0aC5jZWlsKHguaW0pKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LmlzTmVnYXRpdmUoKSA/IGNlaWwoeCkgOiBmbG9vcih4KTtcbiAgICB9LFxuICAgIEZyYWN0aW9uOiBmdW5jdGlvbiBGcmFjdGlvbih4KSB7XG4gICAgICByZXR1cm4geC5zIDwgMCA/IHguY2VpbCgpIDogeC5mbG9vcigpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSBmaXgoMCkgPSAwXG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGZpeCwgdHJ1ZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGZpeDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVGaXggPSBjcmVhdGVGaXg7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUZsb29yID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9uZWFybHlFcXVhbCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9iaWdudW1iZXIvbmVhcmx5RXF1YWxcIik7XG5cbnZhciBuYW1lID0gJ2Zsb29yJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdyb3VuZCddO1xudmFyIGNyZWF0ZUZsb29yID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgcm91bmQgPSBfcmVmLnJvdW5kO1xuXG4gIC8qKlxuICAgKiBSb3VuZCBhIHZhbHVlIHRvd2FyZHMgbWludXMgaW5maW5pdHkuXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5mbG9vcih4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5mbG9vcigzLjIpICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAzXG4gICAqICAgIG1hdGguZmxvb3IoMy44KSAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgM1xuICAgKiAgICBtYXRoLmZsb29yKC00LjIpICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIC01XG4gICAqICAgIG1hdGguZmxvb3IoLTQuNykgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgLTVcbiAgICpcbiAgICogICAgY29uc3QgYyA9IG1hdGguY29tcGxleCgzLjIsIC0yLjcpXG4gICAqICAgIG1hdGguZmxvb3IoYykgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDMgLSAzaVxuICAgKlxuICAgKiAgICBtYXRoLmZsb29yKFszLjIsIDMuOCwgLTQuN10pIC8vIHJldHVybnMgQXJyYXkgWzMsIDMsIC01XVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgY2VpbCwgZml4LCByb3VuZFxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geCAgTnVtYmVyIHRvIGJlIHJvdW5kZWRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IFJvdW5kZWQgdmFsdWVcbiAgICovXG4gIHZhciBmbG9vciA9IHR5cGVkKCdmbG9vcicsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICBpZiAoKDAsIF9udW1iZXIubmVhcmx5RXF1YWwpKHgsIHJvdW5kKHgpLCBjb25maWcuZXBzaWxvbikpIHtcbiAgICAgICAgcmV0dXJuIHJvdW5kKHgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoeCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmZsb29yKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICBpZiAoKDAsIF9uZWFybHlFcXVhbC5uZWFybHlFcXVhbCkoeCwgcm91bmQoeCksIGNvbmZpZy5lcHNpbG9uKSkge1xuICAgICAgICByZXR1cm4gcm91bmQoeCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4geC5mbG9vcigpO1xuICAgICAgfVxuICAgIH0sXG4gICAgRnJhY3Rpb246IGZ1bmN0aW9uIEZyYWN0aW9uKHgpIHtcbiAgICAgIHJldHVybiB4LmZsb29yKCk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICAvLyBkZWVwIG1hcCBjb2xsZWN0aW9uLCBza2lwIHplcm9zIHNpbmNlIGZsb29yKDApID0gMFxuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBmbG9vciwgdHJ1ZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGZsb29yO1xufSk7XG5leHBvcnRzLmNyZWF0ZUZsb29yID0gY3JlYXRlRmxvb3I7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUdjZCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYWxnb3JpdGhtID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAxXCIpO1xuXG52YXIgX2FsZ29yaXRobTIgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDRcIik7XG5cbnZhciBfYWxnb3JpdGhtMyA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMFwiKTtcblxudmFyIF9hbGdvcml0aG00ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgX2FsZ29yaXRobTUgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnZ2NkJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdlcXVhbFNjYWxhcicsICdCaWdOdW1iZXInLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVHY2QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsXG4gICAgICBCaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcixcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTAxID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMDEpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNCA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0wNCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMCA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBncmVhdGVzdCBjb21tb24gZGl2aXNvciBmb3IgdHdvIG9yIG1vcmUgdmFsdWVzIG9yIGFycmF5cy5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmdjZChhLCBiKVxuICAgKiAgICBtYXRoLmdjZChhLCBiLCBjLCAuLi4pXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmdjZCg4LCAxMikgICAgICAgICAgICAgIC8vIHJldHVybnMgNFxuICAgKiAgICBtYXRoLmdjZCgtNCwgNikgICAgICAgICAgICAgIC8vIHJldHVybnMgMlxuICAgKiAgICBtYXRoLmdjZCgyNSwgMTUsIC0xMCkgICAgICAgIC8vIHJldHVybnMgNVxuICAgKlxuICAgKiAgICBtYXRoLmdjZChbOCwgLTRdLCBbMTIsIDZdKSAgIC8vIHJldHVybnMgWzQsIDJdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBsY20sIHhnY2RcbiAgICpcbiAgICogQHBhcmFtIHsuLi4gbnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBBcnJheSB8IE1hdHJpeH0gYXJncyAgVHdvIG9yIG1vcmUgaW50ZWdlciBudW1iZXJzXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQXJyYXkgfCBNYXRyaXh9ICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yXG4gICAqL1xuXG4gIHZhciBnY2QgPSB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciwgbnVtYmVyJzogX251bWJlci5nY2ROdW1iZXIsXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogX2djZEJpZ051bWJlcixcbiAgICAnRnJhY3Rpb24sIEZyYWN0aW9uJzogZnVuY3Rpb24gRnJhY3Rpb25GcmFjdGlvbih4LCB5KSB7XG4gICAgICByZXR1cm4geC5nY2QoeSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTA0KHgsIHksIGdjZCk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMSh5LCB4LCBnY2QsIHRydWUpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDEoeCwgeSwgZ2NkLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTMoeCwgeSwgZ2NkKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBnY2QobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGdjZChtYXRyaXgoeCksIHkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gZ2NkKHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEwKHgsIHksIGdjZCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBEZW5zZU1hdHJpeE51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgZ2NkLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEwKHksIHgsIGdjZCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckRlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCBnY2QsIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBBcnJheU51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCBnY2QsIGZhbHNlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBBcnJheSc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeSksIHgsIGdjZCwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgLy8gVE9ETzogbmVlZCBhIHNtYXJ0ZXIgbm90YXRpb24gaGVyZVxuICAgICdBcnJheSB8IE1hdHJpeCB8IG51bWJlciB8IEJpZ051bWJlciwgQXJyYXkgfCBNYXRyaXggfCBudW1iZXIgfCBCaWdOdW1iZXIsIC4uLkFycmF5IHwgTWF0cml4IHwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhOdW1iZXJCaWdOdW1iZXJBcnJheU1hdHJpeE51bWJlckJpZ051bWJlckFycmF5TWF0cml4TnVtYmVyQmlnTnVtYmVyKGEsIGIsIGFyZ3MpIHtcbiAgICAgIHZhciByZXMgPSBnY2QoYSwgYik7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXMgPSBnY2QocmVzLCBhcmdzW2ldKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZ2NkO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIGdjZCBmb3IgQmlnTnVtYmVyc1xuICAgKiBAcGFyYW0ge0JpZ051bWJlcn0gYVxuICAgKiBAcGFyYW0ge0JpZ051bWJlcn0gYlxuICAgKiBAcmV0dXJucyB7QmlnTnVtYmVyfSBSZXR1cm5zIGdyZWF0ZXN0IGNvbW1vbiBkZW5vbWluYXRvciBvZiBhIGFuZCBiXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9nY2RCaWdOdW1iZXIoYSwgYikge1xuICAgIGlmICghYS5pc0ludCgpIHx8ICFiLmlzSW50KCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGFyYW1ldGVycyBpbiBmdW5jdGlvbiBnY2QgbXVzdCBiZSBpbnRlZ2VyIG51bWJlcnMnKTtcbiAgICB9IC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0V1Y2xpZGVhbl9hbGdvcml0aG1cblxuXG4gICAgdmFyIHplcm8gPSBuZXcgQmlnTnVtYmVyKDApO1xuXG4gICAgd2hpbGUgKCFiLmlzWmVybygpKSB7XG4gICAgICB2YXIgciA9IGEubW9kKGIpO1xuICAgICAgYSA9IGI7XG4gICAgICBiID0gcjtcbiAgICB9XG5cbiAgICByZXR1cm4gYS5sdCh6ZXJvKSA/IGEubmVnKCkgOiBhO1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlR2NkID0gY3JlYXRlR2NkOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVIeXBvdCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBuYW1lID0gJ2h5cG90JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FicycsICdhZGRTY2FsYXInLCAnZGl2aWRlU2NhbGFyJywgJ211bHRpcGx5U2NhbGFyJywgJ3NxcnQnLCAnc21hbGxlcicsICdpc1Bvc2l0aXZlJ107XG52YXIgY3JlYXRlSHlwb3QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgYWJzID0gX3JlZi5hYnMsXG4gICAgICBhZGRTY2FsYXIgPSBfcmVmLmFkZFNjYWxhcixcbiAgICAgIGRpdmlkZVNjYWxhciA9IF9yZWYuZGl2aWRlU2NhbGFyLFxuICAgICAgbXVsdGlwbHlTY2FsYXIgPSBfcmVmLm11bHRpcGx5U2NhbGFyLFxuICAgICAgc3FydCA9IF9yZWYuc3FydCxcbiAgICAgIHNtYWxsZXIgPSBfcmVmLnNtYWxsZXIsXG4gICAgICBpc1Bvc2l0aXZlID0gX3JlZi5pc1Bvc2l0aXZlO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGh5cG90ZW51c2Egb2YgYSBsaXN0IHdpdGggdmFsdWVzLiBUaGUgaHlwb3RlbnVzYSBpcyBkZWZpbmVkIGFzOlxuICAgKlxuICAgKiAgICAgaHlwb3QoYSwgYiwgYywgLi4uKSA9IHNxcnQoYV4yICsgYl4yICsgY14yICsgLi4uKVxuICAgKlxuICAgKiBGb3IgbWF0cml4IGlucHV0LCB0aGUgaHlwb3RlbnVzYSBpcyBjYWxjdWxhdGVkIGZvciBhbGwgdmFsdWVzIGluIHRoZSBtYXRyaXguXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguaHlwb3QoYSwgYiwgLi4uKVxuICAgKiAgICAgbWF0aC5oeXBvdChbYSwgYiwgYywgLi4uXSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLmh5cG90KDMsIDQpICAgICAgLy8gNVxuICAgKiAgICAgbWF0aC5oeXBvdCgzLCA0LCA1KSAgIC8vIDcuMDcxMDY3ODExODY1NDc1NVxuICAgKiAgICAgbWF0aC5oeXBvdChbMywgNCwgNV0pIC8vIDcuMDcxMDY3ODExODY1NDc1NVxuICAgKiAgICAgbWF0aC5oeXBvdCgtMikgICAgICAgIC8vIDJcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBhYnMsIG5vcm1cbiAgICpcbiAgICogQHBhcmFtIHsuLi4gbnVtYmVyIHwgQmlnTnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IGFyZ3MgICAgQSBsaXN0IHdpdGggbnVtZXJpYyB2YWx1ZXMgb3IgYW4gQXJyYXkgb3IgTWF0cml4LlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRyaXggYW5kIEFycmF5IGlucHV0IGlzIGZsYXR0ZW5lZCBhbmQgcmV0dXJucyBhXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZSBudW1iZXIgZm9yIHRoZSB3aG9sZSBtYXRyaXguXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlcn0gUmV0dXJucyB0aGUgaHlwb3RoZW51c2Egb2YgdGhlIGlucHV0IHZhbHVlcy5cbiAgICovXG4gIHZhciBoeXBvdCA9IHR5cGVkKG5hbWUsIHtcbiAgICAnLi4uIG51bWJlciB8IEJpZ051bWJlcic6IF9oeXBvdCxcbiAgICBBcnJheTogZnVuY3Rpb24gQXJyYXkoeCkge1xuICAgICAgcmV0dXJuIGh5cG90LmFwcGx5KGh5cG90LCAoMCwgX2FycmF5LmZsYXR0ZW4pKHgpKTtcbiAgICB9LFxuICAgIE1hdHJpeDogZnVuY3Rpb24gTWF0cml4KHgpIHtcbiAgICAgIHJldHVybiBoeXBvdC5hcHBseShoeXBvdCwgKDAsIF9hcnJheS5mbGF0dGVuKSh4LnRvQXJyYXkoKSkpO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGh5cG90ZW51c2EgZm9yIGFuIEFycmF5IHdpdGggdmFsdWVzXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlciB8IEJpZ051bWJlcj59IGFyZ3NcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyfSBSZXR1cm5zIHRoZSByZXN1bHRcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgZnVuY3Rpb24gX2h5cG90KGFyZ3MpIHtcbiAgICAvLyBjb2RlIGJhc2VkIG9uIGBoeXBvdGAgZnJvbSBlczYtc2hpbTpcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vcGF1bG1pbGxyL2VzNi1zaGltL2Jsb2IvbWFzdGVyL2VzNi1zaGltLmpzI0wxNjE5LUwxNjMzXG4gICAgdmFyIHJlc3VsdCA9IDA7XG4gICAgdmFyIGxhcmdlc3QgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdmFsdWUgPSBhYnMoYXJnc1tpXSk7XG5cbiAgICAgIGlmIChzbWFsbGVyKGxhcmdlc3QsIHZhbHVlKSkge1xuICAgICAgICByZXN1bHQgPSBtdWx0aXBseVNjYWxhcihyZXN1bHQsIG11bHRpcGx5U2NhbGFyKGRpdmlkZVNjYWxhcihsYXJnZXN0LCB2YWx1ZSksIGRpdmlkZVNjYWxhcihsYXJnZXN0LCB2YWx1ZSkpKTtcbiAgICAgICAgcmVzdWx0ID0gYWRkU2NhbGFyKHJlc3VsdCwgMSk7XG4gICAgICAgIGxhcmdlc3QgPSB2YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IGFkZFNjYWxhcihyZXN1bHQsIGlzUG9zaXRpdmUodmFsdWUpID8gbXVsdGlwbHlTY2FsYXIoZGl2aWRlU2NhbGFyKHZhbHVlLCBsYXJnZXN0KSwgZGl2aWRlU2NhbGFyKHZhbHVlLCBsYXJnZXN0KSkgOiB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG11bHRpcGx5U2NhbGFyKGxhcmdlc3QsIHNxcnQocmVzdWx0KSk7XG4gIH1cblxuICByZXR1cm4gaHlwb3Q7XG59KTtcbmV4cG9ydHMuY3JlYXRlSHlwb3QgPSBjcmVhdGVIeXBvdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTGNtID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDJcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wNlwiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTExXCIpO1xuXG52YXIgX2FsZ29yaXRobTQgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdsY20nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2VxdWFsU2NhbGFyJ107XG52YXIgY3JlYXRlTGNtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyO1xuICB2YXIgYWxnb3JpdGhtMDIgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNiA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0wNikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMSA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBsZWFzdCBjb21tb24gbXVsdGlwbGUgZm9yIHR3byBvciBtb3JlIHZhbHVlcyBvciBhcnJheXMuXG4gICAqXG4gICAqIGxjbSBpcyBkZWZpbmVkIGFzOlxuICAgKlxuICAgKiAgICAgbGNtKGEsIGIpID0gYWJzKGEgKiBiKSAvIGdjZChhLCBiKVxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgubGNtKGEsIGIpXG4gICAqICAgIG1hdGgubGNtKGEsIGIsIGMsIC4uLilcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgubGNtKDQsIDYpICAgICAgICAgICAgICAgLy8gcmV0dXJucyAxMlxuICAgKiAgICBtYXRoLmxjbSg2LCAyMSkgICAgICAgICAgICAgIC8vIHJldHVybnMgNDJcbiAgICogICAgbWF0aC5sY20oNiwgMjEsIDUpICAgICAgICAgICAvLyByZXR1cm5zIDIxMFxuICAgKlxuICAgKiAgICBtYXRoLmxjbShbNCwgNl0sIFs2LCAyMV0pICAgIC8vIHJldHVybnMgWzEyLCA0Ml1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGdjZCwgeGdjZFxuICAgKlxuICAgKiBAcGFyYW0gey4uLiBudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0gYXJncyAgVHdvIG9yIG1vcmUgaW50ZWdlciBudW1iZXJzXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBsZWFzdCBjb21tb24gbXVsdGlwbGVcbiAgICovXG5cbiAgdmFyIGxjbSA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfbnVtYmVyLmxjbU51bWJlcixcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBfbGNtQmlnTnVtYmVyLFxuICAgICdGcmFjdGlvbiwgRnJhY3Rpb24nOiBmdW5jdGlvbiBGcmFjdGlvbkZyYWN0aW9uKHgsIHkpIHtcbiAgICAgIHJldHVybiB4LmxjbSh5KTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDYoeCwgeSwgbGNtKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHksIHgsIGxjbSwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMih4LCB5LCBsY20sIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBsY20pO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGxjbShtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gbGNtKG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBsY20oeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeE51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeCwgeSwgbGNtLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIERlbnNlTWF0cml4TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBsY20sIGZhbHNlKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlclNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeSwgeCwgbGNtLCB0cnVlKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyRGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIGxjbSwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIEFycmF5TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeCksIHksIGxjbSwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIEFycmF5JzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyQXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgbGNtLCB0cnVlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAvLyBUT0RPOiBuZWVkIGEgc21hcnRlciBub3RhdGlvbiBoZXJlXG4gICAgJ0FycmF5IHwgTWF0cml4IHwgbnVtYmVyIHwgQmlnTnVtYmVyLCBBcnJheSB8IE1hdHJpeCB8IG51bWJlciB8IEJpZ051bWJlciwgLi4uQXJyYXkgfCBNYXRyaXggfCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBBcnJheU1hdHJpeE51bWJlckJpZ051bWJlckFycmF5TWF0cml4TnVtYmVyQmlnTnVtYmVyQXJyYXlNYXRyaXhOdW1iZXJCaWdOdW1iZXIoYSwgYiwgYXJncykge1xuICAgICAgdmFyIHJlcyA9IGxjbShhLCBiKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlcyA9IGxjbShyZXMsIGFyZ3NbaV0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBsY207XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgbGNtIGZvciB0d28gQmlnTnVtYmVyc1xuICAgKiBAcGFyYW0ge0JpZ051bWJlcn0gYVxuICAgKiBAcGFyYW0ge0JpZ051bWJlcn0gYlxuICAgKiBAcmV0dXJucyB7QmlnTnVtYmVyfSBSZXR1cm5zIHRoZSBsZWFzdCBjb21tb24gbXVsdGlwbGUgb2YgYSBhbmQgYlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfbGNtQmlnTnVtYmVyKGEsIGIpIHtcbiAgICBpZiAoIWEuaXNJbnQoKSB8fCAhYi5pc0ludCgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlcnMgaW4gZnVuY3Rpb24gbGNtIG11c3QgYmUgaW50ZWdlciBudW1iZXJzJyk7XG4gICAgfVxuXG4gICAgaWYgKGEuaXNaZXJvKCkpIHtcbiAgICAgIHJldHVybiBhO1xuICAgIH1cblxuICAgIGlmIChiLmlzWmVybygpKSB7XG4gICAgICByZXR1cm4gYjtcbiAgICB9IC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0V1Y2xpZGVhbl9hbGdvcml0aG1cbiAgICAvLyBldmFsdWF0ZSBsY20gaGVyZSBpbmxpbmUgdG8gcmVkdWNlIG92ZXJoZWFkXG5cblxuICAgIHZhciBwcm9kID0gYS50aW1lcyhiKTtcblxuICAgIHdoaWxlICghYi5pc1plcm8oKSkge1xuICAgICAgdmFyIHQgPSBiO1xuICAgICAgYiA9IGEubW9kKHQpO1xuICAgICAgYSA9IHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb2QuZGl2KGEpLmFicygpO1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlTGNtID0gY3JlYXRlTGNtOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVMb2cgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdsb2cnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnY29uZmlnJywgJ3R5cGVkJywgJ2RpdmlkZVNjYWxhcicsICdDb21wbGV4J107XG52YXIgY3JlYXRlTG9nID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgZGl2aWRlU2NhbGFyID0gX3JlZi5kaXZpZGVTY2FsYXIsXG4gICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGxvZ2FyaXRobSBvZiBhIHZhbHVlLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgubG9nKHgpXG4gICAqICAgIG1hdGgubG9nKHgsIGJhc2UpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmxvZygzLjUpICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAxLjI1Mjc2Mjk2ODQ5NTM2OFxuICAgKiAgICBtYXRoLmV4cChtYXRoLmxvZygyLjQpKSAgICAgICAgLy8gcmV0dXJucyAyLjRcbiAgICpcbiAgICogICAgbWF0aC5wb3coMTAsIDQpICAgICAgICAgICAgICAgIC8vIHJldHVybnMgMTAwMDBcbiAgICogICAgbWF0aC5sb2coMTAwMDAsIDEwKSAgICAgICAgICAgIC8vIHJldHVybnMgNFxuICAgKiAgICBtYXRoLmxvZygxMDAwMCkgLyBtYXRoLmxvZygxMCkgLy8gcmV0dXJucyA0XG4gICAqXG4gICAqICAgIG1hdGgubG9nKDEwMjQsIDIpICAgICAgICAgICAgICAvLyByZXR1cm5zIDEwXG4gICAqICAgIG1hdGgucG93KDIsIDEwKSAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDEwMjRcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGV4cCwgbG9nMiwgbG9nMTAsIGxvZzFwXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4XG4gICAqICAgICAgICAgICAgVmFsdWUgZm9yIHdoaWNoIHRvIGNhbGN1bGF0ZSB0aGUgbG9nYXJpdGhtLlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXh9IFtiYXNlPWVdXG4gICAqICAgICAgICAgICAgT3B0aW9uYWwgYmFzZSBmb3IgdGhlIGxvZ2FyaXRobS4gSWYgbm90IHByb3ZpZGVkLCB0aGUgbmF0dXJhbFxuICAgKiAgICAgICAgICAgIGxvZ2FyaXRobSBvZiBgeGAgaXMgY2FsY3VsYXRlZC5cbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fVxuICAgKiAgICAgICAgICAgIFJldHVybnMgdGhlIGxvZ2FyaXRobSBvZiBgeGBcbiAgICovXG4gIHZhciBsb2cgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkge1xuICAgICAgaWYgKHggPj0gMCB8fCBjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfbnVtYmVyLmxvZ051bWJlcikoeCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBuZWdhdGl2ZSB2YWx1ZSAtPiBjb21wbGV4IHZhbHVlIGNvbXB1dGF0aW9uXG4gICAgICAgIHJldHVybiBuZXcgQ29tcGxleCh4LCAwKS5sb2coKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHgubG9nKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICBpZiAoIXguaXNOZWdhdGl2ZSgpIHx8IGNvbmZpZy5wcmVkaWN0YWJsZSkge1xuICAgICAgICByZXR1cm4geC5sbigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZG93bmdyYWRlIHRvIG51bWJlciwgcmV0dXJuIENvbXBsZXggdmFsdWVkIHJlc3VsdFxuICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoeC50b051bWJlcigpLCAwKS5sb2coKTtcbiAgICAgIH1cbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgbG9nKTtcbiAgICB9LFxuICAgICdhbnksIGFueSc6IGZ1bmN0aW9uIGFueUFueSh4LCBiYXNlKSB7XG4gICAgICAvLyBjYWxjdWxhdGUgbG9nYXJpdGhtIGZvciBhIHNwZWNpZmllZCBiYXNlLCBsb2coeCwgYmFzZSlcbiAgICAgIHJldHVybiBkaXZpZGVTY2FsYXIobG9nKHgpLCBsb2coYmFzZSkpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBsb2c7XG59KTtcbmV4cG9ydHMuY3JlYXRlTG9nID0gY3JlYXRlTG9nOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVMb2cxMCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2xvZzEwJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdDb21wbGV4J107XG52YXIgY3JlYXRlTG9nMTAgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBfQ29tcGxleCA9IF9yZWYuQ29tcGxleDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSAxMC1iYXNlIGxvZ2FyaXRobSBvZiBhIHZhbHVlLiBUaGlzIGlzIHRoZSBzYW1lIGFzIGNhbGN1bGF0aW5nIGBsb2coeCwgMTApYC5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmxvZzEwKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmxvZzEwKDAuMDAwMDEpICAgICAgICAgICAgLy8gcmV0dXJucyAtNVxuICAgKiAgICBtYXRoLmxvZzEwKDEwMDAwKSAgICAgICAgICAgICAgLy8gcmV0dXJucyA0XG4gICAqICAgIG1hdGgubG9nKDEwMDAwKSAvIG1hdGgubG9nKDEwKSAvLyByZXR1cm5zIDRcbiAgICogICAgbWF0aC5wb3coMTAsIDQpICAgICAgICAgICAgICAgIC8vIHJldHVybnMgMTAwMDBcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGV4cCwgbG9nLCBsb2cxcCwgbG9nMlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geFxuICAgKiAgICAgICAgICAgIFZhbHVlIGZvciB3aGljaCB0byBjYWxjdWxhdGUgdGhlIGxvZ2FyaXRobS5cbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fVxuICAgKiAgICAgICAgICAgIFJldHVybnMgdGhlIDEwLWJhc2UgbG9nYXJpdGhtIG9mIGB4YFxuICAgKi9cbiAgdmFyIGxvZzEwID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgICAgIGlmICh4ID49IDAgfHwgY29uZmlnLnByZWRpY3RhYmxlKSB7XG4gICAgICAgIHJldHVybiAoMCwgX251bWJlci5sb2cxME51bWJlcikoeCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBuZWdhdGl2ZSB2YWx1ZSAtPiBjb21wbGV4IHZhbHVlIGNvbXB1dGF0aW9uXG4gICAgICAgIHJldHVybiBuZXcgX0NvbXBsZXgoeCwgMCkubG9nKCkuZGl2KE1hdGguTE4xMCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiBuZXcgX0NvbXBsZXgoeCkubG9nKCkuZGl2KE1hdGguTE4xMCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICBpZiAoIXguaXNOZWdhdGl2ZSgpIHx8IGNvbmZpZy5wcmVkaWN0YWJsZSkge1xuICAgICAgICByZXR1cm4geC5sb2coKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGRvd25ncmFkZSB0byBudW1iZXIsIHJldHVybiBDb21wbGV4IHZhbHVlZCByZXN1bHRcbiAgICAgICAgcmV0dXJuIG5ldyBfQ29tcGxleCh4LnRvTnVtYmVyKCksIDApLmxvZygpLmRpdihNYXRoLkxOMTApO1xuICAgICAgfVxuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBsb2cxMCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGxvZzEwO1xufSk7XG5leHBvcnRzLmNyZWF0ZUxvZzEwID0gY3JlYXRlTG9nMTA7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUxvZzFwID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnbG9nMXAnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ2RpdmlkZVNjYWxhcicsICdsb2cnLCAnQ29tcGxleCddO1xudmFyIGNyZWF0ZUxvZzFwID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgZGl2aWRlU2NhbGFyID0gX3JlZi5kaXZpZGVTY2FsYXIsXG4gICAgICBsb2cgPSBfcmVmLmxvZyxcbiAgICAgIENvbXBsZXggPSBfcmVmLkNvbXBsZXg7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgbG9nYXJpdGhtIG9mIGEgYHZhbHVlKzFgLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgubG9nMXAoeClcbiAgICogICAgbWF0aC5sb2cxcCh4LCBiYXNlKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5sb2cxcCgyLjUpICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDEuMjUyNzYyOTY4NDk1MzY4XG4gICAqICAgIG1hdGguZXhwKG1hdGgubG9nMXAoMS40KSkgICAgICAgLy8gcmV0dXJucyAyLjRcbiAgICpcbiAgICogICAgbWF0aC5wb3coMTAsIDQpICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDEwMDAwXG4gICAqICAgIG1hdGgubG9nMXAoOTk5OSwgMTApICAgICAgICAgICAgLy8gcmV0dXJucyA0XG4gICAqICAgIG1hdGgubG9nMXAoOTk5OSkgLyBtYXRoLmxvZygxMCkgLy8gcmV0dXJucyA0XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBleHAsIGxvZywgbG9nMiwgbG9nMTBcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHhcbiAgICogICAgICAgICAgICBWYWx1ZSBmb3Igd2hpY2ggdG8gY2FsY3VsYXRlIHRoZSBsb2dhcml0aG0gb2YgYHgrMWAuXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleH0gW2Jhc2U9ZV1cbiAgICogICAgICAgICAgICBPcHRpb25hbCBiYXNlIGZvciB0aGUgbG9nYXJpdGhtLiBJZiBub3QgcHJvdmlkZWQsIHRoZSBuYXR1cmFsXG4gICAqICAgICAgICAgICAgbG9nYXJpdGhtIG9mIGB4KzFgIGlzIGNhbGN1bGF0ZWQuXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH1cbiAgICogICAgICAgICAgICBSZXR1cm5zIHRoZSBsb2dhcml0aG0gb2YgYHgrMWBcbiAgICovXG4gIHZhciBsb2cxcCA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICBpZiAoeCA+PSAtMSB8fCBjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfbnVtYmVyLmxvZzFwKSh4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG5lZ2F0aXZlIHZhbHVlIC0+IGNvbXBsZXggdmFsdWUgY29tcHV0YXRpb25cbiAgICAgICAgcmV0dXJuIF9sb2cxcENvbXBsZXgobmV3IENvbXBsZXgoeCwgMCkpO1xuICAgICAgfVxuICAgIH0sXG4gICAgQ29tcGxleDogX2xvZzFwQ29tcGxleCxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICB2YXIgeSA9IHgucGx1cygxKTtcblxuICAgICAgaWYgKCF5LmlzTmVnYXRpdmUoKSB8fCBjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIHkubG4oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGRvd25ncmFkZSB0byBudW1iZXIsIHJldHVybiBDb21wbGV4IHZhbHVlZCByZXN1bHRcbiAgICAgICAgcmV0dXJuIF9sb2cxcENvbXBsZXgobmV3IENvbXBsZXgoeC50b051bWJlcigpLCAwKSk7XG4gICAgICB9XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGxvZzFwKTtcbiAgICB9LFxuICAgICdhbnksIGFueSc6IGZ1bmN0aW9uIGFueUFueSh4LCBiYXNlKSB7XG4gICAgICAvLyBjYWxjdWxhdGUgbG9nYXJpdGhtIGZvciBhIHNwZWNpZmllZCBiYXNlLCBsb2cxcCh4LCBiYXNlKVxuICAgICAgcmV0dXJuIGRpdmlkZVNjYWxhcihsb2cxcCh4KSwgbG9nKGJhc2UpKTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBuYXR1cmFsIGxvZ2FyaXRobSBvZiBhIGNvbXBsZXggbnVtYmVyICsgMVxuICAgKiBAcGFyYW0ge0NvbXBsZXh9IHhcbiAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9sb2cxcENvbXBsZXgoeCkge1xuICAgIHZhciB4UmUxcCA9IHgucmUgKyAxO1xuICAgIHJldHVybiBuZXcgQ29tcGxleChNYXRoLmxvZyhNYXRoLnNxcnQoeFJlMXAgKiB4UmUxcCArIHguaW0gKiB4LmltKSksIE1hdGguYXRhbjIoeC5pbSwgeFJlMXApKTtcbiAgfVxuXG4gIHJldHVybiBsb2cxcDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVMb2cxcCA9IGNyZWF0ZUxvZzFwOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVMb2cyID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnbG9nMic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnQ29tcGxleCddO1xudmFyIGNyZWF0ZUxvZzIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIDItYmFzZSBvZiBhIHZhbHVlLiBUaGlzIGlzIHRoZSBzYW1lIGFzIGNhbGN1bGF0aW5nIGBsb2coeCwgMilgLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgubG9nMih4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5sb2cyKDAuMDMxMjUpICAgICAgICAgICAvLyByZXR1cm5zIC01XG4gICAqICAgIG1hdGgubG9nMigxNikgICAgICAgICAgICAgICAgLy8gcmV0dXJucyA0XG4gICAqICAgIG1hdGgubG9nMigxNikgLyBtYXRoLmxvZzIoMikgLy8gcmV0dXJucyA0XG4gICAqICAgIG1hdGgucG93KDIsIDQpICAgICAgICAgICAgICAgLy8gcmV0dXJucyAxNlxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgZXhwLCBsb2csIGxvZzFwLCBsb2cxMFxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geFxuICAgKiAgICAgICAgICAgIFZhbHVlIGZvciB3aGljaCB0byBjYWxjdWxhdGUgdGhlIGxvZ2FyaXRobS5cbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fVxuICAgKiAgICAgICAgICAgIFJldHVybnMgdGhlIDItYmFzZSBsb2dhcml0aG0gb2YgYHhgXG4gICAqL1xuICB2YXIgbG9nMiA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICBpZiAoeCA+PSAwIHx8IGNvbmZpZy5wcmVkaWN0YWJsZSkge1xuICAgICAgICByZXR1cm4gKDAsIF9udW1iZXIubG9nMk51bWJlcikoeCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBuZWdhdGl2ZSB2YWx1ZSAtPiBjb21wbGV4IHZhbHVlIGNvbXB1dGF0aW9uXG4gICAgICAgIHJldHVybiBfbG9nMkNvbXBsZXgobmV3IENvbXBsZXgoeCwgMCkpO1xuICAgICAgfVxuICAgIH0sXG4gICAgQ29tcGxleDogX2xvZzJDb21wbGV4LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIGlmICgheC5pc05lZ2F0aXZlKCkgfHwgY29uZmlnLnByZWRpY3RhYmxlKSB7XG4gICAgICAgIHJldHVybiB4LmxvZygyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGRvd25ncmFkZSB0byBudW1iZXIsIHJldHVybiBDb21wbGV4IHZhbHVlZCByZXN1bHRcbiAgICAgICAgcmV0dXJuIF9sb2cyQ29tcGxleChuZXcgQ29tcGxleCh4LnRvTnVtYmVyKCksIDApKTtcbiAgICAgIH1cbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgbG9nMik7XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSBsb2cyIGZvciBhIGNvbXBsZXggdmFsdWVcbiAgICogQHBhcmFtIHtDb21wbGV4fSB4XG4gICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfbG9nMkNvbXBsZXgoeCkge1xuICAgIHZhciBuZXdYID0gTWF0aC5zcXJ0KHgucmUgKiB4LnJlICsgeC5pbSAqIHguaW0pO1xuICAgIHJldHVybiBuZXcgQ29tcGxleChNYXRoLmxvZzIgPyBNYXRoLmxvZzIobmV3WCkgOiBNYXRoLmxvZyhuZXdYKSAvIE1hdGguTE4yLCBNYXRoLmF0YW4yKHguaW0sIHgucmUpIC8gTWF0aC5MTjIpO1xuICB9XG5cbiAgcmV0dXJuIGxvZzI7XG59KTtcbmV4cG9ydHMuY3JlYXRlTG9nMiA9IGNyZWF0ZUxvZzI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU1vZCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYWxnb3JpdGhtID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAyXCIpO1xuXG52YXIgX2FsZ29yaXRobTIgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDNcIik7XG5cbnZhciBfYWxnb3JpdGhtMyA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wNVwiKTtcblxudmFyIF9hbGdvcml0aG00ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTExXCIpO1xuXG52YXIgX2FsZ29yaXRobTUgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTJcIik7XG5cbnZhciBfYWxnb3JpdGhtNiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xM1wiKTtcblxudmFyIF9hbGdvcml0aG03ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ21vZCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnZXF1YWxTY2FsYXInLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVNb2QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsXG4gICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXg7XG4gIHZhciBhbGdvcml0aG0wMiA9ICgwLCBfYWxnb3JpdGhtLmNyZWF0ZUFsZ29yaXRobTAyKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTAzID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTAzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMDUgPSAoMCwgX2FsZ29yaXRobTMuY3JlYXRlQWxnb3JpdGhtMDUpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTEgPSAoMCwgX2FsZ29yaXRobTQuY3JlYXRlQWxnb3JpdGhtMTEpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTIgPSAoMCwgX2FsZ29yaXRobTUuY3JlYXRlQWxnb3JpdGhtMTIpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4XG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTMgPSAoMCwgX2FsZ29yaXRobTYuY3JlYXRlQWxnb3JpdGhtMTMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtNy5jcmVhdGVBbGdvcml0aG0xNCkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIG1vZHVsdXMsIHRoZSByZW1haW5kZXIgb2YgYW4gaW50ZWdlciBkaXZpc2lvbi5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogVGhlIG1vZHVsdXMgaXMgZGVmaW5lZCBhczpcbiAgICpcbiAgICogICAgIHggLSB5ICogZmxvb3IoeCAvIHkpXG4gICAqXG4gICAqIFNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Nb2R1bG9fb3BlcmF0aW9uLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgubW9kKHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLm1vZCg4LCAzKSAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDJcbiAgICogICAgbWF0aC5tb2QoMTEsIDIpICAgICAgICAgICAgICAgLy8gcmV0dXJucyAxXG4gICAqXG4gICAqICAgIGZ1bmN0aW9uIGlzT2RkKHgpIHtcbiAgICogICAgICByZXR1cm4gbWF0aC5tb2QoeCwgMikgIT0gMFxuICAgKiAgICB9XG4gICAqXG4gICAqICAgIGlzT2RkKDIpICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgaXNPZGQoMykgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBkaXZpZGVcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBBcnJheSB8IE1hdHJpeH0geCBEaXZpZGVuZFxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IEFycmF5IHwgTWF0cml4fSB5IERpdmlzb3JcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBBcnJheSB8IE1hdHJpeH0gUmV0dXJucyB0aGUgcmVtYWluZGVyIG9mIGB4YCBkaXZpZGVkIGJ5IGB5YC5cbiAgICovXG5cbiAgdmFyIG1vZCA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfbnVtYmVyLm1vZE51bWJlcixcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIHkuaXNaZXJvKCkgPyB4IDogeC5tb2QoeSk7XG4gICAgfSxcbiAgICAnRnJhY3Rpb24sIEZyYWN0aW9uJzogZnVuY3Rpb24gRnJhY3Rpb25GcmFjdGlvbih4LCB5KSB7XG4gICAgICByZXR1cm4geC5tb2QoeSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTA1KHgsIHksIG1vZCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDIoeSwgeCwgbW9kLCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHgsIHksIG1vZCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIG1vZCk7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gbW9kKG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBtb2QobWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIG1vZCh4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMSh4LCB5LCBtb2QsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIG1vZCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ2FueSwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gYW55U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih5LCB4LCBtb2QsIHRydWUpO1xuICAgIH0sXG4gICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgbW9kLCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgbW9kLCBmYWxzZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ2FueSwgQXJyYXknOiBmdW5jdGlvbiBhbnlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCBtb2QsIHRydWUpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbW9kO1xufSk7XG5leHBvcnRzLmNyZWF0ZU1vZCA9IGNyZWF0ZU1vZDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTXVsdGlwbHkgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfYWxnb3JpdGhtID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTExXCIpO1xuXG52YXIgX2FsZ29yaXRobTIgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBuYW1lID0gJ211bHRpcGx5JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdhZGRTY2FsYXInLCAnbXVsdGlwbHlTY2FsYXInLCAnZXF1YWxTY2FsYXInXTtcbnZhciBjcmVhdGVNdWx0aXBseSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGFkZFNjYWxhciA9IF9yZWYuYWRkU2NhbGFyLFxuICAgICAgbXVsdGlwbHlTY2FsYXIgPSBfcmVmLm11bHRpcGx5U2NhbGFyLFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyO1xuICB2YXIgYWxnb3JpdGhtMTEgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0xMSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0xNCkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgLyoqXG4gICAqIE11bHRpcGx5IHR3byBvciBtb3JlIHZhbHVlcywgYHggKiB5YC5cbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgbWF0cml4IHByb2R1Y3QgaXMgY2FsY3VsYXRlZC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLm11bHRpcGx5KHgsIHkpXG4gICAqICAgIG1hdGgubXVsdGlwbHkoeCwgeSwgeiwgLi4uKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5tdWx0aXBseSg0LCA1LjIpICAgICAgICAvLyByZXR1cm5zIG51bWJlciAyMC44XG4gICAqICAgIG1hdGgubXVsdGlwbHkoMiwgMywgNCkgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMjRcbiAgICpcbiAgICogICAgY29uc3QgYSA9IG1hdGguY29tcGxleCgyLCAzKVxuICAgKiAgICBjb25zdCBiID0gbWF0aC5jb21wbGV4KDQsIDEpXG4gICAqICAgIG1hdGgubXVsdGlwbHkoYSwgYikgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDUgKyAxNGlcbiAgICpcbiAgICogICAgY29uc3QgYyA9IFtbMSwgMl0sIFs0LCAzXV1cbiAgICogICAgY29uc3QgZCA9IFtbMSwgMiwgM10sIFszLCAtNCwgN11dXG4gICAqICAgIG1hdGgubXVsdGlwbHkoYywgZCkgICAgICAgICAgLy8gcmV0dXJucyBBcnJheSBbWzcsIC02LCAxN10sIFsxMywgLTQsIDMzXV1cbiAgICpcbiAgICogICAgY29uc3QgZSA9IG1hdGgudW5pdCgnMi4xIGttJylcbiAgICogICAgbWF0aC5tdWx0aXBseSgzLCBlKSAgICAgICAgICAvLyByZXR1cm5zIFVuaXQgNi4zIGttXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBkaXZpZGUsIHByb2QsIGNyb3NzLCBkb3RcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4IEZpcnN0IHZhbHVlIHRvIG11bHRpcGx5XG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geSBTZWNvbmQgdmFsdWUgdG8gbXVsdGlwbHlcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSBNdWx0aXBsaWNhdGlvbiBvZiBgeGAgYW5kIGB5YFxuICAgKi9cblxuICB2YXIgbXVsdGlwbHkgPSB0eXBlZChuYW1lLCAoMCwgX29iamVjdC5leHRlbmQpKHtcbiAgICAvLyB3ZSBleHRlbmQgdGhlIHNpZ25hdHVyZXMgb2YgbXVsdGlwbHlTY2FsYXIgd2l0aCBzaWduYXR1cmVzIGRlYWxpbmcgd2l0aCBtYXRyaWNlc1xuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIGRpbWVuc2lvbnNcbiAgICAgIF92YWxpZGF0ZU1hdHJpeERpbWVuc2lvbnMoKDAsIF9hcnJheS5hcnJheVNpemUpKHgpLCAoMCwgX2FycmF5LmFycmF5U2l6ZSkoeSkpOyAvLyB1c2UgZGVuc2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG5cblxuICAgICAgdmFyIG0gPSBtdWx0aXBseShtYXRyaXgoeCksIG1hdHJpeCh5KSk7IC8vIHJldHVybiBhcnJheSBvciBzY2FsYXJcblxuICAgICAgcmV0dXJuICgwLCBfaXMuaXNNYXRyaXgpKG0pID8gbS52YWx1ZU9mKCkgOiBtO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgTWF0cml4JzogZnVuY3Rpb24gTWF0cml4TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIGRpbWVuc2lvbnNcbiAgICAgIHZhciB4c2l6ZSA9IHguc2l6ZSgpO1xuICAgICAgdmFyIHlzaXplID0geS5zaXplKCk7IC8vIGNoZWNrIGRpbWVuc2lvbnNcblxuICAgICAgX3ZhbGlkYXRlTWF0cml4RGltZW5zaW9ucyh4c2l6ZSwgeXNpemUpOyAvLyBwcm9jZXNzIGRpbWVuc2lvbnNcblxuXG4gICAgICBpZiAoeHNpemUubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIC8vIHByb2Nlc3MgeSBkaW1lbnNpb25zXG4gICAgICAgIGlmICh5c2l6ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAvLyBWZWN0b3IgKiBWZWN0b3JcbiAgICAgICAgICByZXR1cm4gX211bHRpcGx5VmVjdG9yVmVjdG9yKHgsIHksIHhzaXplWzBdKTtcbiAgICAgICAgfSAvLyBWZWN0b3IgKiBNYXRyaXhcblxuXG4gICAgICAgIHJldHVybiBfbXVsdGlwbHlWZWN0b3JNYXRyaXgoeCwgeSk7XG4gICAgICB9IC8vIHByb2Nlc3MgeSBkaW1lbnNpb25zXG5cblxuICAgICAgaWYgKHlzaXplLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAvLyBNYXRyaXggKiBWZWN0b3JcbiAgICAgICAgcmV0dXJuIF9tdWx0aXBseU1hdHJpeFZlY3Rvcih4LCB5KTtcbiAgICAgIH0gLy8gTWF0cml4ICogTWF0cml4XG5cblxuICAgICAgcmV0dXJuIF9tdWx0aXBseU1hdHJpeE1hdHJpeCh4LCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIE1hdHJpeCAqIE1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIG11bHRpcGx5KHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBNYXRyaXggKiBNYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBtdWx0aXBseShtYXRyaXgoeCwgeS5zdG9yYWdlKCkpLCB5KTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeCwgeSwgbXVsdGlwbHlTY2FsYXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIG11bHRpcGx5U2NhbGFyLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnYW55LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTExKHksIHgsIG11bHRpcGx5U2NhbGFyLCB0cnVlKTtcbiAgICB9LFxuICAgICdhbnksIERlbnNlTWF0cml4JzogZnVuY3Rpb24gYW55RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIG11bHRpcGx5U2NhbGFyLCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgbXVsdGlwbHlTY2FsYXIsIGZhbHNlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnYW55LCBBcnJheSc6IGZ1bmN0aW9uIGFueUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeSksIHgsIG11bHRpcGx5U2NhbGFyLCB0cnVlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnYW55LCBhbnknOiBtdWx0aXBseVNjYWxhcixcbiAgICAnYW55LCBhbnksIC4uLmFueSc6IGZ1bmN0aW9uIGFueUFueUFueSh4LCB5LCByZXN0KSB7XG4gICAgICB2YXIgcmVzdWx0ID0gbXVsdGlwbHkoeCwgeSk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXN1bHQgPSBtdWx0aXBseShyZXN1bHQsIHJlc3RbaV0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfSwgbXVsdGlwbHlTY2FsYXIuc2lnbmF0dXJlcykpO1xuXG4gIGZ1bmN0aW9uIF92YWxpZGF0ZU1hdHJpeERpbWVuc2lvbnMoc2l6ZTEsIHNpemUyKSB7XG4gICAgLy8gY2hlY2sgbGVmdCBvcGVyYW5kIGRpbWVuc2lvbnNcbiAgICBzd2l0Y2ggKHNpemUxLmxlbmd0aCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICAvLyBjaGVjayBzaXplMlxuICAgICAgICBzd2l0Y2ggKHNpemUyLmxlbmd0aCkge1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIC8vIFZlY3RvciB4IFZlY3RvclxuICAgICAgICAgICAgaWYgKHNpemUxWzBdICE9PSBzaXplMlswXSkge1xuICAgICAgICAgICAgICAvLyB0aHJvdyBlcnJvclxuICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRGltZW5zaW9uIG1pc21hdGNoIGluIG11bHRpcGxpY2F0aW9uLiBWZWN0b3JzIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGgnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAvLyBWZWN0b3IgeCBNYXRyaXhcbiAgICAgICAgICAgIGlmIChzaXplMVswXSAhPT0gc2l6ZTJbMF0pIHtcbiAgICAgICAgICAgICAgLy8gdGhyb3cgZXJyb3JcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RpbWVuc2lvbiBtaXNtYXRjaCBpbiBtdWx0aXBsaWNhdGlvbi4gVmVjdG9yIGxlbmd0aCAoJyArIHNpemUxWzBdICsgJykgbXVzdCBtYXRjaCBNYXRyaXggcm93cyAoJyArIHNpemUyWzBdICsgJyknKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gb25seSBtdWx0aXBseSBhIDEgb3IgMiBkaW1lbnNpb25hbCBtYXRyaXggKE1hdHJpeCBCIGhhcyAnICsgc2l6ZTIubGVuZ3RoICsgJyBkaW1lbnNpb25zKScpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgMjpcbiAgICAgICAgLy8gY2hlY2sgc2l6ZTJcbiAgICAgICAgc3dpdGNoIChzaXplMi5sZW5ndGgpIHtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAvLyBNYXRyaXggeCBWZWN0b3JcbiAgICAgICAgICAgIGlmIChzaXplMVsxXSAhPT0gc2l6ZTJbMF0pIHtcbiAgICAgICAgICAgICAgLy8gdGhyb3cgZXJyb3JcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RpbWVuc2lvbiBtaXNtYXRjaCBpbiBtdWx0aXBsaWNhdGlvbi4gTWF0cml4IGNvbHVtbnMgKCcgKyBzaXplMVsxXSArICcpIG11c3QgbWF0Y2ggVmVjdG9yIGxlbmd0aCAoJyArIHNpemUyWzBdICsgJyknKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAvLyBNYXRyaXggeCBNYXRyaXhcbiAgICAgICAgICAgIGlmIChzaXplMVsxXSAhPT0gc2l6ZTJbMF0pIHtcbiAgICAgICAgICAgICAgLy8gdGhyb3cgZXJyb3JcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RpbWVuc2lvbiBtaXNtYXRjaCBpbiBtdWx0aXBsaWNhdGlvbi4gTWF0cml4IEEgY29sdW1ucyAoJyArIHNpemUxWzFdICsgJykgbXVzdCBtYXRjaCBNYXRyaXggQiByb3dzICgnICsgc2l6ZTJbMF0gKyAnKScpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbiBvbmx5IG11bHRpcGx5IGEgMSBvciAyIGRpbWVuc2lvbmFsIG1hdHJpeCAoTWF0cml4IEIgaGFzICcgKyBzaXplMi5sZW5ndGggKyAnIGRpbWVuc2lvbnMpJyk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gb25seSBtdWx0aXBseSBhIDEgb3IgMiBkaW1lbnNpb25hbCBtYXRyaXggKE1hdHJpeCBBIGhhcyAnICsgc2l6ZTEubGVuZ3RoICsgJyBkaW1lbnNpb25zKScpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQyA9IEEgKiBCXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSBhICAgICAgICAgICAgRGVuc2UgVmVjdG9yICAgKE4pXG4gICAqIEBwYXJhbSB7TWF0cml4fSBiICAgICAgICAgICAgRGVuc2UgVmVjdG9yICAgKE4pXG4gICAqXG4gICAqIEByZXR1cm4ge251bWJlcn0gICAgICAgICAgICAgU2NhbGFyIHZhbHVlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX211bHRpcGx5VmVjdG9yVmVjdG9yKGEsIGIsIG4pIHtcbiAgICAvLyBjaGVjayBlbXB0eSB2ZWN0b3JcbiAgICBpZiAobiA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgbXVsdGlwbHkgdHdvIGVtcHR5IHZlY3RvcnMnKTtcbiAgICB9IC8vIGEgZGVuc2VcblxuXG4gICAgdmFyIGFkYXRhID0gYS5fZGF0YTtcbiAgICB2YXIgYWR0ID0gYS5fZGF0YXR5cGU7IC8vIGIgZGVuc2VcblxuICAgIHZhciBiZGF0YSA9IGIuX2RhdGE7XG4gICAgdmFyIGJkdCA9IGIuX2RhdGF0eXBlOyAvLyBkYXRhdHlwZVxuXG4gICAgdmFyIGR0OyAvLyBhZGRTY2FsYXIgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGFmID0gYWRkU2NhbGFyOyAvLyBtdWx0aXBseVNjYWxhciBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgbWYgPSBtdWx0aXBseVNjYWxhcjsgLy8gcHJvY2VzcyBkYXRhIHR5cGVzXG5cbiAgICBpZiAoYWR0ICYmIGJkdCAmJiBhZHQgPT09IGJkdCAmJiB0eXBlb2YgYWR0ID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gZGF0YXR5cGVcbiAgICAgIGR0ID0gYWR0OyAvLyBmaW5kIHNpZ25hdHVyZXMgdGhhdCBtYXRjaGVzIChkdCwgZHQpXG5cbiAgICAgIGFmID0gdHlwZWQuZmluZChhZGRTY2FsYXIsIFtkdCwgZHRdKTtcbiAgICAgIG1mID0gdHlwZWQuZmluZChtdWx0aXBseVNjYWxhciwgW2R0LCBkdF0pO1xuICAgIH0gLy8gcmVzdWx0IChkbyBub3QgaW5pdGlhbGl6ZSBpdCB3aXRoIHplcm8pXG5cblxuICAgIHZhciBjID0gbWYoYWRhdGFbMF0sIGJkYXRhWzBdKTsgLy8gbG9vcCBkYXRhXG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IG47IGkrKykge1xuICAgICAgLy8gbXVsdGlwbHkgYW5kIGFjY3VtdWxhdGVcbiAgICAgIGMgPSBhZihjLCBtZihhZGF0YVtpXSwgYmRhdGFbaV0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYztcbiAgfVxuICAvKipcbiAgICogQyA9IEEgKiBCXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSBhICAgICAgICAgICAgRGVuc2UgVmVjdG9yICAgKE0pXG4gICAqIEBwYXJhbSB7TWF0cml4fSBiICAgICAgICAgICAgTWF0cml4ICAgICAgICAgKE14TilcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICBEZW5zZSBWZWN0b3IgICAoTilcbiAgICovXG5cblxuICBmdW5jdGlvbiBfbXVsdGlwbHlWZWN0b3JNYXRyaXgoYSwgYikge1xuICAgIC8vIHByb2Nlc3Mgc3RvcmFnZVxuICAgIGlmIChiLnN0b3JhZ2UoKSAhPT0gJ2RlbnNlJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdXBwb3J0IGZvciBTcGFyc2VNYXRyaXggbm90IGltcGxlbWVudGVkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9tdWx0aXBseVZlY3RvckRlbnNlTWF0cml4KGEsIGIpO1xuICB9XG4gIC8qKlxuICAgKiBDID0gQSAqIEJcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9IGEgICAgICAgICAgICBEZW5zZSBWZWN0b3IgICAoTSlcbiAgICogQHBhcmFtIHtNYXRyaXh9IGIgICAgICAgICAgICBEZW5zZSBNYXRyaXggICAoTXhOKVxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgIERlbnNlIFZlY3RvciAgIChOKVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9tdWx0aXBseVZlY3RvckRlbnNlTWF0cml4KGEsIGIpIHtcbiAgICAvLyBhIGRlbnNlXG4gICAgdmFyIGFkYXRhID0gYS5fZGF0YTtcbiAgICB2YXIgYXNpemUgPSBhLl9zaXplO1xuICAgIHZhciBhZHQgPSBhLl9kYXRhdHlwZTsgLy8gYiBkZW5zZVxuXG4gICAgdmFyIGJkYXRhID0gYi5fZGF0YTtcbiAgICB2YXIgYnNpemUgPSBiLl9zaXplO1xuICAgIHZhciBiZHQgPSBiLl9kYXRhdHlwZTsgLy8gcm93cyAmIGNvbHVtbnNcblxuICAgIHZhciBhbGVuZ3RoID0gYXNpemVbMF07XG4gICAgdmFyIGJjb2x1bW5zID0gYnNpemVbMV07IC8vIGRhdGF0eXBlXG5cbiAgICB2YXIgZHQ7IC8vIGFkZFNjYWxhciBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgYWYgPSBhZGRTY2FsYXI7IC8vIG11bHRpcGx5U2NhbGFyIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBtZiA9IG11bHRpcGx5U2NhbGFyOyAvLyBwcm9jZXNzIGRhdGEgdHlwZXNcblxuICAgIGlmIChhZHQgJiYgYmR0ICYmIGFkdCA9PT0gYmR0ICYmIHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBkYXRhdHlwZVxuICAgICAgZHQgPSBhZHQ7IC8vIGZpbmQgc2lnbmF0dXJlcyB0aGF0IG1hdGNoZXMgKGR0LCBkdClcblxuICAgICAgYWYgPSB0eXBlZC5maW5kKGFkZFNjYWxhciwgW2R0LCBkdF0pO1xuICAgICAgbWYgPSB0eXBlZC5maW5kKG11bHRpcGx5U2NhbGFyLCBbZHQsIGR0XSk7XG4gICAgfSAvLyByZXN1bHRcblxuXG4gICAgdmFyIGMgPSBbXTsgLy8gbG9vcCBtYXRyaXggY29sdW1uc1xuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBiY29sdW1uczsgaisrKSB7XG4gICAgICAvLyBzdW0gKGRvIG5vdCBpbml0aWFsaXplIGl0IHdpdGggemVybylcbiAgICAgIHZhciBzdW0gPSBtZihhZGF0YVswXSwgYmRhdGFbMF1bal0pOyAvLyBsb29wIHZlY3RvclxuXG4gICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFsZW5ndGg7IGkrKykge1xuICAgICAgICAvLyBtdWx0aXBseSAmIGFjY3VtdWxhdGVcbiAgICAgICAgc3VtID0gYWYoc3VtLCBtZihhZGF0YVtpXSwgYmRhdGFbaV1bal0pKTtcbiAgICAgIH1cblxuICAgICAgY1tqXSA9IHN1bTtcbiAgICB9IC8vIHJldHVybiBtYXRyaXhcblxuXG4gICAgcmV0dXJuIGEuY3JlYXRlRGVuc2VNYXRyaXgoe1xuICAgICAgZGF0YTogYyxcbiAgICAgIHNpemU6IFtiY29sdW1uc10sXG4gICAgICBkYXRhdHlwZTogZHRcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQyA9IEEgKiBCXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSBhICAgICAgICAgICAgTWF0cml4ICAgICAgICAgKE14TilcbiAgICogQHBhcmFtIHtNYXRyaXh9IGIgICAgICAgICAgICBEZW5zZSBWZWN0b3IgICAoTilcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICBEZW5zZSBWZWN0b3IgICAoTSlcbiAgICovXG5cblxuICB2YXIgX211bHRpcGx5TWF0cml4VmVjdG9yID0gdHlwZWQoJ19tdWx0aXBseU1hdHJpeFZlY3RvcicsIHtcbiAgICAnRGVuc2VNYXRyaXgsIGFueSc6IF9tdWx0aXBseURlbnNlTWF0cml4VmVjdG9yLFxuICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IF9tdWx0aXBseVNwYXJzZU1hdHJpeFZlY3RvclxuICB9KTtcbiAgLyoqXG4gICAqIEMgPSBBICogQlxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeH0gYSAgICAgICAgICAgIE1hdHJpeCAgICAgICAgIChNeE4pXG4gICAqIEBwYXJhbSB7TWF0cml4fSBiICAgICAgICAgICAgTWF0cml4ICAgICAgICAgKE54QylcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICBNYXRyaXggICAgICAgICAoTXhDKVxuICAgKi9cblxuXG4gIHZhciBfbXVsdGlwbHlNYXRyaXhNYXRyaXggPSB0eXBlZCgnX211bHRpcGx5TWF0cml4TWF0cml4Jywge1xuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBfbXVsdGlwbHlEZW5zZU1hdHJpeERlbnNlTWF0cml4LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogX211bHRpcGx5RGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgsXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBfbXVsdGlwbHlTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCxcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBfbXVsdGlwbHlTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXhcbiAgfSk7XG4gIC8qKlxuICAgKiBDID0gQSAqIEJcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9IGEgICAgICAgICAgICBEZW5zZU1hdHJpeCAgKE14TilcbiAgICogQHBhcmFtIHtNYXRyaXh9IGIgICAgICAgICAgICBEZW5zZSBWZWN0b3IgKE4pXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgRGVuc2UgVmVjdG9yIChNKVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9tdWx0aXBseURlbnNlTWF0cml4VmVjdG9yKGEsIGIpIHtcbiAgICAvLyBhIGRlbnNlXG4gICAgdmFyIGFkYXRhID0gYS5fZGF0YTtcbiAgICB2YXIgYXNpemUgPSBhLl9zaXplO1xuICAgIHZhciBhZHQgPSBhLl9kYXRhdHlwZTsgLy8gYiBkZW5zZVxuXG4gICAgdmFyIGJkYXRhID0gYi5fZGF0YTtcbiAgICB2YXIgYmR0ID0gYi5fZGF0YXR5cGU7IC8vIHJvd3MgJiBjb2x1bW5zXG5cbiAgICB2YXIgYXJvd3MgPSBhc2l6ZVswXTtcbiAgICB2YXIgYWNvbHVtbnMgPSBhc2l6ZVsxXTsgLy8gZGF0YXR5cGVcblxuICAgIHZhciBkdDsgLy8gYWRkU2NhbGFyIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBhZiA9IGFkZFNjYWxhcjsgLy8gbXVsdGlwbHlTY2FsYXIgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIG1mID0gbXVsdGlwbHlTY2FsYXI7IC8vIHByb2Nlc3MgZGF0YSB0eXBlc1xuXG4gICAgaWYgKGFkdCAmJiBiZHQgJiYgYWR0ID09PSBiZHQgJiYgdHlwZW9mIGFkdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIGRhdGF0eXBlXG4gICAgICBkdCA9IGFkdDsgLy8gZmluZCBzaWduYXR1cmVzIHRoYXQgbWF0Y2hlcyAoZHQsIGR0KVxuXG4gICAgICBhZiA9IHR5cGVkLmZpbmQoYWRkU2NhbGFyLCBbZHQsIGR0XSk7XG4gICAgICBtZiA9IHR5cGVkLmZpbmQobXVsdGlwbHlTY2FsYXIsIFtkdCwgZHRdKTtcbiAgICB9IC8vIHJlc3VsdFxuXG5cbiAgICB2YXIgYyA9IFtdOyAvLyBsb29wIG1hdHJpeCBhIHJvd3NcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJvd3M7IGkrKykge1xuICAgICAgLy8gY3VycmVudCByb3dcbiAgICAgIHZhciByb3cgPSBhZGF0YVtpXTsgLy8gc3VtIChkbyBub3QgaW5pdGlhbGl6ZSBpdCB3aXRoIHplcm8pXG5cbiAgICAgIHZhciBzdW0gPSBtZihyb3dbMF0sIGJkYXRhWzBdKTsgLy8gbG9vcCBtYXRyaXggYSBjb2x1bW5zXG5cbiAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgYWNvbHVtbnM7IGorKykge1xuICAgICAgICAvLyBtdWx0aXBseSAmIGFjY3VtdWxhdGVcbiAgICAgICAgc3VtID0gYWYoc3VtLCBtZihyb3dbal0sIGJkYXRhW2pdKSk7XG4gICAgICB9XG5cbiAgICAgIGNbaV0gPSBzdW07XG4gICAgfSAvLyByZXR1cm4gbWF0cml4XG5cblxuICAgIHJldHVybiBhLmNyZWF0ZURlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6IGMsXG4gICAgICBzaXplOiBbYXJvd3NdLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIEMgPSBBICogQlxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeH0gYSAgICAgICAgICAgIERlbnNlTWF0cml4ICAgIChNeE4pXG4gICAqIEBwYXJhbSB7TWF0cml4fSBiICAgICAgICAgICAgRGVuc2VNYXRyaXggICAgKE54QylcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICBEZW5zZU1hdHJpeCAgICAoTXhDKVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9tdWx0aXBseURlbnNlTWF0cml4RGVuc2VNYXRyaXgoYSwgYikge1xuICAgIC8vIGEgZGVuc2VcbiAgICB2YXIgYWRhdGEgPSBhLl9kYXRhO1xuICAgIHZhciBhc2l6ZSA9IGEuX3NpemU7XG4gICAgdmFyIGFkdCA9IGEuX2RhdGF0eXBlOyAvLyBiIGRlbnNlXG5cbiAgICB2YXIgYmRhdGEgPSBiLl9kYXRhO1xuICAgIHZhciBic2l6ZSA9IGIuX3NpemU7XG4gICAgdmFyIGJkdCA9IGIuX2RhdGF0eXBlOyAvLyByb3dzICYgY29sdW1uc1xuXG4gICAgdmFyIGFyb3dzID0gYXNpemVbMF07XG4gICAgdmFyIGFjb2x1bW5zID0gYXNpemVbMV07XG4gICAgdmFyIGJjb2x1bW5zID0gYnNpemVbMV07IC8vIGRhdGF0eXBlXG5cbiAgICB2YXIgZHQ7IC8vIGFkZFNjYWxhciBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgYWYgPSBhZGRTY2FsYXI7IC8vIG11bHRpcGx5U2NhbGFyIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBtZiA9IG11bHRpcGx5U2NhbGFyOyAvLyBwcm9jZXNzIGRhdGEgdHlwZXNcblxuICAgIGlmIChhZHQgJiYgYmR0ICYmIGFkdCA9PT0gYmR0ICYmIHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBkYXRhdHlwZVxuICAgICAgZHQgPSBhZHQ7IC8vIGZpbmQgc2lnbmF0dXJlcyB0aGF0IG1hdGNoZXMgKGR0LCBkdClcblxuICAgICAgYWYgPSB0eXBlZC5maW5kKGFkZFNjYWxhciwgW2R0LCBkdF0pO1xuICAgICAgbWYgPSB0eXBlZC5maW5kKG11bHRpcGx5U2NhbGFyLCBbZHQsIGR0XSk7XG4gICAgfSAvLyByZXN1bHRcblxuXG4gICAgdmFyIGMgPSBbXTsgLy8gbG9vcCBtYXRyaXggYSByb3dzXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyb3dzOyBpKyspIHtcbiAgICAgIC8vIGN1cnJlbnQgcm93XG4gICAgICB2YXIgcm93ID0gYWRhdGFbaV07IC8vIGluaXRpYWxpemUgcm93IGFycmF5XG5cbiAgICAgIGNbaV0gPSBbXTsgLy8gbG9vcCBtYXRyaXggYiBjb2x1bW5zXG5cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYmNvbHVtbnM7IGorKykge1xuICAgICAgICAvLyBzdW0gKGF2b2lkIGluaXRpYWxpemluZyBzdW0gdG8gemVybylcbiAgICAgICAgdmFyIHN1bSA9IG1mKHJvd1swXSwgYmRhdGFbMF1bal0pOyAvLyBsb29wIG1hdHJpeCBhIGNvbHVtbnNcblxuICAgICAgICBmb3IgKHZhciB4ID0gMTsgeCA8IGFjb2x1bW5zOyB4KyspIHtcbiAgICAgICAgICAvLyBtdWx0aXBseSAmIGFjY3VtdWxhdGVcbiAgICAgICAgICBzdW0gPSBhZihzdW0sIG1mKHJvd1t4XSwgYmRhdGFbeF1bal0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNbaV1bal0gPSBzdW07XG4gICAgICB9XG4gICAgfSAvLyByZXR1cm4gbWF0cml4XG5cblxuICAgIHJldHVybiBhLmNyZWF0ZURlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6IGMsXG4gICAgICBzaXplOiBbYXJvd3MsIGJjb2x1bW5zXSxcbiAgICAgIGRhdGF0eXBlOiBkdFxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBDID0gQSAqIEJcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9IGEgICAgICAgICAgICBEZW5zZU1hdHJpeCAgICAoTXhOKVxuICAgKiBAcGFyYW0ge01hdHJpeH0gYiAgICAgICAgICAgIFNwYXJzZU1hdHJpeCAgIChOeEMpXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgU3BhcnNlTWF0cml4ICAgKE14QylcbiAgICovXG5cblxuICBmdW5jdGlvbiBfbXVsdGlwbHlEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeChhLCBiKSB7XG4gICAgLy8gYSBkZW5zZVxuICAgIHZhciBhZGF0YSA9IGEuX2RhdGE7XG4gICAgdmFyIGFzaXplID0gYS5fc2l6ZTtcbiAgICB2YXIgYWR0ID0gYS5fZGF0YXR5cGU7IC8vIGIgc3BhcnNlXG5cbiAgICB2YXIgYnZhbHVlcyA9IGIuX3ZhbHVlcztcbiAgICB2YXIgYmluZGV4ID0gYi5faW5kZXg7XG4gICAgdmFyIGJwdHIgPSBiLl9wdHI7XG4gICAgdmFyIGJzaXplID0gYi5fc2l6ZTtcbiAgICB2YXIgYmR0ID0gYi5fZGF0YXR5cGU7IC8vIHZhbGlkYXRlIGIgbWF0cml4XG5cbiAgICBpZiAoIWJ2YWx1ZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IG11bHRpcGx5IERlbnNlIE1hdHJpeCB0aW1lcyBQYXR0ZXJuIG9ubHkgTWF0cml4Jyk7XG4gICAgfSAvLyByb3dzICYgY29sdW1uc1xuXG5cbiAgICB2YXIgYXJvd3MgPSBhc2l6ZVswXTtcbiAgICB2YXIgYmNvbHVtbnMgPSBic2l6ZVsxXTsgLy8gZGF0YXR5cGVcblxuICAgIHZhciBkdDsgLy8gYWRkU2NhbGFyIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBhZiA9IGFkZFNjYWxhcjsgLy8gbXVsdGlwbHlTY2FsYXIgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIG1mID0gbXVsdGlwbHlTY2FsYXI7IC8vIGVxdWFsU2NhbGFyIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBlcSA9IGVxdWFsU2NhbGFyOyAvLyB6ZXJvIHZhbHVlXG5cbiAgICB2YXIgemVybyA9IDA7IC8vIHByb2Nlc3MgZGF0YSB0eXBlc1xuXG4gICAgaWYgKGFkdCAmJiBiZHQgJiYgYWR0ID09PSBiZHQgJiYgdHlwZW9mIGFkdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIGRhdGF0eXBlXG4gICAgICBkdCA9IGFkdDsgLy8gZmluZCBzaWduYXR1cmVzIHRoYXQgbWF0Y2hlcyAoZHQsIGR0KVxuXG4gICAgICBhZiA9IHR5cGVkLmZpbmQoYWRkU2NhbGFyLCBbZHQsIGR0XSk7XG4gICAgICBtZiA9IHR5cGVkLmZpbmQobXVsdGlwbHlTY2FsYXIsIFtkdCwgZHRdKTtcbiAgICAgIGVxID0gdHlwZWQuZmluZChlcXVhbFNjYWxhciwgW2R0LCBkdF0pOyAvLyBjb252ZXJ0IDAgdG8gdGhlIHNhbWUgZGF0YXR5cGVcblxuICAgICAgemVybyA9IHR5cGVkLmNvbnZlcnQoMCwgZHQpO1xuICAgIH0gLy8gcmVzdWx0XG5cblxuICAgIHZhciBjdmFsdWVzID0gW107XG4gICAgdmFyIGNpbmRleCA9IFtdO1xuICAgIHZhciBjcHRyID0gW107IC8vIGMgbWF0cml4XG5cbiAgICB2YXIgYyA9IGIuY3JlYXRlU3BhcnNlTWF0cml4KHtcbiAgICAgIHZhbHVlczogY3ZhbHVlcyxcbiAgICAgIGluZGV4OiBjaW5kZXgsXG4gICAgICBwdHI6IGNwdHIsXG4gICAgICBzaXplOiBbYXJvd3MsIGJjb2x1bW5zXSxcbiAgICAgIGRhdGF0eXBlOiBkdFxuICAgIH0pOyAvLyBsb29wIGIgY29sdW1uc1xuXG4gICAgZm9yICh2YXIgamIgPSAwOyBqYiA8IGJjb2x1bW5zOyBqYisrKSB7XG4gICAgICAvLyB1cGRhdGUgcHRyXG4gICAgICBjcHRyW2piXSA9IGNpbmRleC5sZW5ndGg7IC8vIGluZGVjZXMgaW4gY29sdW1uIGpiXG5cbiAgICAgIHZhciBrYjAgPSBicHRyW2piXTtcbiAgICAgIHZhciBrYjEgPSBicHRyW2piICsgMV07IC8vIGRvIG5vdCBwcm9jZXNzIGNvbHVtbiBqYiBpZiBubyBkYXRhIGV4aXN0c1xuXG4gICAgICBpZiAoa2IxID4ga2IwKSB7XG4gICAgICAgIC8vIGxhc3Qgcm93IG1hcmsgcHJvY2Vzc2VkXG4gICAgICAgIHZhciBsYXN0ID0gMDsgLy8gbG9vcCBhIHJvd3NcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyb3dzOyBpKyspIHtcbiAgICAgICAgICAvLyBjb2x1bW4gbWFya1xuICAgICAgICAgIHZhciBtYXJrID0gaSArIDE7IC8vIENbaSwgamJdXG5cbiAgICAgICAgICB2YXIgY2lqID0gdm9pZCAwOyAvLyB2YWx1ZXMgaW4gYiBjb2x1bW4galxuXG4gICAgICAgICAgZm9yICh2YXIga2IgPSBrYjA7IGtiIDwga2IxOyBrYisrKSB7XG4gICAgICAgICAgICAvLyByb3dcbiAgICAgICAgICAgIHZhciBpYiA9IGJpbmRleFtrYl07IC8vIGNoZWNrIHZhbHVlIGhhcyBiZWVuIGluaXRpYWxpemVkXG5cbiAgICAgICAgICAgIGlmIChsYXN0ICE9PSBtYXJrKSB7XG4gICAgICAgICAgICAgIC8vIGZpcnN0IHZhbHVlIGluIGNvbHVtbiBqYlxuICAgICAgICAgICAgICBjaWogPSBtZihhZGF0YVtpXVtpYl0sIGJ2YWx1ZXNba2JdKTsgLy8gdXBkYXRlIG1hcmtcblxuICAgICAgICAgICAgICBsYXN0ID0gbWFyaztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIGFjY3VtdWxhdGUgdmFsdWVcbiAgICAgICAgICAgICAgY2lqID0gYWYoY2lqLCBtZihhZGF0YVtpXVtpYl0sIGJ2YWx1ZXNba2JdKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSAvLyBjaGVjayBjb2x1bW4gaGFzIGJlZW4gcHJvY2Vzc2VkIGFuZCB2YWx1ZSAhPSAwXG5cblxuICAgICAgICAgIGlmIChsYXN0ID09PSBtYXJrICYmICFlcShjaWosIHplcm8pKSB7XG4gICAgICAgICAgICAvLyBwdXNoIHJvdyAmIHZhbHVlXG4gICAgICAgICAgICBjaW5kZXgucHVzaChpKTtcbiAgICAgICAgICAgIGN2YWx1ZXMucHVzaChjaWopO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gdXBkYXRlIHB0clxuXG5cbiAgICBjcHRyW2Jjb2x1bW5zXSA9IGNpbmRleC5sZW5ndGg7IC8vIHJldHVybiBzcGFyc2UgbWF0cml4XG5cbiAgICByZXR1cm4gYztcbiAgfVxuICAvKipcbiAgICogQyA9IEEgKiBCXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSBhICAgICAgICAgICAgU3BhcnNlTWF0cml4ICAgIChNeE4pXG4gICAqIEBwYXJhbSB7TWF0cml4fSBiICAgICAgICAgICAgRGVuc2UgVmVjdG9yIChOKVxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgIFNwYXJzZU1hdHJpeCAgICAoTSwgMSlcbiAgICovXG5cblxuICBmdW5jdGlvbiBfbXVsdGlwbHlTcGFyc2VNYXRyaXhWZWN0b3IoYSwgYikge1xuICAgIC8vIGEgc3BhcnNlXG4gICAgdmFyIGF2YWx1ZXMgPSBhLl92YWx1ZXM7XG4gICAgdmFyIGFpbmRleCA9IGEuX2luZGV4O1xuICAgIHZhciBhcHRyID0gYS5fcHRyO1xuICAgIHZhciBhZHQgPSBhLl9kYXRhdHlwZTsgLy8gdmFsaWRhdGUgYSBtYXRyaXhcblxuICAgIGlmICghYXZhbHVlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgbXVsdGlwbHkgUGF0dGVybiBvbmx5IE1hdHJpeCB0aW1lcyBEZW5zZSBNYXRyaXgnKTtcbiAgICB9IC8vIGIgZGVuc2VcblxuXG4gICAgdmFyIGJkYXRhID0gYi5fZGF0YTtcbiAgICB2YXIgYmR0ID0gYi5fZGF0YXR5cGU7IC8vIHJvd3MgJiBjb2x1bW5zXG5cbiAgICB2YXIgYXJvd3MgPSBhLl9zaXplWzBdO1xuICAgIHZhciBicm93cyA9IGIuX3NpemVbMF07IC8vIHJlc3VsdFxuXG4gICAgdmFyIGN2YWx1ZXMgPSBbXTtcbiAgICB2YXIgY2luZGV4ID0gW107XG4gICAgdmFyIGNwdHIgPSBbXTsgLy8gZGF0YXR5cGVcblxuICAgIHZhciBkdDsgLy8gYWRkU2NhbGFyIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBhZiA9IGFkZFNjYWxhcjsgLy8gbXVsdGlwbHlTY2FsYXIgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIG1mID0gbXVsdGlwbHlTY2FsYXI7IC8vIGVxdWFsU2NhbGFyIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBlcSA9IGVxdWFsU2NhbGFyOyAvLyB6ZXJvIHZhbHVlXG5cbiAgICB2YXIgemVybyA9IDA7IC8vIHByb2Nlc3MgZGF0YSB0eXBlc1xuXG4gICAgaWYgKGFkdCAmJiBiZHQgJiYgYWR0ID09PSBiZHQgJiYgdHlwZW9mIGFkdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIGRhdGF0eXBlXG4gICAgICBkdCA9IGFkdDsgLy8gZmluZCBzaWduYXR1cmVzIHRoYXQgbWF0Y2hlcyAoZHQsIGR0KVxuXG4gICAgICBhZiA9IHR5cGVkLmZpbmQoYWRkU2NhbGFyLCBbZHQsIGR0XSk7XG4gICAgICBtZiA9IHR5cGVkLmZpbmQobXVsdGlwbHlTY2FsYXIsIFtkdCwgZHRdKTtcbiAgICAgIGVxID0gdHlwZWQuZmluZChlcXVhbFNjYWxhciwgW2R0LCBkdF0pOyAvLyBjb252ZXJ0IDAgdG8gdGhlIHNhbWUgZGF0YXR5cGVcblxuICAgICAgemVybyA9IHR5cGVkLmNvbnZlcnQoMCwgZHQpO1xuICAgIH0gLy8gd29ya3NwYWNlXG5cblxuICAgIHZhciB4ID0gW107IC8vIHZlY3RvciB3aXRoIG1hcmtzIGluZGljYXRpbmcgYSB2YWx1ZSB4W2ldIGV4aXN0cyBpbiBhIGdpdmVuIGNvbHVtblxuXG4gICAgdmFyIHcgPSBbXTsgLy8gdXBkYXRlIHB0clxuXG4gICAgY3B0clswXSA9IDA7IC8vIHJvd3MgaW4gYlxuXG4gICAgZm9yICh2YXIgaWIgPSAwOyBpYiA8IGJyb3dzOyBpYisrKSB7XG4gICAgICAvLyBiW2liXVxuICAgICAgdmFyIHZiaSA9IGJkYXRhW2liXTsgLy8gY2hlY2sgYltpYl0gIT0gMCwgYXZvaWQgbG9vcHNcblxuICAgICAgaWYgKCFlcSh2YmksIHplcm8pKSB7XG4gICAgICAgIC8vIEEgdmFsdWVzICYgaW5kZXggaW4gaWIgY29sdW1uXG4gICAgICAgIGZvciAodmFyIGthMCA9IGFwdHJbaWJdLCBrYTEgPSBhcHRyW2liICsgMV0sIGthID0ga2EwOyBrYSA8IGthMTsga2ErKykge1xuICAgICAgICAgIC8vIGEgcm93XG4gICAgICAgICAgdmFyIGlhID0gYWluZGV4W2thXTsgLy8gY2hlY2sgdmFsdWUgZXhpc3RzIGluIGN1cnJlbnQgalxuXG4gICAgICAgICAgaWYgKCF3W2lhXSkge1xuICAgICAgICAgICAgLy8gaWEgaXMgbmV3IGVudHJ5IGluIGpcbiAgICAgICAgICAgIHdbaWFdID0gdHJ1ZTsgLy8gYWRkIGkgdG8gcGF0dGVybiBvZiBDXG5cbiAgICAgICAgICAgIGNpbmRleC5wdXNoKGlhKTsgLy8geChpYSkgPSBBXG5cbiAgICAgICAgICAgIHhbaWFdID0gbWYodmJpLCBhdmFsdWVzW2thXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGkgZXhpc3RzIGluIEMgYWxyZWFkeVxuICAgICAgICAgICAgeFtpYV0gPSBhZih4W2lhXSwgbWYodmJpLCBhdmFsdWVzW2thXSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gY29weSB2YWx1ZXMgZnJvbSB4IHRvIGNvbHVtbiBqYiBvZiBjXG5cblxuICAgIGZvciAodmFyIHAxID0gY2luZGV4Lmxlbmd0aCwgcCA9IDA7IHAgPCBwMTsgcCsrKSB7XG4gICAgICAvLyByb3dcbiAgICAgIHZhciBpYyA9IGNpbmRleFtwXTsgLy8gY29weSB2YWx1ZVxuXG4gICAgICBjdmFsdWVzW3BdID0geFtpY107XG4gICAgfSAvLyB1cGRhdGUgcHRyXG5cblxuICAgIGNwdHJbMV0gPSBjaW5kZXgubGVuZ3RoOyAvLyByZXR1cm4gc3BhcnNlIG1hdHJpeFxuXG4gICAgcmV0dXJuIGEuY3JlYXRlU3BhcnNlTWF0cml4KHtcbiAgICAgIHZhbHVlczogY3ZhbHVlcyxcbiAgICAgIGluZGV4OiBjaW5kZXgsXG4gICAgICBwdHI6IGNwdHIsXG4gICAgICBzaXplOiBbYXJvd3MsIDFdLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIEMgPSBBICogQlxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeH0gYSAgICAgICAgICAgIFNwYXJzZU1hdHJpeCAgICAgIChNeE4pXG4gICAqIEBwYXJhbSB7TWF0cml4fSBiICAgICAgICAgICAgRGVuc2VNYXRyaXggICAgICAgKE54QylcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICBTcGFyc2VNYXRyaXggICAgICAoTXhDKVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9tdWx0aXBseVNwYXJzZU1hdHJpeERlbnNlTWF0cml4KGEsIGIpIHtcbiAgICAvLyBhIHNwYXJzZVxuICAgIHZhciBhdmFsdWVzID0gYS5fdmFsdWVzO1xuICAgIHZhciBhaW5kZXggPSBhLl9pbmRleDtcbiAgICB2YXIgYXB0ciA9IGEuX3B0cjtcbiAgICB2YXIgYWR0ID0gYS5fZGF0YXR5cGU7IC8vIHZhbGlkYXRlIGEgbWF0cml4XG5cbiAgICBpZiAoIWF2YWx1ZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IG11bHRpcGx5IFBhdHRlcm4gb25seSBNYXRyaXggdGltZXMgRGVuc2UgTWF0cml4Jyk7XG4gICAgfSAvLyBiIGRlbnNlXG5cblxuICAgIHZhciBiZGF0YSA9IGIuX2RhdGE7XG4gICAgdmFyIGJkdCA9IGIuX2RhdGF0eXBlOyAvLyByb3dzICYgY29sdW1uc1xuXG4gICAgdmFyIGFyb3dzID0gYS5fc2l6ZVswXTtcbiAgICB2YXIgYnJvd3MgPSBiLl9zaXplWzBdO1xuICAgIHZhciBiY29sdW1ucyA9IGIuX3NpemVbMV07IC8vIGRhdGF0eXBlXG5cbiAgICB2YXIgZHQ7IC8vIGFkZFNjYWxhciBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgYWYgPSBhZGRTY2FsYXI7IC8vIG11bHRpcGx5U2NhbGFyIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBtZiA9IG11bHRpcGx5U2NhbGFyOyAvLyBlcXVhbFNjYWxhciBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgZXEgPSBlcXVhbFNjYWxhcjsgLy8gemVybyB2YWx1ZVxuXG4gICAgdmFyIHplcm8gPSAwOyAvLyBwcm9jZXNzIGRhdGEgdHlwZXNcblxuICAgIGlmIChhZHQgJiYgYmR0ICYmIGFkdCA9PT0gYmR0ICYmIHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBkYXRhdHlwZVxuICAgICAgZHQgPSBhZHQ7IC8vIGZpbmQgc2lnbmF0dXJlcyB0aGF0IG1hdGNoZXMgKGR0LCBkdClcblxuICAgICAgYWYgPSB0eXBlZC5maW5kKGFkZFNjYWxhciwgW2R0LCBkdF0pO1xuICAgICAgbWYgPSB0eXBlZC5maW5kKG11bHRpcGx5U2NhbGFyLCBbZHQsIGR0XSk7XG4gICAgICBlcSA9IHR5cGVkLmZpbmQoZXF1YWxTY2FsYXIsIFtkdCwgZHRdKTsgLy8gY29udmVydCAwIHRvIHRoZSBzYW1lIGRhdGF0eXBlXG5cbiAgICAgIHplcm8gPSB0eXBlZC5jb252ZXJ0KDAsIGR0KTtcbiAgICB9IC8vIHJlc3VsdFxuXG5cbiAgICB2YXIgY3ZhbHVlcyA9IFtdO1xuICAgIHZhciBjaW5kZXggPSBbXTtcbiAgICB2YXIgY3B0ciA9IFtdOyAvLyBjIG1hdHJpeFxuXG4gICAgdmFyIGMgPSBhLmNyZWF0ZVNwYXJzZU1hdHJpeCh7XG4gICAgICB2YWx1ZXM6IGN2YWx1ZXMsXG4gICAgICBpbmRleDogY2luZGV4LFxuICAgICAgcHRyOiBjcHRyLFxuICAgICAgc2l6ZTogW2Fyb3dzLCBiY29sdW1uc10sXG4gICAgICBkYXRhdHlwZTogZHRcbiAgICB9KTsgLy8gd29ya3NwYWNlXG5cbiAgICB2YXIgeCA9IFtdOyAvLyB2ZWN0b3Igd2l0aCBtYXJrcyBpbmRpY2F0aW5nIGEgdmFsdWUgeFtpXSBleGlzdHMgaW4gYSBnaXZlbiBjb2x1bW5cblxuICAgIHZhciB3ID0gW107IC8vIGxvb3AgYiBjb2x1bW5zXG5cbiAgICBmb3IgKHZhciBqYiA9IDA7IGpiIDwgYmNvbHVtbnM7IGpiKyspIHtcbiAgICAgIC8vIHVwZGF0ZSBwdHJcbiAgICAgIGNwdHJbamJdID0gY2luZGV4Lmxlbmd0aDsgLy8gbWFyayBpbiB3b3Jrc3BhY2UgZm9yIGN1cnJlbnQgY29sdW1uXG5cbiAgICAgIHZhciBtYXJrID0gamIgKyAxOyAvLyByb3dzIGluIGpiXG5cbiAgICAgIGZvciAodmFyIGliID0gMDsgaWIgPCBicm93czsgaWIrKykge1xuICAgICAgICAvLyBiW2liLCBqYl1cbiAgICAgICAgdmFyIHZiaWogPSBiZGF0YVtpYl1bamJdOyAvLyBjaGVjayBiW2liLCBqYl0gIT0gMCwgYXZvaWQgbG9vcHNcblxuICAgICAgICBpZiAoIWVxKHZiaWosIHplcm8pKSB7XG4gICAgICAgICAgLy8gQSB2YWx1ZXMgJiBpbmRleCBpbiBpYiBjb2x1bW5cbiAgICAgICAgICBmb3IgKHZhciBrYTAgPSBhcHRyW2liXSwga2ExID0gYXB0cltpYiArIDFdLCBrYSA9IGthMDsga2EgPCBrYTE7IGthKyspIHtcbiAgICAgICAgICAgIC8vIGEgcm93XG4gICAgICAgICAgICB2YXIgaWEgPSBhaW5kZXhba2FdOyAvLyBjaGVjayB2YWx1ZSBleGlzdHMgaW4gY3VycmVudCBqXG5cbiAgICAgICAgICAgIGlmICh3W2lhXSAhPT0gbWFyaykge1xuICAgICAgICAgICAgICAvLyBpYSBpcyBuZXcgZW50cnkgaW4galxuICAgICAgICAgICAgICB3W2lhXSA9IG1hcms7IC8vIGFkZCBpIHRvIHBhdHRlcm4gb2YgQ1xuXG4gICAgICAgICAgICAgIGNpbmRleC5wdXNoKGlhKTsgLy8geChpYSkgPSBBXG5cbiAgICAgICAgICAgICAgeFtpYV0gPSBtZih2YmlqLCBhdmFsdWVzW2thXSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBpIGV4aXN0cyBpbiBDIGFscmVhZHlcbiAgICAgICAgICAgICAgeFtpYV0gPSBhZih4W2lhXSwgbWYodmJpaiwgYXZhbHVlc1trYV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gY29weSB2YWx1ZXMgZnJvbSB4IHRvIGNvbHVtbiBqYiBvZiBjXG5cblxuICAgICAgZm9yICh2YXIgcDAgPSBjcHRyW2piXSwgcDEgPSBjaW5kZXgubGVuZ3RoLCBwID0gcDA7IHAgPCBwMTsgcCsrKSB7XG4gICAgICAgIC8vIHJvd1xuICAgICAgICB2YXIgaWMgPSBjaW5kZXhbcF07IC8vIGNvcHkgdmFsdWVcblxuICAgICAgICBjdmFsdWVzW3BdID0geFtpY107XG4gICAgICB9XG4gICAgfSAvLyB1cGRhdGUgcHRyXG5cblxuICAgIGNwdHJbYmNvbHVtbnNdID0gY2luZGV4Lmxlbmd0aDsgLy8gcmV0dXJuIHNwYXJzZSBtYXRyaXhcblxuICAgIHJldHVybiBjO1xuICB9XG4gIC8qKlxuICAgKiBDID0gQSAqIEJcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9IGEgICAgICAgICAgICBTcGFyc2VNYXRyaXggICAgICAoTXhOKVxuICAgKiBAcGFyYW0ge01hdHJpeH0gYiAgICAgICAgICAgIFNwYXJzZU1hdHJpeCAgICAgIChOeEMpXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgU3BhcnNlTWF0cml4ICAgICAgKE14QylcbiAgICovXG5cblxuICBmdW5jdGlvbiBfbXVsdGlwbHlTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoYSwgYikge1xuICAgIC8vIGEgc3BhcnNlXG4gICAgdmFyIGF2YWx1ZXMgPSBhLl92YWx1ZXM7XG4gICAgdmFyIGFpbmRleCA9IGEuX2luZGV4O1xuICAgIHZhciBhcHRyID0gYS5fcHRyO1xuICAgIHZhciBhZHQgPSBhLl9kYXRhdHlwZTsgLy8gYiBzcGFyc2VcblxuICAgIHZhciBidmFsdWVzID0gYi5fdmFsdWVzO1xuICAgIHZhciBiaW5kZXggPSBiLl9pbmRleDtcbiAgICB2YXIgYnB0ciA9IGIuX3B0cjtcbiAgICB2YXIgYmR0ID0gYi5fZGF0YXR5cGU7IC8vIHJvd3MgJiBjb2x1bW5zXG5cbiAgICB2YXIgYXJvd3MgPSBhLl9zaXplWzBdO1xuICAgIHZhciBiY29sdW1ucyA9IGIuX3NpemVbMV07IC8vIGZsYWcgaW5kaWNhdGluZyBib3RoIG1hdHJpY2VzIChhICYgYikgY29udGFpbiBkYXRhXG5cbiAgICB2YXIgdmFsdWVzID0gYXZhbHVlcyAmJiBidmFsdWVzOyAvLyBkYXRhdHlwZVxuXG4gICAgdmFyIGR0OyAvLyBhZGRTY2FsYXIgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGFmID0gYWRkU2NhbGFyOyAvLyBtdWx0aXBseVNjYWxhciBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgbWYgPSBtdWx0aXBseVNjYWxhcjsgLy8gcHJvY2VzcyBkYXRhIHR5cGVzXG5cbiAgICBpZiAoYWR0ICYmIGJkdCAmJiBhZHQgPT09IGJkdCAmJiB0eXBlb2YgYWR0ID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gZGF0YXR5cGVcbiAgICAgIGR0ID0gYWR0OyAvLyBmaW5kIHNpZ25hdHVyZXMgdGhhdCBtYXRjaGVzIChkdCwgZHQpXG5cbiAgICAgIGFmID0gdHlwZWQuZmluZChhZGRTY2FsYXIsIFtkdCwgZHRdKTtcbiAgICAgIG1mID0gdHlwZWQuZmluZChtdWx0aXBseVNjYWxhciwgW2R0LCBkdF0pO1xuICAgIH0gLy8gcmVzdWx0XG5cblxuICAgIHZhciBjdmFsdWVzID0gdmFsdWVzID8gW10gOiB1bmRlZmluZWQ7XG4gICAgdmFyIGNpbmRleCA9IFtdO1xuICAgIHZhciBjcHRyID0gW107IC8vIGMgbWF0cml4XG5cbiAgICB2YXIgYyA9IGEuY3JlYXRlU3BhcnNlTWF0cml4KHtcbiAgICAgIHZhbHVlczogY3ZhbHVlcyxcbiAgICAgIGluZGV4OiBjaW5kZXgsXG4gICAgICBwdHI6IGNwdHIsXG4gICAgICBzaXplOiBbYXJvd3MsIGJjb2x1bW5zXSxcbiAgICAgIGRhdGF0eXBlOiBkdFxuICAgIH0pOyAvLyB3b3Jrc3BhY2VcblxuICAgIHZhciB4ID0gdmFsdWVzID8gW10gOiB1bmRlZmluZWQ7IC8vIHZlY3RvciB3aXRoIG1hcmtzIGluZGljYXRpbmcgYSB2YWx1ZSB4W2ldIGV4aXN0cyBpbiBhIGdpdmVuIGNvbHVtblxuXG4gICAgdmFyIHcgPSBbXTsgLy8gdmFyaWFibGVzXG5cbiAgICB2YXIga2EsIGthMCwga2ExLCBrYiwga2IwLCBrYjEsIGlhLCBpYjsgLy8gbG9vcCBiIGNvbHVtbnNcblxuICAgIGZvciAodmFyIGpiID0gMDsgamIgPCBiY29sdW1uczsgamIrKykge1xuICAgICAgLy8gdXBkYXRlIHB0clxuICAgICAgY3B0cltqYl0gPSBjaW5kZXgubGVuZ3RoOyAvLyBtYXJrIGluIHdvcmtzcGFjZSBmb3IgY3VycmVudCBjb2x1bW5cblxuICAgICAgdmFyIG1hcmsgPSBqYiArIDE7IC8vIEIgdmFsdWVzICYgaW5kZXggaW4galxuXG4gICAgICBmb3IgKGtiMCA9IGJwdHJbamJdLCBrYjEgPSBicHRyW2piICsgMV0sIGtiID0ga2IwOyBrYiA8IGtiMTsga2IrKykge1xuICAgICAgICAvLyBiIHJvd1xuICAgICAgICBpYiA9IGJpbmRleFtrYl07IC8vIGNoZWNrIHdlIG5lZWQgdG8gcHJvY2VzcyB2YWx1ZXNcblxuICAgICAgICBpZiAodmFsdWVzKSB7XG4gICAgICAgICAgLy8gbG9vcCB2YWx1ZXMgaW4gYVs6LGliXVxuICAgICAgICAgIGZvciAoa2EwID0gYXB0cltpYl0sIGthMSA9IGFwdHJbaWIgKyAxXSwga2EgPSBrYTA7IGthIDwga2ExOyBrYSsrKSB7XG4gICAgICAgICAgICAvLyByb3dcbiAgICAgICAgICAgIGlhID0gYWluZGV4W2thXTsgLy8gY2hlY2sgdmFsdWUgZXhpc3RzIGluIGN1cnJlbnQgalxuXG4gICAgICAgICAgICBpZiAod1tpYV0gIT09IG1hcmspIHtcbiAgICAgICAgICAgICAgLy8gaWEgaXMgbmV3IGVudHJ5IGluIGpcbiAgICAgICAgICAgICAgd1tpYV0gPSBtYXJrOyAvLyBhZGQgaSB0byBwYXR0ZXJuIG9mIENcblxuICAgICAgICAgICAgICBjaW5kZXgucHVzaChpYSk7IC8vIHgoaWEpID0gQVxuXG4gICAgICAgICAgICAgIHhbaWFdID0gbWYoYnZhbHVlc1trYl0sIGF2YWx1ZXNba2FdKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIGkgZXhpc3RzIGluIEMgYWxyZWFkeVxuICAgICAgICAgICAgICB4W2lhXSA9IGFmKHhbaWFdLCBtZihidmFsdWVzW2tiXSwgYXZhbHVlc1trYV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gbG9vcCB2YWx1ZXMgaW4gYVs6LGliXVxuICAgICAgICAgIGZvciAoa2EwID0gYXB0cltpYl0sIGthMSA9IGFwdHJbaWIgKyAxXSwga2EgPSBrYTA7IGthIDwga2ExOyBrYSsrKSB7XG4gICAgICAgICAgICAvLyByb3dcbiAgICAgICAgICAgIGlhID0gYWluZGV4W2thXTsgLy8gY2hlY2sgdmFsdWUgZXhpc3RzIGluIGN1cnJlbnQgalxuXG4gICAgICAgICAgICBpZiAod1tpYV0gIT09IG1hcmspIHtcbiAgICAgICAgICAgICAgLy8gaWEgaXMgbmV3IGVudHJ5IGluIGpcbiAgICAgICAgICAgICAgd1tpYV0gPSBtYXJrOyAvLyBhZGQgaSB0byBwYXR0ZXJuIG9mIENcblxuICAgICAgICAgICAgICBjaW5kZXgucHVzaChpYSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IC8vIGNoZWNrIHdlIG5lZWQgdG8gcHJvY2VzcyBtYXRyaXggdmFsdWVzIChwYXR0ZXJuIG1hdHJpeClcblxuXG4gICAgICBpZiAodmFsdWVzKSB7XG4gICAgICAgIC8vIGNvcHkgdmFsdWVzIGZyb20geCB0byBjb2x1bW4gamIgb2YgY1xuICAgICAgICBmb3IgKHZhciBwMCA9IGNwdHJbamJdLCBwMSA9IGNpbmRleC5sZW5ndGgsIHAgPSBwMDsgcCA8IHAxOyBwKyspIHtcbiAgICAgICAgICAvLyByb3dcbiAgICAgICAgICB2YXIgaWMgPSBjaW5kZXhbcF07IC8vIGNvcHkgdmFsdWVcblxuICAgICAgICAgIGN2YWx1ZXNbcF0gPSB4W2ljXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gdXBkYXRlIHB0clxuXG5cbiAgICBjcHRyW2Jjb2x1bW5zXSA9IGNpbmRleC5sZW5ndGg7IC8vIHJldHVybiBzcGFyc2UgbWF0cml4XG5cbiAgICByZXR1cm4gYztcbiAgfVxuXG4gIHJldHVybiBtdWx0aXBseTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVNdWx0aXBseSA9IGNyZWF0ZU11bHRpcGx5OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVNdWx0aXBseVNjYWxhciA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnbXVsdGlwbHlTY2FsYXInO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVNdWx0aXBseVNjYWxhciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIE11bHRpcGx5IHR3byBzY2FsYXIgdmFsdWVzLCBgeCAqIHlgLlxuICAgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IGZvciBpbnRlcm5hbCB1c2U6IGl0IGlzIHVzZWQgYnkgdGhlIHB1YmxpYyBmdW5jdGlvblxuICAgKiBgbXVsdGlwbHlgXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3Qgc3VwcG9ydCBjb2xsZWN0aW9ucyAoQXJyYXkgb3IgTWF0cml4KS5cbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdH0geCAgIEZpcnN0IHZhbHVlIHRvIG11bHRpcGx5XG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleH0geSAgICAgICAgICBTZWNvbmQgdmFsdWUgdG8gbXVsdGlwbHlcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdH0gICAgIE11bHRpcGxpY2F0aW9uIG9mIGB4YCBhbmQgYHlgXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB2YXIgbXVsdGlwbHlTY2FsYXIgPSB0eXBlZCgnbXVsdGlwbHlTY2FsYXInLCB7XG4gICAgJ251bWJlciwgbnVtYmVyJzogX251bWJlci5tdWx0aXBseU51bWJlcixcbiAgICAnQ29tcGxleCwgQ29tcGxleCc6IGZ1bmN0aW9uIENvbXBsZXhDb21wbGV4KHgsIHkpIHtcbiAgICAgIHJldHVybiB4Lm11bCh5KTtcbiAgICB9LFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IGZ1bmN0aW9uIEJpZ051bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geC50aW1lcyh5KTtcbiAgICB9LFxuICAgICdGcmFjdGlvbiwgRnJhY3Rpb24nOiBmdW5jdGlvbiBGcmFjdGlvbkZyYWN0aW9uKHgsIHkpIHtcbiAgICAgIHJldHVybiB4Lm11bCh5KTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBGcmFjdGlvbiB8IEJpZ051bWJlciB8IENvbXBsZXgsIFVuaXQnOiBmdW5jdGlvbiBudW1iZXJGcmFjdGlvbkJpZ051bWJlckNvbXBsZXhVbml0KHgsIHkpIHtcbiAgICAgIHZhciByZXMgPSB5LmNsb25lKCk7XG4gICAgICByZXMudmFsdWUgPSByZXMudmFsdWUgPT09IG51bGwgPyByZXMuX25vcm1hbGl6ZSh4KSA6IG11bHRpcGx5U2NhbGFyKHJlcy52YWx1ZSwgeCk7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0sXG4gICAgJ1VuaXQsIG51bWJlciB8IEZyYWN0aW9uIHwgQmlnTnVtYmVyIHwgQ29tcGxleCc6IGZ1bmN0aW9uIFVuaXROdW1iZXJGcmFjdGlvbkJpZ051bWJlckNvbXBsZXgoeCwgeSkge1xuICAgICAgdmFyIHJlcyA9IHguY2xvbmUoKTtcbiAgICAgIHJlcy52YWx1ZSA9IHJlcy52YWx1ZSA9PT0gbnVsbCA/IHJlcy5fbm9ybWFsaXplKHkpIDogbXVsdGlwbHlTY2FsYXIocmVzLnZhbHVlLCB5KTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSxcbiAgICAnVW5pdCwgVW5pdCc6IGZ1bmN0aW9uIFVuaXRVbml0KHgsIHkpIHtcbiAgICAgIHJldHVybiB4Lm11bHRpcGx5KHkpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBtdWx0aXBseVNjYWxhcjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVNdWx0aXBseVNjYWxhciA9IGNyZWF0ZU11bHRpcGx5U2NhbGFyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVOb3JtID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnbm9ybSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdhYnMnLCAnYWRkJywgJ3BvdycsICdjb25qJywgJ3NxcnQnLCAnbXVsdGlwbHknLCAnZXF1YWxTY2FsYXInLCAnbGFyZ2VyJywgJ3NtYWxsZXInLCAnbWF0cml4J107XG52YXIgY3JlYXRlTm9ybSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBhYnMgPSBfcmVmLmFicyxcbiAgICAgIGFkZCA9IF9yZWYuYWRkLFxuICAgICAgcG93ID0gX3JlZi5wb3csXG4gICAgICBjb25qID0gX3JlZi5jb25qLFxuICAgICAgc3FydCA9IF9yZWYuc3FydCxcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIGxhcmdlciA9IF9yZWYubGFyZ2VyLFxuICAgICAgc21hbGxlciA9IF9yZWYuc21hbGxlcixcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIG5vcm0gb2YgYSBudW1iZXIsIHZlY3RvciBvciBtYXRyaXguXG4gICAqXG4gICAqIFRoZSBzZWNvbmQgcGFyYW1ldGVyIHAgaXMgb3B0aW9uYWwuIElmIG5vdCBwcm92aWRlZCwgaXQgZGVmYXVsdHMgdG8gMi5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLm5vcm0oeClcbiAgICogICAgbWF0aC5ub3JtKHgsIHApXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmFicygtMy41KSAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDMuNVxuICAgKiAgICBtYXRoLm5vcm0oLTMuNSkgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDMuNVxuICAgKlxuICAgKiAgICBtYXRoLm5vcm0obWF0aC5jb21wbGV4KDMsIC00KSkgICAgICAgICAvLyByZXR1cm5zIDVcbiAgICpcbiAgICogICAgbWF0aC5ub3JtKFsxLCAyLCAtM10sIEluZmluaXR5KSAgICAgICAgLy8gcmV0dXJucyAzXG4gICAqICAgIG1hdGgubm9ybShbMSwgMiwgLTNdLCAtSW5maW5pdHkpICAgICAgIC8vIHJldHVybnMgMVxuICAgKlxuICAgKiAgICBtYXRoLm5vcm0oWzMsIDRdLCAyKSAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDVcbiAgICpcbiAgICogICAgbWF0aC5ub3JtKFtbMSwgMl0sIFszLCA0XV0sIDEpICAgICAgICAgIC8vIHJldHVybnMgNlxuICAgKiAgICBtYXRoLm5vcm0oW1sxLCAyXSwgWzMsIDRdXSwgJ2luZicpICAgICAvLyByZXR1cm5zIDdcbiAgICogICAgbWF0aC5ub3JtKFtbMSwgMl0sIFszLCA0XV0sICdmcm8nKSAgICAgLy8gcmV0dXJucyA1LjQ3NzIyNTU3NTA1MTY2MVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYWJzLCBoeXBvdFxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHhcbiAgICogICAgICAgICAgICBWYWx1ZSBmb3Igd2hpY2ggdG8gY2FsY3VsYXRlIHRoZSBub3JtXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IHN0cmluZ30gW3A9Ml1cbiAgICogICAgICAgICAgICBWZWN0b3Igc3BhY2UuXG4gICAqICAgICAgICAgICAgU3VwcG9ydGVkIG51bWJlcnMgaW5jbHVkZSBJbmZpbml0eSBhbmQgLUluZmluaXR5LlxuICAgKiAgICAgICAgICAgIFN1cHBvcnRlZCBzdHJpbmdzIGFyZTogJ2luZicsICctaW5mJywgYW5kICdmcm8nIChUaGUgRnJvYmVuaXVzIG5vcm0pXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlcn0gdGhlIHAtbm9ybVxuICAgKi9cbiAgdmFyIG5vcm0gPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBNYXRoLmFicyxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmFicygpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgLy8gbm9ybSh4KSA9IGFicyh4KVxuICAgICAgcmV0dXJuIHguYWJzKCk7XG4gICAgfSxcbiAgICBcImJvb2xlYW5cIjogZnVuY3Rpb24gYm9vbGVhbih4KSB7XG4gICAgICAvLyBub3JtKHgpID0gYWJzKHgpXG4gICAgICByZXR1cm4gTWF0aC5hYnMoeCk7XG4gICAgfSxcbiAgICBBcnJheTogZnVuY3Rpb24gQXJyYXkoeCkge1xuICAgICAgcmV0dXJuIF9ub3JtKG1hdHJpeCh4KSwgMik7XG4gICAgfSxcbiAgICBNYXRyaXg6IGZ1bmN0aW9uIE1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gX25vcm0oeCwgMik7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQ29tcGxleCB8IEJpZ051bWJlciB8IGJvb2xlYW4sIG51bWJlciB8IEJpZ051bWJlciB8IHN0cmluZyc6IGZ1bmN0aW9uIG51bWJlckNvbXBsZXhCaWdOdW1iZXJCb29sZWFuTnVtYmVyQmlnTnVtYmVyU3RyaW5nKHgpIHtcbiAgICAgIC8vIGlnbm9yZSBzZWNvbmQgcGFyYW1ldGVyLCBUT0RPOiByZW1vdmUgdGhlIG9wdGlvbiBvZiBzZWNvbmQgcGFyYW1ldGVyIGZvciB0aGVzZSB0eXBlc1xuICAgICAgcmV0dXJuIG5vcm0oeCk7XG4gICAgfSxcbiAgICAnQXJyYXksIG51bWJlciB8IEJpZ051bWJlciB8IHN0cmluZyc6IGZ1bmN0aW9uIEFycmF5TnVtYmVyQmlnTnVtYmVyU3RyaW5nKHgsIHApIHtcbiAgICAgIHJldHVybiBfbm9ybShtYXRyaXgoeCksIHApO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyIHwgc3RyaW5nJzogZnVuY3Rpb24gTWF0cml4TnVtYmVyQmlnTnVtYmVyU3RyaW5nKHgsIHApIHtcbiAgICAgIHJldHVybiBfbm9ybSh4LCBwKTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBub3JtIGZvciBhbiBhcnJheVxuICAgKiBAcGFyYW0ge01hdHJpeH0geFxuICAgKiBAcGFyYW0ge251bWJlciB8IHN0cmluZ30gcFxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBub3JtXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9ub3JtKHgsIHApIHtcbiAgICAvLyBzaXplXG4gICAgdmFyIHNpemVYID0geC5zaXplKCk7IC8vIGNoZWNrIGlmIGl0IGlzIGEgdmVjdG9yXG5cbiAgICBpZiAoc2l6ZVgubGVuZ3RoID09PSAxKSB7XG4gICAgICAvLyBjaGVjayBwXG4gICAgICBpZiAocCA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZIHx8IHAgPT09ICdpbmYnKSB7XG4gICAgICAgIC8vIG5vcm0oeCwgSW5maW5pdHkpID0gbWF4KGFicyh4KSlcbiAgICAgICAgdmFyIHBpbmYgPSAwOyAvLyBza2lwIHplcm9zIHNpbmNlIGFicygwKSA9PT0gMFxuXG4gICAgICAgIHguZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICB2YXIgdiA9IGFicyh2YWx1ZSk7XG5cbiAgICAgICAgICBpZiAobGFyZ2VyKHYsIHBpbmYpKSB7XG4gICAgICAgICAgICBwaW5mID0gdjtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgICByZXR1cm4gcGluZjtcbiAgICAgIH1cblxuICAgICAgaWYgKHAgPT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSB8fCBwID09PSAnLWluZicpIHtcbiAgICAgICAgLy8gbm9ybSh4LCAtSW5maW5pdHkpID0gbWluKGFicyh4KSlcbiAgICAgICAgdmFyIG5pbmY7IC8vIHNraXAgemVyb3Mgc2luY2UgYWJzKDApID09PSAwXG5cbiAgICAgICAgeC5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIHZhciB2ID0gYWJzKHZhbHVlKTtcblxuICAgICAgICAgIGlmICghbmluZiB8fCBzbWFsbGVyKHYsIG5pbmYpKSB7XG4gICAgICAgICAgICBuaW5mID0gdjtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgICByZXR1cm4gbmluZiB8fCAwO1xuICAgICAgfVxuXG4gICAgICBpZiAocCA9PT0gJ2ZybycpIHtcbiAgICAgICAgcmV0dXJuIF9ub3JtKHgsIDIpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHAgPT09ICdudW1iZXInICYmICFpc05hTihwKSkge1xuICAgICAgICAvLyBjaGVjayBwICE9IDBcbiAgICAgICAgaWYgKCFlcXVhbFNjYWxhcihwLCAwKSkge1xuICAgICAgICAgIC8vIG5vcm0oeCwgcCkgPSBzdW0oYWJzKHhpKSBeIHApIF4gMS9wXG4gICAgICAgICAgdmFyIG4gPSAwOyAvLyBza2lwIHplcm9zIHNpbmNlIGFicygwKSA9PT0gMFxuXG4gICAgICAgICAgeC5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgbiA9IGFkZChwb3coYWJzKHZhbHVlKSwgcCksIG4pO1xuICAgICAgICAgIH0sIHRydWUpO1xuICAgICAgICAgIHJldHVybiBwb3cobiwgMSAvIHApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICAgIH0gLy8gaW52YWxpZCBwYXJhbWV0ZXIgdmFsdWVcblxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIHBhcmFtZXRlciB2YWx1ZScpO1xuICAgIH0gLy8gTXhOIG1hdHJpeFxuXG5cbiAgICBpZiAoc2l6ZVgubGVuZ3RoID09PSAyKSB7XG4gICAgICAvLyBjaGVjayBwXG4gICAgICBpZiAocCA9PT0gMSkge1xuICAgICAgICAvLyBub3JtKHgpID0gdGhlIGxhcmdlc3QgY29sdW1uIHN1bVxuICAgICAgICB2YXIgYyA9IFtdOyAvLyByZXN1bHRcblxuICAgICAgICB2YXIgbWF4YyA9IDA7IC8vIHNraXAgemVyb3Mgc2luY2UgYWJzKDApID09IDBcblxuICAgICAgICB4LmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCkge1xuICAgICAgICAgIHZhciBqID0gaW5kZXhbMV07XG4gICAgICAgICAgdmFyIGNqID0gYWRkKGNbal0gfHwgMCwgYWJzKHZhbHVlKSk7XG5cbiAgICAgICAgICBpZiAobGFyZ2VyKGNqLCBtYXhjKSkge1xuICAgICAgICAgICAgbWF4YyA9IGNqO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNbal0gPSBjajtcbiAgICAgICAgfSwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiBtYXhjO1xuICAgICAgfVxuXG4gICAgICBpZiAocCA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZIHx8IHAgPT09ICdpbmYnKSB7XG4gICAgICAgIC8vIG5vcm0oeCkgPSB0aGUgbGFyZ2VzdCByb3cgc3VtXG4gICAgICAgIHZhciByID0gW107IC8vIHJlc3VsdFxuXG4gICAgICAgIHZhciBtYXhyID0gMDsgLy8gc2tpcCB6ZXJvcyBzaW5jZSBhYnMoMCkgPT0gMFxuXG4gICAgICAgIHguZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4KSB7XG4gICAgICAgICAgdmFyIGkgPSBpbmRleFswXTtcbiAgICAgICAgICB2YXIgcmkgPSBhZGQocltpXSB8fCAwLCBhYnModmFsdWUpKTtcblxuICAgICAgICAgIGlmIChsYXJnZXIocmksIG1heHIpKSB7XG4gICAgICAgICAgICBtYXhyID0gcmk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcltpXSA9IHJpO1xuICAgICAgICB9LCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIG1heHI7XG4gICAgICB9XG5cbiAgICAgIGlmIChwID09PSAnZnJvJykge1xuICAgICAgICAvLyBub3JtKHgpID0gc3FydChzdW0oZGlhZyh4J3gpKSlcbiAgICAgICAgdmFyIGZybyA9IDA7XG4gICAgICAgIHguZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4KSB7XG4gICAgICAgICAgZnJvID0gYWRkKGZybywgbXVsdGlwbHkodmFsdWUsIGNvbmoodmFsdWUpKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gYWJzKHNxcnQoZnJvKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwID09PSAyKSB7XG4gICAgICAgIC8vIG5vdCBpbXBsZW1lbnRlZFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIHBhcmFtZXRlciB2YWx1ZSwgbWlzc2luZyBpbXBsZW1lbnRhdGlvbiBvZiBtYXRyaXggc2luZ3VsYXIgdmFsdWUgZGVjb21wb3NpdGlvbicpO1xuICAgICAgfSAvLyBpbnZhbGlkIHBhcmFtZXRlciB2YWx1ZVxuXG5cbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgcGFyYW1ldGVyIHZhbHVlJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5vcm07XG59KTtcbmV4cG9ydHMuY3JlYXRlTm9ybSA9IGNyZWF0ZU5vcm07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU50aFJvb3ROdW1iZXIgPSBleHBvcnRzLmNyZWF0ZU50aFJvb3QgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wMVwiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAyXCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDZcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMVwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgX2FsZ29yaXRobTYgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnbnRoUm9vdCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnZXF1YWxTY2FsYXInLCAnQmlnTnVtYmVyJ107XG52YXIgY3JlYXRlTnRoUm9vdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIF9CaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcjtcbiAgdmFyIGFsZ29yaXRobTAxID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMDEpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wMiA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0wMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNiA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0wNikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMSA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0xMSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtNS5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG02LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBudGggcm9vdCBvZiBhIHZhbHVlLlxuICAgKiBUaGUgcHJpbmNpcGFsIG50aCByb290IG9mIGEgcG9zaXRpdmUgcmVhbCBudW1iZXIgQSwgaXMgdGhlIHBvc2l0aXZlIHJlYWxcbiAgICogc29sdXRpb24gb2YgdGhlIGVxdWF0aW9uXG4gICAqXG4gICAqICAgICB4XnJvb3QgPSBBXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGgubnRoUm9vdChhKVxuICAgKiAgICAgbWF0aC5udGhSb290KGEsIHJvb3QpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgbWF0aC5udGhSb290KDksIDIpICAgIC8vIHJldHVybnMgMywgYXMgM14yID09IDlcbiAgICogICAgIG1hdGguc3FydCg5KSAgICAgICAgICAvLyByZXR1cm5zIDMsIGFzIDNeMiA9PSA5XG4gICAqICAgICBtYXRoLm50aFJvb3QoNjQsIDMpICAgLy8gcmV0dXJucyA0LCBhcyA0XjMgPT0gNjRcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBzcXJ0LCBwb3dcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeCB8IENvbXBsZXh9IGFcbiAgICogICAgICAgICAgICAgIFZhbHVlIGZvciB3aGljaCB0byBjYWxjdWxhdGUgdGhlIG50aCByb290XG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyfSBbcm9vdD0yXSAgICBUaGUgcm9vdC5cbiAgICogQHJldHVybiB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBSZXR1cm5zIHRoZSBudGggcm9vdCBvZiBgYWBcbiAgICovXG5cbiAgdmFyIGNvbXBsZXhFcnIgPSAnJyArICdDb21wbGV4IG51bWJlciBub3Qgc3VwcG9ydGVkIGluIGZ1bmN0aW9uIG50aFJvb3QuICcgKyAnVXNlIG50aFJvb3RzIGluc3RlYWQuJztcbiAgdmFyIG50aFJvb3QgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkge1xuICAgICAgcmV0dXJuICgwLCBfbnVtYmVyLm50aFJvb3ROdW1iZXIpKHgsIDIpO1xuICAgIH0sXG4gICAgJ251bWJlciwgbnVtYmVyJzogX251bWJlci5udGhSb290TnVtYmVyLFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiBfYmlnTnRoUm9vdCh4LCBuZXcgX0JpZ051bWJlcigyKSk7XG4gICAgfSxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihjb21wbGV4RXJyKTtcbiAgICB9LFxuICAgICdDb21wbGV4LCBudW1iZXInOiBmdW5jdGlvbiBDb21wbGV4TnVtYmVyKHgsIHkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihjb21wbGV4RXJyKTtcbiAgICB9LFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IF9iaWdOdGhSb290LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiBudGhSb290KHgsIDIpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIGRlbnNpdHkgbXVzdCBiZSBvbmUgKG5vIHplcm9zIGluIG1hdHJpeClcbiAgICAgIGlmICh5LmRlbnNpdHkoKSA9PT0gMSkge1xuICAgICAgICAvLyBzcGFyc2UgKyBzcGFyc2VcbiAgICAgICAgcmV0dXJuIGFsZ29yaXRobTA2KHgsIHksIG50aFJvb3QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdGhyb3cgZXhjZXB0aW9uXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUm9vdCBtdXN0IGJlIG5vbi16ZXJvJyk7XG4gICAgICB9XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMih5LCB4LCBudGhSb290LCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gZGVuc2l0eSBtdXN0IGJlIG9uZSAobm8gemVyb3MgaW4gbWF0cml4KVxuICAgICAgaWYgKHkuZGVuc2l0eSgpID09PSAxKSB7XG4gICAgICAgIC8vIGRlbnNlICsgc3BhcnNlXG4gICAgICAgIHJldHVybiBhbGdvcml0aG0wMSh4LCB5LCBudGhSb290LCBmYWxzZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB0aHJvdyBleGNlcHRpb25cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSb290IG11c3QgYmUgbm9uLXplcm8nKTtcbiAgICAgIH1cbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBudGhSb290KTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBudGhSb290KG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBudGhSb290KG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBudGhSb290KHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTExKHgsIHksIG50aFJvb3QsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gRGVuc2VNYXRyaXhOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIG50aFJvb3QsIGZhbHNlKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlclNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyBkZW5zaXR5IG11c3QgYmUgb25lIChubyB6ZXJvcyBpbiBtYXRyaXgpXG4gICAgICBpZiAoeS5kZW5zaXR5KCkgPT09IDEpIHtcbiAgICAgICAgLy8gc3BhcnNlIC0gc2NhbGFyXG4gICAgICAgIHJldHVybiBhbGdvcml0aG0xMSh5LCB4LCBudGhSb290LCB0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHRocm93IGV4Y2VwdGlvblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jvb3QgbXVzdCBiZSBub24temVybycpO1xuICAgICAgfVxuICAgIH0sXG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgbnRoUm9vdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIEFycmF5TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBudGhSb290KG1hdHJpeCh4KSwgeSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgQXJyYXknOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gbnRoUm9vdCh4LCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbnRoUm9vdDtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgbnRoIHJvb3Qgb2YgYSBmb3IgQmlnTnVtYmVycywgc29sdmUgeF5yb290ID09IGFcbiAgICogaHR0cHM6Ly9yb3NldHRhY29kZS5vcmcvd2lraS9OdGhfcm9vdCNKYXZhU2NyaXB0XG4gICAqIEBwYXJhbSB7QmlnTnVtYmVyfSBhXG4gICAqIEBwYXJhbSB7QmlnTnVtYmVyfSByb290XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9iaWdOdGhSb290KGEsIHJvb3QpIHtcbiAgICB2YXIgcHJlY2lzaW9uID0gX0JpZ051bWJlci5wcmVjaXNpb247XG5cbiAgICB2YXIgQmlnID0gX0JpZ051bWJlci5jbG9uZSh7XG4gICAgICBwcmVjaXNpb246IHByZWNpc2lvbiArIDJcbiAgICB9KTtcblxuICAgIHZhciB6ZXJvID0gbmV3IF9CaWdOdW1iZXIoMCk7XG4gICAgdmFyIG9uZSA9IG5ldyBCaWcoMSk7XG4gICAgdmFyIGludiA9IHJvb3QuaXNOZWdhdGl2ZSgpO1xuXG4gICAgaWYgKGludikge1xuICAgICAgcm9vdCA9IHJvb3QubmVnKCk7XG4gICAgfVxuXG4gICAgaWYgKHJvb3QuaXNaZXJvKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUm9vdCBtdXN0IGJlIG5vbi16ZXJvJyk7XG4gICAgfVxuXG4gICAgaWYgKGEuaXNOZWdhdGl2ZSgpICYmICFyb290LmFicygpLm1vZCgyKS5lcXVhbHMoMSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUm9vdCBtdXN0IGJlIG9kZCB3aGVuIGEgaXMgbmVnYXRpdmUuJyk7XG4gICAgfSAvLyBlZGdlIGNhc2VzIHplcm8gYW5kIGluZmluaXR5XG5cblxuICAgIGlmIChhLmlzWmVybygpKSB7XG4gICAgICByZXR1cm4gaW52ID8gbmV3IEJpZyhJbmZpbml0eSkgOiAwO1xuICAgIH1cblxuICAgIGlmICghYS5pc0Zpbml0ZSgpKSB7XG4gICAgICByZXR1cm4gaW52ID8gemVybyA6IGE7XG4gICAgfVxuXG4gICAgdmFyIHggPSBhLmFicygpLnBvdyhvbmUuZGl2KHJvb3QpKTsgLy8gSWYgYSA8IDAsIHdlIHJlcXVpcmUgdGhhdCByb290IGlzIGFuIG9kZCBpbnRlZ2VyLFxuICAgIC8vIHNvICgtMSkgXiAoMS9yb290KSA9IC0xXG5cbiAgICB4ID0gYS5pc05lZygpID8geC5uZWcoKSA6IHg7XG4gICAgcmV0dXJuIG5ldyBfQmlnTnVtYmVyKChpbnYgPyBvbmUuZGl2KHgpIDogeCkudG9QcmVjaXNpb24ocHJlY2lzaW9uKSk7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVOdGhSb290ID0gY3JlYXRlTnRoUm9vdDtcbnZhciBjcmVhdGVOdGhSb290TnVtYmVyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIFsndHlwZWQnXSwgZnVuY3Rpb24gKF9yZWYyKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYyLnR5cGVkO1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogX251bWJlci5udGhSb290TnVtYmVyLFxuICAgICdudW1iZXIsIG51bWJlcic6IF9udW1iZXIubnRoUm9vdE51bWJlclxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVOdGhSb290TnVtYmVyID0gY3JlYXRlTnRoUm9vdE51bWJlcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTnRoUm9vdHMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdudGhSb290cyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydjb25maWcnLCAndHlwZWQnLCAnZGl2aWRlU2NhbGFyJywgJ0NvbXBsZXgnXTtcbnZhciBjcmVhdGVOdGhSb290cyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIGRpdmlkZVNjYWxhciA9IF9yZWYuZGl2aWRlU2NhbGFyLFxuICAgICAgQ29tcGxleCA9IF9yZWYuQ29tcGxleDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBudGggcm9vdHMgb2YgYSB2YWx1ZS5cbiAgICogQW4gbnRoIHJvb3Qgb2YgYSBwb3NpdGl2ZSByZWFsIG51bWJlciBBLFxuICAgKiBpcyBhIHBvc2l0aXZlIHJlYWwgc29sdXRpb24gb2YgdGhlIGVxdWF0aW9uIFwieF5yb290ID0gQVwiLlxuICAgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYW4gYXJyYXkgb2YgY29tcGxleCB2YWx1ZXMuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5udGhSb290cyh4KVxuICAgKiAgICBtYXRoLm50aFJvb3RzKHgsIHJvb3QpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLm50aFJvb3RzKDEpXG4gICAqICAgIC8vIHJldHVybnMgW1xuICAgKiAgICAvLyAgIHtyZTogMSwgaW06IDB9LFxuICAgKiAgICAvLyAgIHtyZTogLTEsIGltOiAwfVxuICAgKiAgICAvLyBdXG4gICAqICAgIG50aFJvb3RzKDEsIDMpXG4gICAqICAgIC8vIHJldHVybnMgW1xuICAgKiAgICAvLyAgIHsgcmU6IDEsIGltOiAwIH0sXG4gICAqICAgIC8vICAgeyByZTogLTAuNDk5OTk5OTk5OTk5OTk5OCwgaW06IDAuODY2MDI1NDAzNzg0NDM4NyB9LFxuICAgKiAgICAvLyAgIHsgcmU6IC0wLjUwMDAwMDAwMDAwMDAwMDQsIGltOiAtMC44NjYwMjU0MDM3ODQ0Mzg1IH1cbiAgICogICAgXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgbnRoUm9vdCwgcG93LCBzcXJ0XG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHggTnVtYmVyIHRvIGJlIHJvdW5kZWRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9ICAgICAgICAgICAgUm91bmRlZCB2YWx1ZVxuICAgKi9cbiAgdmFyIG50aFJvb3RzID0gdHlwZWQobmFtZSwge1xuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIF9udGhDb21wbGV4Um9vdHMoeCwgMik7XG4gICAgfSxcbiAgICAnQ29tcGxleCwgbnVtYmVyJzogX250aENvbXBsZXhSb290c1xuICB9KTtcbiAgLyoqXG4gICAqIEVhY2ggZnVuY3Rpb24gaGVyZSByZXR1cm5zIGEgcmVhbCBtdWx0aXBsZSBvZiBpIGFzIGEgQ29tcGxleCB2YWx1ZS5cbiAgICogQHBhcmFtICB7bnVtYmVyfSB2YWxcbiAgICogQHJldHVybiB7Q29tcGxleH0gdmFsLCBpKnZhbCwgLXZhbCBvciAtaSp2YWwgZm9yIGluZGV4IDAsIDEsIDIsIDNcbiAgICovXG4gIC8vIFRoaXMgaXMgdXNlZCB0byBmaXggZmxvYXQgYXJ0aWZhY3RzIGZvciB6ZXJvLXZhbHVlZCBjb21wb25lbnRzLlxuXG4gIHZhciBfY2FsY3VsYXRlRXhhY3RSZXN1bHQgPSBbZnVuY3Rpb24gcmVhbFBvcyh2YWwpIHtcbiAgICByZXR1cm4gbmV3IENvbXBsZXgodmFsLCAwKTtcbiAgfSwgZnVuY3Rpb24gaW1hZ1Bvcyh2YWwpIHtcbiAgICByZXR1cm4gbmV3IENvbXBsZXgoMCwgdmFsKTtcbiAgfSwgZnVuY3Rpb24gcmVhbE5lZyh2YWwpIHtcbiAgICByZXR1cm4gbmV3IENvbXBsZXgoLXZhbCwgMCk7XG4gIH0sIGZ1bmN0aW9uIGltYWdOZWcodmFsKSB7XG4gICAgcmV0dXJuIG5ldyBDb21wbGV4KDAsIC12YWwpO1xuICB9XTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgbnRoIHJvb3Qgb2YgYSBDb21wbGV4IE51bWJlciBhIHVzaW5nIERlIE1vdmlyZSdzIFRoZW9yZW0uXG4gICAqIEBwYXJhbSAge0NvbXBsZXh9IGFcbiAgICogQHBhcmFtICB7bnVtYmVyfSByb290XG4gICAqIEByZXR1cm4ge0FycmF5fSBhcnJheSBvZiBuIENvbXBsZXggUm9vdHNcbiAgICovXG5cbiAgZnVuY3Rpb24gX250aENvbXBsZXhSb290cyhhLCByb290KSB7XG4gICAgaWYgKHJvb3QgPCAwKSB0aHJvdyBuZXcgRXJyb3IoJ1Jvb3QgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVybycpO1xuICAgIGlmIChyb290ID09PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ1Jvb3QgbXVzdCBiZSBub24temVybycpO1xuICAgIGlmIChyb290ICUgMSAhPT0gMCkgdGhyb3cgbmV3IEVycm9yKCdSb290IG11c3QgYmUgYW4gaW50ZWdlcicpO1xuICAgIGlmIChhID09PSAwIHx8IGEuYWJzKCkgPT09IDApIHJldHVybiBbbmV3IENvbXBsZXgoMCwgMCldO1xuICAgIHZhciBhSXNOdW1lcmljID0gdHlwZW9mIGEgPT09ICdudW1iZXInO1xuICAgIHZhciBvZmZzZXQ7IC8vIGRldGVybWluZSB0aGUgb2Zmc2V0IChhcmd1bWVudCBvZiBhKS8ocGkvMilcblxuICAgIGlmIChhSXNOdW1lcmljIHx8IGEucmUgPT09IDAgfHwgYS5pbSA9PT0gMCkge1xuICAgICAgaWYgKGFJc051bWVyaWMpIHtcbiAgICAgICAgb2Zmc2V0ID0gMiAqICsoYSA8IDApOyAvLyBudW1lcmljIHZhbHVlIG9uIHRoZSByZWFsIGF4aXNcbiAgICAgIH0gZWxzZSBpZiAoYS5pbSA9PT0gMCkge1xuICAgICAgICBvZmZzZXQgPSAyICogKyhhLnJlIDwgMCk7IC8vIGNvbXBsZXggdmFsdWUgb24gdGhlIHJlYWwgYXhpc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2Zmc2V0ID0gMiAqICsoYS5pbSA8IDApICsgMTsgLy8gY29tcGxleCB2YWx1ZSBvbiB0aGUgaW1hZ2luYXJ5IGF4aXNcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgYXJnID0gYS5hcmcoKTtcbiAgICB2YXIgYWJzID0gYS5hYnMoKTtcbiAgICB2YXIgcm9vdHMgPSBbXTtcbiAgICB2YXIgciA9IE1hdGgucG93KGFicywgMSAvIHJvb3QpO1xuXG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCByb290OyBrKyspIHtcbiAgICAgIHZhciBoYWxmUGlGYWN0b3IgPSAob2Zmc2V0ICsgNCAqIGspIC8gcm9vdDtcbiAgICAgIC8qKlxuICAgICAgICogSWYgKG9mZnNldCArIDQqaykvcm9vdCBpcyBhbiBpbnRlZ3JhbCBtdWx0aXBsZSBvZiBwaS8yXG4gICAgICAgKiB0aGVuIHdlIGNhbiBwcm9kdWNlIGEgbW9yZSBleGFjdCByZXN1bHQuXG4gICAgICAgKi9cblxuICAgICAgaWYgKGhhbGZQaUZhY3RvciA9PT0gTWF0aC5yb3VuZChoYWxmUGlGYWN0b3IpKSB7XG4gICAgICAgIHJvb3RzLnB1c2goX2NhbGN1bGF0ZUV4YWN0UmVzdWx0W2hhbGZQaUZhY3RvciAlIDRdKHIpKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHJvb3RzLnB1c2gobmV3IENvbXBsZXgoe1xuICAgICAgICByOiByLFxuICAgICAgICBwaGk6IChhcmcgKyAyICogTWF0aC5QSSAqIGspIC8gcm9vdFxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIHJldHVybiByb290cztcbiAgfVxuXG4gIHJldHVybiBudGhSb290cztcbn0pO1xuZXhwb3J0cy5jcmVhdGVOdGhSb290cyA9IGNyZWF0ZU50aFJvb3RzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVQb3cgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfbnVtYmVyMiA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ3Bvdyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnaWRlbnRpdHknLCAnbXVsdGlwbHknLCAnbWF0cml4JywgJ2ZyYWN0aW9uJywgJ251bWJlcicsICdDb21wbGV4J107XG52YXIgY3JlYXRlUG93ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgaWRlbnRpdHkgPSBfcmVmLmlkZW50aXR5LFxuICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5LFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBudW1iZXIgPSBfcmVmLm51bWJlcixcbiAgICAgIGZyYWN0aW9uID0gX3JlZi5mcmFjdGlvbixcbiAgICAgIENvbXBsZXggPSBfcmVmLkNvbXBsZXg7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIHBvd2VyIG9mIHggdG8geSwgYHggXiB5YC5cbiAgICogTWF0cml4IGV4cG9uZW50aWF0aW9uIGlzIHN1cHBvcnRlZCBmb3Igc3F1YXJlIG1hdHJpY2VzIGB4YCwgYW5kIHBvc2l0aXZlXG4gICAqIGludGVnZXIgZXhwb25lbnRzIGB5YC5cbiAgICpcbiAgICogRm9yIGN1YmljIHJvb3RzIG9mIG5lZ2F0aXZlIG51bWJlcnMsIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBwcmluY2lwYWxcbiAgICogcm9vdCBieSBkZWZhdWx0LiBJbiBvcmRlciB0byBsZXQgdGhlIGZ1bmN0aW9uIHJldHVybiB0aGUgcmVhbCByb290LFxuICAgKiBtYXRoLmpzIGNhbiBiZSBjb25maWd1cmVkIHdpdGggYG1hdGguY29uZmlnKHtwcmVkaWN0YWJsZTogdHJ1ZX0pYC5cbiAgICogVG8gcmV0cmlldmUgYWxsIGN1YmljIHJvb3RzIG9mIGEgdmFsdWUsIHVzZSBgbWF0aC5jYnJ0KHgsIHRydWUpYC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnBvdyh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5wb3coMiwgMykgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA4XG4gICAqXG4gICAqICAgIGNvbnN0IGEgPSBtYXRoLmNvbXBsZXgoMiwgMylcbiAgICogICAgbWF0aC5wb3coYSwgMikgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IC01ICsgMTJpXG4gICAqXG4gICAqICAgIGNvbnN0IGIgPSBbWzEsIDJdLCBbNCwgM11dXG4gICAqICAgIG1hdGgucG93KGIsIDIpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBBcnJheSBbWzksIDhdLCBbMTYsIDE3XV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIG11bHRpcGx5LCBzcXJ0LCBjYnJ0LCBudGhSb290XG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggIFRoZSBiYXNlXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXh9IHkgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBleHBvbmVudFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IFRoZSB2YWx1ZSBvZiBgeGAgdG8gdGhlIHBvd2VyIGB5YFxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfcG93LFxuICAgICdDb21wbGV4LCBDb21wbGV4JzogZnVuY3Rpb24gQ29tcGxleENvbXBsZXgoeCwgeSkge1xuICAgICAgcmV0dXJuIHgucG93KHkpO1xuICAgIH0sXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQmlnTnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIGlmICh5LmlzSW50ZWdlcigpIHx8IHggPj0gMCB8fCBjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIHgucG93KHkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgudG9OdW1iZXIoKSwgMCkucG93KHkudG9OdW1iZXIoKSwgMCk7XG4gICAgICB9XG4gICAgfSxcbiAgICAnRnJhY3Rpb24sIEZyYWN0aW9uJzogZnVuY3Rpb24gRnJhY3Rpb25GcmFjdGlvbih4LCB5KSB7XG4gICAgICBpZiAoeS5kICE9PSAxKSB7XG4gICAgICAgIGlmIChjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Z1bmN0aW9uIHBvdyBkb2VzIG5vdCBzdXBwb3J0IG5vbi1pbnRlZ2VyIGV4cG9uZW50cyBmb3IgZnJhY3Rpb25zLicpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBfcG93KHgudmFsdWVPZigpLCB5LnZhbHVlT2YoKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB4LnBvdyh5KTtcbiAgICAgIH1cbiAgICB9LFxuICAgICdBcnJheSwgbnVtYmVyJzogX3Bvd0FycmF5LFxuICAgICdBcnJheSwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQXJyYXlCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIF9wb3dBcnJheSh4LCB5LnRvTnVtYmVyKCkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgbnVtYmVyJzogX3Bvd01hdHJpeCxcbiAgICAnTWF0cml4LCBCaWdOdW1iZXInOiBmdW5jdGlvbiBNYXRyaXhCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIF9wb3dNYXRyaXgoeCwgeS50b051bWJlcigpKTtcbiAgICB9LFxuICAgICdVbml0LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBVbml0TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiB4LnBvdyh5KTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgcG93ZXIgb2YgeCB0byB5LCB4XnksIGZvciB0d28gbnVtYmVycy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHlcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQ29tcGxleH0gcmVzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9wb3coeCwgeSkge1xuICAgIC8vIEFsdGVybmF0aXZlbHkgY291bGQgZGVmaW5lIGEgJ3JlYWxtb2RlJyBjb25maWcgb3B0aW9uIG9yIHNvbWV0aGluZywgYnV0XG4gICAgLy8gJ3ByZWRpY3RhYmxlJyB3aWxsIHdvcmsgZm9yIG5vd1xuICAgIGlmIChjb25maWcucHJlZGljdGFibGUgJiYgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoeSkgJiYgeCA8IDApIHtcbiAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB5IGNhbiBiZSByZXByZXNlbnRlZCBhcyBhIGZyYWN0aW9uXG4gICAgICB0cnkge1xuICAgICAgICB2YXIgeUZyYWMgPSBmcmFjdGlvbih5KTtcbiAgICAgICAgdmFyIHlOdW0gPSBudW1iZXIoeUZyYWMpO1xuXG4gICAgICAgIGlmICh5ID09PSB5TnVtIHx8IE1hdGguYWJzKCh5IC0geU51bSkgLyB5KSA8IDFlLTE0KSB7XG4gICAgICAgICAgaWYgKHlGcmFjLmQgJSAyID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gKHlGcmFjLm4gJSAyID09PSAwID8gMSA6IC0xKSAqIE1hdGgucG93KC14LCB5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGV4KSB7fSAvLyBmcmFjdGlvbigpIHRocm93cyBhbiBlcnJvciBpZiB5IGlzIEluZmluaXR5LCBldGMuXG4gICAgICAvLyBVbmFibGUgdG8gZXhwcmVzcyB5IGFzIGEgZnJhY3Rpb24sIHNvIGNvbnRpbnVlIG9uXG5cbiAgICB9IC8vICoqZm9yIHByZWRpY3RhYmxlIG1vZGUqKiB4XkluZmluaXR5ID09PSBOYU4gaWYgeCA8IC0xXG4gICAgLy8gTi5CLiB0aGlzIGJlaGF2b3VyIGlzIGRpZmZlcmVudCBmcm9tIGBNYXRoLnBvd2Agd2hpY2ggZ2l2ZXNcbiAgICAvLyAoLTIpXkluZmluaXR5ID09PSBJbmZpbml0eVxuXG5cbiAgICBpZiAoY29uZmlnLnByZWRpY3RhYmxlICYmICh4IDwgLTEgJiYgeSA9PT0gSW5maW5pdHkgfHwgeCA+IC0xICYmIHggPCAwICYmIHkgPT09IC1JbmZpbml0eSkpIHtcbiAgICAgIHJldHVybiBOYU47XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfbnVtYmVyLmlzSW50ZWdlcikoeSkgfHwgeCA+PSAwIHx8IGNvbmZpZy5wcmVkaWN0YWJsZSkge1xuICAgICAgcmV0dXJuICgwLCBfbnVtYmVyMi5wb3dOdW1iZXIpKHgsIHkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUT0RPOiB0aGUgZm9sbG93aW5nIGluZmluaXR5IGNoZWNrcyBhcmUgZHVwbGljYXRlZCBmcm9tIHBvd051bWJlci4gRGVkdXBsaWNhdGUgdGhpcyBzb21laG93XG4gICAgICAvLyB4XkluZmluaXR5ID09PSAwIGlmIC0xIDwgeCA8IDFcbiAgICAgIC8vIEEgcmVhbCBudW1iZXIgMCBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mIGNvbXBsZXgoMClcbiAgICAgIGlmICh4ICogeCA8IDEgJiYgeSA9PT0gSW5maW5pdHkgfHwgeCAqIHggPiAxICYmIHkgPT09IC1JbmZpbml0eSkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgsIDApLnBvdyh5LCAwKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgcG93ZXIgb2YgYSAyZCBhcnJheVxuICAgKiBAcGFyYW0ge0FycmF5fSB4ICAgICBtdXN0IGJlIGEgMiBkaW1lbnNpb25hbCwgc3F1YXJlIG1hdHJpeFxuICAgKiBAcGFyYW0ge251bWJlcn0geSAgICBhIHBvc2l0aXZlLCBpbnRlZ2VyIHZhbHVlXG4gICAqIEByZXR1cm5zIHtBcnJheX1cbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBfcG93QXJyYXkoeCwgeSkge1xuICAgIGlmICghKDAsIF9udW1iZXIuaXNJbnRlZ2VyKSh5KSB8fCB5IDwgMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRm9yIEFeYiwgYiBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciAodmFsdWUgaXMgJyArIHkgKyAnKScpO1xuICAgIH0gLy8gdmVyaWZ5IHRoYXQgQSBpcyBhIDIgZGltZW5zaW9uYWwgc3F1YXJlIG1hdHJpeFxuXG5cbiAgICB2YXIgcyA9ICgwLCBfYXJyYXkuYXJyYXlTaXplKSh4KTtcblxuICAgIGlmIChzLmxlbmd0aCAhPT0gMikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGb3IgQV5iLCBBIG11c3QgYmUgMiBkaW1lbnNpb25hbCAoQSBoYXMgJyArIHMubGVuZ3RoICsgJyBkaW1lbnNpb25zKScpO1xuICAgIH1cblxuICAgIGlmIChzWzBdICE9PSBzWzFdKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvciBBXmIsIEEgbXVzdCBiZSBzcXVhcmUgKHNpemUgaXMgJyArIHNbMF0gKyAneCcgKyBzWzFdICsgJyknKTtcbiAgICB9XG5cbiAgICB2YXIgcmVzID0gaWRlbnRpdHkoc1swXSkudmFsdWVPZigpO1xuICAgIHZhciBweCA9IHg7XG5cbiAgICB3aGlsZSAoeSA+PSAxKSB7XG4gICAgICBpZiAoKHkgJiAxKSA9PT0gMSkge1xuICAgICAgICByZXMgPSBtdWx0aXBseShweCwgcmVzKTtcbiAgICAgIH1cblxuICAgICAgeSA+Pj0gMTtcbiAgICAgIHB4ID0gbXVsdGlwbHkocHgsIHB4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIHBvd2VyIG9mIGEgMmQgbWF0cml4XG4gICAqIEBwYXJhbSB7TWF0cml4fSB4ICAgICBtdXN0IGJlIGEgMiBkaW1lbnNpb25hbCwgc3F1YXJlIG1hdHJpeFxuICAgKiBAcGFyYW0ge251bWJlcn0geSAgICBhIHBvc2l0aXZlLCBpbnRlZ2VyIHZhbHVlXG4gICAqIEByZXR1cm5zIHtNYXRyaXh9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX3Bvd01hdHJpeCh4LCB5KSB7XG4gICAgcmV0dXJuIG1hdHJpeChfcG93QXJyYXkoeC52YWx1ZU9mKCksIHkpKTtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZVBvdyA9IGNyZWF0ZVBvdzsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUm91bmROdW1iZXIgPSBleHBvcnRzLmNyZWF0ZVJvdW5kID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTFcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMlwiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgX251bWJlcjIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxudmFyIE5PX0lOVCA9ICdOdW1iZXIgb2YgZGVjaW1hbHMgaW4gZnVuY3Rpb24gcm91bmQgbXVzdCBiZSBhbiBpbnRlZ2VyJztcbnZhciBuYW1lID0gJ3JvdW5kJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdlcXVhbFNjYWxhcicsICd6ZXJvcycsICdCaWdOdW1iZXInLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVSb3VuZCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIHplcm9zID0gX3JlZi56ZXJvcyxcbiAgICAgIEJpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMTEgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0xMSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMiA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0xMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xNCkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgLyoqXG4gICAqIFJvdW5kIGEgdmFsdWUgdG93YXJkcyB0aGUgbmVhcmVzdCBpbnRlZ2VyLlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgucm91bmQoeClcbiAgICogICAgbWF0aC5yb3VuZCh4LCBuKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5yb3VuZCgzLjIpICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAzXG4gICAqICAgIG1hdGgucm91bmQoMy44KSAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgNFxuICAgKiAgICBtYXRoLnJvdW5kKC00LjIpICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIC00XG4gICAqICAgIG1hdGgucm91bmQoLTQuNykgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgLTVcbiAgICogICAgbWF0aC5yb3VuZChtYXRoLnBpLCAzKSAgICAgICAvLyByZXR1cm5zIG51bWJlciAzLjE0MlxuICAgKiAgICBtYXRoLnJvdW5kKDEyMy40NTY3OCwgMikgICAgIC8vIHJldHVybnMgbnVtYmVyIDEyMy40NlxuICAgKlxuICAgKiAgICBjb25zdCBjID0gbWF0aC5jb21wbGV4KDMuMiwgLTIuNylcbiAgICogICAgbWF0aC5yb3VuZChjKSAgICAgICAgICAgICAgICAvLyByZXR1cm5zIENvbXBsZXggMyAtIDNpXG4gICAqXG4gICAqICAgIG1hdGgucm91bmQoWzMuMiwgMy44LCAtNC43XSkgLy8gcmV0dXJucyBBcnJheSBbMywgNCwgLTVdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjZWlsLCBmaXgsIGZsb29yXG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4ICBOdW1iZXIgdG8gYmUgcm91bmRlZFxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheX0gW249MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIGRlY2ltYWxzXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBSb3VuZGVkIHZhbHVlXG4gICAqL1xuXG4gIHZhciByb3VuZCA9IHR5cGVkKG5hbWUsIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcm91bmROdW1iZXJTaWduYXR1cmVzKSwge30sIHtcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LnJvdW5kKCk7XG4gICAgfSxcbiAgICAnQ29tcGxleCwgbnVtYmVyJzogZnVuY3Rpb24gQ29tcGxleE51bWJlcih4LCBuKSB7XG4gICAgICBpZiAobiAlIDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihOT19JTlQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4geC5yb3VuZChuKTtcbiAgICB9LFxuICAgICdDb21wbGV4LCBCaWdOdW1iZXInOiBmdW5jdGlvbiBDb21wbGV4QmlnTnVtYmVyKHgsIG4pIHtcbiAgICAgIGlmICghbi5pc0ludGVnZXIoKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKE5PX0lOVCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBfbiA9IG4udG9OdW1iZXIoKTtcblxuICAgICAgcmV0dXJuIHgucm91bmQoX24pO1xuICAgIH0sXG4gICAgJ251bWJlciwgQmlnTnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyKHgsIG4pIHtcbiAgICAgIGlmICghbi5pc0ludGVnZXIoKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKE5PX0lOVCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKHgpLnRvRGVjaW1hbFBsYWNlcyhuLnRvTnVtYmVyKCkpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHgudG9EZWNpbWFsUGxhY2VzKDApO1xuICAgIH0sXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQmlnTnVtYmVyQmlnTnVtYmVyKHgsIG4pIHtcbiAgICAgIGlmICghbi5pc0ludGVnZXIoKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKE5PX0lOVCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB4LnRvRGVjaW1hbFBsYWNlcyhuLnRvTnVtYmVyKCkpO1xuICAgIH0sXG4gICAgRnJhY3Rpb246IGZ1bmN0aW9uIEZyYWN0aW9uKHgpIHtcbiAgICAgIHJldHVybiB4LnJvdW5kKCk7XG4gICAgfSxcbiAgICAnRnJhY3Rpb24sIG51bWJlcic6IGZ1bmN0aW9uIEZyYWN0aW9uTnVtYmVyKHgsIG4pIHtcbiAgICAgIGlmIChuICUgMSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKE5PX0lOVCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB4LnJvdW5kKG4pO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSByb3VuZCgwKSA9IDBcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgcm91bmQsIHRydWUpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gU3BhcnNlTWF0cml4TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMSh4LCB5LCByb3VuZCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBEZW5zZU1hdHJpeE51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgcm91bmQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBDb21wbGV4IHwgQmlnTnVtYmVyLCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBudW1iZXJDb21wbGV4QmlnTnVtYmVyU3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhciBpcyB6ZXJvXG4gICAgICBpZiAoZXF1YWxTY2FsYXIoeCwgMCkpIHtcbiAgICAgICAgLy8gZG8gbm90IGV4ZWN1dGUgYWxnb3JpdGhtLCByZXN1bHQgd2lsbCBiZSBhIHplcm8gbWF0cml4XG4gICAgICAgIHJldHVybiB6ZXJvcyh5LnNpemUoKSwgeS5zdG9yYWdlKCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeSwgeCwgcm91bmQsIHRydWUpO1xuICAgIH0sXG4gICAgJ251bWJlciB8IENvbXBsZXggfCBCaWdOdW1iZXIsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gbnVtYmVyQ29tcGxleEJpZ051bWJlckRlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhciBpcyB6ZXJvXG4gICAgICBpZiAoZXF1YWxTY2FsYXIoeCwgMCkpIHtcbiAgICAgICAgLy8gZG8gbm90IGV4ZWN1dGUgYWxnb3JpdGhtLCByZXN1bHQgd2lsbCBiZSBhIHplcm8gbWF0cml4XG4gICAgICAgIHJldHVybiB6ZXJvcyh5LnNpemUoKSwgeS5zdG9yYWdlKCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgcm91bmQsIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBBcnJheU51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCByb3VuZCwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBDb21wbGV4IHwgQmlnTnVtYmVyLCBBcnJheSc6IGZ1bmN0aW9uIG51bWJlckNvbXBsZXhCaWdOdW1iZXJBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCByb3VuZCwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH1cbiAgfSkpO1xuICByZXR1cm4gcm91bmQ7XG59KTtcbmV4cG9ydHMuY3JlYXRlUm91bmQgPSBjcmVhdGVSb3VuZDtcbnZhciByb3VuZE51bWJlclNpZ25hdHVyZXMgPSB7XG4gIG51bWJlcjogX251bWJlcjIucm91bmROdW1iZXIsXG4gICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcih4LCBuKSB7XG4gICAgaWYgKCEoMCwgX251bWJlci5pc0ludGVnZXIpKG4pKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKE5PX0lOVCk7XG4gICAgfVxuXG4gICAgaWYgKG4gPCAwIHx8IG4gPiAxNSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdOdW1iZXIgb2YgZGVjaW1hbHMgaW4gZnVuY3Rpb24gcm91bmQgbXVzdCBiZSBpbiB0ZSByYW5nZSBvZiAwLTE1Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuICgwLCBfbnVtYmVyMi5yb3VuZE51bWJlcikoeCwgbik7XG4gIH1cbn07XG52YXIgY3JlYXRlUm91bmROdW1iZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgWyd0eXBlZCddLCBmdW5jdGlvbiAoX3JlZjIpIHtcbiAgdmFyIHR5cGVkID0gX3JlZjIudHlwZWQ7XG4gIHJldHVybiB0eXBlZChuYW1lLCByb3VuZE51bWJlclNpZ25hdHVyZXMpO1xufSk7XG5leHBvcnRzLmNyZWF0ZVJvdW5kTnVtYmVyID0gY3JlYXRlUm91bmROdW1iZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNpZ24gPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdzaWduJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ0JpZ051bWJlcicsICdGcmFjdGlvbicsICdjb21wbGV4J107XG52YXIgY3JlYXRlU2lnbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBfQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXIsXG4gICAgICBjb21wbGV4ID0gX3JlZi5jb21wbGV4LFxuICAgICAgX0ZyYWN0aW9uID0gX3JlZi5GcmFjdGlvbjtcblxuICAvKipcbiAgICogQ29tcHV0ZSB0aGUgc2lnbiBvZiBhIHZhbHVlLiBUaGUgc2lnbiBvZiBhIHZhbHVlIHggaXM6XG4gICAqXG4gICAqIC0gIDEgd2hlbiB4ID4gMFxuICAgKiAtIC0xIHdoZW4geCA8IDBcbiAgICogLSAgMCB3aGVuIHggPT0gMFxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguc2lnbih4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5zaWduKDMuNSkgICAgICAgICAgICAgICAvLyByZXR1cm5zIDFcbiAgICogICAgbWF0aC5zaWduKC00LjIpICAgICAgICAgICAgICAvLyByZXR1cm5zIC0xXG4gICAqICAgIG1hdGguc2lnbigwKSAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAwXG4gICAqXG4gICAqICAgIG1hdGguc2lnbihbMywgNSwgLTIsIDAsIDJdKSAgLy8gcmV0dXJucyBbMSwgMSwgLTEsIDAsIDFdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBhYnNcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXggfCBVbml0fSB4XG4gICAqICAgICAgICAgICAgVGhlIG51bWJlciBmb3Igd2hpY2ggdG8gZGV0ZXJtaW5lIHRoZSBzaWduXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4IHwgVW5pdH1lXG4gICAqICAgICAgICAgICAgVGhlIHNpZ24gb2YgYHhgXG4gICAqL1xuICB2YXIgc2lnbiA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IF9udW1iZXIuc2lnbk51bWJlcixcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmltID09PSAwID8gY29tcGxleCgoMCwgX251bWJlci5zaWduTnVtYmVyKSh4LnJlKSkgOiB4LnNpZ24oKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiBuZXcgX0JpZ051bWJlcih4LmNtcCgwKSk7XG4gICAgfSxcbiAgICBGcmFjdGlvbjogZnVuY3Rpb24gRnJhY3Rpb24oeCkge1xuICAgICAgcmV0dXJuIG5ldyBfRnJhY3Rpb24oeC5zLCAxKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIC8vIGRlZXAgbWFwIGNvbGxlY3Rpb24sIHNraXAgemVyb3Mgc2luY2Ugc2lnbigwKSA9IDBcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgc2lnbiwgdHJ1ZSk7XG4gICAgfSxcbiAgICBVbml0OiBmdW5jdGlvbiBVbml0KHgpIHtcbiAgICAgIHJldHVybiBzaWduKHgudmFsdWUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBzaWduO1xufSk7XG5leHBvcnRzLmNyZWF0ZVNpZ24gPSBjcmVhdGVTaWduOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTcXJ0ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBuYW1lID0gJ3NxcnQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnY29uZmlnJywgJ3R5cGVkJywgJ0NvbXBsZXgnXTtcbnZhciBjcmVhdGVTcXJ0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgQ29tcGxleCA9IF9yZWYuQ29tcGxleDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBzcXVhcmUgcm9vdCBvZiBhIHZhbHVlLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguc3FydCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5zcXJ0KDI1KSAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDVcbiAgICogICAgbWF0aC5zcXVhcmUoNSkgICAgICAgICAgICAgICAvLyByZXR1cm5zIDI1XG4gICAqICAgIG1hdGguc3FydCgtNCkgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDJpXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBzcXVhcmUsIG11bHRpcGx5LCBjdWJlLCBjYnJ0LCBzcXJ0bVxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeCB8IFVuaXR9IHhcbiAgICogICAgICAgICAgICBWYWx1ZSBmb3Igd2hpY2ggdG8gY2FsY3VsYXRlIHRoZSBzcXVhcmUgcm9vdC5cbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4IHwgVW5pdH1cbiAgICogICAgICAgICAgICBSZXR1cm5zIHRoZSBzcXVhcmUgcm9vdCBvZiBgeGBcbiAgICovXG4gIHZhciBzcXJ0ID0gdHlwZWQoJ3NxcnQnLCB7XG4gICAgbnVtYmVyOiBfc3FydE51bWJlcixcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LnNxcnQoKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIGlmICgheC5pc05lZ2F0aXZlKCkgfHwgY29uZmlnLnByZWRpY3RhYmxlKSB7XG4gICAgICAgIHJldHVybiB4LnNxcnQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG5lZ2F0aXZlIHZhbHVlIC0+IGRvd25ncmFkZSB0byBudW1iZXIgdG8gZG8gY29tcGxleCB2YWx1ZSBjb21wdXRhdGlvblxuICAgICAgICByZXR1cm4gX3NxcnROdW1iZXIoeC50b051bWJlcigpKTtcbiAgICAgIH1cbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIC8vIGRlZXAgbWFwIGNvbGxlY3Rpb24sIHNraXAgemVyb3Mgc2luY2Ugc3FydCgwKSA9IDBcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgc3FydCwgdHJ1ZSk7XG4gICAgfSxcbiAgICBVbml0OiBmdW5jdGlvbiBVbml0KHgpIHtcbiAgICAgIC8vIFNvbWVkYXkgd2lsbCB3b3JrIGZvciBjb21wbGV4IHVuaXRzIHdoZW4gdGhleSBhcmUgaW1wbGVtZW50ZWRcbiAgICAgIHJldHVybiB4LnBvdygwLjUpO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgc3FydCBmb3IgYSBudW1iZXJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHhcbiAgICogQHJldHVybnMge251bWJlciB8IENvbXBsZXh9IFJldHVybnMgdGhlIHNxdWFyZSByb290IG9mIHhcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgZnVuY3Rpb24gX3NxcnROdW1iZXIoeCkge1xuICAgIGlmIChpc05hTih4KSkge1xuICAgICAgcmV0dXJuIE5hTjtcbiAgICB9IGVsc2UgaWYgKHggPj0gMCB8fCBjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgIHJldHVybiBNYXRoLnNxcnQoeCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgQ29tcGxleCh4LCAwKS5zcXJ0KCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHNxcnQ7XG59KTtcbmV4cG9ydHMuY3JlYXRlU3FydCA9IGNyZWF0ZVNxcnQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNxdWFyZSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ3NxdWFyZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZVNxdWFyZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIHNxdWFyZSBvZiBhIHZhbHVlLCBgeCAqIHhgLlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguc3F1YXJlKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnNxdWFyZSgyKSAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgNFxuICAgKiAgICBtYXRoLnNxdWFyZSgzKSAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgOVxuICAgKiAgICBtYXRoLnBvdygzLCAyKSAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgOVxuICAgKiAgICBtYXRoLm11bHRpcGx5KDMsIDMpICAgICAgLy8gcmV0dXJucyBudW1iZXIgOVxuICAgKlxuICAgKiAgICBtYXRoLnNxdWFyZShbMSwgMiwgMywgNF0pICAvLyByZXR1cm5zIEFycmF5IFsxLCA0LCA5LCAxNl1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIG11bHRpcGx5LCBjdWJlLCBzcXJ0LCBwb3dcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXggfCBVbml0fSB4XG4gICAqICAgICAgICAgICAgTnVtYmVyIGZvciB3aGljaCB0byBjYWxjdWxhdGUgdGhlIHNxdWFyZVxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeCB8IFVuaXR9XG4gICAqICAgICAgICAgICAgU3F1YXJlZCB2YWx1ZVxuICAgKi9cbiAgdmFyIHNxdWFyZSA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IF9udW1iZXIuc3F1YXJlTnVtYmVyLFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHgubXVsKHgpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHgudGltZXMoeCk7XG4gICAgfSxcbiAgICBGcmFjdGlvbjogZnVuY3Rpb24gRnJhY3Rpb24oeCkge1xuICAgICAgcmV0dXJuIHgubXVsKHgpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSBzcXVhcmUoMCkgPSAwXG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIHNxdWFyZSwgdHJ1ZSk7XG4gICAgfSxcbiAgICBVbml0OiBmdW5jdGlvbiBVbml0KHgpIHtcbiAgICAgIHJldHVybiB4LnBvdygyKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gc3F1YXJlO1xufSk7XG5leHBvcnRzLmNyZWF0ZVNxdWFyZSA9IGNyZWF0ZVNxdWFyZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3VidHJhY3QgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX0RpbWVuc2lvbkVycm9yID0gcmVxdWlyZShcIi4uLy4uL2Vycm9yL0RpbWVuc2lvbkVycm9yXCIpO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wMVwiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAzXCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDVcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMFwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgX2FsZ29yaXRobTYgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBuYW1lID0gJ3N1YnRyYWN0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdlcXVhbFNjYWxhcicsICdhZGRTY2FsYXInLCAndW5hcnlNaW51cycsICdEZW5zZU1hdHJpeCddO1xudmFyIGNyZWF0ZVN1YnRyYWN0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLFxuICAgICAgYWRkU2NhbGFyID0gX3JlZi5hZGRTY2FsYXIsXG4gICAgICB1bmFyeU1pbnVzID0gX3JlZi51bmFyeU1pbnVzLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICAvLyBUT0RPOiBzcGxpdCBmdW5jdGlvbiBzdWJ0cmFjdCBpbiB0d286IHN1YnRyYWN0IGFuZCBzdWJ0cmFjdFNjYWxhclxuICB2YXIgYWxnb3JpdGhtMDEgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMSkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTAzID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTAzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMDUgPSAoMCwgX2FsZ29yaXRobTMuY3JlYXRlQWxnb3JpdGhtMDUpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTAgPSAoMCwgX2FsZ29yaXRobTQuY3JlYXRlQWxnb3JpdGhtMTApKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4XG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTMgPSAoMCwgX2FsZ29yaXRobTUuY3JlYXRlQWxnb3JpdGhtMTMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtNi5jcmVhdGVBbGdvcml0aG0xNCkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgLyoqXG4gICAqIFN1YnRyYWN0IHR3byB2YWx1ZXMsIGB4IC0geWAuXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5zdWJ0cmFjdCh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5zdWJ0cmFjdCg1LjMsIDIpICAgICAgICAvLyByZXR1cm5zIG51bWJlciAzLjNcbiAgICpcbiAgICogICAgY29uc3QgYSA9IG1hdGguY29tcGxleCgyLCAzKVxuICAgKiAgICBjb25zdCBiID0gbWF0aC5jb21wbGV4KDQsIDEpXG4gICAqICAgIG1hdGguc3VidHJhY3QoYSwgYikgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IC0yICsgMmlcbiAgICpcbiAgICogICAgbWF0aC5zdWJ0cmFjdChbNSwgNywgNF0sIDQpICAvLyByZXR1cm5zIEFycmF5IFsxLCAzLCAwXVxuICAgKlxuICAgKiAgICBjb25zdCBjID0gbWF0aC51bml0KCcyLjEga20nKVxuICAgKiAgICBjb25zdCBkID0gbWF0aC51bml0KCc1MDBtJylcbiAgICogICAgbWF0aC5zdWJ0cmFjdChjLCBkKSAgICAgICAgICAvLyByZXR1cm5zIFVuaXQgMS42IGttXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBhZGRcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4XG4gICAqICAgICAgICAgICAgSW5pdGlhbCB2YWx1ZVxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHlcbiAgICogICAgICAgICAgICBWYWx1ZSB0byBzdWJ0cmFjdCBmcm9tIGB4YFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9XG4gICAqICAgICAgICAgICAgU3VidHJhY3Rpb24gb2YgYHhgIGFuZCBgeWBcbiAgICovXG5cbiAgdmFyIHN1YnRyYWN0ID0gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geCAtIHk7XG4gICAgfSxcbiAgICAnQ29tcGxleCwgQ29tcGxleCc6IGZ1bmN0aW9uIENvbXBsZXhDb21wbGV4KHgsIHkpIHtcbiAgICAgIHJldHVybiB4LnN1Yih5KTtcbiAgICB9LFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IGZ1bmN0aW9uIEJpZ051bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geC5taW51cyh5KTtcbiAgICB9LFxuICAgICdGcmFjdGlvbiwgRnJhY3Rpb24nOiBmdW5jdGlvbiBGcmFjdGlvbkZyYWN0aW9uKHgsIHkpIHtcbiAgICAgIHJldHVybiB4LnN1Yih5KTtcbiAgICB9LFxuICAgICdVbml0LCBVbml0JzogZnVuY3Rpb24gVW5pdFVuaXQoeCwgeSkge1xuICAgICAgaWYgKHgudmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJhbWV0ZXIgeCBjb250YWlucyBhIHVuaXQgd2l0aCB1bmRlZmluZWQgdmFsdWUnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHkudmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJhbWV0ZXIgeSBjb250YWlucyBhIHVuaXQgd2l0aCB1bmRlZmluZWQgdmFsdWUnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF4LmVxdWFsQmFzZSh5KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuaXRzIGRvIG5vdCBtYXRjaCcpO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVzID0geC5jbG9uZSgpO1xuICAgICAgcmVzLnZhbHVlID0gc3VidHJhY3QocmVzLnZhbHVlLCB5LnZhbHVlKTtcbiAgICAgIHJlcy5maXhQcmVmaXggPSBmYWxzZTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgY2hlY2tFcXVhbERpbWVuc2lvbnMoeCwgeSk7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDUoeCwgeSwgc3VidHJhY3QpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICBjaGVja0VxdWFsRGltZW5zaW9ucyh4LCB5KTtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh5LCB4LCBzdWJ0cmFjdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIGNoZWNrRXF1YWxEaW1lbnNpb25zKHgsIHkpO1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAxKHgsIHksIHN1YnRyYWN0LCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICBjaGVja0VxdWFsRGltZW5zaW9ucyh4LCB5KTtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBzdWJ0cmFjdCk7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gc3VidHJhY3QobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHN1YnRyYWN0KG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBzdWJ0cmFjdCh4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMCh4LCB1bmFyeU1pbnVzKHkpLCBhZGRTY2FsYXIpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBEZW5zZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgc3VidHJhY3QpO1xuICAgIH0sXG4gICAgJ2FueSwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gYW55U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMCh5LCB4LCBzdWJ0cmFjdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnYW55LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIGFueURlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCBzdWJ0cmFjdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIGFueSc6IGZ1bmN0aW9uIEFycmF5QW55KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeCksIHksIHN1YnRyYWN0LCBmYWxzZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ2FueSwgQXJyYXknOiBmdW5jdGlvbiBhbnlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCBzdWJ0cmFjdCwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBzdWJ0cmFjdDtcbn0pO1xuLyoqXG4gKiBDaGVjayB3aGV0aGVyIG1hdHJpeCB4IGFuZCB5IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGRpbWVuc2lvbnMuXG4gKiBUaHJvd3MgYSBEaW1lbnNpb25FcnJvciB3aGVuIGRpbWVuc2lvbnMgYXJlIG5vdCBlcXVhbFxuICogQHBhcmFtIHtNYXRyaXh9IHhcbiAqIEBwYXJhbSB7TWF0cml4fSB5XG4gKi9cblxuZXhwb3J0cy5jcmVhdGVTdWJ0cmFjdCA9IGNyZWF0ZVN1YnRyYWN0O1xuXG5mdW5jdGlvbiBjaGVja0VxdWFsRGltZW5zaW9ucyh4LCB5KSB7XG4gIHZhciB4c2l6ZSA9IHguc2l6ZSgpO1xuICB2YXIgeXNpemUgPSB5LnNpemUoKTtcblxuICBpZiAoeHNpemUubGVuZ3RoICE9PSB5c2l6ZS5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKHhzaXplLmxlbmd0aCwgeXNpemUubGVuZ3RoKTtcbiAgfVxufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVVbmFyeU1pbnVzID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAndW5hcnlNaW51cyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZVVuYXJ5TWludXMgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBJbnZlcnNlIHRoZSBzaWduIG9mIGEgdmFsdWUsIGFwcGx5IGEgdW5hcnkgbWludXMgb3BlcmF0aW9uLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLiBCb29sZWFuIHZhbHVlcyBhbmRcbiAgICogc3RyaW5ncyB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIG51bWJlci4gRm9yIGNvbXBsZXggbnVtYmVycywgYm90aCByZWFsIGFuZFxuICAgKiBjb21wbGV4IHZhbHVlIGFyZSBpbnZlcnRlZC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnVuYXJ5TWludXMoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgudW5hcnlNaW51cygzLjUpICAgICAgLy8gcmV0dXJucyAtMy41XG4gICAqICAgIG1hdGgudW5hcnlNaW51cygtNC4yKSAgICAgLy8gcmV0dXJucyA0LjJcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGFkZCwgc3VidHJhY3QsIHVuYXJ5UGx1c1xuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggTnVtYmVyIHRvIGJlIGludmVydGVkLlxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IFJldHVybnMgdGhlIHZhbHVlIHdpdGggaW52ZXJ0ZWQgc2lnbi5cbiAgICovXG4gIHZhciB1bmFyeU1pbnVzID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogX251bWJlci51bmFyeU1pbnVzTnVtYmVyLFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHgubmVnKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4geC5uZWcoKTtcbiAgICB9LFxuICAgIEZyYWN0aW9uOiBmdW5jdGlvbiBGcmFjdGlvbih4KSB7XG4gICAgICByZXR1cm4geC5uZWcoKTtcbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgdmFyIHJlcyA9IHguY2xvbmUoKTtcbiAgICAgIHJlcy52YWx1ZSA9IHVuYXJ5TWludXMoeC52YWx1ZSk7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSB1bmFyeU1pbnVzKDApID0gMFxuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCB1bmFyeU1pbnVzLCB0cnVlKTtcbiAgICB9IC8vIFRPRE86IGFkZCBzdXBwb3J0IGZvciBzdHJpbmdcblxuICB9KTtcbiAgcmV0dXJuIHVuYXJ5TWludXM7XG59KTtcbmV4cG9ydHMuY3JlYXRlVW5hcnlNaW51cyA9IGNyZWF0ZVVuYXJ5TWludXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVVuYXJ5UGx1cyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ3VuYXJ5UGx1cyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnQmlnTnVtYmVyJ107XG52YXIgY3JlYXRlVW5hcnlQbHVzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXI7XG5cbiAgLyoqXG4gICAqIFVuYXJ5IHBsdXMgb3BlcmF0aW9uLlxuICAgKiBCb29sZWFuIHZhbHVlcyBhbmQgc3RyaW5ncyB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIG51bWJlciwgbnVtZXJpYyB2YWx1ZXMgd2lsbCBiZSByZXR1cm5lZCBhcyBpcy5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnVuYXJ5UGx1cyh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC51bmFyeVBsdXMoMy41KSAgICAgIC8vIHJldHVybnMgMy41XG4gICAqICAgIG1hdGgudW5hcnlQbHVzKDEpICAgICAvLyByZXR1cm5zIDFcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIHVuYXJ5TWludXMsIGFkZCwgc3VidHJhY3RcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBzdHJpbmcgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4XG4gICAqICAgICAgICAgICAgSW5wdXQgdmFsdWVcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fVxuICAgKiAgICAgICAgICAgIFJldHVybnMgdGhlIGlucHV0IHZhbHVlIHdoZW4gbnVtZXJpYywgY29udmVydHMgdG8gYSBudW1iZXIgd2hlbiBpbnB1dCBpcyBub24tbnVtZXJpYy5cbiAgICovXG4gIHZhciB1bmFyeVBsdXMgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLnVuYXJ5UGx1c051bWJlcixcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4OyAvLyBjb21wbGV4IG51bWJlcnMgYXJlIGltbXV0YWJsZVxuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHg7IC8vIGJpZ251bWJlcnMgYXJlIGltbXV0YWJsZVxuICAgIH0sXG4gICAgRnJhY3Rpb246IGZ1bmN0aW9uIEZyYWN0aW9uKHgpIHtcbiAgICAgIHJldHVybiB4OyAvLyBmcmFjdGlvbnMgYXJlIGltbXV0YWJsZVxuICAgIH0sXG4gICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7XG4gICAgICByZXR1cm4geC5jbG9uZSgpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSB1bmFyeVBsdXMoMCkgPSAwXG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIHVuYXJ5UGx1cywgdHJ1ZSk7XG4gICAgfSxcbiAgICAnYm9vbGVhbiB8IHN0cmluZyc6IGZ1bmN0aW9uIGJvb2xlYW5TdHJpbmcoeCkge1xuICAgICAgLy8gY29udmVydCB0byBhIG51bWJlciBvciBiaWdudW1iZXJcbiAgICAgIHJldHVybiBjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJyA/IG5ldyBCaWdOdW1iZXIoK3gpIDogK3g7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHVuYXJ5UGx1cztcbn0pO1xuZXhwb3J0cy5jcmVhdGVVbmFyeVBsdXMgPSBjcmVhdGVVbmFyeVBsdXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVhnY2QgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ3hnY2QnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ21hdHJpeCcsICdCaWdOdW1iZXInXTtcbnZhciBjcmVhdGVYZ2NkID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBCaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcjtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBleHRlbmRlZCBncmVhdGVzdCBjb21tb24gZGl2aXNvciBmb3IgdHdvIHZhbHVlcy5cbiAgICogU2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0V4dGVuZGVkX0V1Y2xpZGVhbl9hbGdvcml0aG0uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC54Z2NkKGEsIGIpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnhnY2QoOCwgMTIpICAgICAgICAgICAgIC8vIHJldHVybnMgWzQsIC0xLCAxXVxuICAgKiAgICBtYXRoLmdjZCg4LCAxMikgICAgICAgICAgICAgIC8vIHJldHVybnMgNFxuICAgKiAgICBtYXRoLnhnY2QoMzYxNjMsIDIxMTk5KSAgICAgIC8vIHJldHVybnMgWzEyNDcsIC03LCAxMl1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGdjZCwgbGNtXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyfSBhICBBbiBpbnRlZ2VyIG51bWJlclxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlcn0gYiAgQW4gaW50ZWdlciBudW1iZXJcbiAgICogQHJldHVybiB7QXJyYXl9ICAgICAgICAgICAgICBSZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgMyBpbnRlZ2VycyBgW2RpdiwgbSwgbl1gXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgYGRpdiA9IGdjZChhLCBiKWAgYW5kIGBhKm0gKyBiKm4gPSBkaXZgXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcihhLCBiKSB7XG4gICAgICB2YXIgcmVzID0gKDAsIF9udW1iZXIueGdjZE51bWJlcikoYSwgYik7XG4gICAgICByZXR1cm4gY29uZmlnLm1hdHJpeCA9PT0gJ0FycmF5JyA/IHJlcyA6IG1hdHJpeChyZXMpO1xuICAgIH0sXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogX3hnY2RCaWdOdW1iZXIgLy8gVE9ETzogaW1wbGVtZW50IHN1cHBvcnQgZm9yIEZyYWN0aW9uXG5cbiAgfSk7XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgeGdjZCBmb3IgdHdvIEJpZ051bWJlcnNcbiAgICogQHBhcmFtIHtCaWdOdW1iZXJ9IGFcbiAgICogQHBhcmFtIHtCaWdOdW1iZXJ9IGJcbiAgICogQHJldHVybiB7QmlnTnVtYmVyW119IHJlc3VsdFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfeGdjZEJpZ051bWJlcihhLCBiKSB7XG4gICAgLy8gc291cmNlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FeHRlbmRlZF9FdWNsaWRlYW5fYWxnb3JpdGhtXG4gICAgdmFyIC8vIHVzZWQgdG8gc3dhcCB0d28gdmFyaWFibGVzXG4gICAgdDtcbiAgICB2YXIgLy8gcXVvdGllbnRcbiAgICBxO1xuICAgIHZhciAvLyByZW1haW5kZXJcbiAgICByO1xuICAgIHZhciB6ZXJvID0gbmV3IEJpZ051bWJlcigwKTtcbiAgICB2YXIgb25lID0gbmV3IEJpZ051bWJlcigxKTtcbiAgICB2YXIgeCA9IHplcm87XG4gICAgdmFyIGxhc3R4ID0gb25lO1xuICAgIHZhciB5ID0gb25lO1xuICAgIHZhciBsYXN0eSA9IHplcm87XG5cbiAgICBpZiAoIWEuaXNJbnQoKSB8fCAhYi5pc0ludCgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlcnMgaW4gZnVuY3Rpb24geGdjZCBtdXN0IGJlIGludGVnZXIgbnVtYmVycycpO1xuICAgIH1cblxuICAgIHdoaWxlICghYi5pc1plcm8oKSkge1xuICAgICAgcSA9IGEuZGl2KGIpLmZsb29yKCk7XG4gICAgICByID0gYS5tb2QoYik7XG4gICAgICB0ID0geDtcbiAgICAgIHggPSBsYXN0eC5taW51cyhxLnRpbWVzKHgpKTtcbiAgICAgIGxhc3R4ID0gdDtcbiAgICAgIHQgPSB5O1xuICAgICAgeSA9IGxhc3R5Lm1pbnVzKHEudGltZXMoeSkpO1xuICAgICAgbGFzdHkgPSB0O1xuICAgICAgYSA9IGI7XG4gICAgICBiID0gcjtcbiAgICB9XG5cbiAgICB2YXIgcmVzO1xuXG4gICAgaWYgKGEubHQoemVybykpIHtcbiAgICAgIHJlcyA9IFthLm5lZygpLCBsYXN0eC5uZWcoKSwgbGFzdHkubmVnKCldO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMgPSBbYSwgIWEuaXNaZXJvKCkgPyBsYXN0eCA6IDAsIGxhc3R5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29uZmlnLm1hdHJpeCA9PT0gJ0FycmF5JyA/IHJlcyA6IG1hdHJpeChyZXMpO1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlWGdjZCA9IGNyZWF0ZVhnY2Q7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUJpdEFuZCA9IHZvaWQgMDtcblxudmFyIF9iaXR3aXNlID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2JpZ251bWJlci9iaXR3aXNlXCIpO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wMlwiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTExXCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA2XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdiaXRBbmQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2VxdWFsU2NhbGFyJ107XG52YXIgY3JlYXRlQml0QW5kID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyO1xuICB2YXIgYWxnb3JpdGhtMDIgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNiA9ICgwLCBfYWxnb3JpdGhtNS5jcmVhdGVBbGdvcml0aG0wNikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMSA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0xMSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogQml0d2lzZSBBTkQgdHdvIHZhbHVlcywgYHggJiB5YC5cbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmJpdEFuZCh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5iaXRBbmQoNTMsIDEzMSkgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAxXG4gICAqXG4gICAqICAgIG1hdGguYml0QW5kKFsxLCAxMiwgMzFdLCA0MikgICAgICAgLy8gcmV0dXJucyBBcnJheSBbMCwgOCwgMTBdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiaXROb3QsIGJpdE9yLCBiaXRYb3IsIGxlZnRTaGlmdCwgcmlnaHRBcml0aFNoaWZ0LCByaWdodExvZ1NoaWZ0XG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSB4IEZpcnN0IHZhbHVlIHRvIGFuZFxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0geSBTZWNvbmQgdmFsdWUgdG8gYW5kXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSBBTkQgb2YgYHhgIGFuZCBgeWBcbiAgICovXG5cbiAgdmFyIGJpdEFuZCA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfbnVtYmVyLmJpdEFuZE51bWJlcixcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBfYml0d2lzZS5iaXRBbmRCaWdOdW1iZXIsXG4gICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wNih4LCB5LCBiaXRBbmQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHksIHgsIGJpdEFuZCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMih4LCB5LCBiaXRBbmQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBiaXRBbmQpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGJpdEFuZChtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYml0QW5kKG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBiaXRBbmQoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeCwgeSwgYml0QW5kLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIERlbnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBiaXRBbmQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeSwgeCwgYml0QW5kLCB0cnVlKTtcbiAgICB9LFxuICAgICdhbnksIERlbnNlTWF0cml4JzogZnVuY3Rpb24gYW55RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIGJpdEFuZCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIGFueSc6IGZ1bmN0aW9uIEFycmF5QW55KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeCksIHksIGJpdEFuZCwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgYml0QW5kLCB0cnVlKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGJpdEFuZDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVCaXRBbmQgPSBjcmVhdGVCaXRBbmQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUJpdE5vdCA9IHZvaWQgMDtcblxudmFyIF9iaXR3aXNlID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2JpZ251bWJlci9iaXR3aXNlXCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnYml0Tm90JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlQml0Tm90ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogQml0d2lzZSBOT1QgdmFsdWUsIGB+eGAuXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqIEZvciB1bml0cywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBvbiB0aGUgYmVzdCBwcmVmaXggYmFzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmJpdE5vdCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5iaXROb3QoMSkgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAtMlxuICAgKlxuICAgKiAgICBtYXRoLmJpdE5vdChbMiwgLTMsIDRdKSAgICAgIC8vIHJldHVybnMgQXJyYXkgWy0zLCAyLCA1XVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYml0QW5kLCBiaXRPciwgYml0WG9yLCBsZWZ0U2hpZnQsIHJpZ2h0QXJpdGhTaGlmdCwgcmlnaHRMb2dTaGlmdFxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0geCBWYWx1ZSB0byBub3RcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IE5PVCBvZiBgeGBcbiAgICovXG4gIHZhciBiaXROb3QgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmJpdE5vdE51bWJlcixcbiAgICBCaWdOdW1iZXI6IF9iaXR3aXNlLmJpdE5vdEJpZ051bWJlcixcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGJpdE5vdCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGJpdE5vdDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVCaXROb3QgPSBjcmVhdGVCaXROb3Q7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUJpdE9yID0gdm9pZCAwO1xuXG52YXIgX2JpdHdpc2UgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYmlnbnVtYmVyL2JpdHdpc2VcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTBcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wNFwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAxXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2JpdE9yJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdlcXVhbFNjYWxhcicsICdEZW5zZU1hdHJpeCddO1xudmFyIGNyZWF0ZUJpdE9yID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMDEgPSAoMCwgX2FsZ29yaXRobTUuY3JlYXRlQWxnb3JpdGhtMDEpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNCA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0wNCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMCA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBCaXR3aXNlIE9SIHR3byB2YWx1ZXMsIGB4IHwgeWAuXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqIEZvciB1bml0cywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBvbiB0aGUgbG93ZXN0IHByaW50IGJhc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5iaXRPcih4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5iaXRPcigxLCAyKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDNcbiAgICpcbiAgICogICAgbWF0aC5iaXRPcihbMSwgMiwgM10sIDQpICAgICAgIC8vIHJldHVybnMgQXJyYXkgWzUsIDYsIDddXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiaXRBbmQsIGJpdE5vdCwgYml0WG9yLCBsZWZ0U2hpZnQsIHJpZ2h0QXJpdGhTaGlmdCwgcmlnaHRMb2dTaGlmdFxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0geCBGaXJzdCB2YWx1ZSB0byBvclxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0geSBTZWNvbmQgdmFsdWUgdG8gb3JcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IE9SIG9mIGB4YCBhbmQgYHlgXG4gICAqL1xuXG4gIHZhciBiaXRPciA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfbnVtYmVyLmJpdE9yTnVtYmVyLFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IF9iaXR3aXNlLmJpdE9yQmlnTnVtYmVyLFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDQoeCwgeSwgYml0T3IpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDEoeSwgeCwgYml0T3IsIHRydWUpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDEoeCwgeSwgYml0T3IsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBiaXRPcik7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYml0T3IobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGJpdE9yKG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBiaXRPcih4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMCh4LCB5LCBiaXRPciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBEZW5zZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgYml0T3IsIGZhbHNlKTtcbiAgICB9LFxuICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTAoeSwgeCwgYml0T3IsIHRydWUpO1xuICAgIH0sXG4gICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgYml0T3IsIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBhbnknOiBmdW5jdGlvbiBBcnJheUFueSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCBiaXRPciwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgYml0T3IsIHRydWUpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYml0T3I7XG59KTtcbmV4cG9ydHMuY3JlYXRlQml0T3IgPSBjcmVhdGVCaXRPcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQml0WG9yID0gdm9pZCAwO1xuXG52YXIgX2JpdHdpc2UgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYmlnbnVtYmVyL2JpdHdpc2VcIik7XG5cbnZhciBfYWxnb3JpdGhtID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAzXCIpO1xuXG52YXIgX2FsZ29yaXRobTIgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDdcIik7XG5cbnZhciBfYWxnb3JpdGhtMyA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMlwiKTtcblxudmFyIF9hbGdvcml0aG00ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgX2FsZ29yaXRobTUgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2JpdFhvcic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVCaXRYb3IgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXg7XG4gIHZhciBhbGdvcml0aG0wMyA9ICgwLCBfYWxnb3JpdGhtLmNyZWF0ZUFsZ29yaXRobTAzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMDcgPSAoMCwgX2FsZ29yaXRobTIuY3JlYXRlQWxnb3JpdGhtMDcpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4XG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTIgPSAoMCwgX2FsZ29yaXRobTMuY3JlYXRlQWxnb3JpdGhtMTIpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4XG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTMgPSAoMCwgX2FsZ29yaXRobTQuY3JlYXRlQWxnb3JpdGhtMTMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtNS5jcmVhdGVBbGdvcml0aG0xNCkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgLyoqXG4gICAqIEJpdHdpc2UgWE9SIHR3byB2YWx1ZXMsIGB4IF4geWAuXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5iaXRYb3IoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguYml0WG9yKDEsIDIpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgM1xuICAgKlxuICAgKiAgICBtYXRoLmJpdFhvcihbMiwgMywgNF0sIDQpICAgICAgIC8vIHJldHVybnMgQXJyYXkgWzYsIDcsIDBdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiaXRBbmQsIGJpdE5vdCwgYml0T3IsIGxlZnRTaGlmdCwgcmlnaHRBcml0aFNoaWZ0LCByaWdodExvZ1NoaWZ0XG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSB4IEZpcnN0IHZhbHVlIHRvIHhvclxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0geSBTZWNvbmQgdmFsdWUgdG8geG9yXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSBYT1Igb2YgYHhgIGFuZCBgeWBcbiAgICovXG5cbiAgdmFyIGJpdFhvciA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfbnVtYmVyLmJpdFhvck51bWJlcixcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBfYml0d2lzZS5iaXRYb3IsXG4gICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wNyh4LCB5LCBiaXRYb3IpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeSwgeCwgYml0WG9yLCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHgsIHksIGJpdFhvciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIGJpdFhvcik7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYml0WG9yKG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBiaXRYb3IobWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGJpdFhvcih4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih4LCB5LCBiaXRYb3IsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIGJpdFhvciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ2FueSwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gYW55U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih5LCB4LCBiaXRYb3IsIHRydWUpO1xuICAgIH0sXG4gICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgYml0WG9yLCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgYml0WG9yLCBmYWxzZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ2FueSwgQXJyYXknOiBmdW5jdGlvbiBhbnlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCBiaXRYb3IsIHRydWUpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYml0WG9yO1xufSk7XG5leHBvcnRzLmNyZWF0ZUJpdFhvciA9IGNyZWF0ZUJpdFhvcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTGVmdFNoaWZ0ID0gdm9pZCAwO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wMlwiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTExXCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAxXCIpO1xuXG52YXIgX2FsZ29yaXRobTYgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTBcIik7XG5cbnZhciBfYWxnb3JpdGhtNyA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wOFwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIF9iaXR3aXNlID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2JpZ251bWJlci9iaXR3aXNlXCIpO1xuXG52YXIgbmFtZSA9ICdsZWZ0U2hpZnQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2VxdWFsU2NhbGFyJywgJ3plcm9zJywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlTGVmdFNoaWZ0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLFxuICAgICAgemVyb3MgPSBfcmVmLnplcm9zLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMDEgPSAoMCwgX2FsZ29yaXRobTUuY3JlYXRlQWxnb3JpdGhtMDEpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wMiA9ICgwLCBfYWxnb3JpdGhtLmNyZWF0ZUFsZ29yaXRobTAyKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTA4ID0gKDAsIF9hbGdvcml0aG03LmNyZWF0ZUFsZ29yaXRobTA4KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEwID0gKDAsIF9hbGdvcml0aG02LmNyZWF0ZUFsZ29yaXRobTEwKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTExID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTExKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEzID0gKDAsIF9hbGdvcml0aG0zLmNyZWF0ZUFsZ29yaXRobTEzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTQuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBCaXR3aXNlIGxlZnQgbG9naWNhbCBzaGlmdCBvZiBhIHZhbHVlIHggYnkgeSBudW1iZXIgb2YgYml0cywgYHggPDwgeWAuXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqIEZvciB1bml0cywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBvbiB0aGUgYmVzdCBwcmVmaXggYmFzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmxlZnRTaGlmdCh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5sZWZ0U2hpZnQoMSwgMikgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA0XG4gICAqXG4gICAqICAgIG1hdGgubGVmdFNoaWZ0KFsxLCAyLCAzXSwgNCkgICAgICAgLy8gcmV0dXJucyBBcnJheSBbMTYsIDMyLCA2NF1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGxlZnRTaGlmdCwgYml0Tm90LCBiaXRPciwgYml0WG9yLCByaWdodEFyaXRoU2hpZnQsIHJpZ2h0TG9nU2hpZnRcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IHggVmFsdWUgdG8gYmUgc2hpZnRlZFxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXJ9IHkgQW1vdW50IG9mIHNoaWZ0c1xuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0gYHhgIHNoaWZ0ZWQgbGVmdCBgeWAgdGltZXNcbiAgICovXG5cbiAgdmFyIGxlZnRTaGlmdCA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfbnVtYmVyLmxlZnRTaGlmdE51bWJlcixcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBfYml0d2lzZS5sZWZ0U2hpZnRCaWdOdW1iZXIsXG4gICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wOCh4LCB5LCBsZWZ0U2hpZnQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHksIHgsIGxlZnRTaGlmdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMSh4LCB5LCBsZWZ0U2hpZnQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBsZWZ0U2hpZnQpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGxlZnRTaGlmdChtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gbGVmdFNoaWZ0KG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBsZWZ0U2hpZnQoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeE51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICAvLyBjaGVjayBzY2FsYXJcbiAgICAgIGlmIChlcXVhbFNjYWxhcih5LCAwKSkge1xuICAgICAgICByZXR1cm4geC5jbG9uZSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeCwgeSwgbGVmdFNoaWZ0LCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIERlbnNlTWF0cml4TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhclxuICAgICAgaWYgKGVxdWFsU2NhbGFyKHksIDApKSB7XG4gICAgICAgIHJldHVybiB4LmNsb25lKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBsZWZ0U2hpZnQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlclNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyBjaGVjayBzY2FsYXJcbiAgICAgIGlmIChlcXVhbFNjYWxhcih4LCAwKSkge1xuICAgICAgICByZXR1cm4gemVyb3MoeS5zaXplKCksIHkuc3RvcmFnZSgpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTEwKHksIHgsIGxlZnRTaGlmdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckRlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhclxuICAgICAgaWYgKGVxdWFsU2NhbGFyKHgsIDApKSB7XG4gICAgICAgIHJldHVybiB6ZXJvcyh5LnNpemUoKSwgeS5zdG9yYWdlKCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgbGVmdFNoaWZ0LCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQXJyYXlOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGxlZnRTaGlmdChtYXRyaXgoeCksIHkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIEFycmF5JzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyQXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGxlZnRTaGlmdCh4LCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbGVmdFNoaWZ0O1xufSk7XG5leHBvcnRzLmNyZWF0ZUxlZnRTaGlmdCA9IGNyZWF0ZUxlZnRTaGlmdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUmlnaHRBcml0aFNoaWZ0ID0gdm9pZCAwO1xuXG52YXIgX2JpdHdpc2UgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYmlnbnVtYmVyL2JpdHdpc2VcIik7XG5cbnZhciBfYWxnb3JpdGhtID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAyXCIpO1xuXG52YXIgX2FsZ29yaXRobTIgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTFcIik7XG5cbnZhciBfYWxnb3JpdGhtMyA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xM1wiKTtcblxudmFyIF9hbGdvcml0aG00ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgX2FsZ29yaXRobTUgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDFcIik7XG5cbnZhciBfYWxnb3JpdGhtNiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMFwiKTtcblxudmFyIF9hbGdvcml0aG03ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA4XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdyaWdodEFyaXRoU2hpZnQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2VxdWFsU2NhbGFyJywgJ3plcm9zJywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlUmlnaHRBcml0aFNoaWZ0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLFxuICAgICAgemVyb3MgPSBfcmVmLnplcm9zLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMDEgPSAoMCwgX2FsZ29yaXRobTUuY3JlYXRlQWxnb3JpdGhtMDEpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wMiA9ICgwLCBfYWxnb3JpdGhtLmNyZWF0ZUFsZ29yaXRobTAyKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTA4ID0gKDAsIF9hbGdvcml0aG03LmNyZWF0ZUFsZ29yaXRobTA4KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEwID0gKDAsIF9hbGdvcml0aG02LmNyZWF0ZUFsZ29yaXRobTEwKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTExID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTExKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEzID0gKDAsIF9hbGdvcml0aG0zLmNyZWF0ZUFsZ29yaXRobTEzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTQuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBCaXR3aXNlIHJpZ2h0IGFyaXRobWV0aWMgc2hpZnQgb2YgYSB2YWx1ZSB4IGJ5IHkgbnVtYmVyIG9mIGJpdHMsIGB4ID4+IHlgLlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKiBGb3IgdW5pdHMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgb24gdGhlIGJlc3QgcHJlZml4IGJhc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5yaWdodEFyaXRoU2hpZnQoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgucmlnaHRBcml0aFNoaWZ0KDQsIDIpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMVxuICAgKlxuICAgKiAgICBtYXRoLnJpZ2h0QXJpdGhTaGlmdChbMTYsIC0zMiwgNjRdLCA0KSAgIC8vIHJldHVybnMgQXJyYXkgWzEsIC0yLCAzXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYml0QW5kLCBiaXROb3QsIGJpdE9yLCBiaXRYb3IsIHJpZ2h0QXJpdGhTaGlmdCwgcmlnaHRMb2dTaGlmdFxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0geCBWYWx1ZSB0byBiZSBzaGlmdGVkXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlcn0geSBBbW91bnQgb2Ygc2hpZnRzXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSBgeGAgc2lnbi1maWxsZWQgc2hpZnRlZCByaWdodCBgeWAgdGltZXNcbiAgICovXG5cbiAgdmFyIHJpZ2h0QXJpdGhTaGlmdCA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfbnVtYmVyLnJpZ2h0QXJpdGhTaGlmdE51bWJlcixcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBfYml0d2lzZS5yaWdodEFyaXRoU2hpZnRCaWdOdW1iZXIsXG4gICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wOCh4LCB5LCByaWdodEFyaXRoU2hpZnQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHksIHgsIHJpZ2h0QXJpdGhTaGlmdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMSh4LCB5LCByaWdodEFyaXRoU2hpZnQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCByaWdodEFyaXRoU2hpZnQpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHJpZ2h0QXJpdGhTaGlmdChtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gcmlnaHRBcml0aFNoaWZ0KG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiByaWdodEFyaXRoU2hpZnQoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeE51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICAvLyBjaGVjayBzY2FsYXJcbiAgICAgIGlmIChlcXVhbFNjYWxhcih5LCAwKSkge1xuICAgICAgICByZXR1cm4geC5jbG9uZSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeCwgeSwgcmlnaHRBcml0aFNoaWZ0LCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIERlbnNlTWF0cml4TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhclxuICAgICAgaWYgKGVxdWFsU2NhbGFyKHksIDApKSB7XG4gICAgICAgIHJldHVybiB4LmNsb25lKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCByaWdodEFyaXRoU2hpZnQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlclNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyBjaGVjayBzY2FsYXJcbiAgICAgIGlmIChlcXVhbFNjYWxhcih4LCAwKSkge1xuICAgICAgICByZXR1cm4gemVyb3MoeS5zaXplKCksIHkuc3RvcmFnZSgpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTEwKHksIHgsIHJpZ2h0QXJpdGhTaGlmdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckRlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhclxuICAgICAgaWYgKGVxdWFsU2NhbGFyKHgsIDApKSB7XG4gICAgICAgIHJldHVybiB6ZXJvcyh5LnNpemUoKSwgeS5zdG9yYWdlKCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgcmlnaHRBcml0aFNoaWZ0LCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQXJyYXlOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHJpZ2h0QXJpdGhTaGlmdChtYXRyaXgoeCksIHkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIEFycmF5JzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyQXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHJpZ2h0QXJpdGhTaGlmdCh4LCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmlnaHRBcml0aFNoaWZ0O1xufSk7XG5leHBvcnRzLmNyZWF0ZVJpZ2h0QXJpdGhTaGlmdCA9IGNyZWF0ZVJpZ2h0QXJpdGhTaGlmdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUmlnaHRMb2dTaGlmdCA9IHZvaWQgMDtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDJcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMVwiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgX2FsZ29yaXRobTQgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBfYWxnb3JpdGhtNSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wMVwiKTtcblxudmFyIF9hbGdvcml0aG02ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEwXCIpO1xuXG52YXIgX2FsZ29yaXRobTcgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDhcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ3JpZ2h0TG9nU2hpZnQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2VxdWFsU2NhbGFyJywgJ3plcm9zJywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlUmlnaHRMb2dTaGlmdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIHplcm9zID0gX3JlZi56ZXJvcyxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTAxID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTAxKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMDIgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wOCA9ICgwLCBfYWxnb3JpdGhtNy5jcmVhdGVBbGdvcml0aG0wOCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMCA9ICgwLCBfYWxnb3JpdGhtNi5jcmVhdGVBbGdvcml0aG0xMCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMSA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0xMSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogQml0d2lzZSByaWdodCBsb2dpY2FsIHNoaWZ0IG9mIHZhbHVlIHggYnkgeSBudW1iZXIgb2YgYml0cywgYHggPj4+IHlgLlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKiBGb3IgdW5pdHMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgb24gdGhlIGJlc3QgcHJlZml4IGJhc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5yaWdodExvZ1NoaWZ0KHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnJpZ2h0TG9nU2hpZnQoNCwgMikgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAxXG4gICAqXG4gICAqICAgIG1hdGgucmlnaHRMb2dTaGlmdChbMTYsIC0zMiwgNjRdLCA0KSAgIC8vIHJldHVybnMgQXJyYXkgWzEsIDIsIDNdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiaXRBbmQsIGJpdE5vdCwgYml0T3IsIGJpdFhvciwgbGVmdFNoaWZ0LCByaWdodExvZ1NoaWZ0XG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEFycmF5IHwgTWF0cml4fSB4IFZhbHVlIHRvIGJlIHNoaWZ0ZWRcbiAgICogQHBhcmFtICB7bnVtYmVyfSB5IEFtb3VudCBvZiBzaGlmdHNcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IGB4YCB6ZXJvLWZpbGxlZCBzaGlmdGVkIHJpZ2h0IGB5YCB0aW1lc1xuICAgKi9cblxuICB2YXIgcmlnaHRMb2dTaGlmdCA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfbnVtYmVyLnJpZ2h0TG9nU2hpZnROdW1iZXIsXG4gICAgLy8gJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogLi4uLCAvLyBUT0RPOiBpbXBsZW1lbnQgQmlnTnVtYmVyIHN1cHBvcnQgZm9yIHJpZ2h0TG9nU2hpZnRcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTA4KHgsIHksIHJpZ2h0TG9nU2hpZnQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHksIHgsIHJpZ2h0TG9nU2hpZnQsIHRydWUpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDEoeCwgeSwgcmlnaHRMb2dTaGlmdCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIHJpZ2h0TG9nU2hpZnQpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHJpZ2h0TG9nU2hpZnQobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHJpZ2h0TG9nU2hpZnQobWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHJpZ2h0TG9nU2hpZnQoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeE51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICAvLyBjaGVjayBzY2FsYXJcbiAgICAgIGlmIChlcXVhbFNjYWxhcih5LCAwKSkge1xuICAgICAgICByZXR1cm4geC5jbG9uZSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeCwgeSwgcmlnaHRMb2dTaGlmdCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBEZW5zZU1hdHJpeE51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICAvLyBjaGVjayBzY2FsYXJcbiAgICAgIGlmIChlcXVhbFNjYWxhcih5LCAwKSkge1xuICAgICAgICByZXR1cm4geC5jbG9uZSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgcmlnaHRMb2dTaGlmdCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyU3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhclxuICAgICAgaWYgKGVxdWFsU2NhbGFyKHgsIDApKSB7XG4gICAgICAgIHJldHVybiB6ZXJvcyh5LnNpemUoKSwgeS5zdG9yYWdlKCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTAoeSwgeCwgcmlnaHRMb2dTaGlmdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckRlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhclxuICAgICAgaWYgKGVxdWFsU2NhbGFyKHgsIDApKSB7XG4gICAgICAgIHJldHVybiB6ZXJvcyh5LnNpemUoKSwgeS5zdG9yYWdlKCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgcmlnaHRMb2dTaGlmdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIEFycmF5TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiByaWdodExvZ1NoaWZ0KG1hdHJpeCh4KSwgeSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgQXJyYXknOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gcmlnaHRMb2dTaGlmdCh4LCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmlnaHRMb2dTaGlmdDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVSaWdodExvZ1NoaWZ0ID0gY3JlYXRlUmlnaHRMb2dTaGlmdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQmVsbE51bWJlcnMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdiZWxsTnVtYmVycyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdhZGRTY2FsYXInLCAnaXNOZWdhdGl2ZScsICdpc0ludGVnZXInLCAnc3RpcmxpbmdTMiddO1xudmFyIGNyZWF0ZUJlbGxOdW1iZXJzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGFkZFNjYWxhciA9IF9yZWYuYWRkU2NhbGFyLFxuICAgICAgaXNOZWdhdGl2ZSA9IF9yZWYuaXNOZWdhdGl2ZSxcbiAgICAgIGlzSW50ZWdlciA9IF9yZWYuaXNJbnRlZ2VyLFxuICAgICAgc3RpcmxpbmdTMiA9IF9yZWYuc3RpcmxpbmdTMjtcblxuICAvKipcbiAgICogVGhlIEJlbGwgTnVtYmVycyBjb3VudCB0aGUgbnVtYmVyIG9mIHBhcnRpdGlvbnMgb2YgYSBzZXQuIEEgcGFydGl0aW9uIGlzIGEgcGFpcndpc2UgZGlzam9pbnQgc3Vic2V0IG9mIFMgd2hvc2UgdW5pb24gaXMgUy5cbiAgICogYmVsbE51bWJlcnMgb25seSB0YWtlcyBpbnRlZ2VyIGFyZ3VtZW50cy5cbiAgICogVGhlIGZvbGxvd2luZyBjb25kaXRpb24gbXVzdCBiZSBlbmZvcmNlZDogbiA+PSAwXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICBtYXRoLmJlbGxOdW1iZXJzKG4pXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmJlbGxOdW1iZXJzKDMpIC8vIHJldHVybnMgNVxuICAgKiAgICBtYXRoLmJlbGxOdW1iZXJzKDgpIC8vIHJldHVybnMgNDE0MFxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgc3RpcmxpbmdTMlxuICAgKlxuICAgKiBAcGFyYW0ge051bWJlciB8IEJpZ051bWJlcn0gbiAgICBUb3RhbCBudW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgc2V0XG4gICAqIEByZXR1cm4ge051bWJlciB8IEJpZ051bWJlcn0gICAgIEIobilcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlcihuKSB7XG4gICAgICBpZiAoIWlzSW50ZWdlcihuKSB8fCBpc05lZ2F0aXZlKG4pKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vbi1uZWdhdGl2ZSBpbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIGluIGZ1bmN0aW9uIGJlbGxOdW1iZXJzJyk7XG4gICAgICB9IC8vIFN1bSAoaz0wLCBuKSBTKG4saykuXG5cblxuICAgICAgdmFyIHJlc3VsdCA9IDA7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IG47IGkrKykge1xuICAgICAgICByZXN1bHQgPSBhZGRTY2FsYXIocmVzdWx0LCBzdGlybGluZ1MyKG4sIGkpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZUJlbGxOdW1iZXJzID0gY3JlYXRlQmVsbE51bWJlcnM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNhdGFsYW4gPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdjYXRhbGFuJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FkZFNjYWxhcicsICdkaXZpZGVTY2FsYXInLCAnbXVsdGlwbHlTY2FsYXInLCAnY29tYmluYXRpb25zJywgJ2lzTmVnYXRpdmUnLCAnaXNJbnRlZ2VyJ107XG52YXIgY3JlYXRlQ2F0YWxhbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBhZGRTY2FsYXIgPSBfcmVmLmFkZFNjYWxhcixcbiAgICAgIGRpdmlkZVNjYWxhciA9IF9yZWYuZGl2aWRlU2NhbGFyLFxuICAgICAgbXVsdGlwbHlTY2FsYXIgPSBfcmVmLm11bHRpcGx5U2NhbGFyLFxuICAgICAgY29tYmluYXRpb25zID0gX3JlZi5jb21iaW5hdGlvbnMsXG4gICAgICBpc05lZ2F0aXZlID0gX3JlZi5pc05lZ2F0aXZlLFxuICAgICAgaXNJbnRlZ2VyID0gX3JlZi5pc0ludGVnZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBDYXRhbGFuIE51bWJlcnMgZW51bWVyYXRlIGNvbWJpbmF0b3JpYWwgc3RydWN0dXJlcyBvZiBtYW55IGRpZmZlcmVudCB0eXBlcy5cbiAgICogY2F0YWxhbiBvbmx5IHRha2VzIGludGVnZXIgYXJndW1lbnRzLlxuICAgKiBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbiBtdXN0IGJlIGVuZm9yY2VkOiBuID49IDBcbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgIG1hdGguY2F0YWxhbihuKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5jYXRhbGFuKDMpIC8vIHJldHVybnMgNVxuICAgKiAgICBtYXRoLmNhdGFsYW4oOCkgLy8gcmV0dXJucyAxNDMwXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiZWxsTnVtYmVyc1xuICAgKlxuICAgKiBAcGFyYW0ge051bWJlciB8IEJpZ051bWJlcn0gbiAgICBudGggQ2F0YWxhbiBudW1iZXJcbiAgICogQHJldHVybiB7TnVtYmVyIHwgQmlnTnVtYmVyfSAgICAgQ24obilcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlcihuKSB7XG4gICAgICBpZiAoIWlzSW50ZWdlcihuKSB8fCBpc05lZ2F0aXZlKG4pKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vbi1uZWdhdGl2ZSBpbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIGluIGZ1bmN0aW9uIGNhdGFsYW4nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRpdmlkZVNjYWxhcihjb21iaW5hdGlvbnMobXVsdGlwbHlTY2FsYXIobiwgMiksIG4pLCBhZGRTY2FsYXIobiwgMSkpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlQ2F0YWxhbiA9IGNyZWF0ZUNhdGFsYW47IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNvbXBvc2l0aW9uID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnY29tcG9zaXRpb24nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnYWRkU2NhbGFyJywgJ2NvbWJpbmF0aW9ucycsICdpc05lZ2F0aXZlJywgJ2lzUG9zaXRpdmUnLCAnaXNJbnRlZ2VyJywgJ2xhcmdlciddO1xudmFyIGNyZWF0ZUNvbXBvc2l0aW9uID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGFkZFNjYWxhciA9IF9yZWYuYWRkU2NhbGFyLFxuICAgICAgY29tYmluYXRpb25zID0gX3JlZi5jb21iaW5hdGlvbnMsXG4gICAgICBpc1Bvc2l0aXZlID0gX3JlZi5pc1Bvc2l0aXZlLFxuICAgICAgaXNOZWdhdGl2ZSA9IF9yZWYuaXNOZWdhdGl2ZSxcbiAgICAgIGlzSW50ZWdlciA9IF9yZWYuaXNJbnRlZ2VyLFxuICAgICAgbGFyZ2VyID0gX3JlZi5sYXJnZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBjb21wb3NpdGlvbiBjb3VudHMgb2YgbiBpbnRvIGsgcGFydHMuXG4gICAqXG4gICAqIGNvbXBvc2l0aW9uIG9ubHkgdGFrZXMgaW50ZWdlciBhcmd1bWVudHMuXG4gICAqIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIG11c3QgYmUgZW5mb3JjZWQ6IGsgPD0gbi5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgIG1hdGguY29tcG9zaXRpb24obiwgaylcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguY29tcG9zaXRpb24oNSwgMykgLy8gcmV0dXJucyA2XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjb21iaW5hdGlvbnNcbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXIgfCBCaWdOdW1iZXJ9IG4gICAgVG90YWwgbnVtYmVyIG9mIG9iamVjdHMgaW4gdGhlIHNldFxuICAgKiBAcGFyYW0ge051bWJlciB8IEJpZ051bWJlcn0gayAgICBOdW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgc3Vic2V0XG4gICAqIEByZXR1cm4ge051bWJlciB8IEJpZ051bWJlcn0gICAgIFJldHVybnMgdGhlIGNvbXBvc2l0aW9uIGNvdW50cyBvZiBuIGludG8gayBwYXJ0cy5cbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyTnVtYmVyQmlnTnVtYmVyKG4sIGspIHtcbiAgICAgIGlmICghaXNJbnRlZ2VyKG4pIHx8ICFpc1Bvc2l0aXZlKG4pIHx8ICFpc0ludGVnZXIoaykgfHwgIWlzUG9zaXRpdmUoaykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUG9zaXRpdmUgaW50ZWdlciB2YWx1ZSBleHBlY3RlZCBpbiBmdW5jdGlvbiBjb21wb3NpdGlvbicpO1xuICAgICAgfSBlbHNlIGlmIChsYXJnZXIoaywgbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignayBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBuIGluIGZ1bmN0aW9uIGNvbXBvc2l0aW9uJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb21iaW5hdGlvbnMoYWRkU2NhbGFyKG4sIC0xKSwgYWRkU2NhbGFyKGssIC0xKSk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb21wb3NpdGlvbiA9IGNyZWF0ZUNvbXBvc2l0aW9uOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTdGlybGluZ1MyID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnc3RpcmxpbmdTMic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdhZGRTY2FsYXInLCAnc3VidHJhY3QnLCAnbXVsdGlwbHlTY2FsYXInLCAnZGl2aWRlU2NhbGFyJywgJ3BvdycsICdmYWN0b3JpYWwnLCAnY29tYmluYXRpb25zJywgJ2lzTmVnYXRpdmUnLCAnaXNJbnRlZ2VyJywgJ2xhcmdlciddO1xudmFyIGNyZWF0ZVN0aXJsaW5nUzIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgYWRkU2NhbGFyID0gX3JlZi5hZGRTY2FsYXIsXG4gICAgICBzdWJ0cmFjdCA9IF9yZWYuc3VidHJhY3QsXG4gICAgICBtdWx0aXBseVNjYWxhciA9IF9yZWYubXVsdGlwbHlTY2FsYXIsXG4gICAgICBkaXZpZGVTY2FsYXIgPSBfcmVmLmRpdmlkZVNjYWxhcixcbiAgICAgIHBvdyA9IF9yZWYucG93LFxuICAgICAgZmFjdG9yaWFsID0gX3JlZi5mYWN0b3JpYWwsXG4gICAgICBjb21iaW5hdGlvbnMgPSBfcmVmLmNvbWJpbmF0aW9ucyxcbiAgICAgIGlzTmVnYXRpdmUgPSBfcmVmLmlzTmVnYXRpdmUsXG4gICAgICBpc0ludGVnZXIgPSBfcmVmLmlzSW50ZWdlcixcbiAgICAgIGxhcmdlciA9IF9yZWYubGFyZ2VyO1xuXG4gIC8qKlxuICAgKiBUaGUgU3RpcmxpbmcgbnVtYmVycyBvZiB0aGUgc2Vjb25kIGtpbmQsIGNvdW50cyB0aGUgbnVtYmVyIG9mIHdheXMgdG8gcGFydGl0aW9uXG4gICAqIGEgc2V0IG9mIG4gbGFiZWxsZWQgb2JqZWN0cyBpbnRvIGsgbm9uZW1wdHkgdW5sYWJlbGxlZCBzdWJzZXRzLlxuICAgKiBzdGlybGluZ1MyIG9ubHkgdGFrZXMgaW50ZWdlciBhcmd1bWVudHMuXG4gICAqIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIG11c3QgYmUgZW5mb3JjZWQ6IGsgPD0gbi5cbiAgICpcbiAgICogIElmIG4gPSBrIG9yIGsgPSAxLCB0aGVuIHMobixrKSA9IDFcbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgIG1hdGguc3RpcmxpbmdTMihuLCBrKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5zdGlybGluZ1MyKDUsIDMpIC8vcmV0dXJucyAyNVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYmVsbE51bWJlcnNcbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXIgfCBCaWdOdW1iZXJ9IG4gICAgVG90YWwgbnVtYmVyIG9mIG9iamVjdHMgaW4gdGhlIHNldFxuICAgKiBAcGFyYW0ge051bWJlciB8IEJpZ051bWJlcn0gayAgICBOdW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgc3Vic2V0XG4gICAqIEByZXR1cm4ge051bWJlciB8IEJpZ051bWJlcn0gICAgIFMobixrKVxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJOdW1iZXJCaWdOdW1iZXIobiwgaykge1xuICAgICAgaWYgKCFpc0ludGVnZXIobikgfHwgaXNOZWdhdGl2ZShuKSB8fCAhaXNJbnRlZ2VyKGspIHx8IGlzTmVnYXRpdmUoaykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm9uLW5lZ2F0aXZlIGludGVnZXIgdmFsdWUgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gc3RpcmxpbmdTMicpO1xuICAgICAgfSBlbHNlIGlmIChsYXJnZXIoaywgbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignayBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBuIGluIGZ1bmN0aW9uIHN0aXJsaW5nUzInKTtcbiAgICAgIH0gLy8gMS9rISBTdW0oaT0wIC0+IGspIFsoLTEpXihrLWkpKkMoayxqKSogaV5uXVxuXG5cbiAgICAgIHZhciBrRmFjdG9yaWFsID0gZmFjdG9yaWFsKGspO1xuICAgICAgdmFyIHJlc3VsdCA9IDA7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IGs7IGkrKykge1xuICAgICAgICB2YXIgbmVnYXRpdmVPbmUgPSBwb3coLTEsIHN1YnRyYWN0KGssIGkpKTtcbiAgICAgICAgdmFyIGtDaG9vc2VJID0gY29tYmluYXRpb25zKGssIGkpO1xuICAgICAgICB2YXIgaVBvd2VyID0gcG93KGksIG4pO1xuICAgICAgICByZXN1bHQgPSBhZGRTY2FsYXIocmVzdWx0LCBtdWx0aXBseVNjYWxhcihtdWx0aXBseVNjYWxhcihrQ2hvb3NlSSwgaVBvd2VyKSwgbmVnYXRpdmVPbmUpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRpdmlkZVNjYWxhcihyZXN1bHQsIGtGYWN0b3JpYWwpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlU3RpcmxpbmdTMiA9IGNyZWF0ZVN0aXJsaW5nUzI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFyZyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgbmFtZSA9ICdhcmcnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVBcmcgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBhcmd1bWVudCBvZiBhIGNvbXBsZXggdmFsdWUuXG4gICAqIEZvciBhIGNvbXBsZXggbnVtYmVyIGBhICsgYmlgLCB0aGUgYXJndW1lbnQgaXMgY29tcHV0ZWQgYXMgYGF0YW4yKGIsIGEpYC5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmFyZyh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgY29uc3QgYSA9IG1hdGguY29tcGxleCgyLCAyKVxuICAgKiAgICBtYXRoLmFyZyhhKSAvIG1hdGgucGkgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMC4yNVxuICAgKlxuICAgKiAgICBjb25zdCBiID0gbWF0aC5jb21wbGV4KCcyICsgM2knKVxuICAgKiAgICBtYXRoLmFyZyhiKSAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMC45ODI3OTM3MjMyNDczMjlcbiAgICogICAgbWF0aC5hdGFuMigzLCAyKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDAuOTgyNzkzNzIzMjQ3MzI5XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICByZSwgaW0sIGNvbmosIGFic1xuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geFxuICAgKiAgICAgICAgICAgIEEgY29tcGxleCBudW1iZXIgb3IgYXJyYXkgd2l0aCBjb21wbGV4IG51bWJlcnNcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IFRoZSBhcmd1bWVudCBvZiB4XG4gICAqL1xuICB2YXIgYXJnID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiBNYXRoLmF0YW4yKDAsIHgpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHguY29uc3RydWN0b3IuYXRhbjIoMCwgeCk7XG4gICAgfSxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmFyZygpO1xuICAgIH0sXG4gICAgLy8gVE9ETzogaW1wbGVtZW50IEJpZ051bWJlciBzdXBwb3J0IGZvciBmdW5jdGlvbiBhcmdcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGFyZyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGFyZztcbn0pO1xuZXhwb3J0cy5jcmVhdGVBcmcgPSBjcmVhdGVBcmc7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNvbmogPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIG5hbWUgPSAnY29uaic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUNvbmogPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBjb21wbGV4IGNvbmp1Z2F0ZSBvZiBhIGNvbXBsZXggdmFsdWUuXG4gICAqIElmIGB4ID0gYStiaWAsIHRoZSBjb21wbGV4IGNvbmp1Z2F0ZSBvZiBgeGAgaXMgYGEgLSBiaWAuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5jb25qKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmNvbmoobWF0aC5jb21wbGV4KCcyICsgM2knKSkgIC8vIHJldHVybnMgQ29tcGxleCAyIC0gM2lcbiAgICogICAgbWF0aC5jb25qKG1hdGguY29tcGxleCgnMiAtIDNpJykpICAvLyByZXR1cm5zIENvbXBsZXggMiArIDNpXG4gICAqICAgIG1hdGguY29uaihtYXRoLmNvbXBsZXgoJy01LjJpJykpICAvLyByZXR1cm5zIENvbXBsZXggNS4yaVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgcmUsIGltLCBhcmcsIGFic1xuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geFxuICAgKiAgICAgICAgICAgIEEgY29tcGxleCBudW1iZXIgb3IgYXJyYXkgd2l0aCBjb21wbGV4IG51bWJlcnNcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fVxuICAgKiAgICAgICAgICAgIFRoZSBjb21wbGV4IGNvbmp1Z2F0ZSBvZiB4XG4gICAqL1xuICB2YXIgY29uaiA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICByZXR1cm4geDtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4O1xuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5jb25qdWdhdGUoKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgY29uaik7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGNvbmo7XG59KTtcbmV4cG9ydHMuY3JlYXRlQ29uaiA9IGNyZWF0ZUNvbmo7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUltID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBuYW1lID0gJ2ltJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlSW0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGltYWdpbmFyeSBwYXJ0IG9mIGEgY29tcGxleCBudW1iZXIuXG4gICAqIEZvciBhIGNvbXBsZXggbnVtYmVyIGBhICsgYmlgLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBgYmAuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5pbSh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgY29uc3QgYSA9IG1hdGguY29tcGxleCgyLCAzKVxuICAgKiAgICBtYXRoLnJlKGEpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMlxuICAgKiAgICBtYXRoLmltKGEpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgM1xuICAgKlxuICAgKiAgICBtYXRoLnJlKG1hdGguY29tcGxleCgnLTUuMmknKSkgLy8gcmV0dXJucyBudW1iZXIgLTUuMlxuICAgKiAgICBtYXRoLnJlKG1hdGguY29tcGxleCgyLjQpKSAgICAgLy8gcmV0dXJucyBudW1iZXIgMFxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgcmUsIGNvbmosIGFicywgYXJnXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4XG4gICAqICAgICAgICAgICAgQSBjb21wbGV4IG51bWJlciBvciBhcnJheSB3aXRoIGNvbXBsZXggbnVtYmVyc1xuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0gVGhlIGltYWdpbmFyeSBwYXJ0IG9mIHhcbiAgICovXG4gIHZhciBpbSA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4Lm11bCgwKTtcbiAgICB9LFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHguaW07XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGltKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaW07XG59KTtcbmV4cG9ydHMuY3JlYXRlSW0gPSBjcmVhdGVJbTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUmUgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIG5hbWUgPSAncmUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVSZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcmVhbCBwYXJ0IG9mIGEgY29tcGxleCBudW1iZXIuXG4gICAqIEZvciBhIGNvbXBsZXggbnVtYmVyIGBhICsgYmlgLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBgYWAuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5yZSh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgY29uc3QgYSA9IG1hdGguY29tcGxleCgyLCAzKVxuICAgKiAgICBtYXRoLnJlKGEpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMlxuICAgKiAgICBtYXRoLmltKGEpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgM1xuICAgKlxuICAgKiAgICBtYXRoLnJlKG1hdGguY29tcGxleCgnLTUuMmknKSkgLy8gcmV0dXJucyBudW1iZXIgMFxuICAgKiAgICBtYXRoLnJlKG1hdGguY29tcGxleCgyLjQpKSAgICAgLy8gcmV0dXJucyBudW1iZXIgMi40XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBpbSwgY29uaiwgYWJzLCBhcmdcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHhcbiAgICogICAgICAgICAgICBBIGNvbXBsZXggbnVtYmVyIG9yIGFycmF5IHdpdGggY29tcGxleCBudW1iZXJzXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSBUaGUgcmVhbCBwYXJ0IG9mIHhcbiAgICovXG4gIHZhciByZSA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICByZXR1cm4geDtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4O1xuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5yZTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgcmUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVSZSA9IGNyZWF0ZVJlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVEaXN0YW5jZSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2Rpc3RhbmNlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FkZFNjYWxhcicsICdzdWJ0cmFjdCcsICdkaXZpZGVTY2FsYXInLCAnbXVsdGlwbHlTY2FsYXInLCAndW5hcnlNaW51cycsICdzcXJ0JywgJ2FicyddO1xudmFyIGNyZWF0ZURpc3RhbmNlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGFkZFNjYWxhciA9IF9yZWYuYWRkU2NhbGFyLFxuICAgICAgc3VidHJhY3QgPSBfcmVmLnN1YnRyYWN0LFxuICAgICAgbXVsdGlwbHlTY2FsYXIgPSBfcmVmLm11bHRpcGx5U2NhbGFyLFxuICAgICAgZGl2aWRlU2NhbGFyID0gX3JlZi5kaXZpZGVTY2FsYXIsXG4gICAgICB1bmFyeU1pbnVzID0gX3JlZi51bmFyeU1pbnVzLFxuICAgICAgc3FydCA9IF9yZWYuc3FydCxcbiAgICAgIGFicyA9IF9yZWYuYWJzO1xuXG4gIC8qKlxuICAgICogQ2FsY3VsYXRlczpcbiAgICAqICAgIFRoZSBldWNsZWRpYW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gcG9pbnRzIGluIE4tZGltZW5zaW9uYWwgc3BhY2VzLlxuICAgICogICAgRGlzdGFuY2UgYmV0d2VlbiBwb2ludCBhbmQgYSBsaW5lIGluIDIgYW5kIDMgZGltZW5zaW9uYWwgc3BhY2VzLlxuICAgICogICAgUGFpcndpc2UgZGlzdGFuY2UgYmV0d2VlbiBhIHNldCBvZiAyRCBvciAzRCBwb2ludHNcbiAgICAqIE5PVEU6XG4gICAgKiAgICBXaGVuIHN1YnN0aXR1dGluZyBjb2VmZmljaWVudHMgb2YgYSBsaW5lKGEsIGIgYW5kIGMpLCB1c2UgYXggKyBieSArIGMgPSAwIGluc3RlYWQgb2YgYXggKyBieSA9IGNcbiAgICAqICAgIEZvciBwYXJhbWV0cmljIGVxdWF0aW9uIG9mIGEgM0QgbGluZSwgeDAsIHkwLCB6MCwgYSwgYiwgYyBhcmUgZnJvbTogKHjiiJJ4MCwgeeKIknkwLCB64oiSejApID0gdChhLCBiLCBjKVxuICAgICpcbiAgICAqIFN5bnRheDpcbiAgICAqICAgIG1hdGguZGlzdGFuY2UoW3gxLCB5MV0sIFt4MiwgeTJdKVxuICAgICotICAgbWF0aC5kaXN0YW5jZSh7cG9pbnRPbmVYOiA0LCBwb2ludE9uZVk6IDV9LCB7cG9pbnRUd29YOiAyLCBwb2ludFR3b1k6IDd9KVxuICAgICogICAgbWF0aC5kaXN0YW5jZShbeDEsIHkxLCB6MV0sIFt4MiwgeTIsIHoyXSlcbiAgICAqICAgIG1hdGguZGlzdGFuY2Uoe3BvaW50T25lWDogNCwgcG9pbnRPbmVZOiA1LCBwb2ludE9uZVo6IDh9LCB7cG9pbnRUd29YOiAyLCBwb2ludFR3b1k6IDcsIHBvaW50VHdvWjogOX0pXG4gICAgKiAgICBtYXRoLmRpc3RhbmNlKFt4MSwgeTEsIC4uLiAsIE4xXSwgW3gyLCB5MiwgLi4uICwgTjJdKVxuICAgICogICAgbWF0aC5kaXN0YW5jZShbW0FdLCBbQl0sIFtDXS4uLl0pXG4gICAgKiAgICBtYXRoLmRpc3RhbmNlKFt4MSwgeTFdLCBbTGluZVB0WDEsIExpbmVQdFkxXSwgW0xpbmVQdFgyLCBMaW5lUHRZMl0pXG4gICAgKiAgICBtYXRoLmRpc3RhbmNlKHtwb2ludFg6IDEsIHBvaW50WTogNH0sIHtsaW5lT25lUHRYOiA2LCBsaW5lT25lUHRZOiAzfSwge2xpbmVUd29QdFg6IDIsIGxpbmVUd29QdFk6IDh9KVxuICAgICogICAgbWF0aC5kaXN0YW5jZShbeDEsIHkxLCB6MV0sIFtMaW5lUHRYMSwgTGluZVB0WTEsIExpbmVQdFoxXSwgW0xpbmVQdFgyLCBMaW5lUHRZMiwgTGluZVB0WjJdKVxuICAgICogICAgbWF0aC5kaXN0YW5jZSh7cG9pbnRYOiAxLCBwb2ludFk6IDQsIHBvaW50WjogN30sIHtsaW5lT25lUHRYOiA2LCBsaW5lT25lUHRZOiAzLCBsaW5lT25lUHRaOiA0fSwge2xpbmVUd29QdFg6IDIsIGxpbmVUd29QdFk6IDgsIGxpbmVUd29QdFo6IDV9KVxuICAgICogICAgbWF0aC5kaXN0YW5jZShbeDEsIHkxXSwgW3hDb2VmZkxpbmUsIHlDb2VmZkxpbmUsIGNvbnN0YW50XSlcbiAgICAqICAgIG1hdGguZGlzdGFuY2Uoe3BvaW50WDogMTAsIHBvaW50WTogMTB9LCB7eENvZWZmTGluZTogOCwgeUNvZWZmTGluZTogMSwgY29uc3RhbnQ6IDN9KVxuICAgICogICAgbWF0aC5kaXN0YW5jZShbeDEsIHkxLCB6MV0sIFt4MCwgeTAsIHowLCBhLXRDb2VmZiwgYi10Q29lZmYsIGMtdENvZWZmXSkgcG9pbnQgYW5kIHBhcmFtZXRyaWMgZXF1YXRpb24gb2YgM0QgbGluZVxuICAgICogICAgbWF0aC5kaXN0YW5jZShbeCwgeSwgel0sIFt4MCwgeTAsIHowLCBhLCBiLCBjXSlcbiAgICAqICAgIG1hdGguZGlzdGFuY2Uoe3BvaW50WDogMiwgcG9pbnRZOiA1LCBwb2ludFo6IDl9LCB7eDA6IDQsIHkwOiA2LCB6MDogMywgYTogNCwgYjogMiwgYzogMH0pXG4gICAgKlxuICAgICogRXhhbXBsZXM6XG4gICAgKiAgICBtYXRoLmRpc3RhbmNlKFswLDBdLCBbNCw0XSkgICAgICAgICAgICAgICAgICAgICAvLyBSZXR1cm5zIDUuNjU2OVxuICAgICogICAgbWF0aC5kaXN0YW5jZShcbiAgICAqICAgICB7cG9pbnRPbmVYOiAwLCBwb2ludE9uZVk6IDB9LFxuICAgICogICAgIHtwb2ludFR3b1g6IDEwLCBwb2ludFR3b1k6IDEwfSkgICAgICAgICAgICAgICAgLy8gUmV0dXJucyAxNC4xNDIxMzU2MjM3MzA5NTFcbiAgICAqICAgIG1hdGguZGlzdGFuY2UoWzEsIDAsIDFdLCBbNCwgLTIsIDJdKSAgICAgICAgICAgIC8vIFJldHVybnMgMy43NDE2NlxuICAgICogICAgbWF0aC5kaXN0YW5jZShcbiAgICAqICAgICB7cG9pbnRPbmVYOiA0LCBwb2ludE9uZVk6IDUsIHBvaW50T25lWjogOH0sXG4gICAgKiAgICAge3BvaW50VHdvWDogMiwgcG9pbnRUd29ZOiA3LCBwb2ludFR3b1o6IDl9KSAgICAvLyBSZXR1cm5zIDNcbiAgICAqICAgIG1hdGguZGlzdGFuY2UoWzEsIDAsIDEsIDBdLCBbMCwgLTEsIDAsIC0xXSkgICAgIC8vIFJldHVybnMgMlxuICAgICogICAgbWF0aC5kaXN0YW5jZShbWzEsIDJdLCBbMSwgMl0sIFsxLCAzXV0pICAgICAgICAgLy8gUmV0dXJucyBbMCwgMSwgMV1cbiAgICAqICAgIG1hdGguZGlzdGFuY2UoW1sxLDIsNF0sIFsxLDIsNl0sIFs4LDEsM11dKSAgICAgIC8vIFJldHVybnMgWzIsIDcuMTQxNDI4NDI4NTQyODUsIDcuNjgxMTQ1NzQ3ODY4NjA4XVxuICAgICogICAgbWF0aC5kaXN0YW5jZShbMTAsIDEwXSwgWzgsIDEsIDNdKSAgICAgICAgICAgICAgLy8gUmV0dXJucyAxMS41MzUyMzAzMTY3OTYzODdcbiAgICAqICAgIG1hdGguZGlzdGFuY2UoWzEwLCAxMF0sIFsyLCAzXSwgWy04LCAwXSkgICAgICAgIC8vIFJldHVybnMgOC43NTk5NTMxMzAzNjI4NDdcbiAgICAqICAgIG1hdGguZGlzdGFuY2UoXG4gICAgKiAgICAge3BvaW50WDogMSwgcG9pbnRZOiA0fSxcbiAgICAqICAgICB7bGluZU9uZVB0WDogNiwgbGluZU9uZVB0WTogM30sXG4gICAgKiAgICAge2xpbmVUd29QdFg6IDIsIGxpbmVUd29QdFk6IDh9KSAgICAgICAgICAgICAgICAvLyBSZXR1cm5zIDIuNzIwNTQ5MzcyNjI0NzQ0XG4gICAgKiAgICBtYXRoLmRpc3RhbmNlKFsyLCAzLCAxXSwgWzEsIDEsIDIsIDUsIDAsIDFdKSAgICAvLyBSZXR1cm5zIDIuMzIwNDc3NDA0NDYxMjg1N1xuICAgICogICAgbWF0aC5kaXN0YW5jZShcbiAgICAqICAgICB7cG9pbnRYOiAyLCBwb2ludFk6IDMsIHBvaW50WjogMX0sXG4gICAgKiAgICAge3gwOiAxLCB5MDogMSwgejA6IDIsIGE6IDUsIGI6IDAsIGM6IDF9ICAgICAgICAvLyBSZXR1cm5zIDIuMzIwNDc3NDA0NDYxMjg1N1xuICAgICpcbiAgICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXggfCBPYmplY3R9IHggICAgQ28tb3JkaW5hdGVzIG9mIGZpcnN0IHBvaW50XG4gICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4IHwgT2JqZWN0fSB5ICAgIENvLW9yZGluYXRlcyBvZiBzZWNvbmQgcG9pbnRcbiAgICAqIEByZXR1cm4ge051bWJlciB8IEJpZ051bWJlcn0gUmV0dXJucyB0aGUgZGlzdGFuY2UgZnJvbSB0d28vdGhyZWUgcG9pbnRzXG4gICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ0FycmF5LCBBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5QXJyYXkoeCwgeSwgeikge1xuICAgICAgLy8gUG9pbnQgdG8gTGluZSAyRCAoeD1Qb2ludCwgeT1MaW5lUG9pbnQxLCB6PUxpbmVQb2ludDIpXG4gICAgICBpZiAoeC5sZW5ndGggPT09IDIgJiYgeS5sZW5ndGggPT09IDIgJiYgei5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgaWYgKCFfMmQoeCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSB3aXRoIDIgbnVtYmVycyBvciBCaWdOdW1iZXJzIGV4cGVjdGVkIGZvciBmaXJzdCBhcmd1bWVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFfMmQoeSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSB3aXRoIDIgbnVtYmVycyBvciBCaWdOdW1iZXJzIGV4cGVjdGVkIGZvciBzZWNvbmQgYXJndW1lbnQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghXzJkKHopKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgd2l0aCAyIG51bWJlcnMgb3IgQmlnTnVtYmVycyBleHBlY3RlZCBmb3IgdGhpcmQgYXJndW1lbnQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtID0gZGl2aWRlU2NhbGFyKHN1YnRyYWN0KHpbMV0sIHpbMF0pLCBzdWJ0cmFjdCh5WzFdLCB5WzBdKSk7XG4gICAgICAgIHZhciB4Q29lZmYgPSBtdWx0aXBseVNjYWxhcihtdWx0aXBseVNjYWxhcihtLCBtKSwgeVswXSk7XG4gICAgICAgIHZhciB5Q29lZmYgPSB1bmFyeU1pbnVzKG11bHRpcGx5U2NhbGFyKG0sIHlbMF0pKTtcbiAgICAgICAgdmFyIGNvbnN0YW50ID0geFsxXTtcbiAgICAgICAgcmV0dXJuIF9kaXN0YW5jZVBvaW50TGluZTJEKHhbMF0sIHhbMV0sIHhDb2VmZiwgeUNvZWZmLCBjb25zdGFudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIEFyZ3VtZW50czogVHJ5IGFnYWluJyk7XG4gICAgICB9XG4gICAgfSxcbiAgICAnT2JqZWN0LCBPYmplY3QsIE9iamVjdCc6IGZ1bmN0aW9uIE9iamVjdE9iamVjdE9iamVjdCh4LCB5LCB6KSB7XG4gICAgICBpZiAoT2JqZWN0LmtleXMoeCkubGVuZ3RoID09PSAyICYmIE9iamVjdC5rZXlzKHkpLmxlbmd0aCA9PT0gMiAmJiBPYmplY3Qua2V5cyh6KS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgaWYgKCFfMmQoeCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdWYWx1ZXMgb2YgcG9pbnRYIGFuZCBwb2ludFkgc2hvdWxkIGJlIG51bWJlcnMgb3IgQmlnTnVtYmVycycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFfMmQoeSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdWYWx1ZXMgb2YgbGluZU9uZVB0WCBhbmQgbGluZU9uZVB0WSBzaG91bGQgYmUgbnVtYmVycyBvciBCaWdOdW1iZXJzJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIV8yZCh6KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1ZhbHVlcyBvZiBsaW5lVHdvUHRYIGFuZCBsaW5lVHdvUHRZIHNob3VsZCBiZSBudW1iZXJzIG9yIEJpZ051bWJlcnMnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgncG9pbnRYJyBpbiB4ICYmICdwb2ludFknIGluIHggJiYgJ2xpbmVPbmVQdFgnIGluIHkgJiYgJ2xpbmVPbmVQdFknIGluIHkgJiYgJ2xpbmVUd29QdFgnIGluIHogJiYgJ2xpbmVUd29QdFknIGluIHopIHtcbiAgICAgICAgICB2YXIgbSA9IGRpdmlkZVNjYWxhcihzdWJ0cmFjdCh6LmxpbmVUd29QdFksIHoubGluZVR3b1B0WCksIHN1YnRyYWN0KHkubGluZU9uZVB0WSwgeS5saW5lT25lUHRYKSk7XG4gICAgICAgICAgdmFyIHhDb2VmZiA9IG11bHRpcGx5U2NhbGFyKG11bHRpcGx5U2NhbGFyKG0sIG0pLCB5LmxpbmVPbmVQdFgpO1xuICAgICAgICAgIHZhciB5Q29lZmYgPSB1bmFyeU1pbnVzKG11bHRpcGx5U2NhbGFyKG0sIHkubGluZU9uZVB0WCkpO1xuICAgICAgICAgIHZhciBjb25zdGFudCA9IHgucG9pbnRYO1xuICAgICAgICAgIHJldHVybiBfZGlzdGFuY2VQb2ludExpbmUyRCh4LnBvaW50WCwgeC5wb2ludFksIHhDb2VmZiwgeUNvZWZmLCBjb25zdGFudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignS2V5IG5hbWVzIGRvIG5vdCBtYXRjaCcpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIEFyZ3VtZW50czogVHJ5IGFnYWluJyk7XG4gICAgICB9XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyBQb2ludCB0byBMaW5lIDJEICh4PVtwb2ludFgsIHBvaW50WV0sIHk9W3gtY29lZmYsIHktY29lZmYsIGNvbnN0XSlcbiAgICAgIGlmICh4Lmxlbmd0aCA9PT0gMiAmJiB5Lmxlbmd0aCA9PT0gMykge1xuICAgICAgICBpZiAoIV8yZCh4KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IHdpdGggMiBudW1iZXJzIG9yIEJpZ051bWJlcnMgZXhwZWN0ZWQgZm9yIGZpcnN0IGFyZ3VtZW50Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIV8zZCh5KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IHdpdGggMyBudW1iZXJzIG9yIEJpZ051bWJlcnMgZXhwZWN0ZWQgZm9yIHNlY29uZCBhcmd1bWVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF9kaXN0YW5jZVBvaW50TGluZTJEKHhbMF0sIHhbMV0sIHlbMF0sIHlbMV0sIHlbMl0pO1xuICAgICAgfSBlbHNlIGlmICh4Lmxlbmd0aCA9PT0gMyAmJiB5Lmxlbmd0aCA9PT0gNikge1xuICAgICAgICAvLyBQb2ludCB0byBMaW5lIDNEXG4gICAgICAgIGlmICghXzNkKHgpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgd2l0aCAzIG51bWJlcnMgb3IgQmlnTnVtYmVycyBleHBlY3RlZCBmb3IgZmlyc3QgYXJndW1lbnQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghX3BhcmFtZXRyaWNMaW5lKHkpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgd2l0aCA2IG51bWJlcnMgb3IgQmlnTnVtYmVycyBleHBlY3RlZCBmb3Igc2Vjb25kIGFyZ3VtZW50Jyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gX2Rpc3RhbmNlUG9pbnRMaW5lM0QoeFswXSwgeFsxXSwgeFsyXSwgeVswXSwgeVsxXSwgeVsyXSwgeVszXSwgeVs0XSwgeVs1XSk7XG4gICAgICB9IGVsc2UgaWYgKHgubGVuZ3RoID09PSB5Lmxlbmd0aCAmJiB4Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gUG9pbnQgdG8gUG9pbnQgTi1kaW1lbnNpb25zXG4gICAgICAgIGlmICghX2NvbnRhaW5zT25seU51bWJlcnMoeCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBbGwgdmFsdWVzIG9mIGFuIGFycmF5IHNob3VsZCBiZSBudW1iZXJzIG9yIEJpZ051bWJlcnMnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghX2NvbnRhaW5zT25seU51bWJlcnMoeSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBbGwgdmFsdWVzIG9mIGFuIGFycmF5IHNob3VsZCBiZSBudW1iZXJzIG9yIEJpZ051bWJlcnMnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBfZXVjbGlkZWFuRGlzdGFuY2UoeCwgeSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIEFyZ3VtZW50czogVHJ5IGFnYWluJyk7XG4gICAgICB9XG4gICAgfSxcbiAgICAnT2JqZWN0LCBPYmplY3QnOiBmdW5jdGlvbiBPYmplY3RPYmplY3QoeCwgeSkge1xuICAgICAgaWYgKE9iamVjdC5rZXlzKHgpLmxlbmd0aCA9PT0gMiAmJiBPYmplY3Qua2V5cyh5KS5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgaWYgKCFfMmQoeCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdWYWx1ZXMgb2YgcG9pbnRYIGFuZCBwb2ludFkgc2hvdWxkIGJlIG51bWJlcnMgb3IgQmlnTnVtYmVycycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFfM2QoeSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdWYWx1ZXMgb2YgeENvZWZmTGluZSwgeUNvZWZmTGluZSBhbmQgY29uc3RhbnQgc2hvdWxkIGJlIG51bWJlcnMgb3IgQmlnTnVtYmVycycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdwb2ludFgnIGluIHggJiYgJ3BvaW50WScgaW4geCAmJiAneENvZWZmTGluZScgaW4geSAmJiAneUNvZWZmTGluZScgaW4geSAmJiAnY29uc3RhbnQnIGluIHkpIHtcbiAgICAgICAgICByZXR1cm4gX2Rpc3RhbmNlUG9pbnRMaW5lMkQoeC5wb2ludFgsIHgucG9pbnRZLCB5LnhDb2VmZkxpbmUsIHkueUNvZWZmTGluZSwgeS5jb25zdGFudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignS2V5IG5hbWVzIGRvIG5vdCBtYXRjaCcpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKE9iamVjdC5rZXlzKHgpLmxlbmd0aCA9PT0gMyAmJiBPYmplY3Qua2V5cyh5KS5sZW5ndGggPT09IDYpIHtcbiAgICAgICAgLy8gUG9pbnQgdG8gTGluZSAzRFxuICAgICAgICBpZiAoIV8zZCh4KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1ZhbHVlcyBvZiBwb2ludFgsIHBvaW50WSBhbmQgcG9pbnRaIHNob3VsZCBiZSBudW1iZXJzIG9yIEJpZ051bWJlcnMnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghX3BhcmFtZXRyaWNMaW5lKHkpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVmFsdWVzIG9mIHgwLCB5MCwgejAsIGEsIGIgYW5kIGMgc2hvdWxkIGJlIG51bWJlcnMgb3IgQmlnTnVtYmVycycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdwb2ludFgnIGluIHggJiYgJ3BvaW50WScgaW4geCAmJiAneDAnIGluIHkgJiYgJ3kwJyBpbiB5ICYmICd6MCcgaW4geSAmJiAnYScgaW4geSAmJiAnYicgaW4geSAmJiAnYycgaW4geSkge1xuICAgICAgICAgIHJldHVybiBfZGlzdGFuY2VQb2ludExpbmUzRCh4LnBvaW50WCwgeC5wb2ludFksIHgucG9pbnRaLCB5LngwLCB5LnkwLCB5LnowLCB5LmEsIHkuYiwgeS5jKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdLZXkgbmFtZXMgZG8gbm90IG1hdGNoJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoT2JqZWN0LmtleXMoeCkubGVuZ3RoID09PSAyICYmIE9iamVjdC5rZXlzKHkpLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAvLyBQb2ludCB0byBQb2ludCAyRFxuICAgICAgICBpZiAoIV8yZCh4KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1ZhbHVlcyBvZiBwb2ludE9uZVggYW5kIHBvaW50T25lWSBzaG91bGQgYmUgbnVtYmVycyBvciBCaWdOdW1iZXJzJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIV8yZCh5KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1ZhbHVlcyBvZiBwb2ludFR3b1ggYW5kIHBvaW50VHdvWSBzaG91bGQgYmUgbnVtYmVycyBvciBCaWdOdW1iZXJzJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJ3BvaW50T25lWCcgaW4geCAmJiAncG9pbnRPbmVZJyBpbiB4ICYmICdwb2ludFR3b1gnIGluIHkgJiYgJ3BvaW50VHdvWScgaW4geSkge1xuICAgICAgICAgIHJldHVybiBfZXVjbGlkZWFuRGlzdGFuY2UoW3gucG9pbnRPbmVYLCB4LnBvaW50T25lWV0sIFt5LnBvaW50VHdvWCwgeS5wb2ludFR3b1ldKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdLZXkgbmFtZXMgZG8gbm90IG1hdGNoJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoT2JqZWN0LmtleXMoeCkubGVuZ3RoID09PSAzICYmIE9iamVjdC5rZXlzKHkpLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAvLyBQb2ludCB0byBQb2ludCAzRFxuICAgICAgICBpZiAoIV8zZCh4KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1ZhbHVlcyBvZiBwb2ludE9uZVgsIHBvaW50T25lWSBhbmQgcG9pbnRPbmVaIHNob3VsZCBiZSBudW1iZXJzIG9yIEJpZ051bWJlcnMnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghXzNkKHkpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVmFsdWVzIG9mIHBvaW50VHdvWCwgcG9pbnRUd29ZIGFuZCBwb2ludFR3b1ogc2hvdWxkIGJlIG51bWJlcnMgb3IgQmlnTnVtYmVycycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdwb2ludE9uZVgnIGluIHggJiYgJ3BvaW50T25lWScgaW4geCAmJiAncG9pbnRPbmVaJyBpbiB4ICYmICdwb2ludFR3b1gnIGluIHkgJiYgJ3BvaW50VHdvWScgaW4geSAmJiAncG9pbnRUd29aJyBpbiB5KSB7XG4gICAgICAgICAgcmV0dXJuIF9ldWNsaWRlYW5EaXN0YW5jZShbeC5wb2ludE9uZVgsIHgucG9pbnRPbmVZLCB4LnBvaW50T25lWl0sIFt5LnBvaW50VHdvWCwgeS5wb2ludFR3b1ksIHkucG9pbnRUd29aXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignS2V5IG5hbWVzIGRvIG5vdCBtYXRjaCcpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIEFyZ3VtZW50czogVHJ5IGFnYWluJyk7XG4gICAgICB9XG4gICAgfSxcbiAgICBBcnJheTogZnVuY3Rpb24gQXJyYXkoYXJyKSB7XG4gICAgICBpZiAoIV9wYWlyd2lzZShhcnIpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0luY29ycmVjdCBhcnJheSBmb3JtYXQgZW50ZXJlZCBmb3IgcGFpcndpc2UgZGlzdGFuY2UgY2FsY3VsYXRpb24nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9kaXN0YW5jZVBhaXJ3aXNlKGFycik7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBfaXNOdW1iZXIoYSkge1xuICAgIC8vIGRpc3RhbmNlIHN1cHBvcnRzIG51bWJlcnMgYW5kIGJpZ251bWJlcnNcbiAgICByZXR1cm4gdHlwZW9mIGEgPT09ICdudW1iZXInIHx8ICgwLCBfaXMuaXNCaWdOdW1iZXIpKGEpO1xuICB9XG5cbiAgZnVuY3Rpb24gXzJkKGEpIHtcbiAgICAvLyBjaGVja3MgaWYgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgYXJlIGNvcnJlY3QgaW4gY291bnQgYW5kIGFyZSB2YWxpZCAoc2hvdWxkIGJlIG51bWJlcnMpXG4gICAgaWYgKGEuY29uc3RydWN0b3IgIT09IEFycmF5KSB7XG4gICAgICBhID0gX29iamVjdFRvQXJyYXkoYSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9pc051bWJlcihhWzBdKSAmJiBfaXNOdW1iZXIoYVsxXSk7XG4gIH1cblxuICBmdW5jdGlvbiBfM2QoYSkge1xuICAgIC8vIGNoZWNrcyBpZiB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBhcmUgY29ycmVjdCBpbiBjb3VudCBhbmQgYXJlIHZhbGlkIChzaG91bGQgYmUgbnVtYmVycylcbiAgICBpZiAoYS5jb25zdHJ1Y3RvciAhPT0gQXJyYXkpIHtcbiAgICAgIGEgPSBfb2JqZWN0VG9BcnJheShhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gX2lzTnVtYmVyKGFbMF0pICYmIF9pc051bWJlcihhWzFdKSAmJiBfaXNOdW1iZXIoYVsyXSk7XG4gIH1cblxuICBmdW5jdGlvbiBfY29udGFpbnNPbmx5TnVtYmVycyhhKSB7XG4gICAgLy8gY2hlY2tzIGlmIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIGFyZSBjb3JyZWN0IGluIGNvdW50IGFuZCBhcmUgdmFsaWQgKHNob3VsZCBiZSBudW1iZXJzKVxuICAgIGlmICghQXJyYXkuaXNBcnJheShhKSkge1xuICAgICAgYSA9IF9vYmplY3RUb0FycmF5KGEpO1xuICAgIH1cblxuICAgIHJldHVybiBhLmV2ZXJ5KF9pc051bWJlcik7XG4gIH1cblxuICBmdW5jdGlvbiBfcGFyYW1ldHJpY0xpbmUoYSkge1xuICAgIGlmIChhLmNvbnN0cnVjdG9yICE9PSBBcnJheSkge1xuICAgICAgYSA9IF9vYmplY3RUb0FycmF5KGEpO1xuICAgIH1cblxuICAgIHJldHVybiBfaXNOdW1iZXIoYVswXSkgJiYgX2lzTnVtYmVyKGFbMV0pICYmIF9pc051bWJlcihhWzJdKSAmJiBfaXNOdW1iZXIoYVszXSkgJiYgX2lzTnVtYmVyKGFbNF0pICYmIF9pc051bWJlcihhWzVdKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9vYmplY3RUb0FycmF5KG8pIHtcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG8pO1xuICAgIHZhciBhID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGEucHVzaChvW2tleXNbaV1dKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9wYWlyd2lzZShhKSB7XG4gICAgLy8gY2hlY2tzIGZvciB2YWxpZCBhcmd1bWVudHMgcGFzc2VkIHRvIF9kaXN0YW5jZVBhaXJ3aXNlKEFycmF5KVxuICAgIGlmIChhWzBdLmxlbmd0aCA9PT0gMiAmJiBfaXNOdW1iZXIoYVswXVswXSkgJiYgX2lzTnVtYmVyKGFbMF1bMV0pKSB7XG4gICAgICBpZiAoYS5zb21lKGZ1bmN0aW9uIChhSSkge1xuICAgICAgICByZXR1cm4gYUkubGVuZ3RoICE9PSAyIHx8ICFfaXNOdW1iZXIoYUlbMF0pIHx8ICFfaXNOdW1iZXIoYUlbMV0pO1xuICAgICAgfSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYVswXS5sZW5ndGggPT09IDMgJiYgX2lzTnVtYmVyKGFbMF1bMF0pICYmIF9pc051bWJlcihhWzBdWzFdKSAmJiBfaXNOdW1iZXIoYVswXVsyXSkpIHtcbiAgICAgIGlmIChhLnNvbWUoZnVuY3Rpb24gKGFJKSB7XG4gICAgICAgIHJldHVybiBhSS5sZW5ndGggIT09IDMgfHwgIV9pc051bWJlcihhSVswXSkgfHwgIV9pc051bWJlcihhSVsxXSkgfHwgIV9pc051bWJlcihhSVsyXSk7XG4gICAgICB9KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9kaXN0YW5jZVBvaW50TGluZTJEKHgsIHksIGEsIGIsIGMpIHtcbiAgICB2YXIgbnVtID0gYWJzKGFkZFNjYWxhcihhZGRTY2FsYXIobXVsdGlwbHlTY2FsYXIoYSwgeCksIG11bHRpcGx5U2NhbGFyKGIsIHkpKSwgYykpO1xuICAgIHZhciBkZW4gPSBzcXJ0KGFkZFNjYWxhcihtdWx0aXBseVNjYWxhcihhLCBhKSwgbXVsdGlwbHlTY2FsYXIoYiwgYikpKTtcbiAgICByZXR1cm4gZGl2aWRlU2NhbGFyKG51bSwgZGVuKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9kaXN0YW5jZVBvaW50TGluZTNEKHgsIHksIHosIHgwLCB5MCwgejAsIGEsIGIsIGMpIHtcbiAgICB2YXIgbnVtID0gW3N1YnRyYWN0KG11bHRpcGx5U2NhbGFyKHN1YnRyYWN0KHkwLCB5KSwgYyksIG11bHRpcGx5U2NhbGFyKHN1YnRyYWN0KHowLCB6KSwgYikpLCBzdWJ0cmFjdChtdWx0aXBseVNjYWxhcihzdWJ0cmFjdCh6MCwgeiksIGEpLCBtdWx0aXBseVNjYWxhcihzdWJ0cmFjdCh4MCwgeCksIGMpKSwgc3VidHJhY3QobXVsdGlwbHlTY2FsYXIoc3VidHJhY3QoeDAsIHgpLCBiKSwgbXVsdGlwbHlTY2FsYXIoc3VidHJhY3QoeTAsIHkpLCBhKSldO1xuICAgIG51bSA9IHNxcnQoYWRkU2NhbGFyKGFkZFNjYWxhcihtdWx0aXBseVNjYWxhcihudW1bMF0sIG51bVswXSksIG11bHRpcGx5U2NhbGFyKG51bVsxXSwgbnVtWzFdKSksIG11bHRpcGx5U2NhbGFyKG51bVsyXSwgbnVtWzJdKSkpO1xuICAgIHZhciBkZW4gPSBzcXJ0KGFkZFNjYWxhcihhZGRTY2FsYXIobXVsdGlwbHlTY2FsYXIoYSwgYSksIG11bHRpcGx5U2NhbGFyKGIsIGIpKSwgbXVsdGlwbHlTY2FsYXIoYywgYykpKTtcbiAgICByZXR1cm4gZGl2aWRlU2NhbGFyKG51bSwgZGVuKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9ldWNsaWRlYW5EaXN0YW5jZSh4LCB5KSB7XG4gICAgdmFyIHZlY3RvclNpemUgPSB4Lmxlbmd0aDtcbiAgICB2YXIgcmVzdWx0ID0gMDtcbiAgICB2YXIgZGlmZiA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZlY3RvclNpemU7IGkrKykge1xuICAgICAgZGlmZiA9IHN1YnRyYWN0KHhbaV0sIHlbaV0pO1xuICAgICAgcmVzdWx0ID0gYWRkU2NhbGFyKG11bHRpcGx5U2NhbGFyKGRpZmYsIGRpZmYpLCByZXN1bHQpO1xuICAgIH1cblxuICAgIHJldHVybiBzcXJ0KHJlc3VsdCk7XG4gIH1cblxuICBmdW5jdGlvbiBfZGlzdGFuY2VQYWlyd2lzZShhKSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBwb2ludEEgPSBbXTtcbiAgICB2YXIgcG9pbnRCID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICBmb3IgKHZhciBqID0gaSArIDE7IGogPCBhLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChhWzBdLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIHBvaW50QSA9IFthW2ldWzBdLCBhW2ldWzFdXTtcbiAgICAgICAgICBwb2ludEIgPSBbYVtqXVswXSwgYVtqXVsxXV07XG4gICAgICAgIH0gZWxzZSBpZiAoYVswXS5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICBwb2ludEEgPSBbYVtpXVswXSwgYVtpXVsxXSwgYVtpXVsyXV07XG4gICAgICAgICAgcG9pbnRCID0gW2Fbal1bMF0sIGFbal1bMV0sIGFbal1bMl1dO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzdWx0LnB1c2goX2V1Y2xpZGVhbkRpc3RhbmNlKHBvaW50QSwgcG9pbnRCKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZURpc3RhbmNlID0gY3JlYXRlRGlzdGFuY2U7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUludGVyc2VjdCA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2ludGVyc2VjdCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnYWJzJywgJ2FkZCcsICdhZGRTY2FsYXInLCAnbWF0cml4JywgJ211bHRpcGx5JywgJ211bHRpcGx5U2NhbGFyJywgJ2RpdmlkZVNjYWxhcicsICdzdWJ0cmFjdCcsICdzbWFsbGVyJywgJ2VxdWFsU2NhbGFyJ107XG52YXIgY3JlYXRlSW50ZXJzZWN0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgYWJzID0gX3JlZi5hYnMsXG4gICAgICBhZGQgPSBfcmVmLmFkZCxcbiAgICAgIGFkZFNjYWxhciA9IF9yZWYuYWRkU2NhbGFyLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHksXG4gICAgICBtdWx0aXBseVNjYWxhciA9IF9yZWYubXVsdGlwbHlTY2FsYXIsXG4gICAgICBkaXZpZGVTY2FsYXIgPSBfcmVmLmRpdmlkZVNjYWxhcixcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCxcbiAgICAgIHNtYWxsZXIgPSBfcmVmLnNtYWxsZXIsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXI7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIHBvaW50IG9mIGludGVyc2VjdGlvbiBvZiB0d28gbGluZXMgaW4gdHdvIG9yIHRocmVlIGRpbWVuc2lvbnNcbiAgICogYW5kIG9mIGEgbGluZSBhbmQgYSBwbGFuZSBpbiB0aHJlZSBkaW1lbnNpb25zLiBUaGUgaW5wdXRzIGFyZSBpbiB0aGUgZm9ybSBvZlxuICAgKiBhcnJheXMgb3IgMSBkaW1lbnNpb25hbCBtYXRyaWNlcy4gVGhlIGxpbmUgaW50ZXJzZWN0aW9uIGZ1bmN0aW9ucyByZXR1cm4gbnVsbFxuICAgKiBpZiB0aGUgbGluZXMgZG8gbm90IG1lZXQuXG4gICAqXG4gICAqIE5vdGU6IEZpbGwgdGhlIHBsYW5lIGNvZWZmaWNpZW50cyBhcyBgeCArIHkgKyB6ID0gY2AgYW5kIG5vdCBhcyBgeCArIHkgKyB6ICsgYyA9IDBgLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguaW50ZXJzZWN0KGVuZFBvaW50MUxpbmUxLCBlbmRQb2ludDJMaW5lMSwgZW5kUG9pbnQxTGluZTIsIGVuZFBvaW50MkxpbmUyKVxuICAgKiAgICBtYXRoLmludGVyc2VjdChlbmRQb2ludDEsIGVuZFBvaW50MiwgcGxhbmVDb2VmZmljaWVudHMpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmludGVyc2VjdChbMCwgMF0sIFsxMCwgMTBdLCBbMTAsIDBdLCBbMCwgMTBdKSAgICAgICAgICAgICAgLy8gUmV0dXJucyBbNSwgNV1cbiAgICogICAgbWF0aC5pbnRlcnNlY3QoWzAsIDAsIDBdLCBbMTAsIDEwLCAwXSwgWzEwLCAwLCAwXSwgWzAsIDEwLCAwXSkgIC8vIFJldHVybnMgWzUsIDUsIDBdXG4gICAqICAgIG1hdGguaW50ZXJzZWN0KFsxLCAwLCAxXSwgIFs0LCAtMiwgMl0sIFsxLCAxLCAxLCA2XSkgICAgICAgICAgICAvLyBSZXR1cm5zIFs3LCAtNCwgM11cbiAgICpcbiAgICogQHBhcmFtICB7QXJyYXkgfCBNYXRyaXh9IHcgICBDby1vcmRpbmF0ZXMgb2YgZmlyc3QgZW5kLXBvaW50IG9mIGZpcnN0IGxpbmVcbiAgICogQHBhcmFtICB7QXJyYXkgfCBNYXRyaXh9IHggICBDby1vcmRpbmF0ZXMgb2Ygc2Vjb25kIGVuZC1wb2ludCBvZiBmaXJzdCBsaW5lXG4gICAqIEBwYXJhbSAge0FycmF5IHwgTWF0cml4fSB5ICAgQ28tb3JkaW5hdGVzIG9mIGZpcnN0IGVuZC1wb2ludCBvZiBzZWNvbmQgbGluZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9SIENvLWVmZmljaWVudHMgb2YgdGhlIHBsYW5lJ3MgZXF1YXRpb25cbiAgICogQHBhcmFtICB7QXJyYXkgfCBNYXRyaXh9IHogICBDby1vcmRpbmF0ZXMgb2Ygc2Vjb25kIGVuZC1wb2ludCBvZiBzZWNvbmQgbGluZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9SIG51bGwgaWYgdGhlIGNhbGN1bGF0aW9uIGlzIGZvciBsaW5lIGFuZCBwbGFuZVxuICAgKiBAcmV0dXJuIHtBcnJheX0gICAgICAgICAgICAgIFJldHVybnMgdGhlIHBvaW50IG9mIGludGVyc2VjdGlvbiBvZiBsaW5lcy9saW5lcy1wbGFuZXNcbiAgICovXG4gIHZhciBpbnRlcnNlY3QgPSB0eXBlZCgnaW50ZXJzZWN0Jywge1xuICAgICdBcnJheSwgQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheUFycmF5KHgsIHksIHBsYW5lKSB7XG4gICAgICBpZiAoIV8zZCh4KSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSB3aXRoIDMgbnVtYmVycyBvciBCaWdOdW1iZXJzIGV4cGVjdGVkIGZvciBmaXJzdCBhcmd1bWVudCcpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIV8zZCh5KSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSB3aXRoIDMgbnVtYmVycyBvciBCaWdOdW1iZXJzIGV4cGVjdGVkIGZvciBzZWNvbmQgYXJndW1lbnQnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFfNGQocGxhbmUpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IHdpdGggNCBudW1iZXJzIGV4cGVjdGVkIGFzIHRoaXJkIGFyZ3VtZW50Jyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfaW50ZXJzZWN0TGluZVBsYW5lKHhbMF0sIHhbMV0sIHhbMl0sIHlbMF0sIHlbMV0sIHlbMl0sIHBsYW5lWzBdLCBwbGFuZVsxXSwgcGxhbmVbMl0sIHBsYW5lWzNdKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXksIEFycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXlBcnJheUFycmF5KHcsIHgsIHksIHopIHtcbiAgICAgIGlmICh3Lmxlbmd0aCA9PT0gMikge1xuICAgICAgICBpZiAoIV8yZCh3KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IHdpdGggMiBudW1iZXJzIG9yIEJpZ051bWJlcnMgZXhwZWN0ZWQgZm9yIGZpcnN0IGFyZ3VtZW50Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIV8yZCh4KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IHdpdGggMiBudW1iZXJzIG9yIEJpZ051bWJlcnMgZXhwZWN0ZWQgZm9yIHNlY29uZCBhcmd1bWVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFfMmQoeSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSB3aXRoIDIgbnVtYmVycyBvciBCaWdOdW1iZXJzIGV4cGVjdGVkIGZvciB0aGlyZCBhcmd1bWVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFfMmQoeikpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSB3aXRoIDIgbnVtYmVycyBvciBCaWdOdW1iZXJzIGV4cGVjdGVkIGZvciBmb3VydGggYXJndW1lbnQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBfaW50ZXJzZWN0MmQodywgeCwgeSwgeik7XG4gICAgICB9IGVsc2UgaWYgKHcubGVuZ3RoID09PSAzKSB7XG4gICAgICAgIGlmICghXzNkKHcpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgd2l0aCAzIG51bWJlcnMgb3IgQmlnTnVtYmVycyBleHBlY3RlZCBmb3IgZmlyc3QgYXJndW1lbnQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghXzNkKHgpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgd2l0aCAzIG51bWJlcnMgb3IgQmlnTnVtYmVycyBleHBlY3RlZCBmb3Igc2Vjb25kIGFyZ3VtZW50Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIV8zZCh5KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IHdpdGggMyBudW1iZXJzIG9yIEJpZ051bWJlcnMgZXhwZWN0ZWQgZm9yIHRoaXJkIGFyZ3VtZW50Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIV8zZCh6KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IHdpdGggMyBudW1iZXJzIG9yIEJpZ051bWJlcnMgZXhwZWN0ZWQgZm9yIGZvdXJ0aCBhcmd1bWVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF9pbnRlcnNlY3QzZCh3WzBdLCB3WzFdLCB3WzJdLCB4WzBdLCB4WzFdLCB4WzJdLCB5WzBdLCB5WzFdLCB5WzJdLCB6WzBdLCB6WzFdLCB6WzJdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5cyB3aXRoIHR3byBvciB0aGVlIGRpbWVuc2lvbmFsIHBvaW50cyBleHBlY3RlZCcpO1xuICAgICAgfVxuICAgIH0sXG4gICAgJ01hdHJpeCwgTWF0cml4LCBNYXRyaXgnOiBmdW5jdGlvbiBNYXRyaXhNYXRyaXhNYXRyaXgoeCwgeSwgcGxhbmUpIHtcbiAgICAgIHJldHVybiBtYXRyaXgoaW50ZXJzZWN0KHgudmFsdWVPZigpLCB5LnZhbHVlT2YoKSwgcGxhbmUudmFsdWVPZigpKSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBNYXRyaXgsIE1hdHJpeCwgTWF0cml4JzogZnVuY3Rpb24gTWF0cml4TWF0cml4TWF0cml4TWF0cml4KHcsIHgsIHksIHopIHtcbiAgICAgIC8vIFRPRE86IG91dHB1dCBtYXRyaXggdHlwZSBzaG91bGQgbWF0Y2ggaW5wdXQgbWF0cml4IHR5cGVcbiAgICAgIHJldHVybiBtYXRyaXgoaW50ZXJzZWN0KHcudmFsdWVPZigpLCB4LnZhbHVlT2YoKSwgeS52YWx1ZU9mKCksIHoudmFsdWVPZigpKSk7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBfaXNOdW1lcmljKGEpIHtcbiAgICAvLyBpbnRlcnNlY3Qgc3VwcG9ydHMgbnVtYmVycyBhbmQgYmlnbnVtYmVyc1xuICAgIHJldHVybiB0eXBlb2YgYSA9PT0gJ251bWJlcicgfHwgKDAsIF9pcy5pc0JpZ051bWJlcikoYSk7XG4gIH1cblxuICBmdW5jdGlvbiBfMmQoeCkge1xuICAgIHJldHVybiB4Lmxlbmd0aCA9PT0gMiAmJiBfaXNOdW1lcmljKHhbMF0pICYmIF9pc051bWVyaWMoeFsxXSk7XG4gIH1cblxuICBmdW5jdGlvbiBfM2QoeCkge1xuICAgIHJldHVybiB4Lmxlbmd0aCA9PT0gMyAmJiBfaXNOdW1lcmljKHhbMF0pICYmIF9pc051bWVyaWMoeFsxXSkgJiYgX2lzTnVtZXJpYyh4WzJdKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF80ZCh4KSB7XG4gICAgcmV0dXJuIHgubGVuZ3RoID09PSA0ICYmIF9pc051bWVyaWMoeFswXSkgJiYgX2lzTnVtZXJpYyh4WzFdKSAmJiBfaXNOdW1lcmljKHhbMl0pICYmIF9pc051bWVyaWMoeFszXSk7XG4gIH1cblxuICBmdW5jdGlvbiBfaW50ZXJzZWN0MmQocDFhLCBwMWIsIHAyYSwgcDJiKSB7XG4gICAgdmFyIG8xID0gcDFhO1xuICAgIHZhciBvMiA9IHAyYTtcbiAgICB2YXIgZDEgPSBzdWJ0cmFjdChvMSwgcDFiKTtcbiAgICB2YXIgZDIgPSBzdWJ0cmFjdChvMiwgcDJiKTtcbiAgICB2YXIgZGV0ID0gc3VidHJhY3QobXVsdGlwbHlTY2FsYXIoZDFbMF0sIGQyWzFdKSwgbXVsdGlwbHlTY2FsYXIoZDJbMF0sIGQxWzFdKSk7XG5cbiAgICBpZiAoc21hbGxlcihhYnMoZGV0KSwgY29uZmlnLmVwc2lsb24pKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgZDIwbzExID0gbXVsdGlwbHlTY2FsYXIoZDJbMF0sIG8xWzFdKTtcbiAgICB2YXIgZDIxbzEwID0gbXVsdGlwbHlTY2FsYXIoZDJbMV0sIG8xWzBdKTtcbiAgICB2YXIgZDIwbzIxID0gbXVsdGlwbHlTY2FsYXIoZDJbMF0sIG8yWzFdKTtcbiAgICB2YXIgZDIxbzIwID0gbXVsdGlwbHlTY2FsYXIoZDJbMV0sIG8yWzBdKTtcbiAgICB2YXIgdCA9IGRpdmlkZVNjYWxhcihhZGRTY2FsYXIoc3VidHJhY3Qoc3VidHJhY3QoZDIwbzExLCBkMjFvMTApLCBkMjBvMjEpLCBkMjFvMjApLCBkZXQpO1xuICAgIHJldHVybiBhZGQobXVsdGlwbHkoZDEsIHQpLCBvMSk7XG4gIH1cblxuICBmdW5jdGlvbiBfaW50ZXJzZWN0M2RIZWxwZXIoYSwgYiwgYywgZCwgZSwgZiwgZywgaCwgaSwgaiwgaywgbCkge1xuICAgIC8vIChhIC0gYikqKGMgLSBkKSArIChlIC0gZikqKGcgLSBoKSArIChpIC0gaikqKGsgLSBsKVxuICAgIHZhciBhZGQxID0gbXVsdGlwbHlTY2FsYXIoc3VidHJhY3QoYSwgYiksIHN1YnRyYWN0KGMsIGQpKTtcbiAgICB2YXIgYWRkMiA9IG11bHRpcGx5U2NhbGFyKHN1YnRyYWN0KGUsIGYpLCBzdWJ0cmFjdChnLCBoKSk7XG4gICAgdmFyIGFkZDMgPSBtdWx0aXBseVNjYWxhcihzdWJ0cmFjdChpLCBqKSwgc3VidHJhY3QoaywgbCkpO1xuICAgIHJldHVybiBhZGRTY2FsYXIoYWRkU2NhbGFyKGFkZDEsIGFkZDIpLCBhZGQzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9pbnRlcnNlY3QzZCh4MSwgeTEsIHoxLCB4MiwgeTIsIHoyLCB4MywgeTMsIHozLCB4NCwgeTQsIHo0KSB7XG4gICAgdmFyIGQxMzQzID0gX2ludGVyc2VjdDNkSGVscGVyKHgxLCB4MywgeDQsIHgzLCB5MSwgeTMsIHk0LCB5MywgejEsIHozLCB6NCwgejMpO1xuXG4gICAgdmFyIGQ0MzIxID0gX2ludGVyc2VjdDNkSGVscGVyKHg0LCB4MywgeDIsIHgxLCB5NCwgeTMsIHkyLCB5MSwgejQsIHozLCB6MiwgejEpO1xuXG4gICAgdmFyIGQxMzIxID0gX2ludGVyc2VjdDNkSGVscGVyKHgxLCB4MywgeDIsIHgxLCB5MSwgeTMsIHkyLCB5MSwgejEsIHozLCB6MiwgejEpO1xuXG4gICAgdmFyIGQ0MzQzID0gX2ludGVyc2VjdDNkSGVscGVyKHg0LCB4MywgeDQsIHgzLCB5NCwgeTMsIHk0LCB5MywgejQsIHozLCB6NCwgejMpO1xuXG4gICAgdmFyIGQyMTIxID0gX2ludGVyc2VjdDNkSGVscGVyKHgyLCB4MSwgeDIsIHgxLCB5MiwgeTEsIHkyLCB5MSwgejIsIHoxLCB6MiwgejEpO1xuXG4gICAgdmFyIHRhID0gZGl2aWRlU2NhbGFyKHN1YnRyYWN0KG11bHRpcGx5U2NhbGFyKGQxMzQzLCBkNDMyMSksIG11bHRpcGx5U2NhbGFyKGQxMzIxLCBkNDM0MykpLCBzdWJ0cmFjdChtdWx0aXBseVNjYWxhcihkMjEyMSwgZDQzNDMpLCBtdWx0aXBseVNjYWxhcihkNDMyMSwgZDQzMjEpKSk7XG4gICAgdmFyIHRiID0gZGl2aWRlU2NhbGFyKGFkZFNjYWxhcihkMTM0MywgbXVsdGlwbHlTY2FsYXIodGEsIGQ0MzIxKSksIGQ0MzQzKTtcbiAgICB2YXIgcGF4ID0gYWRkU2NhbGFyKHgxLCBtdWx0aXBseVNjYWxhcih0YSwgc3VidHJhY3QoeDIsIHgxKSkpO1xuICAgIHZhciBwYXkgPSBhZGRTY2FsYXIoeTEsIG11bHRpcGx5U2NhbGFyKHRhLCBzdWJ0cmFjdCh5MiwgeTEpKSk7XG4gICAgdmFyIHBheiA9IGFkZFNjYWxhcih6MSwgbXVsdGlwbHlTY2FsYXIodGEsIHN1YnRyYWN0KHoyLCB6MSkpKTtcbiAgICB2YXIgcGJ4ID0gYWRkU2NhbGFyKHgzLCBtdWx0aXBseVNjYWxhcih0Yiwgc3VidHJhY3QoeDQsIHgzKSkpO1xuICAgIHZhciBwYnkgPSBhZGRTY2FsYXIoeTMsIG11bHRpcGx5U2NhbGFyKHRiLCBzdWJ0cmFjdCh5NCwgeTMpKSk7XG4gICAgdmFyIHBieiA9IGFkZFNjYWxhcih6MywgbXVsdGlwbHlTY2FsYXIodGIsIHN1YnRyYWN0KHo0LCB6MykpKTtcblxuICAgIGlmIChlcXVhbFNjYWxhcihwYXgsIHBieCkgJiYgZXF1YWxTY2FsYXIocGF5LCBwYnkpICYmIGVxdWFsU2NhbGFyKHBheiwgcGJ6KSkge1xuICAgICAgcmV0dXJuIFtwYXgsIHBheSwgcGF6XTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gX2ludGVyc2VjdExpbmVQbGFuZSh4MSwgeTEsIHoxLCB4MiwgeTIsIHoyLCB4LCB5LCB6LCBjKSB7XG4gICAgdmFyIHgxeCA9IG11bHRpcGx5U2NhbGFyKHgxLCB4KTtcbiAgICB2YXIgeDJ4ID0gbXVsdGlwbHlTY2FsYXIoeDIsIHgpO1xuICAgIHZhciB5MXkgPSBtdWx0aXBseVNjYWxhcih5MSwgeSk7XG4gICAgdmFyIHkyeSA9IG11bHRpcGx5U2NhbGFyKHkyLCB5KTtcbiAgICB2YXIgejF6ID0gbXVsdGlwbHlTY2FsYXIoejEsIHopO1xuICAgIHZhciB6MnogPSBtdWx0aXBseVNjYWxhcih6Miwgeik7XG4gICAgdmFyIHQgPSBkaXZpZGVTY2FsYXIoc3VidHJhY3Qoc3VidHJhY3Qoc3VidHJhY3QoYywgeDF4KSwgeTF5KSwgejF6KSwgc3VidHJhY3Qoc3VidHJhY3Qoc3VidHJhY3QoYWRkU2NhbGFyKGFkZFNjYWxhcih4MngsIHkyeSksIHoyeiksIHgxeCksIHkxeSksIHoxeikpO1xuICAgIHZhciBweCA9IGFkZFNjYWxhcih4MSwgbXVsdGlwbHlTY2FsYXIodCwgc3VidHJhY3QoeDIsIHgxKSkpO1xuICAgIHZhciBweSA9IGFkZFNjYWxhcih5MSwgbXVsdGlwbHlTY2FsYXIodCwgc3VidHJhY3QoeTIsIHkxKSkpO1xuICAgIHZhciBweiA9IGFkZFNjYWxhcih6MSwgbXVsdGlwbHlTY2FsYXIodCwgc3VidHJhY3QoejIsIHoxKSkpO1xuICAgIHJldHVybiBbcHgsIHB5LCBwel07IC8vIFRPRE86IEFkZCBjYXNlcyB3aGVuIGxpbmUgaXMgcGFyYWxsZWwgdG8gdGhlIHBsYW5lOlxuICAgIC8vICAgICAgIChhKSBubyBpbnRlcnNlY3Rpb24sXG4gICAgLy8gICAgICAgKGIpIGxpbmUgY29udGFpbmVkIGluIHBsYW5lXG4gIH1cblxuICByZXR1cm4gaW50ZXJzZWN0O1xufSk7XG5leHBvcnRzLmNyZWF0ZUludGVyc2VjdCA9IGNyZWF0ZUludGVyc2VjdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQW5kID0gdm9pZCAwO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wMlwiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTExXCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA2XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdhbmQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2VxdWFsU2NhbGFyJywgJ3plcm9zJywgJ25vdCddO1xudmFyIGNyZWF0ZUFuZCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIHplcm9zID0gX3JlZi56ZXJvcyxcbiAgICAgIG5vdCA9IF9yZWYubm90O1xuICB2YXIgYWxnb3JpdGhtMDIgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNiA9ICgwLCBfYWxnb3JpdGhtNS5jcmVhdGVBbGdvcml0aG0wNikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMSA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0xMSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogTG9naWNhbCBgYW5kYC4gVGVzdCB3aGV0aGVyIHR3byB2YWx1ZXMgYXJlIGJvdGggZGVmaW5lZCB3aXRoIGEgbm9uemVyby9ub25lbXB0eSB2YWx1ZS5cbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmFuZCh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5hbmQoMiwgNCkgICAvLyByZXR1cm5zIHRydWVcbiAgICpcbiAgICogICAgYSA9IFsyLCAwLCAwXVxuICAgKiAgICBiID0gWzMsIDcsIDBdXG4gICAqICAgIGMgPSAwXG4gICAqXG4gICAqICAgIG1hdGguYW5kKGEsIGIpICAgLy8gcmV0dXJucyBbdHJ1ZSwgZmFsc2UsIGZhbHNlXVxuICAgKiAgICBtYXRoLmFuZChhLCBjKSAgIC8vIHJldHVybnMgW2ZhbHNlLCBmYWxzZSwgZmFsc2VdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBub3QsIG9yLCB4b3JcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCBGaXJzdCB2YWx1ZSB0byBjaGVja1xuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB5IFNlY29uZCB2YWx1ZSB0byBjaGVja1xuICAgKiBAcmV0dXJuIHtib29sZWFuIHwgQXJyYXkgfCBNYXRyaXh9XG4gICAqICAgICAgICAgICAgUmV0dXJucyB0cnVlIHdoZW4gYm90aCBpbnB1dHMgYXJlIGRlZmluZWQgd2l0aCBhIG5vbnplcm8vbm9uZW1wdHkgdmFsdWUuXG4gICAqL1xuXG4gIHZhciBhbmQgPSB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciwgbnVtYmVyJzogX251bWJlci5hbmROdW1iZXIsXG4gICAgJ0NvbXBsZXgsIENvbXBsZXgnOiBmdW5jdGlvbiBDb21wbGV4Q29tcGxleCh4LCB5KSB7XG4gICAgICByZXR1cm4gKHgucmUgIT09IDAgfHwgeC5pbSAhPT0gMCkgJiYgKHkucmUgIT09IDAgfHwgeS5pbSAhPT0gMCk7XG4gICAgfSxcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuICF4LmlzWmVybygpICYmICF5LmlzWmVybygpICYmICF4LmlzTmFOKCkgJiYgIXkuaXNOYU4oKTtcbiAgICB9LFxuICAgICdVbml0LCBVbml0JzogZnVuY3Rpb24gVW5pdFVuaXQoeCwgeSkge1xuICAgICAgcmV0dXJuIGFuZCh4LnZhbHVlIHx8IDAsIHkudmFsdWUgfHwgMCk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTA2KHgsIHksIGFuZCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDIoeSwgeCwgYW5kLCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHgsIHksIGFuZCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIGFuZCk7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYW5kKG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbmQobWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFuZCh4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhclxuICAgICAgaWYgKG5vdCh5KSkge1xuICAgICAgICAvLyByZXR1cm4gemVybyBtYXRyaXhcbiAgICAgICAgcmV0dXJuIHplcm9zKHguc2l6ZSgpLCB4LnN0b3JhZ2UoKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhbGdvcml0aG0xMSh4LCB5LCBhbmQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgLy8gY2hlY2sgc2NhbGFyXG4gICAgICBpZiAobm90KHkpKSB7XG4gICAgICAgIC8vIHJldHVybiB6ZXJvIG1hdHJpeFxuICAgICAgICByZXR1cm4gemVyb3MoeC5zaXplKCksIHguc3RvcmFnZSgpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIGFuZCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ2FueSwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gYW55U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhclxuICAgICAgaWYgKG5vdCh4KSkge1xuICAgICAgICAvLyByZXR1cm4gemVybyBtYXRyaXhcbiAgICAgICAgcmV0dXJuIHplcm9zKHguc2l6ZSgpLCB4LnN0b3JhZ2UoKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhbGdvcml0aG0xMSh5LCB4LCBhbmQsIHRydWUpO1xuICAgIH0sXG4gICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyBjaGVjayBzY2FsYXJcbiAgICAgIGlmIChub3QoeCkpIHtcbiAgICAgICAgLy8gcmV0dXJuIHplcm8gbWF0cml4XG4gICAgICAgIHJldHVybiB6ZXJvcyh4LnNpemUoKSwgeC5zdG9yYWdlKCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgYW5kLCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFuZChtYXRyaXgoeCksIHkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFuZCh4LCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYW5kO1xufSk7XG5leHBvcnRzLmNyZWF0ZUFuZCA9IGNyZWF0ZUFuZDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTm90ID0gdm9pZCAwO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnbm90JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlTm90ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogTG9naWNhbCBgbm90YC4gRmxpcHMgYm9vbGVhbiB2YWx1ZSBvZiBhIGdpdmVuIHBhcmFtZXRlci5cbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLm5vdCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5ub3QoMikgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGgubm90KDApICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGgubm90KHRydWUpICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKlxuICAgKiAgICBhID0gWzIsIC03LCAwXVxuICAgKiAgICBtYXRoLm5vdChhKSAgICAgIC8vIHJldHVybnMgW2ZhbHNlLCBmYWxzZSwgdHJ1ZV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGFuZCwgb3IsIHhvclxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4IEZpcnN0IHZhbHVlIHRvIGNoZWNrXG4gICAqIEByZXR1cm4ge2Jvb2xlYW4gfCBBcnJheSB8IE1hdHJpeH1cbiAgICogICAgICAgICAgICBSZXR1cm5zIHRydWUgd2hlbiBpbnB1dCBpcyBhIHplcm8gb3IgZW1wdHkgdmFsdWUuXG4gICAqL1xuICB2YXIgbm90ID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogX251bWJlci5ub3ROdW1iZXIsXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5yZSA9PT0gMCAmJiB4LmltID09PSAwO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHguaXNaZXJvKCkgfHwgeC5pc05hTigpO1xuICAgIH0sXG4gICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7XG4gICAgICByZXR1cm4geC52YWx1ZSAhPT0gbnVsbCA/IG5vdCh4LnZhbHVlKSA6IHRydWU7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIG5vdCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG5vdDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVOb3QgPSBjcmVhdGVOb3Q7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU9yID0gdm9pZCAwO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wM1wiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEyXCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA1XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdvcic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnZXF1YWxTY2FsYXInLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVPciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTAzID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMDMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNSA9ICgwLCBfYWxnb3JpdGhtNS5jcmVhdGVBbGdvcml0aG0wNSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMiA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0xMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogTG9naWNhbCBgb3JgLiBUZXN0IGlmIGF0IGxlYXN0IG9uZSB2YWx1ZSBpcyBkZWZpbmVkIHdpdGggYSBub256ZXJvL25vbmVtcHR5IHZhbHVlLlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgub3IoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgub3IoMiwgNCkgICAvLyByZXR1cm5zIHRydWVcbiAgICpcbiAgICogICAgYSA9IFsyLCA1LCAwXVxuICAgKiAgICBiID0gWzAsIDIyLCAwXVxuICAgKiAgICBjID0gMFxuICAgKlxuICAgKiAgICBtYXRoLm9yKGEsIGIpICAgLy8gcmV0dXJucyBbdHJ1ZSwgdHJ1ZSwgZmFsc2VdXG4gICAqICAgIG1hdGgub3IoYiwgYykgICAvLyByZXR1cm5zIFtmYWxzZSwgdHJ1ZSwgZmFsc2VdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBhbmQsIG5vdCwgeG9yXG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggRmlyc3QgdmFsdWUgdG8gY2hlY2tcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geSBTZWNvbmQgdmFsdWUgdG8gY2hlY2tcbiAgICogQHJldHVybiB7Ym9vbGVhbiB8IEFycmF5IHwgTWF0cml4fVxuICAgKiAgICAgICAgICAgIFJldHVybnMgdHJ1ZSB3aGVuIG9uZSBvZiB0aGUgaW5wdXRzIGlzIGRlZmluZWQgd2l0aCBhIG5vbnplcm8vbm9uZW1wdHkgdmFsdWUuXG4gICAqL1xuXG4gIHZhciBvciA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfbnVtYmVyLm9yTnVtYmVyLFxuICAgICdDb21wbGV4LCBDb21wbGV4JzogZnVuY3Rpb24gQ29tcGxleENvbXBsZXgoeCwgeSkge1xuICAgICAgcmV0dXJuIHgucmUgIT09IDAgfHwgeC5pbSAhPT0gMCB8fCB5LnJlICE9PSAwIHx8IHkuaW0gIT09IDA7XG4gICAgfSxcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuICF4LmlzWmVybygpICYmICF4LmlzTmFOKCkgfHwgIXkuaXNaZXJvKCkgJiYgIXkuaXNOYU4oKTtcbiAgICB9LFxuICAgICdVbml0LCBVbml0JzogZnVuY3Rpb24gVW5pdFVuaXQoeCwgeSkge1xuICAgICAgcmV0dXJuIG9yKHgudmFsdWUgfHwgMCwgeS52YWx1ZSB8fCAwKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDUoeCwgeSwgb3IpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeSwgeCwgb3IsIHRydWUpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeCwgeSwgb3IsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBvcik7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gb3IobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIG9yKG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBvcih4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih4LCB5LCBvciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBEZW5zZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgb3IsIGZhbHNlKTtcbiAgICB9LFxuICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeSwgeCwgb3IsIHRydWUpO1xuICAgIH0sXG4gICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgb3IsIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBhbnknOiBmdW5jdGlvbiBBcnJheUFueSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCBvciwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgb3IsIHRydWUpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gb3I7XG59KTtcbmV4cG9ydHMuY3JlYXRlT3IgPSBjcmVhdGVPcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlWG9yID0gdm9pZCAwO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wM1wiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA3XCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTJcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xM1wiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICd4b3InO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlWG9yID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMDMgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTA3ID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTA3KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEyID0gKDAsIF9hbGdvcml0aG0zLmNyZWF0ZUFsZ29yaXRobTEyKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEzID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTEzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTUuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBMb2dpY2FsIGB4b3JgLiBUZXN0IHdoZXRoZXIgb25lIGFuZCBvbmx5IG9uZSB2YWx1ZSBpcyBkZWZpbmVkIHdpdGggYSBub256ZXJvL25vbmVtcHR5IHZhbHVlLlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgueG9yKHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnhvcigyLCA0KSAgIC8vIHJldHVybnMgZmFsc2VcbiAgICpcbiAgICogICAgYSA9IFsyLCAwLCAwXVxuICAgKiAgICBiID0gWzIsIDcsIDBdXG4gICAqICAgIGMgPSAwXG4gICAqXG4gICAqICAgIG1hdGgueG9yKGEsIGIpICAgLy8gcmV0dXJucyBbZmFsc2UsIHRydWUsIGZhbHNlXVxuICAgKiAgICBtYXRoLnhvcihhLCBjKSAgIC8vIHJldHVybnMgW3RydWUsIGZhbHNlLCBmYWxzZV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGFuZCwgbm90LCBvclxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4IEZpcnN0IHZhbHVlIHRvIGNoZWNrXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHkgU2Vjb25kIHZhbHVlIHRvIGNoZWNrXG4gICAqIEByZXR1cm4ge2Jvb2xlYW4gfCBBcnJheSB8IE1hdHJpeH1cbiAgICogICAgICAgICAgICBSZXR1cm5zIHRydWUgd2hlbiBvbmUgYW5kIG9ubHkgb25lIGlucHV0IGlzIGRlZmluZWQgd2l0aCBhIG5vbnplcm8vbm9uZW1wdHkgdmFsdWUuXG4gICAqL1xuXG4gIHZhciB4b3IgPSB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciwgbnVtYmVyJzogX251bWJlci54b3JOdW1iZXIsXG4gICAgJ0NvbXBsZXgsIENvbXBsZXgnOiBmdW5jdGlvbiBDb21wbGV4Q29tcGxleCh4LCB5KSB7XG4gICAgICByZXR1cm4gKHgucmUgIT09IDAgfHwgeC5pbSAhPT0gMCkgIT09ICh5LnJlICE9PSAwIHx8IHkuaW0gIT09IDApO1xuICAgIH0sXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQmlnTnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiAoIXguaXNaZXJvKCkgJiYgIXguaXNOYU4oKSkgIT09ICgheS5pc1plcm8oKSAmJiAheS5pc05hTigpKTtcbiAgICB9LFxuICAgICdVbml0LCBVbml0JzogZnVuY3Rpb24gVW5pdFVuaXQoeCwgeSkge1xuICAgICAgcmV0dXJuIHhvcih4LnZhbHVlIHx8IDAsIHkudmFsdWUgfHwgMCk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTA3KHgsIHksIHhvcik7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh5LCB4LCB4b3IsIHRydWUpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeCwgeSwgeG9yLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTMoeCwgeSwgeG9yKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiB4b3IobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHhvcihtYXRyaXgoeCksIHkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4geG9yKHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEyKHgsIHksIHhvciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBEZW5zZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgeG9yLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnYW55LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEyKHksIHgsIHhvciwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnYW55LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIGFueURlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCB4b3IsIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBhbnknOiBmdW5jdGlvbiBBcnJheUFueSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCB4b3IsIGZhbHNlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnYW55LCBBcnJheSc6IGZ1bmN0aW9uIGFueUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeSksIHgsIHhvciwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB4b3I7XG59KTtcbmV4cG9ydHMuY3JlYXRlWG9yID0gY3JlYXRlWG9yOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBcHBseSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfSW5kZXhFcnJvciA9IHJlcXVpcmUoXCIuLi8uLi9lcnJvci9JbmRleEVycm9yXCIpO1xuXG52YXIgbmFtZSA9ICdhcHBseSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdpc0ludGVnZXInXTtcbnZhciBjcmVhdGVBcHBseSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBpc0ludGVnZXIgPSBfcmVmLmlzSW50ZWdlcjtcblxuICAvKipcbiAgICogQXBwbHkgYSBmdW5jdGlvbiB0aGF0IG1hcHMgYW4gYXJyYXkgdG8gYSBzY2FsYXJcbiAgICogYWxvbmcgYSBnaXZlbiBheGlzIG9mIGEgbWF0cml4IG9yIGFycmF5LlxuICAgKiBSZXR1cm5zIGEgbmV3IG1hdHJpeCBvciBhcnJheSB3aXRoIG9uZSBsZXNzIGRpbWVuc2lvbiB0aGFuIHRoZSBpbnB1dC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5hcHBseShBLCBkaW0sIGNhbGxiYWNrKVxuICAgKlxuICAgKiBXaGVyZTpcbiAgICpcbiAgICogLSBgZGltOiBudW1iZXJgIGlzIGEgemVyby1iYXNlZCBkaW1lbnNpb24gb3ZlciB3aGljaCB0byBjb25jYXRlbmF0ZSB0aGUgbWF0cmljZXMuXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBjb25zdCBBID0gW1sxLCAyXSwgWzMsIDRdXVxuICAgKiAgICBjb25zdCBzdW0gPSBtYXRoLnN1bVxuICAgKlxuICAgKiAgICBtYXRoLmFwcGx5KEEsIDAsIHN1bSkgICAgICAgICAgICAgLy8gcmV0dXJucyBbNCwgNl1cbiAgICogICAgbWF0aC5hcHBseShBLCAxLCBzdW0pICAgICAgICAgICAgIC8vIHJldHVybnMgWzMsIDddXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBtYXAsIGZpbHRlciwgZm9yRWFjaFxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSBhcnJheSAgIFRoZSBpbnB1dCBNYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRpbSAgICAgICAgICAgICBUaGUgZGltZW5zaW9uIGFsb25nIHdoaWNoIHRoZSBjYWxsYmFjayBpcyBhcHBsaWVkXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgICAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgYXBwbGllZC4gVGhpcyBGdW5jdGlvblxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZCB0YWtlIGFuIGFycmF5IG9yIDEtZCBtYXRyaXggYXMgYW4gaW5wdXQgYW5kXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEgbnVtYmVyLlxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gcmVzICAgIFRoZSByZXNpZHVhbCBtYXRyaXggd2l0aCB0aGUgZnVuY3Rpb24gYXBwbGllZCBvdmVyIHNvbWUgZGltZW5zaW9uLlxuICAgKi9cbiAgdmFyIGFwcGx5ID0gdHlwZWQobmFtZSwge1xuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyLCBmdW5jdGlvbic6IGZ1bmN0aW9uIEFycmF5TWF0cml4TnVtYmVyQmlnTnVtYmVyRnVuY3Rpb24obWF0LCBkaW0sIGNhbGxiYWNrKSB7XG4gICAgICBpZiAoIWlzSW50ZWdlcihkaW0pKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludGVnZXIgbnVtYmVyIGV4cGVjdGVkIGZvciBkaW1lbnNpb24nKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHNpemUgPSBBcnJheS5pc0FycmF5KG1hdCkgPyAoMCwgX2FycmF5LmFycmF5U2l6ZSkobWF0KSA6IG1hdC5zaXplKCk7XG5cbiAgICAgIGlmIChkaW0gPCAwIHx8IGRpbSA+PSBzaXplLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgX0luZGV4RXJyb3IuSW5kZXhFcnJvcihkaW0sIHNpemUubGVuZ3RoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCgwLCBfaXMuaXNNYXRyaXgpKG1hdCkpIHtcbiAgICAgICAgcmV0dXJuIG1hdC5jcmVhdGUoX2FwcGx5KG1hdC52YWx1ZU9mKCksIGRpbSwgY2FsbGJhY2spKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBfYXBwbHkobWF0LCBkaW0sIGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYXBwbHk7XG59KTtcbi8qKlxuICogUmVjdXJzaXZlbHkgcmVkdWNlIGEgbWF0cml4XG4gKiBAcGFyYW0ge0FycmF5fSBtYXRcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaW1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJucyB7QXJyYXl9IHJldFxuICogQHByaXZhdGVcbiAqL1xuXG5leHBvcnRzLmNyZWF0ZUFwcGx5ID0gY3JlYXRlQXBwbHk7XG5cbmZ1bmN0aW9uIF9hcHBseShtYXQsIGRpbSwgY2FsbGJhY2spIHtcbiAgdmFyIGksIHJldCwgdHJhbjtcblxuICBpZiAoZGltIDw9IDApIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkobWF0WzBdKSkge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKG1hdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyYW4gPSBfc3dpdGNoKG1hdCk7XG4gICAgICByZXQgPSBbXTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IHRyYW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmV0W2ldID0gX2FwcGx5KHRyYW5baV0sIGRpbSAtIDEsIGNhbGxiYWNrKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0ID0gW107XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbWF0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXRbaV0gPSBfYXBwbHkobWF0W2ldLCBkaW0gLSAxLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxufVxuLyoqXG4gKiBUcmFuc3Bvc2UgYSBtYXRyaXhcbiAqIEBwYXJhbSB7QXJyYXl9IG1hdFxuICogQHJldHVybnMge0FycmF5fSByZXRcbiAqIEBwcml2YXRlXG4gKi9cblxuXG5mdW5jdGlvbiBfc3dpdGNoKG1hdCkge1xuICB2YXIgSSA9IG1hdC5sZW5ndGg7XG4gIHZhciBKID0gbWF0WzBdLmxlbmd0aDtcbiAgdmFyIGksIGo7XG4gIHZhciByZXQgPSBbXTtcblxuICBmb3IgKGogPSAwOyBqIDwgSjsgaisrKSB7XG4gICAgdmFyIHRtcCA9IFtdO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IEk7IGkrKykge1xuICAgICAgdG1wLnB1c2gobWF0W2ldW2pdKTtcbiAgICB9XG5cbiAgICByZXQucHVzaCh0bXApO1xuICB9XG5cbiAgcmV0dXJuIHJldDtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ29sdW1uID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgbmFtZSA9ICdjb2x1bW4nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnSW5kZXgnLCAnbWF0cml4JywgJ3JhbmdlJ107XG52YXIgY3JlYXRlQ29sdW1uID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIEluZGV4ID0gX3JlZi5JbmRleCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgcmFuZ2UgPSBfcmVmLnJhbmdlO1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBjb2x1bW4gZnJvbSBhIE1hdHJpeC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5jb2x1bW4odmFsdWUsIGluZGV4KVxuICAgKlxuICAgKiBFeGFtcGxlOlxuICAgKlxuICAgKiAgICAgLy8gZ2V0IGEgY29sdW1uXG4gICAqICAgICBjb25zdCBkID0gW1sxLCAyXSwgWzMsIDRdXVxuICAgKiAgICAgbWF0aC5jb2x1bW4oZCwgMSkgLy8gcmV0dXJucyBbWzJdLCBbNF1dXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgcm93XG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXggfSB2YWx1ZSAgIEFuIGFycmF5IG9yIG1hdHJpeFxuICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uICAgICAgICAgICBUaGUgaW5kZXggb2YgdGhlIGNvbHVtblxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gICAgICAgICBUaGUgcmV0cmlldmVkIGNvbHVtblxuICAgKi9cbiAgdmFyIGNvbHVtbiA9IHR5cGVkKG5hbWUsIHtcbiAgICAnTWF0cml4LCBudW1iZXInOiBfY29sdW1uLFxuICAgICdBcnJheSwgbnVtYmVyJzogZnVuY3Rpb24gQXJyYXlOdW1iZXIodmFsdWUsIGNvbHVtbikge1xuICAgICAgcmV0dXJuIF9jb2x1bW4obWF0cml4KCgwLCBfb2JqZWN0LmNsb25lKSh2YWx1ZSkpLCBjb2x1bW4pLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY29sdW1uO1xuICAvKipcbiAgICogUmV0cmlldmUgYSBjb2x1bW4gb2YgYSBtYXRyaXhcbiAgICogQHBhcmFtIHtNYXRyaXggfSB2YWx1ZSAgQSBtYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiAgVGhlIGluZGV4IG9mIHRoZSBjb2x1bW5cbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgVGhlIHJldHJpZXZlZCBjb2x1bW5cbiAgICovXG5cbiAgZnVuY3Rpb24gX2NvbHVtbih2YWx1ZSwgY29sdW1uKSB7XG4gICAgLy8gY2hlY2sgZGltZW5zaW9uc1xuICAgIGlmICh2YWx1ZS5zaXplKCkubGVuZ3RoICE9PSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ09ubHkgdHdvIGRpbWVuc2lvbmFsIG1hdHJpeCBpcyBzdXBwb3J0ZWQnKTtcbiAgICB9XG5cbiAgICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKGNvbHVtbiwgdmFsdWUuc2l6ZSgpWzFdKTtcbiAgICB2YXIgcm93UmFuZ2UgPSByYW5nZSgwLCB2YWx1ZS5zaXplKClbMF0pO1xuICAgIHZhciBpbmRleCA9IG5ldyBJbmRleChyb3dSYW5nZSwgY29sdW1uKTtcbiAgICByZXR1cm4gdmFsdWUuc3Vic2V0KGluZGV4KTtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZUNvbHVtbiA9IGNyZWF0ZUNvbHVtbjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ29uY2F0ID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfSW5kZXhFcnJvciA9IHJlcXVpcmUoXCIuLi8uLi9lcnJvci9JbmRleEVycm9yXCIpO1xuXG52YXIgX0RpbWVuc2lvbkVycm9yID0gcmVxdWlyZShcIi4uLy4uL2Vycm9yL0RpbWVuc2lvbkVycm9yXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnY29uY2F0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdpc0ludGVnZXInXTtcbnZhciBjcmVhdGVDb25jYXQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBpc0ludGVnZXIgPSBfcmVmLmlzSW50ZWdlcjtcblxuICAvKipcbiAgICogQ29uY2F0ZW5hdGUgdHdvIG9yIG1vcmUgbWF0cmljZXMuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguY29uY2F0KEEsIEIsIEMsIC4uLilcbiAgICogICAgIG1hdGguY29uY2F0KEEsIEIsIEMsIC4uLiwgZGltKVxuICAgKlxuICAgKiBXaGVyZTpcbiAgICpcbiAgICogLSBgZGltOiBudW1iZXJgIGlzIGEgemVyby1iYXNlZCBkaW1lbnNpb24gb3ZlciB3aGljaCB0byBjb25jYXRlbmF0ZSB0aGUgbWF0cmljZXMuXG4gICAqICAgQnkgZGVmYXVsdCB0aGUgbGFzdCBkaW1lbnNpb24gb2YgdGhlIG1hdHJpY2VzLlxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgY29uc3QgQSA9IFtbMSwgMl0sIFs1LCA2XV1cbiAgICogICAgY29uc3QgQiA9IFtbMywgNF0sIFs3LCA4XV1cbiAgICpcbiAgICogICAgbWF0aC5jb25jYXQoQSwgQikgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIFtbMSwgMiwgMywgNF0sIFs1LCA2LCA3LCA4XV1cbiAgICogICAgbWF0aC5jb25jYXQoQSwgQiwgMCkgICAgICAgICAgICAgICAvLyByZXR1cm5zIFtbMSwgMl0sIFs1LCA2XSwgWzMsIDRdLCBbNywgOF1dXG4gICAqICAgIG1hdGguY29uY2F0KCdoZWxsbycsICcgJywgJ3dvcmxkJykgLy8gcmV0dXJucyAnaGVsbG8gd29ybGQnXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBzaXplLCBzcXVlZXplLCBzdWJzZXQsIHRyYW5zcG9zZVxuICAgKlxuICAgKiBAcGFyYW0gey4uLiBBcnJheSB8IE1hdHJpeH0gYXJncyAgICAgVHdvIG9yIG1vcmUgbWF0cmljZXNcbiAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXh9IENvbmNhdGVuYXRlZCBtYXRyaXhcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgLy8gVE9ETzogY2hhbmdlIHNpZ25hdHVyZSB0byAnLi4uQXJyYXkgfCBNYXRyaXgsIGRpbT8nIHdoZW4gc3VwcG9ydGVkXG4gICAgJy4uLkFycmF5IHwgTWF0cml4IHwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhOdW1iZXJCaWdOdW1iZXIoYXJncykge1xuICAgICAgdmFyIGk7XG4gICAgICB2YXIgbGVuID0gYXJncy5sZW5ndGg7XG4gICAgICB2YXIgZGltID0gLTE7IC8vIHplcm8tYmFzZWQgZGltZW5zaW9uXG5cbiAgICAgIHZhciBwcmV2RGltO1xuICAgICAgdmFyIGFzTWF0cml4ID0gZmFsc2U7XG4gICAgICB2YXIgbWF0cmljZXMgPSBbXTsgLy8gY29udGFpbnMgbXVsdGkgZGltZW5zaW9uYWwgYXJyYXlzXG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICB2YXIgYXJnID0gYXJnc1tpXTsgLy8gdGVzdCB3aGV0aGVyIHdlIG5lZWQgdG8gcmV0dXJuIGEgTWF0cml4IChpZiBub3Qgd2UgcmV0dXJuIGFuIEFycmF5KVxuXG4gICAgICAgIGlmICgoMCwgX2lzLmlzTWF0cml4KShhcmcpKSB7XG4gICAgICAgICAgYXNNYXRyaXggPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKGFyZykgfHwgKDAsIF9pcy5pc0JpZ051bWJlcikoYXJnKSkge1xuICAgICAgICAgIGlmIChpICE9PSBsZW4gLSAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RpbWVuc2lvbiBtdXN0IGJlIHNwZWNpZmllZCBhcyBsYXN0IGFyZ3VtZW50Jyk7XG4gICAgICAgICAgfSAvLyBsYXN0IGFyZ3VtZW50IGNvbnRhaW5zIHRoZSBkaW1lbnNpb24gb24gd2hpY2ggdG8gY29uY2F0ZW5hdGVcblxuXG4gICAgICAgICAgcHJldkRpbSA9IGRpbTtcbiAgICAgICAgICBkaW0gPSBhcmcudmFsdWVPZigpOyAvLyBjaGFuZ2UgQmlnTnVtYmVyIHRvIG51bWJlclxuXG4gICAgICAgICAgaWYgKCFpc0ludGVnZXIoZGltKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW50ZWdlciBudW1iZXIgZXhwZWN0ZWQgZm9yIGRpbWVuc2lvbicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChkaW0gPCAwIHx8IGkgPiAwICYmIGRpbSA+IHByZXZEaW0pIHtcbiAgICAgICAgICAgIC8vIFRPRE86IHdvdWxkIGJlIG1vcmUgY2xlYXIgd2hlbiB0aHJvd2luZyBhIERpbWVuc2lvbkVycm9yIGhlcmVcbiAgICAgICAgICAgIHRocm93IG5ldyBfSW5kZXhFcnJvci5JbmRleEVycm9yKGRpbSwgcHJldkRpbSArIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB0aGlzIGlzIGEgbWF0cml4IG9yIGFycmF5XG4gICAgICAgICAgdmFyIG0gPSAoMCwgX29iamVjdC5jbG9uZSkoYXJnKS52YWx1ZU9mKCk7XG4gICAgICAgICAgdmFyIHNpemUgPSAoMCwgX2FycmF5LmFycmF5U2l6ZSkobSk7XG4gICAgICAgICAgbWF0cmljZXNbaV0gPSBtO1xuICAgICAgICAgIHByZXZEaW0gPSBkaW07XG4gICAgICAgICAgZGltID0gc2l6ZS5sZW5ndGggLSAxOyAvLyB2ZXJpZnkgd2hldGhlciBlYWNoIG9mIHRoZSBtYXRyaWNlcyBoYXMgdGhlIHNhbWUgbnVtYmVyIG9mIGRpbWVuc2lvbnNcblxuICAgICAgICAgIGlmIChpID4gMCAmJiBkaW0gIT09IHByZXZEaW0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3IocHJldkRpbSArIDEsIGRpbSArIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobWF0cmljZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQXQgbGVhc3Qgb25lIG1hdHJpeCBleHBlY3RlZCcpO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVzID0gbWF0cmljZXMuc2hpZnQoKTtcblxuICAgICAgd2hpbGUgKG1hdHJpY2VzLmxlbmd0aCkge1xuICAgICAgICByZXMgPSBfY29uY2F0KHJlcywgbWF0cmljZXMuc2hpZnQoKSwgZGltLCAwKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFzTWF0cml4ID8gbWF0cml4KHJlcykgOiByZXM7XG4gICAgfSxcbiAgICAnLi4uc3RyaW5nJzogZnVuY3Rpb24gc3RyaW5nKGFyZ3MpIHtcbiAgICAgIHJldHVybiBhcmdzLmpvaW4oJycpO1xuICAgIH1cbiAgfSk7XG59KTtcbi8qKlxuICogUmVjdXJzaXZlbHkgY29uY2F0ZW5hdGUgdHdvIG1hdHJpY2VzLlxuICogVGhlIGNvbnRlbnRzIG9mIHRoZSBtYXRyaWNlcyBpcyBub3QgY2xvbmVkLlxuICogQHBhcmFtIHtBcnJheX0gYSAgICAgICAgICAgICBNdWx0aSBkaW1lbnNpb25hbCBhcnJheVxuICogQHBhcmFtIHtBcnJheX0gYiAgICAgICAgICAgICBNdWx0aSBkaW1lbnNpb25hbCBhcnJheVxuICogQHBhcmFtIHtudW1iZXJ9IGNvbmNhdERpbSAgICBUaGUgZGltZW5zaW9uIG9uIHdoaWNoIHRvIGNvbmNhdGVuYXRlICh6ZXJvLWJhc2VkKVxuICogQHBhcmFtIHtudW1iZXJ9IGRpbSAgICAgICAgICBUaGUgY3VycmVudCBkaW0gKHplcm8tYmFzZWQpXG4gKiBAcmV0dXJuIHtBcnJheX0gYyAgICAgICAgICAgIFRoZSBjb25jYXRlbmF0ZWQgbWF0cml4XG4gKiBAcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMuY3JlYXRlQ29uY2F0ID0gY3JlYXRlQ29uY2F0O1xuXG5mdW5jdGlvbiBfY29uY2F0KGEsIGIsIGNvbmNhdERpbSwgZGltKSB7XG4gIGlmIChkaW0gPCBjb25jYXREaW0pIHtcbiAgICAvLyByZWN1cnNlIGludG8gbmV4dCBkaW1lbnNpb25cbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKGEubGVuZ3RoLCBiLmxlbmd0aCk7XG4gICAgfVxuXG4gICAgdmFyIGMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgY1tpXSA9IF9jb25jYXQoYVtpXSwgYltpXSwgY29uY2F0RGltLCBkaW0gKyAxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYztcbiAgfSBlbHNlIHtcbiAgICAvLyBjb25jYXRlbmF0ZSB0aGlzIGRpbWVuc2lvblxuICAgIHJldHVybiBhLmNvbmNhdChiKTtcbiAgfVxufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDcm9zcyA9IHZvaWQgMDtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2Nyb3NzJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdzdWJ0cmFjdCcsICdtdWx0aXBseSddO1xudmFyIGNyZWF0ZUNyb3NzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgc3VidHJhY3QgPSBfcmVmLnN1YnRyYWN0LFxuICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGNyb3NzIHByb2R1Y3QgZm9yIHR3byB2ZWN0b3JzIGluIHRocmVlIGRpbWVuc2lvbmFsIHNwYWNlLlxuICAgKiBUaGUgY3Jvc3MgcHJvZHVjdCBvZiBgQSA9IFthMSwgYTIsIGEzXWAgYW5kIGBCID0gW2IxLCBiMiwgYjNdYCBpcyBkZWZpbmVkXG4gICAqIGFzOlxuICAgKlxuICAgKiAgICBjcm9zcyhBLCBCKSA9IFtcbiAgICogICAgICBhMiAqIGIzIC0gYTMgKiBiMixcbiAgICogICAgICBhMyAqIGIxIC0gYTEgKiBiMyxcbiAgICogICAgICBhMSAqIGIyIC0gYTIgKiBiMVxuICAgKiAgICBdXG4gICAqXG4gICAqIElmIG9uZSBvZiB0aGUgaW5wdXQgdmVjdG9ycyBoYXMgYSBkaW1lbnNpb24gZ3JlYXRlciB0aGFuIDEsIHRoZSBvdXRwdXRcbiAgICogdmVjdG9yIHdpbGwgYmUgYSAxeDMgKDItZGltZW5zaW9uYWwpIG1hdHJpeC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmNyb3NzKHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmNyb3NzKFsxLCAxLCAwXSwgICBbMCwgMSwgMV0pICAgICAgIC8vIFJldHVybnMgWzEsIC0xLCAxXVxuICAgKiAgICBtYXRoLmNyb3NzKFszLCAtMywgMV0sICBbNCwgOSwgMl0pICAgICAgIC8vIFJldHVybnMgWy0xNSwgLTIsIDM5XVxuICAgKiAgICBtYXRoLmNyb3NzKFsyLCAzLCA0XSwgICBbNSwgNiwgN10pICAgICAgIC8vIFJldHVybnMgWy0zLCA2LCAtM11cbiAgICogICAgbWF0aC5jcm9zcyhbWzEsIDIsIDNdXSwgW1s0XSwgWzVdLCBbNl1dKSAvLyBSZXR1cm5zIFtbLTMsIDYsIC0zXV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGRvdCwgbXVsdGlwbHlcbiAgICpcbiAgICogQHBhcmFtICB7QXJyYXkgfCBNYXRyaXh9IHggICBGaXJzdCB2ZWN0b3JcbiAgICogQHBhcmFtICB7QXJyYXkgfCBNYXRyaXh9IHkgICBTZWNvbmQgdmVjdG9yXG4gICAqIEByZXR1cm4ge0FycmF5IHwgTWF0cml4fSAgICAgUmV0dXJucyB0aGUgY3Jvc3MgcHJvZHVjdCBvZiBgeGAgYW5kIGB5YFxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnTWF0cml4LCBNYXRyaXgnOiBmdW5jdGlvbiBNYXRyaXhNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIG1hdHJpeChfY3Jvc3MoeC50b0FycmF5KCksIHkudG9BcnJheSgpKSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIHJldHVybiBtYXRyaXgoX2Nyb3NzKHgudG9BcnJheSgpLCB5KSk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBtYXRyaXgoX2Nyb3NzKHgsIHkudG9BcnJheSgpKSk7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogX2Nyb3NzXG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBjcm9zcyBwcm9kdWN0IGZvciB0d28gYXJyYXlzXG4gICAqIEBwYXJhbSB7QXJyYXl9IHggIEZpcnN0IHZlY3RvclxuICAgKiBAcGFyYW0ge0FycmF5fSB5ICBTZWNvbmQgdmVjdG9yXG4gICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY3Jvc3MgcHJvZHVjdCBvZiB4IGFuZCB5XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9jcm9zcyh4LCB5KSB7XG4gICAgdmFyIGhpZ2hlc3REaW1lbnNpb24gPSBNYXRoLm1heCgoMCwgX2FycmF5LmFycmF5U2l6ZSkoeCkubGVuZ3RoLCAoMCwgX2FycmF5LmFycmF5U2l6ZSkoeSkubGVuZ3RoKTtcbiAgICB4ID0gKDAsIF9hcnJheS5zcXVlZXplKSh4KTtcbiAgICB5ID0gKDAsIF9hcnJheS5zcXVlZXplKSh5KTtcbiAgICB2YXIgeFNpemUgPSAoMCwgX2FycmF5LmFycmF5U2l6ZSkoeCk7XG4gICAgdmFyIHlTaXplID0gKDAsIF9hcnJheS5hcnJheVNpemUpKHkpO1xuXG4gICAgaWYgKHhTaXplLmxlbmd0aCAhPT0gMSB8fCB5U2l6ZS5sZW5ndGggIT09IDEgfHwgeFNpemVbMF0gIT09IDMgfHwgeVNpemVbMF0gIT09IDMpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdWZWN0b3JzIHdpdGggbGVuZ3RoIDMgZXhwZWN0ZWQgJyArICcoU2l6ZSBBID0gWycgKyB4U2l6ZS5qb2luKCcsICcpICsgJ10sIEIgPSBbJyArIHlTaXplLmpvaW4oJywgJykgKyAnXSknKTtcbiAgICB9XG5cbiAgICB2YXIgcHJvZHVjdCA9IFtzdWJ0cmFjdChtdWx0aXBseSh4WzFdLCB5WzJdKSwgbXVsdGlwbHkoeFsyXSwgeVsxXSkpLCBzdWJ0cmFjdChtdWx0aXBseSh4WzJdLCB5WzBdKSwgbXVsdGlwbHkoeFswXSwgeVsyXSkpLCBzdWJ0cmFjdChtdWx0aXBseSh4WzBdLCB5WzFdKSwgbXVsdGlwbHkoeFsxXSwgeVswXSkpXTtcblxuICAgIGlmIChoaWdoZXN0RGltZW5zaW9uID4gMSkge1xuICAgICAgcmV0dXJuIFtwcm9kdWN0XTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHByb2R1Y3Q7XG4gICAgfVxuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlQ3Jvc3MgPSBjcmVhdGVDcm9zczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ3RyYW5zcG9zZSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2N0cmFuc3Bvc2UnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAndHJhbnNwb3NlJywgJ2NvbmonXTtcbnZhciBjcmVhdGVDdHJhbnNwb3NlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIHRyYW5zcG9zZSA9IF9yZWYudHJhbnNwb3NlLFxuICAgICAgY29uaiA9IF9yZWYuY29uajtcblxuICAvKipcbiAgICogVHJhbnNwb3NlIGFuZCBjb21wbGV4IGNvbmp1Z2F0ZSBhIG1hdHJpeC4gQWxsIHZhbHVlcyBvZiB0aGUgbWF0cml4IGFyZVxuICAgKiByZWZsZWN0ZWQgb3ZlciBpdHMgbWFpbiBkaWFnb25hbCBhbmQgdGhlbiB0aGUgY29tcGxleCBjb25qdWdhdGUgaXNcbiAgICogdGFrZW4uIFRoaXMgaXMgZXF1aXZhbGVudCB0byBjb21wbGV4IGNvbmp1Z2F0aW9uIGZvciBzY2FsYXJzIGFuZFxuICAgKiB2ZWN0b3JzLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLmN0cmFuc3Bvc2UoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBjb25zdCBBID0gW1sxLCAyLCAzXSwgWzQsIDUsIG1hdGguY29tcGxleCg2LDcpXV1cbiAgICogICAgIG1hdGguY3RyYW5zcG9zZShBKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgW1sxLCA0XSwgWzIsIDVdLCBbMywge3JlOjYsaW06N31dXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgIHRyYW5zcG9zZSwgZGlhZywgaW52LCBzdWJzZXQsIHNxdWVlemVcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0geCAgTWF0cml4IHRvIGJlIGN0cmFuc3Bvc2VkXG4gICAqIEByZXR1cm4ge0FycmF5IHwgTWF0cml4fSAgIFRoZSBjdHJhbnNwb3NlZCBtYXRyaXhcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgYW55OiBmdW5jdGlvbiBhbnkoeCkge1xuICAgICAgcmV0dXJuIGNvbmoodHJhbnNwb3NlKHgpKTtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZUN0cmFuc3Bvc2UgPSBjcmVhdGVDdHJhbnNwb3NlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVEZXQgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvc3RyaW5nXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnZGV0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdzdWJ0cmFjdCcsICdtdWx0aXBseScsICd1bmFyeU1pbnVzJywgJ2x1cCddO1xudmFyIGNyZWF0ZURldCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCxcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSxcbiAgICAgIHVuYXJ5TWludXMgPSBfcmVmLnVuYXJ5TWludXMsXG4gICAgICBsdXAgPSBfcmVmLmx1cDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudCBvZiBhIG1hdHJpeC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmRldCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5kZXQoW1sxLCAyXSwgWzMsIDRdXSkgLy8gcmV0dXJucyAtMlxuICAgKlxuICAgKiAgICBjb25zdCBBID0gW1xuICAgKiAgICAgIFstMiwgMiwgM10sXG4gICAqICAgICAgWy0xLCAxLCAzXSxcbiAgICogICAgICBbMiwgMCwgLTFdXG4gICAqICAgIF1cbiAgICogICAgbWF0aC5kZXQoQSkgLy8gcmV0dXJucyA2XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBpbnZcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0geCAgQSBtYXRyaXhcbiAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgZGV0ZXJtaW5hbnQgb2YgYHhgXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIGFueTogZnVuY3Rpb24gYW55KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX29iamVjdC5jbG9uZSkoeCk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBkZXQoeCkge1xuICAgICAgdmFyIHNpemU7XG5cbiAgICAgIGlmICgoMCwgX2lzLmlzTWF0cml4KSh4KSkge1xuICAgICAgICBzaXplID0geC5zaXplKCk7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoeCkpIHtcbiAgICAgICAgeCA9IG1hdHJpeCh4KTtcbiAgICAgICAgc2l6ZSA9IHguc2l6ZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gYSBzY2FsYXJcbiAgICAgICAgc2l6ZSA9IFtdO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKHNpemUubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAvLyBzY2FsYXJcbiAgICAgICAgICByZXR1cm4gKDAsIF9vYmplY3QuY2xvbmUpKHgpO1xuXG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAvLyB2ZWN0b3JcbiAgICAgICAgICBpZiAoc2l6ZVswXSA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuICgwLCBfb2JqZWN0LmNsb25lKSh4LnZhbHVlT2YoKVswXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggbXVzdCBiZSBzcXVhcmUgJyArICcoc2l6ZTogJyArICgwLCBfc3RyaW5nLmZvcm1hdCkoc2l6ZSkgKyAnKScpO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gdHdvIGRpbWVuc2lvbmFsIGFycmF5XG4gICAgICAgICAgICB2YXIgcm93cyA9IHNpemVbMF07XG4gICAgICAgICAgICB2YXIgY29scyA9IHNpemVbMV07XG5cbiAgICAgICAgICAgIGlmIChyb3dzID09PSBjb2xzKSB7XG4gICAgICAgICAgICAgIHJldHVybiBfZGV0KHguY2xvbmUoKS52YWx1ZU9mKCksIHJvd3MsIGNvbHMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpeCBtdXN0IGJlIHNxdWFyZSAnICsgJyhzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShzaXplKSArICcpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgLy8gbXVsdGkgZGltZW5zaW9uYWwgYXJyYXlcbiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgdHdvIGRpbWVuc2lvbmFsICcgKyAnKHNpemU6ICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKHNpemUpICsgJyknKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudCBvZiBhIG1hdHJpeFxuICAgKiBAcGFyYW0ge0FycmF5W119IG1hdHJpeCAgQSBzcXVhcmUsIHR3byBkaW1lbnNpb25hbCBtYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJvd3MgICAgIE51bWJlciBvZiByb3dzIG9mIHRoZSBtYXRyaXggKHplcm8tYmFzZWQpXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2xzICAgICBOdW1iZXIgb2YgY29sdW1ucyBvZiB0aGUgbWF0cml4ICh6ZXJvLWJhc2VkKVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBkZXRcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgZnVuY3Rpb24gX2RldChtYXRyaXgsIHJvd3MsIGNvbHMpIHtcbiAgICBpZiAocm93cyA9PT0gMSkge1xuICAgICAgLy8gdGhpcyBpcyBhIDEgeCAxIG1hdHJpeFxuICAgICAgcmV0dXJuICgwLCBfb2JqZWN0LmNsb25lKShtYXRyaXhbMF1bMF0pO1xuICAgIH0gZWxzZSBpZiAocm93cyA9PT0gMikge1xuICAgICAgLy8gdGhpcyBpcyBhIDIgeCAyIG1hdHJpeFxuICAgICAgLy8gdGhlIGRldGVybWluYW50IG9mIFthMTEsYTEyO2EyMSxhMjJdIGlzIGRldCA9IGExMSphMjItYTIxKmExMlxuICAgICAgcmV0dXJuIHN1YnRyYWN0KG11bHRpcGx5KG1hdHJpeFswXVswXSwgbWF0cml4WzFdWzFdKSwgbXVsdGlwbHkobWF0cml4WzFdWzBdLCBtYXRyaXhbMF1bMV0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ29tcHV0ZSB0aGUgTFUgZGVjb21wb3NpdGlvblxuICAgICAgdmFyIGRlY29tcCA9IGx1cChtYXRyaXgpOyAvLyBUaGUgZGV0ZXJtaW5hbnQgaXMgdGhlIHByb2R1Y3Qgb2YgdGhlIGRpYWdvbmFsIGVudHJpZXMgb2YgVSAoYW5kIHRob3NlIG9mIEwsIGJ1dCB0aGV5IGFyZSBhbGwgMSlcblxuICAgICAgdmFyIGRldCA9IGRlY29tcC5VWzBdWzBdO1xuXG4gICAgICBmb3IgKHZhciBfaSA9IDE7IF9pIDwgcm93czsgX2krKykge1xuICAgICAgICBkZXQgPSBtdWx0aXBseShkZXQsIGRlY29tcC5VW19pXVtfaV0pO1xuICAgICAgfSAvLyBUaGUgZGV0ZXJtaW5hbnQgd2lsbCBiZSBtdWx0aXBsaWVkIGJ5IDEgb3IgLTEgZGVwZW5kaW5nIG9uIHRoZSBwYXJpdHkgb2YgdGhlIHBlcm11dGF0aW9uIG1hdHJpeC5cbiAgICAgIC8vIFRoaXMgY2FuIGJlIGRldGVybWluZWQgYnkgY291bnRpbmcgdGhlIGN5Y2xlcy4gVGhpcyBpcyByb3VnaGx5IGEgbGluZWFyIHRpbWUgYWxnb3JpdGhtLlxuXG5cbiAgICAgIHZhciBldmVuQ3ljbGVzID0gMDtcbiAgICAgIHZhciBpID0gMDtcbiAgICAgIHZhciB2aXNpdGVkID0gW107XG5cbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHdoaWxlICh2aXNpdGVkW2ldKSB7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGkgPj0gcm93cykgYnJlYWs7XG4gICAgICAgIHZhciBqID0gaTtcbiAgICAgICAgdmFyIGN5Y2xlTGVuID0gMDtcblxuICAgICAgICB3aGlsZSAoIXZpc2l0ZWRbZGVjb21wLnBbal1dKSB7XG4gICAgICAgICAgdmlzaXRlZFtkZWNvbXAucFtqXV0gPSB0cnVlO1xuICAgICAgICAgIGogPSBkZWNvbXAucFtqXTtcbiAgICAgICAgICBjeWNsZUxlbisrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGN5Y2xlTGVuICUgMiA9PT0gMCkge1xuICAgICAgICAgIGV2ZW5DeWNsZXMrKztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZXZlbkN5Y2xlcyAlIDIgPT09IDAgPyBkZXQgOiB1bmFyeU1pbnVzKGRldCk7XG4gICAgfVxuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlRGV0ID0gY3JlYXRlRGV0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVEaWFnID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdkaWFnJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdEZW5zZU1hdHJpeCcsICdTcGFyc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVEaWFnID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4LFxuICAgICAgU3BhcnNlTWF0cml4ID0gX3JlZi5TcGFyc2VNYXRyaXg7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGRpYWdvbmFsIG1hdHJpeCBvciByZXRyaWV2ZSB0aGUgZGlhZ29uYWwgb2YgYSBtYXRyaXhcbiAgICpcbiAgICogV2hlbiBgeGAgaXMgYSB2ZWN0b3IsIGEgbWF0cml4IHdpdGggdmVjdG9yIGB4YCBvbiB0aGUgZGlhZ29uYWwgd2lsbCBiZSByZXR1cm5lZC5cbiAgICogV2hlbiBgeGAgaXMgYSB0d28gZGltZW5zaW9uYWwgbWF0cml4LCB0aGUgbWF0cml4ZXMgYGtgdGggZGlhZ29uYWwgd2lsbCBiZSByZXR1cm5lZCBhcyB2ZWN0b3IuXG4gICAqIFdoZW4gayBpcyBwb3NpdGl2ZSwgdGhlIHZhbHVlcyBhcmUgcGxhY2VkIG9uIHRoZSBzdXBlciBkaWFnb25hbC5cbiAgICogV2hlbiBrIGlzIG5lZ2F0aXZlLCB0aGUgdmFsdWVzIGFyZSBwbGFjZWQgb24gdGhlIHN1YiBkaWFnb25hbC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5kaWFnKFgpXG4gICAqICAgICBtYXRoLmRpYWcoWCwgZm9ybWF0KVxuICAgKiAgICAgbWF0aC5kaWFnKFgsIGspXG4gICAqICAgICBtYXRoLmRpYWcoWCwgaywgZm9ybWF0KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIC8vIGNyZWF0ZSBhIGRpYWdvbmFsIG1hdHJpeFxuICAgKiAgICAgbWF0aC5kaWFnKFsxLCAyLCAzXSkgICAgICAvLyByZXR1cm5zIFtbMSwgMCwgMF0sIFswLCAyLCAwXSwgWzAsIDAsIDNdXVxuICAgKiAgICAgbWF0aC5kaWFnKFsxLCAyLCAzXSwgMSkgICAvLyByZXR1cm5zIFtbMCwgMSwgMCwgMF0sIFswLCAwLCAyLCAwXSwgWzAsIDAsIDAsIDNdXVxuICAgKiAgICAgbWF0aC5kaWFnKFsxLCAyLCAzXSwgLTEpICAvLyByZXR1cm5zIFtbMCwgMCwgMF0sIFsxLCAwLCAwXSwgWzAsIDIsIDBdLCBbMCwgMCwgM11dXG4gICAqXG4gICAqICAgIC8vIHJldHJpZXZlIHRoZSBkaWFnb25hbCBmcm9tIGEgbWF0cml4XG4gICAqICAgIGNvbnN0IGEgPSBbWzEsIDIsIDNdLCBbNCwgNSwgNl0sIFs3LCA4LCA5XV1cbiAgICogICAgbWF0aC5kaWFnKGEpICAgLy8gcmV0dXJucyBbMSwgNSwgOV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBvbmVzLCB6ZXJvcywgaWRlbnRpdHlcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXggfCBBcnJheX0geCAgICAgICAgICBBIHR3byBkaW1lbnNpb25hbCBtYXRyaXggb3IgYSB2ZWN0b3JcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXJ9IFtrPTBdICBUaGUgZGlhZ29uYWwgd2hlcmUgdGhlIHZlY3RvciB3aWxsIGJlIGZpbGxlZFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIG9yIHJldHJpZXZlZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtmb3JtYXQ9J2RlbnNlJ10gICBUaGUgbWF0cml4IHN0b3JhZ2UgZm9ybWF0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7TWF0cml4IHwgQXJyYXl9IERpYWdvbmFsIG1hdHJpeCBmcm9tIGlucHV0IHZlY3Rvciwgb3IgZGlhZ29uYWwgZnJvbSBpbnB1dCBtYXRyaXguXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIC8vIEZJWE1FOiBzaW1wbGlmeSB0aGlzIGh1Z2UgYW1vdW50IG9mIHNpZ25hdHVyZXMgYXMgc29vbiBhcyB0eXBlZC1mdW5jdGlvbiBzdXBwb3J0cyBvcHRpb25hbCBhcmd1bWVudHNcbiAgICBBcnJheTogZnVuY3Rpb24gQXJyYXkoeCkge1xuICAgICAgcmV0dXJuIF9kaWFnKHgsIDAsICgwLCBfYXJyYXkuYXJyYXlTaXplKSh4KSwgbnVsbCk7XG4gICAgfSxcbiAgICAnQXJyYXksIG51bWJlcic6IGZ1bmN0aW9uIEFycmF5TnVtYmVyKHgsIGspIHtcbiAgICAgIHJldHVybiBfZGlhZyh4LCBrLCAoMCwgX2FycmF5LmFycmF5U2l6ZSkoeCksIG51bGwpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBCaWdOdW1iZXInOiBmdW5jdGlvbiBBcnJheUJpZ051bWJlcih4LCBrKSB7XG4gICAgICByZXR1cm4gX2RpYWcoeCwgay50b051bWJlcigpLCAoMCwgX2FycmF5LmFycmF5U2l6ZSkoeCksIG51bGwpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBzdHJpbmcnOiBmdW5jdGlvbiBBcnJheVN0cmluZyh4LCBmb3JtYXQpIHtcbiAgICAgIHJldHVybiBfZGlhZyh4LCAwLCAoMCwgX2FycmF5LmFycmF5U2l6ZSkoeCksIGZvcm1hdCk7XG4gICAgfSxcbiAgICAnQXJyYXksIG51bWJlciwgc3RyaW5nJzogZnVuY3Rpb24gQXJyYXlOdW1iZXJTdHJpbmcoeCwgaywgZm9ybWF0KSB7XG4gICAgICByZXR1cm4gX2RpYWcoeCwgaywgKDAsIF9hcnJheS5hcnJheVNpemUpKHgpLCBmb3JtYXQpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBCaWdOdW1iZXIsIHN0cmluZyc6IGZ1bmN0aW9uIEFycmF5QmlnTnVtYmVyU3RyaW5nKHgsIGssIGZvcm1hdCkge1xuICAgICAgcmV0dXJuIF9kaWFnKHgsIGsudG9OdW1iZXIoKSwgKDAsIF9hcnJheS5hcnJheVNpemUpKHgpLCBmb3JtYXQpO1xuICAgIH0sXG4gICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuIF9kaWFnKHgsIDAsIHguc2l6ZSgpLCB4LnN0b3JhZ2UoKSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBudW1iZXInOiBmdW5jdGlvbiBNYXRyaXhOdW1iZXIoeCwgaykge1xuICAgICAgcmV0dXJuIF9kaWFnKHgsIGssIHguc2l6ZSgpLCB4LnN0b3JhZ2UoKSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBCaWdOdW1iZXInOiBmdW5jdGlvbiBNYXRyaXhCaWdOdW1iZXIoeCwgaykge1xuICAgICAgcmV0dXJuIF9kaWFnKHgsIGsudG9OdW1iZXIoKSwgeC5zaXplKCksIHguc3RvcmFnZSgpKTtcbiAgICB9LFxuICAgICdNYXRyaXgsIHN0cmluZyc6IGZ1bmN0aW9uIE1hdHJpeFN0cmluZyh4LCBmb3JtYXQpIHtcbiAgICAgIHJldHVybiBfZGlhZyh4LCAwLCB4LnNpemUoKSwgZm9ybWF0KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIG51bWJlciwgc3RyaW5nJzogZnVuY3Rpb24gTWF0cml4TnVtYmVyU3RyaW5nKHgsIGssIGZvcm1hdCkge1xuICAgICAgcmV0dXJuIF9kaWFnKHgsIGssIHguc2l6ZSgpLCBmb3JtYXQpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQmlnTnVtYmVyLCBzdHJpbmcnOiBmdW5jdGlvbiBNYXRyaXhCaWdOdW1iZXJTdHJpbmcoeCwgaywgZm9ybWF0KSB7XG4gICAgICByZXR1cm4gX2RpYWcoeCwgay50b051bWJlcigpLCB4LnNpemUoKSwgZm9ybWF0KTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogQ3JlZWF0ZSBkaWFnb25hbCBtYXRyaXggZnJvbSBhIHZlY3RvciBvciB2aWNlIHZlcnNhXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGtcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZvcm1hdCBTdG9yYWdlIGZvcm1hdCBmb3IgbWF0cml4LiBJZiBudWxsLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYW4gQXJyYXkgaXMgcmV0dXJuZWRcbiAgICogQHJldHVybnMge0FycmF5IHwgTWF0cml4fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfZGlhZyh4LCBrLCBzaXplLCBmb3JtYXQpIHtcbiAgICBpZiAoISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoaykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1NlY29uZCBwYXJhbWV0ZXIgaW4gZnVuY3Rpb24gZGlhZyBtdXN0IGJlIGFuIGludGVnZXInKTtcbiAgICB9XG5cbiAgICB2YXIga1N1cGVyID0gayA+IDAgPyBrIDogMDtcbiAgICB2YXIga1N1YiA9IGsgPCAwID8gLWsgOiAwOyAvLyBjaGVjayBkaW1lbnNpb25zXG5cbiAgICBzd2l0Y2ggKHNpemUubGVuZ3RoKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHJldHVybiBfY3JlYXRlRGlhZ29uYWxNYXRyaXgoeCwgaywgZm9ybWF0LCBzaXplWzBdLCBrU3ViLCBrU3VwZXIpO1xuXG4gICAgICBjYXNlIDI6XG4gICAgICAgIHJldHVybiBfZ2V0RGlhZ29uYWwoeCwgaywgZm9ybWF0LCBzaXplLCBrU3ViLCBrU3VwZXIpO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggZm9yIGZ1bmN0aW9uIGRpYWcgbXVzdCBiZSAyIGRpbWVuc2lvbmFsJyk7XG4gIH1cblxuICBmdW5jdGlvbiBfY3JlYXRlRGlhZ29uYWxNYXRyaXgoeCwgaywgZm9ybWF0LCBsLCBrU3ViLCBrU3VwZXIpIHtcbiAgICAvLyBtYXRyaXggc2l6ZVxuICAgIHZhciBtcyA9IFtsICsga1N1YiwgbCArIGtTdXBlcl07XG5cbiAgICBpZiAoZm9ybWF0ICYmIGZvcm1hdCAhPT0gJ3NwYXJzZScgJiYgZm9ybWF0ICE9PSAnZGVuc2UnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBtYXRyaXggdHlwZSBcIi5jb25jYXQoZm9ybWF0LCBcIlxcXCJcIikpO1xuICAgIH0gLy8gY3JlYXRlIGRpYWdvbmFsIG1hdHJpeFxuXG5cbiAgICB2YXIgbSA9IGZvcm1hdCA9PT0gJ3NwYXJzZScgPyBTcGFyc2VNYXRyaXguZGlhZ29uYWwobXMsIHgsIGspIDogRGVuc2VNYXRyaXguZGlhZ29uYWwobXMsIHgsIGspOyAvLyBjaGVjayB3ZSBuZWVkIHRvIHJldHVybiBhIG1hdHJpeFxuXG4gICAgcmV0dXJuIGZvcm1hdCAhPT0gbnVsbCA/IG0gOiBtLnZhbHVlT2YoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9nZXREaWFnb25hbCh4LCBrLCBmb3JtYXQsIHMsIGtTdWIsIGtTdXBlcikge1xuICAgIC8vIGNoZWNrIHggaXMgYSBNYXRyaXhcbiAgICBpZiAoKDAsIF9pcy5pc01hdHJpeCkoeCkpIHtcbiAgICAgIC8vIGdldCBkaWFnb25hbCBtYXRyaXhcbiAgICAgIHZhciBkbSA9IHguZGlhZ29uYWwoayk7IC8vIGNoZWNrIHdlIG5lZWQgdG8gcmV0dXJuIGEgbWF0cml4XG5cbiAgICAgIGlmIChmb3JtYXQgIT09IG51bGwpIHtcbiAgICAgICAgLy8gY2hlY2sgd2UgbmVlZCB0byBjaGFuZ2UgbWF0cml4IGZvcm1hdFxuICAgICAgICBpZiAoZm9ybWF0ICE9PSBkbS5zdG9yYWdlKCkpIHtcbiAgICAgICAgICByZXR1cm4gbWF0cml4KGRtLCBmb3JtYXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRtO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZG0udmFsdWVPZigpO1xuICAgIH0gLy8gdmVjdG9yIHNpemVcblxuXG4gICAgdmFyIG4gPSBNYXRoLm1pbihzWzBdIC0ga1N1Yiwgc1sxXSAtIGtTdXBlcik7IC8vIGRpYWdvbmFsIHZhbHVlc1xuXG4gICAgdmFyIHZlY3RvciA9IFtdOyAvLyBsb29wIGRpYWdvbmFsXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgdmVjdG9yW2ldID0geFtpICsga1N1Yl1baSArIGtTdXBlcl07XG4gICAgfSAvLyBjaGVjayB3ZSBuZWVkIHRvIHJldHVybiBhIG1hdHJpeFxuXG5cbiAgICByZXR1cm4gZm9ybWF0ICE9PSBudWxsID8gbWF0cml4KHZlY3RvcikgOiB2ZWN0b3I7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVEaWFnID0gY3JlYXRlRGlhZzsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRG90ID0gdm9pZCAwO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnZG90JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FkZCcsICdtdWx0aXBseSddO1xudmFyIGNyZWF0ZURvdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBhZGQgPSBfcmVmLmFkZCxcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseTtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBkb3QgcHJvZHVjdCBvZiB0d28gdmVjdG9ycy4gVGhlIGRvdCBwcm9kdWN0IG9mXG4gICAqIGBBID0gW2ExLCBhMiwgYTMsIC4uLiwgYW5dYCBhbmQgYEIgPSBbYjEsIGIyLCBiMywgLi4uLCBibl1gIGlzIGRlZmluZWQgYXM6XG4gICAqXG4gICAqICAgIGRvdChBLCBCKSA9IGExICogYjEgKyBhMiAqIGIyICsgYTMgKiBiMyArIC4uLiArIGFuICogYm5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmRvdCh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5kb3QoWzIsIDQsIDFdLCBbMiwgMiwgM10pICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDE1XG4gICAqICAgIG1hdGgubXVsdGlwbHkoWzIsIDQsIDFdLCBbMiwgMiwgM10pICAvLyByZXR1cm5zIG51bWJlciAxNVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgbXVsdGlwbHksIGNyb3NzXG4gICAqXG4gICAqIEBwYXJhbSAge0FycmF5IHwgTWF0cml4fSB4ICAgICBGaXJzdCB2ZWN0b3JcbiAgICogQHBhcmFtICB7QXJyYXkgfCBNYXRyaXh9IHkgICAgIFNlY29uZCB2ZWN0b3JcbiAgICogQHJldHVybiB7bnVtYmVyfSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIGRvdCBwcm9kdWN0IG9mIGB4YCBhbmQgYHlgXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdNYXRyaXgsIE1hdHJpeCc6IGZ1bmN0aW9uIE1hdHJpeE1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gX2RvdCh4LnRvQXJyYXkoKSwgeS50b0FycmF5KCkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7XG4gICAgICByZXR1cm4gX2RvdCh4LnRvQXJyYXkoKSwgeSk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBfZG90KHgsIHkudG9BcnJheSgpKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBfZG90XG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBkb3QgcHJvZHVjdCBmb3IgdHdvIGFycmF5c1xuICAgKiBAcGFyYW0ge0FycmF5fSB4ICBGaXJzdCB2ZWN0b3JcbiAgICogQHBhcmFtIHtBcnJheX0geSAgU2Vjb25kIHZlY3RvclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBkb3QgcHJvZHVjdCBvZiB4IGFuZCB5XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICAvLyBUT0RPOiBkb3VibGUgY29kZSB3aXRoIG1hdGgubXVsdGlwbHlcblxuICBmdW5jdGlvbiBfZG90KHgsIHkpIHtcbiAgICB2YXIgeFNpemUgPSAoMCwgX2FycmF5LmFycmF5U2l6ZSkoeCk7XG4gICAgdmFyIHlTaXplID0gKDAsIF9hcnJheS5hcnJheVNpemUpKHkpO1xuICAgIHZhciBsZW4gPSB4U2l6ZVswXTtcbiAgICBpZiAoeFNpemUubGVuZ3RoICE9PSAxIHx8IHlTaXplLmxlbmd0aCAhPT0gMSkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1ZlY3RvciBleHBlY3RlZCcpOyAvLyBUT0RPOiBiZXR0ZXIgZXJyb3IgbWVzc2FnZVxuXG4gICAgaWYgKHhTaXplWzBdICE9PSB5U2l6ZVswXSkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1ZlY3RvcnMgbXVzdCBoYXZlIGVxdWFsIGxlbmd0aCAoJyArIHhTaXplWzBdICsgJyAhPSAnICsgeVNpemVbMF0gKyAnKScpO1xuICAgIGlmIChsZW4gPT09IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdDYW5ub3QgY2FsY3VsYXRlIHRoZSBkb3QgcHJvZHVjdCBvZiBlbXB0eSB2ZWN0b3JzJyk7XG4gICAgdmFyIHByb2QgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgcHJvZCA9IGFkZChwcm9kLCBtdWx0aXBseSh4W2ldLCB5W2ldKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb2Q7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVEb3QgPSBjcmVhdGVEb3Q7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUVpZ3MgPSB2b2lkIDA7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3N0cmluZ1wiKTtcblxudmFyIG5hbWUgPSAnZWlncyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydjb25maWcnLCAndHlwZWQnLCAnbWF0cml4JywgJ2FkZFNjYWxhcicsICdlcXVhbCcsICdzdWJ0cmFjdCcsICdhYnMnLCAnYXRhbicsICdjb3MnLCAnc2luJywgJ211bHRpcGx5U2NhbGFyJywgJ2ludicsICdiaWdudW1iZXInLCAnbXVsdGlwbHknLCAnYWRkJ107XG52YXIgY3JlYXRlRWlncyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgYWRkU2NhbGFyID0gX3JlZi5hZGRTY2FsYXIsXG4gICAgICBzdWJ0cmFjdCA9IF9yZWYuc3VidHJhY3QsXG4gICAgICBlcXVhbCA9IF9yZWYuZXF1YWwsXG4gICAgICBhYnMgPSBfcmVmLmFicyxcbiAgICAgIGF0YW4gPSBfcmVmLmF0YW4sXG4gICAgICBjb3MgPSBfcmVmLmNvcyxcbiAgICAgIHNpbiA9IF9yZWYuc2luLFxuICAgICAgbXVsdGlwbHlTY2FsYXIgPSBfcmVmLm11bHRpcGx5U2NhbGFyLFxuICAgICAgaW52ID0gX3JlZi5pbnYsXG4gICAgICBiaWdudW1iZXIgPSBfcmVmLmJpZ251bWJlcixcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSxcbiAgICAgIGFkZCA9IF9yZWYuYWRkO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIGVpZ2VudmFsdWUgYW5kIGVpZ2VudmVjdG9yIG9mIGEgcmVhbCBzeW1tZXRyaWMgbWF0cml4LlxuICAgKiBPbmx5IGFwcGxpY2FibGUgdG8gdHdvIGRpbWVuc2lvbmFsIHN5bW1ldHJpYyBtYXRyaWNlcy4gVXNlcyBKYWNvYmlcbiAgICogQWxnb3JpdGhtLiBNYXRyaXggY29udGFpbmluZyBtaXhlZCB0eXBlICgnbnVtYmVyJywgJ2JpZ251bWJlcicsICdmcmFjdGlvbicpXG4gICAqIG9mIGVsZW1lbnRzIGFyZSBub3Qgc3VwcG9ydGVkLiBJbnB1dCBtYXRyaXggb3IgMkQgYXJyYXkgc2hvdWxkIGNvbnRhaW4gYWxsIGVsZW1lbnRzXG4gICAqIG9mIGVpdGhlciAnbnVtYmVyJywgJ2JpZ251bWJlcicgb3IgJ2ZyYWN0aW9uJyB0eXBlLiBGb3IgJ251bWJlcicgYW5kICdmcmFjdGlvbicsIHRoZVxuICAgKiBlaWdlbnZhbHVlcyBhcmUgb2YgJ251bWJlcicgdHlwZS4gRm9yICdiaWdudW1iZXInIHRoZSBlaWdlbnZhbHVlcyBhcmUgb2YgJydiaWdudW1iZXInIHR5cGUuXG4gICAqIEVpZ2VudmVjdG9ycyBhcmUgYWx3YXlzIG9mICdudW1iZXInIHR5cGUuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguZWlncyh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIGNvbnN0IEggPSBbWzUsIDIuM10sIFsyLjMsIDFdXVxuICAgKiAgICAgY29uc3QgYW5zID0gbWF0aC5laWdzKEgpIC8vIHJldHVybnMge3ZhbHVlczogW0UxLEUyLi4uc29ydGVkXSwgdmVjdG9yczogW3YxLHYyLi4uLiBjb3JyZXNwb25kaW5nIHZlY3RvcnNdfVxuICAgKiAgICAgY29uc3QgRSA9IGFucy52YWx1ZXNcbiAgICogICAgIGNvbnN0IFUgPSBhbnMudmVjdG9yc1xuICAgKiAgICAgY29uc3QgVVR4SHhVID0gbWF0aC5tdWx0aXBseShtYXRoLnRyYW5zcG9zZShVKSwgSCwgVSkgLy8gcm90YXRlcyBIIHRvIHRoZSBlaWdlbi1yZXByZXNlbnRhdGlvblxuICAgKiAgICAgRVswXSA9PSBVVHhIeFVbMF1bMF0gIC8vIHJldHVybnMgdHJ1ZVxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgIGludlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSB4ICBNYXRyaXggdG8gYmUgZGlhZ29uYWxpemVkXG4gICAqIEByZXR1cm4ge3t2YWx1ZXM6IEFycmF5LCB2ZWN0b3JzOiBBcnJheX0gfCB7dmFsdWVzOiBNYXRyaXgsIHZlY3RvcnM6IE1hdHJpeH19IE9iamVjdCBjb250YWluaW5nIGVpZ2VudmFsdWVzIChBcnJheSBvciBNYXRyaXgpIGFuZCBlaWdlbnZlY3RvcnMgKDJEIEFycmF5L01hdHJpeCkuXG4gICAqL1xuICB2YXIgZWlncyA9IHR5cGVkKCdlaWdzJywge1xuICAgIEFycmF5OiBmdW5jdGlvbiBBcnJheSh4KSB7XG4gICAgICAvLyBjaGVjayBhcnJheSBzaXplXG4gICAgICB2YXIgbWF0ID0gbWF0cml4KHgpO1xuICAgICAgdmFyIHNpemUgPSBtYXQuc2l6ZSgpO1xuXG4gICAgICBpZiAoc2l6ZS5sZW5ndGggIT09IDIgfHwgc2l6ZVswXSAhPT0gc2l6ZVsxXSkge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgc3F1YXJlICcgKyAnKHNpemU6ICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKHNpemUpICsgJyknKTtcbiAgICAgIH0gLy8gdXNlIGRlbnNlIDJEIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuXG5cbiAgICAgIHZhciBhbnMgPSBjaGVja0FuZFN1Ym1pdChtYXQsIHNpemVbMF0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWVzOiBhbnNbMF0sXG4gICAgICAgIHZlY3RvcnM6IGFuc1sxXVxuICAgICAgfTtcbiAgICB9LFxuICAgIE1hdHJpeDogZnVuY3Rpb24gTWF0cml4KHgpIHtcbiAgICAgIC8vIHVzZSBkZW5zZSAyRCBhcnJheSBpbXBsZW1lbnRhdGlvblxuICAgICAgLy8gZGVuc2UgbWF0cml4XG4gICAgICB2YXIgc2l6ZSA9IHguc2l6ZSgpO1xuXG4gICAgICBpZiAoc2l6ZS5sZW5ndGggIT09IDIgfHwgc2l6ZVswXSAhPT0gc2l6ZVsxXSkge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgc3F1YXJlICcgKyAnKHNpemU6ICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKHNpemUpICsgJyknKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGFucyA9IGNoZWNrQW5kU3VibWl0KHgsIHNpemVbMF0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWVzOiBtYXRyaXgoYW5zWzBdKSxcbiAgICAgICAgdmVjdG9yczogbWF0cml4KGFuc1sxXSlcbiAgICAgIH07XG4gICAgfVxuICB9KTsgLy8gSXMgdGhlIG1hdHJpeFxuICAvLyBzeW1tZXRyaWMgP1xuXG4gIGZ1bmN0aW9uIGlzU3ltbWV0cmljKHgsIG4pIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgZm9yICh2YXIgaiA9IGk7IGogPCBuOyBqKyspIHtcbiAgICAgICAgLy8gbm90IHN5bW10cmljXG4gICAgICAgIGlmICghZXF1YWwoeFtpXVtqXSwgeFtqXVtpXSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnB1dCBtYXRyaXggaXMgbm90IHN5bW1ldHJpYycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IC8vIGNoZWNrIGlucHV0IGZvciBwb3NzaWJsZSBwcm9ibGVtc1xuICAvLyBhbmQgcGVyZm9ybSBkaWFnb25hbGl6YXRpb24gZWZmaWNpZW50bHkgZm9yXG4gIC8vIHNwZWNpZmljIHR5cGUgb2YgbnVtYmVyXG5cblxuICBmdW5jdGlvbiBjaGVja0FuZFN1Ym1pdCh4LCBuKSB7XG4gICAgdmFyIHR5cGUgPSB4LmRhdGF0eXBlKCk7IC8vIHR5cGUgY2hlY2tcblxuICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHR5cGUgPSB4LmdldERhdGFUeXBlKCk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgIT09ICdudW1iZXInICYmIHR5cGUgIT09ICdCaWdOdW1iZXInICYmIHR5cGUgIT09ICdGcmFjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlID09PSAnbWl4ZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ01peGVkIG1hdHJpeCBlbGVtZW50IHR5cGUgaXMgbm90IHN1cHBvcnRlZCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTWF0cml4IGVsZW1lbnQgdHlwZSBub3Qgc3VwcG9ydGVkICgnICsgdHlwZSArICcpJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlzU3ltbWV0cmljKHgudG9BcnJheSgpLCBuKTtcbiAgICB9IC8vIHBlcmZvcm0gZWZmaWNpZW50IGNhbGN1bGF0aW9uIGZvciAnbnVtYmVycydcblxuXG4gICAgaWYgKHR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gZGlhZyh4LnRvQXJyYXkoKSk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnRnJhY3Rpb24nKSB7XG4gICAgICB2YXIgeEFyciA9IHgudG9BcnJheSgpOyAvLyBjb252ZXJ0IGZyYWN0aW9uIHRvIG51bWJlcnNcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IGk7IGogPCBuOyBqKyspIHtcbiAgICAgICAgICB4QXJyW2ldW2pdID0geEFycltpXVtqXS52YWx1ZU9mKCk7XG4gICAgICAgICAgeEFycltqXVtpXSA9IHhBcnJbaV1bal07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRpYWcoeC50b0FycmF5KCkpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ0JpZ051bWJlcicpIHtcbiAgICAgIHJldHVybiBkaWFnQmlnKHgudG9BcnJheSgpKTtcbiAgICB9XG4gIH0gLy8gZGlhZ29uYWxpemF0aW9uIGltcGxlbWVudGF0aW9uIGZvciBudW1iZXIgKGVmZmljaWVudClcblxuXG4gIGZ1bmN0aW9uIGRpYWcoeCkge1xuICAgIHZhciBOID0geC5sZW5ndGg7XG4gICAgdmFyIGUwID0gTWF0aC5hYnMoY29uZmlnLmVwc2lsb24gLyBOKTtcbiAgICB2YXIgcHNpO1xuICAgIHZhciBTaWogPSBuZXcgQXJyYXkoTik7IC8vIFNpaiBpcyBJZGVudGl0eSBNYXRyaXhcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTjsgaSsrKSB7XG4gICAgICBTaWpbaV0gPSBjcmVhdGVBcnJheShOLCAwKTtcbiAgICAgIFNpaltpXVtpXSA9IDEuMDtcbiAgICB9IC8vIGluaXRpYWwgZXJyb3JcblxuXG4gICAgdmFyIFZhYiA9IGdldEFpaih4KTtcblxuICAgIHdoaWxlIChNYXRoLmFicyhWYWJbMV0pID49IE1hdGguYWJzKGUwKSkge1xuICAgICAgdmFyIF9pID0gVmFiWzBdWzBdO1xuICAgICAgdmFyIGogPSBWYWJbMF1bMV07XG4gICAgICBwc2kgPSBnZXRUaGV0YSh4W19pXVtfaV0sIHhbal1bal0sIHhbX2ldW2pdKTtcbiAgICAgIHggPSB4MSh4LCBwc2ksIF9pLCBqKTtcbiAgICAgIFNpaiA9IFNpajEoU2lqLCBwc2ksIF9pLCBqKTtcbiAgICAgIFZhYiA9IGdldEFpaih4KTtcbiAgICB9XG5cbiAgICB2YXIgRWkgPSBjcmVhdGVBcnJheShOLCAwKTsgLy8gZWlnZW52YWx1ZXNcblxuICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IE47IF9pMisrKSB7XG4gICAgICBFaVtfaTJdID0geFtfaTJdW19pMl07XG4gICAgfVxuXG4gICAgcmV0dXJuIHNvcnRpbmcoKDAsIF9vYmplY3QuY2xvbmUpKEVpKSwgKDAsIF9vYmplY3QuY2xvbmUpKFNpaikpO1xuICB9IC8vIGRpYWdvbmFsaXphdGlvbiBpbXBsZW1lbnRhdGlvbiBmb3IgYmlnTnVtYmVyXG5cblxuICBmdW5jdGlvbiBkaWFnQmlnKHgpIHtcbiAgICB2YXIgTiA9IHgubGVuZ3RoO1xuICAgIHZhciBlMCA9IGFicyhjb25maWcuZXBzaWxvbiAvIE4pO1xuICAgIHZhciBwc2k7XG4gICAgdmFyIFNpaiA9IG5ldyBBcnJheShOKTsgLy8gU2lqIGlzIElkZW50aXR5IE1hdHJpeFxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBOOyBpKyspIHtcbiAgICAgIFNpaltpXSA9IGNyZWF0ZUFycmF5KE4sIDApO1xuICAgICAgU2lqW2ldW2ldID0gMS4wO1xuICAgIH0gLy8gaW5pdGlhbCBlcnJvclxuXG5cbiAgICB2YXIgVmFiID0gZ2V0QWlqQmlnKHgpO1xuXG4gICAgd2hpbGUgKGFicyhWYWJbMV0pID49IGFicyhlMCkpIHtcbiAgICAgIHZhciBfaTMgPSBWYWJbMF1bMF07XG4gICAgICB2YXIgaiA9IFZhYlswXVsxXTtcbiAgICAgIHBzaSA9IGdldFRoZXRhQmlnKHhbX2kzXVtfaTNdLCB4W2pdW2pdLCB4W19pM11bal0pO1xuICAgICAgeCA9IHgxQmlnKHgsIHBzaSwgX2kzLCBqKTtcbiAgICAgIFNpaiA9IFNpajFCaWcoU2lqLCBwc2ksIF9pMywgaik7XG4gICAgICBWYWIgPSBnZXRBaWpCaWcoeCk7XG4gICAgfVxuXG4gICAgdmFyIEVpID0gY3JlYXRlQXJyYXkoTiwgMCk7IC8vIGVpZ2VudmFsdWVzXG5cbiAgICBmb3IgKHZhciBfaTQgPSAwOyBfaTQgPCBOOyBfaTQrKykge1xuICAgICAgRWlbX2k0XSA9IHhbX2k0XVtfaTRdO1xuICAgIH0gLy8gcmV0dXJuIFtjbG9uZShFaSksIGNsb25lKFNpaildXG5cblxuICAgIHJldHVybiBzb3J0aW5nKCgwLCBfb2JqZWN0LmNsb25lKShFaSksICgwLCBfb2JqZWN0LmNsb25lKShTaWopKTtcbiAgfSAvLyBnZXQgYW5nbGVcblxuXG4gIGZ1bmN0aW9uIGdldFRoZXRhKGFpaSwgYWpqLCBhaWopIHtcbiAgICB2YXIgZGVub20gPSBhamogLSBhaWk7XG5cbiAgICBpZiAoTWF0aC5hYnMoZGVub20pIDw9IGNvbmZpZy5lcHNpbG9uKSB7XG4gICAgICByZXR1cm4gTWF0aC5QSSAvIDQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAwLjUgKiBNYXRoLmF0YW4oMiAqIGFpaiAvIChhamogLSBhaWkpKTtcbiAgICB9XG4gIH0gLy8gZ2V0IGFuZ2xlXG5cblxuICBmdW5jdGlvbiBnZXRUaGV0YUJpZyhhaWksIGFqaiwgYWlqKSB7XG4gICAgdmFyIGRlbm9tID0gc3VidHJhY3QoYWpqLCBhaWkpO1xuXG4gICAgaWYgKGFicyhkZW5vbSkgPD0gY29uZmlnLmVwc2lsb24pIHtcbiAgICAgIHJldHVybiBiaWdudW1iZXIoLTEpLmFjb3MoKS5kaXYoNCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBtdWx0aXBseVNjYWxhcigwLjUsIGF0YW4obXVsdGlwbHkoMiwgYWlqLCBpbnYoZGVub20pKSkpO1xuICAgIH1cbiAgfSAvLyB1cGRhdGUgZWlndmVjXG5cblxuICBmdW5jdGlvbiBTaWoxKFNpaiwgdGhldGEsIGksIGopIHtcbiAgICB2YXIgTiA9IFNpai5sZW5ndGg7XG4gICAgdmFyIGMgPSBNYXRoLmNvcyh0aGV0YSk7XG4gICAgdmFyIHMgPSBNYXRoLnNpbih0aGV0YSk7XG4gICAgdmFyIFNraSA9IGNyZWF0ZUFycmF5KE4sIDApO1xuICAgIHZhciBTa2ogPSBjcmVhdGVBcnJheShOLCAwKTtcblxuICAgIGZvciAodmFyIGsgPSAwOyBrIDwgTjsgaysrKSB7XG4gICAgICBTa2lba10gPSBjICogU2lqW2tdW2ldIC0gcyAqIFNpaltrXVtqXTtcbiAgICAgIFNraltrXSA9IHMgKiBTaWpba11baV0gKyBjICogU2lqW2tdW2pdO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9rID0gMDsgX2sgPCBOOyBfaysrKSB7XG4gICAgICBTaWpbX2tdW2ldID0gU2tpW19rXTtcbiAgICAgIFNpaltfa11bal0gPSBTa2pbX2tdO1xuICAgIH1cblxuICAgIHJldHVybiBTaWo7XG4gIH0gLy8gdXBkYXRlIGVpZ3ZlYyBmb3Igb3ZlcmxhcFxuXG5cbiAgZnVuY3Rpb24gU2lqMUJpZyhTaWosIHRoZXRhLCBpLCBqKSB7XG4gICAgdmFyIE4gPSBTaWoubGVuZ3RoO1xuICAgIHZhciBjID0gY29zKHRoZXRhKTtcbiAgICB2YXIgcyA9IHNpbih0aGV0YSk7XG4gICAgdmFyIFNraSA9IGNyZWF0ZUFycmF5KE4sIGJpZ251bWJlcigwKSk7XG4gICAgdmFyIFNraiA9IGNyZWF0ZUFycmF5KE4sIGJpZ251bWJlcigwKSk7XG5cbiAgICBmb3IgKHZhciBrID0gMDsgayA8IE47IGsrKykge1xuICAgICAgU2tpW2tdID0gc3VidHJhY3QobXVsdGlwbHlTY2FsYXIoYywgU2lqW2tdW2ldKSwgbXVsdGlwbHlTY2FsYXIocywgU2lqW2tdW2pdKSk7XG4gICAgICBTa2pba10gPSBhZGRTY2FsYXIobXVsdGlwbHlTY2FsYXIocywgU2lqW2tdW2ldKSwgbXVsdGlwbHlTY2FsYXIoYywgU2lqW2tdW2pdKSk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2syID0gMDsgX2syIDwgTjsgX2syKyspIHtcbiAgICAgIFNpaltfazJdW2ldID0gU2tpW19rMl07XG4gICAgICBTaWpbX2syXVtqXSA9IFNraltfazJdO1xuICAgIH1cblxuICAgIHJldHVybiBTaWo7XG4gIH0gLy8gdXBkYXRlIG1hdHJpeFxuXG5cbiAgZnVuY3Rpb24geDFCaWcoSGlqLCB0aGV0YSwgaSwgaikge1xuICAgIHZhciBOID0gSGlqLmxlbmd0aDtcbiAgICB2YXIgYyA9IGJpZ251bWJlcihjb3ModGhldGEpKTtcbiAgICB2YXIgcyA9IGJpZ251bWJlcihzaW4odGhldGEpKTtcbiAgICB2YXIgYzIgPSBtdWx0aXBseVNjYWxhcihjLCBjKTtcbiAgICB2YXIgczIgPSBtdWx0aXBseVNjYWxhcihzLCBzKTtcbiAgICB2YXIgQWtpID0gY3JlYXRlQXJyYXkoTiwgYmlnbnVtYmVyKDApKTtcbiAgICB2YXIgQWtqID0gY3JlYXRlQXJyYXkoTiwgYmlnbnVtYmVyKDApKTsgLy8gMmNzIEhpalxuXG4gICAgdmFyIGNzSGlqID0gbXVsdGlwbHkoYmlnbnVtYmVyKDIpLCBjLCBzLCBIaWpbaV1bal0pOyAvLyAgQWlpXG5cbiAgICB2YXIgQWlpID0gYWRkU2NhbGFyKHN1YnRyYWN0KG11bHRpcGx5U2NhbGFyKGMyLCBIaWpbaV1baV0pLCBjc0hpaiksIG11bHRpcGx5U2NhbGFyKHMyLCBIaWpbal1bal0pKTtcbiAgICB2YXIgQWpqID0gYWRkKG11bHRpcGx5U2NhbGFyKHMyLCBIaWpbaV1baV0pLCBjc0hpaiwgbXVsdGlwbHlTY2FsYXIoYzIsIEhpaltqXVtqXSkpOyAvLyAwICB0byBpXG5cbiAgICBmb3IgKHZhciBrID0gMDsgayA8IE47IGsrKykge1xuICAgICAgQWtpW2tdID0gc3VidHJhY3QobXVsdGlwbHlTY2FsYXIoYywgSGlqW2ldW2tdKSwgbXVsdGlwbHlTY2FsYXIocywgSGlqW2pdW2tdKSk7XG4gICAgICBBa2pba10gPSBhZGRTY2FsYXIobXVsdGlwbHlTY2FsYXIocywgSGlqW2ldW2tdKSwgbXVsdGlwbHlTY2FsYXIoYywgSGlqW2pdW2tdKSk7XG4gICAgfSAvLyBNb2RpZnkgSGlqXG5cblxuICAgIEhpaltpXVtpXSA9IEFpaTtcbiAgICBIaWpbal1bal0gPSBBamo7XG4gICAgSGlqW2ldW2pdID0gYmlnbnVtYmVyKDApO1xuICAgIEhpaltqXVtpXSA9IGJpZ251bWJlcigwKTsgLy8gMCAgdG8gaVxuXG4gICAgZm9yICh2YXIgX2szID0gMDsgX2szIDwgTjsgX2szKyspIHtcbiAgICAgIGlmIChfazMgIT09IGkgJiYgX2szICE9PSBqKSB7XG4gICAgICAgIEhpaltpXVtfazNdID0gQWtpW19rM107XG4gICAgICAgIEhpaltfazNdW2ldID0gQWtpW19rM107XG4gICAgICAgIEhpaltqXVtfazNdID0gQWtqW19rM107XG4gICAgICAgIEhpaltfazNdW2pdID0gQWtqW19rM107XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIEhpajtcbiAgfSAvLyB1cGRhdGUgbWF0cml4XG5cblxuICBmdW5jdGlvbiB4MShIaWosIHRoZXRhLCBpLCBqKSB7XG4gICAgdmFyIE4gPSBIaWoubGVuZ3RoO1xuICAgIHZhciBjID0gTWF0aC5jb3ModGhldGEpO1xuICAgIHZhciBzID0gTWF0aC5zaW4odGhldGEpO1xuICAgIHZhciBjMiA9IGMgKiBjO1xuICAgIHZhciBzMiA9IHMgKiBzO1xuICAgIHZhciBBa2kgPSBjcmVhdGVBcnJheShOLCAwKTtcbiAgICB2YXIgQWtqID0gY3JlYXRlQXJyYXkoTiwgMCk7IC8vICBBaWlcblxuICAgIHZhciBBaWkgPSBjMiAqIEhpaltpXVtpXSAtIDIgKiBjICogcyAqIEhpaltpXVtqXSArIHMyICogSGlqW2pdW2pdO1xuICAgIHZhciBBamogPSBzMiAqIEhpaltpXVtpXSArIDIgKiBjICogcyAqIEhpaltpXVtqXSArIGMyICogSGlqW2pdW2pdOyAvLyAwICB0byBpXG5cbiAgICBmb3IgKHZhciBrID0gMDsgayA8IE47IGsrKykge1xuICAgICAgQWtpW2tdID0gYyAqIEhpaltpXVtrXSAtIHMgKiBIaWpbal1ba107XG4gICAgICBBa2pba10gPSBzICogSGlqW2ldW2tdICsgYyAqIEhpaltqXVtrXTtcbiAgICB9IC8vIE1vZGlmeSBIaWpcblxuXG4gICAgSGlqW2ldW2ldID0gQWlpO1xuICAgIEhpaltqXVtqXSA9IEFqajtcbiAgICBIaWpbaV1bal0gPSAwO1xuICAgIEhpaltqXVtpXSA9IDA7IC8vIDAgIHRvIGlcblxuICAgIGZvciAodmFyIF9rNCA9IDA7IF9rNCA8IE47IF9rNCsrKSB7XG4gICAgICBpZiAoX2s0ICE9PSBpICYmIF9rNCAhPT0gaikge1xuICAgICAgICBIaWpbaV1bX2s0XSA9IEFraVtfazRdO1xuICAgICAgICBIaWpbX2s0XVtpXSA9IEFraVtfazRdO1xuICAgICAgICBIaWpbal1bX2s0XSA9IEFraltfazRdO1xuICAgICAgICBIaWpbX2s0XVtqXSA9IEFraltfazRdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBIaWo7XG4gIH0gLy8gZ2V0IG1heCBvZmYtZGlhZ29uYWwgdmFsdWUgZnJvbSBVcHBlciBEaWFnb25hbFxuXG5cbiAgZnVuY3Rpb24gZ2V0QWlqKE1paikge1xuICAgIHZhciBOID0gTWlqLmxlbmd0aDtcbiAgICB2YXIgbWF4TWlqID0gMDtcbiAgICB2YXIgbWF4SUogPSBbMCwgMV07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IE47IGkrKykge1xuICAgICAgZm9yICh2YXIgaiA9IGkgKyAxOyBqIDwgTjsgaisrKSB7XG4gICAgICAgIGlmIChNYXRoLmFicyhtYXhNaWopIDwgTWF0aC5hYnMoTWlqW2ldW2pdKSkge1xuICAgICAgICAgIG1heE1paiA9IE1hdGguYWJzKE1paltpXVtqXSk7XG4gICAgICAgICAgbWF4SUogPSBbaSwgal07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gW21heElKLCBtYXhNaWpdO1xuICB9IC8vIGdldCBtYXggb2ZmLWRpYWdvbmFsIHZhbHVlIGZyb20gVXBwZXIgRGlhZ29uYWxcblxuXG4gIGZ1bmN0aW9uIGdldEFpakJpZyhNaWopIHtcbiAgICB2YXIgTiA9IE1pai5sZW5ndGg7XG4gICAgdmFyIG1heE1paiA9IDA7XG4gICAgdmFyIG1heElKID0gWzAsIDFdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBOOyBpKyspIHtcbiAgICAgIGZvciAodmFyIGogPSBpICsgMTsgaiA8IE47IGorKykge1xuICAgICAgICBpZiAoYWJzKG1heE1paikgPCBhYnMoTWlqW2ldW2pdKSkge1xuICAgICAgICAgIG1heE1paiA9IGFicyhNaWpbaV1bal0pO1xuICAgICAgICAgIG1heElKID0gW2ksIGpdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFttYXhJSiwgbWF4TWlqXTtcbiAgfSAvLyBzb3J0IHJlc3VsdHNcblxuXG4gIGZ1bmN0aW9uIHNvcnRpbmcoRSwgUykge1xuICAgIHZhciBOID0gRS5sZW5ndGg7XG4gICAgdmFyIEVmID0gQXJyYXkoTik7XG4gICAgdmFyIFNmID0gQXJyYXkoTik7XG5cbiAgICBmb3IgKHZhciBrID0gMDsgayA8IE47IGsrKykge1xuICAgICAgU2Zba10gPSBBcnJheShOKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IE47IGkrKykge1xuICAgICAgdmFyIG1pbklEID0gMDtcbiAgICAgIHZhciBtaW5FID0gRVswXTtcblxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBFLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChFW2pdIDwgbWluRSkge1xuICAgICAgICAgIG1pbklEID0gajtcbiAgICAgICAgICBtaW5FID0gRVttaW5JRF07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgRWZbaV0gPSBFLnNwbGljZShtaW5JRCwgMSlbMF07XG5cbiAgICAgIGZvciAodmFyIF9rNSA9IDA7IF9rNSA8IE47IF9rNSsrKSB7XG4gICAgICAgIFNmW19rNV1baV0gPSBTW19rNV1bbWluSURdO1xuXG4gICAgICAgIFNbX2s1XS5zcGxpY2UobWluSUQsIDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBbKDAsIF9vYmplY3QuY2xvbmUpKEVmKSwgKDAsIF9vYmplY3QuY2xvbmUpKFNmKV07XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBhcnJheSBvZiBhIGNlcnRhaW4gc2l6ZSBhbmQgZmlsbCBhbGwgaXRlbXMgd2l0aCBhbiBpbml0aWFsIHZhbHVlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzaXplXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcmV0dXJuIHtudW1iZXJbXX1cbiAgICovXG5cblxuICBmdW5jdGlvbiBjcmVhdGVBcnJheShzaXplLCB2YWx1ZSkge1xuICAgIC8vIFRPRE86IGFzIHNvb24gYXMgYWxsIGJyb3dzZXJzIHN1cHBvcnQgQXJyYXkuZmlsbCwgdXNlIHRoYXQgaW5zdGVhZCAoSUUgZG9lc24ndCBzdXBwb3J0IGl0KVxuICAgIHZhciBhcnJheSA9IG5ldyBBcnJheShzaXplKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICBhcnJheVtpXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiBhcnJheTtcbiAgfVxuXG4gIHJldHVybiBlaWdzO1xufSk7XG5leHBvcnRzLmNyZWF0ZUVpZ3MgPSBjcmVhdGVFaWdzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVFeHBtID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdleHBtJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FicycsICdhZGQnLCAnaWRlbnRpdHknLCAnaW52JywgJ211bHRpcGx5J107XG52YXIgY3JlYXRlRXhwbSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBhYnMgPSBfcmVmLmFicyxcbiAgICAgIGFkZCA9IF9yZWYuYWRkLFxuICAgICAgaWRlbnRpdHkgPSBfcmVmLmlkZW50aXR5LFxuICAgICAgaW52ID0gX3JlZi5pbnYsXG4gICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHk7XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIG1hdHJpeCBleHBvbmVudGlhbCwgZXhwbShBKSA9IGVeQS4gVGhlIG1hdHJpeCBtdXN0IGJlIHNxdWFyZS5cbiAgICogTm90IHRvIGJlIGNvbmZ1c2VkIHdpdGggZXhwKGEpLCB3aGljaCBwZXJmb3JtcyBlbGVtZW50LXdpc2VcbiAgICogZXhwb25lbnRpYXRpb24uXG4gICAqXG4gICAqIFRoZSBleHBvbmVudGlhbCBpcyBjYWxjdWxhdGVkIHVzaW5nIHRoZSBQYWTDqSBhcHByb3hpbWFudCB3aXRoIHNjYWxpbmcgYW5kXG4gICAqIHNxdWFyaW5nOyBzZWUgXCJOaW5ldGVlbiBEdWJpb3VzIFdheXMgdG8gQ29tcHV0ZSB0aGUgRXhwb25lbnRpYWwgb2YgYVxuICAgKiBNYXRyaXgsXCIgYnkgTW9sZXIgYW5kIFZhbiBMb2FuLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLmV4cG0oeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBjb25zdCBBID0gW1swLDJdLFswLDBdXVxuICAgKiAgICAgbWF0aC5leHBtKEEpICAgICAgICAvLyByZXR1cm5zIFtbMSwyXSxbMCwxXV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBleHBcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9IHggIEEgc3F1YXJlIE1hdHJpeFxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgVGhlIGV4cG9uZW50aWFsIG9mIHhcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoQSkge1xuICAgICAgLy8gQ2hlY2sgbWF0cml4IHNpemVcbiAgICAgIHZhciBzaXplID0gQS5zaXplKCk7XG5cbiAgICAgIGlmIChzaXplLmxlbmd0aCAhPT0gMiB8fCBzaXplWzBdICE9PSBzaXplWzFdKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggbXVzdCBiZSBzcXVhcmUgJyArICcoc2l6ZTogJyArICgwLCBfc3RyaW5nLmZvcm1hdCkoc2l6ZSkgKyAnKScpO1xuICAgICAgfVxuXG4gICAgICB2YXIgbiA9IHNpemVbMF07IC8vIERlc2lyZWQgYWNjdXJhY3kgb2YgdGhlIGFwcHJveGltYW50IChUaGUgYWN0dWFsIGFjY3VyYWN5XG4gICAgICAvLyB3aWxsIGJlIGFmZmVjdGVkIGJ5IHJvdW5kLW9mZiBlcnJvcilcblxuICAgICAgdmFyIGVwcyA9IDFlLTE1OyAvLyBUaGUgUGFkw6kgYXBwcm94aW1hbnQgaXMgbm90IHNvIGFjY3VyYXRlIHdoZW4gdGhlIHZhbHVlcyBvZiBBXG4gICAgICAvLyBhcmUgXCJsYXJnZVwiLCBzbyBzY2FsZSBBIGJ5IHBvd2VycyBvZiB0d28uIFRoZW4gY29tcHV0ZSB0aGVcbiAgICAgIC8vIGV4cG9uZW50aWFsLCBhbmQgc3F1YXJlIHRoZSByZXN1bHQgcmVwZWF0ZWRseSBhY2NvcmRpbmcgdG9cbiAgICAgIC8vIHRoZSBpZGVudGl0eSBlXkEgPSAoZV4oQS9tKSlebVxuICAgICAgLy8gQ29tcHV0ZSBpbmZpbml0eS1ub3JtIG9mIEEsIHx8QXx8LCB0byBzZWUgaG93IFwiYmlnXCIgaXQgaXNcblxuICAgICAgdmFyIGluZk5vcm0gPSBpbmZpbml0eU5vcm0oQSk7IC8vIEZpbmQgdGhlIG9wdGltYWwgc2NhbGluZyBmYWN0b3IgYW5kIG51bWJlciBvZiB0ZXJtcyBpbiB0aGVcbiAgICAgIC8vIFBhZMOpIGFwcHJveGltYW50IHRvIHJlYWNoIHRoZSBkZXNpcmVkIGFjY3VyYWN5XG5cbiAgICAgIHZhciBwYXJhbXMgPSBmaW5kUGFyYW1zKGluZk5vcm0sIGVwcyk7XG4gICAgICB2YXIgcSA9IHBhcmFtcy5xO1xuICAgICAgdmFyIGogPSBwYXJhbXMuajsgLy8gVGhlIFBhZGUgYXBwcm94aW1hdGlvbiB0byBlXkEgaXM6XG4gICAgICAvLyBScXEoQSkgPSBEcXEoQSkgXiAtMSAqIE5xcShBKVxuICAgICAgLy8gd2hlcmVcbiAgICAgIC8vIE5xcShBKSA9IHN1bShpPTAsIHEsICgycS1pKSFwISAvIFsgKDJxKSFpIShxLWkpISBdIEFeaVxuICAgICAgLy8gRHFxKEEpID0gc3VtKGk9MCwgcSwgKDJxLWkpIXEhIC8gWyAoMnEpIWkhKHEtaSkhIF0gKC1BKV5pXG4gICAgICAvLyBTY2FsZSBBIGJ5IDEgLyAyXmpcblxuICAgICAgdmFyIEFwb3MgPSBtdWx0aXBseShBLCBNYXRoLnBvdygyLCAtaikpOyAvLyBUaGUgaT0wIHRlcm0gaXMganVzdCB0aGUgaWRlbnRpdHkgbWF0cml4XG5cbiAgICAgIHZhciBOID0gaWRlbnRpdHkobik7XG4gICAgICB2YXIgRCA9IGlkZW50aXR5KG4pOyAvLyBJbml0aWFsaXphdGlvbiAoaT0wKVxuXG4gICAgICB2YXIgZmFjdG9yID0gMTsgLy8gSW5pdGlhbGl6YXRpb24gKGk9MSlcblxuICAgICAgdmFyIEFwb3NUb0kgPSBBcG9zOyAvLyBDbG9uaW5nIG5vdCBuZWNlc3NhcnlcblxuICAgICAgdmFyIGFsdGVybmF0ZSA9IC0xO1xuXG4gICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBxOyBpKyspIHtcbiAgICAgICAgaWYgKGkgPiAxKSB7XG4gICAgICAgICAgQXBvc1RvSSA9IG11bHRpcGx5KEFwb3NUb0ksIEFwb3MpO1xuICAgICAgICAgIGFsdGVybmF0ZSA9IC1hbHRlcm5hdGU7XG4gICAgICAgIH1cblxuICAgICAgICBmYWN0b3IgPSBmYWN0b3IgKiAocSAtIGkgKyAxKSAvICgoMiAqIHEgLSBpICsgMSkgKiBpKTtcbiAgICAgICAgTiA9IGFkZChOLCBtdWx0aXBseShmYWN0b3IsIEFwb3NUb0kpKTtcbiAgICAgICAgRCA9IGFkZChELCBtdWx0aXBseShmYWN0b3IgKiBhbHRlcm5hdGUsIEFwb3NUb0kpKTtcbiAgICAgIH1cblxuICAgICAgdmFyIFIgPSBtdWx0aXBseShpbnYoRCksIE4pOyAvLyBTcXVhcmUgaiB0aW1lc1xuXG4gICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgajsgX2krKykge1xuICAgICAgICBSID0gbXVsdGlwbHkoUiwgUik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoMCwgX2lzLmlzU3BhcnNlTWF0cml4KShBKSA/IEEuY3JlYXRlU3BhcnNlTWF0cml4KFIpIDogUjtcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGluZmluaXR5Tm9ybShBKSB7XG4gICAgdmFyIG4gPSBBLnNpemUoKVswXTtcbiAgICB2YXIgaW5mTm9ybSA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgdmFyIHJvd1N1bSA9IDA7XG5cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbjsgaisrKSB7XG4gICAgICAgIHJvd1N1bSArPSBhYnMoQS5nZXQoW2ksIGpdKSk7XG4gICAgICB9XG5cbiAgICAgIGluZk5vcm0gPSBNYXRoLm1heChyb3dTdW0sIGluZk5vcm0pO1xuICAgIH1cblxuICAgIHJldHVybiBpbmZOb3JtO1xuICB9XG4gIC8qKlxuICAgKiBGaW5kIHRoZSBiZXN0IHBhcmFtZXRlcnMgZm9yIHRoZSBQYWRlIGFwcHJveGltYW50IGdpdmVuXG4gICAqIHRoZSBtYXRyaXggbm9ybSBhbmQgZGVzaXJlZCBhY2N1cmFjeS4gUmV0dXJucyB0aGUgZmlyc3QgYWNjZXB0YWJsZVxuICAgKiBjb21iaW5hdGlvbiBpbiBvcmRlciBvZiBpbmNyZWFzaW5nIGNvbXB1dGF0aW9uYWwgbG9hZC5cbiAgICovXG5cblxuICBmdW5jdGlvbiBmaW5kUGFyYW1zKGluZk5vcm0sIGVwcykge1xuICAgIHZhciBtYXhTZWFyY2hTaXplID0gMzA7XG5cbiAgICBmb3IgKHZhciBrID0gMDsgayA8IG1heFNlYXJjaFNpemU7IGsrKykge1xuICAgICAgZm9yICh2YXIgcSA9IDA7IHEgPD0gazsgcSsrKSB7XG4gICAgICAgIHZhciBqID0gayAtIHE7XG5cbiAgICAgICAgaWYgKGVycm9yRXN0aW1hdGUoaW5mTm9ybSwgcSwgaikgPCBlcHMpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcTogcSxcbiAgICAgICAgICAgIGo6IGpcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZmluZCBhY2NlcHRhYmxlIHBhcmFtZXRlcnMgdG8gY29tcHV0ZSB0aGUgbWF0cml4IGV4cG9uZW50aWFsICh0cnkgaW5jcmVhc2luZyBtYXhTZWFyY2hTaXplIGluIGV4cG0uanMpJyk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGVzdGltYXRlZCBlcnJvciBvZiB0aGUgUGFkZSBhcHByb3hpbWFudCBmb3IgdGhlIGdpdmVuXG4gICAqIHBhcmFtZXRlcnMuXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gZXJyb3JFc3RpbWF0ZShpbmZOb3JtLCBxLCBqKSB7XG4gICAgdmFyIHFmYWMgPSAxO1xuXG4gICAgZm9yICh2YXIgaSA9IDI7IGkgPD0gcTsgaSsrKSB7XG4gICAgICBxZmFjICo9IGk7XG4gICAgfVxuXG4gICAgdmFyIHR3b3FmYWMgPSBxZmFjO1xuXG4gICAgZm9yICh2YXIgX2kyID0gcSArIDE7IF9pMiA8PSAyICogcTsgX2kyKyspIHtcbiAgICAgIHR3b3FmYWMgKj0gX2kyO1xuICAgIH1cblxuICAgIHZhciB0d29xcDFmYWMgPSB0d29xZmFjICogKDIgKiBxICsgMSk7XG4gICAgcmV0dXJuIDguMCAqIE1hdGgucG93KGluZk5vcm0gLyBNYXRoLnBvdygyLCBqKSwgMiAqIHEpICogcWZhYyAqIHFmYWMgLyAodHdvcWZhYyAqIHR3b3FwMWZhYyk7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVFeHBtID0gY3JlYXRlRXhwbTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRXllID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxuLy8gVE9ETzogZnVuY3Rpb24gZXllIGlzIHJlbW92ZWQgc2luY2UgdjUuMC4wIChKdW5lIDIwMTgpLiBSZW1vdmUgaXQgc29tZSBkYXkuXG52YXIgY3JlYXRlRXllID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKCdleWUnLCBbXSwgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZXllKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRnVuY3Rpb24gXCJleWVcIiBpcyByZW5hbWVkIHRvIFwiaWRlbnRpdHlcIiBzaW5jZSBtYXRoanMgdmVyc2lvbiA1LjAuMC4gJyArICdUbyBrZWVwIGV5ZSB3b3JraW5nLCBjcmVhdGUgYW4gYWxpYXMgZm9yIGl0IHVzaW5nIFwibWF0aC5pbXBvcnQoe2V5ZTogbWF0aC5pZGVudGl0eX0sIHtvdmVycmlkZTogdHJ1ZX0pXCInKTtcbiAgfTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVFeWUgPSBjcmVhdGVFeWU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUZpbHRlciA9IHZvaWQgMDtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mdW5jdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mdW5jdGlvblwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2ZpbHRlcic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUZpbHRlciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIEZpbHRlciB0aGUgaXRlbXMgaW4gYW4gYXJyYXkgb3Igb25lIGRpbWVuc2lvbmFsIG1hdHJpeC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmZpbHRlcih4LCB0ZXN0KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgZnVuY3Rpb24gaXNQb3NpdGl2ZSAoeCkge1xuICAgKiAgICAgIHJldHVybiB4ID4gMFxuICAgKiAgICB9XG4gICAqICAgIG1hdGguZmlsdGVyKFs2LCAtMiwgLTEsIDQsIDNdLCBpc1Bvc2l0aXZlKSAvLyByZXR1cm5zIFs2LCA0LCAzXVxuICAgKlxuICAgKiAgICBtYXRoLmZpbHRlcihbXCIyM1wiLCBcImZvb1wiLCBcIjEwMFwiLCBcIjU1XCIsIFwiYmFyXCJdLCAvWzAtOV0rLykgLy8gcmV0dXJucyBbXCIyM1wiLCBcIjEwMFwiLCBcIjU1XCJdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBmb3JFYWNoLCBtYXAsIHNvcnRcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXggfCBBcnJheX0geCAgICBBIG9uZSBkaW1lbnNpb25hbCBtYXRyaXggb3IgYXJyYXkgdG8gZmlsdGVyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb24gfCBSZWdFeHB9IHRlc3RcbiAgICogICAgICAgIEEgZnVuY3Rpb24gb3IgcmVndWxhciBleHByZXNzaW9uIHRvIHRlc3QgaXRlbXMuXG4gICAqICAgICAgICBBbGwgZW50cmllcyBmb3Igd2hpY2ggYHRlc3RgIHJldHVybnMgdHJ1ZSBhcmUgcmV0dXJuZWQuXG4gICAqICAgICAgICBXaGVuIGB0ZXN0YCBpcyBhIGZ1bmN0aW9uLCBpdCBpcyBpbnZva2VkIHdpdGggdGhyZWUgcGFyYW1ldGVyczpcbiAgICogICAgICAgIHRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudCwgdGhlIGluZGV4IG9mIHRoZSBlbGVtZW50LCBhbmQgdGhlXG4gICAqICAgICAgICBtYXRyaXgvYXJyYXkgYmVpbmcgdHJhdmVyc2VkLiBUaGUgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSBib29sZWFuLlxuICAgKiBAcmV0dXJuIHtNYXRyaXggfCBBcnJheX0gUmV0dXJucyB0aGUgZmlsdGVyZWQgbWF0cml4LlxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKCdmaWx0ZXInLCB7XG4gICAgJ0FycmF5LCBmdW5jdGlvbic6IF9maWx0ZXJDYWxsYmFjayxcbiAgICAnTWF0cml4LCBmdW5jdGlvbic6IGZ1bmN0aW9uIE1hdHJpeEZ1bmN0aW9uKHgsIHRlc3QpIHtcbiAgICAgIHJldHVybiB4LmNyZWF0ZShfZmlsdGVyQ2FsbGJhY2soeC50b0FycmF5KCksIHRlc3QpKTtcbiAgICB9LFxuICAgICdBcnJheSwgUmVnRXhwJzogX2FycmF5LmZpbHRlclJlZ0V4cCxcbiAgICAnTWF0cml4LCBSZWdFeHAnOiBmdW5jdGlvbiBNYXRyaXhSZWdFeHAoeCwgdGVzdCkge1xuICAgICAgcmV0dXJuIHguY3JlYXRlKCgwLCBfYXJyYXkuZmlsdGVyUmVnRXhwKSh4LnRvQXJyYXkoKSwgdGVzdCkpO1xuICAgIH1cbiAgfSk7XG59KTtcbi8qKlxuICogRmlsdGVyIHZhbHVlcyBpbiBhIGNhbGxiYWNrIGdpdmVuIGEgY2FsbGJhY2sgZnVuY3Rpb25cbiAqIEBwYXJhbSB7QXJyYXl9IHhcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtBcnJheX0gUmV0dXJucyB0aGUgZmlsdGVyZWQgYXJyYXlcbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0cy5jcmVhdGVGaWx0ZXIgPSBjcmVhdGVGaWx0ZXI7XG5cbmZ1bmN0aW9uIF9maWx0ZXJDYWxsYmFjayh4LCBjYWxsYmFjaykge1xuICAvLyBmaWd1cmUgb3V0IHdoYXQgbnVtYmVyIG9mIGFyZ3VtZW50cyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZXhwZWN0c1xuICB2YXIgYXJncyA9ICgwLCBfZnVuY3Rpb24ubWF4QXJndW1lbnRDb3VudCkoY2FsbGJhY2spO1xuICByZXR1cm4gKDAsIF9hcnJheS5maWx0ZXIpKHgsIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGFycmF5KSB7XG4gICAgLy8gaW52b2tlIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aXRoIHRoZSByaWdodCBudW1iZXIgb2YgYXJndW1lbnRzXG4gICAgaWYgKGFyZ3MgPT09IDEpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayh2YWx1ZSk7XG4gICAgfSBlbHNlIGlmIChhcmdzID09PSAyKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2sodmFsdWUsIFtpbmRleF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyAzIG9yIC0xXG4gICAgICByZXR1cm4gY2FsbGJhY2sodmFsdWUsIFtpbmRleF0sIGFycmF5KTtcbiAgICB9XG4gIH0pO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVGbGF0dGVuID0gdm9pZCAwO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdmbGF0dGVuJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCddO1xudmFyIGNyZWF0ZUZsYXR0ZW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXg7XG5cbiAgLyoqXG4gICAqIEZsYXR0ZW4gYSBtdWx0aSBkaW1lbnNpb25hbCBtYXRyaXggaW50byBhIHNpbmdsZSBkaW1lbnNpb25hbCBtYXRyaXguXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5mbGF0dGVuKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmZsYXR0ZW4oW1sxLDJdLCBbMyw0XV0pICAgLy8gcmV0dXJucyBbMSwgMiwgMywgNF1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGNvbmNhdCwgcmVzaXplLCBzaXplLCBzcXVlZXplXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4IHwgQXJyYXl9IHggICBNYXRyaXggdG8gYmUgZmxhdHRlbmVkXG4gICAqIEByZXR1cm4ge01hdHJpeCB8IEFycmF5fSBSZXR1cm5zIHRoZSBmbGF0dGVuZWQgbWF0cml4XG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIEFycmF5OiBmdW5jdGlvbiBBcnJheSh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9hcnJheS5mbGF0dGVuKSgoMCwgX29iamVjdC5jbG9uZSkoeCkpO1xuICAgIH0sXG4gICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoeCkge1xuICAgICAgdmFyIGZsYXQgPSAoMCwgX2FycmF5LmZsYXR0ZW4pKCgwLCBfb2JqZWN0LmNsb25lKSh4LnRvQXJyYXkoKSkpOyAvLyBUT0RPOiByZXR1cm4gdGhlIHNhbWUgbWF0cml4IHR5cGUgYXMgeFxuXG4gICAgICByZXR1cm4gbWF0cml4KGZsYXQpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlRmxhdHRlbiA9IGNyZWF0ZUZsYXR0ZW47IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUZvckVhY2ggPSB2b2lkIDA7XG5cbnZhciBfZnVuY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZnVuY3Rpb25cIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdmb3JFYWNoJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlRm9yRWFjaCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGUgb3ZlciBhbGwgZWxlbWVudHMgb2YgYSBtYXRyaXgvYXJyYXksIGFuZCBleGVjdXRlcyB0aGUgZ2l2ZW4gY2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5mb3JFYWNoKHgsIGNhbGxiYWNrKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5mb3JFYWNoKFsxLCAyLCAzXSwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICogICAgICBjb25zb2xlLmxvZyh2YWx1ZSlcbiAgICogICAgfSlcbiAgICogICAgLy8gb3V0cHV0cyAxLCAyLCAzXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBmaWx0ZXIsIG1hcCwgc29ydFxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeCB8IEFycmF5fSB4ICAgIFRoZSBtYXRyaXggdG8gaXRlcmF0ZSBvbi5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgaW52b2tlZCB3aXRoIHRocmVlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyczogdGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50LCB0aGUgaW5kZXhcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgZWxlbWVudCwgYW5kIHRoZSBNYXRyaXgvYXJyYXkgYmVpbmcgdHJhdmVyc2VkLlxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnQXJyYXksIGZ1bmN0aW9uJzogX2ZvckVhY2gsXG4gICAgJ01hdHJpeCwgZnVuY3Rpb24nOiBmdW5jdGlvbiBNYXRyaXhGdW5jdGlvbih4LCBjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHguZm9yRWFjaChjYWxsYmFjayk7XG4gICAgfVxuICB9KTtcbn0pO1xuLyoqXG4gKiBmb3JFYWNoIGZvciBhIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0cy5jcmVhdGVGb3JFYWNoID0gY3JlYXRlRm9yRWFjaDtcblxuZnVuY3Rpb24gX2ZvckVhY2goYXJyYXksIGNhbGxiYWNrKSB7XG4gIC8vIGZpZ3VyZSBvdXQgd2hhdCBudW1iZXIgb2YgYXJndW1lbnRzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBleHBlY3RzXG4gIHZhciBhcmdzID0gKDAsIF9mdW5jdGlvbi5tYXhBcmd1bWVudENvdW50KShjYWxsYmFjayk7XG5cbiAgdmFyIHJlY3Vyc2UgPSBmdW5jdGlvbiByZWN1cnNlKHZhbHVlLCBpbmRleCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgKDAsIF9hcnJheS5mb3JFYWNoKSh2YWx1ZSwgZnVuY3Rpb24gKGNoaWxkLCBpKSB7XG4gICAgICAgIC8vIHdlIGNyZWF0ZSBhIGNvcHkgb2YgdGhlIGluZGV4IGFycmF5IGFuZCBhcHBlbmQgdGhlIG5ldyBpbmRleCB2YWx1ZVxuICAgICAgICByZWN1cnNlKGNoaWxkLCBpbmRleC5jb25jYXQoaSkpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGludm9rZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aCB0aGUgcmlnaHQgbnVtYmVyIG9mIGFyZ3VtZW50c1xuICAgICAgaWYgKGFyZ3MgPT09IDEpIHtcbiAgICAgICAgY2FsbGJhY2sodmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChhcmdzID09PSAyKSB7XG4gICAgICAgIGNhbGxiYWNrKHZhbHVlLCBpbmRleCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyAzIG9yIC0xXG4gICAgICAgIGNhbGxiYWNrKHZhbHVlLCBpbmRleCwgYXJyYXkpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICByZWN1cnNlKGFycmF5LCBbXSk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUdldE1hdHJpeERhdGFUeXBlID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIG5hbWUgPSAnZ2V0TWF0cml4RGF0YVR5cGUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVHZXRNYXRyaXhEYXRhVHlwZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIEZpbmQgdGhlIGRhdGEgdHlwZSBvZiBhbGwgZWxlbWVudHMgaW4gYSBtYXRyaXggb3IgYXJyYXksXG4gICAqIGZvciBleGFtcGxlICdudW1iZXInIGlmIGFsbCBpdGVtcyBhcmUgYSBudW1iZXIgYW5kICdDb21wbGV4JyBpZiBhbGwgdmFsdWVzXG4gICAqIGFyZSBjb21wbGV4IG51bWJlcnMuXG4gICAqIElmIGEgbWF0cml4IGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgZGF0YSB0eXBlLCBpdCB3aWxsIHJldHVybiAnbWl4ZWQnLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguZ2V0TWF0cml4RGF0YVR5cGUoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIGNvbnN0IHggPSBbIFsxLCAyLCAzXSwgWzQsIDUsIDZdIF1cbiAgICogICAgY29uc3QgbWl4ZWRYID0gWyBbMSwgdHJ1ZV0sIFsyLCAzXSBdXG4gICAqICAgIGNvbnN0IGZyYWN0aW9uWCA9IFsgW21hdGguZnJhY3Rpb24oMSwgMyldLCBbbWF0aC5mcmFjdGlvbigxLCAzXSBdXG4gICAqICAgIGNvbnN0IHVuaXRYID0gWyBbbWF0aC51bml0KCc1Y20nKV0sIFttYXRoLnVuaXQoJzVjbScpXSBdXG4gICAqICAgIGNvbnN0IGJpZ051bWJlclggPSBbIFttYXRoLmJpZ251bWJlcigxKV0sIFttYXRoLmJpZ251bWJlcigwKV0gXVxuICAgKiAgICBjb25zdCBzcGFyc2UgPSBtYXRoLnNwYXJzZSh4KVxuICAgKiAgICBjb25zdCBkZW5zZSA9IG1hdGgubWF0cml4KHgpXG4gICAqICAgIG1hdGguZ2V0TWF0cml4RGF0YVR5cGUoeCkgICAvLyByZXR1cm5zICdudW1iZXInXG4gICAqICAgIG1hdGguZ2V0TWF0cml4RGF0YVR5cGUoc3BhcnNlKSAgIC8vIHJldHVybnMgJ251bWJlcidcbiAgICogICAgbWF0aC5nZXRNYXRyaXhEYXRhVHlwZShkZW5zZSkgICAvLyByZXR1cm5zICdudW1iZXInXG4gICAqICAgIG1hdGguZ2V0TWF0cml4RGF0YVR5cGUobWl4ZWRYKSAvLyByZXR1cm5zICdtaXhlZCdcbiAgICogICAgbWF0aC5nZXRNYXRyaXhEYXRhVHlwZShmcmFjdGlvblgpIC8vIHJldHVybnMgJ0ZyYWN0aW9uJ1xuICAgKiAgICBtYXRoLmdldE1hdHJpeERhdGFUeXBlKHVuaXRYKSAvLyByZXR1cm5zICdVbml0J1xuICAgKiAgICBtYXRoLmdldE1hdHJpeERhdGFUeXBlKGJpZ051bWJlclgpIC8vIHJldHVybiAnQmlnTnVtYmVyJ1xuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICogIFNwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXhcbiAgICpcbiAgICogQHBhcmFtIHsuLi5NYXRyaXggfCBBcnJheX0geCAgIFRoZSBNYXRyaXggd2l0aCB2YWx1ZXMuXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ30gQSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1hdHJpeCB0eXBlXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIEFycmF5OiBmdW5jdGlvbiBBcnJheSh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9hcnJheS5nZXRBcnJheURhdGFUeXBlKSh4LCBfaXMudHlwZU9mKTtcbiAgICB9LFxuICAgIE1hdHJpeDogZnVuY3Rpb24gTWF0cml4KHgpIHtcbiAgICAgIHJldHVybiB4LmdldERhdGFUeXBlKCk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVHZXRNYXRyaXhEYXRhVHlwZSA9IGNyZWF0ZUdldE1hdHJpeERhdGFUeXBlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVJZGVudGl0eSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnaWRlbnRpdHknO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ21hdHJpeCcsICdCaWdOdW1iZXInLCAnRGVuc2VNYXRyaXgnLCAnU3BhcnNlTWF0cml4J107XG52YXIgY3JlYXRlSWRlbnRpdHkgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIEJpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4LFxuICAgICAgU3BhcnNlTWF0cml4ID0gX3JlZi5TcGFyc2VNYXRyaXg7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIDItZGltZW5zaW9uYWwgaWRlbnRpdHkgbWF0cml4IHdpdGggc2l6ZSBtIHggbiBvciBuIHggbi5cbiAgICogVGhlIG1hdHJpeCBoYXMgb25lcyBvbiB0aGUgZGlhZ29uYWwgYW5kIHplcm9zIGVsc2V3aGVyZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmlkZW50aXR5KG4pXG4gICAqICAgIG1hdGguaWRlbnRpdHkobiwgZm9ybWF0KVxuICAgKiAgICBtYXRoLmlkZW50aXR5KG0sIG4pXG4gICAqICAgIG1hdGguaWRlbnRpdHkobSwgbiwgZm9ybWF0KVxuICAgKiAgICBtYXRoLmlkZW50aXR5KFttLCBuXSlcbiAgICogICAgbWF0aC5pZGVudGl0eShbbSwgbl0sIGZvcm1hdClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguaWRlbnRpdHkoMykgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgW1sxLCAwLCAwXSwgWzAsIDEsIDBdLCBbMCwgMCwgMV1dXG4gICAqICAgIG1hdGguaWRlbnRpdHkoMywgMikgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgW1sxLCAwXSwgWzAsIDFdLCBbMCwgMF1dXG4gICAqXG4gICAqICAgIGNvbnN0IEEgPSBbWzEsIDIsIDNdLCBbNCwgNSwgNl1dXG4gICAqICAgIG1hdGguaWRlbnRpdHkobWF0aC5zaXplKEEpKSAgICAgICAgIC8vIHJldHVybnMgW1sxLCAwLCAwXSwgWzAsIDEsIDBdXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgZGlhZywgb25lcywgemVyb3MsIHNpemUsIHJhbmdlXG4gICAqXG4gICAqIEBwYXJhbSB7Li4ubnVtYmVyIHwgTWF0cml4IHwgQXJyYXl9IHNpemUgICBUaGUgc2l6ZSBmb3IgdGhlIG1hdHJpeFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Zvcm1hdF0gICAgICAgICAgICAgICAgICAgVGhlIE1hdHJpeCBzdG9yYWdlIGZvcm1hdFxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXggfCBBcnJheSB8IG51bWJlcn0gQSBtYXRyaXggd2l0aCBvbmVzIG9uIHRoZSBkaWFnb25hbC5cbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJyc6IGZ1bmN0aW9uIF8oKSB7XG4gICAgICByZXR1cm4gY29uZmlnLm1hdHJpeCA9PT0gJ01hdHJpeCcgPyBtYXRyaXgoW10pIDogW107XG4gICAgfSxcbiAgICBzdHJpbmc6IGZ1bmN0aW9uIHN0cmluZyhmb3JtYXQpIHtcbiAgICAgIHJldHVybiBtYXRyaXgoZm9ybWF0KTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXIocm93cykge1xuICAgICAgcmV0dXJuIF9pZGVudGl0eShyb3dzLCByb3dzLCBjb25maWcubWF0cml4ID09PSAnTWF0cml4JyA/ICdkZW5zZScgOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgc3RyaW5nJzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyU3RyaW5nKHJvd3MsIGZvcm1hdCkge1xuICAgICAgcmV0dXJuIF9pZGVudGl0eShyb3dzLCByb3dzLCBmb3JtYXQpO1xuICAgIH0sXG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyTnVtYmVyQmlnTnVtYmVyKHJvd3MsIGNvbHMpIHtcbiAgICAgIHJldHVybiBfaWRlbnRpdHkocm93cywgY29scywgY29uZmlnLm1hdHJpeCA9PT0gJ01hdHJpeCcgPyAnZGVuc2UnIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIG51bWJlciB8IEJpZ051bWJlciwgc3RyaW5nJzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyTnVtYmVyQmlnTnVtYmVyU3RyaW5nKHJvd3MsIGNvbHMsIGZvcm1hdCkge1xuICAgICAgcmV0dXJuIF9pZGVudGl0eShyb3dzLCBjb2xzLCBmb3JtYXQpO1xuICAgIH0sXG4gICAgQXJyYXk6IGZ1bmN0aW9uIEFycmF5KHNpemUpIHtcbiAgICAgIHJldHVybiBfaWRlbnRpdHlWZWN0b3Ioc2l6ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIHN0cmluZyc6IGZ1bmN0aW9uIEFycmF5U3RyaW5nKHNpemUsIGZvcm1hdCkge1xuICAgICAgcmV0dXJuIF9pZGVudGl0eVZlY3RvcihzaXplLCBmb3JtYXQpO1xuICAgIH0sXG4gICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoc2l6ZSkge1xuICAgICAgcmV0dXJuIF9pZGVudGl0eVZlY3RvcihzaXplLnZhbHVlT2YoKSwgc2l6ZS5zdG9yYWdlKCkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgc3RyaW5nJzogZnVuY3Rpb24gTWF0cml4U3RyaW5nKHNpemUsIGZvcm1hdCkge1xuICAgICAgcmV0dXJuIF9pZGVudGl0eVZlY3RvcihzaXplLnZhbHVlT2YoKSwgZm9ybWF0KTtcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIF9pZGVudGl0eVZlY3RvcihzaXplLCBmb3JtYXQpIHtcbiAgICBzd2l0Y2ggKHNpemUubGVuZ3RoKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIHJldHVybiBmb3JtYXQgPyBtYXRyaXgoZm9ybWF0KSA6IFtdO1xuXG4gICAgICBjYXNlIDE6XG4gICAgICAgIHJldHVybiBfaWRlbnRpdHkoc2l6ZVswXSwgc2l6ZVswXSwgZm9ybWF0KTtcblxuICAgICAgY2FzZSAyOlxuICAgICAgICByZXR1cm4gX2lkZW50aXR5KHNpemVbMF0sIHNpemVbMV0sIGZvcm1hdCk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVmVjdG9yIGNvbnRhaW5pbmcgdHdvIHZhbHVlcyBleHBlY3RlZCcpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIGFuIGlkZW50aXR5IG1hdHJpeFxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlcn0gcm93c1xuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlcn0gY29sc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Zvcm1hdF1cbiAgICogQHJldHVybnMge01hdHJpeH1cbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBfaWRlbnRpdHkocm93cywgY29scywgZm9ybWF0KSB7XG4gICAgLy8gQmlnTnVtYmVyIGNvbnN0cnVjdG9yIHdpdGggdGhlIHJpZ2h0IHByZWNpc2lvblxuICAgIHZhciBCaWcgPSAoMCwgX2lzLmlzQmlnTnVtYmVyKShyb3dzKSB8fCAoMCwgX2lzLmlzQmlnTnVtYmVyKShjb2xzKSA/IEJpZ051bWJlciA6IG51bGw7XG4gICAgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKHJvd3MpKSByb3dzID0gcm93cy50b051bWJlcigpO1xuICAgIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShjb2xzKSkgY29scyA9IGNvbHMudG9OdW1iZXIoKTtcblxuICAgIGlmICghKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShyb3dzKSB8fCByb3dzIDwgMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJhbWV0ZXJzIGluIGZ1bmN0aW9uIGlkZW50aXR5IG11c3QgYmUgcG9zaXRpdmUgaW50ZWdlcnMnKTtcbiAgICB9XG5cbiAgICBpZiAoISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoY29scykgfHwgY29scyA8IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGFyYW1ldGVycyBpbiBmdW5jdGlvbiBpZGVudGl0eSBtdXN0IGJlIHBvc2l0aXZlIGludGVnZXJzJyk7XG4gICAgfVxuXG4gICAgdmFyIG9uZSA9IEJpZyA/IG5ldyBCaWdOdW1iZXIoMSkgOiAxO1xuICAgIHZhciBkZWZhdWx0VmFsdWUgPSBCaWcgPyBuZXcgQmlnKDApIDogMDtcbiAgICB2YXIgc2l6ZSA9IFtyb3dzLCBjb2xzXTsgLy8gY2hlY2sgd2UgbmVlZCB0byByZXR1cm4gYSBtYXRyaXhcblxuICAgIGlmIChmb3JtYXQpIHtcbiAgICAgIC8vIGNyZWF0ZSBkaWFnb25hbCBtYXRyaXggKHVzZSBvcHRpbWl6ZWQgaW1wbGVtZW50YXRpb24gZm9yIHN0b3JhZ2UgZm9ybWF0KVxuICAgICAgaWYgKGZvcm1hdCA9PT0gJ3NwYXJzZScpIHtcbiAgICAgICAgcmV0dXJuIFNwYXJzZU1hdHJpeC5kaWFnb25hbChzaXplLCBvbmUsIDAsIGRlZmF1bHRWYWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmb3JtYXQgPT09ICdkZW5zZScpIHtcbiAgICAgICAgcmV0dXJuIERlbnNlTWF0cml4LmRpYWdvbmFsKHNpemUsIG9uZSwgMCwgZGVmYXVsdFZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gbWF0cml4IHR5cGUgXFxcIlwiLmNvbmNhdChmb3JtYXQsIFwiXFxcIlwiKSk7XG4gICAgfSAvLyBjcmVhdGUgYW5kIHJlc2l6ZSBhcnJheVxuXG5cbiAgICB2YXIgcmVzID0gKDAsIF9hcnJheS5yZXNpemUpKFtdLCBzaXplLCBkZWZhdWx0VmFsdWUpOyAvLyBmaWxsIGluIG9uZXMgb24gdGhlIGRpYWdvbmFsXG5cbiAgICB2YXIgbWluaW11bSA9IHJvd3MgPCBjb2xzID8gcm93cyA6IGNvbHM7IC8vIGZpbGwgZGlhZ29uYWxcblxuICAgIGZvciAodmFyIGQgPSAwOyBkIDwgbWluaW11bTsgZCsrKSB7XG4gICAgICByZXNbZF1bZF0gPSBvbmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZUlkZW50aXR5ID0gY3JlYXRlSWRlbnRpdHk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUludiA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3N0cmluZ1wiKTtcblxudmFyIG5hbWUgPSAnaW52JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdkaXZpZGVTY2FsYXInLCAnYWRkU2NhbGFyJywgJ211bHRpcGx5JywgJ3VuYXJ5TWludXMnLCAnZGV0JywgJ2lkZW50aXR5JywgJ2FicyddO1xudmFyIGNyZWF0ZUludiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGRpdmlkZVNjYWxhciA9IF9yZWYuZGl2aWRlU2NhbGFyLFxuICAgICAgYWRkU2NhbGFyID0gX3JlZi5hZGRTY2FsYXIsXG4gICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHksXG4gICAgICB1bmFyeU1pbnVzID0gX3JlZi51bmFyeU1pbnVzLFxuICAgICAgZGV0ID0gX3JlZi5kZXQsXG4gICAgICBpZGVudGl0eSA9IF9yZWYuaWRlbnRpdHksXG4gICAgICBhYnMgPSBfcmVmLmFicztcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBpbnZlcnNlIG9mIGEgc3F1YXJlIG1hdHJpeC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5pbnYoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLmludihbWzEsIDJdLCBbMywgNF1dKSAgLy8gcmV0dXJucyBbWy0yLCAxXSwgWzEuNSwgLTAuNV1dXG4gICAqICAgICBtYXRoLmludig0KSAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAwLjI1XG4gICAqICAgICAxIC8gNCAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAwLjI1XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgZGV0LCB0cmFuc3Bvc2VcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHggICAgIE1hdHJpeCB0byBiZSBpbnZlcnNlZFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IFRoZSBpbnZlcnNlIG9mIGB4YC5cbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgdmFyIHNpemUgPSAoMCwgX2lzLmlzTWF0cml4KSh4KSA/IHguc2l6ZSgpIDogKDAsIF9hcnJheS5hcnJheVNpemUpKHgpO1xuXG4gICAgICBzd2l0Y2ggKHNpemUubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAvLyB2ZWN0b3JcbiAgICAgICAgICBpZiAoc2l6ZVswXSA9PT0gMSkge1xuICAgICAgICAgICAgaWYgKCgwLCBfaXMuaXNNYXRyaXgpKHgpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBtYXRyaXgoW2RpdmlkZVNjYWxhcigxLCB4LnZhbHVlT2YoKVswXSldKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBbZGl2aWRlU2NhbGFyKDEsIHhbMF0pXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpeCBtdXN0IGJlIHNxdWFyZSAnICsgJyhzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShzaXplKSArICcpJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAvLyB0d28gZGltZW5zaW9uYWwgYXJyYXlcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgcm93cyA9IHNpemVbMF07XG4gICAgICAgICAgICB2YXIgY29scyA9IHNpemVbMV07XG5cbiAgICAgICAgICAgIGlmIChyb3dzID09PSBjb2xzKSB7XG4gICAgICAgICAgICAgIGlmICgoMCwgX2lzLmlzTWF0cml4KSh4KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtYXRyaXgoX2ludih4LnZhbHVlT2YoKSwgcm93cywgY29scyksIHguc3RvcmFnZSgpKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyByZXR1cm4gYW4gQXJyYXlcbiAgICAgICAgICAgICAgICByZXR1cm4gX2ludih4LCByb3dzLCBjb2xzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpeCBtdXN0IGJlIHNxdWFyZSAnICsgJyhzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShzaXplKSArICcpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgLy8gbXVsdGkgZGltZW5zaW9uYWwgYXJyYXlcbiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgdHdvIGRpbWVuc2lvbmFsICcgKyAnKHNpemU6ICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKHNpemUpICsgJyknKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGFueTogZnVuY3Rpb24gYW55KHgpIHtcbiAgICAgIC8vIHNjYWxhclxuICAgICAgcmV0dXJuIGRpdmlkZVNjYWxhcigxLCB4KTsgLy8gRklYTUU6IGNyZWF0ZSBhIEJpZ051bWJlciBvbmUgd2hlbiBjb25maWd1cmVkIGZvciBiaWdudW1iZXJzXG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgaW52ZXJzZSBvZiBhIHNxdWFyZSBtYXRyaXhcbiAgICogQHBhcmFtIHtBcnJheVtdfSBtYXQgICAgIEEgc3F1YXJlIG1hdHJpeFxuICAgKiBAcGFyYW0ge251bWJlcn0gcm93cyAgICAgTnVtYmVyIG9mIHJvd3NcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHMgICAgIE51bWJlciBvZiBjb2x1bW5zLCBtdXN0IGVxdWFsIHJvd3NcbiAgICogQHJldHVybiB7QXJyYXlbXX0gaW52ICAgIEludmVyc2UgbWF0cml4XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9pbnYobWF0LCByb3dzLCBjb2xzKSB7XG4gICAgdmFyIHIsIHMsIGYsIHZhbHVlLCB0ZW1wO1xuXG4gICAgaWYgKHJvd3MgPT09IDEpIHtcbiAgICAgIC8vIHRoaXMgaXMgYSAxIHggMSBtYXRyaXhcbiAgICAgIHZhbHVlID0gbWF0WzBdWzBdO1xuXG4gICAgICBpZiAodmFsdWUgPT09IDApIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0Nhbm5vdCBjYWxjdWxhdGUgaW52ZXJzZSwgZGV0ZXJtaW5hbnQgaXMgemVybycpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gW1tkaXZpZGVTY2FsYXIoMSwgdmFsdWUpXV07XG4gICAgfSBlbHNlIGlmIChyb3dzID09PSAyKSB7XG4gICAgICAvLyB0aGlzIGlzIGEgMiB4IDIgbWF0cml4XG4gICAgICB2YXIgZCA9IGRldChtYXQpO1xuXG4gICAgICBpZiAoZCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSBpbnZlcnNlLCBkZXRlcm1pbmFudCBpcyB6ZXJvJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbW2RpdmlkZVNjYWxhcihtYXRbMV1bMV0sIGQpLCBkaXZpZGVTY2FsYXIodW5hcnlNaW51cyhtYXRbMF1bMV0pLCBkKV0sIFtkaXZpZGVTY2FsYXIodW5hcnlNaW51cyhtYXRbMV1bMF0pLCBkKSwgZGl2aWRlU2NhbGFyKG1hdFswXVswXSwgZCldXTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdGhpcyBpcyBhIG1hdHJpeCBvZiAzIHggMyBvciBsYXJnZXJcbiAgICAgIC8vIGNhbGN1bGF0ZSBpbnZlcnNlIHVzaW5nIGdhdXNzLWpvcmRhbiBlbGltaW5hdGlvblxuICAgICAgLy8gICAgICBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9HYXVzc2lhbl9lbGltaW5hdGlvblxuICAgICAgLy8gICAgICBodHRwOi8vbWF0aHdvcmxkLndvbGZyYW0uY29tL01hdHJpeEludmVyc2UuaHRtbFxuICAgICAgLy8gICAgICBodHRwOi8vbWF0aC51d3cuZWR1L35tY2ZhcmxhdC9pbnZlcnNlLmh0bVxuICAgICAgLy8gbWFrZSBhIGNvcHkgb2YgdGhlIG1hdHJpeCAob25seSB0aGUgYXJyYXlzLCBub3Qgb2YgdGhlIGVsZW1lbnRzKVxuICAgICAgdmFyIEEgPSBtYXQuY29uY2F0KCk7XG5cbiAgICAgIGZvciAociA9IDA7IHIgPCByb3dzOyByKyspIHtcbiAgICAgICAgQVtyXSA9IEFbcl0uY29uY2F0KCk7XG4gICAgICB9IC8vIGNyZWF0ZSBhbiBpZGVudGl0eSBtYXRyaXggd2hpY2ggaW4gdGhlIGVuZCB3aWxsIGNvbnRhaW4gdGhlXG4gICAgICAvLyBtYXRyaXggaW52ZXJzZVxuXG5cbiAgICAgIHZhciBCID0gaWRlbnRpdHkocm93cykudmFsdWVPZigpOyAvLyBsb29wIG92ZXIgYWxsIGNvbHVtbnMsIGFuZCBwZXJmb3JtIHJvdyByZWR1Y3Rpb25zXG5cbiAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwgY29sczsgYysrKSB7XG4gICAgICAgIC8vIFBpdm90aW5nOiBTd2FwIHJvdyBjIHdpdGggcm93IHIsIHdoZXJlIHJvdyByIGNvbnRhaW5zIHRoZSBsYXJnZXN0IGVsZW1lbnQgQVtyXVtjXVxuICAgICAgICB2YXIgQUJpZyA9IGFicyhBW2NdW2NdKTtcbiAgICAgICAgdmFyIHJCaWcgPSBjO1xuICAgICAgICByID0gYyArIDE7XG5cbiAgICAgICAgd2hpbGUgKHIgPCByb3dzKSB7XG4gICAgICAgICAgaWYgKGFicyhBW3JdW2NdKSA+IEFCaWcpIHtcbiAgICAgICAgICAgIEFCaWcgPSBhYnMoQVtyXVtjXSk7XG4gICAgICAgICAgICByQmlnID0gcjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByKys7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQUJpZyA9PT0gMCkge1xuICAgICAgICAgIHRocm93IEVycm9yKCdDYW5ub3QgY2FsY3VsYXRlIGludmVyc2UsIGRldGVybWluYW50IGlzIHplcm8nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHIgPSByQmlnO1xuXG4gICAgICAgIGlmIChyICE9PSBjKSB7XG4gICAgICAgICAgdGVtcCA9IEFbY107XG4gICAgICAgICAgQVtjXSA9IEFbcl07XG4gICAgICAgICAgQVtyXSA9IHRlbXA7XG4gICAgICAgICAgdGVtcCA9IEJbY107XG4gICAgICAgICAgQltjXSA9IEJbcl07XG4gICAgICAgICAgQltyXSA9IHRlbXA7XG4gICAgICAgIH0gLy8gZWxpbWluYXRlIG5vbi16ZXJvIHZhbHVlcyBvbiB0aGUgb3RoZXIgcm93cyBhdCBjb2x1bW4gY1xuXG5cbiAgICAgICAgdmFyIEFjID0gQVtjXTtcbiAgICAgICAgdmFyIEJjID0gQltjXTtcblxuICAgICAgICBmb3IgKHIgPSAwOyByIDwgcm93czsgcisrKSB7XG4gICAgICAgICAgdmFyIEFyID0gQVtyXTtcbiAgICAgICAgICB2YXIgQnIgPSBCW3JdO1xuXG4gICAgICAgICAgaWYgKHIgIT09IGMpIHtcbiAgICAgICAgICAgIC8vIGVsaW1pbmF0ZSB2YWx1ZSBhdCBjb2x1bW4gYyBhbmQgcm93IHJcbiAgICAgICAgICAgIGlmIChBcltjXSAhPT0gMCkge1xuICAgICAgICAgICAgICBmID0gZGl2aWRlU2NhbGFyKHVuYXJ5TWludXMoQXJbY10pLCBBY1tjXSk7IC8vIGFkZCAoZiAqIHJvdyBjKSB0byByb3cgciB0byBlbGltaW5hdGUgdGhlIHZhbHVlXG4gICAgICAgICAgICAgIC8vIGF0IGNvbHVtbiBjXG5cbiAgICAgICAgICAgICAgZm9yIChzID0gYzsgcyA8IGNvbHM7IHMrKykge1xuICAgICAgICAgICAgICAgIEFyW3NdID0gYWRkU2NhbGFyKEFyW3NdLCBtdWx0aXBseShmLCBBY1tzXSkpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZm9yIChzID0gMDsgcyA8IGNvbHM7IHMrKykge1xuICAgICAgICAgICAgICAgIEJyW3NdID0gYWRkU2NhbGFyKEJyW3NdLCBtdWx0aXBseShmLCBCY1tzXSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIG5vcm1hbGl6ZSB2YWx1ZSBhdCBBY2MgdG8gMSxcbiAgICAgICAgICAgIC8vIGRpdmlkZSBlYWNoIHZhbHVlIG9uIHJvdyByIHdpdGggdGhlIHZhbHVlIGF0IEFjY1xuICAgICAgICAgICAgZiA9IEFjW2NdO1xuXG4gICAgICAgICAgICBmb3IgKHMgPSBjOyBzIDwgY29sczsgcysrKSB7XG4gICAgICAgICAgICAgIEFyW3NdID0gZGl2aWRlU2NhbGFyKEFyW3NdLCBmKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChzID0gMDsgcyA8IGNvbHM7IHMrKykge1xuICAgICAgICAgICAgICBCcltzXSA9IGRpdmlkZVNjYWxhcihCcltzXSwgZik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBCO1xuICAgIH1cbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZUludiA9IGNyZWF0ZUludjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlS3JvbiA9IHZvaWQgMDtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2tyb24nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ211bHRpcGx5U2NhbGFyJ107XG52YXIgY3JlYXRlS3JvbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIG11bHRpcGx5U2NhbGFyID0gX3JlZi5tdWx0aXBseVNjYWxhcjtcblxuICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBrcm9uZWNrZXIgcHJvZHVjdCBvZiAyIG1hdHJpY2VzIG9yIHZlY3RvcnMuXG4gICAgICpcbiAgICAgKiBOT1RFOiBJZiBhIG9uZSBkaW1lbnNpb25hbCB2ZWN0b3IgLyBtYXRyaXggaXMgZ2l2ZW4sIGl0IHdpbGwgYmVcbiAgICAgKiB3cmFwcGVkIHNvIGl0cyB0d28gZGltZW5zaW9ucy5cbiAgICAgKiBTZWUgdGhlIGV4YW1wbGVzLlxuICAgICAqXG4gICAgICogU3ludGF4OlxuICAgICAqXG4gICAgICogICAgbWF0aC5rcm9uKHgsIHkpXG4gICAgICpcbiAgICAgKiBFeGFtcGxlczpcbiAgICAgKlxuICAgICAqICAgIG1hdGgua3JvbihbWzEsIDBdLCBbMCwgMV1dLCBbWzEsIDJdLCBbMywgNF1dKVxuICAgICAqICAgIC8vIHJldHVybnMgWyBbIDEsIDIsIDAsIDAgXSwgWyAzLCA0LCAwLCAwIF0sIFsgMCwgMCwgMSwgMiBdLCBbIDAsIDAsIDMsIDQgXSBdXG4gICAgICpcbiAgICAgKiAgICBtYXRoLmtyb24oWzEsMV0sIFsyLDMsNF0pXG4gICAgICogICAgLy8gcmV0dXJucyBbIFsgMiwgMywgNCwgMiwgMywgNCBdIF1cbiAgICAgKlxuICAgICAqIFNlZSBhbHNvOlxuICAgICAqXG4gICAgICogICAgbXVsdGlwbHksIGRvdCwgY3Jvc3NcbiAgICAgKlxuICAgICAqIEBwYXJhbSAge0FycmF5IHwgTWF0cml4fSB4ICAgICBGaXJzdCB2ZWN0b3JcbiAgICAgKiBAcGFyYW0gIHtBcnJheSB8IE1hdHJpeH0geSAgICAgU2Vjb25kIHZlY3RvclxuICAgICAqIEByZXR1cm4ge0FycmF5IHwgTWF0cml4fSAgICAgICBSZXR1cm5zIHRoZSBrcm9uZWNrZXIgcHJvZHVjdCBvZiBgeGAgYW5kIGB5YFxuICAgICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdNYXRyaXgsIE1hdHJpeCc6IGZ1bmN0aW9uIE1hdHJpeE1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gbWF0cml4KF9rcm9uKHgudG9BcnJheSgpLCB5LnRvQXJyYXkoKSkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7XG4gICAgICByZXR1cm4gbWF0cml4KF9rcm9uKHgudG9BcnJheSgpLCB5KSk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBtYXRyaXgoX2tyb24oeCwgeS50b0FycmF5KCkpKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBfa3JvblxuICB9KTtcbiAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBrcm9uZWNrZXIgcHJvZHVjdCBvZiB0d28gbWF0cmljZXMgLyB2ZWN0b3JzXG4gICAgICogQHBhcmFtIHtBcnJheX0gYSAgRmlyc3QgdmVjdG9yXG4gICAgICogQHBhcmFtIHtBcnJheX0gYiAgU2Vjb25kIHZlY3RvclxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUga3JvbmVja2VyIHByb2R1Y3Qgb2YgeCBhbmQgeVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG5cbiAgZnVuY3Rpb24gX2tyb24oYSwgYikge1xuICAgIC8vIERlYWwgd2l0aCB0aGUgZGltZW5zaW9ucyBvZiB0aGUgbWF0cmljaWVzLlxuICAgIGlmICgoMCwgX2FycmF5LmFycmF5U2l6ZSkoYSkubGVuZ3RoID09PSAxKSB7XG4gICAgICAvLyBXcmFwIGl0IGluIGEgMkQgTWF0cml4XG4gICAgICBhID0gW2FdO1xuICAgIH1cblxuICAgIGlmICgoMCwgX2FycmF5LmFycmF5U2l6ZSkoYikubGVuZ3RoID09PSAxKSB7XG4gICAgICAvLyBXcmFwIGl0IGluIGEgMkQgTWF0cml4XG4gICAgICBiID0gW2JdO1xuICAgIH1cblxuICAgIGlmICgoMCwgX2FycmF5LmFycmF5U2l6ZSkoYSkubGVuZ3RoID4gMiB8fCAoMCwgX2FycmF5LmFycmF5U2l6ZSkoYikubGVuZ3RoID4gMikge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1ZlY3RvcnMgd2l0aCBkaW1lbnNpb25zIGdyZWF0ZXIgdGhlbiAyIGFyZSBub3Qgc3VwcG9ydGVkIGV4cGVjdGVkICcgKyAnKFNpemUgeCA9ICcgKyBKU09OLnN0cmluZ2lmeShhLmxlbmd0aCkgKyAnLCB5ID0gJyArIEpTT04uc3RyaW5naWZ5KGIubGVuZ3RoKSArICcpJyk7XG4gICAgfVxuXG4gICAgdmFyIHQgPSBbXTtcbiAgICB2YXIgciA9IFtdO1xuICAgIHJldHVybiBhLm1hcChmdW5jdGlvbiAoYSkge1xuICAgICAgcmV0dXJuIGIubWFwKGZ1bmN0aW9uIChiKSB7XG4gICAgICAgIHIgPSBbXTtcbiAgICAgICAgdC5wdXNoKHIpO1xuICAgICAgICByZXR1cm4gYS5tYXAoZnVuY3Rpb24gKHkpIHtcbiAgICAgICAgICByZXR1cm4gYi5tYXAoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiByLnB1c2gobXVsdGlwbHlTY2FsYXIoeSwgeCkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pICYmIHQ7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVLcm9uID0gY3JlYXRlS3JvbjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTWFwID0gdm9pZCAwO1xuXG52YXIgX2Z1bmN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2Z1bmN0aW9uXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnbWFwJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlTWFwID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IG1hdHJpeCBvciBhcnJheSB3aXRoIHRoZSByZXN1bHRzIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBleGVjdXRlZCBvblxuICAgKiBlYWNoIGVudHJ5IG9mIHRoZSBtYXRyaXgvYXJyYXkuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5tYXAoeCwgY2FsbGJhY2spXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLm1hcChbMSwgMiwgM10sIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAqICAgICAgcmV0dXJuIHZhbHVlICogdmFsdWVcbiAgICogICAgfSkgIC8vIHJldHVybnMgWzEsIDQsIDldXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBmaWx0ZXIsIGZvckVhY2gsIHNvcnRcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXggfCBBcnJheX0geCAgICBUaGUgbWF0cml4IHRvIGl0ZXJhdGUgb24uXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgVGhlIGNhbGxiYWNrIG1ldGhvZCBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiB0aGUgdmFsdWUgb2YgdGhlIGVsZW1lbnQsIHRoZSBpbmRleFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBlbGVtZW50LCBhbmQgdGhlIG1hdHJpeCBiZWluZyB0cmF2ZXJzZWQuXG4gICAqIEByZXR1cm4ge01hdHJpeCB8IGFycmF5fSAgICAgVHJhbnNmb3JtZWQgbWFwIG9mIHhcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ0FycmF5LCBmdW5jdGlvbic6IF9tYXAsXG4gICAgJ01hdHJpeCwgZnVuY3Rpb24nOiBmdW5jdGlvbiBNYXRyaXhGdW5jdGlvbih4LCBjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHgubWFwKGNhbGxiYWNrKTtcbiAgICB9XG4gIH0pO1xufSk7XG4vKipcbiAqIE1hcCBmb3IgYSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXlcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0cy5jcmVhdGVNYXAgPSBjcmVhdGVNYXA7XG5cbmZ1bmN0aW9uIF9tYXAoYXJyYXksIGNhbGxiYWNrKSB7XG4gIC8vIGZpZ3VyZSBvdXQgd2hhdCBudW1iZXIgb2YgYXJndW1lbnRzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBleHBlY3RzXG4gIHZhciBhcmdzID0gKDAsIF9mdW5jdGlvbi5tYXhBcmd1bWVudENvdW50KShjYWxsYmFjayk7XG5cbiAgdmFyIHJlY3Vyc2UgPSBmdW5jdGlvbiByZWN1cnNlKHZhbHVlLCBpbmRleCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlLm1hcChmdW5jdGlvbiAoY2hpbGQsIGkpIHtcbiAgICAgICAgLy8gd2UgY3JlYXRlIGEgY29weSBvZiB0aGUgaW5kZXggYXJyYXkgYW5kIGFwcGVuZCB0aGUgbmV3IGluZGV4IHZhbHVlXG4gICAgICAgIHJldHVybiByZWN1cnNlKGNoaWxkLCBpbmRleC5jb25jYXQoaSkpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGludm9rZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aCB0aGUgcmlnaHQgbnVtYmVyIG9mIGFyZ3VtZW50c1xuICAgICAgaWYgKGFyZ3MgPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoYXJncyA9PT0gMikge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sodmFsdWUsIGluZGV4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDMgb3IgLTFcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKHZhbHVlLCBpbmRleCwgYXJyYXkpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICByZXR1cm4gcmVjdXJzZShhcnJheSwgW10pO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVPbmVzID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdvbmVzJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdtYXRyaXgnLCAnQmlnTnVtYmVyJ107XG52YXIgY3JlYXRlT25lcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXI7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG1hdHJpeCBmaWxsZWQgd2l0aCBvbmVzLiBUaGUgY3JlYXRlZCBtYXRyaXggY2FuIGhhdmUgb25lIG9yXG4gICAqIG11bHRpcGxlIGRpbWVuc2lvbnMuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5vbmVzKG0pXG4gICAqICAgIG1hdGgub25lcyhtLCBmb3JtYXQpXG4gICAqICAgIG1hdGgub25lcyhtLCBuKVxuICAgKiAgICBtYXRoLm9uZXMobSwgbiwgZm9ybWF0KVxuICAgKiAgICBtYXRoLm9uZXMoW20sIG5dKVxuICAgKiAgICBtYXRoLm9uZXMoW20sIG5dLCBmb3JtYXQpXG4gICAqICAgIG1hdGgub25lcyhbbSwgbiwgcCwgLi4uXSlcbiAgICogICAgbWF0aC5vbmVzKFttLCBuLCBwLCAuLi5dLCBmb3JtYXQpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLm9uZXMoMykgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBbMSwgMSwgMV1cbiAgICogICAgbWF0aC5vbmVzKDMsIDIpICAgICAgICAgICAgICAgIC8vIHJldHVybnMgW1sxLCAxXSwgWzEsIDFdLCBbMSwgMV1dXG4gICAqICAgIG1hdGgub25lcygzLCAyLCAnZGVuc2UnKSAgICAgICAvLyByZXR1cm5zIERlbnNlIE1hdHJpeCBbWzEsIDFdLCBbMSwgMV0sIFsxLCAxXV1cbiAgICpcbiAgICogICAgY29uc3QgQSA9IFtbMSwgMiwgM10sIFs0LCA1LCA2XV1cbiAgICogICAgbWF0aC5vbmVzKG1hdGguc2l6ZShBKSkgICAgICAgLy8gcmV0dXJucyBbWzEsIDEsIDFdLCBbMSwgMSwgMV1dXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICB6ZXJvcywgaWRlbnRpdHksIHNpemUsIHJhbmdlXG4gICAqXG4gICAqIEBwYXJhbSB7Li4ubnVtYmVyIHwgQXJyYXl9IHNpemUgICAgVGhlIHNpemUgb2YgZWFjaCBkaW1lbnNpb24gb2YgdGhlIG1hdHJpeFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Zvcm1hdF0gICAgICAgICAgIFRoZSBNYXRyaXggc3RvcmFnZSBmb3JtYXRcbiAgICpcbiAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXggfCBudW1iZXJ9ICBBIG1hdHJpeCBmaWxsZWQgd2l0aCBvbmVzXG4gICAqL1xuICByZXR1cm4gdHlwZWQoJ29uZXMnLCB7XG4gICAgJyc6IGZ1bmN0aW9uIF8oKSB7XG4gICAgICByZXR1cm4gY29uZmlnLm1hdHJpeCA9PT0gJ0FycmF5JyA/IF9vbmVzKFtdKSA6IF9vbmVzKFtdLCAnZGVmYXVsdCcpO1xuICAgIH0sXG4gICAgLy8gbWF0aC5vbmVzKG0sIG4sIHAsIC4uLiwgZm9ybWF0KVxuICAgIC8vIFRPRE86IG1vcmUgYWNjdXJhdGUgc2lnbmF0dXJlICcuLi5udW1iZXIgfCBCaWdOdW1iZXIsIHN0cmluZycgYXMgc29vbiBhcyB0eXBlZC1mdW5jdGlvbiBzdXBwb3J0cyB0aGlzXG4gICAgJy4uLm51bWJlciB8IEJpZ051bWJlciB8IHN0cmluZyc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlclN0cmluZyhzaXplKSB7XG4gICAgICB2YXIgbGFzdCA9IHNpemVbc2l6ZS5sZW5ndGggLSAxXTtcblxuICAgICAgaWYgKHR5cGVvZiBsYXN0ID09PSAnc3RyaW5nJykge1xuICAgICAgICB2YXIgZm9ybWF0ID0gc2l6ZS5wb3AoKTtcbiAgICAgICAgcmV0dXJuIF9vbmVzKHNpemUsIGZvcm1hdCk7XG4gICAgICB9IGVsc2UgaWYgKGNvbmZpZy5tYXRyaXggPT09ICdBcnJheScpIHtcbiAgICAgICAgcmV0dXJuIF9vbmVzKHNpemUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIF9vbmVzKHNpemUsICdkZWZhdWx0Jyk7XG4gICAgICB9XG4gICAgfSxcbiAgICBBcnJheTogX29uZXMsXG4gICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoc2l6ZSkge1xuICAgICAgdmFyIGZvcm1hdCA9IHNpemUuc3RvcmFnZSgpO1xuICAgICAgcmV0dXJuIF9vbmVzKHNpemUudmFsdWVPZigpLCBmb3JtYXQpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4LCBzdHJpbmcnOiBmdW5jdGlvbiBBcnJheU1hdHJpeFN0cmluZyhzaXplLCBmb3JtYXQpIHtcbiAgICAgIHJldHVybiBfb25lcyhzaXplLnZhbHVlT2YoKSwgZm9ybWF0KTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogQ3JlYXRlIGFuIEFycmF5IG9yIE1hdHJpeCB3aXRoIG9uZXNcbiAgICogQHBhcmFtIHtBcnJheX0gc2l6ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Zvcm1hdD0nZGVmYXVsdCddXG4gICAqIEByZXR1cm4ge0FycmF5IHwgTWF0cml4fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfb25lcyhzaXplLCBmb3JtYXQpIHtcbiAgICB2YXIgaGFzQmlnTnVtYmVycyA9IF9ub3JtYWxpemUoc2l6ZSk7XG5cbiAgICB2YXIgZGVmYXVsdFZhbHVlID0gaGFzQmlnTnVtYmVycyA/IG5ldyBCaWdOdW1iZXIoMSkgOiAxO1xuXG4gICAgX3ZhbGlkYXRlKHNpemUpO1xuXG4gICAgaWYgKGZvcm1hdCkge1xuICAgICAgLy8gcmV0dXJuIGEgbWF0cml4XG4gICAgICB2YXIgbSA9IG1hdHJpeChmb3JtYXQpO1xuXG4gICAgICBpZiAoc2l6ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBtLnJlc2l6ZShzaXplLCBkZWZhdWx0VmFsdWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gcmV0dXJuIGFuIEFycmF5XG4gICAgICB2YXIgYXJyID0gW107XG5cbiAgICAgIGlmIChzaXplLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuICgwLCBfYXJyYXkucmVzaXplKShhcnIsIHNpemUsIGRlZmF1bHRWYWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhcnI7XG4gICAgfVxuICB9IC8vIHJlcGxhY2UgQmlnTnVtYmVycyB3aXRoIG51bWJlcnMsIHJldHVybnMgdHJ1ZSBpZiBzaXplIGNvbnRhaW5lZCBCaWdOdW1iZXJzXG5cblxuICBmdW5jdGlvbiBfbm9ybWFsaXplKHNpemUpIHtcbiAgICB2YXIgaGFzQmlnTnVtYmVycyA9IGZhbHNlO1xuICAgIHNpemUuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBhcnIpIHtcbiAgICAgIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKSh2YWx1ZSkpIHtcbiAgICAgICAgaGFzQmlnTnVtYmVycyA9IHRydWU7XG4gICAgICAgIGFycltpbmRleF0gPSB2YWx1ZS50b051bWJlcigpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBoYXNCaWdOdW1iZXJzO1xuICB9IC8vIHZhbGlkYXRlIGFyZ3VtZW50c1xuXG5cbiAgZnVuY3Rpb24gX3ZhbGlkYXRlKHNpemUpIHtcbiAgICBzaXplLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJyB8fCAhKDAsIF9udW1iZXIuaXNJbnRlZ2VyKSh2YWx1ZSkgfHwgdmFsdWUgPCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUGFyYW1ldGVycyBpbiBmdW5jdGlvbiBvbmVzIG11c3QgYmUgcG9zaXRpdmUgaW50ZWdlcnMnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZU9uZXMgPSBjcmVhdGVPbmVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVQYXJ0aXRpb25TZWxlY3QgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3BhcnRpdGlvblNlbGVjdCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdpc051bWVyaWMnLCAnaXNOYU4nLCAnY29tcGFyZSddO1xudmFyIGNyZWF0ZVBhcnRpdGlvblNlbGVjdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBpc051bWVyaWMgPSBfcmVmLmlzTnVtZXJpYyxcbiAgICAgIGlzTmFOID0gX3JlZi5pc05hTixcbiAgICAgIGNvbXBhcmUgPSBfcmVmLmNvbXBhcmU7XG4gIHZhciBhc2MgPSBjb21wYXJlO1xuXG4gIHZhciBkZXNjID0gZnVuY3Rpb24gZGVzYyhhLCBiKSB7XG4gICAgcmV0dXJuIC1jb21wYXJlKGEsIGIpO1xuICB9O1xuICAvKipcbiAgICogUGFydGl0aW9uLWJhc2VkIHNlbGVjdGlvbiBvZiBhbiBhcnJheSBvciAxRCBtYXRyaXguXG4gICAqIFdpbGwgZmluZCB0aGUga3RoIHNtYWxsZXN0IHZhbHVlLCBhbmQgbXV0YXRlcyB0aGUgaW5wdXQgYXJyYXkuXG4gICAqIFVzZXMgUXVpY2tzZWxlY3QuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5wYXJ0aXRpb25TZWxlY3QoeCwgaylcbiAgICogICAgbWF0aC5wYXJ0aXRpb25TZWxlY3QoeCwgaywgY29tcGFyZSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgucGFydGl0aW9uU2VsZWN0KFs1LCAxMCwgMV0sIDIpICAgICAgICAgICAvLyByZXR1cm5zIDEwXG4gICAqICAgIG1hdGgucGFydGl0aW9uU2VsZWN0KFsnQycsICdCJywgJ0EnLCAnRCddLCAxKSAvLyByZXR1cm5zICdCJ1xuICAgKlxuICAgKiAgICBmdW5jdGlvbiBzb3J0QnlMZW5ndGggKGEsIGIpIHtcbiAgICogICAgICByZXR1cm4gYS5sZW5ndGggLSBiLmxlbmd0aFxuICAgKiAgICB9XG4gICAqICAgIG1hdGgucGFydGl0aW9uU2VsZWN0KFsnTGFuZ2RvbicsICdUb20nLCAnU2FyYSddLCAyLCBzb3J0QnlMZW5ndGgpIC8vIHJldHVybnMgJ0xhbmdkb24nXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBzb3J0XG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4IHwgQXJyYXl9IHggICAgQSBvbmUgZGltZW5zaW9uYWwgbWF0cml4IG9yIGFycmF5IHRvIHNvcnRcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGsgICAgICAgICAgICBUaGUga3RoIHNtYWxsZXN0IHZhbHVlIHRvIGJlIHJldHJpZXZlZCB6ZXJvLWJhc2VkIGluZGV4XG4gICAqIEBwYXJhbSB7RnVuY3Rpb24gfCAnYXNjJyB8ICdkZXNjJ30gW2NvbXBhcmU9J2FzYyddXG4gICAqICAgICAgICBBbiBvcHRpb25hbCBjb21wYXJhdG9yIGZ1bmN0aW9uLiBUaGUgZnVuY3Rpb24gaXMgY2FsbGVkIGFzXG4gICAqICAgICAgICBgY29tcGFyZShhLCBiKWAsIGFuZCBtdXN0IHJldHVybiAxIHdoZW4gYSA+IGIsIC0xIHdoZW4gYSA8IGIsXG4gICAqICAgICAgICBhbmQgMCB3aGVuIGEgPT0gYi5cbiAgICogQHJldHVybiB7Kn0gUmV0dXJucyB0aGUga3RoIGxvd2VzdCB2YWx1ZS5cbiAgICovXG5cblxuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhOdW1iZXIoeCwgaykge1xuICAgICAgcmV0dXJuIF9wYXJ0aXRpb25TZWxlY3QoeCwgaywgYXNjKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyLCBzdHJpbmcnOiBmdW5jdGlvbiBBcnJheU1hdHJpeE51bWJlclN0cmluZyh4LCBrLCBjb21wYXJlKSB7XG4gICAgICBpZiAoY29tcGFyZSA9PT0gJ2FzYycpIHtcbiAgICAgICAgcmV0dXJuIF9wYXJ0aXRpb25TZWxlY3QoeCwgaywgYXNjKTtcbiAgICAgIH0gZWxzZSBpZiAoY29tcGFyZSA9PT0gJ2Rlc2MnKSB7XG4gICAgICAgIHJldHVybiBfcGFydGl0aW9uU2VsZWN0KHgsIGssIGRlc2MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb21wYXJlIHN0cmluZyBtdXN0IGJlIFwiYXNjXCIgb3IgXCJkZXNjXCInKTtcbiAgICAgIH1cbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyLCBmdW5jdGlvbic6IF9wYXJ0aXRpb25TZWxlY3RcbiAgfSk7XG5cbiAgZnVuY3Rpb24gX3BhcnRpdGlvblNlbGVjdCh4LCBrLCBjb21wYXJlKSB7XG4gICAgaWYgKCEoMCwgX251bWJlci5pc0ludGVnZXIpKGspIHx8IGsgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2sgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyJyk7XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfaXMuaXNNYXRyaXgpKHgpKSB7XG4gICAgICB2YXIgc2l6ZSA9IHguc2l6ZSgpO1xuXG4gICAgICBpZiAoc2l6ZS5sZW5ndGggPiAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignT25seSBvbmUgZGltZW5zaW9uYWwgbWF0cmljZXMgc3VwcG9ydGVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBxdWlja1NlbGVjdCh4LnZhbHVlT2YoKSwgaywgY29tcGFyZSk7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoeCkpIHtcbiAgICAgIHJldHVybiBxdWlja1NlbGVjdCh4LCBrLCBjb21wYXJlKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFF1aWNrc2VsZWN0IGFsZ29yaXRobS5cbiAgICogQ29kZSBhZGFwdGVkIGZyb206XG4gICAqIGh0dHBzOi8vYmxvZy50ZWFtbGVhZG5ldC5jb20vMjAxMi8wNy9xdWljay1zZWxlY3QtYWxnb3JpdGhtLWZpbmQta3RoLWVsZW1lbnQuaHRtbFxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGtcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY29tcGFyZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHF1aWNrU2VsZWN0KGFyciwgaywgY29tcGFyZSkge1xuICAgIGlmIChrID49IGFyci5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignayBvdXQgb2YgYm91bmRzJyk7XG4gICAgfSAvLyBjaGVjayBmb3IgTmFOIHZhbHVlcyBzaW5jZSB0aGVzZSBjYW4gY2F1c2UgYW4gaW5maW5pdGUgd2hpbGUgbG9vcFxuXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGlzTnVtZXJpYyhhcnJbaV0pICYmIGlzTmFOKGFycltpXSkpIHtcbiAgICAgICAgcmV0dXJuIGFycltpXTsgLy8gcmV0dXJuIE5hTlxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBmcm9tID0gMDtcbiAgICB2YXIgdG8gPSBhcnIubGVuZ3RoIC0gMTsgLy8gaWYgZnJvbSA9PSB0byB3ZSByZWFjaGVkIHRoZSBrdGggZWxlbWVudFxuXG4gICAgd2hpbGUgKGZyb20gPCB0bykge1xuICAgICAgdmFyIHIgPSBmcm9tO1xuICAgICAgdmFyIHcgPSB0bztcbiAgICAgIHZhciBwaXZvdCA9IGFycltNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAodG8gLSBmcm9tICsgMSkpICsgZnJvbV07IC8vIHN0b3AgaWYgdGhlIHJlYWRlciBhbmQgd3JpdGVyIG1lZXRzXG5cbiAgICAgIHdoaWxlIChyIDwgdykge1xuICAgICAgICAvLyBhcnJbcl0gPj0gcGl2b3RcbiAgICAgICAgaWYgKGNvbXBhcmUoYXJyW3JdLCBwaXZvdCkgPj0gMCkge1xuICAgICAgICAgIC8vIHB1dCB0aGUgbGFyZ2UgdmFsdWVzIGF0IHRoZSBlbmRcbiAgICAgICAgICB2YXIgdG1wID0gYXJyW3ddO1xuICAgICAgICAgIGFyclt3XSA9IGFycltyXTtcbiAgICAgICAgICBhcnJbcl0gPSB0bXA7XG4gICAgICAgICAgLS13O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHRoZSB2YWx1ZSBpcyBzbWFsbGVyIHRoYW4gdGhlIHBpdm90LCBza2lwXG4gICAgICAgICAgKytyO1xuICAgICAgICB9XG4gICAgICB9IC8vIGlmIHdlIHN0ZXBwZWQgdXAgKHIrKykgd2UgbmVlZCB0byBzdGVwIG9uZSBkb3duIChhcnJbcl0gPiBwaXZvdClcblxuXG4gICAgICBpZiAoY29tcGFyZShhcnJbcl0sIHBpdm90KSA+IDApIHtcbiAgICAgICAgLS1yO1xuICAgICAgfSAvLyB0aGUgciBwb2ludGVyIGlzIG9uIHRoZSBlbmQgb2YgdGhlIGZpcnN0IGsgZWxlbWVudHNcblxuXG4gICAgICBpZiAoayA8PSByKSB7XG4gICAgICAgIHRvID0gcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZyb20gPSByICsgMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYXJyW2tdO1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlUGFydGl0aW9uU2VsZWN0ID0gY3JlYXRlUGFydGl0aW9uU2VsZWN0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVSYW5nZSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfbm9vcCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9ub29wXCIpO1xuXG52YXIgbmFtZSA9ICdyYW5nZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnP21hdHJpeCcsICc/YmlnbnVtYmVyJywgJ3NtYWxsZXInLCAnc21hbGxlckVxJywgJ2xhcmdlcicsICdsYXJnZXJFcSddO1xudmFyIGNyZWF0ZVJhbmdlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBiaWdudW1iZXIgPSBfcmVmLmJpZ251bWJlcixcbiAgICAgIHNtYWxsZXIgPSBfcmVmLnNtYWxsZXIsXG4gICAgICBzbWFsbGVyRXEgPSBfcmVmLnNtYWxsZXJFcSxcbiAgICAgIGxhcmdlciA9IF9yZWYubGFyZ2VyLFxuICAgICAgbGFyZ2VyRXEgPSBfcmVmLmxhcmdlckVxO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gYXJyYXkgZnJvbSBhIHJhbmdlLlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgcmFuZ2UgZW5kIGlzIGV4Y2x1ZGVkLiBUaGlzIGNhbiBiZSBjdXN0b21pemVkIGJ5IHByb3ZpZGluZ1xuICAgKiBhbiBleHRyYSBwYXJhbWV0ZXIgYGluY2x1ZGVFbmRgLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLnJhbmdlKHN0ciBbLCBpbmNsdWRlRW5kXSkgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSByYW5nZSBmcm9tIGEgc3RyaW5nLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlcmUgdGhlIHN0cmluZyBjb250YWlucyB0aGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0YXJ0LCBvcHRpb25hbCBzdGVwLCBhbmQgZW5kLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VwYXJhdGVkIGJ5IGEgY29sb24uXG4gICAqICAgICBtYXRoLnJhbmdlKHN0YXJ0LCBlbmQgWywgaW5jbHVkZUVuZF0pICAgICAgICAvLyBDcmVhdGUgYSByYW5nZSB3aXRoIHN0YXJ0IGFuZFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZW5kIGFuZCBhIHN0ZXAgc2l6ZSBvZiAxLlxuICAgKiAgICAgbWF0aC5yYW5nZShzdGFydCwgZW5kLCBzdGVwIFssIGluY2x1ZGVFbmRdKSAgLy8gQ3JlYXRlIGEgcmFuZ2Ugd2l0aCBzdGFydCwgc3RlcCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBlbmQuXG4gICAqXG4gICAqIFdoZXJlOlxuICAgKlxuICAgKiAtIGBzdHI6IHN0cmluZ2BcbiAgICogICBBIHN0cmluZyAnc3RhcnQ6ZW5kJyBvciAnc3RhcnQ6c3RlcDplbmQnXG4gICAqIC0gYHN0YXJ0OiB7bnVtYmVyIHwgQmlnTnVtYmVyfWBcbiAgICogICBTdGFydCBvZiB0aGUgcmFuZ2VcbiAgICogLSBgZW5kOiBudW1iZXIgfCBCaWdOdW1iZXJgXG4gICAqICAgRW5kIG9mIHRoZSByYW5nZSwgZXhjbHVkZWQgYnkgZGVmYXVsdCwgaW5jbHVkZWQgd2hlbiBwYXJhbWV0ZXIgaW5jbHVkZUVuZD10cnVlXG4gICAqIC0gYHN0ZXA6IG51bWJlciB8IEJpZ051bWJlcmBcbiAgICogICBTdGVwIHNpemUuIERlZmF1bHQgdmFsdWUgaXMgMS5cbiAgICogLSBgaW5jbHVkZUVuZDogYm9vbGVhbmBcbiAgICogICBPcHRpb24gdG8gc3BlY2lmeSB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlIGVuZCBvciBub3QuIEZhbHNlIGJ5IGRlZmF1bHQuXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgbWF0aC5yYW5nZSgyLCA2KSAgICAgICAgLy8gWzIsIDMsIDQsIDVdXG4gICAqICAgICBtYXRoLnJhbmdlKDIsIC0zLCAtMSkgICAvLyBbMiwgMSwgMCwgLTEsIC0yXVxuICAgKiAgICAgbWF0aC5yYW5nZSgnMjoxOjYnKSAgICAgLy8gWzIsIDMsIDQsIDVdXG4gICAqICAgICBtYXRoLnJhbmdlKDIsIDYsIHRydWUpICAvLyBbMiwgMywgNCwgNSwgNl1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBvbmVzLCB6ZXJvcywgc2l6ZSwgc3Vic2V0XG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gYXJncyAgIFBhcmFtZXRlcnMgZGVzY3JpYmluZyB0aGUgcmFuZ2VzIGBzdGFydGAsIGBlbmRgLCBhbmQgb3B0aW9uYWwgYHN0ZXBgLlxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gcmFuZ2VcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgLy8gVE9ETzogc2ltcGxpZnkgc2lnbmF0dXJlcyB3aGVuIHR5cGVkLWZ1bmN0aW9uIHN1cHBvcnRzIGRlZmF1bHQgdmFsdWVzIGFuZCBvcHRpb25hbCBhcmd1bWVudHNcbiAgICAvLyBUT0RPOiBhIG51bWJlciBvciBib29sZWFuIHNob3VsZCBub3QgYmUgY29udmVydGVkIHRvIHN0cmluZyBoZXJlXG4gICAgc3RyaW5nOiBfc3RyUmFuZ2UsXG4gICAgJ3N0cmluZywgYm9vbGVhbic6IF9zdHJSYW5nZSxcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIoc3RhcnQsIGVuZCkge1xuICAgICAgcmV0dXJuIF9vdXQoX3JhbmdlRXgoc3RhcnQsIGVuZCwgMSkpO1xuICAgIH0sXG4gICAgJ251bWJlciwgbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXJOdW1iZXIoc3RhcnQsIGVuZCwgc3RlcCkge1xuICAgICAgcmV0dXJuIF9vdXQoX3JhbmdlRXgoc3RhcnQsIGVuZCwgc3RlcCkpO1xuICAgIH0sXG4gICAgJ251bWJlciwgbnVtYmVyLCBib29sZWFuJzogZnVuY3Rpb24gbnVtYmVyTnVtYmVyQm9vbGVhbihzdGFydCwgZW5kLCBpbmNsdWRlRW5kKSB7XG4gICAgICByZXR1cm4gaW5jbHVkZUVuZCA/IF9vdXQoX3JhbmdlSW5jKHN0YXJ0LCBlbmQsIDEpKSA6IF9vdXQoX3JhbmdlRXgoc3RhcnQsIGVuZCwgMSkpO1xuICAgIH0sXG4gICAgJ251bWJlciwgbnVtYmVyLCBudW1iZXIsIGJvb2xlYW4nOiBmdW5jdGlvbiBudW1iZXJOdW1iZXJOdW1iZXJCb29sZWFuKHN0YXJ0LCBlbmQsIHN0ZXAsIGluY2x1ZGVFbmQpIHtcbiAgICAgIHJldHVybiBpbmNsdWRlRW5kID8gX291dChfcmFuZ2VJbmMoc3RhcnQsIGVuZCwgc3RlcCkpIDogX291dChfcmFuZ2VFeChzdGFydCwgZW5kLCBzdGVwKSk7XG4gICAgfSxcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIoc3RhcnQsIGVuZCkge1xuICAgICAgdmFyIEJpZ051bWJlciA9IHN0YXJ0LmNvbnN0cnVjdG9yO1xuICAgICAgcmV0dXJuIF9vdXQoX2JpZ1JhbmdlRXgoc3RhcnQsIGVuZCwgbmV3IEJpZ051bWJlcigxKSkpO1xuICAgIH0sXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXJCaWdOdW1iZXIoc3RhcnQsIGVuZCwgc3RlcCkge1xuICAgICAgcmV0dXJuIF9vdXQoX2JpZ1JhbmdlRXgoc3RhcnQsIGVuZCwgc3RlcCkpO1xuICAgIH0sXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyLCBib29sZWFuJzogZnVuY3Rpb24gQmlnTnVtYmVyQmlnTnVtYmVyQm9vbGVhbihzdGFydCwgZW5kLCBpbmNsdWRlRW5kKSB7XG4gICAgICB2YXIgQmlnTnVtYmVyID0gc3RhcnQuY29uc3RydWN0b3I7XG4gICAgICByZXR1cm4gaW5jbHVkZUVuZCA/IF9vdXQoX2JpZ1JhbmdlSW5jKHN0YXJ0LCBlbmQsIG5ldyBCaWdOdW1iZXIoMSkpKSA6IF9vdXQoX2JpZ1JhbmdlRXgoc3RhcnQsIGVuZCwgbmV3IEJpZ051bWJlcigxKSkpO1xuICAgIH0sXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyLCBCaWdOdW1iZXIsIGJvb2xlYW4nOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXJCaWdOdW1iZXJCb29sZWFuKHN0YXJ0LCBlbmQsIHN0ZXAsIGluY2x1ZGVFbmQpIHtcbiAgICAgIHJldHVybiBpbmNsdWRlRW5kID8gX291dChfYmlnUmFuZ2VJbmMoc3RhcnQsIGVuZCwgc3RlcCkpIDogX291dChfYmlnUmFuZ2VFeChzdGFydCwgZW5kLCBzdGVwKSk7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBfb3V0KGFycikge1xuICAgIGlmIChjb25maWcubWF0cml4ID09PSAnTWF0cml4Jykge1xuICAgICAgcmV0dXJuIG1hdHJpeCA/IG1hdHJpeChhcnIpIDogKDAsIF9ub29wLm5vTWF0cml4KSgpO1xuICAgIH1cblxuICAgIHJldHVybiBhcnI7XG4gIH1cblxuICBmdW5jdGlvbiBfc3RyUmFuZ2Uoc3RyLCBpbmNsdWRlRW5kKSB7XG4gICAgdmFyIHIgPSBfcGFyc2Uoc3RyKTtcblxuICAgIGlmICghcikge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdTdHJpbmcgXCInICsgc3RyICsgJ1wiIGlzIG5vIHZhbGlkIHJhbmdlJyk7XG4gICAgfVxuXG4gICAgdmFyIGZuO1xuXG4gICAgaWYgKGNvbmZpZy5udW1iZXIgPT09ICdCaWdOdW1iZXInKSB7XG4gICAgICBpZiAoYmlnbnVtYmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgKDAsIF9ub29wLm5vQmlnbnVtYmVyKSgpO1xuICAgICAgfVxuXG4gICAgICBmbiA9IGluY2x1ZGVFbmQgPyBfYmlnUmFuZ2VJbmMgOiBfYmlnUmFuZ2VFeDtcbiAgICAgIHJldHVybiBfb3V0KGZuKGJpZ251bWJlcihyLnN0YXJ0KSwgYmlnbnVtYmVyKHIuZW5kKSwgYmlnbnVtYmVyKHIuc3RlcCkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm4gPSBpbmNsdWRlRW5kID8gX3JhbmdlSW5jIDogX3JhbmdlRXg7XG4gICAgICByZXR1cm4gX291dChmbihyLnN0YXJ0LCByLmVuZCwgci5zdGVwKSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgYSByYW5nZSB3aXRoIG51bWJlcnMuIEVuZCBpcyBleGNsdWRlZFxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RlcFxuICAgKiBAcmV0dXJucyB7QXJyYXl9IHJhbmdlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX3JhbmdlRXgoc3RhcnQsIGVuZCwgc3RlcCkge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIHZhciB4ID0gc3RhcnQ7XG5cbiAgICBpZiAoc3RlcCA+IDApIHtcbiAgICAgIHdoaWxlIChzbWFsbGVyKHgsIGVuZCkpIHtcbiAgICAgICAgYXJyYXkucHVzaCh4KTtcbiAgICAgICAgeCArPSBzdGVwO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3RlcCA8IDApIHtcbiAgICAgIHdoaWxlIChsYXJnZXIoeCwgZW5kKSkge1xuICAgICAgICBhcnJheS5wdXNoKHgpO1xuICAgICAgICB4ICs9IHN0ZXA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgYSByYW5nZSB3aXRoIG51bWJlcnMuIEVuZCBpcyBpbmNsdWRlZFxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RlcFxuICAgKiBAcmV0dXJucyB7QXJyYXl9IHJhbmdlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX3JhbmdlSW5jKHN0YXJ0LCBlbmQsIHN0ZXApIHtcbiAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICB2YXIgeCA9IHN0YXJ0O1xuXG4gICAgaWYgKHN0ZXAgPiAwKSB7XG4gICAgICB3aGlsZSAoc21hbGxlckVxKHgsIGVuZCkpIHtcbiAgICAgICAgYXJyYXkucHVzaCh4KTtcbiAgICAgICAgeCArPSBzdGVwO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3RlcCA8IDApIHtcbiAgICAgIHdoaWxlIChsYXJnZXJFcSh4LCBlbmQpKSB7XG4gICAgICAgIGFycmF5LnB1c2goeCk7XG4gICAgICAgIHggKz0gc3RlcDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHJhbmdlIHdpdGggYmlnIG51bWJlcnMuIEVuZCBpcyBleGNsdWRlZFxuICAgKiBAcGFyYW0ge0JpZ051bWJlcn0gc3RhcnRcbiAgICogQHBhcmFtIHtCaWdOdW1iZXJ9IGVuZFxuICAgKiBAcGFyYW0ge0JpZ051bWJlcn0gc3RlcFxuICAgKiBAcmV0dXJucyB7QXJyYXl9IHJhbmdlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX2JpZ1JhbmdlRXgoc3RhcnQsIGVuZCwgc3RlcCkge1xuICAgIHZhciB6ZXJvID0gYmlnbnVtYmVyKDApO1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIHZhciB4ID0gc3RhcnQ7XG5cbiAgICBpZiAoc3RlcC5ndCh6ZXJvKSkge1xuICAgICAgd2hpbGUgKHNtYWxsZXIoeCwgZW5kKSkge1xuICAgICAgICBhcnJheS5wdXNoKHgpO1xuICAgICAgICB4ID0geC5wbHVzKHN0ZXApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3RlcC5sdCh6ZXJvKSkge1xuICAgICAgd2hpbGUgKGxhcmdlcih4LCBlbmQpKSB7XG4gICAgICAgIGFycmF5LnB1c2goeCk7XG4gICAgICAgIHggPSB4LnBsdXMoc3RlcCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgYSByYW5nZSB3aXRoIGJpZyBudW1iZXJzLiBFbmQgaXMgaW5jbHVkZWRcbiAgICogQHBhcmFtIHtCaWdOdW1iZXJ9IHN0YXJ0XG4gICAqIEBwYXJhbSB7QmlnTnVtYmVyfSBlbmRcbiAgICogQHBhcmFtIHtCaWdOdW1iZXJ9IHN0ZXBcbiAgICogQHJldHVybnMge0FycmF5fSByYW5nZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9iaWdSYW5nZUluYyhzdGFydCwgZW5kLCBzdGVwKSB7XG4gICAgdmFyIHplcm8gPSBiaWdudW1iZXIoMCk7XG4gICAgdmFyIGFycmF5ID0gW107XG4gICAgdmFyIHggPSBzdGFydDtcblxuICAgIGlmIChzdGVwLmd0KHplcm8pKSB7XG4gICAgICB3aGlsZSAoc21hbGxlckVxKHgsIGVuZCkpIHtcbiAgICAgICAgYXJyYXkucHVzaCh4KTtcbiAgICAgICAgeCA9IHgucGx1cyhzdGVwKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHN0ZXAubHQoemVybykpIHtcbiAgICAgIHdoaWxlIChsYXJnZXJFcSh4LCBlbmQpKSB7XG4gICAgICAgIGFycmF5LnB1c2goeCk7XG4gICAgICAgIHggPSB4LnBsdXMoc3RlcCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZSBhIHN0cmluZyBpbnRvIGEgcmFuZ2UsXG4gICAqIFRoZSBzdHJpbmcgY29udGFpbnMgdGhlIHN0YXJ0LCBvcHRpb25hbCBzdGVwLCBhbmQgZW5kLCBzZXBhcmF0ZWQgYnkgYSBjb2xvbi5cbiAgICogSWYgdGhlIHN0cmluZyBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQgcmFuZ2UsIG51bGwgaXMgcmV0dXJuZWQuXG4gICAqIEZvciBleGFtcGxlIHN0cj0nMDoyOjExJy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKiBAcmV0dXJuIHt7c3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIsIHN0ZXA6IG51bWJlcn0gfCBudWxsfSByYW5nZSBPYmplY3QgY29udGFpbmluZyBwcm9wZXJ0aWVzIHN0YXJ0LCBlbmQsIHN0ZXBcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBfcGFyc2Uoc3RyKSB7XG4gICAgdmFyIGFyZ3MgPSBzdHIuc3BsaXQoJzonKTsgLy8gbnVtYmVyXG5cbiAgICB2YXIgbnVtcyA9IGFyZ3MubWFwKGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgIC8vIHVzZSBOdW1iZXIgYW5kIG5vdCBwYXJzZUZsb2F0IGFzIE51bWJlciByZXR1cm5zIE5hTiBvbiBpbnZhbGlkIGdhcmJhZ2UgaW4gdGhlIHN0cmluZ1xuICAgICAgcmV0dXJuIE51bWJlcihhcmcpO1xuICAgIH0pO1xuICAgIHZhciBpbnZhbGlkID0gbnVtcy5zb21lKGZ1bmN0aW9uIChudW0pIHtcbiAgICAgIHJldHVybiBpc05hTihudW0pO1xuICAgIH0pO1xuXG4gICAgaWYgKGludmFsaWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHN3aXRjaCAobnVtcy5sZW5ndGgpIHtcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdGFydDogbnVtc1swXSxcbiAgICAgICAgICBlbmQ6IG51bXNbMV0sXG4gICAgICAgICAgc3RlcDogMVxuICAgICAgICB9O1xuXG4gICAgICBjYXNlIDM6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3RhcnQ6IG51bXNbMF0sXG4gICAgICAgICAgZW5kOiBudW1zWzJdLFxuICAgICAgICAgIHN0ZXA6IG51bXNbMV1cbiAgICAgICAgfTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlUmFuZ2UgPSBjcmVhdGVSYW5nZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUmVzaGFwZSA9IHZvaWQgMDtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3Jlc2hhcGUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnaXNJbnRlZ2VyJywgJ21hdHJpeCddO1xudmFyIGNyZWF0ZVJlc2hhcGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgaXNJbnRlZ2VyID0gX3JlZi5pc0ludGVnZXIsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeDtcblxuICAvKipcbiAgICogUmVzaGFwZSBhIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5IHRvIGZpdCB0aGUgc3BlY2lmaWVkIGRpbWVuc2lvbnNcbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5yZXNoYXBlKHgsIHNpemVzKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGgucmVzaGFwZShbMSwgMiwgMywgNCwgNSwgNl0sIFsyLCAzXSlcbiAgICogICAgIC8vIHJldHVybnMgQXJyYXkgIFtbMSwgMiwgM10sIFs0LCA1LCA2XV1cbiAgICpcbiAgICogICAgIG1hdGgucmVzaGFwZShbWzEsIDJdLCBbMywgNF1dLCBbMSwgNF0pXG4gICAqICAgICAvLyByZXR1cm5zIEFycmF5ICBbWzEsIDIsIDMsIDRdXVxuICAgKlxuICAgKiAgICAgbWF0aC5yZXNoYXBlKFtbMSwgMl0sIFszLCA0XV0sIFs0XSlcbiAgICogICAgIC8vIHJldHVybnMgQXJyYXkgWzEsIDIsIDMsIDRdXG4gICAqXG4gICAqICAgICBjb25zdCB4ID0gbWF0aC5tYXRyaXgoWzEsIDIsIDMsIDQsIDUsIDYsIDcsIDhdKVxuICAgKiAgICAgbWF0aC5yZXNoYXBlKHgsIFsyLCAyLCAyXSlcbiAgICogICAgIC8vIHJldHVybnMgTWF0cml4IFtbWzEsIDJdLCBbMywgNF1dLCBbWzUsIDZdLCBbNywgOF1dXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgIHNpemUsIHNxdWVlemUsIHJlc2l6ZVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4IHwgKn0geCAgTWF0cml4IHRvIGJlIHJlc2hhcGVkXG4gICAqIEBwYXJhbSB7bnVtYmVyW119IHNpemVzICAgICAgICBPbmUgZGltZW5zaW9uYWwgYXJyYXkgd2l0aCBpbnRlZ3JhbCBzaXplcyBmb3JcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhY2ggZGltZW5zaW9uXG4gICAqXG4gICAqIEByZXR1cm4geyogfCBBcnJheSB8IE1hdHJpeH0gICBBIHJlc2hhcGVkIGNsb25lIG9mIG1hdHJpeCBgeGBcbiAgICpcbiAgICogQHRocm93cyB7VHlwZUVycm9yfSAgICAgICAgICAgIElmIGBzaXplc2AgZG9lcyBub3QgY29udGFpbiBzb2xlbHkgaW50ZWdlcnNcbiAgICogQHRocm93cyB7RGltZW5zaW9uRXJyb3J9ICAgICAgIElmIHRoZSBwcm9kdWN0IG9mIHRoZSBuZXcgZGltZW5zaW9uIHNpemVzIGRvZXNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBlcXVhbCB0aGF0IG9mIHRoZSBvbGQgb25lc1xuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHNpemVzKSB7XG4gICAgICBpZiAoeC5yZXNoYXBlKSB7XG4gICAgICAgIHJldHVybiB4LnJlc2hhcGUoc2l6ZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG1hdHJpeCgoMCwgX2FycmF5LnJlc2hhcGUpKHgudmFsdWVPZigpLCBzaXplcykpO1xuICAgICAgfVxuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgc2l6ZXMpIHtcbiAgICAgIHNpemVzLmZvckVhY2goZnVuY3Rpb24gKHNpemUpIHtcbiAgICAgICAgaWYgKCFpc0ludGVnZXIoc2l6ZSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHNpemUgZm9yIGRpbWVuc2lvbjogJyArIHNpemUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiAoMCwgX2FycmF5LnJlc2hhcGUpKHgsIHNpemVzKTtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZVJlc2hhcGUgPSBjcmVhdGVSZXNoYXBlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVSZXNpemUgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfRGltZW5zaW9uRXJyb3IgPSByZXF1aXJlKFwiLi4vLi4vZXJyb3IvRGltZW5zaW9uRXJyb3JcIik7XG5cbnZhciBfQXJndW1lbnRzRXJyb3IgPSByZXF1aXJlKFwiLi4vLi4vZXJyb3IvQXJndW1lbnRzRXJyb3JcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvc3RyaW5nXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdyZXNpemUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnY29uZmlnJywgJ21hdHJpeCddO1xudmFyIGNyZWF0ZVJlc2l6ZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4O1xuXG4gIC8qKlxuICAgKiBSZXNpemUgYSBtYXRyaXhcbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5yZXNpemUoeCwgc2l6ZSlcbiAgICogICAgIG1hdGgucmVzaXplKHgsIHNpemUsIGRlZmF1bHRWYWx1ZSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLnJlc2l6ZShbMSwgMiwgMywgNCwgNV0sIFszXSkgLy8gcmV0dXJucyBBcnJheSAgWzEsIDIsIDNdXG4gICAqICAgICBtYXRoLnJlc2l6ZShbMSwgMiwgM10sIFs1XSwgMCkgICAgLy8gcmV0dXJucyBBcnJheSAgWzEsIDIsIDMsIDAsIDBdXG4gICAqICAgICBtYXRoLnJlc2l6ZSgyLCBbMiwgM10sIDApICAgICAgICAgLy8gcmV0dXJucyBNYXRyaXggW1syLCAwLCAwXSwgWzAsIDAsIDBdXVxuICAgKiAgICAgbWF0aC5yZXNpemUoXCJoZWxsb1wiLCBbOF0sIFwiIVwiKSAgICAvLyByZXR1cm5zIHN0cmluZyAnaGVsbG8hISEnXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgc2l6ZSwgc3F1ZWV6ZSwgc3Vic2V0LCByZXNoYXBlXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXggfCAqfSB4ICAgICAgICAgICAgIE1hdHJpeCB0byBiZSByZXNpemVkXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IHNpemUgICAgICAgICAgICAgIE9uZSBkaW1lbnNpb25hbCBhcnJheSB3aXRoIG51bWJlcnNcbiAgICogQHBhcmFtIHtudW1iZXIgfCBzdHJpbmd9IFtkZWZhdWx0VmFsdWU9MF0gWmVybyBieSBkZWZhdWx0LCBleGNlcHQgaW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBvZiBhIHN0cmluZywgaW4gdGhhdCBjYXNlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9ICcgJ1xuICAgKiBAcmV0dXJuIHsqIHwgQXJyYXkgfCBNYXRyaXh9IEEgcmVzaXplZCBjbG9uZSBvZiBtYXRyaXggYHhgXG4gICAqL1xuICAvLyBUT0RPOiByZXdvcmsgcmVzaXplIHRvIGEgdHlwZWQtZnVuY3Rpb25cbiAgcmV0dXJuIGZ1bmN0aW9uIHJlc2l6ZSh4LCBzaXplLCBkZWZhdWx0VmFsdWUpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPT0gMiAmJiBhcmd1bWVudHMubGVuZ3RoICE9PSAzKSB7XG4gICAgICB0aHJvdyBuZXcgX0FyZ3VtZW50c0Vycm9yLkFyZ3VtZW50c0Vycm9yKCdyZXNpemUnLCBhcmd1bWVudHMubGVuZ3RoLCAyLCAzKTtcbiAgICB9XG5cbiAgICBpZiAoKDAsIF9pcy5pc01hdHJpeCkoc2l6ZSkpIHtcbiAgICAgIHNpemUgPSBzaXplLnZhbHVlT2YoKTsgLy8gZ2V0IEFycmF5XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKHNpemVbMF0pKSB7XG4gICAgICAvLyBjb252ZXJ0IGJpZ251bWJlcnMgdG8gbnVtYmVyc1xuICAgICAgc2l6ZSA9IHNpemUubWFwKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gISgwLCBfaXMuaXNCaWdOdW1iZXIpKHZhbHVlKSA/IHZhbHVlIDogdmFsdWUudG9OdW1iZXIoKTtcbiAgICAgIH0pO1xuICAgIH0gLy8gY2hlY2sgeCBpcyBhIE1hdHJpeFxuXG5cbiAgICBpZiAoKDAsIF9pcy5pc01hdHJpeCkoeCkpIHtcbiAgICAgIC8vIHVzZSBvcHRpbWl6ZWQgbWF0cml4IGltcGxlbWVudGF0aW9uLCByZXR1cm4gY29weVxuICAgICAgcmV0dXJuIHgucmVzaXplKHNpemUsIGRlZmF1bHRWYWx1ZSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB4ID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gcmVzaXplIHN0cmluZ1xuICAgICAgcmV0dXJuIF9yZXNpemVTdHJpbmcoeCwgc2l6ZSwgZGVmYXVsdFZhbHVlKTtcbiAgICB9IC8vIGNoZWNrIHJlc3VsdCBzaG91bGQgYmUgYSBtYXRyaXhcblxuXG4gICAgdmFyIGFzTWF0cml4ID0gQXJyYXkuaXNBcnJheSh4KSA/IGZhbHNlIDogY29uZmlnLm1hdHJpeCAhPT0gJ0FycmF5JztcblxuICAgIGlmIChzaXplLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gb3V0cHV0IGEgc2NhbGFyXG4gICAgICB3aGlsZSAoQXJyYXkuaXNBcnJheSh4KSkge1xuICAgICAgICB4ID0geFswXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICgwLCBfb2JqZWN0LmNsb25lKSh4KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gb3V0cHV0IGFuIGFycmF5L21hdHJpeFxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHgpKSB7XG4gICAgICAgIHggPSBbeF07XG4gICAgICB9XG5cbiAgICAgIHggPSAoMCwgX29iamVjdC5jbG9uZSkoeCk7XG4gICAgICB2YXIgcmVzID0gKDAsIF9hcnJheS5yZXNpemUpKHgsIHNpemUsIGRlZmF1bHRWYWx1ZSk7XG4gICAgICByZXR1cm4gYXNNYXRyaXggPyBtYXRyaXgocmVzKSA6IHJlcztcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBSZXNpemUgYSBzdHJpbmdcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKiBAcGFyYW0ge251bWJlcltdfSBzaXplXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVmYXVsdENoYXI9JyAnXVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfcmVzaXplU3RyaW5nKHN0ciwgc2l6ZSwgZGVmYXVsdENoYXIpIHtcbiAgICBpZiAoZGVmYXVsdENoYXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBkZWZhdWx0Q2hhciAhPT0gJ3N0cmluZycgfHwgZGVmYXVsdENoYXIubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1NpbmdsZSBjaGFyYWN0ZXIgZXhwZWN0ZWQgYXMgZGVmYXVsdFZhbHVlJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlZmF1bHRDaGFyID0gJyAnO1xuICAgIH1cblxuICAgIGlmIChzaXplLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihzaXplLmxlbmd0aCwgMSk7XG4gICAgfVxuXG4gICAgdmFyIGxlbiA9IHNpemVbMF07XG5cbiAgICBpZiAodHlwZW9mIGxlbiAhPT0gJ251bWJlcicgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikobGVuKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBzaXplLCBtdXN0IGNvbnRhaW4gcG9zaXRpdmUgaW50ZWdlcnMgJyArICcoc2l6ZTogJyArICgwLCBfc3RyaW5nLmZvcm1hdCkoc2l6ZSkgKyAnKScpO1xuICAgIH1cblxuICAgIGlmIChzdHIubGVuZ3RoID4gbGVuKSB7XG4gICAgICByZXR1cm4gc3RyLnN1YnN0cmluZygwLCBsZW4pO1xuICAgIH0gZWxzZSBpZiAoc3RyLmxlbmd0aCA8IGxlbikge1xuICAgICAgdmFyIHJlcyA9IHN0cjtcblxuICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gbGVuIC0gc3RyLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgcmVzICs9IGRlZmF1bHRDaGFyO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH1cbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZVJlc2l6ZSA9IGNyZWF0ZVJlc2l6ZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUm93ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgbmFtZSA9ICdyb3cnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnSW5kZXgnLCAnbWF0cml4JywgJ3JhbmdlJ107XG52YXIgY3JlYXRlUm93ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIEluZGV4ID0gX3JlZi5JbmRleCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgcmFuZ2UgPSBfcmVmLnJhbmdlO1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSByb3cgZnJvbSBhIE1hdHJpeC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5yb3codmFsdWUsIGluZGV4KVxuICAgKlxuICAgKiBFeGFtcGxlOlxuICAgKlxuICAgKiAgICAgLy8gZ2V0IGEgcm93XG4gICAqICAgICBjb25zdCBkID0gW1sxLCAyXSwgWzMsIDRdXVxuICAgKiAgICAgbWF0aC5yb3coZCwgMSkgLy8gcmV0dXJucyBbWzMsIDRdXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgIGNvbHVtblxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4IH0gdmFsdWUgICBBbiBhcnJheSBvciBtYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJvdyAgICAgICAgICAgICAgVGhlIGluZGV4IG9mIHRoZSByb3dcbiAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXh9ICAgICAgICAgVGhlIHJldHJpZXZlZCByb3dcbiAgICovXG4gIHZhciByb3cgPSB0eXBlZChuYW1lLCB7XG4gICAgJ01hdHJpeCwgbnVtYmVyJzogX3JvdyxcbiAgICAnQXJyYXksIG51bWJlcic6IGZ1bmN0aW9uIEFycmF5TnVtYmVyKHZhbHVlLCByb3cpIHtcbiAgICAgIHJldHVybiBfcm93KG1hdHJpeCgoMCwgX29iamVjdC5jbG9uZSkodmFsdWUpKSwgcm93KS52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJvdztcbiAgLyoqXG4gICAqIFJldHJpZXZlIGEgcm93IG9mIGEgbWF0cml4XG4gICAqIEBwYXJhbSB7TWF0cml4IH0gdmFsdWUgIEEgbWF0cml4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSByb3cgICAgIFRoZSBpbmRleCBvZiB0aGUgcm93XG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgIFRoZSByZXRyaWV2ZWQgcm93XG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9yb3codmFsdWUsIHJvdykge1xuICAgIC8vIGNoZWNrIGRpbWVuc2lvbnNcbiAgICBpZiAodmFsdWUuc2l6ZSgpLmxlbmd0aCAhPT0gMikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPbmx5IHR3byBkaW1lbnNpb25hbCBtYXRyaXggaXMgc3VwcG9ydGVkJyk7XG4gICAgfVxuXG4gICAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShyb3csIHZhbHVlLnNpemUoKVswXSk7XG4gICAgdmFyIGNvbHVtblJhbmdlID0gcmFuZ2UoMCwgdmFsdWUuc2l6ZSgpWzFdKTtcbiAgICB2YXIgaW5kZXggPSBuZXcgSW5kZXgocm93LCBjb2x1bW5SYW5nZSk7XG4gICAgcmV0dXJuIHZhbHVlLnN1YnNldChpbmRleCk7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVSb3cgPSBjcmVhdGVSb3c7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNpemUgPSB2b2lkIDA7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX25vb3AgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbm9vcFwiKTtcblxudmFyIG5hbWUgPSAnc2l6ZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnP21hdHJpeCddO1xudmFyIGNyZWF0ZVNpemUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBzaXplIG9mIGEgbWF0cml4IG9yIHNjYWxhci5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5zaXplKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgbWF0aC5zaXplKDIuMykgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIFtdXG4gICAqICAgICBtYXRoLnNpemUoJ2hlbGxvIHdvcmxkJykgICAgICAgIC8vIHJldHVybnMgWzExXVxuICAgKlxuICAgKiAgICAgY29uc3QgQSA9IFtbMSwgMiwgM10sIFs0LCA1LCA2XV1cbiAgICogICAgIG1hdGguc2l6ZShBKSAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBbMiwgM11cbiAgICogICAgIG1hdGguc2l6ZShtYXRoLnJhbmdlKDEsNikpICAgICAgLy8gcmV0dXJucyBbNV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICByZXNpemUsIHNxdWVlemUsIHN1YnNldFxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW4gfCBudW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IHN0cmluZyB8IEFycmF5IHwgTWF0cml4fSB4ICBBIG1hdHJpeFxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gQSB2ZWN0b3Igd2l0aCBzaXplIG9mIGB4YC5cbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuIHguY3JlYXRlKHguc2l6ZSgpKTtcbiAgICB9LFxuICAgIEFycmF5OiBfYXJyYXkuYXJyYXlTaXplLFxuICAgIHN0cmluZzogZnVuY3Rpb24gc3RyaW5nKHgpIHtcbiAgICAgIHJldHVybiBjb25maWcubWF0cml4ID09PSAnQXJyYXknID8gW3gubGVuZ3RoXSA6IG1hdHJpeChbeC5sZW5ndGhdKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBDb21wbGV4IHwgQmlnTnVtYmVyIHwgVW5pdCB8IGJvb2xlYW4gfCBudWxsJzogZnVuY3Rpb24gbnVtYmVyQ29tcGxleEJpZ051bWJlclVuaXRCb29sZWFuTnVsbCh4KSB7XG4gICAgICAvLyBzY2FsYXJcbiAgICAgIHJldHVybiBjb25maWcubWF0cml4ID09PSAnQXJyYXknID8gW10gOiBtYXRyaXggPyBtYXRyaXgoW10pIDogKDAsIF9ub29wLm5vTWF0cml4KSgpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlU2l6ZSA9IGNyZWF0ZVNpemU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNvcnQgPSB2b2lkIDA7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdzb3J0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdjb21wYXJlJywgJ2NvbXBhcmVOYXR1cmFsJ107XG52YXIgY3JlYXRlU29ydCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGNvbXBhcmUgPSBfcmVmLmNvbXBhcmUsXG4gICAgICBjb21wYXJlTmF0dXJhbCA9IF9yZWYuY29tcGFyZU5hdHVyYWw7XG4gIHZhciBjb21wYXJlQXNjID0gY29tcGFyZTtcblxuICB2YXIgY29tcGFyZURlc2MgPSBmdW5jdGlvbiBjb21wYXJlRGVzYyhhLCBiKSB7XG4gICAgcmV0dXJuIC1jb21wYXJlKGEsIGIpO1xuICB9O1xuICAvKipcbiAgICogU29ydCB0aGUgaXRlbXMgaW4gYSBtYXRyaXguXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5zb3J0KHgpXG4gICAqICAgIG1hdGguc29ydCh4LCBjb21wYXJlKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5zb3J0KFs1LCAxMCwgMV0pIC8vIHJldHVybnMgWzEsIDUsIDEwXVxuICAgKiAgICBtYXRoLnNvcnQoWydDJywgJ0InLCAnQScsICdEJ10sIG1hdGguY29tcGFyZU5hdHVyYWwpXG4gICAqICAgIC8vIHJldHVybnMgWydBJywgJ0InLCAnQycsICdEJ11cbiAgICpcbiAgICogICAgZnVuY3Rpb24gc29ydEJ5TGVuZ3RoIChhLCBiKSB7XG4gICAqICAgICAgcmV0dXJuIGEubGVuZ3RoIC0gYi5sZW5ndGhcbiAgICogICAgfVxuICAgKiAgICBtYXRoLnNvcnQoWydMYW5nZG9uJywgJ1RvbScsICdTYXJhJ10sIHNvcnRCeUxlbmd0aClcbiAgICogICAgLy8gcmV0dXJucyBbJ1RvbScsICdTYXJhJywgJ0xhbmdkb24nXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgZmlsdGVyLCBmb3JFYWNoLCBtYXAsIGNvbXBhcmUsIGNvbXBhcmVOYXR1cmFsXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4IHwgQXJyYXl9IHggICAgQSBvbmUgZGltZW5zaW9uYWwgbWF0cml4IG9yIGFycmF5IHRvIHNvcnRcbiAgICogQHBhcmFtIHtGdW5jdGlvbiB8ICdhc2MnIHwgJ2Rlc2MnIHwgJ25hdHVyYWwnfSBbY29tcGFyZT0nYXNjJ11cbiAgICogICAgICAgIEFuIG9wdGlvbmFsIF9jb21wYXJhdG9yIGZ1bmN0aW9uIG9yIG5hbWUuIFRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgYXNcbiAgICogICAgICAgIGBjb21wYXJlKGEsIGIpYCwgYW5kIG11c3QgcmV0dXJuIDEgd2hlbiBhID4gYiwgLTEgd2hlbiBhIDwgYixcbiAgICogICAgICAgIGFuZCAwIHdoZW4gYSA9PSBiLlxuICAgKiBAcmV0dXJuIHtNYXRyaXggfCBBcnJheX0gUmV0dXJucyB0aGUgc29ydGVkIG1hdHJpeC5cbiAgICovXG5cblxuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIEFycmF5OiBmdW5jdGlvbiBBcnJheSh4KSB7XG4gICAgICBfYXJyYXlJc1ZlY3Rvcih4KTtcblxuICAgICAgcmV0dXJuIHguc29ydChjb21wYXJlQXNjKTtcbiAgICB9LFxuICAgIE1hdHJpeDogZnVuY3Rpb24gTWF0cml4KHgpIHtcbiAgICAgIF9tYXRyaXhJc1ZlY3Rvcih4KTtcblxuICAgICAgcmV0dXJuIG1hdHJpeCh4LnRvQXJyYXkoKS5zb3J0KGNvbXBhcmVBc2MpLCB4LnN0b3JhZ2UoKSk7XG4gICAgfSxcbiAgICAnQXJyYXksIGZ1bmN0aW9uJzogZnVuY3Rpb24gQXJyYXlGdW5jdGlvbih4LCBfY29tcGFyYXRvcikge1xuICAgICAgX2FycmF5SXNWZWN0b3IoeCk7XG5cbiAgICAgIHJldHVybiB4LnNvcnQoX2NvbXBhcmF0b3IpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgZnVuY3Rpb24nOiBmdW5jdGlvbiBNYXRyaXhGdW5jdGlvbih4LCBfY29tcGFyYXRvcikge1xuICAgICAgX21hdHJpeElzVmVjdG9yKHgpO1xuXG4gICAgICByZXR1cm4gbWF0cml4KHgudG9BcnJheSgpLnNvcnQoX2NvbXBhcmF0b3IpLCB4LnN0b3JhZ2UoKSk7XG4gICAgfSxcbiAgICAnQXJyYXksIHN0cmluZyc6IGZ1bmN0aW9uIEFycmF5U3RyaW5nKHgsIG9yZGVyKSB7XG4gICAgICBfYXJyYXlJc1ZlY3Rvcih4KTtcblxuICAgICAgcmV0dXJuIHguc29ydChfY29tcGFyYXRvcihvcmRlcikpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgc3RyaW5nJzogZnVuY3Rpb24gTWF0cml4U3RyaW5nKHgsIG9yZGVyKSB7XG4gICAgICBfbWF0cml4SXNWZWN0b3IoeCk7XG5cbiAgICAgIHJldHVybiBtYXRyaXgoeC50b0FycmF5KCkuc29ydChfY29tcGFyYXRvcihvcmRlcikpLCB4LnN0b3JhZ2UoKSk7XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIEdldCB0aGUgY29tcGFyYXRvciBmb3IgZ2l2ZW4gb3JkZXIgKCdhc2MnLCAnZGVzYycsICduYXR1cmFsJylcbiAgICogQHBhcmFtIHsnYXNjJyB8ICdkZXNjJyB8ICduYXR1cmFsJ30gb3JkZXJcbiAgICogQHJldHVybiB7RnVuY3Rpb259IFJldHVybnMgYSBfY29tcGFyYXRvciBmdW5jdGlvblxuICAgKi9cblxuICBmdW5jdGlvbiBfY29tcGFyYXRvcihvcmRlcikge1xuICAgIGlmIChvcmRlciA9PT0gJ2FzYycpIHtcbiAgICAgIHJldHVybiBjb21wYXJlQXNjO1xuICAgIH0gZWxzZSBpZiAob3JkZXIgPT09ICdkZXNjJykge1xuICAgICAgcmV0dXJuIGNvbXBhcmVEZXNjO1xuICAgIH0gZWxzZSBpZiAob3JkZXIgPT09ICduYXR1cmFsJykge1xuICAgICAgcmV0dXJuIGNvbXBhcmVOYXR1cmFsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0cmluZyBcImFzY1wiLCBcImRlc2NcIiwgb3IgXCJuYXR1cmFsXCIgZXhwZWN0ZWQnKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHdoZXRoZXIgYW4gYXJyYXkgaXMgb25lIGRpbWVuc2lvbmFsXG4gICAqIFRocm93cyBhbiBlcnJvciB3aGVuIHRoaXMgaXMgbm90IHRoZSBjYXNlXG4gICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX2FycmF5SXNWZWN0b3IoYXJyYXkpIHtcbiAgICBpZiAoKDAsIF9hcnJheS5hcnJheVNpemUpKGFycmF5KS5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT25lIGRpbWVuc2lvbmFsIGFycmF5IGV4cGVjdGVkJyk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB3aGV0aGVyIGEgbWF0cml4IGlzIG9uZSBkaW1lbnNpb25hbFxuICAgKiBUaHJvd3MgYW4gZXJyb3Igd2hlbiB0aGlzIGlzIG5vdCB0aGUgY2FzZVxuICAgKiBAcGFyYW0ge01hdHJpeH0gbWF0cml4XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX21hdHJpeElzVmVjdG9yKG1hdHJpeCkge1xuICAgIGlmIChtYXRyaXguc2l6ZSgpLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPbmUgZGltZW5zaW9uYWwgbWF0cml4IGV4cGVjdGVkJyk7XG4gICAgfVxuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlU29ydCA9IGNyZWF0ZVNvcnQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNxcnRtID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdzcXJ0bSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdhYnMnLCAnYWRkJywgJ211bHRpcGx5JywgJ3NxcnQnLCAnc3VidHJhY3QnLCAnaW52JywgJ3NpemUnLCAnbWF4JywgJ2lkZW50aXR5J107XG52YXIgY3JlYXRlU3FydG0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgYWJzID0gX3JlZi5hYnMsXG4gICAgICBhZGQgPSBfcmVmLmFkZCxcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSxcbiAgICAgIHNxcnQgPSBfcmVmLnNxcnQsXG4gICAgICBzdWJ0cmFjdCA9IF9yZWYuc3VidHJhY3QsXG4gICAgICBpbnYgPSBfcmVmLmludixcbiAgICAgIHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBtYXggPSBfcmVmLm1heCxcbiAgICAgIGlkZW50aXR5ID0gX3JlZi5pZGVudGl0eTtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBwcmluY2lwYWwgc3F1YXJlIHJvb3Qgb2YgYSBzcXVhcmUgbWF0cml4LlxuICAgKiBUaGUgcHJpbmNpcGFsIHNxdWFyZSByb290IG1hdHJpeCBgWGAgb2YgYW5vdGhlciBtYXRyaXggYEFgIGlzIHN1Y2ggdGhhdCBgWCAqIFggPSBBYC5cbiAgICpcbiAgICogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU3F1YXJlX3Jvb3Rfb2ZfYV9tYXRyaXhcbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgWCA9IG1hdGguc3FydG0oQSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLnNxcnRtKFtbMSwgMl0sIFszLCA0XV0pIC8vIHJldHVybnMgW1stMiwgMV0sIFsxLjUsIC0wLjVdXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgIHNxcnQsIHBvd1xuICAgKlxuICAgKiBAcGFyYW0gIHtBcnJheSB8IE1hdHJpeH0gQSAgIFRoZSBzcXVhcmUgbWF0cml4IGBBYFxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gICAgIFRoZSBwcmluY2lwYWwgc3F1YXJlIHJvb3Qgb2YgbWF0cml4IGBBYFxuICAgKi9cbiAgdmFyIHNxcnRtID0gdHlwZWQobmFtZSwge1xuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KEEpIHtcbiAgICAgIHZhciBzaXplID0gKDAsIF9pcy5pc01hdHJpeCkoQSkgPyBBLnNpemUoKSA6ICgwLCBfYXJyYXkuYXJyYXlTaXplKShBKTtcblxuICAgICAgc3dpdGNoIChzaXplLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgLy8gU2luZ2xlIGVsZW1lbnQgQXJyYXkgfCBNYXRyaXhcbiAgICAgICAgICBpZiAoc2l6ZVswXSA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIHNxcnQoQSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggbXVzdCBiZSBzcXVhcmUgJyArICcoc2l6ZTogJyArICgwLCBfc3RyaW5nLmZvcm1hdCkoc2l6ZSkgKyAnKScpO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gVHdvLWRpbWVuc2lvbmFsIEFycmF5IHwgTWF0cml4XG4gICAgICAgICAgICB2YXIgcm93cyA9IHNpemVbMF07XG4gICAgICAgICAgICB2YXIgY29scyA9IHNpemVbMV07XG5cbiAgICAgICAgICAgIGlmIChyb3dzID09PSBjb2xzKSB7XG4gICAgICAgICAgICAgIHJldHVybiBfZGVubWFuQmVhdmVycyhBKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggbXVzdCBiZSBzcXVhcmUgJyArICcoc2l6ZTogJyArICgwLCBfc3RyaW5nLmZvcm1hdCkoc2l6ZSkgKyAnKScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICB2YXIgX21heEl0ZXJhdGlvbnMgPSAxZTM7XG4gIHZhciBfdG9sZXJhbmNlID0gMWUtNjtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgcHJpbmNpcGFsIHNxdWFyZSByb290IG1hdHJpeCB1c2luZyB0aGUgRGVubWFu4oCTQmVhdmVycyBpdGVyYXRpdmUgbWV0aG9kXG4gICAqXG4gICAqIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NxdWFyZV9yb290X29mX2FfbWF0cml4I0J5X0Rlbm1hbuKAk0JlYXZlcnNfaXRlcmF0aW9uXG4gICAqXG4gICAqIEBwYXJhbSAge0FycmF5IHwgTWF0cml4fSBBICAgVGhlIHNxdWFyZSBtYXRyaXggYEFgXG4gICAqIEByZXR1cm4ge0FycmF5IHwgTWF0cml4fSAgICAgVGhlIHByaW5jaXBhbCBzcXVhcmUgcm9vdCBvZiBtYXRyaXggYEFgXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9kZW5tYW5CZWF2ZXJzKEEpIHtcbiAgICB2YXIgZXJyb3I7XG4gICAgdmFyIGl0ZXJhdGlvbnMgPSAwO1xuICAgIHZhciBZID0gQTtcbiAgICB2YXIgWiA9IGlkZW50aXR5KHNpemUoQSkpO1xuXG4gICAgZG8ge1xuICAgICAgdmFyIFlrID0gWTtcbiAgICAgIFkgPSBtdWx0aXBseSgwLjUsIGFkZChZaywgaW52KFopKSk7XG4gICAgICBaID0gbXVsdGlwbHkoMC41LCBhZGQoWiwgaW52KFlrKSkpO1xuICAgICAgZXJyb3IgPSBtYXgoYWJzKHN1YnRyYWN0KFksIFlrKSkpO1xuXG4gICAgICBpZiAoZXJyb3IgPiBfdG9sZXJhbmNlICYmICsraXRlcmF0aW9ucyA+IF9tYXhJdGVyYXRpb25zKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY29tcHV0aW5nIHNxdWFyZSByb290IG9mIG1hdHJpeDogaXRlcmF0aXZlIG1ldGhvZCBjb3VsZCBub3QgY29udmVyZ2UnKTtcbiAgICAgIH1cbiAgICB9IHdoaWxlIChlcnJvciA+IF90b2xlcmFuY2UpO1xuXG4gICAgcmV0dXJuIFk7XG4gIH1cblxuICByZXR1cm4gc3FydG07XG59KTtcbmV4cG9ydHMuY3JlYXRlU3FydG0gPSBjcmVhdGVTcXJ0bTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3F1ZWV6ZSA9IHZvaWQgMDtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnc3F1ZWV6ZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnXTtcbnZhciBjcmVhdGVTcXVlZXplID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4O1xuXG4gIC8qKlxuICAgKiBTcXVlZXplIGEgbWF0cml4LCByZW1vdmUgaW5uZXIgYW5kIG91dGVyIHNpbmdsZXRvbiBkaW1lbnNpb25zIGZyb20gYSBtYXRyaXguXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguc3F1ZWV6ZSh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGguc3F1ZWV6ZShbM10pICAgICAgICAgICAvLyByZXR1cm5zIDNcbiAgICogICAgIG1hdGguc3F1ZWV6ZShbWzNdXSkgICAgICAgICAvLyByZXR1cm5zIDNcbiAgICpcbiAgICogICAgIGNvbnN0IEEgPSBtYXRoLnplcm9zKDMsIDEpICAgIC8vIHJldHVybnMgW1swXSwgWzBdLCBbMF1dIChzaXplIDN4MSlcbiAgICogICAgIG1hdGguc3F1ZWV6ZShBKSAgICAgICAgICAgICAvLyByZXR1cm5zIFswLCAwLCAwXSAoc2l6ZSAzKVxuICAgKlxuICAgKiAgICAgY29uc3QgQiA9IG1hdGguemVyb3MoMSwgMykgICAgLy8gcmV0dXJucyBbWzAsIDAsIDBdXSAoc2l6ZSAxeDMpXG4gICAqICAgICBtYXRoLnNxdWVlemUoQikgICAgICAgICAgICAgLy8gcmV0dXJucyBbMCwgMCwgMF0gKHNpemUgMylcbiAgICpcbiAgICogICAgIC8vIG9ubHkgaW5uZXIgYW5kIG91dGVyIGRpbWVuc2lvbnMgYXJlIHJlbW92ZWRcbiAgICogICAgIGNvbnN0IEMgPSBtYXRoLnplcm9zKDIsIDEsIDMpIC8vIHJldHVybnMgW1tbMCwgMCwgMF1dLCBbWzAsIDAsIDBdXV0gKHNpemUgMngxeDMpXG4gICAqICAgICBtYXRoLnNxdWVlemUoQykgICAgICAgICAgICAgLy8gcmV0dXJucyBbW1swLCAwLCAwXV0sIFtbMCwgMCwgMF1dXSAoc2l6ZSAyeDF4MylcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBzdWJzZXRcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXggfCBBcnJheX0geCAgICAgIE1hdHJpeCB0byBiZSBzcXVlZXplZFxuICAgKiBAcmV0dXJuIHtNYXRyaXggfCBBcnJheX0gU3F1ZWV6ZWQgbWF0cml4XG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIEFycmF5OiBmdW5jdGlvbiBBcnJheSh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9hcnJheS5zcXVlZXplKSgoMCwgX29iamVjdC5jbG9uZSkoeCkpO1xuICAgIH0sXG4gICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoeCkge1xuICAgICAgdmFyIHJlcyA9ICgwLCBfYXJyYXkuc3F1ZWV6ZSkoeC50b0FycmF5KCkpOyAvLyBGSVhNRTogcmV0dXJuIHRoZSBzYW1lIHR5cGUgb2YgbWF0cml4IGFzIHRoZSBpbnB1dFxuXG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShyZXMpID8gbWF0cml4KHJlcykgOiByZXM7XG4gICAgfSxcbiAgICBhbnk6IGZ1bmN0aW9uIGFueSh4KSB7XG4gICAgICAvLyBzY2FsYXJcbiAgICAgIHJldHVybiAoMCwgX29iamVjdC5jbG9uZSkoeCk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTcXVlZXplID0gY3JlYXRlU3F1ZWV6ZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3Vic2V0ID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfY3VzdG9tcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jdXN0b21zXCIpO1xuXG52YXIgX0RpbWVuc2lvbkVycm9yID0gcmVxdWlyZShcIi4uLy4uL2Vycm9yL0RpbWVuc2lvbkVycm9yXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnc3Vic2V0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCddO1xudmFyIGNyZWF0ZVN1YnNldCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeDtcblxuICAvKipcbiAgICogR2V0IG9yIHNldCBhIHN1YnNldCBvZiBhIG1hdHJpeCBvciBzdHJpbmcuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICogICAgIG1hdGguc3Vic2V0KHZhbHVlLCBpbmRleCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHJpZXZlIGEgc3Vic2V0XG4gICAqICAgICBtYXRoLnN1YnNldCh2YWx1ZSwgaW5kZXgsIHJlcGxhY2VtZW50IFssIGRlZmF1bHRWYWx1ZV0pICAvLyByZXBsYWNlIGEgc3Vic2V0XG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgLy8gZ2V0IGEgc3Vic2V0XG4gICAqICAgICBjb25zdCBkID0gW1sxLCAyXSwgWzMsIDRdXVxuICAgKiAgICAgbWF0aC5zdWJzZXQoZCwgbWF0aC5pbmRleCgxLCAwKSkgICAgICAgIC8vIHJldHVybnMgM1xuICAgKiAgICAgbWF0aC5zdWJzZXQoZCwgbWF0aC5pbmRleChbMCwgMV0sIDEpKSAgIC8vIHJldHVybnMgW1syXSwgWzRdXVxuICAgKlxuICAgKiAgICAgLy8gcmVwbGFjZSBhIHN1YnNldFxuICAgKiAgICAgY29uc3QgZSA9IFtdXG4gICAqICAgICBjb25zdCBmID0gbWF0aC5zdWJzZXQoZSwgbWF0aC5pbmRleCgwLCBbMCwgMl0pLCBbNSwgNl0pICAvLyBmID0gW1s1LCA2XV1cbiAgICogICAgIGNvbnN0IGcgPSBtYXRoLnN1YnNldChmLCBtYXRoLmluZGV4KDEsIDEpLCA3LCAwKSAgICAgICAgIC8vIGcgPSBbWzUsIDZdLCBbMCwgN11dXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgc2l6ZSwgcmVzaXplLCBzcXVlZXplLCBpbmRleFxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4IHwgc3RyaW5nfSBtYXRyaXggIEFuIGFycmF5LCBtYXRyaXgsIG9yIHN0cmluZ1xuICAgKiBAcGFyYW0ge0luZGV4fSBpbmRleCAgICAgICAgICAgICAgICAgICAgIEFuIGluZGV4IGNvbnRhaW5pbmcgcmFuZ2VzIGZvciBlYWNoXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGltZW5zaW9uXG4gICAqIEBwYXJhbSB7Kn0gW3JlcGxhY2VtZW50XSAgICAgICAgICAgICAgICAgQW4gYXJyYXksIG1hdHJpeCwgb3Igc2NhbGFyLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHByb3ZpZGVkLCB0aGUgc3Vic2V0IGlzIHJlcGxhY2VkIHdpdGggcmVwbGFjZW1lbnQuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgbm90IHByb3ZpZGVkLCB0aGUgc3Vic2V0IGlzIHJldHVybmVkXG4gICAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZT11bmRlZmluZWRdICAgICAgRGVmYXVsdCB2YWx1ZSwgZmlsbGVkIGluIG9uIG5ldyBlbnRyaWVzIHdoZW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWF0cml4IGlzIHJlc2l6ZWQuIElmIG5vdCBwcm92aWRlZCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRoLm1hdHJpeCBlbGVtZW50cyB3aWxsIGJlIGxlZnQgdW5kZWZpbmVkLlxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeCB8IHN0cmluZ30gRWl0aGVyIHRoZSByZXRyaWV2ZWQgc3Vic2V0IG9yIHRoZSB1cGRhdGVkIG1hdHJpeC5cbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgLy8gZ2V0IHN1YnNldFxuICAgICdBcnJheSwgSW5kZXgnOiBmdW5jdGlvbiBBcnJheUluZGV4KHZhbHVlLCBpbmRleCkge1xuICAgICAgdmFyIG0gPSBtYXRyaXgodmFsdWUpO1xuICAgICAgdmFyIHN1YnNldCA9IG0uc3Vic2V0KGluZGV4KTsgLy8gcmV0dXJucyBhIE1hdHJpeFxuXG4gICAgICByZXR1cm4gaW5kZXguaXNTY2FsYXIoKSA/IHN1YnNldCA6IHN1YnNldC52YWx1ZU9mKCk7IC8vIHJldHVybiBhbiBBcnJheSAobGlrZSB0aGUgaW5wdXQpXG4gICAgfSxcbiAgICAnTWF0cml4LCBJbmRleCc6IGZ1bmN0aW9uIE1hdHJpeEluZGV4KHZhbHVlLCBpbmRleCkge1xuICAgICAgcmV0dXJuIHZhbHVlLnN1YnNldChpbmRleCk7XG4gICAgfSxcbiAgICAnT2JqZWN0LCBJbmRleCc6IF9nZXRPYmplY3RQcm9wZXJ0eSxcbiAgICAnc3RyaW5nLCBJbmRleCc6IF9nZXRTdWJzdHJpbmcsXG4gICAgLy8gc2V0IHN1YnNldFxuICAgICdBcnJheSwgSW5kZXgsIGFueSc6IGZ1bmN0aW9uIEFycmF5SW5kZXhBbnkodmFsdWUsIGluZGV4LCByZXBsYWNlbWVudCkge1xuICAgICAgcmV0dXJuIG1hdHJpeCgoMCwgX29iamVjdC5jbG9uZSkodmFsdWUpKS5zdWJzZXQoaW5kZXgsIHJlcGxhY2VtZW50LCB1bmRlZmluZWQpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgSW5kZXgsIGFueSwgYW55JzogZnVuY3Rpb24gQXJyYXlJbmRleEFueUFueSh2YWx1ZSwgaW5kZXgsIHJlcGxhY2VtZW50LCBkZWZhdWx0VmFsdWUpIHtcbiAgICAgIHJldHVybiBtYXRyaXgoKDAsIF9vYmplY3QuY2xvbmUpKHZhbHVlKSkuc3Vic2V0KGluZGV4LCByZXBsYWNlbWVudCwgZGVmYXVsdFZhbHVlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBJbmRleCwgYW55JzogZnVuY3Rpb24gTWF0cml4SW5kZXhBbnkodmFsdWUsIGluZGV4LCByZXBsYWNlbWVudCkge1xuICAgICAgcmV0dXJuIHZhbHVlLmNsb25lKCkuc3Vic2V0KGluZGV4LCByZXBsYWNlbWVudCk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBJbmRleCwgYW55LCBhbnknOiBmdW5jdGlvbiBNYXRyaXhJbmRleEFueUFueSh2YWx1ZSwgaW5kZXgsIHJlcGxhY2VtZW50LCBkZWZhdWx0VmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZS5jbG9uZSgpLnN1YnNldChpbmRleCwgcmVwbGFjZW1lbnQsIGRlZmF1bHRWYWx1ZSk7XG4gICAgfSxcbiAgICAnc3RyaW5nLCBJbmRleCwgc3RyaW5nJzogX3NldFN1YnN0cmluZyxcbiAgICAnc3RyaW5nLCBJbmRleCwgc3RyaW5nLCBzdHJpbmcnOiBfc2V0U3Vic3RyaW5nLFxuICAgICdPYmplY3QsIEluZGV4LCBhbnknOiBfc2V0T2JqZWN0UHJvcGVydHlcbiAgfSk7XG59KTtcbi8qKlxuICogUmV0cmlldmUgYSBzdWJzZXQgb2YgYSBzdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgICAgICAgICAgICBzdHJpbmcgZnJvbSB3aGljaCB0byBnZXQgYSBzdWJzdHJpbmdcbiAqIEBwYXJhbSB7SW5kZXh9IGluZGV4ICAgICAgICAgICBBbiBpbmRleCBjb250YWluaW5nIHJhbmdlcyBmb3IgZWFjaCBkaW1lbnNpb25cbiAqIEByZXR1cm5zIHtzdHJpbmd9IHN1YnN0cmluZ1xuICogQHByaXZhdGVcbiAqL1xuXG5leHBvcnRzLmNyZWF0ZVN1YnNldCA9IGNyZWF0ZVN1YnNldDtcblxuZnVuY3Rpb24gX2dldFN1YnN0cmluZyhzdHIsIGluZGV4KSB7XG4gIGlmICghKDAsIF9pcy5pc0luZGV4KShpbmRleCkpIHtcbiAgICAvLyBUT0RPOiBiZXR0ZXIgZXJyb3IgbWVzc2FnZVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0luZGV4IGV4cGVjdGVkJyk7XG4gIH1cblxuICBpZiAoaW5kZXguc2l6ZSgpLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3IoaW5kZXguc2l6ZSgpLmxlbmd0aCwgMSk7XG4gIH0gLy8gdmFsaWRhdGUgd2hldGhlciB0aGUgcmFuZ2UgaXMgb3V0IG9mIHJhbmdlXG5cblxuICB2YXIgc3RyTGVuID0gc3RyLmxlbmd0aDtcbiAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShpbmRleC5taW4oKVswXSwgc3RyTGVuKTtcbiAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShpbmRleC5tYXgoKVswXSwgc3RyTGVuKTtcbiAgdmFyIHJhbmdlID0gaW5kZXguZGltZW5zaW9uKDApO1xuICB2YXIgc3Vic3RyID0gJyc7XG4gIHJhbmdlLmZvckVhY2goZnVuY3Rpb24gKHYpIHtcbiAgICBzdWJzdHIgKz0gc3RyLmNoYXJBdCh2KTtcbiAgfSk7XG4gIHJldHVybiBzdWJzdHI7XG59XG4vKipcbiAqIFJlcGxhY2UgYSBzdWJzdHJpbmcgaW4gYSBzdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgICAgICAgICAgICBzdHJpbmcgdG8gYmUgcmVwbGFjZWRcbiAqIEBwYXJhbSB7SW5kZXh9IGluZGV4ICAgICAgICAgICBBbiBpbmRleCBjb250YWluaW5nIHJhbmdlcyBmb3IgZWFjaCBkaW1lbnNpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSByZXBsYWNlbWVudCAgICBSZXBsYWNlbWVudCBzdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbZGVmYXVsdFZhbHVlXSBEZWZhdWx0IHZhbHVlIHRvIGJlIHVzZXMgd2hlbiByZXNpemluZ1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzdHJpbmcuIGlzICcgJyBieSBkZWZhdWx0XG4gKiBAcmV0dXJucyB7c3RyaW5nfSByZXN1bHRcbiAqIEBwcml2YXRlXG4gKi9cblxuXG5mdW5jdGlvbiBfc2V0U3Vic3RyaW5nKHN0ciwgaW5kZXgsIHJlcGxhY2VtZW50LCBkZWZhdWx0VmFsdWUpIHtcbiAgaWYgKCFpbmRleCB8fCBpbmRleC5pc0luZGV4ICE9PSB0cnVlKSB7XG4gICAgLy8gVE9ETzogYmV0dGVyIGVycm9yIG1lc3NhZ2VcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbmRleCBleHBlY3RlZCcpO1xuICB9XG5cbiAgaWYgKGluZGV4LnNpemUoKS5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKGluZGV4LnNpemUoKS5sZW5ndGgsIDEpO1xuICB9XG5cbiAgaWYgKGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGVvZiBkZWZhdWx0VmFsdWUgIT09ICdzdHJpbmcnIHx8IGRlZmF1bHRWYWx1ZS5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1NpbmdsZSBjaGFyYWN0ZXIgZXhwZWN0ZWQgYXMgZGVmYXVsdFZhbHVlJyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGRlZmF1bHRWYWx1ZSA9ICcgJztcbiAgfVxuXG4gIHZhciByYW5nZSA9IGluZGV4LmRpbWVuc2lvbigwKTtcbiAgdmFyIGxlbiA9IHJhbmdlLnNpemUoKVswXTtcblxuICBpZiAobGVuICE9PSByZXBsYWNlbWVudC5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKHJhbmdlLnNpemUoKVswXSwgcmVwbGFjZW1lbnQubGVuZ3RoKTtcbiAgfSAvLyB2YWxpZGF0ZSB3aGV0aGVyIHRoZSByYW5nZSBpcyBvdXQgb2YgcmFuZ2VcblxuXG4gIHZhciBzdHJMZW4gPSBzdHIubGVuZ3RoO1xuICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKGluZGV4Lm1pbigpWzBdKTtcbiAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShpbmRleC5tYXgoKVswXSk7IC8vIGNvcHkgdGhlIHN0cmluZyBpbnRvIGFuIGFycmF5IHdpdGggY2hhcmFjdGVyc1xuXG4gIHZhciBjaGFycyA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyTGVuOyBpKyspIHtcbiAgICBjaGFyc1tpXSA9IHN0ci5jaGFyQXQoaSk7XG4gIH1cblxuICByYW5nZS5mb3JFYWNoKGZ1bmN0aW9uICh2LCBpKSB7XG4gICAgY2hhcnNbdl0gPSByZXBsYWNlbWVudC5jaGFyQXQoaVswXSk7XG4gIH0pOyAvLyBpbml0aWFsaXplIHVuZGVmaW5lZCBjaGFyYWN0ZXJzIHdpdGggYSBzcGFjZVxuXG4gIGlmIChjaGFycy5sZW5ndGggPiBzdHJMZW4pIHtcbiAgICBmb3IgKHZhciBfaSA9IHN0ckxlbiAtIDEsIF9sZW4gPSBjaGFycy5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykge1xuICAgICAgaWYgKCFjaGFyc1tfaV0pIHtcbiAgICAgICAgY2hhcnNbX2ldID0gZGVmYXVsdFZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjaGFycy5qb2luKCcnKTtcbn1cbi8qKlxuICogUmV0cmlldmUgYSBwcm9wZXJ0eSBmcm9tIGFuIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICogQHBhcmFtIHtJbmRleH0gaW5kZXhcbiAqIEByZXR1cm4geyp9IFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eVxuICogQHByaXZhdGVcbiAqL1xuXG5cbmZ1bmN0aW9uIF9nZXRPYmplY3RQcm9wZXJ0eShvYmplY3QsIGluZGV4KSB7XG4gIGlmIChpbmRleC5zaXplKCkubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihpbmRleC5zaXplKCksIDEpO1xuICB9XG5cbiAgdmFyIGtleSA9IGluZGV4LmRpbWVuc2lvbigwKTtcblxuICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTdHJpbmcgZXhwZWN0ZWQgYXMgaW5kZXggdG8gcmV0cmlldmUgYW4gb2JqZWN0IHByb3BlcnR5Jyk7XG4gIH1cblxuICByZXR1cm4gKDAsIF9jdXN0b21zLmdldFNhZmVQcm9wZXJ0eSkob2JqZWN0LCBrZXkpO1xufVxuLyoqXG4gKiBTZXQgYSBwcm9wZXJ0eSBvbiBhbiBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAqIEBwYXJhbSB7SW5kZXh9IGluZGV4XG4gKiBAcGFyYW0geyp9IHJlcGxhY2VtZW50XG4gKiBAcmV0dXJuIHsqfSBSZXR1cm5zIHRoZSB1cGRhdGVkIG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuXG5cbmZ1bmN0aW9uIF9zZXRPYmplY3RQcm9wZXJ0eShvYmplY3QsIGluZGV4LCByZXBsYWNlbWVudCkge1xuICBpZiAoaW5kZXguc2l6ZSgpLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3IoaW5kZXguc2l6ZSgpLCAxKTtcbiAgfVxuXG4gIHZhciBrZXkgPSBpbmRleC5kaW1lbnNpb24oMCk7XG5cbiAgaWYgKHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignU3RyaW5nIGV4cGVjdGVkIGFzIGluZGV4IHRvIHJldHJpZXZlIGFuIG9iamVjdCBwcm9wZXJ0eScpO1xuICB9IC8vIGNsb25lIHRoZSBvYmplY3QsIGFuZCBhcHBseSB0aGUgcHJvcGVydHkgdG8gdGhlIGNsb25lXG5cblxuICB2YXIgdXBkYXRlZCA9ICgwLCBfb2JqZWN0LmNsb25lKShvYmplY3QpO1xuICAoMCwgX2N1c3RvbXMuc2V0U2FmZVByb3BlcnR5KSh1cGRhdGVkLCBrZXksIHJlcGxhY2VtZW50KTtcbiAgcmV0dXJuIHVwZGF0ZWQ7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVRyYWNlID0gdm9pZCAwO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3N0cmluZ1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3RyYWNlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdhZGQnXTtcbnZhciBjcmVhdGVUcmFjZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGFkZCA9IF9yZWYuYWRkO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIHRyYWNlIG9mIGEgbWF0cml4OiB0aGUgc3VtIG9mIHRoZSBlbGVtZW50cyBvbiB0aGUgbWFpblxuICAgKiBkaWFnb25hbCBvZiBhIHNxdWFyZSBtYXRyaXguXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC50cmFjZSh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC50cmFjZShbWzEsIDJdLCBbMywgNF1dKSAvLyByZXR1cm5zIDVcbiAgICpcbiAgICogICAgY29uc3QgQSA9IFtcbiAgICogICAgICBbMSwgMiwgM10sXG4gICAqICAgICAgWy0xLCAyLCAzXSxcbiAgICogICAgICBbMiwgMCwgM11cbiAgICogICAgXVxuICAgKiAgICBtYXRoLnRyYWNlKEEpIC8vIHJldHVybnMgNlxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgZGlhZ1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSB4ICBBIG1hdHJpeFxuICAgKlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSB0cmFjZSBvZiBgeGBcbiAgICovXG4gIHJldHVybiB0eXBlZCgndHJhY2UnLCB7XG4gICAgQXJyYXk6IGZ1bmN0aW9uIF9hcnJheVRyYWNlKHgpIHtcbiAgICAgIC8vIHVzZSBkZW5zZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBfZGVuc2VUcmFjZShtYXRyaXgoeCkpO1xuICAgIH0sXG4gICAgU3BhcnNlTWF0cml4OiBfc3BhcnNlVHJhY2UsXG4gICAgRGVuc2VNYXRyaXg6IF9kZW5zZVRyYWNlLFxuICAgIGFueTogX29iamVjdC5jbG9uZVxuICB9KTtcblxuICBmdW5jdGlvbiBfZGVuc2VUcmFjZShtKSB7XG4gICAgLy8gbWF0cml4IHNpemUgJiBkYXRhXG4gICAgdmFyIHNpemUgPSBtLl9zaXplO1xuICAgIHZhciBkYXRhID0gbS5fZGF0YTsgLy8gcHJvY2VzcyBkaW1lbnNpb25zXG5cbiAgICBzd2l0Y2ggKHNpemUubGVuZ3RoKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIC8vIHZlY3RvclxuICAgICAgICBpZiAoc2l6ZVswXSA9PT0gMSkge1xuICAgICAgICAgIC8vIHJldHVybiBkYXRhWzBdXG4gICAgICAgICAgcmV0dXJuICgwLCBfb2JqZWN0LmNsb25lKShkYXRhWzBdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggbXVzdCBiZSBzcXVhcmUgKHNpemU6ICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKHNpemUpICsgJyknKTtcblxuICAgICAgY2FzZSAyOlxuICAgICAgICB7XG4gICAgICAgICAgLy8gdHdvIGRpbWVuc2lvbmFsXG4gICAgICAgICAgdmFyIHJvd3MgPSBzaXplWzBdO1xuICAgICAgICAgIHZhciBjb2xzID0gc2l6ZVsxXTtcblxuICAgICAgICAgIGlmIChyb3dzID09PSBjb2xzKSB7XG4gICAgICAgICAgICAvLyBjYWx1bGF0ZSBzdW1cbiAgICAgICAgICAgIHZhciBzdW0gPSAwOyAvLyBsb29wIGRpYWdvbmFsXG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgICAgIHN1bSA9IGFkZChzdW0sIGRhdGFbaV1baV0pO1xuICAgICAgICAgICAgfSAvLyByZXR1cm4gdHJhY2VcblxuXG4gICAgICAgICAgICByZXR1cm4gc3VtO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgc3F1YXJlIChzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShzaXplKSArICcpJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIG11bHRpIGRpbWVuc2lvbmFsXG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggbXVzdCBiZSB0d28gZGltZW5zaW9uYWwgKHNpemU6ICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKHNpemUpICsgJyknKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBfc3BhcnNlVHJhY2UobSkge1xuICAgIC8vIG1hdHJpeCBhcnJheXNcbiAgICB2YXIgdmFsdWVzID0gbS5fdmFsdWVzO1xuICAgIHZhciBpbmRleCA9IG0uX2luZGV4O1xuICAgIHZhciBwdHIgPSBtLl9wdHI7XG4gICAgdmFyIHNpemUgPSBtLl9zaXplOyAvLyBjaGVjayBkaW1lbnNpb25zXG5cbiAgICB2YXIgcm93cyA9IHNpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSBzaXplWzFdOyAvLyBtYXRyaXggbXVzdCBiZSBzcXVhcmVcblxuICAgIGlmIChyb3dzID09PSBjb2x1bW5zKSB7XG4gICAgICAvLyBjYWx1bGF0ZSBzdW1cbiAgICAgIHZhciBzdW0gPSAwOyAvLyBjaGVjayB3ZSBoYXZlIGRhdGEgKGF2b2lkIGxvb3BpbmcgY29sdW1ucylcblxuICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIGxvb3AgY29sdW1uc1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgICAgIC8vIGswIDw9IGsgPCBrMSB3aGVyZSBrMCA9IF9wdHJbal0gJiYgazEgPSBfcHRyW2orMV1cbiAgICAgICAgICB2YXIgazAgPSBwdHJbal07XG4gICAgICAgICAgdmFyIGsxID0gcHRyW2ogKyAxXTsgLy8gbG9vcCBrIHdpdGhpbiBbazAsIGsxW1xuXG4gICAgICAgICAgZm9yICh2YXIgayA9IGswOyBrIDwgazE7IGsrKykge1xuICAgICAgICAgICAgLy8gcm93IGluZGV4XG4gICAgICAgICAgICB2YXIgaSA9IGluZGV4W2tdOyAvLyBjaGVjayByb3dcblxuICAgICAgICAgICAgaWYgKGkgPT09IGopIHtcbiAgICAgICAgICAgICAgLy8gYWNjdW11bGF0ZSB2YWx1ZVxuICAgICAgICAgICAgICBzdW0gPSBhZGQoc3VtLCB2YWx1ZXNba10pOyAvLyBleGl0IGxvb3BcblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGkgPiBqKSB7XG4gICAgICAgICAgICAgIC8vIGV4aXQgbG9vcCwgbm8gdmFsdWUgb24gdGhlIGRpYWdvbmFsIGZvciBjb2x1bW4galxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gcmV0dXJuIHRyYWNlXG5cblxuICAgICAgcmV0dXJuIHN1bTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgc3F1YXJlIChzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShzaXplKSArICcpJyk7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVUcmFjZSA9IGNyZWF0ZVRyYWNlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVUcmFuc3Bvc2UgPSB2b2lkIDA7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvc3RyaW5nXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAndHJhbnNwb3NlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCddO1xudmFyIGNyZWF0ZVRyYW5zcG9zZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeDtcblxuICAvKipcbiAgICogVHJhbnNwb3NlIGEgbWF0cml4LiBBbGwgdmFsdWVzIG9mIHRoZSBtYXRyaXggYXJlIHJlZmxlY3RlZCBvdmVyIGl0c1xuICAgKiBtYWluIGRpYWdvbmFsLiBPbmx5IGFwcGxpY2FibGUgdG8gdHdvIGRpbWVuc2lvbmFsIG1hdHJpY2VzIGNvbnRhaW5pbmdcbiAgICogYSB2ZWN0b3IgKGkuZS4gaGF2aW5nIHNpemUgYFsxLG5dYCBvciBgW24sMV1gKS4gT25lIGRpbWVuc2lvbmFsXG4gICAqIHZlY3RvcnMgYW5kIHNjYWxhcnMgcmV0dXJuIHRoZSBpbnB1dCB1bmNoYW5nZWQuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGgudHJhbnNwb3NlKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgY29uc3QgQSA9IFtbMSwgMiwgM10sIFs0LCA1LCA2XV1cbiAgICogICAgIG1hdGgudHJhbnNwb3NlKEEpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBbWzEsIDRdLCBbMiwgNV0sIFszLCA2XV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBkaWFnLCBpbnYsIHN1YnNldCwgc3F1ZWV6ZVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSB4ICBNYXRyaXggdG8gYmUgdHJhbnNwb3NlZFxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gICBUaGUgdHJhbnNwb3NlZCBtYXRyaXhcbiAgICovXG4gIHZhciB0cmFuc3Bvc2UgPSB0eXBlZCgndHJhbnNwb3NlJywge1xuICAgIEFycmF5OiBmdW5jdGlvbiBBcnJheSh4KSB7XG4gICAgICAvLyB1c2UgZGVuc2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gdHJhbnNwb3NlKG1hdHJpeCh4KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoeCkge1xuICAgICAgLy8gbWF0cml4IHNpemVcbiAgICAgIHZhciBzaXplID0geC5zaXplKCk7IC8vIHJlc3VsdFxuXG4gICAgICB2YXIgYzsgLy8gcHJvY2VzcyBkaW1lbnNpb25zXG5cbiAgICAgIHN3aXRjaCAoc2l6ZS5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIC8vIHZlY3RvclxuICAgICAgICAgIGMgPSB4LmNsb25lKCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIHJvd3MgYW5kIGNvbHVtbnNcbiAgICAgICAgICAgIHZhciByb3dzID0gc2l6ZVswXTtcbiAgICAgICAgICAgIHZhciBjb2x1bW5zID0gc2l6ZVsxXTsgLy8gY2hlY2sgY29sdW1uc1xuXG4gICAgICAgICAgICBpZiAoY29sdW1ucyA9PT0gMCkge1xuICAgICAgICAgICAgICAvLyB0aHJvdyBleGNlcHRpb25cbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0Nhbm5vdCB0cmFuc3Bvc2UgYSAyRCBtYXRyaXggd2l0aCBubyBjb2x1bW5zIChzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShzaXplKSArICcpJyk7XG4gICAgICAgICAgICB9IC8vIHByb2Nlc3Mgc3RvcmFnZSBmb3JtYXRcblxuXG4gICAgICAgICAgICBzd2l0Y2ggKHguc3RvcmFnZSgpKSB7XG4gICAgICAgICAgICAgIGNhc2UgJ2RlbnNlJzpcbiAgICAgICAgICAgICAgICBjID0gX2RlbnNlVHJhbnNwb3NlKHgsIHJvd3MsIGNvbHVtbnMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgJ3NwYXJzZSc6XG4gICAgICAgICAgICAgICAgYyA9IF9zcGFyc2VUcmFuc3Bvc2UoeCwgcm93cywgY29sdW1ucyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgLy8gbXVsdGkgZGltZW5zaW9uYWxcbiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgYSB2ZWN0b3Igb3IgdHdvIGRpbWVuc2lvbmFsIChzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KSh0aGlzLl9zaXplKSArICcpJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjO1xuICAgIH0sXG4gICAgLy8gc2NhbGFyc1xuICAgIGFueTogZnVuY3Rpb24gYW55KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX29iamVjdC5jbG9uZSkoeCk7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBfZGVuc2VUcmFuc3Bvc2UobSwgcm93cywgY29sdW1ucykge1xuICAgIC8vIG1hdHJpeCBhcnJheVxuICAgIHZhciBkYXRhID0gbS5fZGF0YTsgLy8gdHJhbnNwb3NlZCBtYXRyaXggZGF0YVxuXG4gICAgdmFyIHRyYW5zcG9zZWQgPSBbXTtcbiAgICB2YXIgdHJhbnNwb3NlZFJvdzsgLy8gbG9vcCBjb2x1bW5zXG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgLy8gaW5pdGlhbGl6ZSByb3dcbiAgICAgIHRyYW5zcG9zZWRSb3cgPSB0cmFuc3Bvc2VkW2pdID0gW107IC8vIGxvb3Agcm93c1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAvLyBzZXQgZGF0YVxuICAgICAgICB0cmFuc3Bvc2VkUm93W2ldID0gKDAsIF9vYmplY3QuY2xvbmUpKGRhdGFbaV1bal0pO1xuICAgICAgfVxuICAgIH0gLy8gcmV0dXJuIG1hdHJpeFxuXG5cbiAgICByZXR1cm4gbS5jcmVhdGVEZW5zZU1hdHJpeCh7XG4gICAgICBkYXRhOiB0cmFuc3Bvc2VkLFxuICAgICAgc2l6ZTogW2NvbHVtbnMsIHJvd3NdLFxuICAgICAgZGF0YXR5cGU6IG0uX2RhdGF0eXBlXG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBfc3BhcnNlVHJhbnNwb3NlKG0sIHJvd3MsIGNvbHVtbnMpIHtcbiAgICAvLyBtYXRyaXggYXJyYXlzXG4gICAgdmFyIHZhbHVlcyA9IG0uX3ZhbHVlcztcbiAgICB2YXIgaW5kZXggPSBtLl9pbmRleDtcbiAgICB2YXIgcHRyID0gbS5fcHRyOyAvLyByZXN1bHQgbWF0cmljZXNcblxuICAgIHZhciBjdmFsdWVzID0gdmFsdWVzID8gW10gOiB1bmRlZmluZWQ7XG4gICAgdmFyIGNpbmRleCA9IFtdO1xuICAgIHZhciBjcHRyID0gW107IC8vIHJvdyBjb3VudHNcblxuICAgIHZhciB3ID0gW107XG5cbiAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHJvd3M7IHgrKykge1xuICAgICAgd1t4XSA9IDA7XG4gICAgfSAvLyB2YXJzXG5cblxuICAgIHZhciBwLCBsLCBqOyAvLyBsb29wIHZhbHVlcyBpbiBtYXRyaXhcblxuICAgIGZvciAocCA9IDAsIGwgPSBpbmRleC5sZW5ndGg7IHAgPCBsOyBwKyspIHtcbiAgICAgIC8vIG51bWJlciBvZiB2YWx1ZXMgaW4gcm93XG4gICAgICB3W2luZGV4W3BdXSsrO1xuICAgIH0gLy8gY3VtdWxhdGl2ZSBzdW1cblxuXG4gICAgdmFyIHN1bSA9IDA7IC8vIGluaXRpYWxpemUgY3B0ciB3aXRoIHRoZSBjdW1tdWxhdGl2ZSBzdW0gb2Ygcm93IGNvdW50c1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgIC8vIHVwZGF0ZSBjcHRyXG4gICAgICBjcHRyLnB1c2goc3VtKTsgLy8gdXBkYXRlIHN1bVxuXG4gICAgICBzdW0gKz0gd1tpXTsgLy8gdXBkYXRlIHdcblxuICAgICAgd1tpXSA9IGNwdHJbaV07XG4gICAgfSAvLyB1cGRhdGUgY3B0clxuXG5cbiAgICBjcHRyLnB1c2goc3VtKTsgLy8gbG9vcCBjb2x1bW5zXG5cbiAgICBmb3IgKGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAvLyB2YWx1ZXMgJiBpbmRleCBpbiBjb2x1bW5cbiAgICAgIGZvciAodmFyIGswID0gcHRyW2pdLCBrMSA9IHB0cltqICsgMV0sIGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgLy8gQyB2YWx1ZXMgJiBpbmRleFxuICAgICAgICB2YXIgcSA9IHdbaW5kZXhba11dKys7IC8vIENbaiwgaV0gPSBBW2ksIGpdXG5cbiAgICAgICAgY2luZGV4W3FdID0gajsgLy8gY2hlY2sgd2UgbmVlZCB0byBwcm9jZXNzIHZhbHVlcyAocGF0dGVybiBtYXRyaXgpXG5cbiAgICAgICAgaWYgKHZhbHVlcykge1xuICAgICAgICAgIGN2YWx1ZXNbcV0gPSAoMCwgX29iamVjdC5jbG9uZSkodmFsdWVzW2tdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gcmV0dXJuIG1hdHJpeFxuXG5cbiAgICByZXR1cm4gbS5jcmVhdGVTcGFyc2VNYXRyaXgoe1xuICAgICAgdmFsdWVzOiBjdmFsdWVzLFxuICAgICAgaW5kZXg6IGNpbmRleCxcbiAgICAgIHB0cjogY3B0cixcbiAgICAgIHNpemU6IFtjb2x1bW5zLCByb3dzXSxcbiAgICAgIGRhdGF0eXBlOiBtLl9kYXRhdHlwZVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHRyYW5zcG9zZTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVUcmFuc3Bvc2UgPSBjcmVhdGVUcmFuc3Bvc2U7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVplcm9zID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICd6ZXJvcyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnbWF0cml4JywgJ0JpZ051bWJlciddO1xudmFyIGNyZWF0ZVplcm9zID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBCaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcjtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbWF0cml4IGZpbGxlZCB3aXRoIHplcm9zLiBUaGUgY3JlYXRlZCBtYXRyaXggY2FuIGhhdmUgb25lIG9yXG4gICAqIG11bHRpcGxlIGRpbWVuc2lvbnMuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC56ZXJvcyhtKVxuICAgKiAgICBtYXRoLnplcm9zKG0sIGZvcm1hdClcbiAgICogICAgbWF0aC56ZXJvcyhtLCBuKVxuICAgKiAgICBtYXRoLnplcm9zKG0sIG4sIGZvcm1hdClcbiAgICogICAgbWF0aC56ZXJvcyhbbSwgbl0pXG4gICAqICAgIG1hdGguemVyb3MoW20sIG5dLCBmb3JtYXQpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnplcm9zKDMpICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBbMCwgMCwgMF1cbiAgICogICAgbWF0aC56ZXJvcygzLCAyKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgW1swLCAwXSwgWzAsIDBdLCBbMCwgMF1dXG4gICAqICAgIG1hdGguemVyb3MoMywgJ2RlbnNlJykgICAgICAgICAvLyByZXR1cm5zIFswLCAwLCAwXVxuICAgKlxuICAgKiAgICBjb25zdCBBID0gW1sxLCAyLCAzXSwgWzQsIDUsIDZdXVxuICAgKiAgICBtYXRoLnplcm9zKG1hdGguc2l6ZShBKSkgICAgICAgLy8gcmV0dXJucyBbWzAsIDAsIDBdLCBbMCwgMCwgMF1dXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBvbmVzLCBpZGVudGl0eSwgc2l6ZSwgcmFuZ2VcbiAgICpcbiAgICogQHBhcmFtIHsuLi5udW1iZXIgfCBBcnJheX0gc2l6ZSAgICBUaGUgc2l6ZSBvZiBlYWNoIGRpbWVuc2lvbiBvZiB0aGUgbWF0cml4XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZm9ybWF0XSAgICAgICAgICAgVGhlIE1hdHJpeCBzdG9yYWdlIGZvcm1hdFxuICAgKlxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gICAgICAgICAgIEEgbWF0cml4IGZpbGxlZCB3aXRoIHplcm9zXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICcnOiBmdW5jdGlvbiBfKCkge1xuICAgICAgcmV0dXJuIGNvbmZpZy5tYXRyaXggPT09ICdBcnJheScgPyBfemVyb3MoW10pIDogX3plcm9zKFtdLCAnZGVmYXVsdCcpO1xuICAgIH0sXG4gICAgLy8gbWF0aC56ZXJvcyhtLCBuLCBwLCAuLi4sIGZvcm1hdClcbiAgICAvLyBUT0RPOiBtb3JlIGFjY3VyYXRlIHNpZ25hdHVyZSAnLi4ubnVtYmVyIHwgQmlnTnVtYmVyLCBzdHJpbmcnIGFzIHNvb24gYXMgdHlwZWQtZnVuY3Rpb24gc3VwcG9ydHMgdGhpc1xuICAgICcuLi5udW1iZXIgfCBCaWdOdW1iZXIgfCBzdHJpbmcnOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJTdHJpbmcoc2l6ZSkge1xuICAgICAgdmFyIGxhc3QgPSBzaXplW3NpemUubGVuZ3RoIC0gMV07XG5cbiAgICAgIGlmICh0eXBlb2YgbGFzdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHNpemUucG9wKCk7XG4gICAgICAgIHJldHVybiBfemVyb3Moc2l6ZSwgZm9ybWF0KTtcbiAgICAgIH0gZWxzZSBpZiAoY29uZmlnLm1hdHJpeCA9PT0gJ0FycmF5Jykge1xuICAgICAgICByZXR1cm4gX3plcm9zKHNpemUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIF96ZXJvcyhzaXplLCAnZGVmYXVsdCcpO1xuICAgICAgfVxuICAgIH0sXG4gICAgQXJyYXk6IF96ZXJvcyxcbiAgICBNYXRyaXg6IGZ1bmN0aW9uIE1hdHJpeChzaXplKSB7XG4gICAgICB2YXIgZm9ybWF0ID0gc2l6ZS5zdG9yYWdlKCk7XG4gICAgICByZXR1cm4gX3plcm9zKHNpemUudmFsdWVPZigpLCBmb3JtYXQpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4LCBzdHJpbmcnOiBmdW5jdGlvbiBBcnJheU1hdHJpeFN0cmluZyhzaXplLCBmb3JtYXQpIHtcbiAgICAgIHJldHVybiBfemVyb3Moc2l6ZS52YWx1ZU9mKCksIGZvcm1hdCk7XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBBcnJheSBvciBNYXRyaXggd2l0aCB6ZXJvc1xuICAgKiBAcGFyYW0ge0FycmF5fSBzaXplXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZm9ybWF0PSdkZWZhdWx0J11cbiAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXh9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF96ZXJvcyhzaXplLCBmb3JtYXQpIHtcbiAgICB2YXIgaGFzQmlnTnVtYmVycyA9IF9ub3JtYWxpemUoc2l6ZSk7XG5cbiAgICB2YXIgZGVmYXVsdFZhbHVlID0gaGFzQmlnTnVtYmVycyA/IG5ldyBCaWdOdW1iZXIoMCkgOiAwO1xuXG4gICAgX3ZhbGlkYXRlKHNpemUpO1xuXG4gICAgaWYgKGZvcm1hdCkge1xuICAgICAgLy8gcmV0dXJuIGEgbWF0cml4XG4gICAgICB2YXIgbSA9IG1hdHJpeChmb3JtYXQpO1xuXG4gICAgICBpZiAoc2l6ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBtLnJlc2l6ZShzaXplLCBkZWZhdWx0VmFsdWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gcmV0dXJuIGFuIEFycmF5XG4gICAgICB2YXIgYXJyID0gW107XG5cbiAgICAgIGlmIChzaXplLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuICgwLCBfYXJyYXkucmVzaXplKShhcnIsIHNpemUsIGRlZmF1bHRWYWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhcnI7XG4gICAgfVxuICB9IC8vIHJlcGxhY2UgQmlnTnVtYmVycyB3aXRoIG51bWJlcnMsIHJldHVybnMgdHJ1ZSBpZiBzaXplIGNvbnRhaW5lZCBCaWdOdW1iZXJzXG5cblxuICBmdW5jdGlvbiBfbm9ybWFsaXplKHNpemUpIHtcbiAgICB2YXIgaGFzQmlnTnVtYmVycyA9IGZhbHNlO1xuICAgIHNpemUuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBhcnIpIHtcbiAgICAgIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKSh2YWx1ZSkpIHtcbiAgICAgICAgaGFzQmlnTnVtYmVycyA9IHRydWU7XG4gICAgICAgIGFycltpbmRleF0gPSB2YWx1ZS50b051bWJlcigpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBoYXNCaWdOdW1iZXJzO1xuICB9IC8vIHZhbGlkYXRlIGFyZ3VtZW50c1xuXG5cbiAgZnVuY3Rpb24gX3ZhbGlkYXRlKHNpemUpIHtcbiAgICBzaXplLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJyB8fCAhKDAsIF9udW1iZXIuaXNJbnRlZ2VyKSh2YWx1ZSkgfHwgdmFsdWUgPCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUGFyYW1ldGVycyBpbiBmdW5jdGlvbiB6ZXJvcyBtdXN0IGJlIHBvc2l0aXZlIGludGVnZXJzJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn0pOyAvLyBUT0RPOiB6ZXJvcyBjb250YWlucyBhbG1vc3QgdGhlIHNhbWUgY29kZSBhcyBvbmVzLiBSZXVzZSB0aGlzP1xuXG5leHBvcnRzLmNyZWF0ZVplcm9zID0gY3JlYXRlWmVyb3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNvbWJpbmF0aW9ucyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29tYmluYXRpb25zID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlci9jb21iaW5hdGlvbnNcIik7XG5cbnZhciBuYW1lID0gJ2NvbWJpbmF0aW9ucyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUNvbWJpbmF0aW9ucyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIG51bWJlciBvZiB3YXlzIG9mIHBpY2tpbmcgYGtgIHVub3JkZXJlZCBvdXRjb21lcyBmcm9tIGBuYFxuICAgKiBwb3NzaWJpbGl0aWVzLlxuICAgKlxuICAgKiBDb21iaW5hdGlvbnMgb25seSB0YWtlcyBpbnRlZ2VyIGFyZ3VtZW50cy5cbiAgICogVGhlIGZvbGxvd2luZyBjb25kaXRpb24gbXVzdCBiZSBlbmZvcmNlZDogayA8PSBuLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLmNvbWJpbmF0aW9ucyhuLCBrKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5jb21iaW5hdGlvbnMoNywgNSkgLy8gcmV0dXJucyAyMVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgY29tYmluYXRpb25zV2l0aFJlcCwgcGVybXV0YXRpb25zLCBmYWN0b3JpYWxcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXJ9IG4gICAgVG90YWwgbnVtYmVyIG9mIG9iamVjdHMgaW4gdGhlIHNldFxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlcn0gayAgICBOdW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgc3Vic2V0XG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlcn0gICAgIE51bWJlciBvZiBwb3NzaWJsZSBjb21iaW5hdGlvbnMuXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIsIG51bWJlcic6IF9jb21iaW5hdGlvbnMuY29tYmluYXRpb25zTnVtYmVyLFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IGZ1bmN0aW9uIEJpZ051bWJlckJpZ051bWJlcihuLCBrKSB7XG4gICAgICB2YXIgQmlnTnVtYmVyID0gbi5jb25zdHJ1Y3RvcjtcbiAgICAgIHZhciByZXN1bHQsIGk7XG4gICAgICB2YXIgbk1pbnVzayA9IG4ubWludXMoayk7XG4gICAgICB2YXIgb25lID0gbmV3IEJpZ051bWJlcigxKTtcblxuICAgICAgaWYgKCFpc1Bvc2l0aXZlSW50ZWdlcihuKSB8fCAhaXNQb3NpdGl2ZUludGVnZXIoaykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUG9zaXRpdmUgaW50ZWdlciB2YWx1ZSBleHBlY3RlZCBpbiBmdW5jdGlvbiBjb21iaW5hdGlvbnMnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGsuZ3QobikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignayBtdXN0IGJlIGxlc3MgdGhhbiBuIGluIGZ1bmN0aW9uIGNvbWJpbmF0aW9ucycpO1xuICAgICAgfVxuXG4gICAgICByZXN1bHQgPSBvbmU7XG5cbiAgICAgIGlmIChrLmx0KG5NaW51c2spKSB7XG4gICAgICAgIGZvciAoaSA9IG9uZTsgaS5sdGUobk1pbnVzayk7IGkgPSBpLnBsdXMob25lKSkge1xuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC50aW1lcyhrLnBsdXMoaSkpLmRpdmlkZWRCeShpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChpID0gb25lOyBpLmx0ZShrKTsgaSA9IGkucGx1cyhvbmUpKSB7XG4gICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnRpbWVzKG5NaW51c2sucGx1cyhpKSkuZGl2aWRlZEJ5KGkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSAvLyBUT0RPOiBpbXBsZW1lbnQgc3VwcG9ydCBmb3IgY29sbGVjdGlvbiBpbiBjb21iaW5hdGlvbnNcblxuICB9KTtcbn0pO1xuLyoqXG4gKiBUZXN0IHdoZXRoZXIgQmlnTnVtYmVyIG4gaXMgYSBwb3NpdGl2ZSBpbnRlZ2VyXG4gKiBAcGFyYW0ge0JpZ051bWJlcn0gblxuICogQHJldHVybnMge2Jvb2xlYW59IGlzUG9zaXRpdmVJbnRlZ2VyXG4gKi9cblxuZXhwb3J0cy5jcmVhdGVDb21iaW5hdGlvbnMgPSBjcmVhdGVDb21iaW5hdGlvbnM7XG5cbmZ1bmN0aW9uIGlzUG9zaXRpdmVJbnRlZ2VyKG4pIHtcbiAgcmV0dXJuIG4uaXNJbnRlZ2VyKCkgJiYgbi5ndGUoMCk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNvbWJpbmF0aW9uc1dpdGhSZXAgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfcHJvZHVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9wcm9kdWN0XCIpO1xuXG52YXIgbmFtZSA9ICdjb21iaW5hdGlvbnNXaXRoUmVwJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlQ29tYmluYXRpb25zV2l0aFJlcCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIG51bWJlciBvZiB3YXlzIG9mIHBpY2tpbmcgYGtgIHVub3JkZXJlZCBvdXRjb21lcyBmcm9tIGBuYFxuICAgKiBwb3NzaWJpbGl0aWVzLCBhbGxvd2luZyBpbmRpdmlkdWFsIG91dGNvbWVzIHRvIGJlIHJlcGVhdGVkIG1vcmUgdGhhbiBvbmNlLlxuICAgKlxuICAgKiBDb21iaW5hdGlvbnNXaXRoUmVwIG9ubHkgdGFrZXMgaW50ZWdlciBhcmd1bWVudHMuXG4gICAqIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIG11c3QgYmUgZW5mb3JjZWQ6IGsgPD0gbiArIGsgLTEuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguY29tYmluYXRpb25zV2l0aFJlcChuLCBrKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5jb21iaW5hdGlvbnNXaXRoUmVwKDcsIDUpIC8vIHJldHVybnMgNDYyXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjb21iaW5hdGlvbnMsIHBlcm11dGF0aW9ucywgZmFjdG9yaWFsXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyfSBuICAgIFRvdGFsIG51bWJlciBvZiBvYmplY3RzIGluIHRoZSBzZXRcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXJ9IGsgICAgTnVtYmVyIG9mIG9iamVjdHMgaW4gdGhlIHN1YnNldFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXJ9ICAgICBOdW1iZXIgb2YgcG9zc2libGUgY29tYmluYXRpb25zIHdpdGggcmVwbGFjZW1lbnQuXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcihuLCBrKSB7XG4gICAgICBpZiAoISgwLCBfbnVtYmVyLmlzSW50ZWdlcikobikgfHwgbiA8IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUG9zaXRpdmUgaW50ZWdlciB2YWx1ZSBleHBlY3RlZCBpbiBmdW5jdGlvbiBjb21iaW5hdGlvbnNXaXRoUmVwJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShrKSB8fCBrIDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQb3NpdGl2ZSBpbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIGluIGZ1bmN0aW9uIGNvbWJpbmF0aW9uc1dpdGhSZXAnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG4gPCAxKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2sgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gbiArIGsgLSAxJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChrIDwgbiAtIDEpIHtcbiAgICAgICAgdmFyIF9wcm9kcmFuZ2UgPSAoMCwgX3Byb2R1Y3QucHJvZHVjdCkobiwgbiArIGsgLSAxKTtcblxuICAgICAgICByZXR1cm4gX3Byb2RyYW5nZSAvICgwLCBfcHJvZHVjdC5wcm9kdWN0KSgxLCBrKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHByb2RyYW5nZSA9ICgwLCBfcHJvZHVjdC5wcm9kdWN0KShrICsgMSwgbiArIGsgLSAxKTtcbiAgICAgIHJldHVybiBwcm9kcmFuZ2UgLyAoMCwgX3Byb2R1Y3QucHJvZHVjdCkoMSwgbiAtIDEpO1xuICAgIH0sXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQmlnTnVtYmVyQmlnTnVtYmVyKG4sIGspIHtcbiAgICAgIHZhciBCaWdOdW1iZXIgPSBuLmNvbnN0cnVjdG9yO1xuICAgICAgdmFyIHJlc3VsdCwgaTtcbiAgICAgIHZhciBvbmUgPSBuZXcgQmlnTnVtYmVyKDEpO1xuICAgICAgdmFyIG5NaW51c09uZSA9IG4ubWludXMob25lKTtcblxuICAgICAgaWYgKCFpc1Bvc2l0aXZlSW50ZWdlcihuKSB8fCAhaXNQb3NpdGl2ZUludGVnZXIoaykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUG9zaXRpdmUgaW50ZWdlciB2YWx1ZSBleHBlY3RlZCBpbiBmdW5jdGlvbiBjb21iaW5hdGlvbnNXaXRoUmVwJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChuLmx0KG9uZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignayBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBuICsgayAtIDEgaW4gZnVuY3Rpb24gY29tYmluYXRpb25zV2l0aFJlcCcpO1xuICAgICAgfVxuXG4gICAgICByZXN1bHQgPSBvbmU7XG5cbiAgICAgIGlmIChrLmx0KG5NaW51c09uZSkpIHtcbiAgICAgICAgZm9yIChpID0gb25lOyBpLmx0ZShuTWludXNPbmUpOyBpID0gaS5wbHVzKG9uZSkpIHtcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQudGltZXMoay5wbHVzKGkpKS5kaXZpZGVkQnkoaSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoaSA9IG9uZTsgaS5sdGUoayk7IGkgPSBpLnBsdXMob25lKSkge1xuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC50aW1lcyhuTWludXNPbmUucGx1cyhpKSkuZGl2aWRlZEJ5KGkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICB9KTtcbn0pO1xuLyoqXG4gKiBUZXN0IHdoZXRoZXIgQmlnTnVtYmVyIG4gaXMgYSBwb3NpdGl2ZSBpbnRlZ2VyXG4gKiBAcGFyYW0ge0JpZ051bWJlcn0gblxuICogQHJldHVybnMge2Jvb2xlYW59IGlzUG9zaXRpdmVJbnRlZ2VyXG4gKi9cblxuZXhwb3J0cy5jcmVhdGVDb21iaW5hdGlvbnNXaXRoUmVwID0gY3JlYXRlQ29tYmluYXRpb25zV2l0aFJlcDtcblxuZnVuY3Rpb24gaXNQb3NpdGl2ZUludGVnZXIobikge1xuICByZXR1cm4gbi5pc0ludGVnZXIoKSAmJiBuLmd0ZSgwKTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRmFjdG9yaWFsID0gdm9pZCAwO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2ZhY3RvcmlhbCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdnYW1tYSddO1xudmFyIGNyZWF0ZUZhY3RvcmlhbCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBnYW1tYSA9IF9yZWYuZ2FtbWE7XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIGZhY3RvcmlhbCBvZiBhIHZhbHVlXG4gICAqXG4gICAqIEZhY3RvcmlhbCBvbmx5IHN1cHBvcnRzIGFuIGludGVnZXIgdmFsdWUgYXMgYXJndW1lbnQuXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5mYWN0b3JpYWwobilcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguZmFjdG9yaWFsKDUpICAgIC8vIHJldHVybnMgMTIwXG4gICAqICAgIG1hdGguZmFjdG9yaWFsKDMpICAgIC8vIHJldHVybnMgNlxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgY29tYmluYXRpb25zLCBjb21iaW5hdGlvbnNXaXRoUmVwLCBnYW1tYSwgcGVybXV0YXRpb25zXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IG4gICBBbiBpbnRlZ2VyIG51bWJlclxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0gICAgVGhlIGZhY3RvcmlhbCBvZiBgbmBcbiAgICovXG4gIHZhciBmYWN0b3JpYWwgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIobikge1xuICAgICAgaWYgKG4gPCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVmFsdWUgbXVzdCBiZSBub24tbmVnYXRpdmUnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGdhbW1hKG4gKyAxKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKG4pIHtcbiAgICAgIGlmIChuLmlzTmVnYXRpdmUoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1ZhbHVlIG11c3QgYmUgbm9uLW5lZ2F0aXZlJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBnYW1tYShuLnBsdXMoMSkpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgobikge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKShuLCBmYWN0b3JpYWwpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBmYWN0b3JpYWw7XG59KTtcbmV4cG9ydHMuY3JlYXRlRmFjdG9yaWFsID0gY3JlYXRlRmFjdG9yaWFsOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVHYW1tYSA9IHZvaWQgMDtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2dhbW1hJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdtdWx0aXBseVNjYWxhcicsICdwb3cnLCAnQmlnTnVtYmVyJywgJ0NvbXBsZXgnXTtcbnZhciBjcmVhdGVHYW1tYSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIG11bHRpcGx5U2NhbGFyID0gX3JlZi5tdWx0aXBseVNjYWxhcixcbiAgICAgIHBvdyA9IF9yZWYucG93LFxuICAgICAgX0JpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyLFxuICAgICAgX0NvbXBsZXggPSBfcmVmLkNvbXBsZXg7XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIGdhbW1hIGZ1bmN0aW9uIG9mIGEgdmFsdWUgdXNpbmcgTGFuY3pvcyBhcHByb3hpbWF0aW9uIGZvclxuICAgKiBzbWFsbCB2YWx1ZXMsIGFuZCBhbiBleHRlbmRlZCBTdGlybGluZyBhcHByb3hpbWF0aW9uIGZvciBsYXJnZSB2YWx1ZXMuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5nYW1tYShuKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5nYW1tYSg1KSAgICAgICAvLyByZXR1cm5zIDI0XG4gICAqICAgIG1hdGguZ2FtbWEoLTAuNSkgICAgLy8gcmV0dXJucyAtMy41NDQ5MDc3MDE4MTEwMzM1XG4gICAqICAgIG1hdGguZ2FtbWEobWF0aC5pKSAgLy8gcmV0dXJucyAtMC4xNTQ5NDk4MjgzMDE4MDk3MyAtIDAuNDk4MDE1NjY4MTE4MzU1OTZpXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjb21iaW5hdGlvbnMsIGZhY3RvcmlhbCwgcGVybXV0YXRpb25zXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IG4gICBBIHJlYWwgb3IgY29tcGxleCBudW1iZXJcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9ICAgIFRoZSBnYW1tYSBvZiBgbmBcbiAgICovXG4gIHZhciBnYW1tYSA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IF9udW1iZXIuZ2FtbWFOdW1iZXIsXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleChuKSB7XG4gICAgICBpZiAobi5pbSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZ2FtbWEobi5yZSk7XG4gICAgICB9XG5cbiAgICAgIG4gPSBuZXcgX0NvbXBsZXgobi5yZSAtIDEsIG4uaW0pO1xuICAgICAgdmFyIHggPSBuZXcgX0NvbXBsZXgoX251bWJlci5nYW1tYVBbMF0sIDApO1xuXG4gICAgICBmb3IgKHZhciBpID0gMTsgaSA8IF9udW1iZXIuZ2FtbWFQLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciByZWFsID0gbi5yZSArIGk7IC8vIHggKz0gcFtpXS8obitpKVxuXG4gICAgICAgIHZhciBkZW4gPSByZWFsICogcmVhbCArIG4uaW0gKiBuLmltO1xuXG4gICAgICAgIGlmIChkZW4gIT09IDApIHtcbiAgICAgICAgICB4LnJlICs9IF9udW1iZXIuZ2FtbWFQW2ldICogcmVhbCAvIGRlbjtcbiAgICAgICAgICB4LmltICs9IC0oX251bWJlci5nYW1tYVBbaV0gKiBuLmltKSAvIGRlbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB4LnJlID0gX251bWJlci5nYW1tYVBbaV0gPCAwID8gLUluZmluaXR5IDogSW5maW5pdHk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHQgPSBuZXcgX0NvbXBsZXgobi5yZSArIF9udW1iZXIuZ2FtbWFHICsgMC41LCBuLmltKTtcbiAgICAgIHZhciB0d29QaVNxcnQgPSBNYXRoLnNxcnQoMiAqIE1hdGguUEkpO1xuICAgICAgbi5yZSArPSAwLjU7XG4gICAgICB2YXIgcmVzdWx0ID0gcG93KHQsIG4pO1xuXG4gICAgICBpZiAocmVzdWx0LmltID09PSAwKSB7XG4gICAgICAgIC8vIHNxcnQoMipQSSkqcmVzdWx0XG4gICAgICAgIHJlc3VsdC5yZSAqPSB0d29QaVNxcnQ7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdC5yZSA9PT0gMCkge1xuICAgICAgICByZXN1bHQuaW0gKj0gdHdvUGlTcXJ0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0LnJlICo9IHR3b1BpU3FydDtcbiAgICAgICAgcmVzdWx0LmltICo9IHR3b1BpU3FydDtcbiAgICAgIH1cblxuICAgICAgdmFyIHIgPSBNYXRoLmV4cCgtdC5yZSk7IC8vIGV4cCgtdClcblxuICAgICAgdC5yZSA9IHIgKiBNYXRoLmNvcygtdC5pbSk7XG4gICAgICB0LmltID0gciAqIE1hdGguc2luKC10LmltKTtcbiAgICAgIHJldHVybiBtdWx0aXBseVNjYWxhcihtdWx0aXBseVNjYWxhcihyZXN1bHQsIHQpLCB4KTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKG4pIHtcbiAgICAgIGlmIChuLmlzSW50ZWdlcigpKSB7XG4gICAgICAgIHJldHVybiBuLmlzTmVnYXRpdmUoKSB8fCBuLmlzWmVybygpID8gbmV3IF9CaWdOdW1iZXIoSW5maW5pdHkpIDogYmlnRmFjdG9yaWFsKG4ubWludXMoMSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIW4uaXNGaW5pdGUoKSkge1xuICAgICAgICByZXR1cm4gbmV3IF9CaWdOdW1iZXIobi5pc05lZ2F0aXZlKCkgPyBOYU4gOiBJbmZpbml0eSk7XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcignSW50ZWdlciBCaWdOdW1iZXIgZXhwZWN0ZWQnKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KG4pIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkobiwgZ2FtbWEpO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgZmFjdG9yaWFsIGZvciBhIEJpZ051bWJlclxuICAgKiBAcGFyYW0ge0JpZ051bWJlcn0gblxuICAgKiBAcmV0dXJucyB7QmlnTnVtYmVyfSBSZXR1cm5zIHRoZSBmYWN0b3JpYWwgb2YgblxuICAgKi9cblxuICBmdW5jdGlvbiBiaWdGYWN0b3JpYWwobikge1xuICAgIGlmIChuIDwgOCkge1xuICAgICAgcmV0dXJuIG5ldyBfQmlnTnVtYmVyKFsxLCAxLCAyLCA2LCAyNCwgMTIwLCA3MjAsIDUwNDBdW25dKTtcbiAgICB9XG5cbiAgICB2YXIgcHJlY2lzaW9uID0gY29uZmlnLnByZWNpc2lvbiArIChNYXRoLmxvZyhuLnRvTnVtYmVyKCkpIHwgMCk7XG5cbiAgICB2YXIgQmlnID0gX0JpZ051bWJlci5jbG9uZSh7XG4gICAgICBwcmVjaXNpb246IHByZWNpc2lvblxuICAgIH0pO1xuXG4gICAgaWYgKG4gJSAyID09PSAxKSB7XG4gICAgICByZXR1cm4gbi50aW1lcyhiaWdGYWN0b3JpYWwobmV3IF9CaWdOdW1iZXIobiAtIDEpKSk7XG4gICAgfVxuXG4gICAgdmFyIHAgPSBuO1xuICAgIHZhciBwcm9kID0gbmV3IEJpZyhuKTtcbiAgICB2YXIgc3VtID0gbi50b051bWJlcigpO1xuXG4gICAgd2hpbGUgKHAgPiAyKSB7XG4gICAgICBwIC09IDI7XG4gICAgICBzdW0gKz0gcDtcbiAgICAgIHByb2QgPSBwcm9kLnRpbWVzKHN1bSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBfQmlnTnVtYmVyKHByb2QudG9QcmVjaXNpb24oX0JpZ051bWJlci5wcmVjaXNpb24pKTtcbiAgfVxuXG4gIHJldHVybiBnYW1tYTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVHYW1tYSA9IGNyZWF0ZUdhbW1hOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVLbGRpdmVyZ2VuY2UgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdrbGRpdmVyZ2VuY2UnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2RpdmlkZScsICdzdW0nLCAnbXVsdGlwbHknLCAnZG90RGl2aWRlJywgJ2xvZycsICdpc051bWVyaWMnXTtcbnZhciBjcmVhdGVLbGRpdmVyZ2VuY2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBkaXZpZGUgPSBfcmVmLmRpdmlkZSxcbiAgICAgIHN1bSA9IF9yZWYuc3VtLFxuICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5LFxuICAgICAgZG90RGl2aWRlID0gX3JlZi5kb3REaXZpZGUsXG4gICAgICBsb2cgPSBfcmVmLmxvZyxcbiAgICAgIGlzTnVtZXJpYyA9IF9yZWYuaXNOdW1lcmljO1xuXG4gIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgS3VsbGJhY2stTGVpYmxlciAoS0wpIGRpdmVyZ2VuY2UgIGJldHdlZW4gdHdvIGRpc3RyaWJ1dGlvbnNcbiAgICAgKlxuICAgICAqIFN5bnRheDpcbiAgICAgKlxuICAgICAqICAgICBtYXRoLmtsZGl2ZXJnZW5jZSh4LCB5KVxuICAgICAqXG4gICAgICogRXhhbXBsZXM6XG4gICAgICpcbiAgICAgKiAgICAgbWF0aC5rbGRpdmVyZ2VuY2UoWzAuNywwLjUsMC40XSwgWzAuMiwwLjksMC41XSkgICAvL3JldHVybnMgMC4yNDM3NjY5ODc3MzEyMTE1M1xuICAgICAqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtBcnJheSB8IE1hdHJpeH0gcSAgICBGaXJzdCB2ZWN0b3JcbiAgICAgKiBAcGFyYW0gIHtBcnJheSB8IE1hdHJpeH0gcCAgICBTZWNvbmQgdmVjdG9yXG4gICAgICogQHJldHVybiB7bnVtYmVyfSAgICAgICAgICAgICAgUmV0dXJucyBkaXN0YW5jZSBiZXR3ZWVuIHEgYW5kIHBcbiAgICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheShxLCBwKSB7XG4gICAgICByZXR1cm4gX2tsZGl2KG1hdHJpeChxKSwgbWF0cml4KHApKTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkocSwgcCkge1xuICAgICAgcmV0dXJuIF9rbGRpdihxLCBtYXRyaXgocCkpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeChxLCBwKSB7XG4gICAgICByZXR1cm4gX2tsZGl2KG1hdHJpeChxKSwgcCk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBNYXRyaXgnOiBmdW5jdGlvbiBNYXRyaXhNYXRyaXgocSwgcCkge1xuICAgICAgcmV0dXJuIF9rbGRpdihxLCBwKTtcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIF9rbGRpdihxLCBwKSB7XG4gICAgdmFyIHBsZW5ndGggPSBwLnNpemUoKS5sZW5ndGg7XG4gICAgdmFyIHFsZW5ndGggPSBxLnNpemUoKS5sZW5ndGg7XG5cbiAgICBpZiAocGxlbmd0aCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZmlyc3Qgb2JqZWN0IG11c3QgYmUgb25lIGRpbWVuc2lvbmFsJyk7XG4gICAgfVxuXG4gICAgaWYgKHFsZW5ndGggPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NlY29uZCBvYmplY3QgbXVzdCBiZSBvbmUgZGltZW5zaW9uYWwnKTtcbiAgICB9XG5cbiAgICBpZiAocGxlbmd0aCAhPT0gcWxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdMZW5ndGggb2YgdHdvIHZlY3RvcnMgbXVzdCBiZSBlcXVhbCcpO1xuICAgIH0gLy8gQmVmb3JlIGNhbGN1bGF0aW9uLCBhcHBseSBub3JtYWxpemF0aW9uXG5cblxuICAgIHZhciBzdW1xID0gc3VtKHEpO1xuXG4gICAgaWYgKHN1bXEgPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU3VtIG9mIGVsZW1lbnRzIGluIGZpcnN0IG9iamVjdCBtdXN0IGJlIG5vbiB6ZXJvJyk7XG4gICAgfVxuXG4gICAgdmFyIHN1bXAgPSBzdW0ocCk7XG5cbiAgICBpZiAoc3VtcCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdW0gb2YgZWxlbWVudHMgaW4gc2Vjb25kIG9iamVjdCBtdXN0IGJlIG5vbiB6ZXJvJyk7XG4gICAgfVxuXG4gICAgdmFyIHFub3JtID0gZGl2aWRlKHEsIHN1bShxKSk7XG4gICAgdmFyIHBub3JtID0gZGl2aWRlKHAsIHN1bShwKSk7XG4gICAgdmFyIHJlc3VsdCA9IHN1bShtdWx0aXBseShxbm9ybSwgbG9nKGRvdERpdmlkZShxbm9ybSwgcG5vcm0pKSkpO1xuXG4gICAgaWYgKGlzTnVtZXJpYyhyZXN1bHQpKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gTnVtYmVyLk5hTjtcbiAgICB9XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVLbGRpdmVyZ2VuY2UgPSBjcmVhdGVLbGRpdmVyZ2VuY2U7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU11bHRpbm9taWFsID0gdm9pZCAwO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ211bHRpbm9taWFsJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FkZCcsICdkaXZpZGUnLCAnbXVsdGlwbHknLCAnZmFjdG9yaWFsJywgJ2lzSW50ZWdlcicsICdpc1Bvc2l0aXZlJ107XG52YXIgY3JlYXRlTXVsdGlub21pYWwgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgYWRkID0gX3JlZi5hZGQsXG4gICAgICBkaXZpZGUgPSBfcmVmLmRpdmlkZSxcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSxcbiAgICAgIGZhY3RvcmlhbCA9IF9yZWYuZmFjdG9yaWFsLFxuICAgICAgaXNJbnRlZ2VyID0gX3JlZi5pc0ludGVnZXIsXG4gICAgICBpc1Bvc2l0aXZlID0gX3JlZi5pc1Bvc2l0aXZlO1xuXG4gIC8qKlxuICAgKiBNdWx0aW5vbWlhbCBDb2VmZmljaWVudHMgY29tcHV0ZSB0aGUgbnVtYmVyIG9mIHdheXMgb2YgcGlja2luZyBhMSwgYTIsIC4uLiwgYWkgdW5vcmRlcmVkIG91dGNvbWVzIGZyb20gYG5gIHBvc3NpYmlsaXRpZXMuXG4gICAqXG4gICAqIG11bHRpbm9taWFsIHRha2VzIG9uZSBhcnJheSBvZiBpbnRlZ2VycyBhcyBhbiBhcmd1bWVudC5cbiAgICogVGhlIGZvbGxvd2luZyBjb25kaXRpb24gbXVzdCBiZSBlbmZvcmNlZDogZXZlcnkgYWkgPD0gMFxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLm11bHRpbm9taWFsKGEpIC8vIGEgaXMgYW4gYXJyYXkgdHlwZVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5tdWx0aW5vbWlhbChbMSwyLDFdKSAvLyByZXR1cm5zIDEyXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjb21iaW5hdGlvbnMsIGZhY3RvcmlhbFxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcltdIHwgQmlnTnVtYmVyW119IGEgICAgSW50ZWdlciBudW1iZXJzIG9mIG9iamVjdHMgaW4gdGhlIHN1YnNldFxuICAgKiBAcmV0dXJuIHtOdW1iZXIgfCBCaWdOdW1iZXJ9ICAgICAgICAgTXVsdGlub21pYWwgY29lZmZpY2llbnQuXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KGEpIHtcbiAgICAgIHZhciBzdW0gPSAwO1xuICAgICAgdmFyIGRlbm9tID0gMTtcbiAgICAgICgwLCBfY29sbGVjdGlvbi5kZWVwRm9yRWFjaCkoYSwgZnVuY3Rpb24gKGFpKSB7XG4gICAgICAgIGlmICghaXNJbnRlZ2VyKGFpKSB8fCAhaXNQb3NpdGl2ZShhaSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQb3NpdGl2ZSBpbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIGluIGZ1bmN0aW9uIG11bHRpbm9taWFsJyk7XG4gICAgICAgIH1cblxuICAgICAgICBzdW0gPSBhZGQoc3VtLCBhaSk7XG4gICAgICAgIGRlbm9tID0gbXVsdGlwbHkoZGVub20sIGZhY3RvcmlhbChhaSkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gZGl2aWRlKGZhY3RvcmlhbChzdW0pLCBkZW5vbSk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVNdWx0aW5vbWlhbCA9IGNyZWF0ZU11bHRpbm9taWFsOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVQZXJtdXRhdGlvbnMgPSB2b2lkIDA7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9wcm9kdWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3Byb2R1Y3RcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdwZXJtdXRhdGlvbnMnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnZmFjdG9yaWFsJ107XG52YXIgY3JlYXRlUGVybXV0YXRpb25zID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGZhY3RvcmlhbCA9IF9yZWYuZmFjdG9yaWFsO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBudW1iZXIgb2Ygd2F5cyBvZiBvYnRhaW5pbmcgYW4gb3JkZXJlZCBzdWJzZXQgb2YgYGtgIGVsZW1lbnRzXG4gICAqIGZyb20gYSBzZXQgb2YgYG5gIGVsZW1lbnRzLlxuICAgKlxuICAgKiBQZXJtdXRhdGlvbnMgb25seSB0YWtlcyBpbnRlZ2VyIGFyZ3VtZW50cy5cbiAgICogVGhlIGZvbGxvd2luZyBjb25kaXRpb24gbXVzdCBiZSBlbmZvcmNlZDogayA8PSBuLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLnBlcm11dGF0aW9ucyhuKVxuICAgKiAgICAgbWF0aC5wZXJtdXRhdGlvbnMobiwgaylcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgucGVybXV0YXRpb25zKDUpICAgICAvLyAxMjBcbiAgICogICAgbWF0aC5wZXJtdXRhdGlvbnMoNSwgMykgIC8vIDYwXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjb21iaW5hdGlvbnMsIGNvbWJpbmF0aW9uc1dpdGhSZXAsIGZhY3RvcmlhbFxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlcn0gbiAgIFRoZSBudW1iZXIgb2Ygb2JqZWN0cyBpbiB0b3RhbFxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlcn0gW2tdIFRoZSBudW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgc3Vic2V0XG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlcn0gICAgVGhlIG51bWJlciBvZiBwZXJtdXRhdGlvbnNcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciB8IEJpZ051bWJlcic6IGZhY3RvcmlhbCxcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIobiwgaykge1xuICAgICAgaWYgKCEoMCwgX251bWJlci5pc0ludGVnZXIpKG4pIHx8IG4gPCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Bvc2l0aXZlIGludGVnZXIgdmFsdWUgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gcGVybXV0YXRpb25zJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShrKSB8fCBrIDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQb3NpdGl2ZSBpbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIGluIGZ1bmN0aW9uIHBlcm11dGF0aW9ucycpO1xuICAgICAgfVxuXG4gICAgICBpZiAoayA+IG4pIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc2Vjb25kIGFyZ3VtZW50IGsgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gZmlyc3QgYXJndW1lbnQgbicpO1xuICAgICAgfSAvLyBQZXJtdXRlIG4gb2JqZWN0cywgayBhdCBhIHRpbWVcblxuXG4gICAgICByZXR1cm4gKDAsIF9wcm9kdWN0LnByb2R1Y3QpKG4gLSBrICsgMSwgbik7XG4gICAgfSxcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIobiwgaykge1xuICAgICAgdmFyIHJlc3VsdCwgaTtcblxuICAgICAgaWYgKCFpc1Bvc2l0aXZlSW50ZWdlcihuKSB8fCAhaXNQb3NpdGl2ZUludGVnZXIoaykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUG9zaXRpdmUgaW50ZWdlciB2YWx1ZSBleHBlY3RlZCBpbiBmdW5jdGlvbiBwZXJtdXRhdGlvbnMnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGsuZ3QobikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc2Vjb25kIGFyZ3VtZW50IGsgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gZmlyc3QgYXJndW1lbnQgbicpO1xuICAgICAgfVxuXG4gICAgICB2YXIgb25lID0gbi5tdWwoMCkuYWRkKDEpO1xuICAgICAgcmVzdWx0ID0gb25lO1xuXG4gICAgICBmb3IgKGkgPSBuLm1pbnVzKGspLnBsdXMoMSk7IGkubHRlKG4pOyBpID0gaS5wbHVzKDEpKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC50aW1lcyhpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IC8vIFRPRE86IGltcGxlbWVudCBzdXBwb3J0IGZvciBjb2xsZWN0aW9uIGluIHBlcm11dGF0aW9uc1xuXG4gIH0pO1xufSk7XG4vKipcbiAqIFRlc3Qgd2hldGhlciBCaWdOdW1iZXIgbiBpcyBhIHBvc2l0aXZlIGludGVnZXJcbiAqIEBwYXJhbSB7QmlnTnVtYmVyfSBuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gaXNQb3NpdGl2ZUludGVnZXJcbiAqL1xuXG5leHBvcnRzLmNyZWF0ZVBlcm11dGF0aW9ucyA9IGNyZWF0ZVBlcm11dGF0aW9ucztcblxuZnVuY3Rpb24gaXNQb3NpdGl2ZUludGVnZXIobikge1xuICByZXR1cm4gbi5pc0ludGVnZXIoKSAmJiBuLmd0ZSgwKTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUGlja1JhbmRvbSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfc2VlZGVkUk5HID0gcmVxdWlyZShcIi4vdXRpbC9zZWVkZWRSTkdcIik7XG5cbnZhciBuYW1lID0gJ3BpY2tSYW5kb20nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJz9vbiddO1xudmFyIGNyZWF0ZVBpY2tSYW5kb20gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBvbiA9IF9yZWYub247XG4gIC8vIHNlZWRlZCBwc2V1ZG8gcmFuZG9tIG51bWJlciBnZW5lcmF0b3JcbiAgdmFyIHJuZyA9ICgwLCBfc2VlZGVkUk5HLmNyZWF0ZVJuZykoY29uZmlnLnJhbmRvbVNlZWQpO1xuXG4gIGlmIChvbikge1xuICAgIG9uKCdjb25maWcnLCBmdW5jdGlvbiAoY3VyciwgcHJldikge1xuICAgICAgaWYgKGN1cnIucmFuZG9tU2VlZCAhPT0gcHJldi5yYW5kb21TZWVkKSB7XG4gICAgICAgIHJuZyA9ICgwLCBfc2VlZGVkUk5HLmNyZWF0ZVJuZykoY3Vyci5yYW5kb21TZWVkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogUmFuZG9tIHBpY2sgb25lIG9yIG1vcmUgdmFsdWVzIGZyb20gYSBvbmUgZGltZW5zaW9uYWwgYXJyYXkuXG4gICAqIEFycmF5IGVsZW1lbnRzIGFyZSBwaWNrZWQgdXNpbmcgYSByYW5kb20gZnVuY3Rpb24gd2l0aCB1bmlmb3JtIG9yIHdlaWdodGVkIGRpc3RyaWJ1dGlvbi5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5waWNrUmFuZG9tKGFycmF5KVxuICAgKiAgICAgbWF0aC5waWNrUmFuZG9tKGFycmF5LCBudW1iZXIpXG4gICAqICAgICBtYXRoLnBpY2tSYW5kb20oYXJyYXksIHdlaWdodHMpXG4gICAqICAgICBtYXRoLnBpY2tSYW5kb20oYXJyYXksIG51bWJlciwgd2VpZ2h0cylcbiAgICogICAgIG1hdGgucGlja1JhbmRvbShhcnJheSwgd2VpZ2h0cywgbnVtYmVyKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGgucGlja1JhbmRvbShbMywgNiwgMTIsIDJdKSAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgb25lIG9mIHRoZSB2YWx1ZXMgaW4gdGhlIGFycmF5XG4gICAqICAgICBtYXRoLnBpY2tSYW5kb20oWzMsIDYsIDEyLCAyXSwgMikgICAgICAgICAgICAgICAvLyByZXR1cm5zIGFuIGFycmF5IG9mIHR3byBvZiB0aGUgdmFsdWVzIGluIHRoZSBhcnJheVxuICAgKiAgICAgbWF0aC5waWNrUmFuZG9tKFszLCA2LCAxMiwgMl0sIFsxLCAzLCAyLCAxXSkgICAgLy8gcmV0dXJucyBvbmUgb2YgdGhlIHZhbHVlcyBpbiB0aGUgYXJyYXkgd2l0aCB3ZWlnaHRlZCBkaXN0cmlidXRpb25cbiAgICogICAgIG1hdGgucGlja1JhbmRvbShbMywgNiwgMTIsIDJdLCAyLCBbMSwgMywgMiwgMV0pIC8vIHJldHVybnMgYW4gYXJyYXkgb2YgdHdvIG9mIHRoZSB2YWx1ZXMgaW4gdGhlIGFycmF5IHdpdGggd2VpZ2h0ZWQgZGlzdHJpYnV0aW9uXG4gICAqICAgICBtYXRoLnBpY2tSYW5kb20oWzMsIDYsIDEyLCAyXSwgWzEsIDMsIDIsIDFdLCAyKSAvLyByZXR1cm5zIGFuIGFycmF5IG9mIHR3byBvZiB0aGUgdmFsdWVzIGluIHRoZSBhcnJheSB3aXRoIHdlaWdodGVkIGRpc3RyaWJ1dGlvblxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgIHJhbmRvbSwgcmFuZG9tSW50XG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IGFycmF5ICAgICBBIG9uZSBkaW1lbnNpb25hbCBhcnJheVxuICAgKiBAcGFyYW0ge0ludH0gbnVtYmVyICAgICAgICAgICAgICAgQW4gaW50IG9yIGZsb2F0XG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IHdlaWdodHMgICBBbiBhcnJheSBvZiBpbnRzIG9yIGZsb2F0c1xuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBBcnJheX0gICAgICAgICAgUmV0dXJucyBhIHNpbmdsZSByYW5kb20gdmFsdWUgZnJvbSBhcnJheSB3aGVuIG51bWJlciBpcyAxIG9yIHVuZGVmaW5lZC5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJldHVybnMgYW4gYXJyYXkgd2l0aCB0aGUgY29uZmlndXJlZCBudW1iZXIgb2YgZWxlbWVudHMgd2hlbiBudW1iZXIgaXMgPiAxLlxuICAgKi9cblxuXG4gIHJldHVybiB0eXBlZCh7XG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgocG9zc2libGVzKSB7XG4gICAgICByZXR1cm4gX3BpY2tSYW5kb20ocG9zc2libGVzKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhOdW1iZXIocG9zc2libGVzLCBudW1iZXIpIHtcbiAgICAgIHJldHVybiBfcGlja1JhbmRvbShwb3NzaWJsZXMsIG51bWJlciwgdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBBcnJheU1hdHJpeEFycmF5KHBvc3NpYmxlcywgd2VpZ2h0cykge1xuICAgICAgcmV0dXJuIF9waWNrUmFuZG9tKHBvc3NpYmxlcywgdW5kZWZpbmVkLCB3ZWlnaHRzKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCwgQXJyYXkgfCBNYXRyaXgsIG51bWJlcic6IGZ1bmN0aW9uIEFycmF5TWF0cml4QXJyYXlNYXRyaXhOdW1iZXIocG9zc2libGVzLCB3ZWlnaHRzLCBudW1iZXIpIHtcbiAgICAgIHJldHVybiBfcGlja1JhbmRvbShwb3NzaWJsZXMsIG51bWJlciwgd2VpZ2h0cyk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgsIG51bWJlciwgQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeE51bWJlckFycmF5TWF0cml4KHBvc3NpYmxlcywgbnVtYmVyLCB3ZWlnaHRzKSB7XG4gICAgICByZXR1cm4gX3BpY2tSYW5kb20ocG9zc2libGVzLCBudW1iZXIsIHdlaWdodHMpO1xuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gX3BpY2tSYW5kb20ocG9zc2libGVzLCBudW1iZXIsIHdlaWdodHMpIHtcbiAgICB2YXIgc2luZ2xlID0gdHlwZW9mIG51bWJlciA9PT0gJ3VuZGVmaW5lZCc7XG5cbiAgICBpZiAoc2luZ2xlKSB7XG4gICAgICBudW1iZXIgPSAxO1xuICAgIH1cblxuICAgIHBvc3NpYmxlcyA9IHBvc3NpYmxlcy52YWx1ZU9mKCk7IC8vIGdldCBBcnJheVxuXG4gICAgaWYgKHdlaWdodHMpIHtcbiAgICAgIHdlaWdodHMgPSB3ZWlnaHRzLnZhbHVlT2YoKTsgLy8gZ2V0IEFycmF5XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfYXJyYXkuYXJyYXlTaXplKShwb3NzaWJsZXMpLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT25seSBvbmUgZGltZW5zaW9uYWwgdmVjdG9ycyBzdXBwb3J0ZWQnKTtcbiAgICB9XG5cbiAgICB2YXIgdG90YWxXZWlnaHRzID0gMDtcblxuICAgIGlmICh0eXBlb2Ygd2VpZ2h0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmICh3ZWlnaHRzLmxlbmd0aCAhPT0gcG9zc2libGVzLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dlaWdodHMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aCBhcyBwb3NzaWJsZXMnKTtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHdlaWdodHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgaWYgKCEoMCwgX2lzLmlzTnVtYmVyKSh3ZWlnaHRzW2ldKSB8fCB3ZWlnaHRzW2ldIDwgMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignV2VpZ2h0cyBtdXN0IGJlIGFuIGFycmF5IG9mIHBvc2l0aXZlIG51bWJlcnMnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRvdGFsV2VpZ2h0cyArPSB3ZWlnaHRzW2ldO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBsZW5ndGggPSBwb3NzaWJsZXMubGVuZ3RoO1xuXG4gICAgaWYgKGxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH0gZWxzZSBpZiAobnVtYmVyID49IGxlbmd0aCkge1xuICAgICAgcmV0dXJuIG51bWJlciA+IDEgPyBwb3NzaWJsZXMgOiBwb3NzaWJsZXNbMF07XG4gICAgfVxuXG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBwaWNrO1xuXG4gICAgd2hpbGUgKHJlc3VsdC5sZW5ndGggPCBudW1iZXIpIHtcbiAgICAgIGlmICh0eXBlb2Ygd2VpZ2h0cyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcGljayA9IHBvc3NpYmxlc1tNYXRoLmZsb29yKHJuZygpICogbGVuZ3RoKV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmFuZEtleSA9IHJuZygpICogdG90YWxXZWlnaHRzO1xuXG4gICAgICAgIGZvciAodmFyIF9pID0gMCwgX2xlbiA9IHBvc3NpYmxlcy5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykge1xuICAgICAgICAgIHJhbmRLZXkgLT0gd2VpZ2h0c1tfaV07XG5cbiAgICAgICAgICBpZiAocmFuZEtleSA8IDApIHtcbiAgICAgICAgICAgIHBpY2sgPSBwb3NzaWJsZXNbX2ldO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXN1bHQuaW5kZXhPZihwaWNrKSA9PT0gLTEpIHtcbiAgICAgICAgcmVzdWx0LnB1c2gocGljayk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNpbmdsZSA/IHJlc3VsdFswXSA6IHJlc3VsdDsgLy8gVE9ETzogcmV0dXJuIG1hdHJpeCB3aGVuIGlucHV0IHdhcyBhIG1hdHJpeFxuICAgIC8vIFRPRE86IGFkZCBzdXBwb3J0IGZvciBtdWx0aSBkaW1lbnNpb25hbCBtYXRyaWNlc1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlUGlja1JhbmRvbSA9IGNyZWF0ZVBpY2tSYW5kb207IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJhbmRvbU51bWJlciA9IGV4cG9ydHMuY3JlYXRlUmFuZG9tID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9zZWVkZWRSTkcgPSByZXF1aXJlKFwiLi91dGlsL3NlZWRlZFJOR1wiKTtcblxudmFyIF9yYW5kb21NYXRyaXgyID0gcmVxdWlyZShcIi4vdXRpbC9yYW5kb21NYXRyaXhcIik7XG5cbnZhciBuYW1lID0gJ3JhbmRvbSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnP29uJ107XG52YXIgY3JlYXRlUmFuZG9tID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgb24gPSBfcmVmLm9uO1xuICAvLyBzZWVkZWQgcHNldWRvIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yXG4gIHZhciBybmcgPSAoMCwgX3NlZWRlZFJORy5jcmVhdGVSbmcpKGNvbmZpZy5yYW5kb21TZWVkKTtcblxuICBpZiAob24pIHtcbiAgICBvbignY29uZmlnJywgZnVuY3Rpb24gKGN1cnIsIHByZXYpIHtcbiAgICAgIGlmIChjdXJyLnJhbmRvbVNlZWQgIT09IHByZXYucmFuZG9tU2VlZCkge1xuICAgICAgICBybmcgPSAoMCwgX3NlZWRlZFJORy5jcmVhdGVSbmcpKGN1cnIucmFuZG9tU2VlZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybiBhIHJhbmRvbSBudW1iZXIgbGFyZ2VyIG9yIGVxdWFsIHRvIGBtaW5gIGFuZCBzbWFsbGVyIHRoYW4gYG1heGBcbiAgICogdXNpbmcgYSB1bmlmb3JtIGRpc3RyaWJ1dGlvbi5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5yYW5kb20oKSAgICAgICAgICAgICAgICAvLyBnZW5lcmF0ZSBhIHJhbmRvbSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxXG4gICAqICAgICBtYXRoLnJhbmRvbShtYXgpICAgICAgICAgICAgIC8vIGdlbmVyYXRlIGEgcmFuZG9tIG51bWJlciBiZXR3ZWVuIDAgYW5kIG1heFxuICAgKiAgICAgbWF0aC5yYW5kb20obWluLCBtYXgpICAgICAgICAvLyBnZW5lcmF0ZSBhIHJhbmRvbSBudW1iZXIgYmV0d2VlbiBtaW4gYW5kIG1heFxuICAgKiAgICAgbWF0aC5yYW5kb20oc2l6ZSkgICAgICAgICAgICAvLyBnZW5lcmF0ZSBhIG1hdHJpeCB3aXRoIHJhbmRvbSBudW1iZXJzIGJldHdlZW4gMCBhbmQgMVxuICAgKiAgICAgbWF0aC5yYW5kb20oc2l6ZSwgbWF4KSAgICAgICAvLyBnZW5lcmF0ZSBhIG1hdHJpeCB3aXRoIHJhbmRvbSBudW1iZXJzIGJldHdlZW4gMCBhbmQgbWF4XG4gICAqICAgICBtYXRoLnJhbmRvbShzaXplLCBtaW4sIG1heCkgIC8vIGdlbmVyYXRlIGEgbWF0cml4IHdpdGggcmFuZG9tIG51bWJlcnMgYmV0d2VlbiBtaW4gYW5kIG1heFxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGgucmFuZG9tKCkgICAgICAgLy8gcmV0dXJucyBhIHJhbmRvbSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxXG4gICAqICAgICBtYXRoLnJhbmRvbSgxMDApICAgIC8vIHJldHVybnMgYSByYW5kb20gbnVtYmVyIGJldHdlZW4gMCBhbmQgMTAwXG4gICAqICAgICBtYXRoLnJhbmRvbSgzMCwgNDApIC8vIHJldHVybnMgYSByYW5kb20gbnVtYmVyIGJldHdlZW4gMzAgYW5kIDQwXG4gICAqICAgICBtYXRoLnJhbmRvbShbMiwgM10pIC8vIHJldHVybnMgYSAyeDMgbWF0cml4IHdpdGggcmFuZG9tIG51bWJlcnMgYmV0d2VlbiAwIGFuZCAxXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgcmFuZG9tSW50LCBwaWNrUmFuZG9tXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IFtzaXplXSBJZiBwcm92aWRlZCwgYW4gYXJyYXkgb3IgbWF0cml4IHdpdGggZ2l2ZW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgYW5kIGZpbGxlZCB3aXRoIHJhbmRvbSB2YWx1ZXMgaXMgcmV0dXJuZWRcbiAgICogQHBhcmFtIHtudW1iZXJ9IFttaW5dICBNaW5pbXVtIGJvdW5kYXJ5IGZvciB0aGUgcmFuZG9tIHZhbHVlLCBpbmNsdWRlZFxuICAgKiBAcGFyYW0ge251bWJlcn0gW21heF0gIE1heGltdW0gYm91bmRhcnkgZm9yIHRoZSByYW5kb20gdmFsdWUsIGV4Y2x1ZGVkXG4gICAqIEByZXR1cm4ge251bWJlciB8IEFycmF5IHwgTWF0cml4fSBBIHJhbmRvbSBudW1iZXJcbiAgICovXG5cblxuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICcnOiBmdW5jdGlvbiBfKCkge1xuICAgICAgcmV0dXJuIF9yYW5kb20oMCwgMSk7XG4gICAgfSxcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcihtYXgpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tKDAsIG1heCk7XG4gICAgfSxcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIobWluLCBtYXgpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tKG1pbiwgbWF4KTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHNpemUpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tTWF0cml4KHNpemUsIDAsIDEpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4LCBudW1iZXInOiBmdW5jdGlvbiBBcnJheU1hdHJpeE51bWJlcihzaXplLCBtYXgpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tTWF0cml4KHNpemUsIDAsIG1heCk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgsIG51bWJlciwgbnVtYmVyJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhOdW1iZXJOdW1iZXIoc2l6ZSwgbWluLCBtYXgpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tTWF0cml4KHNpemUsIG1pbiwgbWF4KTtcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIF9yYW5kb21NYXRyaXgoc2l6ZSwgbWluLCBtYXgpIHtcbiAgICB2YXIgcmVzID0gKDAsIF9yYW5kb21NYXRyaXgyLnJhbmRvbU1hdHJpeCkoc2l6ZS52YWx1ZU9mKCksIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tKG1pbiwgbWF4KTtcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIF9pcy5pc01hdHJpeCkoc2l6ZSkgPyBzaXplLmNyZWF0ZShyZXMpIDogcmVzO1xuICB9XG5cbiAgZnVuY3Rpb24gX3JhbmRvbShtaW4sIG1heCkge1xuICAgIHJldHVybiBtaW4gKyBybmcoKSAqIChtYXggLSBtaW4pO1xuICB9XG59KTsgLy8gbnVtYmVyIG9ubHkgaW1wbGVtZW50YXRpb24gb2YgcmFuZG9tLCBubyBtYXRyaXggc3VwcG9ydFxuLy8gVE9ETzogdGhlcmUgaXMgcXVpdGUgc29tZSBkdXBsaWNhdGUgY29kZSBpbiBib3RoIGNyZWF0ZVJhbmRvbSBhbmQgY3JlYXRlUmFuZG9tTnVtYmVyLCBjYW4gd2UgaW1wcm92ZSB0aGF0P1xuXG5leHBvcnRzLmNyZWF0ZVJhbmRvbSA9IGNyZWF0ZVJhbmRvbTtcbnZhciBjcmVhdGVSYW5kb21OdW1iZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgWyd0eXBlZCcsICdjb25maWcnLCAnP29uJ10sIGZ1bmN0aW9uIChfcmVmMikge1xuICB2YXIgdHlwZWQgPSBfcmVmMi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYyLmNvbmZpZyxcbiAgICAgIG9uID0gX3JlZjIub24sXG4gICAgICBtYXRyaXggPSBfcmVmMi5tYXRyaXg7XG4gIC8vIHNlZWRlZCBwc2V1ZG8gcmFuZG9tIG51bWJlciBnZW5lcmF0b3IxXG4gIHZhciBybmcgPSAoMCwgX3NlZWRlZFJORy5jcmVhdGVSbmcpKGNvbmZpZy5yYW5kb21TZWVkKTtcblxuICBpZiAob24pIHtcbiAgICBvbignY29uZmlnJywgZnVuY3Rpb24gKGN1cnIsIHByZXYpIHtcbiAgICAgIGlmIChjdXJyLnJhbmRvbVNlZWQgIT09IHByZXYucmFuZG9tU2VlZCkge1xuICAgICAgICBybmcgPSAoMCwgX3NlZWRlZFJORy5jcmVhdGVSbmcpKGN1cnIucmFuZG9tU2VlZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICcnOiBmdW5jdGlvbiBfKCkge1xuICAgICAgcmV0dXJuIF9yYW5kb20oMCwgMSk7XG4gICAgfSxcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcihtYXgpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tKDAsIG1heCk7XG4gICAgfSxcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIobWluLCBtYXgpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tKG1pbiwgbWF4KTtcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIF9yYW5kb20obWluLCBtYXgpIHtcbiAgICByZXR1cm4gbWluICsgcm5nKCkgKiAobWF4IC0gbWluKTtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZVJhbmRvbU51bWJlciA9IGNyZWF0ZVJhbmRvbU51bWJlcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUmFuZG9tSW50ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9yYW5kb21NYXRyaXggPSByZXF1aXJlKFwiLi91dGlsL3JhbmRvbU1hdHJpeFwiKTtcblxudmFyIF9zZWVkZWRSTkcgPSByZXF1aXJlKFwiLi91dGlsL3NlZWRlZFJOR1wiKTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIG5hbWUgPSAncmFuZG9tSW50JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICc/b24nXTtcbnZhciBjcmVhdGVSYW5kb21JbnQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBvbiA9IF9yZWYub247XG4gIC8vIHNlZWRlZCBwc2V1ZG8gcmFuZG9tIG51bWJlciBnZW5lcmF0b3JcbiAgdmFyIHJuZyA9ICgwLCBfc2VlZGVkUk5HLmNyZWF0ZVJuZykoY29uZmlnLnJhbmRvbVNlZWQpO1xuXG4gIGlmIChvbikge1xuICAgIG9uKCdjb25maWcnLCBmdW5jdGlvbiAoY3VyciwgcHJldikge1xuICAgICAgaWYgKGN1cnIucmFuZG9tU2VlZCAhPT0gcHJldi5yYW5kb21TZWVkKSB7XG4gICAgICAgIHJuZyA9ICgwLCBfc2VlZGVkUk5HLmNyZWF0ZVJuZykoY3Vyci5yYW5kb21TZWVkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJuIGEgcmFuZG9tIGludGVnZXIgbnVtYmVyIGxhcmdlciBvciBlcXVhbCB0byBgbWluYCBhbmQgc21hbGxlciB0aGFuIGBtYXhgXG4gICAqIHVzaW5nIGEgdW5pZm9ybSBkaXN0cmlidXRpb24uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGgucmFuZG9tSW50KCkgICAgICAgICAgICAgICAgLy8gZ2VuZXJhdGUgYSByYW5kb20gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDFcbiAgICogICAgIG1hdGgucmFuZG9tSW50KG1heCkgICAgICAgICAgICAgLy8gZ2VuZXJhdGUgYSByYW5kb20gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIG1heFxuICAgKiAgICAgbWF0aC5yYW5kb21JbnQobWluLCBtYXgpICAgICAgICAvLyBnZW5lcmF0ZSBhIHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gbWluIGFuZCBtYXhcbiAgICogICAgIG1hdGgucmFuZG9tSW50KHNpemUpICAgICAgICAgICAgLy8gZ2VuZXJhdGUgYSBtYXRyaXggd2l0aCByYW5kb20gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDFcbiAgICogICAgIG1hdGgucmFuZG9tSW50KHNpemUsIG1heCkgICAgICAgLy8gZ2VuZXJhdGUgYSBtYXRyaXggd2l0aCByYW5kb20gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIG1heFxuICAgKiAgICAgbWF0aC5yYW5kb21JbnQoc2l6ZSwgbWluLCBtYXgpICAvLyBnZW5lcmF0ZSBhIG1hdHJpeCB3aXRoIHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gbWluIGFuZCBtYXhcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLnJhbmRvbUludCgxMDApICAgIC8vIHJldHVybnMgYSByYW5kb20gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDEwMFxuICAgKiAgICAgbWF0aC5yYW5kb21JbnQoMzAsIDQwKSAvLyByZXR1cm5zIGEgcmFuZG9tIGludGVnZXIgYmV0d2VlbiAzMCBhbmQgNDBcbiAgICogICAgIG1hdGgucmFuZG9tSW50KFsyLCAzXSkgLy8gcmV0dXJucyBhIDJ4MyBtYXRyaXggd2l0aCByYW5kb20gaW50ZWdlcnMgYmV0d2VlbiAwIGFuZCAxXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgcmFuZG9tLCBwaWNrUmFuZG9tXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IFtzaXplXSBJZiBwcm92aWRlZCwgYW4gYXJyYXkgb3IgbWF0cml4IHdpdGggZ2l2ZW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgYW5kIGZpbGxlZCB3aXRoIHJhbmRvbSB2YWx1ZXMgaXMgcmV0dXJuZWRcbiAgICogQHBhcmFtIHtudW1iZXJ9IFttaW5dICBNaW5pbXVtIGJvdW5kYXJ5IGZvciB0aGUgcmFuZG9tIHZhbHVlLCBpbmNsdWRlZFxuICAgKiBAcGFyYW0ge251bWJlcn0gW21heF0gIE1heGltdW0gYm91bmRhcnkgZm9yIHRoZSByYW5kb20gdmFsdWUsIGV4Y2x1ZGVkXG4gICAqIEByZXR1cm4ge251bWJlciB8IEFycmF5IHwgTWF0cml4fSBBIHJhbmRvbSBpbnRlZ2VyIHZhbHVlXG4gICAqL1xuXG5cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnJzogZnVuY3Rpb24gXygpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tSW50KDAsIDEpO1xuICAgIH0sXG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIobWF4KSB7XG4gICAgICByZXR1cm4gX3JhbmRvbUludCgwLCBtYXgpO1xuICAgIH0sXG4gICAgJ251bWJlciwgbnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyTnVtYmVyKG1pbiwgbWF4KSB7XG4gICAgICByZXR1cm4gX3JhbmRvbUludChtaW4sIG1heCk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeChzaXplKSB7XG4gICAgICByZXR1cm4gX3JhbmRvbUludE1hdHJpeChzaXplLCAwLCAxKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhOdW1iZXIoc2l6ZSwgbWF4KSB7XG4gICAgICByZXR1cm4gX3JhbmRvbUludE1hdHJpeChzaXplLCAwLCBtYXgpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4LCBudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIEFycmF5TWF0cml4TnVtYmVyTnVtYmVyKHNpemUsIG1pbiwgbWF4KSB7XG4gICAgICByZXR1cm4gX3JhbmRvbUludE1hdHJpeChzaXplLCBtaW4sIG1heCk7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBfcmFuZG9tSW50TWF0cml4KHNpemUsIG1pbiwgbWF4KSB7XG4gICAgdmFyIHJlcyA9ICgwLCBfcmFuZG9tTWF0cml4LnJhbmRvbU1hdHJpeCkoc2l6ZS52YWx1ZU9mKCksIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tSW50KG1pbiwgbWF4KTtcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIF9pcy5pc01hdHJpeCkoc2l6ZSkgPyBzaXplLmNyZWF0ZShyZXMpIDogcmVzO1xuICB9XG5cbiAgZnVuY3Rpb24gX3JhbmRvbUludChtaW4sIG1heCkge1xuICAgIHJldHVybiBNYXRoLmZsb29yKG1pbiArIHJuZygpICogKG1heCAtIG1pbikpO1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlUmFuZG9tSW50ID0gY3JlYXRlUmFuZG9tSW50OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yYW5kb21NYXRyaXggPSByYW5kb21NYXRyaXg7XG5cbi8qKlxuICogVGhpcyBpcyBhIHV0aWwgZnVuY3Rpb24gZm9yIGdlbmVyYXRpbmcgYSByYW5kb20gbWF0cml4IHJlY3Vyc2l2ZWx5LlxuICogQHBhcmFtIHtudW1iZXJbXX0gc2l6ZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gcmFuZG9tXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbmZ1bmN0aW9uIHJhbmRvbU1hdHJpeChzaXplLCByYW5kb20pIHtcbiAgdmFyIGRhdGEgPSBbXTtcbiAgc2l6ZSA9IHNpemUuc2xpY2UoMCk7XG5cbiAgaWYgKHNpemUubGVuZ3RoID4gMSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBzaXplLnNoaWZ0KCk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgZGF0YS5wdXNoKHJhbmRvbU1hdHJpeChzaXplLCByYW5kb20pKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgX2kgPSAwLCBfbGVuZ3RoID0gc2l6ZS5zaGlmdCgpOyBfaSA8IF9sZW5ndGg7IF9pKyspIHtcbiAgICAgIGRhdGEucHVzaChyYW5kb20oKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRhdGE7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJuZyA9IGNyZWF0ZVJuZztcblxudmFyIF9zZWVkUmFuZG9tID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwic2VlZC1yYW5kb21cIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuLy8gY3JlYXRlIGEgcmFuZG9tIHNlZWQgaGVyZSB0byBwcmV2ZW50IGFuIGluZmluaXRlIGxvb3AgZnJvbSBzZWVkLXJhbmRvbVxuLy8gaW5zaWRlIHRoZSBmYWN0b3J5LiBSZWFzb24gaXMgdGhhdCBtYXRoLnJhbmRvbSBpcyBkZWZpbmVkIGFzIGEgZ2V0dGVyL3NldHRlclxuLy8gYW5kIHNlZWQtcmFuZG9tIGdlbmVyYXRlcyBhIHNlZWQgZnJvbSB0aGUgbG9jYWwgZW50cm9weSBieSByZWFkaW5nIGV2ZXJ5XG4vLyBkZWZpbmVkIG9iamVjdCBpbmNsdWRpbmcgYG1hdGhgIGl0c2VsZi4gVGhhdCBtZWFucyB0aGF0IHdoaWxzdCBnZXR0aW5nXG4vLyBtYXRoLnJhbmRvbSwgaXQgdHJpZXMgdG8gZ2V0IG1hdGgucmFuZG9tLCBldGMuLi4gYW4gaW5maW5pdGUgbG9vcC5cbi8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vRm9yYmVzTGluZGVzYXkvc2VlZC1yYW5kb20vaXNzdWVzLzZcbnZhciBzaW5nbGV0b25SYW5kb20gPSAvKiAjX19QVVJFX18gKi8oMCwgX3NlZWRSYW5kb21bXCJkZWZhdWx0XCJdKSgpO1xuXG5mdW5jdGlvbiBjcmVhdGVSbmcocmFuZG9tU2VlZCkge1xuICB2YXIgcmFuZG9tOyAvLyBjcmVhdGUgYSBuZXcgcmFuZG9tIGdlbmVyYXRvciB3aXRoIGdpdmVuIHNlZWRcblxuICBmdW5jdGlvbiBzZXRTZWVkKHNlZWQpIHtcbiAgICByYW5kb20gPSBzZWVkID09PSBudWxsID8gc2luZ2xldG9uUmFuZG9tIDogKDAsIF9zZWVkUmFuZG9tW1wiZGVmYXVsdFwiXSkoU3RyaW5nKHNlZWQpKTtcbiAgfSAvLyBpbml0aWFsaXplIGEgc2VlZGVkIHBzZXVkbyByYW5kb20gbnVtYmVyIGdlbmVyYXRvciB3aXRoIGNvbmZpZydzIHJhbmRvbSBzZWVkXG5cblxuICBzZXRTZWVkKHJhbmRvbVNlZWQpOyAvLyB3cmFwcGVyIGZ1bmN0aW9uIHNvIHRoZSBybmcgY2FuIGJlIHVwZGF0ZWQgdmlhIGdlbmVyYXRvclxuXG4gIGZ1bmN0aW9uIHJuZygpIHtcbiAgICByZXR1cm4gcmFuZG9tKCk7XG4gIH1cblxuICByZXR1cm4gcm5nO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb21wYXJlTnVtYmVyID0gZXhwb3J0cy5jcmVhdGVDb21wYXJlID0gdm9pZCAwO1xuXG52YXIgX25lYXJseUVxdWFsID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2JpZ251bWJlci9uZWFybHlFcXVhbFwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDNcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMlwiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgX2FsZ29yaXRobTQgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wNVwiKTtcblxudmFyIG5hbWUgPSAnY29tcGFyZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnbWF0cml4JywgJ2VxdWFsU2NhbGFyJywgJ0JpZ051bWJlcicsICdGcmFjdGlvbicsICdEZW5zZU1hdHJpeCddO1xudmFyIGNyZWF0ZUNvbXBhcmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIEJpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyLFxuICAgICAgRnJhY3Rpb24gPSBfcmVmLkZyYWN0aW9uLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMDMgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTA1ID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTA1KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEyID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTEyKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEzID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTEzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTMuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBDb21wYXJlIHR3byB2YWx1ZXMuIFJldHVybnMgMSB3aGVuIHggPiB5LCAtMSB3aGVuIHggPCB5LCBhbmQgMCB3aGVuIHggPT0geS5cbiAgICpcbiAgICogeCBhbmQgeSBhcmUgY29uc2lkZXJlZCBlcXVhbCB3aGVuIHRoZSByZWxhdGl2ZSBkaWZmZXJlbmNlIGJldHdlZW4geCBhbmQgeVxuICAgKiBpcyBzbWFsbGVyIHRoYW4gdGhlIGNvbmZpZ3VyZWQgZXBzaWxvbi4gVGhlIGZ1bmN0aW9uIGNhbm5vdCBiZSB1c2VkIHRvXG4gICAqIGNvbXBhcmUgdmFsdWVzIHNtYWxsZXIgdGhhbiBhcHByb3hpbWF0ZWx5IDIuMjJlLTE2LlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKiBTdHJpbmdzIGFyZSBjb21wYXJlZCBieSB0aGVpciBudW1lcmljYWwgdmFsdWUuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5jb21wYXJlKHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmNvbXBhcmUoNiwgMSkgICAgICAgICAgIC8vIHJldHVybnMgMVxuICAgKiAgICBtYXRoLmNvbXBhcmUoMiwgMykgICAgICAgICAgIC8vIHJldHVybnMgLTFcbiAgICogICAgbWF0aC5jb21wYXJlKDcsIDcpICAgICAgICAgICAvLyByZXR1cm5zIDBcbiAgICogICAgbWF0aC5jb21wYXJlKCcxMCcsICcyJykgICAgICAvLyByZXR1cm5zIDFcbiAgICogICAgbWF0aC5jb21wYXJlKCcxMDAwJywgJzFlMycpICAvLyByZXR1cm5zIDBcbiAgICpcbiAgICogICAgY29uc3QgYSA9IG1hdGgudW5pdCgnNSBjbScpXG4gICAqICAgIGNvbnN0IGIgPSBtYXRoLnVuaXQoJzQwIG1tJylcbiAgICogICAgbWF0aC5jb21wYXJlKGEsIGIpICAgICAgICAgICAvLyByZXR1cm5zIDFcbiAgICpcbiAgICogICAgbWF0aC5jb21wYXJlKDIsIFsxLCAyLCAzXSkgICAvLyByZXR1cm5zIFsxLCAwLCAtMV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGVxdWFsLCB1bmVxdWFsLCBzbWFsbGVyLCBzbWFsbGVyRXEsIGxhcmdlciwgbGFyZ2VyRXEsIGNvbXBhcmVOYXR1cmFsLCBjb21wYXJlVGV4dFxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IFVuaXQgfCBzdHJpbmcgfCBBcnJheSB8IE1hdHJpeH0geCBGaXJzdCB2YWx1ZSB0byBjb21wYXJlXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgVW5pdCB8IHN0cmluZyB8IEFycmF5IHwgTWF0cml4fSB5IFNlY29uZCB2YWx1ZSB0byBjb21wYXJlXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQXJyYXkgfCBNYXRyaXh9IFJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgY29tcGFyaXNvbjpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSB3aGVuIHggPiB5LCAtMSB3aGVuIHggPCB5LCBhbmQgMCB3aGVuIHggPT0geS5cbiAgICovXG5cbiAgdmFyIGNvbXBhcmUgPSB0eXBlZChuYW1lLCB7XG4gICAgJ2Jvb2xlYW4sIGJvb2xlYW4nOiBmdW5jdGlvbiBib29sZWFuQm9vbGVhbih4LCB5KSB7XG4gICAgICByZXR1cm4geCA9PT0geSA/IDAgOiB4ID4geSA/IDEgOiAtMTtcbiAgICB9LFxuICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4gKDAsIF9udW1iZXIubmVhcmx5RXF1YWwpKHgsIHksIGNvbmZpZy5lcHNpbG9uKSA/IDAgOiB4ID4geSA/IDEgOiAtMTtcbiAgICB9LFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IGZ1bmN0aW9uIEJpZ051bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4gKDAsIF9uZWFybHlFcXVhbC5uZWFybHlFcXVhbCkoeCwgeSwgY29uZmlnLmVwc2lsb24pID8gbmV3IEJpZ051bWJlcigwKSA6IG5ldyBCaWdOdW1iZXIoeC5jbXAoeSkpO1xuICAgIH0sXG4gICAgJ0ZyYWN0aW9uLCBGcmFjdGlvbic6IGZ1bmN0aW9uIEZyYWN0aW9uRnJhY3Rpb24oeCwgeSkge1xuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbih4LmNvbXBhcmUoeSkpO1xuICAgIH0sXG4gICAgJ0NvbXBsZXgsIENvbXBsZXgnOiBmdW5jdGlvbiBDb21wbGV4Q29tcGxleCgpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIG9yZGVyaW5nIHJlbGF0aW9uIGlzIGRlZmluZWQgZm9yIGNvbXBsZXggbnVtYmVycycpO1xuICAgIH0sXG4gICAgJ1VuaXQsIFVuaXQnOiBmdW5jdGlvbiBVbml0VW5pdCh4LCB5KSB7XG4gICAgICBpZiAoIXguZXF1YWxCYXNlKHkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbXBhcmUgdW5pdHMgd2l0aCBkaWZmZXJlbnQgYmFzZScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29tcGFyZSh4LnZhbHVlLCB5LnZhbHVlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDUoeCwgeSwgY29tcGFyZSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh5LCB4LCBjb21wYXJlLCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHgsIHksIGNvbXBhcmUsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBjb21wYXJlKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBjb21wYXJlKG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBjb21wYXJlKG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBjb21wYXJlKHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEyKHgsIHksIGNvbXBhcmUsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIGNvbXBhcmUsIGZhbHNlKTtcbiAgICB9LFxuICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeSwgeCwgY29tcGFyZSwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnYW55LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIGFueURlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCBjb21wYXJlLCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgY29tcGFyZSwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgY29tcGFyZSwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjb21wYXJlO1xufSk7XG5leHBvcnRzLmNyZWF0ZUNvbXBhcmUgPSBjcmVhdGVDb21wYXJlO1xudmFyIGNyZWF0ZUNvbXBhcmVOdW1iZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgWyd0eXBlZCcsICdjb25maWcnXSwgZnVuY3Rpb24gKF9yZWYyKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYyLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZjIuY29uZmlnO1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4gKDAsIF9udW1iZXIubmVhcmx5RXF1YWwpKHgsIHksIGNvbmZpZy5lcHNpbG9uKSA/IDAgOiB4ID4geSA/IDEgOiAtMTtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZUNvbXBhcmVOdW1iZXIgPSBjcmVhdGVDb21wYXJlTnVtYmVyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb21wYXJlTmF0dXJhbCA9IHZvaWQgMDtcblxudmFyIF9qYXZhc2NyaXB0TmF0dXJhbFNvcnQgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJqYXZhc2NyaXB0LW5hdHVyYWwtc29ydFwiKSk7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxudmFyIG5hbWUgPSAnY29tcGFyZU5hdHVyYWwnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29tcGFyZSddO1xudmFyIGNyZWF0ZUNvbXBhcmVOYXR1cmFsID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbXBhcmUgPSBfcmVmLmNvbXBhcmU7XG4gIHZhciBjb21wYXJlQm9vbGVhbnMgPSBjb21wYXJlLnNpZ25hdHVyZXNbJ2Jvb2xlYW4sYm9vbGVhbiddO1xuICAvKipcbiAgICogQ29tcGFyZSB0d28gdmFsdWVzIG9mIGFueSB0eXBlIGluIGEgZGV0ZXJtaW5pc3RpYywgbmF0dXJhbCB3YXkuXG4gICAqXG4gICAqIEZvciBudW1lcmljIHZhbHVlcywgdGhlIGZ1bmN0aW9uIHdvcmtzIHRoZSBzYW1lIGFzIGBtYXRoLmNvbXBhcmVgLlxuICAgKiBGb3IgdHlwZXMgb2YgdmFsdWVzIHRoYXQgY2FuJ3QgYmUgY29tcGFyZWQgbWF0aGVtYXRpY2FsbHksXG4gICAqIHRoZSBmdW5jdGlvbiBjb21wYXJlcyBpbiBhIG5hdHVyYWwgd2F5LlxuICAgKlxuICAgKiBGb3IgbnVtZXJpYyB2YWx1ZXMsIHggYW5kIHkgYXJlIGNvbnNpZGVyZWQgZXF1YWwgd2hlbiB0aGUgcmVsYXRpdmVcbiAgICogZGlmZmVyZW5jZSBiZXR3ZWVuIHggYW5kIHkgaXMgc21hbGxlciB0aGFuIHRoZSBjb25maWd1cmVkIGVwc2lsb24uXG4gICAqIFRoZSBmdW5jdGlvbiBjYW5ub3QgYmUgdXNlZCB0byBjb21wYXJlIHZhbHVlcyBzbWFsbGVyIHRoYW5cbiAgICogYXBwcm94aW1hdGVseSAyLjIyZS0xNi5cbiAgICpcbiAgICogRm9yIENvbXBsZXggbnVtYmVycywgZmlyc3QgdGhlIHJlYWwgcGFydHMgYXJlIGNvbXBhcmVkLiBJZiBlcXVhbCxcbiAgICogdGhlIGltYWdpbmFyeSBwYXJ0cyBhcmUgY29tcGFyZWQuXG4gICAqXG4gICAqIFN0cmluZ3MgYXJlIGNvbXBhcmVkIHdpdGggYSBuYXR1cmFsIHNvcnRpbmcgYWxnb3JpdGhtLCB3aGljaFxuICAgKiBvcmRlcnMgc3RyaW5ncyBpbiBhIFwibG9naWNcIiB3YXkgZm9sbG93aW5nIHNvbWUgaGV1cmlzdGljcy5cbiAgICogVGhpcyBkaWZmZXJzIGZyb20gdGhlIGZ1bmN0aW9uIGBjb21wYXJlYCwgd2hpY2ggY29udmVydHMgdGhlIHN0cmluZ1xuICAgKiBpbnRvIGEgbnVtZXJpYyB2YWx1ZSBhbmQgY29tcGFyZXMgdGhhdC4gVGhlIGZ1bmN0aW9uIGBjb21wYXJlVGV4dGBcbiAgICogb24gdGhlIG90aGVyIGhhbmQgY29tcGFyZXMgdGV4dCBsZXhpY2FsbHkuXG4gICAqXG4gICAqIEFycmF5cyBhbmQgTWF0cmljZXMgYXJlIGNvbXBhcmVkIHZhbHVlIGJ5IHZhbHVlIHVudGlsIHRoZXJlIGlzIGFuXG4gICAqIHVuZXF1YWwgcGFpciBvZiB2YWx1ZXMgZW5jb3VudGVyZWQuIE9iamVjdHMgYXJlIGNvbXBhcmVkIGJ5IHNvcnRlZFxuICAgKiBrZXlzIHVudGlsIHRoZSBrZXlzIG9yIHRoZWlyIHZhbHVlcyBhcmUgdW5lcXVhbC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmNvbXBhcmVOYXR1cmFsKHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmNvbXBhcmVOYXR1cmFsKDYsIDEpICAgICAgICAgICAgICAvLyByZXR1cm5zIDFcbiAgICogICAgbWF0aC5jb21wYXJlTmF0dXJhbCgyLCAzKSAgICAgICAgICAgICAgLy8gcmV0dXJucyAtMVxuICAgKiAgICBtYXRoLmNvbXBhcmVOYXR1cmFsKDcsIDcpICAgICAgICAgICAgICAvLyByZXR1cm5zIDBcbiAgICpcbiAgICogICAgbWF0aC5jb21wYXJlTmF0dXJhbCgnMTAnLCAnMicpICAgICAgICAgLy8gcmV0dXJucyAxXG4gICAqICAgIG1hdGguY29tcGFyZVRleHQoJzEwJywgJzInKSAgICAgICAgICAgIC8vIHJldHVybnMgLTFcbiAgICogICAgbWF0aC5jb21wYXJlKCcxMCcsICcyJykgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAxXG4gICAqXG4gICAqICAgIG1hdGguY29tcGFyZU5hdHVyYWwoJ0Fuc3dlcjogMTAnLCAnQW5zd2VyOiAyJykgLy8gcmV0dXJucyAxXG4gICAqICAgIG1hdGguY29tcGFyZVRleHQoJ0Fuc3dlcjogMTAnLCAnQW5zd2VyOiAyJykgICAgLy8gcmV0dXJucyAtMVxuICAgKiAgICBtYXRoLmNvbXBhcmUoJ0Fuc3dlcjogMTAnLCAnQW5zd2VyOiAyJylcbiAgICogICAgICAgIC8vIEVycm9yOiBDYW5ub3QgY29udmVydCBcIkFuc3dlcjogMTBcIiB0byBhIG51bWJlclxuICAgKlxuICAgKiAgICBjb25zdCBhID0gbWF0aC51bml0KCc1IGNtJylcbiAgICogICAgY29uc3QgYiA9IG1hdGgudW5pdCgnNDAgbW0nKVxuICAgKiAgICBtYXRoLmNvbXBhcmVOYXR1cmFsKGEsIGIpICAgICAgICAgICAgICAvLyByZXR1cm5zIDFcbiAgICpcbiAgICogICAgY29uc3QgYyA9IG1hdGguY29tcGxleCgnMiArIDNpJylcbiAgICogICAgY29uc3QgZCA9IG1hdGguY29tcGxleCgnMiArIDRpJylcbiAgICogICAgbWF0aC5jb21wYXJlTmF0dXJhbChjLCBkKSAgICAgICAgICAgICAgLy8gcmV0dXJucyAtMVxuICAgKlxuICAgKiAgICBtYXRoLmNvbXBhcmVOYXR1cmFsKFsxLCAyLCA0XSwgWzEsIDIsIDNdKSAvLyByZXR1cm5zIDFcbiAgICogICAgbWF0aC5jb21wYXJlTmF0dXJhbChbMSwgMiwgM10sIFsxLCAyXSkgICAgLy8gcmV0dXJucyAxXG4gICAqICAgIG1hdGguY29tcGFyZU5hdHVyYWwoWzEsIDVdLCBbMSwgMiwgM10pICAgIC8vIHJldHVybnMgMVxuICAgKiAgICBtYXRoLmNvbXBhcmVOYXR1cmFsKFsxLCAyXSwgWzEsIDJdKSAgICAgICAvLyByZXR1cm5zIDBcbiAgICpcbiAgICogICAgbWF0aC5jb21wYXJlTmF0dXJhbCh7YTogMn0sIHthOiA0fSkgICAgICAgLy8gcmV0dXJucyAtMVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgY29tcGFyZSwgY29tcGFyZVRleHRcbiAgICpcbiAgICogQHBhcmFtICB7Kn0geCBGaXJzdCB2YWx1ZSB0byBjb21wYXJlXG4gICAqIEBwYXJhbSAgeyp9IHkgU2Vjb25kIHZhbHVlIHRvIGNvbXBhcmVcbiAgICogQHJldHVybiB7bnVtYmVyfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb246XG4gICAqICAgICAgICAgICAgICAgICAgMSB3aGVuIHggPiB5LCAtMSB3aGVuIHggPCB5LCBhbmQgMCB3aGVuIHggPT0geS5cbiAgICovXG5cbiAgdmFyIGNvbXBhcmVOYXR1cmFsID0gdHlwZWQobmFtZSwge1xuICAgICdhbnksIGFueSc6IGZ1bmN0aW9uIGFueUFueSh4LCB5KSB7XG4gICAgICB2YXIgdHlwZVggPSAoMCwgX2lzLnR5cGVPZikoeCk7XG4gICAgICB2YXIgdHlwZVkgPSAoMCwgX2lzLnR5cGVPZikoeSk7XG4gICAgICB2YXIgYzsgLy8gbnVtZXJpYyB0eXBlc1xuXG4gICAgICBpZiAoKHR5cGVYID09PSAnbnVtYmVyJyB8fCB0eXBlWCA9PT0gJ0JpZ051bWJlcicgfHwgdHlwZVggPT09ICdGcmFjdGlvbicpICYmICh0eXBlWSA9PT0gJ251bWJlcicgfHwgdHlwZVkgPT09ICdCaWdOdW1iZXInIHx8IHR5cGVZID09PSAnRnJhY3Rpb24nKSkge1xuICAgICAgICBjID0gY29tcGFyZSh4LCB5KTtcblxuICAgICAgICBpZiAoYy50b1N0cmluZygpICE9PSAnMCcpIHtcbiAgICAgICAgICAvLyBjIGNhbiBiZSBudW1iZXIsIEJpZ051bWJlciwgb3IgRnJhY3Rpb25cbiAgICAgICAgICByZXR1cm4gYyA+IDAgPyAxIDogLTE7IC8vIHJldHVybiBhIG51bWJlclxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAoMCwgX2phdmFzY3JpcHROYXR1cmFsU29ydFtcImRlZmF1bHRcIl0pKHR5cGVYLCB0eXBlWSk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gbWF0cml4IHR5cGVzXG5cblxuICAgICAgaWYgKHR5cGVYID09PSAnQXJyYXknIHx8IHR5cGVYID09PSAnTWF0cml4JyB8fCB0eXBlWSA9PT0gJ0FycmF5JyB8fCB0eXBlWSA9PT0gJ01hdHJpeCcpIHtcbiAgICAgICAgYyA9IGNvbXBhcmVNYXRyaWNlc0FuZEFycmF5cyh4LCB5KTtcblxuICAgICAgICBpZiAoYyAhPT0gMCkge1xuICAgICAgICAgIHJldHVybiBjO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAoMCwgX2phdmFzY3JpcHROYXR1cmFsU29ydFtcImRlZmF1bHRcIl0pKHR5cGVYLCB0eXBlWSk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gaW4gY2FzZSBvZiBkaWZmZXJlbnQgdHlwZXMsIG9yZGVyIGJ5IG5hbWUgb2YgdHlwZSwgaS5lLiAnQmlnTnVtYmVyJyA8ICdDb21wbGV4J1xuXG5cbiAgICAgIGlmICh0eXBlWCAhPT0gdHlwZVkpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfamF2YXNjcmlwdE5hdHVyYWxTb3J0W1wiZGVmYXVsdFwiXSkodHlwZVgsIHR5cGVZKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVYID09PSAnQ29tcGxleCcpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVDb21wbGV4TnVtYmVycyh4LCB5KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVYID09PSAnVW5pdCcpIHtcbiAgICAgICAgaWYgKHguZXF1YWxCYXNlKHkpKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbXBhcmVOYXR1cmFsKHgudmFsdWUsIHkudmFsdWUpO1xuICAgICAgICB9IC8vIGNvbXBhcmUgYnkgdW5pdHNcblxuXG4gICAgICAgIHJldHVybiBjb21wYXJlQXJyYXlzKHguZm9ybWF0VW5pdHMoKSwgeS5mb3JtYXRVbml0cygpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVYID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVCb29sZWFucyh4LCB5KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVYID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gKDAsIF9qYXZhc2NyaXB0TmF0dXJhbFNvcnRbXCJkZWZhdWx0XCJdKSh4LCB5KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVYID09PSAnT2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gY29tcGFyZU9iamVjdHMoeCwgeSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlWCA9PT0gJ251bGwnKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZVggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfSAvLyB0aGlzIHNob3VsZCBub3Qgb2NjdXIuLi5cblxuXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbnN1cHBvcnRlZCB0eXBlIG9mIHZhbHVlIFwiJyArIHR5cGVYICsgJ1wiJyk7XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIENvbXBhcmUgbWl4ZWQgbWF0cml4L2FycmF5IHR5cGVzLCBieSBjb252ZXJ0aW5nIHRvIHNhbWUtc2hhcGVkIGFycmF5LlxuICAgKiBUaGlzIGNvbXBhcmF0b3IgaXMgbm9uLWRldGVybWluaXN0aWMgcmVnYXJkaW5nIGlucHV0IHR5cGVzLlxuICAgKiBAcGFyYW0ge0FycmF5IHwgU3BhcnNlTWF0cml4IHwgRGVuc2VNYXRyaXggfCAqfSB4XG4gICAqIEBwYXJhbSB7QXJyYXkgfCBTcGFyc2VNYXRyaXggfCBEZW5zZU1hdHJpeCB8ICp9IHlcbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29tcGFyaXNvbiByZXN1bHQ6IC0xLCAwLCBvciAxXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGNvbXBhcmVNYXRyaWNlc0FuZEFycmF5cyh4LCB5KSB7XG4gICAgaWYgKCgwLCBfaXMuaXNTcGFyc2VNYXRyaXgpKHgpICYmICgwLCBfaXMuaXNTcGFyc2VNYXRyaXgpKHkpKSB7XG4gICAgICByZXR1cm4gY29tcGFyZUFycmF5cyh4LnRvSlNPTigpLnZhbHVlcywgeS50b0pTT04oKS52YWx1ZXMpO1xuICAgIH1cblxuICAgIGlmICgoMCwgX2lzLmlzU3BhcnNlTWF0cml4KSh4KSkge1xuICAgICAgLy8gbm90ZTogY29udmVydCB0byBhcnJheSBpcyBleHBlbnNpdmVcbiAgICAgIHJldHVybiBjb21wYXJlTWF0cmljZXNBbmRBcnJheXMoeC50b0FycmF5KCksIHkpO1xuICAgIH1cblxuICAgIGlmICgoMCwgX2lzLmlzU3BhcnNlTWF0cml4KSh5KSkge1xuICAgICAgLy8gbm90ZTogY29udmVydCB0byBhcnJheSBpcyBleHBlbnNpdmVcbiAgICAgIHJldHVybiBjb21wYXJlTWF0cmljZXNBbmRBcnJheXMoeCwgeS50b0FycmF5KCkpO1xuICAgIH0gLy8gY29udmVydCBEZW5zZUFycmF5IGludG8gQXJyYXlcblxuXG4gICAgaWYgKCgwLCBfaXMuaXNEZW5zZU1hdHJpeCkoeCkpIHtcbiAgICAgIHJldHVybiBjb21wYXJlTWF0cmljZXNBbmRBcnJheXMoeC50b0pTT04oKS5kYXRhLCB5KTtcbiAgICB9XG5cbiAgICBpZiAoKDAsIF9pcy5pc0RlbnNlTWF0cml4KSh5KSkge1xuICAgICAgcmV0dXJuIGNvbXBhcmVNYXRyaWNlc0FuZEFycmF5cyh4LCB5LnRvSlNPTigpLmRhdGEpO1xuICAgIH0gLy8gY29udmVydCBzY2FsYXJzIHRvIGFycmF5XG5cblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh4KSkge1xuICAgICAgcmV0dXJuIGNvbXBhcmVNYXRyaWNlc0FuZEFycmF5cyhbeF0sIHkpO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh5KSkge1xuICAgICAgcmV0dXJuIGNvbXBhcmVNYXRyaWNlc0FuZEFycmF5cyh4LCBbeV0pO1xuICAgIH1cblxuICAgIHJldHVybiBjb21wYXJlQXJyYXlzKHgsIHkpO1xuICB9XG4gIC8qKlxuICAgKiBDb21wYXJlIHR3byBBcnJheXNcbiAgICpcbiAgICogLSBGaXJzdCwgY29tcGFyZXMgdmFsdWUgYnkgdmFsdWVcbiAgICogLSBOZXh0LCBpZiBhbGwgY29ycmVzcG9uZGluZyB2YWx1ZXMgYXJlIGVxdWFsLFxuICAgKiAgIGxvb2sgYXQgdGhlIGxlbmd0aDogbG9uZ2VzdCBhcnJheSB3aWxsIGJlIGNvbnNpZGVyZWQgbGFyZ2VzdFxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSB4XG4gICAqIEBwYXJhbSB7QXJyYXl9IHlcbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29tcGFyaXNvbiByZXN1bHQ6IC0xLCAwLCBvciAxXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gY29tcGFyZUFycmF5cyh4LCB5KSB7XG4gICAgLy8gY29tcGFyZSBlYWNoIHZhbHVlXG4gICAgZm9yICh2YXIgaSA9IDAsIGlpID0gTWF0aC5taW4oeC5sZW5ndGgsIHkubGVuZ3RoKTsgaSA8IGlpOyBpKyspIHtcbiAgICAgIHZhciB2ID0gY29tcGFyZU5hdHVyYWwoeFtpXSwgeVtpXSk7XG5cbiAgICAgIGlmICh2ICE9PSAwKSB7XG4gICAgICAgIHJldHVybiB2O1xuICAgICAgfVxuICAgIH0gLy8gY29tcGFyZSB0aGUgc2l6ZSBvZiB0aGUgYXJyYXlzXG5cblxuICAgIGlmICh4Lmxlbmd0aCA+IHkubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICBpZiAoeC5sZW5ndGggPCB5Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH0gLy8gYm90aCBBcnJheXMgaGF2ZSBlcXVhbCBzaXplIGFuZCBjb250ZW50XG5cblxuICAgIHJldHVybiAwO1xuICB9XG4gIC8qKlxuICAgKiBDb21wYXJlIHR3byBvYmplY3RzXG4gICAqXG4gICAqIC0gRmlyc3QsIGNvbXBhcmUgc29ydGVkIHByb3BlcnR5IG5hbWVzXG4gICAqIC0gTmV4dCwgY29tcGFyZSB0aGUgcHJvcGVydHkgdmFsdWVzXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSB4XG4gICAqIEBwYXJhbSB7T2JqZWN0fSB5XG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbXBhcmlzb24gcmVzdWx0OiAtMSwgMCwgb3IgMVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGNvbXBhcmVPYmplY3RzKHgsIHkpIHtcbiAgICB2YXIga2V5c1ggPSBPYmplY3Qua2V5cyh4KTtcbiAgICB2YXIga2V5c1kgPSBPYmplY3Qua2V5cyh5KTsgLy8gY29tcGFyZSBrZXlzXG5cbiAgICBrZXlzWC5zb3J0KF9qYXZhc2NyaXB0TmF0dXJhbFNvcnRbXCJkZWZhdWx0XCJdKTtcbiAgICBrZXlzWS5zb3J0KF9qYXZhc2NyaXB0TmF0dXJhbFNvcnRbXCJkZWZhdWx0XCJdKTtcbiAgICB2YXIgYyA9IGNvbXBhcmVBcnJheXMoa2V5c1gsIGtleXNZKTtcblxuICAgIGlmIChjICE9PSAwKSB7XG4gICAgICByZXR1cm4gYztcbiAgICB9IC8vIGNvbXBhcmUgdmFsdWVzXG5cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5c1gubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2ID0gY29tcGFyZU5hdHVyYWwoeFtrZXlzWFtpXV0sIHlba2V5c1lbaV1dKTtcblxuICAgICAgaWYgKHYgIT09IDApIHtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICByZXR1cm4gY29tcGFyZU5hdHVyYWw7XG59KTtcbi8qKlxuICogQ29tcGFyZSB0d28gY29tcGxleCBudW1iZXJzLCBgeGAgYW5kIGB5YDpcbiAqXG4gKiAtIEZpcnN0LCBjb21wYXJlIHRoZSByZWFsIHZhbHVlcyBvZiBgeGAgYW5kIGB5YFxuICogLSBJZiBlcXVhbCwgY29tcGFyZSB0aGUgaW1hZ2luYXJ5IHZhbHVlcyBvZiBgeGAgYW5kIGB5YFxuICpcbiAqIEBwYXJhbXMge0NvbXBsZXh9IHhcbiAqIEBwYXJhbXMge0NvbXBsZXh9IHlcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbXBhcmlzb24gcmVzdWx0OiAtMSwgMCwgb3IgMVxuICovXG5cbmV4cG9ydHMuY3JlYXRlQ29tcGFyZU5hdHVyYWwgPSBjcmVhdGVDb21wYXJlTmF0dXJhbDtcblxuZnVuY3Rpb24gY29tcGFyZUNvbXBsZXhOdW1iZXJzKHgsIHkpIHtcbiAgaWYgKHgucmUgPiB5LnJlKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICBpZiAoeC5yZSA8IHkucmUpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICBpZiAoeC5pbSA+IHkuaW0pIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIGlmICh4LmltIDwgeS5pbSkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIHJldHVybiAwO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb21wYXJlVGV4dE51bWJlciA9IGV4cG9ydHMuY3JlYXRlQ29tcGFyZVRleHQgPSB2b2lkIDA7XG5cbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3N0cmluZ1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYWxnb3JpdGhtID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgX2FsZ29yaXRobTIgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBuYW1lID0gJ2NvbXBhcmVUZXh0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCddO1xudmFyIGNyZWF0ZUNvbXBhcmVUZXh0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMTMgPSAoMCwgX2FsZ29yaXRobTIuY3JlYXRlQWxnb3JpdGhtMTMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtLmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogQ29tcGFyZSB0d28gc3RyaW5ncyBsZXhpY2FsbHkuIENvbXBhcmlzb24gaXMgY2FzZSBzZW5zaXRpdmUuXG4gICAqIFJldHVybnMgMSB3aGVuIHggPiB5LCAtMSB3aGVuIHggPCB5LCBhbmQgMCB3aGVuIHggPT0geS5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmNvbXBhcmVUZXh0KHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmNvbXBhcmVUZXh0KCdCJywgJ0EnKSAgICAgLy8gcmV0dXJucyAxXG4gICAqICAgIG1hdGguY29tcGFyZVRleHQoJzInLCAnMTAnKSAgICAvLyByZXR1cm5zIDFcbiAgICogICAgbWF0aC5jb21wYXJlKCcyJywgJzEwJykgICAgICAgIC8vIHJldHVybnMgLTFcbiAgICogICAgbWF0aC5jb21wYXJlTmF0dXJhbCgnMicsICcxMCcpIC8vIHJldHVybnMgLTFcbiAgICpcbiAgICogICAgbWF0aC5jb21wYXJlVGV4dCgnQicsIFsnQScsICdCJywgJ0MnXSkgLy8gcmV0dXJucyBbMSwgMCwgLTFdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBlcXVhbCwgZXF1YWxUZXh0LCBjb21wYXJlLCBjb21wYXJlTmF0dXJhbFxuICAgKlxuICAgKiBAcGFyYW0gIHtzdHJpbmcgfCBBcnJheSB8IERlbnNlTWF0cml4fSB4IEZpcnN0IHN0cmluZyB0byBjb21wYXJlXG4gICAqIEBwYXJhbSAge3N0cmluZyB8IEFycmF5IHwgRGVuc2VNYXRyaXh9IHkgU2Vjb25kIHN0cmluZyB0byBjb21wYXJlXG4gICAqIEByZXR1cm4ge251bWJlciB8IEFycmF5IHwgRGVuc2VNYXRyaXh9IFJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgY29tcGFyaXNvbjpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSB3aGVuIHggPiB5LCAtMSB3aGVuIHggPCB5LCBhbmQgMCB3aGVuIHggPT0geS5cbiAgICovXG5cbiAgdmFyIGNvbXBhcmVUZXh0ID0gdHlwZWQobmFtZSwge1xuICAgICdhbnksIGFueSc6IF9zdHJpbmcuY29tcGFyZVRleHQsXG4gICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIF9zdHJpbmcuY29tcGFyZVRleHQpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGNvbXBhcmVUZXh0KG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBjb21wYXJlVGV4dChtYXRyaXgoeCksIHkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gY29tcGFyZVRleHQoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIF9zdHJpbmcuY29tcGFyZVRleHQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdhbnksIERlbnNlTWF0cml4JzogZnVuY3Rpb24gYW55RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIF9zdHJpbmcuY29tcGFyZVRleHQsIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBhbnknOiBmdW5jdGlvbiBBcnJheUFueSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCBfc3RyaW5nLmNvbXBhcmVUZXh0LCBmYWxzZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ2FueSwgQXJyYXknOiBmdW5jdGlvbiBhbnlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCBfc3RyaW5nLmNvbXBhcmVUZXh0LCB0cnVlKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGNvbXBhcmVUZXh0O1xufSk7XG5leHBvcnRzLmNyZWF0ZUNvbXBhcmVUZXh0ID0gY3JlYXRlQ29tcGFyZVRleHQ7XG52YXIgY3JlYXRlQ29tcGFyZVRleHROdW1iZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgWyd0eXBlZCddLCBmdW5jdGlvbiAoX3JlZjIpIHtcbiAgdmFyIHR5cGVkID0gX3JlZjIudHlwZWQ7XG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ2FueSwgYW55JzogX3N0cmluZy5jb21wYXJlVGV4dFxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb21wYXJlVGV4dE51bWJlciA9IGNyZWF0ZUNvbXBhcmVUZXh0TnVtYmVyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVEZWVwRXF1YWwgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdkZWVwRXF1YWwnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnZXF1YWwnXTtcbnZhciBjcmVhdGVEZWVwRXF1YWwgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgZXF1YWwgPSBfcmVmLmVxdWFsO1xuXG4gIC8qKlxuICAgKiBUZXN0IGVsZW1lbnQgd2lzZSB3aGV0aGVyIHR3byBtYXRyaWNlcyBhcmUgZXF1YWwuXG4gICAqIFRoZSBmdW5jdGlvbiBhY2NlcHRzIGJvdGggbWF0cmljZXMgYW5kIHNjYWxhciB2YWx1ZXMuXG4gICAqXG4gICAqIFN0cmluZ3MgYXJlIGNvbXBhcmVkIGJ5IHRoZWlyIG51bWVyaWNhbCB2YWx1ZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmRlZXBFcXVhbCh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5kZWVwRXF1YWwoMiwgNCkgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqXG4gICAqICAgIGEgPSBbMiwgNSwgMV1cbiAgICogICAgYiA9IFsyLCA3LCAxXVxuICAgKlxuICAgKiAgICBtYXRoLmRlZXBFcXVhbChhLCBiKSAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5lcXVhbChhLCBiKSAgICAgICAvLyByZXR1cm5zIFt0cnVlLCBmYWxzZSwgdHJ1ZV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGVxdWFsLCB1bmVxdWFsXG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCBGaXJzdCBtYXRyaXggdG8gY29tcGFyZVxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHkgU2Vjb25kIG1hdHJpeCB0byBjb21wYXJlXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH1cbiAgICogICAgICAgICAgICBSZXR1cm5zIHRydWUgd2hlbiB0aGUgaW5wdXQgbWF0cmljZXMgaGF2ZSB0aGUgc2FtZSBzaXplIGFuZCBlYWNoIG9mIHRoZWlyIGVsZW1lbnRzIGlzIGVxdWFsLlxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnYW55LCBhbnknOiBmdW5jdGlvbiBhbnlBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIF9kZWVwRXF1YWwoeC52YWx1ZU9mKCksIHkudmFsdWVPZigpKTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIHR3byBhcnJheXMgaGF2ZSB0aGUgc2FtZSBzaXplIGFuZCBhbGwgZWxlbWVudHMgYXJlIGVxdWFsXG4gICAqIEBwYXJhbSB7QXJyYXkgfCAqfSB4XG4gICAqIEBwYXJhbSB7QXJyYXkgfCAqfSB5XG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiBib3RoIGFycmF5cyBhcmUgZGVlcCBlcXVhbFxuICAgKi9cblxuICBmdW5jdGlvbiBfZGVlcEVxdWFsKHgsIHkpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh4KSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoeSkpIHtcbiAgICAgICAgdmFyIGxlbiA9IHgubGVuZ3RoO1xuXG4gICAgICAgIGlmIChsZW4gIT09IHkubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGlmICghX2RlZXBFcXVhbCh4W2ldLCB5W2ldKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh5KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZXF1YWwoeCwgeSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlRGVlcEVxdWFsID0gY3JlYXRlRGVlcEVxdWFsOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVFcXVhbE51bWJlciA9IGV4cG9ydHMuY3JlYXRlRXF1YWwgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wM1wiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA3XCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTJcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xM1wiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgbmFtZSA9ICdlcXVhbCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnZXF1YWxTY2FsYXInLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVFcXVhbCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTAzID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMDMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNyA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0wNykoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMiA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIHR3byB2YWx1ZXMgYXJlIGVxdWFsLlxuICAgKlxuICAgKiBUaGUgZnVuY3Rpb24gdGVzdHMgd2hldGhlciB0aGUgcmVsYXRpdmUgZGlmZmVyZW5jZSBiZXR3ZWVuIHggYW5kIHkgaXNcbiAgICogc21hbGxlciB0aGFuIHRoZSBjb25maWd1cmVkIGVwc2lsb24uIFRoZSBmdW5jdGlvbiBjYW5ub3QgYmUgdXNlZCB0b1xuICAgKiBjb21wYXJlIHZhbHVlcyBzbWFsbGVyIHRoYW4gYXBwcm94aW1hdGVseSAyLjIyZS0xNi5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICogSW4gY2FzZSBvZiBjb21wbGV4IG51bWJlcnMsIHgucmUgbXVzdCBlcXVhbCB5LnJlLCBhbmQgeC5pbSBtdXN0IGVxdWFsIHkuaW0uXG4gICAqXG4gICAqIFZhbHVlcyBgbnVsbGAgYW5kIGB1bmRlZmluZWRgIGFyZSBjb21wYXJlZCBzdHJpY3RseSwgdGh1cyBgbnVsbGAgaXMgb25seVxuICAgKiBlcXVhbCB0byBgbnVsbGAgYW5kIG5vdGhpbmcgZWxzZSwgYW5kIGB1bmRlZmluZWRgIGlzIG9ubHkgZXF1YWwgdG9cbiAgICogYHVuZGVmaW5lZGAgYW5kIG5vdGhpbmcgZWxzZS4gU3RyaW5ncyBhcmUgY29tcGFyZWQgYnkgdGhlaXIgbnVtZXJpY2FsIHZhbHVlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguZXF1YWwoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguZXF1YWwoMiArIDIsIDMpICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmVxdWFsKDIgKyAyLCA0KSAgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKlxuICAgKiAgICBjb25zdCBhID0gbWF0aC51bml0KCc1MCBjbScpXG4gICAqICAgIGNvbnN0IGIgPSBtYXRoLnVuaXQoJzUgbScpXG4gICAqICAgIG1hdGguZXF1YWwoYSwgYikgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqXG4gICAqICAgIGNvbnN0IGMgPSBbMiwgNSwgMV1cbiAgICogICAgY29uc3QgZCA9IFsyLCA3LCAxXVxuICAgKlxuICAgKiAgICBtYXRoLmVxdWFsKGMsIGQpICAgICAgICAgICAgIC8vIHJldHVybnMgW3RydWUsIGZhbHNlLCB0cnVlXVxuICAgKiAgICBtYXRoLmRlZXBFcXVhbChjLCBkKSAgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICpcbiAgICogICAgbWF0aC5lcXVhbChcIjEwMDBcIiwgXCIxZTNcIikgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguZXF1YWwoMCwgbnVsbCkgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgdW5lcXVhbCwgc21hbGxlciwgc21hbGxlckVxLCBsYXJnZXIsIGxhcmdlckVxLCBjb21wYXJlLCBkZWVwRXF1YWwsIGVxdWFsVGV4dFxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBib29sZWFuIHwgQ29tcGxleCB8IFVuaXQgfCBzdHJpbmcgfCBBcnJheSB8IE1hdHJpeH0geCBGaXJzdCB2YWx1ZSB0byBjb21wYXJlXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IGJvb2xlYW4gfCBDb21wbGV4IHwgVW5pdCB8IHN0cmluZyB8IEFycmF5IHwgTWF0cml4fSB5IFNlY29uZCB2YWx1ZSB0byBjb21wYXJlXG4gICAqIEByZXR1cm4ge2Jvb2xlYW4gfCBBcnJheSB8IE1hdHJpeH0gUmV0dXJucyB0cnVlIHdoZW4gdGhlIGNvbXBhcmVkIHZhbHVlcyBhcmUgZXF1YWwsIGVsc2UgcmV0dXJucyBmYWxzZVxuICAgKi9cblxuICB2YXIgZXF1YWwgPSB0eXBlZChuYW1lLCB7XG4gICAgJ2FueSwgYW55JzogZnVuY3Rpb24gYW55QW55KHgsIHkpIHtcbiAgICAgIC8vIHN0cmljdCBlcXVhbGl0eSBmb3IgbnVsbCBhbmQgdW5kZWZpbmVkP1xuICAgICAgaWYgKHggPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHkgPT09IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICh5ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB4ID09PSBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAoeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB5ID09PSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHggPT09IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGVxdWFsU2NhbGFyKHgsIHkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wNyh4LCB5LCBlcXVhbFNjYWxhcik7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh5LCB4LCBlcXVhbFNjYWxhciwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh4LCB5LCBlcXVhbFNjYWxhciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIGVxdWFsU2NhbGFyKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBlcXVhbChtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gZXF1YWwobWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGVxdWFsKHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEyKHgsIHksIGVxdWFsU2NhbGFyLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIERlbnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBlcXVhbFNjYWxhciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ2FueSwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gYW55U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih5LCB4LCBlcXVhbFNjYWxhciwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnYW55LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIGFueURlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCBlcXVhbFNjYWxhciwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIGFueSc6IGZ1bmN0aW9uIEFycmF5QW55KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeCksIHksIGVxdWFsU2NhbGFyLCBmYWxzZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ2FueSwgQXJyYXknOiBmdW5jdGlvbiBhbnlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCBlcXVhbFNjYWxhciwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBlcXVhbDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVFcXVhbCA9IGNyZWF0ZUVxdWFsO1xudmFyIGNyZWF0ZUVxdWFsTnVtYmVyID0gKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIFsndHlwZWQnLCAnZXF1YWxTY2FsYXInXSwgZnVuY3Rpb24gKF9yZWYyKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYyLnR5cGVkLFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmMi5lcXVhbFNjYWxhcjtcbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnYW55LCBhbnknOiBmdW5jdGlvbiBhbnlBbnkoeCwgeSkge1xuICAgICAgLy8gc3RyaWN0IGVxdWFsaXR5IGZvciBudWxsIGFuZCB1bmRlZmluZWQ/XG4gICAgICBpZiAoeCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4geSA9PT0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHkgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHggPT09IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHkgPT09IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4geCA9PT0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZXF1YWxTY2FsYXIoeCwgeSk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVFcXVhbE51bWJlciA9IGNyZWF0ZUVxdWFsTnVtYmVyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVFcXVhbFNjYWxhck51bWJlciA9IGV4cG9ydHMuY3JlYXRlRXF1YWxTY2FsYXIgPSB2b2lkIDA7XG5cbnZhciBfbmVhcmx5RXF1YWwgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYmlnbnVtYmVyL25lYXJseUVxdWFsXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbXBsZXggPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29tcGxleFwiKTtcblxudmFyIG5hbWUgPSAnZXF1YWxTY2FsYXInO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJ107XG52YXIgY3JlYXRlRXF1YWxTY2FsYXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWc7XG5cbiAgLyoqXG4gICAqIFRlc3Qgd2hldGhlciB0d28gc2NhbGFyIHZhbHVlcyBhcmUgbmVhcmx5IGVxdWFsLlxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IGJvb2xlYW4gfCBDb21wbGV4IHwgVW5pdH0geCAgIEZpcnN0IHZhbHVlIHRvIGNvbXBhcmVcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBib29sZWFuIHwgQ29tcGxleH0geSAgICAgICAgICBTZWNvbmQgdmFsdWUgdG8gY29tcGFyZVxuICAgKiBAcmV0dXJuIHtib29sZWFufSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmV0dXJucyB0cnVlIHdoZW4gdGhlIGNvbXBhcmVkIHZhbHVlcyBhcmUgZXF1YWwsIGVsc2UgcmV0dXJucyBmYWxzZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdmFyIGVxdWFsU2NhbGFyID0gdHlwZWQobmFtZSwge1xuICAgICdib29sZWFuLCBib29sZWFuJzogZnVuY3Rpb24gYm9vbGVhbkJvb2xlYW4oeCwgeSkge1xuICAgICAgcmV0dXJuIHggPT09IHk7XG4gICAgfSxcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuICgwLCBfbnVtYmVyLm5lYXJseUVxdWFsKSh4LCB5LCBjb25maWcuZXBzaWxvbik7XG4gICAgfSxcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIHguZXEoeSkgfHwgKDAsIF9uZWFybHlFcXVhbC5uZWFybHlFcXVhbCkoeCwgeSwgY29uZmlnLmVwc2lsb24pO1xuICAgIH0sXG4gICAgJ0ZyYWN0aW9uLCBGcmFjdGlvbic6IGZ1bmN0aW9uIEZyYWN0aW9uRnJhY3Rpb24oeCwgeSkge1xuICAgICAgcmV0dXJuIHguZXF1YWxzKHkpO1xuICAgIH0sXG4gICAgJ0NvbXBsZXgsIENvbXBsZXgnOiBmdW5jdGlvbiBDb21wbGV4Q29tcGxleCh4LCB5KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb21wbGV4LmNvbXBsZXhFcXVhbHMpKHgsIHksIGNvbmZpZy5lcHNpbG9uKTtcbiAgICB9LFxuICAgICdVbml0LCBVbml0JzogZnVuY3Rpb24gVW5pdFVuaXQoeCwgeSkge1xuICAgICAgaWYgKCF4LmVxdWFsQmFzZSh5KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb21wYXJlIHVuaXRzIHdpdGggZGlmZmVyZW50IGJhc2UnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGVxdWFsU2NhbGFyKHgudmFsdWUsIHkudmFsdWUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBlcXVhbFNjYWxhcjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVFcXVhbFNjYWxhciA9IGNyZWF0ZUVxdWFsU2NhbGFyO1xudmFyIGNyZWF0ZUVxdWFsU2NhbGFyTnVtYmVyID0gKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIFsndHlwZWQnLCAnY29uZmlnJ10sIGZ1bmN0aW9uIChfcmVmMikge1xuICB2YXIgdHlwZWQgPSBfcmVmMi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYyLmNvbmZpZztcbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuICgwLCBfbnVtYmVyLm5lYXJseUVxdWFsKSh4LCB5LCBjb25maWcuZXBzaWxvbik7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVFcXVhbFNjYWxhck51bWJlciA9IGNyZWF0ZUVxdWFsU2NhbGFyTnVtYmVyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVFcXVhbFRleHQgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdlcXVhbFRleHQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29tcGFyZVRleHQnLCAnaXNaZXJvJ107XG52YXIgY3JlYXRlRXF1YWxUZXh0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbXBhcmVUZXh0ID0gX3JlZi5jb21wYXJlVGV4dCxcbiAgICAgIGlzWmVybyA9IF9yZWYuaXNaZXJvO1xuXG4gIC8qKlxuICAgKiBDaGVjayBlcXVhbGl0eSBvZiB0d28gc3RyaW5ncy4gQ29tcGFyaXNvbiBpcyBjYXNlIHNlbnNpdGl2ZS5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmVxdWFsVGV4dCh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5lcXVhbFRleHQoJ0hlbGxvJywgJ0hlbGxvJykgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmVxdWFsVGV4dCgnYScsICdBJykgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmVxdWFsKCcyZTMnLCAnMjAwMCcpICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguZXF1YWxUZXh0KCcyZTMnLCAnMjAwMCcpICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqXG4gICAqICAgIG1hdGguZXF1YWxUZXh0KCdCJywgWydBJywgJ0InLCAnQyddKSAvLyByZXR1cm5zIFtmYWxzZSwgdHJ1ZSwgZmFsc2VdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBlcXVhbCwgY29tcGFyZVRleHQsIGNvbXBhcmUsIGNvbXBhcmVOYXR1cmFsXG4gICAqXG4gICAqIEBwYXJhbSAge3N0cmluZyB8IEFycmF5IHwgRGVuc2VNYXRyaXh9IHggRmlyc3Qgc3RyaW5nIHRvIGNvbXBhcmVcbiAgICogQHBhcmFtICB7c3RyaW5nIHwgQXJyYXkgfCBEZW5zZU1hdHJpeH0geSBTZWNvbmQgc3RyaW5nIHRvIGNvbXBhcmVcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQXJyYXkgfCBEZW5zZU1hdHJpeH0gUmV0dXJucyB0cnVlIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWFsLCBhbmQgZmFsc2UgaWYgbm90LlxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnYW55LCBhbnknOiBmdW5jdGlvbiBhbnlBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGlzWmVybyhjb21wYXJlVGV4dCh4LCB5KSk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVFcXVhbFRleHQgPSBjcmVhdGVFcXVhbFRleHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUxhcmdlck51bWJlciA9IGV4cG9ydHMuY3JlYXRlTGFyZ2VyID0gdm9pZCAwO1xuXG52YXIgX25lYXJseUVxdWFsID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2JpZ251bWJlci9uZWFybHlFcXVhbFwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDNcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wN1wiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEyXCIpO1xuXG52YXIgX2FsZ29yaXRobTQgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBfYWxnb3JpdGhtNSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xM1wiKTtcblxudmFyIG5hbWUgPSAnbGFyZ2VyJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdtYXRyaXgnLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVMYXJnZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTAzID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMDMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNyA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0wNykoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMiA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtNS5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIHZhbHVlIHggaXMgbGFyZ2VyIHRoYW4geS5cbiAgICpcbiAgICogVGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIHggaXMgbGFyZ2VyIHRoYW4geSBhbmQgdGhlIHJlbGF0aXZlXG4gICAqIGRpZmZlcmVuY2UgYmV0d2VlbiB4IGFuZCB5IGlzIGxhcmdlciB0aGFuIHRoZSBjb25maWd1cmVkIGVwc2lsb24uIFRoZVxuICAgKiBmdW5jdGlvbiBjYW5ub3QgYmUgdXNlZCB0byBjb21wYXJlIHZhbHVlcyBzbWFsbGVyIHRoYW4gYXBwcm94aW1hdGVseSAyLjIyZS0xNi5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICogU3RyaW5ncyBhcmUgY29tcGFyZWQgYnkgdGhlaXIgbnVtZXJpY2FsIHZhbHVlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgubGFyZ2VyKHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmxhcmdlcigyLCAzKSAgICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGgubGFyZ2VyKDUsIDIgKyAyKSAgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKlxuICAgKiAgICBjb25zdCBhID0gbWF0aC51bml0KCc1IGNtJylcbiAgICogICAgY29uc3QgYiA9IG1hdGgudW5pdCgnMiBpbmNoJylcbiAgICogICAgbWF0aC5sYXJnZXIoYSwgYikgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgZXF1YWwsIHVuZXF1YWwsIHNtYWxsZXIsIHNtYWxsZXJFcSwgbGFyZ2VyRXEsIGNvbXBhcmVcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBib29sZWFuIHwgVW5pdCB8IHN0cmluZyB8IEFycmF5IHwgTWF0cml4fSB4IEZpcnN0IHZhbHVlIHRvIGNvbXBhcmVcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBib29sZWFuIHwgVW5pdCB8IHN0cmluZyB8IEFycmF5IHwgTWF0cml4fSB5IFNlY29uZCB2YWx1ZSB0byBjb21wYXJlXG4gICAqIEByZXR1cm4ge2Jvb2xlYW4gfCBBcnJheSB8IE1hdHJpeH0gUmV0dXJucyB0cnVlIHdoZW4gdGhlIHggaXMgbGFyZ2VyIHRoYW4geSwgZWxzZSByZXR1cm5zIGZhbHNlXG4gICAqL1xuXG4gIHZhciBsYXJnZXIgPSB0eXBlZChuYW1lLCB7XG4gICAgJ2Jvb2xlYW4sIGJvb2xlYW4nOiBmdW5jdGlvbiBib29sZWFuQm9vbGVhbih4LCB5KSB7XG4gICAgICByZXR1cm4geCA+IHk7XG4gICAgfSxcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIHggPiB5ICYmICEoMCwgX251bWJlci5uZWFybHlFcXVhbCkoeCwgeSwgY29uZmlnLmVwc2lsb24pO1xuICAgIH0sXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQmlnTnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiB4Lmd0KHkpICYmICEoMCwgX25lYXJseUVxdWFsLm5lYXJseUVxdWFsKSh4LCB5LCBjb25maWcuZXBzaWxvbik7XG4gICAgfSxcbiAgICAnRnJhY3Rpb24sIEZyYWN0aW9uJzogZnVuY3Rpb24gRnJhY3Rpb25GcmFjdGlvbih4LCB5KSB7XG4gICAgICByZXR1cm4geC5jb21wYXJlKHkpID09PSAxO1xuICAgIH0sXG4gICAgJ0NvbXBsZXgsIENvbXBsZXgnOiBmdW5jdGlvbiBDb21wbGV4Q29tcGxleCgpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIG9yZGVyaW5nIHJlbGF0aW9uIGlzIGRlZmluZWQgZm9yIGNvbXBsZXggbnVtYmVycycpO1xuICAgIH0sXG4gICAgJ1VuaXQsIFVuaXQnOiBmdW5jdGlvbiBVbml0VW5pdCh4LCB5KSB7XG4gICAgICBpZiAoIXguZXF1YWxCYXNlKHkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbXBhcmUgdW5pdHMgd2l0aCBkaWZmZXJlbnQgYmFzZScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGFyZ2VyKHgudmFsdWUsIHkudmFsdWUpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wNyh4LCB5LCBsYXJnZXIpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeSwgeCwgbGFyZ2VyLCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHgsIHksIGxhcmdlciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIGxhcmdlcik7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gbGFyZ2VyKG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBsYXJnZXIobWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGxhcmdlcih4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih4LCB5LCBsYXJnZXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIGxhcmdlciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ2FueSwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gYW55U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih5LCB4LCBsYXJnZXIsIHRydWUpO1xuICAgIH0sXG4gICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgbGFyZ2VyLCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgbGFyZ2VyLCBmYWxzZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ2FueSwgQXJyYXknOiBmdW5jdGlvbiBhbnlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCBsYXJnZXIsIHRydWUpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbGFyZ2VyO1xufSk7XG5leHBvcnRzLmNyZWF0ZUxhcmdlciA9IGNyZWF0ZUxhcmdlcjtcbnZhciBjcmVhdGVMYXJnZXJOdW1iZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgWyd0eXBlZCcsICdjb25maWcnXSwgZnVuY3Rpb24gKF9yZWYyKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYyLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZjIuY29uZmlnO1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geCA+IHkgJiYgISgwLCBfbnVtYmVyLm5lYXJseUVxdWFsKSh4LCB5LCBjb25maWcuZXBzaWxvbik7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVMYXJnZXJOdW1iZXIgPSBjcmVhdGVMYXJnZXJOdW1iZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUxhcmdlckVxTnVtYmVyID0gZXhwb3J0cy5jcmVhdGVMYXJnZXJFcSA9IHZvaWQgMDtcblxudmFyIF9uZWFybHlFcXVhbCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9iaWdudW1iZXIvbmVhcmx5RXF1YWxcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYWxnb3JpdGhtID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAzXCIpO1xuXG52YXIgX2FsZ29yaXRobTIgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDdcIik7XG5cbnZhciBfYWxnb3JpdGhtMyA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMlwiKTtcblxudmFyIF9hbGdvcml0aG00ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgX2FsZ29yaXRobTUgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBuYW1lID0gJ2xhcmdlckVxJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdtYXRyaXgnLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVMYXJnZXJFcSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMDMgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTA3ID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTA3KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEyID0gKDAsIF9hbGdvcml0aG0zLmNyZWF0ZUFsZ29yaXRobTEyKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEzID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTEzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTQuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBUZXN0IHdoZXRoZXIgdmFsdWUgeCBpcyBsYXJnZXIgb3IgZXF1YWwgdG8geS5cbiAgICpcbiAgICogVGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIHggaXMgbGFyZ2VyIHRoYW4geSBvciB0aGUgcmVsYXRpdmVcbiAgICogZGlmZmVyZW5jZSBiZXR3ZWVuIHggYW5kIHkgaXMgc21hbGxlciB0aGFuIHRoZSBjb25maWd1cmVkIGVwc2lsb24uIFRoZVxuICAgKiBmdW5jdGlvbiBjYW5ub3QgYmUgdXNlZCB0byBjb21wYXJlIHZhbHVlcyBzbWFsbGVyIHRoYW4gYXBwcm94aW1hdGVseSAyLjIyZS0xNi5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICogU3RyaW5ncyBhcmUgY29tcGFyZWQgYnkgdGhlaXIgbnVtZXJpY2FsIHZhbHVlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgubGFyZ2VyRXEoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgubGFyZ2VyKDIsIDEgKyAxKSAgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5sYXJnZXJFcSgyLCAxICsgMSkgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBlcXVhbCwgdW5lcXVhbCwgc21hbGxlciwgc21hbGxlckVxLCBsYXJnZXIsIGNvbXBhcmVcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBib29sZWFuIHwgVW5pdCB8IHN0cmluZyB8IEFycmF5IHwgTWF0cml4fSB4IEZpcnN0IHZhbHVlIHRvIGNvbXBhcmVcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBib29sZWFuIHwgVW5pdCB8IHN0cmluZyB8IEFycmF5IHwgTWF0cml4fSB5IFNlY29uZCB2YWx1ZSB0byBjb21wYXJlXG4gICAqIEByZXR1cm4ge2Jvb2xlYW4gfCBBcnJheSB8IE1hdHJpeH0gUmV0dXJucyB0cnVlIHdoZW4gdGhlIHggaXMgbGFyZ2VyIG9yIGVxdWFsIHRvIHksIGVsc2UgcmV0dXJucyBmYWxzZVxuICAgKi9cblxuICB2YXIgbGFyZ2VyRXEgPSB0eXBlZChuYW1lLCB7XG4gICAgJ2Jvb2xlYW4sIGJvb2xlYW4nOiBmdW5jdGlvbiBib29sZWFuQm9vbGVhbih4LCB5KSB7XG4gICAgICByZXR1cm4geCA+PSB5O1xuICAgIH0sXG4gICAgJ251bWJlciwgbnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiB4ID49IHkgfHwgKDAsIF9udW1iZXIubmVhcmx5RXF1YWwpKHgsIHksIGNvbmZpZy5lcHNpbG9uKTtcbiAgICB9LFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IGZ1bmN0aW9uIEJpZ051bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geC5ndGUoeSkgfHwgKDAsIF9uZWFybHlFcXVhbC5uZWFybHlFcXVhbCkoeCwgeSwgY29uZmlnLmVwc2lsb24pO1xuICAgIH0sXG4gICAgJ0ZyYWN0aW9uLCBGcmFjdGlvbic6IGZ1bmN0aW9uIEZyYWN0aW9uRnJhY3Rpb24oeCwgeSkge1xuICAgICAgcmV0dXJuIHguY29tcGFyZSh5KSAhPT0gLTE7XG4gICAgfSxcbiAgICAnQ29tcGxleCwgQ29tcGxleCc6IGZ1bmN0aW9uIENvbXBsZXhDb21wbGV4KCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gb3JkZXJpbmcgcmVsYXRpb24gaXMgZGVmaW5lZCBmb3IgY29tcGxleCBudW1iZXJzJyk7XG4gICAgfSxcbiAgICAnVW5pdCwgVW5pdCc6IGZ1bmN0aW9uIFVuaXRVbml0KHgsIHkpIHtcbiAgICAgIGlmICgheC5lcXVhbEJhc2UoeSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY29tcGFyZSB1bml0cyB3aXRoIGRpZmZlcmVudCBiYXNlJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBsYXJnZXJFcSh4LnZhbHVlLCB5LnZhbHVlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDcoeCwgeSwgbGFyZ2VyRXEpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeSwgeCwgbGFyZ2VyRXEsIHRydWUpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeCwgeSwgbGFyZ2VyRXEsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBsYXJnZXJFcSk7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gbGFyZ2VyRXEobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGxhcmdlckVxKG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBsYXJnZXJFcSh4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih4LCB5LCBsYXJnZXJFcSwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBEZW5zZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgbGFyZ2VyRXEsIGZhbHNlKTtcbiAgICB9LFxuICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeSwgeCwgbGFyZ2VyRXEsIHRydWUpO1xuICAgIH0sXG4gICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgbGFyZ2VyRXEsIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBhbnknOiBmdW5jdGlvbiBBcnJheUFueSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCBsYXJnZXJFcSwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgbGFyZ2VyRXEsIHRydWUpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbGFyZ2VyRXE7XG59KTtcbmV4cG9ydHMuY3JlYXRlTGFyZ2VyRXEgPSBjcmVhdGVMYXJnZXJFcTtcbnZhciBjcmVhdGVMYXJnZXJFcU51bWJlciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBbJ3R5cGVkJywgJ2NvbmZpZyddLCBmdW5jdGlvbiAoX3JlZjIpIHtcbiAgdmFyIHR5cGVkID0gX3JlZjIudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmMi5jb25maWc7XG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciwgbnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiB4ID49IHkgfHwgKDAsIF9udW1iZXIubmVhcmx5RXF1YWwpKHgsIHksIGNvbmZpZy5lcHNpbG9uKTtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZUxhcmdlckVxTnVtYmVyID0gY3JlYXRlTGFyZ2VyRXFOdW1iZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNtYWxsZXJOdW1iZXIgPSBleHBvcnRzLmNyZWF0ZVNtYWxsZXIgPSB2b2lkIDA7XG5cbnZhciBfbmVhcmx5RXF1YWwgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYmlnbnVtYmVyL25lYXJseUVxdWFsXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wM1wiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA3XCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTJcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgbmFtZSA9ICdzbWFsbGVyJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdtYXRyaXgnLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVTbWFsbGVyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXg7XG4gIHZhciBhbGdvcml0aG0wMyA9ICgwLCBfYWxnb3JpdGhtLmNyZWF0ZUFsZ29yaXRobTAzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMDcgPSAoMCwgX2FsZ29yaXRobTIuY3JlYXRlQWxnb3JpdGhtMDcpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4XG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTIgPSAoMCwgX2FsZ29yaXRobTMuY3JlYXRlQWxnb3JpdGhtMTIpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4XG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTMgPSAoMCwgX2FsZ29yaXRobTUuY3JlYXRlQWxnb3JpdGhtMTMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0xNCkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgLyoqXG4gICAqIFRlc3Qgd2hldGhlciB2YWx1ZSB4IGlzIHNtYWxsZXIgdGhhbiB5LlxuICAgKlxuICAgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4geCBpcyBzbWFsbGVyIHRoYW4geSBhbmQgdGhlIHJlbGF0aXZlXG4gICAqIGRpZmZlcmVuY2UgYmV0d2VlbiB4IGFuZCB5IGlzIHNtYWxsZXIgdGhhbiB0aGUgY29uZmlndXJlZCBlcHNpbG9uLiBUaGVcbiAgICogZnVuY3Rpb24gY2Fubm90IGJlIHVzZWQgdG8gY29tcGFyZSB2YWx1ZXMgc21hbGxlciB0aGFuIGFwcHJveGltYXRlbHkgMi4yMmUtMTYuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqIFN0cmluZ3MgYXJlIGNvbXBhcmVkIGJ5IHRoZWlyIG51bWVyaWNhbCB2YWx1ZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnNtYWxsZXIoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguc21hbGxlcigyLCAzKSAgICAgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLnNtYWxsZXIoNSwgMiAqIDIpICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqXG4gICAqICAgIGNvbnN0IGEgPSBtYXRoLnVuaXQoJzUgY20nKVxuICAgKiAgICBjb25zdCBiID0gbWF0aC51bml0KCcyIGluY2gnKVxuICAgKiAgICBtYXRoLnNtYWxsZXIoYSwgYikgICAgICAgICAgICAvLyByZXR1cm5zIHRydWVcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGVxdWFsLCB1bmVxdWFsLCBzbWFsbGVyRXEsIHNtYWxsZXIsIHNtYWxsZXJFcSwgY29tcGFyZVxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IGJvb2xlYW4gfCBVbml0IHwgc3RyaW5nIHwgQXJyYXkgfCBNYXRyaXh9IHggRmlyc3QgdmFsdWUgdG8gY29tcGFyZVxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IGJvb2xlYW4gfCBVbml0IHwgc3RyaW5nIHwgQXJyYXkgfCBNYXRyaXh9IHkgU2Vjb25kIHZhbHVlIHRvIGNvbXBhcmVcbiAgICogQHJldHVybiB7Ym9vbGVhbiB8IEFycmF5IHwgTWF0cml4fSBSZXR1cm5zIHRydWUgd2hlbiB0aGUgeCBpcyBzbWFsbGVyIHRoYW4geSwgZWxzZSByZXR1cm5zIGZhbHNlXG4gICAqL1xuXG4gIHZhciBzbWFsbGVyID0gdHlwZWQobmFtZSwge1xuICAgICdib29sZWFuLCBib29sZWFuJzogZnVuY3Rpb24gYm9vbGVhbkJvb2xlYW4oeCwgeSkge1xuICAgICAgcmV0dXJuIHggPCB5O1xuICAgIH0sXG4gICAgJ251bWJlciwgbnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiB4IDwgeSAmJiAhKDAsIF9udW1iZXIubmVhcmx5RXF1YWwpKHgsIHksIGNvbmZpZy5lcHNpbG9uKTtcbiAgICB9LFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IGZ1bmN0aW9uIEJpZ051bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geC5sdCh5KSAmJiAhKDAsIF9uZWFybHlFcXVhbC5uZWFybHlFcXVhbCkoeCwgeSwgY29uZmlnLmVwc2lsb24pO1xuICAgIH0sXG4gICAgJ0ZyYWN0aW9uLCBGcmFjdGlvbic6IGZ1bmN0aW9uIEZyYWN0aW9uRnJhY3Rpb24oeCwgeSkge1xuICAgICAgcmV0dXJuIHguY29tcGFyZSh5KSA9PT0gLTE7XG4gICAgfSxcbiAgICAnQ29tcGxleCwgQ29tcGxleCc6IGZ1bmN0aW9uIENvbXBsZXhDb21wbGV4KHgsIHkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIG9yZGVyaW5nIHJlbGF0aW9uIGlzIGRlZmluZWQgZm9yIGNvbXBsZXggbnVtYmVycycpO1xuICAgIH0sXG4gICAgJ1VuaXQsIFVuaXQnOiBmdW5jdGlvbiBVbml0VW5pdCh4LCB5KSB7XG4gICAgICBpZiAoIXguZXF1YWxCYXNlKHkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbXBhcmUgdW5pdHMgd2l0aCBkaWZmZXJlbnQgYmFzZScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc21hbGxlcih4LnZhbHVlLCB5LnZhbHVlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDcoeCwgeSwgc21hbGxlcik7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh5LCB4LCBzbWFsbGVyLCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHgsIHksIHNtYWxsZXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBzbWFsbGVyKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBzbWFsbGVyKG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBzbWFsbGVyKG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBzbWFsbGVyKHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEyKHgsIHksIHNtYWxsZXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIHNtYWxsZXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeSwgeCwgc21hbGxlciwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnYW55LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIGFueURlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCBzbWFsbGVyLCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgc21hbGxlciwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgc21hbGxlciwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBzbWFsbGVyO1xufSk7XG5leHBvcnRzLmNyZWF0ZVNtYWxsZXIgPSBjcmVhdGVTbWFsbGVyO1xudmFyIGNyZWF0ZVNtYWxsZXJOdW1iZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgWyd0eXBlZCcsICdjb25maWcnXSwgZnVuY3Rpb24gKF9yZWYyKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYyLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZjIuY29uZmlnO1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geCA8IHkgJiYgISgwLCBfbnVtYmVyLm5lYXJseUVxdWFsKSh4LCB5LCBjb25maWcuZXBzaWxvbik7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTbWFsbGVyTnVtYmVyID0gY3JlYXRlU21hbGxlck51bWJlcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU21hbGxlckVxTnVtYmVyID0gZXhwb3J0cy5jcmVhdGVTbWFsbGVyRXEgPSB2b2lkIDA7XG5cbnZhciBfbmVhcmx5RXF1YWwgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYmlnbnVtYmVyL25lYXJseUVxdWFsXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wM1wiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA3XCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTJcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgbmFtZSA9ICdzbWFsbGVyRXEnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ21hdHJpeCcsICdEZW5zZU1hdHJpeCddO1xudmFyIGNyZWF0ZVNtYWxsZXJFcSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMDMgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTA3ID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTA3KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEyID0gKDAsIF9hbGdvcml0aG0zLmNyZWF0ZUFsZ29yaXRobTEyKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEzID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTEzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTQuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBUZXN0IHdoZXRoZXIgdmFsdWUgeCBpcyBzbWFsbGVyIG9yIGVxdWFsIHRvIHkuXG4gICAqXG4gICAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiB4IGlzIHNtYWxsZXIgdGhhbiB5IG9yIHRoZSByZWxhdGl2ZVxuICAgKiBkaWZmZXJlbmNlIGJldHdlZW4geCBhbmQgeSBpcyBzbWFsbGVyIHRoYW4gdGhlIGNvbmZpZ3VyZWQgZXBzaWxvbi4gVGhlXG4gICAqIGZ1bmN0aW9uIGNhbm5vdCBiZSB1c2VkIHRvIGNvbXBhcmUgdmFsdWVzIHNtYWxsZXIgdGhhbiBhcHByb3hpbWF0ZWx5IDIuMjJlLTE2LlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKiBTdHJpbmdzIGFyZSBjb21wYXJlZCBieSB0aGVpciBudW1lcmljYWwgdmFsdWUuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5zbWFsbGVyRXEoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguc21hbGxlcigxICsgMiwgMykgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5zbWFsbGVyRXEoMSArIDIsIDMpICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBlcXVhbCwgdW5lcXVhbCwgc21hbGxlciwgbGFyZ2VyLCBsYXJnZXJFcSwgY29tcGFyZVxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IGJvb2xlYW4gfCBVbml0IHwgc3RyaW5nIHwgQXJyYXkgfCBNYXRyaXh9IHggRmlyc3QgdmFsdWUgdG8gY29tcGFyZVxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IGJvb2xlYW4gfCBVbml0IHwgc3RyaW5nIHwgQXJyYXkgfCBNYXRyaXh9IHkgU2Vjb25kIHZhbHVlIHRvIGNvbXBhcmVcbiAgICogQHJldHVybiB7Ym9vbGVhbiB8IEFycmF5IHwgTWF0cml4fSBSZXR1cm5zIHRydWUgd2hlbiB0aGUgeCBpcyBzbWFsbGVyIHRoYW4geSwgZWxzZSByZXR1cm5zIGZhbHNlXG4gICAqL1xuXG4gIHZhciBzbWFsbGVyRXEgPSB0eXBlZChuYW1lLCB7XG4gICAgJ2Jvb2xlYW4sIGJvb2xlYW4nOiBmdW5jdGlvbiBib29sZWFuQm9vbGVhbih4LCB5KSB7XG4gICAgICByZXR1cm4geCA8PSB5O1xuICAgIH0sXG4gICAgJ251bWJlciwgbnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiB4IDw9IHkgfHwgKDAsIF9udW1iZXIubmVhcmx5RXF1YWwpKHgsIHksIGNvbmZpZy5lcHNpbG9uKTtcbiAgICB9LFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IGZ1bmN0aW9uIEJpZ051bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geC5sdGUoeSkgfHwgKDAsIF9uZWFybHlFcXVhbC5uZWFybHlFcXVhbCkoeCwgeSwgY29uZmlnLmVwc2lsb24pO1xuICAgIH0sXG4gICAgJ0ZyYWN0aW9uLCBGcmFjdGlvbic6IGZ1bmN0aW9uIEZyYWN0aW9uRnJhY3Rpb24oeCwgeSkge1xuICAgICAgcmV0dXJuIHguY29tcGFyZSh5KSAhPT0gMTtcbiAgICB9LFxuICAgICdDb21wbGV4LCBDb21wbGV4JzogZnVuY3Rpb24gQ29tcGxleENvbXBsZXgoKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBvcmRlcmluZyByZWxhdGlvbiBpcyBkZWZpbmVkIGZvciBjb21wbGV4IG51bWJlcnMnKTtcbiAgICB9LFxuICAgICdVbml0LCBVbml0JzogZnVuY3Rpb24gVW5pdFVuaXQoeCwgeSkge1xuICAgICAgaWYgKCF4LmVxdWFsQmFzZSh5KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb21wYXJlIHVuaXRzIHdpdGggZGlmZmVyZW50IGJhc2UnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNtYWxsZXJFcSh4LnZhbHVlLCB5LnZhbHVlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDcoeCwgeSwgc21hbGxlckVxKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHksIHgsIHNtYWxsZXJFcSwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh4LCB5LCBzbWFsbGVyRXEsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBzbWFsbGVyRXEpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHNtYWxsZXJFcShtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gc21hbGxlckVxKG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBzbWFsbGVyRXEoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeCwgeSwgc21hbGxlckVxLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIERlbnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBzbWFsbGVyRXEsIGZhbHNlKTtcbiAgICB9LFxuICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeSwgeCwgc21hbGxlckVxLCB0cnVlKTtcbiAgICB9LFxuICAgICdhbnksIERlbnNlTWF0cml4JzogZnVuY3Rpb24gYW55RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIHNtYWxsZXJFcSwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIGFueSc6IGZ1bmN0aW9uIEFycmF5QW55KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeCksIHksIHNtYWxsZXJFcSwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgc21hbGxlckVxLCB0cnVlKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHNtYWxsZXJFcTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTbWFsbGVyRXEgPSBjcmVhdGVTbWFsbGVyRXE7XG52YXIgY3JlYXRlU21hbGxlckVxTnVtYmVyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIFsndHlwZWQnLCAnY29uZmlnJ10sIGZ1bmN0aW9uIChfcmVmMikge1xuICB2YXIgdHlwZWQgPSBfcmVmMi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYyLmNvbmZpZztcbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIHggPD0geSB8fCAoMCwgX251bWJlci5uZWFybHlFcXVhbCkoeCwgeSwgY29uZmlnLmVwc2lsb24pO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlU21hbGxlckVxTnVtYmVyID0gY3JlYXRlU21hbGxlckVxTnVtYmVyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVVbmVxdWFsTnVtYmVyID0gZXhwb3J0cy5jcmVhdGVVbmVxdWFsID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDNcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wN1wiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEyXCIpO1xuXG52YXIgX2FsZ29yaXRobTQgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBfYWxnb3JpdGhtNSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xM1wiKTtcblxudmFyIG5hbWUgPSAndW5lcXVhbCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnZXF1YWxTY2FsYXInLCAnbWF0cml4JywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlVW5lcXVhbCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMDMgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTA3ID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTA3KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEyID0gKDAsIF9hbGdvcml0aG0zLmNyZWF0ZUFsZ29yaXRobTEyKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEzID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTEzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTQuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBUZXN0IHdoZXRoZXIgdHdvIHZhbHVlcyBhcmUgdW5lcXVhbC5cbiAgICpcbiAgICogVGhlIGZ1bmN0aW9uIHRlc3RzIHdoZXRoZXIgdGhlIHJlbGF0aXZlIGRpZmZlcmVuY2UgYmV0d2VlbiB4IGFuZCB5IGlzXG4gICAqIGxhcmdlciB0aGFuIHRoZSBjb25maWd1cmVkIGVwc2lsb24uIFRoZSBmdW5jdGlvbiBjYW5ub3QgYmUgdXNlZCB0byBjb21wYXJlXG4gICAqIHZhbHVlcyBzbWFsbGVyIHRoYW4gYXBwcm94aW1hdGVseSAyLjIyZS0xNi5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICogSW4gY2FzZSBvZiBjb21wbGV4IG51bWJlcnMsIHgucmUgbXVzdCB1bmVxdWFsIHkucmUsIG9yIHguaW0gbXVzdCB1bmVxdWFsIHkuaW0uXG4gICAqIFN0cmluZ3MgYXJlIGNvbXBhcmVkIGJ5IHRoZWlyIG51bWVyaWNhbCB2YWx1ZS5cbiAgICpcbiAgICogVmFsdWVzIGBudWxsYCBhbmQgYHVuZGVmaW5lZGAgYXJlIGNvbXBhcmVkIHN0cmljdGx5LCB0aHVzIGBudWxsYCBpcyB1bmVxdWFsXG4gICAqIHdpdGggZXZlcnl0aGluZyBleGNlcHQgYG51bGxgLCBhbmQgYHVuZGVmaW5lZGAgaXMgdW5lcXVhbCB3aXRoIGV2ZXJ5dGhpbmdcbiAgICogZXhjZXB0IGB1bmRlZmluZWRgLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgudW5lcXVhbCh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC51bmVxdWFsKDIgKyAyLCAzKSAgICAgICAvLyByZXR1cm5zIHRydWVcbiAgICogICAgbWF0aC51bmVxdWFsKDIgKyAyLCA0KSAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqXG4gICAqICAgIGNvbnN0IGEgPSBtYXRoLnVuaXQoJzUwIGNtJylcbiAgICogICAgY29uc3QgYiA9IG1hdGgudW5pdCgnNSBtJylcbiAgICogICAgbWF0aC51bmVxdWFsKGEsIGIpICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqXG4gICAqICAgIGNvbnN0IGMgPSBbMiwgNSwgMV1cbiAgICogICAgY29uc3QgZCA9IFsyLCA3LCAxXVxuICAgKlxuICAgKiAgICBtYXRoLnVuZXF1YWwoYywgZCkgICAgICAgICAgIC8vIHJldHVybnMgW2ZhbHNlLCB0cnVlLCBmYWxzZV1cbiAgICogICAgbWF0aC5kZWVwRXF1YWwoYywgZCkgICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqXG4gICAqICAgIG1hdGgudW5lcXVhbCgwLCBudWxsKSAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBlcXVhbCwgZGVlcEVxdWFsLCBzbWFsbGVyLCBzbWFsbGVyRXEsIGxhcmdlciwgbGFyZ2VyRXEsIGNvbXBhcmVcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBib29sZWFuIHwgQ29tcGxleCB8IFVuaXQgfCBzdHJpbmcgfCBBcnJheSB8IE1hdHJpeCB8IHVuZGVmaW5lZH0geCBGaXJzdCB2YWx1ZSB0byBjb21wYXJlXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgYm9vbGVhbiB8IENvbXBsZXggfCBVbml0IHwgc3RyaW5nIHwgQXJyYXkgfCBNYXRyaXggfCB1bmRlZmluZWR9IHkgU2Vjb25kIHZhbHVlIHRvIGNvbXBhcmVcbiAgICogQHJldHVybiB7Ym9vbGVhbiB8IEFycmF5IHwgTWF0cml4fSBSZXR1cm5zIHRydWUgd2hlbiB0aGUgY29tcGFyZWQgdmFsdWVzIGFyZSB1bmVxdWFsLCBlbHNlIHJldHVybnMgZmFsc2VcbiAgICovXG5cbiAgdmFyIHVuZXF1YWwgPSB0eXBlZCgndW5lcXVhbCcsIHtcbiAgICAnYW55LCBhbnknOiBmdW5jdGlvbiBhbnlBbnkoeCwgeSkge1xuICAgICAgLy8gc3RyaWN0IGVxdWFsaXR5IGZvciBudWxsIGFuZCB1bmRlZmluZWQ/XG4gICAgICBpZiAoeCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4geSAhPT0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHkgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHggIT09IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHkgIT09IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4geCAhPT0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3VuZXF1YWwoeCwgeSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTA3KHgsIHksIF91bmVxdWFsKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHksIHgsIF91bmVxdWFsLCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHgsIHksIF91bmVxdWFsLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTMoeCwgeSwgX3VuZXF1YWwpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHVuZXF1YWwobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHVuZXF1YWwobWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHVuZXF1YWwoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeCwgeSwgX3VuZXF1YWwsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIF91bmVxdWFsLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnYW55LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEyKHksIHgsIF91bmVxdWFsLCB0cnVlKTtcbiAgICB9LFxuICAgICdhbnksIERlbnNlTWF0cml4JzogZnVuY3Rpb24gYW55RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIF91bmVxdWFsLCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgX3VuZXF1YWwsIGZhbHNlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnYW55LCBBcnJheSc6IGZ1bmN0aW9uIGFueUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeSksIHgsIF91bmVxdWFsLCB0cnVlKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBfdW5lcXVhbCh4LCB5KSB7XG4gICAgcmV0dXJuICFlcXVhbFNjYWxhcih4LCB5KTtcbiAgfVxuXG4gIHJldHVybiB1bmVxdWFsO1xufSk7XG5leHBvcnRzLmNyZWF0ZVVuZXF1YWwgPSBjcmVhdGVVbmVxdWFsO1xudmFyIGNyZWF0ZVVuZXF1YWxOdW1iZXIgPSAoMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgWyd0eXBlZCcsICdlcXVhbFNjYWxhciddLCBmdW5jdGlvbiAoX3JlZjIpIHtcbiAgdmFyIHR5cGVkID0gX3JlZjIudHlwZWQsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYyLmVxdWFsU2NhbGFyO1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdhbnksIGFueSc6IGZ1bmN0aW9uIGFueUFueSh4LCB5KSB7XG4gICAgICAvLyBzdHJpY3QgZXF1YWxpdHkgZm9yIG51bGwgYW5kIHVuZGVmaW5lZD9cbiAgICAgIGlmICh4ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB5ICE9PSBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAoeSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4geCAhPT0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4geSAhPT0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB4ICE9PSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAhZXF1YWxTY2FsYXIoeCwgeSk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVVbmVxdWFsTnVtYmVyID0gY3JlYXRlVW5lcXVhbE51bWJlcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU2V0Q2FydGVzaWFuID0gdm9pZCAwO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnc2V0Q2FydGVzaWFuJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ3NpemUnLCAnc3Vic2V0JywgJ2NvbXBhcmVOYXR1cmFsJywgJ0luZGV4JywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlU2V0Q2FydGVzaWFuID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzdWJzZXQgPSBfcmVmLnN1YnNldCxcbiAgICAgIGNvbXBhcmVOYXR1cmFsID0gX3JlZi5jb21wYXJlTmF0dXJhbCxcbiAgICAgIEluZGV4ID0gX3JlZi5JbmRleCxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcblxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBjYXJ0ZXNpYW4gcHJvZHVjdCBvZiB0d28gKG11bHRpKXNldHMuXG4gICAqIE11bHRpLWRpbWVuc2lvbiBhcnJheXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gc2luZ2xlLWRpbWVuc2lvbiBhcnJheXMgYmVmb3JlIHRoZSBvcGVyYXRpb24uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5zZXRDYXJ0ZXNpYW4oc2V0MSwgc2V0MilcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguc2V0Q2FydGVzaWFuKFsxLCAyXSwgWzMsIDRdKSAgICAgICAgLy8gcmV0dXJucyBbWzEsIDNdLCBbMSwgNF0sIFsyLCAzXSwgWzIsIDRdXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgc2V0VW5pb24sIHNldEludGVyc2VjdCwgc2V0RGlmZmVyZW5jZSwgc2V0UG93ZXJzZXRcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0gICAgYTEgIEEgKG11bHRpKXNldFxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSAgICBhMiAgQSAobXVsdGkpc2V0XG4gICAqIEByZXR1cm4ge0FycmF5IHwgTWF0cml4fSAgICBUaGUgY2FydGVzaWFuIHByb2R1Y3Qgb2YgdHdvIChtdWx0aSlzZXRzXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdBcnJheSB8IE1hdHJpeCwgQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeEFycmF5TWF0cml4KGExLCBhMikge1xuICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuXG4gICAgICBpZiAoc3Vic2V0KHNpemUoYTEpLCBuZXcgSW5kZXgoMCkpICE9PSAwICYmIHN1YnNldChzaXplKGEyKSwgbmV3IEluZGV4KDApKSAhPT0gMCkge1xuICAgICAgICAvLyBpZiBhbnkgb2YgdGhlbSBpcyBlbXB0eSwgcmV0dXJuIGVtcHR5XG4gICAgICAgIHZhciBiMSA9ICgwLCBfYXJyYXkuZmxhdHRlbikoQXJyYXkuaXNBcnJheShhMSkgPyBhMSA6IGExLnRvQXJyYXkoKSkuc29ydChjb21wYXJlTmF0dXJhbCk7XG4gICAgICAgIHZhciBiMiA9ICgwLCBfYXJyYXkuZmxhdHRlbikoQXJyYXkuaXNBcnJheShhMikgPyBhMiA6IGEyLnRvQXJyYXkoKSkuc29ydChjb21wYXJlTmF0dXJhbCk7XG4gICAgICAgIHJlc3VsdCA9IFtdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYjEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGIyLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChbYjFbaV0sIGIyW2pdXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IC8vIHJldHVybiBhbiBhcnJheSwgaWYgYm90aCBpbnB1dHMgd2VyZSBhcnJheXNcblxuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShhMSkgJiYgQXJyYXkuaXNBcnJheShhMikpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0gLy8gcmV0dXJuIGEgbWF0cml4IG90aGVyd2lzZVxuXG5cbiAgICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgocmVzdWx0KTtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZVNldENhcnRlc2lhbiA9IGNyZWF0ZVNldENhcnRlc2lhbjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU2V0RGlmZmVyZW5jZSA9IHZvaWQgMDtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3NldERpZmZlcmVuY2UnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnc2l6ZScsICdzdWJzZXQnLCAnY29tcGFyZU5hdHVyYWwnLCAnSW5kZXgnLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVTZXREaWZmZXJlbmNlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzdWJzZXQgPSBfcmVmLnN1YnNldCxcbiAgICAgIGNvbXBhcmVOYXR1cmFsID0gX3JlZi5jb21wYXJlTmF0dXJhbCxcbiAgICAgIEluZGV4ID0gX3JlZi5JbmRleCxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcblxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBkaWZmZXJlbmNlIG9mIHR3byAobXVsdGkpc2V0czogZXZlcnkgZWxlbWVudCBvZiBzZXQxLCB0aGF0IGlzIG5vdCB0aGUgZWxlbWVudCBvZiBzZXQyLlxuICAgKiBNdWx0aS1kaW1lbnNpb24gYXJyYXlzIHdpbGwgYmUgY29udmVydGVkIHRvIHNpbmdsZS1kaW1lbnNpb24gYXJyYXlzIGJlZm9yZSB0aGUgb3BlcmF0aW9uLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguc2V0RGlmZmVyZW5jZShzZXQxLCBzZXQyKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5zZXREaWZmZXJlbmNlKFsxLCAyLCAzLCA0XSwgWzMsIDQsIDUsIDZdKSAgICAgICAgICAgIC8vIHJldHVybnMgWzEsIDJdXG4gICAqICAgIG1hdGguc2V0RGlmZmVyZW5jZShbWzEsIDJdLCBbMywgNF1dLCBbWzMsIDRdLCBbNSwgNl1dKSAgICAvLyByZXR1cm5zIFsxLCAyXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgc2V0VW5pb24sIHNldEludGVyc2VjdCwgc2V0U3ltRGlmZmVyZW5jZVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSAgICBhMSAgQSAobXVsdGkpc2V0XG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9ICAgIGEyICBBIChtdWx0aSlzZXRcbiAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXh9ICAgIFRoZSBkaWZmZXJlbmNlIG9mIHR3byAobXVsdGkpc2V0c1xuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnQXJyYXkgfCBNYXRyaXgsIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXhBcnJheU1hdHJpeChhMSwgYTIpIHtcbiAgICAgIHZhciByZXN1bHQ7XG5cbiAgICAgIGlmIChzdWJzZXQoc2l6ZShhMSksIG5ldyBJbmRleCgwKSkgPT09IDApIHtcbiAgICAgICAgLy8gZW1wdHktYW55dGhpbmc9ZW1wdHlcbiAgICAgICAgcmVzdWx0ID0gW107XG4gICAgICB9IGVsc2UgaWYgKHN1YnNldChzaXplKGEyKSwgbmV3IEluZGV4KDApKSA9PT0gMCkge1xuICAgICAgICAvLyBhbnl0aGluZy1lbXB0eT1hbnl0aGluZ1xuICAgICAgICByZXR1cm4gKDAsIF9hcnJheS5mbGF0dGVuKShhMS50b0FycmF5KCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGIxID0gKDAsIF9hcnJheS5pZGVudGlmeSkoKDAsIF9hcnJheS5mbGF0dGVuKShBcnJheS5pc0FycmF5KGExKSA/IGExIDogYTEudG9BcnJheSgpKS5zb3J0KGNvbXBhcmVOYXR1cmFsKSk7XG4gICAgICAgIHZhciBiMiA9ICgwLCBfYXJyYXkuaWRlbnRpZnkpKCgwLCBfYXJyYXkuZmxhdHRlbikoQXJyYXkuaXNBcnJheShhMikgPyBhMiA6IGEyLnRvQXJyYXkoKSkuc29ydChjb21wYXJlTmF0dXJhbCkpO1xuICAgICAgICByZXN1bHQgPSBbXTtcbiAgICAgICAgdmFyIGluYjI7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiMS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGluYjIgPSBmYWxzZTtcblxuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYjIubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChjb21wYXJlTmF0dXJhbChiMVtpXS52YWx1ZSwgYjJbal0udmFsdWUpID09PSAwICYmIGIxW2ldLmlkZW50aWZpZXIgPT09IGIyW2pdLmlkZW50aWZpZXIpIHtcbiAgICAgICAgICAgICAgLy8gdGhlIGlkZW50aWZpZXIgaXMgYWx3YXlzIGEgZGVjaW1hbCBpbnRcbiAgICAgICAgICAgICAgaW5iMiA9IHRydWU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghaW5iMikge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goYjFbaV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSAvLyByZXR1cm4gYW4gYXJyYXksIGlmIGJvdGggaW5wdXRzIHdlcmUgYXJyYXlzXG5cblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYTEpICYmIEFycmF5LmlzQXJyYXkoYTIpKSB7XG4gICAgICAgIHJldHVybiAoMCwgX2FycmF5LmdlbmVyYWxpemUpKHJlc3VsdCk7XG4gICAgICB9IC8vIHJldHVybiBhIG1hdHJpeCBvdGhlcndpc2VcblxuXG4gICAgICByZXR1cm4gbmV3IERlbnNlTWF0cml4KCgwLCBfYXJyYXkuZ2VuZXJhbGl6ZSkocmVzdWx0KSk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTZXREaWZmZXJlbmNlID0gY3JlYXRlU2V0RGlmZmVyZW5jZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU2V0RGlzdGluY3QgPSB2b2lkIDA7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdzZXREaXN0aW5jdCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdzaXplJywgJ3N1YnNldCcsICdjb21wYXJlTmF0dXJhbCcsICdJbmRleCcsICdEZW5zZU1hdHJpeCddO1xudmFyIGNyZWF0ZVNldERpc3RpbmN0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzdWJzZXQgPSBfcmVmLnN1YnNldCxcbiAgICAgIGNvbXBhcmVOYXR1cmFsID0gX3JlZi5jb21wYXJlTmF0dXJhbCxcbiAgICAgIEluZGV4ID0gX3JlZi5JbmRleCxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcblxuICAvKipcbiAgICogQ29sbGVjdCB0aGUgZGlzdGluY3QgZWxlbWVudHMgb2YgYSBtdWx0aXNldC5cbiAgICogQSBtdWx0aS1kaW1lbnNpb24gYXJyYXkgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBzaW5nbGUtZGltZW5zaW9uIGFycmF5IGJlZm9yZSB0aGUgb3BlcmF0aW9uLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguc2V0RGlzdGluY3Qoc2V0KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5zZXREaXN0aW5jdChbMSwgMSwgMSwgMiwgMiwgM10pICAgICAgICAvLyByZXR1cm5zIFsxLCAyLCAzXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgc2V0TXVsdGlwbGljaXR5XG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9ICAgIGEgIEEgbXVsdGlzZXRcbiAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXh9ICAgIEEgc2V0IGNvbnRhaW5pbmcgdGhlIGRpc3RpbmMgZWxlbWVudHMgb2YgdGhlIG11bHRpc2V0XG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KGEpIHtcbiAgICAgIHZhciByZXN1bHQ7XG5cbiAgICAgIGlmIChzdWJzZXQoc2l6ZShhKSwgbmV3IEluZGV4KDApKSA9PT0gMCkge1xuICAgICAgICAvLyBpZiBlbXB0eSwgcmV0dXJuIGVtcHR5XG4gICAgICAgIHJlc3VsdCA9IFtdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGIgPSAoMCwgX2FycmF5LmZsYXR0ZW4pKEFycmF5LmlzQXJyYXkoYSkgPyBhIDogYS50b0FycmF5KCkpLnNvcnQoY29tcGFyZU5hdHVyYWwpO1xuICAgICAgICByZXN1bHQgPSBbXTtcbiAgICAgICAgcmVzdWx0LnB1c2goYlswXSk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBiLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKGNvbXBhcmVOYXR1cmFsKGJbaV0sIGJbaSAtIDFdKSAhPT0gMCkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goYltpXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IC8vIHJldHVybiBhbiBhcnJheSwgaWYgdGhlIGlucHV0IHdhcyBhbiBhcnJheVxuXG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGEpKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9IC8vIHJldHVybiBhIG1hdHJpeCBvdGhlcndpc2VcblxuXG4gICAgICByZXR1cm4gbmV3IERlbnNlTWF0cml4KHJlc3VsdCk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTZXREaXN0aW5jdCA9IGNyZWF0ZVNldERpc3RpbmN0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTZXRJbnRlcnNlY3QgPSB2b2lkIDA7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdzZXRJbnRlcnNlY3QnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnc2l6ZScsICdzdWJzZXQnLCAnY29tcGFyZU5hdHVyYWwnLCAnSW5kZXgnLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVTZXRJbnRlcnNlY3QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHN1YnNldCA9IF9yZWYuc3Vic2V0LFxuICAgICAgY29tcGFyZU5hdHVyYWwgPSBfcmVmLmNvbXBhcmVOYXR1cmFsLFxuICAgICAgSW5kZXggPSBfcmVmLkluZGV4LFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgdGhlIGludGVyc2VjdGlvbiBvZiB0d28gKG11bHRpKXNldHMuXG4gICAqIE11bHRpLWRpbWVuc2lvbiBhcnJheXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gc2luZ2xlLWRpbWVuc2lvbiBhcnJheXMgYmVmb3JlIHRoZSBvcGVyYXRpb24uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5zZXRJbnRlcnNlY3Qoc2V0MSwgc2V0MilcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguc2V0SW50ZXJzZWN0KFsxLCAyLCAzLCA0XSwgWzMsIDQsIDUsIDZdKSAgICAgICAgICAgIC8vIHJldHVybnMgWzMsIDRdXG4gICAqICAgIG1hdGguc2V0SW50ZXJzZWN0KFtbMSwgMl0sIFszLCA0XV0sIFtbMywgNF0sIFs1LCA2XV0pICAgIC8vIHJldHVybnMgWzMsIDRdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBzZXRVbmlvbiwgc2V0RGlmZmVyZW5jZVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSAgICBhMSAgQSAobXVsdGkpc2V0XG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9ICAgIGEyICBBIChtdWx0aSlzZXRcbiAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXh9ICAgIFRoZSBpbnRlcnNlY3Rpb24gb2YgdHdvIChtdWx0aSlzZXRzXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdBcnJheSB8IE1hdHJpeCwgQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeEFycmF5TWF0cml4KGExLCBhMikge1xuICAgICAgdmFyIHJlc3VsdDtcblxuICAgICAgaWYgKHN1YnNldChzaXplKGExKSwgbmV3IEluZGV4KDApKSA9PT0gMCB8fCBzdWJzZXQoc2l6ZShhMiksIG5ldyBJbmRleCgwKSkgPT09IDApIHtcbiAgICAgICAgLy8gb2YgYW55IG9mIHRoZW0gaXMgZW1wdHksIHJldHVybiBlbXB0eVxuICAgICAgICByZXN1bHQgPSBbXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBiMSA9ICgwLCBfYXJyYXkuaWRlbnRpZnkpKCgwLCBfYXJyYXkuZmxhdHRlbikoQXJyYXkuaXNBcnJheShhMSkgPyBhMSA6IGExLnRvQXJyYXkoKSkuc29ydChjb21wYXJlTmF0dXJhbCkpO1xuICAgICAgICB2YXIgYjIgPSAoMCwgX2FycmF5LmlkZW50aWZ5KSgoMCwgX2FycmF5LmZsYXR0ZW4pKEFycmF5LmlzQXJyYXkoYTIpID8gYTIgOiBhMi50b0FycmF5KCkpLnNvcnQoY29tcGFyZU5hdHVyYWwpKTtcbiAgICAgICAgcmVzdWx0ID0gW107XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiMS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYjIubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChjb21wYXJlTmF0dXJhbChiMVtpXS52YWx1ZSwgYjJbal0udmFsdWUpID09PSAwICYmIGIxW2ldLmlkZW50aWZpZXIgPT09IGIyW2pdLmlkZW50aWZpZXIpIHtcbiAgICAgICAgICAgICAgLy8gdGhlIGlkZW50aWZpZXIgaXMgYWx3YXlzIGEgZGVjaW1hbCBpbnRcbiAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYjFbaV0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gcmV0dXJuIGFuIGFycmF5LCBpZiBib3RoIGlucHV0cyB3ZXJlIGFycmF5c1xuXG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGExKSAmJiBBcnJheS5pc0FycmF5KGEyKSkge1xuICAgICAgICByZXR1cm4gKDAsIF9hcnJheS5nZW5lcmFsaXplKShyZXN1bHQpO1xuICAgICAgfSAvLyByZXR1cm4gYSBtYXRyaXggb3RoZXJ3aXNlXG5cblxuICAgICAgcmV0dXJuIG5ldyBEZW5zZU1hdHJpeCgoMCwgX2FycmF5LmdlbmVyYWxpemUpKHJlc3VsdCkpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlU2V0SW50ZXJzZWN0ID0gY3JlYXRlU2V0SW50ZXJzZWN0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTZXRJc1N1YnNldCA9IHZvaWQgMDtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3NldElzU3Vic2V0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ3NpemUnLCAnc3Vic2V0JywgJ2NvbXBhcmVOYXR1cmFsJywgJ0luZGV4J107XG52YXIgY3JlYXRlU2V0SXNTdWJzZXQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHN1YnNldCA9IF9yZWYuc3Vic2V0LFxuICAgICAgY29tcGFyZU5hdHVyYWwgPSBfcmVmLmNvbXBhcmVOYXR1cmFsLFxuICAgICAgSW5kZXggPSBfcmVmLkluZGV4O1xuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIGEgKG11bHRpKXNldCBpcyBhIHN1YnNldCBvZiBhbm90aGVyIChtdWx0aSlzZXQuIChFdmVyeSBlbGVtZW50IG9mIHNldDEgaXMgdGhlIGVsZW1lbnQgb2Ygc2V0Mi4pXG4gICAqIE11bHRpLWRpbWVuc2lvbiBhcnJheXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gc2luZ2xlLWRpbWVuc2lvbiBhcnJheXMgYmVmb3JlIHRoZSBvcGVyYXRpb24uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5zZXRJc1N1YnNldChzZXQxLCBzZXQyKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5zZXRJc1N1YnNldChbMSwgMl0sIFszLCA0LCA1LCA2XSkgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5zZXRJc1N1YnNldChbMywgNF0sIFszLCA0LCA1LCA2XSkgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgc2V0VW5pb24sIHNldEludGVyc2VjdCwgc2V0RGlmZmVyZW5jZVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSAgICBhMSAgQSAobXVsdGkpc2V0XG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9ICAgIGEyICBBIChtdWx0aSlzZXRcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gICAgICAgICAgICB0cnVlIHwgZmFsc2VcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ0FycmF5IHwgTWF0cml4LCBBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4QXJyYXlNYXRyaXgoYTEsIGEyKSB7XG4gICAgICBpZiAoc3Vic2V0KHNpemUoYTEpLCBuZXcgSW5kZXgoMCkpID09PSAwKSB7XG4gICAgICAgIC8vIGVtcHR5IGlzIGEgc3Vic2V0IG9mIGFueXRoaW5nXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChzdWJzZXQoc2l6ZShhMiksIG5ldyBJbmRleCgwKSkgPT09IDApIHtcbiAgICAgICAgLy8gYW55dGhpbmcgaXMgbm90IGEgc3Vic2V0IG9mIGVtcHR5XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGIxID0gKDAsIF9hcnJheS5pZGVudGlmeSkoKDAsIF9hcnJheS5mbGF0dGVuKShBcnJheS5pc0FycmF5KGExKSA/IGExIDogYTEudG9BcnJheSgpKS5zb3J0KGNvbXBhcmVOYXR1cmFsKSk7XG4gICAgICB2YXIgYjIgPSAoMCwgX2FycmF5LmlkZW50aWZ5KSgoMCwgX2FycmF5LmZsYXR0ZW4pKEFycmF5LmlzQXJyYXkoYTIpID8gYTIgOiBhMi50b0FycmF5KCkpLnNvcnQoY29tcGFyZU5hdHVyYWwpKTtcbiAgICAgIHZhciBpbmIyO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGIxLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGluYjIgPSBmYWxzZTtcblxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGIyLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgaWYgKGNvbXBhcmVOYXR1cmFsKGIxW2ldLnZhbHVlLCBiMltqXS52YWx1ZSkgPT09IDAgJiYgYjFbaV0uaWRlbnRpZmllciA9PT0gYjJbal0uaWRlbnRpZmllcikge1xuICAgICAgICAgICAgLy8gdGhlIGlkZW50aWZpZXIgaXMgYWx3YXlzIGEgZGVjaW1hbCBpbnRcbiAgICAgICAgICAgIGluYjIgPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluYjIgPT09IGZhbHNlKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlU2V0SXNTdWJzZXQgPSBjcmVhdGVTZXRJc1N1YnNldDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU2V0TXVsdGlwbGljaXR5ID0gdm9pZCAwO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnc2V0TXVsdGlwbGljaXR5JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ3NpemUnLCAnc3Vic2V0JywgJ2NvbXBhcmVOYXR1cmFsJywgJ0luZGV4J107XG52YXIgY3JlYXRlU2V0TXVsdGlwbGljaXR5ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzdWJzZXQgPSBfcmVmLnN1YnNldCxcbiAgICAgIGNvbXBhcmVOYXR1cmFsID0gX3JlZi5jb21wYXJlTmF0dXJhbCxcbiAgICAgIEluZGV4ID0gX3JlZi5JbmRleDtcblxuICAvKipcbiAgICogQ291bnQgdGhlIG11bHRpcGxpY2l0eSBvZiBhbiBlbGVtZW50IGluIGEgbXVsdGlzZXQuXG4gICAqIEEgbXVsdGktZGltZW5zaW9uIGFycmF5IHdpbGwgYmUgY29udmVydGVkIHRvIGEgc2luZ2xlLWRpbWVuc2lvbiBhcnJheSBiZWZvcmUgdGhlIG9wZXJhdGlvbi5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnNldE11bHRpcGxpY2l0eShlbGVtZW50LCBzZXQpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnNldE11bHRpcGxpY2l0eSgxLCBbMSwgMiwgMiwgNF0pICAgIC8vIHJldHVybnMgMVxuICAgKiAgICBtYXRoLnNldE11bHRpcGxpY2l0eSgyLCBbMSwgMiwgMiwgNF0pICAgIC8vIHJldHVybnMgMlxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgc2V0RGlzdGluY3QsIHNldFNpemVcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXh9IGUgIEFuIGVsZW1lbnQgaW4gdGhlIG11bHRpc2V0XG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9ICAgICBhICBBIG11bHRpc2V0XG4gICAqIEByZXR1cm4ge251bWJlcn0gICAgICAgICAgICBUaGUgbnVtYmVyIG9mIGhvdyBtYW55IHRpbWVzIHRoZSBtdWx0aXNldCBjb250YWlucyB0aGUgZWxlbWVudFxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4LCBBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckZyYWN0aW9uQ29tcGxleEFycmF5TWF0cml4KGUsIGEpIHtcbiAgICAgIGlmIChzdWJzZXQoc2l6ZShhKSwgbmV3IEluZGV4KDApKSA9PT0gMCkge1xuICAgICAgICAvLyBpZiBlbXB0eSwgcmV0dXJuIDBcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG5cbiAgICAgIHZhciBiID0gKDAsIF9hcnJheS5mbGF0dGVuKShBcnJheS5pc0FycmF5KGEpID8gYSA6IGEudG9BcnJheSgpKTtcbiAgICAgIHZhciBjb3VudCA9IDA7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoY29tcGFyZU5hdHVyYWwoYltpXSwgZSkgPT09IDApIHtcbiAgICAgICAgICBjb3VudCsrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb3VudDtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZVNldE11bHRpcGxpY2l0eSA9IGNyZWF0ZVNldE11bHRpcGxpY2l0eTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU2V0UG93ZXJzZXQgPSB2b2lkIDA7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdzZXRQb3dlcnNldCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdzaXplJywgJ3N1YnNldCcsICdjb21wYXJlTmF0dXJhbCcsICdJbmRleCddO1xudmFyIGNyZWF0ZVNldFBvd2Vyc2V0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzdWJzZXQgPSBfcmVmLnN1YnNldCxcbiAgICAgIGNvbXBhcmVOYXR1cmFsID0gX3JlZi5jb21wYXJlTmF0dXJhbCxcbiAgICAgIEluZGV4ID0gX3JlZi5JbmRleDtcblxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBwb3dlcnNldCBvZiBhIChtdWx0aSlzZXQuIChUaGUgcG93ZXJzZXQgY29udGFpbnMgdmVyeSBwb3NzaWJsZSBzdWJzZXRzIG9mIGEgKG11bHRpKXNldC4pXG4gICAqIEEgbXVsdGktZGltZW5zaW9uIGFycmF5IHdpbGwgYmUgY29udmVydGVkIHRvIGEgc2luZ2xlLWRpbWVuc2lvbiBhcnJheSBiZWZvcmUgdGhlIG9wZXJhdGlvbi5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnNldFBvd2Vyc2V0KHNldClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguc2V0UG93ZXJzZXQoWzEsIDIsIDNdKSAgICAgICAgLy8gcmV0dXJucyBbW10sIFsxXSwgWzJdLCBbM10sIFsxLCAyXSwgWzEsIDNdLCBbMiwgM10sIFsxLCAyLCAzXV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIHNldENhcnRlc2lhblxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSAgICBhICBBIChtdWx0aSlzZXRcbiAgICogQHJldHVybiB7QXJyYXl9ICAgIFRoZSBwb3dlcnNldCBvZiB0aGUgKG11bHRpKXNldFxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeChhKSB7XG4gICAgICBpZiAoc3Vic2V0KHNpemUoYSksIG5ldyBJbmRleCgwKSkgPT09IDApIHtcbiAgICAgICAgLy8gaWYgZW1wdHksIHJldHVybiBlbXB0eVxuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG5cbiAgICAgIHZhciBiID0gKDAsIF9hcnJheS5mbGF0dGVuKShBcnJheS5pc0FycmF5KGEpID8gYSA6IGEudG9BcnJheSgpKS5zb3J0KGNvbXBhcmVOYXR1cmFsKTtcbiAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgIHZhciBudW1iZXIgPSAwO1xuXG4gICAgICB3aGlsZSAobnVtYmVyLnRvU3RyaW5nKDIpLmxlbmd0aCA8PSBiLmxlbmd0aCkge1xuICAgICAgICByZXN1bHQucHVzaChfc3Vic2V0KGIsIG51bWJlci50b1N0cmluZygyKS5zcGxpdCgnJykucmV2ZXJzZSgpKSk7XG4gICAgICAgIG51bWJlcisrO1xuICAgICAgfSAvLyBjYW4gbm90IHJldHVybiBhIG1hdHJpeCwgYmVjYXVzZSBvZiB0aGUgZGlmZmVyZW50IHNpemUgb2YgdGhlIHN1YmFycmF5c1xuXG5cbiAgICAgIHJldHVybiBfc29ydChyZXN1bHQpO1xuICAgIH1cbiAgfSk7IC8vIGNyZWF0ZSBzdWJzZXRcblxuICBmdW5jdGlvbiBfc3Vic2V0KGFycmF5LCBiaXRhcnJheSkge1xuICAgIHZhciByZXN1bHQgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYml0YXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChiaXRhcnJheVtpXSA9PT0gJzEnKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGFycmF5W2ldKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9IC8vIHNvcnQgc3Vic2VzdHMgYnkgbGVuZ3RoXG5cblxuICBmdW5jdGlvbiBfc29ydChhcnJheSkge1xuICAgIHZhciB0ZW1wID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gYXJyYXkubGVuZ3RoIC0gMTsgaSA+IDA7IGktLSkge1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpOyBqKyspIHtcbiAgICAgICAgaWYgKGFycmF5W2pdLmxlbmd0aCA+IGFycmF5W2ogKyAxXS5sZW5ndGgpIHtcbiAgICAgICAgICB0ZW1wID0gYXJyYXlbal07XG4gICAgICAgICAgYXJyYXlbal0gPSBhcnJheVtqICsgMV07XG4gICAgICAgICAgYXJyYXlbaiArIDFdID0gdGVtcDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhcnJheTtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZVNldFBvd2Vyc2V0ID0gY3JlYXRlU2V0UG93ZXJzZXQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNldFNpemUgPSB2b2lkIDA7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdzZXRTaXplJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbXBhcmVOYXR1cmFsJ107XG52YXIgY3JlYXRlU2V0U2l6ZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb21wYXJlTmF0dXJhbCA9IF9yZWYuY29tcGFyZU5hdHVyYWw7XG5cbiAgLyoqXG4gICAqIENvdW50IHRoZSBudW1iZXIgb2YgZWxlbWVudHMgb2YgYSAobXVsdGkpc2V0LiBXaGVuIGEgc2Vjb25kIHBhcmFtZXRlciBpcyAndHJ1ZScsIGNvdW50IG9ubHkgdGhlIHVuaXF1ZSB2YWx1ZXMuXG4gICAqIEEgbXVsdGktZGltZW5zaW9uIGFycmF5IHdpbGwgYmUgY29udmVydGVkIHRvIGEgc2luZ2xlLWRpbWVuc2lvbiBhcnJheSBiZWZvcmUgdGhlIG9wZXJhdGlvbi5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnNldFNpemUoc2V0KVxuICAgKiAgICBtYXRoLnNldFNpemUoc2V0LCB1bmlxdWUpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnNldFNpemUoWzEsIDIsIDIsIDRdKSAgICAgICAgICAvLyByZXR1cm5zIDRcbiAgICogICAgbWF0aC5zZXRTaXplKFsxLCAyLCAyLCA0XSwgdHJ1ZSkgICAgLy8gcmV0dXJucyAzXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBzZXRVbmlvbiwgc2V0SW50ZXJzZWN0LCBzZXREaWZmZXJlbmNlXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9ICAgIGEgIEEgbXVsdGlzZXRcbiAgICogQHJldHVybiB7bnVtYmVyfSAgICAgICAgICAgIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgb2YgdGhlIChtdWx0aSlzZXRcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoYSkge1xuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoYSkgPyAoMCwgX2FycmF5LmZsYXR0ZW4pKGEpLmxlbmd0aCA6ICgwLCBfYXJyYXkuZmxhdHRlbikoYS50b0FycmF5KCkpLmxlbmd0aDtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCwgYm9vbGVhbic6IGZ1bmN0aW9uIEFycmF5TWF0cml4Qm9vbGVhbihhLCB1bmlxdWUpIHtcbiAgICAgIGlmICh1bmlxdWUgPT09IGZhbHNlIHx8IGEubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGEpID8gKDAsIF9hcnJheS5mbGF0dGVuKShhKS5sZW5ndGggOiAoMCwgX2FycmF5LmZsYXR0ZW4pKGEudG9BcnJheSgpKS5sZW5ndGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgYiA9ICgwLCBfYXJyYXkuZmxhdHRlbikoQXJyYXkuaXNBcnJheShhKSA/IGEgOiBhLnRvQXJyYXkoKSkuc29ydChjb21wYXJlTmF0dXJhbCk7XG4gICAgICAgIHZhciBjb3VudCA9IDE7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBiLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKGNvbXBhcmVOYXR1cmFsKGJbaV0sIGJbaSAtIDFdKSAhPT0gMCkge1xuICAgICAgICAgICAgY291bnQrKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY291bnQ7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTZXRTaXplID0gY3JlYXRlU2V0U2l6ZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU2V0U3ltRGlmZmVyZW5jZSA9IHZvaWQgMDtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3NldFN5bURpZmZlcmVuY2UnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnc2l6ZScsICdjb25jYXQnLCAnc3Vic2V0JywgJ3NldERpZmZlcmVuY2UnLCAnSW5kZXgnXTtcbnZhciBjcmVhdGVTZXRTeW1EaWZmZXJlbmNlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBjb25jYXQgPSBfcmVmLmNvbmNhdCxcbiAgICAgIHN1YnNldCA9IF9yZWYuc3Vic2V0LFxuICAgICAgc2V0RGlmZmVyZW5jZSA9IF9yZWYuc2V0RGlmZmVyZW5jZSxcbiAgICAgIEluZGV4ID0gX3JlZi5JbmRleDtcblxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBzeW1tZXRyaWMgZGlmZmVyZW5jZSBvZiB0d28gKG11bHRpKXNldHMuXG4gICAqIE11bHRpLWRpbWVuc2lvbiBhcnJheXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gc2luZ2xlLWRpbWVuc2lvbiBhcnJheXMgYmVmb3JlIHRoZSBvcGVyYXRpb24uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5zZXRTeW1EaWZmZXJlbmNlKHNldDEsIHNldDIpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnNldFN5bURpZmZlcmVuY2UoWzEsIDIsIDMsIDRdLCBbMywgNCwgNSwgNl0pICAgICAgICAgICAgLy8gcmV0dXJucyBbMSwgMiwgNSwgNl1cbiAgICogICAgbWF0aC5zZXRTeW1EaWZmZXJlbmNlKFtbMSwgMl0sIFszLCA0XV0sIFtbMywgNF0sIFs1LCA2XV0pICAgIC8vIHJldHVybnMgWzEsIDIsIDUsIDZdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBzZXRVbmlvbiwgc2V0SW50ZXJzZWN0LCBzZXREaWZmZXJlbmNlXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9ICAgIGExICBBIChtdWx0aSlzZXRcbiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0gICAgYTIgIEEgKG11bHRpKXNldFxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gICAgVGhlIHN5bW1ldHJpYyBkaWZmZXJlbmNlIG9mIHR3byAobXVsdGkpc2V0c1xuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnQXJyYXkgfCBNYXRyaXgsIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXhBcnJheU1hdHJpeChhMSwgYTIpIHtcbiAgICAgIGlmIChzdWJzZXQoc2l6ZShhMSksIG5ldyBJbmRleCgwKSkgPT09IDApIHtcbiAgICAgICAgLy8gaWYgYW55IG9mIHRoZW0gaXMgZW1wdHksIHJldHVybiB0aGUgb3RoZXIgb25lXG4gICAgICAgIHJldHVybiAoMCwgX2FycmF5LmZsYXR0ZW4pKGEyKTtcbiAgICAgIH0gZWxzZSBpZiAoc3Vic2V0KHNpemUoYTIpLCBuZXcgSW5kZXgoMCkpID09PSAwKSB7XG4gICAgICAgIHJldHVybiAoMCwgX2FycmF5LmZsYXR0ZW4pKGExKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGIxID0gKDAsIF9hcnJheS5mbGF0dGVuKShhMSk7XG4gICAgICB2YXIgYjIgPSAoMCwgX2FycmF5LmZsYXR0ZW4pKGEyKTtcbiAgICAgIHJldHVybiBjb25jYXQoc2V0RGlmZmVyZW5jZShiMSwgYjIpLCBzZXREaWZmZXJlbmNlKGIyLCBiMSkpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlU2V0U3ltRGlmZmVyZW5jZSA9IGNyZWF0ZVNldFN5bURpZmZlcmVuY2U7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNldFVuaW9uID0gdm9pZCAwO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnc2V0VW5pb24nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnc2l6ZScsICdjb25jYXQnLCAnc3Vic2V0JywgJ3NldEludGVyc2VjdCcsICdzZXRTeW1EaWZmZXJlbmNlJywgJ0luZGV4J107XG52YXIgY3JlYXRlU2V0VW5pb24gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIGNvbmNhdCA9IF9yZWYuY29uY2F0LFxuICAgICAgc3Vic2V0ID0gX3JlZi5zdWJzZXQsXG4gICAgICBzZXRJbnRlcnNlY3QgPSBfcmVmLnNldEludGVyc2VjdCxcbiAgICAgIHNldFN5bURpZmZlcmVuY2UgPSBfcmVmLnNldFN5bURpZmZlcmVuY2UsXG4gICAgICBJbmRleCA9IF9yZWYuSW5kZXg7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSB0aGUgdW5pb24gb2YgdHdvIChtdWx0aSlzZXRzLlxuICAgKiBNdWx0aS1kaW1lbnNpb24gYXJyYXlzIHdpbGwgYmUgY29udmVydGVkIHRvIHNpbmdsZS1kaW1lbnNpb24gYXJyYXlzIGJlZm9yZSB0aGUgb3BlcmF0aW9uLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguc2V0VW5pb24oc2V0MSwgc2V0MilcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguc2V0VW5pb24oWzEsIDIsIDMsIDRdLCBbMywgNCwgNSwgNl0pICAgICAgICAgICAgLy8gcmV0dXJucyBbMSwgMiwgMywgNCwgNSwgNl1cbiAgICogICAgbWF0aC5zZXRVbmlvbihbWzEsIDJdLCBbMywgNF1dLCBbWzMsIDRdLCBbNSwgNl1dKSAgICAvLyByZXR1cm5zIFsxLCAyLCAzLCA0LCA1LCA2XVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgc2V0SW50ZXJzZWN0LCBzZXREaWZmZXJlbmNlXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9ICAgIGExICBBIChtdWx0aSlzZXRcbiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0gICAgYTIgIEEgKG11bHRpKXNldFxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gICAgVGhlIHVuaW9uIG9mIHR3byAobXVsdGkpc2V0c1xuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnQXJyYXkgfCBNYXRyaXgsIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXhBcnJheU1hdHJpeChhMSwgYTIpIHtcbiAgICAgIGlmIChzdWJzZXQoc2l6ZShhMSksIG5ldyBJbmRleCgwKSkgPT09IDApIHtcbiAgICAgICAgLy8gaWYgYW55IG9mIHRoZW0gaXMgZW1wdHksIHJldHVybiB0aGUgb3RoZXIgb25lXG4gICAgICAgIHJldHVybiAoMCwgX2FycmF5LmZsYXR0ZW4pKGEyKTtcbiAgICAgIH0gZWxzZSBpZiAoc3Vic2V0KHNpemUoYTIpLCBuZXcgSW5kZXgoMCkpID09PSAwKSB7XG4gICAgICAgIHJldHVybiAoMCwgX2FycmF5LmZsYXR0ZW4pKGExKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGIxID0gKDAsIF9hcnJheS5mbGF0dGVuKShhMSk7XG4gICAgICB2YXIgYjIgPSAoMCwgX2FycmF5LmZsYXR0ZW4pKGEyKTtcbiAgICAgIHJldHVybiBjb25jYXQoc2V0U3ltRGlmZmVyZW5jZShiMSwgYjIpLCBzZXRJbnRlcnNlY3QoYjEsIGIyKSk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTZXRVbmlvbiA9IGNyZWF0ZVNldFVuaW9uOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVFcmYgPSB2b2lkIDA7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdlcmYnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVFcmYgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBlcmYgZnVuY3Rpb24gb2YgYSB2YWx1ZSB1c2luZyBhIHJhdGlvbmFsIENoZWJ5c2hldlxuICAgKiBhcHByb3hpbWF0aW9ucyBmb3IgZGlmZmVyZW50IGludGVydmFscyBvZiB4LlxuICAgKlxuICAgKiBUaGlzIGlzIGEgdHJhbnNsYXRpb24gb2YgVy4gSi4gQ29keSdzIEZvcnRyYW4gaW1wbGVtZW50YXRpb24gZnJvbSAxOTg3XG4gICAqICggaHR0cHM6Ly93d3cubmV0bGliLm9yZy9zcGVjZnVuL2VyZiApLiBTZWUgdGhlIEFNUyBwdWJsaWNhdGlvblxuICAgKiBcIlJhdGlvbmFsIENoZWJ5c2hldiBBcHByb3hpbWF0aW9ucyBmb3IgdGhlIEVycm9yIEZ1bmN0aW9uXCIgYnkgVy4gSi4gQ29keVxuICAgKiBmb3IgYW4gZXhwbGFuYXRpb24gb2YgdGhpcyBwcm9jZXNzLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguZXJmKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmVyZigwLjIpICAgIC8vIHJldHVybnMgMC4yMjI3MDI1ODkyMTA0Nzg0N1xuICAgKiAgICBtYXRoLmVyZigtMC41KSAgIC8vIHJldHVybnMgLTAuNTIwNDk5ODc3ODEzMDQ2NVxuICAgKiAgICBtYXRoLmVyZig0KSAgICAgIC8vIHJldHVybnMgMC45OTk5OTk5ODQ1ODI3NDIxXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IHggICBBIHJlYWwgbnVtYmVyXG4gICAqIEByZXR1cm4ge251bWJlciB8IEFycmF5IHwgTWF0cml4fSAgICBUaGUgZXJmIG9mIGB4YFxuICAgKi9cbiAgdmFyIGVyZiA9IHR5cGVkKCduYW1lJywge1xuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgICAgIHZhciB5ID0gTWF0aC5hYnMoeCk7XG5cbiAgICAgIGlmICh5ID49IE1BWF9OVU0pIHtcbiAgICAgICAgcmV0dXJuICgwLCBfbnVtYmVyLnNpZ24pKHgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoeSA8PSBUSFJFU0gpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfbnVtYmVyLnNpZ24pKHgpICogZXJmMSh5KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHkgPD0gNC4wKSB7XG4gICAgICAgIHJldHVybiAoMCwgX251bWJlci5zaWduKSh4KSAqICgxIC0gZXJmYzIoeSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gKDAsIF9udW1iZXIuc2lnbikoeCkgKiAoMSAtIGVyZmMzKHkpKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KG4pIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkobiwgZXJmKTtcbiAgICB9IC8vIFRPRE86IEZvciBjb21wbGV4IG51bWJlcnMsIHVzZSB0aGUgYXBwcm94aW1hdGlvbiBmb3IgdGhlIEZhZGRlZXZhIGZ1bmN0aW9uXG4gICAgLy8gIGZyb20gXCJNb3JlIEVmZmljaWVudCBDb21wdXRhdGlvbiBvZiB0aGUgQ29tcGxleCBFcnJvciBGdW5jdGlvblwiIChBTVMpXG5cbiAgfSk7XG4gIC8qKlxuICAgKiBBcHByb3hpbWF0ZXMgdGhlIGVycm9yIGZ1bmN0aW9uIGVyZigpIGZvciB4IDw9IDAuNDY4NzUgdXNpbmcgdGhpcyBmdW5jdGlvbjpcbiAgICogICAgICAgICAgICAgICBuXG4gICAqIGVyZih4KSA9IHggKiBzdW0gKHBfaiAqIHheKDJqKSkgLyAocV9qICogeF4oMmopKVxuICAgKiAgICAgICAgICAgICAgaj0wXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGVyZjEoeSkge1xuICAgIHZhciB5c3EgPSB5ICogeTtcbiAgICB2YXIgeG51bSA9IFBbMF1bNF0gKiB5c3E7XG4gICAgdmFyIHhkZW4gPSB5c3E7XG4gICAgdmFyIGk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSArPSAxKSB7XG4gICAgICB4bnVtID0gKHhudW0gKyBQWzBdW2ldKSAqIHlzcTtcbiAgICAgIHhkZW4gPSAoeGRlbiArIFFbMF1baV0pICogeXNxO1xuICAgIH1cblxuICAgIHJldHVybiB5ICogKHhudW0gKyBQWzBdWzNdKSAvICh4ZGVuICsgUVswXVszXSk7XG4gIH1cbiAgLyoqXG4gICAqIEFwcHJveGltYXRlcyB0aGUgY29tcGxlbWVudCBvZiB0aGUgZXJyb3IgZnVuY3Rpb24gZXJmYygpIGZvclxuICAgKiAwLjQ2ODc1IDw9IHggPD0gNC4wIHVzaW5nIHRoaXMgZnVuY3Rpb246XG4gICAqICAgICAgICAgICAgICAgICAgICAgICBuXG4gICAqIGVyZmMoeCkgPSBlXigteF4yKSAqIHN1bSAocF9qICogeF5qKSAvIChxX2ogKiB4XmopXG4gICAqICAgICAgICAgICAgICAgICAgICAgIGo9MFxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGVyZmMyKHkpIHtcbiAgICB2YXIgeG51bSA9IFBbMV1bOF0gKiB5O1xuICAgIHZhciB4ZGVuID0geTtcbiAgICB2YXIgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpICs9IDEpIHtcbiAgICAgIHhudW0gPSAoeG51bSArIFBbMV1baV0pICogeTtcbiAgICAgIHhkZW4gPSAoeGRlbiArIFFbMV1baV0pICogeTtcbiAgICB9XG5cbiAgICB2YXIgcmVzdWx0ID0gKHhudW0gKyBQWzFdWzddKSAvICh4ZGVuICsgUVsxXVs3XSk7XG4gICAgdmFyIHlzcSA9IHBhcnNlSW50KHkgKiAxNikgLyAxNjtcbiAgICB2YXIgZGVsID0gKHkgLSB5c3EpICogKHkgKyB5c3EpO1xuICAgIHJldHVybiBNYXRoLmV4cCgteXNxICogeXNxKSAqIE1hdGguZXhwKC1kZWwpICogcmVzdWx0O1xuICB9XG4gIC8qKlxuICAgKiBBcHByb3hpbWF0ZXMgdGhlIGNvbXBsZW1lbnQgb2YgdGhlIGVycm9yIGZ1bmN0aW9uIGVyZmMoKSBmb3IgeCA+IDQuMCB1c2luZ1xuICAgKiB0aGlzIGZ1bmN0aW9uOlxuICAgKlxuICAgKiBlcmZjKHgpID0gKGVeKC14XjIpIC8geCkgKiBbIDEvc3FydChwaSkgK1xuICAgKiAgICAgICAgICAgICAgIG5cbiAgICogICAgMS8oeF4yKSAqIHN1bSAocF9qICogeF4oLTJqKSkgLyAocV9qICogeF4oLTJqKSkgXVxuICAgKiAgICAgICAgICAgICAgaj0wXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gZXJmYzMoeSkge1xuICAgIHZhciB5c3EgPSAxIC8gKHkgKiB5KTtcbiAgICB2YXIgeG51bSA9IFBbMl1bNV0gKiB5c3E7XG4gICAgdmFyIHhkZW4gPSB5c3E7XG4gICAgdmFyIGk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSArPSAxKSB7XG4gICAgICB4bnVtID0gKHhudW0gKyBQWzJdW2ldKSAqIHlzcTtcbiAgICAgIHhkZW4gPSAoeGRlbiArIFFbMl1baV0pICogeXNxO1xuICAgIH1cblxuICAgIHZhciByZXN1bHQgPSB5c3EgKiAoeG51bSArIFBbMl1bNF0pIC8gKHhkZW4gKyBRWzJdWzRdKTtcbiAgICByZXN1bHQgPSAoU1FSUEkgLSByZXN1bHQpIC8geTtcbiAgICB5c3EgPSBwYXJzZUludCh5ICogMTYpIC8gMTY7XG4gICAgdmFyIGRlbCA9ICh5IC0geXNxKSAqICh5ICsgeXNxKTtcbiAgICByZXR1cm4gTWF0aC5leHAoLXlzcSAqIHlzcSkgKiBNYXRoLmV4cCgtZGVsKSAqIHJlc3VsdDtcbiAgfVxuXG4gIHJldHVybiBlcmY7XG59KTtcbi8qKlxuICogVXBwZXIgYm91bmQgZm9yIHRoZSBmaXJzdCBhcHByb3hpbWF0aW9uIGludGVydmFsLCAwIDw9IHggPD0gVEhSRVNIXG4gKiBAY29uc3RhbnRcbiAqL1xuXG5leHBvcnRzLmNyZWF0ZUVyZiA9IGNyZWF0ZUVyZjtcbnZhciBUSFJFU0ggPSAwLjQ2ODc1O1xuLyoqXG4gKiBDb25zdGFudCB1c2VkIGJ5IFcuIEouIENvZHkncyBGb3J0cmFuNzcgaW1wbGVtZW50YXRpb24gdG8gZGVub3RlIHNxcnQocGkpXG4gKiBAY29uc3RhbnRcbiAqL1xuXG52YXIgU1FSUEkgPSA1LjY0MTg5NTgzNTQ3NzU2Mjg2OTVlLTE7XG4vKipcbiAqIENvZWZmaWNpZW50cyBmb3IgZWFjaCB0ZXJtIG9mIHRoZSBudW1lcmF0b3Igc3VtIChwX2opIGZvciBlYWNoIGFwcHJveGltYXRpb25cbiAqIGludGVydmFsIChzZWUgVy4gSi4gQ29keSdzIHBhcGVyIGZvciBtb3JlIGRldGFpbHMpXG4gKiBAY29uc3RhbnRcbiAqL1xuXG52YXIgUCA9IFtbMy4xNjExMjM3NDM4NzA1NjU2MGUwMCwgMS4xMzg2NDE1NDE1MTA1MDE1NmUwMiwgMy43NzQ4NTIzNzY4NTMwMjAyMWUwMiwgMy4yMDkzNzc1ODkxMzg0Njk0N2UwMywgMS44NTc3NzcwNjE4NDYwMzE1M2UtMV0sIFs1LjY0MTg4NDk2OTg4NjcwMDg5ZS0xLCA4Ljg4MzE0OTc5NDM4ODM3NTk0ZTAwLCA2LjYxMTkxOTA2MzcxNDE2Mjk1ZTAxLCAyLjk4NjM1MTM4MTk3NDAwMTMxZTAyLCA4LjgxOTUyMjIxMjQxNzY5MDkwZTAyLCAxLjcxMjA0NzYxMjYzNDA3MDU4ZTAzLCAyLjA1MTA3ODM3NzgyNjA3MTQ3ZTAzLCAxLjIzMDMzOTM1NDc5Nzk5NzI1ZTAzLCAyLjE1MzExNTM1NDc0NDAzODQ2ZS04XSwgWzMuMDUzMjY2MzQ5NjEyMzIzNDRlLTEsIDMuNjAzNDQ4OTk5NDk4MDQ0MzllLTEsIDEuMjU3ODE3MjYxMTEyMjkyNDZlLTEsIDEuNjA4Mzc4NTE0ODc0MjI3NjZlLTIsIDYuNTg3NDkxNjE1Mjk4Mzc4MDNlLTQsIDEuNjMxNTM4NzEzNzMwMjA5NzhlLTJdXTtcbi8qKlxuICogQ29lZmZpY2llbnRzIGZvciBlYWNoIHRlcm0gb2YgdGhlIGRlbm9taW5hdG9yIHN1bSAocV9qKSBmb3IgZWFjaCBhcHByb3hpbWF0aW9uXG4gKiBpbnRlcnZhbCAoc2VlIFcuIEouIENvZHkncyBwYXBlciBmb3IgbW9yZSBkZXRhaWxzKVxuICogQGNvbnN0YW50XG4gKi9cblxudmFyIFEgPSBbWzIuMzYwMTI5MDk1MjM0NDEyMDllMDEsIDIuNDQwMjQ2Mzc5MzQ0NDQxNzNlMDIsIDEuMjgyNjE2NTI2MDc3MzcyMjhlMDMsIDIuODQ0MjM2ODMzNDM5MTcwNjJlMDNdLCBbMS41NzQ0OTI2MTEwNzA5ODM0N2UwMSwgMS4xNzY5Mzk1MDg5MTMxMjQ5OWUwMiwgNS4zNzE4MTEwMTg2MjAwOTg1OGUwMiwgMS42MjEzODk1NzQ1NjY2OTAxOWUwMywgMy4yOTA3OTkyMzU3MzM0NTk2M2UwMywgNC4zNjI2MTkwOTAxNDMyNDcxNmUwMywgMy40MzkzNjc2NzQxNDM3MjE2NGUwMywgMS4yMzAzMzkzNTQ4MDM3NDk0MmUwM10sIFsyLjU2ODUyMDE5MjI4OTgyMjQyZTAwLCAxLjg3Mjk1Mjg0OTkyMzQ2MDQ3ZTAwLCA1LjI3OTA1MTAyOTUxNDI4NDEyZS0xLCA2LjA1MTgzNDEzMTI0NDEzMTkxZS0yLCAyLjMzNTIwNDk3NjI2ODY5MTg1ZS0zXV07XG4vKipcbiAqIE1heGltdW0vbWluaW11bSBzYWZlIG51bWJlcnMgdG8gaW5wdXQgdG8gZXJmKCkgKGluIEVTNissIHRoaXMgbnVtYmVyIGlzXG4gKiBOdW1iZXIuW01BWHxNSU5dX1NBRkVfSU5URUdFUikuIGVyZigpIGZvciBhbGwgbnVtYmVycyBiZXlvbmQgdGhpcyBsaW1pdCB3aWxsXG4gKiByZXR1cm4gMVxuICovXG5cbnZhciBNQVhfTlVNID0gTWF0aC5wb3coMiwgNTMpOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVNYWQgPSB2b2lkIDA7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2ltcHJvdmVFcnJvck1lc3NhZ2UgPSByZXF1aXJlKFwiLi91dGlscy9pbXByb3ZlRXJyb3JNZXNzYWdlXCIpO1xuXG52YXIgbmFtZSA9ICdtYWQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnYWJzJywgJ21hcCcsICdtZWRpYW4nLCAnc3VidHJhY3QnXTtcbnZhciBjcmVhdGVNYWQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgYWJzID0gX3JlZi5hYnMsXG4gICAgICBtYXAgPSBfcmVmLm1hcCxcbiAgICAgIG1lZGlhbiA9IF9yZWYubWVkaWFuLFxuICAgICAgc3VidHJhY3QgPSBfcmVmLnN1YnRyYWN0O1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBtZWRpYW4gYWJzb2x1dGUgZGV2aWF0aW9uIG9mIGEgbWF0cml4IG9yIGEgbGlzdCB3aXRoIHZhbHVlcy5cbiAgICogVGhlIG1lZGlhbiBhYnNvbHV0ZSBkZXZpYXRpb24gaXMgZGVmaW5lZCBhcyB0aGUgbWVkaWFuIG9mIHRoZSBhYnNvbHV0ZVxuICAgKiBkZXZpYXRpb25zIGZyb20gdGhlIG1lZGlhbi5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5tYWQoYSwgYiwgYywgLi4uKVxuICAgKiAgICAgbWF0aC5tYWQoQSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLm1hZCgxMCwgMjAsIDMwKSAgICAgICAgICAgICAvLyByZXR1cm5zIDEwXG4gICAqICAgICBtYXRoLm1hZChbMSwgMiwgM10pICAgICAgICAgICAgICAvLyByZXR1cm5zIDFcbiAgICogICAgIG1hdGgubWFkKFtbMSwgMiwgM10sIFs0LCA1LCA2XV0pIC8vIHJldHVybnMgMS41XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgbWVkaWFuLCBtZWFuLCBzdGQsIGFic1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSBhcnJheVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIEEgc2luZ2xlIG1hdHJpeCBvciBtdWx0aXBsZSBzY2FsYXIgdmFsdWVzLlxuICAgKiBAcmV0dXJuIHsqfSBUaGUgbWVkaWFuIGFic29sdXRlIGRldmlhdGlvbi5cbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgLy8gbWFkKFthLCBiLCBjLCBkLCAuLi5dKVxuICAgICdBcnJheSB8IE1hdHJpeCc6IF9tYWQsXG4gICAgLy8gbWFkKGEsIGIsIGMsIGQsIC4uLilcbiAgICAnLi4uJzogZnVuY3Rpb24gXyhhcmdzKSB7XG4gICAgICByZXR1cm4gX21hZChhcmdzKTtcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIF9tYWQoYXJyYXkpIHtcbiAgICBhcnJheSA9ICgwLCBfYXJyYXkuZmxhdHRlbikoYXJyYXkudmFsdWVPZigpKTtcblxuICAgIGlmIChhcnJheS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSBtZWRpYW4gYWJzb2x1dGUgZGV2aWF0aW9uIChtYWQpIG9mIGFuIGVtcHR5IGFycmF5Jyk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHZhciBtZWQgPSBtZWRpYW4oYXJyYXkpO1xuICAgICAgcmV0dXJuIG1lZGlhbihtYXAoYXJyYXksIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gYWJzKHN1YnRyYWN0KHZhbHVlLCBtZWQpKTtcbiAgICAgIH0pKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBUeXBlRXJyb3IgJiYgZXJyLm1lc3NhZ2UuaW5kZXhPZignbWVkaWFuJykgIT09IC0xKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZXJyLm1lc3NhZ2UucmVwbGFjZSgnbWVkaWFuJywgJ21hZCcpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93ICgwLCBfaW1wcm92ZUVycm9yTWVzc2FnZS5pbXByb3ZlRXJyb3JNZXNzYWdlKShlcnIsICdtYWQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVNYWQgPSBjcmVhdGVNYWQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU1heCA9IHZvaWQgMDtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2ltcHJvdmVFcnJvck1lc3NhZ2UgPSByZXF1aXJlKFwiLi91dGlscy9pbXByb3ZlRXJyb3JNZXNzYWdlXCIpO1xuXG52YXIgbmFtZSA9ICdtYXgnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbGFyZ2VyJ107XG52YXIgY3JlYXRlTWF4ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGxhcmdlciA9IF9yZWYubGFyZ2VyO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBtYXhpbXVtIHZhbHVlIG9mIGEgbWF0cml4IG9yIGEgIGxpc3Qgd2l0aCB2YWx1ZXMuXG4gICAqIEluIGNhc2Ugb2YgYSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheSwgdGhlIG1heGltdW0gb2YgdGhlIGZsYXR0ZW5lZCBhcnJheVxuICAgKiB3aWxsIGJlIGNhbGN1bGF0ZWQuIFdoZW4gYGRpbWAgaXMgcHJvdmlkZWQsIHRoZSBtYXhpbXVtIG92ZXIgdGhlIHNlbGVjdGVkXG4gICAqIGRpbWVuc2lvbiB3aWxsIGJlIGNhbGN1bGF0ZWQuIFBhcmFtZXRlciBgZGltYCBpcyB6ZXJvLWJhc2VkLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLm1heChhLCBiLCBjLCAuLi4pXG4gICAqICAgICBtYXRoLm1heChBKVxuICAgKiAgICAgbWF0aC5tYXgoQSwgZGltKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGgubWF4KDIsIDEsIDQsIDMpICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyA0XG4gICAqICAgICBtYXRoLm1heChbMiwgMSwgNCwgM10pICAgICAgICAgICAgICAgIC8vIHJldHVybnMgNFxuICAgKlxuICAgKiAgICAgLy8gbWF4aW11bSBvdmVyIGEgc3BlY2lmaWVkIGRpbWVuc2lvbiAoemVyby1iYXNlZClcbiAgICogICAgIG1hdGgubWF4KFtbMiwgNV0sIFs0LCAzXSwgWzEsIDddXSwgMCkgLy8gcmV0dXJucyBbNCwgN11cbiAgICogICAgIG1hdGgubWF4KFtbMiwgNV0sIFs0LCAzXV0sIFsxLCA3XSwgMSkgLy8gcmV0dXJucyBbNSwgNCwgN11cbiAgICpcbiAgICogICAgIG1hdGgubWF4KDIuNywgNy4xLCAtNC41LCAyLjAsIDQuMSkgICAgLy8gcmV0dXJucyA3LjFcbiAgICogICAgIG1hdGgubWluKDIuNywgNy4xLCAtNC41LCAyLjAsIDQuMSkgICAgLy8gcmV0dXJucyAtNC41XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBtZWFuLCBtZWRpYW4sIG1pbiwgcHJvZCwgc3RkLCBzdW0sIHZhcmlhbmNlXG4gICAqXG4gICAqIEBwYXJhbSB7Li4uICp9IGFyZ3MgIEEgc2luZ2xlIG1hdHJpeCBvciBvciBtdWx0aXBsZSBzY2FsYXIgdmFsdWVzXG4gICAqIEByZXR1cm4geyp9IFRoZSBtYXhpbXVtIHZhbHVlXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIC8vIG1heChbYSwgYiwgYywgZCwgLi4uXSlcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBfbWF4LFxuICAgIC8vIG1heChbYSwgYiwgYywgZCwgLi4uXSwgZGltKVxuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhOdW1iZXJCaWdOdW1iZXIoYXJyYXksIGRpbSkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5yZWR1Y2UpKGFycmF5LCBkaW0udmFsdWVPZigpLCBfbGFyZ2VzdCk7XG4gICAgfSxcbiAgICAvLyBtYXgoYSwgYiwgYywgZCwgLi4uKVxuICAgICcuLi4nOiBmdW5jdGlvbiBfKGFyZ3MpIHtcbiAgICAgIGlmICgoMCwgX2NvbGxlY3Rpb24uY29udGFpbnNDb2xsZWN0aW9ucykoYXJncykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignU2NhbGFyIHZhbHVlcyBleHBlY3RlZCBpbiBmdW5jdGlvbiBtYXgnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9tYXgoYXJncyk7XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIFJldHVybiB0aGUgbGFyZ2VzdCBvZiB0d28gdmFsdWVzXG4gICAqIEBwYXJhbSB7Kn0geFxuICAgKiBAcGFyYW0geyp9IHlcbiAgICogQHJldHVybnMgeyp9IFJldHVybnMgeCB3aGVuIHggaXMgbGFyZ2VzdCwgb3IgeSB3aGVuIHkgaXMgbGFyZ2VzdFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfbGFyZ2VzdCh4LCB5KSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBsYXJnZXIoeCwgeSkgPyB4IDogeTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRocm93ICgwLCBfaW1wcm92ZUVycm9yTWVzc2FnZS5pbXByb3ZlRXJyb3JNZXNzYWdlKShlcnIsICdtYXgnLCB5KTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IGNhbGN1bGF0ZSB0aGUgbWF4aW11bSB2YWx1ZSBpbiBhbiBuLWRpbWVuc2lvbmFsIGFycmF5XG4gICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gICAqIEByZXR1cm4ge251bWJlcn0gbWF4XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX21heChhcnJheSkge1xuICAgIHZhciByZXM7XG4gICAgKDAsIF9jb2xsZWN0aW9uLmRlZXBGb3JFYWNoKShhcnJheSwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoaXNOYU4odmFsdWUpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICByZXMgPSBOYU47XG4gICAgICAgIH0gZWxzZSBpZiAocmVzID09PSB1bmRlZmluZWQgfHwgbGFyZ2VyKHZhbHVlLCByZXMpKSB7XG4gICAgICAgICAgcmVzID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyAoMCwgX2ltcHJvdmVFcnJvck1lc3NhZ2UuaW1wcm92ZUVycm9yTWVzc2FnZSkoZXJyLCAnbWF4JywgdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHJlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjYWxjdWxhdGUgbWF4IG9mIGFuIGVtcHR5IGFycmF5Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZU1heCA9IGNyZWF0ZU1heDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTWVhbiA9IHZvaWQgMDtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2ltcHJvdmVFcnJvck1lc3NhZ2UgPSByZXF1aXJlKFwiLi91dGlscy9pbXByb3ZlRXJyb3JNZXNzYWdlXCIpO1xuXG52YXIgbmFtZSA9ICdtZWFuJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FkZCcsICdkaXZpZGUnXTtcbnZhciBjcmVhdGVNZWFuID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGFkZCA9IF9yZWYuYWRkLFxuICAgICAgZGl2aWRlID0gX3JlZi5kaXZpZGU7XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIG1lYW4gdmFsdWUgb2YgbWF0cml4IG9yIGEgbGlzdCB3aXRoIHZhbHVlcy5cbiAgICogSW4gY2FzZSBvZiBhIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5LCB0aGUgbWVhbiBvZiB0aGUgZmxhdHRlbmVkIGFycmF5XG4gICAqIHdpbGwgYmUgY2FsY3VsYXRlZC4gV2hlbiBgZGltYCBpcyBwcm92aWRlZCwgdGhlIG1heGltdW0gb3ZlciB0aGUgc2VsZWN0ZWRcbiAgICogZGltZW5zaW9uIHdpbGwgYmUgY2FsY3VsYXRlZC4gUGFyYW1ldGVyIGBkaW1gIGlzIHplcm8tYmFzZWQuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGgubWVhbihhLCBiLCBjLCAuLi4pXG4gICAqICAgICBtYXRoLm1lYW4oQSlcbiAgICogICAgIG1hdGgubWVhbihBLCBkaW0pXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgbWF0aC5tZWFuKDIsIDEsIDQsIDMpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAyLjVcbiAgICogICAgIG1hdGgubWVhbihbMSwgMi43LCAzLjIsIDRdKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgMi43MjVcbiAgICpcbiAgICogICAgIG1hdGgubWVhbihbWzIsIDVdLCBbNiwgM10sIFsxLCA3XV0sIDApICAgIC8vIHJldHVybnMgWzMsIDVdXG4gICAqICAgICBtYXRoLm1lYW4oW1syLCA1XSwgWzYsIDNdLCBbMSwgN11dLCAxKSAgICAvLyByZXR1cm5zIFszLjUsIDQuNSwgNF1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBtZWRpYW4sIG1pbiwgbWF4LCBzdW0sIHByb2QsIHN0ZCwgdmFyaWFuY2VcbiAgICpcbiAgICogQHBhcmFtIHsuLi4gKn0gYXJncyAgQSBzaW5nbGUgbWF0cml4IG9yIG9yIG11bHRpcGxlIHNjYWxhciB2YWx1ZXNcbiAgICogQHJldHVybiB7Kn0gVGhlIG1lYW4gb2YgYWxsIHZhbHVlc1xuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAvLyBtZWFuKFthLCBiLCBjLCBkLCAuLi5dKVxuICAgICdBcnJheSB8IE1hdHJpeCc6IF9tZWFuLFxuICAgIC8vIG1lYW4oW2EsIGIsIGMsIGQsIC4uLl0sIGRpbSlcbiAgICAnQXJyYXkgfCBNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IF9ubWVhbkRpbSxcbiAgICAvLyBtZWFuKGEsIGIsIGMsIGQsIC4uLilcbiAgICAnLi4uJzogZnVuY3Rpb24gXyhhcmdzKSB7XG4gICAgICBpZiAoKDAsIF9jb2xsZWN0aW9uLmNvbnRhaW5zQ29sbGVjdGlvbnMpKGFyZ3MpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1NjYWxhciB2YWx1ZXMgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gbWVhbicpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX21lYW4oYXJncyk7XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgbWVhbiB2YWx1ZSBpbiBhbiBuLWRpbWVuc2lvbmFsIGFycmF5LCByZXR1cm5pbmcgYVxuICAgKiBuLTEgZGltZW5zaW9uYWwgYXJyYXlcbiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXlcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRpbVxuICAgKiBAcmV0dXJuIHtudW1iZXJ9IG1lYW5cbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgZnVuY3Rpb24gX25tZWFuRGltKGFycmF5LCBkaW0pIHtcbiAgICB0cnkge1xuICAgICAgdmFyIHN1bSA9ICgwLCBfY29sbGVjdGlvbi5yZWR1Y2UpKGFycmF5LCBkaW0sIGFkZCk7XG4gICAgICB2YXIgcyA9IEFycmF5LmlzQXJyYXkoYXJyYXkpID8gKDAsIF9hcnJheS5hcnJheVNpemUpKGFycmF5KSA6IGFycmF5LnNpemUoKTtcbiAgICAgIHJldHVybiBkaXZpZGUoc3VtLCBzW2RpbV0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgKDAsIF9pbXByb3ZlRXJyb3JNZXNzYWdlLmltcHJvdmVFcnJvck1lc3NhZ2UpKGVyciwgJ21lYW4nKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IGNhbGN1bGF0ZSB0aGUgbWVhbiB2YWx1ZSBpbiBhbiBuLWRpbWVuc2lvbmFsIGFycmF5XG4gICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gICAqIEByZXR1cm4ge251bWJlcn0gbWVhblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9tZWFuKGFycmF5KSB7XG4gICAgdmFyIHN1bTtcbiAgICB2YXIgbnVtID0gMDtcbiAgICAoMCwgX2NvbGxlY3Rpb24uZGVlcEZvckVhY2gpKGFycmF5LCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHN1bSA9IHN1bSA9PT0gdW5kZWZpbmVkID8gdmFsdWUgOiBhZGQoc3VtLCB2YWx1ZSk7XG4gICAgICAgIG51bSsrO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93ICgwLCBfaW1wcm92ZUVycm9yTWVzc2FnZS5pbXByb3ZlRXJyb3JNZXNzYWdlKShlcnIsICdtZWFuJywgdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKG51bSA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY2FsY3VsYXRlIHRoZSBtZWFuIG9mIGFuIGVtcHR5IGFycmF5Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpdmlkZShzdW0sIG51bSk7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVNZWFuID0gY3JlYXRlTWVhbjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTWVkaWFuID0gdm9pZCAwO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfaW1wcm92ZUVycm9yTWVzc2FnZSA9IHJlcXVpcmUoXCIuL3V0aWxzL2ltcHJvdmVFcnJvck1lc3NhZ2VcIik7XG5cbnZhciBuYW1lID0gJ21lZGlhbic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdhZGQnLCAnZGl2aWRlJywgJ2NvbXBhcmUnLCAncGFydGl0aW9uU2VsZWN0J107XG52YXIgY3JlYXRlTWVkaWFuID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGFkZCA9IF9yZWYuYWRkLFxuICAgICAgZGl2aWRlID0gX3JlZi5kaXZpZGUsXG4gICAgICBjb21wYXJlID0gX3JlZi5jb21wYXJlLFxuICAgICAgcGFydGl0aW9uU2VsZWN0ID0gX3JlZi5wYXJ0aXRpb25TZWxlY3Q7XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIG1lZGlhbiBvZiBhIG1hdHJpeCBvciBhIGxpc3Qgd2l0aCB2YWx1ZXMuIFRoZSB2YWx1ZXMgYXJlXG4gICAqIHNvcnRlZCBhbmQgdGhlIG1pZGRsZSB2YWx1ZSBpcyByZXR1cm5lZC4gSW4gY2FzZSBvZiBhbiBldmVuIG51bWJlciBvZlxuICAgKiB2YWx1ZXMsIHRoZSBhdmVyYWdlIG9mIHRoZSB0d28gbWlkZGxlIHZhbHVlcyBpcyByZXR1cm5lZC5cbiAgICogU3VwcG9ydGVkIHR5cGVzIG9mIHZhbHVlcyBhcmU6IE51bWJlciwgQmlnTnVtYmVyLCBVbml0XG4gICAqXG4gICAqIEluIGNhc2Ugb2YgYSAobXVsdGkgZGltZW5zaW9uYWwpIGFycmF5IG9yIG1hdHJpeCwgdGhlIG1lZGlhbiBvZiBhbGxcbiAgICogZWxlbWVudHMgd2lsbCBiZSBjYWxjdWxhdGVkLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLm1lZGlhbihhLCBiLCBjLCAuLi4pXG4gICAqICAgICBtYXRoLm1lZGlhbihBKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGgubWVkaWFuKDUsIDIsIDcpICAgICAgICAvLyByZXR1cm5zIDVcbiAgICogICAgIG1hdGgubWVkaWFuKFszLCAtMSwgNSwgN10pICAvLyByZXR1cm5zIDRcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBtZWFuLCBtaW4sIG1heCwgc3VtLCBwcm9kLCBzdGQsIHZhcmlhbmNlLCBxdWFudGlsZVNlcVxuICAgKlxuICAgKiBAcGFyYW0gey4uLiAqfSBhcmdzICBBIHNpbmdsZSBtYXRyaXggb3Igb3IgbXVsdGlwbGUgc2NhbGFyIHZhbHVlc1xuICAgKiBAcmV0dXJuIHsqfSBUaGUgbWVkaWFuXG4gICAqL1xuICB2YXIgbWVkaWFuID0gdHlwZWQobmFtZSwge1xuICAgIC8vIG1lZGlhbihbYSwgYiwgYywgZCwgLi4uXSlcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBfbWVkaWFuLFxuICAgIC8vIG1lZGlhbihbYSwgYiwgYywgZCwgLi4uXSwgZGltKVxuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhOdW1iZXJCaWdOdW1iZXIoYXJyYXksIGRpbSkge1xuICAgICAgLy8gVE9ETzogaW1wbGVtZW50IG1lZGlhbihBLCBkaW0pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21lZGlhbihBLCBkaW0pIGlzIG5vdCB5ZXQgc3VwcG9ydGVkJyk7IC8vIHJldHVybiByZWR1Y2UoYXJndW1lbnRzWzBdLCBhcmd1bWVudHNbMV0sIC4uLilcbiAgICB9LFxuICAgIC8vIG1lZGlhbihhLCBiLCBjLCBkLCAuLi4pXG4gICAgJy4uLic6IGZ1bmN0aW9uIF8oYXJncykge1xuICAgICAgaWYgKCgwLCBfY29sbGVjdGlvbi5jb250YWluc0NvbGxlY3Rpb25zKShhcmdzKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTY2FsYXIgdmFsdWVzIGV4cGVjdGVkIGluIGZ1bmN0aW9uIG1lZGlhbicpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX21lZGlhbihhcmdzKTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogUmVjdXJzaXZlbHkgY2FsY3VsYXRlIHRoZSBtZWRpYW4gb2YgYW4gbi1kaW1lbnNpb25hbCBhcnJheVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheVxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9IG1lZGlhblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfbWVkaWFuKGFycmF5KSB7XG4gICAgdHJ5IHtcbiAgICAgIGFycmF5ID0gKDAsIF9hcnJheS5mbGF0dGVuKShhcnJheS52YWx1ZU9mKCkpO1xuICAgICAgdmFyIG51bSA9IGFycmF5Lmxlbmd0aDtcblxuICAgICAgaWYgKG51bSA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjYWxjdWxhdGUgbWVkaWFuIG9mIGFuIGVtcHR5IGFycmF5Jyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChudW0gJSAyID09PSAwKSB7XG4gICAgICAgIC8vIGV2ZW46IHJldHVybiB0aGUgYXZlcmFnZSBvZiB0aGUgdHdvIG1pZGRsZSB2YWx1ZXNcbiAgICAgICAgdmFyIG1pZCA9IG51bSAvIDIgLSAxO1xuICAgICAgICB2YXIgcmlnaHQgPSBwYXJ0aXRpb25TZWxlY3QoYXJyYXksIG1pZCArIDEpOyAvLyBhcnJheSBub3cgcGFydGl0aW9uZWQgYXQgbWlkICsgMSwgdGFrZSBtYXggb2YgbGVmdCBwYXJ0XG5cbiAgICAgICAgdmFyIGxlZnQgPSBhcnJheVttaWRdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWlkOyArK2kpIHtcbiAgICAgICAgICBpZiAoY29tcGFyZShhcnJheVtpXSwgbGVmdCkgPiAwKSB7XG4gICAgICAgICAgICBsZWZ0ID0gYXJyYXlbaV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1pZGRsZTIobGVmdCwgcmlnaHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gb2RkOiByZXR1cm4gdGhlIG1pZGRsZSB2YWx1ZVxuICAgICAgICB2YXIgbSA9IHBhcnRpdGlvblNlbGVjdChhcnJheSwgKG51bSAtIDEpIC8gMik7XG4gICAgICAgIHJldHVybiBtaWRkbGUobSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aHJvdyAoMCwgX2ltcHJvdmVFcnJvck1lc3NhZ2UuaW1wcm92ZUVycm9yTWVzc2FnZSkoZXJyLCAnbWVkaWFuJyk7XG4gICAgfVxuICB9IC8vIGhlbHBlciBmdW5jdGlvbiB0byB0eXBlIGNoZWNrIHRoZSBtaWRkbGUgdmFsdWUgb2YgdGhlIGFycmF5XG5cblxuICB2YXIgbWlkZGxlID0gdHlwZWQoe1xuICAgICdudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckNvbXBsZXhVbml0KHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICB9KTsgLy8gaGVscGVyIGZ1bmN0aW9uIHRvIHR5cGUgY2hlY2sgdGhlIHR3byBtaWRkbGUgdmFsdWUgb2YgdGhlIGFycmF5XG5cbiAgdmFyIG1pZGRsZTIgPSB0eXBlZCh7XG4gICAgJ251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0LCBudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckNvbXBsZXhVbml0TnVtYmVyQmlnTnVtYmVyQ29tcGxleFVuaXQobGVmdCwgcmlnaHQpIHtcbiAgICAgIHJldHVybiBkaXZpZGUoYWRkKGxlZnQsIHJpZ2h0KSwgMik7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG1lZGlhbjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVNZWRpYW4gPSBjcmVhdGVNZWRpYW47IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU1pbiA9IHZvaWQgMDtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2ltcHJvdmVFcnJvck1lc3NhZ2UgPSByZXF1aXJlKFwiLi91dGlscy9pbXByb3ZlRXJyb3JNZXNzYWdlXCIpO1xuXG52YXIgbmFtZSA9ICdtaW4nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnc21hbGxlciddO1xudmFyIGNyZWF0ZU1pbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBzbWFsbGVyID0gX3JlZi5zbWFsbGVyO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBtaW5pbXVtIHZhbHVlIG9mIGEgbWF0cml4IG9yIGEgIGxpc3Qgb2YgdmFsdWVzLlxuICAgKiBJbiBjYXNlIG9mIGEgbXVsdGkgZGltZW5zaW9uYWwgYXJyYXksIHRoZSBtaW5pbXVtIG9mIHRoZSBmbGF0dGVuZWQgYXJyYXlcbiAgICogd2lsbCBiZSBjYWxjdWxhdGVkLiBXaGVuIGBkaW1gIGlzIHByb3ZpZGVkLCB0aGUgbWluaW11bSBvdmVyIHRoZSBzZWxlY3RlZFxuICAgKiBkaW1lbnNpb24gd2lsbCBiZSBjYWxjdWxhdGVkLiBQYXJhbWV0ZXIgYGRpbWAgaXMgemVyby1iYXNlZC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5taW4oYSwgYiwgYywgLi4uKVxuICAgKiAgICAgbWF0aC5taW4oQSlcbiAgICogICAgIG1hdGgubWluKEEsIGRpbSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLm1pbigyLCAxLCA0LCAzKSAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgMVxuICAgKiAgICAgbWF0aC5taW4oWzIsIDEsIDQsIDNdKSAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDFcbiAgICpcbiAgICogICAgIC8vIG1pbmltdW0gb3ZlciBhIHNwZWNpZmllZCBkaW1lbnNpb24gKHplcm8tYmFzZWQpXG4gICAqICAgICBtYXRoLm1pbihbWzIsIDVdLCBbNCwgM10sIFsxLCA3XV0sIDApIC8vIHJldHVybnMgWzEsIDNdXG4gICAqICAgICBtYXRoLm1pbihbWzIsIDVdLCBbNCwgM10sIFsxLCA3XV0sIDEpIC8vIHJldHVybnMgWzIsIDMsIDFdXG4gICAqXG4gICAqICAgICBtYXRoLm1heCgyLjcsIDcuMSwgLTQuNSwgMi4wLCA0LjEpICAgIC8vIHJldHVybnMgNy4xXG4gICAqICAgICBtYXRoLm1pbigyLjcsIDcuMSwgLTQuNSwgMi4wLCA0LjEpICAgIC8vIHJldHVybnMgLTQuNVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgbWVhbiwgbWVkaWFuLCBtYXgsIHByb2QsIHN0ZCwgc3VtLCB2YXJpYW5jZVxuICAgKlxuICAgKiBAcGFyYW0gey4uLiAqfSBhcmdzICBBIHNpbmdsZSBtYXRyaXggb3Igb3IgbXVsdGlwbGUgc2NhbGFyIHZhbHVlc1xuICAgKiBAcmV0dXJuIHsqfSBUaGUgbWluaW11bSB2YWx1ZVxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAvLyBtaW4oW2EsIGIsIGMsIGQsIC4uLl0pXG4gICAgJ0FycmF5IHwgTWF0cml4JzogX21pbixcbiAgICAvLyBtaW4oW2EsIGIsIGMsIGQsIC4uLl0sIGRpbSlcbiAgICAnQXJyYXkgfCBNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIEFycmF5TWF0cml4TnVtYmVyQmlnTnVtYmVyKGFycmF5LCBkaW0pIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24ucmVkdWNlKShhcnJheSwgZGltLnZhbHVlT2YoKSwgX3NtYWxsZXN0KTtcbiAgICB9LFxuICAgIC8vIG1pbihhLCBiLCBjLCBkLCAuLi4pXG4gICAgJy4uLic6IGZ1bmN0aW9uIF8oYXJncykge1xuICAgICAgaWYgKCgwLCBfY29sbGVjdGlvbi5jb250YWluc0NvbGxlY3Rpb25zKShhcmdzKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTY2FsYXIgdmFsdWVzIGV4cGVjdGVkIGluIGZ1bmN0aW9uIG1pbicpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX21pbihhcmdzKTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogUmV0dXJuIHRoZSBzbWFsbGVzdCBvZiB0d28gdmFsdWVzXG4gICAqIEBwYXJhbSB7Kn0geFxuICAgKiBAcGFyYW0geyp9IHlcbiAgICogQHJldHVybnMgeyp9IFJldHVybnMgeCB3aGVuIHggaXMgc21hbGxlc3QsIG9yIHkgd2hlbiB5IGlzIHNtYWxsZXN0XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9zbWFsbGVzdCh4LCB5KSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBzbWFsbGVyKHgsIHkpID8geCA6IHk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aHJvdyAoMCwgX2ltcHJvdmVFcnJvck1lc3NhZ2UuaW1wcm92ZUVycm9yTWVzc2FnZSkoZXJyLCAnbWluJywgeSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZWN1cnNpdmVseSBjYWxjdWxhdGUgdGhlIG1pbmltdW0gdmFsdWUgaW4gYW4gbi1kaW1lbnNpb25hbCBhcnJheVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheVxuICAgKiBAcmV0dXJuIHtudW1iZXJ9IG1pblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9taW4oYXJyYXkpIHtcbiAgICB2YXIgbWluO1xuICAgICgwLCBfY29sbGVjdGlvbi5kZWVwRm9yRWFjaCkoYXJyYXksIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSAmJiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgbWluID0gTmFOO1xuICAgICAgICB9IGVsc2UgaWYgKG1pbiA9PT0gdW5kZWZpbmVkIHx8IHNtYWxsZXIodmFsdWUsIG1pbikpIHtcbiAgICAgICAgICBtaW4gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93ICgwLCBfaW1wcm92ZUVycm9yTWVzc2FnZS5pbXByb3ZlRXJyb3JNZXNzYWdlKShlcnIsICdtaW4nLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAobWluID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSBtaW4gb2YgYW4gZW1wdHkgYXJyYXknKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWluO1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlTWluID0gY3JlYXRlTWluOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVNb2RlID0gdm9pZCAwO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnbW9kZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdpc05hTicsICdpc051bWVyaWMnXTtcbnZhciBjcmVhdGVNb2RlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGlzTmFOID0gX3JlZi5pc05hTixcbiAgICAgIGlzTnVtZXJpYyA9IF9yZWYuaXNOdW1lcmljO1xuXG4gIC8qKlxuICAqIENvbXB1dGVzIHRoZSBtb2RlIG9mIGEgc2V0IG9mIG51bWJlcnMgb3IgYSBsaXN0IHdpdGggdmFsdWVzKG51bWJlcnMgb3IgY2hhcmFjdGVycykuXG4gICogSWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgbW9kZXMsIGl0IHJldHVybnMgYSBsaXN0IG9mIHRob3NlIHZhbHVlcy5cbiAgKlxuICAqIFN5bnRheDpcbiAgKlxuICAqICAgICBtYXRoLm1vZGUoYSwgYiwgYywgLi4uKVxuICAqICAgICBtYXRoLm1vZGUoQSlcbiAgKlxuICAqIEV4YW1wbGVzOlxuICAqXG4gICogICAgIG1hdGgubW9kZSgyLCAxLCA0LCAzLCAxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIFsxXVxuICAqICAgICBtYXRoLm1vZGUoWzEsIDIuNywgMy4yLCA0LCAyLjddKSAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBbMi43XVxuICAqICAgICBtYXRoLm1vZGUoMSwgNCwgNiwgMSwgNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgWzEsIDZdXG4gICogICAgIG1hdGgubW9kZSgnYScsJ2EnLCdiJywnYycpICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBbXCJhXCJdXG4gICogICAgIG1hdGgubW9kZSgxLCAxLjUsICdhYmMnKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBbMSwgMS41LCBcImFiY1wiXVxuICAqXG4gICogU2VlIGFsc286XG4gICpcbiAgKiAgICAgbWVkaWFuLFxuICAqICAgICBtZWFuXG4gICpcbiAgKiBAcGFyYW0gey4uLiAqfSBhcmdzICBBIHNpbmdsZSBtYXRyaXhcbiAgKiBAcmV0dXJuIHsqfSBUaGUgbW9kZSBvZiBhbGwgdmFsdWVzXG4gICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ0FycmF5IHwgTWF0cml4JzogX21vZGUsXG4gICAgJy4uLic6IGZ1bmN0aW9uIF8oYXJncykge1xuICAgICAgcmV0dXJuIF9tb2RlKGFyZ3MpO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBtb2RlIGluIGFuIDEtZGltZW5zaW9uYWwgYXJyYXlcbiAgICogQHBhcmFtIHtBcnJheX0gdmFsdWVzXG4gICAqIEByZXR1cm4ge0FycmF5fSBtb2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9tb2RlKHZhbHVlcykge1xuICAgIHZhbHVlcyA9ICgwLCBfYXJyYXkuZmxhdHRlbikodmFsdWVzLnZhbHVlT2YoKSk7XG4gICAgdmFyIG51bSA9IHZhbHVlcy5sZW5ndGg7XG5cbiAgICBpZiAobnVtID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjYWxjdWxhdGUgbW9kZSBvZiBhbiBlbXB0eSBhcnJheScpO1xuICAgIH1cblxuICAgIHZhciBjb3VudCA9IHt9O1xuICAgIHZhciBtb2RlID0gW107XG4gICAgdmFyIG1heCA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbHVlID0gdmFsdWVzW2ldO1xuXG4gICAgICBpZiAoaXNOdW1lcmljKHZhbHVlKSAmJiBpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY2FsY3VsYXRlIG1vZGUgb2YgYW4gYXJyYXkgY29udGFpbmluZyBOYU4gdmFsdWVzJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghKHZhbHVlIGluIGNvdW50KSkge1xuICAgICAgICBjb3VudFt2YWx1ZV0gPSAwO1xuICAgICAgfVxuXG4gICAgICBjb3VudFt2YWx1ZV0rKztcblxuICAgICAgaWYgKGNvdW50W3ZhbHVlXSA9PT0gbWF4KSB7XG4gICAgICAgIG1vZGUucHVzaCh2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKGNvdW50W3ZhbHVlXSA+IG1heCkge1xuICAgICAgICBtYXggPSBjb3VudFt2YWx1ZV07XG4gICAgICAgIG1vZGUgPSBbdmFsdWVdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtb2RlO1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlTW9kZSA9IGNyZWF0ZU1vZGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVByb2QgPSB2b2lkIDA7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9pbXByb3ZlRXJyb3JNZXNzYWdlID0gcmVxdWlyZShcIi4vdXRpbHMvaW1wcm92ZUVycm9yTWVzc2FnZVwiKTtcblxudmFyIG5hbWUgPSAncHJvZCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtdWx0aXBseSddO1xudmFyIGNyZWF0ZVByb2QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5O1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBwcm9kdWN0IG9mIGEgbWF0cml4IG9yIGEgbGlzdCB3aXRoIHZhbHVlcy5cbiAgICogSW4gY2FzZSBvZiBhIChtdWx0aSBkaW1lbnNpb25hbCkgYXJyYXkgb3IgbWF0cml4LCB0aGUgc3VtIG9mIGFsbFxuICAgKiBlbGVtZW50cyB3aWxsIGJlIGNhbGN1bGF0ZWQuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGgucHJvZChhLCBiLCBjLCAuLi4pXG4gICAqICAgICBtYXRoLnByb2QoQSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLm11bHRpcGx5KDIsIDMpICAgICAgICAgICAvLyByZXR1cm5zIDZcbiAgICogICAgIG1hdGgucHJvZCgyLCAzKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgNlxuICAgKiAgICAgbWF0aC5wcm9kKDIsIDMsIDQpICAgICAgICAgICAgLy8gcmV0dXJucyAyNFxuICAgKiAgICAgbWF0aC5wcm9kKFsyLCAzLCA0XSkgICAgICAgICAgLy8gcmV0dXJucyAyNFxuICAgKiAgICAgbWF0aC5wcm9kKFtbMiwgNV0sIFs0LCAzXV0pICAgLy8gcmV0dXJucyAxMjBcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIG1lYW4sIG1lZGlhbiwgbWluLCBtYXgsIHN1bSwgc3RkLCB2YXJpYW5jZVxuICAgKlxuICAgKiBAcGFyYW0gey4uLiAqfSBhcmdzICBBIHNpbmdsZSBtYXRyaXggb3Igb3IgbXVsdGlwbGUgc2NhbGFyIHZhbHVlc1xuICAgKiBAcmV0dXJuIHsqfSBUaGUgcHJvZHVjdCBvZiBhbGwgdmFsdWVzXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIC8vIHByb2QoW2EsIGIsIGMsIGQsIC4uLl0pXG4gICAgJ0FycmF5IHwgTWF0cml4JzogX3Byb2QsXG4gICAgLy8gcHJvZChbYSwgYiwgYywgZCwgLi4uXSwgZGltKVxuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhOdW1iZXJCaWdOdW1iZXIoYXJyYXksIGRpbSkge1xuICAgICAgLy8gVE9ETzogaW1wbGVtZW50IHByb2QoQSwgZGltKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdwcm9kKEEsIGRpbSkgaXMgbm90IHlldCBzdXBwb3J0ZWQnKTsgLy8gcmV0dXJuIHJlZHVjZShhcmd1bWVudHNbMF0sIGFyZ3VtZW50c1sxXSwgbWF0aC5wcm9kKVxuICAgIH0sXG4gICAgLy8gcHJvZChhLCBiLCBjLCBkLCAuLi4pXG4gICAgJy4uLic6IGZ1bmN0aW9uIF8oYXJncykge1xuICAgICAgcmV0dXJuIF9wcm9kKGFyZ3MpO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBSZWN1cnNpdmVseSBjYWxjdWxhdGUgdGhlIHByb2R1Y3Qgb2YgYW4gbi1kaW1lbnNpb25hbCBhcnJheVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheVxuICAgKiBAcmV0dXJuIHtudW1iZXJ9IHByb2RcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgZnVuY3Rpb24gX3Byb2QoYXJyYXkpIHtcbiAgICB2YXIgcHJvZDtcbiAgICAoMCwgX2NvbGxlY3Rpb24uZGVlcEZvckVhY2gpKGFycmF5LCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHByb2QgPSBwcm9kID09PSB1bmRlZmluZWQgPyB2YWx1ZSA6IG11bHRpcGx5KHByb2QsIHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyAoMCwgX2ltcHJvdmVFcnJvck1lc3NhZ2UuaW1wcm92ZUVycm9yTWVzc2FnZSkoZXJyLCAncHJvZCcsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChwcm9kID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSBwcm9kIG9mIGFuIGVtcHR5IGFycmF5Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb2Q7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVQcm9kID0gY3JlYXRlUHJvZDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUXVhbnRpbGVTZXEgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3F1YW50aWxlU2VxJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FkZCcsICdtdWx0aXBseScsICdwYXJ0aXRpb25TZWxlY3QnLCAnY29tcGFyZSddO1xudmFyIGNyZWF0ZVF1YW50aWxlU2VxID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGFkZCA9IF9yZWYuYWRkLFxuICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5LFxuICAgICAgcGFydGl0aW9uU2VsZWN0ID0gX3JlZi5wYXJ0aXRpb25TZWxlY3QsXG4gICAgICBjb21wYXJlID0gX3JlZi5jb21wYXJlO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBwcm9iIG9yZGVyIHF1YW50aWxlIG9mIGEgbWF0cml4IG9yIGEgbGlzdCB3aXRoIHZhbHVlcy5cbiAgICogVGhlIHNlcXVlbmNlIGlzIHNvcnRlZCBhbmQgdGhlIG1pZGRsZSB2YWx1ZSBpcyByZXR1cm5lZC5cbiAgICogU3VwcG9ydGVkIHR5cGVzIG9mIHNlcXVlbmNlIHZhbHVlcyBhcmU6IE51bWJlciwgQmlnTnVtYmVyLCBVbml0XG4gICAqIFN1cHBvcnRlZCB0eXBlcyBvZiBwcm9iYWJpbGl0eSBhcmU6IE51bWJlciwgQmlnTnVtYmVyXG4gICAqXG4gICAqIEluIGNhc2Ugb2YgYSAobXVsdGkgZGltZW5zaW9uYWwpIGFycmF5IG9yIG1hdHJpeCwgdGhlIHByb2Igb3JkZXIgcXVhbnRpbGVcbiAgICogb2YgYWxsIGVsZW1lbnRzIHdpbGwgYmUgY2FsY3VsYXRlZC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5xdWFudGlsZVNlcShBLCBwcm9iWywgc29ydGVkXSlcbiAgICogICAgIG1hdGgucXVhbnRpbGVTZXEoQSwgW3Byb2IxLCBwcm9iMiwgLi4uXVssIHNvcnRlZF0pXG4gICAqICAgICBtYXRoLnF1YW50aWxlU2VxKEEsIE5bLCBzb3J0ZWRdKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGgucXVhbnRpbGVTZXEoWzMsIC0xLCA1LCA3XSwgMC41KSAgICAgICAgIC8vIHJldHVybnMgNFxuICAgKiAgICAgbWF0aC5xdWFudGlsZVNlcShbMywgLTEsIDUsIDddLCBbMS8zLCAyLzNdKSAgLy8gcmV0dXJucyBbMywgNV1cbiAgICogICAgIG1hdGgucXVhbnRpbGVTZXEoWzMsIC0xLCA1LCA3XSwgMikgICAgICAgICAgIC8vIHJldHVybnMgWzMsIDVdXG4gICAqICAgICBtYXRoLnF1YW50aWxlU2VxKFstMSwgMywgNSwgN10sIDAuNSwgdHJ1ZSkgICAvLyByZXR1cm5zIDRcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBtZWRpYW4sIG1lYW4sIG1pbiwgbWF4LCBzdW0sIHByb2QsIHN0ZCwgdmFyaWFuY2VcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheSwgTWF0cml4fSBkYXRhICAgICAgICAgICAgICAgIEEgc2luZ2xlIG1hdHJpeCBvciBBcnJheVxuICAgKiBAcGFyYW0ge051bWJlciwgQmlnTnVtYmVyLCBBcnJheX0gcHJvYk9yTiAgcHJvYiBpcyB0aGUgb3JkZXIgb2YgdGhlIHF1YW50aWxlLCB3aGlsZSBOIGlzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYW1vdW50IG9mIGV2ZW5seSBkaXN0cmlidXRlZCBzdGVwcyBvZlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvYmFiaWxpdGllczsgb25seSBvbmUgb2YgdGhlc2Ugb3B0aW9ucyBjYW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIHByb3ZpZGVkXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gc29ydGVkPWZhbHNlICAgICAgICAgICAgICBpcyBkYXRhIHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXJcbiAgICogQHJldHVybiB7TnVtYmVyLCBCaWdOdW1iZXIsIFVuaXQsIEFycmF5fSAgIFF1YW50aWxlKHMpXG4gICAqL1xuICBmdW5jdGlvbiBxdWFudGlsZVNlcShkYXRhLCBwcm9iT3JOLCBzb3J0ZWQpIHtcbiAgICB2YXIgcHJvYkFyciwgZGF0YUFyciwgb25lO1xuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyIHx8IGFyZ3VtZW50cy5sZW5ndGggPiAzKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0Z1bmN0aW9uIHF1YW50aWxlU2VxIHJlcXVpcmVzIHR3byBvciB0aHJlZSBwYXJhbWV0ZXJzJyk7XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfaXMuaXNDb2xsZWN0aW9uKShkYXRhKSkge1xuICAgICAgc29ydGVkID0gc29ydGVkIHx8IGZhbHNlO1xuXG4gICAgICBpZiAodHlwZW9mIHNvcnRlZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIGRhdGFBcnIgPSBkYXRhLnZhbHVlT2YoKTtcblxuICAgICAgICBpZiAoKDAsIF9pcy5pc051bWJlcikocHJvYk9yTikpIHtcbiAgICAgICAgICBpZiAocHJvYk9yTiA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTi9wcm9iIG11c3QgYmUgbm9uLW5lZ2F0aXZlJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHByb2JPck4gPD0gMSkge1xuICAgICAgICAgICAgLy8gcXVhbnRpbGVTZXEoW2EsIGIsIGMsIGQsIC4uLl0sIHByb2JbLHNvcnRlZF0pXG4gICAgICAgICAgICByZXR1cm4gX3F1YW50aWxlU2VxKGRhdGFBcnIsIHByb2JPck4sIHNvcnRlZCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHByb2JPck4gPiAxKSB7XG4gICAgICAgICAgICAvLyBxdWFudGlsZVNlcShbYSwgYiwgYywgZCwgLi4uXSwgTlssc29ydGVkXSlcbiAgICAgICAgICAgIGlmICghKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShwcm9iT3JOKSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ04gbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXInKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIG5QbHVzT25lID0gcHJvYk9yTiArIDE7XG4gICAgICAgICAgICBwcm9iQXJyID0gbmV3IEFycmF5KHByb2JPck4pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb2JPck47KSB7XG4gICAgICAgICAgICAgIHByb2JBcnJbaV0gPSBfcXVhbnRpbGVTZXEoZGF0YUFyciwgKytpIC8gblBsdXNPbmUsIHNvcnRlZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBwcm9iQXJyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShwcm9iT3JOKSkge1xuICAgICAgICAgIHZhciBCaWdOdW1iZXIgPSBwcm9iT3JOLmNvbnN0cnVjdG9yO1xuXG4gICAgICAgICAgaWYgKHByb2JPck4uaXNOZWdhdGl2ZSgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ04vcHJvYiBtdXN0IGJlIG5vbi1uZWdhdGl2ZScpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG9uZSA9IG5ldyBCaWdOdW1iZXIoMSk7XG5cbiAgICAgICAgICBpZiAocHJvYk9yTi5sdGUob25lKSkge1xuICAgICAgICAgICAgLy8gcXVhbnRpbGVTZXEoW2EsIGIsIGMsIGQsIC4uLl0sIHByb2JbLHNvcnRlZF0pXG4gICAgICAgICAgICByZXR1cm4gbmV3IEJpZ051bWJlcihfcXVhbnRpbGVTZXEoZGF0YUFyciwgcHJvYk9yTiwgc29ydGVkKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHByb2JPck4uZ3Qob25lKSkge1xuICAgICAgICAgICAgLy8gcXVhbnRpbGVTZXEoW2EsIGIsIGMsIGQsIC4uLl0sIE5bLHNvcnRlZF0pXG4gICAgICAgICAgICBpZiAoIXByb2JPck4uaXNJbnRlZ2VyKCkpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyJyk7XG4gICAgICAgICAgICB9IC8vIGxhcmdlc3QgcG9zc2libGUgQXJyYXkgbGVuZ3RoIGlzIDJeMzItMVxuICAgICAgICAgICAgLy8gMl4zMiA8IDEwXjE1LCB0aHVzIHNhZmUgY29udmVyc2lvbiBndWFyYW50ZWVkXG5cblxuICAgICAgICAgICAgdmFyIGludE4gPSBwcm9iT3JOLnRvTnVtYmVyKCk7XG5cbiAgICAgICAgICAgIGlmIChpbnROID4gNDI5NDk2NzI5NSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ04gbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMl4zMi0xLCBhcyB0aGF0IGlzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhbiBBcnJheScpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgX25QbHVzT25lID0gbmV3IEJpZ051bWJlcihpbnROICsgMSk7XG5cbiAgICAgICAgICAgIHByb2JBcnIgPSBuZXcgQXJyYXkoaW50Tik7XG5cbiAgICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBpbnROOykge1xuICAgICAgICAgICAgICBwcm9iQXJyW19pXSA9IG5ldyBCaWdOdW1iZXIoX3F1YW50aWxlU2VxKGRhdGFBcnIsIG5ldyBCaWdOdW1iZXIoKytfaSkuZGl2KF9uUGx1c09uZSksIHNvcnRlZCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcHJvYkFycjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9iT3JOKSkge1xuICAgICAgICAgIC8vIHF1YW50aWxlU2VxKFthLCBiLCBjLCBkLCAuLi5dLCBbcHJvYjEsIHByb2IyLCAuLi5dWyxzb3J0ZWRdKVxuICAgICAgICAgIHByb2JBcnIgPSBuZXcgQXJyYXkocHJvYk9yTi5sZW5ndGgpO1xuXG4gICAgICAgICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgcHJvYkFyci5sZW5ndGg7ICsrX2kyKSB7XG4gICAgICAgICAgICB2YXIgY3VyclByb2IgPSBwcm9iT3JOW19pMl07XG5cbiAgICAgICAgICAgIGlmICgoMCwgX2lzLmlzTnVtYmVyKShjdXJyUHJvYikpIHtcbiAgICAgICAgICAgICAgaWYgKGN1cnJQcm9iIDwgMCB8fCBjdXJyUHJvYiA+IDEpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb2JhYmlsaXR5IG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxLCBpbmNsdXNpdmUnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShjdXJyUHJvYikpIHtcbiAgICAgICAgICAgICAgb25lID0gbmV3IGN1cnJQcm9iLmNvbnN0cnVjdG9yKDEpO1xuXG4gICAgICAgICAgICAgIGlmIChjdXJyUHJvYi5pc05lZ2F0aXZlKCkgfHwgY3VyclByb2IuZ3Qob25lKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUHJvYmFiaWxpdHkgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEsIGluY2x1c2l2ZScpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmV4cGVjdGVkIHR5cGUgb2YgYXJndW1lbnQgaW4gZnVuY3Rpb24gcXVhbnRpbGVTZXEnKTsgLy8gRklYTUU6IGJlY29tZXMgcmVkdW5kYW50IHdoZW4gY29udmVydGVkIHRvIHR5cGVkLWZ1bmN0aW9uXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByb2JBcnJbX2kyXSA9IF9xdWFudGlsZVNlcShkYXRhQXJyLCBjdXJyUHJvYiwgc29ydGVkKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcHJvYkFycjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuZXhwZWN0ZWQgdHlwZSBvZiBhcmd1bWVudCBpbiBmdW5jdGlvbiBxdWFudGlsZVNlcScpOyAvLyBGSVhNRTogYmVjb21lcyByZWR1bmRhbnQgd2hlbiBjb252ZXJ0ZWQgdG8gdHlwZWQtZnVuY3Rpb25cbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5leHBlY3RlZCB0eXBlIG9mIGFyZ3VtZW50IGluIGZ1bmN0aW9uIHF1YW50aWxlU2VxJyk7IC8vIEZJWE1FOiBiZWNvbWVzIHJlZHVuZGFudCB3aGVuIGNvbnZlcnRlZCB0byB0eXBlZC1mdW5jdGlvblxuICAgIH1cblxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuZXhwZWN0ZWQgdHlwZSBvZiBhcmd1bWVudCBpbiBmdW5jdGlvbiBxdWFudGlsZVNlcScpOyAvLyBGSVhNRTogYmVjb21lcyByZWR1bmRhbnQgd2hlbiBjb252ZXJ0ZWQgdG8gdHlwZWQtZnVuY3Rpb25cbiAgfVxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBwcm9iIG9yZGVyIHF1YW50aWxlIG9mIGFuIG4tZGltZW5zaW9uYWwgYXJyYXkuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gICAqIEBwYXJhbSB7TnVtYmVyLCBCaWdOdW1iZXJ9IHByb2JcbiAgICogQHBhcmFtIHtCb29sZWFufSBzb3J0ZWRcbiAgICogQHJldHVybiB7TnVtYmVyLCBCaWdOdW1iZXIsIFVuaXR9IHByb2Igb3JkZXIgcXVhbnRpbGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBfcXVhbnRpbGVTZXEoYXJyYXksIHByb2IsIHNvcnRlZCkge1xuICAgIHZhciBmbGF0ID0gKDAsIF9hcnJheS5mbGF0dGVuKShhcnJheSk7XG4gICAgdmFyIGxlbiA9IGZsYXQubGVuZ3RoO1xuXG4gICAgaWYgKGxlbiA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY2FsY3VsYXRlIHF1YW50aWxlIG9mIGFuIGVtcHR5IHNlcXVlbmNlJyk7XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKHByb2IpKSB7XG4gICAgICB2YXIgX2luZGV4ID0gcHJvYiAqIChsZW4gLSAxKTtcblxuICAgICAgdmFyIF9mcmFjUGFydCA9IF9pbmRleCAlIDE7XG5cbiAgICAgIGlmIChfZnJhY1BhcnQgPT09IDApIHtcbiAgICAgICAgdmFyIHZhbHVlID0gc29ydGVkID8gZmxhdFtfaW5kZXhdIDogcGFydGl0aW9uU2VsZWN0KGZsYXQsIF9pbmRleCk7XG4gICAgICAgIHZhbGlkYXRlKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgX2ludGVnZXJQYXJ0ID0gTWF0aC5mbG9vcihfaW5kZXgpO1xuXG4gICAgICB2YXIgX2xlZnQ7XG5cbiAgICAgIHZhciBfcmlnaHQ7XG5cbiAgICAgIGlmIChzb3J0ZWQpIHtcbiAgICAgICAgX2xlZnQgPSBmbGF0W19pbnRlZ2VyUGFydF07XG4gICAgICAgIF9yaWdodCA9IGZsYXRbX2ludGVnZXJQYXJ0ICsgMV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfcmlnaHQgPSBwYXJ0aXRpb25TZWxlY3QoZmxhdCwgX2ludGVnZXJQYXJ0ICsgMSk7IC8vIG1heCBvZiBwYXJ0aXRpb24gaXMga3RoIGxhcmdlc3RcblxuICAgICAgICBfbGVmdCA9IGZsYXRbX2ludGVnZXJQYXJ0XTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IF9pbnRlZ2VyUGFydDsgKytpKSB7XG4gICAgICAgICAgaWYgKGNvbXBhcmUoZmxhdFtpXSwgX2xlZnQpID4gMCkge1xuICAgICAgICAgICAgX2xlZnQgPSBmbGF0W2ldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YWxpZGF0ZShfbGVmdCk7XG4gICAgICB2YWxpZGF0ZShfcmlnaHQpOyAvLyBRKHByb2IpID0gKDEtZikqQVtmbG9vcihpbmRleCldICsgZipBW2Zsb29yKGluZGV4KSsxXVxuXG4gICAgICByZXR1cm4gYWRkKG11bHRpcGx5KF9sZWZ0LCAxIC0gX2ZyYWNQYXJ0KSwgbXVsdGlwbHkoX3JpZ2h0LCBfZnJhY1BhcnQpKTtcbiAgICB9IC8vIElmIHByb2IgaXMgYSBCaWdOdW1iZXJcblxuXG4gICAgdmFyIGluZGV4ID0gcHJvYi50aW1lcyhsZW4gLSAxKTtcblxuICAgIGlmIChpbmRleC5pc0ludGVnZXIoKSkge1xuICAgICAgaW5kZXggPSBpbmRleC50b051bWJlcigpO1xuXG4gICAgICB2YXIgX3ZhbHVlID0gc29ydGVkID8gZmxhdFtpbmRleF0gOiBwYXJ0aXRpb25TZWxlY3QoZmxhdCwgaW5kZXgpO1xuXG4gICAgICB2YWxpZGF0ZShfdmFsdWUpO1xuICAgICAgcmV0dXJuIF92YWx1ZTtcbiAgICB9XG5cbiAgICB2YXIgaW50ZWdlclBhcnQgPSBpbmRleC5mbG9vcigpO1xuICAgIHZhciBmcmFjUGFydCA9IGluZGV4Lm1pbnVzKGludGVnZXJQYXJ0KTtcbiAgICB2YXIgaW50ZWdlclBhcnROdW1iZXIgPSBpbnRlZ2VyUGFydC50b051bWJlcigpO1xuICAgIHZhciBsZWZ0O1xuICAgIHZhciByaWdodDtcblxuICAgIGlmIChzb3J0ZWQpIHtcbiAgICAgIGxlZnQgPSBmbGF0W2ludGVnZXJQYXJ0TnVtYmVyXTtcbiAgICAgIHJpZ2h0ID0gZmxhdFtpbnRlZ2VyUGFydE51bWJlciArIDFdO1xuICAgIH0gZWxzZSB7XG4gICAgICByaWdodCA9IHBhcnRpdGlvblNlbGVjdChmbGF0LCBpbnRlZ2VyUGFydE51bWJlciArIDEpOyAvLyBtYXggb2YgcGFydGl0aW9uIGlzIGt0aCBsYXJnZXN0XG5cbiAgICAgIGxlZnQgPSBmbGF0W2ludGVnZXJQYXJ0TnVtYmVyXTtcblxuICAgICAgZm9yICh2YXIgX2kzID0gMDsgX2kzIDwgaW50ZWdlclBhcnROdW1iZXI7ICsrX2kzKSB7XG4gICAgICAgIGlmIChjb21wYXJlKGZsYXRbX2kzXSwgbGVmdCkgPiAwKSB7XG4gICAgICAgICAgbGVmdCA9IGZsYXRbX2kzXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhbGlkYXRlKGxlZnQpO1xuICAgIHZhbGlkYXRlKHJpZ2h0KTsgLy8gUShwcm9iKSA9ICgxLWYpKkFbZmxvb3IoaW5kZXgpXSArIGYqQVtmbG9vcihpbmRleCkrMV1cblxuICAgIHZhciBvbmUgPSBuZXcgZnJhY1BhcnQuY29uc3RydWN0b3IoMSk7XG4gICAgcmV0dXJuIGFkZChtdWx0aXBseShsZWZ0LCBvbmUubWludXMoZnJhY1BhcnQpKSwgbXVsdGlwbHkocmlnaHQsIGZyYWNQYXJ0KSk7XG4gIH1cbiAgLyoqXG4gICAqIENoZWNrIGlmIGFycmF5IHZhbHVlIHR5cGVzIGFyZSB2YWxpZCwgdGhyb3cgZXJyb3Igb3RoZXJ3aXNlLlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IFVuaXR9IHhcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBVbml0fSB4XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgdmFyIHZhbGlkYXRlID0gdHlwZWQoe1xuICAgICdudW1iZXIgfCBCaWdOdW1iZXIgfCBVbml0JzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyVW5pdCh4KSB7XG4gICAgICByZXR1cm4geDtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcXVhbnRpbGVTZXE7XG59KTtcbmV4cG9ydHMuY3JlYXRlUXVhbnRpbGVTZXEgPSBjcmVhdGVRdWFudGlsZVNlcTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3RkID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnc3RkJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ3NxcnQnLCAndmFyaWFuY2UnXTtcbnZhciBjcmVhdGVTdGQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgc3FydCA9IF9yZWYuc3FydCxcbiAgICAgIHZhcmlhbmNlID0gX3JlZi52YXJpYW5jZTtcblxuICAvKipcbiAgICogQ29tcHV0ZSB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIGEgbWF0cml4IG9yIGEgIGxpc3Qgd2l0aCB2YWx1ZXMuXG4gICAqIFRoZSBzdGFuZGFyZCBkZXZpYXRpb25zIGlzIGRlZmluZWQgYXMgdGhlIHNxdWFyZSByb290IG9mIHRoZSB2YXJpYW5jZTpcbiAgICogYHN0ZChBKSA9IHNxcnQodmFyaWFuY2UoQSkpYC5cbiAgICogSW4gY2FzZSBvZiBhIChtdWx0aSBkaW1lbnNpb25hbCkgYXJyYXkgb3IgbWF0cml4LCB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uXG4gICAqIG92ZXIgYWxsIGVsZW1lbnRzIHdpbGwgYmUgY2FsY3VsYXRlZCBieSBkZWZhdWx0LCB1bmxlc3MgYW4gYXhpcyBpcyBzcGVjaWZpZWRcbiAgICogaW4gd2hpY2ggY2FzZSB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIHdpbGwgYmUgY29tcHV0ZWQgYWxvbmcgdGhhdCBheGlzLlxuICAgKlxuICAgKiBBZGRpdGlvbmFsbHksIGl0IGlzIHBvc3NpYmxlIHRvIGNvbXB1dGUgdGhlIHN0YW5kYXJkIGRldmlhdGlvbiBhbG9uZyB0aGUgcm93c1xuICAgKiBvciBjb2x1bW5zIG9mIGEgbWF0cml4IGJ5IHNwZWNpZnlpbmcgdGhlIGRpbWVuc2lvbiBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50LlxuICAgKlxuICAgKiBPcHRpb25hbGx5LCB0aGUgdHlwZSBvZiBub3JtYWxpemF0aW9uIGNhbiBiZSBzcGVjaWZpZWQgYXMgdGhlIGZpbmFsXG4gICAqIHBhcmFtZXRlci4gVGhlIHBhcmFtZXRlciBgbm9ybWFsaXphdGlvbmAgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczpcbiAgICpcbiAgICogLSAndW5iaWFzZWQnIChkZWZhdWx0KSBUaGUgc3VtIG9mIHNxdWFyZWQgZXJyb3JzIGlzIGRpdmlkZWQgYnkgKG4gLSAxKVxuICAgKiAtICd1bmNvcnJlY3RlZCcgICAgICAgIFRoZSBzdW0gb2Ygc3F1YXJlZCBlcnJvcnMgaXMgZGl2aWRlZCBieSBuXG4gICAqIC0gJ2JpYXNlZCcgICAgICAgICAgICAgVGhlIHN1bSBvZiBzcXVhcmVkIGVycm9ycyBpcyBkaXZpZGVkIGJ5IChuICsgMSlcbiAgICpcbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5zdGQoYSwgYiwgYywgLi4uKVxuICAgKiAgICAgbWF0aC5zdGQoQSlcbiAgICogICAgIG1hdGguc3RkKEEsIG5vcm1hbGl6YXRpb24pXG4gICAqICAgICBtYXRoLnN0ZChBLCBkaW1lbnNpb24pXG4gICAqICAgICBtYXRoLnN0ZChBLCBkaW1lbnNpb24sIG5vcm1hbGl6YXRpb24pXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgbWF0aC5zdGQoMiwgNCwgNikgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDJcbiAgICogICAgIG1hdGguc3RkKFsyLCA0LCA2LCA4XSkgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAyLjU4MTk4ODg5NzQ3MTYxMVxuICAgKiAgICAgbWF0aC5zdGQoWzIsIDQsIDYsIDhdLCAndW5jb3JyZWN0ZWQnKSAvLyByZXR1cm5zIDIuMjM2MDY3OTc3NDk5NzlcbiAgICogICAgIG1hdGguc3RkKFsyLCA0LCA2LCA4XSwgJ2JpYXNlZCcpICAgICAgLy8gcmV0dXJucyAyXG4gICAqXG4gICAqICAgICBtYXRoLnN0ZChbWzEsIDIsIDNdLCBbNCwgNSwgNl1dKSAgICAgIC8vIHJldHVybnMgMS44NzA4Mjg2OTMzODY5NzA3XG4gICAqICAgICBtYXRoLnN0ZChbWzEsIDIsIDNdLCBbNCwgNiwgOF1dLCAwKSAgICAvLyByZXR1cm5zIFsyLjEyMTMyMDM0MzU1OTY0MjQsIDIuODI4NDI3MTI0NzQ2MTkwMywgMy41MzU1MzM5MDU5MzI3Mzc4XVxuICAgKiAgICAgbWF0aC5zdGQoW1sxLCAyLCAzXSwgWzQsIDYsIDhdXSwgMSkgICAgLy8gcmV0dXJucyBbMSwgMl1cbiAgICogICAgIG1hdGguc3RkKFtbMSwgMiwgM10sIFs0LCA2LCA4XV0sIDEsICdiaWFzZWQnKSAvLyByZXR1cm5zIFswLjcwNzEwNjc4MTE4NjU0NzYsIDEuNDE0MjEzNTYyMzczMDk1MV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIG1lYW4sIG1lZGlhbiwgbWF4LCBtaW4sIHByb2QsIHN1bSwgdmFyaWFuY2VcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0gYXJyYXlcbiAgICogICAgICAgICAgICAgICAgICAgICAgICBBIHNpbmdsZSBtYXRyaXggb3Igb3IgbXVsdGlwbGUgc2NhbGFyIHZhbHVlc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW25vcm1hbGl6YXRpb249J3VuYmlhc2VkJ11cbiAgICogICAgICAgICAgICAgICAgICAgICAgICBEZXRlcm1pbmVzIGhvdyB0byBub3JtYWxpemUgdGhlIHZhcmlhbmNlLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIENob29zZSAndW5iaWFzZWQnIChkZWZhdWx0KSwgJ3VuY29ycmVjdGVkJywgb3IgJ2JpYXNlZCcuXG4gICAqIEBwYXJhbSBkaW1lbnNpb24ge251bWJlciB8IEJpZ051bWJlcn1cbiAgICogICAgICAgICAgICAgICAgICAgICAgICBEZXRlcm1pbmVzIHRoZSBheGlzIHRvIGNvbXB1dGUgdGhlIHN0YW5kYXJkIGRldmlhdGlvbiBmb3IgYSBtYXRyaXhcbiAgICogQHJldHVybiB7Kn0gVGhlIHN0YW5kYXJkIGRldmlhdGlvblxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAvLyBzdGQoW2EsIGIsIGMsIGQsIC4uLl0pXG4gICAgJ0FycmF5IHwgTWF0cml4JzogX3N0ZCxcbiAgICAvLyBzdGQoW2EsIGIsIGMsIGQsIC4uLl0sIG5vcm1hbGl6YXRpb24pXG4gICAgJ0FycmF5IHwgTWF0cml4LCBzdHJpbmcnOiBfc3RkLFxuICAgIC8vIHN0ZChbYSwgYiwgYywgYywgLi4uXSwgZGltKVxuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyJzogX3N0ZCxcbiAgICAvLyBzdGQoW2EsIGIsIGMsIGMsIC4uLl0sIGRpbSwgbm9ybWFsaXphdGlvbilcbiAgICAnQXJyYXkgfCBNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlciwgc3RyaW5nJzogX3N0ZCxcbiAgICAvLyBzdGQoYSwgYiwgYywgZCwgLi4uKVxuICAgICcuLi4nOiBmdW5jdGlvbiBfKGFyZ3MpIHtcbiAgICAgIHJldHVybiBfc3RkKGFyZ3MpO1xuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gX3N0ZChhcnJheSwgbm9ybWFsaXphdGlvbikge1xuICAgIGlmIChhcnJheS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignRnVuY3Rpb24gc3RkIHJlcXVpcmVzIG9uZSBvciBtb3JlIHBhcmFtZXRlcnMgKDAgcHJvdmlkZWQpJyk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBzcXJ0KHZhcmlhbmNlLmFwcGx5KG51bGwsIGFyZ3VtZW50cykpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIFR5cGVFcnJvciAmJiBlcnIubWVzc2FnZS5pbmRleE9mKCcgdmFyaWFuY2UnKSAhPT0gLTEpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihlcnIubWVzc2FnZS5yZXBsYWNlKCcgdmFyaWFuY2UnLCAnIHN0ZCcpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVTdGQgPSBjcmVhdGVTdGQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVN1bSA9IHZvaWQgMDtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2ltcHJvdmVFcnJvck1lc3NhZ2UgPSByZXF1aXJlKFwiLi91dGlscy9pbXByb3ZlRXJyb3JNZXNzYWdlXCIpO1xuXG52YXIgX25vb3AgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbm9vcFwiKTtcblxudmFyIG5hbWUgPSAnc3VtJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdhZGQnLCAnP2JpZ251bWJlcicsICc/ZnJhY3Rpb24nXTtcbnZhciBjcmVhdGVTdW0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBhZGQgPSBfcmVmLmFkZCxcbiAgICAgIGJpZ251bWJlciA9IF9yZWYuYmlnbnVtYmVyLFxuICAgICAgZnJhY3Rpb24gPSBfcmVmLmZyYWN0aW9uO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBzdW0gb2YgYSBtYXRyaXggb3IgYSBsaXN0IHdpdGggdmFsdWVzLlxuICAgKiBJbiBjYXNlIG9mIGEgKG11bHRpIGRpbWVuc2lvbmFsKSBhcnJheSBvciBtYXRyaXgsIHRoZSBzdW0gb2YgYWxsXG4gICAqIGVsZW1lbnRzIHdpbGwgYmUgY2FsY3VsYXRlZC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5zdW0oYSwgYiwgYywgLi4uKVxuICAgKiAgICAgbWF0aC5zdW0oQSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLnN1bSgyLCAxLCA0LCAzKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgMTBcbiAgICogICAgIG1hdGguc3VtKFsyLCAxLCA0LCAzXSkgICAgICAgICAgICAgLy8gcmV0dXJucyAxMFxuICAgKiAgICAgbWF0aC5zdW0oW1syLCA1XSwgWzQsIDNdLCBbMSwgN11dKSAvLyByZXR1cm5zIDIyXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBtZWFuLCBtZWRpYW4sIG1pbiwgbWF4LCBwcm9kLCBzdGQsIHZhcmlhbmNlXG4gICAqXG4gICAqIEBwYXJhbSB7Li4uICp9IGFyZ3MgIEEgc2luZ2xlIG1hdHJpeCBvciBvciBtdWx0aXBsZSBzY2FsYXIgdmFsdWVzXG4gICAqIEByZXR1cm4geyp9IFRoZSBzdW0gb2YgYWxsIHZhbHVlc1xuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAvLyBzdW0oW2EsIGIsIGMsIGQsIC4uLl0pXG4gICAgJ0FycmF5IHwgTWF0cml4JzogX3N1bSxcbiAgICAvLyBzdW0oW2EsIGIsIGMsIGQsIC4uLl0sIGRpbSlcbiAgICAnQXJyYXkgfCBNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IF9uc3VtRGltLFxuICAgIC8vIHN1bShhLCBiLCBjLCBkLCAuLi4pXG4gICAgJy4uLic6IGZ1bmN0aW9uIF8oYXJncykge1xuICAgICAgaWYgKCgwLCBfY29sbGVjdGlvbi5jb250YWluc0NvbGxlY3Rpb25zKShhcmdzKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTY2FsYXIgdmFsdWVzIGV4cGVjdGVkIGluIGZ1bmN0aW9uIHN1bScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3N1bShhcmdzKTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogUmVjdXJzaXZlbHkgY2FsY3VsYXRlIHRoZSBzdW0gb2YgYW4gbi1kaW1lbnNpb25hbCBhcnJheVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheVxuICAgKiBAcmV0dXJuIHtudW1iZXJ9IHN1bVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfc3VtKGFycmF5KSB7XG4gICAgdmFyIHN1bTtcbiAgICAoMCwgX2NvbGxlY3Rpb24uZGVlcEZvckVhY2gpKGFycmF5LCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHN1bSA9IHN1bSA9PT0gdW5kZWZpbmVkID8gdmFsdWUgOiBhZGQoc3VtLCB2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgKDAsIF9pbXByb3ZlRXJyb3JNZXNzYWdlLmltcHJvdmVFcnJvck1lc3NhZ2UpKGVyciwgJ3N1bScsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChzdW0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgc3dpdGNoIChjb25maWcubnVtYmVyKSB7XG4gICAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgY2FzZSAnQmlnTnVtYmVyJzpcbiAgICAgICAgICByZXR1cm4gYmlnbnVtYmVyID8gYmlnbnVtYmVyKDApIDogKDAsIF9ub29wLm5vQmlnbnVtYmVyKSgpO1xuXG4gICAgICAgIGNhc2UgJ0ZyYWN0aW9uJzpcbiAgICAgICAgICByZXR1cm4gZnJhY3Rpb24gPyBmcmFjdGlvbigwKSA6ICgwLCBfbm9vcC5ub0ZyYWN0aW9uKSgpO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1bTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9uc3VtRGltKGFycmF5LCBkaW0pIHtcbiAgICB0cnkge1xuICAgICAgdmFyIHN1bSA9ICgwLCBfY29sbGVjdGlvbi5yZWR1Y2UpKGFycmF5LCBkaW0sIGFkZCk7XG4gICAgICByZXR1cm4gc3VtO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgKDAsIF9pbXByb3ZlRXJyb3JNZXNzYWdlLmltcHJvdmVFcnJvck1lc3NhZ2UpKGVyciwgJ3N1bScpO1xuICAgIH1cbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZVN1bSA9IGNyZWF0ZVN1bTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaW1wcm92ZUVycm9yTWVzc2FnZSA9IGltcHJvdmVFcnJvck1lc3NhZ2U7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvaXNcIik7XG5cbi8qKlxuICogSW1wcm92ZSBlcnJvciBtZXNzYWdlcyBmb3Igc3RhdGlzdGljcyBmdW5jdGlvbnMuIEVycm9ycyBhcmUgdHlwaWNhbGx5XG4gKiB0aHJvd24gaW4gYW4gaW50ZXJuYWxseSB1c2VkIGZ1bmN0aW9uIGxpa2UgbGFyZ2VyLCBjYXVzaW5nIHRoZSBlcnJvclxuICogbm90IHRvIG1lbnRpb24gdGhlIGZ1bmN0aW9uIChsaWtlIG1heCkgd2hpY2ggaXMgYWN0dWFsbHkgdXNlZCBieSB0aGUgdXNlci5cbiAqXG4gKiBAcGFyYW0ge0Vycm9yfSBlcnJcbiAqIEBwYXJhbSB7U3RyaW5nfSBmbk5hbWVcbiAqIEBwYXJhbSB7Kn0gW3ZhbHVlXVxuICogQHJldHVybiB7RXJyb3J9XG4gKi9cbmZ1bmN0aW9uIGltcHJvdmVFcnJvck1lc3NhZ2UoZXJyLCBmbk5hbWUsIHZhbHVlKSB7XG4gIC8vIFRPRE86IGFkZCBpbmZvcm1hdGlvbiB3aXRoIHRoZSBpbmRleCAoYWxzbyBuZWVkcyB0cmFuc2Zvcm0gaW4gZXhwcmVzc2lvbiBwYXJzZXIpXG4gIHZhciBkZXRhaWxzO1xuXG4gIGlmIChTdHJpbmcoZXJyKS5pbmRleE9mKCdVbmV4cGVjdGVkIHR5cGUnKSAhPT0gLTEpIHtcbiAgICBkZXRhaWxzID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyAnICh0eXBlOiAnICsgKDAsIF9pcy50eXBlT2YpKHZhbHVlKSArICcsIHZhbHVlOiAnICsgSlNPTi5zdHJpbmdpZnkodmFsdWUpICsgJyknIDogJyAodHlwZTogJyArIGVyci5kYXRhLmFjdHVhbCArICcpJztcbiAgICByZXR1cm4gbmV3IFR5cGVFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSAnICsgZm5OYW1lICsgJywgdW5leHBlY3RlZCB0eXBlIG9mIGFyZ3VtZW50JyArIGRldGFpbHMpO1xuICB9XG5cbiAgaWYgKFN0cmluZyhlcnIpLmluZGV4T2YoJ2NvbXBsZXggbnVtYmVycycpICE9PSAtMSkge1xuICAgIGRldGFpbHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/ICcgKHR5cGU6ICcgKyAoMCwgX2lzLnR5cGVPZikodmFsdWUpICsgJywgdmFsdWU6ICcgKyBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgKyAnKScgOiAnJztcbiAgICByZXR1cm4gbmV3IFR5cGVFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSAnICsgZm5OYW1lICsgJywgbm8gb3JkZXJpbmcgcmVsYXRpb24gaXMgZGVmaW5lZCBmb3IgY29tcGxleCBudW1iZXJzJyArIGRldGFpbHMpO1xuICB9XG5cbiAgcmV0dXJuIGVycjtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRGVwcmVjYXRlZFZhciA9IGV4cG9ydHMuY3JlYXRlVmFyaWFuY2UgPSB2b2lkIDA7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9pbXByb3ZlRXJyb3JNZXNzYWdlID0gcmVxdWlyZShcIi4vdXRpbHMvaW1wcm92ZUVycm9yTWVzc2FnZVwiKTtcblxudmFyIF9sb2cgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbG9nXCIpO1xuXG52YXIgREVGQVVMVF9OT1JNQUxJWkFUSU9OID0gJ3VuYmlhc2VkJztcbnZhciBuYW1lID0gJ3ZhcmlhbmNlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FkZCcsICdzdWJ0cmFjdCcsICdtdWx0aXBseScsICdkaXZpZGUnLCAnYXBwbHknLCAnaXNOYU4nXTtcbnZhciBjcmVhdGVWYXJpYW5jZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBhZGQgPSBfcmVmLmFkZCxcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCxcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSxcbiAgICAgIGRpdmlkZSA9IF9yZWYuZGl2aWRlLFxuICAgICAgYXBwbHkgPSBfcmVmLmFwcGx5LFxuICAgICAgaXNOYU4gPSBfcmVmLmlzTmFOO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSB2YXJpYW5jZSBvZiBhIG1hdHJpeCBvciBhICBsaXN0IHdpdGggdmFsdWVzLlxuICAgKiBJbiBjYXNlIG9mIGEgKG11bHRpIGRpbWVuc2lvbmFsKSBhcnJheSBvciBtYXRyaXgsIHRoZSB2YXJpYW5jZSBvdmVyIGFsbFxuICAgKiBlbGVtZW50cyB3aWxsIGJlIGNhbGN1bGF0ZWQuXG4gICAqXG4gICAqIEFkZGl0aW9uYWxseSwgaXQgaXMgcG9zc2libGUgdG8gY29tcHV0ZSB0aGUgdmFyaWFuY2UgYWxvbmcgdGhlIHJvd3NcbiAgICogb3IgY29sdW1ucyBvZiBhIG1hdHJpeCBieSBzcGVjaWZ5aW5nIHRoZSBkaW1lbnNpb24gYXMgdGhlIHNlY29uZCBhcmd1bWVudC5cbiAgICpcbiAgICogT3B0aW9uYWxseSwgdGhlIHR5cGUgb2Ygbm9ybWFsaXphdGlvbiBjYW4gYmUgc3BlY2lmaWVkIGFzIHRoZSBmaW5hbFxuICAgKiBwYXJhbWV0ZXIuIFRoZSBwYXJhbWV0ZXIgYG5vcm1hbGl6YXRpb25gIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6XG4gICAqXG4gICAqIC0gJ3VuYmlhc2VkJyAoZGVmYXVsdCkgVGhlIHN1bSBvZiBzcXVhcmVkIGVycm9ycyBpcyBkaXZpZGVkIGJ5IChuIC0gMSlcbiAgICogLSAndW5jb3JyZWN0ZWQnICAgICAgICBUaGUgc3VtIG9mIHNxdWFyZWQgZXJyb3JzIGlzIGRpdmlkZWQgYnkgblxuICAgKiAtICdiaWFzZWQnICAgICAgICAgICAgIFRoZSBzdW0gb2Ygc3F1YXJlZCBlcnJvcnMgaXMgZGl2aWRlZCBieSAobiArIDEpXG4gICAqXG4gICAqXG4gICAqIE5vdGUgdGhhdCBvbGRlciBicm93c2VyIG1heSBub3QgbGlrZSB0aGUgdmFyaWFibGUgbmFtZSBgdmFyYC4gSW4gdGhhdFxuICAgKiBjYXNlLCB0aGUgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBhcyBgbWF0aFsndmFyJ10oLi4uKWAgaW5zdGVhZCBvZlxuICAgKiBgbWF0aC52YXIoLi4uKWAuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGgudmFyaWFuY2UoYSwgYiwgYywgLi4uKVxuICAgKiAgICAgbWF0aC52YXJpYW5jZShBKVxuICAgKiAgICAgbWF0aC52YXJpYW5jZShBLCBub3JtYWxpemF0aW9uKVxuICAgKiAgICAgbWF0aC52YXJpYW5jZShBLCBkaW1lbnNpb24pXG4gICAqICAgICBtYXRoLnZhcmlhbmNlKEEsIGRpbWVuc2lvbiwgbm9ybWFsaXphdGlvbilcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLnZhcmlhbmNlKDIsIDQsIDYpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyA0XG4gICAqICAgICBtYXRoLnZhcmlhbmNlKFsyLCA0LCA2LCA4XSkgICAgICAgICAgICAgICAgLy8gcmV0dXJucyA2LjY2NjY2NjY2NjY2NjY2N1xuICAgKiAgICAgbWF0aC52YXJpYW5jZShbMiwgNCwgNiwgOF0sICd1bmNvcnJlY3RlZCcpIC8vIHJldHVybnMgNVxuICAgKiAgICAgbWF0aC52YXJpYW5jZShbMiwgNCwgNiwgOF0sICdiaWFzZWQnKSAgICAgIC8vIHJldHVybnMgNFxuICAgKlxuICAgKiAgICAgbWF0aC52YXJpYW5jZShbWzEsIDIsIDNdLCBbNCwgNSwgNl1dKSAgICAgIC8vIHJldHVybnMgMy41XG4gICAqICAgICBtYXRoLnZhcmlhbmNlKFtbMSwgMiwgM10sIFs0LCA2LCA4XV0sIDApICAgLy8gcmV0dXJucyBbNC41LCA4LCAxMi41XVxuICAgKiAgICAgbWF0aC52YXJpYW5jZShbWzEsIDIsIDNdLCBbNCwgNiwgOF1dLCAxKSAgIC8vIHJldHVybnMgWzEsIDRdXG4gICAqICAgICBtYXRoLnZhcmlhbmNlKFtbMSwgMiwgM10sIFs0LCA2LCA4XV0sIDEsICdiaWFzZWQnKSAvLyByZXR1cm5zIFswLjUsIDJdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBtZWFuLCBtZWRpYW4sIG1heCwgbWluLCBwcm9kLCBzdGQsIHN1bVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSBhcnJheVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIEEgc2luZ2xlIG1hdHJpeCBvciBvciBtdWx0aXBsZSBzY2FsYXIgdmFsdWVzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbm9ybWFsaXphdGlvbj0ndW5iaWFzZWQnXVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIERldGVybWluZXMgaG93IHRvIG5vcm1hbGl6ZSB0aGUgdmFyaWFuY2UuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgQ2hvb3NlICd1bmJpYXNlZCcgKGRlZmF1bHQpLCAndW5jb3JyZWN0ZWQnLCBvciAnYmlhc2VkJy5cbiAgICogQHBhcmFtIGRpbWVuc2lvbiB7bnVtYmVyIHwgQmlnTnVtYmVyfVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIERldGVybWluZXMgdGhlIGF4aXMgdG8gY29tcHV0ZSB0aGUgdmFyaWFuY2UgZm9yIGEgbWF0cml4XG4gICAqIEByZXR1cm4geyp9IFRoZSB2YXJpYW5jZVxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAvLyB2YXJpYW5jZShbYSwgYiwgYywgZCwgLi4uXSlcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeChhcnJheSkge1xuICAgICAgcmV0dXJuIF92YXIoYXJyYXksIERFRkFVTFRfTk9STUFMSVpBVElPTik7XG4gICAgfSxcbiAgICAvLyB2YXJpYW5jZShbYSwgYiwgYywgZCwgLi4uXSwgbm9ybWFsaXphdGlvbilcbiAgICAnQXJyYXkgfCBNYXRyaXgsIHN0cmluZyc6IF92YXIsXG4gICAgLy8gdmFyaWFuY2UoW2EsIGIsIGMsIGMsIC4uLl0sIGRpbSlcbiAgICAnQXJyYXkgfCBNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIEFycmF5TWF0cml4TnVtYmVyQmlnTnVtYmVyKGFycmF5LCBkaW0pIHtcbiAgICAgIHJldHVybiBfdmFyRGltKGFycmF5LCBkaW0sIERFRkFVTFRfTk9STUFMSVpBVElPTik7XG4gICAgfSxcbiAgICAvLyB2YXJpYW5jZShbYSwgYiwgYywgYywgLi4uXSwgZGltLCBub3JtYWxpemF0aW9uKVxuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyLCBzdHJpbmcnOiBfdmFyRGltLFxuICAgIC8vIHZhcmlhbmNlKGEsIGIsIGMsIGQsIC4uLilcbiAgICAnLi4uJzogZnVuY3Rpb24gXyhhcmdzKSB7XG4gICAgICByZXR1cm4gX3ZhcihhcmdzLCBERUZBVUxUX05PUk1BTElaQVRJT04pO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBSZWN1cnNpdmVseSBjYWxjdWxhdGUgdGhlIHZhcmlhbmNlIG9mIGFuIG4tZGltZW5zaW9uYWwgYXJyYXlcbiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXlcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5vcm1hbGl6YXRpb25cbiAgICogICAgICAgICAgICAgICAgICAgICAgICBEZXRlcm1pbmVzIGhvdyB0byBub3JtYWxpemUgdGhlIHZhcmlhbmNlOlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIC0gJ3VuYmlhc2VkJyAgICBUaGUgc3VtIG9mIHNxdWFyZWQgZXJyb3JzIGlzIGRpdmlkZWQgYnkgKG4gLSAxKVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIC0gJ3VuY29ycmVjdGVkJyBUaGUgc3VtIG9mIHNxdWFyZWQgZXJyb3JzIGlzIGRpdmlkZWQgYnkgblxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIC0gJ2JpYXNlZCcgICAgICBUaGUgc3VtIG9mIHNxdWFyZWQgZXJyb3JzIGlzIGRpdmlkZWQgYnkgKG4gKyAxKVxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXJ9IHZhcmlhbmNlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF92YXIoYXJyYXksIG5vcm1hbGl6YXRpb24pIHtcbiAgICB2YXIgc3VtID0gMDtcbiAgICB2YXIgbnVtID0gMDtcblxuICAgIGlmIChhcnJheS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignRnVuY3Rpb24gdmFyaWFuY2UgcmVxdWlyZXMgb25lIG9yIG1vcmUgcGFyYW1ldGVycyAoMCBwcm92aWRlZCknKTtcbiAgICB9IC8vIGNhbGN1bGF0ZSB0aGUgbWVhbiBhbmQgbnVtYmVyIG9mIGVsZW1lbnRzXG5cblxuICAgICgwLCBfY29sbGVjdGlvbi5kZWVwRm9yRWFjaCkoYXJyYXksIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc3VtID0gYWRkKHN1bSwgdmFsdWUpO1xuICAgICAgICBudW0rKztcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyAoMCwgX2ltcHJvdmVFcnJvck1lc3NhZ2UuaW1wcm92ZUVycm9yTWVzc2FnZSkoZXJyLCAndmFyaWFuY2UnLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKG51bSA9PT0gMCkgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY2FsY3VsYXRlIHZhcmlhbmNlIG9mIGFuIGVtcHR5IGFycmF5Jyk7XG4gICAgdmFyIG1lYW4gPSBkaXZpZGUoc3VtLCBudW0pOyAvLyBjYWxjdWxhdGUgdGhlIHZhcmlhbmNlXG5cbiAgICBzdW0gPSAwO1xuICAgICgwLCBfY29sbGVjdGlvbi5kZWVwRm9yRWFjaCkoYXJyYXksIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgdmFyIGRpZmYgPSBzdWJ0cmFjdCh2YWx1ZSwgbWVhbik7XG4gICAgICBzdW0gPSBhZGQoc3VtLCBtdWx0aXBseShkaWZmLCBkaWZmKSk7XG4gICAgfSk7XG5cbiAgICBpZiAoaXNOYU4oc3VtKSkge1xuICAgICAgcmV0dXJuIHN1bTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKG5vcm1hbGl6YXRpb24pIHtcbiAgICAgIGNhc2UgJ3VuY29ycmVjdGVkJzpcbiAgICAgICAgcmV0dXJuIGRpdmlkZShzdW0sIG51bSk7XG5cbiAgICAgIGNhc2UgJ2JpYXNlZCc6XG4gICAgICAgIHJldHVybiBkaXZpZGUoc3VtLCBudW0gKyAxKTtcblxuICAgICAgY2FzZSAndW5iaWFzZWQnOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIHplcm8gPSAoMCwgX2lzLmlzQmlnTnVtYmVyKShzdW0pID8gc3VtLm11bCgwKSA6IDA7XG4gICAgICAgICAgcmV0dXJuIG51bSA9PT0gMSA/IHplcm8gOiBkaXZpZGUoc3VtLCBudW0gLSAxKTtcbiAgICAgICAgfVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gbm9ybWFsaXphdGlvbiBcIicgKyBub3JtYWxpemF0aW9uICsgJ1wiLiAnICsgJ0Nob29zZSBcInVuYmlhc2VkXCIgKGRlZmF1bHQpLCBcInVuY29ycmVjdGVkXCIsIG9yIFwiYmlhc2VkXCIuJyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gX3ZhckRpbShhcnJheSwgZGltLCBub3JtYWxpemF0aW9uKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChhcnJheS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdGdW5jdGlvbiB2YXJpYW5jZSByZXF1aXJlcyBvbmUgb3IgbW9yZSBwYXJhbWV0ZXJzICgwIHByb3ZpZGVkKScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXBwbHkoYXJyYXksIGRpbSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIF92YXIoeCwgbm9ybWFsaXphdGlvbik7XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRocm93ICgwLCBfaW1wcm92ZUVycm9yTWVzc2FnZS5pbXByb3ZlRXJyb3JNZXNzYWdlKShlcnIsICd2YXJpYW5jZScpO1xuICAgIH1cbiAgfVxufSk7IC8vIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNi4wLjAuIERhdGU6IDIwMTgtMTEtMDlcblxuZXhwb3J0cy5jcmVhdGVWYXJpYW5jZSA9IGNyZWF0ZVZhcmlhbmNlO1xudmFyIGNyZWF0ZURlcHJlY2F0ZWRWYXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkoJ3ZhcicsIFsndmFyaWFuY2UnXSwgZnVuY3Rpb24gKF9yZWYyKSB7XG4gIHZhciB2YXJpYW5jZSA9IF9yZWYyLnZhcmlhbmNlO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICgwLCBfbG9nLndhcm5PbmNlKSgnRnVuY3Rpb24gXCJ2YXJcIiBoYXMgYmVlbiByZW5hbWVkIHRvIFwidmFyaWFuY2VcIiBpbiB2Ni4wLjAsIHBsZWFzZSB1c2UgdGhlIG5ldyBmdW5jdGlvbiBpbnN0ZWFkLicpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiB2YXJpYW5jZS5hcHBseSh2YXJpYW5jZSwgYXJncyk7XG4gIH07XG59KTtcbmV4cG9ydHMuY3JlYXRlRGVwcmVjYXRlZFZhciA9IGNyZWF0ZURlcHJlY2F0ZWRWYXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUZvcm1hdCA9IHZvaWQgMDtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvc3RyaW5nXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnZm9ybWF0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlRm9ybWF0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogRm9ybWF0IGEgdmFsdWUgb2YgYW55IHR5cGUgaW50byBhIHN0cmluZy5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmZvcm1hdCh2YWx1ZSlcbiAgICogICAgbWF0aC5mb3JtYXQodmFsdWUsIG9wdGlvbnMpXG4gICAqICAgIG1hdGguZm9ybWF0KHZhbHVlLCBwcmVjaXNpb24pXG4gICAqICAgIG1hdGguZm9ybWF0KHZhbHVlLCBjYWxsYmFjaylcbiAgICpcbiAgICogV2hlcmU6XG4gICAqXG4gICAqICAtIGB2YWx1ZTogKmBcbiAgICogICAgVGhlIHZhbHVlIHRvIGJlIGZvcm1hdHRlZFxuICAgKiAgLSBgb3B0aW9uczogT2JqZWN0YFxuICAgKiAgICBBbiBvYmplY3Qgd2l0aCBmb3JtYXR0aW5nIG9wdGlvbnMuIEF2YWlsYWJsZSBvcHRpb25zOlxuICAgKiAgICAtIGBub3RhdGlvbjogc3RyaW5nYFxuICAgKiAgICAgIE51bWJlciBub3RhdGlvbi4gQ2hvb3NlIGZyb206XG4gICAqICAgICAgLSAnZml4ZWQnXG4gICAqICAgICAgICBBbHdheXMgdXNlIHJlZ3VsYXIgbnVtYmVyIG5vdGF0aW9uLlxuICAgKiAgICAgICAgRm9yIGV4YW1wbGUgJzEyMy40MCcgYW5kICcxNDAwMDAwMCdcbiAgICogICAgICAtICdleHBvbmVudGlhbCdcbiAgICogICAgICAgIEFsd2F5cyB1c2UgZXhwb25lbnRpYWwgbm90YXRpb24uXG4gICAqICAgICAgICBGb3IgZXhhbXBsZSAnMS4yMzRlKzInIGFuZCAnMS40ZSs3J1xuICAgKiAgICAgIC0gJ2VuZ2luZWVyaW5nJ1xuICAgKiAgICAgICAgQWx3YXlzIHVzZSBlbmdpbmVlcmluZyBub3RhdGlvbjogYWx3YXlzIGhhdmUgZXhwb25lbnRpYWwgbm90YXRpb24sXG4gICAqICAgICAgICBhbmQgc2VsZWN0IHRoZSBleHBvbmVudCB0byBiZSBhIG11bHRpcGxlIG9mIDMuXG4gICAqICAgICAgICBGb3IgZXhhbXBsZSAnMTIzLjRlKzAnIGFuZCAnMTQuMGUrNidcbiAgICogICAgICAtICdhdXRvJyAoZGVmYXVsdClcbiAgICogICAgICAgIFJlZ3VsYXIgbnVtYmVyIG5vdGF0aW9uIGZvciBudW1iZXJzIGhhdmluZyBhbiBhYnNvbHV0ZSB2YWx1ZSBiZXR3ZWVuXG4gICAqICAgICAgICBgbG93ZXJgIGFuZCBgdXBwZXJgIGJvdW5kcywgYW5kIHVzZXMgZXhwb25lbnRpYWwgbm90YXRpb24gZWxzZXdoZXJlLlxuICAgKiAgICAgICAgTG93ZXIgYm91bmQgaXMgaW5jbHVkZWQsIHVwcGVyIGJvdW5kIGlzIGV4Y2x1ZGVkLlxuICAgKiAgICAgICAgRm9yIGV4YW1wbGUgJzEyMy40JyBhbmQgJzEuNGU3Jy5cbiAgICogICAgLSBgcHJlY2lzaW9uOiBudW1iZXJgXG4gICAqICAgICAgQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxNiB0byByb3VuZCB0aGUgZGlnaXRzIG9mIHRoZSBudW1iZXIuIEluIGNhc2VcbiAgICogICAgICBvZiBub3RhdGlvbnMgJ2V4cG9uZW50aWFsJywgJ2VuZ2luZWVyaW5nJywgYW5kICdhdXRvJywgYHByZWNpc2lvbmBcbiAgICogICAgICBkZWZpbmVzIHRoZSB0b3RhbCBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIHJldHVybmVkLlxuICAgKiAgICAgIEluIGNhc2Ugb2Ygbm90YXRpb24gJ2ZpeGVkJywgYHByZWNpc2lvbmAgZGVmaW5lcyB0aGUgbnVtYmVyIG9mXG4gICAqICAgICAgc2lnbmlmaWNhbnQgZGlnaXRzIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50LlxuICAgKiAgICAgIGBwcmVjaXNpb25gIGlzIHVuZGVmaW5lZCBieSBkZWZhdWx0LlxuICAgKiAgICAtIGBsb3dlckV4cDogbnVtYmVyYFxuICAgKiAgICAgIEV4cG9uZW50IGRldGVybWluaW5nIHRoZSBsb3dlciBib3VuZGFyeSBmb3IgZm9ybWF0dGluZyBhIHZhbHVlIHdpdGhcbiAgICogICAgICBhbiBleHBvbmVudCB3aGVuIGBub3RhdGlvbj0nYXV0b2AuIERlZmF1bHQgdmFsdWUgaXMgYC0zYC5cbiAgICogICAgLSBgdXBwZXJFeHA6IG51bWJlcmBcbiAgICogICAgICBFeHBvbmVudCBkZXRlcm1pbmluZyB0aGUgdXBwZXIgYm91bmRhcnkgZm9yIGZvcm1hdHRpbmcgYSB2YWx1ZSB3aXRoXG4gICAqICAgICAgYW4gZXhwb25lbnQgd2hlbiBgbm90YXRpb249J2F1dG9gLiBEZWZhdWx0IHZhbHVlIGlzIGA1YC5cbiAgICogICAgLSBgZnJhY3Rpb246IHN0cmluZ2AuIEF2YWlsYWJsZSB2YWx1ZXM6ICdyYXRpbycgKGRlZmF1bHQpIG9yICdkZWNpbWFsJy5cbiAgICogICAgICBGb3IgZXhhbXBsZSBgZm9ybWF0KGZyYWN0aW9uKDEsIDMpKWAgd2lsbCBvdXRwdXQgJzEvMycgd2hlbiAncmF0aW8nIGlzXG4gICAqICAgICAgY29uZmlndXJlZCwgYW5kIHdpbGwgb3V0cHV0IGAwLigzKWAgd2hlbiAnZGVjaW1hbCcgaXMgY29uZmlndXJlZC5cbiAgICogLSBgY2FsbGJhY2s6IGZ1bmN0aW9uYFxuICAgKiAgIEEgY3VzdG9tIGZvcm1hdHRpbmcgZnVuY3Rpb24sIGludm9rZWQgZm9yIGFsbCBudW1lcmljIGVsZW1lbnRzIGluIGB2YWx1ZWAsXG4gICAqICAgZm9yIGV4YW1wbGUgYWxsIGVsZW1lbnRzIG9mIGEgbWF0cml4LCBvciB0aGUgcmVhbCBhbmQgaW1hZ2luYXJ5XG4gICAqICAgcGFydHMgb2YgYSBjb21wbGV4IG51bWJlci4gVGhpcyBjYWxsYmFjayBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSB0aGVcbiAgICogICBidWlsdC1pbiBudW1lcmljIG5vdGF0aW9uIHdpdGggYW55IHR5cGUgb2YgZm9ybWF0dGluZy4gRnVuY3Rpb24gYGNhbGxiYWNrYFxuICAgKiAgIGlzIGNhbGxlZCB3aXRoIGB2YWx1ZWAgYXMgcGFyYW1ldGVyIGFuZCBtdXN0IHJldHVybiBhIHN0cmluZy5cbiAgICpcbiAgICogV2hlbiBgdmFsdWVgIGlzIGFuIE9iamVjdDpcbiAgICpcbiAgICogLSBXaGVuIHRoZSBvYmplY3QgY29udGFpbnMgYSBwcm9wZXJ0eSBgZm9ybWF0YCBiZWluZyBhIGZ1bmN0aW9uLCB0aGlzIGZ1bmN0aW9uXG4gICAqICAgaXMgaW52b2tlZCBhcyBgdmFsdWUuZm9ybWF0KG9wdGlvbnMpYCBhbmQgdGhlIHJlc3VsdCBpcyByZXR1cm5lZC5cbiAgICogLSBXaGVuIHRoZSBvYmplY3QgaGFzIGl0cyBvd24gYHRvU3RyaW5nYCBtZXRob2QsIHRoaXMgbWV0aG9kIGlzIGludm9rZWRcbiAgICogICBhbmQgdGhlIHJlc3VsdCBpcyByZXR1cm5lZC5cbiAgICogLSBJbiBvdGhlciBjYXNlcyB0aGUgZnVuY3Rpb24gd2lsbCBsb29wIG92ZXIgYWxsIG9iamVjdCBwcm9wZXJ0aWVzIGFuZFxuICAgKiAgIHJldHVybiBKU09OIG9iamVjdCBub3RhdGlvbiBsaWtlICd7XCJhXCI6IDIsIFwiYlwiOiAzfScuXG4gICAqXG4gICAqIFdoZW4gdmFsdWUgaXMgYSBmdW5jdGlvbjpcbiAgICpcbiAgICogLSBXaGVuIHRoZSBmdW5jdGlvbiBoYXMgYSBwcm9wZXJ0eSBgc3ludGF4YCwgaXQgcmV0dXJucyB0aGlzXG4gICAqICAgc3ludGF4IGRlc2NyaXB0aW9uLlxuICAgKiAtIEluIG90aGVyIGNhc2VzLCBhIHN0cmluZyBgJ2Z1bmN0aW9uJ2AgaXMgcmV0dXJuZWQuXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmZvcm1hdCg2LjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgJzYuNCdcbiAgICogICAgbWF0aC5mb3JtYXQoMTI0MDAwMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zICcxLjI0ZTYnXG4gICAqICAgIG1hdGguZm9ybWF0KDEvMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAnMC4zMzMzMzMzMzMzMzMzMzMzJ1xuICAgKiAgICBtYXRoLmZvcm1hdCgxLzMsIDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgJzAuMzMzJ1xuICAgKiAgICBtYXRoLmZvcm1hdCgyMTM4NSwgMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgJzIxMDAwJ1xuICAgKiAgICBtYXRoLmZvcm1hdCgxMmU4LCB7bm90YXRpb246ICdmaXhlZCd9KSAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgJzEyMDAwMDAwMDAnXG4gICAqICAgIG1hdGguZm9ybWF0KDIuMywgIHtub3RhdGlvbjogJ2ZpeGVkJywgcHJlY2lzaW9uOiA0fSkgICAgLy8gcmV0dXJucyAnMi4zMDAwJ1xuICAgKiAgICBtYXRoLmZvcm1hdCg1Mi44LCB7bm90YXRpb246ICdleHBvbmVudGlhbCd9KSAgICAgICAgICAgIC8vIHJldHVybnMgJzUuMjhlKzEnXG4gICAqICAgIG1hdGguZm9ybWF0KDEyNDAwLHtub3RhdGlvbjogJ2VuZ2luZWVyaW5nJ30pICAgICAgICAgICAgLy8gcmV0dXJucyAnMTIuNDAwZSszJ1xuICAgKiAgICBtYXRoLmZvcm1hdCgyMDAwLCB7bG93ZXJFeHA6IC0yLCB1cHBlckV4cDogMn0pICAgICAgICAgIC8vIHJldHVybnMgJzJlKzMnXG4gICAqXG4gICAqICAgIGZ1bmN0aW9uIGZvcm1hdEN1cnJlbmN5KHZhbHVlKSB7XG4gICAqICAgICAgLy8gcmV0dXJuIGN1cnJlbmN5IG5vdGF0aW9uIHdpdGggdHdvIGRpZ2l0czpcbiAgICogICAgICByZXR1cm4gJyQnICsgdmFsdWUudG9GaXhlZCgyKVxuICAgKlxuICAgKiAgICAgIC8vIHlvdSBjb3VsZCBhbHNvIHVzZSBtYXRoLmZvcm1hdCBpbnNpZGUgdGhlIGNhbGxiYWNrOlxuICAgKiAgICAgIC8vIHJldHVybiAnJCcgKyBtYXRoLmZvcm1hdCh2YWx1ZSwge25vdGF0aW9uOiAnZml4ZWQnLCBwcmVjaXNpb246IDJ9KVxuICAgKiAgICB9XG4gICAqICAgIG1hdGguZm9ybWF0KFsyLjEsIDMsIDAuMDE2XSwgZm9ybWF0Q3VycmVuY3l9ICAgICAgICAgICAgLy8gcmV0dXJucyAnWyQyLjEwLCAkMy4wMCwgJDAuMDJdJ1xuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgcHJpbnRcbiAgICpcbiAgICogQHBhcmFtIHsqfSB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSB0byBiZSBzdHJpbmdpZmllZFxuICAgKiBAcGFyYW0ge09iamVjdCB8IEZ1bmN0aW9uIHwgbnVtYmVyfSBbb3B0aW9uc10gIEZvcm1hdHRpbmcgb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgdmFsdWVcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgYW55OiBfc3RyaW5nLmZvcm1hdCxcbiAgICAnYW55LCBPYmplY3QgfCBmdW5jdGlvbiB8IG51bWJlcic6IF9zdHJpbmcuZm9ybWF0XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZUZvcm1hdCA9IGNyZWF0ZUZvcm1hdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUHJpbnQgPSB2b2lkIDA7XG5cbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3N0cmluZ1wiKTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3ByaW50JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlUHJpbnQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBJbnRlcnBvbGF0ZSB2YWx1ZXMgaW50byBhIHN0cmluZyB0ZW1wbGF0ZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5wcmludCh0ZW1wbGF0ZSwgdmFsdWVzKVxuICAgKiAgICAgbWF0aC5wcmludCh0ZW1wbGF0ZSwgdmFsdWVzLCBwcmVjaXNpb24pXG4gICAqICAgICBtYXRoLnByaW50KHRlbXBsYXRlLCB2YWx1ZXMsIG9wdGlvbnMpXG4gICAqXG4gICAqIEV4YW1wbGUgdXNhZ2U6XG4gICAqXG4gICAqICAgICAvLyB0aGUgZm9sbG93aW5nIG91dHB1dHM6ICdMdWN5IGlzIDUgeWVhcnMgb2xkJ1xuICAgKiAgICAgbWF0aC5wcmludCgnTHVjeSBpcyAkYWdlIHllYXJzIG9sZCcsIHthZ2U6IDV9KVxuICAgKlxuICAgKiAgICAgLy8gdGhlIGZvbGxvd2luZyBvdXRwdXRzOiAnVGhlIHZhbHVlIG9mIHBpIGlzIDMuMTQxNTkyNjU0J1xuICAgKiAgICAgbWF0aC5wcmludCgnVGhlIHZhbHVlIG9mIHBpIGlzICRwaScsIHtwaTogbWF0aC5waX0sIDEwKVxuICAgKlxuICAgKiAgICAgLy8gdGhlIGZvbGxvd2luZyBvdXRwdXRzOiAnaGVsbG8gTWFyeSEgVGhlIGRhdGUgaXMgMjAxMy0wMy0yMydcbiAgICogICAgIG1hdGgucHJpbnQoJ0hlbGxvICR1c2VyLm5hbWUhIFRoZSBkYXRlIGlzICRkYXRlJywge1xuICAgKiAgICAgICB1c2VyOiB7XG4gICAqICAgICAgICAgbmFtZTogJ01hcnknLFxuICAgKiAgICAgICB9LFxuICAgKiAgICAgICBkYXRlOiBuZXcgRGF0ZSgyMDEzLCAyLCAyMykudG9JU09TdHJpbmcoKS5zdWJzdHJpbmcoMCwgMTApXG4gICAqICAgICB9KVxuICAgKlxuICAgKiAgICAgLy8gdGhlIGZvbGxvd2luZyBvdXRwdXRzOiAnTXkgZmF2b3JpdGUgZnJ1aXRzIGFyZSBhcHBsZXMgYW5kIGJhbmFuYXMgISdcbiAgICogICAgIG1hdGgucHJpbnQoJ015IGZhdm9yaXRlIGZydWl0cyBhcmUgJDAgYW5kICQxICEnLCBbXG4gICAqICAgICAgICdhcHBsZXMnLFxuICAgKiAgICAgICAnYmFuYW5hcydcbiAgICogICAgIF0pXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgZm9ybWF0XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZW1wbGF0ZSAgICAgICAgICAgQSBzdHJpbmcgY29udGFpbmluZyB2YXJpYWJsZSBwbGFjZWhvbGRlcnMuXG4gICAqIEBwYXJhbSB7T2JqZWN0IHwgQXJyYXkgfCBNYXRyaXh9ICAgdmFsdWVzIEFuIG9iamVjdCBvciBhcnJheSBjb250YWluaW5nIHZhcmlhYmxlc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIHdpbGwgYmUgZmlsbGVkIGluIGluIHRoZSB0ZW1wbGF0ZS5cbiAgICogQHBhcmFtIHtudW1iZXIgfCBPYmplY3R9IFtvcHRpb25zXSBGb3JtYXR0aW5nIG9wdGlvbnMsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgdGhlIG51bWJlciBvZiBkaWdpdHMgdG8gZm9ybWF0IG51bWJlcnMuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIGZ1bmN0aW9uIG1hdGguZm9ybWF0IGZvciBhIGRlc2NyaXB0aW9uXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgYWxsIG9wdGlvbnMuXG4gICAqIEByZXR1cm4ge3N0cmluZ30gSW50ZXJwb2xhdGVkIHN0cmluZ1xuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAvLyBub3RlOiBNYXRyaXggd2lsbCBiZSBjb252ZXJ0ZWQgYXV0b21hdGljYWxseSB0byBhbiBBcnJheVxuICAgICdzdHJpbmcsIE9iamVjdCB8IEFycmF5JzogX3ByaW50LFxuICAgICdzdHJpbmcsIE9iamVjdCB8IEFycmF5LCBudW1iZXIgfCBPYmplY3QnOiBfcHJpbnRcbiAgfSk7XG59KTtcbi8qKlxuICogSW50ZXJwb2xhdGUgdmFsdWVzIGludG8gYSBzdHJpbmcgdGVtcGxhdGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gdGVtcGxhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZXNcbiAqIEBwYXJhbSB7bnVtYmVyIHwgT2JqZWN0fSBbb3B0aW9uc11cbiAqIEByZXR1cm5zIHtzdHJpbmd9IEludGVycG9sYXRlZCBzdHJpbmdcbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0cy5jcmVhdGVQcmludCA9IGNyZWF0ZVByaW50O1xuXG5mdW5jdGlvbiBfcHJpbnQodGVtcGxhdGUsIHZhbHVlcywgb3B0aW9ucykge1xuICByZXR1cm4gdGVtcGxhdGUucmVwbGFjZSgvXFwkKFtcXHcuXSspL2csIGZ1bmN0aW9uIChvcmlnaW5hbCwga2V5KSB7XG4gICAgdmFyIGtleXMgPSBrZXkuc3BsaXQoJy4nKTtcbiAgICB2YXIgdmFsdWUgPSB2YWx1ZXNba2V5cy5zaGlmdCgpXTtcblxuICAgIHdoaWxlIChrZXlzLmxlbmd0aCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgayA9IGtleXMuc2hpZnQoKTtcbiAgICAgIHZhbHVlID0gayA/IHZhbHVlW2tdIDogdmFsdWUgKyAnLic7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICghKDAsIF9pcy5pc1N0cmluZykodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiAoMCwgX3N0cmluZy5mb3JtYXQpKHZhbHVlLCBvcHRpb25zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb3JpZ2luYWw7XG4gIH0pO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBY29zID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBuYW1lID0gJ2Fjb3MnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ0NvbXBsZXgnXTtcbnZhciBjcmVhdGVBY29zID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgQ29tcGxleCA9IF9yZWYuQ29tcGxleDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBpbnZlcnNlIGNvc2luZSBvZiBhIHZhbHVlLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguYWNvcyh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5hY29zKDAuNSkgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDEuMDQ3MTk3NTUxMTk2NTk3OVxuICAgKiAgICBtYXRoLmFjb3MobWF0aC5jb3MoMS41KSkgLy8gcmV0dXJucyBudW1iZXIgMS41XG4gICAqXG4gICAqICAgIG1hdGguYWNvcygyKSAgICAgICAgICAgICAvLyByZXR1cm5zIENvbXBsZXggMCArIDEuMzE2OTU3ODk2OTI0ODE2NiBpXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjb3MsIGF0YW4sIGFzaW5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHggIEZ1bmN0aW9uIGlucHV0XG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gVGhlIGFyYyBjb3NpbmUgb2YgeFxuICAgKi9cbiAgdmFyIGFjb3MgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkge1xuICAgICAgaWYgKHggPj0gLTEgJiYgeCA8PSAxIHx8IGNvbmZpZy5wcmVkaWN0YWJsZSkge1xuICAgICAgICByZXR1cm4gTWF0aC5hY29zKHgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgsIDApLmFjb3MoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHguYWNvcygpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHguYWNvcygpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBhY29zKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYWNvcztcbn0pO1xuZXhwb3J0cy5jcmVhdGVBY29zID0gY3JlYXRlQWNvczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQWNvc2ggPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdhY29zaCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnQ29tcGxleCddO1xudmFyIGNyZWF0ZUFjb3NoID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgQ29tcGxleCA9IF9yZWYuQ29tcGxleDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBoeXBlcmJvbGljIGFyY2NvcyBvZiBhIHZhbHVlLFxuICAgKiBkZWZpbmVkIGFzIGBhY29zaCh4KSA9IGxuKHNxcnQoeF4yIC0gMSkgKyB4KWAuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5hY29zaCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5hY29zaCgxLjUpICAgICAgIC8vIHJldHVybnMgMC45NjI0MjM2NTAxMTkyMDY5XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjb3NoLCBhc2luaCwgYXRhbmhcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4ICBGdW5jdGlvbiBpbnB1dFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IEh5cGVyYm9saWMgYXJjY29zaW5lIG9mIHhcbiAgICovXG4gIHZhciBhY29zaCA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICBpZiAoeCA+PSAxIHx8IGNvbmZpZy5wcmVkaWN0YWJsZSkge1xuICAgICAgICByZXR1cm4gKDAsIF9udW1iZXIuYWNvc2hOdW1iZXIpKHgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoeCA8PSAtMSkge1xuICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoTWF0aC5sb2coTWF0aC5zcXJ0KHggKiB4IC0gMSkgLSB4KSwgTWF0aC5QSSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleCh4LCAwKS5hY29zaCgpO1xuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5hY29zaCgpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHguYWNvc2goKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgYWNvc2gpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBhY29zaDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVBY29zaCA9IGNyZWF0ZUFjb3NoOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBY290ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnYWNvdCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdCaWdOdW1iZXInXTtcbnZhciBjcmVhdGVBY290ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIF9CaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcjtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBpbnZlcnNlIGNvdGFuZ2VudCBvZiBhIHZhbHVlLCBkZWZpbmVkIGFzIGBhY290KHgpID0gYXRhbigxL3gpYC5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmFjb3QoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguYWNvdCgwLjUpICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAwLjQ2MzY0NzYwOTAwMDgwNjFcbiAgICogICAgbWF0aC5hY290KG1hdGguY290KDEuNSkpIC8vIHJldHVybnMgbnVtYmVyIDEuNVxuICAgKlxuICAgKiAgICBtYXRoLmFjb3QoMikgICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDEuNTcwNzk2MzI2Nzk0ODk2NiAtMS4zMTY5NTc4OTY5MjQ4MTY2IGlcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGNvdCwgYXRhblxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geCAgIEZ1bmN0aW9uIGlucHV0XG4gICAqIEByZXR1cm4ge251bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gVGhlIGFyYyBjb3RhbmdlbnQgb2YgeFxuICAgKi9cbiAgdmFyIGFjb3QgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmFjb3ROdW1iZXIsXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5hY290KCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4gbmV3IF9CaWdOdW1iZXIoMSkuZGl2KHgpLmF0YW4oKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgYWNvdCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGFjb3Q7XG59KTtcbmV4cG9ydHMuY3JlYXRlQWNvdCA9IGNyZWF0ZUFjb3Q7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFjb3RoID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnYWNvdGgnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ0NvbXBsZXgnLCAnQmlnTnVtYmVyJ107XG52YXIgY3JlYXRlQWNvdGggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4LFxuICAgICAgX0JpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgYXJjY290YW5nZW50IG9mIGEgdmFsdWUsXG4gICAqIGRlZmluZWQgYXMgYGFjb3RoKHgpID0gYXRhbmgoMS94KSA9IChsbigoeCsxKS94KSArIGxuKHgvKHgtMSkpKSAvIDJgLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguYWNvdGgoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguYWNvdGgoMC41KSAgICAgICAvLyByZXR1cm5zIDAuODA0NzE4OTU2MjE3MDUwM1xuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYWNzY2gsIGFzZWNoXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4ICBGdW5jdGlvbiBpbnB1dFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IEh5cGVyYm9saWMgYXJjY290YW5nZW50IG9mIHhcbiAgICovXG4gIHZhciBhY290aCA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICBpZiAoeCA+PSAxIHx8IHggPD0gLTEgfHwgY29uZmlnLnByZWRpY3RhYmxlKSB7XG4gICAgICAgIHJldHVybiAoMCwgX251bWJlci5hY290aE51bWJlcikoeCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleCh4LCAwKS5hY290aCgpO1xuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5hY290aCgpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIG5ldyBfQmlnTnVtYmVyKDEpLmRpdih4KS5hdGFuaCgpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBhY290aCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGFjb3RoO1xufSk7XG5leHBvcnRzLmNyZWF0ZUFjb3RoID0gY3JlYXRlQWNvdGg7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFjc2MgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdhY3NjJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdDb21wbGV4JywgJ0JpZ051bWJlciddO1xudmFyIGNyZWF0ZUFjc2MgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4LFxuICAgICAgX0JpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGludmVyc2UgY29zZWNhbnQgb2YgYSB2YWx1ZSwgZGVmaW5lZCBhcyBgYWNzYyh4KSA9IGFzaW4oMS94KWAuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5hY3NjKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmFjc2MoMC41KSAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMC41MjM1OTg3NzU1OTgyOTg5XG4gICAqICAgIG1hdGguYWNzYyhtYXRoLmNzYygxLjUpKSAvLyByZXR1cm5zIG51bWJlciB+MS41XG4gICAqXG4gICAqICAgIG1hdGguYWNzYygyKSAgICAgICAgICAgICAvLyByZXR1cm5zIENvbXBsZXggMS41NzA3OTYzMjY3OTQ4OTY2IC0xLjMxNjk1Nzg5NjkyNDgxNjYgaVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgY3NjLCBhc2luLCBhc2VjXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4ICAgRnVuY3Rpb24gaW5wdXRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBUaGUgYXJjIGNvc2VjYW50IG9mIHhcbiAgICovXG4gIHZhciBhY3NjID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgICAgIGlmICh4IDw9IC0xIHx8IHggPj0gMSB8fCBjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfbnVtYmVyLmFjc2NOdW1iZXIpKHgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoeCwgMCkuYWNzYygpO1xuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5hY3NjKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4gbmV3IF9CaWdOdW1iZXIoMSkuZGl2KHgpLmFzaW4oKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgYWNzYyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGFjc2M7XG59KTtcbmV4cG9ydHMuY3JlYXRlQWNzYyA9IGNyZWF0ZUFjc2M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFjc2NoID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnYWNzY2gnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnQmlnTnVtYmVyJ107XG52YXIgY3JlYXRlQWNzY2ggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgX0JpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgYXJjY29zZWNhbnQgb2YgYSB2YWx1ZSxcbiAgICogZGVmaW5lZCBhcyBgYWNzY2goeCkgPSBhc2luaCgxL3gpID0gbG4oMS94ICsgc3FydCgxL3heMiArIDEpKWAuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5hY3NjaCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5hY3NjaCgwLjUpICAgICAgIC8vIHJldHVybnMgMS40NDM2MzU0NzUxNzg4MTAzXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBhc2VjaCwgYWNvdGhcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHggIEZ1bmN0aW9uIGlucHV0XG4gICAqIEByZXR1cm4ge251bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gSHlwZXJib2xpYyBhcmNjb3NlY2FudCBvZiB4XG4gICAqL1xuICB2YXIgYWNzY2ggPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmFjc2NoTnVtYmVyLFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHguYWNzY2goKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiBuZXcgX0JpZ051bWJlcigxKS5kaXYoeCkuYXNpbmgoKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgYWNzY2gpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBhY3NjaDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVBY3NjaCA9IGNyZWF0ZUFjc2NoOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBc2VjID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnYXNlYyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnQ29tcGxleCcsICdCaWdOdW1iZXInXTtcbnZhciBjcmVhdGVBc2VjID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgQ29tcGxleCA9IF9yZWYuQ29tcGxleCxcbiAgICAgIF9CaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcjtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBpbnZlcnNlIHNlY2FudCBvZiBhIHZhbHVlLiBEZWZpbmVkIGFzIGBhc2VjKHgpID0gYWNvcygxL3gpYC5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmFzZWMoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguYXNlYygwLjUpICAgICAgICAgICAvLyByZXR1cm5zIDEuMDQ3MTk3NTUxMTk2NTk3OVxuICAgKiAgICBtYXRoLmFzZWMobWF0aC5zZWMoMS41KSkgLy8gcmV0dXJucyAxLjVcbiAgICpcbiAgICogICAgbWF0aC5hc2VjKDIpICAgICAgICAgICAgIC8vIHJldHVybnMgMCArIDEuMzE2OTU3ODk2OTI0ODE2NiBpXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBhY29zLCBhY290LCBhY3NjXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4ICBGdW5jdGlvbiBpbnB1dFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IFRoZSBhcmMgc2VjYW50IG9mIHhcbiAgICovXG4gIHZhciBhc2VjID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgICAgIGlmICh4IDw9IC0xIHx8IHggPj0gMSB8fCBjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfbnVtYmVyLmFzZWNOdW1iZXIpKHgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoeCwgMCkuYXNlYygpO1xuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5hc2VjKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4gbmV3IF9CaWdOdW1iZXIoMSkuZGl2KHgpLmFjb3MoKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgYXNlYyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGFzZWM7XG59KTtcbmV4cG9ydHMuY3JlYXRlQXNlYyA9IGNyZWF0ZUFzZWM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFzZWNoID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnYXNlY2gnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ0NvbXBsZXgnLCAnQmlnTnVtYmVyJ107XG52YXIgY3JlYXRlQXNlY2ggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4LFxuICAgICAgX0JpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgYXJjc2VjYW50IG9mIGEgdmFsdWUsXG4gICAqIGRlZmluZWQgYXMgYGFzZWNoKHgpID0gYWNvc2goMS94KSA9IGxuKHNxcnQoMS94XjIgLSAxKSArIDEveClgLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguYXNlY2goeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguYXNlY2goMC41KSAgICAgICAvLyByZXR1cm5zIDEuMzE2OTU3ODk2OTI0ODE2NlxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYWNzY2gsIGFjb3RoXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4ICBGdW5jdGlvbiBpbnB1dFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IEh5cGVyYm9saWMgYXJjc2VjYW50IG9mIHhcbiAgICovXG4gIHZhciBhc2VjaCA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICBpZiAoeCA8PSAxICYmIHggPj0gLTEgfHwgY29uZmlnLnByZWRpY3RhYmxlKSB7XG4gICAgICAgIHZhciB4SW52ID0gMSAvIHg7XG5cbiAgICAgICAgaWYgKHhJbnYgPiAwIHx8IGNvbmZpZy5wcmVkaWN0YWJsZSkge1xuICAgICAgICAgIHJldHVybiAoMCwgX251bWJlci5hc2VjaE51bWJlcikoeCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmV0ID0gTWF0aC5zcXJ0KHhJbnYgKiB4SW52IC0gMSk7XG4gICAgICAgIHJldHVybiBuZXcgQ29tcGxleChNYXRoLmxvZyhyZXQgLSB4SW52KSwgTWF0aC5QSSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleCh4LCAwKS5hc2VjaCgpO1xuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5hc2VjaCgpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIG5ldyBfQmlnTnVtYmVyKDEpLmRpdih4KS5hY29zaCgpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBhc2VjaCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGFzZWNoO1xufSk7XG5leHBvcnRzLmNyZWF0ZUFzZWNoID0gY3JlYXRlQXNlY2g7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFzaW4gPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIG5hbWUgPSAnYXNpbic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnQ29tcGxleCddO1xudmFyIGNyZWF0ZUFzaW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGludmVyc2Ugc2luZSBvZiBhIHZhbHVlLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguYXNpbih4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5hc2luKDAuNSkgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDAuNTIzNTk4Nzc1NTk4Mjk4OVxuICAgKiAgICBtYXRoLmFzaW4obWF0aC5zaW4oMS41KSkgLy8gcmV0dXJucyBudW1iZXIgfjEuNVxuICAgKlxuICAgKiAgICBtYXRoLmFzaW4oMikgICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDEuNTcwNzk2MzI2Nzk0ODk2NiAtMS4zMTY5NTc4OTY5MjQ4MTY2IGlcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIHNpbiwgYXRhbiwgYWNvc1xuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geCAgIEZ1bmN0aW9uIGlucHV0XG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gVGhlIGFyYyBzaW5lIG9mIHhcbiAgICovXG4gIHZhciBhc2luID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgICAgIGlmICh4ID49IC0xICYmIHggPD0gMSB8fCBjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguYXNpbih4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29tcGxleCh4LCAwKS5hc2luKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmFzaW4oKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LmFzaW4oKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIC8vIGRlZXAgbWFwIGNvbGxlY3Rpb24sIHNraXAgemVyb3Mgc2luY2UgYXNpbigwKSA9IDBcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgYXNpbiwgdHJ1ZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGFzaW47XG59KTtcbmV4cG9ydHMuY3JlYXRlQXNpbiA9IGNyZWF0ZUFzaW47IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFzaW5oID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnYXNpbmgnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVBc2luaCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgaHlwZXJib2xpYyBhcmNzaW5lIG9mIGEgdmFsdWUsXG4gICAqIGRlZmluZWQgYXMgYGFzaW5oKHgpID0gbG4oeCArIHNxcnQoeF4yICsgMSkpYC5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmFzaW5oKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmFzaW5oKDAuNSkgICAgICAgLy8gcmV0dXJucyAwLjQ4MTIxMTgyNTA1OTYwMzQ3XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBhY29zaCwgYXRhbmhcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHggIEZ1bmN0aW9uIGlucHV0XG4gICAqIEByZXR1cm4ge251bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gSHlwZXJib2xpYyBhcmNzaW5lIG9mIHhcbiAgICovXG4gIHZhciBhc2luaCA9IHR5cGVkKCdhc2luaCcsIHtcbiAgICBudW1iZXI6IF9udW1iZXIuYXNpbmhOdW1iZXIsXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5hc2luaCgpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHguYXNpbmgoKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIC8vIGRlZXAgbWFwIGNvbGxlY3Rpb24sIHNraXAgemVyb3Mgc2luY2UgYXNpbmgoMCkgPSAwXG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGFzaW5oLCB0cnVlKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYXNpbmg7XG59KTtcbmV4cG9ydHMuY3JlYXRlQXNpbmggPSBjcmVhdGVBc2luaDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQXRhbiA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgbmFtZSA9ICdhdGFuJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlQXRhbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgaW52ZXJzZSB0YW5nZW50IG9mIGEgdmFsdWUuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5hdGFuKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmF0YW4oMC41KSAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMC40NjM2NDc2MDkwMDA4MDYxXG4gICAqICAgIG1hdGguYXRhbihtYXRoLnRhbigxLjUpKSAvLyByZXR1cm5zIG51bWJlciAxLjVcbiAgICpcbiAgICogICAgbWF0aC5hdGFuKDIpICAgICAgICAgICAgIC8vIHJldHVybnMgQ29tcGxleCAxLjU3MDc5NjMyNjc5NDg5NjYgLTEuMzE2OTU3ODk2OTI0ODE2NiBpXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICB0YW4sIGFzaW4sIGFjb3NcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHggICBGdW5jdGlvbiBpbnB1dFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IFRoZSBhcmMgdGFuZ2VudCBvZiB4XG4gICAqL1xuICB2YXIgYXRhbiA9IHR5cGVkKCdhdGFuJywge1xuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiBNYXRoLmF0YW4oeCk7XG4gICAgfSxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmF0YW4oKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LmF0YW4oKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIC8vIGRlZXAgbWFwIGNvbGxlY3Rpb24sIHNraXAgemVyb3Mgc2luY2UgYXRhbigwKSA9IDBcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgYXRhbiwgdHJ1ZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGF0YW47XG59KTtcbmV4cG9ydHMuY3JlYXRlQXRhbiA9IGNyZWF0ZUF0YW47IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUF0YW4yID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDJcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wM1wiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA5XCIpO1xuXG52YXIgX2FsZ29yaXRobTQgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTFcIik7XG5cbnZhciBfYWxnb3JpdGhtNSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMlwiKTtcblxudmFyIF9hbGdvcml0aG02ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgX2FsZ29yaXRobTcgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBuYW1lID0gJ2F0YW4yJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdlcXVhbFNjYWxhcicsICdCaWdOdW1iZXInLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVBdGFuMiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIEJpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMDIgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wMyA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0wMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTA5ID0gKDAsIF9hbGdvcml0aG0zLmNyZWF0ZUFsZ29yaXRobTA5KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTExID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTExKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEyID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTEyKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEzID0gKDAsIF9hbGdvcml0aG02LmNyZWF0ZUFsZ29yaXRobTEzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTcuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGludmVyc2UgdGFuZ2VudCBmdW5jdGlvbiB3aXRoIHR3byBhcmd1bWVudHMsIHkveC5cbiAgICogQnkgcHJvdmlkaW5nIHR3byBhcmd1bWVudHMsIHRoZSByaWdodCBxdWFkcmFudCBvZiB0aGUgY29tcHV0ZWQgYW5nbGUgY2FuIGJlXG4gICAqIGRldGVybWluZWQuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5hdGFuMih5LCB4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5hdGFuMigyLCAyKSAvIG1hdGgucGkgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMC4yNVxuICAgKlxuICAgKiAgICBjb25zdCBhbmdsZSA9IG1hdGgudW5pdCg2MCwgJ2RlZycpIC8vIHJldHVybnMgVW5pdCA2MCBkZWdcbiAgICogICAgY29uc3QgeCA9IG1hdGguY29zKGFuZ2xlKVxuICAgKiAgICBjb25zdCB5ID0gbWF0aC5zaW4oYW5nbGUpXG4gICAqXG4gICAqICAgIG1hdGguYXRhbigyKSAgICAgICAgICAgICAvLyByZXR1cm5zIENvbXBsZXggMS41NzA3OTYzMjY3OTQ4OTY2IC0xLjMxNjk1Nzg5NjkyNDgxNjYgaVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgdGFuLCBhdGFuLCBzaW4sIGNvc1xuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEFycmF5IHwgTWF0cml4fSB5ICBTZWNvbmQgZGltZW5zaW9uXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IHggIEZpcnN0IGRpbWVuc2lvblxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBBcnJheSB8IE1hdHJpeH0gRm91ci1xdWFkcmFudCBpbnZlcnNlIHRhbmdlbnRcbiAgICovXG5cbiAgdmFyIGF0YW4yID0gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIsIG51bWJlcic6IE1hdGguYXRhbjIsXG4gICAgLy8gQ29tcGxleCBudW1iZXJzIGRvZXNuJ3Qgc2VlbSB0byBoYXZlIGEgcmVhc29uYWJsZSBpbXBsZW1lbnRhdGlvbiBvZlxuICAgIC8vIGF0YW4yKCkuIEV2ZW4gTWF0bGFiIHJlbW92ZWQgdGhlIHN1cHBvcnQsIGFmdGVyIHRoZXkgb25seSBjYWxjdWxhdGVkXG4gICAgLy8gdGhlIGF0YW4gb25seSBvbiBiYXNlIG9mIHRoZSByZWFsIHBhcnQgb2YgdGhlIG51bWJlcnMgYW5kIGlnbm9yZWQgdGhlIGltYWdpbmFyeS5cbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIoeSwgeCkge1xuICAgICAgcmV0dXJuIEJpZ051bWJlci5hdGFuMih5LCB4KTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDkoeCwgeSwgYXRhbjIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gbWluZCB0aGUgb3JkZXIgb2YgeSBhbmQgeCFcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMih5LCB4LCBhdGFuMiwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh4LCB5LCBhdGFuMiwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIGF0YW4yKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIHJldHVybiBhdGFuMihtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYXRhbjIobWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgcmV0dXJuIGF0YW4yKHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTExKHgsIHksIGF0YW4yLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIERlbnNlTWF0cml4TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBhdGFuMiwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyU3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIG1pbmQgdGhlIG9yZGVyIG9mIHkgYW5kIHhcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih5LCB4LCBhdGFuMiwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckRlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIG1pbmQgdGhlIG9yZGVyIG9mIHkgYW5kIHhcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCBhdGFuMiwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIEFycmF5TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeCksIHksIGF0YW4yLCBmYWxzZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgQXJyYXknOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJBcnJheSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCBhdGFuMiwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBhdGFuMjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVBdGFuMiA9IGNyZWF0ZUF0YW4yOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBdGFuaCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2F0YW5oJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdDb21wbGV4J107XG52YXIgY3JlYXRlQXRhbmggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgYXJjdGFuZ2VudCBvZiBhIHZhbHVlLFxuICAgKiBkZWZpbmVkIGFzIGBhdGFuaCh4KSA9IGxuKCgxICsgeCkvKDEgLSB4KSkgLyAyYC5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmF0YW5oKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmF0YW5oKDAuNSkgICAgICAgLy8gcmV0dXJucyAwLjU0OTMwNjE0NDMzNDA1NDlcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGFjb3NoLCBhc2luaFxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geCAgRnVuY3Rpb24gaW5wdXRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBIeXBlcmJvbGljIGFyY3RhbmdlbnQgb2YgeFxuICAgKi9cbiAgdmFyIGF0YW5oID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgICAgIGlmICh4IDw9IDEgJiYgeCA+PSAtMSB8fCBjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfbnVtYmVyLmF0YW5oTnVtYmVyKSh4KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgsIDApLmF0YW5oKCk7XG4gICAgfSxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmF0YW5oKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4geC5hdGFuaCgpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSBhdGFuaCgwKSA9IDBcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgYXRhbmgsIHRydWUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBhdGFuaDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVBdGFuaCA9IGNyZWF0ZUF0YW5oOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb3MgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIG5hbWUgPSAnY29zJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlQ29zID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBjb3NpbmUgb2YgYSB2YWx1ZS5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmNvcyh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5jb3MoMikgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgLTAuNDE2MTQ2ODM2NTQ3MTQyMlxuICAgKiAgICBtYXRoLmNvcyhtYXRoLnBpIC8gNCkgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAgMC43MDcxMDY3ODExODY1NDc1XG4gICAqICAgIG1hdGguY29zKG1hdGgudW5pdCgxODAsICdkZWcnKSkgIC8vIHJldHVybnMgbnVtYmVyIC0xXG4gICAqICAgIG1hdGguY29zKG1hdGgudW5pdCg2MCwgJ2RlZycpKSAgIC8vIHJldHVybnMgbnVtYmVyICAwLjVcbiAgICpcbiAgICogICAgY29uc3QgYW5nbGUgPSAwLjJcbiAgICogICAgbWF0aC5wb3cobWF0aC5zaW4oYW5nbGUpLCAyKSArIG1hdGgucG93KG1hdGguY29zKGFuZ2xlKSwgMikgLy8gcmV0dXJucyBudW1iZXIgfjFcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGNvcywgdGFuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCAgRnVuY3Rpb24gaW5wdXRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBDb3NpbmUgb2YgeFxuICAgKi9cbiAgdmFyIGNvcyA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IE1hdGguY29zLFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHguY29zKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4geC5jb3MoKTtcbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgaWYgKCF4Lmhhc0Jhc2UoeC5jb25zdHJ1Y3Rvci5CQVNFX1VOSVRTLkFOR0xFKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbml0IGluIGZ1bmN0aW9uIGNvcyBpcyBubyBhbmdsZScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29zKHgudmFsdWUpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBjb3MpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjb3M7XG59KTtcbmV4cG9ydHMuY3JlYXRlQ29zID0gY3JlYXRlQ29zOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb3NoID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnY29zaCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUNvc2ggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgY29zaW5lIG9mIGEgdmFsdWUsXG4gICAqIGRlZmluZWQgYXMgYGNvc2goeCkgPSAxLzIgKiAoZXhwKHgpICsgZXhwKC14KSlgLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguY29zaCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5jb3NoKDAuNSkgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMS4xMjc2MjU5NjUyMDYzODA3XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBzaW5oLCB0YW5oXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCAgRnVuY3Rpb24gaW5wdXRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBIeXBlcmJvbGljIGNvc2luZSBvZiB4XG4gICAqL1xuICB2YXIgY29zaCA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IF9udW1iZXIuY29zaCxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmNvc2goKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LmNvc2goKTtcbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgaWYgKCF4Lmhhc0Jhc2UoeC5jb25zdHJ1Y3Rvci5CQVNFX1VOSVRTLkFOR0xFKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbml0IGluIGZ1bmN0aW9uIGNvc2ggaXMgbm8gYW5nbGUnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvc2goeC52YWx1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGNvc2gpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjb3NoO1xufSk7XG5leHBvcnRzLmNyZWF0ZUNvc2ggPSBjcmVhdGVDb3NoOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb3QgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdjb3QnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnQmlnTnVtYmVyJ107XG52YXIgY3JlYXRlQ290ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIF9CaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcjtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBjb3RhbmdlbnQgb2YgYSB2YWx1ZS4gRGVmaW5lZCBhcyBgY290KHgpID0gMSAvIHRhbih4KWAuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5jb3QoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguY290KDIpICAgICAgLy8gcmV0dXJucyBudW1iZXIgLTAuNDU3NjU3NTU0MzYwMjg1NzdcbiAgICogICAgMSAvIG1hdGgudGFuKDIpICAvLyByZXR1cm5zIG51bWJlciAtMC40NTc2NTc1NTQzNjAyODU3N1xuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgdGFuLCBzZWMsIGNzY1xuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggIEZ1bmN0aW9uIGlucHV0XG4gICAqIEByZXR1cm4ge251bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gQ290YW5nZW50IG9mIHhcbiAgICovXG4gIHZhciBjb3QgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmNvdE51bWJlcixcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmNvdCgpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIG5ldyBfQmlnTnVtYmVyKDEpLmRpdih4LnRhbigpKTtcbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgaWYgKCF4Lmhhc0Jhc2UoeC5jb25zdHJ1Y3Rvci5CQVNFX1VOSVRTLkFOR0xFKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbml0IGluIGZ1bmN0aW9uIGNvdCBpcyBubyBhbmdsZScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY290KHgudmFsdWUpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBjb3QpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjb3Q7XG59KTtcbmV4cG9ydHMuY3JlYXRlQ290ID0gY3JlYXRlQ290OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb3RoID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnY290aCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdCaWdOdW1iZXInXTtcbnZhciBjcmVhdGVDb3RoID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIF9CaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcjtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBoeXBlcmJvbGljIGNvdGFuZ2VudCBvZiBhIHZhbHVlLFxuICAgKiBkZWZpbmVkIGFzIGBjb3RoKHgpID0gMSAvIHRhbmgoeClgLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguY290aCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgLy8gY290aCh4KSA9IDEgLyB0YW5oKHgpXG4gICAqICAgIG1hdGguY290aCgyKSAgICAgICAgIC8vIHJldHVybnMgMS4wMzczMTQ3MjA3Mjc1NDgyXG4gICAqICAgIDEgLyBtYXRoLnRhbmgoMikgICAgIC8vIHJldHVybnMgMS4wMzczMTQ3MjA3Mjc1NDgyXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBzaW5oLCB0YW5oLCBjb3NoXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCAgRnVuY3Rpb24gaW5wdXRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBIeXBlcmJvbGljIGNvdGFuZ2VudCBvZiB4XG4gICAqL1xuICB2YXIgY290aCA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IF9udW1iZXIuY290aE51bWJlcixcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmNvdGgoKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiBuZXcgX0JpZ051bWJlcigxKS5kaXYoeC50YW5oKCkpO1xuICAgIH0sXG4gICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7XG4gICAgICBpZiAoIXguaGFzQmFzZSh4LmNvbnN0cnVjdG9yLkJBU0VfVU5JVFMuQU5HTEUpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuaXQgaW4gZnVuY3Rpb24gY290aCBpcyBubyBhbmdsZScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY290aCh4LnZhbHVlKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgY290aCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGNvdGg7XG59KTtcbmV4cG9ydHMuY3JlYXRlQ290aCA9IGNyZWF0ZUNvdGg7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNzYyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2NzYyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdCaWdOdW1iZXInXTtcbnZhciBjcmVhdGVDc2MgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgX0JpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGNvc2VjYW50IG9mIGEgdmFsdWUsIGRlZmluZWQgYXMgYGNzYyh4KSA9IDEvc2luKHgpYC5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmNzYyh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5jc2MoMikgICAgICAvLyByZXR1cm5zIG51bWJlciAxLjA5OTc1MDE3MDI5NDYxN1xuICAgKiAgICAxIC8gbWF0aC5zaW4oMikgIC8vIHJldHVybnMgbnVtYmVyIDEuMDk5NzUwMTcwMjk0NjE3XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBzaW4sIHNlYywgY290XG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCAgRnVuY3Rpb24gaW5wdXRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBDb3NlY2FudCBvZiB4XG4gICAqL1xuICB2YXIgY3NjID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogX251bWJlci5jc2NOdW1iZXIsXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5jc2MoKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiBuZXcgX0JpZ051bWJlcigxKS5kaXYoeC5zaW4oKSk7XG4gICAgfSxcbiAgICBVbml0OiBmdW5jdGlvbiBVbml0KHgpIHtcbiAgICAgIGlmICgheC5oYXNCYXNlKHguY29uc3RydWN0b3IuQkFTRV9VTklUUy5BTkdMRSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5pdCBpbiBmdW5jdGlvbiBjc2MgaXMgbm8gYW5nbGUnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNzYyh4LnZhbHVlKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgY3NjKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY3NjO1xufSk7XG5leHBvcnRzLmNyZWF0ZUNzYyA9IGNyZWF0ZUNzYzsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ3NjaCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2NzY2gnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnQmlnTnVtYmVyJ107XG52YXIgY3JlYXRlQ3NjaCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBfQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXI7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgaHlwZXJib2xpYyBjb3NlY2FudCBvZiBhIHZhbHVlLFxuICAgKiBkZWZpbmVkIGFzIGBjc2NoKHgpID0gMSAvIHNpbmgoeClgLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguY3NjaCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgLy8gY3NjaCh4KSA9IDEvIHNpbmgoeClcbiAgICogICAgbWF0aC5jc2NoKDAuNSkgICAgICAgLy8gcmV0dXJucyAxLjkxOTAzNDc1MTMzNDk0MzdcbiAgICogICAgMSAvIG1hdGguc2luaCgwLjUpICAgLy8gcmV0dXJucyAxLjkxOTAzNDc1MTMzNDk0MzdcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIHNpbmgsIHNlY2gsIGNvdGhcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4ICBGdW5jdGlvbiBpbnB1dFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IEh5cGVyYm9saWMgY29zZWNhbnQgb2YgeFxuICAgKi9cbiAgdmFyIGNzY2ggPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmNzY2hOdW1iZXIsXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5jc2NoKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4gbmV3IF9CaWdOdW1iZXIoMSkuZGl2KHguc2luaCgpKTtcbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgaWYgKCF4Lmhhc0Jhc2UoeC5jb25zdHJ1Y3Rvci5CQVNFX1VOSVRTLkFOR0xFKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbml0IGluIGZ1bmN0aW9uIGNzY2ggaXMgbm8gYW5nbGUnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNzY2goeC52YWx1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGNzY2gpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjc2NoO1xufSk7XG5leHBvcnRzLmNyZWF0ZUNzY2ggPSBjcmVhdGVDc2NoOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTZWMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdzZWMnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnQmlnTnVtYmVyJ107XG52YXIgY3JlYXRlU2VjID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIF9CaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcjtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBzZWNhbnQgb2YgYSB2YWx1ZSwgZGVmaW5lZCBhcyBgc2VjKHgpID0gMS9jb3MoeClgLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguc2VjKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnNlYygyKSAgICAgIC8vIHJldHVybnMgbnVtYmVyIC0yLjQwMjk5Nzk2MTcyMjM4MjJcbiAgICogICAgMSAvIG1hdGguY29zKDIpICAvLyByZXR1cm5zIG51bWJlciAtMi40MDI5OTc5NjE3MjIzODIyXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjb3MsIGNzYywgY290XG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCAgRnVuY3Rpb24gaW5wdXRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBTZWNhbnQgb2YgeFxuICAgKi9cbiAgdmFyIHNlYyA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IF9udW1iZXIuc2VjTnVtYmVyLFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHguc2VjKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4gbmV3IF9CaWdOdW1iZXIoMSkuZGl2KHguY29zKCkpO1xuICAgIH0sXG4gICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7XG4gICAgICBpZiAoIXguaGFzQmFzZSh4LmNvbnN0cnVjdG9yLkJBU0VfVU5JVFMuQU5HTEUpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuaXQgaW4gZnVuY3Rpb24gc2VjIGlzIG5vIGFuZ2xlJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZWMoeC52YWx1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIHNlYyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHNlYztcbn0pO1xuZXhwb3J0cy5jcmVhdGVTZWMgPSBjcmVhdGVTZWM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNlY2ggPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdzZWNoJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ0JpZ051bWJlciddO1xudmFyIGNyZWF0ZVNlY2ggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgX0JpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgc2VjYW50IG9mIGEgdmFsdWUsXG4gICAqIGRlZmluZWQgYXMgYHNlY2goeCkgPSAxIC8gY29zaCh4KWAuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5zZWNoKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAvLyBzZWNoKHgpID0gMS8gY29zaCh4KVxuICAgKiAgICBtYXRoLnNlY2goMC41KSAgICAgICAvLyByZXR1cm5zIDAuODg2ODE4ODgzOTcwMDc0XG4gICAqICAgIDEgLyBtYXRoLmNvc2goMC41KSAgIC8vIHJldHVybnMgMC44ODY4MTg4ODM5NzAwNzRcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGNvc2gsIGNzY2gsIGNvdGhcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4ICBGdW5jdGlvbiBpbnB1dFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IEh5cGVyYm9saWMgc2VjYW50IG9mIHhcbiAgICovXG4gIHZhciBzZWNoID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogX251bWJlci5zZWNoTnVtYmVyLFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHguc2VjaCgpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIG5ldyBfQmlnTnVtYmVyKDEpLmRpdih4LmNvc2goKSk7XG4gICAgfSxcbiAgICBVbml0OiBmdW5jdGlvbiBVbml0KHgpIHtcbiAgICAgIGlmICgheC5oYXNCYXNlKHguY29uc3RydWN0b3IuQkFTRV9VTklUUy5BTkdMRSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5pdCBpbiBmdW5jdGlvbiBzZWNoIGlzIG5vIGFuZ2xlJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZWNoKHgudmFsdWUpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBzZWNoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gc2VjaDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTZWNoID0gY3JlYXRlU2VjaDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU2luID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBuYW1lID0gJ3Npbic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZVNpbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgc2luZSBvZiBhIHZhbHVlLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguc2luKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnNpbigyKSAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAwLjkwOTI5NzQyNjgyNTY4MTNcbiAgICogICAgbWF0aC5zaW4obWF0aC5waSAvIDQpICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMC43MDcxMDY3ODExODY1NDc1XG4gICAqICAgIG1hdGguc2luKG1hdGgudW5pdCg5MCwgJ2RlZycpKSAgIC8vIHJldHVybnMgbnVtYmVyIDFcbiAgICogICAgbWF0aC5zaW4obWF0aC51bml0KDMwLCAnZGVnJykpICAgLy8gcmV0dXJucyBudW1iZXIgMC41XG4gICAqXG4gICAqICAgIGNvbnN0IGFuZ2xlID0gMC4yXG4gICAqICAgIG1hdGgucG93KG1hdGguc2luKGFuZ2xlKSwgMikgKyBtYXRoLnBvdyhtYXRoLmNvcyhhbmdsZSksIDIpIC8vIHJldHVybnMgbnVtYmVyIH4xXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjb3MsIHRhblxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggIEZ1bmN0aW9uIGlucHV0XG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gU2luZSBvZiB4XG4gICAqL1xuICB2YXIgc2luID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogTWF0aC5zaW4sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5zaW4oKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LnNpbigpO1xuICAgIH0sXG4gICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7XG4gICAgICBpZiAoIXguaGFzQmFzZSh4LmNvbnN0cnVjdG9yLkJBU0VfVU5JVFMuQU5HTEUpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuaXQgaW4gZnVuY3Rpb24gc2luIGlzIG5vIGFuZ2xlJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzaW4oeC52YWx1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICAvLyBkZWVwIG1hcCBjb2xsZWN0aW9uLCBza2lwIHplcm9zIHNpbmNlIHNpbigwKSA9IDBcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgc2luLCB0cnVlKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gc2luO1xufSk7XG5leHBvcnRzLmNyZWF0ZVNpbiA9IGNyZWF0ZVNpbjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU2luaCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ3NpbmgnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVTaW5oID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBoeXBlcmJvbGljIHNpbmUgb2YgYSB2YWx1ZSxcbiAgICogZGVmaW5lZCBhcyBgc2luaCh4KSA9IDEvMiAqIChleHAoeCkgLSBleHAoLXgpKWAuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5zaW5oKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnNpbmgoMC41KSAgICAgICAvLyByZXR1cm5zIG51bWJlciAwLjUyMTA5NTMwNTQ5Mzc0NzRcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGNvc2gsIHRhbmhcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4ICBGdW5jdGlvbiBpbnB1dFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IEh5cGVyYm9saWMgc2luZSBvZiB4XG4gICAqL1xuICB2YXIgc2luaCA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IF9udW1iZXIuc2luaE51bWJlcixcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LnNpbmgoKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LnNpbmgoKTtcbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgaWYgKCF4Lmhhc0Jhc2UoeC5jb25zdHJ1Y3Rvci5CQVNFX1VOSVRTLkFOR0xFKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbml0IGluIGZ1bmN0aW9uIHNpbmggaXMgbm8gYW5nbGUnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNpbmgoeC52YWx1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICAvLyBkZWVwIG1hcCBjb2xsZWN0aW9uLCBza2lwIHplcm9zIHNpbmNlIHNpbmgoMCkgPSAwXG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIHNpbmgsIHRydWUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBzaW5oO1xufSk7XG5leHBvcnRzLmNyZWF0ZVNpbmggPSBjcmVhdGVTaW5oOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVUYW4gPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIG5hbWUgPSAndGFuJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlVGFuID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSB0YW5nZW50IG9mIGEgdmFsdWUuIGB0YW4oeClgIGlzIGVxdWFsIHRvIGBzaW4oeCkgLyBjb3MoeClgLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgudGFuKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnRhbigwLjUpICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAwLjU0NjMwMjQ4OTg0Mzc5MDVcbiAgICogICAgbWF0aC5zaW4oMC41KSAvIG1hdGguY29zKDAuNSkgICAgLy8gcmV0dXJucyBudW1iZXIgMC41NDYzMDI0ODk4NDM3OTA1XG4gICAqICAgIG1hdGgudGFuKG1hdGgucGkgLyA0KSAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDFcbiAgICogICAgbWF0aC50YW4obWF0aC51bml0KDQ1LCAnZGVnJykpICAgLy8gcmV0dXJucyBudW1iZXIgMVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYXRhbiwgc2luLCBjb3NcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4ICBGdW5jdGlvbiBpbnB1dFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IFRhbmdlbnQgb2YgeFxuICAgKi9cbiAgdmFyIHRhbiA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IE1hdGgudGFuLFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHgudGFuKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4geC50YW4oKTtcbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgaWYgKCF4Lmhhc0Jhc2UoeC5jb25zdHJ1Y3Rvci5CQVNFX1VOSVRTLkFOR0xFKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbml0IGluIGZ1bmN0aW9uIHRhbiBpcyBubyBhbmdsZScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGFuKHgudmFsdWUpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSB0YW4oMCkgPSAwXG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIHRhbiwgdHJ1ZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHRhbjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVUYW4gPSBjcmVhdGVUYW47IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVRhbmggPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICd0YW5oJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlVGFuaCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgaHlwZXJib2xpYyB0YW5nZW50IG9mIGEgdmFsdWUsXG4gICAqIGRlZmluZWQgYXMgYHRhbmgoeCkgPSAoZXhwKDIgKiB4KSAtIDEpIC8gKGV4cCgyICogeCkgKyAxKWAuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC50YW5oKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAvLyB0YW5oKHgpID0gc2luaCh4KSAvIGNvc2goeCkgPSAxIC8gY290aCh4KVxuICAgKiAgICBtYXRoLnRhbmgoMC41KSAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDAuNDYyMTE3MTU3MjYwMDA5NzRcbiAgICogICAgbWF0aC5zaW5oKDAuNSkgLyBtYXRoLmNvc2goMC41KSAgLy8gcmV0dXJucyAwLjQ2MjExNzE1NzI2MDAwOTc0XG4gICAqICAgIDEgLyBtYXRoLmNvdGgoMC41KSAgICAgICAgICAgICAgIC8vIHJldHVybnMgMC40NjIxMTcxNTcyNjAwMDk3NFxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgc2luaCwgY29zaCwgY290aFxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggIEZ1bmN0aW9uIGlucHV0XG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gSHlwZXJib2xpYyB0YW5nZW50IG9mIHhcbiAgICovXG4gIHZhciB0YW5oID0gdHlwZWQoJ3RhbmgnLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLnRhbmgsXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC50YW5oKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4geC50YW5oKCk7XG4gICAgfSxcbiAgICBVbml0OiBmdW5jdGlvbiBVbml0KHgpIHtcbiAgICAgIGlmICgheC5oYXNCYXNlKHguY29uc3RydWN0b3IuQkFTRV9VTklUUy5BTkdMRSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5pdCBpbiBmdW5jdGlvbiB0YW5oIGlzIG5vIGFuZ2xlJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0YW5oKHgudmFsdWUpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSB0YW5oKDApID0gMFxuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCB0YW5oLCB0cnVlKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gdGFuaDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVUYW5oID0gY3JlYXRlVGFuaDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlVG8gPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xM1wiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgbmFtZSA9ICd0byc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnXTtcbnZhciBjcmVhdGVUbyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTEzID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMTMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0xNCkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgLyoqXG4gICAqIENoYW5nZSB0aGUgdW5pdCBvZiBhIHZhbHVlLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgudG8oeCwgdW5pdClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgudG8obWF0aC51bml0KCcyIGluY2gnKSwgJ2NtJykgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBVbml0IDUuMDggY21cbiAgICogICAgbWF0aC50byhtYXRoLnVuaXQoJzIgaW5jaCcpLCBtYXRoLnVuaXQobnVsbCwgJ2NtJykpICAvLyByZXR1cm5zIFVuaXQgNS4wOCBjbVxuICAgKiAgICBtYXRoLnRvKG1hdGgudW5pdCgxNiwgJ2J5dGVzJyksICdiaXRzJykgICAgICAgICAgICAgIC8vIHJldHVybnMgVW5pdCAxMjggYml0c1xuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgdW5pdFxuICAgKlxuICAgKiBAcGFyYW0ge1VuaXQgfCBBcnJheSB8IE1hdHJpeH0geCAgICAgVGhlIHVuaXQgdG8gYmUgY29udmVydGVkLlxuICAgKiBAcGFyYW0ge1VuaXQgfCBBcnJheSB8IE1hdHJpeH0gdW5pdCAgTmV3IHVuaXQuIENhbiBiZSBhIHN0cmluZyBsaWtlIFwiY21cIlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYSB1bml0IHdpdGhvdXQgdmFsdWUuXG4gICAqIEByZXR1cm4ge1VuaXQgfCBBcnJheSB8IE1hdHJpeH0gdmFsdWUgd2l0aCBjaGFuZ2VkLCBmaXhlZCB1bml0LlxuICAgKi9cblxuICB2YXIgdG8gPSB0eXBlZChuYW1lLCB7XG4gICAgJ1VuaXQsIFVuaXQgfCBzdHJpbmcnOiBmdW5jdGlvbiBVbml0VW5pdFN0cmluZyh4LCB1bml0KSB7XG4gICAgICByZXR1cm4geC50byh1bml0KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIE1hdHJpeCc6IGZ1bmN0aW9uIE1hdHJpeE1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyBTcGFyc2VNYXRyaXggZG9lcyBub3Qgc3VwcG9ydCBVbml0c1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIHRvKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiB0byhtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gdG8obWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHRvKHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBhbnknOiBmdW5jdGlvbiBNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgLy8gU3BhcnNlTWF0cml4IGRvZXMgbm90IHN1cHBvcnQgVW5pdHNcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCB0bywgZmFsc2UpO1xuICAgIH0sXG4gICAgJ2FueSwgTWF0cml4JzogZnVuY3Rpb24gYW55TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIFNwYXJzZU1hdHJpeCBkb2VzIG5vdCBzdXBwb3J0IFVuaXRzXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgdG8sIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBhbnknOiBmdW5jdGlvbiBBcnJheUFueSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCB0bywgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgdG8sIHRydWUpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gdG87XG59KTtcbmV4cG9ydHMuY3JlYXRlVG8gPSBjcmVhdGVUbzsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ2xvbmUgPSB2b2lkIDA7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2Nsb25lJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlQ2xvbmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBDbG9uZSBhbiBvYmplY3QuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguY2xvbmUoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguY2xvbmUoMy41KSAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAzLjVcbiAgICogICAgbWF0aC5jbG9uZShtYXRoLmNvbXBsZXgoJzItNGknKSAvLyByZXR1cm5zIENvbXBsZXggMiAtIDRpXG4gICAqICAgIG1hdGguY2xvbmUobWF0aC51bml0KDQ1LCAnZGVnJykpICAvLyByZXR1cm5zIFVuaXQgNDUgZGVnXG4gICAqICAgIG1hdGguY2xvbmUoW1sxLCAyXSwgWzMsIDRdXSkgICAgICAvLyByZXR1cm5zIEFycmF5IFtbMSwgMl0sIFszLCA0XV1cbiAgICogICAgbWF0aC5jbG9uZShcImhlbGxvIHdvcmxkXCIpICAgICAgICAgLy8gcmV0dXJucyBzdHJpbmcgXCJoZWxsbyB3b3JsZFwiXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0geCAgIE9iamVjdCB0byBiZSBjbG9uZWRcbiAgICogQHJldHVybiB7Kn0gQSBjbG9uZSBvZiBvYmplY3QgeFxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICBhbnk6IF9vYmplY3QuY2xvbmVcbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlQ2xvbmUgPSBjcmVhdGVDbG9uZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlSGFzTnVtZXJpY1ZhbHVlID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnaGFzTnVtZXJpY1ZhbHVlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2lzTnVtZXJpYyddO1xudmFyIGNyZWF0ZUhhc051bWVyaWNWYWx1ZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBpc051bWVyaWMgPSBfcmVmLmlzTnVtZXJpYztcblxuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIGEgdmFsdWUgaXMgYW4gbnVtZXJpYyB2YWx1ZS5cbiAgICpcbiAgICogSW4gY2FzZSBvZiBhIHN0cmluZywgdHJ1ZSBpcyByZXR1cm5lZCBpZiB0aGUgc3RyaW5nIGNvbnRhaW5zIGEgbnVtZXJpYyB2YWx1ZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5oYXNOdW1lcmljVmFsdWUoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguaGFzTnVtZXJpY1ZhbHVlKDIpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaGFzTnVtZXJpY1ZhbHVlKCcyJykgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNOdW1lcmljKCcyJykgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmhhc051bWVyaWNWYWx1ZSgwKSAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmhhc051bWVyaWNWYWx1ZShtYXRoLmJpZ251bWJlcig1MDApKSAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmhhc051bWVyaWNWYWx1ZShtYXRoLmZyYWN0aW9uKDQpKSAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmhhc051bWVyaWNWYWx1ZShtYXRoLmNvbXBsZXgoJzItNGknKSAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5oYXNOdW1lcmljVmFsdWUoWzIuMywgJ2ZvbycsIGZhbHNlXSkgICAvLyByZXR1cm5zIFt0cnVlLCBmYWxzZSwgdHJ1ZV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGlzWmVybywgaXNQb3NpdGl2ZSwgaXNOZWdhdGl2ZSwgaXNJbnRlZ2VyLCBpc051bWVyaWNcbiAgICpcbiAgICogQHBhcmFtIHsqfSB4ICAgICAgIFZhbHVlIHRvIGJlIHRlc3RlZFxuICAgKiBAcmV0dXJuIHtib29sZWFufSAgUmV0dXJucyB0cnVlIHdoZW4gYHhgIGlzIGEgYG51bWJlcmAsIGBCaWdOdW1iZXJgLFxuICAgKiAgICAgICAgICAgICAgICAgICAgYEZyYWN0aW9uYCwgYEJvb2xlYW5gLCBvciBhIGBTdHJpbmdgIGNvbnRhaW5pbmcgbnVtYmVyLiBSZXR1cm5zIGZhbHNlIGZvciBvdGhlciB0eXBlcy5cbiAgICogICAgICAgICAgICAgICAgICAgIFRocm93cyBhbiBlcnJvciBpbiBjYXNlIG9mIHVua25vd24gdHlwZXMuXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIHN0cmluZzogZnVuY3Rpb24gc3RyaW5nKHgpIHtcbiAgICAgIHJldHVybiB4LnRyaW0oKS5sZW5ndGggPiAwICYmICFpc05hTihOdW1iZXIoeCkpO1xuICAgIH0sXG4gICAgYW55OiBmdW5jdGlvbiBhbnkoeCkge1xuICAgICAgcmV0dXJuIGlzTnVtZXJpYyh4KTtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZUhhc051bWVyaWNWYWx1ZSA9IGNyZWF0ZUhhc051bWVyaWNWYWx1ZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlSXNJbnRlZ2VyID0gdm9pZCAwO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnaXNJbnRlZ2VyJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlSXNJbnRlZ2VyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIGEgdmFsdWUgaXMgYW4gaW50ZWdlciBudW1iZXIuXG4gICAqIFRoZSBmdW5jdGlvbiBzdXBwb3J0cyBgbnVtYmVyYCwgYEJpZ051bWJlcmAsIGFuZCBgRnJhY3Rpb25gLlxuICAgKlxuICAgKiBUaGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQtd2lzZSBpbiBjYXNlIG9mIEFycmF5IG9yIE1hdHJpeCBpbnB1dC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5pc0ludGVnZXIoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguaXNJbnRlZ2VyKDIpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNJbnRlZ2VyKDApICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNJbnRlZ2VyKDAuNSkgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmlzSW50ZWdlcihtYXRoLmJpZ251bWJlcig1MDApKSAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmlzSW50ZWdlcihtYXRoLmZyYWN0aW9uKDQpKSAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmlzSW50ZWdlcignMycpICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmlzSW50ZWdlcihbMywgMC41LCAtMl0pICAgICAgICAgIC8vIHJldHVybnMgW3RydWUsIGZhbHNlLCB0cnVlXVxuICAgKiAgICBtYXRoLmlzSW50ZWdlcihtYXRoLmNvbXBsZXgoJzItNGknKSAgIC8vIHRocm93cyBhbiBlcnJvclxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgaXNOdW1lcmljLCBpc1Bvc2l0aXZlLCBpc05lZ2F0aXZlLCBpc1plcm9cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IEFycmF5IHwgTWF0cml4fSB4ICAgVmFsdWUgdG8gYmUgdGVzdGVkXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59ICBSZXR1cm5zIHRydWUgd2hlbiBgeGAgY29udGFpbnMgYSBudW1lcmljLCBpbnRlZ2VyIHZhbHVlLlxuICAgKiAgICAgICAgICAgICAgICAgICAgVGhyb3dzIGFuIGVycm9yIGluIGNhc2Ugb2YgYW4gdW5rbm93biBkYXRhIHR5cGUuXG4gICAqL1xuICB2YXIgaXNJbnRlZ2VyID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogX251bWJlci5pc0ludGVnZXIsXG4gICAgLy8gVE9ETzogd2hhdCB0byBkbyB3aXRoIGlzSW50ZWdlcihhZGQoMC4xLCAwLjIpKSAgP1xuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LmlzSW50KCk7XG4gICAgfSxcbiAgICBGcmFjdGlvbjogZnVuY3Rpb24gRnJhY3Rpb24oeCkge1xuICAgICAgcmV0dXJuIHguZCA9PT0gMSAmJiBpc0Zpbml0ZSh4Lm4pO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBpc0ludGVnZXIpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBpc0ludGVnZXI7XG59KTtcbmV4cG9ydHMuY3JlYXRlSXNJbnRlZ2VyID0gY3JlYXRlSXNJbnRlZ2VyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVJc05hTiA9IHZvaWQgMDtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2lzTmFOJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlSXNOYU4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBUZXN0IHdoZXRoZXIgYSB2YWx1ZSBpcyBOYU4gKG5vdCBhIG51bWJlcikuXG4gICAqIFRoZSBmdW5jdGlvbiBzdXBwb3J0cyB0eXBlcyBgbnVtYmVyYCwgYEJpZ051bWJlcmAsIGBGcmFjdGlvbmAsIGBVbml0YCBhbmQgYENvbXBsZXhgLlxuICAgKlxuICAgKiBUaGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQtd2lzZSBpbiBjYXNlIG9mIEFycmF5IG9yIE1hdHJpeCBpbnB1dC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5pc05hTih4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5pc05hTigzKSAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5pc05hTihOYU4pICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmlzTmFOKDApICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmlzTmFOKG1hdGguYmlnbnVtYmVyKE5hTikpICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNOYU4obWF0aC5iaWdudW1iZXIoMCkpICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNOYU4obWF0aC5mcmFjdGlvbigtMiwgNSkpICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNOYU4oJy0yJykgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNOYU4oWzIsIDAsIC0zLCBOYU5dJykgICAgICAvLyByZXR1cm5zIFtmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgaXNOdW1lcmljLCBpc05lZ2F0aXZlLCBpc1Bvc2l0aXZlLCBpc1plcm8sIGlzSW50ZWdlclxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4ICBWYWx1ZSB0byBiZSB0ZXN0ZWRcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gIFJldHVybnMgdHJ1ZSB3aGVuIGB4YCBpcyBOYU4uXG4gICAqICAgICAgICAgICAgICAgICAgICBUaHJvd3MgYW4gZXJyb3IgaW4gY2FzZSBvZiBhbiB1bmtub3duIGRhdGEgdHlwZS5cbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmlzTmFOTnVtYmVyLFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LmlzTmFOKCk7XG4gICAgfSxcbiAgICBGcmFjdGlvbjogZnVuY3Rpb24gRnJhY3Rpb24oeCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5pc05hTigpO1xuICAgIH0sXG4gICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7XG4gICAgICByZXR1cm4gTnVtYmVyLmlzTmFOKHgudmFsdWUpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBOdW1iZXIuaXNOYU4pO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlSXNOYU4gPSBjcmVhdGVJc05hTjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlSXNOZWdhdGl2ZSA9IHZvaWQgMDtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2lzTmVnYXRpdmUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVJc05lZ2F0aXZlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIGEgdmFsdWUgaXMgbmVnYXRpdmU6IHNtYWxsZXIgdGhhbiB6ZXJvLlxuICAgKiBUaGUgZnVuY3Rpb24gc3VwcG9ydHMgdHlwZXMgYG51bWJlcmAsIGBCaWdOdW1iZXJgLCBgRnJhY3Rpb25gLCBhbmQgYFVuaXRgLlxuICAgKlxuICAgKiBUaGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQtd2lzZSBpbiBjYXNlIG9mIEFycmF5IG9yIE1hdHJpeCBpbnB1dC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5pc05lZ2F0aXZlKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmlzTmVnYXRpdmUoMykgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNOZWdhdGl2ZSgtMikgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmlzTmVnYXRpdmUoMCkgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNOZWdhdGl2ZSgtMCkgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5pc05lZ2F0aXZlKG1hdGguYmlnbnVtYmVyKDIpKSAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmlzTmVnYXRpdmUobWF0aC5mcmFjdGlvbigtMiwgNSkpICAvLyByZXR1cm5zIHRydWVcbiAgICogICAgbWF0aC5pc05lZ2F0aXZlKCctMicpICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNOZWdhdGl2ZShbMiwgMCwgLTNdJykgICAgICAgICAgIC8vIHJldHVybnMgW2ZhbHNlLCBmYWxzZSwgdHJ1ZV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGlzTnVtZXJpYywgaXNQb3NpdGl2ZSwgaXNaZXJvLCBpc0ludGVnZXJcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCAgVmFsdWUgdG8gYmUgdGVzdGVkXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59ICBSZXR1cm5zIHRydWUgd2hlbiBgeGAgaXMgbGFyZ2VyIHRoYW4gemVyby5cbiAgICogICAgICAgICAgICAgICAgICAgIFRocm93cyBhbiBlcnJvciBpbiBjYXNlIG9mIGFuIHVua25vd24gZGF0YSB0eXBlLlxuICAgKi9cbiAgdmFyIGlzTmVnYXRpdmUgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmlzTmVnYXRpdmVOdW1iZXIsXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHguaXNOZWcoKSAmJiAheC5pc1plcm8oKSAmJiAheC5pc05hTigpO1xuICAgIH0sXG4gICAgRnJhY3Rpb246IGZ1bmN0aW9uIEZyYWN0aW9uKHgpIHtcbiAgICAgIHJldHVybiB4LnMgPCAwOyAvLyBJdCdzIGVub3VnaCB0byBkZWNpZGUgb24gdGhlIHNpZ25cbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgcmV0dXJuIGlzTmVnYXRpdmUoeC52YWx1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGlzTmVnYXRpdmUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBpc05lZ2F0aXZlO1xufSk7XG5leHBvcnRzLmNyZWF0ZUlzTmVnYXRpdmUgPSBjcmVhdGVJc05lZ2F0aXZlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVJc051bWVyaWMgPSB2b2lkIDA7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnaXNOdW1lcmljJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlSXNOdW1lcmljID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIGEgdmFsdWUgaXMgYW4gbnVtZXJpYyB2YWx1ZS5cbiAgICpcbiAgICogVGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50LXdpc2UgaW4gY2FzZSBvZiBBcnJheSBvciBNYXRyaXggaW5wdXQuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguaXNOdW1lcmljKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmlzTnVtZXJpYygyKSAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmlzTnVtZXJpYygnMicpICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5oYXNOdW1lcmljVmFsdWUoJzInKSAgICAgICAgICAgICAvLyByZXR1cm5zIHRydWVcbiAgICogICAgbWF0aC5pc051bWVyaWMoMCkgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIHRydWVcbiAgICogICAgbWF0aC5pc051bWVyaWMobWF0aC5iaWdudW1iZXIoNTAwKSkgICAvLyByZXR1cm5zIHRydWVcbiAgICogICAgbWF0aC5pc051bWVyaWMobWF0aC5mcmFjdGlvbig0KSkgICAgICAvLyByZXR1cm5zIHRydWVcbiAgICogICAgbWF0aC5pc051bWVyaWMobWF0aC5jb21wbGV4KCcyLTRpJykgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNOdW1lcmljKFsyLjMsICdmb28nLCBmYWxzZV0pICAgLy8gcmV0dXJucyBbdHJ1ZSwgZmFsc2UsIHRydWVdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBpc1plcm8sIGlzUG9zaXRpdmUsIGlzTmVnYXRpdmUsIGlzSW50ZWdlciwgaGFzTnVtZXJpY1ZhbHVlXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0geCAgICAgICBWYWx1ZSB0byBiZSB0ZXN0ZWRcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gIFJldHVybnMgdHJ1ZSB3aGVuIGB4YCBpcyBhIGBudW1iZXJgLCBgQmlnTnVtYmVyYCxcbiAgICogICAgICAgICAgICAgICAgICAgIGBGcmFjdGlvbmAsIG9yIGBib29sZWFuYC4gUmV0dXJucyBmYWxzZSBmb3Igb3RoZXIgdHlwZXMuXG4gICAqICAgICAgICAgICAgICAgICAgICBUaHJvd3MgYW4gZXJyb3IgaW4gY2FzZSBvZiB1bmtub3duIHR5cGVzLlxuICAgKi9cbiAgdmFyIGlzTnVtZXJpYyA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBib29sZWFuJzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyRnJhY3Rpb25Cb29sZWFuKCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICAnQ29tcGxleCB8IFVuaXQgfCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkIHwgTm9kZSc6IGZ1bmN0aW9uIENvbXBsZXhVbml0U3RyaW5nTnVsbFVuZGVmaW5lZE5vZGUoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGlzTnVtZXJpYyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGlzTnVtZXJpYztcbn0pO1xuZXhwb3J0cy5jcmVhdGVJc051bWVyaWMgPSBjcmVhdGVJc051bWVyaWM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUlzUG9zaXRpdmUgPSB2b2lkIDA7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdpc1Bvc2l0aXZlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlSXNQb3NpdGl2ZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIFRlc3Qgd2hldGhlciBhIHZhbHVlIGlzIHBvc2l0aXZlOiBsYXJnZXIgdGhhbiB6ZXJvLlxuICAgKiBUaGUgZnVuY3Rpb24gc3VwcG9ydHMgdHlwZXMgYG51bWJlcmAsIGBCaWdOdW1iZXJgLCBgRnJhY3Rpb25gLCBhbmQgYFVuaXRgLlxuICAgKlxuICAgKiBUaGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQtd2lzZSBpbiBjYXNlIG9mIEFycmF5IG9yIE1hdHJpeCBpbnB1dC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5pc1Bvc2l0aXZlKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmlzUG9zaXRpdmUoMykgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIHRydWVcbiAgICogICAgbWF0aC5pc1Bvc2l0aXZlKC0yKSAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmlzUG9zaXRpdmUoMCkgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNQb3NpdGl2ZSgtMCkgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5pc1Bvc2l0aXZlKDAuNSkgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNQb3NpdGl2ZShtYXRoLmJpZ251bWJlcigyKSkgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmlzUG9zaXRpdmUobWF0aC5mcmFjdGlvbigtMiwgNSkpICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNQb3NpdGl2ZShtYXRoLmZyYWN0aW9uKDEsMykpICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5pc1Bvc2l0aXZlKCcyJykgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNQb3NpdGl2ZShbMiwgMCwgLTNdKSAgICAgICAgICAgIC8vIHJldHVybnMgW3RydWUsIGZhbHNlLCBmYWxzZV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGlzTnVtZXJpYywgaXNaZXJvLCBpc05lZ2F0aXZlLCBpc0ludGVnZXJcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCAgVmFsdWUgdG8gYmUgdGVzdGVkXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59ICBSZXR1cm5zIHRydWUgd2hlbiBgeGAgaXMgbGFyZ2VyIHRoYW4gemVyby5cbiAgICogICAgICAgICAgICAgICAgICAgIFRocm93cyBhbiBlcnJvciBpbiBjYXNlIG9mIGFuIHVua25vd24gZGF0YSB0eXBlLlxuICAgKi9cbiAgdmFyIGlzUG9zaXRpdmUgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmlzUG9zaXRpdmVOdW1iZXIsXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuICF4LmlzTmVnKCkgJiYgIXguaXNaZXJvKCkgJiYgIXguaXNOYU4oKTtcbiAgICB9LFxuICAgIEZyYWN0aW9uOiBmdW5jdGlvbiBGcmFjdGlvbih4KSB7XG4gICAgICByZXR1cm4geC5zID4gMCAmJiB4Lm4gPiAwO1xuICAgIH0sXG4gICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7XG4gICAgICByZXR1cm4gaXNQb3NpdGl2ZSh4LnZhbHVlKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgaXNQb3NpdGl2ZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGlzUG9zaXRpdmU7XG59KTtcbmV4cG9ydHMuY3JlYXRlSXNQb3NpdGl2ZSA9IGNyZWF0ZUlzUG9zaXRpdmU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUlzUHJpbWUgPSB2b2lkIDA7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnaXNQcmltZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUlzUHJpbWUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBUZXN0IHdoZXRoZXIgYSB2YWx1ZSBpcyBwcmltZTogaGFzIG5vIGRpdmlzb3JzIG90aGVyIHRoYW4gaXRzZWxmIGFuZCBvbmUuXG4gICAqIFRoZSBmdW5jdGlvbiBzdXBwb3J0cyB0eXBlIGBudW1iZXJgLCBgYmlnbnVtYmVyYC5cbiAgICpcbiAgICogVGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50LXdpc2UgaW4gY2FzZSBvZiBBcnJheSBvciBNYXRyaXggaW5wdXQuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguaXNQcmltZSh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5pc1ByaW1lKDMpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNQcmltZSgtMikgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5pc1ByaW1lKDApICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmlzUHJpbWUoLTApICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNQcmltZSgwLjUpICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5pc1ByaW1lKCcyJykgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNQcmltZShbMiwgMTcsIDEwMF0pICAgICAgICAgICAvLyByZXR1cm5zIFt0cnVlLCB0cnVlLCBmYWxzZV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGlzTnVtZXJpYywgaXNaZXJvLCBpc05lZ2F0aXZlLCBpc0ludGVnZXJcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0geCAgVmFsdWUgdG8gYmUgdGVzdGVkXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59ICBSZXR1cm5zIHRydWUgd2hlbiBgeGAgaXMgbGFyZ2VyIHRoYW4gemVyby5cbiAgICogICAgICAgICAgICAgICAgICAgIFRocm93cyBhbiBlcnJvciBpbiBjYXNlIG9mIGFuIHVua25vd24gZGF0YSB0eXBlLlxuICAgKi9cbiAgdmFyIGlzUHJpbWUgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkge1xuICAgICAgaWYgKHggKiAwICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHggPD0gMykge1xuICAgICAgICByZXR1cm4geCA+IDE7XG4gICAgICB9XG5cbiAgICAgIGlmICh4ICUgMiA9PT0gMCB8fCB4ICUgMyA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSA1OyBpICogaSA8PSB4OyBpICs9IDYpIHtcbiAgICAgICAgaWYgKHggJSBpID09PSAwIHx8IHggJSAoaSArIDIpID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIobikge1xuICAgICAgaWYgKG4udG9OdW1iZXIoKSAqIDAgIT09IDApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAobi5sdGUoMykpIHJldHVybiBuLmd0KDEpO1xuICAgICAgaWYgKG4ubW9kKDIpLmVxKDApIHx8IG4ubW9kKDMpLmVxKDApKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIGZvciAodmFyIGkgPSA1OyBuLmd0ZShpICogaSk7IGkgKz0gNikge1xuICAgICAgICBpZiAobi5tb2QoaSkuZXEoMCkgfHwgbi5tb2QoaSArIDIpLmVxKDApKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBpc1ByaW1lKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaXNQcmltZTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVJc1ByaW1lID0gY3JlYXRlSXNQcmltZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlSXNaZXJvID0gdm9pZCAwO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnaXNaZXJvJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlSXNaZXJvID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIGEgdmFsdWUgaXMgemVyby5cbiAgICogVGhlIGZ1bmN0aW9uIGNhbiBjaGVjayBmb3IgemVybyBmb3IgdHlwZXMgYG51bWJlcmAsIGBCaWdOdW1iZXJgLCBgRnJhY3Rpb25gLFxuICAgKiBgQ29tcGxleGAsIGFuZCBgVW5pdGAuXG4gICAqXG4gICAqIFRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudC13aXNlIGluIGNhc2Ugb2YgQXJyYXkgb3IgTWF0cml4IGlucHV0LlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLmlzWmVybyh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5pc1plcm8oMCkgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIHRydWVcbiAgICogICAgbWF0aC5pc1plcm8oMikgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNaZXJvKDAuNSkgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmlzWmVybyhtYXRoLmJpZ251bWJlcigwKSkgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmlzWmVybyhtYXRoLmZyYWN0aW9uKDApKSAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmlzWmVybyhtYXRoLmZyYWN0aW9uKDEsMykpICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5pc1plcm8obWF0aC5jb21wbGV4KCcyIC0gNGknKSAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNaZXJvKG1hdGguY29tcGxleCgnMGknKSAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNaZXJvKCcwJykgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNaZXJvKCcyJykgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmlzWmVybyhbMiwgMCwgLTNdJykgICAgICAgICAgIC8vIHJldHVybnMgW2ZhbHNlLCB0cnVlLCBmYWxzZV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGlzTnVtZXJpYywgaXNQb3NpdGl2ZSwgaXNOZWdhdGl2ZSwgaXNJbnRlZ2VyXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEZyYWN0aW9uIHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4ICAgICAgIFZhbHVlIHRvIGJlIHRlc3RlZFxuICAgKiBAcmV0dXJuIHtib29sZWFufSAgUmV0dXJucyB0cnVlIHdoZW4gYHhgIGlzIHplcm8uXG4gICAqICAgICAgICAgICAgICAgICAgICBUaHJvd3MgYW4gZXJyb3IgaW4gY2FzZSBvZiBhbiB1bmtub3duIGRhdGEgdHlwZS5cbiAgICovXG4gIHZhciBpc1plcm8gPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmlzWmVyb051bWJlcixcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4geC5pc1plcm8oKTtcbiAgICB9LFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHgucmUgPT09IDAgJiYgeC5pbSA9PT0gMDtcbiAgICB9LFxuICAgIEZyYWN0aW9uOiBmdW5jdGlvbiBGcmFjdGlvbih4KSB7XG4gICAgICByZXR1cm4geC5kID09PSAxICYmIHgubiA9PT0gMDtcbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgcmV0dXJuIGlzWmVybyh4LnZhbHVlKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgaXNaZXJvKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaXNaZXJvO1xufSk7XG5leHBvcnRzLmNyZWF0ZUlzWmVybyA9IGNyZWF0ZUlzWmVybzsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTnVtZXJpYyA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfbm9vcCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9ub29wXCIpO1xuXG52YXIgbmFtZSA9ICdudW1lcmljJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ251bWJlcicsICc/YmlnbnVtYmVyJywgJz9mcmFjdGlvbiddO1xudmFyIGNyZWF0ZU51bWVyaWMgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgX251bWJlciA9IF9yZWYubnVtYmVyLFxuICAgICAgYmlnbnVtYmVyID0gX3JlZi5iaWdudW1iZXIsXG4gICAgICBmcmFjdGlvbiA9IF9yZWYuZnJhY3Rpb247XG4gIHZhciB2YWxpZElucHV0VHlwZXMgPSB7XG4gICAgc3RyaW5nOiB0cnVlLFxuICAgIG51bWJlcjogdHJ1ZSxcbiAgICBCaWdOdW1iZXI6IHRydWUsXG4gICAgRnJhY3Rpb246IHRydWVcbiAgfTsgLy8gTG9hZCB0aGUgY29udmVyc2lvbiBmdW5jdGlvbnMgZm9yIGVhY2ggb3V0cHV0IHR5cGVcblxuICB2YXIgdmFsaWRPdXRwdXRUeXBlcyA9IHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICByZXR1cm4gX251bWJlcih4KTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogYmlnbnVtYmVyID8gZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBiaWdudW1iZXIoeCk7XG4gICAgfSA6IF9ub29wLm5vQmlnbnVtYmVyLFxuICAgIEZyYWN0aW9uOiBmcmFjdGlvbiA/IGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gZnJhY3Rpb24oeCk7XG4gICAgfSA6IF9ub29wLm5vRnJhY3Rpb25cbiAgfTtcbiAgLyoqXG4gICAqIENvbnZlcnQgYSBudW1lcmljIGlucHV0IHRvIGEgc3BlY2lmaWMgbnVtZXJpYyB0eXBlOiBudW1iZXIsIEJpZ051bWJlciwgb3IgRnJhY3Rpb24uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5udW1lcmljKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLm51bWVyaWMoJzQnKSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDRcbiAgICogICAgbWF0aC5udW1lcmljKCc0JywgJ251bWJlcicpICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA0XG4gICAqICAgIG1hdGgubnVtZXJpYygnNCcsICdCaWdOdW1iZXInKSAgICAgICAgICAgICAgLy8gcmV0dXJucyBCaWdOdW1iZXIgNFxuICAgKiAgICBtYXRoLm51bWVyaWMoJzQnLCAnRnJhY3Rpb24nKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgRnJhY3Rpb24gNFxuICAgKiAgICBtYXRoLm51bWVyaWMoNCwgJ0ZyYWN0aW9uJykgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgRnJhY3Rpb24gNFxuICAgKiAgICBtYXRoLm51bWVyaWMobWF0aC5mcmFjdGlvbigyLCA1KSwgJ251bWJlcicpIC8vIHJldHVybnMgbnVtYmVyIDAuNFxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgbnVtYmVyLCBmcmFjdGlvbiwgYmlnbnVtYmVyLCBzdHJpbmcsIGZvcm1hdFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIH0gdmFsdWVcbiAgICogICAgICAgICAgICAgIEEgbnVtZXJpYyB2YWx1ZSBvciBhIHN0cmluZyBjb250YWluaW5nIGEgbnVtZXJpYyB2YWx1ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3V0cHV0VHlwZVxuICAgKiAgICAgICAgICAgICAgRGVzaXJlZCBudW1lcmljIG91dHB1dCB0eXBlLlxuICAgKiAgICAgICAgICAgICAgQXZhaWxhYmxlIHZhbHVlczogJ251bWJlcicsICdCaWdOdW1iZXInLCBvciAnRnJhY3Rpb24nXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9ufVxuICAgKiAgICAgICAgICAgICAgUmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0aGUgbnVtZXJpYyBpbiB0aGUgcmVxdWVzdGVkIHR5cGVcbiAgICovXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIG51bWVyaWModmFsdWUsIG91dHB1dFR5cGUpIHtcbiAgICB2YXIgaW5wdXRUeXBlID0gKDAsIF9pcy50eXBlT2YpKHZhbHVlKTtcblxuICAgIGlmICghKGlucHV0VHlwZSBpbiB2YWxpZElucHV0VHlwZXMpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCAnICsgdmFsdWUgKyAnIG9mIHR5cGUgXCInICsgaW5wdXRUeXBlICsgJ1wiOyB2YWxpZCBpbnB1dCB0eXBlcyBhcmUgJyArIE9iamVjdC5rZXlzKHZhbGlkSW5wdXRUeXBlcykuam9pbignLCAnKSk7XG4gICAgfVxuXG4gICAgaWYgKCEob3V0cHV0VHlwZSBpbiB2YWxpZE91dHB1dFR5cGVzKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgJyArIHZhbHVlICsgJyB0byB0eXBlIFwiJyArIG91dHB1dFR5cGUgKyAnXCI7IHZhbGlkIG91dHB1dCB0eXBlcyBhcmUgJyArIE9iamVjdC5rZXlzKHZhbGlkT3V0cHV0VHlwZXMpLmpvaW4oJywgJykpO1xuICAgIH1cblxuICAgIGlmIChvdXRwdXRUeXBlID09PSBpbnB1dFR5cGUpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHZhbGlkT3V0cHV0VHlwZXNbb3V0cHV0VHlwZV0odmFsdWUpO1xuICAgIH1cbiAgfTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVOdW1lcmljID0gY3JlYXRlTnVtZXJpYzsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRGVwcmVjYXRlZFR5cGVvZiA9IGV4cG9ydHMuY3JlYXRlVHlwZU9mID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9sb2cgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbG9nXCIpO1xuXG52YXIgbmFtZSA9ICd0eXBlT2YnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVUeXBlT2YgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgdGhlIHR5cGUgb2YgYSB2YXJpYWJsZS5cbiAgICpcbiAgICogRnVuY3Rpb24gYHR5cGVPZmAgcmVjb2duaXplcyB0aGUgZm9sbG93aW5nIHR5cGVzIG9mIG9iamVjdHM6XG4gICAqXG4gICAqIE9iamVjdCAgICAgICAgICAgICAgICAgfCBSZXR1cm5zICAgICAgIHwgRXhhbXBsZVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBudWxsICAgICAgICAgICAgICAgICAgIHwgYCdudWxsJ2AgICAgICB8IGBtYXRoLnR5cGVPZihudWxsKWBcbiAgICogbnVtYmVyICAgICAgICAgICAgICAgICB8IGAnbnVtYmVyJ2AgICAgfCBgbWF0aC50eXBlT2YoMy41KWBcbiAgICogYm9vbGVhbiAgICAgICAgICAgICAgICB8IGAnYm9vbGVhbidgICAgfCBgbWF0aC50eXBlT2YodHJ1ZSlgXG4gICAqIHN0cmluZyAgICAgICAgICAgICAgICAgfCBgJ3N0cmluZydgICAgIHwgYG1hdGgudHlwZU9mKCdoZWxsbyB3b3JsZCcpYFxuICAgKiBBcnJheSAgICAgICAgICAgICAgICAgIHwgYCdBcnJheSdgICAgICB8IGBtYXRoLnR5cGVPZihbMSwgMiwgM10pYFxuICAgKiBEYXRlICAgICAgICAgICAgICAgICAgIHwgYCdEYXRlJ2AgICAgICB8IGBtYXRoLnR5cGVPZihuZXcgRGF0ZSgpKWBcbiAgICogRnVuY3Rpb24gICAgICAgICAgICAgICB8IGAnRnVuY3Rpb24nYCAgfCBgbWF0aC50eXBlT2YoZnVuY3Rpb24gKCkge30pYFxuICAgKiBPYmplY3QgICAgICAgICAgICAgICAgIHwgYCdPYmplY3QnYCAgICB8IGBtYXRoLnR5cGVPZih7YTogMiwgYjogM30pYFxuICAgKiBSZWdFeHAgICAgICAgICAgICAgICAgIHwgYCdSZWdFeHAnYCAgICB8IGBtYXRoLnR5cGVPZigvYSByZWdleHAvKWBcbiAgICogdW5kZWZpbmVkICAgICAgICAgICAgICB8IGAndW5kZWZpbmVkJ2AgfCBgbWF0aC50eXBlT2YodW5kZWZpbmVkKWBcbiAgICogbWF0aC5CaWdOdW1iZXIgICAgICAgICB8IGAnQmlnTnVtYmVyJ2AgfCBgbWF0aC50eXBlT2YobWF0aC5iaWdudW1iZXIoJzIuM2U1MDAnKSlgXG4gICAqIG1hdGguQ2hhaW4gICAgICAgICAgICAgfCBgJ0NoYWluJ2AgICAgIHwgYG1hdGgudHlwZU9mKG1hdGguY2hhaW4oMikpYFxuICAgKiBtYXRoLkNvbXBsZXggICAgICAgICAgIHwgYCdDb21wbGV4J2AgICB8IGBtYXRoLnR5cGVPZihtYXRoLmNvbXBsZXgoMiwgMykpYFxuICAgKiBtYXRoLkZyYWN0aW9uICAgICAgICAgIHwgYCdGcmFjdGlvbidgICB8IGBtYXRoLnR5cGVPZihtYXRoLmZyYWN0aW9uKDEsIDMpKWBcbiAgICogbWF0aC5IZWxwICAgICAgICAgICAgICB8IGAnSGVscCdgICAgICAgfCBgbWF0aC50eXBlT2YobWF0aC5oZWxwKCdzcXJ0JykpYFxuICAgKiBtYXRoLkhlbHAgICAgICAgICAgICAgIHwgYCdIZWxwJ2AgICAgICB8IGBtYXRoLnR5cGVPZihtYXRoLmhlbHAoJ3NxcnQnKSlgXG4gICAqIG1hdGguSW5kZXggICAgICAgICAgICAgfCBgJ0luZGV4J2AgICAgIHwgYG1hdGgudHlwZU9mKG1hdGguaW5kZXgoMSwgMykpYFxuICAgKiBtYXRoLk1hdHJpeCAgICAgICAgICAgIHwgYCdNYXRyaXgnYCAgICB8IGBtYXRoLnR5cGVPZihtYXRoLm1hdHJpeChbWzEsMl0sIFszLCA0XV0pKWBcbiAgICogbWF0aC5SYW5nZSAgICAgICAgICAgICB8IGAnUmFuZ2UnYCAgICAgfCBgbWF0aC50eXBlT2YobWF0aC5yYW5nZSgwLCAxMCkpYFxuICAgKiBtYXRoLlJlc3VsdFNldCAgICAgICAgIHwgYCdSZXN1bHRTZXQnYCB8IGBtYXRoLnR5cGVPZihtYXRoLmV2YWx1YXRlKCdhPTJcXG5iPTMnKSlgXG4gICAqIG1hdGguVW5pdCAgICAgICAgICAgICAgfCBgJ1VuaXQnYCAgICAgIHwgYG1hdGgudHlwZU9mKG1hdGgudW5pdCgnNDUgZGVnJykpYFxuICAgKiBtYXRoLkFjY2Vzc29yTm9kZSAgICAgICAgICAgIHwgYCdBY2Nlc3Nvck5vZGUnYCAgICAgICAgICAgIHwgYG1hdGgudHlwZU9mKG1hdGgucGFyc2UoJ0FbMl0nKSlgXG4gICAqIG1hdGguQXJyYXlOb2RlICAgICAgICAgICAgICAgfCBgJ0FycmF5Tm9kZSdgICAgICAgICAgICAgICAgfCBgbWF0aC50eXBlT2YobWF0aC5wYXJzZSgnWzEsMiwzXScpKWBcbiAgICogbWF0aC5Bc3NpZ25tZW50Tm9kZSAgICAgICAgICB8IGAnQXNzaWdubWVudE5vZGUnYCAgICAgICAgICB8IGBtYXRoLnR5cGVPZihtYXRoLnBhcnNlKCd4PTInKSlgXG4gICAqIG1hdGguQmxvY2tOb2RlICAgICAgICAgICAgICAgfCBgJ0Jsb2NrTm9kZSdgICAgICAgICAgICAgICAgfCBgbWF0aC50eXBlT2YobWF0aC5wYXJzZSgnYT0yOyBiPTMnKSlgXG4gICAqIG1hdGguQ29uZGl0aW9uYWxOb2RlICAgICAgICAgfCBgJ0NvbmRpdGlvbmFsTm9kZSdgICAgICAgICAgfCBgbWF0aC50eXBlT2YobWF0aC5wYXJzZSgneDwwID8gLXggOiB4JykpYFxuICAgKiBtYXRoLkNvbnN0YW50Tm9kZSAgICAgICAgICAgIHwgYCdDb25zdGFudE5vZGUnYCAgICAgICAgICAgIHwgYG1hdGgudHlwZU9mKG1hdGgucGFyc2UoJzIuMycpKWBcbiAgICogbWF0aC5GdW5jdGlvbkFzc2lnbm1lbnROb2RlICB8IGAnRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSdgICB8IGBtYXRoLnR5cGVPZihtYXRoLnBhcnNlKCdmKHgpPXheMicpKWBcbiAgICogbWF0aC5GdW5jdGlvbk5vZGUgICAgICAgICAgICB8IGAnRnVuY3Rpb25Ob2RlJ2AgICAgICAgICAgICB8IGBtYXRoLnR5cGVPZihtYXRoLnBhcnNlKCdzcXJ0KDQpJykpYFxuICAgKiBtYXRoLkluZGV4Tm9kZSAgICAgICAgICAgICAgIHwgYCdJbmRleE5vZGUnYCAgICAgICAgICAgICAgIHwgYG1hdGgudHlwZU9mKG1hdGgucGFyc2UoJ0FbMl0nKS5pbmRleClgXG4gICAqIG1hdGguT2JqZWN0Tm9kZSAgICAgICAgICAgICAgfCBgJ09iamVjdE5vZGUnYCAgICAgICAgICAgICAgfCBgbWF0aC50eXBlT2YobWF0aC5wYXJzZSgne2E6Mn0nKSlgXG4gICAqIG1hdGguUGFyZW50aGVzaXNOb2RlICAgICAgICAgfCBgJ1BhcmVudGhlc2lzTm9kZSdgICAgICAgICAgfCBgbWF0aC50eXBlT2YobWF0aC5wYXJzZSgnKDIrMyknKSlgXG4gICAqIG1hdGguUmFuZ2VOb2RlICAgICAgICAgICAgICAgfCBgJ1JhbmdlTm9kZSdgICAgICAgICAgICAgICAgfCBgbWF0aC50eXBlT2YobWF0aC5wYXJzZSgnMToxMCcpKWBcbiAgICogbWF0aC5TeW1ib2xOb2RlICAgICAgICAgICAgICB8IGAnU3ltYm9sTm9kZSdgICAgICAgICAgICAgICB8IGBtYXRoLnR5cGVPZihtYXRoLnBhcnNlKCd4JykpYFxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgudHlwZU9mKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnR5cGVPZigzLjUpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAnbnVtYmVyJ1xuICAgKiAgICBtYXRoLnR5cGVPZihtYXRoLmNvbXBsZXgoJzItNGknKSkgICAgLy8gcmV0dXJucyAnQ29tcGxleCdcbiAgICogICAgbWF0aC50eXBlT2YobWF0aC51bml0KCc0NSBkZWcnKSkgICAgIC8vIHJldHVybnMgJ1VuaXQnXG4gICAqICAgIG1hdGgudHlwZU9mKCdoZWxsbyB3b3JsZCcpICAgICAgICAgICAvLyByZXR1cm5zICdzdHJpbmcnXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0geCAgICAgVGhlIHZhcmlhYmxlIGZvciB3aGljaCB0byB0ZXN0IHRoZSB0eXBlLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIHR5cGUuIFByaW1pdGl2ZSB0eXBlcyBhcmUgbG93ZXIgY2FzZSxcbiAgICogICAgICAgICAgICAgICAgICBub24tcHJpbWl0aXZlIHR5cGVzIGFyZSB1cHBlci1jYW1lbC1jYXNlLlxuICAgKiAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlICdudW1iZXInLCAnc3RyaW5nJywgJ0FycmF5JywgJ0RhdGUnLlxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICBhbnk6IF9pcy50eXBlT2ZcbiAgfSk7XG59KTsgLy8gRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA2LjAuMC4gRGF0ZTogMjAxOC0xMS0wNlxuXG5leHBvcnRzLmNyZWF0ZVR5cGVPZiA9IGNyZWF0ZVR5cGVPZjtcbnZhciBjcmVhdGVEZXByZWNhdGVkVHlwZW9mID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKCd0eXBlb2YnLCBbXSwgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICgwLCBfbG9nLndhcm5PbmNlKSgnRnVuY3Rpb24gXCJ0eXBlb2ZcIiBoYXMgYmVlbiByZW5hbWVkIHRvIFwidHlwZU9mXCIgaW4gdjYuMC4wLCBwbGVhc2UgdXNlIHRoZSBuZXcgZnVuY3Rpb24gaW5zdGVhZC4nKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gX2lzLnR5cGVPZi5hcHBseShfaXMudHlwZU9mLCBhcmdzKTtcbiAgfTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVEZXByZWNhdGVkVHlwZW9mID0gY3JlYXRlRGVwcmVjYXRlZFR5cGVvZjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUmVwbGFjZXIgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdyZXBsYWNlcic7XG52YXIgZGVwZW5kZW5jaWVzID0gW107XG52YXIgY3JlYXRlUmVwbGFjZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoKSB7XG4gIC8qKlxuICAgKiBTdHJpbmdpZnkgZGF0YSB0eXBlcyBpbnRvIHRoZWlyIEpTT04gcmVwcmVzZW50YXRpb24uXG4gICAqIE1vc3QgZGF0YSB0eXBlcyBjYW4gYmUgc2VyaWFsaXplZCB1c2luZyB0aGVpciBgLnRvSlNPTmAgbWV0aG9kLFxuICAgKiBidXQgbm90IGFsbCwgZm9yIGV4YW1wbGUgdGhlIG51bWJlciBgSW5maW5pdHlgLiBGb3IgdGhlc2UgY2FzZXMgeW91IGhhdmVcbiAgICogdG8gdXNlIHRoZSByZXBsYWNlci4gRXhhbXBsZSB1c2FnZTpcbiAgICpcbiAgICogICAgIEpTT04uc3RyaW5naWZ5KFsyLCBJbmZpbml0eV0sIG1hdGgucmVwbGFjZXIpXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVwbGFjZWQgb2JqZWN0XG4gICAqL1xuICByZXR1cm4gZnVuY3Rpb24gcmVwbGFjZXIoa2V5LCB2YWx1ZSkge1xuICAgIC8vIHRoZSBudW1lcmljIHZhbHVlcyBJbmZpbml0aXksIC1JbmZpbml0eSwgYW5kIE5hTiBjYW5ub3QgYmUgc2VyaWFsaXplZCB0byBKU09OXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgKCFpc0Zpbml0ZSh2YWx1ZSkgfHwgaXNOYU4odmFsdWUpKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbWF0aGpzOiAnbnVtYmVyJyxcbiAgICAgICAgdmFsdWU6IFN0cmluZyh2YWx1ZSlcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xufSk7XG5leHBvcnRzLmNyZWF0ZVJlcGxhY2VyID0gY3JlYXRlUmVwbGFjZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJldml2ZXIgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdyZXZpdmVyJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ2NsYXNzZXMnXTtcbnZhciBjcmVhdGVSZXZpdmVyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIGNsYXNzZXMgPSBfcmVmLmNsYXNzZXM7XG5cbiAgLyoqXG4gICAqIEluc3RhbnRpYXRlIG1hdGhqcyBkYXRhIHR5cGVzIGZyb20gdGhlaXIgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJldml2ZWQgb2JqZWN0XG4gICAqL1xuICByZXR1cm4gZnVuY3Rpb24gcmV2aXZlcihrZXksIHZhbHVlKSB7XG4gICAgdmFyIGNvbnN0cnVjdG9yID0gY2xhc3Nlc1t2YWx1ZSAmJiB2YWx1ZS5tYXRoanNdO1xuXG4gICAgaWYgKGNvbnN0cnVjdG9yICYmIHR5cGVvZiBjb25zdHJ1Y3Rvci5mcm9tSlNPTiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yLmZyb21KU09OKHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH07XG59KTtcbmV4cG9ydHMuY3JlYXRlUmV2aXZlciA9IGNyZWF0ZVJldml2ZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFic051bWJlciA9IGFic051bWJlcjtcbmV4cG9ydHMuYWRkTnVtYmVyID0gYWRkTnVtYmVyO1xuZXhwb3J0cy5zdWJ0cmFjdE51bWJlciA9IHN1YnRyYWN0TnVtYmVyO1xuZXhwb3J0cy5tdWx0aXBseU51bWJlciA9IG11bHRpcGx5TnVtYmVyO1xuZXhwb3J0cy5kaXZpZGVOdW1iZXIgPSBkaXZpZGVOdW1iZXI7XG5leHBvcnRzLnVuYXJ5TWludXNOdW1iZXIgPSB1bmFyeU1pbnVzTnVtYmVyO1xuZXhwb3J0cy51bmFyeVBsdXNOdW1iZXIgPSB1bmFyeVBsdXNOdW1iZXI7XG5leHBvcnRzLmNicnROdW1iZXIgPSBjYnJ0TnVtYmVyO1xuZXhwb3J0cy5jZWlsTnVtYmVyID0gY2VpbE51bWJlcjtcbmV4cG9ydHMuY3ViZU51bWJlciA9IGN1YmVOdW1iZXI7XG5leHBvcnRzLmV4cE51bWJlciA9IGV4cE51bWJlcjtcbmV4cG9ydHMuZXhwbTFOdW1iZXIgPSBleHBtMU51bWJlcjtcbmV4cG9ydHMuZml4TnVtYmVyID0gZml4TnVtYmVyO1xuZXhwb3J0cy5mbG9vck51bWJlciA9IGZsb29yTnVtYmVyO1xuZXhwb3J0cy5nY2ROdW1iZXIgPSBnY2ROdW1iZXI7XG5leHBvcnRzLmxjbU51bWJlciA9IGxjbU51bWJlcjtcbmV4cG9ydHMubG9nTnVtYmVyID0gbG9nTnVtYmVyO1xuZXhwb3J0cy5sb2cxME51bWJlciA9IGxvZzEwTnVtYmVyO1xuZXhwb3J0cy5sb2cyTnVtYmVyID0gbG9nMk51bWJlcjtcbmV4cG9ydHMubG9nMXBOdW1iZXIgPSBsb2cxcE51bWJlcjtcbmV4cG9ydHMubW9kTnVtYmVyID0gbW9kTnVtYmVyO1xuZXhwb3J0cy5udGhSb290TnVtYmVyID0gbnRoUm9vdE51bWJlcjtcbmV4cG9ydHMuc2lnbk51bWJlciA9IHNpZ25OdW1iZXI7XG5leHBvcnRzLnNxcnROdW1iZXIgPSBzcXJ0TnVtYmVyO1xuZXhwb3J0cy5zcXVhcmVOdW1iZXIgPSBzcXVhcmVOdW1iZXI7XG5leHBvcnRzLnhnY2ROdW1iZXIgPSB4Z2NkTnVtYmVyO1xuZXhwb3J0cy5wb3dOdW1iZXIgPSBwb3dOdW1iZXI7XG5leHBvcnRzLnJvdW5kTnVtYmVyID0gcm91bmROdW1iZXI7XG5leHBvcnRzLm5vcm1OdW1iZXIgPSBub3JtTnVtYmVyO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBuMSA9ICdudW1iZXInO1xudmFyIG4yID0gJ251bWJlciwgbnVtYmVyJztcblxuZnVuY3Rpb24gYWJzTnVtYmVyKGEpIHtcbiAgcmV0dXJuIE1hdGguYWJzKGEpO1xufVxuXG5hYnNOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGFkZE51bWJlcihhLCBiKSB7XG4gIHJldHVybiBhICsgYjtcbn1cblxuYWRkTnVtYmVyLnNpZ25hdHVyZSA9IG4yO1xuXG5mdW5jdGlvbiBzdWJ0cmFjdE51bWJlcihhLCBiKSB7XG4gIHJldHVybiBhIC0gYjtcbn1cblxuc3VidHJhY3ROdW1iZXIuc2lnbmF0dXJlID0gbjI7XG5cbmZ1bmN0aW9uIG11bHRpcGx5TnVtYmVyKGEsIGIpIHtcbiAgcmV0dXJuIGEgKiBiO1xufVxuXG5tdWx0aXBseU51bWJlci5zaWduYXR1cmUgPSBuMjtcblxuZnVuY3Rpb24gZGl2aWRlTnVtYmVyKGEsIGIpIHtcbiAgcmV0dXJuIGEgLyBiO1xufVxuXG5kaXZpZGVOdW1iZXIuc2lnbmF0dXJlID0gbjI7XG5cbmZ1bmN0aW9uIHVuYXJ5TWludXNOdW1iZXIoeCkge1xuICByZXR1cm4gLXg7XG59XG5cbnVuYXJ5TWludXNOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIHVuYXJ5UGx1c051bWJlcih4KSB7XG4gIHJldHVybiB4O1xufVxuXG51bmFyeVBsdXNOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGNicnROdW1iZXIoeCkge1xuICByZXR1cm4gKDAsIF9udW1iZXIuY2JydCkoeCk7XG59XG5cbmNicnROdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGNlaWxOdW1iZXIoeCkge1xuICByZXR1cm4gTWF0aC5jZWlsKHgpO1xufVxuXG5jZWlsTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBjdWJlTnVtYmVyKHgpIHtcbiAgcmV0dXJuIHggKiB4ICogeDtcbn1cblxuY3ViZU51bWJlci5zaWduYXR1cmUgPSBuMTtcblxuZnVuY3Rpb24gZXhwTnVtYmVyKHgpIHtcbiAgcmV0dXJuIE1hdGguZXhwKHgpO1xufVxuXG5leHBOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGV4cG0xTnVtYmVyKHgpIHtcbiAgcmV0dXJuICgwLCBfbnVtYmVyLmV4cG0xKSh4KTtcbn1cblxuZXhwbTFOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGZpeE51bWJlcih4KSB7XG4gIHJldHVybiB4ID4gMCA/IE1hdGguZmxvb3IoeCkgOiBNYXRoLmNlaWwoeCk7XG59XG5cbmZpeE51bWJlci5zaWduYXR1cmUgPSBuMTtcblxuZnVuY3Rpb24gZmxvb3JOdW1iZXIoeCkge1xuICByZXR1cm4gTWF0aC5mbG9vcih4KTtcbn1cblxuZmxvb3JOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG4vKipcbiAqIENhbGN1bGF0ZSBnY2QgZm9yIG51bWJlcnNcbiAqIEBwYXJhbSB7bnVtYmVyfSBhXG4gKiBAcGFyYW0ge251bWJlcn0gYlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgZ3JlYXRlc3QgY29tbW9uIGRlbm9taW5hdG9yIG9mIGEgYW5kIGJcbiAqL1xuXG5mdW5jdGlvbiBnY2ROdW1iZXIoYSwgYikge1xuICBpZiAoISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoYSkgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoYikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlcnMgaW4gZnVuY3Rpb24gZ2NkIG11c3QgYmUgaW50ZWdlciBudW1iZXJzJyk7XG4gIH0gLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRXVjbGlkZWFuX2FsZ29yaXRobVxuXG5cbiAgdmFyIHI7XG5cbiAgd2hpbGUgKGIgIT09IDApIHtcbiAgICByID0gYSAlIGI7XG4gICAgYSA9IGI7XG4gICAgYiA9IHI7XG4gIH1cblxuICByZXR1cm4gYSA8IDAgPyAtYSA6IGE7XG59XG5cbmdjZE51bWJlci5zaWduYXR1cmUgPSBuMjtcbi8qKlxuICogQ2FsY3VsYXRlIGxjbSBmb3IgdHdvIG51bWJlcnNcbiAqIEBwYXJhbSB7bnVtYmVyfSBhXG4gKiBAcGFyYW0ge251bWJlcn0gYlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgbGVhc3QgY29tbW9uIG11bHRpcGxlIG9mIGEgYW5kIGJcbiAqL1xuXG5mdW5jdGlvbiBsY21OdW1iZXIoYSwgYikge1xuICBpZiAoISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoYSkgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoYikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlcnMgaW4gZnVuY3Rpb24gbGNtIG11c3QgYmUgaW50ZWdlciBudW1iZXJzJyk7XG4gIH1cblxuICBpZiAoYSA9PT0gMCB8fCBiID09PSAwKSB7XG4gICAgcmV0dXJuIDA7XG4gIH0gLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRXVjbGlkZWFuX2FsZ29yaXRobVxuICAvLyBldmFsdWF0ZSBsY20gaGVyZSBpbmxpbmUgdG8gcmVkdWNlIG92ZXJoZWFkXG5cblxuICB2YXIgdDtcbiAgdmFyIHByb2QgPSBhICogYjtcblxuICB3aGlsZSAoYiAhPT0gMCkge1xuICAgIHQgPSBiO1xuICAgIGIgPSBhICUgdDtcbiAgICBhID0gdDtcbiAgfVxuXG4gIHJldHVybiBNYXRoLmFicyhwcm9kIC8gYSk7XG59XG5cbmxjbU51bWJlci5zaWduYXR1cmUgPSBuMjtcbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBsb2dhcml0aG0gb2YgYSB2YWx1ZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cblxuZnVuY3Rpb24gbG9nTnVtYmVyKHgpIHtcbiAgcmV0dXJuIE1hdGgubG9nKHgpO1xufVxuXG5sb2dOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgMTAtYmFzZSBsb2dhcml0aG0gb2YgYSBudW1iZXJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cblxuZnVuY3Rpb24gbG9nMTBOdW1iZXIoeCkge1xuICByZXR1cm4gKDAsIF9udW1iZXIubG9nMTApKHgpO1xufVxuXG5sb2cxME51bWJlci5zaWduYXR1cmUgPSBuMTtcbi8qKlxuICogQ2FsY3VsYXRlIHRoZSAyLWJhc2UgbG9nYXJpdGhtIG9mIGEgbnVtYmVyXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5cbmZ1bmN0aW9uIGxvZzJOdW1iZXIoeCkge1xuICByZXR1cm4gKDAsIF9udW1iZXIubG9nMikoeCk7XG59XG5cbmxvZzJOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgbmF0dXJhbCBsb2dhcml0aG0gb2YgYSBgbnVtYmVyKzFgXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuXG5mdW5jdGlvbiBsb2cxcE51bWJlcih4KSB7XG4gIHJldHVybiAoMCwgX251bWJlci5sb2cxcCkoeCk7XG59XG5cbmxvZzFwTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIG1vZHVsdXMgb2YgdHdvIG51bWJlcnNcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcGFyYW0ge251bWJlcn0geVxuICogQHJldHVybnMge251bWJlcn0gcmVzXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIG1vZE51bWJlcih4LCB5KSB7XG4gIGlmICh5ID4gMCkge1xuICAgIC8vIFdlIGRvbid0IHVzZSBKYXZhU2NyaXB0J3MgJSBvcGVyYXRvciBoZXJlIGFzIHRoaXMgZG9lc24ndCB3b3JrXG4gICAgLy8gY29ycmVjdGx5IGZvciB4IDwgMCBhbmQgeCA9PT0gMFxuICAgIC8vIHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Nb2R1bG9fb3BlcmF0aW9uXG4gICAgcmV0dXJuIHggLSB5ICogTWF0aC5mbG9vcih4IC8geSk7XG4gIH0gZWxzZSBpZiAoeSA9PT0gMCkge1xuICAgIHJldHVybiB4O1xuICB9IGVsc2Uge1xuICAgIC8vIHkgPCAwXG4gICAgLy8gVE9ETzogaW1wbGVtZW50IG1vZCBmb3IgYSBuZWdhdGl2ZSBkaXZpc29yXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY2FsY3VsYXRlIG1vZCBmb3IgYSBuZWdhdGl2ZSBkaXZpc29yJyk7XG4gIH1cbn1cblxubW9kTnVtYmVyLnNpZ25hdHVyZSA9IG4yO1xuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIG50aCByb290IG9mIGEsIHNvbHZlIHhecm9vdCA9PSBhXG4gKiBodHRwOi8vcm9zZXR0YWNvZGUub3JnL3dpa2kvTnRoX3Jvb3QjSmF2YVNjcmlwdFxuICogQHBhcmFtIHtudW1iZXJ9IGFcbiAqIEBwYXJhbSB7bnVtYmVyfSByb290XG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIG50aFJvb3ROdW1iZXIoYSwgcm9vdCkge1xuICB2YXIgaW52ID0gcm9vdCA8IDA7XG5cbiAgaWYgKGludikge1xuICAgIHJvb3QgPSAtcm9vdDtcbiAgfVxuXG4gIGlmIChyb290ID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdSb290IG11c3QgYmUgbm9uLXplcm8nKTtcbiAgfVxuXG4gIGlmIChhIDwgMCAmJiBNYXRoLmFicyhyb290KSAlIDIgIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jvb3QgbXVzdCBiZSBvZGQgd2hlbiBhIGlzIG5lZ2F0aXZlLicpO1xuICB9IC8vIGVkZ2UgY2FzZXMgemVybyBhbmQgaW5maW5pdHlcblxuXG4gIGlmIChhID09PSAwKSB7XG4gICAgcmV0dXJuIGludiA/IEluZmluaXR5IDogMDtcbiAgfVxuXG4gIGlmICghaXNGaW5pdGUoYSkpIHtcbiAgICByZXR1cm4gaW52ID8gMCA6IGE7XG4gIH1cblxuICB2YXIgeCA9IE1hdGgucG93KE1hdGguYWJzKGEpLCAxIC8gcm9vdCk7IC8vIElmIGEgPCAwLCB3ZSByZXF1aXJlIHRoYXQgcm9vdCBpcyBhbiBvZGQgaW50ZWdlcixcbiAgLy8gc28gKC0xKSBeICgxL3Jvb3QpID0gLTFcblxuICB4ID0gYSA8IDAgPyAteCA6IHg7XG4gIHJldHVybiBpbnYgPyAxIC8geCA6IHg7IC8vIFZlcnkgbmljZSBhbGdvcml0aG0sIGJ1dCBmYWlscyB3aXRoIG50aFJvb3QoLTIsIDMpLlxuICAvLyBOZXd0b24ncyBtZXRob2QgaGFzIHNvbWUgd2VsbC1rbm93biBwcm9ibGVtcyBhdCB0aW1lczpcbiAgLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTmV3dG9uJTI3c19tZXRob2QjRmFpbHVyZV9hbmFseXNpc1xuXG4gIC8qXG4gIGxldCB4ID0gMSAvLyBJbml0aWFsIGd1ZXNzXG4gIGxldCB4UHJldiA9IDFcbiAgbGV0IGkgPSAwXG4gIGNvbnN0IGlNYXggPSAxMDAwMFxuICBkbyB7XG4gICAgY29uc3QgZGVsdGEgPSAoYSAvIE1hdGgucG93KHgsIHJvb3QgLSAxKSAtIHgpIC8gcm9vdFxuICAgIHhQcmV2ID0geFxuICAgIHggPSB4ICsgZGVsdGFcbiAgICBpKytcbiAgfVxuICB3aGlsZSAoeFByZXYgIT09IHggJiYgaSA8IGlNYXgpXG4gICBpZiAoeFByZXYgIT09IHgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Z1bmN0aW9uIG50aFJvb3QgZmFpbGVkIHRvIGNvbnZlcmdlJylcbiAgfVxuICAgcmV0dXJuIGludiA/IDEgLyB4IDogeFxuICAqL1xufVxuXG5udGhSb290TnVtYmVyLnNpZ25hdHVyZSA9IG4yO1xuXG5mdW5jdGlvbiBzaWduTnVtYmVyKHgpIHtcbiAgcmV0dXJuICgwLCBfbnVtYmVyLnNpZ24pKHgpO1xufVxuXG5zaWduTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBzcXJ0TnVtYmVyKHgpIHtcbiAgcmV0dXJuIE1hdGguc3FydCh4KTtcbn1cblxuc3FydE51bWJlci5zaWduYXR1cmUgPSBuMTtcblxuZnVuY3Rpb24gc3F1YXJlTnVtYmVyKHgpIHtcbiAgcmV0dXJuIHggKiB4O1xufVxuXG5zcXVhcmVOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG4vKipcbiAqIENhbGN1bGF0ZSB4Z2NkIGZvciB0d28gbnVtYmVyc1xuICogQHBhcmFtIHtudW1iZXJ9IGFcbiAqIEBwYXJhbSB7bnVtYmVyfSBiXG4gKiBAcmV0dXJuIHtudW1iZXJ9IHJlc3VsdFxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiB4Z2NkTnVtYmVyKGEsIGIpIHtcbiAgLy8gc291cmNlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FeHRlbmRlZF9FdWNsaWRlYW5fYWxnb3JpdGhtXG4gIHZhciB0OyAvLyB1c2VkIHRvIHN3YXAgdHdvIHZhcmlhYmxlc1xuXG4gIHZhciBxOyAvLyBxdW90aWVudFxuXG4gIHZhciByOyAvLyByZW1haW5kZXJcblxuICB2YXIgeCA9IDA7XG4gIHZhciBsYXN0eCA9IDE7XG4gIHZhciB5ID0gMTtcbiAgdmFyIGxhc3R5ID0gMDtcblxuICBpZiAoISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoYSkgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoYikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlcnMgaW4gZnVuY3Rpb24geGdjZCBtdXN0IGJlIGludGVnZXIgbnVtYmVycycpO1xuICB9XG5cbiAgd2hpbGUgKGIpIHtcbiAgICBxID0gTWF0aC5mbG9vcihhIC8gYik7XG4gICAgciA9IGEgLSBxICogYjtcbiAgICB0ID0geDtcbiAgICB4ID0gbGFzdHggLSBxICogeDtcbiAgICBsYXN0eCA9IHQ7XG4gICAgdCA9IHk7XG4gICAgeSA9IGxhc3R5IC0gcSAqIHk7XG4gICAgbGFzdHkgPSB0O1xuICAgIGEgPSBiO1xuICAgIGIgPSByO1xuICB9XG5cbiAgdmFyIHJlcztcblxuICBpZiAoYSA8IDApIHtcbiAgICByZXMgPSBbLWEsIC1sYXN0eCwgLWxhc3R5XTtcbiAgfSBlbHNlIHtcbiAgICByZXMgPSBbYSwgYSA/IGxhc3R4IDogMCwgbGFzdHldO1xuICB9XG5cbiAgcmV0dXJuIHJlcztcbn1cblxueGdjZE51bWJlci5zaWduYXR1cmUgPSBuMjtcbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgcG93ZXIgb2YgeCB0byB5LCB4XnksIGZvciB0d28gbnVtYmVycy5cbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcGFyYW0ge251bWJlcn0geVxuICogQHJldHVybiB7bnVtYmVyfSByZXNcbiAqL1xuXG5mdW5jdGlvbiBwb3dOdW1iZXIoeCwgeSkge1xuICAvLyB4XkluZmluaXR5ID09PSAwIGlmIC0xIDwgeCA8IDFcbiAgLy8gQSByZWFsIG51bWJlciAwIGlzIHJldHVybmVkIGluc3RlYWQgb2YgY29tcGxleCgwKVxuICBpZiAoeCAqIHggPCAxICYmIHkgPT09IEluZmluaXR5IHx8IHggKiB4ID4gMSAmJiB5ID09PSAtSW5maW5pdHkpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHJldHVybiBNYXRoLnBvdyh4LCB5KTtcbn1cblxucG93TnVtYmVyLnNpZ25hdHVyZSA9IG4yO1xuLyoqXG4gKiByb3VuZCBhIG51bWJlciB0byB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGRlY2ltYWxzLCBvciB0byB6ZXJvIGlmIGRlY2ltYWxzIGlzXG4gKiBub3QgcHJvdmlkZWRcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IGRlY2ltYWxzICAgICAgIG51bWJlciBvZiBkZWNpbWFscywgYmV0d2VlbiAwIGFuZCAxNSAoMCBieSBkZWZhdWx0KVxuICogQHJldHVybiB7bnVtYmVyfSByb3VuZGVkVmFsdWVcbiAqL1xuXG5mdW5jdGlvbiByb3VuZE51bWJlcih2YWx1ZSkge1xuICB2YXIgZGVjaW1hbHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IDA7XG4gIHJldHVybiBwYXJzZUZsb2F0KCgwLCBfbnVtYmVyLnRvRml4ZWQpKHZhbHVlLCBkZWNpbWFscykpO1xufVxuXG5yb3VuZE51bWJlci5zaWduYXR1cmUgPSBuMjtcbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBub3JtIG9mIGEgbnVtYmVyLCB0aGUgYWJzb2x1dGUgdmFsdWUuXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5cbmZ1bmN0aW9uIG5vcm1OdW1iZXIoeCkge1xuICByZXR1cm4gTWF0aC5hYnMoeCk7XG59XG5cbm5vcm1OdW1iZXIuc2lnbmF0dXJlID0gbjE7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJpdEFuZE51bWJlciA9IGJpdEFuZE51bWJlcjtcbmV4cG9ydHMuYml0Tm90TnVtYmVyID0gYml0Tm90TnVtYmVyO1xuZXhwb3J0cy5iaXRPck51bWJlciA9IGJpdE9yTnVtYmVyO1xuZXhwb3J0cy5iaXRYb3JOdW1iZXIgPSBiaXRYb3JOdW1iZXI7XG5leHBvcnRzLmxlZnRTaGlmdE51bWJlciA9IGxlZnRTaGlmdE51bWJlcjtcbmV4cG9ydHMucmlnaHRBcml0aFNoaWZ0TnVtYmVyID0gcmlnaHRBcml0aFNoaWZ0TnVtYmVyO1xuZXhwb3J0cy5yaWdodExvZ1NoaWZ0TnVtYmVyID0gcmlnaHRMb2dTaGlmdE51bWJlcjtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgbjEgPSAnbnVtYmVyJztcbnZhciBuMiA9ICdudW1iZXIsIG51bWJlcic7XG5cbmZ1bmN0aW9uIGJpdEFuZE51bWJlcih4LCB5KSB7XG4gIGlmICghKDAsIF9udW1iZXIuaXNJbnRlZ2VyKSh4KSB8fCAhKDAsIF9udW1iZXIuaXNJbnRlZ2VyKSh5KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW50ZWdlcnMgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gYml0QW5kJyk7XG4gIH1cblxuICByZXR1cm4geCAmIHk7XG59XG5cbmJpdEFuZE51bWJlci5zaWduYXR1cmUgPSBuMjtcblxuZnVuY3Rpb24gYml0Tm90TnVtYmVyKHgpIHtcbiAgaWYgKCEoMCwgX251bWJlci5pc0ludGVnZXIpKHgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnRlZ2VyIGV4cGVjdGVkIGluIGZ1bmN0aW9uIGJpdE5vdCcpO1xuICB9XG5cbiAgcmV0dXJuIH54O1xufVxuXG5iaXROb3ROdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGJpdE9yTnVtYmVyKHgsIHkpIHtcbiAgaWYgKCEoMCwgX251bWJlci5pc0ludGVnZXIpKHgpIHx8ICEoMCwgX251bWJlci5pc0ludGVnZXIpKHkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnRlZ2VycyBleHBlY3RlZCBpbiBmdW5jdGlvbiBiaXRPcicpO1xuICB9XG5cbiAgcmV0dXJuIHggfCB5O1xufVxuXG5iaXRPck51bWJlci5zaWduYXR1cmUgPSBuMjtcblxuZnVuY3Rpb24gYml0WG9yTnVtYmVyKHgsIHkpIHtcbiAgaWYgKCEoMCwgX251bWJlci5pc0ludGVnZXIpKHgpIHx8ICEoMCwgX251bWJlci5pc0ludGVnZXIpKHkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnRlZ2VycyBleHBlY3RlZCBpbiBmdW5jdGlvbiBiaXRYb3InKTtcbiAgfVxuXG4gIHJldHVybiB4IF4geTtcbn1cblxuYml0WG9yTnVtYmVyLnNpZ25hdHVyZSA9IG4yO1xuXG5mdW5jdGlvbiBsZWZ0U2hpZnROdW1iZXIoeCwgeSkge1xuICBpZiAoISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoeCkgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoeSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludGVnZXJzIGV4cGVjdGVkIGluIGZ1bmN0aW9uIGxlZnRTaGlmdCcpO1xuICB9XG5cbiAgcmV0dXJuIHggPDwgeTtcbn1cblxubGVmdFNoaWZ0TnVtYmVyLnNpZ25hdHVyZSA9IG4yO1xuXG5mdW5jdGlvbiByaWdodEFyaXRoU2hpZnROdW1iZXIoeCwgeSkge1xuICBpZiAoISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoeCkgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoeSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludGVnZXJzIGV4cGVjdGVkIGluIGZ1bmN0aW9uIHJpZ2h0QXJpdGhTaGlmdCcpO1xuICB9XG5cbiAgcmV0dXJuIHggPj4geTtcbn1cblxucmlnaHRBcml0aFNoaWZ0TnVtYmVyLnNpZ25hdHVyZSA9IG4yO1xuXG5mdW5jdGlvbiByaWdodExvZ1NoaWZ0TnVtYmVyKHgsIHkpIHtcbiAgaWYgKCEoMCwgX251bWJlci5pc0ludGVnZXIpKHgpIHx8ICEoMCwgX251bWJlci5pc0ludGVnZXIpKHkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnRlZ2VycyBleHBlY3RlZCBpbiBmdW5jdGlvbiByaWdodExvZ1NoaWZ0Jyk7XG4gIH1cblxuICByZXR1cm4geCA+Pj4geTtcbn1cblxucmlnaHRMb2dTaGlmdE51bWJlci5zaWduYXR1cmUgPSBuMjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tYmluYXRpb25zTnVtYmVyID0gY29tYmluYXRpb25zTnVtYmVyO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfcHJvZHVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9wcm9kdWN0XCIpO1xuXG5mdW5jdGlvbiBjb21iaW5hdGlvbnNOdW1iZXIobiwgaykge1xuICBpZiAoISgwLCBfbnVtYmVyLmlzSW50ZWdlcikobikgfHwgbiA8IDApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQb3NpdGl2ZSBpbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIGluIGZ1bmN0aW9uIGNvbWJpbmF0aW9ucycpO1xuICB9XG5cbiAgaWYgKCEoMCwgX251bWJlci5pc0ludGVnZXIpKGspIHx8IGsgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUG9zaXRpdmUgaW50ZWdlciB2YWx1ZSBleHBlY3RlZCBpbiBmdW5jdGlvbiBjb21iaW5hdGlvbnMnKTtcbiAgfVxuXG4gIGlmIChrID4gbikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2sgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gbicpO1xuICB9XG5cbiAgdmFyIG5NaW51c2sgPSBuIC0gaztcbiAgdmFyIHByb2RyYW5nZTtcblxuICBpZiAoayA8IG5NaW51c2spIHtcbiAgICBwcm9kcmFuZ2UgPSAoMCwgX3Byb2R1Y3QucHJvZHVjdCkobk1pbnVzayArIDEsIG4pO1xuICAgIHJldHVybiBwcm9kcmFuZ2UgLyAoMCwgX3Byb2R1Y3QucHJvZHVjdCkoMSwgayk7XG4gIH1cblxuICBwcm9kcmFuZ2UgPSAoMCwgX3Byb2R1Y3QucHJvZHVjdCkoayArIDEsIG4pO1xuICByZXR1cm4gcHJvZHJhbmdlIC8gKDAsIF9wcm9kdWN0LnByb2R1Y3QpKDEsIG5NaW51c2spO1xufVxuXG5jb21iaW5hdGlvbnNOdW1iZXIuc2lnbmF0dXJlID0gJ251bWJlciwgbnVtYmVyJzsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucGhpID0gZXhwb3J0cy5lID0gZXhwb3J0cy50YXUgPSBleHBvcnRzLnBpID0gdm9pZCAwO1xudmFyIHBpID0gTWF0aC5QSTtcbmV4cG9ydHMucGkgPSBwaTtcbnZhciB0YXUgPSAyICogTWF0aC5QSTtcbmV4cG9ydHMudGF1ID0gdGF1O1xudmFyIGUgPSBNYXRoLkU7XG5leHBvcnRzLmUgPSBlO1xudmFyIHBoaSA9IDEuNjE4MDMzOTg4NzQ5ODk0ODQ4MjA0NTg2ODM0MzY1NjM4MTE3NzIwMzA5MTc5ODA1NzYyODYyMTM1NDU7XG5leHBvcnRzLnBoaSA9IHBoaTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9hcml0aG1ldGljID0gcmVxdWlyZShcIi4vYXJpdGhtZXRpY1wiKTtcblxuT2JqZWN0LmtleXMoX2FyaXRobWV0aWMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBpZiAoa2V5ID09PSBcImRlZmF1bHRcIiB8fCBrZXkgPT09IFwiX19lc01vZHVsZVwiKSByZXR1cm47XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIF9hcml0aG1ldGljW2tleV07XG4gICAgfVxuICB9KTtcbn0pO1xuXG52YXIgX2JpdHdpc2UgPSByZXF1aXJlKFwiLi9iaXR3aXNlXCIpO1xuXG5PYmplY3Qua2V5cyhfYml0d2lzZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIGlmIChrZXkgPT09IFwiZGVmYXVsdFwiIHx8IGtleSA9PT0gXCJfX2VzTW9kdWxlXCIpIHJldHVybjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gX2JpdHdpc2Vba2V5XTtcbiAgICB9XG4gIH0pO1xufSk7XG5cbnZhciBfY29tYmluYXRpb25zID0gcmVxdWlyZShcIi4vY29tYmluYXRpb25zXCIpO1xuXG5PYmplY3Qua2V5cyhfY29tYmluYXRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgaWYgKGtleSA9PT0gXCJkZWZhdWx0XCIgfHwga2V5ID09PSBcIl9fZXNNb2R1bGVcIikgcmV0dXJuO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiBfY29tYmluYXRpb25zW2tleV07XG4gICAgfVxuICB9KTtcbn0pO1xuXG52YXIgX2NvbnN0YW50cyA9IHJlcXVpcmUoXCIuL2NvbnN0YW50c1wiKTtcblxuT2JqZWN0LmtleXMoX2NvbnN0YW50cykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIGlmIChrZXkgPT09IFwiZGVmYXVsdFwiIHx8IGtleSA9PT0gXCJfX2VzTW9kdWxlXCIpIHJldHVybjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gX2NvbnN0YW50c1trZXldO1xuICAgIH1cbiAgfSk7XG59KTtcblxudmFyIF9sb2dpY2FsID0gcmVxdWlyZShcIi4vbG9naWNhbFwiKTtcblxuT2JqZWN0LmtleXMoX2xvZ2ljYWwpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBpZiAoa2V5ID09PSBcImRlZmF1bHRcIiB8fCBrZXkgPT09IFwiX19lc01vZHVsZVwiKSByZXR1cm47XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIF9sb2dpY2FsW2tleV07XG4gICAgfVxuICB9KTtcbn0pO1xuXG52YXIgX3JlbGF0aW9uYWwgPSByZXF1aXJlKFwiLi9yZWxhdGlvbmFsXCIpO1xuXG5PYmplY3Qua2V5cyhfcmVsYXRpb25hbCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIGlmIChrZXkgPT09IFwiZGVmYXVsdFwiIHx8IGtleSA9PT0gXCJfX2VzTW9kdWxlXCIpIHJldHVybjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gX3JlbGF0aW9uYWxba2V5XTtcbiAgICB9XG4gIH0pO1xufSk7XG5cbnZhciBfcHJvYmFiaWxpdHkgPSByZXF1aXJlKFwiLi9wcm9iYWJpbGl0eVwiKTtcblxuT2JqZWN0LmtleXMoX3Byb2JhYmlsaXR5KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgaWYgKGtleSA9PT0gXCJkZWZhdWx0XCIgfHwga2V5ID09PSBcIl9fZXNNb2R1bGVcIikgcmV0dXJuO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiBfcHJvYmFiaWxpdHlba2V5XTtcbiAgICB9XG4gIH0pO1xufSk7XG5cbnZhciBfdHJpZ29ub21ldHJ5ID0gcmVxdWlyZShcIi4vdHJpZ29ub21ldHJ5XCIpO1xuXG5PYmplY3Qua2V5cyhfdHJpZ29ub21ldHJ5KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgaWYgKGtleSA9PT0gXCJkZWZhdWx0XCIgfHwga2V5ID09PSBcIl9fZXNNb2R1bGVcIikgcmV0dXJuO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiBfdHJpZ29ub21ldHJ5W2tleV07XG4gICAgfVxuICB9KTtcbn0pO1xuXG52YXIgX3V0aWxzID0gcmVxdWlyZShcIi4vdXRpbHNcIik7XG5cbk9iamVjdC5rZXlzKF91dGlscykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIGlmIChrZXkgPT09IFwiZGVmYXVsdFwiIHx8IGtleSA9PT0gXCJfX2VzTW9kdWxlXCIpIHJldHVybjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gX3V0aWxzW2tleV07XG4gICAgfVxuICB9KTtcbn0pOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5ub3ROdW1iZXIgPSBub3ROdW1iZXI7XG5leHBvcnRzLm9yTnVtYmVyID0gb3JOdW1iZXI7XG5leHBvcnRzLnhvck51bWJlciA9IHhvck51bWJlcjtcbmV4cG9ydHMuYW5kTnVtYmVyID0gYW5kTnVtYmVyO1xudmFyIG4xID0gJ251bWJlcic7XG52YXIgbjIgPSAnbnVtYmVyLCBudW1iZXInO1xuXG5mdW5jdGlvbiBub3ROdW1iZXIoeCkge1xuICByZXR1cm4gIXg7XG59XG5cbm5vdE51bWJlci5zaWduYXR1cmUgPSBuMTtcblxuZnVuY3Rpb24gb3JOdW1iZXIoeCwgeSkge1xuICByZXR1cm4gISEoeCB8fCB5KTtcbn1cblxub3JOdW1iZXIuc2lnbmF0dXJlID0gbjI7XG5cbmZ1bmN0aW9uIHhvck51bWJlcih4LCB5KSB7XG4gIHJldHVybiAhIXggIT09ICEheTtcbn1cblxueG9yTnVtYmVyLnNpZ25hdHVyZSA9IG4yO1xuXG5mdW5jdGlvbiBhbmROdW1iZXIoeCwgeSkge1xuICByZXR1cm4gISEoeCAmJiB5KTtcbn1cblxuYW5kTnVtYmVyLnNpZ25hdHVyZSA9IG4yOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5nYW1tYU51bWJlciA9IGdhbW1hTnVtYmVyO1xuZXhwb3J0cy5nYW1tYVAgPSBleHBvcnRzLmdhbW1hRyA9IHZvaWQgMDtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgX3Byb2R1Y3QgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvcHJvZHVjdFwiKTtcblxuZnVuY3Rpb24gZ2FtbWFOdW1iZXIobikge1xuICB2YXIgeDtcblxuICBpZiAoKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShuKSkge1xuICAgIGlmIChuIDw9IDApIHtcbiAgICAgIHJldHVybiBpc0Zpbml0ZShuKSA/IEluZmluaXR5IDogTmFOO1xuICAgIH1cblxuICAgIGlmIChuID4gMTcxKSB7XG4gICAgICByZXR1cm4gSW5maW5pdHk7IC8vIFdpbGwgb3ZlcmZsb3dcbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF9wcm9kdWN0LnByb2R1Y3QpKDEsIG4gLSAxKTtcbiAgfVxuXG4gIGlmIChuIDwgMC41KSB7XG4gICAgcmV0dXJuIE1hdGguUEkgLyAoTWF0aC5zaW4oTWF0aC5QSSAqIG4pICogZ2FtbWFOdW1iZXIoMSAtIG4pKTtcbiAgfVxuXG4gIGlmIChuID49IDE3MS4zNSkge1xuICAgIHJldHVybiBJbmZpbml0eTsgLy8gd2lsbCBvdmVyZmxvd1xuICB9XG5cbiAgaWYgKG4gPiA4NS4wKSB7XG4gICAgLy8gRXh0ZW5kZWQgU3RpcmxpbmcgQXBwcm94XG4gICAgdmFyIHR3b04gPSBuICogbjtcbiAgICB2YXIgdGhyZWVOID0gdHdvTiAqIG47XG4gICAgdmFyIGZvdXJOID0gdGhyZWVOICogbjtcbiAgICB2YXIgZml2ZU4gPSBmb3VyTiAqIG47XG4gICAgcmV0dXJuIE1hdGguc3FydCgyICogTWF0aC5QSSAvIG4pICogTWF0aC5wb3cobiAvIE1hdGguRSwgbikgKiAoMSArIDEgLyAoMTIgKiBuKSArIDEgLyAoMjg4ICogdHdvTikgLSAxMzkgLyAoNTE4NDAgKiB0aHJlZU4pIC0gNTcxIC8gKDI0ODgzMjAgKiBmb3VyTikgKyAxNjM4NzkgLyAoMjA5MDE4ODgwICogZml2ZU4pICsgNTI0NjgxOSAvICg3NTI0Njc5NjgwMCAqIGZpdmVOICogbikpO1xuICB9XG5cbiAgLS1uO1xuICB4ID0gZ2FtbWFQWzBdO1xuXG4gIGZvciAodmFyIGkgPSAxOyBpIDwgZ2FtbWFQLmxlbmd0aDsgKytpKSB7XG4gICAgeCArPSBnYW1tYVBbaV0gLyAobiArIGkpO1xuICB9XG5cbiAgdmFyIHQgPSBuICsgZ2FtbWFHICsgMC41O1xuICByZXR1cm4gTWF0aC5zcXJ0KDIgKiBNYXRoLlBJKSAqIE1hdGgucG93KHQsIG4gKyAwLjUpICogTWF0aC5leHAoLXQpICogeDtcbn1cblxuZ2FtbWFOdW1iZXIuc2lnbmF0dXJlID0gJ251bWJlcic7IC8vIFRPRE86IGNvbW1lbnQgb24gdGhlIHZhcmlhYmxlcyBnIGFuZCBwXG5cbnZhciBnYW1tYUcgPSA0Ljc0MjE4NzU7XG5leHBvcnRzLmdhbW1hRyA9IGdhbW1hRztcbnZhciBnYW1tYVAgPSBbMC45OTk5OTk5OTk5OTk5OTcwOTE4MiwgNTcuMTU2MjM1NjY1ODYyOTIzNTE3LCAtNTkuNTk3OTYwMzU1NDc1NDkxMjQ4LCAxNC4xMzYwOTc5NzQ3NDE3NDcxNzQsIC0wLjQ5MTkxMzgxNjA5NzYyMDE5OTc4LCAwLjMzOTk0NjQ5OTg0ODExODg4Njk5ZS00LCAwLjQ2NTIzNjI4OTI3MDQ4NTc1NjY1ZS00LCAtMC45ODM3NDQ3NTMwNDg3OTU2NDY3N2UtNCwgMC4xNTgwODg3MDMyMjQ5MTI0ODg4NGUtMywgLTAuMjEwMjY0NDQxNzI0MTA0ODgzMTllLTMsIDAuMjE3NDM5NjE4MTE1MjEyNjQzMjBlLTMsIC0wLjE2NDMxODEwNjUzNjc2Mzg5MDIyZS0zLCAwLjg0NDE4MjIzOTgzODUyNzQzMjkzZS00LCAtMC4yNjE5MDgzODQwMTU4MTQwODY3MGUtNCwgMC4zNjg5OTE4MjY1OTUzMTYyMjcwNGUtNV07XG5leHBvcnRzLmdhbW1hUCA9IGdhbW1hUDsiLCJcInVzZSBzdHJpY3RcIjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWNvc051bWJlciA9IGFjb3NOdW1iZXI7XG5leHBvcnRzLmFjb3NoTnVtYmVyID0gYWNvc2hOdW1iZXI7XG5leHBvcnRzLmFjb3ROdW1iZXIgPSBhY290TnVtYmVyO1xuZXhwb3J0cy5hY290aE51bWJlciA9IGFjb3RoTnVtYmVyO1xuZXhwb3J0cy5hY3NjTnVtYmVyID0gYWNzY051bWJlcjtcbmV4cG9ydHMuYWNzY2hOdW1iZXIgPSBhY3NjaE51bWJlcjtcbmV4cG9ydHMuYXNlY051bWJlciA9IGFzZWNOdW1iZXI7XG5leHBvcnRzLmFzZWNoTnVtYmVyID0gYXNlY2hOdW1iZXI7XG5leHBvcnRzLmFzaW5OdW1iZXIgPSBhc2luTnVtYmVyO1xuZXhwb3J0cy5hc2luaE51bWJlciA9IGFzaW5oTnVtYmVyO1xuZXhwb3J0cy5hdGFuTnVtYmVyID0gYXRhbk51bWJlcjtcbmV4cG9ydHMuYXRhbjJOdW1iZXIgPSBhdGFuMk51bWJlcjtcbmV4cG9ydHMuYXRhbmhOdW1iZXIgPSBhdGFuaE51bWJlcjtcbmV4cG9ydHMuY29zTnVtYmVyID0gY29zTnVtYmVyO1xuZXhwb3J0cy5jb3NoTnVtYmVyID0gY29zaE51bWJlcjtcbmV4cG9ydHMuY290TnVtYmVyID0gY290TnVtYmVyO1xuZXhwb3J0cy5jb3RoTnVtYmVyID0gY290aE51bWJlcjtcbmV4cG9ydHMuY3NjTnVtYmVyID0gY3NjTnVtYmVyO1xuZXhwb3J0cy5jc2NoTnVtYmVyID0gY3NjaE51bWJlcjtcbmV4cG9ydHMuc2VjTnVtYmVyID0gc2VjTnVtYmVyO1xuZXhwb3J0cy5zZWNoTnVtYmVyID0gc2VjaE51bWJlcjtcbmV4cG9ydHMuc2luTnVtYmVyID0gc2luTnVtYmVyO1xuZXhwb3J0cy5zaW5oTnVtYmVyID0gc2luaE51bWJlcjtcbmV4cG9ydHMudGFuTnVtYmVyID0gdGFuTnVtYmVyO1xuZXhwb3J0cy50YW5oTnVtYmVyID0gdGFuaE51bWJlcjtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgbjEgPSAnbnVtYmVyJztcbnZhciBuMiA9ICdudW1iZXIsIG51bWJlcic7XG5cbmZ1bmN0aW9uIGFjb3NOdW1iZXIoeCkge1xuICByZXR1cm4gTWF0aC5hY29zKHgpO1xufVxuXG5hY29zTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBhY29zaE51bWJlcih4KSB7XG4gIHJldHVybiAoMCwgX251bWJlci5hY29zaCkoeCk7XG59XG5cbmFjb3NoTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBhY290TnVtYmVyKHgpIHtcbiAgcmV0dXJuIE1hdGguYXRhbigxIC8geCk7XG59XG5cbmFjb3ROdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGFjb3RoTnVtYmVyKHgpIHtcbiAgcmV0dXJuIGlzRmluaXRlKHgpID8gKE1hdGgubG9nKCh4ICsgMSkgLyB4KSArIE1hdGgubG9nKHggLyAoeCAtIDEpKSkgLyAyIDogMDtcbn1cblxuYWNvdGhOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGFjc2NOdW1iZXIoeCkge1xuICByZXR1cm4gTWF0aC5hc2luKDEgLyB4KTtcbn1cblxuYWNzY051bWJlci5zaWduYXR1cmUgPSBuMTtcblxuZnVuY3Rpb24gYWNzY2hOdW1iZXIoeCkge1xuICB2YXIgeEludiA9IDEgLyB4O1xuICByZXR1cm4gTWF0aC5sb2coeEludiArIE1hdGguc3FydCh4SW52ICogeEludiArIDEpKTtcbn1cblxuYWNzY2hOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGFzZWNOdW1iZXIoeCkge1xuICByZXR1cm4gTWF0aC5hY29zKDEgLyB4KTtcbn1cblxuYXNlY051bWJlci5zaWduYXR1cmUgPSBuMTtcblxuZnVuY3Rpb24gYXNlY2hOdW1iZXIoeCkge1xuICB2YXIgeEludiA9IDEgLyB4O1xuICB2YXIgcmV0ID0gTWF0aC5zcXJ0KHhJbnYgKiB4SW52IC0gMSk7XG4gIHJldHVybiBNYXRoLmxvZyhyZXQgKyB4SW52KTtcbn1cblxuYXNlY2hOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGFzaW5OdW1iZXIoeCkge1xuICByZXR1cm4gTWF0aC5hc2luKHgpO1xufVxuXG5hc2luTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBhc2luaE51bWJlcih4KSB7XG4gIHJldHVybiAoMCwgX251bWJlci5hc2luaCkoeCk7XG59XG5cbmFzaW5oTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBhdGFuTnVtYmVyKHgpIHtcbiAgcmV0dXJuIE1hdGguYXRhbih4KTtcbn1cblxuYXRhbk51bWJlci5zaWduYXR1cmUgPSBuMTtcblxuZnVuY3Rpb24gYXRhbjJOdW1iZXIoeSwgeCkge1xuICByZXR1cm4gTWF0aC5hdGFuMih5LCB4KTtcbn1cblxuYXRhbjJOdW1iZXIuc2lnbmF0dXJlID0gbjI7XG5cbmZ1bmN0aW9uIGF0YW5oTnVtYmVyKHgpIHtcbiAgcmV0dXJuICgwLCBfbnVtYmVyLmF0YW5oKSh4KTtcbn1cblxuYXRhbmhOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGNvc051bWJlcih4KSB7XG4gIHJldHVybiBNYXRoLmNvcyh4KTtcbn1cblxuY29zTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBjb3NoTnVtYmVyKHgpIHtcbiAgcmV0dXJuICgwLCBfbnVtYmVyLmNvc2gpKHgpO1xufVxuXG5jb3NoTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBjb3ROdW1iZXIoeCkge1xuICByZXR1cm4gMSAvIE1hdGgudGFuKHgpO1xufVxuXG5jb3ROdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGNvdGhOdW1iZXIoeCkge1xuICB2YXIgZSA9IE1hdGguZXhwKDIgKiB4KTtcbiAgcmV0dXJuIChlICsgMSkgLyAoZSAtIDEpO1xufVxuXG5jb3RoTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBjc2NOdW1iZXIoeCkge1xuICByZXR1cm4gMSAvIE1hdGguc2luKHgpO1xufVxuXG5jc2NOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGNzY2hOdW1iZXIoeCkge1xuICAvLyBjb25zaWRlciB2YWx1ZXMgY2xvc2UgdG8gemVybyAoKy8tKVxuICBpZiAoeCA9PT0gMCkge1xuICAgIHJldHVybiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIE1hdGguYWJzKDIgLyAoTWF0aC5leHAoeCkgLSBNYXRoLmV4cCgteCkpKSAqICgwLCBfbnVtYmVyLnNpZ24pKHgpO1xuICB9XG59XG5cbmNzY2hOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIHNlY051bWJlcih4KSB7XG4gIHJldHVybiAxIC8gTWF0aC5jb3MoeCk7XG59XG5cbnNlY051bWJlci5zaWduYXR1cmUgPSBuMTtcblxuZnVuY3Rpb24gc2VjaE51bWJlcih4KSB7XG4gIHJldHVybiAyIC8gKE1hdGguZXhwKHgpICsgTWF0aC5leHAoLXgpKTtcbn1cblxuc2VjaE51bWJlci5zaWduYXR1cmUgPSBuMTtcblxuZnVuY3Rpb24gc2luTnVtYmVyKHgpIHtcbiAgcmV0dXJuIE1hdGguc2luKHgpO1xufVxuXG5zaW5OdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIHNpbmhOdW1iZXIoeCkge1xuICByZXR1cm4gKDAsIF9udW1iZXIuc2luaCkoeCk7XG59XG5cbnNpbmhOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIHRhbk51bWJlcih4KSB7XG4gIHJldHVybiBNYXRoLnRhbih4KTtcbn1cblxudGFuTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiB0YW5oTnVtYmVyKHgpIHtcbiAgcmV0dXJuICgwLCBfbnVtYmVyLnRhbmgpKHgpO1xufVxuXG50YW5oTnVtYmVyLnNpZ25hdHVyZSA9IG4xOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pc0ludGVnZXJOdW1iZXIgPSBpc0ludGVnZXJOdW1iZXI7XG5leHBvcnRzLmlzTmVnYXRpdmVOdW1iZXIgPSBpc05lZ2F0aXZlTnVtYmVyO1xuZXhwb3J0cy5pc1Bvc2l0aXZlTnVtYmVyID0gaXNQb3NpdGl2ZU51bWJlcjtcbmV4cG9ydHMuaXNaZXJvTnVtYmVyID0gaXNaZXJvTnVtYmVyO1xuZXhwb3J0cy5pc05hTk51bWJlciA9IGlzTmFOTnVtYmVyO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBuMSA9ICdudW1iZXInO1xuXG5mdW5jdGlvbiBpc0ludGVnZXJOdW1iZXIoeCkge1xuICByZXR1cm4gKDAsIF9udW1iZXIuaXNJbnRlZ2VyKSh4KTtcbn1cblxuaXNJbnRlZ2VyTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBpc05lZ2F0aXZlTnVtYmVyKHgpIHtcbiAgcmV0dXJuIHggPCAwO1xufVxuXG5pc05lZ2F0aXZlTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBpc1Bvc2l0aXZlTnVtYmVyKHgpIHtcbiAgcmV0dXJuIHggPiAwO1xufVxuXG5pc1Bvc2l0aXZlTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBpc1plcm9OdW1iZXIoeCkge1xuICByZXR1cm4geCA9PT0gMDtcbn1cblxuaXNaZXJvTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBpc05hTk51bWJlcih4KSB7XG4gIHJldHVybiBOdW1iZXIuaXNOYU4oeCk7XG59XG5cbmlzTmFOTnVtYmVyLnNpZ25hdHVyZSA9IG4xOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVCaWdOdW1iZXJDbGFzcyA9IHZvaWQgMDtcblxudmFyIF9kZWNpbWFsID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiZGVjaW1hbC5qc1wiKSk7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxudmFyIG5hbWUgPSAnQmlnTnVtYmVyJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJz9vbicsICdjb25maWcnXTtcbnZhciBjcmVhdGVCaWdOdW1iZXJDbGFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBvbiA9IF9yZWYub24sXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZztcblxuICB2YXIgQmlnTnVtYmVyID0gX2RlY2ltYWxbXCJkZWZhdWx0XCJdLmNsb25lKHtcbiAgICBwcmVjaXNpb246IGNvbmZpZy5wcmVjaXNpb25cbiAgfSk7XG4gIC8qKlxuICAgKiBBdHRhY2ggdHlwZSBpbmZvcm1hdGlvblxuICAgKi9cblxuXG4gIEJpZ051bWJlci5wcm90b3R5cGUudHlwZSA9ICdCaWdOdW1iZXInO1xuICBCaWdOdW1iZXIucHJvdG90eXBlLmlzQmlnTnVtYmVyID0gdHJ1ZTtcbiAgLyoqXG4gICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgYSBCaWdOdW1iZXIgY29udGFpbmluZ1xuICAgKiB0eXBlIGluZm9ybWF0aW9uXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYSBKU09OIG9iamVjdCBzdHJ1Y3R1cmVkIGFzOlxuICAgKiAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiQmlnTnVtYmVyXCIsIFwidmFsdWVcIjogXCIwLjJcIn1gXG4gICAqL1xuXG4gIEJpZ051bWJlci5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdCaWdOdW1iZXInLFxuICAgICAgdmFsdWU6IHRoaXMudG9TdHJpbmcoKVxuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhIEJpZ051bWJlciBmcm9tIGEgSlNPTiBvYmplY3RcbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIGEgSlNPTiBvYmplY3Qgc3RydWN0dXJlZCBhczpcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJCaWdOdW1iZXJcIiwgXCJ2YWx1ZVwiOiBcIjAuMlwifWBcbiAgICogQHJldHVybiB7QmlnTnVtYmVyfVxuICAgKi9cblxuXG4gIEJpZ051bWJlci5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoanNvbi52YWx1ZSk7XG4gIH07XG5cbiAgaWYgKG9uKSB7XG4gICAgLy8gbGlzdGVuIGZvciBjaGFuZ2VkIGluIHRoZSBjb25maWd1cmF0aW9uLCBhdXRvbWF0aWNhbGx5IGFwcGx5IGNoYW5nZWQgcHJlY2lzaW9uXG4gICAgb24oJ2NvbmZpZycsIGZ1bmN0aW9uIChjdXJyLCBwcmV2KSB7XG4gICAgICBpZiAoY3Vyci5wcmVjaXNpb24gIT09IHByZXYucHJlY2lzaW9uKSB7XG4gICAgICAgIEJpZ051bWJlci5jb25maWcoe1xuICAgICAgICAgIHByZWNpc2lvbjogY3Vyci5wcmVjaXNpb25cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gQmlnTnVtYmVyO1xufSwge1xuICBpc0NsYXNzOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQmlnTnVtYmVyQ2xhc3MgPSBjcmVhdGVCaWdOdW1iZXJDbGFzczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQmlnbnVtYmVyID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBuYW1lID0gJ2JpZ251bWJlcic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdCaWdOdW1iZXInXTtcbnZhciBjcmVhdGVCaWdudW1iZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXI7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIEJpZ051bWJlciwgd2hpY2ggY2FuIHN0b3JlIG51bWJlcnMgd2l0aCBhcmJpdHJhcnkgcHJlY2lzaW9uLlxuICAgKiBXaGVuIGEgbWF0cml4IGlzIHByb3ZpZGVkLCBhbGwgZWxlbWVudHMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gQmlnTnVtYmVyLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguYmlnbnVtYmVyKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAwLjEgKyAwLjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMC4zMDAwMDAwMDAwMDAwMDAwNFxuICAgKiAgICBtYXRoLmJpZ251bWJlcigwLjEpICsgbWF0aC5iaWdudW1iZXIoMC4yKSAgLy8gcmV0dXJucyBCaWdOdW1iZXIgMC4zXG4gICAqXG4gICAqXG4gICAqICAgIDcuMmU1MDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciBJbmZpbml0eVxuICAgKiAgICBtYXRoLmJpZ251bWJlcignNy4yZTUwMCcpICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBCaWdOdW1iZXIgNy4yZTUwMFxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYm9vbGVhbiwgY29tcGxleCwgaW5kZXgsIG1hdHJpeCwgc3RyaW5nLCB1bml0XG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgc3RyaW5nIHwgRnJhY3Rpb24gfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeCB8IGJvb2xlYW4gfCBudWxsfSBbdmFsdWVdICBWYWx1ZSBmb3IgdGhlIGJpZyBudW1iZXIsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgYnkgZGVmYXVsdC5cbiAgICogQHJldHVybnMge0JpZ051bWJlcn0gVGhlIGNyZWF0ZWQgYmlnbnVtYmVyXG4gICAqL1xuICB2YXIgYmlnbnVtYmVyID0gdHlwZWQoJ2JpZ251bWJlcicsIHtcbiAgICAnJzogZnVuY3Rpb24gXygpIHtcbiAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKDApO1xuICAgIH0sXG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkge1xuICAgICAgLy8gY29udmVydCB0byBzdHJpbmcgdG8gcHJldmVudCBlcnJvcnMgaW4gY2FzZSBvZiA+MTUgZGlnaXRzXG4gICAgICByZXR1cm4gbmV3IEJpZ051bWJlcih4ICsgJycpO1xuICAgIH0sXG4gICAgc3RyaW5nOiBmdW5jdGlvbiBzdHJpbmcoeCkge1xuICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoeCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICAvLyB3ZSBhc3N1bWUgYSBCaWdOdW1iZXIgaXMgaW1tdXRhYmxlXG4gICAgICByZXR1cm4geDtcbiAgICB9LFxuICAgIEZyYWN0aW9uOiBmdW5jdGlvbiBGcmFjdGlvbih4KSB7XG4gICAgICByZXR1cm4gbmV3IEJpZ051bWJlcih4Lm4pLmRpdih4LmQpLnRpbWVzKHgucyk7XG4gICAgfSxcbiAgICBcIm51bGxcIjogZnVuY3Rpb24gX251bGwoeCkge1xuICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoMCk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGJpZ251bWJlcik7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGJpZ251bWJlcjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVCaWdudW1iZXIgPSBjcmVhdGVCaWdudW1iZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUJvb2xlYW4gPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIG5hbWUgPSAnYm9vbGVhbic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUJvb2xlYW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBib29sZWFuIG9yIGNvbnZlcnQgYSBzdHJpbmcgb3IgbnVtYmVyIHRvIGEgYm9vbGVhbi5cbiAgICogSW4gY2FzZSBvZiBhIG51bWJlciwgYHRydWVgIGlzIHJldHVybmVkIGZvciBub24temVybyBudW1iZXJzLCBhbmQgYGZhbHNlYCBpblxuICAgKiBjYXNlIG9mIHplcm8uXG4gICAqIFN0cmluZ3MgY2FuIGJlIGAndHJ1ZSdgIG9yIGAnZmFsc2UnYCwgb3IgY2FuIGNvbnRhaW4gYSBudW1iZXIuXG4gICAqIFdoZW4gdmFsdWUgaXMgYSBtYXRyaXgsIGFsbCBlbGVtZW50cyB3aWxsIGJlIGNvbnZlcnRlZCB0byBib29sZWFuLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguYm9vbGVhbih4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5ib29sZWFuKDApICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguYm9vbGVhbigxKSAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguYm9vbGVhbigtMykgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmJvb2xlYW4oJ3RydWUnKSAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguYm9vbGVhbignZmFsc2UnKSAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmJvb2xlYW4oWzEsIDAsIDEsIDFdKSAgICAgLy8gcmV0dXJucyBbdHJ1ZSwgZmFsc2UsIHRydWUsIHRydWVdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiaWdudW1iZXIsIGNvbXBsZXgsIGluZGV4LCBtYXRyaXgsIHN0cmluZywgdW5pdFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBBcnJheSB8IE1hdHJpeCB8IG51bGx9IHZhbHVlICBBIHZhbHVlIG9mIGFueSB0eXBlXG4gICAqIEByZXR1cm4ge2Jvb2xlYW4gfCBBcnJheSB8IE1hdHJpeH0gVGhlIGJvb2xlYW4gdmFsdWVcbiAgICovXG4gIHZhciBib29sID0gdHlwZWQobmFtZSwge1xuICAgICcnOiBmdW5jdGlvbiBfKCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAgXCJib29sZWFuXCI6IGZ1bmN0aW9uIGJvb2xlYW4oeCkge1xuICAgICAgcmV0dXJuIHg7XG4gICAgfSxcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICByZXR1cm4gISF4O1xuICAgIH0sXG4gICAgXCJudWxsXCI6IGZ1bmN0aW9uIF9udWxsKHgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiAheC5pc1plcm8oKTtcbiAgICB9LFxuICAgIHN0cmluZzogZnVuY3Rpb24gc3RyaW5nKHgpIHtcbiAgICAgIC8vIHRyeSBjYXNlIGluc2Vuc2l0aXZlXG4gICAgICB2YXIgbGNhc2UgPSB4LnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIGlmIChsY2FzZSA9PT0gJ3RydWUnKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChsY2FzZSA9PT0gJ2ZhbHNlJykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IC8vIHRlc3Qgd2hldGhlciB2YWx1ZSBpcyBhIHZhbGlkIG51bWJlclxuXG5cbiAgICAgIHZhciBudW0gPSBOdW1iZXIoeCk7XG5cbiAgICAgIGlmICh4ICE9PSAnJyAmJiAhaXNOYU4obnVtKSkge1xuICAgICAgICByZXR1cm4gISFudW07XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbnZlcnQgXCInICsgeCArICdcIiB0byBhIGJvb2xlYW4nKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgYm9vbCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGJvb2w7XG59KTtcbmV4cG9ydHMuY3JlYXRlQm9vbGVhbiA9IGNyZWF0ZUJvb2xlYW47IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNoYWluQ2xhc3MgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3N0cmluZ1wiKTtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnQ2hhaW4nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnP29uJywgJ21hdGgnXTtcbnZhciBjcmVhdGVDaGFpbkNsYXNzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIG9uID0gX3JlZi5vbixcbiAgICAgIG1hdGggPSBfcmVmLm1hdGg7XG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvciBDaGFpblxuICAgKiBXcmFwIGFueSB2YWx1ZSBpbiBhIGNoYWluLCBhbGxvd2luZyB0byBwZXJmb3JtIGNoYWluZWQgb3BlcmF0aW9ucyBvblxuICAgKiB0aGUgdmFsdWUuXG4gICAqXG4gICAqIEFsbCBtZXRob2RzIGF2YWlsYWJsZSBpbiB0aGUgbWF0aC5qcyBsaWJyYXJ5IGNhbiBiZSBjYWxsZWQgdXBvbiB0aGUgY2hhaW4sXG4gICAqIGFuZCB0aGVuIHdpbGwgYmUgZXZhbHVhdGVkIHdpdGggdGhlIHZhbHVlIGl0c2VsZiBhcyBmaXJzdCBhcmd1bWVudC5cbiAgICogVGhlIGNoYWluIGNhbiBiZSBjbG9zZWQgYnkgZXhlY3V0aW5nIGNoYWluLmRvbmUoKSwgd2hpY2ggd2lsbCByZXR1cm5cbiAgICogdGhlIGZpbmFsIHZhbHVlLlxuICAgKlxuICAgKiBUaGUgQ2hhaW4gaGFzIGEgbnVtYmVyIG9mIHNwZWNpYWwgZnVuY3Rpb25zOlxuICAgKiAtIGRvbmUoKSAgICAgICAgICAgICBGaW5hbGl6ZSB0aGUgY2hhaW5lZCBvcGVyYXRpb24gYW5kIHJldHVybiB0aGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgY2hhaW4ncyB2YWx1ZS5cbiAgICogLSB2YWx1ZU9mKCkgICAgICAgICAgVGhlIHNhbWUgYXMgZG9uZSgpXG4gICAqIC0gdG9TdHJpbmcoKSAgICAgICAgIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNoYWluJ3MgdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gW3ZhbHVlXVxuICAgKi9cbiAgZnVuY3Rpb24gQ2hhaW4odmFsdWUpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQ2hhaW4pKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH1cblxuICAgIGlmICgoMCwgX2lzLmlzQ2hhaW4pKHZhbHVlKSkge1xuICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlLnZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBBdHRhY2ggdHlwZSBpbmZvcm1hdGlvblxuICAgKi9cblxuXG4gIENoYWluLnByb3RvdHlwZS50eXBlID0gJ0NoYWluJztcbiAgQ2hhaW4ucHJvdG90eXBlLmlzQ2hhaW4gPSB0cnVlO1xuICAvKipcbiAgICogQ2xvc2UgdGhlIGNoYWluLiBSZXR1cm5zIHRoZSBmaW5hbCB2YWx1ZS5cbiAgICogRG9lcyB0aGUgc2FtZSBhcyBtZXRob2QgdmFsdWVPZigpXG4gICAqIEByZXR1cm5zIHsqfSB2YWx1ZVxuICAgKi9cblxuICBDaGFpbi5wcm90b3R5cGUuZG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgfTtcbiAgLyoqXG4gICAqIENsb3NlIHRoZSBjaGFpbi4gUmV0dXJucyB0aGUgZmluYWwgdmFsdWUuXG4gICAqIERvZXMgdGhlIHNhbWUgYXMgbWV0aG9kIGRvbmUoKVxuICAgKiBAcmV0dXJucyB7Kn0gdmFsdWVcbiAgICovXG5cblxuICBDaGFpbi5wcm90b3R5cGUudmFsdWVPZiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmFsdWUgaW4gdGhlIGNoYWluXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuXG5cbiAgQ2hhaW4ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAoMCwgX3N0cmluZy5mb3JtYXQpKHRoaXMudmFsdWUpO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgY2hhaW5cbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG5cblxuICBDaGFpbi5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdDaGFpbicsXG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZVxuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhIENoYWluIGZyb20gaXRzIEpTT04gcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIEFuIG9iamVjdCBzdHJ1Y3R1cmVkIGxpa2VcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJDaGFpblwiLCB2YWx1ZTogLi4ufWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge0NoYWlufVxuICAgKi9cblxuXG4gIENoYWluLmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICByZXR1cm4gbmV3IENoYWluKGpzb24udmFsdWUpO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgcHJveHkgbWV0aG9kIGZvciB0aGUgY2hhaW5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gICAgICBUaGUgZnVuY3Rpb24gdG8gYmUgcHJveGllZFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIGZuIGlzIG5vIGZ1bmN0aW9uLCBpdCBpcyBzaWxlbnRseSBpZ25vcmVkLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVByb3h5KG5hbWUsIGZuKSB7XG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgQ2hhaW4ucHJvdG90eXBlW25hbWVdID0gY2hhaW5pZnkoZm4pO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIGEgcHJveHkgbWV0aG9kIGZvciB0aGUgY2hhaW5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZXIgICBUaGUgZnVuY3Rpb24gcmVzb2x2aW5nIHdpdGggdGhlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gdG8gYmUgcHJveGllZFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUxhenlQcm94eShuYW1lLCByZXNvbHZlcikge1xuICAgICgwLCBfb2JqZWN0LmxhenkpKENoYWluLnByb3RvdHlwZSwgbmFtZSwgZnVuY3Rpb24gb3V0ZXJSZXNvbHZlcigpIHtcbiAgICAgIHZhciBmbiA9IHJlc29sdmVyKCk7XG5cbiAgICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIGNoYWluaWZ5KGZuKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDsgLy8gaWYgbm90IGEgZnVuY3Rpb24sIGlnbm9yZVxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBNYWtlIGEgZnVuY3Rpb24gY2hhaW5hYmxlXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGZuXG4gICAqIEByZXR1cm4ge0Z1bmN0aW9ufSBjaGFpbiBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGNoYWluaWZ5KGZuKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBhcmdzID0gW3RoaXMudmFsdWVdOyAvLyBgdGhpc2Agd2lsbCBiZSB0aGUgY29udGV4dCBvZiBhIENoYWluIGluc3RhbmNlXG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGFyZ3NbaSArIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IENoYWluKGZuLmFwcGx5KGZuLCBhcmdzKSk7XG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIGEgcHJveHkgZm9yIGEgc2luZ2xlIG1ldGhvZCwgb3IgYW4gb2JqZWN0IHdpdGggbXVsdGlwbGUgbWV0aG9kcy5cbiAgICogRXhhbXBsZSB1c2FnZTpcbiAgICpcbiAgICogICBDaGFpbi5jcmVhdGVQcm94eSgnYWRkJywgZnVuY3Rpb24gYWRkICh4LCB5KSB7Li4ufSlcbiAgICogICBDaGFpbi5jcmVhdGVQcm94eSh7XG4gICAqICAgICBhZGQ6ICAgICAgZnVuY3Rpb24gYWRkICh4LCB5KSB7Li4ufSxcbiAgICogICAgIHN1YnRyYWN0OiBmdW5jdGlvbiBzdWJ0cmFjdCAoeCwgeSkgey4uLn1cbiAgICogICB9XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgT2JqZWN0fSBhcmcwICAgQSBuYW1lIChzdHJpbmcpLCBvciBhbiBvYmplY3Qgd2l0aFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uc1xuICAgKiBAcGFyYW0geyp9IFthcmcxXSAgICAgICAgICAgICAgIEEgZnVuY3Rpb24sIHdoZW4gYXJnMCBpcyBhIG5hbWVcbiAgICovXG5cblxuICBDaGFpbi5jcmVhdGVQcm94eSA9IGZ1bmN0aW9uIChhcmcwLCBhcmcxKSB7XG4gICAgaWYgKHR5cGVvZiBhcmcwID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gY3JlYXRlUHJveHkobmFtZSwgdmFsdWUpXG4gICAgICBjcmVhdGVQcm94eShhcmcwLCBhcmcxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoX25hbWUpIHtcbiAgICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShhcmcwLCBfbmFtZSkgJiYgZXhjbHVkZWROYW1lc1tfbmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNyZWF0ZUxhenlQcm94eShfbmFtZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFyZzBbX25hbWVdO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICAvLyBjcmVhdGVQcm94eSh2YWx1ZXMpXG4gICAgICBmb3IgKHZhciBfbmFtZSBpbiBhcmcwKSB7XG4gICAgICAgIF9sb29wKF9uYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgdmFyIGV4Y2x1ZGVkTmFtZXMgPSB7XG4gICAgZXhwcmVzc2lvbjogdHJ1ZSxcbiAgICBkb2NzOiB0cnVlLFxuICAgIHR5cGU6IHRydWUsXG4gICAgY2xhc3NlczogdHJ1ZSxcbiAgICBqc29uOiB0cnVlLFxuICAgIGVycm9yOiB0cnVlLFxuICAgIGlzQ2hhaW46IHRydWUgLy8gY29uZmxpY3RzIHdpdGggdGhlIHByb3BlcnR5IGlzQ2hhaW4gb2YgYSBDaGFpbiBpbnN0YW5jZVxuXG4gIH07IC8vIGNyZWF0ZSBwcm94eSBmb3IgZXZlcnl0aGluZyB0aGF0IGlzIGluIG1hdGguanNcblxuICBDaGFpbi5jcmVhdGVQcm94eShtYXRoKTsgLy8gcmVnaXN0ZXIgb24gdGhlIGltcG9ydCBldmVudCwgYXV0b21hdGljYWxseSBhZGQgYSBwcm94eSBmb3IgZXZlcnkgaW1wb3J0ZWQgZnVuY3Rpb24uXG5cbiAgaWYgKG9uKSB7XG4gICAgb24oJ2ltcG9ydCcsIGZ1bmN0aW9uIChuYW1lLCByZXNvbHZlciwgcGF0aCkge1xuICAgICAgaWYgKCFwYXRoKSB7XG4gICAgICAgIC8vIGFuIGltcG9ydGVkIGZ1bmN0aW9uIChub3QgYSBkYXRhIHR5cGUgb3Igc29tZXRoaW5nIHNwZWNpYWwpXG4gICAgICAgIGNyZWF0ZUxhenlQcm94eShuYW1lLCByZXNvbHZlcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gQ2hhaW47XG59LCB7XG4gIGlzQ2xhc3M6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDaGFpbkNsYXNzID0gY3JlYXRlQ2hhaW5DbGFzczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ2hhaW4gPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdjaGFpbic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdDaGFpbiddO1xudmFyIGNyZWF0ZUNoYWluID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIENoYWluID0gX3JlZi5DaGFpbjtcblxuICAvKipcbiAgICogV3JhcCBhbnkgdmFsdWUgaW4gYSBjaGFpbiwgYWxsb3dpbmcgdG8gcGVyZm9ybSBjaGFpbmVkIG9wZXJhdGlvbnMgb25cbiAgICogdGhlIHZhbHVlLlxuICAgKlxuICAgKiBBbGwgbWV0aG9kcyBhdmFpbGFibGUgaW4gdGhlIG1hdGguanMgbGlicmFyeSBjYW4gYmUgY2FsbGVkIHVwb24gdGhlIGNoYWluLFxuICAgKiBhbmQgdGhlbiB3aWxsIGJlIGV2YWx1YXRlZCB3aXRoIHRoZSB2YWx1ZSBpdHNlbGYgYXMgZmlyc3QgYXJndW1lbnQuXG4gICAqIFRoZSBjaGFpbiBjYW4gYmUgY2xvc2VkIGJ5IGV4ZWN1dGluZyBgY2hhaW4uZG9uZSgpYCwgd2hpY2ggcmV0dXJuc1xuICAgKiB0aGUgZmluYWwgdmFsdWUuXG4gICAqXG4gICAqIFRoZSBjaGFpbiBoYXMgYSBudW1iZXIgb2Ygc3BlY2lhbCBmdW5jdGlvbnM6XG4gICAqXG4gICAqIC0gYGRvbmUoKWAgICAgIEZpbmFsaXplIHRoZSBjaGFpbiBhbmQgcmV0dXJuIHRoZSBjaGFpbidzIHZhbHVlLlxuICAgKiAtIGB2YWx1ZU9mKClgICBUaGUgc2FtZSBhcyBgZG9uZSgpYFxuICAgKiAtIGB0b1N0cmluZygpYCBFeGVjdXRlcyBgbWF0aC5mb3JtYXQoKWAgb250byB0aGUgY2hhaW4ncyB2YWx1ZSwgcmV0dXJuaW5nXG4gICAqICAgICAgICAgICAgICAgIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmNoYWluKHZhbHVlKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGguY2hhaW4oMylcbiAgICogICAgICAgICAuYWRkKDQpXG4gICAqICAgICAgICAgLnN1YnRyYWN0KDIpXG4gICAqICAgICAgICAgLmRvbmUoKSAgICAgLy8gNVxuICAgKlxuICAgKiAgICAgbWF0aC5jaGFpbiggW1sxLCAyXSwgWzMsIDRdXSApXG4gICAqICAgICAgICAgLnN1YnNldChtYXRoLmluZGV4KDAsIDApLCA4KVxuICAgKiAgICAgICAgIC5tdWx0aXBseSgzKVxuICAgKiAgICAgICAgIC5kb25lKCkgICAgIC8vIFtbMjQsIDZdLCBbOSwgMTJdXVxuICAgKlxuICAgKiBAcGFyYW0geyp9IFt2YWx1ZV0gICBBIHZhbHVlIG9mIGFueSB0eXBlIG9uIHdoaWNoIHRvIHN0YXJ0IGEgY2hhaW5lZCBvcGVyYXRpb24uXG4gICAqIEByZXR1cm4ge21hdGguQ2hhaW59IFRoZSBjcmVhdGVkIGNoYWluXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICcnOiBmdW5jdGlvbiBfKCkge1xuICAgICAgcmV0dXJuIG5ldyBDaGFpbigpO1xuICAgIH0sXG4gICAgYW55OiBmdW5jdGlvbiBhbnkodmFsdWUpIHtcbiAgICAgIHJldHVybiBuZXcgQ2hhaW4odmFsdWUpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlQ2hhaW4gPSBjcmVhdGVDaGFpbjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ29tcGxleENsYXNzID0gdm9pZCAwO1xuXG52YXIgX2NvbXBsZXggPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJjb21wbGV4LmpzXCIpKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIG5hbWUgPSAnQ29tcGxleCc7XG52YXIgZGVwZW5kZW5jaWVzID0gW107XG52YXIgY3JlYXRlQ29tcGxleENsYXNzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKCkge1xuICAvKipcbiAgICogQXR0YWNoIHR5cGUgaW5mb3JtYXRpb25cbiAgICovXG4gIF9jb21wbGV4W1wiZGVmYXVsdFwiXS5wcm90b3R5cGUudHlwZSA9ICdDb21wbGV4JztcbiAgX2NvbXBsZXhbXCJkZWZhdWx0XCJdLnByb3RvdHlwZS5pc0NvbXBsZXggPSB0cnVlO1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29tcGxleCBudW1iZXJcbiAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBhIEpTT04gb2JqZWN0IHN0cnVjdHVyZWQgYXM6XG4gICAqICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJDb21wbGV4XCIsIFwicmVcIjogMiwgXCJpbVwiOiAzfWBcbiAgICovXG5cbiAgX2NvbXBsZXhbXCJkZWZhdWx0XCJdLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hdGhqczogJ0NvbXBsZXgnLFxuICAgICAgcmU6IHRoaXMucmUsXG4gICAgICBpbTogdGhpcy5pbVxuICAgIH07XG4gIH07XG4gIC8qXG4gICAqIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGNvbXBsZXggbnVtYmVyIGluIHBvbGFyIG5vdGF0aW9uXG4gICAqIFRoZSBhbmdsZSBwaGkgd2lsbCBiZSBzZXQgaW4gdGhlIGludGVydmFsIG9mIFstcGksIHBpXS5cbiAgICogQHJldHVybiB7e3I6IG51bWJlciwgcGhpOiBudW1iZXJ9fSBSZXR1cm5zIGFuZCBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIHIgYW5kIHBoaS5cbiAgICovXG5cblxuICBfY29tcGxleFtcImRlZmF1bHRcIl0ucHJvdG90eXBlLnRvUG9sYXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHI6IHRoaXMuYWJzKCksXG4gICAgICBwaGk6IHRoaXMuYXJnKClcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb21wbGV4IG51bWJlcixcbiAgICogd2l0aCBvcHRpb25hbCBmb3JtYXR0aW5nIG9wdGlvbnMuXG4gICAqIEBwYXJhbSB7T2JqZWN0IHwgbnVtYmVyIHwgRnVuY3Rpb259IFtvcHRpb25zXSAgRm9ybWF0dGluZyBvcHRpb25zLiBTZWVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWIvdXRpbHMvbnVtYmVyOmZvcm1hdCBmb3IgYVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uIG9mIHRoZSBhdmFpbGFibGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIF9jb21wbGV4W1wiZGVmYXVsdFwiXS5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgc3RyID0gJyc7XG4gICAgdmFyIGltID0gdGhpcy5pbTtcbiAgICB2YXIgcmUgPSB0aGlzLnJlO1xuICAgIHZhciBzdHJSZSA9ICgwLCBfbnVtYmVyLmZvcm1hdCkodGhpcy5yZSwgb3B0aW9ucyk7XG4gICAgdmFyIHN0ckltID0gKDAsIF9udW1iZXIuZm9ybWF0KSh0aGlzLmltLCBvcHRpb25zKTsgLy8gcm91bmQgZWl0aGVyIHJlIG9yIGltIHdoZW4gc21hbGxlciB0aGFuIHRoZSBjb25maWd1cmVkIHByZWNpc2lvblxuXG4gICAgdmFyIHByZWNpc2lvbiA9ICgwLCBfaXMuaXNOdW1iZXIpKG9wdGlvbnMpID8gb3B0aW9ucyA6IG9wdGlvbnMgPyBvcHRpb25zLnByZWNpc2lvbiA6IG51bGw7XG5cbiAgICBpZiAocHJlY2lzaW9uICE9PSBudWxsKSB7XG4gICAgICB2YXIgZXBzaWxvbiA9IE1hdGgucG93KDEwLCAtcHJlY2lzaW9uKTtcblxuICAgICAgaWYgKE1hdGguYWJzKHJlIC8gaW0pIDwgZXBzaWxvbikge1xuICAgICAgICByZSA9IDA7XG4gICAgICB9XG5cbiAgICAgIGlmIChNYXRoLmFicyhpbSAvIHJlKSA8IGVwc2lsb24pIHtcbiAgICAgICAgaW0gPSAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbSA9PT0gMCkge1xuICAgICAgLy8gcmVhbCB2YWx1ZVxuICAgICAgc3RyID0gc3RyUmU7XG4gICAgfSBlbHNlIGlmIChyZSA9PT0gMCkge1xuICAgICAgLy8gcHVyZWx5IGNvbXBsZXggdmFsdWVcbiAgICAgIGlmIChpbSA9PT0gMSkge1xuICAgICAgICBzdHIgPSAnaSc7XG4gICAgICB9IGVsc2UgaWYgKGltID09PSAtMSkge1xuICAgICAgICBzdHIgPSAnLWknO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RyID0gc3RySW0gKyAnaSc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGNvbXBsZXggdmFsdWVcbiAgICAgIGlmIChpbSA8IDApIHtcbiAgICAgICAgaWYgKGltID09PSAtMSkge1xuICAgICAgICAgIHN0ciA9IHN0clJlICsgJyAtIGknO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0ciA9IHN0clJlICsgJyAtICcgKyBzdHJJbS5zdWJzdHJpbmcoMSkgKyAnaSc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpbSA9PT0gMSkge1xuICAgICAgICAgIHN0ciA9IHN0clJlICsgJyArIGknO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0ciA9IHN0clJlICsgJyArICcgKyBzdHJJbSArICdpJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdHI7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjb21wbGV4IG51bWJlciBmcm9tIHBvbGFyIGNvb3JkaW5hdGVzXG4gICAqXG4gICAqIFVzYWdlOlxuICAgKlxuICAgKiAgICAgQ29tcGxleC5mcm9tUG9sYXIocjogbnVtYmVyLCBwaGk6IG51bWJlcikgOiBDb21wbGV4XG4gICAqICAgICBDb21wbGV4LmZyb21Qb2xhcih7cjogbnVtYmVyLCBwaGk6IG51bWJlcn0pIDogQ29tcGxleFxuICAgKlxuICAgKiBAcGFyYW0geyp9IGFyZ3MuLi5cbiAgICogQHJldHVybiB7Q29tcGxleH1cbiAgICovXG5cblxuICBfY29tcGxleFtcImRlZmF1bHRcIl0uZnJvbVBvbGFyID0gZnVuY3Rpb24gKGFyZ3MpIHtcbiAgICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBhcmcgPSBhcmd1bWVudHNbMF07XG5cbiAgICAgICAgICBpZiAoX3R5cGVvZihhcmcpID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuICgwLCBfY29tcGxleFtcImRlZmF1bHRcIl0pKGFyZyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0lucHV0IGhhcyB0byBiZSBhbiBvYmplY3Qgd2l0aCByIGFuZCBwaGkga2V5cy4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgY2FzZSAyOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIHIgPSBhcmd1bWVudHNbMF07XG4gICAgICAgICAgdmFyIHBoaSA9IGFyZ3VtZW50c1sxXTtcblxuICAgICAgICAgIGlmICgoMCwgX2lzLmlzTnVtYmVyKShyKSkge1xuICAgICAgICAgICAgaWYgKCgwLCBfaXMuaXNVbml0KShwaGkpICYmIHBoaS5oYXNCYXNlKCdBTkdMRScpKSB7XG4gICAgICAgICAgICAgIC8vIGNvbnZlcnQgdW5pdCB0byBhIG51bWJlciBpbiByYWRpYW5zXG4gICAgICAgICAgICAgIHBoaSA9IHBoaS50b051bWJlcigncmFkJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICgoMCwgX2lzLmlzTnVtYmVyKShwaGkpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgX2NvbXBsZXhbXCJkZWZhdWx0XCJdKHtcbiAgICAgICAgICAgICAgICByOiByLFxuICAgICAgICAgICAgICAgIHBoaTogcGhpXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQaGkgaXMgbm90IGEgbnVtYmVyIG5vciBhbiBhbmdsZSB1bml0LicpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSYWRpdXMgciBpcyBub3QgYSBudW1iZXIuJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyBpbiBmdW5jdGlvbiBmcm9tUG9sYXInKTtcbiAgICB9XG4gIH07XG5cbiAgX2NvbXBsZXhbXCJkZWZhdWx0XCJdLnByb3RvdHlwZS52YWx1ZU9mID0gX2NvbXBsZXhbXCJkZWZhdWx0XCJdLnByb3RvdHlwZS50b1N0cmluZztcbiAgLyoqXG4gICAqIENyZWF0ZSBhIENvbXBsZXggbnVtYmVyIGZyb20gYSBKU09OIG9iamVjdFxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQSBKU09OIE9iamVjdCBzdHJ1Y3R1cmVkIGFzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB7XCJtYXRoanNcIjogXCJDb21wbGV4XCIsIFwicmVcIjogMiwgXCJpbVwiOiAzfVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgQWxsIHByb3BlcnRpZXMgYXJlIG9wdGlvbmFsLCBkZWZhdWx0IHZhbHVlc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgZm9yIGByZWAgYW5kIGBpbWAgYXJlIDAuXG4gICAqIEByZXR1cm4ge0NvbXBsZXh9IFJldHVybnMgYSBuZXcgQ29tcGxleCBudW1iZXJcbiAgICovXG5cbiAgX2NvbXBsZXhbXCJkZWZhdWx0XCJdLmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICByZXR1cm4gbmV3IF9jb21wbGV4W1wiZGVmYXVsdFwiXShqc29uKTtcbiAgfTtcbiAgLyoqXG4gICAqIENvbXBhcmUgdHdvIGNvbXBsZXggbnVtYmVycywgYGFgIGFuZCBgYmA6XG4gICAqXG4gICAqIC0gUmV0dXJucyAxIHdoZW4gdGhlIHJlYWwgcGFydCBvZiBgYWAgaXMgbGFyZ2VyIHRoYW4gdGhlIHJlYWwgcGFydCBvZiBgYmBcbiAgICogLSBSZXR1cm5zIC0xIHdoZW4gdGhlIHJlYWwgcGFydCBvZiBgYWAgaXMgc21hbGxlciB0aGFuIHRoZSByZWFsIHBhcnQgb2YgYGJgXG4gICAqIC0gUmV0dXJucyAxIHdoZW4gdGhlIHJlYWwgcGFydHMgYXJlIGVxdWFsXG4gICAqICAgYW5kIHRoZSBpbWFnaW5hcnkgcGFydCBvZiBgYWAgaXMgbGFyZ2VyIHRoYW4gdGhlIGltYWdpbmFyeSBwYXJ0IG9mIGBiYFxuICAgKiAtIFJldHVybnMgLTEgd2hlbiB0aGUgcmVhbCBwYXJ0cyBhcmUgZXF1YWxcbiAgICogICBhbmQgdGhlIGltYWdpbmFyeSBwYXJ0IG9mIGBhYCBpcyBzbWFsbGVyIHRoYW4gdGhlIGltYWdpbmFyeSBwYXJ0IG9mIGBiYFxuICAgKiAtIFJldHVybnMgMCB3aGVuIGJvdGggcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnRzIGFyZSBlcXVhbC5cbiAgICpcbiAgICogQHBhcmFtcyB7Q29tcGxleH0gYVxuICAgKiBAcGFyYW1zIHtDb21wbGV4fSBiXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbXBhcmlzb24gcmVzdWx0OiAtMSwgMCwgb3IgMVxuICAgKi9cblxuXG4gIF9jb21wbGV4W1wiZGVmYXVsdFwiXS5jb21wYXJlID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICBpZiAoYS5yZSA+IGIucmUpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIGlmIChhLnJlIDwgYi5yZSkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIGlmIChhLmltID4gYi5pbSkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgaWYgKGEuaW0gPCBiLmltKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH07XG5cbiAgcmV0dXJuIF9jb21wbGV4W1wiZGVmYXVsdFwiXTtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNvbXBsZXhDbGFzcyA9IGNyZWF0ZUNvbXBsZXhDbGFzczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ29tcGxleCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgbmFtZSA9ICdjb21wbGV4JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ0NvbXBsZXgnXTtcbnZhciBjcmVhdGVDb21wbGV4ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIENvbXBsZXggPSBfcmVmLkNvbXBsZXg7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNvbXBsZXggdmFsdWUgb3IgY29udmVydCBhIHZhbHVlIHRvIGEgY29tcGxleCB2YWx1ZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5jb21wbGV4KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjcmVhdGVzIGEgY29tcGxleCB2YWx1ZSB3aXRoIHplcm9cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXMgcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnQuXG4gICAqICAgICBtYXRoLmNvbXBsZXgocmUgOiBudW1iZXIsIGltIDogc3RyaW5nKSAgIC8vIGNyZWF0ZXMgYSBjb21wbGV4IHZhbHVlIHdpdGggcHJvdmlkZWRcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdmFsdWVzIGZvciByZWFsIGFuZCBpbWFnaW5hcnkgcGFydC5cbiAgICogICAgIG1hdGguY29tcGxleChyZSA6IG51bWJlcikgICAgICAgICAgICAgICAgLy8gY3JlYXRlcyBhIGNvbXBsZXggdmFsdWUgd2l0aCBwcm92aWRlZFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWFsIHZhbHVlIGFuZCB6ZXJvIGltYWdpbmFyeSBwYXJ0LlxuICAgKiAgICAgbWF0aC5jb21wbGV4KGNvbXBsZXggOiBDb21wbGV4KSAgICAgICAgICAvLyBjbG9uZXMgdGhlIHByb3ZpZGVkIGNvbXBsZXggdmFsdWUuXG4gICAqICAgICBtYXRoLmNvbXBsZXgoYXJnIDogc3RyaW5nKSAgICAgICAgICAgICAgIC8vIHBhcnNlcyBhIHN0cmluZyBpbnRvIGEgY29tcGxleCB2YWx1ZS5cbiAgICogICAgIG1hdGguY29tcGxleChhcnJheSA6IEFycmF5KSAgICAgICAgICAgICAgLy8gY29udmVydHMgdGhlIGVsZW1lbnRzIG9mIHRoZSBhcnJheVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvciBtYXRyaXggZWxlbWVudCB3aXNlIGludG8gYVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb21wbGV4IHZhbHVlLlxuICAgKiAgICAgbWF0aC5jb21wbGV4KHtyZTogbnVtYmVyLCBpbTogbnVtYmVyfSkgICAvLyBjcmVhdGVzIGEgY29tcGxleCB2YWx1ZSB3aXRoIHByb3ZpZGVkXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHZhbHVlcyBmb3IgcmVhbCBhbiBpbWFnaW5hcnkgcGFydC5cbiAgICogICAgIG1hdGguY29tcGxleCh7cjogbnVtYmVyLCBwaGk6IG51bWJlcn0pICAgLy8gY3JlYXRlcyBhIGNvbXBsZXggdmFsdWUgd2l0aCBwcm92aWRlZFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwb2xhciBjb29yZGluYXRlc1xuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgY29uc3QgYSA9IG1hdGguY29tcGxleCgzLCAtNCkgICAgIC8vIGEgPSBDb21wbGV4IDMgLSA0aVxuICAgKiAgICBhLnJlID0gNSAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYSA9IENvbXBsZXggNSAtIDRpXG4gICAqICAgIGNvbnN0IGkgPSBhLmltICAgICAgICAgICAgICAgICAgICAvLyBOdW1iZXIgLTRcbiAgICogICAgY29uc3QgYiA9IG1hdGguY29tcGxleCgnMiArIDZpJykgIC8vIENvbXBsZXggMiArIDZpXG4gICAqICAgIGNvbnN0IGMgPSBtYXRoLmNvbXBsZXgoKSAgICAgICAgICAvLyBDb21wbGV4IDAgKyAwaVxuICAgKiAgICBjb25zdCBkID0gbWF0aC5hZGQoYSwgYikgICAgICAgICAgLy8gQ29tcGxleCA1ICsgMmlcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGJpZ251bWJlciwgYm9vbGVhbiwgaW5kZXgsIG1hdHJpeCwgbnVtYmVyLCBzdHJpbmcsIHVuaXRcbiAgICpcbiAgICogQHBhcmFtIHsqIHwgQXJyYXkgfCBNYXRyaXh9IFthcmdzXVxuICAgKiAgICAgICAgICAgIEFyZ3VtZW50cyBzcGVjaWZ5aW5nIHRoZSByZWFsIGFuZCBpbWFnaW5hcnkgcGFydCBvZiB0aGUgY29tcGxleCBudW1iZXJcbiAgICogQHJldHVybiB7Q29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBSZXR1cm5zIGEgY29tcGxleCB2YWx1ZVxuICAgKi9cbiAgdmFyIGNvbXBsZXggPSB0eXBlZCgnY29tcGxleCcsIHtcbiAgICAnJzogZnVuY3Rpb24gXygpIHtcbiAgICAgIHJldHVybiBDb21wbGV4LlpFUk87XG4gICAgfSxcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoeCwgMCk7XG4gICAgfSxcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIocmUsIGltKSB7XG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgocmUsIGltKTtcbiAgICB9LFxuICAgIC8vIFRPRE86IHRoaXMgc2lnbmF0dXJlIHNob3VsZCBiZSByZWR1bmRhbnRcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIocmUsIGltKSB7XG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgocmUudG9OdW1iZXIoKSwgaW0udG9OdW1iZXIoKSk7XG4gICAgfSxcbiAgICBGcmFjdGlvbjogZnVuY3Rpb24gRnJhY3Rpb24oeCkge1xuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgudmFsdWVPZigpLCAwKTtcbiAgICB9LFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHguY2xvbmUoKTtcbiAgICB9LFxuICAgIHN0cmluZzogZnVuY3Rpb24gc3RyaW5nKHgpIHtcbiAgICAgIHJldHVybiBDb21wbGV4KHgpOyAvLyBmb3IgZXhhbXBsZSAnMiArIDNpJ1xuICAgIH0sXG4gICAgXCJudWxsXCI6IGZ1bmN0aW9uIF9udWxsKHgpIHtcbiAgICAgIHJldHVybiBDb21wbGV4KDApO1xuICAgIH0sXG4gICAgT2JqZWN0OiBmdW5jdGlvbiBPYmplY3QoeCkge1xuICAgICAgaWYgKCdyZScgaW4geCAmJiAnaW0nIGluIHgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgucmUsIHguaW0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoJ3InIGluIHggJiYgJ3BoaScgaW4geCB8fCAnYWJzJyBpbiB4ICYmICdhcmcnIGluIHgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgpO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIG9iamVjdCB3aXRoIHByb3BlcnRpZXMgKHJlIGFuZCBpbSkgb3IgKHIgYW5kIHBoaSkgb3IgKGFicyBhbmQgYXJnKScpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBjb21wbGV4KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY29tcGxleDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb21wbGV4ID0gY3JlYXRlQ29tcGxleDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRnJhY3Rpb25DbGFzcyA9IHZvaWQgMDtcblxudmFyIF9mcmFjdGlvbiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcImZyYWN0aW9uLmpzXCIpKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG52YXIgbmFtZSA9ICdGcmFjdGlvbic7XG52YXIgZGVwZW5kZW5jaWVzID0gW107XG52YXIgY3JlYXRlRnJhY3Rpb25DbGFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uICgpIHtcbiAgLyoqXG4gICAqIEF0dGFjaCB0eXBlIGluZm9ybWF0aW9uXG4gICAqL1xuICBfZnJhY3Rpb25bXCJkZWZhdWx0XCJdLnByb3RvdHlwZS50eXBlID0gJ0ZyYWN0aW9uJztcbiAgX2ZyYWN0aW9uW1wiZGVmYXVsdFwiXS5wcm90b3R5cGUuaXNGcmFjdGlvbiA9IHRydWU7XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIGEgRnJhY3Rpb24gY29udGFpbmluZyB0eXBlIGluZm9ybWF0aW9uXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYSBKU09OIG9iamVjdCBzdHJ1Y3R1cmVkIGFzOlxuICAgKiAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiRnJhY3Rpb25cIiwgXCJuXCI6IDMsIFwiZFwiOiA4fWBcbiAgICovXG5cbiAgX2ZyYWN0aW9uW1wiZGVmYXVsdFwiXS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdGcmFjdGlvbicsXG4gICAgICBuOiB0aGlzLnMgKiB0aGlzLm4sXG4gICAgICBkOiB0aGlzLmRcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogSW5zdGFudGlhdGUgYSBGcmFjdGlvbiBmcm9tIGEgSlNPTiBvYmplY3RcbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIGEgSlNPTiBvYmplY3Qgc3RydWN0dXJlZCBhczpcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJGcmFjdGlvblwiLCBcIm5cIjogMywgXCJkXCI6IDh9YFxuICAgKiBAcmV0dXJuIHtCaWdOdW1iZXJ9XG4gICAqL1xuXG5cbiAgX2ZyYWN0aW9uW1wiZGVmYXVsdFwiXS5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgcmV0dXJuIG5ldyBfZnJhY3Rpb25bXCJkZWZhdWx0XCJdKGpzb24pO1xuICB9O1xuXG4gIHJldHVybiBfZnJhY3Rpb25bXCJkZWZhdWx0XCJdO1xufSwge1xuICBpc0NsYXNzOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRnJhY3Rpb25DbGFzcyA9IGNyZWF0ZUZyYWN0aW9uQ2xhc3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUZyYWN0aW9uID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBuYW1lID0gJ2ZyYWN0aW9uJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ0ZyYWN0aW9uJ107XG52YXIgY3JlYXRlRnJhY3Rpb24gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgRnJhY3Rpb24gPSBfcmVmLkZyYWN0aW9uO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBmcmFjdGlvbiBjb252ZXJ0IGEgdmFsdWUgdG8gYSBmcmFjdGlvbi5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKiAgICAgbWF0aC5mcmFjdGlvbihudW1lcmF0b3IsIGRlbm9taW5hdG9yKVxuICAgKiAgICAgbWF0aC5mcmFjdGlvbih7bjogbnVtZXJhdG9yLCBkOiBkZW5vbWluYXRvcn0pXG4gICAqICAgICBtYXRoLmZyYWN0aW9uKG1hdHJpeDogQXJyYXkgfCBNYXRyaXgpICAgICAgICAgVHVybiBhbGwgbWF0cml4IGVudHJpZXNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRvIGZyYWN0aW9uc1xuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGguZnJhY3Rpb24oMSwgMylcbiAgICogICAgIG1hdGguZnJhY3Rpb24oJzIvMycpXG4gICAqICAgICBtYXRoLmZyYWN0aW9uKHtuOiAyLCBkOiAzfSlcbiAgICogICAgIG1hdGguZnJhY3Rpb24oWzAuMiwgMC4yNSwgMS4yNV0pXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiaWdudW1iZXIsIG51bWJlciwgc3RyaW5nLCB1bml0XG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgc3RyaW5nIHwgRnJhY3Rpb24gfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0gW2FyZ3NdXG4gICAqICAgICAgICAgICAgQXJndW1lbnRzIHNwZWNpZnlpbmcgdGhlIG51bWVyYXRvciBhbmQgZGVub21pbmF0b3Igb2ZcbiAgICogICAgICAgICAgICB0aGUgZnJhY3Rpb25cbiAgICogQHJldHVybiB7RnJhY3Rpb24gfCBBcnJheSB8IE1hdHJpeH0gUmV0dXJucyBhIGZyYWN0aW9uXG4gICAqL1xuICB2YXIgZnJhY3Rpb24gPSB0eXBlZCgnZnJhY3Rpb24nLCB7XG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkge1xuICAgICAgaWYgKCFpc0Zpbml0ZSh4KSB8fCBpc05hTih4KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoeCArICcgY2Fubm90IGJlIHJlcHJlc2VudGVkIGFzIGEgZnJhY3Rpb24nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbih4KTtcbiAgICB9LFxuICAgIHN0cmluZzogZnVuY3Rpb24gc3RyaW5nKHgpIHtcbiAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24oeCk7XG4gICAgfSxcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIobnVtZXJhdG9yLCBkZW5vbWluYXRvcikge1xuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbihudW1lcmF0b3IsIGRlbm9taW5hdG9yKTtcbiAgICB9LFxuICAgIFwibnVsbFwiOiBmdW5jdGlvbiBfbnVsbCh4KSB7XG4gICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKDApO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbih4LnRvU3RyaW5nKCkpO1xuICAgIH0sXG4gICAgRnJhY3Rpb246IGZ1bmN0aW9uIEZyYWN0aW9uKHgpIHtcbiAgICAgIHJldHVybiB4OyAvLyBmcmFjdGlvbnMgYXJlIGltbXV0YWJsZVxuICAgIH0sXG4gICAgT2JqZWN0OiBmdW5jdGlvbiBPYmplY3QoeCkge1xuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbih4KTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgZnJhY3Rpb24pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBmcmFjdGlvbjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVGcmFjdGlvbiA9IGNyZWF0ZUZyYWN0aW9uOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVEZW5zZU1hdHJpeENsYXNzID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgX0RpbWVuc2lvbkVycm9yID0gcmVxdWlyZShcIi4uLy4uL2Vycm9yL0RpbWVuc2lvbkVycm9yXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnRGVuc2VNYXRyaXgnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnTWF0cml4J107XG52YXIgY3JlYXRlRGVuc2VNYXRyaXhDbGFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBNYXRyaXggPSBfcmVmLk1hdHJpeDtcblxuICAvKipcbiAgICogRGVuc2UgTWF0cml4IGltcGxlbWVudGF0aW9uLiBBIHJlZ3VsYXIsIGRlbnNlIG1hdHJpeCwgc3VwcG9ydGluZyBtdWx0aS1kaW1lbnNpb25hbCBtYXRyaWNlcy4gVGhpcyBpcyB0aGUgZGVmYXVsdCBtYXRyaXggdHlwZS5cbiAgICogQGNsYXNzIERlbnNlTWF0cml4XG4gICAqL1xuICBmdW5jdGlvbiBEZW5zZU1hdHJpeChkYXRhLCBkYXRhdHlwZSkge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBEZW5zZU1hdHJpeCkpIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGF0eXBlICYmICEoMCwgX2lzLmlzU3RyaW5nKShkYXRhdHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBkYXRhdHlwZTogJyArIGRhdGF0eXBlKTtcbiAgICB9XG5cbiAgICBpZiAoKDAsIF9pcy5pc01hdHJpeCkoZGF0YSkpIHtcbiAgICAgIC8vIGNoZWNrIGRhdGEgaXMgYSBEZW5zZU1hdHJpeFxuICAgICAgaWYgKGRhdGEudHlwZSA9PT0gJ0RlbnNlTWF0cml4Jykge1xuICAgICAgICAvLyBjbG9uZSBkYXRhICYgc2l6ZVxuICAgICAgICB0aGlzLl9kYXRhID0gKDAsIF9vYmplY3QuY2xvbmUpKGRhdGEuX2RhdGEpO1xuICAgICAgICB0aGlzLl9zaXplID0gKDAsIF9vYmplY3QuY2xvbmUpKGRhdGEuX3NpemUpO1xuICAgICAgICB0aGlzLl9kYXRhdHlwZSA9IGRhdGF0eXBlIHx8IGRhdGEuX2RhdGF0eXBlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gYnVpbGQgZGF0YSBmcm9tIGV4aXN0aW5nIG1hdHJpeFxuICAgICAgICB0aGlzLl9kYXRhID0gZGF0YS50b0FycmF5KCk7XG4gICAgICAgIHRoaXMuX3NpemUgPSBkYXRhLnNpemUoKTtcbiAgICAgICAgdGhpcy5fZGF0YXR5cGUgPSBkYXRhdHlwZSB8fCBkYXRhLl9kYXRhdHlwZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRhdGEgJiYgKDAsIF9pcy5pc0FycmF5KShkYXRhLmRhdGEpICYmICgwLCBfaXMuaXNBcnJheSkoZGF0YS5zaXplKSkge1xuICAgICAgLy8gaW5pdGlhbGl6ZSBmaWVsZHMgZnJvbSBKU09OIHJlcHJlc2VudGF0aW9uXG4gICAgICB0aGlzLl9kYXRhID0gZGF0YS5kYXRhO1xuICAgICAgdGhpcy5fc2l6ZSA9IGRhdGEuc2l6ZTsgLy8gdmVyaWZ5IHRoZSBkaW1lbnNpb25zIG9mIHRoZSBhcnJheVxuXG4gICAgICAoMCwgX2FycmF5LnZhbGlkYXRlKSh0aGlzLl9kYXRhLCB0aGlzLl9zaXplKTtcbiAgICAgIHRoaXMuX2RhdGF0eXBlID0gZGF0YXR5cGUgfHwgZGF0YS5kYXRhdHlwZTtcbiAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNBcnJheSkoZGF0YSkpIHtcbiAgICAgIC8vIHJlcGxhY2UgbmVzdGVkIE1hdHJpY2VzIHdpdGggQXJyYXlzXG4gICAgICB0aGlzLl9kYXRhID0gcHJlcHJvY2VzcyhkYXRhKTsgLy8gZ2V0IHRoZSBkaW1lbnNpb25zIG9mIHRoZSBhcnJheVxuXG4gICAgICB0aGlzLl9zaXplID0gKDAsIF9hcnJheS5hcnJheVNpemUpKHRoaXMuX2RhdGEpOyAvLyB2ZXJpZnkgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIGFycmF5LCBUT0RPOiBjb21wdXRlIHNpemUgd2hpbGUgcHJvY2Vzc2luZyBhcnJheVxuXG4gICAgICAoMCwgX2FycmF5LnZhbGlkYXRlKSh0aGlzLl9kYXRhLCB0aGlzLl9zaXplKTsgLy8gZGF0YSB0eXBlIHVua25vd25cblxuICAgICAgdGhpcy5fZGF0YXR5cGUgPSBkYXRhdHlwZTtcbiAgICB9IGVsc2UgaWYgKGRhdGEpIHtcbiAgICAgIC8vIHVuc3VwcG9ydGVkIHR5cGVcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vuc3VwcG9ydGVkIHR5cGUgb2YgZGF0YSAoJyArICgwLCBfaXMudHlwZU9mKShkYXRhKSArICcpJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIG5vdGhpbmcgcHJvdmlkZWRcbiAgICAgIHRoaXMuX2RhdGEgPSBbXTtcbiAgICAgIHRoaXMuX3NpemUgPSBbMF07XG4gICAgICB0aGlzLl9kYXRhdHlwZSA9IGRhdGF0eXBlO1xuICAgIH1cbiAgfVxuXG4gIERlbnNlTWF0cml4LnByb3RvdHlwZSA9IG5ldyBNYXRyaXgoKTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBEZW5zZU1hdHJpeFxuICAgKi9cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUuY3JlYXRlRGVuc2VNYXRyaXggPSBmdW5jdGlvbiAoZGF0YSwgZGF0YXR5cGUpIHtcbiAgICByZXR1cm4gbmV3IERlbnNlTWF0cml4KGRhdGEsIGRhdGF0eXBlKTtcbiAgfTtcbiAgLyoqXG4gICAqIEF0dGFjaCB0eXBlIGluZm9ybWF0aW9uXG4gICAqL1xuXG5cbiAgRGVuc2VNYXRyaXgucHJvdG90eXBlLnR5cGUgPSAnRGVuc2VNYXRyaXgnO1xuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUuaXNEZW5zZU1hdHJpeCA9IHRydWU7XG4gIC8qKlxuICAgKiBHZXQgdGhlIG1hdHJpeCB0eXBlXG4gICAqXG4gICAqIFVzYWdlOlxuICAgKiAgICBjb25zdCBtYXRyaXhUeXBlID0gbWF0cml4LmdldERhdGFUeXBlKCkgIC8vIHJldHJpZXZlcyB0aGUgbWF0cml4IHR5cGVcbiAgICpcbiAgICogQG1lbWJlck9mIERlbnNlTWF0cml4XG4gICAqIEByZXR1cm4ge3N0cmluZ30gICB0eXBlIGluZm9ybWF0aW9uOyBpZiBtdWx0aXBsZSB0eXBlcyBhcmUgZm91bmQgZnJvbSB0aGUgTWF0cml4LCBpdCB3aWxsIHJldHVybiBcIm1peGVkXCJcbiAgICovXG5cbiAgRGVuc2VNYXRyaXgucHJvdG90eXBlLmdldERhdGFUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAoMCwgX2FycmF5LmdldEFycmF5RGF0YVR5cGUpKHRoaXMuX2RhdGEsIF9pcy50eXBlT2YpO1xuICB9O1xuICAvKipcbiAgICogR2V0IHRoZSBzdG9yYWdlIGZvcm1hdCB1c2VkIGJ5IHRoZSBtYXRyaXguXG4gICAqXG4gICAqIFVzYWdlOlxuICAgKiAgICAgY29uc3QgZm9ybWF0ID0gbWF0cml4LnN0b3JhZ2UoKSAgLy8gcmV0cmlldmUgc3RvcmFnZSBmb3JtYXRcbiAgICpcbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEByZXR1cm4ge3N0cmluZ30gICAgICAgICAgIFRoZSBzdG9yYWdlIGZvcm1hdC5cbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUuc3RvcmFnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gJ2RlbnNlJztcbiAgfTtcbiAgLyoqXG4gICAqIEdldCB0aGUgZGF0YXR5cGUgb2YgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBtYXRyaXguXG4gICAqXG4gICAqIFVzYWdlOlxuICAgKiAgICAgY29uc3QgZm9ybWF0ID0gbWF0cml4LmRhdGF0eXBlKCkgICAvLyByZXRyaWV2ZSBtYXRyaXggZGF0YXR5cGVcbiAgICpcbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEByZXR1cm4ge3N0cmluZ30gICAgICAgICAgIFRoZSBkYXRhdHlwZS5cbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUuZGF0YXR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGF0eXBlO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IERlbnNlTWF0cml4XG4gICAqIEBtZW1iZXJvZiBEZW5zZU1hdHJpeFxuICAgKiBAcGFyYW0ge0FycmF5fSBkYXRhXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGF0YXR5cGVdXG4gICAqL1xuXG5cbiAgRGVuc2VNYXRyaXgucHJvdG90eXBlLmNyZWF0ZSA9IGZ1bmN0aW9uIChkYXRhLCBkYXRhdHlwZSkge1xuICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoZGF0YSwgZGF0YXR5cGUpO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgc3Vic2V0IG9mIHRoZSBtYXRyaXgsIG9yIHJlcGxhY2UgYSBzdWJzZXQgb2YgdGhlIG1hdHJpeC5cbiAgICpcbiAgICogVXNhZ2U6XG4gICAqICAgICBjb25zdCBzdWJzZXQgPSBtYXRyaXguc3Vic2V0KGluZGV4KSAgICAgICAgICAgICAgIC8vIHJldHJpZXZlIHN1YnNldFxuICAgKiAgICAgY29uc3QgdmFsdWUgPSBtYXRyaXguc3Vic2V0KGluZGV4LCByZXBsYWNlbWVudCkgICAvLyByZXBsYWNlIHN1YnNldFxuICAgKlxuICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXhcbiAgICogQHBhcmFtIHtJbmRleH0gaW5kZXhcbiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeCB8ICp9IFtyZXBsYWNlbWVudF1cbiAgICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlPTBdICAgICAgRGVmYXVsdCB2YWx1ZSwgZmlsbGVkIGluIG9uIG5ldyBlbnRyaWVzIHdoZW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hdHJpeCBpcyByZXNpemVkLiBJZiBub3QgcHJvdmlkZWQsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBtYXRyaXggZWxlbWVudHMgd2lsbCBiZSBmaWxsZWQgd2l0aCB6ZXJvcy5cbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUuc3Vic2V0ID0gZnVuY3Rpb24gKGluZGV4LCByZXBsYWNlbWVudCwgZGVmYXVsdFZhbHVlKSB7XG4gICAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHJldHVybiBfZ2V0KHRoaXMsIGluZGV4KTtcbiAgICAgIC8vIGludGVudGlvbmFsIGZhbGwgdGhyb3VnaFxuXG4gICAgICBjYXNlIDI6XG4gICAgICBjYXNlIDM6XG4gICAgICAgIHJldHVybiBfc2V0KHRoaXMsIGluZGV4LCByZXBsYWNlbWVudCwgZGVmYXVsdFZhbHVlKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzJyk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogR2V0IGEgc2luZ2xlIGVsZW1lbnQgZnJvbSB0aGUgbWF0cml4LlxuICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJbXX0gaW5kZXggICBaZXJvLWJhc2VkIGluZGV4XG4gICAqIEByZXR1cm4geyp9IHZhbHVlXG4gICAqL1xuXG5cbiAgRGVuc2VNYXRyaXgucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChpbmRleCkge1xuICAgIGlmICghKDAsIF9pcy5pc0FycmF5KShpbmRleCkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IGV4cGVjdGVkJyk7XG4gICAgfVxuXG4gICAgaWYgKGluZGV4Lmxlbmd0aCAhPT0gdGhpcy5fc2l6ZS5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3IoaW5kZXgubGVuZ3RoLCB0aGlzLl9zaXplLmxlbmd0aCk7XG4gICAgfSAvLyBjaGVjayBpbmRleFxuXG5cbiAgICBmb3IgKHZhciB4ID0gMDsgeCA8IGluZGV4Lmxlbmd0aDsgeCsrKSB7XG4gICAgICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKGluZGV4W3hdLCB0aGlzLl9zaXplW3hdKTtcbiAgICB9XG5cbiAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBpbmRleC5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICB2YXIgaW5kZXhJID0gaW5kZXhbaV07XG4gICAgICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKGluZGV4SSwgZGF0YS5sZW5ndGgpO1xuICAgICAgZGF0YSA9IGRhdGFbaW5kZXhJXTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfTtcbiAgLyoqXG4gICAqIFJlcGxhY2UgYSBzaW5nbGUgZWxlbWVudCBpbiB0aGUgbWF0cml4LlxuICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJbXX0gaW5kZXggICBaZXJvLWJhc2VkIGluZGV4XG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXSAgICAgICAgRGVmYXVsdCB2YWx1ZSwgZmlsbGVkIGluIG9uIG5ldyBlbnRyaWVzIHdoZW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hdHJpeCBpcyByZXNpemVkLiBJZiBub3QgcHJvdmlkZWQsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBtYXRyaXggZWxlbWVudHMgd2lsbCBiZSBsZWZ0IHVuZGVmaW5lZC5cbiAgICogQHJldHVybiB7RGVuc2VNYXRyaXh9IHNlbGZcbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGluZGV4LCB2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XG4gICAgaWYgKCEoMCwgX2lzLmlzQXJyYXkpKGluZGV4KSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgZXhwZWN0ZWQnKTtcbiAgICB9XG5cbiAgICBpZiAoaW5kZXgubGVuZ3RoIDwgdGhpcy5fc2l6ZS5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3IoaW5kZXgubGVuZ3RoLCB0aGlzLl9zaXplLmxlbmd0aCwgJzwnKTtcbiAgICB9XG5cbiAgICB2YXIgaSwgaWksIGluZGV4STsgLy8gZW5sYXJnZSBtYXRyaXggd2hlbiBuZWVkZWRcblxuICAgIHZhciBzaXplID0gaW5kZXgubWFwKGZ1bmN0aW9uIChpKSB7XG4gICAgICByZXR1cm4gaSArIDE7XG4gICAgfSk7XG5cbiAgICBfZml0KHRoaXMsIHNpemUsIGRlZmF1bHRWYWx1ZSk7IC8vIHRyYXZlcnNlIG92ZXIgdGhlIGRpbWVuc2lvbnNcblxuXG4gICAgdmFyIGRhdGEgPSB0aGlzLl9kYXRhO1xuXG4gICAgZm9yIChpID0gMCwgaWkgPSBpbmRleC5sZW5ndGggLSAxOyBpIDwgaWk7IGkrKykge1xuICAgICAgaW5kZXhJID0gaW5kZXhbaV07XG4gICAgICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKGluZGV4SSwgZGF0YS5sZW5ndGgpO1xuICAgICAgZGF0YSA9IGRhdGFbaW5kZXhJXTtcbiAgICB9IC8vIHNldCBuZXcgdmFsdWVcblxuXG4gICAgaW5kZXhJID0gaW5kZXhbaW5kZXgubGVuZ3RoIC0gMV07XG4gICAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShpbmRleEksIGRhdGEubGVuZ3RoKTtcbiAgICBkYXRhW2luZGV4SV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIHN1Ym1hdHJpeCBvZiB0aGlzIG1hdHJpeFxuICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXhcbiAgICogQHBhcmFtIHtEZW5zZU1hdHJpeH0gbWF0cml4XG4gICAqIEBwYXJhbSB7SW5kZXh9IGluZGV4ICAgWmVyby1iYXNlZCBpbmRleFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9nZXQobWF0cml4LCBpbmRleCkge1xuICAgIGlmICghKDAsIF9pcy5pc0luZGV4KShpbmRleCkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgaW5kZXgnKTtcbiAgICB9XG5cbiAgICB2YXIgaXNTY2FsYXIgPSBpbmRleC5pc1NjYWxhcigpO1xuXG4gICAgaWYgKGlzU2NhbGFyKSB7XG4gICAgICAvLyByZXR1cm4gYSBzY2FsYXJcbiAgICAgIHJldHVybiBtYXRyaXguZ2V0KGluZGV4Lm1pbigpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdmFsaWRhdGUgZGltZW5zaW9uc1xuICAgICAgdmFyIHNpemUgPSBpbmRleC5zaXplKCk7XG5cbiAgICAgIGlmIChzaXplLmxlbmd0aCAhPT0gbWF0cml4Ll9zaXplLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKHNpemUubGVuZ3RoLCBtYXRyaXguX3NpemUubGVuZ3RoKTtcbiAgICAgIH0gLy8gdmFsaWRhdGUgaWYgYW55IG9mIHRoZSByYW5nZXMgaW4gdGhlIGluZGV4IGlzIG91dCBvZiByYW5nZVxuXG5cbiAgICAgIHZhciBtaW4gPSBpbmRleC5taW4oKTtcbiAgICAgIHZhciBtYXggPSBpbmRleC5tYXgoKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gbWF0cml4Ll9zaXplLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShtaW5baV0sIG1hdHJpeC5fc2l6ZVtpXSk7XG4gICAgICAgICgwLCBfYXJyYXkudmFsaWRhdGVJbmRleCkobWF4W2ldLCBtYXRyaXguX3NpemVbaV0pO1xuICAgICAgfSAvLyByZXRyaWV2ZSBzdWJtYXRyaXhcbiAgICAgIC8vIFRPRE86IG1vcmUgZWZmaWNpZW50IHdoZW4gY3JlYXRpbmcgYW4gZW1wdHkgbWF0cml4IGFuZCBzZXR0aW5nIF9kYXRhIGFuZCBfc2l6ZSBtYW51YWxseVxuXG5cbiAgICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoX2dldFN1Ym1hdHJpeChtYXRyaXguX2RhdGEsIGluZGV4LCBzaXplLmxlbmd0aCwgMCksIG1hdHJpeC5fZGF0YXR5cGUpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmVjdXJzaXZlbHkgZ2V0IGEgc3VibWF0cml4IG9mIGEgbXVsdGkgZGltZW5zaW9uYWwgbWF0cml4LlxuICAgKiBJbmRleCBpcyBub3QgY2hlY2tlZCBmb3IgY29ycmVjdCBudW1iZXIgb3IgbGVuZ3RoIG9mIGRpbWVuc2lvbnMuXG4gICAqIEBtZW1iZXJvZiBEZW5zZU1hdHJpeFxuICAgKiBAcGFyYW0ge0FycmF5fSBkYXRhXG4gICAqIEBwYXJhbSB7SW5kZXh9IGluZGV4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkaW1zICAgVG90YWwgbnVtYmVyIG9mIGRpbWVuc2lvbnNcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRpbSAgICBDdXJyZW50IGRpbWVuc2lvblxuICAgKiBAcmV0dXJuIHtBcnJheX0gc3VibWF0cml4XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX2dldFN1Ym1hdHJpeChkYXRhLCBpbmRleCwgZGltcywgZGltKSB7XG4gICAgdmFyIGxhc3QgPSBkaW0gPT09IGRpbXMgLSAxO1xuICAgIHZhciByYW5nZSA9IGluZGV4LmRpbWVuc2lvbihkaW0pO1xuXG4gICAgaWYgKGxhc3QpIHtcbiAgICAgIHJldHVybiByYW5nZS5tYXAoZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShpLCBkYXRhLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiBkYXRhW2ldO1xuICAgICAgfSkudmFsdWVPZigpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmFuZ2UubWFwKGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICgwLCBfYXJyYXkudmFsaWRhdGVJbmRleCkoaSwgZGF0YS5sZW5ndGgpO1xuICAgICAgICB2YXIgY2hpbGQgPSBkYXRhW2ldO1xuICAgICAgICByZXR1cm4gX2dldFN1Ym1hdHJpeChjaGlsZCwgaW5kZXgsIGRpbXMsIGRpbSArIDEpO1xuICAgICAgfSkudmFsdWVPZigpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmVwbGFjZSBhIHN1Ym1hdHJpeCBpbiB0aGlzIG1hdHJpeFxuICAgKiBJbmRleGVzIGFyZSB6ZXJvLWJhc2VkLlxuICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXhcbiAgICogQHBhcmFtIHtEZW5zZU1hdHJpeH0gbWF0cml4XG4gICAqIEBwYXJhbSB7SW5kZXh9IGluZGV4XG4gICAqIEBwYXJhbSB7RGVuc2VNYXRyaXggfCBBcnJheSB8ICp9IHN1Ym1hdHJpeFxuICAgKiBAcGFyYW0geyp9IGRlZmF1bHRWYWx1ZSAgICAgICAgICBEZWZhdWx0IHZhbHVlLCBmaWxsZWQgaW4gb24gbmV3IGVudHJpZXMgd2hlblxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWF0cml4IGlzIHJlc2l6ZWQuXG4gICAqIEByZXR1cm4ge0RlbnNlTWF0cml4fSBtYXRyaXhcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBfc2V0KG1hdHJpeCwgaW5kZXgsIHN1Ym1hdHJpeCwgZGVmYXVsdFZhbHVlKSB7XG4gICAgaWYgKCFpbmRleCB8fCBpbmRleC5pc0luZGV4ICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGluZGV4Jyk7XG4gICAgfSAvLyBnZXQgaW5kZXggc2l6ZSBhbmQgY2hlY2sgd2hldGhlciB0aGUgaW5kZXggY29udGFpbnMgYSBzaW5nbGUgdmFsdWVcblxuXG4gICAgdmFyIGlTaXplID0gaW5kZXguc2l6ZSgpO1xuICAgIHZhciBpc1NjYWxhciA9IGluZGV4LmlzU2NhbGFyKCk7IC8vIGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiB0aGUgc3VibWF0cml4LCBhbmQgY29udmVydCBpdCBpbnRvIGFuIEFycmF5IGlmIG5lZWRlZFxuXG4gICAgdmFyIHNTaXplO1xuXG4gICAgaWYgKCgwLCBfaXMuaXNNYXRyaXgpKHN1Ym1hdHJpeCkpIHtcbiAgICAgIHNTaXplID0gc3VibWF0cml4LnNpemUoKTtcbiAgICAgIHN1Ym1hdHJpeCA9IHN1Ym1hdHJpeC52YWx1ZU9mKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNTaXplID0gKDAsIF9hcnJheS5hcnJheVNpemUpKHN1Ym1hdHJpeCk7XG4gICAgfVxuXG4gICAgaWYgKGlzU2NhbGFyKSB7XG4gICAgICAvLyBzZXQgYSBzY2FsYXJcbiAgICAgIC8vIGNoZWNrIHdoZXRoZXIgc3VibWF0cml4IGlzIGEgc2NhbGFyXG4gICAgICBpZiAoc1NpemUubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1NjYWxhciBleHBlY3RlZCcpO1xuICAgICAgfVxuXG4gICAgICBtYXRyaXguc2V0KGluZGV4Lm1pbigpLCBzdWJtYXRyaXgsIGRlZmF1bHRWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHNldCBhIHN1Ym1hdHJpeFxuICAgICAgLy8gdmFsaWRhdGUgZGltZW5zaW9uc1xuICAgICAgaWYgKGlTaXplLmxlbmd0aCA8IG1hdHJpeC5fc2l6ZS5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihpU2l6ZS5sZW5ndGgsIG1hdHJpeC5fc2l6ZS5sZW5ndGgsICc8Jyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzU2l6ZS5sZW5ndGggPCBpU2l6ZS5sZW5ndGgpIHtcbiAgICAgICAgLy8gY2FsY3VsYXRlIG51bWJlciBvZiBtaXNzaW5nIG91dGVyIGRpbWVuc2lvbnNcbiAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICB2YXIgb3V0ZXIgPSAwO1xuXG4gICAgICAgIHdoaWxlIChpU2l6ZVtpXSA9PT0gMSAmJiBzU2l6ZVtpXSA9PT0gMSkge1xuICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlIChpU2l6ZVtpXSA9PT0gMSkge1xuICAgICAgICAgIG91dGVyKys7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9IC8vIHVuc3F1ZWV6ZSBib3RoIG91dGVyIGFuZCBpbm5lciBkaW1lbnNpb25zXG5cblxuICAgICAgICBzdWJtYXRyaXggPSAoMCwgX2FycmF5LnVuc3F1ZWV6ZSkoc3VibWF0cml4LCBpU2l6ZS5sZW5ndGgsIG91dGVyLCBzU2l6ZSk7XG4gICAgICB9IC8vIGNoZWNrIHdoZXRoZXIgdGhlIHNpemUgb2YgdGhlIHN1Ym1hdHJpeCBtYXRjaGVzIHRoZSBpbmRleCBzaXplXG5cblxuICAgICAgaWYgKCEoMCwgX29iamVjdC5kZWVwU3RyaWN0RXF1YWwpKGlTaXplLCBzU2l6ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihpU2l6ZSwgc1NpemUsICc+Jyk7XG4gICAgICB9IC8vIGVubGFyZ2UgbWF0cml4IHdoZW4gbmVlZGVkXG5cblxuICAgICAgdmFyIHNpemUgPSBpbmRleC5tYXgoKS5tYXAoZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgcmV0dXJuIGkgKyAxO1xuICAgICAgfSk7XG5cbiAgICAgIF9maXQobWF0cml4LCBzaXplLCBkZWZhdWx0VmFsdWUpOyAvLyBpbnNlcnQgdGhlIHN1YiBtYXRyaXhcblxuXG4gICAgICB2YXIgZGltcyA9IGlTaXplLmxlbmd0aDtcbiAgICAgIHZhciBkaW0gPSAwO1xuXG4gICAgICBfc2V0U3VibWF0cml4KG1hdHJpeC5fZGF0YSwgaW5kZXgsIHN1Ym1hdHJpeCwgZGltcywgZGltKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWF0cml4O1xuICB9XG4gIC8qKlxuICAgKiBSZXBsYWNlIGEgc3VibWF0cml4IG9mIGEgbXVsdGkgZGltZW5zaW9uYWwgbWF0cml4LlxuICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXhcbiAgICogQHBhcmFtIHtBcnJheX0gZGF0YVxuICAgKiBAcGFyYW0ge0luZGV4fSBpbmRleFxuICAgKiBAcGFyYW0ge0FycmF5fSBzdWJtYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRpbXMgICBUb3RhbCBudW1iZXIgb2YgZGltZW5zaW9uc1xuICAgKiBAcGFyYW0ge251bWJlcn0gZGltXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX3NldFN1Ym1hdHJpeChkYXRhLCBpbmRleCwgc3VibWF0cml4LCBkaW1zLCBkaW0pIHtcbiAgICB2YXIgbGFzdCA9IGRpbSA9PT0gZGltcyAtIDE7XG4gICAgdmFyIHJhbmdlID0gaW5kZXguZGltZW5zaW9uKGRpbSk7XG5cbiAgICBpZiAobGFzdCkge1xuICAgICAgcmFuZ2UuZm9yRWFjaChmdW5jdGlvbiAoZGF0YUluZGV4LCBzdWJJbmRleCkge1xuICAgICAgICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKGRhdGFJbmRleCk7XG4gICAgICAgIGRhdGFbZGF0YUluZGV4XSA9IHN1Ym1hdHJpeFtzdWJJbmRleFswXV07XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmFuZ2UuZm9yRWFjaChmdW5jdGlvbiAoZGF0YUluZGV4LCBzdWJJbmRleCkge1xuICAgICAgICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKGRhdGFJbmRleCk7XG5cbiAgICAgICAgX3NldFN1Ym1hdHJpeChkYXRhW2RhdGFJbmRleF0sIGluZGV4LCBzdWJtYXRyaXhbc3ViSW5kZXhbMF1dLCBkaW1zLCBkaW0gKyAxKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmVzaXplIHRoZSBtYXRyaXggdG8gdGhlIGdpdmVuIHNpemUuIFJldHVybnMgYSBjb3B5IG9mIHRoZSBtYXRyaXggd2hlblxuICAgKiBgY29weT10cnVlYCwgb3RoZXJ3aXNlIHJldHVybiB0aGUgbWF0cml4IGl0c2VsZiAocmVzaXplIGluIHBsYWNlKS5cbiAgICpcbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEBwYXJhbSB7bnVtYmVyW119IHNpemUgICAgICAgICAgIFRoZSBuZXcgc2l6ZSB0aGUgbWF0cml4IHNob3VsZCBoYXZlLlxuICAgKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWU9MF0gICAgICBEZWZhdWx0IHZhbHVlLCBmaWxsZWQgaW4gb24gbmV3IGVudHJpZXMuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIG5vdCBwcm92aWRlZCwgdGhlIG1hdHJpeCBlbGVtZW50cyB3aWxsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIGZpbGxlZCB3aXRoIHplcm9zLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjb3B5XSAgICAgICAgICBSZXR1cm4gYSByZXNpemVkIGNvcHkgb2YgdGhlIG1hdHJpeFxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgICAgICBUaGUgcmVzaXplZCBtYXRyaXhcbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHNpemUsIGRlZmF1bHRWYWx1ZSwgY29weSkge1xuICAgIC8vIHZhbGlkYXRlIGFyZ3VtZW50c1xuICAgIGlmICghKDAsIF9pcy5pc0FycmF5KShzaXplKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgZXhwZWN0ZWQnKTtcbiAgICB9IC8vIG1hdHJpeCB0byByZXNpemVcblxuXG4gICAgdmFyIG0gPSBjb3B5ID8gdGhpcy5jbG9uZSgpIDogdGhpczsgLy8gcmVzaXplIG1hdHJpeFxuXG4gICAgcmV0dXJuIF9yZXNpemUobSwgc2l6ZSwgZGVmYXVsdFZhbHVlKTtcbiAgfTtcblxuICBmdW5jdGlvbiBfcmVzaXplKG1hdHJpeCwgc2l6ZSwgZGVmYXVsdFZhbHVlKSB7XG4gICAgLy8gY2hlY2sgc2l6ZVxuICAgIGlmIChzaXplLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gZmlyc3QgdmFsdWUgaW4gbWF0cml4XG4gICAgICB2YXIgdiA9IG1hdHJpeC5fZGF0YTsgLy8gZ28gZGVlcFxuXG4gICAgICB3aGlsZSAoKDAsIF9pcy5pc0FycmF5KSh2KSkge1xuICAgICAgICB2ID0gdlswXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHY7XG4gICAgfSAvLyByZXNpemUgbWF0cml4XG5cblxuICAgIG1hdHJpeC5fc2l6ZSA9IHNpemUuc2xpY2UoMCk7IC8vIGNvcHkgdGhlIGFycmF5XG5cbiAgICBtYXRyaXguX2RhdGEgPSAoMCwgX2FycmF5LnJlc2l6ZSkobWF0cml4Ll9kYXRhLCBtYXRyaXguX3NpemUsIGRlZmF1bHRWYWx1ZSk7IC8vIHJldHVybiBtYXRyaXhcblxuICAgIHJldHVybiBtYXRyaXg7XG4gIH1cbiAgLyoqXG4gICAqIFJlc2hhcGUgdGhlIG1hdHJpeCB0byB0aGUgZ2l2ZW4gc2l6ZS4gUmV0dXJucyBhIGNvcHkgb2YgdGhlIG1hdHJpeCB3aGVuXG4gICAqIGBjb3B5PXRydWVgLCBvdGhlcndpc2UgcmV0dXJuIHRoZSBtYXRyaXggaXRzZWxmIChyZXNoYXBlIGluIHBsYWNlKS5cbiAgICpcbiAgICogTk9URTogVGhpcyBtaWdodCBiZSBiZXR0ZXIgc3VpdGVkIHRvIGNvcHkgYnkgZGVmYXVsdCwgaW5zdGVhZCBvZiBtb2RpZnlpbmdcbiAgICogICAgICAgaW4gcGxhY2UuIEZvciBub3csIGl0IG9wZXJhdGVzIGluIHBsYWNlIHRvIHJlbWFpbiBjb25zaXN0ZW50IHdpdGhcbiAgICogICAgICAgcmVzaXplKCkuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBEZW5zZU1hdHJpeFxuICAgKiBAcGFyYW0ge251bWJlcltdfSBzaXplICAgICAgICAgICBUaGUgbmV3IHNpemUgdGhlIG1hdHJpeCBzaG91bGQgaGF2ZS5cbiAgICogQHBhcmFtIHtib29sZWFufSBbY29weV0gICAgICAgICAgUmV0dXJuIGEgcmVzaGFwZWQgY29weSBvZiB0aGUgbWF0cml4XG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgIFRoZSByZXNoYXBlZCBtYXRyaXhcbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUucmVzaGFwZSA9IGZ1bmN0aW9uIChzaXplLCBjb3B5KSB7XG4gICAgdmFyIG0gPSBjb3B5ID8gdGhpcy5jbG9uZSgpIDogdGhpcztcbiAgICBtLl9kYXRhID0gKDAsIF9hcnJheS5yZXNoYXBlKShtLl9kYXRhLCBzaXplKTtcbiAgICBtLl9zaXplID0gc2l6ZS5zbGljZSgwKTtcbiAgICByZXR1cm4gbTtcbiAgfTtcbiAgLyoqXG4gICAqIEVubGFyZ2UgdGhlIG1hdHJpeCB3aGVuIGl0IGlzIHNtYWxsZXIgdGhhbiBnaXZlbiBzaXplLlxuICAgKiBJZiB0aGUgbWF0cml4IGlzIGxhcmdlciBvciBlcXVhbCBzaXplZCwgbm90aGluZyBpcyBkb25lLlxuICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXhcbiAgICogQHBhcmFtIHtEZW5zZU1hdHJpeH0gbWF0cml4ICAgICAgICAgICBUaGUgbWF0cml4IHRvIGJlIHJlc2l6ZWRcbiAgICogQHBhcmFtIHtudW1iZXJbXX0gc2l6ZVxuICAgKiBAcGFyYW0geyp9IGRlZmF1bHRWYWx1ZSAgICAgICAgICBEZWZhdWx0IHZhbHVlLCBmaWxsZWQgaW4gb24gbmV3IGVudHJpZXMuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX2ZpdChtYXRyaXgsIHNpemUsIGRlZmF1bHRWYWx1ZSkge1xuICAgIHZhciAvLyBjb3B5IHRoZSBhcnJheVxuICAgIG5ld1NpemUgPSBtYXRyaXguX3NpemUuc2xpY2UoMCk7XG5cbiAgICB2YXIgY2hhbmdlZCA9IGZhbHNlOyAvLyBhZGQgZGltZW5zaW9ucyB3aGVuIG5lZWRlZFxuXG4gICAgd2hpbGUgKG5ld1NpemUubGVuZ3RoIDwgc2l6ZS5sZW5ndGgpIHtcbiAgICAgIG5ld1NpemUucHVzaCgwKTtcbiAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgIH0gLy8gZW5sYXJnZSBzaXplIHdoZW4gbmVlZGVkXG5cblxuICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHNpemUubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgaWYgKHNpemVbaV0gPiBuZXdTaXplW2ldKSB7XG4gICAgICAgIG5ld1NpemVbaV0gPSBzaXplW2ldO1xuICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgLy8gcmVzaXplIG9ubHkgd2hlbiBzaXplIGlzIGNoYW5nZWRcbiAgICAgIF9yZXNpemUobWF0cml4LCBuZXdTaXplLCBkZWZhdWx0VmFsdWUpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIGEgY2xvbmUgb2YgdGhlIG1hdHJpeFxuICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXhcbiAgICogQHJldHVybiB7RGVuc2VNYXRyaXh9IGNsb25lXG4gICAqL1xuXG5cbiAgRGVuc2VNYXRyaXgucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBtID0gbmV3IERlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6ICgwLCBfb2JqZWN0LmNsb25lKSh0aGlzLl9kYXRhKSxcbiAgICAgIHNpemU6ICgwLCBfb2JqZWN0LmNsb25lKSh0aGlzLl9zaXplKSxcbiAgICAgIGRhdGF0eXBlOiB0aGlzLl9kYXRhdHlwZVxuICAgIH0pO1xuICAgIHJldHVybiBtO1xuICB9O1xuICAvKipcbiAgICogUmV0cmlldmUgdGhlIHNpemUgb2YgdGhlIG1hdHJpeC5cbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEByZXR1cm5zIHtudW1iZXJbXX0gc2l6ZVxuICAgKi9cblxuXG4gIERlbnNlTWF0cml4LnByb3RvdHlwZS5zaXplID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLl9zaXplLnNsaWNlKDApOyAvLyByZXR1cm4gYSBjbG9uZSBvZiBfc2l6ZVxuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IG1hdHJpeCB3aXRoIHRoZSByZXN1bHRzIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBleGVjdXRlZCBvblxuICAgKiBlYWNoIGVudHJ5IG9mIHRoZSBtYXRyaXguXG4gICAqIEBtZW1iZXJvZiBEZW5zZU1hdHJpeFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiB0aGUgdmFsdWUgb2YgdGhlIGVsZW1lbnQsIHRoZSBpbmRleFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBlbGVtZW50LCBhbmQgdGhlIE1hdHJpeCBiZWluZyB0cmF2ZXJzZWQuXG4gICAqXG4gICAqIEByZXR1cm4ge0RlbnNlTWF0cml4fSBtYXRyaXhcbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgLy8gbWF0cml4IGluc3RhbmNlXG4gICAgdmFyIG1lID0gdGhpcztcblxuICAgIHZhciByZWN1cnNlID0gZnVuY3Rpb24gcmVjdXJzZSh2YWx1ZSwgaW5kZXgpIHtcbiAgICAgIGlmICgoMCwgX2lzLmlzQXJyYXkpKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWUubWFwKGZ1bmN0aW9uIChjaGlsZCwgaSkge1xuICAgICAgICAgIHJldHVybiByZWN1cnNlKGNoaWxkLCBpbmRleC5jb25jYXQoaSkpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayh2YWx1ZSwgaW5kZXgsIG1lKTtcbiAgICAgIH1cbiAgICB9OyAvLyBkZXRlcm1pbmUgdGhlIG5ldyBkYXRhdHlwZSB3aGVuIHRoZSBvcmlnaW5hbCBtYXRyaXggaGFzIGRhdGF0eXBlIGRlZmluZWRcbiAgICAvLyBUT0RPOiBzaG91bGQgYmUgZG9uZSBpbiBtYXRyaXggY29uc3RydWN0b3IgaW5zdGVhZFxuXG5cbiAgICB2YXIgZGF0YSA9IHJlY3Vyc2UodGhpcy5fZGF0YSwgW10pO1xuICAgIHZhciBkYXRhdHlwZSA9IHRoaXMuX2RhdGF0eXBlICE9PSB1bmRlZmluZWQgPyAoMCwgX2FycmF5LmdldEFycmF5RGF0YVR5cGUpKGRhdGEsIF9pcy50eXBlT2YpIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoZGF0YSwgZGF0YXR5cGUpO1xuICB9O1xuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZ1bmN0aW9uIG9uIGVhY2ggZW50cnkgb2YgdGhlIG1hdHJpeC5cbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGludm9rZWQgd2l0aCB0aHJlZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnM6IHRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudCwgdGhlIGluZGV4XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGVsZW1lbnQsIGFuZCB0aGUgTWF0cml4IGJlaW5nIHRyYXZlcnNlZC5cbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIC8vIG1hdHJpeCBpbnN0YW5jZVxuICAgIHZhciBtZSA9IHRoaXM7XG5cbiAgICB2YXIgcmVjdXJzZSA9IGZ1bmN0aW9uIHJlY3Vyc2UodmFsdWUsIGluZGV4KSB7XG4gICAgICBpZiAoKDAsIF9pcy5pc0FycmF5KSh2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUuZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQsIGkpIHtcbiAgICAgICAgICByZWN1cnNlKGNoaWxkLCBpbmRleC5jb25jYXQoaSkpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrKHZhbHVlLCBpbmRleCwgbWUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZWN1cnNlKHRoaXMuX2RhdGEsIFtdKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBBcnJheSB3aXRoIGEgY29weSBvZiB0aGUgZGF0YSBvZiB0aGUgRGVuc2VNYXRyaXhcbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEByZXR1cm5zIHtBcnJheX0gYXJyYXlcbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gKDAsIF9vYmplY3QuY2xvbmUpKHRoaXMuX2RhdGEpO1xuICB9O1xuICAvKipcbiAgICogR2V0IHRoZSBwcmltaXRpdmUgdmFsdWUgb2YgdGhlIERlbnNlTWF0cml4OiBhIG11bHRpZGltZW5zaW9uYWwgYXJyYXlcbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEByZXR1cm5zIHtBcnJheX0gYXJyYXlcbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUudmFsdWVPZiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWF0cml4LCB3aXRoIG9wdGlvbmFsIGZvcm1hdHRpbmcgb3B0aW9ucy5cbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEBwYXJhbSB7T2JqZWN0IHwgbnVtYmVyIHwgRnVuY3Rpb259IFtvcHRpb25zXSAgRm9ybWF0dGluZyBvcHRpb25zLiBTZWVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWIvdXRpbHMvbnVtYmVyOmZvcm1hdCBmb3IgYVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uIG9mIHRoZSBhdmFpbGFibGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gKDAsIF9zdHJpbmcuZm9ybWF0KSh0aGlzLl9kYXRhLCBvcHRpb25zKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWF0cml4XG4gICAqIEBtZW1iZXJvZiBEZW5zZU1hdHJpeFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICgwLCBfc3RyaW5nLmZvcm1hdCkodGhpcy5fZGF0YSk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtYXRyaXhcbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAqL1xuXG5cbiAgRGVuc2VNYXRyaXgucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnRGVuc2VNYXRyaXgnLFxuICAgICAgZGF0YTogdGhpcy5fZGF0YSxcbiAgICAgIHNpemU6IHRoaXMuX3NpemUsXG4gICAgICBkYXRhdHlwZTogdGhpcy5fZGF0YXR5cGVcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogR2V0IHRoZSBrdGggTWF0cml4IGRpYWdvbmFsLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXJ9IFtrPTBdICAgICBUaGUga3RoIGRpYWdvbmFsIHdoZXJlIHRoZSB2ZWN0b3Igd2lsbCByZXRyaWV2ZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtNYXRyaXh9ICAgICAgICAgICAgICAgICAgICAgVGhlIG1hdHJpeCB3aXRoIHRoZSBkaWFnb25hbCB2YWx1ZXMuXG4gICAqL1xuXG5cbiAgRGVuc2VNYXRyaXgucHJvdG90eXBlLmRpYWdvbmFsID0gZnVuY3Rpb24gKGspIHtcbiAgICAvLyB2YWxpZGF0ZSBrIGlmIGFueVxuICAgIGlmIChrKSB7XG4gICAgICAvLyBjb252ZXJ0IEJpZ051bWJlciB0byBhIG51bWJlclxuICAgICAgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKGspKSB7XG4gICAgICAgIGsgPSBrLnRvTnVtYmVyKCk7XG4gICAgICB9IC8vIGlzIG11c3QgYmUgYW4gaW50ZWdlclxuXG5cbiAgICAgIGlmICghKDAsIF9pcy5pc051bWJlcikoaykgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoaykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHBhcmFtZXRlciBrIG11c3QgYmUgYW4gaW50ZWdlciBudW1iZXInKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZGVmYXVsdCB2YWx1ZVxuICAgICAgayA9IDA7XG4gICAgfVxuXG4gICAgdmFyIGtTdXBlciA9IGsgPiAwID8gayA6IDA7XG4gICAgdmFyIGtTdWIgPSBrIDwgMCA/IC1rIDogMDsgLy8gcm93cyAmIGNvbHVtbnNcblxuICAgIHZhciByb3dzID0gdGhpcy5fc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IHRoaXMuX3NpemVbMV07IC8vIG51bWJlciBkaWFnb25hbCB2YWx1ZXNcblxuICAgIHZhciBuID0gTWF0aC5taW4ocm93cyAtIGtTdWIsIGNvbHVtbnMgLSBrU3VwZXIpOyAvLyB4IGlzIGEgbWF0cml4IGdldCBkaWFnb25hbCBmcm9tIG1hdHJpeFxuXG4gICAgdmFyIGRhdGEgPSBbXTsgLy8gbG9vcCByb3dzXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgZGF0YVtpXSA9IHRoaXMuX2RhdGFbaSArIGtTdWJdW2kgKyBrU3VwZXJdO1xuICAgIH0gLy8gY3JlYXRlIERlbnNlTWF0cml4XG5cblxuICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoe1xuICAgICAgZGF0YTogZGF0YSxcbiAgICAgIHNpemU6IFtuXSxcbiAgICAgIGRhdGF0eXBlOiB0aGlzLl9kYXRhdHlwZVxuICAgIH0pO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgZGlhZ29uYWwgbWF0cml4LlxuICAgKlxuICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXhcbiAgICogQHBhcmFtIHtBcnJheX0gc2l6ZSAgICAgICAgICAgICAgICAgICAgIFRoZSBtYXRyaXggc2l6ZS5cbiAgICogQHBhcmFtIHtudW1iZXIgfCBNYXRyaXggfCBBcnJheSB9IHZhbHVlIFRoZSB2YWx1ZXMgZm9yIHRoZSBkaWFnb25hbC5cbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXJ9IFtrPTBdICAgICAgIFRoZSBrdGggZGlhZ29uYWwgd2hlcmUgdGhlIHZlY3RvciB3aWxsIGJlIGZpbGxlZCBpbi5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtkZWZhdWx0VmFsdWVdICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBub24tZGlhZ29uYWxcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkYXRhdHlwZV0gICAgICAgICAgICAgIFRoZSBkYXRhdHlwZSBmb3IgdGhlIGRpYWdvbmFsXG4gICAqXG4gICAqIEByZXR1cm5zIHtEZW5zZU1hdHJpeH1cbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5kaWFnb25hbCA9IGZ1bmN0aW9uIChzaXplLCB2YWx1ZSwgaywgZGVmYXVsdFZhbHVlKSB7XG4gICAgaWYgKCEoMCwgX2lzLmlzQXJyYXkpKHNpemUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSBleHBlY3RlZCwgc2l6ZSBwYXJhbWV0ZXInKTtcbiAgICB9XG5cbiAgICBpZiAoc2l6ZS5sZW5ndGggIT09IDIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT25seSB0d28gZGltZW5zaW9ucyBtYXRyaXggYXJlIHN1cHBvcnRlZCcpO1xuICAgIH0gLy8gbWFwIHNpemUgJiB2YWxpZGF0ZVxuXG5cbiAgICBzaXplID0gc2l6ZS5tYXAoZnVuY3Rpb24gKHMpIHtcbiAgICAgIC8vIGNoZWNrIGl0IGlzIGEgYmlnIG51bWJlclxuICAgICAgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKHMpKSB7XG4gICAgICAgIC8vIGNvbnZlcnQgaXRcbiAgICAgICAgcyA9IHMudG9OdW1iZXIoKTtcbiAgICAgIH0gLy8gdmFsaWRhdGUgYXJndW1lbnRzXG5cblxuICAgICAgaWYgKCEoMCwgX2lzLmlzTnVtYmVyKShzKSB8fCAhKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShzKSB8fCBzIDwgMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NpemUgdmFsdWVzIG11c3QgYmUgcG9zaXRpdmUgaW50ZWdlcnMnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHM7XG4gICAgfSk7IC8vIHZhbGlkYXRlIGsgaWYgYW55XG5cbiAgICBpZiAoaykge1xuICAgICAgLy8gY29udmVydCBCaWdOdW1iZXIgdG8gYSBudW1iZXJcbiAgICAgIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShrKSkge1xuICAgICAgICBrID0gay50b051bWJlcigpO1xuICAgICAgfSAvLyBpcyBtdXN0IGJlIGFuIGludGVnZXJcblxuXG4gICAgICBpZiAoISgwLCBfaXMuaXNOdW1iZXIpKGspIHx8ICEoMCwgX251bWJlci5pc0ludGVnZXIpKGspKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBwYXJhbWV0ZXIgayBtdXN0IGJlIGFuIGludGVnZXIgbnVtYmVyJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGRlZmF1bHQgdmFsdWVcbiAgICAgIGsgPSAwO1xuICAgIH1cblxuICAgIHZhciBrU3VwZXIgPSBrID4gMCA/IGsgOiAwO1xuICAgIHZhciBrU3ViID0gayA8IDAgPyAtayA6IDA7IC8vIHJvd3MgYW5kIGNvbHVtbnNcblxuICAgIHZhciByb3dzID0gc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IHNpemVbMV07IC8vIG51bWJlciBvZiBub24temVybyBpdGVtc1xuXG4gICAgdmFyIG4gPSBNYXRoLm1pbihyb3dzIC0ga1N1YiwgY29sdW1ucyAtIGtTdXBlcik7IC8vIHZhbHVlIGV4dHJhY3Rpb24gZnVuY3Rpb25cblxuICAgIHZhciBfdmFsdWU7IC8vIGNoZWNrIHZhbHVlXG5cblxuICAgIGlmICgoMCwgX2lzLmlzQXJyYXkpKHZhbHVlKSkge1xuICAgICAgLy8gdmFsaWRhdGUgYXJyYXlcbiAgICAgIGlmICh2YWx1ZS5sZW5ndGggIT09IG4pIHtcbiAgICAgICAgLy8gbnVtYmVyIG9mIHZhbHVlcyBpbiBhcnJheSBtdXN0IGJlIG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHZhbHVlIGFycmF5IGxlbmd0aCcpO1xuICAgICAgfSAvLyBkZWZpbmUgZnVuY3Rpb25cblxuXG4gICAgICBfdmFsdWUgPSBmdW5jdGlvbiBfdmFsdWUoaSkge1xuICAgICAgICAvLyByZXR1cm4gdmFsdWUgQCBpXG4gICAgICAgIHJldHVybiB2YWx1ZVtpXTtcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzTWF0cml4KSh2YWx1ZSkpIHtcbiAgICAgIC8vIG1hdHJpeCBzaXplXG4gICAgICB2YXIgbXMgPSB2YWx1ZS5zaXplKCk7IC8vIHZhbGlkYXRlIG1hdHJpeFxuXG4gICAgICBpZiAobXMubGVuZ3RoICE9PSAxIHx8IG1zWzBdICE9PSBuKSB7XG4gICAgICAgIC8vIG51bWJlciBvZiB2YWx1ZXMgaW4gYXJyYXkgbXVzdCBiZSBuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBtYXRyaXggbGVuZ3RoJyk7XG4gICAgICB9IC8vIGRlZmluZSBmdW5jdGlvblxuXG5cbiAgICAgIF92YWx1ZSA9IGZ1bmN0aW9uIF92YWx1ZShpKSB7XG4gICAgICAgIC8vIHJldHVybiB2YWx1ZSBAIGlcbiAgICAgICAgcmV0dXJuIHZhbHVlLmdldChbaV0pO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZGVmaW5lIGZ1bmN0aW9uXG4gICAgICBfdmFsdWUgPSBmdW5jdGlvbiBfdmFsdWUoKSB7XG4gICAgICAgIC8vIHJldHVybiB2YWx1ZVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9O1xuICAgIH0gLy8gZGlzY292ZXIgZGVmYXVsdCB2YWx1ZSBpZiBuZWVkZWRcblxuXG4gICAgaWYgKCFkZWZhdWx0VmFsdWUpIHtcbiAgICAgIC8vIGNoZWNrIGZpcnN0IHZhbHVlIGluIGFycmF5XG4gICAgICBkZWZhdWx0VmFsdWUgPSAoMCwgX2lzLmlzQmlnTnVtYmVyKShfdmFsdWUoMCkpID8gX3ZhbHVlKDApLm11bCgwKSAvLyB0cmljayB0byBjcmVhdGUgYSBCaWdOdW1iZXIgd2l0aCB2YWx1ZSB6ZXJvXG4gICAgICA6IDA7XG4gICAgfSAvLyBlbXB0eSBhcnJheVxuXG5cbiAgICB2YXIgZGF0YSA9IFtdOyAvLyBjaGVjayB3ZSBuZWVkIHRvIHJlc2l6ZSBhcnJheVxuXG4gICAgaWYgKHNpemUubGVuZ3RoID4gMCkge1xuICAgICAgLy8gcmVzaXplIGFycmF5XG4gICAgICBkYXRhID0gKDAsIF9hcnJheS5yZXNpemUpKGRhdGEsIHNpemUsIGRlZmF1bHRWYWx1ZSk7IC8vIGZpbGwgZGlhZ29uYWxcblxuICAgICAgZm9yICh2YXIgZCA9IDA7IGQgPCBuOyBkKyspIHtcbiAgICAgICAgZGF0YVtkICsga1N1Yl1bZCArIGtTdXBlcl0gPSBfdmFsdWUoZCk7XG4gICAgICB9XG4gICAgfSAvLyBjcmVhdGUgRGVuc2VNYXRyaXhcblxuXG4gICAgcmV0dXJuIG5ldyBEZW5zZU1hdHJpeCh7XG4gICAgICBkYXRhOiBkYXRhLFxuICAgICAgc2l6ZTogW3Jvd3MsIGNvbHVtbnNdXG4gICAgfSk7XG4gIH07XG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIG1hdHJpeCBmcm9tIGEgSlNPTiBvYmplY3RcbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBqc29uICBBbiBvYmplY3Qgc3RydWN0dXJlZCBsaWtlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiRGVuc2VNYXRyaXhcIiwgZGF0YTogW10sIHNpemU6IFtdfWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge0RlbnNlTWF0cml4fVxuICAgKi9cblxuXG4gIERlbnNlTWF0cml4LmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICByZXR1cm4gbmV3IERlbnNlTWF0cml4KGpzb24pO1xuICB9O1xuICAvKipcbiAgICogU3dhcCByb3dzIGkgYW5kIGogaW4gTWF0cml4LlxuICAgKlxuICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGkgICAgICAgTWF0cml4IHJvdyBpbmRleCAxXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBqICAgICAgIE1hdHJpeCByb3cgaW5kZXggMlxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICBUaGUgbWF0cml4IHJlZmVyZW5jZVxuICAgKi9cblxuXG4gIERlbnNlTWF0cml4LnByb3RvdHlwZS5zd2FwUm93cyA9IGZ1bmN0aW9uIChpLCBqKSB7XG4gICAgLy8gY2hlY2sgaW5kZXhcbiAgICBpZiAoISgwLCBfaXMuaXNOdW1iZXIpKGkpIHx8ICEoMCwgX251bWJlci5pc0ludGVnZXIpKGkpIHx8ICEoMCwgX2lzLmlzTnVtYmVyKShqKSB8fCAhKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShqKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSb3cgaW5kZXggbXVzdCBiZSBwb3NpdGl2ZSBpbnRlZ2VycycpO1xuICAgIH0gLy8gY2hlY2sgZGltZW5zaW9uc1xuXG5cbiAgICBpZiAodGhpcy5fc2l6ZS5sZW5ndGggIT09IDIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT25seSB0d28gZGltZW5zaW9uYWwgbWF0cml4IGlzIHN1cHBvcnRlZCcpO1xuICAgIH0gLy8gdmFsaWRhdGUgaW5kZXhcblxuXG4gICAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShpLCB0aGlzLl9zaXplWzBdKTtcbiAgICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKGosIHRoaXMuX3NpemVbMF0pOyAvLyBzd2FwIHJvd3NcblxuICAgIERlbnNlTWF0cml4Ll9zd2FwUm93cyhpLCBqLCB0aGlzLl9kYXRhKTsgLy8gcmV0dXJuIGN1cnJlbnQgaW5zdGFuY2VcblxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBTd2FwIHJvd3MgaSBhbmQgaiBpbiBEZW5zZSBNYXRyaXggZGF0YSBzdHJ1Y3R1cmUuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpICAgICAgIE1hdHJpeCByb3cgaW5kZXggMVxuICAgKiBAcGFyYW0ge251bWJlcn0gaiAgICAgICBNYXRyaXggcm93IGluZGV4IDJcbiAgICogQHBhcmFtIHtBcnJheX0gZGF0YSAgICAgTWF0cml4IGRhdGFcbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5fc3dhcFJvd3MgPSBmdW5jdGlvbiAoaSwgaiwgZGF0YSkge1xuICAgIC8vIHN3YXAgdmFsdWVzIGkgPC0+IGpcbiAgICB2YXIgdmkgPSBkYXRhW2ldO1xuICAgIGRhdGFbaV0gPSBkYXRhW2pdO1xuICAgIGRhdGFbal0gPSB2aTtcbiAgfTtcbiAgLyoqXG4gICAqIFByZXByb2Nlc3MgZGF0YSwgd2hpY2ggY2FuIGJlIGFuIEFycmF5IG9yIERlbnNlTWF0cml4IHdpdGggbmVzdGVkIEFycmF5cyBhbmRcbiAgICogTWF0cmljZXMuIFJlcGxhY2VzIGFsbCBuZXN0ZWQgTWF0cmljZXMgd2l0aCBBcnJheXNcbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEBwYXJhbSB7QXJyYXl9IGRhdGFcbiAgICogQHJldHVybiB7QXJyYXl9IGRhdGFcbiAgICovXG5cblxuICBmdW5jdGlvbiBwcmVwcm9jZXNzKGRhdGEpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBkYXRhLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIHZhciBlbGVtID0gZGF0YVtpXTtcblxuICAgICAgaWYgKCgwLCBfaXMuaXNBcnJheSkoZWxlbSkpIHtcbiAgICAgICAgZGF0YVtpXSA9IHByZXByb2Nlc3MoZWxlbSk7XG4gICAgICB9IGVsc2UgaWYgKGVsZW0gJiYgZWxlbS5pc01hdHJpeCA9PT0gdHJ1ZSkge1xuICAgICAgICBkYXRhW2ldID0gcHJlcHJvY2VzcyhlbGVtLnZhbHVlT2YoKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICByZXR1cm4gRGVuc2VNYXRyaXg7XG59LCB7XG4gIGlzQ2xhc3M6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVEZW5zZU1hdHJpeENsYXNzID0gY3JlYXRlRGVuc2VNYXRyaXhDbGFzczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRmlib25hY2NpSGVhcENsYXNzID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnRmlib25hY2NpSGVhcCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydzbWFsbGVyJywgJ2xhcmdlciddO1xudmFyIGNyZWF0ZUZpYm9uYWNjaUhlYXBDbGFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBzbWFsbGVyID0gX3JlZi5zbWFsbGVyLFxuICAgICAgbGFyZ2VyID0gX3JlZi5sYXJnZXI7XG4gIHZhciBvbmVPdmVyTG9nUGhpID0gMS4wIC8gTWF0aC5sb2coKDEuMCArIE1hdGguc3FydCg1LjApKSAvIDIuMCk7XG4gIC8qKlxuICAgKiBGaWJvbmFjY2kgSGVhcCBpbXBsZW1lbnRhdGlvbiwgdXNlZCBpbnRlcmFsbHkgZm9yIE1hdHJpeCBtYXRoLlxuICAgKiBAY2xhc3MgRmlib25hY2NpSGVhcFxuICAgKiBAY29uc3RydWN0b3IgRmlib25hY2NpSGVhcFxuICAgKi9cblxuICBmdW5jdGlvbiBGaWJvbmFjY2lIZWFwKCkge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBGaWJvbmFjY2lIZWFwKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9IC8vIGluaXRpYWxpemUgZmllbGRzXG5cblxuICAgIHRoaXMuX21pbmltdW0gPSBudWxsO1xuICAgIHRoaXMuX3NpemUgPSAwO1xuICB9XG4gIC8qKlxuICAgKiBBdHRhY2ggdHlwZSBpbmZvcm1hdGlvblxuICAgKi9cblxuXG4gIEZpYm9uYWNjaUhlYXAucHJvdG90eXBlLnR5cGUgPSAnRmlib25hY2NpSGVhcCc7XG4gIEZpYm9uYWNjaUhlYXAucHJvdG90eXBlLmlzRmlib25hY2NpSGVhcCA9IHRydWU7XG4gIC8qKlxuICAgKiBJbnNlcnRzIGEgbmV3IGRhdGEgZWxlbWVudCBpbnRvIHRoZSBoZWFwLiBObyBoZWFwIGNvbnNvbGlkYXRpb24gaXNcbiAgICogcGVyZm9ybWVkIGF0IHRoaXMgdGltZSwgdGhlIG5ldyBub2RlIGlzIHNpbXBseSBpbnNlcnRlZCBpbnRvIHRoZSByb290XG4gICAqIGxpc3Qgb2YgdGhpcyBoZWFwLiBSdW5uaW5nIHRpbWU6IE8oMSkgYWN0dWFsLlxuICAgKiBAbWVtYmVyb2YgRmlib25hY2NpSGVhcFxuICAgKi9cblxuICBGaWJvbmFjY2lIZWFwLnByb3RvdHlwZS5pbnNlcnQgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIC8vIGNyZWF0ZSBub2RlXG4gICAgdmFyIG5vZGUgPSB7XG4gICAgICBrZXk6IGtleSxcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGRlZ3JlZTogMFxuICAgIH07IC8vIGNoZWNrIHdlIGhhdmUgYSBub2RlIGluIHRoZSBtaW5pbXVtXG5cbiAgICBpZiAodGhpcy5fbWluaW11bSkge1xuICAgICAgLy8gbWluaW11bSBub2RlXG4gICAgICB2YXIgbWluaW11bSA9IHRoaXMuX21pbmltdW07IC8vIHVwZGF0ZSBsZWZ0ICYgcmlnaHQgb2Ygbm9kZVxuXG4gICAgICBub2RlLmxlZnQgPSBtaW5pbXVtO1xuICAgICAgbm9kZS5yaWdodCA9IG1pbmltdW0ucmlnaHQ7XG4gICAgICBtaW5pbXVtLnJpZ2h0ID0gbm9kZTtcbiAgICAgIG5vZGUucmlnaHQubGVmdCA9IG5vZGU7IC8vIHVwZGF0ZSBtaW5pbXVtIG5vZGUgaW4gaGVhcCBpZiBuZWVkZWRcblxuICAgICAgaWYgKHNtYWxsZXIoa2V5LCBtaW5pbXVtLmtleSkpIHtcbiAgICAgICAgLy8gbm9kZSBoYXMgYSBzbWFsbGVyIGtleSwgdXNlIGl0IGFzIG1pbmltdW1cbiAgICAgICAgdGhpcy5fbWluaW11bSA9IG5vZGU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHNldCBsZWZ0ICYgcmlnaHRcbiAgICAgIG5vZGUubGVmdCA9IG5vZGU7XG4gICAgICBub2RlLnJpZ2h0ID0gbm9kZTsgLy8gdGhpcyBpcyB0aGUgZmlyc3Qgbm9kZVxuXG4gICAgICB0aGlzLl9taW5pbXVtID0gbm9kZTtcbiAgICB9IC8vIGluY3JlbWVudCBudW1iZXIgb2Ygbm9kZXMgaW4gaGVhcFxuXG5cbiAgICB0aGlzLl9zaXplKys7IC8vIHJldHVybiBub2RlXG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfTtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBub2RlcyBpbiBoZWFwLiBSdW5uaW5nIHRpbWU6IE8oMSkgYWN0dWFsLlxuICAgKiBAbWVtYmVyb2YgRmlib25hY2NpSGVhcFxuICAgKi9cblxuXG4gIEZpYm9uYWNjaUhlYXAucHJvdG90eXBlLnNpemUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NpemU7XG4gIH07XG4gIC8qKlxuICAgKiBSZW1vdmVzIGFsbCBlbGVtZW50cyBmcm9tIHRoaXMgaGVhcC5cbiAgICogQG1lbWJlcm9mIEZpYm9uYWNjaUhlYXBcbiAgICovXG5cblxuICBGaWJvbmFjY2lIZWFwLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLl9taW5pbXVtID0gbnVsbDtcbiAgICB0aGlzLl9zaXplID0gMDtcbiAgfTtcbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgaGVhcCBpcyBlbXB0eSwgb3RoZXJ3aXNlIGZhbHNlLlxuICAgKiBAbWVtYmVyb2YgRmlib25hY2NpSGVhcFxuICAgKi9cblxuXG4gIEZpYm9uYWNjaUhlYXAucHJvdG90eXBlLmlzRW1wdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NpemUgPT09IDA7XG4gIH07XG4gIC8qKlxuICAgKiBFeHRyYWN0cyB0aGUgbm9kZSB3aXRoIG1pbmltdW0ga2V5IGZyb20gaGVhcC4gQW1vcnRpemVkIHJ1bm5pbmdcbiAgICogdGltZTogTyhsb2cgbikuXG4gICAqIEBtZW1iZXJvZiBGaWJvbmFjY2lIZWFwXG4gICAqL1xuXG5cbiAgRmlib25hY2NpSGVhcC5wcm90b3R5cGUuZXh0cmFjdE1pbmltdW0gPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gbm9kZSB0byByZW1vdmVcbiAgICB2YXIgbm9kZSA9IHRoaXMuX21pbmltdW07IC8vIGNoZWNrIHdlIGhhdmUgYSBtaW5pbXVtXG5cbiAgICBpZiAobm9kZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfSAvLyBjdXJyZW50IG1pbmltdW1cblxuXG4gICAgdmFyIG1pbmltdW0gPSB0aGlzLl9taW5pbXVtOyAvLyBnZXQgbnVtYmVyIG9mIGNoaWxkcmVuXG5cbiAgICB2YXIgbnVtYmVyT2ZDaGlsZHJlbiA9IG5vZGUuZGVncmVlOyAvLyBwb2ludGVyIHRvIHRoZSBmaXJzdCBjaGlsZFxuXG4gICAgdmFyIHggPSBub2RlLmNoaWxkOyAvLyBmb3IgZWFjaCBjaGlsZCBvZiBub2RlIGRvLi4uXG5cbiAgICB3aGlsZSAobnVtYmVyT2ZDaGlsZHJlbiA+IDApIHtcbiAgICAgIC8vIHN0b3JlIG5vZGUgaW4gcmlnaHQgc2lkZVxuICAgICAgdmFyIHRlbXBSaWdodCA9IHgucmlnaHQ7IC8vIHJlbW92ZSB4IGZyb20gY2hpbGQgbGlzdFxuXG4gICAgICB4LmxlZnQucmlnaHQgPSB4LnJpZ2h0O1xuICAgICAgeC5yaWdodC5sZWZ0ID0geC5sZWZ0OyAvLyBhZGQgeCB0byByb290IGxpc3Qgb2YgaGVhcFxuXG4gICAgICB4LmxlZnQgPSBtaW5pbXVtO1xuICAgICAgeC5yaWdodCA9IG1pbmltdW0ucmlnaHQ7XG4gICAgICBtaW5pbXVtLnJpZ2h0ID0geDtcbiAgICAgIHgucmlnaHQubGVmdCA9IHg7IC8vIHNldCBQYXJlbnRbeF0gdG8gbnVsbFxuXG4gICAgICB4LnBhcmVudCA9IG51bGw7XG4gICAgICB4ID0gdGVtcFJpZ2h0O1xuICAgICAgbnVtYmVyT2ZDaGlsZHJlbi0tO1xuICAgIH0gLy8gcmVtb3ZlIG5vZGUgZnJvbSByb290IGxpc3Qgb2YgaGVhcFxuXG5cbiAgICBub2RlLmxlZnQucmlnaHQgPSBub2RlLnJpZ2h0O1xuICAgIG5vZGUucmlnaHQubGVmdCA9IG5vZGUubGVmdDsgLy8gdXBkYXRlIG1pbmltdW1cblxuICAgIGlmIChub2RlID09PSBub2RlLnJpZ2h0KSB7XG4gICAgICAvLyBlbXB0eVxuICAgICAgbWluaW11bSA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHVwZGF0ZSBtaW5pbXVtXG4gICAgICBtaW5pbXVtID0gbm9kZS5yaWdodDsgLy8gd2UgbmVlZCB0byB1cGRhdGUgdGhlIHBvaW50ZXIgdG8gdGhlIHJvb3Qgd2l0aCBtaW5pbXVtIGtleVxuXG4gICAgICBtaW5pbXVtID0gX2ZpbmRNaW5pbXVtTm9kZShtaW5pbXVtLCB0aGlzLl9zaXplKTtcbiAgICB9IC8vIGRlY3JlbWVudCBzaXplIG9mIGhlYXBcblxuXG4gICAgdGhpcy5fc2l6ZS0tOyAvLyB1cGRhdGUgbWluaW11bVxuXG4gICAgdGhpcy5fbWluaW11bSA9IG1pbmltdW07IC8vIHJldHVybiBub2RlXG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfTtcbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBub2RlIGZyb20gdGhlIGhlYXAgZ2l2ZW4gdGhlIHJlZmVyZW5jZSB0byB0aGUgbm9kZS4gVGhlIHRyZWVzXG4gICAqIGluIHRoZSBoZWFwIHdpbGwgYmUgY29uc29saWRhdGVkLCBpZiBuZWNlc3NhcnkuIFRoaXMgb3BlcmF0aW9uIG1heSBmYWlsXG4gICAqIHRvIHJlbW92ZSB0aGUgY29ycmVjdCBlbGVtZW50IGlmIHRoZXJlIGFyZSBub2RlcyB3aXRoIGtleSB2YWx1ZSAtSW5maW5pdHkuXG4gICAqIFJ1bm5pbmcgdGltZTogTyhsb2cgbikgYW1vcnRpemVkLlxuICAgKiBAbWVtYmVyb2YgRmlib25hY2NpSGVhcFxuICAgKi9cblxuXG4gIEZpYm9uYWNjaUhlYXAucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgLy8gZGVjcmVhc2Uga2V5IHZhbHVlXG4gICAgdGhpcy5fbWluaW11bSA9IF9kZWNyZWFzZUtleSh0aGlzLl9taW5pbXVtLCBub2RlLCAtMSk7IC8vIHJlbW92ZSB0aGUgc21hbGxlc3RcblxuICAgIHRoaXMuZXh0cmFjdE1pbmltdW0oKTtcbiAgfTtcbiAgLyoqXG4gICAqIERlY3JlYXNlcyB0aGUga2V5IHZhbHVlIGZvciBhIGhlYXAgbm9kZSwgZ2l2ZW4gdGhlIG5ldyB2YWx1ZSB0byB0YWtlIG9uLlxuICAgKiBUaGUgc3RydWN0dXJlIG9mIHRoZSBoZWFwIG1heSBiZSBjaGFuZ2VkIGFuZCB3aWxsIG5vdCBiZSBjb25zb2xpZGF0ZWQuXG4gICAqIFJ1bm5pbmcgdGltZTogTygxKSBhbW9ydGl6ZWQuXG4gICAqIEBtZW1iZXJvZiBGaWJvbmFjY2lIZWFwXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX2RlY3JlYXNlS2V5KG1pbmltdW0sIG5vZGUsIGtleSkge1xuICAgIC8vIHNldCBub2RlIGtleVxuICAgIG5vZGUua2V5ID0ga2V5OyAvLyBnZXQgcGFyZW50IG5vZGVcblxuICAgIHZhciBwYXJlbnQgPSBub2RlLnBhcmVudDtcblxuICAgIGlmIChwYXJlbnQgJiYgc21hbGxlcihub2RlLmtleSwgcGFyZW50LmtleSkpIHtcbiAgICAgIC8vIHJlbW92ZSBub2RlIGZyb20gcGFyZW50XG4gICAgICBfY3V0KG1pbmltdW0sIG5vZGUsIHBhcmVudCk7IC8vIHJlbW92ZSBhbGwgbm9kZXMgZnJvbSBwYXJlbnQgdG8gdGhlIHJvb3QgcGFyZW50XG5cblxuICAgICAgX2Nhc2NhZGluZ0N1dChtaW5pbXVtLCBwYXJlbnQpO1xuICAgIH0gLy8gdXBkYXRlIG1pbmltdW0gbm9kZSBpZiBuZWVkZWRcblxuXG4gICAgaWYgKHNtYWxsZXIobm9kZS5rZXksIG1pbmltdW0ua2V5KSkge1xuICAgICAgbWluaW11bSA9IG5vZGU7XG4gICAgfSAvLyByZXR1cm4gbWluaW11bVxuXG5cbiAgICByZXR1cm4gbWluaW11bTtcbiAgfVxuICAvKipcbiAgICogVGhlIHJldmVyc2Ugb2YgdGhlIGxpbmsgb3BlcmF0aW9uOiByZW1vdmVzIG5vZGUgZnJvbSB0aGUgY2hpbGQgbGlzdCBvZiBwYXJlbnQuXG4gICAqIFRoaXMgbWV0aG9kIGFzc3VtZXMgdGhhdCBtaW4gaXMgbm9uLW51bGwuIFJ1bm5pbmcgdGltZTogTygxKS5cbiAgICogQG1lbWJlcm9mIEZpYm9uYWNjaUhlYXBcbiAgICovXG5cblxuICBmdW5jdGlvbiBfY3V0KG1pbmltdW0sIG5vZGUsIHBhcmVudCkge1xuICAgIC8vIHJlbW92ZSBub2RlIGZyb20gcGFyZW50IGNoaWxkcmVuIGFuZCBkZWNyZW1lbnQgRGVncmVlW3BhcmVudF1cbiAgICBub2RlLmxlZnQucmlnaHQgPSBub2RlLnJpZ2h0O1xuICAgIG5vZGUucmlnaHQubGVmdCA9IG5vZGUubGVmdDtcbiAgICBwYXJlbnQuZGVncmVlLS07IC8vIHJlc2V0IHkuY2hpbGQgaWYgbmVjZXNzYXJ5XG5cbiAgICBpZiAocGFyZW50LmNoaWxkID09PSBub2RlKSB7XG4gICAgICBwYXJlbnQuY2hpbGQgPSBub2RlLnJpZ2h0O1xuICAgIH0gLy8gcmVtb3ZlIGNoaWxkIGlmIGRlZ3JlZSBpcyAwXG5cblxuICAgIGlmIChwYXJlbnQuZGVncmVlID09PSAwKSB7XG4gICAgICBwYXJlbnQuY2hpbGQgPSBudWxsO1xuICAgIH0gLy8gYWRkIG5vZGUgdG8gcm9vdCBsaXN0IG9mIGhlYXBcblxuXG4gICAgbm9kZS5sZWZ0ID0gbWluaW11bTtcbiAgICBub2RlLnJpZ2h0ID0gbWluaW11bS5yaWdodDtcbiAgICBtaW5pbXVtLnJpZ2h0ID0gbm9kZTtcbiAgICBub2RlLnJpZ2h0LmxlZnQgPSBub2RlOyAvLyBzZXQgcGFyZW50W25vZGVdIHRvIG51bGxcblxuICAgIG5vZGUucGFyZW50ID0gbnVsbDsgLy8gc2V0IG1hcmtbbm9kZV0gdG8gZmFsc2VcblxuICAgIG5vZGUubWFyayA9IGZhbHNlO1xuICB9XG4gIC8qKlxuICAgKiBQZXJmb3JtcyBhIGNhc2NhZGluZyBjdXQgb3BlcmF0aW9uLiBUaGlzIGN1dHMgbm9kZSBmcm9tIGl0cyBwYXJlbnQgYW5kIHRoZW5cbiAgICogZG9lcyB0aGUgc2FtZSBmb3IgaXRzIHBhcmVudCwgYW5kIHNvIG9uIHVwIHRoZSB0cmVlLlxuICAgKiBSdW5uaW5nIHRpbWU6IE8obG9nIG4pOyBPKDEpIGV4Y2x1ZGluZyB0aGUgcmVjdXJzaW9uLlxuICAgKiBAbWVtYmVyb2YgRmlib25hY2NpSGVhcFxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9jYXNjYWRpbmdDdXQobWluaW11bSwgbm9kZSkge1xuICAgIC8vIHN0b3JlIHBhcmVudCBub2RlXG4gICAgdmFyIHBhcmVudCA9IG5vZGUucGFyZW50OyAvLyBpZiB0aGVyZSdzIGEgcGFyZW50Li4uXG5cbiAgICBpZiAoIXBhcmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gaWYgbm9kZSBpcyB1bm1hcmtlZCwgc2V0IGl0IG1hcmtlZFxuXG5cbiAgICBpZiAoIW5vZGUubWFyaykge1xuICAgICAgbm9kZS5tYXJrID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaXQncyBtYXJrZWQsIGN1dCBpdCBmcm9tIHBhcmVudFxuICAgICAgX2N1dChtaW5pbXVtLCBub2RlLCBwYXJlbnQpOyAvLyBjdXQgaXRzIHBhcmVudCBhcyB3ZWxsXG5cblxuICAgICAgX2Nhc2NhZGluZ0N1dChwYXJlbnQpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogTWFrZSB0aGUgZmlyc3Qgbm9kZSBhIGNoaWxkIG9mIHRoZSBzZWNvbmQgb25lLiBSdW5uaW5nIHRpbWU6IE8oMSkgYWN0dWFsLlxuICAgKiBAbWVtYmVyb2YgRmlib25hY2NpSGVhcFxuICAgKi9cblxuXG4gIHZhciBfbGlua05vZGVzID0gZnVuY3Rpb24gX2xpbmtOb2Rlcyhub2RlLCBwYXJlbnQpIHtcbiAgICAvLyByZW1vdmUgbm9kZSBmcm9tIHJvb3QgbGlzdCBvZiBoZWFwXG4gICAgbm9kZS5sZWZ0LnJpZ2h0ID0gbm9kZS5yaWdodDtcbiAgICBub2RlLnJpZ2h0LmxlZnQgPSBub2RlLmxlZnQ7IC8vIG1ha2Ugbm9kZSBhIENoaWxkIG9mIHBhcmVudFxuXG4gICAgbm9kZS5wYXJlbnQgPSBwYXJlbnQ7XG5cbiAgICBpZiAoIXBhcmVudC5jaGlsZCkge1xuICAgICAgcGFyZW50LmNoaWxkID0gbm9kZTtcbiAgICAgIG5vZGUucmlnaHQgPSBub2RlO1xuICAgICAgbm9kZS5sZWZ0ID0gbm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgbm9kZS5sZWZ0ID0gcGFyZW50LmNoaWxkO1xuICAgICAgbm9kZS5yaWdodCA9IHBhcmVudC5jaGlsZC5yaWdodDtcbiAgICAgIHBhcmVudC5jaGlsZC5yaWdodCA9IG5vZGU7XG4gICAgICBub2RlLnJpZ2h0LmxlZnQgPSBub2RlO1xuICAgIH0gLy8gaW5jcmVhc2UgZGVncmVlW3BhcmVudF1cblxuXG4gICAgcGFyZW50LmRlZ3JlZSsrOyAvLyBzZXQgbWFya1tub2RlXSBmYWxzZVxuXG4gICAgbm9kZS5tYXJrID0gZmFsc2U7XG4gIH07XG5cbiAgZnVuY3Rpb24gX2ZpbmRNaW5pbXVtTm9kZShtaW5pbXVtLCBzaXplKSB7XG4gICAgLy8gdG8gZmluZCB0cmVlcyBvZiB0aGUgc2FtZSBkZWdyZWUgZWZmaWNpZW50bHkgd2UgdXNlIGFuIGFycmF5IG9mIGxlbmd0aCBPKGxvZyBuKSBpbiB3aGljaCB3ZSBrZWVwIGEgcG9pbnRlciB0byBvbmUgcm9vdCBvZiBlYWNoIGRlZ3JlZVxuICAgIHZhciBhcnJheVNpemUgPSBNYXRoLmZsb29yKE1hdGgubG9nKHNpemUpICogb25lT3ZlckxvZ1BoaSkgKyAxOyAvLyBjcmVhdGUgbGlzdCB3aXRoIGluaXRpYWwgY2FwYWNpdHlcblxuICAgIHZhciBhcnJheSA9IG5ldyBBcnJheShhcnJheVNpemUpOyAvLyBmaW5kIHRoZSBudW1iZXIgb2Ygcm9vdCBub2Rlcy5cblxuICAgIHZhciBudW1Sb290cyA9IDA7XG4gICAgdmFyIHggPSBtaW5pbXVtO1xuXG4gICAgaWYgKHgpIHtcbiAgICAgIG51bVJvb3RzKys7XG4gICAgICB4ID0geC5yaWdodDtcblxuICAgICAgd2hpbGUgKHggIT09IG1pbmltdW0pIHtcbiAgICAgICAgbnVtUm9vdHMrKztcbiAgICAgICAgeCA9IHgucmlnaHQ7XG4gICAgICB9XG4gICAgfSAvLyB2YXJzXG5cblxuICAgIHZhciB5OyAvLyBGb3IgZWFjaCBub2RlIGluIHJvb3QgbGlzdCBkby4uLlxuXG4gICAgd2hpbGUgKG51bVJvb3RzID4gMCkge1xuICAgICAgLy8gYWNjZXNzIHRoaXMgbm9kZSdzIGRlZ3JlZS4uXG4gICAgICB2YXIgZCA9IHguZGVncmVlOyAvLyBnZXQgbmV4dCBub2RlXG5cbiAgICAgIHZhciBuZXh0ID0geC5yaWdodDsgLy8gY2hlY2sgaWYgdGhlcmUgaXMgYSBub2RlIGFscmVhZHkgaW4gYXJyYXkgd2l0aCB0aGUgc2FtZSBkZWdyZWVcblxuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgLy8gZ2V0IG5vZGUgd2l0aCB0aGUgc2FtZSBkZWdyZWUgaXMgYW55XG4gICAgICAgIHkgPSBhcnJheVtkXTtcblxuICAgICAgICBpZiAoIXkpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSAvLyBtYWtlIG9uZSBub2RlIHdpdGggdGhlIHNhbWUgZGVncmVlIGEgY2hpbGQgb2YgdGhlIG90aGVyLCBkbyB0aGlzIGJhc2VkIG9uIHRoZSBrZXkgdmFsdWUuXG5cblxuICAgICAgICBpZiAobGFyZ2VyKHgua2V5LCB5LmtleSkpIHtcbiAgICAgICAgICB2YXIgdGVtcCA9IHk7XG4gICAgICAgICAgeSA9IHg7XG4gICAgICAgICAgeCA9IHRlbXA7XG4gICAgICAgIH0gLy8gbWFrZSB5IGEgY2hpbGQgb2YgeFxuXG5cbiAgICAgICAgX2xpbmtOb2Rlcyh5LCB4KTsgLy8gd2UgaGF2ZSBoYW5kbGVkIHRoaXMgZGVncmVlLCBnbyB0byBuZXh0IG9uZS5cblxuXG4gICAgICAgIGFycmF5W2RdID0gbnVsbDtcbiAgICAgICAgZCsrO1xuICAgICAgfSAvLyBzYXZlIHRoaXMgbm9kZSBmb3IgbGF0ZXIgd2hlbiB3ZSBtaWdodCBlbmNvdW50ZXIgYW5vdGhlciBvZiB0aGUgc2FtZSBkZWdyZWUuXG5cblxuICAgICAgYXJyYXlbZF0gPSB4OyAvLyBtb3ZlIGZvcndhcmQgdGhyb3VnaCBsaXN0LlxuXG4gICAgICB4ID0gbmV4dDtcbiAgICAgIG51bVJvb3RzLS07XG4gICAgfSAvLyBTZXQgbWluIHRvIG51bGwgKGVmZmVjdGl2ZWx5IGxvc2luZyB0aGUgcm9vdCBsaXN0KSBhbmQgcmVjb25zdHJ1Y3QgdGhlIHJvb3QgbGlzdCBmcm9tIHRoZSBhcnJheSBlbnRyaWVzIGluIGFycmF5W10uXG5cblxuICAgIG1pbmltdW0gPSBudWxsOyAvLyBsb29wIG5vZGVzIGluIGFycmF5XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5U2l6ZTsgaSsrKSB7XG4gICAgICAvLyBnZXQgY3VycmVudCBub2RlXG4gICAgICB5ID0gYXJyYXlbaV07XG5cbiAgICAgIGlmICgheSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gLy8gY2hlY2sgaWYgd2UgaGF2ZSBhIGxpbmtlZCBsaXN0XG5cblxuICAgICAgaWYgKG1pbmltdW0pIHtcbiAgICAgICAgLy8gRmlyc3QgcmVtb3ZlIG5vZGUgZnJvbSByb290IGxpc3QuXG4gICAgICAgIHkubGVmdC5yaWdodCA9IHkucmlnaHQ7XG4gICAgICAgIHkucmlnaHQubGVmdCA9IHkubGVmdDsgLy8gbm93IGFkZCB0byByb290IGxpc3QsIGFnYWluLlxuXG4gICAgICAgIHkubGVmdCA9IG1pbmltdW07XG4gICAgICAgIHkucmlnaHQgPSBtaW5pbXVtLnJpZ2h0O1xuICAgICAgICBtaW5pbXVtLnJpZ2h0ID0geTtcbiAgICAgICAgeS5yaWdodC5sZWZ0ID0geTsgLy8gY2hlY2sgaWYgdGhpcyBpcyBhIG5ldyBtaW4uXG5cbiAgICAgICAgaWYgKHNtYWxsZXIoeS5rZXksIG1pbmltdW0ua2V5KSkge1xuICAgICAgICAgIG1pbmltdW0gPSB5O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtaW5pbXVtID0geTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWluaW11bTtcbiAgfVxuXG4gIHJldHVybiBGaWJvbmFjY2lIZWFwO1xufSwge1xuICBpc0NsYXNzOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRmlib25hY2NpSGVhcENsYXNzID0gY3JlYXRlRmlib25hY2NpSGVhcENsYXNzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVJbW11dGFibGVEZW5zZU1hdHJpeENsYXNzID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdJbW11dGFibGVEZW5zZU1hdHJpeCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydzbWFsbGVyJywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlSW1tdXRhYmxlRGVuc2VNYXRyaXhDbGFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBzbWFsbGVyID0gX3JlZi5zbWFsbGVyLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuXG4gIGZ1bmN0aW9uIEltbXV0YWJsZURlbnNlTWF0cml4KGRhdGEsIGRhdGF0eXBlKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEltbXV0YWJsZURlbnNlTWF0cml4KSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YXR5cGUgJiYgISgwLCBfaXMuaXNTdHJpbmcpKGRhdGF0eXBlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGRhdGF0eXBlOiAnICsgZGF0YXR5cGUpO1xuICAgIH1cblxuICAgIGlmICgoMCwgX2lzLmlzTWF0cml4KShkYXRhKSB8fCAoMCwgX2lzLmlzQXJyYXkpKGRhdGEpKSB7XG4gICAgICAvLyB1c2UgRGVuc2VNYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHZhciBtYXRyaXggPSBuZXcgRGVuc2VNYXRyaXgoZGF0YSwgZGF0YXR5cGUpOyAvLyBpbnRlcm5hbCBzdHJ1Y3R1cmVzXG5cbiAgICAgIHRoaXMuX2RhdGEgPSBtYXRyaXguX2RhdGE7XG4gICAgICB0aGlzLl9zaXplID0gbWF0cml4Ll9zaXplO1xuICAgICAgdGhpcy5fZGF0YXR5cGUgPSBtYXRyaXguX2RhdGF0eXBlO1xuICAgICAgdGhpcy5fbWluID0gbnVsbDtcbiAgICAgIHRoaXMuX21heCA9IG51bGw7XG4gICAgfSBlbHNlIGlmIChkYXRhICYmICgwLCBfaXMuaXNBcnJheSkoZGF0YS5kYXRhKSAmJiAoMCwgX2lzLmlzQXJyYXkpKGRhdGEuc2l6ZSkpIHtcbiAgICAgIC8vIGluaXRpYWxpemUgZmllbGRzIGZyb20gSlNPTiByZXByZXNlbnRhdGlvblxuICAgICAgdGhpcy5fZGF0YSA9IGRhdGEuZGF0YTtcbiAgICAgIHRoaXMuX3NpemUgPSBkYXRhLnNpemU7XG4gICAgICB0aGlzLl9kYXRhdHlwZSA9IGRhdGEuZGF0YXR5cGU7XG4gICAgICB0aGlzLl9taW4gPSB0eXBlb2YgZGF0YS5taW4gIT09ICd1bmRlZmluZWQnID8gZGF0YS5taW4gOiBudWxsO1xuICAgICAgdGhpcy5fbWF4ID0gdHlwZW9mIGRhdGEubWF4ICE9PSAndW5kZWZpbmVkJyA/IGRhdGEubWF4IDogbnVsbDtcbiAgICB9IGVsc2UgaWYgKGRhdGEpIHtcbiAgICAgIC8vIHVuc3VwcG9ydGVkIHR5cGVcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vuc3VwcG9ydGVkIHR5cGUgb2YgZGF0YSAoJyArICgwLCBfaXMudHlwZU9mKShkYXRhKSArICcpJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIG5vdGhpbmcgcHJvdmlkZWRcbiAgICAgIHRoaXMuX2RhdGEgPSBbXTtcbiAgICAgIHRoaXMuX3NpemUgPSBbMF07XG4gICAgICB0aGlzLl9kYXRhdHlwZSA9IGRhdGF0eXBlO1xuICAgICAgdGhpcy5fbWluID0gbnVsbDtcbiAgICAgIHRoaXMuX21heCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgSW1tdXRhYmxlRGVuc2VNYXRyaXgucHJvdG90eXBlID0gbmV3IERlbnNlTWF0cml4KCk7XG4gIC8qKlxuICAgKiBBdHRhY2ggdHlwZSBpbmZvcm1hdGlvblxuICAgKi9cblxuICBJbW11dGFibGVEZW5zZU1hdHJpeC5wcm90b3R5cGUudHlwZSA9ICdJbW11dGFibGVEZW5zZU1hdHJpeCc7XG4gIEltbXV0YWJsZURlbnNlTWF0cml4LnByb3RvdHlwZS5pc0ltbXV0YWJsZURlbnNlTWF0cml4ID0gdHJ1ZTtcbiAgLyoqXG4gICAqIEdldCBhIHN1YnNldCBvZiB0aGUgbWF0cml4LCBvciByZXBsYWNlIGEgc3Vic2V0IG9mIHRoZSBtYXRyaXguXG4gICAqXG4gICAqIFVzYWdlOlxuICAgKiAgICAgY29uc3Qgc3Vic2V0ID0gbWF0cml4LnN1YnNldChpbmRleCkgICAgICAgICAgICAgICAvLyByZXRyaWV2ZSBzdWJzZXRcbiAgICogICAgIGNvbnN0IHZhbHVlID0gbWF0cml4LnN1YnNldChpbmRleCwgcmVwbGFjZW1lbnQpICAgLy8gcmVwbGFjZSBzdWJzZXRcbiAgICpcbiAgICogQHBhcmFtIHtJbmRleH0gaW5kZXhcbiAgICogQHBhcmFtIHtBcnJheSB8IEltbXV0YWJsZURlbnNlTWF0cml4IHwgKn0gW3JlcGxhY2VtZW50XVxuICAgKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWU9MF0gICAgICBEZWZhdWx0IHZhbHVlLCBmaWxsZWQgaW4gb24gbmV3IGVudHJpZXMgd2hlblxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWF0cml4IGlzIHJlc2l6ZWQuIElmIG5vdCBwcm92aWRlZCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IG1hdHJpeCBlbGVtZW50cyB3aWxsIGJlIGZpbGxlZCB3aXRoIHplcm9zLlxuICAgKi9cblxuICBJbW11dGFibGVEZW5zZU1hdHJpeC5wcm90b3R5cGUuc3Vic2V0ID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyB1c2UgYmFzZSBpbXBsZW1lbnRhdGlvblxuICAgICAgICAgIHZhciBtID0gRGVuc2VNYXRyaXgucHJvdG90eXBlLnN1YnNldC5jYWxsKHRoaXMsIGluZGV4KTsgLy8gY2hlY2sgcmVzdWx0IGlzIGEgbWF0cml4XG5cbiAgICAgICAgICBpZiAoKDAsIF9pcy5pc01hdHJpeCkobSkpIHtcbiAgICAgICAgICAgIC8vIHJldHVybiBpbW11dGFibGUgbWF0cml4XG4gICAgICAgICAgICByZXR1cm4gbmV3IEltbXV0YWJsZURlbnNlTWF0cml4KHtcbiAgICAgICAgICAgICAgZGF0YTogbS5fZGF0YSxcbiAgICAgICAgICAgICAgc2l6ZTogbS5fc2l6ZSxcbiAgICAgICAgICAgICAgZGF0YXR5cGU6IG0uX2RhdGF0eXBlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbTtcbiAgICAgICAgfVxuICAgICAgLy8gaW50ZW50aW9uYWwgZmFsbCB0aHJvdWdoXG5cbiAgICAgIGNhc2UgMjpcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIHNldCBzdWJzZXQgb24gYW4gSW1tdXRhYmxlIE1hdHJpeCBpbnN0YW5jZScpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ1dyb25nIG51bWJlciBvZiBhcmd1bWVudHMnKTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBSZXBsYWNlIGEgc2luZ2xlIGVsZW1lbnQgaW4gdGhlIG1hdHJpeC5cbiAgICogQHBhcmFtIHtOdW1iZXJbXX0gaW5kZXggICBaZXJvLWJhc2VkIGluZGV4XG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXSAgICAgICAgRGVmYXVsdCB2YWx1ZSwgZmlsbGVkIGluIG9uIG5ldyBlbnRyaWVzIHdoZW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hdHJpeCBpcyByZXNpemVkLiBJZiBub3QgcHJvdmlkZWQsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBtYXRyaXggZWxlbWVudHMgd2lsbCBiZSBsZWZ0IHVuZGVmaW5lZC5cbiAgICogQHJldHVybiB7SW1tdXRhYmxlRGVuc2VNYXRyaXh9IHNlbGZcbiAgICovXG5cblxuICBJbW11dGFibGVEZW5zZU1hdHJpeC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSBzZXQgb24gYW4gSW1tdXRhYmxlIE1hdHJpeCBpbnN0YW5jZScpO1xuICB9O1xuICAvKipcbiAgICogUmVzaXplIHRoZSBtYXRyaXggdG8gdGhlIGdpdmVuIHNpemUuIFJldHVybnMgYSBjb3B5IG9mIHRoZSBtYXRyaXggd2hlblxuICAgKiBgY29weT10cnVlYCwgb3RoZXJ3aXNlIHJldHVybiB0aGUgbWF0cml4IGl0c2VsZiAocmVzaXplIGluIHBsYWNlKS5cbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXJbXX0gc2l6ZSAgICAgICAgICAgVGhlIG5ldyBzaXplIHRoZSBtYXRyaXggc2hvdWxkIGhhdmUuXG4gICAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZT0wXSAgICAgIERlZmF1bHQgdmFsdWUsIGZpbGxlZCBpbiBvbiBuZXcgZW50cmllcy5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgbm90IHByb3ZpZGVkLCB0aGUgbWF0cml4IGVsZW1lbnRzIHdpbGxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgZmlsbGVkIHdpdGggemVyb3MuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NvcHldICAgICAgICAgIFJldHVybiBhIHJlc2l6ZWQgY29weSBvZiB0aGUgbWF0cml4XG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgIFRoZSByZXNpemVkIG1hdHJpeFxuICAgKi9cblxuXG4gIEltbXV0YWJsZURlbnNlTWF0cml4LnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIHJlc2l6ZSBvbiBhbiBJbW11dGFibGUgTWF0cml4IGluc3RhbmNlJyk7XG4gIH07XG4gIC8qKlxuICAgKiBEaXNhbGxvd3MgcmVzaGFwaW5nIGluIGZhdm9yIG9mIGltbXV0YWJpbGl0eS5cbiAgICpcbiAgICogQHRocm93cyB7RXJyb3J9IE9wZXJhdGlvbiBub3QgYWxsb3dlZFxuICAgKi9cblxuXG4gIEltbXV0YWJsZURlbnNlTWF0cml4LnByb3RvdHlwZS5yZXNoYXBlID0gZnVuY3Rpb24gKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSByZXNoYXBlIG9uIGFuIEltbXV0YWJsZSBNYXRyaXggaW5zdGFuY2UnKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoZSBtYXRyaXhcbiAgICogQHJldHVybiB7SW1tdXRhYmxlRGVuc2VNYXRyaXh9IGNsb25lXG4gICAqL1xuXG5cbiAgSW1tdXRhYmxlRGVuc2VNYXRyaXgucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgSW1tdXRhYmxlRGVuc2VNYXRyaXgoe1xuICAgICAgZGF0YTogKDAsIF9vYmplY3QuY2xvbmUpKHRoaXMuX2RhdGEpLFxuICAgICAgc2l6ZTogKDAsIF9vYmplY3QuY2xvbmUpKHRoaXMuX3NpemUpLFxuICAgICAgZGF0YXR5cGU6IHRoaXMuX2RhdGF0eXBlXG4gICAgfSk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtYXRyaXhcbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG5cblxuICBJbW11dGFibGVEZW5zZU1hdHJpeC5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdJbW11dGFibGVEZW5zZU1hdHJpeCcsXG4gICAgICBkYXRhOiB0aGlzLl9kYXRhLFxuICAgICAgc2l6ZTogdGhpcy5fc2l6ZSxcbiAgICAgIGRhdGF0eXBlOiB0aGlzLl9kYXRhdHlwZVxuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIG1hdHJpeCBmcm9tIGEgSlNPTiBvYmplY3RcbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIEFuIG9iamVjdCBzdHJ1Y3R1cmVkIGxpa2VcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJJbW11dGFibGVEZW5zZU1hdHJpeFwiLCBkYXRhOiBbXSwgc2l6ZTogW119YCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG1hdGhqcyBpcyBvcHRpb25hbFxuICAgKiBAcmV0dXJucyB7SW1tdXRhYmxlRGVuc2VNYXRyaXh9XG4gICAqL1xuXG5cbiAgSW1tdXRhYmxlRGVuc2VNYXRyaXguZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBuZXcgSW1tdXRhYmxlRGVuc2VNYXRyaXgoanNvbik7XG4gIH07XG4gIC8qKlxuICAgKiBTd2FwIHJvd3MgaSBhbmQgaiBpbiBNYXRyaXguXG4gICAqXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBpICAgICAgIE1hdHJpeCByb3cgaW5kZXggMVxuICAgKiBAcGFyYW0ge051bWJlcn0gaiAgICAgICBNYXRyaXggcm93IGluZGV4IDJcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgVGhlIG1hdHJpeCByZWZlcmVuY2VcbiAgICovXG5cblxuICBJbW11dGFibGVEZW5zZU1hdHJpeC5wcm90b3R5cGUuc3dhcFJvd3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIHN3YXBSb3dzIG9uIGFuIEltbXV0YWJsZSBNYXRyaXggaW5zdGFuY2UnKTtcbiAgfTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgbWluaW11bSB2YWx1ZSBpbiB0aGUgc2V0XG4gICAqIEByZXR1cm4ge051bWJlciB8IHVuZGVmaW5lZH0gbWluXG4gICAqL1xuXG5cbiAgSW1tdXRhYmxlRGVuc2VNYXRyaXgucHJvdG90eXBlLm1pbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBjaGVjayBtaW4gaGFzIGJlZW4gY2FsY3VsYXRlZCBiZWZvcmVcbiAgICBpZiAodGhpcy5fbWluID09PSBudWxsKSB7XG4gICAgICAvLyBtaW5pbXVtXG4gICAgICB2YXIgbSA9IG51bGw7IC8vIGNvbXB1dGUgbWluXG5cbiAgICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbiAodikge1xuICAgICAgICBpZiAobSA9PT0gbnVsbCB8fCBzbWFsbGVyKHYsIG0pKSB7XG4gICAgICAgICAgbSA9IHY7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5fbWluID0gbSAhPT0gbnVsbCA/IG0gOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX21pbjtcbiAgfTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgbWF4aW11bSB2YWx1ZSBpbiB0aGUgc2V0XG4gICAqIEByZXR1cm4ge051bWJlciB8IHVuZGVmaW5lZH0gbWF4XG4gICAqL1xuXG5cbiAgSW1tdXRhYmxlRGVuc2VNYXRyaXgucHJvdG90eXBlLm1heCA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBjaGVjayBtYXggaGFzIGJlZW4gY2FsY3VsYXRlZCBiZWZvcmVcbiAgICBpZiAodGhpcy5fbWF4ID09PSBudWxsKSB7XG4gICAgICAvLyBtYXhpbXVtXG4gICAgICB2YXIgbSA9IG51bGw7IC8vIGNvbXB1dGUgbWF4XG5cbiAgICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbiAodikge1xuICAgICAgICBpZiAobSA9PT0gbnVsbCB8fCBzbWFsbGVyKG0sIHYpKSB7XG4gICAgICAgICAgbSA9IHY7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5fbWF4ID0gbSAhPT0gbnVsbCA/IG0gOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX21heDtcbiAgfTtcblxuICByZXR1cm4gSW1tdXRhYmxlRGVuc2VNYXRyaXg7XG59LCB7XG4gIGlzQ2xhc3M6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVJbW11dGFibGVEZW5zZU1hdHJpeENsYXNzID0gY3JlYXRlSW1tdXRhYmxlRGVuc2VNYXRyaXhDbGFzczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTWF0cml4Q2xhc3MgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdNYXRyaXgnO1xudmFyIGRlcGVuZGVuY2llcyA9IFtdO1xudmFyIGNyZWF0ZU1hdHJpeENsYXNzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKCkge1xuICAvKipcbiAgICogQGNvbnN0cnVjdG9yIE1hdHJpeFxuICAgKlxuICAgKiBBIE1hdHJpeCBpcyBhIHdyYXBwZXIgYXJvdW5kIGFuIEFycmF5LiBBIG1hdHJpeCBjYW4gaG9sZCBhIG11bHRpIGRpbWVuc2lvbmFsXG4gICAqIGFycmF5LiBBIG1hdHJpeCBjYW4gYmUgY29uc3RydWN0ZWQgYXM6XG4gICAqXG4gICAqICAgICBsZXQgbWF0cml4ID0gbWF0aC5tYXRyaXgoZGF0YSlcbiAgICpcbiAgICogTWF0cml4IGNvbnRhaW5zIHRoZSBmdW5jdGlvbnMgdG8gcmVzaXplLCBnZXQgYW5kIHNldCB2YWx1ZXMsIGdldCB0aGUgc2l6ZSxcbiAgICogY2xvbmUgdGhlIG1hdHJpeCBhbmQgdG8gY29udmVydCB0aGUgbWF0cml4IHRvIGEgdmVjdG9yLCBhcnJheSwgb3Igc2NhbGFyLlxuICAgKiBGdXJ0aGVybW9yZSwgb25lIGNhbiBpdGVyYXRlIG92ZXIgdGhlIG1hdHJpeCB1c2luZyBtYXAgYW5kIGZvckVhY2guXG4gICAqIFRoZSBpbnRlcm5hbCBBcnJheSBvZiB0aGUgTWF0cml4IGNhbiBiZSBhY2Nlc3NlZCB1c2luZyB0aGUgZnVuY3Rpb24gdmFsdWVPZi5cbiAgICpcbiAgICogRXhhbXBsZSB1c2FnZTpcbiAgICpcbiAgICogICAgIGxldCBtYXRyaXggPSBtYXRoLm1hdHJpeChbWzEsIDJdLCBbMywgNF1dKVxuICAgKiAgICAgbWF0aXguc2l6ZSgpICAgICAgICAgICAgICAvLyBbMiwgMl1cbiAgICogICAgIG1hdHJpeC5yZXNpemUoWzMsIDJdLCA1KVxuICAgKiAgICAgbWF0cml4LnZhbHVlT2YoKSAgICAgICAgICAvLyBbWzEsIDJdLCBbMywgNF0sIFs1LCA1XV1cbiAgICogICAgIG1hdHJpeC5zdWJzZXQoWzEsMl0pICAgICAgIC8vIDMgKGluZGV4ZXMgYXJlIHplcm8tYmFzZWQpXG4gICAqXG4gICAqL1xuICBmdW5jdGlvbiBNYXRyaXgoKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIE1hdHJpeCkpIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBBdHRhY2ggdHlwZSBpbmZvcm1hdGlvblxuICAgKi9cblxuXG4gIE1hdHJpeC5wcm90b3R5cGUudHlwZSA9ICdNYXRyaXgnO1xuICBNYXRyaXgucHJvdG90eXBlLmlzTWF0cml4ID0gdHJ1ZTtcbiAgLyoqXG4gICAqIEdldCB0aGUgTWF0cml4IHN0b3JhZ2UgY29uc3RydWN0b3IgZm9yIHRoZSBnaXZlbiBmb3JtYXQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXQgICAgICAgVGhlIE1hdHJpeCBzdG9yYWdlIGZvcm1hdC5cbiAgICpcbiAgICogQHJldHVybiB7RnVuY3Rpb259ICAgICAgICAgICBUaGUgTWF0cml4IHN0b3JhZ2UgY29uc3RydWN0b3IuXG4gICAqL1xuXG4gIE1hdHJpeC5zdG9yYWdlID0gZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgIC8vIFRPRE86IGRlcHJlY2F0ZWQgc2luY2UgdjYuMC4wLiBDbGVhbiB1cCBzb21lIGRheVxuICAgIHRocm93IG5ldyBFcnJvcignTWF0cml4LnN0b3JhZ2UgaXMgZGVwcmVjYXRlZCBzaW5jZSB2Ni4wLjAuICcgKyAnVXNlIHRoZSBmYWN0b3J5IGZ1bmN0aW9uIG1hdGgubWF0cml4IGluc3RlYWQuJyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgdGhlIHN0b3JhZ2UgZm9ybWF0IHVzZWQgYnkgdGhlIG1hdHJpeC5cbiAgICpcbiAgICogVXNhZ2U6XG4gICAqICAgICBjb25zdCBmb3JtYXQgPSBtYXRyaXguc3RvcmFnZSgpICAgLy8gcmV0cmlldmUgc3RvcmFnZSBmb3JtYXRcbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfSAgICAgICAgICAgVGhlIHN0b3JhZ2UgZm9ybWF0LlxuICAgKi9cblxuXG4gIE1hdHJpeC5wcm90b3R5cGUuc3RvcmFnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGVhY2ggb2YgdGhlIE1hdHJpeCBpbXBsZW1lbnRhdGlvbnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBpbnZva2Ugc3RvcmFnZSBvbiBhIE1hdHJpeCBpbnRlcmZhY2UnKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCB0aGUgZGF0YXR5cGUgb2YgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBtYXRyaXguXG4gICAqXG4gICAqIFVzYWdlOlxuICAgKiAgICAgY29uc3QgZm9ybWF0ID0gbWF0cml4LmRhdGF0eXBlKCkgICAgLy8gcmV0cmlldmUgbWF0cml4IGRhdGF0eXBlXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ30gICAgICAgICAgIFRoZSBkYXRhdHlwZS5cbiAgICovXG5cblxuICBNYXRyaXgucHJvdG90eXBlLmRhdGF0eXBlID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBvZiB0aGUgTWF0cml4IGltcGxlbWVudGF0aW9uc1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSBkYXRhdHlwZSBvbiBhIE1hdHJpeCBpbnRlcmZhY2UnKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBNYXRyaXggV2l0aCB0aGUgdHlwZSBvZiB0aGUgY3VycmVudCBtYXRyaXggaW5zdGFuY2VcbiAgICogQHBhcmFtIHtBcnJheSB8IE9iamVjdH0gZGF0YVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2RhdGF0eXBlXVxuICAgKi9cblxuXG4gIE1hdHJpeC5wcm90b3R5cGUuY3JlYXRlID0gZnVuY3Rpb24gKGRhdGEsIGRhdGF0eXBlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIGNyZWF0ZSBvbiBhIE1hdHJpeCBpbnRlcmZhY2UnKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIHN1YnNldCBvZiB0aGUgbWF0cml4LCBvciByZXBsYWNlIGEgc3Vic2V0IG9mIHRoZSBtYXRyaXguXG4gICAqXG4gICAqIFVzYWdlOlxuICAgKiAgICAgY29uc3Qgc3Vic2V0ID0gbWF0cml4LnN1YnNldChpbmRleCkgICAgICAgICAgICAgICAvLyByZXRyaWV2ZSBzdWJzZXRcbiAgICogICAgIGNvbnN0IHZhbHVlID0gbWF0cml4LnN1YnNldChpbmRleCwgcmVwbGFjZW1lbnQpICAgLy8gcmVwbGFjZSBzdWJzZXRcbiAgICpcbiAgICogQHBhcmFtIHtJbmRleH0gaW5kZXhcbiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeCB8ICp9IFtyZXBsYWNlbWVudF1cbiAgICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlPTBdICAgICAgRGVmYXVsdCB2YWx1ZSwgZmlsbGVkIGluIG9uIG5ldyBlbnRyaWVzIHdoZW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hdHJpeCBpcyByZXNpemVkLiBJZiBub3QgcHJvdmlkZWQsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBtYXRyaXggZWxlbWVudHMgd2lsbCBiZSBmaWxsZWQgd2l0aCB6ZXJvcy5cbiAgICovXG5cblxuICBNYXRyaXgucHJvdG90eXBlLnN1YnNldCA9IGZ1bmN0aW9uIChpbmRleCwgcmVwbGFjZW1lbnQsIGRlZmF1bHRWYWx1ZSkge1xuICAgIC8vIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBvZiB0aGUgTWF0cml4IGltcGxlbWVudGF0aW9uc1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSBzdWJzZXQgb24gYSBNYXRyaXggaW50ZXJmYWNlJyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBzaW5nbGUgZWxlbWVudCBmcm9tIHRoZSBtYXRyaXguXG4gICAqIEBwYXJhbSB7bnVtYmVyW119IGluZGV4ICAgWmVyby1iYXNlZCBpbmRleFxuICAgKiBAcmV0dXJuIHsqfSB2YWx1ZVxuICAgKi9cblxuXG4gIE1hdHJpeC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgLy8gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIG9mIHRoZSBNYXRyaXggaW1wbGVtZW50YXRpb25zXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIGdldCBvbiBhIE1hdHJpeCBpbnRlcmZhY2UnKTtcbiAgfTtcbiAgLyoqXG4gICAqIFJlcGxhY2UgYSBzaW5nbGUgZWxlbWVudCBpbiB0aGUgbWF0cml4LlxuICAgKiBAcGFyYW0ge251bWJlcltdfSBpbmRleCAgIFplcm8tYmFzZWQgaW5kZXhcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdICAgICAgICBEZWZhdWx0IHZhbHVlLCBmaWxsZWQgaW4gb24gbmV3IGVudHJpZXMgd2hlblxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWF0cml4IGlzIHJlc2l6ZWQuIElmIG5vdCBwcm92aWRlZCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IG1hdHJpeCBlbGVtZW50cyB3aWxsIGJlIGxlZnQgdW5kZWZpbmVkLlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9IHNlbGZcbiAgICovXG5cblxuICBNYXRyaXgucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChpbmRleCwgdmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xuICAgIC8vIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBvZiB0aGUgTWF0cml4IGltcGxlbWVudGF0aW9uc1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSBzZXQgb24gYSBNYXRyaXggaW50ZXJmYWNlJyk7XG4gIH07XG4gIC8qKlxuICAgKiBSZXNpemUgdGhlIG1hdHJpeCB0byB0aGUgZ2l2ZW4gc2l6ZS4gUmV0dXJucyBhIGNvcHkgb2YgdGhlIG1hdHJpeCB3aGVuXG4gICAqIGBjb3B5PXRydWVgLCBvdGhlcndpc2UgcmV0dXJuIHRoZSBtYXRyaXggaXRzZWxmIChyZXNpemUgaW4gcGxhY2UpLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcltdfSBzaXplICAgICAgICAgICBUaGUgbmV3IHNpemUgdGhlIG1hdHJpeCBzaG91bGQgaGF2ZS5cbiAgICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlPTBdICAgICAgRGVmYXVsdCB2YWx1ZSwgZmlsbGVkIGluIG9uIG5ldyBlbnRyaWVzLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBub3QgcHJvdmlkZWQsIHRoZSBtYXRyaXggZWxlbWVudHMgd2lsbFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBmaWxsZWQgd2l0aCB6ZXJvcy5cbiAgICogQHBhcmFtIHtib29sZWFufSBbY29weV0gICAgICAgICAgUmV0dXJuIGEgcmVzaXplZCBjb3B5IG9mIHRoZSBtYXRyaXhcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICAgICAgVGhlIHJlc2l6ZWQgbWF0cml4XG4gICAqL1xuXG5cbiAgTWF0cml4LnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAoc2l6ZSwgZGVmYXVsdFZhbHVlKSB7XG4gICAgLy8gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIG9mIHRoZSBNYXRyaXggaW1wbGVtZW50YXRpb25zXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIHJlc2l6ZSBvbiBhIE1hdHJpeCBpbnRlcmZhY2UnKTtcbiAgfTtcbiAgLyoqXG4gICAqIFJlc2hhcGUgdGhlIG1hdHJpeCB0byB0aGUgZ2l2ZW4gc2l6ZS4gUmV0dXJucyBhIGNvcHkgb2YgdGhlIG1hdHJpeCB3aGVuXG4gICAqIGBjb3B5PXRydWVgLCBvdGhlcndpc2UgcmV0dXJuIHRoZSBtYXRyaXggaXRzZWxmIChyZXNoYXBlIGluIHBsYWNlKS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJbXX0gc2l6ZSAgICAgICAgICAgVGhlIG5ldyBzaXplIHRoZSBtYXRyaXggc2hvdWxkIGhhdmUuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NvcHldICAgICAgICAgIFJldHVybiBhIHJlc2hhcGVkIGNvcHkgb2YgdGhlIG1hdHJpeFxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgICAgICBUaGUgcmVzaGFwZWQgbWF0cml4XG4gICAqL1xuXG5cbiAgTWF0cml4LnByb3RvdHlwZS5yZXNoYXBlID0gZnVuY3Rpb24gKHNpemUsIGRlZmF1bHRWYWx1ZSkge1xuICAgIC8vIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBvZiB0aGUgTWF0cml4IGltcGxlbWVudGF0aW9uc1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSByZXNoYXBlIG9uIGEgTWF0cml4IGludGVyZmFjZScpO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgY2xvbmUgb2YgdGhlIG1hdHJpeFxuICAgKiBAcmV0dXJuIHtNYXRyaXh9IGNsb25lXG4gICAqL1xuXG5cbiAgTWF0cml4LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGVhY2ggb2YgdGhlIE1hdHJpeCBpbXBsZW1lbnRhdGlvbnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBpbnZva2UgY2xvbmUgb24gYSBNYXRyaXggaW50ZXJmYWNlJyk7XG4gIH07XG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0aGUgc2l6ZSBvZiB0aGUgbWF0cml4LlxuICAgKiBAcmV0dXJucyB7bnVtYmVyW119IHNpemVcbiAgICovXG5cblxuICBNYXRyaXgucHJvdG90eXBlLnNpemUgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIG9mIHRoZSBNYXRyaXggaW1wbGVtZW50YXRpb25zXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIHNpemUgb24gYSBNYXRyaXggaW50ZXJmYWNlJyk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgbWF0cml4IHdpdGggdGhlIHJlc3VsdHMgb2YgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGV4ZWN1dGVkIG9uXG4gICAqIGVhY2ggZW50cnkgb2YgdGhlIG1hdHJpeC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgaW52b2tlZCB3aXRoIHRocmVlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyczogdGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50LCB0aGUgaW5kZXhcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgZWxlbWVudCwgYW5kIHRoZSBNYXRyaXggYmVpbmcgdHJhdmVyc2VkLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtza2lwWmVyb3NdIEludm9rZSBjYWxsYmFjayBmdW5jdGlvbiBmb3Igbm9uLXplcm8gdmFsdWVzIG9ubHkuXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gbWF0cml4XG4gICAqL1xuXG5cbiAgTWF0cml4LnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIHNraXBaZXJvcykge1xuICAgIC8vIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBvZiB0aGUgTWF0cml4IGltcGxlbWVudGF0aW9uc1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSBtYXAgb24gYSBNYXRyaXggaW50ZXJmYWNlJyk7XG4gIH07XG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZnVuY3Rpb24gb24gZWFjaCBlbnRyeSBvZiB0aGUgbWF0cml4LlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiB0aGUgdmFsdWUgb2YgdGhlIGVsZW1lbnQsIHRoZSBpbmRleFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBlbGVtZW50LCBhbmQgdGhlIE1hdHJpeCBiZWluZyB0cmF2ZXJzZWQuXG4gICAqL1xuXG5cbiAgTWF0cml4LnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgLy8gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIG9mIHRoZSBNYXRyaXggaW1wbGVtZW50YXRpb25zXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIGZvckVhY2ggb24gYSBNYXRyaXggaW50ZXJmYWNlJyk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gQXJyYXkgd2l0aCBhIGNvcHkgb2YgdGhlIGRhdGEgb2YgdGhlIE1hdHJpeFxuICAgKiBAcmV0dXJucyB7QXJyYXl9IGFycmF5XG4gICAqL1xuXG5cbiAgTWF0cml4LnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBvZiB0aGUgTWF0cml4IGltcGxlbWVudGF0aW9uc1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSB0b0FycmF5IG9uIGEgTWF0cml4IGludGVyZmFjZScpO1xuICB9O1xuICAvKipcbiAgICogR2V0IHRoZSBwcmltaXRpdmUgdmFsdWUgb2YgdGhlIE1hdHJpeDogYSBtdWx0aWRpbWVuc2lvbmFsIGFycmF5XG4gICAqIEByZXR1cm5zIHtBcnJheX0gYXJyYXlcbiAgICovXG5cblxuICBNYXRyaXgucHJvdG90eXBlLnZhbHVlT2YgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIG9mIHRoZSBNYXRyaXggaW1wbGVtZW50YXRpb25zXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIHZhbHVlT2Ygb24gYSBNYXRyaXggaW50ZXJmYWNlJyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1hdHJpeCwgd2l0aCBvcHRpb25hbCBmb3JtYXR0aW5nIG9wdGlvbnMuXG4gICAqIEBwYXJhbSB7T2JqZWN0IHwgbnVtYmVyIHwgRnVuY3Rpb259IFtvcHRpb25zXSAgRm9ybWF0dGluZyBvcHRpb25zLiBTZWVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWIvdXRpbHMvbnVtYmVyOmZvcm1hdCBmb3IgYVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uIG9mIHRoZSBhdmFpbGFibGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBNYXRyaXgucHJvdG90eXBlLmZvcm1hdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgLy8gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIG9mIHRoZSBNYXRyaXggaW1wbGVtZW50YXRpb25zXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIGZvcm1hdCBvbiBhIE1hdHJpeCBpbnRlcmZhY2UnKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWF0cml4XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIE1hdHJpeC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIG9mIHRoZSBNYXRyaXggaW1wbGVtZW50YXRpb25zXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIHRvU3RyaW5nIG9uIGEgTWF0cml4IGludGVyZmFjZScpO1xuICB9O1xuXG4gIHJldHVybiBNYXRyaXg7XG59LCB7XG4gIGlzQ2xhc3M6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVNYXRyaXhDbGFzcyA9IGNyZWF0ZU1hdHJpeENsYXNzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVJbmRleENsYXNzID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ0luZGV4JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ0ltbXV0YWJsZURlbnNlTWF0cml4J107XG52YXIgY3JlYXRlSW5kZXhDbGFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBJbW11dGFibGVEZW5zZU1hdHJpeCA9IF9yZWYuSW1tdXRhYmxlRGVuc2VNYXRyaXg7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBpbmRleC4gQW4gSW5kZXggY2FuIHN0b3JlIHJhbmdlcyBhbmQgc2V0cyBmb3IgbXVsdGlwbGUgZGltZW5zaW9ucy5cbiAgICogTWF0cml4LmdldCwgTWF0cml4LnNldCwgYW5kIG1hdGguc3Vic2V0IGFjY2VwdCBhbiBJbmRleCBhcyBpbnB1dC5cbiAgICpcbiAgICogVXNhZ2U6XG4gICAqICAgICBjb25zdCBpbmRleCA9IG5ldyBJbmRleChyYW5nZTEsIHJhbmdlMiwgbWF0cml4MSwgYXJyYXkxLCAuLi4pXG4gICAqXG4gICAqIFdoZXJlIGVhY2ggcGFyYW1ldGVyIGNhbiBiZSBhbnkgb2Y6XG4gICAqICAgICBBIG51bWJlclxuICAgKiAgICAgQSBzdHJpbmcgKGNvbnRhaW5pbmcgYSBuYW1lIG9mIGFuIG9iamVjdCBwcm9wZXJ0eSlcbiAgICogICAgIEFuIGluc3RhbmNlIG9mIFJhbmdlXG4gICAqICAgICBBbiBBcnJheSB3aXRoIHRoZSBTZXQgdmFsdWVzXG4gICAqICAgICBBIE1hdHJpeCB3aXRoIHRoZSBTZXQgdmFsdWVzXG4gICAqXG4gICAqIFRoZSBwYXJhbWV0ZXJzIHN0YXJ0LCBlbmQsIGFuZCBzdGVwIG11c3QgYmUgaW50ZWdlciBudW1iZXJzLlxuICAgKlxuICAgKiBAY2xhc3MgSW5kZXhcbiAgICogQENvbnN0cnVjdG9yIEluZGV4XG4gICAqIEBwYXJhbSB7Li4uKn0gcmFuZ2VzXG4gICAqL1xuICBmdW5jdGlvbiBJbmRleChyYW5nZXMpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSW5kZXgpKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH1cblxuICAgIHRoaXMuX2RpbWVuc2lvbnMgPSBbXTtcbiAgICB0aGlzLl9pc1NjYWxhciA9IHRydWU7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgdmFyIGFyZyA9IGFyZ3VtZW50c1tpXTtcblxuICAgICAgaWYgKCgwLCBfaXMuaXNSYW5nZSkoYXJnKSkge1xuICAgICAgICB0aGlzLl9kaW1lbnNpb25zLnB1c2goYXJnKTtcblxuICAgICAgICB0aGlzLl9pc1NjYWxhciA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFyZykgfHwgKDAsIF9pcy5pc01hdHJpeCkoYXJnKSkge1xuICAgICAgICAvLyBjcmVhdGUgbWF0cml4XG4gICAgICAgIHZhciBtID0gX2NyZWF0ZUltbXV0YWJsZU1hdHJpeChhcmcudmFsdWVPZigpKTtcblxuICAgICAgICB0aGlzLl9kaW1lbnNpb25zLnB1c2gobSk7IC8vIHNpemVcblxuXG4gICAgICAgIHZhciBzaXplID0gbS5zaXplKCk7IC8vIHNjYWxhclxuXG4gICAgICAgIGlmIChzaXplLmxlbmd0aCAhPT0gMSB8fCBzaXplWzBdICE9PSAxKSB7XG4gICAgICAgICAgdGhpcy5faXNTY2FsYXIgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuICAgICAgICB0aGlzLl9kaW1lbnNpb25zLnB1c2goX2NyZWF0ZUltbXV0YWJsZU1hdHJpeChbYXJnXSkpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYXJnID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBvYmplY3QgcHJvcGVydHkgKGFyZ3VtZW50cy5jb3VudCBzaG91bGQgYmUgMSlcbiAgICAgICAgdGhpcy5fZGltZW5zaW9ucy5wdXNoKGFyZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdEaW1lbnNpb24gbXVzdCBiZSBhbiBBcnJheSwgTWF0cml4LCBudW1iZXIsIHN0cmluZywgb3IgUmFuZ2UnKTtcbiAgICAgIH0gLy8gVE9ETzogaW1wbGVtZW50IHN1cHBvcnQgZm9yIHdpbGRjYXJkICcqJ1xuXG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBBdHRhY2ggdHlwZSBpbmZvcm1hdGlvblxuICAgKi9cblxuXG4gIEluZGV4LnByb3RvdHlwZS50eXBlID0gJ0luZGV4JztcbiAgSW5kZXgucHJvdG90eXBlLmlzSW5kZXggPSB0cnVlO1xuXG4gIGZ1bmN0aW9uIF9jcmVhdGVJbW11dGFibGVNYXRyaXgoYXJnKSB7XG4gICAgLy8gbG9vcCBhcnJheSBlbGVtZW50c1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXJnLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKHR5cGVvZiBhcmdbaV0gIT09ICdudW1iZXInIHx8ICEoMCwgX251bWJlci5pc0ludGVnZXIpKGFyZ1tpXSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW5kZXggcGFyYW1ldGVycyBtdXN0IGJlIHBvc2l0aXZlIGludGVnZXIgbnVtYmVycycpO1xuICAgICAgfVxuICAgIH0gLy8gY3JlYXRlIG1hdHJpeFxuXG5cbiAgICByZXR1cm4gbmV3IEltbXV0YWJsZURlbnNlTWF0cml4KGFyZyk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoZSBpbmRleFxuICAgKiBAbWVtYmVyb2YgSW5kZXhcbiAgICogQHJldHVybiB7SW5kZXh9IGNsb25lXG4gICAqL1xuXG5cbiAgSW5kZXgucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBpbmRleCA9IG5ldyBJbmRleCgpO1xuICAgIGluZGV4Ll9kaW1lbnNpb25zID0gKDAsIF9vYmplY3QuY2xvbmUpKHRoaXMuX2RpbWVuc2lvbnMpO1xuICAgIGluZGV4Ll9pc1NjYWxhciA9IHRoaXMuX2lzU2NhbGFyO1xuICAgIHJldHVybiBpbmRleDtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBpbmRleCBmcm9tIGFuIGFycmF5IHdpdGggcmFuZ2VzL251bWJlcnNcbiAgICogQG1lbWJlcm9mIEluZGV4XG4gICAqIEBwYXJhbSB7QXJyYXkuPEFycmF5IHwgbnVtYmVyPn0gcmFuZ2VzXG4gICAqIEByZXR1cm4ge0luZGV4fSBpbmRleFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIEluZGV4LmNyZWF0ZSA9IGZ1bmN0aW9uIChyYW5nZXMpIHtcbiAgICB2YXIgaW5kZXggPSBuZXcgSW5kZXgoKTtcbiAgICBJbmRleC5hcHBseShpbmRleCwgcmFuZ2VzKTtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH07XG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0aGUgc2l6ZSBvZiB0aGUgaW5kZXgsIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgZm9yIGVhY2ggZGltZW5zaW9uLlxuICAgKiBAbWVtYmVyb2YgSW5kZXhcbiAgICogQHJldHVybnMge251bWJlcltdfSBzaXplXG4gICAqL1xuXG5cbiAgSW5kZXgucHJvdG90eXBlLnNpemUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNpemUgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHRoaXMuX2RpbWVuc2lvbnMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgdmFyIGQgPSB0aGlzLl9kaW1lbnNpb25zW2ldO1xuICAgICAgc2l6ZVtpXSA9IHR5cGVvZiBkID09PSAnc3RyaW5nJyA/IDEgOiBkLnNpemUoKVswXTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2l6ZTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCB0aGUgbWF4aW11bSB2YWx1ZSBmb3IgZWFjaCBvZiB0aGUgaW5kZXhlcyByYW5nZXMuXG4gICAqIEBtZW1iZXJvZiBJbmRleFxuICAgKiBAcmV0dXJucyB7bnVtYmVyW119IG1heFxuICAgKi9cblxuXG4gIEluZGV4LnByb3RvdHlwZS5tYXggPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZhbHVlcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGlpID0gdGhpcy5fZGltZW5zaW9ucy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICB2YXIgcmFuZ2UgPSB0aGlzLl9kaW1lbnNpb25zW2ldO1xuICAgICAgdmFsdWVzW2ldID0gdHlwZW9mIHJhbmdlID09PSAnc3RyaW5nJyA/IHJhbmdlIDogcmFuZ2UubWF4KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfTtcbiAgLyoqXG4gICAqIEdldCB0aGUgbWluaW11bSB2YWx1ZSBmb3IgZWFjaCBvZiB0aGUgaW5kZXhlcyByYW5nZXMuXG4gICAqIEBtZW1iZXJvZiBJbmRleFxuICAgKiBAcmV0dXJucyB7bnVtYmVyW119IG1pblxuICAgKi9cblxuXG4gIEluZGV4LnByb3RvdHlwZS5taW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZhbHVlcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGlpID0gdGhpcy5fZGltZW5zaW9ucy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICB2YXIgcmFuZ2UgPSB0aGlzLl9kaW1lbnNpb25zW2ldO1xuICAgICAgdmFsdWVzW2ldID0gdHlwZW9mIHJhbmdlID09PSAnc3RyaW5nJyA/IHJhbmdlIDogcmFuZ2UubWluKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfTtcbiAgLyoqXG4gICAqIExvb3Agb3ZlciBlYWNoIG9mIHRoZSByYW5nZXMgb2YgdGhlIGluZGV4XG4gICAqIEBtZW1iZXJvZiBJbmRleFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgIENhbGxlZCBmb3IgZWFjaCByYW5nZSB3aXRoIGEgUmFuZ2UgYXMgZmlyc3RcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudCwgdGhlIGRpbWVuc2lvbiBhcyBzZWNvbmQsIGFuZCB0aGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCBvYmplY3QgYXMgdGhpcmQuXG4gICAqL1xuXG5cbiAgSW5kZXgucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSB0aGlzLl9kaW1lbnNpb25zLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIGNhbGxiYWNrKHRoaXMuX2RpbWVuc2lvbnNbaV0sIGksIHRoaXMpO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSBkaW1lbnNpb24gZm9yIHRoZSBnaXZlbiBpbmRleFxuICAgKiBAbWVtYmVyb2YgSW5kZXhcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGRpbSAgICAgICAgICAgICAgICAgIE51bWJlciBvZiB0aGUgZGltZW5zaW9uXG4gICAqIEByZXR1cm5zIHtSYW5nZSB8IG51bGx9IHJhbmdlXG4gICAqL1xuXG5cbiAgSW5kZXgucHJvdG90eXBlLmRpbWVuc2lvbiA9IGZ1bmN0aW9uIChkaW0pIHtcbiAgICByZXR1cm4gdGhpcy5fZGltZW5zaW9uc1tkaW1dIHx8IG51bGw7XG4gIH07XG4gIC8qKlxuICAgKiBUZXN0IHdoZXRoZXIgdGhpcyBpbmRleCBjb250YWlucyBhbiBvYmplY3QgcHJvcGVydHlcbiAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiB0aGUgaW5kZXggaXMgYW4gb2JqZWN0IHByb3BlcnR5XG4gICAqL1xuXG5cbiAgSW5kZXgucHJvdG90eXBlLmlzT2JqZWN0UHJvcGVydHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RpbWVuc2lvbnMubGVuZ3RoID09PSAxICYmIHR5cGVvZiB0aGlzLl9kaW1lbnNpb25zWzBdID09PSAnc3RyaW5nJztcbiAgfTtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG9iamVjdCBwcm9wZXJ0eSBuYW1lIHdoZW4gdGhlIEluZGV4IGhvbGRzIGEgc2luZ2xlIG9iamVjdCBwcm9wZXJ0eSxcbiAgICogZWxzZSByZXR1cm5zIG51bGxcbiAgICogQHJldHVybnMge3N0cmluZyB8IG51bGx9XG4gICAqL1xuXG5cbiAgSW5kZXgucHJvdG90eXBlLmdldE9iamVjdFByb3BlcnR5ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmlzT2JqZWN0UHJvcGVydHkoKSA/IHRoaXMuX2RpbWVuc2lvbnNbMF0gOiBudWxsO1xuICB9O1xuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIHRoaXMgaW5kZXggY29udGFpbnMgb25seSBhIHNpbmdsZSB2YWx1ZS5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUgY2FzZSB3aGVuIHRoZSBpbmRleCBpcyBjcmVhdGVkIHdpdGggb25seSBzY2FsYXIgdmFsdWVzIGFzIHJhbmdlcyxcbiAgICogbm90IGZvciByYW5nZXMgcmVzb2x2aW5nIGludG8gYSBzaW5nbGUgdmFsdWUuXG4gICAqIEBtZW1iZXJvZiBJbmRleFxuICAgKiBAcmV0dXJuIHtib29sZWFufSBpc1NjYWxhclxuICAgKi9cblxuXG4gIEluZGV4LnByb3RvdHlwZS5pc1NjYWxhciA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNTY2FsYXI7XG4gIH07XG4gIC8qKlxuICAgKiBFeHBhbmQgdGhlIEluZGV4IGludG8gYW4gYXJyYXkuXG4gICAqIEZvciBleGFtcGxlIG5ldyBJbmRleChbMCwzXSwgWzIsN10pIHJldHVybnMgW1swLDEsMl0sIFsyLDMsNCw1LDZdXVxuICAgKiBAbWVtYmVyb2YgSW5kZXhcbiAgICogQHJldHVybnMge0FycmF5fSBhcnJheVxuICAgKi9cblxuXG4gIEluZGV4LnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcnJheSA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGlpID0gdGhpcy5fZGltZW5zaW9ucy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICB2YXIgZGltZW5zaW9uID0gdGhpcy5fZGltZW5zaW9uc1tpXTtcbiAgICAgIGFycmF5LnB1c2godHlwZW9mIGRpbWVuc2lvbiA9PT0gJ3N0cmluZycgPyBkaW1lbnNpb24gOiBkaW1lbnNpb24udG9BcnJheSgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJyYXk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgdGhlIHByaW1pdGl2ZSB2YWx1ZSBvZiB0aGUgSW5kZXgsIGEgdHdvIGRpbWVuc2lvbmFsIGFycmF5LlxuICAgKiBFcXVpdmFsZW50IHRvIEluZGV4LnRvQXJyYXkoKS5cbiAgICogQG1lbWJlcm9mIEluZGV4XG4gICAqIEByZXR1cm5zIHtBcnJheX0gYXJyYXlcbiAgICovXG5cblxuICBJbmRleC5wcm90b3R5cGUudmFsdWVPZiA9IEluZGV4LnByb3RvdHlwZS50b0FycmF5O1xuICAvKipcbiAgICogR2V0IHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGluZGV4LCBmb3IgZXhhbXBsZSAnWzI6Nl0nIG9yICdbMDoyOjEwLCA0OjcsIFsxLDIsM11dJ1xuICAgKiBAbWVtYmVyb2YgSW5kZXhcbiAgICogQHJldHVybnMge1N0cmluZ30gc3RyXG4gICAqL1xuXG4gIEluZGV4LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc3RyaW5ncyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGlpID0gdGhpcy5fZGltZW5zaW9ucy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICB2YXIgZGltZW5zaW9uID0gdGhpcy5fZGltZW5zaW9uc1tpXTtcblxuICAgICAgaWYgKHR5cGVvZiBkaW1lbnNpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHN0cmluZ3MucHVzaChKU09OLnN0cmluZ2lmeShkaW1lbnNpb24pKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0cmluZ3MucHVzaChkaW1lbnNpb24udG9TdHJpbmcoKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICdbJyArIHN0cmluZ3Muam9pbignLCAnKSArICddJztcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIEluZGV4XG4gICAqIEBtZW1iZXJvZiBJbmRleFxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGEgSlNPTiBvYmplY3Qgc3RydWN0dXJlZCBhczpcbiAgICogICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIkluZGV4XCIsIFwicmFuZ2VzXCI6IFt7XCJtYXRoanNcIjogXCJSYW5nZVwiLCBzdGFydDogMCwgZW5kOiAxMCwgc3RlcDoxfSwgLi4uXX1gXG4gICAqL1xuXG5cbiAgSW5kZXgucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnSW5kZXgnLFxuICAgICAgZGltZW5zaW9uczogdGhpcy5fZGltZW5zaW9uc1xuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhbiBJbmRleCBmcm9tIGEgSlNPTiBvYmplY3RcbiAgICogQG1lbWJlcm9mIEluZGV4XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBqc29uIEEgSlNPTiBvYmplY3Qgc3RydWN0dXJlZCBhczpcbiAgICogICAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiSW5kZXhcIiwgXCJkaW1lbnNpb25zXCI6IFt7XCJtYXRoanNcIjogXCJSYW5nZVwiLCBzdGFydDogMCwgZW5kOiAxMCwgc3RlcDoxfSwgLi4uXX1gXG4gICAqIEByZXR1cm4ge0luZGV4fVxuICAgKi9cblxuXG4gIEluZGV4LmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICByZXR1cm4gSW5kZXguY3JlYXRlKGpzb24uZGltZW5zaW9ucyk7XG4gIH07XG5cbiAgcmV0dXJuIEluZGV4O1xufSwge1xuICBpc0NsYXNzOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlSW5kZXhDbGFzcyA9IGNyZWF0ZUluZGV4Q2xhc3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJhbmdlQ2xhc3MgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ1JhbmdlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbXTtcbnZhciBjcmVhdGVSYW5nZUNsYXNzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKCkge1xuICAvKipcbiAgICogQ3JlYXRlIGEgcmFuZ2UuIEEgcmFuZ2UgaGFzIGEgc3RhcnQsIHN0ZXAsIGFuZCBlbmQsIGFuZCBjb250YWlucyBmdW5jdGlvbnNcbiAgICogdG8gaXRlcmF0ZSBvdmVyIHRoZSByYW5nZS5cbiAgICpcbiAgICogQSByYW5nZSBjYW4gYmUgY29uc3RydWN0ZWQgYXM6XG4gICAqXG4gICAqICAgICBjb25zdCByYW5nZSA9IG5ldyBSYW5nZShzdGFydCwgZW5kKVxuICAgKiAgICAgY29uc3QgcmFuZ2UgPSBuZXcgUmFuZ2Uoc3RhcnQsIGVuZCwgc3RlcClcbiAgICpcbiAgICogVG8gZ2V0IHRoZSByZXN1bHQgb2YgdGhlIHJhbmdlOlxuICAgKiAgICAgcmFuZ2UuZm9yRWFjaChmdW5jdGlvbiAoeCkge1xuICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHgpXG4gICAqICAgICB9KVxuICAgKiAgICAgcmFuZ2UubWFwKGZ1bmN0aW9uICh4KSB7XG4gICAqICAgICAgICAgcmV0dXJuIG1hdGguc2luKHgpXG4gICAqICAgICB9KVxuICAgKiAgICAgcmFuZ2UudG9BcnJheSgpXG4gICAqXG4gICAqIEV4YW1wbGUgdXNhZ2U6XG4gICAqXG4gICAqICAgICBjb25zdCBjID0gbmV3IFJhbmdlKDIsIDYpICAgICAgIC8vIDI6MTo1XG4gICAqICAgICBjLnRvQXJyYXkoKSAgICAgICAgICAgICAgICAgICAgIC8vIFsyLCAzLCA0LCA1XVxuICAgKiAgICAgY29uc3QgZCA9IG5ldyBSYW5nZSgyLCAtMywgLTEpICAvLyAyOi0xOi0yXG4gICAqICAgICBkLnRvQXJyYXkoKSAgICAgICAgICAgICAgICAgICAgIC8vIFsyLCAxLCAwLCAtMSwgLTJdXG4gICAqXG4gICAqIEBjbGFzcyBSYW5nZVxuICAgKiBAY29uc3RydWN0b3IgUmFuZ2VcbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0ICBpbmNsdWRlZCBsb3dlciBib3VuZFxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kICAgIGV4Y2x1ZGVkIHVwcGVyIGJvdW5kXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcF0gc3RlcCBzaXplLCBkZWZhdWx0IHZhbHVlIGlzIDFcbiAgICovXG4gIGZ1bmN0aW9uIFJhbmdlKHN0YXJ0LCBlbmQsIHN0ZXApIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmFuZ2UpKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH1cblxuICAgIHZhciBoYXNTdGFydCA9IHN0YXJ0ICE9PSBudWxsICYmIHN0YXJ0ICE9PSB1bmRlZmluZWQ7XG4gICAgdmFyIGhhc0VuZCA9IGVuZCAhPT0gbnVsbCAmJiBlbmQgIT09IHVuZGVmaW5lZDtcbiAgICB2YXIgaGFzU3RlcCA9IHN0ZXAgIT09IG51bGwgJiYgc3RlcCAhPT0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGhhc1N0YXJ0KSB7XG4gICAgICBpZiAoKDAsIF9pcy5pc0JpZ051bWJlcikoc3RhcnQpKSB7XG4gICAgICAgIHN0YXJ0ID0gc3RhcnQudG9OdW1iZXIoKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHN0YXJ0ICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXJhbWV0ZXIgc3RhcnQgbXVzdCBiZSBhIG51bWJlcicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChoYXNFbmQpIHtcbiAgICAgIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShlbmQpKSB7XG4gICAgICAgIGVuZCA9IGVuZC50b051bWJlcigpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZW5kICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXJhbWV0ZXIgZW5kIG11c3QgYmUgYSBudW1iZXInKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaGFzU3RlcCkge1xuICAgICAgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKHN0ZXApKSB7XG4gICAgICAgIHN0ZXAgPSBzdGVwLnRvTnVtYmVyKCk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdGVwICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXJhbWV0ZXIgc3RlcCBtdXN0IGJlIGEgbnVtYmVyJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zdGFydCA9IGhhc1N0YXJ0ID8gcGFyc2VGbG9hdChzdGFydCkgOiAwO1xuICAgIHRoaXMuZW5kID0gaGFzRW5kID8gcGFyc2VGbG9hdChlbmQpIDogMDtcbiAgICB0aGlzLnN0ZXAgPSBoYXNTdGVwID8gcGFyc2VGbG9hdChzdGVwKSA6IDE7XG4gIH1cbiAgLyoqXG4gICAqIEF0dGFjaCB0eXBlIGluZm9ybWF0aW9uXG4gICAqL1xuXG5cbiAgUmFuZ2UucHJvdG90eXBlLnR5cGUgPSAnUmFuZ2UnO1xuICBSYW5nZS5wcm90b3R5cGUuaXNSYW5nZSA9IHRydWU7XG4gIC8qKlxuICAgKiBQYXJzZSBhIHN0cmluZyBpbnRvIGEgcmFuZ2UsXG4gICAqIFRoZSBzdHJpbmcgY29udGFpbnMgdGhlIHN0YXJ0LCBvcHRpb25hbCBzdGVwLCBhbmQgZW5kLCBzZXBhcmF0ZWQgYnkgYSBjb2xvbi5cbiAgICogSWYgdGhlIHN0cmluZyBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQgcmFuZ2UsIG51bGwgaXMgcmV0dXJuZWQuXG4gICAqIEZvciBleGFtcGxlIHN0cj0nMDoyOjExJy5cbiAgICogQG1lbWJlcm9mIFJhbmdlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICogQHJldHVybiB7UmFuZ2UgfCBudWxsfSByYW5nZVxuICAgKi9cblxuICBSYW5nZS5wYXJzZSA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBhcmdzID0gc3RyLnNwbGl0KCc6Jyk7XG4gICAgdmFyIG51bXMgPSBhcmdzLm1hcChmdW5jdGlvbiAoYXJnKSB7XG4gICAgICByZXR1cm4gcGFyc2VGbG9hdChhcmcpO1xuICAgIH0pO1xuICAgIHZhciBpbnZhbGlkID0gbnVtcy5zb21lKGZ1bmN0aW9uIChudW0pIHtcbiAgICAgIHJldHVybiBpc05hTihudW0pO1xuICAgIH0pO1xuXG4gICAgaWYgKGludmFsaWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHN3aXRjaCAobnVtcy5sZW5ndGgpIHtcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShudW1zWzBdLCBudW1zWzFdKTtcblxuICAgICAgY2FzZSAzOlxuICAgICAgICByZXR1cm4gbmV3IFJhbmdlKG51bXNbMF0sIG51bXNbMl0sIG51bXNbMV0pO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGUgcmFuZ2VcbiAgICogQHJldHVybiB7UmFuZ2V9IGNsb25lXG4gICAqL1xuXG5cbiAgUmFuZ2UucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgUmFuZ2UodGhpcy5zdGFydCwgdGhpcy5lbmQsIHRoaXMuc3RlcCk7XG4gIH07XG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0aGUgc2l6ZSBvZiB0aGUgcmFuZ2UuXG4gICAqIFJldHVybnMgYW4gYXJyYXkgY29udGFpbmluZyBvbmUgbnVtYmVyLCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSByYW5nZS5cbiAgICogQG1lbWJlcm9mIFJhbmdlXG4gICAqIEByZXR1cm5zIHtudW1iZXJbXX0gc2l6ZVxuICAgKi9cblxuXG4gIFJhbmdlLnByb3RvdHlwZS5zaXplID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBsZW4gPSAwO1xuICAgIHZhciBzdGFydCA9IHRoaXMuc3RhcnQ7XG4gICAgdmFyIHN0ZXAgPSB0aGlzLnN0ZXA7XG4gICAgdmFyIGVuZCA9IHRoaXMuZW5kO1xuICAgIHZhciBkaWZmID0gZW5kIC0gc3RhcnQ7XG5cbiAgICBpZiAoKDAsIF9udW1iZXIuc2lnbikoc3RlcCkgPT09ICgwLCBfbnVtYmVyLnNpZ24pKGRpZmYpKSB7XG4gICAgICBsZW4gPSBNYXRoLmNlaWwoZGlmZiAvIHN0ZXApO1xuICAgIH0gZWxzZSBpZiAoZGlmZiA9PT0gMCkge1xuICAgICAgbGVuID0gMDtcbiAgICB9XG5cbiAgICBpZiAoaXNOYU4obGVuKSkge1xuICAgICAgbGVuID0gMDtcbiAgICB9XG5cbiAgICByZXR1cm4gW2xlbl07XG4gIH07XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIG1pbmltdW0gdmFsdWUgaW4gdGhlIHJhbmdlXG4gICAqIEBtZW1iZXJvZiBSYW5nZVxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCB1bmRlZmluZWR9IG1pblxuICAgKi9cblxuXG4gIFJhbmdlLnByb3RvdHlwZS5taW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNpemUgPSB0aGlzLnNpemUoKVswXTtcblxuICAgIGlmIChzaXplID4gMCkge1xuICAgICAgaWYgKHRoaXMuc3RlcCA+IDApIHtcbiAgICAgICAgLy8gcG9zaXRpdmUgc3RlcFxuICAgICAgICByZXR1cm4gdGhpcy5zdGFydDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG5lZ2F0aXZlIHN0ZXBcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnQgKyAoc2l6ZSAtIDEpICogdGhpcy5zdGVwO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgbWF4aW11bSB2YWx1ZSBpbiB0aGUgcmFuZ2VcbiAgICogQG1lbWJlcm9mIFJhbmdlXG4gICAqIEByZXR1cm4ge251bWJlciB8IHVuZGVmaW5lZH0gbWF4XG4gICAqL1xuXG5cbiAgUmFuZ2UucHJvdG90eXBlLm1heCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2l6ZSA9IHRoaXMuc2l6ZSgpWzBdO1xuXG4gICAgaWYgKHNpemUgPiAwKSB7XG4gICAgICBpZiAodGhpcy5zdGVwID4gMCkge1xuICAgICAgICAvLyBwb3NpdGl2ZSBzdGVwXG4gICAgICAgIHJldHVybiB0aGlzLnN0YXJ0ICsgKHNpemUgLSAxKSAqIHRoaXMuc3RlcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG5lZ2F0aXZlIHN0ZXBcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBlYWNoIHZhbHVlIGluIHRoZSByYW5nZS5cbiAgICogQG1lbWJlcm9mIFJhbmdlXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrICAgVGhlIGNhbGxiYWNrIG1ldGhvZCBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiB0aGUgdmFsdWUgb2YgdGhlIGVsZW1lbnQsIHRoZSBpbmRleFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBlbGVtZW50LCBhbmQgdGhlIFJhbmdlIGJlaW5nIHRyYXZlcnNlZC5cbiAgICovXG5cblxuICBSYW5nZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHZhciB4ID0gdGhpcy5zdGFydDtcbiAgICB2YXIgc3RlcCA9IHRoaXMuc3RlcDtcbiAgICB2YXIgZW5kID0gdGhpcy5lbmQ7XG4gICAgdmFyIGkgPSAwO1xuXG4gICAgaWYgKHN0ZXAgPiAwKSB7XG4gICAgICB3aGlsZSAoeCA8IGVuZCkge1xuICAgICAgICBjYWxsYmFjayh4LCBbaV0sIHRoaXMpO1xuICAgICAgICB4ICs9IHN0ZXA7XG4gICAgICAgIGkrKztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHN0ZXAgPCAwKSB7XG4gICAgICB3aGlsZSAoeCA+IGVuZCkge1xuICAgICAgICBjYWxsYmFjayh4LCBbaV0sIHRoaXMpO1xuICAgICAgICB4ICs9IHN0ZXA7XG4gICAgICAgIGkrKztcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggdmFsdWUgaW4gdGhlIFJhbmdlLCBhbmQgcmV0dXJuIHRoZVxuICAgKiByZXN1bHRzIGFzIGFuIGFycmF5XG4gICAqIEBtZW1iZXJvZiBSYW5nZVxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAgIFRoZSBjYWxsYmFjayBtZXRob2QgaXMgaW52b2tlZCB3aXRoIHRocmVlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyczogdGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50LCB0aGUgaW5kZXhcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgZWxlbWVudCwgYW5kIHRoZSBNYXRyaXggYmVpbmcgdHJhdmVyc2VkLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IGFycmF5XG4gICAqL1xuXG5cbiAgUmFuZ2UucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBvYmopIHtcbiAgICAgIGFycmF5W2luZGV4WzBdXSA9IGNhbGxiYWNrKHZhbHVlLCBpbmRleCwgb2JqKTtcbiAgICB9KTtcbiAgICByZXR1cm4gYXJyYXk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gQXJyYXkgd2l0aCBhIGNvcHkgb2YgdGhlIFJhbmdlcyBkYXRhXG4gICAqIEBtZW1iZXJvZiBSYW5nZVxuICAgKiBAcmV0dXJucyB7QXJyYXl9IGFycmF5XG4gICAqL1xuXG5cbiAgUmFuZ2UucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFycmF5ID0gW107XG4gICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgpIHtcbiAgICAgIGFycmF5W2luZGV4WzBdXSA9IHZhbHVlO1xuICAgIH0pO1xuICAgIHJldHVybiBhcnJheTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCB0aGUgcHJpbWl0aXZlIHZhbHVlIG9mIHRoZSBSYW5nZSwgYSBvbmUgZGltZW5zaW9uYWwgYXJyYXlcbiAgICogQG1lbWJlcm9mIFJhbmdlXG4gICAqIEByZXR1cm5zIHtBcnJheX0gYXJyYXlcbiAgICovXG5cblxuICBSYW5nZS5wcm90b3R5cGUudmFsdWVPZiA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBUT0RPOiBpbXBsZW1lbnQgYSBjYWNoaW5nIG1lY2hhbmlzbSBmb3IgcmFuZ2UudmFsdWVPZigpXG4gICAgcmV0dXJuIHRoaXMudG9BcnJheSgpO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSByYW5nZSwgd2l0aCBvcHRpb25hbCBmb3JtYXR0aW5nIG9wdGlvbnMuXG4gICAqIE91dHB1dCBpcyBmb3JtYXR0ZWQgYXMgJ3N0YXJ0OnN0ZXA6ZW5kJywgZm9yIGV4YW1wbGUgJzI6Nicgb3IgJzA6MC4yOjExJ1xuICAgKiBAbWVtYmVyb2YgUmFuZ2VcbiAgICogQHBhcmFtIHtPYmplY3QgfCBudW1iZXIgfCBmdW5jdGlvbn0gW29wdGlvbnNdICBGb3JtYXR0aW5nIG9wdGlvbnMuIFNlZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYi91dGlscy9udW1iZXI6Zm9ybWF0IGZvciBhXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gb2YgdGhlIGF2YWlsYWJsZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIFJhbmdlLnByb3RvdHlwZS5mb3JtYXQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBzdHIgPSAoMCwgX251bWJlci5mb3JtYXQpKHRoaXMuc3RhcnQsIG9wdGlvbnMpO1xuXG4gICAgaWYgKHRoaXMuc3RlcCAhPT0gMSkge1xuICAgICAgc3RyICs9ICc6JyArICgwLCBfbnVtYmVyLmZvcm1hdCkodGhpcy5zdGVwLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBzdHIgKz0gJzonICsgKDAsIF9udW1iZXIuZm9ybWF0KSh0aGlzLmVuZCwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIHN0cjtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgcmFuZ2UuXG4gICAqIEBtZW1iZXJvZiBSYW5nZVxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cblxuXG4gIFJhbmdlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtYXQoKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIHJhbmdlXG4gICAqIEBtZW1iZXJvZiBSYW5nZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGEgSlNPTiBvYmplY3Qgc3RydWN0dXJlZCBhczpcbiAgICogICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIlJhbmdlXCIsIFwic3RhcnRcIjogMiwgXCJlbmRcIjogNCwgXCJzdGVwXCI6IDF9YFxuICAgKi9cblxuXG4gIFJhbmdlLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hdGhqczogJ1JhbmdlJyxcbiAgICAgIHN0YXJ0OiB0aGlzLnN0YXJ0LFxuICAgICAgZW5kOiB0aGlzLmVuZCxcbiAgICAgIHN0ZXA6IHRoaXMuc3RlcFxuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhIFJhbmdlIGZyb20gYSBKU09OIG9iamVjdFxuICAgKiBAbWVtYmVyb2YgUmFuZ2VcbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gQSBKU09OIG9iamVjdCBzdHJ1Y3R1cmVkIGFzOlxuICAgKiAgICAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiUmFuZ2VcIiwgXCJzdGFydFwiOiAyLCBcImVuZFwiOiA0LCBcInN0ZXBcIjogMX1gXG4gICAqIEByZXR1cm4ge1JhbmdlfVxuICAgKi9cblxuXG4gIFJhbmdlLmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICByZXR1cm4gbmV3IFJhbmdlKGpzb24uc3RhcnQsIGpzb24uZW5kLCBqc29uLnN0ZXApO1xuICB9O1xuXG4gIHJldHVybiBSYW5nZTtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJhbmdlQ2xhc3MgPSBjcmVhdGVSYW5nZUNsYXNzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTcGFDbGFzcyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ1NwYSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydhZGRTY2FsYXInLCAnZXF1YWxTY2FsYXInLCAnRmlib25hY2NpSGVhcCddO1xudmFyIGNyZWF0ZVNwYUNsYXNzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIGFkZFNjYWxhciA9IF9yZWYuYWRkU2NhbGFyLFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLFxuICAgICAgRmlib25hY2NpSGVhcCA9IF9yZWYuRmlib25hY2NpSGVhcDtcblxuICAvKipcbiAgICogQW4gb3JkZXJlZCBTcGFyc2UgQWNjdW11bGF0b3IgaXMgYSByZXByZXNlbnRhdGlvbiBmb3IgYSBzcGFyc2UgdmVjdG9yIHRoYXQgaW5jbHVkZXMgYSBkZW5zZSBhcnJheVxuICAgKiBvZiB0aGUgdmVjdG9yIGVsZW1lbnRzIGFuZCBhbiBvcmRlcmVkIGxpc3Qgb2Ygbm9uLXplcm8gZWxlbWVudHMuXG4gICAqL1xuICBmdW5jdGlvbiBTcGEoKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFNwYSkpIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7XG4gICAgfSAvLyBhbGxvY2F0ZSB2ZWN0b3IsIFRPRE8gdXNlIHR5cGVkIGFycmF5c1xuXG5cbiAgICB0aGlzLl92YWx1ZXMgPSBbXTtcbiAgICB0aGlzLl9oZWFwID0gbmV3IEZpYm9uYWNjaUhlYXAoKTtcbiAgfVxuICAvKipcbiAgICogQXR0YWNoIHR5cGUgaW5mb3JtYXRpb25cbiAgICovXG5cblxuICBTcGEucHJvdG90eXBlLnR5cGUgPSAnU3BhJztcbiAgU3BhLnByb3RvdHlwZS5pc1NwYSA9IHRydWU7XG4gIC8qKlxuICAgKiBTZXQgdGhlIHZhbHVlIGZvciBpbmRleCBpLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaSAgICAgICAgICAgICAgICAgICAgICAgVGhlIGluZGV4XG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleH0gICBUaGUgdmFsdWUgYXQgaW5kZXggaVxuICAgKi9cblxuICBTcGEucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChpLCB2KSB7XG4gICAgLy8gY2hlY2sgd2UgaGF2ZSBhIHZhbHVlIEAgaVxuICAgIGlmICghdGhpcy5fdmFsdWVzW2ldKSB7XG4gICAgICAvLyBpbnNlcnQgaW4gaGVhcFxuICAgICAgdmFyIG5vZGUgPSB0aGlzLl9oZWFwLmluc2VydChpLCB2KTsgLy8gc2V0IHRoZSB2YWx1ZSBAIGlcblxuXG4gICAgICB0aGlzLl92YWx1ZXNbaV0gPSBub2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB1cGRhdGUgdGhlIHZhbHVlIEAgaVxuICAgICAgdGhpcy5fdmFsdWVzW2ldLnZhbHVlID0gdjtcbiAgICB9XG4gIH07XG5cbiAgU3BhLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoaSkge1xuICAgIHZhciBub2RlID0gdGhpcy5fdmFsdWVzW2ldO1xuXG4gICAgaWYgKG5vZGUpIHtcbiAgICAgIHJldHVybiBub2RlLnZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiAwO1xuICB9O1xuXG4gIFNwYS5wcm90b3R5cGUuYWNjdW11bGF0ZSA9IGZ1bmN0aW9uIChpLCB2KSB7XG4gICAgLy8gbm9kZSBAIGlcbiAgICB2YXIgbm9kZSA9IHRoaXMuX3ZhbHVlc1tpXTtcblxuICAgIGlmICghbm9kZSkge1xuICAgICAgLy8gaW5zZXJ0IGluIGhlYXBcbiAgICAgIG5vZGUgPSB0aGlzLl9oZWFwLmluc2VydChpLCB2KTsgLy8gaW5pdGlhbGl6ZSB2YWx1ZVxuXG4gICAgICB0aGlzLl92YWx1ZXNbaV0gPSBub2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBhY2N1bXVsYXRlIHZhbHVlXG4gICAgICBub2RlLnZhbHVlID0gYWRkU2NhbGFyKG5vZGUudmFsdWUsIHYpO1xuICAgIH1cbiAgfTtcblxuICBTcGEucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoZnJvbSwgdG8sIGNhbGxiYWNrKSB7XG4gICAgLy8gcmVmZXJlbmNlc1xuICAgIHZhciBoZWFwID0gdGhpcy5faGVhcDtcbiAgICB2YXIgdmFsdWVzID0gdGhpcy5fdmFsdWVzOyAvLyBub2Rlc1xuXG4gICAgdmFyIG5vZGVzID0gW107IC8vIG5vZGUgd2l0aCBtaW5pbXVtIGtleSwgc2F2ZSBpdFxuXG4gICAgdmFyIG5vZGUgPSBoZWFwLmV4dHJhY3RNaW5pbXVtKCk7XG5cbiAgICBpZiAobm9kZSkge1xuICAgICAgbm9kZXMucHVzaChub2RlKTtcbiAgICB9IC8vIGV4dHJhY3Qgbm9kZXMgZnJvbSBoZWFwIChvcmRlcmVkKVxuXG5cbiAgICB3aGlsZSAobm9kZSAmJiBub2RlLmtleSA8PSB0bykge1xuICAgICAgLy8gY2hlY2sgaXQgaXMgaW4gcmFuZ2VcbiAgICAgIGlmIChub2RlLmtleSA+PSBmcm9tKSB7XG4gICAgICAgIC8vIGNoZWNrIHZhbHVlIGlzIG5vdCB6ZXJvXG4gICAgICAgIGlmICghZXF1YWxTY2FsYXIobm9kZS52YWx1ZSwgMCkpIHtcbiAgICAgICAgICAvLyBpbnZva2UgY2FsbGJhY2tcbiAgICAgICAgICBjYWxsYmFjayhub2RlLmtleSwgbm9kZS52YWx1ZSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gZXh0cmFjdCBuZXh0IG5vZGUsIHNhdmUgaXRcblxuXG4gICAgICBub2RlID0gaGVhcC5leHRyYWN0TWluaW11bSgpO1xuXG4gICAgICBpZiAobm9kZSkge1xuICAgICAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgIH0gLy8gcmVpbnNlcnQgYWxsIG5vZGVzIGluIGhlYXBcblxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgLy8gY3VycmVudCBub2RlXG4gICAgICB2YXIgbiA9IG5vZGVzW2ldOyAvLyBpbnNlcnQgbm9kZSBpbiBoZWFwXG5cbiAgICAgIG5vZGUgPSBoZWFwLmluc2VydChuLmtleSwgbi52YWx1ZSk7IC8vIHVwZGF0ZSB2YWx1ZXNcblxuICAgICAgdmFsdWVzW25vZGUua2V5XSA9IG5vZGU7XG4gICAgfVxuICB9O1xuXG4gIFNwYS5wcm90b3R5cGUuc3dhcCA9IGZ1bmN0aW9uIChpLCBqKSB7XG4gICAgLy8gbm9kZSBAIGkgYW5kIGpcbiAgICB2YXIgbm9kZWkgPSB0aGlzLl92YWx1ZXNbaV07XG4gICAgdmFyIG5vZGVqID0gdGhpcy5fdmFsdWVzW2pdOyAvLyBjaGVjayB3ZSBuZWVkIHRvIGluc2VydCBpbmRlY2VzXG5cbiAgICBpZiAoIW5vZGVpICYmIG5vZGVqKSB7XG4gICAgICAvLyBpbnNlcnQgaW4gaGVhcFxuICAgICAgbm9kZWkgPSB0aGlzLl9oZWFwLmluc2VydChpLCBub2Rlai52YWx1ZSk7IC8vIHJlbW92ZSBmcm9tIGhlYXBcblxuICAgICAgdGhpcy5faGVhcC5yZW1vdmUobm9kZWopOyAvLyBzZXQgdmFsdWVzXG5cblxuICAgICAgdGhpcy5fdmFsdWVzW2ldID0gbm9kZWk7XG4gICAgICB0aGlzLl92YWx1ZXNbal0gPSB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIGlmIChub2RlaSAmJiAhbm9kZWopIHtcbiAgICAgIC8vIGluc2VydCBpbiBoZWFwXG4gICAgICBub2RlaiA9IHRoaXMuX2hlYXAuaW5zZXJ0KGosIG5vZGVpLnZhbHVlKTsgLy8gcmVtb3ZlIGZyb20gaGVhcFxuXG4gICAgICB0aGlzLl9oZWFwLnJlbW92ZShub2RlaSk7IC8vIHNldCB2YWx1ZXNcblxuXG4gICAgICB0aGlzLl92YWx1ZXNbal0gPSBub2RlajtcbiAgICAgIHRoaXMuX3ZhbHVlc1tpXSA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2UgaWYgKG5vZGVpICYmIG5vZGVqKSB7XG4gICAgICAvLyBzd2FwIHZhbHVlc1xuICAgICAgdmFyIHYgPSBub2RlaS52YWx1ZTtcbiAgICAgIG5vZGVpLnZhbHVlID0gbm9kZWoudmFsdWU7XG4gICAgICBub2Rlai52YWx1ZSA9IHY7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBTcGE7XG59LCB7XG4gIGlzQ2xhc3M6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTcGFDbGFzcyA9IGNyZWF0ZVNwYUNsYXNzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTcGFyc2VNYXRyaXhDbGFzcyA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfRGltZW5zaW9uRXJyb3IgPSByZXF1aXJlKFwiLi4vLi4vZXJyb3IvRGltZW5zaW9uRXJyb3JcIik7XG5cbnZhciBuYW1lID0gJ1NwYXJzZU1hdHJpeCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdlcXVhbFNjYWxhcicsICdNYXRyaXgnXTtcbnZhciBjcmVhdGVTcGFyc2VNYXRyaXhDbGFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsXG4gICAgICBNYXRyaXggPSBfcmVmLk1hdHJpeDtcblxuICAvKipcbiAgICogU3BhcnNlIE1hdHJpeCBpbXBsZW1lbnRhdGlvbi4gVGhpcyB0eXBlIGltcGxlbWVudHMgYSBDb21wcmVzc2VkIENvbHVtbiBTdG9yYWdlIGZvcm1hdFxuICAgKiBmb3Igc3BhcnNlIG1hdHJpY2VzLlxuICAgKiBAY2xhc3MgU3BhcnNlTWF0cml4XG4gICAqL1xuICBmdW5jdGlvbiBTcGFyc2VNYXRyaXgoZGF0YSwgZGF0YXR5cGUpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU3BhcnNlTWF0cml4KSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YXR5cGUgJiYgISgwLCBfaXMuaXNTdHJpbmcpKGRhdGF0eXBlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGRhdGF0eXBlOiAnICsgZGF0YXR5cGUpO1xuICAgIH1cblxuICAgIGlmICgoMCwgX2lzLmlzTWF0cml4KShkYXRhKSkge1xuICAgICAgLy8gY3JlYXRlIGZyb20gbWF0cml4XG4gICAgICBfY3JlYXRlRnJvbU1hdHJpeCh0aGlzLCBkYXRhLCBkYXRhdHlwZSk7XG4gICAgfSBlbHNlIGlmIChkYXRhICYmICgwLCBfaXMuaXNBcnJheSkoZGF0YS5pbmRleCkgJiYgKDAsIF9pcy5pc0FycmF5KShkYXRhLnB0cikgJiYgKDAsIF9pcy5pc0FycmF5KShkYXRhLnNpemUpKSB7XG4gICAgICAvLyBpbml0aWFsaXplIGZpZWxkc1xuICAgICAgdGhpcy5fdmFsdWVzID0gZGF0YS52YWx1ZXM7XG4gICAgICB0aGlzLl9pbmRleCA9IGRhdGEuaW5kZXg7XG4gICAgICB0aGlzLl9wdHIgPSBkYXRhLnB0cjtcbiAgICAgIHRoaXMuX3NpemUgPSBkYXRhLnNpemU7XG4gICAgICB0aGlzLl9kYXRhdHlwZSA9IGRhdGF0eXBlIHx8IGRhdGEuZGF0YXR5cGU7XG4gICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQXJyYXkpKGRhdGEpKSB7XG4gICAgICAvLyBjcmVhdGUgZnJvbSBhcnJheVxuICAgICAgX2NyZWF0ZUZyb21BcnJheSh0aGlzLCBkYXRhLCBkYXRhdHlwZSk7XG4gICAgfSBlbHNlIGlmIChkYXRhKSB7XG4gICAgICAvLyB1bnN1cHBvcnRlZCB0eXBlXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbnN1cHBvcnRlZCB0eXBlIG9mIGRhdGEgKCcgKyAoMCwgX2lzLnR5cGVPZikoZGF0YSkgKyAnKScpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBub3RoaW5nIHByb3ZpZGVkXG4gICAgICB0aGlzLl92YWx1ZXMgPSBbXTtcbiAgICAgIHRoaXMuX2luZGV4ID0gW107XG4gICAgICB0aGlzLl9wdHIgPSBbMF07XG4gICAgICB0aGlzLl9zaXplID0gWzAsIDBdO1xuICAgICAgdGhpcy5fZGF0YXR5cGUgPSBkYXRhdHlwZTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBfY3JlYXRlRnJvbU1hdHJpeChtYXRyaXgsIHNvdXJjZSwgZGF0YXR5cGUpIHtcbiAgICAvLyBjaGVjayBtYXRyaXggdHlwZVxuICAgIGlmIChzb3VyY2UudHlwZSA9PT0gJ1NwYXJzZU1hdHJpeCcpIHtcbiAgICAgIC8vIGNsb25lIGFycmF5c1xuICAgICAgbWF0cml4Ll92YWx1ZXMgPSBzb3VyY2UuX3ZhbHVlcyA/ICgwLCBfb2JqZWN0LmNsb25lKShzb3VyY2UuX3ZhbHVlcykgOiB1bmRlZmluZWQ7XG4gICAgICBtYXRyaXguX2luZGV4ID0gKDAsIF9vYmplY3QuY2xvbmUpKHNvdXJjZS5faW5kZXgpO1xuICAgICAgbWF0cml4Ll9wdHIgPSAoMCwgX29iamVjdC5jbG9uZSkoc291cmNlLl9wdHIpO1xuICAgICAgbWF0cml4Ll9zaXplID0gKDAsIF9vYmplY3QuY2xvbmUpKHNvdXJjZS5fc2l6ZSk7XG4gICAgICBtYXRyaXguX2RhdGF0eXBlID0gZGF0YXR5cGUgfHwgc291cmNlLl9kYXRhdHlwZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYnVpbGQgZnJvbSBtYXRyaXggZGF0YVxuICAgICAgX2NyZWF0ZUZyb21BcnJheShtYXRyaXgsIHNvdXJjZS52YWx1ZU9mKCksIGRhdGF0eXBlIHx8IHNvdXJjZS5fZGF0YXR5cGUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIF9jcmVhdGVGcm9tQXJyYXkobWF0cml4LCBkYXRhLCBkYXRhdHlwZSkge1xuICAgIC8vIGluaXRpYWxpemUgZmllbGRzXG4gICAgbWF0cml4Ll92YWx1ZXMgPSBbXTtcbiAgICBtYXRyaXguX2luZGV4ID0gW107XG4gICAgbWF0cml4Ll9wdHIgPSBbXTtcbiAgICBtYXRyaXguX2RhdGF0eXBlID0gZGF0YXR5cGU7IC8vIGRpc2NvdmVyIHJvd3MgJiBjb2x1bW5zLCBkbyBub3QgdXNlIG1hdGguc2l6ZSgpIHRvIGF2b2lkIGxvb3BpbmcgYXJyYXkgdHdpY2VcblxuICAgIHZhciByb3dzID0gZGF0YS5sZW5ndGg7XG4gICAgdmFyIGNvbHVtbnMgPSAwOyAvLyBlcXVhbCBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgZXEgPSBlcXVhbFNjYWxhcjsgLy8gemVybyB2YWx1ZVxuXG4gICAgdmFyIHplcm8gPSAwO1xuXG4gICAgaWYgKCgwLCBfaXMuaXNTdHJpbmcpKGRhdGF0eXBlKSkge1xuICAgICAgLy8gZmluZCBzaWduYXR1cmUgdGhhdCBtYXRjaGVzIChkYXRhdHlwZSwgZGF0YXR5cGUpXG4gICAgICBlcSA9IHR5cGVkLmZpbmQoZXF1YWxTY2FsYXIsIFtkYXRhdHlwZSwgZGF0YXR5cGVdKSB8fCBlcXVhbFNjYWxhcjsgLy8gY29udmVydCAwIHRvIHRoZSBzYW1lIGRhdGF0eXBlXG5cbiAgICAgIHplcm8gPSB0eXBlZC5jb252ZXJ0KDAsIGRhdGF0eXBlKTtcbiAgICB9IC8vIGNoZWNrIHdlIGhhdmUgcm93cyAoZW1wdHkgYXJyYXkpXG5cblxuICAgIGlmIChyb3dzID4gMCkge1xuICAgICAgLy8gY29sdW1uIGluZGV4XG4gICAgICB2YXIgaiA9IDA7XG5cbiAgICAgIGRvIHtcbiAgICAgICAgLy8gc3RvcmUgcG9pbnRlciB0byB2YWx1ZXMgaW5kZXhcbiAgICAgICAgbWF0cml4Ll9wdHIucHVzaChtYXRyaXguX2luZGV4Lmxlbmd0aCk7IC8vIGxvb3Agcm93c1xuXG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgICAvLyBjdXJyZW50IHJvd1xuICAgICAgICAgIHZhciByb3cgPSBkYXRhW2ldOyAvLyBjaGVjayByb3cgaXMgYW4gYXJyYXlcblxuICAgICAgICAgIGlmICgoMCwgX2lzLmlzQXJyYXkpKHJvdykpIHtcbiAgICAgICAgICAgIC8vIHVwZGF0ZSBjb2x1bW5zIGlmIG5lZWRlZCAob25seSBvbiBmaXJzdCBjb2x1bW4pXG4gICAgICAgICAgICBpZiAoaiA9PT0gMCAmJiBjb2x1bW5zIDwgcm93Lmxlbmd0aCkge1xuICAgICAgICAgICAgICBjb2x1bW5zID0gcm93Lmxlbmd0aDtcbiAgICAgICAgICAgIH0gLy8gY2hlY2sgcm93IGhhcyBjb2x1bW5cblxuXG4gICAgICAgICAgICBpZiAoaiA8IHJvdy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgLy8gdmFsdWVcbiAgICAgICAgICAgICAgdmFyIHYgPSByb3dbal07IC8vIGNoZWNrIHZhbHVlICE9IDBcblxuICAgICAgICAgICAgICBpZiAoIWVxKHYsIHplcm8pKSB7XG4gICAgICAgICAgICAgICAgLy8gc3RvcmUgdmFsdWVcbiAgICAgICAgICAgICAgICBtYXRyaXguX3ZhbHVlcy5wdXNoKHYpOyAvLyBpbmRleFxuXG5cbiAgICAgICAgICAgICAgICBtYXRyaXguX2luZGV4LnB1c2goaSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gdXBkYXRlIGNvbHVtbnMgaWYgbmVlZGVkIChvbmx5IG9uIGZpcnN0IGNvbHVtbilcbiAgICAgICAgICAgIGlmIChqID09PSAwICYmIGNvbHVtbnMgPCAxKSB7XG4gICAgICAgICAgICAgIGNvbHVtbnMgPSAxO1xuICAgICAgICAgICAgfSAvLyBjaGVjayB2YWx1ZSAhPSAwIChyb3cgaXMgYSBzY2FsYXIpXG5cblxuICAgICAgICAgICAgaWYgKCFlcShyb3csIHplcm8pKSB7XG4gICAgICAgICAgICAgIC8vIHN0b3JlIHZhbHVlXG4gICAgICAgICAgICAgIG1hdHJpeC5fdmFsdWVzLnB1c2gocm93KTsgLy8gaW5kZXhcblxuXG4gICAgICAgICAgICAgIG1hdHJpeC5faW5kZXgucHVzaChpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gaW5jcmVtZW50IGluZGV4XG5cblxuICAgICAgICBqKys7XG4gICAgICB9IHdoaWxlIChqIDwgY29sdW1ucyk7XG4gICAgfSAvLyBzdG9yZSBudW1iZXIgb2YgdmFsdWVzIGluIHB0clxuXG5cbiAgICBtYXRyaXguX3B0ci5wdXNoKG1hdHJpeC5faW5kZXgubGVuZ3RoKTsgLy8gc2l6ZVxuXG5cbiAgICBtYXRyaXguX3NpemUgPSBbcm93cywgY29sdW1uc107XG4gIH1cblxuICBTcGFyc2VNYXRyaXgucHJvdG90eXBlID0gbmV3IE1hdHJpeCgpO1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IFNwYXJzZU1hdHJpeFxuICAgKi9cblxuICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLmNyZWF0ZVNwYXJzZU1hdHJpeCA9IGZ1bmN0aW9uIChkYXRhLCBkYXRhdHlwZSkge1xuICAgIHJldHVybiBuZXcgU3BhcnNlTWF0cml4KGRhdGEsIGRhdGF0eXBlKTtcbiAgfTtcbiAgLyoqXG4gICAqIEF0dGFjaCB0eXBlIGluZm9ybWF0aW9uXG4gICAqL1xuXG5cbiAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS50eXBlID0gJ1NwYXJzZU1hdHJpeCc7XG4gIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUuaXNTcGFyc2VNYXRyaXggPSB0cnVlO1xuICAvKipcbiAgICogR2V0IHRoZSBtYXRyaXggdHlwZVxuICAgKlxuICAgKiBVc2FnZTpcbiAgICogICAgY29uc3QgbWF0cml4VHlwZSA9IG1hdHJpeC5nZXREYXRhVHlwZSgpICAvLyByZXRyaWV2ZXMgdGhlIG1hdHJpeCB0eXBlXG4gICAqXG4gICAqIEBtZW1iZXJPZiBTcGFyc2VNYXRyaXhcbiAgICogQHJldHVybiB7c3RyaW5nfSAgIHR5cGUgaW5mb3JtYXRpb247IGlmIG11bHRpcGxlIHR5cGVzIGFyZSBmb3VuZCBmcm9tIHRoZSBNYXRyaXgsIGl0IHdpbGwgcmV0dXJuIFwibWl4ZWRcIlxuICAgKi9cblxuICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLmdldERhdGFUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAoMCwgX2FycmF5LmdldEFycmF5RGF0YVR5cGUpKHRoaXMuX3ZhbHVlcywgX2lzLnR5cGVPZik7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgdGhlIHN0b3JhZ2UgZm9ybWF0IHVzZWQgYnkgdGhlIG1hdHJpeC5cbiAgICpcbiAgICogVXNhZ2U6XG4gICAqICAgICBjb25zdCBmb3JtYXQgPSBtYXRyaXguc3RvcmFnZSgpICAgLy8gcmV0cmlldmUgc3RvcmFnZSBmb3JtYXRcbiAgICpcbiAgICogQG1lbWJlcm9mIFNwYXJzZU1hdHJpeFxuICAgKiBAcmV0dXJuIHtzdHJpbmd9ICAgICAgICAgICBUaGUgc3RvcmFnZSBmb3JtYXQuXG4gICAqL1xuXG5cbiAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS5zdG9yYWdlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAnc3BhcnNlJztcbiAgfTtcbiAgLyoqXG4gICAqIEdldCB0aGUgZGF0YXR5cGUgb2YgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBtYXRyaXguXG4gICAqXG4gICAqIFVzYWdlOlxuICAgKiAgICAgY29uc3QgZm9ybWF0ID0gbWF0cml4LmRhdGF0eXBlKCkgICAgLy8gcmV0cmlldmUgbWF0cml4IGRhdGF0eXBlXG4gICAqXG4gICAqIEBtZW1iZXJvZiBTcGFyc2VNYXRyaXhcbiAgICogQHJldHVybiB7c3RyaW5nfSAgICAgICAgICAgVGhlIGRhdGF0eXBlLlxuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUuZGF0YXR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGF0eXBlO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IFNwYXJzZU1hdHJpeFxuICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4XG4gICAqIEBwYXJhbSB7QXJyYXl9IGRhdGFcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkYXRhdHlwZV1cbiAgICovXG5cblxuICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLmNyZWF0ZSA9IGZ1bmN0aW9uIChkYXRhLCBkYXRhdHlwZSkge1xuICAgIHJldHVybiBuZXcgU3BhcnNlTWF0cml4KGRhdGEsIGRhdGF0eXBlKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCB0aGUgbWF0cml4IGRlbnNpdHkuXG4gICAqXG4gICAqIFVzYWdlOlxuICAgKiAgICAgY29uc3QgZGVuc2l0eSA9IG1hdHJpeC5kZW5zaXR5KCkgICAgICAgICAgICAgICAgICAgLy8gcmV0cmlldmUgbWF0cml4IGRlbnNpdHlcbiAgICpcbiAgICogQG1lbWJlcm9mIFNwYXJzZU1hdHJpeFxuICAgKiBAcmV0dXJuIHtudW1iZXJ9ICAgICAgICAgICBUaGUgbWF0cml4IGRlbnNpdHkuXG4gICAqL1xuXG5cbiAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS5kZW5zaXR5ID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIHJvd3MgJiBjb2x1bW5zXG4gICAgdmFyIHJvd3MgPSB0aGlzLl9zaXplWzBdO1xuICAgIHZhciBjb2x1bW5zID0gdGhpcy5fc2l6ZVsxXTsgLy8gY2FsY3VsYXRlIGRlbnNpdHlcblxuICAgIHJldHVybiByb3dzICE9PSAwICYmIGNvbHVtbnMgIT09IDAgPyB0aGlzLl9pbmRleC5sZW5ndGggLyAocm93cyAqIGNvbHVtbnMpIDogMDtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIHN1YnNldCBvZiB0aGUgbWF0cml4LCBvciByZXBsYWNlIGEgc3Vic2V0IG9mIHRoZSBtYXRyaXguXG4gICAqXG4gICAqIFVzYWdlOlxuICAgKiAgICAgY29uc3Qgc3Vic2V0ID0gbWF0cml4LnN1YnNldChpbmRleCkgICAgICAgICAgICAgICAvLyByZXRyaWV2ZSBzdWJzZXRcbiAgICogICAgIGNvbnN0IHZhbHVlID0gbWF0cml4LnN1YnNldChpbmRleCwgcmVwbGFjZW1lbnQpICAgLy8gcmVwbGFjZSBzdWJzZXRcbiAgICpcbiAgICogQG1lbWJlcm9mIFNwYXJzZU1hdHJpeFxuICAgKiBAcGFyYW0ge0luZGV4fSBpbmRleFxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4IHwgKn0gW3JlcGxhY2VtZW50XVxuICAgKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWU9MF0gICAgICBEZWZhdWx0IHZhbHVlLCBmaWxsZWQgaW4gb24gbmV3IGVudHJpZXMgd2hlblxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWF0cml4IGlzIHJlc2l6ZWQuIElmIG5vdCBwcm92aWRlZCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IG1hdHJpeCBlbGVtZW50cyB3aWxsIGJlIGZpbGxlZCB3aXRoIHplcm9zLlxuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUuc3Vic2V0ID0gZnVuY3Rpb24gKGluZGV4LCByZXBsYWNlbWVudCwgZGVmYXVsdFZhbHVlKSB7XG4gICAgLy8gY2hlY2sgaXQgaXMgYSBwYXR0ZXJuIG1hdHJpeFxuICAgIGlmICghdGhpcy5fdmFsdWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBpbnZva2Ugc3Vic2V0IG9uIGEgUGF0dGVybiBvbmx5IG1hdHJpeCcpO1xuICAgIH0gLy8gY2hlY2sgYXJndW1lbnRzXG5cblxuICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gX2dldHN1YnNldCh0aGlzLCBpbmRleCk7XG4gICAgICAvLyBpbnRlbnRpb25hbCBmYWxsIHRocm91Z2hcblxuICAgICAgY2FzZSAyOlxuICAgICAgY2FzZSAzOlxuICAgICAgICByZXR1cm4gX3NldHN1YnNldCh0aGlzLCBpbmRleCwgcmVwbGFjZW1lbnQsIGRlZmF1bHRWYWx1ZSk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cycpO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBfZ2V0c3Vic2V0KG1hdHJpeCwgaWR4KSB7XG4gICAgLy8gY2hlY2sgaWR4XG4gICAgaWYgKCEoMCwgX2lzLmlzSW5kZXgpKGlkeCkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgaW5kZXgnKTtcbiAgICB9XG5cbiAgICB2YXIgaXNTY2FsYXIgPSBpZHguaXNTY2FsYXIoKTtcblxuICAgIGlmIChpc1NjYWxhcikge1xuICAgICAgLy8gcmV0dXJuIGEgc2NhbGFyXG4gICAgICByZXR1cm4gbWF0cml4LmdldChpZHgubWluKCkpO1xuICAgIH0gLy8gdmFsaWRhdGUgZGltZW5zaW9uc1xuXG5cbiAgICB2YXIgc2l6ZSA9IGlkeC5zaXplKCk7XG5cbiAgICBpZiAoc2l6ZS5sZW5ndGggIT09IG1hdHJpeC5fc2l6ZS5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3Ioc2l6ZS5sZW5ndGgsIG1hdHJpeC5fc2l6ZS5sZW5ndGgpO1xuICAgIH0gLy8gdmFyc1xuXG5cbiAgICB2YXIgaSwgaWksIGssIGtrOyAvLyB2YWxpZGF0ZSBpZiBhbnkgb2YgdGhlIHJhbmdlcyBpbiB0aGUgaW5kZXggaXMgb3V0IG9mIHJhbmdlXG5cbiAgICB2YXIgbWluID0gaWR4Lm1pbigpO1xuICAgIHZhciBtYXggPSBpZHgubWF4KCk7XG5cbiAgICBmb3IgKGkgPSAwLCBpaSA9IG1hdHJpeC5fc2l6ZS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKG1pbltpXSwgbWF0cml4Ll9zaXplW2ldKTtcbiAgICAgICgwLCBfYXJyYXkudmFsaWRhdGVJbmRleCkobWF4W2ldLCBtYXRyaXguX3NpemVbaV0pO1xuICAgIH0gLy8gbWF0cml4IGFycmF5c1xuXG5cbiAgICB2YXIgbXZhbHVlcyA9IG1hdHJpeC5fdmFsdWVzO1xuICAgIHZhciBtaW5kZXggPSBtYXRyaXguX2luZGV4O1xuICAgIHZhciBtcHRyID0gbWF0cml4Ll9wdHI7IC8vIHJvd3MgJiBjb2x1bW5zIGRpbWVuc2lvbnMgZm9yIHJlc3VsdCBtYXRyaXhcblxuICAgIHZhciByb3dzID0gaWR4LmRpbWVuc2lvbigwKTtcbiAgICB2YXIgY29sdW1ucyA9IGlkeC5kaW1lbnNpb24oMSk7IC8vIHdvcmtzcGFjZSAmIHBlcm11dGF0aW9uIHZlY3RvclxuXG4gICAgdmFyIHcgPSBbXTtcbiAgICB2YXIgcHYgPSBbXTsgLy8gbG9vcCByb3dzIGluIHJlc3VsdGluZyBtYXRyaXhcblxuICAgIHJvd3MuZm9yRWFjaChmdW5jdGlvbiAoaSwgcikge1xuICAgICAgLy8gdXBkYXRlIHBlcm11dGF0aW9uIHZlY3RvclxuICAgICAgcHZbaV0gPSByWzBdOyAvLyBtYXJrIGkgaW4gd29ya3NwYWNlXG5cbiAgICAgIHdbaV0gPSB0cnVlO1xuICAgIH0pOyAvLyByZXN1bHQgbWF0cml4IGFycmF5c1xuXG4gICAgdmFyIHZhbHVlcyA9IG12YWx1ZXMgPyBbXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgaW5kZXggPSBbXTtcbiAgICB2YXIgcHRyID0gW107IC8vIGxvb3AgY29sdW1ucyBpbiByZXN1bHQgbWF0cml4XG5cbiAgICBjb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGopIHtcbiAgICAgIC8vIHVwZGF0ZSBwdHJcbiAgICAgIHB0ci5wdXNoKGluZGV4Lmxlbmd0aCk7IC8vIGxvb3AgdmFsdWVzIGluIGNvbHVtbiBqXG5cbiAgICAgIGZvciAoayA9IG1wdHJbal0sIGtrID0gbXB0cltqICsgMV07IGsgPCBrazsgaysrKSB7XG4gICAgICAgIC8vIHJvd1xuICAgICAgICBpID0gbWluZGV4W2tdOyAvLyBjaGVjayByb3cgaXMgaW4gcmVzdWx0IG1hdHJpeFxuXG4gICAgICAgIGlmICh3W2ldID09PSB0cnVlKSB7XG4gICAgICAgICAgLy8gcHVzaCBpbmRleFxuICAgICAgICAgIGluZGV4LnB1c2gocHZbaV0pOyAvLyBjaGVjayB3ZSBuZWVkIHRvIHByb2Nlc3MgdmFsdWVzXG5cbiAgICAgICAgICBpZiAodmFsdWVzKSB7XG4gICAgICAgICAgICB2YWx1ZXMucHVzaChtdmFsdWVzW2tdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTsgLy8gdXBkYXRlIHB0clxuXG4gICAgcHRyLnB1c2goaW5kZXgubGVuZ3RoKTsgLy8gcmV0dXJuIG1hdHJpeFxuXG4gICAgcmV0dXJuIG5ldyBTcGFyc2VNYXRyaXgoe1xuICAgICAgdmFsdWVzOiB2YWx1ZXMsXG4gICAgICBpbmRleDogaW5kZXgsXG4gICAgICBwdHI6IHB0cixcbiAgICAgIHNpemU6IHNpemUsXG4gICAgICBkYXRhdHlwZTogbWF0cml4Ll9kYXRhdHlwZVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gX3NldHN1YnNldChtYXRyaXgsIGluZGV4LCBzdWJtYXRyaXgsIGRlZmF1bHRWYWx1ZSkge1xuICAgIC8vIGNoZWNrIGluZGV4XG4gICAgaWYgKCFpbmRleCB8fCBpbmRleC5pc0luZGV4ICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGluZGV4Jyk7XG4gICAgfSAvLyBnZXQgaW5kZXggc2l6ZSBhbmQgY2hlY2sgd2hldGhlciB0aGUgaW5kZXggY29udGFpbnMgYSBzaW5nbGUgdmFsdWVcblxuXG4gICAgdmFyIGlTaXplID0gaW5kZXguc2l6ZSgpO1xuICAgIHZhciBpc1NjYWxhciA9IGluZGV4LmlzU2NhbGFyKCk7IC8vIGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiB0aGUgc3VibWF0cml4LCBhbmQgY29udmVydCBpdCBpbnRvIGFuIEFycmF5IGlmIG5lZWRlZFxuXG4gICAgdmFyIHNTaXplO1xuXG4gICAgaWYgKCgwLCBfaXMuaXNNYXRyaXgpKHN1Ym1hdHJpeCkpIHtcbiAgICAgIC8vIHN1Ym1hdHJpeCBzaXplXG4gICAgICBzU2l6ZSA9IHN1Ym1hdHJpeC5zaXplKCk7IC8vIHVzZSBhcnJheSByZXByZXNlbnRhdGlvblxuXG4gICAgICBzdWJtYXRyaXggPSBzdWJtYXRyaXgudG9BcnJheSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBnZXQgc3VibWF0cml4IHNpemUgKGFycmF5LCBzY2FsYXIpXG4gICAgICBzU2l6ZSA9ICgwLCBfYXJyYXkuYXJyYXlTaXplKShzdWJtYXRyaXgpO1xuICAgIH0gLy8gY2hlY2sgaW5kZXggaXMgYSBzY2FsYXJcblxuXG4gICAgaWYgKGlzU2NhbGFyKSB7XG4gICAgICAvLyB2ZXJpZnkgc3VibWF0cml4IGlzIGEgc2NhbGFyXG4gICAgICBpZiAoc1NpemUubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1NjYWxhciBleHBlY3RlZCcpO1xuICAgICAgfSAvLyBzZXQgdmFsdWVcblxuXG4gICAgICBtYXRyaXguc2V0KGluZGV4Lm1pbigpLCBzdWJtYXRyaXgsIGRlZmF1bHRWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHZhbGlkYXRlIGRpbWVuc2lvbnMsIGluZGV4IHNpemUgbXVzdCBiZSBvbmUgb3IgdHdvIGRpbWVuc2lvbnNcbiAgICAgIGlmIChpU2l6ZS5sZW5ndGggIT09IDEgJiYgaVNpemUubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3IoaVNpemUubGVuZ3RoLCBtYXRyaXguX3NpemUubGVuZ3RoLCAnPCcpO1xuICAgICAgfSAvLyBjaGVjayBzdWJtYXRyaXggYW5kIGluZGV4IGhhdmUgdGhlIHNhbWUgZGltZW5zaW9uc1xuXG5cbiAgICAgIGlmIChzU2l6ZS5sZW5ndGggPCBpU2l6ZS5sZW5ndGgpIHtcbiAgICAgICAgLy8gY2FsY3VsYXRlIG51bWJlciBvZiBtaXNzaW5nIG91dGVyIGRpbWVuc2lvbnNcbiAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICB2YXIgb3V0ZXIgPSAwO1xuXG4gICAgICAgIHdoaWxlIChpU2l6ZVtpXSA9PT0gMSAmJiBzU2l6ZVtpXSA9PT0gMSkge1xuICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlIChpU2l6ZVtpXSA9PT0gMSkge1xuICAgICAgICAgIG91dGVyKys7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9IC8vIHVuc3F1ZWV6ZSBib3RoIG91dGVyIGFuZCBpbm5lciBkaW1lbnNpb25zXG5cblxuICAgICAgICBzdWJtYXRyaXggPSAoMCwgX2FycmF5LnVuc3F1ZWV6ZSkoc3VibWF0cml4LCBpU2l6ZS5sZW5ndGgsIG91dGVyLCBzU2l6ZSk7XG4gICAgICB9IC8vIGNoZWNrIHdoZXRoZXIgdGhlIHNpemUgb2YgdGhlIHN1Ym1hdHJpeCBtYXRjaGVzIHRoZSBpbmRleCBzaXplXG5cblxuICAgICAgaWYgKCEoMCwgX29iamVjdC5kZWVwU3RyaWN0RXF1YWwpKGlTaXplLCBzU2l6ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihpU2l6ZSwgc1NpemUsICc+Jyk7XG4gICAgICB9IC8vIG9mZnNldHNcblxuXG4gICAgICB2YXIgeDAgPSBpbmRleC5taW4oKVswXTtcbiAgICAgIHZhciB5MCA9IGluZGV4Lm1pbigpWzFdOyAvLyBzdWJtYXRyaXggcm93cyBhbmQgY29sdW1uc1xuXG4gICAgICB2YXIgbSA9IHNTaXplWzBdO1xuICAgICAgdmFyIG4gPSBzU2l6ZVsxXTsgLy8gbG9vcCBzdWJtYXRyaXhcblxuICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCBtOyB4KyspIHtcbiAgICAgICAgLy8gbG9vcCBjb2x1bW5zXG4gICAgICAgIGZvciAodmFyIHkgPSAwOyB5IDwgbjsgeSsrKSB7XG4gICAgICAgICAgLy8gdmFsdWUgYXQgaSwgalxuICAgICAgICAgIHZhciB2ID0gc3VibWF0cml4W3hdW3ldOyAvLyBpbnZva2Ugc2V0ICh6ZXJvIHZhbHVlIHdpbGwgcmVtb3ZlIGVudHJ5IGZyb20gbWF0cml4KVxuXG4gICAgICAgICAgbWF0cml4LnNldChbeCArIHgwLCB5ICsgeTBdLCB2LCBkZWZhdWx0VmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdHJpeDtcbiAgfVxuICAvKipcbiAgICogR2V0IGEgc2luZ2xlIGVsZW1lbnQgZnJvbSB0aGUgbWF0cml4LlxuICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4XG4gICAqIEBwYXJhbSB7bnVtYmVyW119IGluZGV4ICAgWmVyby1iYXNlZCBpbmRleFxuICAgKiBAcmV0dXJuIHsqfSB2YWx1ZVxuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgaWYgKCEoMCwgX2lzLmlzQXJyYXkpKGluZGV4KSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgZXhwZWN0ZWQnKTtcbiAgICB9XG5cbiAgICBpZiAoaW5kZXgubGVuZ3RoICE9PSB0aGlzLl9zaXplLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihpbmRleC5sZW5ndGgsIHRoaXMuX3NpemUubGVuZ3RoKTtcbiAgICB9IC8vIGNoZWNrIGl0IGlzIGEgcGF0dGVybiBtYXRyaXhcblxuXG4gICAgaWYgKCF0aGlzLl92YWx1ZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSBnZXQgb24gYSBQYXR0ZXJuIG9ubHkgbWF0cml4Jyk7XG4gICAgfSAvLyByb3cgYW5kIGNvbHVtblxuXG5cbiAgICB2YXIgaSA9IGluZGV4WzBdO1xuICAgIHZhciBqID0gaW5kZXhbMV07IC8vIGNoZWNrIGksIGogYXJlIHZhbGlkXG5cbiAgICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKGksIHRoaXMuX3NpemVbMF0pO1xuICAgICgwLCBfYXJyYXkudmFsaWRhdGVJbmRleCkoaiwgdGhpcy5fc2l6ZVsxXSk7IC8vIGZpbmQgdmFsdWUgaW5kZXhcblxuICAgIHZhciBrID0gX2dldFZhbHVlSW5kZXgoaSwgdGhpcy5fcHRyW2pdLCB0aGlzLl9wdHJbaiArIDFdLCB0aGlzLl9pbmRleCk7IC8vIGNoZWNrIGsgaXMgcHJpb3IgdG8gbmV4dCBjb2x1bW4gayBhbmQgaXQgaXMgaW4gdGhlIGNvcnJlY3Qgcm93XG5cblxuICAgIGlmIChrIDwgdGhpcy5fcHRyW2ogKyAxXSAmJiB0aGlzLl9pbmRleFtrXSA9PT0gaSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlc1trXTtcbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfTtcbiAgLyoqXG4gICAqIFJlcGxhY2UgYSBzaW5nbGUgZWxlbWVudCBpbiB0aGUgbWF0cml4LlxuICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4XG4gICAqIEBwYXJhbSB7bnVtYmVyW119IGluZGV4ICAgWmVyby1iYXNlZCBpbmRleFxuICAgKiBAcGFyYW0geyp9IHZcbiAgICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXSAgICAgICAgRGVmYXVsdCB2YWx1ZSwgZmlsbGVkIGluIG9uIG5ldyBlbnRyaWVzIHdoZW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hdHJpeCBpcyByZXNpemVkLiBJZiBub3QgcHJvdmlkZWQsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBtYXRyaXggZWxlbWVudHMgd2lsbCBiZSBzZXQgdG8gemVyby5cbiAgICogQHJldHVybiB7U3BhcnNlTWF0cml4fSBzZWxmXG4gICAqL1xuXG5cbiAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoaW5kZXgsIHYsIGRlZmF1bHRWYWx1ZSkge1xuICAgIGlmICghKDAsIF9pcy5pc0FycmF5KShpbmRleCkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IGV4cGVjdGVkJyk7XG4gICAgfVxuXG4gICAgaWYgKGluZGV4Lmxlbmd0aCAhPT0gdGhpcy5fc2l6ZS5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3IoaW5kZXgubGVuZ3RoLCB0aGlzLl9zaXplLmxlbmd0aCk7XG4gICAgfSAvLyBjaGVjayBpdCBpcyBhIHBhdHRlcm4gbWF0cml4XG5cblxuICAgIGlmICghdGhpcy5fdmFsdWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBpbnZva2Ugc2V0IG9uIGEgUGF0dGVybiBvbmx5IG1hdHJpeCcpO1xuICAgIH0gLy8gcm93IGFuZCBjb2x1bW5cblxuXG4gICAgdmFyIGkgPSBpbmRleFswXTtcbiAgICB2YXIgaiA9IGluZGV4WzFdOyAvLyByb3dzICYgY29sdW1uc1xuXG4gICAgdmFyIHJvd3MgPSB0aGlzLl9zaXplWzBdO1xuICAgIHZhciBjb2x1bW5zID0gdGhpcy5fc2l6ZVsxXTsgLy8gZXF1YWwgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGVxID0gZXF1YWxTY2FsYXI7IC8vIHplcm8gdmFsdWVcblxuICAgIHZhciB6ZXJvID0gMDtcblxuICAgIGlmICgoMCwgX2lzLmlzU3RyaW5nKSh0aGlzLl9kYXRhdHlwZSkpIHtcbiAgICAgIC8vIGZpbmQgc2lnbmF0dXJlIHRoYXQgbWF0Y2hlcyAoZGF0YXR5cGUsIGRhdGF0eXBlKVxuICAgICAgZXEgPSB0eXBlZC5maW5kKGVxdWFsU2NhbGFyLCBbdGhpcy5fZGF0YXR5cGUsIHRoaXMuX2RhdGF0eXBlXSkgfHwgZXF1YWxTY2FsYXI7IC8vIGNvbnZlcnQgMCB0byB0aGUgc2FtZSBkYXRhdHlwZVxuXG4gICAgICB6ZXJvID0gdHlwZWQuY29udmVydCgwLCB0aGlzLl9kYXRhdHlwZSk7XG4gICAgfSAvLyBjaGVjayB3ZSBuZWVkIHRvIHJlc2l6ZSBtYXRyaXhcblxuXG4gICAgaWYgKGkgPiByb3dzIC0gMSB8fCBqID4gY29sdW1ucyAtIDEpIHtcbiAgICAgIC8vIHJlc2l6ZSBtYXRyaXhcbiAgICAgIF9yZXNpemUodGhpcywgTWF0aC5tYXgoaSArIDEsIHJvd3MpLCBNYXRoLm1heChqICsgMSwgY29sdW1ucyksIGRlZmF1bHRWYWx1ZSk7IC8vIHVwZGF0ZSByb3dzICYgY29sdW1uc1xuXG5cbiAgICAgIHJvd3MgPSB0aGlzLl9zaXplWzBdO1xuICAgICAgY29sdW1ucyA9IHRoaXMuX3NpemVbMV07XG4gICAgfSAvLyBjaGVjayBpLCBqIGFyZSB2YWxpZFxuXG5cbiAgICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKGksIHJvd3MpO1xuICAgICgwLCBfYXJyYXkudmFsaWRhdGVJbmRleCkoaiwgY29sdW1ucyk7IC8vIGZpbmQgdmFsdWUgaW5kZXhcblxuICAgIHZhciBrID0gX2dldFZhbHVlSW5kZXgoaSwgdGhpcy5fcHRyW2pdLCB0aGlzLl9wdHJbaiArIDFdLCB0aGlzLl9pbmRleCk7IC8vIGNoZWNrIGsgaXMgcHJpb3IgdG8gbmV4dCBjb2x1bW4gayBhbmQgaXQgaXMgaW4gdGhlIGNvcnJlY3Qgcm93XG5cblxuICAgIGlmIChrIDwgdGhpcy5fcHRyW2ogKyAxXSAmJiB0aGlzLl9pbmRleFtrXSA9PT0gaSkge1xuICAgICAgLy8gY2hlY2sgdmFsdWUgIT0gMFxuICAgICAgaWYgKCFlcSh2LCB6ZXJvKSkge1xuICAgICAgICAvLyB1cGRhdGUgdmFsdWVcbiAgICAgICAgdGhpcy5fdmFsdWVzW2tdID0gdjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHJlbW92ZSB2YWx1ZSBmcm9tIG1hdHJpeFxuICAgICAgICBfcmVtb3ZlKGssIGosIHRoaXMuX3ZhbHVlcywgdGhpcy5faW5kZXgsIHRoaXMuX3B0cik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGluc2VydCB2YWx1ZSBAIChpLCBqKVxuICAgICAgX2luc2VydChrLCBpLCBqLCB2LCB0aGlzLl92YWx1ZXMsIHRoaXMuX2luZGV4LCB0aGlzLl9wdHIpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIGZ1bmN0aW9uIF9nZXRWYWx1ZUluZGV4KGksIHRvcCwgYm90dG9tLCBpbmRleCkge1xuICAgIC8vIGNoZWNrIHJvdyBpcyBvbiB0aGUgYm90dG9tIHNpZGVcbiAgICBpZiAoYm90dG9tIC0gdG9wID09PSAwKSB7XG4gICAgICByZXR1cm4gYm90dG9tO1xuICAgIH0gLy8gbG9vcCByb3dzIFt0b3AsIGJvdHRvbVtcblxuXG4gICAgZm9yICh2YXIgciA9IHRvcDsgciA8IGJvdHRvbTsgcisrKSB7XG4gICAgICAvLyBjaGVjayB3ZSBmb3VuZCB2YWx1ZSBpbmRleFxuICAgICAgaWYgKGluZGV4W3JdID09PSBpKSB7XG4gICAgICAgIHJldHVybiByO1xuICAgICAgfVxuICAgIH0gLy8gd2UgZGlkIG5vdCBmaW5kIHJvd1xuXG5cbiAgICByZXR1cm4gdG9wO1xuICB9XG5cbiAgZnVuY3Rpb24gX3JlbW92ZShrLCBqLCB2YWx1ZXMsIGluZGV4LCBwdHIpIHtcbiAgICAvLyByZW1vdmUgdmFsdWUgQCBrXG4gICAgdmFsdWVzLnNwbGljZShrLCAxKTtcbiAgICBpbmRleC5zcGxpY2UoaywgMSk7IC8vIHVwZGF0ZSBwb2ludGVyc1xuXG4gICAgZm9yICh2YXIgeCA9IGogKyAxOyB4IDwgcHRyLmxlbmd0aDsgeCsrKSB7XG4gICAgICBwdHJbeF0tLTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBfaW5zZXJ0KGssIGksIGosIHYsIHZhbHVlcywgaW5kZXgsIHB0cikge1xuICAgIC8vIGluc2VydCB2YWx1ZVxuICAgIHZhbHVlcy5zcGxpY2UoaywgMCwgdik7IC8vIHVwZGF0ZSByb3cgZm9yIGtcblxuICAgIGluZGV4LnNwbGljZShrLCAwLCBpKTsgLy8gdXBkYXRlIGNvbHVtbiBwb2ludGVyc1xuXG4gICAgZm9yICh2YXIgeCA9IGogKyAxOyB4IDwgcHRyLmxlbmd0aDsgeCsrKSB7XG4gICAgICBwdHJbeF0rKztcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJlc2l6ZSB0aGUgbWF0cml4IHRvIHRoZSBnaXZlbiBzaXplLiBSZXR1cm5zIGEgY29weSBvZiB0aGUgbWF0cml4IHdoZW5cbiAgICogYGNvcHk9dHJ1ZWAsIG90aGVyd2lzZSByZXR1cm4gdGhlIG1hdHJpeCBpdHNlbGYgKHJlc2l6ZSBpbiBwbGFjZSkuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBTcGFyc2VNYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJbXX0gc2l6ZSAgICAgICAgICAgVGhlIG5ldyBzaXplIHRoZSBtYXRyaXggc2hvdWxkIGhhdmUuXG4gICAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZT0wXSAgICAgIERlZmF1bHQgdmFsdWUsIGZpbGxlZCBpbiBvbiBuZXcgZW50cmllcy5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgbm90IHByb3ZpZGVkLCB0aGUgbWF0cml4IGVsZW1lbnRzIHdpbGxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgZmlsbGVkIHdpdGggemVyb3MuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NvcHldICAgICAgICAgIFJldHVybiBhIHJlc2l6ZWQgY29weSBvZiB0aGUgbWF0cml4XG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgIFRoZSByZXNpemVkIG1hdHJpeFxuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHNpemUsIGRlZmF1bHRWYWx1ZSwgY29weSkge1xuICAgIC8vIHZhbGlkYXRlIGFyZ3VtZW50c1xuICAgIGlmICghKDAsIF9pcy5pc0FycmF5KShzaXplKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgZXhwZWN0ZWQnKTtcbiAgICB9XG5cbiAgICBpZiAoc2l6ZS5sZW5ndGggIT09IDIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT25seSB0d28gZGltZW5zaW9ucyBtYXRyaXggYXJlIHN1cHBvcnRlZCcpO1xuICAgIH0gLy8gY2hlY2sgc2l6ZXNcblxuXG4gICAgc2l6ZS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgaWYgKCEoMCwgX2lzLmlzTnVtYmVyKSh2YWx1ZSkgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikodmFsdWUpIHx8IHZhbHVlIDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHNpemUsIG11c3QgY29udGFpbiBwb3NpdGl2ZSBpbnRlZ2VycyAnICsgJyhzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShzaXplKSArICcpJyk7XG4gICAgICB9XG4gICAgfSk7IC8vIG1hdHJpeCB0byByZXNpemVcblxuICAgIHZhciBtID0gY29weSA/IHRoaXMuY2xvbmUoKSA6IHRoaXM7IC8vIHJlc2l6ZSBtYXRyaXhcblxuICAgIHJldHVybiBfcmVzaXplKG0sIHNpemVbMF0sIHNpemVbMV0sIGRlZmF1bHRWYWx1ZSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gX3Jlc2l6ZShtYXRyaXgsIHJvd3MsIGNvbHVtbnMsIGRlZmF1bHRWYWx1ZSkge1xuICAgIC8vIHZhbHVlIHRvIGluc2VydCBhdCB0aGUgdGltZSBvZiBncm93aW5nIG1hdHJpeFxuICAgIHZhciB2YWx1ZSA9IGRlZmF1bHRWYWx1ZSB8fCAwOyAvLyBlcXVhbCBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgZXEgPSBlcXVhbFNjYWxhcjsgLy8gemVybyB2YWx1ZVxuXG4gICAgdmFyIHplcm8gPSAwO1xuXG4gICAgaWYgKCgwLCBfaXMuaXNTdHJpbmcpKG1hdHJpeC5fZGF0YXR5cGUpKSB7XG4gICAgICAvLyBmaW5kIHNpZ25hdHVyZSB0aGF0IG1hdGNoZXMgKGRhdGF0eXBlLCBkYXRhdHlwZSlcbiAgICAgIGVxID0gdHlwZWQuZmluZChlcXVhbFNjYWxhciwgW21hdHJpeC5fZGF0YXR5cGUsIG1hdHJpeC5fZGF0YXR5cGVdKSB8fCBlcXVhbFNjYWxhcjsgLy8gY29udmVydCAwIHRvIHRoZSBzYW1lIGRhdGF0eXBlXG5cbiAgICAgIHplcm8gPSB0eXBlZC5jb252ZXJ0KDAsIG1hdHJpeC5fZGF0YXR5cGUpOyAvLyBjb252ZXJ0IHZhbHVlIHRvIHRoZSBzYW1lIGRhdGF0eXBlXG5cbiAgICAgIHZhbHVlID0gdHlwZWQuY29udmVydCh2YWx1ZSwgbWF0cml4Ll9kYXRhdHlwZSk7XG4gICAgfSAvLyBzaG91bGQgd2UgaW5zZXJ0IHRoZSB2YWx1ZT9cblxuXG4gICAgdmFyIGlucyA9ICFlcSh2YWx1ZSwgemVybyk7IC8vIG9sZCBjb2x1bW5zIGFuZCByb3dzXG5cbiAgICB2YXIgciA9IG1hdHJpeC5fc2l6ZVswXTtcbiAgICB2YXIgYyA9IG1hdHJpeC5fc2l6ZVsxXTtcbiAgICB2YXIgaSwgaiwgazsgLy8gY2hlY2sgd2UgbmVlZCB0byBpbmNyZWFzZSBjb2x1bW5zXG5cbiAgICBpZiAoY29sdW1ucyA+IGMpIHtcbiAgICAgIC8vIGxvb3AgbmV3IGNvbHVtbnNcbiAgICAgIGZvciAoaiA9IGM7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgICAgLy8gdXBkYXRlIG1hdHJpeC5fcHRyIGZvciBjdXJyZW50IGNvbHVtblxuICAgICAgICBtYXRyaXguX3B0cltqXSA9IG1hdHJpeC5fdmFsdWVzLmxlbmd0aDsgLy8gY2hlY2sgd2UgbmVlZCB0byBpbnNlcnQgbWF0cml4Ll92YWx1ZXNcblxuICAgICAgICBpZiAoaW5zKSB7XG4gICAgICAgICAgLy8gbG9vcCByb3dzXG4gICAgICAgICAgZm9yIChpID0gMDsgaSA8IHI7IGkrKykge1xuICAgICAgICAgICAgLy8gYWRkIG5ldyBtYXRyaXguX3ZhbHVlc1xuICAgICAgICAgICAgbWF0cml4Ll92YWx1ZXMucHVzaCh2YWx1ZSk7IC8vIHVwZGF0ZSBtYXRyaXguX2luZGV4XG5cblxuICAgICAgICAgICAgbWF0cml4Ll9pbmRleC5wdXNoKGkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSAvLyBzdG9yZSBudW1iZXIgb2YgbWF0cml4Ll92YWx1ZXMgaW4gbWF0cml4Ll9wdHJcblxuXG4gICAgICBtYXRyaXguX3B0cltjb2x1bW5zXSA9IG1hdHJpeC5fdmFsdWVzLmxlbmd0aDtcbiAgICB9IGVsc2UgaWYgKGNvbHVtbnMgPCBjKSB7XG4gICAgICAvLyB0cnVuY2F0ZSBtYXRyaXguX3B0clxuICAgICAgbWF0cml4Ll9wdHIuc3BsaWNlKGNvbHVtbnMgKyAxLCBjIC0gY29sdW1ucyk7IC8vIHRydW5jYXRlIG1hdHJpeC5fdmFsdWVzIGFuZCBtYXRyaXguX2luZGV4XG5cblxuICAgICAgbWF0cml4Ll92YWx1ZXMuc3BsaWNlKG1hdHJpeC5fcHRyW2NvbHVtbnNdLCBtYXRyaXguX3ZhbHVlcy5sZW5ndGgpO1xuXG4gICAgICBtYXRyaXguX2luZGV4LnNwbGljZShtYXRyaXguX3B0cltjb2x1bW5zXSwgbWF0cml4Ll9pbmRleC5sZW5ndGgpO1xuICAgIH0gLy8gdXBkYXRlIGNvbHVtbnNcblxuXG4gICAgYyA9IGNvbHVtbnM7IC8vIGNoZWNrIHdlIG5lZWQgdG8gaW5jcmVhc2Ugcm93c1xuXG4gICAgaWYgKHJvd3MgPiByKSB7XG4gICAgICAvLyBjaGVjayB3ZSBoYXZlIHRvIGluc2VydCB2YWx1ZXNcbiAgICAgIGlmIChpbnMpIHtcbiAgICAgICAgLy8gaW5zZXJ0c1xuICAgICAgICB2YXIgbiA9IDA7IC8vIGxvb3AgY29sdW1uc1xuXG4gICAgICAgIGZvciAoaiA9IDA7IGogPCBjOyBqKyspIHtcbiAgICAgICAgICAvLyB1cGRhdGUgbWF0cml4Ll9wdHIgZm9yIGN1cnJlbnQgY29sdW1uXG4gICAgICAgICAgbWF0cml4Ll9wdHJbal0gPSBtYXRyaXguX3B0cltqXSArIG47IC8vIHdoZXJlIHRvIGluc2VydCBtYXRyaXguX3ZhbHVlc1xuXG4gICAgICAgICAgayA9IG1hdHJpeC5fcHRyW2ogKyAxXSArIG47IC8vIHBvaW50ZXJcblxuICAgICAgICAgIHZhciBwID0gMDsgLy8gbG9vcCBuZXcgcm93cywgaW5pdGlhbGl6ZSBwb2ludGVyXG5cbiAgICAgICAgICBmb3IgKGkgPSByOyBpIDwgcm93czsgaSsrLCBwKyspIHtcbiAgICAgICAgICAgIC8vIGFkZCB2YWx1ZVxuICAgICAgICAgICAgbWF0cml4Ll92YWx1ZXMuc3BsaWNlKGsgKyBwLCAwLCB2YWx1ZSk7IC8vIHVwZGF0ZSBtYXRyaXguX2luZGV4XG5cblxuICAgICAgICAgICAgbWF0cml4Ll9pbmRleC5zcGxpY2UoayArIHAsIDAsIGkpOyAvLyBpbmNyZW1lbnQgaW5zZXJ0c1xuXG5cbiAgICAgICAgICAgIG4rKztcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gc3RvcmUgbnVtYmVyIG9mIG1hdHJpeC5fdmFsdWVzIGluIG1hdHJpeC5fcHRyXG5cblxuICAgICAgICBtYXRyaXguX3B0cltjXSA9IG1hdHJpeC5fdmFsdWVzLmxlbmd0aDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJvd3MgPCByKSB7XG4gICAgICAvLyBkZWxldGVzXG4gICAgICB2YXIgZCA9IDA7IC8vIGxvb3AgY29sdW1uc1xuXG4gICAgICBmb3IgKGogPSAwOyBqIDwgYzsgaisrKSB7XG4gICAgICAgIC8vIHVwZGF0ZSBtYXRyaXguX3B0ciBmb3IgY3VycmVudCBjb2x1bW5cbiAgICAgICAgbWF0cml4Ll9wdHJbal0gPSBtYXRyaXguX3B0cltqXSAtIGQ7IC8vIHdoZXJlIG1hdHJpeC5fdmFsdWVzIHN0YXJ0IGZvciBuZXh0IGNvbHVtblxuXG4gICAgICAgIHZhciBrMCA9IG1hdHJpeC5fcHRyW2pdO1xuICAgICAgICB2YXIgazEgPSBtYXRyaXguX3B0cltqICsgMV0gLSBkOyAvLyBsb29wIG1hdHJpeC5faW5kZXhcblxuICAgICAgICBmb3IgKGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgICAvLyByb3dcbiAgICAgICAgICBpID0gbWF0cml4Ll9pbmRleFtrXTsgLy8gY2hlY2sgd2UgbmVlZCB0byBkZWxldGUgdmFsdWUgYW5kIG1hdHJpeC5faW5kZXhcblxuICAgICAgICAgIGlmIChpID4gcm93cyAtIDEpIHtcbiAgICAgICAgICAgIC8vIHJlbW92ZSB2YWx1ZVxuICAgICAgICAgICAgbWF0cml4Ll92YWx1ZXMuc3BsaWNlKGssIDEpOyAvLyByZW1vdmUgaXRlbSBmcm9tIG1hdHJpeC5faW5kZXhcblxuXG4gICAgICAgICAgICBtYXRyaXguX2luZGV4LnNwbGljZShrLCAxKTsgLy8gaW5jcmVhc2UgZGVsZXRlc1xuXG5cbiAgICAgICAgICAgIGQrKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gdXBkYXRlIG1hdHJpeC5fcHRyIGZvciBjdXJyZW50IGNvbHVtblxuXG5cbiAgICAgIG1hdHJpeC5fcHRyW2pdID0gbWF0cml4Ll92YWx1ZXMubGVuZ3RoO1xuICAgIH0gLy8gdXBkYXRlIG1hdHJpeC5fc2l6ZVxuXG5cbiAgICBtYXRyaXguX3NpemVbMF0gPSByb3dzO1xuICAgIG1hdHJpeC5fc2l6ZVsxXSA9IGNvbHVtbnM7IC8vIHJldHVybiBtYXRyaXhcblxuICAgIHJldHVybiBtYXRyaXg7XG4gIH1cbiAgLyoqXG4gICAqIFJlc2hhcGUgdGhlIG1hdHJpeCB0byB0aGUgZ2l2ZW4gc2l6ZS4gUmV0dXJucyBhIGNvcHkgb2YgdGhlIG1hdHJpeCB3aGVuXG4gICAqIGBjb3B5PXRydWVgLCBvdGhlcndpc2UgcmV0dXJuIHRoZSBtYXRyaXggaXRzZWxmIChyZXNoYXBlIGluIHBsYWNlKS5cbiAgICpcbiAgICogTk9URTogVGhpcyBtaWdodCBiZSBiZXR0ZXIgc3VpdGVkIHRvIGNvcHkgYnkgZGVmYXVsdCwgaW5zdGVhZCBvZiBtb2RpZnlpbmdcbiAgICogICAgICAgaW4gcGxhY2UuIEZvciBub3csIGl0IG9wZXJhdGVzIGluIHBsYWNlIHRvIHJlbWFpbiBjb25zaXN0ZW50IHdpdGhcbiAgICogICAgICAgcmVzaXplKCkuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBTcGFyc2VNYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJbXX0gc2l6ZSAgICAgICAgICAgVGhlIG5ldyBzaXplIHRoZSBtYXRyaXggc2hvdWxkIGhhdmUuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NvcHldICAgICAgICAgIFJldHVybiBhIHJlc2hhcGVkIGNvcHkgb2YgdGhlIG1hdHJpeFxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgICAgICBUaGUgcmVzaGFwZWQgbWF0cml4XG4gICAqL1xuXG5cbiAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS5yZXNoYXBlID0gZnVuY3Rpb24gKHNpemUsIGNvcHkpIHtcbiAgICAvLyB2YWxpZGF0ZSBhcmd1bWVudHNcbiAgICBpZiAoISgwLCBfaXMuaXNBcnJheSkoc2l6ZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IGV4cGVjdGVkJyk7XG4gICAgfVxuXG4gICAgaWYgKHNpemUubGVuZ3RoICE9PSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NwYXJzZSBtYXRyaWNlcyBjYW4gb25seSBiZSByZXNoYXBlZCBpbiB0d28gZGltZW5zaW9ucycpO1xuICAgIH0gLy8gY2hlY2sgc2l6ZXNcblxuXG4gICAgc2l6ZS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgaWYgKCEoMCwgX2lzLmlzTnVtYmVyKSh2YWx1ZSkgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikodmFsdWUpIHx8IHZhbHVlIDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHNpemUsIG11c3QgY29udGFpbiBwb3NpdGl2ZSBpbnRlZ2VycyAnICsgJyhzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShzaXplKSArICcpJyk7XG4gICAgICB9XG4gICAgfSk7IC8vIG0gKiBuIG11c3Qgbm90IGNoYW5nZVxuXG4gICAgaWYgKHRoaXMuX3NpemVbMF0gKiB0aGlzLl9zaXplWzFdICE9PSBzaXplWzBdICogc2l6ZVsxXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXNoYXBpbmcgc3BhcnNlIG1hdHJpeCB3aWxsIHJlc3VsdCBpbiB0aGUgd3JvbmcgbnVtYmVyIG9mIGVsZW1lbnRzJyk7XG4gICAgfSAvLyBtYXRyaXggdG8gcmVzaGFwZVxuXG5cbiAgICB2YXIgbSA9IGNvcHkgPyB0aGlzLmNsb25lKCkgOiB0aGlzOyAvLyByZXR1cm4gdW5jaGFuZ2VkIGlmIHRoZSBzYW1lIHNoYXBlXG5cbiAgICBpZiAodGhpcy5fc2l6ZVswXSA9PT0gc2l6ZVswXSAmJiB0aGlzLl9zaXplWzFdID09PSBzaXplWzFdKSB7XG4gICAgICByZXR1cm4gbTtcbiAgICB9IC8vIENvbnZlcnQgdG8gQ09PIGZvcm1hdCAoZ2VuZXJhdGUgYSBjb2x1bW4gaW5kZXgpXG5cblxuICAgIHZhciBjb2xJbmRleCA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtLl9wdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbS5fcHRyW2kgKyAxXSAtIG0uX3B0cltpXTsgaisrKSB7XG4gICAgICAgIGNvbEluZGV4LnB1c2goaSk7XG4gICAgICB9XG4gICAgfSAvLyBDbG9uZSB0aGUgdmFsdWVzIGFycmF5XG5cblxuICAgIHZhciB2YWx1ZXMgPSBtLl92YWx1ZXMuc2xpY2UoKTsgLy8gQ2xvbmUgdGhlIHJvdyBpbmRleCBhcnJheVxuXG5cbiAgICB2YXIgcm93SW5kZXggPSBtLl9pbmRleC5zbGljZSgpOyAvLyBUcmFuc2Zvcm0gdGhlIChyb3csIGNvbHVtbikgaW5kaWNlc1xuXG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbS5faW5kZXgubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgcjEgPSByb3dJbmRleFtfaV07XG4gICAgICB2YXIgYzEgPSBjb2xJbmRleFtfaV07XG4gICAgICB2YXIgZmxhdCA9IHIxICogbS5fc2l6ZVsxXSArIGMxO1xuICAgICAgY29sSW5kZXhbX2ldID0gZmxhdCAlIHNpemVbMV07XG4gICAgICByb3dJbmRleFtfaV0gPSBNYXRoLmZsb29yKGZsYXQgLyBzaXplWzFdKTtcbiAgICB9IC8vIE5vdyByZXNoYXBpbmcgaXMgc3VwcG9zZWQgdG8gcHJlc2VydmUgdGhlIHJvdy1tYWpvciBvcmRlciwgQlVUIHRoZXNlIHNwYXJzZSBtYXRyaWNlcyBhcmUgc3RvcmVkXG4gICAgLy8gaW4gY29sdW1uLW1ham9yIG9yZGVyLCBzbyB3ZSBoYXZlIHRvIHJlb3JkZXIgdGhlIHZhbHVlIGFycmF5IG5vdy4gT25lIG9wdGlvbiBpcyB0byB1c2UgYSBtdWx0aXNvcnQsXG4gICAgLy8gc29ydGluZyBzZXZlcmFsIGFycmF5cyBiYXNlZCBvbiBzb21lIG90aGVyIGFycmF5LlxuICAgIC8vIE9SLCB3ZSBjb3VsZCBlYXNpbHkganVzdDpcbiAgICAvLyAxLiBSZW1vdmUgYWxsIHZhbHVlcyBmcm9tIHRoZSBtYXRyaXhcblxuXG4gICAgbS5fdmFsdWVzLmxlbmd0aCA9IDA7XG4gICAgbS5faW5kZXgubGVuZ3RoID0gMDtcbiAgICBtLl9wdHIubGVuZ3RoID0gc2l6ZVsxXSArIDE7XG4gICAgbS5fc2l6ZSA9IHNpemUuc2xpY2UoKTtcblxuICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IG0uX3B0ci5sZW5ndGg7IF9pMisrKSB7XG4gICAgICBtLl9wdHJbX2kyXSA9IDA7XG4gICAgfSAvLyAyLiBSZS1pbnNlcnQgYWxsIGVsZW1lbnRzIGluIHRoZSBwcm9wZXIgb3JkZXIgKHNpbXBsaWZpZWQgY29kZSBmcm9tIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUuc2V0KVxuICAgIC8vIFRoaXMgc3RlcCBpcyBwcm9iYWJseSB0aGUgbW9zdCB0aW1lLWNvbnN1bWluZ1xuXG5cbiAgICBmb3IgKHZhciBoID0gMDsgaCA8IHZhbHVlcy5sZW5ndGg7IGgrKykge1xuICAgICAgdmFyIF9pMyA9IHJvd0luZGV4W2hdO1xuICAgICAgdmFyIF9qID0gY29sSW5kZXhbaF07XG4gICAgICB2YXIgdiA9IHZhbHVlc1toXTtcblxuICAgICAgdmFyIGsgPSBfZ2V0VmFsdWVJbmRleChfaTMsIG0uX3B0cltfal0sIG0uX3B0cltfaiArIDFdLCBtLl9pbmRleCk7XG5cbiAgICAgIF9pbnNlcnQoaywgX2kzLCBfaiwgdiwgbS5fdmFsdWVzLCBtLl9pbmRleCwgbS5fcHRyKTtcbiAgICB9IC8vIFRoZSB2YWx1ZSBpbmRpY2VzIGFyZSBpbnNlcnRlZCBvdXQgb2Ygb3JkZXIsIGJ1dCBhcHBhcmVudGx5IHRoYXQncy4uLiBzdGlsbCBPSz9cblxuXG4gICAgcmV0dXJuIG07XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGUgbWF0cml4XG4gICAqIEBtZW1iZXJvZiBTcGFyc2VNYXRyaXhcbiAgICogQHJldHVybiB7U3BhcnNlTWF0cml4fSBjbG9uZVxuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG0gPSBuZXcgU3BhcnNlTWF0cml4KHtcbiAgICAgIHZhbHVlczogdGhpcy5fdmFsdWVzID8gKDAsIF9vYmplY3QuY2xvbmUpKHRoaXMuX3ZhbHVlcykgOiB1bmRlZmluZWQsXG4gICAgICBpbmRleDogKDAsIF9vYmplY3QuY2xvbmUpKHRoaXMuX2luZGV4KSxcbiAgICAgIHB0cjogKDAsIF9vYmplY3QuY2xvbmUpKHRoaXMuX3B0ciksXG4gICAgICBzaXplOiAoMCwgX29iamVjdC5jbG9uZSkodGhpcy5fc2l6ZSksXG4gICAgICBkYXRhdHlwZTogdGhpcy5fZGF0YXR5cGVcbiAgICB9KTtcbiAgICByZXR1cm4gbTtcbiAgfTtcbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSBzaXplIG9mIHRoZSBtYXRyaXguXG4gICAqIEBtZW1iZXJvZiBTcGFyc2VNYXRyaXhcbiAgICogQHJldHVybnMge251bWJlcltdfSBzaXplXG4gICAqL1xuXG5cbiAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS5zaXplID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLl9zaXplLnNsaWNlKDApOyAvLyBjb3B5IHRoZSBBcnJheVxuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IG1hdHJpeCB3aXRoIHRoZSByZXN1bHRzIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBleGVjdXRlZCBvblxuICAgKiBlYWNoIGVudHJ5IG9mIHRoZSBtYXRyaXguXG4gICAqIEBtZW1iZXJvZiBTcGFyc2VNYXRyaXhcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgaW52b2tlZCB3aXRoIHRocmVlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyczogdGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50LCB0aGUgaW5kZXhcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgZWxlbWVudCwgYW5kIHRoZSBNYXRyaXggYmVpbmcgdHJhdmVyc2VkLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtza2lwWmVyb3NdIEludm9rZSBjYWxsYmFjayBmdW5jdGlvbiBmb3Igbm9uLXplcm8gdmFsdWVzIG9ubHkuXG4gICAqXG4gICAqIEByZXR1cm4ge1NwYXJzZU1hdHJpeH0gbWF0cml4XG4gICAqL1xuXG5cbiAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIHNraXBaZXJvcykge1xuICAgIC8vIGNoZWNrIGl0IGlzIGEgcGF0dGVybiBtYXRyaXhcbiAgICBpZiAoIXRoaXMuX3ZhbHVlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIG1hcCBvbiBhIFBhdHRlcm4gb25seSBtYXRyaXgnKTtcbiAgICB9IC8vIG1hdHJpeCBpbnN0YW5jZVxuXG5cbiAgICB2YXIgbWUgPSB0aGlzOyAvLyByb3dzIGFuZCBjb2x1bW5zXG5cbiAgICB2YXIgcm93cyA9IHRoaXMuX3NpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSB0aGlzLl9zaXplWzFdOyAvLyBpbnZva2UgY2FsbGJhY2tcblxuICAgIHZhciBpbnZva2UgPSBmdW5jdGlvbiBpbnZva2UodiwgaSwgaikge1xuICAgICAgLy8gaW52b2tlIGNhbGxiYWNrXG4gICAgICByZXR1cm4gY2FsbGJhY2sodiwgW2ksIGpdLCBtZSk7XG4gICAgfTsgLy8gaW52b2tlIF9tYXBcblxuXG4gICAgcmV0dXJuIF9tYXAodGhpcywgMCwgcm93cyAtIDEsIDAsIGNvbHVtbnMgLSAxLCBpbnZva2UsIHNraXBaZXJvcyk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgbWF0cml4IHdpdGggdGhlIHJlc3VsdHMgb2YgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGV4ZWN1dGVkIG9uIHRoZSBpbnRlcnZhbFxuICAgKiBbbWluUm93Li5tYXhSb3csIG1pbkNvbHVtbi4ubWF4Q29sdW1uXS5cbiAgICovXG5cblxuICBmdW5jdGlvbiBfbWFwKG1hdHJpeCwgbWluUm93LCBtYXhSb3csIG1pbkNvbHVtbiwgbWF4Q29sdW1uLCBjYWxsYmFjaywgc2tpcFplcm9zKSB7XG4gICAgLy8gcmVzdWx0IGFycmF5c1xuICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICB2YXIgaW5kZXggPSBbXTtcbiAgICB2YXIgcHRyID0gW107IC8vIGVxdWFsIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBlcSA9IGVxdWFsU2NhbGFyOyAvLyB6ZXJvIHZhbHVlXG5cbiAgICB2YXIgemVybyA9IDA7XG5cbiAgICBpZiAoKDAsIF9pcy5pc1N0cmluZykobWF0cml4Ll9kYXRhdHlwZSkpIHtcbiAgICAgIC8vIGZpbmQgc2lnbmF0dXJlIHRoYXQgbWF0Y2hlcyAoZGF0YXR5cGUsIGRhdGF0eXBlKVxuICAgICAgZXEgPSB0eXBlZC5maW5kKGVxdWFsU2NhbGFyLCBbbWF0cml4Ll9kYXRhdHlwZSwgbWF0cml4Ll9kYXRhdHlwZV0pIHx8IGVxdWFsU2NhbGFyOyAvLyBjb252ZXJ0IDAgdG8gdGhlIHNhbWUgZGF0YXR5cGVcblxuICAgICAgemVybyA9IHR5cGVkLmNvbnZlcnQoMCwgbWF0cml4Ll9kYXRhdHlwZSk7XG4gICAgfSAvLyBpbnZva2UgY2FsbGJhY2tcblxuXG4gICAgdmFyIGludm9rZSA9IGZ1bmN0aW9uIGludm9rZSh2LCB4LCB5KSB7XG4gICAgICAvLyBpbnZva2UgY2FsbGJhY2tcbiAgICAgIHYgPSBjYWxsYmFjayh2LCB4LCB5KTsgLy8gY2hlY2sgdmFsdWUgIT0gMFxuXG4gICAgICBpZiAoIWVxKHYsIHplcm8pKSB7XG4gICAgICAgIC8vIHN0b3JlIHZhbHVlXG4gICAgICAgIHZhbHVlcy5wdXNoKHYpOyAvLyBpbmRleFxuXG4gICAgICAgIGluZGV4LnB1c2goeCk7XG4gICAgICB9XG4gICAgfTsgLy8gbG9vcCBjb2x1bW5zXG5cblxuICAgIGZvciAodmFyIGogPSBtaW5Db2x1bW47IGogPD0gbWF4Q29sdW1uOyBqKyspIHtcbiAgICAgIC8vIHN0b3JlIHBvaW50ZXIgdG8gdmFsdWVzIGluZGV4XG4gICAgICBwdHIucHVzaCh2YWx1ZXMubGVuZ3RoKTsgLy8gazAgPD0gayA8IGsxIHdoZXJlIGswID0gX3B0cltqXSAmJiBrMSA9IF9wdHJbaisxXVxuXG4gICAgICB2YXIgazAgPSBtYXRyaXguX3B0cltqXTtcbiAgICAgIHZhciBrMSA9IG1hdHJpeC5fcHRyW2ogKyAxXTtcblxuICAgICAgaWYgKHNraXBaZXJvcykge1xuICAgICAgICAvLyBsb29wIGsgd2l0aGluIFtrMCwgazFbXG4gICAgICAgIGZvciAodmFyIGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgICAvLyByb3cgaW5kZXhcbiAgICAgICAgICB2YXIgaSA9IG1hdHJpeC5faW5kZXhba107IC8vIGNoZWNrIGkgaXMgaW4gcmFuZ2VcblxuICAgICAgICAgIGlmIChpID49IG1pblJvdyAmJiBpIDw9IG1heFJvdykge1xuICAgICAgICAgICAgLy8gdmFsdWUgQCBrXG4gICAgICAgICAgICBpbnZva2UobWF0cml4Ll92YWx1ZXNba10sIGkgLSBtaW5Sb3csIGogLSBtaW5Db2x1bW4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gY3JlYXRlIGEgY2FjaGUgaG9sZGluZyBhbGwgZGVmaW5lZCB2YWx1ZXNcbiAgICAgICAgdmFyIF92YWx1ZXMgPSB7fTtcblxuICAgICAgICBmb3IgKHZhciBfayA9IGswOyBfayA8IGsxOyBfaysrKSB7XG4gICAgICAgICAgdmFyIF9pNCA9IG1hdHJpeC5faW5kZXhbX2tdO1xuICAgICAgICAgIF92YWx1ZXNbX2k0XSA9IG1hdHJpeC5fdmFsdWVzW19rXTtcbiAgICAgICAgfSAvLyBsb29wIG92ZXIgYWxsIHJvd3MgKGluZGV4ZXMgY2FuIGJlIHVub3JkZXJlZCBzbyB3ZSBjYW4ndCB1c2UgdGhhdCksXG4gICAgICAgIC8vIGFuZCBlaXRoZXIgcmVhZCB0aGUgdmFsdWUgb3IgemVyb1xuXG5cbiAgICAgICAgZm9yICh2YXIgX2k1ID0gbWluUm93OyBfaTUgPD0gbWF4Um93OyBfaTUrKykge1xuICAgICAgICAgIHZhciB2YWx1ZSA9IF9pNSBpbiBfdmFsdWVzID8gX3ZhbHVlc1tfaTVdIDogMDtcbiAgICAgICAgICBpbnZva2UodmFsdWUsIF9pNSAtIG1pblJvdywgaiAtIG1pbkNvbHVtbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIHN0b3JlIG51bWJlciBvZiB2YWx1ZXMgaW4gcHRyXG5cblxuICAgIHB0ci5wdXNoKHZhbHVlcy5sZW5ndGgpOyAvLyByZXR1cm4gc3BhcnNlIG1hdHJpeFxuXG4gICAgcmV0dXJuIG5ldyBTcGFyc2VNYXRyaXgoe1xuICAgICAgdmFsdWVzOiB2YWx1ZXMsXG4gICAgICBpbmRleDogaW5kZXgsXG4gICAgICBwdHI6IHB0cixcbiAgICAgIHNpemU6IFttYXhSb3cgLSBtaW5Sb3cgKyAxLCBtYXhDb2x1bW4gLSBtaW5Db2x1bW4gKyAxXVxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZnVuY3Rpb24gb24gZWFjaCBlbnRyeSBvZiB0aGUgbWF0cml4LlxuICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4XG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGludm9rZWQgd2l0aCB0aHJlZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnM6IHRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudCwgdGhlIGluZGV4XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGVsZW1lbnQsIGFuZCB0aGUgTWF0cml4IGJlaW5nIHRyYXZlcnNlZC5cbiAgICogQHBhcmFtIHtib29sZWFufSBbc2tpcFplcm9zXSBJbnZva2UgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIG5vbi16ZXJvIHZhbHVlcyBvbmx5LlxuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaywgc2tpcFplcm9zKSB7XG4gICAgLy8gY2hlY2sgaXQgaXMgYSBwYXR0ZXJuIG1hdHJpeFxuICAgIGlmICghdGhpcy5fdmFsdWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBpbnZva2UgZm9yRWFjaCBvbiBhIFBhdHRlcm4gb25seSBtYXRyaXgnKTtcbiAgICB9IC8vIG1hdHJpeCBpbnN0YW5jZVxuXG5cbiAgICB2YXIgbWUgPSB0aGlzOyAvLyByb3dzIGFuZCBjb2x1bW5zXG5cbiAgICB2YXIgcm93cyA9IHRoaXMuX3NpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSB0aGlzLl9zaXplWzFdOyAvLyBsb29wIGNvbHVtbnNcblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAvLyBrMCA8PSBrIDwgazEgd2hlcmUgazAgPSBfcHRyW2pdICYmIGsxID0gX3B0cltqKzFdXG4gICAgICB2YXIgazAgPSB0aGlzLl9wdHJbal07XG4gICAgICB2YXIgazEgPSB0aGlzLl9wdHJbaiArIDFdO1xuXG4gICAgICBpZiAoc2tpcFplcm9zKSB7XG4gICAgICAgIC8vIGxvb3AgayB3aXRoaW4gW2swLCBrMVtcbiAgICAgICAgZm9yICh2YXIgayA9IGswOyBrIDwgazE7IGsrKykge1xuICAgICAgICAgIC8vIHJvdyBpbmRleFxuICAgICAgICAgIHZhciBpID0gdGhpcy5faW5kZXhba107IC8vIHZhbHVlIEAga1xuXG4gICAgICAgICAgY2FsbGJhY2sodGhpcy5fdmFsdWVzW2tdLCBbaSwgal0sIG1lKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gY3JlYXRlIGEgY2FjaGUgaG9sZGluZyBhbGwgZGVmaW5lZCB2YWx1ZXNcbiAgICAgICAgdmFyIHZhbHVlcyA9IHt9O1xuXG4gICAgICAgIGZvciAodmFyIF9rMiA9IGswOyBfazIgPCBrMTsgX2syKyspIHtcbiAgICAgICAgICB2YXIgX2k2ID0gdGhpcy5faW5kZXhbX2syXTtcbiAgICAgICAgICB2YWx1ZXNbX2k2XSA9IHRoaXMuX3ZhbHVlc1tfazJdO1xuICAgICAgICB9IC8vIGxvb3Agb3ZlciBhbGwgcm93cyAoaW5kZXhlcyBjYW4gYmUgdW5vcmRlcmVkIHNvIHdlIGNhbid0IHVzZSB0aGF0KSxcbiAgICAgICAgLy8gYW5kIGVpdGhlciByZWFkIHRoZSB2YWx1ZSBvciB6ZXJvXG5cblxuICAgICAgICBmb3IgKHZhciBfaTcgPSAwOyBfaTcgPCByb3dzOyBfaTcrKykge1xuICAgICAgICAgIHZhciB2YWx1ZSA9IF9pNyBpbiB2YWx1ZXMgPyB2YWx1ZXNbX2k3XSA6IDA7XG4gICAgICAgICAgY2FsbGJhY2sodmFsdWUsIFtfaTcsIGpdLCBtZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gQXJyYXkgd2l0aCBhIGNvcHkgb2YgdGhlIGRhdGEgb2YgdGhlIFNwYXJzZU1hdHJpeFxuICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4XG4gICAqIEByZXR1cm5zIHtBcnJheX0gYXJyYXlcbiAgICovXG5cblxuICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF90b0FycmF5KHRoaXMuX3ZhbHVlcywgdGhpcy5faW5kZXgsIHRoaXMuX3B0ciwgdGhpcy5fc2l6ZSwgdHJ1ZSk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgdGhlIHByaW1pdGl2ZSB2YWx1ZSBvZiB0aGUgU3BhcnNlTWF0cml4OiBhIHR3byBkaW1lbnNpb25zIGFycmF5XG4gICAqIEBtZW1iZXJvZiBTcGFyc2VNYXRyaXhcbiAgICogQHJldHVybnMge0FycmF5fSBhcnJheVxuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUudmFsdWVPZiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3RvQXJyYXkodGhpcy5fdmFsdWVzLCB0aGlzLl9pbmRleCwgdGhpcy5fcHRyLCB0aGlzLl9zaXplLCBmYWxzZSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gX3RvQXJyYXkodmFsdWVzLCBpbmRleCwgcHRyLCBzaXplLCBjb3B5KSB7XG4gICAgLy8gcm93cyBhbmQgY29sdW1uc1xuICAgIHZhciByb3dzID0gc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IHNpemVbMV07IC8vIHJlc3VsdFxuXG4gICAgdmFyIGEgPSBbXTsgLy8gdmFyc1xuXG4gICAgdmFyIGksIGo7IC8vIGluaXRpYWxpemUgYXJyYXlcblxuICAgIGZvciAoaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgIGFbaV0gPSBbXTtcblxuICAgICAgZm9yIChqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgICBhW2ldW2pdID0gMDtcbiAgICAgIH1cbiAgICB9IC8vIGxvb3AgY29sdW1uc1xuXG5cbiAgICBmb3IgKGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAvLyBrMCA8PSBrIDwgazEgd2hlcmUgazAgPSBfcHRyW2pdICYmIGsxID0gX3B0cltqKzFdXG4gICAgICB2YXIgazAgPSBwdHJbal07XG4gICAgICB2YXIgazEgPSBwdHJbaiArIDFdOyAvLyBsb29wIGsgd2l0aGluIFtrMCwgazFbXG5cbiAgICAgIGZvciAodmFyIGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgLy8gcm93IGluZGV4XG4gICAgICAgIGkgPSBpbmRleFtrXTsgLy8gc2V0IHZhbHVlICh1c2Ugb25lIGZvciBwYXR0ZXJuIG1hdHJpeClcblxuICAgICAgICBhW2ldW2pdID0gdmFsdWVzID8gY29weSA/ICgwLCBfb2JqZWN0LmNsb25lKSh2YWx1ZXNba10pIDogdmFsdWVzW2tdIDogMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYTtcbiAgfVxuICAvKipcbiAgICogR2V0IGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtYXRyaXgsIHdpdGggb3B0aW9uYWwgZm9ybWF0dGluZyBvcHRpb25zLlxuICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4XG4gICAqIEBwYXJhbSB7T2JqZWN0IHwgbnVtYmVyIHwgRnVuY3Rpb259IFtvcHRpb25zXSAgRm9ybWF0dGluZyBvcHRpb25zLiBTZWVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWIvdXRpbHMvbnVtYmVyOmZvcm1hdCBmb3IgYVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uIG9mIHRoZSBhdmFpbGFibGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLmZvcm1hdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgLy8gcm93cyBhbmQgY29sdW1uc1xuICAgIHZhciByb3dzID0gdGhpcy5fc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IHRoaXMuX3NpemVbMV07IC8vIGRlbnNpdHlcblxuICAgIHZhciBkZW5zaXR5ID0gdGhpcy5kZW5zaXR5KCk7IC8vIHJvd3MgJiBjb2x1bW5zXG5cbiAgICB2YXIgc3RyID0gJ1NwYXJzZSBNYXRyaXggWycgKyAoMCwgX3N0cmluZy5mb3JtYXQpKHJvd3MsIG9wdGlvbnMpICsgJyB4ICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKGNvbHVtbnMsIG9wdGlvbnMpICsgJ10gZGVuc2l0eTogJyArICgwLCBfc3RyaW5nLmZvcm1hdCkoZGVuc2l0eSwgb3B0aW9ucykgKyAnXFxuJzsgLy8gbG9vcCBjb2x1bW5zXG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgLy8gazAgPD0gayA8IGsxIHdoZXJlIGswID0gX3B0cltqXSAmJiBrMSA9IF9wdHJbaisxXVxuICAgICAgdmFyIGswID0gdGhpcy5fcHRyW2pdO1xuICAgICAgdmFyIGsxID0gdGhpcy5fcHRyW2ogKyAxXTsgLy8gbG9vcCBrIHdpdGhpbiBbazAsIGsxW1xuXG4gICAgICBmb3IgKHZhciBrID0gazA7IGsgPCBrMTsgaysrKSB7XG4gICAgICAgIC8vIHJvdyBpbmRleFxuICAgICAgICB2YXIgaSA9IHRoaXMuX2luZGV4W2tdOyAvLyBhcHBlbmQgdmFsdWVcblxuICAgICAgICBzdHIgKz0gJ1xcbiAgICAoJyArICgwLCBfc3RyaW5nLmZvcm1hdCkoaSwgb3B0aW9ucykgKyAnLCAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShqLCBvcHRpb25zKSArICcpID09PiAnICsgKHRoaXMuX3ZhbHVlcyA/ICgwLCBfc3RyaW5nLmZvcm1hdCkodGhpcy5fdmFsdWVzW2tdLCBvcHRpb25zKSA6ICdYJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cjtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWF0cml4XG4gICAqIEBtZW1iZXJvZiBTcGFyc2VNYXRyaXhcbiAgICogQHJldHVybnMge3N0cmluZ30gc3RyXG4gICAqL1xuXG5cbiAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gKDAsIF9zdHJpbmcuZm9ybWF0KSh0aGlzLnRvQXJyYXkoKSk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtYXRyaXhcbiAgICogQG1lbWJlcm9mIFNwYXJzZU1hdHJpeFxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdTcGFyc2VNYXRyaXgnLFxuICAgICAgdmFsdWVzOiB0aGlzLl92YWx1ZXMsXG4gICAgICBpbmRleDogdGhpcy5faW5kZXgsXG4gICAgICBwdHI6IHRoaXMuX3B0cixcbiAgICAgIHNpemU6IHRoaXMuX3NpemUsXG4gICAgICBkYXRhdHlwZTogdGhpcy5fZGF0YXR5cGVcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogR2V0IHRoZSBrdGggTWF0cml4IGRpYWdvbmFsLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4XG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyfSBbaz0wXSAgICAgVGhlIGt0aCBkaWFnb25hbCB3aGVyZSB0aGUgdmVjdG9yIHdpbGwgcmV0cmlldmVkLlxuICAgKlxuICAgKiBAcmV0dXJucyB7TWF0cml4fSAgICAgICAgICAgICAgICAgICAgIFRoZSBtYXRyaXggdmVjdG9yIHdpdGggdGhlIGRpYWdvbmFsIHZhbHVlcy5cbiAgICovXG5cblxuICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLmRpYWdvbmFsID0gZnVuY3Rpb24gKGspIHtcbiAgICAvLyB2YWxpZGF0ZSBrIGlmIGFueVxuICAgIGlmIChrKSB7XG4gICAgICAvLyBjb252ZXJ0IEJpZ051bWJlciB0byBhIG51bWJlclxuICAgICAgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKGspKSB7XG4gICAgICAgIGsgPSBrLnRvTnVtYmVyKCk7XG4gICAgICB9IC8vIGlzIG11c3QgYmUgYW4gaW50ZWdlclxuXG5cbiAgICAgIGlmICghKDAsIF9pcy5pc051bWJlcikoaykgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoaykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHBhcmFtZXRlciBrIG11c3QgYmUgYW4gaW50ZWdlciBudW1iZXInKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZGVmYXVsdCB2YWx1ZVxuICAgICAgayA9IDA7XG4gICAgfVxuXG4gICAgdmFyIGtTdXBlciA9IGsgPiAwID8gayA6IDA7XG4gICAgdmFyIGtTdWIgPSBrIDwgMCA/IC1rIDogMDsgLy8gcm93cyAmIGNvbHVtbnNcblxuICAgIHZhciByb3dzID0gdGhpcy5fc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IHRoaXMuX3NpemVbMV07IC8vIG51bWJlciBkaWFnb25hbCB2YWx1ZXNcblxuICAgIHZhciBuID0gTWF0aC5taW4ocm93cyAtIGtTdWIsIGNvbHVtbnMgLSBrU3VwZXIpOyAvLyBkaWFnb25hbCBhcnJheXNcblxuICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICB2YXIgaW5kZXggPSBbXTtcbiAgICB2YXIgcHRyID0gW107IC8vIGluaXRpYWwgcHRyIHZhbHVlXG5cbiAgICBwdHJbMF0gPSAwOyAvLyBsb29wIGNvbHVtbnNcblxuICAgIGZvciAodmFyIGogPSBrU3VwZXI7IGogPCBjb2x1bW5zICYmIHZhbHVlcy5sZW5ndGggPCBuOyBqKyspIHtcbiAgICAgIC8vIGswIDw9IGsgPCBrMSB3aGVyZSBrMCA9IF9wdHJbal0gJiYgazEgPSBfcHRyW2orMV1cbiAgICAgIHZhciBrMCA9IHRoaXMuX3B0cltqXTtcbiAgICAgIHZhciBrMSA9IHRoaXMuX3B0cltqICsgMV07IC8vIGxvb3AgeCB3aXRoaW4gW2swLCBrMVtcblxuICAgICAgZm9yICh2YXIgeCA9IGswOyB4IDwgazE7IHgrKykge1xuICAgICAgICAvLyByb3cgaW5kZXhcbiAgICAgICAgdmFyIGkgPSB0aGlzLl9pbmRleFt4XTsgLy8gY2hlY2sgcm93XG5cbiAgICAgICAgaWYgKGkgPT09IGogLSBrU3VwZXIgKyBrU3ViKSB7XG4gICAgICAgICAgLy8gdmFsdWUgb24gdGhpcyBjb2x1bW5cbiAgICAgICAgICB2YWx1ZXMucHVzaCh0aGlzLl92YWx1ZXNbeF0pOyAvLyBzdG9yZSByb3dcblxuICAgICAgICAgIGluZGV4W3ZhbHVlcy5sZW5ndGggLSAxXSA9IGkgLSBrU3ViOyAvLyBleGl0IGxvb3BcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBjbG9zZSBwdHJcblxuXG4gICAgcHRyLnB1c2godmFsdWVzLmxlbmd0aCk7IC8vIHJldHVybiBtYXRyaXhcblxuICAgIHJldHVybiBuZXcgU3BhcnNlTWF0cml4KHtcbiAgICAgIHZhbHVlczogdmFsdWVzLFxuICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgcHRyOiBwdHIsXG4gICAgICBzaXplOiBbbiwgMV1cbiAgICB9KTtcbiAgfTtcbiAgLyoqXG4gICAqIEdlbmVyYXRlIGEgbWF0cml4IGZyb20gYSBKU09OIG9iamVjdFxuICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBqc29uICBBbiBvYmplY3Qgc3RydWN0dXJlZCBsaWtlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiU3BhcnNlTWF0cml4XCIsIFwidmFsdWVzXCI6IFtdLCBcImluZGV4XCI6IFtdLCBcInB0clwiOiBbXSwgXCJzaXplXCI6IFtdfWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge1NwYXJzZU1hdHJpeH1cbiAgICovXG5cblxuICBTcGFyc2VNYXRyaXguZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBuZXcgU3BhcnNlTWF0cml4KGpzb24pO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgZGlhZ29uYWwgbWF0cml4LlxuICAgKlxuICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4XG4gICAqIEBwYXJhbSB7QXJyYXl9IHNpemUgICAgICAgICAgICAgICAgICAgICAgIFRoZSBtYXRyaXggc2l6ZS5cbiAgICogQHBhcmFtIHtudW1iZXIgfCBBcnJheSB8IE1hdHJpeCB9IHZhbHVlICAgVGhlIHZhbHVlcyBmb3IgdGhlIGRpYWdvbmFsLlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlcn0gW2s9MF0gICAgICAgICBUaGUga3RoIGRpYWdvbmFsIHdoZXJlIHRoZSB2ZWN0b3Igd2lsbCBiZSBmaWxsZWQgaW4uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbZGVmYXVsdFZhbHVlXSAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBub24tZGlhZ29uYWxcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkYXRhdHlwZV0gICAgICAgICAgICAgICAgVGhlIE1hdHJpeCBkYXRhdHlwZSwgdmFsdWVzIG11c3QgYmUgb2YgdGhpcyBkYXRhdHlwZS5cbiAgICpcbiAgICogQHJldHVybnMge1NwYXJzZU1hdHJpeH1cbiAgICovXG5cblxuICBTcGFyc2VNYXRyaXguZGlhZ29uYWwgPSBmdW5jdGlvbiAoc2l6ZSwgdmFsdWUsIGssIGRlZmF1bHRWYWx1ZSwgZGF0YXR5cGUpIHtcbiAgICBpZiAoISgwLCBfaXMuaXNBcnJheSkoc2l6ZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IGV4cGVjdGVkLCBzaXplIHBhcmFtZXRlcicpO1xuICAgIH1cblxuICAgIGlmIChzaXplLmxlbmd0aCAhPT0gMikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPbmx5IHR3byBkaW1lbnNpb25zIG1hdHJpeCBhcmUgc3VwcG9ydGVkJyk7XG4gICAgfSAvLyBtYXAgc2l6ZSAmIHZhbGlkYXRlXG5cblxuICAgIHNpemUgPSBzaXplLm1hcChmdW5jdGlvbiAocykge1xuICAgICAgLy8gY2hlY2sgaXQgaXMgYSBiaWcgbnVtYmVyXG4gICAgICBpZiAoKDAsIF9pcy5pc0JpZ051bWJlcikocykpIHtcbiAgICAgICAgLy8gY29udmVydCBpdFxuICAgICAgICBzID0gcy50b051bWJlcigpO1xuICAgICAgfSAvLyB2YWxpZGF0ZSBhcmd1bWVudHNcblxuXG4gICAgICBpZiAoISgwLCBfaXMuaXNOdW1iZXIpKHMpIHx8ICEoMCwgX251bWJlci5pc0ludGVnZXIpKHMpIHx8IHMgPCAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignU2l6ZSB2YWx1ZXMgbXVzdCBiZSBwb3NpdGl2ZSBpbnRlZ2VycycpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcztcbiAgICB9KTsgLy8gdmFsaWRhdGUgayBpZiBhbnlcblxuICAgIGlmIChrKSB7XG4gICAgICAvLyBjb252ZXJ0IEJpZ051bWJlciB0byBhIG51bWJlclxuICAgICAgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKGspKSB7XG4gICAgICAgIGsgPSBrLnRvTnVtYmVyKCk7XG4gICAgICB9IC8vIGlzIG11c3QgYmUgYW4gaW50ZWdlclxuXG5cbiAgICAgIGlmICghKDAsIF9pcy5pc051bWJlcikoaykgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoaykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHBhcmFtZXRlciBrIG11c3QgYmUgYW4gaW50ZWdlciBudW1iZXInKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZGVmYXVsdCB2YWx1ZVxuICAgICAgayA9IDA7XG4gICAgfSAvLyBlcXVhbCBzaWduYXR1cmUgdG8gdXNlXG5cblxuICAgIHZhciBlcSA9IGVxdWFsU2NhbGFyOyAvLyB6ZXJvIHZhbHVlXG5cbiAgICB2YXIgemVybyA9IDA7XG5cbiAgICBpZiAoKDAsIF9pcy5pc1N0cmluZykoZGF0YXR5cGUpKSB7XG4gICAgICAvLyBmaW5kIHNpZ25hdHVyZSB0aGF0IG1hdGNoZXMgKGRhdGF0eXBlLCBkYXRhdHlwZSlcbiAgICAgIGVxID0gdHlwZWQuZmluZChlcXVhbFNjYWxhciwgW2RhdGF0eXBlLCBkYXRhdHlwZV0pIHx8IGVxdWFsU2NhbGFyOyAvLyBjb252ZXJ0IDAgdG8gdGhlIHNhbWUgZGF0YXR5cGVcblxuICAgICAgemVybyA9IHR5cGVkLmNvbnZlcnQoMCwgZGF0YXR5cGUpO1xuICAgIH1cblxuICAgIHZhciBrU3VwZXIgPSBrID4gMCA/IGsgOiAwO1xuICAgIHZhciBrU3ViID0gayA8IDAgPyAtayA6IDA7IC8vIHJvd3MgYW5kIGNvbHVtbnNcblxuICAgIHZhciByb3dzID0gc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IHNpemVbMV07IC8vIG51bWJlciBvZiBub24temVybyBpdGVtc1xuXG4gICAgdmFyIG4gPSBNYXRoLm1pbihyb3dzIC0ga1N1YiwgY29sdW1ucyAtIGtTdXBlcik7IC8vIHZhbHVlIGV4dHJhY3Rpb24gZnVuY3Rpb25cblxuICAgIHZhciBfdmFsdWU7IC8vIGNoZWNrIHZhbHVlXG5cblxuICAgIGlmICgoMCwgX2lzLmlzQXJyYXkpKHZhbHVlKSkge1xuICAgICAgLy8gdmFsaWRhdGUgYXJyYXlcbiAgICAgIGlmICh2YWx1ZS5sZW5ndGggIT09IG4pIHtcbiAgICAgICAgLy8gbnVtYmVyIG9mIHZhbHVlcyBpbiBhcnJheSBtdXN0IGJlIG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHZhbHVlIGFycmF5IGxlbmd0aCcpO1xuICAgICAgfSAvLyBkZWZpbmUgZnVuY3Rpb25cblxuXG4gICAgICBfdmFsdWUgPSBmdW5jdGlvbiBfdmFsdWUoaSkge1xuICAgICAgICAvLyByZXR1cm4gdmFsdWUgQCBpXG4gICAgICAgIHJldHVybiB2YWx1ZVtpXTtcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzTWF0cml4KSh2YWx1ZSkpIHtcbiAgICAgIC8vIG1hdHJpeCBzaXplXG4gICAgICB2YXIgbXMgPSB2YWx1ZS5zaXplKCk7IC8vIHZhbGlkYXRlIG1hdHJpeFxuXG4gICAgICBpZiAobXMubGVuZ3RoICE9PSAxIHx8IG1zWzBdICE9PSBuKSB7XG4gICAgICAgIC8vIG51bWJlciBvZiB2YWx1ZXMgaW4gYXJyYXkgbXVzdCBiZSBuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBtYXRyaXggbGVuZ3RoJyk7XG4gICAgICB9IC8vIGRlZmluZSBmdW5jdGlvblxuXG5cbiAgICAgIF92YWx1ZSA9IGZ1bmN0aW9uIF92YWx1ZShpKSB7XG4gICAgICAgIC8vIHJldHVybiB2YWx1ZSBAIGlcbiAgICAgICAgcmV0dXJuIHZhbHVlLmdldChbaV0pO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZGVmaW5lIGZ1bmN0aW9uXG4gICAgICBfdmFsdWUgPSBmdW5jdGlvbiBfdmFsdWUoKSB7XG4gICAgICAgIC8vIHJldHVybiB2YWx1ZVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9O1xuICAgIH0gLy8gY3JlYXRlIGFycmF5c1xuXG5cbiAgICB2YXIgdmFsdWVzID0gW107XG4gICAgdmFyIGluZGV4ID0gW107XG4gICAgdmFyIHB0ciA9IFtdOyAvLyBsb29wIGl0ZW1zXG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgLy8gbnVtYmVyIG9mIHJvd3Mgd2l0aCB2YWx1ZVxuICAgICAgcHRyLnB1c2godmFsdWVzLmxlbmd0aCk7IC8vIGRpYWdvbmFsIGluZGV4XG5cbiAgICAgIHZhciBpID0gaiAtIGtTdXBlcjsgLy8gY2hlY2sgd2UgbmVlZCB0byBzZXQgZGlhZ29uYWwgdmFsdWVcblxuICAgICAgaWYgKGkgPj0gMCAmJiBpIDwgbikge1xuICAgICAgICAvLyBnZXQgdmFsdWUgQCBpXG4gICAgICAgIHZhciB2ID0gX3ZhbHVlKGkpOyAvLyBjaGVjayBmb3IgemVyb1xuXG5cbiAgICAgICAgaWYgKCFlcSh2LCB6ZXJvKSkge1xuICAgICAgICAgIC8vIGNvbHVtblxuICAgICAgICAgIGluZGV4LnB1c2goaSArIGtTdWIpOyAvLyBhZGQgdmFsdWVcblxuICAgICAgICAgIHZhbHVlcy5wdXNoKHYpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBsYXN0IHZhbHVlIHNob3VsZCBiZSBudW1iZXIgb2YgdmFsdWVzXG5cblxuICAgIHB0ci5wdXNoKHZhbHVlcy5sZW5ndGgpOyAvLyBjcmVhdGUgU3BhcnNlTWF0cml4XG5cbiAgICByZXR1cm4gbmV3IFNwYXJzZU1hdHJpeCh7XG4gICAgICB2YWx1ZXM6IHZhbHVlcyxcbiAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgIHB0cjogcHRyLFxuICAgICAgc2l6ZTogW3Jvd3MsIGNvbHVtbnNdXG4gICAgfSk7XG4gIH07XG4gIC8qKlxuICAgKiBTd2FwIHJvd3MgaSBhbmQgaiBpbiBNYXRyaXguXG4gICAqXG4gICAqIEBtZW1iZXJvZiBTcGFyc2VNYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGkgICAgICAgTWF0cml4IHJvdyBpbmRleCAxXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBqICAgICAgIE1hdHJpeCByb3cgaW5kZXggMlxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICBUaGUgbWF0cml4IHJlZmVyZW5jZVxuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUuc3dhcFJvd3MgPSBmdW5jdGlvbiAoaSwgaikge1xuICAgIC8vIGNoZWNrIGluZGV4XG4gICAgaWYgKCEoMCwgX2lzLmlzTnVtYmVyKShpKSB8fCAhKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShpKSB8fCAhKDAsIF9pcy5pc051bWJlcikoaikgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoaikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUm93IGluZGV4IG11c3QgYmUgcG9zaXRpdmUgaW50ZWdlcnMnKTtcbiAgICB9IC8vIGNoZWNrIGRpbWVuc2lvbnNcblxuXG4gICAgaWYgKHRoaXMuX3NpemUubGVuZ3RoICE9PSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ09ubHkgdHdvIGRpbWVuc2lvbmFsIG1hdHJpeCBpcyBzdXBwb3J0ZWQnKTtcbiAgICB9IC8vIHZhbGlkYXRlIGluZGV4XG5cblxuICAgICgwLCBfYXJyYXkudmFsaWRhdGVJbmRleCkoaSwgdGhpcy5fc2l6ZVswXSk7XG4gICAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShqLCB0aGlzLl9zaXplWzBdKTsgLy8gc3dhcCByb3dzXG5cbiAgICBTcGFyc2VNYXRyaXguX3N3YXBSb3dzKGksIGosIHRoaXMuX3NpemVbMV0sIHRoaXMuX3ZhbHVlcywgdGhpcy5faW5kZXgsIHRoaXMuX3B0cik7IC8vIHJldHVybiBjdXJyZW50IGluc3RhbmNlXG5cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogTG9vcCByb3dzIHdpdGggZGF0YSBpbiBjb2x1bW4gai5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGogICAgICAgICAgICBDb2x1bW5cbiAgICogQHBhcmFtIHtBcnJheX0gdmFsdWVzICAgICAgICBNYXRyaXggdmFsdWVzXG4gICAqIEBwYXJhbSB7QXJyYXl9IGluZGV4ICAgICAgICAgTWF0cml4IHJvdyBpbmRlY2VzXG4gICAqIEBwYXJhbSB7QXJyYXl9IHB0ciAgICAgICAgICAgTWF0cml4IGNvbHVtbiBwb2ludGVyc1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgZm9yIGV2ZXJ5IHJvdyBpbiBjb2x1bW4galxuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5fZm9yRWFjaFJvdyA9IGZ1bmN0aW9uIChqLCB2YWx1ZXMsIGluZGV4LCBwdHIsIGNhbGxiYWNrKSB7XG4gICAgLy8gaW5kZWNlcyBmb3IgY29sdW1uIGpcbiAgICB2YXIgazAgPSBwdHJbal07XG4gICAgdmFyIGsxID0gcHRyW2ogKyAxXTsgLy8gbG9vcFxuXG4gICAgZm9yICh2YXIgayA9IGswOyBrIDwgazE7IGsrKykge1xuICAgICAgLy8gaW52b2tlIGNhbGxiYWNrXG4gICAgICBjYWxsYmFjayhpbmRleFtrXSwgdmFsdWVzW2tdKTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBTd2FwIHJvd3MgeCBhbmQgeSBpbiBTcGFyc2UgTWF0cml4IGRhdGEgc3RydWN0dXJlcy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHggICAgICAgICBNYXRyaXggcm93IGluZGV4IDFcbiAgICogQHBhcmFtIHtudW1iZXJ9IHkgICAgICAgICBNYXRyaXggcm93IGluZGV4IDJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbnMgICBOdW1iZXIgb2YgY29sdW1ucyBpbiBtYXRyaXhcbiAgICogQHBhcmFtIHtBcnJheX0gdmFsdWVzICAgICBNYXRyaXggdmFsdWVzXG4gICAqIEBwYXJhbSB7QXJyYXl9IGluZGV4ICAgICAgTWF0cml4IHJvdyBpbmRlY2VzXG4gICAqIEBwYXJhbSB7QXJyYXl9IHB0ciAgICAgICAgTWF0cml4IGNvbHVtbiBwb2ludGVyc1xuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5fc3dhcFJvd3MgPSBmdW5jdGlvbiAoeCwgeSwgY29sdW1ucywgdmFsdWVzLCBpbmRleCwgcHRyKSB7XG4gICAgLy8gbG9vcCBjb2x1bW5zXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgIC8vIGswIDw9IGsgPCBrMSB3aGVyZSBrMCA9IF9wdHJbal0gJiYgazEgPSBfcHRyW2orMV1cbiAgICAgIHZhciBrMCA9IHB0cltqXTtcbiAgICAgIHZhciBrMSA9IHB0cltqICsgMV07IC8vIGZpbmQgdmFsdWUgaW5kZXggQCB4XG5cbiAgICAgIHZhciBreCA9IF9nZXRWYWx1ZUluZGV4KHgsIGswLCBrMSwgaW5kZXgpOyAvLyBmaW5kIHZhbHVlIGluZGV4IEAgeFxuXG5cbiAgICAgIHZhciBreSA9IF9nZXRWYWx1ZUluZGV4KHksIGswLCBrMSwgaW5kZXgpOyAvLyBjaGVjayBib3RoIHJvd3MgZXhpc3QgaW4gbWF0cml4XG5cblxuICAgICAgaWYgKGt4IDwgazEgJiYga3kgPCBrMSAmJiBpbmRleFtreF0gPT09IHggJiYgaW5kZXhba3ldID09PSB5KSB7XG4gICAgICAgIC8vIHN3YXAgdmFsdWVzIChjaGVjayBmb3IgcGF0dGVybiBtYXRyaXgpXG4gICAgICAgIGlmICh2YWx1ZXMpIHtcbiAgICAgICAgICB2YXIgdiA9IHZhbHVlc1treF07XG4gICAgICAgICAgdmFsdWVzW2t4XSA9IHZhbHVlc1treV07XG4gICAgICAgICAgdmFsdWVzW2t5XSA9IHY7XG4gICAgICAgIH0gLy8gbmV4dCBjb2x1bW5cblxuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSAvLyBjaGVjayB4IHJvdyBleGlzdCAmIG5vIHkgcm93XG5cblxuICAgICAgaWYgKGt4IDwgazEgJiYgaW5kZXhba3hdID09PSB4ICYmIChreSA+PSBrMSB8fCBpbmRleFtreV0gIT09IHkpKSB7XG4gICAgICAgIC8vIHZhbHVlIEAgeCAoY2hlY2sgZm9yIHBhdHRlcm4gbWF0cml4KVxuICAgICAgICB2YXIgdnggPSB2YWx1ZXMgPyB2YWx1ZXNba3hdIDogdW5kZWZpbmVkOyAvLyBpbnNlcnQgdmFsdWUgQCB5XG5cbiAgICAgICAgaW5kZXguc3BsaWNlKGt5LCAwLCB5KTtcblxuICAgICAgICBpZiAodmFsdWVzKSB7XG4gICAgICAgICAgdmFsdWVzLnNwbGljZShreSwgMCwgdngpO1xuICAgICAgICB9IC8vIHJlbW92ZSB2YWx1ZSBAIHggKGFkanVzdCBhcnJheSBpbmRleCBpZiBuZWVkZWQpXG5cblxuICAgICAgICBpbmRleC5zcGxpY2Uoa3kgPD0ga3ggPyBreCArIDEgOiBreCwgMSk7XG5cbiAgICAgICAgaWYgKHZhbHVlcykge1xuICAgICAgICAgIHZhbHVlcy5zcGxpY2Uoa3kgPD0ga3ggPyBreCArIDEgOiBreCwgMSk7XG4gICAgICAgIH0gLy8gbmV4dCBjb2x1bW5cblxuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSAvLyBjaGVjayB5IHJvdyBleGlzdCAmIG5vIHggcm93XG5cblxuICAgICAgaWYgKGt5IDwgazEgJiYgaW5kZXhba3ldID09PSB5ICYmIChreCA+PSBrMSB8fCBpbmRleFtreF0gIT09IHgpKSB7XG4gICAgICAgIC8vIHZhbHVlIEAgeSAoY2hlY2sgZm9yIHBhdHRlcm4gbWF0cml4KVxuICAgICAgICB2YXIgdnkgPSB2YWx1ZXMgPyB2YWx1ZXNba3ldIDogdW5kZWZpbmVkOyAvLyBpbnNlcnQgdmFsdWUgQCB4XG5cbiAgICAgICAgaW5kZXguc3BsaWNlKGt4LCAwLCB4KTtcblxuICAgICAgICBpZiAodmFsdWVzKSB7XG4gICAgICAgICAgdmFsdWVzLnNwbGljZShreCwgMCwgdnkpO1xuICAgICAgICB9IC8vIHJlbW92ZSB2YWx1ZSBAIHkgKGFkanVzdCBhcnJheSBpbmRleCBpZiBuZWVkZWQpXG5cblxuICAgICAgICBpbmRleC5zcGxpY2Uoa3ggPD0ga3kgPyBreSArIDEgOiBreSwgMSk7XG5cbiAgICAgICAgaWYgKHZhbHVlcykge1xuICAgICAgICAgIHZhbHVlcy5zcGxpY2Uoa3ggPD0ga3kgPyBreSArIDEgOiBreSwgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFNwYXJzZU1hdHJpeDtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNwYXJzZU1hdHJpeENsYXNzID0gY3JlYXRlU3BhcnNlTWF0cml4Q2xhc3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUluZGV4ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9pc1wiKTtcblxudmFyIG5hbWUgPSAnaW5kZXgnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnSW5kZXgnXTtcbnZhciBjcmVhdGVJbmRleCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBJbmRleCA9IF9yZWYuSW5kZXg7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBpbmRleC4gQW4gSW5kZXggY2FuIHN0b3JlIHJhbmdlcyBoYXZpbmcgc3RhcnQsIHN0ZXAsIGFuZCBlbmRcbiAgICogZm9yIG11bHRpcGxlIGRpbWVuc2lvbnMuXG4gICAqIE1hdHJpeC5nZXQsIE1hdHJpeC5zZXQsIGFuZCBtYXRoLnN1YnNldCBhY2NlcHQgYW4gSW5kZXggYXMgaW5wdXQuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguaW5kZXgocmFuZ2UxLCByYW5nZTIsIC4uLilcbiAgICpcbiAgICogV2hlcmUgZWFjaCByYW5nZSBjYW4gYmUgYW55IG9mOlxuICAgKlxuICAgKiAtIEEgbnVtYmVyXG4gICAqIC0gQSBzdHJpbmcgZm9yIGdldHRpbmcvc2V0dGluZyBhbiBvYmplY3QgcHJvcGVydHlcbiAgICogLSBBbiBpbnN0YW5jZSBvZiBgUmFuZ2VgXG4gICAqIC0gQSBvbmUtZGltZW5zaW9uYWwgQXJyYXkgb3IgYSBNYXRyaXggd2l0aCBudW1iZXJzXG4gICAqXG4gICAqIEluZGV4ZXMgbXVzdCBiZSB6ZXJvLWJhc2VkLCBpbnRlZ2VyIG51bWJlcnMuXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBjb25zdCBiID0gWzEsIDIsIDMsIDQsIDVdXG4gICAqICAgIG1hdGguc3Vic2V0KGIsIG1hdGguaW5kZXgoWzEsIDIsIDNdKSkgICAgIC8vIHJldHVybnMgWzIsIDMsIDRdXG4gICAqXG4gICAqICAgIGNvbnN0IGEgPSBtYXRoLm1hdHJpeChbWzEsIDJdLCBbMywgNF1dKVxuICAgKiAgICBhLnN1YnNldChtYXRoLmluZGV4KDAsIDEpKSAgICAgICAgICAgICAvLyByZXR1cm5zIDJcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGJpZ251bWJlciwgYm9vbGVhbiwgY29tcGxleCwgbWF0cml4LCBudW1iZXIsIHN0cmluZywgdW5pdFxuICAgKlxuICAgKiBAcGFyYW0gey4uLip9IHJhbmdlcyAgIFplcm8gb3IgbW9yZSByYW5nZXMgb3IgbnVtYmVycy5cbiAgICogQHJldHVybiB7SW5kZXh9ICAgICAgICBSZXR1cm5zIHRoZSBjcmVhdGVkIGluZGV4XG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICcuLi5udW1iZXIgfCBzdHJpbmcgfCBCaWdOdW1iZXIgfCBSYW5nZSB8IEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gbnVtYmVyU3RyaW5nQmlnTnVtYmVyUmFuZ2VBcnJheU1hdHJpeChhcmdzKSB7XG4gICAgICB2YXIgcmFuZ2VzID0gYXJncy5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgICAgICBpZiAoKDAsIF9pcy5pc0JpZ051bWJlcikoYXJnKSkge1xuICAgICAgICAgIHJldHVybiBhcmcudG9OdW1iZXIoKTsgLy8gY29udmVydCBCaWdOdW1iZXIgdG8gTnVtYmVyXG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhcmcpIHx8ICgwLCBfaXMuaXNNYXRyaXgpKGFyZykpIHtcbiAgICAgICAgICByZXR1cm4gYXJnLm1hcChmdW5jdGlvbiAoZWxlbSkge1xuICAgICAgICAgICAgLy8gY29udmVydCBCaWdOdW1iZXIgdG8gTnVtYmVyXG4gICAgICAgICAgICByZXR1cm4gKDAsIF9pcy5pc0JpZ051bWJlcikoZWxlbSkgPyBlbGVtLnRvTnVtYmVyKCkgOiBlbGVtO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBhcmc7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdmFyIHJlcyA9IG5ldyBJbmRleCgpO1xuICAgICAgSW5kZXguYXBwbHkocmVzLCByYW5nZXMpO1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZUluZGV4ID0gY3JlYXRlSW5kZXg7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU1hdHJpeCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ21hdHJpeCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdNYXRyaXgnLCAnRGVuc2VNYXRyaXgnLCAnU3BhcnNlTWF0cml4J107XG52YXIgY3JlYXRlTWF0cml4ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIE1hdHJpeCA9IF9yZWYuTWF0cml4LFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4LFxuICAgICAgU3BhcnNlTWF0cml4ID0gX3JlZi5TcGFyc2VNYXRyaXg7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIE1hdHJpeC4gVGhlIGZ1bmN0aW9uIGNyZWF0ZXMgYSBuZXcgYG1hdGguTWF0cml4YCBvYmplY3QgZnJvbVxuICAgKiBhbiBgQXJyYXlgLiBBIE1hdHJpeCBoYXMgdXRpbGl0eSBmdW5jdGlvbnMgdG8gbWFuaXB1bGF0ZSB0aGUgZGF0YSBpbiB0aGVcbiAgICogbWF0cml4LCBsaWtlIGdldHRpbmcgdGhlIHNpemUgYW5kIGdldHRpbmcgb3Igc2V0dGluZyB2YWx1ZXMgaW4gdGhlIG1hdHJpeC5cbiAgICogU3VwcG9ydGVkIHN0b3JhZ2UgZm9ybWF0cyBhcmUgJ2RlbnNlJyBhbmQgJ3NwYXJzZScuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5tYXRyaXgoKSAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjcmVhdGVzIGFuIGVtcHR5IG1hdHJpeCB1c2luZyBkZWZhdWx0IHN0b3JhZ2UgZm9ybWF0IChkZW5zZSkuXG4gICAqICAgIG1hdGgubWF0cml4KGRhdGEpICAgICAgICAgICAgICAgICAgICAgLy8gY3JlYXRlcyBhIG1hdHJpeCB3aXRoIGluaXRpYWwgZGF0YSB1c2luZyBkZWZhdWx0IHN0b3JhZ2UgZm9ybWF0IChkZW5zZSkuXG4gICAqICAgIG1hdGgubWF0cml4KCdkZW5zZScpICAgICAgICAgICAgICAgICAgLy8gY3JlYXRlcyBhbiBlbXB0eSBtYXRyaXggdXNpbmcgdGhlIGdpdmVuIHN0b3JhZ2UgZm9ybWF0LlxuICAgKiAgICBtYXRoLm1hdHJpeChkYXRhLCAnZGVuc2UnKSAgICAgICAgICAgIC8vIGNyZWF0ZXMgYSBtYXRyaXggd2l0aCBpbml0aWFsIGRhdGEgdXNpbmcgdGhlIGdpdmVuIHN0b3JhZ2UgZm9ybWF0LlxuICAgKiAgICBtYXRoLm1hdHJpeChkYXRhLCAnc3BhcnNlJykgICAgICAgICAgIC8vIGNyZWF0ZXMgYSBzcGFyc2UgbWF0cml4IHdpdGggaW5pdGlhbCBkYXRhLlxuICAgKiAgICBtYXRoLm1hdHJpeChkYXRhLCAnc3BhcnNlJywgJ251bWJlcicpIC8vIGNyZWF0ZXMgYSBzcGFyc2UgbWF0cml4IHdpdGggaW5pdGlhbCBkYXRhLCBudW1iZXIgZGF0YSB0eXBlLlxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbGV0IG0gPSBtYXRoLm1hdHJpeChbWzEsIDJdLCBbMywgNF1dKVxuICAgKiAgICBtLnNpemUoKSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFycmF5IFsyLCAyXVxuICAgKiAgICBtLnJlc2l6ZShbMywgMl0sIDUpXG4gICAqICAgIG0udmFsdWVPZigpICAgICAgICAgICAgICAgICAgICAgLy8gQXJyYXkgW1sxLCAyXSwgWzMsIDRdLCBbNSwgNV1dXG4gICAqICAgIG0uZ2V0KFsxLCAwXSkgICAgICAgICAgICAgICAgICAgIC8vIG51bWJlciAzXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiaWdudW1iZXIsIGJvb2xlYW4sIGNvbXBsZXgsIGluZGV4LCBudW1iZXIsIHN0cmluZywgdW5pdCwgc3BhcnNlXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IFtkYXRhXSAgICBBIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZm9ybWF0XSAgICAgICAgICBUaGUgTWF0cml4IHN0b3JhZ2UgZm9ybWF0XG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gVGhlIGNyZWF0ZWQgbWF0cml4XG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICcnOiBmdW5jdGlvbiBfKCkge1xuICAgICAgcmV0dXJuIF9jcmVhdGUoW10pO1xuICAgIH0sXG4gICAgc3RyaW5nOiBmdW5jdGlvbiBzdHJpbmcoZm9ybWF0KSB7XG4gICAgICByZXR1cm4gX2NyZWF0ZShbXSwgZm9ybWF0KTtcbiAgICB9LFxuICAgICdzdHJpbmcsIHN0cmluZyc6IGZ1bmN0aW9uIHN0cmluZ1N0cmluZyhmb3JtYXQsIGRhdGF0eXBlKSB7XG4gICAgICByZXR1cm4gX2NyZWF0ZShbXSwgZm9ybWF0LCBkYXRhdHlwZSk7XG4gICAgfSxcbiAgICBBcnJheTogZnVuY3Rpb24gQXJyYXkoZGF0YSkge1xuICAgICAgcmV0dXJuIF9jcmVhdGUoZGF0YSk7XG4gICAgfSxcbiAgICBNYXRyaXg6IGZ1bmN0aW9uIE1hdHJpeChkYXRhKSB7XG4gICAgICByZXR1cm4gX2NyZWF0ZShkYXRhLCBkYXRhLnN0b3JhZ2UoKSk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgsIHN0cmluZyc6IF9jcmVhdGUsXG4gICAgJ0FycmF5IHwgTWF0cml4LCBzdHJpbmcsIHN0cmluZyc6IF9jcmVhdGVcbiAgfSk7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgTWF0cml4IHdpdGggZ2l2ZW4gc3RvcmFnZSBmb3JtYXRcbiAgICogQHBhcmFtIHtBcnJheX0gZGF0YVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Zvcm1hdF1cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkYXRhdHlwZV1cbiAgICogQHJldHVybnMge01hdHJpeH0gUmV0dXJucyBhIG5ldyBNYXRyaXhcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgZnVuY3Rpb24gX2NyZWF0ZShkYXRhLCBmb3JtYXQsIGRhdGF0eXBlKSB7XG4gICAgLy8gZ2V0IHN0b3JhZ2UgZm9ybWF0IGNvbnN0cnVjdG9yXG4gICAgaWYgKGZvcm1hdCA9PT0gJ2RlbnNlJyB8fCBmb3JtYXQgPT09ICdkZWZhdWx0JyB8fCBmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG5ldyBEZW5zZU1hdHJpeChkYXRhLCBkYXRhdHlwZSk7XG4gICAgfVxuXG4gICAgaWYgKGZvcm1hdCA9PT0gJ3NwYXJzZScpIHtcbiAgICAgIHJldHVybiBuZXcgU3BhcnNlTWF0cml4KGRhdGEsIGRhdGF0eXBlKTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIG1hdHJpeCB0eXBlICcgKyBKU09OLnN0cmluZ2lmeShmb3JtYXQpICsgJy4nKTtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZU1hdHJpeCA9IGNyZWF0ZU1hdHJpeDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3BhcnNlID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnc3BhcnNlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ1NwYXJzZU1hdHJpeCddO1xudmFyIGNyZWF0ZVNwYXJzZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBTcGFyc2VNYXRyaXggPSBfcmVmLlNwYXJzZU1hdHJpeDtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgU3BhcnNlIE1hdHJpeC4gVGhlIGZ1bmN0aW9uIGNyZWF0ZXMgYSBuZXcgYG1hdGguTWF0cml4YCBvYmplY3QgZnJvbVxuICAgKiBhbiBgQXJyYXlgLiBBIE1hdHJpeCBoYXMgdXRpbGl0eSBmdW5jdGlvbnMgdG8gbWFuaXB1bGF0ZSB0aGUgZGF0YSBpbiB0aGVcbiAgICogbWF0cml4LCBsaWtlIGdldHRpbmcgdGhlIHNpemUgYW5kIGdldHRpbmcgb3Igc2V0dGluZyB2YWx1ZXMgaW4gdGhlIG1hdHJpeC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnNwYXJzZSgpICAgICAgICAgICAgICAgLy8gY3JlYXRlcyBhbiBlbXB0eSBzcGFyc2UgbWF0cml4LlxuICAgKiAgICBtYXRoLnNwYXJzZShkYXRhKSAgICAgICAgICAgLy8gY3JlYXRlcyBhIHNwYXJzZSBtYXRyaXggd2l0aCBpbml0aWFsIGRhdGEuXG4gICAqICAgIG1hdGguc3BhcnNlKGRhdGEsICdudW1iZXInKSAvLyBjcmVhdGVzIGEgc3BhcnNlIG1hdHJpeCB3aXRoIGluaXRpYWwgZGF0YSwgbnVtYmVyIGRhdGF0eXBlLlxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbGV0IG0gPSBtYXRoLnNwYXJzZShbWzEsIDJdLCBbMywgNF1dKVxuICAgKiAgICBtLnNpemUoKSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFycmF5IFsyLCAyXVxuICAgKiAgICBtLnJlc2l6ZShbMywgMl0sIDUpXG4gICAqICAgIG0udmFsdWVPZigpICAgICAgICAgICAgICAgICAgICAgLy8gQXJyYXkgW1sxLCAyXSwgWzMsIDRdLCBbNSwgNV1dXG4gICAqICAgIG0uZ2V0KFsxLCAwXSkgICAgICAgICAgICAgICAgICAgIC8vIG51bWJlciAzXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiaWdudW1iZXIsIGJvb2xlYW4sIGNvbXBsZXgsIGluZGV4LCBudW1iZXIsIHN0cmluZywgdW5pdCwgbWF0cml4XG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IFtkYXRhXSAgICBBIHR3byBkaW1lbnNpb25hbCBhcnJheVxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9IFRoZSBjcmVhdGVkIG1hdHJpeFxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnJzogZnVuY3Rpb24gXygpIHtcbiAgICAgIHJldHVybiBuZXcgU3BhcnNlTWF0cml4KFtdKTtcbiAgICB9LFxuICAgIHN0cmluZzogZnVuY3Rpb24gc3RyaW5nKGRhdGF0eXBlKSB7XG4gICAgICByZXR1cm4gbmV3IFNwYXJzZU1hdHJpeChbXSwgZGF0YXR5cGUpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoZGF0YSkge1xuICAgICAgcmV0dXJuIG5ldyBTcGFyc2VNYXRyaXgoZGF0YSk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgsIHN0cmluZyc6IGZ1bmN0aW9uIEFycmF5TWF0cml4U3RyaW5nKGRhdGEsIGRhdGF0eXBlKSB7XG4gICAgICByZXR1cm4gbmV3IFNwYXJzZU1hdHJpeChkYXRhLCBkYXRhdHlwZSk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTcGFyc2UgPSBjcmVhdGVTcGFyc2U7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFsZ29yaXRobTAxID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9EaW1lbnNpb25FcnJvciA9IHJlcXVpcmUoXCIuLi8uLi8uLi9lcnJvci9EaW1lbnNpb25FcnJvclwiKTtcblxudmFyIG5hbWUgPSAnYWxnb3JpdGhtMDEnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVBbGdvcml0aG0wMSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGVzIG92ZXIgU3BhcnNlTWF0cml4IG5vbnplcm8gaXRlbXMgYW5kIGludm9rZXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGYoRGlqLCBTaWopLlxuICAgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIE5OWiB0aW1lcyAobnVtYmVyIG9mIG5vbnplcm8gaXRlbXMgaW4gU3BhcnNlTWF0cml4KS5cbiAgICpcbiAgICpcbiAgICogICAgICAgICAg4pSMICBmKERpaiwgU2lqKSAgOyBTKGksaikgIT09IDBcbiAgICogQyhpLGopID0g4pSkXG4gICAqICAgICAgICAgIOKUlCAgRGlqICAgICAgICAgIDsgb3RoZXJ3aXNlXG4gICAqXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgIGRlbnNlTWF0cml4ICAgICAgIFRoZSBEZW5zZU1hdHJpeCBpbnN0YW5jZSAoRClcbiAgICogQHBhcmFtIHtNYXRyaXh9ICAgc3BhcnNlTWF0cml4ICAgICAgVGhlIFNwYXJzZU1hdHJpeCBpbnN0YW5jZSAoUylcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgICAgICAgICAgVGhlIGYoRGlqLFNpaikgb3BlcmF0aW9uIHRvIGludm9rZSwgd2hlcmUgRGlqID0gRGVuc2VNYXRyaXgoaSxqKSBhbmQgU2lqID0gU3BhcnNlTWF0cml4KGksailcbiAgICogQHBhcmFtIHtib29sZWFufSAgaW52ZXJzZSAgICAgICAgICAgQSB0cnVlIHZhbHVlIGluZGljYXRlcyBjYWxsYmFjayBzaG91bGQgYmUgaW52b2tlZCBmKFNpaixEaWopXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgICAgIERlbnNlTWF0cml4IChDKVxuICAgKlxuICAgKiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pvc2Rlam9uZy9tYXRoanMvcHVsbC8zNDYjaXNzdWVjb21tZW50LTk3NDc3NTcxXG4gICAqL1xuICByZXR1cm4gZnVuY3Rpb24gYWxnb3JpdGhtMShkZW5zZU1hdHJpeCwgc3BhcnNlTWF0cml4LCBjYWxsYmFjaywgaW52ZXJzZSkge1xuICAgIC8vIGRlbnNlIG1hdHJpeCBhcnJheXNcbiAgICB2YXIgYWRhdGEgPSBkZW5zZU1hdHJpeC5fZGF0YTtcbiAgICB2YXIgYXNpemUgPSBkZW5zZU1hdHJpeC5fc2l6ZTtcbiAgICB2YXIgYWR0ID0gZGVuc2VNYXRyaXguX2RhdGF0eXBlOyAvLyBzcGFyc2UgbWF0cml4IGFycmF5c1xuXG4gICAgdmFyIGJ2YWx1ZXMgPSBzcGFyc2VNYXRyaXguX3ZhbHVlcztcbiAgICB2YXIgYmluZGV4ID0gc3BhcnNlTWF0cml4Ll9pbmRleDtcbiAgICB2YXIgYnB0ciA9IHNwYXJzZU1hdHJpeC5fcHRyO1xuICAgIHZhciBic2l6ZSA9IHNwYXJzZU1hdHJpeC5fc2l6ZTtcbiAgICB2YXIgYmR0ID0gc3BhcnNlTWF0cml4Ll9kYXRhdHlwZTsgLy8gdmFsaWRhdGUgZGltZW5zaW9uc1xuXG4gICAgaWYgKGFzaXplLmxlbmd0aCAhPT0gYnNpemUubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKGFzaXplLmxlbmd0aCwgYnNpemUubGVuZ3RoKTtcbiAgICB9IC8vIGNoZWNrIHJvd3MgJiBjb2x1bW5zXG5cblxuICAgIGlmIChhc2l6ZVswXSAhPT0gYnNpemVbMF0gfHwgYXNpemVbMV0gIT09IGJzaXplWzFdKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRGltZW5zaW9uIG1pc21hdGNoLiBNYXRyaXggQSAoJyArIGFzaXplICsgJykgbXVzdCBtYXRjaCBNYXRyaXggQiAoJyArIGJzaXplICsgJyknKTtcbiAgICB9IC8vIHNwYXJzZSBtYXRyaXggY2Fubm90IGJlIGEgUGF0dGVybiBtYXRyaXhcblxuXG4gICAgaWYgKCFidmFsdWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBwZXJmb3JtIG9wZXJhdGlvbiBvbiBEZW5zZSBNYXRyaXggYW5kIFBhdHRlcm4gU3BhcnNlIE1hdHJpeCcpO1xuICAgIH0gLy8gcm93cyAmIGNvbHVtbnNcblxuXG4gICAgdmFyIHJvd3MgPSBhc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IGFzaXplWzFdOyAvLyBwcm9jZXNzIGRhdGEgdHlwZXNcblxuICAgIHZhciBkdCA9IHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnICYmIGFkdCA9PT0gYmR0ID8gYWR0IDogdW5kZWZpbmVkOyAvLyBjYWxsYmFjayBmdW5jdGlvblxuXG4gICAgdmFyIGNmID0gZHQgPyB0eXBlZC5maW5kKGNhbGxiYWNrLCBbZHQsIGR0XSkgOiBjYWxsYmFjazsgLy8gdmFyc1xuXG4gICAgdmFyIGksIGo7IC8vIHJlc3VsdCAoRGVuc2VNYXRyaXgpXG5cbiAgICB2YXIgY2RhdGEgPSBbXTsgLy8gaW5pdGlhbGl6ZSBjXG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICBjZGF0YVtpXSA9IFtdO1xuICAgIH0gLy8gd29ya3NwYWNlXG5cblxuICAgIHZhciB4ID0gW107IC8vIG1hcmtzIGluZGljYXRpbmcgd2UgaGF2ZSBhIHZhbHVlIGluIHggZm9yIGEgZ2l2ZW4gY29sdW1uXG5cbiAgICB2YXIgdyA9IFtdOyAvLyBsb29wIGNvbHVtbnMgaW4gYlxuXG4gICAgZm9yIChqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgLy8gY29sdW1uIG1hcmtcbiAgICAgIHZhciBtYXJrID0gaiArIDE7IC8vIHZhbHVlcyBpbiBjb2x1bW4galxuXG4gICAgICBmb3IgKHZhciBrMCA9IGJwdHJbal0sIGsxID0gYnB0cltqICsgMV0sIGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgLy8gcm93XG4gICAgICAgIGkgPSBiaW5kZXhba107IC8vIHVwZGF0ZSB3b3Jrc3BhY2VcblxuICAgICAgICB4W2ldID0gaW52ZXJzZSA/IGNmKGJ2YWx1ZXNba10sIGFkYXRhW2ldW2pdKSA6IGNmKGFkYXRhW2ldW2pdLCBidmFsdWVzW2tdKTsgLy8gbWFyayBpIGFzIHVwZGF0ZWRcblxuICAgICAgICB3W2ldID0gbWFyaztcbiAgICAgIH0gLy8gbG9vcCByb3dzXG5cblxuICAgICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAvLyBjaGVjayByb3cgaXMgaW4gd29ya3NwYWNlXG4gICAgICAgIGlmICh3W2ldID09PSBtYXJrKSB7XG4gICAgICAgICAgLy8gY1tpXVtqXSB3YXMgYWxyZWFkeSBjYWxjdWxhdGVkXG4gICAgICAgICAgY2RhdGFbaV1bal0gPSB4W2ldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGl0ZW0gZG9lcyBub3QgZXhpc3QgaW4gU1xuICAgICAgICAgIGNkYXRhW2ldW2pdID0gYWRhdGFbaV1bal07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIHJldHVybiBkZW5zZSBtYXRyaXhcblxuXG4gICAgcmV0dXJuIGRlbnNlTWF0cml4LmNyZWF0ZURlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6IGNkYXRhLFxuICAgICAgc2l6ZTogW3Jvd3MsIGNvbHVtbnNdLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7XG4gIH07XG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMDEgPSBjcmVhdGVBbGdvcml0aG0wMTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMDIgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX0RpbWVuc2lvbkVycm9yID0gcmVxdWlyZShcIi4uLy4uLy4uL2Vycm9yL0RpbWVuc2lvbkVycm9yXCIpO1xuXG52YXIgbmFtZSA9ICdhbGdvcml0aG0wMic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdlcXVhbFNjYWxhciddO1xudmFyIGNyZWF0ZUFsZ29yaXRobTAyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcjtcblxuICAvKipcbiAgICogSXRlcmF0ZXMgb3ZlciBTcGFyc2VNYXRyaXggbm9uemVybyBpdGVtcyBhbmQgaW52b2tlcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZihEaWosIFNpaikuXG4gICAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgTk5aIHRpbWVzIChudW1iZXIgb2Ygbm9uemVybyBpdGVtcyBpbiBTcGFyc2VNYXRyaXgpLlxuICAgKlxuICAgKlxuICAgKiAgICAgICAgICDilIwgIGYoRGlqLCBTaWopICA7IFMoaSxqKSAhPT0gMFxuICAgKiBDKGksaikgPSDilKRcbiAgICogICAgICAgICAg4pSUICAwICAgICAgICAgICAgOyBvdGhlcndpc2VcbiAgICpcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9ICAgZGVuc2VNYXRyaXggICAgICAgVGhlIERlbnNlTWF0cml4IGluc3RhbmNlIChEKVxuICAgKiBAcGFyYW0ge01hdHJpeH0gICBzcGFyc2VNYXRyaXggICAgICBUaGUgU3BhcnNlTWF0cml4IGluc3RhbmNlIChTKVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgICAgICAgICBUaGUgZihEaWosU2lqKSBvcGVyYXRpb24gdG8gaW52b2tlLCB3aGVyZSBEaWogPSBEZW5zZU1hdHJpeChpLGopIGFuZCBTaWogPSBTcGFyc2VNYXRyaXgoaSxqKVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICBpbnZlcnNlICAgICAgICAgICBBIHRydWUgdmFsdWUgaW5kaWNhdGVzIGNhbGxiYWNrIHNob3VsZCBiZSBpbnZva2VkIGYoU2lqLERpailcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICAgICAgICAgU3BhcnNlTWF0cml4IChDKVxuICAgKlxuICAgKiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pvc2Rlam9uZy9tYXRoanMvcHVsbC8zNDYjaXNzdWVjb21tZW50LTk3NDc3NTcxXG4gICAqL1xuICByZXR1cm4gZnVuY3Rpb24gYWxnb3JpdGhtMDIoZGVuc2VNYXRyaXgsIHNwYXJzZU1hdHJpeCwgY2FsbGJhY2ssIGludmVyc2UpIHtcbiAgICAvLyBkZW5zZSBtYXRyaXggYXJyYXlzXG4gICAgdmFyIGFkYXRhID0gZGVuc2VNYXRyaXguX2RhdGE7XG4gICAgdmFyIGFzaXplID0gZGVuc2VNYXRyaXguX3NpemU7XG4gICAgdmFyIGFkdCA9IGRlbnNlTWF0cml4Ll9kYXRhdHlwZTsgLy8gc3BhcnNlIG1hdHJpeCBhcnJheXNcblxuICAgIHZhciBidmFsdWVzID0gc3BhcnNlTWF0cml4Ll92YWx1ZXM7XG4gICAgdmFyIGJpbmRleCA9IHNwYXJzZU1hdHJpeC5faW5kZXg7XG4gICAgdmFyIGJwdHIgPSBzcGFyc2VNYXRyaXguX3B0cjtcbiAgICB2YXIgYnNpemUgPSBzcGFyc2VNYXRyaXguX3NpemU7XG4gICAgdmFyIGJkdCA9IHNwYXJzZU1hdHJpeC5fZGF0YXR5cGU7IC8vIHZhbGlkYXRlIGRpbWVuc2lvbnNcblxuICAgIGlmIChhc2l6ZS5sZW5ndGggIT09IGJzaXplLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihhc2l6ZS5sZW5ndGgsIGJzaXplLmxlbmd0aCk7XG4gICAgfSAvLyBjaGVjayByb3dzICYgY29sdW1uc1xuXG5cbiAgICBpZiAoYXNpemVbMF0gIT09IGJzaXplWzBdIHx8IGFzaXplWzFdICE9PSBic2l6ZVsxXSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RpbWVuc2lvbiBtaXNtYXRjaC4gTWF0cml4IEEgKCcgKyBhc2l6ZSArICcpIG11c3QgbWF0Y2ggTWF0cml4IEIgKCcgKyBic2l6ZSArICcpJyk7XG4gICAgfSAvLyBzcGFyc2UgbWF0cml4IGNhbm5vdCBiZSBhIFBhdHRlcm4gbWF0cml4XG5cblxuICAgIGlmICghYnZhbHVlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcGVyZm9ybSBvcGVyYXRpb24gb24gRGVuc2UgTWF0cml4IGFuZCBQYXR0ZXJuIFNwYXJzZSBNYXRyaXgnKTtcbiAgICB9IC8vIHJvd3MgJiBjb2x1bW5zXG5cblxuICAgIHZhciByb3dzID0gYXNpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSBhc2l6ZVsxXTsgLy8gZGF0YXR5cGVcblxuICAgIHZhciBkdDsgLy8gZXF1YWwgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGVxID0gZXF1YWxTY2FsYXI7IC8vIHplcm8gdmFsdWVcblxuICAgIHZhciB6ZXJvID0gMDsgLy8gY2FsbGJhY2sgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGNmID0gY2FsbGJhY2s7IC8vIHByb2Nlc3MgZGF0YSB0eXBlc1xuXG4gICAgaWYgKHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnICYmIGFkdCA9PT0gYmR0KSB7XG4gICAgICAvLyBkYXRhdHlwZVxuICAgICAgZHQgPSBhZHQ7IC8vIGZpbmQgc2lnbmF0dXJlIHRoYXQgbWF0Y2hlcyAoZHQsIGR0KVxuXG4gICAgICBlcSA9IHR5cGVkLmZpbmQoZXF1YWxTY2FsYXIsIFtkdCwgZHRdKTsgLy8gY29udmVydCAwIHRvIHRoZSBzYW1lIGRhdGF0eXBlXG5cbiAgICAgIHplcm8gPSB0eXBlZC5jb252ZXJ0KDAsIGR0KTsgLy8gY2FsbGJhY2tcblxuICAgICAgY2YgPSB0eXBlZC5maW5kKGNhbGxiYWNrLCBbZHQsIGR0XSk7XG4gICAgfSAvLyByZXN1bHQgKFNwYXJzZU1hdHJpeClcblxuXG4gICAgdmFyIGN2YWx1ZXMgPSBbXTtcbiAgICB2YXIgY2luZGV4ID0gW107XG4gICAgdmFyIGNwdHIgPSBbXTsgLy8gbG9vcCBjb2x1bW5zIGluIGJcblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAvLyB1cGRhdGUgY3B0clxuICAgICAgY3B0cltqXSA9IGNpbmRleC5sZW5ndGg7IC8vIHZhbHVlcyBpbiBjb2x1bW4galxuXG4gICAgICBmb3IgKHZhciBrMCA9IGJwdHJbal0sIGsxID0gYnB0cltqICsgMV0sIGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgLy8gcm93XG4gICAgICAgIHZhciBpID0gYmluZGV4W2tdOyAvLyB1cGRhdGUgQyhpLGopXG5cbiAgICAgICAgdmFyIGNpaiA9IGludmVyc2UgPyBjZihidmFsdWVzW2tdLCBhZGF0YVtpXVtqXSkgOiBjZihhZGF0YVtpXVtqXSwgYnZhbHVlc1trXSk7IC8vIGNoZWNrIGZvciBub256ZXJvXG5cbiAgICAgICAgaWYgKCFlcShjaWosIHplcm8pKSB7XG4gICAgICAgICAgLy8gcHVzaCBpICYgdlxuICAgICAgICAgIGNpbmRleC5wdXNoKGkpO1xuICAgICAgICAgIGN2YWx1ZXMucHVzaChjaWopO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyB1cGRhdGUgY3B0clxuXG5cbiAgICBjcHRyW2NvbHVtbnNdID0gY2luZGV4Lmxlbmd0aDsgLy8gcmV0dXJuIHNwYXJzZSBtYXRyaXhcblxuICAgIHJldHVybiBzcGFyc2VNYXRyaXguY3JlYXRlU3BhcnNlTWF0cml4KHtcbiAgICAgIHZhbHVlczogY3ZhbHVlcyxcbiAgICAgIGluZGV4OiBjaW5kZXgsXG4gICAgICBwdHI6IGNwdHIsXG4gICAgICBzaXplOiBbcm93cywgY29sdW1uc10sXG4gICAgICBkYXRhdHlwZTogZHRcbiAgICB9KTtcbiAgfTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVBbGdvcml0aG0wMiA9IGNyZWF0ZUFsZ29yaXRobTAyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBbGdvcml0aG0wMyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfRGltZW5zaW9uRXJyb3IgPSByZXF1aXJlKFwiLi4vLi4vLi4vZXJyb3IvRGltZW5zaW9uRXJyb3JcIik7XG5cbnZhciBuYW1lID0gJ2FsZ29yaXRobTAzJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlQWxnb3JpdGhtMDMgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBJdGVyYXRlcyBvdmVyIFNwYXJzZU1hdHJpeCBpdGVtcyBhbmQgaW52b2tlcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZihEaWosIFNpaikuXG4gICAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgTSpOIHRpbWVzLlxuICAgKlxuICAgKlxuICAgKiAgICAgICAgICDilIwgIGYoRGlqLCBTaWopICA7IFMoaSxqKSAhPT0gMFxuICAgKiBDKGksaikgPSDilKRcbiAgICogICAgICAgICAg4pSUICBmKERpaiwgMCkgICAgOyBvdGhlcndpc2VcbiAgICpcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9ICAgZGVuc2VNYXRyaXggICAgICAgVGhlIERlbnNlTWF0cml4IGluc3RhbmNlIChEKVxuICAgKiBAcGFyYW0ge01hdHJpeH0gICBzcGFyc2VNYXRyaXggICAgICBUaGUgU3BhcnNlTWF0cml4IGluc3RhbmNlIChDKVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgICAgICAgICBUaGUgZihEaWosU2lqKSBvcGVyYXRpb24gdG8gaW52b2tlLCB3aGVyZSBEaWogPSBEZW5zZU1hdHJpeChpLGopIGFuZCBTaWogPSBTcGFyc2VNYXRyaXgoaSxqKVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICBpbnZlcnNlICAgICAgICAgICBBIHRydWUgdmFsdWUgaW5kaWNhdGVzIGNhbGxiYWNrIHNob3VsZCBiZSBpbnZva2VkIGYoU2lqLERpailcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICAgICAgICAgRGVuc2VNYXRyaXggKEMpXG4gICAqXG4gICAqIHNlZSBodHRwczovL2dpdGh1Yi5jb20vam9zZGVqb25nL21hdGhqcy9wdWxsLzM0NiNpc3N1ZWNvbW1lbnQtOTc0Nzc1NzFcbiAgICovXG4gIHJldHVybiBmdW5jdGlvbiBhbGdvcml0aG0wMyhkZW5zZU1hdHJpeCwgc3BhcnNlTWF0cml4LCBjYWxsYmFjaywgaW52ZXJzZSkge1xuICAgIC8vIGRlbnNlIG1hdHJpeCBhcnJheXNcbiAgICB2YXIgYWRhdGEgPSBkZW5zZU1hdHJpeC5fZGF0YTtcbiAgICB2YXIgYXNpemUgPSBkZW5zZU1hdHJpeC5fc2l6ZTtcbiAgICB2YXIgYWR0ID0gZGVuc2VNYXRyaXguX2RhdGF0eXBlOyAvLyBzcGFyc2UgbWF0cml4IGFycmF5c1xuXG4gICAgdmFyIGJ2YWx1ZXMgPSBzcGFyc2VNYXRyaXguX3ZhbHVlcztcbiAgICB2YXIgYmluZGV4ID0gc3BhcnNlTWF0cml4Ll9pbmRleDtcbiAgICB2YXIgYnB0ciA9IHNwYXJzZU1hdHJpeC5fcHRyO1xuICAgIHZhciBic2l6ZSA9IHNwYXJzZU1hdHJpeC5fc2l6ZTtcbiAgICB2YXIgYmR0ID0gc3BhcnNlTWF0cml4Ll9kYXRhdHlwZTsgLy8gdmFsaWRhdGUgZGltZW5zaW9uc1xuXG4gICAgaWYgKGFzaXplLmxlbmd0aCAhPT0gYnNpemUubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKGFzaXplLmxlbmd0aCwgYnNpemUubGVuZ3RoKTtcbiAgICB9IC8vIGNoZWNrIHJvd3MgJiBjb2x1bW5zXG5cblxuICAgIGlmIChhc2l6ZVswXSAhPT0gYnNpemVbMF0gfHwgYXNpemVbMV0gIT09IGJzaXplWzFdKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRGltZW5zaW9uIG1pc21hdGNoLiBNYXRyaXggQSAoJyArIGFzaXplICsgJykgbXVzdCBtYXRjaCBNYXRyaXggQiAoJyArIGJzaXplICsgJyknKTtcbiAgICB9IC8vIHNwYXJzZSBtYXRyaXggY2Fubm90IGJlIGEgUGF0dGVybiBtYXRyaXhcblxuXG4gICAgaWYgKCFidmFsdWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBwZXJmb3JtIG9wZXJhdGlvbiBvbiBEZW5zZSBNYXRyaXggYW5kIFBhdHRlcm4gU3BhcnNlIE1hdHJpeCcpO1xuICAgIH0gLy8gcm93cyAmIGNvbHVtbnNcblxuXG4gICAgdmFyIHJvd3MgPSBhc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IGFzaXplWzFdOyAvLyBkYXRhdHlwZVxuXG4gICAgdmFyIGR0OyAvLyB6ZXJvIHZhbHVlXG5cbiAgICB2YXIgemVybyA9IDA7IC8vIGNhbGxiYWNrIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBjZiA9IGNhbGxiYWNrOyAvLyBwcm9jZXNzIGRhdGEgdHlwZXNcblxuICAgIGlmICh0eXBlb2YgYWR0ID09PSAnc3RyaW5nJyAmJiBhZHQgPT09IGJkdCkge1xuICAgICAgLy8gZGF0YXR5cGVcbiAgICAgIGR0ID0gYWR0OyAvLyBjb252ZXJ0IDAgdG8gdGhlIHNhbWUgZGF0YXR5cGVcblxuICAgICAgemVybyA9IHR5cGVkLmNvbnZlcnQoMCwgZHQpOyAvLyBjYWxsYmFja1xuXG4gICAgICBjZiA9IHR5cGVkLmZpbmQoY2FsbGJhY2ssIFtkdCwgZHRdKTtcbiAgICB9IC8vIHJlc3VsdCAoRGVuc2VNYXRyaXgpXG5cblxuICAgIHZhciBjZGF0YSA9IFtdOyAvLyBpbml0aWFsaXplIGRlbnNlIG1hdHJpeFxuXG4gICAgZm9yICh2YXIgeiA9IDA7IHogPCByb3dzOyB6KyspIHtcbiAgICAgIC8vIGluaXRpYWxpemUgcm93XG4gICAgICBjZGF0YVt6XSA9IFtdO1xuICAgIH0gLy8gd29ya3NwYWNlXG5cblxuICAgIHZhciB4ID0gW107IC8vIG1hcmtzIGluZGljYXRpbmcgd2UgaGF2ZSBhIHZhbHVlIGluIHggZm9yIGEgZ2l2ZW4gY29sdW1uXG5cbiAgICB2YXIgdyA9IFtdOyAvLyBsb29wIGNvbHVtbnMgaW4gYlxuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgIC8vIGNvbHVtbiBtYXJrXG4gICAgICB2YXIgbWFyayA9IGogKyAxOyAvLyB2YWx1ZXMgaW4gY29sdW1uIGpcblxuICAgICAgZm9yICh2YXIgazAgPSBicHRyW2pdLCBrMSA9IGJwdHJbaiArIDFdLCBrID0gazA7IGsgPCBrMTsgaysrKSB7XG4gICAgICAgIC8vIHJvd1xuICAgICAgICB2YXIgaSA9IGJpbmRleFtrXTsgLy8gdXBkYXRlIHdvcmtzcGFjZVxuXG4gICAgICAgIHhbaV0gPSBpbnZlcnNlID8gY2YoYnZhbHVlc1trXSwgYWRhdGFbaV1bal0pIDogY2YoYWRhdGFbaV1bal0sIGJ2YWx1ZXNba10pO1xuICAgICAgICB3W2ldID0gbWFyaztcbiAgICAgIH0gLy8gcHJvY2VzcyB3b3Jrc3BhY2VcblxuXG4gICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IHJvd3M7IHkrKykge1xuICAgICAgICAvLyBjaGVjayB3ZSBoYXZlIGEgY2FsY3VsYXRlZCB2YWx1ZSBmb3IgY3VycmVudCByb3dcbiAgICAgICAgaWYgKHdbeV0gPT09IG1hcmspIHtcbiAgICAgICAgICAvLyB1c2UgY2FsY3VsYXRlZCB2YWx1ZVxuICAgICAgICAgIGNkYXRhW3ldW2pdID0geFt5XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBjYWxjdWxhdGUgdmFsdWVcbiAgICAgICAgICBjZGF0YVt5XVtqXSA9IGludmVyc2UgPyBjZih6ZXJvLCBhZGF0YVt5XVtqXSkgOiBjZihhZGF0YVt5XVtqXSwgemVybyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIHJldHVybiBkZW5zZSBtYXRyaXhcblxuXG4gICAgcmV0dXJuIGRlbnNlTWF0cml4LmNyZWF0ZURlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6IGNkYXRhLFxuICAgICAgc2l6ZTogW3Jvd3MsIGNvbHVtbnNdLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7XG4gIH07XG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMDMgPSBjcmVhdGVBbGdvcml0aG0wMzsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMDQgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX0RpbWVuc2lvbkVycm9yID0gcmVxdWlyZShcIi4uLy4uLy4uL2Vycm9yL0RpbWVuc2lvbkVycm9yXCIpO1xuXG52YXIgbmFtZSA9ICdhbGdvcml0aG0wNCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdlcXVhbFNjYWxhciddO1xudmFyIGNyZWF0ZUFsZ29yaXRobTA0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcjtcblxuICAvKipcbiAgICogSXRlcmF0ZXMgb3ZlciBTcGFyc2VNYXRyaXggQSBhbmQgU3BhcnNlTWF0cml4IEIgbm9uemVybyBpdGVtcyBhbmQgaW52b2tlcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZihBaWosIEJpaikuXG4gICAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgTUFYKE5OWkEsIE5OWkIpIHRpbWVzXG4gICAqXG4gICAqXG4gICAqICAgICAgICAgIOKUjCAgZihBaWosIEJpaikgIDsgQShpLGopICE9PSAwICYmIEIoaSxqKSAhPT0gMFxuICAgKiBDKGksaikgPSDilKQgIEEoaSxqKSAgICAgICA7IEEoaSxqKSAhPT0gMFxuICAgKiAgICAgICAgICDilJQgIEIoaSxqKSAgICAgICA7IEIoaSxqKSAhPT0gMFxuICAgKlxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeH0gICBhICAgICAgICAgICAgICAgICBUaGUgU3BhcnNlTWF0cml4IGluc3RhbmNlIChBKVxuICAgKiBAcGFyYW0ge01hdHJpeH0gICBiICAgICAgICAgICAgICAgICBUaGUgU3BhcnNlTWF0cml4IGluc3RhbmNlIChCKVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgICAgICAgICBUaGUgZihBaWosQmlqKSBvcGVyYXRpb24gdG8gaW52b2tlXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgICAgIFNwYXJzZU1hdHJpeCAoQylcbiAgICpcbiAgICogc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qb3NkZWpvbmcvbWF0aGpzL3B1bGwvMzQ2I2lzc3VlY29tbWVudC05NzYyMDI5NFxuICAgKi9cbiAgcmV0dXJuIGZ1bmN0aW9uIGFsZ29yaXRobTA0KGEsIGIsIGNhbGxiYWNrKSB7XG4gICAgLy8gc3BhcnNlIG1hdHJpeCBhcnJheXNcbiAgICB2YXIgYXZhbHVlcyA9IGEuX3ZhbHVlcztcbiAgICB2YXIgYWluZGV4ID0gYS5faW5kZXg7XG4gICAgdmFyIGFwdHIgPSBhLl9wdHI7XG4gICAgdmFyIGFzaXplID0gYS5fc2l6ZTtcbiAgICB2YXIgYWR0ID0gYS5fZGF0YXR5cGU7IC8vIHNwYXJzZSBtYXRyaXggYXJyYXlzXG5cbiAgICB2YXIgYnZhbHVlcyA9IGIuX3ZhbHVlcztcbiAgICB2YXIgYmluZGV4ID0gYi5faW5kZXg7XG4gICAgdmFyIGJwdHIgPSBiLl9wdHI7XG4gICAgdmFyIGJzaXplID0gYi5fc2l6ZTtcbiAgICB2YXIgYmR0ID0gYi5fZGF0YXR5cGU7IC8vIHZhbGlkYXRlIGRpbWVuc2lvbnNcblxuICAgIGlmIChhc2l6ZS5sZW5ndGggIT09IGJzaXplLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihhc2l6ZS5sZW5ndGgsIGJzaXplLmxlbmd0aCk7XG4gICAgfSAvLyBjaGVjayByb3dzICYgY29sdW1uc1xuXG5cbiAgICBpZiAoYXNpemVbMF0gIT09IGJzaXplWzBdIHx8IGFzaXplWzFdICE9PSBic2l6ZVsxXSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RpbWVuc2lvbiBtaXNtYXRjaC4gTWF0cml4IEEgKCcgKyBhc2l6ZSArICcpIG11c3QgbWF0Y2ggTWF0cml4IEIgKCcgKyBic2l6ZSArICcpJyk7XG4gICAgfSAvLyByb3dzICYgY29sdW1uc1xuXG5cbiAgICB2YXIgcm93cyA9IGFzaXplWzBdO1xuICAgIHZhciBjb2x1bW5zID0gYXNpemVbMV07IC8vIGRhdGF0eXBlXG5cbiAgICB2YXIgZHQ7IC8vIGVxdWFsIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBlcSA9IGVxdWFsU2NhbGFyOyAvLyB6ZXJvIHZhbHVlXG5cbiAgICB2YXIgemVybyA9IDA7IC8vIGNhbGxiYWNrIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBjZiA9IGNhbGxiYWNrOyAvLyBwcm9jZXNzIGRhdGEgdHlwZXNcblxuICAgIGlmICh0eXBlb2YgYWR0ID09PSAnc3RyaW5nJyAmJiBhZHQgPT09IGJkdCkge1xuICAgICAgLy8gZGF0YXR5cGVcbiAgICAgIGR0ID0gYWR0OyAvLyBmaW5kIHNpZ25hdHVyZSB0aGF0IG1hdGNoZXMgKGR0LCBkdClcblxuICAgICAgZXEgPSB0eXBlZC5maW5kKGVxdWFsU2NhbGFyLCBbZHQsIGR0XSk7IC8vIGNvbnZlcnQgMCB0byB0aGUgc2FtZSBkYXRhdHlwZVxuXG4gICAgICB6ZXJvID0gdHlwZWQuY29udmVydCgwLCBkdCk7IC8vIGNhbGxiYWNrXG5cbiAgICAgIGNmID0gdHlwZWQuZmluZChjYWxsYmFjaywgW2R0LCBkdF0pO1xuICAgIH0gLy8gcmVzdWx0IGFycmF5c1xuXG5cbiAgICB2YXIgY3ZhbHVlcyA9IGF2YWx1ZXMgJiYgYnZhbHVlcyA/IFtdIDogdW5kZWZpbmVkO1xuICAgIHZhciBjaW5kZXggPSBbXTtcbiAgICB2YXIgY3B0ciA9IFtdOyAvLyB3b3Jrc3BhY2VcblxuICAgIHZhciB4YSA9IGF2YWx1ZXMgJiYgYnZhbHVlcyA/IFtdIDogdW5kZWZpbmVkO1xuICAgIHZhciB4YiA9IGF2YWx1ZXMgJiYgYnZhbHVlcyA/IFtdIDogdW5kZWZpbmVkOyAvLyBtYXJrcyBpbmRpY2F0aW5nIHdlIGhhdmUgYSB2YWx1ZSBpbiB4IGZvciBhIGdpdmVuIGNvbHVtblxuXG4gICAgdmFyIHdhID0gW107XG4gICAgdmFyIHdiID0gW107IC8vIHZhcnNcblxuICAgIHZhciBpLCBqLCBrLCBrMCwgazE7IC8vIGxvb3AgY29sdW1uc1xuXG4gICAgZm9yIChqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgLy8gdXBkYXRlIGNwdHJcbiAgICAgIGNwdHJbal0gPSBjaW5kZXgubGVuZ3RoOyAvLyBjb2x1bW5zIG1hcmtcblxuICAgICAgdmFyIG1hcmsgPSBqICsgMTsgLy8gbG9vcCBBKDosailcblxuICAgICAgZm9yIChrMCA9IGFwdHJbal0sIGsxID0gYXB0cltqICsgMV0sIGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgLy8gcm93XG4gICAgICAgIGkgPSBhaW5kZXhba107IC8vIHVwZGF0ZSBjXG5cbiAgICAgICAgY2luZGV4LnB1c2goaSk7IC8vIHVwZGF0ZSB3b3Jrc3BhY2VcblxuICAgICAgICB3YVtpXSA9IG1hcms7IC8vIGNoZWNrIHdlIG5lZWQgdG8gcHJvY2VzcyB2YWx1ZXNcblxuICAgICAgICBpZiAoeGEpIHtcbiAgICAgICAgICB4YVtpXSA9IGF2YWx1ZXNba107XG4gICAgICAgIH1cbiAgICAgIH0gLy8gbG9vcCBCKDosailcblxuXG4gICAgICBmb3IgKGswID0gYnB0cltqXSwgazEgPSBicHRyW2ogKyAxXSwgayA9IGswOyBrIDwgazE7IGsrKykge1xuICAgICAgICAvLyByb3dcbiAgICAgICAgaSA9IGJpbmRleFtrXTsgLy8gY2hlY2sgcm93IGV4aXN0cyBpbiBBXG5cbiAgICAgICAgaWYgKHdhW2ldID09PSBtYXJrKSB7XG4gICAgICAgICAgLy8gdXBkYXRlIHJlY29yZCBpbiB4YSBAIGlcbiAgICAgICAgICBpZiAoeGEpIHtcbiAgICAgICAgICAgIC8vIGludm9rZSBjYWxsYmFja1xuICAgICAgICAgICAgdmFyIHYgPSBjZih4YVtpXSwgYnZhbHVlc1trXSk7IC8vIGNoZWNrIGZvciB6ZXJvXG5cbiAgICAgICAgICAgIGlmICghZXEodiwgemVybykpIHtcbiAgICAgICAgICAgICAgLy8gdXBkYXRlIHdvcmtzcGFjZVxuICAgICAgICAgICAgICB4YVtpXSA9IHY7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyByZW1vdmUgbWFyayAoaW5kZXggd2lsbCBiZSByZW1vdmVkIGxhdGVyKVxuICAgICAgICAgICAgICB3YVtpXSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHVwZGF0ZSBjXG4gICAgICAgICAgY2luZGV4LnB1c2goaSk7IC8vIHVwZGF0ZSB3b3Jrc3BhY2VcblxuICAgICAgICAgIHdiW2ldID0gbWFyazsgLy8gY2hlY2sgd2UgbmVlZCB0byBwcm9jZXNzIHZhbHVlc1xuXG4gICAgICAgICAgaWYgKHhiKSB7XG4gICAgICAgICAgICB4YltpXSA9IGJ2YWx1ZXNba107XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IC8vIGNoZWNrIHdlIG5lZWQgdG8gcHJvY2VzcyB2YWx1ZXMgKG5vbiBwYXR0ZXJuIG1hdHJpeClcblxuXG4gICAgICBpZiAoeGEgJiYgeGIpIHtcbiAgICAgICAgLy8gaW5pdGlhbGl6ZSBmaXJzdCBpbmRleCBpbiBqXG4gICAgICAgIGsgPSBjcHRyW2pdOyAvLyBsb29wIGluZGV4IGluIGpcblxuICAgICAgICB3aGlsZSAoayA8IGNpbmRleC5sZW5ndGgpIHtcbiAgICAgICAgICAvLyByb3dcbiAgICAgICAgICBpID0gY2luZGV4W2tdOyAvLyBjaGVjayB3b3Jrc3BhY2UgaGFzIHZhbHVlIEAgaVxuXG4gICAgICAgICAgaWYgKHdhW2ldID09PSBtYXJrKSB7XG4gICAgICAgICAgICAvLyBwdXNoIHZhbHVlIChBaWogIT0gMCB8fCAoQWlqICE9IDAgJiYgQmlqICE9IDApKVxuICAgICAgICAgICAgY3ZhbHVlc1trXSA9IHhhW2ldOyAvLyBpbmNyZW1lbnQgcG9pbnRlclxuXG4gICAgICAgICAgICBrKys7XG4gICAgICAgICAgfSBlbHNlIGlmICh3YltpXSA9PT0gbWFyaykge1xuICAgICAgICAgICAgLy8gcHVzaCB2YWx1ZSAoYmlqICE9IDApXG4gICAgICAgICAgICBjdmFsdWVzW2tdID0geGJbaV07IC8vIGluY3JlbWVudCBwb2ludGVyXG5cbiAgICAgICAgICAgIGsrKztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gcmVtb3ZlIGluZGV4IEAga1xuICAgICAgICAgICAgY2luZGV4LnNwbGljZShrLCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIHVwZGF0ZSBjcHRyXG5cblxuICAgIGNwdHJbY29sdW1uc10gPSBjaW5kZXgubGVuZ3RoOyAvLyByZXR1cm4gc3BhcnNlIG1hdHJpeFxuXG4gICAgcmV0dXJuIGEuY3JlYXRlU3BhcnNlTWF0cml4KHtcbiAgICAgIHZhbHVlczogY3ZhbHVlcyxcbiAgICAgIGluZGV4OiBjaW5kZXgsXG4gICAgICBwdHI6IGNwdHIsXG4gICAgICBzaXplOiBbcm93cywgY29sdW1uc10sXG4gICAgICBkYXRhdHlwZTogZHRcbiAgICB9KTtcbiAgfTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVBbGdvcml0aG0wNCA9IGNyZWF0ZUFsZ29yaXRobTA0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBbGdvcml0aG0wNSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfRGltZW5zaW9uRXJyb3IgPSByZXF1aXJlKFwiLi4vLi4vLi4vZXJyb3IvRGltZW5zaW9uRXJyb3JcIik7XG5cbnZhciBuYW1lID0gJ2FsZ29yaXRobTA1JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2VxdWFsU2NhbGFyJ107XG52YXIgY3JlYXRlQWxnb3JpdGhtMDUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyO1xuXG4gIC8qKlxuICAgKiBJdGVyYXRlcyBvdmVyIFNwYXJzZU1hdHJpeCBBIGFuZCBTcGFyc2VNYXRyaXggQiBub256ZXJvIGl0ZW1zIGFuZCBpbnZva2VzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmKEFpaiwgQmlqKS5cbiAgICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCBNQVgoTk5aQSwgTk5aQikgdGltZXNcbiAgICpcbiAgICpcbiAgICogICAgICAgICAg4pSMICBmKEFpaiwgQmlqKSAgOyBBKGksaikgIT09IDAgfHwgQihpLGopICE9PSAwXG4gICAqIEMoaSxqKSA9IOKUpFxuICAgKiAgICAgICAgICDilJQgIDAgICAgICAgICAgICA7IG90aGVyd2lzZVxuICAgKlxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeH0gICBhICAgICAgICAgICAgICAgICBUaGUgU3BhcnNlTWF0cml4IGluc3RhbmNlIChBKVxuICAgKiBAcGFyYW0ge01hdHJpeH0gICBiICAgICAgICAgICAgICAgICBUaGUgU3BhcnNlTWF0cml4IGluc3RhbmNlIChCKVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgICAgICAgICBUaGUgZihBaWosQmlqKSBvcGVyYXRpb24gdG8gaW52b2tlXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgICAgIFNwYXJzZU1hdHJpeCAoQylcbiAgICpcbiAgICogc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qb3NkZWpvbmcvbWF0aGpzL3B1bGwvMzQ2I2lzc3VlY29tbWVudC05NzYyMDI5NFxuICAgKi9cbiAgcmV0dXJuIGZ1bmN0aW9uIGFsZ29yaXRobTA1KGEsIGIsIGNhbGxiYWNrKSB7XG4gICAgLy8gc3BhcnNlIG1hdHJpeCBhcnJheXNcbiAgICB2YXIgYXZhbHVlcyA9IGEuX3ZhbHVlcztcbiAgICB2YXIgYWluZGV4ID0gYS5faW5kZXg7XG4gICAgdmFyIGFwdHIgPSBhLl9wdHI7XG4gICAgdmFyIGFzaXplID0gYS5fc2l6ZTtcbiAgICB2YXIgYWR0ID0gYS5fZGF0YXR5cGU7IC8vIHNwYXJzZSBtYXRyaXggYXJyYXlzXG5cbiAgICB2YXIgYnZhbHVlcyA9IGIuX3ZhbHVlcztcbiAgICB2YXIgYmluZGV4ID0gYi5faW5kZXg7XG4gICAgdmFyIGJwdHIgPSBiLl9wdHI7XG4gICAgdmFyIGJzaXplID0gYi5fc2l6ZTtcbiAgICB2YXIgYmR0ID0gYi5fZGF0YXR5cGU7IC8vIHZhbGlkYXRlIGRpbWVuc2lvbnNcblxuICAgIGlmIChhc2l6ZS5sZW5ndGggIT09IGJzaXplLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihhc2l6ZS5sZW5ndGgsIGJzaXplLmxlbmd0aCk7XG4gICAgfSAvLyBjaGVjayByb3dzICYgY29sdW1uc1xuXG5cbiAgICBpZiAoYXNpemVbMF0gIT09IGJzaXplWzBdIHx8IGFzaXplWzFdICE9PSBic2l6ZVsxXSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RpbWVuc2lvbiBtaXNtYXRjaC4gTWF0cml4IEEgKCcgKyBhc2l6ZSArICcpIG11c3QgbWF0Y2ggTWF0cml4IEIgKCcgKyBic2l6ZSArICcpJyk7XG4gICAgfSAvLyByb3dzICYgY29sdW1uc1xuXG5cbiAgICB2YXIgcm93cyA9IGFzaXplWzBdO1xuICAgIHZhciBjb2x1bW5zID0gYXNpemVbMV07IC8vIGRhdGF0eXBlXG5cbiAgICB2YXIgZHQ7IC8vIGVxdWFsIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBlcSA9IGVxdWFsU2NhbGFyOyAvLyB6ZXJvIHZhbHVlXG5cbiAgICB2YXIgemVybyA9IDA7IC8vIGNhbGxiYWNrIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBjZiA9IGNhbGxiYWNrOyAvLyBwcm9jZXNzIGRhdGEgdHlwZXNcblxuICAgIGlmICh0eXBlb2YgYWR0ID09PSAnc3RyaW5nJyAmJiBhZHQgPT09IGJkdCkge1xuICAgICAgLy8gZGF0YXR5cGVcbiAgICAgIGR0ID0gYWR0OyAvLyBmaW5kIHNpZ25hdHVyZSB0aGF0IG1hdGNoZXMgKGR0LCBkdClcblxuICAgICAgZXEgPSB0eXBlZC5maW5kKGVxdWFsU2NhbGFyLCBbZHQsIGR0XSk7IC8vIGNvbnZlcnQgMCB0byB0aGUgc2FtZSBkYXRhdHlwZVxuXG4gICAgICB6ZXJvID0gdHlwZWQuY29udmVydCgwLCBkdCk7IC8vIGNhbGxiYWNrXG5cbiAgICAgIGNmID0gdHlwZWQuZmluZChjYWxsYmFjaywgW2R0LCBkdF0pO1xuICAgIH0gLy8gcmVzdWx0IGFycmF5c1xuXG5cbiAgICB2YXIgY3ZhbHVlcyA9IGF2YWx1ZXMgJiYgYnZhbHVlcyA/IFtdIDogdW5kZWZpbmVkO1xuICAgIHZhciBjaW5kZXggPSBbXTtcbiAgICB2YXIgY3B0ciA9IFtdOyAvLyB3b3Jrc3BhY2VzXG5cbiAgICB2YXIgeGEgPSBjdmFsdWVzID8gW10gOiB1bmRlZmluZWQ7XG4gICAgdmFyIHhiID0gY3ZhbHVlcyA/IFtdIDogdW5kZWZpbmVkOyAvLyBtYXJrcyBpbmRpY2F0aW5nIHdlIGhhdmUgYSB2YWx1ZSBpbiB4IGZvciBhIGdpdmVuIGNvbHVtblxuXG4gICAgdmFyIHdhID0gW107XG4gICAgdmFyIHdiID0gW107IC8vIHZhcnNcblxuICAgIHZhciBpLCBqLCBrLCBrMTsgLy8gbG9vcCBjb2x1bW5zXG5cbiAgICBmb3IgKGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAvLyB1cGRhdGUgY3B0clxuICAgICAgY3B0cltqXSA9IGNpbmRleC5sZW5ndGg7IC8vIGNvbHVtbnMgbWFya1xuXG4gICAgICB2YXIgbWFyayA9IGogKyAxOyAvLyBsb29wIHZhbHVlcyBBKDosailcblxuICAgICAgZm9yIChrID0gYXB0cltqXSwgazEgPSBhcHRyW2ogKyAxXTsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgLy8gcm93XG4gICAgICAgIGkgPSBhaW5kZXhba107IC8vIHB1c2ggaW5kZXhcblxuICAgICAgICBjaW5kZXgucHVzaChpKTsgLy8gdXBkYXRlIHdvcmtzcGFjZVxuXG4gICAgICAgIHdhW2ldID0gbWFyazsgLy8gY2hlY2sgd2UgbmVlZCB0byBwcm9jZXNzIHZhbHVlc1xuXG4gICAgICAgIGlmICh4YSkge1xuICAgICAgICAgIHhhW2ldID0gYXZhbHVlc1trXTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBsb29wIHZhbHVlcyBCKDosailcblxuXG4gICAgICBmb3IgKGsgPSBicHRyW2pdLCBrMSA9IGJwdHJbaiArIDFdOyBrIDwgazE7IGsrKykge1xuICAgICAgICAvLyByb3dcbiAgICAgICAgaSA9IGJpbmRleFtrXTsgLy8gY2hlY2sgcm93IGV4aXN0ZWQgaW4gQVxuXG4gICAgICAgIGlmICh3YVtpXSAhPT0gbWFyaykge1xuICAgICAgICAgIC8vIHB1c2ggaW5kZXhcbiAgICAgICAgICBjaW5kZXgucHVzaChpKTtcbiAgICAgICAgfSAvLyB1cGRhdGUgd29ya3NwYWNlXG5cblxuICAgICAgICB3YltpXSA9IG1hcms7IC8vIGNoZWNrIHdlIG5lZWQgdG8gcHJvY2VzcyB2YWx1ZXNcblxuICAgICAgICBpZiAoeGIpIHtcbiAgICAgICAgICB4YltpXSA9IGJ2YWx1ZXNba107XG4gICAgICAgIH1cbiAgICAgIH0gLy8gY2hlY2sgd2UgbmVlZCB0byBwcm9jZXNzIHZhbHVlcyAobm9uIHBhdHRlcm4gbWF0cml4KVxuXG5cbiAgICAgIGlmIChjdmFsdWVzKSB7XG4gICAgICAgIC8vIGluaXRpYWxpemUgZmlyc3QgaW5kZXggaW4galxuICAgICAgICBrID0gY3B0cltqXTsgLy8gbG9vcCBpbmRleCBpbiBqXG5cbiAgICAgICAgd2hpbGUgKGsgPCBjaW5kZXgubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gcm93XG4gICAgICAgICAgaSA9IGNpbmRleFtrXTsgLy8gbWFya3NcblxuICAgICAgICAgIHZhciB3YWkgPSB3YVtpXTtcbiAgICAgICAgICB2YXIgd2JpID0gd2JbaV07IC8vIGNoZWNrIEFpaiBvciBCaWogYXJlIG5vbnplcm9cblxuICAgICAgICAgIGlmICh3YWkgPT09IG1hcmsgfHwgd2JpID09PSBtYXJrKSB7XG4gICAgICAgICAgICAvLyBtYXRyaXggdmFsdWVzIEAgaSxqXG4gICAgICAgICAgICB2YXIgdmEgPSB3YWkgPT09IG1hcmsgPyB4YVtpXSA6IHplcm87XG4gICAgICAgICAgICB2YXIgdmIgPSB3YmkgPT09IG1hcmsgPyB4YltpXSA6IHplcm87IC8vIENpalxuXG4gICAgICAgICAgICB2YXIgdmMgPSBjZih2YSwgdmIpOyAvLyBjaGVjayBmb3IgemVyb1xuXG4gICAgICAgICAgICBpZiAoIWVxKHZjLCB6ZXJvKSkge1xuICAgICAgICAgICAgICAvLyBwdXNoIHZhbHVlXG4gICAgICAgICAgICAgIGN2YWx1ZXMucHVzaCh2Yyk7IC8vIGluY3JlbWVudCBwb2ludGVyXG5cbiAgICAgICAgICAgICAgaysrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gcmVtb3ZlIHZhbHVlIEAgaSwgZG8gbm90IGluY3JlbWVudCBwb2ludGVyXG4gICAgICAgICAgICAgIGNpbmRleC5zcGxpY2UoaywgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyB1cGRhdGUgY3B0clxuXG5cbiAgICBjcHRyW2NvbHVtbnNdID0gY2luZGV4Lmxlbmd0aDsgLy8gcmV0dXJuIHNwYXJzZSBtYXRyaXhcblxuICAgIHJldHVybiBhLmNyZWF0ZVNwYXJzZU1hdHJpeCh7XG4gICAgICB2YWx1ZXM6IGN2YWx1ZXMsXG4gICAgICBpbmRleDogY2luZGV4LFxuICAgICAgcHRyOiBjcHRyLFxuICAgICAgc2l6ZTogW3Jvd3MsIGNvbHVtbnNdLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7XG4gIH07XG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMDUgPSBjcmVhdGVBbGdvcml0aG0wNTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMDYgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX0RpbWVuc2lvbkVycm9yID0gcmVxdWlyZShcIi4uLy4uLy4uL2Vycm9yL0RpbWVuc2lvbkVycm9yXCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIG5hbWUgPSAnYWxnb3JpdGhtMDYnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnZXF1YWxTY2FsYXInXTtcbnZhciBjcmVhdGVBbGdvcml0aG0wNiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXI7XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGVzIG92ZXIgU3BhcnNlTWF0cml4IEEgYW5kIFNwYXJzZU1hdHJpeCBCIG5vbnplcm8gaXRlbXMgYW5kIGludm9rZXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGYoQWlqLCBCaWopLlxuICAgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIChBbnogVSBCbnopIHRpbWVzLCB3aGVyZSBBbnogYW5kIEJueiBhcmUgdGhlIG5vbnplcm8gZWxlbWVudHMgaW4gYm90aCBtYXRyaWNlcy5cbiAgICpcbiAgICpcbiAgICogICAgICAgICAg4pSMICBmKEFpaiwgQmlqKSAgOyBBKGksaikgIT09IDAgJiYgQihpLGopICE9PSAwXG4gICAqIEMoaSxqKSA9IOKUpFxuICAgKiAgICAgICAgICDilJQgIDAgICAgICAgICAgICA7IG90aGVyd2lzZVxuICAgKlxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeH0gICBhICAgICAgICAgICAgICAgICBUaGUgU3BhcnNlTWF0cml4IGluc3RhbmNlIChBKVxuICAgKiBAcGFyYW0ge01hdHJpeH0gICBiICAgICAgICAgICAgICAgICBUaGUgU3BhcnNlTWF0cml4IGluc3RhbmNlIChCKVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgICAgICAgICBUaGUgZihBaWosQmlqKSBvcGVyYXRpb24gdG8gaW52b2tlXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgICAgIFNwYXJzZU1hdHJpeCAoQylcbiAgICpcbiAgICogc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qb3NkZWpvbmcvbWF0aGpzL3B1bGwvMzQ2I2lzc3VlY29tbWVudC05NzYyMDI5NFxuICAgKi9cbiAgcmV0dXJuIGZ1bmN0aW9uIGFsZ29yaXRobTA2KGEsIGIsIGNhbGxiYWNrKSB7XG4gICAgLy8gc3BhcnNlIG1hdHJpeCBhcnJheXNcbiAgICB2YXIgYXZhbHVlcyA9IGEuX3ZhbHVlcztcbiAgICB2YXIgYXNpemUgPSBhLl9zaXplO1xuICAgIHZhciBhZHQgPSBhLl9kYXRhdHlwZTsgLy8gc3BhcnNlIG1hdHJpeCBhcnJheXNcblxuICAgIHZhciBidmFsdWVzID0gYi5fdmFsdWVzO1xuICAgIHZhciBic2l6ZSA9IGIuX3NpemU7XG4gICAgdmFyIGJkdCA9IGIuX2RhdGF0eXBlOyAvLyB2YWxpZGF0ZSBkaW1lbnNpb25zXG5cbiAgICBpZiAoYXNpemUubGVuZ3RoICE9PSBic2l6ZS5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3IoYXNpemUubGVuZ3RoLCBic2l6ZS5sZW5ndGgpO1xuICAgIH0gLy8gY2hlY2sgcm93cyAmIGNvbHVtbnNcblxuXG4gICAgaWYgKGFzaXplWzBdICE9PSBic2l6ZVswXSB8fCBhc2l6ZVsxXSAhPT0gYnNpemVbMV0pIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdEaW1lbnNpb24gbWlzbWF0Y2guIE1hdHJpeCBBICgnICsgYXNpemUgKyAnKSBtdXN0IG1hdGNoIE1hdHJpeCBCICgnICsgYnNpemUgKyAnKScpO1xuICAgIH0gLy8gcm93cyAmIGNvbHVtbnNcblxuXG4gICAgdmFyIHJvd3MgPSBhc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IGFzaXplWzFdOyAvLyBkYXRhdHlwZVxuXG4gICAgdmFyIGR0OyAvLyBlcXVhbCBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgZXEgPSBlcXVhbFNjYWxhcjsgLy8gemVybyB2YWx1ZVxuXG4gICAgdmFyIHplcm8gPSAwOyAvLyBjYWxsYmFjayBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgY2YgPSBjYWxsYmFjazsgLy8gcHJvY2VzcyBkYXRhIHR5cGVzXG5cbiAgICBpZiAodHlwZW9mIGFkdCA9PT0gJ3N0cmluZycgJiYgYWR0ID09PSBiZHQpIHtcbiAgICAgIC8vIGRhdGF0eXBlXG4gICAgICBkdCA9IGFkdDsgLy8gZmluZCBzaWduYXR1cmUgdGhhdCBtYXRjaGVzIChkdCwgZHQpXG5cbiAgICAgIGVxID0gdHlwZWQuZmluZChlcXVhbFNjYWxhciwgW2R0LCBkdF0pOyAvLyBjb252ZXJ0IDAgdG8gdGhlIHNhbWUgZGF0YXR5cGVcblxuICAgICAgemVybyA9IHR5cGVkLmNvbnZlcnQoMCwgZHQpOyAvLyBjYWxsYmFja1xuXG4gICAgICBjZiA9IHR5cGVkLmZpbmQoY2FsbGJhY2ssIFtkdCwgZHRdKTtcbiAgICB9IC8vIHJlc3VsdCBhcnJheXNcblxuXG4gICAgdmFyIGN2YWx1ZXMgPSBhdmFsdWVzICYmIGJ2YWx1ZXMgPyBbXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgY2luZGV4ID0gW107XG4gICAgdmFyIGNwdHIgPSBbXTsgLy8gd29ya3NwYWNlc1xuXG4gICAgdmFyIHggPSBjdmFsdWVzID8gW10gOiB1bmRlZmluZWQ7IC8vIG1hcmtzIGluZGljYXRpbmcgd2UgaGF2ZSBhIHZhbHVlIGluIHggZm9yIGEgZ2l2ZW4gY29sdW1uXG5cbiAgICB2YXIgdyA9IFtdOyAvLyBtYXJrcyBpbmRpY2F0aW5nIHZhbHVlIGluIGEgZ2l2ZW4gcm93IGhhcyBiZWVuIHVwZGF0ZWRcblxuICAgIHZhciB1ID0gW107IC8vIGxvb3AgY29sdW1uc1xuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgIC8vIHVwZGF0ZSBjcHRyXG4gICAgICBjcHRyW2pdID0gY2luZGV4Lmxlbmd0aDsgLy8gY29sdW1ucyBtYXJrXG5cbiAgICAgIHZhciBtYXJrID0gaiArIDE7IC8vIHNjYXR0ZXIgdGhlIHZhbHVlcyBvZiBBKDosaikgaW50byB3b3Jrc3BhY2VcblxuICAgICAgKDAsIF9jb2xsZWN0aW9uLnNjYXR0ZXIpKGEsIGosIHcsIHgsIHUsIG1hcmssIGNpbmRleCwgY2YpOyAvLyBzY2F0dGVyIHRoZSB2YWx1ZXMgb2YgQig6LGopIGludG8gd29ya3NwYWNlXG5cbiAgICAgICgwLCBfY29sbGVjdGlvbi5zY2F0dGVyKShiLCBqLCB3LCB4LCB1LCBtYXJrLCBjaW5kZXgsIGNmKTsgLy8gY2hlY2sgd2UgbmVlZCB0byBwcm9jZXNzIHZhbHVlcyAobm9uIHBhdHRlcm4gbWF0cml4KVxuXG4gICAgICBpZiAoeCkge1xuICAgICAgICAvLyBpbml0aWFsaXplIGZpcnN0IGluZGV4IGluIGpcbiAgICAgICAgdmFyIGsgPSBjcHRyW2pdOyAvLyBsb29wIGluZGV4IGluIGpcblxuICAgICAgICB3aGlsZSAoayA8IGNpbmRleC5sZW5ndGgpIHtcbiAgICAgICAgICAvLyByb3dcbiAgICAgICAgICB2YXIgaSA9IGNpbmRleFtrXTsgLy8gY2hlY2sgZnVuY3Rpb24gd2FzIGludm9rZWQgb24gY3VycmVudCByb3cgKEFpaiAhPTAgJiYgQmlqICE9IDApXG5cbiAgICAgICAgICBpZiAodVtpXSA9PT0gbWFyaykge1xuICAgICAgICAgICAgLy8gdmFsdWUgQCBpXG4gICAgICAgICAgICB2YXIgdiA9IHhbaV07IC8vIGNoZWNrIGZvciB6ZXJvIHZhbHVlXG5cbiAgICAgICAgICAgIGlmICghZXEodiwgemVybykpIHtcbiAgICAgICAgICAgICAgLy8gcHVzaCB2YWx1ZVxuICAgICAgICAgICAgICBjdmFsdWVzLnB1c2godik7IC8vIGluY3JlbWVudCBwb2ludGVyXG5cbiAgICAgICAgICAgICAgaysrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gcmVtb3ZlIHZhbHVlIEAgaSwgZG8gbm90IGluY3JlbWVudCBwb2ludGVyXG4gICAgICAgICAgICAgIGNpbmRleC5zcGxpY2UoaywgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHJlbW92ZSB2YWx1ZSBAIGksIGRvIG5vdCBpbmNyZW1lbnQgcG9pbnRlclxuICAgICAgICAgICAgY2luZGV4LnNwbGljZShrLCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGluaXRpYWxpemUgZmlyc3QgaW5kZXggaW4galxuICAgICAgICB2YXIgcCA9IGNwdHJbal07IC8vIGxvb3AgaW5kZXggaW4galxuXG4gICAgICAgIHdoaWxlIChwIDwgY2luZGV4Lmxlbmd0aCkge1xuICAgICAgICAgIC8vIHJvd1xuICAgICAgICAgIHZhciByID0gY2luZGV4W3BdOyAvLyBjaGVjayBmdW5jdGlvbiB3YXMgaW52b2tlZCBvbiBjdXJyZW50IHJvdyAoQWlqICE9MCAmJiBCaWogIT0gMClcblxuICAgICAgICAgIGlmICh1W3JdICE9PSBtYXJrKSB7XG4gICAgICAgICAgICAvLyByZW1vdmUgdmFsdWUgQCBpLCBkbyBub3QgaW5jcmVtZW50IHBvaW50ZXJcbiAgICAgICAgICAgIGNpbmRleC5zcGxpY2UocCwgMSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGluY3JlbWVudCBwb2ludGVyXG4gICAgICAgICAgICBwKys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyB1cGRhdGUgY3B0clxuXG5cbiAgICBjcHRyW2NvbHVtbnNdID0gY2luZGV4Lmxlbmd0aDsgLy8gcmV0dXJuIHNwYXJzZSBtYXRyaXhcblxuICAgIHJldHVybiBhLmNyZWF0ZVNwYXJzZU1hdHJpeCh7XG4gICAgICB2YWx1ZXM6IGN2YWx1ZXMsXG4gICAgICBpbmRleDogY2luZGV4LFxuICAgICAgcHRyOiBjcHRyLFxuICAgICAgc2l6ZTogW3Jvd3MsIGNvbHVtbnNdLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7XG4gIH07XG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMDYgPSBjcmVhdGVBbGdvcml0aG0wNjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMDcgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX0RpbWVuc2lvbkVycm9yID0gcmVxdWlyZShcIi4uLy4uLy4uL2Vycm9yL0RpbWVuc2lvbkVycm9yXCIpO1xuXG52YXIgbmFtZSA9ICdhbGdvcml0aG0wNyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdEZW5zZU1hdHJpeCddO1xudmFyIGNyZWF0ZUFsZ29yaXRobTA3ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcblxuICAvKipcbiAgICogSXRlcmF0ZXMgb3ZlciBTcGFyc2VNYXRyaXggQSBhbmQgU3BhcnNlTWF0cml4IEIgaXRlbXMgKHplcm8gYW5kIG5vbnplcm8pIGFuZCBpbnZva2VzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmKEFpaiwgQmlqKS5cbiAgICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCBNeE4gdGltZXMuXG4gICAqXG4gICAqIEMoaSxqKSA9IGYoQWlqLCBCaWopXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgIGEgICAgICAgICAgICAgICAgIFRoZSBTcGFyc2VNYXRyaXggaW5zdGFuY2UgKEEpXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgIGIgICAgICAgICAgICAgICAgIFRoZSBTcGFyc2VNYXRyaXggaW5zdGFuY2UgKEIpXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgICAgICAgIFRoZSBmKEFpaixCaWopIG9wZXJhdGlvbiB0byBpbnZva2VcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICAgICAgICAgRGVuc2VNYXRyaXggKEMpXG4gICAqXG4gICAqIHNlZSBodHRwczovL2dpdGh1Yi5jb20vam9zZGVqb25nL21hdGhqcy9wdWxsLzM0NiNpc3N1ZWNvbW1lbnQtOTc2MjAyOTRcbiAgICovXG4gIHJldHVybiBmdW5jdGlvbiBhbGdvcml0aG0wNyhhLCBiLCBjYWxsYmFjaykge1xuICAgIC8vIHNwYXJzZSBtYXRyaXggYXJyYXlzXG4gICAgdmFyIGFzaXplID0gYS5fc2l6ZTtcbiAgICB2YXIgYWR0ID0gYS5fZGF0YXR5cGU7IC8vIHNwYXJzZSBtYXRyaXggYXJyYXlzXG5cbiAgICB2YXIgYnNpemUgPSBiLl9zaXplO1xuICAgIHZhciBiZHQgPSBiLl9kYXRhdHlwZTsgLy8gdmFsaWRhdGUgZGltZW5zaW9uc1xuXG4gICAgaWYgKGFzaXplLmxlbmd0aCAhPT0gYnNpemUubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKGFzaXplLmxlbmd0aCwgYnNpemUubGVuZ3RoKTtcbiAgICB9IC8vIGNoZWNrIHJvd3MgJiBjb2x1bW5zXG5cblxuICAgIGlmIChhc2l6ZVswXSAhPT0gYnNpemVbMF0gfHwgYXNpemVbMV0gIT09IGJzaXplWzFdKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRGltZW5zaW9uIG1pc21hdGNoLiBNYXRyaXggQSAoJyArIGFzaXplICsgJykgbXVzdCBtYXRjaCBNYXRyaXggQiAoJyArIGJzaXplICsgJyknKTtcbiAgICB9IC8vIHJvd3MgJiBjb2x1bW5zXG5cblxuICAgIHZhciByb3dzID0gYXNpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSBhc2l6ZVsxXTsgLy8gZGF0YXR5cGVcblxuICAgIHZhciBkdDsgLy8gemVybyB2YWx1ZVxuXG4gICAgdmFyIHplcm8gPSAwOyAvLyBjYWxsYmFjayBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgY2YgPSBjYWxsYmFjazsgLy8gcHJvY2VzcyBkYXRhIHR5cGVzXG5cbiAgICBpZiAodHlwZW9mIGFkdCA9PT0gJ3N0cmluZycgJiYgYWR0ID09PSBiZHQpIHtcbiAgICAgIC8vIGRhdGF0eXBlXG4gICAgICBkdCA9IGFkdDsgLy8gY29udmVydCAwIHRvIHRoZSBzYW1lIGRhdGF0eXBlXG5cbiAgICAgIHplcm8gPSB0eXBlZC5jb252ZXJ0KDAsIGR0KTsgLy8gY2FsbGJhY2tcblxuICAgICAgY2YgPSB0eXBlZC5maW5kKGNhbGxiYWNrLCBbZHQsIGR0XSk7XG4gICAgfSAvLyB2YXJzXG5cblxuICAgIHZhciBpLCBqOyAvLyByZXN1bHQgYXJyYXlzXG5cbiAgICB2YXIgY2RhdGEgPSBbXTsgLy8gaW5pdGlhbGl6ZSBjXG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICBjZGF0YVtpXSA9IFtdO1xuICAgIH0gLy8gd29ya3NwYWNlc1xuXG5cbiAgICB2YXIgeGEgPSBbXTtcbiAgICB2YXIgeGIgPSBbXTsgLy8gbWFya3MgaW5kaWNhdGluZyB3ZSBoYXZlIGEgdmFsdWUgaW4geCBmb3IgYSBnaXZlbiBjb2x1bW5cblxuICAgIHZhciB3YSA9IFtdO1xuICAgIHZhciB3YiA9IFtdOyAvLyBsb29wIGNvbHVtbnNcblxuICAgIGZvciAoaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgIC8vIGNvbHVtbnMgbWFya1xuICAgICAgdmFyIG1hcmsgPSBqICsgMTsgLy8gc2NhdHRlciB0aGUgdmFsdWVzIG9mIEEoOixqKSBpbnRvIHdvcmtzcGFjZVxuXG4gICAgICBfc2NhdHRlcihhLCBqLCB3YSwgeGEsIG1hcmspOyAvLyBzY2F0dGVyIHRoZSB2YWx1ZXMgb2YgQig6LGopIGludG8gd29ya3NwYWNlXG5cblxuICAgICAgX3NjYXR0ZXIoYiwgaiwgd2IsIHhiLCBtYXJrKTsgLy8gbG9vcCByb3dzXG5cblxuICAgICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAvLyBtYXRyaXggdmFsdWVzIEAgaSxqXG4gICAgICAgIHZhciB2YSA9IHdhW2ldID09PSBtYXJrID8geGFbaV0gOiB6ZXJvO1xuICAgICAgICB2YXIgdmIgPSB3YltpXSA9PT0gbWFyayA/IHhiW2ldIDogemVybzsgLy8gaW52b2tlIGNhbGxiYWNrXG5cbiAgICAgICAgY2RhdGFbaV1bal0gPSBjZih2YSwgdmIpO1xuICAgICAgfVxuICAgIH0gLy8gcmV0dXJuIGRlbnNlIG1hdHJpeFxuXG5cbiAgICByZXR1cm4gbmV3IERlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6IGNkYXRhLFxuICAgICAgc2l6ZTogW3Jvd3MsIGNvbHVtbnNdLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gX3NjYXR0ZXIobSwgaiwgdywgeCwgbWFyaykge1xuICAgIC8vIGEgYXJyYXlzXG4gICAgdmFyIHZhbHVlcyA9IG0uX3ZhbHVlcztcbiAgICB2YXIgaW5kZXggPSBtLl9pbmRleDtcbiAgICB2YXIgcHRyID0gbS5fcHRyOyAvLyBsb29wIHZhbHVlcyBpbiBjb2x1bW4galxuXG4gICAgZm9yICh2YXIgayA9IHB0cltqXSwgazEgPSBwdHJbaiArIDFdOyBrIDwgazE7IGsrKykge1xuICAgICAgLy8gcm93XG4gICAgICB2YXIgaSA9IGluZGV4W2tdOyAvLyB1cGRhdGUgd29ya3NwYWNlXG5cbiAgICAgIHdbaV0gPSBtYXJrO1xuICAgICAgeFtpXSA9IHZhbHVlc1trXTtcbiAgICB9XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVBbGdvcml0aG0wNyA9IGNyZWF0ZUFsZ29yaXRobTA3OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBbGdvcml0aG0wOCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfRGltZW5zaW9uRXJyb3IgPSByZXF1aXJlKFwiLi4vLi4vLi4vZXJyb3IvRGltZW5zaW9uRXJyb3JcIik7XG5cbnZhciBuYW1lID0gJ2FsZ29yaXRobTA4JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2VxdWFsU2NhbGFyJ107XG52YXIgY3JlYXRlQWxnb3JpdGhtMDggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyO1xuXG4gIC8qKlxuICAgKiBJdGVyYXRlcyBvdmVyIFNwYXJzZU1hdHJpeCBBIGFuZCBTcGFyc2VNYXRyaXggQiBub256ZXJvIGl0ZW1zIGFuZCBpbnZva2VzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmKEFpaiwgQmlqKS5cbiAgICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCBNQVgoTk5aQSwgTk5aQikgdGltZXNcbiAgICpcbiAgICpcbiAgICogICAgICAgICAg4pSMICBmKEFpaiwgQmlqKSAgOyBBKGksaikgIT09IDAgJiYgQihpLGopICE9PSAwXG4gICAqIEMoaSxqKSA9IOKUpCAgQShpLGopICAgICAgIDsgQShpLGopICE9PSAwXG4gICAqICAgICAgICAgIOKUlCAgMCAgICAgICAgICAgIDsgb3RoZXJ3aXNlXG4gICAqXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgIGEgICAgICAgICAgICAgICAgIFRoZSBTcGFyc2VNYXRyaXggaW5zdGFuY2UgKEEpXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgIGIgICAgICAgICAgICAgICAgIFRoZSBTcGFyc2VNYXRyaXggaW5zdGFuY2UgKEIpXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgICAgICAgIFRoZSBmKEFpaixCaWopIG9wZXJhdGlvbiB0byBpbnZva2VcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICAgICAgICAgU3BhcnNlTWF0cml4IChDKVxuICAgKlxuICAgKiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pvc2Rlam9uZy9tYXRoanMvcHVsbC8zNDYjaXNzdWVjb21tZW50LTk3NjIwMjk0XG4gICAqL1xuICByZXR1cm4gZnVuY3Rpb24gYWxnb3JpdGhtMDgoYSwgYiwgY2FsbGJhY2spIHtcbiAgICAvLyBzcGFyc2UgbWF0cml4IGFycmF5c1xuICAgIHZhciBhdmFsdWVzID0gYS5fdmFsdWVzO1xuICAgIHZhciBhaW5kZXggPSBhLl9pbmRleDtcbiAgICB2YXIgYXB0ciA9IGEuX3B0cjtcbiAgICB2YXIgYXNpemUgPSBhLl9zaXplO1xuICAgIHZhciBhZHQgPSBhLl9kYXRhdHlwZTsgLy8gc3BhcnNlIG1hdHJpeCBhcnJheXNcblxuICAgIHZhciBidmFsdWVzID0gYi5fdmFsdWVzO1xuICAgIHZhciBiaW5kZXggPSBiLl9pbmRleDtcbiAgICB2YXIgYnB0ciA9IGIuX3B0cjtcbiAgICB2YXIgYnNpemUgPSBiLl9zaXplO1xuICAgIHZhciBiZHQgPSBiLl9kYXRhdHlwZTsgLy8gdmFsaWRhdGUgZGltZW5zaW9uc1xuXG4gICAgaWYgKGFzaXplLmxlbmd0aCAhPT0gYnNpemUubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKGFzaXplLmxlbmd0aCwgYnNpemUubGVuZ3RoKTtcbiAgICB9IC8vIGNoZWNrIHJvd3MgJiBjb2x1bW5zXG5cblxuICAgIGlmIChhc2l6ZVswXSAhPT0gYnNpemVbMF0gfHwgYXNpemVbMV0gIT09IGJzaXplWzFdKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRGltZW5zaW9uIG1pc21hdGNoLiBNYXRyaXggQSAoJyArIGFzaXplICsgJykgbXVzdCBtYXRjaCBNYXRyaXggQiAoJyArIGJzaXplICsgJyknKTtcbiAgICB9IC8vIHNwYXJzZSBtYXRyaXggY2Fubm90IGJlIGEgUGF0dGVybiBtYXRyaXhcblxuXG4gICAgaWYgKCFhdmFsdWVzIHx8ICFidmFsdWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBwZXJmb3JtIG9wZXJhdGlvbiBvbiBQYXR0ZXJuIFNwYXJzZSBNYXRyaWNlcycpO1xuICAgIH0gLy8gcm93cyAmIGNvbHVtbnNcblxuXG4gICAgdmFyIHJvd3MgPSBhc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IGFzaXplWzFdOyAvLyBkYXRhdHlwZVxuXG4gICAgdmFyIGR0OyAvLyBlcXVhbCBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgZXEgPSBlcXVhbFNjYWxhcjsgLy8gemVybyB2YWx1ZVxuXG4gICAgdmFyIHplcm8gPSAwOyAvLyBjYWxsYmFjayBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgY2YgPSBjYWxsYmFjazsgLy8gcHJvY2VzcyBkYXRhIHR5cGVzXG5cbiAgICBpZiAodHlwZW9mIGFkdCA9PT0gJ3N0cmluZycgJiYgYWR0ID09PSBiZHQpIHtcbiAgICAgIC8vIGRhdGF0eXBlXG4gICAgICBkdCA9IGFkdDsgLy8gZmluZCBzaWduYXR1cmUgdGhhdCBtYXRjaGVzIChkdCwgZHQpXG5cbiAgICAgIGVxID0gdHlwZWQuZmluZChlcXVhbFNjYWxhciwgW2R0LCBkdF0pOyAvLyBjb252ZXJ0IDAgdG8gdGhlIHNhbWUgZGF0YXR5cGVcblxuICAgICAgemVybyA9IHR5cGVkLmNvbnZlcnQoMCwgZHQpOyAvLyBjYWxsYmFja1xuXG4gICAgICBjZiA9IHR5cGVkLmZpbmQoY2FsbGJhY2ssIFtkdCwgZHRdKTtcbiAgICB9IC8vIHJlc3VsdCBhcnJheXNcblxuXG4gICAgdmFyIGN2YWx1ZXMgPSBbXTtcbiAgICB2YXIgY2luZGV4ID0gW107XG4gICAgdmFyIGNwdHIgPSBbXTsgLy8gd29ya3NwYWNlXG5cbiAgICB2YXIgeCA9IFtdOyAvLyBtYXJrcyBpbmRpY2F0aW5nIHdlIGhhdmUgYSB2YWx1ZSBpbiB4IGZvciBhIGdpdmVuIGNvbHVtblxuXG4gICAgdmFyIHcgPSBbXTsgLy8gdmFyc1xuXG4gICAgdmFyIGssIGswLCBrMSwgaTsgLy8gbG9vcCBjb2x1bW5zXG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgLy8gdXBkYXRlIGNwdHJcbiAgICAgIGNwdHJbal0gPSBjaW5kZXgubGVuZ3RoOyAvLyBjb2x1bW5zIG1hcmtcblxuICAgICAgdmFyIG1hcmsgPSBqICsgMTsgLy8gbG9vcCB2YWx1ZXMgaW4gYVxuXG4gICAgICBmb3IgKGswID0gYXB0cltqXSwgazEgPSBhcHRyW2ogKyAxXSwgayA9IGswOyBrIDwgazE7IGsrKykge1xuICAgICAgICAvLyByb3dcbiAgICAgICAgaSA9IGFpbmRleFtrXTsgLy8gbWFyayB3b3Jrc3BhY2VcblxuICAgICAgICB3W2ldID0gbWFyazsgLy8gc2V0IHZhbHVlXG5cbiAgICAgICAgeFtpXSA9IGF2YWx1ZXNba107IC8vIGFkZCBpbmRleFxuXG4gICAgICAgIGNpbmRleC5wdXNoKGkpO1xuICAgICAgfSAvLyBsb29wIHZhbHVlcyBpbiBiXG5cblxuICAgICAgZm9yIChrMCA9IGJwdHJbal0sIGsxID0gYnB0cltqICsgMV0sIGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgLy8gcm93XG4gICAgICAgIGkgPSBiaW5kZXhba107IC8vIGNoZWNrIHZhbHVlIGV4aXN0cyBpbiB3b3Jrc3BhY2VcblxuICAgICAgICBpZiAod1tpXSA9PT0gbWFyaykge1xuICAgICAgICAgIC8vIGV2YWx1YXRlIGNhbGxiYWNrXG4gICAgICAgICAgeFtpXSA9IGNmKHhbaV0sIGJ2YWx1ZXNba10pO1xuICAgICAgICB9XG4gICAgICB9IC8vIGluaXRpYWxpemUgZmlyc3QgaW5kZXggaW4galxuXG5cbiAgICAgIGsgPSBjcHRyW2pdOyAvLyBsb29wIGluZGV4IGluIGpcblxuICAgICAgd2hpbGUgKGsgPCBjaW5kZXgubGVuZ3RoKSB7XG4gICAgICAgIC8vIHJvd1xuICAgICAgICBpID0gY2luZGV4W2tdOyAvLyB2YWx1ZSBAIGlcblxuICAgICAgICB2YXIgdiA9IHhbaV07IC8vIGNoZWNrIGZvciB6ZXJvIHZhbHVlXG5cbiAgICAgICAgaWYgKCFlcSh2LCB6ZXJvKSkge1xuICAgICAgICAgIC8vIHB1c2ggdmFsdWVcbiAgICAgICAgICBjdmFsdWVzLnB1c2godik7IC8vIGluY3JlbWVudCBwb2ludGVyXG5cbiAgICAgICAgICBrKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gcmVtb3ZlIHZhbHVlIEAgaSwgZG8gbm90IGluY3JlbWVudCBwb2ludGVyXG4gICAgICAgICAgY2luZGV4LnNwbGljZShrLCAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gdXBkYXRlIGNwdHJcblxuXG4gICAgY3B0cltjb2x1bW5zXSA9IGNpbmRleC5sZW5ndGg7IC8vIHJldHVybiBzcGFyc2UgbWF0cml4XG5cbiAgICByZXR1cm4gYS5jcmVhdGVTcGFyc2VNYXRyaXgoe1xuICAgICAgdmFsdWVzOiBjdmFsdWVzLFxuICAgICAgaW5kZXg6IGNpbmRleCxcbiAgICAgIHB0cjogY3B0cixcbiAgICAgIHNpemU6IFtyb3dzLCBjb2x1bW5zXSxcbiAgICAgIGRhdGF0eXBlOiBkdFxuICAgIH0pO1xuICB9O1xufSk7XG5leHBvcnRzLmNyZWF0ZUFsZ29yaXRobTA4ID0gY3JlYXRlQWxnb3JpdGhtMDg7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFsZ29yaXRobTA5ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9EaW1lbnNpb25FcnJvciA9IHJlcXVpcmUoXCIuLi8uLi8uLi9lcnJvci9EaW1lbnNpb25FcnJvclwiKTtcblxudmFyIG5hbWUgPSAnYWxnb3JpdGhtMDknO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnZXF1YWxTY2FsYXInXTtcbnZhciBjcmVhdGVBbGdvcml0aG0wOSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXI7XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGVzIG92ZXIgU3BhcnNlTWF0cml4IEEgYW5kIGludm9rZXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGYoQWlqLCBCaWopLlxuICAgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIE5aQSB0aW1lcywgbnVtYmVyIG9mIG5vbnplcm8gZWxlbWVudHMgaW4gQS5cbiAgICpcbiAgICpcbiAgICogICAgICAgICAg4pSMICBmKEFpaiwgQmlqKSAgOyBBKGksaikgIT09IDBcbiAgICogQyhpLGopID0g4pSkXG4gICAqICAgICAgICAgIOKUlCAgMCAgICAgICAgICAgIDsgb3RoZXJ3aXNlXG4gICAqXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgIGEgICAgICAgICAgICAgICAgIFRoZSBTcGFyc2VNYXRyaXggaW5zdGFuY2UgKEEpXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgIGIgICAgICAgICAgICAgICAgIFRoZSBTcGFyc2VNYXRyaXggaW5zdGFuY2UgKEIpXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgICAgICAgIFRoZSBmKEFpaixCaWopIG9wZXJhdGlvbiB0byBpbnZva2VcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICAgICAgICAgU3BhcnNlTWF0cml4IChDKVxuICAgKlxuICAgKiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pvc2Rlam9uZy9tYXRoanMvcHVsbC8zNDYjaXNzdWVjb21tZW50LTk3NjIwMjk0XG4gICAqL1xuICByZXR1cm4gZnVuY3Rpb24gYWxnb3JpdGhtMDkoYSwgYiwgY2FsbGJhY2spIHtcbiAgICAvLyBzcGFyc2UgbWF0cml4IGFycmF5c1xuICAgIHZhciBhdmFsdWVzID0gYS5fdmFsdWVzO1xuICAgIHZhciBhaW5kZXggPSBhLl9pbmRleDtcbiAgICB2YXIgYXB0ciA9IGEuX3B0cjtcbiAgICB2YXIgYXNpemUgPSBhLl9zaXplO1xuICAgIHZhciBhZHQgPSBhLl9kYXRhdHlwZTsgLy8gc3BhcnNlIG1hdHJpeCBhcnJheXNcblxuICAgIHZhciBidmFsdWVzID0gYi5fdmFsdWVzO1xuICAgIHZhciBiaW5kZXggPSBiLl9pbmRleDtcbiAgICB2YXIgYnB0ciA9IGIuX3B0cjtcbiAgICB2YXIgYnNpemUgPSBiLl9zaXplO1xuICAgIHZhciBiZHQgPSBiLl9kYXRhdHlwZTsgLy8gdmFsaWRhdGUgZGltZW5zaW9uc1xuXG4gICAgaWYgKGFzaXplLmxlbmd0aCAhPT0gYnNpemUubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKGFzaXplLmxlbmd0aCwgYnNpemUubGVuZ3RoKTtcbiAgICB9IC8vIGNoZWNrIHJvd3MgJiBjb2x1bW5zXG5cblxuICAgIGlmIChhc2l6ZVswXSAhPT0gYnNpemVbMF0gfHwgYXNpemVbMV0gIT09IGJzaXplWzFdKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRGltZW5zaW9uIG1pc21hdGNoLiBNYXRyaXggQSAoJyArIGFzaXplICsgJykgbXVzdCBtYXRjaCBNYXRyaXggQiAoJyArIGJzaXplICsgJyknKTtcbiAgICB9IC8vIHJvd3MgJiBjb2x1bW5zXG5cblxuICAgIHZhciByb3dzID0gYXNpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSBhc2l6ZVsxXTsgLy8gZGF0YXR5cGVcblxuICAgIHZhciBkdDsgLy8gZXF1YWwgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGVxID0gZXF1YWxTY2FsYXI7IC8vIHplcm8gdmFsdWVcblxuICAgIHZhciB6ZXJvID0gMDsgLy8gY2FsbGJhY2sgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGNmID0gY2FsbGJhY2s7IC8vIHByb2Nlc3MgZGF0YSB0eXBlc1xuXG4gICAgaWYgKHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnICYmIGFkdCA9PT0gYmR0KSB7XG4gICAgICAvLyBkYXRhdHlwZVxuICAgICAgZHQgPSBhZHQ7IC8vIGZpbmQgc2lnbmF0dXJlIHRoYXQgbWF0Y2hlcyAoZHQsIGR0KVxuXG4gICAgICBlcSA9IHR5cGVkLmZpbmQoZXF1YWxTY2FsYXIsIFtkdCwgZHRdKTsgLy8gY29udmVydCAwIHRvIHRoZSBzYW1lIGRhdGF0eXBlXG5cbiAgICAgIHplcm8gPSB0eXBlZC5jb252ZXJ0KDAsIGR0KTsgLy8gY2FsbGJhY2tcblxuICAgICAgY2YgPSB0eXBlZC5maW5kKGNhbGxiYWNrLCBbZHQsIGR0XSk7XG4gICAgfSAvLyByZXN1bHQgYXJyYXlzXG5cblxuICAgIHZhciBjdmFsdWVzID0gYXZhbHVlcyAmJiBidmFsdWVzID8gW10gOiB1bmRlZmluZWQ7XG4gICAgdmFyIGNpbmRleCA9IFtdO1xuICAgIHZhciBjcHRyID0gW107IC8vIHdvcmtzcGFjZXNcblxuICAgIHZhciB4ID0gY3ZhbHVlcyA/IFtdIDogdW5kZWZpbmVkOyAvLyBtYXJrcyBpbmRpY2F0aW5nIHdlIGhhdmUgYSB2YWx1ZSBpbiB4IGZvciBhIGdpdmVuIGNvbHVtblxuXG4gICAgdmFyIHcgPSBbXTsgLy8gdmFyc1xuXG4gICAgdmFyIGksIGosIGssIGswLCBrMTsgLy8gbG9vcCBjb2x1bW5zXG5cbiAgICBmb3IgKGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAvLyB1cGRhdGUgY3B0clxuICAgICAgY3B0cltqXSA9IGNpbmRleC5sZW5ndGg7IC8vIGNvbHVtbiBtYXJrXG5cbiAgICAgIHZhciBtYXJrID0gaiArIDE7IC8vIGNoZWNrIHdlIG5lZWQgdG8gcHJvY2VzcyB2YWx1ZXNcblxuICAgICAgaWYgKHgpIHtcbiAgICAgICAgLy8gbG9vcCBCKDosailcbiAgICAgICAgZm9yIChrMCA9IGJwdHJbal0sIGsxID0gYnB0cltqICsgMV0sIGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgICAvLyByb3dcbiAgICAgICAgICBpID0gYmluZGV4W2tdOyAvLyB1cGRhdGUgd29ya3NwYWNlXG5cbiAgICAgICAgICB3W2ldID0gbWFyaztcbiAgICAgICAgICB4W2ldID0gYnZhbHVlc1trXTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBsb29wIEEoOixqKVxuXG5cbiAgICAgIGZvciAoazAgPSBhcHRyW2pdLCBrMSA9IGFwdHJbaiArIDFdLCBrID0gazA7IGsgPCBrMTsgaysrKSB7XG4gICAgICAgIC8vIHJvd1xuICAgICAgICBpID0gYWluZGV4W2tdOyAvLyBjaGVjayB3ZSBuZWVkIHRvIHByb2Nlc3MgdmFsdWVzXG5cbiAgICAgICAgaWYgKHgpIHtcbiAgICAgICAgICAvLyBiIHZhbHVlIEAgaSxqXG4gICAgICAgICAgdmFyIHZiID0gd1tpXSA9PT0gbWFyayA/IHhbaV0gOiB6ZXJvOyAvLyBpbnZva2UgZlxuXG4gICAgICAgICAgdmFyIHZjID0gY2YoYXZhbHVlc1trXSwgdmIpOyAvLyBjaGVjayB6ZXJvIHZhbHVlXG5cbiAgICAgICAgICBpZiAoIWVxKHZjLCB6ZXJvKSkge1xuICAgICAgICAgICAgLy8gcHVzaCBpbmRleFxuICAgICAgICAgICAgY2luZGV4LnB1c2goaSk7IC8vIHB1c2ggdmFsdWVcblxuICAgICAgICAgICAgY3ZhbHVlcy5wdXNoKHZjKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gcHVzaCBpbmRleFxuICAgICAgICAgIGNpbmRleC5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyB1cGRhdGUgY3B0clxuXG5cbiAgICBjcHRyW2NvbHVtbnNdID0gY2luZGV4Lmxlbmd0aDsgLy8gcmV0dXJuIHNwYXJzZSBtYXRyaXhcblxuICAgIHJldHVybiBhLmNyZWF0ZVNwYXJzZU1hdHJpeCh7XG4gICAgICB2YWx1ZXM6IGN2YWx1ZXMsXG4gICAgICBpbmRleDogY2luZGV4LFxuICAgICAgcHRyOiBjcHRyLFxuICAgICAgc2l6ZTogW3Jvd3MsIGNvbHVtbnNdLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7XG4gIH07XG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMDkgPSBjcmVhdGVBbGdvcml0aG0wOTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMTAgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdhbGdvcml0aG0xMCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdEZW5zZU1hdHJpeCddO1xudmFyIGNyZWF0ZUFsZ29yaXRobTEwID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcblxuICAvKipcbiAgICogSXRlcmF0ZXMgb3ZlciBTcGFyc2VNYXRyaXggUyBub256ZXJvIGl0ZW1zIGFuZCBpbnZva2VzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmKFNpaiwgYikuXG4gICAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgTlogdGltZXMgKG51bWJlciBvZiBub256ZXJvIGl0ZW1zIGluIFMpLlxuICAgKlxuICAgKlxuICAgKiAgICAgICAgICDilIwgIGYoU2lqLCBiKSAgOyBTKGksaikgIT09IDBcbiAgICogQyhpLGopID0g4pSkXG4gICAqICAgICAgICAgIOKUlCAgYiAgICAgICAgICA7IG90aGVyd2lzZVxuICAgKlxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeH0gICBzICAgICAgICAgICAgICAgICBUaGUgU3BhcnNlTWF0cml4IGluc3RhbmNlIChTKVxuICAgKiBAcGFyYW0ge1NjYWxhcn0gICBiICAgICAgICAgICAgICAgICBUaGUgU2NhbGFyIHZhbHVlXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgICAgICAgIFRoZSBmKEFpaixiKSBvcGVyYXRpb24gdG8gaW52b2tlXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gIGludmVyc2UgICAgICAgICAgIEEgdHJ1ZSB2YWx1ZSBpbmRpY2F0ZXMgY2FsbGJhY2sgc2hvdWxkIGJlIGludm9rZWQgZihiLFNpailcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICAgICAgICAgRGVuc2VNYXRyaXggKEMpXG4gICAqXG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9qb3NkZWpvbmcvbWF0aGpzL3B1bGwvMzQ2I2lzc3VlY29tbWVudC05NzYyNjgxM1xuICAgKi9cbiAgcmV0dXJuIGZ1bmN0aW9uIGFsZ29yaXRobTEwKHMsIGIsIGNhbGxiYWNrLCBpbnZlcnNlKSB7XG4gICAgLy8gc3BhcnNlIG1hdHJpeCBhcnJheXNcbiAgICB2YXIgYXZhbHVlcyA9IHMuX3ZhbHVlcztcbiAgICB2YXIgYWluZGV4ID0gcy5faW5kZXg7XG4gICAgdmFyIGFwdHIgPSBzLl9wdHI7XG4gICAgdmFyIGFzaXplID0gcy5fc2l6ZTtcbiAgICB2YXIgYWR0ID0gcy5fZGF0YXR5cGU7IC8vIHNwYXJzZSBtYXRyaXggY2Fubm90IGJlIGEgUGF0dGVybiBtYXRyaXhcblxuICAgIGlmICghYXZhbHVlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcGVyZm9ybSBvcGVyYXRpb24gb24gUGF0dGVybiBTcGFyc2UgTWF0cml4IGFuZCBTY2FsYXIgdmFsdWUnKTtcbiAgICB9IC8vIHJvd3MgJiBjb2x1bW5zXG5cblxuICAgIHZhciByb3dzID0gYXNpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSBhc2l6ZVsxXTsgLy8gZGF0YXR5cGVcblxuICAgIHZhciBkdDsgLy8gY2FsbGJhY2sgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGNmID0gY2FsbGJhY2s7IC8vIHByb2Nlc3MgZGF0YSB0eXBlc1xuXG4gICAgaWYgKHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBkYXRhdHlwZVxuICAgICAgZHQgPSBhZHQ7IC8vIGNvbnZlcnQgYiB0byB0aGUgc2FtZSBkYXRhdHlwZVxuXG4gICAgICBiID0gdHlwZWQuY29udmVydChiLCBkdCk7IC8vIGNhbGxiYWNrXG5cbiAgICAgIGNmID0gdHlwZWQuZmluZChjYWxsYmFjaywgW2R0LCBkdF0pO1xuICAgIH0gLy8gcmVzdWx0IGFycmF5c1xuXG5cbiAgICB2YXIgY2RhdGEgPSBbXTsgLy8gd29ya3NwYWNlc1xuXG4gICAgdmFyIHggPSBbXTsgLy8gbWFya3MgaW5kaWNhdGluZyB3ZSBoYXZlIGEgdmFsdWUgaW4geCBmb3IgYSBnaXZlbiBjb2x1bW5cblxuICAgIHZhciB3ID0gW107IC8vIGxvb3AgY29sdW1uc1xuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgIC8vIGNvbHVtbnMgbWFya1xuICAgICAgdmFyIG1hcmsgPSBqICsgMTsgLy8gdmFsdWVzIGluIGpcblxuICAgICAgZm9yICh2YXIgazAgPSBhcHRyW2pdLCBrMSA9IGFwdHJbaiArIDFdLCBrID0gazA7IGsgPCBrMTsgaysrKSB7XG4gICAgICAgIC8vIHJvd1xuICAgICAgICB2YXIgciA9IGFpbmRleFtrXTsgLy8gdXBkYXRlIHdvcmtzcGFjZVxuXG4gICAgICAgIHhbcl0gPSBhdmFsdWVzW2tdO1xuICAgICAgICB3W3JdID0gbWFyaztcbiAgICAgIH0gLy8gbG9vcCByb3dzXG5cblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgLy8gaW5pdGlhbGl6ZSBDIG9uIGZpcnN0IGNvbHVtblxuICAgICAgICBpZiAoaiA9PT0gMCkge1xuICAgICAgICAgIC8vIGNyZWF0ZSByb3cgYXJyYXlcbiAgICAgICAgICBjZGF0YVtpXSA9IFtdO1xuICAgICAgICB9IC8vIGNoZWNrIHNwYXJzZSBtYXRyaXggaGFzIGEgdmFsdWUgQCBpLGpcblxuXG4gICAgICAgIGlmICh3W2ldID09PSBtYXJrKSB7XG4gICAgICAgICAgLy8gaW52b2tlIGNhbGxiYWNrLCB1cGRhdGUgQ1xuICAgICAgICAgIGNkYXRhW2ldW2pdID0gaW52ZXJzZSA/IGNmKGIsIHhbaV0pIDogY2YoeFtpXSwgYik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gZGVuc2UgbWF0cml4IHZhbHVlIEAgaSwgalxuICAgICAgICAgIGNkYXRhW2ldW2pdID0gYjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gcmV0dXJuIGRlbnNlIG1hdHJpeFxuXG5cbiAgICByZXR1cm4gbmV3IERlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6IGNkYXRhLFxuICAgICAgc2l6ZTogW3Jvd3MsIGNvbHVtbnNdLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7XG4gIH07XG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMTAgPSBjcmVhdGVBbGdvcml0aG0xMDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMTEgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdhbGdvcml0aG0xMSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdlcXVhbFNjYWxhciddO1xudmFyIGNyZWF0ZUFsZ29yaXRobTExID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcjtcblxuICAvKipcbiAgICogSXRlcmF0ZXMgb3ZlciBTcGFyc2VNYXRyaXggUyBub256ZXJvIGl0ZW1zIGFuZCBpbnZva2VzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmKFNpaiwgYikuXG4gICAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgTlogdGltZXMgKG51bWJlciBvZiBub256ZXJvIGl0ZW1zIGluIFMpLlxuICAgKlxuICAgKlxuICAgKiAgICAgICAgICDilIwgIGYoU2lqLCBiKSAgOyBTKGksaikgIT09IDBcbiAgICogQyhpLGopID0g4pSkXG4gICAqICAgICAgICAgIOKUlCAgMCAgICAgICAgICA7IG90aGVyd2lzZVxuICAgKlxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeH0gICBzICAgICAgICAgICAgICAgICBUaGUgU3BhcnNlTWF0cml4IGluc3RhbmNlIChTKVxuICAgKiBAcGFyYW0ge1NjYWxhcn0gICBiICAgICAgICAgICAgICAgICBUaGUgU2NhbGFyIHZhbHVlXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgICAgICAgIFRoZSBmKEFpaixiKSBvcGVyYXRpb24gdG8gaW52b2tlXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gIGludmVyc2UgICAgICAgICAgIEEgdHJ1ZSB2YWx1ZSBpbmRpY2F0ZXMgY2FsbGJhY2sgc2hvdWxkIGJlIGludm9rZWQgZihiLFNpailcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICAgICAgICAgU3BhcnNlTWF0cml4IChDKVxuICAgKlxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vam9zZGVqb25nL21hdGhqcy9wdWxsLzM0NiNpc3N1ZWNvbW1lbnQtOTc2MjY4MTNcbiAgICovXG4gIHJldHVybiBmdW5jdGlvbiBhbGdvcml0aG0xMShzLCBiLCBjYWxsYmFjaywgaW52ZXJzZSkge1xuICAgIC8vIHNwYXJzZSBtYXRyaXggYXJyYXlzXG4gICAgdmFyIGF2YWx1ZXMgPSBzLl92YWx1ZXM7XG4gICAgdmFyIGFpbmRleCA9IHMuX2luZGV4O1xuICAgIHZhciBhcHRyID0gcy5fcHRyO1xuICAgIHZhciBhc2l6ZSA9IHMuX3NpemU7XG4gICAgdmFyIGFkdCA9IHMuX2RhdGF0eXBlOyAvLyBzcGFyc2UgbWF0cml4IGNhbm5vdCBiZSBhIFBhdHRlcm4gbWF0cml4XG5cbiAgICBpZiAoIWF2YWx1ZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHBlcmZvcm0gb3BlcmF0aW9uIG9uIFBhdHRlcm4gU3BhcnNlIE1hdHJpeCBhbmQgU2NhbGFyIHZhbHVlJyk7XG4gICAgfSAvLyByb3dzICYgY29sdW1uc1xuXG5cbiAgICB2YXIgcm93cyA9IGFzaXplWzBdO1xuICAgIHZhciBjb2x1bW5zID0gYXNpemVbMV07IC8vIGRhdGF0eXBlXG5cbiAgICB2YXIgZHQ7IC8vIGVxdWFsIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBlcSA9IGVxdWFsU2NhbGFyOyAvLyB6ZXJvIHZhbHVlXG5cbiAgICB2YXIgemVybyA9IDA7IC8vIGNhbGxiYWNrIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBjZiA9IGNhbGxiYWNrOyAvLyBwcm9jZXNzIGRhdGEgdHlwZXNcblxuICAgIGlmICh0eXBlb2YgYWR0ID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gZGF0YXR5cGVcbiAgICAgIGR0ID0gYWR0OyAvLyBmaW5kIHNpZ25hdHVyZSB0aGF0IG1hdGNoZXMgKGR0LCBkdClcblxuICAgICAgZXEgPSB0eXBlZC5maW5kKGVxdWFsU2NhbGFyLCBbZHQsIGR0XSk7IC8vIGNvbnZlcnQgMCB0byB0aGUgc2FtZSBkYXRhdHlwZVxuXG4gICAgICB6ZXJvID0gdHlwZWQuY29udmVydCgwLCBkdCk7IC8vIGNvbnZlcnQgYiB0byB0aGUgc2FtZSBkYXRhdHlwZVxuXG4gICAgICBiID0gdHlwZWQuY29udmVydChiLCBkdCk7IC8vIGNhbGxiYWNrXG5cbiAgICAgIGNmID0gdHlwZWQuZmluZChjYWxsYmFjaywgW2R0LCBkdF0pO1xuICAgIH0gLy8gcmVzdWx0IGFycmF5c1xuXG5cbiAgICB2YXIgY3ZhbHVlcyA9IFtdO1xuICAgIHZhciBjaW5kZXggPSBbXTtcbiAgICB2YXIgY3B0ciA9IFtdOyAvLyBsb29wIGNvbHVtbnNcblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAvLyBpbml0aWFsaXplIHB0clxuICAgICAgY3B0cltqXSA9IGNpbmRleC5sZW5ndGg7IC8vIHZhbHVlcyBpbiBqXG5cbiAgICAgIGZvciAodmFyIGswID0gYXB0cltqXSwgazEgPSBhcHRyW2ogKyAxXSwgayA9IGswOyBrIDwgazE7IGsrKykge1xuICAgICAgICAvLyByb3dcbiAgICAgICAgdmFyIGkgPSBhaW5kZXhba107IC8vIGludm9rZSBjYWxsYmFja1xuXG4gICAgICAgIHZhciB2ID0gaW52ZXJzZSA/IGNmKGIsIGF2YWx1ZXNba10pIDogY2YoYXZhbHVlc1trXSwgYik7IC8vIGNoZWNrIHZhbHVlIGlzIHplcm9cblxuICAgICAgICBpZiAoIWVxKHYsIHplcm8pKSB7XG4gICAgICAgICAgLy8gcHVzaCBpbmRleCAmIHZhbHVlXG4gICAgICAgICAgY2luZGV4LnB1c2goaSk7XG4gICAgICAgICAgY3ZhbHVlcy5wdXNoKHYpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyB1cGRhdGUgcHRyXG5cblxuICAgIGNwdHJbY29sdW1uc10gPSBjaW5kZXgubGVuZ3RoOyAvLyByZXR1cm4gc3BhcnNlIG1hdHJpeFxuXG4gICAgcmV0dXJuIHMuY3JlYXRlU3BhcnNlTWF0cml4KHtcbiAgICAgIHZhbHVlczogY3ZhbHVlcyxcbiAgICAgIGluZGV4OiBjaW5kZXgsXG4gICAgICBwdHI6IGNwdHIsXG4gICAgICBzaXplOiBbcm93cywgY29sdW1uc10sXG4gICAgICBkYXRhdHlwZTogZHRcbiAgICB9KTtcbiAgfTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVBbGdvcml0aG0xMSA9IGNyZWF0ZUFsZ29yaXRobTExOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBbGdvcml0aG0xMiA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2FsZ29yaXRobTEyJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlQWxnb3JpdGhtMTIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuXG4gIC8qKlxuICAgKiBJdGVyYXRlcyBvdmVyIFNwYXJzZU1hdHJpeCBTIG5vbnplcm8gaXRlbXMgYW5kIGludm9rZXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGYoU2lqLCBiKS5cbiAgICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCBNeE4gdGltZXMuXG4gICAqXG4gICAqXG4gICAqICAgICAgICAgIOKUjCAgZihTaWosIGIpICA7IFMoaSxqKSAhPT0gMFxuICAgKiBDKGksaikgPSDilKRcbiAgICogICAgICAgICAg4pSUICBmKDAsIGIpICAgIDsgb3RoZXJ3aXNlXG4gICAqXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgIHMgICAgICAgICAgICAgICAgIFRoZSBTcGFyc2VNYXRyaXggaW5zdGFuY2UgKFMpXG4gICAqIEBwYXJhbSB7U2NhbGFyfSAgIGIgICAgICAgICAgICAgICAgIFRoZSBTY2FsYXIgdmFsdWVcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgICAgICAgICAgVGhlIGYoQWlqLGIpIG9wZXJhdGlvbiB0byBpbnZva2VcbiAgICogQHBhcmFtIHtib29sZWFufSAgaW52ZXJzZSAgICAgICAgICAgQSB0cnVlIHZhbHVlIGluZGljYXRlcyBjYWxsYmFjayBzaG91bGQgYmUgaW52b2tlZCBmKGIsU2lqKVxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgICAgICAgICBEZW5zZU1hdHJpeCAoQylcbiAgICpcbiAgICogaHR0cHM6Ly9naXRodWIuY29tL2pvc2Rlam9uZy9tYXRoanMvcHVsbC8zNDYjaXNzdWVjb21tZW50LTk3NjI2ODEzXG4gICAqL1xuICByZXR1cm4gZnVuY3Rpb24gYWxnb3JpdGhtMTIocywgYiwgY2FsbGJhY2ssIGludmVyc2UpIHtcbiAgICAvLyBzcGFyc2UgbWF0cml4IGFycmF5c1xuICAgIHZhciBhdmFsdWVzID0gcy5fdmFsdWVzO1xuICAgIHZhciBhaW5kZXggPSBzLl9pbmRleDtcbiAgICB2YXIgYXB0ciA9IHMuX3B0cjtcbiAgICB2YXIgYXNpemUgPSBzLl9zaXplO1xuICAgIHZhciBhZHQgPSBzLl9kYXRhdHlwZTsgLy8gc3BhcnNlIG1hdHJpeCBjYW5ub3QgYmUgYSBQYXR0ZXJuIG1hdHJpeFxuXG4gICAgaWYgKCFhdmFsdWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBwZXJmb3JtIG9wZXJhdGlvbiBvbiBQYXR0ZXJuIFNwYXJzZSBNYXRyaXggYW5kIFNjYWxhciB2YWx1ZScpO1xuICAgIH0gLy8gcm93cyAmIGNvbHVtbnNcblxuXG4gICAgdmFyIHJvd3MgPSBhc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IGFzaXplWzFdOyAvLyBkYXRhdHlwZVxuXG4gICAgdmFyIGR0OyAvLyBjYWxsYmFjayBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgY2YgPSBjYWxsYmFjazsgLy8gcHJvY2VzcyBkYXRhIHR5cGVzXG5cbiAgICBpZiAodHlwZW9mIGFkdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIGRhdGF0eXBlXG4gICAgICBkdCA9IGFkdDsgLy8gY29udmVydCBiIHRvIHRoZSBzYW1lIGRhdGF0eXBlXG5cbiAgICAgIGIgPSB0eXBlZC5jb252ZXJ0KGIsIGR0KTsgLy8gY2FsbGJhY2tcblxuICAgICAgY2YgPSB0eXBlZC5maW5kKGNhbGxiYWNrLCBbZHQsIGR0XSk7XG4gICAgfSAvLyByZXN1bHQgYXJyYXlzXG5cblxuICAgIHZhciBjZGF0YSA9IFtdOyAvLyB3b3Jrc3BhY2VzXG5cbiAgICB2YXIgeCA9IFtdOyAvLyBtYXJrcyBpbmRpY2F0aW5nIHdlIGhhdmUgYSB2YWx1ZSBpbiB4IGZvciBhIGdpdmVuIGNvbHVtblxuXG4gICAgdmFyIHcgPSBbXTsgLy8gbG9vcCBjb2x1bW5zXG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgLy8gY29sdW1ucyBtYXJrXG4gICAgICB2YXIgbWFyayA9IGogKyAxOyAvLyB2YWx1ZXMgaW4galxuXG4gICAgICBmb3IgKHZhciBrMCA9IGFwdHJbal0sIGsxID0gYXB0cltqICsgMV0sIGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgLy8gcm93XG4gICAgICAgIHZhciByID0gYWluZGV4W2tdOyAvLyB1cGRhdGUgd29ya3NwYWNlXG5cbiAgICAgICAgeFtyXSA9IGF2YWx1ZXNba107XG4gICAgICAgIHdbcl0gPSBtYXJrO1xuICAgICAgfSAvLyBsb29wIHJvd3NcblxuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAvLyBpbml0aWFsaXplIEMgb24gZmlyc3QgY29sdW1uXG4gICAgICAgIGlmIChqID09PSAwKSB7XG4gICAgICAgICAgLy8gY3JlYXRlIHJvdyBhcnJheVxuICAgICAgICAgIGNkYXRhW2ldID0gW107XG4gICAgICAgIH0gLy8gY2hlY2sgc3BhcnNlIG1hdHJpeCBoYXMgYSB2YWx1ZSBAIGksalxuXG5cbiAgICAgICAgaWYgKHdbaV0gPT09IG1hcmspIHtcbiAgICAgICAgICAvLyBpbnZva2UgY2FsbGJhY2ssIHVwZGF0ZSBDXG4gICAgICAgICAgY2RhdGFbaV1bal0gPSBpbnZlcnNlID8gY2YoYiwgeFtpXSkgOiBjZih4W2ldLCBiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBkZW5zZSBtYXRyaXggdmFsdWUgQCBpLCBqXG4gICAgICAgICAgY2RhdGFbaV1bal0gPSBpbnZlcnNlID8gY2YoYiwgMCkgOiBjZigwLCBiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gcmV0dXJuIGRlbnNlIG1hdHJpeFxuXG5cbiAgICByZXR1cm4gbmV3IERlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6IGNkYXRhLFxuICAgICAgc2l6ZTogW3Jvd3MsIGNvbHVtbnNdLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7XG4gIH07XG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMTIgPSBjcmVhdGVBbGdvcml0aG0xMjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMTMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX0RpbWVuc2lvbkVycm9yID0gcmVxdWlyZShcIi4uLy4uLy4uL2Vycm9yL0RpbWVuc2lvbkVycm9yXCIpO1xuXG52YXIgbmFtZSA9ICdhbGdvcml0aG0xMyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUFsZ29yaXRobTEzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogSXRlcmF0ZXMgb3ZlciBEZW5zZU1hdHJpeCBpdGVtcyBhbmQgaW52b2tlcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZihBaWouLnosIEJpai4ueikuXG4gICAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgTXhOIHRpbWVzLlxuICAgKlxuICAgKiBDKGksaiwuLi56KSA9IGYoQWlqLi56LCBCaWouLnopXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgIGEgICAgICAgICAgICAgICAgIFRoZSBEZW5zZU1hdHJpeCBpbnN0YW5jZSAoQSlcbiAgICogQHBhcmFtIHtNYXRyaXh9ICAgYiAgICAgICAgICAgICAgICAgVGhlIERlbnNlTWF0cml4IGluc3RhbmNlIChCKVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgICAgICAgICBUaGUgZihBaWouLnosQmlqLi56KSBvcGVyYXRpb24gdG8gaW52b2tlXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgICAgIERlbnNlTWF0cml4IChDKVxuICAgKlxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vam9zZGVqb25nL21hdGhqcy9wdWxsLzM0NiNpc3N1ZWNvbW1lbnQtOTc2NTg2NThcbiAgICovXG4gIHJldHVybiBmdW5jdGlvbiBhbGdvcml0aG0xMyhhLCBiLCBjYWxsYmFjaykge1xuICAgIC8vIGEgYXJyYXlzXG4gICAgdmFyIGFkYXRhID0gYS5fZGF0YTtcbiAgICB2YXIgYXNpemUgPSBhLl9zaXplO1xuICAgIHZhciBhZHQgPSBhLl9kYXRhdHlwZTsgLy8gYiBhcnJheXNcblxuICAgIHZhciBiZGF0YSA9IGIuX2RhdGE7XG4gICAgdmFyIGJzaXplID0gYi5fc2l6ZTtcbiAgICB2YXIgYmR0ID0gYi5fZGF0YXR5cGU7IC8vIGMgYXJyYXlzXG5cbiAgICB2YXIgY3NpemUgPSBbXTsgLy8gdmFsaWRhdGUgZGltZW5zaW9uc1xuXG4gICAgaWYgKGFzaXplLmxlbmd0aCAhPT0gYnNpemUubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKGFzaXplLmxlbmd0aCwgYnNpemUubGVuZ3RoKTtcbiAgICB9IC8vIHZhbGlkYXRlIGVhY2ggb25lIG9mIHRoZSBkaW1lbnNpb24gc2l6ZXNcblxuXG4gICAgZm9yICh2YXIgcyA9IDA7IHMgPCBhc2l6ZS5sZW5ndGg7IHMrKykge1xuICAgICAgLy8gbXVzdCBtYXRjaFxuICAgICAgaWYgKGFzaXplW3NdICE9PSBic2l6ZVtzXSkge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRGltZW5zaW9uIG1pc21hdGNoLiBNYXRyaXggQSAoJyArIGFzaXplICsgJykgbXVzdCBtYXRjaCBNYXRyaXggQiAoJyArIGJzaXplICsgJyknKTtcbiAgICAgIH0gLy8gdXBkYXRlIGRpbWVuc2lvbiBpbiBjXG5cblxuICAgICAgY3NpemVbc10gPSBhc2l6ZVtzXTtcbiAgICB9IC8vIGRhdGF0eXBlXG5cblxuICAgIHZhciBkdDsgLy8gY2FsbGJhY2sgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGNmID0gY2FsbGJhY2s7IC8vIHByb2Nlc3MgZGF0YSB0eXBlc1xuXG4gICAgaWYgKHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnICYmIGFkdCA9PT0gYmR0KSB7XG4gICAgICAvLyBkYXRhdHlwZVxuICAgICAgZHQgPSBhZHQ7IC8vIGNhbGxiYWNrXG5cbiAgICAgIGNmID0gdHlwZWQuZmluZChjYWxsYmFjaywgW2R0LCBkdF0pO1xuICAgIH0gLy8gcG9wdWxhdGUgY2RhdGEsIGl0ZXJhdGUgdGhyb3VnaCBkaW1lbnNpb25zXG5cblxuICAgIHZhciBjZGF0YSA9IGNzaXplLmxlbmd0aCA+IDAgPyBfaXRlcmF0ZShjZiwgMCwgY3NpemUsIGNzaXplWzBdLCBhZGF0YSwgYmRhdGEpIDogW107IC8vIGMgbWF0cml4XG5cbiAgICByZXR1cm4gYS5jcmVhdGVEZW5zZU1hdHJpeCh7XG4gICAgICBkYXRhOiBjZGF0YSxcbiAgICAgIHNpemU6IGNzaXplLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7XG4gIH07IC8vIHJlY3Vyc2l2ZSBmdW5jdGlvblxuXG4gIGZ1bmN0aW9uIF9pdGVyYXRlKGYsIGxldmVsLCBzLCBuLCBhdiwgYnYpIHtcbiAgICAvLyBpbml0aWFsaXplIGFycmF5IGZvciB0aGlzIGxldmVsXG4gICAgdmFyIGN2ID0gW107IC8vIGNoZWNrIHdlIHJlYWNoIHRoZSBsYXN0IGxldmVsXG5cbiAgICBpZiAobGV2ZWwgPT09IHMubGVuZ3RoIC0gMSkge1xuICAgICAgLy8gbG9vcCBhcnJheXMgaW4gbGFzdCBsZXZlbFxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgLy8gaW52b2tlIGNhbGxiYWNrIGFuZCBzdG9yZSB2YWx1ZVxuICAgICAgICBjdltpXSA9IGYoYXZbaV0sIGJ2W2ldKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaXRlcmF0ZSBjdXJyZW50IGxldmVsXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG47IGorKykge1xuICAgICAgICAvLyBpdGVyYXRlIG5leHQgbGV2ZWxcbiAgICAgICAgY3Zbal0gPSBfaXRlcmF0ZShmLCBsZXZlbCArIDEsIHMsIHNbbGV2ZWwgKyAxXSwgYXZbal0sIGJ2W2pdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY3Y7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVBbGdvcml0aG0xMyA9IGNyZWF0ZUFsZ29yaXRobTEzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBbGdvcml0aG0xNCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIG5hbWUgPSAnYWxnb3JpdGhtMTQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVBbGdvcml0aG0xNCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGVzIG92ZXIgRGVuc2VNYXRyaXggaXRlbXMgYW5kIGludm9rZXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGYoQWlqLi56LCBiKS5cbiAgICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCBNeE4gdGltZXMuXG4gICAqXG4gICAqIEMoaSxqLC4uLnopID0gZihBaWouLnosIGIpXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgIGEgICAgICAgICAgICAgICAgIFRoZSBEZW5zZU1hdHJpeCBpbnN0YW5jZSAoQSlcbiAgICogQHBhcmFtIHtTY2FsYXJ9ICAgYiAgICAgICAgICAgICAgICAgVGhlIFNjYWxhciB2YWx1ZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgICAgICAgICBUaGUgZihBaWouLnosYikgb3BlcmF0aW9uIHRvIGludm9rZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICBpbnZlcnNlICAgICAgICAgICBBIHRydWUgdmFsdWUgaW5kaWNhdGVzIGNhbGxiYWNrIHNob3VsZCBiZSBpbnZva2VkIGYoYixBaWouLnopXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgICAgIERlbnNlTWF0cml4IChDKVxuICAgKlxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vam9zZGVqb25nL21hdGhqcy9wdWxsLzM0NiNpc3N1ZWNvbW1lbnQtOTc2NTkwNDJcbiAgICovXG4gIHJldHVybiBmdW5jdGlvbiBhbGdvcml0aG0xNChhLCBiLCBjYWxsYmFjaywgaW52ZXJzZSkge1xuICAgIC8vIGEgYXJyYXlzXG4gICAgdmFyIGFkYXRhID0gYS5fZGF0YTtcbiAgICB2YXIgYXNpemUgPSBhLl9zaXplO1xuICAgIHZhciBhZHQgPSBhLl9kYXRhdHlwZTsgLy8gZGF0YXR5cGVcblxuICAgIHZhciBkdDsgLy8gY2FsbGJhY2sgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGNmID0gY2FsbGJhY2s7IC8vIHByb2Nlc3MgZGF0YSB0eXBlc1xuXG4gICAgaWYgKHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBkYXRhdHlwZVxuICAgICAgZHQgPSBhZHQ7IC8vIGNvbnZlcnQgYiB0byB0aGUgc2FtZSBkYXRhdHlwZVxuXG4gICAgICBiID0gdHlwZWQuY29udmVydChiLCBkdCk7IC8vIGNhbGxiYWNrXG5cbiAgICAgIGNmID0gdHlwZWQuZmluZChjYWxsYmFjaywgW2R0LCBkdF0pO1xuICAgIH0gLy8gcG9wdWxhdGUgY2RhdGEsIGl0ZXJhdGUgdGhyb3VnaCBkaW1lbnNpb25zXG5cblxuICAgIHZhciBjZGF0YSA9IGFzaXplLmxlbmd0aCA+IDAgPyBfaXRlcmF0ZShjZiwgMCwgYXNpemUsIGFzaXplWzBdLCBhZGF0YSwgYiwgaW52ZXJzZSkgOiBbXTsgLy8gYyBtYXRyaXhcblxuICAgIHJldHVybiBhLmNyZWF0ZURlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6IGNkYXRhLFxuICAgICAgc2l6ZTogKDAsIF9vYmplY3QuY2xvbmUpKGFzaXplKSxcbiAgICAgIGRhdGF0eXBlOiBkdFxuICAgIH0pO1xuICB9OyAvLyByZWN1cnNpdmUgZnVuY3Rpb25cblxuICBmdW5jdGlvbiBfaXRlcmF0ZShmLCBsZXZlbCwgcywgbiwgYXYsIGJ2LCBpbnZlcnNlKSB7XG4gICAgLy8gaW5pdGlhbGl6ZSBhcnJheSBmb3IgdGhpcyBsZXZlbFxuICAgIHZhciBjdiA9IFtdOyAvLyBjaGVjayB3ZSByZWFjaCB0aGUgbGFzdCBsZXZlbFxuXG4gICAgaWYgKGxldmVsID09PSBzLmxlbmd0aCAtIDEpIHtcbiAgICAgIC8vIGxvb3AgYXJyYXlzIGluIGxhc3QgbGV2ZWxcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgIC8vIGludm9rZSBjYWxsYmFjayBhbmQgc3RvcmUgdmFsdWVcbiAgICAgICAgY3ZbaV0gPSBpbnZlcnNlID8gZihidiwgYXZbaV0pIDogZihhdltpXSwgYnYpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpdGVyYXRlIGN1cnJlbnQgbGV2ZWxcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbjsgaisrKSB7XG4gICAgICAgIC8vIGl0ZXJhdGUgbmV4dCBsZXZlbFxuICAgICAgICBjdltqXSA9IF9pdGVyYXRlKGYsIGxldmVsICsgMSwgcywgc1tsZXZlbCArIDFdLCBhdltqXSwgYnYsIGludmVyc2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjdjtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZUFsZ29yaXRobTE0ID0gY3JlYXRlQWxnb3JpdGhtMTQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU51bWJlciA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgbmFtZSA9ICdudW1iZXInO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVOdW1iZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBudW1iZXIgb3IgY29udmVydCBhIHN0cmluZywgYm9vbGVhbiwgb3IgdW5pdCB0byBhIG51bWJlci5cbiAgICogV2hlbiB2YWx1ZSBpcyBhIG1hdHJpeCwgYWxsIGVsZW1lbnRzIHdpbGwgYmUgY29udmVydGVkIHRvIG51bWJlci5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLm51bWJlcih2YWx1ZSlcbiAgICogICAgbWF0aC5udW1iZXIodW5pdCwgdmFsdWVsZXNzVW5pdClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgubnVtYmVyKDIpICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDJcbiAgICogICAgbWF0aC5udW1iZXIoJzcuMicpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgNy4yXG4gICAqICAgIG1hdGgubnVtYmVyKHRydWUpICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDFcbiAgICogICAgbWF0aC5udW1iZXIoW3RydWUsIGZhbHNlLCB0cnVlLCB0cnVlXSkgLy8gcmV0dXJucyBbMSwgMCwgMSwgMV1cbiAgICogICAgbWF0aC5udW1iZXIobWF0aC51bml0KCc1MmNtJyksICdtJykgICAgLy8gcmV0dXJucyAwLjUyXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiaWdudW1iZXIsIGJvb2xlYW4sIGNvbXBsZXgsIGluZGV4LCBtYXRyaXgsIHN0cmluZywgdW5pdFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgYm9vbGVhbiB8IEFycmF5IHwgTWF0cml4IHwgVW5pdCB8IG51bGx9IFt2YWx1ZV0gIFZhbHVlIHRvIGJlIGNvbnZlcnRlZFxuICAgKiBAcGFyYW0ge1VuaXQgfCBzdHJpbmd9IFt2YWx1ZWxlc3NVbml0XSBBIHZhbHVlbGVzcyB1bml0LCB1c2VkIHRvIGNvbnZlcnQgYSB1bml0IHRvIGEgbnVtYmVyXG4gICAqIEByZXR1cm4ge251bWJlciB8IEFycmF5IHwgTWF0cml4fSBUaGUgY3JlYXRlZCBudW1iZXJcbiAgICovXG4gIHZhciBudW1iZXIgPSB0eXBlZCgnbnVtYmVyJywge1xuICAgICcnOiBmdW5jdGlvbiBfKCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSxcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICByZXR1cm4geDtcbiAgICB9LFxuICAgIHN0cmluZzogZnVuY3Rpb24gc3RyaW5nKHgpIHtcbiAgICAgIGlmICh4ID09PSAnTmFOJykgcmV0dXJuIE5hTjtcbiAgICAgIHZhciBudW0gPSBOdW1iZXIoeCk7XG5cbiAgICAgIGlmIChpc05hTihudW0pKSB7XG4gICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignU3RyaW5nIFwiJyArIHggKyAnXCIgaXMgbm8gdmFsaWQgbnVtYmVyJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudW07XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4geC50b051bWJlcigpO1xuICAgIH0sXG4gICAgRnJhY3Rpb246IGZ1bmN0aW9uIEZyYWN0aW9uKHgpIHtcbiAgICAgIHJldHVybiB4LnZhbHVlT2YoKTtcbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZWNvbmQgYXJndW1lbnQgd2l0aCB2YWx1ZWxlc3MgdW5pdCBleHBlY3RlZCcpO1xuICAgIH0sXG4gICAgXCJudWxsXCI6IGZ1bmN0aW9uIF9udWxsKHgpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH0sXG4gICAgJ1VuaXQsIHN0cmluZyB8IFVuaXQnOiBmdW5jdGlvbiBVbml0U3RyaW5nVW5pdCh1bml0LCB2YWx1ZWxlc3NVbml0KSB7XG4gICAgICByZXR1cm4gdW5pdC50b051bWJlcih2YWx1ZWxlc3NVbml0KTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgbnVtYmVyKTtcbiAgICB9XG4gIH0pOyAvLyByZXZpdmVyIGZ1bmN0aW9uIHRvIHBhcnNlIGEgSlNPTiBvYmplY3QgbGlrZTpcbiAgLy9cbiAgLy8gICAgIHtcIm1hdGhqc1wiOlwibnVtYmVyXCIsXCJ2YWx1ZVwiOlwiMi4zXCJ9XG4gIC8vXG4gIC8vIGludG8gYSBudW1iZXIgMi4zXG5cbiAgbnVtYmVyLmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICByZXR1cm4gcGFyc2VGbG9hdChqc29uLnZhbHVlKTtcbiAgfTtcblxuICByZXR1cm4gbnVtYmVyO1xufSk7XG5leHBvcnRzLmNyZWF0ZU51bWJlciA9IGNyZWF0ZU51bWJlcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUmVzdWx0U2V0ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnUmVzdWx0U2V0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbXTtcbnZhciBjcmVhdGVSZXN1bHRTZXQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoKSB7XG4gIC8qKlxuICAgKiBBIFJlc3VsdFNldCBjb250YWlucyBhIGxpc3Qgb3IgcmVzdWx0c1xuICAgKiBAY2xhc3MgUmVzdWx0U2V0XG4gICAqIEBwYXJhbSB7QXJyYXl9IGVudHJpZXNcbiAgICogQGNvbnN0cnVjdG9yIFJlc3VsdFNldFxuICAgKi9cbiAgZnVuY3Rpb24gUmVzdWx0U2V0KGVudHJpZXMpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVzdWx0U2V0KSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG5cbiAgICB0aGlzLmVudHJpZXMgPSBlbnRyaWVzIHx8IFtdO1xuICB9XG4gIC8qKlxuICAgKiBBdHRhY2ggdHlwZSBpbmZvcm1hdGlvblxuICAgKi9cblxuXG4gIFJlc3VsdFNldC5wcm90b3R5cGUudHlwZSA9ICdSZXN1bHRTZXQnO1xuICBSZXN1bHRTZXQucHJvdG90eXBlLmlzUmVzdWx0U2V0ID0gdHJ1ZTtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFycmF5IHdpdGggcmVzdWx0cyBob2xkIGJ5IHRoaXMgUmVzdWx0U2V0XG4gICAqIEBtZW1iZXJvZiBSZXN1bHRTZXRcbiAgICogQHJldHVybnMge0FycmF5fSBlbnRyaWVzXG4gICAqL1xuXG4gIFJlc3VsdFNldC5wcm90b3R5cGUudmFsdWVPZiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5lbnRyaWVzO1xuICB9O1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgc3RyaW5naWZpZWQgcmVzdWx0cyBvZiB0aGUgUmVzdWx0U2V0XG4gICAqIEBtZW1iZXJvZiBSZXN1bHRTZXRcbiAgICogQHJldHVybnMge3N0cmluZ30gc3RyaW5nXG4gICAqL1xuXG5cbiAgUmVzdWx0U2V0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gJ1snICsgdGhpcy5lbnRyaWVzLmpvaW4oJywgJykgKyAnXSc7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBSZXN1bHRTZXRcbiAgICogQG1lbWJlcm9mIFJlc3VsdFNldFxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGEgSlNPTiBvYmplY3Qgc3RydWN0dXJlZCBhczpcbiAgICogICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIlJlc3VsdFNldFwiLCBcImVudHJpZXNcIjogWy4uLl19YFxuICAgKi9cblxuXG4gIFJlc3VsdFNldC5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdSZXN1bHRTZXQnLFxuICAgICAgZW50cmllczogdGhpcy5lbnRyaWVzXG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIEluc3RhbnRpYXRlIGEgUmVzdWx0U2V0IGZyb20gYSBKU09OIG9iamVjdFxuICAgKiBAbWVtYmVyb2YgUmVzdWx0U2V0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBqc29uICBBIEpTT04gb2JqZWN0IHN0cnVjdHVyZWQgYXM6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiUmVzdWx0U2V0XCIsIFwiZW50cmllc1wiOiBbLi4uXX1gXG4gICAqIEByZXR1cm4ge1Jlc3VsdFNldH1cbiAgICovXG5cblxuICBSZXN1bHRTZXQuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBuZXcgUmVzdWx0U2V0KGpzb24uZW50cmllcyk7XG4gIH07XG5cbiAgcmV0dXJuIFJlc3VsdFNldDtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJlc3VsdFNldCA9IGNyZWF0ZVJlc3VsdFNldDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3RyaW5nID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnc3RyaW5nJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlU3RyaW5nID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgc3RyaW5nIG9yIGNvbnZlcnQgYW55IG9iamVjdCBpbnRvIGEgc3RyaW5nLlxuICAgKiBFbGVtZW50cyBvZiBBcnJheXMgYW5kIE1hdHJpY2VzIGFyZSBwcm9jZXNzZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguc3RyaW5nKHZhbHVlKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5zdHJpbmcoNC4yKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgc3RyaW5nICc0LjInXG4gICAqICAgIG1hdGguc3RyaW5nKG1hdGguY29tcGxleCgzLCAyKSAvLyByZXR1cm5zIHN0cmluZyAnMyArIDJpJ1xuICAgKlxuICAgKiAgICBjb25zdCB1ID0gbWF0aC51bml0KDUsICdrbScpXG4gICAqICAgIG1hdGguc3RyaW5nKHUudG8oJ20nKSkgICAgICAgICAvLyByZXR1cm5zIHN0cmluZyAnNTAwMCBtJ1xuICAgKlxuICAgKiAgICBtYXRoLnN0cmluZyhbdHJ1ZSwgZmFsc2VdKSAgICAgLy8gcmV0dXJucyBbJ3RydWUnLCAnZmFsc2UnXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYmlnbnVtYmVyLCBib29sZWFuLCBjb21wbGV4LCBpbmRleCwgbWF0cml4LCBudW1iZXIsIHVuaXRcbiAgICpcbiAgICogQHBhcmFtIHsqIHwgQXJyYXkgfCBNYXRyaXggfCBudWxsfSBbdmFsdWVdICBBIHZhbHVlIHRvIGNvbnZlcnQgdG8gYSBzdHJpbmdcbiAgICogQHJldHVybiB7c3RyaW5nIHwgQXJyYXkgfCBNYXRyaXh9IFRoZSBjcmVhdGVkIHN0cmluZ1xuICAgKi9cbiAgdmFyIHN0cmluZyA9IHR5cGVkKG5hbWUsIHtcbiAgICAnJzogZnVuY3Rpb24gXygpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9LFxuICAgIG51bWJlcjogX251bWJlci5mb3JtYXQsXG4gICAgXCJudWxsXCI6IGZ1bmN0aW9uIF9udWxsKHgpIHtcbiAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfSxcbiAgICBcImJvb2xlYW5cIjogZnVuY3Rpb24gYm9vbGVhbih4KSB7XG4gICAgICByZXR1cm4geCArICcnO1xuICAgIH0sXG4gICAgc3RyaW5nOiBmdW5jdGlvbiBzdHJpbmcoeCkge1xuICAgICAgcmV0dXJuIHg7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIHN0cmluZyk7XG4gICAgfSxcbiAgICBhbnk6IGZ1bmN0aW9uIGFueSh4KSB7XG4gICAgICByZXR1cm4gU3RyaW5nKHgpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBzdHJpbmc7XG59KTtcbmV4cG9ydHMuY3JlYXRlU3RyaW5nID0gY3JlYXRlU3RyaW5nOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVVbml0Q2xhc3MgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9jb25zdGFudHMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYmlnbnVtYmVyL2NvbnN0YW50c1wiKTtcblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG52YXIgbmFtZSA9ICdVbml0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJz9vbicsICdjb25maWcnLCAnYWRkU2NhbGFyJywgJ3N1YnRyYWN0JywgJ211bHRpcGx5U2NhbGFyJywgJ2RpdmlkZVNjYWxhcicsICdwb3cnLCAnYWJzJywgJ2ZpeCcsICdyb3VuZCcsICdlcXVhbCcsICdpc051bWVyaWMnLCAnZm9ybWF0JywgJ251bWJlcicsICdDb21wbGV4JywgJ0JpZ051bWJlcicsICdGcmFjdGlvbiddO1xudmFyIGNyZWF0ZVVuaXRDbGFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBvbiA9IF9yZWYub24sXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIGFkZFNjYWxhciA9IF9yZWYuYWRkU2NhbGFyLFxuICAgICAgc3VidHJhY3QgPSBfcmVmLnN1YnRyYWN0LFxuICAgICAgbXVsdGlwbHlTY2FsYXIgPSBfcmVmLm11bHRpcGx5U2NhbGFyLFxuICAgICAgZGl2aWRlU2NhbGFyID0gX3JlZi5kaXZpZGVTY2FsYXIsXG4gICAgICBwb3cgPSBfcmVmLnBvdyxcbiAgICAgIGFicyA9IF9yZWYuYWJzLFxuICAgICAgZml4ID0gX3JlZi5maXgsXG4gICAgICByb3VuZCA9IF9yZWYucm91bmQsXG4gICAgICBlcXVhbCA9IF9yZWYuZXF1YWwsXG4gICAgICBpc051bWVyaWMgPSBfcmVmLmlzTnVtZXJpYyxcbiAgICAgIGZvcm1hdCA9IF9yZWYuZm9ybWF0LFxuICAgICAgbnVtYmVyID0gX3JlZi5udW1iZXIsXG4gICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4LFxuICAgICAgX0JpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyLFxuICAgICAgX0ZyYWN0aW9uID0gX3JlZi5GcmFjdGlvbjtcbiAgdmFyIHRvTnVtYmVyID0gbnVtYmVyO1xuICAvKipcbiAgICogQSB1bml0IGNhbiBiZSBjb25zdHJ1Y3RlZCBpbiB0aGUgZm9sbG93aW5nIHdheXM6XG4gICAqXG4gICAqICAgICBjb25zdCBhID0gbmV3IFVuaXQodmFsdWUsIG5hbWUpXG4gICAqICAgICBjb25zdCBiID0gbmV3IFVuaXQobnVsbCwgbmFtZSlcbiAgICogICAgIGNvbnN0IGMgPSBVbml0LnBhcnNlKHN0cilcbiAgICpcbiAgICogRXhhbXBsZSB1c2FnZTpcbiAgICpcbiAgICogICAgIGNvbnN0IGEgPSBuZXcgVW5pdCg1LCAnY20nKSAgICAgICAgICAgICAgIC8vIDUwIG1tXG4gICAqICAgICBjb25zdCBiID0gVW5pdC5wYXJzZSgnMjMga2cnKSAgICAgICAgICAgICAvLyAyMyBrZ1xuICAgKiAgICAgY29uc3QgYyA9IG1hdGguaW4oYSwgbmV3IFVuaXQobnVsbCwgJ20nKSAgLy8gMC4wNSBtXG4gICAqICAgICBjb25zdCBkID0gbmV3IFVuaXQoOS44MSwgXCJtL3NeMlwiKSAgICAgICAgIC8vIDkuODEgbS9zXjJcbiAgICpcbiAgICogQGNsYXNzIFVuaXRcbiAgICogQGNvbnN0cnVjdG9yIFVuaXRcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBib29sZWFufSBbdmFsdWVdICBBIHZhbHVlIGxpa2UgNS4yXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZV0gICBBIHVuaXQgbmFtZSBsaWtlIFwiY21cIiBvciBcImluY2hcIiwgb3IgYSBkZXJpdmVkIHVuaXQgb2YgdGhlIGZvcm06IFwidTFbXmV4MV0gW3UyW15leDJdIC4uLl0gWy8gdTNbXmV4M10gW3U0W15leDRdXV1cIiwgc3VjaCBhcyBcImtnIG1eMi9zXjJcIiwgd2hlcmUgZWFjaCB1bml0IGFwcGVhcmluZyBhZnRlciB0aGUgZm9yd2FyZCBzbGFzaCBpcyB0YWtlbiB0byBiZSBpbiB0aGUgZGVub21pbmF0b3IuIFwia2cgbV4yIHNeLTJcIiBpcyBhIHN5bm9ueW0gYW5kIGlzIGFsc28gYWNjZXB0YWJsZS4gQW55IG9mIHRoZSB1bml0cyBjYW4gaW5jbHVkZSBhIHByZWZpeC5cbiAgICovXG5cbiAgZnVuY3Rpb24gVW5pdCh2YWx1ZSwgbmFtZSkge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBVbml0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG5cbiAgICBpZiAoISh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGlzTnVtZXJpYyh2YWx1ZSkgfHwgKDAsIF9pcy5pc0NvbXBsZXgpKHZhbHVlKSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ZpcnN0IHBhcmFtZXRlciBpbiBVbml0IGNvbnN0cnVjdG9yIG11c3QgYmUgbnVtYmVyLCBCaWdOdW1iZXIsIEZyYWN0aW9uLCBDb21wbGV4LCBvciB1bmRlZmluZWQnKTtcbiAgICB9XG5cbiAgICBpZiAobmFtZSAhPT0gdW5kZWZpbmVkICYmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycgfHwgbmFtZSA9PT0gJycpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTZWNvbmQgcGFyYW1ldGVyIGluIFVuaXQgY29uc3RydWN0b3IgbXVzdCBiZSBhIHN0cmluZycpO1xuICAgIH1cblxuICAgIGlmIChuYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciB1ID0gVW5pdC5wYXJzZShuYW1lKTtcbiAgICAgIHRoaXMudW5pdHMgPSB1LnVuaXRzO1xuICAgICAgdGhpcy5kaW1lbnNpb25zID0gdS5kaW1lbnNpb25zO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVuaXRzID0gW3tcbiAgICAgICAgdW5pdDogVU5JVF9OT05FLFxuICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLk5PTkUsXG4gICAgICAgIC8vIGxpbmsgdG8gYSBsaXN0IHdpdGggc3VwcG9ydGVkIHByZWZpeGVzXG4gICAgICAgIHBvd2VyOiAwXG4gICAgICB9XTtcbiAgICAgIHRoaXMuZGltZW5zaW9ucyA9IFtdO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IEJBU0VfRElNRU5TSU9OUy5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLmRpbWVuc2lvbnNbaV0gPSAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudmFsdWUgPSB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsID8gdGhpcy5fbm9ybWFsaXplKHZhbHVlKSA6IG51bGw7XG4gICAgdGhpcy5maXhQcmVmaXggPSBmYWxzZTsgLy8gaWYgdHJ1ZSwgZnVuY3Rpb24gZm9ybWF0IHdpbGwgbm90IHNlYXJjaCBmb3IgdGhlXG4gICAgLy8gYmVzdCBwcmVmaXggYnV0IGxlYXZlIGl0IGFzIGluaXRpYWxseSBwcm92aWRlZC5cbiAgICAvLyBmaXhQcmVmaXggaXMgc2V0IHRydWUgYnkgdGhlIG1ldGhvZCBVbml0LnRvXG4gICAgLy8gVGhlIGp1c3RpZmljYXRpb24gYmVoaW5kIHRoaXMgaXMgdGhhdCBpZiB0aGUgY29uc3RydWN0b3IgaXMgZXhwbGljaXRseSBjYWxsZWQsXG4gICAgLy8gdGhlIGNhbGxlciB3aXNoZXMgdGhlIHVuaXRzIHRvIGJlIHJldHVybmVkIGV4YWN0bHkgYXMgaGUgc3VwcGxpZWQuXG5cbiAgICB0aGlzLnNraXBBdXRvbWF0aWNTaW1wbGlmaWNhdGlvbiA9IHRydWU7XG4gIH1cbiAgLyoqXG4gICAqIEF0dGFjaCB0eXBlIGluZm9ybWF0aW9uXG4gICAqL1xuXG5cbiAgVW5pdC5wcm90b3R5cGUudHlwZSA9ICdVbml0JztcbiAgVW5pdC5wcm90b3R5cGUuaXNVbml0ID0gdHJ1ZTsgLy8gcHJpdmF0ZSB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucyBmb3IgdGhlIFVuaXQgcGFyc2VyXG5cbiAgdmFyIHRleHQsIGluZGV4LCBjO1xuXG4gIGZ1bmN0aW9uIHNraXBXaGl0ZXNwYWNlKCkge1xuICAgIHdoaWxlIChjID09PSAnICcgfHwgYyA9PT0gJ1xcdCcpIHtcbiAgICAgIG5leHQoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpc0RpZ2l0RG90KGMpIHtcbiAgICByZXR1cm4gYyA+PSAnMCcgJiYgYyA8PSAnOScgfHwgYyA9PT0gJy4nO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNEaWdpdChjKSB7XG4gICAgcmV0dXJuIGMgPj0gJzAnICYmIGMgPD0gJzknO1xuICB9XG5cbiAgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICBpbmRleCsrO1xuICAgIGMgPSB0ZXh0LmNoYXJBdChpbmRleCk7XG4gIH1cblxuICBmdW5jdGlvbiByZXZlcnQob2xkSW5kZXgpIHtcbiAgICBpbmRleCA9IG9sZEluZGV4O1xuICAgIGMgPSB0ZXh0LmNoYXJBdChpbmRleCk7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZU51bWJlcigpIHtcbiAgICB2YXIgbnVtYmVyID0gJyc7XG4gICAgdmFyIG9sZEluZGV4ID0gaW5kZXg7XG5cbiAgICBpZiAoYyA9PT0gJysnKSB7XG4gICAgICBuZXh0KCk7XG4gICAgfSBlbHNlIGlmIChjID09PSAnLScpIHtcbiAgICAgIG51bWJlciArPSBjO1xuICAgICAgbmV4dCgpO1xuICAgIH1cblxuICAgIGlmICghaXNEaWdpdERvdChjKSkge1xuICAgICAgLy8gYSArIG9yIC0gbXVzdCBiZSBmb2xsb3dlZCBieSBhIGRpZ2l0XG4gICAgICByZXZlcnQob2xkSW5kZXgpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSAvLyBnZXQgbnVtYmVyLCBjYW4gaGF2ZSBhIHNpbmdsZSBkb3RcblxuXG4gICAgaWYgKGMgPT09ICcuJykge1xuICAgICAgbnVtYmVyICs9IGM7XG4gICAgICBuZXh0KCk7XG5cbiAgICAgIGlmICghaXNEaWdpdChjKSkge1xuICAgICAgICAvLyB0aGlzIGlzIG5vIGxlZ2FsIG51bWJlciwgaXQgaXMganVzdCBhIGRvdFxuICAgICAgICByZXZlcnQob2xkSW5kZXgpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgd2hpbGUgKGlzRGlnaXQoYykpIHtcbiAgICAgICAgbnVtYmVyICs9IGM7XG4gICAgICAgIG5leHQoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGMgPT09ICcuJykge1xuICAgICAgICBudW1iZXIgKz0gYztcbiAgICAgICAgbmV4dCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHdoaWxlIChpc0RpZ2l0KGMpKSB7XG4gICAgICBudW1iZXIgKz0gYztcbiAgICAgIG5leHQoKTtcbiAgICB9IC8vIGNoZWNrIGZvciBleHBvbmVudGlhbCBub3RhdGlvbiBsaWtlIFwiMi4zZS00XCIgb3IgXCIxLjIzZTUwXCJcblxuXG4gICAgaWYgKGMgPT09ICdFJyB8fCBjID09PSAnZScpIHtcbiAgICAgIC8vIFRoZSBncmFtbWFyIGJyYW5jaGVzIGhlcmUuIFRoaXMgY291bGQgZWl0aGVyIGJlIHBhcnQgb2YgYW4gZXhwb25lbnQgb3IgdGhlIHN0YXJ0IG9mIGEgdW5pdCB0aGF0IGJlZ2lucyB3aXRoIHRoZSBsZXR0ZXIgZSwgc3VjaCBhcyBcIjRleGFieXRlc1wiXG4gICAgICB2YXIgdGVudGF0aXZlTnVtYmVyID0gJyc7XG4gICAgICB2YXIgdGVudGF0aXZlSW5kZXggPSBpbmRleDtcbiAgICAgIHRlbnRhdGl2ZU51bWJlciArPSBjO1xuICAgICAgbmV4dCgpO1xuXG4gICAgICBpZiAoYyA9PT0gJysnIHx8IGMgPT09ICctJykge1xuICAgICAgICB0ZW50YXRpdmVOdW1iZXIgKz0gYztcbiAgICAgICAgbmV4dCgpO1xuICAgICAgfSAvLyBTY2llbnRpZmljIG5vdGF0aW9uIE1VU1QgYmUgZm9sbG93ZWQgYnkgYW4gZXhwb25lbnQgKG90aGVyd2lzZSB3ZSBhc3N1bWUgaXQgaXMgbm90IHNjaWVudGlmaWMgbm90YXRpb24pXG5cblxuICAgICAgaWYgKCFpc0RpZ2l0KGMpKSB7XG4gICAgICAgIC8vIFRoZSBlIG9yIEUgbXVzdCBiZWxvbmcgdG8gc29tZXRoaW5nIGVsc2UsIHNvIHJldHVybiB0aGUgbnVtYmVyIHdpdGhvdXQgdGhlIGUgb3IgRS5cbiAgICAgICAgcmV2ZXJ0KHRlbnRhdGl2ZUluZGV4KTtcbiAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgIH0gLy8gV2UgY2FuIG5vdyBzYWZlbHkgc2F5IHRoYXQgdGhpcyBpcyBzY2llbnRpZmljIG5vdGF0aW9uLlxuXG5cbiAgICAgIG51bWJlciA9IG51bWJlciArIHRlbnRhdGl2ZU51bWJlcjtcblxuICAgICAgd2hpbGUgKGlzRGlnaXQoYykpIHtcbiAgICAgICAgbnVtYmVyICs9IGM7XG4gICAgICAgIG5leHQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVtYmVyO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VVbml0KCkge1xuICAgIHZhciB1bml0TmFtZSA9ICcnOyAvLyBBbHBoYW51bWVyaWMgY2hhcmFjdGVycyBvbmx5OyBtYXRjaGVzIFthLXpBLVowLTldXG5cbiAgICB2YXIgY29kZSA9IHRleHQuY2hhckNvZGVBdChpbmRleCk7XG5cbiAgICB3aGlsZSAoY29kZSA+PSA0OCAmJiBjb2RlIDw9IDU3IHx8IGNvZGUgPj0gNjUgJiYgY29kZSA8PSA5MCB8fCBjb2RlID49IDk3ICYmIGNvZGUgPD0gMTIyKSB7XG4gICAgICB1bml0TmFtZSArPSBjO1xuICAgICAgbmV4dCgpO1xuICAgICAgY29kZSA9IHRleHQuY2hhckNvZGVBdChpbmRleCk7XG4gICAgfSAvLyBNdXN0IGJlZ2luIHdpdGggW2EtekEtWl1cblxuXG4gICAgY29kZSA9IHVuaXROYW1lLmNoYXJDb2RlQXQoMCk7XG5cbiAgICBpZiAoY29kZSA+PSA2NSAmJiBjb2RlIDw9IDkwIHx8IGNvZGUgPj0gOTcgJiYgY29kZSA8PSAxMjIpIHtcbiAgICAgIHJldHVybiB1bml0TmFtZSB8fCBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUNoYXJhY3Rlcih0b0ZpbmQpIHtcbiAgICBpZiAoYyA9PT0gdG9GaW5kKSB7XG4gICAgICBuZXh0KCk7XG4gICAgICByZXR1cm4gdG9GaW5kO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlIGEgc3RyaW5nIGludG8gYSB1bml0LiBUaGUgdmFsdWUgb2YgdGhlIHVuaXQgaXMgcGFyc2VkIGFzIG51bWJlcixcbiAgICogQmlnTnVtYmVyLCBvciBGcmFjdGlvbiBkZXBlbmRpbmcgb24gdGhlIG1hdGguanMgY29uZmlnIHNldHRpbmcgYG51bWJlcmAuXG4gICAqXG4gICAqIFRocm93cyBhbiBleGNlcHRpb24gaWYgdGhlIHByb3ZpZGVkIHN0cmluZyBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQgdW5pdCBvclxuICAgKiBjYW5ub3QgYmUgcGFyc2VkLlxuICAgKiBAbWVtYmVyb2YgVW5pdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyICAgICAgICBBIHN0cmluZyBsaWtlIFwiNS4yIGluY2hcIiwgXCI0ZTIgY20vc14yXCJcbiAgICogQHJldHVybiB7VW5pdH0gdW5pdFxuICAgKi9cblxuXG4gIFVuaXQucGFyc2UgPSBmdW5jdGlvbiAoc3RyLCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgdGV4dCA9IHN0cjtcbiAgICBpbmRleCA9IC0xO1xuICAgIGMgPSAnJztcblxuICAgIGlmICh0eXBlb2YgdGV4dCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgYXJndW1lbnQgaW4gVW5pdC5wYXJzZSwgc3RyaW5nIGV4cGVjdGVkJyk7XG4gICAgfVxuXG4gICAgdmFyIHVuaXQgPSBuZXcgVW5pdCgpO1xuICAgIHVuaXQudW5pdHMgPSBbXTtcbiAgICB2YXIgcG93ZXJNdWx0aXBsaWVyQ3VycmVudCA9IDE7XG4gICAgdmFyIGV4cGVjdGluZ1VuaXQgPSBmYWxzZTsgLy8gQSB1bml0IHNob3VsZCBmb2xsb3cgdGhpcyBwYXR0ZXJuOlxuICAgIC8vIFtudW1iZXJdIC4uLlsgWyovXSB1bml0W15udW1iZXJdIF1cbiAgICAvLyB1bml0W15udW1iZXJdIC4uLiBbIFsqL10gdW5pdFtebnVtYmVyXSBdXG4gICAgLy8gUnVsZXM6XG4gICAgLy8gbnVtYmVyIGlzIGFueSBmbG9hdGluZyBwb2ludCBudW1iZXIuXG4gICAgLy8gdW5pdCBpcyBhbnkgYWxwaGFudW1lcmljIHN0cmluZyBiZWdpbm5pbmcgd2l0aCBhbiBhbHBoYS4gVW5pdHMgd2l0aCBuYW1lcyBsaWtlIGUzIHNob3VsZCBiZSBhdm9pZGVkIGJlY2F1c2UgdGhleSBsb29rIGxpa2UgdGhlIGV4cG9uZW50IG9mIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIVxuICAgIC8vIFRoZSBzdHJpbmcgbWF5IG9wdGlvbmFsbHkgYmVnaW4gd2l0aCBhIG51bWJlci5cbiAgICAvLyBFYWNoIHVuaXQgbWF5IG9wdGlvbmFsbHkgYmUgZm9sbG93ZWQgYnkgXm51bWJlci5cbiAgICAvLyBXaGl0ZXNwYWNlIG9yIGEgZm9yd2FyZCBzbGFzaCBpcyByZWNvbW1lbmRlZCBiZXR3ZWVuIGNvbnNlY3V0aXZlIHVuaXRzLCBhbHRob3VnaCB0aGUgZm9sbG93aW5nIHRlY2huaWNhbGx5IGlzIHBhcnNlYWJsZTpcbiAgICAvLyAgIDJtXjJrZy9zXjJcbiAgICAvLyBpdCBpcyBub3QgZ29vZCBmb3JtLiBJZiBhIHVuaXQgc3RhcnRzIHdpdGggZSwgdGhlbiBpdCBjb3VsZCBiZSBjb25mdXNlZCBhcyBhIGZsb2F0aW5nIHBvaW50IG51bWJlcjpcbiAgICAvLyAgIDRlcmdcblxuICAgIG5leHQoKTtcbiAgICBza2lwV2hpdGVzcGFjZSgpOyAvLyBPcHRpb25hbCBudW1iZXIgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzdHJpbmdcblxuICAgIHZhciB2YWx1ZVN0ciA9IHBhcnNlTnVtYmVyKCk7XG4gICAgdmFyIHZhbHVlID0gbnVsbDtcblxuICAgIGlmICh2YWx1ZVN0cikge1xuICAgICAgaWYgKGNvbmZpZy5udW1iZXIgPT09ICdCaWdOdW1iZXInKSB7XG4gICAgICAgIHZhbHVlID0gbmV3IF9CaWdOdW1iZXIodmFsdWVTdHIpO1xuICAgICAgfSBlbHNlIGlmIChjb25maWcubnVtYmVyID09PSAnRnJhY3Rpb24nKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gbm90IGFsbCBudW1iZXJzIGNhbiBiZSB0dXJuZWQgaW4gRnJhY3Rpb25zLCBmb3IgZXhhbXBsZSB2ZXJ5IHNtYWxsIG51bWJlcnMgbm90XG4gICAgICAgICAgdmFsdWUgPSBuZXcgX0ZyYWN0aW9uKHZhbHVlU3RyKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlU3RyKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbnVtYmVyXG4gICAgICAgIHZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZVN0cik7XG4gICAgICB9XG5cbiAgICAgIHNraXBXaGl0ZXNwYWNlKCk7IC8vIFdoaXRlc3BhY2UgaXMgbm90IHJlcXVpcmVkIGhlcmVcbiAgICAgIC8vIGhhbmRsZSBtdWx0aXBsaWNhdGlvbiBvciBkaXZpc2lvbiByaWdodCBhZnRlciB0aGUgdmFsdWUsIGxpa2UgJzEvcydcblxuICAgICAgaWYgKHBhcnNlQ2hhcmFjdGVyKCcqJykpIHtcbiAgICAgICAgcG93ZXJNdWx0aXBsaWVyQ3VycmVudCA9IDE7XG4gICAgICAgIGV4cGVjdGluZ1VuaXQgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChwYXJzZUNoYXJhY3RlcignLycpKSB7XG4gICAgICAgIHBvd2VyTXVsdGlwbGllckN1cnJlbnQgPSAtMTtcbiAgICAgICAgZXhwZWN0aW5nVW5pdCA9IHRydWU7XG4gICAgICB9XG4gICAgfSAvLyBTdGFjayB0byBrZWVwIHRyYWNrIG9mIHBvd2VyTXVsdGlwbGllcnMgYXBwbGllZCB0byBlYWNoIHBhcmVudGhlc2VzIGdyb3VwXG5cblxuICAgIHZhciBwb3dlck11bHRpcGxpZXJTdGFjayA9IFtdOyAvLyBSdW5uaW5nIHByb2R1Y3Qgb2YgYWxsIGVsZW1lbnRzIGluIHBvd2VyTXVsdGlwbGllclN0YWNrXG5cbiAgICB2YXIgcG93ZXJNdWx0aXBsaWVyU3RhY2tQcm9kdWN0ID0gMTtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBza2lwV2hpdGVzcGFjZSgpOyAvLyBDaGVjayBmb3IgYW5kIGNvbnN1bWUgb3BlbmluZyBwYXJlbnRoZXNlcywgcHVzaGluZyBwb3dlck11bHRpcGxpZXJDdXJyZW50IHRvIHRoZSBzdGFja1xuICAgICAgLy8gQSAnKCcgd2lsbCBhbHdheXMgYXBwZWFyIGRpcmVjdGx5IGJlZm9yZSBhIHVuaXQuXG5cbiAgICAgIHdoaWxlIChjID09PSAnKCcpIHtcbiAgICAgICAgcG93ZXJNdWx0aXBsaWVyU3RhY2sucHVzaChwb3dlck11bHRpcGxpZXJDdXJyZW50KTtcbiAgICAgICAgcG93ZXJNdWx0aXBsaWVyU3RhY2tQcm9kdWN0ICo9IHBvd2VyTXVsdGlwbGllckN1cnJlbnQ7XG4gICAgICAgIHBvd2VyTXVsdGlwbGllckN1cnJlbnQgPSAxO1xuICAgICAgICBuZXh0KCk7XG4gICAgICAgIHNraXBXaGl0ZXNwYWNlKCk7XG4gICAgICB9IC8vIElzIHRoZXJlIHNvbWV0aGluZyBoZXJlP1xuXG5cbiAgICAgIHZhciB1U3RyID0gdm9pZCAwO1xuXG4gICAgICBpZiAoYykge1xuICAgICAgICB2YXIgb2xkQyA9IGM7XG4gICAgICAgIHVTdHIgPSBwYXJzZVVuaXQoKTtcblxuICAgICAgICBpZiAodVN0ciA9PT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignVW5leHBlY3RlZCBcIicgKyBvbGRDICsgJ1wiIGluIFwiJyArIHRleHQgKyAnXCIgYXQgaW5kZXggJyArIGluZGV4LnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBFbmQgb2YgaW5wdXQuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfSAvLyBWZXJpZnkgdGhlIHVuaXQgZXhpc3RzIGFuZCBnZXQgdGhlIHByZWZpeCAoaWYgYW55KVxuXG5cbiAgICAgIHZhciByZXMgPSBfZmluZFVuaXQodVN0cik7XG5cbiAgICAgIGlmIChyZXMgPT09IG51bGwpIHtcbiAgICAgICAgLy8gVW5pdCBub3QgZm91bmQuXG4gICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignVW5pdCBcIicgKyB1U3RyICsgJ1wiIG5vdCBmb3VuZC4nKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHBvd2VyID0gcG93ZXJNdWx0aXBsaWVyQ3VycmVudCAqIHBvd2VyTXVsdGlwbGllclN0YWNrUHJvZHVjdDsgLy8gSXMgdGhlcmUgYSBcIl4gbnVtYmVyXCI/XG5cbiAgICAgIHNraXBXaGl0ZXNwYWNlKCk7XG5cbiAgICAgIGlmIChwYXJzZUNoYXJhY3RlcignXicpKSB7XG4gICAgICAgIHNraXBXaGl0ZXNwYWNlKCk7XG4gICAgICAgIHZhciBwID0gcGFyc2VOdW1iZXIoKTtcblxuICAgICAgICBpZiAocCA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIE5vIHZhbGlkIG51bWJlciBmb3VuZCBmb3IgdGhlIHBvd2VyIVxuICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignSW4gXCInICsgc3RyICsgJ1wiLCBcIl5cIiBtdXN0IGJlIGZvbGxvd2VkIGJ5IGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyJyk7XG4gICAgICAgIH1cblxuICAgICAgICBwb3dlciAqPSBwO1xuICAgICAgfSAvLyBBZGQgdGhlIHVuaXQgdG8gdGhlIGxpc3RcblxuXG4gICAgICB1bml0LnVuaXRzLnB1c2goe1xuICAgICAgICB1bml0OiByZXMudW5pdCxcbiAgICAgICAgcHJlZml4OiByZXMucHJlZml4LFxuICAgICAgICBwb3dlcjogcG93ZXJcbiAgICAgIH0pO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IEJBU0VfRElNRU5TSU9OUy5sZW5ndGg7IGkrKykge1xuICAgICAgICB1bml0LmRpbWVuc2lvbnNbaV0gKz0gKHJlcy51bml0LmRpbWVuc2lvbnNbaV0gfHwgMCkgKiBwb3dlcjtcbiAgICAgIH0gLy8gQ2hlY2sgZm9yIGFuZCBjb25zdW1lIGNsb3NpbmcgcGFyZW50aGVzZXMsIHBvcHBpbmcgZnJvbSB0aGUgc3RhY2suXG4gICAgICAvLyBBICcpJyB3aWxsIGFsd2F5cyBmb2xsb3cgYSB1bml0LlxuXG5cbiAgICAgIHNraXBXaGl0ZXNwYWNlKCk7XG5cbiAgICAgIHdoaWxlIChjID09PSAnKScpIHtcbiAgICAgICAgaWYgKHBvd2VyTXVsdGlwbGllclN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignVW5tYXRjaGVkIFwiKVwiIGluIFwiJyArIHRleHQgKyAnXCIgYXQgaW5kZXggJyArIGluZGV4LnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcG93ZXJNdWx0aXBsaWVyU3RhY2tQcm9kdWN0IC89IHBvd2VyTXVsdGlwbGllclN0YWNrLnBvcCgpO1xuICAgICAgICBuZXh0KCk7XG4gICAgICAgIHNraXBXaGl0ZXNwYWNlKCk7XG4gICAgICB9IC8vIFwiKlwiIGFuZCBcIi9cIiBzaG91bGQgbWVhbiB3ZSBhcmUgZXhwZWN0aW5nIHNvbWV0aGluZyB0byBjb21lIG5leHQuXG4gICAgICAvLyBJcyB0aGVyZSBhIGZvcndhcmQgc2xhc2g/IElmIHNvLCBuZWdhdGUgcG93ZXJNdWx0aXBsaWVyQ3VycmVudC4gVGhlIG5leHQgdW5pdCBvciBwYXJlbiBncm91cCBpcyBpbiB0aGUgZGVub21pbmF0b3IuXG5cblxuICAgICAgZXhwZWN0aW5nVW5pdCA9IGZhbHNlO1xuXG4gICAgICBpZiAocGFyc2VDaGFyYWN0ZXIoJyonKSkge1xuICAgICAgICAvLyBleHBsaWNpdCBtdWx0aXBsaWNhdGlvblxuICAgICAgICBwb3dlck11bHRpcGxpZXJDdXJyZW50ID0gMTtcbiAgICAgICAgZXhwZWN0aW5nVW5pdCA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHBhcnNlQ2hhcmFjdGVyKCcvJykpIHtcbiAgICAgICAgLy8gZGl2aXNpb25cbiAgICAgICAgcG93ZXJNdWx0aXBsaWVyQ3VycmVudCA9IC0xO1xuICAgICAgICBleHBlY3RpbmdVbml0ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGltcGxpY2l0IG11bHRpcGxpY2F0aW9uXG4gICAgICAgIHBvd2VyTXVsdGlwbGllckN1cnJlbnQgPSAxO1xuICAgICAgfSAvLyBSZXBsYWNlIHRoZSB1bml0IGludG8gdGhlIGF1dG8gdW5pdCBzeXN0ZW1cblxuXG4gICAgICBpZiAocmVzLnVuaXQuYmFzZSkge1xuICAgICAgICB2YXIgYmFzZURpbSA9IHJlcy51bml0LmJhc2Uua2V5O1xuICAgICAgICBVTklUX1NZU1RFTVMuYXV0b1tiYXNlRGltXSA9IHtcbiAgICAgICAgICB1bml0OiByZXMudW5pdCxcbiAgICAgICAgICBwcmVmaXg6IHJlcy5wcmVmaXhcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IC8vIEhhcyB0aGUgc3RyaW5nIGJlZW4gZW50aXJlbHkgY29uc3VtZWQ/XG5cblxuICAgIHNraXBXaGl0ZXNwYWNlKCk7XG5cbiAgICBpZiAoYykge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb3VsZCBub3QgcGFyc2U6IFwiJyArIHN0ciArICdcIicpO1xuICAgIH0gLy8gSXMgdGhlcmUgYSB0cmFpbGluZyBzbGFzaD9cblxuXG4gICAgaWYgKGV4cGVjdGluZ1VuaXQpIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignVHJhaWxpbmcgY2hhcmFjdGVyczogXCInICsgc3RyICsgJ1wiJyk7XG4gICAgfSAvLyBJcyB0aGUgcGFyZW50aGVzZXMgc3RhY2sgZW1wdHk/XG5cblxuICAgIGlmIChwb3dlck11bHRpcGxpZXJTdGFjay5sZW5ndGggIT09IDApIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignVW5tYXRjaGVkIFwiKFwiIGluIFwiJyArIHRleHQgKyAnXCInKTtcbiAgICB9IC8vIEFyZSB0aGVyZSBhbnkgdW5pdHMgYXQgYWxsP1xuXG5cbiAgICBpZiAodW5pdC51bml0cy5sZW5ndGggPT09IDAgJiYgIW9wdGlvbnMuYWxsb3dOb1VuaXRzKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ1wiJyArIHN0ciArICdcIiBjb250YWlucyBubyB1bml0cycpO1xuICAgIH1cblxuICAgIHVuaXQudmFsdWUgPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdW5pdC5fbm9ybWFsaXplKHZhbHVlKSA6IG51bGw7XG4gICAgcmV0dXJuIHVuaXQ7XG4gIH07XG4gIC8qKlxuICAgKiBjcmVhdGUgYSBjb3B5IG9mIHRoaXMgdW5pdFxuICAgKiBAbWVtYmVyb2YgVW5pdFxuICAgKiBAcmV0dXJuIHtVbml0fSBSZXR1cm5zIGEgY2xvbmVkIHZlcnNpb24gb2YgdGhlIHVuaXRcbiAgICovXG5cblxuICBVbml0LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdW5pdCA9IG5ldyBVbml0KCk7XG4gICAgdW5pdC5maXhQcmVmaXggPSB0aGlzLmZpeFByZWZpeDtcbiAgICB1bml0LnNraXBBdXRvbWF0aWNTaW1wbGlmaWNhdGlvbiA9IHRoaXMuc2tpcEF1dG9tYXRpY1NpbXBsaWZpY2F0aW9uO1xuICAgIHVuaXQudmFsdWUgPSAoMCwgX29iamVjdC5jbG9uZSkodGhpcy52YWx1ZSk7XG4gICAgdW5pdC5kaW1lbnNpb25zID0gdGhpcy5kaW1lbnNpb25zLnNsaWNlKDApO1xuICAgIHVuaXQudW5pdHMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy51bml0cy5sZW5ndGg7IGkrKykge1xuICAgICAgdW5pdC51bml0c1tpXSA9IHt9O1xuXG4gICAgICBmb3IgKHZhciBwIGluIHRoaXMudW5pdHNbaV0pIHtcbiAgICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KSh0aGlzLnVuaXRzW2ldLCBwKSkge1xuICAgICAgICAgIHVuaXQudW5pdHNbaV1bcF0gPSB0aGlzLnVuaXRzW2ldW3BdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuaXQ7XG4gIH07XG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGUgdW5pdCBpcyBkZXJpdmVkIChzdWNoIGFzIG0vcywgb3IgY21eMiwgYnV0IG5vdCBOKVxuICAgKiBAbWVtYmVyb2YgVW5pdFxuICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSB1bml0IGlzIGRlcml2ZWRcbiAgICovXG5cblxuICBVbml0LnByb3RvdHlwZS5faXNEZXJpdmVkID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLnVuaXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnVuaXRzLmxlbmd0aCA+IDEgfHwgTWF0aC5hYnModGhpcy51bml0c1swXS5wb3dlciAtIDEuMCkgPiAxZS0xNTtcbiAgfTtcbiAgLyoqXG4gICAqIE5vcm1hbGl6ZSBhIHZhbHVlLCBiYXNlZCBvbiBpdHMgY3VycmVudGx5IHNldCB1bml0KHMpXG4gICAqIEBtZW1iZXJvZiBVbml0XG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBib29sZWFufSB2YWx1ZVxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IGJvb2xlYW59IG5vcm1hbGl6ZWQgdmFsdWVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBVbml0LnByb3RvdHlwZS5fbm9ybWFsaXplID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgdmFyIHVuaXRWYWx1ZSwgdW5pdE9mZnNldCwgdW5pdFBvd2VyLCB1bml0UHJlZml4VmFsdWU7XG4gICAgdmFyIGNvbnZlcnQ7XG5cbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0aGlzLnVuaXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5faXNEZXJpdmVkKCkpIHtcbiAgICAgIC8vIFRoaXMgaXMgYSBkZXJpdmVkIHVuaXQsIHNvIGRvIG5vdCBhcHBseSBvZmZzZXRzLlxuICAgICAgLy8gRm9yIGV4YW1wbGUsIHdpdGggSiBrZ14tMSBkZWdDXi0xIHlvdSB3b3VsZCBOT1Qgd2FudCB0byBhcHBseSB0aGUgb2Zmc2V0LlxuICAgICAgdmFyIHJlcyA9IHZhbHVlO1xuICAgICAgY29udmVydCA9IFVuaXQuX2dldE51bWJlckNvbnZlcnRlcigoMCwgX2lzLnR5cGVPZikodmFsdWUpKTsgLy8gY29udmVydCB0byBGcmFjdGlvbiBvciBCaWdOdW1iZXIgaWYgbmVlZGVkXG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy51bml0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB1bml0VmFsdWUgPSBjb252ZXJ0KHRoaXMudW5pdHNbaV0udW5pdC52YWx1ZSk7XG4gICAgICAgIHVuaXRQcmVmaXhWYWx1ZSA9IGNvbnZlcnQodGhpcy51bml0c1tpXS5wcmVmaXgudmFsdWUpO1xuICAgICAgICB1bml0UG93ZXIgPSBjb252ZXJ0KHRoaXMudW5pdHNbaV0ucG93ZXIpO1xuICAgICAgICByZXMgPSBtdWx0aXBseVNjYWxhcihyZXMsIHBvdyhtdWx0aXBseVNjYWxhcih1bml0VmFsdWUsIHVuaXRQcmVmaXhWYWx1ZSksIHVuaXRQb3dlcikpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGlzIGlzIGEgc2luZ2xlIHVuaXQgb2YgcG93ZXIgMSwgbGlrZSBrZyBvciBkZWdDXG4gICAgICBjb252ZXJ0ID0gVW5pdC5fZ2V0TnVtYmVyQ29udmVydGVyKCgwLCBfaXMudHlwZU9mKSh2YWx1ZSkpOyAvLyBjb252ZXJ0IHRvIEZyYWN0aW9uIG9yIEJpZ051bWJlciBpZiBuZWVkZWRcblxuICAgICAgdW5pdFZhbHVlID0gY29udmVydCh0aGlzLnVuaXRzWzBdLnVuaXQudmFsdWUpO1xuICAgICAgdW5pdE9mZnNldCA9IGNvbnZlcnQodGhpcy51bml0c1swXS51bml0Lm9mZnNldCk7XG4gICAgICB1bml0UHJlZml4VmFsdWUgPSBjb252ZXJ0KHRoaXMudW5pdHNbMF0ucHJlZml4LnZhbHVlKTtcbiAgICAgIHJldHVybiBtdWx0aXBseVNjYWxhcihhZGRTY2FsYXIodmFsdWUsIHVuaXRPZmZzZXQpLCBtdWx0aXBseVNjYWxhcih1bml0VmFsdWUsIHVuaXRQcmVmaXhWYWx1ZSkpO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIERlbm9ybWFsaXplIGEgdmFsdWUsIGJhc2VkIG9uIGl0cyBjdXJyZW50bHkgc2V0IHVuaXQocylcbiAgICogQG1lbWJlcm9mIFVuaXRcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbcHJlZml4VmFsdWVdICAgIE9wdGlvbmFsIHByZWZpeCB2YWx1ZSB0byBiZSB1c2VkIChpZ25vcmVkIGlmIHRoaXMgaXMgYSBkZXJpdmVkIHVuaXQpXG4gICAqIEByZXR1cm4ge251bWJlcn0gZGVub3JtYWxpemVkIHZhbHVlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgVW5pdC5wcm90b3R5cGUuX2Rlbm9ybWFsaXplID0gZnVuY3Rpb24gKHZhbHVlLCBwcmVmaXhWYWx1ZSkge1xuICAgIHZhciB1bml0VmFsdWUsIHVuaXRPZmZzZXQsIHVuaXRQb3dlciwgdW5pdFByZWZpeFZhbHVlO1xuICAgIHZhciBjb252ZXJ0O1xuXG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdGhpcy51bml0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2lzRGVyaXZlZCgpKSB7XG4gICAgICAvLyBUaGlzIGlzIGEgZGVyaXZlZCB1bml0LCBzbyBkbyBub3QgYXBwbHkgb2Zmc2V0cy5cbiAgICAgIC8vIEZvciBleGFtcGxlLCB3aXRoIEoga2deLTEgZGVnQ14tMSB5b3Ugd291bGQgTk9UIHdhbnQgdG8gYXBwbHkgdGhlIG9mZnNldC5cbiAgICAgIC8vIEFsc28sIHByZWZpeFZhbHVlIGlzIGlnbm9yZWQtLWJ1dCB3ZSB3aWxsIHN0aWxsIHVzZSB0aGUgcHJlZml4IHZhbHVlIHN0b3JlZCBpbiBlYWNoIHVuaXQsIHNpbmNlIGtnIGlzIHVzdWFsbHkgcHJlZmVyYWJsZSB0byBnIHVubGVzcyB0aGUgdXNlciBkZWNpZGVzIG90aGVyd2lzZS5cbiAgICAgIHZhciByZXMgPSB2YWx1ZTtcbiAgICAgIGNvbnZlcnQgPSBVbml0Ll9nZXROdW1iZXJDb252ZXJ0ZXIoKDAsIF9pcy50eXBlT2YpKHZhbHVlKSk7IC8vIGNvbnZlcnQgdG8gRnJhY3Rpb24gb3IgQmlnTnVtYmVyIGlmIG5lZWRlZFxuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudW5pdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdW5pdFZhbHVlID0gY29udmVydCh0aGlzLnVuaXRzW2ldLnVuaXQudmFsdWUpO1xuICAgICAgICB1bml0UHJlZml4VmFsdWUgPSBjb252ZXJ0KHRoaXMudW5pdHNbaV0ucHJlZml4LnZhbHVlKTtcbiAgICAgICAgdW5pdFBvd2VyID0gY29udmVydCh0aGlzLnVuaXRzW2ldLnBvd2VyKTtcbiAgICAgICAgcmVzID0gZGl2aWRlU2NhbGFyKHJlcywgcG93KG11bHRpcGx5U2NhbGFyKHVuaXRWYWx1ZSwgdW5pdFByZWZpeFZhbHVlKSwgdW5pdFBvd2VyKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgaXMgYSBzaW5nbGUgdW5pdCBvZiBwb3dlciAxLCBsaWtlIGtnIG9yIGRlZ0NcbiAgICAgIGNvbnZlcnQgPSBVbml0Ll9nZXROdW1iZXJDb252ZXJ0ZXIoKDAsIF9pcy50eXBlT2YpKHZhbHVlKSk7IC8vIGNvbnZlcnQgdG8gRnJhY3Rpb24gb3IgQmlnTnVtYmVyIGlmIG5lZWRlZFxuXG4gICAgICB1bml0VmFsdWUgPSBjb252ZXJ0KHRoaXMudW5pdHNbMF0udW5pdC52YWx1ZSk7XG4gICAgICB1bml0UHJlZml4VmFsdWUgPSBjb252ZXJ0KHRoaXMudW5pdHNbMF0ucHJlZml4LnZhbHVlKTtcbiAgICAgIHVuaXRPZmZzZXQgPSBjb252ZXJ0KHRoaXMudW5pdHNbMF0udW5pdC5vZmZzZXQpO1xuXG4gICAgICBpZiAocHJlZml4VmFsdWUgPT09IHVuZGVmaW5lZCB8fCBwcmVmaXhWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gc3VidHJhY3QoZGl2aWRlU2NhbGFyKGRpdmlkZVNjYWxhcih2YWx1ZSwgdW5pdFZhbHVlKSwgdW5pdFByZWZpeFZhbHVlKSwgdW5pdE9mZnNldCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc3VidHJhY3QoZGl2aWRlU2NhbGFyKGRpdmlkZVNjYWxhcih2YWx1ZSwgdW5pdFZhbHVlKSwgcHJlZml4VmFsdWUpLCB1bml0T2Zmc2V0KTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBGaW5kIGEgdW5pdCBmcm9tIGEgc3RyaW5nXG4gICAqIEBtZW1iZXJvZiBVbml0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgICAgICAgICAgICAgIEEgc3RyaW5nIGxpa2UgJ2NtJyBvciAnaW5jaCdcbiAgICogQHJldHVybnMge09iamVjdCB8IG51bGx9IHJlc3VsdCAgV2hlbiBmb3VuZCwgYW4gb2JqZWN0IHdpdGggZmllbGRzIHVuaXQgYW5kXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeCBpcyByZXR1cm5lZC4gRWxzZSwgbnVsbCBpcyByZXR1cm5lZC5cbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBfZmluZFVuaXQoc3RyKSB7XG4gICAgLy8gRmlyc3QsIG1hdGNoIHVuaXRzIG5hbWVzIGV4YWN0bHkuIEZvciBleGFtcGxlLCBhIHVzZXIgY291bGQgZGVmaW5lICdtbScgYXMgMTBeLTQgbSwgd2hpY2ggaXMgc2lsbHksIGJ1dCB0aGVuIHdlIHdvdWxkIHdhbnQgJ21tJyB0byBtYXRjaCB0aGUgdXNlci1kZWZpbmVkIHVuaXQuXG4gICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShVTklUUywgc3RyKSkge1xuICAgICAgdmFyIHVuaXQgPSBVTklUU1tzdHJdO1xuICAgICAgdmFyIHByZWZpeCA9IHVuaXQucHJlZml4ZXNbJyddO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdW5pdDogdW5pdCxcbiAgICAgICAgcHJlZml4OiBwcmVmaXhcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX25hbWUgaW4gVU5JVFMpIHtcbiAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoVU5JVFMsIF9uYW1lKSkge1xuICAgICAgICBpZiAoKDAsIF9zdHJpbmcuZW5kc1dpdGgpKHN0ciwgX25hbWUpKSB7XG4gICAgICAgICAgdmFyIF91bml0ID0gVU5JVFNbX25hbWVdO1xuICAgICAgICAgIHZhciBwcmVmaXhMZW4gPSBzdHIubGVuZ3RoIC0gX25hbWUubGVuZ3RoO1xuICAgICAgICAgIHZhciBwcmVmaXhOYW1lID0gc3RyLnN1YnN0cmluZygwLCBwcmVmaXhMZW4pO1xuXG4gICAgICAgICAgdmFyIF9wcmVmaXggPSAoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoX3VuaXQucHJlZml4ZXMsIHByZWZpeE5hbWUpID8gX3VuaXQucHJlZml4ZXNbcHJlZml4TmFtZV0gOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgICBpZiAoX3ByZWZpeCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBzdG9yZSB1bml0LCBwcmVmaXgsIGFuZCB2YWx1ZVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdW5pdDogX3VuaXQsXG4gICAgICAgICAgICAgIHByZWZpeDogX3ByZWZpeFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvKipcbiAgICogVGVzdCBpZiB0aGUgZ2l2ZW4gZXhwcmVzc2lvbiBpcyBhIHVuaXQuXG4gICAqIFRoZSB1bml0IGNhbiBoYXZlIGEgcHJlZml4IGJ1dCBjYW5ub3QgaGF2ZSBhIHZhbHVlLlxuICAgKiBAbWVtYmVyb2YgVW5pdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAgIEEgc3RyaW5nIHRvIGJlIHRlc3RlZCB3aGV0aGVyIGl0IGlzIGEgdmFsdWUgbGVzcyB1bml0LlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB1bml0IGNhbiBoYXZlIHByZWZpeCwgbGlrZSBcImNtXCJcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gICAgICB0cnVlIGlmIHRoZSBnaXZlbiBzdHJpbmcgaXMgYSB1bml0XG4gICAqL1xuXG5cbiAgVW5pdC5pc1ZhbHVlbGVzc1VuaXQgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiBfZmluZFVuaXQobmFtZSkgIT09IG51bGw7XG4gIH07XG4gIC8qKlxuICAgKiBjaGVjayBpZiB0aGlzIHVuaXQgaGFzIGdpdmVuIGJhc2UgdW5pdFxuICAgKiBJZiB0aGlzIHVuaXQgaXMgYSBkZXJpdmVkIHVuaXQsIHRoaXMgd2lsbCBBTFdBWVMgcmV0dXJuIGZhbHNlLCBzaW5jZSBieSBkZWZpbml0aW9uIGJhc2UgdW5pdHMgYXJlIG5vdCBkZXJpdmVkLlxuICAgKiBAbWVtYmVyb2YgVW5pdFxuICAgKiBAcGFyYW0ge0JBU0VfVU5JVFMgfCBzdHJpbmcgfCB1bmRlZmluZWR9IGJhc2VcbiAgICovXG5cblxuICBVbml0LnByb3RvdHlwZS5oYXNCYXNlID0gZnVuY3Rpb24gKGJhc2UpIHtcbiAgICBpZiAodHlwZW9mIGJhc2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICBiYXNlID0gQkFTRV9VTklUU1tiYXNlXTtcbiAgICB9XG5cbiAgICBpZiAoIWJhc2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IC8vIEFsbCBkaW1lbnNpb25zIG11c3QgYmUgdGhlIHNhbWVcblxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBCQVNFX0RJTUVOU0lPTlMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChNYXRoLmFicygodGhpcy5kaW1lbnNpb25zW2ldIHx8IDApIC0gKGJhc2UuZGltZW5zaW9uc1tpXSB8fCAwKSkgPiAxZS0xMikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGlzIHVuaXQgaGFzIGEgYmFzZSBvciBiYXNlcyBlcXVhbCB0byBhbm90aGVyIGJhc2Ugb3IgYmFzZXNcbiAgICogRm9yIGRlcml2ZWQgdW5pdHMsIHRoZSBleHBvbmVudCBvbiBlYWNoIGJhc2UgYWxzbyBtdXN0IG1hdGNoXG4gICAqIEBtZW1iZXJvZiBVbml0XG4gICAqIEBwYXJhbSB7VW5pdH0gb3RoZXJcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBlcXVhbCBiYXNlXG4gICAqL1xuXG5cbiAgVW5pdC5wcm90b3R5cGUuZXF1YWxCYXNlID0gZnVuY3Rpb24gKG90aGVyKSB7XG4gICAgLy8gQWxsIGRpbWVuc2lvbnMgbXVzdCBiZSB0aGUgc2FtZVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgQkFTRV9ESU1FTlNJT05TLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoTWF0aC5hYnMoKHRoaXMuZGltZW5zaW9uc1tpXSB8fCAwKSAtIChvdGhlci5kaW1lbnNpb25zW2ldIHx8IDApKSA+IDFlLTEyKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoaXMgdW5pdCBlcXVhbHMgYW5vdGhlciB1bml0XG4gICAqIEBtZW1iZXJvZiBVbml0XG4gICAqIEBwYXJhbSB7VW5pdH0gb3RoZXJcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBib3RoIHVuaXRzIGFyZSBlcXVhbFxuICAgKi9cblxuXG4gIFVuaXQucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIChvdGhlcikge1xuICAgIHJldHVybiB0aGlzLmVxdWFsQmFzZShvdGhlcikgJiYgZXF1YWwodGhpcy52YWx1ZSwgb3RoZXIudmFsdWUpO1xuICB9O1xuICAvKipcbiAgICogTXVsdGlwbHkgdGhpcyB1bml0IHdpdGggYW5vdGhlciBvbmVcbiAgICogQG1lbWJlcm9mIFVuaXRcbiAgICogQHBhcmFtIHtVbml0fSBvdGhlclxuICAgKiBAcmV0dXJuIHtVbml0fSBwcm9kdWN0IG9mIHRoaXMgdW5pdCBhbmQgdGhlIG90aGVyIHVuaXRcbiAgICovXG5cblxuICBVbml0LnByb3RvdHlwZS5tdWx0aXBseSA9IGZ1bmN0aW9uIChvdGhlcikge1xuICAgIHZhciByZXMgPSB0aGlzLmNsb25lKCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IEJBU0VfRElNRU5TSU9OUy5sZW5ndGg7IGkrKykge1xuICAgICAgLy8gRGltZW5zaW9ucyBhcnJheXMgbWF5IGJlIG9mIGRpZmZlcmVudCBsZW5ndGhzLiBEZWZhdWx0IHRvIDAuXG4gICAgICByZXMuZGltZW5zaW9uc1tpXSA9ICh0aGlzLmRpbWVuc2lvbnNbaV0gfHwgMCkgKyAob3RoZXIuZGltZW5zaW9uc1tpXSB8fCAwKTtcbiAgICB9IC8vIEFwcGVuZCBvdGhlcidzIHVuaXRzIGxpc3Qgb250byByZXNcblxuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IG90aGVyLnVuaXRzLmxlbmd0aDsgX2krKykge1xuICAgICAgLy8gTWFrZSBhIGRlZXAgY29weVxuICAgICAgdmFyIGludmVydGVkID0ge307XG5cbiAgICAgIGZvciAodmFyIGtleSBpbiBvdGhlci51bml0c1tfaV0pIHtcbiAgICAgICAgaW52ZXJ0ZWRba2V5XSA9IG90aGVyLnVuaXRzW19pXVtrZXldO1xuICAgICAgfVxuXG4gICAgICByZXMudW5pdHMucHVzaChpbnZlcnRlZCk7XG4gICAgfSAvLyBJZiBhdCBsZWFzdCBvbmUgb3BlcmFuZCBoYXMgYSB2YWx1ZSwgdGhlbiB0aGUgcmVzdWx0IHNob3VsZCBhbHNvIGhhdmUgYSB2YWx1ZVxuXG5cbiAgICBpZiAodGhpcy52YWx1ZSAhPT0gbnVsbCB8fCBvdGhlci52YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgdmFyIHZhbFRoaXMgPSB0aGlzLnZhbHVlID09PSBudWxsID8gdGhpcy5fbm9ybWFsaXplKDEpIDogdGhpcy52YWx1ZTtcbiAgICAgIHZhciB2YWxPdGhlciA9IG90aGVyLnZhbHVlID09PSBudWxsID8gb3RoZXIuX25vcm1hbGl6ZSgxKSA6IG90aGVyLnZhbHVlO1xuICAgICAgcmVzLnZhbHVlID0gbXVsdGlwbHlTY2FsYXIodmFsVGhpcywgdmFsT3RoZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMudmFsdWUgPSBudWxsO1xuICAgIH1cblxuICAgIHJlcy5za2lwQXV0b21hdGljU2ltcGxpZmljYXRpb24gPSBmYWxzZTtcbiAgICByZXR1cm4gZ2V0TnVtZXJpY0lmVW5pdGxlc3MocmVzKTtcbiAgfTtcbiAgLyoqXG4gICAqIERpdmlkZSB0aGlzIHVuaXQgYnkgYW5vdGhlciBvbmVcbiAgICogQG1lbWJlcm9mIFVuaXRcbiAgICogQHBhcmFtIHtVbml0fSBvdGhlclxuICAgKiBAcmV0dXJuIHtVbml0fSByZXN1bHQgb2YgZGl2aWRpbmcgdGhpcyB1bml0IGJ5IHRoZSBvdGhlciB1bml0XG4gICAqL1xuXG5cbiAgVW5pdC5wcm90b3R5cGUuZGl2aWRlID0gZnVuY3Rpb24gKG90aGVyKSB7XG4gICAgdmFyIHJlcyA9IHRoaXMuY2xvbmUoKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgQkFTRV9ESU1FTlNJT05TLmxlbmd0aDsgaSsrKSB7XG4gICAgICAvLyBEaW1lbnNpb25zIGFycmF5cyBtYXkgYmUgb2YgZGlmZmVyZW50IGxlbmd0aHMuIERlZmF1bHQgdG8gMC5cbiAgICAgIHJlcy5kaW1lbnNpb25zW2ldID0gKHRoaXMuZGltZW5zaW9uc1tpXSB8fCAwKSAtIChvdGhlci5kaW1lbnNpb25zW2ldIHx8IDApO1xuICAgIH0gLy8gSW52ZXJ0IGFuZCBhcHBlbmQgb3RoZXIncyB1bml0cyBsaXN0IG9udG8gcmVzXG5cblxuICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IG90aGVyLnVuaXRzLmxlbmd0aDsgX2kyKyspIHtcbiAgICAgIC8vIE1ha2UgYSBkZWVwIGNvcHlcbiAgICAgIHZhciBpbnZlcnRlZCA9IHt9O1xuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gb3RoZXIudW5pdHNbX2kyXSkge1xuICAgICAgICBpbnZlcnRlZFtrZXldID0gb3RoZXIudW5pdHNbX2kyXVtrZXldO1xuICAgICAgfVxuXG4gICAgICBpbnZlcnRlZC5wb3dlciA9IC1pbnZlcnRlZC5wb3dlcjtcbiAgICAgIHJlcy51bml0cy5wdXNoKGludmVydGVkKTtcbiAgICB9IC8vIElmIGF0IGxlYXN0IG9uZSBvcGVyYW5kIGhhcyBhIHZhbHVlLCB0aGUgcmVzdWx0IHNob3VsZCBoYXZlIGEgdmFsdWVcblxuXG4gICAgaWYgKHRoaXMudmFsdWUgIT09IG51bGwgfHwgb3RoZXIudmFsdWUgIT09IG51bGwpIHtcbiAgICAgIHZhciB2YWxUaGlzID0gdGhpcy52YWx1ZSA9PT0gbnVsbCA/IHRoaXMuX25vcm1hbGl6ZSgxKSA6IHRoaXMudmFsdWU7XG4gICAgICB2YXIgdmFsT3RoZXIgPSBvdGhlci52YWx1ZSA9PT0gbnVsbCA/IG90aGVyLl9ub3JtYWxpemUoMSkgOiBvdGhlci52YWx1ZTtcbiAgICAgIHJlcy52YWx1ZSA9IGRpdmlkZVNjYWxhcih2YWxUaGlzLCB2YWxPdGhlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcy52YWx1ZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmVzLnNraXBBdXRvbWF0aWNTaW1wbGlmaWNhdGlvbiA9IGZhbHNlO1xuICAgIHJldHVybiBnZXROdW1lcmljSWZVbml0bGVzcyhyZXMpO1xuICB9O1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBwb3dlciBvZiBhIHVuaXRcbiAgICogQG1lbWJlcm9mIFVuaXRcbiAgICogQHBhcmFtIHtudW1iZXIgfCBGcmFjdGlvbiB8IEJpZ051bWJlcn0gcFxuICAgKiBAcmV0dXJucyB7VW5pdH0gICAgICBUaGUgcmVzdWx0OiB0aGlzXnBcbiAgICovXG5cblxuICBVbml0LnByb3RvdHlwZS5wb3cgPSBmdW5jdGlvbiAocCkge1xuICAgIHZhciByZXMgPSB0aGlzLmNsb25lKCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IEJBU0VfRElNRU5TSU9OUy5sZW5ndGg7IGkrKykge1xuICAgICAgLy8gRGltZW5zaW9ucyBhcnJheXMgbWF5IGJlIG9mIGRpZmZlcmVudCBsZW5ndGhzLiBEZWZhdWx0IHRvIDAuXG4gICAgICByZXMuZGltZW5zaW9uc1tpXSA9ICh0aGlzLmRpbWVuc2lvbnNbaV0gfHwgMCkgKiBwO1xuICAgIH0gLy8gQWRqdXN0IHRoZSBwb3dlciBvZiBlYWNoIHVuaXQgaW4gdGhlIGxpc3RcblxuXG4gICAgZm9yICh2YXIgX2kzID0gMDsgX2kzIDwgcmVzLnVuaXRzLmxlbmd0aDsgX2kzKyspIHtcbiAgICAgIHJlcy51bml0c1tfaTNdLnBvd2VyICo9IHA7XG4gICAgfVxuXG4gICAgaWYgKHJlcy52YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgcmVzLnZhbHVlID0gcG93KHJlcy52YWx1ZSwgcCk7IC8vIG9ubHkgYWxsb3cgbnVtZXJpYyBvdXRwdXQsIHdlIGRvbid0IHdhbnQgdG8gcmV0dXJuIGEgQ29tcGxleCBudW1iZXJcbiAgICAgIC8vIGlmICghaXNOdW1lcmljKHJlcy52YWx1ZSkpIHtcbiAgICAgIC8vICByZXMudmFsdWUgPSBOYU5cbiAgICAgIC8vIH1cbiAgICAgIC8vIFVwZGF0ZTogQ29tcGxleCBzdXBwb3J0ZWQgbm93XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcy52YWx1ZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmVzLnNraXBBdXRvbWF0aWNTaW1wbGlmaWNhdGlvbiA9IGZhbHNlO1xuICAgIHJldHVybiBnZXROdW1lcmljSWZVbml0bGVzcyhyZXMpO1xuICB9O1xuICAvKipcbiAgICogUmV0dXJuIHRoZSBudW1lcmljIHZhbHVlIG9mIHRoaXMgdW5pdCBpZiBpdCBpcyBkaW1lbnNpb25sZXNzLCBoYXMgYSB2YWx1ZSwgYW5kIGNvbmZpZy5wcmVkaWN0YWJsZSA9PSBmYWxzZTsgb3IgdGhlIG9yaWdpbmFsIHVuaXQgb3RoZXJ3aXNlXG4gICAqIEBwYXJhbSB7VW5pdH0gdW5pdFxuICAgKiBAcmV0dXJucyB7bnVtYmVyIHwgRnJhY3Rpb24gfCBCaWdOdW1iZXIgfCBVbml0fSAgVGhlIG51bWVyaWMgdmFsdWUgb2YgdGhlIHVuaXQgaWYgY29uZGl0aW9ucyBhcmUgbWV0LCBvciB0aGUgb3JpZ2luYWwgdW5pdCBvdGhlcndpc2VcbiAgICovXG5cblxuICBmdW5jdGlvbiBnZXROdW1lcmljSWZVbml0bGVzcyh1bml0KSB7XG4gICAgaWYgKHVuaXQuZXF1YWxCYXNlKEJBU0VfVU5JVFMuTk9ORSkgJiYgdW5pdC52YWx1ZSAhPT0gbnVsbCAmJiAhY29uZmlnLnByZWRpY3RhYmxlKSB7XG4gICAgICByZXR1cm4gdW5pdC52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuaXQ7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGFic29sdXRlIHZhbHVlIG9mIGEgdW5pdFxuICAgKiBAbWVtYmVyb2YgVW5pdFxuICAgKiBAcGFyYW0ge251bWJlciB8IEZyYWN0aW9uIHwgQmlnTnVtYmVyfSB4XG4gICAqIEByZXR1cm5zIHtVbml0fSAgICAgIFRoZSByZXN1bHQ6IHx4fCwgYWJzb2x1dGUgdmFsdWUgb2YgeFxuICAgKi9cblxuXG4gIFVuaXQucHJvdG90eXBlLmFicyA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBUaGlzIGdpdmVzIGNvcnJlY3QsIGJ1dCB1bmV4cGVjdGVkLCByZXN1bHRzIGZvciB1bml0cyB3aXRoIGFuIG9mZnNldC5cbiAgICAvLyBGb3IgZXhhbXBsZSwgYWJzKC0yODMuMTUgZGVnQykgPSAtMjYzLjE1IGRlZ0MgISEhXG4gICAgdmFyIHJldCA9IHRoaXMuY2xvbmUoKTtcbiAgICByZXQudmFsdWUgPSByZXQudmFsdWUgIT09IG51bGwgPyBhYnMocmV0LnZhbHVlKSA6IG51bGw7XG5cbiAgICBmb3IgKHZhciBpIGluIHJldC51bml0cykge1xuICAgICAgaWYgKHJldC51bml0c1tpXS51bml0Lm5hbWUgPT09ICdWQScgfHwgcmV0LnVuaXRzW2ldLnVuaXQubmFtZSA9PT0gJ1ZBUicpIHtcbiAgICAgICAgcmV0LnVuaXRzW2ldLnVuaXQgPSBVTklUUy5XO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH07XG4gIC8qKlxuICAgKiBDb252ZXJ0IHRoZSB1bml0IHRvIGEgc3BlY2lmaWMgdW5pdCBuYW1lLlxuICAgKiBAbWVtYmVyb2YgVW5pdFxuICAgKiBAcGFyYW0ge3N0cmluZyB8IFVuaXR9IHZhbHVlbGVzc1VuaXQgICBBIHVuaXQgd2l0aG91dCB2YWx1ZS4gQ2FuIGhhdmUgcHJlZml4LCBsaWtlIFwiY21cIlxuICAgKiBAcmV0dXJucyB7VW5pdH0gUmV0dXJucyBhIGNsb25lIG9mIHRoZSB1bml0IHdpdGggYSBmaXhlZCBwcmVmaXggYW5kIHVuaXQuXG4gICAqL1xuXG5cbiAgVW5pdC5wcm90b3R5cGUudG8gPSBmdW5jdGlvbiAodmFsdWVsZXNzVW5pdCkge1xuICAgIHZhciBvdGhlcjtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlID09PSBudWxsID8gdGhpcy5fbm9ybWFsaXplKDEpIDogdGhpcy52YWx1ZTtcblxuICAgIGlmICh0eXBlb2YgdmFsdWVsZXNzVW5pdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIG90aGVyID0gbmV3IFVuaXQobnVsbCwgdmFsdWVsZXNzVW5pdClcbiAgICAgIG90aGVyID0gVW5pdC5wYXJzZSh2YWx1ZWxlc3NVbml0KTtcblxuICAgICAgaWYgKCF0aGlzLmVxdWFsQmFzZShvdGhlcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5pdHMgZG8gbm90IG1hdGNoICgnXCIuY29uY2F0KG90aGVyLnRvU3RyaW5nKCksIFwiJyAhPSAnXCIpLmNvbmNhdCh0aGlzLnRvU3RyaW5nKCksIFwiJylcIikpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3RoZXIudmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY29udmVydCB0byBhIHVuaXQgd2l0aCBhIHZhbHVlJyk7XG4gICAgICB9XG5cbiAgICAgIG90aGVyLnZhbHVlID0gKDAsIF9vYmplY3QuY2xvbmUpKHZhbHVlKTtcbiAgICAgIG90aGVyLmZpeFByZWZpeCA9IHRydWU7XG4gICAgICBvdGhlci5za2lwQXV0b21hdGljU2ltcGxpZmljYXRpb24gPSB0cnVlO1xuICAgICAgcmV0dXJuIG90aGVyO1xuICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc1VuaXQpKHZhbHVlbGVzc1VuaXQpKSB7XG4gICAgICBpZiAoIXRoaXMuZXF1YWxCYXNlKHZhbHVlbGVzc1VuaXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuaXRzIGRvIG5vdCBtYXRjaCAoJ1wiLmNvbmNhdCh2YWx1ZWxlc3NVbml0LnRvU3RyaW5nKCksIFwiJyAhPSAnXCIpLmNvbmNhdCh0aGlzLnRvU3RyaW5nKCksIFwiJylcIikpO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWVsZXNzVW5pdC52YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IHRvIGEgdW5pdCB3aXRoIGEgdmFsdWUnKTtcbiAgICAgIH1cblxuICAgICAgb3RoZXIgPSB2YWx1ZWxlc3NVbml0LmNsb25lKCk7XG4gICAgICBvdGhlci52YWx1ZSA9ICgwLCBfb2JqZWN0LmNsb25lKSh2YWx1ZSk7XG4gICAgICBvdGhlci5maXhQcmVmaXggPSB0cnVlO1xuICAgICAgb3RoZXIuc2tpcEF1dG9tYXRpY1NpbXBsaWZpY2F0aW9uID0gdHJ1ZTtcbiAgICAgIHJldHVybiBvdGhlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdHJpbmcgb3IgVW5pdCBleHBlY3RlZCBhcyBwYXJhbWV0ZXInKTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSB1bml0IHdoZW4gcmVwcmVzZW50ZWQgd2l0aCBnaXZlbiB2YWx1ZWxlc3MgdW5pdFxuICAgKiBAbWVtYmVyb2YgVW5pdFxuICAgKiBAcGFyYW0ge3N0cmluZyB8IFVuaXR9IHZhbHVlbGVzc1VuaXQgICAgRm9yIGV4YW1wbGUgJ2NtJyBvciAnaW5jaCdcbiAgICogQHJldHVybiB7bnVtYmVyfSBSZXR1cm5zIHRoZSB1bml0IHZhbHVlIGFzIG51bWJlci5cbiAgICovXG4gIC8vIFRPRE86IGRlcHJlY2F0ZSBVbml0LnRvTnVtYmVyPyBJdCdzIGFsd2F5cyBiZXR0ZXIgdG8gdXNlIHRvTnVtZXJpY1xuXG5cbiAgVW5pdC5wcm90b3R5cGUudG9OdW1iZXIgPSBmdW5jdGlvbiAodmFsdWVsZXNzVW5pdCkge1xuICAgIHJldHVybiB0b051bWJlcih0aGlzLnRvTnVtZXJpYyh2YWx1ZWxlc3NVbml0KSk7XG4gIH07XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSB1bml0IGluIHRoZSBvcmlnaW5hbCBudW1lcmljIHR5cGVcbiAgICogQG1lbWJlcm9mIFVuaXRcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBVbml0fSB2YWx1ZWxlc3NVbml0ICAgIEZvciBleGFtcGxlICdjbScgb3IgJ2luY2gnXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9ufSBSZXR1cm5zIHRoZSB1bml0IHZhbHVlXG4gICAqL1xuXG5cbiAgVW5pdC5wcm90b3R5cGUudG9OdW1lcmljID0gZnVuY3Rpb24gKHZhbHVlbGVzc1VuaXQpIHtcbiAgICB2YXIgb3RoZXI7XG5cbiAgICBpZiAodmFsdWVsZXNzVW5pdCkge1xuICAgICAgLy8gQWxsb3cgZ2V0dGluZyB0aGUgbnVtZXJpYyB2YWx1ZSB3aXRob3V0IGNvbnZlcnRpbmcgdG8gYSBkaWZmZXJlbnQgdW5pdFxuICAgICAgb3RoZXIgPSB0aGlzLnRvKHZhbHVlbGVzc1VuaXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdGhlciA9IHRoaXMuY2xvbmUoKTtcbiAgICB9XG5cbiAgICBpZiAob3RoZXIuX2lzRGVyaXZlZCgpIHx8IG90aGVyLnVuaXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG90aGVyLl9kZW5vcm1hbGl6ZShvdGhlci52YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvdGhlci5fZGVub3JtYWxpemUob3RoZXIudmFsdWUsIG90aGVyLnVuaXRzWzBdLnByZWZpeC52YWx1ZSk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogR2V0IGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB1bml0LlxuICAgKiBAbWVtYmVyb2YgVW5pdFxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG5cbiAgVW5pdC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybWF0KCk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB1bml0XG4gICAqIEBtZW1iZXJvZiBVbml0XG4gICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYSBKU09OIG9iamVjdCBzdHJ1Y3R1cmVkIGFzOlxuICAgKiAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiVW5pdFwiLCBcInZhbHVlXCI6IDIsIFwidW5pdFwiOiBcImNtXCIsIFwiZml4UHJlZml4XCI6IGZhbHNlfWBcbiAgICovXG5cblxuICBVbml0LnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hdGhqczogJ1VuaXQnLFxuICAgICAgdmFsdWU6IHRoaXMuX2Rlbm9ybWFsaXplKHRoaXMudmFsdWUpLFxuICAgICAgdW5pdDogdGhpcy5mb3JtYXRVbml0cygpLFxuICAgICAgZml4UHJlZml4OiB0aGlzLmZpeFByZWZpeFxuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhIFVuaXQgZnJvbSBhIEpTT04gb2JqZWN0XG4gICAqIEBtZW1iZXJvZiBVbml0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBqc29uICBBIEpTT04gb2JqZWN0IHN0cnVjdHVyZWQgYXM6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiVW5pdFwiLCBcInZhbHVlXCI6IDIsIFwidW5pdFwiOiBcImNtXCIsIFwiZml4UHJlZml4XCI6IGZhbHNlfWBcbiAgICogQHJldHVybiB7VW5pdH1cbiAgICovXG5cblxuICBVbml0LmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICB2YXIgdW5pdCA9IG5ldyBVbml0KGpzb24udmFsdWUsIGpzb24udW5pdCk7XG4gICAgdW5pdC5maXhQcmVmaXggPSBqc29uLmZpeFByZWZpeCB8fCBmYWxzZTtcbiAgICByZXR1cm4gdW5pdDtcbiAgfTtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdW5pdC5cbiAgICogQG1lbWJlcm9mIFVuaXRcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuXG4gIFVuaXQucHJvdG90eXBlLnZhbHVlT2YgPSBVbml0LnByb3RvdHlwZS50b1N0cmluZztcbiAgLyoqXG4gICAqIFNpbXBsaWZ5IHRoaXMgVW5pdCdzIHVuaXQgbGlzdCBhbmQgcmV0dXJuIGEgbmV3IFVuaXQgd2l0aCB0aGUgc2ltcGxpZmllZCBsaXN0LlxuICAgKiBUaGUgcmV0dXJuZWQgVW5pdCB3aWxsIGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBcImJlc3RcIiB1bml0cyBmb3IgZm9ybWF0dGluZy5cbiAgICovXG5cbiAgVW5pdC5wcm90b3R5cGUuc2ltcGxpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJldCA9IHRoaXMuY2xvbmUoKTtcbiAgICB2YXIgcHJvcG9zZWRVbml0TGlzdCA9IFtdOyAvLyBTZWFyY2ggZm9yIGEgbWF0Y2hpbmcgYmFzZVxuXG4gICAgdmFyIG1hdGNoaW5nQmFzZTtcblxuICAgIGZvciAodmFyIGtleSBpbiBjdXJyZW50VW5pdFN5c3RlbSkge1xuICAgICAgaWYgKHJldC5oYXNCYXNlKEJBU0VfVU5JVFNba2V5XSkpIHtcbiAgICAgICAgbWF0Y2hpbmdCYXNlID0ga2V5O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWF0Y2hpbmdCYXNlID09PSAnTk9ORScpIHtcbiAgICAgIHJldC51bml0cyA9IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbWF0Y2hpbmdVbml0O1xuXG4gICAgICBpZiAobWF0Y2hpbmdCYXNlKSB7XG4gICAgICAgIC8vIERvZXMgdGhlIHVuaXQgc3lzdGVtIGhhdmUgYSBtYXRjaGluZyB1bml0P1xuICAgICAgICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKGN1cnJlbnRVbml0U3lzdGVtLCBtYXRjaGluZ0Jhc2UpKSB7XG4gICAgICAgICAgbWF0Y2hpbmdVbml0ID0gY3VycmVudFVuaXRTeXN0ZW1bbWF0Y2hpbmdCYXNlXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobWF0Y2hpbmdVbml0KSB7XG4gICAgICAgIHJldC51bml0cyA9IFt7XG4gICAgICAgICAgdW5pdDogbWF0Y2hpbmdVbml0LnVuaXQsXG4gICAgICAgICAgcHJlZml4OiBtYXRjaGluZ1VuaXQucHJlZml4LFxuICAgICAgICAgIHBvd2VyOiAxLjBcbiAgICAgICAgfV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBNdWx0aXBsZSB1bml0cyBvciB1bml0cyB3aXRoIHBvd2VycyBhcmUgZm9ybWF0dGVkIGxpa2UgdGhpczpcbiAgICAgICAgLy8gNSAoa2cgbV4yKSAvIChzXjMgbW9sKVxuICAgICAgICAvLyBCdWlsZCBhbiByZXByZXNlbnRhdGlvbiBmcm9tIHRoZSBiYXNlIHVuaXRzIG9mIHRoZSBjdXJyZW50IHVuaXQgc3lzdGVtXG4gICAgICAgIHZhciBtaXNzaW5nQmFzZURpbSA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgQkFTRV9ESU1FTlNJT05TLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGJhc2VEaW0gPSBCQVNFX0RJTUVOU0lPTlNbaV07XG5cbiAgICAgICAgICBpZiAoTWF0aC5hYnMocmV0LmRpbWVuc2lvbnNbaV0gfHwgMCkgPiAxZS0xMikge1xuICAgICAgICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShjdXJyZW50VW5pdFN5c3RlbSwgYmFzZURpbSkpIHtcbiAgICAgICAgICAgICAgcHJvcG9zZWRVbml0TGlzdC5wdXNoKHtcbiAgICAgICAgICAgICAgICB1bml0OiBjdXJyZW50VW5pdFN5c3RlbVtiYXNlRGltXS51bml0LFxuICAgICAgICAgICAgICAgIHByZWZpeDogY3VycmVudFVuaXRTeXN0ZW1bYmFzZURpbV0ucHJlZml4LFxuICAgICAgICAgICAgICAgIHBvd2VyOiByZXQuZGltZW5zaW9uc1tpXSB8fCAwXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbWlzc2luZ0Jhc2VEaW0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBJcyB0aGUgcHJvcG9zZWQgdW5pdCBsaXN0IFwic2ltcGxlclwiIHRoYW4gdGhlIGV4aXN0aW5nIG9uZT9cblxuXG4gICAgICAgIGlmIChwcm9wb3NlZFVuaXRMaXN0Lmxlbmd0aCA8IHJldC51bml0cy5sZW5ndGggJiYgIW1pc3NpbmdCYXNlRGltKSB7XG4gICAgICAgICAgLy8gUmVwbGFjZSB0aGlzIHVuaXQgbGlzdCB3aXRoIHRoZSBwcm9wb3NlZCBsaXN0XG4gICAgICAgICAgcmV0LnVuaXRzID0gcHJvcG9zZWRVbml0TGlzdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH07XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgbmV3IFVuaXQgaW4gdGhlIFNJIHN5c3RlbSB3aXRoIHRoZSBzYW1lIHZhbHVlIGFzIHRoaXMgb25lXG4gICAqL1xuXG5cbiAgVW5pdC5wcm90b3R5cGUudG9TSSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmV0ID0gdGhpcy5jbG9uZSgpO1xuICAgIHZhciBwcm9wb3NlZFVuaXRMaXN0ID0gW107IC8vIE11bHRpcGxlIHVuaXRzIG9yIHVuaXRzIHdpdGggcG93ZXJzIGFyZSBmb3JtYXR0ZWQgbGlrZSB0aGlzOlxuICAgIC8vIDUgKGtnIG1eMikgLyAoc14zIG1vbClcbiAgICAvLyBCdWlsZCBhbiByZXByZXNlbnRhdGlvbiBmcm9tIHRoZSBiYXNlIHVuaXRzIG9mIHRoZSBTSSB1bml0IHN5c3RlbVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBCQVNFX0RJTUVOU0lPTlMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBiYXNlRGltID0gQkFTRV9ESU1FTlNJT05TW2ldO1xuXG4gICAgICBpZiAoTWF0aC5hYnMocmV0LmRpbWVuc2lvbnNbaV0gfHwgMCkgPiAxZS0xMikge1xuICAgICAgICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKFVOSVRfU1lTVEVNUy5zaSwgYmFzZURpbSkpIHtcbiAgICAgICAgICBwcm9wb3NlZFVuaXRMaXN0LnB1c2goe1xuICAgICAgICAgICAgdW5pdDogVU5JVF9TWVNURU1TLnNpW2Jhc2VEaW1dLnVuaXQsXG4gICAgICAgICAgICBwcmVmaXg6IFVOSVRfU1lTVEVNUy5zaVtiYXNlRGltXS5wcmVmaXgsXG4gICAgICAgICAgICBwb3dlcjogcmV0LmRpbWVuc2lvbnNbaV0gfHwgMFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGV4cHJlc3MgY3VzdG9tIHVuaXQgJyArIGJhc2VEaW0gKyAnIGluIFNJIHVuaXRzJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIFJlcGxhY2UgdGhpcyB1bml0IGxpc3Qgd2l0aCB0aGUgcHJvcG9zZWQgbGlzdFxuXG5cbiAgICByZXQudW5pdHMgPSBwcm9wb3NlZFVuaXRMaXN0O1xuICAgIHJldC5maXhQcmVmaXggPSB0cnVlO1xuICAgIHJldC5za2lwQXV0b21hdGljU2ltcGxpZmljYXRpb24gPSB0cnVlO1xuICAgIHJldHVybiByZXQ7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHVuaXRzIG9mIHRoaXMgVW5pdCwgd2l0aG91dCB0aGUgdmFsdWUuIFRoZSB1bml0IGxpc3QgaXMgZm9ybWF0dGVkIGFzLWlzIHdpdGhvdXQgZmlyc3QgYmVpbmcgc2ltcGxpZmllZC5cbiAgICogQG1lbWJlcm9mIFVuaXRcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuXG4gIFVuaXQucHJvdG90eXBlLmZvcm1hdFVuaXRzID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzdHJOdW0gPSAnJztcbiAgICB2YXIgc3RyRGVuID0gJyc7XG4gICAgdmFyIG5OdW0gPSAwO1xuICAgIHZhciBuRGVuID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy51bml0cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMudW5pdHNbaV0ucG93ZXIgPiAwKSB7XG4gICAgICAgIG5OdW0rKztcbiAgICAgICAgc3RyTnVtICs9ICcgJyArIHRoaXMudW5pdHNbaV0ucHJlZml4Lm5hbWUgKyB0aGlzLnVuaXRzW2ldLnVuaXQubmFtZTtcblxuICAgICAgICBpZiAoTWF0aC5hYnModGhpcy51bml0c1tpXS5wb3dlciAtIDEuMCkgPiAxZS0xNSkge1xuICAgICAgICAgIHN0ck51bSArPSAnXicgKyB0aGlzLnVuaXRzW2ldLnBvd2VyO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudW5pdHNbaV0ucG93ZXIgPCAwKSB7XG4gICAgICAgIG5EZW4rKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobkRlbiA+IDApIHtcbiAgICAgIGZvciAodmFyIF9pNCA9IDA7IF9pNCA8IHRoaXMudW5pdHMubGVuZ3RoOyBfaTQrKykge1xuICAgICAgICBpZiAodGhpcy51bml0c1tfaTRdLnBvd2VyIDwgMCkge1xuICAgICAgICAgIGlmIChuTnVtID4gMCkge1xuICAgICAgICAgICAgc3RyRGVuICs9ICcgJyArIHRoaXMudW5pdHNbX2k0XS5wcmVmaXgubmFtZSArIHRoaXMudW5pdHNbX2k0XS51bml0Lm5hbWU7XG5cbiAgICAgICAgICAgIGlmIChNYXRoLmFicyh0aGlzLnVuaXRzW19pNF0ucG93ZXIgKyAxLjApID4gMWUtMTUpIHtcbiAgICAgICAgICAgICAgc3RyRGVuICs9ICdeJyArIC10aGlzLnVuaXRzW19pNF0ucG93ZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0ckRlbiArPSAnICcgKyB0aGlzLnVuaXRzW19pNF0ucHJlZml4Lm5hbWUgKyB0aGlzLnVuaXRzW19pNF0udW5pdC5uYW1lO1xuICAgICAgICAgICAgc3RyRGVuICs9ICdeJyArIHRoaXMudW5pdHNbX2k0XS5wb3dlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIFJlbW92ZSBsZWFkaW5nIFwiIFwiXG5cblxuICAgIHN0ck51bSA9IHN0ck51bS5zdWJzdHIoMSk7XG4gICAgc3RyRGVuID0gc3RyRGVuLnN1YnN0cigxKTsgLy8gQWRkIHBhcmFucyBmb3IgYmV0dGVyIGNvcHkvcGFzdGUgYmFjayBpbnRvIGV2YWx1YXRlLCBmb3IgZXhhbXBsZSwgb3IgZm9yIGJldHRlciBwcmV0dHkgcHJpbnQgZm9ybWF0dGluZ1xuXG4gICAgaWYgKG5OdW0gPiAxICYmIG5EZW4gPiAwKSB7XG4gICAgICBzdHJOdW0gPSAnKCcgKyBzdHJOdW0gKyAnKSc7XG4gICAgfVxuXG4gICAgaWYgKG5EZW4gPiAxICYmIG5OdW0gPiAwKSB7XG4gICAgICBzdHJEZW4gPSAnKCcgKyBzdHJEZW4gKyAnKSc7XG4gICAgfVxuXG4gICAgdmFyIHN0ciA9IHN0ck51bTtcblxuICAgIGlmIChuTnVtID4gMCAmJiBuRGVuID4gMCkge1xuICAgICAgc3RyICs9ICcgLyAnO1xuICAgIH1cblxuICAgIHN0ciArPSBzdHJEZW47XG4gICAgcmV0dXJuIHN0cjtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgVW5pdCwgd2l0aCBvcHRpb25hbCBmb3JtYXR0aW5nIG9wdGlvbnMuXG4gICAqIEBtZW1iZXJvZiBVbml0XG4gICAqIEBwYXJhbSB7T2JqZWN0IHwgbnVtYmVyIHwgRnVuY3Rpb259IFtvcHRpb25zXSAgRm9ybWF0dGluZyBvcHRpb25zLiBTZWVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWIvdXRpbHMvbnVtYmVyOmZvcm1hdCBmb3IgYVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uIG9mIHRoZSBhdmFpbGFibGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG5cbiAgVW5pdC5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAvLyBTaW1wbGZ5IHRoZSB1bml0IGxpc3QsIHVubGVzcyBpdCBpcyB2YWx1ZWxlc3Mgb3Igd2FzIGNyZWF0ZWQgZGlyZWN0bHkgaW4gdGhlXG4gICAgLy8gY29uc3RydWN0b3Igb3IgYXMgdGhlIHJlc3VsdCBvZiB0byBvciB0b1NJXG4gICAgdmFyIHNpbXAgPSB0aGlzLnNraXBBdXRvbWF0aWNTaW1wbGlmaWNhdGlvbiB8fCB0aGlzLnZhbHVlID09PSBudWxsID8gdGhpcy5jbG9uZSgpIDogdGhpcy5zaW1wbGlmeSgpOyAvLyBBcHBseSBzb21lIGN1c3RvbSBsb2dpYyBmb3IgaGFuZGxpbmcgVkEgYW5kIFZBUi4gVGhlIGdvYWwgaXMgdG8gZXhwcmVzcyB0aGUgdmFsdWUgb2YgdGhlIHVuaXQgYXMgYSByZWFsIHZhbHVlLCBpZiBwb3NzaWJsZS4gT3RoZXJ3aXNlLCB1c2UgYSByZWFsLXZhbHVlZCB1bml0IGluc3RlYWQgb2YgYSBjb21wbGV4LXZhbHVlZCBvbmUuXG5cbiAgICB2YXIgaXNJbWFnaW5hcnkgPSBmYWxzZTtcblxuICAgIGlmICh0eXBlb2Ygc2ltcC52YWx1ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgc2ltcC52YWx1ZSAhPT0gbnVsbCAmJiAoMCwgX2lzLmlzQ29tcGxleCkoc2ltcC52YWx1ZSkpIHtcbiAgICAgIC8vIFRPRE86IE1ha2UgdGhpcyBiZXR0ZXIsIGZvciBleGFtcGxlLCB1c2UgcmVsYXRpdmUgbWFnbml0dWRlIG9mIHJlIGFuZCBpbSByYXRoZXIgdGhhbiBhYnNvbHV0ZVxuICAgICAgaXNJbWFnaW5hcnkgPSBNYXRoLmFicyhzaW1wLnZhbHVlLnJlKSA8IDFlLTE0O1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgaW4gc2ltcC51bml0cykge1xuICAgICAgaWYgKHNpbXAudW5pdHNbaV0udW5pdCkge1xuICAgICAgICBpZiAoc2ltcC51bml0c1tpXS51bml0Lm5hbWUgPT09ICdWQScgJiYgaXNJbWFnaW5hcnkpIHtcbiAgICAgICAgICBzaW1wLnVuaXRzW2ldLnVuaXQgPSBVTklUUy5WQVI7XG4gICAgICAgIH0gZWxzZSBpZiAoc2ltcC51bml0c1tpXS51bml0Lm5hbWUgPT09ICdWQVInICYmICFpc0ltYWdpbmFyeSkge1xuICAgICAgICAgIHNpbXAudW5pdHNbaV0udW5pdCA9IFVOSVRTLlZBO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBOb3cgYXBwbHkgdGhlIGJlc3QgcHJlZml4XG4gICAgLy8gVW5pdHMgbXVzdCBoYXZlIG9ubHkgb25lIHVuaXQgYW5kIG5vdCBoYXZlIHRoZSBmaXhQcmVmaXggZmxhZyBzZXRcblxuXG4gICAgaWYgKHNpbXAudW5pdHMubGVuZ3RoID09PSAxICYmICFzaW1wLmZpeFByZWZpeCkge1xuICAgICAgLy8gVW5pdHMgbXVzdCBoYXZlIGludGVnZXIgcG93ZXJzLCBvdGhlcndpc2UgdGhlIHByZWZpeCB3aWxsIGNoYW5nZSB0aGVcbiAgICAgIC8vIG91dHB1dHRlZCB2YWx1ZSBieSBub3QtYW4taW50ZWdlci1wb3dlci1vZi10ZW5cbiAgICAgIGlmIChNYXRoLmFicyhzaW1wLnVuaXRzWzBdLnBvd2VyIC0gTWF0aC5yb3VuZChzaW1wLnVuaXRzWzBdLnBvd2VyKSkgPCAxZS0xNCkge1xuICAgICAgICAvLyBBcHBseSB0aGUgYmVzdCBwcmVmaXhcbiAgICAgICAgc2ltcC51bml0c1swXS5wcmVmaXggPSBzaW1wLl9iZXN0UHJlZml4KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHZhbHVlID0gc2ltcC5fZGVub3JtYWxpemUoc2ltcC52YWx1ZSk7XG5cbiAgICB2YXIgc3RyID0gc2ltcC52YWx1ZSAhPT0gbnVsbCA/IGZvcm1hdCh2YWx1ZSwgb3B0aW9ucyB8fCB7fSkgOiAnJztcbiAgICB2YXIgdW5pdFN0ciA9IHNpbXAuZm9ybWF0VW5pdHMoKTtcblxuICAgIGlmIChzaW1wLnZhbHVlICYmICgwLCBfaXMuaXNDb21wbGV4KShzaW1wLnZhbHVlKSkge1xuICAgICAgc3RyID0gJygnICsgc3RyICsgJyknOyAvLyBTdXJyb3VuZCBjb21wbGV4IHZhbHVlcyB3aXRoICggKSB0byBlbmFibGUgYmV0dGVyIHBhcnNpbmdcbiAgICB9XG5cbiAgICBpZiAodW5pdFN0ci5sZW5ndGggPiAwICYmIHN0ci5sZW5ndGggPiAwKSB7XG4gICAgICBzdHIgKz0gJyAnO1xuICAgIH1cblxuICAgIHN0ciArPSB1bml0U3RyO1xuICAgIHJldHVybiBzdHI7XG4gIH07XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGJlc3QgcHJlZml4IHVzaW5nIGN1cnJlbnQgdmFsdWUuXG4gICAqIEBtZW1iZXJvZiBVbml0XG4gICAqIEByZXR1cm5zIHtPYmplY3R9IHByZWZpeFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIFVuaXQucHJvdG90eXBlLl9iZXN0UHJlZml4ID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLnVuaXRzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gb25seSBjb21wdXRlIHRoZSBiZXN0IHByZWZpeCBmb3Igc2luZ2xlIHVuaXRzIHdpdGggaW50ZWdlciBwb3dlcnMsIGxpa2Uga2csIHNeMiwgTl4tMSwgYW5kIHNvIGZvcnRoIScpO1xuICAgIH1cblxuICAgIGlmIChNYXRoLmFicyh0aGlzLnVuaXRzWzBdLnBvd2VyIC0gTWF0aC5yb3VuZCh0aGlzLnVuaXRzWzBdLnBvd2VyKSkgPj0gMWUtMTQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2FuIG9ubHkgY29tcHV0ZSB0aGUgYmVzdCBwcmVmaXggZm9yIHNpbmdsZSB1bml0cyB3aXRoIGludGVnZXIgcG93ZXJzLCBsaWtlIGtnLCBzXjIsIE5eLTEsIGFuZCBzbyBmb3J0aCEnKTtcbiAgICB9IC8vIGZpbmQgdGhlIGJlc3QgcHJlZml4IHZhbHVlIChyZXN1bHRpbmcgaW4gdGhlIHZhbHVlIG9mIHdoaWNoXG4gICAgLy8gdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZSBsb2cxMCBpcyBjbG9zZXN0IHRvIHplcm8sXG4gICAgLy8gdGhvdWdoIHdpdGggYSBsaXR0bGUgb2Zmc2V0IG9mIDEuMiBmb3IgbmljZXIgdmFsdWVzOiB5b3UgZ2V0IGFcbiAgICAvLyBzZXF1ZW5jZSAxbW0gMTAwbW0gNTAwbW0gMC42bSAxbSAxMG0gMTAwbSA1MDBtIDAuNmttIDFrbSAuLi5cbiAgICAvLyBOb3RlOiB0aGUgdW5pdHMgdmFsdWUgY2FuIGJlIGFueSBudW1lcmljIHR5cGUsIGJ1dCB0byBmaW5kIHRoZSBiZXN0XG4gICAgLy8gcHJlZml4IGl0J3MgZW5vdWdoIHRvIHdvcmsgd2l0aCBsaW1pdGVkIHByZWNpc2lvbiBvZiBhIHJlZ3VsYXIgbnVtYmVyXG4gICAgLy8gVXBkYXRlOiB1c2luZyBtYXRoanMgYWJzIHNpbmNlIHdlIGFsc28gYWxsb3cgY29tcGxleCBudW1iZXJzXG5cblxuICAgIHZhciBhYnNWYWx1ZSA9IHRoaXMudmFsdWUgIT09IG51bGwgPyBhYnModGhpcy52YWx1ZSkgOiAwO1xuICAgIHZhciBhYnNVbml0VmFsdWUgPSBhYnModGhpcy51bml0c1swXS51bml0LnZhbHVlKTtcbiAgICB2YXIgYmVzdFByZWZpeCA9IHRoaXMudW5pdHNbMF0ucHJlZml4O1xuXG4gICAgaWYgKGFic1ZhbHVlID09PSAwKSB7XG4gICAgICByZXR1cm4gYmVzdFByZWZpeDtcbiAgICB9XG5cbiAgICB2YXIgcG93ZXIgPSB0aGlzLnVuaXRzWzBdLnBvd2VyO1xuICAgIHZhciBiZXN0RGlmZiA9IE1hdGgubG9nKGFic1ZhbHVlIC8gTWF0aC5wb3coYmVzdFByZWZpeC52YWx1ZSAqIGFic1VuaXRWYWx1ZSwgcG93ZXIpKSAvIE1hdGguTE4xMCAtIDEuMjtcbiAgICBpZiAoYmVzdERpZmYgPiAtMi4yMDAwMDEgJiYgYmVzdERpZmYgPCAxLjgwMDAwMSkgcmV0dXJuIGJlc3RQcmVmaXg7IC8vIEFsbG93IHRoZSBvcmlnaW5hbCBwcmVmaXhcblxuICAgIGJlc3REaWZmID0gTWF0aC5hYnMoYmVzdERpZmYpO1xuICAgIHZhciBwcmVmaXhlcyA9IHRoaXMudW5pdHNbMF0udW5pdC5wcmVmaXhlcztcblxuICAgIGZvciAodmFyIHAgaW4gcHJlZml4ZXMpIHtcbiAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkocHJlZml4ZXMsIHApKSB7XG4gICAgICAgIHZhciBwcmVmaXggPSBwcmVmaXhlc1twXTtcblxuICAgICAgICBpZiAocHJlZml4LnNjaWVudGlmaWMpIHtcbiAgICAgICAgICB2YXIgZGlmZiA9IE1hdGguYWJzKE1hdGgubG9nKGFic1ZhbHVlIC8gTWF0aC5wb3cocHJlZml4LnZhbHVlICogYWJzVW5pdFZhbHVlLCBwb3dlcikpIC8gTWF0aC5MTjEwIC0gMS4yKTtcblxuICAgICAgICAgIGlmIChkaWZmIDwgYmVzdERpZmYgfHwgZGlmZiA9PT0gYmVzdERpZmYgJiYgcHJlZml4Lm5hbWUubGVuZ3RoIDwgYmVzdFByZWZpeC5uYW1lLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gY2hvb3NlIHRoZSBwcmVmaXggd2l0aCB0aGUgc21hbGxlc3QgZGlmZiwgb3IgaWYgZXF1YWwsIGNob29zZSB0aGUgb25lXG4gICAgICAgICAgICAvLyB3aXRoIHRoZSBzaG9ydGVzdCBuYW1lIChjYW4gaGFwcGVuIHdpdGggU0hPUlRMT05HIGZvciBleGFtcGxlKVxuICAgICAgICAgICAgYmVzdFByZWZpeCA9IHByZWZpeDtcbiAgICAgICAgICAgIGJlc3REaWZmID0gZGlmZjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYmVzdFByZWZpeDtcbiAgfTtcbiAgLyoqXG4gICAqIFJldHVybnMgYW4gYXJyYXkgb2YgdW5pdHMgd2hvc2Ugc3VtIGlzIGVxdWFsIHRvIHRoaXMgdW5pdFxuICAgKiBAbWVtYmVyb2YgVW5pdFxuICAgKiBAcGFyYW0ge0FycmF5fSBbcGFydHNdIEFuIGFycmF5IG9mIHN0cmluZ3Mgb3IgdmFsdWVsZXNzIHVuaXRzLlxuICAgKlxuICAgKiAgIEV4YW1wbGU6XG4gICAqXG4gICAqICAgY29uc3QgdSA9IG5ldyBVbml0KDEsICdtJylcbiAgICogICB1LnNwbGl0VW5pdChbJ2ZlZXQnLCAnaW5jaCddKVxuICAgKiAgICAgWyAzIGZlZXQsIDMuMzcwMDc4NzQwMTU3NSBpbmNoIF1cbiAgICpcbiAgICogQHJldHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIHVuaXRzLlxuICAgKi9cblxuXG4gIFVuaXQucHJvdG90eXBlLnNwbGl0VW5pdCA9IGZ1bmN0aW9uIChwYXJ0cykge1xuICAgIHZhciB4ID0gdGhpcy5jbG9uZSgpO1xuICAgIHZhciByZXQgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIC8vIENvbnZlcnQgeCB0byB0aGUgcmVxdWVzdGVkIHVuaXRcbiAgICAgIHggPSB4LnRvKHBhcnRzW2ldKTtcbiAgICAgIGlmIChpID09PSBwYXJ0cy5sZW5ndGggLSAxKSBicmVhazsgLy8gR2V0IHRoZSBudW1lcmljIHZhbHVlIG9mIHRoaXMgdW5pdFxuXG4gICAgICB2YXIgeE51bWVyaWMgPSB4LnRvTnVtZXJpYygpOyAvLyBDaGVjayB0byBzZWUgaWYgeE51bWVyaWMgaXMgbmVhcmx5IGVxdWFsIHRvIGFuIGludGVnZXIsXG4gICAgICAvLyBzaW5jZSBmaXggY2FuIGluY29ycmVjdGx5IHJvdW5kIGRvd24gaWYgdGhlcmUgaXMgcm91bmQtb2ZmIGVycm9yXG5cbiAgICAgIHZhciB4Um91bmRlZCA9IHJvdW5kKHhOdW1lcmljKTtcbiAgICAgIHZhciB4Rml4ZWQgPSB2b2lkIDA7XG4gICAgICB2YXIgaXNOZWFybHlFcXVhbCA9IGVxdWFsKHhSb3VuZGVkLCB4TnVtZXJpYyk7XG5cbiAgICAgIGlmIChpc05lYXJseUVxdWFsKSB7XG4gICAgICAgIHhGaXhlZCA9IHhSb3VuZGVkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgeEZpeGVkID0gZml4KHgudG9OdW1lcmljKCkpO1xuICAgICAgfVxuXG4gICAgICB2YXIgeSA9IG5ldyBVbml0KHhGaXhlZCwgcGFydHNbaV0udG9TdHJpbmcoKSk7XG4gICAgICByZXQucHVzaCh5KTtcbiAgICAgIHggPSBzdWJ0cmFjdCh4LCB5KTtcbiAgICB9IC8vIFRoaXMgbGl0dGxlIGJpdCBmaXhlcyBhIGJ1ZyB3aGVyZSB0aGUgcmVtYWluZGVyIHNob3VsZCBiZSAwIGJ1dCBpcyBhIGxpdHRsZSBiaXQgb2ZmLlxuICAgIC8vIEJ1dCBpbnN0ZWFkIG9mIGNvbXBhcmluZyB4LCB0aGUgcmVtYWluZGVyLCB3aXRoIHplcm8tLXdlIHdpbGwgY29tcGFyZSB0aGUgc3VtIG9mXG4gICAgLy8gYWxsIHRoZSBwYXJ0cyBzbyBmYXIgd2l0aCB0aGUgb3JpZ2luYWwgdmFsdWUuIElmIHRoZXkgYXJlIG5lYXJseSBlcXVhbCxcbiAgICAvLyB3ZSBzZXQgdGhlIHJlbWFpbmRlciB0byAwLlxuXG5cbiAgICB2YXIgdGVzdFN1bSA9IDA7XG5cbiAgICBmb3IgKHZhciBfaTUgPSAwOyBfaTUgPCByZXQubGVuZ3RoOyBfaTUrKykge1xuICAgICAgdGVzdFN1bSA9IGFkZFNjYWxhcih0ZXN0U3VtLCByZXRbX2k1XS52YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKGVxdWFsKHRlc3RTdW0sIHRoaXMudmFsdWUpKSB7XG4gICAgICB4LnZhbHVlID0gMDtcbiAgICB9XG5cbiAgICByZXQucHVzaCh4KTtcbiAgICByZXR1cm4gcmV0O1xuICB9O1xuXG4gIHZhciBQUkVGSVhFUyA9IHtcbiAgICBOT05FOiB7XG4gICAgICAnJzoge1xuICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH1cbiAgICB9LFxuICAgIFNIT1JUOiB7XG4gICAgICAnJzoge1xuICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBkYToge1xuICAgICAgICBuYW1lOiAnZGEnLFxuICAgICAgICB2YWx1ZTogMWUxLFxuICAgICAgICBzY2llbnRpZmljOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIGg6IHtcbiAgICAgICAgbmFtZTogJ2gnLFxuICAgICAgICB2YWx1ZTogMWUyLFxuICAgICAgICBzY2llbnRpZmljOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIGs6IHtcbiAgICAgICAgbmFtZTogJ2snLFxuICAgICAgICB2YWx1ZTogMWUzLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgTToge1xuICAgICAgICBuYW1lOiAnTScsXG4gICAgICAgIHZhbHVlOiAxZTYsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBHOiB7XG4gICAgICAgIG5hbWU6ICdHJyxcbiAgICAgICAgdmFsdWU6IDFlOSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIFQ6IHtcbiAgICAgICAgbmFtZTogJ1QnLFxuICAgICAgICB2YWx1ZTogMWUxMixcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIFA6IHtcbiAgICAgICAgbmFtZTogJ1AnLFxuICAgICAgICB2YWx1ZTogMWUxNSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIEU6IHtcbiAgICAgICAgbmFtZTogJ0UnLFxuICAgICAgICB2YWx1ZTogMWUxOCxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIFo6IHtcbiAgICAgICAgbmFtZTogJ1onLFxuICAgICAgICB2YWx1ZTogMWUyMSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIFk6IHtcbiAgICAgICAgbmFtZTogJ1knLFxuICAgICAgICB2YWx1ZTogMWUyNCxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGQ6IHtcbiAgICAgICAgbmFtZTogJ2QnLFxuICAgICAgICB2YWx1ZTogMWUtMSxcbiAgICAgICAgc2NpZW50aWZpYzogZmFsc2VcbiAgICAgIH0sXG4gICAgICBjOiB7XG4gICAgICAgIG5hbWU6ICdjJyxcbiAgICAgICAgdmFsdWU6IDFlLTIsXG4gICAgICAgIHNjaWVudGlmaWM6IGZhbHNlXG4gICAgICB9LFxuICAgICAgbToge1xuICAgICAgICBuYW1lOiAnbScsXG4gICAgICAgIHZhbHVlOiAxZS0zLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgdToge1xuICAgICAgICBuYW1lOiAndScsXG4gICAgICAgIHZhbHVlOiAxZS02LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgbjoge1xuICAgICAgICBuYW1lOiAnbicsXG4gICAgICAgIHZhbHVlOiAxZS05LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgcDoge1xuICAgICAgICBuYW1lOiAncCcsXG4gICAgICAgIHZhbHVlOiAxZS0xMixcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGY6IHtcbiAgICAgICAgbmFtZTogJ2YnLFxuICAgICAgICB2YWx1ZTogMWUtMTUsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBhOiB7XG4gICAgICAgIG5hbWU6ICdhJyxcbiAgICAgICAgdmFsdWU6IDFlLTE4LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgejoge1xuICAgICAgICBuYW1lOiAneicsXG4gICAgICAgIHZhbHVlOiAxZS0yMSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHk6IHtcbiAgICAgICAgbmFtZTogJ3knLFxuICAgICAgICB2YWx1ZTogMWUtMjQsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH1cbiAgICB9LFxuICAgIExPTkc6IHtcbiAgICAgICcnOiB7XG4gICAgICAgIG5hbWU6ICcnLFxuICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGRlY2E6IHtcbiAgICAgICAgbmFtZTogJ2RlY2EnLFxuICAgICAgICB2YWx1ZTogMWUxLFxuICAgICAgICBzY2llbnRpZmljOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIGhlY3RvOiB7XG4gICAgICAgIG5hbWU6ICdoZWN0bycsXG4gICAgICAgIHZhbHVlOiAxZTIsXG4gICAgICAgIHNjaWVudGlmaWM6IGZhbHNlXG4gICAgICB9LFxuICAgICAga2lsbzoge1xuICAgICAgICBuYW1lOiAna2lsbycsXG4gICAgICAgIHZhbHVlOiAxZTMsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBtZWdhOiB7XG4gICAgICAgIG5hbWU6ICdtZWdhJyxcbiAgICAgICAgdmFsdWU6IDFlNixcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGdpZ2E6IHtcbiAgICAgICAgbmFtZTogJ2dpZ2EnLFxuICAgICAgICB2YWx1ZTogMWU5LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgdGVyYToge1xuICAgICAgICBuYW1lOiAndGVyYScsXG4gICAgICAgIHZhbHVlOiAxZTEyLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgcGV0YToge1xuICAgICAgICBuYW1lOiAncGV0YScsXG4gICAgICAgIHZhbHVlOiAxZTE1LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgZXhhOiB7XG4gICAgICAgIG5hbWU6ICdleGEnLFxuICAgICAgICB2YWx1ZTogMWUxOCxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHpldHRhOiB7XG4gICAgICAgIG5hbWU6ICd6ZXR0YScsXG4gICAgICAgIHZhbHVlOiAxZTIxLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgeW90dGE6IHtcbiAgICAgICAgbmFtZTogJ3lvdHRhJyxcbiAgICAgICAgdmFsdWU6IDFlMjQsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBkZWNpOiB7XG4gICAgICAgIG5hbWU6ICdkZWNpJyxcbiAgICAgICAgdmFsdWU6IDFlLTEsXG4gICAgICAgIHNjaWVudGlmaWM6IGZhbHNlXG4gICAgICB9LFxuICAgICAgY2VudGk6IHtcbiAgICAgICAgbmFtZTogJ2NlbnRpJyxcbiAgICAgICAgdmFsdWU6IDFlLTIsXG4gICAgICAgIHNjaWVudGlmaWM6IGZhbHNlXG4gICAgICB9LFxuICAgICAgbWlsbGk6IHtcbiAgICAgICAgbmFtZTogJ21pbGxpJyxcbiAgICAgICAgdmFsdWU6IDFlLTMsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBtaWNybzoge1xuICAgICAgICBuYW1lOiAnbWljcm8nLFxuICAgICAgICB2YWx1ZTogMWUtNixcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIG5hbm86IHtcbiAgICAgICAgbmFtZTogJ25hbm8nLFxuICAgICAgICB2YWx1ZTogMWUtOSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHBpY286IHtcbiAgICAgICAgbmFtZTogJ3BpY28nLFxuICAgICAgICB2YWx1ZTogMWUtMTIsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBmZW10bzoge1xuICAgICAgICBuYW1lOiAnZmVtdG8nLFxuICAgICAgICB2YWx1ZTogMWUtMTUsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBhdHRvOiB7XG4gICAgICAgIG5hbWU6ICdhdHRvJyxcbiAgICAgICAgdmFsdWU6IDFlLTE4LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgemVwdG86IHtcbiAgICAgICAgbmFtZTogJ3plcHRvJyxcbiAgICAgICAgdmFsdWU6IDFlLTIxLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgeW9jdG86IHtcbiAgICAgICAgbmFtZTogJ3lvY3RvJyxcbiAgICAgICAgdmFsdWU6IDFlLTI0LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9XG4gICAgfSxcbiAgICBTUVVBUkVEOiB7XG4gICAgICAnJzoge1xuICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBkYToge1xuICAgICAgICBuYW1lOiAnZGEnLFxuICAgICAgICB2YWx1ZTogMWUyLFxuICAgICAgICBzY2llbnRpZmljOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIGg6IHtcbiAgICAgICAgbmFtZTogJ2gnLFxuICAgICAgICB2YWx1ZTogMWU0LFxuICAgICAgICBzY2llbnRpZmljOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIGs6IHtcbiAgICAgICAgbmFtZTogJ2snLFxuICAgICAgICB2YWx1ZTogMWU2LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgTToge1xuICAgICAgICBuYW1lOiAnTScsXG4gICAgICAgIHZhbHVlOiAxZTEyLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgRzoge1xuICAgICAgICBuYW1lOiAnRycsXG4gICAgICAgIHZhbHVlOiAxZTE4LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgVDoge1xuICAgICAgICBuYW1lOiAnVCcsXG4gICAgICAgIHZhbHVlOiAxZTI0LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgUDoge1xuICAgICAgICBuYW1lOiAnUCcsXG4gICAgICAgIHZhbHVlOiAxZTMwLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgRToge1xuICAgICAgICBuYW1lOiAnRScsXG4gICAgICAgIHZhbHVlOiAxZTM2LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgWjoge1xuICAgICAgICBuYW1lOiAnWicsXG4gICAgICAgIHZhbHVlOiAxZTQyLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgWToge1xuICAgICAgICBuYW1lOiAnWScsXG4gICAgICAgIHZhbHVlOiAxZTQ4LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgZDoge1xuICAgICAgICBuYW1lOiAnZCcsXG4gICAgICAgIHZhbHVlOiAxZS0yLFxuICAgICAgICBzY2llbnRpZmljOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIGM6IHtcbiAgICAgICAgbmFtZTogJ2MnLFxuICAgICAgICB2YWx1ZTogMWUtNCxcbiAgICAgICAgc2NpZW50aWZpYzogZmFsc2VcbiAgICAgIH0sXG4gICAgICBtOiB7XG4gICAgICAgIG5hbWU6ICdtJyxcbiAgICAgICAgdmFsdWU6IDFlLTYsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICB1OiB7XG4gICAgICAgIG5hbWU6ICd1JyxcbiAgICAgICAgdmFsdWU6IDFlLTEyLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgbjoge1xuICAgICAgICBuYW1lOiAnbicsXG4gICAgICAgIHZhbHVlOiAxZS0xOCxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHA6IHtcbiAgICAgICAgbmFtZTogJ3AnLFxuICAgICAgICB2YWx1ZTogMWUtMjQsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBmOiB7XG4gICAgICAgIG5hbWU6ICdmJyxcbiAgICAgICAgdmFsdWU6IDFlLTMwLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgYToge1xuICAgICAgICBuYW1lOiAnYScsXG4gICAgICAgIHZhbHVlOiAxZS0zNixcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHo6IHtcbiAgICAgICAgbmFtZTogJ3onLFxuICAgICAgICB2YWx1ZTogMWUtNDIsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICB5OiB7XG4gICAgICAgIG5hbWU6ICd5JyxcbiAgICAgICAgdmFsdWU6IDFlLTQ4LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9XG4gICAgfSxcbiAgICBDVUJJQzoge1xuICAgICAgJyc6IHtcbiAgICAgICAgbmFtZTogJycsXG4gICAgICAgIHZhbHVlOiAxLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgZGE6IHtcbiAgICAgICAgbmFtZTogJ2RhJyxcbiAgICAgICAgdmFsdWU6IDFlMyxcbiAgICAgICAgc2NpZW50aWZpYzogZmFsc2VcbiAgICAgIH0sXG4gICAgICBoOiB7XG4gICAgICAgIG5hbWU6ICdoJyxcbiAgICAgICAgdmFsdWU6IDFlNixcbiAgICAgICAgc2NpZW50aWZpYzogZmFsc2VcbiAgICAgIH0sXG4gICAgICBrOiB7XG4gICAgICAgIG5hbWU6ICdrJyxcbiAgICAgICAgdmFsdWU6IDFlOSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIE06IHtcbiAgICAgICAgbmFtZTogJ00nLFxuICAgICAgICB2YWx1ZTogMWUxOCxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIEc6IHtcbiAgICAgICAgbmFtZTogJ0cnLFxuICAgICAgICB2YWx1ZTogMWUyNyxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIFQ6IHtcbiAgICAgICAgbmFtZTogJ1QnLFxuICAgICAgICB2YWx1ZTogMWUzNixcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIFA6IHtcbiAgICAgICAgbmFtZTogJ1AnLFxuICAgICAgICB2YWx1ZTogMWU0NSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIEU6IHtcbiAgICAgICAgbmFtZTogJ0UnLFxuICAgICAgICB2YWx1ZTogMWU1NCxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIFo6IHtcbiAgICAgICAgbmFtZTogJ1onLFxuICAgICAgICB2YWx1ZTogMWU2MyxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIFk6IHtcbiAgICAgICAgbmFtZTogJ1knLFxuICAgICAgICB2YWx1ZTogMWU3MixcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGQ6IHtcbiAgICAgICAgbmFtZTogJ2QnLFxuICAgICAgICB2YWx1ZTogMWUtMyxcbiAgICAgICAgc2NpZW50aWZpYzogZmFsc2VcbiAgICAgIH0sXG4gICAgICBjOiB7XG4gICAgICAgIG5hbWU6ICdjJyxcbiAgICAgICAgdmFsdWU6IDFlLTYsXG4gICAgICAgIHNjaWVudGlmaWM6IGZhbHNlXG4gICAgICB9LFxuICAgICAgbToge1xuICAgICAgICBuYW1lOiAnbScsXG4gICAgICAgIHZhbHVlOiAxZS05LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgdToge1xuICAgICAgICBuYW1lOiAndScsXG4gICAgICAgIHZhbHVlOiAxZS0xOCxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIG46IHtcbiAgICAgICAgbmFtZTogJ24nLFxuICAgICAgICB2YWx1ZTogMWUtMjcsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBwOiB7XG4gICAgICAgIG5hbWU6ICdwJyxcbiAgICAgICAgdmFsdWU6IDFlLTM2LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgZjoge1xuICAgICAgICBuYW1lOiAnZicsXG4gICAgICAgIHZhbHVlOiAxZS00NSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGE6IHtcbiAgICAgICAgbmFtZTogJ2EnLFxuICAgICAgICB2YWx1ZTogMWUtNTQsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICB6OiB7XG4gICAgICAgIG5hbWU6ICd6JyxcbiAgICAgICAgdmFsdWU6IDFlLTYzLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgeToge1xuICAgICAgICBuYW1lOiAneScsXG4gICAgICAgIHZhbHVlOiAxZS03MixcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfVxuICAgIH0sXG4gICAgQklOQVJZX1NIT1JUX1NJOiB7XG4gICAgICAnJzoge1xuICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBrOiB7XG4gICAgICAgIG5hbWU6ICdrJyxcbiAgICAgICAgdmFsdWU6IDFlMyxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIE06IHtcbiAgICAgICAgbmFtZTogJ00nLFxuICAgICAgICB2YWx1ZTogMWU2LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgRzoge1xuICAgICAgICBuYW1lOiAnRycsXG4gICAgICAgIHZhbHVlOiAxZTksXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBUOiB7XG4gICAgICAgIG5hbWU6ICdUJyxcbiAgICAgICAgdmFsdWU6IDFlMTIsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBQOiB7XG4gICAgICAgIG5hbWU6ICdQJyxcbiAgICAgICAgdmFsdWU6IDFlMTUsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBFOiB7XG4gICAgICAgIG5hbWU6ICdFJyxcbiAgICAgICAgdmFsdWU6IDFlMTgsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBaOiB7XG4gICAgICAgIG5hbWU6ICdaJyxcbiAgICAgICAgdmFsdWU6IDFlMjEsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBZOiB7XG4gICAgICAgIG5hbWU6ICdZJyxcbiAgICAgICAgdmFsdWU6IDFlMjQsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH1cbiAgICB9LFxuICAgIEJJTkFSWV9TSE9SVF9JRUM6IHtcbiAgICAgICcnOiB7XG4gICAgICAgIG5hbWU6ICcnLFxuICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIEtpOiB7XG4gICAgICAgIG5hbWU6ICdLaScsXG4gICAgICAgIHZhbHVlOiAxMDI0LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgTWk6IHtcbiAgICAgICAgbmFtZTogJ01pJyxcbiAgICAgICAgdmFsdWU6IE1hdGgucG93KDEwMjQsIDIpLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgR2k6IHtcbiAgICAgICAgbmFtZTogJ0dpJyxcbiAgICAgICAgdmFsdWU6IE1hdGgucG93KDEwMjQsIDMpLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgVGk6IHtcbiAgICAgICAgbmFtZTogJ1RpJyxcbiAgICAgICAgdmFsdWU6IE1hdGgucG93KDEwMjQsIDQpLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgUGk6IHtcbiAgICAgICAgbmFtZTogJ1BpJyxcbiAgICAgICAgdmFsdWU6IE1hdGgucG93KDEwMjQsIDUpLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgRWk6IHtcbiAgICAgICAgbmFtZTogJ0VpJyxcbiAgICAgICAgdmFsdWU6IE1hdGgucG93KDEwMjQsIDYpLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgWmk6IHtcbiAgICAgICAgbmFtZTogJ1ppJyxcbiAgICAgICAgdmFsdWU6IE1hdGgucG93KDEwMjQsIDcpLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgWWk6IHtcbiAgICAgICAgbmFtZTogJ1lpJyxcbiAgICAgICAgdmFsdWU6IE1hdGgucG93KDEwMjQsIDgpLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9XG4gICAgfSxcbiAgICBCSU5BUllfTE9OR19TSToge1xuICAgICAgJyc6IHtcbiAgICAgICAgbmFtZTogJycsXG4gICAgICAgIHZhbHVlOiAxLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAga2lsbzoge1xuICAgICAgICBuYW1lOiAna2lsbycsXG4gICAgICAgIHZhbHVlOiAxZTMsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBtZWdhOiB7XG4gICAgICAgIG5hbWU6ICdtZWdhJyxcbiAgICAgICAgdmFsdWU6IDFlNixcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGdpZ2E6IHtcbiAgICAgICAgbmFtZTogJ2dpZ2EnLFxuICAgICAgICB2YWx1ZTogMWU5LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgdGVyYToge1xuICAgICAgICBuYW1lOiAndGVyYScsXG4gICAgICAgIHZhbHVlOiAxZTEyLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgcGV0YToge1xuICAgICAgICBuYW1lOiAncGV0YScsXG4gICAgICAgIHZhbHVlOiAxZTE1LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgZXhhOiB7XG4gICAgICAgIG5hbWU6ICdleGEnLFxuICAgICAgICB2YWx1ZTogMWUxOCxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHpldHRhOiB7XG4gICAgICAgIG5hbWU6ICd6ZXR0YScsXG4gICAgICAgIHZhbHVlOiAxZTIxLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgeW90dGE6IHtcbiAgICAgICAgbmFtZTogJ3lvdHRhJyxcbiAgICAgICAgdmFsdWU6IDFlMjQsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH1cbiAgICB9LFxuICAgIEJJTkFSWV9MT05HX0lFQzoge1xuICAgICAgJyc6IHtcbiAgICAgICAgbmFtZTogJycsXG4gICAgICAgIHZhbHVlOiAxLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAga2liaToge1xuICAgICAgICBuYW1lOiAna2liaScsXG4gICAgICAgIHZhbHVlOiAxMDI0LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgbWViaToge1xuICAgICAgICBuYW1lOiAnbWViaScsXG4gICAgICAgIHZhbHVlOiBNYXRoLnBvdygxMDI0LCAyKSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGdpYmk6IHtcbiAgICAgICAgbmFtZTogJ2dpYmknLFxuICAgICAgICB2YWx1ZTogTWF0aC5wb3coMTAyNCwgMyksXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICB0ZWJpOiB7XG4gICAgICAgIG5hbWU6ICd0ZWJpJyxcbiAgICAgICAgdmFsdWU6IE1hdGgucG93KDEwMjQsIDQpLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgcGViaToge1xuICAgICAgICBuYW1lOiAncGViaScsXG4gICAgICAgIHZhbHVlOiBNYXRoLnBvdygxMDI0LCA1KSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGV4aToge1xuICAgICAgICBuYW1lOiAnZXhpJyxcbiAgICAgICAgdmFsdWU6IE1hdGgucG93KDEwMjQsIDYpLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgemViaToge1xuICAgICAgICBuYW1lOiAnemViaScsXG4gICAgICAgIHZhbHVlOiBNYXRoLnBvdygxMDI0LCA3KSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHlvYmk6IHtcbiAgICAgICAgbmFtZTogJ3lvYmknLFxuICAgICAgICB2YWx1ZTogTWF0aC5wb3coMTAyNCwgOCksXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH1cbiAgICB9LFxuICAgIEJUVToge1xuICAgICAgJyc6IHtcbiAgICAgICAgbmFtZTogJycsXG4gICAgICAgIHZhbHVlOiAxLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgTU06IHtcbiAgICAgICAgbmFtZTogJ01NJyxcbiAgICAgICAgdmFsdWU6IDFlNixcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgUFJFRklYRVMuU0hPUlRMT05HID0gX2V4dGVuZHMoe30sIFBSRUZJWEVTLlNIT1JULCBQUkVGSVhFUy5MT05HKTtcbiAgUFJFRklYRVMuQklOQVJZX1NIT1JUID0gX2V4dGVuZHMoe30sIFBSRUZJWEVTLkJJTkFSWV9TSE9SVF9TSSwgUFJFRklYRVMuQklOQVJZX1NIT1JUX0lFQyk7XG4gIFBSRUZJWEVTLkJJTkFSWV9MT05HID0gX2V4dGVuZHMoe30sIFBSRUZJWEVTLkJJTkFSWV9MT05HX1NJLCBQUkVGSVhFUy5CSU5BUllfTE9OR19JRUMpO1xuICAvKiBJbnRlcm5hbGx5LCBlYWNoIHVuaXQgaXMgcmVwcmVzZW50ZWQgYnkgYSB2YWx1ZSBhbmQgYSBkaW1lbnNpb24gYXJyYXkuIFRoZSBlbGVtZW50cyBvZiB0aGUgZGltZW5zaW9ucyBhcnJheSBoYXZlIHRoZSBmb2xsb3dpbmcgbWVhbmluZzpcbiAgICogSW5kZXggIERpbWVuc2lvblxuICAgKiAtLS0tLSAgLS0tLS0tLS0tXG4gICAqICAgMCAgICBMZW5ndGhcbiAgICogICAxICAgIE1hc3NcbiAgICogICAyICAgIFRpbWVcbiAgICogICAzICAgIEN1cnJlbnRcbiAgICogICA0ICAgIFRlbXBlcmF0dXJlXG4gICAqICAgNSAgICBMdW1pbm91cyBpbnRlbnNpdHlcbiAgICogICA2ICAgIEFtb3VudCBvZiBzdWJzdGFuY2VcbiAgICogICA3ICAgIEFuZ2xlXG4gICAqICAgOCAgICBCaXQgKGRpZ2l0YWwpXG4gICAqIEZvciBleGFtcGxlLCB0aGUgdW5pdCBcIjI5OC4xNSBLXCIgaXMgYSBwdXJlIHRlbXBlcmF0dXJlIGFuZCB3b3VsZCBoYXZlIGEgdmFsdWUgb2YgMjk4LjE1IGFuZCBhIGRpbWVuc2lvbiBhcnJheSBvZiBbMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMF0uIFRoZSB1bml0IFwiMSBjYWwgLyAoZ20gwrBDKVwiIGNhbiBiZSB3cml0dGVuIGluIHRlcm1zIG9mIHRoZSA5IGZ1bmRhbWVudGFsIGRpbWVuc2lvbnMgYXMgW2xlbmd0aF4yXSAvIChbdGltZV4yXSAqIFt0ZW1wZXJhdHVyZV0pLCBhbmQgd291bGQgYSB2YWx1ZSBvZiAoYWZ0ZXIgY29udmVyc2lvbiB0byBTSSkgNDE4NC4wIGFuZCBhIGRpbWVuc2lvbnMgYXJyYXkgb2YgWzIsIDAsIC0yLCAwLCAtMSwgMCwgMCwgMCwgMF0uXG4gICAqXG4gICAqL1xuXG4gIHZhciBCQVNFX0RJTUVOU0lPTlMgPSBbJ01BU1MnLCAnTEVOR1RIJywgJ1RJTUUnLCAnQ1VSUkVOVCcsICdURU1QRVJBVFVSRScsICdMVU1JTk9VU19JTlRFTlNJVFknLCAnQU1PVU5UX09GX1NVQlNUQU5DRScsICdBTkdMRScsICdCSVQnXTtcbiAgdmFyIEJBU0VfVU5JVFMgPSB7XG4gICAgTk9ORToge1xuICAgICAgZGltZW5zaW9uczogWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdXG4gICAgfSxcbiAgICBNQVNTOiB7XG4gICAgICBkaW1lbnNpb25zOiBbMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF1cbiAgICB9LFxuICAgIExFTkdUSDoge1xuICAgICAgZGltZW5zaW9uczogWzAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDBdXG4gICAgfSxcbiAgICBUSU1FOiB7XG4gICAgICBkaW1lbnNpb25zOiBbMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMF1cbiAgICB9LFxuICAgIENVUlJFTlQ6IHtcbiAgICAgIGRpbWVuc2lvbnM6IFswLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwXVxuICAgIH0sXG4gICAgVEVNUEVSQVRVUkU6IHtcbiAgICAgIGRpbWVuc2lvbnM6IFswLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwXVxuICAgIH0sXG4gICAgTFVNSU5PVVNfSU5URU5TSVRZOiB7XG4gICAgICBkaW1lbnNpb25zOiBbMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMF1cbiAgICB9LFxuICAgIEFNT1VOVF9PRl9TVUJTVEFOQ0U6IHtcbiAgICAgIGRpbWVuc2lvbnM6IFswLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwXVxuICAgIH0sXG4gICAgRk9SQ0U6IHtcbiAgICAgIGRpbWVuc2lvbnM6IFsxLCAxLCAtMiwgMCwgMCwgMCwgMCwgMCwgMF1cbiAgICB9LFxuICAgIFNVUkZBQ0U6IHtcbiAgICAgIGRpbWVuc2lvbnM6IFswLCAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwXVxuICAgIH0sXG4gICAgVk9MVU1FOiB7XG4gICAgICBkaW1lbnNpb25zOiBbMCwgMywgMCwgMCwgMCwgMCwgMCwgMCwgMF1cbiAgICB9LFxuICAgIEVORVJHWToge1xuICAgICAgZGltZW5zaW9uczogWzEsIDIsIC0yLCAwLCAwLCAwLCAwLCAwLCAwXVxuICAgIH0sXG4gICAgUE9XRVI6IHtcbiAgICAgIGRpbWVuc2lvbnM6IFsxLCAyLCAtMywgMCwgMCwgMCwgMCwgMCwgMF1cbiAgICB9LFxuICAgIFBSRVNTVVJFOiB7XG4gICAgICBkaW1lbnNpb25zOiBbMSwgLTEsIC0yLCAwLCAwLCAwLCAwLCAwLCAwXVxuICAgIH0sXG4gICAgRUxFQ1RSSUNfQ0hBUkdFOiB7XG4gICAgICBkaW1lbnNpb25zOiBbMCwgMCwgMSwgMSwgMCwgMCwgMCwgMCwgMF1cbiAgICB9LFxuICAgIEVMRUNUUklDX0NBUEFDSVRBTkNFOiB7XG4gICAgICBkaW1lbnNpb25zOiBbLTEsIC0yLCA0LCAyLCAwLCAwLCAwLCAwLCAwXVxuICAgIH0sXG4gICAgRUxFQ1RSSUNfUE9URU5USUFMOiB7XG4gICAgICBkaW1lbnNpb25zOiBbMSwgMiwgLTMsIC0xLCAwLCAwLCAwLCAwLCAwXVxuICAgIH0sXG4gICAgRUxFQ1RSSUNfUkVTSVNUQU5DRToge1xuICAgICAgZGltZW5zaW9uczogWzEsIDIsIC0zLCAtMiwgMCwgMCwgMCwgMCwgMF1cbiAgICB9LFxuICAgIEVMRUNUUklDX0lORFVDVEFOQ0U6IHtcbiAgICAgIGRpbWVuc2lvbnM6IFsxLCAyLCAtMiwgLTIsIDAsIDAsIDAsIDAsIDBdXG4gICAgfSxcbiAgICBFTEVDVFJJQ19DT05EVUNUQU5DRToge1xuICAgICAgZGltZW5zaW9uczogWy0xLCAtMiwgMywgMiwgMCwgMCwgMCwgMCwgMF1cbiAgICB9LFxuICAgIE1BR05FVElDX0ZMVVg6IHtcbiAgICAgIGRpbWVuc2lvbnM6IFsxLCAyLCAtMiwgLTEsIDAsIDAsIDAsIDAsIDBdXG4gICAgfSxcbiAgICBNQUdORVRJQ19GTFVYX0RFTlNJVFk6IHtcbiAgICAgIGRpbWVuc2lvbnM6IFsxLCAwLCAtMiwgLTEsIDAsIDAsIDAsIDAsIDBdXG4gICAgfSxcbiAgICBGUkVRVUVOQ1k6IHtcbiAgICAgIGRpbWVuc2lvbnM6IFswLCAwLCAtMSwgMCwgMCwgMCwgMCwgMCwgMF1cbiAgICB9LFxuICAgIEFOR0xFOiB7XG4gICAgICBkaW1lbnNpb25zOiBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMF1cbiAgICB9LFxuICAgIEJJVDoge1xuICAgICAgZGltZW5zaW9uczogWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDFdXG4gICAgfVxuICB9O1xuXG4gIGZvciAodmFyIGtleSBpbiBCQVNFX1VOSVRTKSB7XG4gICAgQkFTRV9VTklUU1trZXldLmtleSA9IGtleTtcbiAgfVxuXG4gIHZhciBCQVNFX1VOSVRfTk9ORSA9IHt9O1xuICB2YXIgVU5JVF9OT05FID0ge1xuICAgIG5hbWU6ICcnLFxuICAgIGJhc2U6IEJBU0VfVU5JVF9OT05FLFxuICAgIHZhbHVlOiAxLFxuICAgIG9mZnNldDogMCxcbiAgICBkaW1lbnNpb25zOiBCQVNFX0RJTUVOU0lPTlMubWFwKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9KVxuICB9O1xuICB2YXIgVU5JVFMgPSB7XG4gICAgLy8gbGVuZ3RoXG4gICAgbWV0ZXI6IHtcbiAgICAgIG5hbWU6ICdtZXRlcicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkxFTkdUSCxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGluY2g6IHtcbiAgICAgIG5hbWU6ICdpbmNoJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTEVOR1RILFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMjU0LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBmb290OiB7XG4gICAgICBuYW1lOiAnZm9vdCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkxFTkdUSCxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuMzA0OCxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgeWFyZDoge1xuICAgICAgbmFtZTogJ3lhcmQnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5MRU5HVEgsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjkxNDQsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIG1pbGU6IHtcbiAgICAgIG5hbWU6ICdtaWxlJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTEVOR1RILFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMTYwOS4zNDQsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGxpbms6IHtcbiAgICAgIG5hbWU6ICdsaW5rJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTEVOR1RILFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4yMDExNjgsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIHJvZDoge1xuICAgICAgbmFtZTogJ3JvZCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkxFTkdUSCxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDUuMDI5MixcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgY2hhaW46IHtcbiAgICAgIG5hbWU6ICdjaGFpbicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkxFTkdUSCxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDIwLjExNjgsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGFuZ3N0cm9tOiB7XG4gICAgICBuYW1lOiAnYW5nc3Ryb20nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5MRU5HVEgsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAxZS0xMCxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgbToge1xuICAgICAgbmFtZTogJ20nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5MRU5HVEgsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgXCJpblwiOiB7XG4gICAgICBuYW1lOiAnaW4nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5MRU5HVEgsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjAyNTQsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGZ0OiB7XG4gICAgICBuYW1lOiAnZnQnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5MRU5HVEgsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjMwNDgsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIHlkOiB7XG4gICAgICBuYW1lOiAneWQnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5MRU5HVEgsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjkxNDQsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIG1pOiB7XG4gICAgICBuYW1lOiAnbWknLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5MRU5HVEgsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAxNjA5LjM0NCxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgbGk6IHtcbiAgICAgIG5hbWU6ICdsaScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkxFTkdUSCxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuMjAxMTY4LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICByZDoge1xuICAgICAgbmFtZTogJ3JkJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTEVOR1RILFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNS4wMjkyMTAsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGNoOiB7XG4gICAgICBuYW1lOiAnY2gnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5MRU5HVEgsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAyMC4xMTY4LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBtaWw6IHtcbiAgICAgIG5hbWU6ICdtaWwnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5MRU5HVEgsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjAwMDAyNTQsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIDEvMTAwMCBpbmNoXG4gICAgLy8gU3VyZmFjZVxuICAgIG0yOiB7XG4gICAgICBuYW1lOiAnbTInLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5TVVJGQUNFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNRVUFSRUQsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgc3Fpbjoge1xuICAgICAgbmFtZTogJ3NxaW4nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5TVVJGQUNFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMDA2NDUxNixcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gNjQ1LjE2IG1tMlxuICAgIHNxZnQ6IHtcbiAgICAgIG5hbWU6ICdzcWZ0JyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuU1VSRkFDRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuMDkyOTAzMDQsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIDAuMDkyOTAzMDQgbTJcbiAgICBzcXlkOiB7XG4gICAgICBuYW1lOiAnc3F5ZCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlNVUkZBQ0UsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjgzNjEyNzM2LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAwLjgzNjEyNzM2IG0yXG4gICAgc3FtaToge1xuICAgICAgbmFtZTogJ3NxbWknLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5TVVJGQUNFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMjU4OTk4OC4xMTAzMzYsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIDIuNTg5OTg4MTEwMzM2IGttMlxuICAgIHNxcmQ6IHtcbiAgICAgIG5hbWU6ICdzcXJkJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuU1VSRkFDRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDI1LjI5Mjk1LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAyNS4yOTI5NSBtMlxuICAgIHNxY2g6IHtcbiAgICAgIG5hbWU6ICdzcWNoJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuU1VSRkFDRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDQwNC42ODczLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyA0MDQuNjg3MyBtMlxuICAgIHNxbWlsOiB7XG4gICAgICBuYW1lOiAnc3FtaWwnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5TVVJGQUNFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNi40NTE2ZS0xMCxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gNi40NTE2ICogMTBeLTEwIG0yXG4gICAgYWNyZToge1xuICAgICAgbmFtZTogJ2FjcmUnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5TVVJGQUNFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNDA0Ni44NixcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gNDA0Ni44NiBtMlxuICAgIGhlY3RhcmU6IHtcbiAgICAgIG5hbWU6ICdoZWN0YXJlJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuU1VSRkFDRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDEwMDAwLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAxMDAwMCBtMlxuICAgIC8vIFZvbHVtZVxuICAgIG0zOiB7XG4gICAgICBuYW1lOiAnbTMnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuQ1VCSUMsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgTDoge1xuICAgICAgbmFtZTogJ0wnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMC4wMDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIGxpdHJlXG4gICAgbDoge1xuICAgICAgbmFtZTogJ2wnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMC4wMDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIGxpdHJlXG4gICAgbGl0cmU6IHtcbiAgICAgIG5hbWU6ICdsaXRyZScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLFxuICAgICAgdmFsdWU6IDAuMDAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBjdWluOiB7XG4gICAgICBuYW1lOiAnY3VpbicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDEuNjM4NzA2NGUtNSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gMS42Mzg3MDY0ZS01IG0zXG4gICAgY3VmdDoge1xuICAgICAgbmFtZTogJ2N1ZnQnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjAyODMxNjg0NjU5MixcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gMjguMzE2IDg0NiA1OTIgTFxuICAgIGN1eWQ6IHtcbiAgICAgIG5hbWU6ICdjdXlkJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC43NjQ1NTQ4NTc5ODQsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIDc2NC41NTQgODU3IDk4NCBMXG4gICAgdGVhc3Bvb246IHtcbiAgICAgIG5hbWU6ICd0ZWFzcG9vbicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuMDAwMDA1LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyA1IG1MXG4gICAgdGFibGVzcG9vbjoge1xuICAgICAgbmFtZTogJ3RhYmxlc3Bvb24nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjAwMDAxNSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gMTUgbUxcbiAgICAvLyB7bmFtZTogJ2N1cCcsIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLCBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwgdmFsdWU6IDAuMDAwMjQwLCBvZmZzZXQ6IDB9LCAvLyAyNDAgbUwgIC8vIG5vdCBwb3NzaWJsZSwgd2UgaGF2ZSBhbHJlYWR5IGFub3RoZXIgY3VwXG4gICAgZHJvcDoge1xuICAgICAgbmFtZTogJ2Ryb3AnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiA1ZS04LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAwLjA1IG1MID0gNWUtOCBtM1xuICAgIGd0dDoge1xuICAgICAgbmFtZTogJ2d0dCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDVlLTgsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIDAuMDUgbUwgPSA1ZS04IG0zXG4gICAgLy8gTGlxdWlkIHZvbHVtZVxuICAgIG1pbmltOiB7XG4gICAgICBuYW1lOiAnbWluaW0nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjAwMDAwMDA2MTYxMTUyLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAwLjA2MTYxMTUyIG1MXG4gICAgZmx1aWRkcmFtOiB7XG4gICAgICBuYW1lOiAnZmx1aWRkcmFtJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMDAwMDM2OTY2OTExLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAzLjY5NjY5MSBtTFxuICAgIGZsdWlkb3VuY2U6IHtcbiAgICAgIG5hbWU6ICdmbHVpZG91bmNlJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMDAwMjk1NzM1MyxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gMjkuNTczNTMgbUxcbiAgICBnaWxsOiB7XG4gICAgICBuYW1lOiAnZ2lsbCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuMDAwMTE4Mjk0MSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gMTE4LjI5NDEgbUxcbiAgICBjYzoge1xuICAgICAgbmFtZTogJ2NjJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMWUtNixcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gMWUtNiBMXG4gICAgY3VwOiB7XG4gICAgICBuYW1lOiAnY3VwJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMDAyMzY1ODgyLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAyMzYuNTg4MiBtTFxuICAgIHBpbnQ6IHtcbiAgICAgIG5hbWU6ICdwaW50JyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMDA0NzMxNzY1LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyA0NzMuMTc2NSBtTFxuICAgIHF1YXJ0OiB7XG4gICAgICBuYW1lOiAncXVhcnQnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjAwMDk0NjM1MjksXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIDk0Ni4zNTI5IG1MXG4gICAgZ2FsbG9uOiB7XG4gICAgICBuYW1lOiAnZ2FsbG9uJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMDM3ODU0MTIsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIDMuNzg1NDEyIExcbiAgICBiZWVyYmFycmVsOiB7XG4gICAgICBuYW1lOiAnYmVlcmJhcnJlbCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuMTE3MzQ3OCxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gMTE3LjM0NzggTFxuICAgIG9pbGJhcnJlbDoge1xuICAgICAgbmFtZTogJ29pbGJhcnJlbCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuMTU4OTg3MyxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gMTU4Ljk4NzMgTFxuICAgIGhvZ3NoZWFkOiB7XG4gICAgICBuYW1lOiAnaG9nc2hlYWQnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjIzODQ4MTAsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIDIzOC40ODEwIExcbiAgICAvLyB7bmFtZTogJ21pbicsIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLCBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwgdmFsdWU6IDAuMDAwMDAwMDYxNjExNTIsIG9mZnNldDogMH0sIC8vIDAuMDYxNjExNTIgbUwgLy8gbWluIGlzIGFscmVhZHkgaW4gdXNlIGFzIG1pbnV0ZVxuICAgIGZsZHI6IHtcbiAgICAgIG5hbWU6ICdmbGRyJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMDAwMDM2OTY2OTExLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAzLjY5NjY5MSBtTFxuICAgIGZsb3o6IHtcbiAgICAgIG5hbWU6ICdmbG96JyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMDAwMjk1NzM1MyxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gMjkuNTczNTMgbUxcbiAgICBnaToge1xuICAgICAgbmFtZTogJ2dpJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMDAxMTgyOTQxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAxMTguMjk0MSBtTFxuICAgIGNwOiB7XG4gICAgICBuYW1lOiAnY3AnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjAwMDIzNjU4ODIsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIDIzNi41ODgyIG1MXG4gICAgcHQ6IHtcbiAgICAgIG5hbWU6ICdwdCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuMDAwNDczMTc2NSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gNDczLjE3NjUgbUxcbiAgICBxdDoge1xuICAgICAgbmFtZTogJ3F0JyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMDA5NDYzNTI5LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyA5NDYuMzUyOSBtTFxuICAgIGdhbDoge1xuICAgICAgbmFtZTogJ2dhbCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuMDAzNzg1NDEyLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAzLjc4NTQxMiBMXG4gICAgYmJsOiB7XG4gICAgICBuYW1lOiAnYmJsJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4xMTczNDc4LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAxMTcuMzQ3OCBMXG4gICAgb2JsOiB7XG4gICAgICBuYW1lOiAnb2JsJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4xNTg5ODczLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAxNTguOTg3MyBMXG4gICAgLy8ge25hbWU6ICdob2dzaGVhZCcsIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLCBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwgdmFsdWU6IDAuMjM4NDgxMCwgb2Zmc2V0OiAwfSwgLy8gMjM4LjQ4MTAgTCAvLyBUT0RPOiBoaD9cbiAgICAvLyBNYXNzXG4gICAgZzoge1xuICAgICAgbmFtZTogJ2cnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5NQVNTLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IDAuMDAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBncmFtOiB7XG4gICAgICBuYW1lOiAnZ3JhbScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLk1BU1MsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORyxcbiAgICAgIHZhbHVlOiAwLjAwMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgdG9uOiB7XG4gICAgICBuYW1lOiAndG9uJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTUFTUyxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCxcbiAgICAgIHZhbHVlOiA5MDcuMTg0NzQsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIHQ6IHtcbiAgICAgIG5hbWU6ICd0JyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTUFTUyxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCxcbiAgICAgIHZhbHVlOiAxMDAwLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICB0b25uZToge1xuICAgICAgbmFtZTogJ3Rvbm5lJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTUFTUyxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLFxuICAgICAgdmFsdWU6IDEwMDAsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGdyYWluOiB7XG4gICAgICBuYW1lOiAnZ3JhaW4nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5NQVNTLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNjQuNzk4OTFlLTYsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGRyYW06IHtcbiAgICAgIG5hbWU6ICdkcmFtJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTUFTUyxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDEuNzcxODQ1MTk1MzEyNWUtMyxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgb3VuY2U6IHtcbiAgICAgIG5hbWU6ICdvdW5jZScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLk1BU1MsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAyOC4zNDk1MjMxMjVlLTMsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIHBvdW5kbWFzczoge1xuICAgICAgbmFtZTogJ3BvdW5kbWFzcycsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLk1BU1MsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiA0NTMuNTkyMzdlLTMsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGh1bmRyZWR3ZWlnaHQ6IHtcbiAgICAgIG5hbWU6ICdodW5kcmVkd2VpZ2h0JyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTUFTUyxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDQ1LjM1OTIzNyxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgc3RpY2s6IHtcbiAgICAgIG5hbWU6ICdzdGljaycsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLk1BU1MsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAxMTVlLTMsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIHN0b25lOiB7XG4gICAgICBuYW1lOiAnc3RvbmUnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5NQVNTLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNi4zNTAyOTMxOCxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgZ3I6IHtcbiAgICAgIG5hbWU6ICdncicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLk1BU1MsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiA2NC43OTg5MWUtNixcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgZHI6IHtcbiAgICAgIG5hbWU6ICdkcicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLk1BU1MsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAxLjc3MTg0NTE5NTMxMjVlLTMsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIG96OiB7XG4gICAgICBuYW1lOiAnb3onLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5NQVNTLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMjguMzQ5NTIzMTI1ZS0zLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBsYm06IHtcbiAgICAgIG5hbWU6ICdsYm0nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5NQVNTLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNDUzLjU5MjM3ZS0zLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBjd3Q6IHtcbiAgICAgIG5hbWU6ICdjd3QnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5NQVNTLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNDUuMzU5MjM3LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyBUaW1lXG4gICAgczoge1xuICAgICAgbmFtZTogJ3MnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5USU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIG1pbjoge1xuICAgICAgbmFtZTogJ21pbicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlRJTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiA2MCxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgaDoge1xuICAgICAgbmFtZTogJ2gnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5USU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMzYwMCxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgc2Vjb25kOiB7XG4gICAgICBuYW1lOiAnc2Vjb25kJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVElNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIHNlYzoge1xuICAgICAgbmFtZTogJ3NlYycsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlRJTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORyxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBtaW51dGU6IHtcbiAgICAgIG5hbWU6ICdtaW51dGUnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5USU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNjAsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGhvdXI6IHtcbiAgICAgIG5hbWU6ICdob3VyJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVElNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDM2MDAsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGRheToge1xuICAgICAgbmFtZTogJ2RheScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlRJTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiA4NjQwMCxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgd2Vlazoge1xuICAgICAgbmFtZTogJ3dlZWsnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5USU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNyAqIDg2NDAwLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBtb250aDoge1xuICAgICAgbmFtZTogJ21vbnRoJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVElNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDI2Mjk4MDAsXG4gICAgICAvLyAxLzEydGggb2YgSnVsaWFuIHllYXJcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgeWVhcjoge1xuICAgICAgbmFtZTogJ3llYXInLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5USU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMzE1NTc2MDAsXG4gICAgICAvLyBKdWxpYW4geWVhclxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBkZWNhZGU6IHtcbiAgICAgIG5hbWU6ICdkZWNhZGUnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5USU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMzE1NTc2MDAwLFxuICAgICAgLy8gSnVsaWFuIGRlY2FkZVxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBjZW50dXJ5OiB7XG4gICAgICBuYW1lOiAnY2VudHVyeScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlRJTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAzMTU1NzYwMDAwLFxuICAgICAgLy8gSnVsaWFuIGNlbnR1cnlcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgbWlsbGVubml1bToge1xuICAgICAgbmFtZTogJ21pbGxlbm5pdW0nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5USU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMzE1NTc2MDAwMDAsXG4gICAgICAvLyBKdWxpYW4gbWlsbGVubml1bVxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyBGcmVxdWVuY3lcbiAgICBoZXJ0ejoge1xuICAgICAgbmFtZTogJ0hlcnR6JyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuRlJFUVVFTkNZLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkxPTkcsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMCxcbiAgICAgIHJlY2lwcm9jYWw6IHRydWVcbiAgICB9LFxuICAgIEh6OiB7XG4gICAgICBuYW1lOiAnSHonLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5GUkVRVUVOQ1ksXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMCxcbiAgICAgIHJlY2lwcm9jYWw6IHRydWVcbiAgICB9LFxuICAgIC8vIEFuZ2xlXG4gICAgcmFkOiB7XG4gICAgICBuYW1lOiAncmFkJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuQU5HTEUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgcmFkaWFuOiB7XG4gICAgICBuYW1lOiAncmFkaWFuJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuQU5HTEUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORyxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyBkZWcgPSByYWQgLyAoMipwaSkgKiAzNjAgPSByYWQgLyAwLjAxNzQ1MzI5MjUxOTk0MzI5NTc2OTIzNjkwNzY4NDg4OFxuICAgIGRlZzoge1xuICAgICAgbmFtZTogJ2RlZycsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkFOR0xFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAvLyB3aWxsIGJlIGZpbGxlZCBpbiBieSBjYWxjdWxhdGVBbmdsZVZhbHVlcygpXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGRlZ3JlZToge1xuICAgICAgbmFtZTogJ2RlZ3JlZScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkFOR0xFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkxPTkcsXG4gICAgICB2YWx1ZTogbnVsbCxcbiAgICAgIC8vIHdpbGwgYmUgZmlsbGVkIGluIGJ5IGNhbGN1bGF0ZUFuZ2xlVmFsdWVzKClcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gZ3JhZCA9IHJhZCAvICgyKnBpKSAqIDQwMCAgPSByYWQgLyAwLjAxNTcwNzk2MzI2Nzk0ODk2NjE5MjMxMzIxNjkxNjM5OVxuICAgIGdyYWQ6IHtcbiAgICAgIG5hbWU6ICdncmFkJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuQU5HTEUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogbnVsbCxcbiAgICAgIC8vIHdpbGwgYmUgZmlsbGVkIGluIGJ5IGNhbGN1bGF0ZUFuZ2xlVmFsdWVzKClcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgZ3JhZGlhbjoge1xuICAgICAgbmFtZTogJ2dyYWRpYW4nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5BTkdMRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLFxuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAvLyB3aWxsIGJlIGZpbGxlZCBpbiBieSBjYWxjdWxhdGVBbmdsZVZhbHVlcygpXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIGN5Y2xlID0gcmFkIC8gKDIqcGkpID0gcmFkIC8gNi4yODMxODUzMDcxNzk1ODY0NzY5MjUyODY3NjY1NzkzXG4gICAgY3ljbGU6IHtcbiAgICAgIG5hbWU6ICdjeWNsZScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkFOR0xFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogbnVsbCxcbiAgICAgIC8vIHdpbGwgYmUgZmlsbGVkIGluIGJ5IGNhbGN1bGF0ZUFuZ2xlVmFsdWVzKClcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gYXJjc2VjID0gcmFkIC8gKDM2MDAgKiAoMzYwIC8gMiAqIHBpKSkgPSByYWQgLyAwLjAwMDAwNDg0ODEzNjgxMTA5NTM1OTkzNTg5OTE0MTAyMzU3OTVcbiAgICBhcmNzZWM6IHtcbiAgICAgIG5hbWU6ICdhcmNzZWMnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5BTkdMRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAvLyB3aWxsIGJlIGZpbGxlZCBpbiBieSBjYWxjdWxhdGVBbmdsZVZhbHVlcygpXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIGFyY21pbiA9IHJhZCAvICg2MCAqICgzNjAgLyAyICogcGkpKSA9IHJhZCAvIDAuMDAwMjkwODg4MjA4NjY1NzIxNTk2MTUzOTQ4NDYxNDE0NzdcbiAgICBhcmNtaW46IHtcbiAgICAgIG5hbWU6ICdhcmNtaW4nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5BTkdMRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAvLyB3aWxsIGJlIGZpbGxlZCBpbiBieSBjYWxjdWxhdGVBbmdsZVZhbHVlcygpXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIEVsZWN0cmljIGN1cnJlbnRcbiAgICBBOiB7XG4gICAgICBuYW1lOiAnQScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkNVUlJFTlQsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgYW1wZXJlOiB7XG4gICAgICBuYW1lOiAnYW1wZXJlJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuQ1VSUkVOVCxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIFRlbXBlcmF0dXJlXG4gICAgLy8gSyhDKSA9IMKwQyArIDI3My4xNVxuICAgIC8vIEsoRikgPSAowrBGICsgNDU5LjY3KSAvIDEuOFxuICAgIC8vIEsoUikgPSDCsFIgLyAxLjhcbiAgICBLOiB7XG4gICAgICBuYW1lOiAnSycsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlRFTVBFUkFUVVJFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgZGVnQzoge1xuICAgICAgbmFtZTogJ2RlZ0MnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5URU1QRVJBVFVSRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDI3My4xNVxuICAgIH0sXG4gICAgZGVnRjoge1xuICAgICAgbmFtZTogJ2RlZ0YnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5URU1QRVJBVFVSRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDEgLyAxLjgsXG4gICAgICBvZmZzZXQ6IDQ1OS42N1xuICAgIH0sXG4gICAgZGVnUjoge1xuICAgICAgbmFtZTogJ2RlZ1InLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5URU1QRVJBVFVSRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDEgLyAxLjgsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGtlbHZpbjoge1xuICAgICAgbmFtZTogJ2tlbHZpbicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlRFTVBFUkFUVVJFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgY2Vsc2l1czoge1xuICAgICAgbmFtZTogJ2NlbHNpdXMnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5URU1QRVJBVFVSRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDI3My4xNVxuICAgIH0sXG4gICAgZmFocmVuaGVpdDoge1xuICAgICAgbmFtZTogJ2ZhaHJlbmhlaXQnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5URU1QRVJBVFVSRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDEgLyAxLjgsXG4gICAgICBvZmZzZXQ6IDQ1OS42N1xuICAgIH0sXG4gICAgcmFua2luZToge1xuICAgICAgbmFtZTogJ3JhbmtpbmUnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5URU1QRVJBVFVSRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDEgLyAxLjgsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIGFtb3VudCBvZiBzdWJzdGFuY2VcbiAgICBtb2w6IHtcbiAgICAgIG5hbWU6ICdtb2wnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5BTU9VTlRfT0ZfU1VCU1RBTkNFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIG1vbGU6IHtcbiAgICAgIG5hbWU6ICdtb2xlJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuQU1PVU5UX09GX1NVQlNUQU5DRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIGx1bWlub3VzIGludGVuc2l0eVxuICAgIGNkOiB7XG4gICAgICBuYW1lOiAnY2QnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5MVU1JTk9VU19JTlRFTlNJVFksXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgY2FuZGVsYToge1xuICAgICAgbmFtZTogJ2NhbmRlbGEnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5MVU1JTk9VU19JTlRFTlNJVFksXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORyxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyBUT0RPOiB1bml0cyBTVEVSQURJQU5cbiAgICAvLyB7bmFtZTogJ3NyJywgYmFzZTogQkFTRV9VTklUUy5TVEVSQURJQU4sIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLCB2YWx1ZTogMSwgb2Zmc2V0OiAwfSxcbiAgICAvLyB7bmFtZTogJ3N0ZXJhZGlhbicsIGJhc2U6IEJBU0VfVU5JVFMuU1RFUkFESUFOLCBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwgdmFsdWU6IDEsIG9mZnNldDogMH0sXG4gICAgLy8gRm9yY2VcbiAgICBOOiB7XG4gICAgICBuYW1lOiAnTicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkZPUkNFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIG5ld3Rvbjoge1xuICAgICAgbmFtZTogJ25ld3RvbicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkZPUkNFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkxPTkcsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgZHluOiB7XG4gICAgICBuYW1lOiAnZHluJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuRk9SQ0UsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMC4wMDAwMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgZHluZToge1xuICAgICAgbmFtZTogJ2R5bmUnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5GT1JDRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLFxuICAgICAgdmFsdWU6IDAuMDAwMDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGxiZjoge1xuICAgICAgbmFtZTogJ2xiZicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkZPUkNFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNC40NDgyMjE2MTUyNjA1LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBwb3VuZGZvcmNlOiB7XG4gICAgICBuYW1lOiAncG91bmRmb3JjZScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkZPUkNFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNC40NDgyMjE2MTUyNjA1LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBraXA6IHtcbiAgICAgIG5hbWU6ICdraXAnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5GT1JDRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLFxuICAgICAgdmFsdWU6IDQ0NDguMjIxNixcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gRW5lcmd5XG4gICAgSjoge1xuICAgICAgbmFtZTogJ0onLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5FTkVSR1ksXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgam91bGU6IHtcbiAgICAgIG5hbWU6ICdqb3VsZScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkVORVJHWSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBlcmc6IHtcbiAgICAgIG5hbWU6ICdlcmcnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5FTkVSR1ksXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAxZS03LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBXaDoge1xuICAgICAgbmFtZTogJ1doJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuRU5FUkdZLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IDM2MDAsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIEJUVToge1xuICAgICAgbmFtZTogJ0JUVScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkVORVJHWSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5CVFUsXG4gICAgICB2YWx1ZTogMTA1NS4wNTU4NTI2MixcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgZVY6IHtcbiAgICAgIG5hbWU6ICdlVicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkVORVJHWSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCxcbiAgICAgIHZhbHVlOiAxLjYwMjE3NjU2NWUtMTksXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGVsZWN0cm9udm9sdDoge1xuICAgICAgbmFtZTogJ2VsZWN0cm9udm9sdCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkVORVJHWSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLFxuICAgICAgdmFsdWU6IDEuNjAyMTc2NTY1ZS0xOSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gUG93ZXJcbiAgICBXOiB7XG4gICAgICBuYW1lOiAnVycsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlBPV0VSLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIHdhdHQ6IHtcbiAgICAgIG5hbWU6ICd3YXR0JyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuUE9XRVIsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORyxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBocDoge1xuICAgICAgbmFtZTogJ2hwJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuUE9XRVIsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiA3NDUuNjk5ODcxNTM4NixcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gRWxlY3RyaWNhbCBwb3dlciB1bml0c1xuICAgIFZBUjoge1xuICAgICAgbmFtZTogJ1ZBUicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlBPV0VSLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IENvbXBsZXguSSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgVkE6IHtcbiAgICAgIG5hbWU6ICdWQScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlBPV0VSLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIFByZXNzdXJlXG4gICAgUGE6IHtcbiAgICAgIG5hbWU6ICdQYScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlBSRVNTVVJFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIHBzaToge1xuICAgICAgbmFtZTogJ3BzaScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlBSRVNTVVJFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNjg5NC43NTcyOTI3NjQ1OSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgYXRtOiB7XG4gICAgICBuYW1lOiAnYXRtJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuUFJFU1NVUkUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAxMDEzMjUsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGJhcjoge1xuICAgICAgbmFtZTogJ2JhcicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlBSRVNTVVJFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JUTE9ORyxcbiAgICAgIHZhbHVlOiAxMDAwMDAsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIHRvcnI6IHtcbiAgICAgIG5hbWU6ICd0b3JyJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuUFJFU1NVUkUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAxMzMuMzIyLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBtbUhnOiB7XG4gICAgICBuYW1lOiAnbW1IZycsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlBSRVNTVVJFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMTMzLjMyMixcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgbW1IMk86IHtcbiAgICAgIG5hbWU6ICdtbUgyTycsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlBSRVNTVVJFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogOS44MDY2NSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgY21IMk86IHtcbiAgICAgIG5hbWU6ICdjbUgyTycsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlBSRVNTVVJFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogOTguMDY2NSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gRWxlY3RyaWMgY2hhcmdlXG4gICAgY291bG9tYjoge1xuICAgICAgbmFtZTogJ2NvdWxvbWInLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5FTEVDVFJJQ19DSEFSR0UsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORyxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBDOiB7XG4gICAgICBuYW1lOiAnQycsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkVMRUNUUklDX0NIQVJHRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyBFbGVjdHJpYyBjYXBhY2l0YW5jZVxuICAgIGZhcmFkOiB7XG4gICAgICBuYW1lOiAnZmFyYWQnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5FTEVDVFJJQ19DQVBBQ0lUQU5DRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIEY6IHtcbiAgICAgIG5hbWU6ICdGJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuRUxFQ1RSSUNfQ0FQQUNJVEFOQ0UsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gRWxlY3RyaWMgcG90ZW50aWFsXG4gICAgdm9sdDoge1xuICAgICAgbmFtZTogJ3ZvbHQnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5FTEVDVFJJQ19QT1RFTlRJQUwsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORyxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBWOiB7XG4gICAgICBuYW1lOiAnVicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkVMRUNUUklDX1BPVEVOVElBTCxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyBFbGVjdHJpYyByZXNpc3RhbmNlXG4gICAgb2htOiB7XG4gICAgICBuYW1lOiAnb2htJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuRUxFQ1RSSUNfUkVTSVNUQU5DRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVExPTkcsXG4gICAgICAvLyBCb3RoIE1vaG0gYW5kIG1lZ2FvaG0gYXJlIGFjY2VwdGFibGVcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcblxuICAgIC8qXG4gICAgICogVW5pY29kZSBicmVha3MgaW4gYnJvd3NlcnMgaWYgY2hhcnNldCBpcyBub3Qgc3BlY2lmaWVkXG4gICAgzqk6IHtcbiAgICAgIG5hbWU6ICfOqScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkVMRUNUUklDX1JFU0lTVEFOQ0UsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgKi9cbiAgICAvLyBFbGVjdHJpYyBpbmR1Y3RhbmNlXG4gICAgaGVucnk6IHtcbiAgICAgIG5hbWU6ICdoZW5yeScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkVMRUNUUklDX0lORFVDVEFOQ0UsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORyxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBIOiB7XG4gICAgICBuYW1lOiAnSCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkVMRUNUUklDX0lORFVDVEFOQ0UsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gRWxlY3RyaWMgY29uZHVjdGFuY2VcbiAgICBzaWVtZW5zOiB7XG4gICAgICBuYW1lOiAnc2llbWVucycsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkVMRUNUUklDX0NPTkRVQ1RBTkNFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkxPTkcsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgUzoge1xuICAgICAgbmFtZTogJ1MnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5FTEVDVFJJQ19DT05EVUNUQU5DRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyBNYWduZXRpYyBmbHV4XG4gICAgd2ViZXI6IHtcbiAgICAgIG5hbWU6ICd3ZWJlcicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLk1BR05FVElDX0ZMVVgsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORyxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBXYjoge1xuICAgICAgbmFtZTogJ1diJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTUFHTkVUSUNfRkxVWCxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyBNYWduZXRpYyBmbHV4IGRlbnNpdHlcbiAgICB0ZXNsYToge1xuICAgICAgbmFtZTogJ3Rlc2xhJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTUFHTkVUSUNfRkxVWF9ERU5TSVRZLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkxPTkcsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgVDoge1xuICAgICAgbmFtZTogJ1QnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5NQUdORVRJQ19GTFVYX0RFTlNJVFksXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gQmluYXJ5XG4gICAgYjoge1xuICAgICAgbmFtZTogJ2InLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5CSVQsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuQklOQVJZX1NIT1JULFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGJpdHM6IHtcbiAgICAgIG5hbWU6ICdiaXRzJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuQklULFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkJJTkFSWV9MT05HLFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIEI6IHtcbiAgICAgIG5hbWU6ICdCJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuQklULFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkJJTkFSWV9TSE9SVCxcbiAgICAgIHZhbHVlOiA4LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBieXRlczoge1xuICAgICAgbmFtZTogJ2J5dGVzJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuQklULFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkJJTkFSWV9MT05HLFxuICAgICAgdmFsdWU6IDgsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9XG4gIH07IC8vIGFsaWFzZXMgKGZvcm1lcmx5IHBsdXJhbHMpXG5cbiAgdmFyIEFMSUFTRVMgPSB7XG4gICAgbWV0ZXJzOiAnbWV0ZXInLFxuICAgIGluY2hlczogJ2luY2gnLFxuICAgIGZlZXQ6ICdmb290JyxcbiAgICB5YXJkczogJ3lhcmQnLFxuICAgIG1pbGVzOiAnbWlsZScsXG4gICAgbGlua3M6ICdsaW5rJyxcbiAgICByb2RzOiAncm9kJyxcbiAgICBjaGFpbnM6ICdjaGFpbicsXG4gICAgYW5nc3Ryb21zOiAnYW5nc3Ryb20nLFxuICAgIGx0OiAnbCcsXG4gICAgbGl0cmVzOiAnbGl0cmUnLFxuICAgIGxpdGVyOiAnbGl0cmUnLFxuICAgIGxpdGVyczogJ2xpdHJlJyxcbiAgICB0ZWFzcG9vbnM6ICd0ZWFzcG9vbicsXG4gICAgdGFibGVzcG9vbnM6ICd0YWJsZXNwb29uJyxcbiAgICBtaW5pbXM6ICdtaW5pbScsXG4gICAgZmx1aWRkcmFtczogJ2ZsdWlkZHJhbScsXG4gICAgZmx1aWRvdW5jZXM6ICdmbHVpZG91bmNlJyxcbiAgICBnaWxsczogJ2dpbGwnLFxuICAgIGN1cHM6ICdjdXAnLFxuICAgIHBpbnRzOiAncGludCcsXG4gICAgcXVhcnRzOiAncXVhcnQnLFxuICAgIGdhbGxvbnM6ICdnYWxsb24nLFxuICAgIGJlZXJiYXJyZWxzOiAnYmVlcmJhcnJlbCcsXG4gICAgb2lsYmFycmVsczogJ29pbGJhcnJlbCcsXG4gICAgaG9nc2hlYWRzOiAnaG9nc2hlYWQnLFxuICAgIGd0dHM6ICdndHQnLFxuICAgIGdyYW1zOiAnZ3JhbScsXG4gICAgdG9uczogJ3RvbicsXG4gICAgdG9ubmVzOiAndG9ubmUnLFxuICAgIGdyYWluczogJ2dyYWluJyxcbiAgICBkcmFtczogJ2RyYW0nLFxuICAgIG91bmNlczogJ291bmNlJyxcbiAgICBwb3VuZG1hc3NlczogJ3BvdW5kbWFzcycsXG4gICAgaHVuZHJlZHdlaWdodHM6ICdodW5kcmVkd2VpZ2h0JyxcbiAgICBzdGlja3M6ICdzdGljaycsXG4gICAgbGI6ICdsYm0nLFxuICAgIGxiczogJ2xibScsXG4gICAga2lwczogJ2tpcCcsXG4gICAgYWNyZXM6ICdhY3JlJyxcbiAgICBoZWN0YXJlczogJ2hlY3RhcmUnLFxuICAgIHNxZmVldDogJ3NxZnQnLFxuICAgIHNxeWFyZDogJ3NxeWQnLFxuICAgIHNxbWlsZTogJ3NxbWknLFxuICAgIHNxbWlsZXM6ICdzcW1pJyxcbiAgICBtbWhnOiAnbW1IZycsXG4gICAgbW1oMm86ICdtbUgyTycsXG4gICAgY21oMm86ICdjbUgyTycsXG4gICAgc2Vjb25kczogJ3NlY29uZCcsXG4gICAgc2VjczogJ3NlY29uZCcsXG4gICAgbWludXRlczogJ21pbnV0ZScsXG4gICAgbWluczogJ21pbnV0ZScsXG4gICAgaG91cnM6ICdob3VyJyxcbiAgICBocjogJ2hvdXInLFxuICAgIGhyczogJ2hvdXInLFxuICAgIGRheXM6ICdkYXknLFxuICAgIHdlZWtzOiAnd2VlaycsXG4gICAgbW9udGhzOiAnbW9udGgnLFxuICAgIHllYXJzOiAneWVhcicsXG4gICAgZGVjYWRlczogJ2RlY2FkZScsXG4gICAgY2VudHVyaWVzOiAnY2VudHVyeScsXG4gICAgbWlsbGVubmlhOiAnbWlsbGVubml1bScsXG4gICAgaGVydHo6ICdoZXJ0eicsXG4gICAgcmFkaWFuczogJ3JhZGlhbicsXG4gICAgZGVncmVlczogJ2RlZ3JlZScsXG4gICAgZ3JhZGlhbnM6ICdncmFkaWFuJyxcbiAgICBjeWNsZXM6ICdjeWNsZScsXG4gICAgYXJjc2Vjb25kOiAnYXJjc2VjJyxcbiAgICBhcmNzZWNvbmRzOiAnYXJjc2VjJyxcbiAgICBhcmNtaW51dGU6ICdhcmNtaW4nLFxuICAgIGFyY21pbnV0ZXM6ICdhcmNtaW4nLFxuICAgIEJUVXM6ICdCVFUnLFxuICAgIHdhdHRzOiAnd2F0dCcsXG4gICAgam91bGVzOiAnam91bGUnLFxuICAgIGFtcGVyZXM6ICdhbXBlcmUnLFxuICAgIGNvdWxvbWJzOiAnY291bG9tYicsXG4gICAgdm9sdHM6ICd2b2x0JyxcbiAgICBvaG1zOiAnb2htJyxcbiAgICBmYXJhZHM6ICdmYXJhZCcsXG4gICAgd2ViZXJzOiAnd2ViZXInLFxuICAgIHRlc2xhczogJ3Rlc2xhJyxcbiAgICBlbGVjdHJvbnZvbHRzOiAnZWxlY3Ryb252b2x0JyxcbiAgICBtb2xlczogJ21vbGUnLFxuICAgIGJpdDogJ2JpdHMnLFxuICAgIFwiYnl0ZVwiOiAnYnl0ZXMnXG4gIH07XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIHZhbHVlcyBmb3IgdGhlIGFuZ2xlIHVuaXRzLlxuICAgKiBWYWx1ZSBpcyBjYWxjdWxhdGVkIGFzIG51bWJlciBvciBCaWdOdW1iZXIgZGVwZW5kaW5nIG9uIHRoZSBjb25maWd1cmF0aW9uXG4gICAqIEBwYXJhbSB7e251bWJlcjogJ251bWJlcicgfCAnQmlnTnVtYmVyJ319IGNvbmZpZ1xuICAgKi9cblxuICBmdW5jdGlvbiBjYWxjdWxhdGVBbmdsZVZhbHVlcyhjb25maWcpIHtcbiAgICBpZiAoY29uZmlnLm51bWJlciA9PT0gJ0JpZ051bWJlcicpIHtcbiAgICAgIHZhciBwaSA9ICgwLCBfY29uc3RhbnRzLmNyZWF0ZUJpZ051bWJlclBpKShfQmlnTnVtYmVyKTtcbiAgICAgIFVOSVRTLnJhZC52YWx1ZSA9IG5ldyBfQmlnTnVtYmVyKDEpO1xuICAgICAgVU5JVFMuZGVnLnZhbHVlID0gcGkuZGl2KDE4MCk7IC8vIDIgKiBwaSAvIDM2MFxuXG4gICAgICBVTklUUy5ncmFkLnZhbHVlID0gcGkuZGl2KDIwMCk7IC8vIDIgKiBwaSAvIDQwMFxuXG4gICAgICBVTklUUy5jeWNsZS52YWx1ZSA9IHBpLnRpbWVzKDIpOyAvLyAyICogcGlcblxuICAgICAgVU5JVFMuYXJjc2VjLnZhbHVlID0gcGkuZGl2KDY0ODAwMCk7IC8vIDIgKiBwaSAvIDM2MCAvIDM2MDBcblxuICAgICAgVU5JVFMuYXJjbWluLnZhbHVlID0gcGkuZGl2KDEwODAwKTsgLy8gMiAqIHBpIC8gMzYwIC8gNjBcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gbnVtYmVyXG4gICAgICBVTklUUy5yYWQudmFsdWUgPSAxO1xuICAgICAgVU5JVFMuZGVnLnZhbHVlID0gTWF0aC5QSSAvIDE4MDsgLy8gMiAqIHBpIC8gMzYwXG5cbiAgICAgIFVOSVRTLmdyYWQudmFsdWUgPSBNYXRoLlBJIC8gMjAwOyAvLyAyICogcGkgLyA0MDBcblxuICAgICAgVU5JVFMuY3ljbGUudmFsdWUgPSBNYXRoLlBJICogMjsgLy8gMiAqIHBpXG5cbiAgICAgIFVOSVRTLmFyY3NlYy52YWx1ZSA9IE1hdGguUEkgLyA2NDgwMDA7IC8vIDIgKiBwaSAvIDM2MCAvIDM2MDBcblxuICAgICAgVU5JVFMuYXJjbWluLnZhbHVlID0gTWF0aC5QSSAvIDEwODAwOyAvLyAyICogcGkgLyAzNjAgLyA2MFxuICAgIH0gLy8gY29weSB0byB0aGUgZnVsbCBuYW1lcyBvZiB0aGUgYW5nbGVzXG5cblxuICAgIFVOSVRTLnJhZGlhbi52YWx1ZSA9IFVOSVRTLnJhZC52YWx1ZTtcbiAgICBVTklUUy5kZWdyZWUudmFsdWUgPSBVTklUUy5kZWcudmFsdWU7XG4gICAgVU5JVFMuZ3JhZGlhbi52YWx1ZSA9IFVOSVRTLmdyYWQudmFsdWU7XG4gIH0gLy8gYXBwbHkgdGhlIGFuZ2xlIHZhbHVlcyBub3dcblxuXG4gIGNhbGN1bGF0ZUFuZ2xlVmFsdWVzKGNvbmZpZyk7XG5cbiAgaWYgKG9uKSB7XG4gICAgLy8gcmVjYWxjdWxhdGUgdGhlIHZhbHVlcyBvbiBjaGFuZ2Ugb2YgY29uZmlndXJhdGlvblxuICAgIG9uKCdjb25maWcnLCBmdW5jdGlvbiAoY3VyciwgcHJldikge1xuICAgICAgaWYgKGN1cnIubnVtYmVyICE9PSBwcmV2Lm51bWJlcikge1xuICAgICAgICBjYWxjdWxhdGVBbmdsZVZhbHVlcyhjdXJyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQSB1bml0IHN5c3RlbSBpcyBhIHNldCBvZiBkaW1lbnNpb25hbGx5IGluZGVwZW5kZW50IGJhc2UgdW5pdHMgcGx1cyBhIHNldCBvZiBkZXJpdmVkIHVuaXRzLCBmb3JtZWQgYnkgbXVsdGlwbGljYXRpb24gYW5kIGRpdmlzaW9uIG9mIHRoZSBiYXNlIHVuaXRzLCB0aGF0IGFyZSBieSBjb252ZW50aW9uIHVzZWQgd2l0aCB0aGUgdW5pdCBzeXN0ZW0uXG4gICAqIEEgdXNlciBwZXJoYXBzIGNvdWxkIGlzc3VlIGEgY29tbWFuZCB0byBzZWxlY3QgYSBwcmVmZXJyZWQgdW5pdCBzeXN0ZW0sIG9yIHVzZSB0aGUgZGVmYXVsdCAoc2VlIGJlbG93KS5cbiAgICogQXV0byB1bml0IHN5c3RlbTogVGhlIGRlZmF1bHQgdW5pdCBzeXN0ZW0gaXMgdXBkYXRlZCBvbiB0aGUgZmx5IGFueXRpbWUgYSB1bml0IGlzIHBhcnNlZC4gVGhlIGNvcnJlc3BvbmRpbmcgdW5pdCBpbiB0aGUgZGVmYXVsdCB1bml0IHN5c3RlbSBpcyB1cGRhdGVkLCBzbyB0aGF0IGFuc3dlcnMgYXJlIGdpdmVuIGluIHRoZSBzYW1lIHVuaXRzIHRoZSB1c2VyIHN1cHBsaWVzLlxuICAgKi9cblxuXG4gIHZhciBVTklUX1NZU1RFTVMgPSB7XG4gICAgc2k6IHtcbiAgICAgIC8vIEJhc2UgdW5pdHNcbiAgICAgIE5PTkU6IHtcbiAgICAgICAgdW5pdDogVU5JVF9OT05FLFxuICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLk5PTkVbJyddXG4gICAgICB9LFxuICAgICAgTEVOR1RIOiB7XG4gICAgICAgIHVuaXQ6IFVOSVRTLm0sXG4gICAgICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlRbJyddXG4gICAgICB9LFxuICAgICAgTUFTUzoge1xuICAgICAgICB1bml0OiBVTklUUy5nLFxuICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLlNIT1JULmtcbiAgICAgIH0sXG4gICAgICBUSU1FOiB7XG4gICAgICAgIHVuaXQ6IFVOSVRTLnMsXG4gICAgICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlRbJyddXG4gICAgICB9LFxuICAgICAgQ1VSUkVOVDoge1xuICAgICAgICB1bml0OiBVTklUUy5BLFxuICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLlNIT1JUWycnXVxuICAgICAgfSxcbiAgICAgIFRFTVBFUkFUVVJFOiB7XG4gICAgICAgIHVuaXQ6IFVOSVRTLkssXG4gICAgICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlRbJyddXG4gICAgICB9LFxuICAgICAgTFVNSU5PVVNfSU5URU5TSVRZOiB7XG4gICAgICAgIHVuaXQ6IFVOSVRTLmNkLFxuICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLlNIT1JUWycnXVxuICAgICAgfSxcbiAgICAgIEFNT1VOVF9PRl9TVUJTVEFOQ0U6IHtcbiAgICAgICAgdW5pdDogVU5JVFMubW9sLFxuICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLlNIT1JUWycnXVxuICAgICAgfSxcbiAgICAgIEFOR0xFOiB7XG4gICAgICAgIHVuaXQ6IFVOSVRTLnJhZCxcbiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5TSE9SVFsnJ11cbiAgICAgIH0sXG4gICAgICBCSVQ6IHtcbiAgICAgICAgdW5pdDogVU5JVFMuYml0cyxcbiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5TSE9SVFsnJ11cbiAgICAgIH0sXG4gICAgICAvLyBEZXJpdmVkIHVuaXRzXG4gICAgICBGT1JDRToge1xuICAgICAgICB1bml0OiBVTklUUy5OLFxuICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLlNIT1JUWycnXVxuICAgICAgfSxcbiAgICAgIEVORVJHWToge1xuICAgICAgICB1bml0OiBVTklUUy5KLFxuICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLlNIT1JUWycnXVxuICAgICAgfSxcbiAgICAgIFBPV0VSOiB7XG4gICAgICAgIHVuaXQ6IFVOSVRTLlcsXG4gICAgICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlRbJyddXG4gICAgICB9LFxuICAgICAgUFJFU1NVUkU6IHtcbiAgICAgICAgdW5pdDogVU5JVFMuUGEsXG4gICAgICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlRbJyddXG4gICAgICB9LFxuICAgICAgRUxFQ1RSSUNfQ0hBUkdFOiB7XG4gICAgICAgIHVuaXQ6IFVOSVRTLkMsXG4gICAgICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlRbJyddXG4gICAgICB9LFxuICAgICAgRUxFQ1RSSUNfQ0FQQUNJVEFOQ0U6IHtcbiAgICAgICAgdW5pdDogVU5JVFMuRixcbiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5TSE9SVFsnJ11cbiAgICAgIH0sXG4gICAgICBFTEVDVFJJQ19QT1RFTlRJQUw6IHtcbiAgICAgICAgdW5pdDogVU5JVFMuVixcbiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5TSE9SVFsnJ11cbiAgICAgIH0sXG4gICAgICBFTEVDVFJJQ19SRVNJU1RBTkNFOiB7XG4gICAgICAgIHVuaXQ6IFVOSVRTLm9obSxcbiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5TSE9SVFsnJ11cbiAgICAgIH0sXG4gICAgICBFTEVDVFJJQ19JTkRVQ1RBTkNFOiB7XG4gICAgICAgIHVuaXQ6IFVOSVRTLkgsXG4gICAgICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlRbJyddXG4gICAgICB9LFxuICAgICAgRUxFQ1RSSUNfQ09ORFVDVEFOQ0U6IHtcbiAgICAgICAgdW5pdDogVU5JVFMuUyxcbiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5TSE9SVFsnJ11cbiAgICAgIH0sXG4gICAgICBNQUdORVRJQ19GTFVYOiB7XG4gICAgICAgIHVuaXQ6IFVOSVRTLldiLFxuICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLlNIT1JUWycnXVxuICAgICAgfSxcbiAgICAgIE1BR05FVElDX0ZMVVhfREVOU0lUWToge1xuICAgICAgICB1bml0OiBVTklUUy5ULFxuICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLlNIT1JUWycnXVxuICAgICAgfSxcbiAgICAgIEZSRVFVRU5DWToge1xuICAgICAgICB1bml0OiBVTklUUy5IeixcbiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5TSE9SVFsnJ11cbiAgICAgIH1cbiAgICB9XG4gIH07IC8vIENsb25lIHRvIGNyZWF0ZSB0aGUgb3RoZXIgdW5pdCBzeXN0ZW1zXG5cbiAgVU5JVF9TWVNURU1TLmNncyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoVU5JVF9TWVNURU1TLnNpKSk7XG4gIFVOSVRfU1lTVEVNUy5jZ3MuTEVOR1RIID0ge1xuICAgIHVuaXQ6IFVOSVRTLm0sXG4gICAgcHJlZml4OiBQUkVGSVhFUy5TSE9SVC5jXG4gIH07XG4gIFVOSVRfU1lTVEVNUy5jZ3MuTUFTUyA9IHtcbiAgICB1bml0OiBVTklUUy5nLFxuICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlRbJyddXG4gIH07XG4gIFVOSVRfU1lTVEVNUy5jZ3MuRk9SQ0UgPSB7XG4gICAgdW5pdDogVU5JVFMuZHluLFxuICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlRbJyddXG4gIH07XG4gIFVOSVRfU1lTVEVNUy5jZ3MuRU5FUkdZID0ge1xuICAgIHVuaXQ6IFVOSVRTLmVyZyxcbiAgICBwcmVmaXg6IFBSRUZJWEVTLk5PTkVbJyddXG4gIH07IC8vIHRoZXJlIGFyZSB3aG9sbHkgNCB1bmlxdWUgY2dzIHN5c3RlbXMgZm9yIGVsZWN0cmljaXR5IGFuZCBtYWduZXRpc20sXG4gIC8vIHNvIGxldCdzIG5vdCB3b3JyeSBhYm91dCBpdCB1bmxlc3Mgc29tZWJvZHkgY29tcGxhaW5zXG5cbiAgVU5JVF9TWVNURU1TLnVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShVTklUX1NZU1RFTVMuc2kpKTtcbiAgVU5JVF9TWVNURU1TLnVzLkxFTkdUSCA9IHtcbiAgICB1bml0OiBVTklUUy5mdCxcbiAgICBwcmVmaXg6IFBSRUZJWEVTLk5PTkVbJyddXG4gIH07XG4gIFVOSVRfU1lTVEVNUy51cy5NQVNTID0ge1xuICAgIHVuaXQ6IFVOSVRTLmxibSxcbiAgICBwcmVmaXg6IFBSRUZJWEVTLk5PTkVbJyddXG4gIH07XG4gIFVOSVRfU1lTVEVNUy51cy5URU1QRVJBVFVSRSA9IHtcbiAgICB1bml0OiBVTklUUy5kZWdGLFxuICAgIHByZWZpeDogUFJFRklYRVMuTk9ORVsnJ11cbiAgfTtcbiAgVU5JVF9TWVNURU1TLnVzLkZPUkNFID0ge1xuICAgIHVuaXQ6IFVOSVRTLmxiZixcbiAgICBwcmVmaXg6IFBSRUZJWEVTLk5PTkVbJyddXG4gIH07XG4gIFVOSVRfU1lTVEVNUy51cy5FTkVSR1kgPSB7XG4gICAgdW5pdDogVU5JVFMuQlRVLFxuICAgIHByZWZpeDogUFJFRklYRVMuQlRVWycnXVxuICB9O1xuICBVTklUX1NZU1RFTVMudXMuUE9XRVIgPSB7XG4gICAgdW5pdDogVU5JVFMuaHAsXG4gICAgcHJlZml4OiBQUkVGSVhFUy5OT05FWycnXVxuICB9O1xuICBVTklUX1NZU1RFTVMudXMuUFJFU1NVUkUgPSB7XG4gICAgdW5pdDogVU5JVFMucHNpLFxuICAgIHByZWZpeDogUFJFRklYRVMuTk9ORVsnJ11cbiAgfTsgLy8gQWRkIGFkZGl0aW9uYWwgdW5pdCBzeXN0ZW1zIGhlcmUuXG4gIC8vIENob29zZSBhIHVuaXQgc3lzdGVtIHRvIHNlZWQgdGhlIGF1dG8gdW5pdCBzeXN0ZW0uXG5cbiAgVU5JVF9TWVNURU1TLmF1dG8gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KFVOSVRfU1lTVEVNUy5zaSkpOyAvLyBTZXQgdGhlIGN1cnJlbnQgdW5pdCBzeXN0ZW1cblxuICB2YXIgY3VycmVudFVuaXRTeXN0ZW0gPSBVTklUX1NZU1RFTVMuYXV0bztcbiAgLyoqXG4gICAqIFNldCBhIHVuaXQgc3lzdGVtIGZvciBmb3JtYXR0aW5nIGRlcml2ZWQgdW5pdHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZV0gVGhlIG5hbWUgb2YgdGhlIHVuaXQgc3lzdGVtLlxuICAgKi9cblxuICBVbml0LnNldFVuaXRTeXN0ZW0gPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoVU5JVF9TWVNURU1TLCBuYW1lKSkge1xuICAgICAgY3VycmVudFVuaXRTeXN0ZW0gPSBVTklUX1NZU1RFTVNbbmFtZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5pdCBzeXN0ZW0gJyArIG5hbWUgKyAnIGRvZXMgbm90IGV4aXN0LiBDaG9pY2VzIGFyZTogJyArIE9iamVjdC5rZXlzKFVOSVRfU1lTVEVNUykuam9pbignLCAnKSk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogUmV0dXJuIHRoZSBjdXJyZW50IHVuaXQgc3lzdGVtLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBjdXJyZW50IHVuaXQgc3lzdGVtLlxuICAgKi9cblxuXG4gIFVuaXQuZ2V0VW5pdFN5c3RlbSA9IGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBfa2V5IGluIFVOSVRfU1lTVEVNUykge1xuICAgICAgaWYgKFVOSVRfU1lTVEVNU1tfa2V5XSA9PT0gY3VycmVudFVuaXRTeXN0ZW0pIHtcbiAgICAgICAgcmV0dXJuIF9rZXk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQ29udmVydGVycyB0byBjb252ZXJ0IGZyb20gbnVtYmVyIHRvIGFuIG90aGVyIG51bWVyaWMgdHlwZSBsaWtlIEJpZ051bWJlclxuICAgKiBvciBGcmFjdGlvblxuICAgKi9cblxuXG4gIFVuaXQudHlwZUNvbnZlcnRlcnMgPSB7XG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIG5ldyBfQmlnTnVtYmVyKHggKyAnJyk7IC8vIHN0cmluZ2lmeSB0byBwcmV2ZW50IGNvbnN0cnVjdG9yIGVycm9yXG4gICAgfSxcbiAgICBGcmFjdGlvbjogZnVuY3Rpb24gRnJhY3Rpb24oeCkge1xuICAgICAgcmV0dXJuIG5ldyBfRnJhY3Rpb24oeCk7XG4gICAgfSxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4O1xuICAgIH0sXG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHg7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogUmV0cmlldmUgdGhlIHJpZ2h0IGNvbnZlcnRvciBmdW5jdGlvbiBjb3JyZXNwb25kaW5nIHdpdGggdGhlIHR5cGVcbiAgICogb2YgcHJvdmlkZWQgZXhhbXBsZVZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAgIEEgc3RyaW5nICdudW1iZXInLCAnQmlnTnVtYmVyJywgb3IgJ0ZyYWN0aW9uJ1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIEluIGNhc2Ugb2YgYW4gdW5rbm93biB0eXBlLFxuICAgKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAgICovXG5cbiAgVW5pdC5fZ2V0TnVtYmVyQ29udmVydGVyID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBpZiAoIVVuaXQudHlwZUNvbnZlcnRlcnNbdHlwZV0pIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vuc3VwcG9ydGVkIHR5cGUgXCInICsgdHlwZSArICdcIicpO1xuICAgIH1cblxuICAgIHJldHVybiBVbml0LnR5cGVDb252ZXJ0ZXJzW3R5cGVdO1xuICB9OyAvLyBBZGQgZGltZW5zaW9ucyB0byBlYWNoIGJ1aWx0LWluIHVuaXRcblxuXG4gIGZvciAodmFyIF9rZXkyIGluIFVOSVRTKSB7XG4gICAgdmFyIHVuaXQgPSBVTklUU1tfa2V5Ml07XG4gICAgdW5pdC5kaW1lbnNpb25zID0gdW5pdC5iYXNlLmRpbWVuc2lvbnM7XG4gIH0gLy8gQ3JlYXRlIGFsaWFzZXNcblxuXG4gIGZvciAodmFyIF9uYW1lMiBpbiBBTElBU0VTKSB7XG4gICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShBTElBU0VTLCBfbmFtZTIpKSB7XG4gICAgICB2YXIgX3VuaXQyID0gVU5JVFNbQUxJQVNFU1tfbmFtZTJdXTtcbiAgICAgIHZhciBhbGlhcyA9IHt9O1xuXG4gICAgICBmb3IgKHZhciBfa2V5MyBpbiBfdW5pdDIpIHtcbiAgICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShfdW5pdDIsIF9rZXkzKSkge1xuICAgICAgICAgIGFsaWFzW19rZXkzXSA9IF91bml0Mltfa2V5M107XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYWxpYXMubmFtZSA9IF9uYW1lMjtcbiAgICAgIFVOSVRTW19uYW1lMl0gPSBhbGlhcztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBhc3NlcnRVbml0TmFtZUlzVmFsaWQobmFtZSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIF9jID0gbmFtZS5jaGFyQXQoaSk7XG5cbiAgICAgIHZhciBpc1ZhbGlkQWxwaGEgPSBmdW5jdGlvbiBpc1ZhbGlkQWxwaGEocCkge1xuICAgICAgICByZXR1cm4gL15bYS16QS1aXSQvLnRlc3QocCk7XG4gICAgICB9O1xuXG4gICAgICB2YXIgX2lzRGlnaXQgPSBmdW5jdGlvbiBfaXNEaWdpdChjKSB7XG4gICAgICAgIHJldHVybiBjID49ICcwJyAmJiBjIDw9ICc5JztcbiAgICAgIH07XG5cbiAgICAgIGlmIChpID09PSAwICYmICFpc1ZhbGlkQWxwaGEoX2MpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB1bml0IG5hbWUgKG11c3QgYmVnaW4gd2l0aCBhbHBoYSBjaGFyYWN0ZXIpOiBcIicgKyBuYW1lICsgJ1wiJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpID4gMCAmJiAhKGlzVmFsaWRBbHBoYShfYykgfHwgX2lzRGlnaXQoX2MpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdW5pdCBuYW1lIChvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFyZSBhbGxvd2VkKTogXCInICsgbmFtZSArICdcIicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogV3JhcHBlciBhcm91bmQgY3JlYXRlVW5pdFNpbmdsZS5cbiAgICogRXhhbXBsZTpcbiAgICogIGNyZWF0ZVVuaXQoe1xuICAgKiAgICBmb286IHsgfSxcbiAgICogICAgYmFyOiB7XG4gICAqICAgICAgZGVmaW5pdGlvbjogJ2tnL2ZvbycsXG4gICAqICAgICAgYWxpYXNlczogWydiYScsICdiYXJyJywgJ2JhcnMnXSxcbiAgICogICAgICBvZmZzZXQ6IDIwMFxuICAgKiAgICB9LFxuICAgKiAgICBiYXo6ICc0IGJhcidcbiAgICogIH0sXG4gICAqICB7XG4gICAqICAgIG92ZXJyaWRlOiB0cnVlXG4gICAqICB9KVxuICAgKiBAcGFyYW0ge29iamVjdH0gb2JqICAgICAgT2JqZWN0IG1hcC4gRWFjaCBrZXkgYmVjb21lcyBhIHVuaXQgd2hpY2ggaXMgZGVmaW5lZCBieSBpdHMgdmFsdWUuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuXG5cbiAgVW5pdC5jcmVhdGVVbml0ID0gZnVuY3Rpb24gKG9iaiwgb3B0aW9ucykge1xuICAgIGlmIChfdHlwZW9mKG9iaikgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiY3JlYXRlVW5pdCBleHBlY3RzIGZpcnN0IHBhcmFtZXRlciB0byBiZSBvZiB0eXBlICdPYmplY3QnXCIpO1xuICAgIH0gLy8gUmVtb3ZlIGFsbCB1bml0cyBhbmQgYWxpYXNlcyB3ZSBhcmUgb3ZlcnJpZGluZ1xuXG5cbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLm92ZXJyaWRlKSB7XG4gICAgICBmb3IgKHZhciBfa2V5NCBpbiBvYmopIHtcbiAgICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShvYmosIF9rZXk0KSkge1xuICAgICAgICAgIFVuaXQuZGVsZXRlVW5pdChfa2V5NCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob2JqW19rZXk0XS5hbGlhc2VzKSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmpbX2tleTRdLmFsaWFzZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIFVuaXQuZGVsZXRlVW5pdChvYmpbX2tleTRdLmFsaWFzZXNbaV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gVE9ETzogdHJhdmVyc2UgbXVsdGlwbGUgdGltZXMgdW50aWwgYWxsIHVuaXRzIGhhdmUgYmVlbiBhZGRlZFxuXG5cbiAgICB2YXIgbGFzdFVuaXQ7XG5cbiAgICBmb3IgKHZhciBfa2V5NSBpbiBvYmopIHtcbiAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkob2JqLCBfa2V5NSkpIHtcbiAgICAgICAgbGFzdFVuaXQgPSBVbml0LmNyZWF0ZVVuaXRTaW5nbGUoX2tleTUsIG9ialtfa2V5NV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBsYXN0VW5pdDtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIHVzZXItZGVmaW5lZCB1bml0IGFuZCByZWdpc3RlciBpdCB3aXRoIHRoZSBVbml0IHR5cGUuXG4gICAqIEV4YW1wbGU6XG4gICAqICBjcmVhdGVVbml0U2luZ2xlKCdrbm90JywgJzAuNTE0NDQ0NDQ0IG0vcycpXG4gICAqICBjcmVhdGVVbml0U2luZ2xlKCdhY3JlJywgbmV3IFVuaXQoNDM1NjAsICdmdF4yJykpXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lICAgICAgVGhlIG5hbWUgb2YgdGhlIG5ldyB1bml0LiBNdXN0IGJlIHVuaXF1ZS4gRXhhbXBsZTogJ2tub3QnXG4gICAqIEBwYXJhbSB7c3RyaW5nLCBVbml0LCBPYmplY3R9IGRlZmluaXRpb24gICAgICBEZWZpbml0aW9uIG9mIHRoZSB1bml0IGluIHRlcm1zXG4gICAqIG9mIGV4aXN0aW5nIHVuaXRzLiBGb3IgZXhhbXBsZSwgJzAuNTE0NDQ0NDQ0IG0gLyBzJy4gQ2FuIGJlIGEgVW5pdCwgYSBzdHJpbmcsXG4gICAqIG9yIGFuIE9iamVjdC4gSWYgYW4gT2JqZWN0LCBtYXkgaGF2ZSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gICAqICAgLSBkZWZpbml0aW9uIHtzdHJpbmd8VW5pdH0gVGhlIGRlZmluaXRpb24gb2YgdGhpcyB1bml0LlxuICAgKiAgIC0gcHJlZml4ZXMge3N0cmluZ30gXCJub25lXCIsIFwic2hvcnRcIiwgXCJsb25nXCIsIFwiYmluYXJ5X3Nob3J0XCIsIG9yIFwiYmluYXJ5X2xvbmdcIi5cbiAgICogICAgIFRoZSBkZWZhdWx0IGlzIFwibm9uZVwiLlxuICAgKiAgIC0gYWxpYXNlcyB7QXJyYXl9IEFycmF5IG9mIHN0cmluZ3MuIEV4YW1wbGU6IFsna25vdHMnLCAna3QnLCAna3RzJ11cbiAgICogICAtIG9mZnNldCB7TnVtZXJpY30gQW4gb2Zmc2V0IHRvIGFwcGx5IHdoZW4gY29udmVydGluZyBmcm9tIHRoZSB1bml0LiBGb3JcbiAgICogICAgIGV4YW1wbGUsIHRoZSBvZmZzZXQgZm9yIGNlbHNpdXMgaXMgMjczLjE1IGFuZCB0aGUgb2Zmc2V0IGZvciBmYXJoZW5oZWl0XG4gICAqICAgICBpcyA0NTkuNjcuIERlZmF1bHQgaXMgMC5cbiAgICogICAtIGJhc2VOYW1lIHtzdHJpbmd9IElmIHRoZSB1bml0J3MgZGltZW5zaW9uIGRvZXMgbm90IG1hdGNoIHRoYXQgb2YgYW55IG90aGVyXG4gICAqICAgICBiYXNlIHVuaXQsIHRoZSBuYW1lIG9mIHRoZSBuZXdseSBjcmVhdGUgYmFzZSB1bml0LiBPdGhlcndpc2UsIHRoaXMgcHJvcGVydHlcbiAgICogICAgIGhhcyBubyBlZmZlY3QuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zICAgKG9wdGlvbmFsKSBBbiBvYmplY3QgY29udGFpbmluZyBhbnkgb2YgdGhlIGZvbGxvd2luZ1xuICAgKiBwcm9wZXJ0aWVzOlxuICAgKiAgIC0gb3ZlcnJpZGUge2Jvb2xlYW59IFdoZXRoZXIgdGhpcyB1bml0IHNob3VsZCBiZSBhbGxvd2VkIHRvIG92ZXJyaWRlIGV4aXN0aW5nXG4gICAqICAgICB1bml0cy5cbiAgICpcbiAgICogQHJldHVybiB7VW5pdH1cbiAgICovXG5cblxuICBVbml0LmNyZWF0ZVVuaXRTaW5nbGUgPSBmdW5jdGlvbiAobmFtZSwgb2JqLCBvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnIHx8IG9iaiA9PT0gbnVsbCkge1xuICAgICAgb2JqID0ge307XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImNyZWF0ZVVuaXRTaW5nbGUgZXhwZWN0cyBmaXJzdCBwYXJhbWV0ZXIgdG8gYmUgb2YgdHlwZSAnc3RyaW5nJ1wiKTtcbiAgICB9IC8vIENoZWNrIGNvbGxpc2lvbnMgd2l0aCBleGlzdGluZyB1bml0c1xuXG5cbiAgICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKFVOSVRTLCBuYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY3JlYXRlIHVuaXQgXCInICsgbmFtZSArICdcIjogYSB1bml0IHdpdGggdGhhdCBuYW1lIGFscmVhZHkgZXhpc3RzJyk7XG4gICAgfSAvLyBUT0RPOiBWYWxpZGF0ZSBuYW1lIGZvciBjb2xsaXNpb25zIHdpdGggb3RoZXIgYnVpbHQtaW4gZnVuY3Rpb25zIChsaWtlIGFicyBvciBjb3MsIGZvciBleGFtcGxlKSwgYW5kIGZvciBhY2NlcHRhYmxlIHZhcmlhYmxlIG5hbWVzLiBGb3IgZXhhbXBsZSwgJzQyJyBpcyBwcm9iYWJseSBub3QgYSB2YWxpZCB1bml0LiBOb3IgaXMgJyUnLCBzaW5jZSBpdCBpcyBhbHNvIGFuIG9wZXJhdG9yLlxuXG5cbiAgICBhc3NlcnRVbml0TmFtZUlzVmFsaWQobmFtZSk7XG4gICAgdmFyIGRlZlVuaXQgPSBudWxsOyAvLyBUaGUgVW5pdCBmcm9tIHdoaWNoIHRoZSBuZXcgdW5pdCB3aWxsIGJlIGNyZWF0ZWQuXG5cbiAgICB2YXIgYWxpYXNlcyA9IFtdO1xuICAgIHZhciBvZmZzZXQgPSAwO1xuICAgIHZhciBkZWZpbml0aW9uO1xuICAgIHZhciBwcmVmaXhlcztcbiAgICB2YXIgYmFzZU5hbWU7XG5cbiAgICBpZiAob2JqICYmIG9iai50eXBlID09PSAnVW5pdCcpIHtcbiAgICAgIGRlZlVuaXQgPSBvYmouY2xvbmUoKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAob2JqICE9PSAnJykge1xuICAgICAgICBkZWZpbml0aW9uID0gb2JqO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoX3R5cGVvZihvYmopID09PSAnb2JqZWN0Jykge1xuICAgICAgZGVmaW5pdGlvbiA9IG9iai5kZWZpbml0aW9uO1xuICAgICAgcHJlZml4ZXMgPSBvYmoucHJlZml4ZXM7XG4gICAgICBvZmZzZXQgPSBvYmoub2Zmc2V0O1xuICAgICAgYmFzZU5hbWUgPSBvYmouYmFzZU5hbWU7XG5cbiAgICAgIGlmIChvYmouYWxpYXNlcykge1xuICAgICAgICBhbGlhc2VzID0gb2JqLmFsaWFzZXMudmFsdWVPZigpOyAvLyBhbGlhc2VzIGNvdWxkIGJlIGEgTWF0cml4LCBzbyBjb252ZXJ0IHRvIEFycmF5XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjcmVhdGUgdW5pdCBcIicgKyBuYW1lICsgJ1wiIGZyb20gXCInICsgb2JqLnRvU3RyaW5nKCkgKyAnXCI6IGV4cGVjdGluZyBcInN0cmluZ1wiIG9yIFwiVW5pdFwiIG9yIFwiT2JqZWN0XCInKTtcbiAgICB9XG5cbiAgICBpZiAoYWxpYXNlcykge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGlhc2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoVU5JVFMsIGFsaWFzZXNbaV0pKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY3JlYXRlIGFsaWFzIFwiJyArIGFsaWFzZXNbaV0gKyAnXCI6IGEgdW5pdCB3aXRoIHRoYXQgbmFtZSBhbHJlYWR5IGV4aXN0cycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRlZmluaXRpb24gJiYgdHlwZW9mIGRlZmluaXRpb24gPT09ICdzdHJpbmcnICYmICFkZWZVbml0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBkZWZVbml0ID0gVW5pdC5wYXJzZShkZWZpbml0aW9uLCB7XG4gICAgICAgICAgYWxsb3dOb1VuaXRzOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgZXgubWVzc2FnZSA9ICdDb3VsZCBub3QgY3JlYXRlIHVuaXQgXCInICsgbmFtZSArICdcIiBmcm9tIFwiJyArIGRlZmluaXRpb24gKyAnXCI6ICcgKyBleC5tZXNzYWdlO1xuICAgICAgICB0aHJvdyBleDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRlZmluaXRpb24gJiYgZGVmaW5pdGlvbi50eXBlID09PSAnVW5pdCcpIHtcbiAgICAgIGRlZlVuaXQgPSBkZWZpbml0aW9uLmNsb25lKCk7XG4gICAgfVxuXG4gICAgYWxpYXNlcyA9IGFsaWFzZXMgfHwgW107XG4gICAgb2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cbiAgICBpZiAocHJlZml4ZXMgJiYgcHJlZml4ZXMudG9VcHBlckNhc2UpIHtcbiAgICAgIHByZWZpeGVzID0gUFJFRklYRVNbcHJlZml4ZXMudG9VcHBlckNhc2UoKV0gfHwgUFJFRklYRVMuTk9ORTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJlZml4ZXMgPSBQUkVGSVhFUy5OT05FO1xuICAgIH0gLy8gSWYgZGVmVW5pdCBpcyBudWxsLCBpdCBpcyBiZWNhdXNlIHRoZSB1c2VyIGRpZCBub3RcbiAgICAvLyBzcGVjaWZ5IGEgZGVmaW50aW9uLiBTbyBjcmVhdGUgYSBuZXcgYmFzZSBkaW1lbnNpb24uXG5cblxuICAgIHZhciBuZXdVbml0ID0ge307XG5cbiAgICBpZiAoIWRlZlVuaXQpIHtcbiAgICAgIC8vIEFkZCBhIG5ldyBiYXNlIGRpbWVuc2lvblxuICAgICAgYmFzZU5hbWUgPSBiYXNlTmFtZSB8fCBuYW1lICsgJ19TVFVGRic7IC8vIGZvbyAtLT4gZm9vX1NUVUZGLCBvciB0aGUgZXNzZW5jZSBvZiBmb29cblxuICAgICAgaWYgKEJBU0VfRElNRU5TSU9OUy5pbmRleE9mKGJhc2VOYW1lKSA+PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNyZWF0ZSBuZXcgYmFzZSB1bml0IFwiJyArIG5hbWUgKyAnXCI6IGEgYmFzZSB1bml0IHdpdGggdGhhdCBuYW1lIGFscmVhZHkgZXhpc3RzIChhbmQgY2Fubm90IGJlIG92ZXJyaWRkZW4pJyk7XG4gICAgICB9XG5cbiAgICAgIEJBU0VfRElNRU5TSU9OUy5wdXNoKGJhc2VOYW1lKTsgLy8gUHVzaCAwIG9udG8gZXhpc3RpbmcgYmFzZSB1bml0c1xuXG4gICAgICBmb3IgKHZhciBiIGluIEJBU0VfVU5JVFMpIHtcbiAgICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShCQVNFX1VOSVRTLCBiKSkge1xuICAgICAgICAgIEJBU0VfVU5JVFNbYl0uZGltZW5zaW9uc1tCQVNFX0RJTUVOU0lPTlMubGVuZ3RoIC0gMV0gPSAwO1xuICAgICAgICB9XG4gICAgICB9IC8vIEFkZCB0aGUgbmV3IGJhc2UgdW5pdFxuXG5cbiAgICAgIHZhciBuZXdCYXNlVW5pdCA9IHtcbiAgICAgICAgZGltZW5zaW9uczogW11cbiAgICAgIH07XG5cbiAgICAgIGZvciAodmFyIF9pNiA9IDA7IF9pNiA8IEJBU0VfRElNRU5TSU9OUy5sZW5ndGg7IF9pNisrKSB7XG4gICAgICAgIG5ld0Jhc2VVbml0LmRpbWVuc2lvbnNbX2k2XSA9IDA7XG4gICAgICB9XG5cbiAgICAgIG5ld0Jhc2VVbml0LmRpbWVuc2lvbnNbQkFTRV9ESU1FTlNJT05TLmxlbmd0aCAtIDFdID0gMTtcbiAgICAgIG5ld0Jhc2VVbml0LmtleSA9IGJhc2VOYW1lO1xuICAgICAgQkFTRV9VTklUU1tiYXNlTmFtZV0gPSBuZXdCYXNlVW5pdDtcbiAgICAgIG5ld1VuaXQgPSB7XG4gICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgIHZhbHVlOiAxLFxuICAgICAgICBkaW1lbnNpb25zOiBCQVNFX1VOSVRTW2Jhc2VOYW1lXS5kaW1lbnNpb25zLnNsaWNlKDApLFxuICAgICAgICBwcmVmaXhlczogcHJlZml4ZXMsXG4gICAgICAgIG9mZnNldDogb2Zmc2V0LFxuICAgICAgICBiYXNlOiBCQVNFX1VOSVRTW2Jhc2VOYW1lXVxuICAgICAgfTtcbiAgICAgIGN1cnJlbnRVbml0U3lzdGVtW2Jhc2VOYW1lXSA9IHtcbiAgICAgICAgdW5pdDogbmV3VW5pdCxcbiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5OT05FWycnXVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3VW5pdCA9IHtcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgdmFsdWU6IGRlZlVuaXQudmFsdWUsXG4gICAgICAgIGRpbWVuc2lvbnM6IGRlZlVuaXQuZGltZW5zaW9ucy5zbGljZSgwKSxcbiAgICAgICAgcHJlZml4ZXM6IHByZWZpeGVzLFxuICAgICAgICBvZmZzZXQ6IG9mZnNldFxuICAgICAgfTsgLy8gQ3JlYXRlIGEgbmV3IGJhc2UgaWYgbm8gbWF0Y2hpbmcgYmFzZSBleGlzdHNcblxuICAgICAgdmFyIGFueU1hdGNoID0gZmFsc2U7XG5cbiAgICAgIGZvciAodmFyIF9pNyBpbiBCQVNFX1VOSVRTKSB7XG4gICAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoQkFTRV9VTklUUywgX2k3KSkge1xuICAgICAgICAgIHZhciBtYXRjaCA9IHRydWU7XG5cbiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IEJBU0VfRElNRU5TSU9OUy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgaWYgKE1hdGguYWJzKChuZXdVbml0LmRpbWVuc2lvbnNbal0gfHwgMCkgLSAoQkFTRV9VTklUU1tfaTddLmRpbWVuc2lvbnNbal0gfHwgMCkpID4gMWUtMTIpIHtcbiAgICAgICAgICAgICAgbWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICBhbnlNYXRjaCA9IHRydWU7XG4gICAgICAgICAgICBuZXdVbml0LmJhc2UgPSBCQVNFX1VOSVRTW19pN107XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFhbnlNYXRjaCkge1xuICAgICAgICBiYXNlTmFtZSA9IGJhc2VOYW1lIHx8IG5hbWUgKyAnX1NUVUZGJzsgLy8gZm9vIC0tPiBmb29fU1RVRkYsIG9yIHRoZSBlc3NlbmNlIG9mIGZvb1xuICAgICAgICAvLyBBZGQgdGhlIG5ldyBiYXNlIHVuaXRcblxuICAgICAgICB2YXIgX25ld0Jhc2VVbml0ID0ge1xuICAgICAgICAgIGRpbWVuc2lvbnM6IGRlZlVuaXQuZGltZW5zaW9ucy5zbGljZSgwKVxuICAgICAgICB9O1xuICAgICAgICBfbmV3QmFzZVVuaXQua2V5ID0gYmFzZU5hbWU7XG4gICAgICAgIEJBU0VfVU5JVFNbYmFzZU5hbWVdID0gX25ld0Jhc2VVbml0O1xuICAgICAgICBjdXJyZW50VW5pdFN5c3RlbVtiYXNlTmFtZV0gPSB7XG4gICAgICAgICAgdW5pdDogbmV3VW5pdCxcbiAgICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLk5PTkVbJyddXG4gICAgICAgIH07XG4gICAgICAgIG5ld1VuaXQuYmFzZSA9IEJBU0VfVU5JVFNbYmFzZU5hbWVdO1xuICAgICAgfVxuICAgIH1cblxuICAgIFVuaXQuVU5JVFNbbmFtZV0gPSBuZXdVbml0O1xuXG4gICAgZm9yICh2YXIgX2k4ID0gMDsgX2k4IDwgYWxpYXNlcy5sZW5ndGg7IF9pOCsrKSB7XG4gICAgICB2YXIgYWxpYXNOYW1lID0gYWxpYXNlc1tfaThdO1xuICAgICAgdmFyIF9hbGlhcyA9IHt9O1xuXG4gICAgICBmb3IgKHZhciBfa2V5NiBpbiBuZXdVbml0KSB7XG4gICAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkobmV3VW5pdCwgX2tleTYpKSB7XG4gICAgICAgICAgX2FsaWFzW19rZXk2XSA9IG5ld1VuaXRbX2tleTZdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIF9hbGlhcy5uYW1lID0gYWxpYXNOYW1lO1xuICAgICAgVW5pdC5VTklUU1thbGlhc05hbWVdID0gX2FsaWFzO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgVW5pdChudWxsLCBuYW1lKTtcbiAgfTtcblxuICBVbml0LmRlbGV0ZVVuaXQgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIGRlbGV0ZSBVbml0LlVOSVRTW25hbWVdO1xuICB9OyAvLyBleHBvc2UgYXJyYXlzIHdpdGggcHJlZml4ZXMsIGRpbWVuc2lvbnMsIHVuaXRzLCBzeXN0ZW1zXG5cblxuICBVbml0LlBSRUZJWEVTID0gUFJFRklYRVM7XG4gIFVuaXQuQkFTRV9ESU1FTlNJT05TID0gQkFTRV9ESU1FTlNJT05TO1xuICBVbml0LkJBU0VfVU5JVFMgPSBCQVNFX1VOSVRTO1xuICBVbml0LlVOSVRfU1lTVEVNUyA9IFVOSVRfU1lTVEVNUztcbiAgVW5pdC5VTklUUyA9IFVOSVRTO1xuICByZXR1cm4gVW5pdDtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVVuaXRDbGFzcyA9IGNyZWF0ZVVuaXRDbGFzczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ3JlYXRlVW5pdCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2NyZWF0ZVVuaXQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnVW5pdCddO1xudmFyIGNyZWF0ZUNyZWF0ZVVuaXQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgVW5pdCA9IF9yZWYuVW5pdDtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgdXNlci1kZWZpbmVkIHVuaXQgYW5kIHJlZ2lzdGVyIGl0IHdpdGggdGhlIFVuaXQgdHlwZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5jcmVhdGVVbml0KHtcbiAgICogICAgICAgYmFzZVVuaXQxOiB7XG4gICAqICAgICAgICAgYWxpYXNlczogW3N0cmluZywgLi4uXVxuICAgKiAgICAgICAgIHByZWZpeGVzOiBvYmplY3RcbiAgICogICAgICAgfSxcbiAgICogICAgICAgdW5pdDI6IHtcbiAgICogICAgICAgICBkZWZpbml0aW9uOiBzdHJpbmcsXG4gICAqICAgICAgICAgYWxpYXNlczogW3N0cmluZywgLi4uXVxuICAgKiAgICAgICAgIHByZWZpeGVzOiBvYmplY3QsXG4gICAqICAgICAgICAgb2Zmc2V0OiBudW1iZXJcbiAgICogICAgICAgfSxcbiAgICogICAgICAgdW5pdDM6IHN0cmluZyAgICAvLyBTaG9ydGN1dFxuICAgKiAgICAgfSlcbiAgICpcbiAgICogICAgIC8vIEFub3RoZXIgc2hvcnRjdXQ6XG4gICAqICAgICBtYXRoLmNyZWF0ZVVuaXQoc3RyaW5nLCB1bml0IDogc3RyaW5nLCBbb2JqZWN0XSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLmNyZWF0ZVVuaXQoJ2ZvbycpXG4gICAqICAgICBtYXRoLmNyZWF0ZVVuaXQoJ2tub3QnLCB7ZGVmaW5pdGlvbjogJzAuNTE0NDQ0NDQ0IG0vcycsIGFsaWFzZXM6IFsna25vdHMnLCAna3QnLCAna3RzJ119KVxuICAgKiAgICAgbWF0aC5jcmVhdGVVbml0KCdtcGgnLCAnMSBtaWxlL2hvdXInKVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAgICAgIFRoZSBuYW1lIG9mIHRoZSBuZXcgdW5pdC4gTXVzdCBiZSB1bmlxdWUuIEV4YW1wbGU6ICdrbm90J1xuICAgKiBAcGFyYW0ge3N0cmluZywgVW5pdH0gZGVmaW5pdGlvbiAgICAgIERlZmluaXRpb24gb2YgdGhlIHVuaXQgaW4gdGVybXMgb2YgZXhpc3RpbmcgdW5pdHMuIEZvciBleGFtcGxlLCAnMC41MTQ0NDQ0NDQgbSAvIHMnLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAgIChvcHRpb25hbCkgQW4gb2JqZWN0IGNvbnRhaW5pbmcgYW55IG9mIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAgICogICAgIC0gYHByZWZpeGVzIHtzdHJpbmd9YCBcIm5vbmVcIiwgXCJzaG9ydFwiLCBcImxvbmdcIiwgXCJiaW5hcnlfc2hvcnRcIiwgb3IgXCJiaW5hcnlfbG9uZ1wiLiBUaGUgZGVmYXVsdCBpcyBcIm5vbmVcIi5cbiAgICogICAgIC0gYGFsaWFzZXMge0FycmF5fWAgQXJyYXkgb2Ygc3RyaW5ncy4gRXhhbXBsZTogWydrbm90cycsICdrdCcsICdrdHMnXVxuICAgKiAgICAgLSBgb2Zmc2V0IHtOdW1lcmljfWAgQW4gb2Zmc2V0IHRvIGFwcGx5IHdoZW4gY29udmVydGluZyBmcm9tIHRoZSB1bml0LiBGb3IgZXhhbXBsZSwgdGhlIG9mZnNldCBmb3IgY2Vsc2l1cyBpcyAyNzMuMTUuIERlZmF1bHQgaXMgMC5cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICB1bml0XG4gICAqXG4gICAqIEByZXR1cm4ge1VuaXR9IFRoZSBuZXcgdW5pdFxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAvLyBHZW5lcmFsIGZ1bmN0aW9uIHNpZ25hdHVyZS4gRmlyc3QgcGFyYW1ldGVyIGlzIGFuIG9iamVjdCB3aGVyZSBlYWNoIHByb3BlcnR5IGlzIHRoZSBkZWZpbml0aW9uIG9mIGEgbmV3IHVuaXQuIFRoZSBvYmplY3Qga2V5cyBhcmUgdGhlIHVuaXQgbmFtZXMgYW5kIHRoZSB2YWx1ZXMgYXJlIHRoZSBkZWZpbml0aW9ucy4gVGhlIHZhbHVlcyBjYW4gYmUgb2JqZWN0cywgc3RyaW5ncywgb3IgVW5pdHMuIElmIGEgcHJvcGVydHkgaXMgYW4gZW1wdHkgb2JqZWN0IG9yIGFuIGVtcHR5IHN0cmluZywgYSBuZXcgYmFzZSB1bml0IGlzIGNyZWF0ZWQuIFRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIHRoZSBvcHRpb25zLlxuICAgICdPYmplY3QsIE9iamVjdCc6IGZ1bmN0aW9uIE9iamVjdE9iamVjdChvYmosIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBVbml0LmNyZWF0ZVVuaXQob2JqLCBvcHRpb25zKTtcbiAgICB9LFxuICAgIC8vIFNhbWUgYXMgYWJvdmUgYnV0IHdpdGhvdXQgdGhlIG9wdGlvbnMuXG4gICAgT2JqZWN0OiBmdW5jdGlvbiBPYmplY3Qob2JqKSB7XG4gICAgICByZXR1cm4gVW5pdC5jcmVhdGVVbml0KG9iaiwge30pO1xuICAgIH0sXG4gICAgLy8gU2hvcnRjdXQgbWV0aG9kIGZvciBjcmVhdGluZyBvbmUgdW5pdC5cbiAgICAnc3RyaW5nLCBVbml0IHwgc3RyaW5nIHwgT2JqZWN0LCBPYmplY3QnOiBmdW5jdGlvbiBzdHJpbmdVbml0U3RyaW5nT2JqZWN0T2JqZWN0KG5hbWUsIGRlZiwgb3B0aW9ucykge1xuICAgICAgdmFyIG9iaiA9IHt9O1xuICAgICAgb2JqW25hbWVdID0gZGVmO1xuICAgICAgcmV0dXJuIFVuaXQuY3JlYXRlVW5pdChvYmosIG9wdGlvbnMpO1xuICAgIH0sXG4gICAgLy8gU2FtZSBhcyBhYm92ZSBidXQgd2l0aG91dCB0aGUgb3B0aW9ucy5cbiAgICAnc3RyaW5nLCBVbml0IHwgc3RyaW5nIHwgT2JqZWN0JzogZnVuY3Rpb24gc3RyaW5nVW5pdFN0cmluZ09iamVjdChuYW1lLCBkZWYpIHtcbiAgICAgIHZhciBvYmogPSB7fTtcbiAgICAgIG9ialtuYW1lXSA9IGRlZjtcbiAgICAgIHJldHVybiBVbml0LmNyZWF0ZVVuaXQob2JqLCB7fSk7XG4gICAgfSxcbiAgICAvLyBXaXRob3V0IGEgZGVmaW5pdGlvbiwgY3JlYXRlcyBhIGJhc2UgdW5pdC5cbiAgICBzdHJpbmc6IGZ1bmN0aW9uIHN0cmluZyhuYW1lKSB7XG4gICAgICB2YXIgb2JqID0ge307XG4gICAgICBvYmpbbmFtZV0gPSB7fTtcbiAgICAgIHJldHVybiBVbml0LmNyZWF0ZVVuaXQob2JqLCB7fSk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVDcmVhdGVVbml0ID0gY3JlYXRlQ3JlYXRlVW5pdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3BsaXRVbml0ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnc3BsaXRVbml0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlU3BsaXRVbml0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogU3BsaXQgYSB1bml0IGluIGFuIGFycmF5IG9mIHVuaXRzIHdob3NlIHN1bSBpcyBlcXVhbCB0byB0aGUgb3JpZ2luYWwgdW5pdC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgc3BsaXRVbml0KHVuaXQ6IFVuaXQsIHBhcnRzOiBBcnJheS48VW5pdD4pXG4gICAqXG4gICAqIEV4YW1wbGU6XG4gICAqXG4gICAqICAgICBtYXRoLnNwbGl0VW5pdChuZXcgVW5pdCgxLCAnbScpLCBbJ2ZlZXQnLCAnaW5jaCddKVxuICAgKiAgICAgLy8gWyAzIGZlZXQsIDMuMzcwMDc4NzQwMTU3NSBpbmNoIF1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICB1bml0XG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IFtwYXJ0c10gQW4gYXJyYXkgb2Ygc3RyaW5ncyBvciB2YWx1ZWxlc3MgdW5pdHMuXG4gICAqIEByZXR1cm4ge0FycmF5fSBBbiBhcnJheSBvZiB1bml0cy5cbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ1VuaXQsIEFycmF5JzogZnVuY3Rpb24gVW5pdEFycmF5KHVuaXQsIHBhcnRzKSB7XG4gICAgICByZXR1cm4gdW5pdC5zcGxpdFVuaXQocGFydHMpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlU3BsaXRVbml0ID0gY3JlYXRlU3BsaXRVbml0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVVbml0RnVuY3Rpb24gPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIG5hbWUgPSAndW5pdCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdVbml0J107IC8vIFRoaXMgZnVuY3Rpb24gaXMgbmFtZWQgY3JlYXRlVW5pdEZ1bmN0aW9uIHRvIHByZXZlbnQgYSBuYW1pbmcgY29uZmxpY3Qgd2l0aCBjcmVhdGVVbml0XG5cbnZhciBjcmVhdGVVbml0RnVuY3Rpb24gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgVW5pdCA9IF9yZWYuVW5pdDtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgdW5pdC4gRGVwZW5kaW5nIG9uIHRoZSBwYXNzZWQgYXJndW1lbnRzLCB0aGUgZnVuY3Rpb25cbiAgICogd2lsbCBjcmVhdGUgYW5kIHJldHVybiBhIG5ldyBtYXRoLlVuaXQgb2JqZWN0LlxuICAgKiBXaGVuIGEgbWF0cml4IGlzIHByb3ZpZGVkLCBhbGwgZWxlbWVudHMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gdW5pdHMuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGgudW5pdCh1bml0IDogc3RyaW5nKVxuICAgKiAgICAgbWF0aC51bml0KHZhbHVlIDogbnVtYmVyLCB1bml0IDogc3RyaW5nKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgY29uc3QgYSA9IG1hdGgudW5pdCg1LCAnY20nKSAgICAvLyByZXR1cm5zIFVuaXQgNTAgbW1cbiAgICogICAgY29uc3QgYiA9IG1hdGgudW5pdCgnMjMga2cnKSAgICAvLyByZXR1cm5zIFVuaXQgMjMga2dcbiAgICogICAgYS50bygnbScpICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIFVuaXQgMC4wNSBtXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiaWdudW1iZXIsIGJvb2xlYW4sIGNvbXBsZXgsIGluZGV4LCBtYXRyaXgsIG51bWJlciwgc3RyaW5nLCBjcmVhdGVVbml0XG4gICAqXG4gICAqIEBwYXJhbSB7KiB8IEFycmF5IHwgTWF0cml4fSBhcmdzICAgQSBudW1iZXIgYW5kIHVuaXQuXG4gICAqIEByZXR1cm4ge1VuaXQgfCBBcnJheSB8IE1hdHJpeH0gICAgVGhlIGNyZWF0ZWQgdW5pdFxuICAgKi9cbiAgdmFyIHVuaXQgPSB0eXBlZChuYW1lLCB7XG4gICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7XG4gICAgICByZXR1cm4geC5jbG9uZSgpO1xuICAgIH0sXG4gICAgc3RyaW5nOiBmdW5jdGlvbiBzdHJpbmcoeCkge1xuICAgICAgaWYgKFVuaXQuaXNWYWx1ZWxlc3NVbml0KHgpKSB7XG4gICAgICAgIHJldHVybiBuZXcgVW5pdChudWxsLCB4KTsgLy8gYSBwdXJlIHVuaXRcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFVuaXQucGFyc2UoeCwge1xuICAgICAgICBhbGxvd05vVW5pdHM6IHRydWVcbiAgICAgIH0pOyAvLyBhIHVuaXQgd2l0aCB2YWx1ZSwgbGlrZSAnNWNtJ1xuICAgIH0sXG4gICAgJ251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCwgc3RyaW5nJzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyRnJhY3Rpb25Db21wbGV4U3RyaW5nKHZhbHVlLCB1bml0KSB7XG4gICAgICByZXR1cm4gbmV3IFVuaXQodmFsdWUsIHVuaXQpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCB1bml0KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gdW5pdDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVVbml0RnVuY3Rpb24gPSBjcmVhdGVVbml0RnVuY3Rpb247IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVBsYW5ja1RlbXBlcmF0dXJlID0gZXhwb3J0cy5jcmVhdGVQbGFuY2tDaGFyZ2UgPSBleHBvcnRzLmNyZWF0ZVBsYW5ja1RpbWUgPSBleHBvcnRzLmNyZWF0ZVBsYW5ja01hc3MgPSBleHBvcnRzLmNyZWF0ZVBsYW5ja0xlbmd0aCA9IGV4cG9ydHMuY3JlYXRlR3Jhdml0eSA9IGV4cG9ydHMuY3JlYXRlTW9sYXJNYXNzQzEyID0gZXhwb3J0cy5jcmVhdGVNb2xhck1hc3MgPSBleHBvcnRzLmNyZWF0ZVdpZW5EaXNwbGFjZW1lbnQgPSBleHBvcnRzLmNyZWF0ZVN0ZWZhbkJvbHR6bWFubiA9IGV4cG9ydHMuY3JlYXRlU2Vjb25kUmFkaWF0aW9uID0gZXhwb3J0cy5jcmVhdGVTYWNrdXJUZXRyb2RlID0gZXhwb3J0cy5jcmVhdGVNb2xhclZvbHVtZSA9IGV4cG9ydHMuY3JlYXRlTW9sYXJQbGFuY2tDb25zdGFudCA9IGV4cG9ydHMuY3JlYXRlR2FzQ29uc3RhbnQgPSBleHBvcnRzLmNyZWF0ZUxvc2NobWlkdCA9IGV4cG9ydHMuY3JlYXRlRmlyc3RSYWRpYXRpb24gPSBleHBvcnRzLmNyZWF0ZUZhcmFkYXkgPSBleHBvcnRzLmNyZWF0ZUJvbHR6bWFubiA9IGV4cG9ydHMuY3JlYXRlQXZvZ2Fkcm8gPSBleHBvcnRzLmNyZWF0ZUF0b21pY01hc3MgPSBleHBvcnRzLmNyZWF0ZUVmaW1vdkZhY3RvciA9IGV4cG9ydHMuY3JlYXRlV2Vha01peGluZ0FuZ2xlID0gZXhwb3J0cy5jcmVhdGVUaG9tc29uQ3Jvc3NTZWN0aW9uID0gZXhwb3J0cy5jcmVhdGVSeWRiZXJnID0gZXhwb3J0cy5jcmVhdGVRdWFudHVtT2ZDaXJjdWxhdGlvbiA9IGV4cG9ydHMuY3JlYXRlTmV1dHJvbk1hc3MgPSBleHBvcnRzLmNyZWF0ZURldXRlcm9uTWFzcyA9IGV4cG9ydHMuY3JlYXRlUHJvdG9uTWFzcyA9IGV4cG9ydHMuY3JlYXRlSGFydHJlZUVuZXJneSA9IGV4cG9ydHMuY3JlYXRlRmluZVN0cnVjdHVyZSA9IGV4cG9ydHMuY3JlYXRlRmVybWlDb3VwbGluZyA9IGV4cG9ydHMuY3JlYXRlRWxlY3Ryb25NYXNzID0gZXhwb3J0cy5jcmVhdGVDbGFzc2ljYWxFbGVjdHJvblJhZGl1cyA9IGV4cG9ydHMuY3JlYXRlQm9oclJhZGl1cyA9IGV4cG9ydHMuY3JlYXRlSm9zZXBoc29uID0gZXhwb3J0cy5jcmVhdGVLbGl0emluZyA9IGV4cG9ydHMuY3JlYXRlTnVjbGVhck1hZ25ldG9uID0gZXhwb3J0cy5jcmVhdGVNYWduZXRpY0ZsdXhRdWFudHVtID0gZXhwb3J0cy5jcmVhdGVJbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtID0gZXhwb3J0cy5jcmVhdGVDb25kdWN0YW5jZVF1YW50dW0gPSBleHBvcnRzLmNyZWF0ZUJvaHJNYWduZXRvbiA9IGV4cG9ydHMuY3JlYXRlRWxlbWVudGFyeUNoYXJnZSA9IGV4cG9ydHMuY3JlYXRlQ291bG9tYiA9IGV4cG9ydHMuY3JlYXRlVmFjdXVtSW1wZWRhbmNlID0gZXhwb3J0cy5jcmVhdGVFbGVjdHJpY0NvbnN0YW50ID0gZXhwb3J0cy5jcmVhdGVNYWduZXRpY0NvbnN0YW50ID0gZXhwb3J0cy5jcmVhdGVSZWR1Y2VkUGxhbmNrQ29uc3RhbnQgPSBleHBvcnRzLmNyZWF0ZVBsYW5ja0NvbnN0YW50ID0gZXhwb3J0cy5jcmVhdGVHcmF2aXRhdGlvbkNvbnN0YW50ID0gZXhwb3J0cy5jcmVhdGVTcGVlZE9mTGlnaHQgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG4vLyBTb3VyY2U6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1BoeXNpY2FsX2NvbnN0YW50XG4vLyBVbml2ZXJzYWwgY29uc3RhbnRzXG52YXIgY3JlYXRlU3BlZWRPZkxpZ2h0ID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ3NwZWVkT2ZMaWdodCcsICcyOTk3OTI0NTgnLCAnbSBzXi0xJyk7XG5leHBvcnRzLmNyZWF0ZVNwZWVkT2ZMaWdodCA9IGNyZWF0ZVNwZWVkT2ZMaWdodDtcbnZhciBjcmVhdGVHcmF2aXRhdGlvbkNvbnN0YW50ID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ2dyYXZpdGF0aW9uQ29uc3RhbnQnLCAnNi42NzQzMGUtMTEnLCAnbV4zIGtnXi0xIHNeLTInKTtcbmV4cG9ydHMuY3JlYXRlR3Jhdml0YXRpb25Db25zdGFudCA9IGNyZWF0ZUdyYXZpdGF0aW9uQ29uc3RhbnQ7XG52YXIgY3JlYXRlUGxhbmNrQ29uc3RhbnQgPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgncGxhbmNrQ29uc3RhbnQnLCAnNi42MjYwNzAxNWUtMzQnLCAnSiBzJyk7XG5leHBvcnRzLmNyZWF0ZVBsYW5ja0NvbnN0YW50ID0gY3JlYXRlUGxhbmNrQ29uc3RhbnQ7XG52YXIgY3JlYXRlUmVkdWNlZFBsYW5ja0NvbnN0YW50ID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ3JlZHVjZWRQbGFuY2tDb25zdGFudCcsICcxLjA1NDU3MTgxNzY0NjE1NjVlLTM0JywgJ0ogcycpOyAvLyBFbGVjdHJvbWFnbmV0aWMgY29uc3RhbnRzXG5cbmV4cG9ydHMuY3JlYXRlUmVkdWNlZFBsYW5ja0NvbnN0YW50ID0gY3JlYXRlUmVkdWNlZFBsYW5ja0NvbnN0YW50O1xudmFyIGNyZWF0ZU1hZ25ldGljQ29uc3RhbnQgPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgnbWFnbmV0aWNDb25zdGFudCcsICcxLjI1NjYzNzA2MjEyZS02JywgJ04gQV4tMicpO1xuZXhwb3J0cy5jcmVhdGVNYWduZXRpY0NvbnN0YW50ID0gY3JlYXRlTWFnbmV0aWNDb25zdGFudDtcbnZhciBjcmVhdGVFbGVjdHJpY0NvbnN0YW50ID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ2VsZWN0cmljQ29uc3RhbnQnLCAnOC44NTQxODc4MTI4ZS0xMicsICdGIG1eLTEnKTtcbmV4cG9ydHMuY3JlYXRlRWxlY3RyaWNDb25zdGFudCA9IGNyZWF0ZUVsZWN0cmljQ29uc3RhbnQ7XG52YXIgY3JlYXRlVmFjdXVtSW1wZWRhbmNlID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ3ZhY3V1bUltcGVkYW5jZScsICczNzYuNzMwMzEzNjY3JywgJ29obScpO1xuZXhwb3J0cy5jcmVhdGVWYWN1dW1JbXBlZGFuY2UgPSBjcmVhdGVWYWN1dW1JbXBlZGFuY2U7XG52YXIgY3JlYXRlQ291bG9tYiA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdjb3Vsb21iJywgJzguOTg3NTUxNzkyMjYxMTcxZTknLCAnTiBtXjIgQ14tMicpO1xuZXhwb3J0cy5jcmVhdGVDb3Vsb21iID0gY3JlYXRlQ291bG9tYjtcbnZhciBjcmVhdGVFbGVtZW50YXJ5Q2hhcmdlID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ2VsZW1lbnRhcnlDaGFyZ2UnLCAnMS42MDIxNzY2MzRlLTE5JywgJ0MnKTtcbmV4cG9ydHMuY3JlYXRlRWxlbWVudGFyeUNoYXJnZSA9IGNyZWF0ZUVsZW1lbnRhcnlDaGFyZ2U7XG52YXIgY3JlYXRlQm9ock1hZ25ldG9uID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ2JvaHJNYWduZXRvbicsICc5LjI3NDAxMDA3ODNlLTI0JywgJ0ogVF4tMScpO1xuZXhwb3J0cy5jcmVhdGVCb2hyTWFnbmV0b24gPSBjcmVhdGVCb2hyTWFnbmV0b247XG52YXIgY3JlYXRlQ29uZHVjdGFuY2VRdWFudHVtID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ2NvbmR1Y3RhbmNlUXVhbnR1bScsICc3Ljc0ODA5MTcyOTg2MzY0OWUtNScsICdTJyk7XG5leHBvcnRzLmNyZWF0ZUNvbmR1Y3RhbmNlUXVhbnR1bSA9IGNyZWF0ZUNvbmR1Y3RhbmNlUXVhbnR1bTtcbnZhciBjcmVhdGVJbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ2ludmVyc2VDb25kdWN0YW5jZVF1YW50dW0nLCAnMTI5MDYuNDAzNzI5NjUyMjU3JywgJ29obScpO1xuZXhwb3J0cy5jcmVhdGVJbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtID0gY3JlYXRlSW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bTtcbnZhciBjcmVhdGVNYWduZXRpY0ZsdXhRdWFudHVtID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ21hZ25ldGljRmx1eFF1YW50dW0nLCAnMi4wNjc4MzM4NDg0NjE5Mjk1ZS0xNScsICdXYicpO1xuZXhwb3J0cy5jcmVhdGVNYWduZXRpY0ZsdXhRdWFudHVtID0gY3JlYXRlTWFnbmV0aWNGbHV4UXVhbnR1bTtcbnZhciBjcmVhdGVOdWNsZWFyTWFnbmV0b24gPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgnbnVjbGVhck1hZ25ldG9uJywgJzUuMDUwNzgzNzQ2MWUtMjcnLCAnSiBUXi0xJyk7XG5leHBvcnRzLmNyZWF0ZU51Y2xlYXJNYWduZXRvbiA9IGNyZWF0ZU51Y2xlYXJNYWduZXRvbjtcbnZhciBjcmVhdGVLbGl0emluZyA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdrbGl0emluZycsICcyNTgxMi44MDc0NTkzMDQ1MTMnLCAnb2htJyk7XG5leHBvcnRzLmNyZWF0ZUtsaXR6aW5nID0gY3JlYXRlS2xpdHppbmc7XG52YXIgY3JlYXRlSm9zZXBoc29uID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ2pvc2VwaHNvbicsICc0LjgzNTk3ODQ4NDE2OTgzNmUxNCBIeiBWJywgJ0h6IFZeLTEnKTsgLy8gVE9ETzogc3VwcG9ydCBmb3IgSHogbmVlZGVkXG4vLyBBdG9taWMgYW5kIG51Y2xlYXIgY29uc3RhbnRzXG5cbmV4cG9ydHMuY3JlYXRlSm9zZXBoc29uID0gY3JlYXRlSm9zZXBoc29uO1xudmFyIGNyZWF0ZUJvaHJSYWRpdXMgPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgnYm9oclJhZGl1cycsICc1LjI5MTc3MjEwOTAzZS0xMScsICdtJyk7XG5leHBvcnRzLmNyZWF0ZUJvaHJSYWRpdXMgPSBjcmVhdGVCb2hyUmFkaXVzO1xudmFyIGNyZWF0ZUNsYXNzaWNhbEVsZWN0cm9uUmFkaXVzID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ2NsYXNzaWNhbEVsZWN0cm9uUmFkaXVzJywgJzIuODE3OTQwMzI2MmUtMTUnLCAnbScpO1xuZXhwb3J0cy5jcmVhdGVDbGFzc2ljYWxFbGVjdHJvblJhZGl1cyA9IGNyZWF0ZUNsYXNzaWNhbEVsZWN0cm9uUmFkaXVzO1xudmFyIGNyZWF0ZUVsZWN0cm9uTWFzcyA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdlbGVjdHJvbk1hc3MnLCAnOS4xMDkzODM3MDE1ZS0zMScsICdrZycpO1xuZXhwb3J0cy5jcmVhdGVFbGVjdHJvbk1hc3MgPSBjcmVhdGVFbGVjdHJvbk1hc3M7XG52YXIgY3JlYXRlRmVybWlDb3VwbGluZyA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdmZXJtaUNvdXBsaW5nJywgJzEuMTY2Mzc4N2UtNScsICdHZVZeLTInKTtcbmV4cG9ydHMuY3JlYXRlRmVybWlDb3VwbGluZyA9IGNyZWF0ZUZlcm1pQ291cGxpbmc7XG52YXIgY3JlYXRlRmluZVN0cnVjdHVyZSA9IG51bWJlckZhY3RvcnkoJ2ZpbmVTdHJ1Y3R1cmUnLCA3LjI5NzM1MjU2OTNlLTMpO1xuZXhwb3J0cy5jcmVhdGVGaW5lU3RydWN0dXJlID0gY3JlYXRlRmluZVN0cnVjdHVyZTtcbnZhciBjcmVhdGVIYXJ0cmVlRW5lcmd5ID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ2hhcnRyZWVFbmVyZ3knLCAnNC4zNTk3NDQ3MjIyMDcxZS0xOCcsICdKJyk7XG5leHBvcnRzLmNyZWF0ZUhhcnRyZWVFbmVyZ3kgPSBjcmVhdGVIYXJ0cmVlRW5lcmd5O1xudmFyIGNyZWF0ZVByb3Rvbk1hc3MgPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgncHJvdG9uTWFzcycsICcxLjY3MjYyMTkyMzY5ZS0yNycsICdrZycpO1xuZXhwb3J0cy5jcmVhdGVQcm90b25NYXNzID0gY3JlYXRlUHJvdG9uTWFzcztcbnZhciBjcmVhdGVEZXV0ZXJvbk1hc3MgPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgnZGV1dGVyb25NYXNzJywgJzMuMzQzNTgzMDkyNmUtMjcnLCAna2cnKTtcbmV4cG9ydHMuY3JlYXRlRGV1dGVyb25NYXNzID0gY3JlYXRlRGV1dGVyb25NYXNzO1xudmFyIGNyZWF0ZU5ldXRyb25NYXNzID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ25ldXRyb25NYXNzJywgJzEuNjc0OTI3MTYxM2UtMjcnLCAna2cnKTtcbmV4cG9ydHMuY3JlYXRlTmV1dHJvbk1hc3MgPSBjcmVhdGVOZXV0cm9uTWFzcztcbnZhciBjcmVhdGVRdWFudHVtT2ZDaXJjdWxhdGlvbiA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdxdWFudHVtT2ZDaXJjdWxhdGlvbicsICczLjYzNjk0NzU1MTZlLTQnLCAnbV4yIHNeLTEnKTtcbmV4cG9ydHMuY3JlYXRlUXVhbnR1bU9mQ2lyY3VsYXRpb24gPSBjcmVhdGVRdWFudHVtT2ZDaXJjdWxhdGlvbjtcbnZhciBjcmVhdGVSeWRiZXJnID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ3J5ZGJlcmcnLCAnMTA5NzM3MzEuNTY4MTYwJywgJ21eLTEnKTtcbmV4cG9ydHMuY3JlYXRlUnlkYmVyZyA9IGNyZWF0ZVJ5ZGJlcmc7XG52YXIgY3JlYXRlVGhvbXNvbkNyb3NzU2VjdGlvbiA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCd0aG9tc29uQ3Jvc3NTZWN0aW9uJywgJzYuNjUyNDU4NzMyMWUtMjknLCAnbV4yJyk7XG5leHBvcnRzLmNyZWF0ZVRob21zb25Dcm9zc1NlY3Rpb24gPSBjcmVhdGVUaG9tc29uQ3Jvc3NTZWN0aW9uO1xudmFyIGNyZWF0ZVdlYWtNaXhpbmdBbmdsZSA9IG51bWJlckZhY3RvcnkoJ3dlYWtNaXhpbmdBbmdsZScsIDAuMjIyOTApO1xuZXhwb3J0cy5jcmVhdGVXZWFrTWl4aW5nQW5nbGUgPSBjcmVhdGVXZWFrTWl4aW5nQW5nbGU7XG52YXIgY3JlYXRlRWZpbW92RmFjdG9yID0gbnVtYmVyRmFjdG9yeSgnZWZpbW92RmFjdG9yJywgMjIuNyk7IC8vIFBoeXNpY28tY2hlbWljYWwgY29uc3RhbnRzXG5cbmV4cG9ydHMuY3JlYXRlRWZpbW92RmFjdG9yID0gY3JlYXRlRWZpbW92RmFjdG9yO1xudmFyIGNyZWF0ZUF0b21pY01hc3MgPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgnYXRvbWljTWFzcycsICcxLjY2MDUzOTA2NjYwZS0yNycsICdrZycpO1xuZXhwb3J0cy5jcmVhdGVBdG9taWNNYXNzID0gY3JlYXRlQXRvbWljTWFzcztcbnZhciBjcmVhdGVBdm9nYWRybyA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdhdm9nYWRybycsICc2LjAyMjE0MDc2ZTIzJywgJ21vbF4tMScpO1xuZXhwb3J0cy5jcmVhdGVBdm9nYWRybyA9IGNyZWF0ZUF2b2dhZHJvO1xudmFyIGNyZWF0ZUJvbHR6bWFubiA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdib2x0em1hbm4nLCAnMS4zODA2NDllLTIzJywgJ0ogS14tMScpO1xuZXhwb3J0cy5jcmVhdGVCb2x0em1hbm4gPSBjcmVhdGVCb2x0em1hbm47XG52YXIgY3JlYXRlRmFyYWRheSA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdmYXJhZGF5JywgJzk2NDg1LjMzMjEyMzMxMDAxJywgJ0MgbW9sXi0xJyk7XG5leHBvcnRzLmNyZWF0ZUZhcmFkYXkgPSBjcmVhdGVGYXJhZGF5O1xudmFyIGNyZWF0ZUZpcnN0UmFkaWF0aW9uID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ2ZpcnN0UmFkaWF0aW9uJywgJzMuNzQxNzcxODUyMTkyNzU3M2UtMTYnLCAnVyBtXjInKTsgLy8gZXhwb3J0IGNvbnN0IGNyZWF0ZVNwZWN0cmFsUmFkaWFuY2UgPSAvKiAjX19QVVJFX18gKi8gdW5pdEZhY3RvcnkoJ3NwZWN0cmFsUmFkaWFuY2UnLCAnMS4xOTEwNDI5NzIzOTcxODgxZS0xNicsICdXIG1eMiBzcl4tMScpIC8vIFRPRE8gc3BlY3RyYWxSYWRpYW5jZVxuXG5leHBvcnRzLmNyZWF0ZUZpcnN0UmFkaWF0aW9uID0gY3JlYXRlRmlyc3RSYWRpYXRpb247XG52YXIgY3JlYXRlTG9zY2htaWR0ID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ2xvc2NobWlkdCcsICcyLjY4Njc4MDExMTc5ODQ0NGUyNScsICdtXi0zJyk7XG5leHBvcnRzLmNyZWF0ZUxvc2NobWlkdCA9IGNyZWF0ZUxvc2NobWlkdDtcbnZhciBjcmVhdGVHYXNDb25zdGFudCA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdnYXNDb25zdGFudCcsICc4LjMxNDQ2MjYxODE1MzI0JywgJ0ogS14tMSBtb2xeLTEnKTtcbmV4cG9ydHMuY3JlYXRlR2FzQ29uc3RhbnQgPSBjcmVhdGVHYXNDb25zdGFudDtcbnZhciBjcmVhdGVNb2xhclBsYW5ja0NvbnN0YW50ID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ21vbGFyUGxhbmNrQ29uc3RhbnQnLCAnMy45OTAzMTI3MTI4OTM0MzFlLTEwJywgJ0ogcyBtb2xeLTEnKTtcbmV4cG9ydHMuY3JlYXRlTW9sYXJQbGFuY2tDb25zdGFudCA9IGNyZWF0ZU1vbGFyUGxhbmNrQ29uc3RhbnQ7XG52YXIgY3JlYXRlTW9sYXJWb2x1bWUgPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgnbW9sYXJWb2x1bWUnLCAnMC4wMjI0MTM5Njk1NDUwMTQxMzcnLCAnbV4zIG1vbF4tMScpO1xuZXhwb3J0cy5jcmVhdGVNb2xhclZvbHVtZSA9IGNyZWF0ZU1vbGFyVm9sdW1lO1xudmFyIGNyZWF0ZVNhY2t1clRldHJvZGUgPSBudW1iZXJGYWN0b3J5KCdzYWNrdXJUZXRyb2RlJywgLTEuMTY0ODcwNTIzNTgpO1xuZXhwb3J0cy5jcmVhdGVTYWNrdXJUZXRyb2RlID0gY3JlYXRlU2Fja3VyVGV0cm9kZTtcbnZhciBjcmVhdGVTZWNvbmRSYWRpYXRpb24gPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgnc2Vjb25kUmFkaWF0aW9uJywgJzAuMDE0Mzg3NzY4Nzc1MDM5MzM3JywgJ20gSycpO1xuZXhwb3J0cy5jcmVhdGVTZWNvbmRSYWRpYXRpb24gPSBjcmVhdGVTZWNvbmRSYWRpYXRpb247XG52YXIgY3JlYXRlU3RlZmFuQm9sdHptYW5uID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ3N0ZWZhbkJvbHR6bWFubicsICc1LjY3MDM3NDQxOTE4NDQzZS04JywgJ1cgbV4tMiBLXi00Jyk7XG5leHBvcnRzLmNyZWF0ZVN0ZWZhbkJvbHR6bWFubiA9IGNyZWF0ZVN0ZWZhbkJvbHR6bWFubjtcbnZhciBjcmVhdGVXaWVuRGlzcGxhY2VtZW50ID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ3dpZW5EaXNwbGFjZW1lbnQnLCAnMi44OTc3NzE5NTVlLTMnLCAnbSBLJyk7IC8vIEFkb3B0ZWQgdmFsdWVzXG5cbmV4cG9ydHMuY3JlYXRlV2llbkRpc3BsYWNlbWVudCA9IGNyZWF0ZVdpZW5EaXNwbGFjZW1lbnQ7XG52YXIgY3JlYXRlTW9sYXJNYXNzID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ21vbGFyTWFzcycsICcwLjk5OTk5OTk5OTY1ZS0zJywgJ2tnIG1vbF4tMScpO1xuZXhwb3J0cy5jcmVhdGVNb2xhck1hc3MgPSBjcmVhdGVNb2xhck1hc3M7XG52YXIgY3JlYXRlTW9sYXJNYXNzQzEyID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ21vbGFyTWFzc0MxMicsICcxMS45OTk5OTk5OTU4ZS0zJywgJ2tnIG1vbF4tMScpO1xuZXhwb3J0cy5jcmVhdGVNb2xhck1hc3NDMTIgPSBjcmVhdGVNb2xhck1hc3NDMTI7XG52YXIgY3JlYXRlR3Jhdml0eSA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdncmF2aXR5JywgJzkuODA2NjUnLCAnbSBzXi0yJyk7IC8vIGF0bSBpcyBkZWZpbmVkIGluIFVuaXQuanNcbi8vIE5hdHVyYWwgdW5pdHNcblxuZXhwb3J0cy5jcmVhdGVHcmF2aXR5ID0gY3JlYXRlR3Jhdml0eTtcbnZhciBjcmVhdGVQbGFuY2tMZW5ndGggPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgncGxhbmNrTGVuZ3RoJywgJzEuNjE2MjU1ZS0zNScsICdtJyk7XG5leHBvcnRzLmNyZWF0ZVBsYW5ja0xlbmd0aCA9IGNyZWF0ZVBsYW5ja0xlbmd0aDtcbnZhciBjcmVhdGVQbGFuY2tNYXNzID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ3BsYW5ja01hc3MnLCAnMi4xNzY0MzVlLTgnLCAna2cnKTtcbmV4cG9ydHMuY3JlYXRlUGxhbmNrTWFzcyA9IGNyZWF0ZVBsYW5ja01hc3M7XG52YXIgY3JlYXRlUGxhbmNrVGltZSA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdwbGFuY2tUaW1lJywgJzUuMzkxMjQ1ZS00NCcsICdzJyk7XG5leHBvcnRzLmNyZWF0ZVBsYW5ja1RpbWUgPSBjcmVhdGVQbGFuY2tUaW1lO1xudmFyIGNyZWF0ZVBsYW5ja0NoYXJnZSA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdwbGFuY2tDaGFyZ2UnLCAnMS44NzU1NDYwMzc3OGUtMTgnLCAnQycpO1xuZXhwb3J0cy5jcmVhdGVQbGFuY2tDaGFyZ2UgPSBjcmVhdGVQbGFuY2tDaGFyZ2U7XG52YXIgY3JlYXRlUGxhbmNrVGVtcGVyYXR1cmUgPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgncGxhbmNrVGVtcGVyYXR1cmUnLCAnMS40MTY3ODVlKzMyJywgJ0snKTsgLy8gaGVscGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIGZhY3RvcnkgZnVuY3Rpb24gd2hpY2ggY3JlYXRlcyBhIHBoeXNpY2FsIGNvbnN0YW50LFxuLy8gYSBVbml0IHdpdGggZWl0aGVyIGEgbnVtYmVyIHZhbHVlIG9yIGEgQmlnTnVtYmVyIHZhbHVlIGRlcGVuZGluZyBvbiB0aGUgY29uZmlndXJhdGlvblxuXG5leHBvcnRzLmNyZWF0ZVBsYW5ja1RlbXBlcmF0dXJlID0gY3JlYXRlUGxhbmNrVGVtcGVyYXR1cmU7XG5cbmZ1bmN0aW9uIHVuaXRGYWN0b3J5KG5hbWUsIHZhbHVlU3RyLCB1bml0U3RyKSB7XG4gIHZhciBkZXBlbmRlbmNpZXMgPSBbJ2NvbmZpZycsICdVbml0JywgJ0JpZ051bWJlciddO1xuICByZXR1cm4gKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgICB2YXIgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICAgIFVuaXQgPSBfcmVmLlVuaXQsXG4gICAgICAgIEJpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyO1xuICAgIC8vIE5vdGUgdGhhdCB3ZSBjYW4gcGFyc2UgaW50byBudW1iZXIgb3IgQmlnTnVtYmVyLlxuICAgIC8vIFdlIGRvIG5vdCBwYXJzZSBpbnRvIEZyYWN0aW9ucyBhcyB0aGF0IGRvZXNuJ3QgbWFrZSBzZW5zZTogd2Ugd291bGQgbG9zZSBwcmVjaXNpb24gb2YgdGhlIHZhbHVlc1xuICAgIC8vIFRoZXJlZm9yZSB3ZSBkb250IHVzZSBVbml0LnBhcnNlKClcbiAgICB2YXIgdmFsdWUgPSBjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJyA/IG5ldyBCaWdOdW1iZXIodmFsdWVTdHIpIDogcGFyc2VGbG9hdCh2YWx1ZVN0cik7XG4gICAgdmFyIHVuaXQgPSBuZXcgVW5pdCh2YWx1ZSwgdW5pdFN0cik7XG4gICAgdW5pdC5maXhQcmVmaXggPSB0cnVlO1xuICAgIHJldHVybiB1bml0O1xuICB9KTtcbn0gLy8gaGVscGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIGZhY3RvcnkgZnVuY3Rpb24gd2hpY2ggY3JlYXRlcyBhIG51bWVyaWMgY29uc3RhbnQsXG4vLyBlaXRoZXIgYSBudW1iZXIgb3IgQmlnTnVtYmVyIGRlcGVuZGluZyBvbiB0aGUgY29uZmlndXJhdGlvblxuXG5cbmZ1bmN0aW9uIG51bWJlckZhY3RvcnkobmFtZSwgdmFsdWUpIHtcbiAgdmFyIGRlcGVuZGVuY2llcyA9IFsnY29uZmlnJywgJ0JpZ051bWJlciddO1xuICByZXR1cm4gKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgdmFyIGNvbmZpZyA9IF9yZWYyLmNvbmZpZyxcbiAgICAgICAgQmlnTnVtYmVyID0gX3JlZjIuQmlnTnVtYmVyO1xuICAgIHJldHVybiBjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJyA/IG5ldyBCaWdOdW1iZXIodmFsdWUpIDogdmFsdWU7XG4gIH0pO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hcnJheVNpemUgPSBhcnJheVNpemU7XG5leHBvcnRzLnZhbGlkYXRlID0gdmFsaWRhdGU7XG5leHBvcnRzLnZhbGlkYXRlSW5kZXggPSB2YWxpZGF0ZUluZGV4O1xuZXhwb3J0cy5yZXNpemUgPSByZXNpemU7XG5leHBvcnRzLnJlc2hhcGUgPSByZXNoYXBlO1xuZXhwb3J0cy5zcXVlZXplID0gc3F1ZWV6ZTtcbmV4cG9ydHMudW5zcXVlZXplID0gdW5zcXVlZXplO1xuZXhwb3J0cy5mbGF0dGVuID0gZmxhdHRlbjtcbmV4cG9ydHMubWFwID0gbWFwO1xuZXhwb3J0cy5mb3JFYWNoID0gZm9yRWFjaDtcbmV4cG9ydHMuZmlsdGVyID0gZmlsdGVyO1xuZXhwb3J0cy5maWx0ZXJSZWdFeHAgPSBmaWx0ZXJSZWdFeHA7XG5leHBvcnRzLmpvaW4gPSBqb2luO1xuZXhwb3J0cy5pZGVudGlmeSA9IGlkZW50aWZ5O1xuZXhwb3J0cy5nZW5lcmFsaXplID0gZ2VuZXJhbGl6ZTtcbmV4cG9ydHMuZ2V0QXJyYXlEYXRhVHlwZSA9IGdldEFycmF5RGF0YVR5cGU7XG5leHBvcnRzLmxhc3QgPSBsYXN0O1xuZXhwb3J0cy5pbml0aWFsID0gaW5pdGlhbDtcbmV4cG9ydHMuY29udGFpbnMgPSBjb250YWlucztcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi9udW1iZXJcIik7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi9pc1wiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi9zdHJpbmdcIik7XG5cbnZhciBfRGltZW5zaW9uRXJyb3IgPSByZXF1aXJlKFwiLi4vZXJyb3IvRGltZW5zaW9uRXJyb3JcIik7XG5cbnZhciBfSW5kZXhFcnJvciA9IHJlcXVpcmUoXCIuLi9lcnJvci9JbmRleEVycm9yXCIpO1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgc2l6ZSBvZiBhIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5LlxuICogVGhpcyBmdW5jdGlvbiBjaGVja3MgdGhlIHNpemUgb2YgdGhlIGZpcnN0IGVudHJ5LCBpdCBkb2VzIG5vdCB2YWxpZGF0ZVxuICogd2hldGhlciBhbGwgZGltZW5zaW9ucyBtYXRjaC4gKHVzZSBmdW5jdGlvbiBgdmFsaWRhdGVgIGZvciB0aGF0KVxuICogQHBhcmFtIHtBcnJheX0geFxuICogQFJldHVybiB7TnVtYmVyW119IHNpemVcbiAqL1xuZnVuY3Rpb24gYXJyYXlTaXplKHgpIHtcbiAgdmFyIHMgPSBbXTtcblxuICB3aGlsZSAoQXJyYXkuaXNBcnJheSh4KSkge1xuICAgIHMucHVzaCh4Lmxlbmd0aCk7XG4gICAgeCA9IHhbMF07XG4gIH1cblxuICByZXR1cm4gcztcbn1cbi8qKlxuICogUmVjdXJzaXZlbHkgdmFsaWRhdGUgd2hldGhlciBlYWNoIGVsZW1lbnQgaW4gYSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheVxuICogaGFzIGEgc2l6ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm92aWRlZCBzaXplIGFycmF5LlxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgICAgQXJyYXkgdG8gYmUgdmFsaWRhdGVkXG4gKiBAcGFyYW0ge251bWJlcltdfSBzaXplICBBcnJheSB3aXRoIHRoZSBzaXplIG9mIGVhY2ggZGltZW5zaW9uXG4gKiBAcGFyYW0ge251bWJlcn0gZGltICAgQ3VycmVudCBkaW1lbnNpb25cbiAqIEB0aHJvd3MgRGltZW5zaW9uRXJyb3JcbiAqIEBwcml2YXRlXG4gKi9cblxuXG5mdW5jdGlvbiBfdmFsaWRhdGUoYXJyYXksIHNpemUsIGRpbSkge1xuICB2YXIgaTtcbiAgdmFyIGxlbiA9IGFycmF5Lmxlbmd0aDtcblxuICBpZiAobGVuICE9PSBzaXplW2RpbV0pIHtcbiAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKGxlbiwgc2l6ZVtkaW1dKTtcbiAgfVxuXG4gIGlmIChkaW0gPCBzaXplLmxlbmd0aCAtIDEpIHtcbiAgICAvLyByZWN1cnNpdmVseSB2YWxpZGF0ZSBlYWNoIGNoaWxkIGFycmF5XG4gICAgdmFyIGRpbU5leHQgPSBkaW0gKyAxO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICB2YXIgY2hpbGQgPSBhcnJheVtpXTtcblxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNoaWxkKSkge1xuICAgICAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKHNpemUubGVuZ3RoIC0gMSwgc2l6ZS5sZW5ndGgsICc8Jyk7XG4gICAgICB9XG5cbiAgICAgIF92YWxpZGF0ZShhcnJheVtpXSwgc2l6ZSwgZGltTmV4dCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGxhc3QgZGltZW5zaW9uLiBub25lIG9mIHRoZSBjaGlsZHMgbWF5IGJlIGFuIGFycmF5XG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShhcnJheVtpXSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihzaXplLmxlbmd0aCArIDEsIHNpemUubGVuZ3RoLCAnPicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBWYWxpZGF0ZSB3aGV0aGVyIGVhY2ggZWxlbWVudCBpbiBhIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5IGhhc1xuICogYSBzaXplIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb3ZpZGVkIHNpemUgYXJyYXkuXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSAgICBBcnJheSB0byBiZSB2YWxpZGF0ZWRcbiAqIEBwYXJhbSB7bnVtYmVyW119IHNpemUgIEFycmF5IHdpdGggdGhlIHNpemUgb2YgZWFjaCBkaW1lbnNpb25cbiAqIEB0aHJvd3MgRGltZW5zaW9uRXJyb3JcbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlKGFycmF5LCBzaXplKSB7XG4gIHZhciBpc1NjYWxhciA9IHNpemUubGVuZ3RoID09PSAwO1xuXG4gIGlmIChpc1NjYWxhcikge1xuICAgIC8vIHNjYWxhclxuICAgIGlmIChBcnJheS5pc0FycmF5KGFycmF5KSkge1xuICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihhcnJheS5sZW5ndGgsIDApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBhcnJheVxuICAgIF92YWxpZGF0ZShhcnJheSwgc2l6ZSwgMCk7XG4gIH1cbn1cbi8qKlxuICogVGVzdCB3aGV0aGVyIGluZGV4IGlzIGFuIGludGVnZXIgbnVtYmVyIHdpdGggaW5kZXggPj0gMCBhbmQgaW5kZXggPCBsZW5ndGhcbiAqIHdoZW4gbGVuZ3RoIGlzIHByb3ZpZGVkXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXggICAgWmVyby1iYXNlZCBpbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGhdIExlbmd0aCBvZiB0aGUgYXJyYXlcbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlSW5kZXgoaW5kZXgsIGxlbmd0aCkge1xuICBpZiAoISgwLCBfaXMuaXNOdW1iZXIpKGluZGV4KSB8fCAhKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShpbmRleCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbmRleCBtdXN0IGJlIGFuIGludGVnZXIgKHZhbHVlOiAnICsgaW5kZXggKyAnKScpO1xuICB9XG5cbiAgaWYgKGluZGV4IDwgMCB8fCB0eXBlb2YgbGVuZ3RoID09PSAnbnVtYmVyJyAmJiBpbmRleCA+PSBsZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgX0luZGV4RXJyb3IuSW5kZXhFcnJvcihpbmRleCwgbGVuZ3RoKTtcbiAgfVxufVxuLyoqXG4gKiBSZXNpemUgYSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheS4gVGhlIHJlc2l6ZWQgYXJyYXkgaXMgcmV0dXJuZWQuXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSAgICAgICAgIEFycmF5IHRvIGJlIHJlc2l6ZWRcbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHNpemUgQXJyYXkgd2l0aCB0aGUgc2l6ZSBvZiBlYWNoIGRpbWVuc2lvblxuICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlPTBdICBWYWx1ZSB0byBiZSBmaWxsZWQgaW4gaW4gbmV3IGVudHJpZXMsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHplcm8gYnkgZGVmYXVsdC4gU3BlY2lmeSBmb3IgZXhhbXBsZSBgbnVsbGAsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGNsZWFybHkgc2VlIGVudHJpZXMgdGhhdCBhcmUgbm90IGV4cGxpY2l0bHlcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0LlxuICogQHJldHVybiB7QXJyYXl9IGFycmF5ICAgICAgICAgVGhlIHJlc2l6ZWQgYXJyYXlcbiAqL1xuXG5cbmZ1bmN0aW9uIHJlc2l6ZShhcnJheSwgc2l6ZSwgZGVmYXVsdFZhbHVlKSB7XG4gIC8vIFRPRE86IGFkZCBzdXBwb3J0IGZvciBzY2FsYXJzLCBoYXZpbmcgc2l6ZT1bXSA/XG4gIC8vIGNoZWNrIHRoZSB0eXBlIG9mIHRoZSBhcmd1bWVudHNcbiAgaWYgKCFBcnJheS5pc0FycmF5KGFycmF5KSB8fCAhQXJyYXkuaXNBcnJheShzaXplKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IGV4cGVjdGVkJyk7XG4gIH1cblxuICBpZiAoc2l6ZS5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jlc2l6aW5nIHRvIHNjYWxhciBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gIH0gLy8gY2hlY2sgd2hldGhlciBzaXplIGNvbnRhaW5zIHBvc2l0aXZlIGludGVnZXJzXG5cblxuICBzaXplLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgaWYgKCEoMCwgX2lzLmlzTnVtYmVyKSh2YWx1ZSkgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikodmFsdWUpIHx8IHZhbHVlIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBzaXplLCBtdXN0IGNvbnRhaW4gcG9zaXRpdmUgaW50ZWdlcnMgJyArICcoc2l6ZTogJyArICgwLCBfc3RyaW5nLmZvcm1hdCkoc2l6ZSkgKyAnKScpO1xuICAgIH1cbiAgfSk7IC8vIHJlY3Vyc2l2ZWx5IHJlc2l6ZSB0aGUgYXJyYXlcblxuICB2YXIgX2RlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkID8gZGVmYXVsdFZhbHVlIDogMDtcblxuICBfcmVzaXplKGFycmF5LCBzaXplLCAwLCBfZGVmYXVsdFZhbHVlKTtcblxuICByZXR1cm4gYXJyYXk7XG59XG4vKipcbiAqIFJlY3Vyc2l2ZWx5IHJlc2l6ZSBhIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSAgICAgICAgIEFycmF5IHRvIGJlIHJlc2l6ZWRcbiAqIEBwYXJhbSB7bnVtYmVyW119IHNpemUgICAgICAgQXJyYXkgd2l0aCB0aGUgc2l6ZSBvZiBlYWNoIGRpbWVuc2lvblxuICogQHBhcmFtIHtudW1iZXJ9IGRpbSAgICAgICAgICBDdXJyZW50IGRpbWVuc2lvblxuICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXSAgICBWYWx1ZSB0byBiZSBmaWxsZWQgaW4gaW4gbmV3IGVudHJpZXMsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCBieSBkZWZhdWx0LlxuICogQHByaXZhdGVcbiAqL1xuXG5cbmZ1bmN0aW9uIF9yZXNpemUoYXJyYXksIHNpemUsIGRpbSwgZGVmYXVsdFZhbHVlKSB7XG4gIHZhciBpO1xuICB2YXIgZWxlbTtcbiAgdmFyIG9sZExlbiA9IGFycmF5Lmxlbmd0aDtcbiAgdmFyIG5ld0xlbiA9IHNpemVbZGltXTtcbiAgdmFyIG1pbkxlbiA9IE1hdGgubWluKG9sZExlbiwgbmV3TGVuKTsgLy8gYXBwbHkgbmV3IGxlbmd0aFxuXG4gIGFycmF5Lmxlbmd0aCA9IG5ld0xlbjtcblxuICBpZiAoZGltIDwgc2l6ZS5sZW5ndGggLSAxKSB7XG4gICAgLy8gbm9uLWxhc3QgZGltZW5zaW9uXG4gICAgdmFyIGRpbU5leHQgPSBkaW0gKyAxOyAvLyByZXNpemUgZXhpc3RpbmcgY2hpbGQgYXJyYXlzXG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbWluTGVuOyBpKyspIHtcbiAgICAgIC8vIHJlc2l6ZSBjaGlsZCBhcnJheVxuICAgICAgZWxlbSA9IGFycmF5W2ldO1xuXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZWxlbSkpIHtcbiAgICAgICAgZWxlbSA9IFtlbGVtXTsgLy8gYWRkIGEgZGltZW5zaW9uXG5cbiAgICAgICAgYXJyYXlbaV0gPSBlbGVtO1xuICAgICAgfVxuXG4gICAgICBfcmVzaXplKGVsZW0sIHNpemUsIGRpbU5leHQsIGRlZmF1bHRWYWx1ZSk7XG4gICAgfSAvLyBjcmVhdGUgbmV3IGNoaWxkIGFycmF5c1xuXG5cbiAgICBmb3IgKGkgPSBtaW5MZW47IGkgPCBuZXdMZW47IGkrKykge1xuICAgICAgLy8gZ2V0IGNoaWxkIGFycmF5XG4gICAgICBlbGVtID0gW107XG4gICAgICBhcnJheVtpXSA9IGVsZW07IC8vIHJlc2l6ZSBuZXcgY2hpbGQgYXJyYXlcblxuICAgICAgX3Jlc2l6ZShlbGVtLCBzaXplLCBkaW1OZXh0LCBkZWZhdWx0VmFsdWUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBsYXN0IGRpbWVuc2lvblxuICAgIC8vIHJlbW92ZSBkaW1lbnNpb25zIG9mIGV4aXN0aW5nIHZhbHVlc1xuICAgIGZvciAoaSA9IDA7IGkgPCBtaW5MZW47IGkrKykge1xuICAgICAgd2hpbGUgKEFycmF5LmlzQXJyYXkoYXJyYXlbaV0pKSB7XG4gICAgICAgIGFycmF5W2ldID0gYXJyYXlbaV1bMF07XG4gICAgICB9XG4gICAgfSAvLyBmaWxsIG5ldyBlbGVtZW50cyB3aXRoIHRoZSBkZWZhdWx0IHZhbHVlXG5cblxuICAgIGZvciAoaSA9IG1pbkxlbjsgaSA8IG5ld0xlbjsgaSsrKSB7XG4gICAgICBhcnJheVtpXSA9IGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogUmUtc2hhcGUgYSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheSB0byBmaXQgdGhlIHNwZWNpZmllZCBkaW1lbnNpb25zXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSAgICAgICAgICAgQXJyYXkgdG8gYmUgcmVzaGFwZWRcbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHNpemVzICBMaXN0IG9mIHNpemVzIGZvciBlYWNoIGRpbWVuc2lvblxuICogQHJldHVybnMge0FycmF5fSAgICAgICAgICAgICAgIEFycmF5IHdob3NlIGRhdGEgaGFzIGJlZW4gZm9ybWF0dGVkIHRvIGZpdCB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgZGltZW5zaW9uc1xuICpcbiAqIEB0aHJvd3Mge0RpbWVuc2lvbkVycm9yfSAgICAgICBJZiB0aGUgcHJvZHVjdCBvZiB0aGUgbmV3IGRpbWVuc2lvbiBzaXplcyBkb2VzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IGVxdWFsIHRoYXQgb2YgdGhlIG9sZCBvbmVzXG4gKi9cblxuXG5mdW5jdGlvbiByZXNoYXBlKGFycmF5LCBzaXplcykge1xuICB2YXIgZmxhdEFycmF5ID0gZmxhdHRlbihhcnJheSk7XG4gIHZhciBuZXdBcnJheTtcblxuICBmdW5jdGlvbiBwcm9kdWN0KGFycikge1xuICAgIHJldHVybiBhcnIucmVkdWNlKGZ1bmN0aW9uIChwcmV2LCBjdXJyKSB7XG4gICAgICByZXR1cm4gcHJldiAqIGN1cnI7XG4gICAgfSk7XG4gIH1cblxuICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyYXkpIHx8ICFBcnJheS5pc0FycmF5KHNpemVzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IGV4cGVjdGVkJyk7XG4gIH1cblxuICBpZiAoc2l6ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcigwLCBwcm9kdWN0KGFycmF5U2l6ZShhcnJheSkpLCAnIT0nKTtcbiAgfVxuXG4gIHZhciB0b3RhbFNpemUgPSAxO1xuXG4gIGZvciAodmFyIHNpemVJbmRleCA9IDA7IHNpemVJbmRleCA8IHNpemVzLmxlbmd0aDsgc2l6ZUluZGV4KyspIHtcbiAgICB0b3RhbFNpemUgKj0gc2l6ZXNbc2l6ZUluZGV4XTtcbiAgfVxuXG4gIGlmIChmbGF0QXJyYXkubGVuZ3RoICE9PSB0b3RhbFNpemUpIHtcbiAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKHByb2R1Y3Qoc2l6ZXMpLCBwcm9kdWN0KGFycmF5U2l6ZShhcnJheSkpLCAnIT0nKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgbmV3QXJyYXkgPSBfcmVzaGFwZShmbGF0QXJyYXksIHNpemVzKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChlIGluc3RhbmNlb2YgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKHByb2R1Y3Qoc2l6ZXMpLCBwcm9kdWN0KGFycmF5U2l6ZShhcnJheSkpLCAnIT0nKTtcbiAgICB9XG5cbiAgICB0aHJvdyBlO1xuICB9XG5cbiAgcmV0dXJuIG5ld0FycmF5O1xufVxuLyoqXG4gKiBJdGVyYXRpdmVseSByZS1zaGFwZSBhIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5IHRvIGZpdCB0aGUgc3BlY2lmaWVkIGRpbWVuc2lvbnNcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5ICAgICAgICAgICBBcnJheSB0byBiZSByZXNoYXBlZFxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gc2l6ZXMgIExpc3Qgb2Ygc2l6ZXMgZm9yIGVhY2ggZGltZW5zaW9uXG4gKiBAcmV0dXJucyB7QXJyYXl9ICAgICAgICAgICAgICAgQXJyYXkgd2hvc2UgZGF0YSBoYXMgYmVlbiBmb3JtYXR0ZWQgdG8gZml0IHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCBkaW1lbnNpb25zXG4gKi9cblxuXG5mdW5jdGlvbiBfcmVzaGFwZShhcnJheSwgc2l6ZXMpIHtcbiAgLy8gdGVzdGluZyBpZiB0aGVyZSBhcmUgZW5vdWdoIGVsZW1lbnRzIGZvciB0aGUgcmVxdWVzdGVkIHNoYXBlXG4gIHZhciB0bXBBcnJheSA9IGFycmF5O1xuICB2YXIgdG1wQXJyYXkyOyAvLyBmb3IgZWFjaCBkaW1lbnNpb25zIHN0YXJ0aW5nIGJ5IHRoZSBsYXN0IG9uZSBhbmQgaWdub3JpbmcgdGhlIGZpcnN0IG9uZVxuXG4gIGZvciAodmFyIHNpemVJbmRleCA9IHNpemVzLmxlbmd0aCAtIDE7IHNpemVJbmRleCA+IDA7IHNpemVJbmRleC0tKSB7XG4gICAgdmFyIHNpemUgPSBzaXplc1tzaXplSW5kZXhdO1xuICAgIHRtcEFycmF5MiA9IFtdOyAvLyBhZ2dyZWdhdGUgdGhlIGVsZW1lbnRzIG9mIHRoZSBjdXJyZW50IHRtcEFycmF5IGluIGVsZW1lbnRzIG9mIHRoZSByZXF1ZXN0ZWQgc2l6ZVxuXG4gICAgdmFyIGxlbmd0aCA9IHRtcEFycmF5Lmxlbmd0aCAvIHNpemU7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB0bXBBcnJheTIucHVzaCh0bXBBcnJheS5zbGljZShpICogc2l6ZSwgKGkgKyAxKSAqIHNpemUpKTtcbiAgICB9IC8vIHNldCBpdCBhcyB0aGUgbmV3IHRtcEFycmF5IGZvciB0aGUgbmV4dCBsb29wIHR1cm4gb3IgZm9yIHJldHVyblxuXG5cbiAgICB0bXBBcnJheSA9IHRtcEFycmF5MjtcbiAgfVxuXG4gIHJldHVybiB0bXBBcnJheTtcbn1cbi8qKlxuICogU3F1ZWV6ZSBhIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheVxuICogQHBhcmFtIHtBcnJheX0gW3NpemVdXG4gKiBAcmV0dXJucyB7QXJyYXl9IHJldHVybnMgdGhlIGFycmF5IGl0c2VsZlxuICovXG5cblxuZnVuY3Rpb24gc3F1ZWV6ZShhcnJheSwgc2l6ZSkge1xuICB2YXIgcyA9IHNpemUgfHwgYXJyYXlTaXplKGFycmF5KTsgLy8gc3F1ZWV6ZSBvdXRlciBkaW1lbnNpb25zXG5cbiAgd2hpbGUgKEFycmF5LmlzQXJyYXkoYXJyYXkpICYmIGFycmF5Lmxlbmd0aCA9PT0gMSkge1xuICAgIGFycmF5ID0gYXJyYXlbMF07XG4gICAgcy5zaGlmdCgpO1xuICB9IC8vIGZpbmQgdGhlIGZpcnN0IGRpbWVuc2lvbiB0byBiZSBzcXVlZXplZFxuXG5cbiAgdmFyIGRpbXMgPSBzLmxlbmd0aDtcblxuICB3aGlsZSAoc1tkaW1zIC0gMV0gPT09IDEpIHtcbiAgICBkaW1zLS07XG4gIH0gLy8gc3F1ZWV6ZSBpbm5lciBkaW1lbnNpb25zXG5cblxuICBpZiAoZGltcyA8IHMubGVuZ3RoKSB7XG4gICAgYXJyYXkgPSBfc3F1ZWV6ZShhcnJheSwgZGltcywgMCk7XG4gICAgcy5sZW5ndGggPSBkaW1zO1xuICB9XG5cbiAgcmV0dXJuIGFycmF5O1xufVxuLyoqXG4gKiBSZWN1cnNpdmVseSBzcXVlZXplIGEgbXVsdGkgZGltZW5zaW9uYWwgYXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gKiBAcGFyYW0ge251bWJlcn0gZGltcyBSZXF1aXJlZCBudW1iZXIgb2YgZGltZW5zaW9uc1xuICogQHBhcmFtIHtudW1iZXJ9IGRpbSAgQ3VycmVudCBkaW1lbnNpb25cbiAqIEByZXR1cm5zIHtBcnJheSB8ICp9IFJldHVybnMgdGhlIHNxdWVlemVkIGFycmF5XG4gKiBAcHJpdmF0ZVxuICovXG5cblxuZnVuY3Rpb24gX3NxdWVlemUoYXJyYXksIGRpbXMsIGRpbSkge1xuICB2YXIgaSwgaWk7XG5cbiAgaWYgKGRpbSA8IGRpbXMpIHtcbiAgICB2YXIgbmV4dCA9IGRpbSArIDE7XG5cbiAgICBmb3IgKGkgPSAwLCBpaSA9IGFycmF5Lmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIGFycmF5W2ldID0gX3NxdWVlemUoYXJyYXlbaV0sIGRpbXMsIG5leHQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAoQXJyYXkuaXNBcnJheShhcnJheSkpIHtcbiAgICAgIGFycmF5ID0gYXJyYXlbMF07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFycmF5O1xufVxuLyoqXG4gKiBVbnNxdWVlemUgYSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheTogYWRkIGRpbWVuc2lvbnMgd2hlbiBtaXNzaW5nXG4gKlxuICogUGFyYW10ZXIgYHNpemVgIHdpbGwgYmUgbXV0YXRlZCB0byBtYXRjaCB0aGUgbmV3LCB1bnF1ZWV6ZWQgbWF0cml4IHNpemUuXG4gKlxuICogQHBhcmFtIHtBcnJheX0gYXJyYXlcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaW1zICAgICAgIERlc2lyZWQgbnVtYmVyIG9mIGRpbWVuc2lvbnMgb2YgdGhlIGFycmF5XG4gKiBAcGFyYW0ge251bWJlcn0gW291dGVyXSAgICBOdW1iZXIgb2Ygb3V0ZXIgZGltZW5zaW9ucyB0byBiZSBhZGRlZFxuICogQHBhcmFtIHtBcnJheX0gW3NpemVdIEN1cnJlbnQgc2l6ZSBvZiBhcnJheS5cbiAqIEByZXR1cm5zIHtBcnJheX0gcmV0dXJucyB0aGUgYXJyYXkgaXRzZWxmXG4gKiBAcHJpdmF0ZVxuICovXG5cblxuZnVuY3Rpb24gdW5zcXVlZXplKGFycmF5LCBkaW1zLCBvdXRlciwgc2l6ZSkge1xuICB2YXIgcyA9IHNpemUgfHwgYXJyYXlTaXplKGFycmF5KTsgLy8gdW5zcXVlZXplIG91dGVyIGRpbWVuc2lvbnNcblxuICBpZiAob3V0ZXIpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG91dGVyOyBpKyspIHtcbiAgICAgIGFycmF5ID0gW2FycmF5XTtcbiAgICAgIHMudW5zaGlmdCgxKTtcbiAgICB9XG4gIH0gLy8gdW5zcXVlZXplIGlubmVyIGRpbWVuc2lvbnNcblxuXG4gIGFycmF5ID0gX3Vuc3F1ZWV6ZShhcnJheSwgZGltcywgMCk7XG5cbiAgd2hpbGUgKHMubGVuZ3RoIDwgZGltcykge1xuICAgIHMucHVzaCgxKTtcbiAgfVxuXG4gIHJldHVybiBhcnJheTtcbn1cbi8qKlxuICogUmVjdXJzaXZlbHkgdW5zcXVlZXplIGEgbXVsdGkgZGltZW5zaW9uYWwgYXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gKiBAcGFyYW0ge251bWJlcn0gZGltcyBSZXF1aXJlZCBudW1iZXIgb2YgZGltZW5zaW9uc1xuICogQHBhcmFtIHtudW1iZXJ9IGRpbSAgQ3VycmVudCBkaW1lbnNpb25cbiAqIEByZXR1cm5zIHtBcnJheSB8ICp9IFJldHVybnMgdGhlIHNxdWVlemVkIGFycmF5XG4gKiBAcHJpdmF0ZVxuICovXG5cblxuZnVuY3Rpb24gX3Vuc3F1ZWV6ZShhcnJheSwgZGltcywgZGltKSB7XG4gIHZhciBpLCBpaTtcblxuICBpZiAoQXJyYXkuaXNBcnJheShhcnJheSkpIHtcbiAgICB2YXIgbmV4dCA9IGRpbSArIDE7XG5cbiAgICBmb3IgKGkgPSAwLCBpaSA9IGFycmF5Lmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIGFycmF5W2ldID0gX3Vuc3F1ZWV6ZShhcnJheVtpXSwgZGltcywgbmV4dCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGQgPSBkaW07IGQgPCBkaW1zOyBkKyspIHtcbiAgICAgIGFycmF5ID0gW2FycmF5XTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYXJyYXk7XG59XG4vKipcbiAqIEZsYXR0ZW4gYSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheSwgcHV0IGFsbCBlbGVtZW50cyBpbiBhIG9uZSBkaW1lbnNpb25hbFxuICogYXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5ICAgQSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheVxuICogQHJldHVybiB7QXJyYXl9ICAgICAgICBUaGUgZmxhdHRlbmVkIGFycmF5ICgxIGRpbWVuc2lvbmFsKVxuICovXG5cblxuZnVuY3Rpb24gZmxhdHRlbihhcnJheSkge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyYXkpKSB7XG4gICAgLy8gaWYgbm90IGFuIGFycmF5LCByZXR1cm4gYXMgaXNcbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cblxuICB2YXIgZmxhdCA9IFtdO1xuICBhcnJheS5mb3JFYWNoKGZ1bmN0aW9uIGNhbGxiYWNrKHZhbHVlKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB2YWx1ZS5mb3JFYWNoKGNhbGxiYWNrKTsgLy8gdHJhdmVyc2UgdGhyb3VnaCBzdWItYXJyYXlzIHJlY3Vyc2l2ZWx5XG4gICAgfSBlbHNlIHtcbiAgICAgIGZsYXQucHVzaCh2YWx1ZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGZsYXQ7XG59XG4vKipcbiAqIEEgc2FmZSBtYXBcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICovXG5cblxuZnVuY3Rpb24gbWFwKGFycmF5LCBjYWxsYmFjaykge1xuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKGFycmF5LCBjYWxsYmFjayk7XG59XG4vKipcbiAqIEEgc2FmZSBmb3JFYWNoXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheVxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqL1xuXG5cbmZ1bmN0aW9uIGZvckVhY2goYXJyYXksIGNhbGxiYWNrKSB7XG4gIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoYXJyYXksIGNhbGxiYWNrKTtcbn1cbi8qKlxuICogQSBzYWZlIGZpbHRlclxuICogQHBhcmFtIHtBcnJheX0gYXJyYXlcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKi9cblxuXG5mdW5jdGlvbiBmaWx0ZXIoYXJyYXksIGNhbGxiYWNrKSB7XG4gIGlmIChhcnJheVNpemUoYXJyYXkpLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignT25seSBvbmUgZGltZW5zaW9uYWwgbWF0cmljZXMgc3VwcG9ydGVkJyk7XG4gIH1cblxuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmZpbHRlci5jYWxsKGFycmF5LCBjYWxsYmFjayk7XG59XG4vKipcbiAqIEZpbHRlciB2YWx1ZXMgaW4gYSBjYWxsYmFjayBnaXZlbiBhIHJlZ3VsYXIgZXhwcmVzc2lvblxuICogQHBhcmFtIHtBcnJheX0gYXJyYXlcbiAqIEBwYXJhbSB7UmVnRXhwfSByZWdleHBcbiAqIEByZXR1cm4ge0FycmF5fSBSZXR1cm5zIHRoZSBmaWx0ZXJlZCBhcnJheVxuICogQHByaXZhdGVcbiAqL1xuXG5cbmZ1bmN0aW9uIGZpbHRlclJlZ0V4cChhcnJheSwgcmVnZXhwKSB7XG4gIGlmIChhcnJheVNpemUoYXJyYXkpLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignT25seSBvbmUgZGltZW5zaW9uYWwgbWF0cmljZXMgc3VwcG9ydGVkJyk7XG4gIH1cblxuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmZpbHRlci5jYWxsKGFycmF5LCBmdW5jdGlvbiAoZW50cnkpIHtcbiAgICByZXR1cm4gcmVnZXhwLnRlc3QoZW50cnkpO1xuICB9KTtcbn1cbi8qKlxuICogQSBzYWZlIGpvaW5cbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gKiBAcGFyYW0ge3N0cmluZ30gc2VwYXJhdG9yXG4gKi9cblxuXG5mdW5jdGlvbiBqb2luKGFycmF5LCBzZXBhcmF0b3IpIHtcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5qb2luLmNhbGwoYXJyYXksIHNlcGFyYXRvcik7XG59XG4vKipcbiAqIEFzc2lnbiBhIG51bWVyaWMgaWRlbnRpZmllciB0byBldmVyeSBlbGVtZW50IG9mIGEgc29ydGVkIGFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhICBBbiBhcnJheVxuICogQHJldHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIG9iamVjdHMgY29udGFpbmluZyB0aGUgb3JpZ2luYWwgdmFsdWUgYW5kIGl0cyBpZGVudGlmaWVyXG4gKi9cblxuXG5mdW5jdGlvbiBpZGVudGlmeShhKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShhKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IGlucHV0IGV4cGVjdGVkJyk7XG4gIH1cblxuICBpZiAoYS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gYTtcbiAgfVxuXG4gIHZhciBiID0gW107XG4gIHZhciBjb3VudCA9IDA7XG4gIGJbMF0gPSB7XG4gICAgdmFsdWU6IGFbMF0sXG4gICAgaWRlbnRpZmllcjogMFxuICB9O1xuXG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChhW2ldID09PSBhW2kgLSAxXSkge1xuICAgICAgY291bnQrKztcbiAgICB9IGVsc2Uge1xuICAgICAgY291bnQgPSAwO1xuICAgIH1cblxuICAgIGIucHVzaCh7XG4gICAgICB2YWx1ZTogYVtpXSxcbiAgICAgIGlkZW50aWZpZXI6IGNvdW50XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gYjtcbn1cbi8qKlxuICogUmVtb3ZlIHRoZSBudW1lcmljIGlkZW50aWZpZXIgZnJvbSB0aGUgZWxlbWVudHNcbiAqIEBwYXJhbSB7YXJyYXl9IGEgIEFuIGFycmF5XG4gKiBAcmV0dXJuIHthcnJheX0gQW4gYXJyYXkgb2YgdmFsdWVzIHdpdGhvdXQgaWRlbnRpZmllcnNcbiAqL1xuXG5cbmZ1bmN0aW9uIGdlbmVyYWxpemUoYSkge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoYSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSBpbnB1dCBleHBlY3RlZCcpO1xuICB9XG5cbiAgaWYgKGEubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGE7XG4gIH1cblxuICB2YXIgYiA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgIGIucHVzaChhW2ldLnZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiBiO1xufVxuLyoqXG4gKiBDaGVjayB0aGUgZGF0YXR5cGUgb2YgYSBnaXZlbiBvYmplY3RcbiAqIFRoaXMgaXMgYSBsb3cgbGV2ZWwgaW1wbGVtZW50YXRpb24gdGhhdCBzaG91bGQgb25seSBiZSB1c2VkIGJ5XG4gKiBwYXJlbnQgTWF0cml4IGNsYXNzZXMgc3VjaCBhcyBTcGFyc2VNYXRyaXggb3IgRGVuc2VNYXRyaXhcbiAqIFRoaXMgbWV0aG9kIGRvZXMgbm90IHZhbGlkYXRlIEFycmF5IE1hdHJpeCBzaGFwZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXlcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHR5cGVPZiAgIENhbGxiYWNrIGZ1bmN0aW9uIHRvIHVzZSB0byBkZXRlcm1pbmUgdGhlIHR5cGUgb2YgYSB2YWx1ZVxuICogQHJldHVybiBzdHJpbmdcbiAqL1xuXG5cbmZ1bmN0aW9uIGdldEFycmF5RGF0YVR5cGUoYXJyYXksIHR5cGVPZikge1xuICB2YXIgdHlwZTsgLy8gdG8gaG9sZCB0eXBlIGluZm9cblxuICB2YXIgbGVuZ3RoID0gMDsgLy8gdG8gaG9sZCBsZW5ndGggdmFsdWUgdG8gZW5zdXJlIGl0IGhhcyBjb25zaXN0ZW50IHNpemVzXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gYXJyYXlbaV07XG4gICAgdmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KGl0ZW0pOyAvLyBTYXZpbmcgdGhlIHRhcmdldCBtYXRyaXggcm93IHNpemVcblxuICAgIGlmIChpID09PSAwICYmIGlzQXJyYXkpIHtcbiAgICAgIGxlbmd0aCA9IGl0ZW0ubGVuZ3RoO1xuICAgIH0gLy8gSWYgdGhlIGN1cnJlbnQgaXRlbSBpcyBhbiBhcnJheSBidXQgdGhlIGxlbmd0aCBkb2VzIG5vdCBlcXVhbCB0aGUgdGFyZ2V0VmVjdG9yU2l6ZVxuXG5cbiAgICBpZiAoaXNBcnJheSAmJiBpdGVtLmxlbmd0aCAhPT0gbGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHZhciBpdGVtVHlwZSA9IGlzQXJyYXkgPyBnZXRBcnJheURhdGFUeXBlKGl0ZW0sIHR5cGVPZikgLy8gcmVjdXJzZSBpbnRvIGEgbmVzdGVkIGFycmF5XG4gICAgOiB0eXBlT2YoaXRlbSk7XG5cbiAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0eXBlID0gaXRlbVR5cGU7IC8vIGZpcnN0IGl0ZW1cbiAgICB9IGVsc2UgaWYgKHR5cGUgIT09IGl0ZW1UeXBlKSB7XG4gICAgICByZXR1cm4gJ21peGVkJztcbiAgICB9IGVsc2Ugey8vIHdlJ3JlIGdvb2QsIGV2ZXJ5dGhpbmcgaGFzIHRoZSBzYW1lIHR5cGUgc28gZmFyXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHR5cGU7XG59XG4vKipcbiAqIFJldHVybiB0aGUgbGFzdCBpdGVtIGZyb20gYW4gYXJyYXlcbiAqIEBwYXJhbSBhcnJheVxuICogQHJldHVybnMgeyp9XG4gKi9cblxuXG5mdW5jdGlvbiBsYXN0KGFycmF5KSB7XG4gIHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAxXTtcbn1cbi8qKlxuICogR2V0IGFsbCBidXQgdGhlIGxhc3QgZWxlbWVudCBvZiBhcnJheS5cbiAqL1xuXG5cbmZ1bmN0aW9uIGluaXRpYWwoYXJyYXkpIHtcbiAgcmV0dXJuIGFycmF5LnNsaWNlKDAsIGFycmF5Lmxlbmd0aCAtIDEpO1xufVxuLyoqXG4gKiBUZXN0IHdoZXRoZXIgYW4gYXJyYXkgb3Igc3RyaW5nIGNvbnRhaW5zIGFuIGl0ZW1cbiAqIEBwYXJhbSB7QXJyYXkgfCBzdHJpbmd9IGFycmF5XG4gKiBAcGFyYW0geyp9IGl0ZW1cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cblxuXG5mdW5jdGlvbiBjb250YWlucyhhcnJheSwgaXRlbSkge1xuICByZXR1cm4gYXJyYXkuaW5kZXhPZihpdGVtKSAhPT0gLTE7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJpdEFuZEJpZ051bWJlciA9IGJpdEFuZEJpZ051bWJlcjtcbmV4cG9ydHMuYml0Tm90QmlnTnVtYmVyID0gYml0Tm90QmlnTnVtYmVyO1xuZXhwb3J0cy5iaXRPckJpZ051bWJlciA9IGJpdE9yQmlnTnVtYmVyO1xuZXhwb3J0cy5iaXR3aXNlID0gYml0d2lzZTtcbmV4cG9ydHMuYml0WG9yID0gYml0WG9yO1xuZXhwb3J0cy5sZWZ0U2hpZnRCaWdOdW1iZXIgPSBsZWZ0U2hpZnRCaWdOdW1iZXI7XG5leHBvcnRzLnJpZ2h0QXJpdGhTaGlmdEJpZ051bWJlciA9IHJpZ2h0QXJpdGhTaGlmdEJpZ051bWJlcjtcblxuLyoqXG4gKiBCaXR3aXNlIGFuZCBmb3IgQmlnbnVtYmVyc1xuICpcbiAqIFNwZWNpYWwgQ2FzZXM6XG4gKiAgIE4gJiAgbiA9ICBOXG4gKiAgIG4gJiAgMCA9ICAwXG4gKiAgIG4gJiAtMSA9ICBuXG4gKiAgIG4gJiAgbiA9ICBuXG4gKiAgIEkgJiAgSSA9ICBJXG4gKiAgLUkgJiAtSSA9IC1JXG4gKiAgIEkgJiAtSSA9ICAwXG4gKiAgIEkgJiAgbiA9ICBuXG4gKiAgIEkgJiAtbiA9ICBJXG4gKiAgLUkgJiAgbiA9ICAwXG4gKiAgLUkgJiAtbiA9IC1JXG4gKlxuICogQHBhcmFtIHtCaWdOdW1iZXJ9IHhcbiAqIEBwYXJhbSB7QmlnTnVtYmVyfSB5XG4gKiBAcmV0dXJuIHtCaWdOdW1iZXJ9IFJlc3VsdCBvZiBgeGAgJiBgeWAsIGlzIGZ1bGx5IHByZWNpc2VcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGJpdEFuZEJpZ051bWJlcih4LCB5KSB7XG4gIGlmICh4LmlzRmluaXRlKCkgJiYgIXguaXNJbnRlZ2VyKCkgfHwgeS5pc0Zpbml0ZSgpICYmICF5LmlzSW50ZWdlcigpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnRlZ2VycyBleHBlY3RlZCBpbiBmdW5jdGlvbiBiaXRBbmQnKTtcbiAgfVxuXG4gIHZhciBCaWdOdW1iZXIgPSB4LmNvbnN0cnVjdG9yO1xuXG4gIGlmICh4LmlzTmFOKCkgfHwgeS5pc05hTigpKSB7XG4gICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoTmFOKTtcbiAgfVxuXG4gIGlmICh4LmlzWmVybygpIHx8IHkuZXEoLTEpIHx8IHguZXEoeSkpIHtcbiAgICByZXR1cm4geDtcbiAgfVxuXG4gIGlmICh5LmlzWmVybygpIHx8IHguZXEoLTEpKSB7XG4gICAgcmV0dXJuIHk7XG4gIH1cblxuICBpZiAoIXguaXNGaW5pdGUoKSB8fCAheS5pc0Zpbml0ZSgpKSB7XG4gICAgaWYgKCF4LmlzRmluaXRlKCkgJiYgIXkuaXNGaW5pdGUoKSkge1xuICAgICAgaWYgKHguaXNOZWdhdGl2ZSgpID09PSB5LmlzTmVnYXRpdmUoKSkge1xuICAgICAgICByZXR1cm4geDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoMCk7XG4gICAgfVxuXG4gICAgaWYgKCF4LmlzRmluaXRlKCkpIHtcbiAgICAgIGlmICh5LmlzTmVnYXRpdmUoKSkge1xuICAgICAgICByZXR1cm4geDtcbiAgICAgIH1cblxuICAgICAgaWYgKHguaXNOZWdhdGl2ZSgpKSB7XG4gICAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKDApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4geTtcbiAgICB9XG5cbiAgICBpZiAoIXkuaXNGaW5pdGUoKSkge1xuICAgICAgaWYgKHguaXNOZWdhdGl2ZSgpKSB7XG4gICAgICAgIHJldHVybiB5O1xuICAgICAgfVxuXG4gICAgICBpZiAoeS5pc05lZ2F0aXZlKCkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoMCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB4O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBiaXR3aXNlKHgsIHksIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIGEgJiBiO1xuICB9KTtcbn1cbi8qKlxuICogQml0d2lzZSBub3RcbiAqIEBwYXJhbSB7QmlnTnVtYmVyfSB4XG4gKiBAcmV0dXJuIHtCaWdOdW1iZXJ9IFJlc3VsdCBvZiB+YHhgLCBmdWxseSBwcmVjaXNlXG4gKlxuICovXG5cblxuZnVuY3Rpb24gYml0Tm90QmlnTnVtYmVyKHgpIHtcbiAgaWYgKHguaXNGaW5pdGUoKSAmJiAheC5pc0ludGVnZXIoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW50ZWdlciBleHBlY3RlZCBpbiBmdW5jdGlvbiBiaXROb3QnKTtcbiAgfVxuXG4gIHZhciBCaWdOdW1iZXIgPSB4LmNvbnN0cnVjdG9yO1xuICB2YXIgcHJldlByZWMgPSBCaWdOdW1iZXIucHJlY2lzaW9uO1xuICBCaWdOdW1iZXIuY29uZmlnKHtcbiAgICBwcmVjaXNpb246IDFFOVxuICB9KTtcbiAgdmFyIHJlc3VsdCA9IHgucGx1cyhuZXcgQmlnTnVtYmVyKDEpKTtcbiAgcmVzdWx0LnMgPSAtcmVzdWx0LnMgfHwgbnVsbDtcbiAgQmlnTnVtYmVyLmNvbmZpZyh7XG4gICAgcHJlY2lzaW9uOiBwcmV2UHJlY1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogQml0d2lzZSBPUiBmb3IgQmlnTnVtYmVyc1xuICpcbiAqIFNwZWNpYWwgQ2FzZXM6XG4gKiAgIE4gfCAgbiA9ICBOXG4gKiAgIG4gfCAgMCA9ICBuXG4gKiAgIG4gfCAtMSA9IC0xXG4gKiAgIG4gfCAgbiA9ICBuXG4gKiAgIEkgfCAgSSA9ICBJXG4gKiAgLUkgfCAtSSA9IC1JXG4gKiAgIEkgfCAtbiA9IC0xXG4gKiAgIEkgfCAtSSA9IC0xXG4gKiAgIEkgfCAgbiA9ICBJXG4gKiAgLUkgfCAgbiA9IC1JXG4gKiAgLUkgfCAtbiA9IC1uXG4gKlxuICogQHBhcmFtIHtCaWdOdW1iZXJ9IHhcbiAqIEBwYXJhbSB7QmlnTnVtYmVyfSB5XG4gKiBAcmV0dXJuIHtCaWdOdW1iZXJ9IFJlc3VsdCBvZiBgeGAgfCBgeWAsIGZ1bGx5IHByZWNpc2VcbiAqL1xuXG5cbmZ1bmN0aW9uIGJpdE9yQmlnTnVtYmVyKHgsIHkpIHtcbiAgaWYgKHguaXNGaW5pdGUoKSAmJiAheC5pc0ludGVnZXIoKSB8fCB5LmlzRmluaXRlKCkgJiYgIXkuaXNJbnRlZ2VyKCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludGVnZXJzIGV4cGVjdGVkIGluIGZ1bmN0aW9uIGJpdE9yJyk7XG4gIH1cblxuICB2YXIgQmlnTnVtYmVyID0geC5jb25zdHJ1Y3RvcjtcblxuICBpZiAoeC5pc05hTigpIHx8IHkuaXNOYU4oKSkge1xuICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKE5hTik7XG4gIH1cblxuICB2YXIgbmVnT25lID0gbmV3IEJpZ051bWJlcigtMSk7XG5cbiAgaWYgKHguaXNaZXJvKCkgfHwgeS5lcShuZWdPbmUpIHx8IHguZXEoeSkpIHtcbiAgICByZXR1cm4geTtcbiAgfVxuXG4gIGlmICh5LmlzWmVybygpIHx8IHguZXEobmVnT25lKSkge1xuICAgIHJldHVybiB4O1xuICB9XG5cbiAgaWYgKCF4LmlzRmluaXRlKCkgfHwgIXkuaXNGaW5pdGUoKSkge1xuICAgIGlmICgheC5pc0Zpbml0ZSgpICYmICF4LmlzTmVnYXRpdmUoKSAmJiB5LmlzTmVnYXRpdmUoKSB8fCB4LmlzTmVnYXRpdmUoKSAmJiAheS5pc05lZ2F0aXZlKCkgJiYgIXkuaXNGaW5pdGUoKSkge1xuICAgICAgcmV0dXJuIG5lZ09uZTtcbiAgICB9XG5cbiAgICBpZiAoeC5pc05lZ2F0aXZlKCkgJiYgeS5pc05lZ2F0aXZlKCkpIHtcbiAgICAgIHJldHVybiB4LmlzRmluaXRlKCkgPyB4IDogeTtcbiAgICB9XG5cbiAgICByZXR1cm4geC5pc0Zpbml0ZSgpID8geSA6IHg7XG4gIH1cblxuICByZXR1cm4gYml0d2lzZSh4LCB5LCBmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBhIHwgYjtcbiAgfSk7XG59XG4vKipcbiAqIEFwcGxpZXMgYml0d2lzZSBmdW5jdGlvbiB0byBudW1iZXJzXG4gKiBAcGFyYW0ge0JpZ051bWJlcn0geFxuICogQHBhcmFtIHtCaWdOdW1iZXJ9IHlcbiAqIEBwYXJhbSB7ZnVuY3Rpb24gKGEsIGIpfSBmdW5jXG4gKiBAcmV0dXJuIHtCaWdOdW1iZXJ9XG4gKi9cblxuXG5mdW5jdGlvbiBiaXR3aXNlKHgsIHksIGZ1bmMpIHtcbiAgdmFyIEJpZ051bWJlciA9IHguY29uc3RydWN0b3I7XG4gIHZhciB4Qml0cywgeUJpdHM7XG4gIHZhciB4U2lnbiA9ICsoeC5zIDwgMCk7XG4gIHZhciB5U2lnbiA9ICsoeS5zIDwgMCk7XG5cbiAgaWYgKHhTaWduKSB7XG4gICAgeEJpdHMgPSBkZWNDb2VmZmljaWVudFRvQmluYXJ5U3RyaW5nKGJpdE5vdEJpZ051bWJlcih4KSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHhCaXRzLmxlbmd0aDsgKytpKSB7XG4gICAgICB4Qml0c1tpXSBePSAxO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB4Qml0cyA9IGRlY0NvZWZmaWNpZW50VG9CaW5hcnlTdHJpbmcoeCk7XG4gIH1cblxuICBpZiAoeVNpZ24pIHtcbiAgICB5Qml0cyA9IGRlY0NvZWZmaWNpZW50VG9CaW5hcnlTdHJpbmcoYml0Tm90QmlnTnVtYmVyKHkpKTtcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCB5Qml0cy5sZW5ndGg7ICsrX2kpIHtcbiAgICAgIHlCaXRzW19pXSBePSAxO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB5Qml0cyA9IGRlY0NvZWZmaWNpZW50VG9CaW5hcnlTdHJpbmcoeSk7XG4gIH1cblxuICB2YXIgbWluQml0cywgbWF4Qml0cywgbWluU2lnbjtcblxuICBpZiAoeEJpdHMubGVuZ3RoIDw9IHlCaXRzLmxlbmd0aCkge1xuICAgIG1pbkJpdHMgPSB4Qml0cztcbiAgICBtYXhCaXRzID0geUJpdHM7XG4gICAgbWluU2lnbiA9IHhTaWduO1xuICB9IGVsc2Uge1xuICAgIG1pbkJpdHMgPSB5Qml0cztcbiAgICBtYXhCaXRzID0geEJpdHM7XG4gICAgbWluU2lnbiA9IHlTaWduO1xuICB9XG5cbiAgdmFyIHNob3J0TGVuID0gbWluQml0cy5sZW5ndGg7XG4gIHZhciBsb25nTGVuID0gbWF4Qml0cy5sZW5ndGg7XG4gIHZhciBleHBGdW5jVmFsID0gZnVuYyh4U2lnbiwgeVNpZ24pIF4gMTtcbiAgdmFyIG91dFZhbCA9IG5ldyBCaWdOdW1iZXIoZXhwRnVuY1ZhbCBeIDEpO1xuICB2YXIgdHdvUG93ZXIgPSBuZXcgQmlnTnVtYmVyKDEpO1xuICB2YXIgdHdvID0gbmV3IEJpZ051bWJlcigyKTtcbiAgdmFyIHByZXZQcmVjID0gQmlnTnVtYmVyLnByZWNpc2lvbjtcbiAgQmlnTnVtYmVyLmNvbmZpZyh7XG4gICAgcHJlY2lzaW9uOiAxRTlcbiAgfSk7XG5cbiAgd2hpbGUgKHNob3J0TGVuID4gMCkge1xuICAgIGlmIChmdW5jKG1pbkJpdHNbLS1zaG9ydExlbl0sIG1heEJpdHNbLS1sb25nTGVuXSkgPT09IGV4cEZ1bmNWYWwpIHtcbiAgICAgIG91dFZhbCA9IG91dFZhbC5wbHVzKHR3b1Bvd2VyKTtcbiAgICB9XG5cbiAgICB0d29Qb3dlciA9IHR3b1Bvd2VyLnRpbWVzKHR3byk7XG4gIH1cblxuICB3aGlsZSAobG9uZ0xlbiA+IDApIHtcbiAgICBpZiAoZnVuYyhtaW5TaWduLCBtYXhCaXRzWy0tbG9uZ0xlbl0pID09PSBleHBGdW5jVmFsKSB7XG4gICAgICBvdXRWYWwgPSBvdXRWYWwucGx1cyh0d29Qb3dlcik7XG4gICAgfVxuXG4gICAgdHdvUG93ZXIgPSB0d29Qb3dlci50aW1lcyh0d28pO1xuICB9XG5cbiAgQmlnTnVtYmVyLmNvbmZpZyh7XG4gICAgcHJlY2lzaW9uOiBwcmV2UHJlY1xuICB9KTtcblxuICBpZiAoZXhwRnVuY1ZhbCA9PT0gMCkge1xuICAgIG91dFZhbC5zID0gLW91dFZhbC5zO1xuICB9XG5cbiAgcmV0dXJuIG91dFZhbDtcbn1cbi8qIEV4dHJhY3RlZCBmcm9tIGRlY2ltYWwuanMsIGFuZCBlZGl0ZWQgdG8gc3BlY2lhbGl6ZS4gKi9cblxuXG5mdW5jdGlvbiBkZWNDb2VmZmljaWVudFRvQmluYXJ5U3RyaW5nKHgpIHtcbiAgLy8gQ29udmVydCB0byBzdHJpbmdcbiAgdmFyIGEgPSB4LmQ7IC8vIGFycmF5IHdpdGggZGlnaXRzXG5cbiAgdmFyIHIgPSBhWzBdICsgJyc7XG5cbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhLmxlbmd0aDsgKytpKSB7XG4gICAgdmFyIHMgPSBhW2ldICsgJyc7XG5cbiAgICBmb3IgKHZhciB6ID0gNyAtIHMubGVuZ3RoOyB6LS07KSB7XG4gICAgICBzID0gJzAnICsgcztcbiAgICB9XG5cbiAgICByICs9IHM7XG4gIH1cblxuICB2YXIgaiA9IHIubGVuZ3RoO1xuXG4gIHdoaWxlIChyLmNoYXJBdChqKSA9PT0gJzAnKSB7XG4gICAgai0tO1xuICB9XG5cbiAgdmFyIHhlID0geC5lO1xuICB2YXIgc3RyID0gci5zbGljZSgwLCBqICsgMSB8fCAxKTtcbiAgdmFyIHN0ckwgPSBzdHIubGVuZ3RoO1xuXG4gIGlmICh4ZSA+IDApIHtcbiAgICBpZiAoKyt4ZSA+IHN0ckwpIHtcbiAgICAgIC8vIEFwcGVuZCB6ZXJvcy5cbiAgICAgIHhlIC09IHN0ckw7XG5cbiAgICAgIHdoaWxlICh4ZS0tKSB7XG4gICAgICAgIHN0ciArPSAnMCc7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh4ZSA8IHN0ckwpIHtcbiAgICAgIHN0ciA9IHN0ci5zbGljZSgwLCB4ZSkgKyAnLicgKyBzdHIuc2xpY2UoeGUpO1xuICAgIH1cbiAgfSAvLyBDb252ZXJ0IGZyb20gYmFzZSAxMCAoZGVjaW1hbCkgdG8gYmFzZSAyXG5cblxuICB2YXIgYXJyID0gWzBdO1xuXG4gIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IHN0ci5sZW5ndGg7KSB7XG4gICAgdmFyIGFyckwgPSBhcnIubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGFyckwtLSkge1xuICAgICAgYXJyW2FyckxdICo9IDEwO1xuICAgIH1cblxuICAgIGFyclswXSArPSBwYXJzZUludChzdHIuY2hhckF0KF9pMisrKSk7IC8vIGNvbnZlcnQgdG8gaW50XG5cbiAgICBmb3IgKHZhciBfaiA9IDA7IF9qIDwgYXJyLmxlbmd0aDsgKytfaikge1xuICAgICAgaWYgKGFycltfal0gPiAxKSB7XG4gICAgICAgIGlmIChhcnJbX2ogKyAxXSA9PT0gbnVsbCB8fCBhcnJbX2ogKyAxXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYXJyW19qICsgMV0gPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgYXJyW19qICsgMV0gKz0gYXJyW19qXSA+PiAxO1xuICAgICAgICBhcnJbX2pdICY9IDE7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFyci5yZXZlcnNlKCk7XG59XG4vKipcbiAqIEJpdHdpc2UgWE9SIGZvciBCaWdOdW1iZXJzXG4gKlxuICogU3BlY2lhbCBDYXNlczpcbiAqICAgTiBeICBuID0gIE5cbiAqICAgbiBeICAwID0gIG5cbiAqICAgbiBeICBuID0gIDBcbiAqICAgbiBeIC0xID0gfm5cbiAqICAgSSBeICBuID0gIElcbiAqICAgSSBeIC1uID0gLUlcbiAqICAgSSBeIC1JID0gLTFcbiAqICAtSSBeICBuID0gLUlcbiAqICAtSSBeIC1uID0gIElcbiAqXG4gKiBAcGFyYW0ge0JpZ051bWJlcn0geFxuICogQHBhcmFtIHtCaWdOdW1iZXJ9IHlcbiAqIEByZXR1cm4ge0JpZ051bWJlcn0gUmVzdWx0IG9mIGB4YCBeIGB5YCwgZnVsbHkgcHJlY2lzZVxuICpcbiAqL1xuXG5cbmZ1bmN0aW9uIGJpdFhvcih4LCB5KSB7XG4gIGlmICh4LmlzRmluaXRlKCkgJiYgIXguaXNJbnRlZ2VyKCkgfHwgeS5pc0Zpbml0ZSgpICYmICF5LmlzSW50ZWdlcigpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnRlZ2VycyBleHBlY3RlZCBpbiBmdW5jdGlvbiBiaXRYb3InKTtcbiAgfVxuXG4gIHZhciBCaWdOdW1iZXIgPSB4LmNvbnN0cnVjdG9yO1xuXG4gIGlmICh4LmlzTmFOKCkgfHwgeS5pc05hTigpKSB7XG4gICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoTmFOKTtcbiAgfVxuXG4gIGlmICh4LmlzWmVybygpKSB7XG4gICAgcmV0dXJuIHk7XG4gIH1cblxuICBpZiAoeS5pc1plcm8oKSkge1xuICAgIHJldHVybiB4O1xuICB9XG5cbiAgaWYgKHguZXEoeSkpIHtcbiAgICByZXR1cm4gbmV3IEJpZ051bWJlcigwKTtcbiAgfVxuXG4gIHZhciBuZWdPbmUgPSBuZXcgQmlnTnVtYmVyKC0xKTtcblxuICBpZiAoeC5lcShuZWdPbmUpKSB7XG4gICAgcmV0dXJuIGJpdE5vdEJpZ051bWJlcih5KTtcbiAgfVxuXG4gIGlmICh5LmVxKG5lZ09uZSkpIHtcbiAgICByZXR1cm4gYml0Tm90QmlnTnVtYmVyKHgpO1xuICB9XG5cbiAgaWYgKCF4LmlzRmluaXRlKCkgfHwgIXkuaXNGaW5pdGUoKSkge1xuICAgIGlmICgheC5pc0Zpbml0ZSgpICYmICF5LmlzRmluaXRlKCkpIHtcbiAgICAgIHJldHVybiBuZWdPbmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoeC5pc05lZ2F0aXZlKCkgPT09IHkuaXNOZWdhdGl2ZSgpID8gSW5maW5pdHkgOiAtSW5maW5pdHkpO1xuICB9XG5cbiAgcmV0dXJuIGJpdHdpc2UoeCwgeSwgZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gYSBeIGI7XG4gIH0pO1xufVxuLyoqXG4gKiBCaXR3aXNlIGxlZnQgc2hpZnRcbiAqXG4gKiBTcGVjaWFsIENhc2VzOlxuICogIG4gPDwgLW4gPSBOXG4gKiAgbiA8PCAgTiA9IE5cbiAqICBOIDw8ICBuID0gTlxuICogIG4gPDwgIDAgPSBuXG4gKiAgMCA8PCAgbiA9IDBcbiAqICBJIDw8ICBJID0gTlxuICogIEkgPDwgIG4gPSBJXG4gKiAgbiA8PCAgSSA9IElcbiAqXG4gKiBAcGFyYW0ge0JpZ051bWJlcn0geFxuICogQHBhcmFtIHtCaWdOdW1iZXJ9IHlcbiAqIEByZXR1cm4ge0JpZ051bWJlcn0gUmVzdWx0IG9mIGB4YCA8PCBgeWBcbiAqXG4gKi9cblxuXG5mdW5jdGlvbiBsZWZ0U2hpZnRCaWdOdW1iZXIoeCwgeSkge1xuICBpZiAoeC5pc0Zpbml0ZSgpICYmICF4LmlzSW50ZWdlcigpIHx8IHkuaXNGaW5pdGUoKSAmJiAheS5pc0ludGVnZXIoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW50ZWdlcnMgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gbGVmdFNoaWZ0Jyk7XG4gIH1cblxuICB2YXIgQmlnTnVtYmVyID0geC5jb25zdHJ1Y3RvcjtcblxuICBpZiAoeC5pc05hTigpIHx8IHkuaXNOYU4oKSB8fCB5LmlzTmVnYXRpdmUoKSAmJiAheS5pc1plcm8oKSkge1xuICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKE5hTik7XG4gIH1cblxuICBpZiAoeC5pc1plcm8oKSB8fCB5LmlzWmVybygpKSB7XG4gICAgcmV0dXJuIHg7XG4gIH1cblxuICBpZiAoIXguaXNGaW5pdGUoKSAmJiAheS5pc0Zpbml0ZSgpKSB7XG4gICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoTmFOKTtcbiAgfSAvLyBNYXRoLnBvdygyLCB5KSBpcyBmdWxseSBwcmVjaXNlIGZvciB5IDwgNTUsIGFuZCBmYXN0XG5cblxuICBpZiAoeS5sdCg1NSkpIHtcbiAgICByZXR1cm4geC50aW1lcyhNYXRoLnBvdygyLCB5LnRvTnVtYmVyKCkpICsgJycpO1xuICB9XG5cbiAgcmV0dXJuIHgudGltZXMobmV3IEJpZ051bWJlcigyKS5wb3coeSkpO1xufVxuLypcbiAqIFNwZWNpYWwgQ2FzZXM6XG4gKiAgIG4gPj4gLW4gPSAgTlxuICogICBuID4+ICBOID0gIE5cbiAqICAgTiA+PiAgbiA9ICBOXG4gKiAgIEkgPj4gIEkgPSAgTlxuICogICBuID4+ICAwID0gIG5cbiAqICAgSSA+PiAgbiA9ICBJXG4gKiAgLUkgPj4gIG4gPSAtSVxuICogIC1JID4+ICBJID0gLUlcbiAqICAgbiA+PiAgSSA9ICBJXG4gKiAgLW4gPj4gIEkgPSAtMVxuICogICAwID4+ICBuID0gIDBcbiAqXG4gKiBAcGFyYW0ge0JpZ051bWJlcn0gdmFsdWVcbiAqIEBwYXJhbSB7QmlnTnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7QmlnTnVtYmVyfSBSZXN1bHQgb2YgYHhgID4+IGB5YFxuICpcbiAqL1xuXG5cbmZ1bmN0aW9uIHJpZ2h0QXJpdGhTaGlmdEJpZ051bWJlcih4LCB5KSB7XG4gIGlmICh4LmlzRmluaXRlKCkgJiYgIXguaXNJbnRlZ2VyKCkgfHwgeS5pc0Zpbml0ZSgpICYmICF5LmlzSW50ZWdlcigpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnRlZ2VycyBleHBlY3RlZCBpbiBmdW5jdGlvbiByaWdodEFyaXRoU2hpZnQnKTtcbiAgfVxuXG4gIHZhciBCaWdOdW1iZXIgPSB4LmNvbnN0cnVjdG9yO1xuXG4gIGlmICh4LmlzTmFOKCkgfHwgeS5pc05hTigpIHx8IHkuaXNOZWdhdGl2ZSgpICYmICF5LmlzWmVybygpKSB7XG4gICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoTmFOKTtcbiAgfVxuXG4gIGlmICh4LmlzWmVybygpIHx8IHkuaXNaZXJvKCkpIHtcbiAgICByZXR1cm4geDtcbiAgfVxuXG4gIGlmICgheS5pc0Zpbml0ZSgpKSB7XG4gICAgaWYgKHguaXNOZWdhdGl2ZSgpKSB7XG4gICAgICByZXR1cm4gbmV3IEJpZ051bWJlcigtMSk7XG4gICAgfVxuXG4gICAgaWYgKCF4LmlzRmluaXRlKCkpIHtcbiAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKE5hTik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoMCk7XG4gIH0gLy8gTWF0aC5wb3coMiwgeSkgaXMgZnVsbHkgcHJlY2lzZSBmb3IgeSA8IDU1LCBhbmQgZmFzdFxuXG5cbiAgaWYgKHkubHQoNTUpKSB7XG4gICAgcmV0dXJuIHguZGl2KE1hdGgucG93KDIsIHkudG9OdW1iZXIoKSkgKyAnJykuZmxvb3IoKTtcbiAgfVxuXG4gIHJldHVybiB4LmRpdihuZXcgQmlnTnVtYmVyKDIpLnBvdyh5KSkuZmxvb3IoKTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQmlnTnVtYmVyVGF1ID0gZXhwb3J0cy5jcmVhdGVCaWdOdW1iZXJQaSA9IGV4cG9ydHMuY3JlYXRlQmlnTnVtYmVyUGhpID0gZXhwb3J0cy5jcmVhdGVCaWdOdW1iZXJFID0gdm9pZCAwO1xuXG52YXIgX2Z1bmN0aW9uID0gcmVxdWlyZShcIi4uL2Z1bmN0aW9uXCIpO1xuXG4vKipcbiAqIENhbGN1bGF0ZSBCaWdOdW1iZXIgZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gQmlnTnVtYmVyICAgQmlnTnVtYmVyIGNvbnN0cnVjdG9yXG4gKiBAcmV0dXJucyB7QmlnTnVtYmVyfSBSZXR1cm5zIGVcbiAqL1xudmFyIGNyZWF0ZUJpZ051bWJlckUgPSAoMCwgX2Z1bmN0aW9uLm1lbW9pemUpKGZ1bmN0aW9uIChCaWdOdW1iZXIpIHtcbiAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoMSkuZXhwKCk7XG59LCBoYXNoZXIpO1xuLyoqXG4gKiBDYWxjdWxhdGUgQmlnTnVtYmVyIGdvbGRlbiByYXRpbywgcGhpID0gKDErc3FydCg1KSkvMlxuICogQHBhcmFtIHtmdW5jdGlvbn0gQmlnTnVtYmVyICAgQmlnTnVtYmVyIGNvbnN0cnVjdG9yXG4gKiBAcmV0dXJucyB7QmlnTnVtYmVyfSBSZXR1cm5zIHBoaVxuICovXG5cbmV4cG9ydHMuY3JlYXRlQmlnTnVtYmVyRSA9IGNyZWF0ZUJpZ051bWJlckU7XG52YXIgY3JlYXRlQmlnTnVtYmVyUGhpID0gKDAsIF9mdW5jdGlvbi5tZW1vaXplKShmdW5jdGlvbiAoQmlnTnVtYmVyKSB7XG4gIHJldHVybiBuZXcgQmlnTnVtYmVyKDEpLnBsdXMobmV3IEJpZ051bWJlcig1KS5zcXJ0KCkpLmRpdigyKTtcbn0sIGhhc2hlcik7XG4vKipcbiAqIENhbGN1bGF0ZSBCaWdOdW1iZXIgcGkuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBCaWdOdW1iZXIgICBCaWdOdW1iZXIgY29uc3RydWN0b3JcbiAqIEByZXR1cm5zIHtCaWdOdW1iZXJ9IFJldHVybnMgcGlcbiAqL1xuXG5leHBvcnRzLmNyZWF0ZUJpZ051bWJlclBoaSA9IGNyZWF0ZUJpZ051bWJlclBoaTtcbnZhciBjcmVhdGVCaWdOdW1iZXJQaSA9ICgwLCBfZnVuY3Rpb24ubWVtb2l6ZSkoZnVuY3Rpb24gKEJpZ051bWJlcikge1xuICByZXR1cm4gQmlnTnVtYmVyLmFjb3MoLTEpO1xufSwgaGFzaGVyKTtcbi8qKlxuICogQ2FsY3VsYXRlIEJpZ051bWJlciB0YXUsIHRhdSA9IDIgKiBwaVxuICogQHBhcmFtIHtmdW5jdGlvbn0gQmlnTnVtYmVyICAgQmlnTnVtYmVyIGNvbnN0cnVjdG9yXG4gKiBAcmV0dXJucyB7QmlnTnVtYmVyfSBSZXR1cm5zIHRhdVxuICovXG5cbmV4cG9ydHMuY3JlYXRlQmlnTnVtYmVyUGkgPSBjcmVhdGVCaWdOdW1iZXJQaTtcbnZhciBjcmVhdGVCaWdOdW1iZXJUYXUgPSAoMCwgX2Z1bmN0aW9uLm1lbW9pemUpKGZ1bmN0aW9uIChCaWdOdW1iZXIpIHtcbiAgcmV0dXJuIGNyZWF0ZUJpZ051bWJlclBpKEJpZ051bWJlcikudGltZXMoMik7XG59LCBoYXNoZXIpO1xuLyoqXG4gKiBDcmVhdGUgYSBoYXNoIGZvciBhIEJpZ051bWJlciBjb25zdHJ1Y3RvciBmdW5jdGlvbi4gVGhlIGNyZWF0ZWQgaGFzIGlzXG4gKiB0aGUgY29uZmlndXJlZCBwcmVjaXNpb25cbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgICAgICAgICBTdXBwb3NlZCB0byBjb250YWluIGEgc2luZ2xlIGVudHJ5IHdpdGhcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIEJpZ051bWJlciBjb25zdHJ1Y3RvclxuICogQHJldHVybiB7bnVtYmVyfSBwcmVjaXNpb25cbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0cy5jcmVhdGVCaWdOdW1iZXJUYXUgPSBjcmVhdGVCaWdOdW1iZXJUYXU7XG5cbmZ1bmN0aW9uIGhhc2hlcihhcmdzKSB7XG4gIHJldHVybiBhcmdzWzBdLnByZWNpc2lvbjtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZm9ybWF0ID0gZm9ybWF0O1xuZXhwb3J0cy50b0VuZ2luZWVyaW5nID0gdG9FbmdpbmVlcmluZztcbmV4cG9ydHMudG9FeHBvbmVudGlhbCA9IHRvRXhwb25lbnRpYWw7XG5leHBvcnRzLnRvRml4ZWQgPSB0b0ZpeGVkO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi9vYmplY3RcIik7XG5cbi8qKlxuICogQ29udmVydCBhIEJpZ051bWJlciB0byBhIGZvcm1hdHRlZCBzdHJpbmcgcmVwcmVzZW50YXRpb24uXG4gKlxuICogU3ludGF4OlxuICpcbiAqICAgIGZvcm1hdCh2YWx1ZSlcbiAqICAgIGZvcm1hdCh2YWx1ZSwgb3B0aW9ucylcbiAqICAgIGZvcm1hdCh2YWx1ZSwgcHJlY2lzaW9uKVxuICogICAgZm9ybWF0KHZhbHVlLCBmbilcbiAqXG4gKiBXaGVyZTpcbiAqXG4gKiAgICB7bnVtYmVyfSB2YWx1ZSAgIFRoZSB2YWx1ZSB0byBiZSBmb3JtYXR0ZWRcbiAqICAgIHtPYmplY3R9IG9wdGlvbnMgQW4gb2JqZWN0IHdpdGggZm9ybWF0dGluZyBvcHRpb25zLiBBdmFpbGFibGUgb3B0aW9uczpcbiAqICAgICAgICAgICAgICAgICAgICAge3N0cmluZ30gbm90YXRpb25cbiAqICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlciBub3RhdGlvbi4gQ2hvb3NlIGZyb206XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAnZml4ZWQnICAgICAgICAgIEFsd2F5cyB1c2UgcmVndWxhciBudW1iZXIgbm90YXRpb24uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlICcxMjMuNDAnIGFuZCAnMTQwMDAwMDAnXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAnZXhwb25lbnRpYWwnICAgIEFsd2F5cyB1c2UgZXhwb25lbnRpYWwgbm90YXRpb24uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlICcxLjIzNGUrMicgYW5kICcxLjRlKzcnXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAnYXV0bycgKGRlZmF1bHQpIFJlZ3VsYXIgbnVtYmVyIG5vdGF0aW9uIGZvciBudW1iZXJzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmluZyBhbiBhYnNvbHV0ZSB2YWx1ZSBiZXR3ZWVuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBsb3dlcmAgYW5kIGB1cHBlcmAgYm91bmRzLCBhbmQgdXNlc1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvbmVudGlhbCBub3RhdGlvbiBlbHNld2hlcmUuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvd2VyIGJvdW5kIGlzIGluY2x1ZGVkLCB1cHBlciBib3VuZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBleGNsdWRlZC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUgJzEyMy40JyBhbmQgJzEuNGU3Jy5cbiAqICAgICAgICAgICAgICAgICAgICAge251bWJlcn0gcHJlY2lzaW9uICAgQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxNiB0byByb3VuZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZGlnaXRzIG9mIHRoZSBudW1iZXIuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIGNhc2Ugb2Ygbm90YXRpb25zICdleHBvbmVudGlhbCcsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbmdpbmVlcmluZycsIGFuZCAnYXV0bycsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBwcmVjaXNpb25gIGRlZmluZXMgdGhlIHRvdGFsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMgcmV0dXJuZWQuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIGNhc2Ugb2Ygbm90YXRpb24gJ2ZpeGVkJyxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHByZWNpc2lvbmAgZGVmaW5lcyB0aGUgbnVtYmVyIG9mXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25pZmljYW50IGRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHByZWNpc2lvbmAgaXMgdW5kZWZpbmVkIGJ5IGRlZmF1bHQuXG4gKiAgICAgICAgICAgICAgICAgICAgIHtudW1iZXJ9IGxvd2VyRXhwICAgIEV4cG9uZW50IGRldGVybWluaW5nIHRoZSBsb3dlciBib3VuZGFyeVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZm9ybWF0dGluZyBhIHZhbHVlIHdpdGggYW4gZXhwb25lbnRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBgbm90YXRpb249J2F1dG9gLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0IHZhbHVlIGlzIGAtM2AuXG4gKiAgICAgICAgICAgICAgICAgICAgIHtudW1iZXJ9IHVwcGVyRXhwICAgIEV4cG9uZW50IGRldGVybWluaW5nIHRoZSB1cHBlciBib3VuZGFyeVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZm9ybWF0dGluZyBhIHZhbHVlIHdpdGggYW4gZXhwb25lbnRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBgbm90YXRpb249J2F1dG9gLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0IHZhbHVlIGlzIGA1YC5cbiAqICAgIHtGdW5jdGlvbn0gZm4gICAgQSBjdXN0b20gZm9ybWF0dGluZyBmdW5jdGlvbi4gQ2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgIGJ1aWx0LWluIG5vdGF0aW9ucy4gRnVuY3Rpb24gYGZuYCBpcyBjYWxsZWQgd2l0aCBgdmFsdWVgIGFzXG4gKiAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlciBhbmQgbXVzdCByZXR1cm4gYSBzdHJpbmcuIElzIHVzZWZ1bCBmb3IgZXhhbXBsZSB0b1xuICogICAgICAgICAgICAgICAgICAgICBmb3JtYXQgYWxsIHZhbHVlcyBpbnNpZGUgYSBtYXRyaXggaW4gYSBwYXJ0aWN1bGFyIHdheS5cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgICBmb3JtYXQoNi40KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAnNi40J1xuICogICAgZm9ybWF0KDEyNDAwMDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzEuMjRlNidcbiAqICAgIGZvcm1hdCgxLzMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICcwLjMzMzMzMzMzMzMzMzMzMzMnXG4gKiAgICBmb3JtYXQoMS8zLCAzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAnMC4zMzMnXG4gKiAgICBmb3JtYXQoMjEzODUsIDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAnMjEwMDAnXG4gKiAgICBmb3JtYXQoMTJlOCwge25vdGF0aW9uOiAnZml4ZWQnfSkgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zICcxMjAwMDAwMDAwJ1xuICogICAgZm9ybWF0KDIuMywgICAge25vdGF0aW9uOiAnZml4ZWQnLCBwcmVjaXNpb246IDR9KSAgLy8gcmV0dXJucyAnMi4zMDAwJ1xuICogICAgZm9ybWF0KDUyLjgsICAge25vdGF0aW9uOiAnZXhwb25lbnRpYWwnfSkgICAgICAgICAgLy8gcmV0dXJucyAnNS4yOGUrMSdcbiAqICAgIGZvcm1hdCgxMjQwMCwgIHtub3RhdGlvbjogJ2VuZ2luZWVyaW5nJ30pICAgICAgICAgIC8vIHJldHVybnMgJzEyLjQwMGUrMydcbiAqXG4gKiBAcGFyYW0ge0JpZ051bWJlcn0gdmFsdWVcbiAqIEBwYXJhbSB7T2JqZWN0IHwgRnVuY3Rpb24gfCBudW1iZXJ9IFtvcHRpb25zXVxuICogQHJldHVybiB7c3RyaW5nfSBzdHIgVGhlIGZvcm1hdHRlZCB2YWx1ZVxuICovXG5mdW5jdGlvbiBmb3JtYXQodmFsdWUsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gaGFuZGxlIGZvcm1hdCh2YWx1ZSwgZm4pXG4gICAgcmV0dXJuIG9wdGlvbnModmFsdWUpO1xuICB9IC8vIGhhbmRsZSBzcGVjaWFsIGNhc2VzXG5cblxuICBpZiAoIXZhbHVlLmlzRmluaXRlKCkpIHtcbiAgICByZXR1cm4gdmFsdWUuaXNOYU4oKSA/ICdOYU4nIDogdmFsdWUuZ3QoMCkgPyAnSW5maW5pdHknIDogJy1JbmZpbml0eSc7XG4gIH0gLy8gZGVmYXVsdCB2YWx1ZXMgZm9yIG9wdGlvbnNcblxuXG4gIHZhciBub3RhdGlvbiA9ICdhdXRvJztcbiAgdmFyIHByZWNpc2lvbjtcblxuICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gZGV0ZXJtaW5lIG5vdGF0aW9uIGZyb20gb3B0aW9uc1xuICAgIGlmIChvcHRpb25zLm5vdGF0aW9uKSB7XG4gICAgICBub3RhdGlvbiA9IG9wdGlvbnMubm90YXRpb247XG4gICAgfSAvLyBkZXRlcm1pbmUgcHJlY2lzaW9uIGZyb20gb3B0aW9uc1xuXG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdudW1iZXInKSB7XG4gICAgICBwcmVjaXNpb24gPSBvcHRpb25zO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5wcmVjaXNpb24pIHtcbiAgICAgIHByZWNpc2lvbiA9IG9wdGlvbnMucHJlY2lzaW9uO1xuICAgIH1cbiAgfSAvLyBoYW5kbGUgdGhlIHZhcmlvdXMgbm90YXRpb25zXG5cblxuICBzd2l0Y2ggKG5vdGF0aW9uKSB7XG4gICAgY2FzZSAnZml4ZWQnOlxuICAgICAgcmV0dXJuIHRvRml4ZWQodmFsdWUsIHByZWNpc2lvbik7XG5cbiAgICBjYXNlICdleHBvbmVudGlhbCc6XG4gICAgICByZXR1cm4gdG9FeHBvbmVudGlhbCh2YWx1ZSwgcHJlY2lzaW9uKTtcblxuICAgIGNhc2UgJ2VuZ2luZWVyaW5nJzpcbiAgICAgIHJldHVybiB0b0VuZ2luZWVyaW5nKHZhbHVlLCBwcmVjaXNpb24pO1xuXG4gICAgY2FzZSAnYXV0byc6XG4gICAgICB7XG4gICAgICAgIC8vIFRPRE86IGNsZWFuIHVwIHNvbWUgZGF5LiBEZXByZWNhdGVkIHNpbmNlOiAyMDE4LTAxLTI0XG4gICAgICAgIC8vIEBkZXByZWNhdGVkIHVwcGVyIGFuZCBsb3dlciBhcmUgcmVwbGFjZWQgd2l0aCB1cHBlckV4cCBhbmQgbG93ZXJFeHAgc2luY2UgdjQuMC4wXG4gICAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZXhwb25lbnRpYWwgJiYgKG9wdGlvbnMuZXhwb25lbnRpYWwubG93ZXIgIT09IHVuZGVmaW5lZCB8fCBvcHRpb25zLmV4cG9uZW50aWFsLnVwcGVyICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgdmFyIGZpeGVkT3B0aW9ucyA9ICgwLCBfb2JqZWN0Lm1hcE9iamVjdCkob3B0aW9ucywgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGZpeGVkT3B0aW9ucy5leHBvbmVudGlhbCA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgIGlmIChvcHRpb25zLmV4cG9uZW50aWFsLmxvd2VyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGZpeGVkT3B0aW9ucy5sb3dlckV4cCA9IE1hdGgucm91bmQoTWF0aC5sb2cob3B0aW9ucy5leHBvbmVudGlhbC5sb3dlcikgLyBNYXRoLkxOMTApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChvcHRpb25zLmV4cG9uZW50aWFsLnVwcGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGZpeGVkT3B0aW9ucy51cHBlckV4cCA9IE1hdGgucm91bmQoTWF0aC5sb2cob3B0aW9ucy5leHBvbmVudGlhbC51cHBlcikgLyBNYXRoLkxOMTApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnNvbGUud2FybignRGVwcmVjYXRpb24gd2FybmluZzogRm9ybWF0dGluZyBvcHRpb25zIGV4cG9uZW50aWFsLmxvd2VyIGFuZCBleHBvbmVudGlhbC51cHBlciAnICsgJyhtaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlKSAnICsgJ2FyZSByZXBsYWNlZCB3aXRoIGV4cG9uZW50aWFsLmxvd2VyRXhwIGFuZCBleHBvbmVudGlhbC51cHBlckV4cCAnICsgJyhtaW5pbXVtIGFuZCBtYXhpbXVtIGV4cG9uZW50KSBzaW5jZSB2ZXJzaW9uIDQuMC4wLiAnICsgJ1JlcGxhY2UgJyArIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpICsgJyB3aXRoICcgKyBKU09OLnN0cmluZ2lmeShmaXhlZE9wdGlvbnMpKTtcbiAgICAgICAgICByZXR1cm4gZm9ybWF0KHZhbHVlLCBmaXhlZE9wdGlvbnMpO1xuICAgICAgICB9IC8vIGRldGVybWluZSBsb3dlciBhbmQgdXBwZXIgYm91bmQgZm9yIGV4cG9uZW50aWFsIG5vdGF0aW9uLlxuICAgICAgICAvLyBUT0RPOiBpbXBsZW1lbnQgc3VwcG9ydCBmb3IgdXBwZXIgYW5kIGxvd2VyIHRvIGJlIEJpZ051bWJlcnMgdGhlbXNlbHZlc1xuXG5cbiAgICAgICAgdmFyIGxvd2VyRXhwID0gb3B0aW9ucyAmJiBvcHRpb25zLmxvd2VyRXhwICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmxvd2VyRXhwIDogLTM7XG4gICAgICAgIHZhciB1cHBlckV4cCA9IG9wdGlvbnMgJiYgb3B0aW9ucy51cHBlckV4cCAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy51cHBlckV4cCA6IDU7IC8vIGhhbmRsZSBzcGVjaWFsIGNhc2UgemVyb1xuXG4gICAgICAgIGlmICh2YWx1ZS5pc1plcm8oKSkgcmV0dXJuICcwJzsgLy8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHRvIG91dHB1dCBleHBvbmVudGlhbCBub3RhdGlvblxuXG4gICAgICAgIHZhciBzdHI7XG4gICAgICAgIHZhciByb3VuZGVkID0gdmFsdWUudG9TaWduaWZpY2FudERpZ2l0cyhwcmVjaXNpb24pO1xuICAgICAgICB2YXIgZXhwID0gcm91bmRlZC5lO1xuXG4gICAgICAgIGlmIChleHAgPj0gbG93ZXJFeHAgJiYgZXhwIDwgdXBwZXJFeHApIHtcbiAgICAgICAgICAvLyBub3JtYWwgbnVtYmVyIG5vdGF0aW9uXG4gICAgICAgICAgc3RyID0gcm91bmRlZC50b0ZpeGVkKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gZXhwb25lbnRpYWwgbm90YXRpb25cbiAgICAgICAgICBzdHIgPSB0b0V4cG9uZW50aWFsKHZhbHVlLCBwcmVjaXNpb24pO1xuICAgICAgICB9IC8vIHJlbW92ZSB0cmFpbGluZyB6ZXJvcyBhZnRlciB0aGUgZGVjaW1hbCBwb2ludFxuXG5cbiAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oKFxcLlxcZCo/KSgwKykpKCR8ZSkvLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIGRpZ2l0cyA9IGFyZ3VtZW50c1syXTtcbiAgICAgICAgICB2YXIgZSA9IGFyZ3VtZW50c1s0XTtcbiAgICAgICAgICByZXR1cm4gZGlnaXRzICE9PSAnLicgPyBkaWdpdHMgKyBlIDogZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIG5vdGF0aW9uIFwiJyArIG5vdGF0aW9uICsgJ1wiLiAnICsgJ0Nob29zZSBcImF1dG9cIiwgXCJleHBvbmVudGlhbFwiLCBvciBcImZpeGVkXCIuJyk7XG4gIH1cbn1cbi8qKlxuICogRm9ybWF0IGEgQmlnTnVtYmVyIGluIGVuZ2luZWVyaW5nIG5vdGF0aW9uLiBMaWtlICcxLjIzZSs2JywgJzIuM2UrMCcsICczLjUwMGUtMydcbiAqIEBwYXJhbSB7QmlnTnVtYmVyIHwgc3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IFtwcmVjaXNpb25dICAgICAgICBPcHRpb25hbCBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZmlndXJlcyB0byByZXR1cm4uXG4gKi9cblxuXG5mdW5jdGlvbiB0b0VuZ2luZWVyaW5nKHZhbHVlLCBwcmVjaXNpb24pIHtcbiAgLy8gZmluZCBuZWFyZXN0IGxvd2VyIG11bHRpcGxlIG9mIDMgZm9yIGV4cG9uZW50XG4gIHZhciBlID0gdmFsdWUuZTtcbiAgdmFyIG5ld0V4cCA9IGUgJSAzID09PSAwID8gZSA6IGUgPCAwID8gZSAtIDMgLSBlICUgMyA6IGUgLSBlICUgMzsgLy8gZmluZCBkaWZmZXJlbmNlIGluIGV4cG9uZW50cywgYW5kIGNhbGN1bGF0ZSB0aGUgdmFsdWUgd2l0aG91dCBleHBvbmVudFxuXG4gIHZhciB2YWx1ZVdpdGhvdXRFeHAgPSB2YWx1ZS5tdWwoTWF0aC5wb3coMTAsIC1uZXdFeHApKTtcbiAgdmFyIHZhbHVlU3RyID0gdmFsdWVXaXRob3V0RXhwLnRvUHJlY2lzaW9uKHByZWNpc2lvbik7XG5cbiAgaWYgKHZhbHVlU3RyLmluZGV4T2YoJ2UnKSAhPT0gLTEpIHtcbiAgICB2YWx1ZVN0ciA9IHZhbHVlV2l0aG91dEV4cC50b1N0cmluZygpO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlU3RyICsgJ2UnICsgKGUgPj0gMCA/ICcrJyA6ICcnKSArIG5ld0V4cC50b1N0cmluZygpO1xufVxuLyoqXG4gKiBGb3JtYXQgYSBudW1iZXIgaW4gZXhwb25lbnRpYWwgbm90YXRpb24uIExpa2UgJzEuMjNlKzUnLCAnMi4zZSswJywgJzMuNTAwZS0zJ1xuICogQHBhcmFtIHtCaWdOdW1iZXJ9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gW3ByZWNpc2lvbl0gIE51bWJlciBvZiBkaWdpdHMgaW4gZm9ybWF0dGVkIG91dHB1dC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgbm90IHByb3ZpZGVkLCB0aGUgbWF4aW11bSBhdmFpbGFibGUgZGlnaXRzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHVzZWQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBzdHJcbiAqL1xuXG5cbmZ1bmN0aW9uIHRvRXhwb25lbnRpYWwodmFsdWUsIHByZWNpc2lvbikge1xuICBpZiAocHJlY2lzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdmFsdWUudG9FeHBvbmVudGlhbChwcmVjaXNpb24gLSAxKTsgLy8gTm90ZSB0aGUgb2Zmc2V0IG9mIG9uZVxuICB9IGVsc2Uge1xuICAgIHJldHVybiB2YWx1ZS50b0V4cG9uZW50aWFsKCk7XG4gIH1cbn1cbi8qKlxuICogRm9ybWF0IGEgbnVtYmVyIHdpdGggZml4ZWQgbm90YXRpb24uXG4gKiBAcGFyYW0ge0JpZ051bWJlcn0gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcHJlY2lzaW9uPXVuZGVmaW5lZF0gT3B0aW9uYWwgbnVtYmVyIG9mIGRlY2ltYWxzIGFmdGVyIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNpbWFsIHBvaW50LiBVbmRlZmluZWQgYnkgZGVmYXVsdC5cbiAqL1xuXG5cbmZ1bmN0aW9uIHRvRml4ZWQodmFsdWUsIHByZWNpc2lvbikge1xuICByZXR1cm4gdmFsdWUudG9GaXhlZChwcmVjaXNpb24pO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5uZWFybHlFcXVhbCA9IG5lYXJseUVxdWFsO1xuXG4vKipcbiAqIENvbXBhcmVzIHR3byBCaWdOdW1iZXJzLlxuICogQHBhcmFtIHtCaWdOdW1iZXJ9IHggICAgICAgRmlyc3QgdmFsdWUgdG8gY29tcGFyZVxuICogQHBhcmFtIHtCaWdOdW1iZXJ9IHkgICAgICAgU2Vjb25kIHZhbHVlIHRvIGNvbXBhcmVcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZXBzaWxvbl0gIFRoZSBtYXhpbXVtIHJlbGF0aXZlIGRpZmZlcmVuY2UgYmV0d2VlbiB4IGFuZCB5XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBlcHNpbG9uIGlzIHVuZGVmaW5lZCBvciBudWxsLCB0aGUgZnVuY3Rpb24gd2lsbFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdCB3aGV0aGVyIHggYW5kIHkgYXJlIGV4YWN0bHkgZXF1YWwuXG4gKiBAcmV0dXJuIHtib29sZWFufSB3aGV0aGVyIHRoZSB0d28gbnVtYmVycyBhcmUgbmVhcmx5IGVxdWFsXG4gKi9cbmZ1bmN0aW9uIG5lYXJseUVxdWFsKHgsIHksIGVwc2lsb24pIHtcbiAgLy8gaWYgZXBzaWxvbiBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGVzdCB3aGV0aGVyIHggYW5kIHkgYXJlIGV4YWN0bHkgZXF1YWxcbiAgaWYgKGVwc2lsb24gPT09IG51bGwgfHwgZXBzaWxvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHguZXEoeSk7XG4gIH0gLy8gdXNlIFwiPT1cIiBvcGVyYXRvciwgaGFuZGxlcyBpbmZpbml0aWVzXG5cblxuICBpZiAoeC5lcSh5KSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIE5hTlxuXG5cbiAgaWYgKHguaXNOYU4oKSB8fCB5LmlzTmFOKCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gYXQgdGhpcyBwb2ludCB4IGFuZCB5IHNob3VsZCBiZSBmaW5pdGVcblxuXG4gIGlmICh4LmlzRmluaXRlKCkgJiYgeS5pc0Zpbml0ZSgpKSB7XG4gICAgLy8gY2hlY2sgbnVtYmVycyBhcmUgdmVyeSBjbG9zZSwgbmVlZGVkIHdoZW4gY29tcGFyaW5nIG51bWJlcnMgbmVhciB6ZXJvXG4gICAgdmFyIGRpZmYgPSB4Lm1pbnVzKHkpLmFicygpO1xuXG4gICAgaWYgKGRpZmYuaXNaZXJvKCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB1c2UgcmVsYXRpdmUgZXJyb3JcbiAgICAgIHZhciBtYXggPSB4LmNvbnN0cnVjdG9yLm1heCh4LmFicygpLCB5LmFicygpKTtcbiAgICAgIHJldHVybiBkaWZmLmx0ZShtYXgudGltZXMoZXBzaWxvbikpO1xuICAgIH1cbiAgfSAvLyBJbmZpbml0ZSBhbmQgTnVtYmVyIG9yIG5lZ2F0aXZlIEluZmluaXRlIGFuZCBwb3NpdGl2ZSBJbmZpbml0ZSBjYXNlc1xuXG5cbiAgcmV0dXJuIGZhbHNlO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb250YWluc0NvbGxlY3Rpb25zID0gY29udGFpbnNDb2xsZWN0aW9ucztcbmV4cG9ydHMuZGVlcEZvckVhY2ggPSBkZWVwRm9yRWFjaDtcbmV4cG9ydHMuZGVlcE1hcCA9IGRlZXBNYXA7XG5leHBvcnRzLnJlZHVjZSA9IHJlZHVjZTtcbmV4cG9ydHMuc2NhdHRlciA9IHNjYXR0ZXI7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi9pc1wiKTtcblxudmFyIF9JbmRleEVycm9yID0gcmVxdWlyZShcIi4uL2Vycm9yL0luZGV4RXJyb3JcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi9hcnJheVwiKTtcblxuLyoqXG4gKiBUZXN0IHdoZXRoZXIgYW4gYXJyYXkgY29udGFpbnMgY29sbGVjdGlvbnNcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIHdoZW4gdGhlIGFycmF5IGNvbnRhaW5zIG9uZSBvciBtdWx0aXBsZVxuICogICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25zIChBcnJheXMgb3IgTWF0cmljZXMpLiBSZXR1cm5zIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZnVuY3Rpb24gY29udGFpbnNDb2xsZWN0aW9ucyhhcnJheSkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKCgwLCBfaXMuaXNDb2xsZWN0aW9uKShhcnJheVtpXSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbi8qKlxuICogUmVjdXJzaXZlbHkgbG9vcCBvdmVyIGFsbCBlbGVtZW50cyBpbiBhIGdpdmVuIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5XG4gKiBhbmQgaW52b2tlIHRoZSBjYWxsYmFjayBvbiBlYWNoIG9mIHRoZSBlbGVtZW50cy5cbiAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IGFycmF5XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgICAgVGhlIGNhbGxiYWNrIG1ldGhvZCBpcyBpbnZva2VkIHdpdGggb25lXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyOiB0aGUgY3VycmVudCBlbGVtZW50IGluIHRoZSBhcnJheVxuICovXG5cblxuZnVuY3Rpb24gZGVlcEZvckVhY2goYXJyYXksIGNhbGxiYWNrKSB7XG4gIGlmICgoMCwgX2lzLmlzTWF0cml4KShhcnJheSkpIHtcbiAgICBhcnJheSA9IGFycmF5LnZhbHVlT2YoKTtcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwLCBpaSA9IGFycmF5Lmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpXTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgZGVlcEZvckVhY2godmFsdWUsIGNhbGxiYWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbGJhY2sodmFsdWUpO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBFeGVjdXRlIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBlbGVtZW50IHdpc2UgZm9yIGVhY2ggZWxlbWVudCBpbiBhcnJheSBhbmQgYW55XG4gKiBuZXN0ZWQgYXJyYXlcbiAqIFJldHVybnMgYW4gYXJyYXkgd2l0aCB0aGUgcmVzdWx0c1xuICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0gYXJyYXlcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgVGhlIGNhbGxiYWNrIGlzIGNhbGxlZCB3aXRoIHR3byBwYXJhbWV0ZXJzOlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTEgYW5kIHZhbHVlMiwgd2hpY2ggY29udGFpbiB0aGUgY3VycmVudFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50IG9mIGJvdGggYXJyYXlzLlxuICogQHBhcmFtIHtib29sZWFufSBbc2tpcFplcm9zXSBJbnZva2UgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIG5vbi16ZXJvIHZhbHVlcyBvbmx5LlxuICpcbiAqIEByZXR1cm4ge0FycmF5IHwgTWF0cml4fSByZXNcbiAqL1xuXG5cbmZ1bmN0aW9uIGRlZXBNYXAoYXJyYXksIGNhbGxiYWNrLCBza2lwWmVyb3MpIHtcbiAgaWYgKGFycmF5ICYmIHR5cGVvZiBhcnJheS5tYXAgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBUT0RPOiByZXBsYWNlIGFycmF5Lm1hcCB3aXRoIGEgZm9yIGxvb3AgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZVxuICAgIHJldHVybiBhcnJheS5tYXAoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBkZWVwTWFwKHgsIGNhbGxiYWNrLCBza2lwWmVyb3MpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBjYWxsYmFjayhhcnJheSk7XG4gIH1cbn1cbi8qKlxuICogUmVkdWNlIGEgZ2l2ZW4gbWF0cml4IG9yIGFycmF5IHRvIGEgbmV3IG1hdHJpeCBvclxuICogYXJyYXkgd2l0aCBvbmUgbGVzcyBkaW1lbnNpb24sIGFwcGx5aW5nIHRoZSBnaXZlblxuICogY2FsbGJhY2sgaW4gdGhlIHNlbGVjdGVkIGRpbWVuc2lvbi5cbiAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IG1hdFxuICogQHBhcmFtIHtudW1iZXJ9IGRpbVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge0FycmF5IHwgTWF0cml4fSByZXNcbiAqL1xuXG5cbmZ1bmN0aW9uIHJlZHVjZShtYXQsIGRpbSwgY2FsbGJhY2spIHtcbiAgdmFyIHNpemUgPSBBcnJheS5pc0FycmF5KG1hdCkgPyAoMCwgX2FycmF5LmFycmF5U2l6ZSkobWF0KSA6IG1hdC5zaXplKCk7XG5cbiAgaWYgKGRpbSA8IDAgfHwgZGltID49IHNpemUubGVuZ3RoKSB7XG4gICAgLy8gVE9ETzogd291bGQgYmUgbW9yZSBjbGVhciB3aGVuIHRocm93aW5nIGEgRGltZW5zaW9uRXJyb3IgaGVyZVxuICAgIHRocm93IG5ldyBfSW5kZXhFcnJvci5JbmRleEVycm9yKGRpbSwgc2l6ZS5sZW5ndGgpO1xuICB9XG5cbiAgaWYgKCgwLCBfaXMuaXNNYXRyaXgpKG1hdCkpIHtcbiAgICByZXR1cm4gbWF0LmNyZWF0ZShfcmVkdWNlKG1hdC52YWx1ZU9mKCksIGRpbSwgY2FsbGJhY2spKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gX3JlZHVjZShtYXQsIGRpbSwgY2FsbGJhY2spO1xuICB9XG59XG4vKipcbiAqIFJlY3Vyc2l2ZWx5IHJlZHVjZSBhIG1hdHJpeFxuICogQHBhcmFtIHtBcnJheX0gbWF0XG4gKiBAcGFyYW0ge251bWJlcn0gZGltXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybnMge0FycmF5fSByZXRcbiAqIEBwcml2YXRlXG4gKi9cblxuXG5mdW5jdGlvbiBfcmVkdWNlKG1hdCwgZGltLCBjYWxsYmFjaykge1xuICB2YXIgaSwgcmV0LCB2YWwsIHRyYW47XG5cbiAgaWYgKGRpbSA8PSAwKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KG1hdFswXSkpIHtcbiAgICAgIHZhbCA9IG1hdFswXTtcblxuICAgICAgZm9yIChpID0gMTsgaSA8IG1hdC5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YWwgPSBjYWxsYmFjayh2YWwsIG1hdFtpXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2YWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyYW4gPSBfc3dpdGNoKG1hdCk7XG4gICAgICByZXQgPSBbXTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IHRyYW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmV0W2ldID0gX3JlZHVjZSh0cmFuW2ldLCBkaW0gLSAxLCBjYWxsYmFjayk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldCA9IFtdO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IG1hdC5sZW5ndGg7IGkrKykge1xuICAgICAgcmV0W2ldID0gX3JlZHVjZShtYXRbaV0sIGRpbSAtIDEsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9XG59XG4vKipcbiAqIFRyYW5zcG9zZSBhIG1hdHJpeFxuICogQHBhcmFtIHtBcnJheX0gbWF0XG4gKiBAcmV0dXJucyB7QXJyYXl9IHJldFxuICogQHByaXZhdGVcbiAqL1xuXG5cbmZ1bmN0aW9uIF9zd2l0Y2gobWF0KSB7XG4gIHZhciBJID0gbWF0Lmxlbmd0aDtcbiAgdmFyIEogPSBtYXRbMF0ubGVuZ3RoO1xuICB2YXIgaSwgajtcbiAgdmFyIHJldCA9IFtdO1xuXG4gIGZvciAoaiA9IDA7IGogPCBKOyBqKyspIHtcbiAgICB2YXIgdG1wID0gW107XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgSTsgaSsrKSB7XG4gICAgICB0bXAucHVzaChtYXRbaV1bal0pO1xuICAgIH1cblxuICAgIHJldC5wdXNoKHRtcCk7XG4gIH1cblxuICByZXR1cm4gcmV0O1xufSAvLyBUT0RPOiBkb2N1bWVudCBmdW5jdGlvbiBzY2F0dGVyXG5cblxuZnVuY3Rpb24gc2NhdHRlcihhLCBqLCB3LCB4LCB1LCBtYXJrLCBjaW5kZXgsIGYsIGludmVyc2UsIHVwZGF0ZSwgdmFsdWUpIHtcbiAgLy8gYSBhcnJheXNcbiAgdmFyIGF2YWx1ZXMgPSBhLl92YWx1ZXM7XG4gIHZhciBhaW5kZXggPSBhLl9pbmRleDtcbiAgdmFyIGFwdHIgPSBhLl9wdHI7IC8vIHZhcnNcblxuICB2YXIgaywgazAsIGsxLCBpOyAvLyBjaGVjayB3ZSBuZWVkIHRvIHByb2Nlc3MgdmFsdWVzIChwYXR0ZXJuIG1hdHJpeClcblxuICBpZiAoeCkge1xuICAgIC8vIHZhbHVlcyBpbiBqXG4gICAgZm9yIChrMCA9IGFwdHJbal0sIGsxID0gYXB0cltqICsgMV0sIGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgIC8vIHJvd1xuICAgICAgaSA9IGFpbmRleFtrXTsgLy8gY2hlY2sgdmFsdWUgZXhpc3RzIGluIGN1cnJlbnQgalxuXG4gICAgICBpZiAod1tpXSAhPT0gbWFyaykge1xuICAgICAgICAvLyBpIGlzIG5ldyBlbnRyeSBpbiBqXG4gICAgICAgIHdbaV0gPSBtYXJrOyAvLyBhZGQgaSB0byBwYXR0ZXJuIG9mIENcblxuICAgICAgICBjaW5kZXgucHVzaChpKTsgLy8geChpKSA9IEEsIGNoZWNrIHdlIG5lZWQgdG8gY2FsbCBmdW5jdGlvbiB0aGlzIHRpbWVcblxuICAgICAgICBpZiAodXBkYXRlKSB7XG4gICAgICAgICAgLy8gY29weSB2YWx1ZSB0byB3b3Jrc3BhY2UgY2FsbGluZyBjYWxsYmFjayBmdW5jdGlvblxuICAgICAgICAgIHhbaV0gPSBpbnZlcnNlID8gZihhdmFsdWVzW2tdLCB2YWx1ZSkgOiBmKHZhbHVlLCBhdmFsdWVzW2tdKTsgLy8gZnVuY3Rpb24gd2FzIGNhbGxlZCBvbiBjdXJyZW50IHJvd1xuXG4gICAgICAgICAgdVtpXSA9IG1hcms7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gY29weSB2YWx1ZSB0byB3b3Jrc3BhY2VcbiAgICAgICAgICB4W2ldID0gYXZhbHVlc1trXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaSBleGlzdHMgaW4gQyBhbHJlYWR5XG4gICAgICAgIHhbaV0gPSBpbnZlcnNlID8gZihhdmFsdWVzW2tdLCB4W2ldKSA6IGYoeFtpXSwgYXZhbHVlc1trXSk7IC8vIGZ1bmN0aW9uIHdhcyBjYWxsZWQgb24gY3VycmVudCByb3dcblxuICAgICAgICB1W2ldID0gbWFyaztcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gdmFsdWVzIGluIGpcbiAgICBmb3IgKGswID0gYXB0cltqXSwgazEgPSBhcHRyW2ogKyAxXSwgayA9IGswOyBrIDwgazE7IGsrKykge1xuICAgICAgLy8gcm93XG4gICAgICBpID0gYWluZGV4W2tdOyAvLyBjaGVjayB2YWx1ZSBleGlzdHMgaW4gY3VycmVudCBqXG5cbiAgICAgIGlmICh3W2ldICE9PSBtYXJrKSB7XG4gICAgICAgIC8vIGkgaXMgbmV3IGVudHJ5IGluIGpcbiAgICAgICAgd1tpXSA9IG1hcms7IC8vIGFkZCBpIHRvIHBhdHRlcm4gb2YgQ1xuXG4gICAgICAgIGNpbmRleC5wdXNoKGkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaW5kaWNhdGUgZnVuY3Rpb24gd2FzIGNhbGxlZCBvbiBjdXJyZW50IHJvd1xuICAgICAgICB1W2ldID0gbWFyaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tcGxleEVxdWFscyA9IGNvbXBsZXhFcXVhbHM7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4vbnVtYmVyXCIpO1xuXG4vKipcbiAqIFRlc3Qgd2hldGhlciB0d28gY29tcGxleCB2YWx1ZXMgYXJlIGVxdWFsIHByb3ZpZGVkIGEgZ2l2ZW4gZXBzaWxvbi5cbiAqIERvZXMgbm90IHVzZSBvciBjaGFuZ2UgdGhlIGdsb2JhbCBDb21wbGV4LkVQU0lMT04gc2V0dGluZ1xuICogQHBhcmFtIHtDb21wbGV4fSB4XG4gKiBAcGFyYW0ge0NvbXBsZXh9IHlcbiAqIEBwYXJhbSB7bnVtYmVyfSBlcHNpbG9uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gY29tcGxleEVxdWFscyh4LCB5LCBlcHNpbG9uKSB7XG4gIHJldHVybiAoMCwgX251bWJlci5uZWFybHlFcXVhbCkoeC5yZSwgeS5yZSwgZXBzaWxvbikgJiYgKDAsIF9udW1iZXIubmVhcmx5RXF1YWwpKHguaW0sIHkuaW0sIGVwc2lsb24pO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5nZXRTYWZlUHJvcGVydHkgPSBnZXRTYWZlUHJvcGVydHk7XG5leHBvcnRzLnNldFNhZmVQcm9wZXJ0eSA9IHNldFNhZmVQcm9wZXJ0eTtcbmV4cG9ydHMuaXNTYWZlUHJvcGVydHkgPSBpc1NhZmVQcm9wZXJ0eTtcbmV4cG9ydHMudmFsaWRhdGVTYWZlTWV0aG9kID0gdmFsaWRhdGVTYWZlTWV0aG9kO1xuZXhwb3J0cy5pc1NhZmVNZXRob2QgPSBpc1NhZmVNZXRob2Q7XG5leHBvcnRzLmlzUGxhaW5PYmplY3QgPSBpc1BsYWluT2JqZWN0O1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuL29iamVjdFwiKTtcblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG4vKipcbiAqIEdldCBhIHByb3BlcnR5IG9mIGEgcGxhaW4gb2JqZWN0XG4gKiBUaHJvd3MgYW4gZXJyb3IgaW4gY2FzZSB0aGUgb2JqZWN0IGlzIG5vdCBhIHBsYWluIG9iamVjdCBvciB0aGVcbiAqIHByb3BlcnR5IGlzIG5vdCBkZWZpbmVkIG9uIHRoZSBvYmplY3QgaXRzZWxmXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcFxuICogQHJldHVybiB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUgd2hlbiBzYWZlXG4gKi9cbmZ1bmN0aW9uIGdldFNhZmVQcm9wZXJ0eShvYmplY3QsIHByb3ApIHtcbiAgLy8gb25seSBhbGxvdyBnZXR0aW5nIHNhZmUgcHJvcGVydGllcyBvZiBhIHBsYWluIG9iamVjdFxuICBpZiAoaXNQbGFpbk9iamVjdChvYmplY3QpICYmIGlzU2FmZVByb3BlcnR5KG9iamVjdCwgcHJvcCkpIHtcbiAgICByZXR1cm4gb2JqZWN0W3Byb3BdO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmplY3RbcHJvcF0gPT09ICdmdW5jdGlvbicgJiYgaXNTYWZlTWV0aG9kKG9iamVjdCwgcHJvcCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBhY2Nlc3MgbWV0aG9kIFwiJyArIHByb3AgKyAnXCIgYXMgYSBwcm9wZXJ0eScpO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKCdObyBhY2Nlc3MgdG8gcHJvcGVydHkgXCInICsgcHJvcCArICdcIicpO1xufVxuLyoqXG4gKiBTZXQgYSBwcm9wZXJ0eSBvbiBhIHBsYWluIG9iamVjdC5cbiAqIFRocm93cyBhbiBlcnJvciBpbiBjYXNlIHRoZSBvYmplY3QgaXMgbm90IGEgcGxhaW4gb2JqZWN0IG9yIHRoZVxuICogcHJvcGVydHkgd291bGQgb3ZlcnJpZGUgYW4gaW5oZXJpdGVkIHByb3BlcnR5IGxpa2UgLmNvbnN0cnVjdG9yIG9yIC50b1N0cmluZ1xuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4geyp9IFJldHVybnMgdGhlIHZhbHVlXG4gKi9cbi8vIFRPRE86IG1lcmdlIHRoaXMgZnVuY3Rpb24gaW50byBhY2Nlc3MuanM/XG5cblxuZnVuY3Rpb24gc2V0U2FmZVByb3BlcnR5KG9iamVjdCwgcHJvcCwgdmFsdWUpIHtcbiAgLy8gb25seSBhbGxvdyBzZXR0aW5nIHNhZmUgcHJvcGVydGllcyBvZiBhIHBsYWluIG9iamVjdFxuICBpZiAoaXNQbGFpbk9iamVjdChvYmplY3QpICYmIGlzU2FmZVByb3BlcnR5KG9iamVjdCwgcHJvcCkpIHtcbiAgICBvYmplY3RbcHJvcF0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoJ05vIGFjY2VzcyB0byBwcm9wZXJ0eSBcIicgKyBwcm9wICsgJ1wiJyk7XG59XG4vKipcbiAqIFRlc3Qgd2hldGhlciBhIHByb3BlcnR5IGlzIHNhZmUgdG8gdXNlIGZvciBhbiBvYmplY3QuXG4gKiBGb3IgZXhhbXBsZSAudG9TdHJpbmcgYW5kIC5jb25zdHJ1Y3RvciBhcmUgbm90IHNhZmVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wXG4gKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgd2hlbiBzYWZlXG4gKi9cblxuXG5mdW5jdGlvbiBpc1NhZmVQcm9wZXJ0eShvYmplY3QsIHByb3ApIHtcbiAgaWYgKCFvYmplY3QgfHwgX3R5cGVvZihvYmplY3QpICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBTQUZFOiB3aGl0ZWxpc3RlZFxuICAvLyBlLmcgbGVuZ3RoXG5cblxuICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKHNhZmVOYXRpdmVQcm9wZXJ0aWVzLCBwcm9wKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIFVOU0FGRTogaW5oZXJpdGVkIGZyb20gT2JqZWN0IHByb3RvdHlwZVxuICAvLyBlLmcgY29uc3RydWN0b3JcblxuXG4gIGlmIChwcm9wIGluIE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICAvLyAnaW4nIGlzIHVzZWQgaW5zdGVhZCBvZiBoYXNPd25Qcm9wZXJ0eSBmb3Igbm9kZWpzIHYwLjEwXG4gICAgLy8gd2hpY2ggaXMgaW5jb25zaXN0ZW50IG9uIHJvb3QgcHJvdG90eXBlcy4gSXQgaXMgc2FmZVxuICAgIC8vIGhlcmUgYmVjYXVzZSBPYmplY3QucHJvdG90eXBlIGlzIGEgcm9vdCBvYmplY3RcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gVU5TQUZFOiBpbmhlcml0ZWQgZnJvbSBGdW5jdGlvbiBwcm90b3R5cGVcbiAgLy8gZS5nIGNhbGwsIGFwcGx5XG5cblxuICBpZiAocHJvcCBpbiBGdW5jdGlvbi5wcm90b3R5cGUpIHtcbiAgICAvLyAnaW4nIGlzIHVzZWQgaW5zdGVhZCBvZiBoYXNPd25Qcm9wZXJ0eSBmb3Igbm9kZWpzIHYwLjEwXG4gICAgLy8gd2hpY2ggaXMgaW5jb25zaXN0ZW50IG9uIHJvb3QgcHJvdG90eXBlcy4gSXQgaXMgc2FmZVxuICAgIC8vIGhlcmUgYmVjYXVzZSBGdW5jdGlvbi5wcm90b3R5cGUgaXMgYSByb290IG9iamVjdFxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuLyoqXG4gKiBWYWxpZGF0ZSB3aGV0aGVyIGEgbWV0aG9kIGlzIHNhZmUuXG4gKiBUaHJvd3MgYW4gZXJyb3Igd2hlbiB0aGF0J3Mgbm90IHRoZSBjYXNlLlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZFxuICovXG4vLyBUT0RPOiBtZXJnZSB0aGlzIGZ1bmN0aW9uIGludG8gYXNzaWduLmpzP1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlU2FmZU1ldGhvZChvYmplY3QsIG1ldGhvZCkge1xuICBpZiAoIWlzU2FmZU1ldGhvZChvYmplY3QsIG1ldGhvZCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGFjY2VzcyB0byBtZXRob2QgXCInICsgbWV0aG9kICsgJ1wiJyk7XG4gIH1cbn1cbi8qKlxuICogQ2hlY2sgd2hldGhlciBhIG1ldGhvZCBpcyBzYWZlLlxuICogVGhyb3dzIGFuIGVycm9yIHdoZW4gdGhhdCdzIG5vdCB0aGUgY2FzZSAoZm9yIGV4YW1wbGUgZm9yIGBjb25zdHJ1Y3RvcmApLlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZFxuICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIHdoZW4gc2FmZSwgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cblxuXG5mdW5jdGlvbiBpc1NhZmVNZXRob2Qob2JqZWN0LCBtZXRob2QpIHtcbiAgaWYgKG9iamVjdCA9PT0gbnVsbCB8fCBvYmplY3QgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2Ygb2JqZWN0W21ldGhvZF0gIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gVU5TQUZFOiBnaG9zdGVkXG4gIC8vIGUuZyBvdmVycmlkZGVuIHRvU3RyaW5nXG4gIC8vIE5vdGUgdGhhdCBJRTEwIGRvZXNuJ3Qgc3VwcG9ydCBfX3Byb3RvX18gYW5kIHdlIGNhbid0IGRvIHRoaXMgY2hlY2sgdGhlcmUuXG5cblxuICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKG9iamVjdCwgbWV0aG9kKSAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YgJiYgbWV0aG9kIGluIE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIFNBRkU6IHdoaXRlbGlzdGVkXG4gIC8vIGUuZyB0b1N0cmluZ1xuXG5cbiAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShzYWZlTmF0aXZlTWV0aG9kcywgbWV0aG9kKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIFVOU0FGRTogaW5oZXJpdGVkIGZyb20gT2JqZWN0IHByb3RvdHlwZVxuICAvLyBlLmcgY29uc3RydWN0b3JcblxuXG4gIGlmIChtZXRob2QgaW4gT2JqZWN0LnByb3RvdHlwZSkge1xuICAgIC8vICdpbicgaXMgdXNlZCBpbnN0ZWFkIG9mIGhhc093blByb3BlcnR5IGZvciBub2RlanMgdjAuMTBcbiAgICAvLyB3aGljaCBpcyBpbmNvbnNpc3RlbnQgb24gcm9vdCBwcm90b3R5cGVzLiBJdCBpcyBzYWZlXG4gICAgLy8gaGVyZSBiZWNhdXNlIE9iamVjdC5wcm90b3R5cGUgaXMgYSByb290IG9iamVjdFxuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBVTlNBRkU6IGluaGVyaXRlZCBmcm9tIEZ1bmN0aW9uIHByb3RvdHlwZVxuICAvLyBlLmcgY2FsbCwgYXBwbHlcblxuXG4gIGlmIChtZXRob2QgaW4gRnVuY3Rpb24ucHJvdG90eXBlKSB7XG4gICAgLy8gJ2luJyBpcyB1c2VkIGluc3RlYWQgb2YgaGFzT3duUHJvcGVydHkgZm9yIG5vZGVqcyB2MC4xMFxuICAgIC8vIHdoaWNoIGlzIGluY29uc2lzdGVudCBvbiByb290IHByb3RvdHlwZXMuIEl0IGlzIHNhZmVcbiAgICAvLyBoZXJlIGJlY2F1c2UgRnVuY3Rpb24ucHJvdG90eXBlIGlzIGEgcm9vdCBvYmplY3RcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvYmplY3QpIHtcbiAgcmV0dXJuIF90eXBlb2Yob2JqZWN0KSA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICYmIG9iamVjdC5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0O1xufVxuXG52YXIgc2FmZU5hdGl2ZVByb3BlcnRpZXMgPSB7XG4gIGxlbmd0aDogdHJ1ZSxcbiAgbmFtZTogdHJ1ZVxufTtcbnZhciBzYWZlTmF0aXZlTWV0aG9kcyA9IHtcbiAgdG9TdHJpbmc6IHRydWUsXG4gIHZhbHVlT2Y6IHRydWUsXG4gIHRvTG9jYWxlU3RyaW5nOiB0cnVlXG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5taXhpbiA9IG1peGluO1xuXG52YXIgX3RpbnlFbWl0dGVyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwidGlueS1lbWl0dGVyXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbi8qKlxuICogRXh0ZW5kIGdpdmVuIG9iamVjdCB3aXRoIGVtaXR0ZXIgZnVuY3Rpb25zIGBvbmAsIGBvZmZgLCBgb25jZWAsIGBlbWl0YFxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHJldHVybiB7T2JqZWN0fSBvYmpcbiAqL1xuZnVuY3Rpb24gbWl4aW4ob2JqKSB7XG4gIC8vIGNyZWF0ZSBldmVudCBlbWl0dGVyXG4gIHZhciBlbWl0dGVyID0gbmV3IF90aW55RW1pdHRlcltcImRlZmF1bHRcIl0oKTsgLy8gYmluZCBtZXRob2RzIHRvIG9iaiAod2UgZG9uJ3Qgd2FudCB0byBleHBvc2UgdGhlIGVtaXR0ZXIuZSBBcnJheS4uLilcblxuICBvYmoub24gPSBlbWl0dGVyLm9uLmJpbmQoZW1pdHRlcik7XG4gIG9iai5vZmYgPSBlbWl0dGVyLm9mZi5iaW5kKGVtaXR0ZXIpO1xuICBvYmoub25jZSA9IGVtaXR0ZXIub25jZS5iaW5kKGVtaXR0ZXIpO1xuICBvYmouZW1pdCA9IGVtaXR0ZXIuZW1pdC5iaW5kKGVtaXR0ZXIpO1xuICByZXR1cm4gb2JqO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5mYWN0b3J5ID0gZmFjdG9yeTtcbmV4cG9ydHMuc29ydEZhY3RvcmllcyA9IHNvcnRGYWN0b3JpZXM7XG5leHBvcnRzLmNyZWF0ZSA9IGNyZWF0ZTtcbmV4cG9ydHMuaXNGYWN0b3J5ID0gaXNGYWN0b3J5O1xuZXhwb3J0cy5hc3NlcnREZXBlbmRlbmNpZXMgPSBhc3NlcnREZXBlbmRlbmNpZXM7XG5leHBvcnRzLmlzT3B0aW9uYWxEZXBlbmRlbmN5ID0gaXNPcHRpb25hbERlcGVuZGVuY3k7XG5leHBvcnRzLnN0cmlwT3B0aW9uYWxOb3RhdGlvbiA9IHN0cmlwT3B0aW9uYWxOb3RhdGlvbjtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuL2FycmF5XCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuL29iamVjdFwiKTtcblxuLyoqXG4gKiBDcmVhdGUgYSBmYWN0b3J5IGZ1bmN0aW9uLCB3aGljaCBjYW4gYmUgdXNlZCB0byBpbmplY3QgZGVwZW5kZW5jaWVzLlxuICpcbiAqIFRoZSBjcmVhdGVkIGZ1bmN0aW9ucyBhcmUgbWVtb2l6ZWQsIGEgY29uc2VjdXRpdmUgY2FsbCBvZiB0aGUgZmFjdG9yeVxuICogd2l0aCB0aGUgZXhhY3Qgc2FtZSBpbnB1dHMgd2lsbCByZXR1cm4gdGhlIHNhbWUgZnVuY3Rpb24gaW5zdGFuY2UuXG4gKiBUaGUgbWVtb2l6ZWQgY2FjaGUgaXMgZXhwb3NlZCBvbiBgZmFjdG9yeS5jYWNoZWAgYW5kIGNhbiBiZSBjbGVhcmVkXG4gKiBpZiBuZWVkZWQuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiAgICAgY29uc3QgbmFtZSA9ICdsb2cnXG4gKiAgICAgY29uc3QgZGVwZW5kZW5jaWVzID0gWydjb25maWcnLCAndHlwZWQnLCAnZGl2aWRlU2NhbGFyJywgJ0NvbXBsZXgnXVxuICpcbiAqICAgICBleHBvcnQgY29uc3QgY3JlYXRlTG9nID0gZmFjdG9yeShuYW1lLCBkZXBlbmRlbmNpZXMsICh7IHR5cGVkLCBjb25maWcsIGRpdmlkZVNjYWxhciwgQ29tcGxleCB9KSA9PiB7XG4gKiAgICAgICAvLyAuLi4gY3JlYXRlIHRoZSBmdW5jdGlvbiBsb2cgaGVyZSBhbmQgcmV0dXJuIGl0XG4gKiAgICAgfVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lICAgICAgICAgICBOYW1lIG9mIHRoZSBmdW5jdGlvbiB0byBiZSBjcmVhdGVkXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBkZXBlbmRlbmNpZXMgVGhlIG5hbWVzIG9mIGFsbCByZXF1aXJlZCBkZXBlbmRlbmNpZXNcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNyZWF0ZSAgICAgICBDYWxsYmFjayBmdW5jdGlvbiBjYWxsZWQgd2l0aCBhbiBvYmplY3Qgd2l0aCBhbGwgZGVwZW5kZW5jaWVzXG4gKiBAcGFyYW0ge09iamVjdH0gW21ldGFdICAgICAgICAgT3B0aW9uYWwgb2JqZWN0IHdpdGggbWV0YSBpbmZvcm1hdGlvbiB0aGF0IHdpbGwgYmUgYXR0YWNoZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgY3JlYXRlZCBmYWN0b3J5IGZ1bmN0aW9uIGFzIHByb3BlcnR5IGBtZXRhYC5cbiAqIEByZXR1cm5zIHtmdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gZmFjdG9yeShuYW1lLCBkZXBlbmRlbmNpZXMsIGNyZWF0ZSwgbWV0YSkge1xuICBmdW5jdGlvbiBhc3NlcnRBbmRDcmVhdGUoc2NvcGUpIHtcbiAgICAvLyB3ZSBvbmx5IHBhc3MgdGhlIHJlcXVlc3RlZCBkZXBlbmRlbmNpZXMgdG8gdGhlIGZhY3RvcnkgZnVuY3Rpb25cbiAgICAvLyB0byBwcmV2ZW50IGZ1bmN0aW9ucyB0byByZWx5IG9uIGRlcGVuZGVuY2llcyB0aGF0IGFyZSBub3QgZXhwbGljaXRseVxuICAgIC8vIHJlcXVlc3RlZC5cbiAgICB2YXIgZGVwcyA9ICgwLCBfb2JqZWN0LnBpY2tTaGFsbG93KShzY29wZSwgZGVwZW5kZW5jaWVzLm1hcChzdHJpcE9wdGlvbmFsTm90YXRpb24pKTtcbiAgICBhc3NlcnREZXBlbmRlbmNpZXMobmFtZSwgZGVwZW5kZW5jaWVzLCBzY29wZSk7XG4gICAgcmV0dXJuIGNyZWF0ZShkZXBzKTtcbiAgfVxuXG4gIGFzc2VydEFuZENyZWF0ZS5pc0ZhY3RvcnkgPSB0cnVlO1xuICBhc3NlcnRBbmRDcmVhdGUuZm4gPSBuYW1lO1xuICBhc3NlcnRBbmRDcmVhdGUuZGVwZW5kZW5jaWVzID0gZGVwZW5kZW5jaWVzLnNsaWNlKCkuc29ydCgpO1xuXG4gIGlmIChtZXRhKSB7XG4gICAgYXNzZXJ0QW5kQ3JlYXRlLm1ldGEgPSBtZXRhO1xuICB9XG5cbiAgcmV0dXJuIGFzc2VydEFuZENyZWF0ZTtcbn1cbi8qKlxuICogU29ydCBhbGwgZmFjdG9yaWVzIHN1Y2ggdGhhdCB3aGVuIGxvYWRpbmcgaW4gb3JkZXIsIHRoZSBkZXBlbmRlbmNpZXMgYXJlIHJlc29sdmVkLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGZhY3Rvcmllc1xuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGEgbmV3IGFycmF5IHdpdGggdGhlIHNvcnRlZCBmYWN0b3JpZXMuXG4gKi9cblxuXG5mdW5jdGlvbiBzb3J0RmFjdG9yaWVzKGZhY3Rvcmllcykge1xuICB2YXIgZmFjdG9yaWVzQnlOYW1lID0ge307XG4gIGZhY3Rvcmllcy5mb3JFYWNoKGZ1bmN0aW9uIChmYWN0b3J5KSB7XG4gICAgZmFjdG9yaWVzQnlOYW1lW2ZhY3RvcnkuZm5dID0gZmFjdG9yeTtcbiAgfSk7XG5cbiAgZnVuY3Rpb24gY29udGFpbnNEZXBlbmRlbmN5KGZhY3RvcnksIGRlcGVuZGVuY3kpIHtcbiAgICAvLyBUT0RPOiBkZXRlY3QgY2lyY3VsYXIgcmVmZXJlbmNlc1xuICAgIGlmIChpc0ZhY3RvcnkoZmFjdG9yeSkpIHtcbiAgICAgIGlmICgoMCwgX2FycmF5LmNvbnRhaW5zKShmYWN0b3J5LmRlcGVuZGVuY2llcywgZGVwZW5kZW5jeS5mbiB8fCBkZXBlbmRlbmN5Lm5hbWUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmFjdG9yeS5kZXBlbmRlbmNpZXMuc29tZShmdW5jdGlvbiAoZCkge1xuICAgICAgICByZXR1cm4gY29udGFpbnNEZXBlbmRlbmN5KGZhY3Rvcmllc0J5TmFtZVtkXSwgZGVwZW5kZW5jeSk7XG4gICAgICB9KSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgc29ydGVkID0gW107XG5cbiAgZnVuY3Rpb24gYWRkRmFjdG9yeShmYWN0b3J5KSB7XG4gICAgdmFyIGluZGV4ID0gMDtcblxuICAgIHdoaWxlIChpbmRleCA8IHNvcnRlZC5sZW5ndGggJiYgIWNvbnRhaW5zRGVwZW5kZW5jeShzb3J0ZWRbaW5kZXhdLCBmYWN0b3J5KSkge1xuICAgICAgaW5kZXgrKztcbiAgICB9XG5cbiAgICBzb3J0ZWQuc3BsaWNlKGluZGV4LCAwLCBmYWN0b3J5KTtcbiAgfSAvLyBzb3J0IHJlZ3VsYXIgZmFjdG9yeSBmdW5jdGlvbnNcblxuXG4gIGZhY3Rvcmllcy5maWx0ZXIoaXNGYWN0b3J5KS5mb3JFYWNoKGFkZEZhY3RvcnkpOyAvLyBzb3J0IGxlZ2FjeSBmYWN0b3J5IGZ1bmN0aW9ucyBBRlRFUiB0aGUgcmVndWxhciBmYWN0b3J5IGZ1bmN0aW9uc1xuXG4gIGZhY3Rvcmllcy5maWx0ZXIoZnVuY3Rpb24gKGZhY3RvcnkpIHtcbiAgICByZXR1cm4gIWlzRmFjdG9yeShmYWN0b3J5KTtcbiAgfSkuZm9yRWFjaChhZGRGYWN0b3J5KTtcbiAgcmV0dXJuIHNvcnRlZDtcbn0gLy8gVE9ETzogY29tbWVudCBvciBjbGVhbnVwIGlmIHVudXNlZCBpbiB0aGUgZW5kXG5cblxuZnVuY3Rpb24gY3JlYXRlKGZhY3Rvcmllcykge1xuICB2YXIgc2NvcGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICBzb3J0RmFjdG9yaWVzKGZhY3RvcmllcykuZm9yRWFjaChmdW5jdGlvbiAoZmFjdG9yeSkge1xuICAgIHJldHVybiBmYWN0b3J5KHNjb3BlKTtcbiAgfSk7XG4gIHJldHVybiBzY29wZTtcbn1cbi8qKlxuICogVGVzdCB3aGV0aGVyIGFuIG9iamVjdCBpcyBhIGZhY3RvcnkuIFRoaXMgaXMgdGhlIGNhc2Ugd2hlbiBpdCBoYXNcbiAqIHByb3BlcnRpZXMgbmFtZSwgZGVwZW5kZW5jaWVzLCBhbmQgYSBmdW5jdGlvbiBjcmVhdGUuXG4gKiBAcGFyYW0geyp9IG9ialxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cblxuXG5mdW5jdGlvbiBpc0ZhY3Rvcnkob2JqKSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvYmouZm4gPT09ICdzdHJpbmcnICYmIEFycmF5LmlzQXJyYXkob2JqLmRlcGVuZGVuY2llcyk7XG59XG4vKipcbiAqIEFzc2VydCB0aGF0IGFsbCBkZXBlbmRlbmNpZXMgb2YgYSBsaXN0IHdpdGggZGVwZW5kZW5jaWVzIGFyZSBhdmFpbGFibGUgaW4gdGhlIHByb3ZpZGVkIHNjb3BlLlxuICpcbiAqIFdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIHdoZW4gdGhlcmUgYXJlIGRlcGVuZGVuY2llcyBtaXNzaW5nLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lICAgTmFtZSBmb3IgdGhlIGZ1bmN0aW9uIHRvIGJlIGNyZWF0ZWQuIFVzZWQgdG8gZ2VuZXJhdGUgYSB1c2VmdWwgZXJyb3IgbWVzc2FnZVxuICogQHBhcmFtIHtzdHJpbmdbXX0gZGVwZW5kZW5jaWVzXG4gKiBAcGFyYW0ge09iamVjdH0gc2NvcGVcbiAqL1xuXG5cbmZ1bmN0aW9uIGFzc2VydERlcGVuZGVuY2llcyhuYW1lLCBkZXBlbmRlbmNpZXMsIHNjb3BlKSB7XG4gIHZhciBhbGxEZWZpbmVkID0gZGVwZW5kZW5jaWVzLmZpbHRlcihmdW5jdGlvbiAoZGVwZW5kZW5jeSkge1xuICAgIHJldHVybiAhaXNPcHRpb25hbERlcGVuZGVuY3koZGVwZW5kZW5jeSk7XG4gIH0pIC8vIGZpbHRlciBvcHRpb25hbHNcbiAgLmV2ZXJ5KGZ1bmN0aW9uIChkZXBlbmRlbmN5KSB7XG4gICAgcmV0dXJuIHNjb3BlW2RlcGVuZGVuY3ldICE9PSB1bmRlZmluZWQ7XG4gIH0pO1xuXG4gIGlmICghYWxsRGVmaW5lZCkge1xuICAgIHZhciBtaXNzaW5nRGVwZW5kZW5jaWVzID0gZGVwZW5kZW5jaWVzLmZpbHRlcihmdW5jdGlvbiAoZGVwZW5kZW5jeSkge1xuICAgICAgcmV0dXJuIHNjb3BlW2RlcGVuZGVuY3ldID09PSB1bmRlZmluZWQ7XG4gICAgfSk7IC8vIFRPRE86IGNyZWF0ZSBhIGN1c3RvbSBlcnJvciBjbGFzcyBmb3IgdGhpcywgYSBNYXRoanNFcnJvciBvciBzb21ldGhpbmcgbGlrZSB0aGF0XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgY3JlYXRlIGZ1bmN0aW9uIFxcXCJcIi5jb25jYXQobmFtZSwgXCJcXFwiLCBcIikgKyBcInNvbWUgZGVwZW5kZW5jaWVzIGFyZSBtaXNzaW5nOiBcIi5jb25jYXQobWlzc2luZ0RlcGVuZGVuY2llcy5tYXAoZnVuY3Rpb24gKGQpIHtcbiAgICAgIHJldHVybiBcIlxcXCJcIi5jb25jYXQoZCwgXCJcXFwiXCIpO1xuICAgIH0pLmpvaW4oJywgJyksIFwiLlwiKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNPcHRpb25hbERlcGVuZGVuY3koZGVwZW5kZW5jeSkge1xuICByZXR1cm4gZGVwZW5kZW5jeSAmJiBkZXBlbmRlbmN5WzBdID09PSAnPyc7XG59XG5cbmZ1bmN0aW9uIHN0cmlwT3B0aW9uYWxOb3RhdGlvbihkZXBlbmRlbmN5KSB7XG4gIHJldHVybiBkZXBlbmRlbmN5ICYmIGRlcGVuZGVuY3lbMF0gPT09ICc/JyA/IGRlcGVuZGVuY3kuc2xpY2UoMSkgOiBkZXBlbmRlbmN5O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tZW1vaXplID0gbWVtb2l6ZTtcbmV4cG9ydHMubWVtb2l6ZUNvbXBhcmUgPSBtZW1vaXplQ29tcGFyZTtcbmV4cG9ydHMubWF4QXJndW1lbnRDb3VudCA9IG1heEFyZ3VtZW50Q291bnQ7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuLy8gZnVuY3Rpb24gdXRpbHNcblxuLyoqXG4gKiBNZW1vaXplIGEgZ2l2ZW4gZnVuY3Rpb24gYnkgY2FjaGluZyB0aGUgY29tcHV0ZWQgcmVzdWx0LlxuICogVGhlIGNhY2hlIG9mIGEgbWVtb2l6ZWQgZnVuY3Rpb24gY2FuIGJlIGNsZWFyZWQgYnkgZGVsZXRpbmcgdGhlIGBjYWNoZWBcbiAqIHByb3BlcnR5IG9mIHRoZSBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBmbiAgICAgICAgICAgICAgICAgICAgIFRoZSBmdW5jdGlvbiB0byBiZSBtZW1vaXplZC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTXVzdCBiZSBhIHB1cmUgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKGFyZ3M6IEFycmF5KX0gW2hhc2hlcl0gIEEgY3VzdG9tIGhhc2ggYnVpbGRlci5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXMgSlNPTi5zdHJpbmdpZnkgYnkgZGVmYXVsdC5cbiAqIEByZXR1cm4ge2Z1bmN0aW9ufSAgICAgICAgICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgbWVtb2l6ZWQgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gbWVtb2l6ZShmbiwgaGFzaGVyKSB7XG4gIHJldHVybiBmdW5jdGlvbiBtZW1vaXplKCkge1xuICAgIGlmIChfdHlwZW9mKG1lbW9pemUuY2FjaGUpICE9PSAnb2JqZWN0Jykge1xuICAgICAgbWVtb2l6ZS5jYWNoZSA9IHt9O1xuICAgIH1cblxuICAgIHZhciBhcmdzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG5cbiAgICB2YXIgaGFzaCA9IGhhc2hlciA/IGhhc2hlcihhcmdzKSA6IEpTT04uc3RyaW5naWZ5KGFyZ3MpO1xuXG4gICAgaWYgKCEoaGFzaCBpbiBtZW1vaXplLmNhY2hlKSkge1xuICAgICAgbWVtb2l6ZS5jYWNoZVtoYXNoXSA9IGZuLmFwcGx5KGZuLCBhcmdzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVtb2l6ZS5jYWNoZVtoYXNoXTtcbiAgfTtcbn1cbi8qKlxuICogTWVtb2l6ZSBhIGdpdmVuIGZ1bmN0aW9uIGJ5IGNhY2hpbmcgYWxsIHJlc3VsdHMgYW5kIHRoZSBhcmd1bWVudHMsXG4gKiBhbmQgY29tcGFyaW5nIGFnYWluc3QgdGhlIGFyZ3VtZW50cyBvZiBwcmV2aW91cyByZXN1bHRzIGJlZm9yZVxuICogZXhlY3V0aW5nIGFnYWluLlxuICogVGhpcyBpcyBsZXNzIHBlcmZvcm1hbnQgdGhhbiBgbWVtb2l6ZWAgd2hpY2ggY2FsY3VsYXRlcyBhIGhhc2gsXG4gKiB3aGljaCBpcyB2ZXJ5IGZhc3QgdG8gY29tcGFyZS4gVXNlIGBtZW1vaXplQ29tcGFyZWAgb25seSB3aGVuIGl0IGlzXG4gKiBub3QgcG9zc2libGUgdG8gY3JlYXRlIGEgdW5pcXVlIHNlcmlhbGl6YWJsZSBoYXNoIGZyb20gdGhlIGZ1bmN0aW9uXG4gKiBhcmd1bWVudHMuXG4gKiBUaGUgaXNFcXVhbCBmdW5jdGlvbiBtdXN0IGNvbXBhcmUgdHdvIHNldHMgb2YgYXJndW1lbnRzXG4gKiBhbmQgcmV0dXJuIHRydWUgd2hlbiBlcXVhbCAoY2FuIGJlIGEgZGVlcCBlcXVhbGl0eSBjaGVjayBmb3IgZXhhbXBsZSkuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBmblxuICogQHBhcmFtIHtmdW5jdGlvbihhOiAqLCBiOiAqKSA6IGJvb2xlYW59IGlzRXF1YWxcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn1cbiAqL1xuXG5cbmZ1bmN0aW9uIG1lbW9pemVDb21wYXJlKGZuLCBpc0VxdWFsKSB7XG4gIHZhciBtZW1vaXplID0gZnVuY3Rpb24gbWVtb2l6ZSgpIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuXG4gICAgZm9yICh2YXIgYyA9IDA7IGMgPCBtZW1vaXplLmNhY2hlLmxlbmd0aDsgYysrKSB7XG4gICAgICB2YXIgY2FjaGVkID0gbWVtb2l6ZS5jYWNoZVtjXTtcblxuICAgICAgaWYgKGlzRXF1YWwoYXJncywgY2FjaGVkLmFyZ3MpKSB7XG4gICAgICAgIC8vIFRPRE86IG1vdmUgdGhpcyBjYWNoZSBlbnRyeSB0byB0aGUgdG9wIHNvIHJlY2VudGx5IHVzZWQgZW50cmllcyBtb3ZlIHVwP1xuICAgICAgICByZXR1cm4gY2FjaGVkLnJlcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcmVzID0gZm4uYXBwbHkoZm4sIGFyZ3MpO1xuICAgIG1lbW9pemUuY2FjaGUudW5zaGlmdCh7XG4gICAgICBhcmdzOiBhcmdzLFxuICAgICAgcmVzOiByZXNcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIG1lbW9pemUuY2FjaGUgPSBbXTtcbiAgcmV0dXJuIG1lbW9pemU7XG59XG4vKipcbiAqIEZpbmQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGFyZ3VtZW50cyBleHBlY3RlZCBieSBhIHR5cGVkIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtmdW5jdGlvbn0gZm4gICBBIHR5cGVkIGZ1bmN0aW9uXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFJldHVybnMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGV4cGVjdGVkIGFyZ3VtZW50cy5cbiAqICAgICAgICAgICAgICAgICAgUmV0dXJucyAtMSB3aGVuIG5vIHNpZ25hdHVyZXMgd2hlcmUgZm91bmQgb24gdGhlIGZ1bmN0aW9uLlxuICovXG5cblxuZnVuY3Rpb24gbWF4QXJndW1lbnRDb3VudChmbikge1xuICByZXR1cm4gT2JqZWN0LmtleXMoZm4uc2lnbmF0dXJlcyB8fCB7fSkucmVkdWNlKGZ1bmN0aW9uIChhcmdzLCBzaWduYXR1cmUpIHtcbiAgICB2YXIgY291bnQgPSAoc2lnbmF0dXJlLm1hdGNoKC8sL2cpIHx8IFtdKS5sZW5ndGggKyAxO1xuICAgIHJldHVybiBNYXRoLm1heChhcmdzLCBjb3VudCk7XG4gIH0sIC0xKTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaXNOdW1iZXIgPSBpc051bWJlcjtcbmV4cG9ydHMuaXNCaWdOdW1iZXIgPSBpc0JpZ051bWJlcjtcbmV4cG9ydHMuaXNDb21wbGV4ID0gaXNDb21wbGV4O1xuZXhwb3J0cy5pc0ZyYWN0aW9uID0gaXNGcmFjdGlvbjtcbmV4cG9ydHMuaXNVbml0ID0gaXNVbml0O1xuZXhwb3J0cy5pc1N0cmluZyA9IGlzU3RyaW5nO1xuZXhwb3J0cy5pc01hdHJpeCA9IGlzTWF0cml4O1xuZXhwb3J0cy5pc0NvbGxlY3Rpb24gPSBpc0NvbGxlY3Rpb247XG5leHBvcnRzLmlzRGVuc2VNYXRyaXggPSBpc0RlbnNlTWF0cml4O1xuZXhwb3J0cy5pc1NwYXJzZU1hdHJpeCA9IGlzU3BhcnNlTWF0cml4O1xuZXhwb3J0cy5pc1JhbmdlID0gaXNSYW5nZTtcbmV4cG9ydHMuaXNJbmRleCA9IGlzSW5kZXg7XG5leHBvcnRzLmlzQm9vbGVhbiA9IGlzQm9vbGVhbjtcbmV4cG9ydHMuaXNSZXN1bHRTZXQgPSBpc1Jlc3VsdFNldDtcbmV4cG9ydHMuaXNIZWxwID0gaXNIZWxwO1xuZXhwb3J0cy5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvbjtcbmV4cG9ydHMuaXNEYXRlID0gaXNEYXRlO1xuZXhwb3J0cy5pc1JlZ0V4cCA9IGlzUmVnRXhwO1xuZXhwb3J0cy5pc09iamVjdCA9IGlzT2JqZWN0O1xuZXhwb3J0cy5pc051bGwgPSBpc051bGw7XG5leHBvcnRzLmlzVW5kZWZpbmVkID0gaXNVbmRlZmluZWQ7XG5leHBvcnRzLmlzQWNjZXNzb3JOb2RlID0gaXNBY2Nlc3Nvck5vZGU7XG5leHBvcnRzLmlzQXJyYXlOb2RlID0gaXNBcnJheU5vZGU7XG5leHBvcnRzLmlzQXNzaWdubWVudE5vZGUgPSBpc0Fzc2lnbm1lbnROb2RlO1xuZXhwb3J0cy5pc0Jsb2NrTm9kZSA9IGlzQmxvY2tOb2RlO1xuZXhwb3J0cy5pc0NvbmRpdGlvbmFsTm9kZSA9IGlzQ29uZGl0aW9uYWxOb2RlO1xuZXhwb3J0cy5pc0NvbnN0YW50Tm9kZSA9IGlzQ29uc3RhbnROb2RlO1xuZXhwb3J0cy5pc0Z1bmN0aW9uQXNzaWdubWVudE5vZGUgPSBpc0Z1bmN0aW9uQXNzaWdubWVudE5vZGU7XG5leHBvcnRzLmlzRnVuY3Rpb25Ob2RlID0gaXNGdW5jdGlvbk5vZGU7XG5leHBvcnRzLmlzSW5kZXhOb2RlID0gaXNJbmRleE5vZGU7XG5leHBvcnRzLmlzTm9kZSA9IGlzTm9kZTtcbmV4cG9ydHMuaXNPYmplY3ROb2RlID0gaXNPYmplY3ROb2RlO1xuZXhwb3J0cy5pc09wZXJhdG9yTm9kZSA9IGlzT3BlcmF0b3JOb2RlO1xuZXhwb3J0cy5pc1BhcmVudGhlc2lzTm9kZSA9IGlzUGFyZW50aGVzaXNOb2RlO1xuZXhwb3J0cy5pc1JhbmdlTm9kZSA9IGlzUmFuZ2VOb2RlO1xuZXhwb3J0cy5pc1N5bWJvbE5vZGUgPSBpc1N5bWJvbE5vZGU7XG5leHBvcnRzLmlzQ2hhaW4gPSBpc0NoYWluO1xuZXhwb3J0cy50eXBlT2YgPSB0eXBlT2Y7XG5leHBvcnRzLmlzQXJyYXkgPSB2b2lkIDA7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuLy8gdHlwZSBjaGVja3MgZm9yIGFsbCBrbm93biB0eXBlc1xuLy9cbi8vIG5vdGUgdGhhdDpcbi8vXG4vLyAtIGNoZWNrIGJ5IGR1Y2stdHlwaW5nIG9uIGEgcHJvcGVydHkgbGlrZSBgaXNVbml0YCwgaW5zdGVhZCBvZiBjaGVja2luZyBpbnN0YW5jZW9mLlxuLy8gICBpbnN0YW5jZW9mIGNhbm5vdCBiZSB1c2VkIGJlY2F1c2UgdGhhdCB3b3VsZCBub3QgYWxsb3cgdG8gcGFzcyBkYXRhIGZyb21cbi8vICAgb25lIGluc3RhbmNlIG9mIG1hdGguanMgdG8gYW5vdGhlciBzaW5jZSBlYWNoIGhhcyBpdCdzIG93biBpbnN0YW5jZSBvZiBVbml0LlxuLy8gLSBjaGVjayB0aGUgYGlzVW5pdGAgcHJvcGVydHkgdmlhIHRoZSBjb25zdHJ1Y3Rvciwgc28gdGhlcmUgd2lsbCBiZSBub1xuLy8gICBtYXRjaGVzIGZvciBcImZha2VcIiBpbnN0YW5jZXMgbGlrZSBwbGFpbiBvYmplY3RzIHdpdGggYSBwcm9wZXJ0eSBgaXNVbml0YC5cbi8vICAgVGhhdCBpcyBpbXBvcnRhbnQgZm9yIHNlY3VyaXR5IHJlYXNvbnMuXG4vLyAtIEl0IG11c3Qgbm90IGJlIHBvc3NpYmxlIHRvIG92ZXJyaWRlIHRoZSB0eXBlIGNoZWNrcyB1c2VkIGludGVybmFsbHksXG4vLyAgIGZvciBzZWN1cml0eSByZWFzb25zLCBzbyB0aGVzZSBmdW5jdGlvbnMgYXJlIG5vdCBleHBvc2VkIGluIHRoZSBleHByZXNzaW9uXG4vLyAgIHBhcnNlci5cbmZ1bmN0aW9uIGlzTnVtYmVyKHgpIHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSAnbnVtYmVyJztcbn1cblxuZnVuY3Rpb24gaXNCaWdOdW1iZXIoeCkge1xuICByZXR1cm4geCAmJiB4LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc0JpZ051bWJlciA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNDb21wbGV4KHgpIHtcbiAgcmV0dXJuIHggJiYgX3R5cGVvZih4KSA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKHgpLmlzQ29tcGxleCA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNGcmFjdGlvbih4KSB7XG4gIHJldHVybiB4ICYmIF90eXBlb2YoeCkgPT09ICdvYmplY3QnICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZih4KS5pc0ZyYWN0aW9uID09PSB0cnVlIHx8IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc1VuaXQoeCkge1xuICByZXR1cm4geCAmJiB4LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc1VuaXQgPT09IHRydWUgfHwgZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKHgpIHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSAnc3RyaW5nJztcbn1cblxudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuZXhwb3J0cy5pc0FycmF5ID0gaXNBcnJheTtcblxuZnVuY3Rpb24gaXNNYXRyaXgoeCkge1xuICByZXR1cm4geCAmJiB4LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc01hdHJpeCA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cbi8qKlxuICogVGVzdCB3aGV0aGVyIGEgdmFsdWUgaXMgYSBjb2xsZWN0aW9uOiBhbiBBcnJheSBvciBNYXRyaXhcbiAqIEBwYXJhbSB7Kn0geFxuICogQHJldHVybnMge2Jvb2xlYW59IGlzQ29sbGVjdGlvblxuICovXG5cblxuZnVuY3Rpb24gaXNDb2xsZWN0aW9uKHgpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoeCkgfHwgaXNNYXRyaXgoeCk7XG59XG5cbmZ1bmN0aW9uIGlzRGVuc2VNYXRyaXgoeCkge1xuICByZXR1cm4geCAmJiB4LmlzRGVuc2VNYXRyaXggJiYgeC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNNYXRyaXggPT09IHRydWUgfHwgZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzU3BhcnNlTWF0cml4KHgpIHtcbiAgcmV0dXJuIHggJiYgeC5pc1NwYXJzZU1hdHJpeCAmJiB4LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc01hdHJpeCA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNSYW5nZSh4KSB7XG4gIHJldHVybiB4ICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzUmFuZ2UgPT09IHRydWUgfHwgZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzSW5kZXgoeCkge1xuICByZXR1cm4geCAmJiB4LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc0luZGV4ID09PSB0cnVlIHx8IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc0Jvb2xlYW4oeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09ICdib29sZWFuJztcbn1cblxuZnVuY3Rpb24gaXNSZXN1bHRTZXQoeCkge1xuICByZXR1cm4geCAmJiB4LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc1Jlc3VsdFNldCA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNIZWxwKHgpIHtcbiAgcmV0dXJuIHggJiYgeC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNIZWxwID09PSB0cnVlIHx8IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSAnZnVuY3Rpb24nO1xufVxuXG5mdW5jdGlvbiBpc0RhdGUoeCkge1xuICByZXR1cm4geCBpbnN0YW5jZW9mIERhdGU7XG59XG5cbmZ1bmN0aW9uIGlzUmVnRXhwKHgpIHtcbiAgcmV0dXJuIHggaW5zdGFuY2VvZiBSZWdFeHA7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KHgpIHtcbiAgcmV0dXJuICEhKHggJiYgX3R5cGVvZih4KSA9PT0gJ29iamVjdCcgJiYgeC5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0ICYmICFpc0NvbXBsZXgoeCkgJiYgIWlzRnJhY3Rpb24oeCkpO1xufVxuXG5mdW5jdGlvbiBpc051bGwoeCkge1xuICByZXR1cm4geCA9PT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNVbmRlZmluZWQoeCkge1xuICByZXR1cm4geCA9PT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBpc0FjY2Vzc29yTm9kZSh4KSB7XG4gIHJldHVybiB4ICYmIHguaXNBY2Nlc3Nvck5vZGUgPT09IHRydWUgJiYgeC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNOb2RlID09PSB0cnVlIHx8IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc0FycmF5Tm9kZSh4KSB7XG4gIHJldHVybiB4ICYmIHguaXNBcnJheU5vZGUgPT09IHRydWUgJiYgeC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNOb2RlID09PSB0cnVlIHx8IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc0Fzc2lnbm1lbnROb2RlKHgpIHtcbiAgcmV0dXJuIHggJiYgeC5pc0Fzc2lnbm1lbnROb2RlID09PSB0cnVlICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzTm9kZSA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNCbG9ja05vZGUoeCkge1xuICByZXR1cm4geCAmJiB4LmlzQmxvY2tOb2RlID09PSB0cnVlICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzTm9kZSA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNDb25kaXRpb25hbE5vZGUoeCkge1xuICByZXR1cm4geCAmJiB4LmlzQ29uZGl0aW9uYWxOb2RlID09PSB0cnVlICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzTm9kZSA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNDb25zdGFudE5vZGUoeCkge1xuICByZXR1cm4geCAmJiB4LmlzQ29uc3RhbnROb2RlID09PSB0cnVlICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzTm9kZSA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlKHgpIHtcbiAgcmV0dXJuIHggJiYgeC5pc0Z1bmN0aW9uQXNzaWdubWVudE5vZGUgPT09IHRydWUgJiYgeC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNOb2RlID09PSB0cnVlIHx8IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uTm9kZSh4KSB7XG4gIHJldHVybiB4ICYmIHguaXNGdW5jdGlvbk5vZGUgPT09IHRydWUgJiYgeC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNOb2RlID09PSB0cnVlIHx8IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc0luZGV4Tm9kZSh4KSB7XG4gIHJldHVybiB4ICYmIHguaXNJbmRleE5vZGUgPT09IHRydWUgJiYgeC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNOb2RlID09PSB0cnVlIHx8IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc05vZGUoeCkge1xuICByZXR1cm4geCAmJiB4LmlzTm9kZSA9PT0gdHJ1ZSAmJiB4LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc05vZGUgPT09IHRydWUgfHwgZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0Tm9kZSh4KSB7XG4gIHJldHVybiB4ICYmIHguaXNPYmplY3ROb2RlID09PSB0cnVlICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzTm9kZSA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNPcGVyYXRvck5vZGUoeCkge1xuICByZXR1cm4geCAmJiB4LmlzT3BlcmF0b3JOb2RlID09PSB0cnVlICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzTm9kZSA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNQYXJlbnRoZXNpc05vZGUoeCkge1xuICByZXR1cm4geCAmJiB4LmlzUGFyZW50aGVzaXNOb2RlID09PSB0cnVlICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzTm9kZSA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNSYW5nZU5vZGUoeCkge1xuICByZXR1cm4geCAmJiB4LmlzUmFuZ2VOb2RlID09PSB0cnVlICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzTm9kZSA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNTeW1ib2xOb2RlKHgpIHtcbiAgcmV0dXJuIHggJiYgeC5pc1N5bWJvbE5vZGUgPT09IHRydWUgJiYgeC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNOb2RlID09PSB0cnVlIHx8IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc0NoYWluKHgpIHtcbiAgcmV0dXJuIHggJiYgeC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNDaGFpbiA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gdHlwZU9mKHgpIHtcbiAgdmFyIHQgPSBfdHlwZW9mKHgpO1xuXG4gIGlmICh0ID09PSAnb2JqZWN0Jykge1xuICAgIC8vIEphdmFTY3JpcHQgdHlwZXNcbiAgICBpZiAoeCA9PT0gbnVsbCkgcmV0dXJuICdudWxsJztcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh4KSkgcmV0dXJuICdBcnJheSc7XG4gICAgaWYgKHggaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4gJ0RhdGUnO1xuICAgIGlmICh4IGluc3RhbmNlb2YgUmVnRXhwKSByZXR1cm4gJ1JlZ0V4cCc7IC8vIG1hdGguanMgdHlwZXNcblxuICAgIGlmIChpc0JpZ051bWJlcih4KSkgcmV0dXJuICdCaWdOdW1iZXInO1xuICAgIGlmIChpc0NvbXBsZXgoeCkpIHJldHVybiAnQ29tcGxleCc7XG4gICAgaWYgKGlzRnJhY3Rpb24oeCkpIHJldHVybiAnRnJhY3Rpb24nO1xuICAgIGlmIChpc01hdHJpeCh4KSkgcmV0dXJuICdNYXRyaXgnO1xuICAgIGlmIChpc1VuaXQoeCkpIHJldHVybiAnVW5pdCc7XG4gICAgaWYgKGlzSW5kZXgoeCkpIHJldHVybiAnSW5kZXgnO1xuICAgIGlmIChpc1JhbmdlKHgpKSByZXR1cm4gJ1JhbmdlJztcbiAgICBpZiAoaXNSZXN1bHRTZXQoeCkpIHJldHVybiAnUmVzdWx0U2V0JztcbiAgICBpZiAoaXNOb2RlKHgpKSByZXR1cm4geC50eXBlO1xuICAgIGlmIChpc0NoYWluKHgpKSByZXR1cm4gJ0NoYWluJztcbiAgICBpZiAoaXNIZWxwKHgpKSByZXR1cm4gJ0hlbHAnO1xuICAgIHJldHVybiAnT2JqZWN0JztcbiAgfVxuXG4gIGlmICh0ID09PSAnZnVuY3Rpb24nKSByZXR1cm4gJ0Z1bmN0aW9uJztcbiAgcmV0dXJuIHQ7IC8vIGNhbiBiZSAnc3RyaW5nJywgJ251bWJlcicsICdib29sZWFuJywgLi4uXG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmVzY2FwZUxhdGV4ID0gZXNjYXBlTGF0ZXg7XG5leHBvcnRzLnRvU3ltYm9sID0gdG9TeW1ib2w7XG5leHBvcnRzLmRlZmF1bHRUZW1wbGF0ZSA9IGV4cG9ydHMubGF0ZXhGdW5jdGlvbnMgPSBleHBvcnRzLmxhdGV4T3BlcmF0b3JzID0gZXhwb3J0cy5sYXRleFN5bWJvbHMgPSB2b2lkIDA7XG5cbnZhciBfZXNjYXBlTGF0ZXggPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJlc2NhcGUtbGF0ZXhcIikpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuL29iamVjdFwiKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbi8qIGVzbGludCBuby10ZW1wbGF0ZS1jdXJseS1pbi1zdHJpbmc6IFwib2ZmXCIgKi9cbnZhciBsYXRleFN5bWJvbHMgPSB7XG4gIC8vIEdSRUVLIExFVFRFUlNcbiAgQWxwaGE6ICdBJyxcbiAgYWxwaGE6ICdcXFxcYWxwaGEnLFxuICBCZXRhOiAnQicsXG4gIGJldGE6ICdcXFxcYmV0YScsXG4gIEdhbW1hOiAnXFxcXEdhbW1hJyxcbiAgZ2FtbWE6ICdcXFxcZ2FtbWEnLFxuICBEZWx0YTogJ1xcXFxEZWx0YScsXG4gIGRlbHRhOiAnXFxcXGRlbHRhJyxcbiAgRXBzaWxvbjogJ0UnLFxuICBlcHNpbG9uOiAnXFxcXGVwc2lsb24nLFxuICB2YXJlcHNpbG9uOiAnXFxcXHZhcmVwc2lsb24nLFxuICBaZXRhOiAnWicsXG4gIHpldGE6ICdcXFxcemV0YScsXG4gIEV0YTogJ0gnLFxuICBldGE6ICdcXFxcZXRhJyxcbiAgVGhldGE6ICdcXFxcVGhldGEnLFxuICB0aGV0YTogJ1xcXFx0aGV0YScsXG4gIHZhcnRoZXRhOiAnXFxcXHZhcnRoZXRhJyxcbiAgSW90YTogJ0knLFxuICBpb3RhOiAnXFxcXGlvdGEnLFxuICBLYXBwYTogJ0snLFxuICBrYXBwYTogJ1xcXFxrYXBwYScsXG4gIHZhcmthcHBhOiAnXFxcXHZhcmthcHBhJyxcbiAgTGFtYmRhOiAnXFxcXExhbWJkYScsXG4gIGxhbWJkYTogJ1xcXFxsYW1iZGEnLFxuICBNdTogJ00nLFxuICBtdTogJ1xcXFxtdScsXG4gIE51OiAnTicsXG4gIG51OiAnXFxcXG51JyxcbiAgWGk6ICdcXFxcWGknLFxuICB4aTogJ1xcXFx4aScsXG4gIE9taWNyb246ICdPJyxcbiAgb21pY3JvbjogJ28nLFxuICBQaTogJ1xcXFxQaScsXG4gIHBpOiAnXFxcXHBpJyxcbiAgdmFycGk6ICdcXFxcdmFycGknLFxuICBSaG86ICdQJyxcbiAgcmhvOiAnXFxcXHJobycsXG4gIHZhcnJobzogJ1xcXFx2YXJyaG8nLFxuICBTaWdtYTogJ1xcXFxTaWdtYScsXG4gIHNpZ21hOiAnXFxcXHNpZ21hJyxcbiAgdmFyc2lnbWE6ICdcXFxcdmFyc2lnbWEnLFxuICBUYXU6ICdUJyxcbiAgdGF1OiAnXFxcXHRhdScsXG4gIFVwc2lsb246IFwiXFxcXFVwc2lsb25cIixcbiAgdXBzaWxvbjogXCJcXFxcdXBzaWxvblwiLFxuICBQaGk6ICdcXFxcUGhpJyxcbiAgcGhpOiAnXFxcXHBoaScsXG4gIHZhcnBoaTogJ1xcXFx2YXJwaGknLFxuICBDaGk6ICdYJyxcbiAgY2hpOiAnXFxcXGNoaScsXG4gIFBzaTogJ1xcXFxQc2knLFxuICBwc2k6ICdcXFxccHNpJyxcbiAgT21lZ2E6ICdcXFxcT21lZ2EnLFxuICBvbWVnYTogJ1xcXFxvbWVnYScsXG4gIC8vIGxvZ2ljXG4gIFwidHJ1ZVwiOiAnXFxcXG1hdGhybXtUcnVlfScsXG4gIFwiZmFsc2VcIjogJ1xcXFxtYXRocm17RmFsc2V9JyxcbiAgLy8gb3RoZXJcbiAgaTogJ2knLFxuICAvLyBUT0RPIHVzZSBcXGkgPz9cbiAgaW5mOiAnXFxcXGluZnR5JyxcbiAgSW5mOiAnXFxcXGluZnR5JyxcbiAgaW5maW5pdHk6ICdcXFxcaW5mdHknLFxuICBJbmZpbml0eTogJ1xcXFxpbmZ0eScsXG4gIG9vOiAnXFxcXGluZnR5JyxcbiAgbGltOiAnXFxcXGxpbScsXG4gIHVuZGVmaW5lZDogJ1xcXFxtYXRoYmZ7P30nXG59O1xuZXhwb3J0cy5sYXRleFN5bWJvbHMgPSBsYXRleFN5bWJvbHM7XG52YXIgbGF0ZXhPcGVyYXRvcnMgPSB7XG4gIHRyYW5zcG9zZTogJ15cXFxcdG9wJyxcbiAgY3RyYW5zcG9zZTogJ15IJyxcbiAgZmFjdG9yaWFsOiAnIScsXG4gIHBvdzogJ14nLFxuICBkb3RQb3c6ICcuXlxcXFx3ZWRnZScsXG4gIC8vIFRPRE8gZmluZCBpZGVhbCBzb2x1dGlvblxuICB1bmFyeVBsdXM6ICcrJyxcbiAgdW5hcnlNaW51czogJy0nLFxuICBiaXROb3Q6ICdcXFxcficsXG4gIC8vIFRPRE8gZmluZCBpZGVhbCBzb2x1dGlvblxuICBub3Q6ICdcXFxcbmVnJyxcbiAgbXVsdGlwbHk6ICdcXFxcY2RvdCcsXG4gIGRpdmlkZTogJ1xcXFxmcmFjJyxcbiAgLy8gVE9ETyBob3cgdG8gaGFuZGxlIHRoYXQgcHJvcGVybHk/XG4gIGRvdE11bHRpcGx5OiAnLlxcXFxjZG90JyxcbiAgLy8gVE9ETyBmaW5kIGlkZWFsIHNvbHV0aW9uXG4gIGRvdERpdmlkZTogJy46JyxcbiAgLy8gVE9ETyBmaW5kIGlkZWFsIHNvbHV0aW9uXG4gIG1vZDogJ1xcXFxtb2QnLFxuICBhZGQ6ICcrJyxcbiAgc3VidHJhY3Q6ICctJyxcbiAgdG86ICdcXFxccmlnaHRhcnJvdycsXG4gIGxlZnRTaGlmdDogJzw8JyxcbiAgcmlnaHRBcml0aFNoaWZ0OiAnPj4nLFxuICByaWdodExvZ1NoaWZ0OiAnPj4+JyxcbiAgZXF1YWw6ICc9JyxcbiAgdW5lcXVhbDogJ1xcXFxuZXEnLFxuICBzbWFsbGVyOiAnPCcsXG4gIGxhcmdlcjogJz4nLFxuICBzbWFsbGVyRXE6ICdcXFxcbGVxJyxcbiAgbGFyZ2VyRXE6ICdcXFxcZ2VxJyxcbiAgYml0QW5kOiAnXFxcXCYnLFxuICBiaXRYb3I6IFwiXFxcXHVuZGVybGluZXt8fVwiLFxuICBiaXRPcjogJ3wnLFxuICBhbmQ6ICdcXFxcd2VkZ2UnLFxuICB4b3I6ICdcXFxcdmVlYmFyJyxcbiAgb3I6ICdcXFxcdmVlJ1xufTtcbmV4cG9ydHMubGF0ZXhPcGVyYXRvcnMgPSBsYXRleE9wZXJhdG9ycztcbnZhciBsYXRleEZ1bmN0aW9ucyA9IHtcbiAgLy8gYXJpdGhtZXRpY1xuICBhYnM6IHtcbiAgICAxOiAnXFxcXGxlZnR8JHthcmdzWzBdfVxcXFxyaWdodHwnXG4gIH0sXG4gIGFkZDoge1xuICAgIDI6IFwiXFxcXGxlZnQoJHthcmdzWzBdfVwiLmNvbmNhdChsYXRleE9wZXJhdG9ycy5hZGQsIFwiJHthcmdzWzFdfVxcXFxyaWdodClcIilcbiAgfSxcbiAgY2JydDoge1xuICAgIDE6ICdcXFxcc3FydFszXXske2FyZ3NbMF19fSdcbiAgfSxcbiAgY2VpbDoge1xuICAgIDE6ICdcXFxcbGVmdFxcXFxsY2VpbCR7YXJnc1swXX1cXFxccmlnaHRcXFxccmNlaWwnXG4gIH0sXG4gIGN1YmU6IHtcbiAgICAxOiAnXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCleMydcbiAgfSxcbiAgZGl2aWRlOiB7XG4gICAgMjogJ1xcXFxmcmFjeyR7YXJnc1swXX19eyR7YXJnc1sxXX19J1xuICB9LFxuICBkb3REaXZpZGU6IHtcbiAgICAyOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMuZG90RGl2aWRlLCBcIiR7YXJnc1sxXX1cXFxccmlnaHQpXCIpXG4gIH0sXG4gIGRvdE11bHRpcGx5OiB7XG4gICAgMjogXCJcXFxcbGVmdCgke2FyZ3NbMF19XCIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLmRvdE11bHRpcGx5LCBcIiR7YXJnc1sxXX1cXFxccmlnaHQpXCIpXG4gIH0sXG4gIGRvdFBvdzoge1xuICAgIDI6IFwiXFxcXGxlZnQoJHthcmdzWzBdfVwiLmNvbmNhdChsYXRleE9wZXJhdG9ycy5kb3RQb3csIFwiJHthcmdzWzFdfVxcXFxyaWdodClcIilcbiAgfSxcbiAgZXhwOiB7XG4gICAgMTogJ1xcXFxleHBcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgZXhwbTE6IFwiXFxcXGxlZnQoZVwiLmNvbmNhdChsYXRleE9wZXJhdG9ycy5wb3csIFwieyR7YXJnc1swXX19LTFcXFxccmlnaHQpXCIpLFxuICBmaXg6IHtcbiAgICAxOiAnXFxcXG1hdGhybXske25hbWV9fVxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBmbG9vcjoge1xuICAgIDE6ICdcXFxcbGVmdFxcXFxsZmxvb3Ike2FyZ3NbMF19XFxcXHJpZ2h0XFxcXHJmbG9vcidcbiAgfSxcbiAgZ2NkOiAnXFxcXGdjZFxcXFxsZWZ0KCR7YXJnc31cXFxccmlnaHQpJyxcbiAgaHlwb3Q6ICdcXFxcaHlwb3RcXFxcbGVmdCgke2FyZ3N9XFxcXHJpZ2h0KScsXG4gIGxvZzoge1xuICAgIDE6ICdcXFxcbG5cXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KScsXG4gICAgMjogJ1xcXFxsb2dfeyR7YXJnc1sxXX19XFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIGxvZzEwOiB7XG4gICAgMTogJ1xcXFxsb2dfezEwfVxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBsb2cxcDoge1xuICAgIDE6ICdcXFxcbG5cXFxcbGVmdCgke2FyZ3NbMF19KzFcXFxccmlnaHQpJyxcbiAgICAyOiAnXFxcXGxvZ197JHthcmdzWzFdfX1cXFxcbGVmdCgke2FyZ3NbMF19KzFcXFxccmlnaHQpJ1xuICB9LFxuICBsb2cyOiAnXFxcXGxvZ197Mn1cXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KScsXG4gIG1vZDoge1xuICAgIDI6IFwiXFxcXGxlZnQoJHthcmdzWzBdfVwiLmNvbmNhdChsYXRleE9wZXJhdG9ycy5tb2QsIFwiJHthcmdzWzFdfVxcXFxyaWdodClcIilcbiAgfSxcbiAgbXVsdGlwbHk6IHtcbiAgICAyOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMubXVsdGlwbHksIFwiJHthcmdzWzFdfVxcXFxyaWdodClcIilcbiAgfSxcbiAgbm9ybToge1xuICAgIDE6ICdcXFxcbGVmdFxcXFx8JHthcmdzWzBdfVxcXFxyaWdodFxcXFx8JyxcbiAgICAyOiB1bmRlZmluZWQgLy8gdXNlIGRlZmF1bHQgdGVtcGxhdGVcblxuICB9LFxuICBudGhSb290OiB7XG4gICAgMjogJ1xcXFxzcXJ0WyR7YXJnc1sxXX1deyR7YXJnc1swXX19J1xuICB9LFxuICBudGhSb290czoge1xuICAgIDI6ICdcXFxce3kgOiAkeV57YXJnc1sxXX0gPSB7JHthcmdzWzBdfX1cXFxcfSdcbiAgfSxcbiAgcG93OiB7XG4gICAgMjogXCJcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KVwiLmNvbmNhdChsYXRleE9wZXJhdG9ycy5wb3csIFwieyR7YXJnc1sxXX19XCIpXG4gIH0sXG4gIHJvdW5kOiB7XG4gICAgMTogJ1xcXFxsZWZ0XFxcXGxmbG9vciR7YXJnc1swXX1cXFxccmlnaHRcXFxccmNlaWwnLFxuICAgIDI6IHVuZGVmaW5lZCAvLyB1c2UgZGVmYXVsdCB0ZW1wbGF0ZVxuXG4gIH0sXG4gIHNpZ246IHtcbiAgICAxOiAnXFxcXG1hdGhybXske25hbWV9fVxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBzcXJ0OiB7XG4gICAgMTogJ1xcXFxzcXJ0eyR7YXJnc1swXX19J1xuICB9LFxuICBzcXVhcmU6IHtcbiAgICAxOiAnXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCleMidcbiAgfSxcbiAgc3VidHJhY3Q6IHtcbiAgICAyOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMuc3VidHJhY3QsIFwiJHthcmdzWzFdfVxcXFxyaWdodClcIilcbiAgfSxcbiAgdW5hcnlNaW51czoge1xuICAgIDE6IFwiXCIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLnVuYXJ5TWludXMsIFwiXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodClcIilcbiAgfSxcbiAgdW5hcnlQbHVzOiB7XG4gICAgMTogXCJcIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMudW5hcnlQbHVzLCBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpXCIpXG4gIH0sXG4gIC8vIGJpdHdpc2VcbiAgYml0QW5kOiB7XG4gICAgMjogXCJcXFxcbGVmdCgke2FyZ3NbMF19XCIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLmJpdEFuZCwgXCIke2FyZ3NbMV19XFxcXHJpZ2h0KVwiKVxuICB9LFxuICBiaXROb3Q6IHtcbiAgICAxOiBsYXRleE9wZXJhdG9ycy5iaXROb3QgKyAnXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIGJpdE9yOiB7XG4gICAgMjogXCJcXFxcbGVmdCgke2FyZ3NbMF19XCIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLmJpdE9yLCBcIiR7YXJnc1sxXX1cXFxccmlnaHQpXCIpXG4gIH0sXG4gIGJpdFhvcjoge1xuICAgIDI6IFwiXFxcXGxlZnQoJHthcmdzWzBdfVwiLmNvbmNhdChsYXRleE9wZXJhdG9ycy5iaXRYb3IsIFwiJHthcmdzWzFdfVxcXFxyaWdodClcIilcbiAgfSxcbiAgbGVmdFNoaWZ0OiB7XG4gICAgMjogXCJcXFxcbGVmdCgke2FyZ3NbMF19XCIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLmxlZnRTaGlmdCwgXCIke2FyZ3NbMV19XFxcXHJpZ2h0KVwiKVxuICB9LFxuICByaWdodEFyaXRoU2hpZnQ6IHtcbiAgICAyOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMucmlnaHRBcml0aFNoaWZ0LCBcIiR7YXJnc1sxXX1cXFxccmlnaHQpXCIpXG4gIH0sXG4gIHJpZ2h0TG9nU2hpZnQ6IHtcbiAgICAyOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMucmlnaHRMb2dTaGlmdCwgXCIke2FyZ3NbMV19XFxcXHJpZ2h0KVwiKVxuICB9LFxuICAvLyBjb21iaW5hdG9yaWNzXG4gIGJlbGxOdW1iZXJzOiB7XG4gICAgMTogJ1xcXFxtYXRocm17Qn1feyR7YXJnc1swXX19J1xuICB9LFxuICBjYXRhbGFuOiB7XG4gICAgMTogJ1xcXFxtYXRocm17Q31feyR7YXJnc1swXX19J1xuICB9LFxuICBzdGlybGluZ1MyOiB7XG4gICAgMjogJ1xcXFxtYXRocm17U31cXFxcbGVmdCgke2FyZ3N9XFxcXHJpZ2h0KSdcbiAgfSxcbiAgLy8gY29tcGxleFxuICBhcmc6IHtcbiAgICAxOiAnXFxcXGFyZ1xcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBjb25qOiB7XG4gICAgMTogJ1xcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpXionXG4gIH0sXG4gIGltOiB7XG4gICAgMTogJ1xcXFxJbVxcXFxsZWZ0XFxcXGxicmFjZSR7YXJnc1swXX1cXFxccmlnaHRcXFxccmJyYWNlJ1xuICB9LFxuICByZToge1xuICAgIDE6ICdcXFxcUmVcXFxcbGVmdFxcXFxsYnJhY2Uke2FyZ3NbMF19XFxcXHJpZ2h0XFxcXHJicmFjZSdcbiAgfSxcbiAgLy8gbG9naWNhbFxuICBhbmQ6IHtcbiAgICAyOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMuYW5kLCBcIiR7YXJnc1sxXX1cXFxccmlnaHQpXCIpXG4gIH0sXG4gIG5vdDoge1xuICAgIDE6IGxhdGV4T3BlcmF0b3JzLm5vdCArICdcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgb3I6IHtcbiAgICAyOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMub3IsIFwiJHthcmdzWzFdfVxcXFxyaWdodClcIilcbiAgfSxcbiAgeG9yOiB7XG4gICAgMjogXCJcXFxcbGVmdCgke2FyZ3NbMF19XCIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLnhvciwgXCIke2FyZ3NbMV19XFxcXHJpZ2h0KVwiKVxuICB9LFxuICAvLyBtYXRyaXhcbiAgY3Jvc3M6IHtcbiAgICAyOiAnXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodClcXFxcdGltZXNcXFxcbGVmdCgke2FyZ3NbMV19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgY3RyYW5zcG9zZToge1xuICAgIDE6IFwiXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodClcIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMuY3RyYW5zcG9zZSlcbiAgfSxcbiAgZGV0OiB7XG4gICAgMTogJ1xcXFxkZXRcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgZG90OiB7XG4gICAgMjogJ1xcXFxsZWZ0KCR7YXJnc1swXX1cXFxcY2RvdCR7YXJnc1sxXX1cXFxccmlnaHQpJ1xuICB9LFxuICBleHBtOiB7XG4gICAgMTogJ1xcXFxleHBcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgaW52OiB7XG4gICAgMTogJ1xcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpXnstMX0nXG4gIH0sXG4gIHNxcnRtOiB7XG4gICAgMTogXCJ7JHthcmdzWzBdfX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMucG93LCBcIntcXFxcZnJhY3sxfXsyfX1cIilcbiAgfSxcbiAgdHJhY2U6IHtcbiAgICAxOiAnXFxcXG1hdGhybXt0cn1cXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgdHJhbnNwb3NlOiB7XG4gICAgMTogXCJcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KVwiLmNvbmNhdChsYXRleE9wZXJhdG9ycy50cmFuc3Bvc2UpXG4gIH0sXG4gIC8vIHByb2JhYmlsaXR5XG4gIGNvbWJpbmF0aW9uczoge1xuICAgIDI6ICdcXFxcYmlub217JHthcmdzWzBdfX17JHthcmdzWzFdfX0nXG4gIH0sXG4gIGNvbWJpbmF0aW9uc1dpdGhSZXA6IHtcbiAgICAyOiAnXFxcXGxlZnQoXFxcXCFcXFxcIXtcXFxcYmlub217JHthcmdzWzBdfX17JHthcmdzWzFdfX19XFxcXCFcXFxcIVxcXFxyaWdodCknXG4gIH0sXG4gIGZhY3RvcmlhbDoge1xuICAgIDE6IFwiXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodClcIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMuZmFjdG9yaWFsKVxuICB9LFxuICBnYW1tYToge1xuICAgIDE6ICdcXFxcR2FtbWFcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgLy8gcmVsYXRpb25hbFxuICBlcXVhbDoge1xuICAgIDI6IFwiXFxcXGxlZnQoJHthcmdzWzBdfVwiLmNvbmNhdChsYXRleE9wZXJhdG9ycy5lcXVhbCwgXCIke2FyZ3NbMV19XFxcXHJpZ2h0KVwiKVxuICB9LFxuICBsYXJnZXI6IHtcbiAgICAyOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMubGFyZ2VyLCBcIiR7YXJnc1sxXX1cXFxccmlnaHQpXCIpXG4gIH0sXG4gIGxhcmdlckVxOiB7XG4gICAgMjogXCJcXFxcbGVmdCgke2FyZ3NbMF19XCIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLmxhcmdlckVxLCBcIiR7YXJnc1sxXX1cXFxccmlnaHQpXCIpXG4gIH0sXG4gIHNtYWxsZXI6IHtcbiAgICAyOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMuc21hbGxlciwgXCIke2FyZ3NbMV19XFxcXHJpZ2h0KVwiKVxuICB9LFxuICBzbWFsbGVyRXE6IHtcbiAgICAyOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMuc21hbGxlckVxLCBcIiR7YXJnc1sxXX1cXFxccmlnaHQpXCIpXG4gIH0sXG4gIHVuZXF1YWw6IHtcbiAgICAyOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMudW5lcXVhbCwgXCIke2FyZ3NbMV19XFxcXHJpZ2h0KVwiKVxuICB9LFxuICAvLyBzcGVjaWFsXG4gIGVyZjoge1xuICAgIDE6ICdlcmZcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgLy8gc3RhdGlzdGljc1xuICBtYXg6ICdcXFxcbWF4XFxcXGxlZnQoJHthcmdzfVxcXFxyaWdodCknLFxuICBtaW46ICdcXFxcbWluXFxcXGxlZnQoJHthcmdzfVxcXFxyaWdodCknLFxuICB2YXJpYW5jZTogJ1xcXFxtYXRocm17VmFyfVxcXFxsZWZ0KCR7YXJnc31cXFxccmlnaHQpJyxcbiAgLy8gdHJpZ29ub21ldHJ5XG4gIGFjb3M6IHtcbiAgICAxOiAnXFxcXGNvc157LTF9XFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIGFjb3NoOiB7XG4gICAgMTogJ1xcXFxjb3NoXnstMX1cXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgYWNvdDoge1xuICAgIDE6ICdcXFxcY290XnstMX1cXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgYWNvdGg6IHtcbiAgICAxOiAnXFxcXGNvdGheey0xfVxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBhY3NjOiB7XG4gICAgMTogJ1xcXFxjc2Neey0xfVxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBhY3NjaDoge1xuICAgIDE6ICdcXFxcbWF0aHJte2NzY2h9XnstMX1cXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgYXNlYzoge1xuICAgIDE6ICdcXFxcc2VjXnstMX1cXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgYXNlY2g6IHtcbiAgICAxOiAnXFxcXG1hdGhybXtzZWNofV57LTF9XFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIGFzaW46IHtcbiAgICAxOiAnXFxcXHNpbl57LTF9XFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIGFzaW5oOiB7XG4gICAgMTogJ1xcXFxzaW5oXnstMX1cXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgYXRhbjoge1xuICAgIDE6ICdcXFxcdGFuXnstMX1cXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgYXRhbjI6IHtcbiAgICAyOiAnXFxcXG1hdGhybXthdGFuMn1cXFxcbGVmdCgke2FyZ3N9XFxcXHJpZ2h0KSdcbiAgfSxcbiAgYXRhbmg6IHtcbiAgICAxOiAnXFxcXHRhbmheey0xfVxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBjb3M6IHtcbiAgICAxOiAnXFxcXGNvc1xcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBjb3NoOiB7XG4gICAgMTogJ1xcXFxjb3NoXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIGNvdDoge1xuICAgIDE6ICdcXFxcY290XFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIGNvdGg6IHtcbiAgICAxOiAnXFxcXGNvdGhcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgY3NjOiB7XG4gICAgMTogJ1xcXFxjc2NcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgY3NjaDoge1xuICAgIDE6ICdcXFxcbWF0aHJte2NzY2h9XFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIHNlYzoge1xuICAgIDE6ICdcXFxcc2VjXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIHNlY2g6IHtcbiAgICAxOiAnXFxcXG1hdGhybXtzZWNofVxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBzaW46IHtcbiAgICAxOiAnXFxcXHNpblxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBzaW5oOiB7XG4gICAgMTogJ1xcXFxzaW5oXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIHRhbjoge1xuICAgIDE6ICdcXFxcdGFuXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIHRhbmg6IHtcbiAgICAxOiAnXFxcXHRhbmhcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgLy8gdW5pdFxuICB0bzoge1xuICAgIDI6IFwiXFxcXGxlZnQoJHthcmdzWzBdfVwiLmNvbmNhdChsYXRleE9wZXJhdG9ycy50bywgXCIke2FyZ3NbMV19XFxcXHJpZ2h0KVwiKVxuICB9LFxuICAvLyB1dGlsc1xuICBudW1lcmljOiBmdW5jdGlvbiBudW1lcmljKG5vZGUsIG9wdGlvbnMpIHtcbiAgICAvLyBOb3Qgc3VyZSBpZiB0aGlzIGlzIHN0cmljdGx5IHJpZ2h0IGJ1dCBzaG91bGQgd29yayBjb3JyZWN0bHkgZm9yIHRoZSB2YXN0IG1ham9yaXR5IG9mIHVzZSBjYXNlcy5cbiAgICByZXR1cm4gbm9kZS5hcmdzWzBdLnRvVGV4KCk7XG4gIH0sXG4gIC8vIHR5cGVcbiAgbnVtYmVyOiB7XG4gICAgMDogJzAnLFxuICAgIDE6ICdcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KScsXG4gICAgMjogJ1xcXFxsZWZ0KFxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJHthcmdzWzFdfVxcXFxyaWdodCknXG4gIH0sXG4gIHN0cmluZzoge1xuICAgIDA6ICdcXFxcbWF0aHR0e1wiXCJ9JyxcbiAgICAxOiAnXFxcXG1hdGhybXtzdHJpbmd9XFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIGJpZ251bWJlcjoge1xuICAgIDA6ICcwJyxcbiAgICAxOiAnXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIGNvbXBsZXg6IHtcbiAgICAwOiAnMCcsXG4gICAgMTogJ1xcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJyxcbiAgICAyOiBcIlxcXFxsZWZ0KFxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpK1wiLmNvbmNhdChsYXRleFN5bWJvbHMuaSwgXCJcXFxcY2RvdFxcXFxsZWZ0KCR7YXJnc1sxXX1cXFxccmlnaHQpXFxcXHJpZ2h0KVwiKVxuICB9LFxuICBtYXRyaXg6IHtcbiAgICAwOiAnXFxcXGJlZ2lue2JtYXRyaXh9XFxcXGVuZHtibWF0cml4fScsXG4gICAgMTogJ1xcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJyxcbiAgICAyOiAnXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIHNwYXJzZToge1xuICAgIDA6ICdcXFxcYmVnaW57YnNwYXJzZX1cXFxcZW5ke2JzcGFyc2V9JyxcbiAgICAxOiAnXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIHVuaXQ6IHtcbiAgICAxOiAnXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknLFxuICAgIDI6ICdcXFxcbGVmdChcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSR7YXJnc1sxXX1cXFxccmlnaHQpJ1xuICB9XG59O1xuZXhwb3J0cy5sYXRleEZ1bmN0aW9ucyA9IGxhdGV4RnVuY3Rpb25zO1xudmFyIGRlZmF1bHRUZW1wbGF0ZSA9ICdcXFxcbWF0aHJteyR7bmFtZX19XFxcXGxlZnQoJHthcmdzfVxcXFxyaWdodCknO1xuZXhwb3J0cy5kZWZhdWx0VGVtcGxhdGUgPSBkZWZhdWx0VGVtcGxhdGU7XG52YXIgbGF0ZXhVbml0cyA9IHtcbiAgZGVnOiAnXlxcXFxjaXJjJ1xufTtcblxuZnVuY3Rpb24gZXNjYXBlTGF0ZXgoc3RyaW5nKSB7XG4gIHJldHVybiAoMCwgX2VzY2FwZUxhdGV4W1wiZGVmYXVsdFwiXSkoc3RyaW5nLCB7XG4gICAgcHJlc2VydmVGb3JtYXR0aW5nOiB0cnVlXG4gIH0pO1xufSAvLyBAcGFyYW0ge3N0cmluZ30gbmFtZVxuLy8gQHBhcmFtIHtib29sZWFufSBpc1VuaXRcblxuXG5mdW5jdGlvbiB0b1N5bWJvbChuYW1lLCBpc1VuaXQpIHtcbiAgaXNVbml0ID0gdHlwZW9mIGlzVW5pdCA9PT0gJ3VuZGVmaW5lZCcgPyBmYWxzZSA6IGlzVW5pdDtcblxuICBpZiAoaXNVbml0KSB7XG4gICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShsYXRleFVuaXRzLCBuYW1lKSkge1xuICAgICAgcmV0dXJuIGxhdGV4VW5pdHNbbmFtZV07XG4gICAgfVxuXG4gICAgcmV0dXJuICdcXFxcbWF0aHJteycgKyBlc2NhcGVMYXRleChuYW1lKSArICd9JztcbiAgfVxuXG4gIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkobGF0ZXhTeW1ib2xzLCBuYW1lKSkge1xuICAgIHJldHVybiBsYXRleFN5bWJvbHNbbmFtZV07XG4gIH1cblxuICByZXR1cm4gZXNjYXBlTGF0ZXgobmFtZSk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLndhcm5PbmNlID0gdm9pZCAwO1xuXG4vKipcbiAqIExvZyBhIGNvbnNvbGUud2FybiBtZXNzYWdlIG9ubHkgb25jZVxuICovXG52YXIgd2Fybk9uY2UgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBtZXNzYWdlcyA9IHt9O1xuICByZXR1cm4gZnVuY3Rpb24gd2Fybk9uY2UoKSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHZhciBtZXNzYWdlID0gYXJncy5qb2luKCcsICcpO1xuXG4gICAgaWYgKCFtZXNzYWdlc1ttZXNzYWdlXSkge1xuICAgICAgdmFyIF9jb25zb2xlO1xuXG4gICAgICBtZXNzYWdlc1ttZXNzYWdlXSA9IHRydWU7XG5cbiAgICAgIChfY29uc29sZSA9IGNvbnNvbGUpLndhcm4uYXBwbHkoX2NvbnNvbGUsIFsnV2FybmluZzonXS5jb25jYXQoYXJncykpO1xuICAgIH1cbiAgfTtcbn0oKTtcblxuZXhwb3J0cy53YXJuT25jZSA9IHdhcm5PbmNlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5ub0JpZ251bWJlciA9IG5vQmlnbnVtYmVyO1xuZXhwb3J0cy5ub0ZyYWN0aW9uID0gbm9GcmFjdGlvbjtcbmV4cG9ydHMubm9NYXRyaXggPSBub01hdHJpeDtcbmV4cG9ydHMubm9JbmRleCA9IG5vSW5kZXg7XG5leHBvcnRzLm5vU3Vic2V0ID0gbm9TdWJzZXQ7XG5cbmZ1bmN0aW9uIG5vQmlnbnVtYmVyKCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ05vIFwiYmlnbnVtYmVyXCIgaW1wbGVtZW50YXRpb24gYXZhaWxhYmxlJyk7XG59XG5cbmZ1bmN0aW9uIG5vRnJhY3Rpb24oKSB7XG4gIHRocm93IG5ldyBFcnJvcignTm8gXCJmcmFjdGlvblwiIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZScpO1xufVxuXG5mdW5jdGlvbiBub01hdHJpeCgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdObyBcIm1hdHJpeFwiIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZScpO1xufVxuXG5mdW5jdGlvbiBub0luZGV4KCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ05vIFwiaW5kZXhcIiBpbXBsZW1lbnRhdGlvbiBhdmFpbGFibGUnKTtcbn1cblxuZnVuY3Rpb24gbm9TdWJzZXQoKSB7XG4gIHRocm93IG5ldyBFcnJvcignTm8gXCJtYXRyaXhcIiBpbXBsZW1lbnRhdGlvbiBhdmFpbGFibGUnKTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaXNJbnRlZ2VyID0gaXNJbnRlZ2VyO1xuZXhwb3J0cy5mb3JtYXQgPSBmb3JtYXQ7XG5leHBvcnRzLnNwbGl0TnVtYmVyID0gc3BsaXROdW1iZXI7XG5leHBvcnRzLnRvRW5naW5lZXJpbmcgPSB0b0VuZ2luZWVyaW5nO1xuZXhwb3J0cy50b0ZpeGVkID0gdG9GaXhlZDtcbmV4cG9ydHMudG9FeHBvbmVudGlhbCA9IHRvRXhwb25lbnRpYWw7XG5leHBvcnRzLnRvUHJlY2lzaW9uID0gdG9QcmVjaXNpb247XG5leHBvcnRzLnJvdW5kRGlnaXRzID0gcm91bmREaWdpdHM7XG5leHBvcnRzLmRpZ2l0cyA9IGRpZ2l0cztcbmV4cG9ydHMubmVhcmx5RXF1YWwgPSBuZWFybHlFcXVhbDtcbmV4cG9ydHMudGFuaCA9IGV4cG9ydHMuc2luaCA9IGV4cG9ydHMuY29zaCA9IGV4cG9ydHMuYXRhbmggPSBleHBvcnRzLmFzaW5oID0gZXhwb3J0cy5hY29zaCA9IGV4cG9ydHMuREJMX0VQU0lMT04gPSBleHBvcnRzLmV4cG0xID0gZXhwb3J0cy5jYnJ0ID0gZXhwb3J0cy5sb2cxcCA9IGV4cG9ydHMubG9nMTAgPSBleHBvcnRzLmxvZzIgPSBleHBvcnRzLnNpZ24gPSB2b2lkIDA7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4vb2JqZWN0XCIpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4vaXNcIik7XG5cbi8qKlxuICogQHR5cGVkZWYge3tzaWduOiAnKycgfCAnLScgfCAnJywgY29lZmZpY2llbnRzOiBudW1iZXJbXSwgZXhwb25lbnQ6IG51bWJlcn19IFNwbGl0VmFsdWVcbiAqL1xuXG4vKipcbiAqIENoZWNrIGlmIGEgbnVtYmVyIGlzIGludGVnZXJcbiAqIEBwYXJhbSB7bnVtYmVyIHwgYm9vbGVhbn0gdmFsdWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGlzSW50ZWdlclxuICovXG5mdW5jdGlvbiBpc0ludGVnZXIodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gaXNGaW5pdGUodmFsdWUpID8gdmFsdWUgPT09IE1hdGgucm91bmQodmFsdWUpIDogZmFsc2U7IC8vIE5vdGU6IHdlIHVzZSA9PSwgbm90ID09PSwgYXMgd2UgY2FuIGhhdmUgQm9vbGVhbnMgYXMgd2VsbFxufVxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIHNpZ24gb2YgYSBudW1iZXJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5cblxudmFyIHNpZ24gPSAvKiAjX19QVVJFX18gKi9NYXRoLnNpZ24gfHwgZnVuY3Rpb24gKHgpIHtcbiAgaWYgKHggPiAwKSB7XG4gICAgcmV0dXJuIDE7XG4gIH0gZWxzZSBpZiAoeCA8IDApIHtcbiAgICByZXR1cm4gLTE7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn07XG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgYmFzZS0yIGxvZ2FyaXRobSBvZiBhIG51bWJlclxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cblxuXG5leHBvcnRzLnNpZ24gPSBzaWduO1xuXG52YXIgbG9nMiA9IC8qICNfX1BVUkVfXyAqL01hdGgubG9nMiB8fCBmdW5jdGlvbiBsb2cyKHgpIHtcbiAgcmV0dXJuIE1hdGgubG9nKHgpIC8gTWF0aC5MTjI7XG59O1xuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIGJhc2UtMTAgbG9nYXJpdGhtIG9mIGEgbnVtYmVyXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuXG5cbmV4cG9ydHMubG9nMiA9IGxvZzI7XG5cbnZhciBsb2cxMCA9IC8qICNfX1BVUkVfXyAqL01hdGgubG9nMTAgfHwgZnVuY3Rpb24gbG9nMTAoeCkge1xuICByZXR1cm4gTWF0aC5sb2coeCkgLyBNYXRoLkxOMTA7XG59O1xuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mIGEgbnVtYmVyICsgMVxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cblxuXG5leHBvcnRzLmxvZzEwID0gbG9nMTA7XG5cbnZhciBsb2cxcCA9IC8qICNfX1BVUkVfXyAqL01hdGgubG9nMXAgfHwgZnVuY3Rpb24gKHgpIHtcbiAgcmV0dXJuIE1hdGgubG9nKHggKyAxKTtcbn07XG4vKipcbiAqIENhbGN1bGF0ZSBjdWJpYyByb290IGZvciBhIG51bWJlclxuICpcbiAqIENvZGUgZnJvbSBlczYtc2hpbS5qczpcbiAqICAgaHR0cHM6Ly9naXRodWIuY29tL3BhdWxtaWxsci9lczYtc2hpbS9ibG9iL21hc3Rlci9lczYtc2hpbS5qcyNMMTU2NC1MMTU3N1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBjdWJpYyByb290IG9mIHhcbiAqL1xuXG5cbmV4cG9ydHMubG9nMXAgPSBsb2cxcDtcblxudmFyIGNicnQgPSAvKiAjX19QVVJFX18gKi9NYXRoLmNicnQgfHwgZnVuY3Rpb24gY2JydCh4KSB7XG4gIGlmICh4ID09PSAwKSB7XG4gICAgcmV0dXJuIHg7XG4gIH1cblxuICB2YXIgbmVnYXRlID0geCA8IDA7XG4gIHZhciByZXN1bHQ7XG5cbiAgaWYgKG5lZ2F0ZSkge1xuICAgIHggPSAteDtcbiAgfVxuXG4gIGlmIChpc0Zpbml0ZSh4KSkge1xuICAgIHJlc3VsdCA9IE1hdGguZXhwKE1hdGgubG9nKHgpIC8gMyk7IC8vIGZyb20gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ3ViZV9yb290I051bWVyaWNhbF9tZXRob2RzXG5cbiAgICByZXN1bHQgPSAoeCAvIChyZXN1bHQgKiByZXN1bHQpICsgMiAqIHJlc3VsdCkgLyAzO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9IHg7XG4gIH1cblxuICByZXR1cm4gbmVnYXRlID8gLXJlc3VsdCA6IHJlc3VsdDtcbn07XG4vKipcbiAqIENhbGN1bGF0ZXMgZXhwb25lbnRpYXRpb24gbWludXMgMVxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEByZXR1cm4ge251bWJlcn0gcmVzXG4gKi9cblxuXG5leHBvcnRzLmNicnQgPSBjYnJ0O1xuXG52YXIgZXhwbTEgPSAvKiAjX19QVVJFX18gKi9NYXRoLmV4cG0xIHx8IGZ1bmN0aW9uIGV4cG0xKHgpIHtcbiAgcmV0dXJuIHggPj0gMmUtNCB8fCB4IDw9IC0yZS00ID8gTWF0aC5leHAoeCkgLSAxIDogeCArIHggKiB4IC8gMiArIHggKiB4ICogeCAvIDY7XG59O1xuLyoqXG4gKiBDb252ZXJ0IGEgbnVtYmVyIHRvIGEgZm9ybWF0dGVkIHN0cmluZyByZXByZXNlbnRhdGlvbi5cbiAqXG4gKiBTeW50YXg6XG4gKlxuICogICAgZm9ybWF0KHZhbHVlKVxuICogICAgZm9ybWF0KHZhbHVlLCBvcHRpb25zKVxuICogICAgZm9ybWF0KHZhbHVlLCBwcmVjaXNpb24pXG4gKiAgICBmb3JtYXQodmFsdWUsIGZuKVxuICpcbiAqIFdoZXJlOlxuICpcbiAqICAgIHtudW1iZXJ9IHZhbHVlICAgVGhlIHZhbHVlIHRvIGJlIGZvcm1hdHRlZFxuICogICAge09iamVjdH0gb3B0aW9ucyBBbiBvYmplY3Qgd2l0aCBmb3JtYXR0aW5nIG9wdGlvbnMuIEF2YWlsYWJsZSBvcHRpb25zOlxuICogICAgICAgICAgICAgICAgICAgICB7c3RyaW5nfSBub3RhdGlvblxuICogICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIG5vdGF0aW9uLiBDaG9vc2UgZnJvbTpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICdmaXhlZCcgICAgICAgICAgQWx3YXlzIHVzZSByZWd1bGFyIG51bWJlciBub3RhdGlvbi5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUgJzEyMy40MCcgYW5kICcxNDAwMDAwMCdcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICdleHBvbmVudGlhbCcgICAgQWx3YXlzIHVzZSBleHBvbmVudGlhbCBub3RhdGlvbi5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUgJzEuMjM0ZSsyJyBhbmQgJzEuNGUrNydcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICdlbmdpbmVlcmluZycgICAgQWx3YXlzIHVzZSBlbmdpbmVlcmluZyBub3RhdGlvbi5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUgJzEyMy40ZSswJyBhbmQgJzE0LjBlKzYnXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAnYXV0bycgKGRlZmF1bHQpIFJlZ3VsYXIgbnVtYmVyIG5vdGF0aW9uIGZvciBudW1iZXJzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmluZyBhbiBhYnNvbHV0ZSB2YWx1ZSBiZXR3ZWVuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBsb3dlckV4cGAgYW5kIGB1cHBlckV4cGAgYm91bmRzLCBhbmRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcyBleHBvbmVudGlhbCBub3RhdGlvbiBlbHNld2hlcmUuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvd2VyIGJvdW5kIGlzIGluY2x1ZGVkLCB1cHBlciBib3VuZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBleGNsdWRlZC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUgJzEyMy40JyBhbmQgJzEuNGU3Jy5cbiAqICAgICAgICAgICAgICAgICAgICAge251bWJlcn0gcHJlY2lzaW9uICAgQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxNiB0byByb3VuZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZGlnaXRzIG9mIHRoZSBudW1iZXIuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIGNhc2Ugb2Ygbm90YXRpb25zICdleHBvbmVudGlhbCcsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbmdpbmVlcmluZycsIGFuZCAnYXV0bycsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBwcmVjaXNpb25gIGRlZmluZXMgdGhlIHRvdGFsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMgcmV0dXJuZWQuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIGNhc2Ugb2Ygbm90YXRpb24gJ2ZpeGVkJyxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHByZWNpc2lvbmAgZGVmaW5lcyB0aGUgbnVtYmVyIG9mXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25pZmljYW50IGRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHByZWNpc2lvbmAgaXMgdW5kZWZpbmVkIGJ5IGRlZmF1bHQsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCByb3VuZGluZyBhbnkgZGlnaXRzLlxuICogICAgICAgICAgICAgICAgICAgICB7bnVtYmVyfSBsb3dlckV4cCAgICBFeHBvbmVudCBkZXRlcm1pbmluZyB0aGUgbG93ZXIgYm91bmRhcnlcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGZvcm1hdHRpbmcgYSB2YWx1ZSB3aXRoIGFuIGV4cG9uZW50XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gYG5vdGF0aW9uPSdhdXRvYC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdCB2YWx1ZSBpcyBgLTNgLlxuICogICAgICAgICAgICAgICAgICAgICB7bnVtYmVyfSB1cHBlckV4cCAgICBFeHBvbmVudCBkZXRlcm1pbmluZyB0aGUgdXBwZXIgYm91bmRhcnlcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGZvcm1hdHRpbmcgYSB2YWx1ZSB3aXRoIGFuIGV4cG9uZW50XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gYG5vdGF0aW9uPSdhdXRvYC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdCB2YWx1ZSBpcyBgNWAuXG4gKiAgICB7RnVuY3Rpb259IGZuICAgIEEgY3VzdG9tIGZvcm1hdHRpbmcgZnVuY3Rpb24uIENhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoZVxuICogICAgICAgICAgICAgICAgICAgICBidWlsdC1pbiBub3RhdGlvbnMuIEZ1bmN0aW9uIGBmbmAgaXMgY2FsbGVkIHdpdGggYHZhbHVlYCBhc1xuICogICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIgYW5kIG11c3QgcmV0dXJuIGEgc3RyaW5nLiBJcyB1c2VmdWwgZm9yIGV4YW1wbGUgdG9cbiAqICAgICAgICAgICAgICAgICAgICAgZm9ybWF0IGFsbCB2YWx1ZXMgaW5zaWRlIGEgbWF0cml4IGluIGEgcGFydGljdWxhciB3YXkuXG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogICAgZm9ybWF0KDYuNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzYuNCdcbiAqICAgIGZvcm1hdCgxMjQwMDAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICcxLjI0ZTYnXG4gKiAgICBmb3JtYXQoMS8zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAnMC4zMzMzMzMzMzMzMzMzMzMzJ1xuICogICAgZm9ybWF0KDEvMywgMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzAuMzMzJ1xuICogICAgZm9ybWF0KDIxMzg1LCAyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzIxMDAwJ1xuICogICAgZm9ybWF0KDEyLjA3MSwge25vdGF0aW9uOiAnZml4ZWQnfSkgICAgICAgICAgICAgICAgLy8gJzEyJ1xuICogICAgZm9ybWF0KDIuMywgICAge25vdGF0aW9uOiAnZml4ZWQnLCBwcmVjaXNpb246IDJ9KSAgLy8gJzIuMzAnXG4gKiAgICBmb3JtYXQoNTIuOCwgICB7bm90YXRpb246ICdleHBvbmVudGlhbCd9KSAgICAgICAgICAvLyAnNS4yOGUrMSdcbiAqICAgIGZvcm1hdCgxMjM0NTY3OCwge25vdGF0aW9uOiAnZW5naW5lZXJpbmcnfSkgICAgICAgIC8vICcxMi4zNDU2NzhlKzYnXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcGFyYW0ge09iamVjdCB8IEZ1bmN0aW9uIHwgbnVtYmVyfSBbb3B0aW9uc11cbiAqIEByZXR1cm4ge3N0cmluZ30gc3RyIFRoZSBmb3JtYXR0ZWQgdmFsdWVcbiAqL1xuXG5cbmV4cG9ydHMuZXhwbTEgPSBleHBtMTtcblxuZnVuY3Rpb24gZm9ybWF0KHZhbHVlLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIGhhbmRsZSBmb3JtYXQodmFsdWUsIGZuKVxuICAgIHJldHVybiBvcHRpb25zKHZhbHVlKTtcbiAgfSAvLyBoYW5kbGUgc3BlY2lhbCBjYXNlc1xuXG5cbiAgaWYgKHZhbHVlID09PSBJbmZpbml0eSkge1xuICAgIHJldHVybiAnSW5maW5pdHknO1xuICB9IGVsc2UgaWYgKHZhbHVlID09PSAtSW5maW5pdHkpIHtcbiAgICByZXR1cm4gJy1JbmZpbml0eSc7XG4gIH0gZWxzZSBpZiAoaXNOYU4odmFsdWUpKSB7XG4gICAgcmV0dXJuICdOYU4nO1xuICB9IC8vIGRlZmF1bHQgdmFsdWVzIGZvciBvcHRpb25zXG5cblxuICB2YXIgbm90YXRpb24gPSAnYXV0byc7XG4gIHZhciBwcmVjaXNpb247XG5cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICAvLyBkZXRlcm1pbmUgbm90YXRpb24gZnJvbSBvcHRpb25zXG4gICAgaWYgKG9wdGlvbnMubm90YXRpb24pIHtcbiAgICAgIG5vdGF0aW9uID0gb3B0aW9ucy5ub3RhdGlvbjtcbiAgICB9IC8vIGRldGVybWluZSBwcmVjaXNpb24gZnJvbSBvcHRpb25zXG5cblxuICAgIGlmICgoMCwgX2lzLmlzTnVtYmVyKShvcHRpb25zKSkge1xuICAgICAgcHJlY2lzaW9uID0gb3B0aW9ucztcbiAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKG9wdGlvbnMucHJlY2lzaW9uKSkge1xuICAgICAgcHJlY2lzaW9uID0gb3B0aW9ucy5wcmVjaXNpb247XG4gICAgfVxuICB9IC8vIGhhbmRsZSB0aGUgdmFyaW91cyBub3RhdGlvbnNcblxuXG4gIHN3aXRjaCAobm90YXRpb24pIHtcbiAgICBjYXNlICdmaXhlZCc6XG4gICAgICByZXR1cm4gdG9GaXhlZCh2YWx1ZSwgcHJlY2lzaW9uKTtcblxuICAgIGNhc2UgJ2V4cG9uZW50aWFsJzpcbiAgICAgIHJldHVybiB0b0V4cG9uZW50aWFsKHZhbHVlLCBwcmVjaXNpb24pO1xuXG4gICAgY2FzZSAnZW5naW5lZXJpbmcnOlxuICAgICAgcmV0dXJuIHRvRW5naW5lZXJpbmcodmFsdWUsIHByZWNpc2lvbik7XG5cbiAgICBjYXNlICdhdXRvJzpcbiAgICAgIC8vIFRPRE86IGNsZWFuIHVwIHNvbWUgZGF5LiBEZXByZWNhdGVkIHNpbmNlOiAyMDE4LTAxLTI0XG4gICAgICAvLyBAZGVwcmVjYXRlZCB1cHBlciBhbmQgbG93ZXIgYXJlIHJlcGxhY2VkIHdpdGggdXBwZXJFeHAgYW5kIGxvd2VyRXhwIHNpbmNlIHY0LjAuMFxuICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5leHBvbmVudGlhbCAmJiAob3B0aW9ucy5leHBvbmVudGlhbC5sb3dlciAhPT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMuZXhwb25lbnRpYWwudXBwZXIgIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgdmFyIGZpeGVkT3B0aW9ucyA9ICgwLCBfb2JqZWN0Lm1hcE9iamVjdCkob3B0aW9ucywgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfSk7XG4gICAgICAgIGZpeGVkT3B0aW9ucy5leHBvbmVudGlhbCA9IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAob3B0aW9ucy5leHBvbmVudGlhbC5sb3dlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZml4ZWRPcHRpb25zLmxvd2VyRXhwID0gTWF0aC5yb3VuZChNYXRoLmxvZyhvcHRpb25zLmV4cG9uZW50aWFsLmxvd2VyKSAvIE1hdGguTE4xMCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5leHBvbmVudGlhbC51cHBlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZml4ZWRPcHRpb25zLnVwcGVyRXhwID0gTWF0aC5yb3VuZChNYXRoLmxvZyhvcHRpb25zLmV4cG9uZW50aWFsLnVwcGVyKSAvIE1hdGguTE4xMCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zb2xlLndhcm4oJ0RlcHJlY2F0aW9uIHdhcm5pbmc6IEZvcm1hdHRpbmcgb3B0aW9ucyBleHBvbmVudGlhbC5sb3dlciBhbmQgZXhwb25lbnRpYWwudXBwZXIgJyArICcobWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZSkgJyArICdhcmUgcmVwbGFjZWQgd2l0aCBleHBvbmVudGlhbC5sb3dlckV4cCBhbmQgZXhwb25lbnRpYWwudXBwZXJFeHAgJyArICcobWluaW11bSBhbmQgbWF4aW11bSBleHBvbmVudCkgc2luY2UgdmVyc2lvbiA0LjAuMC4gJyArICdSZXBsYWNlICcgKyBKU09OLnN0cmluZ2lmeShvcHRpb25zKSArICcgd2l0aCAnICsgSlNPTi5zdHJpbmdpZnkoZml4ZWRPcHRpb25zKSk7XG4gICAgICAgIHJldHVybiB0b1ByZWNpc2lvbih2YWx1ZSwgcHJlY2lzaW9uLCBmaXhlZE9wdGlvbnMpO1xuICAgICAgfSAvLyByZW1vdmUgdHJhaWxpbmcgemVyb3MgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnRcblxuXG4gICAgICByZXR1cm4gdG9QcmVjaXNpb24odmFsdWUsIHByZWNpc2lvbiwgb3B0aW9ucyAmJiBvcHRpb25zKS5yZXBsYWNlKC8oKFxcLlxcZCo/KSgwKykpKCR8ZSkvLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkaWdpdHMgPSBhcmd1bWVudHNbMl07XG4gICAgICAgIHZhciBlID0gYXJndW1lbnRzWzRdO1xuICAgICAgICByZXR1cm4gZGlnaXRzICE9PSAnLicgPyBkaWdpdHMgKyBlIDogZTtcbiAgICAgIH0pO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBub3RhdGlvbiBcIicgKyBub3RhdGlvbiArICdcIi4gJyArICdDaG9vc2UgXCJhdXRvXCIsIFwiZXhwb25lbnRpYWxcIiwgb3IgXCJmaXhlZFwiLicpO1xuICB9XG59XG4vKipcbiAqIFNwbGl0IGEgbnVtYmVyIGludG8gc2lnbiwgY29lZmZpY2llbnRzLCBhbmQgZXhwb25lbnRcbiAqIEBwYXJhbSB7bnVtYmVyIHwgc3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7U3BsaXRWYWx1ZX1cbiAqICAgICAgICAgICAgICBSZXR1cm5zIGFuIG9iamVjdCBjb250YWluaW5nIHNpZ24sIGNvZWZmaWNpZW50cywgYW5kIGV4cG9uZW50XG4gKi9cblxuXG5mdW5jdGlvbiBzcGxpdE51bWJlcih2YWx1ZSkge1xuICAvLyBwYXJzZSB0aGUgaW5wdXQgdmFsdWVcbiAgdmFyIG1hdGNoID0gU3RyaW5nKHZhbHVlKS50b0xvd2VyQ2FzZSgpLm1hdGNoKC9eMCo/KC0/KShcXGQrXFwuP1xcZCopKGUoWystXT9cXGQrKSk/JC8pO1xuXG4gIGlmICghbWF0Y2gpIHtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0ludmFsaWQgbnVtYmVyICcgKyB2YWx1ZSk7XG4gIH1cblxuICB2YXIgc2lnbiA9IG1hdGNoWzFdO1xuICB2YXIgZGlnaXRzID0gbWF0Y2hbMl07XG4gIHZhciBleHBvbmVudCA9IHBhcnNlRmxvYXQobWF0Y2hbNF0gfHwgJzAnKTtcbiAgdmFyIGRvdCA9IGRpZ2l0cy5pbmRleE9mKCcuJyk7XG4gIGV4cG9uZW50ICs9IGRvdCAhPT0gLTEgPyBkb3QgLSAxIDogZGlnaXRzLmxlbmd0aCAtIDE7XG4gIHZhciBjb2VmZmljaWVudHMgPSBkaWdpdHMucmVwbGFjZSgnLicsICcnKSAvLyByZW1vdmUgdGhlIGRvdCAobXVzdCBiZSByZW1vdmVkIGJlZm9yZSByZW1vdmluZyBsZWFkaW5nIHplcm9zKVxuICAucmVwbGFjZSgvXjAqLywgZnVuY3Rpb24gKHplcm9zKSB7XG4gICAgLy8gcmVtb3ZlIGxlYWRpbmcgemVyb3MsIGFkZCB0aGVpciBjb3VudCB0byB0aGUgZXhwb25lbnRcbiAgICBleHBvbmVudCAtPSB6ZXJvcy5sZW5ndGg7XG4gICAgcmV0dXJuICcnO1xuICB9KS5yZXBsYWNlKC8wKiQvLCAnJykgLy8gcmVtb3ZlIHRyYWlsaW5nIHplcm9zXG4gIC5zcGxpdCgnJykubWFwKGZ1bmN0aW9uIChkKSB7XG4gICAgcmV0dXJuIHBhcnNlSW50KGQpO1xuICB9KTtcblxuICBpZiAoY29lZmZpY2llbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIGNvZWZmaWNpZW50cy5wdXNoKDApO1xuICAgIGV4cG9uZW50Kys7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHNpZ246IHNpZ24sXG4gICAgY29lZmZpY2llbnRzOiBjb2VmZmljaWVudHMsXG4gICAgZXhwb25lbnQ6IGV4cG9uZW50XG4gIH07XG59XG4vKipcbiAqIEZvcm1hdCBhIG51bWJlciBpbiBlbmdpbmVlcmluZyBub3RhdGlvbi4gTGlrZSAnMS4yM2UrNicsICcyLjNlKzAnLCAnMy41MDBlLTMnXG4gKiBAcGFyYW0ge251bWJlciB8IHN0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcHJlY2lzaW9uXSAgICAgICAgT3B0aW9uYWwgbnVtYmVyIG9mIHNpZ25pZmljYW50IGZpZ3VyZXMgdG8gcmV0dXJuLlxuICovXG5cblxuZnVuY3Rpb24gdG9FbmdpbmVlcmluZyh2YWx1ZSwgcHJlY2lzaW9uKSB7XG4gIGlmIChpc05hTih2YWx1ZSkgfHwgIWlzRmluaXRlKHZhbHVlKSkge1xuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICB9XG5cbiAgdmFyIHNwbGl0ID0gc3BsaXROdW1iZXIodmFsdWUpO1xuICB2YXIgcm91bmRlZCA9IHJvdW5kRGlnaXRzKHNwbGl0LCBwcmVjaXNpb24pO1xuICB2YXIgZSA9IHJvdW5kZWQuZXhwb25lbnQ7XG4gIHZhciBjID0gcm91bmRlZC5jb2VmZmljaWVudHM7IC8vIGZpbmQgbmVhcmVzdCBsb3dlciBtdWx0aXBsZSBvZiAzIGZvciBleHBvbmVudFxuXG4gIHZhciBuZXdFeHAgPSBlICUgMyA9PT0gMCA/IGUgOiBlIDwgMCA/IGUgLSAzIC0gZSAlIDMgOiBlIC0gZSAlIDM7XG5cbiAgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKHByZWNpc2lvbikpIHtcbiAgICAvLyBhZGQgemVyb2VzIHRvIGdpdmUgY29ycmVjdCBzaWcgZmlnc1xuICAgIHdoaWxlIChwcmVjaXNpb24gPiBjLmxlbmd0aCB8fCBlIC0gbmV3RXhwICsgMSA+IGMubGVuZ3RoKSB7XG4gICAgICBjLnB1c2goMCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGNvbmNhdGVuYXRlIGNvZWZmaWNpZW50cyB3aXRoIG5lY2Vzc2FyeSB6ZXJvc1xuICAgIC8vIGFkZCB6ZXJvcyBpZiBuZWNlc3NhcnkgKGZvciBleGFtcGxlOiAxZSs4IC0+IDEwMGUrNilcbiAgICB2YXIgbWlzc2luZ1plcm9zID0gTWF0aC5hYnMoZSAtIG5ld0V4cCkgLSAoYy5sZW5ndGggLSAxKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWlzc2luZ1plcm9zOyBpKyspIHtcbiAgICAgIGMucHVzaCgwKTtcbiAgICB9XG4gIH0gLy8gZmluZCBkaWZmZXJlbmNlIGluIGV4cG9uZW50c1xuXG5cbiAgdmFyIGV4cERpZmYgPSBNYXRoLmFicyhlIC0gbmV3RXhwKTtcbiAgdmFyIGRlY2ltYWxJZHggPSAxOyAvLyBwdXNoIGRlY2ltYWwgaW5kZXggb3ZlciBieSBleHBEaWZmIHRpbWVzXG5cbiAgd2hpbGUgKGV4cERpZmYgPiAwKSB7XG4gICAgZGVjaW1hbElkeCsrO1xuICAgIGV4cERpZmYtLTtcbiAgfSAvLyBpZiBhbGwgY29lZmZpY2llbnQgdmFsdWVzIGFyZSB6ZXJvIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50IGFuZCBwcmVjaXNpb24gaXMgdW5zZXQsIGRvbid0IGFkZCBhIGRlY2ltYWwgdmFsdWUuXG4gIC8vIG90aGVyd2lzZSBjb25jYXQgd2l0aCB0aGUgcmVzdCBvZiB0aGUgY29lZmZpY2llbnRzXG5cblxuICB2YXIgZGVjaW1hbHMgPSBjLnNsaWNlKGRlY2ltYWxJZHgpLmpvaW4oJycpO1xuICB2YXIgZGVjaW1hbFZhbCA9ICgwLCBfaXMuaXNOdW1iZXIpKHByZWNpc2lvbikgJiYgZGVjaW1hbHMubGVuZ3RoIHx8IGRlY2ltYWxzLm1hdGNoKC9bMS05XS8pID8gJy4nICsgZGVjaW1hbHMgOiAnJztcbiAgdmFyIHN0ciA9IGMuc2xpY2UoMCwgZGVjaW1hbElkeCkuam9pbignJykgKyBkZWNpbWFsVmFsICsgJ2UnICsgKGUgPj0gMCA/ICcrJyA6ICcnKSArIG5ld0V4cC50b1N0cmluZygpO1xuICByZXR1cm4gcm91bmRlZC5zaWduICsgc3RyO1xufVxuLyoqXG4gKiBGb3JtYXQgYSBudW1iZXIgd2l0aCBmaXhlZCBub3RhdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyIHwgc3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IFtwcmVjaXNpb249dW5kZWZpbmVkXSAgT3B0aW9uYWwgbnVtYmVyIG9mIGRlY2ltYWxzIGFmdGVyIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjaW1hbCBwb2ludC4gbnVsbCBieSBkZWZhdWx0LlxuICovXG5cblxuZnVuY3Rpb24gdG9GaXhlZCh2YWx1ZSwgcHJlY2lzaW9uKSB7XG4gIGlmIChpc05hTih2YWx1ZSkgfHwgIWlzRmluaXRlKHZhbHVlKSkge1xuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICB9XG5cbiAgdmFyIHNwbGl0VmFsdWUgPSBzcGxpdE51bWJlcih2YWx1ZSk7XG4gIHZhciByb3VuZGVkID0gdHlwZW9mIHByZWNpc2lvbiA9PT0gJ251bWJlcicgPyByb3VuZERpZ2l0cyhzcGxpdFZhbHVlLCBzcGxpdFZhbHVlLmV4cG9uZW50ICsgMSArIHByZWNpc2lvbikgOiBzcGxpdFZhbHVlO1xuICB2YXIgYyA9IHJvdW5kZWQuY29lZmZpY2llbnRzO1xuICB2YXIgcCA9IHJvdW5kZWQuZXhwb25lbnQgKyAxOyAvLyBleHBvbmVudCBtYXkgaGF2ZSBjaGFuZ2VkXG4gIC8vIGFwcGVuZCB6ZXJvcyBpZiBuZWVkZWRcblxuICB2YXIgcHAgPSBwICsgKHByZWNpc2lvbiB8fCAwKTtcblxuICBpZiAoYy5sZW5ndGggPCBwcCkge1xuICAgIGMgPSBjLmNvbmNhdCh6ZXJvcyhwcCAtIGMubGVuZ3RoKSk7XG4gIH0gLy8gcHJlcGVuZCB6ZXJvcyBpZiBuZWVkZWRcblxuXG4gIGlmIChwIDwgMCkge1xuICAgIGMgPSB6ZXJvcygtcCArIDEpLmNvbmNhdChjKTtcbiAgICBwID0gMTtcbiAgfSAvLyBpbnNlcnQgYSBkb3QgaWYgbmVlZGVkXG5cblxuICBpZiAocCA8IGMubGVuZ3RoKSB7XG4gICAgYy5zcGxpY2UocCwgMCwgcCA9PT0gMCA/ICcwLicgOiAnLicpO1xuICB9XG5cbiAgcmV0dXJuIHJvdW5kZWQuc2lnbiArIGMuam9pbignJyk7XG59XG4vKipcbiAqIEZvcm1hdCBhIG51bWJlciBpbiBleHBvbmVudGlhbCBub3RhdGlvbi4gTGlrZSAnMS4yM2UrNScsICcyLjNlKzAnLCAnMy41MDBlLTMnXG4gKiBAcGFyYW0ge251bWJlciB8IHN0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcHJlY2lzaW9uXSAgTnVtYmVyIG9mIGRpZ2l0cyBpbiBmb3JtYXR0ZWQgb3V0cHV0LlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBub3QgcHJvdmlkZWQsIHRoZSBtYXhpbXVtIGF2YWlsYWJsZSBkaWdpdHNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgdXNlZC5cbiAqL1xuXG5cbmZ1bmN0aW9uIHRvRXhwb25lbnRpYWwodmFsdWUsIHByZWNpc2lvbikge1xuICBpZiAoaXNOYU4odmFsdWUpIHx8ICFpc0Zpbml0ZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgfSAvLyByb3VuZCBpZiBuZWVkZWQsIGVsc2UgY3JlYXRlIGEgY2xvbmVcblxuXG4gIHZhciBzcGxpdCA9IHNwbGl0TnVtYmVyKHZhbHVlKTtcbiAgdmFyIHJvdW5kZWQgPSBwcmVjaXNpb24gPyByb3VuZERpZ2l0cyhzcGxpdCwgcHJlY2lzaW9uKSA6IHNwbGl0O1xuICB2YXIgYyA9IHJvdW5kZWQuY29lZmZpY2llbnRzO1xuICB2YXIgZSA9IHJvdW5kZWQuZXhwb25lbnQ7IC8vIGFwcGVuZCB6ZXJvcyBpZiBuZWVkZWRcblxuICBpZiAoYy5sZW5ndGggPCBwcmVjaXNpb24pIHtcbiAgICBjID0gYy5jb25jYXQoemVyb3MocHJlY2lzaW9uIC0gYy5sZW5ndGgpKTtcbiAgfSAvLyBmb3JtYXQgYXMgYEMuQ0NDZStFRUVgIG9yIGBDLkNDQ2UtRUVFYFxuXG5cbiAgdmFyIGZpcnN0ID0gYy5zaGlmdCgpO1xuICByZXR1cm4gcm91bmRlZC5zaWduICsgZmlyc3QgKyAoYy5sZW5ndGggPiAwID8gJy4nICsgYy5qb2luKCcnKSA6ICcnKSArICdlJyArIChlID49IDAgPyAnKycgOiAnJykgKyBlO1xufVxuLyoqXG4gKiBGb3JtYXQgYSBudW1iZXIgd2l0aCBhIGNlcnRhaW4gcHJlY2lzaW9uXG4gKiBAcGFyYW0ge251bWJlciB8IHN0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcHJlY2lzaW9uPXVuZGVmaW5lZF0gT3B0aW9uYWwgbnVtYmVyIG9mIGRpZ2l0cy5cbiAqIEBwYXJhbSB7e2xvd2VyRXhwOiBudW1iZXIgfCB1bmRlZmluZWQsIHVwcGVyRXhwOiBudW1iZXIgfCB1bmRlZmluZWR9fSBbb3B0aW9uc11cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdDpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb3dlckV4cCA9IC0zIChpbmNsKVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwcGVyID0gKzUgKGV4Y2wpXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cblxuXG5mdW5jdGlvbiB0b1ByZWNpc2lvbih2YWx1ZSwgcHJlY2lzaW9uLCBvcHRpb25zKSB7XG4gIGlmIChpc05hTih2YWx1ZSkgfHwgIWlzRmluaXRlKHZhbHVlKSkge1xuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICB9IC8vIGRldGVybWluZSBsb3dlciBhbmQgdXBwZXIgYm91bmQgZm9yIGV4cG9uZW50aWFsIG5vdGF0aW9uLlxuXG5cbiAgdmFyIGxvd2VyRXhwID0gb3B0aW9ucyAmJiBvcHRpb25zLmxvd2VyRXhwICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmxvd2VyRXhwIDogLTM7XG4gIHZhciB1cHBlckV4cCA9IG9wdGlvbnMgJiYgb3B0aW9ucy51cHBlckV4cCAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy51cHBlckV4cCA6IDU7XG4gIHZhciBzcGxpdCA9IHNwbGl0TnVtYmVyKHZhbHVlKTtcbiAgdmFyIHJvdW5kZWQgPSBwcmVjaXNpb24gPyByb3VuZERpZ2l0cyhzcGxpdCwgcHJlY2lzaW9uKSA6IHNwbGl0O1xuXG4gIGlmIChyb3VuZGVkLmV4cG9uZW50IDwgbG93ZXJFeHAgfHwgcm91bmRlZC5leHBvbmVudCA+PSB1cHBlckV4cCkge1xuICAgIC8vIGV4cG9uZW50aWFsIG5vdGF0aW9uXG4gICAgcmV0dXJuIHRvRXhwb25lbnRpYWwodmFsdWUsIHByZWNpc2lvbik7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGMgPSByb3VuZGVkLmNvZWZmaWNpZW50cztcbiAgICB2YXIgZSA9IHJvdW5kZWQuZXhwb25lbnQ7IC8vIGFwcGVuZCB0cmFpbGluZyB6ZXJvc1xuXG4gICAgaWYgKGMubGVuZ3RoIDwgcHJlY2lzaW9uKSB7XG4gICAgICBjID0gYy5jb25jYXQoemVyb3MocHJlY2lzaW9uIC0gYy5sZW5ndGgpKTtcbiAgICB9IC8vIGFwcGVuZCB0cmFpbGluZyB6ZXJvc1xuICAgIC8vIFRPRE86IHNpbXBsaWZ5IHRoZSBuZXh0IHN0YXRlbWVudFxuXG5cbiAgICBjID0gYy5jb25jYXQoemVyb3MoZSAtIGMubGVuZ3RoICsgMSArIChjLmxlbmd0aCA8IHByZWNpc2lvbiA/IHByZWNpc2lvbiAtIGMubGVuZ3RoIDogMCkpKTsgLy8gcHJlcGVuZCB6ZXJvc1xuXG4gICAgYyA9IHplcm9zKC1lKS5jb25jYXQoYyk7XG4gICAgdmFyIGRvdCA9IGUgPiAwID8gZSA6IDA7XG5cbiAgICBpZiAoZG90IDwgYy5sZW5ndGggLSAxKSB7XG4gICAgICBjLnNwbGljZShkb3QgKyAxLCAwLCAnLicpO1xuICAgIH1cblxuICAgIHJldHVybiByb3VuZGVkLnNpZ24gKyBjLmpvaW4oJycpO1xuICB9XG59XG4vKipcbiAqIFJvdW5kIHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIGEgbnVtYmVyICpcbiAqIEBwYXJhbSB7U3BsaXRWYWx1ZX0gc3BsaXQgICAgICAgQSB2YWx1ZSBzcGxpdCB3aXRoIC5zcGxpdE51bWJlcih2YWx1ZSlcbiAqIEBwYXJhbSB7bnVtYmVyfSBwcmVjaXNpb24gIEEgcG9zaXRpdmUgaW50ZWdlclxuICogQHJldHVybiB7U3BsaXRWYWx1ZX1cbiAqICAgICAgICAgICAgICBSZXR1cm5zIGFuIG9iamVjdCBjb250YWluaW5nIHNpZ24sIGNvZWZmaWNpZW50cywgYW5kIGV4cG9uZW50XG4gKiAgICAgICAgICAgICAgd2l0aCByb3VuZGVkIGRpZ2l0c1xuICovXG5cblxuZnVuY3Rpb24gcm91bmREaWdpdHMoc3BsaXQsIHByZWNpc2lvbikge1xuICAvLyBjcmVhdGUgYSBjbG9uZVxuICB2YXIgcm91bmRlZCA9IHtcbiAgICBzaWduOiBzcGxpdC5zaWduLFxuICAgIGNvZWZmaWNpZW50czogc3BsaXQuY29lZmZpY2llbnRzLFxuICAgIGV4cG9uZW50OiBzcGxpdC5leHBvbmVudFxuICB9O1xuICB2YXIgYyA9IHJvdW5kZWQuY29lZmZpY2llbnRzOyAvLyBwcmVwZW5kIHplcm9zIGlmIG5lZWRlZFxuXG4gIHdoaWxlIChwcmVjaXNpb24gPD0gMCkge1xuICAgIGMudW5zaGlmdCgwKTtcbiAgICByb3VuZGVkLmV4cG9uZW50Kys7XG4gICAgcHJlY2lzaW9uKys7XG4gIH1cblxuICBpZiAoYy5sZW5ndGggPiBwcmVjaXNpb24pIHtcbiAgICB2YXIgcmVtb3ZlZCA9IGMuc3BsaWNlKHByZWNpc2lvbiwgYy5sZW5ndGggLSBwcmVjaXNpb24pO1xuXG4gICAgaWYgKHJlbW92ZWRbMF0gPj0gNSkge1xuICAgICAgdmFyIGkgPSBwcmVjaXNpb24gLSAxO1xuICAgICAgY1tpXSsrO1xuXG4gICAgICB3aGlsZSAoY1tpXSA9PT0gMTApIHtcbiAgICAgICAgYy5wb3AoKTtcblxuICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgIGMudW5zaGlmdCgwKTtcbiAgICAgICAgICByb3VuZGVkLmV4cG9uZW50Kys7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9XG5cbiAgICAgICAgaS0tO1xuICAgICAgICBjW2ldKys7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJvdW5kZWQ7XG59XG4vKipcbiAqIENyZWF0ZSBhbiBhcnJheSBmaWxsZWQgd2l0aCB6ZXJvcy5cbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqIEByZXR1cm4ge0FycmF5fVxuICovXG5cblxuZnVuY3Rpb24gemVyb3MobGVuZ3RoKSB7XG4gIHZhciBhcnIgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgYXJyLnB1c2goMCk7XG4gIH1cblxuICByZXR1cm4gYXJyO1xufVxuLyoqXG4gKiBDb3VudCB0aGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cyBvZiBhIG51bWJlci5cbiAqXG4gKiBGb3IgZXhhbXBsZTpcbiAqICAgMi4zNCByZXR1cm5zIDNcbiAqICAgMC4wMDM0IHJldHVybnMgMlxuICogICAxMjAuNWUrMzAgcmV0dXJucyA0XG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJuIHtudW1iZXJ9IGRpZ2l0cyAgIE51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHNcbiAqL1xuXG5cbmZ1bmN0aW9uIGRpZ2l0cyh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUudG9FeHBvbmVudGlhbCgpLnJlcGxhY2UoL2UuKiQvLCAnJykgLy8gcmVtb3ZlIGV4cG9uZW50aWFsIG5vdGF0aW9uXG4gIC5yZXBsYWNlKC9eMFxcLj8wKnxcXC4vLCAnJykgLy8gcmVtb3ZlIGRlY2ltYWwgcG9pbnQgYW5kIGxlYWRpbmcgemVyb3NcbiAgLmxlbmd0aDtcbn1cbi8qKlxuICogTWluaW11bSBudW1iZXIgYWRkZWQgdG8gb25lIHRoYXQgbWFrZXMgdGhlIHJlc3VsdCBkaWZmZXJlbnQgdGhhbiBvbmVcbiAqL1xuXG5cbnZhciBEQkxfRVBTSUxPTiA9IE51bWJlci5FUFNJTE9OIHx8IDIuMjIwNDQ2MDQ5MjUwMzEzMDgwODQ3MjYzMzM2MTgxNkUtMTY7XG4vKipcbiAqIENvbXBhcmVzIHR3byBmbG9hdGluZyBwb2ludCBudW1iZXJzLlxuICogQHBhcmFtIHtudW1iZXJ9IHggICAgICAgICAgRmlyc3QgdmFsdWUgdG8gY29tcGFyZVxuICogQHBhcmFtIHtudW1iZXJ9IHkgICAgICAgICAgU2Vjb25kIHZhbHVlIHRvIGNvbXBhcmVcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZXBzaWxvbl0gIFRoZSBtYXhpbXVtIHJlbGF0aXZlIGRpZmZlcmVuY2UgYmV0d2VlbiB4IGFuZCB5XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBlcHNpbG9uIGlzIHVuZGVmaW5lZCBvciBudWxsLCB0aGUgZnVuY3Rpb24gd2lsbFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdCB3aGV0aGVyIHggYW5kIHkgYXJlIGV4YWN0bHkgZXF1YWwuXG4gKiBAcmV0dXJuIHtib29sZWFufSB3aGV0aGVyIHRoZSB0d28gbnVtYmVycyBhcmUgbmVhcmx5IGVxdWFsXG4qL1xuXG5leHBvcnRzLkRCTF9FUFNJTE9OID0gREJMX0VQU0lMT047XG5cbmZ1bmN0aW9uIG5lYXJseUVxdWFsKHgsIHksIGVwc2lsb24pIHtcbiAgLy8gaWYgZXBzaWxvbiBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGVzdCB3aGV0aGVyIHggYW5kIHkgYXJlIGV4YWN0bHkgZXF1YWxcbiAgaWYgKGVwc2lsb24gPT09IG51bGwgfHwgZXBzaWxvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHggPT09IHk7XG4gIH1cblxuICBpZiAoeCA9PT0geSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIE5hTlxuXG5cbiAgaWYgKGlzTmFOKHgpIHx8IGlzTmFOKHkpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIGF0IHRoaXMgcG9pbnQgeCBhbmQgeSBzaG91bGQgYmUgZmluaXRlXG5cblxuICBpZiAoaXNGaW5pdGUoeCkgJiYgaXNGaW5pdGUoeSkpIHtcbiAgICAvLyBjaGVjayBudW1iZXJzIGFyZSB2ZXJ5IGNsb3NlLCBuZWVkZWQgd2hlbiBjb21wYXJpbmcgbnVtYmVycyBuZWFyIHplcm9cbiAgICB2YXIgZGlmZiA9IE1hdGguYWJzKHggLSB5KTtcblxuICAgIGlmIChkaWZmIDwgREJMX0VQU0lMT04pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB1c2UgcmVsYXRpdmUgZXJyb3JcbiAgICAgIHJldHVybiBkaWZmIDw9IE1hdGgubWF4KE1hdGguYWJzKHgpLCBNYXRoLmFicyh5KSkgKiBlcHNpbG9uO1xuICAgIH1cbiAgfSAvLyBJbmZpbml0ZSBhbmQgTnVtYmVyIG9yIG5lZ2F0aXZlIEluZmluaXRlIGFuZCBwb3NpdGl2ZSBJbmZpbml0ZSBjYXNlc1xuXG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgYXJjY29zIG9mIGEgbnVtYmVyXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5cblxudmFyIGFjb3NoID0gTWF0aC5hY29zaCB8fCBmdW5jdGlvbiAoeCkge1xuICByZXR1cm4gTWF0aC5sb2coTWF0aC5zcXJ0KHggKiB4IC0gMSkgKyB4KTtcbn07XG5cbmV4cG9ydHMuYWNvc2ggPSBhY29zaDtcblxudmFyIGFzaW5oID0gTWF0aC5hc2luaCB8fCBmdW5jdGlvbiAoeCkge1xuICByZXR1cm4gTWF0aC5sb2coTWF0aC5zcXJ0KHggKiB4ICsgMSkgKyB4KTtcbn07XG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgaHlwZXJib2xpYyBhcmN0YW5nZW50IG9mIGEgbnVtYmVyXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5cblxuZXhwb3J0cy5hc2luaCA9IGFzaW5oO1xuXG52YXIgYXRhbmggPSBNYXRoLmF0YW5oIHx8IGZ1bmN0aW9uICh4KSB7XG4gIHJldHVybiBNYXRoLmxvZygoMSArIHgpIC8gKDEgLSB4KSkgLyAyO1xufTtcbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBoeXBlcmJvbGljIGNvc2luZSBvZiBhIG51bWJlclxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cblxuXG5leHBvcnRzLmF0YW5oID0gYXRhbmg7XG5cbnZhciBjb3NoID0gTWF0aC5jb3NoIHx8IGZ1bmN0aW9uICh4KSB7XG4gIHJldHVybiAoTWF0aC5leHAoeCkgKyBNYXRoLmV4cCgteCkpIC8gMjtcbn07XG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgaHlwZXJib2xpYyBzaW5lIG9mIGEgbnVtYmVyXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuXG5cbmV4cG9ydHMuY29zaCA9IGNvc2g7XG5cbnZhciBzaW5oID0gTWF0aC5zaW5oIHx8IGZ1bmN0aW9uICh4KSB7XG4gIHJldHVybiAoTWF0aC5leHAoeCkgLSBNYXRoLmV4cCgteCkpIC8gMjtcbn07XG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgaHlwZXJib2xpYyB0YW5nZW50IG9mIGEgbnVtYmVyXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuXG5cbmV4cG9ydHMuc2luaCA9IHNpbmg7XG5cbnZhciB0YW5oID0gTWF0aC50YW5oIHx8IGZ1bmN0aW9uICh4KSB7XG4gIHZhciBlID0gTWF0aC5leHAoMiAqIHgpO1xuICByZXR1cm4gKGUgLSAxKSAvIChlICsgMSk7XG59O1xuXG5leHBvcnRzLnRhbmggPSB0YW5oOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jbG9uZSA9IGNsb25lO1xuZXhwb3J0cy5tYXBPYmplY3QgPSBtYXBPYmplY3Q7XG5leHBvcnRzLmV4dGVuZCA9IGV4dGVuZDtcbmV4cG9ydHMuZGVlcEV4dGVuZCA9IGRlZXBFeHRlbmQ7XG5leHBvcnRzLmRlZXBTdHJpY3RFcXVhbCA9IGRlZXBTdHJpY3RFcXVhbDtcbmV4cG9ydHMuZGVlcEZsYXR0ZW4gPSBkZWVwRmxhdHRlbjtcbmV4cG9ydHMuY2FuRGVmaW5lUHJvcGVydHkgPSBjYW5EZWZpbmVQcm9wZXJ0eTtcbmV4cG9ydHMubGF6eSA9IGxhenk7XG5leHBvcnRzLnRyYXZlcnNlID0gdHJhdmVyc2U7XG5leHBvcnRzLmhhc093blByb3BlcnR5ID0gaGFzT3duUHJvcGVydHk7XG5leHBvcnRzLmlzTGVnYWN5RmFjdG9yeSA9IGlzTGVnYWN5RmFjdG9yeTtcbmV4cG9ydHMuZ2V0ID0gZ2V0O1xuZXhwb3J0cy5zZXQgPSBzZXQ7XG5leHBvcnRzLnBpY2sgPSBwaWNrO1xuZXhwb3J0cy5waWNrU2hhbGxvdyA9IHBpY2tTaGFsbG93O1xuZXhwb3J0cy52YWx1ZXMgPSB2YWx1ZXM7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi9pc1wiKTtcblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG4vKipcbiAqIENsb25lIGFuIG9iamVjdFxuICpcbiAqICAgICBjbG9uZSh4KVxuICpcbiAqIENhbiBjbG9uZSBhbnkgcHJpbWl0aXZlIHR5cGUsIGFycmF5LCBhbmQgb2JqZWN0LlxuICogSWYgeCBoYXMgYSBmdW5jdGlvbiBjbG9uZSwgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGludm9rZWQgdG8gY2xvbmUgdGhlIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0geyp9IHhcbiAqIEByZXR1cm4geyp9IGNsb25lXG4gKi9cbmZ1bmN0aW9uIGNsb25lKHgpIHtcbiAgdmFyIHR5cGUgPSBfdHlwZW9mKHgpOyAvLyBpbW11dGFibGUgcHJpbWl0aXZlIHR5cGVzXG5cblxuICBpZiAodHlwZSA9PT0gJ251bWJlcicgfHwgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZSA9PT0gJ2Jvb2xlYW4nIHx8IHggPT09IG51bGwgfHwgeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHg7XG4gIH0gLy8gdXNlIGNsb25lIGZ1bmN0aW9uIG9mIHRoZSBvYmplY3Qgd2hlbiBhdmFpbGFibGVcblxuXG4gIGlmICh0eXBlb2YgeC5jbG9uZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB4LmNsb25lKCk7XG4gIH0gLy8gYXJyYXlcblxuXG4gIGlmIChBcnJheS5pc0FycmF5KHgpKSB7XG4gICAgcmV0dXJuIHgubWFwKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGNsb25lKHZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmICh4IGluc3RhbmNlb2YgRGF0ZSkgcmV0dXJuIG5ldyBEYXRlKHgudmFsdWVPZigpKTtcbiAgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKHgpKSByZXR1cm4geDsgLy8gYmlnbnVtYmVycyBhcmUgaW1tdXRhYmxlXG5cbiAgaWYgKHggaW5zdGFuY2VvZiBSZWdFeHApIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjbG9uZSAnICsgeCk7IC8vIFRPRE86IGNsb25lIGEgUmVnRXhwXG4gIC8vIG9iamVjdFxuXG4gIHJldHVybiBtYXBPYmplY3QoeCwgY2xvbmUpO1xufVxuLyoqXG4gKiBBcHBseSBtYXAgdG8gYWxsIHByb3BlcnRpZXMgb2YgYW4gb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7T2JqZWN0fSBSZXR1cm5zIGEgY29weSBvZiB0aGUgb2JqZWN0IHdpdGggbWFwcGVkIHByb3BlcnRpZXNcbiAqL1xuXG5cbmZ1bmN0aW9uIG1hcE9iamVjdChvYmplY3QsIGNhbGxiYWNrKSB7XG4gIHZhciBjbG9uZSA9IHt9O1xuXG4gIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkob2JqZWN0LCBrZXkpKSB7XG4gICAgICBjbG9uZVtrZXldID0gY2FsbGJhY2sob2JqZWN0W2tleV0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjbG9uZTtcbn1cbi8qKlxuICogRXh0ZW5kIG9iamVjdCBhIHdpdGggdGhlIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGJcbiAqIEBwYXJhbSB7T2JqZWN0fSBhXG4gKiBAcGFyYW0ge09iamVjdH0gYlxuICogQHJldHVybiB7T2JqZWN0fSBhXG4gKi9cblxuXG5mdW5jdGlvbiBleHRlbmQoYSwgYikge1xuICBmb3IgKHZhciBwcm9wIGluIGIpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkoYiwgcHJvcCkpIHtcbiAgICAgIGFbcHJvcF0gPSBiW3Byb3BdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhO1xufVxuLyoqXG4gKiBEZWVwIGV4dGVuZCBhbiBvYmplY3QgYSB3aXRoIHRoZSBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiXG4gKiBAcGFyYW0ge09iamVjdH0gYVxuICogQHBhcmFtIHtPYmplY3R9IGJcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKi9cblxuXG5mdW5jdGlvbiBkZWVwRXh0ZW5kKGEsIGIpIHtcbiAgLy8gVE9ETzogYWRkIHN1cHBvcnQgZm9yIEFycmF5cyB0byBkZWVwRXh0ZW5kXG4gIGlmIChBcnJheS5pc0FycmF5KGIpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IGRlZXBFeHRlbmQnKTtcbiAgfVxuXG4gIGZvciAodmFyIHByb3AgaW4gYikge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eShiLCBwcm9wKSkge1xuICAgICAgaWYgKGJbcHJvcF0gJiYgYltwcm9wXS5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XG4gICAgICAgIGlmIChhW3Byb3BdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhW3Byb3BdID0ge307XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYVtwcm9wXSAmJiBhW3Byb3BdLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcbiAgICAgICAgICBkZWVwRXh0ZW5kKGFbcHJvcF0sIGJbcHJvcF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFbcHJvcF0gPSBiW3Byb3BdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYltwcm9wXSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IGRlZXBFeHRlbmQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFbcHJvcF0gPSBiW3Byb3BdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhO1xufVxuLyoqXG4gKiBEZWVwIHRlc3QgZXF1YWxpdHkgb2YgYWxsIGZpZWxkcyBpbiB0d28gcGFpcnMgb2YgYXJyYXlzIG9yIG9iamVjdHMuXG4gKiBDb21wYXJlcyB2YWx1ZXMgYW5kIGZ1bmN0aW9ucyBzdHJpY3RseSAoaWUuIDIgaXMgbm90IHRoZSBzYW1lIGFzICcyJykuXG4gKiBAcGFyYW0ge0FycmF5IHwgT2JqZWN0fSBhXG4gKiBAcGFyYW0ge0FycmF5IHwgT2JqZWN0fSBiXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuXG5cbmZ1bmN0aW9uIGRlZXBTdHJpY3RFcXVhbChhLCBiKSB7XG4gIHZhciBwcm9wLCBpLCBsZW47XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoYSkpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9yIChpID0gMCwgbGVuID0gYS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgaWYgKCFkZWVwU3RyaWN0RXF1YWwoYVtpXSwgYltpXSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGEgPT09IGI7XG4gIH0gZWxzZSBpZiAoYSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGIpIHx8ICEoYiBpbnN0YW5jZW9mIE9iamVjdCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKHByb3AgaW4gYSkge1xuICAgICAgLy8gbm9pbnNwZWN0aW9uIEpTVW5maWx0ZXJlZEZvckluTG9vcFxuICAgICAgaWYgKCEocHJvcCBpbiBiKSB8fCAhZGVlcFN0cmljdEVxdWFsKGFbcHJvcF0sIGJbcHJvcF0pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHByb3AgaW4gYikge1xuICAgICAgLy8gbm9pbnNwZWN0aW9uIEpTVW5maWx0ZXJlZEZvckluTG9vcFxuICAgICAgaWYgKCEocHJvcCBpbiBhKSB8fCAhZGVlcFN0cmljdEVxdWFsKGFbcHJvcF0sIGJbcHJvcF0pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYSA9PT0gYjtcbiAgfVxufVxuLyoqXG4gKiBSZWN1cnNpdmVseSBmbGF0dGVuIGEgbmVzdGVkIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBuZXN0ZWRPYmplY3RcbiAqIEByZXR1cm4ge09iamVjdH0gUmV0dXJucyB0aGUgZmxhdHRlbmVkIG9iamVjdFxuICovXG5cblxuZnVuY3Rpb24gZGVlcEZsYXR0ZW4obmVzdGVkT2JqZWN0KSB7XG4gIHZhciBmbGF0dGVuZWRPYmplY3QgPSB7fTtcblxuICBfZGVlcEZsYXR0ZW4obmVzdGVkT2JqZWN0LCBmbGF0dGVuZWRPYmplY3QpO1xuXG4gIHJldHVybiBmbGF0dGVuZWRPYmplY3Q7XG59IC8vIGhlbHBlciBmdW5jdGlvbiB1c2VkIGJ5IGRlZXBGbGF0dGVuXG5cblxuZnVuY3Rpb24gX2RlZXBGbGF0dGVuKG5lc3RlZE9iamVjdCwgZmxhdHRlbmVkT2JqZWN0KSB7XG4gIGZvciAodmFyIHByb3AgaW4gbmVzdGVkT2JqZWN0KSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5KG5lc3RlZE9iamVjdCwgcHJvcCkpIHtcbiAgICAgIHZhciB2YWx1ZSA9IG5lc3RlZE9iamVjdFtwcm9wXTtcblxuICAgICAgaWYgKF90eXBlb2YodmFsdWUpID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBfZGVlcEZsYXR0ZW4odmFsdWUsIGZsYXR0ZW5lZE9iamVjdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmbGF0dGVuZWRPYmplY3RbcHJvcF0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbi8qKlxuICogVGVzdCB3aGV0aGVyIHRoZSBjdXJyZW50IEphdmFTY3JpcHQgZW5naW5lIHN1cHBvcnRzIE9iamVjdC5kZWZpbmVQcm9wZXJ0eVxuICogQHJldHVybnMge2Jvb2xlYW59IHJldHVybnMgdHJ1ZSBpZiBzdXBwb3J0ZWRcbiAqL1xuXG5cbmZ1bmN0aW9uIGNhbkRlZmluZVByb3BlcnR5KCkge1xuICAvLyB0ZXN0IG5lZWRlZCBmb3IgYnJva2VuIElFOCBpbXBsZW1lbnRhdGlvblxuICB0cnkge1xuICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ3gnLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge31cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7fVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbi8qKlxuICogQXR0YWNoIGEgbGF6eSBsb2FkaW5nIHByb3BlcnR5IHRvIGEgY29uc3RhbnQuXG4gKiBUaGUgZ2l2ZW4gZnVuY3Rpb24gYGZuYCBpcyBjYWxsZWQgb25jZSB3aGVuIHRoZSBwcm9wZXJ0eSBpcyBmaXJzdCByZXF1ZXN0ZWQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCAgICAgICAgIE9iamVjdCB3aGVyZSB0byBhZGQgdGhlIHByb3BlcnR5XG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcCAgICAgICAgICAgUHJvcGVydHkgbmFtZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gdmFsdWVSZXNvbHZlciBGdW5jdGlvbiByZXR1cm5pbmcgdGhlIHByb3BlcnR5IHZhbHVlLiBDYWxsZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRob3V0IGFyZ3VtZW50cy5cbiAqL1xuXG5cbmZ1bmN0aW9uIGxhenkob2JqZWN0LCBwcm9wLCB2YWx1ZVJlc29sdmVyKSB7XG4gIHZhciBfdW5pbml0aWFsaXplZCA9IHRydWU7XG5cbiAgdmFyIF92YWx1ZTtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICBpZiAoX3VuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgX3ZhbHVlID0gdmFsdWVSZXNvbHZlcigpO1xuICAgICAgICBfdW5pbml0aWFsaXplZCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3ZhbHVlO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiBzZXQodmFsdWUpIHtcbiAgICAgIF92YWx1ZSA9IHZhbHVlO1xuICAgICAgX3VuaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICB9LFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlXG4gIH0pO1xufVxuLyoqXG4gKiBUcmF2ZXJzZSBhIHBhdGggaW50byBhbiBvYmplY3QuXG4gKiBXaGVuIGEgbmFtZXNwYWNlIGlzIG1pc3NpbmcsIGl0IHdpbGwgYmUgY3JlYXRlZFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmcgfCBzdHJpbmdbXX0gcGF0aCAgIEEgZG90IHNlcGFyYXRlZCBzdHJpbmcgbGlrZSAnbmFtZS5zcGFjZSdcbiAqIEByZXR1cm4ge09iamVjdH0gUmV0dXJucyB0aGUgb2JqZWN0IGF0IHRoZSBlbmQgb2YgdGhlIHBhdGhcbiAqL1xuXG5cbmZ1bmN0aW9uIHRyYXZlcnNlKG9iamVjdCwgcGF0aCkge1xuICBpZiAocGF0aCAmJiB0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdHJhdmVyc2Uob2JqZWN0LCBwYXRoLnNwbGl0KCcuJykpO1xuICB9XG5cbiAgdmFyIG9iaiA9IG9iamVjdDtcblxuICBpZiAocGF0aCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IHBhdGhbaV07XG5cbiAgICAgIGlmICghKGtleSBpbiBvYmopKSB7XG4gICAgICAgIG9ialtrZXldID0ge307XG4gICAgICB9XG5cbiAgICAgIG9iaiA9IG9ialtrZXldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmo7XG59XG4vKipcbiAqIEEgc2FmZSBoYXNPd25Qcm9wZXJ0eVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5XG4gKi9cblxuXG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5KSB7XG4gIHJldHVybiBvYmplY3QgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7XG59XG4vKipcbiAqIFRlc3Qgd2hldGhlciBhbiBvYmplY3QgaXMgYSBmYWN0b3J5LiBhIGZhY3RvcnkgaGFzIGZpZWxkczpcbiAqXG4gKiAtIGZhY3Rvcnk6IGZ1bmN0aW9uICh0eXBlOiBPYmplY3QsIGNvbmZpZzogT2JqZWN0LCBsb2FkOiBmdW5jdGlvbiwgdHlwZWQ6IGZ1bmN0aW9uIFssIG1hdGg6IE9iamVjdF0pICAgKHJlcXVpcmVkKVxuICogLSBuYW1lOiBzdHJpbmcgKG9wdGlvbmFsKVxuICogLSBwYXRoOiBzdHJpbmcgICAgQSBkb3Qgc2VwYXJhdGVkIHBhdGggKG9wdGlvbmFsKVxuICogLSBtYXRoOiBib29sZWFuICAgSWYgdHJ1ZSAoZmFsc2UgYnkgZGVmYXVsdCksIHRoZSBtYXRoIG5hbWVzcGFjZSBpcyBwYXNzZWRcbiAqICAgICAgICAgICAgICAgICAgIGFzIGZpZnRoIGFyZ3VtZW50IG9mIHRoZSBmYWN0b3J5IGZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHsqfSBvYmplY3RcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5cblxuZnVuY3Rpb24gaXNMZWdhY3lGYWN0b3J5KG9iamVjdCkge1xuICByZXR1cm4gb2JqZWN0ICYmIHR5cGVvZiBvYmplY3QuZmFjdG9yeSA9PT0gJ2Z1bmN0aW9uJztcbn1cbi8qKlxuICogR2V0IGEgbmVzdGVkIHByb3BlcnR5IGZyb20gYW4gb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZyB8IHN0cmluZ1tdfSBwYXRoXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5cblxuZnVuY3Rpb24gZ2V0KG9iamVjdCwgcGF0aCkge1xuICBpZiAodHlwZW9mIHBhdGggPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKGlzUGF0aChwYXRoKSkge1xuICAgICAgcmV0dXJuIGdldChvYmplY3QsIHBhdGguc3BsaXQoJy4nKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvYmplY3RbcGF0aF07XG4gICAgfVxuICB9XG5cbiAgdmFyIGNoaWxkID0gb2JqZWN0O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBwYXRoW2ldO1xuICAgIGNoaWxkID0gY2hpbGQgPyBjaGlsZFtrZXldIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIGNoaWxkO1xufVxuLyoqXG4gKiBTZXQgYSBuZXN0ZWQgcHJvcGVydHkgaW4gYW4gb2JqZWN0XG4gKiBNdXRhdGVzIHRoZSBvYmplY3QgaXRzZWxmXG4gKiBJZiB0aGUgcGF0aCBkb2Vzbid0IGV4aXN0LCBpdCB3aWxsIGJlIGNyZWF0ZWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nIHwgc3RyaW5nW119IHBhdGhcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKi9cblxuXG5mdW5jdGlvbiBzZXQob2JqZWN0LCBwYXRoLCB2YWx1ZSkge1xuICBpZiAodHlwZW9mIHBhdGggPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKGlzUGF0aChwYXRoKSkge1xuICAgICAgcmV0dXJuIHNldChvYmplY3QsIHBhdGguc3BsaXQoJy4nKSwgdmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmplY3RbcGF0aF0gPSB2YWx1ZTtcbiAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNoaWxkID0gb2JqZWN0O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0aC5sZW5ndGggLSAxOyBpKyspIHtcbiAgICB2YXIga2V5ID0gcGF0aFtpXTtcblxuICAgIGlmIChjaGlsZFtrZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNoaWxkW2tleV0gPSB7fTtcbiAgICB9XG5cbiAgICBjaGlsZCA9IGNoaWxkW2tleV07XG4gIH1cblxuICBpZiAocGF0aC5sZW5ndGggPiAwKSB7XG4gICAgdmFyIGxhc3RLZXkgPSBwYXRoW3BhdGgubGVuZ3RoIC0gMV07XG4gICAgY2hpbGRbbGFzdEtleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmplY3Q7XG59XG4vKipcbiAqIENyZWF0ZSBhbiBvYmplY3QgY29tcG9zZWQgb2YgdGhlIHBpY2tlZCBvYmplY3QgcHJvcGVydGllc1xuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmdbXX0gcHJvcGVydGllc1xuICogQHBhcmFtIHtmdW5jdGlvbn0gW3RyYW5zZm9ybV0gT3B0aW9uYWwgdmFsdWUgdG8gdHJhbnNmb3JtIGEgdmFsdWUgd2hlbiBwaWNraW5nIGl0XG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cblxuXG5mdW5jdGlvbiBwaWNrKG9iamVjdCwgcHJvcGVydGllcywgdHJhbnNmb3JtKSB7XG4gIHZhciBjb3B5ID0ge307XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IHByb3BlcnRpZXNbaV07XG4gICAgdmFyIHZhbHVlID0gZ2V0KG9iamVjdCwga2V5KTtcblxuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBzZXQoY29weSwga2V5LCB0cmFuc2Zvcm0gPyB0cmFuc2Zvcm0odmFsdWUsIGtleSkgOiB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvcHk7XG59XG4vKipcbiAqIFNoYWxsb3cgdmVyc2lvbiBvZiBwaWNrLCBjcmVhdGluZyBhbiBvYmplY3QgY29tcG9zZWQgb2YgdGhlIHBpY2tlZCBvYmplY3QgcHJvcGVydGllc1xuICogYnV0IG5vdCBmb3IgbmVzdGVkIHByb3BlcnRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nW119IHByb3BlcnRpZXNcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuXG5cbmZ1bmN0aW9uIHBpY2tTaGFsbG93KG9iamVjdCwgcHJvcGVydGllcykge1xuICB2YXIgY29weSA9IHt9O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBwcm9wZXJ0aWVzW2ldO1xuICAgIHZhciB2YWx1ZSA9IG9iamVjdFtrZXldO1xuXG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvcHlba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb3B5O1xufVxuXG5mdW5jdGlvbiB2YWx1ZXMob2JqZWN0KSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmplY3QpLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIG9iamVjdFtrZXldO1xuICB9KTtcbn0gLy8gaGVscGVyIGZ1bmN0aW9uIHRvIHRlc3Qgd2hldGhlciBhIHN0cmluZyBjb250YWlucyBhIHBhdGggbGlrZSAndXNlci5uYW1lJ1xuXG5cbmZ1bmN0aW9uIGlzUGF0aChzdHIpIHtcbiAgcmV0dXJuIHN0ci5pbmRleE9mKCcuJykgIT09IC0xO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG4vLyBUT0RPOiByZW1vdmUgdGhlc2UgcG9seWZpbGxzIGFzIHNvb24gYXMgd2UgaGF2ZSBhIGJ1aWxkIHByb2Nlc3MgdGhhdCB0cmFuc3BpbGVzIHRoZSBjb2RlIHRvIEVTNVxuLy8gUG9seWZpbGwgZm9yIElFIDExIChOdW1iZXIuaXNGaW5pdGUgaXMgdXNlZCBpbiBgY29tcGxleC5qc2ApXG4vLyBzb3VyY2U6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL051bWJlci9pc0Zpbml0ZVxuTnVtYmVyLmlzRmluaXRlID0gTnVtYmVyLmlzRmluaXRlIHx8IGZ1bmN0aW9uICh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZSh2YWx1ZSk7XG59OyAvLyBQb2x5ZmlsbCBmb3IgSUUgMTFcbi8vIHNvdXJjZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvTnVtYmVyL2lzTmFOXG5cblxuTnVtYmVyLmlzTmFOID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uICh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IHZhbHVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNlbGYtY29tcGFyZVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucHJvZHVjdCA9IHByb2R1Y3Q7XG5cbi8qKiBAcGFyYW0ge251bWJlcn0gaVxuICogIEBwYXJhbSB7bnVtYmVyfSBuXG4gKiAgQHJldHVybnMge251bWJlcn0gcHJvZHVjdCBvZiBpIHRvIG5cbiAqL1xuZnVuY3Rpb24gcHJvZHVjdChpLCBuKSB7XG4gIGlmIChuIDwgaSkge1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgaWYgKG4gPT09IGkpIHtcbiAgICByZXR1cm4gbjtcbiAgfVxuXG4gIHZhciBoYWxmID0gbiArIGkgPj4gMTsgLy8gZGl2aWRlIChuICsgaSkgYnkgMiBhbmQgdHJ1bmNhdGUgdG8gaW50ZWdlclxuXG4gIHJldHVybiBwcm9kdWN0KGksIGhhbGYpICogcHJvZHVjdChoYWxmICsgMSwgbik7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmVuZHNXaXRoID0gZW5kc1dpdGg7XG5leHBvcnRzLmZvcm1hdCA9IGZvcm1hdDtcbmV4cG9ydHMuc3RyaW5naWZ5ID0gc3RyaW5naWZ5O1xuZXhwb3J0cy5lc2NhcGUgPSBlc2NhcGU7XG5leHBvcnRzLmNvbXBhcmVUZXh0ID0gY29tcGFyZVRleHQ7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi9pc1wiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi9udW1iZXJcIik7XG5cbnZhciBfZm9ybWF0dGVyID0gcmVxdWlyZShcIi4vYmlnbnVtYmVyL2Zvcm1hdHRlclwiKTtcblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG4vKipcbiAqIENoZWNrIGlmIGEgdGV4dCBlbmRzIHdpdGggYSBjZXJ0YWluIHN0cmluZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gKiBAcGFyYW0ge3N0cmluZ30gc2VhcmNoXG4gKi9cbmZ1bmN0aW9uIGVuZHNXaXRoKHRleHQsIHNlYXJjaCkge1xuICB2YXIgc3RhcnQgPSB0ZXh0Lmxlbmd0aCAtIHNlYXJjaC5sZW5ndGg7XG4gIHZhciBlbmQgPSB0ZXh0Lmxlbmd0aDtcbiAgcmV0dXJuIHRleHQuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpID09PSBzZWFyY2g7XG59XG4vKipcbiAqIEZvcm1hdCBhIHZhbHVlIG9mIGFueSB0eXBlIGludG8gYSBzdHJpbmcuXG4gKlxuICogVXNhZ2U6XG4gKiAgICAgbWF0aC5mb3JtYXQodmFsdWUpXG4gKiAgICAgbWF0aC5mb3JtYXQodmFsdWUsIHByZWNpc2lvbilcbiAqXG4gKiBXaGVuIHZhbHVlIGlzIGEgZnVuY3Rpb246XG4gKlxuICogLSBXaGVuIHRoZSBmdW5jdGlvbiBoYXMgYSBwcm9wZXJ0eSBgc3ludGF4YCwgaXQgcmV0dXJucyB0aGlzXG4gKiAgIHN5bnRheCBkZXNjcmlwdGlvbi5cbiAqIC0gSW4gb3RoZXIgY2FzZXMsIGEgc3RyaW5nIGAnZnVuY3Rpb24nYCBpcyByZXR1cm5lZC5cbiAqXG4gKiBXaGVuIGB2YWx1ZWAgaXMgYW4gT2JqZWN0OlxuICpcbiAqIC0gV2hlbiB0aGUgb2JqZWN0IGNvbnRhaW5zIGEgcHJvcGVydHkgYGZvcm1hdGAgYmVpbmcgYSBmdW5jdGlvbiwgdGhpc1xuICogICBmdW5jdGlvbiBpcyBpbnZva2VkIGFzIGB2YWx1ZS5mb3JtYXQob3B0aW9ucylgIGFuZCB0aGUgcmVzdWx0IGlzIHJldHVybmVkLlxuICogLSBXaGVuIHRoZSBvYmplY3QgaGFzIGl0cyBvd24gYHRvU3RyaW5nYCBtZXRob2QsIHRoaXMgbWV0aG9kIGlzIGludm9rZWRcbiAqICAgYW5kIHRoZSByZXN1bHQgaXMgcmV0dXJuZWQuXG4gKiAtIEluIG90aGVyIGNhc2VzIHRoZSBmdW5jdGlvbiB3aWxsIGxvb3Agb3ZlciBhbGwgb2JqZWN0IHByb3BlcnRpZXMgYW5kXG4gKiAgIHJldHVybiBKU09OIG9iamVjdCBub3RhdGlvbiBsaWtlICd7XCJhXCI6IDIsIFwiYlwiOiAzfScuXG4gKlxuICogRXhhbXBsZSB1c2FnZTpcbiAqICAgICBtYXRoLmZvcm1hdCgyLzcpICAgICAgICAgICAgICAgIC8vICcwLjI4NTcxNDI4NTcxNDI4NTcnXG4gKiAgICAgbWF0aC5mb3JtYXQobWF0aC5waSwgMykgICAgICAgICAvLyAnMy4xNCdcbiAqICAgICBtYXRoLmZvcm1hdChuZXcgQ29tcGxleCgyLCAzKSkgIC8vICcyICsgM2knXG4gKiAgICAgbWF0aC5mb3JtYXQoJ2hlbGxvJykgICAgICAgICAgICAvLyAnXCJoZWxsb1wiJ1xuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgICAgICAgICAgICAgVmFsdWUgdG8gYmUgc3RyaW5naWZpZWRcbiAqIEBwYXJhbSB7T2JqZWN0IHwgbnVtYmVyIHwgRnVuY3Rpb259IFtvcHRpb25zXSAgRm9ybWF0dGluZyBvcHRpb25zLiBTZWVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGliL3V0aWxzL251bWJlcjpmb3JtYXQgZm9yIGFcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gb2YgdGhlIGF2YWlsYWJsZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLlxuICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAqL1xuXG5cbmZ1bmN0aW9uIGZvcm1hdCh2YWx1ZSwgb3B0aW9ucykge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiAoMCwgX251bWJlci5mb3JtYXQpKHZhbHVlLCBvcHRpb25zKTtcbiAgfVxuXG4gIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gKDAsIF9mb3JtYXR0ZXIuZm9ybWF0KSh2YWx1ZSwgb3B0aW9ucyk7XG4gIH0gLy8gbm90ZTogd2UgdXNlIHVuc2FmZSBkdWNrLXR5cGluZyBoZXJlIHRvIGNoZWNrIGZvciBGcmFjdGlvbnMsIHRoaXMgaXNcbiAgLy8gb2sgaGVyZSBzaW5jZSB3ZSdyZSBvbmx5IGludm9raW5nIHRvU3RyaW5nIG9yIGNvbmNhdGVuYXRpbmcgaXRzIHZhbHVlc1xuXG5cbiAgaWYgKGxvb2tzTGlrZUZyYWN0aW9uKHZhbHVlKSkge1xuICAgIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLmZyYWN0aW9uICE9PSAnZGVjaW1hbCcpIHtcbiAgICAgIC8vIG91dHB1dCBhcyByYXRpbywgbGlrZSAnMS8zJ1xuICAgICAgcmV0dXJuIHZhbHVlLnMgKiB2YWx1ZS5uICsgJy8nICsgdmFsdWUuZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gb3V0cHV0IGFzIGRlY2ltYWwsIGxpa2UgJzAuKDMpJ1xuICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZvcm1hdEFycmF5KHZhbHVlLCBvcHRpb25zKTtcbiAgfVxuXG4gIGlmICgoMCwgX2lzLmlzU3RyaW5nKSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gJ1wiJyArIHZhbHVlICsgJ1wiJztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdmFsdWUuc3ludGF4ID8gU3RyaW5nKHZhbHVlLnN5bnRheCkgOiAnZnVuY3Rpb24nO1xuICB9XG5cbiAgaWYgKHZhbHVlICYmIF90eXBlb2YodmFsdWUpID09PSAnb2JqZWN0Jykge1xuICAgIGlmICh0eXBlb2YgdmFsdWUuZm9ybWF0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gdmFsdWUuZm9ybWF0KG9wdGlvbnMpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgJiYgdmFsdWUudG9TdHJpbmcob3B0aW9ucykgIT09IHt9LnRvU3RyaW5nKCkpIHtcbiAgICAgIC8vIHRoaXMgb2JqZWN0IGhhcyBhIG5vbi1uYXRpdmUgdG9TdHJpbmcgbWV0aG9kLCB1c2UgdGhhdCBvbmVcbiAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZyhvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGVudHJpZXMgPSBPYmplY3Qua2V5cyh2YWx1ZSkubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgcmV0dXJuICdcIicgKyBrZXkgKyAnXCI6ICcgKyBmb3JtYXQodmFsdWVba2V5XSwgb3B0aW9ucyk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiAneycgKyBlbnRyaWVzLmpvaW4oJywgJykgKyAnfSc7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG59XG4vKipcbiAqIFN0cmluZ2lmeSBhIHZhbHVlIGludG8gYSBzdHJpbmcgZW5jbG9zZWQgaW4gZG91YmxlIHF1b3Rlcy5cbiAqIFVuZXNjYXBlZCBkb3VibGUgcXVvdGVzIGFuZCBiYWNrc2xhc2hlcyBpbnNpZGUgdGhlIHZhbHVlIGFyZSBlc2NhcGVkLlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5cblxuZnVuY3Rpb24gc3RyaW5naWZ5KHZhbHVlKSB7XG4gIHZhciB0ZXh0ID0gU3RyaW5nKHZhbHVlKTtcbiAgdmFyIGVzY2FwZWQgPSAnJztcbiAgdmFyIGkgPSAwO1xuXG4gIHdoaWxlIChpIDwgdGV4dC5sZW5ndGgpIHtcbiAgICB2YXIgYyA9IHRleHQuY2hhckF0KGkpO1xuXG4gICAgaWYgKGMgPT09ICdcXFxcJykge1xuICAgICAgZXNjYXBlZCArPSBjO1xuICAgICAgaSsrO1xuICAgICAgYyA9IHRleHQuY2hhckF0KGkpO1xuXG4gICAgICBpZiAoYyA9PT0gJycgfHwgJ1wiXFxcXC9iZm5ydHUnLmluZGV4T2YoYykgPT09IC0xKSB7XG4gICAgICAgIGVzY2FwZWQgKz0gJ1xcXFwnOyAvLyBubyB2YWxpZCBlc2NhcGUgY2hhcmFjdGVyIC0+IGVzY2FwZSBpdFxuICAgICAgfVxuXG4gICAgICBlc2NhcGVkICs9IGM7XG4gICAgfSBlbHNlIGlmIChjID09PSAnXCInKSB7XG4gICAgICBlc2NhcGVkICs9ICdcXFxcXCInO1xuICAgIH0gZWxzZSB7XG4gICAgICBlc2NhcGVkICs9IGM7XG4gICAgfVxuXG4gICAgaSsrO1xuICB9XG5cbiAgcmV0dXJuICdcIicgKyBlc2NhcGVkICsgJ1wiJztcbn1cbi8qKlxuICogRXNjYXBlIHNwZWNpYWwgSFRNTCBjaGFyYWN0ZXJzXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cblxuXG5mdW5jdGlvbiBlc2NhcGUodmFsdWUpIHtcbiAgdmFyIHRleHQgPSBTdHJpbmcodmFsdWUpO1xuICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC8mL2csICcmYW1wOycpLnJlcGxhY2UoL1wiL2csICcmcXVvdDsnKS5yZXBsYWNlKC8nL2csICcmIzM5OycpLnJlcGxhY2UoLzwvZywgJyZsdDsnKS5yZXBsYWNlKC8+L2csICcmZ3Q7Jyk7XG4gIHJldHVybiB0ZXh0O1xufVxuLyoqXG4gKiBSZWN1cnNpdmVseSBmb3JtYXQgYW4gbi1kaW1lbnNpb25hbCBtYXRyaXhcbiAqIEV4YW1wbGUgb3V0cHV0OiBcIltbMSwgMl0sIFszLCA0XV1cIlxuICogQHBhcmFtIHtBcnJheX0gYXJyYXlcbiAqIEBwYXJhbSB7T2JqZWN0IHwgbnVtYmVyIHwgRnVuY3Rpb259IFtvcHRpb25zXSAgRm9ybWF0dGluZyBvcHRpb25zLiBTZWVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGliL3V0aWxzL251bWJlcjpmb3JtYXQgZm9yIGFcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gb2YgdGhlIGF2YWlsYWJsZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLlxuICogQHJldHVybnMge3N0cmluZ30gc3RyXG4gKi9cblxuXG5mdW5jdGlvbiBmb3JtYXRBcnJheShhcnJheSwgb3B0aW9ucykge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnJheSkpIHtcbiAgICB2YXIgc3RyID0gJ1snO1xuICAgIHZhciBsZW4gPSBhcnJheS5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBpZiAoaSAhPT0gMCkge1xuICAgICAgICBzdHIgKz0gJywgJztcbiAgICAgIH1cblxuICAgICAgc3RyICs9IGZvcm1hdEFycmF5KGFycmF5W2ldLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBzdHIgKz0gJ10nO1xuICAgIHJldHVybiBzdHI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZvcm1hdChhcnJheSwgb3B0aW9ucyk7XG4gIH1cbn1cbi8qKlxuICogQ2hlY2sgd2hldGhlciBhIHZhbHVlIGxvb2tzIGxpa2UgYSBGcmFjdGlvbiAodW5zYWZlIGR1Y2stdHlwZSBjaGVjaylcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cblxuXG5mdW5jdGlvbiBsb29rc0xpa2VGcmFjdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgJiYgX3R5cGVvZih2YWx1ZSkgPT09ICdvYmplY3QnICYmIHR5cGVvZiB2YWx1ZS5zID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgdmFsdWUubiA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHZhbHVlLmQgPT09ICdudW1iZXInIHx8IGZhbHNlO1xufVxuLyoqXG4gKiBDb21wYXJlIHR3byBzdHJpbmdzXG4gKiBAcGFyYW0ge3N0cmluZ30geFxuICogQHBhcmFtIHtzdHJpbmd9IHlcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cblxuXG5mdW5jdGlvbiBjb21wYXJlVGV4dCh4LCB5KSB7XG4gIC8vIHdlIGRvbid0IHdhbnQgdG8gY29udmVydCBudW1iZXJzIHRvIHN0cmluZywgb25seSBhY2NlcHQgc3RyaW5nIGlucHV0XG4gIGlmICghKDAsIF9pcy5pc1N0cmluZykoeCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmV4cGVjdGVkIHR5cGUgb2YgYXJndW1lbnQgaW4gZnVuY3Rpb24gY29tcGFyZVRleHQgJyArICcoZXhwZWN0ZWQ6IHN0cmluZyBvciBBcnJheSBvciBNYXRyaXgsIGFjdHVhbDogJyArICgwLCBfaXMudHlwZU9mKSh4KSArICcsIGluZGV4OiAwKScpO1xuICB9XG5cbiAgaWYgKCEoMCwgX2lzLmlzU3RyaW5nKSh5KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuZXhwZWN0ZWQgdHlwZSBvZiBhcmd1bWVudCBpbiBmdW5jdGlvbiBjb21wYXJlVGV4dCAnICsgJyhleHBlY3RlZDogc3RyaW5nIG9yIEFycmF5IG9yIE1hdHJpeCwgYWN0dWFsOiAnICsgKDAsIF9pcy50eXBlT2YpKHkpICsgJywgaW5kZXg6IDEpJyk7XG4gIH1cblxuICByZXR1cm4geCA9PT0geSA/IDAgOiB4ID4geSA/IDEgOiAtMTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudmVyc2lvbiA9IHZvaWQgMDtcbnZhciB2ZXJzaW9uID0gJzYuNi41JzsgLy8gTm90ZTogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdoZW4gYnVpbGRpbmcgbWF0aC5qcy5cbi8vIENoYW5nZXMgbWFkZSBpbiB0aGlzIGZpbGUgd2lsbCBiZSBvdmVyd3JpdHRlbi5cblxuZXhwb3J0cy52ZXJzaW9uID0gdmVyc2lvbjsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2xpYi9lbnRyeS9tYWluQW55JylcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciB3aWR0aCA9IDI1NjsvLyBlYWNoIFJDNCBvdXRwdXQgaXMgMCA8PSB4IDwgMjU2XHJcbnZhciBjaHVua3MgPSA2Oy8vIGF0IGxlYXN0IHNpeCBSQzQgb3V0cHV0cyBmb3IgZWFjaCBkb3VibGVcclxudmFyIGRpZ2l0cyA9IDUyOy8vIHRoZXJlIGFyZSA1MiBzaWduaWZpY2FudCBkaWdpdHMgaW4gYSBkb3VibGVcclxudmFyIHBvb2wgPSBbXTsvLyBwb29sOiBlbnRyb3B5IHBvb2wgc3RhcnRzIGVtcHR5XHJcbnZhciBHTE9CQUwgPSB0eXBlb2YgZ2xvYmFsID09PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IGdsb2JhbDtcclxuXHJcbi8vXHJcbi8vIFRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGFyZSByZWxhdGVkIHRvIElFRUUgNzU0IGxpbWl0cy5cclxuLy9cclxudmFyIHN0YXJ0ZGVub20gPSBNYXRoLnBvdyh3aWR0aCwgY2h1bmtzKSxcclxuICAgIHNpZ25pZmljYW5jZSA9IE1hdGgucG93KDIsIGRpZ2l0cyksXHJcbiAgICBvdmVyZmxvdyA9IHNpZ25pZmljYW5jZSAqIDIsXHJcbiAgICBtYXNrID0gd2lkdGggLSAxO1xyXG5cclxuXHJcbnZhciBvbGRSYW5kb20gPSBNYXRoLnJhbmRvbTtcclxuXHJcbi8vXHJcbi8vIHNlZWRyYW5kb20oKVxyXG4vLyBUaGlzIGlzIHRoZSBzZWVkcmFuZG9tIGZ1bmN0aW9uIGRlc2NyaWJlZCBhYm92ZS5cclxuLy9cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihzZWVkLCBvcHRpb25zKSB7XHJcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5nbG9iYWwgPT09IHRydWUpIHtcclxuICAgIG9wdGlvbnMuZ2xvYmFsID0gZmFsc2U7XHJcbiAgICBNYXRoLnJhbmRvbSA9IG1vZHVsZS5leHBvcnRzKHNlZWQsIG9wdGlvbnMpO1xyXG4gICAgb3B0aW9ucy5nbG9iYWwgPSB0cnVlO1xyXG4gICAgcmV0dXJuIE1hdGgucmFuZG9tO1xyXG4gIH1cclxuICB2YXIgdXNlX2VudHJvcHkgPSAob3B0aW9ucyAmJiBvcHRpb25zLmVudHJvcHkpIHx8IGZhbHNlO1xyXG4gIHZhciBrZXkgPSBbXTtcclxuXHJcbiAgLy8gRmxhdHRlbiB0aGUgc2VlZCBzdHJpbmcgb3IgYnVpbGQgb25lIGZyb20gbG9jYWwgZW50cm9weSBpZiBuZWVkZWQuXHJcbiAgdmFyIHNob3J0c2VlZCA9IG1peGtleShmbGF0dGVuKFxyXG4gICAgdXNlX2VudHJvcHkgPyBbc2VlZCwgdG9zdHJpbmcocG9vbCldIDpcclxuICAgIDAgaW4gYXJndW1lbnRzID8gc2VlZCA6IGF1dG9zZWVkKCksIDMpLCBrZXkpO1xyXG5cclxuICAvLyBVc2UgdGhlIHNlZWQgdG8gaW5pdGlhbGl6ZSBhbiBBUkM0IGdlbmVyYXRvci5cclxuICB2YXIgYXJjNCA9IG5ldyBBUkM0KGtleSk7XHJcblxyXG4gIC8vIE1peCB0aGUgcmFuZG9tbmVzcyBpbnRvIGFjY3VtdWxhdGVkIGVudHJvcHkuXHJcbiAgbWl4a2V5KHRvc3RyaW5nKGFyYzQuUyksIHBvb2wpO1xyXG5cclxuICAvLyBPdmVycmlkZSBNYXRoLnJhbmRvbVxyXG5cclxuICAvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSByYW5kb20gZG91YmxlIGluIFswLCAxKSB0aGF0IGNvbnRhaW5zXHJcbiAgLy8gcmFuZG9tbmVzcyBpbiBldmVyeSBiaXQgb2YgdGhlIG1hbnRpc3NhIG9mIHRoZSBJRUVFIDc1NCB2YWx1ZS5cclxuXHJcbiAgcmV0dXJuIGZ1bmN0aW9uKCkgeyAgICAgICAgIC8vIENsb3N1cmUgdG8gcmV0dXJuIGEgcmFuZG9tIGRvdWJsZTpcclxuICAgIHZhciBuID0gYXJjNC5nKGNodW5rcyksICAgICAgICAgICAgIC8vIFN0YXJ0IHdpdGggYSBudW1lcmF0b3IgbiA8IDIgXiA0OFxyXG4gICAgICAgIGQgPSBzdGFydGRlbm9tLCAgICAgICAgICAgICAgICAgLy8gICBhbmQgZGVub21pbmF0b3IgZCA9IDIgXiA0OC5cclxuICAgICAgICB4ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgYW5kIG5vICdleHRyYSBsYXN0IGJ5dGUnLlxyXG4gICAgd2hpbGUgKG4gPCBzaWduaWZpY2FuY2UpIHsgICAgICAgICAgLy8gRmlsbCB1cCBhbGwgc2lnbmlmaWNhbnQgZGlnaXRzIGJ5XHJcbiAgICAgIG4gPSAobiArIHgpICogd2lkdGg7ICAgICAgICAgICAgICAvLyAgIHNoaWZ0aW5nIG51bWVyYXRvciBhbmRcclxuICAgICAgZCAqPSB3aWR0aDsgICAgICAgICAgICAgICAgICAgICAgIC8vICAgZGVub21pbmF0b3IgYW5kIGdlbmVyYXRpbmcgYVxyXG4gICAgICB4ID0gYXJjNC5nKDEpOyAgICAgICAgICAgICAgICAgICAgLy8gICBuZXcgbGVhc3Qtc2lnbmlmaWNhbnQtYnl0ZS5cclxuICAgIH1cclxuICAgIHdoaWxlIChuID49IG92ZXJmbG93KSB7ICAgICAgICAgICAgIC8vIFRvIGF2b2lkIHJvdW5kaW5nIHVwLCBiZWZvcmUgYWRkaW5nXHJcbiAgICAgIG4gLz0gMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIGxhc3QgYnl0ZSwgc2hpZnQgZXZlcnl0aGluZ1xyXG4gICAgICBkIC89IDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICByaWdodCB1c2luZyBpbnRlZ2VyIE1hdGggdW50aWxcclxuICAgICAgeCA+Pj49IDE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgd2UgaGF2ZSBleGFjdGx5IHRoZSBkZXNpcmVkIGJpdHMuXHJcbiAgICB9XHJcbiAgICByZXR1cm4gKG4gKyB4KSAvIGQ7ICAgICAgICAgICAgICAgICAvLyBGb3JtIHRoZSBudW1iZXIgd2l0aGluIFswLCAxKS5cclxuICB9O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMucmVzZXRHbG9iYWwgPSBmdW5jdGlvbiAoKSB7XHJcbiAgTWF0aC5yYW5kb20gPSBvbGRSYW5kb207XHJcbn07XHJcblxyXG4vL1xyXG4vLyBBUkM0XHJcbi8vXHJcbi8vIEFuIEFSQzQgaW1wbGVtZW50YXRpb24uICBUaGUgY29uc3RydWN0b3IgdGFrZXMgYSBrZXkgaW4gdGhlIGZvcm0gb2ZcclxuLy8gYW4gYXJyYXkgb2YgYXQgbW9zdCAod2lkdGgpIGludGVnZXJzIHRoYXQgc2hvdWxkIGJlIDAgPD0geCA8ICh3aWR0aCkuXHJcbi8vXHJcbi8vIFRoZSBnKGNvdW50KSBtZXRob2QgcmV0dXJucyBhIHBzZXVkb3JhbmRvbSBpbnRlZ2VyIHRoYXQgY29uY2F0ZW5hdGVzXHJcbi8vIHRoZSBuZXh0IChjb3VudCkgb3V0cHV0cyBmcm9tIEFSQzQuICBJdHMgcmV0dXJuIHZhbHVlIGlzIGEgbnVtYmVyIHhcclxuLy8gdGhhdCBpcyBpbiB0aGUgcmFuZ2UgMCA8PSB4IDwgKHdpZHRoIF4gY291bnQpLlxyXG4vL1xyXG4vKiogQGNvbnN0cnVjdG9yICovXHJcbmZ1bmN0aW9uIEFSQzQoa2V5KSB7XHJcbiAgdmFyIHQsIGtleWxlbiA9IGtleS5sZW5ndGgsXHJcbiAgICAgIG1lID0gdGhpcywgaSA9IDAsIGogPSBtZS5pID0gbWUuaiA9IDAsIHMgPSBtZS5TID0gW107XHJcblxyXG4gIC8vIFRoZSBlbXB0eSBrZXkgW10gaXMgdHJlYXRlZCBhcyBbMF0uXHJcbiAgaWYgKCFrZXlsZW4pIHsga2V5ID0gW2tleWxlbisrXTsgfVxyXG5cclxuICAvLyBTZXQgdXAgUyB1c2luZyB0aGUgc3RhbmRhcmQga2V5IHNjaGVkdWxpbmcgYWxnb3JpdGhtLlxyXG4gIHdoaWxlIChpIDwgd2lkdGgpIHtcclxuICAgIHNbaV0gPSBpKys7XHJcbiAgfVxyXG4gIGZvciAoaSA9IDA7IGkgPCB3aWR0aDsgaSsrKSB7XHJcbiAgICBzW2ldID0gc1tqID0gbWFzayAmIChqICsga2V5W2kgJSBrZXlsZW5dICsgKHQgPSBzW2ldKSldO1xyXG4gICAgc1tqXSA9IHQ7XHJcbiAgfVxyXG5cclxuICAvLyBUaGUgXCJnXCIgbWV0aG9kIHJldHVybnMgdGhlIG5leHQgKGNvdW50KSBvdXRwdXRzIGFzIG9uZSBudW1iZXIuXHJcbiAgKG1lLmcgPSBmdW5jdGlvbihjb3VudCkge1xyXG4gICAgLy8gVXNpbmcgaW5zdGFuY2UgbWVtYmVycyBpbnN0ZWFkIG9mIGNsb3N1cmUgc3RhdGUgbmVhcmx5IGRvdWJsZXMgc3BlZWQuXHJcbiAgICB2YXIgdCwgciA9IDAsXHJcbiAgICAgICAgaSA9IG1lLmksIGogPSBtZS5qLCBzID0gbWUuUztcclxuICAgIHdoaWxlIChjb3VudC0tKSB7XHJcbiAgICAgIHQgPSBzW2kgPSBtYXNrICYgKGkgKyAxKV07XHJcbiAgICAgIHIgPSByICogd2lkdGggKyBzW21hc2sgJiAoKHNbaV0gPSBzW2ogPSBtYXNrICYgKGogKyB0KV0pICsgKHNbal0gPSB0KSldO1xyXG4gICAgfVxyXG4gICAgbWUuaSA9IGk7IG1lLmogPSBqO1xyXG4gICAgcmV0dXJuIHI7XHJcbiAgICAvLyBGb3Igcm9idXN0IHVucHJlZGljdGFiaWxpdHkgZGlzY2FyZCBhbiBpbml0aWFsIGJhdGNoIG9mIHZhbHVlcy5cclxuICAgIC8vIFNlZSBodHRwOi8vd3d3LnJzYS5jb20vcnNhbGFicy9ub2RlLmFzcD9pZD0yMDA5XHJcbiAgfSkod2lkdGgpO1xyXG59XHJcblxyXG4vL1xyXG4vLyBmbGF0dGVuKClcclxuLy8gQ29udmVydHMgYW4gb2JqZWN0IHRyZWUgdG8gbmVzdGVkIGFycmF5cyBvZiBzdHJpbmdzLlxyXG4vL1xyXG5mdW5jdGlvbiBmbGF0dGVuKG9iaiwgZGVwdGgpIHtcclxuICB2YXIgcmVzdWx0ID0gW10sIHR5cCA9ICh0eXBlb2Ygb2JqKVswXSwgcHJvcDtcclxuICBpZiAoZGVwdGggJiYgdHlwID09ICdvJykge1xyXG4gICAgZm9yIChwcm9wIGluIG9iaikge1xyXG4gICAgICB0cnkgeyByZXN1bHQucHVzaChmbGF0dGVuKG9ialtwcm9wXSwgZGVwdGggLSAxKSk7IH0gY2F0Y2ggKGUpIHt9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiAocmVzdWx0Lmxlbmd0aCA/IHJlc3VsdCA6IHR5cCA9PSAncycgPyBvYmogOiBvYmogKyAnXFwwJyk7XHJcbn1cclxuXHJcbi8vXHJcbi8vIG1peGtleSgpXHJcbi8vIE1peGVzIGEgc3RyaW5nIHNlZWQgaW50byBhIGtleSB0aGF0IGlzIGFuIGFycmF5IG9mIGludGVnZXJzLCBhbmRcclxuLy8gcmV0dXJucyBhIHNob3J0ZW5lZCBzdHJpbmcgc2VlZCB0aGF0IGlzIGVxdWl2YWxlbnQgdG8gdGhlIHJlc3VsdCBrZXkuXHJcbi8vXHJcbmZ1bmN0aW9uIG1peGtleShzZWVkLCBrZXkpIHtcclxuICB2YXIgc3RyaW5nc2VlZCA9IHNlZWQgKyAnJywgc21lYXIsIGogPSAwO1xyXG4gIHdoaWxlIChqIDwgc3RyaW5nc2VlZC5sZW5ndGgpIHtcclxuICAgIGtleVttYXNrICYgal0gPVxyXG4gICAgICBtYXNrICYgKChzbWVhciBePSBrZXlbbWFzayAmIGpdICogMTkpICsgc3RyaW5nc2VlZC5jaGFyQ29kZUF0KGorKykpO1xyXG4gIH1cclxuICByZXR1cm4gdG9zdHJpbmcoa2V5KTtcclxufVxyXG5cclxuLy9cclxuLy8gYXV0b3NlZWQoKVxyXG4vLyBSZXR1cm5zIGFuIG9iamVjdCBmb3IgYXV0b3NlZWRpbmcsIHVzaW5nIHdpbmRvdy5jcnlwdG8gaWYgYXZhaWxhYmxlLlxyXG4vL1xyXG4vKiogQHBhcmFtIHtVaW50OEFycmF5PX0gc2VlZCAqL1xyXG5mdW5jdGlvbiBhdXRvc2VlZChzZWVkKSB7XHJcbiAgdHJ5IHtcclxuICAgIEdMT0JBTC5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKHNlZWQgPSBuZXcgVWludDhBcnJheSh3aWR0aCkpO1xyXG4gICAgcmV0dXJuIHRvc3RyaW5nKHNlZWQpO1xyXG4gIH0gY2F0Y2ggKGUpIHtcclxuICAgIHJldHVybiBbK25ldyBEYXRlLCBHTE9CQUwsIEdMT0JBTC5uYXZpZ2F0b3IgJiYgR0xPQkFMLm5hdmlnYXRvci5wbHVnaW5zLFxyXG4gICAgICAgICAgICBHTE9CQUwuc2NyZWVuLCB0b3N0cmluZyhwb29sKV07XHJcbiAgfVxyXG59XHJcblxyXG4vL1xyXG4vLyB0b3N0cmluZygpXHJcbi8vIENvbnZlcnRzIGFuIGFycmF5IG9mIGNoYXJjb2RlcyB0byBhIHN0cmluZ1xyXG4vL1xyXG5mdW5jdGlvbiB0b3N0cmluZyhhKSB7XHJcbiAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoMCwgYSk7XHJcbn1cclxuXHJcbi8vXHJcbi8vIFdoZW4gc2VlZHJhbmRvbS5qcyBpcyBsb2FkZWQsIHdlIGltbWVkaWF0ZWx5IG1peCBhIGZldyBiaXRzXHJcbi8vIGZyb20gdGhlIGJ1aWx0LWluIFJORyBpbnRvIHRoZSBlbnRyb3B5IHBvb2wuICBCZWNhdXNlIHdlIGRvXHJcbi8vIG5vdCB3YW50IHRvIGludGVmZXJlIHdpdGggZGV0ZXJtaW5zdGljIFBSTkcgc3RhdGUgbGF0ZXIsXHJcbi8vIHNlZWRyYW5kb20gd2lsbCBub3QgY2FsbCBNYXRoLnJhbmRvbSBvbiBpdHMgb3duIGFnYWluIGFmdGVyXHJcbi8vIGluaXRpYWxpemF0aW9uLlxyXG4vL1xyXG5taXhrZXkoTWF0aC5yYW5kb20oKSwgcG9vbCk7XHJcbiIsImZ1bmN0aW9uIEUgKCkge1xuICAvLyBLZWVwIHRoaXMgZW1wdHkgc28gaXQncyBlYXNpZXIgdG8gaW5oZXJpdCBmcm9tXG4gIC8vICh2aWEgaHR0cHM6Ly9naXRodWIuY29tL2xpcHNtYWNrIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3Njb3R0Y29yZ2FuL3RpbnktZW1pdHRlci9pc3N1ZXMvMylcbn1cblxuRS5wcm90b3R5cGUgPSB7XG4gIG9uOiBmdW5jdGlvbiAobmFtZSwgY2FsbGJhY2ssIGN0eCkge1xuICAgIHZhciBlID0gdGhpcy5lIHx8ICh0aGlzLmUgPSB7fSk7XG5cbiAgICAoZVtuYW1lXSB8fCAoZVtuYW1lXSA9IFtdKSkucHVzaCh7XG4gICAgICBmbjogY2FsbGJhY2ssXG4gICAgICBjdHg6IGN0eFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG5cbiAgb25jZTogZnVuY3Rpb24gKG5hbWUsIGNhbGxiYWNrLCBjdHgpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgZnVuY3Rpb24gbGlzdGVuZXIgKCkge1xuICAgICAgc2VsZi5vZmYobmFtZSwgbGlzdGVuZXIpO1xuICAgICAgY2FsbGJhY2suYXBwbHkoY3R4LCBhcmd1bWVudHMpO1xuICAgIH07XG5cbiAgICBsaXN0ZW5lci5fID0gY2FsbGJhY2tcbiAgICByZXR1cm4gdGhpcy5vbihuYW1lLCBsaXN0ZW5lciwgY3R4KTtcbiAgfSxcblxuICBlbWl0OiBmdW5jdGlvbiAobmFtZSkge1xuICAgIHZhciBkYXRhID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgIHZhciBldnRBcnIgPSAoKHRoaXMuZSB8fCAodGhpcy5lID0ge30pKVtuYW1lXSB8fCBbXSkuc2xpY2UoKTtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGxlbiA9IGV2dEFyci5sZW5ndGg7XG5cbiAgICBmb3IgKGk7IGkgPCBsZW47IGkrKykge1xuICAgICAgZXZ0QXJyW2ldLmZuLmFwcGx5KGV2dEFycltpXS5jdHgsIGRhdGEpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuXG4gIG9mZjogZnVuY3Rpb24gKG5hbWUsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGUgPSB0aGlzLmUgfHwgKHRoaXMuZSA9IHt9KTtcbiAgICB2YXIgZXZ0cyA9IGVbbmFtZV07XG4gICAgdmFyIGxpdmVFdmVudHMgPSBbXTtcblxuICAgIGlmIChldnRzICYmIGNhbGxiYWNrKSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gZXZ0cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBpZiAoZXZ0c1tpXS5mbiAhPT0gY2FsbGJhY2sgJiYgZXZ0c1tpXS5mbi5fICE9PSBjYWxsYmFjaylcbiAgICAgICAgICBsaXZlRXZlbnRzLnB1c2goZXZ0c1tpXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIGV2ZW50IGZyb20gcXVldWUgdG8gcHJldmVudCBtZW1vcnkgbGVha1xuICAgIC8vIFN1Z2dlc3RlZCBieSBodHRwczovL2dpdGh1Yi5jb20vbGF6ZFxuICAgIC8vIFJlZjogaHR0cHM6Ly9naXRodWIuY29tL3Njb3R0Y29yZ2FuL3RpbnktZW1pdHRlci9jb21taXQvYzZlYmZhYTliYzk3M2IzM2QxMTBhODRhMzA3NzQyYjdjZjk0Yzk1MyNjb21taXRjb21tZW50LTUwMjQ5MTBcblxuICAgIChsaXZlRXZlbnRzLmxlbmd0aClcbiAgICAgID8gZVtuYW1lXSA9IGxpdmVFdmVudHNcbiAgICAgIDogZGVsZXRlIGVbbmFtZV07XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBFO1xubW9kdWxlLmV4cG9ydHMuVGlueUVtaXR0ZXIgPSBFO1xuIiwiLyoqXG4gKiB0eXBlZC1mdW5jdGlvblxuICpcbiAqIFR5cGUgY2hlY2tpbmcgZm9yIEphdmFTY3JpcHQgZnVuY3Rpb25zXG4gKlxuICogaHR0cHM6Ly9naXRodWIuY29tL2pvc2Rlam9uZy90eXBlZC1mdW5jdGlvblxuICovXG4ndXNlIHN0cmljdCc7XG5cbihmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgLy8gQU1ELiBSZWdpc3RlciBhcyBhbiBhbm9ueW1vdXMgbW9kdWxlLlxuICAgIGRlZmluZShbXSwgZmFjdG9yeSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgLy8gT2xkTm9kZS4gRG9lcyBub3Qgd29yayB3aXRoIHN0cmljdCBDb21tb25KUywgYnV0XG4gICAgLy8gb25seSBDb21tb25KUy1saWtlIGVudmlyb25tZW50cyB0aGF0IHN1cHBvcnQgbW9kdWxlLmV4cG9ydHMsXG4gICAgLy8gbGlrZSBPbGROb2RlLlxuICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuICB9IGVsc2Uge1xuICAgIC8vIEJyb3dzZXIgZ2xvYmFscyAocm9vdCBpcyB3aW5kb3cpXG4gICAgcm9vdC50eXBlZCA9IGZhY3RvcnkoKTtcbiAgfVxufSh0aGlzLCBmdW5jdGlvbiAoKSB7XG5cbiAgZnVuY3Rpb24gb2sgKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gbm90T2sgKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVuZGVmICgpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0eXBlZGVmIHt7XG4gICAqICAgcGFyYW1zOiBQYXJhbVtdLFxuICAgKiAgIGZuOiBmdW5jdGlvblxuICAgKiB9fSBTaWduYXR1cmVcbiAgICpcbiAgICogQHR5cGVkZWYge3tcbiAgICogICB0eXBlczogVHlwZVtdLFxuICAgKiAgIHJlc3RQYXJhbTogYm9vbGVhblxuICAgKiB9fSBQYXJhbVxuICAgKlxuICAgKiBAdHlwZWRlZiB7e1xuICAgKiAgIG5hbWU6IHN0cmluZyxcbiAgICogICB0eXBlSW5kZXg6IG51bWJlcixcbiAgICogICB0ZXN0OiBmdW5jdGlvbixcbiAgICogICBjb252ZXJzaW9uPzogQ29udmVyc2lvbkRlZixcbiAgICogICBjb252ZXJzaW9uSW5kZXg6IG51bWJlcixcbiAgICogfX0gVHlwZVxuICAgKlxuICAgKiBAdHlwZWRlZiB7e1xuICAgKiAgIGZyb206IHN0cmluZyxcbiAgICogICB0bzogc3RyaW5nLFxuICAgKiAgIGNvbnZlcnQ6IGZ1bmN0aW9uICgqKSA6ICpcbiAgICogfX0gQ29udmVyc2lvbkRlZlxuICAgKlxuICAgKiBAdHlwZWRlZiB7e1xuICAgKiAgIG5hbWU6IHN0cmluZyxcbiAgICogICB0ZXN0OiBmdW5jdGlvbigqKSA6IGJvb2xlYW5cbiAgICogfX0gVHlwZURlZlxuICAgKi9cblxuICAvLyBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdHlwZWQtZnVuY3Rpb25cbiAgZnVuY3Rpb24gY3JlYXRlICgpIHtcbiAgICAvLyBkYXRhIHR5cGUgdGVzdHNcbiAgICB2YXIgX3R5cGVzID0gW1xuICAgICAgeyBuYW1lOiAnbnVtYmVyJywgICAgdGVzdDogZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHR5cGVvZiB4ID09PSAnbnVtYmVyJyB9IH0sXG4gICAgICB7IG5hbWU6ICdzdHJpbmcnLCAgICB0ZXN0OiBmdW5jdGlvbiAoeCkgeyByZXR1cm4gdHlwZW9mIHggPT09ICdzdHJpbmcnIH0gfSxcbiAgICAgIHsgbmFtZTogJ2Jvb2xlYW4nLCAgIHRlc3Q6IGZ1bmN0aW9uICh4KSB7IHJldHVybiB0eXBlb2YgeCA9PT0gJ2Jvb2xlYW4nIH0gfSxcbiAgICAgIHsgbmFtZTogJ0Z1bmN0aW9uJywgIHRlc3Q6IGZ1bmN0aW9uICh4KSB7IHJldHVybiB0eXBlb2YgeCA9PT0gJ2Z1bmN0aW9uJ30gfSxcbiAgICAgIHsgbmFtZTogJ0FycmF5JywgICAgIHRlc3Q6IEFycmF5LmlzQXJyYXkgfSxcbiAgICAgIHsgbmFtZTogJ0RhdGUnLCAgICAgIHRlc3Q6IGZ1bmN0aW9uICh4KSB7IHJldHVybiB4IGluc3RhbmNlb2YgRGF0ZSB9IH0sXG4gICAgICB7IG5hbWU6ICdSZWdFeHAnLCAgICB0ZXN0OiBmdW5jdGlvbiAoeCkgeyByZXR1cm4geCBpbnN0YW5jZW9mIFJlZ0V4cCB9IH0sXG4gICAgICB7IG5hbWU6ICdPYmplY3QnLCAgICB0ZXN0OiBmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHggPT09ICdvYmplY3QnICYmIHggIT09IG51bGwgJiYgeC5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0XG4gICAgICB9fSxcbiAgICAgIHsgbmFtZTogJ251bGwnLCAgICAgIHRlc3Q6IGZ1bmN0aW9uICh4KSB7IHJldHVybiB4ID09PSBudWxsIH0gfSxcbiAgICAgIHsgbmFtZTogJ3VuZGVmaW5lZCcsIHRlc3Q6IGZ1bmN0aW9uICh4KSB7IHJldHVybiB4ID09PSB1bmRlZmluZWQgfSB9XG4gICAgXTtcblxuICAgIHZhciBhbnlUeXBlID0ge1xuICAgICAgbmFtZTogJ2FueScsXG4gICAgICB0ZXN0OiBva1xuICAgIH1cblxuICAgIC8vIHR5cGVzIHdoaWNoIG5lZWQgdG8gYmUgaWdub3JlZFxuICAgIHZhciBfaWdub3JlID0gW107XG5cbiAgICAvLyB0eXBlIGNvbnZlcnNpb25zXG4gICAgdmFyIF9jb252ZXJzaW9ucyA9IFtdO1xuXG4gICAgLy8gVGhpcyBpcyBhIHRlbXBvcmFyeSBvYmplY3QsIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBhIHR5cGVkIGZ1bmN0aW9uIGF0IHRoZSBlbmRcbiAgICB2YXIgdHlwZWQgPSB7XG4gICAgICB0eXBlczogX3R5cGVzLFxuICAgICAgY29udmVyc2lvbnM6IF9jb252ZXJzaW9ucyxcbiAgICAgIGlnbm9yZTogX2lnbm9yZVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBGaW5kIHRoZSB0ZXN0IGZ1bmN0aW9uIGZvciBhIHR5cGVcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdHlwZU5hbWVcbiAgICAgKiBAcmV0dXJuIHtUeXBlRGVmfSBSZXR1cm5zIHRoZSB0eXBlIGRlZmluaXRpb24gd2hlbiBmb3VuZCxcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgVGhyb3dzIGEgVHlwZUVycm9yIG90aGVyd2lzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZpbmRUeXBlQnlOYW1lICh0eXBlTmFtZSkge1xuICAgICAgdmFyIGVudHJ5ID0gZmluZEluQXJyYXkodHlwZWQudHlwZXMsIGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgICByZXR1cm4gZW50cnkubmFtZSA9PT0gdHlwZU5hbWU7XG4gICAgICB9KTtcblxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIHJldHVybiBlbnRyeTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVOYW1lID09PSAnYW55JykgeyAvLyBzcGVjaWFsIGJha2VkLWluIGNhc2UgJ2FueSdcbiAgICAgICAgcmV0dXJuIGFueVR5cGU7XG4gICAgICB9XG5cbiAgICAgIHZhciBoaW50ID0gZmluZEluQXJyYXkodHlwZWQudHlwZXMsIGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgICByZXR1cm4gZW50cnkubmFtZS50b0xvd2VyQ2FzZSgpID09PSB0eXBlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgfSk7XG5cbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gdHlwZSBcIicgKyB0eXBlTmFtZSArICdcIicgK1xuICAgICAgICAgIChoaW50ID8gKCcuIERpZCB5b3UgbWVhbiBcIicgKyBoaW50Lm5hbWUgKyAnXCI/JykgOiAnJykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbmQgdGhlIGluZGV4IG9mIGEgdHlwZSBkZWZpbml0aW9uLiBIYW5kbGVzIHNwZWNpYWwgY2FzZSAnYW55J1xuICAgICAqIEBwYXJhbSB7VHlwZURlZn0gdHlwZVxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmaW5kVHlwZUluZGV4KHR5cGUpIHtcbiAgICAgIGlmICh0eXBlID09PSBhbnlUeXBlKSB7XG4gICAgICAgIHJldHVybiA5OTk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0eXBlZC50eXBlcy5pbmRleE9mKHR5cGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbmQgYSB0eXBlIHRoYXQgbWF0Y2hlcyBhIHZhbHVlLlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGZpcnN0IHR5cGUgZm9yIHdoaWNoXG4gICAgICogICAgICAgICAgICAgICAgICB0aGUgdHlwZSB0ZXN0IG1hdGNoZXMgdGhlIHZhbHVlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZpbmRUeXBlTmFtZSh2YWx1ZSkge1xuICAgICAgdmFyIGVudHJ5ID0gZmluZEluQXJyYXkodHlwZWQudHlwZXMsIGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgICByZXR1cm4gZW50cnkudGVzdCh2YWx1ZSk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIHJldHVybiBlbnRyeS5uYW1lO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdWYWx1ZSBoYXMgdW5rbm93biB0eXBlLiBWYWx1ZTogJyArIHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaW5kIGEgc3BlY2lmaWMgc2lnbmF0dXJlIGZyb20gYSAoY29tcG9zZWQpIHR5cGVkIGZ1bmN0aW9uLCBmb3IgZXhhbXBsZTpcbiAgICAgKlxuICAgICAqICAgdHlwZWQuZmluZChmbiwgWydudW1iZXInLCAnc3RyaW5nJ10pXG4gICAgICogICB0eXBlZC5maW5kKGZuLCAnbnVtYmVyLCBzdHJpbmcnKVxuICAgICAqXG4gICAgICogRnVuY3Rpb24gZmluZCBvbmx5IG9ubHkgd29ya3MgZm9yIGV4YWN0IG1hdGNoZXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAgICAgICAgICAgICAgICAgICBBIHR5cGVkLWZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtzdHJpbmcgfCBzdHJpbmdbXX0gc2lnbmF0dXJlICAgU2lnbmF0dXJlIHRvIGJlIGZvdW5kLCBjYW4gYmVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbiBhcnJheSBvciBhIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcuXG4gICAgICogQHJldHVybiB7RnVuY3Rpb259ICAgICAgICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgbWF0Y2hpbmcgc2lnbmF0dXJlLCBvclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBhbiBlcnJvciB3aGVuIG5vIHNpZ25hdHVyZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGZvdW5kLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZpbmQgKGZuLCBzaWduYXR1cmUpIHtcbiAgICAgIGlmICghZm4uc2lnbmF0dXJlcykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGdW5jdGlvbiBpcyBubyB0eXBlZC1mdW5jdGlvbicpO1xuICAgICAgfVxuXG4gICAgICAvLyBub3JtYWxpemUgaW5wdXRcbiAgICAgIHZhciBhcnI7XG4gICAgICBpZiAodHlwZW9mIHNpZ25hdHVyZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgYXJyID0gc2lnbmF0dXJlLnNwbGl0KCcsJyk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgYXJyW2ldID0gYXJyW2ldLnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShzaWduYXR1cmUpKSB7XG4gICAgICAgIGFyciA9IHNpZ25hdHVyZTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTdHJpbmcgYXJyYXkgb3IgYSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nIGV4cGVjdGVkJyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBzdHIgPSBhcnIuam9pbignLCcpO1xuXG4gICAgICAvLyBmaW5kIGFuIGV4YWN0IG1hdGNoXG4gICAgICB2YXIgbWF0Y2ggPSBmbi5zaWduYXR1cmVzW3N0cl07XG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgfVxuXG4gICAgICAvLyBUT0RPOiBleHRlbmQgZmluZCB0byBtYXRjaCBub24tZXhhY3Qgc2lnbmF0dXJlc1xuXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTaWduYXR1cmUgbm90IGZvdW5kIChzaWduYXR1cmU6ICcgKyAoZm4ubmFtZSB8fCAndW5uYW1lZCcpICsgJygnICsgYXJyLmpvaW4oJywgJykgKyAnKSknKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IGEgZ2l2ZW4gdmFsdWUgdG8gYW5vdGhlciBkYXRhIHR5cGUuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29udmVydCAodmFsdWUsIHR5cGUpIHtcbiAgICAgIHZhciBmcm9tID0gZmluZFR5cGVOYW1lKHZhbHVlKTtcblxuICAgICAgLy8gY2hlY2sgY29udmVyc2lvbiBpcyBuZWVkZWRcbiAgICAgIGlmICh0eXBlID09PSBmcm9tKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlZC5jb252ZXJzaW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY29udmVyc2lvbiA9IHR5cGVkLmNvbnZlcnNpb25zW2ldO1xuICAgICAgICBpZiAoY29udmVyc2lvbi5mcm9tID09PSBmcm9tICYmIGNvbnZlcnNpb24udG8gPT09IHR5cGUpIHtcbiAgICAgICAgICByZXR1cm4gY29udmVyc2lvbi5jb252ZXJ0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGZyb20gJyArIGZyb20gKyAnIHRvICcgKyB0eXBlKTtcbiAgICB9XG4gICAgXG4gICAgLyoqXG4gICAgICogU3RyaW5naWZ5IHBhcmFtZXRlcnMgaW4gYSBub3JtYWxpemVkIHdheVxuICAgICAqIEBwYXJhbSB7UGFyYW1bXX0gcGFyYW1zXG4gICAgICogQHJldHVybiB7c3RyaW5nfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHN0cmluZ2lmeVBhcmFtcyAocGFyYW1zKSB7XG4gICAgICByZXR1cm4gcGFyYW1zXG4gICAgICAgICAgLm1hcChmdW5jdGlvbiAocGFyYW0pIHtcbiAgICAgICAgICAgIHZhciB0eXBlTmFtZXMgPSBwYXJhbS50eXBlcy5tYXAoZ2V0VHlwZU5hbWUpO1xuXG4gICAgICAgICAgICByZXR1cm4gKHBhcmFtLnJlc3RQYXJhbSA/ICcuLi4nIDogJycpICsgdHlwZU5hbWVzLmpvaW4oJ3wnKTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5qb2luKCcsJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGFyc2UgYSBwYXJhbWV0ZXIsIGxpa2UgXCIuLi5udW1iZXIgfCBib29sZWFuXCJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1cbiAgICAgKiBAcGFyYW0ge0NvbnZlcnNpb25EZWZbXX0gY29udmVyc2lvbnNcbiAgICAgKiBAcmV0dXJuIHtQYXJhbX0gcGFyYW1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwYXJzZVBhcmFtIChwYXJhbSwgY29udmVyc2lvbnMpIHtcbiAgICAgIHZhciByZXN0UGFyYW0gPSBwYXJhbS5pbmRleE9mKCcuLi4nKSA9PT0gMDtcbiAgICAgIHZhciB0eXBlcyA9ICghcmVzdFBhcmFtKVxuICAgICAgICAgID8gcGFyYW1cbiAgICAgICAgICA6IChwYXJhbS5sZW5ndGggPiAzKVxuICAgICAgICAgICAgICA/IHBhcmFtLnNsaWNlKDMpXG4gICAgICAgICAgICAgIDogJ2FueSc7XG5cbiAgICAgIHZhciB0eXBlTmFtZXMgPSB0eXBlcy5zcGxpdCgnfCcpLm1hcCh0cmltKVxuICAgICAgICAgIC5maWx0ZXIobm90RW1wdHkpXG4gICAgICAgICAgLmZpbHRlcihub3RJZ25vcmUpO1xuXG4gICAgICB2YXIgbWF0Y2hpbmdDb252ZXJzaW9ucyA9IGZpbHRlckNvbnZlcnNpb25zKGNvbnZlcnNpb25zLCB0eXBlTmFtZXMpO1xuXG4gICAgICB2YXIgZXhhY3RUeXBlcyA9IHR5cGVOYW1lcy5tYXAoZnVuY3Rpb24gKHR5cGVOYW1lKSB7XG4gICAgICAgIHZhciB0eXBlID0gZmluZFR5cGVCeU5hbWUodHlwZU5hbWUpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogdHlwZU5hbWUsXG4gICAgICAgICAgdHlwZUluZGV4OiBmaW5kVHlwZUluZGV4KHR5cGUpLFxuICAgICAgICAgIHRlc3Q6IHR5cGUudGVzdCxcbiAgICAgICAgICBjb252ZXJzaW9uOiBudWxsLFxuICAgICAgICAgIGNvbnZlcnNpb25JbmRleDogLTFcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgY29udmVydGlibGVUeXBlcyA9IG1hdGNoaW5nQ29udmVyc2lvbnMubWFwKGZ1bmN0aW9uIChjb252ZXJzaW9uKSB7XG4gICAgICAgIHZhciB0eXBlID0gZmluZFR5cGVCeU5hbWUoY29udmVyc2lvbi5mcm9tKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IGNvbnZlcnNpb24uZnJvbSxcbiAgICAgICAgICB0eXBlSW5kZXg6IGZpbmRUeXBlSW5kZXgodHlwZSksXG4gICAgICAgICAgdGVzdDogdHlwZS50ZXN0LFxuICAgICAgICAgIGNvbnZlcnNpb246IGNvbnZlcnNpb24sXG4gICAgICAgICAgY29udmVyc2lvbkluZGV4OiBjb252ZXJzaW9ucy5pbmRleE9mKGNvbnZlcnNpb24pXG4gICAgICAgIH07XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZXM6IGV4YWN0VHlwZXMuY29uY2F0KGNvbnZlcnRpYmxlVHlwZXMpLFxuICAgICAgICByZXN0UGFyYW06IHJlc3RQYXJhbVxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYXJzZSBhIHNpZ25hdHVyZSB3aXRoIGNvbW1hIHNlcGFyYXRlZCBwYXJhbWV0ZXJzLFxuICAgICAqIGxpa2UgXCJudW1iZXIgfCBib29sZWFuLCAuLi5zdHJpbmdcIlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzaWduYXR1cmVcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBmblxuICAgICAqIEBwYXJhbSB7Q29udmVyc2lvbkRlZltdfSBjb252ZXJzaW9uc1xuICAgICAqIEByZXR1cm4ge1NpZ25hdHVyZSB8IG51bGx9IHNpZ25hdHVyZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHBhcnNlU2lnbmF0dXJlIChzaWduYXR1cmUsIGZuLCBjb252ZXJzaW9ucykge1xuICAgICAgdmFyIHBhcmFtcyA9IFtdO1xuXG4gICAgICBpZiAoc2lnbmF0dXJlLnRyaW0oKSAhPT0gJycpIHtcbiAgICAgICAgcGFyYW1zID0gc2lnbmF0dXJlXG4gICAgICAgICAgICAuc3BsaXQoJywnKVxuICAgICAgICAgICAgLm1hcCh0cmltKVxuICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAocGFyYW0sIGluZGV4LCBhcnJheSkge1xuICAgICAgICAgICAgICB2YXIgcGFyc2VkUGFyYW0gPSBwYXJzZVBhcmFtKHBhcmFtLCBjb252ZXJzaW9ucyk7XG5cbiAgICAgICAgICAgICAgaWYgKHBhcnNlZFBhcmFtLnJlc3RQYXJhbSAmJiAoaW5kZXggIT09IGFycmF5Lmxlbmd0aCAtIDEpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdVbmV4cGVjdGVkIHJlc3QgcGFyYW1ldGVyIFwiJyArIHBhcmFtICsgJ1wiOiAnICtcbiAgICAgICAgICAgICAgICAgICAgJ29ubHkgYWxsb3dlZCBmb3IgdGhlIGxhc3QgcGFyYW1ldGVyJyk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gcGFyc2VkUGFyYW07XG4gICAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJhbXMuc29tZShpc0ludmFsaWRQYXJhbSkpIHtcbiAgICAgICAgLy8gaW52YWxpZCBzaWduYXR1cmU6IGF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIgaGFzIG5vIHR5cGVzXG4gICAgICAgIC8vICh0aGV5IG1heSBoYXZlIGJlZW4gZmlsdGVyZWQpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYXJhbXM6IHBhcmFtcyxcbiAgICAgICAgZm46IGZuXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRlc3Qgd2hldGhlciBhIHNldCBvZiBwYXJhbXMgY29udGFpbnMgYSByZXN0UGFyYW1cbiAgICAgKiBAcGFyYW0ge1BhcmFtW119IHBhcmFtc1xuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSB3aGVuIHRoZSBsYXN0IHBhcmFtZXRlciBpcyBhIHJlc3RQYXJhbVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGhhc1Jlc3RQYXJhbShwYXJhbXMpIHtcbiAgICAgIHZhciBwYXJhbSA9IGxhc3QocGFyYW1zKVxuICAgICAgcmV0dXJuIHBhcmFtID8gcGFyYW0ucmVzdFBhcmFtIDogZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGVzdCB3aGV0aGVyIGEgcGFyYW1ldGVyIGNvbnRhaW5zIGNvbnZlcnNpb25zXG4gICAgICogQHBhcmFtIHtQYXJhbX0gcGFyYW1cbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgd2hlbiBhdCBsZWFzdCBvbmUgb2YgdGhlIHBhcmFtZXRlcnNcbiAgICAgKiAgICAgICAgICAgICAgICAgICBjb250YWlucyBhIGNvbnZlcnNpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gaGFzQ29udmVyc2lvbnMocGFyYW0pIHtcbiAgICAgIHJldHVybiBwYXJhbS50eXBlcy5zb21lKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICAgIHJldHVybiB0eXBlLmNvbnZlcnNpb24gIT0gbnVsbDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIHR5cGUgdGVzdCBmb3IgYSBzaW5nbGUgcGFyYW1ldGVyLCB3aGljaCBjYW4gaGF2ZSBvbmUgb3IgbXVsdGlwbGVcbiAgICAgKiB0eXBlcy5cbiAgICAgKiBAcGFyYW0ge1BhcmFtfSBwYXJhbVxuICAgICAqIEByZXR1cm4ge2Z1bmN0aW9uKHg6ICopIDogYm9vbGVhbn0gUmV0dXJucyBhIHRlc3QgZnVuY3Rpb25cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb21waWxlVGVzdChwYXJhbSkge1xuICAgICAgaWYgKCFwYXJhbSB8fCBwYXJhbS50eXBlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gbm90aGluZyB0byBkb1xuICAgICAgICByZXR1cm4gb2s7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChwYXJhbS50eXBlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGZpbmRUeXBlQnlOYW1lKHBhcmFtLnR5cGVzWzBdLm5hbWUpLnRlc3Q7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChwYXJhbS50eXBlcy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgdmFyIHRlc3QwID0gZmluZFR5cGVCeU5hbWUocGFyYW0udHlwZXNbMF0ubmFtZSkudGVzdDtcbiAgICAgICAgdmFyIHRlc3QxID0gZmluZFR5cGVCeU5hbWUocGFyYW0udHlwZXNbMV0ubmFtZSkudGVzdDtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG9yKHgpIHtcbiAgICAgICAgICByZXR1cm4gdGVzdDAoeCkgfHwgdGVzdDEoeCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2UgeyAvLyBwYXJhbS50eXBlcy5sZW5ndGggPiAyXG4gICAgICAgIHZhciB0ZXN0cyA9IHBhcmFtLnR5cGVzLm1hcChmdW5jdGlvbiAodHlwZSkge1xuICAgICAgICAgIHJldHVybiBmaW5kVHlwZUJ5TmFtZSh0eXBlLm5hbWUpLnRlc3Q7XG4gICAgICAgIH0pXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBvcih4KSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRlc3RzW2ldKHgpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSB0ZXN0IGZvciBhbGwgcGFyYW1ldGVycyBvZiBhIHNpZ25hdHVyZVxuICAgICAqIEBwYXJhbSB7UGFyYW1bXX0gcGFyYW1zXG4gICAgICogQHJldHVybiB7ZnVuY3Rpb24oYXJnczogQXJyYXk8Kj4pIDogYm9vbGVhbn1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb21waWxlVGVzdHMocGFyYW1zKSB7XG4gICAgICB2YXIgdGVzdHMsIHRlc3QwLCB0ZXN0MTtcblxuICAgICAgaWYgKGhhc1Jlc3RQYXJhbShwYXJhbXMpKSB7XG4gICAgICAgIC8vIHZhcmlhYmxlIGFyZ3VtZW50cyBsaWtlICcuLi5udW1iZXInXG4gICAgICAgIHRlc3RzID0gaW5pdGlhbChwYXJhbXMpLm1hcChjb21waWxlVGVzdCk7XG4gICAgICAgIHZhciB2YXJJbmRleCA9IHRlc3RzLmxlbmd0aDtcbiAgICAgICAgdmFyIGxhc3RUZXN0ID0gY29tcGlsZVRlc3QobGFzdChwYXJhbXMpKTtcbiAgICAgICAgdmFyIHRlc3RSZXN0UGFyYW0gPSBmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgIGZvciAodmFyIGkgPSB2YXJJbmRleDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICghbGFzdFRlc3QoYXJnc1tpXSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiB0ZXN0QXJncyhhcmdzKSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKCF0ZXN0c1tpXShhcmdzW2ldKSkge1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0ZXN0UmVzdFBhcmFtKGFyZ3MpICYmIChhcmdzLmxlbmd0aCA+PSB2YXJJbmRleCArIDEpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIC8vIG5vIHZhcmlhYmxlIGFyZ3VtZW50c1xuICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBmdW5jdGlvbiB0ZXN0QXJncyhhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJncy5sZW5ndGggPT09IDA7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwYXJhbXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgdGVzdDAgPSBjb21waWxlVGVzdChwYXJhbXNbMF0pO1xuICAgICAgICAgIHJldHVybiBmdW5jdGlvbiB0ZXN0QXJncyhhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGVzdDAoYXJnc1swXSkgJiYgYXJncy5sZW5ndGggPT09IDE7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwYXJhbXMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgdGVzdDAgPSBjb21waWxlVGVzdChwYXJhbXNbMF0pO1xuICAgICAgICAgIHRlc3QxID0gY29tcGlsZVRlc3QocGFyYW1zWzFdKTtcbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gdGVzdEFyZ3MoYXJncykge1xuICAgICAgICAgICAgcmV0dXJuIHRlc3QwKGFyZ3NbMF0pICYmIHRlc3QxKGFyZ3NbMV0pICYmIGFyZ3MubGVuZ3RoID09PSAyO1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7IC8vIGFyZ3VtZW50cy5sZW5ndGggPiAyXG4gICAgICAgICAgdGVzdHMgPSBwYXJhbXMubWFwKGNvbXBpbGVUZXN0KTtcbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gdGVzdEFyZ3MoYXJncykge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBpZiAoIXRlc3RzW2ldKGFyZ3NbaV0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYXJncy5sZW5ndGggPT09IHRlc3RzLmxlbmd0aDtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmluZCB0aGUgcGFyYW1ldGVyIGF0IGEgc3BlY2lmaWMgaW5kZXggb2YgYSBzaWduYXR1cmUuXG4gICAgICogSGFuZGxlcyByZXN0IHBhcmFtZXRlcnMuXG4gICAgICogQHBhcmFtIHtTaWduYXR1cmV9IHNpZ25hdHVyZVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICAgICAqIEByZXR1cm4ge1BhcmFtIHwgbnVsbH0gUmV0dXJucyB0aGUgbWF0Y2hpbmcgcGFyYW1ldGVyIHdoZW4gZm91bmQsXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICBudWxsIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRQYXJhbUF0SW5kZXgoc2lnbmF0dXJlLCBpbmRleCkge1xuICAgICAgcmV0dXJuIGluZGV4IDwgc2lnbmF0dXJlLnBhcmFtcy5sZW5ndGhcbiAgICAgICAgICA/IHNpZ25hdHVyZS5wYXJhbXNbaW5kZXhdXG4gICAgICAgICAgOiBoYXNSZXN0UGFyYW0oc2lnbmF0dXJlLnBhcmFtcylcbiAgICAgICAgICAgICAgPyBsYXN0KHNpZ25hdHVyZS5wYXJhbXMpXG4gICAgICAgICAgICAgIDogbnVsbFxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBhbGwgdHlwZSBuYW1lcyBvZiBhIHBhcmFtZXRlclxuICAgICAqIEBwYXJhbSB7U2lnbmF0dXJlfSBzaWduYXR1cmVcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV4Y2x1ZGVDb252ZXJzaW9uc1xuICAgICAqIEByZXR1cm4ge3N0cmluZ1tdfSBSZXR1cm5zIGFuIGFycmF5IHdpdGggdHlwZSBuYW1lc1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldEV4cGVjdGVkVHlwZU5hbWVzIChzaWduYXR1cmUsIGluZGV4LCBleGNsdWRlQ29udmVyc2lvbnMpIHtcbiAgICAgIHZhciBwYXJhbSA9IGdldFBhcmFtQXRJbmRleChzaWduYXR1cmUsIGluZGV4KTtcbiAgICAgIHZhciB0eXBlcyA9IHBhcmFtXG4gICAgICAgICAgPyBleGNsdWRlQ29udmVyc2lvbnNcbiAgICAgICAgICAgICAgICAgID8gcGFyYW0udHlwZXMuZmlsdGVyKGlzRXhhY3RUeXBlKVxuICAgICAgICAgICAgICAgICAgOiBwYXJhbS50eXBlc1xuICAgICAgICAgIDogW107XG5cbiAgICAgIHJldHVybiB0eXBlcy5tYXAoZ2V0VHlwZU5hbWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG5hbWUgb2YgYSB0eXBlXG4gICAgICogQHBhcmFtIHtUeXBlfSB0eXBlXG4gICAgICogQHJldHVybiB7c3RyaW5nfSBSZXR1cm5zIHRoZSB0eXBlIG5hbWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRUeXBlTmFtZSh0eXBlKSB7XG4gICAgICByZXR1cm4gdHlwZS5uYW1lO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRlc3Qgd2hldGhlciBhIHR5cGUgaXMgYW4gZXhhY3QgdHlwZSBvciBjb252ZXJzaW9uXG4gICAgICogQHBhcmFtIHtUeXBlfSB0eXBlXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIHdoZW5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0V4YWN0VHlwZSh0eXBlKSB7XG4gICAgICByZXR1cm4gdHlwZS5jb252ZXJzaW9uID09PSBudWxsIHx8IHR5cGUuY29udmVyc2lvbiA9PT0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhlbHBlciBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgZXJyb3IgbWVzc2FnZXM6IGNyZWF0ZSBhbiBhcnJheSB3aXRoXG4gICAgICogYWxsIGF2YWlsYWJsZSB0eXBlcyBvbiBhIHNwZWNpZmljIGFyZ3VtZW50IGluZGV4LlxuICAgICAqIEBwYXJhbSB7U2lnbmF0dXJlW119IHNpZ25hdHVyZXNcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmdbXX0gUmV0dXJucyBhbiBhcnJheSB3aXRoIGF2YWlsYWJsZSB0eXBlc1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1lcmdlRXhwZWN0ZWRQYXJhbXMoc2lnbmF0dXJlcywgaW5kZXgpIHtcbiAgICAgIHZhciB0eXBlTmFtZXMgPSB1bmlxKGZsYXRNYXAoc2lnbmF0dXJlcywgZnVuY3Rpb24gKHNpZ25hdHVyZSkge1xuICAgICAgICByZXR1cm4gZ2V0RXhwZWN0ZWRUeXBlTmFtZXMoc2lnbmF0dXJlLCBpbmRleCwgZmFsc2UpO1xuICAgICAgfSkpO1xuXG4gICAgICByZXR1cm4gKHR5cGVOYW1lcy5pbmRleE9mKCdhbnknKSAhPT0gLTEpID8gWydhbnknXSA6IHR5cGVOYW1lcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAgICAgICAgICAgICBUaGUgbmFtZSBvZiB0aGUgZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge2FycmF5LjwqPn0gYXJncyAgICAgICAgICBUaGUgYWN0dWFsIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtTaWduYXR1cmVbXX0gc2lnbmF0dXJlcyAgQSBsaXN0IHdpdGggYXZhaWxhYmxlIHNpZ25hdHVyZXNcbiAgICAgKiBAcmV0dXJuIHtUeXBlRXJyb3J9IFJldHVybnMgYSB0eXBlIGVycm9yIHdpdGggYWRkaXRpb25hbCBkYXRhXG4gICAgICogICAgICAgICAgICAgICAgICAgICBhdHRhY2hlZCB0byBpdCBpbiB0aGUgcHJvcGVydHkgYGRhdGFgXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlRXJyb3IobmFtZSwgYXJncywgc2lnbmF0dXJlcykge1xuICAgICAgdmFyIGVyciwgZXhwZWN0ZWQ7XG4gICAgICB2YXIgX25hbWUgPSBuYW1lIHx8ICd1bm5hbWVkJztcblxuICAgICAgLy8gdGVzdCBmb3Igd3JvbmcgdHlwZSBhdCBzb21lIGluZGV4XG4gICAgICB2YXIgbWF0Y2hpbmdTaWduYXR1cmVzID0gc2lnbmF0dXJlcztcbiAgICAgIHZhciBpbmRleDtcbiAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFyZ3MubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIHZhciBuZXh0TWF0Y2hpbmdEZWZzID0gbWF0Y2hpbmdTaWduYXR1cmVzLmZpbHRlcihmdW5jdGlvbiAoc2lnbmF0dXJlKSB7XG4gICAgICAgICAgdmFyIHRlc3QgPSBjb21waWxlVGVzdChnZXRQYXJhbUF0SW5kZXgoc2lnbmF0dXJlLCBpbmRleCkpO1xuICAgICAgICAgIHJldHVybiAoaW5kZXggPCBzaWduYXR1cmUucGFyYW1zLmxlbmd0aCB8fCBoYXNSZXN0UGFyYW0oc2lnbmF0dXJlLnBhcmFtcykpICYmXG4gICAgICAgICAgICAgIHRlc3QoYXJnc1tpbmRleF0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAobmV4dE1hdGNoaW5nRGVmcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAvLyBubyBtYXRjaGluZyBzaWduYXR1cmVzIGFueW1vcmUsIHRocm93IGVycm9yIFwid3JvbmcgdHlwZVwiXG4gICAgICAgICAgZXhwZWN0ZWQgPSBtZXJnZUV4cGVjdGVkUGFyYW1zKG1hdGNoaW5nU2lnbmF0dXJlcywgaW5kZXgpO1xuICAgICAgICAgIGlmIChleHBlY3RlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB2YXIgYWN0dWFsVHlwZSA9IGZpbmRUeXBlTmFtZShhcmdzW2luZGV4XSk7XG5cbiAgICAgICAgICAgIGVyciA9IG5ldyBUeXBlRXJyb3IoJ1VuZXhwZWN0ZWQgdHlwZSBvZiBhcmd1bWVudCBpbiBmdW5jdGlvbiAnICsgX25hbWUgK1xuICAgICAgICAgICAgICAgICcgKGV4cGVjdGVkOiAnICsgZXhwZWN0ZWQuam9pbignIG9yICcpICtcbiAgICAgICAgICAgICAgICAnLCBhY3R1YWw6ICcgKyBhY3R1YWxUeXBlICsgJywgaW5kZXg6ICcgKyBpbmRleCArICcpJyk7XG4gICAgICAgICAgICBlcnIuZGF0YSA9IHtcbiAgICAgICAgICAgICAgY2F0ZWdvcnk6ICd3cm9uZ1R5cGUnLFxuICAgICAgICAgICAgICBmbjogX25hbWUsXG4gICAgICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICAgICAgYWN0dWFsOiBhY3R1YWxUeXBlLFxuICAgICAgICAgICAgICBleHBlY3RlZDogZXhwZWN0ZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlcnI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIG1hdGNoaW5nU2lnbmF0dXJlcyA9IG5leHRNYXRjaGluZ0RlZnM7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gdGVzdCBmb3IgdG9vIGZldyBhcmd1bWVudHNcbiAgICAgIHZhciBsZW5ndGhzID0gbWF0Y2hpbmdTaWduYXR1cmVzLm1hcChmdW5jdGlvbiAoc2lnbmF0dXJlKSB7XG4gICAgICAgIHJldHVybiBoYXNSZXN0UGFyYW0oc2lnbmF0dXJlLnBhcmFtcykgPyBJbmZpbml0eSA6IHNpZ25hdHVyZS5wYXJhbXMubGVuZ3RoO1xuICAgICAgfSk7XG4gICAgICBpZiAoYXJncy5sZW5ndGggPCBNYXRoLm1pbi5hcHBseShudWxsLCBsZW5ndGhzKSkge1xuICAgICAgICBleHBlY3RlZCA9IG1lcmdlRXhwZWN0ZWRQYXJhbXMobWF0Y2hpbmdTaWduYXR1cmVzLCBpbmRleCk7XG4gICAgICAgIGVyciA9IG5ldyBUeXBlRXJyb3IoJ1RvbyBmZXcgYXJndW1lbnRzIGluIGZ1bmN0aW9uICcgKyBfbmFtZSArXG4gICAgICAgICAgICAnIChleHBlY3RlZDogJyArIGV4cGVjdGVkLmpvaW4oJyBvciAnKSArXG4gICAgICAgICAgICAnLCBpbmRleDogJyArIGFyZ3MubGVuZ3RoICsgJyknKTtcbiAgICAgICAgZXJyLmRhdGEgPSB7XG4gICAgICAgICAgY2F0ZWdvcnk6ICd0b29GZXdBcmdzJyxcbiAgICAgICAgICBmbjogX25hbWUsXG4gICAgICAgICAgaW5kZXg6IGFyZ3MubGVuZ3RoLFxuICAgICAgICAgIGV4cGVjdGVkOiBleHBlY3RlZFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlcnI7XG4gICAgICB9XG5cbiAgICAgIC8vIHRlc3QgZm9yIHRvbyBtYW55IGFyZ3VtZW50c1xuICAgICAgdmFyIG1heExlbmd0aCA9IE1hdGgubWF4LmFwcGx5KG51bGwsIGxlbmd0aHMpO1xuICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gbWF4TGVuZ3RoKSB7XG4gICAgICAgIGVyciA9IG5ldyBUeXBlRXJyb3IoJ1RvbyBtYW55IGFyZ3VtZW50cyBpbiBmdW5jdGlvbiAnICsgX25hbWUgK1xuICAgICAgICAgICAgJyAoZXhwZWN0ZWQ6ICcgKyBtYXhMZW5ndGggKyAnLCBhY3R1YWw6ICcgKyBhcmdzLmxlbmd0aCArICcpJyk7XG4gICAgICAgIGVyci5kYXRhID0ge1xuICAgICAgICAgIGNhdGVnb3J5OiAndG9vTWFueUFyZ3MnLFxuICAgICAgICAgIGZuOiBfbmFtZSxcbiAgICAgICAgICBpbmRleDogYXJncy5sZW5ndGgsXG4gICAgICAgICAgZXhwZWN0ZWRMZW5ndGg6IG1heExlbmd0aFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlcnI7XG4gICAgICB9XG5cbiAgICAgIGVyciA9IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyBvZiB0eXBlIFwiJyArIGFyZ3Muam9pbignLCAnKSArXG4gICAgICAgICAgJ1wiIGRvIG5vdCBtYXRjaCBhbnkgb2YgdGhlIGRlZmluZWQgc2lnbmF0dXJlcyBvZiBmdW5jdGlvbiAnICsgX25hbWUgKyAnLicpO1xuICAgICAgZXJyLmRhdGEgPSB7XG4gICAgICAgIGNhdGVnb3J5OiAnbWlzbWF0Y2gnLFxuICAgICAgICBhY3R1YWw6IGFyZ3MubWFwKGZpbmRUeXBlTmFtZSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBlcnI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmluZCB0aGUgbG93ZXN0IGluZGV4IG9mIGFsbCBleGFjdCB0eXBlcyBvZiBhIHBhcmFtZXRlciAobm8gY29udmVyc2lvbnMpXG4gICAgICogQHBhcmFtIHtQYXJhbX0gcGFyYW1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBsb3dlc3QgdHlwZSBpbiB0eXBlZC50eXBlc1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldExvd2VzdFR5cGVJbmRleCAocGFyYW0pIHtcbiAgICAgIHZhciBtaW4gPSA5OTk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW0udHlwZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGlzRXhhY3RUeXBlKHBhcmFtLnR5cGVzW2ldKSkge1xuICAgICAgICAgIG1pbiA9IE1hdGgubWluKG1pbiwgcGFyYW0udHlwZXNbaV0udHlwZUluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbWluO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbmQgdGhlIGxvd2VzdCBpbmRleCBvZiB0aGUgY29udmVyc2lvbiBvZiBhbGwgdHlwZXMgb2YgdGhlIHBhcmFtZXRlclxuICAgICAqIGhhdmluZyBhIGNvbnZlcnNpb25cbiAgICAgKiBAcGFyYW0ge1BhcmFtfSBwYXJhbVxuICAgICAqIEByZXR1cm4ge251bWJlcn0gUmV0dXJucyB0aGUgbG93ZXN0IGluZGV4IG9mIHRoZSBjb252ZXJzaW9ucyBvZiB0aGlzIHR5cGVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRMb3dlc3RDb252ZXJzaW9uSW5kZXggKHBhcmFtKSB7XG4gICAgICB2YXIgbWluID0gOTk5O1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtLnR5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghaXNFeGFjdFR5cGUocGFyYW0udHlwZXNbaV0pKSB7XG4gICAgICAgICAgbWluID0gTWF0aC5taW4obWluLCBwYXJhbS50eXBlc1tpXS5jb252ZXJzaW9uSW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBtaW47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29tcGFyZSB0d28gcGFyYW1zXG4gICAgICogQHBhcmFtIHtQYXJhbX0gcGFyYW0xXG4gICAgICogQHBhcmFtIHtQYXJhbX0gcGFyYW0yXG4gICAgICogQHJldHVybiB7bnVtYmVyfSByZXR1cm5zIGEgbmVnYXRpdmUgbnVtYmVyIHdoZW4gcGFyYW0xIG11c3QgZ2V0IGEgbG93ZXJcbiAgICAgKiAgICAgICAgICAgICAgICAgIGluZGV4IHRoYW4gcGFyYW0yLCBhIHBvc2l0aXZlIG51bWJlciB3aGVuIHRoZSBvcHBvc2l0ZSxcbiAgICAgKiAgICAgICAgICAgICAgICAgIG9yIHplcm8gd2hlbiBib3RoIGFyZSBlcXVhbFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbXBhcmVQYXJhbXMgKHBhcmFtMSwgcGFyYW0yKSB7XG4gICAgICB2YXIgYztcblxuICAgICAgLy8gY29tcGFyZSBoYXZpbmcgYSByZXN0IHBhcmFtZXRlciBvciBub3RcbiAgICAgIGMgPSBwYXJhbTEucmVzdFBhcmFtIC0gcGFyYW0yLnJlc3RQYXJhbTtcbiAgICAgIGlmIChjICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBjO1xuICAgICAgfVxuXG4gICAgICAvLyBjb21wYXJlIGhhdmluZyBjb252ZXJzaW9ucyBvciBub3RcbiAgICAgIGMgPSBoYXNDb252ZXJzaW9ucyhwYXJhbTEpIC0gaGFzQ29udmVyc2lvbnMocGFyYW0yKTtcbiAgICAgIGlmIChjICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBjO1xuICAgICAgfVxuXG4gICAgICAvLyBjb21wYXJlIHRoZSBpbmRleCBvZiB0aGUgdHlwZXNcbiAgICAgIGMgPSBnZXRMb3dlc3RUeXBlSW5kZXgocGFyYW0xKSAtIGdldExvd2VzdFR5cGVJbmRleChwYXJhbTIpO1xuICAgICAgaWYgKGMgIT09IDApIHtcbiAgICAgICAgcmV0dXJuIGM7XG4gICAgICB9XG5cbiAgICAgIC8vIGNvbXBhcmUgdGhlIGluZGV4IG9mIGFueSBjb252ZXJzaW9uXG4gICAgICByZXR1cm4gZ2V0TG93ZXN0Q29udmVyc2lvbkluZGV4KHBhcmFtMSkgLSBnZXRMb3dlc3RDb252ZXJzaW9uSW5kZXgocGFyYW0yKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21wYXJlIHR3byBzaWduYXR1cmVzXG4gICAgICogQHBhcmFtIHtTaWduYXR1cmV9IHNpZ25hdHVyZTFcbiAgICAgKiBAcGFyYW0ge1NpZ25hdHVyZX0gc2lnbmF0dXJlMlxuICAgICAqIEByZXR1cm4ge251bWJlcn0gcmV0dXJucyBhIG5lZ2F0aXZlIG51bWJlciB3aGVuIHBhcmFtMSBtdXN0IGdldCBhIGxvd2VyXG4gICAgICogICAgICAgICAgICAgICAgICBpbmRleCB0aGFuIHBhcmFtMiwgYSBwb3NpdGl2ZSBudW1iZXIgd2hlbiB0aGUgb3Bwb3NpdGUsXG4gICAgICogICAgICAgICAgICAgICAgICBvciB6ZXJvIHdoZW4gYm90aCBhcmUgZXF1YWxcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb21wYXJlU2lnbmF0dXJlcyAoc2lnbmF0dXJlMSwgc2lnbmF0dXJlMikge1xuICAgICAgdmFyIGxlbiA9IE1hdGgubWluKHNpZ25hdHVyZTEucGFyYW1zLmxlbmd0aCwgc2lnbmF0dXJlMi5wYXJhbXMubGVuZ3RoKTtcbiAgICAgIHZhciBpO1xuICAgICAgdmFyIGM7XG5cbiAgICAgIC8vIGNvbXBhcmUgd2hldGhlciB0aGUgcGFyYW1zIGhhdmUgY29udmVyc2lvbnMgYXQgYWxsIG9yIG5vdFxuICAgICAgYyA9IHNpZ25hdHVyZTEucGFyYW1zLnNvbWUoaGFzQ29udmVyc2lvbnMpIC0gc2lnbmF0dXJlMi5wYXJhbXMuc29tZShoYXNDb252ZXJzaW9ucylcbiAgICAgIGlmIChjICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBjO1xuICAgICAgfVxuXG4gICAgICAvLyBuZXh0IGNvbXBhcmUgd2hldGhlciB0aGUgcGFyYW1zIGhhdmUgY29udmVyc2lvbnMgb25lIGJ5IG9uZVxuICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGMgPSBoYXNDb252ZXJzaW9ucyhzaWduYXR1cmUxLnBhcmFtc1tpXSkgLSBoYXNDb252ZXJzaW9ucyhzaWduYXR1cmUyLnBhcmFtc1tpXSk7XG4gICAgICAgIGlmIChjICE9PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIGM7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gY29tcGFyZSB0aGUgdHlwZXMgb2YgdGhlIHBhcmFtcyBvbmUgYnkgb25lXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgYyA9IGNvbXBhcmVQYXJhbXMoc2lnbmF0dXJlMS5wYXJhbXNbaV0sIHNpZ25hdHVyZTIucGFyYW1zW2ldKTtcbiAgICAgICAgaWYgKGMgIT09IDApIHtcbiAgICAgICAgICByZXR1cm4gYztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBjb21wYXJlIHRoZSBudW1iZXIgb2YgcGFyYW1zXG4gICAgICByZXR1cm4gc2lnbmF0dXJlMS5wYXJhbXMubGVuZ3RoIC0gc2lnbmF0dXJlMi5wYXJhbXMubGVuZ3RoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBwYXJhbXMgY29udGFpbmluZyBhbGwgdHlwZXMgdGhhdCBjYW4gYmUgY29udmVydGVkIHRvIHRoZSBkZWZpbmVkIHR5cGVzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtDb252ZXJzaW9uRGVmW119IGNvbnZlcnNpb25zXG4gICAgICogQHBhcmFtIHtzdHJpbmdbXX0gdHlwZU5hbWVzXG4gICAgICogQHJldHVybiB7Q29udmVyc2lvbkRlZltdfSBSZXR1cm5zIHRoZSBjb252ZXJzaW9ucyB0aGF0IGFyZSBhdmFpbGFibGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBldmVyeSB0eXBlIChpZiBhbnkpXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmlsdGVyQ29udmVyc2lvbnMoY29udmVyc2lvbnMsIHR5cGVOYW1lcykge1xuICAgICAgdmFyIG1hdGNoZXMgPSB7fTtcblxuICAgICAgY29udmVyc2lvbnMuZm9yRWFjaChmdW5jdGlvbiAoY29udmVyc2lvbikge1xuICAgICAgICBpZiAodHlwZU5hbWVzLmluZGV4T2YoY29udmVyc2lvbi5mcm9tKSA9PT0gLTEgJiZcbiAgICAgICAgICAgIHR5cGVOYW1lcy5pbmRleE9mKGNvbnZlcnNpb24udG8pICE9PSAtMSAmJlxuICAgICAgICAgICAgIW1hdGNoZXNbY29udmVyc2lvbi5mcm9tXSkge1xuICAgICAgICAgIG1hdGNoZXNbY29udmVyc2lvbi5mcm9tXSA9IGNvbnZlcnNpb247XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gT2JqZWN0LmtleXMobWF0Y2hlcykubWFwKGZ1bmN0aW9uIChmcm9tKSB7XG4gICAgICAgIHJldHVybiBtYXRjaGVzW2Zyb21dO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJlcHJvY2VzcyBhcmd1bWVudHMgYmVmb3JlIGNhbGxpbmcgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uOlxuICAgICAqIC0gaWYgbmVlZGVkIGNvbnZlcnQgdGhlIHBhcmFtZXRlcnNcbiAgICAgKiAtIGluIGNhc2Ugb2YgcmVzdCBwYXJhbWV0ZXJzLCBtb3ZlIHRoZSByZXN0IHBhcmFtZXRlcnMgaW50byBhbiBBcnJheVxuICAgICAqIEBwYXJhbSB7UGFyYW1bXX0gcGFyYW1zXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gZm5cbiAgICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIHdyYXBwZWQgZnVuY3Rpb25cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb21waWxlQXJnc1ByZXByb2Nlc3NpbmcocGFyYW1zLCBmbikge1xuICAgICAgdmFyIGZuQ29udmVydCA9IGZuO1xuXG4gICAgICAvLyBUT0RPOiBjYW4gd2UgbWFrZSB0aGlzIHdyYXBwZXIgZnVuY3Rpb24gc21hcnRlci9zaW1wbGVyP1xuXG4gICAgICBpZiAocGFyYW1zLnNvbWUoaGFzQ29udmVyc2lvbnMpKSB7XG4gICAgICAgIHZhciByZXN0UGFyYW0gPSBoYXNSZXN0UGFyYW0ocGFyYW1zKTtcbiAgICAgICAgdmFyIGNvbXBpbGVkQ29udmVyc2lvbnMgPSBwYXJhbXMubWFwKGNvbXBpbGVBcmdDb252ZXJzaW9uKVxuXG4gICAgICAgIGZuQ29udmVydCA9IGZ1bmN0aW9uIGNvbnZlcnRBcmdzKCkge1xuICAgICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgICAgdmFyIGxhc3QgPSByZXN0UGFyYW0gPyBhcmd1bWVudHMubGVuZ3RoIC0gMSA6IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXN0OyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaV0gPSBjb21waWxlZENvbnZlcnNpb25zW2ldKGFyZ3VtZW50c1tpXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChyZXN0UGFyYW0pIHtcbiAgICAgICAgICAgIGFyZ3NbbGFzdF0gPSBhcmd1bWVudHNbbGFzdF0ubWFwKGNvbXBpbGVkQ29udmVyc2lvbnNbbGFzdF0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBmbi5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgZm5QcmVwcm9jZXNzID0gZm5Db252ZXJ0O1xuICAgICAgaWYgKGhhc1Jlc3RQYXJhbShwYXJhbXMpKSB7XG4gICAgICAgIHZhciBvZmZzZXQgPSBwYXJhbXMubGVuZ3RoIC0gMTtcblxuICAgICAgICBmblByZXByb2Nlc3MgPSBmdW5jdGlvbiBwcmVwcm9jZXNzUmVzdFBhcmFtcyAoKSB7XG4gICAgICAgICAgcmV0dXJuIGZuQ29udmVydC5hcHBseShudWxsLFxuICAgICAgICAgICAgICBzbGljZShhcmd1bWVudHMsIDAsIG9mZnNldCkuY29uY2F0KFtzbGljZShhcmd1bWVudHMsIG9mZnNldCldKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZuUHJlcHJvY2VzcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21waWxlIGNvbnZlcnNpb24gZm9yIGEgcGFyYW1ldGVyIHRvIHRoZSByaWdodCB0eXBlXG4gICAgICogQHBhcmFtIHtQYXJhbX0gcGFyYW1cbiAgICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyB0aGUgd3JhcHBlZCBmdW5jdGlvbiB0aGF0IHdpbGwgY29udmVydCBhcmd1bWVudHNcbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbXBpbGVBcmdDb252ZXJzaW9uKHBhcmFtKSB7XG4gICAgICB2YXIgdGVzdDAsIHRlc3QxLCBjb252ZXJzaW9uMCwgY29udmVyc2lvbjE7XG4gICAgICB2YXIgdGVzdHMgPSBbXTtcbiAgICAgIHZhciBjb252ZXJzaW9ucyA9IFtdO1xuXG4gICAgICBwYXJhbS50eXBlcy5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICAgIGlmICh0eXBlLmNvbnZlcnNpb24pIHtcbiAgICAgICAgICB0ZXN0cy5wdXNoKGZpbmRUeXBlQnlOYW1lKHR5cGUuY29udmVyc2lvbi5mcm9tKS50ZXN0KTtcbiAgICAgICAgICBjb252ZXJzaW9ucy5wdXNoKHR5cGUuY29udmVyc2lvbi5jb252ZXJ0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIGNyZWF0ZSBvcHRpbWl6ZWQgY29udmVyc2lvbiBmdW5jdGlvbnMgZGVwZW5kaW5nIG9uIHRoZSBudW1iZXIgb2YgY29udmVyc2lvbnNcbiAgICAgIHN3aXRjaCAoY29udmVyc2lvbnMubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gY29udmVydEFyZyhhcmcpIHtcbiAgICAgICAgICAgIHJldHVybiBhcmc7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICB0ZXN0MCA9IHRlc3RzWzBdXG4gICAgICAgICAgY29udmVyc2lvbjAgPSBjb252ZXJzaW9uc1swXTtcbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gY29udmVydEFyZyhhcmcpIHtcbiAgICAgICAgICAgIGlmICh0ZXN0MChhcmcpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBjb252ZXJzaW9uMChhcmcpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYXJnO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgdGVzdDAgPSB0ZXN0c1swXVxuICAgICAgICAgIHRlc3QxID0gdGVzdHNbMV1cbiAgICAgICAgICBjb252ZXJzaW9uMCA9IGNvbnZlcnNpb25zWzBdO1xuICAgICAgICAgIGNvbnZlcnNpb24xID0gY29udmVyc2lvbnNbMV07XG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNvbnZlcnRBcmcoYXJnKSB7XG4gICAgICAgICAgICBpZiAodGVzdDAoYXJnKSkge1xuICAgICAgICAgICAgICByZXR1cm4gY29udmVyc2lvbjAoYXJnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRlc3QxKGFyZykpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnNpb24xKGFyZylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhcmc7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNvbnZlcnRBcmcoYXJnKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbnZlcnNpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIGlmICh0ZXN0c1tpXShhcmcpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnNpb25zW2ldKGFyZyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhcmc7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgYW4gYXJyYXkgd2l0aCBzaWduYXR1cmVzIGludG8gYSBtYXAgd2l0aCBzaWduYXR1cmVzLFxuICAgICAqIHdoZXJlIHNpZ25hdHVyZXMgd2l0aCB1bmlvbiB0eXBlcyBhcmUgc3BsaXQgaW50byBzZXBhcmF0ZSBzaWduYXR1cmVzXG4gICAgICpcbiAgICAgKiBUaHJvd3MgYW4gZXJyb3Igd2hlbiB0aGVyZSBhcmUgY29uZmxpY3RpbmcgdHlwZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U2lnbmF0dXJlW119IHNpZ25hdHVyZXNcbiAgICAgKiBAcmV0dXJuIHtPYmplY3QuPHN0cmluZywgZnVuY3Rpb24+fSAgUmV0dXJucyBhIG1hcCB3aXRoIHNpZ25hdHVyZXNcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMga2V5IGFuZCB0aGUgb3JpZ2luYWwgZnVuY3Rpb25cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhpcyBzaWduYXR1cmUgYXMgdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlU2lnbmF0dXJlc01hcChzaWduYXR1cmVzKSB7XG4gICAgICB2YXIgc2lnbmF0dXJlc01hcCA9IHt9O1xuICAgICAgc2lnbmF0dXJlcy5mb3JFYWNoKGZ1bmN0aW9uIChzaWduYXR1cmUpIHtcbiAgICAgICAgaWYgKCFzaWduYXR1cmUucGFyYW1zLnNvbWUoaGFzQ29udmVyc2lvbnMpKSB7XG4gICAgICAgICAgc3BsaXRQYXJhbXMoc2lnbmF0dXJlLnBhcmFtcywgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgICAgICBzaWduYXR1cmVzTWFwW3N0cmluZ2lmeVBhcmFtcyhwYXJhbXMpXSA9IHNpZ25hdHVyZS5mbjtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBzaWduYXR1cmVzTWFwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNwbGl0IHBhcmFtcyB3aXRoIHVuaW9uIHR5cGVzIGluIHRvIHNlcGFyYXRlIHBhcmFtcy5cbiAgICAgKlxuICAgICAqIEZvciBleGFtcGxlOlxuICAgICAqXG4gICAgICogICAgIHNwbGl0UGFyYW1zKFtbJ0FycmF5JywgJ09iamVjdCddLCBbJ3N0cmluZycsICdSZWdFeHAnXSlcbiAgICAgKiAgICAgLy8gcmV0dXJuczpcbiAgICAgKiAgICAgLy8gW1xuICAgICAqICAgICAvLyAgIFsnQXJyYXknLCAnc3RyaW5nJ10sXG4gICAgICogICAgIC8vICAgWydBcnJheScsICdSZWdFeHAnXSxcbiAgICAgKiAgICAgLy8gICBbJ09iamVjdCcsICdzdHJpbmcnXSxcbiAgICAgKiAgICAgLy8gICBbJ09iamVjdCcsICdSZWdFeHAnXVxuICAgICAqICAgICAvLyBdXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1BhcmFtW119IHBhcmFtc1xuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaWdub3JlQ29udmVyc2lvblR5cGVzXG4gICAgICogQHJldHVybiB7UGFyYW1bXX1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzcGxpdFBhcmFtcyhwYXJhbXMsIGlnbm9yZUNvbnZlcnNpb25UeXBlcykge1xuICAgICAgZnVuY3Rpb24gX3NwbGl0UGFyYW1zKHBhcmFtcywgaW5kZXgsIHR5cGVzKSB7XG4gICAgICAgIGlmIChpbmRleCA8IHBhcmFtcy5sZW5ndGgpIHtcbiAgICAgICAgICB2YXIgcGFyYW0gPSBwYXJhbXNbaW5kZXhdXG4gICAgICAgICAgdmFyIGZpbHRlcmVkVHlwZXMgPSBpZ25vcmVDb252ZXJzaW9uVHlwZXNcbiAgICAgICAgICAgICAgPyBwYXJhbS50eXBlcy5maWx0ZXIoaXNFeGFjdFR5cGUpXG4gICAgICAgICAgICAgIDogcGFyYW0udHlwZXM7XG4gICAgICAgICAgdmFyIHR5cGVHcm91cHNcblxuICAgICAgICAgIGlmIChwYXJhbS5yZXN0UGFyYW0pIHtcbiAgICAgICAgICAgIC8vIHNwbGl0IHRoZSB0eXBlcyBvZiBhIHJlc3QgcGFyYW1ldGVyIGluIHR3bzpcbiAgICAgICAgICAgIC8vIG9uZSB3aXRoIG9ubHkgZXhhY3QgdHlwZXMsIGFuZCBvbmUgd2l0aCBleGFjdCB0eXBlcyBhbmQgY29udmVyc2lvbnNcbiAgICAgICAgICAgIHZhciBleGFjdFR5cGVzID0gZmlsdGVyZWRUeXBlcy5maWx0ZXIoaXNFeGFjdFR5cGUpXG4gICAgICAgICAgICB0eXBlR3JvdXBzID0gZXhhY3RUeXBlcy5sZW5ndGggPCBmaWx0ZXJlZFR5cGVzLmxlbmd0aFxuICAgICAgICAgICAgICAgID8gW2V4YWN0VHlwZXMsIGZpbHRlcmVkVHlwZXNdXG4gICAgICAgICAgICAgICAgOiBbZmlsdGVyZWRUeXBlc11cblxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIHNwbGl0IGFsbCB0aGUgdHlwZXMgb2YgYSByZWd1bGFyIHBhcmFtZXRlciBpbnRvIG9uZSB0eXBlIHBlciBncm91cFxuICAgICAgICAgICAgdHlwZUdyb3VwcyA9IGZpbHRlcmVkVHlwZXMubWFwKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICAgICAgICAgIHJldHVybiBbdHlwZV1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gcmVjdXJzZSBvdmVyIHRoZSBncm91cHMgd2l0aCB0eXBlc1xuICAgICAgICAgIHJldHVybiBmbGF0TWFwKHR5cGVHcm91cHMsIGZ1bmN0aW9uICh0eXBlR3JvdXApIHtcbiAgICAgICAgICAgIHJldHVybiBfc3BsaXRQYXJhbXMocGFyYW1zLCBpbmRleCArIDEsIHR5cGVzLmNvbmNhdChbdHlwZUdyb3VwXSkpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgLy8gd2UndmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBwYXJhbWV0ZXJzLiBOb3cgYnVpbGQgYSBuZXcgUGFyYW1cbiAgICAgICAgICB2YXIgc3BsaXR0ZWRQYXJhbXMgPSB0eXBlcy5tYXAoZnVuY3Rpb24gKHR5cGUsIHR5cGVJbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdHlwZXM6IHR5cGUsXG4gICAgICAgICAgICAgIHJlc3RQYXJhbTogKHR5cGVJbmRleCA9PT0gcGFyYW1zLmxlbmd0aCAtIDEpICYmIGhhc1Jlc3RQYXJhbShwYXJhbXMpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXR1cm4gW3NwbGl0dGVkUGFyYW1zXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3NwbGl0UGFyYW1zKHBhcmFtcywgMCwgW10pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRlc3Qgd2hldGhlciB0d28gc2lnbmF0dXJlcyBoYXZlIGEgY29uZmxpY3Rpbmcgc2lnbmF0dXJlXG4gICAgICogQHBhcmFtIHtTaWduYXR1cmV9IHNpZ25hdHVyZTFcbiAgICAgKiBAcGFyYW0ge1NpZ25hdHVyZX0gc2lnbmF0dXJlMlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSB3aGVuIHRoZSBzaWduYXR1cmVzIGNvbmZsaWN0LCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaGFzQ29uZmxpY3RpbmdQYXJhbXMoc2lnbmF0dXJlMSwgc2lnbmF0dXJlMikge1xuICAgICAgdmFyIGlpID0gTWF0aC5tYXgoc2lnbmF0dXJlMS5wYXJhbXMubGVuZ3RoLCBzaWduYXR1cmUyLnBhcmFtcy5sZW5ndGgpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgdmFyIHR5cGVzTmFtZXMxID0gZ2V0RXhwZWN0ZWRUeXBlTmFtZXMoc2lnbmF0dXJlMSwgaSwgdHJ1ZSk7XG4gICAgICAgIHZhciB0eXBlc05hbWVzMiA9IGdldEV4cGVjdGVkVHlwZU5hbWVzKHNpZ25hdHVyZTIsIGksIHRydWUpO1xuXG4gICAgICAgIGlmICghaGFzT3ZlcmxhcCh0eXBlc05hbWVzMSwgdHlwZXNOYW1lczIpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBsZW4xID0gc2lnbmF0dXJlMS5wYXJhbXMubGVuZ3RoO1xuICAgICAgdmFyIGxlbjIgPSBzaWduYXR1cmUyLnBhcmFtcy5sZW5ndGg7XG4gICAgICB2YXIgcmVzdFBhcmFtMSA9IGhhc1Jlc3RQYXJhbShzaWduYXR1cmUxLnBhcmFtcyk7XG4gICAgICB2YXIgcmVzdFBhcmFtMiA9IGhhc1Jlc3RQYXJhbShzaWduYXR1cmUyLnBhcmFtcyk7XG5cbiAgICAgIHJldHVybiByZXN0UGFyYW0xXG4gICAgICAgICAgPyByZXN0UGFyYW0yID8gKGxlbjEgPT09IGxlbjIpIDogKGxlbjIgPj0gbGVuMSlcbiAgICAgICAgICA6IHJlc3RQYXJhbTIgPyAobGVuMSA+PSBsZW4yKSAgOiAobGVuMSA9PT0gbGVuMilcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSB0eXBlZCBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lICAgICAgICAgICAgICAgVGhlIG5hbWUgZm9yIHRoZSB0eXBlZCBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsIGZ1bmN0aW9uPn0gc2lnbmF0dXJlc01hcFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW4gb2JqZWN0IHdpdGggb25lIG9yXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZSBzaWduYXR1cmVzIGFzIGtleSwgYW5kIHRoZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY29ycmVzcG9uZGluZyB0byB0aGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSBhcyB2YWx1ZS5cbiAgICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gIFJldHVybnMgdGhlIGNyZWF0ZWQgdHlwZWQgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlVHlwZWRGdW5jdGlvbihuYW1lLCBzaWduYXR1cmVzTWFwKSB7XG4gICAgICBpZiAoT2JqZWN0LmtleXMoc2lnbmF0dXJlc01hcCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignTm8gc2lnbmF0dXJlcyBwcm92aWRlZCcpO1xuICAgICAgfVxuXG4gICAgICAvLyBwYXJzZSB0aGUgc2lnbmF0dXJlcywgYW5kIGNoZWNrIGZvciBjb25mbGljdHNcbiAgICAgIHZhciBwYXJzZWRTaWduYXR1cmVzID0gW107XG4gICAgICBPYmplY3Qua2V5cyhzaWduYXR1cmVzTWFwKVxuICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKHNpZ25hdHVyZSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlU2lnbmF0dXJlKHNpZ25hdHVyZSwgc2lnbmF0dXJlc01hcFtzaWduYXR1cmVdLCB0eXBlZC5jb252ZXJzaW9ucyk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZmlsdGVyKG5vdE51bGwpXG4gICAgICAgICAgLmZvckVhY2goZnVuY3Rpb24gKHBhcnNlZFNpZ25hdHVyZSkge1xuICAgICAgICAgICAgLy8gY2hlY2sgd2hldGhlciB0aGlzIHBhcmFtZXRlciBjb25mbGljdHMgd2l0aCBhbHJlYWR5IHBhcnNlZCBzaWduYXR1cmVzXG4gICAgICAgICAgICB2YXIgY29uZmxpY3RpbmdTaWduYXR1cmUgPSBmaW5kSW5BcnJheShwYXJzZWRTaWduYXR1cmVzLCBmdW5jdGlvbiAocykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFzQ29uZmxpY3RpbmdQYXJhbXMocywgcGFyc2VkU2lnbmF0dXJlKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoY29uZmxpY3RpbmdTaWduYXR1cmUpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ29uZmxpY3Rpbmcgc2lnbmF0dXJlcyBcIicgK1xuICAgICAgICAgICAgICAgICAgc3RyaW5naWZ5UGFyYW1zKGNvbmZsaWN0aW5nU2lnbmF0dXJlLnBhcmFtcykgKyAnXCIgYW5kIFwiJyArXG4gICAgICAgICAgICAgICAgICBzdHJpbmdpZnlQYXJhbXMocGFyc2VkU2lnbmF0dXJlLnBhcmFtcykgKyAnXCIuJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBhcnNlZFNpZ25hdHVyZXMucHVzaChwYXJzZWRTaWduYXR1cmUpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAvLyBzcGxpdCBhbmQgZmlsdGVyIHRoZSB0eXBlcyBvZiB0aGUgc2lnbmF0dXJlcywgYW5kIHRoZW4gb3JkZXIgdGhlbVxuICAgICAgdmFyIHNpZ25hdHVyZXMgPSBmbGF0TWFwKHBhcnNlZFNpZ25hdHVyZXMsIGZ1bmN0aW9uIChwYXJzZWRTaWduYXR1cmUpIHtcbiAgICAgICAgdmFyIHBhcmFtcyA9IHBhcnNlZFNpZ25hdHVyZSA/IHNwbGl0UGFyYW1zKHBhcnNlZFNpZ25hdHVyZS5wYXJhbXMsIGZhbHNlKSA6IFtdXG5cbiAgICAgICAgcmV0dXJuIHBhcmFtcy5tYXAoZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwYXJhbXM6IHBhcmFtcyxcbiAgICAgICAgICAgIGZuOiBwYXJzZWRTaWduYXR1cmUuZm5cbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgIH0pLmZpbHRlcihub3ROdWxsKTtcblxuICAgICAgc2lnbmF0dXJlcy5zb3J0KGNvbXBhcmVTaWduYXR1cmVzKTtcblxuICAgICAgLy8gd2UgY3JlYXRlIGEgaGlnaGx5IG9wdGltaXplZCBjaGVja3MgZm9yIHRoZSBmaXJzdCBjb3VwbGUgb2Ygc2lnbmF0dXJlcyB3aXRoIG1heCAyIGFyZ3VtZW50c1xuICAgICAgdmFyIG9rMCA9IHNpZ25hdHVyZXNbMF0gJiYgc2lnbmF0dXJlc1swXS5wYXJhbXMubGVuZ3RoIDw9IDIgJiYgIWhhc1Jlc3RQYXJhbShzaWduYXR1cmVzWzBdLnBhcmFtcyk7XG4gICAgICB2YXIgb2sxID0gc2lnbmF0dXJlc1sxXSAmJiBzaWduYXR1cmVzWzFdLnBhcmFtcy5sZW5ndGggPD0gMiAmJiAhaGFzUmVzdFBhcmFtKHNpZ25hdHVyZXNbMV0ucGFyYW1zKTtcbiAgICAgIHZhciBvazIgPSBzaWduYXR1cmVzWzJdICYmIHNpZ25hdHVyZXNbMl0ucGFyYW1zLmxlbmd0aCA8PSAyICYmICFoYXNSZXN0UGFyYW0oc2lnbmF0dXJlc1syXS5wYXJhbXMpO1xuICAgICAgdmFyIG9rMyA9IHNpZ25hdHVyZXNbM10gJiYgc2lnbmF0dXJlc1szXS5wYXJhbXMubGVuZ3RoIDw9IDIgJiYgIWhhc1Jlc3RQYXJhbShzaWduYXR1cmVzWzNdLnBhcmFtcyk7XG4gICAgICB2YXIgb2s0ID0gc2lnbmF0dXJlc1s0XSAmJiBzaWduYXR1cmVzWzRdLnBhcmFtcy5sZW5ndGggPD0gMiAmJiAhaGFzUmVzdFBhcmFtKHNpZ25hdHVyZXNbNF0ucGFyYW1zKTtcbiAgICAgIHZhciBvazUgPSBzaWduYXR1cmVzWzVdICYmIHNpZ25hdHVyZXNbNV0ucGFyYW1zLmxlbmd0aCA8PSAyICYmICFoYXNSZXN0UGFyYW0oc2lnbmF0dXJlc1s1XS5wYXJhbXMpO1xuICAgICAgdmFyIGFsbE9rID0gb2swICYmIG9rMSAmJiBvazIgJiYgb2szICYmIG9rNCAmJiBvazU7XG5cbiAgICAgIC8vIGNvbXBpbGUgdGhlIHRlc3RzXG4gICAgICB2YXIgdGVzdHMgPSBzaWduYXR1cmVzLm1hcChmdW5jdGlvbiAoc2lnbmF0dXJlKSB7XG4gICAgICAgIHJldHVybiBjb21waWxlVGVzdHMoc2lnbmF0dXJlLnBhcmFtcyk7XG4gICAgICB9KTtcblxuICAgICAgdmFyIHRlc3QwMCA9IG9rMCA/IGNvbXBpbGVUZXN0KHNpZ25hdHVyZXNbMF0ucGFyYW1zWzBdKSA6IG5vdE9rO1xuICAgICAgdmFyIHRlc3QxMCA9IG9rMSA/IGNvbXBpbGVUZXN0KHNpZ25hdHVyZXNbMV0ucGFyYW1zWzBdKSA6IG5vdE9rO1xuICAgICAgdmFyIHRlc3QyMCA9IG9rMiA/IGNvbXBpbGVUZXN0KHNpZ25hdHVyZXNbMl0ucGFyYW1zWzBdKSA6IG5vdE9rO1xuICAgICAgdmFyIHRlc3QzMCA9IG9rMyA/IGNvbXBpbGVUZXN0KHNpZ25hdHVyZXNbM10ucGFyYW1zWzBdKSA6IG5vdE9rO1xuICAgICAgdmFyIHRlc3Q0MCA9IG9rNCA/IGNvbXBpbGVUZXN0KHNpZ25hdHVyZXNbNF0ucGFyYW1zWzBdKSA6IG5vdE9rO1xuICAgICAgdmFyIHRlc3Q1MCA9IG9rNSA/IGNvbXBpbGVUZXN0KHNpZ25hdHVyZXNbNV0ucGFyYW1zWzBdKSA6IG5vdE9rO1xuXG4gICAgICB2YXIgdGVzdDAxID0gb2swID8gY29tcGlsZVRlc3Qoc2lnbmF0dXJlc1swXS5wYXJhbXNbMV0pIDogbm90T2s7XG4gICAgICB2YXIgdGVzdDExID0gb2sxID8gY29tcGlsZVRlc3Qoc2lnbmF0dXJlc1sxXS5wYXJhbXNbMV0pIDogbm90T2s7XG4gICAgICB2YXIgdGVzdDIxID0gb2syID8gY29tcGlsZVRlc3Qoc2lnbmF0dXJlc1syXS5wYXJhbXNbMV0pIDogbm90T2s7XG4gICAgICB2YXIgdGVzdDMxID0gb2szID8gY29tcGlsZVRlc3Qoc2lnbmF0dXJlc1szXS5wYXJhbXNbMV0pIDogbm90T2s7XG4gICAgICB2YXIgdGVzdDQxID0gb2s0ID8gY29tcGlsZVRlc3Qoc2lnbmF0dXJlc1s0XS5wYXJhbXNbMV0pIDogbm90T2s7XG4gICAgICB2YXIgdGVzdDUxID0gb2s1ID8gY29tcGlsZVRlc3Qoc2lnbmF0dXJlc1s1XS5wYXJhbXNbMV0pIDogbm90T2s7XG5cbiAgICAgIC8vIGNvbXBpbGUgdGhlIGZ1bmN0aW9uc1xuICAgICAgdmFyIGZucyA9IHNpZ25hdHVyZXMubWFwKGZ1bmN0aW9uKHNpZ25hdHVyZSkge1xuICAgICAgICByZXR1cm4gY29tcGlsZUFyZ3NQcmVwcm9jZXNzaW5nKHNpZ25hdHVyZS5wYXJhbXMsIHNpZ25hdHVyZS5mbilcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgZm4wID0gb2swID8gZm5zWzBdIDogdW5kZWY7XG4gICAgICB2YXIgZm4xID0gb2sxID8gZm5zWzFdIDogdW5kZWY7XG4gICAgICB2YXIgZm4yID0gb2syID8gZm5zWzJdIDogdW5kZWY7XG4gICAgICB2YXIgZm4zID0gb2szID8gZm5zWzNdIDogdW5kZWY7XG4gICAgICB2YXIgZm40ID0gb2s0ID8gZm5zWzRdIDogdW5kZWY7XG4gICAgICB2YXIgZm41ID0gb2s1ID8gZm5zWzVdIDogdW5kZWY7XG5cbiAgICAgIHZhciBsZW4wID0gb2swID8gc2lnbmF0dXJlc1swXS5wYXJhbXMubGVuZ3RoIDogLTE7XG4gICAgICB2YXIgbGVuMSA9IG9rMSA/IHNpZ25hdHVyZXNbMV0ucGFyYW1zLmxlbmd0aCA6IC0xO1xuICAgICAgdmFyIGxlbjIgPSBvazIgPyBzaWduYXR1cmVzWzJdLnBhcmFtcy5sZW5ndGggOiAtMTtcbiAgICAgIHZhciBsZW4zID0gb2szID8gc2lnbmF0dXJlc1szXS5wYXJhbXMubGVuZ3RoIDogLTE7XG4gICAgICB2YXIgbGVuNCA9IG9rNCA/IHNpZ25hdHVyZXNbNF0ucGFyYW1zLmxlbmd0aCA6IC0xO1xuICAgICAgdmFyIGxlbjUgPSBvazUgPyBzaWduYXR1cmVzWzVdLnBhcmFtcy5sZW5ndGggOiAtMTtcblxuICAgICAgLy8gc2ltcGxlIGFuZCBnZW5lcmljLCBidXQgYWxzbyBzbG93XG4gICAgICB2YXIgaVN0YXJ0ID0gYWxsT2sgPyA2IDogMDtcbiAgICAgIHZhciBpRW5kID0gc2lnbmF0dXJlcy5sZW5ndGg7XG4gICAgICB2YXIgZ2VuZXJpYyA9IGZ1bmN0aW9uIGdlbmVyaWMoKSB7XG4gICAgICAgICd1c2Ugc3RyaWN0JztcblxuICAgICAgICBmb3IgKHZhciBpID0gaVN0YXJ0OyBpIDwgaUVuZDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHRlc3RzW2ldKGFyZ3VtZW50cykpIHtcbiAgICAgICAgICAgIHJldHVybiBmbnNbaV0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBjcmVhdGVFcnJvcihuYW1lLCBhcmd1bWVudHMsIHNpZ25hdHVyZXMpO1xuICAgICAgfVxuXG4gICAgICAvLyBjcmVhdGUgdGhlIHR5cGVkIGZ1bmN0aW9uXG4gICAgICAvLyBmYXN0LCBzcGVjaWFsaXplZCB2ZXJzaW9uLiBGYWxscyBiYWNrIHRvIHRoZSBzbG93ZXIsIGdlbmVyaWMgb25lIGlmIG5lZWRlZFxuICAgICAgdmFyIGZuID0gZnVuY3Rpb24gZm4oYXJnMCwgYXJnMSkge1xuICAgICAgICAndXNlIHN0cmljdCc7XG5cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IGxlbjAgJiYgdGVzdDAwKGFyZzApICYmIHRlc3QwMShhcmcxKSkgeyByZXR1cm4gZm4wLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IGxlbjEgJiYgdGVzdDEwKGFyZzApICYmIHRlc3QxMShhcmcxKSkgeyByZXR1cm4gZm4xLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IGxlbjIgJiYgdGVzdDIwKGFyZzApICYmIHRlc3QyMShhcmcxKSkgeyByZXR1cm4gZm4yLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IGxlbjMgJiYgdGVzdDMwKGFyZzApICYmIHRlc3QzMShhcmcxKSkgeyByZXR1cm4gZm4zLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IGxlbjQgJiYgdGVzdDQwKGFyZzApICYmIHRlc3Q0MShhcmcxKSkgeyByZXR1cm4gZm40LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IGxlbjUgJiYgdGVzdDUwKGFyZzApICYmIHRlc3Q1MShhcmcxKSkgeyByZXR1cm4gZm41LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cblxuICAgICAgICByZXR1cm4gZ2VuZXJpYy5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgfVxuXG4gICAgICAvLyBhdHRhY2ggbmFtZSB0aGUgdHlwZWQgZnVuY3Rpb25cbiAgICAgIHRyeSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgJ25hbWUnLCB7dmFsdWU6IG5hbWV9KTtcbiAgICAgIH1cbiAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgLy8gb2xkIGJyb3dzZXJzIGRvIG5vdCBzdXBwb3J0IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBhbmQgc29tZSBkb24ndCBzdXBwb3J0IHNldHRpbmcgdGhlIG5hbWUgcHJvcGVydHlcbiAgICAgICAgLy8gdGhlIGZ1bmN0aW9uIG5hbWUgaXMgbm90IGVzc2VudGlhbCBmb3IgdGhlIGZ1bmN0aW9uaW5nLCBpdCdzIG1vc3RseSB1c2VmdWwgZm9yIGRlYnVnZ2luZyxcbiAgICAgICAgLy8gc28gaXQncyBmaW5lIHRvIGhhdmUgdW5uYW1lZCBmdW5jdGlvbnMuXG4gICAgICB9XG5cbiAgICAgIC8vIGF0dGFjaCBzaWduYXR1cmVzIHRvIHRoZSBmdW5jdGlvblxuICAgICAgZm4uc2lnbmF0dXJlcyA9IGNyZWF0ZVNpZ25hdHVyZXNNYXAoc2lnbmF0dXJlcyk7XG5cbiAgICAgIHJldHVybiBmbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUZXN0IHdoZXRoZXIgYSB0eXBlIHNob3VsZCBiZSBOT1QgYmUgaWdub3JlZFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlTmFtZVxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgZnVuY3Rpb24gbm90SWdub3JlKHR5cGVOYW1lKSB7XG4gICAgICByZXR1cm4gdHlwZWQuaWdub3JlLmluZGV4T2YodHlwZU5hbWUpID09PSAtMTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB0cmltIGEgc3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0cmltKHN0cikge1xuICAgICAgcmV0dXJuIHN0ci50cmltKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGVzdCB3aGV0aGVyIGEgc3RyaW5nIGlzIG5vdCBlbXB0eVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG5vdEVtcHR5KHN0cikge1xuICAgICAgcmV0dXJuICEhc3RyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHRlc3Qgd2hldGhlciBhIHZhbHVlIGlzIG5vdCBzdHJpY3QgZXF1YWwgdG8gbnVsbFxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG5vdE51bGwodmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSAhPT0gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUZXN0IHdoZXRoZXIgYSBwYXJhbWV0ZXIgaGFzIG5vIHR5cGVzIGRlZmluZWRcbiAgICAgKiBAcGFyYW0ge1BhcmFtfSBwYXJhbVxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNJbnZhbGlkUGFyYW0gKHBhcmFtKSB7XG4gICAgICByZXR1cm4gcGFyYW0udHlwZXMubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBhbGwgYnV0IHRoZSBsYXN0IGl0ZW1zIG9mIGFuIGFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyXG4gICAgICogQHJldHVybiB7QXJyYXl9XG4gICAgICovXG4gICAgZnVuY3Rpb24gaW5pdGlhbChhcnIpIHtcbiAgICAgIHJldHVybiBhcnIuc2xpY2UoMCwgYXJyLmxlbmd0aCAtIDEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJldHVybiB0aGUgbGFzdCBpdGVtIG9mIGFuIGFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyXG4gICAgICogQHJldHVybiB7Kn1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsYXN0KGFycikge1xuICAgICAgcmV0dXJuIGFyclthcnIubGVuZ3RoIC0gMV07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2xpY2UgYW4gYXJyYXkgb3IgZnVuY3Rpb24gQXJndW1lbnRzXG4gICAgICogQHBhcmFtIHtBcnJheSB8IEFyZ3VtZW50cyB8IElBcmd1bWVudHN9IGFyclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kXVxuICAgICAqIEByZXR1cm4ge0FycmF5fVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNsaWNlKGFyciwgc3RhcnQsIGVuZCkge1xuICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyciwgc3RhcnQsIGVuZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGVzdCB3aGV0aGVyIGFuIGFycmF5IGNvbnRhaW5zIHNvbWUgaXRlbVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gICAgICogQHBhcmFtIHsqfSBpdGVtXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIGFycmF5IGNvbnRhaW5zIGl0ZW0sIGZhbHNlIGlmIG5vdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb250YWlucyhhcnJheSwgaXRlbSkge1xuICAgICAgcmV0dXJuIGFycmF5LmluZGV4T2YoaXRlbSkgIT09IC0xO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRlc3Qgd2hldGhlciB0d28gYXJyYXlzIGhhdmUgb3ZlcmxhcHBpbmcgaXRlbXNcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheTFcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheTJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgd2hlbiBhdCBsZWFzdCBvbmUgaXRlbSBleGlzdHMgaW4gYm90aCBhcnJheXNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBoYXNPdmVybGFwKGFycmF5MSwgYXJyYXkyKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5MS5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoY29udGFpbnMoYXJyYXkyLCBhcnJheTFbaV0pKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgZmlyc3QgaXRlbSBmcm9tIGFuIGFycmF5IGZvciB3aGljaCB0ZXN0KGFycltpXSkgcmV0dXJucyB0cnVlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gdGVzdFxuICAgICAqIEByZXR1cm4geyogfCB1bmRlZmluZWR9IFJldHVybnMgdGhlIGZpcnN0IG1hdGNoaW5nIGl0ZW1cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBvciB1bmRlZmluZWQgd2hlbiB0aGVyZSBpcyBubyBtYXRjaFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZpbmRJbkFycmF5KGFyciwgdGVzdCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHRlc3QoYXJyW2ldKSkge1xuICAgICAgICAgIHJldHVybiBhcnJbaV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlsdGVyIHVuaXF1ZSBpdGVtcyBvZiBhbiBhcnJheSB3aXRoIHN0cmluZ3NcbiAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBhcnJcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmdbXX1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB1bmlxKGFycikge1xuICAgICAgdmFyIGVudHJpZXMgPSB7fVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZW50cmllc1thcnJbaV1dID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyhlbnRyaWVzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGbGF0IG1hcCB0aGUgcmVzdWx0IGludm9raW5nIGEgY2FsbGJhY2sgZm9yIGV2ZXJ5IGl0ZW0gaW4gYW4gYXJyYXkuXG4gICAgICogaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vc2FtZ2lsZXMvNzYyZWUzMzdkZmY0ODYyM2U3MjlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICAgICAqIEByZXR1cm4ge0FycmF5fVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZsYXRNYXAoYXJyLCBjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sIGFyci5tYXAoY2FsbGJhY2spKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZSB0aGUgZnVuY3Rpb24gbmFtZSBmcm9tIGEgc2V0IG9mIHR5cGVkIGZ1bmN0aW9ucyxcbiAgICAgKiBhbmQgY2hlY2sgd2hldGhlciB0aGUgbmFtZSBvZiBhbGwgZnVuY3Rpb25zIG1hdGNoIChpZiBnaXZlbilcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uW119IGZuc1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldE5hbWUgKGZucykge1xuICAgICAgdmFyIG5hbWUgPSAnJztcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGZuID0gZm5zW2ldO1xuXG4gICAgICAgIC8vIGNoZWNrIHdoZXRoZXIgdGhlIG5hbWVzIGFyZSB0aGUgc2FtZSB3aGVuIGRlZmluZWRcbiAgICAgICAgaWYgKCh0eXBlb2YgZm4uc2lnbmF0dXJlcyA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGZuLnNpZ25hdHVyZSA9PT0gJ3N0cmluZycpICYmIGZuLm5hbWUgIT09ICcnKSB7XG4gICAgICAgICAgaWYgKG5hbWUgPT09ICcnKSB7XG4gICAgICAgICAgICBuYW1lID0gZm4ubmFtZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAobmFtZSAhPT0gZm4ubmFtZSkge1xuICAgICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcignRnVuY3Rpb24gbmFtZXMgZG8gbm90IG1hdGNoIChleHBlY3RlZDogJyArIG5hbWUgKyAnLCBhY3R1YWw6ICcgKyBmbi5uYW1lICsgJyknKTtcbiAgICAgICAgICAgIGVyci5kYXRhID0ge1xuICAgICAgICAgICAgICBhY3R1YWw6IGZuLm5hbWUsXG4gICAgICAgICAgICAgIGV4cGVjdGVkOiBuYW1lXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmFtZTtcbiAgICB9XG5cbiAgICAvLyBleHRyYWN0IGFuZCBtZXJnZSBhbGwgc2lnbmF0dXJlcyBvZiBhIGxpc3Qgd2l0aCB0eXBlZCBmdW5jdGlvbnNcbiAgICBmdW5jdGlvbiBleHRyYWN0U2lnbmF0dXJlcyhmbnMpIHtcbiAgICAgIHZhciBlcnI7XG4gICAgICB2YXIgc2lnbmF0dXJlc01hcCA9IHt9O1xuXG4gICAgICBmdW5jdGlvbiB2YWxpZGF0ZVVuaXF1ZShfc2lnbmF0dXJlLCBfZm4pIHtcbiAgICAgICAgaWYgKHNpZ25hdHVyZXNNYXAuaGFzT3duUHJvcGVydHkoX3NpZ25hdHVyZSkgJiYgX2ZuICE9PSBzaWduYXR1cmVzTWFwW19zaWduYXR1cmVdKSB7XG4gICAgICAgICAgZXJyID0gbmV3IEVycm9yKCdTaWduYXR1cmUgXCInICsgX3NpZ25hdHVyZSArICdcIiBpcyBkZWZpbmVkIHR3aWNlJyk7XG4gICAgICAgICAgZXJyLmRhdGEgPSB7c2lnbmF0dXJlOiBfc2lnbmF0dXJlfTtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgLy8gZWxzZTogYm90aCBzaWduYXR1cmVzIHBvaW50IHRvIHRoZSBzYW1lIGZ1bmN0aW9uLCB0aGF0J3MgZmluZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZm5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBmbiA9IGZuc1tpXTtcblxuICAgICAgICAvLyB0ZXN0IHdoZXRoZXIgdGhpcyBpcyBhIHR5cGVkLWZ1bmN0aW9uXG4gICAgICAgIGlmICh0eXBlb2YgZm4uc2lnbmF0dXJlcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAvLyBtZXJnZSB0aGUgc2lnbmF0dXJlc1xuICAgICAgICAgIGZvciAodmFyIHNpZ25hdHVyZSBpbiBmbi5zaWduYXR1cmVzKSB7XG4gICAgICAgICAgICBpZiAoZm4uc2lnbmF0dXJlcy5oYXNPd25Qcm9wZXJ0eShzaWduYXR1cmUpKSB7XG4gICAgICAgICAgICAgIHZhbGlkYXRlVW5pcXVlKHNpZ25hdHVyZSwgZm4uc2lnbmF0dXJlc1tzaWduYXR1cmVdKTtcbiAgICAgICAgICAgICAgc2lnbmF0dXJlc01hcFtzaWduYXR1cmVdID0gZm4uc2lnbmF0dXJlc1tzaWduYXR1cmVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgZm4uc2lnbmF0dXJlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHZhbGlkYXRlVW5pcXVlKGZuLnNpZ25hdHVyZSwgZm4pO1xuICAgICAgICAgIHNpZ25hdHVyZXNNYXBbZm4uc2lnbmF0dXJlXSA9IGZuO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGVyciA9IG5ldyBUeXBlRXJyb3IoJ0Z1bmN0aW9uIGlzIG5vIHR5cGVkLWZ1bmN0aW9uIChpbmRleDogJyArIGkgKyAnKScpO1xuICAgICAgICAgIGVyci5kYXRhID0ge2luZGV4OiBpfTtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNpZ25hdHVyZXNNYXA7XG4gICAgfVxuXG4gICAgdHlwZWQgPSBjcmVhdGVUeXBlZEZ1bmN0aW9uKCd0eXBlZCcsIHtcbiAgICAgICdzdHJpbmcsIE9iamVjdCc6IGNyZWF0ZVR5cGVkRnVuY3Rpb24sXG4gICAgICAnT2JqZWN0JzogZnVuY3Rpb24gKHNpZ25hdHVyZXNNYXApIHtcbiAgICAgICAgLy8gZmluZCBleGlzdGluZyBuYW1lXG4gICAgICAgIHZhciBmbnMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgc2lnbmF0dXJlIGluIHNpZ25hdHVyZXNNYXApIHtcbiAgICAgICAgICBpZiAoc2lnbmF0dXJlc01hcC5oYXNPd25Qcm9wZXJ0eShzaWduYXR1cmUpKSB7XG4gICAgICAgICAgICBmbnMucHVzaChzaWduYXR1cmVzTWFwW3NpZ25hdHVyZV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgbmFtZSA9IGdldE5hbWUoZm5zKTtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVR5cGVkRnVuY3Rpb24obmFtZSwgc2lnbmF0dXJlc01hcCk7XG4gICAgICB9LFxuICAgICAgJy4uLkZ1bmN0aW9uJzogZnVuY3Rpb24gKGZucykge1xuICAgICAgICByZXR1cm4gY3JlYXRlVHlwZWRGdW5jdGlvbihnZXROYW1lKGZucyksIGV4dHJhY3RTaWduYXR1cmVzKGZucykpO1xuICAgICAgfSxcbiAgICAgICdzdHJpbmcsIC4uLkZ1bmN0aW9uJzogZnVuY3Rpb24gKG5hbWUsIGZucykge1xuICAgICAgICByZXR1cm4gY3JlYXRlVHlwZWRGdW5jdGlvbihuYW1lLCBleHRyYWN0U2lnbmF0dXJlcyhmbnMpKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHR5cGVkLmNyZWF0ZSA9IGNyZWF0ZTtcbiAgICB0eXBlZC50eXBlcyA9IF90eXBlcztcbiAgICB0eXBlZC5jb252ZXJzaW9ucyA9IF9jb252ZXJzaW9ucztcbiAgICB0eXBlZC5pZ25vcmUgPSBfaWdub3JlO1xuICAgIHR5cGVkLmNvbnZlcnQgPSBjb252ZXJ0O1xuICAgIHR5cGVkLmZpbmQgPSBmaW5kO1xuXG4gICAgLyoqXG4gICAgICogYWRkIGEgdHlwZVxuICAgICAqIEBwYXJhbSB7e25hbWU6IHN0cmluZywgdGVzdDogZnVuY3Rpb259fSB0eXBlXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbYmVmb3JlT2JqZWN0VGVzdD10cnVlXVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB0cnVlLCB0aGUgbmV3IHRlc3Qgd2lsbCBiZSBpbnNlcnRlZCBiZWZvcmVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHRlc3Qgd2l0aCBuYW1lICdPYmplY3QnIChpZiBhbnkpLCBzaW5jZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0cyBmb3IgT2JqZWN0IG1hdGNoIEFycmF5IGFuZCBjbGFzc2VzIHRvby5cbiAgICAgKi9cbiAgICB0eXBlZC5hZGRUeXBlID0gZnVuY3Rpb24gKHR5cGUsIGJlZm9yZU9iamVjdFRlc3QpIHtcbiAgICAgIGlmICghdHlwZSB8fCB0eXBlb2YgdHlwZS5uYW1lICE9PSAnc3RyaW5nJyB8fCB0eXBlb2YgdHlwZS50ZXN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdCB3aXRoIHByb3BlcnRpZXMge25hbWU6IHN0cmluZywgdGVzdDogZnVuY3Rpb259IGV4cGVjdGVkJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChiZWZvcmVPYmplY3RUZXN0ICE9PSBmYWxzZSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHR5cGVkLnR5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHR5cGVkLnR5cGVzW2ldLm5hbWUgPT09ICdPYmplY3QnKSB7XG4gICAgICAgICAgICB0eXBlZC50eXBlcy5zcGxpY2UoaSwgMCwgdHlwZSk7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdHlwZWQudHlwZXMucHVzaCh0eXBlKTtcbiAgICB9O1xuXG4gICAgLy8gYWRkIGEgY29udmVyc2lvblxuICAgIHR5cGVkLmFkZENvbnZlcnNpb24gPSBmdW5jdGlvbiAoY29udmVyc2lvbikge1xuICAgICAgaWYgKCFjb252ZXJzaW9uXG4gICAgICAgICAgfHwgdHlwZW9mIGNvbnZlcnNpb24uZnJvbSAhPT0gJ3N0cmluZydcbiAgICAgICAgICB8fCB0eXBlb2YgY29udmVyc2lvbi50byAhPT0gJ3N0cmluZydcbiAgICAgICAgICB8fCB0eXBlb2YgY29udmVyc2lvbi5jb252ZXJ0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdCB3aXRoIHByb3BlcnRpZXMge2Zyb206IHN0cmluZywgdG86IHN0cmluZywgY29udmVydDogZnVuY3Rpb259IGV4cGVjdGVkJyk7XG4gICAgICB9XG5cbiAgICAgIHR5cGVkLmNvbnZlcnNpb25zLnB1c2goY29udmVyc2lvbik7XG4gICAgfTtcblxuICAgIHJldHVybiB0eXBlZDtcbiAgfVxuXG4gIHJldHVybiBjcmVhdGUoKTtcbn0pKTsiXX0= +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJsaWIvcWFzbV9pbXBvcnQvUUFTTUltcG9ydC5qcyIsImxpYi9xYXNtX2ltcG9ydC9RQVNNTGV4ZXIuanMiLCJsaWIvcWFzbV9pbXBvcnQvUUFTTUxpc3RlbmVyLmpzIiwibGliL3Fhc21faW1wb3J0L1FBU01QYXJzZXIuanMiLCJsaWIvcXVhbnR1bS1jaXJjdWl0LmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9CdWZmZXJlZFRva2VuU3RyZWFtLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9DaGFyU3RyZWFtcy5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvQ29tbW9uVG9rZW5GYWN0b3J5LmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9Db21tb25Ub2tlblN0cmVhbS5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvRmlsZVN0cmVhbS5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvSW5wdXRTdHJlYW0uanMiLCJub2RlX21vZHVsZXMvYW50bHI0L0ludGVydmFsU2V0LmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9MTDFBbmFseXplci5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvTGV4ZXIuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L1BhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvUGFyc2VyUnVsZUNvbnRleHQuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L1ByZWRpY3Rpb25Db250ZXh0LmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9SZWNvZ25pemVyLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9SdWxlQ29udGV4dC5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvVG9rZW4uanMiLCJub2RlX21vZHVsZXMvYW50bHI0L1V0aWxzLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vQVROLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vQVROQ29uZmlnLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vQVROQ29uZmlnU2V0LmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vQVRORGVzZXJpYWxpemF0aW9uT3B0aW9ucy5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvYXRuL0FUTkRlc2VyaWFsaXplci5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvYXRuL0FUTlNpbXVsYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvYXRuL0FUTlN0YXRlLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vQVROVHlwZS5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvYXRuL0xleGVyQVROU2ltdWxhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vTGV4ZXJBY3Rpb24uanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2F0bi9MZXhlckFjdGlvbkV4ZWN1dG9yLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vUGFyc2VyQVROU2ltdWxhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vUHJlZGljdGlvbk1vZGUuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2F0bi9TZW1hbnRpY0NvbnRleHQuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2F0bi9UcmFuc2l0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vaW5kZXguanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2RmYS9ERkEuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2RmYS9ERkFTZXJpYWxpemVyLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9kZmEvREZBU3RhdGUuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2RmYS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvZXJyb3IvRGlhZ25vc3RpY0Vycm9yTGlzdGVuZXIuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2Vycm9yL0Vycm9yTGlzdGVuZXIuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2Vycm9yL0Vycm9yU3RyYXRlZ3kuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2Vycm9yL0Vycm9ycy5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvZXJyb3IvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9wb2x5ZmlsbHMvY29kZXBvaW50YXQuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L3BvbHlmaWxscy9mcm9tY29kZXBvaW50LmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC90cmVlL1RyZWUuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L3RyZWUvVHJlZXMuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L3RyZWUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9saWIvX2VtcHR5LmpzIiwibm9kZV9tb2R1bGVzL2NvbXBsZXguanMvY29tcGxleC5qcyIsIm5vZGVfbW9kdWxlcy9kZWNpbWFsLmpzL2RlY2ltYWwuanMiLCJub2RlX21vZHVsZXMvZXNjYXBlLWxhdGV4L2Rpc3QvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZnJhY3Rpb24uanMvZnJhY3Rpb24uanMiLCJub2RlX21vZHVsZXMvamF2YXNjcmlwdC1uYXR1cmFsLXNvcnQvbmF0dXJhbFNvcnQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9jb25zdGFudHMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9jb3JlL2NvbmZpZy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2NvcmUvY3JlYXRlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvY29yZS9mdW5jdGlvbi9jb25maWcuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9jb3JlL2Z1bmN0aW9uL2RlcHJlY2F0ZWRJbXBvcnQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9jb3JlL2Z1bmN0aW9uL2ltcG9ydC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2NvcmUvZnVuY3Rpb24vdHlwZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9hbGxGYWN0b3JpZXNBbnkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9jb25maWdSZWFkb25seS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQWJzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBY2Nlc3Nvck5vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Fjb3MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Fjb3NoLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBY290LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBY290aC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQWNzYy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQWNzY2guZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FkZC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBbmQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FwcGx5LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBcHBseVRyYW5zZm9ybS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQXJnLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBcnJheU5vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FzZWMuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FzZWNoLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBc2luLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBc2luaC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQXNzaWdubWVudE5vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0F0YW4uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0F0YW4yLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBdGFuaC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQXRvbWljTWFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQXZvZ2Fkcm8uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0JlbGxOdW1iZXJzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQmlnbnVtYmVyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNCaXRBbmQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0JpdE5vdC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQml0T3IuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0JpdFhvci5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQmxvY2tOb2RlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNCb2hyTWFnbmV0b24uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0JvaHJSYWRpdXMuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0JvbHR6bWFubi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQm9vbGVhbi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ2F0YWxhbi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ2JydC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ2VpbC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ2hhaW4uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NoYWluQ2xhc3MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NsYXNzaWNhbEVsZWN0cm9uUmFkaXVzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDbG9uZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29sdW1uLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb2x1bW5UcmFuc2Zvcm0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbWJpbmF0aW9ucy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29tYmluYXRpb25zV2l0aFJlcC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29tcGFyZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbXBhcmVUZXh0LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb21waWxlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb21wbGV4LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbXBvc2l0aW9uLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb25jYXQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbmNhdFRyYW5zZm9ybS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29uZGl0aW9uYWxOb2RlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb25kdWN0YW5jZVF1YW50dW0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbmouZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbnN0YW50Tm9kZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29zLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb3NoLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb3QuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvdGguZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvdWxvbWIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NyZWF0ZVVuaXQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Nyb3NzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDc2MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NzY2guZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0N0cmFuc3Bvc2UuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0N1YmUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RlZXBFcXVhbC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRGVwcmVjYXRlZEV2YWwuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RlcHJlY2F0ZWRUeXBlb2YuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RlcHJlY2F0ZWRWYXIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Rlcml2YXRpdmUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RldC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRGV1dGVyb25NYXNzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNEaWFnLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNEaXN0YW5jZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRGl2aWRlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RvdC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRG90RGl2aWRlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNEb3RNdWx0aXBseS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRG90UG93LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNFLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNFZmltb3ZGYWN0b3IuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VpZ3MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VsZWN0cmljQ29uc3RhbnQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VsZWN0cm9uTWFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRWxlbWVudGFyeUNoYXJnZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRXF1YWwuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNFcXVhbFRleHQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VyZi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRXZhbHVhdGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0V4cC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRXhwbS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRXhwbTEuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0V5ZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmFjdG9yaWFsLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGYWxzZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmFyYWRheS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmVybWlDb3VwbGluZy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmlib25hY2NpSGVhcENsYXNzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGaWx0ZXIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZpbHRlclRyYW5zZm9ybS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmluZVN0cnVjdHVyZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmlyc3RSYWRpYXRpb24uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZpeC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmxhdHRlbi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmxvb3IuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZvckVhY2guZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZvckVhY2hUcmFuc2Zvcm0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Zvcm1hdC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRnJhY3Rpb24uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Z1bmN0aW9uQXNzaWdubWVudE5vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Z1bmN0aW9uTm9kZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzR2FtbWEuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0dhc0NvbnN0YW50LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNHY2QuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0dldE1hdHJpeERhdGFUeXBlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNHcmF2aXRhdGlvbkNvbnN0YW50LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNHcmF2aXR5LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNIYXJ0cmVlRW5lcmd5LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNIYXNOdW1lcmljVmFsdWUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0hlbHAuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0hlbHBDbGFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSHlwb3QuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0kuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0lkZW50aXR5LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJbS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSW1tdXRhYmxlRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSW5kZXguZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0luZGV4Tm9kZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSW5kZXhUcmFuc2Zvcm0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0luZmluaXR5LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJbnRlcnNlY3QuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ludi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSXNJbnRlZ2VyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJc05hTi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSXNOZWdhdGl2ZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSXNOdW1lcmljLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJc1Bvc2l0aXZlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJc1ByaW1lLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJc1plcm8uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0tsZGl2ZXJnZW5jZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzS2xpdHppbmcuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0tyb24uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xOMTAuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xOMi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTE9HMTBFLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMT0cyRS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTGFyZ2VyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMYXJnZXJFcS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTGNtLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMZWZ0U2hpZnQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xvZy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTG9nMTAuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xvZzFwLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMb2cyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMb3NjaG1pZHQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xzb2x2ZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTHVwLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMdXNvbHZlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNYWQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01hZ25ldGljQ29uc3RhbnQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01hZ25ldGljRmx1eFF1YW50dW0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01hcC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTWFwVHJhbnNmb3JtLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01hdHJpeENsYXNzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNYXguZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01heFRyYW5zZm9ybS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTWVhbi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTWVhblRyYW5zZm9ybS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTWVkaWFuLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNaW4uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01pblRyYW5zZm9ybS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTW9kLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNb2RlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNb2xhck1hc3MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01vbGFyTWFzc0MxMi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTW9sYXJQbGFuY2tDb25zdGFudC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTW9sYXJWb2x1bWUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc011bHRpbm9taWFsLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNdWx0aXBseS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc05hTi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTmV1dHJvbk1hc3MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc05vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc05vcm0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc05vdC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTnRoUm9vdC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTnRoUm9vdHMuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc051Y2xlYXJNYWduZXRvbi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTnVsbC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTnVtYmVyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNOdW1lcmljLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNPYmplY3ROb2RlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNPbmVzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNPcGVyYXRvck5vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc09yLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQYXJlbnRoZXNpc05vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1BhcnNlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQYXJzZXIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1BhcnNlckNsYXNzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQYXJ0aXRpb25TZWxlY3QuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1Blcm11dGF0aW9ucy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGhpLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQaS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGlja1JhbmRvbS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGxhbmNrQ2hhcmdlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQbGFuY2tDb25zdGFudC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGxhbmNrTGVuZ3RoLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQbGFuY2tNYXNzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQbGFuY2tUZW1wZXJhdHVyZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGxhbmNrVGltZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUG93LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQcmludC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUHJvZC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUHJvdG9uTWFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUXIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1F1YW50aWxlU2VxLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNRdWFudHVtT2ZDaXJjdWxhdGlvbi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmFuZG9tLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYW5kb21JbnQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1JhbmdlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYW5nZUNsYXNzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYW5nZU5vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1JhbmdlVHJhbnNmb3JtLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYXRpb25hbGl6ZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1JlZHVjZWRQbGFuY2tDb25zdGFudC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmVsYXRpb25hbE5vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1JlcGxhY2VyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSZXNoYXBlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSZXNpemUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1Jlc3VsdFNldC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmV2aXZlci5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmlnaHRBcml0aFNoaWZ0LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSaWdodExvZ1NoaWZ0LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSb3VuZC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUm93LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSb3dUcmFuc2Zvcm0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1J5ZGJlcmcuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NRUlQxXzIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NRUlQyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTYWNrdXJUZXRyb2RlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZWMuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NlY2guZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NlY29uZFJhZGlhdGlvbi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0Q2FydGVzaWFuLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZXREaWZmZXJlbmNlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZXREaXN0aW5jdC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0SW50ZXJzZWN0LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZXRJc1N1YnNldC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0TXVsdGlwbGljaXR5LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZXRQb3dlcnNldC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0U2l6ZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0U3ltRGlmZmVyZW5jZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0VW5pb24uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NpZ24uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NpbXBsaWZ5LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTaW4uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NpbmguZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NpemUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NsdS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU21hbGxlci5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU21hbGxlckVxLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTb3J0LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTcGFDbGFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3BhcnNlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3BlZWRPZkxpZ2h0LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTcGxpdFVuaXQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NxcnQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NxcnRtLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTcXVhcmUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NxdWVlemUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N0ZC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3RkVHJhbnNmb3JtLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTdGVmYW5Cb2x0em1hbm4uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N0aXJsaW5nUzIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N0cmluZy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3Vic2V0LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTdWJzZXRUcmFuc2Zvcm0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N1YnRyYWN0LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTdW0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N1bVRyYW5zZm9ybS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3ltYm9sTm9kZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVGFuLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUYW5oLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUYXUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1Rob21zb25Dcm9zc1NlY3Rpb24uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1RvLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUcmFjZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVHJhbnNwb3NlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUcnVlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUeXBlT2YuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNVbmFyeVBsdXMuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1VuZXF1YWwuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVW5pdEZ1bmN0aW9uLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNVcHBlcmNhc2VFLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNVcHBlcmNhc2VQaS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVXNvbHZlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNWYWN1dW1JbXBlZGFuY2UuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1ZhcmlhbmNlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNWYXJpYW5jZVRyYW5zZm9ybS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVmVyc2lvbi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzV2Vha01peGluZ0FuZ2xlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNXaWVuRGlzcGxhY2VtZW50LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNYZ2NkLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNYb3IuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1plcm9zLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcHJlY2F0ZWRBbnkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9pbXB1cmVGdW5jdGlvbnNBbnkuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvbWFpbkFueS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L3B1cmVGdW5jdGlvbnNBbnkuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvdHlwZUNoZWNrcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Vycm9yL0FyZ3VtZW50c0Vycm9yLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXJyb3IvRGltZW5zaW9uRXJyb3IuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lcnJvci9JbmRleEVycm9yLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9IZWxwLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdGFudHMvSW5maW5pdHkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdGFudHMvTE4xMC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0YW50cy9MTjIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdGFudHMvTE9HMTBFLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RhbnRzL0xPRzJFLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RhbnRzL05hTi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0YW50cy9TUVJUMV8yLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RhbnRzL1NRUlQyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RhbnRzL2UuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdGFudHMvZmFsc2UuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdGFudHMvaS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0YW50cy9udWxsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RhbnRzL3BoaS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0YW50cy9waS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0YW50cy90YXUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdGFudHMvdHJ1ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0YW50cy92ZXJzaW9uLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RydWN0aW9uL2JpZ251bWJlci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0cnVjdGlvbi9ib29sZWFuLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RydWN0aW9uL2NvbXBsZXguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdHJ1Y3Rpb24vY3JlYXRlVW5pdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0cnVjdGlvbi9mcmFjdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0cnVjdGlvbi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0cnVjdGlvbi9tYXRyaXguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdHJ1Y3Rpb24vbnVtYmVyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RydWN0aW9uL3NwYXJzZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0cnVjdGlvbi9zcGxpdFVuaXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdHJ1Y3Rpb24vc3RyaW5nLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RydWN0aW9uL3VuaXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb3JlL2NvbmZpZy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvcmUvaW1wb3J0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29yZS90eXBlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2VtYmVkZGVkRG9jcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FsZ2VicmEvZGVyaXZhdGl2ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FsZ2VicmEvbHNvbHZlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYWxnZWJyYS9sdXAuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hbGdlYnJhL2x1c29sdmUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hbGdlYnJhL3FyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYWxnZWJyYS9yYXRpb25hbGl6ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FsZ2VicmEvc2ltcGxpZnkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hbGdlYnJhL3NsdS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FsZ2VicmEvdXNvbHZlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9hYnMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL2FkZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvY2JydC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvY2VpbC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvY3ViZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvZGl2aWRlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9kb3REaXZpZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL2RvdE11bHRpcGx5LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9kb3RQb3cuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL2V4cC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvZXhwbS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvZXhwbTEuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL2ZpeC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvZmxvb3IuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL2djZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvaHlwb3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL2xjbS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvbG9nLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9sb2cxMC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvbG9nMXAuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL2xvZzIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL21vZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvbXVsdGlwbHkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL25vcm0uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL250aFJvb3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL250aFJvb3RzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9wb3cuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL3JvdW5kLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9zaWduLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9zcXJ0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9zcXJ0bS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvc3F1YXJlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9zdWJ0cmFjdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvdW5hcnlNaW51cy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvdW5hcnlQbHVzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy94Z2NkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYml0d2lzZS9iaXRBbmQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9iaXR3aXNlL2JpdE5vdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2JpdHdpc2UvYml0T3IuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9iaXR3aXNlL2JpdFhvci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2JpdHdpc2UvbGVmdFNoaWZ0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYml0d2lzZS9yaWdodEFyaXRoU2hpZnQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9iaXR3aXNlL3JpZ2h0TG9nU2hpZnQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9jb21iaW5hdG9yaWNzL2JlbGxOdW1iZXJzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vY29tYmluYXRvcmljcy9jYXRhbGFuLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vY29tYmluYXRvcmljcy9jb21wb3NpdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2NvbWJpbmF0b3JpY3Mvc3RpcmxpbmdTMi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2NvbXBsZXgvYXJnLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vY29tcGxleC9jb25qLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vY29tcGxleC9pbS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2NvbXBsZXgvcmUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9leHByZXNzaW9uL2V2YWx1YXRlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vZXhwcmVzc2lvbi9oZWxwLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vZ2VvbWV0cnkvZGlzdGFuY2UuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9nZW9tZXRyeS9pbnRlcnNlY3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9sb2dpY2FsL2FuZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2xvZ2ljYWwvbm90LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbG9naWNhbC9vci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2xvZ2ljYWwveG9yLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L2NvbHVtbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9jb25jYXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvY3Jvc3MuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvY3RyYW5zcG9zZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9kZXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvZGlhZy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9kb3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvZWlncy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9maWx0ZXIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvZmxhdHRlbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9mb3JFYWNoLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L2dldE1hdHJpeERhdGFUeXBlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L2lkZW50aXR5LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L2ludi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9rcm9uLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L21hcC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9vbmVzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L3BhcnRpdGlvblNlbGVjdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9yYW5nZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9yZXNoYXBlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L3Jlc2l6ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9yb3cuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvc2l6ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9zb3J0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L3NxdWVlemUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvc3Vic2V0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L3RyYWNlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L3RyYW5zcG9zZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC96ZXJvcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2NvbWJpbmF0aW9ucy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2NvbWJpbmF0aW9uc1dpdGhSZXAuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9wcm9iYWJpbGl0eS9mYWN0b3JpYWwuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9wcm9iYWJpbGl0eS9nYW1tYS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2tsZGl2ZXJnZW5jZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L211bHRpbm9taWFsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vcHJvYmFiaWxpdHkvcGVybXV0YXRpb25zLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vcHJvYmFiaWxpdHkvcGlja1JhbmRvbS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3JhbmRvbS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3JhbmRvbUludC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3JlbGF0aW9uYWwvY29tcGFyZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3JlbGF0aW9uYWwvY29tcGFyZU5hdHVyYWwuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9yZWxhdGlvbmFsL2NvbXBhcmVUZXh0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vcmVsYXRpb25hbC9kZWVwRXF1YWwuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9yZWxhdGlvbmFsL2VxdWFsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vcmVsYXRpb25hbC9lcXVhbFRleHQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9yZWxhdGlvbmFsL2xhcmdlci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3JlbGF0aW9uYWwvbGFyZ2VyRXEuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9yZWxhdGlvbmFsL3NtYWxsZXIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9yZWxhdGlvbmFsL3NtYWxsZXJFcS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3JlbGF0aW9uYWwvdW5lcXVhbC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3NldC9zZXRDYXJ0ZXNpYW4uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zZXQvc2V0RGlmZmVyZW5jZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3NldC9zZXREaXN0aW5jdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3NldC9zZXRJbnRlcnNlY3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zZXQvc2V0SXNTdWJzZXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zZXQvc2V0TXVsdGlwbGljaXR5LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vc2V0L3NldFBvd2Vyc2V0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vc2V0L3NldFNpemUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zZXQvc2V0U3ltRGlmZmVyZW5jZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3NldC9zZXRVbmlvbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3NwZWNpYWwvZXJmLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vc3RhdGlzdGljcy9tYWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zdGF0aXN0aWNzL21heC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbWVhbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbWVkaWFuLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vc3RhdGlzdGljcy9taW4uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zdGF0aXN0aWNzL21vZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zdGF0aXN0aWNzL3Byb2QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zdGF0aXN0aWNzL3F1YW50aWxlU2VxLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vc3RhdGlzdGljcy9zdGQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zdGF0aXN0aWNzL3N1bS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3N0YXRpc3RpY3MvdmFyaWFuY2UuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNvcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY29zaC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY290LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjb3RoLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjc2MuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNzY2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXNlYy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hc2VjaC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hc2luLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2FzaW5oLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2F0YW4uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXRhbjIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXRhbmguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvY29zLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Nvc2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvY290LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2NvdGguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvY3NjLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2NzY2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvc2VjLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NlY2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvc2luLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NpbmguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvdGFuLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3RhbmguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi91bml0cy90by5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3V0aWxzL2Nsb25lLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdXRpbHMvZm9ybWF0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdXRpbHMvaGFzTnVtZXJpY1ZhbHVlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdXRpbHMvaXNJbnRlZ2VyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdXRpbHMvaXNOYU4uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi91dGlscy9pc05lZ2F0aXZlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdXRpbHMvaXNOdW1lcmljLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdXRpbHMvaXNQb3NpdGl2ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3V0aWxzL2lzUHJpbWUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi91dGlscy9pc1plcm8uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi91dGlscy9udW1lcmljLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdXRpbHMvdHlwZU9mLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9mdW5jdGlvbi9jb21waWxlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9mdW5jdGlvbi9ldmFsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9mdW5jdGlvbi9ldmFsdWF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZnVuY3Rpb24vaGVscC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZnVuY3Rpb24vcGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9rZXl3b3Jkcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vbm9kZS9BY2Nlc3Nvck5vZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL25vZGUvQXJyYXlOb2RlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9ub2RlL0Fzc2lnbm1lbnROb2RlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9ub2RlL0Jsb2NrTm9kZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vbm9kZS9Db25kaXRpb25hbE5vZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL25vZGUvQ29uc3RhbnROb2RlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9ub2RlL0Z1bmN0aW9uQXNzaWdubWVudE5vZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL25vZGUvRnVuY3Rpb25Ob2RlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9ub2RlL0luZGV4Tm9kZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vbm9kZS9Ob2RlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9ub2RlL09iamVjdE5vZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL25vZGUvT3BlcmF0b3JOb2RlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9ub2RlL1BhcmVudGhlc2lzTm9kZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vbm9kZS9SYW5nZU5vZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL25vZGUvUmVsYXRpb25hbE5vZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL25vZGUvU3ltYm9sTm9kZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vbm9kZS91dGlscy9hY2Nlc3MuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL25vZGUvdXRpbHMvYXNzaWduLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9vcGVyYXRvcnMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL3BhcnNlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi90cmFuc2Zvcm0vYXBwbHkudHJhbnNmb3JtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi90cmFuc2Zvcm0vY29sdW1uLnRyYW5zZm9ybS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vdHJhbnNmb3JtL2NvbmNhdC50cmFuc2Zvcm0uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL3RyYW5zZm9ybS9maWx0ZXIudHJhbnNmb3JtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi90cmFuc2Zvcm0vZm9yRWFjaC50cmFuc2Zvcm0uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL3RyYW5zZm9ybS9pbmRleC50cmFuc2Zvcm0uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL3RyYW5zZm9ybS9tYXAudHJhbnNmb3JtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi90cmFuc2Zvcm0vbWF4LnRyYW5zZm9ybS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vdHJhbnNmb3JtL21lYW4udHJhbnNmb3JtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi90cmFuc2Zvcm0vbWluLnRyYW5zZm9ybS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vdHJhbnNmb3JtL3JhbmdlLnRyYW5zZm9ybS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vdHJhbnNmb3JtL3Jvdy50cmFuc2Zvcm0uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL3RyYW5zZm9ybS9zdGQudHJhbnNmb3JtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi90cmFuc2Zvcm0vc3Vic2V0LnRyYW5zZm9ybS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vdHJhbnNmb3JtL3N1bS50cmFuc2Zvcm0uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL3RyYW5zZm9ybS91dGlscy9jb21waWxlSW5saW5lRXhwcmVzc2lvbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vdHJhbnNmb3JtL3V0aWxzL2Vycm9yVHJhbnNmb3JtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi90cmFuc2Zvcm0vdmFyaWFuY2UudHJhbnNmb3JtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZmFjdG9yaWVzQW55LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYWxnZWJyYS9kZWNvbXBvc2l0aW9uL2x1cC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvZGVjb21wb3NpdGlvbi9xci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvZGVjb21wb3NpdGlvbi9zbHUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hbGdlYnJhL2Rlcml2YXRpdmUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hbGdlYnJhL3JhdGlvbmFsaXplLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYWxnZWJyYS9zaW1wbGlmeS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc2ltcGxpZnkvcmVzb2x2ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc2ltcGxpZnkvc2ltcGxpZnlDb25zdGFudC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc2ltcGxpZnkvc2ltcGxpZnlDb3JlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYWxnZWJyYS9zaW1wbGlmeS91dGlsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYWxnZWJyYS9zb2x2ZXIvbHNvbHZlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYWxnZWJyYS9zb2x2ZXIvbHVzb2x2ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc29sdmVyL3Vzb2x2ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc29sdmVyL3V0aWxzL3NvbHZlVmFsaWRhdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzQW1kLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYWxnZWJyYS9zcGFyc2UvY3NDb3VudHMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hbGdlYnJhL3NwYXJzZS9jc0Rmcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzRXRyZWUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hbGdlYnJhL3NwYXJzZS9jc0ZrZWVwLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYWxnZWJyYS9zcGFyc2UvY3NGbGlwLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYWxnZWJyYS9zcGFyc2UvY3NJcHZlYy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzTGVhZi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzTHUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hbGdlYnJhL3NwYXJzZS9jc01hcmsuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hbGdlYnJhL3NwYXJzZS9jc01hcmtlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzUGVybXV0ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzUG9zdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzUmVhY2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hbGdlYnJhL3NwYXJzZS9jc1Nwc29sdmUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hbGdlYnJhL3NwYXJzZS9jc1Nxci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzVGRmcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzVW5mbGlwLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9hYnMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL2FkZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvYWRkU2NhbGFyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9jYnJ0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9jZWlsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9jdWJlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9kaXZpZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL2RpdmlkZVNjYWxhci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvZG90RGl2aWRlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9kb3RNdWx0aXBseS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvZG90UG93LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9leHAuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL2V4cG0xLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9maXguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL2Zsb29yLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9nY2QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL2h5cG90LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9sY20uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL2xvZy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvbG9nMTAuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL2xvZzFwLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9sb2cyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9tb2QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL211bHRpcGx5LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9tdWx0aXBseVNjYWxhci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvbm9ybS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvbnRoUm9vdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvbnRoUm9vdHMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL3Bvdy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvcm91bmQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL3NpZ24uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL3NxcnQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL3NxdWFyZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvc3VidHJhY3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL3VuYXJ5TWludXMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL3VuYXJ5UGx1cy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMveGdjZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2JpdHdpc2UvYml0QW5kLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYml0d2lzZS9iaXROb3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9iaXR3aXNlL2JpdE9yLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYml0d2lzZS9iaXRYb3IuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9iaXR3aXNlL2xlZnRTaGlmdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2JpdHdpc2UvcmlnaHRBcml0aFNoaWZ0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYml0d2lzZS9yaWdodExvZ1NoaWZ0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vY29tYmluYXRvcmljcy9iZWxsTnVtYmVycy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2NvbWJpbmF0b3JpY3MvY2F0YWxhbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2NvbWJpbmF0b3JpY3MvY29tcG9zaXRpb24uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9jb21iaW5hdG9yaWNzL3N0aXJsaW5nUzIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9jb21wbGV4L2FyZy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2NvbXBsZXgvY29uai5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2NvbXBsZXgvaW0uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9jb21wbGV4L3JlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vZ2VvbWV0cnkvZGlzdGFuY2UuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9nZW9tZXRyeS9pbnRlcnNlY3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9sb2dpY2FsL2FuZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2xvZ2ljYWwvbm90LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbG9naWNhbC9vci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2xvZ2ljYWwveG9yLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L2FwcGx5LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L2NvbHVtbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9jb25jYXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9tYXRyaXgvY3Jvc3MuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9tYXRyaXgvY3RyYW5zcG9zZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9kZXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9tYXRyaXgvZGlhZy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9kb3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9tYXRyaXgvZWlncy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9leHBtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L2V5ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9maWx0ZXIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9tYXRyaXgvZmxhdHRlbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9mb3JFYWNoLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L2dldE1hdHJpeERhdGFUeXBlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L2lkZW50aXR5LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L2ludi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9rcm9uLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L21hcC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9vbmVzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L3BhcnRpdGlvblNlbGVjdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9yYW5nZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9yZXNoYXBlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L3Jlc2l6ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9yb3cuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9tYXRyaXgvc2l6ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9zb3J0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L3NxcnRtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L3NxdWVlemUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9tYXRyaXgvc3Vic2V0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L3RyYWNlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L3RyYW5zcG9zZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC96ZXJvcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2NvbWJpbmF0aW9ucy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2NvbWJpbmF0aW9uc1dpdGhSZXAuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9mYWN0b3JpYWwuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9nYW1tYS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2tsZGl2ZXJnZW5jZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L211bHRpbm9taWFsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vcHJvYmFiaWxpdHkvcGVybXV0YXRpb25zLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vcHJvYmFiaWxpdHkvcGlja1JhbmRvbS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3JhbmRvbS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3JhbmRvbUludC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3V0aWwvcmFuZG9tTWF0cml4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vcHJvYmFiaWxpdHkvdXRpbC9zZWVkZWRSTkcuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9yZWxhdGlvbmFsL2NvbXBhcmUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9yZWxhdGlvbmFsL2NvbXBhcmVOYXR1cmFsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vcmVsYXRpb25hbC9jb21wYXJlVGV4dC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3JlbGF0aW9uYWwvZGVlcEVxdWFsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vcmVsYXRpb25hbC9lcXVhbC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3JlbGF0aW9uYWwvZXF1YWxTY2FsYXIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9yZWxhdGlvbmFsL2VxdWFsVGV4dC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3JlbGF0aW9uYWwvbGFyZ2VyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vcmVsYXRpb25hbC9sYXJnZXJFcS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3JlbGF0aW9uYWwvc21hbGxlci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3JlbGF0aW9uYWwvc21hbGxlckVxLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vcmVsYXRpb25hbC91bmVxdWFsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc2V0L3NldENhcnRlc2lhbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3NldC9zZXREaWZmZXJlbmNlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc2V0L3NldERpc3RpbmN0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc2V0L3NldEludGVyc2VjdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3NldC9zZXRJc1N1YnNldC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3NldC9zZXRNdWx0aXBsaWNpdHkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9zZXQvc2V0UG93ZXJzZXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9zZXQvc2V0U2l6ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3NldC9zZXRTeW1EaWZmZXJlbmNlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc2V0L3NldFVuaW9uLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc3BlY2lhbC9lcmYuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9zdGF0aXN0aWNzL21hZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbWF4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc3RhdGlzdGljcy9tZWFuLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc3RhdGlzdGljcy9tZWRpYW4uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9zdGF0aXN0aWNzL21pbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbW9kZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3N0YXRpc3RpY3MvcHJvZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3N0YXRpc3RpY3MvcXVhbnRpbGVTZXEuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9zdGF0aXN0aWNzL3N0ZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3N0YXRpc3RpY3Mvc3VtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc3RhdGlzdGljcy91dGlscy9pbXByb3ZlRXJyb3JNZXNzYWdlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc3RhdGlzdGljcy92YXJpYW5jZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3N0cmluZy9mb3JtYXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9zdHJpbmcvcHJpbnQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNvcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY29zaC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY290LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjb3RoLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjc2MuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNzY2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXNlYy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hc2VjaC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hc2luLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2FzaW5oLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2F0YW4uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXRhbjIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXRhbmguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvY29zLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Nvc2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvY290LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2NvdGguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvY3NjLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2NzY2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvc2VjLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NlY2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvc2luLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NpbmguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvdGFuLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3RhbmguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi91bml0L3RvLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdXRpbHMvY2xvbmUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi91dGlscy9oYXNOdW1lcmljVmFsdWUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi91dGlscy9pc0ludGVnZXIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi91dGlscy9pc05hTi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3V0aWxzL2lzTmVnYXRpdmUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi91dGlscy9pc051bWVyaWMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi91dGlscy9pc1Bvc2l0aXZlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdXRpbHMvaXNQcmltZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3V0aWxzL2lzWmVyby5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3V0aWxzL251bWVyaWMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi91dGlscy90eXBlT2YuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9qc29uL3JlcGxhY2VyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvanNvbi9yZXZpdmVyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvcGxhaW4vbnVtYmVyL2FyaXRobWV0aWMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9wbGFpbi9udW1iZXIvYml0d2lzZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3BsYWluL251bWJlci9jb21iaW5hdGlvbnMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9wbGFpbi9udW1iZXIvY29uc3RhbnRzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvcGxhaW4vbnVtYmVyL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvcGxhaW4vbnVtYmVyL2xvZ2ljYWwuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9wbGFpbi9udW1iZXIvcHJvYmFiaWxpdHkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9wbGFpbi9udW1iZXIvcmVsYXRpb25hbC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3BsYWluL251bWJlci90cmlnb25vbWV0cnkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9wbGFpbi9udW1iZXIvdXRpbHMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL2JpZ251bWJlci9CaWdOdW1iZXIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL2JpZ251bWJlci9mdW5jdGlvbi9iaWdudW1iZXIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL2Jvb2xlYW4uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL2NoYWluL0NoYWluLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9jaGFpbi9mdW5jdGlvbi9jaGFpbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvY29tcGxleC9Db21wbGV4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9jb21wbGV4L2Z1bmN0aW9uL2NvbXBsZXguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL2ZyYWN0aW9uL0ZyYWN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9mcmFjdGlvbi9mdW5jdGlvbi9mcmFjdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L0RlbnNlTWF0cml4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvRmlib25hY2NpSGVhcC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L0ltbXV0YWJsZURlbnNlTWF0cml4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvTWF0cml4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvTWF0cml4SW5kZXguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL21hdHJpeC9SYW5nZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L1NwYS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L1NwYXJzZU1hdHJpeC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L2Z1bmN0aW9uL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvZnVuY3Rpb24vbWF0cml4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvZnVuY3Rpb24vc3BhcnNlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDEuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wMi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wNS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA2LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDcuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wOC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA5LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTAuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbnVtYmVyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9yZXN1bHRzZXQvUmVzdWx0U2V0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9zdHJpbmcuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL3VuaXQvVW5pdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvdW5pdC9mdW5jdGlvbi9jcmVhdGVVbml0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS91bml0L2Z1bmN0aW9uL3NwbGl0VW5pdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvdW5pdC9mdW5jdGlvbi91bml0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS91bml0L3BoeXNpY2FsQ29uc3RhbnRzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvYXJyYXkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi91dGlscy9iaWdudW1iZXIvYml0d2lzZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3V0aWxzL2JpZ251bWJlci9jb25zdGFudHMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi91dGlscy9iaWdudW1iZXIvZm9ybWF0dGVyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvYmlnbnVtYmVyL25lYXJseUVxdWFsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvY29sbGVjdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3V0aWxzL2NvbXBsZXguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi91dGlscy9jdXN0b21zLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvZW1pdHRlci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3V0aWxzL2ZhY3RvcnkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi91dGlscy9mdW5jdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3V0aWxzL2lzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvbGF0ZXguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi91dGlscy9sb2cuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi91dGlscy9ub29wLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvbnVtYmVyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvcG9seWZpbGxzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvcHJvZHVjdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3V0aWxzL3N0cmluZy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3ZlcnNpb24uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL21haW4vZXM1L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3NlZWQtcmFuZG9tL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3RpbnktZW1pdHRlci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy90eXBlZC1mdW5jdGlvbi90eXBlZC1mdW5jdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcGtCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNudEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwM1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDanFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaE9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25KQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOWJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9LQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0VUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1bkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3V0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9yREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvaUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcHZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWEE7O0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNTNDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN3dKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsMEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNVlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVpRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2puQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5c0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6MkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDek1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4UEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4UEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL1NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6ckJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeFNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeE9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25VQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlyREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzE1RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcGFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25QQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNubkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2wzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdHpCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzduQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9GQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0lBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNTZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOU5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDak1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDak5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2YkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdE9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25UQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1UkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0lBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2phQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTs7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaE9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDak9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3NkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9RQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdlRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMVZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RnREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzNEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3ZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNU5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25QQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25mQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbHJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25jQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBOzs7QUNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUM3S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsIi8qKlxuICogQGxpY2Vuc2VcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYsIFBldGFyIEtvcnBvbmFpxIcgPHBldGFyLmtvcnBvbmFpY0BnbWFpbC5jb20+XG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UsIGZvdW5kIGluXG4gKiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG52YXIgYW50bHI0ID0gcmVxdWlyZSgnYW50bHI0L2luZGV4Jyk7XG52YXIgUUFTTUxleGVyID0gcmVxdWlyZSgnLi9RQVNNTGV4ZXInKTtcbnZhciBRQVNNUGFyc2VyID0gcmVxdWlyZSgnLi9RQVNNUGFyc2VyJyk7XG52YXIgUUFTTUxpc3RlbmVyID0gcmVxdWlyZSgnLi9RQVNNTGlzdGVuZXInKS5RQVNNTGlzdGVuZXI7XG5cbnZhciBFcnJvckxpc3RlbmVyID0gZnVuY3Rpb24oZXJyb3JzKSB7XG4gIGFudGxyNC5lcnJvci5FcnJvckxpc3RlbmVyLmNhbGwodGhpcyk7XG4gIHRoaXMuZXJyb3JzID0gZXJyb3JzO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkVycm9yTGlzdGVuZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShhbnRscjQuZXJyb3IuRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUpO1xuRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBFcnJvckxpc3RlbmVyO1xuRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUuc3ludGF4RXJyb3IgPSBmdW5jdGlvbihyZWMsIHN5bSwgbGluZSwgY29sLCBtc2csIGUpIHtcbiAgdGhpcy5lcnJvcnMucHVzaCh7XG4gIFx0bGluZTogbGluZSxcbiAgXHRjb2w6IGNvbCxcbiAgXHRtc2c6IG1zZ1xuICB9KTtcbn07XG5cbnZhciBRQ1FBU01MaXN0ZW5lciA9IGZ1bmN0aW9uKGNpcmN1aXQsIGNvbXBhdGliaWxpdHlNb2RlKSB7XG4gICAgdGhpcy5jaXJjdWl0ID0gY2lyY3VpdDtcbiAgICB0aGlzLnFyZWdNYXAgPSB7fTtcbiAgICB0aGlzLmNvbmRpdGlvbiA9IHt9O1xuICAgIHRoaXMuY29tcGF0aWJpbGl0eU1vZGUgPSBjb21wYXRpYmlsaXR5TW9kZTtcblxuICAgIFFBU01MaXN0ZW5lci5jYWxsKHRoaXMpOyAvLyBpbmhlcml0IGRlZmF1bHQgbGlzdGVuZXJcbiAgICByZXR1cm4gdGhpcztcbn07XG5cbnZhciBRQVNNSW1wb3J0ID0gZnVuY3Rpb24oY2lyY3VpdCwgaW5wdXQsIGVycm9yQ2FsbGJhY2ssIGNvbXBhdGliaWxpdHlNb2RlKSB7XG5cdHZhciBjaGFycyA9IG5ldyBhbnRscjQuSW5wdXRTdHJlYW0oaW5wdXQpO1xuXHR2YXIgbGV4ZXIgPSBuZXcgUUFTTUxleGVyLlFBU01MZXhlcihjaGFycyk7XG5cdHZhciB0b2tlbnMgID0gbmV3IGFudGxyNC5Db21tb25Ub2tlblN0cmVhbShsZXhlcik7XG5cdHZhciBwYXJzZXIgPSBuZXcgUUFTTVBhcnNlci5RQVNNUGFyc2VyKHRva2Vucyk7XG5cdHBhcnNlci5idWlsZFBhcnNlVHJlZXMgPSB0cnVlO1xuXG5cdHBhcnNlci5yZW1vdmVFcnJvckxpc3RlbmVycygpO1xuXHR2YXIgZXJyb3JzID0gW107XG5cdHZhciBlcnJvckxpc3RlbmVyID0gbmV3IEVycm9yTGlzdGVuZXIoZXJyb3JzKTtcblx0cGFyc2VyLmFkZEVycm9yTGlzdGVuZXIoZXJyb3JMaXN0ZW5lcik7XG5cblx0dmFyIHRyZWUgPSBwYXJzZXIubWFpbnByb2coKTsgICBcblx0dmFyIFFBU00gPSBuZXcgUUNRQVNNTGlzdGVuZXIoY2lyY3VpdCwgY29tcGF0aWJpbGl0eU1vZGUpO1xuXHRhbnRscjQudHJlZS5QYXJzZVRyZWVXYWxrZXIuREVGQVVMVC53YWxrKFFBU00sIHRyZWUpO1xuXHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0ZXJyb3JDYWxsYmFjayhlcnJvcnMpO1xuXHR9XG59O1xuXG4gXG4vLyBpbmhlcml0IGRlZmF1bHQgbGlzdGVuZXJcblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUUFTTUxpc3RlbmVyLnByb3RvdHlwZSk7XG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBRQ1FBU01MaXN0ZW5lcjtcblxuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUubnVtUWJpdCA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgbnVtID0gMDtcblx0Zm9yKHZhciByZWcgaW4gdGhpcy5xcmVnTWFwKSB7XG5cdFx0bnVtICs9IHRoaXMucXJlZ01hcFtyZWddO1xuXHR9XG5cdHJldHVybiBudW07XG59O1xuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUucXJlZ0Jhc2UgPSBmdW5jdGlvbihxcmVnKSB7XG5cdHZhciBiYXNlID0gMDtcblx0Zm9yKHZhciByZWcgaW4gdGhpcy5xcmVnTWFwKSB7XG5cdFx0aWYocmVnID09IHFyZWcpIHtcblx0XHRcdHJldHVybiBiYXNlO1xuXHRcdH1cblx0XHRiYXNlICs9IHRoaXMucXJlZ01hcFtyZWddO1xuXHR9XG5cdHJldHVybiBiYXNlO1xufTtcblxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLnFyZWdMZW4gPSBmdW5jdGlvbihyZWcpIHtcblx0cmV0dXJuIHRoaXMucXJlZ01hcFtyZWddIHx8IDA7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI21haW5wcm9nLlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyTWFpbnByb2cgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjbWFpbnByb2cuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdE1haW5wcm9nID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI3N0YXRlbWVudC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlclN0YXRlbWVudCA9IGZ1bmN0aW9uKGN0eCkge1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0Ly8gY29uZGl0aW9uXG5cdHZhciBuYW1lID0gY3R4LmdldENoaWxkQ291bnQoKSA/IGN0eC5nZXRDaGlsZCgwKS5nZXRUZXh0KCkgOiBcIlwiO1xuXHRpZihuYW1lID09IFwiaWZcIikge1xuXHRcdHRoaXMuY29uZGl0aW9uID0ge1xuXHRcdFx0Y3JlZzogY3R4LklEKCkuZ2V0VGV4dCgpLFxuXHRcdFx0dmFsdWU6IHBhcnNlSW50KGN0eC5JTlQoKS5nZXRUZXh0KCkpXG5cdFx0fVxuXHR9XG5cblx0Ly8gc3Vicm91dGluZSAoZ2F0ZSBkZWNsYXJhdGlvbilcblx0aWYoY3R4LmdhdGVkZWNsKCkpIHtcblx0XHR2YXIgZ2F0ZWRlY2wgPSBjdHguZ2F0ZWRlY2woKTtcblx0XHR2YXIgYXJncyA9IFtdO1xuXHRcdHZhciBwYXJhbXMgPSBbXTtcblxuXHRcdHZhciBjY291bnQgPSBnYXRlZGVjbC5nZXRDaGlsZENvdW50KCk7XG5cdFx0aWYoY2NvdW50ID4gMiAmJiBnYXRlZGVjbC5nZXRDaGlsZCgyKS5JRCkge1xuXHRcdFx0Ly8gbm8gcGFyYW1zXG5cdFx0XHRhcmdzID0gZ2F0ZWRlY2wuZ2V0Q2hpbGQoMikuSUQoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYoY2NvdW50ID4gMyAmJiBnYXRlZGVjbC5nZXRDaGlsZCgzKS5JRCkge1xuXHRcdFx0XHRwYXJhbXMgPSBnYXRlZGVjbC5nZXRDaGlsZCgzKS5JRCgpO1xuXHRcdFx0fVxuXHRcdFx0aWYoY2NvdW50ID4gNSAmJiBnYXRlZGVjbC5nZXRDaGlsZCg1KS5JRCkge1xuXHRcdFx0XHQvLyBubyBwYXJhbXNcblx0XHRcdFx0YXJncyA9IGdhdGVkZWNsLmdldENoaWxkKDUpLklEKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMuY2lyY3VpdCk7XG5cdFx0dmFyIGN1c3RvbUdhdGUgPSBuZXcgcHJvdG8uY29uc3RydWN0b3IoYXJncy5sZW5ndGgpO1xuXHRcdHZhciBjdXN0b21HYXRlTmFtZSA9IGdhdGVkZWNsLklEKCkuZ2V0VGV4dCgpO1xuXHRcdHZhciBjdXN0b21HYXRlUmVncyA9IFtdO1xuXG5cdFx0YXJncy5tYXAoZnVuY3Rpb24ocmVnKSB7XG5cdFx0XHRjdXN0b21HYXRlUmVncy5wdXNoKHJlZy5nZXRUZXh0KCkpO1xuXHRcdH0pO1xuXG5cdFx0cGFyYW1zLm1hcChmdW5jdGlvbihwYXIpIHtcblx0XHRcdHZhciBwYXJOYW1lID0gcGFyLmdldFRleHQoKTtcblx0XHRcdGN1c3RvbUdhdGUucGFyYW1zLnB1c2gocGFyTmFtZSk7XG5cdFx0fSk7XG5cblx0XHRpZihjdHguZ29wbGlzdCgpKSB7XG5cdFx0XHR2YXIgZ29wbGlzdCA9IGN0eC5nb3BsaXN0KCk7XG5cdFx0XHRnb3BsaXN0LnVvcCgpLm1hcChmdW5jdGlvbih1b3ApIHtcblx0XHRcdFx0dmFyIGdhdGVOYW1lID0gdW9wLklEKCkgPyB1b3AuSUQoKS5nZXRUZXh0KCkgOiBcIlwiO1xuXHRcdFx0XHRpZihnYXRlTmFtZSkge1xuXHRcdFx0XHRcdHZhciBpZGxpc3QgPSB1b3AuYW55bGlzdCgpID8gdW9wLmFueWxpc3QoKS5pZGxpc3QoKSA6IG51bGw7XG5cdFx0XHRcdFx0dmFyIG1peGVkbGlzdCA9IHVvcC5hbnlsaXN0KCkgPyB1b3AuYW55bGlzdCgpLm1peGVkbGlzdCgpIDogbnVsbDtcblx0XHRcdFx0XHR2YXIgZXhwbGlzdCA9IHVvcC5leHBsaXN0KCk7XG5cblxuXHRcdFx0XHRcdHN3aXRjaChnYXRlTmFtZSkge1xuXHRcdFx0XHRcdFx0Y2FzZSBcIkNYXCI6IGdhdGVOYW1lID0gXCJjeFwiOyBicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCJVXCI6IGdhdGVOYW1lID0gXCJ1M1wiOyBicmVhaztcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZighc2VsZi5jaXJjdWl0LmJhc2ljR2F0ZXNbZ2F0ZU5hbWVdICYmICFzZWxmLmNpcmN1aXQuY3VzdG9tR2F0ZXNbZ2F0ZU5hbWVdKSB7XG5cdFx0XHRcdFx0XHQvLyBmaW5kIGdhdGUgYnkgcWFzbSBuYW1lXG5cdFx0XHRcdFx0XHRmb3IodmFyIHRtcE5hbWUgaW4gc2VsZi5jaXJjdWl0LmJhc2ljR2F0ZXMpIHtcblx0XHRcdFx0XHRcdFx0dmFyIHRtcERlZiA9IHNlbGYuY2lyY3VpdC5iYXNpY0dhdGVzW3RtcE5hbWVdO1xuXHRcdFx0XHRcdFx0XHRpZih0bXBEZWYuZXhwb3J0SW5mbyAmJiB0bXBEZWYuZXhwb3J0SW5mby5xYXNtICYmIHRtcERlZi5leHBvcnRJbmZvLnFhc20ubmFtZSAmJiB0bXBEZWYuZXhwb3J0SW5mby5xYXNtLm5hbWUgPT0gZ2F0ZU5hbWUpIHtcblx0XHRcdFx0XHRcdFx0XHRnYXRlTmFtZSA9IHRtcE5hbWU7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Ly8gbmV3ZXIgdmVyc2lvbnMgb2YgcWlza2l0IGV4cG9ydHMgdG8gcWFzbSB3aXRoIGdhdGUgbmFtZXMgdW5kZWZpbmVkIGJ5IHFhc20gMi4wIGRlZmluaXRpb24uLi5cblx0XHRcdFx0XHRcdFx0aWYodG1wRGVmLmV4cG9ydEluZm8gJiYgdG1wRGVmLmV4cG9ydEluZm8ucWlza2l0ICYmIHRtcERlZi5leHBvcnRJbmZvLnFpc2tpdC5uYW1lICYmIHRtcERlZi5leHBvcnRJbmZvLnFpc2tpdC5uYW1lID09IGdhdGVOYW1lKSB7XG5cdFx0XHRcdFx0XHRcdFx0Z2F0ZU5hbWUgPSB0bXBOYW1lO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cblx0XHRcdFx0XHR2YXIgcGFyYW1zID0ge307XG5cdFx0XHRcdFx0aWYoZXhwbGlzdCAmJiBleHBsaXN0LmV4cCgpKSB7XG5cdFx0XHRcdFx0XHR2YXIgZ2F0ZURlZiA9IHNlbGYuY2lyY3VpdC5iYXNpY0dhdGVzW2dhdGVOYW1lXTtcblx0XHRcdFx0XHRcdGlmKCFnYXRlRGVmKSB7XG5cdFx0XHRcdFx0XHRcdGdhdGVEZWYgPSBzZWxmLmNpcmN1aXQuY3VzdG9tR2F0ZXNbZ2F0ZU5hbWVdO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZihnYXRlRGVmKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBwYXJhbUxpc3QgPSBleHBsaXN0LmV4cCgpO1xuXHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1EZWYgPSBnYXRlRGVmLnBhcmFtcyB8fCBbXTtcblx0XHRcdFx0XHRcdFx0cGFyYW1MaXN0Lm1hcChmdW5jdGlvbihwYXJhbUl0ZW0sIHBhcmFtSW5kZXgpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1WYWx1ZSA9IHBhcmFtSXRlbS5nZXRUZXh0KCk7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtTmFtZSA9IHBhcmFtRGVmLmxlbmd0aCA+PSBwYXJhbUluZGV4ID8gcGFyYW1EZWZbcGFyYW1JbmRleF0gOiBcIlwiO1xuXHRcdFx0XHRcdFx0XHRcdGlmKHBhcmFtTmFtZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1zW3BhcmFtTmFtZV0gPSBwYXJhbVZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dmFyIG9wdGlvbnMgPSB7IHBhcmFtczogcGFyYW1zIH07XG5cblxuXHRcdFx0XHRcdHZhciB3aXJlcyA9IFtdO1xuXG5cdFx0XHRcdFx0aWYoaWRsaXN0KSB7XG5cdFx0XHRcdFx0XHR2YXIgY291bnQgPSBpZGxpc3QuSUQoKS5sZW5ndGg7XG5cdFx0XHRcdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuXHRcdFx0XHRcdFx0XHR3aXJlcy5wdXNoKGN1c3RvbUdhdGVSZWdzLmluZGV4T2YoaWRsaXN0LklEKClbaV0uZ2V0VGV4dCgpKSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYobWl4ZWRsaXN0KSB7XG5cdFx0XHRcdFx0XHQvLyA/XG5cdFx0XHRcdFx0fVxuXG4vKlxuXHRcdFx0XHRcdGlmKCFzZWxmLmNvbXBhdGliaWxpdHlNb2RlKSB7XG5cdFx0XHRcdFx0XHRzd2l0Y2goZ2F0ZU5hbWUpIHtcblx0XHRcdFx0XHRcdFx0Y2FzZSBcInJ6XCI6IHtcblx0XHRcdFx0XHRcdFx0XHRnYXRlTmFtZSA9IFwidTFcIjtcblx0XHRcdFx0XHRcdFx0XHRpZihvcHRpb25zICYmIG9wdGlvbnMucGFyYW1zICYmIG9wdGlvbnMucGFyYW1zLnBoaSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0b3B0aW9ucy5wYXJhbXMubGFtYmRhID0gb3B0aW9ucy5wYXJhbXMucGhpO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGVsZXRlIG9wdGlvbnMucGFyYW1zLnBoaTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH07IGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cbiovXG5cdFx0XHRcdFx0dmFyIGV4dGVybmFsID0gc2VsZi5jaXJjdWl0LmN1c3RvbUdhdGVzW2dhdGVOYW1lXTtcblx0XHRcdFx0XHRpZihleHRlcm5hbCkge1xuXHRcdFx0XHRcdFx0Y3VzdG9tR2F0ZS5yZWdpc3RlckdhdGUoZ2F0ZU5hbWUsIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZXh0ZXJuYWwpKSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y3VzdG9tR2F0ZS5hZGRHYXRlKGdhdGVOYW1lLCAtMSwgd2lyZXMsIG9wdGlvbnMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHR0aGlzLmNpcmN1aXQucmVnaXN0ZXJHYXRlKGN1c3RvbUdhdGVOYW1lLCBjdXN0b21HYXRlLnNhdmUoZmFsc2UpKTtcblx0fVxufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNzdGF0ZW1lbnQuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdFN0YXRlbWVudCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciN2ZXJzaW9uLlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyVmVyc2lvbiA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciN2ZXJzaW9uLlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRWZXJzaW9uID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2RlY2wuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJEZWNsID0gZnVuY3Rpb24oY3R4KSB7XG5cdHN3aXRjaChjdHguZ2V0Q2hpbGQoMCkuZ2V0VGV4dCgpKSB7XG5cdFx0Y2FzZSBcInFyZWdcIjogdGhpcy5xcmVnTWFwW2N0eC5nZXRDaGlsZCgxKS5nZXRUZXh0KCldID0gcGFyc2VJbnQoY3R4LmdldENoaWxkKDMpLmdldFRleHQoKSk7IGJyZWFrO1xuXHRcdGNhc2UgXCJjcmVnXCI6IHRoaXMuY2lyY3VpdC5jcmVhdGVDcmVnKGN0eC5nZXRDaGlsZCgxKS5nZXRUZXh0KCksIHBhcnNlSW50KGN0eC5nZXRDaGlsZCgzKS5nZXRUZXh0KCkpKTsgYnJlYWs7XG5cdH1cdFxufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNkZWNsLlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXREZWNsID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2dhdGVkZWNsLlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyR2F0ZWRlY2wgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZ2F0ZWRlY2wuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdEdhdGVkZWNsID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2dvcGxpc3QuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJHb3BsaXN0ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG4vLyBFeGl0IGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2dvcGxpc3QuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdEdvcGxpc3QgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI3FvcC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlclFvcCA9IGZ1bmN0aW9uKGN0eCkge1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cdHZhciBjb25kaXRpb24gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuY29uZGl0aW9uKSk7XG5cdHRoaXMuY29uZGl0aW9uID0ge307XG5cblx0dmFyIG5hbWUgPSBjdHguZ2V0Q2hpbGRDb3VudCgpID8gY3R4LmdldENoaWxkKDApLmdldFRleHQoKSA6IFwiXCI7XG5cblx0aWYobmFtZSA9PSBcInJlc2V0XCIpIHtcblx0XHR2YXIgcXJlZyA9IFwiXCI7XG5cdFx0dmFyIHFiaXQgPSAtMTtcblx0XHR2YXIgY291bnQgPSBjdHguYXJndW1lbnQoKS5sZW5ndGg7XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcblx0XHRcdHZhciBhcmcgPSBjdHguYXJndW1lbnQoKVtpXTtcblx0XHRcdGlmKGkgPT0gMCkge1xuXHRcdFx0XHRxcmVnID0gYXJnLklEKCkuZ2V0VGV4dCgpO1xuXHRcdFx0XHRxYml0ID0gYXJnLklOVCgpID8gcGFyc2VJbnQoYXJnLklOVCgpLmdldFRleHQoKSkgOiAtMTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZihxcmVnKSB7XG5cdFx0XHR2YXIgbnVtQml0cyA9IHNlbGYucXJlZ0xlbihxcmVnKTtcblx0XHRcdGlmKHFiaXQgPCAwKSB7XG5cdFx0XHRcdC8vXG5cdFx0XHRcdC8vIGFyZ3VtZW50IGlzIGVudGlyZSByZWdpc3RlclxuXHRcdFx0XHQvL1xuXHRcdFx0XHRmb3IodmFyIHggPSAwOyB4IDwgbnVtQml0czsgeCsrKSB7XG5cdFx0XHRcdFx0c2VsZi5jaXJjdWl0LmFkZEdhdGUoXCJyZXNldFwiLCAtMSwgeCArIHNlbGYucXJlZ0Jhc2UocXJlZyksIHsgY29uZGl0aW9uOiBjb25kaXRpb24gfHwge30gfSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vXG5cdFx0XHRcdC8vIGJvdGggYXJndW1lbnRzIGFyZSBzaW5nbGUgYml0c1xuXHRcdFx0XHQvL1xuXHRcdFx0XHRzZWxmLmNpcmN1aXQuYWRkR2F0ZShcInJlc2V0XCIsIC0xLCBxYml0ICsgc2VsZi5xcmVnQmFzZShxcmVnKSwgeyBjb25kaXRpb246IGNvbmRpdGlvbiB8fCB7fSB9ICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYobmFtZSA9PSBcIm1lYXN1cmVcIikge1xuXHRcdHZhciBxcmVnID0gXCJcIjtcblx0XHR2YXIgcWJpdCA9IC0xO1xuXHRcdHZhciBjcmVnID0gXCJcIjtcblx0XHR2YXIgY2JpdCA9IC0xO1xuXHRcdHZhciBjb3VudCA9IGN0eC5hcmd1bWVudCgpLmxlbmd0aDtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuXHRcdFx0dmFyIGFyZyA9IGN0eC5hcmd1bWVudCgpW2ldO1xuXHRcdFx0aWYoaSA9PSAwKSB7XG5cdFx0XHRcdHFyZWcgPSBhcmcuSUQoKS5nZXRUZXh0KCk7XG5cdFx0XHRcdHFiaXQgPSBhcmcuSU5UKCkgPyBwYXJzZUludChhcmcuSU5UKCkuZ2V0VGV4dCgpKSA6IC0xO1xuXHRcdFx0fVxuXHRcdFx0aWYoaSA9PSAxKSB7XG5cdFx0XHRcdGNyZWcgPSBhcmcuSUQoKS5nZXRUZXh0KCk7XG5cdFx0XHRcdGNiaXQgPSBhcmcuSU5UKCkgPyBwYXJzZUludChhcmcuSU5UKCkuZ2V0VGV4dCgpKSA6IC0xO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmKHFyZWcgJiYgY3JlZykge1xuXHRcdFx0dmFyIG51bUJpdHMgPSBzZWxmLnFyZWdMZW4ocXJlZyk7XG5cdFx0XHRpZihxYml0IDwgMCAmJiBjYml0IDwgMCkge1xuXHRcdFx0XHQvL1xuXHRcdFx0XHQvLyBib3RoIGFyZ3VtZW50cyBhcmUgZW50aXJlIHJlZ2lzdGVyc1xuXHRcdFx0XHQvL1xuXHRcdFx0XHRmb3IodmFyIHggPSAwOyB4IDwgbnVtQml0czsgeCsrKSB7XG5cdFx0XHRcdFx0c2VsZi5jaXJjdWl0LmFkZEdhdGUoXCJtZWFzdXJlXCIsIC0xLCB4ICsgc2VsZi5xcmVnQmFzZShxcmVnKSwgeyBjcmVnOiB7IG5hbWU6IGNyZWcsIGJpdDogeCB9LCBjb25kaXRpb246IGNvbmRpdGlvbiB8fCB7fSB9ICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYocWJpdCA+PSAwICYmIGNiaXQgPj0gMCkge1xuXHRcdFx0XHRcdC8vXG5cdFx0XHRcdFx0Ly8gYm90aCBhcmd1bWVudHMgYXJlIHNpbmdsZSBiaXRzXG5cdFx0XHRcdFx0Ly9cblx0XHRcdFx0XHRzZWxmLmNpcmN1aXQuYWRkR2F0ZShcIm1lYXN1cmVcIiwgLTEsIHFiaXQgKyBzZWxmLnFyZWdCYXNlKHFyZWcpLCB7IGNyZWc6IHsgbmFtZTogY3JlZywgYml0OiBjYml0IH0sIGNvbmRpdGlvbjogY29uZGl0aW9uIHx8IHt9IH0gKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZihxYml0ID49IDAgJiYgY2JpdCA8IDApIHtcblx0XHRcdFx0XHRcdC8vXG5cdFx0XHRcdFx0XHQvLyBxYml0IGlzIHNpbmdsZSwgY3JlZyBpcyBlbnRpcmUgcmVnaXN0ZXJcblx0XHRcdFx0XHRcdC8vXG5cdFx0XHRcdFx0XHRmb3IodmFyIHggPSAwOyB4IDwgbnVtQml0czsgeCsrKSB7XG5cdFx0XHRcdFx0XHRcdHNlbGYuY2lyY3VpdC5hZGRHYXRlKFwibWVhc3VyZVwiLCAtMSwgcWJpdCArIHNlbGYucXJlZ0Jhc2UocXJlZyksIHsgY3JlZzogeyBuYW1lOiBjcmVnLCBiaXQ6IHggfSwgY29uZGl0aW9uOiBjb25kaXRpb24gfHwge30gfSApO1xuXHRcdFx0XHRcdFx0fVx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvL1xuXHRcdFx0XHRcdFx0Ly8gcWJpdCBpcyBlbnRpcmUgcmVnaXN0ZXIsIGNyZWcgaXMgc2luZ2xlIGJpdFxuXHRcdFx0XHRcdFx0Ly9cblx0XHRcdFx0XHRcdGZvcih2YXIgeCA9IDA7IHggPCBudW1CaXRzOyB4KyspIHtcblx0XHRcdFx0XHRcdFx0c2VsZi5jaXJjdWl0LmFkZEdhdGUoXCJtZWFzdXJlXCIsIC0xLCB4ICsgc2VsZi5xcmVnQmFzZShxcmVnKSwgeyBjcmVnOiB7IG5hbWU6IGNyZWcsIGJpdDogY2JpdCB9LCBjb25kaXRpb246IGNvbmRpdGlvbiB8fCB7fSB9ICk7XG5cdFx0XHRcdFx0XHR9XHRcdFx0XHRcdFx0XG5cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHR2YXIgdW9wID0gY3R4LnVvcCgpO1xuXHRpZih1b3AgJiYgdW9wLklEKCkpIHtcblx0XHR2YXIgZ2F0ZU5hbWUgPSB1b3AuSUQoKS5nZXRUZXh0KCk7XG5cdFx0dmFyIGlkbGlzdCA9IHVvcC5hbnlsaXN0KCkgPyB1b3AuYW55bGlzdCgpLmlkbGlzdCgpIDogbnVsbDtcblx0XHR2YXIgbWl4ZWRsaXN0ID0gdW9wLmFueWxpc3QoKSA/IHVvcC5hbnlsaXN0KCkubWl4ZWRsaXN0KCkgOiBudWxsO1xuXHRcdHZhciBleHBsaXN0ID0gdW9wLmV4cGxpc3QoKTtcblxuXHRcdHN3aXRjaChnYXRlTmFtZSkge1xuXHRcdFx0Y2FzZSBcIkNYXCI6IGdhdGVOYW1lID0gXCJjeFwiOyBicmVhaztcblx0XHRcdGNhc2UgXCJVXCI6IGdhdGVOYW1lID0gXCJ1M1wiOyBicmVhaztcblx0XHR9XG5cblx0XHRpZighc2VsZi5jaXJjdWl0LmJhc2ljR2F0ZXNbZ2F0ZU5hbWVdICYmICFzZWxmLmNpcmN1aXQuY3VzdG9tR2F0ZXNbZ2F0ZU5hbWVdKSB7XG5cdFx0XHQvLyBmaW5kIGdhdGUgYnkgcWFzbSBuYW1lXG5cdFx0XHRmb3IodmFyIHRtcE5hbWUgaW4gc2VsZi5jaXJjdWl0LmJhc2ljR2F0ZXMpIHtcblx0XHRcdFx0dmFyIHRtcERlZiA9IHNlbGYuY2lyY3VpdC5iYXNpY0dhdGVzW3RtcE5hbWVdO1xuXHRcdFx0XHRpZih0bXBEZWYuZXhwb3J0SW5mbyAmJiB0bXBEZWYuZXhwb3J0SW5mby5xYXNtICYmIHRtcERlZi5leHBvcnRJbmZvLnFhc20ubmFtZSAmJiB0bXBEZWYuZXhwb3J0SW5mby5xYXNtLm5hbWUgPT0gZ2F0ZU5hbWUpIHtcblx0XHRcdFx0XHRnYXRlTmFtZSA9IHRtcE5hbWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gbmV3ZXIgdmVyc2lvbnMgb2YgcWlza2l0IGV4cG9ydHMgdG8gcWFzbSB3aXRoIGdhdGUgbmFtZXMgdW5kZWZpbmVkIGJ5IHFhc20gMi4wIGRlZmluaXRpb24uLi5cblx0XHRcdFx0aWYodG1wRGVmLmV4cG9ydEluZm8gJiYgdG1wRGVmLmV4cG9ydEluZm8ucWlza2l0ICYmIHRtcERlZi5leHBvcnRJbmZvLnFpc2tpdC5uYW1lICYmIHRtcERlZi5leHBvcnRJbmZvLnFpc2tpdC5uYW1lID09IGdhdGVOYW1lKSB7XG5cdFx0XHRcdFx0Z2F0ZU5hbWUgPSB0bXBOYW1lO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIHBhcmFtcyA9IHt9O1xuXHRcdGlmKGV4cGxpc3QgJiYgZXhwbGlzdC5leHAoKSkge1xuXHRcdFx0dmFyIGdhdGVEZWYgPSBzZWxmLmNpcmN1aXQuYmFzaWNHYXRlc1tnYXRlTmFtZV07XG5cdFx0XHRpZighZ2F0ZURlZikge1xuXHRcdFx0XHRnYXRlRGVmID0gc2VsZi5jaXJjdWl0LmN1c3RvbUdhdGVzW2dhdGVOYW1lXTtcblx0XHRcdH1cblx0XHRcdGlmKGdhdGVEZWYpIHtcblx0XHRcdFx0dmFyIHBhcmFtTGlzdCA9IGV4cGxpc3QuZXhwKCk7XG5cdFx0XHRcdHZhciBwYXJhbURlZiA9IGdhdGVEZWYucGFyYW1zIHx8IFtdO1xuXHRcdFx0XHRwYXJhbUxpc3QubWFwKGZ1bmN0aW9uKHBhcmFtSXRlbSwgcGFyYW1JbmRleCkge1xuXHRcdFx0XHRcdHZhciBwYXJhbVZhbHVlID0gcGFyYW1JdGVtLmdldFRleHQoKTtcblx0XHRcdFx0XHR2YXIgcGFyYW1OYW1lID0gcGFyYW1EZWYubGVuZ3RoID49IHBhcmFtSW5kZXggPyBwYXJhbURlZltwYXJhbUluZGV4XSA6IFwiXCI7XG5cdFx0XHRcdFx0aWYocGFyYW1OYW1lKSB7XG5cdFx0XHRcdFx0XHRwYXJhbXNbcGFyYW1OYW1lXSA9IHBhcmFtVmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgb3B0aW9ucyA9IHsgcGFyYW1zOiBwYXJhbXMsIGNvbmRpdGlvbjogY29uZGl0aW9uIHx8IHt9IH07XG5cblx0XHRpZihpZGxpc3QpIHtcblx0XHRcdC8vXG5cdFx0XHQvLyBhcmd1bWVudHMgYXJlIGVudGlyZSByZWdpc3RlcnNcblx0XHRcdC8vICAgZXhhbXBsZTogY3ggcSxyO1xuXHRcdFx0Ly9cblx0XHRcdHZhciBudW1CaXRzID0gc2VsZi5xcmVnTGVuKGlkbGlzdC5JRCgpWzBdLmdldFRleHQoKSk7XG5cdFx0XHRmb3IodmFyIHggPSAwOyB4IDwgbnVtQml0czsgeCsrKSB7XG5cdFx0XHRcdHZhciBhcmdzID0gW107XG5cdFx0XHRcdHZhciBjb3VudCA9IGlkbGlzdC5JRCgpLmxlbmd0aDtcblx0XHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcblx0XHRcdFx0XHRhcmdzLnB1c2goeyByZWc6IGlkbGlzdC5JRCgpW2ldLmdldFRleHQoKSwgYml0OiB4IH0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFyIHdpcmVzID0gW107XG5cdFx0XHRcdGFyZ3MubWFwKGZ1bmN0aW9uKGEpIHtcblx0XHRcdFx0XHR3aXJlcy5wdXNoKGEuYml0ICsgc2VsZi5xcmVnQmFzZShhLnJlZykpO1xuXHRcdFx0XHR9KTtcbi8qXG5cdFx0XHRcdGlmKCFzZWxmLmNvbXBhdGliaWxpdHlNb2RlKSB7XG5cdFx0XHRcdFx0c3dpdGNoKGdhdGVOYW1lKSB7XG5cdFx0XHRcdFx0XHRjYXNlIFwicnpcIjoge1xuXHRcdFx0XHRcdFx0XHRnYXRlTmFtZSA9IFwidTFcIjtcblx0XHRcdFx0XHRcdFx0aWYob3B0aW9ucyAmJiBvcHRpb25zLnBhcmFtcyAmJiBvcHRpb25zLnBhcmFtcy5waGkpIHtcblx0XHRcdFx0XHRcdFx0XHRvcHRpb25zLnBhcmFtcy5sYW1iZGEgPSBvcHRpb25zLnBhcmFtcy5waGk7XG5cdFx0XHRcdFx0XHRcdFx0ZGVsZXRlIG9wdGlvbnMucGFyYW1zLnBoaTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fTsgYnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG4qL1xuXHRcdFx0XHRzZWxmLmNpcmN1aXQuYWRkR2F0ZShnYXRlTmFtZSwgLTEsIHdpcmVzLCBvcHRpb25zKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBhcmd1bWVudHMgYXJlIHFiaXRzIG9yIG1peGVkXG5cdFx0aWYobWl4ZWRsaXN0KSB7XG5cdFx0XHRpZihtaXhlZGxpc3QuSUQoKS5sZW5ndGggIT0gbWl4ZWRsaXN0LklOVCgpLmxlbmd0aCkge1xuXHRcdFx0XHQvLyBcblx0XHRcdFx0Ly8gVE9ETzogbWl4ZWQgcWJpdHMgYW5kIGVudGlyZSByZWdpc3RlcnNcblx0XHRcdFx0Ly8gICAgICAgZXhhbXBsZTogY3ggcSxyWzBdO1xuXHRcdFx0XHQvL1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly9cblx0XHRcdFx0Ly8gcWJpdHMsIGZvciBleGFtcGxlOiBjeCBxWzBdLHJbMF07XG5cdFx0XHRcdC8vXG5cdFx0XHRcdHZhciBhcmdzID0gW107XG5cdFx0XHRcdHZhciBjb3VudCA9IG1peGVkbGlzdC5JRCgpLmxlbmd0aDtcblx0XHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcblx0XHRcdFx0XHRhcmdzLnB1c2goeyByZWc6IG1peGVkbGlzdC5JRCgpW2ldLmdldFRleHQoKSwgYml0OiBwYXJzZUludChtaXhlZGxpc3QuSU5UKClbaV0uZ2V0VGV4dCgpKSB9KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhciB3aXJlcyA9IFtdO1xuXHRcdFx0XHRhcmdzLm1hcChmdW5jdGlvbihhKSB7XG5cdFx0XHRcdFx0d2lyZXMucHVzaChhLmJpdCArIHNlbGYucXJlZ0Jhc2UoYS5yZWcpKTtcblx0XHRcdFx0fSk7XG4vKlxuXHRcdFx0XHRpZighc2VsZi5jb21wYXRpYmlsaXR5TW9kZSkge1xuXHRcdFx0XHRcdHN3aXRjaChnYXRlTmFtZSkge1xuXHRcdFx0XHRcdFx0Y2FzZSBcInJ6XCI6IHtcblx0XHRcdFx0XHRcdFx0Z2F0ZU5hbWUgPSBcInUxXCI7XG5cdFx0XHRcdFx0XHRcdGlmKG9wdGlvbnMgJiYgb3B0aW9ucy5wYXJhbXMgJiYgb3B0aW9ucy5wYXJhbXMucGhpKSB7XG5cdFx0XHRcdFx0XHRcdFx0b3B0aW9ucy5wYXJhbXMubGFtYmRhID0gb3B0aW9ucy5wYXJhbXMucGhpO1xuXHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSBvcHRpb25zLnBhcmFtcy5waGk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH07IGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuKi9cblx0XHRcdFx0c2VsZi5jaXJjdWl0LmFkZEdhdGUoZ2F0ZU5hbWUsIC0xLCB3aXJlcywgb3B0aW9ucyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG4vLyBFeGl0IGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI3FvcC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0UW9wID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI3VvcC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlclVvcCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciN1b3AuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdFVvcCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNhbnlsaXN0LlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyQW55bGlzdCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNhbnlsaXN0LlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRBbnlsaXN0ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2lkbGlzdC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlcklkbGlzdCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNpZGxpc3QuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdElkbGlzdCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNtaXhlZGxpc3QuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJNaXhlZGxpc3QgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjbWl4ZWRsaXN0LlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRNaXhlZGxpc3QgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjYXJndW1lbnQuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJBcmd1bWVudCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNhcmd1bWVudC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0QXJndW1lbnQgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZXhwbGlzdC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlckV4cGxpc3QgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZXhwbGlzdC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0RXhwbGlzdCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNleHAuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJFeHAgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZXhwLlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRFeHAgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjdW5hcnlvcC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlclVuYXJ5b3AgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjdW5hcnlvcC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0VW5hcnlvcCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBRQVNNSW1wb3J0O1xuIiwiLy8gR2VuZXJhdGVkIGZyb20gUUFTTS5nNCBieSBBTlRMUiA0LjcuMVxuLy8ganNoaW50IGlnbm9yZTogc3RhcnRcbnZhciBhbnRscjQgPSByZXF1aXJlKCdhbnRscjQvaW5kZXgnKTtcblxuXG52YXIgc2VyaWFsaXplZEFUTiA9IFtcIlxcdTAwMDNcXHU2MDhiXFx1YTcyYVxcdTgxMzNcXHViOWVkXFx1NDE3Y1xcdTNiZTdcXHU3Nzg2XFx1NTk2NFwiLFxuICAgIFwiXFx1MDAwMi1cXHUwMTI0XFxiXFx1MDAwMVxcdTAwMDRcXHUwMDAyXFx0XFx1MDAwMlxcdTAwMDRcXHUwMDAzXFx0XFx1MDAwM1xcdTAwMDRcIixcbiAgICBcIlxcdTAwMDRcXHRcXHUwMDA0XFx1MDAwNFxcdTAwMDVcXHRcXHUwMDA1XFx1MDAwNFxcdTAwMDZcXHRcXHUwMDA2XFx1MDAwNFxcdTAwMDdcXHRcIixcbiAgICBcIlxcdTAwMDdcXHUwMDA0XFxiXFx0XFxiXFx1MDAwNFxcdFxcdFxcdFxcdTAwMDRcXG5cXHRcXG5cXHUwMDA0XFx1MDAwYlxcdFxcdTAwMGJcXHUwMDA0XCIsXG4gICAgXCJcXGZcXHRcXGZcXHUwMDA0XFxyXFx0XFxyXFx1MDAwNFxcdTAwMGVcXHRcXHUwMDBlXFx1MDAwNFxcdTAwMGZcXHRcXHUwMDBmXFx1MDAwNFxcdTAwMTBcIixcbiAgICBcIlxcdFxcdTAwMTBcXHUwMDA0XFx1MDAxMVxcdFxcdTAwMTFcXHUwMDA0XFx1MDAxMlxcdFxcdTAwMTJcXHUwMDA0XFx1MDAxM1xcdFxcdTAwMTNcIixcbiAgICBcIlxcdTAwMDRcXHUwMDE0XFx0XFx1MDAxNFxcdTAwMDRcXHUwMDE1XFx0XFx1MDAxNVxcdTAwMDRcXHUwMDE2XFx0XFx1MDAxNlxcdTAwMDRcXHUwMDE3XCIsXG4gICAgXCJcXHRcXHUwMDE3XFx1MDAwNFxcdTAwMThcXHRcXHUwMDE4XFx1MDAwNFxcdTAwMTlcXHRcXHUwMDE5XFx1MDAwNFxcdTAwMWFcXHRcXHUwMDFhXCIsXG4gICAgXCJcXHUwMDA0XFx1MDAxYlxcdFxcdTAwMWJcXHUwMDA0XFx1MDAxY1xcdFxcdTAwMWNcXHUwMDA0XFx1MDAxZFxcdFxcdTAwMWRcXHUwMDA0XFx1MDAxZVwiLFxuICAgIFwiXFx0XFx1MDAxZVxcdTAwMDRcXHUwMDFmXFx0XFx1MDAxZlxcdTAwMDQgXFx0IFxcdTAwMDQhXFx0IVxcdTAwMDRcXFwiXFx0XFxcIlxcdTAwMDQjXCIsXG4gICAgXCJcXHQjXFx1MDAwNCRcXHQkXFx1MDAwNCVcXHQlXFx1MDAwNCZcXHQmXFx1MDAwNFxcJ1xcdFxcJ1xcdTAwMDQoXFx0KFxcdTAwMDQpXFx0KVxcdTAwMDRcIixcbiAgICBcIipcXHQqXFx1MDAwNCtcXHQrXFx1MDAwNCxcXHQsXFx1MDAwM1xcdTAwMDJcXHUwMDAzXFx1MDAwMlxcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcIixcbiAgICBcIlxcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwNFwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDRcXHUwMDAzXFx1MDAwNVxcdTAwMDNcXHUwMDA1XFx1MDAwM1xcdTAwMDZcXHUwMDAzXFx1MDAwNlxcdTAwMDNcXHUwMDA3XCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwN1xcdTAwMDNcXHUwMDA3XFx1MDAwM1xcYlxcdTAwMDNcXGJcXHUwMDAzXFxiXFx1MDAwM1xcdFxcdTAwMDNcXHRcXHUwMDAzXCIsXG4gICAgXCJcXHRcXHUwMDAzXFx0XFx1MDAwM1xcdFxcdTAwMDNcXHRcXHUwMDAzXFx0XFx1MDAwM1xcdFxcdTAwMDNcXG5cXHUwMDAzXFxuXFx1MDAwM1xcblxcdTAwMDNcIixcbiAgICBcIlxcblxcdTAwMDNcXG5cXHUwMDAzXFxuXFx1MDAwM1xcblxcdTAwMDNcXG5cXHUwMDAzXFxuXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcIixcbiAgICBcIlxcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXFx1MDAwM1wiLFxuICAgIFwiXFxmXFx1MDAwM1xcZlxcdTAwMDNcXGZcXHUwMDAzXFxmXFx1MDAwM1xcZlxcdTAwMDNcXHJcXHUwMDAzXFxyXFx1MDAwM1xcdTAwMGVcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDBlXFx1MDAwM1xcdTAwMGZcXHUwMDAzXFx1MDAwZlxcdTAwMDNcXHUwMDBmXFx1MDAwM1xcdTAwMGZcXHUwMDAzXFx1MDAwZlxcdTAwMDNcIixcbiAgICBcIlxcdTAwMTBcXHUwMDAzXFx1MDAxMFxcdTAwMDNcXHUwMDEwXFx1MDAwM1xcdTAwMTBcXHUwMDAzXFx1MDAxMFxcdTAwMDNcXHUwMDExXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAxMVxcdTAwMDNcXHUwMDEyXFx1MDAwM1xcdTAwMTJcXHUwMDAzXFx1MDAxMlxcdTAwMDNcXHUwMDEyXFx1MDAwM1xcdTAwMTJcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDEyXFx1MDAwM1xcdTAwMTJcXHUwMDAzXFx1MDAxMlxcdTAwMDNcXHUwMDEzXFx1MDAwM1xcdTAwMTNcXHUwMDAzXFx1MDAxM1xcdTAwMDNcIixcbiAgICBcIlxcdTAwMTRcXHUwMDAzXFx1MDAxNFxcdTAwMDNcXHUwMDE0XFx1MDAwM1xcdTAwMTRcXHUwMDAzXFx1MDAxNFxcdTAwMDNcXHUwMDE0XFx1MDAwM1wiLFxuICAgIFwiXFx1MDAxNVxcdTAwMDNcXHUwMDE1XFx1MDAwM1xcdTAwMTZcXHUwMDAzXFx1MDAxNlxcdTAwMDNcXHUwMDE2XFx1MDAwM1xcdTAwMTdcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDE3XFx1MDAwM1xcdTAwMThcXHUwMDAzXFx1MDAxOFxcdTAwMDNcXHUwMDE5XFx1MDAwM1xcdTAwMTlcXHUwMDAzXFx1MDAxYVxcdTAwMDNcIixcbiAgICBcIlxcdTAwMWFcXHUwMDAzXFx1MDAxYlxcdTAwMDNcXHUwMDFiXFx1MDAwM1xcdTAwMWNcXHUwMDAzXFx1MDAxY1xcdTAwMDNcXHUwMDFkXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAxZFxcdTAwMDNcXHUwMDFkXFx1MDAwM1xcdTAwMWRcXHUwMDAzXFx1MDAxZVxcdTAwMDNcXHUwMDFlXFx1MDAwM1xcdTAwMWVcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDFlXFx1MDAwM1xcdTAwMWZcXHUwMDAzXFx1MDAxZlxcdTAwMDNcXHUwMDFmXFx1MDAwM1xcdTAwMWZcXHUwMDAzIFxcdTAwMDNcIixcbiAgICBcIiBcXHUwMDAzIFxcdTAwMDMgXFx1MDAwMyFcXHUwMDAzIVxcdTAwMDMhXFx1MDAwM1xcXCJcXHUwMDAzXFxcIlxcdTAwMDNcXFwiXFx1MDAwM1xcXCJcIixcbiAgICBcIlxcdTAwMDNcXFwiXFx1MDAwMyNcXHUwMDAzI1xcdTAwMDMjXFx1MDAwMyRcXHUwMDAzJFxcdTAwMDMkXFx1MDAwMyRcXHUwMDAzJFxcdTAwMDNcIixcbiAgICBcIiRcXHUwMDAzJFxcdTAwMDUkXFx1MDBlMVxcbiRcXHUwMDAzJVxcdTAwMDMlXFx1MDAwMyVcXHUwMDA2JVxcdTAwZTZcXG4lXFxyJVxcdTAwMGVcIixcbiAgICBcIiVcXHUwMGU3XFx1MDAwMyZcXHUwMDAzJlxcdTAwMDMmXFx1MDAwNiZcXHUwMGVkXFxuJlxcciZcXHUwMDBlJlxcdTAwZWVcXHUwMDAzXFwnXCIsXG4gICAgXCJcXHUwMDA2XFwnXFx1MDBmMlxcblxcJ1xcclxcJ1xcdTAwMGVcXCdcXHUwMGYzXFx1MDAwMyhcXHUwMDAzKFxcdTAwMDcoXFx1MDBmOFxcbihcXGZcIixcbiAgICBcIihcXHUwMDBlKFxcdTAwZmJcXHUwMDBiKFxcdTAwMDMpXFx1MDAwNilcXHUwMGZlXFxuKVxccilcXHUwMDBlKVxcdTAwZmZcXHUwMDAzKVwiLFxuICAgIFwiXFx1MDAwMylcXHUwMDAzKlxcdTAwMDMqXFx1MDAwNipcXHUwMTA2XFxuKlxccipcXHUwMDBlKlxcdTAxMDdcXHUwMDAzKlxcdTAwMDMqXCIsXG4gICAgXCJcXHUwMDAzK1xcdTAwMDMrXFx1MDAwMytcXHUwMDAzK1xcdTAwMDcrXFx1MDExMFxcbitcXGYrXFx1MDAwZStcXHUwMTEzXFx1MDAwYitcIixcbiAgICBcIlxcdTAwMDMrXFx1MDAwMytcXHUwMDAzK1xcdTAwMDMrXFx1MDAwMytcXHUwMDAzLFxcdTAwMDMsXFx1MDAwMyxcXHUwMDAzLFxcdTAwMDdcIixcbiAgICBcIixcXHUwMTFlXFxuLFxcZixcXHUwMDBlLFxcdTAxMjFcXHUwMDBiLFxcdTAwMDMsXFx1MDAwMyxcXHUwMDAzXFx1MDExMVxcdTAwMDItXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDVcXHUwMDA0XFx1MDAwN1xcdTAwMDVcXHRcXHUwMDA2XFx1MDAwYlxcdTAwMDdcXHJcXGJcXHUwMDBmXFx0XFx1MDAxMVwiLFxuICAgIFwiXFxuXFx1MDAxM1xcdTAwMGJcXHUwMDE1XFxmXFx1MDAxN1xcclxcdTAwMTlcXHUwMDBlXFx1MDAxYlxcdTAwMGZcXHUwMDFkXFx1MDAxMFxcdTAwMWZcIixcbiAgICBcIlxcdTAwMTEhXFx1MDAxMiNcXHUwMDEzJVxcdTAwMTRcXCdcXHUwMDE1KVxcdTAwMTYrXFx1MDAxNy1cXHUwMDE4L1xcdTAwMTkxXFx1MDAxYVwiLFxuICAgIFwiM1xcdTAwMWI1XFx1MDAxYzdcXHUwMDFkOVxcdTAwMWU7XFx1MDAxZj0gPyFBXFxcIkMjRSRHJUkmS1xcJ00oTylRKlMrVSxXLVxcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXG5cXHUwMDAzXFx1MDAwMjI7XFx1MDAwNFxcdTAwMDJHR2dnXFx1MDAwNFxcdTAwMDItLS8vXFx1MDAwM1xcdTAwMDJjXCIsXG4gICAgXCJ8XFx1MDAwNlxcdTAwMDIyO0NcXFxcYWFjfFxcdTAwMDVcXHUwMDAyXFx1MDAwYlxcZlxcdTAwMGVcXHUwMDBmXFxcIlxcXCJcXHUwMDA3XFx1MDAwMlwiLFxuICAgIFwiLzAyO0NcXFxcYWFjfFxcdTAwMDRcXHUwMDAyXFxmXFxmXFx1MDAwZlxcdTAwMGZcXHUwMDAyXFx1MDEyZFxcdTAwMDJcXHUwMDAzXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDdcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx0XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDBiXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcclxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwZlxcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDExXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDEzXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMTVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMTdcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAxOVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAxYlxcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDFkXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDFmXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMiFcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMiNcXHUwMDAzXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyJVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFwnXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMilcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMitcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyLVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyL1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCIxXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDIzXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDI1XFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMjdcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMjlcXHUwMDAzXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyO1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyPVxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDI/XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDJBXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMkNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMkVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiR1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAySVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyS1xcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDJNXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDJPXFx1MDAwM1xcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMlFcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMlNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyVVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyV1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDNZXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDVbXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDdcIixcbiAgICBcImJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx0ZFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDBiZlxcdTAwMDNcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxccmhcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwZmtcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDExblxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDEzdlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDE1XCIsXG4gICAgXCJcXHUwMDdmXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMTdcXHUwMDg3XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMTlcIixcbiAgICBcIlxcdTAwOGNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAxYlxcdTAwOGVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAxZFwiLFxuICAgIFwiXFx1MDA5MFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDFmXFx1MDA5NVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDIhXCIsXG4gICAgXCJcXHUwMDlhXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMiNcXHUwMDljXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMiVcXHUwMGE0XCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFwnXFx1MDBhN1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDIpXFx1MDBhZFxcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMitcXHUwMGFmXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMi1cXHUwMGIyXFx1MDAwM1xcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyL1xcdTAwYjRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyMVxcdTAwYjZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDIzXFx1MDBiOFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDI1XFx1MDBiYVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIjdcXHUwMGJjXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMjlcXHUwMGJlXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMjtcXHUwMGMyXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyPVxcdTAwYzZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyP1xcdTAwY2FcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDJBXFx1MDBjZVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJDXFx1MDBkMVxcdTAwMDNcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMkVcXHUwMGQ2XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMkdcXHUwMGUwXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAySVxcdTAwZTJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyS1xcdTAwZTlcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJNXFx1MDBmMVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJPXFx1MDBmNVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJRXFx1MDBmZFwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlNcXHUwMTAzXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlVcXHUwMTBiXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyV1xcdTAxMTlcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyWVpcXHUwMDA3XFx1MDA3ZlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJaXFx1MDAwNFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJbXFxcXFxcdTAwMDdxXFx1MDAwMlxcdTAwMDJcXFxcXVxcdTAwMDdcIixcbiAgICBcInJcXHUwMDAyXFx1MDAwMl1eXFx1MDAwN2NcXHUwMDAyXFx1MDAwMl5fXFx1MDAwN3NcXHUwMDAyXFx1MDAwMl9gXFx1MDAwN3dcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyYGFcXHUwMDA3Z1xcdTAwMDJcXHUwMDAyYVxcdTAwMDZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyYmNcXHUwMDA3PVwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJjXFxiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMmRlXFx1MDAwNypcXHUwMDAyXFx1MDAwMmVcXG5cXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDJmZ1xcdTAwMDcrXFx1MDAwMlxcdTAwMDJnXFxmXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMmhcIixcbiAgICBcImlcXHUwMDA3a1xcdTAwMDJcXHUwMDAyaWpcXHUwMDA3aFxcdTAwMDJcXHUwMDAyalxcdTAwMGVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJrbFxcdTAwMDc/XFx1MDAwMlxcdTAwMDJsbVxcdTAwMDc/XFx1MDAwMlxcdTAwMDJtXFx1MDAxMFxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMm5vXFx1MDAwN2RcXHUwMDAyXFx1MDAwMm9wXFx1MDAwN2NcXHUwMDAyXFx1MDAwMnBxXFx1MDAwN3RcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwicXJcXHUwMDA3dFxcdTAwMDJcXHUwMDAycnNcXHUwMDA3a1xcdTAwMDJcXHUwMDAyc3RcXHUwMDA3Z1xcdTAwMDJcXHUwMDAydHVcXHUwMDA3XCIsXG4gICAgXCJ0XFx1MDAwMlxcdTAwMDJ1XFx1MDAxMlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJ2d1xcdTAwMDdRXFx1MDAwMlxcdTAwMDJ3eFwiLFxuICAgIFwiXFx1MDAwN1JcXHUwMDAyXFx1MDAwMnh5XFx1MDAwN0dcXHUwMDAyXFx1MDAwMnl6XFx1MDAwN1BcXHUwMDAyXFx1MDAwMnp7XFx1MDAwN1wiLFxuICAgIFwiU1xcdTAwMDJcXHUwMDAye3xcXHUwMDA3Q1xcdTAwMDJcXHUwMDAyfH1cXHUwMDA3VVxcdTAwMDJcXHUwMDAyfX5cXHUwMDA3T1xcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJ+XFx1MDAxNFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDdmXFx1MDA4MFxcdTAwMDdrXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwODBcXHUwMDgxXFx1MDAwN3BcXHUwMDAyXFx1MDAwMlxcdTAwODFcXHUwMDgyXFx1MDAwN2VcXHUwMDAyXFx1MDAwMlxcdTAwODJcIixcbiAgICBcIlxcdTAwODNcXHUwMDA3blxcdTAwMDJcXHUwMDAyXFx1MDA4M1xcdTAwODRcXHUwMDA3d1xcdTAwMDJcXHUwMDAyXFx1MDA4NFxcdTAwODVcIixcbiAgICBcIlxcdTAwMDdmXFx1MDAwMlxcdTAwMDJcXHUwMDg1XFx1MDA4NlxcdTAwMDdnXFx1MDAwMlxcdTAwMDJcXHUwMDg2XFx1MDAxNlxcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwODdcXHUwMDg4XFx1MDAwN3NcXHUwMDAyXFx1MDAwMlxcdTAwODhcXHUwMDg5XFx1MDAwN1wiLFxuICAgIFwidFxcdTAwMDJcXHUwMDAyXFx1MDA4OVxcdTAwOGFcXHUwMDA3Z1xcdTAwMDJcXHUwMDAyXFx1MDA4YVxcdTAwOGJcXHUwMDA3aVxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDhiXFx1MDAxOFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDhjXFx1MDA4ZFxcdTAwMDddXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwOGRcXHUwMDFhXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwOGVcXHUwMDhmXFx1MDAwN19cXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDA4ZlxcdTAwMWNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDA5MFxcdTAwOTFcXHUwMDA3ZVxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDkxXFx1MDA5MlxcdTAwMDd0XFx1MDAwMlxcdTAwMDJcXHUwMDkyXFx1MDA5M1xcdTAwMDdnXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwOTNcXHUwMDk0XFx1MDAwN2lcXHUwMDAyXFx1MDAwMlxcdTAwOTRcXHUwMDFlXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDA5NVxcdTAwOTZcXHUwMDA3aVxcdTAwMDJcXHUwMDAyXFx1MDA5NlxcdTAwOTdcXHUwMDA3Y1xcdTAwMDJcXHUwMDAyXFx1MDA5N1wiLFxuICAgIFwiXFx1MDA5OFxcdTAwMDd2XFx1MDAwMlxcdTAwMDJcXHUwMDk4XFx1MDA5OVxcdTAwMDdnXFx1MDAwMlxcdTAwMDJcXHUwMDk5IFxcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwOWFcXHUwMDliXFx1MDAwN31cXHUwMDAyXFx1MDAwMlxcdTAwOWJcXFwiXFx1MDAwM1xcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDA5Y1xcdTAwOWRcXHUwMDA3b1xcdTAwMDJcXHUwMDAyXFx1MDA5ZFxcdTAwOWVcXHUwMDA3Z1xcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDllXFx1MDA5ZlxcdTAwMDdjXFx1MDAwMlxcdTAwMDJcXHUwMDlmXFx1MDBhMFxcdTAwMDd1XFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwYTBcXHUwMGExXFx1MDAwN3dcXHUwMDAyXFx1MDAwMlxcdTAwYTFcXHUwMGEyXFx1MDAwN3RcXHUwMDAyXFx1MDAwMlxcdTAwYTJcIixcbiAgICBcIlxcdTAwYTNcXHUwMDA3Z1xcdTAwMDJcXHUwMDAyXFx1MDBhMyRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBhNFxcdTAwYTVcIixcbiAgICBcIlxcdTAwMDcvXFx1MDAwMlxcdTAwMDJcXHUwMGE1XFx1MDBhNlxcdTAwMDdAXFx1MDAwMlxcdTAwMDJcXHUwMGE2JlxcdTAwMDNcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwYTdcXHUwMGE4XFx1MDAwN3RcXHUwMDAyXFx1MDAwMlxcdTAwYThcXHUwMGE5XFx1MDAwN2dcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBhOVxcdTAwYWFcXHUwMDA3dVxcdTAwMDJcXHUwMDAyXFx1MDBhYVxcdTAwYWJcXHUwMDA3Z1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGFiXFx1MDBhY1xcdTAwMDd2XFx1MDAwMlxcdTAwMDJcXHUwMGFjKFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGFkXCIsXG4gICAgXCJcXHUwMGFlXFx1MDAwN1dcXHUwMDAyXFx1MDAwMlxcdTAwYWUqXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwYWZcXHUwMGIwXCIsXG4gICAgXCJcXHUwMDA3RVxcdTAwMDJcXHUwMDAyXFx1MDBiMFxcdTAwYjFcXHUwMDA3WlxcdTAwMDJcXHUwMDAyXFx1MDBiMSxcXHUwMDAzXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMGIyXFx1MDBiM1xcdTAwMDcuXFx1MDAwMlxcdTAwMDJcXHUwMGIzLlxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYjRcXHUwMGI1XFx1MDAwN2BcXHUwMDAyXFx1MDAwMlxcdTAwYjUwXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBiNlxcdTAwYjdcXHUwMDA3LFxcdTAwMDJcXHUwMDAyXFx1MDBiNzJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBiOFwiLFxuICAgIFwiXFx1MDBiOVxcdTAwMDcxXFx1MDAwMlxcdTAwMDJcXHUwMGI5NFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGJhXFx1MDBiYlwiLFxuICAgIFwiXFx1MDAwNy1cXHUwMDAyXFx1MDAwMlxcdTAwYmI2XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwYmNcXHUwMGJkXFx1MDAwN1wiLFxuICAgIFwiL1xcdTAwMDJcXHUwMDAyXFx1MDBiZDhcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBiZVxcdTAwYmZcXHUwMDA3dVxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGJmXFx1MDBjMFxcdTAwMDdrXFx1MDAwMlxcdTAwMDJcXHUwMGMwXFx1MDBjMVxcdTAwMDdwXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwYzE6XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwYzJcXHUwMGMzXFx1MDAwN2VcXHUwMDAyXFx1MDAwMlxcdTAwYzNcIixcbiAgICBcIlxcdTAwYzRcXHUwMDA3cVxcdTAwMDJcXHUwMDAyXFx1MDBjNFxcdTAwYzVcXHUwMDA3dVxcdTAwMDJcXHUwMDAyXFx1MDBjNTxcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGM2XFx1MDBjN1xcdTAwMDd2XFx1MDAwMlxcdTAwMDJcXHUwMGM3XFx1MDBjOFxcdTAwMDdcIixcbiAgICBcImNcXHUwMDAyXFx1MDAwMlxcdTAwYzhcXHUwMGM5XFx1MDAwN3BcXHUwMDAyXFx1MDAwMlxcdTAwYzk+XFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBjYVxcdTAwY2JcXHUwMDA3Z1xcdTAwMDJcXHUwMDAyXFx1MDBjYlxcdTAwY2NcXHUwMDA3elxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGNjXFx1MDBjZFxcdTAwMDdyXFx1MDAwMlxcdTAwMDJcXHUwMGNkQFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGNlXCIsXG4gICAgXCJcXHUwMGNmXFx1MDAwN25cXHUwMDAyXFx1MDAwMlxcdTAwY2ZcXHUwMGQwXFx1MDAwN3BcXHUwMDAyXFx1MDAwMlxcdTAwZDBCXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBkMVxcdTAwZDJcXHUwMDA3dVxcdTAwMDJcXHUwMDAyXFx1MDBkMlxcdTAwZDNcXHUwMDA3XCIsXG4gICAgXCJzXFx1MDAwMlxcdTAwMDJcXHUwMGQzXFx1MDBkNFxcdTAwMDd0XFx1MDAwMlxcdTAwMDJcXHUwMGQ0XFx1MDBkNVxcdTAwMDd2XFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwZDVEXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZDZcXHUwMGQ3XFx1MDAwN3JcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBkN1xcdTAwZDhcXHUwMDA3a1xcdTAwMDJcXHUwMDAyXFx1MDBkOEZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBkOVwiLFxuICAgIFwiXFx1MDBkYVxcdTAwMDVJJVxcdTAwMDJcXHUwMGRhXFx1MDBkYlxcdTAwMDVLJlxcdTAwMDJcXHUwMGRiXFx1MDBlMVxcdTAwMDNcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwZGNcXHUwMGRkXFx1MDAwNU1cXCdcXHUwMDAyXFx1MDBkZFxcdTAwZGVcXHUwMDA1SyZcXHUwMDAyXFx1MDBkZVwiLFxuICAgIFwiXFx1MDBlMVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGRmXFx1MDBlMVxcdTAwMDVJJVxcdTAwMDJcXHUwMGUwXFx1MDBkOVwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZTBcXHUwMGRjXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZTBcXHUwMGRmXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBlMUhcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBlMlxcdTAwZTNcIixcbiAgICBcIlxcdTAwMDVNXFwnXFx1MDAwMlxcdTAwZTNcXHUwMGU1XFx1MDAwNzBcXHUwMDAyXFx1MDAwMlxcdTAwZTRcXHUwMGU2XFx0XFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGU1XFx1MDBlNFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGU2XFx1MDBlN1xcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwZTdcXHUwMGU1XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZTdcXHUwMGU4XFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBlOEpcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBlOVxcdTAwZWFcXHRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwZWFcXHUwMGVjXFx0XFx1MDAwNFxcdTAwMDJcXHUwMDAyXFx1MDBlYlxcdTAwZWRcXHRcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGVjXCIsXG4gICAgXCJcXHUwMGViXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZWRcXHUwMGVlXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZWVcIixcbiAgICBcIlxcdTAwZWNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBlZVxcdTAwZWZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBlZlwiLFxuICAgIFwiTFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGYwXFx1MDBmMlxcdFxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZjFcXHUwMGYwXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBmMlxcdTAwZjNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBmM1xcdTAwZjFcIixcbiAgICBcIlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGYzXFx1MDBmNFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGY0TlwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZjVcXHUwMGY5XFx0XFx1MDAwNVxcdTAwMDJcXHUwMDAyXFx1MDBmNlxcdTAwZjhcIixcbiAgICBcIlxcdFxcdTAwMDZcXHUwMDAyXFx1MDAwMlxcdTAwZjdcXHUwMGY2XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZjhcXHUwMGZiXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBmOVxcdTAwZjdcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBmOVxcdTAwZmFcIixcbiAgICBcIlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGZhUFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGZiXFx1MDBmOVwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZmNcXHUwMGZlXFx0XFx1MDAwN1xcdTAwMDJcXHUwMDAyXFx1MDBmZFxcdTAwZmNcIixcbiAgICBcIlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGZlXFx1MDBmZlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGZmXFx1MDBmZFwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZmZcXHUwMTAwXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMDBcXHUwMTAxXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEwMVxcdTAxMDJcXGIpXFx1MDAwMlxcdTAwMDJcXHUwMTAyUlxcdTAwMDNcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAxMDNcXHUwMTA1XFx1MDAwNyRcXHUwMDAyXFx1MDAwMlxcdTAxMDRcXHUwMTA2XFx0XFxiXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAxMDVcXHUwMTA0XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMDZcXHUwMTA3XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDEwN1xcdTAxMDVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEwN1xcdTAxMDhcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMTA4XFx1MDEwOVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTA5XFx1MDEwYVxcdTAwMDckXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAxMGFUXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMGJcXHUwMTBjXFx1MDAwNzFcXHUwMDAyXFx1MDAwMlxcdTAxMGNcIixcbiAgICBcIlxcdTAxMGRcXHUwMDA3LFxcdTAwMDJcXHUwMDAyXFx1MDEwZFxcdTAxMTFcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEwZVwiLFxuICAgIFwiXFx1MDExMFxcdTAwMGJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTBmXFx1MDEwZVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTEwXCIsXG4gICAgXCJcXHUwMTEzXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMTFcXHUwMTEyXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMTFcIixcbiAgICBcIlxcdTAxMGZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExMlxcdTAxMTRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExM1wiLFxuICAgIFwiXFx1MDExMVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTE0XFx1MDExNVxcdTAwMDcsXFx1MDAwMlxcdTAwMDJcXHUwMTE1XCIsXG4gICAgXCJcXHUwMTE2XFx1MDAwNzFcXHUwMDAyXFx1MDAwMlxcdTAxMTZcXHUwMTE3XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMTdcIixcbiAgICBcIlxcdTAxMThcXGIrXFx1MDAwMlxcdTAwMDJcXHUwMTE4VlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTE5XFx1MDExYVxcdTAwMDdcIixcbiAgICBcIjFcXHUwMDAyXFx1MDAwMlxcdTAxMWFcXHUwMTFiXFx1MDAwNzFcXHUwMDAyXFx1MDAwMlxcdTAxMWJcXHUwMTFmXFx1MDAwM1xcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDExY1xcdTAxMWVcXG5cXHRcXHUwMDAyXFx1MDAwMlxcdTAxMWRcXHUwMTFjXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDExZVxcdTAxMjFcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExZlxcdTAxMWRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMTFmXFx1MDEyMFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTIwXFx1MDEyMlxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAxMjFcXHUwMTFmXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMjJcXHUwMTIzXFxiLFxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMTIzWFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXGZcXHUwMDAyXFx1MDBlMFxcdTAwZTdcXHUwMGVlXFx1MDBmM1xcdTAwZjlcIixcbiAgICBcIlxcdTAwZmZcXHUwMTA3XFx1MDExMVxcdTAxMWZcXHUwMDAzXFxiXFx1MDAwMlxcdTAwMDJcIl0uam9pbihcIlwiKTtcblxuXG52YXIgYXRuID0gbmV3IGFudGxyNC5hdG4uQVRORGVzZXJpYWxpemVyKCkuZGVzZXJpYWxpemUoc2VyaWFsaXplZEFUTik7XG5cbnZhciBkZWNpc2lvbnNUb0RGQSA9IGF0bi5kZWNpc2lvblRvU3RhdGUubWFwKCBmdW5jdGlvbihkcywgaW5kZXgpIHsgcmV0dXJuIG5ldyBhbnRscjQuZGZhLkRGQShkcywgaW5kZXgpOyB9KTtcblxuZnVuY3Rpb24gUUFTTUxleGVyKGlucHV0KSB7XG5cdGFudGxyNC5MZXhlci5jYWxsKHRoaXMsIGlucHV0KTtcbiAgICB0aGlzLl9pbnRlcnAgPSBuZXcgYW50bHI0LmF0bi5MZXhlckFUTlNpbXVsYXRvcih0aGlzLCBhdG4sIGRlY2lzaW9uc1RvREZBLCBuZXcgYW50bHI0LlByZWRpY3Rpb25Db250ZXh0Q2FjaGUoKSk7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cblFBU01MZXhlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5MZXhlci5wcm90b3R5cGUpO1xuUUFTTUxleGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFFBU01MZXhlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFFBU01MZXhlci5wcm90b3R5cGUsIFwiYXRuXCIsIHtcbiAgICAgICAgZ2V0IDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF0bjtcbiAgICAgICAgfVxufSk7XG5cblFBU01MZXhlci5FT0YgPSBhbnRscjQuVG9rZW4uRU9GO1xuUUFTTUxleGVyLlRfXzAgPSAxO1xuUUFTTUxleGVyLlRfXzEgPSAyO1xuUUFTTUxleGVyLlRfXzIgPSAzO1xuUUFTTUxleGVyLlRfXzMgPSA0O1xuUUFTTUxleGVyLlRfXzQgPSA1O1xuUUFTTUxleGVyLlRfXzUgPSA2O1xuUUFTTUxleGVyLlRfXzYgPSA3O1xuUUFTTUxleGVyLlRfXzcgPSA4O1xuUUFTTUxleGVyLlRfXzggPSA5O1xuUUFTTUxleGVyLlRfXzkgPSAxMDtcblFBU01MZXhlci5UX18xMCA9IDExO1xuUUFTTUxleGVyLlRfXzExID0gMTI7XG5RQVNNTGV4ZXIuVF9fMTIgPSAxMztcblFBU01MZXhlci5UX18xMyA9IDE0O1xuUUFTTUxleGVyLlRfXzE0ID0gMTU7XG5RQVNNTGV4ZXIuVF9fMTUgPSAxNjtcblFBU01MZXhlci5UX18xNiA9IDE3O1xuUUFTTUxleGVyLlRfXzE3ID0gMTg7XG5RQVNNTGV4ZXIuVF9fMTggPSAxOTtcblFBU01MZXhlci5UX18xOSA9IDIwO1xuUUFTTUxleGVyLlRfXzIwID0gMjE7XG5RQVNNTGV4ZXIuVF9fMjEgPSAyMjtcblFBU01MZXhlci5UX18yMiA9IDIzO1xuUUFTTUxleGVyLlRfXzIzID0gMjQ7XG5RQVNNTGV4ZXIuVF9fMjQgPSAyNTtcblFBU01MZXhlci5UX18yNSA9IDI2O1xuUUFTTUxleGVyLlRfXzI2ID0gMjc7XG5RQVNNTGV4ZXIuVF9fMjcgPSAyODtcblFBU01MZXhlci5UX18yOCA9IDI5O1xuUUFTTUxleGVyLlRfXzI5ID0gMzA7XG5RQVNNTGV4ZXIuVF9fMzAgPSAzMTtcblFBU01MZXhlci5UX18zMSA9IDMyO1xuUUFTTUxleGVyLlRfXzMyID0gMzM7XG5RQVNNTGV4ZXIuUEkgPSAzNDtcblFBU01MZXhlci5SRUFMID0gMzU7XG5RQVNNTGV4ZXIuU1VCUkVBTCA9IDM2O1xuUUFTTUxleGVyLkVYUFJFQUwgPSAzNztcblFBU01MZXhlci5JTlQgPSAzODtcblFBU01MZXhlci5JRCA9IDM5O1xuUUFTTUxleGVyLldTID0gNDA7XG5RQVNNTGV4ZXIuRklMRU5BTUUgPSA0MTtcblFBU01MZXhlci5DT01NRU5UID0gNDI7XG5RQVNNTGV4ZXIuTElORV9DT01NRU5UID0gNDM7XG5cblFBU01MZXhlci5wcm90b3R5cGUuY2hhbm5lbE5hbWVzID0gWyBcIkRFRkFVTFRfVE9LRU5fQ0hBTk5FTFwiLCBcIkhJRERFTlwiIF07XG5cblFBU01MZXhlci5wcm90b3R5cGUubW9kZU5hbWVzID0gWyBcIkRFRkFVTFRfTU9ERVwiIF07XG5cblFBU01MZXhlci5wcm90b3R5cGUubGl0ZXJhbE5hbWVzID0gWyBudWxsLCBcIid9J1wiLCBcIidvcGFxdWUnXCIsIFwiJzsnXCIsIFwiJygnXCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiJyknXCIsIFwiJ2lmJ1wiLCBcIic9PSdcIiwgXCInYmFycmllcidcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCInT1BFTlFBU00nXCIsIFwiJ2luY2x1ZGUnXCIsIFwiJ3FyZWcnXCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiJ1snXCIsIFwiJ10nXCIsIFwiJ2NyZWcnXCIsIFwiJ2dhdGUnXCIsIFwiJ3snXCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiJ21lYXN1cmUnXCIsIFwiJy0+J1wiLCBcIidyZXNldCdcIiwgXCInVSdcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCInQ1gnXCIsIFwiJywnXCIsIFwiJ14nXCIsIFwiJyonXCIsIFwiJy8nXCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiJysnXCIsIFwiJy0nXCIsIFwiJ3NpbidcIiwgXCInY29zJ1wiLCBcIid0YW4nXCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiJ2V4cCdcIiwgXCInbG4nXCIsIFwiJ3NxcnQnXCIsIFwiJ3BpJ1wiIF07XG5cblFBU01MZXhlci5wcm90b3R5cGUuc3ltYm9saWNOYW1lcyA9IFsgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLCBudWxsLCBudWxsLCBudWxsLCBcIlBJXCIsIFwiUkVBTFwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTVUJSRUFMXCIsIFwiRVhQUkVBTFwiLCBcIklOVFwiLCBcIklEXCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIldTXCIsIFwiRklMRU5BTUVcIiwgXCJDT01NRU5UXCIsIFwiTElORV9DT01NRU5UXCIgXTtcblxuUUFTTUxleGVyLnByb3RvdHlwZS5ydWxlTmFtZXMgPSBbIFwiVF9fMFwiLCBcIlRfXzFcIiwgXCJUX18yXCIsIFwiVF9fM1wiLCBcIlRfXzRcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJUX181XCIsIFwiVF9fNlwiLCBcIlRfXzdcIiwgXCJUX184XCIsIFwiVF9fOVwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRfXzEwXCIsIFwiVF9fMTFcIiwgXCJUX18xMlwiLCBcIlRfXzEzXCIsIFwiVF9fMTRcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJUX18xNVwiLCBcIlRfXzE2XCIsIFwiVF9fMTdcIiwgXCJUX18xOFwiLCBcIlRfXzE5XCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVF9fMjBcIiwgXCJUX18yMVwiLCBcIlRfXzIyXCIsIFwiVF9fMjNcIiwgXCJUX18yNFwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRfXzI1XCIsIFwiVF9fMjZcIiwgXCJUX18yN1wiLCBcIlRfXzI4XCIsIFwiVF9fMjlcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJUX18zMFwiLCBcIlRfXzMxXCIsIFwiVF9fMzJcIiwgXCJQSVwiLCBcIlJFQUxcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTVUJSRUFMXCIsIFwiRVhQUkVBTFwiLCBcIklOVFwiLCBcIklEXCIsIFwiV1NcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJGSUxFTkFNRVwiLCBcIkNPTU1FTlRcIiwgXCJMSU5FX0NPTU1FTlRcIiBdO1xuXG5RQVNNTGV4ZXIucHJvdG90eXBlLmdyYW1tYXJGaWxlTmFtZSA9IFwiUUFTTS5nNFwiO1xuXG5cblxuZXhwb3J0cy5RQVNNTGV4ZXIgPSBRQVNNTGV4ZXI7XG5cbiIsIi8vIEdlbmVyYXRlZCBmcm9tIFFBU00uZzQgYnkgQU5UTFIgNC43LjFcbi8vIGpzaGludCBpZ25vcmU6IHN0YXJ0XG52YXIgYW50bHI0ID0gcmVxdWlyZSgnYW50bHI0L2luZGV4Jyk7XG5cbi8vIFRoaXMgY2xhc3MgZGVmaW5lcyBhIGNvbXBsZXRlIGxpc3RlbmVyIGZvciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlci5cbmZ1bmN0aW9uIFFBU01MaXN0ZW5lcigpIHtcblx0YW50bHI0LnRyZWUuUGFyc2VUcmVlTGlzdGVuZXIuY2FsbCh0aGlzKTtcblx0cmV0dXJuIHRoaXM7XG59XG5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC50cmVlLlBhcnNlVHJlZUxpc3RlbmVyLnByb3RvdHlwZSk7XG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUUFTTUxpc3RlbmVyO1xuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNtYWlucHJvZy5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJNYWlucHJvZyA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNtYWlucHJvZy5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdE1haW5wcm9nID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI3N0YXRlbWVudC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJTdGF0ZW1lbnQgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjc3RhdGVtZW50LlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0U3RhdGVtZW50ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI3ZlcnNpb24uXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyVmVyc2lvbiA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciN2ZXJzaW9uLlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0VmVyc2lvbiA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNpbmNsdWRlLlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlckluY2x1ZGUgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjaW5jbHVkZS5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdEluY2x1ZGUgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZmlsZW5hbWUuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyRmlsZW5hbWUgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZmlsZW5hbWUuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRGaWxlbmFtZSA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNkZWNsLlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlckRlY2wgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZGVjbC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdERlY2wgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZ2F0ZWRlY2wuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyR2F0ZWRlY2wgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZ2F0ZWRlY2wuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRHYXRlZGVjbCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNnb3BsaXN0LlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlckdvcGxpc3QgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZ29wbGlzdC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdEdvcGxpc3QgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjcW9wLlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlclFvcCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNxb3AuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRRb3AgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjdW9wLlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlclVvcCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciN1b3AuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRVb3AgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjYW55bGlzdC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJBbnlsaXN0ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG4vLyBFeGl0IGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2FueWxpc3QuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRBbnlsaXN0ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2lkbGlzdC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJJZGxpc3QgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjaWRsaXN0LlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0SWRsaXN0ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI21peGVkbGlzdC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJNaXhlZGxpc3QgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjbWl4ZWRsaXN0LlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0TWl4ZWRsaXN0ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2FyZ3VtZW50LlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlckFyZ3VtZW50ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG4vLyBFeGl0IGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2FyZ3VtZW50LlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0QXJndW1lbnQgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZXhwbGlzdC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJFeHBsaXN0ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG4vLyBFeGl0IGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2V4cGxpc3QuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRFeHBsaXN0ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2V4cC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJFeHAgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZXhwLlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0RXhwID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2F0b20uXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyQXRvbSA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNhdG9tLlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0QXRvbSA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciN1bmFyeW9wLlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlclVuYXJ5b3AgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjdW5hcnlvcC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdFVuYXJ5b3AgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuXG5leHBvcnRzLlFBU01MaXN0ZW5lciA9IFFBU01MaXN0ZW5lcjsiLCIvLyBHZW5lcmF0ZWQgZnJvbSBRQVNNLmc0IGJ5IEFOVExSIDQuNy4xXG4vLyBqc2hpbnQgaWdub3JlOiBzdGFydFxudmFyIGFudGxyNCA9IHJlcXVpcmUoJ2FudGxyNC9pbmRleCcpO1xudmFyIFFBU01MaXN0ZW5lciA9IHJlcXVpcmUoJy4vUUFTTUxpc3RlbmVyJykuUUFTTUxpc3RlbmVyO1xudmFyIGdyYW1tYXJGaWxlTmFtZSA9IFwiUUFTTS5nNFwiO1xuXG52YXIgc2VyaWFsaXplZEFUTiA9IFtcIlxcdTAwMDNcXHU2MDhiXFx1YTcyYVxcdTgxMzNcXHViOWVkXFx1NDE3Y1xcdTNiZTdcXHU3Nzg2XFx1NTk2NFwiLFxuICAgIFwiXFx1MDAwMy1cXHUwMTMwXFx1MDAwNFxcdTAwMDJcXHRcXHUwMDAyXFx1MDAwNFxcdTAwMDNcXHRcXHUwMDAzXFx1MDAwNFxcdTAwMDRcXHRcIixcbiAgICBcIlxcdTAwMDRcXHUwMDA0XFx1MDAwNVxcdFxcdTAwMDVcXHUwMDA0XFx1MDAwNlxcdFxcdTAwMDZcXHUwMDA0XFx1MDAwN1xcdFxcdTAwMDdcXHUwMDA0XCIsXG4gICAgXCJcXGJcXHRcXGJcXHUwMDA0XFx0XFx0XFx0XFx1MDAwNFxcblxcdFxcblxcdTAwMDRcXHUwMDBiXFx0XFx1MDAwYlxcdTAwMDRcXGZcXHRcXGZcXHUwMDA0XCIsXG4gICAgXCJcXHJcXHRcXHJcXHUwMDA0XFx1MDAwZVxcdFxcdTAwMGVcXHUwMDA0XFx1MDAwZlxcdFxcdTAwMGZcXHUwMDA0XFx1MDAxMFxcdFxcdTAwMTBcXHUwMDA0XCIsXG4gICAgXCJcXHUwMDExXFx0XFx1MDAxMVxcdTAwMDRcXHUwMDEyXFx0XFx1MDAxMlxcdTAwMDRcXHUwMDEzXFx0XFx1MDAxM1xcdTAwMDNcXHUwMDAyXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDdcXHUwMDAyKVxcblxcdTAwMDJcXGZcXHUwMDAyXFx1MDAwZVxcdTAwMDIsXFx1MDAwYlxcdTAwMDJcXHUwMDAzXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcIixcbiAgICBcIlxcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcIixcbiAgICBcIlxcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDA1XFx1MDAwM1dcXG5cXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwNFxcdTAwMDNcXHUwMDA0XFx1MDAwM1xcdTAwMDRcXHUwMDAzXFx1MDAwNFxcdTAwMDNcXHUwMDA1XFx1MDAwM1xcdTAwMDVcIixcbiAgICBcIlxcdTAwMDNcXHUwMDA1XFx1MDAwM1xcdTAwMDVcXHUwMDAzXFx1MDAwNlxcdTAwMDNcXHUwMDA2XFx1MDAwM1xcdTAwMDdcXHUwMDAzXFx1MDAwN1wiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDdcXHUwMDAzXFx1MDAwN1xcdTAwMDNcXHUwMDA3XFx1MDAwM1xcdTAwMDdcXHUwMDAzXFx1MDAwN1xcdTAwMDNcXHUwMDA3XCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwN1xcdTAwMDNcXHUwMDA3XFx1MDAwM1xcdTAwMDdcXHUwMDAzXFx1MDAwN1xcdTAwMDVcXHUwMDA3b1xcblxcdTAwMDdcIixcbiAgICBcIlxcdTAwMDNcXGJcXHUwMDAzXFxiXFx1MDAwM1xcYlxcdTAwMDNcXGJcXHUwMDAzXFxiXFx1MDAwM1xcYlxcdTAwMDNcXGJcXHUwMDAzXFxiXFx1MDAwM1wiLFxuICAgIFwiXFxiXFx1MDAwM1xcYlxcdTAwMDNcXGJcXHUwMDAzXFxiXFx1MDAwM1xcYlxcdTAwMDNcXGJcXHUwMDAzXFxiXFx1MDAwM1xcYlxcdTAwMDNcXGJcXHUwMDAzXCIsXG4gICAgXCJcXGJcXHUwMDAzXFxiXFx1MDAwM1xcYlxcdTAwMDVcXGJcXHUwMDg1XFxuXFxiXFx1MDAwM1xcdFxcdTAwMDNcXHRcXHUwMDAzXFx0XFx1MDAwM1xcdFwiLFxuICAgIFwiXFx1MDAwM1xcdFxcdTAwMDZcXHRcXHUwMDhjXFxuXFx0XFxyXFx0XFx1MDAwZVxcdFxcdTAwOGRcXHUwMDAzXFxuXFx1MDAwM1xcblxcdTAwMDNcXG5cIixcbiAgICBcIlxcdTAwMDNcXG5cXHUwMDAzXFxuXFx1MDAwM1xcblxcdTAwMDNcXG5cXHUwMDAzXFxuXFx1MDAwM1xcblxcdTAwMDNcXG5cXHUwMDAzXFxuXFx1MDAwNVwiLFxuICAgIFwiXFxuXFx1MDA5YlxcblxcblxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcIixcbiAgICBcIlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcIixcbiAgICBcIlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMGJcXHUwMDA1XFx1MDAwYlxcdTAwYmJcXG5cXHUwMDBiXFx1MDAwM1xcZlxcdTAwMDNcXGZcXHUwMDA1XFxmXFx1MDBiZlwiLFxuICAgIFwiXFxuXFxmXFx1MDAwM1xcclxcdTAwMDNcXHJcXHUwMDA3XFxyXFx1MDBjM1xcblxcclxcZlxcclxcdTAwMGVcXHJcXHUwMGM2XFx1MDAwYlxcclxcdTAwMDNcIixcbiAgICBcIlxcclxcdTAwMDNcXHJcXHUwMDAzXFx1MDAwZVxcdTAwMDNcXHUwMDBlXFx1MDAwM1xcdTAwMGVcXHUwMDAzXFx1MDAwZVxcdTAwMDNcXHUwMDBlXCIsXG4gICAgXCJcXHUwMDA3XFx1MDAwZVxcdTAwY2ZcXG5cXHUwMDBlXFxmXFx1MDAwZVxcdTAwMGVcXHUwMDBlXFx1MDBkMlxcdTAwMGJcXHUwMDBlXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwZVxcdTAwMDNcXHUwMDBlXFx1MDAwM1xcdTAwMGVcXHUwMDAzXFx1MDAwZVxcdTAwMDNcXHUwMDBlXFx1MDAwM1xcdTAwMGVcXHUwMDA3XCIsXG4gICAgXCJcXHUwMDBlXFx1MDBkYVxcblxcdTAwMGVcXGZcXHUwMDBlXFx1MDAwZVxcdTAwMGVcXHUwMGRkXFx1MDAwYlxcdTAwMGVcXHUwMDAzXFx1MDAwZVwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMGVcXHUwMDAzXFx1MDAwZVxcdTAwMDNcXHUwMDBlXFx1MDAwM1xcdTAwMGVcXHUwMDAzXFx1MDAwZVxcdTAwMDdcXHUwMDBlXCIsXG4gICAgXCJcXHUwMGU1XFxuXFx1MDAwZVxcZlxcdTAwMGVcXHUwMDBlXFx1MDAwZVxcdTAwZThcXHUwMDBiXFx1MDAwZVxcdTAwMDNcXHUwMDBlXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwZVxcdTAwMDdcXHUwMDBlXFx1MDBlY1xcblxcdTAwMGVcXGZcXHUwMDBlXFx1MDAwZVxcdTAwMGVcXHUwMGVmXFx1MDAwYlxcdTAwMGVcIixcbiAgICBcIlxcdTAwMDNcXHUwMDBlXFx1MDAwM1xcdTAwMGVcXHUwMDAzXFx1MDAwZVxcdTAwMDNcXHUwMDBlXFx1MDAwNVxcdTAwMGVcXHUwMGY1XFxuXCIsXG4gICAgXCJcXHUwMDBlXFx1MDAwM1xcdTAwMGZcXHUwMDAzXFx1MDAwZlxcdTAwMDNcXHUwMDBmXFx1MDAwM1xcdTAwMGZcXHUwMDAzXFx1MDAwZlxcdTAwMDVcIixcbiAgICBcIlxcdTAwMGZcXHUwMGZjXFxuXFx1MDAwZlxcdTAwMDNcXHUwMDEwXFx1MDAwM1xcdTAwMTBcXHUwMDAzXFx1MDAxMFxcdTAwMDdcXHUwMDEwXCIsXG4gICAgXCJcXHUwMTAxXFxuXFx1MDAxMFxcZlxcdTAwMTBcXHUwMDBlXFx1MDAxMFxcdTAxMDRcXHUwMDBiXFx1MDAxMFxcdTAwMDNcXHUwMDEwXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAxMFxcdTAwMDNcXHUwMDExXFx1MDAwM1xcdTAwMTFcXHUwMDA1XFx1MDAxMVxcdTAxMGFcXG5cXHUwMDExXFx1MDAwM1xcdTAwMTFcIixcbiAgICBcIlxcdTAwMDNcXHUwMDExXFx1MDAwM1xcdTAwMTFcXHUwMDAzXFx1MDAxMVxcdTAwMDNcXHUwMDExXFx1MDAwNVxcdTAwMTFcXHUwMTExXFxuXCIsXG4gICAgXCJcXHUwMDExXFx1MDAwM1xcdTAwMTFcXHUwMDAzXFx1MDAxMVxcdTAwMDNcXHUwMDExXFx1MDAwM1xcdTAwMTFcXHUwMDAzXFx1MDAxMVxcdTAwMDNcIixcbiAgICBcIlxcdTAwMTFcXHUwMDA1XFx1MDAxMVxcdTAxMTlcXG5cXHUwMDExXFx1MDAwM1xcdTAwMTFcXHUwMDA1XFx1MDAxMVxcdTAxMWNcXG5cXHUwMDExXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAxMVxcdTAwMDNcXHUwMDExXFx1MDAwM1xcdTAwMTFcXHUwMDAzXFx1MDAxMVxcdTAwMDNcXHUwMDExXFx1MDAwM1xcdTAwMTFcIixcbiAgICBcIlxcdTAwMDNcXHUwMDExXFx1MDAwM1xcdTAwMTFcXHUwMDAzXFx1MDAxMVxcdTAwMDdcXHUwMDExXFx1MDEyN1xcblxcdTAwMTFcXGZcXHUwMDExXCIsXG4gICAgXCJcXHUwMDBlXFx1MDAxMVxcdTAxMmFcXHUwMDBiXFx1MDAxMVxcdTAwMDNcXHUwMDEyXFx1MDAwM1xcdTAwMTJcXHUwMDAzXFx1MDAxM1xcdTAwMDNcIixcbiAgICBcIlxcdTAwMTNcXHUwMDAzXFx1MDAxM1xcdTAwMDJcXHUwMDAzIFxcdTAwMTRcXHUwMDAyXFx1MDAwNFxcdTAwMDZcXGJcXG5cXGZcXHUwMDBlXCIsXG4gICAgXCJcXHUwMDEwXFx1MDAxMlxcdTAwMTRcXHUwMDE2XFx1MDAxOFxcdTAwMWFcXHUwMDFjXFx1MDAxZSBcXFwiJFxcdTAwMDJcXHUwMDA2XFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMWNcXHUwMDFkXFx1MDAwM1xcdTAwMDJcXHUwMDFhXFx1MDAxYlxcdTAwMDRcXHUwMDAyJCUoKVxcdTAwMDNcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDFlI1xcdTAwMDJcXHUwMTQ0XFx1MDAwMiZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwNFZcXHUwMDAzXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDA2WFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXGJcXFxcXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFxuYFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXGZuXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMGVcXHUwMDg0XFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAxMFxcdTAwOGJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAxMlxcdTAwOWFcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDE0XFx1MDBiYVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDE2XFx1MDBiZVxcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMThcXHUwMGM0XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMWFcXHUwMGY0XFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAxY1xcdTAwZmJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAxZVxcdTAxMDJcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDIgXFx1MDExYlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXFwiXFx1MDEyYlxcdTAwMDNcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMiRcXHUwMTJkXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMiYqXFx1MDAwNVxcdTAwMDZcXHUwMDA0XFx1MDAwMlwiLFxuICAgIFwiXFwnKVxcdTAwMDVcXHUwMDA0XFx1MDAwM1xcdTAwMDIoXFwnXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMiksXFx1MDAwM1xcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyKihcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyKitcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyK1xcdTAwMDNcIixcbiAgICBcIlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDIsKlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDItV1xcdTAwMDVcXGZcXHUwMDA3XFx1MDAwMlwiLFxuICAgIFwiLi9cXHUwMDA1XFx1MDAwZVxcYlxcdTAwMDIvMFxcdTAwMDVcXHUwMDEwXFx0XFx1MDAwMjAxXFx1MDAwN1xcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiMVdcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyMjNcXHUwMDA1XFx1MDAwZVxcYlxcdTAwMDIzNFxcdTAwMDdcXHUwMDAzXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMjRXXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMjU2XFx1MDAwN1xcdTAwMDRcXHUwMDAyXFx1MDAwMjY3XFx1MDAwNylcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyNzhcXHUwMDA1XFx1MDAxOFxcclxcdTAwMDI4OVxcdTAwMDdcXHUwMDA1XFx1MDAwMlxcdTAwMDI5V1xcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMjo7XFx1MDAwN1xcdTAwMDRcXHUwMDAyXFx1MDAwMjs8XFx1MDAwNylcXHUwMDAyXFx1MDAwMjw9XCIsXG4gICAgXCJcXHUwMDA3XFx1MDAwNlxcdTAwMDJcXHUwMDAyPT5cXHUwMDA3XFx1MDAwN1xcdTAwMDJcXHUwMDAyPj9cXHUwMDA1XFx1MDAxOFxcclxcdTAwMDJcIixcbiAgICBcIj9AXFx1MDAwN1xcdTAwMDVcXHUwMDAyXFx1MDAwMkBXXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMkFCXFx1MDAwN1xcdTAwMDRcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyQkNcXHUwMDA3KVxcdTAwMDJcXHUwMDAyQ0RcXHUwMDA3XFx1MDAwNlxcdTAwMDJcXHUwMDAyREVcXHUwMDA1XFx1MDAxOFwiLFxuICAgIFwiXFxyXFx1MDAwMkVGXFx1MDAwN1xcdTAwMDdcXHUwMDAyXFx1MDAwMkZHXFx1MDAwNVxcdTAwMThcXHJcXHUwMDAyR0hcXHUwMDA3XFx1MDAwNVwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJIV1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJJV1xcdTAwMDVcXHUwMDEyXFxuXFx1MDAwMkpLXFx1MDAwN1wiLFxuICAgIFwiXFxiXFx1MDAwMlxcdTAwMDJLTFxcdTAwMDdcXHUwMDA2XFx1MDAwMlxcdTAwMDJMTVxcdTAwMDcpXFx1MDAwMlxcdTAwMDJNTlxcdTAwMDdcIixcbiAgICBcIlxcdFxcdTAwMDJcXHUwMDAyTk9cXHUwMDA3KFxcdTAwMDJcXHUwMDAyT1BcXHUwMDA3XFx1MDAwN1xcdTAwMDJcXHUwMDAyUFdcXHUwMDA1XCIsXG4gICAgXCJcXHUwMDEyXFxuXFx1MDAwMlFSXFx1MDAwN1xcblxcdTAwMDJcXHUwMDAyUlNcXHUwMDA1XFx1MDAxNlxcZlxcdTAwMDJTVFxcdTAwMDdcXHUwMDA1XCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlRXXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlVXXFx1MDAwNVxcYlxcdTAwMDVcXHUwMDAyVi1cXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDJWLlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJWMlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlY1XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlY6XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlZBXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyVklcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyVkpcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyVlFcXHUwMDAzXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJWVVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJXXFx1MDAwNVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlhZXFx1MDAwN1xcdTAwMGJcXHUwMDAyXFx1MDAwMllaXFx1MDAwNyVcXHUwMDAyXFx1MDAwMlpbXFx1MDAwN1xcdTAwMDVcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyW1xcdTAwMDdcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFxcXF1cXHUwMDA3XFxmXFx1MDAwMlxcdTAwMDJdXlxcdTAwMDVcIixcbiAgICBcIlxcblxcdTAwMDZcXHUwMDAyXl9cXHUwMDA3XFx1MDAwNVxcdTAwMDJcXHUwMDAyX1xcdFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcImBhXFx1MDAwNytcXHUwMDAyXFx1MDAwMmFcXHUwMDBiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMmJjXFx1MDAwN1xcclxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJjZFxcdTAwMDcpXFx1MDAwMlxcdTAwMDJkZVxcdTAwMDdcXHUwMDBlXFx1MDAwMlxcdTAwMDJlZlxcdTAwMDcoXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMmZnXFx1MDAwN1xcdTAwMGZcXHUwMDAyXFx1MDAwMmdvXFx1MDAwN1xcdTAwMDVcXHUwMDAyXFx1MDAwMmhpXFx1MDAwN1xcdTAwMTBcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyaWpcXHUwMDA3KVxcdTAwMDJcXHUwMDAyamtcXHUwMDA3XFx1MDAwZVxcdTAwMDJcXHUwMDAya2xcXHUwMDA3XCIsXG4gICAgXCIoXFx1MDAwMlxcdTAwMDJsbVxcdTAwMDdcXHUwMDBmXFx1MDAwMlxcdTAwMDJtb1xcdTAwMDdcXHUwMDA1XFx1MDAwMlxcdTAwMDJuYlwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMm5oXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMm9cXHJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJwcVxcdTAwMDdcXHUwMDExXFx1MDAwMlxcdTAwMDJxclxcdTAwMDcpXFx1MDAwMlxcdTAwMDJyc1xcdTAwMDVcXHUwMDE4XCIsXG4gICAgXCJcXHJcXHUwMDAyc3RcXHUwMDA3XFx1MDAxMlxcdTAwMDJcXHUwMDAydFxcdTAwODVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAydXZcIixcbiAgICBcIlxcdTAwMDdcXHUwMDExXFx1MDAwMlxcdTAwMDJ2d1xcdTAwMDcpXFx1MDAwMlxcdTAwMDJ3eFxcdTAwMDdcXHUwMDA2XFx1MDAwMlxcdTAwMDJcIixcbiAgICBcInh5XFx1MDAwN1xcdTAwMDdcXHUwMDAyXFx1MDAwMnl6XFx1MDAwNVxcdTAwMThcXHJcXHUwMDAyentcXHUwMDA3XFx1MDAxMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJ7XFx1MDA4NVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJ8fVxcdTAwMDdcXHUwMDExXFx1MDAwMlxcdTAwMDJ9flxcdTAwMDdcIixcbiAgICBcIilcXHUwMDAyXFx1MDAwMn5cXHUwMDdmXFx1MDAwN1xcdTAwMDZcXHUwMDAyXFx1MDAwMlxcdTAwN2ZcXHUwMDgwXFx1MDAwNVxcdTAwMThcIixcbiAgICBcIlxcclxcdTAwMDJcXHUwMDgwXFx1MDA4MVxcdTAwMDdcXHUwMDA3XFx1MDAwMlxcdTAwMDJcXHUwMDgxXFx1MDA4MlxcdTAwMDVcXHUwMDE4XCIsXG4gICAgXCJcXHJcXHUwMDAyXFx1MDA4MlxcdTAwODNcXHUwMDA3XFx1MDAxMlxcdTAwMDJcXHUwMDAyXFx1MDA4M1xcdTAwODVcXHUwMDAzXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDg0cFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDg0dVxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwODR8XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwODVcXHUwMDBmXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDA4NlxcdTAwOGNcXHUwMDA1XFx1MDAxNFxcdTAwMGJcXHUwMDAyXFx1MDA4N1xcdTAwODhcXHUwMDA3XFxuXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwODhcXHUwMDg5XFx1MDAwNVxcdTAwMThcXHJcXHUwMDAyXFx1MDA4OVxcdTAwOGFcXHUwMDA3XFx1MDAwNVxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDhhXFx1MDA4Y1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDhiXFx1MDA4NlxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwOGJcXHUwMDg3XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwOGNcXHUwMDhkXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDA4ZFxcdTAwOGJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDA4ZFxcdTAwOGVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDhlXFx1MDAxMVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDhmXFx1MDA5YlxcdTAwMDVcXHUwMDE0XFx1MDAwYlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwOTBcXHUwMDkxXFx1MDAwN1xcdTAwMTNcXHUwMDAyXFx1MDAwMlxcdTAwOTFcXHUwMDkyXFx1MDAwNVxcdTAwMWNcXHUwMDBmXCIsXG4gICAgXCJcXHUwMDAyXFx1MDA5MlxcdTAwOTNcXHUwMDA3XFx1MDAxNFxcdTAwMDJcXHUwMDAyXFx1MDA5M1xcdTAwOTRcXHUwMDA1XFx1MDAxY1xcdTAwMGZcIixcbiAgICBcIlxcdTAwMDJcXHUwMDk0XFx1MDA5NVxcdTAwMDdcXHUwMDA1XFx1MDAwMlxcdTAwMDJcXHUwMDk1XFx1MDA5YlxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwOTZcXHUwMDk3XFx1MDAwN1xcdTAwMTVcXHUwMDAyXFx1MDAwMlxcdTAwOTdcXHUwMDk4XFx1MDAwNVxcdTAwMWNcXHUwMDBmXCIsXG4gICAgXCJcXHUwMDAyXFx1MDA5OFxcdTAwOTlcXHUwMDA3XFx1MDAwNVxcdTAwMDJcXHUwMDAyXFx1MDA5OVxcdTAwOWJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDlhXFx1MDA4ZlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDlhXFx1MDA5MFxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwOWFcXHUwMDk2XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwOWJcXHUwMDEzXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDA5Y1xcdTAwOWRcXHUwMDA3XFx1MDAxNlxcdTAwMDJcXHUwMDAyXFx1MDA5ZFxcdTAwOWVcXHUwMDA3XFx1MDAwNlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDllXFx1MDA5ZlxcdTAwMDVcXHUwMDFlXFx1MDAxMFxcdTAwMDJcXHUwMDlmXFx1MDBhMFxcdTAwMDdcXHUwMDA3XFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYTBcXHUwMGExXFx1MDAwNVxcdTAwMWNcXHUwMDBmXFx1MDAwMlxcdTAwYTFcXHUwMGEyXFx1MDAwN1xcdTAwMDVcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBhMlxcdTAwYmJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBhM1xcdTAwYTRcXHUwMDA3XFx1MDAxN1xcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGE0XFx1MDBhNVxcdTAwMDVcXHUwMDFjXFx1MDAwZlxcdTAwMDJcXHUwMGE1XFx1MDBhNlxcdTAwMDdcXHUwMDE4XFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYTZcXHUwMGE3XFx1MDAwNVxcdTAwMWNcXHUwMDBmXFx1MDAwMlxcdTAwYTdcXHUwMGE4XFx1MDAwN1xcdTAwMDVcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBhOFxcdTAwYmJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBhOVxcdTAwYWFcXHUwMDA3KVxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGFhXFx1MDBhYlxcdTAwMDVcXHUwMDE2XFxmXFx1MDAwMlxcdTAwYWJcXHUwMGFjXFx1MDAwN1xcdTAwMDVcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBhY1xcdTAwYmJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBhZFxcdTAwYWVcXHUwMDA3KVxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGFlXFx1MDBhZlxcdTAwMDdcXHUwMDA2XFx1MDAwMlxcdTAwMDJcXHUwMGFmXFx1MDBiMFxcdTAwMDdcXHUwMDA3XFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYjBcXHUwMGIxXFx1MDAwNVxcdTAwMTZcXGZcXHUwMDAyXFx1MDBiMVxcdTAwYjJcXHUwMDA3XFx1MDAwNVxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGIyXFx1MDBiYlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGIzXFx1MDBiNFxcdTAwMDcpXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYjRcXHUwMGI1XFx1MDAwN1xcdTAwMDZcXHUwMDAyXFx1MDAwMlxcdTAwYjVcXHUwMGI2XFx1MDAwNVxcdTAwMWVcXHUwMDEwXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBiNlxcdTAwYjdcXHUwMDA3XFx1MDAwN1xcdTAwMDJcXHUwMDAyXFx1MDBiN1xcdTAwYjhcXHUwMDA1XFx1MDAxNlxcZlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYjhcXHUwMGI5XFx1MDAwN1xcdTAwMDVcXHUwMDAyXFx1MDAwMlxcdTAwYjlcXHUwMGJiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBiYVxcdTAwOWNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBiYVxcdTAwYTNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGJhXFx1MDBhOVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGJhXFx1MDBhZFxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYmFcXHUwMGIzXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwYmJcXHUwMDE1XFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBiY1xcdTAwYmZcXHUwMDA1XFx1MDAxOFxcclxcdTAwMDJcXHUwMGJkXFx1MDBiZlxcdTAwMDVcXHUwMDFhXFx1MDAwZVwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYmVcXHUwMGJjXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwYmVcXHUwMGJkXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBiZlxcdTAwMTdcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBjMFxcdTAwYzFcXHUwMDA3KVxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGMxXFx1MDBjM1xcdTAwMDdcXHUwMDE4XFx1MDAwMlxcdTAwMDJcXHUwMGMyXFx1MDBjMFxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYzNcXHUwMGM2XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwYzRcXHUwMGMyXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBjNFxcdTAwYzVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBjNVxcdTAwYzdcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGM2XFx1MDBjNFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGM3XFx1MDBjOFxcdTAwMDcpXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYzhcXHUwMDE5XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwYzlcXHUwMGNhXFx1MDAwNylcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBjYVxcdTAwY2JcXHUwMDA3XFx1MDAwZVxcdTAwMDJcXHUwMDAyXFx1MDBjYlxcdTAwY2NcXHUwMDA3KFxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGNjXFx1MDBjZFxcdTAwMDdcXHUwMDBmXFx1MDAwMlxcdTAwMDJcXHUwMGNkXFx1MDBjZlxcdTAwMDdcXHUwMDE4XFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwY2VcXHUwMGM5XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwY2ZcXHUwMGQyXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBkMFxcdTAwY2VcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBkMFxcdTAwZDFcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGQxXFx1MDBkM1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGQyXFx1MDBkMFxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwZDNcXHUwMGY1XFx1MDAwNylcXHUwMDAyXFx1MDAwMlxcdTAwZDRcXHUwMGQ1XFx1MDAwNylcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBkNVxcdTAwZDZcXHUwMDA3XFx1MDAwZVxcdTAwMDJcXHUwMDAyXFx1MDBkNlxcdTAwZDdcXHUwMDA3KFxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGQ3XFx1MDBkOFxcdTAwMDdcXHUwMDBmXFx1MDAwMlxcdTAwMDJcXHUwMGQ4XFx1MDBkYVxcdTAwMDdcXHUwMDE4XFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwZDlcXHUwMGQ0XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZGFcXHUwMGRkXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBkYlxcdTAwZDlcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBkYlxcdTAwZGNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGRjXFx1MDBkZVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGRkXFx1MDBkYlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwZGVcXHUwMGRmXFx1MDAwNylcXHUwMDAyXFx1MDAwMlxcdTAwZGZcXHUwMGUwXFx1MDAwN1xcdTAwMGVcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBlMFxcdTAwZTFcXHUwMDA3KFxcdTAwMDJcXHUwMDAyXFx1MDBlMVxcdTAwZjVcXHUwMDA3XFx1MDAwZlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGUyXFx1MDBlM1xcdTAwMDcpXFx1MDAwMlxcdTAwMDJcXHUwMGUzXFx1MDBlNVxcdTAwMDdcXHUwMDE4XFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwZTRcXHUwMGUyXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZTVcXHUwMGU4XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBlNlxcdTAwZTRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBlNlxcdTAwZTdcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGU3XFx1MDBlOVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGU4XFx1MDBlNlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwZTlcXHUwMGVhXFx1MDAwNylcXHUwMDAyXFx1MDAwMlxcdTAwZWFcXHUwMGVjXFx1MDAwN1xcdTAwMThcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBlYlxcdTAwZTZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBlY1xcdTAwZWZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGVkXFx1MDBlYlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGVkXFx1MDBlZVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwZWVcXHUwMGYwXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZWZcXHUwMGVkXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBmMFxcdTAwZjFcXHUwMDA3KVxcdTAwMDJcXHUwMDAyXFx1MDBmMVxcdTAwZjJcXHUwMDA3XFx1MDAwZVxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGYyXFx1MDBmM1xcdTAwMDcoXFx1MDAwMlxcdTAwMDJcXHUwMGYzXFx1MDBmNVxcdTAwMDdcXHUwMDBmXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwZjRcXHUwMGQwXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZjRcXHUwMGRiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBmNFxcdTAwZWRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBmNVxcdTAwMWJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGY2XFx1MDBmY1xcdTAwMDcpXFx1MDAwMlxcdTAwMDJcXHUwMGY3XFx1MDBmOFxcdTAwMDcpXFx1MDAwMlxcdTAwMDJcXHUwMGY4XCIsXG4gICAgXCJcXHUwMGY5XFx1MDAwN1xcdTAwMGVcXHUwMDAyXFx1MDAwMlxcdTAwZjlcXHUwMGZhXFx1MDAwNyhcXHUwMDAyXFx1MDAwMlxcdTAwZmFcIixcbiAgICBcIlxcdTAwZmNcXHUwMDA3XFx1MDAwZlxcdTAwMDJcXHUwMDAyXFx1MDBmYlxcdTAwZjZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBmYlwiLFxuICAgIFwiXFx1MDBmN1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGZjXFx1MDAxZFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGZkXCIsXG4gICAgXCJcXHUwMGZlXFx1MDAwNSBcXHUwMDExXFx1MDAwMlxcdTAwZmVcXHUwMGZmXFx1MDAwN1xcdTAwMThcXHUwMDAyXFx1MDAwMlxcdTAwZmZcIixcbiAgICBcIlxcdTAxMDFcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEwMFxcdTAwZmRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEwMVwiLFxuICAgIFwiXFx1MDEwNFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTAyXFx1MDEwMFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTAyXCIsXG4gICAgXCJcXHUwMTAzXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMDNcXHUwMTA1XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMDRcIixcbiAgICBcIlxcdTAxMDJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEwNVxcdTAxMDZcXHUwMDA1IFxcdTAwMTFcXHUwMDAyXFx1MDEwNlwiLFxuICAgIFwiXFx1MDAxZlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTA3XFx1MDEwOVxcYlxcdTAwMTFcXHUwMDAxXFx1MDAwMlxcdTAxMDhcIixcbiAgICBcIlxcdTAxMGFcXHRcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTA5XFx1MDEwOFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTA5XCIsXG4gICAgXCJcXHUwMTBhXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMGFcXHUwMTBiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMGJcIixcbiAgICBcIlxcdTAxMGNcXHUwMDA3XFx1MDAwNlxcdTAwMDJcXHUwMDAyXFx1MDEwY1xcdTAxMGRcXHUwMDA1IFxcdTAwMTFcXHUwMDAyXFx1MDEwZFwiLFxuICAgIFwiXFx1MDEwZVxcdTAwMDdcXHUwMDA3XFx1MDAwMlxcdTAwMDJcXHUwMTBlXFx1MDExY1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTBmXCIsXG4gICAgXCJcXHUwMTExXFx0XFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExMFxcdTAxMGZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExMFwiLFxuICAgIFwiXFx1MDExMVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTExXFx1MDExMlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTEyXCIsXG4gICAgXCJcXHUwMTEzXFx1MDAwNSRcXHUwMDEzXFx1MDAwMlxcdTAxMTNcXHUwMTE0XFx1MDAwN1xcdTAwMDZcXHUwMDAyXFx1MDAwMlxcdTAxMTRcIixcbiAgICBcIlxcdTAxMTVcXHUwMDA1IFxcdTAwMTFcXHUwMDAyXFx1MDExNVxcdTAxMTZcXHUwMDA3XFx1MDAwN1xcdTAwMDJcXHUwMDAyXFx1MDExNlwiLFxuICAgIFwiXFx1MDExY1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTE3XFx1MDExOVxcdFxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMThcIixcbiAgICBcIlxcdTAxMTdcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExOFxcdTAxMTlcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExOVwiLFxuICAgIFwiXFx1MDExYVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTFhXFx1MDExY1xcdTAwMDVcXFwiXFx1MDAxMlxcdTAwMDJcXHUwMTFiXCIsXG4gICAgXCJcXHUwMTA3XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMWJcXHUwMTEwXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMWJcIixcbiAgICBcIlxcdTAxMThcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExY1xcdTAxMjhcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExZFwiLFxuICAgIFwiXFx1MDExZVxcZlxcYlxcdTAwMDJcXHUwMDAyXFx1MDExZVxcdTAxMWZcXHUwMDA3XFx1MDAxOVxcdTAwMDJcXHUwMDAyXFx1MDExZlxcdTAxMjdcIixcbiAgICBcIlxcdTAwMDUgXFx1MDAxMVxcdFxcdTAxMjBcXHUwMTIxXFxmXFx1MDAwN1xcdTAwMDJcXHUwMDAyXFx1MDEyMVxcdTAxMjJcXHRcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAxMjJcXHUwMTI3XFx1MDAwNSBcXHUwMDExXFxiXFx1MDEyM1xcdTAxMjRcXGZcXHUwMDA2XFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAxMjRcXHUwMTI1XFx0XFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEyNVxcdTAxMjdcXHUwMDA1IFxcdTAwMTFcXHUwMDA3XFx1MDEyNlwiLFxuICAgIFwiXFx1MDExZFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTI2XFx1MDEyMFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTI2XCIsXG4gICAgXCJcXHUwMTIzXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMjdcXHUwMTJhXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMjhcIixcbiAgICBcIlxcdTAxMjZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEyOFxcdTAxMjlcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEyOVwiLFxuICAgIFwiIVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTJhXFx1MDEyOFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTJiXCIsXG4gICAgXCJcXHUwMTJjXFx0XFx1MDAwNFxcdTAwMDJcXHUwMDAyXFx1MDEyYyNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEyZFxcdTAxMmVcIixcbiAgICBcIlxcdFxcdTAwMDVcXHUwMDAyXFx1MDAwMlxcdTAxMmUlXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMTkqVm5cXHUwMDg0XFx1MDA4YlwiLFxuICAgIFwiXFx1MDA4ZFxcdTAwOWFcXHUwMGJhXFx1MDBiZVxcdTAwYzRcXHUwMGQwXFx1MDBkYlxcdTAwZTZcXHUwMGVkXFx1MDBmNFxcdTAwZmJcXHUwMTAyXCIsXG4gICAgXCJcXHUwMTA5XFx1MDExMFxcdTAxMThcXHUwMTFiXFx1MDEyNlxcdTAxMjhcIl0uam9pbihcIlwiKTtcblxuXG52YXIgYXRuID0gbmV3IGFudGxyNC5hdG4uQVRORGVzZXJpYWxpemVyKCkuZGVzZXJpYWxpemUoc2VyaWFsaXplZEFUTik7XG5cbnZhciBkZWNpc2lvbnNUb0RGQSA9IGF0bi5kZWNpc2lvblRvU3RhdGUubWFwKCBmdW5jdGlvbihkcywgaW5kZXgpIHsgcmV0dXJuIG5ldyBhbnRscjQuZGZhLkRGQShkcywgaW5kZXgpOyB9KTtcblxudmFyIHNoYXJlZENvbnRleHRDYWNoZSA9IG5ldyBhbnRscjQuUHJlZGljdGlvbkNvbnRleHRDYWNoZSgpO1xuXG52YXIgbGl0ZXJhbE5hbWVzID0gWyBudWxsLCBcIid9J1wiLCBcIidvcGFxdWUnXCIsIFwiJzsnXCIsIFwiJygnXCIsIFwiJyknXCIsIFwiJ2lmJ1wiLCBcbiAgICAgICAgICAgICAgICAgICAgIFwiJz09J1wiLCBcIidiYXJyaWVyJ1wiLCBcIidPUEVOUUFTTSdcIiwgXCInaW5jbHVkZSdcIiwgXCIncXJlZydcIiwgXG4gICAgICAgICAgICAgICAgICAgICBcIidbJ1wiLCBcIiddJ1wiLCBcIidjcmVnJ1wiLCBcIidnYXRlJ1wiLCBcIid7J1wiLCBcIidtZWFzdXJlJ1wiLCBcbiAgICAgICAgICAgICAgICAgICAgIFwiJy0+J1wiLCBcIidyZXNldCdcIiwgXCInVSdcIiwgXCInQ1gnXCIsIFwiJywnXCIsIFwiJ14nXCIsIFwiJyonXCIsIFxuICAgICAgICAgICAgICAgICAgICAgXCInLydcIiwgXCInKydcIiwgXCInLSdcIiwgXCInc2luJ1wiLCBcIidjb3MnXCIsIFwiJ3RhbidcIiwgXCInZXhwJ1wiLCBcbiAgICAgICAgICAgICAgICAgICAgIFwiJ2xuJ1wiLCBcIidzcXJ0J1wiLCBcIidwaSdcIiBdO1xuXG52YXIgc3ltYm9saWNOYW1lcyA9IFsgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgXG4gICAgICAgICAgICAgICAgICAgICAgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgXG4gICAgICAgICAgICAgICAgICAgICAgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgXG4gICAgICAgICAgICAgICAgICAgICAgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgXCJQSVwiLCBcIlJFQUxcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgXCJTVUJSRUFMXCIsIFwiRVhQUkVBTFwiLCBcIklOVFwiLCBcIklEXCIsIFwiV1NcIiwgXCJGSUxFTkFNRVwiLCBcbiAgICAgICAgICAgICAgICAgICAgICBcIkNPTU1FTlRcIiwgXCJMSU5FX0NPTU1FTlRcIiBdO1xuXG52YXIgcnVsZU5hbWVzID0gIFsgXCJtYWlucHJvZ1wiLCBcInN0YXRlbWVudFwiLCBcInZlcnNpb25cIiwgXCJpbmNsdWRlXCIsIFwiZmlsZW5hbWVcIiwgXG4gICAgICAgICAgICAgICAgICAgXCJkZWNsXCIsIFwiZ2F0ZWRlY2xcIiwgXCJnb3BsaXN0XCIsIFwicW9wXCIsIFwidW9wXCIsIFwiYW55bGlzdFwiLCBcbiAgICAgICAgICAgICAgICAgICBcImlkbGlzdFwiLCBcIm1peGVkbGlzdFwiLCBcImFyZ3VtZW50XCIsIFwiZXhwbGlzdFwiLCBcImV4cFwiLCBcbiAgICAgICAgICAgICAgICAgICBcImF0b21cIiwgXCJ1bmFyeW9wXCIgXTtcblxuZnVuY3Rpb24gUUFTTVBhcnNlciAoaW5wdXQpIHtcblx0YW50bHI0LlBhcnNlci5jYWxsKHRoaXMsIGlucHV0KTtcbiAgICB0aGlzLl9pbnRlcnAgPSBuZXcgYW50bHI0LmF0bi5QYXJzZXJBVE5TaW11bGF0b3IodGhpcywgYXRuLCBkZWNpc2lvbnNUb0RGQSwgc2hhcmVkQ29udGV4dENhY2hlKTtcbiAgICB0aGlzLnJ1bGVOYW1lcyA9IHJ1bGVOYW1lcztcbiAgICB0aGlzLmxpdGVyYWxOYW1lcyA9IGxpdGVyYWxOYW1lcztcbiAgICB0aGlzLnN5bWJvbGljTmFtZXMgPSBzeW1ib2xpY05hbWVzO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5RQVNNUGFyc2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYW50bHI0LlBhcnNlci5wcm90b3R5cGUpO1xuUUFTTVBhcnNlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBRQVNNUGFyc2VyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUUFTTVBhcnNlci5wcm90b3R5cGUsIFwiYXRuXCIsIHtcblx0Z2V0IDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGF0bjtcblx0fVxufSk7XG5cblFBU01QYXJzZXIuRU9GID0gYW50bHI0LlRva2VuLkVPRjtcblFBU01QYXJzZXIuVF9fMCA9IDE7XG5RQVNNUGFyc2VyLlRfXzEgPSAyO1xuUUFTTVBhcnNlci5UX18yID0gMztcblFBU01QYXJzZXIuVF9fMyA9IDQ7XG5RQVNNUGFyc2VyLlRfXzQgPSA1O1xuUUFTTVBhcnNlci5UX181ID0gNjtcblFBU01QYXJzZXIuVF9fNiA9IDc7XG5RQVNNUGFyc2VyLlRfXzcgPSA4O1xuUUFTTVBhcnNlci5UX184ID0gOTtcblFBU01QYXJzZXIuVF9fOSA9IDEwO1xuUUFTTVBhcnNlci5UX18xMCA9IDExO1xuUUFTTVBhcnNlci5UX18xMSA9IDEyO1xuUUFTTVBhcnNlci5UX18xMiA9IDEzO1xuUUFTTVBhcnNlci5UX18xMyA9IDE0O1xuUUFTTVBhcnNlci5UX18xNCA9IDE1O1xuUUFTTVBhcnNlci5UX18xNSA9IDE2O1xuUUFTTVBhcnNlci5UX18xNiA9IDE3O1xuUUFTTVBhcnNlci5UX18xNyA9IDE4O1xuUUFTTVBhcnNlci5UX18xOCA9IDE5O1xuUUFTTVBhcnNlci5UX18xOSA9IDIwO1xuUUFTTVBhcnNlci5UX18yMCA9IDIxO1xuUUFTTVBhcnNlci5UX18yMSA9IDIyO1xuUUFTTVBhcnNlci5UX18yMiA9IDIzO1xuUUFTTVBhcnNlci5UX18yMyA9IDI0O1xuUUFTTVBhcnNlci5UX18yNCA9IDI1O1xuUUFTTVBhcnNlci5UX18yNSA9IDI2O1xuUUFTTVBhcnNlci5UX18yNiA9IDI3O1xuUUFTTVBhcnNlci5UX18yNyA9IDI4O1xuUUFTTVBhcnNlci5UX18yOCA9IDI5O1xuUUFTTVBhcnNlci5UX18yOSA9IDMwO1xuUUFTTVBhcnNlci5UX18zMCA9IDMxO1xuUUFTTVBhcnNlci5UX18zMSA9IDMyO1xuUUFTTVBhcnNlci5UX18zMiA9IDMzO1xuUUFTTVBhcnNlci5QSSA9IDM0O1xuUUFTTVBhcnNlci5SRUFMID0gMzU7XG5RQVNNUGFyc2VyLlNVQlJFQUwgPSAzNjtcblFBU01QYXJzZXIuRVhQUkVBTCA9IDM3O1xuUUFTTVBhcnNlci5JTlQgPSAzODtcblFBU01QYXJzZXIuSUQgPSAzOTtcblFBU01QYXJzZXIuV1MgPSA0MDtcblFBU01QYXJzZXIuRklMRU5BTUUgPSA0MTtcblFBU01QYXJzZXIuQ09NTUVOVCA9IDQyO1xuUUFTTVBhcnNlci5MSU5FX0NPTU1FTlQgPSA0MztcblxuUUFTTVBhcnNlci5SVUxFX21haW5wcm9nID0gMDtcblFBU01QYXJzZXIuUlVMRV9zdGF0ZW1lbnQgPSAxO1xuUUFTTVBhcnNlci5SVUxFX3ZlcnNpb24gPSAyO1xuUUFTTVBhcnNlci5SVUxFX2luY2x1ZGUgPSAzO1xuUUFTTVBhcnNlci5SVUxFX2ZpbGVuYW1lID0gNDtcblFBU01QYXJzZXIuUlVMRV9kZWNsID0gNTtcblFBU01QYXJzZXIuUlVMRV9nYXRlZGVjbCA9IDY7XG5RQVNNUGFyc2VyLlJVTEVfZ29wbGlzdCA9IDc7XG5RQVNNUGFyc2VyLlJVTEVfcW9wID0gODtcblFBU01QYXJzZXIuUlVMRV91b3AgPSA5O1xuUUFTTVBhcnNlci5SVUxFX2FueWxpc3QgPSAxMDtcblFBU01QYXJzZXIuUlVMRV9pZGxpc3QgPSAxMTtcblFBU01QYXJzZXIuUlVMRV9taXhlZGxpc3QgPSAxMjtcblFBU01QYXJzZXIuUlVMRV9hcmd1bWVudCA9IDEzO1xuUUFTTVBhcnNlci5SVUxFX2V4cGxpc3QgPSAxNDtcblFBU01QYXJzZXIuUlVMRV9leHAgPSAxNTtcblFBU01QYXJzZXIuUlVMRV9hdG9tID0gMTY7XG5RQVNNUGFyc2VyLlJVTEVfdW5hcnlvcCA9IDE3O1xuXG5mdW5jdGlvbiBNYWlucHJvZ0NvbnRleHQocGFyc2VyLCBwYXJlbnQsIGludm9raW5nU3RhdGUpIHtcblx0aWYocGFyZW50PT09dW5kZWZpbmVkKSB7XG5cdCAgICBwYXJlbnQgPSBudWxsO1xuXHR9XG5cdGlmKGludm9raW5nU3RhdGU9PT11bmRlZmluZWQgfHwgaW52b2tpbmdTdGF0ZT09PW51bGwpIHtcblx0XHRpbnZva2luZ1N0YXRlID0gLTE7XG5cdH1cblx0YW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LmNhbGwodGhpcywgcGFyZW50LCBpbnZva2luZ1N0YXRlKTtcbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IFFBU01QYXJzZXIuUlVMRV9tYWlucHJvZztcbiAgICByZXR1cm4gdGhpcztcbn1cblxuTWFpbnByb2dDb250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZSk7XG5NYWlucHJvZ0NvbnRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWFpbnByb2dDb250ZXh0O1xuXG5NYWlucHJvZ0NvbnRleHQucHJvdG90eXBlLnZlcnNpb24gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KFZlcnNpb25Db250ZXh0LDApO1xufTtcblxuTWFpbnByb2dDb250ZXh0LnByb3RvdHlwZS5zdGF0ZW1lbnQgPSBmdW5jdGlvbihpKSB7XG4gICAgaWYoaT09PXVuZGVmaW5lZCkge1xuICAgICAgICBpID0gbnVsbDtcbiAgICB9XG4gICAgaWYoaT09PW51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dHMoU3RhdGVtZW50Q29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChTdGF0ZW1lbnRDb250ZXh0LGkpO1xuICAgIH1cbn07XG5cbk1haW5wcm9nQ29udGV4dC5wcm90b3R5cGUuZW50ZXJSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZW50ZXJNYWlucHJvZyh0aGlzKTtcblx0fVxufTtcblxuTWFpbnByb2dDb250ZXh0LnByb3RvdHlwZS5leGl0UnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmV4aXRNYWlucHJvZyh0aGlzKTtcblx0fVxufTtcblxuXG5cblxuUUFTTVBhcnNlci5NYWlucHJvZ0NvbnRleHQgPSBNYWlucHJvZ0NvbnRleHQ7XG5cblFBU01QYXJzZXIucHJvdG90eXBlLm1haW5wcm9nID0gZnVuY3Rpb24oKSB7XG5cbiAgICB2YXIgbG9jYWxjdHggPSBuZXcgTWFpbnByb2dDb250ZXh0KHRoaXMsIHRoaXMuX2N0eCwgdGhpcy5zdGF0ZSk7XG4gICAgdGhpcy5lbnRlclJ1bGUobG9jYWxjdHgsIDAsIFFBU01QYXJzZXIuUlVMRV9tYWlucHJvZyk7XG4gICAgdmFyIF9sYSA9IDA7IC8vIFRva2VuIHR5cGVcbiAgICB0cnkge1xuICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDEpO1xuICAgICAgICB0aGlzLnN0YXRlID0gMzY7XG4gICAgICAgIHRoaXMudmVyc2lvbigpO1xuICAgICAgICB0aGlzLnN0YXRlID0gNDA7XG4gICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgX2xhID0gdGhpcy5faW5wdXQuTEEoMSk7XG4gICAgICAgIHdoaWxlKCgoKF9sYSkgJiB+MHgxZikgPT0gMCAmJiAoKDEgPDwgX2xhKSAmICgoMSA8PCBRQVNNUGFyc2VyLlRfXzEpIHwgKDEgPDwgUUFTTVBhcnNlci5UX181KSB8ICgxIDw8IFFBU01QYXJzZXIuVF9fNykgfCAoMSA8PCBRQVNNUGFyc2VyLlRfXzkpIHwgKDEgPDwgUUFTTVBhcnNlci5UX18xMCkgfCAoMSA8PCBRQVNNUGFyc2VyLlRfXzEzKSB8ICgxIDw8IFFBU01QYXJzZXIuVF9fMTQpIHwgKDEgPDwgUUFTTVBhcnNlci5UX18xNikgfCAoMSA8PCBRQVNNUGFyc2VyLlRfXzE4KSB8ICgxIDw8IFFBU01QYXJzZXIuVF9fMTkpIHwgKDEgPDwgUUFTTVBhcnNlci5UX18yMCkpKSAhPT0gMCkgfHwgX2xhPT09UUFTTVBhcnNlci5JRCkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDM3O1xuICAgICAgICAgICAgdGhpcy5zdGF0ZW1lbnQoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA0MjtcbiAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgIF9sYSA9IHRoaXMuX2lucHV0LkxBKDEpO1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAocmUpIHtcbiAgICBcdGlmKHJlIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gcmU7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IHJlO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuZXhpdFJ1bGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gU3RhdGVtZW50Q29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX3N0YXRlbWVudDtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuU3RhdGVtZW50Q29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuU3RhdGVtZW50Q29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTdGF0ZW1lbnRDb250ZXh0O1xuXG5TdGF0ZW1lbnRDb250ZXh0LnByb3RvdHlwZS5kZWNsID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChEZWNsQ29udGV4dCwwKTtcbn07XG5cblN0YXRlbWVudENvbnRleHQucHJvdG90eXBlLmdhdGVkZWNsID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChHYXRlZGVjbENvbnRleHQsMCk7XG59O1xuXG5TdGF0ZW1lbnRDb250ZXh0LnByb3RvdHlwZS5nb3BsaXN0ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChHb3BsaXN0Q29udGV4dCwwKTtcbn07XG5cblN0YXRlbWVudENvbnRleHQucHJvdG90eXBlLklEID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW4oUUFTTVBhcnNlci5JRCwgMCk7XG59O1xuXG5TdGF0ZW1lbnRDb250ZXh0LnByb3RvdHlwZS5pZGxpc3QgPSBmdW5jdGlvbihpKSB7XG4gICAgaWYoaT09PXVuZGVmaW5lZCkge1xuICAgICAgICBpID0gbnVsbDtcbiAgICB9XG4gICAgaWYoaT09PW51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dHMoSWRsaXN0Q29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChJZGxpc3RDb250ZXh0LGkpO1xuICAgIH1cbn07XG5cblN0YXRlbWVudENvbnRleHQucHJvdG90eXBlLnFvcCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFR5cGVkUnVsZUNvbnRleHQoUW9wQ29udGV4dCwwKTtcbn07XG5cblN0YXRlbWVudENvbnRleHQucHJvdG90eXBlLklOVCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuSU5ULCAwKTtcbn07XG5cblN0YXRlbWVudENvbnRleHQucHJvdG90eXBlLmFueWxpc3QgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KEFueWxpc3RDb250ZXh0LDApO1xufTtcblxuU3RhdGVtZW50Q29udGV4dC5wcm90b3R5cGUuaW5jbHVkZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFR5cGVkUnVsZUNvbnRleHQoSW5jbHVkZUNvbnRleHQsMCk7XG59O1xuXG5TdGF0ZW1lbnRDb250ZXh0LnByb3RvdHlwZS5lbnRlclJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5lbnRlclN0YXRlbWVudCh0aGlzKTtcblx0fVxufTtcblxuU3RhdGVtZW50Q29udGV4dC5wcm90b3R5cGUuZXhpdFJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5leGl0U3RhdGVtZW50KHRoaXMpO1xuXHR9XG59O1xuXG5cblxuXG5RQVNNUGFyc2VyLlN0YXRlbWVudENvbnRleHQgPSBTdGF0ZW1lbnRDb250ZXh0O1xuXG5RQVNNUGFyc2VyLnByb3RvdHlwZS5zdGF0ZW1lbnQgPSBmdW5jdGlvbigpIHtcblxuICAgIHZhciBsb2NhbGN0eCA9IG5ldyBTdGF0ZW1lbnRDb250ZXh0KHRoaXMsIHRoaXMuX2N0eCwgdGhpcy5zdGF0ZSk7XG4gICAgdGhpcy5lbnRlclJ1bGUobG9jYWxjdHgsIDIsIFFBU01QYXJzZXIuUlVMRV9zdGF0ZW1lbnQpO1xuICAgIHRyeSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSA4NDtcbiAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICB2YXIgbGFfID0gdGhpcy5faW50ZXJwLmFkYXB0aXZlUHJlZGljdCh0aGlzLl9pbnB1dCwxLHRoaXMuX2N0eCk7XG4gICAgICAgIHN3aXRjaChsYV8pIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAxKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA0MztcbiAgICAgICAgICAgIHRoaXMuZGVjbCgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAyKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA0NDtcbiAgICAgICAgICAgIHRoaXMuZ2F0ZWRlY2woKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA0NTtcbiAgICAgICAgICAgIHRoaXMuZ29wbGlzdCgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDQ2O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzApO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAzKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA0ODtcbiAgICAgICAgICAgIHRoaXMuZ2F0ZWRlY2woKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA0OTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18wKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgNCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNTE7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNTI7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSUQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDUzO1xuICAgICAgICAgICAgdGhpcy5pZGxpc3QoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA1NDtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgNSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNTY7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNTc7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSUQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDU4O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzMpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDU5O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDYwO1xuICAgICAgICAgICAgdGhpcy5pZGxpc3QoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA2MTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgNik7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNjM7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNjQ7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSUQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDY1O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzMpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDY2O1xuICAgICAgICAgICAgdGhpcy5pZGxpc3QoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA2NztcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX180KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA2ODtcbiAgICAgICAgICAgIHRoaXMuaWRsaXN0KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNjk7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDcpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDcxO1xuICAgICAgICAgICAgdGhpcy5xb3AoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgOCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNzI7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fNSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNzM7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNzQ7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSUQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDc1O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzYpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDc2O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklOVCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNzc7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fNCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNzg7XG4gICAgICAgICAgICB0aGlzLnFvcCgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCA5KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA3OTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX183KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA4MDtcbiAgICAgICAgICAgIHRoaXMuYW55bGlzdCgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDgxO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzIpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMTApO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDgzO1xuICAgICAgICAgICAgdGhpcy5pbmNsdWRlKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICB9XG4gICAgfSBjYXRjaCAocmUpIHtcbiAgICBcdGlmKHJlIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gcmU7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IHJlO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuZXhpdFJ1bGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gVmVyc2lvbkNvbnRleHQocGFyc2VyLCBwYXJlbnQsIGludm9raW5nU3RhdGUpIHtcblx0aWYocGFyZW50PT09dW5kZWZpbmVkKSB7XG5cdCAgICBwYXJlbnQgPSBudWxsO1xuXHR9XG5cdGlmKGludm9raW5nU3RhdGU9PT11bmRlZmluZWQgfHwgaW52b2tpbmdTdGF0ZT09PW51bGwpIHtcblx0XHRpbnZva2luZ1N0YXRlID0gLTE7XG5cdH1cblx0YW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LmNhbGwodGhpcywgcGFyZW50LCBpbnZva2luZ1N0YXRlKTtcbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IFFBU01QYXJzZXIuUlVMRV92ZXJzaW9uO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5WZXJzaW9uQ29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuVmVyc2lvbkNvbnRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmVyc2lvbkNvbnRleHQ7XG5cblZlcnNpb25Db250ZXh0LnByb3RvdHlwZS5SRUFMID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW4oUUFTTVBhcnNlci5SRUFMLCAwKTtcbn07XG5cblZlcnNpb25Db250ZXh0LnByb3RvdHlwZS5lbnRlclJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5lbnRlclZlcnNpb24odGhpcyk7XG5cdH1cbn07XG5cblZlcnNpb25Db250ZXh0LnByb3RvdHlwZS5leGl0UnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmV4aXRWZXJzaW9uKHRoaXMpO1xuXHR9XG59O1xuXG5cblxuXG5RQVNNUGFyc2VyLlZlcnNpb25Db250ZXh0ID0gVmVyc2lvbkNvbnRleHQ7XG5cblFBU01QYXJzZXIucHJvdG90eXBlLnZlcnNpb24gPSBmdW5jdGlvbigpIHtcblxuICAgIHZhciBsb2NhbGN0eCA9IG5ldyBWZXJzaW9uQ29udGV4dCh0aGlzLCB0aGlzLl9jdHgsIHRoaXMuc3RhdGUpO1xuICAgIHRoaXMuZW50ZXJSdWxlKGxvY2FsY3R4LCA0LCBRQVNNUGFyc2VyLlJVTEVfdmVyc2lvbik7XG4gICAgdHJ5IHtcbiAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAxKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IDg2O1xuICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fOCk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSA4NztcbiAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlJFQUwpO1xuICAgICAgICB0aGlzLnN0YXRlID0gODg7XG4gICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yKTtcbiAgICB9IGNhdGNoIChyZSkge1xuICAgIFx0aWYocmUgaW5zdGFuY2VvZiBhbnRscjQuZXJyb3IuUmVjb2duaXRpb25FeGNlcHRpb24pIHtcblx0ICAgICAgICBsb2NhbGN0eC5leGNlcHRpb24gPSByZTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgIFx0dGhyb3cgcmU7XG5cdCAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5leGl0UnVsZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbG9jYWxjdHg7XG59O1xuXG5mdW5jdGlvbiBJbmNsdWRlQ29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX2luY2x1ZGU7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkluY2x1ZGVDb250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZSk7XG5JbmNsdWRlQ29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbmNsdWRlQ29udGV4dDtcblxuSW5jbHVkZUNvbnRleHQucHJvdG90eXBlLmZpbGVuYW1lID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChGaWxlbmFtZUNvbnRleHQsMCk7XG59O1xuXG5JbmNsdWRlQ29udGV4dC5wcm90b3R5cGUuZW50ZXJSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZW50ZXJJbmNsdWRlKHRoaXMpO1xuXHR9XG59O1xuXG5JbmNsdWRlQ29udGV4dC5wcm90b3R5cGUuZXhpdFJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5leGl0SW5jbHVkZSh0aGlzKTtcblx0fVxufTtcblxuXG5cblxuUUFTTVBhcnNlci5JbmNsdWRlQ29udGV4dCA9IEluY2x1ZGVDb250ZXh0O1xuXG5RQVNNUGFyc2VyLnByb3RvdHlwZS5pbmNsdWRlID0gZnVuY3Rpb24oKSB7XG5cbiAgICB2YXIgbG9jYWxjdHggPSBuZXcgSW5jbHVkZUNvbnRleHQodGhpcywgdGhpcy5fY3R4LCB0aGlzLnN0YXRlKTtcbiAgICB0aGlzLmVudGVyUnVsZShsb2NhbGN0eCwgNiwgUUFTTVBhcnNlci5SVUxFX2luY2x1ZGUpO1xuICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMSk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSA5MDtcbiAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzkpO1xuICAgICAgICB0aGlzLnN0YXRlID0gOTE7XG4gICAgICAgIHRoaXMuZmlsZW5hbWUoKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IDkyO1xuICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMik7XG4gICAgfSBjYXRjaCAocmUpIHtcbiAgICBcdGlmKHJlIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gcmU7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IHJlO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuZXhpdFJ1bGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gRmlsZW5hbWVDb250ZXh0KHBhcnNlciwgcGFyZW50LCBpbnZva2luZ1N0YXRlKSB7XG5cdGlmKHBhcmVudD09PXVuZGVmaW5lZCkge1xuXHQgICAgcGFyZW50ID0gbnVsbDtcblx0fVxuXHRpZihpbnZva2luZ1N0YXRlPT09dW5kZWZpbmVkIHx8IGludm9raW5nU3RhdGU9PT1udWxsKSB7XG5cdFx0aW52b2tpbmdTdGF0ZSA9IC0xO1xuXHR9XG5cdGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5jYWxsKHRoaXMsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSk7XG4gICAgdGhpcy5wYXJzZXIgPSBwYXJzZXI7XG4gICAgdGhpcy5ydWxlSW5kZXggPSBRQVNNUGFyc2VyLlJVTEVfZmlsZW5hbWU7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkZpbGVuYW1lQ29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuRmlsZW5hbWVDb250ZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEZpbGVuYW1lQ29udGV4dDtcblxuRmlsZW5hbWVDb250ZXh0LnByb3RvdHlwZS5GSUxFTkFNRSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuRklMRU5BTUUsIDApO1xufTtcblxuRmlsZW5hbWVDb250ZXh0LnByb3RvdHlwZS5lbnRlclJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5lbnRlckZpbGVuYW1lKHRoaXMpO1xuXHR9XG59O1xuXG5GaWxlbmFtZUNvbnRleHQucHJvdG90eXBlLmV4aXRSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZXhpdEZpbGVuYW1lKHRoaXMpO1xuXHR9XG59O1xuXG5cblxuXG5RQVNNUGFyc2VyLkZpbGVuYW1lQ29udGV4dCA9IEZpbGVuYW1lQ29udGV4dDtcblxuUUFTTVBhcnNlci5wcm90b3R5cGUuZmlsZW5hbWUgPSBmdW5jdGlvbigpIHtcblxuICAgIHZhciBsb2NhbGN0eCA9IG5ldyBGaWxlbmFtZUNvbnRleHQodGhpcywgdGhpcy5fY3R4LCB0aGlzLnN0YXRlKTtcbiAgICB0aGlzLmVudGVyUnVsZShsb2NhbGN0eCwgOCwgUUFTTVBhcnNlci5SVUxFX2ZpbGVuYW1lKTtcbiAgICB0cnkge1xuICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDEpO1xuICAgICAgICB0aGlzLnN0YXRlID0gOTQ7XG4gICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5GSUxFTkFNRSk7XG4gICAgfSBjYXRjaCAocmUpIHtcbiAgICBcdGlmKHJlIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gcmU7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IHJlO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuZXhpdFJ1bGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gRGVjbENvbnRleHQocGFyc2VyLCBwYXJlbnQsIGludm9raW5nU3RhdGUpIHtcblx0aWYocGFyZW50PT09dW5kZWZpbmVkKSB7XG5cdCAgICBwYXJlbnQgPSBudWxsO1xuXHR9XG5cdGlmKGludm9raW5nU3RhdGU9PT11bmRlZmluZWQgfHwgaW52b2tpbmdTdGF0ZT09PW51bGwpIHtcblx0XHRpbnZva2luZ1N0YXRlID0gLTE7XG5cdH1cblx0YW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LmNhbGwodGhpcywgcGFyZW50LCBpbnZva2luZ1N0YXRlKTtcbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IFFBU01QYXJzZXIuUlVMRV9kZWNsO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5EZWNsQ29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuRGVjbENvbnRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRGVjbENvbnRleHQ7XG5cbkRlY2xDb250ZXh0LnByb3RvdHlwZS5JRCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuSUQsIDApO1xufTtcblxuRGVjbENvbnRleHQucHJvdG90eXBlLklOVCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuSU5ULCAwKTtcbn07XG5cbkRlY2xDb250ZXh0LnByb3RvdHlwZS5lbnRlclJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5lbnRlckRlY2wodGhpcyk7XG5cdH1cbn07XG5cbkRlY2xDb250ZXh0LnByb3RvdHlwZS5leGl0UnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmV4aXREZWNsKHRoaXMpO1xuXHR9XG59O1xuXG5cblxuXG5RQVNNUGFyc2VyLkRlY2xDb250ZXh0ID0gRGVjbENvbnRleHQ7XG5cblFBU01QYXJzZXIucHJvdG90eXBlLmRlY2wgPSBmdW5jdGlvbigpIHtcblxuICAgIHZhciBsb2NhbGN0eCA9IG5ldyBEZWNsQ29udGV4dCh0aGlzLCB0aGlzLl9jdHgsIHRoaXMuc3RhdGUpO1xuICAgIHRoaXMuZW50ZXJSdWxlKGxvY2FsY3R4LCAxMCwgUUFTTVBhcnNlci5SVUxFX2RlY2wpO1xuICAgIHRyeSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAxMDg7XG4gICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgc3dpdGNoKHRoaXMuX2lucHV0LkxBKDEpKSB7XG4gICAgICAgIGNhc2UgUUFTTVBhcnNlci5UX18xMDpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gOTY7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTApO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDk3O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklEKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA5ODtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18xMSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gOTk7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSU5UKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMDA7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTIpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEwMTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFFBU01QYXJzZXIuVF9fMTM6XG4gICAgICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDIpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEwMjtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18xMyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTAzO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklEKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMDQ7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTEpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEwNTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JTlQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEwNjtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18xMik7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTA3O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgYW50bHI0LmVycm9yLk5vVmlhYmxlQWx0RXhjZXB0aW9uKHRoaXMpO1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAocmUpIHtcbiAgICBcdGlmKHJlIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gcmU7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IHJlO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuZXhpdFJ1bGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gR2F0ZWRlY2xDb250ZXh0KHBhcnNlciwgcGFyZW50LCBpbnZva2luZ1N0YXRlKSB7XG5cdGlmKHBhcmVudD09PXVuZGVmaW5lZCkge1xuXHQgICAgcGFyZW50ID0gbnVsbDtcblx0fVxuXHRpZihpbnZva2luZ1N0YXRlPT09dW5kZWZpbmVkIHx8IGludm9raW5nU3RhdGU9PT1udWxsKSB7XG5cdFx0aW52b2tpbmdTdGF0ZSA9IC0xO1xuXHR9XG5cdGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5jYWxsKHRoaXMsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSk7XG4gICAgdGhpcy5wYXJzZXIgPSBwYXJzZXI7XG4gICAgdGhpcy5ydWxlSW5kZXggPSBRQVNNUGFyc2VyLlJVTEVfZ2F0ZWRlY2w7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkdhdGVkZWNsQ29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuR2F0ZWRlY2xDb250ZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdhdGVkZWNsQ29udGV4dDtcblxuR2F0ZWRlY2xDb250ZXh0LnByb3RvdHlwZS5JRCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuSUQsIDApO1xufTtcblxuR2F0ZWRlY2xDb250ZXh0LnByb3RvdHlwZS5pZGxpc3QgPSBmdW5jdGlvbihpKSB7XG4gICAgaWYoaT09PXVuZGVmaW5lZCkge1xuICAgICAgICBpID0gbnVsbDtcbiAgICB9XG4gICAgaWYoaT09PW51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dHMoSWRsaXN0Q29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChJZGxpc3RDb250ZXh0LGkpO1xuICAgIH1cbn07XG5cbkdhdGVkZWNsQ29udGV4dC5wcm90b3R5cGUuZW50ZXJSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZW50ZXJHYXRlZGVjbCh0aGlzKTtcblx0fVxufTtcblxuR2F0ZWRlY2xDb250ZXh0LnByb3RvdHlwZS5leGl0UnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmV4aXRHYXRlZGVjbCh0aGlzKTtcblx0fVxufTtcblxuXG5cblxuUUFTTVBhcnNlci5HYXRlZGVjbENvbnRleHQgPSBHYXRlZGVjbENvbnRleHQ7XG5cblFBU01QYXJzZXIucHJvdG90eXBlLmdhdGVkZWNsID0gZnVuY3Rpb24oKSB7XG5cbiAgICB2YXIgbG9jYWxjdHggPSBuZXcgR2F0ZWRlY2xDb250ZXh0KHRoaXMsIHRoaXMuX2N0eCwgdGhpcy5zdGF0ZSk7XG4gICAgdGhpcy5lbnRlclJ1bGUobG9jYWxjdHgsIDEyLCBRQVNNUGFyc2VyLlJVTEVfZ2F0ZWRlY2wpO1xuICAgIHRyeSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAxMzA7XG4gICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgdmFyIGxhXyA9IHRoaXMuX2ludGVycC5hZGFwdGl2ZVByZWRpY3QodGhpcy5faW5wdXQsMyx0aGlzLl9jdHgpO1xuICAgICAgICBzd2l0Y2gobGFfKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTEwO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzE0KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMTE7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSUQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDExMjtcbiAgICAgICAgICAgIHRoaXMuaWRsaXN0KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTEzO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzE1KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMik7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTE1O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzE0KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMTY7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSUQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDExNztcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18zKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMTg7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fNCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTE5O1xuICAgICAgICAgICAgdGhpcy5pZGxpc3QoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMjA7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAzKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMjI7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEyMztcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JRCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTI0O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzMpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEyNTtcbiAgICAgICAgICAgIHRoaXMuaWRsaXN0KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTI2O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEyNztcbiAgICAgICAgICAgIHRoaXMuaWRsaXN0KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTI4O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzE1KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChyZSkge1xuICAgIFx0aWYocmUgaW5zdGFuY2VvZiBhbnRscjQuZXJyb3IuUmVjb2duaXRpb25FeGNlcHRpb24pIHtcblx0ICAgICAgICBsb2NhbGN0eC5leGNlcHRpb24gPSByZTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgIFx0dGhyb3cgcmU7XG5cdCAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5leGl0UnVsZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbG9jYWxjdHg7XG59O1xuXG5mdW5jdGlvbiBHb3BsaXN0Q29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX2dvcGxpc3Q7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkdvcGxpc3RDb250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZSk7XG5Hb3BsaXN0Q29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHb3BsaXN0Q29udGV4dDtcblxuR29wbGlzdENvbnRleHQucHJvdG90eXBlLnVvcCA9IGZ1bmN0aW9uKGkpIHtcbiAgICBpZihpPT09dW5kZWZpbmVkKSB7XG4gICAgICAgIGkgPSBudWxsO1xuICAgIH1cbiAgICBpZihpPT09bnVsbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0cyhVb3BDb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KFVvcENvbnRleHQsaSk7XG4gICAgfVxufTtcblxuR29wbGlzdENvbnRleHQucHJvdG90eXBlLmlkbGlzdCA9IGZ1bmN0aW9uKGkpIHtcbiAgICBpZihpPT09dW5kZWZpbmVkKSB7XG4gICAgICAgIGkgPSBudWxsO1xuICAgIH1cbiAgICBpZihpPT09bnVsbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0cyhJZGxpc3RDb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KElkbGlzdENvbnRleHQsaSk7XG4gICAgfVxufTtcblxuR29wbGlzdENvbnRleHQucHJvdG90eXBlLmVudGVyUnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmVudGVyR29wbGlzdCh0aGlzKTtcblx0fVxufTtcblxuR29wbGlzdENvbnRleHQucHJvdG90eXBlLmV4aXRSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZXhpdEdvcGxpc3QodGhpcyk7XG5cdH1cbn07XG5cblxuXG5cblFBU01QYXJzZXIuR29wbGlzdENvbnRleHQgPSBHb3BsaXN0Q29udGV4dDtcblxuUUFTTVBhcnNlci5wcm90b3R5cGUuZ29wbGlzdCA9IGZ1bmN0aW9uKCkge1xuXG4gICAgdmFyIGxvY2FsY3R4ID0gbmV3IEdvcGxpc3RDb250ZXh0KHRoaXMsIHRoaXMuX2N0eCwgdGhpcy5zdGF0ZSk7XG4gICAgdGhpcy5lbnRlclJ1bGUobG9jYWxjdHgsIDE0LCBRQVNNUGFyc2VyLlJVTEVfZ29wbGlzdCk7XG4gICAgdmFyIF9sYSA9IDA7IC8vIFRva2VuIHR5cGVcbiAgICB0cnkge1xuICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDEpO1xuICAgICAgICB0aGlzLnN0YXRlID0gMTM3OyBcbiAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICBfbGEgPSB0aGlzLl9pbnB1dC5MQSgxKTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEzNztcbiAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgIHN3aXRjaCh0aGlzLl9pbnB1dC5MQSgxKSkge1xuICAgICAgICAgICAgY2FzZSBRQVNNUGFyc2VyLlRfXzE5OlxuICAgICAgICAgICAgY2FzZSBRQVNNUGFyc2VyLlRfXzIwOlxuICAgICAgICAgICAgY2FzZSBRQVNNUGFyc2VyLklEOlxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMzI7XG4gICAgICAgICAgICAgICAgdGhpcy51b3AoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUUFTTVBhcnNlci5UX183OlxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMzM7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzcpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMzQ7XG4gICAgICAgICAgICAgICAgdGhpcy5pZGxpc3QoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMTM1O1xuICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGFudGxyNC5lcnJvci5Ob1ZpYWJsZUFsdEV4Y2VwdGlvbih0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMzk7IFxuICAgICAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICAgICAgX2xhID0gdGhpcy5faW5wdXQuTEEoMSk7XG4gICAgICAgIH0gd2hpbGUoKCgoKF9sYSAtIDgpKSAmIH4weDFmKSA9PSAwICYmICgoMSA8PCAoX2xhIC0gOCkpICYgKCgxIDw8IChRQVNNUGFyc2VyLlRfXzcgLSA4KSkgfCAoMSA8PCAoUUFTTVBhcnNlci5UX18xOSAtIDgpKSB8ICgxIDw8IChRQVNNUGFyc2VyLlRfXzIwIC0gOCkpIHwgKDEgPDwgKFFBU01QYXJzZXIuSUQgLSA4KSkpKSAhPT0gMCkpO1xuICAgIH0gY2F0Y2ggKHJlKSB7XG4gICAgXHRpZihyZSBpbnN0YW5jZW9mIGFudGxyNC5lcnJvci5SZWNvZ25pdGlvbkV4Y2VwdGlvbikge1xuXHQgICAgICAgIGxvY2FsY3R4LmV4Y2VwdGlvbiA9IHJlO1xuXHQgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVwb3J0RXJyb3IodGhpcywgcmUpO1xuXHQgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVjb3Zlcih0aGlzLCByZSk7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgXHR0aHJvdyByZTtcblx0ICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLmV4aXRSdWxlKCk7XG4gICAgfVxuICAgIHJldHVybiBsb2NhbGN0eDtcbn07XG5cbmZ1bmN0aW9uIFFvcENvbnRleHQocGFyc2VyLCBwYXJlbnQsIGludm9raW5nU3RhdGUpIHtcblx0aWYocGFyZW50PT09dW5kZWZpbmVkKSB7XG5cdCAgICBwYXJlbnQgPSBudWxsO1xuXHR9XG5cdGlmKGludm9raW5nU3RhdGU9PT11bmRlZmluZWQgfHwgaW52b2tpbmdTdGF0ZT09PW51bGwpIHtcblx0XHRpbnZva2luZ1N0YXRlID0gLTE7XG5cdH1cblx0YW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LmNhbGwodGhpcywgcGFyZW50LCBpbnZva2luZ1N0YXRlKTtcbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IFFBU01QYXJzZXIuUlVMRV9xb3A7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cblFvcENvbnRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQucHJvdG90eXBlKTtcblFvcENvbnRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUW9wQ29udGV4dDtcblxuUW9wQ29udGV4dC5wcm90b3R5cGUudW9wID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChVb3BDb250ZXh0LDApO1xufTtcblxuUW9wQ29udGV4dC5wcm90b3R5cGUuYXJndW1lbnQgPSBmdW5jdGlvbihpKSB7XG4gICAgaWYoaT09PXVuZGVmaW5lZCkge1xuICAgICAgICBpID0gbnVsbDtcbiAgICB9XG4gICAgaWYoaT09PW51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dHMoQXJndW1lbnRDb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KEFyZ3VtZW50Q29udGV4dCxpKTtcbiAgICB9XG59O1xuXG5Rb3BDb250ZXh0LnByb3RvdHlwZS5lbnRlclJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5lbnRlclFvcCh0aGlzKTtcblx0fVxufTtcblxuUW9wQ29udGV4dC5wcm90b3R5cGUuZXhpdFJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5leGl0UW9wKHRoaXMpO1xuXHR9XG59O1xuXG5cblxuXG5RQVNNUGFyc2VyLlFvcENvbnRleHQgPSBRb3BDb250ZXh0O1xuXG5RQVNNUGFyc2VyLnByb3RvdHlwZS5xb3AgPSBmdW5jdGlvbigpIHtcblxuICAgIHZhciBsb2NhbGN0eCA9IG5ldyBRb3BDb250ZXh0KHRoaXMsIHRoaXMuX2N0eCwgdGhpcy5zdGF0ZSk7XG4gICAgdGhpcy5lbnRlclJ1bGUobG9jYWxjdHgsIDE2LCBRQVNNUGFyc2VyLlJVTEVfcW9wKTtcbiAgICB0cnkge1xuICAgICAgICB0aGlzLnN0YXRlID0gMTUyO1xuICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgIHN3aXRjaCh0aGlzLl9pbnB1dC5MQSgxKSkge1xuICAgICAgICBjYXNlIFFBU01QYXJzZXIuVF9fMTk6XG4gICAgICAgIGNhc2UgUUFTTVBhcnNlci5UX18yMDpcbiAgICAgICAgY2FzZSBRQVNNUGFyc2VyLklEOlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAxKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNDE7XG4gICAgICAgICAgICB0aGlzLnVvcCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgUUFTTVBhcnNlci5UX18xNjpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMik7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTQyO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzE2KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNDM7XG4gICAgICAgICAgICB0aGlzLmFyZ3VtZW50KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTQ0O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzE3KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNDU7XG4gICAgICAgICAgICB0aGlzLmFyZ3VtZW50KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTQ2O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgUUFTTVBhcnNlci5UX18xODpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTQ4O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzE4KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNDk7XG4gICAgICAgICAgICB0aGlzLmFyZ3VtZW50KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTUwO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgYW50bHI0LmVycm9yLk5vVmlhYmxlQWx0RXhjZXB0aW9uKHRoaXMpO1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAocmUpIHtcbiAgICBcdGlmKHJlIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gcmU7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IHJlO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuZXhpdFJ1bGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gVW9wQ29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX3VvcDtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuVW9wQ29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuVW9wQ29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBVb3BDb250ZXh0O1xuXG5Vb3BDb250ZXh0LnByb3RvdHlwZS5leHBsaXN0ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChFeHBsaXN0Q29udGV4dCwwKTtcbn07XG5cblVvcENvbnRleHQucHJvdG90eXBlLmFyZ3VtZW50ID0gZnVuY3Rpb24oaSkge1xuICAgIGlmKGk9PT11bmRlZmluZWQpIHtcbiAgICAgICAgaSA9IG51bGw7XG4gICAgfVxuICAgIGlmKGk9PT1udWxsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFR5cGVkUnVsZUNvbnRleHRzKEFyZ3VtZW50Q29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChBcmd1bWVudENvbnRleHQsaSk7XG4gICAgfVxufTtcblxuVW9wQ29udGV4dC5wcm90b3R5cGUuSUQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUb2tlbihRQVNNUGFyc2VyLklELCAwKTtcbn07XG5cblVvcENvbnRleHQucHJvdG90eXBlLmFueWxpc3QgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KEFueWxpc3RDb250ZXh0LDApO1xufTtcblxuVW9wQ29udGV4dC5wcm90b3R5cGUuZW50ZXJSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZW50ZXJVb3AodGhpcyk7XG5cdH1cbn07XG5cblVvcENvbnRleHQucHJvdG90eXBlLmV4aXRSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZXhpdFVvcCh0aGlzKTtcblx0fVxufTtcblxuXG5cblxuUUFTTVBhcnNlci5Vb3BDb250ZXh0ID0gVW9wQ29udGV4dDtcblxuUUFTTVBhcnNlci5wcm90b3R5cGUudW9wID0gZnVuY3Rpb24oKSB7XG5cbiAgICB2YXIgbG9jYWxjdHggPSBuZXcgVW9wQ29udGV4dCh0aGlzLCB0aGlzLl9jdHgsIHRoaXMuc3RhdGUpO1xuICAgIHRoaXMuZW50ZXJSdWxlKGxvY2FsY3R4LCAxOCwgUUFTTVBhcnNlci5SVUxFX3VvcCk7XG4gICAgdHJ5IHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IDE4NDtcbiAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICB2YXIgbGFfID0gdGhpcy5faW50ZXJwLmFkYXB0aXZlUHJlZGljdCh0aGlzLl9pbnB1dCw3LHRoaXMuX2N0eCk7XG4gICAgICAgIHN3aXRjaChsYV8pIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAxKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNTQ7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTkpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE1NTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18zKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNTY7XG4gICAgICAgICAgICB0aGlzLmV4cGxpc3QoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNTc7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fNCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTU4O1xuICAgICAgICAgICAgdGhpcy5hcmd1bWVudCgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE1OTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMik7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTYxO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzIwKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNjI7XG4gICAgICAgICAgICB0aGlzLmFyZ3VtZW50KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTYzO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzIxKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNjQ7XG4gICAgICAgICAgICB0aGlzLmFyZ3VtZW50KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTY1O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzIpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAzKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNjc7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSUQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE2ODtcbiAgICAgICAgICAgIHRoaXMuYW55bGlzdCgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE2OTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgNCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTcxO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklEKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNzI7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTczO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE3NDtcbiAgICAgICAgICAgIHRoaXMuYW55bGlzdCgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE3NTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgNSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTc3O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklEKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNzg7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTc5O1xuICAgICAgICAgICAgdGhpcy5leHBsaXN0KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTgwO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE4MTtcbiAgICAgICAgICAgIHRoaXMuYW55bGlzdCgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE4MjtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChyZSkge1xuICAgIFx0aWYocmUgaW5zdGFuY2VvZiBhbnRscjQuZXJyb3IuUmVjb2duaXRpb25FeGNlcHRpb24pIHtcblx0ICAgICAgICBsb2NhbGN0eC5leGNlcHRpb24gPSByZTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgIFx0dGhyb3cgcmU7XG5cdCAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5leGl0UnVsZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbG9jYWxjdHg7XG59O1xuXG5mdW5jdGlvbiBBbnlsaXN0Q29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX2FueWxpc3Q7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkFueWxpc3RDb250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZSk7XG5BbnlsaXN0Q29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBbnlsaXN0Q29udGV4dDtcblxuQW55bGlzdENvbnRleHQucHJvdG90eXBlLmlkbGlzdCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFR5cGVkUnVsZUNvbnRleHQoSWRsaXN0Q29udGV4dCwwKTtcbn07XG5cbkFueWxpc3RDb250ZXh0LnByb3RvdHlwZS5taXhlZGxpc3QgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KE1peGVkbGlzdENvbnRleHQsMCk7XG59O1xuXG5BbnlsaXN0Q29udGV4dC5wcm90b3R5cGUuZW50ZXJSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZW50ZXJBbnlsaXN0KHRoaXMpO1xuXHR9XG59O1xuXG5BbnlsaXN0Q29udGV4dC5wcm90b3R5cGUuZXhpdFJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5leGl0QW55bGlzdCh0aGlzKTtcblx0fVxufTtcblxuXG5cblxuUUFTTVBhcnNlci5BbnlsaXN0Q29udGV4dCA9IEFueWxpc3RDb250ZXh0O1xuXG5RQVNNUGFyc2VyLnByb3RvdHlwZS5hbnlsaXN0ID0gZnVuY3Rpb24oKSB7XG5cbiAgICB2YXIgbG9jYWxjdHggPSBuZXcgQW55bGlzdENvbnRleHQodGhpcywgdGhpcy5fY3R4LCB0aGlzLnN0YXRlKTtcbiAgICB0aGlzLmVudGVyUnVsZShsb2NhbGN0eCwgMjAsIFFBU01QYXJzZXIuUlVMRV9hbnlsaXN0KTtcbiAgICB0cnkge1xuICAgICAgICB0aGlzLnN0YXRlID0gMTg4O1xuICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgIHZhciBsYV8gPSB0aGlzLl9pbnRlcnAuYWRhcHRpdmVQcmVkaWN0KHRoaXMuX2lucHV0LDgsdGhpcy5fY3R4KTtcbiAgICAgICAgc3dpdGNoKGxhXykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDEpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE4NjtcbiAgICAgICAgICAgIHRoaXMuaWRsaXN0KCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDIpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE4NztcbiAgICAgICAgICAgIHRoaXMubWl4ZWRsaXN0KCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICB9XG4gICAgfSBjYXRjaCAocmUpIHtcbiAgICBcdGlmKHJlIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gcmU7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IHJlO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuZXhpdFJ1bGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gSWRsaXN0Q29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX2lkbGlzdDtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuSWRsaXN0Q29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuSWRsaXN0Q29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJZGxpc3RDb250ZXh0O1xuXG5JZGxpc3RDb250ZXh0LnByb3RvdHlwZS5JRCA9IGZ1bmN0aW9uKGkpIHtcblx0aWYoaT09PXVuZGVmaW5lZCkge1xuXHRcdGkgPSBudWxsO1xuXHR9XG4gICAgaWYoaT09PW51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW5zKFFBU01QYXJzZXIuSUQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuSUQsIGkpO1xuICAgIH1cbn07XG5cblxuSWRsaXN0Q29udGV4dC5wcm90b3R5cGUuZW50ZXJSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZW50ZXJJZGxpc3QodGhpcyk7XG5cdH1cbn07XG5cbklkbGlzdENvbnRleHQucHJvdG90eXBlLmV4aXRSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZXhpdElkbGlzdCh0aGlzKTtcblx0fVxufTtcblxuXG5cblxuUUFTTVBhcnNlci5JZGxpc3RDb250ZXh0ID0gSWRsaXN0Q29udGV4dDtcblxuUUFTTVBhcnNlci5wcm90b3R5cGUuaWRsaXN0ID0gZnVuY3Rpb24oKSB7XG5cbiAgICB2YXIgbG9jYWxjdHggPSBuZXcgSWRsaXN0Q29udGV4dCh0aGlzLCB0aGlzLl9jdHgsIHRoaXMuc3RhdGUpO1xuICAgIHRoaXMuZW50ZXJSdWxlKGxvY2FsY3R4LCAyMiwgUUFTTVBhcnNlci5SVUxFX2lkbGlzdCk7XG4gICAgdHJ5IHtcbiAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAxKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IDE5NDtcbiAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICB2YXIgX2FsdCA9IHRoaXMuX2ludGVycC5hZGFwdGl2ZVByZWRpY3QodGhpcy5faW5wdXQsOSx0aGlzLl9jdHgpXG4gICAgICAgIHdoaWxlKF9hbHQhPTIgJiYgX2FsdCE9YW50bHI0LmF0bi5BVE4uSU5WQUxJRF9BTFRfTlVNQkVSKSB7XG4gICAgICAgICAgICBpZihfYWx0PT09MSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxOTA7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklEKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMTkxO1xuICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yMSk7IFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE5NjtcbiAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgIF9hbHQgPSB0aGlzLl9pbnRlcnAuYWRhcHRpdmVQcmVkaWN0KHRoaXMuX2lucHV0LDksdGhpcy5fY3R4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RhdGUgPSAxOTc7XG4gICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JRCk7XG4gICAgfSBjYXRjaCAocmUpIHtcbiAgICBcdGlmKHJlIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gcmU7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IHJlO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuZXhpdFJ1bGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gTWl4ZWRsaXN0Q29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX21peGVkbGlzdDtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuTWl4ZWRsaXN0Q29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuTWl4ZWRsaXN0Q29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNaXhlZGxpc3RDb250ZXh0O1xuXG5NaXhlZGxpc3RDb250ZXh0LnByb3RvdHlwZS5JRCA9IGZ1bmN0aW9uKGkpIHtcblx0aWYoaT09PXVuZGVmaW5lZCkge1xuXHRcdGkgPSBudWxsO1xuXHR9XG4gICAgaWYoaT09PW51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW5zKFFBU01QYXJzZXIuSUQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuSUQsIGkpO1xuICAgIH1cbn07XG5cblxuTWl4ZWRsaXN0Q29udGV4dC5wcm90b3R5cGUuSU5UID0gZnVuY3Rpb24oaSkge1xuXHRpZihpPT09dW5kZWZpbmVkKSB7XG5cdFx0aSA9IG51bGw7XG5cdH1cbiAgICBpZihpPT09bnVsbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUb2tlbnMoUUFTTVBhcnNlci5JTlQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuSU5ULCBpKTtcbiAgICB9XG59O1xuXG5cbk1peGVkbGlzdENvbnRleHQucHJvdG90eXBlLmVudGVyUnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmVudGVyTWl4ZWRsaXN0KHRoaXMpO1xuXHR9XG59O1xuXG5NaXhlZGxpc3RDb250ZXh0LnByb3RvdHlwZS5leGl0UnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmV4aXRNaXhlZGxpc3QodGhpcyk7XG5cdH1cbn07XG5cblxuXG5cblFBU01QYXJzZXIuTWl4ZWRsaXN0Q29udGV4dCA9IE1peGVkbGlzdENvbnRleHQ7XG5cblFBU01QYXJzZXIucHJvdG90eXBlLm1peGVkbGlzdCA9IGZ1bmN0aW9uKCkge1xuXG4gICAgdmFyIGxvY2FsY3R4ID0gbmV3IE1peGVkbGlzdENvbnRleHQodGhpcywgdGhpcy5fY3R4LCB0aGlzLnN0YXRlKTtcbiAgICB0aGlzLmVudGVyUnVsZShsb2NhbGN0eCwgMjQsIFFBU01QYXJzZXIuUlVMRV9taXhlZGxpc3QpO1xuICAgIHRyeSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAyNDI7XG4gICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgdmFyIGxhXyA9IHRoaXMuX2ludGVycC5hZGFwdGl2ZVByZWRpY3QodGhpcy5faW5wdXQsMTQsdGhpcy5fY3R4KTtcbiAgICAgICAgc3dpdGNoKGxhXykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDEpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIwNjtcbiAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgIHZhciBfYWx0ID0gdGhpcy5faW50ZXJwLmFkYXB0aXZlUHJlZGljdCh0aGlzLl9pbnB1dCwxMCx0aGlzLl9jdHgpXG4gICAgICAgICAgICB3aGlsZShfYWx0IT0yICYmIF9hbHQhPWFudGxyNC5hdG4uQVROLklOVkFMSURfQUxUX05VTUJFUikge1xuICAgICAgICAgICAgICAgIGlmKF9hbHQ9PT0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxOTk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JRCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMDA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18xMSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMDE7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JTlQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjAyO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjAzO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMjEpOyBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIwODtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgICAgICAgICAgX2FsdCA9IHRoaXMuX2ludGVycC5hZGFwdGl2ZVByZWRpY3QodGhpcy5faW5wdXQsMTAsdGhpcy5fY3R4KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIwOTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JRCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDIpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIxNztcbiAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgIHZhciBfYWx0ID0gdGhpcy5faW50ZXJwLmFkYXB0aXZlUHJlZGljdCh0aGlzLl9pbnB1dCwxMSx0aGlzLl9jdHgpXG4gICAgICAgICAgICB3aGlsZShfYWx0IT0yICYmIF9hbHQhPWFudGxyNC5hdG4uQVROLklOVkFMSURfQUxUX05VTUJFUikge1xuICAgICAgICAgICAgICAgIGlmKF9hbHQ9PT0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMTA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JRCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMTE7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18xMSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMTI7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JTlQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjEzO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjE0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMjEpOyBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIxOTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgICAgICAgICAgX2FsdCA9IHRoaXMuX2ludGVycC5hZGFwdGl2ZVByZWRpY3QodGhpcy5faW5wdXQsMTEsdGhpcy5fY3R4KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIyMDtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JRCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjIxO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzExKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMjI7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSU5UKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMjM7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTIpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAzKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMzU7XG4gICAgICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgICAgICB2YXIgX2FsdCA9IHRoaXMuX2ludGVycC5hZGFwdGl2ZVByZWRpY3QodGhpcy5faW5wdXQsMTMsdGhpcy5fY3R4KVxuICAgICAgICAgICAgd2hpbGUoX2FsdCE9MiAmJiBfYWx0IT1hbnRscjQuYXRuLkFUTi5JTlZBTElEX0FMVF9OVU1CRVIpIHtcbiAgICAgICAgICAgICAgICBpZihfYWx0PT09MSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjI4O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfYWx0ID0gdGhpcy5faW50ZXJwLmFkYXB0aXZlUHJlZGljdCh0aGlzLl9pbnB1dCwxMix0aGlzLl9jdHgpXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlKF9hbHQhPTIgJiYgX2FsdCE9YW50bHI0LmF0bi5BVE4uSU5WQUxJRF9BTFRfTlVNQkVSKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihfYWx0PT09MSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMjQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklEKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjI1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yMSk7IFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hbHQgPSB0aGlzLl9pbnRlcnAuYWRhcHRpdmVQcmVkaWN0KHRoaXMuX2lucHV0LDEyLHRoaXMuX2N0eCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjMxO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSUQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjMyO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMjEpOyBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIzNztcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgICAgICAgICAgX2FsdCA9IHRoaXMuX2ludGVycC5hZGFwdGl2ZVByZWRpY3QodGhpcy5faW5wdXQsMTMsdGhpcy5fY3R4KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIzODtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JRCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjM5O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzExKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNDA7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSU5UKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNDE7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTIpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKHJlKSB7XG4gICAgXHRpZihyZSBpbnN0YW5jZW9mIGFudGxyNC5lcnJvci5SZWNvZ25pdGlvbkV4Y2VwdGlvbikge1xuXHQgICAgICAgIGxvY2FsY3R4LmV4Y2VwdGlvbiA9IHJlO1xuXHQgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVwb3J0RXJyb3IodGhpcywgcmUpO1xuXHQgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVjb3Zlcih0aGlzLCByZSk7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgXHR0aHJvdyByZTtcblx0ICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLmV4aXRSdWxlKCk7XG4gICAgfVxuICAgIHJldHVybiBsb2NhbGN0eDtcbn07XG5cbmZ1bmN0aW9uIEFyZ3VtZW50Q29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX2FyZ3VtZW50O1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5Bcmd1bWVudENvbnRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQucHJvdG90eXBlKTtcbkFyZ3VtZW50Q29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBcmd1bWVudENvbnRleHQ7XG5cbkFyZ3VtZW50Q29udGV4dC5wcm90b3R5cGUuSUQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUb2tlbihRQVNNUGFyc2VyLklELCAwKTtcbn07XG5cbkFyZ3VtZW50Q29udGV4dC5wcm90b3R5cGUuSU5UID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW4oUUFTTVBhcnNlci5JTlQsIDApO1xufTtcblxuQXJndW1lbnRDb250ZXh0LnByb3RvdHlwZS5lbnRlclJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5lbnRlckFyZ3VtZW50KHRoaXMpO1xuXHR9XG59O1xuXG5Bcmd1bWVudENvbnRleHQucHJvdG90eXBlLmV4aXRSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZXhpdEFyZ3VtZW50KHRoaXMpO1xuXHR9XG59O1xuXG5cblxuXG5RQVNNUGFyc2VyLkFyZ3VtZW50Q29udGV4dCA9IEFyZ3VtZW50Q29udGV4dDtcblxuUUFTTVBhcnNlci5wcm90b3R5cGUuYXJndW1lbnQgPSBmdW5jdGlvbigpIHtcblxuICAgIHZhciBsb2NhbGN0eCA9IG5ldyBBcmd1bWVudENvbnRleHQodGhpcywgdGhpcy5fY3R4LCB0aGlzLnN0YXRlKTtcbiAgICB0aGlzLmVudGVyUnVsZShsb2NhbGN0eCwgMjYsIFFBU01QYXJzZXIuUlVMRV9hcmd1bWVudCk7XG4gICAgdHJ5IHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IDI0OTtcbiAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICB2YXIgbGFfID0gdGhpcy5faW50ZXJwLmFkYXB0aXZlUHJlZGljdCh0aGlzLl9pbnB1dCwxNSx0aGlzLl9jdHgpO1xuICAgICAgICBzd2l0Y2gobGFfKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjQ0O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklEKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMik7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjQ1O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklEKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNDY7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTEpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI0NztcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JTlQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI0ODtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18xMik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICB9XG4gICAgfSBjYXRjaCAocmUpIHtcbiAgICBcdGlmKHJlIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gcmU7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IHJlO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuZXhpdFJ1bGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gRXhwbGlzdENvbnRleHQocGFyc2VyLCBwYXJlbnQsIGludm9raW5nU3RhdGUpIHtcblx0aWYocGFyZW50PT09dW5kZWZpbmVkKSB7XG5cdCAgICBwYXJlbnQgPSBudWxsO1xuXHR9XG5cdGlmKGludm9raW5nU3RhdGU9PT11bmRlZmluZWQgfHwgaW52b2tpbmdTdGF0ZT09PW51bGwpIHtcblx0XHRpbnZva2luZ1N0YXRlID0gLTE7XG5cdH1cblx0YW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LmNhbGwodGhpcywgcGFyZW50LCBpbnZva2luZ1N0YXRlKTtcbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IFFBU01QYXJzZXIuUlVMRV9leHBsaXN0O1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5FeHBsaXN0Q29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuRXhwbGlzdENvbnRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRXhwbGlzdENvbnRleHQ7XG5cbkV4cGxpc3RDb250ZXh0LnByb3RvdHlwZS5leHAgPSBmdW5jdGlvbihpKSB7XG4gICAgaWYoaT09PXVuZGVmaW5lZCkge1xuICAgICAgICBpID0gbnVsbDtcbiAgICB9XG4gICAgaWYoaT09PW51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dHMoRXhwQ29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChFeHBDb250ZXh0LGkpO1xuICAgIH1cbn07XG5cbkV4cGxpc3RDb250ZXh0LnByb3RvdHlwZS5lbnRlclJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5lbnRlckV4cGxpc3QodGhpcyk7XG5cdH1cbn07XG5cbkV4cGxpc3RDb250ZXh0LnByb3RvdHlwZS5leGl0UnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmV4aXRFeHBsaXN0KHRoaXMpO1xuXHR9XG59O1xuXG5cblxuXG5RQVNNUGFyc2VyLkV4cGxpc3RDb250ZXh0ID0gRXhwbGlzdENvbnRleHQ7XG5cblFBU01QYXJzZXIucHJvdG90eXBlLmV4cGxpc3QgPSBmdW5jdGlvbigpIHtcblxuICAgIHZhciBsb2NhbGN0eCA9IG5ldyBFeHBsaXN0Q29udGV4dCh0aGlzLCB0aGlzLl9jdHgsIHRoaXMuc3RhdGUpO1xuICAgIHRoaXMuZW50ZXJSdWxlKGxvY2FsY3R4LCAyOCwgUUFTTVBhcnNlci5SVUxFX2V4cGxpc3QpO1xuICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMSk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAyNTY7XG4gICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgdmFyIF9hbHQgPSB0aGlzLl9pbnRlcnAuYWRhcHRpdmVQcmVkaWN0KHRoaXMuX2lucHV0LDE2LHRoaXMuX2N0eClcbiAgICAgICAgd2hpbGUoX2FsdCE9MiAmJiBfYWx0IT1hbnRscjQuYXRuLkFUTi5JTlZBTElEX0FMVF9OVU1CRVIpIHtcbiAgICAgICAgICAgIGlmKF9hbHQ9PT0xKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI1MTtcbiAgICAgICAgICAgICAgICB0aGlzLmV4cCgwKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjUyO1xuICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yMSk7IFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI1ODtcbiAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgIF9hbHQgPSB0aGlzLl9pbnRlcnAuYWRhcHRpdmVQcmVkaWN0KHRoaXMuX2lucHV0LDE2LHRoaXMuX2N0eCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN0YXRlID0gMjU5O1xuICAgICAgICB0aGlzLmV4cCgwKTtcbiAgICB9IGNhdGNoIChyZSkge1xuICAgIFx0aWYocmUgaW5zdGFuY2VvZiBhbnRscjQuZXJyb3IuUmVjb2duaXRpb25FeGNlcHRpb24pIHtcblx0ICAgICAgICBsb2NhbGN0eC5leGNlcHRpb24gPSByZTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgIFx0dGhyb3cgcmU7XG5cdCAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5leGl0UnVsZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbG9jYWxjdHg7XG59O1xuXG5mdW5jdGlvbiBFeHBDb250ZXh0KHBhcnNlciwgcGFyZW50LCBpbnZva2luZ1N0YXRlKSB7XG5cdGlmKHBhcmVudD09PXVuZGVmaW5lZCkge1xuXHQgICAgcGFyZW50ID0gbnVsbDtcblx0fVxuXHRpZihpbnZva2luZ1N0YXRlPT09dW5kZWZpbmVkIHx8IGludm9raW5nU3RhdGU9PT1udWxsKSB7XG5cdFx0aW52b2tpbmdTdGF0ZSA9IC0xO1xuXHR9XG5cdGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5jYWxsKHRoaXMsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSk7XG4gICAgdGhpcy5wYXJzZXIgPSBwYXJzZXI7XG4gICAgdGhpcy5ydWxlSW5kZXggPSBRQVNNUGFyc2VyLlJVTEVfZXhwO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5FeHBDb250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZSk7XG5FeHBDb250ZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEV4cENvbnRleHQ7XG5cbkV4cENvbnRleHQucHJvdG90eXBlLmV4cCA9IGZ1bmN0aW9uKGkpIHtcbiAgICBpZihpPT09dW5kZWZpbmVkKSB7XG4gICAgICAgIGkgPSBudWxsO1xuICAgIH1cbiAgICBpZihpPT09bnVsbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0cyhFeHBDb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KEV4cENvbnRleHQsaSk7XG4gICAgfVxufTtcblxuRXhwQ29udGV4dC5wcm90b3R5cGUudW5hcnlvcCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFR5cGVkUnVsZUNvbnRleHQoVW5hcnlvcENvbnRleHQsMCk7XG59O1xuXG5FeHBDb250ZXh0LnByb3RvdHlwZS5hdG9tID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChBdG9tQ29udGV4dCwwKTtcbn07XG5cbkV4cENvbnRleHQucHJvdG90eXBlLmVudGVyUnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmVudGVyRXhwKHRoaXMpO1xuXHR9XG59O1xuXG5FeHBDb250ZXh0LnByb3RvdHlwZS5leGl0UnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmV4aXRFeHAodGhpcyk7XG5cdH1cbn07XG5cblxuXG5RQVNNUGFyc2VyLnByb3RvdHlwZS5leHAgPSBmdW5jdGlvbihfcCkge1xuXHRpZihfcD09PXVuZGVmaW5lZCkge1xuXHQgICAgX3AgPSAwO1xuXHR9XG4gICAgdmFyIF9wYXJlbnRjdHggPSB0aGlzLl9jdHg7XG4gICAgdmFyIF9wYXJlbnRTdGF0ZSA9IHRoaXMuc3RhdGU7XG4gICAgdmFyIGxvY2FsY3R4ID0gbmV3IEV4cENvbnRleHQodGhpcywgdGhpcy5fY3R4LCBfcGFyZW50U3RhdGUpO1xuICAgIHZhciBfcHJldmN0eCA9IGxvY2FsY3R4O1xuICAgIHZhciBfc3RhcnRTdGF0ZSA9IDMwO1xuICAgIHRoaXMuZW50ZXJSZWN1cnNpb25SdWxlKGxvY2FsY3R4LCAzMCwgUUFTTVBhcnNlci5SVUxFX2V4cCwgX3ApO1xuICAgIHZhciBfbGEgPSAwOyAvLyBUb2tlbiB0eXBlXG4gICAgdHJ5IHtcbiAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAxKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IDI4MTtcbiAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICB2YXIgbGFfID0gdGhpcy5faW50ZXJwLmFkYXB0aXZlUHJlZGljdCh0aGlzLl9pbnB1dCwyMCx0aGlzLl9jdHgpO1xuICAgICAgICBzd2l0Y2gobGFfKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNjM7XG4gICAgICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgICAgICBfbGEgPSB0aGlzLl9pbnB1dC5MQSgxKTtcbiAgICAgICAgICAgIGlmKF9sYT09PVFBU01QYXJzZXIuVF9fMjUgfHwgX2xhPT09UUFTTVBhcnNlci5UX18yNikge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNjI7XG4gICAgICAgICAgICAgICAgX2xhID0gdGhpcy5faW5wdXQuTEEoMSk7XG4gICAgICAgICAgICAgICAgaWYoIShfbGE9PT1RQVNNUGFyc2VyLlRfXzI1IHx8IF9sYT09PVFBU01QYXJzZXIuVF9fMjYpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVySW5saW5lKHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBcdHRoaXMuX2VyckhhbmRsZXIucmVwb3J0TWF0Y2godGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI2NTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18zKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNjY7XG4gICAgICAgICAgICB0aGlzLmV4cCgwKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNjc7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fNCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjcwO1xuICAgICAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICAgICAgX2xhID0gdGhpcy5faW5wdXQuTEEoMSk7XG4gICAgICAgICAgICBpZihfbGE9PT1RQVNNUGFyc2VyLlRfXzI1IHx8IF9sYT09PVFBU01QYXJzZXIuVF9fMjYpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjY5O1xuICAgICAgICAgICAgICAgIF9sYSA9IHRoaXMuX2lucHV0LkxBKDEpO1xuICAgICAgICAgICAgICAgIGlmKCEoX2xhPT09UUFTTVBhcnNlci5UX18yNSB8fCBfbGE9PT1RQVNNUGFyc2VyLlRfXzI2KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVjb3ZlcklubGluZSh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgXHR0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydE1hdGNoKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNzI7XG4gICAgICAgICAgICB0aGlzLnVuYXJ5b3AoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNzM7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjc0O1xuICAgICAgICAgICAgdGhpcy5leHAoMCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjc1O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzQpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI3ODtcbiAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgIF9sYSA9IHRoaXMuX2lucHV0LkxBKDEpO1xuICAgICAgICAgICAgaWYoX2xhPT09UUFTTVBhcnNlci5UX18yNSB8fCBfbGE9PT1RQVNNUGFyc2VyLlRfXzI2KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI3NztcbiAgICAgICAgICAgICAgICBfbGEgPSB0aGlzLl9pbnB1dC5MQSgxKTtcbiAgICAgICAgICAgICAgICBpZighKF9sYT09PVFBU01QYXJzZXIuVF9fMjUgfHwgX2xhPT09UUFTTVBhcnNlci5UX18yNikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlY292ZXJJbmxpbmUodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIFx0dGhpcy5fZXJySGFuZGxlci5yZXBvcnRNYXRjaCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjgwO1xuICAgICAgICAgICAgdGhpcy5hdG9tKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2N0eC5zdG9wID0gdGhpcy5faW5wdXQuTFQoLTEpO1xuICAgICAgICB0aGlzLnN0YXRlID0gMjk0O1xuICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgIHZhciBfYWx0ID0gdGhpcy5faW50ZXJwLmFkYXB0aXZlUHJlZGljdCh0aGlzLl9pbnB1dCwyMix0aGlzLl9jdHgpXG4gICAgICAgIHdoaWxlKF9hbHQhPTIgJiYgX2FsdCE9YW50bHI0LmF0bi5BVE4uSU5WQUxJRF9BTFRfTlVNQkVSKSB7XG4gICAgICAgICAgICBpZihfYWx0PT09MSkge1xuICAgICAgICAgICAgICAgIGlmKHRoaXMuX3BhcnNlTGlzdGVuZXJzIT09bnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJFeGl0UnVsZUV2ZW50KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF9wcmV2Y3R4ID0gbG9jYWxjdHg7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI5MjtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgICAgICAgICAgdmFyIGxhXyA9IHRoaXMuX2ludGVycC5hZGFwdGl2ZVByZWRpY3QodGhpcy5faW5wdXQsMjEsdGhpcy5fY3R4KTtcbiAgICAgICAgICAgICAgICBzd2l0Y2gobGFfKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBsb2NhbGN0eCA9IG5ldyBFeHBDb250ZXh0KHRoaXMsIF9wYXJlbnRjdHgsIF9wYXJlbnRTdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaE5ld1JlY3Vyc2lvbkNvbnRleHQobG9jYWxjdHgsIF9zdGFydFN0YXRlLCBRQVNNUGFyc2VyLlJVTEVfZXhwKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI4MztcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoIHRoaXMucHJlY3ByZWQodGhpcy5fY3R4LCA2KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBhbnRscjQuZXJyb3IuRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9uKHRoaXMsIFwidGhpcy5wcmVjcHJlZCh0aGlzLl9jdHgsIDYpXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyODQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yMik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyODU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwKDcpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxjdHggPSBuZXcgRXhwQ29udGV4dCh0aGlzLCBfcGFyZW50Y3R4LCBfcGFyZW50U3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnB1c2hOZXdSZWN1cnNpb25Db250ZXh0KGxvY2FsY3R4LCBfc3RhcnRTdGF0ZSwgUUFTTVBhcnNlci5SVUxFX2V4cCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyODY7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKCB0aGlzLnByZWNwcmVkKHRoaXMuX2N0eCwgNSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgYW50bHI0LmVycm9yLkZhaWxlZFByZWRpY2F0ZUV4Y2VwdGlvbih0aGlzLCBcInRoaXMucHJlY3ByZWQodGhpcy5fY3R4LCA1KVwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjg3O1xuICAgICAgICAgICAgICAgICAgICBfbGEgPSB0aGlzLl9pbnB1dC5MQSgxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYoIShfbGE9PT1RQVNNUGFyc2VyLlRfXzIzIHx8IF9sYT09PVFBU01QYXJzZXIuVF9fMjQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVjb3ZlcklubGluZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgXHR0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydE1hdGNoKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI4ODtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5leHAoNik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICBsb2NhbGN0eCA9IG5ldyBFeHBDb250ZXh0KHRoaXMsIF9wYXJlbnRjdHgsIF9wYXJlbnRTdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaE5ld1JlY3Vyc2lvbkNvbnRleHQobG9jYWxjdHgsIF9zdGFydFN0YXRlLCBRQVNNUGFyc2VyLlJVTEVfZXhwKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI4OTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoIHRoaXMucHJlY3ByZWQodGhpcy5fY3R4LCA0KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBhbnRscjQuZXJyb3IuRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9uKHRoaXMsIFwidGhpcy5wcmVjcHJlZCh0aGlzLl9jdHgsIDQpXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyOTA7XG4gICAgICAgICAgICAgICAgICAgIF9sYSA9IHRoaXMuX2lucHV0LkxBKDEpO1xuICAgICAgICAgICAgICAgICAgICBpZighKF9sYT09PVFBU01QYXJzZXIuVF9fMjUgfHwgX2xhPT09UUFTTVBhcnNlci5UX18yNikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVySW5saW5lKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBcdHRoaXMuX2VyckhhbmRsZXIucmVwb3J0TWF0Y2godGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjkxO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cCg1KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICB9IFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI5NjtcbiAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgIF9hbHQgPSB0aGlzLl9pbnRlcnAuYWRhcHRpdmVQcmVkaWN0KHRoaXMuX2lucHV0LDIyLHRoaXMuX2N0eCk7XG4gICAgICAgIH1cblxuICAgIH0gY2F0Y2goIGVycm9yKSB7XG4gICAgICAgIGlmKGVycm9yIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gZXJyb3I7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCBlcnJvcik7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIGVycm9yKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IGVycm9yO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMudW5yb2xsUmVjdXJzaW9uQ29udGV4dHMoX3BhcmVudGN0eClcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gQXRvbUNvbnRleHQocGFyc2VyLCBwYXJlbnQsIGludm9raW5nU3RhdGUpIHtcblx0aWYocGFyZW50PT09dW5kZWZpbmVkKSB7XG5cdCAgICBwYXJlbnQgPSBudWxsO1xuXHR9XG5cdGlmKGludm9raW5nU3RhdGU9PT11bmRlZmluZWQgfHwgaW52b2tpbmdTdGF0ZT09PW51bGwpIHtcblx0XHRpbnZva2luZ1N0YXRlID0gLTE7XG5cdH1cblx0YW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LmNhbGwodGhpcywgcGFyZW50LCBpbnZva2luZ1N0YXRlKTtcbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IFFBU01QYXJzZXIuUlVMRV9hdG9tO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5BdG9tQ29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuQXRvbUNvbnRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQXRvbUNvbnRleHQ7XG5cbkF0b21Db250ZXh0LnByb3RvdHlwZS5JTlQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUb2tlbihRQVNNUGFyc2VyLklOVCwgMCk7XG59O1xuXG5BdG9tQ29udGV4dC5wcm90b3R5cGUuUkVBTCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuUkVBTCwgMCk7XG59O1xuXG5BdG9tQ29udGV4dC5wcm90b3R5cGUuUEkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUb2tlbihRQVNNUGFyc2VyLlBJLCAwKTtcbn07XG5cbkF0b21Db250ZXh0LnByb3RvdHlwZS5JRCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuSUQsIDApO1xufTtcblxuQXRvbUNvbnRleHQucHJvdG90eXBlLmVudGVyUnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmVudGVyQXRvbSh0aGlzKTtcblx0fVxufTtcblxuQXRvbUNvbnRleHQucHJvdG90eXBlLmV4aXRSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZXhpdEF0b20odGhpcyk7XG5cdH1cbn07XG5cblxuXG5cblFBU01QYXJzZXIuQXRvbUNvbnRleHQgPSBBdG9tQ29udGV4dDtcblxuUUFTTVBhcnNlci5wcm90b3R5cGUuYXRvbSA9IGZ1bmN0aW9uKCkge1xuXG4gICAgdmFyIGxvY2FsY3R4ID0gbmV3IEF0b21Db250ZXh0KHRoaXMsIHRoaXMuX2N0eCwgdGhpcy5zdGF0ZSk7XG4gICAgdGhpcy5lbnRlclJ1bGUobG9jYWxjdHgsIDMyLCBRQVNNUGFyc2VyLlJVTEVfYXRvbSk7XG4gICAgdmFyIF9sYSA9IDA7IC8vIFRva2VuIHR5cGVcbiAgICB0cnkge1xuICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDEpO1xuICAgICAgICB0aGlzLnN0YXRlID0gMjk3O1xuICAgICAgICBfbGEgPSB0aGlzLl9pbnB1dC5MQSgxKTtcbiAgICAgICAgaWYoISgoKCgoX2xhIC0gMzQpKSAmIH4weDFmKSA9PSAwICYmICgoMSA8PCAoX2xhIC0gMzQpKSAmICgoMSA8PCAoUUFTTVBhcnNlci5QSSAtIDM0KSkgfCAoMSA8PCAoUUFTTVBhcnNlci5SRUFMIC0gMzQpKSB8ICgxIDw8IChRQVNNUGFyc2VyLklOVCAtIDM0KSkgfCAoMSA8PCAoUUFTTVBhcnNlci5JRCAtIDM0KSkpKSAhPT0gMCkpKSB7XG4gICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVjb3ZlcklubGluZSh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgXHR0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydE1hdGNoKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChyZSkge1xuICAgIFx0aWYocmUgaW5zdGFuY2VvZiBhbnRscjQuZXJyb3IuUmVjb2duaXRpb25FeGNlcHRpb24pIHtcblx0ICAgICAgICBsb2NhbGN0eC5leGNlcHRpb24gPSByZTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgIFx0dGhyb3cgcmU7XG5cdCAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5leGl0UnVsZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbG9jYWxjdHg7XG59O1xuXG5mdW5jdGlvbiBVbmFyeW9wQ29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX3VuYXJ5b3A7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cblVuYXJ5b3BDb250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZSk7XG5VbmFyeW9wQ29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBVbmFyeW9wQ29udGV4dDtcblxuXG5VbmFyeW9wQ29udGV4dC5wcm90b3R5cGUuZW50ZXJSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZW50ZXJVbmFyeW9wKHRoaXMpO1xuXHR9XG59O1xuXG5VbmFyeW9wQ29udGV4dC5wcm90b3R5cGUuZXhpdFJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5leGl0VW5hcnlvcCh0aGlzKTtcblx0fVxufTtcblxuXG5cblxuUUFTTVBhcnNlci5VbmFyeW9wQ29udGV4dCA9IFVuYXJ5b3BDb250ZXh0O1xuXG5RQVNNUGFyc2VyLnByb3RvdHlwZS51bmFyeW9wID0gZnVuY3Rpb24oKSB7XG5cbiAgICB2YXIgbG9jYWxjdHggPSBuZXcgVW5hcnlvcENvbnRleHQodGhpcywgdGhpcy5fY3R4LCB0aGlzLnN0YXRlKTtcbiAgICB0aGlzLmVudGVyUnVsZShsb2NhbGN0eCwgMzQsIFFBU01QYXJzZXIuUlVMRV91bmFyeW9wKTtcbiAgICB2YXIgX2xhID0gMDsgLy8gVG9rZW4gdHlwZVxuICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMSk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAyOTk7XG4gICAgICAgIF9sYSA9IHRoaXMuX2lucHV0LkxBKDEpO1xuICAgICAgICBpZighKCgoKChfbGEgLSAyOCkpICYgfjB4MWYpID09IDAgJiYgKCgxIDw8IChfbGEgLSAyOCkpICYgKCgxIDw8IChRQVNNUGFyc2VyLlRfXzI3IC0gMjgpKSB8ICgxIDw8IChRQVNNUGFyc2VyLlRfXzI4IC0gMjgpKSB8ICgxIDw8IChRQVNNUGFyc2VyLlRfXzI5IC0gMjgpKSB8ICgxIDw8IChRQVNNUGFyc2VyLlRfXzMwIC0gMjgpKSB8ICgxIDw8IChRQVNNUGFyc2VyLlRfXzMxIC0gMjgpKSB8ICgxIDw8IChRQVNNUGFyc2VyLlRfXzMyIC0gMjgpKSkpICE9PSAwKSkpIHtcbiAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVySW5saW5lKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICBcdHRoaXMuX2VyckhhbmRsZXIucmVwb3J0TWF0Y2godGhpcyk7XG4gICAgICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKHJlKSB7XG4gICAgXHRpZihyZSBpbnN0YW5jZW9mIGFudGxyNC5lcnJvci5SZWNvZ25pdGlvbkV4Y2VwdGlvbikge1xuXHQgICAgICAgIGxvY2FsY3R4LmV4Y2VwdGlvbiA9IHJlO1xuXHQgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVwb3J0RXJyb3IodGhpcywgcmUpO1xuXHQgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVjb3Zlcih0aGlzLCByZSk7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgXHR0aHJvdyByZTtcblx0ICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLmV4aXRSdWxlKCk7XG4gICAgfVxuICAgIHJldHVybiBsb2NhbGN0eDtcbn07XG5cblxuUUFTTVBhcnNlci5wcm90b3R5cGUuc2VtcHJlZCA9IGZ1bmN0aW9uKGxvY2FsY3R4LCBydWxlSW5kZXgsIHByZWRJbmRleCkge1xuXHRzd2l0Y2gocnVsZUluZGV4KSB7XG5cdGNhc2UgMTU6XG5cdFx0XHRyZXR1cm4gdGhpcy5leHBfc2VtcHJlZChsb2NhbGN0eCwgcHJlZEluZGV4KTtcbiAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBcIk5vIHByZWRpY2F0ZSB3aXRoIGluZGV4OlwiICsgcnVsZUluZGV4O1xuICAgfVxufTtcblxuUUFTTVBhcnNlci5wcm90b3R5cGUuZXhwX3NlbXByZWQgPSBmdW5jdGlvbihsb2NhbGN0eCwgcHJlZEluZGV4KSB7XG5cdHN3aXRjaChwcmVkSW5kZXgpIHtcblx0XHRjYXNlIDA6XG5cdFx0XHRyZXR1cm4gdGhpcy5wcmVjcHJlZCh0aGlzLl9jdHgsIDYpO1xuXHRcdGNhc2UgMTpcblx0XHRcdHJldHVybiB0aGlzLnByZWNwcmVkKHRoaXMuX2N0eCwgNSk7XG5cdFx0Y2FzZSAyOlxuXHRcdFx0cmV0dXJuIHRoaXMucHJlY3ByZWQodGhpcy5fY3R4LCA0KTtcblx0XHRkZWZhdWx0OlxuXHRcdFx0dGhyb3cgXCJObyBwcmVkaWNhdGUgd2l0aCBpbmRleDpcIiArIHByZWRJbmRleDtcblx0fVxufTtcblxuXG5leHBvcnRzLlFBU01QYXJzZXIgPSBRQVNNUGFyc2VyO1xuIiwiLyoqXG4gKiBAbGljZW5zZVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNiwgUGV0YXIgS29ycG9uYWnEhyA8cGV0YXIua29ycG9uYWljQGdtYWlsLmNvbT5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSwgZm91bmQgaW5cbiAqIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbnZhciBtYXRoID0gcmVxdWlyZShcIm1hdGhqc1wiKTtcblxudmFyIFFBU01JbXBvcnQgPSByZXF1aXJlKFwiLi9xYXNtX2ltcG9ydC9RQVNNSW1wb3J0LmpzXCIpO1xuXG5cbnZhciBmb3JtYXRDb21wbGV4MiA9IGZ1bmN0aW9uKHJlLCBpbSwgb3B0aW9ucykge1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR2YXIgc3JlID0gZm9ybWF0RmxvYXQocmUsIG9wdGlvbnMpO1xuXG5cdHZhciBvcHQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpKTtcblx0b3B0LnBsdXNDaGFyID0gXCIrXCI7XG5cdHZhciBzaW0gPSBmb3JtYXRGbG9hdChpbSwgb3B0KTtcblx0cmV0dXJuIHNyZSArIHNpbSArIChvcHRpb25zLmlvdGFDaGFyID8gb3B0aW9ucy5pb3RhQ2hhciA6IFwiaVwiKTtcbn07XG5cbnZhciBmb3JtYXRGbG9hdCA9IGZ1bmN0aW9uKGYsIG9wdGlvbnMpIHtcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0aWYob3B0aW9ucy5kZWNpbWFsUGxhY2VzKSB7XG5cdFx0ZiA9IG1hdGgucm91bmQoZiwgb3B0aW9ucy5kZWNpbWFsUGxhY2VzKTtcblx0fVxuXG5cdHZhciBzID0gZiArIFwiXCI7XG5cblx0aWYob3B0aW9ucy5maXhlZFdpZHRoKSB7XG5cdFx0cyA9IGYudG9GaXhlZChvcHRpb25zLmRlY2ltYWxQbGFjZXMgfHwgMTQpO1xuXHR9XG5cblx0dmFyIHBsdXNDaGFyID0gb3B0aW9ucy5wbHVzQ2hhcjtcblx0aWYob3B0aW9ucy5maXhlZFdpZHRoICYmICFwbHVzQ2hhcikge1xuXHRcdHBsdXNDaGFyID0gXCIgXCI7XG5cdH1cblxuXHRpZihwbHVzQ2hhciAmJiBmID49IDApIHtcblx0XHRzID0gcGx1c0NoYXIgKyBzO1xuXHR9XG5cblx0cmV0dXJuIHM7XG59O1xuXG52YXIgemVyb2VzTWF0cml4ID0gZnVuY3Rpb24obikge1xuXHR2YXIgbWF0cml4ID0gW107XG5cdGZvcih2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcblx0XHRtYXRyaXhbaV0gPSBbXTtcblx0XHRmb3IodmFyIGogPSAwOyBqIDwgbjsgaisrKSB7XG5cdFx0XHRtYXRyaXhbaV1bal0gPSAwO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gbWF0cml4O1xufTtcblxudmFyIGlkZW50aXR5TWF0cml4ID0gZnVuY3Rpb24obikge1xuXHR2YXIgbWF0cml4ID0gW107XG5cdGZvcih2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcblx0XHRtYXRyaXhbaV0gPSBbXTtcblx0XHRmb3IodmFyIGogPSAwOyBqIDwgbjsgaisrKSB7XG5cdFx0XHRtYXRyaXhbaV1bal0gPSBqID09IGkgPyAxIDogMDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG1hdHJpeDtcbn07XG5cblxudmFyIG1ha2VDb250cm9sbGVkID0gZnVuY3Rpb24oVSkge1xuXHR2YXIgbSA9IFUubGVuZ3RoO1xuXHR2YXIgQyA9IGlkZW50aXR5TWF0cml4KG0gKiAyKTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBtOyBpKyspIHtcblx0XHRmb3IgKHZhciBqID0gMDsgaiA8IG07IGorKykge1xuXHRcdFx0Q1tpICsgbV1baiArIG1dID0gVVtpXVtqXTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIEM7XG59O1xuXG52YXIgdW5pcXVlQXJyYXkgPSBmdW5jdGlvbihhcnJheSkge1xuICByZXR1cm4gYXJyYXkuZmlsdGVyKGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgc2VsZikge1xuXHRyZXR1cm4gc2VsZi5pbmRleE9mKHZhbHVlKSA9PT0gaW5kZXg7XG4gIH0pO1xufTtcblxudmFyIHF1Yml0TGV0dGVyID0gZnVuY3Rpb24obiwgbWF4KSB7XG5cdG1heE4gPSBtYXggfHwgKG4gKyAxKTtcblxuXHRpZihtYXhOID4gMCkge1xuXHRcdG1heE4gPSBtYXhOIC0gMTtcblx0fVxuXG5cdG1heExlbiA9IG1heE4udG9TdHJpbmcoMjYpLmxlbmd0aDtcblxuXHR2YXIgblN0ciA9IG4udG9TdHJpbmcoMjYpO1xuXHR3aGlsZShuU3RyLmxlbmd0aCA8IG1heExlbikge1xuXHRcdG5TdHIgPSBcIjBcIiArIG5TdHI7XG5cdH1cblxuXHR2YXIgcmVzID0gXCJcIjtcblx0Zm9yKHZhciBpID0gMDsgaSA8IG5TdHIubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgY29kZSA9IG5TdHIuY2hhckNvZGVBdChpKTtcblx0XHRyZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlIDwgOTcgPyBjb2RlICsgNDkgOiBjb2RlICsgMTApO1xuXHR9XG5cblx0cmV0dXJuIHJlcztcbn07XG5cbnZhciBRdWFudHVtQ2lyY3VpdCA9IGZ1bmN0aW9uKG51bVF1Yml0cykge1xuXHR0aGlzLmJhc2ljR2F0ZXMgPSB7XG5cdFx0aWQ6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlNpbmdsZSBxdWJpdCBpZGVudGl0eSBnYXRlXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsIDBdLFxuXHRcdFx0XHRbMCwgMV1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJJRFwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJJXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdG5hbWU6IFwiSVwiLFxuXHRcdFx0XHRcdG5vdFRmcVN1cHBvcnRlZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY29tcGFjdFVuaXRhcnlcIixcblx0XHRcdFx0XHRwYXJhbXM6IHsgYWxwaGE6IFwiKENvbXBsZXgpIHsgLnJlYWwgPSAxLCAuaW1hZyA9IDAgfVwiLFxuXHRcdFx0XHRcdFx0XHRiZXRhOiBcIihDb21wbGV4KSB7LnJlYWwgPSAwLCAuaW1hZyA9IDB9XCJ9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiSVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiaWRcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcImlcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiSVwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0eDoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiUGF1bGkgWCAoUEkgcm90YXRpb24gb3ZlciBYLWF4aXMpIGFrYSBcXFwiTk9UXFxcIiBnYXRlXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzAsMV0sXG5cdFx0XHRcdFsxLDBdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiWFwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJYXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdG5hbWU6IFwiWFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJwYXVsaVhcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlhcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwieFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJYXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHR5OiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJQYXVsaSBZIChQSSByb3RhdGlvbiBvdmVyIFktYXhpcylcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMCxcIi1pXCJdLFxuXHRcdFx0XHRbXCJpXCIsMF1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJZXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIllcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJZXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcInBhdWxpWVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1aXJrOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJZXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ5XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIllcIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHo6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlBhdWxpIFogKFBJIHJvdGF0aW9uIG92ZXIgWi1heGlzKVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDBdLFxuXHRcdFx0XHRbMCwtMV1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJaXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlpcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJaXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcInBhdWxpWlwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWlwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1aXJrOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJaXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ6XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlpcIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGg6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIkhhZGFtYXJkIGdhdGVcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbXCIxIC8gc3FydCgyKVwiLFwiMSAvIHNxcnQoMilcIl0sXG5cdFx0XHRcdFtcIjEgLyBzcXJ0KDIpXCIsXCItMSAvIHNxcnQoMilcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJIXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkhcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJIXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcImhhZGFtYXJkXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJIXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVpcms6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkhcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcImhcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiSFwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0c3JuOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJTcXVhcmUgcm9vdCBvZiBOT1RcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbXCIwLjUrMC41aVwiLFwiMC41LTAuNWlcIl0sXG5cdFx0XHRcdFtcIjAuNS0wLjVpXCIsXCIwLjUrMC41aVwiXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIiYjeDIyMUE7WFwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJzcm5cIixcblx0XHRcdFx0XHRkZWZnYXRlOiBcIkRFRkdBVEUgc3JuOlxcbiAgICAwLjUrMC41aSwgMC41LTAuNWlcXG4gICAgMC41LTAuNWksIDAuNSswLjVpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cHlxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJzcm5cIixcblx0XHRcdFx0XHRhcnJheTogXCJbWzAuNSswLjVqLCAwLjUtMC41al0sIFswLjUtMC41aiwgMC41KzAuNWpdXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlgqKigxLzIpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRtYXRyaXg6IFtbW1wiMC41XCIsIFwiMC41XCJdLCBbXCIwLjVcIiwgXCItMC41XCJdXSxcblx0XHRcdFx0XHRcdFtbXCIwLjVcIiwgXCItMC41XCJdLFtcIjAuNVwiLCBcIjAuNVwiXV1dXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcInN4XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJzeFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidlwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bWF0cml4OiBbW1wiMC41KzAuNWlcIixcIjAuNS0wLjVpXCJdLFtcIjAuNS0wLjVpXCIsXCIwLjUrMC41aVwiXV0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1swLjUrMC41aiwgMC41LTAuNWpdLCBbMC41LTAuNWosIDAuNSswLjVqXV1cIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHNybmRnOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJJbnZlcnNlIHNxdWFyZSByb290IG9mIE5PVFwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFtcIjAuNS0wLjVpXCIsXCIwLjUrMC41aVwiXSxcblx0XHRcdFx0W1wiMC41KzAuNWlcIixcIjAuNS0wLjVpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiJiN4MjIxQTtYJiM4MjI0O1wiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJzcm5kZ1wiLFxuXHRcdFx0XHRcdGRlZmdhdGU6IFwiREVGR0FURSBzcm5kZzpcXG4gICAgMC41LTAuNWksIDAuNSswLjVpXFxuICAgIDAuNSswLjVpLCAwLjUtMC41aVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB5cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwic3JuZGdcIixcblx0XHRcdFx0XHRhcnJheTogXCJbWzAuNS0wLjVqLCAwLjUrMC41al0sIFswLjUrMC41aiwgMC41LTAuNWpdXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlgqKigtMS8yKVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0bWF0cml4OiBbW1tcIjAuNVwiLCBcIi0wLjVcIl0sIFtcIjAuNVwiLCBcIjAuNVwiXV0sXG5cdFx0XHRcdFx0XHRbW1wiMC41XCIsIFwiMC41XCJdLFtcIjAuNVwiLCBcIi0wLjVcIl1dXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJzeGRnXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJzeGRnXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ2aVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bWF0cml4OiBbW1wiMC41LTAuNWlcIixcIjAuNSswLjVpXCJdLFtcIjAuNSswLjVpXCIsXCIwLjUtMC41aVwiXV0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1swLjUtMC41aiwgMC41KzAuNWpdLCBbMC41KzAuNWosIDAuNS0wLjVqXV1cIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHIyOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJQSS8yIHJvdGF0aW9uIG92ZXIgWi1heGlzIGFrYSBcXFwiUGhhc2UgUEkvMlxcXCJcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwXSxcblx0XHRcdFx0WzAsXCJleHAoaSAqIHBpIC8gMilcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJaJiN4MUQ2RDE7LzJcIlxuXHRcdFx0fSxcblxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwic1wiXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwic1wiXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwic0dhdGVcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJzXCIsXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxYXNtOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IFtcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJzXCIsIHBhcmFtczoge30gfVxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwic1wiLCBwYXJhbXM6IHt9IH1cblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWl7CvVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwic1wiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJTXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRyNDoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiUEkvNCByb3RhdGlvbiBvdmVyIFotYXhpcyBha2EgXFxcIlBoYXNlIFBJLzRcXFwiXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsMF0sXG5cdFx0XHRcdFswLFwiZXhwKGkgKiBwaSAvIDQpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiWiYjeDFENkQxOy80XCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJ0XCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJ0XCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ0R2F0ZVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcInRcIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidFwiLCBwYXJhbXM6IHt9IH1cblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInRcIiwgcGFyYW1zOiB7fSB9XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVpcms6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlpewrxcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInRcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiVFwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0cjg6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlBJLzggcm90YXRpb24gb3ZlciBaLWF4aXMgYWthIFxcXCJQaGFzZSBQSS84XFxcIlwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDBdLFxuXHRcdFx0XHRbMCxcImV4cChpICogcGkgLyA4KVwiXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlomI3gxRDZEMTsvOFwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwidTFcIixcblx0XHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0XHRsYW1iZGE6IFwicGkvOFwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwidTFcIixcblx0XHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0XHRsYW1iZGE6IFwicGkvOFwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwicGhhc2VTaGlmdFwiLFxuXHRcdFx0XHRcdHBhcmFtczoge3RoZXRhOiBcIk1fUEkvOFwifVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJ1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCJwaS84XCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFhc206IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUxXCIsIHBhcmFtczogeyBsYW1iZGE6IFwicGkvOFwiIH0gfVxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTFcIiwgcGFyYW1zOiB7IGxhbWJkYTogXCJwaS84XCIgfSB9XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVpcms6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlpe4oWbXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJwaGFzZXNoaWZ0XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiB7dGhldGE6IFwicGkvOFwifVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG1hdHJpeDogW1sxLDBdLFswLFwiZXhwKGkgKiBwaSAvIDgpXCJdXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMF0sWzAsbnAuZXhwKDFqICogbnAucGkgLyA4KV1dXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRyeDoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiUm90YXRpb24gYXJvdW5kIHRoZSBYLWF4aXMgYnkgZ2l2ZW4gYW5nbGVcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbXCJjb3ModGhldGEgLyAyKVwiLCBcIi1pICogc2luKHRoZXRhIC8gMilcIl0sXG5cdFx0XHRcdFtcIi1pICogc2luKHRoZXRhIC8gMilcIiwgXCJjb3ModGhldGEgLyAyKVwiXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlJYXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlJYXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJyeFwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcInJvdGF0ZVhcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiUnhcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwicnhcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJSWFwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0cnk6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlJvdGF0aW9uIGFyb3VuZCB0aGUgWS1heGlzIGJ5IGdpdmVuIGFuZ2xlXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0W1wiY29zKHRoZXRhIC8gMilcIiwgXCItMSAqIHNpbih0aGV0YSAvIDIpXCJdLFxuXHRcdFx0XHRbXCJzaW4odGhldGEgLyAyKVwiLCBcImNvcyh0aGV0YSAvIDIpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiUllcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiUllcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcInJ5XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwicm90YXRlWVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJSeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJyeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlJZXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRyejoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiUm90YXRpb24gYXJvdW5kIHRoZSBaLWF4aXMgYnkgZ2l2ZW4gYW5nbGVcIixcblx0XHRcdFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFtcImNvcyhwaGkgLyAyKSAtIGkgKiBzaW4ocGhpIC8gMilcIiwgMF0sXG5cdFx0XHRcdFswLCBcImNvcyhwaGkgLyAyKSArIGkgKiBzaW4ocGhpIC8gMilcIl1cblx0XHRcdF0sXG5cblx0XHRcdHBhcmFtczogW1wicGhpXCJdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJSWlwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJSWlwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wicGhpXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcInJ6XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlJ6XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInJ6XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJwaGlcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlJaXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHR1MToge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiU2luZ2xlLXF1Yml0IHJvdGF0aW9uIGFib3V0IHRoZSBaIGF4aXNcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwXSxcblx0XHRcdFx0WzAsXCJleHAoaSAqIGxhbWJkYSlcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtcImxhbWJkYVwiXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiVTFcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiUEhBU0VcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcImxhbWJkYVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1MVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wibGFtYmRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwgMF0sIFswLCBucC5leHAoMWoqcF9sYW1iZGEpXV1cIixcblx0XHRcdFx0XHRub3RUZnFTdXBwb3J0ZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcInBoYXNlU2hpZnRcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcImxhbWJkYVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInBoYXNlc2hpZnRcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcImxhbWJkYVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInBcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiUEhcIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHUyOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJTaW5nbGUtcXViaXQgcm90YXRpb24gYWJvdXQgdGhlIFgrWiBheGlzXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0W1wiMSAvIHNxcnQoMilcIiwgXCItZXhwKGkgKiBsYW1iZGEpICogMSAvIHNxcnQoMilcIl0sXG5cdFx0XHRcdFtcImV4cChpICogcGhpKSAqIDEgLyBzcXJ0KDIpXCIsIFwiZXhwKGkgKiBsYW1iZGEgKyBpICogcGhpKSAqIDEgLyBzcXJ0KDIpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXCJwaGlcIiwgXCJsYW1iZGFcIl0sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlUyXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcInUyXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJwaGlcIiwgXCJsYW1iZGFcIl0sXG5cdFx0XHRcdFx0ZGVmZ2F0ZTogXCJERUZHQVRFIHUyKCVwaGksICVsYW1iZGEpOlxcbiAgICAxL1NRUlQoMiksIC0xKkVYUChpKiVsYW1iZGEpKjEvU1FSVCgyKVxcbiAgICBFWFAoaSolcGhpKSoxL1NRUlQoMiksIEVYUChpKiVsYW1iZGEgKyBpKiVwaGkpKjEvU1FSVCgyKVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB5cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidTJcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaVwiLCBcImxhbWJkYVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEvcXVpbF9zcXJ0KDIpLC1xdWlsX2V4cCgxaipwX2xhbWJkYSkqMS9xdWlsX3NxcnQoMildLFtxdWlsX2V4cCgxaipwX3BoaSkqMS9xdWlsX3NxcnQoMikscXVpbF9leHAoMWoqcF9sYW1iZGErMWoqcF9waGkpKjEvcXVpbF9zcXJ0KDIpXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1MlwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMS9ucC5zcXJ0KDIpLCAtbnAuZXhwKDFqKnBfbGFtYmRhKSoxL25wLnNxcnQoMildLCBbbnAuZXhwKDFqKnBfcGhpKSoxL25wLnNxcnQoMiksIG5wLmV4cCgxaipwX2xhbWJkYSsxaipwX3BoaSkqMS9ucC5zcXJ0KDIpXV1cIixcblx0XHRcdFx0XHRub3RUZnFTdXBwb3J0ZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaVwiLCBcImxhbWJkYVwiXSxcblx0XHRcdFx0XHRtYXRyaXg6IFtbW1wiMS9zcXJ0KDIpXCIsIFwiMFwiXSwgW1wiLWNvcyhsYW1iZGEpL3NxcnQoMilcIiwgXCItc2luKGxhbWJkYSkvc3FydCgyKVwiXV0sXG5cdFx0XHRcdFx0XHRcdCBbW1wiY29zKHBoaSkvc3FydCgyKVwiLCBcInNpbihwaGkpL3NxcnQoMilcIl0sIFtcImNvcyhsYW1iZGErcGhpKS9zcXJ0KDIpXCIsIFwic2luKGxhbWJkYStwaGkpL3NxcnQoMilcIl1dXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaVwiLCBcImxhbWJkYVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEvbnAuc3FydCgyKSwgLW5wLmV4cCgxaipwX2xhbWJkYSkqMS9ucC5zcXJ0KDIpXSwgW25wLmV4cCgxaipwX3BoaSkqMS9ucC5zcXJ0KDIpLCBucC5leHAoMWoqcF9sYW1iZGErMWoqcF9waGkpKjEvbnAuc3FydCgyKV1dXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRtYXRyaXg6IFtbXCIxIC8gc3FydCgyKVwiLCBcIi1leHAoaSAqIGxhbWJkYSkgKiAxIC8gc3FydCgyKVwiXSxbXCJleHAoaSAqIHBoaSkgKiAxIC8gc3FydCgyKVwiLCBcImV4cChpICogbGFtYmRhICsgaSAqIHBoaSkgKiAxIC8gc3FydCgyKVwiXV0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxL25wLnNxcnQoMiksIC1ucC5leHAoMWoqcF9sYW1iZGEpKjEvbnAuc3FydCgyKV0sIFtucC5leHAoMWoqcF9waGkpKjEvbnAuc3FydCgyKSwgbnAuZXhwKDFqKnBfbGFtYmRhKzFqKnBfcGhpKSoxL25wLnNxcnQoMildXVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wicGhpXCIsIFwibGFtYmRhXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcInBoaVwiLCBsYW1iZGE6IFwibGFtYmRhXCIgfSB9XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHR1Mzoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiR2VuZXJpYyBzaW5nbGUtcXViaXQgcm90YXRpb24gZ2F0ZSB3aXRoIDMgRXVsZXIgYW5nbGVzXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WyBcImNvcyh0aGV0YS8yKVwiLCBcIi1leHAoaSAqIGxhbWJkYSkgKiBzaW4odGhldGEgLyAyKVwiIF0sXG5cdFx0XHRcdFsgXCJleHAoaSAqIHBoaSkgKiBzaW4odGhldGEgLyAyKVwiLCBcImV4cChpICogbGFtYmRhICsgaSAqIHBoaSkgKiBjb3ModGhldGEgLyAyKVwiIF1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtcInRoZXRhXCIsIFwicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJVM1wiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1M1wiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIiwgXCJwaGlcIiwgXCJsYW1iZGFcIl0sXG5cdFx0XHRcdFx0ZGVmZ2F0ZTogXCJERUZHQVRFIHUzKCV0aGV0YSwgJXBoaSwgJWxhbWJkYSk6XFxuICAgIENPUygldGhldGEvMiksIC0xKkVYUChpKiVsYW1iZGEpKlNJTigldGhldGEvMilcXG4gICAgRVhQKGkqJXBoaSkqU0lOKCV0aGV0YS8yKSwgRVhQKGkqJWxhbWJkYSArIGkqJXBoaSkqQ09TKCV0aGV0YS8yKVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB5cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidTNcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCIsIFwicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbcXVpbF9jb3MocF90aGV0YS8yKSwtcXVpbF9leHAoMWoqcF9sYW1iZGEpKnF1aWxfc2luKHBfdGhldGEvMildLFtxdWlsX2V4cCgxaipwX3BoaSkqcXVpbF9zaW4ocF90aGV0YS8yKSxxdWlsX2V4cCgxaipwX2xhbWJkYSsxaipwX3BoaSkqcXVpbF9jb3MocF90aGV0YS8yKV1dXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdG5hbWU6IFwidTNcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCIsIFwicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbbnAuY29zKHBfdGhldGEvMiksIC1ucC5leHAoMWoqcF9sYW1iZGEpKm5wLnNpbihwX3RoZXRhLzIpXSwgW25wLmV4cCgxaipwX3BoaSkqbnAuc2luKHBfdGhldGEvMiksIG5wLmV4cCgxaipwX2xhbWJkYSsxaipwX3BoaSkqbnAuY29zKHBfdGhldGEvMildXVwiLFxuXHRcdFx0XHRcdG5vdFRmcVN1cHBvcnRlZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidW5pdGFyeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIiwgXCJwaGlcIiwgXCJsYW1iZGFcIl0sXG5cdFx0XHRcdFx0bWF0cml4OiBbW1tcImNvcyh0aGV0YS8yKVwiLCBcIjBcIl0sIFtcIi1jb3MobGFtYmRhKSpzaW4odGhldGEvMilcIiwgXCItc2luKGxhbWJkYSkqc2luKHRoZXRhLzIpXCJdXSxcblx0XHRcdFx0XHRcdFx0IFtbXCJjb3MocGhpKSpzaW4odGhldGEvMilcIiwgXCJzaW4ocGhpKSpzaW4odGhldGEvMilcIl0sIFtcImNvcyhsYW1iZGErcGhpKSpjb3ModGhldGEvMilcIiwgXCJzaW4obGFtYmRhK3BoaSkqY29zKHRoZXRhLzIpXCJdXV1cblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiLCBcInBoaVwiLCBcImxhbWJkYVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbW25wLmNvcyhwX3RoZXRhLzIpLCAtbnAuZXhwKDFqKnBfbGFtYmRhKSpucC5zaW4ocF90aGV0YS8yKV0sIFtucC5leHAoMWoqcF9waGkpKm5wLnNpbihwX3RoZXRhLzIpLCBucC5leHAoMWoqcF9sYW1iZGErMWoqcF9waGkpKm5wLmNvcyhwX3RoZXRhLzIpXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG1hdHJpeDogW1sgXCJjb3ModGhldGEvMilcIiwgXCItZXhwKGkgKiBsYW1iZGEpICogc2luKHRoZXRhIC8gMilcIiBdLFsgXCJleHAoaSAqIHBoaSkgKiBzaW4odGhldGEgLyAyKVwiLCBcImV4cChpICogbGFtYmRhICsgaSAqIHBoaSkgKiBjb3ModGhldGEgLyAyKVwiIF1dLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbbnAuY29zKHBfdGhldGEvMiksIC1ucC5leHAoMWoqcF9sYW1iZGEpKm5wLnNpbihwX3RoZXRhLzIpXSwgW25wLmV4cCgxaipwX3BoaSkqbnAuc2luKHBfdGhldGEvMiksIG5wLmV4cCgxaipwX2xhbWJkYSsxaipwX3BoaSkqbnAuY29zKHBfdGhldGEvMildXVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIiwgXCJwaGlcIiwgXCJsYW1iZGFcIl1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRzOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJQSS8yIHJvdGF0aW9uIG92ZXIgWi1heGlzIChzeW5vbnltIGZvciBgcjJgKVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDBdLFxuXHRcdFx0XHRbMCxcImV4cChpICogcGkgLyAyKVwiXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlNcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiU1wiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlNcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwic0dhdGVcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlNcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWl7CvVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwic1wiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJTXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHR0OiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJQSS80IHJvdGF0aW9uIG92ZXIgWi1heGlzIChzeW5vbnltIGZvciBgcjRgKVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDBdLFxuXHRcdFx0XHRbMCxcImV4cChpICogcGkgLyA0KVwiXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlRcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiVFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlRcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidEdhdGVcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlRcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWl7CvFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJUXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRzZGc6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIigtUEkvMikgcm90YXRpb24gb3ZlciBaLWF4aXNcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwXSxcblx0XHRcdFx0WzAsXCJleHAoLWkgKiBwaSAvIDIpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiUyYjODIyNDtcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcInUxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcIi1waS8yXCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJ1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCItcGkvMlwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwicGhhc2VTaGlmdFwiLFxuXHRcdFx0XHRcdHBhcmFtczogeyB0aGV0YTogXCItTV9QSS8yXCIgfVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJ1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCItcGkvMlwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWl4twr1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInNpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlNcIixcblx0XHRcdFx0XHRkYWdnZXI6IHRydWVcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHR0ZGc6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIigtUEkvNCkgcm90YXRpb24gb3ZlciBaLWF4aXNcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwXSxcblx0XHRcdFx0WzAsXCJleHAoLWkgKiBwaSAvIDQpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiVCYjODIyNDtcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcInUxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcIi1waS80XCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJ1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCItcGkvNFwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwicGhhc2VTaGlmdFwiLFxuXHRcdFx0XHRcdHBhcmFtczogeyB0aGV0YTogXCItTV9QSS80XCIgfVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJ1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCItcGkvNFwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWl4twrxcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInRpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlRcIixcblx0XHRcdFx0XHRkYWdnZXI6IHRydWVcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRzd2FwOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJTd2FwcyB0aGUgc3RhdGUgb2YgdHdvIHF1Yml0cy5cIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwLDAsMF0sXG5cdFx0XHRcdFswLDAsMSwwXSxcblx0XHRcdFx0WzAsMSwwLDBdLFxuXHRcdFx0XHRbMCwwLDAsMV1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wieFwiLFwieFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiU1dQXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlNXQVBcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJTV0FQXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcInN3YXBcIixcblx0XHRcdFx0XHRmdW5jOiBcInZvaWQgc3dhcChRdXJlZyBxdWJpdHMsIGNvbnN0IGludCBxMSwgY29uc3QgaW50IHEyKSB7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGNvbnRyb2xsZWROb3QocXViaXRzLCBxMSwgcTIpO1xcblwiICtcblx0XHRcdFx0XHRcdCAgXCIgICAgY29udHJvbGxlZE5vdChxdWJpdHMsIHEyLCBxMSk7XFxuXCIgK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBjb250cm9sbGVkTm90KHF1Yml0cywgcTEsIHEyKTtcXG59XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJTV0FQXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVpcms6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlN3YXBcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInN3YXBcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiU1dBUFwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0c3Jzd2FwOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJTcXVhcmUgcm9vdCBvZiBzd2FwXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsMCwwLDBdLFxuXHRcdFx0XHRbMCxcIjAuNSAqICgxICsgaSlcIixcIjAuNSAqICgxIC0gaSlcIiwwXSxcblx0XHRcdFx0WzAsXCIwLjUgKiAoMSAtIGkpXCIsXCIwLjUgKiAoMSArIGkpXCIsMF0sXG5cdFx0XHRcdFswLDAsMCwxXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIixcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiJiN4MjIxQTtTV1BcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwic3Jzd2FwXCIsXG5cdFx0XHRcdFx0ZGVmZ2F0ZTogXCJERUZHQVRFIHNyc3dhcDpcXG4gICAgMSwgMCwgMCwgMFxcbiAgICAwLCAwLjUrMC41aSwgMC41LTAuNWksIDBcXG4gICAgMCwgMC41LTAuNWksIDAuNSswLjVpLCAwXFxuICAgIDAsIDAsIDAsIDFcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJTV0FQKiooMS8yKVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB5cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwic3Jzd2FwXCIsXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLDAsMCwwXSxbMCwwLjUgKiAoMSArIDFqKSwwLjUgKiAoMSAtIDFqKSwwXSxbMCwwLjUgKiAoMSAtIDFqKSwwLjUgKiAoMSArIDFqKSwwXSxbMCwwLDAsMV1dXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcInNyc3dhcFwiLFxuXHRcdFx0XHRcdGZ1bmM6IFwidm9pZCBzcnN3YXAoUXVyZWcgcXViaXRzLCBjb25zdCBpbnQgcTEsIGNvbnN0IGludCBxMikge1xcblwiICtcblx0XHRcdFx0XHRcdCAgXCIgICAgY29udHJvbGxlZE5vdChxdWJpdHMsIHEyLCBxMSk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIHJvdGF0ZVkocXViaXRzLCBxMiwgTV9QSS8yKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgcm90YXRlWihxdWJpdHMsIHEyLCBNX1BJLzE2KTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgY29udHJvbGxlZE5vdChxdWJpdHMsIHExLCBxMik7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIHJvdGF0ZVoocXViaXRzLCBxMSwgTV9QSS84KTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgcm90YXRlWihxdWJpdHMsIHEyLCAtTV9QSS84KTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgY29udHJvbGxlZE5vdChxdWJpdHMsIHExLCBxMik7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIHJvdGF0ZVoocXViaXRzLCBxMiwgTV9QSS8xNik7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIHJvdGF0ZVkocXViaXRzLCBxMiwgLU1fUEkvMik7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGNvbnRyb2xsZWROb3QocXViaXRzLCBxMiwgcTEpO1xcbn1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxYXNtOiB7XG5cdFx0XHRcdFx0ZXF1aXZhbGVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCIsIHBoaTogXCJwaS8yXCIsIGxhbWJkYTogXCItMSpwaVwiIH0sIHdpcmVzOiBbMF19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCIsIHBoaTogXCItMSpwaS8yXCIsIGxhbWJkYTogXCJwaVwiIH0sIHdpcmVzOiBbMV19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN4XCIsIHdpcmVzOiBbMCwgMV19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS80XCIsIHBoaTogXCItMSpwaS8yXCIsIGxhbWJkYTogXCItMSpwaS8yXCIgfSwgd2lyZXM6IFswXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcIjBcIiwgbGFtYmRhOiBcIjcqcGkvNFwiIH0sIHdpcmVzOiBbMV19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN4XCIsIHdpcmVzOiBbMCwgMV19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS80XCIsIHBoaTogXCItMSpwaVwiLCBsYW1iZGE6IFwiLTEqcGkvMlwiIH0sIHdpcmVzOiBbMF19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCIsIHBoaTogXCJwaVwiLCBsYW1iZGE6IFwicGkvMlwiIH0sIHdpcmVzOiBbMV19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN4XCIsIHdpcmVzOiBbMCwgMV19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCIsIHBoaTogXCIwXCIsIGxhbWJkYTogXCItMypwaS8yXCIgfSwgd2lyZXM6IFswXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcInBpLzJcIiwgbGFtYmRhOiBcIjBcIiB9LCB3aXJlczogWzFdfSxcblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRlcXVpdmFsZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcInBpLzJcIiwgbGFtYmRhOiBcIi0xKnBpXCIgfSwgd2lyZXM6IFswXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcIi0xKnBpLzJcIiwgbGFtYmRhOiBcInBpXCIgfSwgd2lyZXM6IFsxXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3hcIiwgd2lyZXM6IFswLCAxXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzRcIiwgcGhpOiBcIi0xKnBpLzJcIiwgbGFtYmRhOiBcIi0xKnBpLzJcIiB9LCB3aXJlczogWzBdfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJ1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwiMFwiLCBsYW1iZGE6IFwiNypwaS80XCIgfSwgd2lyZXM6IFsxXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3hcIiwgd2lyZXM6IFswLCAxXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzRcIiwgcGhpOiBcIi0xKnBpXCIsIGxhbWJkYTogXCItMSpwaS8yXCIgfSwgd2lyZXM6IFswXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcInBpXCIsIGxhbWJkYTogXCJwaS8yXCIgfSwgd2lyZXM6IFsxXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3hcIiwgd2lyZXM6IFswLCAxXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcIjBcIiwgbGFtYmRhOiBcIi0zKnBpLzJcIiB9LCB3aXJlczogWzBdfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJ1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwicGkvMlwiLCBsYW1iZGE6IFwiMFwiIH0sIHdpcmVzOiBbMV19LFxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidW5pdGFyeVwiLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwwLDAsMF0sWzAsMC41ICogKDEgKyAxaiksMC41ICogKDEgLSAxaiksMF0sWzAsMC41ICogKDEgLSAxaiksMC41ICogKDEgKyAxaiksMF0sWzAsMCwwLDFdXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJTUVJUU1dBUFwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0aXN3YXA6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlN3YXBzIHRoZSBzdGF0ZSBvZiB0d28gcXViaXRzLCBhcHBseWluZyBhIC1pIHBoYXNlIHRvIHExIHdoZW4gaXQgaXMgaW4gdGhlIDEgc3RhdGUgYW5kIGEgLWkgcGhhc2UgdG8gcTIgd2hlbiBpdCBpcyBpbiB0aGUgMCBzdGF0ZVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDAsMCwwXSxcblx0XHRcdFx0WzAsMCxcIjAraVwiLDBdLFxuXHRcdFx0XHRbMCxcIjAraVwiLDAsMF0sXG5cdFx0XHRcdFswLDAsMCwxXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIixcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiaVNXUFwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJJU1dBUFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcIklTV0FQXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdGVxdWl2YWxlbnQ6IFtcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJ1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwiLTEqcGkvMlwiLCBsYW1iZGE6IFwiLTEqcGlcIiB9LCB3aXJlczogWzBdfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJ1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwiLTEqcGkvMlwiLCBsYW1iZGE6IFwicGlcIiB9LCB3aXJlczogWzFdfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjeFwiLCB3aXJlczogWzAsIDFdfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJ1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwiMFwiLCBsYW1iZGE6IFwiMypwaS8yXCIgfSwgd2lyZXM6IFswXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcIjMqcGkvMlwiLCBsYW1iZGE6IFwiMFwiIH0sIHdpcmVzOiBbMV19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN4XCIsIHdpcmVzOiBbMCwgMV19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCIsIHBoaTogXCIwXCIsIGxhbWJkYTogXCIwXCIgfSwgd2lyZXM6IFswXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpXCIsIHBoaTogXCJwaS80XCIsIGxhbWJkYTogXCItMSpwaS80XCIgfSwgd2lyZXM6IFsxXX1cblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRlcXVpdmFsZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcIi0xKnBpLzJcIiwgbGFtYmRhOiBcIi0xKnBpXCIgfSwgd2lyZXM6IFswXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcIi0xKnBpLzJcIiwgbGFtYmRhOiBcInBpXCIgfSwgd2lyZXM6IFsxXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3hcIiwgd2lyZXM6IFswLCAxXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcIjBcIiwgbGFtYmRhOiBcIjMqcGkvMlwiIH0sIHdpcmVzOiBbMF19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCIsIHBoaTogXCIzKnBpLzJcIiwgbGFtYmRhOiBcIjBcIiB9LCB3aXJlczogWzFdfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjeFwiLCB3aXJlczogWzAsIDFdfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJ1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwiMFwiLCBsYW1iZGE6IFwiMFwiIH0sIHdpcmVzOiBbMF19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaVwiLCBwaGk6IFwicGkvNFwiLCBsYW1iZGE6IFwiLTEqcGkvNFwiIH0sIHdpcmVzOiBbMV19XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJpc3dhcFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJJU1dBUFwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0eHk6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlhZIGdhdGVcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwgMCwgMCwgMF0sXG5cdFx0XHRcdFswLCBcImNvcyhwaGkgLyAyKVwiLCBcImkgKiBzaW4ocGhpIC8gMilcIiwgMF0sXG5cdFx0XHRcdFswLCBcImkgKiBzaW4ocGhpIC8gMilcIiwgXCJjb3MocGhpIC8gMilcIiwgMF0sXG5cdFx0XHRcdFswLCAwLCAwLCAxXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW1wicGhpXCJdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiYm94XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlhZXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlhZXCIsXG5cdFx0XHRcdFx0XCJwYXJhbXNcIjogW1xuXHRcdFx0XHRcdFx0XCJwaGlcIlxuXHRcdFx0XHRcdF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdGVxdWl2YWxlbnQ6IFtcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyelwiLCBwYXJhbXM6IHsgcGhpOiBcIjMqcGkvNFwifSwgd2lyZXM6IFswXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ4XCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCJ9LCB3aXJlczogWzBdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnpcIiwgcGFyYW1zOiB7IHBoaTogXCItMypwaS80XCJ9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnhcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIn0sIHdpcmVzOiBbMV0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjelwiLCB3aXJlczogWzEsIDBdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnpcIiwgcGFyYW1zOiB7IHBoaTogXCItMSpwaS8yXCJ9LCB3aXJlczogWzBdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnhcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIn0sIHdpcmVzOiBbMF0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyelwiLCBwYXJhbXM6IHsgcGhpOiBcInBoaS8yXCJ9LCB3aXJlczogWzBdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnhcIiwgcGFyYW1zOiB7IHRoZXRhOiBcIi0xKnBpLzJcIn0sIHdpcmVzOiBbMF0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyelwiLCBwYXJhbXM6IHsgcGhpOiBcInBpLzJcIn0sIHdpcmVzOiBbMV0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyeFwiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwifSwgd2lyZXM6IFsxXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ6XCIsIHBhcmFtczogeyBwaGk6IFwicGhpLzJcIn0sIHdpcmVzOiBbMV0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyeFwiLCBwYXJhbXM6IHsgdGhldGE6IFwiLTEqcGkvMlwifSwgd2lyZXM6IFsxXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN6XCIsIHdpcmVzOiBbMSwgMF0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyelwiLCBwYXJhbXM6IHsgcGhpOiBcIi0xKnBpLzJcIn0sIHdpcmVzOiBbMF0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyeFwiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwifSwgd2lyZXM6IFswXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ6XCIsIHBhcmFtczogeyBwaGk6IFwicGkvNFwifSwgd2lyZXM6IFswXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ6XCIsIHBhcmFtczogeyBwaGk6IFwiLTEqcGkvMlwifSwgd2lyZXM6IFsxXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ4XCIsIHBhcmFtczogeyB0aGV0YTogXCItMSpwaS8yXCJ9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnpcIiwgcGFyYW1zOiB7IHBoaTogXCIzKnBpLzRcIn0sIHdpcmVzOiBbMV0gfSxcblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRlcXVpdmFsZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnpcIiwgcGFyYW1zOiB7IHBoaTogXCIzKnBpLzRcIn0sIHdpcmVzOiBbMF0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyeFwiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwifSwgd2lyZXM6IFswXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ6XCIsIHBhcmFtczogeyBwaGk6IFwiLTMqcGkvNFwifSwgd2lyZXM6IFsxXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ4XCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCJ9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3pcIiwgd2lyZXM6IFsxLCAwXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ6XCIsIHBhcmFtczogeyBwaGk6IFwiLTEqcGkvMlwifSwgd2lyZXM6IFswXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ4XCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCJ9LCB3aXJlczogWzBdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnpcIiwgcGFyYW1zOiB7IHBoaTogXCJwaGkvMlwifSwgd2lyZXM6IFswXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ4XCIsIHBhcmFtczogeyB0aGV0YTogXCItMSpwaS8yXCJ9LCB3aXJlczogWzBdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnpcIiwgcGFyYW1zOiB7IHBoaTogXCJwaS8yXCJ9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnhcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIn0sIHdpcmVzOiBbMV0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyelwiLCBwYXJhbXM6IHsgcGhpOiBcInBoaS8yXCJ9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnhcIiwgcGFyYW1zOiB7IHRoZXRhOiBcIi0xKnBpLzJcIn0sIHdpcmVzOiBbMV0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjelwiLCB3aXJlczogWzEsIDBdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnpcIiwgcGFyYW1zOiB7IHBoaTogXCItMSpwaS8yXCJ9LCB3aXJlczogWzBdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnhcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIn0sIHdpcmVzOiBbMF0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyelwiLCBwYXJhbXM6IHsgcGhpOiBcInBpLzRcIn0sIHdpcmVzOiBbMF0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyelwiLCBwYXJhbXM6IHsgcGhpOiBcIi0xKnBpLzJcIn0sIHdpcmVzOiBbMV0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyeFwiLCBwYXJhbXM6IHsgdGhldGE6IFwiLTEqcGkvMlwifSwgd2lyZXM6IFsxXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ6XCIsIHBhcmFtczogeyBwaGk6IFwiMypwaS80XCJ9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdG5hbWU6IFwieHlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsIDAsIDAsIDBdLCBbMCwgbnAuY29zKHBfcGhpLzIpLCAxaipucC5zaW4ocF9waGkvMiksIDBdLCBbMCwgMWoqbnAuc2luKHBfcGhpLzIpLCBucC5jb3MocF9waGkvMiksIDBdLCBbMCwgMCwgMCwgMV1dXCIsXG5cdFx0XHRcdFx0bm90VGZxU3VwcG9ydGVkOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwieHlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG1hdHJpeDogW1sxLCAwLCAwLCAwXSxbMCwgXCJjb3MocGhpIC8gMilcIiwgXCJpICogc2luKHBoaSAvIDIpXCIsIDBdLFswLCBcImkgKiBzaW4ocGhpIC8gMilcIiwgXCJjb3MocGhpIC8gMilcIiwgMF0sWzAsIDAsIDAsIDFdXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsIDAsIDAsIDBdLCBbMCwgbnAuY29zKHBfcGhpLzIpLCAxaipucC5zaW4ocF9waGkvMiksIDBdLCBbMCwgMWoqbnAuc2luKHBfcGhpLzIpLCBucC5jb3MocF9waGkvMiksIDBdLCBbMCwgMCwgMCwgMV1dXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJwaGlcIl1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRjeDoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiQ29udHJvbGxlZCBOT1QgKENOT1QpIGdhdGVcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwLDAsMF0sXG5cdFx0XHRcdFswLDEsMCwwXSxcblx0XHRcdFx0WzAsMCwwLDFdLFxuXHRcdFx0XHRbMCwwLDEsMF1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJub3RcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlhcIixcblx0XHRcdFx0cm9vdDogXCJ4XCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNOT1RcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJDTk9UXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbnRyb2xsZWROb3RcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNOT1RcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWFwiLFxuXHRcdFx0XHRcdGNvbnRyb2xsZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjbm90XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNOT1RcIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGN5OiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJDb250cm9sbGVkIFkgZ2F0ZSAoY29udHJvbGxlZCByb3RhdGlvbiBvdmVyIFktYXhpcyBieSBQSSlcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwLDAsMF0sXG5cdFx0XHRcdFswLDEsMCwwXSxcblx0XHRcdFx0WzAsMCwwLFwiLWlcIl0sXG5cdFx0XHRcdFswLDAsXCJpXCIsMF1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIllcIixcblx0XHRcdFx0cm9vdDogXCJ5XCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjb250cm9sbGVkUGF1bGlZXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcInlcIixcblx0XHRcdFx0XHRcdHR5cGU6IFwiY29udHJvbGxlZFwiLFxuXHRcdFx0XHRcdFx0bm90VGZxU3VwcG9ydGVkOiB0cnVlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjeVwiLFxuXHRcdFx0XHRcdGRlZmdhdGU6IFwiREVGR0FURSBjeTpcXG4gICAgMSwgMCwgMCwgMFxcbiAgICAwLCAxLCAwLCAwXFxuICAgIDAsIDAsIDAsIC1pXFxuICAgIDAsIDAsIGksIDBcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRweXF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcImN5XCIsXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLDAsMCwwXSxbMCwxLDAsMF0sWzAsMCwwLC0xal0sWzAsMCwxaiwwXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNvbnRyb2xsZWQgWVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1aXJrOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJZXCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcImN5XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIllcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y3o6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIkNvbnRyb2xsZWQgWiBnYXRlIChjb250cm9sbGVkIHJvdGF0aW9uIG92ZXIgWi1heGlzIGJ5IFBJKVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDAsMCwwXSxcblx0XHRcdFx0WzAsMSwwLDBdLFxuXHRcdFx0XHRbMCwwLDEsMF0sXG5cdFx0XHRcdFswLDAsMCwtMV1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJkb3RcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlpcIixcblx0XHRcdFx0cm9vdDogXCJ6XCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNaXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdG5hbWU6IFwiQ1pcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY29udHJvbGxlZFBoYXNlRmxpcFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiQ29udHJvbGxlZCBaXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVpcms6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlpcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY3pcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiQ1NJR05cIlxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y2g6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIkNvbnRyb2xsZWQgSGFkYW1hcmQgZ2F0ZVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDAsMCwwXSxcblx0XHRcdFx0WzAsMSwwLDBdLFxuXHRcdFx0XHRbMCwwLFwiMSAvIHNxcnQoMilcIixcIjEgLyBzcXJ0KDIpXCJdLFxuXHRcdFx0XHRbMCwwLFwiMSAvIHNxcnQoMilcIixcIi0xIC8gc3FydCgyKVwiXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJkb3RcIixcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiSFwiLFxuXHRcdFx0XHRyb290OiBcImhcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbnRyb2xsZWRVbml0YXJ5XCIsXG5cdFx0XHRcdFx0bWF0cml4OiBbW1tcIjEvc3FydCgyKVwiLCBcIjBcIl0sIFtcIjEvc3FydCgyKVwiLCBcIjBcIl1dLFxuXHRcdFx0XHRcdFx0XHQgW1tcIjEvc3FydCgyKVwiLCBcIjBcIl0sIFtcIi0xL3NxcnQoMilcIiwgXCIwXCJdXV1cblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcImhcIixcblx0XHRcdFx0XHRcdHR5cGU6IFwiY29udHJvbGxlZFwiLFxuXHRcdFx0XHRcdFx0bm90VGZxU3VwcG9ydGVkOiB0cnVlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjaFwiLFx0XHRcdFx0XHRcblx0XHRcdFx0XHRkZWZnYXRlOiBcIkRFRkdBVEUgY2g6XFxuICAgIDEsIDAsIDAsIDBcXG4gICAgMCwgMSwgMCwgMFxcbiAgICAwLCAwLCAwLjcwNzEwNjc4MTE4NjU0NzUsIDAuNzA3MTA2NzgxMTg2NTQ3NVxcbiAgICAwLCAwLCAwLjcwNzEwNjc4MTE4NjU0NzUsIC0wLjcwNzEwNjc4MTE4NjU0NzVcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRweXF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNoXCIsXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLDAsMCwwXSxbMCwxLDAsMF0sWzAsMCwxL25wLnNxcnQoMiksMS9ucC5zcXJ0KDIpXSxbMCwwLDEvbnAuc3FydCgyKSwtMS9ucC5zcXJ0KDIpXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNvbnRyb2xsZWQgSFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1aXJrOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJIXCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwwLDEvbnAuc3FydCgyKSwxL25wLnNxcnQoMildLFswLDAsMS9ucC5zcXJ0KDIpLC0xL25wLnNxcnQoMildXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJIXCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGNzcm46IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIkNvbnRyb2xsZWQgc3F1YXJlIHJvb3Qgb2YgTk9UXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsMCwwLDBdLFxuXHRcdFx0XHRbMCwxLDAsMF0sXG5cdFx0XHRcdFswLDAsXCIwLjUrMC41aVwiLFwiMC41LTAuNWlcIl0sXG5cdFx0XHRcdFswLDAsXCIwLjUtMC41aVwiLFwiMC41KzAuNWlcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIiYjeDIyMUE7WFwiLFxuXHRcdFx0XHRyb290OiBcInNyblwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY29udHJvbGxlZFVuaXRhcnlcIixcblx0XHRcdFx0XHRtYXRyaXg6IFtbW1wiLTEvc3FydCgyKVwiLCBcIjBcIl0sIFtcIi0xL3NxcnQoMilcIiwgXCIwXCJdXSxcblx0XHRcdFx0XHRcdFx0IFtbXCItMS9zcXJ0KDIpXCIsIFwiMFwiXSwgW1wiMS9zcXJ0KDIpXCIsIFwiMFwiXV1dXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJzcm5cIixcblx0XHRcdFx0XHRcdHR5cGU6IFwiY29udHJvbGxlZFwiLFxuXHRcdFx0XHRcdFx0bm90VGZxU3VwcG9ydGVkOiB0cnVlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjc3JuXCIsXG5cdFx0XHRcdFx0ZGVmZ2F0ZTogXCJERUZHQVRFIGNzcm46XFxuICAgIDEsIDAsIDAsIDBcXG4gICAgMCwgMSwgMCwgMFxcbiAgICAwLCAwLCAwLjUrMC41aSwgMC41LTAuNWlcXG4gICAgMCwgMCwgMC41LTAuNWksIDAuNSswLjVpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiY3N4XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjc3hcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRweXF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNzcm5cIixcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwwLDAuNSswLjVqLDAuNS0wLjVqXSxbMCwwLDAuNS0wLjVqLDAuNSswLjVqXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwwLDAuNSswLjVqLDAuNS0wLjVqXSxbMCwwLDAuNS0wLjVqLDAuNSswLjVqXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG1hdHJpeDogW1sxLDAsMCwwXSxbMCwxLDAsMF0sWzAsMCxcIjAuNSswLjVpXCIsXCIwLjUtMC41aVwiXSxbMCwwLFwiMC41LTAuNWlcIixcIjAuNSswLjVpXCJdXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwwLDAuNSswLjVqLDAuNS0wLjVqXSxbMCwwLDAuNS0wLjVqLDAuNSswLjVqXV1cIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdG1zOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJNw7hsbWVyLVPDuHJlbnNlbiBnYXRlXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0W1wiY29zKHRoZXRhKVwiLCAwLCAwLCBcIi1pKnNpbih0aGV0YSlcIl0sXG5cblx0XHRcdFx0WzAsIFwiY29zKHRoZXRhKVwiLCBcIi1pKnNpbih0aGV0YSlcIiwgMF0sXG5cblx0XHRcdFx0WzAsIFwiLWkqc2luKHRoZXRhKVwiLCBcImNvcyh0aGV0YSlcIiwgMF0sXG5cblx0XHRcdFx0W1wiLWkqc2luKHRoZXRhKVwiLCAwLCAwLCBcImNvcyh0aGV0YSlcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiY2lyY2xlXCIsXCJjaXJjbGVcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlhYXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIm1zXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXSxcblx0XHRcdFx0XHRkZWZnYXRlOiBcIkRFRkdBVEUgbXMoJXRoZXRhKTpcXG4gICAgQ09TKCV0aGV0YSksIDAsIDAsIC1pKlNJTigldGhldGEpXFxuICAgIDAsIENPUygldGhldGEpLCAtaSpTSU4oJXRoZXRhKSwgMFxcbiAgICAwLCAtaSpTSU4oJXRoZXRhKSwgQ09TKCV0aGV0YSksIDBcXG4gICAgLWkqU0lOKCV0aGV0YSksIDAsIDAsIENPUygldGhldGEpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cHlxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJtc1wiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiWyBbcXVpbF9jb3MocF90aGV0YSksIDAsIDAsIC0xaipxdWlsX3NpbihwX3RoZXRhKV0sIFswLCBxdWlsX2NvcyhwX3RoZXRhKSwgLTFqKnF1aWxfc2luKHBfdGhldGEpLCAwXSwgWzAsIC0xaipxdWlsX3NpbihwX3RoZXRhKSwgcXVpbF9jb3MocF90aGV0YSksIDBdLCBbLTFqKnF1aWxfc2luKHBfdGhldGEpLCAwLCAwLCBxdWlsX2NvcyhwX3RoZXRhKV0gXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcIm1zXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcIm1zXCIsXG5cdFx0XHRcdFx0Ly9AVE9ETyBhZGQgZnVuY3Rpb25cblx0XHRcdFx0XHRmdW5jOiBcIlRPRE9cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJyeHhcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInJ4eFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidW5pdGFyeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1tucC5jb3MocF90aGV0YSksIDAsIDAsIC0xaipucC5zaW4ocF90aGV0YSldLCBbMCwgbnAuY29zKHBfdGhldGEpLCAtMWoqbnAuc2luKHBfdGhldGEpLCAwXSwgWzAsIC0xaipucC5zaW4ocF90aGV0YSksIG5wLmNvcyhwX3RoZXRhKSwgMF0sIFstMWoqbnAuc2luKHBfdGhldGEpLCAwLCAwLCBucC5jb3MocF90aGV0YSldIF1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG1hdHJpeDogW1tcImNvcyh0aGV0YSlcIiwgMCwgMCwgXCItaSpzaW4odGhldGEpXCJdLFswLCBcImNvcyh0aGV0YSlcIiwgXCItaSpzaW4odGhldGEpXCIsIDBdLFswLCBcIi1pKnNpbih0aGV0YSlcIiwgXCJjb3ModGhldGEpXCIsIDBdLFtcIi1pKnNpbih0aGV0YSlcIiwgMCwgMCwgXCJjb3ModGhldGEpXCJdXSxcblx0XHRcdFx0XHRhcnJheTogXCJbW25wLmNvcyhwX3RoZXRhKSwgMCwgMCwgLTFqKm5wLnNpbihwX3RoZXRhKV0sIFswLCBucC5jb3MocF90aGV0YSksIC0xaipucC5zaW4ocF90aGV0YSksIDBdLCBbMCwgLTFqKm5wLnNpbihwX3RoZXRhKSwgbnAuY29zKHBfdGhldGEpLCAwXSwgWy0xaipucC5zaW4ocF90aGV0YSksIDAsIDAsIG5wLmNvcyhwX3RoZXRhKV0gXVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0XG5cdFx0eXk6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIllZIGdhdGVcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbXCJjb3ModGhldGEpXCIsIDAsIDAsIFwiaSpzaW4odGhldGEpXCJdLFxuXG5cdFx0XHRcdFswLCBcImNvcyh0aGV0YSlcIiwgXCItaSpzaW4odGhldGEpXCIsIDBdLFxuXG5cdFx0XHRcdFswLCBcIi1pKnNpbih0aGV0YSlcIiwgXCJjb3ModGhldGEpXCIsIDBdLFxuXG5cdFx0XHRcdFtcImkqc2luKHRoZXRhKVwiLCAwLCAwLCBcImNvcyh0aGV0YSlcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiY2lyY2xlXCIsXCJjaXJjbGVcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIllZXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcInl5XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXSxcblx0XHRcdFx0XHRkZWZnYXRlOiBcIkRFRkdBVEUgeXkoJXRoZXRhKTpcXG4gICAgQ09TKCV0aGV0YSksIDAsIDAsIGkqU0lOKCV0aGV0YSlcXG4gICAgMCwgQ09TKCV0aGV0YSksIC1pKlNJTigldGhldGEpLCAwXFxuICAgIDAsIC1pKlNJTigldGhldGEpLCBDT1MoJXRoZXRhKSwgMFxcbiAgICBpKlNJTigldGhldGEpLCAwLCAwLCBDT1MoJXRoZXRhKVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcIllZXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cHlxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ5eVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiWyBbcXVpbF9jb3MocF90aGV0YSksIDAsIDAsIDFqKnF1aWxfc2luKHBfdGhldGEpXSwgWzAsIHF1aWxfY29zKHBfdGhldGEpLCAtMWoqcXVpbF9zaW4ocF90aGV0YSksIDBdLCBbMCwgLTFqKnF1aWxfc2luKHBfdGhldGEpLCBxdWlsX2NvcyhwX3RoZXRhKSwgMF0sIFsxaipxdWlsX3NpbihwX3RoZXRhKSwgMCwgMCwgcXVpbF9jb3MocF90aGV0YSldIF1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwieXlcIixcblx0XHRcdFx0XHQvL0BUT0RPIGFkZCBmdW5jdGlvblxuXHRcdFx0XHRcdGZ1bmM6IFwiVE9ET1wiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwieXlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bWF0cml4OiBbW1wiY29zKHRoZXRhKVwiLCAwLCAwLCBcImkqc2luKHRoZXRhKVwiXSxbMCwgXCJjb3ModGhldGEpXCIsIFwiLWkqc2luKHRoZXRhKVwiLCAwXSxbMCwgXCItaSpzaW4odGhldGEpXCIsIFwiY29zKHRoZXRhKVwiLCAwXSxbXCJpKnNpbih0aGV0YSlcIiwgMCwgMCwgXCJjb3ModGhldGEpXCJdXSxcblx0XHRcdFx0XHRhcnJheTogXCJbW25wLmNvcyhwX3RoZXRhKSwgMCwgMCwgMWoqbnAuc2luKHBfdGhldGEpXSwgWzAsIG5wLmNvcyhwX3RoZXRhKSwgLTFqKm5wLnNpbihwX3RoZXRhKSwgMF0sIFswLCAtMWoqbnAuc2luKHBfdGhldGEpLCBucC5jb3MocF90aGV0YSksIDBdLCBbMWoqbnAuc2luKHBfdGhldGEpLCAwLCAwLCBucC5jb3MocF90aGV0YSldIF1cIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcInJ5eVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwicnl5XCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHR6ejoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiUGFyYW1ldHJpYyAyLXF1Yml0IHJvdGF0aW9uIGFib3V0IFpaXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WyBcImV4cCgtaSAqIHRoZXRhIC8gMilcIiwgMCwgMCwgMCBdLFxuXHRcdFx0XHRbIDAsIFwiZXhwKGkgKiB0aGV0YSAvIDIpXCIsIDAsIDAgIF0sXG5cdFx0XHRcdFsgMCwgMCwgXCJleHAoaSAqIHRoZXRhIC8gMilcIiwgMCAgXSxcblx0XHRcdFx0WyAwLCAwLCAwLCBcImV4cCgtaSAqIHRoZXRhIC8gMilcIiBdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImNpcmNsZVwiLFwiY2lyY2xlXCJdLFxuXHRcdFx0XHRsYWJlbDogXCJaWlwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ6elwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRcdFx0ZGVmZ2F0ZTogXCJERUZHQVRFIHp6KCV0aGV0YSk6XFxuICAgIEVYUCgtaSAqICV0aGV0YSAvIDIpLCAwLCAwLCAwXFxuICAgIDAsIEVYUChpICogJXRoZXRhIC8gMiksIDAsIDBcXG4gICAgMCwgMCwgRVhQKGkgKiAldGhldGEgLyAyKSwgMFxcbiAgICAwLCAwLCAwLCBFWFAoLWkgKiAldGhldGEgLyAyKVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB5cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwienpcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIlsgWyBxdWlsX2V4cCgtMWogKiBwX3RoZXRhIC8gMiksIDAsIDAsIDAgXSwgWyAwLCBxdWlsX2V4cCgxaiAqIHBfdGhldGEgLyAyKSwgMCwgMF0sIFsgMCwgMCwgcXVpbF9leHAoMWogKiBwX3RoZXRhIC8gMiksIDAgXSwgWyAwLCAwLCAwLCBxdWlsX2V4cCgtMWogKiBwX3RoZXRhIC8gMikgXSBdXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwicnp6XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJyenpcIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGNyMjoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiQ29udHJvbGxlZCBQSS8yIHJvdGF0aW9uIG92ZXIgWi1heGlzXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsMCwwLDBdLFxuXHRcdFx0XHRbMCwxLDAsMF0sXG5cdFx0XHRcdFswLDAsMSwwXSxcblx0XHRcdFx0WzAsMCwwLFwiZXhwKGkgKiBwaSAvIDIpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImRvdFwiLFwiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJaJiN4MUQ2RDE7LzJcIixcblx0XHRcdFx0cm9vdDogXCJyMlwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcInBpLzJcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcImN1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCJwaS8yXCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjb250cm9sbGVkUGhhc2VTaGlmdFwiLFxuXHRcdFx0XHRcdHBhcmFtczoge3RoZXRhOlwiTV9QSS8yXCJ9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcImN1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCJwaS8yXCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFhc206IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN1MVwiLCBwYXJhbXM6IHsgbGFtYmRhOiBcInBpLzJcIiB9fVxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UxXCIsIHBhcmFtczogeyBsYW1iZGE6IFwicGkvMlwiIH19XG5cdFx0XHRcdFx0XVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWl7CvVwiLFxuXHRcdFx0XHRcdGNvbnRyb2xsZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLCAwLCAwLCAwXSwgWzAsIDEsIDAsIDBdLCBbMCwgMCwgMSwgMF0sIFswLCAwLCAwLCBucC5leHAoMWogKiBucC5waSAvIDIpXSBdXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlNcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y3I0OiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJDb250cm9sbGVkIFBJLzQgcm90YXRpb24gb3ZlciBaLWF4aXNcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwLDAsMF0sXG5cdFx0XHRcdFswLDEsMCwwXSxcblx0XHRcdFx0WzAsMCwxLDBdLFxuXHRcdFx0XHRbMCwwLDAsXCJleHAoaSAqIHBpIC8gNClcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlomI3gxRDZEMTsvNFwiLFxuXHRcdFx0XHRyb290OiBcInI0XCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJjdTFcIixcblx0XHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0XHRsYW1iZGE6IFwicGkvNFwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcInBpLzRcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbnRyb2xsZWRQaGFzZVNoaWZ0XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiB7dGhldGE6XCJNX1BJLzRcIn1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcInBpLzRcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UxXCIsIHBhcmFtczogeyBsYW1iZGE6IFwicGkvNFwiIH19XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IFtcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjdTFcIiwgcGFyYW1zOiB7IGxhbWJkYTogXCJwaS80XCIgfX1cblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWl7CvFwiLFxuXHRcdFx0XHRcdGNvbnRyb2xsZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLCAwLCAwLCAwXSwgWzAsIDEsIDAsIDBdLCBbMCwgMCwgMSwgMF0sIFswLCAwLCAwLCBucC5leHAoMWogKiBucC5waSAvIDQpXSBdXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlRcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y3I4OiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJDb250cm9sbGVkIFBJLzggcm90YXRpb24gb3ZlciBaLWF4aXNcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwLDAsMF0sXG5cdFx0XHRcdFswLDEsMCwwXSxcblx0XHRcdFx0WzAsMCwxLDBdLFxuXHRcdFx0XHRbMCwwLDAsXCJleHAoaSAqIHBpIC8gOClcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlomI3gxRDZEMTsvOFwiLFxuXHRcdFx0XHRyb290OiBcInI4XCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJjdTFcIixcblx0XHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0XHRsYW1iZGE6IFwicGkvOFwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcInBpLzhcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbnRyb2xsZWRQaGFzZVNoaWZ0XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiB7dGhldGE6XCJNX1BJLzhcIn1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcInBpLzhcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UxXCIsIHBhcmFtczogeyBsYW1iZGE6IFwicGkvOFwiIH19XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IFtcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjdTFcIiwgcGFyYW1zOiB7IGxhbWJkYTogXCJwaS84XCIgfX1cblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWl7ihZtcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidW5pdGFyeVwiLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwgMCwgMCwgMF0sIFswLCAxLCAwLCAwXSwgWzAsIDAsIDEsIDBdLCBbMCwgMCwgMCwgbnAuZXhwKDFqICogbnAucGkgLyA4KV0gXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bWF0cml4OiBbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwwLDEsMF0sWzAsMCwwLFwiZXhwKGkgKiBwaSAvIDgpXCJdXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsIDAsIDAsIDBdLCBbMCwgMSwgMCwgMF0sIFswLCAwLCAxLCAwXSwgWzAsIDAsIDAsIG5wLmV4cCgxaiAqIG5wLnBpIC8gOCldIF1cIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGNyeDoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiQ29udHJvbGxlZCByb3RhdGlvbiBhcm91bmQgdGhlIFgtYXhpcyBieSBnaXZlbiBhbmdsZVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsgMSwgMCwgMCwgMCBdLFxuXHRcdFx0XHRbIDAsIDEsIDAsIDAgXSxcblx0XHRcdFx0WyAwLCAwLCBcImNvcyh0aGV0YSAvIDIpXCIsIFwiLWkgKiBzaW4odGhldGEgLyAyKVwiIF0sXG5cdFx0XHRcdFsgMCwgMCwgXCItaSAqIHNpbih0aGV0YSAvIDIpXCIsIFwiY29zKHRoZXRhIC8gMilcIiBdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImRvdFwiLFwiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJSWFwiLFxuXHRcdFx0XHRyb290OiBcInJ4XCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNyeFwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRcdFx0ZGVmZ2F0ZTogXCJERUZHQVRFIGNyeCgldGhldGEpOlxcbiAgICAxLCAwLCAwLCAwXFxuICAgIDAsIDEsIDAsIDBcXG4gICAgMCwgMCwgQ09TKCV0aGV0YS8yKSwgLWkqU0lOKCV0aGV0YS8yKVxcbiAgICAwLCAwLCAtaSpTSU4oJXRoZXRhLzIpLCBDT1MoJXRoZXRhLzIpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcInJ4XCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHsgdGhldGE6IFwidGhldGFcIiB9LFxuXHRcdFx0XHRcdFx0dHlwZTogXCJjb250cm9sbGVkXCIsXG5cdFx0XHRcdFx0XHRub3RUZnFTdXBwb3J0ZWQ6IHRydWVcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB5cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY3J4XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWyAxLCAwLCAwLCAwIF0sIFsgMCwgMSwgMCwgMCBdLCBbIDAsIDAsIHF1aWxfY29zKHBfdGhldGEgLyAyKSwgLTFqKnF1aWxfc2luKHBfdGhldGEgLyAyKSBdLCBbIDAsIDAsIC0xaipxdWlsX3NpbihwX3RoZXRhIC8gMiksIHF1aWxfY29zKHBfdGhldGEgLyAyKSBdXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjb250cm9sbGVkVW5pdGFyeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRcdFx0bWF0cml4OiBbW1tcImNvcyh0aGV0YS8yKVwiLCBcIjBcIl0sIFtcIjBcIiwgXCItc2luKHRoZXRhLzIpXCJdXSxcblx0XHRcdFx0XHRcdFx0IFtbXCIwXCIsIFwiLXNpbih0aGV0YS8yKVwiXSwgW1wiY29zKHRoZXRhLzIpXCIsIFwiMFwiXV1dXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiQ29udHJvbGxlZCBSeFwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UzXCIsIHBhcmFtczogeyB0aGV0YTogXCJ0aGV0YVwiLCBwaGk6IFwiLTEqcGkvMlwiLCBsYW1iZGE6IFwicGkvMlwiIH19LFxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UzXCIsIHBhcmFtczogeyB0aGV0YTogXCJ0aGV0YVwiLCBwaGk6IFwiLTEqcGkvMlwiLCBsYW1iZGE6IFwicGkvMlwiIH19LFxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidW5pdGFyeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sgMSwgMCwgMCwgMCBdLCBbIDAsIDEsIDAsIDAgXSwgWyAwLCAwLCBucC5jb3MocF90aGV0YSAvIDIpLCAtMWoqbnAuc2luKHBfdGhldGEgLyAyKSBdLCBbIDAsIDAsIC0xaipucC5zaW4ocF90aGV0YSAvIDIpLCBucC5jb3MocF90aGV0YSAvIDIpIF1dXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlJYXCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGNyeToge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiQ29udHJvbGxlZCByb3RhdGlvbiBhcm91bmQgdGhlIFktYXhpcyBieSBnaXZlbiBhbmdsZVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsgMSwgMCwgMCwgMCBdLFxuXHRcdFx0XHRbIDAsIDEsIDAsIDAgXSxcblx0XHRcdFx0WyAwLCAwLCBcImNvcyh0aGV0YSAvIDIpXCIsIFwiLTEgKiBzaW4odGhldGEgLyAyKVwiIF0sXG5cdFx0XHRcdFsgMCwgMCwgXCJzaW4odGhldGEgLyAyKVwiLCBcImNvcyh0aGV0YSAvIDIpXCIgXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJkb3RcIixcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiUllcIixcblx0XHRcdFx0cm9vdDogXCJyeVwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjcnlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdLFxuXHRcdFx0XHRcdGRlZmdhdGU6IFwiREVGR0FURSBjcnkoJXRoZXRhKTpcXG4gICAgMSwgMCwgMCwgMFxcbiAgICAwLCAxLCAwLCAwXFxuICAgIDAsIDAsIENPUygldGhldGEvMiksIC0xKlNJTigldGhldGEvMilcXG4gICAgMCwgMCwgU0lOKCV0aGV0YS8yKSwgQ09TKCV0aGV0YS8yKVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJyeVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7IHRoZXRhOiBcInRoZXRhXCIgfSxcblx0XHRcdFx0XHRcdHR5cGU6IFwiY29udHJvbGxlZFwiLFxuXHRcdFx0XHRcdFx0bm90VGZxU3VwcG9ydGVkOiB0cnVlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRweXF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNyeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sgMSwgMCwgMCwgMCBdLFsgMCwgMSwgMCwgMCBdLFsgMCwgMCwgcXVpbF9jb3MocF90aGV0YSAvIDIpLCAtMSpxdWlsX3NpbihwX3RoZXRhIC8gMikgXSxbIDAsIDAsIHF1aWxfc2luKHBfdGhldGEgLyAyKSwgcXVpbF9jb3MocF90aGV0YSAvIDIpIF1dXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbnRyb2xsZWRVbml0YXJ5XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXSxcblx0XHRcdFx0XHRtYXRyaXg6IFtbW1wiY29zKHRoZXRhLzIpXCIsIFwiMFwiXSwgW1wiLXNpbih0aGV0YS8yKVwiLCBcIjBcIl1dLFxuXHRcdFx0XHRcdFx0XHQgW1tcInNpbih0aGV0YS8yKVwiLCBcIjBcIl0sIFtcImNvcyh0aGV0YS8yKVwiLCBcIjBcIl1dXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNvbnRyb2xsZWQgUnlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFhc206IHtcblx0XHRcdFx0XHRlcXVpdmFsZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInRoZXRhLzJcIiwgcGhpOiBcIjBcIiwgbGFtYmRhOiBcIjBcIiB9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3hcIiwgd2lyZXM6IFswLCAxXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCItMSp0aGV0YSAvIDJcIiwgcGhpOiBcIjBcIiwgbGFtYmRhOiBcIjBcIiB9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3hcIiwgd2lyZXM6IFswLCAxXSB9XG5cdFx0XHRcdFx0XVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRlcXVpdmFsZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInRoZXRhLzJcIiwgcGhpOiBcIjBcIiwgbGFtYmRhOiBcIjBcIiB9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3hcIiwgd2lyZXM6IFswLCAxXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCItMSp0aGV0YSAvIDJcIiwgcGhpOiBcIjBcIiwgbGFtYmRhOiBcIjBcIiB9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3hcIiwgd2lyZXM6IFswLCAxXSB9XG5cdFx0XHRcdFx0XVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbIDEsIDAsIDAsIDAgXSxbIDAsIDEsIDAsIDAgXSxbIDAsIDAsIG5wLmNvcyhwX3RoZXRhIC8gMiksIC0xKm5wLnNpbihwX3RoZXRhIC8gMikgXSxbIDAsIDAsIG5wLnNpbihwX3RoZXRhIC8gMiksIG5wLmNvcyhwX3RoZXRhIC8gMikgXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiUllcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y3J6OiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJDb250cm9sbGVkIHJvdGF0aW9uIGFyb3VuZCB0aGUgWi1heGlzIGJ5IGdpdmVuIGFuZ2xlXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsMCwwLDBdLFxuXHRcdFx0XHRbMCwxLDAsMF0sXG5cdFx0XHRcdFswLCAwLCBcImNvcyhwaGkgLyAyKSAtIGkgKiBzaW4ocGhpIC8gMilcIiwgMF0sXG5cdFx0XHRcdFswLCAwLCAwLCBcImNvcyhwaGkgLyAyKSArIGkgKiBzaW4ocGhpIC8gMilcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtcInBoaVwiXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImRvdFwiLFwiZG90XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJSWlwiLFxuXHRcdFx0XHRyb290OiBcInJ6XCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNyelwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wicGhpXCJdLFxuXHRcdFx0XHRcdGRlZmdhdGU6IFwiREVGR0FURSBjcnooJXBoaSk6XFxuICAgIDEsIDAsIDAsIDBcXG4gICAgMCwgMSwgMCwgMFxcbiAgICAwLCAwLCBDT1MoJXBoaSAvIDIpIC0gaSAqIFNJTiglcGhpIC8gMiksIDBcXG4gICAgMCwgMCwgMCwgQ09TKCVwaGkgLyAyKSArIGkgKiBTSU4oJXBoaSAvIDIpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cHlxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjcnpcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsIDAsIDAsIDBdLCBbMCwgMSwgMCwgMF0sIFswLCAwLCBxdWlsX2NvcyhwX3BoaSAvIDIpIC0gMWogKiBxdWlsX3NpbihwX3BoaSAvIDIpLCAwXSwgWzAsIDAsIDAsIHF1aWxfY29zKHBfcGhpIC8gMikgKyAxaiAqIHF1aWxfc2luKHBfcGhpIC8gMildXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJyelwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7IHBoaTogXCJwaGlcIiB9LFxuXHRcdFx0XHRcdFx0dHlwZTogXCJjb250cm9sbGVkXCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjb250cm9sbGVkUm90YXRlWlwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJDb250cm9sbGVkIFJ6XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJwaGlcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJwaGlcIl0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLCAwLCAwLCAwXSwgWzAsIDEsIDAsIDBdLCBbMCwgMCwgbnAuY29zKHBfcGhpIC8gMikgLSAxaiAqIG5wLnNpbihwX3BoaSAvIDIpLCAwXSwgWzAsIDAsIDAsIG5wLmNvcyhwX3BoaSAvIDIpICsgMWogKiBucC5zaW4ocF9waGkgLyAyKV1dXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlJaXCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGN1MToge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiQ29udHJvbGxlZCByb3RhdGlvbiBhYm91dCB0aGUgWiBheGlzXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsMCwwLDBdLFxuXHRcdFx0XHRbMCwxLDAsMF0sXG5cdFx0XHRcdFswLDAsMSwwXSxcblx0XHRcdFx0WzAsMCwwLFwiZXhwKGkgKiBsYW1iZGEpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXCJsYW1iZGFcIl0sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJkb3RcIixcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiQ1UxXCIsXG5cdFx0XHRcdHJvb3Q6IFwidTFcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiQ1BIQVNFXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJsYW1iZGFcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJsYW1iZGFcIl0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLCAwLCAwLCAwXSwgWzAsIDEsIDAsIDBdLCBbMCwgMCwgMSwgMF0sIFswLCAwLCAwLCBucC5leHAoMWoqcF9sYW1iZGEpXV1cIixcblx0XHRcdFx0XHRub3RUZnFTdXBwb3J0ZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbnRyb2xsZWRQaGFzZVNoaWZ0XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcImxhbWJkYVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsIDAsIDAsIDBdLCBbMCwgMSwgMCwgMF0sIFswLCAwLCAxLCAwXSwgWzAsIDAsIDAsIG5wLmV4cCgxaipwX2xhbWJkYSldXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJQSFwiLFxuXHRcdFx0XHRcdGNvbnRyb2xsZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjcFwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y3UyOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJDb250cm9sbGVkIHJvdGF0aW9uIGFib3V0IHRoZSBYK1ogYXhpc1wiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsgMSwgMCwgMCwgMCBdLFxuXHRcdFx0XHRbIDAsIDEsIDAsIDAgXSxcblx0XHRcdFx0WyAwLCAwLCBcIjEgLyBzcXJ0KDIpXCIsIFwiLWV4cChpICogbGFtYmRhKSAqIDEgLyBzcXJ0KDIpXCIgXSxcblx0XHRcdFx0WyAwLCAwLCBcImV4cChpICogcGhpKSAqIDEgLyBzcXJ0KDIpXCIsIFwiZXhwKGkgKiBsYW1iZGEgKyBpICogcGhpKSAqIDEgLyBzcXJ0KDIpXCIgXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW1wicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIkNVMlwiLFxuXHRcdFx0XHRyb290OiBcInUyXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcImN1MlwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0XHRcdGRlZmdhdGU6IFwiREVGR0FURSBjdTIoJXBoaSwgJWxhbWJkYSk6XFxuICAgIDEsIDAsIDAsIDBcXG4gICAgMCwgMSwgMCwgMFxcbiAgICAwLCAwLCAxL1NRUlQoMiksIC0xKkVYUChpKiVsYW1iZGEpKjEvU1FSVCgyKVxcbiAgICAwLCAwLCBFWFAoaSolcGhpKSoxL1NRUlQoMiksIEVYUChpKiVsYW1iZGEgKyBpKiVwaGkpKjEvU1FSVCgyKVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB5cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY3UyXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJwaGlcIiwgXCJsYW1iZGFcIl0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLDAsMCwwXSxbMCwxLDAsMF0sWzAsIDAsIDEvcXVpbF9zcXJ0KDIpLCAtcXVpbF9leHAoMWoqcF9sYW1iZGEpKjEvcXVpbF9zcXJ0KDIpXSxbMCwgMCwgcXVpbF9leHAoMWoqcF9waGkpKjEvcXVpbF9zcXJ0KDIpLCBxdWlsX2V4cCgxaipwX2xhbWJkYSsxaipwX3BoaSkqMS9xdWlsX3NxcnQoMildXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcImN1MlwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwwLDAsMF0sWzAsMSwwLDBdLFswLCAwLCAxL25wLnNxcnQoMiksIC1ucC5leHAoMWoqcF9sYW1iZGEpKjEvbnAuc3FydCgyKV0sWzAsIDAsIG5wLmV4cCgxaipwX3BoaSkqMS9ucC5zcXJ0KDIpLCBucC5leHAoMWoqcF9sYW1iZGErMWoqcF9waGkpKjEvbnAuc3FydCgyKV1dXCIsXG5cdFx0XHRcdFx0bm90VGZxU3VwcG9ydGVkOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjb250cm9sbGVkVW5pdGFyeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0XHRcdG1hdHJpeDogW1tbXCIxL3NxcnQoMilcIiwgXCIwXCJdLCBbXCItY29zKGxhbWJkYSkvc3FydCgyKVwiLCBcIi1zaW4obGFtYmRhKS9zcXJ0KDIpXCJdXSxcblx0XHRcdFx0XHRcdFx0IFtbXCJjb3MocGhpKS9zcXJ0KDIpXCIsIFwic2luKHBoaSkvc3FydCgyKVwiXSwgW1wiY29zKGxhbWJkYStwaGkpL3NxcnQoMilcIiwgXCJzaW4obGFtYmRhK3BoaSkvc3FydCgyKVwiXV1dXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFhc206IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwicGhpXCIsIGxhbWJkYTogXCJsYW1iZGFcIiB9IH1cblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwicGhpXCIsIGxhbWJkYTogXCJsYW1iZGFcIiB9IH1cblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaVwiLCBcImxhbWJkYVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwgMCwgMS9ucC5zcXJ0KDIpLCAtbnAuZXhwKDFqKnBfbGFtYmRhKSoxL25wLnNxcnQoMildLFswLCAwLCBucC5leHAoMWoqcF9waGkpKjEvbnAuc3FydCgyKSwgbnAuZXhwKDFqKnBfbGFtYmRhKzFqKnBfcGhpKSoxL25wLnNxcnQoMildXVwiLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG1hdHJpeDogW1sgMSwgMCwgMCwgMCBdLFsgMCwgMSwgMCwgMCBdLFsgMCwgMCwgXCIxIC8gc3FydCgyKVwiLCBcIi1leHAoaSAqIGxhbWJkYSkgKiAxIC8gc3FydCgyKVwiIF0sWyAwLCAwLCBcImV4cChpICogcGhpKSAqIDEgLyBzcXJ0KDIpXCIsIFwiZXhwKGkgKiBsYW1iZGEgKyBpICogcGhpKSAqIDEgLyBzcXJ0KDIpXCIgXV0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLDAsMCwwXSxbMCwxLDAsMF0sWzAsIDAsIDEvbnAuc3FydCgyKSwgLW5wLmV4cCgxaipwX2xhbWJkYSkqMS9ucC5zcXJ0KDIpXSxbMCwgMCwgbnAuZXhwKDFqKnBfcGhpKSoxL25wLnNxcnQoMiksIG5wLmV4cCgxaipwX2xhbWJkYSsxaipwX3BoaSkqMS9ucC5zcXJ0KDIpXV1cIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaVwiLCBcImxhbWJkYVwiXVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGN1Mzoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiQ29udHJvbGxlZCByb3RhdGlvbiBnYXRlIHdpdGggMyBFdWxlciBhbmdsZXNcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbIDEsIDAsIDAsIDAgXSxcblx0XHRcdFx0WyAwLCAxLCAwLCAwIF0sXG5cdFx0XHRcdFsgMCwgMCwgXCJjb3ModGhldGEvMilcIiwgXCItZXhwKGkgKiBsYW1iZGEpICogc2luKHRoZXRhIC8gMilcIiBdLFxuXHRcdFx0XHRbIDAsIDAsIFwiZXhwKGkgKiBwaGkpICogc2luKHRoZXRhIC8gMilcIiwgXCJleHAoaSAqIGxhbWJkYSArIGkgKiBwaGkpICogY29zKHRoZXRhIC8gMilcIiBdXG5cdFx0XHRdLFxuXG5cdFx0XHRwYXJhbXM6IFtcInRoZXRhXCIsIFwicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIkNVM1wiLFxuXHRcdFx0XHRyb290OiBcInUzXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcImN1M1wiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIiwgXCJwaGlcIiwgXCJsYW1iZGFcIl0sXG5cdFx0XHRcdFx0ZGVmZ2F0ZTogXCJERUZHQVRFIGN1MygldGhldGEsICVwaGksICVsYW1iZGEpOlxcbiAgICAxLCAwLCAwLCAwXFxuICAgIDAsIDEsIDAsIDBcXG4gICAgMCwgMCwgQ09TKCV0aGV0YS8yKSwgLTEqRVhQKGkqJWxhbWJkYSkqU0lOKCV0aGV0YS8yKVxcbiAgICAwLCAwLCBFWFAoaSolcGhpKSpTSU4oJXRoZXRhLzIpLCBFWFAoaSolbGFtYmRhICsgaSolcGhpKSpDT1MoJXRoZXRhLzIpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cHlxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjdTNcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCIsIFwicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwwLDAsMF0sWzAsMSwwLDBdLFswLCAwLCBxdWlsX2NvcyhwX3RoZXRhLzIpLC1xdWlsX2V4cCgxaipwX2xhbWJkYSkqcXVpbF9zaW4ocF90aGV0YS8yKV0sWzAsIDAsIHF1aWxfZXhwKDFqKnBfcGhpKSpxdWlsX3NpbihwX3RoZXRhLzIpLHF1aWxfZXhwKDFqKnBfbGFtYmRhKzFqKnBfcGhpKSpxdWlsX2NvcyhwX3RoZXRhLzIpXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjdTNcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCIsIFwicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwwLDAsMF0sWzAsMSwwLDBdLFswLCAwLCBucC5jb3MocF90aGV0YS8yKSwtbnAuZXhwKDFqKnBfbGFtYmRhKSpucC5zaW4ocF90aGV0YS8yKV0sWzAsIDAsIG5wLmV4cCgxaipwX3BoaSkqbnAuc2luKHBfdGhldGEvMiksbnAuZXhwKDFqKnBfbGFtYmRhKzFqKnBfcGhpKSpucC5jb3MocF90aGV0YS8yKV1dXCIsXG5cdFx0XHRcdFx0bm90VGZxU3VwcG9ydGVkOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjb250cm9sbGVkVW5pdGFyeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIiwgXCJwaGlcIiwgXCJsYW1iZGFcIl0sXG5cdFx0XHRcdFx0bWF0cml4OiBbW1tcImNvcyh0aGV0YS8yKVwiLCBcIjBcIl0sIFtcIi1jb3MobGFtYmRhKSpzaW4odGhldGEvMilcIiwgXCItc2luKGxhbWJkYSkqc2luKHRoZXRhLzIpXCJdXSxcblx0XHRcdFx0XHRcdFx0IFtbXCJjb3MocGhpKSpzaW4odGhldGEvMilcIiwgXCJzaW4ocGhpKSpzaW4odGhldGEvMilcIl0sIFtcImNvcyhsYW1iZGErcGhpKSpjb3ModGhldGEvMilcIiwgXCJzaW4obGFtYmRhK3BoaSkqY29zKHRoZXRhLzIpXCJdXV1cblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiLCBcInBoaVwiLCBcImxhbWJkYVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwgMCwgbnAuY29zKHBfdGhldGEvMiksLW5wLmV4cCgxaipwX2xhbWJkYSkqbnAuc2luKHBfdGhldGEvMildLFswLCAwLCBucC5leHAoMWoqcF9waGkpKm5wLnNpbihwX3RoZXRhLzIpLG5wLmV4cCgxaipwX2xhbWJkYSsxaipwX3BoaSkqbnAuY29zKHBfdGhldGEvMildXVwiLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG1hdHJpeDogW1sgMSwgMCwgMCwgMCBdLFsgMCwgMSwgMCwgMCBdLFsgMCwgMCwgXCJjb3ModGhldGEvMilcIiwgXCItZXhwKGkgKiBsYW1iZGEpICogc2luKHRoZXRhIC8gMilcIiBdLFsgMCwgMCwgXCJleHAoaSAqIHBoaSkgKiBzaW4odGhldGEgLyAyKVwiLCBcImV4cChpICogbGFtYmRhICsgaSAqIHBoaSkgKiBjb3ModGhldGEgLyAyKVwiIF1dLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwwLDAsMF0sWzAsMSwwLDBdLFswLCAwLCBucC5jb3MocF90aGV0YS8yKSwtbnAuZXhwKDFqKnBfbGFtYmRhKSpucC5zaW4ocF90aGV0YS8yKV0sWzAsIDAsIG5wLmV4cCgxaipwX3BoaSkqbnAuc2luKHBfdGhldGEvMiksbnAuZXhwKDFqKnBfbGFtYmRhKzFqKnBfcGhpKSpucC5jb3MocF90aGV0YS8yKV1dXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiLCBcInBoaVwiLCBcImxhbWJkYVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcImN1XCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRjczoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiQ29udHJvbGxlZCBQSS8yIHJvdGF0aW9uIG92ZXIgWi1heGlzIChzeW5vbnltIGZvciBgY3IyYClcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwLDAsMF0sXG5cdFx0XHRcdFswLDEsMCwwXSxcblx0XHRcdFx0WzAsMCwxLDBdLFxuXHRcdFx0XHRbMCwwLDAsXCJleHAoaSAqIHBpIC8gMilcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlNcIixcblx0XHRcdFx0cm9vdDogXCJzXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJjdTFcIixcblx0XHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0XHRsYW1iZGE6IFwicGkvMlwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcInBpLzJcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbnRyb2xsZWRQaGFzZVNoaWZ0XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiB7dGhldGE6XCJNX1BJLzJcIn1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcInBpLzJcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UxXCIsIHBhcmFtczogeyBsYW1iZGE6IFwicGkvMlwiIH19XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IFtcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjdTFcIiwgcGFyYW1zOiB7IGxhbWJkYTogXCJwaS8yXCIgfX1cblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWl7CvVwiLFxuXHRcdFx0XHRcdGNvbnRyb2xsZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLDAsMCwwXSxbMCwxLDAsMF0sWzAsIDAsIDEsIDBdLFswLCAwLCAwLCBucC5leHAoMWogKiBucC5waSAvIDIpXV1cIixcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlNcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y3Q6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIkNvbnRyb2xsZWQgUEkvNCByb3RhdGlvbiBvdmVyIFotYXhpcyAoc3lub255bSBmb3IgYGNyNGApXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsMCwwLDBdLFxuXHRcdFx0XHRbMCwxLDAsMF0sXG5cdFx0XHRcdFswLDAsMSwwXSxcblx0XHRcdFx0WzAsMCwwLFwiZXhwKGkgKiBwaSAvIDQpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImRvdFwiLFwiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJUXCIsXG5cdFx0XHRcdHJvb3Q6IFwidFwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcInBpLzRcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcImN1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCJwaS80XCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjb250cm9sbGVkUGhhc2VTaGlmdFwiLFxuXHRcdFx0XHRcdHBhcmFtczoge3RoZXRhOlwiTV9QSS80XCJ9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcImN1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCJwaS80XCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFhc206IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN1MVwiLCBwYXJhbXM6IHsgbGFtYmRhOiBcInBpLzRcIiB9fVxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UxXCIsIHBhcmFtczogeyBsYW1iZGE6IFwicGkvNFwiIH19XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVpcms6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlpewrxcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidW5pdGFyeVwiLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwwLDAsMF0sWzAsMSwwLDBdLFswLCAwLCAxLCAwXSxbMCwgMCwgMCwgbnAuZXhwKDFqICogbnAucGkgLyA0KV1dXCIsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJUXCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGNzZGc6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIkNvbnRyb2xsZWQgKC1QSS8yKSByb3RhdGlvbiBvdmVyIFotYXhpc1wiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDAsMCwwXSxcblx0XHRcdFx0WzAsMSwwLDBdLFxuXHRcdFx0XHRbMCwwLDEsMF0sXG5cdFx0XHRcdFswLDAsMCxcImV4cCgtaSAqIHBpIC8gMilcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlMmIzgyMjQ7XCIsXG5cdFx0XHRcdHJvb3Q6IFwic2RnXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJjdTFcIixcblx0XHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0XHRsYW1iZGE6IFwiLXBpLzJcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcImN1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCItcGkvMlwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY29udHJvbGxlZFBoYXNlU2hpZnRcIixcblx0XHRcdFx0XHRwYXJhbXM6IHt0aGV0YTpcIi1NX1BJLzJcIn1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcIi1waS8yXCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFhc206IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN1MVwiLCBwYXJhbXM6IHsgbGFtYmRhOiBcIi0xKnBpLzJcIiB9fVxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UxXCIsIHBhcmFtczogeyBsYW1iZGE6IFwiLTEqcGkvMlwiIH19XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVpcms6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlpeLcK9XCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwgMCwgMSwgMF0sWzAsIDAsIDAsIG5wLmV4cCgtMWogKiBucC5waSAvIDIpXV1cIixcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlNcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlLFxuXHRcdFx0XHRcdGRhZ2dlcjogdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGN0ZGc6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIkNvbnRyb2xsZWQgKC1QSS80KSByb3RhdGlvbiBvdmVyIFotYXhpc1wiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDAsMCwwXSxcblx0XHRcdFx0WzAsMSwwLDBdLFxuXHRcdFx0XHRbMCwwLDEsMF0sXG5cdFx0XHRcdFswLDAsMCxcImV4cCgtaSAqIHBpIC8gNClcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlQmIzgyMjQ7XCIsXG5cdFx0XHRcdHJvb3Q6IFwidGRnXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJjdTFcIixcblx0XHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0XHRsYW1iZGE6IFwiLXBpLzRcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcImN1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCItcGkvNFwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY29udHJvbGxlZFBoYXNlU2hpZnRcIixcblx0XHRcdFx0XHRwYXJhbXM6IHt0aGV0YTpcIi1NX1BJLzRcIn1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcIi1waS80XCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFhc206IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN1MVwiLCBwYXJhbXM6IHsgbGFtYmRhOiBcIi0xKnBpLzRcIiB9fVxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UxXCIsIHBhcmFtczogeyBsYW1iZGE6IFwiLTEqcGkvNFwiIH19XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVpcms6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlpeLcK8XCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwgMCwgMSwgMF0sWzAsIDAsIDAsIG5wLmV4cCgtMWogKiBucC5waSAvIDQpXV1cIixcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlRcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlLFxuXHRcdFx0XHRcdGRhZ2dlcjogdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGNjeDoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiVG9mZm9saSBha2EgXFxcIkNDTk9UXFxcIiBnYXRlXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsMCwwLDAsMCwwLDAsMF0sXG5cdFx0XHRcdFswLDEsMCwwLDAsMCwwLDBdLFxuXHRcdFx0XHRbMCwwLDEsMCwwLDAsMCwwXSxcblx0XHRcdFx0WzAsMCwwLDEsMCwwLDAsMF0sXG5cdFx0XHRcdFswLDAsMCwwLDEsMCwwLDBdLFxuXHRcdFx0XHRbMCwwLDAsMCwwLDEsMCwwXSxcblx0XHRcdFx0WzAsMCwwLDAsMCwwLDAsMV0sXG5cdFx0XHRcdFswLDAsMCwwLDAsMCwxLDBdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImRvdFwiLFwiZG90XCIsXCJub3RcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIkNDTk9UXCIsXG5cdFx0XHRcdHJvb3Q6IFwieFwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJDQ05PVFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNDWFwiLFxuXHRcdFx0XHRcdG5vdFRmcVN1cHBvcnRlZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY2N4XCIsXG5cdFx0XHRcdFx0ZnVuYzogXCJ2b2lkIGNjeChRdXJlZyBxdWJpdHMsIGNvbnN0IGludCBxMSwgY29uc3QgaW50IHEyLCBjb25zdCBpbnQgcTMpIHtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgaGFkYW1hcmQocXViaXRzLCBxMyk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGNvbnRyb2xsZWROb3QocXViaXRzLCBxMiwgcTMpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBwaGFzZVNoaWZ0KHF1Yml0cywgcTMsIC1NX1BJLzQpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBjb250cm9sbGVkTm90KHF1Yml0cywgcTEsIHEzKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgdEdhdGUocXViaXRzLCBxMyk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGNvbnRyb2xsZWROb3QocXViaXRzLCBxMiwgcTMpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBwaGFzZVNoaWZ0KHF1Yml0cywgcTMsIC1NX1BJLzQpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBjb250cm9sbGVkTm90KHF1Yml0cywgcTEsIHEzKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgdEdhdGUocXViaXRzLCBxMik7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIHRHYXRlKHF1Yml0cywgcTMpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBjb250cm9sbGVkTm90KHF1Yml0cywgcTEsIHEyKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgaGFkYW1hcmQocXViaXRzLCBxMyk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIHRHYXRlKHF1Yml0cywgcTEpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBwaGFzZVNoaWZ0KHF1Yml0cywgcTIsIC1NX1BJLzQpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBjb250cm9sbGVkTm90KHF1Yml0cywgcTEsIHEyKTtcXG59XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJDQ05PVFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1aXJrOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJYXCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNjbm90XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNDTk9UXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRjc3dhcDoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiQ29udHJvbGxlZCBzd2FwIGFrYSBcXFwiRnJlZGtpblxcXCIgZ2F0ZVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDAsMCwwLDAsMCwwLDBdLFxuXHRcdFx0XHRbMCwxLDAsMCwwLDAsMCwwXSxcblx0XHRcdFx0WzAsMCwxLDAsMCwwLDAsMF0sXG5cdFx0XHRcdFswLDAsMCwxLDAsMCwwLDBdLFxuXHRcdFx0XHRbMCwwLDAsMCwxLDAsMCwwXSxcblx0XHRcdFx0WzAsMCwwLDAsMCwwLDEsMF0sXG5cdFx0XHRcdFswLDAsMCwwLDAsMSwwLDBdLFxuXHRcdFx0XHRbMCwwLDAsMCwwLDAsMCwxXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJkb3RcIixcInhcIixcInhcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlNXUFwiLFxuXHRcdFx0XHRyb290OiBcInN3YXBcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdG5hbWU6IFwiQ1NXQVBcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY3N3YXBcIixcblx0XHRcdFx0XHRmdW5jOiBcInZvaWQgY3N3YXAoUXVyZWcgcXViaXRzLCBjb25zdCBpbnQgcTEsIGNvbnN0IGludCBxMiwgY29uc3QgaW50IHEzKSB7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGNvbnRyb2xsZWROb3QocXViaXRzLCBxMywgcTIpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBoYWRhbWFyZChxdWJpdHMsIHEzKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgY29udHJvbGxlZE5vdChxdWJpdHMsIHEyLCBxMyk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIHBoYXNlU2hpZnQocXViaXRzLCBxMywgLU1fUEkvNCk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGNvbnRyb2xsZWROb3QocXViaXRzLCBxMSwgcTMpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICB0R2F0ZShxdWJpdHMsIHEzKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgY29udHJvbGxlZE5vdChxdWJpdHMsIHEyLCBxMyk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIHBoYXNlU2hpZnQocXViaXRzLCBxMywgLU1fUEkvNCk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGNvbnRyb2xsZWROb3QocXViaXRzLCBxMSwgcTMpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICB0R2F0ZShxdWJpdHMsIHEyKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgdEdhdGUocXViaXRzLCBxMyk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGhhZGFtYXJkKHF1Yml0cywgcTMpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBjb250cm9sbGVkTm90KHF1Yml0cywgcTEsIHEyKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgdEdhdGUocXViaXRzLCBxMSk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIHBoYXNlU2hpZnQocXViaXRzLCBxMiwgLU1fUEkvNCk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGNvbnRyb2xsZWROb3QocXViaXRzLCBxMiwgcTMpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBjb250cm9sbGVkTm90KHF1Yml0cywgcTMsIHEyKTtcXG59XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJDb250cm9sbGVkIFNXQVBcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJDU1dBUFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB5cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiQ1NXQVBcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiU3dhcFwiLFxuXHRcdFx0XHRcdGNvbnRyb2xsZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLDAsMCwwLDAsMCwwLDBdLCBbMCwxLDAsMCwwLDAsMCwwXSwgWzAsMCwxLDAsMCwwLDAsMF0sIFswLDAsMCwxLDAsMCwwLDBdLCBbMCwwLDAsMCwxLDAsMCwwXSwgWzAsMCwwLDAsMCwwLDEsMF0sIFswLDAsMCwwLDAsMSwwLDBdLCBbMCwwLDAsMCwwLDAsMCwxXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiU1dBUFwiLFxuXHRcdFx0XHRcdGNvbnRyb2xsZWQ6IHRydWVcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRjc3Jzd2FwOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJDb250cm9sbGVkIHNxdWFyZSByb290IG9mIHN3YXBcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwLDAsMCwwLDAsMCwwXSxcblx0XHRcdFx0WzAsMSwwLDAsMCwwLDAsMF0sXG5cdFx0XHRcdFswLDAsMSwwLDAsMCwwLDBdLFxuXHRcdFx0XHRbMCwwLDAsMSwwLDAsMCwwXSxcblx0XHRcdFx0WzAsMCwwLDAsMSwwLDAsMF0sXG5cdFx0XHRcdFswLDAsMCwwLDAsXCIwLjUgKiAoMSArIGkpXCIsXCIwLjUgKiAoMSAtIGkpXCIsMF0sXG5cdFx0XHRcdFswLDAsMCwwLDAsXCIwLjUgKiAoMSAtIGkpXCIsXCIwLjUgKiAoMSArIGkpXCIsMF0sXG5cdFx0XHRcdFswLDAsMCwwLDAsMCwwLDFdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImRvdFwiLFwiYm94XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIiYjeDIyMUE7U1dQXCIsXG5cdFx0XHRcdHJvb3Q6IFwic3Jzd2FwXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjc3Jzd2FwXCIsXG5cdFx0XHRcdFx0Ly9AVE9ETyBhZGQgZnVuY3Rpb25cblx0XHRcdFx0XHRmdW5jOiBcIlRPRE9cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwic3Jzd2FwXCIsXG5cdFx0XHRcdFx0XHR0eXBlOiBcImNvbnRyb2xsZWRcIixcblx0XHRcdFx0XHRcdG5vdFRmcVN1cHBvcnRlZDogdHJ1ZVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY3Nyc3dhcFwiLFx0XHRcdFx0XHRcblx0XHRcdFx0XHRkZWZnYXRlOiBcIkRFRkdBVEUgY3Nyc3dhcDpcXG4gICAgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMFxcbiAgICAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwXFxuICAgIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDBcXG4gICAgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMFxcbiAgICAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwXFxuICAgIDAsIDAsIDAsIDAsIDAsIDAuNSswLjVpLCAwLjUtMC41aSwgMFxcbiAgICAwLCAwLCAwLCAwLCAwLCAwLjUtMC41aSwgMC41KzAuNWksIDBcXG4gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB5cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY3Nyc3dhcFwiLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwwLDAsMCwwLDAsMCwwXSxbMCwxLDAsMCwwLDAsMCwwXSxbMCwwLDEsMCwwLDAsMCwwXSxbMCwwLDAsMSwwLDAsMCwwXSxbMCwwLDAsMCwxLDAsMCwwXSxbMCwwLDAsMCwwLDAuNSAqICgxICsgMWopLDAuNSAqICgxIC0gMWopLDBdLFswLDAsMCwwLDAsMC41ICogKDEgLSAxaiksMC41ICogKDEgKyAxaiksMF0sWzAsMCwwLDAsMCwwLDAsMV1dXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLDAsMCwwLDAsMCwwLDBdLFswLDEsMCwwLDAsMCwwLDBdLFswLDAsMSwwLDAsMCwwLDBdLFswLDAsMCwxLDAsMCwwLDBdLFswLDAsMCwwLDEsMCwwLDBdLFswLDAsMCwwLDAsMC41ICogKDEgKyAxaiksMC41ICogKDEgLSAxaiksMF0sWzAsMCwwLDAsMCwwLjUgKiAoMSAtIDFqKSwwLjUgKiAoMSArIDFqKSwwXSxbMCwwLDAsMCwwLDAsMCwxXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiU1FSVFNXQVBcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0cmVzZXQ6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlJlc2V0cyBxdWJpdFwiLFxuXHRcdFx0bWF0cml4OiBbXSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlJTVFwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJSRVNFVFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcInJlc2V0XCIsXG5cdFx0XHRcdFx0bm90VGZxU3VwcG9ydGVkOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJyZXNldFwiLFxuXHRcdFx0XHRcdC8vQFRPRE8gYWRkIGZ1bmN0aW9uXG5cdFx0XHRcdFx0ZnVuYzogXCJUT0RPXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJSZXNldFwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0bWVhc3VyZToge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiTWVhc3VyZXMgcXViaXQgYW5kIHN0b3JlcyBjaGFuY2UgKDAgb3IgMSkgaW50byBjbGFzc2ljYWwgYml0XCIsXG5cdFx0XHRtYXRyaXg6IFtdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImdhdWdlXCJdLFxuXHRcdFx0XHRsYWJlbDogXCJcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiTUVBU1VSRVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcIm1lYXN1cmVcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwibWVhc3VyZVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiTVwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0dGhpcy5pbml0KG51bVF1Yml0cyk7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZGVmYXVsdEh5YnJpZE9wdGlvbnMgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHtcblx0XHRvcHRpbWl6ZXI6IFwiUG93ZWxsXCIsXG5cdFx0dG9sZXJhbmNlOiAwLjAwMSxcblx0XHRjb3N0RnVuY3Rpb246IHtcblx0XHRcdHB5dGhvbjogXCJcIixcblx0XHRcdGphdmFzY3JpcHQ6IFwiXCJcblx0XHR9XG5cdH07XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uKG51bVF1Yml0cywgb3B0aW9ucykge1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR0aGlzLm51bVF1Yml0cyA9IG51bVF1Yml0cyB8fCAxO1xuXHR0aGlzLmdhdGVzID0gW107XG5cdHRoaXMucGFydGl0aW9uTWFwID0gW107XG5cdHRoaXMucGFydGl0aW9uQ291bnQgPSAwO1xuXHR0aGlzLnBhcnRpdGlvbkluZm8gPSB7fTtcblxuXHR0aGlzLnBhcmFtcyA9IFtdO1xuXHR0aGlzLm9wdGlvbnMgPSB7XG5cdFx0cGFyYW1zOiB7fSxcblxuXHRcdGh5YnJpZDogZmFsc2UsXG5cdFx0aHlicmlkT3B0aW9uczogdGhpcy5kZWZhdWx0SHlicmlkT3B0aW9ucygpXG5cdH07XG5cblx0aWYoIW9wdGlvbnMua2VlcEN1c3RvbUdhdGVzKSB7XG5cdFx0dGhpcy5jdXN0b21HYXRlcyA9IHt9O1xuXHR9XG5cblx0dGhpcy5jcmVncyA9IHt9O1xuXHR0aGlzLmNvbGxhcHNlZCA9IFtdO1xuXHR0aGlzLnByb2IgPSBbXTtcblx0dGhpcy5tZWFzdXJlUmVzZXRzUXViaXQgPSBmYWxzZTtcblx0dGhpcy5yZXZlcnNlQml0T3JkZXIgPSBmYWxzZTtcblxuXHR0aGlzLmNsZWFyKCk7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuY2xlYXJHYXRlcyA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLmdhdGVzID0gW107XG5cdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLm51bVF1Yml0czsgaSsrKSB7XG5cdFx0dGhpcy5nYXRlcy5wdXNoKFtdKTtcblx0fVxufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMuY2xlYXJHYXRlcygpO1xuXHR0aGlzLmluaXRTdGF0ZSgpO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucmVzZXRTdGF0ZSA9IGZ1bmN0aW9uKCkge1xuXHQvLyByZXNldCBzdGF0ZVxuXHR0aGlzLnN0YXRlID0ge307XG5cdHRoaXMuc3RhdGVCaXRzID0gMDtcblx0dGhpcy5wYXJ0aXRpb25DYWNoZSA9IHt9O1xuXG5cdC8vIHJlc2V0IGNyZWdzXG5cdGZvcih2YXIgY3JlZyBpbiB0aGlzLmNyZWdzKSB7XG5cdFx0dmFyIGxlbiA9IHRoaXMuY3JlZ3NbY3JlZ10ubGVuZ3RoIHx8IDA7XG5cdFx0dGhpcy5jcmVnc1tjcmVnXSA9IFtdO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0dGhpcy5jcmVnc1tjcmVnXS5wdXNoKDApO1xuXHRcdH1cblx0fVxuXG5cdC8vIHJlc2V0IG1lYXN1cmVtZW50XG5cdHRoaXMuY29sbGFwc2VkID0gW107XG5cdHRoaXMucHJvYiA9IFtdO1xuXG5cdC8vIHJlc2V0IHN0YXRpc3RpY3Ncblx0dGhpcy5zdGF0cyA9IHtcblx0XHRkdXJhdGlvbjogMFxuXHR9O1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmluaXRTdGF0ZSA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLnJlc2V0U3RhdGUoKTtcblx0dGhpcy5zdGF0ZVtcIjBcIl0gPSBtYXRoLmNvbXBsZXgoMSwgMCk7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZm9ybWF0Q29tcGxleCA9IGZ1bmN0aW9uKGNvbXBsZXgsIG9wdGlvbnMpIHtcblx0cmV0dXJuIGZvcm1hdENvbXBsZXgyKGNvbXBsZXgucmUsIGNvbXBsZXguaW0sIG9wdGlvbnMpO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLm11bHRpcGx5U3F1YXJlTWF0cmljZXMgPSBmdW5jdGlvbihtMSwgbTIpIHtcblx0dmFyIGxlbiA9IG0xLmxlbmd0aDtcblxuXHR2YXIgYyA9IGxlbjtcblx0dmFyIGQgPSBsZW47XG5cdHZhciBrID0gbGVuO1xuXG5cdHZhciByZXMgPSBbXTtcblx0d2hpbGUoYy0tKSB7XG5cdFx0cmVzW2NdID0gW107XG5cdFx0ZCA9IGxlbjtcblx0XHR3aGlsZShkLS0pIHtcblx0XHRcdHJlc1tjXVtkXSA9IDA7XG5cdFx0XHRrID0gbGVuO1xuXHRcdFx0d2hpbGUoay0tKSB7XG5cdFx0XHRcdGlmKG0xW2NdW2tdICYmIG0yW2tdW2RdKSB7XG5cdFx0XHRcdFx0aWYocmVzW2NdW2RdKSB7XG5cdFx0XHRcdFx0XHRyZXNbY11bZF0gPSBtYXRoLmFkZChyZXNbY11bZF0sIG1hdGgubXVsdGlwbHkobTFbY11ba10sIG0yW2tdW2RdKSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJlc1tjXVtkXSA9IG1hdGgubXVsdGlwbHkobTFbY11ba10sIG0yW2tdW2RdKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIHJlcztcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5pc0lkZW50aXR5TWF0cml4ID0gZnVuY3Rpb24obSwgcHJlY2lzaW9uKSB7XG5cdGlmKHR5cGVvZiBwcmVjaXNpb24gPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdHByZWNpc2lvbiA9IDE0O1xuXHR9XG5cblx0Zm9yKHZhciBpID0gMDsgaSA8IG0ubGVuZ3RoOyBpKyspIHtcblx0XHRmb3IodmFyIGogPSAwOyBqIDwgbS5sZW5ndGg7IGorKykge1xuXHRcdFx0aWYobWF0aC5yb3VuZChtW2ldW2pdLCBwcmVjaXNpb24pICE9IChpID09IGogPyAxIDogMCkpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmlzVW5pdGFyeU1hdHJpeCA9IGZ1bmN0aW9uKFUsIHByZWNpc2lvbikge1xuXHRyZXR1cm4gdGhpcy5pc0lkZW50aXR5TWF0cml4KG1hdGgubXVsdGlwbHkoVSwgbWF0aC5jdHJhbnNwb3NlKFUpKSwgcHJlY2lzaW9uKTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmlzSGVybWl0aWFuTWF0cml4ID0gZnVuY3Rpb24oSCwgcHJlY2lzaW9uKSB7XG5cdHZhciBkaWZmID0gdGhpcy5tYXRyaXhEaWZmKEgsIG1hdGguY3RyYW5zcG9zZShIKSlcblxuXHRyZXR1cm4gZGlmZiA8PSBtYXRoLnBvdygxMCwgLTEgKiAocHJlY2lzaW9uIHx8IDE0KSk7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5tYXRyaXhEaWZmID0gZnVuY3Rpb24obWF0cml4MSwgbWF0cml4Mikge1xuXHR2YXIgdG90YWwgPSAwO1xuXHR2YXIgY291bnQgPSAwO1xuXHRmb3IodmFyIHIgPSAwOyByIDwgbWF0cml4MS5sZW5ndGg7IHIrKykge1xuXHRcdHZhciByb3cxID0gbWF0cml4MVtyXTtcblx0XHR2YXIgcm93MiA9IG1hdHJpeDJbcl07XG5cdFx0Zm9yKHZhciBjID0gMDsgYyA8IHJvdzEubGVuZ3RoOyBjKyspIHtcblx0XHRcdHZhciBpdGVtMSA9IHJvdzFbY107XG5cdFx0XHR2YXIgaXRlbTIgPSByb3cyW2NdO1xuXG5cdFx0XHR2YXIgaTEgPSAodHlwZW9mIGl0ZW0xID09IFwib2JqZWN0XCIpID8gaXRlbTEgOiBtYXRoLmNvbXBsZXgoaXRlbTEpO1xuXHRcdFx0dmFyIGkyID0gKHR5cGVvZiBpdGVtMiA9PSBcIm9iamVjdFwiKSA/IGl0ZW0yIDogbWF0aC5jb21wbGV4KGl0ZW0yKTtcblxuXHRcdFx0Ly8gZGlzdGFuY2UgaW4gdGhlIGNvbXBsZXggcGxhbmVcblx0XHRcdHZhciBkaXN0YW5jZSA9IG1hdGguYWJzKG1hdGguc3VidHJhY3QoaTEsIGkyKSk7XG5cblx0XHRcdHRvdGFsICs9IGRpc3RhbmNlO1xuXG5cdFx0XHRjb3VudCsrO1xuXHRcdH1cblx0fVxuXG5cdHZhciBkaWZmID0gY291bnQgPyAodG90YWwgLyBjb3VudCkgOiAwO1xuXG5cdHJldHVybiBkaWZmO1xufTtcblxuXG4vL1xuLy8gRXh0cmFjdCB2YXJpYWJsZXMgZnJvbSBleHByZXNzaW9uIHN0cmluZyBhbmQgcmV0dXJucyBvYmplY3Qgd2l0aCBleHByZXNzaW9uIHN0cmluZyBhbmQgYXJyYXkgb2YgdmFyaWFibGUgbmFtZXNcbi8vIE5vdGUgdGhhdCBzeW1ib2wgXCJqXCIgaXMgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgdG8gXCJpXCIgKGltYWdpbmFyeSB1bml0IHVzZWQgaW4gcHl0aG9uIGlzIFwialwiIGJ1dCB3ZSBuZWVkIFwiaVwiKVxuLy9cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5wYXJzZU1hdGhTdHJpbmcgPSBmdW5jdGlvbihzdHIpIHtcblx0dmFyIHZhcmlhYmxlcyA9IFtdO1xuXG5cdC8vIGNvbnZlcnQgaW1hZ2luYXJ5IHVuaXQgXCJqXCIgdG8gXCJpXCJcblx0dmFyIG1hdGhUb1N0cmluZ0hhbmRsZXIgPSBmdW5jdGlvbihub2RlLCBvcHRpb25zKSB7XG5cdFx0aWYobm9kZS5pc1N5bWJvbE5vZGUpIHtcblx0XHRcdGlmKG5vZGUubmFtZSA9PSBcImpcIikge1xuXHRcdFx0XHRyZXR1cm4gXCJpXCI7XG5cdFx0XHR9XG5cblx0XHRcdGlmKHZhcmlhYmxlcy5pbmRleE9mKG5vZGUubmFtZSkgPCAwKSB7XG5cdFx0XHRcdHZhcmlhYmxlcy5wdXNoKG5vZGUubmFtZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdHZhciBub2RlID0gbWF0aC5wYXJzZShzdHIucmVwbGFjZSgvW1xcdFxcblxccl0vZ20sIFwiXCIpKTtcblxuXHR2YXIgZXhwcmVzc2lvbiA9IG5vZGUudG9TdHJpbmcoeyBoYW5kbGVyOiBtYXRoVG9TdHJpbmdIYW5kbGVyIH0pO1xuXG5cdHJldHVybiB7XG5cdFx0ZXhwcmVzc2lvbjogZXhwcmVzc2lvbixcblx0XHR2YXJpYWJsZXM6IHZhcmlhYmxlcyxcblx0XHRub2RlOiBub2RlXG5cdH07XG59O1xuXG4vL1xuLy8gRXZhbHVhdGUgZXhwcmVzc2lvblxuLy9cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5ldmFsTWF0aFN0cmluZyA9IGZ1bmN0aW9uKHN0ciwgdmFycykge1xuXHR2YXJzID0gdmFycyB8fCB7fTtcblxuXHR2YXIgcGFyc2VkID0gdGhpcy5wYXJzZU1hdGhTdHJpbmcoc3RyKTtcblxuXHR2YXIgcmVzID0gbWF0aC5ldmFsdWF0ZShwYXJzZWQuZXhwcmVzc2lvbiwgdmFycyk7XG5cdGlmKHJlcyBpbnN0YW5jZW9mIG1hdGguTWF0cml4KSB7XG5cdFx0cmV0dXJuIHJlcy50b0FycmF5KCk7XG5cdH1cblxuXHRyZXR1cm4gcmVzO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnBhcnNlTWF0cml4ID0gZnVuY3Rpb24oTSwgdmFycykge1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0dmFyIEEgPSBudWxsO1xuXHRpZih0eXBlb2YgTSA9PSBcInN0cmluZ1wiKSB7XG5cdFx0QSA9IHNlbGYuZXZhbE1hdGhTdHJpbmcoTSwgdmFycyk7XG5cdH0gZWxzZSB7XG5cdFx0QSA9IE07XG5cdH1cblxuXHR2YXIgcmVzID0gW107XG5cblx0QS5tYXAoZnVuY3Rpb24ocm93LCByb3dJbmRleCkge1xuXHRcdGlmKEFycmF5LmlzQXJyYXkocm93KSkge1xuXHRcdFx0cmVzLnB1c2goW10pO1xuXHRcdFx0cm93Lm1hcChmdW5jdGlvbih2YWwsIGNvbEluZGV4KSB7XG5cdFx0XHRcdGlmKHR5cGVvZiB2YWwgPT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRcdHJlc1tyb3dJbmRleF0ucHVzaChzZWxmLmV2YWxNYXRoU3RyaW5nKHZhbCwgdmFycykpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJlc1tyb3dJbmRleF0ucHVzaCh2YWwpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYodHlwZW9mIHJvdyA9PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdHJlcy5wdXNoKHNlbGYuZXZhbE1hdGhTdHJpbmcocm93LCB2YXJzKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXMucHVzaChyb3cpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0cmV0dXJuIHJlcztcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5tYXRyaXhIYXNDb21wbGV4RWxlbWVudCA9IGZ1bmN0aW9uKE0pIHtcblx0Zm9yKHZhciByID0gMDsgciA8IE0ubGVuZ3RoOyByKyspIHtcblx0XHR2YXIgcm93ID0gTVtyXTtcblxuXHRcdGlmKHJvdyBpbnN0YW5jZW9mIEFycmF5KSB7XG5cdFx0XHRmb3IodmFyIGMgPSAwOyBjIDwgcm93Lmxlbmd0aDsgYysrKSB7XG5cdFx0XHRcdHZhciBjZWxsID0gcm93W2NdO1xuXG5cdFx0XHRcdGlmKGNlbGwgaW5zdGFuY2VvZiBtYXRoLkNvbXBsZXggfHwgKCh0eXBlb2YgY2VsbCA9PSBcIm9iamVjdFwiKSAmJiAoKGNlbGwubWF0aGpzICYmIGNlbGwubWF0aGpzID09IFwiQ29tcGxleFwiKSB8fCAoY2VsbC50eXBlICYmIGNlbGwudHlwZSA9PSBcIkNvbXBsZXhcIikpKSkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmKHJvdyBpbnN0YW5jZW9mIG1hdGguQ29tcGxleCB8fCAoKHR5cGVvZiByb3cgPT0gXCJvYmplY3RcIikgJiYgKChyb3cubWF0aGpzICYmIHJvdy5tYXRoanMgPT0gXCJDb21wbGV4XCIpIHx8IChyb3cudHlwZSAmJiByb3cudHlwZSA9PSBcIkNvbXBsZXhcIikpKSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcblxuXG4vL1xuLy8gT3B0aW9uczoge1xuLy8gICAgIG1pbmlmeTogICAgICAgICBmYWxzZVxuLy9cdCAgIGZpeGVkV2lkdGg6ICAgICBmYWxzZVxuLy8gICAgIGRlY2ltYWxQbGFjZXM6ICAxNCxcbi8vICAgICBpb3RhQ2hhcjogICAgICAgXCJpXCJcbi8vIH1cbi8vXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuc3RyaW5naWZ5TWF0cml4ID0gZnVuY3Rpb24oTSwgb3B0aW9ucykge1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0Ly8gbWF0aGpzIE1hdHJpeCB0byBhcnJheVxuXHR2YXIgQSA9IE0udG9BcnJheSA/IE0udG9BcnJheSgpIDogTTtcblxuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR2YXIgZm9yY2VDb21wbGV4ID0gZmFsc2U7XG5cdGlmKG9wdGlvbnMuZml4ZWRXaWR0aCkge1xuXHRcdC8vIGZvcmNlQ29tcGxleCBpZiBtYXRyaXggaGFzIGF0IGxlYXN0IG9uZSBjb21wbGV4IGVsZW1lbnRcblx0XHRmb3JjZUNvbXBsZXggPSB0aGlzLm1hdHJpeEhhc0NvbXBsZXhFbGVtZW50KEEpO1xuXHR9XG5cblx0dmFyIHN0ciA9IFwiXCI7XG5cdHN0ciArPSBcIltcIjtcblx0QS5tYXAoZnVuY3Rpb24ocm93LCByb3dJbmRleCkge1xuXHRcdGlmKHJvd0luZGV4ID4gMCkge1xuXHRcdFx0c3RyICs9IFwiLFwiO1xuXHRcdH1cblx0XHRpZighb3B0aW9ucy5taW5pZnkpIHtcblx0XHRcdHN0ciArPSBcIlxcbiAgXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHN0ciArPSBcIiBcIjtcblx0XHR9XG5cblx0XHRpZihyb3cgaW5zdGFuY2VvZiBBcnJheSkge1xuXHRcdFx0c3RyICs9IFwiW1wiO1xuXHRcdFx0cm93Lm1hcChmdW5jdGlvbihlbCwgZWxJbmRleCkge1xuXHRcdFx0XHRpZihlbEluZGV4ID4gMCkge1xuXHRcdFx0XHRcdHN0ciArPSBcIiwgXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYoZWwgaW5zdGFuY2VvZiBtYXRoLkNvbXBsZXgpIHtcblx0XHRcdFx0XHRzdHIgKz0gc2VsZi5mb3JtYXRDb21wbGV4KGVsLCBvcHRpb25zKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZigodHlwZW9mIGVsID09IFwib2JqZWN0XCIpICYmICgoZWwubWF0aGpzICYmIGVsLm1hdGhqcyA9PSBcIkNvbXBsZXhcIikgfHwgKGVsLnR5cGUgJiYgZWwudHlwZSA9PSBcIkNvbXBsZXhcIikpKSB7XG5cdFx0XHRcdFx0XHRzdHIgKz0gZm9ybWF0Q29tcGxleDIoZWwucmUsIGVsLmltLCBvcHRpb25zKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0aWYodHlwZW9mIGVsID09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHRcdFx0Ly8gZXhwcmVzc2lvblxuXHRcdFx0XHRcdFx0XHRzdHIgKz0gZWw7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRpZihmb3JjZUNvbXBsZXgpIHtcblx0XHRcdFx0XHRcdFx0XHRzdHIgKz0gZm9ybWF0Q29tcGxleDIoZWwsIDAsIG9wdGlvbnMpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHN0ciArPSBmb3JtYXRGbG9hdChlbCwgb3B0aW9ucyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cdFx0XHRcdFx0XHRcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0c3RyICs9IFwiXVwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZihyb3cgaW5zdGFuY2VvZiBtYXRoLkNvbXBsZXgpIHtcblx0XHRcdFx0c3RyICs9IHNlbGYuZm9ybWF0Q29tcGxleChyb3csIG9wdGlvbnMpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYoKHR5cGVvZiByb3cgPT0gXCJvYmplY3RcIikgJiYgKChyb3cubWF0aGpzICYmIHJvdy5tYXRoanMgPT0gXCJDb21wbGV4XCIpIHx8IChyb3cudHlwZSAmJiByb3cudHlwZSA9PSBcIkNvbXBsZXhcIikpKSB7XG5cdFx0XHRcdFx0c3RyICs9IGZvcm1hdENvbXBsZXgyKGVsLnJlLCBlbC5pbSwgb3B0aW9ucyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aWYodHlwZW9mIHJvdyA9PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0XHQvLyBleHByZXNzaW9uXG5cdFx0XHRcdFx0XHRzdHIgKz0gcm93O1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpZihmb3JjZUNvbXBsZXgpIHtcblx0XHRcdFx0XHRcdFx0c3RyICs9IGZvcm1hdENvbXBsZXgyKHJvdywgMCwgb3B0aW9ucyk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRzdHIgKz0gZm9ybWF0RmxvYXQocm93LCBvcHRpb25zKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXHRpZihBLmxlbmd0aCkge1xuXHRcdGlmKCFvcHRpb25zLm1pbmlmeSkge1xuXHRcdFx0c3RyICs9IFwiXFxuXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHN0ciArPSBcIiBcIjtcblx0XHR9XG5cdH1cblx0c3RyICs9IFwiXVwiO1xuXG5cdHJldHVybiBzdHI7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5tYXRyaXhSZSA9IGZ1bmN0aW9uKFUpIHtcblx0dmFyIHJlcyA9IFtdO1xuXHRmb3IodmFyIHIgPSAwOyByIDwgVS5sZW5ndGg7IHIrKykge1xuXHRcdHZhciByb3cgPSBVW3JdO1xuXHRcdGlmKEFycmF5LmlzQXJyYXkocm93KSkge1xuXHRcdFx0dmFyIG5ld1JvdyA9IFtdO1xuXHRcdFx0Zm9yKHZhciBjID0gMDsgYyA8IHJvdy5sZW5ndGg7IGMrKykge1xuXHRcdFx0XHRpZih0eXBlb2Ygcm93W2NdID09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRuZXdSb3cucHVzaChyb3dbY10ucmUpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG5ld1Jvdy5wdXNoKHJvd1tjXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJlcy5wdXNoKG5ld1Jvdyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmKHR5cGVvZiByb3cgPT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRuZXdSb3cucHVzaChyb3cucmUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bmV3Um93LnB1c2gocm93KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVzO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLm1hdHJpeEltID0gZnVuY3Rpb24oVSkge1xuXHR2YXIgcmVzID0gW107XG5cdGZvcih2YXIgciA9IDA7IHIgPCBVLmxlbmd0aDsgcisrKSB7XG5cdFx0dmFyIHJvdyA9IFVbcl07XG5cdFx0aWYoQXJyYXkuaXNBcnJheShyb3cpKSB7XG5cdFx0XHR2YXIgbmV3Um93ID0gW107XG5cdFx0XHRmb3IodmFyIGMgPSAwOyBjIDwgcm93Lmxlbmd0aDsgYysrKSB7XG5cdFx0XHRcdGlmKHR5cGVvZiByb3dbY10gPT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdG5ld1Jvdy5wdXNoKHJvd1tjXS5pbSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bmV3Um93LnB1c2goMCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJlcy5wdXNoKG5ld1Jvdyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmKHR5cGVvZiByb3cgPT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRuZXdSb3cucHVzaChyb3cuaW0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bmV3Um93LnB1c2goMCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJlcztcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5tYXRyaXhBYnMgPSBmdW5jdGlvbihVKSB7XG5cdHZhciByZXMgPSBbXTtcblx0Zm9yKHZhciByID0gMDsgciA8IFUubGVuZ3RoOyByKyspIHtcblx0XHR2YXIgcm93ID0gVVtyXTtcblx0XHRpZihBcnJheS5pc0FycmF5KHJvdykpIHtcblx0XHRcdHZhciBuZXdSb3cgPSBbXTtcblx0XHRcdGZvcih2YXIgYyA9IDA7IGMgPCByb3cubGVuZ3RoOyBjKyspIHtcblx0XHRcdFx0bmV3Um93LnB1c2gobWF0aC5hYnMocm93W2NdKSk7XG5cdFx0XHR9XG5cdFx0XHRyZXMucHVzaChuZXdSb3cpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXMucHVzaChtYXRoLmFicyhyb3cpKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVzO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLm1hdHJpeEFyZyA9IGZ1bmN0aW9uKFUpIHtcblx0dmFyIHJlcyA9IFtdO1xuXHRmb3IodmFyIHIgPSAwOyByIDwgVS5sZW5ndGg7IHIrKykge1xuXHRcdHZhciByb3cgPSBVW3JdO1xuXHRcdGlmKEFycmF5LmlzQXJyYXkocm93KSkge1xuXHRcdFx0dmFyIG5ld1JvdyA9IFtdO1xuXHRcdFx0Zm9yKHZhciBjID0gMDsgYyA8IHJvdy5sZW5ndGg7IGMrKykge1xuXHRcdFx0XHRuZXdSb3cucHVzaChtYXRoLmFyZyhyb3dbY10pKTtcblx0XHRcdH1cblx0XHRcdHJlcy5wdXNoKG5ld1Jvdyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlcy5wdXNoKG1hdGguYXJnKHJvdykpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXM7XG59O1xuXG5cbi8vXG4vLyBjb21iaW5lTGlzdCBpcyBhcnJheSBvZiBvYmplY3RzOlxuLy9cbi8vIHtcbi8vICAgICBjaXJjdWl0OiA8UXVhbnR1bUNpcmN1aXQ+XG4vLyAgICAgd2lyZXM6IFswLCAxLCAyXSAvLyBhcnJheSBvZiBkZXN0aW5hdGlvbiBxdWJpdHMgKGZvciBlYWNoIHdpcmUgaW4gZ2l2ZW4gY2lyY3VpdClcbi8vIH1cbi8vXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5zZXRDb21iaW5lZFN0YXRlID0gZnVuY3Rpb24oY29tYmluZUxpc3QpIHtcblx0dmFyIG5ld1N0YXRlID0ge307XG5cdHZhciBuZXdTdGF0ZUJpdHMgPSAwO1xuXHR2YXIgdG90YWxRdWJpdHMgPSAwO1xuXHRmb3IodmFyIGl0ZW1JbmRleCA9IDA7IGl0ZW1JbmRleCA8IGNvbWJpbmVMaXN0Lmxlbmd0aDsgaXRlbUluZGV4KyspIHtcblx0XHR2YXIgaXRlbSA9IGNvbWJpbmVMaXN0W2l0ZW1JbmRleF07XG5cdFx0Ly8gY2FsY3VsYXRlIG51bWJlciBvZiBxdWJpdHMgYmFzZWQgb24gd2lyZU1hcFxuXHRcdGl0ZW0ud2lyZXMubWFwKGZ1bmN0aW9uKGRlc3QpIHtcblx0XHRcdGlmKGRlc3QgKyAxID4gdG90YWxRdWJpdHMpIHtcblx0XHRcdFx0dG90YWxRdWJpdHMgPSBkZXN0ICsgMTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHZhciBiaXRNYXBzID0gW107XG5cdGZvcih2YXIgaXRlbUluZGV4ID0gMDsgaXRlbUluZGV4IDwgY29tYmluZUxpc3QubGVuZ3RoOyBpdGVtSW5kZXgrKykge1xuXHRcdHZhciBpdGVtID0gY29tYmluZUxpc3RbaXRlbUluZGV4XTtcblxuXHRcdHZhciBjbWFwID0gW107XG5cdFx0aXRlbS53aXJlcy5tYXAoZnVuY3Rpb24oZGVzdCwgc291cmNlKSB7XG5cdFx0XHRjbWFwLnB1c2goe1xuXHRcdFx0XHRhbmQ6IDEgPDwgKCh0b3RhbFF1Yml0cyAtIDEpIC0gZGVzdCksXG5cdFx0XHRcdG9yOiAxIDw8ICgoaXRlbS5jaXJjdWl0Lm51bVF1Yml0cyAtIDEpIC0gc291cmNlKVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHRiaXRNYXBzLnB1c2goY21hcCk7XG5cdH1cblxuXHR2YXIgbjMgPSAxIDw8IHRvdGFsUXViaXRzO1xuXHRmb3IodmFyIGEzID0gMDsgYTMgPCBuMzsgYTMrKykge1xuXHRcdHZhciBzMyA9IG51bGw7XG5cdFx0Zm9yKHZhciBpdGVtSW5kZXggPSAwOyBpdGVtSW5kZXggPCBjb21iaW5lTGlzdC5sZW5ndGg7IGl0ZW1JbmRleCsrKSB7XG5cdFx0XHR2YXIgbWFwID0gYml0TWFwc1tpdGVtSW5kZXhdO1xuXG5cdFx0XHR2YXIgYTEgPSAwO1xuXHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IG1hcC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZihhMyAmIG1hcFtpXS5hbmQpIHtcblx0XHRcdFx0XHRhMSB8PSBtYXBbaV0ub3I7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0dmFyIGl0ZW0gPSBjb21iaW5lTGlzdFtpdGVtSW5kZXhdO1xuXHRcdFx0dmFyIHMxID0gaXRlbS5jaXJjdWl0LnN0YXRlW2ExXTtcblx0XHRcdGlmKHMxKSB7XG5cdFx0XHRcdGlmKHMzID09IG51bGwpIHtcblx0XHRcdFx0XHRzMyA9IHMxO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHMzID0gbWF0aC5tdWx0aXBseShzMSwgczMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzMyA9IG1hdGguY29tcGxleCgwLCAwKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZihzMyAmJiAoczMucmUgfHwgczMuaW0pKSB7XG5cdFx0XHRuZXdTdGF0ZVthM10gPSBzMztcblx0XHRcdG5ld1N0YXRlQml0cyB8PSBhMztcblx0XHR9XG5cdH1cblxuXHR0aGlzLnJlc2V0U3RhdGUoKTtcblx0Ly8gZXhwYW5kIGNpcmN1aXQgaWYgbmVlZGVkXG5cdGlmKHRoaXMubnVtUXViaXRzIDwgdG90YWxRdWJpdHMpIHtcblx0XHR0aGlzLm51bVF1Yml0cyA9IHRvdGFsUXViaXRzO1xuXG5cdFx0d2hpbGUodGhpcy5nYXRlcy5sZW5ndGggPCB0aGlzLm51bVF1Yml0cykge1xuXHRcdFx0dGhpcy5nYXRlcy5wdXNoKFtdKTtcblx0XHR9XG5cblx0XHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLmdhdGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR3aGlsZSh0aGlzLmdhdGVzW2ldLmxlbmd0aCA8IG51bUNvbHMpIHtcblx0XHRcdFx0dGhpcy5nYXRlc1tpXS5wdXNoKG51bGwpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHRoaXMuc3RhdGUgPSBuZXdTdGF0ZTtcblx0dGhpcy5zdGF0ZUJpdHMgPSBuZXdTdGF0ZUJpdHM7XG5cblx0aWYodGhpcy5zdGF0ZUJpdHMgPT0gMCAmJiBPYmplY3Qua2V5cyh0aGlzLnN0YXRlKS5sZW5ndGggPT0gMCkge1xuXHRcdHRoaXMuc3RhdGVbXCIwXCJdID0gbWF0aC5jb21wbGV4KDEsIDApO1xuXHR9XG59O1xuXG4vL1xuLy8gQ29tYmluZXMgc3RhdGUgdmVjdG9ycyBvZiB0d28gZXZhbHVhdGVkIGNpcmN1aXRzIGFuZCBzdG9yZXMgcmVzdWx0aW5nIHZlY3RvciBpbnRvIHRoaXMuXG4vL1xuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLl9zZXRDb21iaW5lZFN0YXRlID0gZnVuY3Rpb24oYzEsIGMyLCBvcHRpb25zKSB7XG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdHZhciBxMSA9IGMxLm51bVF1Yml0cztcblx0dmFyIHEyID0gYzIubnVtUXViaXRzO1xuXG5cdC8vIGNyZWF0ZSB3aXJlTWFwIGlmIG5vdCBwcm92aWRlZFxuXHRpZighb3B0aW9ucy53aXJlTWFwKSB7XG5cdFx0b3B0aW9ucy53aXJlTWFwID0ge1xuXHRcdFx0YzE6IFtdLFxuXHRcdFx0YzI6IFtdXG5cdFx0fVxuXG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IHExOyBpKyspIHtcblx0XHRcdG9wdGlvbnMud2lyZU1hcC5jMS5wdXNoKGkpO1xuXHRcdH1cblxuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBxMjsgaSsrKSB7XG5cdFx0XHRvcHRpb25zLndpcmVNYXAuYzIucHVzaChpICsgcTEpO1xuXHRcdH1cblx0fVxuXG5cdC8vIGNhbGN1bGF0ZSBudW1iZXIgb2YgcXViaXRzIGJhc2VkIG9uIHdpcmVNYXBcblx0dmFyIHEzID0gMDtcblx0b3B0aW9ucy53aXJlTWFwLmMxLm1hcChmdW5jdGlvbihkZXN0KSB7XG5cdFx0aWYoZGVzdCArIDEgPiBxMykge1xuXHRcdFx0cTMgPSBkZXN0ICsgMTtcblx0XHR9XG5cdH0pO1xuXHRvcHRpb25zLndpcmVNYXAuYzIubWFwKGZ1bmN0aW9uKGRlc3QpIHtcblx0XHRpZihkZXN0ICsgMSA+IHEzKSB7XG5cdFx0XHRxMyA9IGRlc3QgKyAxO1xuXHRcdH1cblx0fSk7XG5cblx0Ly8gY3JlYXRlIGJpdCBtYXAgZm9yIGNpcmN1aXQgMVxuXHR2YXIgYzFtYXAgPSBbXTtcblx0b3B0aW9ucy53aXJlTWFwLmMxLm1hcChmdW5jdGlvbihkZXN0LCBzb3VyY2UpIHtcblx0XHRjMW1hcC5wdXNoKHsgYW5kOiAxIDw8ICgocTMgLSAxKSAtIGRlc3QpLCBvcjogMSA8PCAoKHExIC0gMSkgLSBzb3VyY2UpIH0pO1xuXHR9KTtcblxuXHQvLyBjcmVhdGUgYml0IG1hcCBmb3IgY2lyY3VpdCAyXG5cdHZhciBjMm1hcCA9IFtdO1xuXHRvcHRpb25zLndpcmVNYXAuYzIubWFwKGZ1bmN0aW9uKGRlc3QsIHNvdXJjZSkge1xuXHRcdGMybWFwLnB1c2goeyBhbmQ6IDEgPDwgKChxMyAtIDEpIC0gZGVzdCksIG9yOiAxIDw8ICgocTIgLSAxKSAtIHNvdXJjZSkgfSk7XG5cdH0pO1xuXG5cdHZhciB1bnVzZWQgPSAwO1xuXHRmb3IodmFyIGkgPSAwOyBpIDwgcTM7IGkrKykge1xuXHRcdGlmKG9wdGlvbnMud2lyZU1hcC5jMS5pbmRleE9mKGkpIDwgMCAmJiBvcHRpb25zLndpcmVNYXAuYzIuaW5kZXhPZihpKSA8IDApIHtcblx0XHRcdHVudXNlZCB8PSAxIDw8ICgocTMgLSAxKSAtIGkpO1xuXHRcdH1cblx0fVxuXG5cdHZhciBuZXdTdGF0ZSA9IHt9O1xuXHR2YXIgbmV3U3RhdGVCaXRzID0gMDtcblxuXHR2YXIgbjMgPSAxIDw8IHEzO1xuXHRmb3IodmFyIGEzID0gMDsgYTMgPCBuMzsgYTMrKykge1xuXHRcdGlmKCEoYTMgJiB1bnVzZWQpKSB7XG5cdFx0XHR2YXIgYTEgPSAwO1xuXHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGMxbWFwLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmKGEzICYgYzFtYXBbaV0uYW5kKSBhMSB8PSBjMW1hcFtpXS5vcjtcblx0XHRcdH1cblxuXHRcdFx0dmFyIGEyID0gMDtcblx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBjMm1hcC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZihhMyAmIGMybWFwW2ldLmFuZCkgYTIgfD0gYzJtYXBbaV0ub3I7XG5cdFx0XHR9XG5cblx0XHRcdHZhciBzMSA9IGMxLnN0YXRlW2ExXTtcblx0XHRcdGlmKHMxKSB7XG5cdFx0XHRcdHZhciBzMiA9IGMyLnN0YXRlW2EyXTtcblx0XHRcdFx0aWYoczIpIHtcblx0XHRcdFx0XHR2YXIgczMgPSBtYXRoLm11bHRpcGx5KHMxLCBzMik7XG5cdFx0XHRcdFx0aWYoczMucmUgfHwgczMuaW0pIHtcblx0XHRcdFx0XHRcdG5ld1N0YXRlW2EzXSA9IHMzO1xuXHRcdFx0XHRcdFx0bmV3U3RhdGVCaXRzIHw9IGEzO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHRoaXMucmVzZXRTdGF0ZSgpO1xuXHQvLyBleHBhbmQgY2lyY3VpdCBpZiBuZWVkZWRcblx0aWYodGhpcy5udW1RdWJpdHMgPCBxMykge1xuXHRcdHRoaXMubnVtUXViaXRzID0gcTM7XG5cblx0XHR3aGlsZSh0aGlzLmdhdGVzLmxlbmd0aCA8IHRoaXMubnVtUXViaXRzKSB7XG5cdFx0XHR0aGlzLmdhdGVzLnB1c2goW10pO1xuXHRcdH1cblx0XHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLmdhdGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR3aGlsZSh0aGlzLmdhdGVzW2ldLmxlbmd0aCA8IG51bUNvbHMpIHtcblx0XHRcdFx0dGhpcy5nYXRlc1tpXS5wdXNoKG51bGwpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHRoaXMuc3RhdGUgPSBuZXdTdGF0ZTtcblx0dGhpcy5zdGF0ZUJpdHMgPSBuZXdTdGF0ZUJpdHM7XG5cblx0aWYodGhpcy5zdGF0ZUJpdHMgPT0gMCAmJiBPYmplY3Qua2V5cyh0aGlzLnN0YXRlKS5sZW5ndGggPT0gMCkge1xuXHRcdHRoaXMuc3RhdGVbXCIwXCJdID0gbWF0aC5jb21wbGV4KDEsIDApO1xuXHR9XG59O1xuXG4vLyBBZGQgcXViaXRzIHByZXNlcnZpbmcgc3RhdGVcblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5hcHBlbmRRdWJpdHMgPSBmdW5jdGlvbihudW1RdWJpdHMpIHtcblx0dmFyIGMgPSBuZXcgUXVhbnR1bUNpcmN1aXQobnVtUXViaXRzKTtcblx0dGhpcy5fc2V0Q29tYmluZWRTdGF0ZSh0aGlzLCBjKTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5udW1BbXBsaXR1ZGVzID0gZnVuY3Rpb24ob25seVBvc3NpYmxlKSB7XG5cdGlmKG9ubHlQb3NzaWJsZSkge1xuXHRcdHZhciBwb3NzaWJsZUNvdW50ID0gMDtcblx0XHRmb3IodmFyIGlzIGluIHRoaXMuc3RhdGUpIHtcblx0XHRcdHZhciBzdGF0ZSA9IG1hdGgucm91bmQodGhpcy5zdGF0ZVtpc10sIDE0KTtcblx0XHRcdGlmKHN0YXRlLnJlIHx8IHN0YXRlLmltKSB7XG5cdFx0XHRcdHBvc3NpYmxlQ291bnQrKztcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHBvc3NpYmxlQ291bnQ7XG5cdH1cblxuXHRyZXR1cm4gbWF0aC5wb3coMiwgdGhpcy5udW1RdWJpdHMpO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLm51bUNvbHMgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuZ2F0ZXMubGVuZ3RoID8gdGhpcy5nYXRlc1swXS5sZW5ndGggOiAwO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLm51bUdhdGVzID0gZnVuY3Rpb24oZGVjb21wb3NlKSB7XG5cdHZhciBjaXJjdWl0ID0gbnVsbDtcblx0aWYoZGVjb21wb3NlKSB7XG5cdFx0Y2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRcdGNpcmN1aXQubG9hZCh0aGlzLnNhdmUodHJ1ZSkpO1xuXHR9IGVsc2Uge1xuXHRcdGNpcmN1aXQgPSB0aGlzO1xuXHR9XG5cblx0dmFyIG51bUdhdGVzID0gMDtcblx0dmFyIG51bUNvbHMgPSBjaXJjdWl0Lm51bUNvbHMoKTtcblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBjaXJjdWl0Lm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGNpcmN1aXQuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0bnVtR2F0ZXMrKztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbnVtR2F0ZXM7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuaXNFbXB0eUNlbGwgPSBmdW5jdGlvbihjb2wsIHdpcmUpIHtcblx0aWYodGhpcy5nYXRlc1t3aXJlXSAmJiB0aGlzLmdhdGVzW3dpcmVdW2NvbF0pIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRmb3IodmFyIHcgPSAwOyB3IDwgdGhpcy5udW1RdWJpdHM7IHcrKykge1xuXHRcdHZhciBnYXRlID0gdGhpcy5nZXRHYXRlQXQoY29sLCB3KTtcblx0XHRpZihnYXRlKSB7XG5cdFx0XHRpZihnYXRlLm5hbWUgPT0gXCJtZWFzdXJlXCIgfHwgKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZykgfHwgKE1hdGgubWluLmFwcGx5KG51bGwsIGdhdGUud2lyZXMpIDwgd2lyZSAmJiBNYXRoLm1heC5hcHBseShudWxsLCBnYXRlLndpcmVzKSA+IHdpcmUpKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5pc0VtcHR5UGxhY2UgPSBmdW5jdGlvbihjb2wsIHdpcmVzLCB1c2luZ0NyZWdzKSB7XG5cdHZhciBtaW5XaXJlID0gTWF0aC5taW4uYXBwbHkobnVsbCwgd2lyZXMpO1xuXHR2YXIgbWF4V2lyZSA9IE1hdGgubWF4LmFwcGx5KG51bGwsIHdpcmVzKTtcblxuXHRpZih1c2luZ0NyZWdzKSB7XG5cdFx0dmFyIG14ID0gdGhpcy5udW1RdWJpdHMgLSAxO1xuXHRcdGlmKG14ID4gbWF4V2lyZSkge1xuXHRcdFx0bWF4V2lyZSA9IG14O1xuXHRcdH1cblx0fVxuXG5cdHZhciBhbGxFbXB0eSA9IHRydWU7XG5cdGZvcih2YXIgd2lyZSA9IG1pbldpcmU7IHdpcmUgPD0gbWF4V2lyZTsgd2lyZSsrKSB7XG5cdFx0aWYoIXRoaXMuaXNFbXB0eUNlbGwoY29sLCB3aXJlKSkge1xuXHRcdFx0YWxsRW1wdHkgPSBmYWxzZTtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBhbGxFbXB0eTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5sYXN0Tm9uRW1wdHlQbGFjZSA9IGZ1bmN0aW9uKHdpcmVzLCB1c2luZ0NyZWdzKSB7XG5cdHZhciBjb2wgPSB0aGlzLm51bUNvbHMoKTtcblx0dmFyIGFsbEVtcHR5ID0gdHJ1ZTtcblxuXHR2YXIgbWluV2lyZSA9IE1hdGgubWluLmFwcGx5KG51bGwsIHdpcmVzKTtcblx0dmFyIG1heFdpcmUgPSBNYXRoLm1heC5hcHBseShudWxsLCB3aXJlcyk7XG5cblx0aWYodXNpbmdDcmVncykge1xuXHRcdHZhciBteCA9IHRoaXMubnVtUXViaXRzIC0gMTtcblx0XHRpZihteCA+IG1heFdpcmUpIHtcblx0XHRcdG1heFdpcmUgPSBteDtcblx0XHR9XG5cdH1cblxuXHR3aGlsZShhbGxFbXB0eSAmJiBjb2wtLSkge1xuXHRcdGZvcih2YXIgd2lyZSA9IG1pbldpcmU7IHdpcmUgPD0gbWF4V2lyZTsgd2lyZSsrKSB7XG5cdFx0XHRpZighdGhpcy5pc0VtcHR5Q2VsbChjb2wsIHdpcmUpKSB7XG5cdFx0XHRcdGFsbEVtcHR5ID0gZmFsc2U7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBjb2w7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuaW5zZXJ0Q29sdW1uID0gZnVuY3Rpb24oY29sSW5kZXgpIHtcblx0Zm9yKHZhciBpID0gMDsgaSA8IHRoaXMubnVtUXViaXRzOyBpKyspIHtcblx0XHR0aGlzLmdhdGVzW2ldLnNwbGljZShjb2xJbmRleCB8fCAwLCAwLCBudWxsKTtcblx0fVxufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnJhbmRvbVN0cmluZyA9IGZ1bmN0aW9uKGxlbikge1xuXHRsZW4gPSBsZW4gfHwgMTc7XG5cblx0dmFyIHRleHQgPSBcIlwiO1xuXHQvLyBsZXQgZmlyc3QgY2hhciB0byBiZSBsZXR0ZXJcblx0dmFyIGNoYXJzZXQgPSBcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpcIjtcblx0dGV4dCArPSBjaGFyc2V0LmNoYXJBdChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjaGFyc2V0Lmxlbmd0aCkpO1xuXG5cdC8vIG90aGVyIGNoYXJzIGNhbiBiZSBsZXR0ZXJzIGFuZCBudW1iZXJzXG5cdGNoYXJzZXQgKz0gXCIwMTIzNDU2Nzg5XCI7XG5cdGZvcih2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHRcdHRleHQgKz0gY2hhcnNldC5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY2hhcnNldC5sZW5ndGgpKTtcblx0fVxuXG5cdHJldHVybiB0ZXh0O1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuYWRkR2F0ZSA9IGZ1bmN0aW9uKGdhdGVOYW1lLCBjb2x1bW4sIHdpcmVzLCBvcHRpb25zKSB7XG5cdHZhciB3aXJlTGlzdCA9IFtdO1xuXHRpZihBcnJheS5pc0FycmF5KHdpcmVzKSkge1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCB3aXJlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0d2lyZUxpc3QucHVzaCh3aXJlc1tpXSk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHdpcmVMaXN0LnB1c2god2lyZXMpO1xuXHR9XG5cblx0aWYoY29sdW1uIDwgMCkge1xuXHRcdGNvbHVtbiA9IHRoaXMubGFzdE5vbkVtcHR5UGxhY2Uod2lyZUxpc3QsIGdhdGVOYW1lID09IFwibWVhc3VyZVwiIHx8IChvcHRpb25zICYmIG9wdGlvbnMuY29uZGl0aW9uICYmIG9wdGlvbnMuY29uZGl0aW9uLmNyZWcpKSArIDE7XG5cdH1cblxuXHR2YXIgbnVtQ29ubmVjdG9ycyA9IHdpcmVMaXN0Lmxlbmd0aDtcblx0dmFyIGlkID0gdGhpcy5yYW5kb21TdHJpbmcoKTtcblx0Zm9yKHZhciBjb25uZWN0b3IgPSAwOyBjb25uZWN0b3IgPCBudW1Db25uZWN0b3JzOyBjb25uZWN0b3IrKykge1xuXHRcdHZhciB3aXJlID0gd2lyZUxpc3RbY29ubmVjdG9yXTtcblxuXHRcdGlmKCh3aXJlICsgMSkgPiB0aGlzLm51bVF1Yml0cykge1xuXHRcdFx0dGhpcy5udW1RdWJpdHMgPSB3aXJlICsgMTtcblx0XHR9XG5cblx0XHR3aGlsZSh0aGlzLmdhdGVzLmxlbmd0aCA8IHRoaXMubnVtUXViaXRzKSB7XG5cdFx0XHR0aGlzLmdhdGVzLnB1c2goW10pO1xuXHRcdH1cblxuXHRcdHZhciBudW1Db2xzID0gdGhpcy5udW1Db2xzKCk7XG5cdFx0aWYoKGNvbHVtbiArIDEpID4gbnVtQ29scykge1xuXHRcdFx0bnVtQ29scyA9IGNvbHVtbiArIDE7XG5cdFx0fVxuXG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IHRoaXMuZ2F0ZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHdoaWxlKHRoaXMuZ2F0ZXNbaV0ubGVuZ3RoIDwgbnVtQ29scykge1xuXHRcdFx0XHR0aGlzLmdhdGVzW2ldLnB1c2gobnVsbCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIGdhdGUgPSB7XG5cdFx0XHRpZDogaWQsXG5cdFx0XHRuYW1lOiBnYXRlTmFtZSxcblx0XHRcdGNvbm5lY3RvcjogY29ubmVjdG9yLFxuXHRcdFx0b3B0aW9uczoge31cblx0XHR9XG5cblx0XHRpZihvcHRpb25zKSB7XG5cdFx0XHRnYXRlLm9wdGlvbnMgPSBvcHRpb25zO1xuXG5cdFx0XHQvLyBleHRlbmQgY3JlZyBpZiByZXF1aXJlZFxuXHRcdFx0aWYob3B0aW9ucy5jcmVnICYmIG9wdGlvbnMuY3JlZ1tcIm5hbWVcIl0gJiYgdHlwZW9mIG9wdGlvbnMuY3JlZ1tcImJpdFwiXSAhPSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHRcdHZhciBjcmVnQml0ID0gcGFyc2VJbnQob3B0aW9ucy5jcmVnLmJpdCB8fCAwKTtcblx0XHRcdFx0aWYoaXNOYU4oY3JlZ0JpdCkpIHtcblx0XHRcdFx0XHRjcmVnQml0ID0gMDtcblx0XHRcdFx0fVxuXHRcdFx0XHR2YXIgZXhpc3RpbmdDcmVnID0gdGhpcy5jcmVnc1tvcHRpb25zLmNyZWcubmFtZV0gfHwgW107XG5cdFx0XHRcdHZhciBjdXJyZW50VmFsdWUgPSAoZXhpc3RpbmdDcmVnLmxlbmd0aCA+IGNyZWdCaXQpID8gZXhpc3RpbmdDcmVnW29wdGlvbnMuY3JlZy5iaXRdIDogMDtcblx0XHRcdFx0dGhpcy5zZXRDcmVnQml0KG9wdGlvbnMuY3JlZy5uYW1lLCBjcmVnQml0LCBjdXJyZW50VmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMuZ2F0ZXNbd2lyZV1bY29sdW1uXSA9IGdhdGU7XG5cdH1cblx0cmV0dXJuIGlkO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmFwcGVuZEdhdGUgPSBmdW5jdGlvbihnYXRlTmFtZSwgd2lyZXMsIG9wdGlvbnMpIHtcblx0cmV0dXJuIHRoaXMuYWRkR2F0ZShnYXRlTmFtZSwgLTEsIHdpcmVzLCBvcHRpb25zKTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmluc2VydEdhdGUgPSBmdW5jdGlvbihnYXRlTmFtZSwgY29sdW1uLCB3aXJlcywgb3B0aW9ucykge1xuXHR2YXIgd2lyZUxpc3QgPSBbXTtcblx0aWYoQXJyYXkuaXNBcnJheSh3aXJlcykpIHtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgd2lyZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHdpcmVMaXN0LnB1c2god2lyZXNbaV0pO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHR3aXJlTGlzdC5wdXNoKHdpcmVzKTtcblx0fVxuXG5cdGlmKGNvbHVtbiA8IDApIHtcblx0XHRjb2x1bW4gPSB0aGlzLmxhc3ROb25FbXB0eVBsYWNlKHdpcmVMaXN0LCAoISFnYXRlTmFtZSAmJiBnYXRlTmFtZSA9PSBcIm1lYXN1cmVcIikgfHwgKG9wdGlvbnMgJiYgb3B0aW9ucy5jb25kaXRpb24gJiYgb3B0aW9ucy5jb25kaXRpb24uY3JlZykpICsgMTtcblx0fVxuXG5cdHZhciBzcGFjZUlzRW1wdHkgPSB0cnVlO1xuXHR2YXIgbnVtQ29ubmVjdG9ycyA9IHdpcmVMaXN0Lmxlbmd0aDtcblx0Zm9yKHZhciBjb25uZWN0b3IgPSAwOyBjb25uZWN0b3IgPCBudW1Db25uZWN0b3JzOyBjb25uZWN0b3IrKykge1xuXHRcdHZhciB3aXJlID0gd2lyZUxpc3RbY29ubmVjdG9yXTtcblxuXHRcdGlmKCh3aXJlICsgMSkgPiB0aGlzLm51bVF1Yml0cykge1xuXHRcdFx0dGhpcy5udW1RdWJpdHMgPSB3aXJlICsgMTtcblx0XHR9XG5cblx0XHR3aGlsZSh0aGlzLmdhdGVzLmxlbmd0aCA8IHRoaXMubnVtUXViaXRzKSB7XG5cdFx0XHR0aGlzLmdhdGVzLnB1c2goW10pO1xuXHRcdH1cblxuXHRcdHZhciBudW1Db2xzID0gdGhpcy5udW1Db2xzKCk7XG5cdFx0aWYoKGNvbHVtbiArIDEpID4gbnVtQ29scykge1xuXHRcdFx0bnVtQ29scyA9IGNvbHVtbiArIDE7XG5cdFx0fVxuXG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IHRoaXMuZ2F0ZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHdoaWxlKHRoaXMuZ2F0ZXNbaV0ubGVuZ3RoIDwgbnVtQ29scykge1xuXHRcdFx0XHR0aGlzLmdhdGVzW2ldLnB1c2gobnVsbCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYoIXRoaXMuaXNFbXB0eVBsYWNlKGNvbHVtbiwgd2lyZUxpc3QsICghIWdhdGVOYW1lICYmIGdhdGVOYW1lID09IFwibWVhc3VyZVwiKSB8fCAob3B0aW9ucyAmJiBvcHRpb25zLmNvbmRpdGlvbiAmJiBvcHRpb25zLmNvbmRpdGlvbi5jcmVnKSkpIHtcblx0XHR0aGlzLmluc2VydENvbHVtbihjb2x1bW4pO1xuXHR9XG5cblx0dmFyIGlkID0gbnVsbDtcblx0aWYoZ2F0ZU5hbWUpIHtcblx0XHRpZCA9IHRoaXMuYWRkR2F0ZShnYXRlTmFtZSwgY29sdW1uLCB3aXJlTGlzdCwgb3B0aW9ucyk7XG5cdH1cblx0cmV0dXJuIGlkO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmluc2VydFNwYWNlID0gZnVuY3Rpb24oY29sdW1uLCB3aXJlcykge1xuXHRyZXR1cm4gdGhpcy5pbnNlcnRHYXRlKG51bGwsIGNvbHVtbiwgd2lyZXMsIG51bGwpO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucmVtb3ZlR2F0ZUF0ID0gZnVuY3Rpb24oY29sdW1uLCB3aXJlKSB7XG5cdGlmKCF0aGlzLmdhdGVzW3dpcmVdKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dmFyIGdhdGUgPSB0aGlzLmdhdGVzW3dpcmVdW2NvbHVtbl07XG5cdGlmKCFnYXRlKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dmFyIGlkID0gZ2F0ZS5pZDtcblxuXHR2YXIgbnVtV2lyZXMgPSB0aGlzLmdhdGVzLmxlbmd0aDtcblx0Zm9yKHZhciB3ID0gMDsgdyA8IG51bVdpcmVzOyB3KyspIHtcblx0XHR2YXIgY2VsbCA9IHRoaXMuZ2F0ZXNbd11bY29sdW1uXTtcblx0XHRpZihjZWxsICYmIGNlbGwuaWQgPT0gaWQpIHtcblx0XHRcdHRoaXMuZ2F0ZXNbd11bY29sdW1uXSA9IG51bGw7XG5cdFx0fVxuXHR9XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucmVtb3ZlR2F0ZSA9IGZ1bmN0aW9uKGdhdGVJZCkge1xuXHR2YXIgZ2F0ZVBvcyA9IHRoaXMuZ2V0R2F0ZVBvc0J5SWQoZ2F0ZUlkKTtcblx0aWYoIWdhdGVQb3MgfHwgZ2F0ZVBvcy5jb2wgPCAwIHx8ICFnYXRlUG9zLndpcmVzLmxlbmd0aCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMucmVtb3ZlR2F0ZUF0KGdhdGVQb3MuY29sLCBnYXRlUG9zLndpcmVzWzBdKTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmFkZE1lYXN1cmUgPSBmdW5jdGlvbih3aXJlLCBjcmVnLCBjYml0KSB7XG5cdHRoaXMuYWRkR2F0ZShcIm1lYXN1cmVcIiwgLTEsIHdpcmUsIHsgY3JlZzogeyBuYW1lOiBjcmVnLCBiaXQ6IGNiaXQgfSB9KTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5hcHBlbmRDaXJjdWl0ID0gZnVuY3Rpb24oY2lyY3VpdCwgcGFjaykge1xuXHR2YXIgY29sT2Zmc2V0ID0gdGhpcy5udW1Db2xzKCk7XG5cblx0dmFyIG51bUNvbHMgPSBjaXJjdWl0Lm51bUNvbHMoKTtcblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBjaXJjdWl0Lm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGNpcmN1aXQuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblxuXHRcdFx0XHRpZighdGhpcy5iYXNpY0dhdGVzW2dhdGUubmFtZV0gJiYgY2lyY3VpdC5jdXN0b21HYXRlc1tnYXRlLm5hbWVdKSB7XG5cdFx0XHRcdFx0dGhpcy5yZWdpc3RlckdhdGUoZ2F0ZS5uYW1lLCBjaXJjdWl0LmN1c3RvbUdhdGVzW2dhdGUubmFtZV0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5hZGRHYXRlKGdhdGUubmFtZSwgY29sdW1uICsgY29sT2Zmc2V0LCBnYXRlLndpcmVzLCBnYXRlLm9wdGlvbnMpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxuXG5cblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucmVtb3ZlVHJhaWxpbmdDb2x1bW5zID0gZnVuY3Rpb24oKSB7XG5cdHZhciBudW1Db2xzID0gdGhpcy5udW1Db2xzKCk7XG5cdGZvcih2YXIgY29sdW1uID0gbnVtQ29scyAtIDE7IGNvbHVtbiA+PSAwOyBjb2x1bW4tLSkge1xuXHRcdHZhciBpc0VtcHR5Q29sID0gdHJ1ZTtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSB0aGlzLmdhdGVzW3dpcmVdW2NvbHVtbl07XG5cdFx0XHRpZihnYXRlKSB7XG5cdFx0XHRcdGlzRW1wdHlDb2wgPSBmYWxzZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYoIWlzRW1wdHlDb2wpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dGhpcy5nYXRlc1t3aXJlXS5wb3AoKTtcblx0XHR9XG5cdH1cbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5yZW1vdmVMZWFkaW5nQ29sdW1ucyA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgZW1wdHlDb3VudCA9IDA7XG5cdHZhciBudW1Db2xzID0gdGhpcy5udW1Db2xzKCk7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHR2YXIgaXNFbXB0eUNvbCA9IHRydWU7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gdGhpcy5nYXRlc1t3aXJlXVtjb2x1bW5dO1xuXHRcdFx0aWYoZ2F0ZSkge1xuXHRcdFx0XHRpc0VtcHR5Q29sID0gZmFsc2U7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmKCFpc0VtcHR5Q29sKSB7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cblx0XHRlbXB0eUNvdW50Kys7XG5cdH1cblxuXHRmb3IodmFyIGkgPSAwOyBpIDwgZW1wdHlDb3VudDsgaSsrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHRoaXMuZ2F0ZXNbd2lyZV0uc2hpZnQoKTtcblx0XHR9XG5cdH1cbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5yZW1vdmVUcmFpbGluZ1Jvd3MgPSBmdW5jdGlvbigpIHtcblx0dmFyIG51bUNvbHMgPSB0aGlzLm51bUNvbHMoKTtcblx0Zm9yKHZhciB3aXJlID0gdGhpcy5udW1RdWJpdHMgLSAxOyB3aXJlID49IDA7IHdpcmUtLSkge1xuXHRcdHZhciBpc0VtcHR5Um93ID0gdHJ1ZTtcblx0XHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IHRoaXMuZ2F0ZXNbd2lyZV1bY29sdW1uXTtcblx0XHRcdGlmKGdhdGUpIHtcblx0XHRcdFx0aXNFbXB0eVJvdyA9IGZhbHNlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZighaXNFbXB0eVJvdykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLmdhdGVzLnBvcCgpO1xuXHRcdHRoaXMubnVtUXViaXRzLS07XG5cdH1cbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5yZW1vdmVRdWJpdCA9IGZ1bmN0aW9uKHdpcmUpIHtcblx0aWYoIXRoaXMuZ2F0ZXNbd2lyZV0pIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLnJlc2V0U3RhdGUoKTtcblxuXHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHRmb3IodmFyIGNvbCA9IDA7IGNvbCA8IG51bUNvbHM7IGNvbCsrKSB7XG5cdFx0dGhpcy5yZW1vdmVHYXRlQXQoY29sLCB3aXJlKTtcblx0fVxuXG5cdGZvcih2YXIgdyA9IHdpcmUgKyAxOyB3IDwgdGhpcy5udW1RdWJpdHM7IHcrKykge1xuXHRcdGZvcih2YXIgY29sID0gMDsgY29sIDwgbnVtQ29sczsgY29sKyspIHtcblx0XHRcdHRoaXMuZ2F0ZXNbdyAtIDFdW2NvbF0gPSB0aGlzLmdhdGVzW3ddW2NvbF07XG5cdFx0fVxuXHR9XG5cblx0dGhpcy5nYXRlcy5wb3AoKTtcblx0dGhpcy5udW1RdWJpdHMtLTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmZsaXBWZXJ0aWNhbGx5ID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMucmVzZXRTdGF0ZSgpO1xuXG5cdHZhciBudW1Db2xzID0gdGhpcy5udW1Db2xzKCk7XG5cdHZhciBsYXN0UXViaXQgPSB0aGlzLm51bVF1Yml0cyAtIDE7XG5cdGZvcih2YXIgdyA9IDA7IHcgPCB0aGlzLm51bVF1Yml0cyAvIDI7IHcrKykge1xuXHRcdGZvcih2YXIgY29sID0gMDsgY29sIDwgbnVtQ29sczsgY29sKyspIHtcblx0XHRcdHZhciB0bXAgPSB0aGlzLmdhdGVzW3ddW2NvbF07XG5cdFx0XHR0aGlzLmdhdGVzW3ddW2NvbF0gPSB0aGlzLmdhdGVzW2xhc3RRdWJpdCAtIHddW2NvbF07XG5cdFx0XHR0aGlzLmdhdGVzW2xhc3RRdWJpdCAtIHddW2NvbF0gPSB0bXA7XG5cdFx0fVxuXHR9XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZmxpcEhvcml6b250YWxseSA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLnJlc2V0U3RhdGUoKTtcblxuXHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHR2YXIgbGFzdENvbCA9IG51bUNvbHMgLSAxO1xuXHRmb3IodmFyIHcgPSAwOyB3IDwgdGhpcy5udW1RdWJpdHM7IHcrKykge1xuXHRcdGZvcih2YXIgY29sID0gMDsgY29sIDwgbnVtQ29scyAvIDI7IGNvbCsrKSB7XG5cdFx0XHR2YXIgdG1wID0gdGhpcy5nYXRlc1t3XVtjb2xdO1xuXHRcdFx0dGhpcy5nYXRlc1t3XVtjb2xdID0gdGhpcy5nYXRlc1t3XVtsYXN0Q29sIC0gY29sXTtcblx0XHRcdHRoaXMuZ2F0ZXNbd11bbGFzdENvbCAtIGNvbF0gPSB0bXA7XG5cdFx0fVxuXHR9XG59O1xuXG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmFwcGx5VHJhbnNmb3JtID0gZnVuY3Rpb24oVSwgcXViaXRzKSB7XG5cdHZhciBuZXdTdGF0ZSA9IHt9O1xuXHR2YXIgbmV3U3RhdGVCaXRzID0gMDtcblxuXHQvLyBjbG9uZSBsaXN0IG9mIHdpcmVzIHRvIGl0c2VsZiAocmVtb3ZlIHJlZmVyZW5jZSB0byBvcmlnaW5hbCBhcnJheSlcblx0cXViaXRzID0gcXViaXRzLnNsaWNlKDApO1xuXG5cdC8vIHJldmVyc2UgYml0IG9yZGVyXG5cdGlmKHRoaXMucmV2ZXJzZUJpdE9yZGVyKSB7XG5cdFx0Ly8gY29udmVydCBpbmRleCBmcm9tIDAtYmFzZWQgdG8gZW5kLWJhc2VkXG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IHF1Yml0cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0cXViaXRzW2ldID0gKHRoaXMubnVtUXViaXRzIC0gMSkgLSBxdWJpdHNbaV07XG5cdFx0fVxuXHR9XG5cblx0cXViaXRzLnJldmVyc2UoKTtcblxuXHQvLyBsaXN0IG9mIHdpcmVzIG5vdCB1c2VkIGJ5IHRoaXMgZ2F0ZVxuXHR2YXIgdW51c2VkID0gW107XG5cdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLm51bVF1Yml0czsgaSsrKSB7XG5cdFx0aWYocXViaXRzLmluZGV4T2YoaSkgPCAwKSB7XG5cdFx0XHR1bnVzZWQucHVzaChpKTtcblx0XHR9XG5cdH1cblxuXHR2YXIgdW51c2VkQ291bnQgPSB1bnVzZWQubGVuZ3RoO1xuXHR2YXIgdW51c2VkU3BhY2UgPSAoMSA8PCB1bnVzZWRDb3VudCk7XG5cblx0ZnVuY3Rpb24gZ2V0RWxNYXNrKGVsKSB7XG5cdFx0dmFyIHJlcyA9IDA7XG5cdFx0cXViaXRzLm1hcChmdW5jdGlvbihxdWJpdCwgaW5kZXgpIHtcblx0XHRcdGlmKGVsICYgKDEgPDwgaW5kZXgpKSB7XG5cdFx0XHRcdHJlcyB8PSAoMSA8PCBxdWJpdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHJlcztcblx0fVxuXG5cdGZ1bmN0aW9uIGdldEluY01hc2soKSB7XG5cdFx0dmFyIHJlcyA9IDA7XG5cdFx0cXViaXRzLm1hcChmdW5jdGlvbihxdWJpdCwgaW5kZXgpIHtcblx0XHRcdHJlcyB8PSAoMSA8PCBxdWJpdCk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHJlcyArIDE7XG5cdH1cblxuXHRmdW5jdGlvbiBnZXROb3RNYXNrKCkge1xuXHRcdHZhciByZXMgPSAwO1xuXHRcdHVudXNlZC5tYXAoZnVuY3Rpb24ocXViaXQsIGluZGV4KSB7XG5cdFx0XHRyZXMgfD0gKDEgPDwgcXViaXQpO1xuXHRcdH0pO1xuXHRcdHJldHVybiByZXM7XG5cdH1cblxuXHR2YXIgWkVSTyA9IG1hdGguY29tcGxleCgwLCAwKTtcblxuXHRmb3IodmFyIGVscm93ID0gMDsgZWxyb3cgPCBVLmxlbmd0aDsgZWxyb3crKykge1xuXG5cdFx0dmFyIHJvd21hc2sgPSBnZXRFbE1hc2soZWxyb3cpO1xuXG5cdFx0Zm9yKHZhciBlbGNvbCA9IDA7IGVsY29sIDwgVVtlbHJvd10ubGVuZ3RoOyBlbGNvbCsrKSB7XG5cblx0XHRcdHZhciBjb2xtYXNrID0gZ2V0RWxNYXNrKGVsY29sKTtcblxuXHRcdFx0aWYoKHRoaXMuc3RhdGVCaXRzICYgY29sbWFzaykgPT0gY29sbWFzaykge1xuXG5cdFx0XHRcdHZhciB1dmFsID0gVVtlbHJvd11bZWxjb2xdO1xuXHRcdFx0XHRpZih1dmFsKSB7XG5cdFx0XHRcdFx0dmFyIHJvdyA9IHJvd21hc2s7XG5cdFx0XHRcdFx0dmFyIGNvbCA9IGNvbG1hc2s7XG5cblx0XHRcdFx0XHR2YXIgY291bnRlciA9IHVudXNlZFNwYWNlO1xuXHRcdFx0XHRcdHZhciBjb3VudGVybWFzayA9IGdldEVsTWFzaygwKTtcblx0XHRcdFx0XHR2YXIgaW5jbWFzayA9IGdldEluY01hc2soKTtcblx0XHRcdFx0XHR2YXIgbm90bWFzayA9IGdldE5vdE1hc2soKTtcblx0XHRcdFx0XHR2YXIgdG9vdGhsZXNzID0gY291bnRlcm1hc2s7XG5cdFx0XHRcdFx0d2hpbGUoY291bnRlci0tKSB7XG5cdFx0XHRcdFx0XHR2YXIgc3RhdGUgPSB0aGlzLnN0YXRlW2NvbF07XG5cdFx0XHRcdFx0XHRpZihzdGF0ZSkge1xuXHRcdFx0XHRcdFx0XHRyb3cgPSB0b290aGxlc3MgfCByb3dtYXNrO1xuXG5cdFx0XHRcdFx0XHRcdGlmKHV2YWwgPT0gMSkge1xuXHRcdFx0XHRcdFx0XHRcdG5ld1N0YXRlW3Jvd10gPSBtYXRoLmFkZChuZXdTdGF0ZVtyb3ddIHx8IFpFUk8sIHN0YXRlKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRuZXdTdGF0ZVtyb3ddID0gbWF0aC5hZGQobmV3U3RhdGVbcm93XSB8fCBaRVJPLCBtYXRoLm11bHRpcGx5KHV2YWwsIHN0YXRlKSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0bmV3U3RhdGVCaXRzIHw9IHJvdztcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0dG9vdGhsZXNzID0gKHRvb3RobGVzcyArIGluY21hc2spICYgbm90bWFzaztcblx0XHRcdFx0XHRcdGNvbCA9IHRvb3RobGVzcyB8IGNvbG1hc2s7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdC8vIHJlcGxhY2UgY3VycmVudCBzdGF0ZSB3aXRoIG5ldyBzdGF0ZVxuXHR0aGlzLnN0YXRlID0gbmV3U3RhdGU7XG5cdHRoaXMuc3RhdGVCaXRzID0gbmV3U3RhdGVCaXRzO1xuXG5cdGlmKHRoaXMuc3RhdGVCaXRzID09IDAgJiYgT2JqZWN0LmtleXModGhpcy5zdGF0ZSkubGVuZ3RoID09IDApIHtcblx0XHR0aGlzLnN0YXRlW1wiMFwiXSA9IG1hdGguY29tcGxleCgxLCAwKTtcblx0fVxufTtcblxuLy9cbi8vIGBlbmRpYW5uZXNzYCBjYW4gYmU6XG4vLyAgICAgbnVsbCAtIHRoaXMgaXMgZGVmYXVsdCBhbmQgZGVwZW5kcyBvbiB0aGlzLnJldmVyc2VCaXRPcmRlclxuLy8gICAgIFwiYmlnXCIgLSBiaWcgZW5kaWFuIChsaWtlIFJpZ2V0dGkvcHlRdWlsKVxuLy8gICAgIFwibGl0dGxlXCIgLSBsaXR0bGUgZW5kaWFuIChsaWtlIElCTS9RaXNraXQpXG4vL1xuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnRyYW5zZm9ybU1hdHJpeCA9IGZ1bmN0aW9uKHRvdGFsUXViaXRzLCBVLCB0YXJnZXRRdWJpdHMsIGVuZGlhbm5lc3MpIHtcblx0Ly8gY2xvbmUgbGlzdCBvZiB3aXJlcyB0byBpdHNlbGYgKHJlbW92ZSByZWZlcmVuY2UgdG8gb3JpZ2luYWwgYXJyYXkpXG5cdHRhcmdldFF1Yml0cyA9IHRhcmdldFF1Yml0cy5zbGljZSgwKTtcblxuXHR2YXIgcmV2ZXJzZUJpdHMgPSBmYWxzZTtcblx0aWYoIWVuZGlhbm5lc3MpIHtcblx0XHRyZXZlcnNlQml0cyA9ICF0aGlzLnJldmVyc2VCaXRPcmRlcjtcblx0fSBlbHNlIHtcblx0XHRyZXZlcnNlQml0cyA9IGVuZGlhbm5lc3MgPT0gXCJiaWdcIjtcblx0fVxuXG5cdC8vIHJldmVyc2UgYml0IG9yZGVyXG5cdGlmKHJldmVyc2VCaXRzKSB7XG5cdFx0Ly8gY29udmVydCBpbmRleCBmcm9tIDAtYmFzZWQgdG8gZW5kLWJhc2VkXG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IHRhcmdldFF1Yml0cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dGFyZ2V0UXViaXRzW2ldID0gKHRvdGFsUXViaXRzIC0gMSkgLSB0YXJnZXRRdWJpdHNbaV07XG5cdFx0fVxuXHR9XG5cblx0dGFyZ2V0UXViaXRzLnJldmVyc2UoKTtcblxuXHQvLyBsaXN0IG9mIHdpcmVzIG5vdCB1c2VkIGJ5IHRoaXMgZ2F0ZVxuXHR2YXIgdW51c2VkID0gW107XG5cdGZvcih2YXIgaSA9IDA7IGkgPCB0b3RhbFF1Yml0czsgaSsrKSB7XG5cdFx0aWYodGFyZ2V0UXViaXRzLmluZGV4T2YoaSkgPCAwKSB7XG5cdFx0XHR1bnVzZWQucHVzaChpKTtcblx0XHR9XG5cdH1cblxuXHR2YXIgdW51c2VkQ291bnQgPSB1bnVzZWQubGVuZ3RoO1xuXHR2YXIgdW51c2VkU3BhY2UgPSAoMSA8PCB1bnVzZWRDb3VudCk7XG5cblx0ZnVuY3Rpb24gZ2V0RWxNYXNrKGVsKSB7XG5cdFx0dmFyIHJlcyA9IDA7XG5cdFx0dGFyZ2V0UXViaXRzLm1hcChmdW5jdGlvbihxdWJpdCwgaW5kZXgpIHtcblx0XHRcdGlmKGVsICYgKDEgPDwgaW5kZXgpKSB7XG5cdFx0XHRcdHJlcyB8PSAoMSA8PCBxdWJpdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHJlcztcblx0fVxuXG5cdGZ1bmN0aW9uIGdldEluY01hc2soKSB7XG5cdFx0dmFyIHJlcyA9IDA7XG5cdFx0dGFyZ2V0UXViaXRzLm1hcChmdW5jdGlvbihxdWJpdCwgaW5kZXgpIHtcblx0XHRcdHJlcyB8PSAoMSA8PCBxdWJpdCk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHJlcyArIDE7XG5cdH1cblxuXHRmdW5jdGlvbiBnZXROb3RNYXNrKCkge1xuXHRcdHZhciByZXMgPSAwO1xuXHRcdHVudXNlZC5tYXAoZnVuY3Rpb24ocXViaXQsIGluZGV4KSB7XG5cdFx0XHRyZXMgfD0gKDEgPDwgcXViaXQpO1xuXHRcdH0pO1xuXHRcdHJldHVybiByZXM7XG5cdH1cblxuXHR2YXIgVCA9IG1hdGguemVyb3MoWyAxIDw8IHRvdGFsUXViaXRzLCAxIDw8IHRvdGFsUXViaXRzIF0pO1xuXG5cdGZvcih2YXIgZWxyb3cgPSAwOyBlbHJvdyA8IFUubGVuZ3RoOyBlbHJvdysrKSB7XG5cblx0XHR2YXIgcm93bWFzayA9IGdldEVsTWFzayhlbHJvdyk7XG5cblx0XHRmb3IodmFyIGVsY29sID0gMDsgZWxjb2wgPCBVW2Vscm93XS5sZW5ndGg7IGVsY29sKyspIHtcblxuXHRcdFx0dmFyIGNvbG1hc2sgPSBnZXRFbE1hc2soZWxjb2wpO1xuXG5cdFx0XHR2YXIgdXZhbCA9IFVbZWxyb3ddW2VsY29sXTtcblx0XHRcdGlmKHV2YWwpIHtcblx0XHRcdFx0dmFyIHJvdyA9IHJvd21hc2s7XG5cdFx0XHRcdHZhciBjb2wgPSBjb2xtYXNrO1xuXG5cdFx0XHRcdHZhciBjb3VudGVyID0gdW51c2VkU3BhY2U7XG5cdFx0XHRcdHZhciBjb3VudGVybWFzayA9IGdldEVsTWFzaygwKTtcblx0XHRcdFx0dmFyIGluY21hc2sgPSBnZXRJbmNNYXNrKCk7XG5cdFx0XHRcdHZhciBub3RtYXNrID0gZ2V0Tm90TWFzaygpO1xuXHRcdFx0XHR2YXIgdG9vdGhsZXNzID0gY291bnRlcm1hc2s7XG5cdFx0XHRcdHdoaWxlKGNvdW50ZXItLSkge1xuXHRcdFx0XHRcdHJvdyA9IHRvb3RobGVzcyB8IHJvd21hc2s7XG5cblx0XHRcdFx0XHRUW3Jvd11bY29sXSA9IHV2YWw7XG5cblx0XHRcdFx0XHR0b290aGxlc3MgPSAodG9vdGhsZXNzICsgaW5jbWFzaykgJiBub3RtYXNrO1xuXHRcdFx0XHRcdGNvbCA9IHRvb3RobGVzcyB8IGNvbG1hc2s7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIFQ7XG59O1xuXG4vL1xuLy8gRnVuY3Rpb24gcmV0dXJucyB1bml0YXJ5IG9mIHRoZSB3aG9sZSBjaXJjdWl0XG4vL1xuLy8gYGVuZGlhbm5lc3NgIGNhbiBiZTpcbi8vICAgICBudWxsIC0gdGhpcyBpcyBkZWZhdWx0IGFuZCBkZXBlbmRzIG9uIHRoaXMucmV2ZXJzZUJpdE9yZGVyXG4vLyAgICAgXCJiaWdcIiAtIGJpZyBlbmRpYW4gKGxpa2UgUmlnZXR0aS9weVF1aWwpXG4vLyAgICAgXCJsaXR0bGVcIiAtIGxpdHRsZSBlbmRpYW4gKGxpa2UgSUJNL1Fpc2tpdClcbi8vXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuY2lyY3VpdE1hdHJpeCA9IGZ1bmN0aW9uKGVuZGlhbm5lc3MpIHtcblx0dmFyIGRlY29tcG9zZWQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0ZGVjb21wb3NlZC5sb2FkKHRoaXMuc2F2ZSh0cnVlKSk7XG5cblx0aWYoZGVjb21wb3NlZC5nb3RDbGFzc2ljYWxDb250cm9sKCkpIHtcblx0XHRyZXR1cm4gW107XG5cdH1cblxuXHR2YXIgbWF0cml4ID0gW107XG5cdGZvcih2YXIgY29sID0gZGVjb21wb3NlZC5udW1Db2xzKCkgLSAxOyBjb2wgPj0gMDsgY29sLS0pIHtcblx0XHRmb3IodmFyIHdpcmUgPSBkZWNvbXBvc2VkLm51bVF1Yml0cyAtIDE7IHdpcmUgPj0gMDsgd2lyZS0tKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGRlY29tcG9zZWQuZ2V0R2F0ZUF0KGNvbCwgd2lyZSk7XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0dmFyIGdhdGVEZWYgPSBkZWNvbXBvc2VkLmJhc2ljR2F0ZXNbZ2F0ZS5uYW1lXTtcblx0XHRcdFx0aWYoIWdhdGVEZWYpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGdhdGUgXFxcIlwiICsgZ2F0ZS5uYW1lICsgXCJcXFwiXCIpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZihnYXRlRGVmLm1hdHJpeCAmJiBnYXRlRGVmLm1hdHJpeC5sZW5ndGgpIHtcblx0XHRcdFx0XHR2YXIgcmF3R2F0ZSA9IGRlY29tcG9zZWQuZ2V0UmF3R2F0ZShnYXRlRGVmLCBnYXRlLm9wdGlvbnMpO1xuXG5cdFx0XHRcdFx0dmFyIFUgPSBkZWNvbXBvc2VkLnRyYW5zZm9ybU1hdHJpeChkZWNvbXBvc2VkLm51bVF1Yml0cywgcmF3R2F0ZSwgZ2F0ZS53aXJlcywgZW5kaWFubmVzcyk7XG5cblx0XHRcdFx0XHRpZighbWF0cml4IHx8ICFtYXRyaXgubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRtYXRyaXggPSBVO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRtYXRyaXggPSB0aGlzLm11bHRpcGx5U3F1YXJlTWF0cmljZXMobWF0cml4LCBVKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbWF0cml4O1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZWlnZW52YWx1ZXMyeDIgPSBmdW5jdGlvbihBKSB7XG5cdHZhciBNID0gdGhpcy5wYXJzZU1hdHJpeChBKTtcblxuXHR2YXIgZWlnZW4gPSBbMCwgMF07XG5cblx0dmFyIHggPSBtYXRoLmFkZChNWzBdWzBdLCBNWzFdWzFdKTtcblxuXHRlaWdlblswXSA9IG1hdGguZGl2aWRlKG1hdGguYWRkKHgsIG1hdGguc3FydCggbWF0aC5hZGQobWF0aC5tdWx0aXBseShtYXRoLm11bHRpcGx5KDQsIE1bMF1bMV0pLCBNWzFdWzBdKSwgbWF0aC5wb3coIG1hdGguc3VidHJhY3QoTVswXVswXSwgTVsxXVsxXSksIDIpKSkpLCAyKTtcblx0ZWlnZW5bMV0gPSBtYXRoLmRpdmlkZShtYXRoLnN1YnRyYWN0KHgsIG1hdGguc3FydCggbWF0aC5hZGQobWF0aC5tdWx0aXBseShtYXRoLm11bHRpcGx5KDQsIE1bMF1bMV0pLCBNWzFdWzBdKSwgbWF0aC5wb3coIG1hdGguc3VidHJhY3QoTVswXVswXSwgTVsxXVsxXSksIDIpKSkpLCAyKTtcblxuXHRyZXR1cm4gZWlnZW47XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZ2V0QmlwYXJ0aXRlU3RhdGUgPSBmdW5jdGlvbihxMSwgcTIpIHtcblx0dmFyIGJpcGFydGl0ZVN0YXRlID0ge307XG5cdHZhciBhbXBDb3VudCA9IDA7XG5cblx0ZnVuY3Rpb24gc3BlY1N1bUNvbXBsZXgoYSwgYikge1xuXHRcdHZhciByYXdTdW0gPSBtYXRoLmFkZChhLCBiKTtcblx0XHR2YXIgYXJnID0gcmF3U3VtLmFyZygpO1xuXHRcdHJldHVybiBtYXRoLmNvbXBsZXgoeyBhYnM6IG1hdGguc3FydChtYXRoLnBvdyhtYXRoLmFicyhhKSwgMikgKyBtYXRoLnBvdyhtYXRoLmFicyhiKSwgMikpLCBhcmc6IGFyZyB9KTtcblx0fVxuXG5cdGZvcih2YXIgaXMgaW4gdGhpcy5zdGF0ZSkge1xuXHRcdHZhciBpID0gcGFyc2VJbnQoaXMpO1xuXHRcdHZhciBpbmRleCA9IDA7XG5cdFx0dmFyIGJpdDEgPSAoaSAmICgxIDw8IHExKSkgPyAxIDogMDtcblx0XHR2YXIgYml0MiA9IChpICYgKDEgPDwgcTIpKSA/IDIgOiAwO1xuXG5cdFx0aW5kZXggfD0gYml0MTtcblx0XHRpbmRleCB8PSBiaXQyO1xuXG5cdFx0aWYodHlwZW9mIGJpcGFydGl0ZVN0YXRlW2luZGV4XSAhPSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHRiaXBhcnRpdGVTdGF0ZVtpbmRleF0gPSBzcGVjU3VtQ29tcGxleChiaXBhcnRpdGVTdGF0ZVtpbmRleF0sIHRoaXMuc3RhdGVbaXNdKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YmlwYXJ0aXRlU3RhdGVbaW5kZXhdID0gdGhpcy5zdGF0ZVtpc107XG5cdFx0fVxuXG5cdFx0YW1wQ291bnQrKztcblx0fVxuXG5cdGlmKCFhbXBDb3VudCkge1xuXHRcdGJpcGFydGl0ZVN0YXRlW1wiMFwiXSA9IG1hdGguY29tcGxleCgxLCAwKTtcblx0fVxuXG5cdHJldHVybiBiaXBhcnRpdGVTdGF0ZTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmNoYW5jZU1hcCA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cblxuXHR2YXIgbWFwID0ge307XG5cdGZvcih2YXIgc291ciA9IDA7IHNvdXIgPCB0aGlzLm51bVF1Yml0czsgc291cisrKSB7XG5cdFx0Zm9yKHZhciBkZXN0ID0gMDsgZGVzdCA8IHRoaXMubnVtUXViaXRzOyBkZXN0KyspIHtcblx0XHRcdGlmKCFtYXBbc291cl0pIHtcblx0XHRcdFx0bWFwW3NvdXJdID0ge307XG5cdFx0XHR9XG5cdFx0XHRpZihkZXN0ID09IHNvdXIpIHtcblx0XHRcdFx0bWFwW3NvdXJdW2Rlc3RdID0gbnVsbDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1hcFtzb3VyXVtkZXN0XSA9IHt9O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZvcih2YXIgc291ciA9IDA7IHNvdXIgPCB0aGlzLm51bVF1Yml0czsgc291cisrKSB7XG5cdFx0Zm9yKHZhciBkZXN0ID0gc291ciArIDE7IGRlc3QgPCB0aGlzLm51bVF1Yml0czsgZGVzdCsrKSB7XG5cdFx0XHR2YXIgcmVkdWNlZFN0YXRlID0gdGhpcy5nZXRCaXBhcnRpdGVTdGF0ZShzb3VyLCBkZXN0KTtcblxuXHRcdFx0dmFyIGNpcmMgPSBuZXcgUXVhbnR1bUNpcmN1aXQoMik7XG5cdFx0XHRjaXJjLnN0YXRlID0gcmVkdWNlZFN0YXRlO1xuXG5cdFx0XHR2YXIgcmFkaXVzID0gbWF0aC5hYnMoY2lyYy5hbmdsZXMoKVswXS5yYWRpdXMpO1xuXG5cdFx0XHR2YXIgY29uY3VyZW5jZSA9IG1hdGgucm91bmQoMSAtIG1hdGgucG93KHJhZGl1cywgMiksIDcpO1xuXG5cdFx0XHRtYXBbc291cl1bZGVzdF0uZW50YW5nbGVkID0gY29uY3VyZW5jZSA+IDA7XG5cdFx0XHRtYXBbc291cl1bZGVzdF0uY29uY3VyZW5jZSA9IGNvbmN1cmVuY2U7XG5cdFx0XHRtYXBbc291cl1bZGVzdF0uY29uY3VyZW5jZVBlcmNlbnQgPSBtYXRoLnJvdW5kKGNvbmN1cmVuY2UgKiAxMDAsIDIpO1xuXG5cblx0XHRcdG1hcFtkZXN0XVtzb3VyXS5lbnRhbmdsZWQgPSBjb25jdXJlbmNlID4gMDtcblx0XHRcdG1hcFtkZXN0XVtzb3VyXS5jb25jdXJlbmNlID0gY29uY3VyZW5jZTtcblx0XHRcdG1hcFtkZXN0XVtzb3VyXS5jb25jdXJlbmNlUGVyY2VudCA9IG1hdGgucm91bmQoY29uY3VyZW5jZSAqIDEwMCwgMik7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG1hcDtcbn07XG5cblxuZnVuY3Rpb24gYmluU3RyKG4sIGxlbikge1xuXHR2YXIgYmluID0gbi50b1N0cmluZygyKTtcblx0d2hpbGUoYmluLmxlbmd0aCA8IGxlbikge1xuXHRcdGJpbiA9IFwiMFwiICsgYmluO1xuXHR9XG5cdHJldHVybiBiaW47XG59XG5cblxuZnVuY3Rpb24gcmV2ZXJzZUJpdHdpc2UobiwgbGVuKSB7XG5cdHJldHVybiBwYXJzZUludChiaW5TdHIobiwgbGVuKS5zcGxpdChcIlwiKS5yZXZlcnNlKCkuam9pbihcIlwiKSwgMik7XG59XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnJlc2V0UXViaXQgPSBmdW5jdGlvbih3aXJlLCB2YWx1ZSkge1xuXHR2YXIgVSA9IFtcblx0XHRbMCwgMF0sXG5cdFx0WzAsIDBdXG5cdF07XG5cblx0dmFyIGJpdCA9IG51bGw7XG5cdGlmKHRoaXMucmV2ZXJzZUJpdE9yZGVyKSB7XG5cdFx0Yml0ID0gbWF0aC5wb3coMiwgKHRoaXMubnVtUXViaXRzIC0gMSkgLSB3aXJlKTtcblx0fSBlbHNlIHtcblx0XHRiaXQgPSBtYXRoLnBvdygyLCB3aXJlKTtcblx0fVxuXG5cdHZhciBwcm9iID0gMDtcblx0Zm9yKHZhciBpcyBpbiB0aGlzLnN0YXRlKSB7XG5cdFx0dmFyIGkgPSBwYXJzZUludChpcyk7XG5cdFx0aWYodmFsdWUgPyAhIShpICYgYml0KSA6ICEoaSAmIGJpdCkpIHtcblx0XHRcdHByb2IgKz0gbWF0aC5wb3cobWF0aC5hYnModGhpcy5zdGF0ZVtpc10pLCAyKTtcblx0XHR9XG5cdH1cblxuXHRwcm9iID0gbWF0aC5yb3VuZChwcm9iLCAxNCk7XG5cblx0aWYocHJvYiA9PSAxKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYodmFsdWUpIHtcblx0XHRpZihwcm9iID09IDApIHtcblx0XHRcdFVbMV1bMF0gPSAxO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRVWzFdWzFdID0gbWF0aC5zcXJ0KDEgLyBwcm9iKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0aWYocHJvYiA9PSAwKSB7XG5cdFx0XHRVWzBdWzFdID0gMTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0VVswXVswXSA9IG1hdGguc3FydCgxIC8gcHJvYik7XG5cdFx0fVxuXHR9O1xuXG5cdHRoaXMuY29sbGFwc2VkID0gW107XG5cdHRoaXMucHJvYiA9IFtdO1xuXHR0aGlzLmFwcGx5VHJhbnNmb3JtKFUsIFt3aXJlXSk7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5hcHBseUdhdGUgPSBmdW5jdGlvbihnYXRlTmFtZSwgY29sdW1uLCB3aXJlcywgb3B0aW9ucykge1xuXHRpZihnYXRlTmFtZSA9PSBcIm1lYXN1cmVcIikge1xuXHRcdGlmKCFvcHRpb25zLmNyZWcpIHtcblx0XHRcdHRocm93IFwiRXJyb3I6IFxcXCJtZWFzdXJlXFxcIiBnYXRlIHJlcXVpcmVzIGRlc3RpbmF0aW9uLlwiO1xuXHRcdH1cblxuXHRcdHZhciB2YWx1ZSA9IHRoaXMubWVhc3VyZSh3aXJlc1swXSwgb3B0aW9ucy5jcmVnLm5hbWUsIG9wdGlvbnMuY3JlZy5iaXQpO1xuXG5cdFx0dmFyIGRvUmVzZXQgPSB0aGlzLm1lYXN1cmVSZXNldHNRdWJpdDtcblx0XHRpZighZG9SZXNldCkge1xuXHRcdFx0Zm9yKHZhciBjb2wgPSBjb2x1bW47IGNvbCA8IHRoaXMubnVtQ29scygpOyBjb2wrKykge1xuXHRcdFx0XHR2YXIgZnJvbVJvdyA9IGNvbCA9PSBjb2x1bW4gPyB3aXJlc1swXSA6IDA7XG5cdFx0XHRcdGZvcih2YXIgcm93ID0gZnJvbVJvdzsgcm93IDwgdGhpcy5udW1RdWJpdHM7IHJvdysrKSB7XG5cdFx0XHRcdFx0dmFyIGcgPSB0aGlzLmdhdGVzW3Jvd11bY29sXTtcblx0XHRcdFx0XHRpZihnICYmIGcubmFtZSAhPSBcIm1lYXN1cmVcIikge1xuXHRcdFx0XHRcdFx0ZG9SZXNldCA9IHRydWU7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYoZG9SZXNldCkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYoZG9SZXNldCkge1xuXHRcdFx0dGhpcy5yZXNldFF1Yml0KHdpcmVzWzBdLCB2YWx1ZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYoZ2F0ZU5hbWUgPT0gXCJyZXNldFwiKSB7XG5cdFx0dGhpcy5yZXNldFF1Yml0KHdpcmVzWzBdLCAwKTtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR2YXIgZ2F0ZSA9IHRoaXMuYmFzaWNHYXRlc1tnYXRlTmFtZV07XG5cdGlmKCFnYXRlKSB7XG5cdFx0Y29uc29sZS5sb2coXCJVbmtub3duIGdhdGUgXFxcIlwiICsgZ2F0ZU5hbWUgKyBcIlxcXCIuXCIpO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHZhciByYXdHYXRlID0gdGhpcy5nZXRSYXdHYXRlKGdhdGUsIG9wdGlvbnMpO1xuXG5cdHRoaXMuY29sbGFwc2VkID0gW107XG5cdHRoaXMucHJvYiA9IFtdO1xuXG5cdHRoaXMuYXBwbHlUcmFuc2Zvcm0ocmF3R2F0ZSwgd2lyZXMpO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmdldFJhd0dhdGUgPSBmdW5jdGlvbihnYXRlLCBnYXRlT3B0aW9ucywgZ2xvYmFsT3B0aW9ucykge1xuXHR2YXIgZ2xvYmFsUGFyYW1zID0gZ2xvYmFsT3B0aW9ucyAmJiBnbG9iYWxPcHRpb25zLnBhcmFtcyA/IGdsb2JhbE9wdGlvbnMucGFyYW1zIDogKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMucGFyYW1zID8gdGhpcy5vcHRpb25zLnBhcmFtcyA6IHt9KTtcblxuXHR2YXIgZ2xvYmFsUGFyYW1zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShnbG9iYWxQYXJhbXMpKTtcblx0Zm9yKHZhciBnbG9iYWxQYXJhbU5hbWUgaW4gZ2xvYmFsUGFyYW1zKSB7XG5cdFx0Z2xvYmFsUGFyYW1zW2dsb2JhbFBhcmFtTmFtZV0gPSBtYXRoLmV2YWx1YXRlKGdsb2JhbFBhcmFtc1tnbG9iYWxQYXJhbU5hbWVdKTtcblx0fVxuXG5cdHZhciByYXdHYXRlID0gW107XG5cdGdhdGUubWF0cml4Lm1hcChmdW5jdGlvbihyb3cpIHtcblx0XHR2YXIgcmF3R2F0ZVJvdyA9IFtdO1xuXHRcdHJvdy5tYXAoZnVuY3Rpb24oaXRlbSkge1xuXHRcdFx0aWYodHlwZW9mIGl0ZW0gPT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHR2YXIgcGFyYW1zID0gZ2F0ZU9wdGlvbnMgPyBnYXRlT3B0aW9ucy5wYXJhbXMgfHwge30gOiB7fTtcblxuXHRcdFx0XHR2YXIgdmFycyA9IHt9O1xuXHRcdFx0XHRnYXRlLnBhcmFtcy5tYXAoZnVuY3Rpb24odmFyTmFtZSwgdmFySW5kZXgpIHtcblx0XHRcdFx0XHRpZihBcnJheS5pc0FycmF5KHBhcmFtcykpIHtcblx0XHRcdFx0XHRcdC8vIERlcHJlY2F0ZWQuIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IG9ubHkuIFwicGFyYW1zXCIgc2hvdWxkIGJlIG9iamVjdCAtIG5vdCBhcnJheS5cblx0XHRcdFx0XHRcdHZhcnNbdmFyTmFtZV0gPSBwYXJhbXMubGVuZ3RoID4gdmFySW5kZXggPyBtYXRoLmV2YWx1YXRlKHBhcmFtc1t2YXJJbmRleF0sIGdsb2JhbFBhcmFtcykgOiBudWxsO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR2YXJzW3Zhck5hbWVdID0gbWF0aC5ldmFsdWF0ZShwYXJhbXNbdmFyTmFtZV0sIGdsb2JhbFBhcmFtcyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHR2YXIgZXYgPSBtYXRoLmV2YWx1YXRlKGl0ZW0sIHZhcnMpO1xuXHRcdFx0XHRyYXdHYXRlUm93LnB1c2goZXYpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmF3R2F0ZVJvdy5wdXNoKGl0ZW0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJhd0dhdGUucHVzaChyYXdHYXRlUm93KTtcblx0fSk7XG5cdHJldHVybiByYXdHYXRlO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmZpbmRHbG9iYWxQYXJhbXMgPSBmdW5jdGlvbigpIHtcblx0dmFyIHJlcyA9IHtcblx0XHRnbG9iYWxQYXJhbXM6IFtdLFxuXHRcdGNlbGxzOiBbXVxuXHR9O1xuXG5cdHZhciBleHRyYWN0VmFyaWFibGVzID0gZnVuY3Rpb24ocykge1xuXHRcdHZhciB2YXJzID0gW107XG5cblx0XHR2YXIgbWF0aFRvU3RyaW5nSGFuZGxlciA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMpIHtcblx0XHRcdGlmKG5vZGUuaXNTeW1ib2xOb2RlICYmICFub2RlLmlzRnVuY3Rpb25Ob2RlICYmICFtYXRoW25vZGUubmFtZV0pIHtcblx0XHRcdFx0dmFycy5wdXNoKG5vZGUubmFtZSk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShzKTtcblx0XHRub2RlLnRvU3RyaW5nKHsgaGFuZGxlcjogbWF0aFRvU3RyaW5nSGFuZGxlciB9KTtcblxuXHRcdHJldHVybiB2YXJzO1xuXHR9O1xuXG5cdHZhciBudW1Db2xzID0gdGhpcy5udW1Db2xzKCk7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSB0aGlzLmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmNvbm5lY3RvciA9PSAwKSB7XG5cdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMucGFyYW1zKSB7XG5cdFx0XHRcdFx0dmFyIGNlbGxBZGRlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdGZvcih2YXIgZ2F0ZVBhcmFtTmFtZSBpbiBnYXRlLm9wdGlvbnMucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHR2YXIgZ2F0ZVBhcmFtVmFsdWUgPSBnYXRlLm9wdGlvbnMucGFyYW1zW2dhdGVQYXJhbU5hbWVdO1xuXHRcdFx0XHRcdFx0aWYodHlwZW9mIGdhdGVQYXJhbVZhbHVlID09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHRcdFx0dmFyIGdsb2JhbHMgPSBleHRyYWN0VmFyaWFibGVzKGdhdGVQYXJhbVZhbHVlKTtcblxuXHRcdFx0XHRcdFx0XHRpZihnbG9iYWxzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgZyA9IDA7IGcgPCBnbG9iYWxzLmxlbmd0aDsgZysrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihyZXMuZ2xvYmFsUGFyYW1zLmluZGV4T2YoZ2xvYmFsc1tnXSkgPCAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlcy5nbG9iYWxQYXJhbXMucHVzaChnbG9iYWxzW2ddKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRpZighY2VsbEFkZGVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgbWF4V2lyZSA9IE1hdGgubWF4LmFwcGx5KG51bGwsIGdhdGUud2lyZXMpO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVzLmNlbGxzLnB1c2goW2NvbHVtbiwgbWF4V2lyZV0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0Y2VsbEFkZGVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVzO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmdldEdsb2JhbFBhcmFtcyA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgZ2xvYmFsUGFyYW1zID0gdGhpcy5maW5kR2xvYmFsUGFyYW1zKCkuZ2xvYmFsUGFyYW1zO1xuXHRyZXR1cm4gZ2xvYmFsUGFyYW1zO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmdvdEdsb2JhbFBhcmFtcyA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgZ2xvYmFsUGFyYW1zID0gdGhpcy5nZXRHbG9iYWxQYXJhbXMoKTtcblxuXHRyZXR1cm4gZ2xvYmFsUGFyYW1zLmxlbmd0aCA+IDA7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUudXBkYXRlR2xvYmFsUGFyYW1zID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMucGFyYW1zID0gdGhpcy5nZXRHbG9iYWxQYXJhbXMoKTtcblxuXHR0aGlzLm9wdGlvbnMgPSB0aGlzLm9wdGlvbnMgfHwge307XG5cdHRoaXMub3B0aW9ucy5wYXJhbXMgPSB0aGlzLm9wdGlvbnMucGFyYW1zIHx8IHt9O1xuXG5cdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhcmFtcy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBwYXJhbU5hbWUgPSB0aGlzLnBhcmFtc1tpXTtcblx0XHRpZih0eXBlb2YgdGhpcy5vcHRpb25zLnBhcmFtc1twYXJhbU5hbWVdID09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdHRoaXMub3B0aW9ucy5wYXJhbXNbcGFyYW1OYW1lXSA9IDA7XG5cdFx0fVxuXHR9XG5cblx0Zm9yKHZhciBwYXJhbU5hbWUgaW4gdGhpcy5vcHRpb25zLnBhcmFtcykge1xuXHRcdGlmKHRoaXMucGFyYW1zLmluZGV4T2YocGFyYW1OYW1lKSA8IDApIHtcblx0XHRcdGRlbGV0ZSB0aGlzLm9wdGlvbnMucGFyYW1zW3BhcmFtTmFtZV07XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRoaXMucGFyYW1zO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmRlY29tcG9zZSA9IGZ1bmN0aW9uKG9iaikge1xuXHRpZighb2JqLmdhdGVzLmxlbmd0aCkge1xuXHRcdHJldHVybiBvYmo7XG5cdH1cblxuXHR0aGlzLnVwZGF0ZUdsb2JhbFBhcmFtcygpO1xuXG5cdGZ1bmN0aW9uIGluamVjdEFycmF5KGExLCBhMiwgcG9zKSB7XG5cdFx0cmV0dXJuIGExLnNsaWNlKCAwLCBwb3MgKS5jb25jYXQoIGEyICkuY29uY2F0KCBhMS5zbGljZSggcG9zICkgKTtcblx0fVxuXG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgb2JqLmdhdGVzWzBdLmxlbmd0aDsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgb2JqLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IG9iai5nYXRlc1t3aXJlXVtjb2x1bW5dO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmNvbm5lY3RvciA9PSAwICYmICF0aGlzLmJhc2ljR2F0ZXNbZ2F0ZS5uYW1lXSkge1xuXHRcdFx0XHR2YXIgdG1wID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdFx0XHRcdHZhciBjdXN0b20gPSBvYmouY3VzdG9tR2F0ZXNbZ2F0ZS5uYW1lXTtcblx0XHRcdFx0aWYoY3VzdG9tKSB7XG5cdFx0XHRcdFx0dG1wLmxvYWQoY3VzdG9tKTtcblx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHQvLyBjaXJjdWl0IHdpdGggcGFyYW1zXG5cdFx0XHRcdFx0aWYodG1wLnBhcmFtcy5sZW5ndGggJiYgZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdHZhciBnbG9iYWxQYXJhbXMgPSBnYXRlLm9wdGlvbnMucGFyYW1zO1xuXHRcdFx0XHRcdFx0Zm9yKHZhciBjYyA9IDA7IGNjIDwgdG1wLmdhdGVzWzBdLmxlbmd0aDsgY2MrKykge1xuXHRcdFx0XHRcdFx0XHRmb3IodmFyIHd3ID0gMDsgd3cgPCB0bXAubnVtUXViaXRzOyB3dysrKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGdnID0gdG1wLmdhdGVzW3d3XVtjY107XG5cdFx0XHRcdFx0XHRcdFx0aWYoZ2cgJiYgZ2cuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGdnLm9wdGlvbnMgJiYgZ2cub3B0aW9ucy5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBkZXN0UGFyYW0gaW4gZ2cub3B0aW9ucy5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBwYXJzZSBwYXJhbSwgcmVwbGFjZSB2YXJpYWJsZSB3aXRoIGdsb2JhbCBwYXJhbSBhbmQgYXNzZW1ibGUgaXQgYmFja1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnZy5vcHRpb25zLnBhcmFtc1tkZXN0UGFyYW1dKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgdHJhbnNmb3JtZWQgPSBub2RlLnRyYW5zZm9ybShmdW5jdGlvbiAobm9kZSwgcGF0aCwgcGFyZW50KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihub2RlLmlzU3ltYm9sTm9kZSAmJiBnbG9iYWxQYXJhbXMuaGFzT3duUHJvcGVydHkobm9kZS5uYW1lKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gbWF0aC5wYXJzZShcIihcIiArIGdsb2JhbFBhcmFtc1tub2RlLm5hbWVdICsgXCIpXCIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG5vZGU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Z2cub3B0aW9ucy5wYXJhbXNbZGVzdFBhcmFtXSA9IHRyYW5zZm9ybWVkLnRvU3RyaW5nKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZihnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbikge1xuXHRcdFx0XHRcdFx0Zm9yKHZhciBjYyA9IDA7IGNjIDwgdG1wLmdhdGVzWzBdLmxlbmd0aDsgY2MrKykge1xuXHRcdFx0XHRcdFx0XHRmb3IodmFyIHd3ID0gMDsgd3cgPCB0bXAubnVtUXViaXRzOyB3dysrKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGdnID0gdG1wLmdhdGVzW3d3XVtjY107XG5cdFx0XHRcdFx0XHRcdFx0aWYoZ2cpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGdnLm9wdGlvbnMgPSBnZy5vcHRpb25zIHx8IHt9O1xuXHRcdFx0XHRcdFx0XHRcdFx0Z2cub3B0aW9ucy5jb25kaXRpb24gPSBnYXRlLm9wdGlvbnMuY29uZGl0aW9uO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyAtLS1cblxuXHRcdFx0XHRcdHZhciBkZWNvbXBvc2VkID0gdG1wLnNhdmUodHJ1ZSk7XG5cdFx0XHRcdFx0aWYoIWRlY29tcG9zZWQuZ2F0ZXNbMF0ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRmb3IodmFyIHRtcHEgPSAwOyB0bXBxIDwgZGVjb21wb3NlZC5nYXRlcy5sZW5ndGg7IHRtcHErKykge1xuXHRcdFx0XHRcdFx0XHRkZWNvbXBvc2VkLmdhdGVzW3RtcHFdLnB1c2gobnVsbCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dmFyIGVtcHR5ID0gW107XG5cdFx0XHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGRlY29tcG9zZWQuZ2F0ZXNbMF0ubGVuZ3RoIC0gMTsgaSsrKSB7XG5cdFx0XHRcdFx0XHRlbXB0eS5wdXNoKG51bGwpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIHNoaWZ0IGNvbHVtbnMgcmlnaHRcblx0XHRcdFx0XHRmb3IodmFyIHcgPSAwOyB3IDwgb2JqLm51bVF1Yml0czsgdysrKSB7XG5cdFx0XHRcdFx0XHR2YXIgZyA9IG9iai5nYXRlc1t3XVtjb2x1bW5dO1xuXHRcdFx0XHRcdFx0aWYoZyAmJiBnLmlkID09IGdhdGUuaWQpIHtcblx0XHRcdFx0XHRcdFx0b2JqLmdhdGVzW3ddLnNwbGljZShjb2x1bW4sIDEpO1xuXHRcdFx0XHRcdFx0XHR2YXIgaW5zZXJ0R2F0ZSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGVjb21wb3NlZC5nYXRlc1tnLmNvbm5lY3Rvcl0pKTtcblx0XHRcdFx0XHRcdFx0Ly8gdW5pcXVlIGlkXG5cdFx0XHRcdFx0XHRcdGZvcih2YXIgdG1wcSA9IDA7IHRtcHEgPCBpbnNlcnRHYXRlLmxlbmd0aDsgdG1wcSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYoaW5zZXJ0R2F0ZVt0bXBxXSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aW5zZXJ0R2F0ZVt0bXBxXS5pZCA9IGluc2VydEdhdGVbdG1wcV0uaWQgKyBcIl9cIiArIGdhdGUuaWQ7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdG9iai5nYXRlc1t3XSA9IGluamVjdEFycmF5KG9iai5nYXRlc1t3XSwgaW5zZXJ0R2F0ZSwgY29sdW1uKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdG9iai5nYXRlc1t3XSA9IGluamVjdEFycmF5KG9iai5nYXRlc1t3XSwgZW1wdHksIGNvbHVtbiArIDEpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdG9iai5jdXN0b21HYXRlcyA9IHt9O1xuXG5cdHJldHVybiBvYmo7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZGVjb21wb3NlR2F0ZUF0ID0gZnVuY3Rpb24oY29sdW1uLCB3aXJlKSB7XG5cdHZhciBzZWxmID0gdGhpcztcblxuXHQvLyBpZiB0aGVyZSBpcyBubyBnYXRlIC0gcmV0dXJuXG5cdHZhciBnYXRlID0gdGhpcy5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0aWYoIWdhdGUpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBpZiBnYXRlIGlzIG5vdCBjb21wb3NpdGUgLSByZXR1cm5cblx0aWYoIXRoaXMuY3VzdG9tR2F0ZXNbZ2F0ZS5uYW1lXSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIGNvcHkgY2lyY3VpdFxuXHR2YXIgb2JqID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdG9iai5sb2FkKHRoaXMuc2F2ZSgpKTtcblxuXHQvLyByZW1vdmUgYWxsIGdhdGVzIGV4Y2VwdCB0aGlzXG5cdGZvcih2YXIgY29sID0gMDsgY29sIDwgb2JqLmdhdGVzWzBdLmxlbmd0aDsgY29sKyspIHtcblx0XHRmb3IodmFyIHJvdyA9IDA7IHJvdyA8IG9iai5udW1RdWJpdHM7IHJvdysrKSB7XG5cdFx0XHR2YXIgZyA9IG9iai5nYXRlc1tyb3ddW2NvbF07XG5cdFx0XHRpZihnICYmIGcuaWQgIT0gZ2F0ZS5pZCkge1xuXHRcdFx0XHRvYmoucmVtb3ZlR2F0ZUF0KGNvbCwgcm93KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBkZWNvbXBvc2UgY2lyY3VpdFxuXHR2YXIgY2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRjaXJjdWl0LmxvYWQob2JqLnNhdmUodHJ1ZSkpO1xuXHRjaXJjdWl0LnJlbW92ZUxlYWRpbmdDb2x1bW5zKCk7XG5cdGNpcmN1aXQucmVtb3ZlVHJhaWxpbmdDb2x1bW5zKCk7XG5cblx0Zm9yKHZhciBpID0gMDsgaSA8IGNpcmN1aXQuZ2F0ZXNbMF0ubGVuZ3RoIC0gMTsgaSsrKSB7XG5cdFx0dGhpcy5pbnNlcnRTcGFjZShjb2x1bW4gKyBpLCBnYXRlLndpcmVzKTtcblx0fVxuXHR0aGlzLnJlbW92ZUdhdGUoZ2F0ZS5pZCk7XG5cblx0dmFyIGRlc3RDb2wgPSBjb2x1bW47XG5cdGZvcih2YXIgY29sID0gMDsgY29sIDwgY2lyY3VpdC5nYXRlc1swXS5sZW5ndGg7IGNvbCsrKSB7XG5cdFx0dmFyIGdhdGVzID0gY2lyY3VpdC5nZXRHYXRlc0F0Q29sdW1uKGNvbCk7XG5cdFx0Z2F0ZXMubWFwKGZ1bmN0aW9uKGcpIHtcblx0XHRcdHNlbGYuYWRkR2F0ZShnLm5hbWUsIGRlc3RDb2wsIGcud2lyZXMsIGcub3B0aW9ucyk7XG5cdFx0fSk7XG5cdFx0ZGVzdENvbCsrO1xuXHR9XG5cblx0cmV0dXJuIGNpcmN1aXQ7XG59O1xuXG5cbi8vXG4vLyBDb252ZXJ0IHRoaXMgY2lyY3VpdCB0byBjdXN0b20gZ2F0ZVxuLy9cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmNvbnZlcnRUb0N1c3RvbUdhdGUgPSBmdW5jdGlvbihnYXRlTmFtZSwgZGVjb21wb3NlLCBhZGRUb0NpcmN1aXQpIHtcblx0Ly8gcmVtb3ZlIG1lYXN1cmVtZW50IGFuZCBjbGFzc2ljYWwgY29udHJvbFxuXHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gdGhpcy5nYXRlc1t3aXJlXVtjb2x1bW5dO1xuXHRcdFx0aWYoZ2F0ZSkge1xuXHRcdFx0XHQvLyByZW1vdmUgbWVhc3VyZW1lbnRcblx0XHRcdFx0aWYoZ2F0ZS5uYW1lID09IFwibWVhc3VyZVwiKSB7XG5cdFx0XHRcdFx0dGhpcy5nYXRlc1t3aXJlXVtjb2x1bW5dID0gbnVsbDtcblx0XHRcdFx0XHRnYXRlID0gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZihnYXRlKSB7XG5cdFx0XHRcdC8vIHJlbW92ZSBjb25kaXRpb25zXG5cdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uKSB7XG5cdFx0XHRcdFx0ZGVsZXRlIHRoaXMuZ2F0ZXNbd2lyZV1bY29sdW1uXS5vcHRpb25zLmNvbmRpdGlvbjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIHJlbW92ZSBjcmVnc1xuXHR0aGlzLmNyZWdzID0ge307XG5cblx0dmFyIHNvdXJjZSA9IHRoaXMuc2F2ZShkZWNvbXBvc2UpO1xuXHRpZihzb3VyY2Uub3B0aW9ucykge1xuXHRcdHNvdXJjZS5vcHRpb25zLmh5YnJpZCA9IGZhbHNlO1xuXHRcdGlmKHNvdXJjZS5vcHRpb25zLmh5YnJpZE9wdGlvbnMpIHtcblx0XHRcdGRlbGV0ZSBzb3VyY2Uub3B0aW9ucy5oeWJyaWRPcHRpb25zO1xuXHRcdH1cblx0fVxuXG5cdHRoaXMuY2xlYXIoKTtcblx0dGhpcy5jdXN0b21HYXRlc1tnYXRlTmFtZV0gPSBzb3VyY2U7XG5cblx0aWYoYWRkVG9DaXJjdWl0KSB7XG5cdFx0dmFyIHdpcmVzID0gW107XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IHRoaXMubnVtUXViaXRzOyBpKyspIHtcblx0XHRcdHdpcmVzLnB1c2goaSk7XG5cdFx0fVxuXG5cdFx0dmFyIGdhdGVPcHRpb25zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmN1c3RvbUdhdGVzW2dhdGVOYW1lXS5vcHRpb25zKSk7XG5cblx0XHR0aGlzLmFkZEdhdGUoZ2F0ZU5hbWUsIC0xLCB3aXJlcywgZ2F0ZU9wdGlvbnMpO1xuXHR9IGVsc2Uge1xuXHRcdHRoaXMucmVtb3ZlVHJhaWxpbmdSb3dzKCk7XG5cdH1cbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS52YWxpZEN1c3RvbUdhdGVOYW1lID0gZnVuY3Rpb24oYmFzZU5hbWUpIHtcblx0YmFzZU5hbWUgPSAoYmFzZU5hbWUgfHwgXCJzdWJcIikgKyBcIlwiO1xuXG5cdHZhciBjdXN0b21HYXRlTmFtZXMgPSBbXTtcblx0aWYodGhpcy5jdXN0b21HYXRlcykge1xuXHRcdGlmKCF0aGlzLmJhc2ljR2F0ZXNbYmFzZU5hbWVdKSB7XG5cdFx0XHRpZighdGhpcy5jdXN0b21HYXRlc1tiYXNlTmFtZV0pIHtcblx0XHRcdFx0cmV0dXJuIGJhc2VOYW1lO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvcih2YXIgZ2F0ZU5hbWUgaW4gdGhpcy5iYXNpY0dhdGVzKSB7XG5cdFx0XHRjdXN0b21HYXRlTmFtZXMucHVzaChnYXRlTmFtZSk7XG5cdFx0fVxuXG5cdFx0Zm9yKHZhciBnYXRlTmFtZSBpbiB0aGlzLmN1c3RvbUdhdGVzKSB7XG5cdFx0XHRjdXN0b21HYXRlTmFtZXMucHVzaChnYXRlTmFtZSk7XG5cdFx0fVxuXHR9XG5cblx0dmFyIGluZGV4ID0gMDtcblx0dmFyIHZhbGlkTmFtZSA9IFwiXCI7XG5cdGRvIHtcblx0XHRpbmRleCsrO1xuXHRcdHZhbGlkTmFtZSA9IGJhc2VOYW1lICsgaW5kZXg7XG5cdH0gd2hpbGUoY3VzdG9tR2F0ZU5hbWVzLmluZGV4T2YodmFsaWROYW1lKSA+PSAwKTtcblxuXHRyZXR1cm4gdmFsaWROYW1lO1xufTtcblxuXG4vL1xuLy8gU3BsaXQgY2lyY3VpdCBpbnRvIGNvbXBvc2l0ZSBnYXRlcywgZWFjaCBvZiBcImJsb2NrU2l6ZVwiIHF1Yml0c1xuLy9cbi8vIE9wdGlvbnM6XG4vLyAgIHtcbi8vICAgICAgZmxleGlibGVCbG9ja1NpemU6IGJvb2wgLy8gQWxsb3cgbGFyZ2VyIGJsb2NrcyBmb3IgZ2F0ZXMgd2l0aCBtb3JlIHF1Yml0cyB0aGFuIGJsb2NrIHNpemVcbi8vICAgICAgdmVydGljYWxPbmx5OiBib29sIC8vIERvbid0IGV4dGVuZCBibG9ja3MgaG9yaXpvbnRhbGx5XG4vLyAgIH1cbi8vXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5zcGxpdEludG9CbG9ja3MgPSBmdW5jdGlvbihibG9ja1NpemUsIG9wdGlvbnMpIHtcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0dmFyIGJsb2NrcyA9IFtdO1xuXHR2YXIgcHJldkNvbmRpdGlvbiA9IFwie31cIjtcblx0dmFyIHByZXZJc1VuaXRhcnkgPSB0cnVlO1xuXG5cdHZhciBjdXJyZW50QmxvY2sgPSBudWxsO1xuXG5cdHZhciBkZWNvbXBvc2VkID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdGRlY29tcG9zZWQubG9hZCh0aGlzLnNhdmUodHJ1ZSkpO1xuXG5cdHZhciBudW1Db2xzID0gZGVjb21wb3NlZC5udW1Db2xzKCk7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgZGVjb21wb3NlZC5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSBkZWNvbXBvc2VkLmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmNvbm5lY3RvciA9PSAwICYmICFnYXRlLmFkZGVkVG9CbG9jaykge1xuXHRcdFx0XHR2YXIgZ2F0ZURlZiA9IHRoaXMuYmFzaWNHYXRlc1tnYXRlLm5hbWVdO1xuXHRcdFx0XHR2YXIgY3VycmVudENvbmRpdGlvbiA9IGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uID8gSlNPTi5zdHJpbmdpZnkoZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbikgOiBcInt9XCI7XG5cdFx0XHRcdHZhciBjdXJyZW50SXNVbml0YXJ5ID0gZ2F0ZURlZiAmJiAhIShnYXRlRGVmLm1hdHJpeCAmJiBnYXRlRGVmLm1hdHJpeC5sZW5ndGgpO1xuXG5cdFx0XHRcdHZhciBuZXdXaXJlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY3VycmVudEJsb2NrID8gY3VycmVudEJsb2NrLndpcmVzIDogW10pKTtcblx0XHRcdFx0Z2F0ZS53aXJlcy5tYXAoZnVuY3Rpb24od2lyZSkge1xuXHRcdFx0XHRcdGlmKG5ld1dpcmVzLmluZGV4T2Yod2lyZSkgPCAwKSB7XG5cdFx0XHRcdFx0XHRuZXdXaXJlcy5wdXNoKHdpcmUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0aWYoXG5cdFx0XHRcdFx0IWJsb2Nrcy5sZW5ndGggfHxcblx0XHRcdFx0XHQhKGN1cnJlbnRDb25kaXRpb24gPT0gcHJldkNvbmRpdGlvbikgfHxcblx0XHRcdFx0XHQhY3VycmVudElzVW5pdGFyeSB8fFxuXHRcdFx0XHRcdCFwcmV2SXNVbml0YXJ5IHx8XG5cdFx0XHRcdFx0IShuZXdXaXJlcy5sZW5ndGggPD0gYmxvY2tTaXplKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRjdXJyZW50QmxvY2sgPSB7XG5cdFx0XHRcdFx0XHR3aXJlczogZ2F0ZS53aXJlcyxcblx0XHRcdFx0XHRcdGdhdGVzOiBbZ2F0ZV1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGJsb2Nrcy5wdXNoKGN1cnJlbnRCbG9jayk7XG5cblx0XHRcdFx0XHRpZihnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbikge1xuXHRcdFx0XHRcdFx0Y3VycmVudEJsb2NrLmNvbmRpdGlvbiA9IGdhdGUub3B0aW9ucy5jb25kaXRpb247XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGN1cnJlbnRCbG9jay53aXJlcyA9IG5ld1dpcmVzO1xuXHRcdFx0XHRcdGN1cnJlbnRCbG9jay5nYXRlcy5wdXNoKGdhdGUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Z2F0ZS53aXJlcy5tYXAoZnVuY3Rpb24od3cpIHtcblx0XHRcdFx0XHRkZWNvbXBvc2VkLmdhdGVzW3d3XVtjb2x1bW5dLmFkZGVkVG9CbG9jayA9IHRydWU7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHByZXZDb25kaXRpb24gPSBjdXJyZW50Q29uZGl0aW9uO1xuXHRcdFx0XHRwcmV2SXNVbml0YXJ5ID0gY3VycmVudElzVW5pdGFyeTtcblxuXHRcdFx0XHRpZighb3B0aW9ucy52ZXJ0aWNhbE9ubHkpIHtcblx0XHRcdFx0XHQvLyB0cnkgdG8gZXh0ZW5kIHRoZSBibG9jayBob3Jpem9udGFsbHlcblx0XHRcdFx0XHR2YXIgZXh0Q29sdW1uID0gY29sdW1uICsgMTtcblx0XHRcdFx0XHR2YXIgZXh0V2lyZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGN1cnJlbnRCbG9jay53aXJlcykpO1xuXHRcdFx0XHRcdGV4dFdpcmVzLnNvcnQoKTtcblx0XHRcdFx0XHR3aGlsZShleHRDb2x1bW4gPCBudW1Db2xzICYmIGV4dFdpcmVzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0ZXh0V2lyZSA9IGV4dFdpcmVzWzBdO1xuXG5cdFx0XHRcdFx0XHR3aGlsZShleHRXaXJlcy5sZW5ndGggJiYgZXh0V2lyZSA8PSBleHRXaXJlc1tleHRXaXJlcy5sZW5ndGggLSAxXSkge1xuXHRcdFx0XHRcdFx0XHR2YXIgZXh0R2F0ZSA9IGRlY29tcG9zZWQuZ2V0R2F0ZUF0KGV4dENvbHVtbiwgZXh0V2lyZSk7XG5cdFx0XHRcdFx0XHRcdGlmKGV4dEdhdGUgJiYgIWV4dEdhdGUuYWRkZWRUb0Jsb2NrKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGV4dEdhdGVEZWYgPSB0aGlzLmJhc2ljR2F0ZXNbZXh0R2F0ZS5uYW1lXTtcblx0XHRcdFx0XHRcdFx0XHR2YXIgZXh0Q29uZGl0aW9uID0gZXh0R2F0ZS5vcHRpb25zICYmIGV4dEdhdGUub3B0aW9ucy5jb25kaXRpb24gPyBKU09OLnN0cmluZ2lmeShleHRHYXRlLm9wdGlvbnMuY29uZGl0aW9uKSA6IFwie31cIjtcblx0XHRcdFx0XHRcdFx0XHR2YXIgZXh0SXNVbml0YXJ5ID0gZXh0R2F0ZURlZiAmJiAhIShleHRHYXRlRGVmLm1hdHJpeCAmJiBleHRHYXRlRGVmLm1hdHJpeC5sZW5ndGgpO1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly9cblx0XHRcdFx0XHRcdFx0XHQvLyBDaGVjayBpZiBnYXRlIGlzIHZhbGlkIGZvciBibG9ja1xuXHRcdFx0XHRcdFx0XHRcdC8vXG5cdFx0XHRcdFx0XHRcdFx0dmFyIGdhdGVWYWxpZCA9IGV4dElzVW5pdGFyeSAmJiAoZXh0Q29uZGl0aW9uID09IGN1cnJlbnRDb25kaXRpb24pO1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gQ2hlY2sgaWYgYWxsIGdhdGUncyB3aXJlcyBhcmUgaW5zaWRlIGJsb2NrXG5cdFx0XHRcdFx0XHRcdFx0aWYoZ2F0ZVZhbGlkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIHd3ID0gMDsgd3cgPCBleHRHYXRlLndpcmVzLmxlbmd0aDsgd3crKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZihleHRXaXJlcy5pbmRleE9mKGV4dEdhdGUud2lyZXNbd3ddKSA8IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRnYXRlVmFsaWQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdGlmKGdhdGVWYWxpZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gYWRkIGdhdGUgdG8gYmxvY2tcblx0XHRcdFx0XHRcdFx0XHRcdGN1cnJlbnRCbG9jay5nYXRlcy5wdXNoKGV4dEdhdGUpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRleHRHYXRlLndpcmVzLm1hcChmdW5jdGlvbih3dykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRkZWNvbXBvc2VkLmdhdGVzW3d3XVtleHRDb2x1bW5dLmFkZGVkVG9CbG9jayA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gcmVtb3ZlIGdhdGUncyB3aXJlcyBmcm9tIHNjYW5cblx0XHRcdFx0XHRcdFx0XHRcdHZhciB2YWxpZEV4dFdpcmVzID0gW107XG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIHd3ID0gMDsgd3cgPCBleHRXaXJlcy5sZW5ndGg7IHd3KyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGV4dFcgPSBleHRXaXJlc1t3d107XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGV4dEdhdGUud2lyZXMuaW5kZXhPZihleHRXKSA8IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YWxpZEV4dFdpcmVzLnB1c2goZXh0Vyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGV4dFdpcmVzID0gdmFsaWRFeHRXaXJlcztcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Ly8gZ290byBuZXh0IHZhbGlkIHdpcmVcblx0XHRcdFx0XHRcdFx0aWYoZXh0V2lyZXMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIG5ld0V4dFdpcmUgPSBleHRXaXJlc1tleHRXaXJlcy5sZW5ndGggLSAxXSArIDE7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciB3dyA9IGV4dFdpcmVzLmxlbmd0aCAtIDE7IHd3ID49IDA7IHd3LS0pIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBleHRXID0gZXh0V2lyZXNbd3ddO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoZXh0VyA+IGV4dFdpcmUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0bmV3RXh0V2lyZSA9IGV4dFc7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGV4dFdpcmUgPSBuZXdFeHRXaXJlO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGV4dENvbHVtbisrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHZhciBjaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cblx0dmFyIGJsb2NrQ291bnRlciA9IDA7XG5cdGZvcih2YXIgYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBibG9ja3MubGVuZ3RoOyBibG9ja0luZGV4KyspIHtcblx0XHR2YXIgYmxvY2sgPSBibG9ja3NbYmxvY2tJbmRleF07XG5cblx0XHR2YXIgaXNCbG9jayA9IGZhbHNlO1xuXHRcdGlmKGJsb2NrLndpcmVzLmxlbmd0aCA8PSBibG9ja1NpemUgfHwgISFvcHRpb25zLmZsZXhpYmxlQmxvY2tTaXplKSB7XG5cdFx0XHRmb3IodmFyIHggPSAwOyB4IDwgYmxvY2suZ2F0ZXMubGVuZ3RoOyB4KyspIHtcblx0XHRcdFx0dmFyIGdhdGUgPSBibG9jay5nYXRlc1t4XTtcblx0XHRcdFx0dmFyIGdhdGVEZWYgPSB0aGlzLmJhc2ljR2F0ZXNbZ2F0ZS5uYW1lXTtcblxuXHRcdFx0XHRpZihnYXRlRGVmLm1hdHJpeCAmJiBnYXRlRGVmLm1hdHJpeC5sZW5ndGgpIHtcblx0XHRcdFx0XHRpc0Jsb2NrID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmKGlzQmxvY2spIHtcblx0XHRcdGJsb2NrQ291bnRlcisrO1xuXG5cdFx0XHR2YXIgY3VzdG9tR2F0ZSA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRcdFx0Zm9yKHZhciB4ID0gMDsgeCA8IGJsb2NrLmdhdGVzLmxlbmd0aDsgeCsrKSB7XG5cdFx0XHRcdHZhciBnYXRlID0gYmxvY2suZ2F0ZXNbeF07XG5cblx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbikge1xuXHRcdFx0XHRcdGRlbGV0ZSBnYXRlLm9wdGlvbnMuY29uZGl0aW9uO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gVXBkYXRlIGdhdGUgd2lyZXNcblx0XHRcdFx0dmFyIHdpcmVzID0gW107XG5cdFx0XHRcdGdhdGUud2lyZXMubWFwKGZ1bmN0aW9uKHdpcmUpIHtcblx0XHRcdFx0XHR3aXJlcy5wdXNoKGJsb2NrLndpcmVzLmluZGV4T2Yod2lyZSkpO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0Z2F0ZS53aXJlcyA9IHdpcmVzO1xuXG5cdFx0XHRcdC8vIGFkZCBnYXRlIHRvIGN1c3RvbSBnYXRlXG5cdFx0XHRcdGN1c3RvbUdhdGUuYXBwZW5kR2F0ZShnYXRlLm5hbWUsIHdpcmVzLCBnYXRlLm9wdGlvbnMpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyByZWdpc3RlciBjdXN0b20gZ2F0ZVxuXHRcdFx0dmFyIGN1c3RvbUdhdGVOYW1lID0gXCJibG9ja1wiICsgYmxvY2tDb3VudGVyO1xuXHRcdFx0Y2lyY3VpdC5yZWdpc3RlckdhdGUoY3VzdG9tR2F0ZU5hbWUsIGN1c3RvbUdhdGUpO1xuXG5cdFx0XHQvLyBhZGQgY3VzdG9tIGdhdGUgdG8gY2lyY3VpdFxuXHRcdFx0dmFyIGN1c3RvbUdhdGVPcHRpb25zID0ge307XG5cdFx0XHRpZihibG9jay5jb25kaXRpb24pIHtcblx0XHRcdFx0Y3VzdG9tR2F0ZU9wdGlvbnMuY29uZGl0aW9uID0gYmxvY2suY29uZGl0aW9uO1xuXHRcdFx0fVxuXHRcdFx0Y2lyY3VpdC5hcHBlbmRHYXRlKGN1c3RvbUdhdGVOYW1lLCBibG9jay53aXJlcywgY3VzdG9tR2F0ZU9wdGlvbnMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyAtLS1cblx0XHRcdC8vIGFkZCBvcmlnaW5hbCBnYXRlIChub24tdW5pdGFyeSBnYXRlcyBbYW5kIGdhdGVzIHdpdGggbW9yZSB0aGFuIGJsb2NrU2l6ZSB3aXJlcyBpZiBhbGxvd0ZsZXhpYmxlQmxvY2tTaXplID0gZmFsc2VdKVxuXHRcdFx0Ly8gLS0tXG5cdFx0XHRibG9jay5nYXRlcy5tYXAoZnVuY3Rpb24oZ2F0ZSkge1xuXHRcdFx0XHRjaXJjdWl0LmFwcGVuZEdhdGUoZ2F0ZS5uYW1lLCBnYXRlLndpcmVzLCBnYXRlLm9wdGlvbnMpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0dGhpcy5sb2FkKGNpcmN1aXQuc2F2ZShmYWxzZSkpO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUudXNlZEdhdGVzID0gZnVuY3Rpb24ob3B0aW9ucykge1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR2YXIgZGVjb21wb3NlZCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRkZWNvbXBvc2VkLmxvYWQodGhpcy5zYXZlKHRydWUpKTtcblx0dmFyIHVzZWQgPSBbXTtcblx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IGRlY29tcG9zZWQubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRmb3IodmFyIGNvbCA9IDA7IGNvbCA8IGRlY29tcG9zZWQubnVtQ29scygpOyBjb2wrKykge1xuXHRcdFx0dmFyIGdhdGUgPSBkZWNvbXBvc2VkLmdhdGVzW3dpcmVdW2NvbF07XG5cdFx0XHRpZihnYXRlICYmIHVzZWQuaW5kZXhPZihnYXRlLm5hbWUpIDwgMCkge1xuXHRcdFx0XHR2YXIgc2tpcEdhdGUgPSBmYWxzZTtcblxuXHRcdFx0XHRpZihvcHRpb25zLnVuaXRhcmllc09ubHkpIHtcblx0XHRcdFx0XHR2YXIgYmFzaWNHYXRlID0gZGVjb21wb3NlZC5iYXNpY0dhdGVzW2dhdGUubmFtZV07XG5cdFx0XHRcdFx0aWYoIWJhc2ljR2F0ZSB8fCAhYmFzaWNHYXRlLm1hdHJpeCB8fCAhYmFzaWNHYXRlLm1hdHJpeC5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdHNraXBHYXRlID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZighc2tpcEdhdGUpIHtcblx0XHRcdFx0XHR1c2VkLnB1c2goZ2F0ZS5uYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIEN1c3RvbSBnYXRlc1xuXHRpZighb3B0aW9ucy5ub0N1c3RvbUdhdGVzKSB7XG5cdFx0Zm9yKHZhciBjdXN0b21HYXRlTmFtZSBpbiB0aGlzLmN1c3RvbUdhdGVzKSB7XG5cdFx0XHR2YXIgY3VzdG9tR2F0ZSA9IHRoaXMuY3VzdG9tR2F0ZXNbY3VzdG9tR2F0ZU5hbWVdO1xuXG5cdFx0XHRpZih1c2VkLmluZGV4T2YoY3VzdG9tR2F0ZU5hbWUpIDwgMCkge1xuXHRcdFx0XHR1c2VkLnB1c2goY3VzdG9tR2F0ZU5hbWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB1c2VkO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuY291bnRPcHMgPSBmdW5jdGlvbihvYmosIG9wdGlvbnMpIHtcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cdG9wdGlvbnMuc2hhbGxvdyA9IG9wdGlvbnMuc2hhbGxvdyB8fCBmYWxzZTtcblxuXHRpZighb2JqKSB7XG5cdFx0b2JqID0gdGhpcztcblx0fVxuXG5cdHZhciBvcHMgPSB7fTtcblx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IG9iai5nYXRlcy5sZW5ndGg7IHdpcmUrKykge1xuXHRcdGZvcih2YXIgY29sID0gMDsgY29sIDwgb2JqLmdhdGVzW3dpcmVdLmxlbmd0aDsgY29sKyspIHtcblx0XHRcdHZhciBnYXRlID0gb2JqLmdhdGVzW3dpcmVdW2NvbF07XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0dmFyIGJhc2ljR2F0ZSA9IHRoaXMuYmFzaWNHYXRlc1tnYXRlLm5hbWVdO1xuXHRcdFx0XHRpZihiYXNpY0dhdGUpIHtcblx0XHRcdFx0XHRpZihvcHNbZ2F0ZS5uYW1lXSkge1xuXHRcdFx0XHRcdFx0b3BzW2dhdGUubmFtZV0rKztcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0b3BzW2dhdGUubmFtZV0gPSAxO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YXIgY3VzdG9tR2F0ZSA9IHRoaXMuY3VzdG9tR2F0ZXNbZ2F0ZS5uYW1lXTtcblx0XHRcdFx0XHRpZihjdXN0b21HYXRlKSB7XG5cdFx0XHRcdFx0XHRpZihvcHNbZ2F0ZS5uYW1lXSkge1xuXHRcdFx0XHRcdFx0XHRvcHNbZ2F0ZS5uYW1lXSsrO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0b3BzW2dhdGUubmFtZV0gPSAxO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZighb3B0aW9ucy5zaGFsbG93KSB7XG5cdFx0XHRcdFx0XHRcdHZhciBzdWJPcHMgPSB0aGlzLmNvdW50T3BzKGN1c3RvbUdhdGUsIG9wdGlvbnMpO1xuXHRcdFx0XHRcdFx0XHRmb3Ioc3ViTmFtZSBpbiBzdWJPcHMpIHtcblx0XHRcdFx0XHRcdFx0XHRpZihvcHNbc3ViTmFtZV0pIHtcblx0XHRcdFx0XHRcdFx0XHRcdG9wc1tzdWJOYW1lXSArPSBzdWJPcHNbc3ViTmFtZV07XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdG9wc1tzdWJOYW1lXSA9IHN1Yk9wc1tzdWJOYW1lXTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gb3BzO1xufTtcblxuXG4vL1xuLy8gUmV0dXJucyBhcnJheXMgb2YgcXViaXRzIHdoZXJlIGdhdGVzIGFyZSBwcmVzZW50XG4vL1xuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmdldENvdXBsaW5nTWFwID0gZnVuY3Rpb24ob3B0aW9ucykge1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR2YXIgY291cGxpbmdNYXAgPSBcIlwiO1xuXG5cdHZhciBkZWNvbXBvc2VkID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdGRlY29tcG9zZWQubG9hZCh0aGlzLnNhdmUodHJ1ZSkpO1xuXG5cdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBkZWNvbXBvc2VkLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0Zm9yKHZhciBjb2wgPSAwOyBjb2wgPCBkZWNvbXBvc2VkLm51bUNvbHMoKTsgY29sKyspIHtcblx0XHRcdHZhciBnYXRlID0gZGVjb21wb3NlZC5nZXRHYXRlQXQoY29sLCB3aXJlKTtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCkge1xuXHRcdFx0XHR2YXIgc2tpcEdhdGUgPSBmYWxzZTtcblxuXHRcdFx0XHRpZihvcHRpb25zLnVuaXRhcmllc09ubHkpIHtcblx0XHRcdFx0XHR2YXIgYmFzaWNHYXRlID0gZGVjb21wb3NlZC5iYXNpY0dhdGVzW2dhdGUubmFtZV07XG5cdFx0XHRcdFx0aWYoIWJhc2ljR2F0ZSB8fCAhYmFzaWNHYXRlLm1hdHJpeCB8fCAhYmFzaWNHYXRlLm1hdHJpeC5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdHNraXBHYXRlID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZighc2tpcEdhdGUpIHtcblx0XHRcdFx0XHR2YXIgd2lyZXNTdHIgPSBKU09OLnN0cmluZ2lmeShnYXRlLndpcmVzKTtcblx0XHRcdFx0XHRpZihjb3VwbGluZ01hcC5pbmRleE9mKHdpcmVzU3RyKSA8IDApIHtcblx0XHRcdFx0XHRcdGlmKGNvdXBsaW5nTWFwKSB7XG5cdFx0XHRcdFx0XHRcdGNvdXBsaW5nTWFwICs9IFwiLFwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Y291cGxpbmdNYXAgKz0gd2lyZXNTdHI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIEpTT04ucGFyc2UoXCJbXCIgKyBjb3VwbGluZ01hcCArIFwiXVwiKTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5nZXRHYXRlRGVmID0gZnVuY3Rpb24obmFtZSkge1xuXHR2YXIgZ2F0ZURlZiA9IHRoaXMuYmFzaWNHYXRlc1tuYW1lXTtcblx0aWYoIWdhdGVEZWYpIHtcblx0XHRnYXRlRGVmID0gdGhpcy5jdXN0b21HYXRlc1tuYW1lXTtcblx0fVxuXHRyZXR1cm4gZ2F0ZURlZjtcbn07XG5cbi8vIC0tLVxuLy8gSW1wb3J0IGZyb20gUXViaXQgVG9hc3RlclxuLy8gLS0tXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuaW1wb3J0UmF3ID0gZnVuY3Rpb24oZGF0YSwgZXJyb3JDYWxsYmFjaykge1xuXHR2YXIgbnVtUXViaXRzID0gZGF0YSA/IChkYXRhLnF1Yml0cyB8fCAwKSA6IDA7XG5cblx0dGhpcy5pbml0KG51bVF1Yml0cyk7XG5cblx0aWYoIWRhdGEpIHtcblx0XHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0XHRlcnJvckNhbGxiYWNrKFtdKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0fVxuXG5cdC8vIGltcG9ydCBjbGFzc2ljYWwgcmVnaXN0ZXJzXG5cdGlmKGRhdGEuY3JlZ3MpIHtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgZGF0YS5jcmVncy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGNyZWcgPSBkYXRhLmNyZWdzW2ldO1xuXG5cdFx0XHRpZighY3JlZy5uYW1lKSB7XG5cdFx0XHRcdHZhciBlcnJvck1lc3NhZ2UgPSBcIkNsYXNzaWNhbCByZWdpc3RlciBcIiArIGkgKyBcIiBkb2Vzbid0IGhhdmUgYSBcXFwibmFtZVxcXCIuXCI7XG5cdFx0XHRcdGlmKGVycm9yQ2FsbGJhY2spIHtcblx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKFsgeyBtc2c6IGVycm9yTWVzc2FnZSwgbGluZTogMCwgY29sOiAwIH0gXSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuY3JlYXRlQ3JlZyhjcmVnLm5hbWUsIGNyZWcubGVuIHx8IDApO1xuXHRcdH1cblx0fVxuXG5cdC8vIGltcG9ydCBwcm9ncmFtXG5cdGlmKGRhdGEucHJvZ3JhbSkge1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBkYXRhLnByb2dyYW0ubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBnYXRlID0gZGF0YS5wcm9ncmFtW2ldO1xuXG5cdFx0XHQvLyBJbXBvcnQgZnJvbSBtYXRyaXggaXMgbm90IGltcGxlbWVudGVkIHlldCwgc28gYmVzdCB3ZSBoYXZlIGlzIGdhdGUgbmFtZVxuXHRcdFx0Ly8gQ2hlY2sgaWYgZ2F0ZSBoYXMgbmFtZVxuXHRcdFx0aWYoIWdhdGUubmFtZSkge1xuXHRcdFx0XHR2YXIgZXJyb3JNZXNzYWdlID0gXCJHYXRlIFwiICsgaSArIFwiIGRvZXNuJ3QgaGF2ZSBhIFxcXCJuYW1lXFxcIi4gTmFtZSBpcyBvcHRpb25hbCBhbmQgdGhpcyBpcyBPSyBmb3IgUXViaXRUb2FzdGVyIGJ1dCB3ZSBjYW5ub3QgaW1wb3J0IGdhdGUgZnJvbSBtYXRyaXguIE5vdCBpbXBsZW1lbnRlZCB5ZXQuXCI7XG5cdFx0XHRcdGlmKGVycm9yQ2FsbGJhY2spIHtcblx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKFsgeyBtc2c6IGVycm9yTWVzc2FnZSwgbGluZTogMCwgY29sOiAwIH0gXSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIENoZWNrIGlmIGdhdGUgbmFtZSBleGlzdHMgaW4gdGhpcy5iYXNpY0dhdGVzXG5cdFx0XHR2YXIgYmFzaWNHYXRlID0gdGhpcy5iYXNpY0dhdGVzW2dhdGUubmFtZV07XG5cdFx0XHRpZighYmFzaWNHYXRlKSB7XG5cdFx0XHRcdHZhciBlcnJvck1lc3NhZ2UgPSBcIlVua25vd24gZ2F0ZSBcXFwiXCIgKyBnYXRlLm5hbWUgKyBcIlxcXCIuIE5hbWUgaXMgb3B0aW9uYWwgYW5kIHRoaXMgaXMgT0sgZm9yIFF1Yml0VG9hc3RlciBidXQgd2UgY2Fubm90IGltcG9ydCBnYXRlIGZyb20gbWF0cml4LiBXZSBjYW4gaW1wb3J0IG9ubHkgZ2F0ZXMgYnkgbmFtZSBmcm9tIHNldCBvZiBrbm93biBnYXRlcy5cIjtcblx0XHRcdFx0aWYoZXJyb3JDYWxsYmFjaykge1xuXHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soWyB7IG1zZzogZXJyb3JNZXNzYWdlLCBsaW5lOiAwLCBjb2w6IDAgfSBdKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXG5cdFx0XHR2YXIgd2lyZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGdhdGUud2lyZXMgfHwgW10pKTtcblx0XHRcdHZhciBvcHRpb25zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShnYXRlLm9wdGlvbnMgfHwge30pKTtcblxuXHRcdFx0Ly8gY2hlY2sgaWYgbnVtYmVyIG9mIHdpcmVzIGlzIGNvcnJlY3Rcblx0XHRcdHZhciBiYXNpY0dhdGVRdWJpdHMgPSBiYXNpY0dhdGUubWF0cml4ICYmIGJhc2ljR2F0ZS5tYXRyaXgubGVuZ3RoID8gbWF0aC5sb2cyKGJhc2ljR2F0ZS5tYXRyaXgubGVuZ3RoKSA6IDE7XG5cdFx0XHRpZih3aXJlcy5sZW5ndGggIT0gYmFzaWNHYXRlUXViaXRzKSB7XG5cdFx0XHRcdHZhciBlcnJvck1lc3NhZ2UgPSBcIkdhdGUgXFxcIlwiICsgZ2F0ZS5uYW1lICsgXCJcXFwiIGhhcyBcIiArIHdpcmVzLmxlbmd0aCArIFwiIHdpcmVzIGJ1dCBzaG91bGQgaGF2ZSBcIiArIGJhc2ljR2F0ZVF1Yml0cyArIFwiIHdpcmVzLlwiO1xuXHRcdFx0XHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0ZXJyb3JDYWxsYmFjayhbIHsgbXNnOiBlcnJvck1lc3NhZ2UsIGxpbmU6IDAsIGNvbDogMCB9IF0pO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBDaGVjayBpZiBhbGwgcGFyYW1ldGVycyBhcmUgcHJlc2VudFxuXHRcdFx0aWYoYmFzaWNHYXRlLnBhcmFtcyAmJiBiYXNpY0dhdGUucGFyYW1zLmxlbmd0aCkge1xuXHRcdFx0XHRpZighb3B0aW9ucy5wYXJhbXMpIHtcblx0XHRcdFx0XHR2YXIgZXJyb3JNZXNzYWdlID0gXCJNaXNzaW5nIHBhcmFtZXRlcnMgZm9yIGdhdGUgXFxcIlwiICsgZ2F0ZS5uYW1lICsgXCJcXFwiLiBFeHBlY3RpbmcgXCIgKyBiYXNpY0dhdGUucGFyYW1zLmxlbmd0aCArIFwiIHBhcmFtZXRlcnMuXCI7XG5cdFx0XHRcdFx0aWYoZXJyb3JDYWxsYmFjaykge1xuXHRcdFx0XHRcdFx0ZXJyb3JDYWxsYmFjayhbIHsgbXNnOiBlcnJvck1lc3NhZ2UsIGxpbmU6IDAsIGNvbDogMCB9IF0pO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IodmFyIHAgPSAwOyBwIDwgYmFzaWNHYXRlLnBhcmFtcy5sZW5ndGg7IHArKykge1xuXHRcdFx0XHRcdHZhciBwYXJhbU5hbWUgPSBiYXNpY0dhdGUucGFyYW1zW3BdO1xuXG5cdFx0XHRcdFx0aWYodHlwZW9mIG9wdGlvbnMucGFyYW1zW3BhcmFtTmFtZV0gPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0XHRcdFx0dmFyIGVycm9yTWVzc2FnZSA9IFwiTWlzc2luZyBwYXJhbWV0ZXIgXFxcIlwiICsgcGFyYW1OYW1lICsgXCJcXFwiIGZvciBnYXRlIFxcXCJcIiArIGdhdGUubmFtZSArIFwiXFxcIi5cIjtcblx0XHRcdFx0XHRcdGlmKGVycm9yQ2FsbGJhY2spIHtcblx0XHRcdFx0XHRcdFx0ZXJyb3JDYWxsYmFjayhbIHsgbXNnOiBlcnJvck1lc3NhZ2UsIGxpbmU6IDAsIGNvbDogMCB9IF0pO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0dGhpcy5hcHBlbmRHYXRlKGdhdGUubmFtZSwgd2lyZXMsIG9wdGlvbnMpO1xuXHRcdH1cblx0fVxuXG5cdC8vIFRoaXMgZXJyb3IgaGFuZGxpbmcgaXMgY3IqcCBidXQgbGV0J3MgYmUgY29uc2lzdGVudCB3aXRoIGltcG9ydFFBU00oKSBmb3Igbm93XG5cdGlmKGVycm9yQ2FsbGJhY2spIHtcblx0XHRlcnJvckNhbGxiYWNrKFtdKTtcblx0fVxufTtcblxuLy8gLS0tXG4vLyBFeHBvcnQgdG8gUXViaXQgVG9hc3RlclxuLy8gLS0tXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0UmF3ID0gZnVuY3Rpb24oKSB7XG5cdHZhciBnbG9iYWxQYXJhbXMgPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLnBhcmFtcyA/IHRoaXMub3B0aW9ucy5wYXJhbXMgOiB7fTtcblx0dmFyIGdsb2JhbFBhcmFtcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZ2xvYmFsUGFyYW1zKSk7XG5cdGZvcih2YXIgZ2xvYmFsUGFyYW1OYW1lIGluIGdsb2JhbFBhcmFtcykge1xuXHRcdGdsb2JhbFBhcmFtc1tnbG9iYWxQYXJhbU5hbWVdID0gbWF0aC5ldmFsdWF0ZShnbG9iYWxQYXJhbXNbZ2xvYmFsUGFyYW1OYW1lXSk7XG5cdH1cblxuXHR2YXIgZGVjb21wb3NlZCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRkZWNvbXBvc2VkLmxvYWQodGhpcy5zYXZlKHRydWUpKTtcblxuXHR2YXIgbnVtQ29scyA9IGRlY29tcG9zZWQubnVtQ29scygpO1xuXHR2YXIgc2VxdWVuY2UgPSBbXTtcblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBkZWNvbXBvc2VkLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGRlY29tcG9zZWQuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0dmFyIGd0ID0gZGVjb21wb3NlZC5iYXNpY0dhdGVzW2dhdGUubmFtZV07XG5cdFx0XHRcdGlmKCFndCkge1xuXHRcdFx0XHRcdGNvbnNvbGUubG9nKFwiVW5rbm93biBnYXRlIFxcXCJcIiArIGdhdGUubmFtZSArIFwiXFxcIi5cIik7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFyIHJhd0dhdGUgPSBkZWNvbXBvc2VkLmdldFJhd0dhdGUoZ3QsIGdhdGUub3B0aW9ucyk7XG5cblx0XHRcdFx0dmFyIHJhd01hdHJpeCA9IFtdO1xuXHRcdFx0XHRyYXdHYXRlLm1hcChmdW5jdGlvbihyb3cpIHtcblx0XHRcdFx0XHR2YXIgcmF3Um93ID0gW107XG5cdFx0XHRcdFx0cm93Lm1hcChmdW5jdGlvbihjZWxsKSB7XG5cdFx0XHRcdFx0XHRjZWxsID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjZWxsKSk7XG5cdFx0XHRcdFx0XHRpZih0eXBlb2YgY2VsbCA9PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0XHRcdGlmKGNlbGxbXCJtYXRoanNcIl0gJiYgdHlwZW9mIGNlbGxbXCJtYXRoanNcIl0gPT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRcdFx0XHRcdGNlbGxbXCJ0eXBlXCJdID0gY2VsbFtcIm1hdGhqc1wiXS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSBjZWxsLm1hdGhqcztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmF3Um93LnB1c2goY2VsbCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0cmF3TWF0cml4LnB1c2gocmF3Um93KTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0dmFyIG9wdGlvbnMgPSB7fTtcblx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zKSB7XG5cdFx0XHRcdFx0b3B0aW9ucyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZ2F0ZS5vcHRpb25zKSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZihvcHRpb25zLnBhcmFtcykge1xuXHRcdFx0XHRcdGZvcih2YXIgcGFyYW1OYW1lIGluIG9wdGlvbnMucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRvcHRpb25zLnBhcmFtc1twYXJhbU5hbWVdID0gbWF0aC5ldmFsdWF0ZShvcHRpb25zLnBhcmFtc1twYXJhbU5hbWVdLCBnbG9iYWxQYXJhbXMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHNlcXVlbmNlLnB1c2goe1xuXHRcdFx0XHRcdG5hbWU6IGdhdGUubmFtZSxcblx0XHRcdFx0XHRtYXRyaXg6IHJhd01hdHJpeCxcblx0XHRcdFx0XHR3aXJlczogZ2F0ZS53aXJlcyxcblx0XHRcdFx0XHRvcHRpb25zOiBvcHRpb25zXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHZhciBjcmVncyA9IFtdO1xuXHRmb3IodmFyIGNyZWcgaW4gZGVjb21wb3NlZC5jcmVncykge1xuXHRcdGNyZWdzLnB1c2goe1xuXHRcdFx0bmFtZTogY3JlZyxcblx0XHRcdGxlbjogZGVjb21wb3NlZC5jcmVnc1tjcmVnXS5sZW5ndGggfHwgMFxuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRxdWJpdHM6IGRlY29tcG9zZWQubnVtUXViaXRzLFxuXHRcdGNyZWdzOiBjcmVncyxcblx0XHRwcm9ncmFtOiBzZXF1ZW5jZVxuXHR9O1xufTtcblxuLy9cbi8vIFJldHVybnMgaW5wdXQgZmlsZSBmb3IgUXVhbnR1bSBHZW5lcmF0b3Jcbi8vXG4vLyBvcHRpb25zOiB7IFxuLy8gICAgIG5vVmVjdG9yczogYm9vbCAoZGVmYXVsdDogZmFsc2UpIC8vIHNldCB0cnVlIGZvciB0cmFuc3BpbGluZyB3aXRoIFwicmVwbGFjZV9ibG9ja3NcIiAmIFwicmVwbGFjZV9nYXRlc1wiIG1ldGhvZHMgdG8gYXZvaWQgZ2VuZXJhdGluZyAobGFyZ2UpIHZlY3RvcnNcbi8vICAgICBmcm9tTWF0cml4OiBib29sIChkZWZhdWx0OiBmYWxzZSkgLy8gZGlyZWN0bHkgc2VuZCBtYXRyaXggdG8gZ2VuZXJhdG9yIChpbnN0ZWFkIHZlY3RvcnMpXG4vLyAgICAgbnVtU2FtcGxlczogaW50IChkZWZhdWx0OiBhdXRvKSAvLyBudW1iZXIgb2YgcmFuZG9tIHZlY3RvcnNcbi8vICAgICB1c2VHYXRlczogYXJyYXkgb2Ygc3RyaW5nIChkZWZhdWx0OiBbXCJ1MywgXCJjeFwiXSkgLy8gZ2F0ZXMgdG8gdXNlIHdoZW4gZ2VuZXJhdGluZyByYW5kb20gdmVjdG9yc1xuLy8gfVxuLy9cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFRvR2VuZXJhdG9yID0gZnVuY3Rpb24ob3B0aW9ucykge1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR2YXIgcWFzbSA9IHRoaXMuZXhwb3J0UUFTTShudWxsLCBmYWxzZSwgbnVsbCwgZmFsc2UsIHRydWUpO1xuXHR2YXIgdXNlZEdhdGVzID0gdGhpcy51c2VkR2F0ZXMoeyBub0N1c3RvbUdhdGVzOiB0cnVlLCB1bml0YXJpZXNPbmx5OiB0cnVlIH0pO1xuXHR2YXIgY291cGxpbmdNYXAgPSB0aGlzLmdldENvdXBsaW5nTWFwKHsgdW5pdGFyaWVzT25seTogdHJ1ZSB9KTtcblxuXHR2YXIgb3V0cHV0ID0ge1xuXHRcdHNvdXJjZTogeyBcblx0XHRcdGNpcmN1aXQ6IHsgXG5cdFx0XHRcdHFhc206IHFhc21cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0cHJvYmxlbTogW10sXG5cblx0XHR0eXBlOiBcImNpcmN1aXRcIixcblxuXHRcdHNldHRpbmdzOiB7XG5cdFx0XHRhbGxvd2VkX2dhdGVzOiB1c2VkR2F0ZXMuam9pbihcIixcIiksXG5cdFx0XHRjb3VwbGluZ19tYXA6IGNvdXBsaW5nTWFwXG5cdFx0fVxuXHR9O1xuXG5cdHZhciBjaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdGNpcmN1aXQubG9hZCh0aGlzLnNhdmUodHJ1ZSkpO1xuXG5cdGlmKG9wdGlvbnMuZnJvbU1hdHJpeCkge1xuXHRcdHZhciBtYXRyaXggPSBjaXJjdWl0LmNpcmN1aXRNYXRyaXgoKTtcblx0XHR2YXIgdW5pdGFyeSA9IFtdO1xuXG5cdFx0bWF0cml4Lm1hcChmdW5jdGlvbihyb3cpIHtcblx0XHRcdHJvdy5tYXAoZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdFx0aWYodHlwZW9mIHZhbHVlID09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHR1bml0YXJ5LnB1c2goW3ZhbHVlLnJlLCB2YWx1ZS5pbV0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHVuaXRhcnkucHVzaCh2YWx1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0b3V0cHV0LnByb2JsZW0ucHVzaCh7XG5cdFx0XHR1bml0YXJ5OiB1bml0YXJ5XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9XG5cblx0aWYoIW9wdGlvbnMubm9WZWN0b3JzKSB7XG5cdFx0dmFyIHN0YXRlQ2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXG5cdFx0dmFyIG51bVNhbXBsZXMgPSBvcHRpb25zLm51bVNhbXBsZXMgfHwgKHRoaXMubnVtUXViaXRzIDwgMyA/IDggOiAodGhpcy5udW1RdWJpdHMgPCA1ID8gKCgxIDw8IHRoaXMubnVtUXViaXRzKSArIDEpIDogKHRoaXMubnVtUXViaXRzIDwgOSA/ICh0aGlzLm51bVF1Yml0cyAqIDQpIDogdGhpcy5udW1RdWJpdHMpKSk7XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IG51bVNhbXBsZXMgKyAxOyBpKyspIHtcblxuXHRcdFx0dmFyIHNldCA9IHsgaW5wdXQ6IFtdLCBvdXRwdXQ6IFtdIH07XG5cblx0XHRcdHZhciBpbml0aWFsVmVjdG9yID0gW107XG5cblx0XHRcdGlmKGkgPiAwKSB7XG5cdFx0XHRcdHN0YXRlQ2lyY3VpdC5yYW5kb21DaXJjdWl0KHRoaXMubnVtUXViaXRzLCAyMCwgeyB1c2VHYXRlczogb3B0aW9ucy51c2VHYXRlcyB8fCBbXCJ1M1wiLCBcImN4XCJdLCBub0NsYXNzaWNDb250cm9sOiB0cnVlLCBub01lYXN1cmU6IHRydWUsIG5vUmVzZXQ6IHRydWUgfSk7XG5cdFx0XHRcdHN0YXRlQ2lyY3VpdC5ydW4oKTtcblxuXHRcdFx0XHRzdGF0ZUNpcmN1aXQuc3RhdGVBc0FycmF5KCkubWFwKGZ1bmN0aW9uKHN0YXRlKSB7XG5cdFx0XHRcdFx0c2V0LmlucHV0LnB1c2goWyBzdGF0ZS5hbXBsaXR1ZGUucmUsIHN0YXRlLmFtcGxpdHVkZS5pbSBdKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0aW5pdGlhbFZlY3RvciA9IHN0YXRlQ2lyY3VpdC5zdGF0ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNpcmN1aXQuaW5pdFN0YXRlKCk7XG5cblx0XHRcdFx0Y2lyY3VpdC5zdGF0ZUFzQXJyYXkoKS5tYXAoZnVuY3Rpb24oc3RhdGUpIHtcblx0XHRcdFx0XHRzZXQuaW5wdXQucHVzaChbIHN0YXRlLmFtcGxpdHVkZS5yZSwgc3RhdGUuYW1wbGl0dWRlLmltIF0pO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRpbml0aWFsVmVjdG9yID0gY2lyY3VpdC5zdGF0ZTtcblx0XHRcdH1cblxuXHRcdFx0Y2lyY3VpdC5ydW4obnVsbCwgeyBpbml0aWFsU3RhdGU6IGluaXRpYWxWZWN0b3IgfSk7XG5cblx0XHRcdGNpcmN1aXQuc3RhdGVBc0FycmF5KCkubWFwKGZ1bmN0aW9uKHN0YXRlKSB7XG5cdFx0XHRcdHNldC5vdXRwdXQucHVzaChbIHN0YXRlLmFtcGxpdHVkZS5yZSwgc3RhdGUuYW1wbGl0dWRlLmltIF0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdG91dHB1dC5wcm9ibGVtLnB1c2goc2V0KTtcblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dDtcblx0fVxuXG5cdHJldHVybiBvdXRwdXQ7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5zYXZlID0gZnVuY3Rpb24oZGVjb21wb3NlLCBsaWdodHdlaWdodCkge1xuXHR0aGlzLnVwZGF0ZUdsb2JhbFBhcmFtcygpO1xuXG5cdHZhciBkYXRhID0ge1xuXHRcdG51bVF1Yml0czogdGhpcy5udW1RdWJpdHMsXG5cdFx0cGFyYW1zOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMucGFyYW1zKSksXG5cdFx0b3B0aW9uczogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLm9wdGlvbnMpKSxcblx0XHRnYXRlczogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmdhdGVzKSksXG5cdFx0Y3VzdG9tR2F0ZXM6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5jdXN0b21HYXRlcykpLFxuXHRcdGNyZWdzOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuY3JlZ3MpKVxuXHR9XG5cblx0dmFyIHJlcyA9IG51bGw7XG5cdGlmKGRlY29tcG9zZSkge1xuXHRcdHJlcyA9IHRoaXMuZGVjb21wb3NlKGRhdGEpO1xuXHR9IGVsc2Uge1xuXHRcdHJlcyA9IGRhdGE7XG5cdH1cblxuXHQvLyAtLS1cblx0Ly8gcmVtb3ZlIElkIGZyb20gZ2F0ZXM/XG5cdC8vIC0tLVxuXHRpZihsaWdodHdlaWdodCkge1xuXHRcdGlmKHJlcy5nYXRlcykge1xuXHRcdFx0cmVzLmdhdGVzLm1hcChmdW5jdGlvbihyb3cpIHtcblx0XHRcdFx0aWYocm93KSB7XG5cdFx0XHRcdFx0cm93Lm1hcChmdW5jdGlvbihjZWxsKSB7XG5cdFx0XHRcdFx0XHRpZihjZWxsICYmIGNlbGwuaWQpIHtcblx0XHRcdFx0XHRcdFx0ZGVsZXRlIGNlbGwuaWQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGlmKHJlcy5jdXN0b21HYXRlcykge1xuXHRcdFx0Zm9yKHZhciBjdXN0b21HYXRlTmFtZSBpbiByZXMuY3VzdG9tR2F0ZXMpIHtcblx0XHRcdFx0dmFyIGN1c3RvbUdhdGUgPSByZXMuY3VzdG9tR2F0ZXNbY3VzdG9tR2F0ZU5hbWVdO1xuXHRcdFx0XHRpZihjdXN0b21HYXRlICYmIGN1c3RvbUdhdGUuZ2F0ZXMpIHtcblx0XHRcdFx0XHRjdXN0b21HYXRlLmdhdGVzLm1hcChmdW5jdGlvbihyb3cpIHtcblx0XHRcdFx0XHRcdGlmKHJvdykge1xuXHRcdFx0XHRcdFx0XHRyb3cubWFwKGZ1bmN0aW9uKGNlbGwpIHtcblx0XHRcdFx0XHRcdFx0XHRpZihjZWxsICYmIGNlbGwuaWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSBjZWxsLmlkO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0Ly8gLS0tXG5cblx0cmV0dXJuIHJlcztcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24ob2JqKSB7XG5cdHRoaXMubnVtUXViaXRzID0gb2JqLm51bVF1Yml0cyB8fCAxO1xuXHR0aGlzLmNsZWFyKCk7XG5cdHRoaXMucGFyYW1zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmoucGFyYW1zIHx8IFtdKSk7XG5cdHRoaXMub3B0aW9ucyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqLm9wdGlvbnMgfHwge30pKTtcblx0dGhpcy5nYXRlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqLmdhdGVzIHx8IFtdKSk7XG5cdHRoaXMuY3VzdG9tR2F0ZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9iai5jdXN0b21HYXRlcyB8fCB7fSkpO1xuXHR0aGlzLmNyZWdzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmouY3JlZ3MgfHwge30pKTtcblx0Ly8gZGVmYXVsdCBvcHRpb25zXG5cdHRoaXMub3B0aW9ucy5wYXJhbXMgPSB0aGlzLm9wdGlvbnMucGFyYW1zIHx8IHt9O1xuXHR0aGlzLm9wdGlvbnMuaHlicmlkID0gdGhpcy5vcHRpb25zLmh5YnJpZCB8fCBmYWxzZTtcblx0aWYoIXRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zKSB7XG5cdFx0dGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMgPSB0aGlzLmRlZmF1bHRIeWJyaWRPcHRpb25zKCk7XG5cdH1cbn07XG5cblxudmFyIGdlbmVyYXRlR3JheUNvZGUgPSBmdW5jdGlvbihudW1CaXRzKSB7XG5cdGlmKG51bUJpdHMgPD0gMCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBnZW5lcmF0ZSB0aGUgZ3JheSBjb2RlIGZvciBsZXNzIHRoYW4gMSBiaXQuXCIpO1xuXHR9XG5cblx0dmFyIHJlc3VsdCA9IFswXTtcblx0Zm9yKGkgPSAwOyBpIDwgbnVtQml0czsgaSsrKSB7XG5cdFx0dmFyIHJldmVyc2VkID0gW10uY29uY2F0KHJlc3VsdCkucmV2ZXJzZSgpO1xuXHRcdHJldmVyc2VkLm1hcChmdW5jdGlvbih4KSB7XG5cdFx0XHRyZXN1bHQucHVzaCh4ICsgbWF0aC5wb3coMiwgaSkpO1xuXHRcdH0pO1xuXHR9XG5cblx0dmFyIGdyYXkgPSBbXTtcblx0cmVzdWx0Lm1hcChmdW5jdGlvbihkZWMpIHtcblx0XHRncmF5LnB1c2goYmluU3RyKGRlYywgbnVtQml0cykpO1xuXHR9KTtcblxuXHRyZXR1cm4gZ3JheTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmdyYXlDb2RlQ2hhaW4gPSBmdW5jdGlvbihudW1DdHJsUXViaXRzLCBnYXRlTmFtZSwgZ2F0ZU9wdGlvbnMpIHtcblxuXHRmdW5jdGlvbiBjb21wYXJlU3RyaW5ncyhzMSwgczIpIHtcblx0XHR2YXIgY29tcCA9IFtdO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBzMS5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29tcC5wdXNoKHMxW2ldICE9IHMyW2ldKTtcblx0XHR9XG5cdFx0cmV0dXJuIGNvbXA7XG5cdH1cblxuXHRmdW5jdGlvbiBpbmRpY2VzT2ZDaGFyKHMsIGNoKSB7XG5cdFx0dmFyIGluZGljZXMgPSBbXTtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYoc1tpXSA9PSBjaCkge1xuXHRcdFx0XHRpbmRpY2VzLnB1c2goaSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBpbmRpY2VzO1xuXHR9XG5cblx0ZnVuY3Rpb24gY291bnRDaGFyKHMsIGNoKSB7XG5cdFx0dmFyIGNvdW50ID0gMDtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYoc1tpXSA9PSBjaCkge1xuXHRcdFx0XHRjb3VudCsrO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gY291bnQ7XG5cdH1cblxuXHR2YXIgcUNvbnRyb2xzID0gW107XG5cdGZvcih2YXIgaSA9IDA7IGkgPCBudW1DdHJsUXViaXRzOyBpKyspIHtcblx0XHRxQ29udHJvbHMucHVzaChpKTtcblx0fVxuXG5cdHZhciBxVGFyZ2V0ID0gbnVtQ3RybFF1Yml0cztcblx0dmFyIGdyYXlDb2RlID0gZ2VuZXJhdGVHcmF5Q29kZShudW1DdHJsUXViaXRzKTtcblx0dmFyIGxhc3RQYXR0ZXJuID0gbnVsbDtcblxuXHR2YXIgcnVsZXMgPSBbXTtcblx0Z3JheUNvZGUubWFwKGZ1bmN0aW9uKHBhdHRlcm4pIHtcblx0XHR2YXIgbG1Qb3MgPSBwYXR0ZXJuLmluZGV4T2YoXCIxXCIpO1xuXHRcdGlmKGxtUG9zID49IDApIHtcblx0XHRcdGlmKCFsYXN0UGF0dGVybikge1xuXHRcdFx0XHRsYXN0UGF0dGVybiA9IHBhdHRlcm47XG5cdFx0XHR9XG5cblx0XHRcdHZhciBjb21wID0gY29tcGFyZVN0cmluZ3MocGF0dGVybiwgbGFzdFBhdHRlcm4pO1xuXHRcdFx0dmFyIHBvcyA9IGNvbXAuaW5kZXhPZih0cnVlKTtcblx0XHRcdGlmKHBvcyA+PSAwKSB7XG5cdFx0XHRcdGlmKHBvcyAhPSBsbVBvcykge1xuXHRcdFx0XHRcdHJ1bGVzLnB1c2goeyBnYXRlTmFtZTogXCJjeFwiLCB3aXJlczogWyBxQ29udHJvbHNbcG9zXSwgcUNvbnRyb2xzW2xtUG9zXSBdLCBvcHRpb25zOiBudWxsIH0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHZhciBpbmRpY2VzID0gaW5kaWNlc09mQ2hhcihwYXR0ZXJuLCBcIjFcIik7XG5cdFx0XHRcdFx0Zm9yKHZhciBpZHggPSAxOyBpZHggPCBpbmRpY2VzLmxlbmd0aDsgaWR4KyspIHtcblx0XHRcdFx0XHRcdHJ1bGVzLnB1c2goeyBnYXRlTmFtZTogXCJjeFwiLCB3aXJlczogWyBxQ29udHJvbHNbaW5kaWNlc1tpZHhdXSwgcUNvbnRyb2xzW2xtUG9zXSBdLCBvcHRpb25zOiBudWxsIH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZighKGNvdW50Q2hhcihwYXR0ZXJuLCBcIjFcIikgJSAyKSkge1xuXHRcdFx0XHQvLyBpbnZlcnNlXG5cdFx0XHRcdC8vICEhIVxuXHRcdFx0XHQvLyBXYXJuaW5nIC0gdGhpcyB3b3JrcyBvbmx5IHdpdGggZ2F0ZSB3aGljaCBpcyBvd24gaW52ZXJzZVxuXHRcdFx0XHQvLyBUT0RPOiBpbXBsZW1lbnQgcHJvcGVyIGludmVyc2UgZm9yIGFsbCBnYXRlc1xuXHRcdFx0XHQvLyAhISFcblx0XHRcdFx0dmFyIGludmVyc2VPcHRpb25zID0gbnVsbDtcblx0XHRcdFx0aWYoZ2F0ZU9wdGlvbnMpIHtcblx0XHRcdFx0XHRpbnZlcnNlT3B0aW9ucyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZ2F0ZU9wdGlvbnMpKTtcblx0XHRcdFx0XHRpZihpbnZlcnNlT3B0aW9ucy5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdGZvcihrZXkgaW4gaW52ZXJzZU9wdGlvbnMucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdHZhciB2YWwgPSBpbnZlcnNlT3B0aW9ucy5wYXJhbXNba2V5XTtcblx0XHRcdFx0XHRcdFx0aWYodHlwZW9mIHZhbCA9PSBcIm51bWJlclwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFsID0gMCAtIHZhbDtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHR2YWwgPSBcIi0oXCIgKyB2YWwgKyBcIilcIjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRpbnZlcnNlT3B0aW9ucy5wYXJhbXNba2V5XSA9IHZhbDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cnVsZXMucHVzaCh7IGdhdGVOYW1lOiBnYXRlTmFtZSwgd2lyZXM6IFsgcUNvbnRyb2xzW2xtUG9zXSwgcVRhcmdldCBdLCBvcHRpb25zOiBpbnZlcnNlT3B0aW9ucyB9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJ1bGVzLnB1c2goeyBnYXRlTmFtZTogZ2F0ZU5hbWUsIHdpcmVzOiBbIHFDb250cm9sc1tsbVBvc10sIHFUYXJnZXQgXSwgb3B0aW9uczogZ2F0ZU9wdGlvbnMgfSk7XG5cdFx0XHR9XG5cdFx0XHRsYXN0UGF0dGVybiA9IHBhdHRlcm47XG5cdFx0fVxuXHR9KTtcblxuXHRyZXR1cm4gcnVsZXM7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5NQ1UxQ2lyY3VpdCA9IGZ1bmN0aW9uKGN0cmxRdWJpdHMpIHtcblx0dmFyIG51bUN0cmxRdWJpdHMgPSAwO1xuXHR2YXIgaW52ZXJ0Q29udHJvbHMgPSBbXTtcblx0aWYodHlwZW9mIGN0cmxRdWJpdHMgPT0gXCJudW1iZXJcIikge1xuXHRcdG51bUN0cmxRdWJpdHMgPSBjdHJsUXViaXRzO1xuXHR9IGVsc2Uge1xuXHRcdG51bUN0cmxRdWJpdHMgPSBjdHJsUXViaXRzLmxlbmd0aCB8fCAwO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBudW1DdHJsUXViaXRzOyBpKyspIHtcblx0XHRcdGlmKCFjdHJsUXViaXRzW2ldIHx8ICh0eXBlb2YgY3RybFF1Yml0c1tpXSA9PSBcIm51bWJlclwiICYmIGN0cmxRdWJpdHNbaV0gPCAwKSkge1xuXHRcdFx0XHRpbnZlcnRDb250cm9scy5wdXNoKGkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmKG51bUN0cmxRdWJpdHMgPT0gMCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBjcmVhdGUgbXVsdGktY29udHJvbGxlZCBnYXRlIHdpdGggemVybyBjb250cm9sIHF1Yml0cy5cIik7XG5cdH1cblxuXHRmdW5jdGlvbiBhZGRYKGNpcmN1aXQsIHdpcmVzKSB7XG5cdFx0d2lyZXMubWFwKGZ1bmN0aW9uKHdpcmUpIHtcblx0XHRcdGNpcmN1aXQuYXBwZW5kR2F0ZShcInhcIiwgd2lyZSk7XG5cdFx0fSk7XG5cdH1cblxuXHR2YXIgc2NhbGVkTGFtYmRhID0gXCJsYW1iZGEgLyBcIiArIG1hdGgucG93KDIsIG51bUN0cmxRdWJpdHMgLSAxKTtcblx0dmFyIGdhdGVPcHRpb25zID0geyBwYXJhbXM6IHsgbGFtYmRhOiBzY2FsZWRMYW1iZGEgfSB9O1xuXG5cdHZhciBxYyA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXG5cdGlmKG51bUN0cmxRdWJpdHMgPT0gMSkge1xuXHRcdGFkZFgocWMsIGludmVydENvbnRyb2xzKTtcblx0XHRxYy5hcHBlbmRHYXRlKFwiY3UxXCIsIFswLCAxXSwgZ2F0ZU9wdGlvbnMpO1xuXHRcdGFkZFgocWMsIGludmVydENvbnRyb2xzKTtcblx0XHRyZXR1cm4gcWM7XG5cdH1cblxuXHRhZGRYKHFjLCBpbnZlcnRDb250cm9scyk7XG5cdHZhciBydWxlcyA9IHRoaXMuZ3JheUNvZGVDaGFpbihudW1DdHJsUXViaXRzLCBcImN1MVwiLCBnYXRlT3B0aW9ucyk7XG5cdHJ1bGVzLm1hcChmdW5jdGlvbihydWxlKSB7XG5cdFx0cWMuYXBwZW5kR2F0ZShydWxlLmdhdGVOYW1lLCBydWxlLndpcmVzLCBydWxlLm9wdGlvbnMpO1xuXHR9KTtcblx0YWRkWChxYywgaW52ZXJ0Q29udHJvbHMpO1xuXG5cdHJldHVybiBxYztcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLk1DWENpcmN1aXQgPSBmdW5jdGlvbihjdHJsUXViaXRzKSB7XG5cdHZhciBudW1DdHJsUXViaXRzID0gMDtcblx0dmFyIGludmVydENvbnRyb2xzID0gW107XG5cdGlmKHR5cGVvZiBjdHJsUXViaXRzID09IFwibnVtYmVyXCIpIHtcblx0XHRudW1DdHJsUXViaXRzID0gY3RybFF1Yml0cztcblx0fSBlbHNlIHtcblx0XHRudW1DdHJsUXViaXRzID0gY3RybFF1Yml0cy5sZW5ndGggfHwgMDtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgbnVtQ3RybFF1Yml0czsgaSsrKSB7XG5cdFx0XHRpZighY3RybFF1Yml0c1tpXSB8fCAodHlwZW9mIGN0cmxRdWJpdHNbaV0gPT0gXCJudW1iZXJcIiAmJiBjdHJsUXViaXRzW2ldIDwgMCkpIHtcblx0XHRcdFx0aW52ZXJ0Q29udHJvbHMucHVzaChpKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHR2YXIgcWMgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0aWYobnVtQ3RybFF1Yml0cyA9PSAwKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGNyZWF0ZSBtdWx0aS1jb250cm9sbGVkIGdhdGUgd2l0aCB6ZXJvIGNvbnRyb2wgcXViaXRzLlwiKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGFkZFgoY2lyY3VpdCwgd2lyZXMpIHtcblx0XHR3aXJlcy5tYXAoZnVuY3Rpb24od2lyZSkge1xuXHRcdFx0Y2lyY3VpdC5hcHBlbmRHYXRlKFwieFwiLCB3aXJlKTtcblx0XHR9KTtcblx0fVxuXG5cdGlmKG51bUN0cmxRdWJpdHMgPT0gMSkge1xuXHRcdGFkZFgocWMsIGludmVydENvbnRyb2xzKTtcblx0XHRxYy5hcHBlbmRHYXRlKFwiY3hcIiwgWzAsIDFdKTtcblx0XHRhZGRYKHFjLCBpbnZlcnRDb250cm9scyk7XG5cdFx0cmV0dXJuIHFjO1xuXHR9XG5cblx0aWYobnVtQ3RybFF1Yml0cyA9PSAyKSB7XG5cdFx0YWRkWChxYywgaW52ZXJ0Q29udHJvbHMpO1xuXHRcdHFjLmFwcGVuZEdhdGUoXCJjY3hcIiwgWzAsIDEsIDJdKTtcblx0XHRhZGRYKHFjLCBpbnZlcnRDb250cm9scyk7XG5cdFx0cmV0dXJuIHFjO1xuXHR9XG5cblx0dmFyIG1jdTEgPSBxYy5NQ1UxQ2lyY3VpdChudW1DdHJsUXViaXRzKTtcblx0dmFyIG1jdTFuYW1lID0gXCJtY3UxX1wiICsgbnVtQ3RybFF1Yml0cztcblx0dmFyIG1jdTF3aXJlcyA9IFtdO1xuXHRmb3IodmFyIGkgPSAwOyBpIDwgbnVtQ3RybFF1Yml0cyArIDE7IGkrKykge1xuXHRcdG1jdTF3aXJlcy5wdXNoKGkpO1xuXHR9XG5cblx0cWMucmVnaXN0ZXJHYXRlKG1jdTFuYW1lLCBtY3UxKTtcblx0YWRkWChxYywgaW52ZXJ0Q29udHJvbHMpO1xuXHRxYy5hcHBlbmRHYXRlKFwiaFwiLCBudW1DdHJsUXViaXRzKTtcblx0cWMuYXBwZW5kR2F0ZShtY3UxbmFtZSwgbWN1MXdpcmVzLCB7IHBhcmFtczogeyBsYW1iZGE6IFwicGlcIiB9fSk7XG5cdGFkZFgocWMsIGludmVydENvbnRyb2xzKTtcblx0cWMuYXBwZW5kR2F0ZShcImhcIiwgbnVtQ3RybFF1Yml0cyk7XG5cblx0cmV0dXJuIHFjO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucmVnaXN0ZXJHYXRlID0gZnVuY3Rpb24obmFtZSwgb2JqKSB7XG5cdGlmKG9iaiBpbnN0YW5jZW9mIFF1YW50dW1DaXJjdWl0KSB7XG5cdFx0dGhpcy5jdXN0b21HYXRlc1tuYW1lXSA9IG9iai5zYXZlKCk7XG5cdH0gZWxzZSB7XG5cdFx0dGhpcy5jdXN0b21HYXRlc1tuYW1lXSA9IG9iajtcblx0fVxuXG5cdGlmKHRoaXMuaXNNdWx0aUNvbnRyb2xsZWRHYXRlKG5hbWUpKSB7XG5cdFx0dmFyIG1jSW5mbyA9IHRoaXMuZGVjb2RlTXVsdGlDb250cm9sbGVkR2F0ZU5hbWUobmFtZSk7XG5cdFx0aWYobWNJbmZvLm51bUN0cmxRdWJpdHMgIT0gdGhpcy5jdXN0b21HYXRlc1tuYW1lXS5udW1RdWJpdHMgLSAxKSB7XG5cdFx0XHRtY0luZm8ubnVtQ3RybFF1Yml0cyA9IHRoaXMuY3VzdG9tR2F0ZXNbbmFtZV0ubnVtUXViaXRzIC0gMTtcblx0XHRcdHZhciBjdHJsUXViaXRzID0gW107XG5cdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgbWNJbmZvLm51bUN0cmxRdWJpdHM7IGkrKykge1xuXHRcdFx0XHRjdHJsUXViaXRzLnB1c2godHlwZW9mIG1jSW5mby5jdHJsUXViaXRzW2ldID09IFwidW5kZWZpbmVkXCIgPyB0cnVlIDogbWNJbmZvLmN0cmxRdWJpdHNbaV0pO1xuXHRcdFx0fVxuXHRcdFx0bWNJbmZvLmN0cmxRdWJpdHMgPSBjdHJsUXViaXRzO1xuXHRcdH1cblxuXHRcdHZhciByb290R2F0ZSA9IHRoaXMuYmFzaWNHYXRlc1ttY0luZm8ucm9vdE5hbWVdO1xuXHRcdGlmKHJvb3RHYXRlICYmIHJvb3RHYXRlLmRyYXdpbmdJbmZvICYmIHJvb3RHYXRlLmRyYXdpbmdJbmZvLmNvbm5lY3RvcnMpIHtcblx0XHRcdGlmKCF0aGlzLmN1c3RvbUdhdGVzW25hbWVdLmRyYXdpbmdJbmZvKSB7XG5cdFx0XHRcdHRoaXMuY3VzdG9tR2F0ZXNbbmFtZV0uZHJhd2luZ0luZm8gPSB7fTtcblx0XHRcdH1cblxuXHRcdFx0dmFyIGNvbm5lY3RvcnMgPSBbXTtcblx0XHRcdG1jSW5mby5jdHJsUXViaXRzLm1hcChmdW5jdGlvbihjdHJsUXViaXQpIHtcblx0XHRcdFx0aWYoY3RybFF1Yml0KSB7XG5cdFx0XHRcdFx0Y29ubmVjdG9ycy5wdXNoKFwiZG90XCIpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbm5lY3RvcnMucHVzaChcIm5kb3RcIik7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0Y29ubmVjdG9ycy5wdXNoKHJvb3RHYXRlLmRyYXdpbmdJbmZvLmNvbm5lY3RvcnNbcm9vdEdhdGUuZHJhd2luZ0luZm8uY29ubmVjdG9ycy5sZW5ndGggLSAxXSk7XG5cblx0XHRcdHRoaXMuY3VzdG9tR2F0ZXNbbmFtZV0uZHJhd2luZ0luZm8uY29ubmVjdG9ycyA9IGNvbm5lY3RvcnM7XG5cdFx0XHR0aGlzLmN1c3RvbUdhdGVzW25hbWVdLmRyYXdpbmdJbmZvLnJvb3QgPSByb290R2F0ZS5kcmF3aW5nSW5mby5yb290O1xuXHRcdH1cblx0fVxufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucmVnaXN0ZXJNQ1hHYXRlID0gZnVuY3Rpb24oY3RybFF1Yml0cykge1xuXHR2YXIgZ2F0ZU5hbWUgPSB0aGlzLm11bHRpQ29udHJvbGxlZEdhdGVOYW1lKFwibWN4XCIsIGN0cmxRdWJpdHMpO1xuXHR0aGlzLnJlZ2lzdGVyR2F0ZShnYXRlTmFtZSwgdGhpcy5NQ1hDaXJjdWl0KGN0cmxRdWJpdHMpLnNhdmUodHJ1ZSkpO1xuXHRyZXR1cm4gZ2F0ZU5hbWU7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5yZWdpc3Rlck1DVTFHYXRlID0gZnVuY3Rpb24oY3RybFF1Yml0cykge1xuXHR2YXIgZ2F0ZU5hbWUgPSB0aGlzLm11bHRpQ29udHJvbGxlZEdhdGVOYW1lKFwibWN1MVwiLCBjdHJsUXViaXRzKTtcblx0dGhpcy5yZWdpc3RlckdhdGUoZ2F0ZU5hbWUsIHRoaXMuTUNVMUNpcmN1aXQoY3RybFF1Yml0cykuc2F2ZSh0cnVlKSk7XG5cdHJldHVybiBnYXRlTmFtZTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnJlZ2lzdGVyTXVsdGlDb250cm9sbGVkR2F0ZSA9IGZ1bmN0aW9uKHJvb3ROYW1lLCBjdHJsUXViaXRzKSB7XG5cdHN3aXRjaChyb290TmFtZSkge1xuXHRcdGNhc2UgXCJjeFwiOiByZXR1cm4gdGhpcy5yZWdpc3Rlck1DWEdhdGUoY3RybFF1Yml0cyk7IGJyZWFrO1xuXHRcdGNhc2UgXCJjdTFcIjogcmV0dXJuIHRoaXMucmVnaXN0ZXJNQ1UxR2F0ZShjdHJsUXViaXRzKTsgYnJlYWs7XG5cdH1cblxuXHRyZXR1cm4gXCJcIjtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5nZXRPclJlZ2lzdGVyTXVsdGlDb250cm9sbGVkRXF1aXZhbGVudCA9IGZ1bmN0aW9uKGdhdGVOYW1lLCBpbnZlcnNlQ29udHJvbCkge1xuXHR2YXIgZ2F0ZURlZiA9IHRoaXMuYmFzaWNHYXRlc1tnYXRlTmFtZV07XG5cdGlmKGdhdGVEZWYpIHtcblx0XHRpZihnYXRlRGVmLmRyYXdpbmdJbmZvKSB7XG5cdFx0XHQvLyBCYXNpYyBnYXRlIHdpdGggbXVsdGktY29udHJvbGxlZC9pbnZlcnNlIGNvbnRyb2xsZWQgaW1wbGVtZW50YXRpb25cblx0XHRcdGlmKGdhdGVOYW1lID09IFwieFwiIHx8IGdhdGVOYW1lID09IFwidTFcIiB8fCBnYXRlRGVmLmRyYXdpbmdJbmZvLnJvb3QgPT0gXCJ4XCIgfHwgZ2F0ZURlZi5kcmF3aW5nSW5mby5yb290ID09IFwidTFcIikge1xuXHRcdFx0XHRpZighdGhpcy5iYXNpY0dhdGVzW1wiY1wiICsgZ2F0ZU5hbWVdIHx8IGludmVyc2VDb250cm9sKSB7XG5cdFx0XHRcdFx0Ly8gY3JlYXRlIG11bHRpIGNvbnRyb2xsZWQgdmVyc2lvbiBhbmQgcmV0dXJuIGl0cyBuYW1lXG5cdFx0XHRcdFx0dmFyIHJvb3ROYW1lID0gXCJjXCIgKyAoZ2F0ZURlZi5kcmF3aW5nSW5mby5yb290IHx8IGdhdGVOYW1lKTtcblx0XHRcdFx0XHR2YXIgbnVtQ3RybFF1Yml0cyA9IG1hdGgubG9nMihnYXRlRGVmLm1hdHJpeC5sZW5ndGgpO1xuXHRcdFx0XHRcdHZhciBjdHJsUXViaXRzID0gW107XG5cdFx0XHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IG51bUN0cmxRdWJpdHMgLSAxOyBpKyspIHtcblx0XHRcdFx0XHRcdGN0cmxRdWJpdHMucHVzaCh0cnVlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y3RybFF1Yml0cy51bnNoaWZ0KCFpbnZlcnNlQ29udHJvbCk7XG5cblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5yZWdpc3Rlck11bHRpQ29udHJvbGxlZEdhdGUocm9vdE5hbWUsIGN0cmxRdWJpdHMpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHRoZXJlIGlzIGJhc2ljIGdhdGUgd2l0aCBhZGRpdGlvbmFsIGNvbnRyb2xcblx0XHRcdFx0XHRyZXR1cm4gXCJjXCIgKyBnYXRlTmFtZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEJhc2ljIGdhdGUgZm9yIHdoaWNoIHdlIGRvbid0IGhhdmUgbXVsdGktY29udHJvbGxlZCBvciBpbnZlcnNlIGNvbnRyb2xsZWQgaW1wbGVtZW50YXRpb25cblx0XHQvLyBidXQgbWF5YmUgd2UgaGF2ZSBiYXNpYyBnYXRlIHdpdGggYWRkaXRpb25hbCBjb250cm9sXG5cdFx0Zm9yKHZhciBnbiBpbiB0aGlzLmJhc2ljR2F0ZXMpIHtcblx0XHRcdHZhciB0bXBHYXRlRGVmID0gdGhpcy5iYXNpY0dhdGVzW2duXTtcblx0XHRcdGlmKHRtcEdhdGVEZWYgJiYgdG1wR2F0ZURlZi5kcmF3aW5nSW5mbyAmJiB0bXBHYXRlRGVmLmRyYXdpbmdJbmZvLnJvb3QgJiYgdG1wR2F0ZURlZi5kcmF3aW5nSW5mby5yb290ID09IGdhdGVOYW1lKSB7XG5cdFx0XHRcdGlmKCFpbnZlcnNlQ29udHJvbCkge1xuXHRcdFx0XHRcdC8vIHRoZXJlIGlzIGJhc2ljIGdhdGUgd2l0aCBhZGRpdGlvbmFsIGNvbnRyb2xcblx0XHRcdFx0XHRyZXR1cm4gZ247XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRpZih0aGlzLmN1c3RvbUdhdGVzW2dhdGVOYW1lXSkge1xuXHRcdHZhciBtY0luZm8gPSB0aGlzLmRlY29kZU11bHRpQ29udHJvbGxlZEdhdGVOYW1lKGdhdGVOYW1lKTtcblx0XHRpZighbWNJbmZvIHx8ICFtY0luZm8ubnVtQ3RybFF1Yml0cykge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0aWYobWNJbmZvLnJvb3ROYW1lID09IFwiY3hcIiB8fCBtY0luZm8ucm9vdE5hbWUgPT0gXCJjdTFcIikge1xuXHRcdFx0Ly8gY3JlYXRlIG11bHRpIGNvbnRyb2xsZWQgdmVyc2lvbiBhbmQgcmV0dXJuIGl0cyBuYW1lXG5cdFx0XHRtY0luZm8uY3RybFF1Yml0cy51bnNoaWZ0KCFpbnZlcnNlQ29udHJvbCk7XG5cdFx0XHRyZXR1cm4gdGhpcy5yZWdpc3Rlck11bHRpQ29udHJvbGxlZEdhdGUobWNJbmZvLnJvb3ROYW1lLCBtY0luZm8uY3RybFF1Yml0cyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRyZXR1cm4gbnVsbDtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnJlbW92ZVVudXNlZE11bHRpQ29udHJvbGxlZEdhdGVzID0gZnVuY3Rpb24oKSB7XG5cdHZhciBvcHMgPSB0aGlzLmNvdW50T3BzKG51bGwsIHsgc2hhbGxvdzogZmFsc2UgfSk7XG5cblx0Zm9yKGdhdGVOYW1lIGluIHRoaXMuY3VzdG9tR2F0ZXMpIHtcblx0XHRpZighb3BzW2dhdGVOYW1lXSkge1xuXHRcdFx0aWYodGhpcy5pc011bHRpQ29udHJvbGxlZEdhdGUoZ2F0ZU5hbWUpKSB7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzLmN1c3RvbUdhdGVzW2dhdGVOYW1lXTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmRlY29kZU11bHRpQ29udHJvbGxlZEdhdGVOYW1lID0gZnVuY3Rpb24oZ2F0ZU5hbWUpIHtcblx0aWYoIWdhdGVOYW1lKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHR2YXIgbWNJbmZvID0ge307XG5cdHZhciBzcGxpdHRlZCA9IGdhdGVOYW1lLnNwbGl0KFwiX1wiKTtcblxuXHQvLyBuYW1lXG5cdGlmKHNwbGl0dGVkLmxlbmd0aCA+IDApIHtcblx0XHRtY0luZm8ubmFtZSA9IHNwbGl0dGVkWzBdO1xuXHRcdG1jSW5mby5yb290TmFtZSA9IG1jSW5mby5uYW1lLnN1YnN0cmluZygxKTtcblx0fVxuXG5cdC8vIG51bUN0cmxRdWJpdHNcblx0aWYoc3BsaXR0ZWQubGVuZ3RoID4gMSkge1xuXHRcdHZhciBudW1DdHJsUXViaXRzID0gcGFyc2VJbnQoc3BsaXR0ZWRbMV0pO1xuXHRcdGlmKCFpc05hTihudW1DdHJsUXViaXRzKSkge1xuXHRcdFx0bWNJbmZvLm51bUN0cmxRdWJpdHMgPSBudW1DdHJsUXViaXRzO1xuXHRcdH1cblx0fVxuXG5cdC8vIGN0cmxRdWJpdHNcblx0aWYobWNJbmZvLm51bUN0cmxRdWJpdHMpIHtcblx0XHR2YXIgY3RybFF1Yml0cyA9IFtdO1xuXHRcdGlmKHNwbGl0dGVkLmxlbmd0aCA+IDIpIHtcblx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBzcGxpdHRlZFsyXS5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZihzcGxpdHRlZFsyXVtpXSA9PSBcIjBcIikge1xuXHRcdFx0XHRcdGN0cmxRdWJpdHMucHVzaChmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYoc3BsaXR0ZWRbMl1baV0gPT0gXCIxXCIpIHtcblx0XHRcdFx0XHRjdHJsUXViaXRzLnB1c2godHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZighY3RybFF1Yml0cy5sZW5ndGgpIHtcblx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBudW1DdHJsUXViaXRzOyBpKyspIHtcblx0XHRcdFx0Y3RybFF1Yml0cy5wdXNoKHRydWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRtY0luZm8uY3RybFF1Yml0cyA9IGN0cmxRdWJpdHM7XG5cdH1cblxuXHRyZXR1cm4gbWNJbmZvO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUubXVsdGlDb250cm9sbGVkR2F0ZU5hbWUgPSBmdW5jdGlvbihuYW1lUHJlZml4LCBjdHJsUXViaXRzKSB7XG5cdHZhciBnYXRlTmFtZSA9IG5hbWVQcmVmaXggKyBcIl9cIjtcblx0aWYodHlwZW9mIGN0cmxRdWJpdHMgPT0gXCJudW1iZXJcIikge1xuXHRcdGdhdGVOYW1lICs9IGN0cmxRdWJpdHM7XG5cdH0gZWxzZSB7XG5cdFx0Z2F0ZU5hbWUgKz0gKGN0cmxRdWJpdHMubGVuZ3RoIHx8IDApO1xuXG5cdFx0dmFyIHdpcmVzID0gXCJcIjtcblx0XHRjdHJsUXViaXRzLm1hcChmdW5jdGlvbih3aXJlKSB7XG5cdFx0XHRpZighd2lyZSB8fCAodHlwZW9mIHdpcmUgPT0gXCJudW1iZXJcIiAmJiB3aXJlIDwgMCkpIHtcblx0XHRcdFx0d2lyZXMgKz0gXCIwXCI7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR3aXJlcyArPSBcIjFcIjtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRpZih3aXJlcy5pbmRleE9mKFwiMFwiKSA8IDApIHtcblx0XHRcdHdpcmVzID0gXCJcIjtcblx0XHR9XG5cdFx0aWYod2lyZXMpIHtcblx0XHRcdGdhdGVOYW1lICs9IFwiX1wiICsgd2lyZXM7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBnYXRlTmFtZTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmlzTXVsdGlDb250cm9sbGVkR2F0ZSA9IGZ1bmN0aW9uKGdhdGVOYW1lKSB7XG5cdHZhciBtY0luZm8gPSB0aGlzLmRlY29kZU11bHRpQ29udHJvbGxlZEdhdGVOYW1lKGdhdGVOYW1lKTtcblx0cmV0dXJuICEhdGhpcy5jdXN0b21HYXRlc1tnYXRlTmFtZV0gJiYgISFtY0luZm8gJiYgISFtY0luZm8ubnVtQ3RybFF1Yml0cztcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmlzQ29udHJvbGxhYmxlR2F0ZSA9IGZ1bmN0aW9uKGdhdGVOYW1lKSB7XG5cdHZhciBnYXRlRGVmID0gdGhpcy5iYXNpY0dhdGVzW2dhdGVOYW1lXTtcblx0aWYoZ2F0ZURlZikge1xuXHRcdGlmKGdhdGVEZWYuZHJhd2luZ0luZm8pIHtcblx0XHRcdGlmKGdhdGVEZWYuZHJhd2luZ0luZm8ucm9vdCA9PSBcInhcIiB8fCBnYXRlRGVmLmRyYXdpbmdJbmZvLnJvb3QgPT0gXCJ1MVwiKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRmb3IodmFyIGduIGluIHRoaXMuYmFzaWNHYXRlcykge1xuXHRcdFx0dmFyIGdhdGVEZWYgPSB0aGlzLmJhc2ljR2F0ZXNbZ25dO1xuXHRcdFx0aWYoZ2F0ZURlZiAmJiBnYXRlRGVmLmRyYXdpbmdJbmZvICYmIGdhdGVEZWYuZHJhd2luZ0luZm8ucm9vdCAmJiBnYXRlRGVmLmRyYXdpbmdJbmZvLnJvb3QgPT0gZ2F0ZU5hbWUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRoaXMuaXNNdWx0aUNvbnRyb2xsZWRHYXRlKGdhdGVOYW1lKTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5nZXRHYXRlUG9zQnlJZCA9IGZ1bmN0aW9uKGdhdGVJZCkge1xuXHR2YXIgY2lyY3VpdCA9IHRoaXM7XG5cblx0dmFyIG51bUNvbHMgPSBjaXJjdWl0Lm51bUNvbHMoKTtcblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBjaXJjdWl0Lm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGNpcmN1aXQuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuaWQgPT0gZ2F0ZUlkKSB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0d2lyZXM6IGdhdGUud2lyZXMsXG5cdFx0XHRcdFx0Y29sOiBjb2x1bW5cblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdHdpcmVzOiBbXSxcblx0XHRjb2w6IC0xXG5cdH07XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZ2V0R2F0ZUJ5SWQgPSBmdW5jdGlvbihnYXRlSWQpIHtcblx0dmFyIGNpcmN1aXQgPSB0aGlzO1xuXG5cdHZhciBudW1Db2xzID0gY2lyY3VpdC5udW1Db2xzKCk7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgY2lyY3VpdC5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSBjaXJjdWl0LmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmlkID09IGdhdGVJZCkge1xuXHRcdFx0XHRyZXR1cm4gZ2F0ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbnVsbDtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmdldEdhdGVCZWZvcmUgPSBmdW5jdGlvbihjb2x1bW4sIHdpcmUpIHtcblx0dmFyIGdhdGUgPSBudWxsO1xuXHR2YXIgY29sID0gY29sdW1uIC0gMTtcblx0d2hpbGUoY29sID49IDAgJiYgIWdhdGUpIHtcblx0XHRnYXRlID0gdGhpcy5nZXRHYXRlQXQoY29sLCB3aXJlKTtcblx0XHRjb2wtLTtcblx0fVxuXHRyZXR1cm4gZ2F0ZTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5nZXRHYXRlQXQgPSBmdW5jdGlvbihjb2x1bW4sIHdpcmUpIHtcblx0aWYoIXRoaXMuZ2F0ZXNbd2lyZV0gfHwgIXRoaXMuZ2F0ZXNbd2lyZV1bY29sdW1uXSkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0dmFyIGdhdGUgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZ2F0ZXNbd2lyZV1bY29sdW1uXSkpO1xuXHRpZighZ2F0ZSkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Z2F0ZS5jb2x1bW4gPSBjb2x1bW47XG5cdGdhdGUud2lyZXMgPSBbXTtcblxuXHR2YXIgaWQgPSBnYXRlLmlkO1xuXHR2YXIgbnVtV2lyZXMgPSB0aGlzLmdhdGVzLmxlbmd0aDtcblx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IG51bVdpcmVzOyB3aXJlKyspIHtcblx0XHR2YXIgZyA9IHRoaXMuZ2F0ZXNbd2lyZV1bY29sdW1uXTtcblx0XHRpZihnICYmIGcuaWQgPT0gaWQpIHtcblx0XHRcdGdhdGUud2lyZXNbZy5jb25uZWN0b3JdID0gd2lyZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGdhdGU7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZ2V0R2F0ZXNBdENvbHVtbiA9IGZ1bmN0aW9uKGNvbHVtbikge1xuXHR2YXIgZ2F0ZXMgPSBbXTtcblx0dmFyIG51bVdpcmVzID0gdGhpcy5nYXRlcy5sZW5ndGg7XG5cdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBudW1XaXJlczsgd2lyZSsrKSB7XG5cdFx0dmFyIGdhdGUgPSB0aGlzLmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCkge1xuXHRcdFx0Z2F0ZXMucHVzaChnYXRlKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGdhdGVzO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmdldENvbnRyb2xsYWJsZUdhdGVzQXRDb2x1bW4gPSBmdW5jdGlvbihjb2x1bW4pIHtcblx0dmFyIGdhdGVzID0gdGhpcy5nZXRHYXRlc0F0Q29sdW1uKGNvbHVtbik7XG5cdHZhciBjb250cm9sbGFibGVHYXRlcyA9IFtdO1xuXHRmb3IodmFyIGkgPSAwOyBpIDwgZ2F0ZXMubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgZ2F0ZSA9IGdhdGVzW2ldO1xuXHRcdGlmKHRoaXMuaXNDb250cm9sbGFibGVHYXRlKGdhdGUubmFtZSkpIHtcblx0XHRcdGNvbnRyb2xsYWJsZUdhdGVzLnB1c2goZ2F0ZSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBjb250cm9sbGFibGVHYXRlcztcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydEphdmFTY3JpcHQgPSBmdW5jdGlvbihjb21tZW50LCBkZWNvbXBvc2UsIGV4cG9ydEFzR2F0ZU5hbWUsIGFzSnVweXRlcikge1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0dmFyIGNpcmN1aXQgPSBudWxsO1xuXG5cdC8vIGRlY29tcG9zZVxuXHRpZihkZWNvbXBvc2UpIHtcblx0XHRjaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdFx0Y2lyY3VpdC5sb2FkKHRoaXMuc2F2ZSh0cnVlKSk7XG5cdH0gZWxzZSB7XG5cdFx0Y2lyY3VpdCA9IHRoaXM7XG5cdH1cblxuXHR2YXIganMgPSBcIlwiO1xuXG5cdC8vIGNvbW1lbnRcblx0aWYoY29tbWVudCkge1xuXHRcdHZhciBjb21tID0gKGNvbW1lbnQgfHwgXCJcIikuc3BsaXQoXCJcXG5cIik7XG5cdFx0Y29tbS5tYXAoZnVuY3Rpb24oY2xpbmUpIHtcblx0XHRcdGlmKGNsaW5lLmxlbmd0aCA+PSAyICYmIGNsaW5lWzBdICE9IFwiL1wiICYmIGNsaW5lWzFdICE9IFwiL1wiKSB7XG5cdFx0XHRcdGpzICs9IFwiLy8gXCI7XG5cdFx0XHR9XG5cdFx0XHRqcyArPSBjbGluZTtcblx0XHRcdGpzICs9IFwiXFxuXCI7XG5cdFx0fSk7XG5cdH1cblxuXHR2YXIgaW5kZW50ID0gXCJcIjtcblx0dmFyIGNpcmN1aXRWYXIgPSBcIlwiO1xuXG5cdGlmKGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRpbmRlbnQgPSBcIiAgICBcIjtcblx0XHRjaXJjdWl0VmFyID0gXCJjaXJjXCI7XG5cblx0XHRqcyArPSBcImNvbnN0IFwiICsgZXhwb3J0QXNHYXRlTmFtZSArIFwiID0gZnVuY3Rpb24oKSB7XFxuXCI7XG5cblx0XHRqcyArPSBpbmRlbnQgKyBcImNvbnN0IFwiICsgY2lyY3VpdFZhciArIFwiID0gbmV3IFF1YW50dW1DaXJjdWl0KFwiICsgY2lyY3VpdC5udW1RdWJpdHMgKyBcIik7XFxuXFxuXCI7XG5cdFx0aWYoY2lyY3VpdC5wYXJhbXMgJiYgY2lyY3VpdC5wYXJhbXMubGVuZ3RoKSB7XG5cdFx0XHRqcyArPSBpbmRlbnQgKyBjaXJjdWl0VmFyICsgXCIucGFyYW1zID0gXCIgKyBKU09OLnN0cmluZ2lmeShjaXJjdWl0LnBhcmFtcykgKyBcIlxcblxcblwiO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRpbmRlbnQgPSBcIlwiO1xuXHRcdGNpcmN1aXRWYXIgPSBcImNpcmN1aXRcIjtcblxuXHRcdGpzICs9IGluZGVudCArIFwiY29uc3QgUXVhbnR1bUNpcmN1aXQgPSByZXF1aXJlKFxcXCJxdWFudHVtLWNpcmN1aXRcXFwiKTtcXG5cXG5cIjtcblxuXHRcdGpzICs9IGluZGVudCArIFwiY29uc3QgXCIgKyBjaXJjdWl0VmFyICsgXCIgPSBuZXcgUXVhbnR1bUNpcmN1aXQoXCIgKyBjaXJjdWl0Lm51bVF1Yml0cyArIFwiKTtcXG5cXG5cIjtcblxuXHRcdHZhciB1c2VkR2F0ZXMgPSBjaXJjdWl0LnVzZWRHYXRlcygpO1xuXHRcdGlmKCFkZWNvbXBvc2UpIHtcblx0XHRcdHZhciBjdXN0b21HYXRlc0FkZGVkID0gW107XG5cdFx0XHR1c2VkR2F0ZXMubWFwKGZ1bmN0aW9uKHVzZWRHYXRlTmFtZSkge1xuXHRcdFx0XHR2YXIgYmFzaWNHYXRlID0gY2lyY3VpdC5iYXNpY0dhdGVzW3VzZWRHYXRlTmFtZV07XG5cdFx0XHRcdGlmKCFiYXNpY0dhdGUpIHtcblx0XHRcdFx0XHR2YXIgY3VzdG9tR2F0ZSA9IHNlbGYuY3VzdG9tR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRcdFx0XHRpZihjdXN0b21HYXRlKSB7XG5cdFx0XHRcdFx0XHR2YXIgY3VzdG9tQ2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRcdFx0XHRcdFx0Y3VzdG9tQ2lyY3VpdC5sb2FkKGN1c3RvbUdhdGUpO1xuXHRcdFx0XHRcdFx0anMgKz0gY3VzdG9tQ2lyY3VpdC5leHBvcnRKYXZhU2NyaXB0KFwiXCIsIHRydWUsIHVzZWRHYXRlTmFtZSk7XG5cdFx0XHRcdFx0XHRjdXN0b21HYXRlc0FkZGVkLnB1c2godXNlZEdhdGVOYW1lKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRjdXN0b21HYXRlc0FkZGVkLm1hcChmdW5jdGlvbihjdXN0b21HYXRlTmFtZSkge1xuXHRcdFx0XHRqcyArPSBpbmRlbnQgKyBjaXJjdWl0VmFyICsgXCIucmVnaXN0ZXJHYXRlKFxcXCJcIiArIGN1c3RvbUdhdGVOYW1lICsgXCJcXFwiLCBcIiArIGN1c3RvbUdhdGVOYW1lICsgXCIoKSk7XFxuXCI7XG5cdFx0XHR9KTtcblxuXHRcdFx0aWYoY3VzdG9tR2F0ZXNBZGRlZC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGpzICs9IFwiXFxuXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0dmFyIGNyZWdDb3VudCA9IDA7XG5cdGZvcih2YXIgY3JlZ05hbWUgaW4gdGhpcy5jcmVncykge1xuXHRcdGpzICs9IGluZGVudCArIGNpcmN1aXRWYXIgKyBcIi5jcmVhdGVDcmVnKFxcXCJcIiArIGNyZWdOYW1lICsgXCJcXFwiLCBcIiArICh0aGlzLmNyZWdzW2NyZWdOYW1lXS5sZW5ndGggfHwgMSkgKyBcIik7XFxuXCI7XG5cdFx0Y3JlZ0NvdW50Kys7XG5cdH1cblx0aWYoY3JlZ0NvdW50ID4gMCkge1xuXHRcdGpzICs9IFwiXFxuXCI7XG5cdH1cblxuXHR2YXIgbnVtQ29scyA9IGNpcmN1aXQubnVtQ29scygpO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gY2lyY3VpdC5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCkge1xuXHRcdFx0XHR2YXIgZ2F0ZU5hbWUgPSBnYXRlLm5hbWU7XG5cblx0XHRcdFx0aWYoZ2F0ZU5hbWUgPT0gXCJtZWFzdXJlXCIgJiYgZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jcmVnKSB7XG5cdFx0XHRcdFx0anMgKz0gaW5kZW50ICsgY2lyY3VpdFZhciArIFwiLmFkZE1lYXN1cmUoXCIgKyB3aXJlICsgXCIsIFxcXCJcIiArIGdhdGUub3B0aW9ucy5jcmVnLm5hbWUgKyBcIlxcXCIsIFwiICsgZ2F0ZS5vcHRpb25zLmNyZWcuYml0ICsgXCIpO1xcblwiO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGpzICs9IGluZGVudCArIGNpcmN1aXRWYXIgKyBcIi5hcHBlbmRHYXRlKFxcXCJcIiArIGdhdGUubmFtZSArIFwiXFxcIlwiO1xuXG5cdFx0XHRcdFx0aWYoZ2F0ZS53aXJlcy5sZW5ndGggPT0gMSkge1xuXHRcdFx0XHRcdFx0anMgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0anMgKz0gZ2F0ZS53aXJlc1swXTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0anMgKz0gXCIsIFtcIjtcblx0XHRcdFx0XHRcdGZvcih2YXIgdyA9IDA7IHcgPCBnYXRlLndpcmVzLmxlbmd0aDsgdysrKSB7XG5cdFx0XHRcdFx0XHRcdGlmKHcgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0anMgKz0gXCIsXCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0anMgKz0gZ2F0ZS53aXJlc1t3XTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGpzICs9IFwiXVwiO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKGdhdGUub3B0aW9ucykge1xuXHRcdFx0XHRcdFx0dmFyIG9wdCA9IHt9O1xuXHRcdFx0XHRcdFx0Zm9yKHZhciBvcHRLZXkgaW4gZ2F0ZS5vcHRpb25zKSB7XG5cdFx0XHRcdFx0XHRcdGlmKGdhdGUub3B0aW9uc1tvcHRLZXldKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIG9iaiA9IGdhdGUub3B0aW9uc1tvcHRLZXldO1xuXHRcdFx0XHRcdFx0XHRcdHZhciBza2lwID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0aWYodHlwZW9mIG9iaiA9PSBcIm9iamVjdFwiICYmIE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09PSAwICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRza2lwID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRpZighc2tpcCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0b3B0W29wdEtleV0gPSBvYmo7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRqcyArPSBcIiwgXCIgKyBKU09OLnN0cmluZ2lmeShvcHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRqcyArPSBcIik7XFxuXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmKGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRqcyArPSBcIlxcblwiO1xuXHRcdGpzICs9IGluZGVudCArIFwicmV0dXJuIFwiICsgY2lyY3VpdFZhciArIFwiO1xcblwiO1xuXHRcdGpzICs9IFwifTtcXG5cXG5cIjtcblx0fSBlbHNlIHtcblx0XHRqcyArPSBcIlxcblwiO1xuXG5cdFx0anMgKz0gaW5kZW50ICsgY2lyY3VpdFZhciArIFwiLnJ1bigpO1xcblxcblwiO1xuXG5cdFx0anMgKz0gaW5kZW50ICsgXCJjb25zb2xlLmxvZyhcXFwiUHJvYmFiaWxpdGllczpcXFwiKTtcXG5cIjtcblx0XHRqcyArPSBpbmRlbnQgKyBcImNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGNpcmN1aXQucHJvYmFiaWxpdGllcygpKSk7XFxuXFxuXCI7XG5cdFx0anMgKz0gaW5kZW50ICsgXCJjb25zb2xlLmxvZyhcXFwiTWVhc3VyZSBhbGw6XFxcIik7XFxuXCI7XG5cdFx0anMgKz0gaW5kZW50ICsgXCJjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShjaXJjdWl0Lm1lYXN1cmVBbGwoKSkpO1xcblxcblwiO1xuXHRcdGlmKGNpcmN1aXQuY3JlZ0NvdW50KCkpIHtcblx0XHRcdGpzICs9IGluZGVudCArIFwiY29uc29sZS5sb2coXFxcIkNsYXNzaWNhbCByZWdpc3RlcnM6XFxcIik7XFxuXCI7XG5cdFx0XHRqcyArPSBpbmRlbnQgKyBcImNvbnNvbGUubG9nKGNpcmN1aXQuY3JlZ3NBc1N0cmluZygpKTtcXG5cXG5cIjtcblx0XHR9XG5cdH1cblxuXG5cdGlmKGFzSnVweXRlcikge1xuXHRcdHZhciBub3RlYm9vayA9IHtcblx0XHRcdFwibWV0YWRhdGFcIjoge1xuXHRcdFx0XHRcImtlcm5lbHNwZWNcIjoge1xuXHRcdFx0XHRcdFwiZGlzcGxheV9uYW1lXCI6IFwiSmF2YXNjcmlwdCAoTm9kZS5qcylcIixcblx0XHRcdFx0XHRcImxhbmd1YWdlXCI6IFwiamF2YXNjcmlwdFwiLFxuXHRcdFx0XHRcdFwibmFtZVwiOiBcImphdmFzY3JpcHRcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRcImxhbmd1YWdlX2luZm9cIjoge1xuXHRcdFx0XHRcdFwiZmlsZV9leHRlbnNpb25cIjogXCIuanNcIixcblx0XHRcdFx0XHRcIm1pbWV0eXBlXCI6IFwiYXBwbGljYXRpb24vamF2YXNjcmlwdFwiLFxuXHRcdFx0XHRcdFwibmFtZVwiOiBcImphdmFzY3JpcHRcIlxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0bmJmb3JtYXQ6IDQsXG5cdFx0XHRuYmZvcm1hdF9taW5vcjogMCxcblx0XHRcdGNlbGxzOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRjZWxsX3R5cGU6IFwiY29kZVwiLFxuXHRcdFx0XHRcdHNvdXJjZToganMsXG5cdFx0XHRcdFx0bWV0YWRhdGE6IHtcblxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0b3V0cHV0czogW10sXG5cdFx0XHRcdFx0ZXhlY3V0aW9uX2NvdW50OiBudWxsXG5cdFx0XHRcdH1cblx0XHRcdF1cblx0XHR9O1xuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShub3RlYm9vayk7XG5cdH1cblxuXHRyZXR1cm4ganM7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRRaXNraXQgPSBmdW5jdGlvbihjb21tZW50LCBkZWNvbXBvc2UsIGV4cG9ydEFzR2F0ZU5hbWUsIHZlcnNpb25TdHIsIHByb3ZpZGVyTmFtZSwgYmFja2VuZE5hbWUsIGFzSnVweXRlciwgc2hvdHMsIGNpcmN1aXRSZXBsYWNlbWVudCwgaW5zaWRlU3VibW9kdWxlLCBoeWJyaWQpIHtcblx0dmFyIG9wdGlvbnMgPSB7XG5cdFx0Y29tbWVudDogY29tbWVudCxcblx0XHRkZWNvbXBvc2U6IGRlY29tcG9zZSxcblx0XHR2ZXJzaW9uU3RyOiB2ZXJzaW9uU3RyLFxuXHRcdHByb3ZpZGVyTmFtZTogcHJvdmlkZXJOYW1lLFxuXHRcdGJhY2tlbmROYW1lOiBiYWNrZW5kTmFtZSxcblx0XHRhc0p1cHl0ZXI6IGFzSnVweXRlcixcblx0XHRzaG90czogc2hvdHMsXG5cdFx0aHlicmlkOiBoeWJyaWRcblx0fTtcblx0XG5cdHJldHVybiB0aGlzLmV4cG9ydFRvUWlza2l0KG9wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUsIGNpcmN1aXRSZXBsYWNlbWVudCwgaW5zaWRlU3VibW9kdWxlKVxufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0UXVFU1QgPSBmdW5jdGlvbihjb21tZW50LCBkZWNvbXBvc2UsIGV4cG9ydEFzR2F0ZU5hbWUsIGRlZmluZWRGdW5jKSB7XG5cdHZhciBuZXdPcHRpb25zID0ge1xuXHRcdGNvbW1lbnQ6IGNvbW1lbnQsXG5cdFx0ZGVjb21wb3NlOiBkZWNvbXBvc2Vcblx0fTtcblxuXHRyZXR1cm4gdGhpcy5leHBvcnRUb1F1RVNUKG5ld09wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUsIGRlZmluZWRGdW5jKTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFFBU00gPSBmdW5jdGlvbihjb21tZW50LCBkZWNvbXBvc2UsIGV4cG9ydEFzR2F0ZU5hbWUsIGNpcmN1aXRSZXBsYWNlbWVudCwgY29tcGF0aWJpbGl0eU1vZGUsIGluc2lkZVN1Ym1vZHVsZSkge1xuXHR2YXIgb3B0aW9ucyA9IHtcblx0XHRjb21tZW50OiBjb21tZW50LFxuXHRcdGRlY29tcG9zZTogZGVjb21wb3NlLFxuXHRcdGNvbXBhdGliaWxpdHlNb2RlOiBjb21wYXRpYmlsaXR5TW9kZVxuXHR9O1xuXHRcblx0cmV0dXJuIHRoaXMuZXhwb3J0VG9RQVNNKG9wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUsIGNpcmN1aXRSZXBsYWNlbWVudCwgaW5zaWRlU3VibW9kdWxlKVx0XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5pbXBvcnRRQVNNID0gZnVuY3Rpb24oaW5wdXQsIGVycm9yQ2FsbGJhY2ssIGNvbXBhdGliaWxpdHlNb2RlKSB7XG5cdHRoaXMuaW5pdCgpO1xuXHRRQVNNSW1wb3J0KHRoaXMsIGlucHV0LCBlcnJvckNhbGxiYWNrLCBjb21wYXRpYmlsaXR5TW9kZSk7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRQeXF1aWwgPSBmdW5jdGlvbihjb21tZW50LCBkZWNvbXBvc2UsIGV4cG9ydEFzR2F0ZU5hbWUsIHZlcnNpb25TdHIsIGxhdHRpY2UsIGFzUVZNLCBhc0p1cHl0ZXIsIHNob3RzLCBoeWJyaWQpIHtcblx0dmFyIG9wdGlvbnMgPSB7XG5cdFx0Y29tbWVudDogY29tbWVudCxcblx0XHRkZWNvbXBvc2U6IGRlY29tcG9zZSxcblx0XHR2ZXJzaW9uU3RyOiB2ZXJzaW9uU3RyLFxuXHRcdGxhdHRpY2U6IGxhdHRpY2UsXG5cdFx0YXNRVk06IGFzUVZNLFxuXHRcdGFzSnVweXRlcjogYXNKdXB5dGVyLFxuXHRcdHNob3RzOiBzaG90cyxcblx0XHRoeWJyaWQ6IGh5YnJpZFxuXHR9O1xuXHRyZXR1cm4gdGhpcy5leHBvcnRUb1B5cXVpbChvcHRpb25zLCBleHBvcnRBc0dhdGVOYW1lKTtcbn1cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFF1aWwgPSBmdW5jdGlvbihjb21tZW50LCBkZWNvbXBvc2UsIGV4cG9ydEFzR2F0ZU5hbWUsIHZlcnNpb25TdHIpIHtcblx0dmFyIG9wdGlvbnMgPSB7XG5cdFx0Y29tbWVudDogY29tbWVudCxcblx0XHRkZWNvbXBvc2U6IGRlY29tcG9zZSxcblx0XHR2ZXJzaW9uU3RyOiB2ZXJzaW9uU3RyXG5cdH07XG5cblx0cmV0dXJuIHRoaXMuZXhwb3J0VG9RdWlsKG9wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUpO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuaW1wb3J0UXVpbCA9IGZ1bmN0aW9uKHF1aWwsIGVycm9yQ2FsbGJhY2ssIG9wdGlvbnMsIHF1Yml0TmFtZXMsIHJlbmFtZWRHYXRlcywgbGluZU9mZnNldCkge1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0c2VsZi5pbml0KCk7XG5cblx0cmVuYW1lZEdhdGVzID0gcmVuYW1lZEdhdGVzIHx8IHt9O1xuXHRsaW5lT2Zmc2V0ID0gbGluZU9mZnNldCB8fCAwO1xuXG5cdGZ1bmN0aW9uIGdldEdhdGVJbmZvKGdhdGVOYW1lKSB7XG5cdFx0aWYoc2VsZi5jdXN0b21HYXRlcyAmJiBzZWxmLmN1c3RvbUdhdGVzW2dhdGVOYW1lXSkge1xuXHRcdFx0cmV0dXJuIHsgbmFtZTogZ2F0ZU5hbWUsIGN1c3RvbUdhdGU6IHNlbGYuY3VzdG9tR2F0ZXNbZ2F0ZU5hbWVdIH07XG5cdFx0fVxuXG5cdFx0Zm9yKHZhciBnbmFtZSBpbiBzZWxmLmJhc2ljR2F0ZXMpIHtcblx0XHRcdHZhciBnZGVmID0gc2VsZi5iYXNpY0dhdGVzW2duYW1lXTtcblx0XHRcdGlmKGdkZWYuZXhwb3J0SW5mbykge1xuXHRcdFx0XHRpZihnZGVmLmV4cG9ydEluZm8ucXVpbCAmJiBnZGVmLmV4cG9ydEluZm8ucXVpbC5uYW1lID09IGdhdGVOYW1lKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHsgbmFtZTogZ25hbWUsIGdhdGVEZWY6IGdkZWYsIHF1aWxEZWY6IGdkZWYuZXhwb3J0SW5mby5xdWlsIH07XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYoZ2RlZi5leHBvcnRJbmZvLnB5cXVpbCAmJiBnZGVmLmV4cG9ydEluZm8ucHlxdWlsLm5hbWUgPT0gZ2F0ZU5hbWUpIHtcblx0XHRcdFx0XHRyZXR1cm4geyBuYW1lOiBnbmFtZSwgZ2F0ZURlZjogZ2RlZiwgcXVpbERlZjogZ2RlZi5leHBvcnRJbmZvLnB5cXVpbCB9O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXG5cdHZhciBsaW5lcyA9IHF1aWwuc3BsaXQoXCJcXG5cIik7XG5cblx0dmFyIGNvbW1hbmRzID0gW107XG5cdHZhciBtdWx0aWxpbmUgPSBmYWxzZTtcblx0bGluZXMubWFwKGZ1bmN0aW9uKGxpbmUsIGxpbmVJbmRleCkge1xuXHRcdC8vIHJlbW92ZSBjb21tZW50c1xuXHRcdGxpbmUgPSBsaW5lLnNwbGl0KFwiI1wiKVswXTtcblxuXHRcdGlmKCFsaW5lLmxlbmd0aCkge1xuXHRcdFx0bXVsdGlsaW5lID0gZmFsc2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIHJlbW92ZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZXNcblx0XHRcdGxpbmUgPSBsaW5lLnRyaW0oKTtcblx0XHR9XG5cblx0XHRpZighbXVsdGlsaW5lKSB7XG5cdFx0XHRpZihsaW5lLmxlbmd0aCkge1xuXHRcdFx0XHR2YXIgY2xpbmVzID0gbGluZS5zcGxpdChcIjtcIik7XG5cdFx0XHRcdHZhciBjb2RlbGluZXMgPSBbXTtcblx0XHRcdFx0Y2xpbmVzLm1hcChmdW5jdGlvbihjbGluZSkge1xuXHRcdFx0XHRcdGlmKGNsaW5lLnRyaW0oKS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdGNvZGVsaW5lcy5wdXNoKGNsaW5lLnRyaW0oKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRjb2RlbGluZXMubWFwKGZ1bmN0aW9uKGNvZGVsaW5lKSB7XG5cblx0XHRcdFx0XHR2YXIgdG9rZW5zID0gY29kZWxpbmUuc3BsaXQoXCIgXCIpO1xuXHRcdFx0XHRcdHZhciBsYXN0VG9rZW4gPSB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdO1xuXHRcdFx0XHRcdGlmKGxhc3RUb2tlbi5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdGlmKGxhc3RUb2tlbltsYXN0VG9rZW4ubGVuZ3RoIC0gMV0gPT0gXCI6XCIpIHtcblx0XHRcdFx0XHRcdFx0bXVsdGlsaW5lID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0Ly8gcmVtb3ZlIFwiOlwiXG5cdFx0XHRcdFx0XHRcdGxhc3RUb2tlbiA9IGxhc3RUb2tlbi5zdWJzdHJpbmcoMCwgbGFzdFRva2VuLmxlbmd0aCAtIDEpO1xuXHRcdFx0XHRcdFx0XHR0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdID0gbGFzdFRva2VuO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZih0b2tlbnMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdHZhciB0eXBlID0gXCJHQVRFXCI7XG5cdFx0XHRcdFx0XHRcdGlmKHRva2Vuc1swXSA9PSBcIkRFRkdBVEVcIiB8fCB0b2tlbnNbMF0gPT0gXCJERUZDSVJDVUlUXCIpIHtcblx0XHRcdFx0XHRcdFx0XHR0eXBlID0gdG9rZW5zWzBdO1xuXHRcdFx0XHRcdFx0XHRcdHRva2Vucy5zcGxpY2UoMCwgMSk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHR2YXIgbmFtZSA9IHRva2Vucy5qb2luKFwiIFwiKTtcblxuXHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1zID0gW107XG5cdFx0XHRcdFx0XHRcdHZhciBwYXJhbVN0YXJ0ID0gbmFtZS5pbmRleE9mKFwiKFwiKTtcblx0XHRcdFx0XHRcdFx0aWYocGFyYW1TdGFydCA+PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtRW5kID0gbmFtZS5pbmRleE9mKFwiKVwiKTtcblx0XHRcdFx0XHRcdFx0XHRpZihwYXJhbUVuZCA+IHBhcmFtU3RhcnQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtcyA9IG5hbWUuc3Vic3RyaW5nKHBhcmFtU3RhcnQgKyAxLCBwYXJhbUVuZCkuc3BsaXQoXCIsXCIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1zLm1hcChmdW5jdGlvbihwYXIsIG5keCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXIgPSBwYXIudHJpbSgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR3aGlsZShwYXIubGVuZ3RoICYmIHBhclswXSA9PSBcIiVcIikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBhciA9IHBhci5zbGljZSgxKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJhbXNbbmR4XSA9IHBhcjtcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRpZigocGFyYW1FbmQgKyAxKSA8PSBuYW1lLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0b2sgPSBuYW1lLnN1YnN0cmluZyhwYXJhbUVuZCArIDEsIG5hbWUubGVuZ3RoKS5zcGxpdChcIiBcIik7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0dG9rZW5zID0gW107XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRvay5tYXAoZnVuY3Rpb24odGspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0ayA9IHRrLnRyaW0oKTsgXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYodGsubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0b2tlbnMucHVzaCh0ayk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRva2VucyA9IFtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRuYW1lID0gbmFtZS5zdWJzdHJpbmcoMCwgcGFyYW1TdGFydCkudHJpbSgpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRuYW1lID0gdG9rZW5zLnNwbGljZSgwLCAxKVswXS50cmltKCk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHR2YXIgYXJncyA9IFtdO1xuXHRcdFx0XHRcdFx0XHRmb3IodmFyIHQgPSAwOyB0IDwgdG9rZW5zLmxlbmd0aDsgdCsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHRva2VuID0gdG9rZW5zW3RdO1xuXHRcdFx0XHRcdFx0XHRcdGlmKHF1Yml0TmFtZXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBxaW5kZXggPSBxdWJpdE5hbWVzLmluZGV4T2YodG9rZW4pO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYocWluZGV4ID49IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncy5wdXNoKHFpbmRleCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnB1c2godG9rZW4pO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnB1c2godG9rZW4pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGNvbW1hbmRzLnB1c2goeyB0eXBlOiB0eXBlLCBuYW1lOiBuYW1lLCBwYXJhbXM6IHBhcmFtcywgYXJnczogYXJncywgYm9keTogW10sIGxpbmU6IGxpbmVJbmRleCwgY29sOiAwIH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhciBjb2RlbGluZXMgPSBsaW5lLnNwbGl0KFwiO1wiKTtcblx0XHRcdGNvZGVsaW5lcy5tYXAoZnVuY3Rpb24oY29kZWxpbmUpIHtcblx0XHRcdFx0aWYoY29kZWxpbmUudHJpbSgpLmxlbmd0aCkge1xuXHRcdFx0XHRcdGNvbW1hbmRzW2NvbW1hbmRzLmxlbmd0aCAtIDFdLmJvZHkucHVzaChjb2RlbGluZS50cmltKCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xuXG5cdHZhciBjb21tYW5kQ291bnQgPSBjb21tYW5kcy5sZW5ndGg7XG5cdGZvcih2YXIgY29tbWFuZEluZGV4ID0gMDsgY29tbWFuZEluZGV4IDwgY29tbWFuZENvdW50OyBjb21tYW5kSW5kZXgrKykge1xuXHRcdHZhciBjb21tYW5kID0gY29tbWFuZHNbY29tbWFuZEluZGV4XTtcblxuXHRcdGlmKHJlbmFtZWRHYXRlc1tjb21tYW5kLm5hbWVdKSB7XG5cdFx0XHRjb21tYW5kLm5hbWUgPSByZW5hbWVkR2F0ZXNbY29tbWFuZC5uYW1lXTtcblx0XHR9XG5cblx0XHRzd2l0Y2goY29tbWFuZC50eXBlKSB7XG5cdFx0XHRjYXNlIFwiREVGR0FURVwiOiB7XG5cdFx0XHRcdGlmKGNvbW1hbmQubmFtZSA9PSBjb21tYW5kLm5hbWUudG9VcHBlckNhc2UoKSkge1xuXHRcdFx0XHRcdHZhciBuZXdOYW1lID0gY29tbWFuZC5uYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdFx0cmVuYW1lZEdhdGVzW2NvbW1hbmQubmFtZV0gPSBuZXdOYW1lO1xuXHRcdFx0XHRcdGNvbW1hbmQubmFtZSA9IG5ld05hbWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBOT1QgSU1QTEVNRU5URUQgWUVUICEhIVxuXG5cdFx0XHR9OyBicmVhaztcblxuXHRcdFx0Y2FzZSBcIkRFRkNJUkNVSVRcIjoge1xuXHRcdFx0XHRpZihjb21tYW5kLm5hbWUgPT0gY29tbWFuZC5uYW1lLnRvVXBwZXJDYXNlKCkpIHtcblx0XHRcdFx0XHR2YXIgbmV3TmFtZSA9IGNvbW1hbmQubmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRcdHJlbmFtZWRHYXRlc1tjb21tYW5kLm5hbWVdID0gbmV3TmFtZTtcblx0XHRcdFx0XHRjb21tYW5kLm5hbWUgPSBuZXdOYW1lO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFyIHN1YlF1aWwgPSBjb21tYW5kLmJvZHkuam9pbihcIlxcblwiKTtcblx0XHRcdFx0dmFyIHN1YlF1Yml0TmFtZXMgPSBjb21tYW5kLmFyZ3M7XG5cdFx0XHRcdHZhciBzdWJDaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cblx0XHRcdFx0c3ViQ2lyY3VpdC5pbXBvcnRRdWlsKHN1YlF1aWwsIGVycm9yQ2FsbGJhY2ssIG9wdGlvbnMsIHN1YlF1Yml0TmFtZXMsIHJlbmFtZWRHYXRlcywgY29tbWFuZC5saW5lICsgMSk7XG5cblx0XHRcdFx0c3ViQ2lyY3VpdC5wYXJhbXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNvbW1hbmQucGFyYW1zKSk7XG5cblx0XHRcdFx0c2VsZi5yZWdpc3RlckdhdGUoY29tbWFuZC5uYW1lLCBzdWJDaXJjdWl0LnNhdmUoKSk7XG5cdFx0XHR9OyBicmVhaztcblxuXHRcdFx0Y2FzZSBcIkdBVEVcIjoge1xuXHRcdFx0XHRzd2l0Y2goY29tbWFuZC5uYW1lKSB7XG5cdFx0XHRcdFx0Y2FzZSBcIkRFQ0xBUkVcIjoge1xuXHRcdFx0XHRcdFx0Ly8gTk9UIElNUExFTUVOVEVEIFlFVCAhISFcblxuXHRcdFx0XHRcdH07IGJyZWFrO1xuXG5cdFx0XHRcdFx0Y2FzZSBcIkhBTFRcIjoge1xuXHRcdFx0XHRcdFx0Ly8gV2hhdCE/XG5cblx0XHRcdFx0XHR9OyBicmVhaztcblxuXHRcdFx0XHRcdGNhc2UgXCJQUkFHTUFcIjoge1xuXHRcdFx0XHRcdFx0Ly8gV2hhdCE/XG5cblx0XHRcdFx0XHR9OyBicmVhaztcblxuXHRcdFx0XHRcdGRlZmF1bHQ6IHtcblx0XHRcdFx0XHRcdHZhciBnYXRlSW5mbyA9IGdldEdhdGVJbmZvKGNvbW1hbmQubmFtZSk7XG5cdFx0XHRcdFx0XHRpZighZ2F0ZUluZm8pIHtcblx0XHRcdFx0XHRcdFx0dmFyIGVycm9yTWVzc2FnZSA9IFwiQ2Fubm90IHJlY29nbml6ZSBcXFwiXCIgKyBjb21tYW5kLm5hbWUgKyBcIlxcXCIuXCI7XG5cdFx0XHRcdFx0XHRcdGlmKGVycm9yQ2FsbGJhY2spIHtcblx0XHRcdFx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKFsgeyBtc2c6IGVycm9yTWVzc2FnZSwgbGluZTogbGluZU9mZnNldCArIGNvbW1hbmQubGluZSwgY29sOiBjb21tYW5kLmNvbCB9IF0pO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtcyA9IHt9O1xuXG5cdFx0XHRcdFx0XHRcdGlmKGdhdGVJbmZvLmdhdGVEZWYpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgZ2F0ZURlZiA9IGdhdGVJbmZvLmdhdGVEZWY7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHF1aWxEZWYgPSBnYXRlSW5mby5xdWlsRGVmO1xuXG5cdFx0XHRcdFx0XHRcdFx0aWYoKHF1aWxEZWYucGFyYW1zIHx8IFtdKS5sZW5ndGggIT0gKGNvbW1hbmQucGFyYW1zIHx8IFtdKS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBlcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgbnVtYmVyIG9mIHBhcmFtcy4gRXhwZWN0ZWQgXCIgKyAocXVpbERlZi5wYXJhbXMgfHwgW10pLmxlbmd0aCArIFwiIGdvdCBcIiArIChjb21tYW5kLnBhcmFtcyB8fCBbXSkubGVuZ3RoICsgXCIuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soWyB7IG1zZzogZXJyb3JNZXNzYWdlLCBsaW5lOiBsaW5lT2Zmc2V0ICsgY29tbWFuZC5saW5lLCBjb2w6IGNvbW1hbmQuY29sIH0gXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBnYXRlRGVmLnBhcmFtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1OYW1lID0gZ2F0ZURlZi5wYXJhbXNbaV07XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtSW5kZXggPSBxdWlsRGVmLnBhcmFtcy5pbmRleE9mKHBhcmFtTmFtZSk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYocGFyYW1JbmRleCA8IDAgfHwgcGFyYW1JbmRleCA+PSBjb21tYW5kLnBhcmFtcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZXJyb3JNZXNzYWdlID0gXCJJbnRlcm5hbCBlcnJvcjogUVVJTCBkZWZpbml0aW9uIGZvciBnYXRlIFxcXCJcIiArIGNvbW1hbmQubmFtZSArIFwiIGlzIGludmFsaWQuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoZXJyb3JDYWxsYmFjaykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3JDYWxsYmFjayhbIHsgbXNnOiBlcnJvck1lc3NhZ2UsIGxpbmU6IGxpbmVPZmZzZXQgKyBjb21tYW5kLmxpbmUsIGNvbDogY29tbWFuZC5jb2wgfSBdKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtc1twYXJhbU5hbWVdID0gY29tbWFuZC5wYXJhbXNbcGFyYW1JbmRleF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGdhdGVEZWYgPSBnYXRlSW5mby5jdXN0b21HYXRlO1xuXHRcdFx0XHRcdFx0XHRcdGlmKChnYXRlRGVmLnBhcmFtcyB8fCBbXSkubGVuZ3RoICE9IChjb21tYW5kLnBhcmFtcyB8fCBbXSkubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgZXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIG51bWJlciBvZiBwYXJhbXMuIEV4cGVjdGVkIFwiICsgKGdhdGVEZWYucGFyYW1zIHx8IFtdKS5sZW5ndGggKyBcIiBnb3QgXCIgKyAoY29tbWFuZC5wYXJhbXMgfHwgW10pLmxlbmd0aCArIFwiLlwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoZXJyb3JDYWxsYmFjaykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKFsgeyBtc2c6IGVycm9yTWVzc2FnZSwgbGluZTogbGluZU9mZnNldCArIGNvbW1hbmQubGluZSwgY29sOiBjb21tYW5kLmNvbCB9IF0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGdhdGVEZWYucGFyYW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBwYXJhbU5hbWUgPSBnYXRlRGVmLnBhcmFtc1tpXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1zW3BhcmFtTmFtZV0gPSBjb21tYW5kLnBhcmFtc1tpXTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHQvLyBDaGVjayBpZiBudW1iZXIgb2YgYXJndW1lbnRzIG1hdGNoIGdhdGVEZWZcblx0XHRcdFx0XHRcdFx0aWYoY29tbWFuZC5uYW1lID09IFwiTUVBU1VSRVwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYoY29tbWFuZC5hcmdzLmxlbmd0aCAhPSAyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgZXJyb3JNZXNzYWdlID0gXCJFeHBlY3RpbmcgMiBhcmd1bWVudHMgKHF1Yml0IGFuZCB0YXJnZXQgcmVnaXN0ZXIpIGJ1dCBmb3VuZCBcIiArIGNvbW1hbmQuYXJncy5sZW5ndGggKyBcIi5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGVycm9yQ2FsbGJhY2spIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3JDYWxsYmFjayhbIHsgbXNnOiBlcnJvck1lc3NhZ2UsIGxpbmU6IGxpbmVPZmZzZXQgKyBjb21tYW5kLmxpbmUsIGNvbDogY29tbWFuZC5jb2wgfSBdKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBxdWJpdENvdW50ID0gMTtcblx0XHRcdFx0XHRcdFx0XHRpZihnYXRlRGVmLm51bVF1Yml0cykge1xuXHRcdFx0XHRcdFx0XHRcdFx0cXViaXRDb3VudCA9IGdhdGVEZWYubnVtUXViaXRzO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihnYXRlRGVmLm1hdHJpeCAmJiBnYXRlRGVmLm1hdHJpeC5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cXViaXRDb3VudCA9IG1hdGgubG9nMihnYXRlRGVmLm1hdHJpeC5sZW5ndGgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdGlmKGNvbW1hbmQuYXJncy5sZW5ndGggIT0gcXViaXRDb3VudCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGVycm9yTWVzc2FnZSA9IFwiRXhwZWN0aW5nIFwiICsgcXViaXRDb3VudCArIFwiIGFyZ3VtZW50cyBidXQgZm91bmQgXCIgKyBjb21tYW5kLmFyZ3MubGVuZ3RoICsgXCIuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soWyB7IG1zZzogZXJyb3JNZXNzYWdlLCBsaW5lOiBsaW5lT2Zmc2V0ICsgY29tbWFuZC5saW5lLCBjb2w6IGNvbW1hbmQuY29sIH0gXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdHZhciBhcmdzID0gW107XG5cdFx0XHRcdFx0XHRcdHZhciBjcmVnID0ge307XG5cdFx0XHRcdFx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBjb21tYW5kLmFyZ3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgYXJnID0gY29tbWFuZC5hcmdzW2ldO1xuXHRcdFx0XHRcdFx0XHRcdGlmKGNvbW1hbmQubmFtZSA9PSBcIk1FQVNVUkVcIikge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgY3JlZ1N0YXJ0ID0gYXJnLmluZGV4T2YoXCJbXCIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoY3JlZ1N0YXJ0ID49IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGNyZWdFbmQgPSBhcmcuaW5kZXhPZihcIl1cIik7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGNyZWdFbmQgPiBjcmVnU3RhcnQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjcmVnQml0ID0gYXJnLnN1YnN0cmluZyhjcmVnU3RhcnQgKyAxLCBjcmVnRW5kKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjcmVnTmFtZSA9IGFyZy5zdWJzdHJpbmcoMCwgY3JlZ1N0YXJ0KTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNyZWcgPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRiaXQ6IGNyZWdCaXQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRuYW1lOiBjcmVnTmFtZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBhcmdJbnQgPSBwYXJzZUludChhcmcpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZihpc05hTihhcmdJbnQpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoaSA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MucHVzaChhcmcpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIGFyZ3VtZW50IFxcXCJcIiArIGFyZyArIFwiXFxcIlwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoZXJyb3JDYWxsYmFjaykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKFsgeyBtc2c6IGVycm9yTWVzc2FnZSwgbGluZTogbGluZU9mZnNldCArIGNvbW1hbmQubGluZSwgY29sOiBjb21tYW5kLmNvbCB9IF0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncy5wdXNoKGFyZ0ludCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBhcmdJbnQgPSBwYXJzZUludChhcmcpO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoaXNOYU4oYXJnSW50KSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIGFyZ3VtZW50IFxcXCJcIiArIGFyZyArIFwiXFxcIlwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3JDYWxsYmFjayhbIHsgbXNnOiBlcnJvck1lc3NhZ2UsIGxpbmU6IGxpbmVPZmZzZXQgKyBjb21tYW5kLmxpbmUsIGNvbDogY29tbWFuZC5jb2wgfSBdKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MucHVzaChhcmdJbnQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdHNlbGYuYXBwZW5kR2F0ZShnYXRlSW5mby5uYW1lLCBhcmdzLCB7IHBhcmFtczogcGFyYW1zLCBjcmVnOiBjcmVnIH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHR9OyBicmVhaztcblx0XHR9XG5cdH1cblxuXHQvLyBUaGlzIGVycm9yIGhhbmRsaW5nIGlzIGNyKnAgYnV0IGxldCdzIGJlIGNvbnNpc3RlbnQgd2l0aCBpbXBvcnRRQVNNKCkgZm9yIG5vd1xuXHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0ZXJyb3JDYWxsYmFjayhbXSk7XG5cdH1cbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRRdWlyayA9IGZ1bmN0aW9uKGRlY29tcG9zZSkge1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0dmFyIGNpcmN1aXQgPSBudWxsO1xuXG5cdGZ1bmN0aW9uIHJhbmdlKG4pIHtcblx0XHR2YXIgYXJyID0gW107XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xuXHRcdFx0YXJyLnB1c2goaSk7XG5cdFx0fVxuXHRcdHJldHVybiBhcnI7XG5cdH1cblxuXHRmdW5jdGlvbiBpc1dpcmVJblJhbmdlKHdpcmUsIHdpcmVSYW5nZSl7XG5cdFx0aWYod2lyZVJhbmdlLmluZGV4T2Yod2lyZSkgPiAtMSl7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Ly8gZm9yY2UgZGVjb21wb3NlXG5cdGRlY29tcG9zZSA9IHRydWU7XG5cdHZhciBvYmogPSB0aGlzLnNhdmUoZGVjb21wb3NlKTtcblx0dmFyIGNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0dmFyIHRlbXBDaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdGNpcmN1aXQubG9hZChvYmopO1xuXHR0ZW1wQ2lyY3VpdC5sb2FkKG9iaik7XG5cblx0dmFyIHF1aXJrID0ge1xuXHRcdGNvbHM6IFtdLFxuXHRcdGdhdGVzOiBbXVxuXHR9O1xuXG5cdHZhciBnYXRlTWF0cml4ID0gbnVsbDtcblxuXHR2YXIgZ2xvYmFsUGFyYW1zID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5wYXJhbXMgPyB0aGlzLm9wdGlvbnMucGFyYW1zIDoge307XG5cdFxuXHR2YXIgZ2F0ZUxvY2F0aW9ucyA9IHt9O1xuXHR2YXIgY3VzdG9tR2F0ZUNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblxuXHRcblx0XG5cdHZhciBnYXRlc1RvQmVBZGRlZCA9IFtdO1xuXHRcblx0dmFyIGdhdGVJbmZvcm1hdGlvbiA9IHt9O1xuXG5cdGlmKCFkZWNvbXBvc2UpIHtcblx0XHR2YXIgbnVtQ29scyA9IHRlbXBDaXJjdWl0Lm51bUNvbHMoKTtcblx0XHRmb3IodmFyIGNvbHVtbiA9IG51bUNvbHMgLSAxOyBjb2x1bW4gPj0gMDsgY29sdW1uLS0pIHtcblx0XHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0ZW1wQ2lyY3VpdC5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0XHR2YXIgZ2F0ZSA9IHRlbXBDaXJjdWl0LmdhdGVzW3dpcmVdW2NvbHVtbl07XG5cdFx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCAmJiAhdGVtcENpcmN1aXQuYmFzaWNHYXRlc1tnYXRlLm5hbWVdKSB7XG5cdFx0XHRcdFx0Y3VzdG9tRGVjb21wb3NlZENpcmN1aXQgPSB0ZW1wQ2lyY3VpdC5kZWNvbXBvc2VHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdFx0XHR2YXIgaXNEZWNvbXBvc2VDdXN0b21DaXJjdWl0ID0gZmFsc2U7XG5cdFx0XHRcdFx0Z2F0ZUluZm9ybWF0aW9uW2dhdGUubmFtZV0gPSB7aW5mbzpbXSwgaXNEZWNvbXBvc2VDdXN0b21DaXJjdWl0Om51bGx9O1xuXHRcdFx0XHRcdGZvcih2YXIgZGVjb21wb3NlZENvbHVtbiA9IDA7IGRlY29tcG9zZWRDb2x1bW4gPCBjdXN0b21EZWNvbXBvc2VkQ2lyY3VpdC5udW1Db2xzKCk7IGRlY29tcG9zZWRDb2x1bW4rKykge1xuXHRcdFx0XHRcdFx0Zm9yKHZhciBkZWNvbXBvc2VkV2lyZSA9IDA7IGRlY29tcG9zZWRXaXJlIDwgY3VzdG9tRGVjb21wb3NlZENpcmN1aXQubnVtUXViaXRzOyBkZWNvbXBvc2VkV2lyZSsrKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBnYXRlSW5DdXN0b21DaXJjdWl0ID0gY3VzdG9tRGVjb21wb3NlZENpcmN1aXQuZ2V0R2F0ZUF0KGRlY29tcG9zZWRDb2x1bW4sIGRlY29tcG9zZWRXaXJlKTtcblxuXHRcdFx0XHRcdFx0XHRpZihnYXRlSW5DdXN0b21DaXJjdWl0KXtcblx0XHRcdFx0XHRcdFx0XHR2YXIgYmFzaWNHYXRlSW5DdXN0b21DaXJjdWl0ID0gY3VzdG9tRGVjb21wb3NlZENpcmN1aXQuYmFzaWNHYXRlc1tnYXRlSW5DdXN0b21DaXJjdWl0Lm5hbWVdO1xuXHRcdFx0XHRcdFx0XHRcdGlmKGJhc2ljR2F0ZUluQ3VzdG9tQ2lyY3VpdC5leHBvcnRJbmZvICYmICFiYXNpY0dhdGVJbkN1c3RvbUNpcmN1aXQuZXhwb3J0SW5mby5xdWlyayl7XG5cdFx0XHRcdFx0XHRcdFx0XHRpc0RlY29tcG9zZUN1c3RvbUNpcmN1aXQgPSBpc0RlY29tcG9zZUN1c3RvbUNpcmN1aXQgfHwgdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0aWYoZ2F0ZUluQ3VzdG9tQ2lyY3VpdC5jb25uZWN0b3IgPT0gMCl7XHRcblx0XHRcdFx0XHRcdFx0XHRcdGdhdGVJbmZvcm1hdGlvbltnYXRlLm5hbWVdLmluZm8ucHVzaCh7Z2F0ZUluQ3VzdG9tQ2lyY3VpdDpnYXRlSW5DdXN0b21DaXJjdWl0LCBjb2x1bW46Y29sdW1ufSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRnYXRlc1RvQmVBZGRlZC5wdXNoKGdhdGVJbmZvcm1hdGlvbik7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGdhdGVJbmZvcm1hdGlvbltnYXRlLm5hbWVdLmlzRGVjb21wb3NlQ3VzdG9tQ2lyY3VpdD0gaXNEZWNvbXBvc2VDdXN0b21DaXJjdWl0O1xuXHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0aWYoaXNEZWNvbXBvc2VDdXN0b21DaXJjdWl0KXtcblx0XHRcdFx0XHRcdGNpcmN1aXQuZ2F0ZXMubWFwKGZ1bmN0aW9uKGNpcmN1aXRHYXRlLCBpbmRleCl7XG5cdFx0XHRcdFx0XHRcdGNpcmN1aXRHYXRlLm1hcChmdW5jdGlvbihnYXRlVG9SZW1vdmUpe1xuXHRcdFx0XHRcdFx0XHRcdGlmKGdhdGVUb1JlbW92ZSAmJiBnYXRlVG9SZW1vdmUubmFtZSA9PSBnYXRlLm5hbWUpe1xuXHRcdFx0XHRcdFx0XHRcdFx0Y2lyY3VpdC5yZW1vdmVHYXRlKGdhdGVUb1JlbW92ZS5pZCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9KTtcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRnYXRlS2V5cyA9IE9iamVjdC5rZXlzKGdhdGVJbmZvcm1hdGlvbik7XG5cdGZvcih2YXIgZ2F0ZU51bWJlciA9ICAwOyBnYXRlTnVtYmVyIDwgZ2F0ZUtleXMubGVuZ3RoOyBnYXRlTnVtYmVyKyspe1xuXHRcdGdhdGVLZXkgPSBnYXRlS2V5c1tnYXRlTnVtYmVyXTtcblx0XHRpZihnYXRlSW5mb3JtYXRpb25bZ2F0ZUtleV0uaXNEZWNvbXBvc2VDdXN0b21DaXJjdWl0KXtcblx0XHRcdGZvcih2YXIgaSA9IGdhdGVJbmZvcm1hdGlvbltnYXRlS2V5XS5pbmZvLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKXtcblx0XHRcdFx0dmFyIGdhdGVJbmZvID0gZ2F0ZUluZm9ybWF0aW9uW2dhdGVLZXldLmluZm9baV07XG5cdFx0XHRcdHZhciBnYXRlVG9BZGQgPSBnYXRlSW5mby5nYXRlSW5DdXN0b21DaXJjdWl0O1xuXHRcdFx0XHRjaXJjdWl0Lmluc2VydEdhdGUoZ2F0ZVRvQWRkLm5hbWUsIGdhdGVJbmZvLmNvbHVtbiwgZ2F0ZVRvQWRkLndpcmVzLCBnYXRlVG9BZGQub3B0aW9ucyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0dmFyIHByZXZpb3VzQ29sdW1uID0gbnVsbDtcblx0dmFyIHByZXZpb3VzR2F0ZSA9IG51bGw7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgY2lyY3VpdC5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSBjaXJjdWl0LmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0aWYoZ2F0ZSl7XG5cdFx0XHRcdGlmKHByZXZpb3VzR2F0ZSAmJiBwcmV2aW91c0dhdGUubmFtZSAhPSBnYXRlLm5hbWUgJiYgcHJldmlvdXNHYXRlLmNvbm5lY3RvciAhPSAwICYmIHByZXZpb3VzQ29sdW1uID09IGNvbHVtbil7XG5cdFx0XHRcdFx0Y2lyY3VpdC5yZW1vdmVHYXRlKGdhdGUuaWQpO1xuXHRcdFx0XHRcdGNpcmN1aXQuaW5zZXJ0R2F0ZShnYXRlLm5hbWUsIGdhdGUuY29sdW1uICsgMSwgZ2F0ZS53aXJlcywgZ2F0ZS5vcHRpb25zKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRwcmV2aW91c0dhdGUgPSBnYXRlO1xuXHRcdFx0XHRwcmV2aW91c0NvbHVtbiA9IGNvbHVtbjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHR2YXIgbnVtQ29scyA9IGNpcmN1aXQubnVtQ29scygpO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0dmFyIHF1aXJrQ29sdW1uID0gW107XG5cdFx0dmFyIHdpcmVSYW5nZSA9IFtdO1xuXHRcdHZhciBpc0Jhc2ljR2F0ZSA9IGZhbHNlO1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBjaXJjdWl0Lm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGNpcmN1aXQuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRpZighZ2F0ZSB8fCBnYXRlLm5hbWUgPT0gXCJtZWFzdXJlXCIgfHwgZ2F0ZS5uYW1lID09IFwicmVzZXRcIikge1xuXHRcdFx0XHRpZihpc0Jhc2ljR2F0ZSB8fCAhaXNXaXJlSW5SYW5nZSh3aXJlLCB3aXJlUmFuZ2UpKXtcblx0XHRcdFx0XHRxdWlya0NvbHVtbi5wdXNoKDEpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR2YXIgYmFzaWNHYXRlID0gY2lyY3VpdC5iYXNpY0dhdGVzW2dhdGUubmFtZV07XG5cdFx0XHRcdHZhciBtYXhXaXJlID0gbWF0aC5tYXgoZ2F0ZS53aXJlcyk7XG5cdFx0XHRcdHZhciBtaW5XaXJlID0gbWF0aC5taW4oZ2F0ZS53aXJlcyk7XG5cdFx0XHRcdHZhciBnYXRlV2lyZXMgPSBnYXRlLndpcmVzLnNsaWNlKCk7XG5cdFx0XHRcdHZhciB3aXJlUmFuZ2UgPSByYW5nZShtYXhXaXJlKTtcblx0XHRcdFx0aWYoYmFzaWNHYXRlKSB7XG5cdFx0XHRcdFx0dmFyIHF1aXJrTmFtZSA9IFwiXCI7XG5cdFx0XHRcdFx0dmFyIGNvbnRyb2xsZWQgPSBmYWxzZTtcblx0XHRcdFx0XHRpc0Jhc2ljR2F0ZSA9IHRydWU7XG5cdFx0XHRcdFx0aWYoYmFzaWNHYXRlLmV4cG9ydEluZm8gJiYgYmFzaWNHYXRlLmV4cG9ydEluZm8ucXVpcmspe1xuXHRcdFx0XHRcdFx0cXVpcmtOYW1lID0gYmFzaWNHYXRlLmV4cG9ydEluZm8ucXVpcmsubmFtZTtcblx0XHRcdFx0XHRcdGNvbnRyb2xsZWQgPSBiYXNpY0dhdGUuZXhwb3J0SW5mby5xdWlyay5jb250cm9sbGVkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyB0d28tcXViaXQgZ2F0ZVxuXHRcdFx0XHRcdGlmKGJhc2ljR2F0ZS5tYXRyaXgubGVuZ3RoID09IDQpIHtcblx0XHRcdFx0XHRcdC8vIGtub3duIGdhdGUsIGJ1dCB0aGlzIGlzIGNvbnRyb2wgYml0XG5cdFx0XHRcdFx0XHRpZihxdWlya05hbWUgJiYgKGdhdGUubmFtZSA9PSBcInN3YXBcIiAmJiBnYXRlLmNvbm5lY3RvciA8IGdhdGUud2lyZXMubGVuZ3RoIC0gMiAmJiBjb250cm9sbGVkKSB8fCAoZ2F0ZS5uYW1lICE9IFwic3dhcFwiICYmIGdhdGUuY29ubmVjdG9yIDwgZ2F0ZS53aXJlcy5sZW5ndGggLSAxICYmIGNvbnRyb2xsZWQpKSB7XG5cdFx0XHRcdFx0XHRcdHF1aXJrTmFtZSA9IFwi4oCiXCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gdGhyZWUtcXViaXQgZ2F0ZVxuXHRcdFx0XHRcdGlmKGJhc2ljR2F0ZS5tYXRyaXgubGVuZ3RoID09IDgpIHtcblx0XHRcdFx0XHRcdC8vIGtub3duIGdhdGUsIGJ1dCB0aGlzIGlzIGNvbnRyb2wgYml0XG5cdFx0XHRcdFx0XHRpZihxdWlya05hbWUgJiYgKGdhdGUubmFtZSA9PSBcImNzd2FwXCIgJiYgZ2F0ZS5jb25uZWN0b3IgPCBnYXRlLndpcmVzLmxlbmd0aCAtIDIgJiYgY29udHJvbGxlZCkgfHwgKGdhdGUubmFtZSAhPSBcImNzd2FwXCIgJiYgZ2F0ZS5jb25uZWN0b3IgPCBnYXRlLndpcmVzLmxlbmd0aCAtIDEgJiYgY29udHJvbGxlZCkpIHtcblx0XHRcdFx0XHRcdFx0cXVpcmtOYW1lID0gXCLigKJcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZihxdWlya05hbWUpIHtcblx0XHRcdFx0XHRcdC8vIGFkZCBnYXRlIHRvIGNvbHVtblxuXHRcdFx0XHRcdFx0cXVpcmtDb2x1bW4ucHVzaChxdWlya05hbWUpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIE5vdCBkaXJlY3RseSBzdXBwb3J0ZWQgYnkgcXVpcmtcblx0XHRcdFx0XHRpZighcXVpcmtOYW1lKSB7XG5cdFx0XHRcdFx0XHRxdWlya05hbWUgPSBcIn5cIiArIGdhdGUubmFtZTtcblxuXHRcdFx0XHRcdFx0aWYoYmFzaWNHYXRlLnBhcmFtcy5sZW5ndGggJiYgZ2F0ZS5vcHRpb25zLnBhcmFtcykge1xuXHRcdFx0XHRcdFx0XHRiYXNpY0dhdGUucGFyYW1zLm1hcChmdW5jdGlvbihwYXJhbSl7XG5cdFx0XHRcdFx0XHRcdFx0YW5nbGUgPSBtYXRoLnJvdW5kKG1hdGguZXZhbHVhdGUoZ2F0ZS5vcHRpb25zLnBhcmFtc1twYXJhbV0sIGdsb2JhbFBhcmFtcyksIDMpO1xuXHRcdFx0XHRcdFx0XHRcdHF1aXJrTmFtZSArPSBcIl9cIiArIGFuZ2xlO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0dmFyIG1hdHJpeCA9IFwiXCI7XG5cdFx0XHRcdFx0XHRtYXRyaXggKz0gXCJ7XCI7XG5cblx0XHRcdFx0XHRcdHZhciByYXdNYXRyaXggPSBzZWxmLmdldFJhd0dhdGUoYmFzaWNHYXRlLCBnYXRlLm9wdGlvbnMpO1xuXG5cdFx0XHRcdFx0XHR2YXIgdGFyZ2V0V2lyZXNTb3J0ZWQgPSBnYXRlV2lyZXMuc29ydCgpO1xuXHRcdFx0XHRcdFx0dmFyIHRhcmdldFdpcmVzID0gW107XG5cdFx0XHRcdFx0XHRnYXRlLndpcmVzLm1hcChmdW5jdGlvbih0V2lyZSkge1xuXHRcdFx0XHRcdFx0XHR0YXJnZXRXaXJlcy5wdXNoKHRhcmdldFdpcmVzU29ydGVkLmluZGV4T2YodFdpcmUpKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0aWYobWF4V2lyZSAtIG1pbldpcmUgKyAxID4gZ2F0ZS53aXJlcy5sZW5ndGggfHwgZ2F0ZS53aXJlc1swXSA+IGdhdGUud2lyZXNbMV0pIHtcblx0XHRcdFx0XHRcdFx0Z2F0ZU1hdHJpeCA9IGNpcmN1aXQudHJhbnNmb3JtTWF0cml4KG1heFdpcmUgLSBtaW5XaXJlICsgMSwgcmF3TWF0cml4LCB0YXJnZXRXaXJlcyk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRnYXRlTWF0cml4ID0gcmF3TWF0cml4O1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRnYXRlTWF0cml4Lm1hcChmdW5jdGlvbihyb3csIHJvd0luZGV4KSB7XG5cdFx0XHRcdFx0XHRcdGlmKHJvd0luZGV4ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdG1hdHJpeCArPSBcIixcIjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRtYXRyaXggKz0gXCJ7XCI7XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRyb3cubWFwKGZ1bmN0aW9uKGNvbCwgY29sSW5kZXgpIHtcblx0XHRcdFx0XHRcdFx0XHRpZihjb2xJbmRleCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdG1hdHJpeCArPSBcIixcIjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRpZih0eXBlb2YgY29sICE9IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbCA9IG1hdGguY29tcGxleChjb2wpLnRvU3RyaW5nKCk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbCA9IGNvbC50b1N0cmluZygpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdG1hdHJpeCArPSBjb2w7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRtYXRyaXggKz0gXCJ9XCI7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdG1hdHJpeCArPSBcIn1cIjtcblx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0aWYoZ2F0ZS5jb25uZWN0b3IgPT0gMCkge1x0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHR2YXIgYWxyZWFkeURlZmluZWQgPSBxdWlyay5nYXRlcy5maW5kKGZ1bmN0aW9uKGd0KSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGd0LmlkID09IHF1aXJrTmFtZTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRpZighYWxyZWFkeURlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRxdWlyay5nYXRlcy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRcdGlkOiBxdWlya05hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRtYXRyaXg6IG1hdHJpeFxuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHR2YXIgZ2F0ZVByZXNlbnRJbkNvbCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRmb3IodmFyIGNvbHVtbkVsZW1lbnQgPSAwOyBjb2x1bW5FbGVtZW50IDwgcXVpcmtDb2x1bW4ubGVuZ3RoOyBjb2x1bW5FbGVtZW50Kyspe1xuXHRcdFx0XHRcdFx0XHRcdGlmKHF1aXJrQ29sdW1uW2NvbHVtbkVsZW1lbnRdID09IHF1aXJrTmFtZSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRnYXRlUHJlc2VudEluQ29sID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdGlmKCFnYXRlUHJlc2VudEluQ29sKXtcblx0XHRcdFx0XHRcdFx0XHRxdWlya0NvbHVtbi5wdXNoKHF1aXJrTmFtZSk7XG5cdFx0XHRcdFx0XHRcdH1lbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRxdWlya0NvbHVtbi5wdXNoKDEpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRpZih3aXJlIDwgZ2F0ZS53aXJlc1swXSl7XG5cdFx0XHRcdFx0XHRcdFx0cXVpcmsuZ2F0ZXMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZDogcXVpcmtOYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0bWF0cml4OiBtYXRyaXhcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHR2YXIgYWxyZWFkeURlZmluZWQgPSBxdWlyay5nYXRlcy5maW5kKGZ1bmN0aW9uKGd0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZ3QuaWQgPT0gcXVpcmtOYW1lO1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdGlmKCFhbHJlYWR5RGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cXVpcmsuZ2F0ZXMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlkOiBxdWlya05hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1hdHJpeDogbWF0cml4XG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGdhdGVQcmVzZW50SW5Db2wgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGNvbHVtbkVsZW1lbnQgPSAwOyBjb2x1bW5FbGVtZW50IDwgcXVpcmtDb2x1bW4ubGVuZ3RoOyBjb2x1bW5FbGVtZW50Kyspe1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYocXVpcmtDb2x1bW5bY29sdW1uRWxlbWVudF0gPT0gcXVpcmtOYW1lKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Z2F0ZVByZXNlbnRJbkNvbCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdGlmKCFnYXRlUHJlc2VudEluQ29sKXtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aXJrQ29sdW1uLnB1c2gocXVpcmtOYW1lKTtcblx0XHRcdFx0XHRcdFx0XHR9ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRxdWlya0NvbHVtbi5wdXNoKDEpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YXIgY3VzdG9tR2F0ZVdpcmVzID0gW107XG5cdFx0XHRcdFx0aXNCYXNpY0dhdGUgPSBmYWxzZTtcblx0XHRcdFx0XHRpZihnYXRlLmNvbm5lY3RvciA9PSAwKSB7XG5cdFx0XHRcdFx0XHR2YXIgY3VzdG9tR2F0ZUV4aXN0cyA9IGN1c3RvbUdhdGVDaXJjdWl0LmdhdGVzLmZpbmQoZnVuY3Rpb24oY3VzdG9tR2F0ZSl7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBjdXN0b21HYXRlICYmIGN1c3RvbUdhdGVbMF0gJiYgY3VzdG9tR2F0ZVswXVtcIm5hbWVcIl0gPT0gZ2F0ZS5uYW1lO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRpZighY3VzdG9tR2F0ZUV4aXN0cyl7XG5cdFx0XHRcdFx0XHRcdHZhciB3aXJlT2Zmc2V0ID0gZ2F0ZS53aXJlc1swXTtcblx0XHRcdFx0XHRcdFx0Z2F0ZS53aXJlcy5tYXAoZnVuY3Rpb24oZ2F0ZVdpcmUpe1xuXHRcdFx0XHRcdFx0XHRcdGN1c3RvbUdhdGVXaXJlcy5wdXNoKGdhdGVXaXJlIC0gd2lyZU9mZnNldCk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRjdXN0b21HYXRlQ2lyY3VpdC5yZWdpc3RlckdhdGUoZ2F0ZS5uYW1lLCBzZWxmLmN1c3RvbUdhdGVzW2dhdGUubmFtZV0pO1xuXHRcdFx0XHRcdFx0XHRjdXN0b21HYXRlQ2lyY3VpdC5hcHBlbmRHYXRlKGdhdGUubmFtZSwgY3VzdG9tR2F0ZVdpcmVzKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHF1aXJrQ29sdW1uLnB1c2goXCJ+XCIgKyBnYXRlLm5hbWUpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRxdWlya0NvbHVtbi5wdXNoKDEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRxdWlyay5jb2xzLnB1c2gocXVpcmtDb2x1bW4pO1xuXHR9XHRcdFxuXHRcblx0XG5cdC8vIHVzZXIgZGVmaW5lZCBnYXRlc1xuXHRpZighZGVjb21wb3NlKSB7XG5cdFx0dmFyIHVzZWRHYXRlcyA9IGNpcmN1aXQudXNlZEdhdGVzKCk7XG5cdFx0dXNlZEdhdGVzLm1hcChmdW5jdGlvbih1c2VkR2F0ZU5hbWUpIHtcblx0XHRcdHZhciBiYXNpY0dhdGUgPSBjaXJjdWl0LmJhc2ljR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRcdGlmKCFiYXNpY0dhdGUpIHtcblx0XHRcdFx0dmFyIGN1c3RvbUdhdGUgPSBzZWxmLmN1c3RvbUdhdGVzW3VzZWRHYXRlTmFtZV07XG5cdFx0XHRcdGlmKGN1c3RvbUdhdGUpIHtcblx0XHRcdFx0XHR2YXIgY3VzdG9tQ2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRcdFx0XHRcdGZvcihjdXN0b21Db2wgPSAwOyBjdXN0b21Db2wgPCBjdXN0b21HYXRlQ2lyY3VpdC5udW1Db2xzKCk7IGN1c3RvbUNvbCsrKXtcblx0XHRcdFx0XHRcdGZvcihjdXN0b21XaXJlID0gMDsgY3VzdG9tV2lyZSA8IGN1c3RvbUdhdGVDaXJjdWl0Lm51bUdhdGVzKCk7IGN1c3RvbVdpcmUrKyl7XG5cdFx0XHRcdFx0XHRcdHZhciBjaXJjdWl0R2F0ZSA9IGN1c3RvbUdhdGVDaXJjdWl0LmdldEdhdGVBdChjdXN0b21Db2wsIGN1c3RvbVdpcmUpO1xuXHRcdFx0XHRcdFx0XHRpZihjaXJjdWl0R2F0ZSAmJiBjaXJjdWl0R2F0ZS5uYW1lID09IHVzZWRHYXRlTmFtZSl7XG5cdFx0XHRcdFx0XHRcdFx0Y3VzdG9tR2F0ZU9iaiA9IGN1c3RvbUdhdGVDaXJjdWl0LmRlY29tcG9zZUdhdGVBdChjdXN0b21Db2wsIGN1c3RvbVdpcmUpO1xuXHRcdFx0XHRcdFx0XHRcdGN1c3RvbUNpcmN1aXQubG9hZChjdXN0b21HYXRlT2JqKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRxdWlyay5nYXRlcy5wdXNoKHtcblx0XHRcdFx0XHRcdGlkOiBcIn5cIiArIHVzZWRHYXRlTmFtZSxcblx0XHRcdFx0XHRcdGNpcmN1aXQ6IGN1c3RvbUNpcmN1aXQuZXhwb3J0UXVpcmsodHJ1ZSlcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIHF1aXJrO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0Q2lycSA9IGZ1bmN0aW9uKGNvbW1lbnQsIGRlY29tcG9zZSwgZXhwb3J0QXNHYXRlTmFtZSwgdmVyc2lvblN0ciwgYXNKdXB5dGVyLCBzaG90cywgZXhwb3J0VGZxKSB7XG5cdHZhciBvcHRpb25zID0ge1xuXHRcdGNvbW1lbnQ6IGNvbW1lbnQsXG5cdFx0ZGVjb21wb3NlOiBkZWNvbXBvc2UsXG5cdFx0dmVyc2lvblN0cjogdmVyc2lvblN0cixcblx0XHRhc0p1cHl0ZXI6IGFzSnVweXRlcixcblx0XHRzaG90czogc2hvdHMsXG5cdFx0ZXhwb3J0VGZxOiBleHBvcnRUZnFcblx0fTtcblx0cmV0dXJuIHRoaXMuZXhwb3J0VG9DaXJxKG9wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUpO1xufVxuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRRU2hhcnAgPSBmdW5jdGlvbihjb21tZW50LCBkZWNvbXBvc2UsIGV4cG9ydEFzR2F0ZU5hbWUsIHZlcnNpb25TdHIsIGFzSnVweXRlciwgY2lyY3VpdE5hbWUsIGluZGVudERlcHRoKSB7XG5cdHZhciBvcHRpb25zID0ge1xuXHRcdGNvbW1lbnQ6IGNvbW1lbnQsXG5cdFx0ZGVjb21wb3NlOiBkZWNvbXBvc2UsXG5cdFx0dmVyc2lvblN0cjogdmVyc2lvblN0cixcblx0XHRhc0p1cHl0ZXI6IGFzSnVweXRlcixcblx0XHRjaXJjdWl0TmFtZTogY2lyY3VpdE5hbWUsXG5cdFx0aW5kZW50RGVwdGg6IGluZGVudERlcHRoXG5cdH07XG5cdHJldHVybiB0aGlzLmV4cG9ydFRvUVNoYXJwKG9wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUpO1xufVxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0UW9iaiA9IGZ1bmN0aW9uKGNpcmN1aXROYW1lLCBleHBlcmltZW50TmFtZSwgbnVtU2hvdHMsIGNpcmN1aXRSZXBsYWNlbWVudCkge1xuXHR2YXIgb3B0aW9ucyA9IHtcblx0XHRjaXJjdWl0TmFtZTogY2lyY3VpdE5hbWUsXG5cdFx0ZXhwZXJpbWVudE5hbWU6IGV4cGVyaW1lbnROYW1lLFxuXHRcdG51bVNob3RzOiBudW1TaG90c1xuXHR9O1xuXHRcblx0cmV0dXJuIHRoaXMuZXhwb3J0VG9Rb2JqKG9wdGlvbnMsIGNpcmN1aXRSZXBsYWNlbWVudClcdFxufVxuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5pbXBvcnRRb2JqID0gZnVuY3Rpb24ocW9iaiwgZXJyb3JDYWxsYmFjaykge1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0dGhpcy5pbml0KCk7XG5cblx0aWYoIXFvYmogfHwgIXFvYmouZXhwZXJpbWVudHMgfHwgIXFvYmouZXhwZXJpbWVudHMubGVuZ3RoKSB7XG5cdFx0aWYoZXJyb3JDYWxsYmFjaykge1xuXHRcdFx0ZXJyb3JDYWxsYmFjayhbIHsgbXNnOiBcIkludmFsaWQgaW5wdXQgZmlsZTogbm8gZXhwZXJpbWVudHMgZm91bmQuXCIgfSBdKTtcblx0XHR9XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dmFyIGV4cGVyaW1lbnQgPSBxb2JqLmV4cGVyaW1lbnRzWzBdO1xuXG5cdHZhciBoZWFkZXIgPSBleHBlcmltZW50LmhlYWRlciB8fCB7fTtcblxuXHQvLyBBZGQgcXViaXRzXG5cdHRoaXMuaW5pdChwYXJzZUludChoZWFkZXIubl9xdWJpdHMgfHwgMCkpO1xuXG5cdC8vIENsYXNzaWNhbCByZWdpc3RlcnNcblx0dmFyIGNyZWdEYXRhID0ge307XG5cdGlmKGhlYWRlci5jcmVnX3NpemVzICYmIGhlYWRlci5jcmVnX3NpemVzLmxlbmd0aCkge1xuXHRcdHZhciB0b3RhbEJpdHMgPSAwO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBoZWFkZXIuY3JlZ19zaXplcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGNyZWdEZWYgPSBoZWFkZXIuY3JlZ19zaXplc1tpXTtcblx0XHRcdGlmKGNyZWdEZWYubGVuZ3RoID4gMSkge1xuXHRcdFx0XHR2YXIgY3JlZ05hbWUgPSBjcmVnRGVmWzBdICsgXCJcIjtcblx0XHRcdFx0dmFyIGNyZWdMZW4gPSBwYXJzZUludChjcmVnRGVmWzFdKTtcblx0XHRcdFx0dGhpcy5jcmVhdGVDcmVnKGNyZWdOYW1lLCBjcmVnTGVuKTtcblxuXHRcdFx0XHR2YXIgY3JlZ01hc2sgPSAoKDEgPDwgKHRvdGFsQml0cyArIGNyZWdMZW4pKSAtICgxIDw8IHRvdGFsQml0cykpO1xuXG5cdFx0XHRcdGNyZWdEYXRhW2NyZWdOYW1lXSA9IHtcblx0XHRcdFx0XHRtYXNrOiBjcmVnTWFzayxcblx0XHRcdFx0XHRvZmZzZXQ6IHRvdGFsQml0c1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdHRvdGFsQml0cyArPSBjcmVnTGVuO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFJldHVybiBjbGFzc2ljYWwgY29uZGl0aW9uIGFyZ3VtZW50IGZvciBnYXRlIGZyb20gYmZ1bmMgbWFzayBhbmQgdmFsdWVcblx0ZnVuY3Rpb24gY29uZGl0aW9uRnJvbU1hc2tBbmRWYWx1ZShtYXNrLCB2YWx1ZSkge1xuXHRcdGZvcih2YXIgY3JlZ05hbWUgaW4gY3JlZ0RhdGEpIHtcblx0XHRcdHZhciBkYXRhID0gY3JlZ0RhdGFbY3JlZ05hbWVdO1xuXG5cdFx0XHRpZihkYXRhLm1hc2sgPT0gbWFzaykge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdGNyZWc6IGNyZWdOYW1lLFxuXHRcdFx0XHRcdHZhbHVlOiB2YWx1ZSA+PiBkYXRhLm9mZnNldFxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gT2J0YWluIGNsYXNzaWNhbCByZWdpc3RlciBuYW1lIGFuZCBsb2NhbCBiaXQgbnVtYmVyIGZyb20gZ2xvYmFsIGJpdCBudW1iZXJcblx0ZnVuY3Rpb24gbWVtb3J5VG9DcmVnKG1lbW9yeSkge1xuXHRcdHZhciB0b3RhbEJpdHMgPSAwO1xuXHRcdGZvcih2YXIgY3JlZ05hbWUgaW4gc2VsZi5jcmVncykge1xuXHRcdFx0dmFyIGNyZWcgPSBzZWxmLmNyZWdzW2NyZWdOYW1lXTtcblx0XHRcdGlmKCh0b3RhbEJpdHMgKyBjcmVnLmxlbmd0aCkgPiBtZW1vcnkpIHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRuYW1lOiBjcmVnTmFtZSxcblx0XHRcdFx0XHRiaXQ6IG1lbW9yeSAtIHRvdGFsQml0c1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdFx0dG90YWxCaXRzICs9IGNyZWcubGVuZ3RoO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8vIEFkZCBnYXRlc1xuXHR2YXIgaW5zdHJ1Y3Rpb25zID0gZXhwZXJpbWVudC5pbnN0cnVjdGlvbnMgfHwgW107XG5cdHZhciBjb25kaXRpb25zID0ge307XG5cdGZvcih2YXIgaW5zdEluZGV4ID0gMDsgaW5zdEluZGV4IDwgZXhwZXJpbWVudC5pbnN0cnVjdGlvbnMubGVuZ3RoOyBpbnN0SW5kZXgrKykge1xuXHRcdHZhciBpbnN0ID0gZXhwZXJpbWVudC5pbnN0cnVjdGlvbnNbaW5zdEluZGV4XTtcblxuXHRcdHN3aXRjaChpbnN0Lm5hbWUpIHtcblx0XHRcdC8vIGNsYXNzaWNhbCBjb250cm9sXG5cdFx0XHRjYXNlIFwiYmZ1bmNcIjoge1xuXHRcdFx0XHR2YXIgY29uZGl0aW9uID0gY29uZGl0aW9uRnJvbU1hc2tBbmRWYWx1ZShwYXJzZUludChpbnN0Lm1hc2spLCBwYXJzZUludChpbnN0LnZhbCkpO1xuXG5cdFx0XHRcdGlmKCFjb25kaXRpb24pIHtcblx0XHRcdFx0XHR2YXIgZXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIGNsYXNzaWNhbCBjb25kaXRpb24uXCI7XG5cdFx0XHRcdFx0aWYoZXJyb3JDYWxsYmFjaykge1xuXHRcdFx0XHRcdFx0ZXJyb3JDYWxsYmFjayhbIHsgbXNnOiBlcnJvck1lc3NhZ2UgfSBdKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uZGl0aW9uc1tpbnN0LnJlZ2lzdGVyXSA9IGNvbmRpdGlvbjtcblx0XHRcdH07IGJyZWFrO1xuXG5cdFx0XHQvLyBNZWFzdXJlbWVudFxuXHRcdFx0Y2FzZSBcIm1lYXN1cmVcIjoge1xuXHRcdFx0XHRmb3IodmFyIHFJbmRleCA9IDA7IHFJbmRleCA8IGluc3QucXViaXRzLmxlbmd0aDsgcUluZGV4KyspIHtcblx0XHRcdFx0XHR2YXIgcXViaXQgPSBpbnN0LnF1Yml0c1txSW5kZXhdO1xuXHRcdFx0XHRcdHZhciBtZW1vcnkgPSBpbnN0Lm1lbW9yeVtxSW5kZXhdO1xuXHRcdFx0XHRcdHZhciBjcmVnID0gbWVtb3J5VG9DcmVnKG1lbW9yeSk7XG5cdFx0XHRcdFx0aWYoIWNyZWcpIHtcblx0XHRcdFx0XHRcdHZhciBlcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgbWVhc3VyZW1lbnQgZGVzdGluYXRpb24uXCI7XG5cdFx0XHRcdFx0XHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soWyB7IG1zZzogZXJyb3JNZXNzYWdlIH0gXSk7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuXHRcdFx0XHRcdFx0fVx0XHRcdFx0XHRcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR2YXIgb3B0aW9ucyA9IHsgY3JlZzogY3JlZyB9O1xuXG5cdFx0XHRcdFx0dGhpcy5hcHBlbmRHYXRlKFwibWVhc3VyZVwiLCBxdWJpdCwgb3B0aW9ucyk7XG5cdFx0XHRcdH1cblx0XHRcdH07IGJyZWFrO1xuXG5cdFx0XHRjYXNlIFwiYmFycmllclwiOiB7XG5cdFx0XHRcdC8vICEhISBOb3QgaW1wbGVtZW50ZWQgeWV0LiBJZ25vcmUgZm9yIG5vdy5cblx0XHRcdH07IGJyZWFrO1xuXG5cdFx0XHQvLyBOb3JtYWwgZ2F0ZVxuXHRcdFx0ZGVmYXVsdDoge1xuXHRcdFx0XHR2YXIgb3B0aW9ucyA9IHtcblx0XHRcdFx0XHRwYXJhbXM6IHt9LFxuXHRcdFx0XHRcdGNvbmRpdGlvbjoge31cblx0XHRcdFx0fTtcblxuXHRcdFx0XHQvLyBGaW5kIGdhdGUgZGVmaW5pdGlvblxuXHRcdFx0XHR2YXIgZ2F0ZU5hbWUgPSBpbnN0Lm5hbWU7XG5cdFx0XHRcdHN3aXRjaChnYXRlTmFtZSkge1xuXHRcdFx0XHRcdGNhc2UgXCJpZGVuXCI6IGdhdGVOYW1lID0gXCJpZFwiOyBicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhciBnYXRlRGVmID0gdGhpcy5iYXNpY0dhdGVzW2dhdGVOYW1lXTtcblx0XHRcdFx0aWYoIWdhdGVEZWYpIHtcblx0XHRcdFx0XHR2YXIgZXJyb3JNZXNzYWdlID0gXCJVbmtub3duIGdhdGUgXFxcIlwiICsgaW5zdC5uYW1lICsgXCJcXFwiLlwiO1xuXHRcdFx0XHRcdGlmKGVycm9yQ2FsbGJhY2spIHtcblx0XHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soWyB7IG1zZzogZXJyb3JNZXNzYWdlIH0gXSk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEdhdGUgcGFyYW1zIChpZiBhbnkpXG5cdFx0XHRcdGlmKGdhdGVEZWYucGFyYW1zICYmIGdhdGVEZWYucGFyYW1zLmxlbmd0aCkge1xuXHRcdFx0XHRcdGlmKCFpbnN0LnBhcmFtcyB8fCAhaW5zdC5wYXJhbXMubGVuZ3RoIHx8IGluc3QucGFyYW1zLmxlbmd0aCAhPSBnYXRlRGVmLnBhcmFtcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdHZhciBlcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgbnVtYmVyIG9mIHBhcmFtcyBmb3IgZ2F0ZSBcXFwiXCIgKyBpbnN0Lm5hbWUgKyBcIlxcXCIuXCI7XG5cdFx0XHRcdFx0XHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soWyB7IG1zZzogZXJyb3JNZXNzYWdlIH0gXSk7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGZvcih2YXIgcGFySW5kZXggPSAwOyBwYXJJbmRleCA8IGdhdGVEZWYucGFyYW1zLmxlbmd0aDsgcGFySW5kZXgrKykge1xuXHRcdFx0XHRcdFx0dmFyIHBhcmFtTmFtZSA9IGdhdGVEZWYucGFyYW1zW3BhckluZGV4XTtcblx0XHRcdFx0XHRcdG9wdGlvbnMucGFyYW1zW3BhcmFtTmFtZV0gPSBpbnN0LnBhcmFtc1twYXJJbmRleF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ2xhc3NpY2FsIGNvbnRyb2wgKGlmIGFueSlcblx0XHRcdFx0aWYodHlwZW9mIGluc3QuY29uZGl0aW9uYWwgIT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0XHRcdHZhciBjb25kaXRpb24gPSBjb25kaXRpb25zW2luc3QuY29uZGl0aW9uYWxdO1xuXHRcdFx0XHRcdGlmKCFjb25kaXRpb24pIHtcblx0XHRcdFx0XHRcdHZhciBlcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgY2xhc3NpY2FsIGNvbmRpdGlvbi5cIjtcblx0XHRcdFx0XHRcdGlmKGVycm9yQ2FsbGJhY2spIHtcblx0XHRcdFx0XHRcdFx0ZXJyb3JDYWxsYmFjayhbIHsgbXNnOiBlcnJvck1lc3NhZ2UgfSBdKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG9wdGlvbnMuY29uZGl0aW9uID0gY29uZGl0aW9uO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQWRkIGdhdGUgdG8gY2lyY3VpdFxuXHRcdFx0XHR0aGlzLmFwcGVuZEdhdGUoZ2F0ZU5hbWUsIGluc3QucXViaXRzLCBvcHRpb25zKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBUaGlzIGVycm9yIGhhbmRsaW5nIGlzIGNyKnAgYnV0IGxldCdzIGJlIGNvbnNpc3RlbnQgd2l0aCBpbXBvcnRRQVNNKCkgZm9yIG5vd1xuXHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0ZXJyb3JDYWxsYmFjayhbXSk7XG5cdH1cbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRURlEgPSBmdW5jdGlvbihjb21tZW50LCBkZWNvbXBvc2UsIGV4cG9ydEFzR2F0ZU5hbWUsIHZlcnNpb25TdHIsIGFzSnVweXRlciwgc2hvdHMpIHtcblx0dmFyIG9wdGlvbnMgPSB7XG5cdFx0Y29tbWVudDogY29tbWVudCxcblx0XHRkZWNvbXBvc2U6IGRlY29tcG9zZSxcblx0XHR2ZXJzaW9uU3RyOiB2ZXJzaW9uU3RyLFxuXHRcdGFzSnVweXRlcjogYXNKdXB5dGVyLFxuXHRcdHNob3RzOiBzaG90c1xuXHR9O1xuXHRyZXR1cm4gdGhpcy5leHBvcnRUb1RGUShvcHRpb25zLCBleHBvcnRBc0dhdGVOYW1lKTtcbn1cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydEJyYWtldCA9IGZ1bmN0aW9uKGNvbW1lbnQsIGRlY29tcG9zZSwgZXhwb3J0QXNHYXRlTmFtZSwgdmVyc2lvblN0ciwgYXNKdXB5dGVyLCBzaG90cywgaHlicmlkLCBpbmRlbnREZXB0aCkge1xuXHR2YXIgb3B0aW9ucyA9IHtcblx0XHRjb21tZW50OiBjb21tZW50LFxuXHRcdGRlY29tcG9zZTogZGVjb21wb3NlLFxuXHRcdHZlcnNpb25TdHI6IHZlcnNpb25TdHIsXG5cdFx0YXNKdXB5dGVyOiBhc0p1cHl0ZXIsXG5cdFx0c2hvdHM6IHNob3RzLFxuXHRcdGh5YnJpZDogaHlicmlkLFxuXHRcdGluZGVudERlcHRoOiBpbmRlbnREZXB0aFxuXHR9O1xuXG5cdHJldHVybiB0aGlzLmV4cG9ydFRvQnJha2V0KG9wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUpO1xufVxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0U1ZHID0gZnVuY3Rpb24oZW1iZWRkZWQsIG9wdGlvbnMpIHtcblx0dmFyIG5ld09wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXHRuZXdPcHRpb25zLmVtYmVkZGVkID0gISFlbWJlZGRlZDtcblxuXHRyZXR1cm4gdGhpcy5leHBvcnRUb1NWRyhuZXdPcHRpb25zKTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRUb1NWRyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcblx0dmFyIHNlbGYgPSB0aGlzO1xuXHR2YXIgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0b3B0aW9ucy5lbWJlZGRlZCA9IG9wdGlvbnMuZW1iZWRkZWQgfHwgZmFsc2U7XG5cdG9wdGlvbnMuY2VsbFdpZHRoID0gb3B0aW9ucy5jZWxsV2lkdGggfHwgNDA7XG5cdG9wdGlvbnMuY2VsbEhlaWdodCA9IG9wdGlvbnMuY2VsbEhlaWdodCB8fCA0MDtcblx0b3B0aW9ucy5oU3BhY2luZyA9IG9wdGlvbnMuaFNwYWNpbmcgfHwgMjg7XG5cdG9wdGlvbnMudlNwYWNpbmcgPSBvcHRpb25zLnZTcGFjaW5nIHx8IDM0O1xuXHRvcHRpb25zLmJsYWNrYm94UGFkZGluZ1ggPSBvcHRpb25zLmJsYWNrYm94UGFkZGluZ1ggfHwgMjtcblx0b3B0aW9ucy5ibGFja2JveFBhZGRpbmdZID0gb3B0aW9ucy5ibGFja2JveFBhZGRpbmdZIHx8IDI7XG5cdG9wdGlvbnMuYmxhY2tib3hMaW5lQ29sb3IgPSBvcHRpb25zLmJsYWNrYm94TGluZUNvbG9yIHx8IFwiYmxhY2tcIjtcblx0b3B0aW9ucy5ibGFja2JveFNlbGVjdGVkTGluZUNvbG9yID0gb3B0aW9ucy5ibGFja2JveFNlbGVjdGVkTGluZUNvbG9yIHx8IFwiYmxhY2tcIjtcblx0b3B0aW9ucy53aXJlQ29sb3IgPSBvcHRpb25zLndpcmVDb2xvciB8fCBcImJsYWNrXCI7XG5cdG9wdGlvbnMuZ2F0ZUxpbmVDb2xvciA9IG9wdGlvbnMuZ2F0ZUxpbmVDb2xvciB8fCBcImJsYWNrXCI7XG5cdG9wdGlvbnMuZ2F0ZVNlbGVjdGVkTGluZUNvbG9yID0gb3B0aW9ucy5nYXRlU2VsZWN0ZWRMaW5lQ29sb3IgfHwgXCJibGFja1wiO1xuXHRvcHRpb25zLmNXaXJlQ29sb3IgPSBvcHRpb25zLmNXaXJlQ29sb3IgfHwgXCJzaWx2ZXJcIjtcblx0b3B0aW9ucy5jV2lyZVNlbGVjdGVkQ29sb3IgPSBvcHRpb25zLmNXaXJlU2VsZWN0ZWRDb2xvciB8fCBcInNpbHZlclwiO1xuXHRvcHRpb25zLmNBcnJvd1NpemUgPSBvcHRpb25zLmNBcnJvd1NpemUgfHwgMTA7XG5cdG9wdGlvbnMuaFdpcmVDb2xvciA9IG9wdGlvbnMuaFdpcmVDb2xvciB8fCBcImJsYWNrXCI7XG5cdG9wdGlvbnMud2lyZVdpZHRoID0gb3B0aW9ucy53aXJlV2lkdGggfHwgMTtcblx0b3B0aW9ucy53aXJlVGV4dEhlaWdodCA9IG9wdGlvbnMud2lyZVRleHRIZWlnaHQgfHwgODtcblx0b3B0aW9ucy53aXJlVGV4dERvd24gPSBvcHRpb25zLndpcmVUZXh0RG93biB8fCAxNjtcblx0b3B0aW9ucy53aXJlTWFyZ2luID0gb3B0aW9ucy53aXJlTWFyZ2luIHx8IDIwO1xuXHRvcHRpb25zLndpcmVMYWJlbFdpZHRoID0gb3B0aW9ucy53aXJlTGFiZWxXaWR0aCB8fCA0MDtcblx0b3B0aW9ucy5kb3RSYWRpdXMgPSBvcHRpb25zLmRvdFJhZGl1cyB8fCA1O1xuXHRvcHRpb25zLnBhcmFtVGV4dEhlaWdodCA9IG9wdGlvbnMucGFyYW1UZXh0SGVpZ2h0IHx8IDY7XG5cdG9wdGlvbnMuc2VsZWN0aW9uUGFkZGluZ1ggPSBvcHRpb25zLnNlbGVjdGlvblBhZGRpbmdYIHx8IDQ7XG5cdG9wdGlvbnMuc2VsZWN0aW9uUGFkZGluZ1kgPSBvcHRpb25zLnNlbGVjdGlvblBhZGRpbmdZIHx8IDQ7XG5cdG9wdGlvbnMuc2VsZWN0aW9uTGluZUNvbG9yID0gb3B0aW9ucy5zZWxlY3Rpb25MaW5lQ29sb3IgfHwgXCIjMjE4NUQwXCI7XG5cdG9wdGlvbnMuZHJhd0Jsb2NoU3BoZXJlcyA9IG9wdGlvbnMuZHJhd0Jsb2NoU3BoZXJlcyB8fCBmYWxzZTtcblxuXHRpZih0eXBlb2Ygb3B0aW9ucy5kcmF3SHlicmlkID09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRvcHRpb25zLmRyYXdIeWJyaWQgPSB0aGlzLm9wdGlvbnMgPyAhIXRoaXMub3B0aW9ucy5oeWJyaWQgOiBmYWxzZTtcblx0fVxuXG5cdHZhciBnZXRDcmVnSW5kZXggPSBmdW5jdGlvbihuYW1lKSB7XG5cdFx0dmFyIGNyZWdJbmRleCA9IDA7XG5cdFx0Zm9yKHZhciBjcmVnTmFtZSBpbiBzZWxmLmNyZWdzKSB7XG5cdFx0XHRpZihjcmVnTmFtZSA9PSBuYW1lKSB7XG5cdFx0XHRcdHJldHVybiBjcmVnSW5kZXg7XG5cdFx0XHR9XG5cdFx0XHRjcmVnSW5kZXgrKztcblx0XHR9XG5cdFx0cmV0dXJuIGNyZWdJbmRleDtcblx0fTtcblxuXHR2YXIgZ2V0Q2VsbFggPSBmdW5jdGlvbihjb2wpIHtcblx0XHRyZXR1cm4gb3B0aW9ucy53aXJlTGFiZWxXaWR0aCArICgob3B0aW9ucy5jZWxsV2lkdGggKyBvcHRpb25zLmhTcGFjaW5nKSAqIGNvbCkgKyBvcHRpb25zLmhTcGFjaW5nO1xuXHR9O1xuXG5cdHZhciBnZXRDZWxsWSA9IGZ1bmN0aW9uKHdpcmUpIHtcblx0XHRyZXR1cm4gKChvcHRpb25zLmNlbGxIZWlnaHQgKyBvcHRpb25zLnZTcGFjaW5nKSAqIHdpcmUpICsgb3B0aW9ucy52U3BhY2luZztcblx0fTtcblxuXHR2YXIgbnVtUm93cyA9IHRoaXMubnVtUXViaXRzO1xuXHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHR2YXIgbnVtQ3JlZ3MgPSB0aGlzLmNyZWdDb3VudCgpO1xuXG5cdHZhciB0b3RhbENvbHMgPSBudW1Db2xzO1xuXHQvLyByZXNlcnZlIGNvbCBmb3IgYmxvY2ggc3BoZXJlc1xuXHRpZihvcHRpb25zLmRyYXdCbG9jaFNwaGVyZXMpIHtcblx0XHR0b3RhbENvbHMrKztcblx0fVxuXG5cdHZhciB0b3RhbFdpcmVDb2xzID0gdG90YWxDb2xzO1xuXG5cdC8vIHJlc2VydmUgMiBjb2xzIGZvciBoeWJyaWQgcXVhbnR1bS1jbGFzc2ljYWwgY29ubmVjdG9yXG5cdGlmKG9wdGlvbnMuZHJhd0h5YnJpZCkge1xuXHRcdHRvdGFsQ29scyArPSAyO1xuXHR9XG5cblx0dmFyIHRvdGFsV2lkdGggPSBnZXRDZWxsWCh0b3RhbENvbHMpO1xuXHR2YXIgdG90YWxXaXJlV2lkdGggPSBnZXRDZWxsWCh0b3RhbFdpcmVDb2xzKTtcblx0dmFyIHRvdGFsSGVpZ2h0ID0gKChvcHRpb25zLmNlbGxIZWlnaHQgKyBvcHRpb25zLnZTcGFjaW5nKSAqIChudW1Sb3dzICsgbnVtQ3JlZ3MgKyAob3B0aW9ucy5kcmF3SHlicmlkID8gMSA6IDApKSkgKyBvcHRpb25zLnZTcGFjaW5nO1xuXG5cdHZhciBoeWJyaWRZID0gKChvcHRpb25zLmNlbGxIZWlnaHQgKyBvcHRpb25zLnZTcGFjaW5nKSAqIChudW1Sb3dzICsgbnVtQ3JlZ3MpKSArIG9wdGlvbnMudlNwYWNpbmc7XG5cdHZhciBoeWJyaWRXaXJlWSA9ICgob3B0aW9ucy5jZWxsSGVpZ2h0ICsgb3B0aW9ucy52U3BhY2luZykgKiAobnVtUm93cyArIG51bUNyZWdzKSkgKyAob3B0aW9ucy52U3BhY2luZyArIChvcHRpb25zLmNlbGxIZWlnaHQgLyAyKSk7XG5cblx0ZnVuY3Rpb24gcG9sYXJUb0NhcnRlc2lhbihjZW50ZXJYLCBjZW50ZXJZLCByYWRpdXMsIGFuZ2xlSW5EZWdyZWVzKSB7XG5cdFx0dmFyIGFuZ2xlSW5SYWRpYW5zID0gKGFuZ2xlSW5EZWdyZWVzIC0gOTApICogTWF0aC5QSSAvIDE4MC4wO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdFx0eDogY2VudGVyWCArIChyYWRpdXMgKiBNYXRoLmNvcyhhbmdsZUluUmFkaWFucykpLFxuXHRcdFx0XHR5OiBjZW50ZXJZICsgKHJhZGl1cyAqIE1hdGguc2luKGFuZ2xlSW5SYWRpYW5zKSlcblx0XHR9O1xuXHR9XG5cblx0ZnVuY3Rpb24gZGVzY3JpYmVBcmMoeCwgeSwgcmFkaXVzLCBzdGFydEFuZ2xlLCBlbmRBbmdsZSl7XG5cblx0XHR2YXIgc3RhcnQgPSBwb2xhclRvQ2FydGVzaWFuKHgsIHksIHJhZGl1cywgZW5kQW5nbGUpO1xuXHRcdHZhciBlbmQgPSBwb2xhclRvQ2FydGVzaWFuKHgsIHksIHJhZGl1cywgc3RhcnRBbmdsZSk7XG5cblx0XHR2YXIgbGFyZ2VBcmNGbGFnID0gZW5kQW5nbGUgLSBzdGFydEFuZ2xlIDw9IDE4MCA/IFwiMFwiIDogXCIxXCI7XG5cblx0XHR2YXIgZCA9IFtcblx0XHRcdFwiTVwiLCBzdGFydC54LCBzdGFydC55LFxuXHRcdFx0XCJBXCIsIHJhZGl1cywgcmFkaXVzLCAwLCBsYXJnZUFyY0ZsYWcsIDAsIGVuZC54LCBlbmQueVxuXHRcdF0uam9pbihcIiBcIik7XG5cblx0XHRyZXR1cm4gZDtcblx0fVxuXG5cdHZhciBxV2lyZVkgPSBmdW5jdGlvbih3aXJlKSB7XG5cdFx0cmV0dXJuICgob3B0aW9ucy5jZWxsSGVpZ2h0ICsgb3B0aW9ucy52U3BhY2luZykgKiB3aXJlKSArIChvcHRpb25zLnZTcGFjaW5nICsgKG9wdGlvbnMuY2VsbEhlaWdodCAvIDIpKTtcblx0fTtcblxuXHR2YXIgcUdhdGVZID0gZnVuY3Rpb24od2lyZSkge1xuXHRcdHJldHVybiAoKG9wdGlvbnMuY2VsbEhlaWdodCArIG9wdGlvbnMudlNwYWNpbmcpICogd2lyZSkgKyBvcHRpb25zLnZTcGFjaW5nO1xuXHR9O1xuXG5cdHZhciBjV2lyZVkgPSBmdW5jdGlvbihjcmVnTmFtZSkge1xuXHRcdHJldHVybiAoKG9wdGlvbnMuY2VsbEhlaWdodCArIG9wdGlvbnMudlNwYWNpbmcpICogKG51bVJvd3MgKyBnZXRDcmVnSW5kZXgoY3JlZ05hbWUpKSkgKyAob3B0aW9ucy52U3BhY2luZyArIChvcHRpb25zLmNlbGxIZWlnaHQgLyAyKSk7XG5cdH07XG5cblxuXHRmdW5jdGlvbiBnYXRlQm94U1ZHKGdhdGVYLCBnYXRlWSwgZ2F0ZU5hbWUsIGdhdGVMYWJlbCwgc2VsZWN0ZWQpIHtcblxuXHRcdHZhciBnYXRlV2lkdGggPSBvcHRpb25zLmNlbGxXaWR0aDtcblx0XHR2YXIgZ2F0ZUhlaWdodCA9IG9wdGlvbnMuY2VsbEhlaWdodDtcblxuXHRcdHZhciByZXMgPSBcIlwiO1xuXG5cdFx0cmVzICs9IFwiPHJlY3QgY2xhc3M9XFxcInFjLWdhdGUtYm94XFxcIiB4PVxcXCJcIiArIGdhdGVYICsgXCJcXFwiIHk9XFxcIlwiICsgZ2F0ZVkgKyBcIlxcXCIgd2lkdGg9XFxcIlwiICsgZ2F0ZVdpZHRoICsgXCJcXFwiIGhlaWdodD1cXFwiXCIgKyBnYXRlSGVpZ2h0ICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyAoc2VsZWN0ZWQgPyBvcHRpb25zLmdhdGVTZWxlY3RlZExpbmVDb2xvciA6IG9wdGlvbnMuZ2F0ZUxpbmVDb2xvcikgKyBcIlxcXCIgZmlsbD1cXFwid2hpdGVcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblx0XHRpZihnYXRlTGFiZWwpIHtcblx0XHRcdHJlcyArPSBcIjx0ZXh0IGNsYXNzPVxcXCJxYy1nYXRlLWxhYmVsXFxcIiB4PVxcXCJcIiArIChnYXRlWCArIChnYXRlV2lkdGggLyAyKSkgKyBcIlxcXCIgeT1cXFwiXCIgKyAoZ2F0ZVkgKyAoZ2F0ZUhlaWdodCAvIDIpKSArIFwiXFxcIiBkb21pbmFudC1iYXNlbGluZT1cXFwibWlkZGxlXFxcIiB0ZXh0LWFuY2hvcj1cXFwibWlkZGxlXFxcIiBmaWxsPVxcXCJcIiArIChzZWxlY3RlZCA/IG9wdGlvbnMuZ2F0ZVNlbGVjdGVkTGluZUNvbG9yIDogb3B0aW9ucy5nYXRlTGluZUNvbG9yKSArIFwiXFxcIj5cIiArIGdhdGVMYWJlbCArIFwiPC90ZXh0PlwiO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXM7XG5cdH1cblxuXHRmdW5jdGlvbiBnYXRlUmVjdFNWRyhnYXRlWCwgZ2F0ZVksIGdhdGVOYW1lLCBnYXRlTGFiZWwsIHNlbGVjdGVkKSB7XG5cblx0XHR2YXIgZ2F0ZVdpZHRoID0gb3B0aW9ucy5jZWxsV2lkdGggKiAyO1xuXHRcdHZhciBnYXRlSGVpZ2h0ID0gb3B0aW9ucy5jZWxsSGVpZ2h0O1xuXG5cdFx0dmFyIHJlcyA9IFwiXCI7XG5cblx0XHRyZXMgKz0gXCI8cmVjdCBjbGFzcz1cXFwicWMtZ2F0ZS1yZWN0XFxcIiB4PVxcXCJcIiArIGdhdGVYICsgXCJcXFwiIHk9XFxcIlwiICsgZ2F0ZVkgKyBcIlxcXCIgd2lkdGg9XFxcIlwiICsgZ2F0ZVdpZHRoICsgXCJcXFwiIGhlaWdodD1cXFwiXCIgKyBnYXRlSGVpZ2h0ICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyAoc2VsZWN0ZWQgPyBvcHRpb25zLmdhdGVTZWxlY3RlZExpbmVDb2xvciA6IG9wdGlvbnMuZ2F0ZUxpbmVDb2xvcikgKyBcIlxcXCIgZmlsbD1cXFwid2hpdGVcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblx0XHRpZihnYXRlTGFiZWwpIHtcblx0XHRcdHJlcyArPSBcIjx0ZXh0IGNsYXNzPVxcXCJxYy1nYXRlLWxhYmVsXFxcIiB4PVxcXCJcIiArIChnYXRlWCArIChnYXRlV2lkdGggLyAyKSkgKyBcIlxcXCIgeT1cXFwiXCIgKyAoZ2F0ZVkgKyAoZ2F0ZUhlaWdodCAvIDIpKSArIFwiXFxcIiBkb21pbmFudC1iYXNlbGluZT1cXFwibWlkZGxlXFxcIiB0ZXh0LWFuY2hvcj1cXFwibWlkZGxlXFxcIj5cIiArIGdhdGVMYWJlbCArIFwiPC90ZXh0PlwiO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXM7XG5cdH1cblxuXHRmdW5jdGlvbiBnYXRlQ2lyY2xlU1ZHKGNlbGxYLCBjZWxsWSwgZ2F0ZU5hbWUsIGdhdGVMYWJlbCwgc2VsZWN0ZWQpIHtcblx0XHR2YXIgY2VudGVyWCA9IGNlbGxYICsgKG9wdGlvbnMuY2VsbFdpZHRoIC8gMik7XG5cdFx0dmFyIGNlbnRlclkgPSBjZWxsWSArIChvcHRpb25zLmNlbGxIZWlnaHQgLyAyKTtcblxuXHRcdHZhciBnYXRlV2lkdGggPSBvcHRpb25zLmNlbGxXaWR0aCAqIDAuODtcblx0XHR2YXIgZ2F0ZUhlaWdodCA9IG9wdGlvbnMuY2VsbEhlaWdodCAqIDAuODtcblx0XHR2YXIgZ2F0ZVggPSBjZWxsWCArICgob3B0aW9ucy5jZWxsV2lkdGggLSBnYXRlV2lkdGgpIC8gMik7XG5cdFx0dmFyIGdhdGVZID0gY2VsbFkgKyAoKG9wdGlvbnMuY2VsbEhlaWdodCAtIGdhdGVIZWlnaHQpIC8gMik7XG5cblx0XHR2YXIgcmVzID0gXCJcIjtcblxuXHRcdHJlcyArPSBcIjxlbGxpcHNlIGNsYXNzPVxcXCJxYy1nYXRlLW5vdFxcXCIgY3g9XFxcIlwiICsgY2VudGVyWCArIFwiXFxcIiBjeT1cXFwiXCIgKyBjZW50ZXJZICsgXCJcXFwiIHJ4PVxcXCJcIiArIChnYXRlV2lkdGggLyAyKSArIFwiXFxcIiByeT1cXFwiXCIgKyAoZ2F0ZUhlaWdodCAvIDIpICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyAoc2VsZWN0ZWQgPyBvcHRpb25zLmdhdGVTZWxlY3RlZExpbmVDb2xvciA6IG9wdGlvbnMuZ2F0ZUxpbmVDb2xvcikgKyBcIlxcXCIgZmlsbD1cXFwid2hpdGVcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblx0XHRpZihnYXRlTGFiZWwpIHtcblx0XHRcdHJlcyArPSBcIjx0ZXh0IGNsYXNzPVxcXCJxYy1nYXRlLWxhYmVsXFxcIiB4PVxcXCJcIiArIChnYXRlWCArIChnYXRlV2lkdGggLyAyKSkgKyBcIlxcXCIgeT1cXFwiXCIgKyAoZ2F0ZVkgKyAoZ2F0ZUhlaWdodCAvIDIpKSArIFwiXFxcIiBkb21pbmFudC1iYXNlbGluZT1cXFwibWlkZGxlXFxcIiB0ZXh0LWFuY2hvcj1cXFwibWlkZGxlXFxcIj5cIiArIGdhdGVMYWJlbCArIFwiPC90ZXh0PlwiO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXM7XG5cdH1cblxuXHRmdW5jdGlvbiBnYXRlTm90U1ZHKGNlbGxYLCBjZWxsWSwgZ2F0ZU5hbWUsIHNlbGVjdGVkKSB7XG5cdFx0dmFyIGNlbnRlclggPSBjZWxsWCArIChvcHRpb25zLmNlbGxXaWR0aCAvIDIpO1xuXHRcdHZhciBjZW50ZXJZID0gY2VsbFkgKyAob3B0aW9ucy5jZWxsSGVpZ2h0IC8gMik7XG5cblx0XHR2YXIgZ2F0ZVdpZHRoID0gb3B0aW9ucy5jZWxsV2lkdGggKiAwLjg7XG5cdFx0dmFyIGdhdGVIZWlnaHQgPSBvcHRpb25zLmNlbGxIZWlnaHQgKiAwLjg7XG5cdFx0dmFyIGdhdGVYID0gY2VsbFggKyAoKG9wdGlvbnMuY2VsbFdpZHRoIC0gZ2F0ZVdpZHRoKSAvIDIpO1xuXHRcdHZhciBnYXRlWSA9IGNlbGxZICsgKChvcHRpb25zLmNlbGxIZWlnaHQgLSBnYXRlSGVpZ2h0KSAvIDIpO1xuXG5cblx0XHR2YXIgcmVzID0gXCJcIjtcblxuXHRcdHJlcyArPSBcIjxlbGxpcHNlIGNsYXNzPVxcXCJxYy1nYXRlLW5vdFxcXCIgY3g9XFxcIlwiICsgY2VudGVyWCArIFwiXFxcIiBjeT1cXFwiXCIgKyBjZW50ZXJZICsgXCJcXFwiIHJ4PVxcXCJcIiArIChnYXRlV2lkdGggLyAyKSArIFwiXFxcIiByeT1cXFwiXCIgKyAoZ2F0ZUhlaWdodCAvIDIpICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyAoc2VsZWN0ZWQgPyBvcHRpb25zLmdhdGVTZWxlY3RlZExpbmVDb2xvciA6IG9wdGlvbnMuZ2F0ZUxpbmVDb2xvcikgKyBcIlxcXCIgZmlsbD1cXFwid2hpdGVcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblx0XHRyZXMgKz0gXCI8bGluZSBjbGFzcz1cXFwicWMtZ2F0ZS1ub3QtbGluZVxcXCIgeDE9XFxcIlwiICsgY2VudGVyWCArIFwiXFxcIiB4Mj1cXFwiXCIgKyBjZW50ZXJYICsgXCJcXFwiIHkxPVxcXCJcIiArIGdhdGVZICtcIlxcXCIgeTI9XFxcIlwiICsgKGdhdGVZICsgZ2F0ZUhlaWdodCkgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIChzZWxlY3RlZCA/IG9wdGlvbnMuZ2F0ZVNlbGVjdGVkTGluZUNvbG9yIDogb3B0aW9ucy5nYXRlTGluZUNvbG9yKSArIFwiXFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cdFx0cmVzICs9IFwiPGxpbmUgY2xhc3M9XFxcInFjLWdhdGUtbm90LWxpbmVcXFwiIHgxPVxcXCJcIiArIGdhdGVYICsgXCJcXFwiIHgyPVxcXCJcIiArIChnYXRlWCArIGdhdGVXaWR0aCkgKyBcIlxcXCIgeTE9XFxcIlwiICsgY2VudGVyWSArXCJcXFwiIHkyPVxcXCJcIiArIGNlbnRlclkgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIChzZWxlY3RlZCA/IG9wdGlvbnMuZ2F0ZVNlbGVjdGVkTGluZUNvbG9yIDogb3B0aW9ucy5nYXRlTGluZUNvbG9yKSArIFwiXFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cblx0XHRyZXR1cm4gcmVzO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2F0ZUdhdWdlU1ZHKGdhdGVYLCBnYXRlWSwgZ2F0ZU5hbWUsIHNlbGVjdGVkKSB7XG5cdFx0dmFyIGdhdGVXaWR0aCA9IG9wdGlvbnMuY2VsbFdpZHRoO1xuXHRcdHZhciBnYXRlSGVpZ2h0ID0gb3B0aW9ucy5jZWxsSGVpZ2h0O1xuXHRcdHZhciBjZW50ZXJYID0gZ2F0ZVggKyAoZ2F0ZVdpZHRoIC8gMik7XG5cdFx0dmFyIGNlbnRlclkgPSBnYXRlWSArIChnYXRlSGVpZ2h0IC8gMik7XG5cdFx0dmFyIG1vdmVkb3duID0gZ2F0ZUhlaWdodCAvIDU7XG5cblx0XHR2YXIgcmVzID0gXCJcIjtcblxuXHRcdHJlcyArPSBcIjxyZWN0IGNsYXNzPVxcXCJxYy1nYXRlLWJveFxcXCIgeD1cXFwiXCIgKyBnYXRlWCArIFwiXFxcIiB5PVxcXCJcIiArIGdhdGVZICsgXCJcXFwiIHdpZHRoPVxcXCJcIiArIGdhdGVXaWR0aCArIFwiXFxcIiBoZWlnaHQ9XFxcIlwiICsgZ2F0ZUhlaWdodCArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgKHNlbGVjdGVkID8gb3B0aW9ucy5nYXRlU2VsZWN0ZWRMaW5lQ29sb3IgOiBvcHRpb25zLmdhdGVMaW5lQ29sb3IpICsgXCJcXFwiIGZpbGw9XFxcIndoaXRlXFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cdFx0cmVzICs9IFwiPHBhdGggY2xhc3M9XFxcImdjLWdhdGUtZ2F1Z2UtYXJjXFxcIiBkPVxcXCJcIiArIGRlc2NyaWJlQXJjKGNlbnRlclgsIGNlbnRlclkgKyBtb3ZlZG93biwgZ2F0ZVdpZHRoIC8gMi4zLCAzMDAsIDYwKSArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgKHNlbGVjdGVkID8gb3B0aW9ucy5nYXRlU2VsZWN0ZWRMaW5lQ29sb3IgOiBvcHRpb25zLmdhdGVMaW5lQ29sb3IpICsgXCJcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblx0XHRyZXMgKz0gXCI8bGluZSBjbGFzcz1cXFwicWMtZ2F0ZS1nYXVnZS1zY2FsZVxcXCIgeDE9XFxcIlwiICsgY2VudGVyWCArIFwiXFxcIiB4Mj1cXFwiXCIgKyAoKGdhdGVYICsgZ2F0ZVdpZHRoKSAtIG1vdmVkb3duKSArIFwiXFxcIiB5MT1cXFwiXCIgKyAoY2VudGVyWSArIG1vdmVkb3duKSArIFwiXFxcIiB5Mj1cXFwiXCIgKyAoZ2F0ZVkgKyBtb3ZlZG93bikgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIChzZWxlY3RlZCA/IG9wdGlvbnMuZ2F0ZVNlbGVjdGVkTGluZUNvbG9yIDogb3B0aW9ucy5nYXRlTGluZUNvbG9yKSArIFwiXFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cblx0XHRyZXR1cm4gcmVzO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2F0ZVhTVkcoY2VsbFgsIGNlbGxZLCBnYXRlTmFtZSwgc2VsZWN0ZWQpIHtcblx0XHR2YXIgZ2F0ZVdpZHRoID0gb3B0aW9ucy5jZWxsV2lkdGggKiAwLjQ7XG5cdFx0dmFyIGdhdGVIZWlnaHQgPSBvcHRpb25zLmNlbGxIZWlnaHQgKiAwLjQ7XG5cdFx0dmFyIGdhdGVYID0gY2VsbFggKyAoKG9wdGlvbnMuY2VsbFdpZHRoIC0gZ2F0ZVdpZHRoKSAvIDIpO1xuXHRcdHZhciBnYXRlWSA9IGNlbGxZICsgKChvcHRpb25zLmNlbGxIZWlnaHQgLSBnYXRlSGVpZ2h0KSAvIDIpO1xuXG5cdFx0dmFyIHJlcyA9IFwiXCI7XG5cdFx0cmVzICs9IFwiPGxpbmUgY2xhc3M9XFxcInFjLWdhdGUteFxcXCIgeDE9XFxcIlwiICsgZ2F0ZVggKyBcIlxcXCIgeDI9XFxcIlwiICsgKGdhdGVYICsgZ2F0ZVdpZHRoKSArIFwiXFxcIiB5MT1cXFwiXCIgKyBnYXRlWSArXCJcXFwiIHkyPVxcXCJcIiArIChnYXRlWSArIGdhdGVIZWlnaHQpICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyAoc2VsZWN0ZWQgPyBvcHRpb25zLmdhdGVTZWxlY3RlZExpbmVDb2xvciA6IG9wdGlvbnMuZ2F0ZUxpbmVDb2xvcikgKyBcIlxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxXFxcIiAvPlwiO1xuXHRcdHJlcyArPSBcIjxsaW5lIGNsYXNzPVxcXCJxYy1nYXRlLXhcXFwiIHgxPVxcXCJcIiArIGdhdGVYICsgXCJcXFwiIHgyPVxcXCJcIiArIChnYXRlWCArIGdhdGVXaWR0aCkgKyBcIlxcXCIgeTE9XFxcIlwiICsgKGdhdGVZICsgZ2F0ZUhlaWdodCkgK1wiXFxcIiB5Mj1cXFwiXCIgKyBnYXRlWSArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgKHNlbGVjdGVkID8gb3B0aW9ucy5nYXRlU2VsZWN0ZWRMaW5lQ29sb3IgOiBvcHRpb25zLmdhdGVMaW5lQ29sb3IpICsgXCJcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblx0XHRyZXR1cm4gcmVzO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2F0ZURvdFNWRyhjZWxsWCwgY2VsbFksIGdhdGVOYW1lLCBzZWxlY3RlZCkge1xuXHRcdHZhciBnYXRlV2lkdGggPSBvcHRpb25zLmNlbGxXaWR0aDtcblx0XHR2YXIgZ2F0ZUhlaWdodCA9IG9wdGlvbnMuY2VsbEhlaWdodDtcblx0XHR2YXIgY2VudGVyWCA9IGNlbGxYICsgKGdhdGVXaWR0aCAvIDIpO1xuXHRcdHZhciBjZW50ZXJZID0gY2VsbFkgKyAoZ2F0ZUhlaWdodCAvIDIpO1xuXG5cdFx0dmFyIHJlcyA9IFwiXCI7XG5cdFx0cmVzICs9IFwiPGNpcmNsZSBjbGFzcz1cXFwicWMtZ2F0ZS1kb3RcXFwiIGN4PVxcXCJcIiArIGNlbnRlclggKyBcIlxcXCIgY3k9XFxcIlwiICsgY2VudGVyWSArIFwiXFxcIiByPVxcXCJcIiArIG9wdGlvbnMuZG90UmFkaXVzICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyAoc2VsZWN0ZWQgPyBvcHRpb25zLmdhdGVTZWxlY3RlZExpbmVDb2xvciA6IG9wdGlvbnMud2lyZUNvbG9yKSArIFwiXFxcIiBmaWxsPVxcXCJcIiArIChzZWxlY3RlZCA/IG9wdGlvbnMuZ2F0ZVNlbGVjdGVkTGluZUNvbG9yIDogb3B0aW9ucy53aXJlQ29sb3IpICsgXCJcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblx0XHRyZXR1cm4gcmVzO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2F0ZUludmVydGVkRG90U1ZHKGNlbGxYLCBjZWxsWSwgZ2F0ZU5hbWUsIHNlbGVjdGVkKSB7XG5cdFx0dmFyIGdhdGVXaWR0aCA9IG9wdGlvbnMuY2VsbFdpZHRoO1xuXHRcdHZhciBnYXRlSGVpZ2h0ID0gb3B0aW9ucy5jZWxsSGVpZ2h0O1xuXHRcdHZhciBjZW50ZXJYID0gY2VsbFggKyAoZ2F0ZVdpZHRoIC8gMik7XG5cdFx0dmFyIGNlbnRlclkgPSBjZWxsWSArIChnYXRlSGVpZ2h0IC8gMik7XG5cblx0XHR2YXIgcmVzID0gXCJcIjtcblx0XHRyZXMgKz0gXCI8Y2lyY2xlIGNsYXNzPVxcXCJxYy1nYXRlLW5kb3RcXFwiIGN4PVxcXCJcIiArIGNlbnRlclggKyBcIlxcXCIgY3k9XFxcIlwiICsgY2VudGVyWSArIFwiXFxcIiByPVxcXCJcIiArIG9wdGlvbnMuZG90UmFkaXVzICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyAoc2VsZWN0ZWQgPyBvcHRpb25zLmdhdGVTZWxlY3RlZExpbmVDb2xvciA6IG9wdGlvbnMud2lyZUNvbG9yKSArIFwiXFxcIiBmaWxsPVxcXCJ3aGl0ZVxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxXFxcIiAvPlwiO1xuXHRcdHJldHVybiByZXM7XG5cdH1cblxuXHRmdW5jdGlvbiBnYXRlU1ZHKGdhdGVYLCBnYXRlWSwgZ2F0ZU5hbWUsIGdhdGVMYWJlbCwgY29ubmVjdG9yLCBkcmF3Qm94LCBzZWxlY3RlZCkge1xuXHRcdHZhciByZXMgPSBcIlwiO1xuXG5cdFx0aWYoY29ubmVjdG9yICE9IFwiYm94XCIgJiYgZHJhd0JveCkge1xuXHRcdFx0cmVzICs9IGdhdGVCb3hTVkcoZ2F0ZVgsIGdhdGVZLCBnYXRlTmFtZSwgXCJcIiwgc2VsZWN0ZWQpO1xuXHRcdH1cblxuXHRcdHN3aXRjaChjb25uZWN0b3IpIHtcblx0XHRcdGNhc2UgXCJib3hcIjogcmVzICs9IGdhdGVCb3hTVkcoZ2F0ZVgsIGdhdGVZLCBnYXRlTmFtZSwgZ2F0ZUxhYmVsLCBzZWxlY3RlZCk7IGJyZWFrO1xuXHRcdFx0Y2FzZSBcInJlY3RcIjogcmVzICs9IGdhdGVSZWN0U1ZHKGdhdGVYLCBnYXRlWSwgZ2F0ZU5hbWUsIGdhdGVMYWJlbCwgc2VsZWN0ZWQpOyBicmVhaztcblx0XHRcdGNhc2UgXCJjaXJjbGVcIjogcmVzICs9IGdhdGVDaXJjbGVTVkcoZ2F0ZVgsIGdhdGVZLCBnYXRlTmFtZSwgZ2F0ZUxhYmVsLCBzZWxlY3RlZCk7IGJyZWFrO1xuXHRcdFx0Y2FzZSBcIm5vdFwiOiByZXMgKz0gZ2F0ZU5vdFNWRyhnYXRlWCwgZ2F0ZVksIGdhdGVOYW1lLCBzZWxlY3RlZCk7IGJyZWFrO1xuXHRcdFx0Y2FzZSBcInhcIjogcmVzICs9IGdhdGVYU1ZHKGdhdGVYLCBnYXRlWSwgZ2F0ZU5hbWUsIHNlbGVjdGVkKTsgYnJlYWs7XG5cdFx0XHRjYXNlIFwiZG90XCI6IHJlcyArPSBnYXRlRG90U1ZHKGdhdGVYLCBnYXRlWSwgZ2F0ZU5hbWUsIHNlbGVjdGVkKTsgYnJlYWs7XG5cdFx0XHRjYXNlIFwibmRvdFwiOiByZXMgKz0gZ2F0ZUludmVydGVkRG90U1ZHKGdhdGVYLCBnYXRlWSwgZ2F0ZU5hbWUsIHNlbGVjdGVkKTsgYnJlYWs7XG5cdFx0XHRjYXNlIFwiZ2F1Z2VcIjogcmVzICs9IGdhdGVHYXVnZVNWRyhnYXRlWCwgZ2F0ZVksIGdhdGVOYW1lLCBzZWxlY3RlZCk7IGJyZWFrO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXM7XG5cdH1cblxuXG5cdGZ1bmN0aW9uIGRyYXdHYXRlKGdhdGUsIGNvbEluZGV4LCByb3dJbmRleCkge1xuXHRcdHZhciBkaW5mbyA9IHNlbGYuYmFzaWNHYXRlc1tnYXRlLm5hbWVdID8gc2VsZi5iYXNpY0dhdGVzW2dhdGUubmFtZV0uZHJhd2luZ0luZm8gOiBudWxsO1xuXHRcdGlmKCFkaW5mbykge1xuXHRcdFx0ZGluZm8gPSBzZWxmLmN1c3RvbUdhdGVzW2dhdGUubmFtZV0gPyBzZWxmLmN1c3RvbUdhdGVzW2dhdGUubmFtZV0uZHJhd2luZ0luZm8gOiBudWxsO1xuXHRcdH1cblxuXHRcdHZhciBibGFja2JveCA9IGZhbHNlO1xuXHRcdHZhciBzZWxlY3RlZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5zZWxlY3Rpb24gJiYgb3B0aW9ucy5zZWxlY3Rpb24uaW5kZXhPZihnYXRlLmlkKSA+PSAwO1xuXHRcdGlmKCFkaW5mbykge1xuXHRcdFx0aWYoZ2F0ZS53aXJlcy5sZW5ndGggPT0gMSkge1xuXHRcdFx0XHRkaW5mbyA9IHsgY29ubmVjdG9yczogW1wiYm94XCJdIH07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkaW5mbyA9IHsgY29ubmVjdG9yczogW10gfTtcblx0XHRcdFx0YmxhY2tib3ggPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR3aGlsZShkaW5mby5jb25uZWN0b3JzLmxlbmd0aCA8IGdhdGUud2lyZXMubGVuZ3RoKSB7XG5cdFx0XHRkaW5mby5jb25uZWN0b3JzLnB1c2goXCJib3hcIik7XG5cdFx0fVxuXG5cdFx0dmFyIHRvcFdpcmUgPSBNYXRoLm1pbi5hcHBseShudWxsLCBnYXRlLndpcmVzKTtcblx0XHR2YXIgYm90dG9tV2lyZSA9IE1hdGgubWF4LmFwcGx5KG51bGwsIGdhdGUud2lyZXMpO1xuXHRcdHZhciBjTGlua1RvcFkgPSBjV2lyZVkoYm90dG9tV2lyZSk7XG5cblx0XHR2YXIgc3ZnID0gXCJcIjtcblx0XHRzdmcgKz0gXCI8ZyBjbGFzcz1cXFwicWMtZ2F0ZS1ncm91cFxcXCIgZGF0YS1pZD1cXFwiXCIgKyBnYXRlLmlkICsgXCJcXFwiIGRhdGEtZ2F0ZT1cXFwiXCIgKyBnYXRlLm5hbWUgKyBcIlxcXCI+XCI7XG5cdFx0aWYoYmxhY2tib3gpIHtcblx0XHRcdHZhciBnYXRlWCA9IGdldENlbGxYKGNvbEluZGV4KSAtIG9wdGlvbnMuYmxhY2tib3hQYWRkaW5nWDtcblx0XHRcdHZhciBnYXRlWSA9IHFHYXRlWSh0b3BXaXJlKSAtIG9wdGlvbnMuYmxhY2tib3hQYWRkaW5nWTtcblx0XHRcdHZhciBnYXRlV2lkdGggPSBvcHRpb25zLmNlbGxXaWR0aCArICgyICogb3B0aW9ucy5ibGFja2JveFBhZGRpbmdYKTtcblx0XHRcdHZhciBnYXRlSGVpZ2h0ID0gKChxR2F0ZVkoYm90dG9tV2lyZSkgKyBvcHRpb25zLmNlbGxIZWlnaHQpIC0gZ2F0ZVkpICsgb3B0aW9ucy5ibGFja2JveFBhZGRpbmdZO1xuXG5cdFx0XHR2YXIgY2VudGVyWCA9IGdhdGVYICsgKGdhdGVXaWR0aCAvIDIpO1xuXG5cdFx0XHRjTGlua1RvcFkgPSBnYXRlWSArIGdhdGVIZWlnaHQ7XG5cblx0XHRcdHN2ZyArPSBcIjx0ZXh0IGNsYXNzPVxcXCJxYy1ibGFja2JveC1sYWJlbFxcXCIgeD1cXFwiXCIgKyBjZW50ZXJYICsgXCJcXFwiIHk9XFxcIlwiICsgKGdhdGVZIC0gb3B0aW9ucy53aXJlVGV4dEhlaWdodCAtIChvcHRpb25zLmJsYWNrYm94UGFkZGluZ1kgKiAyKSkgKyBcIlxcXCIgZG9taW5hbnQtYmFzZWxpbmU9XFxcImhhbmdpbmdcXFwiIHRleHQtYW5jaG9yPVxcXCJtaWRkbGVcXFwiIGZvbnQtc2l6ZT1cXFwiNzUlXFxcIj5cIiArIChkaW5mby5sYWJlbCB8fCBnYXRlLm5hbWUpICsgXCI8L3RleHQ+XCI7XG5cdFx0XHRzdmcgKz0gXCI8cmVjdCBjbGFzcz1cXFwicWMtZ2F0ZS1ibGFja2JveFxcXCIgeD1cXFwiXCIgKyBnYXRlWCArIFwiXFxcIiB5PVxcXCJcIiArIGdhdGVZICsgXCJcXFwiIHdpZHRoPVxcXCJcIiArIGdhdGVXaWR0aCArIFwiXFxcIiBoZWlnaHQ9XFxcIlwiICsgZ2F0ZUhlaWdodCArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgKHNlbGVjdGVkID8gb3B0aW9ucy5ibGFja2JveFNlbGVjdGVkTGluZUNvbG9yIDogb3B0aW9ucy5ibGFja2JveExpbmVDb2xvcikgKyBcIlxcXCIgZmlsbD1cXFwidHJhbnNwYXJlbnRcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblx0XHR9XG5cblx0XHRpZihzZWxlY3RlZCkge1xuXHRcdFx0dmFyIGdhdGVYID0gZ2V0Q2VsbFgoY29sSW5kZXgpIC0gb3B0aW9ucy5zZWxlY3Rpb25QYWRkaW5nWDtcblx0XHRcdHZhciBnYXRlWSA9IHFHYXRlWSh0b3BXaXJlKSAtIG9wdGlvbnMuc2VsZWN0aW9uUGFkZGluZ1k7XG5cdFx0XHR2YXIgZ2F0ZVdpZHRoID0gb3B0aW9ucy5jZWxsV2lkdGggKyAoMiAqIG9wdGlvbnMuc2VsZWN0aW9uUGFkZGluZ1gpO1xuXHRcdFx0dmFyIGdhdGVIZWlnaHQgPSAoKHFHYXRlWShib3R0b21XaXJlKSArIG9wdGlvbnMuY2VsbEhlaWdodCkgLSBnYXRlWSkgKyBvcHRpb25zLnNlbGVjdGlvblBhZGRpbmdZO1xuXG5cdFx0XHR2YXIgY2VudGVyWCA9IGdhdGVYICsgKGdhdGVXaWR0aCAvIDIpO1xuXG5cdFx0XHRjTGlua1RvcFkgPSBnYXRlWSArIGdhdGVIZWlnaHQ7XG5cblx0XHRcdHN2ZyArPSBcIjxyZWN0IGNsYXNzPVxcXCJxYy1nYXRlLXNlbGVjdGlvblxcXCIgeD1cXFwiXCIgKyBnYXRlWCArIFwiXFxcIiB5PVxcXCJcIiArIGdhdGVZICsgXCJcXFwiIHdpZHRoPVxcXCJcIiArIGdhdGVXaWR0aCArIFwiXFxcIiBoZWlnaHQ9XFxcIlwiICsgZ2F0ZUhlaWdodCArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgb3B0aW9ucy5zZWxlY3Rpb25MaW5lQ29sb3IgKyBcIlxcXCIgZmlsbD1cXFwidHJhbnNwYXJlbnRcXFwiIHN0cm9rZS1kYXNoYXJyYXk9XFxcIjRcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblx0XHR9XG5cblx0XHQvLyBsaW5rXG5cdFx0aWYodG9wV2lyZSAhPSBib3R0b21XaXJlICYmICFibGFja2JveCkge1xuXHRcdFx0dmFyIGxpbmtYID0gZ2V0Q2VsbFgoY29sSW5kZXgpICsgKG9wdGlvbnMuY2VsbFdpZHRoIC8gMik7XG5cdFx0XHR2YXIgbGlua1kxID0gZ2V0Q2VsbFkodG9wV2lyZSkgKyAob3B0aW9ucy5jZWxsSGVpZ2h0IC8gMik7XG5cdFx0XHR2YXIgbGlua1kyID0gZ2V0Q2VsbFkoYm90dG9tV2lyZSkgKyAob3B0aW9ucy5jZWxsSGVpZ2h0IC8gMik7XG5cdFx0XHRzdmcgKz0gXCI8bGluZSBjbGFzcz1cXFwicWMtZ2F0ZS1saW5rXFxcIiB4MT1cXFwiXCIgKyBsaW5rWCArIFwiXFxcIiB4Mj1cXFwiXCIgKyBsaW5rWCArIFwiXFxcIiB5MT1cXFwiXCIgKyBsaW5rWTEgK1wiXFxcIiB5Mj1cXFwiXCIgKyBsaW5rWTIgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIChzZWxlY3RlZCA/IG9wdGlvbnMuZ2F0ZVNlbGVjdGVkTGluZUNvbG9yIDogb3B0aW9ucy53aXJlQ29sb3IpICsgXCJcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblx0XHR9XG5cblx0XHQvLyBjb25uZWN0b3JzXG5cdFx0dmFyIG1heFdpcmUgPSBNYXRoLm1heC5hcHBseShudWxsLCBnYXRlLndpcmVzKTtcblx0XHRnYXRlLndpcmVzLm1hcChmdW5jdGlvbih3aXJlLCBjb25uZWN0b3IpIHtcblxuXHRcdFx0c3dpdGNoKGRpbmZvLmNvbm5lY3RvcnNbY29ubmVjdG9yXSkge1xuXHRcdFx0XHRjYXNlIFwiYm94XCI6IHtcblx0XHRcdFx0XHR2YXIgZ2F0ZVggPSBnZXRDZWxsWChjb2xJbmRleCk7XG5cdFx0XHRcdFx0dmFyIGdhdGVZID0gZ2V0Q2VsbFkod2lyZSk7XG5cblx0XHRcdFx0XHRzdmcgPSBzdmcgKyBnYXRlQm94U1ZHKGdhdGVYLCBnYXRlWSwgZ2F0ZS5uYW1lLCAoYmxhY2tib3ggPyBxdWJpdExldHRlcihjb25uZWN0b3IsIG51bVJvd3MpIDogKGRpbmZvLmxhYmVsIHx8IGdhdGUubmFtZSkpLCBzZWxlY3RlZCk7XG5cblx0XHRcdFx0XHRpZighYmxhY2tib3ggJiYgd2lyZSA9PSBib3R0b21XaXJlKSB7XG5cdFx0XHRcdFx0XHRjTGlua1RvcFkgPSBnYXRlWSArIG9wdGlvbnMuY2VsbEhlaWdodDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07IGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgXCJjaXJjbGVcIjoge1xuXHRcdFx0XHRcdHZhciBnYXRlWCA9IGdldENlbGxYKGNvbEluZGV4KTtcblx0XHRcdFx0XHR2YXIgZ2F0ZVkgPSBnZXRDZWxsWSh3aXJlKTtcblxuXHRcdFx0XHRcdHN2ZyA9IHN2ZyArIGdhdGVDaXJjbGVTVkcoZ2F0ZVgsIGdhdGVZLCBnYXRlLm5hbWUsIChibGFja2JveCA/IHF1Yml0TGV0dGVyKGNvbm5lY3RvciwgbnVtUm93cykgOiAoZGluZm8ubGFiZWwgfHwgZ2F0ZS5uYW1lKSksIHNlbGVjdGVkKTtcblxuXHRcdFx0XHRcdGlmKCFibGFja2JveCAmJiB3aXJlID09IGJvdHRvbVdpcmUpIHtcblx0XHRcdFx0XHRcdHZhciBnYXRlSGVpZ2h0ID0gKG9wdGlvbnMuY2VsbEhlaWdodCAqIDAuOCk7XG5cdFx0XHRcdFx0XHRjTGlua1RvcFkgPSBnYXRlWSArIGdhdGVIZWlnaHQgKyAoKG9wdGlvbnMuY2VsbEhlaWdodCAtIGdhdGVIZWlnaHQpIC8gMik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9OyBicmVhaztcblxuXHRcdFx0XHRjYXNlIFwibm90XCI6IHtcblx0XHRcdFx0XHR2YXIgY2VsbFggPSBnZXRDZWxsWChjb2xJbmRleCk7XG5cdFx0XHRcdFx0dmFyIGNlbGxZID0gZ2V0Q2VsbFkod2lyZSk7XG5cblx0XHRcdFx0XHRzdmcgPSBzdmcgKyBnYXRlTm90U1ZHKGNlbGxYLCBjZWxsWSwgZ2F0ZS5uYW1lLCBzZWxlY3RlZCk7XG5cblx0XHRcdFx0XHRpZighYmxhY2tib3ggJiYgd2lyZSA9PSBib3R0b21XaXJlKSB7XG5cdFx0XHRcdFx0XHR2YXIgZ2F0ZUhlaWdodCA9IChvcHRpb25zLmNlbGxIZWlnaHQgKiAwLjgpO1xuXHRcdFx0XHRcdFx0Y0xpbmtUb3BZID0gY2VsbFkgKyBnYXRlSGVpZ2h0ICsgKChvcHRpb25zLmNlbGxIZWlnaHQgLSBnYXRlSGVpZ2h0KSAvIDIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTsgYnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBcInhcIjoge1xuXHRcdFx0XHRcdHZhciBjZWxsWCA9IGdldENlbGxYKGNvbEluZGV4KTtcblx0XHRcdFx0XHR2YXIgY2VsbFkgPSBnZXRDZWxsWSh3aXJlKTtcblxuXHRcdFx0XHRcdHN2ZyA9IHN2ZyArIGdhdGVYU1ZHKGNlbGxYLCBjZWxsWSwgZ2F0ZS5uYW1lLCBzZWxlY3RlZCk7XG5cblx0XHRcdFx0XHRpZighYmxhY2tib3ggJiYgd2lyZSA9PSBib3R0b21XaXJlKSB7XG5cdFx0XHRcdFx0XHRjTGlua1RvcFkgPSBxV2lyZVkoYm90dG9tV2lyZSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH07IGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgXCJkb3RcIjoge1xuXHRcdFx0XHRcdHZhciBjZWxsWCA9IGdldENlbGxYKGNvbEluZGV4KTtcblx0XHRcdFx0XHR2YXIgY2VsbFkgPSBnZXRDZWxsWSh3aXJlKTtcblxuXHRcdFx0XHRcdHN2ZyA9IHN2ZyArIGdhdGVEb3RTVkcoY2VsbFgsIGNlbGxZLCBnYXRlLm5hbWUsIHNlbGVjdGVkKTtcblxuXHRcdFx0XHRcdGlmKCFibGFja2JveCAmJiB3aXJlID09IGJvdHRvbVdpcmUpIHtcblx0XHRcdFx0XHRcdGNMaW5rVG9wWSA9IHFXaXJlWShib3R0b21XaXJlKSArIG9wdGlvbnMuZG90UmFkaXVzO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTsgYnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBcIm5kb3RcIjoge1xuXHRcdFx0XHRcdHZhciBjZWxsWCA9IGdldENlbGxYKGNvbEluZGV4KTtcblx0XHRcdFx0XHR2YXIgY2VsbFkgPSBnZXRDZWxsWSh3aXJlKTtcblxuXHRcdFx0XHRcdHN2ZyA9IHN2ZyArIGdhdGVJbnZlcnRlZERvdFNWRyhjZWxsWCwgY2VsbFksIGdhdGUubmFtZSwgc2VsZWN0ZWQpO1xuXG5cdFx0XHRcdFx0aWYoIWJsYWNrYm94ICYmIHdpcmUgPT0gYm90dG9tV2lyZSkge1xuXHRcdFx0XHRcdFx0Y0xpbmtUb3BZID0gcVdpcmVZKGJvdHRvbVdpcmUpICsgb3B0aW9ucy5kb3RSYWRpdXM7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9OyBicmVhaztcblxuXHRcdFx0XHRjYXNlIFwiZ2F1Z2VcIjoge1xuXHRcdFx0XHRcdHZhciBnYXRlWCA9IGdldENlbGxYKGNvbEluZGV4KTtcblx0XHRcdFx0XHR2YXIgZ2F0ZVkgPSBnZXRDZWxsWSh3aXJlKTtcblxuXHRcdFx0XHRcdHN2ZyA9IHN2ZyArIGdhdGVHYXVnZVNWRyhnYXRlWCwgZ2F0ZVksIGdhdGUubmFtZSwgc2VsZWN0ZWQpO1xuXG5cdFx0XHRcdFx0aWYoIWJsYWNrYm94ICYmIHdpcmUgPT0gYm90dG9tV2lyZSkge1xuXHRcdFx0XHRcdFx0Y0xpbmtUb3BZID0gZ2F0ZVkgKyBvcHRpb25zLmNlbGxIZWlnaHQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9OyBicmVhaztcblx0XHRcdH1cblxuXHRcdFx0Ly8gcGFyYW1zXG5cdFx0XHRpZihnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLnBhcmFtcyAmJiB3aXJlID09IG1heFdpcmUpIHtcblx0XHRcdFx0dmFyIGdhdGVYID0gZ2V0Q2VsbFgoY29sSW5kZXgpO1xuXHRcdFx0XHR2YXIgZ2F0ZVkgPSBnZXRDZWxsWSh3aXJlKTtcblx0XHRcdFx0dmFyIGNlbnRlclggPSBnYXRlWCArIChvcHRpb25zLmNlbGxXaWR0aCAvIDIpO1xuXG5cdFx0XHRcdHZhciBwYXJhbXNTdHIgPSBcIlwiO1xuXHRcdFx0XHR2YXIgcGFyYW1zQ291bnQgPSAwO1xuXHRcdFx0XHRmb3IodmFyIHBhcmFtTmFtZSBpbiBnYXRlLm9wdGlvbnMucGFyYW1zKSB7XG5cdFx0XHRcdFx0aWYocGFyYW1zU3RyKSB7XG5cdFx0XHRcdFx0XHRwYXJhbXNTdHIgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHZhciBwYXJhbVZhbCA9IGdhdGUub3B0aW9ucy5wYXJhbXNbcGFyYW1OYW1lXTtcblx0XHRcdFx0XHRpZih0eXBlb2YgcGFyYW1WYWwgPT0gXCJzdHJpbmdcIiAmJiBwYXJhbVZhbC5tYXRjaCgvXltcXCtcXC1dP1xcZCpcXC4/XFxkKyg/OltFZV1bXFwrXFwtXT9cXGQrKT8kLykpIHtcblx0XHRcdFx0XHRcdHBhcmFtVmFsID0gcGFyc2VGbG9hdChwYXJhbVZhbCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYodHlwZW9mIHBhcmFtVmFsID09IFwibnVtYmVyXCIpIHtcblx0XHRcdFx0XHRcdHBhcmFtVmFsID0gbWF0aC5yb3VuZChwYXJhbVZhbCwgMyk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cGFyYW1zU3RyICs9IHBhcmFtVmFsO1xuXHRcdFx0XHRcdHBhcmFtc0NvdW50Kys7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZihwYXJhbXNTdHIubGVuZ3RoID4gMjYpIHtcblx0XHRcdFx0XHRwYXJhbXNTdHIgPSBcIihcIiArIHBhcmFtc0NvdW50ICsgXCIgcGFyYW1zKVwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHN2ZyArPSBcIjx0ZXh0IGNsYXNzPVxcXCJxYy1nYXRlLXBhcmFtc1xcXCIgeD1cXFwiXCIgKyBjZW50ZXJYICsgXCJcXFwiIHk9XFxcIlwiICsgKGdhdGVZICsgb3B0aW9ucy5jZWxsSGVpZ2h0ICsgb3B0aW9ucy5wYXJhbVRleHRIZWlnaHQpICsgXCJcXFwiIGRvbWluYW50LWJhc2VsaW5lPVxcXCJoYW5naW5nXFxcIiB0ZXh0LWFuY2hvcj1cXFwibWlkZGxlXFxcIiBmb250LXNpemU9XFxcIjc1JVxcXCI+XCIgKyBwYXJhbXNTdHIgKyBcIjwvdGV4dD5cIjtcblx0XHRcdH1cblxuXHRcdH0pO1xuXG5cdFx0Ly8gbWVhc3VyZVxuXHRcdGlmKGdhdGUubmFtZSA9PSBcIm1lYXN1cmVcIiAmJiBnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNyZWcgJiYgZ2F0ZS5vcHRpb25zLmNyZWcubmFtZSkge1xuXHRcdFx0dmFyIGxpbmtYID0gZ2V0Q2VsbFgoY29sSW5kZXgpICsgKG9wdGlvbnMuY2VsbFdpZHRoIC8gMik7XG5cdFx0XHR2YXIgbGlua1kxID0gY0xpbmtUb3BZO1xuXHRcdFx0dmFyIGxpbmtZMiA9IGNXaXJlWShnYXRlLm9wdGlvbnMuY3JlZy5uYW1lKTtcblxuXHRcdFx0c3ZnICs9IFwiPGxpbmUgY2xhc3M9XFxcInFjLWdhdGUtbGluay1jXFxcIiB4MT1cXFwiXCIgKyBsaW5rWCArIFwiXFxcIiB4Mj1cXFwiXCIgKyBsaW5rWCArIFwiXFxcIiB5MT1cXFwiXCIgKyBsaW5rWTEgK1wiXFxcIiB5Mj1cXFwiXCIgKyBsaW5rWTIgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIChzZWxlY3RlZCA/IG9wdGlvbnMuY1dpcmVTZWxlY3RlZENvbG9yIDogb3B0aW9ucy5jV2lyZUNvbG9yKSArIFwiXFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cblx0XHRcdHN2ZyArPSBcIjxsaW5lIGNsYXNzPVxcXCJxYy1nYXRlLWxpbmstY1xcXCIgeDI9XFxcIlwiICsgbGlua1ggKyBcIlxcXCIgeDE9XFxcIlwiICsgKGxpbmtYIC0gKG9wdGlvbnMuY0Fycm93U2l6ZSAvIDIpKSArIFwiXFxcIiB5MT1cXFwiXCIgKyAobGlua1kyIC0gb3B0aW9ucy5jQXJyb3dTaXplKSArXCJcXFwiIHkyPVxcXCJcIiArIGxpbmtZMiArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgKHNlbGVjdGVkID8gb3B0aW9ucy5jV2lyZVNlbGVjdGVkQ29sb3IgOiBvcHRpb25zLmNXaXJlQ29sb3IpICsgXCJcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblx0XHRcdHN2ZyArPSBcIjxsaW5lIGNsYXNzPVxcXCJxYy1nYXRlLWxpbmstY1xcXCIgeDI9XFxcIlwiICsgbGlua1ggKyBcIlxcXCIgeDE9XFxcIlwiICsgKGxpbmtYICsgKG9wdGlvbnMuY0Fycm93U2l6ZSAvIDIpKSArIFwiXFxcIiB5MT1cXFwiXCIgKyAobGlua1kyIC0gb3B0aW9ucy5jQXJyb3dTaXplKSArXCJcXFwiIHkyPVxcXCJcIiArIGxpbmtZMiArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgKHNlbGVjdGVkID8gb3B0aW9ucy5jV2lyZVNlbGVjdGVkQ29sb3IgOiBvcHRpb25zLmNXaXJlQ29sb3IpICsgXCJcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblxuXHRcdFx0c3ZnICs9IFwiPHRleHQgY2xhc3M9XFxcInFjLXdpcmUtbGFiZWxcXFwiIHg9XFxcIlwiICsgbGlua1ggKyBcIlxcXCIgeT1cXFwiXCIgKyAobGlua1kyICsgb3B0aW9ucy53aXJlVGV4dEhlaWdodCkgKyBcIlxcXCIgZG9taW5hbnQtYmFzZWxpbmU9XFxcImhhbmdpbmdcXFwiIHRleHQtYW5jaG9yPVxcXCJtaWRkbGVcXFwiIGZvbnQtc2l6ZT1cXFwiNzUlXFxcIj5cIiArIGdhdGUub3B0aW9ucy5jcmVnLmJpdCArIFwiPC90ZXh0PlwiO1xuXHRcdH1cblxuXHRcdC8vIGNvbnRyb2xsZWQgYnkgY2xhc3NpYyByZWdpc3RlclxuXHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZykge1xuXHRcdFx0dmFyIGxpbmtYID0gZ2V0Q2VsbFgoY29sSW5kZXgpICsgKG9wdGlvbnMuY2VsbFdpZHRoIC8gMik7XG5cdFx0XHR2YXIgbGlua1kxID0gY0xpbmtUb3BZO1xuXHRcdFx0dmFyIGxpbmtZMiA9IGNXaXJlWShnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcpO1xuXG5cdFx0XHRzdmcgKz0gXCI8bGluZSBjbGFzcz1cXFwicWMtZ2F0ZS1saW5rLWNcXFwiIHgxPVxcXCJcIiArIGxpbmtYICsgXCJcXFwiIHgyPVxcXCJcIiArIGxpbmtYICsgXCJcXFwiIHkxPVxcXCJcIiArIGxpbmtZMSArXCJcXFwiIHkyPVxcXCJcIiArIGxpbmtZMiArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgKHNlbGVjdGVkID8gb3B0aW9ucy5jV2lyZVNlbGVjdGVkQ29sb3IgOiBvcHRpb25zLmNXaXJlQ29sb3IpICsgXCJcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblxuXHRcdFx0c3ZnICs9IFwiPGNpcmNsZSBjbGFzcz1cXFwicWMtZ2F0ZS1kb3QtY1xcXCIgY3g9XFxcIlwiICsgbGlua1ggKyBcIlxcXCIgY3k9XFxcIlwiICsgbGlua1kyICsgXCJcXFwiIHI9XFxcIlwiICsgb3B0aW9ucy5kb3RSYWRpdXMgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIChzZWxlY3RlZCA/IG9wdGlvbnMuY1dpcmVTZWxlY3RlZENvbG9yIDogb3B0aW9ucy5jV2lyZUNvbG9yKSArIFwiXFxcIiBmaWxsPVxcXCJcIiArIChzZWxlY3RlZCA/IG9wdGlvbnMuY1dpcmVTZWxlY3RlZENvbG9yIDogb3B0aW9ucy5jV2lyZUNvbG9yKSArIFwiXFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cblx0XHRcdHN2ZyArPSBcIjx0ZXh0IGNsYXNzPVxcXCJxYy13aXJlLWxhYmVsXFxcIiB4PVxcXCJcIiArIGxpbmtYICsgXCJcXFwiIHk9XFxcIlwiICsgKGxpbmtZMiArIG9wdGlvbnMud2lyZVRleHRIZWlnaHQpICsgXCJcXFwiIGRvbWluYW50LWJhc2VsaW5lPVxcXCJoYW5naW5nXFxcIiB0ZXh0LWFuY2hvcj1cXFwibWlkZGxlXFxcIiBmb250LXNpemU9XFxcIjc1JVxcXCI+PT0gXCIgKyBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLnZhbHVlICsgXCI8L3RleHQ+XCI7XG5cdFx0fVxuXG5cdFx0c3ZnICs9IFwiPC9nPlwiO1xuXG5cdFx0cmV0dXJuIHN2Zztcblx0fVxuXG5cdGZ1bmN0aW9uIGRyYXdHYXRlUGxhY2Vob2xkZXIoY29sSW5kZXgsIHdpcmUpIHtcblx0XHR2YXIgc3ZnID0gXCJcIjtcblxuXHRcdHZhciBnYXRlV2lkdGggPSBvcHRpb25zLmNlbGxXaWR0aCArIG9wdGlvbnMuaFNwYWNpbmc7XG5cdFx0dmFyIGdhdGVIZWlnaHQgPSBvcHRpb25zLmNlbGxIZWlnaHQgKyBvcHRpb25zLnZTcGFjaW5nO1xuXHRcdHZhciBnYXRlWCA9IGdldENlbGxYKGNvbEluZGV4KSAtIG9wdGlvbnMuaFNwYWNpbmc7XG5cdFx0dmFyIGdhdGVZID0gZ2V0Q2VsbFkod2lyZSkgLSBvcHRpb25zLnZTcGFjaW5nO1xuXG5cdFx0aWYod2lyZSA9PSBudW1Sb3dzKSB7XG5cdFx0XHRnYXRlSGVpZ2h0ID0gb3B0aW9ucy52U3BhY2luZztcblx0XHR9XG5cblx0XHRpZihjb2xJbmRleCA9PSBudW1Db2xzKSB7XG5cdFx0XHRnYXRlV2lkdGggPSBvcHRpb25zLmhTcGFjaW5nO1xuXHRcdH1cblxuXHRcdHN2ZyArPSBcIjxyZWN0IGNsYXNzPVxcXCJxYy1nYXRlLXBsYWNlaG9sZGVyXFxcIiBkYXRhLXJvdz1cXFwiXCIgKyB3aXJlICsgXCJcXFwiIGRhdGEtY29sPVxcXCJcIiArIGNvbEluZGV4ICsgXCJcXFwiIHg9XFxcIlwiICsgZ2F0ZVggKyBcIlxcXCIgeT1cXFwiXCIgKyBnYXRlWSArIFwiXFxcIiB3aWR0aD1cXFwiXCIgKyBnYXRlV2lkdGggKyBcIlxcXCIgaGVpZ2h0PVxcXCJcIiArIGdhdGVIZWlnaHQgKyBcIlxcXCIgc3Ryb2tlPVxcXCJub25lXFxcIiBmaWxsPVxcXCJ0cmFuc3BhcmVudFxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIwXFxcIiAvPlwiO1xuXG5cdFx0cmV0dXJuIHN2Zztcblx0fVxuXG5cdGZ1bmN0aW9uIGRyYXdHYXRlSGFuZGxlKGdhdGUsIGNvbEluZGV4LCB3aXJlKSB7XG5cdFx0dmFyIHN2ZyA9IFwiXCI7XG5cblx0XHR2YXIgZ2F0ZVdpZHRoID0gb3B0aW9ucy5jZWxsV2lkdGg7XG5cdFx0dmFyIGdhdGVIZWlnaHQgPSBvcHRpb25zLmNlbGxIZWlnaHQ7XG5cdFx0dmFyIGdhdGVYID0gZ2V0Q2VsbFgoY29sSW5kZXgpO1xuXHRcdHZhciBnYXRlWSA9IGdldENlbGxZKHdpcmUpO1xuXG5cdFx0c3ZnICs9IFwiPHJlY3QgY2xhc3M9XFxcInFjLWdhdGUtaGFuZGxlXFxcIiBkYXRhLWlkPVxcXCJcIiArIGdhdGUuaWQgKyBcIlxcXCIgZGF0YS1nYXRlPVxcXCJcIiArIGdhdGUubmFtZSArIFwiXFxcIiBkYXRhLXJvdz1cXFwiXCIgKyB3aXJlICsgXCJcXFwiIGRhdGEtY29sPVxcXCJcIiArIGNvbEluZGV4ICsgXCJcXFwiIHg9XFxcIlwiICsgZ2F0ZVggKyBcIlxcXCIgeT1cXFwiXCIgKyBnYXRlWSArIFwiXFxcIiB3aWR0aD1cXFwiXCIgKyBnYXRlV2lkdGggKyBcIlxcXCIgaGVpZ2h0PVxcXCJcIiArIGdhdGVIZWlnaHQgKyBcIlxcXCIgc3Ryb2tlPVxcXCJub25lXFxcIiBmaWxsPVxcXCJ0cmFuc3BhcmVudFxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIwXFxcIiAvPlwiO1xuXG5cdFx0cmV0dXJuIHN2Zztcblx0fVxuXG5cdGZ1bmN0aW9uIGRyYXdHYXRlQ2FudmFzKGNvbEluZGV4LCB3aXJlLCBjbGFzc05hbWUsIGNhbnZhc0lkKSB7XG5cdFx0dmFyIHN2ZyA9IFwiXCI7XG5cblx0XHR2YXIgZ2F0ZVdpZHRoID0gb3B0aW9ucy5jZWxsV2lkdGg7XG5cdFx0dmFyIGdhdGVIZWlnaHQgPSBvcHRpb25zLmNlbGxIZWlnaHQ7XG5cdFx0dmFyIGdhdGVYID0gZ2V0Q2VsbFgoY29sSW5kZXgpO1xuXHRcdHZhciBnYXRlWSA9IGdldENlbGxZKHdpcmUpO1xuXG5cblx0XHRzdmcgKz0gXCI8ZyBjbGFzcz1cXFwiXCIgKyAoY2xhc3NOYW1lIHx8IFwicWMtY2FudmFzLWdyb3VwXCIpICsgXCJcXFwiIGRhdGEtcm93PVxcXCJcIiArIHdpcmUgKyBcIlxcXCI+XCI7XG5cdFx0c3ZnICs9IFwiPHJlY3QgY2xhc3M9XFxcInFjLWNhbnZhcy1ib3hcXFwiIHg9XFxcIlwiICsgZ2F0ZVggKyBcIlxcXCIgeT1cXFwiXCIgKyBnYXRlWSArIFwiXFxcIiB3aWR0aD1cXFwiXCIgKyBnYXRlV2lkdGggKyBcIlxcXCIgaGVpZ2h0PVxcXCJcIiArIGdhdGVIZWlnaHQgKyBcIlxcXCIgc3Ryb2tlPVxcXCJ0cmFuc3BhcmVudFxcXCIgZmlsbD1cXFwid2hpdGVcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblx0XHRzdmcgKz0gXCI8Zm9yZWlnbk9iamVjdCBjbGFzcz1cXFwicWMtY2FudmFzLW9iamVjdFxcXCIgeD1cXFwiXCIgKyBnYXRlWCArIFwiXFxcIiB5PVxcXCJcIiArIGdhdGVZICsgXCJcXFwiIHdpZHRoPVxcXCJcIiArIGdhdGVXaWR0aCArIFwiXFxcIiBoZWlnaHQ9XFxcIlwiICsgZ2F0ZUhlaWdodCArIFwiXFxcIj5cIjtcblx0XHRzdmcgKz0gXCI8ZGl2IHN0eWxlPVxcXCJwb3NpdGlvbjpyZWxhdGl2ZTtcXFwiPlwiO1xuXHRcdHN2ZyArPSBcIjxjYW52YXMgaWQ9XFxcIlwiICsgY2FudmFzSWQgKyBcIi1cIiArIHdpcmUgKyBcIlxcXCIgY2xhc3M9XFxcIlwiICsgY2FudmFzSWQgKyBcIlxcXCIgd2lkdGg9XFxcIlwiICsgZ2F0ZVdpZHRoICsgXCJcXFwiIGhlaWdodD1cXFwiXCIgKyBnYXRlSGVpZ2h0ICsgXCJcXFwiPlwiO1xuXHRcdHN2ZyArPSBcIjwvY2FudmFzPlwiO1xuXHRcdHN2ZyArPSBcIjwvZGl2PlwiO1xuXHRcdHN2ZyArPSBcIjwvZm9yZWlnbk9iamVjdD5cIjtcblx0XHRzdmcgKz0gXCI8L2c+XCI7XG5cblx0XHRyZXR1cm4gc3ZnO1xuXHR9XG5cblxuXHRmdW5jdGlvbiBlc2NhcGVIdG1sKHN0cikge1xuXHRcdHJldHVybiBzdHJcblx0XHRcdC5yZXBsYWNlKC8mL2csIFwiJmFtcDtcIilcblx0XHRcdC5yZXBsYWNlKC88L2csIFwiJmx0O1wiKVxuXHRcdFx0LnJlcGxhY2UoLz4vZywgXCImZ3Q7XCIpXG5cdFx0XHQucmVwbGFjZSgvXCIvZywgXCImcXVvdDtcIilcblx0XHRcdC5yZXBsYWNlKC8nL2csIFwiJiMwMzk7XCIpO1xuXHR9XG5cblx0Ly8gXG5cdC8vIC0gZ2F0ZUdhbGxlcnkgYW5kIGN1c3RvbUdhdGVHYWxsZXJ5IGlzIHVzZWQgZm9yIHRvb2xib3ggcGFsZXR0ZSBpbiBkcmFnICYgZHJvcCBlZGl0b3IuXG5cdC8vIC0gZ2F0ZUdhbGxlcnlSYXcgaXMgdXNlZCB0byBnZW5lcmF0ZSBsaXN0IG9mIGFsbCBnYXRlIHN5bWJvbHMgdGhhdCBsb29rIHRoZSBzYW1lIGFzIGluIGRpYWdyYW1cblx0Ly8gICAoZ2F0ZSBzeW1ib2wgb25seSB3aXRob3V0IGNvbnRyb2xsaW5nIHdpcmUpLiBVc2VmdWwgdG8gZ2VuZXJhdGUgdHJhaW5pbmcgc2V0IGZvciBjaXJjdWl0IGltYWdlIHJlY29nbml0aW9uLlxuXHQvL1xuXHRpZihvcHRpb25zLmdhdGVHYWxsZXJ5IHx8IG9wdGlvbnMuZ2F0ZUdhbGxlcnlSYXcgfHwgb3B0aW9ucy5jdXN0b21HYXRlR2FsbGVyeSkge1xuXHRcdHZhciBnYXRlTGlzdCA9IFtdO1xuXG5cdFx0Ly8gYmFzaWMgZ2F0ZXNcblx0XHRpZihvcHRpb25zLmdhdGVHYWxsZXJ5IHx8IG9wdGlvbnMuZ2F0ZUdhbGxlcnlSYXcpIHtcblxuXHRcdFx0dmFyIHVuaXEgPSBbXTtcblx0XHRcdGZvcih2YXIgZ2F0ZU5hbWUgaW4gdGhpcy5iYXNpY0dhdGVzKSB7XG5cdFx0XHRcdHZhciBnYXRlID0gdGhpcy5iYXNpY0dhdGVzW2dhdGVOYW1lXTtcblx0XHRcdFx0dmFyIGRpbmZvID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShnYXRlLmRyYXdpbmdJbmZvIHx8IHsgY29ubmVjdG9yczogW1wiYm94XCJdIH0pKTtcblx0XHRcdFx0aWYoZGluZm8uY29ubmVjdG9ycykge1xuXHRcdFx0XHRcdHZhciBnYXRlTGFiZWwgPSBkaW5mby5sYWJlbCB8fCBnYXRlTmFtZTtcblx0XHRcdFx0XHR2YXIgY29ubmVjdG9yID0gZGluZm8uY29ubmVjdG9ycyA/IGRpbmZvLmNvbm5lY3RvcnNbZGluZm8uY29ubmVjdG9ycy5sZW5ndGggLSAxXSA6IFwiYm94XCI7XG5cblx0XHRcdFx0XHRpZihvcHRpb25zLmdhdGVHYWxsZXJ5KSB7XG5cdFx0XHRcdFx0XHQvLyBEcmF3IFwic3dhcFwiLCBcImN1MVwiIGFuZCBcImN6XCIgZ2F0ZXMgYXMgYm94XG5cdFx0XHRcdFx0XHRpZihjb25uZWN0b3IgPT0gXCJ4XCIgfHwgY29ubmVjdG9yID09IFwiZG90XCIpIHtcblx0XHRcdFx0XHRcdFx0Y29ubmVjdG9yID0gXCJib3hcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR2YXIgdW5pcVN0ciA9IGdhdGVMYWJlbCArIFwifFwiICsgY29ubmVjdG9yO1xuXG5cdFx0XHRcdFx0aWYodW5pcS5pbmRleE9mKHVuaXFTdHIpIDwgMCAmJiBnYXRlTmFtZSAhPSBcImNjeFwiKSB7XG5cdFx0XHRcdFx0XHR1bmlxLnB1c2godW5pcVN0cik7XG5cblx0XHRcdFx0XHRcdHZhciBzdmcgPSBcIlwiO1xuXHRcdFx0XHRcdFx0aWYoIW9wdGlvbnMuZW1iZWRkZWQpIHtcblx0XHRcdFx0XHRcdFx0c3ZnICs9IFwiPD94bWwgdmVyc2lvbj1cXFwiMS4wXFxcIj8+XCI7XG5cdFx0XHRcdFx0XHRcdHN2ZyArPVwiPCFET0NUWVBFIHN2ZyBQVUJMSUMgXFxcIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOXFxcIiBcXFwiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkXFxcIj5cIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHN2ZyArPSBcIjxzdmcgY2xhc3M9XFxcInFjLWdhdGUtZ2FsbGVyeS1pdGVtXFxcIiBkYXRhLWdhdGU9XFxcIlwiICsgZXNjYXBlSHRtbChnYXRlTmFtZSkgKyBcIlxcXCIgZGF0YS1jb250ZW50PVxcXCJcIiArIGVzY2FwZUh0bWwoZ2F0ZS5kZXNjcmlwdGlvbikgKyBcIlxcXCIgd2lkdGg9XFxcIlwiICsgb3B0aW9ucy5jZWxsV2lkdGggKyBcIlxcXCIgaGVpZ2h0PVxcXCJcIiArIG9wdGlvbnMuY2VsbEhlaWdodCArIFwiXFxcIiB2ZXJzaW9uPVxcXCIxLjFcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+XCI7XG5cdFx0XHRcdFx0XHRzdmcgPSBzdmcgKyBnYXRlU1ZHKDAsIDAsIGdhdGVOYW1lLCBnYXRlTGFiZWwsIGNvbm5lY3RvciwgISFvcHRpb25zLmdhdGVHYWxsZXJ5LCBmYWxzZSk7XG5cdFx0XHRcdFx0XHRzdmcgKz0gXCI8L3N2Zz5cIjtcblxuXHRcdFx0XHRcdFx0aWYob3B0aW9ucy5nYXRlR2FsbGVyeSkge1xuXHRcdFx0XHRcdFx0XHRnYXRlTGlzdC5wdXNoKHN2Zyk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRnYXRlTGlzdC5wdXNoKHsgbmFtZTogZ2F0ZU5hbWUsIHN2Zzogc3ZnIH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBzcGVjaWFsIGl0ZW06IGRvdFxuXHRcdFx0dmFyIGRvdHN2ZyA9IFwiXCI7XG5cdFx0XHRpZighb3B0aW9ucy5lbWJlZGRlZCkge1xuXHRcdFx0XHRkb3RzdmcgKz0gXCI8P3htbCB2ZXJzaW9uPVxcXCIxLjBcXFwiPz5cIjtcblx0XHRcdFx0ZG90c3ZnICs9XCI8IURPQ1RZUEUgc3ZnIFBVQkxJQyBcXFwiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU5cXFwiIFxcXCJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGRcXFwiPlwiO1xuXHRcdFx0fVxuXHRcdFx0ZG90c3ZnICs9IFwiPHN2ZyBjbGFzcz1cXFwicWMtZ2F0ZS1nYWxsZXJ5LWl0ZW1cXFwiIGRhdGEtZ2F0ZT1cXFwiZG90XFxcIiBkYXRhLWNvbnRlbnQ9XFxcIkNvbnRyb2xcXFwiIHdpZHRoPVxcXCJcIiArIG9wdGlvbnMuY2VsbFdpZHRoICsgXCJcXFwiIGhlaWdodD1cXFwiXCIgKyBvcHRpb25zLmNlbGxIZWlnaHQgKyBcIlxcXCIgdmVyc2lvbj1cXFwiMS4xXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPlwiO1xuXHRcdFx0ZG90c3ZnID0gZG90c3ZnICsgZ2F0ZVNWRygwLCAwLCBcImRvdFwiLCBcImRvdFwiLCBcImRvdFwiLCAhIW9wdGlvbnMuZ2F0ZUdhbGxlcnksIGZhbHNlKTtcblx0XHRcdGRvdHN2ZyArPSBcIjwvc3ZnPlwiO1xuXG5cdFx0XHRpZihvcHRpb25zLmdhdGVHYWxsZXJ5KSB7XG5cdFx0XHRcdGdhdGVMaXN0LnB1c2goZG90c3ZnKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGdhdGVMaXN0LnB1c2goeyBuYW1lOiBcImRvdFwiLCBzdmc6IGRvdHN2ZyB9KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gc3BlY2lhbCBpdGVtOiBpbnZlcnRlZCBkb3Rcblx0XHRcdHZhciBuZG90c3ZnID0gXCJcIjtcblx0XHRcdGlmKCFvcHRpb25zLmVtYmVkZGVkKSB7XG5cdFx0XHRcdG5kb3RzdmcgKz0gXCI8P3htbCB2ZXJzaW9uPVxcXCIxLjBcXFwiPz5cIjtcblx0XHRcdFx0bmRvdHN2ZyArPVwiPCFET0NUWVBFIHN2ZyBQVUJMSUMgXFxcIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOXFxcIiBcXFwiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkXFxcIj5cIjtcblx0XHRcdH1cblx0XHRcdG5kb3RzdmcgKz0gXCI8c3ZnIGNsYXNzPVxcXCJxYy1nYXRlLWdhbGxlcnktaXRlbVxcXCIgZGF0YS1nYXRlPVxcXCJuZG90XFxcIiBkYXRhLWNvbnRlbnQ9XFxcIkNvbnRyb2xcXFwiIHdpZHRoPVxcXCJcIiArIG9wdGlvbnMuY2VsbFdpZHRoICsgXCJcXFwiIGhlaWdodD1cXFwiXCIgKyBvcHRpb25zLmNlbGxIZWlnaHQgKyBcIlxcXCIgdmVyc2lvbj1cXFwiMS4xXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPlwiO1xuXHRcdFx0bmRvdHN2ZyA9IG5kb3RzdmcgKyBnYXRlU1ZHKDAsIDAsIFwibmRvdFwiLCBcIm5kb3RcIiwgXCJuZG90XCIsICEhb3B0aW9ucy5nYXRlR2FsbGVyeSwgZmFsc2UpO1xuXHRcdFx0bmRvdHN2ZyArPSBcIjwvc3ZnPlwiO1xuXG5cdFx0XHRpZihvcHRpb25zLmdhdGVHYWxsZXJ5KSB7XG5cdFx0XHRcdGdhdGVMaXN0LnB1c2gobmRvdHN2Zyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRnYXRlTGlzdC5wdXNoKHsgbmFtZTogXCJkb3RcIiwgc3ZnOiBuZG90c3ZnIH0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIGN1c3RvbSBnYXRlc1xuXHRcdGlmKG9wdGlvbnMuY3VzdG9tR2F0ZUdhbGxlcnkpIHtcblx0XHRcdGZvcih2YXIgZ2F0ZU5hbWUgaW4gdGhpcy5jdXN0b21HYXRlcykge1xuXHRcdFx0XHR2YXIgc3ZnID0gXCJcIjtcblx0XHRcdFx0aWYoIW9wdGlvbnMuZW1iZWRkZWQpIHtcblx0XHRcdFx0XHRzdmcgKz0gXCI8P3htbCB2ZXJzaW9uPVxcXCIxLjBcXFwiPz5cIjtcblx0XHRcdFx0XHRzdmcgKz1cIjwhRE9DVFlQRSBzdmcgUFVCTElDIFxcXCItLy9XM0MvL0RURCBTVkcgMS4xLy9FTlxcXCIgXFxcImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZFxcXCI+XCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0c3ZnICs9IFwiPHN2ZyBjbGFzcz1cXFwicWMtY3VzdG9tLWdhdGUtZ2FsbGVyeS1pdGVtXFxcIiBkYXRhLWdhdGU9XFxcIlwiICsgZ2F0ZU5hbWUgKyBcIlxcXCIgd2lkdGg9XFxcIlwiICsgKG9wdGlvbnMuY2VsbFdpZHRoICogMikgKyBcIlxcXCIgaGVpZ2h0PVxcXCJcIiArIG9wdGlvbnMuY2VsbEhlaWdodCArIFwiXFxcIiB2ZXJzaW9uPVxcXCIxLjFcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+XCI7XG5cdFx0XHRcdHN2ZyA9IHN2ZyArIGdhdGVTVkcoMCwgMCwgZ2F0ZU5hbWUsIGdhdGVOYW1lLCBcInJlY3RcIiwgZmFsc2UsIGZhbHNlKTtcblx0XHRcdFx0c3ZnICs9IFwiPC9zdmc+XCI7XG5cdFx0XHRcdGdhdGVMaXN0LnB1c2goc3ZnKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZ2F0ZUxpc3Q7XG5cdH0gZWxzZSB7XG5cdFx0dmFyIHN2ZyA9IFwiXCI7XG5cdFx0aWYoIW9wdGlvbnMuZW1iZWRkZWQpIHtcblx0XHRcdHN2ZyArPSBcIjw/eG1sIHZlcnNpb249XFxcIjEuMFxcXCI/PlwiO1xuXHRcdFx0c3ZnICs9XCI8IURPQ1RZUEUgc3ZnIFBVQkxJQyBcXFwiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU5cXFwiIFxcXCJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGRcXFwiPlwiO1xuXHRcdH1cblxuXHRcdHN2ZyArPSBcIjxzdmcgY2xhc3M9XFxcInFjLWNpcmN1aXRcXFwiIHdpZHRoPVxcXCJcIiArIHRvdGFsV2lkdGggKyBcIlxcXCIgaGVpZ2h0PVxcXCJcIiArIHRvdGFsSGVpZ2h0ICsgXCJcXFwiIHZlcnNpb249XFxcIjEuMVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj5cIjtcblxuXHRcdGlmKG9wdGlvbnMucGxhY2Vob2xkZXJzKSB7XG5cdFx0XHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8PSBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdFx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDw9IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdFx0XHRzdmcgKz0gZHJhd0dhdGVQbGFjZWhvbGRlcihjb2x1bW4sIHdpcmUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUXVhbnR1bSB3aXJlc1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBudW1Sb3dzOyB3aXJlKyspIHtcblx0XHRcdHZhciB3aXJlWSA9IHFXaXJlWSh3aXJlKTtcblx0XHRcdHZhciBpbml0U3ltYm9sID0gXCIwXCI7XG5cdFx0XHRpZihvcHRpb25zLmN1c3RvbUdhdGUpIHtcblx0XHRcdFx0aW5pdFN5bWJvbCA9IHF1Yml0TGV0dGVyKHdpcmUsIG51bVJvd3MpO1xuXHRcdFx0fVxuXHRcdFx0c3ZnICs9IFwiPHRleHQgY2xhc3M9XFxcInFjLXdpcmUtaW5pdFxcXCIgeD1cXFwiMFxcXCIgeT1cXFwiXCIgKyB3aXJlWSArIFwiXFxcIiBkb21pbmFudC1iYXNlbGluZT1cXFwibWlkZGxlXFxcIiB0ZXh0LWFuY2hvcj1cXFwic3RhcnRcXFwiPnxcIiArIGluaXRTeW1ib2wgKyBcIuKfqTwvdGV4dD5cIjtcblx0XHRcdHN2ZyArPSBcIjxsaW5lIGNsYXNzPVxcXCJxYy13aXJlXFxcIiB4MT1cXFwiXCIgKyBvcHRpb25zLndpcmVNYXJnaW4gKyBcIlxcXCIgeDI9XFxcIlwiICsgdG90YWxXaXJlV2lkdGggKyBcIlxcXCIgeTE9XFxcIlwiICsgd2lyZVkgKyBcIlxcXCIgeTI9XFxcIlwiICsgd2lyZVkgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIG9wdGlvbnMud2lyZUNvbG9yICsgXCJcXFwiIHN0cm9rZS13aWR0aD1cXFwiXCIgKyBvcHRpb25zLndpcmVXaWR0aCArIFwiXFxcIiAvPlwiO1xuXHRcdFx0c3ZnICs9IFwiPHRleHQgY2xhc3M9XFxcInFjLXdpcmUtbGFiZWxcXFwiIHg9XFxcIlwiICsgb3B0aW9ucy53aXJlTWFyZ2luICsgXCJcXFwiIHk9XFxcIlwiICsgKHdpcmVZIC0gKG9wdGlvbnMud2lyZVRleHRIZWlnaHQqMikpICsgXCJcXFwiIGRvbWluYW50LWJhc2VsaW5lPVxcXCJoYW5naW5nXFxcIiB0ZXh0LWFuY2hvcj1cXFwic3RhcnRcXFwiIGZvbnQtc2l6ZT1cXFwiNzUlXFxcIj5xXCIgKyB3aXJlICsgXCI8L3RleHQ+XCI7XG5cdFx0fVxuXG5cdFx0Ly8gQ2xhc3NpY2FsIHdpcmVzXG5cdFx0Zm9yKHZhciBjcmVnTmFtZSBpbiB0aGlzLmNyZWdzKSB7XG5cdFx0XHR2YXIgd2lyZVkgPSBjV2lyZVkoY3JlZ05hbWUpO1xuXHRcdFx0c3ZnICs9IFwiPHRleHQgY2xhc3M9XFxcInFjLXdpcmUtaW5pdFxcXCIgeD1cXFwiMFxcXCIgeT1cXFwiXCIgKyB3aXJlWSArIFwiXFxcIiBkb21pbmFudC1iYXNlbGluZT1cXFwibWlkZGxlXFxcIiB0ZXh0LWFuY2hvcj1cXFwic3RhcnRcXFwiPjA8L3RleHQ+XCI7XG5cdFx0XHRzdmcgKz0gXCI8bGluZSBjbGFzcz1cXFwicWMtd2lyZS1jXFxcIiB4MT1cXFwiXCIgKyBvcHRpb25zLndpcmVNYXJnaW4gKyBcIlxcXCIgeDI9XFxcIlwiICsgdG90YWxXaXJlV2lkdGggKyBcIlxcXCIgeTE9XFxcIlwiICsgd2lyZVkgKyBcIlxcXCIgeTI9XFxcIlwiICsgd2lyZVkgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIG9wdGlvbnMuY1dpcmVDb2xvciArIFwiXFxcIiBzdHJva2Utd2lkdGg9XFxcIlwiICsgb3B0aW9ucy53aXJlV2lkdGggKyBcIlxcXCIgLz5cIjtcblx0XHRcdHN2ZyArPSBcIjx0ZXh0IGNsYXNzPVxcXCJxYy13aXJlLWxhYmVsXFxcIiB4PVxcXCJcIiArIG9wdGlvbnMud2lyZU1hcmdpbiArIFwiXFxcIiB5PVxcXCJcIiArICh3aXJlWSAtIChvcHRpb25zLndpcmVUZXh0SGVpZ2h0ICogMikpICsgXCJcXFwiIGRvbWluYW50LWJhc2VsaW5lPVxcXCJoYW5naW5nXFxcIiB0ZXh0LWFuY2hvcj1cXFwic3RhcnRcXFwiIGZvbnQtc2l6ZT1cXFwiNzUlXFxcIj5cIiArIGNyZWdOYW1lICsgXCI8L3RleHQ+XCI7XG5cdFx0fVxuXG5cdFx0Ly8gR2F0ZXNcblx0XHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0XHR2YXIgZ2F0ZSA9IHRoaXMuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRcdGlmKGdhdGUpIHtcblx0XHRcdFx0XHRpZihnYXRlLmNvbm5lY3RvciA9PSAwKSB7XG5cdFx0XHRcdFx0XHRzdmcgKz0gZHJhd0dhdGUoZ2F0ZSwgY29sdW1uLCB3aXJlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBHYXRlIGhhbmRsZXMgKGZvciBkcmFnICYgZHJvcCBlZGl0b3IpXG5cdFx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdFx0dmFyIGdhdGUgPSB0aGlzLmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0XHRpZihnYXRlKSB7XG5cdFx0XHRcdFx0aWYob3B0aW9ucy5wbGFjZWhvbGRlcnMpIHtcblx0XHRcdFx0XHRcdHN2ZyArPSBkcmF3R2F0ZUhhbmRsZShnYXRlLCBjb2x1bW4sIHdpcmUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFBsYWNlIGZvciBibG9jaCBzcGhlcmUgb24gZWFjaCBxdWFudHVtIHdpcmVcblx0XHRpZihvcHRpb25zLmRyYXdCbG9jaFNwaGVyZXMpIHtcblx0XHRcdHZhciBjdXJyZW50Q29sID0gdG90YWxDb2xzIC0gMTtcblx0XHRcdGlmKG9wdGlvbnMuZHJhd0h5YnJpZCkge1xuXHRcdFx0XHRjdXJyZW50Q29sIC09IDI7XG5cdFx0XHR9XG5cdFx0XHRcblx0XHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHRcdHN2ZyArPSBkcmF3R2F0ZUNhbnZhcyhjdXJyZW50Q29sLCB3aXJlLCBcInFjLWJsb2NoLWdyb3VwXCIsIFwicWMtYmxvY2gtY2FudmFzXCIpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIGh5YnJpZCBxdWFudHVtLWNsYXNzaWNhbFxuXHRcdGlmKG9wdGlvbnMuZHJhd0h5YnJpZCkge1xuXHRcdFx0dmFyIGN1cnJlbnRDb2wgPSB0b3RhbENvbHMgLSAyO1xuXHRcdFx0Ly8gY29ubmVjdG9yXG5cdFx0XHR2YXIgY29sSW5kZXggPSBjdXJyZW50Q29sO1xuXG5cdFx0XHR2YXIgZ2F0ZVggPSBnZXRDZWxsWChjb2xJbmRleCkgKyBvcHRpb25zLmJsYWNrYm94UGFkZGluZ1g7XG5cdFx0XHR2YXIgZ2F0ZVkgPSBxR2F0ZVkoMCkgKyBvcHRpb25zLmJsYWNrYm94UGFkZGluZ1k7XG5cdFx0XHR2YXIgZ2F0ZVdpZHRoID0gb3B0aW9ucy5jZWxsV2lkdGggLSAoMiAqIG9wdGlvbnMuYmxhY2tib3hQYWRkaW5nWCk7XG5cdFx0XHR2YXIgZ2F0ZUhlaWdodCA9ICgocUdhdGVZKG51bVJvd3MgKyBudW1DcmVncyAtIDEpICsgb3B0aW9ucy5jZWxsSGVpZ2h0KSAtIGdhdGVZKSAtIG9wdGlvbnMuYmxhY2tib3hQYWRkaW5nWTtcblxuXHRcdFx0dmFyIGNlbnRlclggPSBnYXRlWCArIChnYXRlV2lkdGggLyAyKTtcblx0XHRcdHZhciBjZW50ZXJZID0gZ2F0ZVkgKyAoZ2F0ZUhlaWdodCAvIDIpO1xuXG5cdFx0XHRjTGlua1RvcFkgPSBnYXRlWSArIGdhdGVIZWlnaHQ7XG5cblx0XHRcdC8vIGNvc3Rcblx0XHRcdHN2ZyArPSBcIjxyZWN0IGNsYXNzPVxcXCJxYy1jb3N0LWhcXFwiIHg9XFxcIlwiICsgZ2F0ZVggKyBcIlxcXCIgeT1cXFwiXCIgKyBnYXRlWSArIFwiXFxcIiB3aWR0aD1cXFwiXCIgKyBnYXRlV2lkdGggKyBcIlxcXCIgaGVpZ2h0PVxcXCJcIiArIGdhdGVIZWlnaHQgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIG9wdGlvbnMuaFdpcmVDb2xvciArIFwiXFxcIiBmaWxsPVxcXCJ3aGl0ZVxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxXFxcIiByeD1cXFwiOFxcXCIgLz5cIjtcblx0XHRcdHN2ZyArPSBcIjx0ZXh0IGNsYXNzPVxcXCJxYy1sYWJlbC1oXFxcIiB4PVxcXCJcIiArIGNlbnRlclggKyBcIlxcXCIgeT1cXFwiXCIgKyBjZW50ZXJZICsgXCJcXFwiIGRvbWluYW50LWJhc2VsaW5lPVxcXCJtaWRkbGVcXFwiIHRleHQtYW5jaG9yPVxcXCJtaWRkbGVcXFwiIGZpbGw9XFxcIlwiICsgb3B0aW9ucy5oV2lyZUNvbG9yICsgXCJcXFwiIHRyYW5zZm9ybT1cXFwicm90YXRlKC05MCwgXCIgKyBjZW50ZXJYICsgXCIsIFwiICsgY2VudGVyWSArIFwiKVxcXCI+Q29zdDwvdGV4dD5cIjtcblxuXG5cdFx0XHR2YXIgZ2F0ZTJYID0gZ2V0Q2VsbFgoY29sSW5kZXggKyAxKSArIG9wdGlvbnMuYmxhY2tib3hQYWRkaW5nWDtcblx0XHRcdHZhciBjZW50ZXIyWCA9IGdhdGUyWCArIChnYXRlV2lkdGggLyAyKTtcblxuXHRcdFx0Ly8gYXJyb3dcblx0XHRcdHN2ZyArPSBcIjxtYXJrZXIgaWQ9XFxcInFjLWFycm93LWhlYWRcXFwiIG9yaWVudD1cXFwiYXV0b1xcXCIgbWFya2VyV2lkdGg9XFxcIjhcXFwiIG1hcmtlckhlaWdodD1cXFwiMTBcXFwiIHJlZlg9XFxcIjhcXFwiIHJlZlk9XFxcIjVcXFwiPjxwYXRoIGQ9XFxcIk0wLDAgVjEwIEw4LDUgWlxcXCIgZmlsbD1cXFwiXCIgKyBvcHRpb25zLmhXaXJlQ29sb3IgKyBcIlxcXCIvPjwvbWFya2VyPlwiO1xuXHRcdFx0c3ZnICs9IFwiPGxpbmUgY2xhc3M9XFxcInFjLWxpbmstaFxcXCIgeDE9XFxcIlwiICsgKGdhdGVYICsgZ2F0ZVdpZHRoKSArIFwiXFxcIiB4Mj1cXFwiXCIgKyBnYXRlMlggKyBcIlxcXCIgeTE9XFxcIlwiICsgY2VudGVyWSArXCJcXFwiIHkyPVxcXCJcIiArIGNlbnRlclkgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIG9wdGlvbnMuaFdpcmVDb2xvciArIFwiXFxcIiBzdHJva2Utd2lkdGg9XFxcIlwiICsgb3B0aW9ucy53aXJlV2lkdGggKyBcIlxcXCIgbWFya2VyLWVuZD1cXFwidXJsKCNxYy1hcnJvdy1oZWFkKVxcXCIgLz5cIjtcblxuXG5cdFx0XHQvLyBvcHRpbWl6ZXJcblx0XHRcdHN2ZyArPSBcIjxyZWN0IGNsYXNzPVxcXCJxYy1vcHRpbWl6ZXItaFxcXCIgeD1cXFwiXCIgKyBnYXRlMlggKyBcIlxcXCIgeT1cXFwiXCIgKyBnYXRlWSArIFwiXFxcIiB3aWR0aD1cXFwiXCIgKyBnYXRlV2lkdGggKyBcIlxcXCIgaGVpZ2h0PVxcXCJcIiArIGdhdGVIZWlnaHQgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIG9wdGlvbnMuaFdpcmVDb2xvciArIFwiXFxcIiBmaWxsPVxcXCJ3aGl0ZVxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxXFxcIiByeD1cXFwiOFxcXCIgLz5cIjtcblx0XHRcdHN2ZyArPSBcIjx0ZXh0IGNsYXNzPVxcXCJxYy1sYWJlbC1oXFxcIiB4PVxcXCJcIiArIGNlbnRlcjJYICsgXCJcXFwiIHk9XFxcIlwiICsgY2VudGVyWSArIFwiXFxcIiBkb21pbmFudC1iYXNlbGluZT1cXFwibWlkZGxlXFxcIiB0ZXh0LWFuY2hvcj1cXFwibWlkZGxlXFxcIiBmaWxsPVxcXCJcIiArIG9wdGlvbnMuaFdpcmVDb2xvciArIFwiXFxcIiB0cmFuc2Zvcm09XFxcInJvdGF0ZSgtOTAsIFwiICsgY2VudGVyMlggKyBcIiwgXCIgKyBjZW50ZXJZICsgXCIpXFxcIj5PcHRpbWl6ZXI8L3RleHQ+XCI7XG5cblx0XHRcdC8vIGxpbmtcblx0XHRcdHZhciBsaW5rWCA9IGNlbnRlcjJYO1xuXHRcdFx0dmFyIGxpbmtZMSA9IGNMaW5rVG9wWTtcblx0XHRcdHZhciBsaW5rWTIgPSBoeWJyaWRXaXJlWTtcblx0XHRcdHN2ZyArPSBcIjxsaW5lIGNsYXNzPVxcXCJxYy13aXJlLWhcXFwiIHgxPVxcXCJcIiArIGxpbmtYICsgXCJcXFwiIHgyPVxcXCJcIiArIGxpbmtYICsgXCJcXFwiIHkxPVxcXCJcIiArIGxpbmtZMSArXCJcXFwiIHkyPVxcXCJcIiArIGxpbmtZMiArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgb3B0aW9ucy5oV2lyZUNvbG9yICsgXCJcXFwiIHN0cm9rZS1kYXNoYXJyYXk9XFxcIjRcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblxuXHRcdFx0Ly8gQ29ubmVjdCBhbGwgZ2xvYmFsbHkgcGFyYW1ldHJpemVkIGdhdGVzXG5cdFx0XHR2YXIgaFdpcmVYID0gMDtcblx0XHRcdHZhciBnbG9iYWxQYXJhbXNJbmZvID0gdGhpcy5maW5kR2xvYmFsUGFyYW1zKCk7XG5cdFx0XHRpZihnbG9iYWxQYXJhbXNJbmZvLmdsb2JhbFBhcmFtcy5sZW5ndGgpIHtcblx0XHRcdFx0aFdpcmVYID0gZ2V0Q2VsbFgoZ2xvYmFsUGFyYW1zSW5mby5jZWxsc1swXVswXSkgKyBvcHRpb25zLmNlbGxXaWR0aCArIChvcHRpb25zLmhTcGFjaW5nIC8gMik7XG5cdFx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBnbG9iYWxQYXJhbXNJbmZvLmNlbGxzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0dmFyIGNlbGwgPSBnbG9iYWxQYXJhbXNJbmZvLmNlbGxzW2ldO1xuXG5cdFx0XHRcdFx0dmFyIGxpbmsyWCA9IGdldENlbGxYKGNlbGxbMF0pICsgb3B0aW9ucy5jZWxsV2lkdGggKyAob3B0aW9ucy5oU3BhY2luZyAvIDIpO1xuXHRcdFx0XHRcdHZhciBsaW5rMlkyID0gZ2V0Q2VsbFkoY2VsbFsxXSkgKyBvcHRpb25zLmNlbGxIZWlnaHQgKyBvcHRpb25zLnZTcGFjaW5nIC0gKG9wdGlvbnMucGFyYW1UZXh0SGVpZ2h0IC8gMik7XG5cdFx0XHRcdFx0dmFyIGxpbmsyWTEgPSBoeWJyaWRXaXJlWTtcblx0XHRcdFx0XHR2YXIgY2VsbEJvdHRvbVJpZ2h0WCA9IGdldENlbGxYKGNlbGxbMF0pICsgb3B0aW9ucy5jZWxsV2lkdGg7XG5cdFx0XHRcdFx0dmFyIGNlbGxCb3R0b21SaWdodFkgPSBnZXRDZWxsWShjZWxsWzFdKSArIG9wdGlvbnMuY2VsbEhlaWdodCArIChvcHRpb25zLnBhcmFtVGV4dEhlaWdodCAqIDIpICsgNDtcblx0XHRcdFx0XHRzdmcgKz0gXCI8bGluZSBjbGFzcz1cXFwicWMtd2lyZS1oXFxcIiB4MT1cXFwiXCIgKyBsaW5rMlggKyBcIlxcXCIgeDI9XFxcIlwiICsgbGluazJYICsgXCJcXFwiIHkxPVxcXCJcIiArIGxpbmsyWTEgK1wiXFxcIiB5Mj1cXFwiXCIgKyBsaW5rMlkyICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyBvcHRpb25zLmhXaXJlQ29sb3IgKyBcIlxcXCIgc3Ryb2tlLWRhc2hhcnJheT1cXFwiNFxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxXFxcIiAvPlwiO1xuXHRcdFx0XHRcdHN2ZyArPSBcIjxsaW5lIGNsYXNzPVxcXCJxYy13aXJlLWhcXFwiIHgxPVxcXCJcIiArIGxpbmsyWCArIFwiXFxcIiB4Mj1cXFwiXCIgKyBjZWxsQm90dG9tUmlnaHRYICsgXCJcXFwiIHkxPVxcXCJcIiArIGxpbmsyWTIgK1wiXFxcIiB5Mj1cXFwiXCIgKyBjZWxsQm90dG9tUmlnaHRZICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyBvcHRpb25zLmhXaXJlQ29sb3IgKyBcIlxcXCIgc3Ryb2tlLWRhc2hhcnJheT1cXFwiNFxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxXFxcIiBtYXJrZXItZW5kPVxcXCJ1cmwoI3FjLWFycm93LWhlYWQpXFxcIiAvPlwiO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFyIHdpcmVZID0gaHlicmlkV2lyZVk7XG5cdFx0XHRcdHN2ZyArPSBcIjxsaW5lIGNsYXNzPVxcXCJxYy13aXJlLWhcXFwiIHgxPVxcXCJcIiArIGhXaXJlWCArIFwiXFxcIiB4Mj1cXFwiXCIgKyBjZW50ZXIyWCArIFwiXFxcIiB5MT1cXFwiXCIgKyB3aXJlWSArIFwiXFxcIiB5Mj1cXFwiXCIgKyB3aXJlWSArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgb3B0aW9ucy5oV2lyZUNvbG9yICsgXCJcXFwiIHN0cm9rZS1kYXNoYXJyYXk9XFxcIjRcXFwiIHN0cm9rZS13aWR0aD1cXFwiXCIgKyBvcHRpb25zLndpcmVXaWR0aCArIFwiXFxcIiAvPlwiO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBObyBnYXRlcyB3aXRoIGdsb2JhbCBwYXJhbXNcblx0XHRcdFx0aFdpcmVYID0gZ2V0Q2VsbFgodG90YWxXaXJlQ29scyk7XG5cblx0XHRcdFx0dmFyIHdpcmVZID0gaHlicmlkV2lyZVk7XG5cdFx0XHRcdHN2ZyArPSBcIjxsaW5lIGNsYXNzPVxcXCJxYy13aXJlLWhcXFwiIHgxPVxcXCJcIiArIGNlbnRlcjJYICsgXCJcXFwiIHgyPVxcXCJcIiArIGhXaXJlWCArIFwiXFxcIiB5MT1cXFwiXCIgKyB3aXJlWSArIFwiXFxcIiB5Mj1cXFwiXCIgKyB3aXJlWSArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgb3B0aW9ucy5oV2lyZUNvbG9yICsgXCJcXFwiIHN0cm9rZS1kYXNoYXJyYXk9XFxcIjRcXFwiIHN0cm9rZS13aWR0aD1cXFwiXCIgKyBvcHRpb25zLndpcmVXaWR0aCArIFwiXFxcIiAgbWFya2VyLWVuZD1cXFwidXJsKCNxYy1hcnJvdy1oZWFkKVxcXCIgLz5cIjtcblx0XHRcdFx0c3ZnICs9IFwiPHRleHQgY2xhc3M9XFxcInFjLXdhcm5pbmctaFxcXCIgeD1cXFwiXCIgKyAoaFdpcmVYIC0gNSkgKyBcIlxcXCIgeT1cXFwiXCIgKyB3aXJlWSArIFwiXFxcIiBkb21pbmFudC1iYXNlbGluZT1cXFwibWlkZGxlXFxcIiB0ZXh0LWFuY2hvcj1cXFwiZW5kXFxcIj4/PC90ZXh0PlwiO1xuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0c3ZnICs9IFwiPC9zdmc+XCI7XG5cdH1cblxuXHRyZXR1cm4gc3ZnO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFRvUWlza2l0ID0gZnVuY3Rpb24ob3B0aW9ucywgZXhwb3J0QXNHYXRlTmFtZSwgY2lyY3VpdFJlcGxhY2VtZW50LCBpbnNpZGVTdWJtb2R1bGUpIHtcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0dmFyIGNvbW1lbnQgPSBvcHRpb25zLmNvbW1lbnQ7XG5cdHZhciBkZWNvbXBvc2UgPSBvcHRpb25zLmRlY29tcG9zZTtcblx0dmFyIHZlcnNpb25TdHIgPSBvcHRpb25zLnZlcnNpb25TdHI7XG5cdHZhciBwcm92aWRlck5hbWUgPSBvcHRpb25zLnByb3ZpZGVyTmFtZTtcblx0dmFyIGJhY2tlbmROYW1lID0gb3B0aW9ucy5iYWNrZW5kTmFtZTtcblx0dmFyIGFzSnVweXRlciA9IG9wdGlvbnMuYXNKdXB5dGVyO1xuXHR2YXIgc2hvdHMgPSBvcHRpb25zLnNob3RzO1xuXHR2YXIgaHlicmlkID0gb3B0aW9ucy5oeWJyaWQ7XG5cblx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdHByb3ZpZGVyTmFtZSA9IHByb3ZpZGVyTmFtZSB8fCBcIkFlclwiO1xuXG5cdGJhY2tlbmROYW1lID0gYmFja2VuZE5hbWUgfHwgXCJcIjtcblx0aWYoIWJhY2tlbmROYW1lICYmIHByb3ZpZGVyTmFtZSA9PSBcIkFlclwiKSB7XG5cdFx0YmFja2VuZE5hbWUgPSBcInFhc21fc2ltdWxhdG9yXCI7XG5cdH1cblxuXHRzaG90cyA9IHNob3RzIHx8IDEwMjQ7XG5cblx0dmFyIHZlcnNpb24gPSBwYXJzZUZsb2F0KHZlcnNpb25TdHIgfHwgXCIwLjdcIik7XG5cdGlmKGlzTmFOKHZlcnNpb24pKSB7XG5cdFx0dmVyc2lvbiA9IDAuNztcblx0fVxuXG5cdGlmKHR5cGVvZiBoeWJyaWQgPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdGh5YnJpZCA9IHRoaXMub3B0aW9ucyA/ICEhdGhpcy5vcHRpb25zLmh5YnJpZCA6IGZhbHNlO1xuXHR9XG5cblx0Ly8gZGVjb21wb3NlID9cblx0dmFyIGNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0Y2lyY3VpdC5sb2FkKHRoaXMuc2F2ZShkZWNvbXBvc2UpKTtcblxuXHR2YXIgcWlza2l0ID0gXCJcIjtcblxuXHQvLyBjb21tZW50XG5cdGlmKGNvbW1lbnQpIHtcblx0XHR2YXIgY29tbSA9IChjb21tZW50IHx8IFwiXCIpLnNwbGl0KFwiXFxuXCIpO1xuXHRcdGNvbW0ubWFwKGZ1bmN0aW9uKGNsaW5lKSB7XG5cdFx0XHRpZihjbGluZS5sZW5ndGggPj0gMSAmJiBjbGluZVswXSAhPSBcIiNcIikge1xuXHRcdFx0XHRxaXNraXQgKz0gXCIjIFwiO1xuXHRcdFx0fVxuXHRcdFx0cWlza2l0ICs9IGNsaW5lO1xuXHRcdFx0cWlza2l0ICs9IFwiXFxuXCI7XG5cdFx0fSk7XG5cdH1cblxuXHR2YXIgbWF0aFRvU3RyaW5nSGFuZGxlciA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMpIHtcblx0XHRpZihub2RlLmlzU3ltYm9sTm9kZSkge1xuXHRcdFx0dmFyIG51bXB5cyA9IFtcInBpXCIsIFwic2luXCIsIFwiY29zXCIsIFwidGFuXCIsIFwiYXNpblwiLCBcImFjb3NcIiwgXCJhdGFuXCJdO1xuXHRcdFx0aWYobnVtcHlzLmluZGV4T2Yobm9kZS5uYW1lKSA+PSAwKSB7XG5cdFx0XHRcdHJldHVybiBcIm5wLlwiICsgbm9kZS5uYW1lO1xuXHRcdFx0fVxuXG5cdFx0XHRpZihzZWxmLnBhcmFtcy5pbmRleE9mKG5vZGUubmFtZSkgPj0gMCAmJiBoeWJyaWQpIHtcblx0XHRcdFx0cmV0dXJuIFwicGFyYW1zW1wiICsgc2VsZi5wYXJhbXMuaW5kZXhPZihub2RlLm5hbWUpICsgXCJdXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdHZhciBhZGp1c3RJZGVudGF0aW9uID0gZnVuY3Rpb24oYWRkU3RyLCBpZGVudCkge1xuXHRcdHZhciBzdHIgPSBcIlwiO1xuXG5cdFx0Ly8gYWRkIHVzZXIgZGVmaW5lZCBjb3N0IGZ1bmN0aW9uIHdpdGggcHJvcGVyIGlkZW50YXRpb25cblx0XHR2YXIgY2ZMaW5lcyA9IGFkZFN0ci5zcGxpdChcIlxcblwiKTtcblx0XHR2YXIgbWluSWRlbnQgPSAtMTtcblx0XHRjZkxpbmVzLm1hcChmdW5jdGlvbihjZkxpbmUpIHtcblx0XHRcdHZhciB0bXBJZGVudCA9IGNmTGluZS5zZWFyY2goL1xcUy8pO1xuXHRcdFx0aWYodG1wSWRlbnQgPj0gMCAmJiAobWluSWRlbnQgPCAwIHx8IHRtcElkZW50IDwgbWluSWRlbnQpKSB7XG5cdFx0XHRcdG1pbklkZW50ID0gdG1wSWRlbnQ7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRpZihtaW5JZGVudCA8IDApIHtcblx0XHRcdG1pbklkZW50ID0gMDtcblx0XHR9XG5cblx0XHR2YXIgYWRkSWRlbnQgPSBcIlwiO1xuXHRcdGlmKG1pbklkZW50IDwgaWRlbnQubGVuZ3RoKSB7XG5cdFx0XHRmb3IodmFyIHRtcCA9IDA7IHRtcCA8IChpZGVudC5sZW5ndGggLSBtaW5JZGVudCk7IHRtcCsrKSB7XG5cdFx0XHRcdGFkZElkZW50ICs9IFwiIFwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNmTGluZXMubWFwKGZ1bmN0aW9uKGNmTGluZSkge1xuXHRcdFx0c3RyICs9IGFkZElkZW50ICsgY2ZMaW5lICsgXCJcXG5cIjtcblx0XHR9KTtcblxuXHRcdHJldHVybiBzdHI7XG5cdH07XG5cblx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdHFpc2tpdCArPSBcImRlZiBcIiArIGV4cG9ydEFzR2F0ZU5hbWUgKyBcIihxY1wiO1xuXG5cdFx0dmFyIGFyZ2MgPSAwO1xuXHRcdGlmKGNpcmN1aXQucGFyYW1zICYmIGNpcmN1aXQucGFyYW1zLmxlbmd0aCkge1xuXHRcdFx0Zm9yKHZhciBwYyA9IDA7IHBjIDwgY2lyY3VpdC5wYXJhbXMubGVuZ3RoOyBwYysrKSB7XG5cdFx0XHRcdHFpc2tpdCArPSBcIiwgXCI7XG5cdFx0XHRcdGFyZ2MrKztcblx0XHRcdFx0cWlza2l0ICs9IGNpcmN1aXQucGFyYW1zW3BjXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgY2lyY3VpdC5udW1RdWJpdHM7IGkrKykge1xuXHRcdFx0cWlza2l0ICs9IFwiLCBcIjtcblx0XHRcdGFyZ2MrKztcblx0XHRcdHFpc2tpdCArPSBxdWJpdExldHRlcihpLCBjaXJjdWl0Lm51bVF1Yml0cyk7XG5cdFx0fVxuXHRcdHFpc2tpdCArPSBcIik6XFxuXCI7XG5cdH0gZWxzZSB7XG5cdFx0aWYoIWNpcmN1aXRSZXBsYWNlbWVudCkge1xuXHRcdFx0cWlza2l0ICs9IFwiZnJvbSBxaXNraXQgaW1wb3J0IFF1YW50dW1SZWdpc3RlciwgQ2xhc3NpY2FsUmVnaXN0ZXJcXG5cIjtcblx0XHRcdHFpc2tpdCArPSBcImZyb20gcWlza2l0IGltcG9ydCBRdWFudHVtQ2lyY3VpdCwgZXhlY3V0ZSwgXCIgKyBwcm92aWRlck5hbWUgKyBcIlxcblwiO1xuXG5cdFx0XHRpZihoeWJyaWQpIHtcblx0XHRcdFx0cWlza2l0ICs9IFwiZnJvbSBzY2lweS5vcHRpbWl6ZSBpbXBvcnQgbWluaW1pemVcXG5cIjtcblx0XHRcdFx0cWlza2l0ICs9IFwiZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgQ291bnRlclxcblwiO1xuXHRcdFx0fVxuXG5cdFx0XHRxaXNraXQgKz0gXCJpbXBvcnQgbnVtcHkgYXMgbnBcXG5cIjtcblx0XHRcdHFpc2tpdCArPSBcIlxcblwiO1xuXG5cdFx0XHRpZihzaG90cykge1xuXHRcdFx0XHRxaXNraXQgKz0gXCJzaG90cyA9IFwiICsgc2hvdHMgKyBcIlxcblwiO1xuXHRcdFx0XHRxaXNraXQgKz0gXCJcXG5cIjtcblx0XHRcdH1cblxuXHRcdFx0dmFyIGdsb2JhbFBhcmFtcyA9IHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMucGFyYW1zID8gdGhpcy5vcHRpb25zLnBhcmFtcyA6IHt9O1xuXHRcdFx0aWYodGhpcy5wYXJhbXMubGVuZ3RoKSB7XG5cdFx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhcmFtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdHZhciBnbG9iYWxQYXJhbU5hbWUgPSB0aGlzLnBhcmFtc1tpXTtcblxuXHRcdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnbG9iYWxQYXJhbXNbZ2xvYmFsUGFyYW1OYW1lXSk7XG5cdFx0XHRcdFx0dmFyIGdsb2JhbFBhcmFtVmFsdWUgPSBub2RlLnRvU3RyaW5nKHsgaGFuZGxlcjogbWF0aFRvU3RyaW5nSGFuZGxlciB9KTtcblxuXHRcdFx0XHRcdHFpc2tpdCArPSBnbG9iYWxQYXJhbU5hbWUgKyBcIiA9IFwiICsgZ2xvYmFsUGFyYW1WYWx1ZSArIFwiXFxuXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0cWlza2l0ICs9IFwiXFxuXCI7XG5cdFx0XHR9XG5cblx0XHRcdGlmKGh5YnJpZCkge1xuXHRcdFx0XHRxaXNraXQgKz0gXCJ0b2xlcmFuY2UgPSBcIiArICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMudG9sZXJhbmNlID8gdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMudG9sZXJhbmNlIHx8IFwiMC4wMDFcIiA6IFwiMC4wMDFcIikgKyBcIlxcblwiO1xuXHRcdFx0XHRxaXNraXQgKz0gXCJcXG5cIjtcblx0XHRcdH1cblxuXHRcdFx0dmFyIHVzZWRHYXRlcyA9IGNpcmN1aXQudXNlZEdhdGVzKCk7XG5cdFx0XHRpZighZGVjb21wb3NlKSB7XG5cdFx0XHRcdHVzZWRHYXRlcy5tYXAoZnVuY3Rpb24odXNlZEdhdGVOYW1lKSB7XG5cdFx0XHRcdFx0dmFyIGJhc2ljR2F0ZSA9IGNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0XHRcdGlmKCFiYXNpY0dhdGUpIHtcblx0XHRcdFx0XHRcdHZhciBjdXN0b21HYXRlID0gc2VsZi5jdXN0b21HYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0XHRcdFx0aWYoY3VzdG9tR2F0ZSkge1xuXHRcdFx0XHRcdFx0XHR2YXIgY3VzdG9tQ2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRcdFx0XHRcdFx0XHRjdXN0b21DaXJjdWl0LmxvYWQoY3VzdG9tR2F0ZSk7XG5cdFx0XHRcdFx0XHRcdHZhciBuZXdPcHRpb25zID0ge1xuXHRcdFx0XHRcdFx0XHRcdGNvbW1lbnQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0ZGVjb21wb3NlOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdHZlcnNpb25TdHI6IHZlcnNpb25TdHIsXG5cdFx0XHRcdFx0XHRcdFx0cHJvdmlkZXJOYW1lOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdGJhY2tlbmROYW1lOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRhc0p1cHl0ZXI6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdHNob3RzOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRoeWJyaWQ6IG51bGxcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0cWlza2l0ICs9IGN1c3RvbUNpcmN1aXQuZXhwb3J0VG9RaXNraXQobmV3T3B0aW9ucywgdXNlZEdhdGVOYW1lLCBjaXJjdWl0UmVwbGFjZW1lbnQsIGluc2lkZVN1Ym1vZHVsZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0dmFyIGlkZW50YXRpb24gPSBcIlwiO1xuXHRcdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRcdGlkZW50YXRpb24gPSBcIiAgXCI7XG5cblx0XHRcdFx0cWlza2l0ICs9IFwiZGVmIG9iamVjdGl2ZV9mdW5jdGlvbihwYXJhbXMpOlxcblwiXG5cdFx0XHR9XG5cblx0XHRcdHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCJxYyA9IFF1YW50dW1DaXJjdWl0KClcXG5cIjtcblx0XHRcdHFpc2tpdCArPSBcIlxcblwiO1xuXG5cdFx0XHRxaXNraXQgKz0gaWRlbnRhdGlvbiArIFwicSA9IFF1YW50dW1SZWdpc3RlcihcIiArIGNpcmN1aXQubnVtUXViaXRzICsgXCIsICdxJylcXG5cIjtcblx0XHRcdGZvcih2YXIgY3JlZ05hbWUgaW4gdGhpcy5jcmVncykge1xuXHRcdFx0XHRxaXNraXQgKz0gaWRlbnRhdGlvbiArIGNyZWdOYW1lICsgXCIgPSBDbGFzc2ljYWxSZWdpc3RlcihcIiArICh0aGlzLmNyZWdzW2NyZWdOYW1lXS5sZW5ndGggfHwgMSkgKyBcIiwgJ1wiICsgY3JlZ05hbWUgKyBcIicpXFxuXCI7XG5cdFx0XHR9XG5cdFx0XHRxaXNraXQgKz0gXCJcXG5cIjtcblxuXHRcdFx0cWlza2l0ICs9IGlkZW50YXRpb24gKyBcInFjLmFkZF9yZWdpc3RlcihxKVxcblwiO1xuXHRcdFx0Zm9yKHZhciBjcmVnTmFtZSBpbiB0aGlzLmNyZWdzKSB7XG5cdFx0XHRcdHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCJxYy5hZGRfcmVnaXN0ZXIoXCIgKyBjcmVnTmFtZSArIFwiKVxcblwiO1xuXHRcdFx0fVxuXHRcdFx0cWlza2l0ICs9IFwiXFxuXCI7XG5cdFx0fVxuXHR9XG5cblx0dmFyIG51bUNvbHMgPSBjaXJjdWl0Lm51bUNvbHMoKTtcblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGNpcmN1aXQuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XHRcblx0XHRcdHZhciBxaXNraXRSZXBsYWNlbWVudCA9IG51bGw7XG5cdFx0XHR2YXIgcWlza2l0RXF1aXZhbGVudCA9IG51bGw7XG5cdFx0XHR2YXIgcWlza2l0Q29uZGl0aW9uID0gbnVsbDtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCkge1xuXHRcdFx0XHRcblx0XHRcdFx0cWlza2l0Q29uZGl0aW9uID0gZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24gJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnID8gZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiA6IG51bGw7XG5cblx0XHRcdFx0dmFyIGdhdGVEZWYgPSBjaXJjdWl0LmdldEdhdGVEZWYoZ2F0ZS5uYW1lKTtcblx0XHRcdFx0aWYoZ2F0ZURlZil7XG5cdFx0XHRcdFx0aWYoZ2F0ZURlZi5leHBvcnRJbmZvKSB7XG5cdFx0XHRcdFx0XHRpZihnYXRlRGVmLmV4cG9ydEluZm8ucWlza2l0ICYmIGdhdGVEZWYuZXhwb3J0SW5mby5xaXNraXQucmVwbGFjZW1lbnQpe1xuXHRcdFx0XHRcdFx0XHRxaXNraXRSZXBsYWNlbWVudCA9IGdhdGVEZWYuZXhwb3J0SW5mby5xaXNraXQucmVwbGFjZW1lbnQ7XG5cdFx0XHRcdFx0XHRcdHFpc2tpdFJlcGxhY2VtZW50Lm1hcChmdW5jdGlvbihyZXBsYWNlbWVudCl7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHJlcGxhY2VtZW50Q2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRcdFx0XHRcdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMucGFyYW1zKXtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBwYXJhbXMgPSBPYmplY3Qua2V5cyhnYXRlLm9wdGlvbnMucGFyYW1zKTtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciByZXBsYWNlbWVudFBhcmFtcyA9IE9iamVjdC5rZXlzKHJlcGxhY2VtZW50LnBhcmFtcyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRwYXJhbXMubWFwKGZ1bmN0aW9uKHBhcmFtKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYocmVwbGFjZW1lbnRQYXJhbXMuaW5kZXhPZihwYXJhbSkgPiAtMSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVwbGFjZW1lbnQucGFyYW1zW3BhcmFtXSA9IGdhdGUub3B0aW9ucy5wYXJhbXNbcGFyYW1dO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHR9XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRyZXBsYWNlbWVudENpcmN1aXQuYWRkR2F0ZShyZXBsYWNlbWVudC5uYW1lLCBjb2x1bW4sIGdhdGUud2lyZXMsIHtwYXJhbXM6IHJlcGxhY2VtZW50LnBhcmFtcywgY29uZGl0aW9uOiBxaXNraXRDb25kaXRpb259KTtcblx0XHRcdFx0XHRcdFx0XHR2YXIgbmV3T3B0aW9ucyA9IHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbW1lbnQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRkZWNvbXBvc2U6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdFx0dmVyc2lvblN0cjogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0XHRwcm92aWRlck5hbWU6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdFx0YmFja2VuZE5hbWU6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdFx0YXNKdXB5dGVyOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdHNob3RzOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdGh5YnJpZDogbnVsbFxuXHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0cWlza2l0ICs9IHJlcGxhY2VtZW50Q2lyY3VpdC5leHBvcnRUb1Fpc2tpdChuZXdPcHRpb25zLCBmYWxzZSwgdHJ1ZSwgISFleHBvcnRBc0dhdGVOYW1lIHx8IGluc2lkZVN1Ym1vZHVsZSk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmKGdhdGVEZWYuZXhwb3J0SW5mby5xaXNraXQgJiYgZ2F0ZURlZi5leHBvcnRJbmZvLnFpc2tpdC5lcXVpdmFsZW50KXtcblx0XHRcdFx0XHRcdFx0cWlza2l0RXF1aXZhbGVudCA9IGdhdGVEZWYuZXhwb3J0SW5mby5xaXNraXQuZXF1aXZhbGVudDtcblx0XHRcdFx0XHRcdFx0cWlza2l0RXF1aXZhbGVudC5tYXAoZnVuY3Rpb24oZXF1aXZhbGVudCl7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGVxdWl2YWxlbnRDaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGdhdGVXaXJlcyA9IGVxdWl2YWxlbnQud2lyZXMubGVuZ3RoID4gMSA/IGdhdGUud2lyZXMgOiBnYXRlLndpcmVzW2VxdWl2YWxlbnQud2lyZXNbMF1dO1xuXHRcdFx0XHRcdFx0XHRcdHZhciBlcVBhcmFtcyA9IHt9O1xuXHRcdFx0XHRcdFx0XHRcdGlmKGVxdWl2YWxlbnQucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgZ2F0ZVBhcmFtcyA9IHt9O1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBnYXRlUGFyYW1OYW1lIGluIGdhdGUub3B0aW9ucy5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRnYXRlUGFyYW1zW2dhdGVQYXJhbU5hbWVdID0gbWF0aC5ldmFsdWF0ZShnYXRlLm9wdGlvbnMucGFyYW1zW2dhdGVQYXJhbU5hbWVdKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGVxUGFyYW1OYW1lIGluIGVxdWl2YWxlbnQucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVxUGFyYW1zW2VxUGFyYW1OYW1lXSA9IG1hdGguZXZhbHVhdGUoZXF1aXZhbGVudC5wYXJhbXNbZXFQYXJhbU5hbWVdLCBnYXRlUGFyYW1zKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRlcXVpdmFsZW50Q2lyY3VpdC5hZGRHYXRlKGVxdWl2YWxlbnQubmFtZSwgY29sdW1uLCBnYXRlV2lyZXMsIHsgcGFyYW1zOiBlcVBhcmFtcywgY29uZGl0aW9uOiBxaXNraXRDb25kaXRpb24gfSk7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIG5ld09wdGlvbnMgPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb21tZW50OiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGVjb21wb3NlOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdHZlcnNpb25TdHI6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdFx0cHJvdmlkZXJOYW1lOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdGJhY2tlbmROYW1lOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdGFzSnVweXRlcjogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0XHRzaG90czogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0XHRoeWJyaWQ6IG51bGxcblx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRcdHFpc2tpdCArPSBlcXVpdmFsZW50Q2lyY3VpdC5leHBvcnRUb1Fpc2tpdChuZXdPcHRpb25zLCBmYWxzZSwgdHJ1ZSwgISFleHBvcnRBc0dhdGVOYW1lIHx8IGluc2lkZVN1Ym1vZHVsZSk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmKCFxaXNraXRSZXBsYWNlbWVudCAmJiAhcWlza2l0RXF1aXZhbGVudCkge1xuXHRcdFx0XHRcdGlmKGV4cG9ydEFzR2F0ZU5hbWUgfHwgaW5zaWRlU3VibW9kdWxlIHx8IGh5YnJpZCkge1xuXHRcdFx0XHRcdFx0cWlza2l0ICs9IFwiICBcIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZighcWlza2l0UmVwbGFjZW1lbnQgJiYgIXFpc2tpdEVxdWl2YWxlbnQpIHtcblxuXHRcdFx0XHRcdHZhciBnYXRlTmFtZSA9IGdhdGUubmFtZTtcblxuXHRcdFx0XHRcdHZhciBnYXRlUGFyYW1zID0gZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5wYXJhbXMgPyBnYXRlLm9wdGlvbnMucGFyYW1zIDoge307XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0aWYodGhpcy5iYXNpY0dhdGVzW2dhdGVOYW1lXSkge1xuXHRcdFx0XHRcdFx0cWlza2l0ICs9IFwicWMuXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdGlmKGdhdGVEZWYgJiYgZ2F0ZURlZi5leHBvcnRJbmZvICYmIGdhdGVEZWYuZXhwb3J0SW5mby5xaXNraXQgJiYgZ2F0ZURlZi5leHBvcnRJbmZvLnFpc2tpdC5uYW1lKXtcblx0XHRcdFx0XHRcdGdhdGVOYW1lID0gZ2F0ZURlZi5leHBvcnRJbmZvLnFpc2tpdC5uYW1lO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRnYXRlTmFtZSA9IGdhdGUubmFtZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0cWlza2l0ICs9IGdhdGVOYW1lICsgXCIoXCI7XG5cblx0XHRcdFx0XHR2YXIgYXJnQ291bnQgPSAwO1xuXHRcdFx0XHRcdGlmKGdhdGVQYXJhbXMpIHtcblx0XHRcdFx0XHRcdHZhciBnYXRlRGVmID0gdGhpcy5iYXNpY0dhdGVzW2dhdGUubmFtZV07XG5cdFx0XHRcdFx0XHRpZighZ2F0ZURlZikge1xuXHRcdFx0XHRcdFx0XHRnYXRlRGVmID0gdGhpcy5jdXN0b21HYXRlc1tnYXRlLm5hbWVdO1xuXG5cdFx0XHRcdFx0XHRcdHFpc2tpdCArPSBcInFjXCI7XG5cdFx0XHRcdFx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKGdhdGVEZWYpIHtcblx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtRGVmID0gZ2F0ZURlZi5wYXJhbXMgfHwgW107XG5cdFx0XHRcdFx0XHRcdHZhciBwYXJhbUNvdW50ID0gcGFyYW1EZWYubGVuZ3RoO1xuXHRcdFx0XHRcdFx0XHRpZihwYXJhbUNvdW50KSB7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBwID0gMDsgcCA8IHBhcmFtQ291bnQ7IHArKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHFpc2tpdCArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1OYW1lID0gcGFyYW1EZWZbcF07XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIC0tLVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gcHJlcGVuZCAnbnAnIHRvIG1hdGggY29uc3RhbnRzXG5cdFx0XHRcdFx0XHRcdFx0XHRpZihnYXRlUGFyYW1zW3BhcmFtTmFtZV0gfHwgZ2F0ZVBhcmFtc1twYXJhbU5hbWVdLnRvU3RyaW5nKCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIG5vZGUgPSBtYXRoLnBhcnNlKGdhdGVQYXJhbXNbcGFyYW1OYW1lXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHFpc2tpdCArPSBub2RlLnRvU3RyaW5nKHsgaGFuZGxlcjogbWF0aFRvU3RyaW5nSGFuZGxlciB9KTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdC8vIC0tLVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRhcmdDb3VudCsrO1xuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdGlmKGdhdGVOYW1lID09IFwiY3VcIiAmJiAhZ2F0ZVBhcmFtc1tcImdhbW1hXCJdKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRxaXNraXQgKz0gXCIsIDBcIjtcblx0XHRcdFx0XHRcdFx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRmb3IodmFyIHcgPSAwOyB3IDwgZ2F0ZS53aXJlcy5sZW5ndGg7IHcrKykge1xuXHRcdFx0XHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdHFpc2tpdCArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZihleHBvcnRBc0dhdGVOYW1lIHx8IGluc2lkZVN1Ym1vZHVsZSkge1xuXHRcdFx0XHRcdFx0XHRxaXNraXQgKz0gcXViaXRMZXR0ZXIoZ2F0ZS53aXJlc1t3XSwgY2lyY3VpdC5udW1RdWJpdHMpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cWlza2l0ICs9IFwicVtcIiArIGdhdGUud2lyZXNbd10gKyBcIl1cIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYoZ2F0ZU5hbWUgPT0gXCJtZWFzdXJlXCIgJiYgZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jcmVnKSB7XG5cdFx0XHRcdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0XHRcdFx0cWlza2l0ICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0cWlza2l0ICs9IGdhdGUub3B0aW9ucy5jcmVnLm5hbWUgKyBcIltcIiArIGdhdGUub3B0aW9ucy5jcmVnLmJpdCArIFwiXVwiO1xuXHRcdFx0XHRcdFx0YXJnQ291bnQrKztcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRxaXNraXQgKz0gXCIpXCI7XHRcdFx0XHRcdFxuXG5cdFx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24gJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnKSB7XG5cdFx0XHRcdFx0XHRxaXNraXQgKz0gXCIuY19pZihcIiArIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZyArIFwiLCBcIiArIGdhdGUub3B0aW9ucy5jb25kaXRpb24udmFsdWUgKyBcIilcIjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRxaXNraXQgKz0gXCJcXG5cIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmKCFjaXJjdWl0UmVwbGFjZW1lbnQpIHtcblx0XHRpZihleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0XHRxaXNraXQgKz0gXCJcXG5cIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cWlza2l0ICs9IFwiXFxuXCI7XG5cblx0XHRcdHZhciBpZGVudGF0aW9uID0gXCJcIjtcblx0XHRcdGlmKGh5YnJpZCkge1xuXHRcdFx0XHRpZGVudGF0aW9uID0gXCIgIFwiO1xuXHRcdFx0fVxuXG5cdFx0XHRpZihwcm92aWRlck5hbWUgPT0gXCJBZXJcIikge1xuXHRcdFx0XHRxaXNraXQgKz0gaWRlbnRhdGlvbiArIFwiYmFja2VuZCA9IEFlci5nZXRfYmFja2VuZCgnXCIgKyBiYWNrZW5kTmFtZSArIFwiJylcXG5cIjtcblx0XHRcdFx0cWlza2l0ICs9IGlkZW50YXRpb24gKyBcImpvYiA9IGV4ZWN1dGUocWMsIGJhY2tlbmQ9YmFja2VuZFwiO1xuXHRcdFx0XHRpZihzaG90cykge1xuXHRcdFx0XHRcdHFpc2tpdCArPSBcIiwgc2hvdHM9c2hvdHNcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRxaXNraXQgKz0gXCIpXFxuXCI7XG5cdFx0XHRcdHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCJqb2JfcmVzdWx0ID0gam9iLnJlc3VsdCgpXFxuXCI7XG5cblx0XHRcdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRcdFx0cWlza2l0ICs9IGlkZW50YXRpb24gKyBcImNvdW50cyA9IENvdW50ZXIoam9iX3Jlc3VsdC5nZXRfY291bnRzKHFjKSlcXG5cIjtcblx0XHRcdFx0XHRxaXNraXQgKz0gXCJcXG5cIlxuXHRcdFx0XHRcdHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCIjIENBTENVTEFURSBDT1NUIEhFUkVcXG5cIjtcblxuXHRcdFx0XHRcdHZhciBjb3N0RnVuY3Rpb24gPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMuY29zdEZ1bmN0aW9uID8gdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMuY29zdEZ1bmN0aW9uLnB5dGhvbiB8fCBcIlwiIDogXCJcIjtcblx0XHRcdFx0XHRpZighY29zdEZ1bmN0aW9uLnRyaW0oKSkge1xuXHRcdFx0XHRcdFx0Y29zdEZ1bmN0aW9uID0gXCJjb3N0ID0gMFwiO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHFpc2tpdCArPSBhZGp1c3RJZGVudGF0aW9uKGNvc3RGdW5jdGlvbiwgaWRlbnRhdGlvbik7XG5cblx0XHRcdFx0XHRxaXNraXQgKz0gXCJcXG5cIlxuXHRcdFx0XHRcdHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCJyZXR1cm4gY29zdFxcblwiXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cWlza2l0ICs9IGlkZW50YXRpb24gKyBcInByaW50KGpvYl9yZXN1bHQuZ2V0X2NvdW50cyhxYykpXFxuXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYocHJvdmlkZXJOYW1lID09IFwiSUJNUVwiKSB7XG5cdFx0XHRcdHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCJJQk1RLmxvYWRfYWNjb3VudCgpXFxuXCI7XG5cdFx0XHRcdHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCJwcm92aWRlciA9IElCTVEuZ2V0X3Byb3ZpZGVyKGh1Yj1cXFwiaWJtLXFcXFwiLCBncm91cD1cXFwib3BlblxcXCIsIHByb2plY3Q9XFxcIm1haW5cXFwiKVxcblwiO1xuXHRcdFx0XHRpZihiYWNrZW5kTmFtZSkge1xuXHRcdFx0XHRcdHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCJiYWNrZW5kID0gcHJvdmlkZXIuZ2V0X2JhY2tlbmQoXFxcIlwiICsgYmFja2VuZE5hbWUgKyBcIlxcXCIpXFxuXCI7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdCAgcWlza2l0ICs9IGlkZW50YXRpb24gKyBcImJhY2tlbmRzID0gcHJvdmlkZXIuYmFja2VuZHMoKVxcblwiO1xuXHRcdFx0XHRcdHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCJiYWNrZW5kID0gbGVhc3RfYnVzeShiYWNrZW5kcylcXG5cIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRxaXNraXQgKz0gaWRlbnRhdGlvbiArIFwiam9iID0gZXhlY3V0ZShxYywgYmFja2VuZD1iYWNrZW5kXCI7XG5cdFx0XHRcdGlmKHNob3RzKSB7XG5cdFx0XHRcdFx0cWlza2l0ICs9IFwiLCBzaG90cz1zaG90c1wiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHFpc2tpdCArPSBcIilcXG5cIjtcblx0XHRcdFx0cWlza2l0ICs9IGlkZW50YXRpb24gKyBcImpvYl9yZXN1bHQgPSBqb2IucmVzdWx0KClcXG5cIjtcblxuXHRcdFx0XHRpZihoeWJyaWQpIHtcblx0XHRcdFx0XHRxaXNraXQgKz0gaWRlbnRhdGlvbiArIFwiY291bnRzID0gQ291bnRlcihqb2JfcmVzdWx0LmdldF9jb3VudHMocWMpKVxcblwiO1xuXHRcdFx0XHRcdHFpc2tpdCArPSBcIlxcblwiXG5cdFx0XHRcdFx0cWlza2l0ICs9IGlkZW50YXRpb24gKyBcIiMgQ0FMQ1VMQVRFIENPU1QgSEVSRVxcblwiO1xuXG5cdFx0XHRcdFx0dmFyIGNvc3RGdW5jdGlvbiA9IHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucy5jb3N0RnVuY3Rpb24gPyB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucy5jb3N0RnVuY3Rpb24ucHl0aG9uIHx8IFwiXCIgOiBcIlwiO1xuXHRcdFx0XHRcdGlmKCFjb3N0RnVuY3Rpb24udHJpbSgpKSB7XG5cdFx0XHRcdFx0XHRjb3N0RnVuY3Rpb24gPSBcImNvc3QgPSAwXCI7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cWlza2l0ICs9IGFkanVzdElkZW50YXRpb24oY29zdEZ1bmN0aW9uLCBpZGVudGF0aW9uKTtcblxuXHRcdFx0XHRcdHFpc2tpdCArPSBcIlxcblwiXG5cdFx0XHRcdFx0cWlza2l0ICs9IGlkZW50YXRpb24gKyBcInJldHVybiBjb3N0XFxuXCJcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRxaXNraXQgKz0gaWRlbnRhdGlvbiArIFwicHJpbnQoam9iX3Jlc3VsdC5nZXRfY291bnRzKHFjKSlcXG5cIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZihoeWJyaWQpIHtcblx0XHRcdFx0dmFyIGdsb2JhbFBhcmFtTGlzdCA9IFwiXCI7XG5cdFx0XHRcdHRoaXMucGFyYW1zLm1hcChmdW5jdGlvbihnbG9iYWxQYXJhbU5hbWUsIGdsb2JhbFBhcmFtSW5kZXgpIHtcblx0XHRcdFx0XHRpZihnbG9iYWxQYXJhbUluZGV4ID4gMCkge1xuXHRcdFx0XHRcdFx0Z2xvYmFsUGFyYW1MaXN0ICs9IFwiLCBcIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Z2xvYmFsUGFyYW1MaXN0ICs9IGdsb2JhbFBhcmFtTmFtZTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0cWlza2l0ICs9IFwiXFxuXCI7XG5cdFx0XHRcdHFpc2tpdCArPSBcInBhcmFtcyA9IG5wLmFycmF5KFtcIiArIGdsb2JhbFBhcmFtTGlzdCArIFwiXSlcXG5cIjtcblx0XHRcdFx0cWlza2l0ICs9IFwiXFxuXCI7XG5cdFx0XHRcdHFpc2tpdCArPSBcIm1pbmltdW0gPSBtaW5pbWl6ZShvYmplY3RpdmVfZnVuY3Rpb24sIHBhcmFtcywgbWV0aG9kPVxcXCJcIiArICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMub3B0aW1pemVyID8gdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMub3B0aW1pemVyIDogXCJQb3dlbGxcIikgKyBcIlxcXCIsIHRvbD10b2xlcmFuY2UpXFxuXCI7XG5cdFx0XHRcdHFpc2tpdCArPSBcInByaW50KFxcXCJjb3N0OlxcXCIsIG1pbmltdW0uZnVuLCBcXFwicGFyYW1zOlxcXCIsIG1pbmltdW0ueClcXG5cIjtcblx0XHRcdH1cblx0XHR9XG5cblxuXHRcdGlmKGFzSnVweXRlcikge1xuXHRcdFx0dmFyIG5vdGVib29rID0ge1xuXHRcdFx0XHRtZXRhZGF0YToge1xuXHRcdFx0XHRcdGtlcm5lbHNwZWM6IHtcblx0XHRcdFx0XHRcdGRpc3BsYXlfbmFtZTogXCJQeXRob24gM1wiLFxuXHRcdFx0XHRcdFx0bGFuZ3VhZ2U6IFwicHl0aG9uXCIsXG5cdFx0XHRcdFx0XHRuYW1lOiBcInB5dGhvbjNcIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0bmJmb3JtYXQ6IDQsXG5cdFx0XHRcdG5iZm9ybWF0X21pbm9yOiAwLFxuXHRcdFx0XHRjZWxsczogW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGNlbGxfdHlwZTogXCJjb2RlXCIsXG5cdFx0XHRcdFx0XHRzb3VyY2U6IHFpc2tpdCxcblx0XHRcdFx0XHRcdG1ldGFkYXRhOiB7XG5cblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRvdXRwdXRzOiBbXSxcblx0XHRcdFx0XHRcdGV4ZWN1dGlvbl9jb3VudDogbnVsbFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XVxuXHRcdFx0fTtcblx0XHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShub3RlYm9vayk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHFpc2tpdDtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRUb1F1RVNUID0gZnVuY3Rpb24ob3B0aW9ucywgZXhwb3J0QXNHYXRlTmFtZSwgZGVmaW5lZEZ1bmMpIHtcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0dmFyIGNvbW1lbnQgPSBvcHRpb25zLmNvbW1lbnQ7XG5cdHZhciBkZWNvbXBvc2UgPSBvcHRpb25zLmRlY29tcG9zZTtcblxuXHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0ZGVmaW5lZEZ1bmMgPSBkZWZpbmVkRnVuYyB8fCBbXTtcblxuXHR2YXIgY2lyY3VpdCA9IG51bGw7XG5cdHZhciBmdW5jdGlvbnMgPSBbXCJ1bml0YXJ5XCIsXCJjb250cm9sbGVkVW5pdGFyeVwiXTtcblxuXHQvLyBkZWNvbXBvc2UgP1xuXHR2YXIgY2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRjaXJjdWl0LmxvYWQodGhpcy5zYXZlKGRlY29tcG9zZSkpO1xuXG5cdHZhciBxdWVzdCA9IFwiXCI7XG5cblx0Ly8gY29tbWVudFxuXHRpZihjb21tZW50KSB7XG5cdFx0dmFyIGNvbW0gPSAoY29tbWVudCB8fCBcIlwiKS5zcGxpdChcIlxcblwiKTtcblx0XHRjb21tLm1hcChmdW5jdGlvbihjbGluZSkge1xuXHRcdFx0aWYoY2xpbmUubGVuZ3RoID49IDIgJiYgY2xpbmVbMF0gIT0gXCIvXCIgJiYgY2xpbmVbMV0gIT0gXCIvXCIpIHtcblx0XHRcdFx0cXVlc3QgKz0gXCIvLyBcIjtcblx0XHRcdH1cblx0XHRcdHF1ZXN0ICs9IGNsaW5lO1xuXHRcdFx0cXVlc3QgKz0gXCJcXG5cIjtcblx0XHR9KTtcblx0fVxuXG5cdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLm51bVF1Yml0czsgaSsrKSB7XG5cdFx0dmFyIGdhdGVzID0gdGhpcy5nYXRlc1tpXTtcblx0XHRmb3IodmFyIGogPSAwOyBqIDwgZ2F0ZXMubGVuZ3RoOyBqKyspIHtcblx0XHRcdHZhciBnYXRlID0gZ2F0ZXNbal07XG5cdFx0XHRpZighZ2F0ZSB8fCAhdGhpcy5iYXNpY0dhdGVzW2dhdGUubmFtZV0pe1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYodGhpcy5iYXNpY0dhdGVzW2dhdGUubmFtZV0uZXhwb3J0SW5mbyAmJiB0aGlzLmJhc2ljR2F0ZXNbZ2F0ZS5uYW1lXS5leHBvcnRJbmZvLnF1ZXN0KSB7XG5cdFx0XHRcdHZhciBxdWVzdE5hbWUgPSB0aGlzLmJhc2ljR2F0ZXNbZ2F0ZS5uYW1lXS5leHBvcnRJbmZvLnF1ZXN0Lm5hbWU7XG5cdFx0XHRcdGlmKGRlZmluZWRGdW5jLmluY2x1ZGVzKGdhdGUubmFtZSkpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZihmdW5jdGlvbnMuaW5jbHVkZXMocXVlc3ROYW1lKSB8fCB0aGlzLmJhc2ljR2F0ZXNbZ2F0ZS5uYW1lXS5leHBvcnRJbmZvLnF1ZXN0LmZ1bmMgKSB7XG5cdFx0XHRcdFx0ZGVmaW5lZEZ1bmMucHVzaChnYXRlLm5hbWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdHF1ZXN0ICs9IFwiUXVyZWcgXCIgKyBleHBvcnRBc0dhdGVOYW1lICsgXCIoUXVyZWcgcXViaXRzXCI7XG5cblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgY2lyY3VpdC5udW1RdWJpdHM7IGkrKykge1xuXHRcdFx0cXVlc3QgKz0gXCIsIGNvbnN0IGludCBxXCI7XG5cdFx0XHRxdWVzdCArPSBpO1xuXHRcdH1cblxuXHRcdGlmKGNpcmN1aXQucGFyYW1zICYmIGNpcmN1aXQucGFyYW1zLmxlbmd0aCkge1xuXHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNpcmN1aXQucGFyYW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdHF1ZXN0ICs9IFwiLCBkb3VibGUgXCIgKyBjaXJjdWl0LnBhcmFtc1tpXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cXVlc3QgKz0gXCIpIHtcXG5cIjtcblx0fSBlbHNlIHtcblx0XHRxdWVzdCArPSBcIiNpbmNsdWRlIDxtYXRoLmg+XFxuI2luY2x1ZGUgXFxcIlF1RVNULmhcXFwiXFxuXFxuXCI7XG5cdFx0cXVlc3QgKz0gXCIjaWZuZGVmIE1fUElcXG4jZGVmaW5lIE1fUEkgMy4xNDE1OTI2NVxcbiNlbmRpZlxcblxcblwiO1xuXG5cdFx0dmFyIGN1c3RvbVF1RVNUID0gW107XG5cblxuXHRcdHZhciB1c2VkR2F0ZXMgPSBjaXJjdWl0LnVzZWRHYXRlcygpO1xuXHRcdGlmKCFkZWNvbXBvc2UpIHtcblx0XHRcdHVzZWRHYXRlcy5tYXAoZnVuY3Rpb24odXNlZEdhdGVOYW1lKSB7XG5cdFx0XHRcdHZhciBiYXNpY0dhdGUgPSBjaXJjdWl0LmJhc2ljR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRcdFx0aWYoIWJhc2ljR2F0ZSkge1xuXHRcdFx0XHRcdHZhciBjdXN0b21HYXRlID0gc2VsZi5jdXN0b21HYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0XHRcdGlmKGN1c3RvbUdhdGUpIHtcblx0XHRcdFx0XHRcdHZhciBjdXN0b21DaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdFx0XHRcdFx0XHRjdXN0b21DaXJjdWl0LmxvYWQoY3VzdG9tR2F0ZSk7XG5cdFx0XHRcdFx0XHR2YXIgbmV3T3B0aW9ucyA9IHtcblx0XHRcdFx0XHRcdFx0Y29tbWVudDogXCJcIixcblx0XHRcdFx0XHRcdFx0ZGVjb21wb3NlOiBmYWxzZVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdGN1c3RvbVF1RVNULnB1c2goY3VzdG9tQ2lyY3VpdC5leHBvcnRUb1F1RVNUKG5ld09wdGlvbnMsIHVzZWRHYXRlTmFtZSwgZGVmaW5lZEZ1bmMpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBkZWZpbmVkRnVuYy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGdhdGVOYW1lID0gZGVmaW5lZEZ1bmNbaV07XG5cdFx0XHR2YXIgcXVlc3ROYW1lID0gdGhpcy5iYXNpY0dhdGVzW2dhdGVOYW1lXS5leHBvcnRJbmZvLnF1ZXN0Lm5hbWU7XG5cdFx0XHRzd2l0Y2gocXVlc3ROYW1lKSB7XG5cdFx0XHRcdGNhc2UgXCJ1bml0YXJ5XCI6XG5cdFx0XHRcdGNhc2UgXCJjb250cm9sbGVkVW5pdGFyeVwiOiB7XG5cdFx0XHRcdFx0bWF0cml4ID0gdGhpcy5iYXNpY0dhdGVzW2dhdGVOYW1lXS5leHBvcnRJbmZvLnF1ZXN0Lm1hdHJpeDtcblx0XHRcdFx0XHR2YXIgcXVlc3RQYXJhbXMgPSB0aGlzLmJhc2ljR2F0ZXNbZ2F0ZU5hbWVdLmV4cG9ydEluZm8ucXVlc3QucGFyYW1zO1xuXHRcdFx0XHRcdHF1ZXN0ICs9IFwidm9pZCBcIiArIGdhdGVOYW1lICsgXCIoUXVyZWcgcXViaXRzLCBjb25zdCBpbnQgcVwiO1xuXHRcdFx0XHRcdGlmKHF1ZXN0TmFtZSA9PSBcImNvbnRyb2xsZWRVbml0YXJ5XCIpIHtcblx0XHRcdFx0XHRcdHF1ZXN0ICs9IFwiMSwgY29uc3QgaW50IHEyXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChxdWVzdFBhcmFtcykge1xuXHRcdFx0XHRcdFx0Zm9yKHZhciBqPTA7IGogPCBxdWVzdFBhcmFtcy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRxdWVzdCArPSBcIiwgZG91YmxlIFwiICsgcXVlc3RQYXJhbXNbal07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHF1ZXN0ICs9IFwiKSB7XFxuXCI7XG5cdFx0XHRcdFx0cXVlc3QgKz0gXCIgICAgQ29tcGxleE1hdHJpeDIgdTtcXG5cIjtcblx0XHRcdFx0XHRxdWVzdCArPSBcIiAgICB1LnIwYzAgPSAoQ29tcGxleCkgey5yZWFsPVwiICsgbWF0cml4WzBdWzBdWzBdICsgXCIsIC5pbWFnPSBcIiArIG1hdHJpeFswXVswXVsxXSArIFwifTtcXG5cIjtcblx0XHRcdFx0XHRxdWVzdCArPSBcIiAgICB1LnIwYzEgPSAoQ29tcGxleCkgey5yZWFsPVwiICsgbWF0cml4WzBdWzFdWzBdICsgXCIsIC5pbWFnPSBcIiArIG1hdHJpeFswXVsxXVsxXSArIFwifTtcXG5cIjtcblx0XHRcdFx0XHRxdWVzdCArPSBcIiAgICB1LnIxYzAgPSAoQ29tcGxleCkgey5yZWFsPVwiICsgbWF0cml4WzFdWzBdWzBdICsgXCIsIC5pbWFnPSBcIiArIG1hdHJpeFsxXVswXVsxXSArIFwifTtcXG5cIjtcblx0XHRcdFx0XHRxdWVzdCArPSBcIiAgICB1LnIxYzEgPSAoQ29tcGxleCkgey5yZWFsPVwiICsgbWF0cml4WzFdWzFdWzBdICsgXCIsIC5pbWFnPSBcIiArIG1hdHJpeFsxXVsxXVsxXSArIFwifTtcXG5cIjtcblx0XHRcdFx0XHRxdWVzdCArPSBcIiAgICBcIiArIHF1ZXN0TmFtZSArIFwiKHF1Yml0cywgcVwiXG5cdFx0XHRcdFx0aWYocXVlc3ROYW1lID09IFwiY29udHJvbGxlZFVuaXRhcnlcIikge1xuXHRcdFx0XHRcdFx0cXVlc3QgKz0gXCIxLCBxMlwiO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRxdWVzdCArPSBcIiwgdSk7XFxufVxcblxcblwiO1xuXHRcdFx0XHR9IGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OiB7IHF1ZXN0ICs9IHRoaXMuYmFzaWNHYXRlc1tnYXRlTmFtZV0uZXhwb3J0SW5mby5xdWVzdC5mdW5jICsgXCJcXG5cXG5cIjsgfSBicmVhaztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgY3VzdG9tUXVFU1QubGVuZ3RoOyBpKyspIHtcblx0XHRcdHF1ZXN0ICs9IGN1c3RvbVF1RVNUW2ldO1xuXHRcdH1cblxuXHRcdHF1ZXN0ICs9IFwiaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkge1xcblwiO1xuXHRcdHF1ZXN0ICs9IFwiICAgIFF1RVNURW52IGVudiA9IGNyZWF0ZVF1RVNURW52KCk7XFxuXCI7XG5cdFx0cXVlc3QgKz0gXCIgICAgUXVyZWcgcXViaXRzID0gY3JlYXRlUXVyZWcoXCIgKyBjaXJjdWl0Lm51bVF1Yml0cyArXCIsIGVudik7XFxuXCI7XG5cdFx0cXVlc3QgKz0gXCIgICAgaW50IG1lYXN1cmVkW1wiICsgY2lyY3VpdC5udW1RdWJpdHMgK1wiXTtcXG5cXG5cIjtcblx0fVxuXG5cdHF1ZXN0ICs9IFwiXFxuXCI7XG5cblx0dmFyIG51bUNvbHMgPSBjaXJjdWl0Lm51bUNvbHMoKTtcblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGNpcmN1aXQuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblxuXHRcdFx0XHRpZihnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcpIHtcblx0XHRcdFx0XHRxdWVzdCArPSBcImlmKFwiICsgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnICsgXCI9PVwiICsgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi52YWx1ZSArIFwiKSB7XFxuXCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR2YXIgZ2F0ZU5hbWUgPSBnYXRlLm5hbWU7XG5cdFx0XHRcdHZhciBnYXRlUGFyYW1zID0gZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5wYXJhbXMgPyBnYXRlLm9wdGlvbnMucGFyYW1zIDoge307XG5cdFx0XHRcdHZhciBnYXRlRGVmID0gdGhpcy5iYXNpY0dhdGVzW2dhdGVOYW1lXTtcblxuXHRcdFx0XHRpZihnYXRlTmFtZSA9PSBcIm1lYXN1cmVcIikge1xuXHRcdFx0XHRcdHF1ZXN0ICs9IFwiICAgIG1lYXN1cmVkW1wiICsgZ2F0ZS53aXJlc1swXSArIFwiXSA9IG1lYXN1cmUocXViaXRzLCBcIiArIGdhdGUud2lyZXNbMF07XG5cdFx0XHRcdH0gZWxzZSBpZihnYXRlRGVmKSB7XG5cdFx0XHRcdFx0dmFyIHF1ZXN0TmFtZSA9IGdhdGVEZWYuZXhwb3J0SW5mby5xdWVzdC5uYW1lO1xuXHRcdFx0XHRcdHZhciBxdWVzdFBhcmFtcyA9IGdhdGVEZWYuZXhwb3J0SW5mby5xdWVzdC5wYXJhbXM7XG5cblx0XHRcdFx0XHRpZihmdW5jdGlvbnMuaW5jbHVkZXMocXVlc3ROYW1lKSkge1xuXHRcdFx0XHRcdFx0cXVlc3QgKz0gXCIgICAgXCIgKyBnYXRlTmFtZSArIFwiKHF1Yml0c1wiO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRxdWVzdCArPSBcIiAgICBcIiArIHF1ZXN0TmFtZSArIFwiKHF1Yml0c1wiO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGZvcih2YXIgdyA9IDA7IHcgPCBnYXRlLndpcmVzLmxlbmd0aDsgdysrKSB7XG5cdFx0XHRcdFx0XHRcdGlmKGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRcdFx0XHRcdFx0XHRxdWVzdCArPSBcIiwgcVwiICsgZ2F0ZS53aXJlc1t3XTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRxdWVzdCArPSBcIiwgXCIgKyBnYXRlLndpcmVzW3ddO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYocXVlc3RQYXJhbXMpIHtcblx0XHRcdFx0XHRcdHN3aXRjaChxdWVzdE5hbWUpe1xuXHRcdFx0XHRcdFx0XHRjYXNlIFwiY29tcGFjdFVuaXRhcnlcIjoge1xuXHRcdFx0XHRcdFx0XHRcdHF1ZXN0ICs9IFwiLCBcIiArIHF1ZXN0UGFyYW1zLmFscGhhO1xuXHRcdFx0XHRcdFx0XHRcdHF1ZXN0ICs9IFwiLCBcIiArIHF1ZXN0UGFyYW1zLmJldGE7XG5cdFx0XHRcdFx0XHRcdH0gYnJlYWs7XG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJwaGFzZVNoaWZ0XCI6XG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJjb250cm9sbGVkUGhhc2VTaGlmdFwiOiB7XG5cdFx0XHRcdFx0XHRcdFx0aWYocXVlc3RQYXJhbXMudGhldGEpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHF1ZXN0ICs9IFwiLCBcIiArIHF1ZXN0UGFyYW1zLnRoZXRhO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Z2F0ZURlZiA9IHRoaXMuY3VzdG9tR2F0ZXNbZ2F0ZU5hbWVdO1xuXHRcdFx0XHRcdHF1ZXN0ICs9IFwiICAgIHF1Yml0cyA9IFwiICsgZ2F0ZU5hbWUgKyBcIihxdWJpdHNcIjtcblxuXHRcdFx0XHRcdGZvcih2YXIgdyA9IDA7IHcgPCBnYXRlLndpcmVzLmxlbmd0aDsgdysrKSB7XG5cdFx0XHRcdFx0XHRcdHF1ZXN0ICs9IFwiLCBcIiArIGdhdGUud2lyZXNbd107XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYoZ2F0ZVBhcmFtcykge1xuXHRcdFx0XHRcdHZhciBnYXRlRGVmID0gdGhpcy5iYXNpY0dhdGVzW2dhdGVOYW1lXTtcblx0XHRcdFx0XHRpZighZ2F0ZURlZikge1xuXHRcdFx0XHRcdFx0Z2F0ZURlZiA9IHRoaXMuY3VzdG9tR2F0ZXNbZ2F0ZU5hbWVdO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKGdhdGVEZWYpIHtcblx0XHRcdFx0XHRcdHZhciBwYXJhbURlZiA9IGdhdGVEZWYucGFyYW1zIHx8IFtdO1xuXHRcdFx0XHRcdFx0dmFyIHBhcmFtQ291bnQgPSBwYXJhbURlZi5sZW5ndGg7XG5cblx0XHRcdFx0XHRcdGlmKHBhcmFtQ291bnQpIHtcblx0XHRcdFx0XHRcdFx0Zm9yKHZhciBwID0gMDsgcCA8IHBhcmFtQ291bnQ7IHArKykge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBwYXJhbU5hbWUgPSBwYXJhbURlZltwXTtcblx0XHRcdFx0XHRcdFx0XHRxdWVzdCArPSBcIiwgXCIgKyBnYXRlUGFyYW1zW3BhcmFtTmFtZV07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRxdWVzdCArPSBcIik7XFxuXCI7XG5cblx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24gJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnKSB7XG5cdFx0XHRcdFx0cXVlc3QgKz0gXCJ9XFxuXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZihleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0cXVlc3QgKz0gXCJcXG4gICAgcmV0dXJuIHF1Yml0cztcXG59XFxuXFxuXCI7XG5cdH0gZWxzZSB7XG5cdFx0cXVlc3QgKz0gXCJcXG4gICAgZGVzdHJveVF1cmVnKHF1Yml0cywgZW52KTtcXG5cIjtcblx0XHRxdWVzdCArPSBcIiAgICBkZXN0cm95UXVFU1RFbnYoZW52KTtcXG5cIjtcblx0XHRxdWVzdCArPSBcIiAgICByZXR1cm4gMDtcXG59XFxuXCI7XG5cdH1cblxuXHRyZXR1cm4gcXVlc3Q7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRUb1FBU00gPSBmdW5jdGlvbihvcHRpb25zLCBleHBvcnRBc0dhdGVOYW1lLCBjaXJjdWl0UmVwbGFjZW1lbnQsIGluc2lkZVN1Ym1vZHVsZSkge1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR2YXIgY29tbWVudCA9IG9wdGlvbnMuY29tbWVudDtcblx0dmFyIGRlY29tcG9zZSA9IG9wdGlvbnMuZGVjb21wb3NlO1xuXHR2YXIgY29tcGF0aWJpbGl0eU1vZGUgPSBvcHRpb25zLmNvbXBhdGliaWxpdHlNb2RlO1xuXG5cdHZhciBzZWxmID0gdGhpcztcblxuXHR2YXIgZ2xvYmFsUGFyYW1zID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5wYXJhbXMgPyB0aGlzLm9wdGlvbnMucGFyYW1zIDoge307XG5cblx0dmFyIG1hdGhUb1N0cmluZ0hhbmRsZXIgPSBmdW5jdGlvbihub2RlLCBvcHRpb25zKSB7XG5cdFx0aWYobm9kZS5pc1N5bWJvbE5vZGUpIHtcblx0XHRcdGlmKCFjb21wYXRpYmlsaXR5TW9kZSAmJiBzZWxmLnBhcmFtcy5pbmRleE9mKG5vZGUubmFtZSkgPj0gMCkge1xuXHRcdFx0XHRyZXR1cm4gZ2xvYmFsUGFyYW1zW25vZGUubmFtZV07XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdHZhciBjaXJjdWl0ID0gbnVsbDtcblxuXHQvLyBkZWNvbXBvc2UgP1xuXHR2YXIgY2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRjaXJjdWl0LmxvYWQodGhpcy5zYXZlKGRlY29tcG9zZSkpO1xuXG5cdHZhciBxYXNtID0gXCJcIjtcblxuXHQvLyBjb21tZW50XG5cdGlmKGNvbW1lbnQpIHtcblx0XHR2YXIgY29tbSA9IChjb21tZW50IHx8IFwiXCIpLnNwbGl0KFwiXFxuXCIpO1xuXHRcdGNvbW0ubWFwKGZ1bmN0aW9uKGNsaW5lKSB7XG5cdFx0XHRpZihjbGluZS5sZW5ndGggPj0gMiAmJiBjbGluZVswXSAhPSBcIi9cIiAmJiBjbGluZVsxXSAhPSBcIi9cIikge1xuXHRcdFx0XHRxYXNtICs9IFwiLy8gXCI7XG5cdFx0XHR9XG5cdFx0XHRxYXNtICs9IGNsaW5lO1xuXHRcdFx0cWFzbSArPSBcIlxcblwiO1xuXHRcdH0pO1xuXHR9XG5cblx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdHFhc20gKz0gXCJnYXRlIFwiICsgZXhwb3J0QXNHYXRlTmFtZTtcblxuXHRcdGlmKGNpcmN1aXQucGFyYW1zICYmIGNpcmN1aXQucGFyYW1zLmxlbmd0aCkge1xuXHRcdFx0cWFzbSArPSBcIihcIjtcblx0XHRcdGZvcih2YXIgcGMgPSAwOyBwYyA8IGNpcmN1aXQucGFyYW1zLmxlbmd0aDsgcGMrKykge1xuXHRcdFx0XHRpZihwYyA+IDApIHtcblx0XHRcdFx0XHRxYXNtICs9IFwiLCBcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRxYXNtICs9IGNpcmN1aXQucGFyYW1zW3BjXTtcblx0XHRcdH1cblx0XHRcdHFhc20gKz0gXCIpXCI7XG5cdFx0fVxuXG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNpcmN1aXQubnVtUXViaXRzOyBpKyspIHtcblx0XHRcdGlmKGkgPT0gMCkge1xuXHRcdFx0XHRxYXNtICs9IFwiIFwiO1xuXHRcdFx0fVxuXHRcdFx0aWYoaSA+IDApIHtcblx0XHRcdFx0cWFzbSArPSBcIiwgXCI7XG5cdFx0XHR9XG5cdFx0XHRxYXNtICs9IHF1Yml0TGV0dGVyKGksIGNpcmN1aXQubnVtUXViaXRzKTtcblx0XHR9XG5cdFx0cWFzbSArPSBcIlxcbntcXG5cIjtcblx0fSBlbHNlIHtcblx0XHRpZighY2lyY3VpdFJlcGxhY2VtZW50KXtcblx0XHRcdHFhc20gKz0gXCJPUEVOUUFTTSAyLjA7XFxuXCI7XG5cdFx0XHRxYXNtICs9IFwiaW5jbHVkZSBcXFwicWVsaWIxLmluY1xcXCI7XFxuXCI7XG5cdFx0XHRxYXNtICs9IFwicXJlZyBxW1wiICsgY2lyY3VpdC5udW1RdWJpdHMgKyBcIl07XFxuXCI7XG5cblx0XHRcdGZvcih2YXIgY3JlZ05hbWUgaW4gY2lyY3VpdC5jcmVncykge1xuXHRcdFx0XHRxYXNtICs9IFwiY3JlZyBcIiArIGNyZWdOYW1lICsgXCJbXCIgKyAoY2lyY3VpdC5jcmVnc1tjcmVnTmFtZV0ubGVuZ3RoIHx8IDEpICsgXCJdO1xcblwiO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgdXNlZEdhdGVzID0gY2lyY3VpdC51c2VkR2F0ZXMoKTtcblx0XHRcdGlmKCFkZWNvbXBvc2UpIHtcblx0XHRcdFx0dXNlZEdhdGVzLm1hcChmdW5jdGlvbih1c2VkR2F0ZU5hbWUpIHtcblx0XHRcdFx0XHR2YXIgYmFzaWNHYXRlID0gY2lyY3VpdC5iYXNpY0dhdGVzW3VzZWRHYXRlTmFtZV07XG5cdFx0XHRcdFx0aWYoIWJhc2ljR2F0ZSkge1xuXHRcdFx0XHRcdFx0dmFyIGN1c3RvbUdhdGUgPSBzZWxmLmN1c3RvbUdhdGVzW3VzZWRHYXRlTmFtZV07XG5cdFx0XHRcdFx0XHRpZihjdXN0b21HYXRlKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBjdXN0b21DaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdFx0XHRcdFx0XHRcdGN1c3RvbUNpcmN1aXQubG9hZChjdXN0b21HYXRlKTtcblx0XHRcdFx0XHRcdFx0dmFyIG5ld09wdGlvbnMgPSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29tbWVudDogXCJcIixcblx0XHRcdFx0XHRcdFx0XHRkZWNvbXBvc2U6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdGNvbXBhdGliaWxpdHlNb2RlOiBjb21wYXRpYmlsaXR5TW9kZVxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRxYXNtICs9IGN1c3RvbUNpcmN1aXQuZXhwb3J0VG9RQVNNKG5ld09wdGlvbnMsIHVzZWRHYXRlTmFtZSwgZmFsc2UsIGZhbHNlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHZhciBudW1Db2xzID0gY2lyY3VpdC5udW1Db2xzKCk7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgY2lyY3VpdC5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSBjaXJjdWl0LmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0dmFyIHFhc21SZXBsYWNlbWVudCA9IG51bGw7XG5cdFx0XHR2YXIgcWFzbUVxdWl2YWxlbnQgPSBudWxsO1xuXHRcdFx0XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0dmFyIHFhc21OYW1lID0gZ2F0ZS5uYW1lO1xuXHRcdFx0XHRpZighY29tcGF0aWJpbGl0eU1vZGUpIHtcblx0XHRcdFx0XHR2YXIgZ2F0ZURlZiA9IGNpcmN1aXQuZ2V0R2F0ZURlZihnYXRlLm5hbWUpO1xuXHRcdFx0XHRcdGlmKGdhdGVEZWYpe1xuXHRcdFx0XHRcdFx0aWYoZ2F0ZURlZi5leHBvcnRJbmZvKXtcblx0XHRcdFx0XHRcdFx0aWYoZ2F0ZURlZi5leHBvcnRJbmZvLnFhc20gJiYgZ2F0ZURlZi5leHBvcnRJbmZvLnFhc20ubmFtZSkge1xuXHRcdFx0XHRcdFx0XHRcdHFhc21OYW1lID0gZ2F0ZURlZi5leHBvcnRJbmZvLnFhc20ubmFtZTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmKGdhdGVEZWYuZXhwb3J0SW5mby5xYXNtICYmIGdhdGVEZWYuZXhwb3J0SW5mby5xYXNtLnJlcGxhY2VtZW50KSB7XG5cdFx0XHRcdFx0XHRcdFx0cWFzbVJlcGxhY2VtZW50ID0gZ2F0ZURlZi5leHBvcnRJbmZvLnFhc20ucmVwbGFjZW1lbnQ7XG5cdFx0XHRcdFx0XHRcdFx0cWFzbVJlcGxhY2VtZW50Lm1hcChmdW5jdGlvbihyZXBsYWNlbWVudCl7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcmVwbGFjZW1lbnRDaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXBsYWNlbWVudENpcmN1aXQuY3JlZ3MgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHNlbGYuY3JlZ3MpKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5wYXJhbXMpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1zID0gT2JqZWN0LmtleXMoZ2F0ZS5vcHRpb25zLnBhcmFtcyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciByZXBsYWNlbWVudFBhcmFtcyA9IE9iamVjdC5rZXlzKHJlcGxhY2VtZW50LnBhcmFtcyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtcy5tYXAoZnVuY3Rpb24ocGFyYW0pe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKHJlcGxhY2VtZW50UGFyYW1zLmluZGV4T2YocGFyYW0pID49IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlcGxhY2VtZW50LnBhcmFtc1twYXJhbV0gPSBnYXRlLm9wdGlvbnMucGFyYW1zW3BhcmFtXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcmVwbGFjZW1lbnRDb25kaXRpb24gPSBnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiA/IGdhdGUub3B0aW9ucy5jb25kaXRpb24gOiB7fTtcblx0XHRcdFx0XHRcdFx0XHRcdHJlcGxhY2VtZW50Q2lyY3VpdC5hZGRHYXRlKHJlcGxhY2VtZW50Lm5hbWUsIGNvbHVtbiwgZ2F0ZS53aXJlcywgeyBwYXJhbXM6IHJlcGxhY2VtZW50LnBhcmFtcywgY29uZGl0aW9uOiByZXBsYWNlbWVudENvbmRpdGlvbiB9KTtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBuZXdPcHRpb25zID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb21tZW50OiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkZWNvbXBvc2U6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb21wYXRpYmlsaXR5TW9kZTogY29tcGF0aWJpbGl0eU1vZGVcblx0XHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0XHRxYXNtICs9IHJlcGxhY2VtZW50Q2lyY3VpdC5leHBvcnRUb1FBU00obmV3T3B0aW9ucywgZmFsc2UsIHRydWUsICEhZXhwb3J0QXNHYXRlTmFtZSB8fCBpbnNpZGVTdWJtb2R1bGUpO1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYoZ2F0ZURlZi5leHBvcnRJbmZvLnFhc20gJiYgZ2F0ZURlZi5leHBvcnRJbmZvLnFhc20uZXF1aXZhbGVudCl7XG5cdFx0XHRcdFx0XHRcdFx0cWFzbUVxdWl2YWxlbnQgPSBnYXRlRGVmLmV4cG9ydEluZm8ucWFzbS5lcXVpdmFsZW50O1xuXHRcdFx0XHRcdFx0XHRcdHFhc21FcXVpdmFsZW50Lm1hcChmdW5jdGlvbihlcXVpdmFsZW50KXtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBlcXVpdmFsZW50Q2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZXF1aXZhbGVudENpcmN1aXQuY3JlZ3MgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHNlbGYuY3JlZ3MpKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGdhdGVXaXJlcyA9IGVxdWl2YWxlbnQud2lyZXMubGVuZ3RoID4gMSA/IGdhdGUud2lyZXMgOiBnYXRlLndpcmVzW2VxdWl2YWxlbnQud2lyZXNbMF1dO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGVxUGFyYW1zID0ge307XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihlcXVpdmFsZW50LnBhcmFtcykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gZXF1aXZhbGVudCBnYXRlIHBhcmFtcyBjYW4gY29udGFpbiB2YXJpYWJsZSBmcm9tIGdhdGUgcGFyYW1zXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIC0tLVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIEV2YWx1YXRlIGdhdGUncyBwYXJhbXNcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGdhdGVQYXJhbXMgPSB7fTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGdhdGVQYXJhbU5hbWUgaW4gZ2F0ZS5vcHRpb25zLnBhcmFtcykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Z2F0ZVBhcmFtc1tnYXRlUGFyYW1OYW1lXSA9IG1hdGguZXZhbHVhdGUoZ2F0ZS5vcHRpb25zLnBhcmFtc1tnYXRlUGFyYW1OYW1lXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRXZhbHVhdGUgZXF1aXZhbGVudCBnYXRlJ3MgcGFyYW1zXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgZXFQYXJhbU5hbWUgaW4gZXF1aXZhbGVudC5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlcVBhcmFtc1tlcVBhcmFtTmFtZV0gPSBtYXRoLmV2YWx1YXRlKGVxdWl2YWxlbnQucGFyYW1zW2VxUGFyYW1OYW1lXSwgZ2F0ZVBhcmFtcyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGVxQ29uZGl0aW9uID0gZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24gPyBnYXRlLm9wdGlvbnMuY29uZGl0aW9uIDoge307XG5cblx0XHRcdFx0XHRcdFx0XHRcdGVxdWl2YWxlbnRDaXJjdWl0LmFkZEdhdGUoZXF1aXZhbGVudC5uYW1lLCBjb2x1bW4sIGdhdGVXaXJlcywgeyBwYXJhbXM6IGVxUGFyYW1zLCBjb25kaXRpb246IGVxQ29uZGl0aW9uIH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIG5ld09wdGlvbnMgPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbW1lbnQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRlY29tcG9zZTogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbXBhdGliaWxpdHlNb2RlOiBjb21wYXRpYmlsaXR5TW9kZVxuXHRcdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0XHRcdHFhc20gKz0gZXF1aXZhbGVudENpcmN1aXQuZXhwb3J0VG9RQVNNKG5ld09wdGlvbnMsIFwiXCIsIHRydWUsICEhZXhwb3J0QXNHYXRlTmFtZSB8fCBpbnNpZGVTdWJtb2R1bGUpO1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYoIXFhc21SZXBsYWNlbWVudCAmJiAhcWFzbUVxdWl2YWxlbnQpIHtcblx0XHRcdFx0XHRpZihleHBvcnRBc0dhdGVOYW1lIHx8IGluc2lkZVN1Ym1vZHVsZSkge1xuXHRcdFx0XHRcdFx0cWFzbSArPSBcIiAgXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZykge1xuXHRcdFx0XHRcdFx0cWFzbSArPSBcImlmKFwiICsgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnICsgXCI9PVwiICsgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi52YWx1ZSArIFwiKSBcIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZigoIXFhc21SZXBsYWNlbWVudCAmJiAhcWFzbUVxdWl2YWxlbnQpIHx8IGNvbXBhdGliaWxpdHlNb2RlKSB7XG5cdFx0XHRcdFx0dmFyIGdhdGVOYW1lID0gZ2F0ZS5uYW1lO1xuXHRcdFx0XHRcdHZhciBnYXRlUGFyYW1zID0gZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5wYXJhbXMgPyBnYXRlLm9wdGlvbnMucGFyYW1zIDoge307XG5cblx0XHRcdFx0XHRxYXNtICs9IGNvbXBhdGliaWxpdHlNb2RlID8gZ2F0ZS5uYW1lIDogcWFzbU5hbWU7XG5cblx0XHRcdFx0XHRpZihnYXRlUGFyYW1zKSB7XG5cdFx0XHRcdFx0XHR2YXIgZ2F0ZURlZiA9IGNpcmN1aXQuYmFzaWNHYXRlc1tnYXRlTmFtZV07XG5cdFx0XHRcdFx0XHRpZighZ2F0ZURlZikge1xuXHRcdFx0XHRcdFx0XHRnYXRlRGVmID0gY2lyY3VpdC5jdXN0b21HYXRlc1tnYXRlTmFtZV07XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKGdhdGVEZWYpIHtcblx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtRGVmID0gZ2F0ZURlZi5wYXJhbXMgfHwgW107XG5cdFx0XHRcdFx0XHRcdHZhciBwYXJhbUNvdW50ID0gcGFyYW1EZWYubGVuZ3RoO1xuXHRcdFx0XHRcdFx0XHRpZihwYXJhbUNvdW50KSB7XG5cdFx0XHRcdFx0XHRcdFx0cWFzbSArPSBcIiAoXCI7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBwID0gMDsgcCA8IHBhcmFtQ291bnQ7IHArKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYocCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cWFzbSArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1OYW1lID0gcGFyYW1EZWZbcF07XG5cblx0XHRcdFx0XHRcdFx0XHRcdHZhciBwYXJhbVZhbHVlID0gZ2F0ZVBhcmFtc1twYXJhbU5hbWVdO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoIWV4cG9ydEFzR2F0ZU5hbWUgJiYgIWluc2lkZVN1Ym1vZHVsZSAmJiAhY29tcGF0aWJpbGl0eU1vZGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIG5vZGUgPSBtYXRoLnBhcnNlKGdhdGVQYXJhbXNbcGFyYW1OYW1lXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtVmFsdWUgPSBub2RlLnRvU3RyaW5nKHsgaGFuZGxlcjogbWF0aFRvU3RyaW5nSGFuZGxlciB9KTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdHFhc20gKz0gcGFyYW1WYWx1ZTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0cWFzbSArPSBcIilcIjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVx0XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Zm9yKHZhciB3ID0gMDsgdyA8IGdhdGUud2lyZXMubGVuZ3RoOyB3KyspIHtcblx0XHRcdFx0XHRcdGlmKHcgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdHFhc20gKz0gXCIsXCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZihleHBvcnRBc0dhdGVOYW1lIHx8IGluc2lkZVN1Ym1vZHVsZSkge1xuXHRcdFx0XHRcdFx0XHRxYXNtICs9IFwiIFwiICsgcXViaXRMZXR0ZXIoZ2F0ZS53aXJlc1t3XSwgY2lyY3VpdC5udW1RdWJpdHMpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cWFzbSArPSBcIiBxW1wiICsgZ2F0ZS53aXJlc1t3XSArIFwiXVwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKGdhdGVOYW1lID09IFwibWVhc3VyZVwiICYmIGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY3JlZykge1xuXHRcdFx0XHRcdFx0cWFzbSArPSBcIiAtPiBcIjtcblx0XHRcdFx0XHRcdHFhc20gKz0gZ2F0ZS5vcHRpb25zLmNyZWcubmFtZSArIFwiW1wiICsgZ2F0ZS5vcHRpb25zLmNyZWcuYml0ICsgXCJdXCI7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cWFzbSArPSBcIjtcXG5cIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmKGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRxYXNtICs9IFwifVxcblxcblwiO1xuXHR9XG5cblx0cmV0dXJuIHFhc207XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0VG9QeXF1aWwgPSBmdW5jdGlvbihvcHRpb25zLCBleHBvcnRBc0dhdGVOYW1lKSB7XG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdHZhciBjb21tZW50ID0gb3B0aW9ucy5jb21tZW50O1xuXHR2YXIgZGVjb21wb3NlID0gb3B0aW9ucy5kZWNvbXBvc2U7XG5cdHZhciB2ZXJzaW9uU3RyID0gb3B0aW9ucy52ZXJzaW9uU3RyO1xuXHR2YXIgbGF0dGljZSA9IG9wdGlvbnMubGF0dGljZTtcblx0dmFyIGFzUVZNID0gb3B0aW9ucy5hc1FWTTtcblx0dmFyIGFzSnVweXRlciA9IG9wdGlvbnMuYXNKdXB5dGVyO1xuXHR2YXIgc2hvdHMgPSBvcHRpb25zLnNob3RzO1xuXHR2YXIgaHlicmlkID0gb3B0aW9ucy5oeWJyaWQ7XG5cblx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdHZhciB2ZXJzaW9uID0gcGFyc2VGbG9hdCh2ZXJzaW9uU3RyIHx8IFwiMi4xMlwiKTtcblx0aWYoaXNOYU4odmVyc2lvbikpIHtcblx0XHR2ZXJzaW9uID0gMi4xO1xuXHR9XG5cblx0aWYoIXNob3RzKSB7XG5cdFx0c2hvdHMgPSAxMDI0O1xuXHR9XG5cblx0aWYodHlwZW9mIGh5YnJpZCA9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0aHlicmlkID0gdGhpcy5vcHRpb25zID8gISF0aGlzLm9wdGlvbnMuaHlicmlkIDogZmFsc2U7XG5cdH1cblxuXHQvLyBkZWNvbXBvc2UgP1xuXHR2YXIgY2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRjaXJjdWl0LmxvYWQodGhpcy5zYXZlKGRlY29tcG9zZSkpO1xuXG5cdHZhciBtYXRoVG9TdHJpbmdIYW5kbGVyID0gZnVuY3Rpb24obm9kZSwgb3B0aW9ucykge1xuXHRcdGlmKG5vZGUuaXNTeW1ib2xOb2RlKSB7XG5cdFx0XHR2YXIgbnVtcHlzID0gW1wicGlcIiwgXCJzaW5cIiwgXCJjb3NcIiwgXCJ0YW5cIiwgXCJhc2luXCIsIFwiYWNvc1wiLCBcImF0YW5cIl07XG5cdFx0XHRpZihudW1weXMuaW5kZXhPZihub2RlLm5hbWUpID49IDApIHtcblx0XHRcdFx0cmV0dXJuIFwibnAuXCIgKyBub2RlLm5hbWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmKHNlbGYucGFyYW1zLmluZGV4T2Yobm9kZS5uYW1lKSA+PSAwICYmIGh5YnJpZCkge1xuXHRcdFx0XHRyZXR1cm4gXCJwYXJhbXNbXCIgKyBzZWxmLnBhcmFtcy5pbmRleE9mKG5vZGUubmFtZSkgKyBcIl1cIjtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0dmFyIGFkanVzdElkZW50YXRpb24gPSBmdW5jdGlvbihhZGRTdHIsIGlkZW50KSB7XG5cdFx0dmFyIHN0ciA9IFwiXCI7XG5cblx0XHQvLyBhZGQgdXNlciBkZWZpbmVkIGNvc3QgZnVuY3Rpb24gd2l0aCBwcm9wZXIgaWRlbnRhdGlvblxuXHRcdHZhciBjZkxpbmVzID0gYWRkU3RyLnNwbGl0KFwiXFxuXCIpO1xuXHRcdHZhciBtaW5JZGVudCA9IC0xO1xuXHRcdGNmTGluZXMubWFwKGZ1bmN0aW9uKGNmTGluZSkge1xuXHRcdFx0dmFyIHRtcElkZW50ID0gY2ZMaW5lLnNlYXJjaCgvXFxTLyk7XG5cdFx0XHRpZih0bXBJZGVudCA+PSAwICYmIChtaW5JZGVudCA8IDAgfHwgdG1wSWRlbnQgPCBtaW5JZGVudCkpIHtcblx0XHRcdFx0bWluSWRlbnQgPSB0bXBJZGVudDtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGlmKG1pbklkZW50IDwgMCkge1xuXHRcdFx0bWluSWRlbnQgPSAwO1xuXHRcdH1cblxuXHRcdHZhciBhZGRJZGVudCA9IFwiXCI7XG5cdFx0aWYobWluSWRlbnQgPCBpZGVudC5sZW5ndGgpIHtcblx0XHRcdGZvcih2YXIgdG1wID0gMDsgdG1wIDwgKGlkZW50Lmxlbmd0aCAtIG1pbklkZW50KTsgdG1wKyspIHtcblx0XHRcdFx0YWRkSWRlbnQgKz0gXCIgXCI7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y2ZMaW5lcy5tYXAoZnVuY3Rpb24oY2ZMaW5lKSB7XG5cdFx0XHRzdHIgKz0gYWRkSWRlbnQgKyBjZkxpbmUgKyBcIlxcblwiO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHN0cjtcblx0fTtcblxuXHR2YXIgaW1wb3J0R2F0ZXMgPSBcIlwiO1xuXHR2YXIgZGVmUGFyYW1zID0gW107XG5cdHZhciBkZWZHYXRlcyA9IFwiXCI7XG5cdHZhciBkZWZSdW4gPSBcIlwiO1xuXHR2YXIgZGVmQXJyYXlzID0gXCJcIjtcblx0dmFyIHVzZWRHYXRlcyA9IGNpcmN1aXQudXNlZEdhdGVzKCk7XG5cdHZhciBnb3RNZWFzdXJlbWVudCA9IGNpcmN1aXQuZ290TWVhc3VyZW1lbnQoKTtcblxuXHR2YXIgZGVmR2F0ZU5hbWVzID0gW107XG5cdHZhciBkZWZDaXJjTmFtZXMgPSBbXTtcblx0dXNlZEdhdGVzLm1hcChmdW5jdGlvbih1c2VkR2F0ZU5hbWUpIHtcblx0XHR2YXIgYmFzaWNHYXRlID0gY2lyY3VpdC5iYXNpY0dhdGVzW3VzZWRHYXRlTmFtZV07XG5cdFx0aWYoYmFzaWNHYXRlKSB7XG5cdFx0XHRpZihiYXNpY0dhdGUuZXhwb3J0SW5mbyAmJiBiYXNpY0dhdGUuZXhwb3J0SW5mby5weXF1aWwpIHtcblx0XHRcdFx0dmFyIHF1aWxJbmZvID0gYmFzaWNHYXRlLmV4cG9ydEluZm8ucHlxdWlsO1xuXHRcdFx0XHRpZihxdWlsSW5mby5hcnJheSkge1xuXG5cdFx0XHRcdFx0Ly8gZGVmZ2F0ZVxuXG5cdFx0XHRcdFx0dmFyIHBhcmFtTGlzdCA9IFwiXCI7XG5cdFx0XHRcdFx0aWYocXVpbEluZm8ucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRwYXJhbUxpc3QgKz0gXCIsIFtcIjtcblx0XHRcdFx0XHRcdHF1aWxJbmZvLnBhcmFtcy5tYXAoZnVuY3Rpb24ocGFyYW1OYW1lLCBwYXJhbUluZGV4KSB7XG5cdFx0XHRcdFx0XHRcdGlmKHBhcmFtSW5kZXggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0cGFyYW1MaXN0ICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRwYXJhbUxpc3QgKz0gXCJwX1wiICsgcGFyYW1OYW1lO1xuXHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1UZXh0ID0gXCJwX1wiICsgcGFyYW1OYW1lICsgXCIgPSBQYXJhbWV0ZXIoXFwnXCIgKyBwYXJhbU5hbWUgKyBcIlxcJylcIjtcblx0XHRcdFx0XHRcdFx0aWYoZGVmUGFyYW1zLmluZGV4T2YocGFyYW1UZXh0KSA8IDApIHtcblx0XHRcdFx0XHRcdFx0XHRkZWZQYXJhbXMucHVzaChwYXJhbVRleHQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdHBhcmFtTGlzdCArPSBcIl1cIjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRkZWZSdW4gKz0gXCJwLmluc3QoXCIgKyBxdWlsSW5mby5uYW1lICsgXCJfZGVmZ2F0ZSlcXG5cIjtcblx0XHRcdFx0XHRkZWZBcnJheXMgKz0gcXVpbEluZm8ubmFtZSArIFwiX2FycmF5ID0gbnAuYXJyYXkoXCIgKyBxdWlsSW5mby5hcnJheSArIFwiKVxcblwiO1xuXHRcdFx0XHRcdGRlZkdhdGVzICs9IHF1aWxJbmZvLm5hbWUgKyBcIl9kZWZnYXRlID0gRGVmR2F0ZShcXCdcIiArIHF1aWxJbmZvLm5hbWUgKyBcIlxcJywgXCIgKyBxdWlsSW5mby5uYW1lICsgXCJfYXJyYXlcIiArIHBhcmFtTGlzdCArIFwiKVxcblwiO1xuXHRcdFx0XHRcdGRlZkdhdGVzICs9IHF1aWxJbmZvLm5hbWUgKyBcIiA9IFwiICsgcXVpbEluZm8ubmFtZSArIFwiX2RlZmdhdGUuZ2V0X2NvbnN0cnVjdG9yKClcXG5cIjtcblxuXHRcdFx0XHRcdGRlZkdhdGVOYW1lcy5wdXNoKHF1aWxJbmZvLm5hbWUpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHZhciBpbXBvcnROYW1lID0gXCJcIjtcblx0XHRcdFx0XHRpZihxdWlsSW5mby5yZXBsYWNlbWVudCkge1xuXHRcdFx0XHRcdFx0dmFyIGJnID0gY2lyY3VpdC5iYXNpY0dhdGVzW3F1aWxJbmZvLnJlcGxhY2VtZW50Lm5hbWVdO1xuXHRcdFx0XHRcdFx0aWYoYmcpIHtcblx0XHRcdFx0XHRcdFx0aWYoYmcuZXhwb3J0SW5mbykge1xuXHRcdFx0XHRcdFx0XHRcdGlmKGJnLmV4cG9ydEluZm8ucHlxdWlsKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpbXBvcnROYW1lID0gYmcuZXhwb3J0SW5mby5weXF1aWwubmFtZTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoYmcuZXhwb3J0SW5mby5xdWlsKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGltcG9ydE5hbWUgPSBiZy5leHBvcnRJbmZvLnF1aWwubmFtZTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0aW1wb3J0TmFtZSA9IHF1aWxJbmZvLm5hbWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYoaW1wb3J0TmFtZSkge1xuXHRcdFx0XHRcdFx0aWYoaW1wb3J0R2F0ZXMpIHtcblx0XHRcdFx0XHRcdFx0aW1wb3J0R2F0ZXMgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aW1wb3J0R2F0ZXMgKz0gaW1wb3J0TmFtZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmKGJhc2ljR2F0ZS5leHBvcnRJbmZvICYmIGJhc2ljR2F0ZS5leHBvcnRJbmZvLnF1aWwpIHtcblx0XHRcdFx0XHR2YXIgcXVpbEluZm8gPSBiYXNpY0dhdGUuZXhwb3J0SW5mby5xdWlsO1xuXG5cdFx0XHRcdFx0aWYoIXF1aWxJbmZvLmRlZmdhdGUpIHtcblxuXHRcdFx0XHRcdFx0dmFyIGltcG9ydE5hbWUgPSBcIlwiO1xuXHRcdFx0XHRcdFx0aWYocXVpbEluZm8ucmVwbGFjZW1lbnQpIHtcblx0XHRcdFx0XHRcdFx0dmFyIGJnID0gY2lyY3VpdC5iYXNpY0dhdGVzW3F1aWxJbmZvLnJlcGxhY2VtZW50Lm5hbWVdO1xuXHRcdFx0XHRcdFx0XHRpZihiZykge1xuXHRcdFx0XHRcdFx0XHRcdGlmKGJnLmV4cG9ydEluZm8pIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGJnLmV4cG9ydEluZm8ucHlxdWlsKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGltcG9ydE5hbWUgPSBiZy5leHBvcnRJbmZvLnB5cXVpbC5uYW1lO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYmcuZXhwb3J0SW5mby5xdWlsKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aW1wb3J0TmFtZSA9IGJnLmV4cG9ydEluZm8ucXVpbC5uYW1lO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRpbXBvcnROYW1lID0gcXVpbEluZm8ubmFtZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYoaW1wb3J0TmFtZSkge1xuXHRcdFx0XHRcdFx0XHRpZihpbXBvcnRHYXRlcykge1xuXHRcdFx0XHRcdFx0XHRcdGltcG9ydEdhdGVzICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRpbXBvcnRHYXRlcyArPSBpbXBvcnROYW1lO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIGJhc2ljIGdhdGUgbm90IHN1cHBvcnRlZCBieSBweXF1aWxcblx0XHRcdFx0XHQvLyBUT0RPOiBhZGQgcHlxdWlsIGRlZmluZSBnYXRlIGNvZGVcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0Ly8gaW1wb3J0IE1PVkUsIEFORCwgT1IgaWYgY2lyY3VpdCBoYXMgY29uZGl0aW9uc1xuXHR2YXIgZ290Q29uZGl0aW9ucyA9IGNpcmN1aXQuZ290Q2xhc3NpY2FsQ29udHJvbCgpO1xuXHRpZihnb3RDb25kaXRpb25zKSB7XG5cdFx0aWYoaW1wb3J0R2F0ZXMpIHtcblx0XHRcdGltcG9ydEdhdGVzICs9IFwiLCBcIjtcblx0XHR9XG5cdFx0aWYodmVyc2lvbiA8IDIpIHtcblx0XHRcdGltcG9ydEdhdGVzICs9IFwiRkFMU0UsIE5PVCwgT1IsIEFORFwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpbXBvcnRHYXRlcyArPSBcIk1PVkUsIE5PVCwgSU9SLCBBTkRcIjtcblx0XHR9XG5cdH1cblxuXHR2YXIgaW1wb3J0c0ZvckRlZmdhdGUgPSBcIlwiO1xuXHRpZihkZWZHYXRlcykge1xuXHRcdGlmKHZlcnNpb24gPCAyLjEyKSB7XG5cdFx0XHRpbXBvcnRzRm9yRGVmZ2F0ZSA9IFwiZnJvbSBweXF1aWwucGFyYW1ldGVycyBpbXBvcnQgUGFyYW1ldGVyLCBxdWlsX3NpbiwgcXVpbF9jb3MsIHF1aWxfc3FydCwgcXVpbF9leHAsIHF1aWxfY2lzXFxuZnJvbSBweXF1aWwucXVpbGJhc2UgaW1wb3J0IERlZkdhdGVcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aW1wb3J0c0ZvckRlZmdhdGUgPSBcImZyb20gcHlxdWlsLnF1aWxhdG9tIGltcG9ydCBQYXJhbWV0ZXIsIHF1aWxfc2luLCBxdWlsX2NvcywgcXVpbF9zcXJ0LCBxdWlsX2V4cCwgcXVpbF9jaXNcXG5mcm9tIHB5cXVpbC5xdWlsYmFzZSBpbXBvcnQgRGVmR2F0ZVwiO1x0XHRcdFxuXHRcdH1cblx0fVxuXG5cdHZhciBweXF1aWwgPSBcIlwiO1xuXG5cdC8vIGNvbW1lbnRcblx0aWYoY29tbWVudCkge1xuXHRcdHZhciBjb21tID0gKGNvbW1lbnQgfHwgXCJcIikuc3BsaXQoXCJcXG5cIik7XG5cdFx0Y29tbS5tYXAoZnVuY3Rpb24oY2xpbmUpIHtcblx0XHRcdGlmKGNsaW5lLmxlbmd0aCA+PSAxICYmIGNsaW5lWzBdICE9IFwiI1wiKSB7XG5cdFx0XHRcdHB5cXVpbCArPSBcIiMgXCI7XG5cdFx0XHR9XG5cdFx0XHRweXF1aWwgKz0gY2xpbmU7XG5cdFx0XHRweXF1aWwgKz0gXCJcXG5cIjtcblx0XHR9KTtcblx0fVxuXG5cdHZhciBpbmRlbnQgPSBcIlwiO1xuXHRpZihleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0dmFyIGFyZ3MgPSBcIlwiO1xuXHRcdHZhciBhcmdDb3VudCA9IDA7XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNpcmN1aXQucGFyYW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0YXJncyArPSBcIiwgXCI7XG5cdFx0XHR9XG5cdFx0XHRhcmdzICs9IGNpcmN1aXQucGFyYW1zW2ldO1xuXHRcdFx0YXJnQ291bnQrKztcblx0XHR9XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNpcmN1aXQubnVtUXViaXRzOyBpKyspIHtcblx0XHRcdGlmKGFyZ0NvdW50ID4gMCkge1xuXHRcdFx0XHRhcmdzICs9IFwiLCBcIjtcblx0XHRcdH1cblx0XHRcdGFyZ3MgKz0gXCJxXCIgKyBpO1xuXHRcdFx0YXJnQ291bnQrKztcblx0XHR9XG5cdFx0cHlxdWlsICs9IFwiZGVmIFwiICsgZXhwb3J0QXNHYXRlTmFtZSArIChhcmdzID8gXCIoXCIgKyBhcmdzICsgXCIpXCIgOiBcIlwiKSArIFwiOlxcblwiO1xuXHRcdGluZGVudCA9IFwiICBcIjtcblx0fSBlbHNlIHtcblx0XHRpZih2ZXJzaW9uIDwgMikge1xuXHRcdFx0cHlxdWlsICs9IFwiZnJvbSBweXF1aWwuYXBpIGltcG9ydCBRVk1Db25uZWN0aW9uXFxuXCI7XG5cdFx0XHRweXF1aWwgKz0gXCJmcm9tIHB5cXVpbC5xdWlsIGltcG9ydCBQcm9ncmFtXFxuXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHB5cXVpbCArPSBcImZyb20gcHlxdWlsIGltcG9ydCBQcm9ncmFtLCBnZXRfcWNcXG5cIjtcblx0XHR9XG5cblx0XHRpZihpbXBvcnRHYXRlcykge1xuXHRcdFx0cHlxdWlsICs9IFwiZnJvbSBweXF1aWwuZ2F0ZXMgaW1wb3J0IFwiICsgaW1wb3J0R2F0ZXMgKyBcIlxcblwiO1xuXHRcdH1cblx0XHRpZihpbXBvcnRzRm9yRGVmZ2F0ZSkge1xuXHRcdFx0cHlxdWlsICs9IGltcG9ydHNGb3JEZWZnYXRlICsgXCJcXG5cIjtcblx0XHR9XG5cblx0XHRweXF1aWwgKz0gXCJmcm9tIGZ1bmN0b29scyBpbXBvcnQgcmVkdWNlXFxuXCI7XG5cblx0XHRpZihoeWJyaWQpIHtcblx0XHRcdHB5cXVpbCArPSBcImZyb20gc2NpcHkub3B0aW1pemUgaW1wb3J0IG1pbmltaXplXFxuXCI7XG5cdFx0XHRweXF1aWwgKz0gXCJmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBDb3VudGVyXFxuXCI7XG5cblx0XHR9XG5cblx0XHRweXF1aWwgKz0gXCJpbXBvcnQgbnVtcHkgYXMgbnBcXG5cIjtcblxuXG5cdFx0aWYoc2hvdHMpIHtcblx0XHRcdHB5cXVpbCArPSBcIlxcblwiO1xuXHRcdFx0cHlxdWlsICs9IFwic2hvdHMgPSBcIiArIHNob3RzICsgXCJcXG5cIjtcblx0XHR9XG5cblx0XHR2YXIgZ2xvYmFsUGFyYW1zID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5wYXJhbXMgPyB0aGlzLm9wdGlvbnMucGFyYW1zIDoge307XG5cdFx0aWYodGhpcy5wYXJhbXMubGVuZ3RoKSB7XG5cdFx0XHRweXF1aWwgKz0gXCJcXG5cIjtcblx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhcmFtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHR2YXIgZ2xvYmFsUGFyYW1OYW1lID0gdGhpcy5wYXJhbXNbaV07XG5cblx0XHRcdFx0dmFyIG5vZGUgPSBtYXRoLnBhcnNlKGdsb2JhbFBhcmFtc1tnbG9iYWxQYXJhbU5hbWVdKTtcblx0XHRcdFx0dmFyIGdsb2JhbFBhcmFtVmFsdWUgPSBub2RlLnRvU3RyaW5nKHsgaGFuZGxlcjogbWF0aFRvU3RyaW5nSGFuZGxlciB9KTtcblxuXHRcdFx0XHRweXF1aWwgKz0gZ2xvYmFsUGFyYW1OYW1lICsgXCIgPSBcIiArIGdsb2JhbFBhcmFtVmFsdWUgKyBcIlxcblwiO1xuXHRcdFx0fVxuXHRcdFx0cHlxdWlsICs9IFwiXFxuXCI7XG5cdFx0fVxuXG5cdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRweXF1aWwgKz0gXCJ0b2xlcmFuY2UgPSBcIiArICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMudG9sZXJhbmNlID8gdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMudG9sZXJhbmNlIHx8IFwiMC4wMDFcIiA6IFwiMC4wMDFcIikgKyBcIlxcblwiO1xuXHRcdFx0cHlxdWlsICs9IFwiXFxuXCI7XG5cdFx0fVxuXG5cdFx0aWYoZGVmR2F0ZXMpIHtcblx0XHRcdGRlZlBhcmFtcy5tYXAoZnVuY3Rpb24oZGVmUGFyYW1JdGVtLCBkZWZJbmRleCkge1xuXHRcdFx0XHRpZihkZWZJbmRleCA9PSAwKSB7XG5cdFx0XHRcdFx0cHlxdWlsICs9IFwiXFxuXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0cHlxdWlsICs9IGRlZlBhcmFtSXRlbSArIFwiXFxuXCI7XG5cdFx0XHR9KTtcblx0XHRcdHB5cXVpbCArPSBcIlxcblwiO1xuXHRcdFx0cHlxdWlsICs9IGRlZkFycmF5cyArIFwiXFxuXCI7XG5cdFx0XHRweXF1aWwgKz0gXCJcXG5cIjtcblx0XHRcdHB5cXVpbCArPSBkZWZHYXRlcyArIFwiXFxuXCI7XG5cdFx0fVxuXHRcdHB5cXVpbCArPSBcIlxcblwiO1xuXG5cdFx0dmFyIHVzZWRHYXRlcyA9IGNpcmN1aXQudXNlZEdhdGVzKCk7XG5cdFx0aWYoIWRlY29tcG9zZSkge1xuXHRcdFx0dXNlZEdhdGVzLm1hcChmdW5jdGlvbih1c2VkR2F0ZU5hbWUpIHtcblx0XHRcdFx0dmFyIGJhc2ljR2F0ZSA9IGNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0XHRpZighYmFzaWNHYXRlKSB7XG5cdFx0XHRcdFx0dmFyIGN1c3RvbUdhdGUgPSBzZWxmLmN1c3RvbUdhdGVzW3VzZWRHYXRlTmFtZV07XG5cdFx0XHRcdFx0aWYoY3VzdG9tR2F0ZSkge1xuXHRcdFx0XHRcdFx0dmFyIGN1c3RvbUNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0XHRcdFx0XHRcdGN1c3RvbUNpcmN1aXQubG9hZChjdXN0b21HYXRlKTtcblx0XHRcdFx0XHRcdHZhciBuZXdPcHRpb25zID0ge1xuXHRcdFx0XHRcdFx0XHRjb21tZW50OiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRkZWNvbXBvc2U6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHR2ZXJzaW9uU3RyOiB2ZXJzaW9uU3RyLFxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBjdXN0b21DaXJjdWl0LmV4cG9ydFRvUHlxdWlsKG5ld09wdGlvbnMsIHVzZWRHYXRlTmFtZSk7XG5cdFx0XHRcdFx0XHRkZWZDaXJjTmFtZXMucHVzaCh1c2VkR2F0ZU5hbWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0aWYoaHlicmlkKSB7XG5cdFx0aW5kZW50ICs9IFwiICBcIjtcblxuXHRcdHB5cXVpbCArPSBcImRlZiBvYmplY3RpdmVfZnVuY3Rpb24ocGFyYW1zKTpcXG5cIlxuXHR9XG5cblx0aWYodmVyc2lvbiA+PSAyICYmICFleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0aWYoYXNRVk0gfHwgbGF0dGljZSkge1xuXHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicCA9IFByb2dyYW0oJ1BSQUdNQSBJTklUSUFMX1JFV0lSSU5HIFxcXCJQQVJUSUFMXFxcIicpXFxuXFxuXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAgPSBQcm9ncmFtKClcXG5cXG5cIjtcblx0XHR9XG5cblx0XHR2YXIgdG90YWxCaXRzID0gY2lyY3VpdC5jcmVnVG90YWxCaXRzKCk7XG5cdFx0aWYoZ290Q29uZGl0aW9ucykge1xuXHRcdFx0dG90YWxCaXRzICs9IDE7XG5cdFx0fTtcblx0XHRpZih0b3RhbEJpdHMpIHtcblx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInJvID0gcC5kZWNsYXJlKCdybycsIG1lbW9yeV90eXBlPSdCSVQnLCBtZW1vcnlfc2l6ZT1cIiArIHRvdGFsQml0cyArIFwiKVxcblwiO1xuXHRcdFx0cHlxdWlsICs9IFwiXFxuXCI7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAgPSBQcm9ncmFtKClcXG5cXG5cIjtcblx0fVxuXG5cdHB5cXVpbCArPSBkZWZSdW4gPyAoaW5kZW50ICsgZGVmUnVuICsgXCJcXG5cIikgOiBcIlwiO1xuXG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgY2lyY3VpdC5udW1Db2xzKCk7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IGNpcmN1aXQubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gY2lyY3VpdC5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCkge1xuXHRcdFx0XHR2YXIgZ2F0ZURlZiA9IGNpcmN1aXQuZ2V0R2F0ZURlZihnYXRlLm5hbWUpO1xuXHRcdFx0XHR2YXIgZ2F0ZVBhcmFtcyA9IGdhdGVQYXJhbXMgPSBnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLnBhcmFtcyA/IGdhdGUub3B0aW9ucy5wYXJhbXMgOiB7fTtcblx0XHRcdFx0dmFyIHF1aWxJbmZvID0gbnVsbDtcblx0XHRcdFx0aWYoZ2F0ZURlZikge1xuXHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mbykge1xuXHRcdFx0XHRcdFx0aWYoZ2F0ZURlZi5leHBvcnRJbmZvLnB5cXVpbCAmJiBnYXRlRGVmLmV4cG9ydEluZm8ucHlxdWlsLnJlcGxhY2VtZW50KSB7XG5cdFx0XHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mby5weXF1aWwucmVwbGFjZW1lbnQucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdFx0Z2F0ZVBhcmFtcyA9IGdhdGVEZWYuZXhwb3J0SW5mby5weXF1aWwucmVwbGFjZW1lbnQucGFyYW1zO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGdhdGVEZWYgPSBjaXJjdWl0LmdldEdhdGVEZWYoZ2F0ZURlZi5leHBvcnRJbmZvLnB5cXVpbC5yZXBsYWNlbWVudC5uYW1lKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mby5xdWlsICYmIGdhdGVEZWYuZXhwb3J0SW5mby5xdWlsLnJlcGxhY2VtZW50KSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYoZ2F0ZURlZi5leHBvcnRJbmZvLnF1aWwucmVwbGFjZW1lbnQucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRnYXRlUGFyYW1zID0gZ2F0ZURlZi5leHBvcnRJbmZvLnF1aWwucmVwbGFjZW1lbnQucGFyYW1zO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRnYXRlRGVmID0gY2lyY3VpdC5nZXRHYXRlRGVmKGdhdGVEZWYuZXhwb3J0SW5mby5xdWlsLnJlcGxhY2VtZW50Lm5hbWUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKGdhdGVEZWYgJiYgZ2F0ZURlZi5leHBvcnRJbmZvKSB7XG5cdFx0XHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mby5weXF1aWwpIHtcblx0XHRcdFx0XHRcdFx0XHRxdWlsSW5mbyA9IGdhdGVEZWYuZXhwb3J0SW5mby5weXF1aWw7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYoZ2F0ZURlZi5leHBvcnRJbmZvLnF1aWwpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aWxJbmZvID0gZ2F0ZURlZi5leHBvcnRJbmZvLnF1aWw7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dmFyIGlzRGVmR2F0ZSA9IGZhbHNlO1xuXHRcdFx0XHRcdHZhciBpc0RlZkNpcmMgPSBmYWxzZTtcblx0XHRcdFx0XHRpZihxdWlsSW5mbykge1xuXHRcdFx0XHRcdFx0aXNEZWZHYXRlID0gZGVmR2F0ZU5hbWVzLmluZGV4T2YocXVpbEluZm8ubmFtZSkgPj0gMDtcblx0XHRcdFx0XHRcdGlzRGVmQ2lyYyA9IGRlZkNpcmNOYW1lcy5pbmRleE9mKHF1aWxJbmZvLm5hbWUpID49IDA7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGlzRGVmR2F0ZSA9IGRlZkdhdGVOYW1lcy5pbmRleE9mKGdhdGUubmFtZSkgPj0gMDtcblx0XHRcdFx0XHRcdGlzRGVmQ2lyYyA9IGRlZkNpcmNOYW1lcy5pbmRleE9mKGdhdGUubmFtZSkgPj0gMDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR2YXIgaW5zaWRlQ29udHJvbCA9IGZhbHNlO1xuXHRcdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZykge1xuXHRcdFx0XHRcdFx0Ly8gLS0tXG5cdFx0XHRcdFx0XHQvLyBGbG93IGNvbnRyb2xcblx0XHRcdFx0XHRcdC8vIC0tLVxuXHRcdFx0XHRcdFx0aW5zaWRlQ29udHJvbCA9IHRydWU7XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gXCJcXG5cIjtcblxuXHRcdFx0XHRcdFx0dmFyIHRlc3RCaXQgPSBzZWxmLmNyZWdUb3RhbEJpdHMoKTtcblx0XHRcdFx0XHRcdHZhciBjb25kaXRpb24gPSBnYXRlLm9wdGlvbnMuY29uZGl0aW9uO1xuXHRcdFx0XHRcdFx0dmFyIGNvbmRpdGlvblZhbHVlID0gY29uZGl0aW9uLnZhbHVlIHx8IDA7XG5cdFx0XHRcdFx0XHR2YXIgY3JlZ0Jhc2UgPSBzZWxmLmNyZWdCYXNlKGNvbmRpdGlvbi5jcmVnKTtcblxuXHRcdFx0XHRcdFx0aWYoY29uZGl0aW9uVmFsdWUgPT0gMCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgY3JlZ1NpemUgPSBzZWxmLmNyZWdzW2NvbmRpdGlvbi5jcmVnXS5sZW5ndGg7XG5cdFx0XHRcdFx0XHRcdGlmKHZlcnNpb24gPCAyKSB7XG5cdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicC5pbnN0KEZBTFNFKFwiICsgdGVzdEJpdCArIFwiKSlcXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGJpdEluZGV4ID0gMDsgYml0SW5kZXggPCBjcmVnU2l6ZTsgYml0SW5kZXgrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicC5pbnN0KE9SKFwiICsgKGJpdEluZGV4ICsgY3JlZ0Jhc2UpICsgXCIsIFwiICsgdGVzdEJpdCArIFwiKSlcXG5cIjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicC5pbnN0KE5PVChcIiArIHRlc3RCaXQgKyBcIikpXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicC5pZl90aGVuKFwiICsgdGVzdEJpdCArIFwiLCBQcm9ncmFtKFwiO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAuaW5zdChNT1ZFKHJvW1wiICsgdGVzdEJpdCArIFwiXSwgMCkpXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBiaXRJbmRleCA9IDA7IGJpdEluZGV4IDwgY3JlZ1NpemU7IGJpdEluZGV4KyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAuaW5zdChJT1Iocm9bXCIgKyB0ZXN0Qml0ICsgXCJdLCByb1tcIiArIChiaXRJbmRleCArIGNyZWdCYXNlKSArIFwiXSkpXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAuaW5zdChOT1Qocm9bXCIgKyB0ZXN0Qml0ICsgXCJdKSlcXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJwLmlmX3RoZW4ocm9bXCIgKyB0ZXN0Qml0ICsgXCJdLCBQcm9ncmFtKFwiO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR2YXIgYml0U3RyID0gY29uZGl0aW9uVmFsdWUudG9TdHJpbmcoMikuc3BsaXQoXCJcIikucmV2ZXJzZSgpO1xuXHRcdFx0XHRcdFx0XHR2YXIgYml0Q291bnQgPSAwO1xuXHRcdFx0XHRcdFx0XHR2YXIgc2luZ2xlQml0SW5kZXggPSAwO1xuXHRcdFx0XHRcdFx0XHRiaXRTdHIubWFwKGZ1bmN0aW9uKGJpdFZhbHVlLCBiaXRJbmRleCkge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBiaXRWYWwgPSBwYXJzZUludChiaXRWYWx1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0Yml0U3RyW2JpdEluZGV4XSA9IGJpdFZhbDtcblx0XHRcdFx0XHRcdFx0XHRpZihiaXRWYWwpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGJpdENvdW50Kys7XG5cdFx0XHRcdFx0XHRcdFx0XHRzaW5nbGVCaXRJbmRleCA9IGJpdEluZGV4O1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdFx0aWYoYml0Q291bnQgPT0gMSkge1xuXHRcdFx0XHRcdFx0XHRcdGlmKHZlcnNpb24gPCAyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJwLmlmX3RoZW4oXCIgKyAoc2luZ2xlQml0SW5kZXggKyBjcmVnQmFzZSkgKyBcIiwgUHJvZ3JhbShcIjtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicC5pZl90aGVuKHJvW1wiICsgKHNpbmdsZUJpdEluZGV4ICsgY3JlZ0Jhc2UpICsgXCJdLCBQcm9ncmFtKFwiO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRpZih2ZXJzaW9uIDwgMikge1xuXHRcdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicC5pbnN0KEZBTFNFKFwiICsgdGVzdEJpdCArIFwiKSlcXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBmaXJzdFNldCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRiaXRTdHIubWFwKGZ1bmN0aW9uKGJpdFZhbHVlLCBiaXRJbmRleCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZihiaXRWYWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGZpcnN0U2V0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaXJzdFNldCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicC5pbnN0KE9SKFwiICsgKGJpdEluZGV4ICsgY3JlZ0Jhc2UpICsgXCIsIFwiICsgdGVzdEJpdCArIFwiKSlcXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicC5pbnN0KEFORChcIiArIChiaXRJbmRleCArIGNyZWdCYXNlKSArIFwiLCBcIiArIHRlc3RCaXQgKyBcIikpXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAuaWZfdGhlbihcIiArIHRlc3RCaXQgKyBcIiwgUHJvZ3JhbShcIjtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicC5pbnN0KE1PVkUocm9bXCIgKyB0ZXN0Qml0ICsgXCJdLCAwKSlcXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBmaXJzdFNldCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRiaXRTdHIubWFwKGZ1bmN0aW9uKGJpdFZhbHVlLCBiaXRJbmRleCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZihiaXRWYWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGZpcnN0U2V0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaXJzdFNldCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicC5pbnN0KElPUihyb1tcIiArIHRlc3RCaXQgKyBcIl0sIHJvW1wiICsgKGJpdEluZGV4ICsgY3JlZ0Jhc2UpICsgXCJdKSlcXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicC5pbnN0KEFORChyb1tcIiArIHRlc3RCaXQgKyBcIl0sIHJvW1wiICsgKGJpdEluZGV4ICsgY3JlZ0Jhc2UpICsgXCJdKSlcXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicC5pZl90aGVuKHJvW1wiICsgdGVzdEJpdCArIFwiXSwgUHJvZ3JhbShcIjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC8vIC0tLVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJwLmluc3QoXCI7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYocXVpbEluZm8pIHtcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBxdWlsSW5mby5uYW1lO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gZ2F0ZS5uYW1lO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHZhciBnb3RPcGVuQnJhY2UgPSBmYWxzZTtcblx0XHRcdFx0XHRpZihxdWlsSW5mbyAmJiBxdWlsSW5mby5wYXJhbXMgJiYgcXVpbEluZm8ucGFyYW1zLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0dmFyIGFyZ0NvdW50ID0gMDtcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIihcIjtcblx0XHRcdFx0XHRcdGdvdE9wZW5CcmFjZSA9IHRydWU7XG5cdFx0XHRcdFx0XHRmb3IodmFyIHAgPSAwOyBwIDwgcXVpbEluZm8ucGFyYW1zLmxlbmd0aDsgcCsrKSB7XG5cdFx0XHRcdFx0XHRcdGlmKGFyZ0NvdW50ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHRcdFx0Ly8gcHJlcGVuZCAnbnAnIHRvIG1hdGggY29uc3RhbnRzXG5cdFx0XHRcdFx0XHRcdGlmKHR5cGVvZiBnYXRlUGFyYW1zW3F1aWxJbmZvLnBhcmFtc1twXV0gIT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnYXRlUGFyYW1zW3F1aWxJbmZvLnBhcmFtc1twXV0pO1xuXHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBub2RlLnRvU3RyaW5nKHsgaGFuZGxlcjogbWF0aFRvU3RyaW5nSGFuZGxlciB9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQvLyAtLS1cblxuXHRcdFx0XHRcdFx0XHRhcmdDb3VudCsrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYodmVyc2lvbiA8IDIgfHwgaXNEZWZHYXRlKSB7XG5cdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIilcIjtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGlmKGdhdGVEZWYgJiYgZ2F0ZURlZi5wYXJhbXMgJiYgZ2F0ZURlZi5wYXJhbXMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBhcmdDb3VudCA9IDA7XG5cdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIihcIjtcblx0XHRcdFx0XHRcdFx0Z290T3BlbkJyYWNlID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0Zm9yKHZhciBwID0gMDsgcCA8IGdhdGVEZWYucGFyYW1zLmxlbmd0aDsgcCsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdC8vIC0tLVxuXHRcdFx0XHRcdFx0XHRcdC8vIHByZXBlbmQgJ25wJyB0byBtYXRoIGNvbnN0YW50c1xuXHRcdFx0XHRcdFx0XHRcdGlmKHR5cGVvZiBnYXRlUGFyYW1zW2dhdGVEZWYucGFyYW1zW3BdXSAhPSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgbm9kZSA9IG1hdGgucGFyc2UoZ2F0ZVBhcmFtc1tnYXRlRGVmLnBhcmFtc1twXV0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IG5vZGUudG9TdHJpbmcoeyBoYW5kbGVyOiBtYXRoVG9TdHJpbmdIYW5kbGVyIH0pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHQvLyAtLS1cblxuXHRcdFx0XHRcdFx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aWYodmVyc2lvbiA8IDIgfHwgaXNEZWZHYXRlKSB7XG5cdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IFwiKVwiO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZihnYXRlLndpcmVzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0dmFyIGFyZ0NvdW50ID0gMDtcblx0XHRcdFx0XHRcdGlmKHZlcnNpb24gPCAyIHx8ICFnb3RPcGVuQnJhY2UgfHwgaXNEZWZHYXRlKSB7XG5cdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIihcIjtcblx0XHRcdFx0XHRcdFx0Z290T3BlbkJyYWNlID0gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGZvcih2YXIgdyA9IDA7IHcgPCBnYXRlLndpcmVzLmxlbmd0aDsgdysrKSB7XG5cdFx0XHRcdFx0XHRcdGlmKGFyZ0NvdW50ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpZihleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IFwicVwiICsgZ2F0ZS53aXJlc1t3XTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gXCJcIiArIGdhdGUud2lyZXNbd107XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRhcmdDb3VudCsrO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZihnYXRlLm5hbWUgPT0gXCJtZWFzdXJlXCIgJiYgZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jcmVnKSB7XG5cdFx0XHRcdFx0XHRcdHZhciB0YXJnZXRCaXQgPSBwYXJzZUludChnYXRlLm9wdGlvbnMuY3JlZy5iaXQpIHx8IDA7XG5cdFx0XHRcdFx0XHRcdGlmKGlzTmFOKHRhcmdldEJpdCkpIHtcblx0XHRcdFx0XHRcdFx0XHR0YXJnZXRCaXQgPSAwO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmKHZlcnNpb24gPCAyKSB7XG5cdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9ICh0YXJnZXRCaXQgKyBzZWxmLmNyZWdCYXNlKGdhdGUub3B0aW9ucy5jcmVnLm5hbWUpKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gXCJyb1tcIiArICh0YXJnZXRCaXQgKyBzZWxmLmNyZWdCYXNlKGdhdGUub3B0aW9ucy5jcmVnLm5hbWUpKSArIFwiXVwiO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0YXJnQ291bnQrKztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIilcIjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRweXF1aWwgKz0gXCIpXCI7XG5cdFx0XHRcdFx0aWYoaW5zaWRlQ29udHJvbCkge1xuXHRcdFx0XHRcdFx0cHlxdWlsICs9IFwiKVxcblwiO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRweXF1aWwgKz0gXCJcXG5cIjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyB1bmtub3duIGdhdGU/XG5cdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwiIyBFeHBvcnQgdG8gcHlxdWlsIFdBUk5JTkc6IHVua25vd24gZ2F0ZSBcXFwiXCIgKyBnYXRlLm5hbWUgKyBcIlxcXCIuXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZihleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0cHlxdWlsICs9IGluZGVudCArIFwicmV0dXJuIHBcXG5cIjtcblx0XHRweXF1aWwgKz0gXCJcXG5cIjtcblx0fSBlbHNlIHtcblx0XHRweXF1aWwgKz0gXCJcXG5cIjtcblx0XHRpZih2ZXJzaW9uIDwgMikge1xuXHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicXZtID0gUVZNQ29ubmVjdGlvbigpXFxuXCI7XG5cblx0XHRcdGlmKGh5YnJpZCkge1xuXHRcdFx0XHRweXF1aWwgKz0gXCJcXG5cIlxuXG5cdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcIiMgQ0FMQ1VMQVRFIENPU1QgSEVSRVxcblwiO1xuXG5cdFx0XHRcdHZhciBjb3N0RnVuY3Rpb24gPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMuY29zdEZ1bmN0aW9uID8gdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMuY29zdEZ1bmN0aW9uLnB5dGhvbiB8fCBcIlwiIDogXCJcIjtcblx0XHRcdFx0aWYoIWNvc3RGdW5jdGlvbi50cmltKCkpIHtcblx0XHRcdFx0XHRjb3N0RnVuY3Rpb24gPSBcImNvc3QgPSAwXCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRweXF1aWwgKz0gYWRqdXN0SWRlbnRhdGlvbihjb3N0RnVuY3Rpb24sIGluZGVudCk7XG5cblx0XHRcdFx0cHlxdWlsICs9IFwiXFxuXCJcblx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicmV0dXJuIGNvc3RcXG5cIlxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicHJpbnQocXZtLnJ1bihwKSlcXG5cIjtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYoc2hvdHMpIHtcblx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicC53cmFwX2luX251bXNob3RzX2xvb3Aoc2hvdHMpXFxuXCI7XG5cdFx0XHRcdHB5cXVpbCArPSBcIlxcblwiO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgbGF0dGljZU5hbWUgPSBsYXR0aWNlO1xuXHRcdFx0aWYoIWxhdHRpY2VOYW1lKSB7XG5cdFx0XHRcdGlmKHZlcnNpb24gPCAyLjEpIHtcblx0XHRcdFx0XHRsYXR0aWNlTmFtZSA9IHRoaXMubnVtUXViaXRzICsgXCJxLWdlbmVyaWMtcXZtXCI7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bGF0dGljZU5hbWUgPSB0aGlzLm51bVF1Yml0cyArIFwicS1xdm1cIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJxYyA9IGdldF9xYygnXCIgKyBsYXR0aWNlTmFtZSArIFwiJ1wiICsgKGxhdHRpY2UgPyAoXCIsIGFzX3F2bT1cIiArIChhc1FWTSA/IFwiVHJ1ZVwiIDogXCJGYWxzZVwiKSkgOiBcIlwiKSArIFwiKVxcblwiO1xuXG5cdFx0XHRpZihsYXR0aWNlKSB7XG5cdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcImVwID0gcWMuY29tcGlsZShwKVxcblwiO1xuXG5cdFx0XHRcdGlmKGdvdE1lYXN1cmVtZW50KSB7XG5cblx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJyZXN1bHRzX2xpc3QgPSBxYy5ydW4oZXApLnJlYWRvdXRfZGF0YS5nZXQoXFxcInJvXFxcIilcXG5cIjtcblx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJyZXN1bHRzID0gbGlzdChtYXAobGFtYmRhIGFycjogcmVkdWNlKGxhbWJkYSB4LCB5OiBzdHIoeCkgKyBzdHIoeSksIGFycls6Oi0xXSwgXFxcIlxcXCIpLCByZXN1bHRzX2xpc3QpKVxcblwiO1xuXG5cdFx0XHRcdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJjb3VudHMgPSBDb3VudGVyKGRpY3QoemlwKHJlc3VsdHMsW3Jlc3VsdHMuY291bnQoaSkgZm9yIGkgaW4gcmVzdWx0c10pKSlcXG5cIjtcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIlxcblwiXG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCIjIENBTENVTEFURSBDT1NUIEhFUkVcXG5cIjtcblxuXHRcdFx0XHRcdFx0dmFyIGNvc3RGdW5jdGlvbiA9IHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucy5jb3N0RnVuY3Rpb24gPyB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucy5jb3N0RnVuY3Rpb24ucHl0aG9uIHx8IFwiXCIgOiBcIlwiO1xuXHRcdFx0XHRcdFx0aWYoIWNvc3RGdW5jdGlvbi50cmltKCkpIHtcblx0XHRcdFx0XHRcdFx0Y29zdEZ1bmN0aW9uID0gXCJjb3N0ID0gMFwiO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gYWRqdXN0SWRlbnRhdGlvbihjb3N0RnVuY3Rpb24sIGluZGVudCk7XG5cblx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIlxcblwiXG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJyZXR1cm4gY29zdFxcblwiXG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcImNvdW50cyA9IGRpY3QoemlwKHJlc3VsdHMsW3Jlc3VsdHMuY291bnQoaSkgZm9yIGkgaW4gcmVzdWx0c10pKVxcblwiO1xuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicHJpbnQoY291bnRzKVxcblwiO1x0XHRcdFx0XHRcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJjb3VudHMgPSBDb3VudGVyKGRpY3QoemlwKHJlc3VsdHMsW3Jlc3VsdHMuY291bnQoaSkgZm9yIGkgaW4gcmVzdWx0c10pKSlcXG5cIjtcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIlxcblwiXG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCIjIENBTENVTEFURSBDT1NUIEhFUkVcXG5cIjtcblxuXHRcdFx0XHRcdFx0dmFyIGNvc3RGdW5jdGlvbiA9IHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucy5jb3N0RnVuY3Rpb24gPyB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucy5jb3N0RnVuY3Rpb24ucHl0aG9uIHx8IFwiXCIgOiBcIlwiO1xuXHRcdFx0XHRcdFx0aWYoIWNvc3RGdW5jdGlvbi50cmltKCkpIHtcblx0XHRcdFx0XHRcdFx0Y29zdEZ1bmN0aW9uID0gXCJjb3N0ID0gMFwiO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gYWRqdXN0SWRlbnRhdGlvbihjb3N0RnVuY3Rpb24sIGluZGVudCk7XG5cblx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIlxcblwiXG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJyZXR1cm4gY29zdFxcblwiXG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInByaW50KHFjLnJ1bihlcCkucmVhZG91dF9kYXRhLmdldChcXFwicm9cXFwiKSlcXG5cIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmKGdvdE1lYXN1cmVtZW50KSB7XG5cdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicmVzdWx0c19saXN0ID0gcWMucnVuKHApLnJlYWRvdXRfZGF0YS5nZXQoXFxcInJvXFxcIilcXG5cIjtcblx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJyZXN1bHRzID0gbGlzdChtYXAobGFtYmRhIGFycjogcmVkdWNlKGxhbWJkYSB4LCB5OiBzdHIoeCkgKyBzdHIoeSksIGFycls6Oi0xXSwgXFxcIlxcXCIpLCByZXN1bHRzX2xpc3QpKVxcblwiO1xuXHRcdFx0XHRcdGlmKGh5YnJpZCkge1xuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwiY291bnRzID0gQ291bnRlcihkaWN0KHppcChyZXN1bHRzLFtyZXN1bHRzLmNvdW50KGkpIGZvciBpIGluIHJlc3VsdHNdKSkpXFxuXCI7XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gXCJcXG5cIlxuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwiIyBDQUxDVUxBVEUgQ09TVCBIRVJFXFxuXCI7XG5cblx0XHRcdFx0XHRcdHZhciBjb3N0RnVuY3Rpb24gPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMuY29zdEZ1bmN0aW9uID8gdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMuY29zdEZ1bmN0aW9uLnB5dGhvbiB8fCBcIlwiIDogXCJcIjtcblx0XHRcdFx0XHRcdGlmKCFjb3N0RnVuY3Rpb24udHJpbSgpKSB7XG5cdFx0XHRcdFx0XHRcdGNvc3RGdW5jdGlvbiA9IFwiY29zdCA9IDBcIjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGFkanVzdElkZW50YXRpb24oY29zdEZ1bmN0aW9uLCBpbmRlbnQpO1xuXG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gXCJcXG5cIlxuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicmV0dXJuIGNvc3RcXG5cIlxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJjb3VudHMgPSBkaWN0KHppcChyZXN1bHRzLFtyZXN1bHRzLmNvdW50KGkpIGZvciBpIGluIHJlc3VsdHNdKSlcXG5cIjtcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInByaW50KGNvdW50cylcXG5cIjtcdFx0XHRcdFx0XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInJlc3VsdHNfbGlzdCA9IHFjLnJ1bihwKS5yZWFkb3V0X2RhdGEuZ2V0KFxcXCJyb1xcXCIpXFxuXCI7XG5cdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicmVzdWx0cyA9IGxpc3QobWFwKGxhbWJkYSBhcnI6IHJlZHVjZShsYW1iZGEgeCwgeTogc3RyKHgpICsgc3RyKHkpLCBhcnJbOjotMV0sIFxcXCJcXFwiKSwgcmVzdWx0c19saXN0KSlcXG5cIjtcblx0XHRcdFx0XHRpZihoeWJyaWQpIHtcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcImNvdW50cyA9IENvdW50ZXIoZGljdCh6aXAocmVzdWx0cyxbcmVzdWx0cy5jb3VudChpKSBmb3IgaSBpbiByZXN1bHRzXSkpKVxcblwiO1xuXHRcdFx0XHRcdFx0cHlxdWlsICs9IFwiXFxuXCJcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcIiMgQ0FMQ1VMQVRFIENPU1QgSEVSRVxcblwiO1xuXG5cdFx0XHRcdFx0XHR2YXIgY29zdEZ1bmN0aW9uID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLmNvc3RGdW5jdGlvbiA/IHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLmNvc3RGdW5jdGlvbi5weXRob24gfHwgXCJcIiA6IFwiXCI7XG5cdFx0XHRcdFx0XHRpZighY29zdEZ1bmN0aW9uLnRyaW0oKSkge1xuXHRcdFx0XHRcdFx0XHRjb3N0RnVuY3Rpb24gPSBcImNvc3QgPSAwXCI7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHB5cXVpbCArPSBhZGp1c3RJZGVudGF0aW9uKGNvc3RGdW5jdGlvbiwgaW5kZW50KTtcblxuXHRcdFx0XHRcdFx0cHlxdWlsICs9IFwiXFxuXCJcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInJldHVybiBjb3N0XFxuXCJcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicHJpbnQocmVzdWx0cylcXG5cIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZihoeWJyaWQpIHtcblx0XHRcdHZhciBnbG9iYWxQYXJhbUxpc3QgPSBcIlwiO1xuXHRcdFx0dGhpcy5wYXJhbXMubWFwKGZ1bmN0aW9uKGdsb2JhbFBhcmFtTmFtZSwgZ2xvYmFsUGFyYW1JbmRleCkge1xuXHRcdFx0XHRpZihnbG9iYWxQYXJhbUluZGV4ID4gMCkge1xuXHRcdFx0XHRcdGdsb2JhbFBhcmFtTGlzdCArPSBcIiwgXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0Z2xvYmFsUGFyYW1MaXN0ICs9IGdsb2JhbFBhcmFtTmFtZTtcblx0XHRcdH0pO1xuXG5cdFx0XHRweXF1aWwgKz0gXCJcXG5cIjtcblx0XHRcdHB5cXVpbCArPSBcInBhcmFtcyA9IG5wLmFycmF5KFtcIiArIGdsb2JhbFBhcmFtTGlzdCArIFwiXSlcXG5cIjtcblx0XHRcdHB5cXVpbCArPSBcIlxcblwiO1xuXHRcdFx0cHlxdWlsICs9IFwibWluaW11bSA9IG1pbmltaXplKG9iamVjdGl2ZV9mdW5jdGlvbiwgcGFyYW1zLCBtZXRob2Q9XFxcIlwiICsgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucy5vcHRpbWl6ZXIgPyB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucy5vcHRpbWl6ZXIgOiBcIlBvd2VsbFwiKSArIFwiXFxcIiwgdG9sPXRvbGVyYW5jZSlcXG5cIjtcblx0XHRcdHB5cXVpbCArPSBcInByaW50KFxcXCJjb3N0OlxcXCIsIG1pbmltdW0uZnVuLCBcXFwicGFyYW1zOlxcXCIsIG1pbmltdW0ueClcXG5cIjtcblx0XHR9XG5cdH1cblxuXHRpZihhc0p1cHl0ZXIpIHtcblx0XHR2YXIgbm90ZWJvb2sgPSB7XG5cdFx0XHRtZXRhZGF0YToge1xuXHRcdFx0XHRrZXJuZWxzcGVjOiB7XG5cdFx0XHRcdFx0ZGlzcGxheV9uYW1lOiBcIlB5dGhvbiAzXCIsXG5cdFx0XHRcdFx0bGFuZ3VhZ2U6IFwicHl0aG9uXCIsXG5cdFx0XHRcdFx0bmFtZTogXCJweXRob24zXCJcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdG5iZm9ybWF0OiA0LFxuXHRcdFx0bmJmb3JtYXRfbWlub3I6IDAsXG5cdFx0XHRjZWxsczogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y2VsbF90eXBlOiBcImNvZGVcIixcblx0XHRcdFx0XHRzb3VyY2U6IHB5cXVpbCxcblx0XHRcdFx0XHRtZXRhZGF0YToge1xuXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRvdXRwdXRzOiBbXSxcblx0XHRcdFx0XHRleGVjdXRpb25fY291bnQ6IG51bGxcblx0XHRcdFx0fVxuXHRcdFx0XVxuXHRcdH07XG5cdFx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KG5vdGVib29rKTtcblx0fVxuXG5cdHJldHVybiBweXF1aWw7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0VG9RdWlsID0gZnVuY3Rpb24ob3B0aW9ucywgZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR2YXIgY29tbWVudCA9IG9wdGlvbnMuY29tbWVudDtcblxuXHQvLyBRVUlMIFN1Ym1vZHVsZXMgbm90IHN1cHBvcnRlZFxuXHR2YXIgZGVjb21wb3NlID0gdHJ1ZTsgLy8gb3B0aW9ucy5kZWNvbXBvc2U7XG5cdHZhciB2ZXJzaW9uU3RyID0gb3B0aW9ucy52ZXJzaW9uU3RyO1xuXG5cdHZhciBzZWxmID0gdGhpcztcblxuXHR2YXIgdmVyc2lvbiA9IHBhcnNlRmxvYXQodmVyc2lvblN0ciB8fCBcIjIuMFwiKTtcblx0aWYoaXNOYU4odmVyc2lvbikpIHtcblx0XHR2ZXJzaW9uID0gMi4wO1xuXHR9XG5cblx0Ly8gZGVjb21wb3NlID9cblx0dmFyIGNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0Y2lyY3VpdC5sb2FkKHRoaXMuc2F2ZShkZWNvbXBvc2UpKTtcblxuXHR2YXIgcXVpbCA9IFwiXCI7XG5cblx0Ly8gY29tbWVudFxuXHRpZihjb21tZW50KSB7XG5cdFx0dmFyIGNvbW0gPSAoY29tbWVudCB8fCBcIlwiKS5zcGxpdChcIlxcblwiKTtcblx0XHRjb21tLm1hcChmdW5jdGlvbihjbGluZSkge1xuXHRcdFx0aWYoY2xpbmUubGVuZ3RoID49IDEgJiYgY2xpbmVbMF0gIT0gXCIjXCIpIHtcblx0XHRcdFx0cXVpbCArPSBcIiMgXCI7XG5cdFx0XHR9XG5cdFx0XHRxdWlsICs9IGNsaW5lO1xuXHRcdFx0cXVpbCArPSBcIlxcblwiO1xuXHRcdH0pO1xuXHR9XG5cblx0dmFyIHVzZWRHYXRlcyA9IGNpcmN1aXQudXNlZEdhdGVzKCk7XG5cdHVzZWRHYXRlcy5tYXAoZnVuY3Rpb24odXNlZEdhdGVOYW1lKSB7XG5cdFx0dmFyIGJhc2ljR2F0ZSA9IGNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdGlmKGJhc2ljR2F0ZSkge1xuXHRcdFx0aWYoYmFzaWNHYXRlLmV4cG9ydEluZm8gJiYgYmFzaWNHYXRlLmV4cG9ydEluZm8ucXVpbCkge1xuXHRcdFx0XHRpZihiYXNpY0dhdGUuZXhwb3J0SW5mby5xdWlsLmRlZmdhdGUpIHtcblx0XHRcdFx0XHRxdWlsICs9IGJhc2ljR2F0ZS5leHBvcnRJbmZvLnF1aWwuZGVmZ2F0ZTtcblx0XHRcdFx0XHRxdWlsICs9IFwiXFxuXFxuXCI7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIGJhc2ljIGdhdGUgbm90IHN1cHBvcnRlZCBieSBxdWlsXG5cdFx0XHRcdC8vIFRPRE86IGFkZCBxdWlsIGRlZmluZSBnYXRlIGNvZGVcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdHZhciBnb3RDb25kaXRpb25zID0gdGhpcy5nb3RDbGFzc2ljYWxDb250cm9sKCk7XG5cdHZhciBpbmRlbnQgPSBcIlwiO1xuXHRpZihleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0dmFyIHBhcmFtcyA9IFwiXCI7XG5cdFx0aWYoY2lyY3VpdC5wYXJhbXMubGVuZ3RoKSB7XG5cdFx0XHRwYXJhbXMgKz0gXCIoXCI7XG5cdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgY2lyY3VpdC5wYXJhbXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYoaSA+IDApIHtcblx0XHRcdFx0XHRwYXJhbXMgKz0gXCIsIFwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHBhcmFtcyArPSBcIiVcIiArIGNpcmN1aXQucGFyYW1zW2ldO1xuXHRcdFx0fVxuXHRcdFx0cGFyYW1zICs9IFwiKVwiO1xuXHRcdH1cblxuXHRcdHZhciBhcmdzID0gXCJcIjtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgY2lyY3VpdC5udW1RdWJpdHM7IGkrKykge1xuXHRcdFx0aWYoaSA+IDApIHtcblx0XHRcdFx0YXJncyArPSBcIiBcIjtcblx0XHRcdH1cblx0XHRcdGFyZ3MgKz0gXCJxXCIgKyBpO1xuXHRcdH1cblx0XHRxdWlsICs9IFwiREVGQ0lSQ1VJVCBcIiArIGV4cG9ydEFzR2F0ZU5hbWUgKyAocGFyYW1zID8gXCIgXCIgKyBwYXJhbXMgOiBcIlwiKSArIChhcmdzID8gXCIgXCIgKyBhcmdzIDogXCJcIikgKyBcIjpcXG5cIjtcblx0XHRpbmRlbnQgPSBcIiAgICBcIjtcblx0fSBlbHNlIHtcblx0XHRxdWlsICs9IFwiXFxuXCI7XG5cblx0XHRpZih2ZXJzaW9uID49IDIpIHtcblx0XHRcdHZhciB0b3RhbEJpdHMgPSBjaXJjdWl0LmNyZWdUb3RhbEJpdHMoKTtcblx0XHRcdGlmKGdvdENvbmRpdGlvbnMpIHtcblx0XHRcdFx0dG90YWxCaXRzICs9IDE7XG5cdFx0XHR9O1xuXHRcdFx0aWYodG90YWxCaXRzKSB7XG5cdFx0XHRcdHF1aWwgKz0gXCJERUNMQVJFIHJvIEJJVFtcIiArIHRvdGFsQml0cyArIFwiXVxcblwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHZhciBnbG9iYWxQYXJhbXMgPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLnBhcmFtcyA/IHRoaXMub3B0aW9ucy5wYXJhbXMgOiB7fTtcblx0XHRpZih0aGlzLnBhcmFtcy5sZW5ndGgpIHtcblx0XHRcdHF1aWwgKz0gXCJcXG5cIjtcblx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhcmFtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHR2YXIgZ2xvYmFsUGFyYW1OYW1lID0gdGhpcy5wYXJhbXNbaV07XG5cblx0XHRcdFx0dmFyIG5vZGUgPSBtYXRoLnBhcnNlKGdsb2JhbFBhcmFtc1tnbG9iYWxQYXJhbU5hbWVdKTtcblx0XHRcdFx0dmFyIGdsb2JhbFBhcmFtVmFsdWUgPSBub2RlLnRvU3RyaW5nKHsgaGFuZGxlcjogbWF0aFRvU3RyaW5nSGFuZGxlciB9KTtcblxuXHRcdFx0XHRxdWlsICs9IFwiREVDTEFSRSBcIiArIGdsb2JhbFBhcmFtTmFtZSArIFwiIFJFQUxbMV1cXG5cIjtcblx0XHRcdH1cblx0XHRcdHF1aWwgKz0gXCJcXG5cIjtcblx0XHR9XG5cblx0XHR2YXIgdXNlZEdhdGVzID0gY2lyY3VpdC51c2VkR2F0ZXMoKTtcblx0XHRpZighZGVjb21wb3NlKSB7XG5cdFx0XHR1c2VkR2F0ZXMubWFwKGZ1bmN0aW9uKHVzZWRHYXRlTmFtZSkge1xuXHRcdFx0XHR2YXIgYmFzaWNHYXRlID0gY2lyY3VpdC5iYXNpY0dhdGVzW3VzZWRHYXRlTmFtZV07XG5cdFx0XHRcdGlmKCFiYXNpY0dhdGUpIHtcblx0XHRcdFx0XHR2YXIgY3VzdG9tR2F0ZSA9IHNlbGYuY3VzdG9tR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRcdFx0XHRpZihjdXN0b21HYXRlKSB7XG5cdFx0XHRcdFx0XHR2YXIgY3VzdG9tQ2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRcdFx0XHRcdFx0Y3VzdG9tQ2lyY3VpdC5sb2FkKGN1c3RvbUdhdGUpO1xuXHRcdFx0XHRcdFx0dmFyIG5ld09wdGlvbnMgPSB7XG5cdFx0XHRcdFx0XHRcdGNvbW1lbnQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdGRlY29tcG9zZTogZmFsc2Vcblx0XHRcdFx0XHRcdH07XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0cXVpbCArPSBjdXN0b21DaXJjdWl0LmV4cG9ydFRvUXVpbChuZXdPcHRpb25zLCBleHBvcnRBc0dhdGVOYW1lKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdHZhciBtYXRoVG9TdHJpbmdIYW5kbGVyID0gZnVuY3Rpb24obm9kZSwgb3B0aW9ucykge1xuXHRcdGlmKG5vZGUuaXNTeW1ib2xOb2RlICYmIGNpcmN1aXQucGFyYW1zLmluZGV4T2Yobm9kZS5uYW1lKSA+PSAwKSB7XG5cdFx0XHRyZXR1cm4gXCIlXCIgKyBub2RlLm5hbWU7XG5cdFx0fVxuXHR9O1xuXG5cdHZhciBsYWJlbENvdW50ZXIgPSAxO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IGNpcmN1aXQubnVtQ29scygpOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBjaXJjdWl0Lm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGNpcmN1aXQuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0dmFyIGdhdGVEZWYgPSBjaXJjdWl0LmdldEdhdGVEZWYoZ2F0ZS5uYW1lKTtcblx0XHRcdFx0dmFyIGdhdGVQYXJhbXMgPSBnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLnBhcmFtcyA/IGdhdGUub3B0aW9ucy5wYXJhbXMgOiB7fTtcblx0XHRcdFx0dmFyIHF1aWxJbmZvID0gbnVsbDtcblx0XHRcdFx0aWYoZ2F0ZURlZikge1xuXHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mbykge1xuXHRcdFx0XHRcdFx0aWYoZ2F0ZURlZi5leHBvcnRJbmZvLnF1aWwgJiYgZ2F0ZURlZi5leHBvcnRJbmZvLnF1aWwucmVwbGFjZW1lbnQpIHtcblx0XHRcdFx0XHRcdFx0aWYoZ2F0ZURlZi5leHBvcnRJbmZvLnF1aWwucmVwbGFjZW1lbnQucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdFx0Z2F0ZVBhcmFtcyA9IGdhdGVEZWYuZXhwb3J0SW5mby5xdWlsLnJlcGxhY2VtZW50LnBhcmFtcztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRnYXRlRGVmID0gY2lyY3VpdC5nZXRHYXRlRGVmKGdhdGVEZWYuZXhwb3J0SW5mby5xdWlsLnJlcGxhY2VtZW50Lm5hbWUpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRxdWlsSW5mbyA9IChnYXRlRGVmICYmIGdhdGVEZWYuZXhwb3J0SW5mbyAmJiBnYXRlRGVmLmV4cG9ydEluZm8ucXVpbCkgPyBnYXRlRGVmLmV4cG9ydEluZm8ucXVpbCA6IG51bGw7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dmFyIGluc2lkZUNvbnRyb2wgPSBmYWxzZTtcblx0XHRcdFx0XHRpZihnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcpIHtcblx0XHRcdFx0XHRcdC8vIC0tLVxuXHRcdFx0XHRcdFx0Ly8gRmxvdyBjb250cm9sXG5cdFx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHRcdGluc2lkZUNvbnRyb2wgPSB0cnVlO1xuXHRcdFx0XHRcdFx0cXVpbCArPSBcIlxcblwiO1xuXG5cdFx0XHRcdFx0XHR2YXIgdGVzdEJpdCA9IHNlbGYuY3JlZ1RvdGFsQml0cygpO1xuXHRcdFx0XHRcdFx0dmFyIGNvbmRpdGlvbiA9IGdhdGUub3B0aW9ucy5jb25kaXRpb247XG5cdFx0XHRcdFx0XHR2YXIgY29uZGl0aW9uVmFsdWUgPSBjb25kaXRpb24udmFsdWUgfHwgMDtcblx0XHRcdFx0XHRcdHZhciBjcmVnQmFzZSA9IHNlbGYuY3JlZ0Jhc2UoY29uZGl0aW9uLmNyZWcpO1xuXG5cdFx0XHRcdFx0XHRpZihjb25kaXRpb25WYWx1ZSA9PSAwKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBjcmVnU2l6ZSA9IHNlbGYuY3JlZ3NbY29uZGl0aW9uLmNyZWddLmxlbmd0aDtcblx0XHRcdFx0XHRcdFx0aWYodmVyc2lvbiA8IDIpIHtcblx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IGluZGVudCArIFwiRkFMU0UgW1wiICsgdGVzdEJpdCArIFwiXVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgYml0SW5kZXggPSAwOyBiaXRJbmRleCA8IGNyZWdTaXplOyBiaXRJbmRleCsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IGluZGVudCArIFwiT1IgW1wiICsgKGJpdEluZGV4ICsgY3JlZ0Jhc2UpICsgXCJdIFtcIiArIHRlc3RCaXQgKyBcIl1cXG5cIjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBpbmRlbnQgKyBcIk5PVCBbXCIgKyB0ZXN0Qml0ICsgXCJdXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBcIkpVTVAtV0hFTiBAVEhFTlwiICsgbGFiZWxDb3VudGVyICsgXCIgW1wiICsgdGVzdEJpdCArIFwiXVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJKVU1QIEBFTkRcIiArIChsYWJlbENvdW50ZXIgKyAxKSArIFwiXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBcIkxBQkVMIEBUSEVOXCIgKyBsYWJlbENvdW50ZXIgKyBcIlxcblwiO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gaW5kZW50ICsgXCJGQUxTRSByb1tcIiArIHRlc3RCaXQgKyBcIl1cXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGJpdEluZGV4ID0gMDsgYml0SW5kZXggPCBjcmVnU2l6ZTsgYml0SW5kZXgrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBpbmRlbnQgKyBcIk9SIHJvW1wiICsgKGJpdEluZGV4ICsgY3JlZ0Jhc2UpICsgXCJdIHJvW1wiICsgdGVzdEJpdCArIFwiXVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IGluZGVudCArIFwiTk9UIHJvW1wiICsgdGVzdEJpdCArIFwiXVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJKVU1QLVdIRU4gQFRIRU5cIiArIGxhYmVsQ291bnRlciArIFwiIHJvW1wiICsgdGVzdEJpdCArIFwiXVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJKVU1QIEBFTkRcIiArIChsYWJlbENvdW50ZXIgKyAxKSArIFwiXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBcIkxBQkVMIEBUSEVOXCIgKyBsYWJlbENvdW50ZXIgKyBcIlxcblwiO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR2YXIgYml0U3RyID0gY29uZGl0aW9uVmFsdWUudG9TdHJpbmcoMikuc3BsaXQoXCJcIikucmV2ZXJzZSgpO1xuXHRcdFx0XHRcdFx0XHR2YXIgYml0Q291bnQgPSAwO1xuXHRcdFx0XHRcdFx0XHR2YXIgc2luZ2xlQml0SW5kZXggPSAwO1xuXHRcdFx0XHRcdFx0XHRiaXRTdHIubWFwKGZ1bmN0aW9uKGJpdFZhbHVlLCBiaXRJbmRleCkge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBiaXRWYWwgPSBwYXJzZUludChiaXRWYWx1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0Yml0U3RyW2JpdEluZGV4XSA9IGJpdFZhbDtcblx0XHRcdFx0XHRcdFx0XHRpZihiaXRWYWwpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGJpdENvdW50Kys7XG5cdFx0XHRcdFx0XHRcdFx0XHRzaW5nbGVCaXRJbmRleCA9IGJpdEluZGV4O1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdFx0aWYoYml0Q291bnQgPT0gMSkge1xuXHRcdFx0XHRcdFx0XHRcdGlmKHZlcnNpb24gPCAyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiSlVNUC1XSEVOIEBUSEVOXCIgKyBsYWJlbENvdW50ZXIgKyBcIiBbXCIgKyAoc2luZ2xlQml0SW5kZXggKyBjcmVnQmFzZSkgKyBcIl1cXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJKVU1QIEBFTkRcIiArIChsYWJlbENvdW50ZXIgKyAxKSArIFwiXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiTEFCRUwgQFRIRU5cIiArIGxhYmVsQ291bnRlciArIFwiXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJKVU1QLVdIRU4gQFRIRU5cIiArIGxhYmVsQ291bnRlciArIFwiIHJvW1wiICsgKHNpbmdsZUJpdEluZGV4ICsgY3JlZ0Jhc2UpICsgXCJdXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiSlVNUCBARU5EXCIgKyAobGFiZWxDb3VudGVyICsgMSkgKyBcIlxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBcIkxBQkVMIEBUSEVOXCIgKyBsYWJlbENvdW50ZXIgKyBcIlxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRpZih2ZXJzaW9uIDwgMikge1xuXHRcdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBpbmRlbnQgKyBcIkZBTFNFIFtcIiArIHRlc3RCaXQgKyBcIl1cXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBmaXJzdFNldCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRiaXRTdHIubWFwKGZ1bmN0aW9uKGJpdFZhbHVlLCBiaXRJbmRleCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZihiaXRWYWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGZpcnN0U2V0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaXJzdFNldCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBpbmRlbnQgKyBcIk9SIFtcIiArIChiaXRJbmRleCArIGNyZWdCYXNlKSArIFwiXSBbXCIgKyB0ZXN0Qml0ICsgXCJdXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gaW5kZW50ICsgXCJBTkQgW1wiICsgKGJpdEluZGV4ICsgY3JlZ0Jhc2UpICsgXCJdIFtcIiArIHRlc3RCaXQgKyBcIl1cXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBcIkpVTVAtV0hFTiBAVEhFTlwiICsgbGFiZWxDb3VudGVyICsgXCIgW1wiICsgdGVzdEJpdCArIFwiXVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBcIkpVTVAgQEVORFwiICsgKGxhYmVsQ291bnRlciArIDEpICsgXCJcXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJMQUJFTCBAVEhFTlwiICsgbGFiZWxDb3VudGVyICsgXCJcXG5cIjtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBpbmRlbnQgKyBcIkZBTFNFIHJvW1wiICsgdGVzdEJpdCArIFwiXVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGZpcnN0U2V0ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdGJpdFN0ci5tYXAoZnVuY3Rpb24oYml0VmFsdWUsIGJpdEluZGV4KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGJpdFZhbHVlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoZmlyc3RTZXQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpcnN0U2V0ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IGluZGVudCArIFwiT1Igcm9bXCIgKyAoYml0SW5kZXggKyBjcmVnQmFzZSkgKyBcIl0gcm9bXCIgKyB0ZXN0Qml0ICsgXCJdXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gaW5kZW50ICsgXCJBTkQgcm9bXCIgKyAoYml0SW5kZXggKyBjcmVnQmFzZSkgKyBcIl0gcm9bXCIgKyB0ZXN0Qml0ICsgXCJdXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJKVU1QLVdIRU4gQFRIRU5cIiArIGxhYmVsQ291bnRlciArIFwiIHJvW1wiICsgdGVzdEJpdCArIFwiXVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBcIkpVTVAgQEVORFwiICsgKGxhYmVsQ291bnRlciArIDEpICsgXCJcXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJMQUJFTCBAVEhFTlwiICsgbGFiZWxDb3VudGVyICsgXCJcXG5cIjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC8vIC0tLVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKHF1aWxJbmZvKSB7XG5cdFx0XHRcdFx0XHRxdWlsICs9IGluZGVudCArIHF1aWxJbmZvLm5hbWU7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHF1aWwgKz0gaW5kZW50ICsgZ2F0ZS5uYW1lO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHF1aWwgKz0gXCIgXCI7XG5cdFx0XHRcdFx0dmFyIGFyZ0NvdW50ID0gMDtcblx0XHRcdFx0XHRpZihxdWlsSW5mbyAmJiBxdWlsSW5mby5wYXJhbXMgJiYgcXVpbEluZm8ucGFyYW1zLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0cXVpbCArPSBcIihcIjtcblx0XHRcdFx0XHRcdGZvcih2YXIgcCA9IDA7IHAgPCBxdWlsSW5mby5wYXJhbXMubGVuZ3RoOyBwKyspIHtcblx0XHRcdFx0XHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHRcdFx0Ly8gcHJlcGVuZCAnJScgdG8gZ2xvYmFsIHBhcmFtc1xuXHRcdFx0XHRcdFx0XHRpZih0eXBlb2YgZ2F0ZVBhcmFtc1txdWlsSW5mby5wYXJhbXNbcF1dICE9IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgbm9kZSA9IG1hdGgucGFyc2UoZ2F0ZVBhcmFtc1txdWlsSW5mby5wYXJhbXNbcF1dKTtcblx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IG5vZGUudG9TdHJpbmcoeyBoYW5kbGVyOiBtYXRoVG9TdHJpbmdIYW5kbGVyIH0pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdC8vIC0tLVxuXG5cdFx0XHRcdFx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRxdWlsICs9IFwiKVwiO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpZihnYXRlRGVmICYmIGdhdGVEZWYucGFyYW1zICYmIGdhdGVEZWYucGFyYW1zLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiKFwiO1xuXHRcdFx0XHRcdFx0XHRmb3IodmFyIHAgPSAwOyBwIDwgZ2F0ZURlZi5wYXJhbXMubGVuZ3RoOyBwKyspIHtcblx0XHRcdFx0XHRcdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdC8vIC0tLVxuXHRcdFx0XHRcdFx0XHRcdC8vIHByZXBlbmQgJyUnIHRvIGdsb2JhbCBwYXJhbXNcblx0XHRcdFx0XHRcdFx0XHRpZih0eXBlb2YgZ2F0ZVBhcmFtc1tnYXRlRGVmLnBhcmFtc1twXV0gIT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIG5vZGUgPSBtYXRoLnBhcnNlKGdhdGVQYXJhbXNbZ2F0ZURlZi5wYXJhbXNbcF1dKTtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gbm9kZS50b1N0cmluZyh7IGhhbmRsZXI6IG1hdGhUb1N0cmluZ0hhbmRsZXIgfSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdC8vIC0tLVxuXG5cdFx0XHRcdFx0XHRcdFx0YXJnQ291bnQrKztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiKVwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGZvcih2YXIgdyA9IDA7IHcgPCBnYXRlLndpcmVzLmxlbmd0aDsgdysrKSB7XG5cdFx0XHRcdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0XHRcdFx0cXVpbCArPSBcIiBcIjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdFx0XHRcdFx0XHRxdWlsICs9IFwicVwiICsgZ2F0ZS53aXJlc1t3XTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJcIiArIGdhdGUud2lyZXNbd107XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYoZ2F0ZS5uYW1lID09IFwibWVhc3VyZVwiICYmIGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY3JlZykge1xuXHRcdFx0XHRcdFx0dmFyIHRhcmdldEJpdCA9IHBhcnNlSW50KGdhdGUub3B0aW9ucy5jcmVnLmJpdCkgfHwgMDtcblx0XHRcdFx0XHRcdGlmKGlzTmFOKHRhcmdldEJpdCkpIHtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0Qml0ID0gMDtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCIgXCI7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKHZlcnNpb24gPCAyKSB7XG5cdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJbXCIgKyAodGFyZ2V0Qml0ICsgc2VsZi5jcmVnQmFzZShnYXRlLm9wdGlvbnMuY3JlZy5uYW1lKSkgKyBcIl1cIjtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJyb1tcIiArICh0YXJnZXRCaXQgKyBzZWxmLmNyZWdCYXNlKGdhdGUub3B0aW9ucy5jcmVnLm5hbWUpKSArIFwiXVwiO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRhcmdDb3VudCsrO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHF1aWwgKz0gXCJcXG5cIjtcblxuXHRcdFx0XHRcdGlmKGluc2lkZUNvbnRyb2wpIHtcblx0XHRcdFx0XHRcdHF1aWwgKz0gXCJMQUJFTCBARU5EXCIgKyAobGFiZWxDb3VudGVyICsgMSkgKyBcIlxcblwiO1xuXHRcdFx0XHRcdFx0cXVpbCArPSBcIlxcblwiO1xuXHRcdFx0XHRcdFx0bGFiZWxDb3VudGVyICs9IDI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHVua25vd24gZ2F0ZT9cblx0XHRcdFx0XHRjb25zb2xlLmxvZyhcInVua25vd24gZ2F0ZVwiLCBnYXRlLm5hbWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdHF1aWwgKz0gXCJcXG5cIjtcblx0fVxuXG5cdHJldHVybiBxdWlsO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFRvQVFBU00gPSBmdW5jdGlvbihvcHRpb25zLCBpc0V4cG9ydFB5QVFBU00sIGV4cG9ydEFzR2F0ZU5hbWUsIGluZGVudERlcHRoKSB7XG5cdHZhciBzZWxmID0gdGhpcztcblxuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR2YXIgY29tbWVudCA9IG9wdGlvbnMuY29tbWVudDtcblx0dmFyIGRlY29tcG9zZSA9IG9wdGlvbnMuZGVjb21wb3NlO1xuXHR2YXIgYXNKdXB5dGVyID0gb3B0aW9ucy5hc0p1cHl0ZXI7XG5cdHZhciBzaG90cyA9IG9wdGlvbnMuc2hvdHM7XG5cdHZhciBoeWJyaWQgPSAhIWlzRXhwb3J0UHlBUUFTTSA/IG9wdGlvbnMuaHlicmlkIDogZmFsc2U7XG5cblx0dmFyIGNpcmN1aXQgPSBudWxsO1xuXHR2YXIgdGVtcENpcmN1aXQgPSBudWxsO1xuXG5cdHNob3RzID0gc2hvdHMgfHwgMTAyNDtcblxuXHRpZih0eXBlb2YgaHlicmlkID09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRoeWJyaWQgPSB0aGlzLm9wdGlvbnMgPyAhIXRoaXMub3B0aW9ucy5oeWJyaWQgOiBmYWxzZTtcblx0fVxuXG5cdHZhciBvYmogPSB0aGlzLnNhdmUoISFkZWNvbXBvc2UpO1xuXG5cdGNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0dGVtcENpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0Y2lyY3VpdC5sb2FkKG9iaik7XG5cdHRlbXBDaXJjdWl0LmxvYWQob2JqKTtcblxuXHR2YXIgbWF0aFRvU3RyaW5nSGFuZGxlciA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMpIHtcblx0XHRcblx0XHRpZihub2RlLmlzU3ltYm9sTm9kZSkge1xuXHRcdFx0dmFyIG51bXB5cyA9IFtcInBpXCJdO1xuXHRcdFx0aWYobnVtcHlzLmluZGV4T2Yobm9kZS5uYW1lKSA+PSAwKSB7XG5cdFx0XHRcdHJldHVybiBcIm5wLlwiICsgbm9kZS5uYW1lO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHR2YXIgYWRqdXN0SWRlbnRhdGlvbiA9IGZ1bmN0aW9uKGFkZFN0ciwgaWRlbnQpIHtcblx0XHR2YXIgc3RyID0gXCJcIjtcblxuXHRcdC8vIGFkZCB1c2VyIGRlZmluZWQgY29zdCBmdW5jdGlvbiB3aXRoIHByb3BlciBpZGVudGF0aW9uXG5cdFx0dmFyIGNmTGluZXMgPSBhZGRTdHIuc3BsaXQoXCJcXG5cIik7XG5cdFx0dmFyIG1pbklkZW50ID0gLTE7XG5cdFx0Y2ZMaW5lcy5tYXAoZnVuY3Rpb24oY2ZMaW5lKSB7XG5cdFx0XHR2YXIgdG1wSWRlbnQgPSBjZkxpbmUuc2VhcmNoKC9cXFMvKTtcblx0XHRcdGlmKHRtcElkZW50ID49IDAgJiYgKG1pbklkZW50IDwgMCB8fCB0bXBJZGVudCA8IG1pbklkZW50KSkge1xuXHRcdFx0XHRtaW5JZGVudCA9IHRtcElkZW50O1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0aWYobWluSWRlbnQgPCAwKSB7XG5cdFx0XHRtaW5JZGVudCA9IDA7XG5cdFx0fVxuXG5cdFx0dmFyIGFkZElkZW50ID0gXCJcIjtcblx0XHRpZihtaW5JZGVudCA8IGlkZW50Lmxlbmd0aCkge1xuXHRcdFx0Zm9yKHZhciB0bXAgPSAwOyB0bXAgPCAoaWRlbnQubGVuZ3RoIC0gbWluSWRlbnQpOyB0bXArKykge1xuXHRcdFx0XHRhZGRJZGVudCArPSBcIiBcIjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjZkxpbmVzLm1hcChmdW5jdGlvbihjZkxpbmUpIHtcblx0XHRcdHN0ciArPSBhZGRJZGVudCArIGNmTGluZSArIFwiXFxuXCI7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gc3RyO1xuXHR9O1xuXG5cdHZhciBnZXRJbmRlbnQgPSBmdW5jdGlvbihkZXB0aCkge1xuXHRcdHZhciBpbmRlbnQgPSBcIlwiO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBkZXB0aDsgaSsrKSB7XG5cdFx0XHRpbmRlbnQgKz0gXCIgICAgXCI7XG5cdFx0fVxuXHRcdHJldHVybiBpbmRlbnQ7XG5cdH1cblxuXHRpbmRlbnREZXB0aCA9IGluZGVudERlcHRoIHx8IDA7XG5cblx0dmFyIGdhdGVzVG9CZUFkZGVkID0gW107XG5cdGlmKCFpc0V4cG9ydFB5QVFBU00pe1xuXHRcdGlmKCFkZWNvbXBvc2UpIHtcblx0XHRcdHZhciBudW1Db2xzID0gdGVtcENpcmN1aXQubnVtQ29scygpO1xuXHRcdFx0Zm9yKHZhciBjb2x1bW4gPSBudW1Db2xzIC0gMTsgY29sdW1uID49IDA7IGNvbHVtbi0tKSB7XG5cdFx0XHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0ZW1wQ2lyY3VpdC5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0XHRcdHZhciBnYXRlID0gdGVtcENpcmN1aXQuZ2F0ZXNbd2lyZV1bY29sdW1uXTtcblx0XHRcdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDAgJiYgIXRlbXBDaXJjdWl0LmJhc2ljR2F0ZXNbZ2F0ZS5uYW1lXSkge1xuXHRcdFx0XHRcdFx0Y3VzdG9tRGVjb21wb3NlZENpcmN1aXQgPSB0ZW1wQ2lyY3VpdC5kZWNvbXBvc2VHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdFx0XHRcdHZhciBpc0RlY29tcG9zZUN1c3RvbUNpcmN1aXQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdGZvcih2YXIgZGVjb21wb3NlZENvbHVtbiA9IDA7IGRlY29tcG9zZWRDb2x1bW4gPCBjdXN0b21EZWNvbXBvc2VkQ2lyY3VpdC5udW1Db2xzKCk7IGRlY29tcG9zZWRDb2x1bW4rKykge1xuXHRcdFx0XHRcdFx0XHRmb3IodmFyIGRlY29tcG9zZWRXaXJlID0gMDsgZGVjb21wb3NlZFdpcmUgPCBjdXN0b21EZWNvbXBvc2VkQ2lyY3VpdC5udW1RdWJpdHM7IGRlY29tcG9zZWRXaXJlKyspIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgZ2F0ZUluQ3VzdG9tQ2lyY3VpdCA9IGN1c3RvbURlY29tcG9zZWRDaXJjdWl0LmdldEdhdGVBdChkZWNvbXBvc2VkQ29sdW1uLCBkZWNvbXBvc2VkV2lyZSk7XG5cblx0XHRcdFx0XHRcdFx0XHRpZihnYXRlSW5DdXN0b21DaXJjdWl0ICYmIGdhdGVJbkN1c3RvbUNpcmN1aXQuY29ubmVjdG9yID09IDApe1xuXHRcdFx0XHRcdFx0XHRcdFx0Z2F0ZXNUb0JlQWRkZWQucHVzaChnYXRlSW5DdXN0b21DaXJjdWl0KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0Y2lyY3VpdC5nYXRlcy5tYXAoZnVuY3Rpb24oY2lyY3VpdEdhdGUsIGluZGV4KXtcblx0XHRcdFx0XHRcdFx0XHRcdGNpcmN1aXRHYXRlLm1hcChmdW5jdGlvbihnYXRlVG9SZW1vdmUpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZihnYXRlVG9SZW1vdmUgJiYgZ2F0ZVRvUmVtb3ZlLm5hbWUgPT0gZ2F0ZS5uYW1lKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjaXJjdWl0LnJlbW92ZUdhdGUoZ2F0ZVRvUmVtb3ZlLmlkKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdH0pO1x0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0Z2F0ZXNUb0JlQWRkZWQubWFwKGZ1bmN0aW9uKGdhdGVUb0FkZCl7XG5cdFx0XHRpZihnYXRlVG9BZGQpe1xuXHRcdFx0XHRjaXJjdWl0Lmluc2VydEdhdGUoZ2F0ZVRvQWRkLm5hbWUsIGdhdGVUb0FkZC5jb2x1bW4sIGdhdGVUb0FkZC53aXJlcywgZ2F0ZVRvQWRkLm9wdGlvbnMpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0dmFyIGFxYXNtID0gXCJcIjtcblx0dmFyIGluZGVudCA9IGdldEluZGVudChpbmRlbnREZXB0aCk7XG5cdHZhciB1c2VkR2F0ZXMgPSBjaXJjdWl0LnVzZWRHYXRlcygpO1xuXHR2YXIgbnVtUXViaXRzID0gY2lyY3VpdC5udW1RdWJpdHM7XG5cdFxuXHRpZighaXNFeHBvcnRQeUFRQVNNKXtcblx0XHRhcWFzbSArPSBpbmRlbnQgKyAgXCJCRUdJTlxcblwiO1xuXHRcdGFxYXNtICs9IGluZGVudCArICBcInF1Yml0cyBcIiArIG51bVF1Yml0cyArIFwiXFxuXCI7XG5cblx0XHRpZiAoY2lyY3VpdC5jcmVncyl7XG5cdFx0XHR2YXIgY3JlZ0xlbmd0aCA9IDA7XG5cdFx0XHRmb3IodmFyIGNyZWcgaW4gY2lyY3VpdC5jcmVncyl7XG5cdFx0XHRcdGNyZWdMZW5ndGggKz0gY2lyY3VpdC5jcmVnc1tjcmVnXS5sZW5ndGg7XG5cdFx0XHR9XG5cdFx0XHRhcWFzbSArPSBpbmRlbnQgKyBcImNiaXRzIFwiICsgY3JlZ0xlbmd0aCArIFwiXFxuXCI7XG5cdFx0fVxuXHR9ZWxzZSB7XG5cdFx0aWYoZXhwb3J0QXNHYXRlTmFtZSl7XG5cdFx0XHR2YXIgYXJncyA9IFwiXCI7XG5cdFx0XHR2YXIgYXJnQ291bnQgPSAwO1xuXHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNpcmN1aXQucGFyYW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmKGFyZ0NvdW50ID4gMCkge1xuXHRcdFx0XHRcdGFyZ3MgKz0gXCIsIFwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGFyZ3MgKz0gY2lyY3VpdC5wYXJhbXNbaV07XG5cdFx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0XHR9XG5cdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgY2lyY3VpdC5udW1RdWJpdHM7IGkrKykge1xuXHRcdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0XHRhcmdzICs9IFwiLCBcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRhcmdzICs9IHF1Yml0TGV0dGVyKGksIGNpcmN1aXQubnVtUXViaXRzKTtcblx0XHRcdFx0YXJnQ291bnQrKztcblx0XHRcdH1cblx0XHR9ZWxzZSB7XG5cdFx0XHRhcWFzbSArPSBpbmRlbnQgKyBcImZyb20gcWF0LmxhbmcuQVFBU00gaW1wb3J0ICpcXG5cIjtcblx0XHRcdGFxYXNtICs9IGluZGVudCArIFwiZnJvbSBxYXQucXB1cyBpbXBvcnQgZ2V0X2RlZmF1bHRfcXB1XFxuXCI7XG5cdFx0XHRhcWFzbSArPSBpbmRlbnQgKyBcImZyb20gY29sbGVjdGlvbnMgaW1wb3J0IENvdW50ZXJcXG5cIjtcblxuXHRcdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRcdGFxYXNtICs9IGluZGVudCArIFwiZnJvbSBzY2lweS5vcHRpbWl6ZSBpbXBvcnQgbWluaW1pemVcXG5cIjtcblx0XHRcdH1cblx0XHRcdFxuXHRcdFx0YXFhc20gKz0gaW5kZW50ICsgIFwiaW1wb3J0IG51bXB5IGFzIG5wXFxuXCI7XG5cblx0XHRcdGFxYXNtICs9IFwiXFxuXCI7XG5cblx0XHRcdHZhciB1bnN1cHBvcnRlZEdhdGVEZWZpbml0aW9uID0gXCJcIjtcblx0XHRcdHZhciBzdWJtb2R1bGVDb3VudCA9IDA7XG5cdFx0XHR1c2VkR2F0ZXMubWFwKGZ1bmN0aW9uKHVzZWRHYXRlTmFtZSkge1xuXHRcdFx0XHR2YXIgYmFzaWNHYXRlID0gY2lyY3VpdC5iYXNpY0dhdGVzW3VzZWRHYXRlTmFtZV07XG5cdFx0XHRcdGlmKGJhc2ljR2F0ZSkge1xuXHRcdFx0XHRcdGlmKCFkZWNvbXBvc2Upe1xuXHRcdFx0XHRcdFx0aWYoY2lyY3VpdC5iYXNpY0dhdGVzW3VzZWRHYXRlTmFtZV0uZXhwb3J0SW5mby5hcWFzbSAmJiBjaXJjdWl0LmJhc2ljR2F0ZXNbdXNlZEdhdGVOYW1lXS5leHBvcnRJbmZvLmFxYXNtLmFycmF5KSB7XG5cdFx0XHRcdFx0XHRcdHVuc3VwcG9ydGVkQXFhc21JbmZvID0gY2lyY3VpdC5iYXNpY0dhdGVzW3VzZWRHYXRlTmFtZV0uZXhwb3J0SW5mby5hcWFzbTtcblx0XHRcdFxuXHRcdFx0XHRcdFx0XHRnYXRlVW5pdGFyeSA9IHVzZWRHYXRlTmFtZSArIFwiX2dhdGVcIjtcblx0XHRcdFx0XHRcdFx0YXFhc20gKz0gaW5kZW50ICsgXCJkZWYgXCIgKyBnYXRlVW5pdGFyeSArXCIoXCI7XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRpZih1bnN1cHBvcnRlZEFxYXNtSW5mby5wYXJhbXMgJiYgdW5zdXBwb3J0ZWRBcWFzbUluZm8ucGFyYW1zLmxlbmd0aCl7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGFyZ0NvdW50ID0gMDtcblx0XHRcdFx0XHRcdFx0XHR1bnN1cHBvcnRlZEFxYXNtSW5mby5wYXJhbXMubWFwKGZ1bmN0aW9uKHBhcmFtTmFtZSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0YXFhc20gKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0YXFhc20gKz0gaW5kZW50ICsgXCJwX1wiICsgcGFyYW1OYW1lO1xuXHRcdFx0XHRcdFx0XHRcdFx0YXJnQ291bnQrKztcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRhcWFzbSArPSBcIik6XFxuXCI7XG5cdFx0XHRcdFx0XHRcdGFxYXNtICs9IGdldEluZGVudChpbmRlbnREZXB0aCArIDEpICsgXCJyZXR1cm4gbnAuYXJyYXkoXCIgKyAgdW5zdXBwb3J0ZWRBcWFzbUluZm8uYXJyYXkgKyBcIilcXG5cXG5cIjtcdFx0XHRcdFx0XHRcdFxuXG5cdFx0XHRcdFx0XHRcdHVuc3VwcG9ydGVkR2F0ZURlZmluaXRpb24gKz0gdXNlZEdhdGVOYW1lICsgXCIgPSBBYnN0cmFjdEdhdGUoXFxcIlwiICsgdXNlZEdhdGVOYW1lICsgXCJcXFwiLCBbXCI7XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHR2YXIgY291bnQgPSAwO1xuXG5cdFx0XHRcdFx0XHRcdGlmKHVuc3VwcG9ydGVkQXFhc21JbmZvLnBhcmFtcyl7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IHVuc3VwcG9ydGVkQXFhc21JbmZvLnBhcmFtcy5sZW5ndGg7IGkrKyl7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihjb3VudCA+IDApe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR1bnN1cHBvcnRlZEdhdGVEZWZpbml0aW9uICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdHVuc3VwcG9ydGVkR2F0ZURlZmluaXRpb24gKz0gXCJmbG9hdFwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0Y291bnQrKztcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpZihiYXNpY0dhdGUubWF0cml4KXtcblx0XHRcdFx0XHRcdFx0XHRhcml0eSA9IG1hdGgubG9nMihiYXNpY0dhdGUubWF0cml4Lmxlbmd0aCk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHR1bnN1cHBvcnRlZEdhdGVEZWZpbml0aW9uICs9IFwiXSwgbWF0cml4X2dlbmVyYXRvcj1cIiArIGdhdGVVbml0YXJ5ICsgXCIsIGFyaXR5PVwiICsgYXJpdHkgK1wiKVxcblwiO1xuXHRcdFx0XHRcdFx0fVx0XHRcdFx0XHRcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dmFyIGN1c3RvbUdhdGUgPSBzZWxmLmN1c3RvbUdhdGVzW3VzZWRHYXRlTmFtZV07XG5cdFx0XHRcdFx0aWYoY3VzdG9tR2F0ZSkge1xuXHRcdFx0XHRcdFx0dmFyIGN1c3RvbUNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0XHRcdFx0XHRcdGN1c3RvbUNpcmN1aXQubG9hZChjdXN0b21HYXRlKTtcblxuXHRcdFx0XHRcdFx0dmFyIG5ld09wdGlvbnMgPSB7XG5cdFx0XHRcdFx0XHRcdGNvbW1lbnQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdGRlY29tcG9zZTogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0YXNKdXB5dGVyOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0c2hvdHM6IG51bGwsXG5cdFx0XHRcdFx0XHRcdGh5YnJpZDogZmFsc2Vcblx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdGFxYXNtICs9IGN1c3RvbUNpcmN1aXQuZXhwb3J0VG9BUUFTTShuZXdPcHRpb25zLCBpc0V4cG9ydFB5QVFBU00sIHVzZWRHYXRlTmFtZSwgaW5kZW50RGVwdGgpO1xuXHRcdFx0XHRcdFx0c3VibW9kdWxlQ291bnQrKztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRhcWFzbSArPSB1bnN1cHBvcnRlZEdhdGVEZWZpbml0aW9uO1xuXG5cdFx0XHRhcWFzbSArPSBcIlxcblwiO1xuXG5cdFx0XHRpZihzaG90cykge1xuXHRcdFx0XHRhcWFzbSArPSBpbmRlbnQgKyBcInNob3RzID0gXCIgKyBzaG90cyArIFwiXFxuXCI7XG5cdFx0XHRcdGFxYXNtICs9IFwiXFxuXCI7XG5cdFx0XHR9XG5cblx0XHRcdGFxYXNtICs9IGluZGVudCArICBcInByb2dyYW0gPSBQcm9ncmFtKClcXG5cIjtcblx0XHRcdGFxYXNtICs9IGluZGVudCArICBcInF1Yml0c19yZWcgPSBwcm9ncmFtLnFhbGxvYyhcIisgY2lyY3VpdC5udW1RdWJpdHMgK1wiKVxcblwiO1x0XG5cdFx0XHRcblx0XHRcdGZvcih2YXIgY3JlZ05hbWUgaW4gY2lyY3VpdC5jcmVncyl7XG5cdFx0XHRcdGFxYXNtICs9IGluZGVudCArIGNyZWdOYW1lICsgXCIgPSBwcm9ncmFtLmNhbGxvYyhcIiArIGNpcmN1aXQuY3JlZ3NbY3JlZ05hbWVdLmxlbmd0aCArIFwiKVxcblwiO1xuXHRcdFx0fVxuXG5cdFx0XHRhcWFzbSArPSBcIlxcblwiO1xuXG5cdFx0XHR2YXIgZ2xvYmFsUGFyYW1zID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5wYXJhbXMgPyB0aGlzLm9wdGlvbnMucGFyYW1zIDoge307XG5cdFx0XHRpZih0aGlzLnBhcmFtcy5sZW5ndGgpIHtcblx0XHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFyYW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0dmFyIGdsb2JhbFBhcmFtTmFtZSA9IHRoaXMucGFyYW1zW2ldO1xuXG5cdFx0XHRcdFx0dmFyIG5vZGUgPSBtYXRoLnBhcnNlKGdsb2JhbFBhcmFtc1tnbG9iYWxQYXJhbU5hbWVdKTtcblx0XHRcdFx0XHR2YXIgZ2xvYmFsUGFyYW1WYWx1ZSA9IG5vZGUudG9TdHJpbmcoeyBoYW5kbGVyOiBtYXRoVG9TdHJpbmdIYW5kbGVyIH0pO1xuXG5cdFx0XHRcdFx0YXFhc20gKz0gZ2xvYmFsUGFyYW1OYW1lICsgXCIgPSBcIiArIGdsb2JhbFBhcmFtVmFsdWUgKyBcIlxcblwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGFxYXNtICs9IFwiXFxuXCI7XG5cdFx0XHR9XG5cblx0XHRcdGlmKGh5YnJpZCkge1xuXHRcdFx0XHRhcWFzbSArPSBpbmRlbnQgKyBcInRvbGVyYW5jZSA9IFwiICsgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucy50b2xlcmFuY2UgPyB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucy50b2xlcmFuY2UgfHwgXCIwLjAwMVwiIDogXCIwLjAwMVwiKSArIFwiXFxuXCI7XG5cdFx0XHRcdGFxYXNtICs9IFwiXFxuXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYoZXhwb3J0QXNHYXRlTmFtZSl7XG5cdFx0YXFhc20gKz0gXCJkZWYgXCIgKyBleHBvcnRBc0dhdGVOYW1lICsgKGFyZ3MgPyBcIihcIiArIGFyZ3MgKyBcIilcIiA6IFwiXCIpICsgXCI6XFxuXCI7XG5cdFx0aW5kZW50RGVwdGgrKztcblx0XHRpbmRlbnQgPSBnZXRJbmRlbnQoaW5kZW50RGVwdGgpO1xuXHRcdGFxYXNtICs9IGluZGVudCArIFwiY2lyY3VpdCA9IFFSb3V0aW5lKClcXG5cIlx0XG5cdH0gZWxzZSB7XG5cdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRhcWFzbSArPSBcImRlZiBvYmplY3RpdmVfZnVuY3Rpb24ocGFyYW1zKTpcXG5cIlxuXHRcdFx0aW5kZW50RGVwdGgrKztcblx0XHRcdGluZGVudCA9IGdldEluZGVudChpbmRlbnREZXB0aCk7XG5cdFx0fVxuXHR9XG5cblx0aWYoIWV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRpZihzdWJtb2R1bGVDb3VudCkge1xuXHRcdFx0YXFhc20gKz0gXCJcXG5cIjtcblx0XHRcdHVzZWRHYXRlcy5tYXAoZnVuY3Rpb24odXNlZEdhdGVOYW1lKSB7XG5cdFx0XHRcdGlmKCFjaXJjdWl0LmJhc2ljR2F0ZXNbdXNlZEdhdGVOYW1lXSAmJiBjaXJjdWl0LmN1c3RvbUdhdGVzW3VzZWRHYXRlTmFtZV0pIHtcblx0XHRcdFx0XHRhcWFzbSArPSBpbmRlbnQgKyB1c2VkR2F0ZU5hbWUgKyBcIihcIjtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBjaXJjdWl0Lm51bUNvbHMoKTsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgY2lyY3VpdC5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSBjaXJjdWl0LmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmNvbm5lY3RvciA9PSAwKSB7XG5cdFx0XHRcdHZhciBnYXRlRGVmID0gY2lyY3VpdC5nZXRHYXRlRGVmKGdhdGUubmFtZSk7XG5cdFx0XHRcdHZhciBuYW1lID0gXCJcIjtcblx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5wYXJhbXMpe1xuXHRcdFx0XHRcdGdhdGVQYXJhbXMgPSBnYXRlLm9wdGlvbnMucGFyYW1zO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYoZ2F0ZS5uYW1lID09IFwibWVhc3VyZVwiKXtcblx0XHRcdFx0XHRpZighaXNFeHBvcnRQeUFRQVNNKSB7XG5cdFx0XHRcdFx0XHRuYW1lICs9IFwiTUVBU1wiXG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG5hbWUgKz0gXCJwcm9ncmFtLm1lYXN1cmVcIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZihnYXRlLm5hbWUgPT0gXCJyZXNldFwiKXtcblx0XHRcdFx0XHRpZighaXNFeHBvcnRQeUFRQVNNKSB7XG5cdFx0XHRcdFx0XHRuYW1lICs9IFwiUkVTRVRcIlxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRuYW1lICs9IFwicHJvZ3JhbS5yZXNldFwiO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmKGdhdGVEZWYgJiYgZ2F0ZURlZi5leHBvcnRJbmZvKXtcblx0XHRcdFx0XHRpZihnYXRlRGVmLmV4cG9ydEluZm8uYXFhc20pe1xuXHRcdFx0XHRcdFx0dmFyIGFxYXNtSW5mbyA9IGdhdGVEZWYuZXhwb3J0SW5mby5hcWFzbTtcblx0XHRcdFx0XHRcdHZhciBhcWFzbUluZm9OYW1lID0gXCJcIjtcblx0XHRcdFx0XHRcdGlmKGFxYXNtSW5mby5uYW1lKXtcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdGlmKGdhdGVEZWYucGFyYW1zLmxlbmd0aCl7XG5cdFx0XHRcdFx0XHRcdFx0Z2F0ZURlZi5wYXJhbXMubWFwKGZ1bmN0aW9uKHBhcmFtKXtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnYXRlUGFyYW1zW3BhcmFtXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1WYWx1ZSA9IG5vZGUudG9TdHJpbmcoe2hhbmRsZXI6IG1hdGhUb1N0cmluZ0hhbmRsZXJ9KTtcblx0XHRcdFx0XHRcdFx0XHRcdGFxYXNtSW5mb05hbWUgPSBhcWFzbUluZm8ubmFtZTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKCFpc0V4cG9ydFB5QVFBU00pe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRhcWFzbUluZm9OYW1lICs9IFwiW1wiICsgcGFyYW1WYWx1ZSArIFwiXVwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFxYXNtSW5mb05hbWUgKz0gXCIoXCIgKyBwYXJhbVZhbHVlICsgXCIpXCI7XHRcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fWVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGFxYXNtSW5mb05hbWUgKz0gYXFhc21JbmZvLm5hbWU7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpZihhcWFzbUluZm8uY29udHJvbGxlZCAmJiBhcWFzbUluZm8uZGFnZ2VyKXtcblx0XHRcdFx0XHRcdFx0XHRpZighaXNFeHBvcnRQeUFRQVNNKXtcblx0XHRcdFx0XHRcdFx0XHRcdG5hbWUgKz0gXCJDVFJMKERBRyhcIiArIGFxYXNtSW5mb05hbWUgKyBcIikpXCI7XG5cdFx0XHRcdFx0XHRcdFx0fWVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0bmFtZSArPSBhcWFzbUluZm9OYW1lICsgXCIuZGFnKCkuY3RybCgpXCI7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9ZWxzZSBpZihhcWFzbUluZm8uY29udHJvbGxlZCl7XG5cdFx0XHRcdFx0XHRcdFx0aWYoIWlzRXhwb3J0UHlBUUFTTSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRuYW1lICs9IFwiQ1RSTChcIiArIGFxYXNtSW5mb05hbWUgKyBcIilcIjtcblx0XHRcdFx0XHRcdFx0XHR9ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRuYW1lICs9IGFxYXNtSW5mb05hbWUgKyBcIi5jdHJsKClcIjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1lbHNlIGlmKGFxYXNtSW5mby5kYWdnZXIpe1xuXHRcdFx0XHRcdFx0XHRcdGlmKCFpc0V4cG9ydFB5QVFBU00pe1xuXHRcdFx0XHRcdFx0XHRcdFx0bmFtZSArPSBcIkRBRyhcIiArIGFxYXNtSW5mb05hbWUgKyBcIilcIjtcblx0XHRcdFx0XHRcdFx0XHR9ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRuYW1lICs9IGFxYXNtSW5mb05hbWUgKyBcIi5kYWcoKVwiO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fWVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdG5hbWUgKz0gYXFhc21JbmZvTmFtZTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZihhcWFzbUluZm8ubWF0cml4KXtcblx0XHRcdFx0XHRcdFx0aWYoIWlzRXhwb3J0UHlBUUFTTSl7XG5cdFx0XHRcdFx0XHRcdFx0bmFtZSA9IFwiW1wiO1xuXHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgayA9IDAgOyBrIDwgYXFhc21JbmZvLm1hdHJpeC5sZW5ndGg7IGsrKyl7XG5cdFx0XHRcdFx0XHRcdFx0XHRyb3cgPSBhcWFzbUluZm8ubWF0cml4W2tdO1xuXHRcdFx0XHRcdFx0XHRcdFx0bmFtZSArPSBcIltcIjtcblx0XHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCByb3cubGVuZ3RoOyBpKyspe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRuYW1lICs9IFwiKFwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyb3dfZWxlbWVudCA9IHJvd1tpXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYXFhc21JbmZvLnBhcmFtcyl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXFhc21JbmZvLnBhcmFtcy5tYXAoZnVuY3Rpb24ocGFyYW1OYW1lKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBwYXJhbSA9IGdhdGVQYXJhbXNbcGFyYW1OYW1lXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKHJvd19lbGVtZW50LnRvU3RyaW5nKCkuaW5kZXhPZihwYXJhbU5hbWUpID4gMCl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJvd19lbGVtZW50ID0gcm93X2VsZW1lbnQucmVwbGFjZShwYXJhbU5hbWUsIHBhcmFtKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRldmFsdWF0ZWRfZXhwcmVzc2lvbiA9IG1hdGguZXZhbHVhdGUocm93X2VsZW1lbnQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRtYXRyaXhfZWxlbWVudCA9IG1hdGguY29tcGxleChldmFsdWF0ZWRfZXhwcmVzc2lvbik7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1hdHJpeF9lbGVtZW50X3JlYWwgPSBtYXRyaXhfZWxlbWVudFtcInJlXCJdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRtYXRyaXhfZWxlbWVudF9pbSA9IG1hdHJpeF9lbGVtZW50W1wiaW1cIl07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5hbWUgKz0gbWF0cml4X2VsZW1lbnRfcmVhbCArIFwiLCBcIiArIG1hdHJpeF9lbGVtZW50X2ltICsgXCIpXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChpIDwgcm93Lmxlbmd0aCAtIDEpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG5hbWUgKz0gXCIgXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdG5hbWUgKz0gXCJdXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoayA8IGFxYXNtSW5mby5tYXRyaXgubGVuZ3RoIC0gMSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5hbWUgKz0gXCIgXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdG5hbWUgKz0gXCJdXCI7XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHR9ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0bmFtZSArPSBnYXRlLm5hbWUgKyBcIihcIjtcblx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1Db3VudCA9IDA7XG5cdFx0XHRcdFx0XHRcdFx0Z2F0ZURlZi5wYXJhbXMubWFwKGZ1bmN0aW9uKHBhcmFtTmFtZSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihwYXJhbUNvdW50ID4gMCl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5hbWUgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIG5vZGUgPSBtYXRoLnBhcnNlKGdhdGVQYXJhbXNbcGFyYW1OYW1lXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1WYWx1ZSA9IG5vZGUudG9TdHJpbmcoe2hhbmRsZXI6IG1hdGhUb1N0cmluZ0hhbmRsZXJ9KTtcblx0XHRcdFx0XHRcdFx0XHRcdG5hbWUgKz0gcGFyYW1WYWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtQ291bnQrKztcblx0XHRcdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0XHRcdG5hbWUgKz0gXCIpXCI7XG5cdFx0XHRcdFx0XHRcdH1cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGFxYXNtICs9IGluZGVudCArICBuYW1lO1xuXG5cdFx0XHRcdFx0aWYoIWlzRXhwb3J0UHlBUUFTTSl7XG5cdFx0XHRcdFx0XHRhcWFzbSArPSBcIiBcIjtcblx0XHRcdFx0XHR9ZWxzZSB7XG5cdFx0XHRcdFx0XHRhcWFzbSArPSBcIihcIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHRcdHZhciBhcmdDb3VudCA9IDA7XG5cdFx0XHRcdGZvcih2YXIgdyA9IDA7IHcgPCBnYXRlLndpcmVzLmxlbmd0aDsgdysrKXtcblx0XHRcdFx0XHRpZihhcmdDb3VudCA+IDApe1xuXHRcdFx0XHRcdFx0YXFhc20gKz0gIFwiLCBcIjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZighaXNFeHBvcnRQeUFRQVNNKXtcblx0XHRcdFx0XHRcdGFxYXNtICs9IFwicVtcIiArIGdhdGUud2lyZXNbd10gKyBcIl1cIjtcblx0XHRcdFx0XHR9ZWxzZSB7XG5cdFx0XHRcdFx0XHRpZihleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0XHRcdFx0XHRcdGFxYXNtICs9IHF1Yml0TGV0dGVyKGdhdGUud2lyZXNbd10sIGNpcmN1aXQubnVtUXViaXRzKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGFxYXNtICs9IFwicXViaXRzX3JlZ1tcIiArIGdhdGUud2lyZXNbd10gKyBcIl1cIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRhcmdDb3VudCA9IGFyZ0NvdW50ICsgMTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY3JlZyl7XG5cdFx0XHRcdFx0YXFhc20gKz0gXCIsIFwiICsgZ2F0ZS5vcHRpb25zLmNyZWcubmFtZSArIFwiW1wiICsgZ2F0ZS5vcHRpb25zLmNyZWcuYml0ICsgXCJdXCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZihpc0V4cG9ydFB5QVFBU00pe1xuXHRcdFx0XHRcdGFxYXNtICs9IFwiKVwiO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YXFhc20gKz0gXCJcXG5cIjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZihleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0YXFhc20gKz0gaW5kZW50ICsgXCJyZXR1cm4gY2lyY3VpdFxcblxcblwiO1xuXHR9XG5cblx0aWYoIWlzRXhwb3J0UHlBUUFTTSkge1xuXHRcdGFxYXNtICs9IFwiRU5EXCI7XG5cdH0gZWxzZSB7XG5cdFx0aWYoIWV4cG9ydEFzR2F0ZU5hbWUpe1x0XHRcdFxuXHRcdFx0YXFhc20gKz0gaW5kZW50ICsgIFwiXFxuXCI7XG5cdFx0XHRhcWFzbSArPSBpbmRlbnQgKyAgXCJjaXJjdWl0ID0gcHJvZ3JhbS50b19jaXJjKClcXG5cIjtcblx0XHRcdGFxYXNtICs9IGluZGVudCArICBcImpvYiA9IGNpcmN1aXQudG9fam9iKG5ic2hvdHM9c2hvdHMsIGFnZ3JlZ2F0ZV9kYXRhPUZhbHNlKVxcblwiO1xuXHRcdFx0YXFhc20gKz0gaW5kZW50ICsgIFwicXB1ID0gZ2V0X2RlZmF1bHRfcXB1KClcXG5cIjtcblx0XHRcdGFxYXNtICs9IGluZGVudCArICBcImpvYl9yZXN1bHQgPSBxcHUuc3VibWl0KGpvYilcXG5cIjtcblx0XHRcdGFxYXNtICs9IGluZGVudCArICBcImNvdW50cyA9IENvdW50ZXIoKVxcblxcblwiO1xuXHRcdFx0YXFhc20gKz0gaW5kZW50ICsgIFwiZm9yIHN0YXRlIGluIGpvYl9yZXN1bHQ6XFxuXCI7XG5cdFx0XHRhcWFzbSArPSBpbmRlbnQgKyAgXCIgICAgc3RyaW5nX3N0YXRlID0gc3RyKHN0YXRlLnN0YXRlKVxcblwiO1xuXHRcdFx0YXFhc20gKz0gaW5kZW50ICsgIFwiICAgIHN0cmluZ19zdGF0ZSA9IHN0cmluZ19zdGF0ZVtzdHJpbmdfc3RhdGUuZmluZCgnfCcpICsgMTogc3RyaW5nX3N0YXRlLmZpbmQoJz4nKV1cXG5cIjtcblx0XHRcdGFxYXNtICs9IGluZGVudCArICBcIiAgICBzdHJpbmdfc3RhdGUgPSBzdHJpbmdfc3RhdGVbOjotMV1cXG5cIlxuXHRcdFx0YXFhc20gKz0gaW5kZW50ICsgIFwiICAgIGNvdW50c1tzdHJpbmdfc3RhdGVdICs9IDFcXG5cXG5cIlxuXG5cdFx0XHRpZihoeWJyaWQpIHtcblx0XHRcdFx0YXFhc20gKz0gaW5kZW50ICsgXCIjIENBTENVTEFURSBDT1NUIEhFUkVcXG5cIjtcblx0XG5cdFx0XHRcdHZhciBjb3N0RnVuY3Rpb24gPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMuY29zdEZ1bmN0aW9uID8gdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMuY29zdEZ1bmN0aW9uLnB5dGhvbiB8fCBcIlwiIDogXCJcIjtcblx0XHRcdFx0aWYoIWNvc3RGdW5jdGlvbi50cmltKCkpIHtcblx0XHRcdFx0XHRjb3N0RnVuY3Rpb24gPSBcImNvc3QgPSAwXCI7XG5cdFx0XHRcdH1cblx0XG5cdFx0XHRcdGFxYXNtICs9IGFkanVzdElkZW50YXRpb24oY29zdEZ1bmN0aW9uLCBpbmRlbnQpO1xuXHRcblx0XHRcdFx0YXFhc20gKz0gXCJcXG5cIlxuXHRcdFx0XHRhcWFzbSArPSBpbmRlbnQgKyBcInJldHVybiBjb3N0XFxuXCI7XHRcblx0XG5cdFx0XHRcdGluZGVudERlcHRoLS07XG5cdFx0XHRcdGluZGVudCA9IGdldEluZGVudChpbmRlbnREZXB0aCk7XG5cdFx0XHRcdGlmKGh5YnJpZCkge1xuXHRcdFx0XHRcdHZhciBnbG9iYWxQYXJhbUxpc3QgPSBcIlwiO1xuXHRcdFx0XHRcdHRoaXMucGFyYW1zLm1hcChmdW5jdGlvbihnbG9iYWxQYXJhbU5hbWUsIGdsb2JhbFBhcmFtSW5kZXgpIHtcblx0XHRcdFx0XHRcdGlmKGdsb2JhbFBhcmFtSW5kZXggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdGdsb2JhbFBhcmFtTGlzdCArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRnbG9iYWxQYXJhbUxpc3QgKz0gZ2xvYmFsUGFyYW1OYW1lO1xuXHRcdFx0XHRcdH0pO1xuXHRcblx0XHRcdFx0XHRhcWFzbSArPSBcIlxcblwiO1xuXHRcdFx0XHRcdGFxYXNtICs9IFwicGFyYW1zID0gbnAuYXJyYXkoW1wiICsgZ2xvYmFsUGFyYW1MaXN0ICsgXCJdKVxcblwiO1xuXHRcdFx0XHRcdGFxYXNtICs9IFwiXFxuXCI7XG5cdFx0XHRcdFx0YXFhc20gKz0gXCJtaW5pbXVtID0gbWluaW1pemUob2JqZWN0aXZlX2Z1bmN0aW9uLCBwYXJhbXMsIG1ldGhvZD1cXFwiXCIgKyAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLm9wdGltaXplciA/IHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLm9wdGltaXplciA6IFwiUG93ZWxsXCIpICsgXCJcXFwiLCB0b2w9dG9sZXJhbmNlKVxcblwiO1xuXHRcdFx0XHRcdGFxYXNtICs9IFwicHJpbnQoXFxcImNvc3Q6XFxcIiwgbWluaW11bS5mdW4sIFxcXCJwYXJhbXM6XFxcIiwgbWluaW11bS54KVxcblwiO1xuXHRcdFx0XHR9XG5cdFxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YXFhc20gKz0gaW5kZW50ICsgXCJwcmludChjb3VudHMpXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYoYXNKdXB5dGVyICYmIGlzRXhwb3J0UHlBUUFTTSkge1xuXHRcdHZhciBub3RlYm9vayA9IHtcblx0XHRcdG1ldGFkYXRhOiB7XG5cdFx0XHRcdGtlcm5lbHNwZWM6IHtcblx0XHRcdFx0XHRkaXNwbGF5X25hbWU6IFwiUHl0aG9uIDNcIixcblx0XHRcdFx0XHRsYW5ndWFnZTogXCJweXRob25cIixcblx0XHRcdFx0XHRuYW1lOiBcInB5dGhvbjNcIlxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0bmJmb3JtYXQ6IDQsXG5cdFx0XHRuYmZvcm1hdF9taW5vcjogMCxcblx0XHRcdGNlbGxzOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRjZWxsX3R5cGU6IFwiY29kZVwiLFxuXHRcdFx0XHRcdHNvdXJjZTogYXFhc20sXG5cdFx0XHRcdFx0bWV0YWRhdGE6IHtcblxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0b3V0cHV0czogW10sXG5cdFx0XHRcdFx0ZXhlY3V0aW9uX2NvdW50OiBudWxsXG5cdFx0XHRcdH1cblx0XHRcdF1cblx0XHR9O1xuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShub3RlYm9vayk7XG5cdH1cblxuXHRyZXR1cm4gYXFhc21cbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRBUUFTTSA9IGZ1bmN0aW9uKGNvbW1lbnQsIGRlY29tcG9zZSwgaXNFeHBvcnRQeUFRQVNNLCBleHBvcnRBc0dhdGVOYW1lLCBhc0p1cHl0ZXIsIHNob3RzLCBoeWJyaWQsIGluZGVudERlcHRoKSB7XG5cdHZhciBvcHRpb25zID0ge1xuXHRcdGNvbW1lbnQ6IGNvbW1lbnQsXG5cdFx0ZGVjb21wb3NlOiBkZWNvbXBvc2UsXG5cdFx0YXNKdXB5dGVyOiBhc0p1cHl0ZXIsXG5cdFx0c2hvdHM6IHNob3RzLFxuXHRcdGh5YnJpZDogaHlicmlkXG5cdH07XG5cblx0cmV0dXJuIHRoaXMuZXhwb3J0VG9BUUFTTShvcHRpb25zLCBpc0V4cG9ydFB5QVFBU00sIGV4cG9ydEFzR2F0ZU5hbWUsIGluZGVudERlcHRoKTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFRvUHlBUUFTTSA9IGZ1bmN0aW9uKG9wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0cmV0dXJuIHRoaXMuZXhwb3J0VG9BUUFTTShvcHRpb25zLCB0cnVlLCBleHBvcnRBc0dhdGVOYW1lKTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRQeUFRQVNNID0gZnVuY3Rpb24oY29tbWVudCwgZGVjb21wb3NlLCBleHBvcnRBc0dhdGVOYW1lLCBhc0p1cHl0ZXIsIHNob3RzLCBoeWJyaWQpIHtcblx0dmFyIG9wdGlvbnMgPSB7XG5cdFx0Y29tbWVudDogY29tbWVudCxcblx0XHRkZWNvbXBvc2U6IGRlY29tcG9zZSxcblx0XHRhc0p1cHl0ZXI6IGFzSnVweXRlcixcblx0XHRzaG90czogc2hvdHMsXG5cdFx0aHlicmlkOiBoeWJyaWRcblx0fTtcblx0cmV0dXJuIHRoaXMuZXhwb3J0VG9QeUFRQVNNKG9wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUpO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFRvQ2lycSA9IGZ1bmN0aW9uKG9wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0dmFyIGNvbW1lbnQgPSBvcHRpb25zLmNvbW1lbnQ7XG5cdHZhciBkZWNvbXBvc2UgPSBvcHRpb25zLmRlY29tcG9zZTtcblx0dmFyIHZlcnNpb25TdHIgPSBvcHRpb25zLnZlcnNpb25TdHI7XG5cdHZhciBhc0p1cHl0ZXIgPSBvcHRpb25zLmFzSnVweXRlcjtcblx0dmFyIHNob3RzID0gb3B0aW9ucy5zaG90cztcblx0dmFyIGV4cG9ydFRmcSA9IG9wdGlvbnMuZXhwb3J0VGZxO1xuXG5cdHZhciBzZWxmID0gdGhpcztcblxuXHR2YXIgcGxhdGZvcm0gPSBcIlwiO1xuXHRpZihleHBvcnRUZnEpIHtcblx0XHRwbGF0Zm9ybSA9IFwiVEZRXCI7XG5cdH0gZWxzZSB7XG5cdFx0cGxhdGZvcm0gPSBcImNpcnFcIjtcblx0fVxuXG5cdHZhciB2ZXJzaW9uID0gcGFyc2VGbG9hdCh2ZXJzaW9uU3RyIHx8IFwiMC43XCIpO1xuXHRpZihpc05hTih2ZXJzaW9uKSkge1xuXHRcdHZlcnNpb24gPSAwLjc7XG5cdH1cblxuXHRpZih0eXBlb2Ygc2hvdHMgPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdHNob3RzID0gMTAyNDtcblx0fVxuXG5cdC8vIGRlY29tcG9zZSA/XG5cdHZhciBjaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdGNpcmN1aXQubG9hZCh0aGlzLnNhdmUoZGVjb21wb3NlKSk7XG5cblx0dmFyIGNpcnEgPSBcIlwiO1xuXHR2YXIgaW5kZW50ID0gXCJcIjtcblxuXHQvLyBjb21tZW50XG5cdGlmKGNvbW1lbnQpIHtcblx0XHR2YXIgY29tbSA9IChjb21tZW50IHx8IFwiXCIpLnNwbGl0KFwiXFxuXCIpO1xuXHRcdGNvbW0ubWFwKGZ1bmN0aW9uKGNsaW5lKSB7XG5cdFx0XHRpZihjbGluZS5sZW5ndGggPj0gMSAmJiBjbGluZVswXSAhPSBcIiNcIikge1xuXHRcdFx0XHRjaXJxICs9IFwiIyBcIjtcblx0XHRcdH1cblx0XHRcdGNpcnEgKz0gY2xpbmU7XG5cdFx0XHRjaXJxICs9IFwiXFxuXCI7XG5cdFx0fSk7XG5cdH1cblxuXHR2YXIgbWF0aFRvU3RyaW5nSGFuZGxlciA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMpIHtcblx0XHRpZihub2RlLmlzU3ltYm9sTm9kZSkge1xuXHRcdFx0dmFyIG51bXB5cyA9IFtcInBpXCIsIFwic2luXCIsIFwiY29zXCIsIFwidGFuXCIsIFwiYXNpblwiLCBcImFjb3NcIiwgXCJhdGFuXCJdO1xuXHRcdFx0aWYobnVtcHlzLmluZGV4T2Yobm9kZS5uYW1lKSA+PSAwKSB7XG5cdFx0XHRcdHJldHVybiBcIm5wLlwiICsgbm9kZS5uYW1lO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHR2YXIgcGFyYW1zVG9BcmcgPSBmdW5jdGlvbihnYXRlTmFtZSwgZ2F0ZVBhcmFtcykge1xuXHRcdHZhciBhcmdDb3VudCA9IDA7XG5cdFx0aWYoZ2F0ZVBhcmFtcykge1xuXHRcdFx0dmFyIGdhdGVEZWYgPSB0aGlzLmJhc2ljR2F0ZXNbZ2F0ZU5hbWVdO1xuXHRcdFx0aWYoIWdhdGVEZWYpIHtcblx0XHRcdFx0Z2F0ZURlZiA9IHRoaXMuY3VzdG9tR2F0ZXNbZ2F0ZU5hbWVdO1xuXHRcdFx0fVxuXG5cdFx0XHRpZihnYXRlRGVmKSB7XG5cdFx0XHRcdHZhciBwYXJhbURlZiA9IGdhdGVEZWYucGFyYW1zIHx8IFtdO1xuXHRcdFx0XHR2YXIgcGFyYW1Db3VudCA9IHBhcmFtRGVmLmxlbmd0aDtcblx0XHRcdFx0aWYocGFyYW1Db3VudCkge1x0XHRcblx0XHRcdFx0XHRmb3IodmFyIHAgPSAwOyBwIDwgcGFyYW1Db3VudDsgcCsrKSB7XG5cdFx0XHRcdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0XHRcdFx0Y2lycSArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR2YXIgcGFyYW1OYW1lID0gcGFyYW1EZWZbcF07XG5cblx0XHRcdFx0XHRcdC8vIC0tLVxuXHRcdFx0XHRcdFx0Ly8gcHJlcGVuZCAnbnAnIHRvIG1hdGggY29uc3RhbnRzXG5cdFx0XHRcdFx0XHRpZihnYXRlUGFyYW1zW3BhcmFtTmFtZV0pIHtcblx0XHRcdFx0XHRcdFx0dmFyIG5vZGUgPSBtYXRoLnBhcnNlKGdhdGVQYXJhbXNbcGFyYW1OYW1lXSk7XG5cdFx0XHRcdFx0XHRcdGNpcnEgKz0gbm9kZS50b1N0cmluZyh7IGhhbmRsZXI6IG1hdGhUb1N0cmluZ0hhbmRsZXIgfSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQvLyAtLS1cblxuXHRcdFx0XHRcdFx0YXJnQ291bnQrKztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdHZhciBhcmdzID0gXCJcIjtcblx0XHR2YXIgYXJnQ291bnQgPSAwO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBjaXJjdWl0LnBhcmFtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdGFyZ3MgKz0gXCIsIFwiO1xuXHRcdFx0fVxuXHRcdFx0YXJncyArPSBjaXJjdWl0LnBhcmFtc1tpXTtcblx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0fVxuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBjaXJjdWl0Lm51bVF1Yml0czsgaSsrKSB7XG5cdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0YXJncyArPSBcIiwgXCI7XG5cdFx0XHR9XG5cdFx0XHRhcmdzICs9IHF1Yml0TGV0dGVyKGksIGNpcmN1aXQubnVtUXViaXRzKTtcblx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0fVxuXHRcdGNpcnEgKz0gXCJkZWYgXCIgKyBleHBvcnRBc0dhdGVOYW1lICsgKGFyZ3MgPyBcIihcIiArIGFyZ3MgKyBcIilcIiA6IFwiXCIpICsgXCI6XFxuXCI7XG5cdFx0Y2lycSArPSBcIiAgICByZXR1cm4gW1xcblwiO1xuXHRcdGluZGVudCA9IFwiICAgICAgICBcIjtcblx0fSBlbHNlIHtcblx0XHRpZihleHBvcnRUZnEpe1xuXHRcdFx0Y2lycSArPSBcImltcG9ydCB0ZW5zb3JmbG93X3F1YW50dW0gYXMgdGZxXFxuXCJcblx0XHR9XG5cblx0XHRjaXJxICs9IFwiaW1wb3J0IGNpcnFcXG5cIjtcblx0XHRjaXJxICs9IFwiaW1wb3J0IG51bXB5IGFzIG5wXFxuXCI7XG5cdFx0Y2lycSArPSBcImZyb20gZnVuY3Rvb2xzIGltcG9ydCByZWR1Y2VcXG5cIjtcblx0XHRjaXJxICs9IFwiXFxuXCI7XG5cblx0XHR2YXIgZ2xvYmFsUGFyYW1zID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5wYXJhbXMgPyB0aGlzLm9wdGlvbnMucGFyYW1zIDoge307XG5cdFx0aWYodGhpcy5wYXJhbXMubGVuZ3RoKSB7XG5cdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXJhbXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0dmFyIGdsb2JhbFBhcmFtTmFtZSA9IHRoaXMucGFyYW1zW2ldO1xuXG5cdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnbG9iYWxQYXJhbXNbZ2xvYmFsUGFyYW1OYW1lXSk7XG5cdFx0XHRcdHZhciBnbG9iYWxQYXJhbVZhbHVlID0gbm9kZS50b1N0cmluZyh7IGhhbmRsZXI6IG1hdGhUb1N0cmluZ0hhbmRsZXIgfSk7XG5cblx0XHRcdFx0Y2lycSArPSBnbG9iYWxQYXJhbU5hbWUgKyBcIiA9IFwiICsgZ2xvYmFsUGFyYW1WYWx1ZSArIFwiXFxuXCI7XG5cdFx0XHR9XG5cdFx0XHRjaXJxICs9IFwiXFxuXCI7XG5cdFx0fVxuXG5cdFx0dmFyIHVzZWRHYXRlcyA9IGNpcmN1aXQudXNlZEdhdGVzKCk7XG5cdFx0aWYoIWRlY29tcG9zZSkge1xuXHRcdFx0dXNlZEdhdGVzLm1hcChmdW5jdGlvbih1c2VkR2F0ZU5hbWUpIHtcblx0XHRcdFx0dmFyIGJhc2ljR2F0ZSA9IGNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0XHRpZighYmFzaWNHYXRlKSB7XG5cdFx0XHRcdFx0dmFyIGN1c3RvbUdhdGUgPSBzZWxmLmN1c3RvbUdhdGVzW3VzZWRHYXRlTmFtZV07XG5cdFx0XHRcdFx0aWYoY3VzdG9tR2F0ZSkge1xuXHRcdFx0XHRcdFx0dmFyIGN1c3RvbUNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0XHRcdFx0XHRcdGN1c3RvbUNpcmN1aXQubG9hZChjdXN0b21HYXRlKTtcblx0XHRcdFx0XHRcdHZhciBuZXdPcHRpb25zID0ge1xuXHRcdFx0XHRcdFx0XHRjb21tZW50OiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRkZWNvbXBvc2U6IHRydWUsXG5cdFx0XHRcdFx0XHRcdHZlcnNpb25TdHI6IHZlcnNpb25TdHJcblx0XHRcdFx0XHRcdH07XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRjaXJxICs9IGN1c3RvbUNpcmN1aXQuZXhwb3J0VG9DaXJxKG5ld09wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0dmFyIGRlZkdhdGVzID0gXCJcIjtcblx0XHR2YXIgdXNlZEdhdGVzID0gY2lyY3VpdC51c2VkR2F0ZXMoKTtcblx0XHR1c2VkR2F0ZXMubWFwKGZ1bmN0aW9uKHVzZWRHYXRlTmFtZSkge1xuXHRcdFx0dmFyIGJhc2ljR2F0ZSA9IGNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0aWYoYmFzaWNHYXRlKSB7XG5cdFx0XHRcdGlmKGJhc2ljR2F0ZS5leHBvcnRJbmZvICYmIGJhc2ljR2F0ZS5leHBvcnRJbmZvLmNpcnEpIHtcblx0XHRcdFx0XHR2YXIgY2lycUluZm8gPSBiYXNpY0dhdGUuZXhwb3J0SW5mby5jaXJxO1xuXHRcdFx0XHRcdHZhciBpc1JlcGxhY2VkID0gZmFsc2U7XG5cdFx0XHRcdFx0aWYgKGNpcnFJbmZvLnJlcGxhY2VtZW50KSB7XG5cdFx0XHRcdFx0XHR2YXIgcmVwbGFjZW1lbnRHYXRlRGVmID0gY2lyY3VpdC5nZXRHYXRlRGVmKGNpcnFJbmZvLnJlcGxhY2VtZW50Lm5hbWUpXG5cdFx0XHRcdFx0XHRjaXJxSW5mbyA9IHJlcGxhY2VtZW50R2F0ZURlZi5leHBvcnRJbmZvLmNpcnFcblx0XHRcdFx0XHRcdGlzUmVwbGFjZWQgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZihjaXJxSW5mby5hcnJheSkge1xuXHRcdFx0XHRcdFx0aWYoIWV4cG9ydFRmcSl7XG5cdFx0XHRcdFx0XHRcdC8vIGRlZmdhdGVcblx0XHRcdFx0XHRcdFx0dmFyIGRlZk5hbWUgPSBpc1JlcGxhY2VkID8gY2lycUluZm8ubmFtZSA6IHVzZWRHYXRlTmFtZVxuXHRcdFx0XHRcdFx0XHRpZiAoZGVmR2F0ZXMuaW5kZXhPZihkZWZOYW1lKSA8IDApIHtcblx0XHRcdFx0XHRcdFx0XHRkZWZHYXRlcyArPSBcImRlZiBcIiArIGRlZk5hbWUgKyBcIihcIjtcblx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1MaXN0ID0gXCJcIjtcblx0XHRcdFx0XHRcdFx0XHRpZihjaXJxSW5mby5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtTGlzdCArPSBcIiwgW1wiO1xuXHRcdFx0XHRcdFx0XHRcdFx0Y2lycUluZm8ucGFyYW1zLm1hcChmdW5jdGlvbihwYXJhbU5hbWUsIHBhcmFtSW5kZXgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYocGFyYW1JbmRleCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZWZHYXRlcyArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVmR2F0ZXMgKz0gXCJwX1wiICsgcGFyYW1OYW1lO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRwYXJhbUxpc3QgKz0gXCJdXCI7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGRlZkdhdGVzICs9IFwiKTpcXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRpZihiYXNpY0dhdGUubWF0cml4ICYmIGJhc2ljR2F0ZS5tYXRyaXgubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZih2ZXJzaW9uIDwgMC43KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN3aXRjaChiYXNpY0dhdGUubWF0cml4Lmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgMjogZGVmR2F0ZXMgKz0gXCIgICAgcmV0dXJuIGNpcnEuU2luZ2xlUXViaXRNYXRyaXhHYXRlKG5wLmFycmF5KFwiICsgY2lycUluZm8uYXJyYXkgKyBcIikpXFxuXCI7IGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgNDogZGVmR2F0ZXMgKz0gXCIgICAgcmV0dXJuIGNpcnEuVHdvUXViaXRNYXRyaXhHYXRlKG5wLmFycmF5KFwiICsgY2lycUluZm8uYXJyYXkgKyBcIikpXFxuXCI7IGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlZmF1bHQ6IGRlZkdhdGVzICs9IFwiICAgICMgRXhwb3J0IHRvIFwiICsgcGxhdGZvcm0gKyBcIiBXQVJOSU5HOiBDYW5ub3QgZGVmaW5lIFwiICsgYmFzaWNHYXRlLm1hdHJpeC5sZW5ndGggKyBcIiB4IFwiICsgYmFzaWNHYXRlLm1hdHJpeC5sZW5ndGggKyBcIiBtYXRyaXggZ2F0ZVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRkZWZHYXRlcyArPSBcIiAgICByZXR1cm4gY2lycS5NYXRyaXhHYXRlKG5wLmFycmF5KFwiICsgY2lycUluZm8uYXJyYXkgKyBcIikpXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGRlZkdhdGVzICs9IFwiXFxuXCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHRjaXJxICs9IGRlZkdhdGVzO1xuXG5cdFx0aWYoZXhwb3J0VGZxKXtcblx0XHRcdGNpcnEgKz0gXCJxID0gY2lycS5HcmlkUXViaXQucmVjdCgxLCBcIiArIGNpcmN1aXQubnVtUXViaXRzICsgXCIpXFxuXCI7XG5cdFx0fWVsc2V7XG5cdFx0XHRjaXJxICs9IFwicSA9IFtjaXJxLk5hbWVkUXViaXQoJ3EnICsgc3RyKGkpKSBmb3IgaSBpbiByYW5nZShcIiArIGNpcmN1aXQubnVtUXViaXRzICsgXCIpXVxcblwiO1xuXHRcdH1cblxuXHRcdGNpcnEgKz0gXCJcXG5cIjtcblxuXHRcdGlmKHZlcnNpb24gPCAwLjcpIHtcblx0XHRcdGNpcnEgKz0gXCJjaXJjdWl0ID0gY2lycS5DaXJjdWl0LmZyb21fb3BzKFxcblwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjaXJxICs9IFwiY2lyY3VpdCA9IGNpcnEuQ2lyY3VpdChcXG5cIjtcblx0XHR9XG5cdFx0aW5kZW50ID0gXCIgICAgXCI7XG5cdH1cblx0XG5cdHZhciBudW1Db2xzID0gY2lyY3VpdC5udW1Db2xzKCk7XG5cdHZhciBnYXRlQ291bnRlciA9IDA7XG5cdHZhciBtdWx0aXNob3RLZXlzID0gJyc7XG5cdHZhciB0ZW1wR2F0ZURlZiA9IG51bGw7XG5cdHZhciBub1RmcVN1cHBvcnQgPSBmYWxzZTtcblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGNpcmN1aXQuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0aWYoZ2F0ZUNvdW50ZXIgPiAwKXtcblx0XHRcdFx0XHRjaXJxICs9IFwiLFwiO1xuXHRcdFx0XHRcdGlmKGV4cG9ydFRmcSAmJiBub1RmcVN1cHBvcnQpe1xuXHRcdFx0XHRcdFx0Y2lycSArPSBpbmRlbnQgKyBcIiMgRXhwb3J0IHRvIFRGUSBXQVJOSU5HOiBHYXRlIG5vdCB5ZXQgc3VwcG9ydGVkIGJ5IFRlbnNvcmZsb3cgUXVhbnR1bVwiO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjaXJxICs9IFwiXFxuXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFyIGdhdGVEZWYgPSBjaXJjdWl0LmdldEdhdGVEZWYoZ2F0ZS5uYW1lKTtcblx0XHRcdFx0dmFyIGdhdGVQYXJhbXMgPSBnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLnBhcmFtcyA/IGdhdGUub3B0aW9ucy5wYXJhbXMgOiB7fTtcblx0XHRcdFx0dmFyIGNpcnFJbmZvID0gbnVsbDtcblx0XHRcdFx0dmFyIGlzQ29udHJvbGxlZEdhdGUgPSBmYWxzZTtcblx0XHRcdFx0dmFyIGlzQmFzaWNHYXRlID0gISFjaXJjdWl0LmJhc2ljR2F0ZXNbZ2F0ZS5uYW1lXTtcblx0XHRcdFx0aWYoZ2F0ZURlZikge1xuXHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mbykge1xuXHRcdFx0XHRcdFx0XHRub1RmcVN1cHBvcnQgPSBnYXRlRGVmLmV4cG9ydEluZm8uY2lycS5ub3RUZnFTdXBwb3J0ZWQgPyB0cnVlIDogZmFsc2U7XG5cdFx0XHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mby5jaXJxICYmIGdhdGVEZWYuZXhwb3J0SW5mby5jaXJxLnJlcGxhY2VtZW50KSB7XG5cdFx0XHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mby5jaXJxLnJlcGxhY2VtZW50LnBhcmFtcykge1xuXHRcdFx0XHRcdFx0XHRcdGdhdGVQYXJhbXMgPSBnYXRlRGVmLmV4cG9ydEluZm8uY2lycS5yZXBsYWNlbWVudC5wYXJhbXM7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aXNDb250cm9sbGVkR2F0ZSA9IChnYXRlRGVmLmV4cG9ydEluZm8uY2lycS5yZXBsYWNlbWVudC50eXBlICYmIChnYXRlRGVmLmV4cG9ydEluZm8uY2lycS5yZXBsYWNlbWVudC50eXBlID09IFwiY29udHJvbGxlZFwiKSkgPyB0cnVlIDogZmFsc2U7XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0bm9UZnFTdXBwb3J0ID0gZ2F0ZURlZi5leHBvcnRJbmZvLmNpcnEucmVwbGFjZW1lbnQubm90VGZxU3VwcG9ydGVkID8gdHJ1ZSA6IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRnYXRlRGVmID0gY2lyY3VpdC5nZXRHYXRlRGVmKGdhdGVEZWYuZXhwb3J0SW5mby5jaXJxLnJlcGxhY2VtZW50Lm5hbWUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Y2lycUluZm8gPSAoZ2F0ZURlZiAmJiBnYXRlRGVmLmV4cG9ydEluZm8gJiYgZ2F0ZURlZi5leHBvcnRJbmZvLmNpcnEpID8gZ2F0ZURlZi5leHBvcnRJbmZvLmNpcnEgOiBudWxsO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcblx0XHRcdFx0XHRnYXRlQ291bnRlcisrO1xuXG5cdFx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24gJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnKSB7XG5cdFx0XHRcdFx0XHRjaXJxICs9IGluZGVudCArIFwiIyBFeHBvcnQgdG8gXCIgKyBwbGF0Zm9ybSArXCIgV0FSTklORzogY2xhc3NpY2FsIGNvbnRyb2wgbm90IGltcGxlbWVudGVkIHlldC5cXG5cIjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR2YXIgdG1wUGFyYW1Db3VudCA9IDA7XG5cdFx0XHRcdFx0dmFyIHBhcmFtU3RyaW5nID0gXCJcIjtcblxuXG5cdFx0XHRcdFx0aWYoZ2F0ZVBhcmFtcykge1xuXHRcdFx0XHRcdFx0dmFyIHBhcmFtRGVmID0gZ2F0ZURlZi5wYXJhbXMgfHwgW107XG5cdFx0XHRcdFx0XHRpZihnYXRlLm5hbWUgPT0gXCJ5eVwiKXtcblx0XHRcdFx0XHRcdFx0cGFyYW1EZWYgPSBbXTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHZhciBwYXJhbUNvdW50ID0gcGFyYW1EZWYubGVuZ3RoO1xuXHRcdFx0XHRcdFx0aWYocGFyYW1Db3VudCkge1xuXHRcdFx0XHRcdFx0XHRmb3IodmFyIHAgPSAwOyBwIDwgcGFyYW1Db3VudDsgcCsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYodG1wUGFyYW1Db3VudCA9PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRwYXJhbVN0cmluZyArPSBcIihcIjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0aWYodG1wUGFyYW1Db3VudCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtU3RyaW5nICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtTmFtZSA9IHBhcmFtRGVmW3BdO1xuXHRcdFx0XHRcdFx0XHRcdC8vIC0tLVxuXHRcdFx0XHRcdFx0XHRcdC8vIHByZXBlbmQgJ25wJyB0byBtYXRoIGNvbnN0YW50c1xuXHRcdFx0XHRcdFx0XHRcdGlmKGdhdGVQYXJhbXNbcGFyYW1OYW1lXSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIG5vZGUgPSBtYXRoLnBhcnNlKGdhdGVQYXJhbXNbcGFyYW1OYW1lXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZighbm9kZS5hcmdzKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBwYXJhbSBpbiBnYXRlLm9wdGlvbnMucGFyYW1zKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlID0gbWF0aC5wYXJzZShnYXRlLm9wdGlvbnMucGFyYW1zW3BhcmFtXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtU3RyaW5nICs9IG5vZGUudG9TdHJpbmcoeyBoYW5kbGVyOiBtYXRoVG9TdHJpbmdIYW5kbGVyIH0pO1x0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHRcdFx0XHRpZih0bXBQYXJhbUNvdW50ID09IHBhcmFtQ291bnQgLSAxKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihpc0Jhc2ljR2F0ZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJhbVN0cmluZyArPSBcIilcIjtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtU3RyaW5nICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0dG1wUGFyYW1Db3VudCsrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYoY2lycUluZm8pIHtcblx0XHRcdFx0XHRcdHZhciBhZGRCcmFjZXMgPSBjaXJxSW5mby5uYW1lLmluZGV4T2YoXCIqKlwiKSA+PSAwO1xuXG5cdFx0XHRcdFx0XHRjaXJxICs9IGluZGVudDtcblxuXHRcdFx0XHRcdFx0aWYoYWRkQnJhY2VzKSB7XG5cdFx0XHRcdFx0XHRcdGNpcnEgKz0gXCIoXCI7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKCFjaXJxSW5mby5hcnJheSkge1xuXHRcdFx0XHRcdFx0XHRjaXJxICs9IFwiY2lycS5cIjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYoZXhwb3J0VGZxICYmIGNpcnFJbmZvLnRmcVJlcGxhY2VtZW50ICYmIGNpcnFJbmZvLnRmcVJlcGxhY2VtZW50Lm5hbWUpe1xuXHRcdFx0XHRcdFx0XHRjaXJxICs9IFwiY2lycS5cIiArIGNpcnFJbmZvLnRmcVJlcGxhY2VtZW50Lm5hbWVcblx0XHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0XHRjaXJxICs9IGNpcnFJbmZvLm5hbWU7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKGFkZEJyYWNlcykge1xuXHRcdFx0XHRcdFx0XHRjaXJxICs9IFwiKVwiO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNpcnEgKz0gaW5kZW50ICsgZ2F0ZS5uYW1lO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNpcnEgKz0gcGFyYW1TdHJpbmc7XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFxuXG5cdFx0XHRcdFx0aWYoaXNDb250cm9sbGVkR2F0ZSkge1xuXHRcdFx0XHRcdFx0Y2lycSArPSBcIi5jb250cm9sbGVkKCkub24oXCJcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0aWYoaXNCYXNpY0dhdGUpIHtcblx0XHRcdFx0XHRcdFx0Y2lycSArPSBcIihcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR2YXIgYXJnQ291bnQgPSAwO1xuXHRcdFx0XHRcdGZvcih2YXIgdyA9IDA7IHcgPCBnYXRlLndpcmVzLmxlbmd0aDsgdysrKSB7XG5cdFx0XHRcdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0XHRcdFx0Y2lycSArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZihleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0XHRcdFx0XHRcdGNpcnEgKz0gcXViaXRMZXR0ZXIoZ2F0ZS53aXJlc1t3XSwgY2lyY3VpdC5udW1RdWJpdHMpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Y2lycSArPSBcInFbXCIgKyBnYXRlLndpcmVzW3ddICsgXCJdXCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRhcmdDb3VudCsrO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKGdhdGUubmFtZSA9PSBcIm1lYXN1cmVcIiAmJiBnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNyZWcpIHtcblx0XHRcdFx0XHRcdGlmKGFyZ0NvdW50ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRjaXJxICs9IFwiLCBrZXk9XCI7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGNpcnEgKz0gXCInXCIgKyBnYXRlLm9wdGlvbnMuY3JlZy5uYW1lICsgZ2F0ZS5vcHRpb25zLmNyZWcuYml0ICsgXCInXCI7XG5cblx0XHRcdFx0XHRcdGlmKGNvbHVtbiA9PSBudW1Db2xzIC0gMSAmJiB3aXJlID09IHRoaXMubnVtUXViaXRzIC0gMSl7XG5cdFx0XHRcdFx0XHRcdG11bHRpc2hvdEtleXMgKz0gXCInXCIgKyBnYXRlLm9wdGlvbnMuY3JlZy5uYW1lICsgZ2F0ZS5vcHRpb25zLmNyZWcuYml0ICsgXCInXCI7XG5cdFx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdFx0bXVsdGlzaG90S2V5cyArPSBcIidcIiArIGdhdGUub3B0aW9ucy5jcmVnLm5hbWUgKyBnYXRlLm9wdGlvbnMuY3JlZy5iaXQgKyBcIicsIFwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YXJnQ291bnQrKztcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjaXJxICs9IFwiKVwiO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y2lycSArPSBpbmRlbnQgKyBcIiMgRXhwb3J0IHRvIFwiICsgcGxhdGZvcm0gKyBcIiBXQVJOSU5HOiB1bmtub3duIGdhdGUgXFxcIlwiICsgZ2F0ZS5uYW1lICsgXCJcXFwiLlwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYoZXhwb3J0VGZxICYmIG5vVGZxU3VwcG9ydCl7XG5cdFx0Y2lycSArPSBpbmRlbnQgKyBcIiMgRXhwb3J0IHRvIFRGUSBXQVJOSU5HOiBHYXRlIG5vdCB5ZXQgc3VwcG9ydGVkIGJ5IFRlbnNvcmZsb3cgUXVhbnR1XCI7XG5cdH1cblxuXHRpZighZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdGNpcnEgKz0gXCJcXG4pXFxuXCI7XG5cdFx0Y2lycSArPSBcIlxcblwiO1xuXHRcdGlmKCFleHBvcnRUZnEpe1xuXHRcdFx0Y2lycSArPSBcInNpbXVsYXRvciA9IGNpcnEuU2ltdWxhdG9yKClcXG5cIjtcblx0XHRcdGNpcnEgKz0gXCJyZXN1bHQgPSBzaW11bGF0b3IucnVuKGNpcmN1aXQsIHJlcGV0aXRpb25zPVwiKyBzaG90cyArXCIpXFxuXCI7XG5cdFx0XHRjaXJxICs9IFwicmVzdWx0X2RpY3QgPSBkaWN0KHJlc3VsdC5tdWx0aV9tZWFzdXJlbWVudF9oaXN0b2dyYW0oa2V5cz1bXCIgKyBtdWx0aXNob3RLZXlzICsgXCJdKSlcXG5cIjtcblx0XHRcdGNpcnEgKz0gXCJrZXlzID0gbGlzdChtYXAobGFtYmRhIGFycjogcmVkdWNlKGxhbWJkYSB4LCB5OiBzdHIoeCkgKyBzdHIoeSksIGFycls6Oi0xXSksIHJlc3VsdF9kaWN0LmtleXMoKSkpXFxuXCI7XG5cdFx0XHRjaXJxICs9IFwiY291bnRzID0gZGljdCh6aXAoa2V5cyxbdmFsdWUgZm9yIHZhbHVlIGluIHJlc3VsdF9kaWN0LnZhbHVlcygpXSkpXFxuXCI7XG5cdFx0XHRjaXJxICs9IFwicHJpbnQoY291bnRzKVwiO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRjaXJxICs9IFwiXFxuICAgIF1cXG5cIjtcblx0XHRjaXJxICs9IFwiXFxuXCI7XG5cdH1cblxuXHRpZihhc0p1cHl0ZXIpIHtcblx0XHR2YXIgbm90ZWJvb2sgPSB7XG5cdFx0XHRtZXRhZGF0YToge1xuXHRcdFx0XHRrZXJuZWxzcGVjOiB7XG5cdFx0XHRcdFx0ZGlzcGxheV9uYW1lOiBcIlB5dGhvbiAzXCIsXG5cdFx0XHRcdFx0bGFuZ3VhZ2U6IFwicHl0aG9uXCIsXG5cdFx0XHRcdFx0bmFtZTogXCJweXRob24zXCJcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdG5iZm9ybWF0OiA0LFxuXHRcdFx0bmJmb3JtYXRfbWlub3I6IDAsXG5cdFx0XHRjZWxsczogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y2VsbF90eXBlOiBcImNvZGVcIixcblx0XHRcdFx0XHRzb3VyY2U6IGNpcnEsXG5cdFx0XHRcdFx0bWV0YWRhdGE6IHtcblxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0b3V0cHV0czogW10sXG5cdFx0XHRcdFx0ZXhlY3V0aW9uX2NvdW50OiBudWxsXG5cdFx0XHRcdH1cblx0XHRcdF1cblx0XHR9O1xuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShub3RlYm9vayk7XG5cdH1cblxuXHRyZXR1cm4gY2lycTtcbn1cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFRvVEZRID0gZnVuY3Rpb24ob3B0aW9ucywgZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR2YXIgY29tbWVudCA9IG9wdGlvbnMuY29tbWVudDtcblx0dmFyIGRlY29tcG9zZSA9IG9wdGlvbnMuZGVjb21wb3NlO1xuXHR2YXIgdmVyc2lvblN0ciA9IG9wdGlvbnMudmVyc2lvblN0cjtcblx0dmFyIGFzSnVweXRlciA9IG9wdGlvbnMuYXNKdXB5dGVyO1xuXHR2YXIgc2hvdHMgPSBvcHRpb25zLnNob3RzO1xuXHRcblx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdGlmKHR5cGVvZiBzaG90cyA9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0c2hvdHMgPSAxMDI0O1xuXHR9XG5cblx0Ly8gZGVjb21wb3NlID9cblx0dmFyIGNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0Y2lyY3VpdC5sb2FkKHRoaXMuc2F2ZShkZWNvbXBvc2UpKTtcblxuXHR2YXIgdGZxID0gXCJcIjtcblx0dmFyIGluZGVudCA9IFwiXCI7XG5cblx0Ly8gY29tbWVudFxuXHRpZihjb21tZW50KSB7XG5cdFx0dmFyIGNvbW0gPSAoY29tbWVudCB8fCBcIlwiKS5zcGxpdChcIlxcblwiKTtcblx0XHRjb21tLm1hcChmdW5jdGlvbihjbGluZSkge1xuXHRcdFx0aWYoY2xpbmUubGVuZ3RoID49IDEgJiYgY2xpbmVbMF0gIT0gXCIjXCIpIHtcblx0XHRcdFx0Y2lycSArPSBcIiMgXCI7XG5cdFx0XHR9XG5cdFx0XHRjaXJxICs9IGNsaW5lO1xuXHRcdFx0Y2lycSArPSBcIlxcblwiO1xuXHRcdH0pO1xuXHR9XG5cblx0dmFyIG5ld09wdGlvbnMgPSB7XG5cdFx0Y29tbWVudDogY29tbWVudCxcblx0XHRkZWNvbXBvc2U6IGRlY29tcG9zZSxcblx0XHR2ZXJzaW9uU3RyOiB2ZXJzaW9uU3RyLFxuXHRcdGFzSnVweXRlcjogZmFsc2UsXG5cdFx0c2hvdHM6IHNob3RzLFxuXHRcdGV4cG9ydFRmcTogdHJ1ZVxuXHR9O1x0XHRcdFx0XHRcdFxuXHR0ZnEgKz0gY2lyY3VpdC5leHBvcnRUb0NpcnEobmV3T3B0aW9ucywgZXhwb3J0QXNHYXRlTmFtZSk7XG5cdHRmcSArPSBcInJlc3VsdHNfbGlzdCA9IHRmcS5sYXllcnMuU2FtcGxlKCkoY2lyY3VpdCwgcmVwZXRpdGlvbnM9XCIrc2hvdHMrXCIpLnRvX2xpc3QoKVswXVxcblwiO1xuXHR0ZnEgKz0gXCJyZXN1bHRzID0gbGlzdChtYXAobGFtYmRhIGFycjogcmVkdWNlKGxhbWJkYSB4LCB5OiBzdHIoeCkgKyBzdHIoeSksIGFycls6Oi0xXSksIHJlc3VsdHNfbGlzdCkpXFxuXCI7XG5cdHRmcSArPSBcImNvdW50cyA9IGRpY3QoemlwKHJlc3VsdHMsW3Jlc3VsdHMuY291bnQoaSkgZm9yIGkgaW4gcmVzdWx0c10pKVxcblwiO1xuXHR0ZnEgKz0gXCJwcmludChjb3VudHMpXCI7XG5cblx0aWYoYXNKdXB5dGVyKSB7XG5cdFx0dmFyIG5vdGVib29rID0ge1xuXHRcdFx0bWV0YWRhdGE6IHtcblx0XHRcdFx0a2VybmVsc3BlYzoge1xuXHRcdFx0XHRcdGRpc3BsYXlfbmFtZTogXCJQeXRob24gM1wiLFxuXHRcdFx0XHRcdGxhbmd1YWdlOiBcInB5dGhvblwiLFxuXHRcdFx0XHRcdG5hbWU6IFwicHl0aG9uM1wiXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRuYmZvcm1hdDogNCxcblx0XHRcdG5iZm9ybWF0X21pbm9yOiAwLFxuXHRcdFx0Y2VsbHM6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGNlbGxfdHlwZTogXCJjb2RlXCIsXG5cdFx0XHRcdFx0c291cmNlOiB0ZnEsXG5cdFx0XHRcdFx0bWV0YWRhdGE6IHtcblxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0b3V0cHV0czogW10sXG5cdFx0XHRcdFx0ZXhlY3V0aW9uX2NvdW50OiBudWxsXG5cdFx0XHRcdH1cblx0XHRcdF1cblx0XHR9O1xuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShub3RlYm9vayk7XG5cdH1cblxuXHRyZXR1cm4gdGZxO1xufVxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0VG9RU2hhcnAgPSBmdW5jdGlvbihvcHRpb25zLCBleHBvcnRBc0dhdGVOYW1lKSB7XG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdHZhciBjb21tZW50ID0gb3B0aW9ucy5jb21tZW50O1xuXHR2YXIgZGVjb21wb3NlID0gb3B0aW9ucy5kZWNvbXBvc2U7XG5cdHZhciB2ZXJzaW9uU3RyID0gb3B0aW9ucy52ZXJzaW9uU3RyO1xuXHR2YXIgYXNKdXB5dGVyID0gb3B0aW9ucy5hc0p1cHl0ZXI7XG5cdHZhciBjaXJjdWl0TmFtZSA9IG9wdGlvbnMuY2lyY3VpdE5hbWU7XG5cdHZhciBpbmRlbnREZXB0aCA9IG9wdGlvbnMuaW5kZW50RGVwdGg7XG5cblx0dmFyIHNlbGYgPSB0aGlzO1xuXHRcblx0dmFyIG1hdGhUb1N0cmluZ0hhbmRsZXIgPSBmdW5jdGlvbihub2RlLCBvcHRpb25zKSB7XG5cblx0XHQvLyBzeW1ib2xzXG5cdFx0aWYobm9kZS5pc1N5bWJvbE5vZGUpIHtcblx0XHRcdHZhciBwYXJhbWV0ZXJKc29uID0geyBcInBpXCI6IFwiUEkoKVwiIH07XG5cdFx0XHRpZihwYXJhbWV0ZXJKc29uW25vZGUubmFtZV0pe1xuXHRcdFx0XHRyZXR1cm4gcGFyYW1ldGVySnNvbltub2RlLm5hbWVdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIGNvbnN0YW50XG5cdFx0aWYobm9kZS5pc0NvbnN0YW50Tm9kZSkge1xuXHRcdFx0Ly8gY29udmVydCBpbnRlZ2VyIHRvIGZsb2F0XG5cdFx0XHRpZihOdW1iZXIuaXNJbnRlZ2VyKG5vZGUudmFsdWUpKSB7XG5cdFx0XHRcdHJldHVybiAobm9kZS52YWx1ZSkudG9GaXhlZCgxKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0dmFyIG9wZXJhdGlvbk5hbWUgPSBjaXJjdWl0TmFtZSB8fCBcIkNpcmN1aXRcIjtcblxuXHRpbmRlbnREZXB0aCA9IGluZGVudERlcHRoIHx8IDA7XG5cblx0ZnVuY3Rpb24gZ2V0SW5kZW50KGRlcHRoKSB7XG5cdFx0dmFyIGluZGVudCA9IFwiXCI7XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IGRlcHRoOyBpKyspIHtcblx0XHRcdGluZGVudCArPSBcIiAgICBcIjtcblx0XHR9XG5cdFx0cmV0dXJuIGluZGVudDtcblx0fVxuXG5cdC8vIGRlY29tcG9zZSA/XG5cdHZhciBjaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdGNpcmN1aXQubG9hZCh0aGlzLnNhdmUoZGVjb21wb3NlKSk7XG5cblx0dmFyIHFzaGFycCA9IFwiXCI7XG5cdHZhciBpbmRlbnQgPSBnZXRJbmRlbnQoaW5kZW50RGVwdGgpO1xuXG5cdGlmKCFleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0aWYoIWFzSnVweXRlcikge1xuXHRcdFx0Ly8gb3BlbmluZyBuYW1lc3BhY2Vcblx0XHRcdHFzaGFycCArPSBcIm5hbWVzcGFjZSBRdWFudHVtIHtcXG5cIjtcblx0XHRcdGluZGVudERlcHRoKys7XG5cdFx0XHRpbmRlbnQgPSBnZXRJbmRlbnQoaW5kZW50RGVwdGgpO1xuXHRcdH1cblxuXHRcdHFzaGFycCArPSBpbmRlbnQrXCJvcGVuIE1pY3Jvc29mdC5RdWFudHVtLkludHJpbnNpYztcXG5cIjtcblx0XHRxc2hhcnAgKz0gaW5kZW50K1wib3BlbiBNaWNyb3NvZnQuUXVhbnR1bS5DYW5vbjtcXG5cIjtcblx0XHRxc2hhcnAgKz0gaW5kZW50K1wib3BlbiBNaWNyb3NvZnQuUXVhbnR1bS5NYXRoO1xcblwiO1xuXHRcdHFzaGFycCArPSBpbmRlbnQrXCJvcGVuIE1pY3Jvc29mdC5RdWFudHVtLkNvbnZlcnQ7XFxuXCI7XG5cblx0XHRxc2hhcnAgKz0gXCJcXG5cIjtcblxuXHRcdHFzaGFycCArPSBpbmRlbnQrXCJmdW5jdGlvbiBTZXRCaXRWYWx1ZShyZWc6IEludCwgYml0OiBJbnQsIHZhbHVlOiBCb29sKTogSW50IHtcXG5cIjtcblx0XHRxc2hhcnAgKz0gaW5kZW50K1wiICAgIGlmKHZhbHVlKSB7XFxuXCI7XG5cdFx0cXNoYXJwICs9IGluZGVudCtcIiAgICAgICAgcmV0dXJuIHJlZyB8fHwgKDEgPDw8IGJpdCk7XFxuXCI7XG5cdFx0cXNoYXJwICs9IGluZGVudCtcIiAgICB9IGVsc2Uge1xcblwiO1xuXHRcdHFzaGFycCArPSBpbmRlbnQrXCIgICAgICAgIHJldHVybiByZWcgJiYmIH5+figxIDw8PCBiaXQpO1xcblwiO1xuXHRcdHFzaGFycCArPSBpbmRlbnQrXCIgICAgfVxcblwiO1xuXHRcdHFzaGFycCArPSBpbmRlbnQrXCJ9XFxuXCI7XG5cblx0XHRxc2hhcnAgKz0gaW5kZW50K1wiXFxuXCI7XG5cdH1cblxuXHRpZihleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0dmFyIGFyZ3MgPSBcIlwiO1xuXHRcdHZhciBhcmdDb3VudCA9IDA7XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNpcmN1aXQucGFyYW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0YXJncyArPSBcIiwgXCI7XG5cdFx0XHR9XG5cdFx0XHRhcmdzICs9IGNpcmN1aXQucGFyYW1zW2ldO1xuXHRcdFx0YXJnQ291bnQrKztcblx0XHR9XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNpcmN1aXQubnVtUXViaXRzOyBpKyspIHtcblx0XHRcdGlmKGFyZ0NvdW50ID4gMCkge1xuXHRcdFx0XHRhcmdzICs9IFwiLCBcIjtcblx0XHRcdH1cblx0XHRcdGFyZ3MgKz0gcXViaXRMZXR0ZXIoaSwgY2lyY3VpdC5udW1RdWJpdHMpICsgXCI6IFF1Yml0XCI7XG5cdFx0XHRhcmdDb3VudCsrO1xuXHRcdH1cblx0XHRxc2hhcnAgKz0gaW5kZW50ICsgXCJvcGVyYXRpb24gXCIgKyBleHBvcnRBc0dhdGVOYW1lICsgKGFyZ3MgPyBcIihcIiArIGFyZ3MgKyBcIilcIiA6IFwiXCIpO1xuXHRcdC8vIHFzaGFycCArPSBcIiAgICByZXR1cm4gW1xcblwiO1xuXHRcdC8vIGluZGVudCA9IFwiICAgICAgICBcIjtcblx0fSBlbHNle1xuXHRcdHZhciB1c2VkR2F0ZXMgPSBjaXJjdWl0LnVzZWRHYXRlcygpO1xuXHRcdGlmKCFkZWNvbXBvc2UpIHtcblx0XHRcdHVzZWRHYXRlcy5tYXAoZnVuY3Rpb24odXNlZEdhdGVOYW1lKSB7XG5cdFx0XHRcdHZhciBiYXNpY0dhdGUgPSBjaXJjdWl0LmJhc2ljR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRcdFx0aWYoIWJhc2ljR2F0ZSkge1xuXHRcdFx0XHRcdHZhciBjdXN0b21HYXRlID0gc2VsZi5jdXN0b21HYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0XHRcdGlmKGN1c3RvbUdhdGUpIHtcblx0XHRcdFx0XHRcdHZhciBjdXN0b21DaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdFx0XHRcdFx0XHRjdXN0b21DaXJjdWl0LmxvYWQoY3VzdG9tR2F0ZSk7XG5cdFx0XHRcdFx0XHR2YXIgbmV3T3B0aW9ucyA9IHtcblx0XHRcdFx0XHRcdFx0Y29tbWVudDogXCJcIixcblx0XHRcdFx0XHRcdFx0ZGVjb21wb3NlOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHR2ZXJzaW9uU3RyOiB2ZXJzaW9uU3RyLFxuXHRcdFx0XHRcdFx0XHRhc0p1cHl0ZXI6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRjaXJjdWl0TmFtZTogbnVsbCxcblx0XHRcdFx0XHRcdFx0aW5kZW50RGVwdGg6IGluZGVudERlcHRoXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0cXNoYXJwICs9IGN1c3RvbUNpcmN1aXQuZXhwb3J0VG9RU2hhcnAobmV3T3B0aW9ucywgZXhwb3J0QXNHYXRlTmFtZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRxc2hhcnAgKz0gaW5kZW50K1wib3BlcmF0aW9uIFwiICsgb3BlcmF0aW9uTmFtZSArIFwiKClcIjtcblx0fVxuXG5cdGluZGVudERlcHRoKys7XG5cdGluZGVudCA9IGdldEluZGVudChpbmRlbnREZXB0aCk7XG5cblx0dmFyIGNyZWdDb3VudCA9IDA7XG5cdGZvcihjcmVnTmFtZSBpbiBjaXJjdWl0LmNyZWdzKSB7XG5cdFx0Y3JlZ0NvdW50Kys7XG5cdH1cblxuXHR2YXIgY3JlZ0xpc3QgPSBcIlwiO1xuXHRpZihjcmVnQ291bnQpIHtcblx0XHRxc2hhcnAgKz0gXCIgOiAoXCJcblx0XHRmb3IoY3JlZ05hbWUgaW4gY2lyY3VpdC5jcmVncykge1xuXHRcdFx0aWYoY3JlZ0xpc3QpIHtcblx0XHRcdFx0cXNoYXJwICs9IFwiLCBcIjtcblx0XHRcdFx0Y3JlZ0xpc3QgKz0gXCIsIFwiO1xuXHRcdFx0fVxuXHRcdFx0cXNoYXJwICs9IFwiSW50XCI7XG5cdFx0XHRjcmVnTGlzdCArPSBjcmVnTmFtZTtcblx0XHR9XG5cdFx0cXNoYXJwICs9IFwiKVwiO1xuXHR9IGVsc2Uge1xuXHRcdHFzaGFycCArPSBcIiA6IFVuaXRcIjtcblx0fVxuXHRxc2hhcnAgKz0gXCIge1xcblwiO1xuXHQvLyAtLS1cblxuXHQvLyBkZWNsYXJlIGNyZWdzXG5cdGlmKGNyZWdDb3VudCkge1xuXHRcdGZvcihjcmVnTmFtZSBpbiBjaXJjdWl0LmNyZWdzKSB7XG5cdFx0XHRxc2hhcnAgKz0gaW5kZW50ICsgXCJtdXRhYmxlIFwiICsgY3JlZ05hbWUgKyBcIiA9IDA7XFxuXCI7XG5cdFx0fVxuXHR9XG5cblx0cXJlZ19uYW1lID0gXCJxdWJpdHNcIjtcblxuXHRpZighZXhwb3J0QXNHYXRlTmFtZSl7XG5cdFx0cXNoYXJwICs9IGluZGVudCtcInVzaW5nKFwiO1xuXHRcdHFzaGFycCArPSBxcmVnX25hbWUgKyBcIiA9IFF1Yml0W1wiICsgY2lyY3VpdC5udW1RdWJpdHMgKyBcIl1cIjtcblx0XHRxc2hhcnAgKz0gXCIpIHtcXG5cIjtcblx0XHRpbmRlbnREZXB0aCsrO1xuXHRcdGluZGVudCA9IGdldEluZGVudChpbmRlbnREZXB0aCk7XG5cdH1cblxuXHR2YXIgZGVmR2F0ZXMgPSBcIlwiO1xuXHR2YXIgdXNlZEdhdGVzID0gY2lyY3VpdC51c2VkR2F0ZXMoKTtcblxuXHR2YXIgbnVtQ29scyA9IGNpcmN1aXQubnVtQ29scygpO1xuXHR2YXIgZ2F0ZUNvdW50ZXIgPSAwO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IGNpcmN1aXQubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gY2lyY3VpdC5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCkge1xuXHRcdFx0XHR2YXIgZ2F0ZURlZiA9IGNpcmN1aXQuZ2V0R2F0ZURlZihnYXRlLm5hbWUpO1xuXG5cdFx0XHRcdGlmKCFnYXRlRGVmKSB7XG5cdFx0XHRcdFx0Z2F0ZURlZiA9IGNpcmN1aXQuY3VzdG9tR2F0ZXNbZ2F0ZS5uYW1lXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhciBnYXRlUGFyYW1zID0gZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5wYXJhbXMgPyBnYXRlLm9wdGlvbnMucGFyYW1zIDoge307XG5cdFx0XHRcdHZhciBxc2hhcnBJbmZvID0gbnVsbDtcblx0XHRcdFx0dmFyIGlzQ29udHJvbGxlZEdhdGUgPSBmYWxzZTtcblx0XHRcdFx0dmFyIHdpcmVJZHggPSAwO1xuXHRcdFx0XHRpZihnYXRlRGVmKSB7XG5cdFx0XHRcdFx0aWYoZ2F0ZURlZi5leHBvcnRJbmZvKSB7XG5cdFx0XHRcdFx0XHRpZihnYXRlRGVmLmV4cG9ydEluZm8ucXNoYXJwICYmIGdhdGVEZWYuZXhwb3J0SW5mby5xc2hhcnAucmVwbGFjZW1lbnQpIHtcblx0XHRcdFx0XHRcdFx0aWYoZ2F0ZURlZi5leHBvcnRJbmZvLnFzaGFycC5yZXBsYWNlbWVudC5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdFx0XHRnYXRlUGFyYW1zID0gZ2F0ZURlZi5leHBvcnRJbmZvLnFzaGFycC5yZXBsYWNlbWVudC5wYXJhbXM7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Z2F0ZURlZiA9IGNpcmN1aXQuZ2V0R2F0ZURlZihnYXRlRGVmLmV4cG9ydEluZm8ucXNoYXJwLnJlcGxhY2VtZW50Lm5hbWUpO1xuXHRcdFx0XHRcdFx0fVx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0cXNoYXJwSW5mbyA9IChnYXRlRGVmICYmIGdhdGVEZWYuZXhwb3J0SW5mbyAmJiBnYXRlRGVmLmV4cG9ydEluZm8ucXNoYXJwKSA/IGdhdGVEZWYuZXhwb3J0SW5mby5xc2hhcnAgOiBudWxsO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKGdhdGVEZWYuZHJhd2luZ0luZm8gJiYgZ2F0ZURlZi5kcmF3aW5nSW5mby5yb290ICYmIGdhdGUubmFtZSAhPSBcImN4XCIgJiYgZ2F0ZS5uYW1lICE9IFwiY2N4XCIpIHtcblx0XHRcdFx0XHRcdGlzQ29udHJvbGxlZEdhdGUgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblxuXG5cdFx0XHRcdFx0dmFyIHRtcFBhcmFtQ291bnQgPSAwO1xuXHRcdFx0XHRcdHZhciBwYXJhbVN0cmluZyA9IFwiXCI7XG5cdFx0XHRcdFx0aWYoZ2F0ZVBhcmFtcykge1xuXHRcdFx0XHRcdFx0dmFyIHBhcmFtRGVmID0gZ2F0ZURlZi5wYXJhbXMgfHwgW107XG5cdFx0XHRcdFx0XHR2YXIgcGFyYW1Db3VudCA9IHBhcmFtRGVmLmxlbmd0aDtcblx0XHRcdFx0XHRcdGlmKHBhcmFtQ291bnQpIHtcdFx0XG5cdFx0XHRcdFx0XHRcdGZvcih2YXIgcCA9IDA7IHAgPCBwYXJhbUNvdW50OyBwKyspIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBpZih0bXBQYXJhbUNvdW50ID09IDApIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBcdHBhcmFtU3RyaW5nICs9IFwiKFwiO1xuXHRcdFx0XHRcdFx0XHRcdC8vIH1cblx0XHRcdFx0XHRcdFx0XHRpZih0bXBQYXJhbUNvdW50ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1TdHJpbmcgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1OYW1lID0gcGFyYW1EZWZbcF07XHRcblxuXHRcdFx0XHRcdFx0XHRcdC8vIC0tLVxuXHRcdFx0XHRcdFx0XHRcdC8vIHByZXBlbmQgJ25wJyB0byBtYXRoIGNvbnN0YW50c1xuXHRcdFx0XHRcdFx0XHRcdGlmKGdhdGVQYXJhbXNbcGFyYW1OYW1lXSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIG5vZGUgPSBtYXRoLnBhcnNlKGdhdGVQYXJhbXNbcGFyYW1OYW1lXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRwYXJhbVN0cmluZyArPSBub2RlLnRvU3RyaW5nKHsgaGFuZGxlcjogbWF0aFRvU3RyaW5nSGFuZGxlciB9KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0Ly8gLS0tXG5cblx0XHRcdFx0XHRcdFx0XHQvLyBpZih0bXBQYXJhbUNvdW50ID09IHBhcmFtQ291bnQgLSAxKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gXHRwYXJhbVN0cmluZyArPSBcIilcIjtcblx0XHRcdFx0XHRcdFx0XHQvLyB9XG5cdFx0XHRcdFx0XHRcdFx0dG1wUGFyYW1Db3VudCsrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIC0tLVxuXHRcdFx0XHRcdGlmKGdhdGUubmFtZSA9PSBcIm1lYXN1cmVcIikge1xuXHRcdFx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jcmVnKSB7XG5cdFx0XHRcdFx0XHRcdHFzaGFycCArPSBpbmRlbnQgKyBcInNldCBcIiArIGdhdGUub3B0aW9ucy5jcmVnLm5hbWUgKyBcIiA9IFNldEJpdFZhbHVlKFwiICsgZ2F0ZS5vcHRpb25zLmNyZWcubmFtZSArIFwiLCBcIiArIGdhdGUub3B0aW9ucy5jcmVnLmJpdCArIFwiLCBSZXN1bHRBc0Jvb2woTShcIjtcblx0XHRcdFx0XHRcdFx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdFx0XHRcdFx0XHRcdHFzaGFycCArPSBxdWJpdExldHRlcihnYXRlLndpcmVzWzBdLCBjaXJjdWl0Lm51bVF1Yml0cykgKyBcIikpKTtcXG5cIjtcblx0XHRcdFx0XHRcdFx0fWVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHFzaGFycCArPSBxcmVnX25hbWUgKyBcIltcIiArIGdhdGUud2lyZXNbMF0gKyBcIl0pKSk7XFxuXCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHFzaGFycCArPSBpbmRlbnQgKyBcIi8vIEV4cG9ydCB0byBxc2hhcnAgV0FSTklORzogbWlzc2luZyBkZXN0aW5hdGlvbiByZWdpc3RlclxcblwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRxc2hhcnAgKz0gaW5kZW50O1xuXG5cdFx0XHRcdFx0XHRpZihnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcpIHtcblx0XHRcdFx0XHRcdFx0cXNoYXJwICs9IFwiaWYoXCIgKyBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcgKyBcIiA9PSBcIiArIGdhdGUub3B0aW9ucy5jb25kaXRpb24udmFsdWUgKyBcIikge1xcblwiO1xuXHRcdFx0XHRcdFx0XHRpbmRlbnREZXB0aCsrO1xuXHRcdFx0XHRcdFx0XHRpbmRlbnQgPSBnZXRJbmRlbnQoaW5kZW50RGVwdGgpO1xuXHRcdFx0XHRcdFx0XHRxc2hhcnAgKz0gaW5kZW50O1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZihxc2hhcnBJbmZvKSB7XG5cdFx0XHRcdFx0XHRcdHFzaGFycCArPSBxc2hhcnBJbmZvLm5hbWUgKyBcIihcIjtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHFzaGFycCArPSBnYXRlLm5hbWUgKyBcIihcIjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYoaXNDb250cm9sbGVkR2F0ZSkge1xuXHRcdFx0XHRcdFx0XHRpZihleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0XHRcdFx0XHRcdFx0cXNoYXJwICs9IFwiW1wiICsgcXViaXRMZXR0ZXIoZ2F0ZS53aXJlc1swXSwgY2lyY3VpdC5udW1RdWJpdHMpICsgXCJdLCAoXCI7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0cXNoYXJwICs9IFwiW1wiICsgcXJlZ19uYW1lICsgXCJbXCIgKyBnYXRlLndpcmVzWzBdICsgXCJdXSwgKFwiO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHdpcmVJZHggPSAxO1xuXHRcdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHRcdHdpcmVJZHggPSAwO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZihwYXJhbVN0cmluZyl7XG5cdFx0XHRcdFx0XHRcdHFzaGFycCArPSBwYXJhbVN0cmluZyArIFwiLCBcIjtcblx0XHRcdFx0XHRcdH0gXG5cdFx0XHRcdFx0XHQvLyBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIFx0cXNoYXJwICs9IHBhcmFtU3RyaW5nICsgXCIoXCI7XG5cdFx0XHRcdFx0XHQvLyB9XG5cdFx0XHRcdFx0XHR2YXIgYXJnQ291bnQgPSAwO1xuXHRcdFx0XHRcdFx0Zm9yKHZhciB3ID0gd2lyZUlkeDsgdyA8IGdhdGUud2lyZXMubGVuZ3RoOyB3KyspIHtcblx0XHRcdFx0XHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0cXNoYXJwICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRpZihleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0XHRcdFx0XHRcdFx0cXNoYXJwICs9IHF1Yml0TGV0dGVyKGdhdGUud2lyZXNbd10sIGNpcmN1aXQubnVtUXViaXRzKTtcblx0XHRcdFx0XHRcdFx0fWVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHFzaGFycCArPSBxcmVnX25hbWUgKyBcIltcIiArIGdhdGUud2lyZXNbd10gKyBcIl1cIjtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKGlzQ29udHJvbGxlZEdhdGUpe1xuXHRcdFx0XHRcdFx0XHRxc2hhcnAgKz0gXCIpXCI7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHFzaGFycCArPSBcIik7XFxuXCI7XG5cblx0XHRcdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZykge1xuXHRcdFx0XHRcdFx0XHQvLyBlbmQgaWZcblx0XHRcdFx0XHRcdFx0aW5kZW50RGVwdGgtLTtcblx0XHRcdFx0XHRcdFx0aW5kZW50ID0gZ2V0SW5kZW50KGluZGVudERlcHRoKTtcblx0XHRcdFx0XHRcdFx0cXNoYXJwICs9IGluZGVudCArIFwifVxcblwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRpZighZXhwb3J0QXNHYXRlTmFtZSl7XG5cdFx0cXNoYXJwICs9IGluZGVudCArIFwiUmVzZXRBbGwoXCIgKyBxcmVnX25hbWUgKyBcIik7XFxuXCI7XG5cblx0XHRpbmRlbnREZXB0aC0tO1xuXHRcdGluZGVudCA9IGdldEluZGVudChpbmRlbnREZXB0aCk7XG5cblx0XHRxc2hhcnAgKz0gaW5kZW50ICsgXCJ9XFxuXCI7XG5cdH1cblxuXHRpZihjcmVnQ291bnQpIHtcblx0XHRxc2hhcnAgKz0gaW5kZW50ICsgXCJyZXR1cm4gKFwiICsgY3JlZ0xpc3QgKyBcIik7XFxuXCI7XG5cdH1cblxuXHRpbmRlbnREZXB0aC0tO1xuXHRpbmRlbnQgPSBnZXRJbmRlbnQoaW5kZW50RGVwdGgpO1xuXHRxc2hhcnAgKz0gaW5kZW50ICsgXCJ9XFxuXCI7XG5cblx0aWYoIWV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRpZighYXNKdXB5dGVyKSB7XG5cdFx0XHQvLyBjbG9zaW5nIG5hbWVzcGFjZVxuXHRcdFx0cXNoYXJwICs9IFwifVxcblwiO1xuXG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHFzaGFycCArPSBcIlxcblwiO1xuXHR9XG5cblx0aWYoYXNKdXB5dGVyKSB7XG5cdFx0dmFyIG5vdGVib29rID0ge1xuXHRcdFx0XCJtZXRhZGF0YVwiOiB7XG5cdFx0XHRcdFwia2VybmVsc3BlY1wiOiB7XG5cdFx0XHRcdFx0XCJkaXNwbGF5X25hbWVcIjogXCJRI1wiLFxuXHRcdFx0XHRcdFwibGFuZ3VhZ2VcIjogXCJxc2hhcnBcIixcblx0XHRcdFx0XHRcIm5hbWVcIjogXCJpcXNoYXJwXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0XCJsYW5ndWFnZV9pbmZvXCI6IHtcblx0XHRcdFx0XHRcIm5hbWVcIjogXCJcIlxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0bmJmb3JtYXQ6IDQsXG5cdFx0XHRuYmZvcm1hdF9taW5vcjogMCxcblx0XHRcdGNlbGxzOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRjZWxsX3R5cGU6IFwiY29kZVwiLFxuXHRcdFx0XHRcdHNvdXJjZTogcXNoYXJwLFxuXHRcdFx0XHRcdG1ldGFkYXRhOiB7XG5cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG91dHB1dHM6IFtdLFxuXHRcdFx0XHRcdGV4ZWN1dGlvbl9jb3VudDogbnVsbFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y2VsbF90eXBlOiBcImNvZGVcIixcblx0XHRcdFx0XHRzb3VyY2U6IFwiJXNpbXVsYXRlIFwiICsgb3BlcmF0aW9uTmFtZSxcblx0XHRcdFx0XHRtZXRhZGF0YToge1xuXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRvdXRwdXRzOiBbXSxcblx0XHRcdFx0XHRleGVjdXRpb25fY291bnQ6IG51bGxcblx0XHRcdFx0fVxuXHRcdFx0XVxuXHRcdH07XG5cdFx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KG5vdGVib29rKTtcblx0fVxuXG5cdHJldHVybiBxc2hhcnA7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0VG9CcmFrZXQgPSBmdW5jdGlvbihvcHRpb25zLCBleHBvcnRBc0dhdGVOYW1lKSB7XG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdHZhciBjb21tZW50ID0gb3B0aW9ucy5jb21tZW50O1xuXHR2YXIgZGVjb21wb3NlID0gb3B0aW9ucy5kZWNvbXBvc2U7XG5cdHZhciB2ZXJzaW9uU3RyID0gb3B0aW9ucy52ZXJzaW9uU3RyO1xuXHR2YXIgYXNKdXB5dGVyID0gb3B0aW9ucy5hc0p1cHl0ZXI7XG5cdHZhciBzaG90cyA9IG9wdGlvbnMuc2hvdHM7XG5cdHZhciBoeWJyaWQgPSBvcHRpb25zLmh5YnJpZDtcblx0dmFyIGluZGVudERlcHRoID0gb3B0aW9ucy5pbmRlbnREZXB0aDtcblxuXHR2YXIgc2VsZiA9IHRoaXM7XG5cblxuXHRzaG90cyA9IHNob3RzIHx8IDEwMjQ7XG5cblx0dmFyIHZlcnNpb24gPSBwYXJzZUZsb2F0KHZlcnNpb25TdHIgfHwgXCIxLjBcIik7XG5cdGlmKGlzTmFOKHZlcnNpb24pKSB7XG5cdFx0dmVyc2lvbiA9IDEuMDtcblx0fVxuXG5cdGlmKHR5cGVvZiBoeWJyaWQgPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdGh5YnJpZCA9IHRoaXMub3B0aW9ucyA/ICEhdGhpcy5vcHRpb25zLmh5YnJpZCA6IGZhbHNlO1xuXHR9XG5cblx0Ly8gZGVjb21wb3NlID9cblx0dmFyIGNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0Y2lyY3VpdC5sb2FkKHRoaXMuc2F2ZShkZWNvbXBvc2UpKTtcblxuXHR2YXIgbWF0aFRvU3RyaW5nSGFuZGxlciA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMpIHtcblx0XHRpZihub2RlLmlzU3ltYm9sTm9kZSkge1xuXHRcdFx0dmFyIG51bXB5cyA9IFtcInBpXCIsIFwic2luXCIsIFwiY29zXCIsIFwidGFuXCIsIFwiYXNpblwiLCBcImFjb3NcIiwgXCJhdGFuXCJdO1xuXHRcdFx0aWYobnVtcHlzLmluZGV4T2Yobm9kZS5uYW1lKSA+PSAwKSB7XG5cdFx0XHRcdHJldHVybiBcIm5wLlwiICsgbm9kZS5uYW1lO1xuXHRcdFx0fVxuXG5cdFx0XHRpZihzZWxmLnBhcmFtcy5pbmRleE9mKG5vZGUubmFtZSkgPj0gMCAmJiBoeWJyaWQpIHtcblx0XHRcdFx0cmV0dXJuIFwicGFyYW1zW1wiICsgc2VsZi5wYXJhbXMuaW5kZXhPZihub2RlLm5hbWUpICsgXCJdXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdHZhciBhZGp1c3RJZGVudGF0aW9uID0gZnVuY3Rpb24oYWRkU3RyLCBpZGVudCkge1xuXHRcdHZhciBzdHIgPSBcIlwiO1xuXG5cdFx0Ly8gYWRkIHVzZXIgZGVmaW5lZCBjb3N0IGZ1bmN0aW9uIHdpdGggcHJvcGVyIGlkZW50YXRpb25cblx0XHR2YXIgY2ZMaW5lcyA9IGFkZFN0ci5zcGxpdChcIlxcblwiKTtcblx0XHR2YXIgbWluSWRlbnQgPSAtMTtcblx0XHRjZkxpbmVzLm1hcChmdW5jdGlvbihjZkxpbmUpIHtcblx0XHRcdHZhciB0bXBJZGVudCA9IGNmTGluZS5zZWFyY2goL1xcUy8pO1xuXHRcdFx0aWYodG1wSWRlbnQgPj0gMCAmJiAobWluSWRlbnQgPCAwIHx8IHRtcElkZW50IDwgbWluSWRlbnQpKSB7XG5cdFx0XHRcdG1pbklkZW50ID0gdG1wSWRlbnQ7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRpZihtaW5JZGVudCA8IDApIHtcblx0XHRcdG1pbklkZW50ID0gMDtcblx0XHR9XG5cblx0XHR2YXIgYWRkSWRlbnQgPSBcIlwiO1xuXHRcdGlmKG1pbklkZW50IDwgaWRlbnQubGVuZ3RoKSB7XG5cdFx0XHRmb3IodmFyIHRtcCA9IDA7IHRtcCA8IChpZGVudC5sZW5ndGggLSBtaW5JZGVudCk7IHRtcCsrKSB7XG5cdFx0XHRcdGFkZElkZW50ICs9IFwiIFwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNmTGluZXMubWFwKGZ1bmN0aW9uKGNmTGluZSkge1xuXHRcdFx0c3RyICs9IGFkZElkZW50ICsgY2ZMaW5lICsgXCJcXG5cIjtcblx0XHR9KTtcblxuXHRcdHJldHVybiBzdHI7XG5cdH07XG5cblx0dmFyIGdldEluZGVudCA9IGZ1bmN0aW9uKGRlcHRoKSB7XG5cdFx0dmFyIGluZGVudCA9IFwiXCI7XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IGRlcHRoOyBpKyspIHtcblx0XHRcdGluZGVudCArPSBcIiAgICBcIjtcblx0XHR9XG5cdFx0cmV0dXJuIGluZGVudDtcblx0fVxuXG5cdGluZGVudERlcHRoID0gaW5kZW50RGVwdGggfHwgMDtcblxuXHR2YXIgYnJha2V0ID0gXCJcIjtcblx0dmFyIGluZGVudCA9IGdldEluZGVudChpbmRlbnREZXB0aCk7XG5cblx0dmFyIHVzZWRHYXRlcyA9IGNpcmN1aXQudXNlZEdhdGVzKCk7XG5cdHZhciBpc1N1Yk1vZHVsZSA9IGZhbHNlO1xuXHR1c2VkR2F0ZXMubWFwKGZ1bmN0aW9uKHVzZWRHYXRlTmFtZSl7XG5cdFx0aWYoIWNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdKXtcblx0XHRcdGlzU3ViTW9kdWxlID0gdHJ1ZTtcblx0XHR9XG5cdH0pO1xuXG5cdHZhciBhcmdzID0gXCJcIjtcblx0dmFyIGFyZ0NvdW50ID0gMDtcblx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBjaXJjdWl0Lm51bVF1Yml0czsgaSsrKSB7XG5cdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0YXJncyArPSBcIiwgXCI7XG5cdFx0XHR9XG5cdFx0XHRhcmdzICs9IHF1Yml0TGV0dGVyKGksIGNpcmN1aXQubnVtUXViaXRzKTtcblx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0fVxuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBjaXJjdWl0LnBhcmFtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdGFyZ3MgKz0gXCIsIFwiO1xuXHRcdFx0fVxuXHRcdFx0YXJncyArPSBjaXJjdWl0LnBhcmFtc1tpXTtcblx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGJyYWtldCArPSBpbmRlbnQgKyBcImltcG9ydCBudW1weSBhcyBucFxcblwiO1xuXHRcdGJyYWtldCArPSBpbmRlbnQgKyBcImZyb20gYnJha2V0LmRldmljZXMgaW1wb3J0IExvY2FsU2ltdWxhdG9yXFxuXCI7XG5cdFx0YnJha2V0ICs9IGluZGVudCArIFwiZnJvbSBicmFrZXQuY2lyY3VpdHMgaW1wb3J0IENpcmN1aXRcXG5cIjtcblx0XHRicmFrZXQgKz0gaW5kZW50ICsgXCJmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBDb3VudGVyXFxuXCI7XG5cblx0XHRpZihoeWJyaWQpIHtcblx0XHRcdGJyYWtldCArPSBpbmRlbnQgKyBcImZyb20gc2NpcHkub3B0aW1pemUgaW1wb3J0IG1pbmltaXplXFxuXCI7XG5cdFx0fVxuXG5cdFx0YnJha2V0ICs9IFwiXFxuXCI7XG5cblx0XHRpZihzaG90cykge1xuXHRcdFx0YnJha2V0ICs9IGluZGVudCArIFwic2hvdHMgPSBcIiArIHNob3RzICsgXCJcXG5cIjtcblx0XHRcdGJyYWtldCArPSBcIlxcblwiO1xuXHRcdH1cblxuXHRcdHZhciBnbG9iYWxQYXJhbXMgPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLnBhcmFtcyA/IHRoaXMub3B0aW9ucy5wYXJhbXMgOiB7fTtcblx0XHRpZih0aGlzLnBhcmFtcy5sZW5ndGgpIHtcblx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhcmFtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHR2YXIgZ2xvYmFsUGFyYW1OYW1lID0gdGhpcy5wYXJhbXNbaV07XG5cblx0XHRcdFx0dmFyIG5vZGUgPSBtYXRoLnBhcnNlKGdsb2JhbFBhcmFtc1tnbG9iYWxQYXJhbU5hbWVdKTtcblx0XHRcdFx0dmFyIGdsb2JhbFBhcmFtVmFsdWUgPSBub2RlLnRvU3RyaW5nKHsgaGFuZGxlcjogbWF0aFRvU3RyaW5nSGFuZGxlciB9KTtcblxuXHRcdFx0XHRicmFrZXQgKz0gZ2xvYmFsUGFyYW1OYW1lICsgXCIgPSBcIiArIGdsb2JhbFBhcmFtVmFsdWUgKyBcIlxcblwiO1xuXHRcdFx0fVxuXHRcdFx0YnJha2V0ICs9IFwiXFxuXCI7XG5cdFx0fVxuXG5cdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRicmFrZXQgKz0gaW5kZW50ICsgXCJ0b2xlcmFuY2UgPSBcIiArICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMudG9sZXJhbmNlID8gdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMudG9sZXJhbmNlIHx8IFwiMC4wMDFcIiA6IFwiMC4wMDFcIikgKyBcIlxcblwiO1xuXHRcdFx0YnJha2V0ICs9IFwiXFxuXCI7XG5cdFx0fVxuXHR9XG5cblx0dmFyIHVuc3VwcG9ydGVkQnJha2V0SW5mbyA9IG51bGw7XG5cdHZhciBnYXRlVW5pdGFyeSA9IG51bGw7XG5cdHZhciBzdWJtb2R1bGVDb3VudCA9IDA7XG5cdHVzZWRHYXRlcy5tYXAoZnVuY3Rpb24odXNlZEdhdGVOYW1lKSB7XG5cdFx0dmFyIGJhc2ljR2F0ZSA9IGNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdGlmKGJhc2ljR2F0ZSkge1xuXHRcdFx0aWYoIWRlY29tcG9zZSl7XG5cdFx0XHRcdGlmKGNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdLmV4cG9ydEluZm8uYnJha2V0ICYmIGNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdLmV4cG9ydEluZm8uYnJha2V0LmFycmF5KSB7XG5cdFx0XHRcdFx0dW5zdXBwb3J0ZWRCcmFrZXRJbmZvID0gY2lyY3VpdC5iYXNpY0dhdGVzW3VzZWRHYXRlTmFtZV0uZXhwb3J0SW5mby5icmFrZXQ7XG5cdFxuXHRcdFx0XHRcdGlmKHVuc3VwcG9ydGVkQnJha2V0SW5mby5uYW1lID09IFwidW5pdGFyeVwiKXtcblx0XHRcdFx0XHRcdGdhdGVVbml0YXJ5ID0gdXNlZEdhdGVOYW1lICsgXCJfdW5pdGFyeVwiO1xuXHRcdFx0XHRcdFx0YnJha2V0ICs9IGluZGVudCArIFwiZGVmIFwiICsgZ2F0ZVVuaXRhcnkgK1wiKFwiO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcblx0XHRcdFx0XHRpZih1bnN1cHBvcnRlZEJyYWtldEluZm8ucGFyYW1zICYmIHVuc3VwcG9ydGVkQnJha2V0SW5mby5wYXJhbXMubGVuZ3RoKXtcblx0XHRcdFx0XHRcdHZhciBhcmdDb3VudCA9IDA7XG5cdFx0XHRcdFx0XHR1bnN1cHBvcnRlZEJyYWtldEluZm8ucGFyYW1zLm1hcChmdW5jdGlvbihwYXJhbU5hbWUpe1xuXHRcdFx0XHRcdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRicmFrZXQgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGJyYWtldCArPSBpbmRlbnQgKyBcInBfXCIgKyBwYXJhbU5hbWU7XG5cdFx0XHRcdFx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcblx0XHRcdFx0XHRicmFrZXQgKz0gXCIpOlxcblwiO1xuXHRcdFx0XHRcdGJyYWtldCArPSBnZXRJbmRlbnQoaW5kZW50RGVwdGggKyAxKSArIFwicmV0dXJuIG5wLmFycmF5KFwiICsgIHVuc3VwcG9ydGVkQnJha2V0SW5mby5hcnJheSArIFwiKTtcXG5cXG5cIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR2YXIgY3VzdG9tR2F0ZSA9IHNlbGYuY3VzdG9tR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRcdGlmKGN1c3RvbUdhdGUpIHtcblx0XHRcdFx0dmFyIGN1c3RvbUNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0XHRcdFx0Y3VzdG9tQ2lyY3VpdC5sb2FkKGN1c3RvbUdhdGUpO1xuXHRcdFx0XHRicmFrZXQgKz0gY3VzdG9tQ2lyY3VpdC5leHBvcnRCcmFrZXQoXCJcIiwgdHJ1ZSwgdXNlZEdhdGVOYW1lLCB2ZXJzaW9uU3RyLCBmYWxzZSwgbnVsbCwgZmFsc2UsIGluZGVudERlcHRoKTtcblx0XHRcdFx0c3VibW9kdWxlQ291bnQrKztcblx0XHRcdH1cblx0XHR9XG5cdH0pO1x0XG5cdFx0XHRcdFx0XG5cdGlmKGV4cG9ydEFzR2F0ZU5hbWUpe1xuXHRcdGJyYWtldCArPSBcImRlZiBcIiArIGV4cG9ydEFzR2F0ZU5hbWUgKyAoYXJncyA/IFwiKFwiICsgYXJncyArIFwiKVwiIDogXCJcIikgKyBcIjpcXG5cIjtcblx0XHRpbmRlbnREZXB0aCsrO1xuXHRcdGluZGVudCA9IGdldEluZGVudChpbmRlbnREZXB0aCk7XG5cdH0gZWxzZSB7XG5cdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRicmFrZXQgKz0gXCJkZWYgb2JqZWN0aXZlX2Z1bmN0aW9uKHBhcmFtcyk6XFxuXCJcblx0XHRcdGluZGVudERlcHRoKys7XG5cdFx0XHRpbmRlbnQgPSBnZXRJbmRlbnQoaW5kZW50RGVwdGgpO1xuXHRcdH1cblx0fVxuXG5cdGJyYWtldCArPSBpbmRlbnQgKyBcImNpcmN1aXQgPSBDaXJjdWl0KClcXG5cIjtcblxuXHRpZighZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdGlmKHN1Ym1vZHVsZUNvdW50KSB7XG5cdFx0XHRicmFrZXQgKz0gXCJcXG5cIjtcblx0XHRcdHVzZWRHYXRlcy5tYXAoZnVuY3Rpb24odXNlZEdhdGVOYW1lKSB7XG5cdFx0XHRcdGlmKCFjaXJjdWl0LmJhc2ljR2F0ZXNbdXNlZEdhdGVOYW1lXSAmJiBjaXJjdWl0LmN1c3RvbUdhdGVzW3VzZWRHYXRlTmFtZV0pIHtcblx0XHRcdFx0XHRicmFrZXQgKz0gaW5kZW50ICsgXCJjaXJjdWl0LnJlZ2lzdGVyX3N1YnJvdXRpbmUoXCIgKyB1c2VkR2F0ZU5hbWUgKyBcIilcXG5cIjtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRicmFrZXQgKz0gXCJcXG5cIjtcblx0XHR9XG5cdH1cblxuXHR2YXIgbnVtQ29scyA9IGNpcmN1aXQubnVtQ29scygpO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IGNpcmN1aXQubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gY2lyY3VpdC5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCkge1xuXHRcdFx0XHR2YXIgZ2F0ZURlZiA9IGNpcmN1aXQuZ2V0R2F0ZURlZihnYXRlLm5hbWUpO1xuXHRcdFx0XHR2YXIgZ2F0ZVBhcmFtcyA9IGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMucGFyYW1zID8gZ2F0ZS5vcHRpb25zLnBhcmFtcyA6IHt9O1xuXHRcdFx0XHR2YXIgcGFyYW1EZWYgPSBnYXRlRGVmLnBhcmFtcyB8fCBbXTtcblx0XHRcdFx0dmFyIGJyYWtldEluZm8gPSBudWxsO1xuXG5cdFx0XHRcdHZhciBnYXRlTmFtZSA9IGdhdGUubmFtZTtcblx0XHRcdFx0dmFyIHBhcmFtU3RyaW5nID0gXCJcIjtcblx0XHRcdFx0dmFyIGlzVW5pdGFyeSA9IGZhbHNlO1xuXG5cdFx0XHRcdGlmKGdhdGVEZWYpIHtcblx0XHRcdFx0XHRpZihnYXRlRGVmLmV4cG9ydEluZm8gJiYgZ2F0ZURlZi5leHBvcnRJbmZvLmJyYWtldCkge1xuXHRcdFx0XHRcdFx0YnJha2V0SW5mbyA9IGdhdGVEZWYuZXhwb3J0SW5mby5icmFrZXQ7XG5cblx0XHRcdFx0XHRcdGlmKGJyYWtldEluZm8ucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdGlmKEFycmF5LmlzQXJyYXkoYnJha2V0SW5mby5wYXJhbXMpKSB7XG5cdFx0XHRcdFx0XHRcdFx0cGFyYW1EZWYgPSBicmFrZXRJbmZvLnBhcmFtcztcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRnYXRlUGFyYW1zID0gYnJha2V0SW5mby5wYXJhbXM7XG5cdFx0XHRcdFx0XHRcdFx0cGFyYW1EZWYgPSBPYmplY3Qua2V5cyhnYXRlUGFyYW1zKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZihicmFrZXRJbmZvLm5hbWUgPT0gXCJ1bml0YXJ5XCIpIHtcblx0XHRcdFx0XHRcdFx0aXNVbml0YXJ5ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGdhdGVOYW1lID0gYnJha2V0SW5mby5uYW1lO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmKCFicmFrZXRJbmZvICYmICFjaXJjdWl0LmN1c3RvbUdhdGVzW2dhdGUubmFtZV0pIHtcblx0XHRcdFx0XHRicmFrZXQgKz0gaW5kZW50ICsgXCIjIFVuc3VwcG9ydGVkIGdhdGUgXFxcIlwiICsgZ2F0ZS5uYW1lICsgXCJcXFwiLlxcblwiO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHZhciB0bXBQYXJhbUNvdW50ID0gMDtcblx0XHRcdFx0XHRpZihnYXRlUGFyYW1zKSB7XG5cdFx0XHRcdFx0XHR2YXIgcGFyYW1Db3VudCA9IHBhcmFtRGVmLmxlbmd0aDtcblx0XHRcdFx0XHRcdGlmKHBhcmFtQ291bnQpIHtcdFx0XG5cdFx0XHRcdFx0XHRcdGZvcih2YXIgcCA9IDA7IHAgPCBwYXJhbUNvdW50OyBwKyspIHtcblx0XHRcdFx0XHRcdFx0XHRpZih0bXBQYXJhbUNvdW50ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1TdHJpbmcgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1OYW1lID0gcGFyYW1EZWZbcF07XHRcblxuXHRcdFx0XHRcdFx0XHRcdC8vIC0tLVxuXHRcdFx0XHRcdFx0XHRcdC8vIHByZXBlbmQgJ25wJyB0byBtYXRoIGNvbnN0YW50c1xuXHRcdFx0XHRcdFx0XHRcdGlmKHR5cGVvZiBnYXRlUGFyYW1zW3BhcmFtTmFtZV0gIT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIG5vZGUgPSBtYXRoLnBhcnNlKGdhdGVQYXJhbXNbcGFyYW1OYW1lXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRwYXJhbVN0cmluZyArPSBub2RlLnRvU3RyaW5nKHsgaGFuZGxlcjogbWF0aFRvU3RyaW5nSGFuZGxlciB9KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0dG1wUGFyYW1Db3VudCsrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0YnJha2V0ICs9IGluZGVudCArIFwiY2lyY3VpdC5cIjtcblxuXHRcdFx0XHRcdGlmKGlzVW5pdGFyeSkge1xuXHRcdFx0XHRcdFx0YnJha2V0ICs9IFwidW5pdGFyeShtYXRyaXg9XCIgKyBnYXRlTmFtZSArIFwiX3VuaXRhcnkoXCIgKyBwYXJhbVN0cmluZyArIFwiKSwgdGFyZ2V0cz1bXCI7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGJyYWtldCArPSBnYXRlTmFtZSArIFwiKFwiO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcblx0XHRcdFx0XHR2YXIgYXJnQ291bnQgPSAwO1xuXHRcdFx0XHRcdGZvcih3ID0gMDsgdyA8IGdhdGUud2lyZXMubGVuZ3RoOyB3KyspIHtcblx0XHRcdFx0XHRcdGlmKGFyZ0NvdW50ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRicmFrZXQgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdFx0XHRcdFx0XHRicmFrZXQgKz0gcXViaXRMZXR0ZXIoZ2F0ZS53aXJlc1t3XSwgY2lyY3VpdC5udW1RdWJpdHMpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0YnJha2V0ICs9IGdhdGUud2lyZXNbd107XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRhcmdDb3VudCsrO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKGlzVW5pdGFyeSkge1xuXHRcdFx0XHRcdFx0YnJha2V0ICs9IFwiXVwiO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpZihwYXJhbVN0cmluZykge1xuXHRcdFx0XHRcdFx0XHRicmFrZXQgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0XHRicmFrZXQgKz0gcGFyYW1TdHJpbmc7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyYWtldCArPSBcIilcIjtcblx0XHRcdFx0XHRicmFrZXQgKz0gXCJcXG5cIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRcblx0aWYoZXhwb3J0QXNHYXRlTmFtZSl7XG5cdFx0YnJha2V0ICs9IGluZGVudCArIFwicmV0dXJuIGNpcmN1aXRcIjtcblx0fVxuXG5cdGJyYWtldCArPSBcIlxcblxcblwiO1xuXHRcblx0aWYoIWV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRicmFrZXQgKz0gaW5kZW50ICsgXCJsb2NhbF9zaW0gPSBMb2NhbFNpbXVsYXRvcigpXFxuXCI7XG5cdFx0YnJha2V0ICs9IGluZGVudCArIFwicmVzdWx0ID0gbG9jYWxfc2ltLnJ1bihjaXJjdWl0LCBzaG90cz1zaG90cykucmVzdWx0KClcXG5cIjtcblx0XHRicmFrZXQgKz0gaW5kZW50ICsgXCJjb3VudHMgPSBDb3VudGVyKHsgXFxcIlxcXCIuam9pbihyZXZlcnNlZChrKSk6IHYgZm9yIGssIHYgaW4gcmVzdWx0Lm1lYXN1cmVtZW50X2NvdW50cy5pdGVtcygpIH0pXFxuXCI7XG5cdFx0YnJha2V0ICs9IFwiXFxuXCI7XG5cblx0XHRpZihoeWJyaWQpIHtcblx0XHRcdGJyYWtldCArPSBpbmRlbnQgKyBcIiMgQ0FMQ1VMQVRFIENPU1QgSEVSRVxcblwiO1xuXG5cdFx0XHR2YXIgY29zdEZ1bmN0aW9uID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLmNvc3RGdW5jdGlvbiA/IHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLmNvc3RGdW5jdGlvbi5weXRob24gfHwgXCJcIiA6IFwiXCI7XG5cdFx0XHRpZighY29zdEZ1bmN0aW9uLnRyaW0oKSkge1xuXHRcdFx0XHRjb3N0RnVuY3Rpb24gPSBcImNvc3QgPSAwXCI7XG5cdFx0XHR9XG5cblx0XHRcdGJyYWtldCArPSBhZGp1c3RJZGVudGF0aW9uKGNvc3RGdW5jdGlvbiwgaW5kZW50KTtcblxuXHRcdFx0YnJha2V0ICs9IFwiXFxuXCJcblx0XHRcdGJyYWtldCArPSBpbmRlbnQgKyBcInJldHVybiBjb3N0XFxuXCI7XG5cblxuXHRcdFx0aW5kZW50RGVwdGgtLTtcblx0XHRcdGluZGVudCA9IGdldEluZGVudChpbmRlbnREZXB0aCk7XG5cdFx0XHRpZihoeWJyaWQpIHtcblx0XHRcdFx0dmFyIGdsb2JhbFBhcmFtTGlzdCA9IFwiXCI7XG5cdFx0XHRcdHRoaXMucGFyYW1zLm1hcChmdW5jdGlvbihnbG9iYWxQYXJhbU5hbWUsIGdsb2JhbFBhcmFtSW5kZXgpIHtcblx0XHRcdFx0XHRpZihnbG9iYWxQYXJhbUluZGV4ID4gMCkge1xuXHRcdFx0XHRcdFx0Z2xvYmFsUGFyYW1MaXN0ICs9IFwiLCBcIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Z2xvYmFsUGFyYW1MaXN0ICs9IGdsb2JhbFBhcmFtTmFtZTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0YnJha2V0ICs9IFwiXFxuXCI7XG5cdFx0XHRcdGJyYWtldCArPSBcInBhcmFtcyA9IG5wLmFycmF5KFtcIiArIGdsb2JhbFBhcmFtTGlzdCArIFwiXSlcXG5cIjtcblx0XHRcdFx0YnJha2V0ICs9IFwiXFxuXCI7XG5cdFx0XHRcdGJyYWtldCArPSBcIm1pbmltdW0gPSBtaW5pbWl6ZShvYmplY3RpdmVfZnVuY3Rpb24sIHBhcmFtcywgbWV0aG9kPVxcXCJcIiArICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMub3B0aW1pemVyID8gdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMub3B0aW1pemVyIDogXCJQb3dlbGxcIikgKyBcIlxcXCIsIHRvbD10b2xlcmFuY2UpXFxuXCI7XG5cdFx0XHRcdGJyYWtldCArPSBcInByaW50KFxcXCJjb3N0OlxcXCIsIG1pbmltdW0uZnVuLCBcXFwicGFyYW1zOlxcXCIsIG1pbmltdW0ueClcXG5cIjtcblx0XHRcdH1cblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRicmFrZXQgKz0gaW5kZW50ICsgXCJwcmludChjb3VudHMpXCI7XG5cdFx0fVxuXHR9XG5cblx0aWYoYXNKdXB5dGVyKSB7XG5cdFx0dmFyIG5vdGVib29rID0ge1xuXHRcdFx0bWV0YWRhdGE6IHtcblx0XHRcdFx0a2VybmVsc3BlYzoge1xuXHRcdFx0XHRcdGRpc3BsYXlfbmFtZTogXCJQeXRob24gM1wiLFxuXHRcdFx0XHRcdGxhbmd1YWdlOiBcInB5dGhvblwiLFxuXHRcdFx0XHRcdG5hbWU6IFwicHl0aG9uM1wiXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRuYmZvcm1hdDogNCxcblx0XHRcdG5iZm9ybWF0X21pbm9yOiAwLFxuXHRcdFx0Y2VsbHM6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGNlbGxfdHlwZTogXCJjb2RlXCIsXG5cdFx0XHRcdFx0c291cmNlOiBicmFrZXQsXG5cdFx0XHRcdFx0bWV0YWRhdGE6IHtcblxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0b3V0cHV0czogW10sXG5cdFx0XHRcdFx0ZXhlY3V0aW9uX2NvdW50OiBudWxsXG5cdFx0XHRcdH1cblx0XHRcdF1cblx0XHR9O1xuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShub3RlYm9vayk7XG5cdH1cblxuXHRyZXR1cm4gYnJha2V0O1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFRvUW9iaiA9IGZ1bmN0aW9uKG9wdGlvbnMsIGNpcmN1aXRSZXBsYWNlbWVudCkge1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR2YXIgY2lyY3VpdE5hbWUgPSBvcHRpb25zLmNpcmN1aXROYW1lO1xuXHR2YXIgZXhwZXJpbWVudE5hbWUgPSBvcHRpb25zLmV4cGVyaW1lbnROYW1lO1xuXHR2YXIgbnVtU2hvdHMgPSBvcHRpb25zLm51bVNob3RzO1xuXG5cdHZhciBzZWxmID0gdGhpcztcblx0XG5cdHZhciBnbG9iYWxQYXJhbXMgPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLnBhcmFtcyA/IHRoaXMub3B0aW9ucy5wYXJhbXMgOiB7fTtcblx0dmFyIGdsb2JhbFBhcmFtcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZ2xvYmFsUGFyYW1zKSk7XG5cdGZvcih2YXIgZ2xvYmFsUGFyYW1OYW1lIGluIGdsb2JhbFBhcmFtcykge1xuXHRcdGdsb2JhbFBhcmFtc1tnbG9iYWxQYXJhbU5hbWVdID0gbWF0aC5ldmFsdWF0ZShnbG9iYWxQYXJhbXNbZ2xvYmFsUGFyYW1OYW1lXSk7XG5cdH1cblxuXHRjaXJjdWl0TmFtZSA9IGNpcmN1aXROYW1lIHx8IFwiXCI7XG5cdGV4cGVyaW1lbnROYW1lID0gZXhwZXJpbWVudE5hbWUgfHwgXCJcIjtcblx0bnVtU2hvdHMgPSBudW1TaG90cyB8fCAxO1xuXG5cdC8vIC0tLVxuXHQvLyBkZWNvbXBvc2UgY2lyY3VpdFxuXHR2YXIgY2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRjaXJjdWl0LmxvYWQodGhpcy5zYXZlKHRydWUpKTtcblx0Ly8gLS0tXG5cblx0dmFyIGlkID0gdGhpcy5yYW5kb21TdHJpbmcoKTtcblx0dmFyIHBhcmVudFFvYmogPSB7cW9ial9pZDogXCJxb2JqX1wiICsgaWQsIHR5cGU6IFwiUUFTTVwiLCBzY2hlbWFfdmVyc2lvbjogXCIxLjBcIiwgZXhwZXJpbWVudHM6IFtdLCBoZWFkZXI6IHtkZXNjcmlwdGlvbjogY2lyY3VpdE5hbWV9LCBjb25maWc6e3Nob3RzOiBudW1TaG90cywgbWVtb3J5X3Nsb3RzOiAwfX07XG5cdHZhciBxb2JqID0ge2hlYWRlcjoge21lbW9yeV9zbG90czogMCwgbl9xdWJpdHM6IDAsIHFyZWdfc2l6ZXM6IFtdLCBxdWJpdF9sYWJlbHM6IFtdLCBjcmVnX3NpemVzOiBbXSwgY2xiaXRfbGFiZWxzOiBbXSwgbmFtZTogXCJjaXJjdWl0MFwifSwgY29uZmlnOiB7bl9xdWJpdHM6IDAsIG1lbW9yeV9zbG90czogMH0sIGluc3RydWN0aW9uczogW119O1xuXHR2YXIgY3JlZ05hbWVzID0gT2JqZWN0LmtleXMoY2lyY3VpdC5jcmVncyk7XG5cblx0dmFyIGludFRvRG91YmxlID0gZnVuY3Rpb24obm9kZSwgb3B0aW9ucykge1xuXHRcdGlmKE51bWJlci5pc0ludGVnZXIobm9kZSkpIHtcblx0XHRcdHJldHVybiBub2RlLnRvRml4ZWQoMSk7XG5cdFx0fVxuXHRcdHJldHVybiBub2RlO1xuXHR9O1xuXG5cdGlmKCFjaXJjdWl0UmVwbGFjZW1lbnQpe1xuXHRcdGlmKGV4cGVyaW1lbnROYW1lKXtcblx0XHRcdHFvYmouaGVhZGVyLmRlc2NyaXB0aW9uID0gZXhwZXJpbWVudE5hbWU7XG5cdFx0fVxuXHRcdGZvcihjcmVnTmFtZSBpbiBjaXJjdWl0LmNyZWdzKXtcblx0XHRcdHZhciBjcmVnTGVuZ3RoID0gY2lyY3VpdC5jcmVnc1tjcmVnTmFtZV0ubGVuZ3RoO1xuXHRcdFx0cGFyZW50UW9iai5jb25maWcubWVtb3J5X3Nsb3RzICs9IGNyZWdMZW5ndGg7XG5cdFx0XHRxb2JqLmhlYWRlci5jcmVnX3NpemVzLnB1c2goW2NyZWdOYW1lLCBjcmVnTGVuZ3RoXSk7XG5cdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgY3JlZ0xlbmd0aDsgaSsrKXtcblx0XHRcdFx0cW9iai5oZWFkZXIuY2xiaXRfbGFiZWxzLnB1c2goW2NyZWdOYW1lLCBpXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHFvYmouaGVhZGVyLm1lbW9yeV9zbG90cyA9IHBhcmVudFFvYmouY29uZmlnLm1lbW9yeV9zbG90cztcblx0XHRxb2JqLmhlYWRlci5uX3F1Yml0cyA9IGNpcmN1aXQubnVtUXViaXRzO1xuXHRcdHFvYmouY29uZmlnLm1lbW9yeV9zbG90cyA9IHBhcmVudFFvYmouY29uZmlnLm1lbW9yeV9zbG90cztcblx0XHRxb2JqLmNvbmZpZy5uX3F1Yml0cyA9IGNpcmN1aXQubnVtUXViaXRzO1xuXHRcdHFvYmouaGVhZGVyLnFyZWdfc2l6ZXMucHVzaChbXCJxXCIsIGNpcmN1aXQubnVtUXViaXRzXSk7XG5cdH1cblxuXHR2YXIgcmVnaXN0ZXJTbG90cyA9IHBhcmVudFFvYmouY29uZmlnLm1lbW9yeV9zbG90cztcblxuXHR2YXIgdXNlZEdhdGVzID0gY2lyY3VpdC51c2VkR2F0ZXMoKTtcblx0dXNlZEdhdGVzLm1hcChmdW5jdGlvbih1c2VkR2F0ZU5hbWUpe1xuXHRcdHZhciBiYXNpY0dhdGUgPSBjaXJjdWl0LmJhc2ljR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRpZighYmFzaWNHYXRlKXtcblx0XHRcdHZhciBjdXN0b21HYXRlID0gc2VsZi5jdXN0b21HYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0aWYoY3VzdG9tR2F0ZSl7XG5cdFx0XHRcdGN1c3RvbUNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0XHRcdFx0Y3VzdG9tQ2lyY3VpdC5sb2FkKGN1c3RvbUdhdGUpO1xuXHRcdFx0XHR2YXIgbmV3T3B0aW9ucyA9IHtcblx0XHRcdFx0XHRjaXJjdWl0TmFtZTogY2lyY3VpdE5hbWUsXG5cdFx0XHRcdFx0ZXhwZXJpbWVudE5hbWU6IGV4cGVyaW1lbnROYW1lLFxuXHRcdFx0XHRcdG51bVNob3RzOiBudW1TaG90c1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRwYXJlbnRRb2JqICs9IGN1c3RvbUNpcmN1aXQuZXhwb3J0VG9Rb2JqKG5ld09wdGlvbnMsIGZhbHNlKTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdHZhciBudW1Db2xzID0gY2lyY3VpdC5udW1Db2xzKCk7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspe1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBjaXJjdWl0Lm51bVF1Yml0czsgd2lyZSsrKXtcblx0XHRcdHZhciBnYXRlID0gY2lyY3VpdC5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdHZhciBxb2JqSW5zdHJ1Y3Rpb24gPSB7bmFtZSA6IFwiXCIsIHF1Yml0czogW119O1xuXHRcdFx0dmFyIHFvYmpSZXBsYWNlbWVudCA9IG51bGw7XG5cdFx0XHR2YXIgcW9iakVxdWl2YWxlbnQgPSBudWxsO1xuXHRcdFx0aWYoY29sdW1uID09IDApe1xuXHRcdFx0XHRxb2JqLmhlYWRlci5xdWJpdF9sYWJlbHMucHVzaChbXCJxXCIsIHdpcmVdKTtcblx0XHRcdH1cblxuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmNvbm5lY3RvciA9PSAwKXtcblx0XHRcdFx0dmFyIGdhdGVEZWYgPSBjaXJjdWl0LmdldEdhdGVEZWYoZ2F0ZS5uYW1lKTtcblx0XHRcdFx0aWYoZ2F0ZURlZil7XG5cdFx0XHRcdFx0aWYoZ2F0ZURlZi5leHBvcnRJbmZvKXtcblx0XHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mby5xYXNtICYmIGdhdGVEZWYuZXhwb3J0SW5mby5xYXNtLnJlcGxhY2VtZW50KXtcblx0XHRcdFx0XHRcdFx0cW9ialJlcGxhY2VtZW50ID0gZ2F0ZURlZi5leHBvcnRJbmZvLnFhc20ucmVwbGFjZW1lbnQ7XG5cdFx0XHRcdFx0XHRcdHFvYmpSZXBsYWNlbWVudC5tYXAoZnVuY3Rpb24ocmVwbGFjZW1lbnQpe1xuXHRcdFx0XHRcdFx0XHRcdHZhciByZXBsYWNlbWVudENpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0XHRcdFx0XHRcdFx0XHRyZXBsYWNlbWVudENpcmN1aXQuY3JlZ3MgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHNlbGYuY3JlZ3MpKTtcblxuXHRcdFx0XHRcdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMucGFyYW1zKXtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBwYXJhbXMgPSBPYmplY3Qua2V5cyhnYXRlLm9wdGlvbnMucGFyYW1zKTtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciByZXBsYWNlbWVudFBhcmFtcyA9IE9iamVjdC5rZXlzKHJlcGxhY2VtZW50LnBhcmFtcyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRwYXJhbXMubWFwKGZ1bmN0aW9uKHBhcmFtKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYocmVwbGFjZW1lbnRQYXJhbXMuaW5kZXhPZihwYXJhbSkgPiAtMSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVwbGFjZW1lbnQucGFyYW1zW3BhcmFtXSA9IGdhdGUub3B0aW9ucy5wYXJhbXNbcGFyYW1dO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHJlcGxhY2VtZW50Q29uZGl0aW9uID0gZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24gPyBnYXRlLm9wdGlvbnMuY29uZGl0aW9uIDoge307XG5cdFx0XHRcdFx0XHRcdFx0cmVwbGFjZW1lbnRDaXJjdWl0LmFkZEdhdGUocmVwbGFjZW1lbnQubmFtZSwgY29sdW1uLCBnYXRlLndpcmVzLCB7IHBhcmFtczogcmVwbGFjZW1lbnQucGFyYW1zLCBjb25kaXRpb246IHJlcGxhY2VtZW50Q29uZGl0aW9uIH0pO1xuXHRcdFx0XHRcdFx0XHRcdHZhciBuZXdPcHRpb25zID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y2lyY3VpdE5hbWU6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRleHBlcmltZW50TmFtZTogXCJcIixcblx0XHRcdFx0XHRcdFx0XHRcdG51bVNob3RzOiBcIlwiXG5cdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0XHRxb2JqLmluc3RydWN0aW9ucyA9IHFvYmouaW5zdHJ1Y3Rpb25zLmNvbmNhdChyZXBsYWNlbWVudENpcmN1aXQuZXhwb3J0VG9Rb2JqKG5ld09wdGlvbnMsIHRydWUpKTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9ZWxzZSBpZihnYXRlRGVmLmV4cG9ydEluZm8ucWFzbSAmJiBnYXRlRGVmLmV4cG9ydEluZm8ucWFzbS5lcXVpdmFsZW50KXtcblx0XHRcdFx0XHRcdFx0cW9iakVxdWl2YWxlbnQgPSBnYXRlRGVmLmV4cG9ydEluZm8ucWFzbS5lcXVpdmFsZW50O1xuXHRcdFx0XHRcdFx0XHRxb2JqRXF1aXZhbGVudC5tYXAoZnVuY3Rpb24oZXF1aXZhbGVudCl7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGVxdWl2YWxlbnRDaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdFx0XHRcdFx0XHRcdFx0ZXF1aXZhbGVudENpcmN1aXQuY3JlZ3MgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHNlbGYuY3JlZ3MpKTtcblxuXHRcdFx0XHRcdFx0XHRcdHZhciBnYXRlV2lyZXMgPSBlcXVpdmFsZW50LndpcmVzLmxlbmd0aCA+IDEgPyBnYXRlLndpcmVzIDogZ2F0ZS53aXJlc1tlcXVpdmFsZW50LndpcmVzWzBdXTtcblx0XHRcdFx0XHRcdFx0XHR2YXIgZXFQYXJhbXMgPSB7fTtcblx0XHRcdFx0XHRcdFx0XHRpZihlcXVpdmFsZW50LnBhcmFtcykge1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gLS0tXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBlcXVpdmFsZW50IGdhdGUgcGFyYW1zIGNhbiBjb250YWluIHZhcmlhYmxlIGZyb20gZ2F0ZSBwYXJhbXNcblx0XHRcdFx0XHRcdFx0XHRcdC8vIC0tLVxuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBFdmFsdWF0ZSBnYXRlJ3MgcGFyYW1zXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgZ2F0ZVBhcmFtcyA9IHt9O1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBnYXRlUGFyYW1OYW1lIGluIGdhdGUub3B0aW9ucy5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRnYXRlUGFyYW1zW2dhdGVQYXJhbU5hbWVdID0gbWF0aC5ldmFsdWF0ZShnYXRlLm9wdGlvbnMucGFyYW1zW2dhdGVQYXJhbU5hbWVdKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBFdmFsdWF0ZSBlcXVpdmFsZW50IGdhdGUncyBwYXJhbXNcblx0XHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgZXFQYXJhbU5hbWUgaW4gZXF1aXZhbGVudC5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZXFQYXJhbXNbZXFQYXJhbU5hbWVdID0gbWF0aC5ldmFsdWF0ZShlcXVpdmFsZW50LnBhcmFtc1tlcVBhcmFtTmFtZV0sIGdhdGVQYXJhbXMpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdHZhciBlcUNvbmRpdGlvbiA9IGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uID8gZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiA6IHt9O1xuXG5cdFx0XHRcdFx0XHRcdFx0ZXF1aXZhbGVudENpcmN1aXQuYWRkR2F0ZShlcXVpdmFsZW50Lm5hbWUsIGNvbHVtbiwgZ2F0ZVdpcmVzLCB7IHBhcmFtczogZXFQYXJhbXMsIGNvbmRpdGlvbjogZXFDb25kaXRpb24gfSk7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIG5ld09wdGlvbnMgPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjaXJjdWl0TmFtZTogXCJcIixcblx0XHRcdFx0XHRcdFx0XHRcdGV4cGVyaW1lbnROYW1lOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0bnVtU2hvdHM6IFwiXCJcblx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRcdHFvYmouaW5zdHJ1Y3Rpb25zID0gcW9iai5pbnN0cnVjdGlvbnMuY29uY2F0KGVxdWl2YWxlbnRDaXJjdWl0LmV4cG9ydFRvUW9iaihuZXdPcHRpb25zLCB0cnVlKSk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmKCFxb2JqUmVwbGFjZW1lbnQgJiYgIXFvYmpFcXVpdmFsZW50KXtcblx0XHRcdFx0XHR2YXIgZ2F0ZU5hbWUgPSBnYXRlLm5hbWU7XG5cdFx0XHRcdFx0dmFyIGdhdGVQYXJhbXMgPSBnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLnBhcmFtcyA/IGdhdGUub3B0aW9ucy5wYXJhbXMgOiB7fTtcblx0XHRcdFx0XHRpZih0aGlzLmJhc2ljR2F0ZXNbZ2F0ZU5hbWVdKXtcblx0XHRcdFx0XHRcdHN3aXRjaChnYXRlTmFtZSkge1xuXHRcdFx0XHRcdFx0XHRjYXNlIFwiaWRcIjoge1xuXHRcdFx0XHRcdFx0XHRcdGdhdGVOYW1lID0gXCJpZGVuXCI7XG5cdFx0XHRcdFx0XHRcdH07IGJyZWFrO1xuXHRcdFxuXHRcdFx0XHRcdFx0XHQvLyBjYXNlIFwicjJcIjoge1xuXHRcdFx0XHRcdFx0XHQvLyBcdGdhdGVOYW1lID0gXCJ1MVwiO1xuXHRcdFx0XHRcdFx0XHQvLyBcdGdhdGVQYXJhbXMgPSB7IGxhbWJkYTogXCJwaS8yXCIgfTtcblx0XHRcdFx0XHRcdFx0Ly8gfTsgYnJlYWs7XG5cdFx0XG5cdFx0XHRcdFx0XHRcdC8vIGNhc2UgXCJyNFwiOiB7XG5cdFx0XHRcdFx0XHRcdC8vIFx0Z2F0ZU5hbWUgPSBcInUxXCI7XG5cdFx0XHRcdFx0XHRcdC8vIFx0Z2F0ZVBhcmFtcyA9IHsgbGFtYmRhOiBcInBpLzRcIiB9O1xuXHRcdFx0XHRcdFx0XHQvLyB9OyBicmVhaztcblx0XHRcblx0XHRcdFx0XHRcdFx0Ly8gY2FzZSBcInI4XCI6IHtcblx0XHRcdFx0XHRcdFx0Ly8gXHRnYXRlTmFtZSA9IFwidTFcIjtcblx0XHRcdFx0XHRcdFx0Ly8gXHRnYXRlUGFyYW1zID0geyBsYW1iZGE6IFwicGkvOFwiIH07XG5cdFx0XHRcdFx0XHRcdC8vIH07IGJyZWFrO1xuXHRcdFxuXHRcdFx0XHRcdFx0XHQvLyBjYXNlIFwiY3IyXCI6IHtcblx0XHRcdFx0XHRcdFx0Ly8gXHRnYXRlTmFtZSA9IFwiY3UxXCI7XG5cdFx0XHRcdFx0XHRcdC8vIFx0Z2F0ZVBhcmFtcyA9IHsgbGFtYmRhOiBcInBpLzJcIiB9O1xuXHRcdFx0XHRcdFx0XHQvLyB9OyBicmVhaztcblx0XHRcblx0XHRcdFx0XHRcdFx0Ly8gY2FzZSBcImNyNFwiOiB7XG5cdFx0XHRcdFx0XHRcdC8vIFx0Z2F0ZU5hbWUgPSBcImN1MVwiO1xuXHRcdFx0XHRcdFx0XHQvLyBcdGdhdGVQYXJhbXMgPSB7IGxhbWJkYTogXCJwaS80XCIgfTtcblx0XHRcdFx0XHRcdFx0Ly8gfTsgYnJlYWs7XG5cdFx0XG5cdFx0XHRcdFx0XHRcdC8vIGNhc2UgXCJjcjhcIjoge1xuXHRcdFx0XHRcdFx0XHQvLyBcdGdhdGVOYW1lID0gXCJjdTFcIjtcblx0XHRcdFx0XHRcdFx0Ly8gXHRnYXRlUGFyYW1zID0geyBsYW1iZGE6IFwicGkvOFwiIH07XG5cdFx0XHRcdFx0XHRcdC8vIH07IGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0cW9iakluc3RydWN0aW9uLm5hbWUgPSBnYXRlTmFtZTtcdFx0XHRcdFxuXHRcdFx0XHRcdFx0cW9iakluc3RydWN0aW9uLnF1Yml0cyA9IGdhdGUud2lyZXM7XG5cblx0XHRcdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZyl7XG5cdFx0XHRcdFx0XHRcdHZhciBib29sZWFuSW5zdHJ1Y3Rpb24gPSB7bmFtZTogXCJcIiwgcmVnaXN0ZXI6IHJlZ2lzdGVyU2xvdHMsIHJlbGF0aW9uOiBcIj09XCIsIG1hc2s6IFwiXCIsIHZhbDogXCJcIn07XG5cdFx0XHRcdFx0XHRcdHZhciBjcmVnU2l6ZSA9IGNpcmN1aXQuY3JlZ3NbZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnXS5sZW5ndGg7XG5cdFx0XHRcdFx0XHRcdHZhciBudW1iZXJPZkJpdHNTaGlmdCA9IDA7XG5cdFx0XHRcdFx0XHRcdHZhciBtYXNrVmFsdWUgPSAwO1xuXHRcdFx0XHRcdFx0XHR2YXIgbWFzayA9IFwiXCI7XG5cdFx0XHRcdFx0XHRcdHZhciB2YWwgPSBcIlwiO1xuXHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0dmFyIGluZGV4T2ZSZWdpc3RlciA9IGNyZWdOYW1lcy5pbmRleE9mKGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZyk7XG5cdFx0XHRcdFx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBpbmRleE9mUmVnaXN0ZXI7IGkrKyl7XG5cdFx0XHRcdFx0XHRcdFx0bnVtYmVyT2ZCaXRzU2hpZnQgKz0gY2lyY3VpdC5jcmVnc1tjcmVnTmFtZXNbaV1dLmxlbmd0aDtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdHZhciB2YWx1ZSA9IChnYXRlLm9wdGlvbnMuY29uZGl0aW9uLnZhbHVlICUgTWF0aC5wb3coMiwgY3JlZ1NpemUpKSpNYXRoLnBvdygyLCBudW1iZXJPZkJpdHNTaGlmdCk7XG5cdFx0XHRcdFx0XHRcdHZhbCA9IFwiMHhcIiArIHZhbHVlLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xuXG5cdFx0XHRcdFx0XHRcdGlmKG51bWJlck9mQml0c1NoaWZ0ID4gMCl7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGV4cG9uZW50ID0gTWF0aC5wb3coMiwgbnVtYmVyT2ZCaXRzU2hpZnQpO1xuXHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgYml0ID0gMDsgYml0IDwgY3JlZ1NpemU7IGJpdCsrKXtcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0XHRtYXNrVmFsdWUgKz0gZXhwb25lbnQ7XG5cdFx0XHRcdFx0XHRcdFx0XHRleHBvbmVudCAqPSAyO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRtYXNrID0gXCIweFwiICsgbWFza1ZhbHVlLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xuXHRcdFx0XHRcdFx0XHR9ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0bWFzayA9IFwiMHhcIiArIChNYXRoLnBvdygyLCBjcmVnU2l6ZSkgLSAxKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRib29sZWFuSW5zdHJ1Y3Rpb24ubmFtZSA9IFwiYmZ1bmNcIjtcblx0XHRcdFx0XHRcdFx0cW9iakluc3RydWN0aW9uLmNvbmRpdGlvbmFsID0gcmVnaXN0ZXJTbG90cztcblx0XHRcdFx0XHRcdFx0Ym9vbGVhbkluc3RydWN0aW9uLm1hc2sgPSBtYXNrO1xuXHRcdFx0XHRcdFx0XHRib29sZWFuSW5zdHJ1Y3Rpb24udmFsID0gdmFsO1xuXHRcdFx0XHRcdFx0XHRxb2JqLmluc3RydWN0aW9ucy5wdXNoKGJvb2xlYW5JbnN0cnVjdGlvbik7XG5cdFx0XHRcdFx0XHRcdHJlZ2lzdGVyU2xvdHMgKz0gMTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYoZ2F0ZU5hbWUgPT0gXCJtZWFzdXJlXCIgJiYgZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jcmVnKXtcblx0XHRcdFx0XHRcdFx0cW9iakluc3RydWN0aW9uLm1lbW9yeSA9IFtdO1xuXHRcdFx0XHRcdFx0XHRxb2JqSW5zdHJ1Y3Rpb24ucmVnaXN0ZXIgPSBbXTtcblx0XHRcdFx0XHRcdFx0dmFyIHByZXZSZWdpc3Rlckxlbmd0aCA9IDA7XG5cdFx0XHRcdFx0XHRcdHZhciBpbmRleE9mUmVnaXN0ZXIgPSBjcmVnTmFtZXMuaW5kZXhPZihnYXRlLm9wdGlvbnMuY3JlZy5uYW1lKTtcblx0XHRcdFx0XHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGluZGV4T2ZSZWdpc3RlcjsgaSsrKXtcblx0XHRcdFx0XHRcdFx0XHRwcmV2UmVnaXN0ZXJMZW5ndGggKz0gY2lyY3VpdC5jcmVnc1tjcmVnTmFtZXNbaV1dLmxlbmd0aDtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR2YXIgY3JlZ0JpdCA9IHByZXZSZWdpc3Rlckxlbmd0aCArIGdhdGUub3B0aW9ucy5jcmVnLmJpdDtcblx0XHRcdFx0XHRcdFx0cW9iakluc3RydWN0aW9uLm1lbW9yeS5wdXNoKGNyZWdCaXQpO1xuXHRcdFx0XHRcdFx0XHRxb2JqSW5zdHJ1Y3Rpb24ucmVnaXN0ZXIucHVzaChjcmVnQml0KTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYoZ2F0ZVBhcmFtcyl7XG5cdFx0XHRcdFx0XHRcdGdhdGVEZWYgPSB0aGlzLmJhc2ljR2F0ZXNbZ2F0ZU5hbWVdO1xuXHRcdFx0XHRcdFx0XHRpZighZ2F0ZURlZikge1xuXHRcdFx0XHRcdFx0XHRcdGdhdGVEZWYgPSB0aGlzLmN1c3RvbUdhdGVzW2dhdGVOYW1lXTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRpZihnYXRlRGVmKXtcblx0XHRcdFx0XHRcdFx0XHRwYXJhbURlZiA9IGdhdGVEZWYucGFyYW1zIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRcdHBhcmFtQ291bnQgPSBwYXJhbURlZi5sZW5ndGg7XG5cdFx0XHRcdFx0XHRcdFx0aWYocGFyYW1Db3VudCl7XG5cdFx0XHRcdFx0XHRcdFx0XHRxb2JqSW5zdHJ1Y3Rpb24ucGFyYW1zID0gW107XG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIHAgPSAwOyBwIDwgcGFyYW1Db3VudDsgcCsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtTmFtZSA9IHBhcmFtRGVmW3BdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZihnYXRlUGFyYW1zW3BhcmFtTmFtZV0gfHwgZ2F0ZVBhcmFtc1twYXJhbU5hbWVdLnRvU3RyaW5nKCkpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBub2RlID0gbWF0aC5ldmFsdWF0ZShnYXRlUGFyYW1zW3BhcmFtTmFtZV0sIGdsb2JhbFBhcmFtcyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cW9iakluc3RydWN0aW9uLnBhcmFtcy5wdXNoKG5vZGUpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdHFvYmouaW5zdHJ1Y3Rpb25zLnB1c2gocW9iakluc3RydWN0aW9uKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0XG5cdGlmKGNpcmN1aXRSZXBsYWNlbWVudCl7XG5cdFx0cmV0dXJuIHFvYmouaW5zdHJ1Y3Rpb25zO1xuXHR9XG5cblx0aWYocW9iai5pbnN0cnVjdGlvbnMubGVuZ3RoKXtcblx0XHRwYXJlbnRRb2JqLmV4cGVyaW1lbnRzLnB1c2gocW9iaik7XG5cdH1cblxuXHRyZXR1cm4gcGFyZW50UW9iajtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmNsZWFyUGFydGl0aW9ucyA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLnBhcnRpdGlvbk1hcCA9IFtdO1xuXHR0aGlzLnBhcnRpdGlvbkNvdW50ID0gMDtcblx0dGhpcy5wYXJ0aXRpb25JbmZvID0ge307XG5cblx0dmFyIG51bUNvbHMgPSB0aGlzLm51bUNvbHMoKTtcblx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHR0aGlzLnBhcnRpdGlvbk1hcC5wdXNoKFtdKTtcblx0XHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0XHR0aGlzLnBhcnRpdGlvbk1hcFt3aXJlXS5wdXNoKC0xKTtcblx0XHR9XG5cdH1cbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5jcmVhdGVQYXJ0aXRpb25zID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMuY2xlYXJQYXJ0aXRpb25zKCk7XG5cblx0dmFyIHdpcmVQYXJ0aXRpb25zID0gW107XG5cdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLm51bVF1Yml0czsgaSsrKSB7XG5cdFx0d2lyZVBhcnRpdGlvbnMucHVzaCgtMSk7XG5cdH1cblxuXHR2YXIgcGFydGl0aW9uQ291bnRlciA9IDA7XG5cdHZhciBudW1Db2xzID0gdGhpcy5udW1Db2xzKCk7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSB0aGlzLmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLndpcmVzKSB7XG5cdFx0XHRcdHZhciBwcmV2UGFydGl0aW9ucyA9IFtdO1xuXHRcdFx0XHRmb3IodmFyIHcgPSAwOyB3IDwgZ2F0ZS53aXJlcy5sZW5ndGg7IHcrKykge1xuXHRcdFx0XHRcdHZhciB3ciA9IGdhdGUud2lyZXNbd107XG5cdFx0XHRcdFx0dmFyIHByZXZQYXJ0aXRpb24gPSB3aXJlUGFydGl0aW9uc1t3cl07XG5cdFx0XHRcdFx0aWYocHJldlBhcnRpdGlvbnMuaW5kZXhPZihwcmV2UGFydGl0aW9uKSA8IDApIHtcblx0XHRcdFx0XHRcdHByZXZQYXJ0aXRpb25zLnB1c2gocHJldlBhcnRpdGlvbik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHZhciBwYXJ0aXRpb24gPSAtMTtcblx0XHRcdFx0aWYocHJldlBhcnRpdGlvbnMubGVuZ3RoICE9IDEgfHwgcHJldlBhcnRpdGlvbnNbMF0gPT0gLTEpIHtcblx0XHRcdFx0XHRwYXJ0aXRpb24gPSBwYXJ0aXRpb25Db3VudGVyKys7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cGFydGl0aW9uID0gcHJldlBhcnRpdGlvbnNbMF07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IodmFyIHcgPSAwOyB3IDwgZ2F0ZS53aXJlcy5sZW5ndGg7IHcrKykge1xuXHRcdFx0XHRcdHZhciB3ciA9IGdhdGUud2lyZXNbd107XG5cblx0XHRcdFx0XHRvbGRQYXJ0aXRpb24gPSB3aXJlUGFydGl0aW9uc1t3cl07XG5cdFx0XHRcdFx0aWYob2xkUGFydGl0aW9uID09IC0xKSB7XG5cdFx0XHRcdFx0XHR3aXJlUGFydGl0aW9uc1t3cl0gPSBwYXJ0aXRpb247XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLm51bVF1Yml0czsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdGlmKHdpcmVQYXJ0aXRpb25zW2ldID09IG9sZFBhcnRpdGlvbikge1xuXHRcdFx0XHRcdFx0XHRcdHdpcmVQYXJ0aXRpb25zW2ldID0gcGFydGl0aW9uO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHRoaXMucGFydGl0aW9uTWFwW3dpcmVdW2NvbHVtbl0gPSB3aXJlUGFydGl0aW9uc1t3aXJlXTtcblx0XHR9XG5cdH1cblxuXHR0aGlzLnBhcnRpdGlvbkNvdW50ID0gcGFydGl0aW9uQ291bnRlcjtcblxuXHRmb3IodmFyIHBhcnRpdGlvbiA9IDA7IHBhcnRpdGlvbiA8IHBhcnRpdGlvbkNvdW50ZXI7IHBhcnRpdGlvbisrKSB7XG5cdFx0dGhpcy5wYXJ0aXRpb25JbmZvW3BhcnRpdGlvbl0gPSB0aGlzLnBhcnRpdGlvbkJvdW5kcyhwYXJ0aXRpb24pO1xuXHR9XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucHJpbnRQYXJ0aXRpb25zID0gZnVuY3Rpb24oKSB7XG5cdHZhciBudW1Db2xzID0gdGhpcy5udW1Db2xzKCk7XG5cdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0dmFyIHJvdyA9IFwiXCI7XG5cdFx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdFx0dmFyIHBhcnQgPSB0aGlzLnBhcnRpdGlvbk1hcFt3aXJlXVtjb2x1bW5dO1xuXHRcdFx0aWYocGFydCA9PSAtMSkgcGFydCA9IFwiIFwiO1xuXHRcdFx0aWYodGhpcy5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKSkge1xuXHRcdFx0XHRwYXJ0ID0gcGFydCArIFwiKlwiO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cGFydCA9IHBhcnQgKyBcIiBcIjtcblx0XHRcdH1cblx0XHRcdHdoaWxlKHBhcnQubGVuZ3RoIDwgNCkge1xuXHRcdFx0XHRwYXJ0ID0gXCIgXCIgKyBwYXJ0O1xuXHRcdFx0fVxuXHRcdFx0cm93ICs9IHBhcnQ7XG5cdFx0fVxuXHRcdHZhciB3ID0gd2lyZSArIFwiXCI7XG5cdFx0d2hpbGUody5sZW5ndGggPCAyKSB7XG5cdFx0XHR3ID0gXCIwXCIgKyB3O1xuXHRcdH1cblx0XHRyb3cgPSBcInFcIiArIHcgKyByb3c7XG5cdFx0Y29uc29sZS5sb2cocm93KTtcblx0fVxufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucGFydGl0aW9uQm91bmRzID0gZnVuY3Rpb24ocGFydGl0aW9uSW5kZXgpIHtcblx0dmFyIGJvdW5kcyA9IHtcblx0XHR3aXJlOiB7XG5cdFx0XHR0b3A6IC0xLFxuXHRcdFx0Ym90dG9tOiAtMVxuXHRcdH0sXG5cdFx0Y29sdW1uOiB7XG5cdFx0XHRsZWZ0OiAtMSxcblx0XHRcdHJpZ2h0OiAtMVxuXHRcdH0sXG5cdFx0d2lyZU1hcDoge1xuXG5cdFx0fSxcblx0XHRwYXJlbnRzOiB7XG5cblx0XHR9XG5cdH07XG5cblx0dmFyIGZvdW5kID0gZmFsc2U7XG5cdHZhciBudW1Db2xzID0gdGhpcy5udW1Db2xzKCk7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIHBhcnRpdGlvbiA9IHRoaXMucGFydGl0aW9uTWFwW3dpcmVdW2NvbHVtbl07XG5cdFx0XHRpZihwYXJ0aXRpb24gPT0gcGFydGl0aW9uSW5kZXgpIHtcblx0XHRcdFx0Zm91bmQgPSB0cnVlO1xuXG5cdFx0XHRcdGlmKGJvdW5kcy53aXJlLnRvcCA8IDApIHtcblx0XHRcdFx0XHRib3VuZHMud2lyZS50b3AgPSB3aXJlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmKGJvdW5kcy53aXJlLmJvdHRvbSA8IHdpcmUpIHtcblx0XHRcdFx0XHRib3VuZHMud2lyZS5ib3R0b20gPSB3aXJlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYoYm91bmRzLmNvbHVtbi5sZWZ0IDwgMCkge1xuXHRcdFx0XHRcdGJvdW5kcy5jb2x1bW4ubGVmdCA9IGNvbHVtbjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZihib3VuZHMuY29sdW1uLnJpZ2h0IDwgY29sdW1uKSB7XG5cdFx0XHRcdFx0Ym91bmRzLmNvbHVtbi5yaWdodCA9IGNvbHVtbjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmKCFmb3VuZCkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0dmFyIHBhcnRpdGlvbldpcmUgPSAwO1xuXHRmb3IodmFyIHdpcmUgPSBib3VuZHMud2lyZS50b3A7IHdpcmUgPD0gYm91bmRzLndpcmUuYm90dG9tOyB3aXJlKyspIHtcblx0XHR2YXIgcGFydGl0aW9uID0gdGhpcy5wYXJ0aXRpb25NYXBbd2lyZV1bYm91bmRzLmNvbHVtbi5sZWZ0XTtcblx0XHRpZihwYXJ0aXRpb24gPT0gcGFydGl0aW9uSW5kZXgpIHtcblx0XHRcdGJvdW5kcy53aXJlTWFwW3dpcmVdID0gcGFydGl0aW9uV2lyZTtcblxuXHRcdFx0cGFydGl0aW9uV2lyZSsrO1xuXHRcdH1cblx0fVxuXHRib3VuZHMubnVtUXViaXRzID0gcGFydGl0aW9uV2lyZTtcblxuXHRpZihib3VuZHMuY29sdW1uLmxlZnQgPiAwKSB7XG5cdFx0Zm9yKHZhciB3aXJlIGluIGJvdW5kcy53aXJlTWFwKSB7XG5cdFx0XHR2YXIgcGFyZW50UGFydGl0aW9uID0gdGhpcy5wYXJ0aXRpb25NYXBbd2lyZV1bYm91bmRzLmNvbHVtbi5sZWZ0IC0gMV07XG5cdFx0XHRpZihwYXJlbnRQYXJ0aXRpb24gPj0gMCkge1xuXHRcdFx0XHRpZighYm91bmRzLnBhcmVudHNbcGFyZW50UGFydGl0aW9uXSkge1xuXHRcdFx0XHRcdGJvdW5kcy5wYXJlbnRzW3BhcmVudFBhcnRpdGlvbl0gPSB7fTtcblx0XHRcdFx0XHRib3VuZHMucGFyZW50c1twYXJlbnRQYXJ0aXRpb25dLmxpbmtzID0gW107XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFyIHBhcmVudEJvdW5kcyA9IHRoaXMucGFydGl0aW9uSW5mb1twYXJlbnRQYXJ0aXRpb25dO1xuXHRcdFx0XHRmb3IodmFyIHB3aXJlIGluIHBhcmVudEJvdW5kcy53aXJlTWFwKSB7XG5cdFx0XHRcdFx0aWYocHdpcmUgPT0gd2lyZSkge1xuXHRcdFx0XHRcdFx0Ym91bmRzLnBhcmVudHNbcGFyZW50UGFydGl0aW9uXS5saW5rcy5wdXNoKGJvdW5kcy53aXJlTWFwW3dpcmVdKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gYm91bmRzO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucGFydGl0aW9uQ2lyY3VpdCA9IGZ1bmN0aW9uKHBhcnRpdGlvbkluZGV4KSB7XG5cdHZhciBib3VuZHMgPSB0aGlzLnBhcnRpdGlvbkluZm9bcGFydGl0aW9uSW5kZXhdO1xuXHRpZighYm91bmRzKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHR2YXIgY29tYmluZUxpc3QgPSBbXTtcblx0dmFyIHVzZWRXaXJlcyA9IFtdO1xuXHRmb3IodmFyIHBhcmVudFBhcnRpdGlvbiBpbiBib3VuZHMucGFyZW50cykge1xuXHRcdHZhciBjb21iaW5lSXRlbSA9IHt9O1xuXG5cdFx0Y29tYmluZUl0ZW0uY2lyY3VpdCA9IHRoaXMucGFydGl0aW9uQ2FjaGVbcGFyZW50UGFydGl0aW9uXTtcblx0XHRjb21iaW5lSXRlbS53aXJlcyA9IFtdO1xuXHRcdGNvbWJpbmVJdGVtLndpcmVzID0gYm91bmRzLnBhcmVudHNbcGFyZW50UGFydGl0aW9uXS5saW5rcztcblxuXHRcdHVzZWRXaXJlcyA9IHVzZWRXaXJlcy5jb25jYXQoY29tYmluZUl0ZW0ud2lyZXMpO1xuXG5cdFx0Y29tYmluZUxpc3QucHVzaChjb21iaW5lSXRlbSk7XG5cdH1cblxuXHR2YXIgY2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXG5cdC8vIGNvbWJpbmUgc3RhdGUgZnJvbSBwYXJlbnQgcGFydGl0aW9uc1xuXHRpZihjb21iaW5lTGlzdC5sZW5ndGggPiAwKSB7XG5cdFx0aWYoYm91bmRzLm51bVF1Yml0cyA+IHVzZWRXaXJlcy5sZW5ndGgpIHtcblx0XHRcdHZhciBjb21iaW5lSXRlbSA9IHt9O1xuXHRcdFx0Y29tYmluZUl0ZW0uY2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdChib3VuZHMubnVtUXViaXRzIC0gdXNlZFdpcmVzLmxlbmd0aCk7XG5cdFx0XHRjb21iaW5lSXRlbS53aXJlcyA9IFtdO1xuXHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGJvdW5kcy5udW1RdWJpdHM7IGkrKykge1xuXHRcdFx0XHRpZih1c2VkV2lyZXMuaW5kZXhPZihpKSA8IDApIHtcblx0XHRcdFx0XHRjb21iaW5lSXRlbS53aXJlcy5wdXNoKGkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRjb21iaW5lTGlzdC5wdXNoKGNvbWJpbmVJdGVtKTtcblx0XHR9XG5cdFx0Y2lyY3VpdC5zZXRDb21iaW5lZFN0YXRlKGNvbWJpbmVMaXN0KTtcblx0fVxuXG5cdC8vIGFkZCBnYXRlcyB0byB0aGUgY2lyY3VpdFxuXHRmb3IodmFyIGNvbHVtbiA9IGJvdW5kcy5jb2x1bW4ubGVmdDsgY29sdW1uIDw9IGJvdW5kcy5jb2x1bW4ucmlnaHQ7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gYm91bmRzLndpcmUudG9wOyB3aXJlIDw9IGJvdW5kcy53aXJlLmJvdHRvbTsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgcGFydGl0aW9uID0gdGhpcy5wYXJ0aXRpb25NYXBbd2lyZV1bY29sdW1uXTtcblx0XHRcdGlmKHBhcnRpdGlvbiA9PSBwYXJ0aXRpb25JbmRleCkge1xuXHRcdFx0XHR2YXIgZ2F0ZSA9IHRoaXMuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCkge1xuXHRcdFx0XHRcdHZhciBnYXRlV2lyZXMgPSBbXTtcblx0XHRcdFx0XHRmb3IodmFyIHcgPSAwOyB3IDwgZ2F0ZS53aXJlcy5sZW5ndGg7IHcrKykge1xuXHRcdFx0XHRcdFx0dmFyIHdyID0gZ2F0ZS53aXJlc1t3XTtcblx0XHRcdFx0XHRcdGdhdGVXaXJlcy5wdXNoKGJvdW5kcy53aXJlTWFwW3dyXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNpcmN1aXQuYWRkR2F0ZShnYXRlLm5hbWUsIGNvbHVtbiAtIGJvdW5kcy5jb2x1bW4ubGVmdCwgZ2F0ZVdpcmVzLCBnYXRlLm9wdGlvbnMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGNpcmN1aXQ7XG59O1xuXG4vL1xuLy8gT3B0aW9uczpcbi8vICAge1xuLy8gICAgIHN0cmljdE1vZGU6IGJvb2wsXG4vLyAgICAgcGFydGl0aW9uaW5nOiBib29sLFxuLy8gICAgIGNvbnRpbnVlOiBib29sLFxuLy8gICAgIGluaXRpYWxTdGF0ZTogQXJyYXlcbi8vICAgICBvbkdhdGU6IGZ1bmN0aW9uKGNvbHVtbiwgd2lyZSwgZ2F0ZUNvdW50ZXIpIHsgLi4uIH0sXG4vLyAgICAgb25Db2x1bW46IGZ1bmN0aW9uKGNvbHVtbikgeyAuLi4gfVxuLy8gICB9XG4vL1xuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uKGluaXRpYWxWYWx1ZXMsIG9wdGlvbnMpIHtcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0dGhpcy5tZWFzdXJlUmVzZXRzUXViaXQgPSAhIW9wdGlvbnMuc3RyaWN0TW9kZTtcblxuXHRpZighb3B0aW9ucy5jb250aW51ZSkge1xuXHRcdHRoaXMuaW5pdFN0YXRlKCk7XG5cdFx0dGhpcy5zdGF0cy5kdXJhdGlvbiA9IDA7XG5cdH1cblxuXHRpZihvcHRpb25zLmluaXRpYWxTdGF0ZSkge1xuXHRcdGlmKEFycmF5LmlzQXJyYXkob3B0aW9ucy5pbml0aWFsU3RhdGUpKSB7XG5cdFx0XHR0aGlzLnN0YXRlID0ge307XG5cdFx0XHRmb3IodmFyIHZhbEluZGV4ID0gMDsgdmFsSW5kZXggPCBvcHRpb25zLmluaXRpYWxTdGF0ZS5sZW5ndGg7IHZhbEluZGV4KyspIHtcblx0XHRcdFx0dmFyIHZhbCA9IG9wdGlvbnMuaW5pdGlhbFN0YXRlW3ZhbEluZGV4XTtcblxuXHRcdFx0XHRpZihBcnJheS5pc0FycmF5KHZhbCkgJiYgdmFsLmxlbmd0aCA9PSAyKSB7XG5cdFx0XHRcdFx0dmFsID0gbWF0aC5jb21wbGV4KHZhbFswXSwgdmFsWzFdKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmKHR5cGVvZiB2YWwgPT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRcdHZhbCA9IHRoaXMuZXZhbE1hdGhTdHJpbmcodmFsKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZih0eXBlb2YgdmFsID09IFwibnVtYmVyXCIpIHtcblx0XHRcdFx0XHR2YWwgPSBtYXRoLmNvbXBsZXgodmFsLCAwKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLnN0YXRlW3ZhbEluZGV4ICsgXCJcIl0gPSB2YWw7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc3RhdGUgPSBvcHRpb25zLmluaXRpYWxTdGF0ZTtcblx0XHR9XG5cblx0XHR0aGlzLnN0YXRlQml0cyA9IDA7XG5cdFx0Zm9yKHZhciBhaW5kZXggaW4gdGhpcy5zdGF0ZSkge1xuXHRcdFx0dGhpcy5zdGF0ZUJpdHMgfD0gcGFyc2VJbnQoYWluZGV4KTtcblx0XHR9XG5cdH1cblxuXHR0aGlzLnN0YXRzLnN0YXJ0ID0gbmV3IERhdGUoKTtcblxuXHR2YXIgZGVjb21wb3NlZCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRkZWNvbXBvc2VkLmxvYWQodGhpcy5zYXZlKHRydWUpKTtcblxuXHRpZihpbml0aWFsVmFsdWVzKSB7XG5cdFx0ZGVjb21wb3NlZC5pbnNlcnRDb2x1bW4oMCk7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IGRlY29tcG9zZWQubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdGlmKGluaXRpYWxWYWx1ZXNbd2lyZV0pIHtcblx0XHRcdFx0ZGVjb21wb3NlZC5hZGRHYXRlKFwieFwiLCAwLCB3aXJlLCB7fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0dmFyIHBhcnRpdGlvbmluZyA9IG9wdGlvbnMucGFydGl0aW9uaW5nO1xuXG5cdGlmKHBhcnRpdGlvbmluZykge1xuXHRcdGRlY29tcG9zZWQuY3JlYXRlUGFydGl0aW9ucygpO1xuLy9cdFx0ZGVjb21wb3NlZC5wcmludFBhcnRpdGlvbnMoKTtcblx0fVxuXG5cdHZhciBudW1Db2xzID0gZGVjb21wb3NlZC5udW1Db2xzKCk7XG5cdHZhciBnYXRlQ291bnRlciA9IDA7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgZGVjb21wb3NlZC5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSBkZWNvbXBvc2VkLmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmNvbm5lY3RvciA9PSAwKSB7XG5cdFx0XHRcdGdhdGVDb3VudGVyKys7XG5cblx0XHRcdFx0dmFyIGV4ZWN1dGVHYXRlID0gdHJ1ZTtcblx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24gJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnKSB7XG5cdFx0XHRcdFx0dmFyIGNyZWdWYWx1ZSA9IHRoaXMuZ2V0Q3JlZ1ZhbHVlKGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZyk7XG5cdFx0XHRcdFx0ZXhlY3V0ZUdhdGUgPSBjcmVnVmFsdWUgPT09IGdhdGUub3B0aW9ucy5jb25kaXRpb24udmFsdWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZihleGVjdXRlR2F0ZSkge1xuXG5cdFx0XHRcdFx0aWYocGFydGl0aW9uaW5nKSB7XG5cdFx0XHRcdFx0XHR2YXIgcGFydGl0aW9uID0gZGVjb21wb3NlZC5wYXJ0aXRpb25NYXBbd2lyZV1bY29sdW1uXTtcblx0XHRcdFx0XHRcdGlmKCFkZWNvbXBvc2VkLnBhcnRpdGlvbkNhY2hlW3BhcnRpdGlvbl0pIHtcblx0XHRcdFx0XHRcdFx0ZGVjb21wb3NlZC5wYXJ0aXRpb25DYWNoZVtwYXJ0aXRpb25dID0gZGVjb21wb3NlZC5wYXJ0aXRpb25DaXJjdWl0KHBhcnRpdGlvbik7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHZhciBwY2lyYyA9IGRlY29tcG9zZWQucGFydGl0aW9uQ2FjaGVbcGFydGl0aW9uXTtcblx0XHRcdFx0XHRcdHZhciBib3VuZHMgPSBkZWNvbXBvc2VkLnBhcnRpdGlvbkluZm9bcGFydGl0aW9uXTtcblxuXHRcdFx0XHRcdFx0dmFyIHBjb2x1bW4gPSBjb2x1bW4gLSBib3VuZHMuY29sdW1uLmxlZnQ7XG5cblx0XHRcdFx0XHRcdHZhciBwZ2F0ZSA9IHBjaXJjLmdldEdhdGVBdChwY29sdW1uLCBib3VuZHMud2lyZU1hcFt3aXJlXSk7XG5cblx0XHRcdFx0XHRcdHBjaXJjLmNyZWdzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmNyZWdzKSk7XG5cdFx0XHRcdFx0XHRwY2lyYy5hcHBseUdhdGUocGdhdGUubmFtZSwgcGNvbHVtbiwgcGdhdGUud2lyZXMsIHBnYXRlLm9wdGlvbnMpO1xuXHRcdFx0XHRcdFx0dGhpcy5jcmVncyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocGNpcmMuY3JlZ3MpKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5hcHBseUdhdGUoZ2F0ZS5uYW1lLCBjb2x1bW4sIGdhdGUud2lyZXMsIGdhdGUub3B0aW9ucyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gY2FsbGJhY2sgYWZ0ZXIgZ2F0ZSBpcyBmaW5pc2hlZFxuXHRcdFx0XHRpZihvcHRpb25zICYmIG9wdGlvbnMub25HYXRlKSB7XG5cdFx0XHRcdFx0b3B0aW9ucy5vbkdhdGUoY29sdW1uLCB3aXJlLCBnYXRlQ291bnRlcik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gY2FsbGJhY2sgYWZ0ZXIgY29sdW1uIGlzIGZpbmlzaGVkXG5cdFx0aWYob3B0aW9ucyAmJiBvcHRpb25zLm9uQ29sdW1uKSB7XG5cdFx0XHRvcHRpb25zLm9uQ29sdW1uKGNvbHVtbik7XG5cdFx0fVxuXHR9XG5cblx0aWYocGFydGl0aW9uaW5nKSB7XG5cdFx0dmFyIGxhc3RQYXJ0aXRpb25zID0gW107XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IGRlY29tcG9zZWQubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBwYXJ0aXRpb24gPSBkZWNvbXBvc2VkLnBhcnRpdGlvbk1hcFt3aXJlXVtudW1Db2xzIC0gMV07XG5cdFx0XHRpZihwYXJ0aXRpb24gPj0gMCAmJiBsYXN0UGFydGl0aW9ucy5pbmRleE9mKHBhcnRpdGlvbikgPCAwKSB7XG5cdFx0XHRcdGxhc3RQYXJ0aXRpb25zLnB1c2gocGFydGl0aW9uKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYobGFzdFBhcnRpdGlvbnMubGVuZ3RoKSB7XG5cdFx0XHRpZihsYXN0UGFydGl0aW9ucy5sZW5ndGggPT0gMSkge1xuXHRcdFx0XHR0aGlzLnN0YXRlID0gZGVjb21wb3NlZC5wYXJ0aXRpb25DYWNoZVtsYXN0UGFydGl0aW9uc1swXV0uc3RhdGU7XG5cdFx0XHRcdHRoaXMuc3RhdGVCaXRzID0gZGVjb21wb3NlZC5wYXJ0aXRpb25DYWNoZVtsYXN0UGFydGl0aW9uc1swXV0uc3RhdGVCaXRzO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dmFyIHN0YXJ0VGltZSA9IHRoaXMuc3RhdHMuc3RhcnQ7XG5cdFx0XHRcdHZhciBjb21iaW5lTGlzdCA9IFtdO1xuXHRcdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgbGFzdFBhcnRpdGlvbnMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHR2YXIgbGFzdFBhcnRpdGlvbiA9IGxhc3RQYXJ0aXRpb25zW2ldO1xuXG5cdFx0XHRcdFx0dmFyIGNvbWJpbmVJdGVtID0ge307XG5cblx0XHRcdFx0XHRjb21iaW5lSXRlbS5jaXJjdWl0ID0gZGVjb21wb3NlZC5wYXJ0aXRpb25DYWNoZVtsYXN0UGFydGl0aW9uXTtcblx0XHRcdFx0XHRjb21iaW5lSXRlbS53aXJlcyA9IFtdO1xuXG5cdFx0XHRcdFx0dmFyIGxhc3RCb3VuZHMgPSBkZWNvbXBvc2VkLnBhcnRpdGlvbkluZm9bbGFzdFBhcnRpdGlvbl07XG5cdFx0XHRcdFx0Zm9yKHZhciB3aXJlIGluIGxhc3RCb3VuZHMud2lyZU1hcCkge1xuXHRcdFx0XHRcdFx0Y29tYmluZUl0ZW0ud2lyZXMucHVzaChwYXJzZUludCh3aXJlKSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y29tYmluZUxpc3QucHVzaChjb21iaW5lSXRlbSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5zZXRDb21iaW5lZFN0YXRlKGNvbWJpbmVMaXN0KTtcblx0XHRcdFx0dGhpcy5zdGF0cy5zdGFydCA9IHN0YXJ0VGltZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHR0aGlzLnN0YXRzLmVuZCA9IG5ldyBEYXRlKCk7XG5cdHRoaXMuc3RhdHMuZHVyYXRpb24gKz0gdGhpcy5zdGF0cy5lbmQgLSB0aGlzLnN0YXRzLnN0YXJ0O1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmNvbnRpbnVlID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMucnVuKG51bGwsIHtcblx0XHRjb250aW51ZTogdHJ1ZVxuXHR9KTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5zdGF0ZUFzQXJyYXkgPSBmdW5jdGlvbihvbmx5UG9zc2libGUsIHNraXBJdGVtcywgYmxvY2tTaXplLCByZXZlcnNlQml0cykge1xuXHR2YXIgc3RhdGUgPSBbXTtcblxuXHR2YXIgbnVtQW1wbGl0dWRlcyA9IHRoaXMubnVtQW1wbGl0dWRlcygpO1xuXG5cdHNraXBJdGVtcyA9IHNraXBJdGVtcyB8fCAwO1xuXHRibG9ja1NpemUgPSBibG9ja1NpemUgfHwgKG9ubHlQb3NzaWJsZSA/IHRoaXMubnVtQW1wbGl0dWRlcyhvbmx5UG9zc2libGUpIDogbnVtQW1wbGl0dWRlcyk7XG5cblx0dmFyIGNvdW50ID0gMDtcblx0Zm9yKHZhciBpID0gMDsgaSA8IG51bUFtcGxpdHVkZXM7IGkrKykge1xuXHRcdHZhciBhbXBJbmRleCA9IGk7XG5cdFx0aWYocmV2ZXJzZUJpdHMpIHtcblx0XHRcdGFtcEluZGV4ID0gcmV2ZXJzZUJpdHdpc2UoaSwgdGhpcy5udW1RdWJpdHMpO1xuXHRcdH1cblxuXHRcdHZhciBhbXBsaXR1ZGUgPSBtYXRoLnJvdW5kKHRoaXMuc3RhdGVbYW1wSW5kZXhdIHx8IG1hdGguY29tcGxleCgwLCAwKSwgMTQpO1xuXG5cdFx0aWYoIW9ubHlQb3NzaWJsZSB8fCAoYW1wbGl0dWRlLnJlIHx8IGFtcGxpdHVkZS5pbSkpIHtcblx0XHRcdGlmKGNvdW50ID49IHNraXBJdGVtcykge1xuXHRcdFx0XHR2YXIgaW5kZXhCaW5TdHIgPSBpLnRvU3RyaW5nKDIpO1xuXHRcdFx0XHR3aGlsZShpbmRleEJpblN0ci5sZW5ndGggPCB0aGlzLm51bVF1Yml0cykge1xuXHRcdFx0XHRcdGluZGV4QmluU3RyID0gXCIwXCIgKyBpbmRleEJpblN0cjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhciBhbXBsaXR1ZGVTdHIgPSB0aGlzLmZvcm1hdENvbXBsZXgoYW1wbGl0dWRlLCB7IGZpeGVkV2lkdGg6IHRydWUsIGRlY2ltYWxQbGFjZXM6IDgsIGlvdGFDaGFyOiBcImlcIiB9KTtcblx0XHRcdFx0dmFyIG1hZ25pdHVkZSA9IG1hdGgucG93KG1hdGguYWJzKGFtcGxpdHVkZSksIDIpO1xuXHRcdFx0XHR2YXIgY2hhbmNlID0gbWFnbml0dWRlICogMTAwO1xuXHRcdFx0XHR2YXIgY2hhbmNlU3RyID0gY2hhbmNlLnRvRml4ZWQoNSk7XG5cdFx0XHRcdHZhciBwaGFzZSA9IG1hdGguYXJnKGFtcGxpdHVkZSk7XG5cdFx0XHRcdHZhciBwaGFzZVN0ciA9IHBoYXNlLnRvRml4ZWQoNSk7XG5cblx0XHRcdFx0c3RhdGUucHVzaCh7XG5cdFx0XHRcdFx0aW5kZXg6IGksXG5cdFx0XHRcdFx0aW5kZXhCaW5TdHI6IGluZGV4QmluU3RyLFxuXHRcdFx0XHRcdGFtcGxpdHVkZTogYW1wbGl0dWRlLFxuXHRcdFx0XHRcdGFtcGxpdHVkZVN0cjogYW1wbGl0dWRlU3RyLFxuXHRcdFx0XHRcdG1hZ25pdHVkZTogbWFnbml0dWRlLFxuXHRcdFx0XHRcdGNoYW5jZTogY2hhbmNlLFxuXHRcdFx0XHRcdGNoYW5jZVN0cjogY2hhbmNlU3RyLFxuXHRcdFx0XHRcdHBoYXNlOiBwaGFzZSxcblx0XHRcdFx0XHRwaGFzZVN0cjogcGhhc2VTdHJcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdGNvdW50Kys7XG5cblx0XHRcdGlmKHN0YXRlLmxlbmd0aCA9PSBibG9ja1NpemUpIHtcblx0XHRcdFx0cmV0dXJuIHN0YXRlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBzdGF0ZTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5zdGF0ZUFzU2ltcGxlQXJyYXkgPSBmdW5jdGlvbihyZXZlcnNlQml0cykge1xuXG5cdHZhciBudW1BbXBsaXR1ZGVzID0gdGhpcy5udW1BbXBsaXR1ZGVzKCk7XG5cdGlmKCF0aGlzLnN0YXRlKSB7XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cblx0dmFyIHN0YXRlID0gW107XG5cdGZvcih2YXIgaSA9IDA7IGkgPCBudW1BbXBsaXR1ZGVzOyBpKyspIHtcblx0XHR2YXIgYW1wSW5kZXggPSBpO1xuXHRcdGlmKHJldmVyc2VCaXRzKSB7XG5cdFx0XHRhbXBJbmRleCA9IHJldmVyc2VCaXR3aXNlKGksIHRoaXMubnVtUXViaXRzKTtcblx0XHR9XG5cblx0XHRzdGF0ZS5wdXNoKG1hdGgucm91bmQodGhpcy5zdGF0ZVthbXBJbmRleF0gfHwgbWF0aC5jb21wbGV4KDAsIDApLCAxNCkpO1xuXHR9XG5cdHJldHVybiBzdGF0ZTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnN0YXRlQXNTdHJpbmcgPSBmdW5jdGlvbihvbmx5UG9zc2libGUpIHtcblxuXHR2YXIgbnVtQW1wbGl0dWRlcyA9IHRoaXMubnVtQW1wbGl0dWRlcygpO1xuXHRpZighdGhpcy5zdGF0ZSkge1xuXHRcdHJldHVybiBcIkVycm9yOiBjaXJjdWl0IGlzIG5vdCBpbml0aWFsaXplZC4gUGxlYXNlIGNhbGwgaW5pdFN0YXRlKCkgb3IgcnVuKCkgbWV0aG9kLlwiO1xuXHR9XG5cblx0dmFyIHMgPSBcIlwiO1xuXHR2YXIgY291bnQgPSAwO1xuXHRmb3IodmFyIGkgPSAwOyBpIDwgbnVtQW1wbGl0dWRlczsgaSsrKSB7XG5cdFx0dmFyIHN0YXRlID0gbWF0aC5yb3VuZCh0aGlzLnN0YXRlW2ldIHx8IG1hdGguY29tcGxleCgwLCAwKSwgMTQpO1xuXHRcdGlmKCFvbmx5UG9zc2libGUgfHwgKHN0YXRlLnJlIHx8IHN0YXRlLmltKSkge1xuXHRcdFx0dmFyIG0gPSBtYXRoLnBvdyhtYXRoLmFicyhzdGF0ZSksIDIpICogMTAwO1xuXG5cdFx0XHQvLyBiaW5hcnkgc3RyaW5nXG5cdFx0XHR2YXIgYmluID0gaS50b1N0cmluZygyKTtcblx0XHRcdHdoaWxlKGJpbi5sZW5ndGggPCB0aGlzLm51bVF1Yml0cykge1xuXHRcdFx0XHRiaW4gPSBcIjBcIiArIGJpbjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gcmlnaHQgYWxpZ25lZCBwZXJjZW50XG5cdFx0XHR2YXIgcGVyYyA9IG0udG9GaXhlZCg1KTtcblx0XHRcdHdoaWxlKHBlcmMubGVuZ3RoIDwgOSkge1xuXHRcdFx0XHRwZXJjID0gXCIgXCIgKyBwZXJjO1xuXHRcdFx0fVxuXG5cdFx0XHRzICs9IHRoaXMuZm9ybWF0Q29tcGxleChzdGF0ZSwgeyBmaXhlZFdpZHRoOiB0cnVlLCBkZWNpbWFsUGxhY2VzOiA4LCBpb3RhQ2hhcjogXCJpXCIgfSkgKyBcInxcIiArIGJpbiArIFwiPlxcdFwiICsgcGVyYyArIFwiJVxcblwiO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gcztcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5wcmludCA9IGZ1bmN0aW9uKG9ubHlQb3NzaWJsZSkge1xuXHRjb25zb2xlLmxvZyh0aGlzLnN0YXRlQXNTdHJpbmcob25seVBvc3NpYmxlKSk7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZ290Q2xhc3NpY2FsQ29udHJvbCA9IGZ1bmN0aW9uKCkge1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IHRoaXMubnVtQ29scygpOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IHRoaXMuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24gJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmdvdE1lYXN1cmVtZW50ID0gZnVuY3Rpb24oKSB7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgdGhpcy5udW1Db2xzKCk7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gdGhpcy5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCkge1xuXHRcdFx0XHRpZihnYXRlLm5hbWUgPT0gXCJtZWFzdXJlXCIpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuY3JlZ0NvdW50ID0gZnVuY3Rpb24oKSB7XG5cdHZhciBjcmVnQ291bnQgPSAwO1xuXHRmb3IodmFyIGNyZWdOYW1lIGluIHRoaXMuY3JlZ3MpIHtcblx0XHRjcmVnQ291bnQrKztcblx0fVxuXHRyZXR1cm4gY3JlZ0NvdW50O1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmdldENyZWdzID0gZnVuY3Rpb24oKSB7XG5cdHZhciByZXMgPSB7fTtcblx0Zm9yKHZhciBjcmVnIGluIHRoaXMuY3JlZ3MpIHtcblx0XHRyZXNbY3JlZ10gPSB0aGlzLmdldENyZWdWYWx1ZShjcmVnKTtcblx0fVxuXHRyZXR1cm4gcmVzO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmNyZWdzQXNTdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0dmFyIHMgPSBcInJlZ1xcdGJpblxcdGRlY1xcblwiO1xuXHRmb3IodmFyIGNyZWcgaW4gdGhpcy5jcmVncykge1xuXHRcdHZhciB2YWx1ZSA9IHRoaXMuZ2V0Q3JlZ1ZhbHVlKGNyZWcpO1xuXG5cdFx0Ly8gYmluYXJ5IHN0cmluZ1xuXHRcdHZhciBiaW4gPSB2YWx1ZS50b1N0cmluZygyKTtcblx0XHR2YXIgbGVuID0gdGhpcy5jcmVnc1tjcmVnXSA/IHRoaXMuY3JlZ3NbY3JlZ10ubGVuZ3RoIHx8IDEgOiAxO1xuXHRcdHdoaWxlKGJpbi5sZW5ndGggPCBsZW4pIHtcblx0XHRcdGJpbiA9IFwiMFwiICsgYmluO1xuXHRcdH1cblxuXHRcdHMgKz0gY3JlZyArIFwiXFx0XCIgKyBiaW4gKyBcIlxcdFwiICsgdmFsdWUgKyBcIlxcblwiO1xuXHR9XG5cdHJldHVybiBzO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuY3JlYXRlQ3JlZyA9IGZ1bmN0aW9uKGNyZWcsIGxlbikge1xuXHR0aGlzLmNyZWdzW2NyZWddID0gW107XG5cblx0Ly8gZXh0ZW5kIHJlZ2lzdGVyXG5cdHdoaWxlKHRoaXMuY3JlZ3NbY3JlZ10ubGVuZ3RoIDwgKGxlbiB8fCAxKSkge1xuXHRcdHRoaXMuY3JlZ3NbY3JlZ10ucHVzaCgwKTtcblx0fVxufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnJlbW92ZUNyZWcgPSBmdW5jdGlvbihjcmVnKSB7XG5cdC8vIHJlbW92ZSByZWZlcmVuY2UgdG8gY3JlZ1xuXHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHR2YXIgcmVtb3ZlR2F0ZXMgPSBbXTtcblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IHRoaXMuZ2F0ZXNbd2lyZV1bY29sdW1uXTtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5vcHRpb25zKSB7XG5cdFx0XHRcdC8vIGdhdGUgd3JpdGluZyB0byBjcmVnXG5cdFx0XHRcdGlmKGdhdGUub3B0aW9ucy5jcmVnICYmIGdhdGUub3B0aW9ucy5jcmVnLm5hbWUgJiYgZ2F0ZS5vcHRpb25zLmNyZWcubmFtZSA9PSBjcmVnKSB7XG5cdFx0XHRcdFx0aWYocmVtb3ZlR2F0ZXMuaW5kZXhPZihnYXRlLmlkKSA8IDApIHtcblx0XHRcdFx0XHRcdHJlbW92ZUdhdGVzLnB1c2goZ2F0ZS5pZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gZ2F0ZSBjb250cm9sbGVkIGJ5IGNyZWdcblx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcgJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnID09IGNyZWcpIHtcblx0XHRcdFx0XHRkZWxldGUgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIGRlbGV0ZSByZWdpc3RlclxuXHRkZWxldGUgdGhpcy5jcmVnc1tjcmVnXTtcblxuXHRmb3IodmFyIGkgPSAwOyBpIDwgcmVtb3ZlR2F0ZXMubGVuZ3RoOyBpKyspIHtcblx0XHR0aGlzLnJlbW92ZUdhdGUocmVtb3ZlR2F0ZXNbaV0pO1xuXHR9XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucmVuYW1lQ3JlZyA9IGZ1bmN0aW9uKG9sZE5hbWUsIG5ld05hbWUpIHtcblx0Ly8gcmVuYW1lIHJlZmVyZW5jZVxuXHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gdGhpcy5nYXRlc1t3aXJlXVtjb2x1bW5dO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLm9wdGlvbnMpIHtcblx0XHRcdFx0Ly8gZ2F0ZSB3cml0aW5nIHRvIGNyZWdcblx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zLmNyZWcgJiYgZ2F0ZS5vcHRpb25zLmNyZWcubmFtZSAmJiBnYXRlLm9wdGlvbnMuY3JlZy5uYW1lID09IG9sZE5hbWUpIHtcblx0XHRcdFx0XHRnYXRlLm9wdGlvbnMuY3JlZy5uYW1lID0gbmV3TmFtZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIGdhdGUgY29udHJvbGxlZCBieSBjcmVnXG5cdFx0XHRcdGlmKGdhdGUub3B0aW9ucy5jb25kaXRpb24gJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZyA9PSBvbGROYW1lKSB7XG5cdFx0XHRcdFx0Z2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnID0gbmV3TmFtZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIHJlbmFtZSByZWdpc3RlclxuXHR0aGlzLmNyZWdzW25ld05hbWVdID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmNyZWdzW29sZE5hbWVdKSk7XG5cdGRlbGV0ZSB0aGlzLmNyZWdzW29sZE5hbWVdO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLm1pbkNyZWdTaXplID0gZnVuY3Rpb24oY3JlZykge1xuXHR2YXIgbGFyZ2VzdEJpdCA9IDA7XG5cdHZhciBudW1Db2xzID0gdGhpcy5udW1Db2xzKCk7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSB0aGlzLmdhdGVzW3dpcmVdW2NvbHVtbl07XG5cdFx0XHRpZihnYXRlICYmIGdhdGUub3B0aW9ucykge1xuXHRcdFx0XHQvLyBnYXRlIHdyaXRpbmcgdG8gY3JlZ1xuXHRcdFx0XHRpZihnYXRlLm9wdGlvbnMuY3JlZyAmJiBnYXRlLm9wdGlvbnMuY3JlZy5uYW1lICYmIGdhdGUub3B0aW9ucy5jcmVnLm5hbWUgPT0gY3JlZykge1xuXHRcdFx0XHRcdHZhciB0YXJnZXRCaXQgPSBwYXJzZUludChnYXRlLm9wdGlvbnMuY3JlZy5iaXQgfHwgMCk7XG5cdFx0XHRcdFx0aWYoaXNOYU4odGFyZ2V0Qml0KSkge1xuXHRcdFx0XHRcdFx0dGFyZ2V0Qml0ID0gMDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYodGFyZ2V0Qml0ID4gbGFyZ2VzdEJpdCkge1xuXHRcdFx0XHRcdFx0bGFyZ2VzdEJpdCA9IHRhcmdldEJpdDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBnYXRlIGNvbnRyb2xsZWQgYnkgY3JlZ1xuXHRcdFx0XHRpZihnYXRlLm9wdGlvbnMuY29uZGl0aW9uICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcgPT0gY3JlZykge1xuXHRcdFx0XHRcdHZhciBsYiA9IE1hdGguZmxvb3IoTWF0aC5sb2cyKGdhdGUub3B0aW9ucy5jb25kaXRpb24udmFsdWUpKTtcblx0XHRcdFx0XHRpZihsYiA+IGxhcmdlc3RCaXQpIHtcblx0XHRcdFx0XHRcdGxhcmdlc3RCaXQgPSBsYjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbGFyZ2VzdEJpdCArIDE7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucmVzaXplQ3JlZyA9IGZ1bmN0aW9uKGNyZWcsIHNpemUpIHtcblx0aWYoc2l6ZSA8IHRoaXMubWluQ3JlZ1NpemUoY3JlZykpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR3aGlsZSh0aGlzLmNyZWdzW2NyZWddLmxlbmd0aCA8IHNpemUpIHtcblx0XHR0aGlzLmNyZWdzW2NyZWddLnB1c2goMCk7XG5cdH1cblxuXHR3aGlsZSh0aGlzLmNyZWdzW2NyZWddLmxlbmd0aCA+IHNpemUpIHtcblx0XHR0aGlzLmNyZWdzW2NyZWddLnBvcCgpO1xuXHR9XG5cbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5nZXRDcmVnID0gZnVuY3Rpb24oY3JlZykge1xuXHRyZXR1cm4gdGhpcy5jcmVnc1tjcmVnXTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5zZXRDcmVnQml0ID0gZnVuY3Rpb24oY3JlZywgY2JpdCwgdmFsdWUpIHtcblx0Ly8gc2VlIGlmIGNiaXQgaXMgaW50ZWdlclxuXHR2YXIgYml0ID0gcGFyc2VJbnQoY2JpdCk7XG5cdGlmKGlzTmFOKGJpdCkpIHtcblx0XHR0aHJvdyBcIkVycm9yOiBpbnZhbGlkIFxcXCJjYml0XFxcIiBhcmd1bWVudCB0byBcXFwic2V0Q3JlZ0JpdFxcXCIgbWV0aG9kOiBleHBlY3RlZCBcXFwiaW50ZWdlclxcXCIgZ290IFxcXCJcIiArIHR5cGVvZiBjYml0ICsgXCJcXFwiLlwiO1xuXHR9XG5cblx0Ly8gY3JlYXRlIHJlZ2lzdGVyIGlmIGRvZXMgbm90IGV4aXN0XG5cdGlmKCF0aGlzLmNyZWdzW2NyZWddKSB7XG5cdFx0dGhpcy5jcmVnc1tjcmVnXSA9IFtdO1xuXHR9XG5cblx0Ly8gZXh0ZW5kIHJlZ2lzdGVyIGlmIG5lZWRlZFxuXHR3aGlsZShiaXQgPj0gdGhpcy5jcmVnc1tjcmVnXS5sZW5ndGgpIHtcblx0XHR0aGlzLmNyZWdzW2NyZWddLnB1c2goMCk7XG5cdH1cblxuXHQvLyBzZXQgYml0XG5cdHRoaXMuY3JlZ3NbY3JlZ11bYml0XSA9IHZhbHVlID8gMSA6IDA7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZ2V0Q3JlZ0JpdCA9IGZ1bmN0aW9uKGNyZWcsIGNiaXQpIHtcblx0aWYoIXRoaXMuY3JlZ3NbY3JlZ10pIHtcblx0XHR0aHJvdyBcIkVycm9yOiBcXFwiZ2V0Q3JlZ0JpdFxcXCI6IHVua25vd24gcmVnaXN0ZXIgXFxcIlwiICsgY3JlZyArIFwiXFxcIi5cIjtcblx0fVxuXG5cdHZhciBiaXQgPSBwYXJzZUludChjYml0KTtcblx0aWYoaXNOYU4oYml0KSB8fCBiaXQgPj0gdGhpcy5jcmVnc1tjcmVnXS5sZW5ndGgpIHtcblx0XHR0aHJvdyBcIkVycm9yOiBcXFwiZ2V0Q3JlZ0JpdFxcXCI6IGJpdCBcXFwiXCIgKyBjYml0ICsgXCJcXFwiIG5vdCBmb3VuZC5cIjtcblx0fVxuXHRyZXR1cm4gdGhpcy5jcmVnc1tjcmVnXVtiaXRdO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmNyZWdCYXNlID0gZnVuY3Rpb24oY3JlZykge1xuXHRpZighdGhpcy5jcmVnc1tjcmVnXSkge1xuXHRcdHRocm93IFwiRXJyb3I6IFxcXCJnZXRDcmVnQml0XFxcIjogdW5rbm93biByZWdpc3RlciBcXFwiXCIgKyBjcmVnICsgXCJcXFwiLlwiO1xuXHR9XG5cblx0dmFyIGJhc2UgPSAwO1xuXHRmb3IodmFyIHJlZ05hbWUgaW4gdGhpcy5jcmVncykge1xuXHRcdGlmKHJlZ05hbWUgPT0gY3JlZykge1xuXHRcdFx0cmV0dXJuIGJhc2U7XG5cdFx0fVxuXHRcdGJhc2UgKz0gdGhpcy5jcmVnc1tyZWdOYW1lXS5sZW5ndGg7XG5cdH1cbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5jcmVnVG90YWxCaXRzID0gZnVuY3Rpb24oKSB7XG5cdHZhciBiaXRzID0gMDtcblx0Zm9yKHZhciByZWdOYW1lIGluIHRoaXMuY3JlZ3MpIHtcblx0XHRiaXRzICs9IHRoaXMuY3JlZ3NbcmVnTmFtZV0ubGVuZ3RoO1xuXHR9XG5cdHJldHVybiBiaXRzO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmdldENyZWdWYWx1ZSA9IGZ1bmN0aW9uKGNyZWcpIHtcblx0aWYoIXRoaXMuY3JlZ3NbY3JlZ10pIHtcblx0XHR0aHJvdyBcIkVycm9yOiBcXFwiZ2V0Q3JlZ0JpdFxcXCI6IHVua25vd24gcmVnaXN0ZXIgXFxcIlwiICsgY3JlZyArIFwiXFxcIi5cIjtcblx0fVxuXG5cdHZhciBsZW4gPSB0aGlzLmNyZWdzW2NyZWddLmxlbmd0aDtcblx0dmFyIHZhbHVlID0gMDtcblx0Zm9yKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0aWYodGhpcy5jcmVnc1tjcmVnXVtpXSkge1xuXHRcdFx0dmFsdWUgKz0gbWF0aC5wb3coMiwgaSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn07XG5cbi8vXG4vLyBUaGlzIGZ1bmN0aW9uIHNpbXVsYXRlcyBtZWFzdXJlbWVudCBvZiBhbGwgcXViaXRzIG9uIGN1cnJlbnQgc3RhdGUgdmVjdG9yLCB3aXRob3V0IG1vZGlmeWluZyBzdGF0ZVxuLy8gICBSZXR1cm5zIGFycmF5IG9mIDBzIGFuZCAxcyBmb3IgZWFjaCBxdWJpdC4gXG4vLyAgIEZvciBleGFtcGxlLCBiZWxsIHN0YXRlIHdpbGwgcmV0dXJuOiBbMCwgMF0gb3IgWzEsIDFdXG4vLyAgIElmIHlvdSBuZWVkIG11bHRpcGxlIHNob3RzIHRoZW4gdXNlIFwibWVhc3VyZUFsbE11bHRpc2hvdFwiIG1ldGhvZCAoaXQgcnVucyBtdWNoIGZhc3RlcikuXG4vL1xuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLm1lYXN1cmVBbGwgPSBmdW5jdGlvbihmb3JjZSkge1xuXHRpZih0aGlzLmNvbGxhcHNlZCAmJiB0aGlzLmNvbGxhcHNlZC5sZW5ndGggPT0gdGhpcy5udW1RdWJpdHMgJiYgIWZvcmNlKSB7XG5cdFx0cmV0dXJuIHRoaXMuY29sbGFwc2VkO1xuXHR9XG5cblx0dGhpcy5jb2xsYXBzZWQgPSBbXTtcblxuXHR2YXIgcmFuZG9tV2VpZ2h0ID0gTWF0aC5yYW5kb20oKTtcblx0Zm9yKHZhciBpcyBpbiB0aGlzLnN0YXRlKSB7XG5cdFx0dmFyIHN0YXRlID0gbWF0aC5yb3VuZCh0aGlzLnN0YXRlW2lzXSwgMTQpO1xuXHRcdGlmKHN0YXRlLnJlIHx8IHN0YXRlLmltKSB7XG5cdFx0XHR2YXIgY2hhbmNlID0gbWF0aC5yb3VuZChtYXRoLnBvdyhtYXRoLmFicyhzdGF0ZSksIDIpLCAxNCk7XG5cdFx0XHRyYW5kb21XZWlnaHQgLT0gY2hhbmNlO1xuXHRcdFx0aWYocmFuZG9tV2VpZ2h0IDw9IDApIHtcblx0XHRcdFx0dmFyIGkgPSBwYXJzZUludChpcyk7XG5cdFx0XHRcdGlmKHRoaXMucmV2ZXJzZUJpdE9yZGVyKSB7XG5cdFx0XHRcdFx0Zm9yKHZhciBxID0gdGhpcy5udW1RdWJpdHMgLSAxOyBxID49IDA7IHEtLSkge1xuXHRcdFx0XHRcdFx0dGhpcy5jb2xsYXBzZWQucHVzaCgxIDw8IHEgJiBpID8gMSA6IDApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRmb3IodmFyIHEgPSAwOyBxIDwgdGhpcy5udW1RdWJpdHM7IHErKykge1xuXHRcdFx0XHRcdFx0dGhpcy5jb2xsYXBzZWQucHVzaCgxIDw8IHEgJiBpID8gMSA6IDApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb2xsYXBzZWQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gVGhpcyBzaG9sZCBuZXZlciBoYXBwZW4sIGJ1dCBcIm5hdHVyZSBpcyBub3QgY2xhc3NpY2FsXCIgOilcblx0aWYoIXRoaXMuY29sbGFwc2VkLmxlbmd0aCkge1xuXHRcdHdoaWxlKHRoaXMuY29sbGFwc2VkLmxlbmd0aCA8IHRoaXMubnVtUXViaXRzKSB7XG5cdFx0XHR0aGlzLmNvbGxhcHNlZC5wdXNoKDApO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdGhpcy5jb2xsYXBzZWQ7XG59O1xuXG5cbi8vXG4vLyBUaGlzIGZ1bmN0aW9uIHNpbXVsYXRlcyBtZWFzdXJlbWVudCBvZiBhbGwgcXViaXRzIG9uIGN1cnJlbnQgc3RhdGUgdmVjdG9yLCB3aXRob3V0IG1vZGlmeWluZyBzdGF0ZSwgbXVsdGlwbGUgdGltZXNcbi8vICAgUmV0dXJucyBvYmplY3QgKGRpY3Rpb25hcnkpIHdpdGggbWVhc3VyZWQgdmFsdWVzIChiaW5hcnkpIGFzIGtleXMgYW5kIGNvdW50cyBhcyB2YWx1ZXNcbi8vICAgRm9yIGV4YW1wbGUsIDEwMjQgc2hvdHMgb24gYmVsbCBzdGF0ZSB3aWxsIHJldHVybiBzb21ldGhpbmcgbGlrZTogeyBcIjAwXCI6IDUxNCwgXCIxMVwiOiA1MTAgfVxuLy9cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5tZWFzdXJlQWxsTXVsdGlzaG90ID0gZnVuY3Rpb24oc2hvdHMpIHtcblx0c2hvdHMgPSBzaG90cyB8fCAxO1xuXG5cdHZhciBjb3VudHMgPSB7fTtcblxuXHR2YXIgcmFuZG9tV2VpZ2h0cyA9IFtdO1xuXHRmb3IodmFyIGkgPSAwOyBpIDwgc2hvdHM7IGkrKykge1xuXHRcdHJhbmRvbVdlaWdodHMucHVzaChNYXRoLnJhbmRvbSgpKTtcblx0fVxuXG5cdHZhciBzaG90Q291bnQgPSAwO1xuXHRkbyB7XG5cdFx0Zm9yKHZhciBpcyBpbiB0aGlzLnN0YXRlKSB7XG5cdFx0XHR2YXIgc3RhdGUgPSBtYXRoLnJvdW5kKHRoaXMuc3RhdGVbaXNdLCAxNCk7XG5cdFx0XHRpZihzdGF0ZS5yZSB8fCBzdGF0ZS5pbSkge1xuXHRcdFx0XHR2YXIgY2hhbmNlID0gbWF0aC5yb3VuZChtYXRoLnBvdyhtYXRoLmFicyhzdGF0ZSksIDIpLCAxNCk7XG5cblx0XHRcdFx0Zm9yKHZhciBzaCA9IDA7IHNoIDwgc2hvdHM7IHNoKyspIHtcblx0XHRcdFx0XHRpZihyYW5kb21XZWlnaHRzW3NoXSA+IDApIHtcblx0XHRcdFx0XHRcdHJhbmRvbVdlaWdodHNbc2hdIC09IGNoYW5jZTtcblxuXHRcdFx0XHRcdFx0aWYocmFuZG9tV2VpZ2h0c1tzaF0gPD0gMCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgYmluID0gcGFyc2VJbnQoaXMpLnRvU3RyaW5nKDIpO1xuXHRcdFx0XHRcdFx0XHR3aGlsZShiaW4ubGVuZ3RoIDwgdGhpcy5udW1RdWJpdHMpIHtcblx0XHRcdFx0XHRcdFx0XHRiaW4gPSBcIjBcIiArIGJpbjtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmKGNvdW50c1tiaW5dKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y291bnRzW2Jpbl0rKztcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRjb3VudHNbYmluXSA9IDE7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRzaG90Q291bnQrKztcblxuXHRcdFx0XHRcdFx0XHRpZihzaG90Q291bnQgPT0gc2hvdHMpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gY291bnRzO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9IHdoaWxlKHNob3RDb3VudCA8IHNob3RzKTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLm1lYXN1cmUgPSBmdW5jdGlvbih3aXJlLCBjcmVnLCBjYml0LCBmb3JjZSkge1xuXHRpZihmb3JjZSB8fCAhdGhpcy5jb2xsYXBzZWQgfHwgdGhpcy5jb2xsYXBzZWQubGVuZ3RoICE9IHRoaXMubnVtUXViaXRzKSB7XG5cdFx0dGhpcy5tZWFzdXJlQWxsKGZvcmNlKTtcblx0fVxuXG5cdHZhciB2YWwgPSB0aGlzLmNvbGxhcHNlZFt3aXJlXTtcblxuXHRpZihjcmVnICYmIHR5cGVvZiBjYml0ICE9IFwidW5kZWZpbmVkXCIpIHtcblx0XHR0aGlzLnNldENyZWdCaXQoY3JlZywgY2JpdCwgdmFsKTtcblx0fVxuXG5cdHJldHVybiB2YWw7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucHJvYmFiaWxpdGllcyA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLnByb2IgPSBbXTtcblxuXHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdHRoaXMucHJvYi5wdXNoKDApO1xuXHR9XG5cblx0Zm9yKHZhciBpcyBpbiB0aGlzLnN0YXRlKSB7XG5cdFx0dmFyIGkgPSBwYXJzZUludChpcyk7XG5cblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGJpdCA9IG51bGw7XG5cblx0XHRcdGlmKHRoaXMucmV2ZXJzZUJpdE9yZGVyKSB7XG5cdFx0XHRcdGJpdCA9IG1hdGgucG93KDIsICh0aGlzLm51bVF1Yml0cyAtIDEpIC0gd2lyZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRiaXQgPSBtYXRoLnBvdygyLCB3aXJlKTtcblx0XHRcdH1cblxuXHRcdFx0aWYoaSAmIGJpdCkge1xuXHRcdFx0XHR2YXIgc3RhdGUgPSB0aGlzLnN0YXRlW2lzXTtcblx0XHRcdFx0aWYoc3RhdGUucmUgfHwgc3RhdGUuaW0pIHtcblx0XHRcdFx0XHR0aGlzLnByb2Jbd2lyZV0gKz0gbWF0aC5wb3cobWF0aC5hYnMoc3RhdGUpLCAyKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0dGhpcy5wcm9iW3dpcmVdID0gbWF0aC5yb3VuZCh0aGlzLnByb2Jbd2lyZV0sIDE0KTtcblx0fVxuXG5cdHJldHVybiB0aGlzLnByb2I7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucHJvYmFiaWxpdHkgPSBmdW5jdGlvbih3aXJlKSB7XG5cdGlmKCF0aGlzLnByb2IgfHwgdGhpcy5wcm9iLmxlbmd0aCAhPSB0aGlzLm51bVF1Yml0cykge1xuXHRcdHRoaXMucHJvYmFiaWxpdGllcygpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXMucHJvYlt3aXJlXTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5kZW5zaXR5TWF0cml4ID0gZnVuY3Rpb24oKSB7XG5cdHZhciBkZW5zaXR5ID0gW107XG5cdHZhciBudW1BbXBsaXR1ZGVzID0gdGhpcy5udW1BbXBsaXR1ZGVzKCk7XG5cdGZvcihyb3cgPSAwOyByb3cgPCBudW1BbXBsaXR1ZGVzOyByb3crKykge1xuXHRcdHZhciByID0gW107XG5cdFx0dmFyIHJvd1ZhbCA9IHRoaXMuc3RhdGVbcm93XSB8fCBtYXRoLmNvbXBsZXgoMCwgMCk7XG5cdFx0Zm9yKHZhciBjb2wgPSAwOyBjb2wgPCBudW1BbXBsaXR1ZGVzOyBjb2wrKykge1xuXHRcdFx0dmFyIGNvbFZhbCA9IHRoaXMuc3RhdGVbY29sXSB8fCBtYXRoLmNvbXBsZXgoMCwgMCk7XG5cdFx0XHRpZihjb2xWYWwucmUgfHwgY29sVmFsLmltKSB7XG5cdFx0XHRcdGNvbFZhbCA9IG1hdGguY29uaihjb2xWYWwpO1xuXHRcdFx0fVxuXHRcdFx0ci5wdXNoKG1hdGgubXVsdGlwbHkocm93VmFsLCBjb2xWYWwpKTtcblx0XHR9XG5cdFx0ZGVuc2l0eS5wdXNoKHIpO1xuXHR9XG5cdHJldHVybiBkZW5zaXR5O1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnBhcnRpYWxUcmFjZSA9IGZ1bmN0aW9uKHF1Yml0KSB7XG5cblx0ZnVuY3Rpb24gaW5zZXJ0Qml0KGlucHV0LCBwb3MsIGJpdCkge1xuXHRcdHZhciBvdXQgPSBpbnB1dCA8PCAxO1xuXHRcdHZhciBtID0gKDIgPDwgcG9zKSAtIDE7XG5cdFx0dmFyIHBvc0JpdCA9IDEgPDwgcG9zO1xuXHRcdHZhciBvdXQgPSAob3V0IF4gKChvdXQgXiBpbnB1dCkgJiBtKSkgfCBwb3NCaXQ7XG5cdFx0aWYoIWJpdCkge1xuXHRcdFx0b3V0ID0gb3V0IF4gcG9zQml0O1xuXHRcdH1cblx0XHRyZXR1cm4gb3V0O1xuXHR9XG5cblx0dmFyIHRyYWNlID0gW107XG5cblx0dmFyIHVudXNlZENvdW50ID0gdGhpcy5udW1RdWJpdHMgLSAxO1xuXHR2YXIgdW51c2VkTGVuID0gbWF0aC5wb3coMiwgdW51c2VkQ291bnQpO1xuXG5cdHZhciBxcG9zID0gbnVsbDtcblx0aWYodGhpcy5yZXZlcnNlQml0T3JkZXIpIHtcblx0XHRxcG9zID0gKHRoaXMubnVtUXViaXRzIC0gMSkgLSBxdWJpdDtcblx0fSBlbHNlIHtcblx0XHRxcG9zID0gcXViaXQ7XG5cdH1cblxuXHRmb3IodmFyIGVsID0gMDsgZWwgPCA0OyBlbCsrKSB7XG5cdFx0dHJhY2UucHVzaChtYXRoLmNvbXBsZXgoMCwgMCkpO1xuXHRcdHZhciBiYXNlID0gdW51c2VkTGVuO1xuXHRcdHdoaWxlKGJhc2UtLSkge1xuXHRcdFx0dmFyIHJvdyA9IGluc2VydEJpdChiYXNlLCBxcG9zLCBlbCAmIDIgPyAxIDogMCk7XG5cdFx0XHRpZih0aGlzLnN0YXRlW3Jvd10pIHtcblx0XHRcdFx0dmFyIGNvbCA9IGluc2VydEJpdChiYXNlLCBxcG9zLCBlbCAmIDEgPyAxIDogMCk7XG5cdFx0XHRcdGlmKHRoaXMuc3RhdGVbY29sXSkge1xuXHRcdFx0XHRcdHRyYWNlW2VsXSA9IG1hdGguYWRkKHRyYWNlW2VsXSwgbWF0aC5tdWx0aXBseSh0aGlzLnN0YXRlW3Jvd10sIG1hdGguY29uaih0aGlzLnN0YXRlW2NvbF0pKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIFtcblx0XHRbIHRyYWNlWzBdLCB0cmFjZVsxXSBdLFxuXHRcdFsgdHJhY2VbMl0sIHRyYWNlWzNdIF1cblx0XTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmFuZ2xlcyA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgYW5nbGVzID0gW107XG5cdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0YW5nbGVzLnB1c2goeyB0aGV0YTogMCwgcGhpOiAwIH0pO1xuXHR9XG5cblx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHR2YXIgdHJhY2UgPSB0aGlzLnBhcnRpYWxUcmFjZSh3aXJlKTtcblx0XHR2YXIgYWxwaGEgPSBtYXRoLnJvdW5kKG1hdGguc3FydCh0cmFjZVswXVswXSksIDEyKTtcblx0XHR2YXIgYmV0YSA9IG1hdGgucm91bmQobWF0aC5tdWx0aXBseSh0cmFjZVsxXVswXSwgbWF0aC5zcXJ0KDIpKSwgMTIpO1xuXHRcdHZhciByYWRpdXMgPSBtYXRoLnJvdW5kKG1hdGguYWJzKG1hdGguc3FydCgyKm1hdGguYWJzKG1hdGgudHJhY2UobWF0aC5wb3codHJhY2UsIDIpKSktMSkpLCAxMik7XG5cblx0XHR2YXIgdGhldGEgPSBtYXRoLm11bHRpcGx5KDIsIG1hdGguYWNvcyhhbHBoYSkpO1xuXHRcdHZhciBwaGkgPSAwO1xuXG5cdFx0aWYoIShtYXRoLnJvdW5kKGJldGEucmUsIDgpID09IDAgJiYgbWF0aC5yb3VuZChiZXRhLmltLCA4KSA9PSAwKSkge1xuXHRcdFx0cGhpID0gbWF0aC5tdWx0aXBseShtYXRoLmNvbXBsZXgoMCwgLTEpLCBtYXRoLmxvZyhtYXRoLm11bHRpcGx5KGJldGEsIG1hdGguY3NjKG1hdGguZGl2aWRlKHRoZXRhLCAyKSkpKSkucmU7XG5cdFx0XHRpZihpc05hTihwaGkpKSB7XG5cdFx0XHRcdHBoaSA9IDA7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0YW5nbGVzW3dpcmVdLnRoZXRhID0gbWF0aC5yb3VuZChtYXRoLmFicyh0aGV0YSksIDEyKTtcblx0XHRhbmdsZXNbd2lyZV0ucGhpID0gbWF0aC5yb3VuZChwaGksIDEyKTtcblx0XHRhbmdsZXNbd2lyZV0udGhldGFEZWcgPSBtYXRoLnJvdW5kKG1hdGgubXVsdGlwbHkobWF0aC5hYnModGhldGEpLCAoMTgwIC8gbWF0aC5waSkpLCA3KTtcblx0XHRhbmdsZXNbd2lyZV0ucGhpRGVnID0gbWF0aC5yb3VuZChtYXRoLm11bHRpcGx5KHBoaSwgKDE4MCAvIG1hdGgucGkpKSwgNyk7XG5cdFx0YW5nbGVzW3dpcmVdLnJhZGl1cyA9IG1hdGgucm91bmQocmFkaXVzLCA3KTtcblx0fVxuXG5cdHJldHVybiBhbmdsZXM7XG59O1xuXG5cbi8vXG4vLyBPcHRpb25zOiBcbi8vICB7IFxuLy9cdFx0dXNlR2F0ZXM6IFsgXCJyeVwiLCBcInJ6XCIsIFwiY3J6XCIsIC4uLiBdLFxuLy8gIFx0bm9NZWFzdXJlOiBmYWxzZVxuLy8gICAgICBub1Jlc2V0OiBmYWxzZVxuLy8gICAgICBub0NsYXNzaWNDb250cm9sOiBmYWxzZVxuLy8gIH1cbi8vXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5yYW5kb21DaXJjdWl0ID0gZnVuY3Rpb24obnVtUXViaXRzLCBudW1HYXRlcywgb3B0aW9ucykge1xuXHR0aGlzLmluaXQobnVtUXViaXRzKTtcblxuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR2YXIgZ2F0ZXMgPSAob3B0aW9ucy51c2VHYXRlcyAmJiBvcHRpb25zLnVzZUdhdGVzLmxlbmd0aCkgPyBvcHRpb25zLnVzZUdhdGVzIDogT2JqZWN0LmtleXModGhpcy5iYXNpY0dhdGVzKTtcblxuXHRpZihvcHRpb25zLm5vTWVhc3VyZSAmJiBnYXRlcy5pbmRleE9mKFwibWVhc3VyZVwiKSA+PSAwKSB7XG5cdFx0Z2F0ZXMuc3BsaWNlKGdhdGVzLmluZGV4T2YoXCJtZWFzdXJlXCIpLCAxKTtcblx0fVxuXG5cdGlmKG9wdGlvbnMubm9SZXNldCAmJiBnYXRlcy5pbmRleE9mKFwicmVzZXRcIikgPj0gMCkge1xuXHRcdGdhdGVzLnNwbGljZShnYXRlcy5pbmRleE9mKFwicmVzZXRcIiksIDEpO1xuXHR9XG5cblx0dmFyIGdhdGVDb3VudCA9IDA7XG5cdHdoaWxlKGdhdGVDb3VudCA8IG51bUdhdGVzKSB7XG5cdFx0dmFyIGdhdGVOYW1lID0gZ2F0ZXNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogZ2F0ZXMubGVuZ3RoKV07XG5cdFx0dmFyIGdhdGUgPSB0aGlzLmJhc2ljR2F0ZXNbZ2F0ZU5hbWVdO1xuXHRcdGlmKGdhdGUpIHtcblx0XHRcdHZhciBnYXRlUXViaXRzID0gZ2F0ZS5tYXRyaXggJiYgZ2F0ZS5tYXRyaXgubGVuZ3RoID8gbWF0aC5sb2cyKGdhdGUubWF0cml4Lmxlbmd0aCkgOiAxO1xuXG5cdFx0XHRpZihnYXRlUXViaXRzIDw9IG51bVF1Yml0cykge1xuXHRcdFx0XHQvLyBnYXRlIHdpcmVzXG5cdFx0XHRcdHZhciBnYXRlV2lyZXMgPSBbXTtcblx0XHRcdFx0d2hpbGUoZ2F0ZVdpcmVzLmxlbmd0aCA8IGdhdGVRdWJpdHMpIHtcblx0XHRcdFx0XHR2YXIgZ2F0ZVdpcmUgPSAtMTtcblx0XHRcdFx0XHRkbyB7XG5cdFx0XHRcdFx0XHRnYXRlV2lyZSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIG51bVF1Yml0cyk7XG5cdFx0XHRcdFx0fSB3aGlsZShnYXRlV2lyZXMuaW5kZXhPZihnYXRlV2lyZSkgPj0gMCk7XG5cdFx0XHRcdFx0Z2F0ZVdpcmVzLnB1c2goZ2F0ZVdpcmUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFyIG9wdCA9IHt9O1xuXG5cdFx0XHRcdC8vIGdhdGUgcGFyYW1zXG5cdFx0XHRcdGlmKGdhdGUucGFyYW1zICYmIGdhdGUucGFyYW1zLmxlbmd0aCkge1xuXHRcdFx0XHRcdHZhciBwYXJhbXMgPSB7fTtcblx0XHRcdFx0XHRnYXRlLnBhcmFtcy5tYXAoZnVuY3Rpb24ocGFyYW1OYW1lKSB7XG5cdFx0XHRcdFx0XHRwYXJhbXNbcGFyYW1OYW1lXSA9IE1hdGguUEkgKiAyICogTWF0aC5yYW5kb20oKTtcblxuXHRcdFx0XHRcdFx0Ly8gLVBJLi5QSVxuXHRcdFx0XHRcdFx0aWYocGFyYW1zW3BhcmFtTmFtZV0gPiBNYXRoLlBJKSB7XG5cdFx0XHRcdFx0XHRcdHBhcmFtc1twYXJhbU5hbWVdID0gTWF0aC5QSSAtIHBhcmFtc1twYXJhbU5hbWVdO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdG9wdC5wYXJhbXMgPSBwYXJhbXM7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZihnYXRlTmFtZSA9PSBcIm1lYXN1cmVcIikge1xuXHRcdFx0XHRcdC8vIG1lYXN1cmVtZW50IGRlc3RpbmF0aW9uXG5cdFx0XHRcdFx0b3B0LmNyZWcgPSB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcImNcIixcblx0XHRcdFx0XHRcdGJpdDogZ2F0ZVdpcmVzWzBdXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZighb3B0aW9ucy5ub0NsYXNzaWNDb250cm9sKSB7XG5cdFx0XHRcdFx0XHQvLyBtYXliZSBhZGQgY29uZGl0aW9uXG5cdFx0XHRcdFx0XHRpZihNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA0KSA9PSAwKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBjcmVnQml0cyA9IHRoaXMuY3JlZ1RvdGFsQml0cygpO1xuXHRcdFx0XHRcdFx0XHRpZihjcmVnQml0cykge1xuXHRcdFx0XHRcdFx0XHRcdG9wdC5jb25kaXRpb24gPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjcmVnOiBcImNcIixcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF0aC5wb3coMiwgY3JlZ0JpdHMpKSlcblx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5hcHBlbmRHYXRlKGdhdGVOYW1lLCBnYXRlV2lyZXMsIG9wdCk7XG5cdFx0XHRcdGdhdGVDb3VudCsrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnJhbmRvbVVuaXRhcnkgPSBmdW5jdGlvbihudW1RdWJpdHMpIHtcblx0dmFyIGNpcmMgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0Y2lyYy5yYW5kb21DaXJjdWl0KChudW1RdWJpdHMgfHwgMSksIChudW1RdWJpdHMgfHwgMSkgKiA4LCB7XG5cdFx0dXNlR2F0ZXM6IFsgXCJyeFwiLCBcInJ6XCIsIFwiY3pcIiBdLFxuXHRcdG5vTWVhc3VyZTogdHJ1ZSxcblx0XHRub1Jlc2V0OiB0cnVlLFxuXHRcdG5vQ2xhc3NpY0NvbnRyb2w6IHRydWVcblx0fSk7XG5cdHJldHVybiBjaXJjLmNpcmN1aXRNYXRyaXgoKTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5ldWxlckFuZ2xlc1pZWiA9IGZ1bmN0aW9uKGlucHV0TWF0cml4KSB7XG5cdHZhciBldWxlckFuZ2xlcyA9IHt0aGV0YTogbnVsbCwgcGhpOiBudWxsLCBsYW1iZGE6IG51bGwsIHBoYXNlOiBudWxsfTtcblx0dmFyIGNvZWZmID0gbWF0aC5wb3cobWF0aC5kZXQoaW5wdXRNYXRyaXgpLCAtMC41KTtcblx0ZXVsZXJBbmdsZXMucGhhc2UgPSAtMSAqIG1hdGguY29tcGxleChjb2VmZikudG9Qb2xhcigpLnBoaTtcblx0dmFyIHN1X21hdCA9IG1hdGgubXVsdGlwbHkoY29lZmYsIGlucHV0TWF0cml4KTtcblx0ZXVsZXJBbmdsZXMudGhldGEgPSAyICogbWF0aC5hdGFuMihtYXRoLmFicyhzdV9tYXRbMV1bMF0pLCBtYXRoLmFicyhzdV9tYXRbMF1bMF0pKTtcblx0dmFyIHBoaXBsYW1iZGEgPSAyICogbWF0aC5jb21wbGV4KHN1X21hdFsxXVsxXSkudG9Qb2xhcigpLnBoaTtcblx0dmFyIHBoaW1sYW1kYSA9IDIgKiBtYXRoLmNvbXBsZXgoc3VfbWF0WzFdWzBdKS50b1BvbGFyKCkucGhpO1xuXHRldWxlckFuZ2xlcy5waGkgPSAocGhpcGxhbWJkYSArIHBoaW1sYW1kYSkgLyAyLjA7XG5cdGV1bGVyQW5nbGVzLmxhbWJkYSA9IChwaGlwbGFtYmRhIC0gcGhpbWxhbWRhKSAvIDIuMDtcblx0cmV0dXJuIGV1bGVyQW5nbGVzO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBRdWFudHVtQ2lyY3VpdDtcbiIsIi8vXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG5cbi8vIFRoaXMgaW1wbGVtZW50YXRpb24gb2Yge0BsaW5rIFRva2VuU3RyZWFtfSBsb2FkcyB0b2tlbnMgZnJvbSBhXG4vLyB7QGxpbmsgVG9rZW5Tb3VyY2V9IG9uLWRlbWFuZCwgYW5kIHBsYWNlcyB0aGUgdG9rZW5zIGluIGEgYnVmZmVyIHRvIHByb3ZpZGVcbi8vIGFjY2VzcyB0byBhbnkgcHJldmlvdXMgdG9rZW4gYnkgaW5kZXguXG4vL1xuLy8gPHA+XG4vLyBUaGlzIHRva2VuIHN0cmVhbSBpZ25vcmVzIHRoZSB2YWx1ZSBvZiB7QGxpbmsgVG9rZW4vL2dldENoYW5uZWx9LiBJZiB5b3VyXG4vLyBwYXJzZXIgcmVxdWlyZXMgdGhlIHRva2VuIHN0cmVhbSBmaWx0ZXIgdG9rZW5zIHRvIG9ubHkgdGhvc2Ugb24gYSBwYXJ0aWN1bGFyXG4vLyBjaGFubmVsLCBzdWNoIGFzIHtAbGluayBUb2tlbi8vREVGQVVMVF9DSEFOTkVMfSBvclxuLy8ge0BsaW5rIFRva2VuLy9ISURERU5fQ0hBTk5FTH0sIHVzZSBhIGZpbHRlcmluZyB0b2tlbiBzdHJlYW0gc3VjaCBhXG4vLyB7QGxpbmsgQ29tbW9uVG9rZW5TdHJlYW19LjwvcD5cblxudmFyIFRva2VuID0gcmVxdWlyZSgnLi9Ub2tlbicpLlRva2VuO1xudmFyIExleGVyID0gcmVxdWlyZSgnLi9MZXhlcicpLkxleGVyO1xudmFyIEludGVydmFsID0gcmVxdWlyZSgnLi9JbnRlcnZhbFNldCcpLkludGVydmFsO1xuXG4vLyB0aGlzIGlzIGp1c3QgdG8ga2VlcCBtZWFuaW5nZnVsIHBhcmFtZXRlciB0eXBlcyB0byBQYXJzZXJcbmZ1bmN0aW9uIFRva2VuU3RyZWFtKCkge1xuXHRyZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gQnVmZmVyZWRUb2tlblN0cmVhbSh0b2tlblNvdXJjZSkge1xuXG5cdFRva2VuU3RyZWFtLmNhbGwodGhpcyk7XG5cdC8vIFRoZSB7QGxpbmsgVG9rZW5Tb3VyY2V9IGZyb20gd2hpY2ggdG9rZW5zIGZvciB0aGlzIHN0cmVhbSBhcmUgZmV0Y2hlZC5cblx0dGhpcy50b2tlblNvdXJjZSA9IHRva2VuU291cmNlO1xuXG5cdC8vIEEgY29sbGVjdGlvbiBvZiBhbGwgdG9rZW5zIGZldGNoZWQgZnJvbSB0aGUgdG9rZW4gc291cmNlLiBUaGUgbGlzdCBpc1xuXHQvLyBjb25zaWRlcmVkIGEgY29tcGxldGUgdmlldyBvZiB0aGUgaW5wdXQgb25jZSB7QGxpbmsgLy9mZXRjaGVkRU9GfSBpcyBzZXRcblx0Ly8gdG8ge0Bjb2RlIHRydWV9LlxuXHR0aGlzLnRva2VucyA9IFtdO1xuXG5cdC8vIFRoZSBpbmRleCBpbnRvIHtAbGluayAvL3Rva2Vuc30gb2YgdGhlIGN1cnJlbnQgdG9rZW4gKG5leHQgdG9rZW4gdG9cblx0Ly8ge0BsaW5rIC8vY29uc3VtZX0pLiB7QGxpbmsgLy90b2tlbnN9e0Bjb2RlIFt9e0BsaW5rIC8vcH17QGNvZGUgXX0gc2hvdWxkXG5cdC8vIGJlXG5cdC8vIHtAbGluayAvL0xUIExUKDEpfS5cblx0Ly9cblx0Ly8gPHA+VGhpcyBmaWVsZCBpcyBzZXQgdG8gLTEgd2hlbiB0aGUgc3RyZWFtIGlzIGZpcnN0IGNvbnN0cnVjdGVkIG9yIHdoZW5cblx0Ly8ge0BsaW5rIC8vc2V0VG9rZW5Tb3VyY2V9IGlzIGNhbGxlZCwgaW5kaWNhdGluZyB0aGF0IHRoZSBmaXJzdCB0b2tlbiBoYXNcblx0Ly8gbm90IHlldCBiZWVuIGZldGNoZWQgZnJvbSB0aGUgdG9rZW4gc291cmNlLiBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbixcblx0Ly8gc2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mIHtAbGluayBJbnRTdHJlYW19IGZvciBhIGRlc2NyaXB0aW9uIG9mXG5cdC8vIEluaXRpYWxpemluZyBNZXRob2RzLjwvcD5cblx0dGhpcy5pbmRleCA9IC0xO1xuXG5cdC8vIEluZGljYXRlcyB3aGV0aGVyIHRoZSB7QGxpbmsgVG9rZW4vL0VPRn0gdG9rZW4gaGFzIGJlZW4gZmV0Y2hlZCBmcm9tXG5cdC8vIHtAbGluayAvL3Rva2VuU291cmNlfSBhbmQgYWRkZWQgdG8ge0BsaW5rIC8vdG9rZW5zfS4gVGhpcyBmaWVsZCBpbXByb3Zlc1xuXHQvLyBwZXJmb3JtYW5jZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlczpcblx0Ly9cblx0Ly8gPHVsPlxuXHQvLyA8bGk+e0BsaW5rIC8vY29uc3VtZX06IFRoZSBsb29rYWhlYWQgY2hlY2sgaW4ge0BsaW5rIC8vY29uc3VtZX0gdG9cblx0Ly8gcHJldmVudFxuXHQvLyBjb25zdW1pbmcgdGhlIEVPRiBzeW1ib2wgaXMgb3B0aW1pemVkIGJ5IGNoZWNraW5nIHRoZSB2YWx1ZXMgb2Zcblx0Ly8ge0BsaW5rIC8vZmV0Y2hlZEVPRn0gYW5kIHtAbGluayAvL3B9IGluc3RlYWQgb2YgY2FsbGluZyB7QGxpbmtcblx0Ly8gLy9MQX0uPC9saT5cblx0Ly8gPGxpPntAbGluayAvL2ZldGNofTogVGhlIGNoZWNrIHRvIHByZXZlbnQgYWRkaW5nIG11bHRpcGxlIEVPRiBzeW1ib2xzXG5cdC8vIGludG9cblx0Ly8ge0BsaW5rIC8vdG9rZW5zfSBpcyB0cml2aWFsIHdpdGggdGhpcyBmaWVsZC48L2xpPlxuXHQvLyA8dWw+XG5cdHRoaXMuZmV0Y2hlZEVPRiA9IGZhbHNlO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRva2VuU3RyZWFtLnByb3RvdHlwZSk7XG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJ1ZmZlcmVkVG9rZW5TdHJlYW07XG5cbkJ1ZmZlcmVkVG9rZW5TdHJlYW0ucHJvdG90eXBlLm1hcmsgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIDA7XG59O1xuXG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5yZWxlYXNlID0gZnVuY3Rpb24obWFya2VyKSB7XG5cdC8vIG5vIHJlc291cmNlcyB0byByZWxlYXNlXG59O1xuXG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLnNlZWsoMCk7XG59O1xuXG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5zZWVrID0gZnVuY3Rpb24oaW5kZXgpIHtcblx0dGhpcy5sYXp5SW5pdCgpO1xuXHR0aGlzLmluZGV4ID0gdGhpcy5hZGp1c3RTZWVrSW5kZXgoaW5kZXgpO1xufTtcblxuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24oaW5kZXgpIHtcblx0dGhpcy5sYXp5SW5pdCgpO1xuXHRyZXR1cm4gdGhpcy50b2tlbnNbaW5kZXhdO1xufTtcblxuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUuY29uc3VtZSA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgc2tpcEVvZkNoZWNrID0gZmFsc2U7XG5cdGlmICh0aGlzLmluZGV4ID49IDApIHtcblx0XHRpZiAodGhpcy5mZXRjaGVkRU9GKSB7XG5cdFx0XHQvLyB0aGUgbGFzdCB0b2tlbiBpbiB0b2tlbnMgaXMgRU9GLiBza2lwIGNoZWNrIGlmIHAgaW5kZXhlcyBhbnlcblx0XHRcdC8vIGZldGNoZWQgdG9rZW4gZXhjZXB0IHRoZSBsYXN0LlxuXHRcdFx0c2tpcEVvZkNoZWNrID0gdGhpcy5pbmRleCA8IHRoaXMudG9rZW5zLmxlbmd0aCAtIDE7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIG5vIEVPRiB0b2tlbiBpbiB0b2tlbnMuIHNraXAgY2hlY2sgaWYgcCBpbmRleGVzIGEgZmV0Y2hlZCB0b2tlbi5cblx0XHRcdHNraXBFb2ZDaGVjayA9IHRoaXMuaW5kZXggPCB0aGlzLnRva2Vucy5sZW5ndGg7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIG5vdCB5ZXQgaW5pdGlhbGl6ZWRcblx0XHRza2lwRW9mQ2hlY2sgPSBmYWxzZTtcblx0fVxuXHRpZiAoIXNraXBFb2ZDaGVjayAmJiB0aGlzLkxBKDEpID09PSBUb2tlbi5FT0YpIHtcblx0XHR0aHJvdyBcImNhbm5vdCBjb25zdW1lIEVPRlwiO1xuXHR9XG5cdGlmICh0aGlzLnN5bmModGhpcy5pbmRleCArIDEpKSB7XG5cdFx0dGhpcy5pbmRleCA9IHRoaXMuYWRqdXN0U2Vla0luZGV4KHRoaXMuaW5kZXggKyAxKTtcblx0fVxufTtcblxuLy8gTWFrZSBzdXJlIGluZGV4IHtAY29kZSBpfSBpbiB0b2tlbnMgaGFzIGEgdG9rZW4uXG4vL1xuLy8gQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgYSB0b2tlbiBpcyBsb2NhdGVkIGF0IGluZGV4IHtAY29kZSBpfSwgb3RoZXJ3aXNlXG4vLyB7QGNvZGUgZmFsc2V9LlxuLy8gQHNlZSAvL2dldChpbnQgaSlcbi8vIC9cbkJ1ZmZlcmVkVG9rZW5TdHJlYW0ucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbihpKSB7XG5cdHZhciBuID0gaSAtIHRoaXMudG9rZW5zLmxlbmd0aCArIDE7IC8vIGhvdyBtYW55IG1vcmUgZWxlbWVudHMgd2UgbmVlZD9cblx0aWYgKG4gPiAwKSB7XG5cdFx0dmFyIGZldGNoZWQgPSB0aGlzLmZldGNoKG4pO1xuXHRcdHJldHVybiBmZXRjaGVkID49IG47XG5cdH1cblx0cmV0dXJuIHRydWU7XG59O1xuXG4vLyBBZGQge0Bjb2RlIG59IGVsZW1lbnRzIHRvIGJ1ZmZlci5cbi8vXG4vLyBAcmV0dXJuIFRoZSBhY3R1YWwgbnVtYmVyIG9mIGVsZW1lbnRzIGFkZGVkIHRvIHRoZSBidWZmZXIuXG4vLyAvXG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5mZXRjaCA9IGZ1bmN0aW9uKG4pIHtcblx0aWYgKHRoaXMuZmV0Y2hlZEVPRikge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7XG5cdFx0dmFyIHQgPSB0aGlzLnRva2VuU291cmNlLm5leHRUb2tlbigpO1xuXHRcdHQudG9rZW5JbmRleCA9IHRoaXMudG9rZW5zLmxlbmd0aDtcblx0XHR0aGlzLnRva2Vucy5wdXNoKHQpO1xuXHRcdGlmICh0LnR5cGUgPT09IFRva2VuLkVPRikge1xuXHRcdFx0dGhpcy5mZXRjaGVkRU9GID0gdHJ1ZTtcblx0XHRcdHJldHVybiBpICsgMTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG47XG59O1xuXG4vLyBHZXQgYWxsIHRva2VucyBmcm9tIHN0YXJ0Li5zdG9wIGluY2x1c2l2ZWx5Ly8vXG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5nZXRUb2tlbnMgPSBmdW5jdGlvbihzdGFydCwgc3RvcCwgdHlwZXMpIHtcblx0aWYgKHR5cGVzID09PSB1bmRlZmluZWQpIHtcblx0XHR0eXBlcyA9IG51bGw7XG5cdH1cblx0aWYgKHN0YXJ0IDwgMCB8fCBzdG9wIDwgMCkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdHRoaXMubGF6eUluaXQoKTtcblx0dmFyIHN1YnNldCA9IFtdO1xuXHRpZiAoc3RvcCA+PSB0aGlzLnRva2Vucy5sZW5ndGgpIHtcblx0XHRzdG9wID0gdGhpcy50b2tlbnMubGVuZ3RoIC0gMTtcblx0fVxuXHRmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBzdG9wOyBpKyspIHtcblx0XHR2YXIgdCA9IHRoaXMudG9rZW5zW2ldO1xuXHRcdGlmICh0LnR5cGUgPT09IFRva2VuLkVPRikge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdGlmICh0eXBlcyA9PT0gbnVsbCB8fCB0eXBlcy5jb250YWlucyh0LnR5cGUpKSB7XG5cdFx0XHRzdWJzZXQucHVzaCh0KTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHN1YnNldDtcbn07XG5cbkJ1ZmZlcmVkVG9rZW5TdHJlYW0ucHJvdG90eXBlLkxBID0gZnVuY3Rpb24oaSkge1xuXHRyZXR1cm4gdGhpcy5MVChpKS50eXBlO1xufTtcblxuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUuTEIgPSBmdW5jdGlvbihrKSB7XG5cdGlmICh0aGlzLmluZGV4IC0gayA8IDApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHRyZXR1cm4gdGhpcy50b2tlbnNbdGhpcy5pbmRleCAtIGtdO1xufTtcblxuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUuTFQgPSBmdW5jdGlvbihrKSB7XG5cdHRoaXMubGF6eUluaXQoKTtcblx0aWYgKGsgPT09IDApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHRpZiAoayA8IDApIHtcblx0XHRyZXR1cm4gdGhpcy5MQigtayk7XG5cdH1cblx0dmFyIGkgPSB0aGlzLmluZGV4ICsgayAtIDE7XG5cdHRoaXMuc3luYyhpKTtcblx0aWYgKGkgPj0gdGhpcy50b2tlbnMubGVuZ3RoKSB7IC8vIHJldHVybiBFT0YgdG9rZW5cblx0XHQvLyBFT0YgbXVzdCBiZSBsYXN0IHRva2VuXG5cdFx0cmV0dXJuIHRoaXMudG9rZW5zW3RoaXMudG9rZW5zLmxlbmd0aCAtIDFdO1xuXHR9XG5cdHJldHVybiB0aGlzLnRva2Vuc1tpXTtcbn07XG5cbi8vIEFsbG93ZWQgZGVyaXZlZCBjbGFzc2VzIHRvIG1vZGlmeSB0aGUgYmVoYXZpb3Igb2Ygb3BlcmF0aW9ucyB3aGljaCBjaGFuZ2Vcbi8vIHRoZSBjdXJyZW50IHN0cmVhbSBwb3NpdGlvbiBieSBhZGp1c3RpbmcgdGhlIHRhcmdldCB0b2tlbiBpbmRleCBvZiBhIHNlZWtcbi8vIG9wZXJhdGlvbi4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gc2ltcGx5IHJldHVybnMge0Bjb2RlIGl9LiBJZiBhblxuLy8gZXhjZXB0aW9uIGlzIHRocm93biBpbiB0aGlzIG1ldGhvZCwgdGhlIGN1cnJlbnQgc3RyZWFtIGluZGV4IHNob3VsZCBub3QgYmVcbi8vIGNoYW5nZWQuXG4vL1xuLy8gPHA+Rm9yIGV4YW1wbGUsIHtAbGluayBDb21tb25Ub2tlblN0cmVhbX0gb3ZlcnJpZGVzIHRoaXMgbWV0aG9kIHRvIGVuc3VyZVxuLy8gdGhhdFxuLy8gdGhlIHNlZWsgdGFyZ2V0IGlzIGFsd2F5cyBhbiBvbi1jaGFubmVsIHRva2VuLjwvcD5cbi8vXG4vLyBAcGFyYW0gaSBUaGUgdGFyZ2V0IHRva2VuIGluZGV4LlxuLy8gQHJldHVybiBUaGUgYWRqdXN0ZWQgdGFyZ2V0IHRva2VuIGluZGV4LlxuXG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5hZGp1c3RTZWVrSW5kZXggPSBmdW5jdGlvbihpKSB7XG5cdHJldHVybiBpO1xufTtcblxuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUubGF6eUluaXQgPSBmdW5jdGlvbigpIHtcblx0aWYgKHRoaXMuaW5kZXggPT09IC0xKSB7XG5cdFx0dGhpcy5zZXR1cCgpO1xuXHR9XG59O1xuXG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5zZXR1cCA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLnN5bmMoMCk7XG5cdHRoaXMuaW5kZXggPSB0aGlzLmFkanVzdFNlZWtJbmRleCgwKTtcbn07XG5cbi8vIFJlc2V0IHRoaXMgdG9rZW4gc3RyZWFtIGJ5IHNldHRpbmcgaXRzIHRva2VuIHNvdXJjZS4vLy9cbkJ1ZmZlcmVkVG9rZW5TdHJlYW0ucHJvdG90eXBlLnNldFRva2VuU291cmNlID0gZnVuY3Rpb24odG9rZW5Tb3VyY2UpIHtcblx0dGhpcy50b2tlblNvdXJjZSA9IHRva2VuU291cmNlO1xuXHR0aGlzLnRva2VucyA9IFtdO1xuXHR0aGlzLmluZGV4ID0gLTE7XG5cdHRoaXMuZmV0Y2hlZEVPRiA9IGZhbHNlO1xufTtcblxuXG4vLyBHaXZlbiBhIHN0YXJ0aW5nIGluZGV4LCByZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBuZXh0IHRva2VuIG9uIGNoYW5uZWwuXG4vLyBSZXR1cm4gaSBpZiB0b2tlbnNbaV0gaXMgb24gY2hhbm5lbC4gUmV0dXJuIC0xIGlmIHRoZXJlIGFyZSBubyB0b2tlbnNcbi8vIG9uIGNoYW5uZWwgYmV0d2VlbiBpIGFuZCBFT0YuXG4vLyAvXG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5uZXh0VG9rZW5PbkNoYW5uZWwgPSBmdW5jdGlvbihpLCBjaGFubmVsKSB7XG5cdHRoaXMuc3luYyhpKTtcblx0aWYgKGkgPj0gdGhpcy50b2tlbnMubGVuZ3RoKSB7XG5cdFx0cmV0dXJuIC0xO1xuXHR9XG5cdHZhciB0b2tlbiA9IHRoaXMudG9rZW5zW2ldO1xuXHR3aGlsZSAodG9rZW4uY2hhbm5lbCAhPT0gdGhpcy5jaGFubmVsKSB7XG5cdFx0aWYgKHRva2VuLnR5cGUgPT09IFRva2VuLkVPRikge1xuXHRcdFx0cmV0dXJuIC0xO1xuXHRcdH1cblx0XHRpICs9IDE7XG5cdFx0dGhpcy5zeW5jKGkpO1xuXHRcdHRva2VuID0gdGhpcy50b2tlbnNbaV07XG5cdH1cblx0cmV0dXJuIGk7XG59O1xuXG4vLyBHaXZlbiBhIHN0YXJ0aW5nIGluZGV4LCByZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBwcmV2aW91cyB0b2tlbiBvbiBjaGFubmVsLlxuLy8gUmV0dXJuIGkgaWYgdG9rZW5zW2ldIGlzIG9uIGNoYW5uZWwuIFJldHVybiAtMSBpZiB0aGVyZSBhcmUgbm8gdG9rZW5zXG4vLyBvbiBjaGFubmVsIGJldHdlZW4gaSBhbmQgMC5cbkJ1ZmZlcmVkVG9rZW5TdHJlYW0ucHJvdG90eXBlLnByZXZpb3VzVG9rZW5PbkNoYW5uZWwgPSBmdW5jdGlvbihpLCBjaGFubmVsKSB7XG5cdHdoaWxlIChpID49IDAgJiYgdGhpcy50b2tlbnNbaV0uY2hhbm5lbCAhPT0gY2hhbm5lbCkge1xuXHRcdGkgLT0gMTtcblx0fVxuXHRyZXR1cm4gaTtcbn07XG5cbi8vIENvbGxlY3QgYWxsIHRva2VucyBvbiBzcGVjaWZpZWQgY2hhbm5lbCB0byB0aGUgcmlnaHQgb2Zcbi8vIHRoZSBjdXJyZW50IHRva2VuIHVwIHVudGlsIHdlIHNlZSBhIHRva2VuIG9uIERFRkFVTFRfVE9LRU5fQ0hBTk5FTCBvclxuLy8gRU9GLiBJZiBjaGFubmVsIGlzIC0xLCBmaW5kIGFueSBub24gZGVmYXVsdCBjaGFubmVsIHRva2VuLlxuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUuZ2V0SGlkZGVuVG9rZW5zVG9SaWdodCA9IGZ1bmN0aW9uKHRva2VuSW5kZXgsXG5cdFx0Y2hhbm5lbCkge1xuXHRpZiAoY2hhbm5lbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0Y2hhbm5lbCA9IC0xO1xuXHR9XG5cdHRoaXMubGF6eUluaXQoKTtcblx0aWYgKHRva2VuSW5kZXggPCAwIHx8IHRva2VuSW5kZXggPj0gdGhpcy50b2tlbnMubGVuZ3RoKSB7XG5cdFx0dGhyb3cgXCJcIiArIHRva2VuSW5kZXggKyBcIiBub3QgaW4gMC4uXCIgKyB0aGlzLnRva2Vucy5sZW5ndGggLSAxO1xuXHR9XG5cdHZhciBuZXh0T25DaGFubmVsID0gdGhpcy5uZXh0VG9rZW5PbkNoYW5uZWwodG9rZW5JbmRleCArIDEsIExleGVyLkRFRkFVTFRfVE9LRU5fQ0hBTk5FTCk7XG5cdHZhciBmcm9tXyA9IHRva2VuSW5kZXggKyAxO1xuXHQvLyBpZiBub25lIG9uY2hhbm5lbCB0byByaWdodCwgbmV4dE9uQ2hhbm5lbD0tMSBzbyBzZXQgdG8gPSBsYXN0IHRva2VuXG5cdHZhciB0byA9IG5leHRPbkNoYW5uZWwgPT09IC0xID8gdGhpcy50b2tlbnMubGVuZ3RoIC0gMSA6IG5leHRPbkNoYW5uZWw7XG5cdHJldHVybiB0aGlzLmZpbHRlckZvckNoYW5uZWwoZnJvbV8sIHRvLCBjaGFubmVsKTtcbn07XG5cbi8vIENvbGxlY3QgYWxsIHRva2VucyBvbiBzcGVjaWZpZWQgY2hhbm5lbCB0byB0aGUgbGVmdCBvZlxuLy8gdGhlIGN1cnJlbnQgdG9rZW4gdXAgdW50aWwgd2Ugc2VlIGEgdG9rZW4gb24gREVGQVVMVF9UT0tFTl9DSEFOTkVMLlxuLy8gSWYgY2hhbm5lbCBpcyAtMSwgZmluZCBhbnkgbm9uIGRlZmF1bHQgY2hhbm5lbCB0b2tlbi5cbkJ1ZmZlcmVkVG9rZW5TdHJlYW0ucHJvdG90eXBlLmdldEhpZGRlblRva2Vuc1RvTGVmdCA9IGZ1bmN0aW9uKHRva2VuSW5kZXgsXG5cdFx0Y2hhbm5lbCkge1xuXHRpZiAoY2hhbm5lbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0Y2hhbm5lbCA9IC0xO1xuXHR9XG5cdHRoaXMubGF6eUluaXQoKTtcblx0aWYgKHRva2VuSW5kZXggPCAwIHx8IHRva2VuSW5kZXggPj0gdGhpcy50b2tlbnMubGVuZ3RoKSB7XG5cdFx0dGhyb3cgXCJcIiArIHRva2VuSW5kZXggKyBcIiBub3QgaW4gMC4uXCIgKyB0aGlzLnRva2Vucy5sZW5ndGggLSAxO1xuXHR9XG5cdHZhciBwcmV2T25DaGFubmVsID0gdGhpcy5wcmV2aW91c1Rva2VuT25DaGFubmVsKHRva2VuSW5kZXggLSAxLCBMZXhlci5ERUZBVUxUX1RPS0VOX0NIQU5ORUwpO1xuXHRpZiAocHJldk9uQ2hhbm5lbCA9PT0gdG9rZW5JbmRleCAtIDEpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHQvLyBpZiBub25lIG9uIGNoYW5uZWwgdG8gbGVmdCwgcHJldk9uQ2hhbm5lbD0tMSB0aGVuIGZyb209MFxuXHR2YXIgZnJvbV8gPSBwcmV2T25DaGFubmVsICsgMTtcblx0dmFyIHRvID0gdG9rZW5JbmRleCAtIDE7XG5cdHJldHVybiB0aGlzLmZpbHRlckZvckNoYW5uZWwoZnJvbV8sIHRvLCBjaGFubmVsKTtcbn07XG5cbkJ1ZmZlcmVkVG9rZW5TdHJlYW0ucHJvdG90eXBlLmZpbHRlckZvckNoYW5uZWwgPSBmdW5jdGlvbihsZWZ0LCByaWdodCwgY2hhbm5lbCkge1xuXHR2YXIgaGlkZGVuID0gW107XG5cdGZvciAodmFyIGkgPSBsZWZ0OyBpIDwgcmlnaHQgKyAxOyBpKyspIHtcblx0XHR2YXIgdCA9IHRoaXMudG9rZW5zW2ldO1xuXHRcdGlmIChjaGFubmVsID09PSAtMSkge1xuXHRcdFx0aWYgKHQuY2hhbm5lbCAhPT0gTGV4ZXIuREVGQVVMVF9UT0tFTl9DSEFOTkVMKSB7XG5cdFx0XHRcdGhpZGRlbi5wdXNoKHQpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodC5jaGFubmVsID09PSBjaGFubmVsKSB7XG5cdFx0XHRoaWRkZW4ucHVzaCh0KTtcblx0XHR9XG5cdH1cblx0aWYgKGhpZGRlbi5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHRyZXR1cm4gaGlkZGVuO1xufTtcblxuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUuZ2V0U291cmNlTmFtZSA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy50b2tlblNvdXJjZS5nZXRTb3VyY2VOYW1lKCk7XG59O1xuXG4vLyBHZXQgdGhlIHRleHQgb2YgYWxsIHRva2VucyBpbiB0aGlzIGJ1ZmZlci4vLy9cbkJ1ZmZlcmVkVG9rZW5TdHJlYW0ucHJvdG90eXBlLmdldFRleHQgPSBmdW5jdGlvbihpbnRlcnZhbCkge1xuXHR0aGlzLmxhenlJbml0KCk7XG5cdHRoaXMuZmlsbCgpO1xuXHRpZiAoaW50ZXJ2YWwgPT09IHVuZGVmaW5lZCB8fCBpbnRlcnZhbCA9PT0gbnVsbCkge1xuXHRcdGludGVydmFsID0gbmV3IEludGVydmFsKDAsIHRoaXMudG9rZW5zLmxlbmd0aCAtIDEpO1xuXHR9XG5cdHZhciBzdGFydCA9IGludGVydmFsLnN0YXJ0O1xuXHRpZiAoc3RhcnQgaW5zdGFuY2VvZiBUb2tlbikge1xuXHRcdHN0YXJ0ID0gc3RhcnQudG9rZW5JbmRleDtcblx0fVxuXHR2YXIgc3RvcCA9IGludGVydmFsLnN0b3A7XG5cdGlmIChzdG9wIGluc3RhbmNlb2YgVG9rZW4pIHtcblx0XHRzdG9wID0gc3RvcC50b2tlbkluZGV4O1xuXHR9XG5cdGlmIChzdGFydCA9PT0gbnVsbCB8fCBzdG9wID09PSBudWxsIHx8IHN0YXJ0IDwgMCB8fCBzdG9wIDwgMCkge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cdGlmIChzdG9wID49IHRoaXMudG9rZW5zLmxlbmd0aCkge1xuXHRcdHN0b3AgPSB0aGlzLnRva2Vucy5sZW5ndGggLSAxO1xuXHR9XG5cdHZhciBzID0gXCJcIjtcblx0Zm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgc3RvcCArIDE7IGkrKykge1xuXHRcdHZhciB0ID0gdGhpcy50b2tlbnNbaV07XG5cdFx0aWYgKHQudHlwZSA9PT0gVG9rZW4uRU9GKSB7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdFx0cyA9IHMgKyB0LnRleHQ7XG5cdH1cblx0cmV0dXJuIHM7XG59O1xuXG4vLyBHZXQgYWxsIHRva2VucyBmcm9tIGxleGVyIHVudGlsIEVPRi8vL1xuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUuZmlsbCA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLmxhenlJbml0KCk7XG5cdHdoaWxlICh0aGlzLmZldGNoKDEwMDApID09PSAxMDAwKSB7XG5cdFx0Y29udGludWU7XG5cdH1cbn07XG5cbmV4cG9ydHMuQnVmZmVyZWRUb2tlblN0cmVhbSA9IEJ1ZmZlcmVkVG9rZW5TdHJlYW07XG4iLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy9cblxudmFyIElucHV0U3RyZWFtID0gcmVxdWlyZSgnLi9JbnB1dFN0cmVhbScpLklucHV0U3RyZWFtO1xuXG52YXIgaXNOb2RlSnMgPSB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgaW1wb3J0U2NyaXB0cyA9PT0gJ3VuZGVmaW5lZCc7XG52YXIgZnMgPSBpc05vZGVKcyA/IHJlcXVpcmUoXCJmc1wiKSA6IG51bGw7XG5cbi8vIFV0aWxpdHkgZnVuY3Rpb25zIHRvIGNyZWF0ZSBJbnB1dFN0cmVhbXMgZnJvbSB2YXJpb3VzIHNvdXJjZXMuXG4vL1xuLy8gQWxsIHJldHVybmVkIElucHV0U3RyZWFtcyBzdXBwb3J0IHRoZSBmdWxsIHJhbmdlIG9mIFVuaWNvZGVcbi8vIHVwIHRvIFUrMTBGRkZGICh0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiBJbnB1dFN0cmVhbSBvbmx5IHN1cHBvcnRzXG4vLyBjb2RlIHBvaW50cyB1cCB0byBVK0ZGRkYpLlxudmFyIENoYXJTdHJlYW1zID0ge1xuICAvLyBDcmVhdGVzIGFuIElucHV0U3RyZWFtIGZyb20gYSBzdHJpbmcuXG4gIGZyb21TdHJpbmc6IGZ1bmN0aW9uKHN0cikge1xuICAgIHJldHVybiBuZXcgSW5wdXRTdHJlYW0oc3RyLCB0cnVlKTtcbiAgfSxcblxuICAvLyBBc3luY2hyb25vdXNseSBjcmVhdGVzIGFuIElucHV0U3RyZWFtIGZyb20gYSBibG9iIGdpdmVuIHRoZVxuICAvLyBlbmNvZGluZyBvZiB0aGUgYnl0ZXMgaW4gdGhhdCBibG9iIChkZWZhdWx0cyB0byAndXRmOCcgaWZcbiAgLy8gZW5jb2RpbmcgaXMgbnVsbCkuXG4gIC8vXG4gIC8vIEludm9rZXMgb25Mb2FkKHJlc3VsdCkgb24gc3VjY2Vzcywgb25FcnJvcihlcnJvcikgb25cbiAgLy8gZmFpbHVyZS5cbiAgZnJvbUJsb2I6IGZ1bmN0aW9uKGJsb2IsIGVuY29kaW5nLCBvbkxvYWQsIG9uRXJyb3IpIHtcbiAgICB2YXIgcmVhZGVyID0gRmlsZVJlYWRlcigpO1xuICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbihlKSB7XG4gICAgICB2YXIgaXMgPSBuZXcgSW5wdXRTdHJlYW0oZS50YXJnZXQucmVzdWx0LCB0cnVlKTtcbiAgICAgIG9uTG9hZChpcyk7XG4gICAgfTtcbiAgICByZWFkZXIub25lcnJvciA9IG9uRXJyb3I7XG4gICAgcmVhZGVyLnJlYWRBc1RleHQoYmxvYiwgZW5jb2RpbmcpO1xuICB9LFxuXG4gIC8vIENyZWF0ZXMgYW4gSW5wdXRTdHJlYW0gZnJvbSBhIEJ1ZmZlciBnaXZlbiB0aGVcbiAgLy8gZW5jb2Rpbmcgb2YgdGhlIGJ5dGVzIGluIHRoYXQgYnVmZmVyIChkZWZhdWx0cyB0byAndXRmOCcgaWZcbiAgLy8gZW5jb2RpbmcgaXMgbnVsbCkuXG4gIGZyb21CdWZmZXI6IGZ1bmN0aW9uKGJ1ZmZlciwgZW5jb2RpbmcpIHtcbiAgICByZXR1cm4gbmV3IElucHV0U3RyZWFtKGJ1ZmZlci50b1N0cmluZyhlbmNvZGluZyksIHRydWUpO1xuICB9LFxuXG4gIC8vIEFzeW5jaHJvbm91c2x5IGNyZWF0ZXMgYW4gSW5wdXRTdHJlYW0gZnJvbSBhIGZpbGUgb24gZGlzayBnaXZlblxuICAvLyB0aGUgZW5jb2Rpbmcgb2YgdGhlIGJ5dGVzIGluIHRoYXQgZmlsZSAoZGVmYXVsdHMgdG8gJ3V0ZjgnIGlmXG4gIC8vIGVuY29kaW5nIGlzIG51bGwpLlxuICAvL1xuICAvLyBJbnZva2VzIGNhbGxiYWNrKGVycm9yLCByZXN1bHQpIG9uIGNvbXBsZXRpb24uXG4gIGZyb21QYXRoOiBmdW5jdGlvbihwYXRoLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgICBmcy5yZWFkRmlsZShwYXRoLCBlbmNvZGluZywgZnVuY3Rpb24oZXJyLCBkYXRhKSB7XG4gICAgICB2YXIgaXMgPSBudWxsO1xuICAgICAgaWYgKGRhdGEgIT09IG51bGwpIHtcbiAgICAgICAgaXMgPSBuZXcgSW5wdXRTdHJlYW0oZGF0YSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICBjYWxsYmFjayhlcnIsIGlzKTtcbiAgICB9KTtcbiAgfSxcblxuICAvLyBTeW5jaHJvbm91c2x5IGNyZWF0ZXMgYW4gSW5wdXRTdHJlYW0gZ2l2ZW4gYSBwYXRoIHRvIGEgZmlsZVxuICAvLyBvbiBkaXNrIGFuZCB0aGUgZW5jb2Rpbmcgb2YgdGhlIGJ5dGVzIGluIHRoYXQgZmlsZSAoZGVmYXVsdHMgdG9cbiAgLy8gJ3V0ZjgnIGlmIGVuY29kaW5nIGlzIG51bGwpLlxuICBmcm9tUGF0aFN5bmM6IGZ1bmN0aW9uKHBhdGgsIGVuY29kaW5nKSB7XG4gICAgdmFyIGRhdGEgPSBmcy5yZWFkRmlsZVN5bmMocGF0aCwgZW5jb2RpbmcpO1xuICAgIHJldHVybiBuZXcgSW5wdXRTdHJlYW0oZGF0YSwgdHJ1ZSk7XG4gIH1cbn07XG5cbmV4cG9ydHMuQ2hhclN0cmVhbXMgPSBDaGFyU3RyZWFtcztcbiIsIi8vXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vL1xuXG4vL1xuLy8gVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBUb2tlbkZhY3Rvcnl9IGNyZWF0ZXNcbi8vIHtAbGluayBDb21tb25Ub2tlbn0gb2JqZWN0cy5cbi8vXG5cbnZhciBDb21tb25Ub2tlbiA9IHJlcXVpcmUoJy4vVG9rZW4nKS5Db21tb25Ub2tlbjtcblxuZnVuY3Rpb24gVG9rZW5GYWN0b3J5KCkge1xuXHRyZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gQ29tbW9uVG9rZW5GYWN0b3J5KGNvcHlUZXh0KSB7XG5cdFRva2VuRmFjdG9yeS5jYWxsKHRoaXMpO1xuICAgIC8vIEluZGljYXRlcyB3aGV0aGVyIHtAbGluayBDb21tb25Ub2tlbi8vc2V0VGV4dH0gc2hvdWxkIGJlIGNhbGxlZCBhZnRlclxuICAgIC8vIGNvbnN0cnVjdGluZyB0b2tlbnMgdG8gZXhwbGljaXRseSBzZXQgdGhlIHRleHQuIFRoaXMgaXMgdXNlZnVsIGZvciBjYXNlc1xuICAgIC8vIHdoZXJlIHRoZSBpbnB1dCBzdHJlYW0gbWlnaHQgbm90IGJlIGFibGUgdG8gcHJvdmlkZSBhcmJpdHJhcnkgc3Vic3RyaW5nc1xuICAgIC8vIG9mIHRleHQgZnJvbSB0aGUgaW5wdXQgYWZ0ZXIgdGhlIGxleGVyIGNyZWF0ZXMgYSB0b2tlbiAoZS5nLiB0aGVcbiAgICAvLyBpbXBsZW1lbnRhdGlvbiBvZiB7QGxpbmsgQ2hhclN0cmVhbS8vZ2V0VGV4dH0gaW5cbiAgICAvLyB7QGxpbmsgVW5idWZmZXJlZENoYXJTdHJlYW19IHRocm93cyBhblxuICAgIC8vIHtAbGluayBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbn0pLiBFeHBsaWNpdGx5IHNldHRpbmcgdGhlIHRva2VuIHRleHRcbiAgICAvLyBhbGxvd3Mge0BsaW5rIFRva2VuLy9nZXRUZXh0fSB0byBiZSBjYWxsZWQgYXQgYW55IHRpbWUgcmVnYXJkbGVzcyBvZiB0aGVcbiAgICAvLyBpbnB1dCBzdHJlYW0gaW1wbGVtZW50YXRpb24uXG4gICAgLy9cbiAgICAvLyA8cD5cbiAgICAvLyBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB7QGNvZGUgZmFsc2V9IHRvIGF2b2lkIHRoZSBwZXJmb3JtYW5jZSBhbmQgbWVtb3J5XG4gICAgLy8gb3ZlcmhlYWQgb2YgY29weWluZyB0ZXh0IGZvciBldmVyeSB0b2tlbiB1bmxlc3MgZXhwbGljaXRseSByZXF1ZXN0ZWQuPC9wPlxuICAgIC8vXG4gICAgdGhpcy5jb3B5VGV4dCA9IGNvcHlUZXh0PT09dW5kZWZpbmVkID8gZmFsc2UgOiBjb3B5VGV4dDtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkNvbW1vblRva2VuRmFjdG9yeS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRva2VuRmFjdG9yeS5wcm90b3R5cGUpO1xuQ29tbW9uVG9rZW5GYWN0b3J5LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbW1vblRva2VuRmFjdG9yeTtcblxuLy9cbi8vIFRoZSBkZWZhdWx0IHtAbGluayBDb21tb25Ub2tlbkZhY3Rvcnl9IGluc3RhbmNlLlxuLy9cbi8vIDxwPlxuLy8gVGhpcyB0b2tlbiBmYWN0b3J5IGRvZXMgbm90IGV4cGxpY2l0bHkgY29weSB0b2tlbiB0ZXh0IHdoZW4gY29uc3RydWN0aW5nXG4vLyB0b2tlbnMuPC9wPlxuLy9cbkNvbW1vblRva2VuRmFjdG9yeS5ERUZBVUxUID0gbmV3IENvbW1vblRva2VuRmFjdG9yeSgpO1xuXG5Db21tb25Ub2tlbkZhY3RvcnkucHJvdG90eXBlLmNyZWF0ZSA9IGZ1bmN0aW9uKHNvdXJjZSwgdHlwZSwgdGV4dCwgY2hhbm5lbCwgc3RhcnQsIHN0b3AsIGxpbmUsIGNvbHVtbikge1xuICAgIHZhciB0ID0gbmV3IENvbW1vblRva2VuKHNvdXJjZSwgdHlwZSwgY2hhbm5lbCwgc3RhcnQsIHN0b3ApO1xuICAgIHQubGluZSA9IGxpbmU7XG4gICAgdC5jb2x1bW4gPSBjb2x1bW47XG4gICAgaWYgKHRleHQgIT09bnVsbCkge1xuICAgICAgICB0LnRleHQgPSB0ZXh0O1xuICAgIH0gZWxzZSBpZiAodGhpcy5jb3B5VGV4dCAmJiBzb3VyY2VbMV0gIT09bnVsbCkge1xuICAgICAgICB0LnRleHQgPSBzb3VyY2VbMV0uZ2V0VGV4dChzdGFydCxzdG9wKTtcbiAgICB9XG4gICAgcmV0dXJuIHQ7XG59O1xuXG5Db21tb25Ub2tlbkZhY3RvcnkucHJvdG90eXBlLmNyZWF0ZVRoaW4gPSBmdW5jdGlvbih0eXBlLCB0ZXh0KSB7XG4gICAgdmFyIHQgPSBuZXcgQ29tbW9uVG9rZW4obnVsbCwgdHlwZSk7XG4gICAgdC50ZXh0ID0gdGV4dDtcbiAgICByZXR1cm4gdDtcbn07XG5cbmV4cG9ydHMuQ29tbW9uVG9rZW5GYWN0b3J5ID0gQ29tbW9uVG9rZW5GYWN0b3J5O1xuIiwiLy9cbi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbi8vL1xuXG4vL1xuLy8gVGhpcyBjbGFzcyBleHRlbmRzIHtAbGluayBCdWZmZXJlZFRva2VuU3RyZWFtfSB3aXRoIGZ1bmN0aW9uYWxpdHkgdG8gZmlsdGVyXG4vLyB0b2tlbiBzdHJlYW1zIHRvIHRva2VucyBvbiBhIHBhcnRpY3VsYXIgY2hhbm5lbCAodG9rZW5zIHdoZXJlXG4vLyB7QGxpbmsgVG9rZW4vL2dldENoYW5uZWx9IHJldHVybnMgYSBwYXJ0aWN1bGFyIHZhbHVlKS5cbi8vXG4vLyA8cD5cbi8vIFRoaXMgdG9rZW4gc3RyZWFtIHByb3ZpZGVzIGFjY2VzcyB0byBhbGwgdG9rZW5zIGJ5IGluZGV4IG9yIHdoZW4gY2FsbGluZ1xuLy8gbWV0aG9kcyBsaWtlIHtAbGluayAvL2dldFRleHR9LiBUaGUgY2hhbm5lbCBmaWx0ZXJpbmcgaXMgb25seSB1c2VkIGZvciBjb2RlXG4vLyBhY2Nlc3NpbmcgdG9rZW5zIHZpYSB0aGUgbG9va2FoZWFkIG1ldGhvZHMge0BsaW5rIC8vTEF9LCB7QGxpbmsgLy9MVH0sIGFuZFxuLy8ge0BsaW5rIC8vTEJ9LjwvcD5cbi8vXG4vLyA8cD5cbi8vIEJ5IGRlZmF1bHQsIHRva2VucyBhcmUgcGxhY2VkIG9uIHRoZSBkZWZhdWx0IGNoYW5uZWxcbi8vICh7QGxpbmsgVG9rZW4vL0RFRkFVTFRfQ0hBTk5FTH0pLCBidXQgbWF5IGJlIHJlYXNzaWduZWQgYnkgdXNpbmcgdGhlXG4vLyB7QGNvZGUgLT5jaGFubmVsKEhJRERFTil9IGxleGVyIGNvbW1hbmQsIG9yIGJ5IHVzaW5nIGFuIGVtYmVkZGVkIGFjdGlvbiB0b1xuLy8gY2FsbCB7QGxpbmsgTGV4ZXIvL3NldENoYW5uZWx9LlxuLy8gPC9wPlxuLy9cbi8vIDxwPlxuLy8gTm90ZTogbGV4ZXIgcnVsZXMgd2hpY2ggdXNlIHRoZSB7QGNvZGUgLT5za2lwfSBsZXhlciBjb21tYW5kIG9yIGNhbGxcbi8vIHtAbGluayBMZXhlci8vc2tpcH0gZG8gbm90IHByb2R1Y2UgdG9rZW5zIGF0IGFsbCwgc28gaW5wdXQgdGV4dCBtYXRjaGVkIGJ5XG4vLyBzdWNoIGEgcnVsZSB3aWxsIG5vdCBiZSBhdmFpbGFibGUgYXMgcGFydCBvZiB0aGUgdG9rZW4gc3RyZWFtLCByZWdhcmRsZXNzIG9mXG4vLyBjaGFubmVsLjwvcD5cbi8vL1xuXG52YXIgVG9rZW4gPSByZXF1aXJlKCcuL1Rva2VuJykuVG9rZW47XG52YXIgQnVmZmVyZWRUb2tlblN0cmVhbSA9IHJlcXVpcmUoJy4vQnVmZmVyZWRUb2tlblN0cmVhbScpLkJ1ZmZlcmVkVG9rZW5TdHJlYW07XG5cbmZ1bmN0aW9uIENvbW1vblRva2VuU3RyZWFtKGxleGVyLCBjaGFubmVsKSB7XG5cdEJ1ZmZlcmVkVG9rZW5TdHJlYW0uY2FsbCh0aGlzLCBsZXhlcik7XG4gICAgdGhpcy5jaGFubmVsID0gY2hhbm5lbD09PXVuZGVmaW5lZCA/IFRva2VuLkRFRkFVTFRfQ0hBTk5FTCA6IGNoYW5uZWw7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkNvbW1vblRva2VuU3RyZWFtLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUpO1xuQ29tbW9uVG9rZW5TdHJlYW0ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29tbW9uVG9rZW5TdHJlYW07XG5cbkNvbW1vblRva2VuU3RyZWFtLnByb3RvdHlwZS5hZGp1c3RTZWVrSW5kZXggPSBmdW5jdGlvbihpKSB7XG4gICAgcmV0dXJuIHRoaXMubmV4dFRva2VuT25DaGFubmVsKGksIHRoaXMuY2hhbm5lbCk7XG59O1xuXG5Db21tb25Ub2tlblN0cmVhbS5wcm90b3R5cGUuTEIgPSBmdW5jdGlvbihrKSB7XG4gICAgaWYgKGs9PT0wIHx8IHRoaXMuaW5kZXgtazwwKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YXIgaSA9IHRoaXMuaW5kZXg7XG4gICAgdmFyIG4gPSAxO1xuICAgIC8vIGZpbmQgayBnb29kIHRva2VucyBsb29raW5nIGJhY2t3YXJkc1xuICAgIHdoaWxlIChuIDw9IGspIHtcbiAgICAgICAgLy8gc2tpcCBvZmYtY2hhbm5lbCB0b2tlbnNcbiAgICAgICAgaSA9IHRoaXMucHJldmlvdXNUb2tlbk9uQ2hhbm5lbChpIC0gMSwgdGhpcy5jaGFubmVsKTtcbiAgICAgICAgbiArPSAxO1xuICAgIH1cbiAgICBpZiAoaSA8IDApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRva2Vuc1tpXTtcbn07XG5cbkNvbW1vblRva2VuU3RyZWFtLnByb3RvdHlwZS5MVCA9IGZ1bmN0aW9uKGspIHtcbiAgICB0aGlzLmxhenlJbml0KCk7XG4gICAgaWYgKGsgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChrIDwgMCkge1xuICAgICAgICByZXR1cm4gdGhpcy5MQigtayk7XG4gICAgfVxuICAgIHZhciBpID0gdGhpcy5pbmRleDtcbiAgICB2YXIgbiA9IDE7IC8vIHdlIGtub3cgdG9rZW5zW3Bvc10gaXMgYSBnb29kIG9uZVxuICAgIC8vIGZpbmQgayBnb29kIHRva2Vuc1xuICAgIHdoaWxlIChuIDwgaykge1xuICAgICAgICAvLyBza2lwIG9mZi1jaGFubmVsIHRva2VucywgYnV0IG1ha2Ugc3VyZSB0byBub3QgbG9vayBwYXN0IEVPRlxuICAgICAgICBpZiAodGhpcy5zeW5jKGkgKyAxKSkge1xuICAgICAgICAgICAgaSA9IHRoaXMubmV4dFRva2VuT25DaGFubmVsKGkgKyAxLCB0aGlzLmNoYW5uZWwpO1xuICAgICAgICB9XG4gICAgICAgIG4gKz0gMTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudG9rZW5zW2ldO1xufTtcblxuLy8gQ291bnQgRU9GIGp1c3Qgb25jZS4vLy9cbkNvbW1vblRva2VuU3RyZWFtLnByb3RvdHlwZS5nZXROdW1iZXJPZk9uQ2hhbm5lbFRva2VucyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBuID0gMDtcbiAgICB0aGlzLmZpbGwoKTtcbiAgICBmb3IgKHZhciBpID0wOyBpPCB0aGlzLnRva2Vucy5sZW5ndGg7aSsrKSB7XG4gICAgICAgIHZhciB0ID0gdGhpcy50b2tlbnNbaV07XG4gICAgICAgIGlmKCB0LmNoYW5uZWw9PT10aGlzLmNoYW5uZWwpIHtcbiAgICAgICAgICAgIG4gKz0gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiggdC50eXBlPT09VG9rZW4uRU9GKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbjtcbn07XG5cbmV4cG9ydHMuQ29tbW9uVG9rZW5TdHJlYW0gPSBDb21tb25Ub2tlblN0cmVhbTsiLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy9cblxuLy9cbi8vICBUaGlzIGlzIGFuIElucHV0U3RyZWFtIHRoYXQgaXMgbG9hZGVkIGZyb20gYSBmaWxlIGFsbCBhdCBvbmNlXG4vLyAgd2hlbiB5b3UgY29uc3RydWN0IHRoZSBvYmplY3QuXG4vL1xudmFyIElucHV0U3RyZWFtID0gcmVxdWlyZSgnLi9JbnB1dFN0cmVhbScpLklucHV0U3RyZWFtO1xudmFyIGlzTm9kZUpzID0gdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGltcG9ydFNjcmlwdHMgPT09ICd1bmRlZmluZWQnO1xudmFyIGZzID0gaXNOb2RlSnMgPyByZXF1aXJlKFwiZnNcIikgOiBudWxsO1xuXG5mdW5jdGlvbiBGaWxlU3RyZWFtKGZpbGVOYW1lLCBkZWNvZGVUb1VuaWNvZGVDb2RlUG9pbnRzKSB7XG5cdHZhciBkYXRhID0gZnMucmVhZEZpbGVTeW5jKGZpbGVOYW1lLCBcInV0ZjhcIik7XG5cdElucHV0U3RyZWFtLmNhbGwodGhpcywgZGF0YSwgZGVjb2RlVG9Vbmljb2RlQ29kZVBvaW50cyk7XG5cdHRoaXMuZmlsZU5hbWUgPSBmaWxlTmFtZTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkZpbGVTdHJlYW0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShJbnB1dFN0cmVhbS5wcm90b3R5cGUpO1xuRmlsZVN0cmVhbS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGaWxlU3RyZWFtO1xuXG5leHBvcnRzLkZpbGVTdHJlYW0gPSBGaWxlU3RyZWFtO1xuIiwiLy9cbi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbi8vXG5cbnZhciBUb2tlbiA9IHJlcXVpcmUoJy4vVG9rZW4nKS5Ub2tlbjtcbnJlcXVpcmUoJy4vcG9seWZpbGxzL2NvZGVwb2ludGF0Jyk7XG5yZXF1aXJlKCcuL3BvbHlmaWxscy9mcm9tY29kZXBvaW50Jyk7XG5cbi8vIFZhY3V1bSBhbGwgaW5wdXQgZnJvbSBhIHN0cmluZyBhbmQgdGhlbiB0cmVhdCBpdCBsaWtlIGEgYnVmZmVyLlxuXG5mdW5jdGlvbiBfbG9hZFN0cmluZyhzdHJlYW0pIHtcblx0c3RyZWFtLl9pbmRleCA9IDA7XG5cdHN0cmVhbS5kYXRhID0gW107XG5cdGlmIChzdHJlYW0uZGVjb2RlVG9Vbmljb2RlQ29kZVBvaW50cykge1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3RyZWFtLnN0cmRhdGEubGVuZ3RoOyApIHtcblx0XHRcdHZhciBjb2RlUG9pbnQgPSBzdHJlYW0uc3RyZGF0YS5jb2RlUG9pbnRBdChpKTtcblx0XHRcdHN0cmVhbS5kYXRhLnB1c2goY29kZVBvaW50KTtcblx0XHRcdGkgKz0gY29kZVBvaW50IDw9IDB4RkZGRiA/IDEgOiAyO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN0cmVhbS5zdHJkYXRhLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgY29kZVVuaXQgPSBzdHJlYW0uc3RyZGF0YS5jaGFyQ29kZUF0KGkpO1xuXHRcdFx0c3RyZWFtLmRhdGEucHVzaChjb2RlVW5pdCk7XG5cdFx0fVxuXHR9XG5cdHN0cmVhbS5fc2l6ZSA9IHN0cmVhbS5kYXRhLmxlbmd0aDtcbn1cblxuLy8gSWYgZGVjb2RlVG9Vbmljb2RlQ29kZVBvaW50cyBpcyB0cnVlLCB0aGUgaW5wdXQgaXMgdHJlYXRlZFxuLy8gYXMgYSBzZXJpZXMgb2YgVW5pY29kZSBjb2RlIHBvaW50cy5cbi8vXG4vLyBPdGhlcndpc2UsIHRoZSBpbnB1dCBpcyB0cmVhdGVkIGFzIGEgc2VyaWVzIG9mIDE2LWJpdCBVVEYtMTYgY29kZVxuLy8gdW5pdHMuXG5mdW5jdGlvbiBJbnB1dFN0cmVhbShkYXRhLCBkZWNvZGVUb1VuaWNvZGVDb2RlUG9pbnRzKSB7XG5cdHRoaXMubmFtZSA9IFwiPGVtcHR5PlwiO1xuXHR0aGlzLnN0cmRhdGEgPSBkYXRhO1xuXHR0aGlzLmRlY29kZVRvVW5pY29kZUNvZGVQb2ludHMgPSBkZWNvZGVUb1VuaWNvZGVDb2RlUG9pbnRzIHx8IGZhbHNlO1xuXHRfbG9hZFN0cmluZyh0aGlzKTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbnB1dFN0cmVhbS5wcm90b3R5cGUsIFwiaW5kZXhcIiwge1xuXHRnZXQgOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5faW5kZXg7XG5cdH1cbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSW5wdXRTdHJlYW0ucHJvdG90eXBlLCBcInNpemVcIiwge1xuXHRnZXQgOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5fc2l6ZTtcblx0fVxufSk7XG5cbi8vIFJlc2V0IHRoZSBzdHJlYW0gc28gdGhhdCBpdCdzIGluIHRoZSBzYW1lIHN0YXRlIGl0IHdhc1xuLy8gd2hlbiB0aGUgb2JqZWN0IHdhcyBjcmVhdGVkICpleGNlcHQqIHRoZSBkYXRhIGFycmF5IGlzIG5vdFxuLy8gdG91Y2hlZC5cbi8vXG5JbnB1dFN0cmVhbS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbigpIHtcblx0dGhpcy5faW5kZXggPSAwO1xufTtcblxuSW5wdXRTdHJlYW0ucHJvdG90eXBlLmNvbnN1bWUgPSBmdW5jdGlvbigpIHtcblx0aWYgKHRoaXMuX2luZGV4ID49IHRoaXMuX3NpemUpIHtcblx0XHQvLyBhc3NlcnQgdGhpcy5MQSgxKSA9PSBUb2tlbi5FT0Zcblx0XHR0aHJvdyAoXCJjYW5ub3QgY29uc3VtZSBFT0ZcIik7XG5cdH1cblx0dGhpcy5faW5kZXggKz0gMTtcbn07XG5cbklucHV0U3RyZWFtLnByb3RvdHlwZS5MQSA9IGZ1bmN0aW9uKG9mZnNldCkge1xuXHRpZiAob2Zmc2V0ID09PSAwKSB7XG5cdFx0cmV0dXJuIDA7IC8vIHVuZGVmaW5lZFxuXHR9XG5cdGlmIChvZmZzZXQgPCAwKSB7XG5cdFx0b2Zmc2V0ICs9IDE7IC8vIGUuZy4sIHRyYW5zbGF0ZSBMQSgtMSkgdG8gdXNlIG9mZnNldD0wXG5cdH1cblx0dmFyIHBvcyA9IHRoaXMuX2luZGV4ICsgb2Zmc2V0IC0gMTtcblx0aWYgKHBvcyA8IDAgfHwgcG9zID49IHRoaXMuX3NpemUpIHsgLy8gaW52YWxpZFxuXHRcdHJldHVybiBUb2tlbi5FT0Y7XG5cdH1cblx0cmV0dXJuIHRoaXMuZGF0YVtwb3NdO1xufTtcblxuSW5wdXRTdHJlYW0ucHJvdG90eXBlLkxUID0gZnVuY3Rpb24ob2Zmc2V0KSB7XG5cdHJldHVybiB0aGlzLkxBKG9mZnNldCk7XG59O1xuXG4vLyBtYXJrL3JlbGVhc2UgZG8gbm90aGluZzsgd2UgaGF2ZSBlbnRpcmUgYnVmZmVyXG5JbnB1dFN0cmVhbS5wcm90b3R5cGUubWFyayA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gLTE7XG59O1xuXG5JbnB1dFN0cmVhbS5wcm90b3R5cGUucmVsZWFzZSA9IGZ1bmN0aW9uKG1hcmtlcikge1xufTtcblxuLy8gY29uc3VtZSgpIGFoZWFkIHVudGlsIHA9PV9pbmRleDsgY2FuJ3QganVzdCBzZXQgcD1faW5kZXggYXMgd2UgbXVzdFxuLy8gdXBkYXRlIGxpbmUgYW5kIGNvbHVtbi4gSWYgd2Ugc2VlayBiYWNrd2FyZHMsIGp1c3Qgc2V0IHBcbi8vXG5JbnB1dFN0cmVhbS5wcm90b3R5cGUuc2VlayA9IGZ1bmN0aW9uKF9pbmRleCkge1xuXHRpZiAoX2luZGV4IDw9IHRoaXMuX2luZGV4KSB7XG5cdFx0dGhpcy5faW5kZXggPSBfaW5kZXg7IC8vIGp1c3QganVtcDsgZG9uJ3QgdXBkYXRlIHN0cmVhbSBzdGF0ZSAobGluZSxcblx0XHRcdFx0XHRcdFx0XHQvLyAuLi4pXG5cdFx0cmV0dXJuO1xuXHR9XG5cdC8vIHNlZWsgZm9yd2FyZFxuXHR0aGlzLl9pbmRleCA9IE1hdGgubWluKF9pbmRleCwgdGhpcy5fc2l6ZSk7XG59O1xuXG5JbnB1dFN0cmVhbS5wcm90b3R5cGUuZ2V0VGV4dCA9IGZ1bmN0aW9uKHN0YXJ0LCBzdG9wKSB7XG5cdGlmIChzdG9wID49IHRoaXMuX3NpemUpIHtcblx0XHRzdG9wID0gdGhpcy5fc2l6ZSAtIDE7XG5cdH1cblx0aWYgKHN0YXJ0ID49IHRoaXMuX3NpemUpIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fSBlbHNlIHtcblx0XHRpZiAodGhpcy5kZWNvZGVUb1VuaWNvZGVDb2RlUG9pbnRzKSB7XG5cdFx0XHR2YXIgcmVzdWx0ID0gXCJcIjtcblx0XHRcdGZvciAodmFyIGkgPSBzdGFydDsgaSA8PSBzdG9wOyBpKyspIHtcblx0XHRcdFx0cmVzdWx0ICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KHRoaXMuZGF0YVtpXSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5zdHJkYXRhLnNsaWNlKHN0YXJ0LCBzdG9wICsgMSk7XG5cdFx0fVxuXHR9XG59O1xuXG5JbnB1dFN0cmVhbS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuc3RyZGF0YTtcbn07XG5cbmV4cG9ydHMuSW5wdXRTdHJlYW0gPSBJbnB1dFN0cmVhbTtcbiIsIi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cblxuLypqc2xpbnQgc21hcnR0YWJzOnRydWUgKi9cblxudmFyIFRva2VuID0gcmVxdWlyZSgnLi9Ub2tlbicpLlRva2VuO1xuXG4vKiBzdG9wIGlzIG5vdCBpbmNsdWRlZCEgKi9cbmZ1bmN0aW9uIEludGVydmFsKHN0YXJ0LCBzdG9wKSB7XG5cdHRoaXMuc3RhcnQgPSBzdGFydDtcblx0dGhpcy5zdG9wID0gc3RvcDtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkludGVydmFsLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uKGl0ZW0pIHtcblx0cmV0dXJuIGl0ZW0gPj0gdGhpcy5zdGFydCAmJiBpdGVtIDwgdGhpcy5zdG9wO1xufTtcblxuSW50ZXJ2YWwucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdGlmKHRoaXMuc3RhcnQ9PT10aGlzLnN0b3AtMSkge1xuXHRcdHJldHVybiB0aGlzLnN0YXJ0LnRvU3RyaW5nKCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHRoaXMuc3RhcnQudG9TdHJpbmcoKSArIFwiLi5cIiArICh0aGlzLnN0b3AtMSkudG9TdHJpbmcoKTtcblx0fVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSW50ZXJ2YWwucHJvdG90eXBlLCBcImxlbmd0aFwiLCB7XG5cdGdldCA6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnN0b3AgLSB0aGlzLnN0YXJ0O1xuXHR9XG59KTtcblxuZnVuY3Rpb24gSW50ZXJ2YWxTZXQoKSB7XG5cdHRoaXMuaW50ZXJ2YWxzID0gbnVsbDtcblx0dGhpcy5yZWFkT25seSA9IGZhbHNlO1xufVxuXG5JbnRlcnZhbFNldC5wcm90b3R5cGUuZmlyc3QgPSBmdW5jdGlvbih2KSB7XG5cdGlmICh0aGlzLmludGVydmFscyA9PT0gbnVsbCB8fCB0aGlzLmludGVydmFscy5sZW5ndGg9PT0wKSB7XG5cdFx0cmV0dXJuIFRva2VuLklOVkFMSURfVFlQRTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdGhpcy5pbnRlcnZhbHNbMF0uc3RhcnQ7XG5cdH1cbn07XG5cbkludGVydmFsU2V0LnByb3RvdHlwZS5hZGRPbmUgPSBmdW5jdGlvbih2KSB7XG5cdHRoaXMuYWRkSW50ZXJ2YWwobmV3IEludGVydmFsKHYsIHYgKyAxKSk7XG59O1xuXG5JbnRlcnZhbFNldC5wcm90b3R5cGUuYWRkUmFuZ2UgPSBmdW5jdGlvbihsLCBoKSB7XG5cdHRoaXMuYWRkSW50ZXJ2YWwobmV3IEludGVydmFsKGwsIGggKyAxKSk7XG59O1xuXG5JbnRlcnZhbFNldC5wcm90b3R5cGUuYWRkSW50ZXJ2YWwgPSBmdW5jdGlvbih2KSB7XG5cdGlmICh0aGlzLmludGVydmFscyA9PT0gbnVsbCkge1xuXHRcdHRoaXMuaW50ZXJ2YWxzID0gW107XG5cdFx0dGhpcy5pbnRlcnZhbHMucHVzaCh2KTtcblx0fSBlbHNlIHtcblx0XHQvLyBmaW5kIGluc2VydCBwb3Ncblx0XHRmb3IgKHZhciBrID0gMDsgayA8IHRoaXMuaW50ZXJ2YWxzLmxlbmd0aDsgaysrKSB7XG5cdFx0XHR2YXIgaSA9IHRoaXMuaW50ZXJ2YWxzW2tdO1xuXHRcdFx0Ly8gZGlzdGluY3QgcmFuZ2UgLT4gaW5zZXJ0XG5cdFx0XHRpZiAodi5zdG9wIDwgaS5zdGFydCkge1xuXHRcdFx0XHR0aGlzLmludGVydmFscy5zcGxpY2UoaywgMCwgdik7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdC8vIGNvbnRpZ3VvdXMgcmFuZ2UgLT4gYWRqdXN0XG5cdFx0XHRlbHNlIGlmICh2LnN0b3AgPT09IGkuc3RhcnQpIHtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbHNba10uc3RhcnQgPSB2LnN0YXJ0O1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHQvLyBvdmVybGFwcGluZyByYW5nZSAtPiBhZGp1c3QgYW5kIHJlZHVjZVxuXHRcdFx0ZWxzZSBpZiAodi5zdGFydCA8PSBpLnN0b3ApIHtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbHNba10gPSBuZXcgSW50ZXJ2YWwoTWF0aC5taW4oaS5zdGFydCwgdi5zdGFydCksIE1hdGgubWF4KGkuc3RvcCwgdi5zdG9wKSk7XG5cdFx0XHRcdHRoaXMucmVkdWNlKGspO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIGdyZWF0ZXIgdGhhbiBhbnkgZXhpc3Rpbmdcblx0XHR0aGlzLmludGVydmFscy5wdXNoKHYpO1xuXHR9XG59O1xuXG5JbnRlcnZhbFNldC5wcm90b3R5cGUuYWRkU2V0ID0gZnVuY3Rpb24ob3RoZXIpIHtcblx0aWYgKG90aGVyLmludGVydmFscyAhPT0gbnVsbCkge1xuXHRcdGZvciAodmFyIGsgPSAwOyBrIDwgb3RoZXIuaW50ZXJ2YWxzLmxlbmd0aDsgaysrKSB7XG5cdFx0XHR2YXIgaSA9IG90aGVyLmludGVydmFsc1trXTtcblx0XHRcdHRoaXMuYWRkSW50ZXJ2YWwobmV3IEludGVydmFsKGkuc3RhcnQsIGkuc3RvcCkpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdGhpcztcbn07XG5cbkludGVydmFsU2V0LnByb3RvdHlwZS5yZWR1Y2UgPSBmdW5jdGlvbihrKSB7XG5cdC8vIG9ubHkgbmVlZCB0byByZWR1Y2UgaWYgayBpcyBub3QgdGhlIGxhc3Rcblx0aWYgKGsgPCB0aGlzLmludGVydmFsc2xlbmd0aCAtIDEpIHtcblx0XHR2YXIgbCA9IHRoaXMuaW50ZXJ2YWxzW2tdO1xuXHRcdHZhciByID0gdGhpcy5pbnRlcnZhbHNbayArIDFdO1xuXHRcdC8vIGlmIHIgY29udGFpbmVkIGluIGxcblx0XHRpZiAobC5zdG9wID49IHIuc3RvcCkge1xuXHRcdFx0dGhpcy5pbnRlcnZhbHMucG9wKGsgKyAxKTtcblx0XHRcdHRoaXMucmVkdWNlKGspO1xuXHRcdH0gZWxzZSBpZiAobC5zdG9wID49IHIuc3RhcnQpIHtcblx0XHRcdHRoaXMuaW50ZXJ2YWxzW2tdID0gbmV3IEludGVydmFsKGwuc3RhcnQsIHIuc3RvcCk7XG5cdFx0XHR0aGlzLmludGVydmFscy5wb3AoayArIDEpO1xuXHRcdH1cblx0fVxufTtcblxuSW50ZXJ2YWxTZXQucHJvdG90eXBlLmNvbXBsZW1lbnQgPSBmdW5jdGlvbihzdGFydCwgc3RvcCkge1xuICAgIHZhciByZXN1bHQgPSBuZXcgSW50ZXJ2YWxTZXQoKTtcbiAgICByZXN1bHQuYWRkSW50ZXJ2YWwobmV3IEludGVydmFsKHN0YXJ0LHN0b3ArMSkpO1xuICAgIGZvcih2YXIgaT0wOyBpPHRoaXMuaW50ZXJ2YWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdC5yZW1vdmVSYW5nZSh0aGlzLmludGVydmFsc1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG5JbnRlcnZhbFNldC5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbihpdGVtKSB7XG5cdGlmICh0aGlzLmludGVydmFscyA9PT0gbnVsbCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBlbHNlIHtcblx0XHRmb3IgKHZhciBrID0gMDsgayA8IHRoaXMuaW50ZXJ2YWxzLmxlbmd0aDsgaysrKSB7XG5cdFx0XHRpZih0aGlzLmludGVydmFsc1trXS5jb250YWlucyhpdGVtKSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSW50ZXJ2YWxTZXQucHJvdG90eXBlLCBcImxlbmd0aFwiLCB7XG5cdGdldCA6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBsZW4gPSAwO1xuXHRcdHRoaXMuaW50ZXJ2YWxzLm1hcChmdW5jdGlvbihpKSB7bGVuICs9IGkubGVuZ3RoO30pO1xuXHRcdHJldHVybiBsZW47XG5cdH1cbn0pO1xuXG5JbnRlcnZhbFNldC5wcm90b3R5cGUucmVtb3ZlUmFuZ2UgPSBmdW5jdGlvbih2KSB7XG4gICAgaWYodi5zdGFydD09PXYuc3RvcC0xKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlT25lKHYuc3RhcnQpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pbnRlcnZhbHMhPT1udWxsKSB7XG4gICAgICAgIHZhciBrID0gMDtcbiAgICAgICAgZm9yKHZhciBuPTA7IG48dGhpcy5pbnRlcnZhbHMubGVuZ3RoOyBuKyspIHtcbiAgICAgICAgICAgIHZhciBpID0gdGhpcy5pbnRlcnZhbHNba107XG4gICAgICAgICAgICAvLyBpbnRlcnZhbHMgYXJlIG9yZGVyZWRcbiAgICAgICAgICAgIGlmICh2LnN0b3A8PWkuc3RhcnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBjaGVjayBmb3IgaW5jbHVkaW5nIHJhbmdlLCBzcGxpdCBpdFxuICAgICAgICAgICAgZWxzZSBpZih2LnN0YXJ0Pmkuc3RhcnQgJiYgdi5zdG9wPGkuc3RvcCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW50ZXJ2YWxzW2tdID0gbmV3IEludGVydmFsKGkuc3RhcnQsIHYuc3RhcnQpO1xuICAgICAgICAgICAgICAgIHZhciB4ID0gbmV3IEludGVydmFsKHYuc3RvcCwgaS5zdG9wKTtcbiAgICAgICAgICAgICAgICB0aGlzLmludGVydmFscy5zcGxpY2UoaywgMCwgeCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY2hlY2sgZm9yIGluY2x1ZGVkIHJhbmdlLCByZW1vdmUgaXRcbiAgICAgICAgICAgIGVsc2UgaWYodi5zdGFydDw9aS5zdGFydCAmJiB2LnN0b3A+PWkuc3RvcCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW50ZXJ2YWxzLnNwbGljZShrLCAxKTtcbiAgICAgICAgICAgICAgICBrID0gayAtIDE7IC8vIG5lZWQgYW5vdGhlciBwYXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBjaGVjayBmb3IgbG93ZXIgYm91bmRhcnlcbiAgICAgICAgICAgIGVsc2UgaWYodi5zdGFydDxpLnN0b3ApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmludGVydmFsc1trXSA9IG5ldyBJbnRlcnZhbChpLnN0YXJ0LCB2LnN0YXJ0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNoZWNrIGZvciB1cHBlciBib3VuZGFyeVxuICAgICAgICAgICAgZWxzZSBpZih2LnN0b3A8aS5zdG9wKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnRlcnZhbHNba10gPSBuZXcgSW50ZXJ2YWwodi5zdG9wLCBpLnN0b3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgayArPSAxO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuSW50ZXJ2YWxTZXQucHJvdG90eXBlLnJlbW92ZU9uZSA9IGZ1bmN0aW9uKHYpIHtcblx0aWYgKHRoaXMuaW50ZXJ2YWxzICE9PSBudWxsKSB7XG5cdFx0Zm9yICh2YXIgayA9IDA7IGsgPCB0aGlzLmludGVydmFscy5sZW5ndGg7IGsrKykge1xuXHRcdFx0dmFyIGkgPSB0aGlzLmludGVydmFsc1trXTtcblx0XHRcdC8vIGludGVydmFscyBpcyBvcmRlcmVkXG5cdFx0XHRpZiAodiA8IGkuc3RhcnQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Ly8gY2hlY2sgZm9yIHNpbmdsZSB2YWx1ZSByYW5nZVxuXHRcdFx0ZWxzZSBpZiAodiA9PT0gaS5zdGFydCAmJiB2ID09PSBpLnN0b3AgLSAxKSB7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWxzLnNwbGljZShrLCAxKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Ly8gY2hlY2sgZm9yIGxvd2VyIGJvdW5kYXJ5XG5cdFx0XHRlbHNlIGlmICh2ID09PSBpLnN0YXJ0KSB7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWxzW2tdID0gbmV3IEludGVydmFsKGkuc3RhcnQgKyAxLCBpLnN0b3ApO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHQvLyBjaGVjayBmb3IgdXBwZXIgYm91bmRhcnlcblx0XHRcdGVsc2UgaWYgKHYgPT09IGkuc3RvcCAtIDEpIHtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbHNba10gPSBuZXcgSW50ZXJ2YWwoaS5zdGFydCwgaS5zdG9wIC0gMSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdC8vIHNwbGl0IGV4aXN0aW5nIHJhbmdlXG5cdFx0XHRlbHNlIGlmICh2IDwgaS5zdG9wIC0gMSkge1xuXHRcdFx0XHR2YXIgeCA9IG5ldyBJbnRlcnZhbChpLnN0YXJ0LCB2KTtcblx0XHRcdFx0aS5zdGFydCA9IHYgKyAxO1xuXHRcdFx0XHR0aGlzLmludGVydmFscy5zcGxpY2UoaywgMCwgeCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbkludGVydmFsU2V0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKGxpdGVyYWxOYW1lcywgc3ltYm9saWNOYW1lcywgZWxlbXNBcmVDaGFyKSB7XG5cdGxpdGVyYWxOYW1lcyA9IGxpdGVyYWxOYW1lcyB8fCBudWxsO1xuXHRzeW1ib2xpY05hbWVzID0gc3ltYm9saWNOYW1lcyB8fCBudWxsO1xuXHRlbGVtc0FyZUNoYXIgPSBlbGVtc0FyZUNoYXIgfHwgZmFsc2U7XG5cdGlmICh0aGlzLmludGVydmFscyA9PT0gbnVsbCkge1xuXHRcdHJldHVybiBcInt9XCI7XG5cdH0gZWxzZSBpZihsaXRlcmFsTmFtZXMhPT1udWxsIHx8IHN5bWJvbGljTmFtZXMhPT1udWxsKSB7XG5cdFx0cmV0dXJuIHRoaXMudG9Ub2tlblN0cmluZyhsaXRlcmFsTmFtZXMsIHN5bWJvbGljTmFtZXMpO1xuXHR9IGVsc2UgaWYoZWxlbXNBcmVDaGFyKSB7XG5cdFx0cmV0dXJuIHRoaXMudG9DaGFyU3RyaW5nKCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHRoaXMudG9JbmRleFN0cmluZygpO1xuXHR9XG59O1xuXG5JbnRlcnZhbFNldC5wcm90b3R5cGUudG9DaGFyU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdHZhciBuYW1lcyA9IFtdO1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaW50ZXJ2YWxzLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIHYgPSB0aGlzLmludGVydmFsc1tpXTtcblx0XHRpZih2LnN0b3A9PT12LnN0YXJ0KzEpIHtcblx0XHRcdGlmICggdi5zdGFydD09PVRva2VuLkVPRiApIHtcblx0XHRcdFx0bmFtZXMucHVzaChcIjxFT0Y+XCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bmFtZXMucHVzaChcIidcIiArIFN0cmluZy5mcm9tQ2hhckNvZGUodi5zdGFydCkgKyBcIidcIik7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdG5hbWVzLnB1c2goXCInXCIgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKHYuc3RhcnQpICsgXCInLi4nXCIgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKHYuc3RvcC0xKSArIFwiJ1wiKTtcblx0XHR9XG5cdH1cblx0aWYgKG5hbWVzLmxlbmd0aCA+IDEpIHtcblx0XHRyZXR1cm4gXCJ7XCIgKyBuYW1lcy5qb2luKFwiLCBcIikgKyBcIn1cIjtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gbmFtZXNbMF07XG5cdH1cbn07XG5cblxuSW50ZXJ2YWxTZXQucHJvdG90eXBlLnRvSW5kZXhTdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0dmFyIG5hbWVzID0gW107XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pbnRlcnZhbHMubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgdiA9IHRoaXMuaW50ZXJ2YWxzW2ldO1xuXHRcdGlmKHYuc3RvcD09PXYuc3RhcnQrMSkge1xuXHRcdFx0aWYgKCB2LnN0YXJ0PT09VG9rZW4uRU9GICkge1xuXHRcdFx0XHRuYW1lcy5wdXNoKFwiPEVPRj5cIik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRuYW1lcy5wdXNoKHYuc3RhcnQudG9TdHJpbmcoKSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdG5hbWVzLnB1c2godi5zdGFydC50b1N0cmluZygpICsgXCIuLlwiICsgKHYuc3RvcC0xKS50b1N0cmluZygpKTtcblx0XHR9XG5cdH1cblx0aWYgKG5hbWVzLmxlbmd0aCA+IDEpIHtcblx0XHRyZXR1cm4gXCJ7XCIgKyBuYW1lcy5qb2luKFwiLCBcIikgKyBcIn1cIjtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gbmFtZXNbMF07XG5cdH1cbn07XG5cblxuSW50ZXJ2YWxTZXQucHJvdG90eXBlLnRvVG9rZW5TdHJpbmcgPSBmdW5jdGlvbihsaXRlcmFsTmFtZXMsIHN5bWJvbGljTmFtZXMpIHtcblx0dmFyIG5hbWVzID0gW107XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pbnRlcnZhbHMubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgdiA9IHRoaXMuaW50ZXJ2YWxzW2ldO1xuXHRcdGZvciAodmFyIGogPSB2LnN0YXJ0OyBqIDwgdi5zdG9wOyBqKyspIHtcblx0XHRcdG5hbWVzLnB1c2godGhpcy5lbGVtZW50TmFtZShsaXRlcmFsTmFtZXMsIHN5bWJvbGljTmFtZXMsIGopKTtcblx0XHR9XG5cdH1cblx0aWYgKG5hbWVzLmxlbmd0aCA+IDEpIHtcblx0XHRyZXR1cm4gXCJ7XCIgKyBuYW1lcy5qb2luKFwiLCBcIikgKyBcIn1cIjtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gbmFtZXNbMF07XG5cdH1cbn07XG5cbkludGVydmFsU2V0LnByb3RvdHlwZS5lbGVtZW50TmFtZSA9IGZ1bmN0aW9uKGxpdGVyYWxOYW1lcywgc3ltYm9saWNOYW1lcywgYSkge1xuXHRpZiAoYSA9PT0gVG9rZW4uRU9GKSB7XG5cdFx0cmV0dXJuIFwiPEVPRj5cIjtcblx0fSBlbHNlIGlmIChhID09PSBUb2tlbi5FUFNJTE9OKSB7XG5cdFx0cmV0dXJuIFwiPEVQU0lMT04+XCI7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGxpdGVyYWxOYW1lc1thXSB8fCBzeW1ib2xpY05hbWVzW2FdO1xuXHR9XG59O1xuXG5leHBvcnRzLkludGVydmFsID0gSW50ZXJ2YWw7XG5leHBvcnRzLkludGVydmFsU2V0ID0gSW50ZXJ2YWxTZXQ7XG4iLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy8vXG5cbnZhciBTZXQgPSByZXF1aXJlKCcuL1V0aWxzJykuU2V0O1xudmFyIEJpdFNldCA9IHJlcXVpcmUoJy4vVXRpbHMnKS5CaXRTZXQ7XG52YXIgVG9rZW4gPSByZXF1aXJlKCcuL1Rva2VuJykuVG9rZW47XG52YXIgQVROQ29uZmlnID0gcmVxdWlyZSgnLi9hdG4vQVROQ29uZmlnJykuQVROQ29uZmlnO1xudmFyIEludGVydmFsID0gcmVxdWlyZSgnLi9JbnRlcnZhbFNldCcpLkludGVydmFsO1xudmFyIEludGVydmFsU2V0ID0gcmVxdWlyZSgnLi9JbnRlcnZhbFNldCcpLkludGVydmFsU2V0O1xudmFyIFJ1bGVTdG9wU3RhdGUgPSByZXF1aXJlKCcuL2F0bi9BVE5TdGF0ZScpLlJ1bGVTdG9wU3RhdGU7XG52YXIgUnVsZVRyYW5zaXRpb24gPSByZXF1aXJlKCcuL2F0bi9UcmFuc2l0aW9uJykuUnVsZVRyYW5zaXRpb247XG52YXIgTm90U2V0VHJhbnNpdGlvbiA9IHJlcXVpcmUoJy4vYXRuL1RyYW5zaXRpb24nKS5Ob3RTZXRUcmFuc2l0aW9uO1xudmFyIFdpbGRjYXJkVHJhbnNpdGlvbiA9IHJlcXVpcmUoJy4vYXRuL1RyYW5zaXRpb24nKS5XaWxkY2FyZFRyYW5zaXRpb247XG52YXIgQWJzdHJhY3RQcmVkaWNhdGVUcmFuc2l0aW9uID0gcmVxdWlyZSgnLi9hdG4vVHJhbnNpdGlvbicpLkFic3RyYWN0UHJlZGljYXRlVHJhbnNpdGlvbjtcblxudmFyIHBjID0gcmVxdWlyZSgnLi9QcmVkaWN0aW9uQ29udGV4dCcpO1xudmFyIHByZWRpY3Rpb25Db250ZXh0RnJvbVJ1bGVDb250ZXh0ID0gcGMucHJlZGljdGlvbkNvbnRleHRGcm9tUnVsZUNvbnRleHQ7XG52YXIgUHJlZGljdGlvbkNvbnRleHQgPSBwYy5QcmVkaWN0aW9uQ29udGV4dDtcbnZhciBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dCA9IHBjLlNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0O1xuXG5mdW5jdGlvbiBMTDFBbmFseXplciAoYXRuKSB7XG4gICAgdGhpcy5hdG4gPSBhdG47XG59XG5cbi8vKiBTcGVjaWFsIHZhbHVlIGFkZGVkIHRvIHRoZSBsb29rYWhlYWQgc2V0cyB0byBpbmRpY2F0ZSB0aGF0IHdlIGhpdFxuLy8gIGEgcHJlZGljYXRlIGR1cmluZyBhbmFseXNpcyBpZiB7QGNvZGUgc2VlVGhydVByZWRzPT1mYWxzZX0uXG4vLy9cbkxMMUFuYWx5emVyLkhJVF9QUkVEID0gVG9rZW4uSU5WQUxJRF9UWVBFO1xuXG5cbi8vKlxuLy8gQ2FsY3VsYXRlcyB0aGUgU0xMKDEpIGV4cGVjdGVkIGxvb2thaGVhZCBzZXQgZm9yIGVhY2ggb3V0Z29pbmcgdHJhbnNpdGlvblxuLy8gb2YgYW4ge0BsaW5rIEFUTlN0YXRlfS4gVGhlIHJldHVybmVkIGFycmF5IGhhcyBvbmUgZWxlbWVudCBmb3IgZWFjaFxuLy8gb3V0Z29pbmcgdHJhbnNpdGlvbiBpbiB7QGNvZGUgc30uIElmIHRoZSBjbG9zdXJlIGZyb20gdHJhbnNpdGlvblxuLy8gPGVtPmk8L2VtPiBsZWFkcyB0byBhIHNlbWFudGljIHByZWRpY2F0ZSBiZWZvcmUgbWF0Y2hpbmcgYSBzeW1ib2wsIHRoZVxuLy8gZWxlbWVudCBhdCBpbmRleCA8ZW0+aTwvZW0+IG9mIHRoZSByZXN1bHQgd2lsbCBiZSB7QGNvZGUgbnVsbH0uXG4vL1xuLy8gQHBhcmFtIHMgdGhlIEFUTiBzdGF0ZVxuLy8gQHJldHVybiB0aGUgZXhwZWN0ZWQgc3ltYm9scyBmb3IgZWFjaCBvdXRnb2luZyB0cmFuc2l0aW9uIG9mIHtAY29kZSBzfS5cbi8vL1xuTEwxQW5hbHl6ZXIucHJvdG90eXBlLmdldERlY2lzaW9uTG9va2FoZWFkID0gZnVuY3Rpb24ocykge1xuICAgIGlmIChzID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YXIgY291bnQgPSBzLnRyYW5zaXRpb25zLmxlbmd0aDtcbiAgICB2YXIgbG9vayA9IFtdO1xuICAgIGZvcih2YXIgYWx0PTA7IGFsdDwgY291bnQ7IGFsdCsrKSB7XG4gICAgICAgIGxvb2tbYWx0XSA9IG5ldyBJbnRlcnZhbFNldCgpO1xuICAgICAgICB2YXIgbG9va0J1c3kgPSBuZXcgU2V0KCk7XG4gICAgICAgIHZhciBzZWVUaHJ1UHJlZHMgPSBmYWxzZTsgLy8gZmFpbCB0byBnZXQgbG9va2FoZWFkIHVwb24gcHJlZFxuICAgICAgICB0aGlzLl9MT09LKHMudHJhbnNpdGlvbihhbHQpLnRhcmdldCwgbnVsbCwgUHJlZGljdGlvbkNvbnRleHQuRU1QVFksXG4gICAgICAgICAgICAgIGxvb2tbYWx0XSwgbG9va0J1c3ksIG5ldyBCaXRTZXQoKSwgc2VlVGhydVByZWRzLCBmYWxzZSk7XG4gICAgICAgIC8vIFdpcGUgb3V0IGxvb2thaGVhZCBmb3IgdGhpcyBhbHRlcm5hdGl2ZSBpZiB3ZSBmb3VuZCBub3RoaW5nXG4gICAgICAgIC8vIG9yIHdlIGhhZCBhIHByZWRpY2F0ZSB3aGVuIHdlICFzZWVUaHJ1UHJlZHNcbiAgICAgICAgaWYgKGxvb2tbYWx0XS5sZW5ndGg9PT0wIHx8IGxvb2tbYWx0XS5jb250YWlucyhMTDFBbmFseXplci5ISVRfUFJFRCkpIHtcbiAgICAgICAgICAgIGxvb2tbYWx0XSA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGxvb2s7XG59O1xuXG4vLypcbi8vIENvbXB1dGUgc2V0IG9mIHRva2VucyB0aGF0IGNhbiBmb2xsb3cge0Bjb2RlIHN9IGluIHRoZSBBVE4gaW4gdGhlXG4vLyBzcGVjaWZpZWQge0Bjb2RlIGN0eH0uXG4vL1xuLy8gPHA+SWYge0Bjb2RlIGN0eH0gaXMge0Bjb2RlIG51bGx9IGFuZCB0aGUgZW5kIG9mIHRoZSBydWxlIGNvbnRhaW5pbmdcbi8vIHtAY29kZSBzfSBpcyByZWFjaGVkLCB7QGxpbmsgVG9rZW4vL0VQU0lMT059IGlzIGFkZGVkIHRvIHRoZSByZXN1bHQgc2V0LlxuLy8gSWYge0Bjb2RlIGN0eH0gaXMgbm90IHtAY29kZSBudWxsfSBhbmQgdGhlIGVuZCBvZiB0aGUgb3V0ZXJtb3N0IHJ1bGUgaXNcbi8vIHJlYWNoZWQsIHtAbGluayBUb2tlbi8vRU9GfSBpcyBhZGRlZCB0byB0aGUgcmVzdWx0IHNldC48L3A+XG4vL1xuLy8gQHBhcmFtIHMgdGhlIEFUTiBzdGF0ZVxuLy8gQHBhcmFtIHN0b3BTdGF0ZSB0aGUgQVROIHN0YXRlIHRvIHN0b3AgYXQuIFRoaXMgY2FuIGJlIGFcbi8vIHtAbGluayBCbG9ja0VuZFN0YXRlfSB0byBkZXRlY3QgZXBzaWxvbiBwYXRocyB0aHJvdWdoIGEgY2xvc3VyZS5cbi8vIEBwYXJhbSBjdHggdGhlIGNvbXBsZXRlIHBhcnNlciBjb250ZXh0LCBvciB7QGNvZGUgbnVsbH0gaWYgdGhlIGNvbnRleHRcbi8vIHNob3VsZCBiZSBpZ25vcmVkXG4vL1xuLy8gQHJldHVybiBUaGUgc2V0IG9mIHRva2VucyB0aGF0IGNhbiBmb2xsb3cge0Bjb2RlIHN9IGluIHRoZSBBVE4gaW4gdGhlXG4vLyBzcGVjaWZpZWQge0Bjb2RlIGN0eH0uXG4vLy9cbkxMMUFuYWx5emVyLnByb3RvdHlwZS5MT09LID0gZnVuY3Rpb24ocywgc3RvcFN0YXRlLCBjdHgpIHtcbiAgICB2YXIgciA9IG5ldyBJbnRlcnZhbFNldCgpO1xuICAgIHZhciBzZWVUaHJ1UHJlZHMgPSB0cnVlOyAvLyBpZ25vcmUgcHJlZHM7IGdldCBhbGwgbG9va2FoZWFkXG5cdGN0eCA9IGN0eCB8fCBudWxsO1xuICAgIHZhciBsb29rQ29udGV4dCA9IGN0eCE9PW51bGwgPyBwcmVkaWN0aW9uQ29udGV4dEZyb21SdWxlQ29udGV4dChzLmF0biwgY3R4KSA6IG51bGw7XG4gICAgdGhpcy5fTE9PSyhzLCBzdG9wU3RhdGUsIGxvb2tDb250ZXh0LCByLCBuZXcgU2V0KCksIG5ldyBCaXRTZXQoKSwgc2VlVGhydVByZWRzLCB0cnVlKTtcbiAgICByZXR1cm4gcjtcbn07XG5cbi8vKlxuLy8gQ29tcHV0ZSBzZXQgb2YgdG9rZW5zIHRoYXQgY2FuIGZvbGxvdyB7QGNvZGUgc30gaW4gdGhlIEFUTiBpbiB0aGVcbi8vIHNwZWNpZmllZCB7QGNvZGUgY3R4fS5cbi8vXG4vLyA8cD5JZiB7QGNvZGUgY3R4fSBpcyB7QGNvZGUgbnVsbH0gYW5kIHtAY29kZSBzdG9wU3RhdGV9IG9yIHRoZSBlbmQgb2YgdGhlXG4vLyBydWxlIGNvbnRhaW5pbmcge0Bjb2RlIHN9IGlzIHJlYWNoZWQsIHtAbGluayBUb2tlbi8vRVBTSUxPTn0gaXMgYWRkZWQgdG9cbi8vIHRoZSByZXN1bHQgc2V0LiBJZiB7QGNvZGUgY3R4fSBpcyBub3Qge0Bjb2RlIG51bGx9IGFuZCB7QGNvZGUgYWRkRU9GfSBpc1xuLy8ge0Bjb2RlIHRydWV9IGFuZCB7QGNvZGUgc3RvcFN0YXRlfSBvciB0aGUgZW5kIG9mIHRoZSBvdXRlcm1vc3QgcnVsZSBpc1xuLy8gcmVhY2hlZCwge0BsaW5rIFRva2VuLy9FT0Z9IGlzIGFkZGVkIHRvIHRoZSByZXN1bHQgc2V0LjwvcD5cbi8vXG4vLyBAcGFyYW0gcyB0aGUgQVROIHN0YXRlLlxuLy8gQHBhcmFtIHN0b3BTdGF0ZSB0aGUgQVROIHN0YXRlIHRvIHN0b3AgYXQuIFRoaXMgY2FuIGJlIGFcbi8vIHtAbGluayBCbG9ja0VuZFN0YXRlfSB0byBkZXRlY3QgZXBzaWxvbiBwYXRocyB0aHJvdWdoIGEgY2xvc3VyZS5cbi8vIEBwYXJhbSBjdHggVGhlIG91dGVyIGNvbnRleHQsIG9yIHtAY29kZSBudWxsfSBpZiB0aGUgb3V0ZXIgY29udGV4dCBzaG91bGRcbi8vIG5vdCBiZSB1c2VkLlxuLy8gQHBhcmFtIGxvb2sgVGhlIHJlc3VsdCBsb29rYWhlYWQgc2V0LlxuLy8gQHBhcmFtIGxvb2tCdXN5IEEgc2V0IHVzZWQgZm9yIHByZXZlbnRpbmcgZXBzaWxvbiBjbG9zdXJlcyBpbiB0aGUgQVROXG4vLyBmcm9tIGNhdXNpbmcgYSBzdGFjayBvdmVyZmxvdy4gT3V0c2lkZSBjb2RlIHNob3VsZCBwYXNzXG4vLyB7QGNvZGUgbmV3IFNldDxBVE5Db25maWc+fSBmb3IgdGhpcyBhcmd1bWVudC5cbi8vIEBwYXJhbSBjYWxsZWRSdWxlU3RhY2sgQSBzZXQgdXNlZCBmb3IgcHJldmVudGluZyBsZWZ0IHJlY3Vyc2lvbiBpbiB0aGVcbi8vIEFUTiBmcm9tIGNhdXNpbmcgYSBzdGFjayBvdmVyZmxvdy4gT3V0c2lkZSBjb2RlIHNob3VsZCBwYXNzXG4vLyB7QGNvZGUgbmV3IEJpdFNldCgpfSBmb3IgdGhpcyBhcmd1bWVudC5cbi8vIEBwYXJhbSBzZWVUaHJ1UHJlZHMge0Bjb2RlIHRydWV9IHRvIHRydWUgc2VtYW50aWMgcHJlZGljYXRlcyBhc1xuLy8gaW1wbGljaXRseSB7QGNvZGUgdHJ1ZX0gYW5kIFwic2VlIHRocm91Z2ggdGhlbVwiLCBvdGhlcndpc2Uge0Bjb2RlIGZhbHNlfVxuLy8gdG8gdHJlYXQgc2VtYW50aWMgcHJlZGljYXRlcyBhcyBvcGFxdWUgYW5kIGFkZCB7QGxpbmsgLy9ISVRfUFJFRH0gdG8gdGhlXG4vLyByZXN1bHQgaWYgb25lIGlzIGVuY291bnRlcmVkLlxuLy8gQHBhcmFtIGFkZEVPRiBBZGQge0BsaW5rIFRva2VuLy9FT0Z9IHRvIHRoZSByZXN1bHQgaWYgdGhlIGVuZCBvZiB0aGVcbi8vIG91dGVybW9zdCBjb250ZXh0IGlzIHJlYWNoZWQuIFRoaXMgcGFyYW1ldGVyIGhhcyBubyBlZmZlY3QgaWYge0Bjb2RlIGN0eH1cbi8vIGlzIHtAY29kZSBudWxsfS5cbi8vL1xuTEwxQW5hbHl6ZXIucHJvdG90eXBlLl9MT09LID0gZnVuY3Rpb24ocywgc3RvcFN0YXRlICwgY3R4LCBsb29rLCBsb29rQnVzeSwgY2FsbGVkUnVsZVN0YWNrLCBzZWVUaHJ1UHJlZHMsIGFkZEVPRikge1xuICAgIHZhciBjID0gbmV3IEFUTkNvbmZpZyh7c3RhdGU6cywgYWx0OjAsIGNvbnRleHQ6IGN0eH0sIG51bGwpO1xuICAgIGlmIChsb29rQnVzeS5jb250YWlucyhjKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGxvb2tCdXN5LmFkZChjKTtcbiAgICBpZiAocyA9PT0gc3RvcFN0YXRlKSB7XG4gICAgICAgIGlmIChjdHggPT09bnVsbCkge1xuICAgICAgICAgICAgbG9vay5hZGRPbmUoVG9rZW4uRVBTSUxPTik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSBpZiAoY3R4LmlzRW1wdHkoKSAmJiBhZGRFT0YpIHtcbiAgICAgICAgICAgIGxvb2suYWRkT25lKFRva2VuLkVPRik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHMgaW5zdGFuY2VvZiBSdWxlU3RvcFN0YXRlICkge1xuICAgICAgICBpZiAoY3R4ID09PW51bGwpIHtcbiAgICAgICAgICAgIGxvb2suYWRkT25lKFRva2VuLkVQU0lMT04pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2UgaWYgKGN0eC5pc0VtcHR5KCkgJiYgYWRkRU9GKSB7XG4gICAgICAgICAgICBsb29rLmFkZE9uZShUb2tlbi5FT0YpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdHggIT09IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZKSB7XG4gICAgICAgICAgICAvLyBydW4gdGhydSBhbGwgcG9zc2libGUgc3RhY2sgdG9wcyBpbiBjdHhcbiAgICAgICAgICAgIGZvcih2YXIgaT0wOyBpPGN0eC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciByZXR1cm5TdGF0ZSA9IHRoaXMuYXRuLnN0YXRlc1tjdHguZ2V0UmV0dXJuU3RhdGUoaSldO1xuICAgICAgICAgICAgICAgIHZhciByZW1vdmVkID0gY2FsbGVkUnVsZVN0YWNrLmNvbnRhaW5zKHJldHVyblN0YXRlLnJ1bGVJbmRleCk7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGVkUnVsZVN0YWNrLnJlbW92ZShyZXR1cm5TdGF0ZS5ydWxlSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9MT09LKHJldHVyblN0YXRlLCBzdG9wU3RhdGUsIGN0eC5nZXRQYXJlbnQoaSksIGxvb2ssIGxvb2tCdXN5LCBjYWxsZWRSdWxlU3RhY2ssIHNlZVRocnVQcmVkcywgYWRkRU9GKTtcbiAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVtb3ZlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGVkUnVsZVN0YWNrLmFkZChyZXR1cm5TdGF0ZS5ydWxlSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvcih2YXIgaj0wOyBqPHMudHJhbnNpdGlvbnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIHQgPSBzLnRyYW5zaXRpb25zW2pdO1xuICAgICAgICBpZiAodC5jb25zdHJ1Y3RvciA9PT0gUnVsZVRyYW5zaXRpb24pIHtcbiAgICAgICAgICAgIGlmIChjYWxsZWRSdWxlU3RhY2suY29udGFpbnModC50YXJnZXQucnVsZUluZGV4KSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIG5ld0NvbnRleHQgPSBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dC5jcmVhdGUoY3R4LCB0LmZvbGxvd1N0YXRlLnN0YXRlTnVtYmVyKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY2FsbGVkUnVsZVN0YWNrLmFkZCh0LnRhcmdldC5ydWxlSW5kZXgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX0xPT0sodC50YXJnZXQsIHN0b3BTdGF0ZSwgbmV3Q29udGV4dCwgbG9vaywgbG9va0J1c3ksIGNhbGxlZFJ1bGVTdGFjaywgc2VlVGhydVByZWRzLCBhZGRFT0YpO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICBjYWxsZWRSdWxlU3RhY2sucmVtb3ZlKHQudGFyZ2V0LnJ1bGVJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodCBpbnN0YW5jZW9mIEFic3RyYWN0UHJlZGljYXRlVHJhbnNpdGlvbiApIHtcbiAgICAgICAgICAgIGlmIChzZWVUaHJ1UHJlZHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9MT09LKHQudGFyZ2V0LCBzdG9wU3RhdGUsIGN0eCwgbG9vaywgbG9va0J1c3ksIGNhbGxlZFJ1bGVTdGFjaywgc2VlVGhydVByZWRzLCBhZGRFT0YpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsb29rLmFkZE9uZShMTDFBbmFseXplci5ISVRfUFJFRCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiggdC5pc0Vwc2lsb24pIHtcbiAgICAgICAgICAgIHRoaXMuX0xPT0sodC50YXJnZXQsIHN0b3BTdGF0ZSwgY3R4LCBsb29rLCBsb29rQnVzeSwgY2FsbGVkUnVsZVN0YWNrLCBzZWVUaHJ1UHJlZHMsIGFkZEVPRik7XG4gICAgICAgIH0gZWxzZSBpZiAodC5jb25zdHJ1Y3RvciA9PT0gV2lsZGNhcmRUcmFuc2l0aW9uKSB7XG4gICAgICAgICAgICBsb29rLmFkZFJhbmdlKCBUb2tlbi5NSU5fVVNFUl9UT0tFTl9UWVBFLCB0aGlzLmF0bi5tYXhUb2tlblR5cGUgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBzZXQgPSB0LmxhYmVsO1xuICAgICAgICAgICAgaWYgKHNldCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmICh0IGluc3RhbmNlb2YgTm90U2V0VHJhbnNpdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBzZXQgPSBzZXQuY29tcGxlbWVudChUb2tlbi5NSU5fVVNFUl9UT0tFTl9UWVBFLCB0aGlzLmF0bi5tYXhUb2tlblR5cGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsb29rLmFkZFNldChzZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuZXhwb3J0cy5MTDFBbmFseXplciA9IExMMUFuYWx5emVyO1xuXG4iLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vLy9cblxuLy8gQSBsZXhlciBpcyByZWNvZ25pemVyIHRoYXQgZHJhd3MgaW5wdXQgc3ltYm9scyBmcm9tIGEgY2hhcmFjdGVyIHN0cmVhbS5cbi8vICBsZXhlciBncmFtbWFycyByZXN1bHQgaW4gYSBzdWJjbGFzcyBvZiB0aGlzIG9iamVjdC4gQSBMZXhlciBvYmplY3Rcbi8vICB1c2VzIHNpbXBsaWZpZWQgbWF0Y2goKSBhbmQgZXJyb3IgcmVjb3ZlcnkgbWVjaGFuaXNtcyBpbiB0aGUgaW50ZXJlc3Qgb2Ygc3BlZWQuXG5cbnZhciBUb2tlbiA9IHJlcXVpcmUoJy4vVG9rZW4nKS5Ub2tlbjtcbnZhciBSZWNvZ25pemVyID0gcmVxdWlyZSgnLi9SZWNvZ25pemVyJykuUmVjb2duaXplcjtcbnZhciBDb21tb25Ub2tlbkZhY3RvcnkgPSByZXF1aXJlKCcuL0NvbW1vblRva2VuRmFjdG9yeScpLkNvbW1vblRva2VuRmFjdG9yeTtcbnZhciBSZWNvZ25pdGlvbkV4Y2VwdGlvbiAgPSByZXF1aXJlKCcuL2Vycm9yL0Vycm9ycycpLlJlY29nbml0aW9uRXhjZXB0aW9uO1xudmFyIExleGVyTm9WaWFibGVBbHRFeGNlcHRpb24gPSByZXF1aXJlKCcuL2Vycm9yL0Vycm9ycycpLkxleGVyTm9WaWFibGVBbHRFeGNlcHRpb247XG5cbmZ1bmN0aW9uIFRva2VuU291cmNlKCkge1xuXHRyZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gTGV4ZXIoaW5wdXQpIHtcblx0UmVjb2duaXplci5jYWxsKHRoaXMpO1xuXHR0aGlzLl9pbnB1dCA9IGlucHV0O1xuXHR0aGlzLl9mYWN0b3J5ID0gQ29tbW9uVG9rZW5GYWN0b3J5LkRFRkFVTFQ7XG5cdHRoaXMuX3Rva2VuRmFjdG9yeVNvdXJjZVBhaXIgPSBbIHRoaXMsIGlucHV0IF07XG5cblx0dGhpcy5faW50ZXJwID0gbnVsbDsgLy8gY2hpbGQgY2xhc3NlcyBtdXN0IHBvcHVsYXRlIHRoaXNcblxuXHQvLyBUaGUgZ29hbCBvZiBhbGwgbGV4ZXIgcnVsZXMvbWV0aG9kcyBpcyB0byBjcmVhdGUgYSB0b2tlbiBvYmplY3QuXG5cdC8vIHRoaXMgaXMgYW4gaW5zdGFuY2UgdmFyaWFibGUgYXMgbXVsdGlwbGUgcnVsZXMgbWF5IGNvbGxhYm9yYXRlIHRvXG5cdC8vIGNyZWF0ZSBhIHNpbmdsZSB0b2tlbi4gbmV4dFRva2VuIHdpbGwgcmV0dXJuIHRoaXMgb2JqZWN0IGFmdGVyXG5cdC8vIG1hdGNoaW5nIGxleGVyIHJ1bGUocykuIElmIHlvdSBzdWJjbGFzcyB0byBhbGxvdyBtdWx0aXBsZSB0b2tlblxuXHQvLyBlbWlzc2lvbnMsIHRoZW4gc2V0IHRoaXMgdG8gdGhlIGxhc3QgdG9rZW4gdG8gYmUgbWF0Y2hlZCBvclxuXHQvLyBzb21ldGhpbmcgbm9ubnVsbCBzbyB0aGF0IHRoZSBhdXRvIHRva2VuIGVtaXQgbWVjaGFuaXNtIHdpbGwgbm90XG5cdC8vIGVtaXQgYW5vdGhlciB0b2tlbi5cblx0dGhpcy5fdG9rZW4gPSBudWxsO1xuXG5cdC8vIFdoYXQgY2hhcmFjdGVyIGluZGV4IGluIHRoZSBzdHJlYW0gZGlkIHRoZSBjdXJyZW50IHRva2VuIHN0YXJ0IGF0P1xuXHQvLyBOZWVkZWQsIGZvciBleGFtcGxlLCB0byBnZXQgdGhlIHRleHQgZm9yIGN1cnJlbnQgdG9rZW4uIFNldCBhdFxuXHQvLyB0aGUgc3RhcnQgb2YgbmV4dFRva2VuLlxuXHR0aGlzLl90b2tlblN0YXJ0Q2hhckluZGV4ID0gLTE7XG5cblx0Ly8gVGhlIGxpbmUgb24gd2hpY2ggdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgdG9rZW4gcmVzaWRlcy8vL1xuXHR0aGlzLl90b2tlblN0YXJ0TGluZSA9IC0xO1xuXG5cdC8vIFRoZSBjaGFyYWN0ZXIgcG9zaXRpb24gb2YgZmlyc3QgY2hhcmFjdGVyIHdpdGhpbiB0aGUgbGluZS8vL1xuXHR0aGlzLl90b2tlblN0YXJ0Q29sdW1uID0gLTE7XG5cblx0Ly8gT25jZSB3ZSBzZWUgRU9GIG9uIGNoYXIgc3RyZWFtLCBuZXh0IHRva2VuIHdpbGwgYmUgRU9GLlxuXHQvLyBJZiB5b3UgaGF2ZSBET05FIDogRU9GIDsgdGhlbiB5b3Ugc2VlIERPTkUgRU9GLlxuXHR0aGlzLl9oaXRFT0YgPSBmYWxzZTtcblxuXHQvLyBUaGUgY2hhbm5lbCBudW1iZXIgZm9yIHRoZSBjdXJyZW50IHRva2VuLy8vXG5cdHRoaXMuX2NoYW5uZWwgPSBUb2tlbi5ERUZBVUxUX0NIQU5ORUw7XG5cblx0Ly8gVGhlIHRva2VuIHR5cGUgZm9yIHRoZSBjdXJyZW50IHRva2VuLy8vXG5cdHRoaXMuX3R5cGUgPSBUb2tlbi5JTlZBTElEX1RZUEU7XG5cblx0dGhpcy5fbW9kZVN0YWNrID0gW107XG5cdHRoaXMuX21vZGUgPSBMZXhlci5ERUZBVUxUX01PREU7XG5cblx0Ly8gWW91IGNhbiBzZXQgdGhlIHRleHQgZm9yIHRoZSBjdXJyZW50IHRva2VuIHRvIG92ZXJyaWRlIHdoYXQgaXMgaW5cblx0Ly8gdGhlIGlucHV0IGNoYXIgYnVmZmVyLiBVc2Ugc2V0VGV4dCgpIG9yIGNhbiBzZXQgdGhpcyBpbnN0YW5jZSB2YXIuXG5cdC8vIC9cblx0dGhpcy5fdGV4dCA9IG51bGw7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbkxleGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUmVjb2duaXplci5wcm90b3R5cGUpO1xuTGV4ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTGV4ZXI7XG5cbkxleGVyLkRFRkFVTFRfTU9ERSA9IDA7XG5MZXhlci5NT1JFID0gLTI7XG5MZXhlci5TS0lQID0gLTM7XG5cbkxleGVyLkRFRkFVTFRfVE9LRU5fQ0hBTk5FTCA9IFRva2VuLkRFRkFVTFRfQ0hBTk5FTDtcbkxleGVyLkhJRERFTiA9IFRva2VuLkhJRERFTl9DSEFOTkVMO1xuTGV4ZXIuTUlOX0NIQVJfVkFMVUUgPSAweDAwMDA7XG5MZXhlci5NQVhfQ0hBUl9WQUxVRSA9IDB4MTBGRkZGO1xuXG5MZXhlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbigpIHtcblx0Ly8gd2FjayBMZXhlciBzdGF0ZSB2YXJpYWJsZXNcblx0aWYgKHRoaXMuX2lucHV0ICE9PSBudWxsKSB7XG5cdFx0dGhpcy5faW5wdXQuc2VlaygwKTsgLy8gcmV3aW5kIHRoZSBpbnB1dFxuXHR9XG5cdHRoaXMuX3Rva2VuID0gbnVsbDtcblx0dGhpcy5fdHlwZSA9IFRva2VuLklOVkFMSURfVFlQRTtcblx0dGhpcy5fY2hhbm5lbCA9IFRva2VuLkRFRkFVTFRfQ0hBTk5FTDtcblx0dGhpcy5fdG9rZW5TdGFydENoYXJJbmRleCA9IC0xO1xuXHR0aGlzLl90b2tlblN0YXJ0Q29sdW1uID0gLTE7XG5cdHRoaXMuX3Rva2VuU3RhcnRMaW5lID0gLTE7XG5cdHRoaXMuX3RleHQgPSBudWxsO1xuXG5cdHRoaXMuX2hpdEVPRiA9IGZhbHNlO1xuXHR0aGlzLl9tb2RlID0gTGV4ZXIuREVGQVVMVF9NT0RFO1xuXHR0aGlzLl9tb2RlU3RhY2sgPSBbXTtcblxuXHR0aGlzLl9pbnRlcnAucmVzZXQoKTtcbn07XG5cbi8vIFJldHVybiBhIHRva2VuIGZyb20gdGhpcyBzb3VyY2U7IGkuZS4sIG1hdGNoIGEgdG9rZW4gb24gdGhlIGNoYXIgc3RyZWFtLlxuTGV4ZXIucHJvdG90eXBlLm5leHRUb2tlbiA9IGZ1bmN0aW9uKCkge1xuXHRpZiAodGhpcy5faW5wdXQgPT09IG51bGwpIHtcblx0XHR0aHJvdyBcIm5leHRUb2tlbiByZXF1aXJlcyBhIG5vbi1udWxsIGlucHV0IHN0cmVhbS5cIjtcblx0fVxuXG5cdC8vIE1hcmsgc3RhcnQgbG9jYXRpb24gaW4gY2hhciBzdHJlYW0gc28gdW5idWZmZXJlZCBzdHJlYW1zIGFyZVxuXHQvLyBndWFyYW50ZWVkIGF0IGxlYXN0IGhhdmUgdGV4dCBvZiBjdXJyZW50IHRva2VuXG5cdHZhciB0b2tlblN0YXJ0TWFya2VyID0gdGhpcy5faW5wdXQubWFyaygpO1xuXHR0cnkge1xuXHRcdHdoaWxlICh0cnVlKSB7XG5cdFx0XHRpZiAodGhpcy5faGl0RU9GKSB7XG5cdFx0XHRcdHRoaXMuZW1pdEVPRigpO1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fdG9rZW47XG5cdFx0XHR9XG5cdFx0XHR0aGlzLl90b2tlbiA9IG51bGw7XG5cdFx0XHR0aGlzLl9jaGFubmVsID0gVG9rZW4uREVGQVVMVF9DSEFOTkVMO1xuXHRcdFx0dGhpcy5fdG9rZW5TdGFydENoYXJJbmRleCA9IHRoaXMuX2lucHV0LmluZGV4O1xuXHRcdFx0dGhpcy5fdG9rZW5TdGFydENvbHVtbiA9IHRoaXMuX2ludGVycC5jb2x1bW47XG5cdFx0XHR0aGlzLl90b2tlblN0YXJ0TGluZSA9IHRoaXMuX2ludGVycC5saW5lO1xuXHRcdFx0dGhpcy5fdGV4dCA9IG51bGw7XG5cdFx0XHR2YXIgY29udGludWVPdXRlciA9IGZhbHNlO1xuXHRcdFx0d2hpbGUgKHRydWUpIHtcblx0XHRcdFx0dGhpcy5fdHlwZSA9IFRva2VuLklOVkFMSURfVFlQRTtcblx0XHRcdFx0dmFyIHR0eXBlID0gTGV4ZXIuU0tJUDtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHR0dHlwZSA9IHRoaXMuX2ludGVycC5tYXRjaCh0aGlzLl9pbnB1dCwgdGhpcy5fbW9kZSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0ICAgIGlmKGUgaW5zdGFuY2VvZiBSZWNvZ25pdGlvbkV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZnlMaXN0ZW5lcnMoZSk7IC8vIHJlcG9ydCBlcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvdmVyKGUpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZS5zdGFjayk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRoaXMuX2lucHV0LkxBKDEpID09PSBUb2tlbi5FT0YpIHtcblx0XHRcdFx0XHR0aGlzLl9oaXRFT0YgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0aGlzLl90eXBlID09PSBUb2tlbi5JTlZBTElEX1RZUEUpIHtcblx0XHRcdFx0XHR0aGlzLl90eXBlID0gdHR5cGU7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRoaXMuX3R5cGUgPT09IExleGVyLlNLSVApIHtcblx0XHRcdFx0XHRjb250aW51ZU91dGVyID0gdHJ1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodGhpcy5fdHlwZSAhPT0gTGV4ZXIuTU9SRSkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoY29udGludWVPdXRlcikge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdGlmICh0aGlzLl90b2tlbiA9PT0gbnVsbCkge1xuXHRcdFx0XHR0aGlzLmVtaXQoKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzLl90b2tlbjtcblx0XHR9XG5cdH0gZmluYWxseSB7XG5cdFx0Ly8gbWFrZSBzdXJlIHdlIHJlbGVhc2UgbWFya2VyIGFmdGVyIG1hdGNoIG9yXG5cdFx0Ly8gdW5idWZmZXJlZCBjaGFyIHN0cmVhbSB3aWxsIGtlZXAgYnVmZmVyaW5nXG5cdFx0dGhpcy5faW5wdXQucmVsZWFzZSh0b2tlblN0YXJ0TWFya2VyKTtcblx0fVxufTtcblxuLy8gSW5zdHJ1Y3QgdGhlIGxleGVyIHRvIHNraXAgY3JlYXRpbmcgYSB0b2tlbiBmb3IgY3VycmVudCBsZXhlciBydWxlXG4vLyBhbmQgbG9vayBmb3IgYW5vdGhlciB0b2tlbi4gbmV4dFRva2VuKCkga25vd3MgdG8ga2VlcCBsb29raW5nIHdoZW5cbi8vIGEgbGV4ZXIgcnVsZSBmaW5pc2hlcyB3aXRoIHRva2VuIHNldCB0byBTS0lQX1RPS0VOLiBSZWNhbGwgdGhhdFxuLy8gaWYgdG9rZW49PW51bGwgYXQgZW5kIG9mIGFueSB0b2tlbiBydWxlLCBpdCBjcmVhdGVzIG9uZSBmb3IgeW91XG4vLyBhbmQgZW1pdHMgaXQuXG4vLyAvXG5MZXhlci5wcm90b3R5cGUuc2tpcCA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLl90eXBlID0gTGV4ZXIuU0tJUDtcbn07XG5cbkxleGVyLnByb3RvdHlwZS5tb3JlID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMuX3R5cGUgPSBMZXhlci5NT1JFO1xufTtcblxuTGV4ZXIucHJvdG90eXBlLm1vZGUgPSBmdW5jdGlvbihtKSB7XG5cdHRoaXMuX21vZGUgPSBtO1xufTtcblxuTGV4ZXIucHJvdG90eXBlLnB1c2hNb2RlID0gZnVuY3Rpb24obSkge1xuXHRpZiAodGhpcy5faW50ZXJwLmRlYnVnKSB7XG5cdFx0Y29uc29sZS5sb2coXCJwdXNoTW9kZSBcIiArIG0pO1xuXHR9XG5cdHRoaXMuX21vZGVTdGFjay5wdXNoKHRoaXMuX21vZGUpO1xuXHR0aGlzLm1vZGUobSk7XG59O1xuXG5MZXhlci5wcm90b3R5cGUucG9wTW9kZSA9IGZ1bmN0aW9uKCkge1xuXHRpZiAodGhpcy5fbW9kZVN0YWNrLmxlbmd0aCA9PT0gMCkge1xuXHRcdHRocm93IFwiRW1wdHkgU3RhY2tcIjtcblx0fVxuXHRpZiAodGhpcy5faW50ZXJwLmRlYnVnKSB7XG5cdFx0Y29uc29sZS5sb2coXCJwb3BNb2RlIGJhY2sgdG8gXCIgKyB0aGlzLl9tb2RlU3RhY2suc2xpY2UoMCwgLTEpKTtcblx0fVxuXHR0aGlzLm1vZGUodGhpcy5fbW9kZVN0YWNrLnBvcCgpKTtcblx0cmV0dXJuIHRoaXMuX21vZGU7XG59O1xuXG4vLyBTZXQgdGhlIGNoYXIgc3RyZWFtIGFuZCByZXNldCB0aGUgbGV4ZXJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShMZXhlci5wcm90b3R5cGUsIFwiaW5wdXRTdHJlYW1cIiwge1xuXHRnZXQgOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5faW5wdXQ7XG5cdH0sXG5cdHNldCA6IGZ1bmN0aW9uKGlucHV0KSB7XG5cdFx0dGhpcy5faW5wdXQgPSBudWxsO1xuXHRcdHRoaXMuX3Rva2VuRmFjdG9yeVNvdXJjZVBhaXIgPSBbIHRoaXMsIHRoaXMuX2lucHV0IF07XG5cdFx0dGhpcy5yZXNldCgpO1xuXHRcdHRoaXMuX2lucHV0ID0gaW5wdXQ7XG5cdFx0dGhpcy5fdG9rZW5GYWN0b3J5U291cmNlUGFpciA9IFsgdGhpcywgdGhpcy5faW5wdXQgXTtcblx0fVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShMZXhlci5wcm90b3R5cGUsIFwic291cmNlTmFtZVwiLCB7XG5cdGdldCA6IGZ1bmN0aW9uIHNvdXJjZU5hbWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2lucHV0LnNvdXJjZU5hbWU7XG5cdH1cbn0pO1xuXG4vLyBCeSBkZWZhdWx0IGRvZXMgbm90IHN1cHBvcnQgbXVsdGlwbGUgZW1pdHMgcGVyIG5leHRUb2tlbiBpbnZvY2F0aW9uXG4vLyBmb3IgZWZmaWNpZW5jeSByZWFzb25zLiBTdWJjbGFzcyBhbmQgb3ZlcnJpZGUgdGhpcyBtZXRob2QsIG5leHRUb2tlbixcbi8vIGFuZCBnZXRUb2tlbiAodG8gcHVzaCB0b2tlbnMgaW50byBhIGxpc3QgYW5kIHB1bGwgZnJvbSB0aGF0IGxpc3Rcbi8vIHJhdGhlciB0aGFuIGEgc2luZ2xlIHZhcmlhYmxlIGFzIHRoaXMgaW1wbGVtZW50YXRpb24gZG9lcykuXG4vLyAvXG5MZXhlci5wcm90b3R5cGUuZW1pdFRva2VuID0gZnVuY3Rpb24odG9rZW4pIHtcblx0dGhpcy5fdG9rZW4gPSB0b2tlbjtcbn07XG5cbi8vIFRoZSBzdGFuZGFyZCBtZXRob2QgY2FsbGVkIHRvIGF1dG9tYXRpY2FsbHkgZW1pdCBhIHRva2VuIGF0IHRoZVxuLy8gb3V0ZXJtb3N0IGxleGljYWwgcnVsZS4gVGhlIHRva2VuIG9iamVjdCBzaG91bGQgcG9pbnQgaW50byB0aGVcbi8vIGNoYXIgYnVmZmVyIHN0YXJ0Li5zdG9wLiBJZiB0aGVyZSBpcyBhIHRleHQgb3ZlcnJpZGUgaW4gJ3RleHQnLFxuLy8gdXNlIHRoYXQgdG8gc2V0IHRoZSB0b2tlbidzIHRleHQuIE92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIGVtaXRcbi8vIGN1c3RvbSBUb2tlbiBvYmplY3RzIG9yIHByb3ZpZGUgYSBuZXcgZmFjdG9yeS5cbi8vIC9cbkxleGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24oKSB7XG5cdHZhciB0ID0gdGhpcy5fZmFjdG9yeS5jcmVhdGUodGhpcy5fdG9rZW5GYWN0b3J5U291cmNlUGFpciwgdGhpcy5fdHlwZSxcblx0XHRcdHRoaXMuX3RleHQsIHRoaXMuX2NoYW5uZWwsIHRoaXMuX3Rva2VuU3RhcnRDaGFySW5kZXgsIHRoaXNcblx0XHRcdFx0XHQuZ2V0Q2hhckluZGV4KCkgLSAxLCB0aGlzLl90b2tlblN0YXJ0TGluZSxcblx0XHRcdHRoaXMuX3Rva2VuU3RhcnRDb2x1bW4pO1xuXHR0aGlzLmVtaXRUb2tlbih0KTtcblx0cmV0dXJuIHQ7XG59O1xuXG5MZXhlci5wcm90b3R5cGUuZW1pdEVPRiA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgY3BvcyA9IHRoaXMuY29sdW1uO1xuXHR2YXIgbHBvcyA9IHRoaXMubGluZTtcblx0dmFyIGVvZiA9IHRoaXMuX2ZhY3RvcnkuY3JlYXRlKHRoaXMuX3Rva2VuRmFjdG9yeVNvdXJjZVBhaXIsIFRva2VuLkVPRixcblx0XHRcdG51bGwsIFRva2VuLkRFRkFVTFRfQ0hBTk5FTCwgdGhpcy5faW5wdXQuaW5kZXgsXG5cdFx0XHR0aGlzLl9pbnB1dC5pbmRleCAtIDEsIGxwb3MsIGNwb3MpO1xuXHR0aGlzLmVtaXRUb2tlbihlb2YpO1xuXHRyZXR1cm4gZW9mO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KExleGVyLnByb3RvdHlwZSwgXCJ0eXBlXCIsIHtcblx0Z2V0IDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMudHlwZTtcblx0fSxcblx0c2V0IDogZnVuY3Rpb24odHlwZSkge1xuXHRcdHRoaXMuX3R5cGUgPSB0eXBlO1xuXHR9XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KExleGVyLnByb3RvdHlwZSwgXCJsaW5lXCIsIHtcblx0Z2V0IDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2ludGVycC5saW5lO1xuXHR9LFxuXHRzZXQgOiBmdW5jdGlvbihsaW5lKSB7XG5cdFx0dGhpcy5faW50ZXJwLmxpbmUgPSBsaW5lO1xuXHR9XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KExleGVyLnByb3RvdHlwZSwgXCJjb2x1bW5cIiwge1xuXHRnZXQgOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5faW50ZXJwLmNvbHVtbjtcblx0fSxcblx0c2V0IDogZnVuY3Rpb24oY29sdW1uKSB7XG5cdFx0dGhpcy5faW50ZXJwLmNvbHVtbiA9IGNvbHVtbjtcblx0fVxufSk7XG5cblxuLy8gV2hhdCBpcyB0aGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgY2hhcmFjdGVyIG9mIGxvb2thaGVhZD8vLy9cbkxleGVyLnByb3RvdHlwZS5nZXRDaGFySW5kZXggPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuX2lucHV0LmluZGV4O1xufTtcblxuLy8gUmV0dXJuIHRoZSB0ZXh0IG1hdGNoZWQgc28gZmFyIGZvciB0aGUgY3VycmVudCB0b2tlbiBvciBhbnkgdGV4dCBvdmVycmlkZS5cbi8vU2V0IHRoZSBjb21wbGV0ZSB0ZXh0IG9mIHRoaXMgdG9rZW47IGl0IHdpcGVzIGFueSBwcmV2aW91cyBjaGFuZ2VzIHRvIHRoZSB0ZXh0LlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KExleGVyLnByb3RvdHlwZSwgXCJ0ZXh0XCIsIHtcblx0Z2V0IDogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKHRoaXMuX3RleHQgIT09IG51bGwpIHtcblx0XHRcdHJldHVybiB0aGlzLl90ZXh0O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5faW50ZXJwLmdldFRleHQodGhpcy5faW5wdXQpO1xuXHRcdH1cblx0fSxcblx0c2V0IDogZnVuY3Rpb24odGV4dCkge1xuXHRcdHRoaXMuX3RleHQgPSB0ZXh0O1xuXHR9XG59KTtcbi8vIFJldHVybiBhIGxpc3Qgb2YgYWxsIFRva2VuIG9iamVjdHMgaW4gaW5wdXQgY2hhciBzdHJlYW0uXG4vLyBGb3JjZXMgbG9hZCBvZiBhbGwgdG9rZW5zLiBEb2VzIG5vdCBpbmNsdWRlIEVPRiB0b2tlbi5cbi8vIC9cbkxleGVyLnByb3RvdHlwZS5nZXRBbGxUb2tlbnMgPSBmdW5jdGlvbigpIHtcblx0dmFyIHRva2VucyA9IFtdO1xuXHR2YXIgdCA9IHRoaXMubmV4dFRva2VuKCk7XG5cdHdoaWxlICh0LnR5cGUgIT09IFRva2VuLkVPRikge1xuXHRcdHRva2Vucy5wdXNoKHQpO1xuXHRcdHQgPSB0aGlzLm5leHRUb2tlbigpO1xuXHR9XG5cdHJldHVybiB0b2tlbnM7XG59O1xuXG5MZXhlci5wcm90b3R5cGUubm90aWZ5TGlzdGVuZXJzID0gZnVuY3Rpb24oZSkge1xuXHR2YXIgc3RhcnQgPSB0aGlzLl90b2tlblN0YXJ0Q2hhckluZGV4O1xuXHR2YXIgc3RvcCA9IHRoaXMuX2lucHV0LmluZGV4O1xuXHR2YXIgdGV4dCA9IHRoaXMuX2lucHV0LmdldFRleHQoc3RhcnQsIHN0b3ApO1xuXHR2YXIgbXNnID0gXCJ0b2tlbiByZWNvZ25pdGlvbiBlcnJvciBhdDogJ1wiICsgdGhpcy5nZXRFcnJvckRpc3BsYXkodGV4dCkgKyBcIidcIjtcblx0dmFyIGxpc3RlbmVyID0gdGhpcy5nZXRFcnJvckxpc3RlbmVyRGlzcGF0Y2goKTtcblx0bGlzdGVuZXIuc3ludGF4RXJyb3IodGhpcywgbnVsbCwgdGhpcy5fdG9rZW5TdGFydExpbmUsXG5cdFx0XHR0aGlzLl90b2tlblN0YXJ0Q29sdW1uLCBtc2csIGUpO1xufTtcblxuTGV4ZXIucHJvdG90eXBlLmdldEVycm9yRGlzcGxheSA9IGZ1bmN0aW9uKHMpIHtcblx0dmFyIGQgPSBbXTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKSB7XG5cdFx0ZC5wdXNoKHNbaV0pO1xuXHR9XG5cdHJldHVybiBkLmpvaW4oJycpO1xufTtcblxuTGV4ZXIucHJvdG90eXBlLmdldEVycm9yRGlzcGxheUZvckNoYXIgPSBmdW5jdGlvbihjKSB7XG5cdGlmIChjLmNoYXJDb2RlQXQoMCkgPT09IFRva2VuLkVPRikge1xuXHRcdHJldHVybiBcIjxFT0Y+XCI7XG5cdH0gZWxzZSBpZiAoYyA9PT0gJ1xcbicpIHtcblx0XHRyZXR1cm4gXCJcXFxcblwiO1xuXHR9IGVsc2UgaWYgKGMgPT09ICdcXHQnKSB7XG5cdFx0cmV0dXJuIFwiXFxcXHRcIjtcblx0fSBlbHNlIGlmIChjID09PSAnXFxyJykge1xuXHRcdHJldHVybiBcIlxcXFxyXCI7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGM7XG5cdH1cbn07XG5cbkxleGVyLnByb3RvdHlwZS5nZXRDaGFyRXJyb3JEaXNwbGF5ID0gZnVuY3Rpb24oYykge1xuXHRyZXR1cm4gXCInXCIgKyB0aGlzLmdldEVycm9yRGlzcGxheUZvckNoYXIoYykgKyBcIidcIjtcbn07XG5cbi8vIExleGVycyBjYW4gbm9ybWFsbHkgbWF0Y2ggYW55IGNoYXIgaW4gaXQncyB2b2NhYnVsYXJ5IGFmdGVyIG1hdGNoaW5nXG4vLyBhIHRva2VuLCBzbyBkbyB0aGUgZWFzeSB0aGluZyBhbmQganVzdCBraWxsIGEgY2hhcmFjdGVyIGFuZCBob3BlXG4vLyBpdCBhbGwgd29ya3Mgb3V0LiBZb3UgY2FuIGluc3RlYWQgdXNlIHRoZSBydWxlIGludm9jYXRpb24gc3RhY2tcbi8vIHRvIGRvIHNvcGhpc3RpY2F0ZWQgZXJyb3IgcmVjb3ZlcnkgaWYgeW91IGFyZSBpbiBhIGZyYWdtZW50IHJ1bGUuXG4vLyAvXG5MZXhlci5wcm90b3R5cGUucmVjb3ZlciA9IGZ1bmN0aW9uKHJlKSB7XG5cdGlmICh0aGlzLl9pbnB1dC5MQSgxKSAhPT0gVG9rZW4uRU9GKSB7XG5cdFx0aWYgKHJlIGluc3RhbmNlb2YgTGV4ZXJOb1ZpYWJsZUFsdEV4Y2VwdGlvbikge1xuXHRcdFx0Ly8gc2tpcCBhIGNoYXIgYW5kIHRyeSBhZ2FpblxuXHRcdFx0dGhpcy5faW50ZXJwLmNvbnN1bWUodGhpcy5faW5wdXQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBUT0RPOiBEbyB3ZSBsb3NlIGNoYXJhY3RlciBvciBsaW5lIHBvc2l0aW9uIGluZm9ybWF0aW9uP1xuXHRcdFx0dGhpcy5faW5wdXQuY29uc3VtZSgpO1xuXHRcdH1cblx0fVxufTtcblxuZXhwb3J0cy5MZXhlciA9IExleGVyO1xuIiwiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuXG52YXIgVG9rZW4gPSByZXF1aXJlKCcuL1Rva2VuJykuVG9rZW47XG52YXIgUGFyc2VUcmVlTGlzdGVuZXIgPSByZXF1aXJlKCcuL3RyZWUvVHJlZScpLlBhcnNlVHJlZUxpc3RlbmVyO1xudmFyIFJlY29nbml6ZXIgPSByZXF1aXJlKCcuL1JlY29nbml6ZXInKS5SZWNvZ25pemVyO1xudmFyIERlZmF1bHRFcnJvclN0cmF0ZWd5ID0gcmVxdWlyZSgnLi9lcnJvci9FcnJvclN0cmF0ZWd5JykuRGVmYXVsdEVycm9yU3RyYXRlZ3k7XG52YXIgQVRORGVzZXJpYWxpemVyID0gcmVxdWlyZSgnLi9hdG4vQVRORGVzZXJpYWxpemVyJykuQVRORGVzZXJpYWxpemVyO1xudmFyIEFUTkRlc2VyaWFsaXphdGlvbk9wdGlvbnMgPSByZXF1aXJlKCcuL2F0bi9BVE5EZXNlcmlhbGl6YXRpb25PcHRpb25zJykuQVRORGVzZXJpYWxpemF0aW9uT3B0aW9ucztcbnZhciBUZXJtaW5hbE5vZGUgPSByZXF1aXJlKCcuL3RyZWUvVHJlZScpLlRlcm1pbmFsTm9kZTtcbnZhciBFcnJvck5vZGUgPSByZXF1aXJlKCcuL3RyZWUvVHJlZScpLkVycm9yTm9kZTtcblxuZnVuY3Rpb24gVHJhY2VMaXN0ZW5lcihwYXJzZXIpIHtcblx0UGFyc2VUcmVlTGlzdGVuZXIuY2FsbCh0aGlzKTtcbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcblx0cmV0dXJuIHRoaXM7XG59XG5cblRyYWNlTGlzdGVuZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShQYXJzZVRyZWVMaXN0ZW5lci5wcm90b3R5cGUpO1xuVHJhY2VMaXN0ZW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUcmFjZUxpc3RlbmVyO1xuXG5UcmFjZUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlckV2ZXJ5UnVsZSA9IGZ1bmN0aW9uKGN0eCkge1xuXHRjb25zb2xlLmxvZyhcImVudGVyICAgXCIgKyB0aGlzLnBhcnNlci5ydWxlTmFtZXNbY3R4LnJ1bGVJbmRleF0gKyBcIiwgTFQoMSk9XCIgKyB0aGlzLnBhcnNlci5faW5wdXQuTFQoMSkudGV4dCk7XG59O1xuXG5UcmFjZUxpc3RlbmVyLnByb3RvdHlwZS52aXNpdFRlcm1pbmFsID0gZnVuY3Rpb24oIG5vZGUpIHtcblx0Y29uc29sZS5sb2coXCJjb25zdW1lIFwiICsgbm9kZS5zeW1ib2wgKyBcIiBydWxlIFwiICsgdGhpcy5wYXJzZXIucnVsZU5hbWVzW3RoaXMucGFyc2VyLl9jdHgucnVsZUluZGV4XSk7XG59O1xuXG5UcmFjZUxpc3RlbmVyLnByb3RvdHlwZS5leGl0RXZlcnlSdWxlID0gZnVuY3Rpb24oY3R4KSB7XG5cdGNvbnNvbGUubG9nKFwiZXhpdCAgICBcIiArIHRoaXMucGFyc2VyLnJ1bGVOYW1lc1tjdHgucnVsZUluZGV4XSArIFwiLCBMVCgxKT1cIiArIHRoaXMucGFyc2VyLl9pbnB1dC5MVCgxKS50ZXh0KTtcbn07XG5cbi8vIHRoaXMgaXMgYWxsIHRoZSBwYXJzaW5nIHN1cHBvcnQgY29kZSBlc3NlbnRpYWxseTsgbW9zdCBvZiBpdCBpcyBlcnJvclxuLy8gcmVjb3Zlcnkgc3R1ZmYuLy9cbmZ1bmN0aW9uIFBhcnNlcihpbnB1dCkge1xuXHRSZWNvZ25pemVyLmNhbGwodGhpcyk7XG5cdC8vIFRoZSBpbnB1dCBzdHJlYW0uXG5cdHRoaXMuX2lucHV0ID0gbnVsbDtcblx0Ly8gVGhlIGVycm9yIGhhbmRsaW5nIHN0cmF0ZWd5IGZvciB0aGUgcGFyc2VyLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBhIG5ld1xuXHQvLyBpbnN0YW5jZSBvZiB7QGxpbmsgRGVmYXVsdEVycm9yU3RyYXRlZ3l9LlxuXHR0aGlzLl9lcnJIYW5kbGVyID0gbmV3IERlZmF1bHRFcnJvclN0cmF0ZWd5KCk7XG5cdHRoaXMuX3ByZWNlZGVuY2VTdGFjayA9IFtdO1xuXHR0aGlzLl9wcmVjZWRlbmNlU3RhY2sucHVzaCgwKTtcblx0Ly8gVGhlIHtAbGluayBQYXJzZXJSdWxlQ29udGV4dH0gb2JqZWN0IGZvciB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBydWxlLlxuXHQvLyB0aGlzIGlzIGFsd2F5cyBub24tbnVsbCBkdXJpbmcgdGhlIHBhcnNpbmcgcHJvY2Vzcy5cblx0dGhpcy5fY3R4ID0gbnVsbDtcblx0Ly8gU3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IHRoZSBwYXJzZXIgc2hvdWxkIGNvbnN0cnVjdCBhIHBhcnNlIHRyZWUgZHVyaW5nXG5cdC8vIHRoZSBwYXJzaW5nIHByb2Nlc3MuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHtAY29kZSB0cnVlfS5cblx0dGhpcy5idWlsZFBhcnNlVHJlZXMgPSB0cnVlO1xuXHQvLyBXaGVuIHtAbGluayAvL3NldFRyYWNlfXtAY29kZSAodHJ1ZSl9IGlzIGNhbGxlZCwgYSByZWZlcmVuY2UgdG8gdGhlXG5cdC8vIHtAbGluayBUcmFjZUxpc3RlbmVyfSBpcyBzdG9yZWQgaGVyZSBzbyBpdCBjYW4gYmUgZWFzaWx5IHJlbW92ZWQgaW4gYVxuXHQvLyBsYXRlciBjYWxsIHRvIHtAbGluayAvL3NldFRyYWNlfXtAY29kZSAoZmFsc2UpfS4gVGhlIGxpc3RlbmVyIGl0c2VsZiBpc1xuXHQvLyBpbXBsZW1lbnRlZCBhcyBhIHBhcnNlciBsaXN0ZW5lciBzbyB0aGlzIGZpZWxkIGlzIG5vdCBkaXJlY3RseSB1c2VkIGJ5XG5cdC8vIG90aGVyIHBhcnNlciBtZXRob2RzLlxuXHR0aGlzLl90cmFjZXIgPSBudWxsO1xuXHQvLyBUaGUgbGlzdCBvZiB7QGxpbmsgUGFyc2VUcmVlTGlzdGVuZXJ9IGxpc3RlbmVycyByZWdpc3RlcmVkIHRvIHJlY2VpdmVcblx0Ly8gZXZlbnRzIGR1cmluZyB0aGUgcGFyc2UuXG5cdHRoaXMuX3BhcnNlTGlzdGVuZXJzID0gbnVsbDtcblx0Ly8gVGhlIG51bWJlciBvZiBzeW50YXggZXJyb3JzIHJlcG9ydGVkIGR1cmluZyBwYXJzaW5nLiB0aGlzIHZhbHVlIGlzXG5cdC8vIGluY3JlbWVudGVkIGVhY2ggdGltZSB7QGxpbmsgLy9ub3RpZnlFcnJvckxpc3RlbmVyc30gaXMgY2FsbGVkLlxuXHR0aGlzLl9zeW50YXhFcnJvcnMgPSAwO1xuXHR0aGlzLnNldElucHV0U3RyZWFtKGlucHV0KTtcblx0cmV0dXJuIHRoaXM7XG59XG5cblBhcnNlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFJlY29nbml6ZXIucHJvdG90eXBlKTtcblBhcnNlci5wcm90b3R5cGUuY29udHJ1Y3RvciA9IFBhcnNlcjtcblxuLy8gdGhpcyBmaWVsZCBtYXBzIGZyb20gdGhlIHNlcmlhbGl6ZWQgQVROIHN0cmluZyB0byB0aGUgZGVzZXJpYWxpemVkIHtAbGlua1xuLy8gQVROfSB3aXRoXG4vLyBieXBhc3MgYWx0ZXJuYXRpdmVzLlxuLy9cbi8vIEBzZWUgQVRORGVzZXJpYWxpemF0aW9uT3B0aW9ucy8vaXNHZW5lcmF0ZVJ1bGVCeXBhc3NUcmFuc2l0aW9ucygpXG4vL1xuUGFyc2VyLmJ5cGFzc0FsdHNBdG5DYWNoZSA9IHt9O1xuXG4vLyByZXNldCB0aGUgcGFyc2VyJ3Mgc3RhdGUvL1xuUGFyc2VyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKCkge1xuXHRpZiAodGhpcy5faW5wdXQgIT09IG51bGwpIHtcblx0XHR0aGlzLl9pbnB1dC5zZWVrKDApO1xuXHR9XG5cdHRoaXMuX2VyckhhbmRsZXIucmVzZXQodGhpcyk7XG5cdHRoaXMuX2N0eCA9IG51bGw7XG5cdHRoaXMuX3N5bnRheEVycm9ycyA9IDA7XG5cdHRoaXMuc2V0VHJhY2UoZmFsc2UpO1xuXHR0aGlzLl9wcmVjZWRlbmNlU3RhY2sgPSBbXTtcblx0dGhpcy5fcHJlY2VkZW5jZVN0YWNrLnB1c2goMCk7XG5cdGlmICh0aGlzLl9pbnRlcnAgIT09IG51bGwpIHtcblx0XHR0aGlzLl9pbnRlcnAucmVzZXQoKTtcblx0fVxufTtcblxuLy8gTWF0Y2ggY3VycmVudCBpbnB1dCBzeW1ib2wgYWdhaW5zdCB7QGNvZGUgdHR5cGV9LiBJZiB0aGUgc3ltYm9sIHR5cGVcbi8vIG1hdGNoZXMsIHtAbGluayBBTlRMUkVycm9yU3RyYXRlZ3kvL3JlcG9ydE1hdGNofSBhbmQge0BsaW5rIC8vY29uc3VtZX0gYXJlXG4vLyBjYWxsZWQgdG8gY29tcGxldGUgdGhlIG1hdGNoIHByb2Nlc3MuXG4vL1xuLy8gPHA+SWYgdGhlIHN5bWJvbCB0eXBlIGRvZXMgbm90IG1hdGNoLFxuLy8ge0BsaW5rIEFOVExSRXJyb3JTdHJhdGVneS8vcmVjb3ZlcklubGluZX0gaXMgY2FsbGVkIG9uIHRoZSBjdXJyZW50IGVycm9yXG4vLyBzdHJhdGVneSB0byBhdHRlbXB0IHJlY292ZXJ5LiBJZiB7QGxpbmsgLy9nZXRCdWlsZFBhcnNlVHJlZX0gaXNcbi8vIHtAY29kZSB0cnVlfSBhbmQgdGhlIHRva2VuIGluZGV4IG9mIHRoZSBzeW1ib2wgcmV0dXJuZWQgYnlcbi8vIHtAbGluayBBTlRMUkVycm9yU3RyYXRlZ3kvL3JlY292ZXJJbmxpbmV9IGlzIC0xLCB0aGUgc3ltYm9sIGlzIGFkZGVkIHRvXG4vLyB0aGUgcGFyc2UgdHJlZSBieSBjYWxsaW5nIHtAbGluayBQYXJzZXJSdWxlQ29udGV4dC8vYWRkRXJyb3JOb2RlfS48L3A+XG4vL1xuLy8gQHBhcmFtIHR0eXBlIHRoZSB0b2tlbiB0eXBlIHRvIG1hdGNoXG4vLyBAcmV0dXJuIHRoZSBtYXRjaGVkIHN5bWJvbFxuLy8gQHRocm93cyBSZWNvZ25pdGlvbkV4Y2VwdGlvbiBpZiB0aGUgY3VycmVudCBpbnB1dCBzeW1ib2wgZGlkIG5vdCBtYXRjaFxuLy8ge0Bjb2RlIHR0eXBlfSBhbmQgdGhlIGVycm9yIHN0cmF0ZWd5IGNvdWxkIG5vdCByZWNvdmVyIGZyb20gdGhlXG4vLyBtaXNtYXRjaGVkIHN5bWJvbFxuXG5QYXJzZXIucHJvdG90eXBlLm1hdGNoID0gZnVuY3Rpb24odHR5cGUpIHtcblx0dmFyIHQgPSB0aGlzLmdldEN1cnJlbnRUb2tlbigpO1xuXHRpZiAodC50eXBlID09PSB0dHlwZSkge1xuXHRcdHRoaXMuX2VyckhhbmRsZXIucmVwb3J0TWF0Y2godGhpcyk7XG5cdFx0dGhpcy5jb25zdW1lKCk7XG5cdH0gZWxzZSB7XG5cdFx0dCA9IHRoaXMuX2VyckhhbmRsZXIucmVjb3ZlcklubGluZSh0aGlzKTtcblx0XHRpZiAodGhpcy5idWlsZFBhcnNlVHJlZXMgJiYgdC50b2tlbkluZGV4ID09PSAtMSkge1xuXHRcdFx0Ly8gd2UgbXVzdCBoYXZlIGNvbmp1cmVkIHVwIGEgbmV3IHRva2VuIGR1cmluZyBzaW5nbGUgdG9rZW5cblx0XHRcdC8vIGluc2VydGlvblxuXHRcdFx0Ly8gaWYgaXQncyBub3QgdGhlIGN1cnJlbnQgc3ltYm9sXG5cdFx0XHR0aGlzLl9jdHguYWRkRXJyb3JOb2RlKHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdDtcbn07XG4vLyBNYXRjaCBjdXJyZW50IGlucHV0IHN5bWJvbCBhcyBhIHdpbGRjYXJkLiBJZiB0aGUgc3ltYm9sIHR5cGUgbWF0Y2hlc1xuLy8gKGkuZS4gaGFzIGEgdmFsdWUgZ3JlYXRlciB0aGFuIDApLCB7QGxpbmsgQU5UTFJFcnJvclN0cmF0ZWd5Ly9yZXBvcnRNYXRjaH1cbi8vIGFuZCB7QGxpbmsgLy9jb25zdW1lfSBhcmUgY2FsbGVkIHRvIGNvbXBsZXRlIHRoZSBtYXRjaCBwcm9jZXNzLlxuLy9cbi8vIDxwPklmIHRoZSBzeW1ib2wgdHlwZSBkb2VzIG5vdCBtYXRjaCxcbi8vIHtAbGluayBBTlRMUkVycm9yU3RyYXRlZ3kvL3JlY292ZXJJbmxpbmV9IGlzIGNhbGxlZCBvbiB0aGUgY3VycmVudCBlcnJvclxuLy8gc3RyYXRlZ3kgdG8gYXR0ZW1wdCByZWNvdmVyeS4gSWYge0BsaW5rIC8vZ2V0QnVpbGRQYXJzZVRyZWV9IGlzXG4vLyB7QGNvZGUgdHJ1ZX0gYW5kIHRoZSB0b2tlbiBpbmRleCBvZiB0aGUgc3ltYm9sIHJldHVybmVkIGJ5XG4vLyB7QGxpbmsgQU5UTFJFcnJvclN0cmF0ZWd5Ly9yZWNvdmVySW5saW5lfSBpcyAtMSwgdGhlIHN5bWJvbCBpcyBhZGRlZCB0b1xuLy8gdGhlIHBhcnNlIHRyZWUgYnkgY2FsbGluZyB7QGxpbmsgUGFyc2VyUnVsZUNvbnRleHQvL2FkZEVycm9yTm9kZX0uPC9wPlxuLy9cbi8vIEByZXR1cm4gdGhlIG1hdGNoZWQgc3ltYm9sXG4vLyBAdGhyb3dzIFJlY29nbml0aW9uRXhjZXB0aW9uIGlmIHRoZSBjdXJyZW50IGlucHV0IHN5bWJvbCBkaWQgbm90IG1hdGNoXG4vLyBhIHdpbGRjYXJkIGFuZCB0aGUgZXJyb3Igc3RyYXRlZ3kgY291bGQgbm90IHJlY292ZXIgZnJvbSB0aGUgbWlzbWF0Y2hlZFxuLy8gc3ltYm9sXG5cblBhcnNlci5wcm90b3R5cGUubWF0Y2hXaWxkY2FyZCA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgdCA9IHRoaXMuZ2V0Q3VycmVudFRva2VuKCk7XG5cdGlmICh0LnR5cGUgPiAwKSB7XG5cdFx0dGhpcy5fZXJySGFuZGxlci5yZXBvcnRNYXRjaCh0aGlzKTtcblx0XHR0aGlzLmNvbnN1bWUoKTtcblx0fSBlbHNlIHtcblx0XHR0ID0gdGhpcy5fZXJySGFuZGxlci5yZWNvdmVySW5saW5lKHRoaXMpO1xuXHRcdGlmICh0aGlzLl9idWlsZFBhcnNlVHJlZXMgJiYgdC50b2tlbkluZGV4ID09PSAtMSkge1xuXHRcdFx0Ly8gd2UgbXVzdCBoYXZlIGNvbmp1cmVkIHVwIGEgbmV3IHRva2VuIGR1cmluZyBzaW5nbGUgdG9rZW5cblx0XHRcdC8vIGluc2VydGlvblxuXHRcdFx0Ly8gaWYgaXQncyBub3QgdGhlIGN1cnJlbnQgc3ltYm9sXG5cdFx0XHR0aGlzLl9jdHguYWRkRXJyb3JOb2RlKHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdDtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuZ2V0UGFyc2VMaXN0ZW5lcnMgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuX3BhcnNlTGlzdGVuZXJzIHx8IFtdO1xufTtcblxuLy8gUmVnaXN0ZXJzIHtAY29kZSBsaXN0ZW5lcn0gdG8gcmVjZWl2ZSBldmVudHMgZHVyaW5nIHRoZSBwYXJzaW5nIHByb2Nlc3MuXG4vL1xuLy8gPHA+VG8gc3VwcG9ydCBvdXRwdXQtcHJlc2VydmluZyBncmFtbWFyIHRyYW5zZm9ybWF0aW9ucyAoaW5jbHVkaW5nIGJ1dCBub3Rcbi8vIGxpbWl0ZWQgdG8gbGVmdC1yZWN1cnNpb24gcmVtb3ZhbCwgYXV0b21hdGVkIGxlZnQtZmFjdG9yaW5nLCBhbmRcbi8vIG9wdGltaXplZCBjb2RlIGdlbmVyYXRpb24pLCBjYWxscyB0byBsaXN0ZW5lciBtZXRob2RzIGR1cmluZyB0aGUgcGFyc2Vcbi8vIG1heSBkaWZmZXIgc3Vic3RhbnRpYWxseSBmcm9tIGNhbGxzIG1hZGUgYnlcbi8vIHtAbGluayBQYXJzZVRyZWVXYWxrZXIvL0RFRkFVTFR9IHVzZWQgYWZ0ZXIgdGhlIHBhcnNlIGlzIGNvbXBsZXRlLiBJblxuLy8gcGFydGljdWxhciwgcnVsZSBlbnRyeSBhbmQgZXhpdCBldmVudHMgbWF5IG9jY3VyIGluIGEgZGlmZmVyZW50IG9yZGVyXG4vLyBkdXJpbmcgdGhlIHBhcnNlIHRoYW4gYWZ0ZXIgdGhlIHBhcnNlci4gSW4gYWRkaXRpb24sIGNhbGxzIHRvIGNlcnRhaW5cbi8vIHJ1bGUgZW50cnkgbWV0aG9kcyBtYXkgYmUgb21pdHRlZC48L3A+XG4vL1xuLy8gPHA+V2l0aCB0aGUgZm9sbG93aW5nIHNwZWNpZmljIGV4Y2VwdGlvbnMsIGNhbGxzIHRvIGxpc3RlbmVyIGV2ZW50cyBhcmVcbi8vIDxlbT5kZXRlcm1pbmlzdGljPC9lbT4sIGkuZS4gZm9yIGlkZW50aWNhbCBpbnB1dCB0aGUgY2FsbHMgdG8gbGlzdGVuZXJcbi8vIG1ldGhvZHMgd2lsbCBiZSB0aGUgc2FtZS48L3A+XG4vL1xuLy8gPHVsPlxuLy8gPGxpPkFsdGVyYXRpb25zIHRvIHRoZSBncmFtbWFyIHVzZWQgdG8gZ2VuZXJhdGUgY29kZSBtYXkgY2hhbmdlIHRoZVxuLy8gYmVoYXZpb3Igb2YgdGhlIGxpc3RlbmVyIGNhbGxzLjwvbGk+XG4vLyA8bGk+QWx0ZXJhdGlvbnMgdG8gdGhlIGNvbW1hbmQgbGluZSBvcHRpb25zIHBhc3NlZCB0byBBTlRMUiA0IHdoZW5cbi8vIGdlbmVyYXRpbmcgdGhlIHBhcnNlciBtYXkgY2hhbmdlIHRoZSBiZWhhdmlvciBvZiB0aGUgbGlzdGVuZXIgY2FsbHMuPC9saT5cbi8vIDxsaT5DaGFuZ2luZyB0aGUgdmVyc2lvbiBvZiB0aGUgQU5UTFIgVG9vbCB1c2VkIHRvIGdlbmVyYXRlIHRoZSBwYXJzZXJcbi8vIG1heSBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mIHRoZSBsaXN0ZW5lciBjYWxscy48L2xpPlxuLy8gPC91bD5cbi8vXG4vLyBAcGFyYW0gbGlzdGVuZXIgdGhlIGxpc3RlbmVyIHRvIGFkZFxuLy9cbi8vIEB0aHJvd3MgTnVsbFBvaW50ZXJFeGNlcHRpb24gaWYge0Bjb2RlfSBsaXN0ZW5lciBpcyB7QGNvZGUgbnVsbH1cbi8vXG5QYXJzZXIucHJvdG90eXBlLmFkZFBhcnNlTGlzdGVuZXIgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuXHRpZiAobGlzdGVuZXIgPT09IG51bGwpIHtcblx0XHR0aHJvdyBcImxpc3RlbmVyXCI7XG5cdH1cblx0aWYgKHRoaXMuX3BhcnNlTGlzdGVuZXJzID09PSBudWxsKSB7XG5cdFx0dGhpcy5fcGFyc2VMaXN0ZW5lcnMgPSBbXTtcblx0fVxuXHR0aGlzLl9wYXJzZUxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbn07XG5cbi8vXG4vLyBSZW1vdmUge0Bjb2RlIGxpc3RlbmVyfSBmcm9tIHRoZSBsaXN0IG9mIHBhcnNlIGxpc3RlbmVycy5cbi8vXG4vLyA8cD5JZiB7QGNvZGUgbGlzdGVuZXJ9IGlzIHtAY29kZSBudWxsfSBvciBoYXMgbm90IGJlZW4gYWRkZWQgYXMgYSBwYXJzZVxuLy8gbGlzdGVuZXIsIHRoaXMgbWV0aG9kIGRvZXMgbm90aGluZy48L3A+XG4vLyBAcGFyYW0gbGlzdGVuZXIgdGhlIGxpc3RlbmVyIHRvIHJlbW92ZVxuLy9cblBhcnNlci5wcm90b3R5cGUucmVtb3ZlUGFyc2VMaXN0ZW5lciA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG5cdGlmICh0aGlzLl9wYXJzZUxpc3RlbmVycyAhPT0gbnVsbCkge1xuXHRcdHZhciBpZHggPSB0aGlzLl9wYXJzZUxpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcblx0XHRpZiAoaWR4ID49IDApIHtcblx0XHRcdHRoaXMuX3BhcnNlTGlzdGVuZXJzLnNwbGljZShpZHgsIDEpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5fcGFyc2VMaXN0ZW5lcnMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHR0aGlzLl9wYXJzZUxpc3RlbmVycyA9IG51bGw7XG5cdFx0fVxuXHR9XG59O1xuXG4vLyBSZW1vdmUgYWxsIHBhcnNlIGxpc3RlbmVycy5cblBhcnNlci5wcm90b3R5cGUucmVtb3ZlUGFyc2VMaXN0ZW5lcnMgPSBmdW5jdGlvbigpIHtcblx0dGhpcy5fcGFyc2VMaXN0ZW5lcnMgPSBudWxsO1xufTtcblxuLy8gTm90aWZ5IGFueSBwYXJzZSBsaXN0ZW5lcnMgb2YgYW4gZW50ZXIgcnVsZSBldmVudC5cblBhcnNlci5wcm90b3R5cGUudHJpZ2dlckVudGVyUnVsZUV2ZW50ID0gZnVuY3Rpb24oKSB7XG5cdGlmICh0aGlzLl9wYXJzZUxpc3RlbmVycyAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgY3R4ID0gdGhpcy5fY3R4O1xuXHRcdHRoaXMuX3BhcnNlTGlzdGVuZXJzLm1hcChmdW5jdGlvbihsaXN0ZW5lcikge1xuXHRcdFx0bGlzdGVuZXIuZW50ZXJFdmVyeVJ1bGUoY3R4KTtcblx0XHRcdGN0eC5lbnRlclJ1bGUobGlzdGVuZXIpO1xuXHRcdH0pO1xuXHR9XG59O1xuXG4vL1xuLy8gTm90aWZ5IGFueSBwYXJzZSBsaXN0ZW5lcnMgb2YgYW4gZXhpdCBydWxlIGV2ZW50LlxuLy9cbi8vIEBzZWUgLy9hZGRQYXJzZUxpc3RlbmVyXG4vL1xuUGFyc2VyLnByb3RvdHlwZS50cmlnZ2VyRXhpdFJ1bGVFdmVudCA9IGZ1bmN0aW9uKCkge1xuXHRpZiAodGhpcy5fcGFyc2VMaXN0ZW5lcnMgIT09IG51bGwpIHtcblx0XHQvLyByZXZlcnNlIG9yZGVyIHdhbGsgb2YgbGlzdGVuZXJzXG4gICAgICAgIHZhciBjdHggPSB0aGlzLl9jdHg7XG5cdFx0dGhpcy5fcGFyc2VMaXN0ZW5lcnMuc2xpY2UoMCkucmV2ZXJzZSgpLm1hcChmdW5jdGlvbihsaXN0ZW5lcikge1xuXHRcdFx0Y3R4LmV4aXRSdWxlKGxpc3RlbmVyKTtcblx0XHRcdGxpc3RlbmVyLmV4aXRFdmVyeVJ1bGUoY3R4KTtcblx0XHR9KTtcblx0fVxufTtcblxuUGFyc2VyLnByb3RvdHlwZS5nZXRUb2tlbkZhY3RvcnkgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuX2lucHV0LnRva2VuU291cmNlLl9mYWN0b3J5O1xufTtcblxuLy8gVGVsbCBvdXIgdG9rZW4gc291cmNlIGFuZCBlcnJvciBzdHJhdGVneSBhYm91dCBhIG5ldyB3YXkgdG8gY3JlYXRlIHRva2Vucy4vL1xuUGFyc2VyLnByb3RvdHlwZS5zZXRUb2tlbkZhY3RvcnkgPSBmdW5jdGlvbihmYWN0b3J5KSB7XG5cdHRoaXMuX2lucHV0LnRva2VuU291cmNlLl9mYWN0b3J5ID0gZmFjdG9yeTtcbn07XG5cbi8vIFRoZSBBVE4gd2l0aCBieXBhc3MgYWx0ZXJuYXRpdmVzIGlzIGV4cGVuc2l2ZSB0byBjcmVhdGUgc28gd2UgY3JlYXRlIGl0XG4vLyBsYXppbHkuXG4vL1xuLy8gQHRocm93cyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBpZiB0aGUgY3VycmVudCBwYXJzZXIgZG9lcyBub3Rcbi8vIGltcGxlbWVudCB0aGUge0BsaW5rIC8vZ2V0U2VyaWFsaXplZEFUTigpfSBtZXRob2QuXG4vL1xuUGFyc2VyLnByb3RvdHlwZS5nZXRBVE5XaXRoQnlwYXNzQWx0cyA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgc2VyaWFsaXplZEF0biA9IHRoaXMuZ2V0U2VyaWFsaXplZEFUTigpO1xuXHRpZiAoc2VyaWFsaXplZEF0biA9PT0gbnVsbCkge1xuXHRcdHRocm93IFwiVGhlIGN1cnJlbnQgcGFyc2VyIGRvZXMgbm90IHN1cHBvcnQgYW4gQVROIHdpdGggYnlwYXNzIGFsdGVybmF0aXZlcy5cIjtcblx0fVxuXHR2YXIgcmVzdWx0ID0gdGhpcy5ieXBhc3NBbHRzQXRuQ2FjaGVbc2VyaWFsaXplZEF0bl07XG5cdGlmIChyZXN1bHQgPT09IG51bGwpIHtcblx0XHR2YXIgZGVzZXJpYWxpemF0aW9uT3B0aW9ucyA9IG5ldyBBVE5EZXNlcmlhbGl6YXRpb25PcHRpb25zKCk7XG5cdFx0ZGVzZXJpYWxpemF0aW9uT3B0aW9ucy5nZW5lcmF0ZVJ1bGVCeXBhc3NUcmFuc2l0aW9ucyA9IHRydWU7XG5cdFx0cmVzdWx0ID0gbmV3IEFUTkRlc2VyaWFsaXplcihkZXNlcmlhbGl6YXRpb25PcHRpb25zKVxuXHRcdFx0XHQuZGVzZXJpYWxpemUoc2VyaWFsaXplZEF0bik7XG5cdFx0dGhpcy5ieXBhc3NBbHRzQXRuQ2FjaGVbc2VyaWFsaXplZEF0bl0gPSByZXN1bHQ7XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIFRoZSBwcmVmZXJyZWQgbWV0aG9kIG9mIGdldHRpbmcgYSB0cmVlIHBhdHRlcm4uIEZvciBleGFtcGxlLCBoZXJlJ3MgYVxuLy8gc2FtcGxlIHVzZTpcbi8vXG4vLyA8cHJlPlxuLy8gUGFyc2VUcmVlIHQgPSBwYXJzZXIuZXhwcigpO1xuLy8gUGFyc2VUcmVlUGF0dGVybiBwID0gcGFyc2VyLmNvbXBpbGVQYXJzZVRyZWVQYXR0ZXJuKFwiJmx0O0lEJmd0OyswXCIsXG4vLyBNeVBhcnNlci5SVUxFX2V4cHIpO1xuLy8gUGFyc2VUcmVlTWF0Y2ggbSA9IHAubWF0Y2godCk7XG4vLyBTdHJpbmcgaWQgPSBtLmdldChcIklEXCIpO1xuLy8gPC9wcmU+XG5cbnZhciBMZXhlciA9IHJlcXVpcmUoJy4vTGV4ZXInKS5MZXhlcjtcblxuUGFyc2VyLnByb3RvdHlwZS5jb21waWxlUGFyc2VUcmVlUGF0dGVybiA9IGZ1bmN0aW9uKHBhdHRlcm4sIHBhdHRlcm5SdWxlSW5kZXgsIGxleGVyKSB7XG5cdGxleGVyID0gbGV4ZXIgfHwgbnVsbDtcblx0aWYgKGxleGVyID09PSBudWxsKSB7XG5cdFx0aWYgKHRoaXMuZ2V0VG9rZW5TdHJlYW0oKSAhPT0gbnVsbCkge1xuXHRcdFx0dmFyIHRva2VuU291cmNlID0gdGhpcy5nZXRUb2tlblN0cmVhbSgpLnRva2VuU291cmNlO1xuXHRcdFx0aWYgKHRva2VuU291cmNlIGluc3RhbmNlb2YgTGV4ZXIpIHtcblx0XHRcdFx0bGV4ZXIgPSB0b2tlblNvdXJjZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0aWYgKGxleGVyID09PSBudWxsKSB7XG5cdFx0dGhyb3cgXCJQYXJzZXIgY2FuJ3QgZGlzY292ZXIgYSBsZXhlciB0byB1c2VcIjtcblx0fVxuXHR2YXIgbSA9IG5ldyBQYXJzZVRyZWVQYXR0ZXJuTWF0Y2hlcihsZXhlciwgdGhpcyk7XG5cdHJldHVybiBtLmNvbXBpbGUocGF0dGVybiwgcGF0dGVyblJ1bGVJbmRleCk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLmdldElucHV0U3RyZWFtID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLmdldFRva2VuU3RyZWFtKCk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLnNldElucHV0U3RyZWFtID0gZnVuY3Rpb24oaW5wdXQpIHtcblx0dGhpcy5zZXRUb2tlblN0cmVhbShpbnB1dCk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLmdldFRva2VuU3RyZWFtID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLl9pbnB1dDtcbn07XG5cbi8vIFNldCB0aGUgdG9rZW4gc3RyZWFtIGFuZCByZXNldCB0aGUgcGFyc2VyLi8vXG5QYXJzZXIucHJvdG90eXBlLnNldFRva2VuU3RyZWFtID0gZnVuY3Rpb24oaW5wdXQpIHtcblx0dGhpcy5faW5wdXQgPSBudWxsO1xuXHR0aGlzLnJlc2V0KCk7XG5cdHRoaXMuX2lucHV0ID0gaW5wdXQ7XG59O1xuXG4vLyBNYXRjaCBuZWVkcyB0byByZXR1cm4gdGhlIGN1cnJlbnQgaW5wdXQgc3ltYm9sLCB3aGljaCBnZXRzIHB1dFxuLy8gaW50byB0aGUgbGFiZWwgZm9yIHRoZSBhc3NvY2lhdGVkIHRva2VuIHJlZjsgZS5nLiwgeD1JRC5cbi8vXG5QYXJzZXIucHJvdG90eXBlLmdldEN1cnJlbnRUb2tlbiA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5faW5wdXQuTFQoMSk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLm5vdGlmeUVycm9yTGlzdGVuZXJzID0gZnVuY3Rpb24obXNnLCBvZmZlbmRpbmdUb2tlbiwgZXJyKSB7XG5cdG9mZmVuZGluZ1Rva2VuID0gb2ZmZW5kaW5nVG9rZW4gfHwgbnVsbDtcblx0ZXJyID0gZXJyIHx8IG51bGw7XG5cdGlmIChvZmZlbmRpbmdUb2tlbiA9PT0gbnVsbCkge1xuXHRcdG9mZmVuZGluZ1Rva2VuID0gdGhpcy5nZXRDdXJyZW50VG9rZW4oKTtcblx0fVxuXHR0aGlzLl9zeW50YXhFcnJvcnMgKz0gMTtcblx0dmFyIGxpbmUgPSBvZmZlbmRpbmdUb2tlbi5saW5lO1xuXHR2YXIgY29sdW1uID0gb2ZmZW5kaW5nVG9rZW4uY29sdW1uO1xuXHR2YXIgbGlzdGVuZXIgPSB0aGlzLmdldEVycm9yTGlzdGVuZXJEaXNwYXRjaCgpO1xuXHRsaXN0ZW5lci5zeW50YXhFcnJvcih0aGlzLCBvZmZlbmRpbmdUb2tlbiwgbGluZSwgY29sdW1uLCBtc2csIGVycik7XG59O1xuXG4vL1xuLy8gQ29uc3VtZSBhbmQgcmV0dXJuIHRoZSB7QGxpbmtwbGFpbiAvL2dldEN1cnJlbnRUb2tlbiBjdXJyZW50IHN5bWJvbH0uXG4vL1xuLy8gPHA+RS5nLiwgZ2l2ZW4gdGhlIGZvbGxvd2luZyBpbnB1dCB3aXRoIHtAY29kZSBBfSBiZWluZyB0aGUgY3VycmVudFxuLy8gbG9va2FoZWFkIHN5bWJvbCwgdGhpcyBmdW5jdGlvbiBtb3ZlcyB0aGUgY3Vyc29yIHRvIHtAY29kZSBCfSBhbmQgcmV0dXJuc1xuLy8ge0Bjb2RlIEF9LjwvcD5cbi8vXG4vLyA8cHJlPlxuLy8gQSBCXG4vLyBeXG4vLyA8L3ByZT5cbi8vXG4vLyBJZiB0aGUgcGFyc2VyIGlzIG5vdCBpbiBlcnJvciByZWNvdmVyeSBtb2RlLCB0aGUgY29uc3VtZWQgc3ltYm9sIGlzIGFkZGVkXG4vLyB0byB0aGUgcGFyc2UgdHJlZSB1c2luZyB7QGxpbmsgUGFyc2VyUnVsZUNvbnRleHQvL2FkZENoaWxkKFRva2VuKX0sIGFuZFxuLy8ge0BsaW5rIFBhcnNlVHJlZUxpc3RlbmVyLy92aXNpdFRlcm1pbmFsfSBpcyBjYWxsZWQgb24gYW55IHBhcnNlIGxpc3RlbmVycy5cbi8vIElmIHRoZSBwYXJzZXIgPGVtPmlzPC9lbT4gaW4gZXJyb3IgcmVjb3ZlcnkgbW9kZSwgdGhlIGNvbnN1bWVkIHN5bWJvbCBpc1xuLy8gYWRkZWQgdG8gdGhlIHBhcnNlIHRyZWUgdXNpbmdcbi8vIHtAbGluayBQYXJzZXJSdWxlQ29udGV4dC8vYWRkRXJyb3JOb2RlKFRva2VuKX0sIGFuZFxuLy8ge0BsaW5rIFBhcnNlVHJlZUxpc3RlbmVyLy92aXNpdEVycm9yTm9kZX0gaXMgY2FsbGVkIG9uIGFueSBwYXJzZVxuLy8gbGlzdGVuZXJzLlxuLy9cblBhcnNlci5wcm90b3R5cGUuY29uc3VtZSA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgbyA9IHRoaXMuZ2V0Q3VycmVudFRva2VuKCk7XG5cdGlmIChvLnR5cGUgIT09IFRva2VuLkVPRikge1xuXHRcdHRoaXMuZ2V0SW5wdXRTdHJlYW0oKS5jb25zdW1lKCk7XG5cdH1cblx0dmFyIGhhc0xpc3RlbmVyID0gdGhpcy5fcGFyc2VMaXN0ZW5lcnMgIT09IG51bGwgJiYgdGhpcy5fcGFyc2VMaXN0ZW5lcnMubGVuZ3RoID4gMDtcblx0aWYgKHRoaXMuYnVpbGRQYXJzZVRyZWVzIHx8IGhhc0xpc3RlbmVyKSB7XG5cdFx0dmFyIG5vZGU7XG5cdFx0aWYgKHRoaXMuX2VyckhhbmRsZXIuaW5FcnJvclJlY292ZXJ5TW9kZSh0aGlzKSkge1xuXHRcdFx0bm9kZSA9IHRoaXMuX2N0eC5hZGRFcnJvck5vZGUobyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG5vZGUgPSB0aGlzLl9jdHguYWRkVG9rZW5Ob2RlKG8pO1xuXHRcdH1cbiAgICAgICAgbm9kZS5pbnZva2luZ1N0YXRlID0gdGhpcy5zdGF0ZTtcblx0XHRpZiAoaGFzTGlzdGVuZXIpIHtcblx0XHRcdHRoaXMuX3BhcnNlTGlzdGVuZXJzLm1hcChmdW5jdGlvbihsaXN0ZW5lcikge1xuXHRcdFx0XHRpZiAobm9kZSBpbnN0YW5jZW9mIEVycm9yTm9kZSB8fCAobm9kZS5pc0Vycm9yTm9kZSAhPT0gdW5kZWZpbmVkICYmIG5vZGUuaXNFcnJvck5vZGUoKSkpIHtcblx0XHRcdFx0XHRsaXN0ZW5lci52aXNpdEVycm9yTm9kZShub2RlKTtcblx0XHRcdFx0fSBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgVGVybWluYWxOb2RlKSB7XG5cdFx0XHRcdFx0bGlzdGVuZXIudmlzaXRUZXJtaW5hbChub2RlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5hZGRDb250ZXh0VG9QYXJzZVRyZWUgPSBmdW5jdGlvbigpIHtcblx0Ly8gYWRkIGN1cnJlbnQgY29udGV4dCB0byBwYXJlbnQgaWYgd2UgaGF2ZSBhIHBhcmVudFxuXHRpZiAodGhpcy5fY3R4LnBhcmVudEN0eCAhPT0gbnVsbCkge1xuXHRcdHRoaXMuX2N0eC5wYXJlbnRDdHguYWRkQ2hpbGQodGhpcy5fY3R4KTtcblx0fVxufTtcblxuLy8gQWx3YXlzIGNhbGxlZCBieSBnZW5lcmF0ZWQgcGFyc2VycyB1cG9uIGVudHJ5IHRvIGEgcnVsZS4gQWNjZXNzIGZpZWxkXG4vLyB7QGxpbmsgLy9fY3R4fSBnZXQgdGhlIGN1cnJlbnQgY29udGV4dC5cblxuUGFyc2VyLnByb3RvdHlwZS5lbnRlclJ1bGUgPSBmdW5jdGlvbihsb2NhbGN0eCwgc3RhdGUsIHJ1bGVJbmRleCkge1xuXHR0aGlzLnN0YXRlID0gc3RhdGU7XG5cdHRoaXMuX2N0eCA9IGxvY2FsY3R4O1xuXHR0aGlzLl9jdHguc3RhcnQgPSB0aGlzLl9pbnB1dC5MVCgxKTtcblx0aWYgKHRoaXMuYnVpbGRQYXJzZVRyZWVzKSB7XG5cdFx0dGhpcy5hZGRDb250ZXh0VG9QYXJzZVRyZWUoKTtcblx0fVxuXHRpZiAodGhpcy5fcGFyc2VMaXN0ZW5lcnMgIT09IG51bGwpIHtcblx0XHR0aGlzLnRyaWdnZXJFbnRlclJ1bGVFdmVudCgpO1xuXHR9XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLmV4aXRSdWxlID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMuX2N0eC5zdG9wID0gdGhpcy5faW5wdXQuTFQoLTEpO1xuXHQvLyB0cmlnZ2VyIGV2ZW50IG9uIF9jdHgsIGJlZm9yZSBpdCByZXZlcnRzIHRvIHBhcmVudFxuXHRpZiAodGhpcy5fcGFyc2VMaXN0ZW5lcnMgIT09IG51bGwpIHtcblx0XHR0aGlzLnRyaWdnZXJFeGl0UnVsZUV2ZW50KCk7XG5cdH1cblx0dGhpcy5zdGF0ZSA9IHRoaXMuX2N0eC5pbnZva2luZ1N0YXRlO1xuXHR0aGlzLl9jdHggPSB0aGlzLl9jdHgucGFyZW50Q3R4O1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5lbnRlck91dGVyQWx0ID0gZnVuY3Rpb24obG9jYWxjdHgsIGFsdE51bSkge1xuICAgXHRsb2NhbGN0eC5zZXRBbHROdW1iZXIoYWx0TnVtKTtcblx0Ly8gaWYgd2UgaGF2ZSBuZXcgbG9jYWxjdHgsIG1ha2Ugc3VyZSB3ZSByZXBsYWNlIGV4aXN0aW5nIGN0eFxuXHQvLyB0aGF0IGlzIHByZXZpb3VzIGNoaWxkIG9mIHBhcnNlIHRyZWVcblx0aWYgKHRoaXMuYnVpbGRQYXJzZVRyZWVzICYmIHRoaXMuX2N0eCAhPT0gbG9jYWxjdHgpIHtcblx0XHRpZiAodGhpcy5fY3R4LnBhcmVudEN0eCAhPT0gbnVsbCkge1xuXHRcdFx0dGhpcy5fY3R4LnBhcmVudEN0eC5yZW1vdmVMYXN0Q2hpbGQoKTtcblx0XHRcdHRoaXMuX2N0eC5wYXJlbnRDdHguYWRkQ2hpbGQobG9jYWxjdHgpO1xuXHRcdH1cblx0fVxuXHR0aGlzLl9jdHggPSBsb2NhbGN0eDtcbn07XG5cbi8vIEdldCB0aGUgcHJlY2VkZW5jZSBsZXZlbCBmb3IgdGhlIHRvcC1tb3N0IHByZWNlZGVuY2UgcnVsZS5cbi8vXG4vLyBAcmV0dXJuIFRoZSBwcmVjZWRlbmNlIGxldmVsIGZvciB0aGUgdG9wLW1vc3QgcHJlY2VkZW5jZSBydWxlLCBvciAtMSBpZlxuLy8gdGhlIHBhcnNlciBjb250ZXh0IGlzIG5vdCBuZXN0ZWQgd2l0aGluIGEgcHJlY2VkZW5jZSBydWxlLlxuXG5QYXJzZXIucHJvdG90eXBlLmdldFByZWNlZGVuY2UgPSBmdW5jdGlvbigpIHtcblx0aWYgKHRoaXMuX3ByZWNlZGVuY2VTdGFjay5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gLTE7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHRoaXMuX3ByZWNlZGVuY2VTdGFja1t0aGlzLl9wcmVjZWRlbmNlU3RhY2subGVuZ3RoLTFdO1xuXHR9XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLmVudGVyUmVjdXJzaW9uUnVsZSA9IGZ1bmN0aW9uKGxvY2FsY3R4LCBzdGF0ZSwgcnVsZUluZGV4LFxuXHRcdHByZWNlZGVuY2UpIHtcblx0dGhpcy5zdGF0ZSA9IHN0YXRlO1xuXHR0aGlzLl9wcmVjZWRlbmNlU3RhY2sucHVzaChwcmVjZWRlbmNlKTtcblx0dGhpcy5fY3R4ID0gbG9jYWxjdHg7XG5cdHRoaXMuX2N0eC5zdGFydCA9IHRoaXMuX2lucHV0LkxUKDEpO1xuXHRpZiAodGhpcy5fcGFyc2VMaXN0ZW5lcnMgIT09IG51bGwpIHtcblx0XHR0aGlzLnRyaWdnZXJFbnRlclJ1bGVFdmVudCgpOyAvLyBzaW11bGF0ZXMgcnVsZSBlbnRyeSBmb3Jcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gbGVmdC1yZWN1cnNpdmUgcnVsZXNcblx0fVxufTtcblxuLy9cbi8vIExpa2Uge0BsaW5rIC8vZW50ZXJSdWxlfSBidXQgZm9yIHJlY3Vyc2l2ZSBydWxlcy5cblxuUGFyc2VyLnByb3RvdHlwZS5wdXNoTmV3UmVjdXJzaW9uQ29udGV4dCA9IGZ1bmN0aW9uKGxvY2FsY3R4LCBzdGF0ZSwgcnVsZUluZGV4KSB7XG5cdHZhciBwcmV2aW91cyA9IHRoaXMuX2N0eDtcblx0cHJldmlvdXMucGFyZW50Q3R4ID0gbG9jYWxjdHg7XG5cdHByZXZpb3VzLmludm9raW5nU3RhdGUgPSBzdGF0ZTtcblx0cHJldmlvdXMuc3RvcCA9IHRoaXMuX2lucHV0LkxUKC0xKTtcblxuXHR0aGlzLl9jdHggPSBsb2NhbGN0eDtcblx0dGhpcy5fY3R4LnN0YXJ0ID0gcHJldmlvdXMuc3RhcnQ7XG5cdGlmICh0aGlzLmJ1aWxkUGFyc2VUcmVlcykge1xuXHRcdHRoaXMuX2N0eC5hZGRDaGlsZChwcmV2aW91cyk7XG5cdH1cblx0aWYgKHRoaXMuX3BhcnNlTGlzdGVuZXJzICE9PSBudWxsKSB7XG5cdFx0dGhpcy50cmlnZ2VyRW50ZXJSdWxlRXZlbnQoKTsgLy8gc2ltdWxhdGVzIHJ1bGUgZW50cnkgZm9yXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGxlZnQtcmVjdXJzaXZlIHJ1bGVzXG5cdH1cbn07XG5cblBhcnNlci5wcm90b3R5cGUudW5yb2xsUmVjdXJzaW9uQ29udGV4dHMgPSBmdW5jdGlvbihwYXJlbnRDdHgpIHtcblx0dGhpcy5fcHJlY2VkZW5jZVN0YWNrLnBvcCgpO1xuXHR0aGlzLl9jdHguc3RvcCA9IHRoaXMuX2lucHV0LkxUKC0xKTtcblx0dmFyIHJldEN0eCA9IHRoaXMuX2N0eDsgLy8gc2F2ZSBjdXJyZW50IGN0eCAocmV0dXJuIHZhbHVlKVxuXHQvLyB1bnJvbGwgc28gX2N0eCBpcyBhcyBpdCB3YXMgYmVmb3JlIGNhbGwgdG8gcmVjdXJzaXZlIG1ldGhvZFxuXHRpZiAodGhpcy5fcGFyc2VMaXN0ZW5lcnMgIT09IG51bGwpIHtcblx0XHR3aGlsZSAodGhpcy5fY3R4ICE9PSBwYXJlbnRDdHgpIHtcblx0XHRcdHRoaXMudHJpZ2dlckV4aXRSdWxlRXZlbnQoKTtcblx0XHRcdHRoaXMuX2N0eCA9IHRoaXMuX2N0eC5wYXJlbnRDdHg7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHRoaXMuX2N0eCA9IHBhcmVudEN0eDtcblx0fVxuXHQvLyBob29rIGludG8gdHJlZVxuXHRyZXRDdHgucGFyZW50Q3R4ID0gcGFyZW50Q3R4O1xuXHRpZiAodGhpcy5idWlsZFBhcnNlVHJlZXMgJiYgcGFyZW50Q3R4ICE9PSBudWxsKSB7XG5cdFx0Ly8gYWRkIHJldHVybiBjdHggaW50byBpbnZva2luZyBydWxlJ3MgdHJlZVxuXHRcdHBhcmVudEN0eC5hZGRDaGlsZChyZXRDdHgpO1xuXHR9XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLmdldEludm9raW5nQ29udGV4dCA9IGZ1bmN0aW9uKHJ1bGVJbmRleCkge1xuXHR2YXIgY3R4ID0gdGhpcy5fY3R4O1xuXHR3aGlsZSAoY3R4ICE9PSBudWxsKSB7XG5cdFx0aWYgKGN0eC5ydWxlSW5kZXggPT09IHJ1bGVJbmRleCkge1xuXHRcdFx0cmV0dXJuIGN0eDtcblx0XHR9XG5cdFx0Y3R4ID0gY3R4LnBhcmVudEN0eDtcblx0fVxuXHRyZXR1cm4gbnVsbDtcbn07XG5cblBhcnNlci5wcm90b3R5cGUucHJlY3ByZWQgPSBmdW5jdGlvbihsb2NhbGN0eCwgcHJlY2VkZW5jZSkge1xuXHRyZXR1cm4gcHJlY2VkZW5jZSA+PSB0aGlzLl9wcmVjZWRlbmNlU3RhY2tbdGhpcy5fcHJlY2VkZW5jZVN0YWNrLmxlbmd0aC0xXTtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuaW5Db250ZXh0ID0gZnVuY3Rpb24oY29udGV4dCkge1xuXHQvLyBUT0RPOiB1c2VmdWwgaW4gcGFyc2VyP1xuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG4vL1xuLy8gQ2hlY2tzIHdoZXRoZXIgb3Igbm90IHtAY29kZSBzeW1ib2x9IGNhbiBmb2xsb3cgdGhlIGN1cnJlbnQgc3RhdGUgaW4gdGhlXG4vLyBBVE4uIFRoZSBiZWhhdmlvciBvZiB0aGlzIG1ldGhvZCBpcyBlcXVpdmFsZW50IHRvIHRoZSBmb2xsb3dpbmcsIGJ1dCBpc1xuLy8gaW1wbGVtZW50ZWQgc3VjaCB0aGF0IHRoZSBjb21wbGV0ZSBjb250ZXh0LXNlbnNpdGl2ZSBmb2xsb3cgc2V0IGRvZXMgbm90XG4vLyBuZWVkIHRvIGJlIGV4cGxpY2l0bHkgY29uc3RydWN0ZWQuXG4vL1xuLy8gPHByZT5cbi8vIHJldHVybiBnZXRFeHBlY3RlZFRva2VucygpLmNvbnRhaW5zKHN5bWJvbCk7XG4vLyA8L3ByZT5cbi8vXG4vLyBAcGFyYW0gc3ltYm9sIHRoZSBzeW1ib2wgdHlwZSB0byBjaGVja1xuLy8gQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYge0Bjb2RlIHN5bWJvbH0gY2FuIGZvbGxvdyB0aGUgY3VycmVudCBzdGF0ZSBpblxuLy8gdGhlIEFUTiwgb3RoZXJ3aXNlIHtAY29kZSBmYWxzZX0uXG5cblBhcnNlci5wcm90b3R5cGUuaXNFeHBlY3RlZFRva2VuID0gZnVuY3Rpb24oc3ltYm9sKSB7XG5cdHZhciBhdG4gPSB0aGlzLl9pbnRlcnAuYXRuO1xuXHR2YXIgY3R4ID0gdGhpcy5fY3R4O1xuXHR2YXIgcyA9IGF0bi5zdGF0ZXNbdGhpcy5zdGF0ZV07XG5cdHZhciBmb2xsb3dpbmcgPSBhdG4ubmV4dFRva2VucyhzKTtcblx0aWYgKGZvbGxvd2luZy5jb250YWlucyhzeW1ib2wpKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0aWYgKCFmb2xsb3dpbmcuY29udGFpbnMoVG9rZW4uRVBTSUxPTikpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0d2hpbGUgKGN0eCAhPT0gbnVsbCAmJiBjdHguaW52b2tpbmdTdGF0ZSA+PSAwICYmIGZvbGxvd2luZy5jb250YWlucyhUb2tlbi5FUFNJTE9OKSkge1xuXHRcdHZhciBpbnZva2luZ1N0YXRlID0gYXRuLnN0YXRlc1tjdHguaW52b2tpbmdTdGF0ZV07XG5cdFx0dmFyIHJ0ID0gaW52b2tpbmdTdGF0ZS50cmFuc2l0aW9uc1swXTtcblx0XHRmb2xsb3dpbmcgPSBhdG4ubmV4dFRva2VucyhydC5mb2xsb3dTdGF0ZSk7XG5cdFx0aWYgKGZvbGxvd2luZy5jb250YWlucyhzeW1ib2wpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0Y3R4ID0gY3R4LnBhcmVudEN0eDtcblx0fVxuXHRpZiAoZm9sbG93aW5nLmNvbnRhaW5zKFRva2VuLkVQU0lMT04pICYmIHN5bWJvbCA9PT0gVG9rZW4uRU9GKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG4vLyBDb21wdXRlcyB0aGUgc2V0IG9mIGlucHV0IHN5bWJvbHMgd2hpY2ggY291bGQgZm9sbG93IHRoZSBjdXJyZW50IHBhcnNlclxuLy8gc3RhdGUgYW5kIGNvbnRleHQsIGFzIGdpdmVuIGJ5IHtAbGluayAvL2dldFN0YXRlfSBhbmQge0BsaW5rIC8vZ2V0Q29udGV4dH0sXG4vLyByZXNwZWN0aXZlbHkuXG4vL1xuLy8gQHNlZSBBVE4vL2dldEV4cGVjdGVkVG9rZW5zKGludCwgUnVsZUNvbnRleHQpXG4vL1xuUGFyc2VyLnByb3RvdHlwZS5nZXRFeHBlY3RlZFRva2VucyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5faW50ZXJwLmF0bi5nZXRFeHBlY3RlZFRva2Vucyh0aGlzLnN0YXRlLCB0aGlzLl9jdHgpO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5nZXRFeHBlY3RlZFRva2Vuc1dpdGhpbkN1cnJlbnRSdWxlID0gZnVuY3Rpb24oKSB7XG5cdHZhciBhdG4gPSB0aGlzLl9pbnRlcnAuYXRuO1xuXHR2YXIgcyA9IGF0bi5zdGF0ZXNbdGhpcy5zdGF0ZV07XG5cdHJldHVybiBhdG4ubmV4dFRva2VucyhzKTtcbn07XG5cbi8vIEdldCBhIHJ1bGUncyBpbmRleCAoaS5lLiwge0Bjb2RlIFJVTEVfcnVsZU5hbWV9IGZpZWxkKSBvciAtMSBpZiBub3QgZm91bmQuLy9cblBhcnNlci5wcm90b3R5cGUuZ2V0UnVsZUluZGV4ID0gZnVuY3Rpb24ocnVsZU5hbWUpIHtcblx0dmFyIHJ1bGVJbmRleCA9IHRoaXMuZ2V0UnVsZUluZGV4TWFwKClbcnVsZU5hbWVdO1xuXHRpZiAocnVsZUluZGV4ICE9PSBudWxsKSB7XG5cdFx0cmV0dXJuIHJ1bGVJbmRleDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gLTE7XG5cdH1cbn07XG5cbi8vIFJldHVybiBMaXN0Jmx0O1N0cmluZyZndDsgb2YgdGhlIHJ1bGUgbmFtZXMgaW4geW91ciBwYXJzZXIgaW5zdGFuY2Vcbi8vIGxlYWRpbmcgdXAgdG8gYSBjYWxsIHRvIHRoZSBjdXJyZW50IHJ1bGUuIFlvdSBjb3VsZCBvdmVycmlkZSBpZlxuLy8geW91IHdhbnQgbW9yZSBkZXRhaWxzIHN1Y2ggYXMgdGhlIGZpbGUvbGluZSBpbmZvIG9mIHdoZXJlXG4vLyBpbiB0aGUgQVROIGEgcnVsZSBpcyBpbnZva2VkLlxuLy9cbi8vIHRoaXMgaXMgdmVyeSB1c2VmdWwgZm9yIGVycm9yIG1lc3NhZ2VzLlxuLy9cblBhcnNlci5wcm90b3R5cGUuZ2V0UnVsZUludm9jYXRpb25TdGFjayA9IGZ1bmN0aW9uKHApIHtcblx0cCA9IHAgfHwgbnVsbDtcblx0aWYgKHAgPT09IG51bGwpIHtcblx0XHRwID0gdGhpcy5fY3R4O1xuXHR9XG5cdHZhciBzdGFjayA9IFtdO1xuXHR3aGlsZSAocCAhPT0gbnVsbCkge1xuXHRcdC8vIGNvbXB1dGUgd2hhdCBmb2xsb3dzIHdobyBpbnZva2VkIHVzXG5cdFx0dmFyIHJ1bGVJbmRleCA9IHAucnVsZUluZGV4O1xuXHRcdGlmIChydWxlSW5kZXggPCAwKSB7XG5cdFx0XHRzdGFjay5wdXNoKFwibi9hXCIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzdGFjay5wdXNoKHRoaXMucnVsZU5hbWVzW3J1bGVJbmRleF0pO1xuXHRcdH1cblx0XHRwID0gcC5wYXJlbnRDdHg7XG5cdH1cblx0cmV0dXJuIHN0YWNrO1xufTtcblxuLy8gRm9yIGRlYnVnZ2luZyBhbmQgb3RoZXIgcHVycG9zZXMuLy9cblBhcnNlci5wcm90b3R5cGUuZ2V0REZBU3RyaW5ncyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5faW50ZXJwLmRlY2lzaW9uVG9ERkEudG9TdHJpbmcoKTtcbn07XG4vLyBGb3IgZGVidWdnaW5nIGFuZCBvdGhlciBwdXJwb3Nlcy4vL1xuUGFyc2VyLnByb3RvdHlwZS5kdW1wREZBID0gZnVuY3Rpb24oKSB7XG5cdHZhciBzZWVuT25lID0gZmFsc2U7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5faW50ZXJwLmRlY2lzaW9uVG9ERkEubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgZGZhID0gdGhpcy5faW50ZXJwLmRlY2lzaW9uVG9ERkFbaV07XG5cdFx0aWYgKGRmYS5zdGF0ZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0aWYgKHNlZW5PbmUpIHtcblx0XHRcdFx0Y29uc29sZS5sb2coKTtcblx0XHRcdH1cblx0XHRcdHRoaXMucHJpbnRlci5wcmludGxuKFwiRGVjaXNpb24gXCIgKyBkZmEuZGVjaXNpb24gKyBcIjpcIik7XG5cdFx0XHR0aGlzLnByaW50ZXIucHJpbnQoZGZhLnRvU3RyaW5nKHRoaXMubGl0ZXJhbE5hbWVzLCB0aGlzLnN5bWJvbGljTmFtZXMpKTtcblx0XHRcdHNlZW5PbmUgPSB0cnVlO1xuXHRcdH1cblx0fVxufTtcblxuLypcblwiXHRcdFx0cHJpbnRlciA9IGZ1bmN0aW9uKCkge1xcclxcblwiICtcblwiXHRcdFx0XHR0aGlzLnByaW50bG4gPSBmdW5jdGlvbihzKSB7IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvdXRwdXQnKSArPSBzICsgJ1xcXFxuJzsgfVxcclxcblwiICtcblwiXHRcdFx0XHR0aGlzLnByaW50ID0gZnVuY3Rpb24ocykgeyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb3V0cHV0JykgKz0gczsgfVxcclxcblwiICtcblwiXHRcdFx0fTtcXHJcXG5cIiArXG4qL1xuXG5QYXJzZXIucHJvdG90eXBlLmdldFNvdXJjZU5hbWUgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuX2lucHV0LnNvdXJjZU5hbWU7XG59O1xuXG4vLyBEdXJpbmcgYSBwYXJzZSBpcyBzb21ldGltZXMgdXNlZnVsIHRvIGxpc3RlbiBpbiBvbiB0aGUgcnVsZSBlbnRyeSBhbmQgZXhpdFxuLy8gZXZlbnRzIGFzIHdlbGwgYXMgdG9rZW4gbWF0Y2hlcy4gdGhpcyBpcyBmb3IgcXVpY2sgYW5kIGRpcnR5IGRlYnVnZ2luZy5cbi8vXG5QYXJzZXIucHJvdG90eXBlLnNldFRyYWNlID0gZnVuY3Rpb24odHJhY2UpIHtcblx0aWYgKCF0cmFjZSkge1xuXHRcdHRoaXMucmVtb3ZlUGFyc2VMaXN0ZW5lcih0aGlzLl90cmFjZXIpO1xuXHRcdHRoaXMuX3RyYWNlciA9IG51bGw7XG5cdH0gZWxzZSB7XG5cdFx0aWYgKHRoaXMuX3RyYWNlciAhPT0gbnVsbCkge1xuXHRcdFx0dGhpcy5yZW1vdmVQYXJzZUxpc3RlbmVyKHRoaXMuX3RyYWNlcik7XG5cdFx0fVxuXHRcdHRoaXMuX3RyYWNlciA9IG5ldyBUcmFjZUxpc3RlbmVyKHRoaXMpO1xuXHRcdHRoaXMuYWRkUGFyc2VMaXN0ZW5lcih0aGlzLl90cmFjZXIpO1xuXHR9XG59O1xuXG5leHBvcnRzLlBhcnNlciA9IFBhcnNlcjsiLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG5cbi8vKiBBIHJ1bGUgaW52b2NhdGlvbiByZWNvcmQgZm9yIHBhcnNpbmcuXG4vL1xuLy8gIENvbnRhaW5zIGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgcnVsZSBub3Qgc3RvcmVkIGluIHRoZVxuLy8gIFJ1bGVDb250ZXh0LiBJdCBoYW5kbGVzIHBhcnNlIHRyZWUgY2hpbGRyZW4gbGlzdCwgQW55IEFUTiBzdGF0ZVxuLy8gIHRyYWNpbmcsIGFuZCB0aGUgZGVmYXVsdCB2YWx1ZXMgYXZhaWxhYmxlIGZvciBydWxlIGluZGljYXRpb25zOlxuLy8gIHN0YXJ0LCBzdG9wLCBydWxlIGluZGV4LCBjdXJyZW50IGFsdCBudW1iZXIsIGN1cnJlbnRcbi8vICBBVE4gc3RhdGUuXG4vL1xuLy8gIFN1YmNsYXNzZXMgbWFkZSBmb3IgZWFjaCBydWxlIGFuZCBncmFtbWFyIHRyYWNrIHRoZSBwYXJhbWV0ZXJzLFxuLy8gIHJldHVybiB2YWx1ZXMsIGxvY2FscywgYW5kIGxhYmVscyBzcGVjaWZpYyB0byB0aGF0IHJ1bGUuIFRoZXNlXG4vLyAgYXJlIHRoZSBvYmplY3RzIHRoYXQgYXJlIHJldHVybmVkIGZyb20gcnVsZXMuXG4vL1xuLy8gIE5vdGUgdGV4dCBpcyBub3QgYW4gYWN0dWFsIGZpZWxkIG9mIGEgcnVsZSByZXR1cm4gdmFsdWU7IGl0IGlzIGNvbXB1dGVkXG4vLyAgZnJvbSBzdGFydCBhbmQgc3RvcCB1c2luZyB0aGUgaW5wdXQgc3RyZWFtJ3MgdG9TdHJpbmcoKSBtZXRob2QuICBJXG4vLyAgY291bGQgYWRkIGEgY3RvciB0byB0aGlzIHNvIHRoYXQgd2UgY2FuIHBhc3MgaW4gYW5kIHN0b3JlIHRoZSBpbnB1dFxuLy8gIHN0cmVhbSwgYnV0IEknbSBub3Qgc3VyZSB3ZSB3YW50IHRvIGRvIHRoYXQuICBJdCB3b3VsZCBzZWVtIHRvIGJlIHVuZGVmaW5lZFxuLy8gIHRvIGdldCB0aGUgLnRleHQgcHJvcGVydHkgYW55d2F5IGlmIHRoZSBydWxlIG1hdGNoZXMgdG9rZW5zIGZyb20gbXVsdGlwbGVcbi8vICBpbnB1dCBzdHJlYW1zLlxuLy9cbi8vICBJIGRvIG5vdCB1c2UgZ2V0dGVycyBmb3IgZmllbGRzIG9mIG9iamVjdHMgdGhhdCBhcmUgdXNlZCBzaW1wbHkgdG9cbi8vICBncm91cCB2YWx1ZXMgc3VjaCBhcyB0aGlzIGFnZ3JlZ2F0ZS4gIFRoZSBnZXR0ZXJzL3NldHRlcnMgYXJlIHRoZXJlIHRvXG4vLyAgc2F0aXNmeSB0aGUgc3VwZXJjbGFzcyBpbnRlcmZhY2UuXG5cbnZhciBSdWxlQ29udGV4dCA9IHJlcXVpcmUoJy4vUnVsZUNvbnRleHQnKS5SdWxlQ29udGV4dDtcbnZhciBUcmVlID0gcmVxdWlyZSgnLi90cmVlL1RyZWUnKTtcbnZhciBJTlZBTElEX0lOVEVSVkFMID0gVHJlZS5JTlZBTElEX0lOVEVSVkFMO1xudmFyIFRlcm1pbmFsTm9kZSA9IFRyZWUuVGVybWluYWxOb2RlO1xudmFyIFRlcm1pbmFsTm9kZUltcGwgPSBUcmVlLlRlcm1pbmFsTm9kZUltcGw7XG52YXIgRXJyb3JOb2RlSW1wbCA9IFRyZWUuRXJyb3JOb2RlSW1wbDtcbnZhciBJbnRlcnZhbCA9IHJlcXVpcmUoXCIuL0ludGVydmFsU2V0XCIpLkludGVydmFsO1xuXG5mdW5jdGlvbiBQYXJzZXJSdWxlQ29udGV4dChwYXJlbnQsIGludm9raW5nU3RhdGVOdW1iZXIpIHtcblx0cGFyZW50ID0gcGFyZW50IHx8IG51bGw7XG5cdGludm9raW5nU3RhdGVOdW1iZXIgPSBpbnZva2luZ1N0YXRlTnVtYmVyIHx8IG51bGw7XG5cdFJ1bGVDb250ZXh0LmNhbGwodGhpcywgcGFyZW50LCBpbnZva2luZ1N0YXRlTnVtYmVyKTtcblx0dGhpcy5ydWxlSW5kZXggPSAtMTtcbiAgICAvLyAqIElmIHdlIGFyZSBkZWJ1Z2dpbmcgb3IgYnVpbGRpbmcgYSBwYXJzZSB0cmVlIGZvciBhIHZpc2l0b3IsXG4gICAgLy8gd2UgbmVlZCB0byB0cmFjayBhbGwgb2YgdGhlIHRva2VucyBhbmQgcnVsZSBpbnZvY2F0aW9ucyBhc3NvY2lhdGVkXG4gICAgLy8gd2l0aCB0aGlzIHJ1bGUncyBjb250ZXh0LiBUaGlzIGlzIGVtcHR5IGZvciBwYXJzaW5nIHcvbyB0cmVlIGNvbnN0ci5cbiAgICAvLyBvcGVyYXRpb24gYmVjYXVzZSB3ZSBkb24ndCB0aGUgbmVlZCB0byB0cmFjayB0aGUgZGV0YWlscyBhYm91dFxuICAgIC8vIGhvdyB3ZSBwYXJzZSB0aGlzIHJ1bGUuXG4gICAgLy8gL1xuICAgIHRoaXMuY2hpbGRyZW4gPSBudWxsO1xuICAgIHRoaXMuc3RhcnQgPSBudWxsO1xuICAgIHRoaXMuc3RvcCA9IG51bGw7XG4gICAgLy8gVGhlIGV4Y2VwdGlvbiB0aGF0IGZvcmNlZCB0aGlzIHJ1bGUgdG8gcmV0dXJuLiBJZiB0aGUgcnVsZSBzdWNjZXNzZnVsbHlcbiAgICAvLyBjb21wbGV0ZWQsIHRoaXMgaXMge0Bjb2RlIG51bGx9LlxuICAgIHRoaXMuZXhjZXB0aW9uID0gbnVsbDtcbn1cblxuUGFyc2VyUnVsZUNvbnRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuUGFyc2VyUnVsZUNvbnRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFyc2VyUnVsZUNvbnRleHQ7XG5cbi8vICogQ09QWSBhIGN0eCAoSSdtIGRlbGliZXJhdGVseSBub3QgdXNpbmcgY29weSBjb25zdHJ1Y3RvcikvLy9cblBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZS5jb3B5RnJvbSA9IGZ1bmN0aW9uKGN0eCkge1xuICAgIC8vIGZyb20gUnVsZUNvbnRleHRcbiAgICB0aGlzLnBhcmVudEN0eCA9IGN0eC5wYXJlbnRDdHg7XG4gICAgdGhpcy5pbnZva2luZ1N0YXRlID0gY3R4Lmludm9raW5nU3RhdGU7XG4gICAgdGhpcy5jaGlsZHJlbiA9IG51bGw7XG4gICAgdGhpcy5zdGFydCA9IGN0eC5zdGFydDtcbiAgICB0aGlzLnN0b3AgPSBjdHguc3RvcDtcbiAgICAvLyBjb3B5IGFueSBlcnJvciBub2RlcyB0byBhbHQgbGFiZWwgbm9kZVxuICAgIGlmKGN0eC5jaGlsZHJlbikge1xuICAgICAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgICAgIC8vIHJlc2V0IHBhcmVudCBwb2ludGVyIGZvciBhbnkgZXJyb3Igbm9kZXNcbiAgICBcdGN0eC5jaGlsZHJlbi5tYXAoZnVuY3Rpb24oY2hpbGQpIHtcbiAgICBcdFx0aWYgKGNoaWxkIGluc3RhbmNlb2YgRXJyb3JOb2RlSW1wbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICAgICAgICAgICAgY2hpbGQucGFyZW50Q3R4ID0gdGhpcztcbiAgICAgICAgICAgIH1cblx0XHR9LCB0aGlzKTtcblx0fVxufTtcblxuLy8gRG91YmxlIGRpc3BhdGNoIG1ldGhvZHMgZm9yIGxpc3RlbmVyc1xuUGFyc2VyUnVsZUNvbnRleHQucHJvdG90eXBlLmVudGVyUnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG59O1xuXG5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUuZXhpdFJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xufTtcblxuLy8gKiBEb2VzIG5vdCBzZXQgcGFyZW50IGxpbms7IG90aGVyIGFkZCBtZXRob2RzIGRvIHRoYXQvLy9cblBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZS5hZGRDaGlsZCA9IGZ1bmN0aW9uKGNoaWxkKSB7XG4gICAgaWYgKHRoaXMuY2hpbGRyZW4gPT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xuICAgIH1cbiAgICB0aGlzLmNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8vICogVXNlZCBieSBlbnRlck91dGVyQWx0IHRvIHRvc3Mgb3V0IGEgUnVsZUNvbnRleHQgcHJldmlvdXNseSBhZGRlZCBhc1xuLy8gd2UgZW50ZXJlZCBhIHJ1bGUuIElmIHdlIGhhdmUgLy8gbGFiZWwsIHdlIHdpbGwgbmVlZCB0byByZW1vdmVcbi8vIGdlbmVyaWMgcnVsZUNvbnRleHQgb2JqZWN0LlxuLy8gL1xuUGFyc2VyUnVsZUNvbnRleHQucHJvdG90eXBlLnJlbW92ZUxhc3RDaGlsZCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLmNoaWxkcmVuICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4ucG9wKCk7XG4gICAgfVxufTtcblxuUGFyc2VyUnVsZUNvbnRleHQucHJvdG90eXBlLmFkZFRva2VuTm9kZSA9IGZ1bmN0aW9uKHRva2VuKSB7XG4gICAgdmFyIG5vZGUgPSBuZXcgVGVybWluYWxOb2RlSW1wbCh0b2tlbik7XG4gICAgdGhpcy5hZGRDaGlsZChub2RlKTtcbiAgICBub2RlLnBhcmVudEN0eCA9IHRoaXM7XG4gICAgcmV0dXJuIG5vZGU7XG59O1xuXG5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUuYWRkRXJyb3JOb2RlID0gZnVuY3Rpb24oYmFkVG9rZW4pIHtcbiAgICB2YXIgbm9kZSA9IG5ldyBFcnJvck5vZGVJbXBsKGJhZFRva2VuKTtcbiAgICB0aGlzLmFkZENoaWxkKG5vZGUpO1xuICAgIG5vZGUucGFyZW50Q3R4ID0gdGhpcztcbiAgICByZXR1cm4gbm9kZTtcbn07XG5cblBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZS5nZXRDaGlsZCA9IGZ1bmN0aW9uKGksIHR5cGUpIHtcblx0dHlwZSA9IHR5cGUgfHwgbnVsbDtcblx0aWYgKHRoaXMuY2hpbGRyZW4gPT09IG51bGwgfHwgaSA8IDAgfHwgaSA+PSB0aGlzLmNoaWxkcmVuLmxlbmd0aCkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdGlmICh0eXBlID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIHRoaXMuY2hpbGRyZW5baV07XG5cdH0gZWxzZSB7XG5cdFx0Zm9yKHZhciBqPTA7IGo8dGhpcy5jaGlsZHJlbi5sZW5ndGg7IGorKykge1xuXHRcdFx0dmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltqXTtcblx0XHRcdGlmKGNoaWxkIGluc3RhbmNlb2YgdHlwZSkge1xuXHRcdFx0XHRpZihpPT09MCkge1xuXHRcdFx0XHRcdHJldHVybiBjaGlsZDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpIC09IDE7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG4gICAgfVxufTtcblxuXG5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUuZ2V0VG9rZW4gPSBmdW5jdGlvbih0dHlwZSwgaSkge1xuXHRpZiAodGhpcy5jaGlsZHJlbiA9PT0gbnVsbCB8fCBpIDwgMCB8fCBpID49IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0Zm9yKHZhciBqPTA7IGo8dGhpcy5jaGlsZHJlbi5sZW5ndGg7IGorKykge1xuXHRcdHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5bal07XG5cdFx0aWYgKGNoaWxkIGluc3RhbmNlb2YgVGVybWluYWxOb2RlKSB7XG5cdFx0XHRpZiAoY2hpbGQuc3ltYm9sLnR5cGUgPT09IHR0eXBlKSB7XG5cdFx0XHRcdGlmKGk9PT0wKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNoaWxkO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGkgLT0gMTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuICAgICAgICB9XG5cdH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cblBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZS5nZXRUb2tlbnMgPSBmdW5jdGlvbih0dHlwZSApIHtcbiAgICBpZiAodGhpcy5jaGlsZHJlbj09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9IGVsc2Uge1xuXHRcdHZhciB0b2tlbnMgPSBbXTtcblx0XHRmb3IodmFyIGo9MDsgajx0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaisrKSB7XG5cdFx0XHR2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2pdO1xuXHRcdFx0aWYgKGNoaWxkIGluc3RhbmNlb2YgVGVybWluYWxOb2RlKSB7XG5cdFx0XHRcdGlmIChjaGlsZC5zeW1ib2wudHlwZSA9PT0gdHR5cGUpIHtcblx0XHRcdFx0XHR0b2tlbnMucHVzaChjaGlsZCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRva2VucztcbiAgICB9XG59O1xuXG5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUuZ2V0VHlwZWRSdWxlQ29udGV4dCA9IGZ1bmN0aW9uKGN0eFR5cGUsIGkpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDaGlsZChpLCBjdHhUeXBlKTtcbn07XG5cblBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZS5nZXRUeXBlZFJ1bGVDb250ZXh0cyA9IGZ1bmN0aW9uKGN0eFR5cGUpIHtcbiAgICBpZiAodGhpcy5jaGlsZHJlbj09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9IGVsc2Uge1xuXHRcdHZhciBjb250ZXh0cyA9IFtdO1xuXHRcdGZvcih2YXIgaj0wOyBqPHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBqKyspIHtcblx0XHRcdHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5bal07XG5cdFx0XHRpZiAoY2hpbGQgaW5zdGFuY2VvZiBjdHhUeXBlKSB7XG5cdFx0XHRcdGNvbnRleHRzLnB1c2goY2hpbGQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gY29udGV4dHM7XG5cdH1cbn07XG5cblBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZS5nZXRDaGlsZENvdW50ID0gZnVuY3Rpb24oKSB7XG5cdGlmICh0aGlzLmNoaWxkcmVuPT09IG51bGwpIHtcblx0XHRyZXR1cm4gMDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdGhpcy5jaGlsZHJlbi5sZW5ndGg7XG5cdH1cbn07XG5cblBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZS5nZXRTb3VyY2VJbnRlcnZhbCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmKCB0aGlzLnN0YXJ0ID09PSBudWxsIHx8IHRoaXMuc3RvcCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gSU5WQUxJRF9JTlRFUlZBTDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbmV3IEludGVydmFsKHRoaXMuc3RhcnQudG9rZW5JbmRleCwgdGhpcy5zdG9wLnRva2VuSW5kZXgpO1xuICAgIH1cbn07XG5cblJ1bGVDb250ZXh0LkVNUFRZID0gbmV3IFBhcnNlclJ1bGVDb250ZXh0KCk7XG5cbmZ1bmN0aW9uIEludGVycHJldGVyUnVsZUNvbnRleHQocGFyZW50LCBpbnZva2luZ1N0YXRlTnVtYmVyLCBydWxlSW5kZXgpIHtcblx0UGFyc2VyUnVsZUNvbnRleHQuY2FsbChwYXJlbnQsIGludm9raW5nU3RhdGVOdW1iZXIpO1xuICAgIHRoaXMucnVsZUluZGV4ID0gcnVsZUluZGV4O1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5JbnRlcnByZXRlclJ1bGVDb250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUGFyc2VyUnVsZUNvbnRleHQucHJvdG90eXBlKTtcbkludGVycHJldGVyUnVsZUNvbnRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSW50ZXJwcmV0ZXJSdWxlQ29udGV4dDtcblxuZXhwb3J0cy5QYXJzZXJSdWxlQ29udGV4dCA9IFBhcnNlclJ1bGVDb250ZXh0OyIsIi8vXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vLy9cblxudmFyIFJ1bGVDb250ZXh0ID0gcmVxdWlyZSgnLi9SdWxlQ29udGV4dCcpLlJ1bGVDb250ZXh0O1xudmFyIEhhc2ggPSByZXF1aXJlKCcuL1V0aWxzJykuSGFzaDtcblxuZnVuY3Rpb24gUHJlZGljdGlvbkNvbnRleHQoY2FjaGVkSGFzaENvZGUpIHtcblx0dGhpcy5jYWNoZWRIYXNoQ29kZSA9IGNhY2hlZEhhc2hDb2RlO1xufVxuXG4vLyBSZXByZXNlbnRzIHtAY29kZSAkfSBpbiBsb2NhbCBjb250ZXh0IHByZWRpY3Rpb24sIHdoaWNoIG1lYW5zIHdpbGRjYXJkLlxuLy8ge0Bjb2RlLy8reCA9Ly99LlxuLy8gL1xuUHJlZGljdGlvbkNvbnRleHQuRU1QVFkgPSBudWxsO1xuXG4vLyBSZXByZXNlbnRzIHtAY29kZSAkfSBpbiBhbiBhcnJheSBpbiBmdWxsIGNvbnRleHQgbW9kZSwgd2hlbiB7QGNvZGUgJH1cbi8vIGRvZXNuJ3QgbWVhbiB3aWxkY2FyZDoge0Bjb2RlICQgKyB4ID0gWyQseF19LiBIZXJlLFxuLy8ge0Bjb2RlICR9ID0ge0BsaW5rIC8vRU1QVFlfUkVUVVJOX1NUQVRFfS5cbi8vIC9cblByZWRpY3Rpb25Db250ZXh0LkVNUFRZX1JFVFVSTl9TVEFURSA9IDB4N0ZGRkZGRkY7XG5cblByZWRpY3Rpb25Db250ZXh0Lmdsb2JhbE5vZGVDb3VudCA9IDE7XG5QcmVkaWN0aW9uQ29udGV4dC5pZCA9IFByZWRpY3Rpb25Db250ZXh0Lmdsb2JhbE5vZGVDb3VudDtcblxuLy8gU3RvcmVzIHRoZSBjb21wdXRlZCBoYXNoIGNvZGUgb2YgdGhpcyB7QGxpbmsgUHJlZGljdGlvbkNvbnRleHR9LiBUaGUgaGFzaFxuLy8gY29kZSBpcyBjb21wdXRlZCBpbiBwYXJ0cyB0byBtYXRjaCB0aGUgZm9sbG93aW5nIHJlZmVyZW5jZSBhbGdvcml0aG0uXG4vL1xuLy8gPHByZT5cbi8vIHByaXZhdGUgaW50IHJlZmVyZW5jZUhhc2hDb2RlKCkge1xuLy8gaW50IGhhc2ggPSB7QGxpbmsgTXVybXVySGFzaC8vaW5pdGlhbGl6ZSBNdXJtdXJIYXNoLmluaXRpYWxpemV9KHtAbGlua1xuLy8gLy9JTklUSUFMX0hBU0h9KTtcbi8vXG4vLyBmb3IgKGludCBpID0gMDsgaSAmbHQ7IHtAbGluayAvL3NpemUoKX07IGkrKykge1xuLy8gaGFzaCA9IHtAbGluayBNdXJtdXJIYXNoLy91cGRhdGUgTXVybXVySGFzaC51cGRhdGV9KGhhc2gsIHtAbGluayAvL2dldFBhcmVudFxuLy8gZ2V0UGFyZW50fShpKSk7XG4vLyB9XG4vL1xuLy8gZm9yIChpbnQgaSA9IDA7IGkgJmx0OyB7QGxpbmsgLy9zaXplKCl9OyBpKyspIHtcbi8vIGhhc2ggPSB7QGxpbmsgTXVybXVySGFzaC8vdXBkYXRlIE11cm11ckhhc2gudXBkYXRlfShoYXNoLCB7QGxpbmtcbi8vIC8vZ2V0UmV0dXJuU3RhdGUgZ2V0UmV0dXJuU3RhdGV9KGkpKTtcbi8vIH1cbi8vXG4vLyBoYXNoID0ge0BsaW5rIE11cm11ckhhc2gvL2ZpbmlzaCBNdXJtdXJIYXNoLmZpbmlzaH0oaGFzaCwgMi8vIHtAbGlua1xuLy8gLy9zaXplKCl9KTtcbi8vIHJldHVybiBoYXNoO1xuLy8gfVxuLy8gPC9wcmU+XG4vLyAvXG5cbi8vIFRoaXMgbWVhbnMgb25seSB0aGUge0BsaW5rIC8vRU1QVFl9IGNvbnRleHQgaXMgaW4gc2V0LlxuUHJlZGljdGlvbkNvbnRleHQucHJvdG90eXBlLmlzRW1wdHkgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMgPT09IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZO1xufTtcblxuUHJlZGljdGlvbkNvbnRleHQucHJvdG90eXBlLmhhc0VtcHR5UGF0aCA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5nZXRSZXR1cm5TdGF0ZSh0aGlzLmxlbmd0aCAtIDEpID09PSBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWV9SRVRVUk5fU1RBVEU7XG59O1xuXG5QcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUuaGFzaENvZGUgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuY2FjaGVkSGFzaENvZGU7XG59O1xuXG5cblByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS51cGRhdGVIYXNoQ29kZSA9IGZ1bmN0aW9uKGhhc2gpIHtcbiAgICBoYXNoLnVwZGF0ZSh0aGlzLmNhY2hlZEhhc2hDb2RlKTtcbn07XG4vKlxuZnVuY3Rpb24gY2FsY3VsYXRlSGFzaFN0cmluZyhwYXJlbnQsIHJldHVyblN0YXRlKSB7XG5cdHJldHVybiBcIlwiICsgcGFyZW50ICsgcmV0dXJuU3RhdGU7XG59XG4qL1xuXG4vLyBVc2VkIHRvIGNhY2hlIHtAbGluayBQcmVkaWN0aW9uQ29udGV4dH0gb2JqZWN0cy4gSXRzIHVzZWQgZm9yIHRoZSBzaGFyZWRcbi8vIGNvbnRleHQgY2FzaCBhc3NvY2lhdGVkIHdpdGggY29udGV4dHMgaW4gREZBIHN0YXRlcy4gVGhpcyBjYWNoZVxuLy8gY2FuIGJlIHVzZWQgZm9yIGJvdGggbGV4ZXJzIGFuZCBwYXJzZXJzLlxuXG5mdW5jdGlvbiBQcmVkaWN0aW9uQ29udGV4dENhY2hlKCkge1xuXHR0aGlzLmNhY2hlID0ge307XG5cdHJldHVybiB0aGlzO1xufVxuXG4vLyBBZGQgYSBjb250ZXh0IHRvIHRoZSBjYWNoZSBhbmQgcmV0dXJuIGl0LiBJZiB0aGUgY29udGV4dCBhbHJlYWR5IGV4aXN0cyxcbi8vIHJldHVybiB0aGF0IG9uZSBpbnN0ZWFkIGFuZCBkbyBub3QgYWRkIGEgbmV3IGNvbnRleHQgdG8gdGhlIGNhY2hlLlxuLy8gUHJvdGVjdCBzaGFyZWQgY2FjaGUgZnJvbSB1bnNhZmUgdGhyZWFkIGFjY2Vzcy5cbi8vXG5QcmVkaWN0aW9uQ29udGV4dENhY2hlLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbihjdHgpIHtcblx0aWYgKGN0eCA9PT0gUHJlZGljdGlvbkNvbnRleHQuRU1QVFkpIHtcblx0XHRyZXR1cm4gUHJlZGljdGlvbkNvbnRleHQuRU1QVFk7XG5cdH1cblx0dmFyIGV4aXN0aW5nID0gdGhpcy5jYWNoZVtjdHhdIHx8IG51bGw7XG5cdGlmIChleGlzdGluZyAhPT0gbnVsbCkge1xuXHRcdHJldHVybiBleGlzdGluZztcblx0fVxuXHR0aGlzLmNhY2hlW2N0eF0gPSBjdHg7XG5cdHJldHVybiBjdHg7XG59O1xuXG5QcmVkaWN0aW9uQ29udGV4dENhY2hlLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihjdHgpIHtcblx0cmV0dXJuIHRoaXMuY2FjaGVbY3R4XSB8fCBudWxsO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFByZWRpY3Rpb25Db250ZXh0Q2FjaGUucHJvdG90eXBlLCBcImxlbmd0aFwiLCB7XG5cdGdldCA6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmNhY2hlLmxlbmd0aDtcblx0fVxufSk7XG5cbmZ1bmN0aW9uIFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0KHBhcmVudCwgcmV0dXJuU3RhdGUpIHtcblx0dmFyIGhhc2hDb2RlID0gMDtcblx0aWYocGFyZW50ICE9PSBudWxsKSB7XG5cdFx0dmFyIGhhc2ggPSBuZXcgSGFzaCgpO1xuXHRcdGhhc2gudXBkYXRlKHBhcmVudCwgcmV0dXJuU3RhdGUpO1xuICAgICAgICBoYXNoQ29kZSA9IGhhc2guZmluaXNoKCk7XG5cdH1cblx0UHJlZGljdGlvbkNvbnRleHQuY2FsbCh0aGlzLCBoYXNoQ29kZSk7XG5cdHRoaXMucGFyZW50Q3R4ID0gcGFyZW50O1xuXHR0aGlzLnJldHVyblN0YXRlID0gcmV0dXJuU3RhdGU7XG59XG5cblNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUHJlZGljdGlvbkNvbnRleHQucHJvdG90eXBlKTtcblNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5jb250cnVjdG9yID0gU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQ7XG5cblNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0LmNyZWF0ZSA9IGZ1bmN0aW9uKHBhcmVudCwgcmV0dXJuU3RhdGUpIHtcblx0aWYgKHJldHVyblN0YXRlID09PSBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWV9SRVRVUk5fU1RBVEUgJiYgcGFyZW50ID09PSBudWxsKSB7XG5cdFx0Ly8gc29tZW9uZSBjYW4gcGFzcyBpbiB0aGUgYml0cyBvZiBhbiBhcnJheSBjdHggdGhhdCBtZWFuICRcblx0XHRyZXR1cm4gUHJlZGljdGlvbkNvbnRleHQuRU1QVFk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIG5ldyBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dChwYXJlbnQsIHJldHVyblN0YXRlKTtcblx0fVxufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZSwgXCJsZW5ndGhcIiwge1xuXHRnZXQgOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gMTtcblx0fVxufSk7XG5cblNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5nZXRQYXJlbnQgPSBmdW5jdGlvbihpbmRleCkge1xuXHRyZXR1cm4gdGhpcy5wYXJlbnRDdHg7XG59O1xuXG5TaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUuZ2V0UmV0dXJuU3RhdGUgPSBmdW5jdGlvbihpbmRleCkge1xuXHRyZXR1cm4gdGhpcy5yZXR1cm5TdGF0ZTtcbn07XG5cblNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbihvdGhlcikge1xuXHRpZiAodGhpcyA9PT0gb3RoZXIpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBlbHNlIGlmICghKG90aGVyIGluc3RhbmNlb2YgU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9IGVsc2UgaWYgKHRoaXMuaGFzaENvZGUoKSAhPT0gb3RoZXIuaGFzaENvZGUoKSkge1xuXHRcdHJldHVybiBmYWxzZTsgLy8gY2FuJ3QgYmUgc2FtZSBpZiBoYXNoIGlzIGRpZmZlcmVudFxuXHR9IGVsc2Uge1xuXHRcdGlmKHRoaXMucmV0dXJuU3RhdGUgIT09IG90aGVyLnJldHVyblN0YXRlKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBlbHNlIGlmKHRoaXMucGFyZW50Q3R4PT1udWxsKVxuICAgICAgICAgICAgcmV0dXJuIG90aGVyLnBhcmVudEN0eD09bnVsbFxuXHRcdGVsc2VcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudEN0eC5lcXVhbHMob3RoZXIucGFyZW50Q3R4KTtcblx0fVxufTtcblxuU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdHZhciB1cCA9IHRoaXMucGFyZW50Q3R4ID09PSBudWxsID8gXCJcIiA6IHRoaXMucGFyZW50Q3R4LnRvU3RyaW5nKCk7XG5cdGlmICh1cC5sZW5ndGggPT09IDApIHtcblx0XHRpZiAodGhpcy5yZXR1cm5TdGF0ZSA9PT0gUHJlZGljdGlvbkNvbnRleHQuRU1QVFlfUkVUVVJOX1NUQVRFKSB7XG5cdFx0XHRyZXR1cm4gXCIkXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBcIlwiICsgdGhpcy5yZXR1cm5TdGF0ZTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFwiXCIgKyB0aGlzLnJldHVyblN0YXRlICsgXCIgXCIgKyB1cDtcblx0fVxufTtcblxuZnVuY3Rpb24gRW1wdHlQcmVkaWN0aW9uQ29udGV4dCgpIHtcblx0U2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQuY2FsbCh0aGlzLCBudWxsLCBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWV9SRVRVUk5fU1RBVEUpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuRW1wdHlQcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZSk7XG5FbXB0eVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEVtcHR5UHJlZGljdGlvbkNvbnRleHQ7XG5cbkVtcHR5UHJlZGljdGlvbkNvbnRleHQucHJvdG90eXBlLmlzRW1wdHkgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRydWU7XG59O1xuXG5FbXB0eVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5nZXRQYXJlbnQgPSBmdW5jdGlvbihpbmRleCkge1xuXHRyZXR1cm4gbnVsbDtcbn07XG5cbkVtcHR5UHJlZGljdGlvbkNvbnRleHQucHJvdG90eXBlLmdldFJldHVyblN0YXRlID0gZnVuY3Rpb24oaW5kZXgpIHtcblx0cmV0dXJuIHRoaXMucmV0dXJuU3RhdGU7XG59O1xuXG5FbXB0eVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbihvdGhlcikge1xuXHRyZXR1cm4gdGhpcyA9PT0gb3RoZXI7XG59O1xuXG5FbXB0eVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gXCIkXCI7XG59O1xuXG5QcmVkaWN0aW9uQ29udGV4dC5FTVBUWSA9IG5ldyBFbXB0eVByZWRpY3Rpb25Db250ZXh0KCk7XG5cbmZ1bmN0aW9uIEFycmF5UHJlZGljdGlvbkNvbnRleHQocGFyZW50cywgcmV0dXJuU3RhdGVzKSB7XG5cdC8vIFBhcmVudCBjYW4gYmUgbnVsbCBvbmx5IGlmIGZ1bGwgY3R4IG1vZGUgYW5kIHdlIG1ha2UgYW4gYXJyYXlcblx0Ly8gZnJvbSB7QGxpbmsgLy9FTVBUWX0gYW5kIG5vbi1lbXB0eS4gV2UgbWVyZ2Uge0BsaW5rIC8vRU1QVFl9IGJ5IHVzaW5nXG5cdC8vIG51bGwgcGFyZW50IGFuZFxuXHQvLyByZXR1cm5TdGF0ZSA9PSB7QGxpbmsgLy9FTVBUWV9SRVRVUk5fU1RBVEV9LlxuXHR2YXIgaCA9IG5ldyBIYXNoKCk7XG5cdGgudXBkYXRlKHBhcmVudHMsIHJldHVyblN0YXRlcyk7XG5cdHZhciBoYXNoQ29kZSA9IGguZmluaXNoKCk7XG5cdFByZWRpY3Rpb25Db250ZXh0LmNhbGwodGhpcywgaGFzaENvZGUpO1xuXHR0aGlzLnBhcmVudHMgPSBwYXJlbnRzO1xuXHR0aGlzLnJldHVyblN0YXRlcyA9IHJldHVyblN0YXRlcztcblx0cmV0dXJuIHRoaXM7XG59XG5cbkFycmF5UHJlZGljdGlvbkNvbnRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShQcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUpO1xuQXJyYXlQcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBcnJheVByZWRpY3Rpb25Db250ZXh0O1xuXG5BcnJheVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24oKSB7XG5cdC8vIHNpbmNlIEVNUFRZX1JFVFVSTl9TVEFURSBjYW4gb25seSBhcHBlYXIgaW4gdGhlIGxhc3QgcG9zaXRpb24sIHdlXG5cdC8vIGRvbid0IG5lZWQgdG8gdmVyaWZ5IHRoYXQgc2l6ZT09MVxuXHRyZXR1cm4gdGhpcy5yZXR1cm5TdGF0ZXNbMF0gPT09IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZX1JFVFVSTl9TVEFURTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShBcnJheVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZSwgXCJsZW5ndGhcIiwge1xuXHRnZXQgOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5yZXR1cm5TdGF0ZXMubGVuZ3RoO1xuXHR9XG59KTtcblxuQXJyYXlQcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUuZ2V0UGFyZW50ID0gZnVuY3Rpb24oaW5kZXgpIHtcblx0cmV0dXJuIHRoaXMucGFyZW50c1tpbmRleF07XG59O1xuXG5BcnJheVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5nZXRSZXR1cm5TdGF0ZSA9IGZ1bmN0aW9uKGluZGV4KSB7XG5cdHJldHVybiB0aGlzLnJldHVyblN0YXRlc1tpbmRleF07XG59O1xuXG5BcnJheVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbihvdGhlcikge1xuXHRpZiAodGhpcyA9PT0gb3RoZXIpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBlbHNlIGlmICghKG90aGVyIGluc3RhbmNlb2YgQXJyYXlQcmVkaWN0aW9uQ29udGV4dCkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZWxzZSBpZiAodGhpcy5oYXNoQ29kZSgpICE9PSBvdGhlci5oYXNoQ29kZSgpKSB7XG5cdFx0cmV0dXJuIGZhbHNlOyAvLyBjYW4ndCBiZSBzYW1lIGlmIGhhc2ggaXMgZGlmZmVyZW50XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHRoaXMucmV0dXJuU3RhdGVzID09PSBvdGhlci5yZXR1cm5TdGF0ZXMgJiZcblx0XHRcdFx0dGhpcy5wYXJlbnRzID09PSBvdGhlci5wYXJlbnRzO1xuXHR9XG59O1xuXG5BcnJheVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRpZiAodGhpcy5pc0VtcHR5KCkpIHtcblx0XHRyZXR1cm4gXCJbXVwiO1xuXHR9IGVsc2Uge1xuXHRcdHZhciBzID0gXCJbXCI7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJldHVyblN0YXRlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKGkgPiAwKSB7XG5cdFx0XHRcdHMgPSBzICsgXCIsIFwiO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHRoaXMucmV0dXJuU3RhdGVzW2ldID09PSBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWV9SRVRVUk5fU1RBVEUpIHtcblx0XHRcdFx0cyA9IHMgKyBcIiRcIjtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRzID0gcyArIHRoaXMucmV0dXJuU3RhdGVzW2ldO1xuXHRcdFx0aWYgKHRoaXMucGFyZW50c1tpXSAhPT0gbnVsbCkge1xuXHRcdFx0XHRzID0gcyArIFwiIFwiICsgdGhpcy5wYXJlbnRzW2ldO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cyA9IHMgKyBcIm51bGxcIjtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHMgKyBcIl1cIjtcblx0fVxufTtcblxuLy8gQ29udmVydCBhIHtAbGluayBSdWxlQ29udGV4dH0gdHJlZSB0byBhIHtAbGluayBQcmVkaWN0aW9uQ29udGV4dH0gZ3JhcGguXG4vLyBSZXR1cm4ge0BsaW5rIC8vRU1QVFl9IGlmIHtAY29kZSBvdXRlckNvbnRleHR9IGlzIGVtcHR5IG9yIG51bGwuXG4vLyAvXG5mdW5jdGlvbiBwcmVkaWN0aW9uQ29udGV4dEZyb21SdWxlQ29udGV4dChhdG4sIG91dGVyQ29udGV4dCkge1xuXHRpZiAob3V0ZXJDb250ZXh0ID09PSB1bmRlZmluZWQgfHwgb3V0ZXJDb250ZXh0ID09PSBudWxsKSB7XG5cdFx0b3V0ZXJDb250ZXh0ID0gUnVsZUNvbnRleHQuRU1QVFk7XG5cdH1cblx0Ly8gaWYgd2UgYXJlIGluIFJ1bGVDb250ZXh0IG9mIHN0YXJ0IHJ1bGUsIHMsIHRoZW4gUHJlZGljdGlvbkNvbnRleHRcblx0Ly8gaXMgRU1QVFkuIE5vYm9keSBjYWxsZWQgdXMuIChpZiB3ZSBhcmUgZW1wdHksIHJldHVybiBlbXB0eSlcblx0aWYgKG91dGVyQ29udGV4dC5wYXJlbnRDdHggPT09IG51bGwgfHwgb3V0ZXJDb250ZXh0ID09PSBSdWxlQ29udGV4dC5FTVBUWSkge1xuXHRcdHJldHVybiBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWTtcblx0fVxuXHQvLyBJZiB3ZSBoYXZlIGEgcGFyZW50LCBjb252ZXJ0IGl0IHRvIGEgUHJlZGljdGlvbkNvbnRleHQgZ3JhcGhcblx0dmFyIHBhcmVudCA9IHByZWRpY3Rpb25Db250ZXh0RnJvbVJ1bGVDb250ZXh0KGF0biwgb3V0ZXJDb250ZXh0LnBhcmVudEN0eCk7XG5cdHZhciBzdGF0ZSA9IGF0bi5zdGF0ZXNbb3V0ZXJDb250ZXh0Lmludm9raW5nU3RhdGVdO1xuXHR2YXIgdHJhbnNpdGlvbiA9IHN0YXRlLnRyYW5zaXRpb25zWzBdO1xuXHRyZXR1cm4gU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQuY3JlYXRlKHBhcmVudCwgdHJhbnNpdGlvbi5mb2xsb3dTdGF0ZS5zdGF0ZU51bWJlcik7XG59XG4vKlxuZnVuY3Rpb24gY2FsY3VsYXRlTGlzdHNIYXNoU3RyaW5nKHBhcmVudHMsIHJldHVyblN0YXRlcykge1xuXHR2YXIgcyA9IFwiXCI7XG5cdHBhcmVudHMubWFwKGZ1bmN0aW9uKHApIHtcblx0XHRzID0gcyArIHA7XG5cdH0pO1xuXHRyZXR1cm5TdGF0ZXMubWFwKGZ1bmN0aW9uKHIpIHtcblx0XHRzID0gcyArIHI7XG5cdH0pO1xuXHRyZXR1cm4gcztcbn1cbiovXG5mdW5jdGlvbiBtZXJnZShhLCBiLCByb290SXNXaWxkY2FyZCwgbWVyZ2VDYWNoZSkge1xuXHQvLyBzaGFyZSBzYW1lIGdyYXBoIGlmIGJvdGggc2FtZVxuXHRpZiAoYSA9PT0gYikge1xuXHRcdHJldHVybiBhO1xuXHR9XG5cdGlmIChhIGluc3RhbmNlb2YgU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQgJiYgYiBpbnN0YW5jZW9mIFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0KSB7XG5cdFx0cmV0dXJuIG1lcmdlU2luZ2xldG9ucyhhLCBiLCByb290SXNXaWxkY2FyZCwgbWVyZ2VDYWNoZSk7XG5cdH1cblx0Ly8gQXQgbGVhc3Qgb25lIG9mIGEgb3IgYiBpcyBhcnJheVxuXHQvLyBJZiBvbmUgaXMgJCBhbmQgcm9vdElzV2lsZGNhcmQsIHJldHVybiAkIGFzLy8gd2lsZGNhcmRcblx0aWYgKHJvb3RJc1dpbGRjYXJkKSB7XG5cdFx0aWYgKGEgaW5zdGFuY2VvZiBFbXB0eVByZWRpY3Rpb25Db250ZXh0KSB7XG5cdFx0XHRyZXR1cm4gYTtcblx0XHR9XG5cdFx0aWYgKGIgaW5zdGFuY2VvZiBFbXB0eVByZWRpY3Rpb25Db250ZXh0KSB7XG5cdFx0XHRyZXR1cm4gYjtcblx0XHR9XG5cdH1cblx0Ly8gY29udmVydCBzaW5nbGV0b24gc28gYm90aCBhcmUgYXJyYXlzIHRvIG5vcm1hbGl6ZVxuXHRpZiAoYSBpbnN0YW5jZW9mIFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0KSB7XG5cdFx0YSA9IG5ldyBBcnJheVByZWRpY3Rpb25Db250ZXh0KFthLmdldFBhcmVudCgpXSwgW2EucmV0dXJuU3RhdGVdKTtcblx0fVxuXHRpZiAoYiBpbnN0YW5jZW9mIFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0KSB7XG5cdFx0YiA9IG5ldyBBcnJheVByZWRpY3Rpb25Db250ZXh0KFtiLmdldFBhcmVudCgpXSwgW2IucmV0dXJuU3RhdGVdKTtcblx0fVxuXHRyZXR1cm4gbWVyZ2VBcnJheXMoYSwgYiwgcm9vdElzV2lsZGNhcmQsIG1lcmdlQ2FjaGUpO1xufVxuXG4vL1xuLy8gTWVyZ2UgdHdvIHtAbGluayBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dH0gaW5zdGFuY2VzLlxuLy9cbi8vIDxwPlN0YWNrIHRvcHMgZXF1YWwsIHBhcmVudHMgbWVyZ2UgaXMgc2FtZTsgcmV0dXJuIGxlZnQgZ3JhcGguPGJyPlxuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9TaW5nbGV0b25NZXJnZV9TYW1lUm9vdFNhbWVQYXIuc3ZnXCJcbi8vIHR5cGU9XCJpbWFnZS9zdmcreG1sXCIvPjwvcD5cbi8vXG4vLyA8cD5TYW1lIHN0YWNrIHRvcCwgcGFyZW50cyBkaWZmZXI7IG1lcmdlIHBhcmVudHMgZ2l2aW5nIGFycmF5IG5vZGUsIHRoZW5cbi8vIHJlbWFpbmRlcnMgb2YgdGhvc2UgZ3JhcGhzLiBBIG5ldyByb290IG5vZGUgaXMgY3JlYXRlZCB0byBwb2ludCB0byB0aGVcbi8vIG1lcmdlZCBwYXJlbnRzLjxicj5cbi8vIDxlbWJlZCBzcmM9XCJpbWFnZXMvU2luZ2xldG9uTWVyZ2VfU2FtZVJvb3REaWZmUGFyLnN2Z1wiXG4vLyB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz48L3A+XG4vL1xuLy8gPHA+RGlmZmVyZW50IHN0YWNrIHRvcHMgcG9pbnRpbmcgdG8gc2FtZSBwYXJlbnQuIE1ha2UgYXJyYXkgbm9kZSBmb3IgdGhlXG4vLyByb290IHdoZXJlIGJvdGggZWxlbWVudCBpbiB0aGUgcm9vdCBwb2ludCB0byB0aGUgc2FtZSAob3JpZ2luYWwpXG4vLyBwYXJlbnQuPGJyPlxuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9TaW5nbGV0b25NZXJnZV9EaWZmUm9vdFNhbWVQYXIuc3ZnXCJcbi8vIHR5cGU9XCJpbWFnZS9zdmcreG1sXCIvPjwvcD5cbi8vXG4vLyA8cD5EaWZmZXJlbnQgc3RhY2sgdG9wcyBwb2ludGluZyB0byBkaWZmZXJlbnQgcGFyZW50cy4gTWFrZSBhcnJheSBub2RlIGZvclxuLy8gdGhlIHJvb3Qgd2hlcmUgZWFjaCBlbGVtZW50IHBvaW50cyB0byB0aGUgY29ycmVzcG9uZGluZyBvcmlnaW5hbFxuLy8gcGFyZW50Ljxicj5cbi8vIDxlbWJlZCBzcmM9XCJpbWFnZXMvU2luZ2xldG9uTWVyZ2VfRGlmZlJvb3REaWZmUGFyLnN2Z1wiXG4vLyB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz48L3A+XG4vL1xuLy8gQHBhcmFtIGEgdGhlIGZpcnN0IHtAbGluayBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dH1cbi8vIEBwYXJhbSBiIHRoZSBzZWNvbmQge0BsaW5rIFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0fVxuLy8gQHBhcmFtIHJvb3RJc1dpbGRjYXJkIHtAY29kZSB0cnVlfSBpZiB0aGlzIGlzIGEgbG9jYWwtY29udGV4dCBtZXJnZSxcbi8vIG90aGVyd2lzZSBmYWxzZSB0byBpbmRpY2F0ZSBhIGZ1bGwtY29udGV4dCBtZXJnZVxuLy8gQHBhcmFtIG1lcmdlQ2FjaGVcbi8vIC9cbmZ1bmN0aW9uIG1lcmdlU2luZ2xldG9ucyhhLCBiLCByb290SXNXaWxkY2FyZCwgbWVyZ2VDYWNoZSkge1xuXHRpZiAobWVyZ2VDYWNoZSAhPT0gbnVsbCkge1xuXHRcdHZhciBwcmV2aW91cyA9IG1lcmdlQ2FjaGUuZ2V0KGEsIGIpO1xuXHRcdGlmIChwcmV2aW91cyAhPT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIHByZXZpb3VzO1xuXHRcdH1cblx0XHRwcmV2aW91cyA9IG1lcmdlQ2FjaGUuZ2V0KGIsIGEpO1xuXHRcdGlmIChwcmV2aW91cyAhPT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIHByZXZpb3VzO1xuXHRcdH1cblx0fVxuXG5cdHZhciByb290TWVyZ2UgPSBtZXJnZVJvb3QoYSwgYiwgcm9vdElzV2lsZGNhcmQpO1xuXHRpZiAocm9vdE1lcmdlICE9PSBudWxsKSB7XG5cdFx0aWYgKG1lcmdlQ2FjaGUgIT09IG51bGwpIHtcblx0XHRcdG1lcmdlQ2FjaGUuc2V0KGEsIGIsIHJvb3RNZXJnZSk7XG5cdFx0fVxuXHRcdHJldHVybiByb290TWVyZ2U7XG5cdH1cblx0aWYgKGEucmV0dXJuU3RhdGUgPT09IGIucmV0dXJuU3RhdGUpIHtcblx0XHR2YXIgcGFyZW50ID0gbWVyZ2UoYS5wYXJlbnRDdHgsIGIucGFyZW50Q3R4LCByb290SXNXaWxkY2FyZCwgbWVyZ2VDYWNoZSk7XG5cdFx0Ly8gaWYgcGFyZW50IGlzIHNhbWUgYXMgZXhpc3RpbmcgYSBvciBiIHBhcmVudCBvciByZWR1Y2VkIHRvIGEgcGFyZW50LFxuXHRcdC8vIHJldHVybiBpdFxuXHRcdGlmIChwYXJlbnQgPT09IGEucGFyZW50Q3R4KSB7XG5cdFx0XHRyZXR1cm4gYTsgLy8gYXggKyBieCA9IGF4LCBpZiBhPWJcblx0XHR9XG5cdFx0aWYgKHBhcmVudCA9PT0gYi5wYXJlbnRDdHgpIHtcblx0XHRcdHJldHVybiBiOyAvLyBheCArIGJ4ID0gYngsIGlmIGE9YlxuXHRcdH1cblx0XHQvLyBlbHNlOiBheCArIGF5ID0gYSdbeCx5XVxuXHRcdC8vIG1lcmdlIHBhcmVudHMgeCBhbmQgeSwgZ2l2aW5nIGFycmF5IG5vZGUgd2l0aCB4LHkgdGhlbiByZW1haW5kZXJzXG5cdFx0Ly8gb2YgdGhvc2UgZ3JhcGhzLiBkdXAgYSwgYScgcG9pbnRzIGF0IG1lcmdlZCBhcnJheVxuXHRcdC8vIG5ldyBqb2luZWQgcGFyZW50IHNvIGNyZWF0ZSBuZXcgc2luZ2xldG9uIHBvaW50aW5nIHRvIGl0LCBhJ1xuXHRcdHZhciBzcGMgPSBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dC5jcmVhdGUocGFyZW50LCBhLnJldHVyblN0YXRlKTtcblx0XHRpZiAobWVyZ2VDYWNoZSAhPT0gbnVsbCkge1xuXHRcdFx0bWVyZ2VDYWNoZS5zZXQoYSwgYiwgc3BjKTtcblx0XHR9XG5cdFx0cmV0dXJuIHNwYztcblx0fSBlbHNlIHsgLy8gYSAhPSBiIHBheWxvYWRzIGRpZmZlclxuXHRcdC8vIHNlZSBpZiB3ZSBjYW4gY29sbGFwc2UgcGFyZW50cyBkdWUgdG8gJCt4IHBhcmVudHMgaWYgbG9jYWwgY3R4XG5cdFx0dmFyIHNpbmdsZVBhcmVudCA9IG51bGw7XG5cdFx0aWYgKGEgPT09IGIgfHwgKGEucGFyZW50Q3R4ICE9PSBudWxsICYmIGEucGFyZW50Q3R4ID09PSBiLnBhcmVudEN0eCkpIHsgLy8gYXggK1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGJ4ID1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBbYSxiXXhcblx0XHRcdHNpbmdsZVBhcmVudCA9IGEucGFyZW50Q3R4O1xuXHRcdH1cblx0XHRpZiAoc2luZ2xlUGFyZW50ICE9PSBudWxsKSB7IC8vIHBhcmVudHMgYXJlIHNhbWVcblx0XHRcdC8vIHNvcnQgcGF5bG9hZHMgYW5kIHVzZSBzYW1lIHBhcmVudFxuXHRcdFx0dmFyIHBheWxvYWRzID0gWyBhLnJldHVyblN0YXRlLCBiLnJldHVyblN0YXRlIF07XG5cdFx0XHRpZiAoYS5yZXR1cm5TdGF0ZSA+IGIucmV0dXJuU3RhdGUpIHtcblx0XHRcdFx0cGF5bG9hZHNbMF0gPSBiLnJldHVyblN0YXRlO1xuXHRcdFx0XHRwYXlsb2Fkc1sxXSA9IGEucmV0dXJuU3RhdGU7XG5cdFx0XHR9XG5cdFx0XHR2YXIgcGFyZW50cyA9IFsgc2luZ2xlUGFyZW50LCBzaW5nbGVQYXJlbnQgXTtcblx0XHRcdHZhciBhcGMgPSBuZXcgQXJyYXlQcmVkaWN0aW9uQ29udGV4dChwYXJlbnRzLCBwYXlsb2Fkcyk7XG5cdFx0XHRpZiAobWVyZ2VDYWNoZSAhPT0gbnVsbCkge1xuXHRcdFx0XHRtZXJnZUNhY2hlLnNldChhLCBiLCBhcGMpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGFwYztcblx0XHR9XG5cdFx0Ly8gcGFyZW50cyBkaWZmZXIgYW5kIGNhbid0IG1lcmdlIHRoZW0uIEp1c3QgcGFjayB0b2dldGhlclxuXHRcdC8vIGludG8gYXJyYXk7IGNhbid0IG1lcmdlLlxuXHRcdC8vIGF4ICsgYnkgPSBbYXgsYnldXG5cdFx0dmFyIHBheWxvYWRzID0gWyBhLnJldHVyblN0YXRlLCBiLnJldHVyblN0YXRlIF07XG5cdFx0dmFyIHBhcmVudHMgPSBbIGEucGFyZW50Q3R4LCBiLnBhcmVudEN0eCBdO1xuXHRcdGlmIChhLnJldHVyblN0YXRlID4gYi5yZXR1cm5TdGF0ZSkgeyAvLyBzb3J0IGJ5IHBheWxvYWRcblx0XHRcdHBheWxvYWRzWzBdID0gYi5yZXR1cm5TdGF0ZTtcblx0XHRcdHBheWxvYWRzWzFdID0gYS5yZXR1cm5TdGF0ZTtcblx0XHRcdHBhcmVudHMgPSBbIGIucGFyZW50Q3R4LCBhLnBhcmVudEN0eCBdO1xuXHRcdH1cblx0XHR2YXIgYV8gPSBuZXcgQXJyYXlQcmVkaWN0aW9uQ29udGV4dChwYXJlbnRzLCBwYXlsb2Fkcyk7XG5cdFx0aWYgKG1lcmdlQ2FjaGUgIT09IG51bGwpIHtcblx0XHRcdG1lcmdlQ2FjaGUuc2V0KGEsIGIsIGFfKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFfO1xuXHR9XG59XG5cbi8vXG4vLyBIYW5kbGUgY2FzZSB3aGVyZSBhdCBsZWFzdCBvbmUgb2Yge0Bjb2RlIGF9IG9yIHtAY29kZSBifSBpc1xuLy8ge0BsaW5rIC8vRU1QVFl9LiBJbiB0aGUgZm9sbG93aW5nIGRpYWdyYW1zLCB0aGUgc3ltYm9sIHtAY29kZSAkfSBpcyB1c2VkXG4vLyB0byByZXByZXNlbnQge0BsaW5rIC8vRU1QVFl9LlxuLy9cbi8vIDxoMj5Mb2NhbC1Db250ZXh0IE1lcmdlczwvaDI+XG4vL1xuLy8gPHA+VGhlc2UgbG9jYWwtY29udGV4dCBtZXJnZSBvcGVyYXRpb25zIGFyZSB1c2VkIHdoZW4ge0Bjb2RlIHJvb3RJc1dpbGRjYXJkfVxuLy8gaXMgdHJ1ZS48L3A+XG4vL1xuLy8gPHA+e0BsaW5rIC8vRU1QVFl9IGlzIHN1cGVyc2V0IG9mIGFueSBncmFwaDsgcmV0dXJuIHtAbGluayAvL0VNUFRZfS48YnI+XG4vLyA8ZW1iZWQgc3JjPVwiaW1hZ2VzL0xvY2FsTWVyZ2VfRW1wdHlSb290LnN2Z1wiIHR5cGU9XCJpbWFnZS9zdmcreG1sXCIvPjwvcD5cbi8vXG4vLyA8cD57QGxpbmsgLy9FTVBUWX0gYW5kIGFueXRoaW5nIGlzIHtAY29kZSAvL0VNUFRZfSwgc28gbWVyZ2VkIHBhcmVudCBpc1xuLy8ge0Bjb2RlIC8vRU1QVFl9OyByZXR1cm4gbGVmdCBncmFwaC48YnI+XG4vLyA8ZW1iZWQgc3JjPVwiaW1hZ2VzL0xvY2FsTWVyZ2VfRW1wdHlQYXJlbnQuc3ZnXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+PC9wPlxuLy9cbi8vIDxwPlNwZWNpYWwgY2FzZSBvZiBsYXN0IG1lcmdlIGlmIGxvY2FsIGNvbnRleHQuPGJyPlxuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9Mb2NhbE1lcmdlX0RpZmZSb290cy5zdmdcIiB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz48L3A+XG4vL1xuLy8gPGgyPkZ1bGwtQ29udGV4dCBNZXJnZXM8L2gyPlxuLy9cbi8vIDxwPlRoZXNlIGZ1bGwtY29udGV4dCBtZXJnZSBvcGVyYXRpb25zIGFyZSB1c2VkIHdoZW4ge0Bjb2RlIHJvb3RJc1dpbGRjYXJkfVxuLy8gaXMgZmFsc2UuPC9wPlxuLy9cbi8vIDxwPjxlbWJlZCBzcmM9XCJpbWFnZXMvRnVsbE1lcmdlX0VtcHR5Um9vdHMuc3ZnXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+PC9wPlxuLy9cbi8vIDxwPk11c3Qga2VlcCBhbGwgY29udGV4dHM7IHtAbGluayAvL0VNUFRZfSBpbiBhcnJheSBpcyBhIHNwZWNpYWwgdmFsdWUgKGFuZFxuLy8gbnVsbCBwYXJlbnQpLjxicj5cbi8vIDxlbWJlZCBzcmM9XCJpbWFnZXMvRnVsbE1lcmdlX0VtcHR5Um9vdC5zdmdcIiB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz48L3A+XG4vL1xuLy8gPHA+PGVtYmVkIHNyYz1cImltYWdlcy9GdWxsTWVyZ2VfU2FtZVJvb3Quc3ZnXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+PC9wPlxuLy9cbi8vIEBwYXJhbSBhIHRoZSBmaXJzdCB7QGxpbmsgU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHR9XG4vLyBAcGFyYW0gYiB0aGUgc2Vjb25kIHtAbGluayBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dH1cbi8vIEBwYXJhbSByb290SXNXaWxkY2FyZCB7QGNvZGUgdHJ1ZX0gaWYgdGhpcyBpcyBhIGxvY2FsLWNvbnRleHQgbWVyZ2UsXG4vLyBvdGhlcndpc2UgZmFsc2UgdG8gaW5kaWNhdGUgYSBmdWxsLWNvbnRleHQgbWVyZ2Vcbi8vIC9cbmZ1bmN0aW9uIG1lcmdlUm9vdChhLCBiLCByb290SXNXaWxkY2FyZCkge1xuXHRpZiAocm9vdElzV2lsZGNhcmQpIHtcblx0XHRpZiAoYSA9PT0gUHJlZGljdGlvbkNvbnRleHQuRU1QVFkpIHtcblx0XHRcdHJldHVybiBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWTsgLy8gLy8gKyBiID0vL1xuXHRcdH1cblx0XHRpZiAoYiA9PT0gUHJlZGljdGlvbkNvbnRleHQuRU1QVFkpIHtcblx0XHRcdHJldHVybiBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWTsgLy8gYSArLy8gPS8vXG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGlmIChhID09PSBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWSAmJiBiID09PSBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWSkge1xuXHRcdFx0cmV0dXJuIFByZWRpY3Rpb25Db250ZXh0LkVNUFRZOyAvLyAkICsgJCA9ICRcblx0XHR9IGVsc2UgaWYgKGEgPT09IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZKSB7IC8vICQgKyB4ID0gWyQseF1cblx0XHRcdHZhciBwYXlsb2FkcyA9IFsgYi5yZXR1cm5TdGF0ZSxcblx0XHRcdFx0XHRQcmVkaWN0aW9uQ29udGV4dC5FTVBUWV9SRVRVUk5fU1RBVEUgXTtcblx0XHRcdHZhciBwYXJlbnRzID0gWyBiLnBhcmVudEN0eCwgbnVsbCBdO1xuXHRcdFx0cmV0dXJuIG5ldyBBcnJheVByZWRpY3Rpb25Db250ZXh0KHBhcmVudHMsIHBheWxvYWRzKTtcblx0XHR9IGVsc2UgaWYgKGIgPT09IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZKSB7IC8vIHggKyAkID0gWyQseF0gKCQgaXMgYWx3YXlzIGZpcnN0IGlmIHByZXNlbnQpXG5cdFx0XHR2YXIgcGF5bG9hZHMgPSBbIGEucmV0dXJuU3RhdGUsIFByZWRpY3Rpb25Db250ZXh0LkVNUFRZX1JFVFVSTl9TVEFURSBdO1xuXHRcdFx0dmFyIHBhcmVudHMgPSBbIGEucGFyZW50Q3R4LCBudWxsIF07XG5cdFx0XHRyZXR1cm4gbmV3IEFycmF5UHJlZGljdGlvbkNvbnRleHQocGFyZW50cywgcGF5bG9hZHMpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gbnVsbDtcbn1cblxuLy9cbi8vIE1lcmdlIHR3byB7QGxpbmsgQXJyYXlQcmVkaWN0aW9uQ29udGV4dH0gaW5zdGFuY2VzLlxuLy9cbi8vIDxwPkRpZmZlcmVudCB0b3BzLCBkaWZmZXJlbnQgcGFyZW50cy48YnI+XG4vLyA8ZW1iZWQgc3JjPVwiaW1hZ2VzL0FycmF5TWVyZ2VfRGlmZlRvcERpZmZQYXIuc3ZnXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+PC9wPlxuLy9cbi8vIDxwPlNoYXJlZCB0b3AsIHNhbWUgcGFyZW50cy48YnI+XG4vLyA8ZW1iZWQgc3JjPVwiaW1hZ2VzL0FycmF5TWVyZ2VfU2hhcmVUb3BTYW1lUGFyLnN2Z1wiIHR5cGU9XCJpbWFnZS9zdmcreG1sXCIvPjwvcD5cbi8vXG4vLyA8cD5TaGFyZWQgdG9wLCBkaWZmZXJlbnQgcGFyZW50cy48YnI+XG4vLyA8ZW1iZWQgc3JjPVwiaW1hZ2VzL0FycmF5TWVyZ2VfU2hhcmVUb3BEaWZmUGFyLnN2Z1wiIHR5cGU9XCJpbWFnZS9zdmcreG1sXCIvPjwvcD5cbi8vXG4vLyA8cD5TaGFyZWQgdG9wLCBhbGwgc2hhcmVkIHBhcmVudHMuPGJyPlxuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9BcnJheU1lcmdlX1NoYXJlVG9wU2hhcmVQYXIuc3ZnXCJcbi8vIHR5cGU9XCJpbWFnZS9zdmcreG1sXCIvPjwvcD5cbi8vXG4vLyA8cD5FcXVhbCB0b3BzLCBtZXJnZSBwYXJlbnRzIGFuZCByZWR1Y2UgdG9wIHRvXG4vLyB7QGxpbmsgU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHR9Ljxicj5cbi8vIDxlbWJlZCBzcmM9XCJpbWFnZXMvQXJyYXlNZXJnZV9FcXVhbFRvcC5zdmdcIiB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz48L3A+XG4vLyAvXG5mdW5jdGlvbiBtZXJnZUFycmF5cyhhLCBiLCByb290SXNXaWxkY2FyZCwgbWVyZ2VDYWNoZSkge1xuXHRpZiAobWVyZ2VDYWNoZSAhPT0gbnVsbCkge1xuXHRcdHZhciBwcmV2aW91cyA9IG1lcmdlQ2FjaGUuZ2V0KGEsIGIpO1xuXHRcdGlmIChwcmV2aW91cyAhPT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIHByZXZpb3VzO1xuXHRcdH1cblx0XHRwcmV2aW91cyA9IG1lcmdlQ2FjaGUuZ2V0KGIsIGEpO1xuXHRcdGlmIChwcmV2aW91cyAhPT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIHByZXZpb3VzO1xuXHRcdH1cblx0fVxuXHQvLyBtZXJnZSBzb3J0ZWQgcGF5bG9hZHMgYSArIGIgPT4gTVxuXHR2YXIgaSA9IDA7IC8vIHdhbGtzIGFcblx0dmFyIGogPSAwOyAvLyB3YWxrcyBiXG5cdHZhciBrID0gMDsgLy8gd2Fsa3MgdGFyZ2V0IE0gYXJyYXlcblxuXHR2YXIgbWVyZ2VkUmV0dXJuU3RhdGVzID0gW107XG5cdHZhciBtZXJnZWRQYXJlbnRzID0gW107XG5cdC8vIHdhbGsgYW5kIG1lcmdlIHRvIHlpZWxkIG1lcmdlZFBhcmVudHMsIG1lcmdlZFJldHVyblN0YXRlc1xuXHR3aGlsZSAoaSA8IGEucmV0dXJuU3RhdGVzLmxlbmd0aCAmJiBqIDwgYi5yZXR1cm5TdGF0ZXMubGVuZ3RoKSB7XG5cdFx0dmFyIGFfcGFyZW50ID0gYS5wYXJlbnRzW2ldO1xuXHRcdHZhciBiX3BhcmVudCA9IGIucGFyZW50c1tqXTtcblx0XHRpZiAoYS5yZXR1cm5TdGF0ZXNbaV0gPT09IGIucmV0dXJuU3RhdGVzW2pdKSB7XG5cdFx0XHQvLyBzYW1lIHBheWxvYWQgKHN0YWNrIHRvcHMgYXJlIGVxdWFsKSwgbXVzdCB5aWVsZCBtZXJnZWQgc2luZ2xldG9uXG5cdFx0XHR2YXIgcGF5bG9hZCA9IGEucmV0dXJuU3RhdGVzW2ldO1xuXHRcdFx0Ly8gJCskID0gJFxuXHRcdFx0dmFyIGJvdGhEb2xsYXJzID0gcGF5bG9hZCA9PT0gUHJlZGljdGlvbkNvbnRleHQuRU1QVFlfUkVUVVJOX1NUQVRFICYmXG5cdFx0XHRcdFx0YV9wYXJlbnQgPT09IG51bGwgJiYgYl9wYXJlbnQgPT09IG51bGw7XG5cdFx0XHR2YXIgYXhfYXggPSAoYV9wYXJlbnQgIT09IG51bGwgJiYgYl9wYXJlbnQgIT09IG51bGwgJiYgYV9wYXJlbnQgPT09IGJfcGFyZW50KTsgLy8gYXgrYXhcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyAtPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGF4XG5cdFx0XHRpZiAoYm90aERvbGxhcnMgfHwgYXhfYXgpIHtcblx0XHRcdFx0bWVyZ2VkUGFyZW50c1trXSA9IGFfcGFyZW50OyAvLyBjaG9vc2UgbGVmdFxuXHRcdFx0XHRtZXJnZWRSZXR1cm5TdGF0ZXNba10gPSBwYXlsb2FkO1xuXHRcdFx0fSBlbHNlIHsgLy8gYXgrYXkgLT4gYSdbeCx5XVxuXHRcdFx0XHR2YXIgbWVyZ2VkUGFyZW50ID0gbWVyZ2UoYV9wYXJlbnQsIGJfcGFyZW50LCByb290SXNXaWxkY2FyZCwgbWVyZ2VDYWNoZSk7XG5cdFx0XHRcdG1lcmdlZFBhcmVudHNba10gPSBtZXJnZWRQYXJlbnQ7XG5cdFx0XHRcdG1lcmdlZFJldHVyblN0YXRlc1trXSA9IHBheWxvYWQ7XG5cdFx0XHR9XG5cdFx0XHRpICs9IDE7IC8vIGhvcCBvdmVyIGxlZnQgb25lIGFzIHVzdWFsXG5cdFx0XHRqICs9IDE7IC8vIGJ1dCBhbHNvIHNraXAgb25lIGluIHJpZ2h0IHNpZGUgc2luY2Ugd2UgbWVyZ2Vcblx0XHR9IGVsc2UgaWYgKGEucmV0dXJuU3RhdGVzW2ldIDwgYi5yZXR1cm5TdGF0ZXNbal0pIHsgLy8gY29weSBhW2ldIHRvIE1cblx0XHRcdG1lcmdlZFBhcmVudHNba10gPSBhX3BhcmVudDtcblx0XHRcdG1lcmdlZFJldHVyblN0YXRlc1trXSA9IGEucmV0dXJuU3RhdGVzW2ldO1xuXHRcdFx0aSArPSAxO1xuXHRcdH0gZWxzZSB7IC8vIGIgPiBhLCBjb3B5IGJbal0gdG8gTVxuXHRcdFx0bWVyZ2VkUGFyZW50c1trXSA9IGJfcGFyZW50O1xuXHRcdFx0bWVyZ2VkUmV0dXJuU3RhdGVzW2tdID0gYi5yZXR1cm5TdGF0ZXNbal07XG5cdFx0XHRqICs9IDE7XG5cdFx0fVxuXHRcdGsgKz0gMTtcblx0fVxuXHQvLyBjb3B5IG92ZXIgYW55IHBheWxvYWRzIHJlbWFpbmluZyBpbiBlaXRoZXIgYXJyYXlcblx0aWYgKGkgPCBhLnJldHVyblN0YXRlcy5sZW5ndGgpIHtcblx0XHRmb3IgKHZhciBwID0gaTsgcCA8IGEucmV0dXJuU3RhdGVzLmxlbmd0aDsgcCsrKSB7XG5cdFx0XHRtZXJnZWRQYXJlbnRzW2tdID0gYS5wYXJlbnRzW3BdO1xuXHRcdFx0bWVyZ2VkUmV0dXJuU3RhdGVzW2tdID0gYS5yZXR1cm5TdGF0ZXNbcF07XG5cdFx0XHRrICs9IDE7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGZvciAodmFyIHAgPSBqOyBwIDwgYi5yZXR1cm5TdGF0ZXMubGVuZ3RoOyBwKyspIHtcblx0XHRcdG1lcmdlZFBhcmVudHNba10gPSBiLnBhcmVudHNbcF07XG5cdFx0XHRtZXJnZWRSZXR1cm5TdGF0ZXNba10gPSBiLnJldHVyblN0YXRlc1twXTtcblx0XHRcdGsgKz0gMTtcblx0XHR9XG5cdH1cblx0Ly8gdHJpbSBtZXJnZWQgaWYgd2UgY29tYmluZWQgYSBmZXcgdGhhdCBoYWQgc2FtZSBzdGFjayB0b3BzXG5cdGlmIChrIDwgbWVyZ2VkUGFyZW50cy5sZW5ndGgpIHsgLy8gd3JpdGUgaW5kZXggPCBsYXN0IHBvc2l0aW9uOyB0cmltXG5cdFx0aWYgKGsgPT09IDEpIHsgLy8gZm9yIGp1c3Qgb25lIG1lcmdlZCBlbGVtZW50LCByZXR1cm4gc2luZ2xldG9uIHRvcFxuXHRcdFx0dmFyIGFfID0gU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQuY3JlYXRlKG1lcmdlZFBhcmVudHNbMF0sXG5cdFx0XHRcdFx0bWVyZ2VkUmV0dXJuU3RhdGVzWzBdKTtcblx0XHRcdGlmIChtZXJnZUNhY2hlICE9PSBudWxsKSB7XG5cdFx0XHRcdG1lcmdlQ2FjaGUuc2V0KGEsIGIsIGFfKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBhXztcblx0XHR9XG5cdFx0bWVyZ2VkUGFyZW50cyA9IG1lcmdlZFBhcmVudHMuc2xpY2UoMCwgayk7XG5cdFx0bWVyZ2VkUmV0dXJuU3RhdGVzID0gbWVyZ2VkUmV0dXJuU3RhdGVzLnNsaWNlKDAsIGspO1xuXHR9XG5cblx0dmFyIE0gPSBuZXcgQXJyYXlQcmVkaWN0aW9uQ29udGV4dChtZXJnZWRQYXJlbnRzLCBtZXJnZWRSZXR1cm5TdGF0ZXMpO1xuXG5cdC8vIGlmIHdlIGNyZWF0ZWQgc2FtZSBhcnJheSBhcyBhIG9yIGIsIHJldHVybiB0aGF0IGluc3RlYWRcblx0Ly8gVE9ETzogdHJhY2sgd2hldGhlciB0aGlzIGlzIHBvc3NpYmxlIGFib3ZlIGR1cmluZyBtZXJnZSBzb3J0IGZvciBzcGVlZFxuXHRpZiAoTSA9PT0gYSkge1xuXHRcdGlmIChtZXJnZUNhY2hlICE9PSBudWxsKSB7XG5cdFx0XHRtZXJnZUNhY2hlLnNldChhLCBiLCBhKTtcblx0XHR9XG5cdFx0cmV0dXJuIGE7XG5cdH1cblx0aWYgKE0gPT09IGIpIHtcblx0XHRpZiAobWVyZ2VDYWNoZSAhPT0gbnVsbCkge1xuXHRcdFx0bWVyZ2VDYWNoZS5zZXQoYSwgYiwgYik7XG5cdFx0fVxuXHRcdHJldHVybiBiO1xuXHR9XG5cdGNvbWJpbmVDb21tb25QYXJlbnRzKG1lcmdlZFBhcmVudHMpO1xuXG5cdGlmIChtZXJnZUNhY2hlICE9PSBudWxsKSB7XG5cdFx0bWVyZ2VDYWNoZS5zZXQoYSwgYiwgTSk7XG5cdH1cblx0cmV0dXJuIE07XG59XG5cbi8vXG4vLyBNYWtlIHBhc3Mgb3ZlciBhbGwgPGVtPk08L2VtPiB7QGNvZGUgcGFyZW50c307IG1lcmdlIGFueSB7QGNvZGUgZXF1YWxzKCl9XG4vLyBvbmVzLlxuLy8gL1xuZnVuY3Rpb24gY29tYmluZUNvbW1vblBhcmVudHMocGFyZW50cykge1xuXHR2YXIgdW5pcXVlUGFyZW50cyA9IHt9O1xuXG5cdGZvciAodmFyIHAgPSAwOyBwIDwgcGFyZW50cy5sZW5ndGg7IHArKykge1xuXHRcdHZhciBwYXJlbnQgPSBwYXJlbnRzW3BdO1xuXHRcdGlmICghKHBhcmVudCBpbiB1bmlxdWVQYXJlbnRzKSkge1xuXHRcdFx0dW5pcXVlUGFyZW50c1twYXJlbnRdID0gcGFyZW50O1xuXHRcdH1cblx0fVxuXHRmb3IgKHZhciBxID0gMDsgcSA8IHBhcmVudHMubGVuZ3RoOyBxKyspIHtcblx0XHRwYXJlbnRzW3FdID0gdW5pcXVlUGFyZW50c1twYXJlbnRzW3FdXTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRDYWNoZWRQcmVkaWN0aW9uQ29udGV4dChjb250ZXh0LCBjb250ZXh0Q2FjaGUsIHZpc2l0ZWQpIHtcblx0aWYgKGNvbnRleHQuaXNFbXB0eSgpKSB7XG5cdFx0cmV0dXJuIGNvbnRleHQ7XG5cdH1cblx0dmFyIGV4aXN0aW5nID0gdmlzaXRlZFtjb250ZXh0XSB8fCBudWxsO1xuXHRpZiAoZXhpc3RpbmcgIT09IG51bGwpIHtcblx0XHRyZXR1cm4gZXhpc3Rpbmc7XG5cdH1cblx0ZXhpc3RpbmcgPSBjb250ZXh0Q2FjaGUuZ2V0KGNvbnRleHQpO1xuXHRpZiAoZXhpc3RpbmcgIT09IG51bGwpIHtcblx0XHR2aXNpdGVkW2NvbnRleHRdID0gZXhpc3Rpbmc7XG5cdFx0cmV0dXJuIGV4aXN0aW5nO1xuXHR9XG5cdHZhciBjaGFuZ2VkID0gZmFsc2U7XG5cdHZhciBwYXJlbnRzID0gW107XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgcGFyZW50cy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBwYXJlbnQgPSBnZXRDYWNoZWRQcmVkaWN0aW9uQ29udGV4dChjb250ZXh0LmdldFBhcmVudChpKSwgY29udGV4dENhY2hlLCB2aXNpdGVkKTtcblx0XHRpZiAoY2hhbmdlZCB8fCBwYXJlbnQgIT09IGNvbnRleHQuZ2V0UGFyZW50KGkpKSB7XG5cdFx0XHRpZiAoIWNoYW5nZWQpIHtcblx0XHRcdFx0cGFyZW50cyA9IFtdO1xuXHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGNvbnRleHQubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRwYXJlbnRzW2pdID0gY29udGV4dC5nZXRQYXJlbnQoaik7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y2hhbmdlZCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRwYXJlbnRzW2ldID0gcGFyZW50O1xuXHRcdH1cblx0fVxuXHRpZiAoIWNoYW5nZWQpIHtcblx0XHRjb250ZXh0Q2FjaGUuYWRkKGNvbnRleHQpO1xuXHRcdHZpc2l0ZWRbY29udGV4dF0gPSBjb250ZXh0O1xuXHRcdHJldHVybiBjb250ZXh0O1xuXHR9XG5cdHZhciB1cGRhdGVkID0gbnVsbDtcblx0aWYgKHBhcmVudHMubGVuZ3RoID09PSAwKSB7XG5cdFx0dXBkYXRlZCA9IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZO1xuXHR9IGVsc2UgaWYgKHBhcmVudHMubGVuZ3RoID09PSAxKSB7XG5cdFx0dXBkYXRlZCA9IFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0LmNyZWF0ZShwYXJlbnRzWzBdLCBjb250ZXh0XG5cdFx0XHRcdC5nZXRSZXR1cm5TdGF0ZSgwKSk7XG5cdH0gZWxzZSB7XG5cdFx0dXBkYXRlZCA9IG5ldyBBcnJheVByZWRpY3Rpb25Db250ZXh0KHBhcmVudHMsIGNvbnRleHQucmV0dXJuU3RhdGVzKTtcblx0fVxuXHRjb250ZXh0Q2FjaGUuYWRkKHVwZGF0ZWQpO1xuXHR2aXNpdGVkW3VwZGF0ZWRdID0gdXBkYXRlZDtcblx0dmlzaXRlZFtjb250ZXh0XSA9IHVwZGF0ZWQ7XG5cblx0cmV0dXJuIHVwZGF0ZWQ7XG59XG5cbi8vIHRlcidzIHJlY3Vyc2l2ZSB2ZXJzaW9uIG9mIFNhbSdzIGdldEFsbE5vZGVzKClcbmZ1bmN0aW9uIGdldEFsbENvbnRleHROb2Rlcyhjb250ZXh0LCBub2RlcywgdmlzaXRlZCkge1xuXHRpZiAobm9kZXMgPT09IG51bGwpIHtcblx0XHRub2RlcyA9IFtdO1xuXHRcdHJldHVybiBnZXRBbGxDb250ZXh0Tm9kZXMoY29udGV4dCwgbm9kZXMsIHZpc2l0ZWQpO1xuXHR9IGVsc2UgaWYgKHZpc2l0ZWQgPT09IG51bGwpIHtcblx0XHR2aXNpdGVkID0ge307XG5cdFx0cmV0dXJuIGdldEFsbENvbnRleHROb2Rlcyhjb250ZXh0LCBub2RlcywgdmlzaXRlZCk7XG5cdH0gZWxzZSB7XG5cdFx0aWYgKGNvbnRleHQgPT09IG51bGwgfHwgdmlzaXRlZFtjb250ZXh0XSAhPT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIG5vZGVzO1xuXHRcdH1cblx0XHR2aXNpdGVkW2NvbnRleHRdID0gY29udGV4dDtcblx0XHRub2Rlcy5wdXNoKGNvbnRleHQpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgY29udGV4dC5sZW5ndGg7IGkrKykge1xuXHRcdFx0Z2V0QWxsQ29udGV4dE5vZGVzKGNvbnRleHQuZ2V0UGFyZW50KGkpLCBub2RlcywgdmlzaXRlZCk7XG5cdFx0fVxuXHRcdHJldHVybiBub2Rlcztcblx0fVxufVxuXG5leHBvcnRzLm1lcmdlID0gbWVyZ2U7XG5leHBvcnRzLlByZWRpY3Rpb25Db250ZXh0ID0gUHJlZGljdGlvbkNvbnRleHQ7XG5leHBvcnRzLlByZWRpY3Rpb25Db250ZXh0Q2FjaGUgPSBQcmVkaWN0aW9uQ29udGV4dENhY2hlO1xuZXhwb3J0cy5TaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dCA9IFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0O1xuZXhwb3J0cy5wcmVkaWN0aW9uQ29udGV4dEZyb21SdWxlQ29udGV4dCA9IHByZWRpY3Rpb25Db250ZXh0RnJvbVJ1bGVDb250ZXh0O1xuZXhwb3J0cy5nZXRDYWNoZWRQcmVkaWN0aW9uQ29udGV4dCA9IGdldENhY2hlZFByZWRpY3Rpb25Db250ZXh0O1xuIiwiLy9cbi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbi8vXG5cbnZhciBUb2tlbiA9IHJlcXVpcmUoJy4vVG9rZW4nKS5Ub2tlbjtcbnZhciBDb25zb2xlRXJyb3JMaXN0ZW5lciA9IHJlcXVpcmUoJy4vZXJyb3IvRXJyb3JMaXN0ZW5lcicpLkNvbnNvbGVFcnJvckxpc3RlbmVyO1xudmFyIFByb3h5RXJyb3JMaXN0ZW5lciA9IHJlcXVpcmUoJy4vZXJyb3IvRXJyb3JMaXN0ZW5lcicpLlByb3h5RXJyb3JMaXN0ZW5lcjtcblxuZnVuY3Rpb24gUmVjb2duaXplcigpIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMgPSBbIENvbnNvbGVFcnJvckxpc3RlbmVyLklOU1RBTkNFIF07XG4gICAgdGhpcy5faW50ZXJwID0gbnVsbDtcbiAgICB0aGlzLl9zdGF0ZU51bWJlciA9IC0xO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5SZWNvZ25pemVyLnRva2VuVHlwZU1hcENhY2hlID0ge307XG5SZWNvZ25pemVyLnJ1bGVJbmRleE1hcENhY2hlID0ge307XG5cblxuUmVjb2duaXplci5wcm90b3R5cGUuY2hlY2tWZXJzaW9uID0gZnVuY3Rpb24odG9vbFZlcnNpb24pIHtcbiAgICB2YXIgcnVudGltZVZlcnNpb24gPSBcIjQuNy4yXCI7XG4gICAgaWYgKHJ1bnRpbWVWZXJzaW9uIT09dG9vbFZlcnNpb24pIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJBTlRMUiBydW50aW1lIGFuZCBnZW5lcmF0ZWQgY29kZSB2ZXJzaW9ucyBkaXNhZ3JlZTogXCIrcnVudGltZVZlcnNpb24rXCIhPVwiK3Rvb2xWZXJzaW9uKTtcbiAgICB9XG59O1xuXG5SZWNvZ25pemVyLnByb3RvdHlwZS5hZGRFcnJvckxpc3RlbmVyID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG59O1xuXG5SZWNvZ25pemVyLnByb3RvdHlwZS5yZW1vdmVFcnJvckxpc3RlbmVycyA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpc3RlbmVycyA9IFtdO1xufTtcblxuUmVjb2duaXplci5wcm90b3R5cGUuZ2V0VG9rZW5UeXBlTWFwID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHRva2VuTmFtZXMgPSB0aGlzLmdldFRva2VuTmFtZXMoKTtcbiAgICBpZiAodG9rZW5OYW1lcz09PW51bGwpIHtcbiAgICAgICAgdGhyb3coXCJUaGUgY3VycmVudCByZWNvZ25pemVyIGRvZXMgbm90IHByb3ZpZGUgYSBsaXN0IG9mIHRva2VuIG5hbWVzLlwiKTtcbiAgICB9XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMudG9rZW5UeXBlTWFwQ2FjaGVbdG9rZW5OYW1lc107XG4gICAgaWYocmVzdWx0PT09dW5kZWZpbmVkKSB7XG4gICAgICAgIHJlc3VsdCA9IHRva2VuTmFtZXMucmVkdWNlKGZ1bmN0aW9uKG8sIGssIGkpIHsgb1trXSA9IGk7IH0pO1xuICAgICAgICByZXN1bHQuRU9GID0gVG9rZW4uRU9GO1xuICAgICAgICB0aGlzLnRva2VuVHlwZU1hcENhY2hlW3Rva2VuTmFtZXNdID0gcmVzdWx0O1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gR2V0IGEgbWFwIGZyb20gcnVsZSBuYW1lcyB0byBydWxlIGluZGV4ZXMuXG4vL1xuLy8gPHA+VXNlZCBmb3IgWFBhdGggYW5kIHRyZWUgcGF0dGVybiBjb21waWxhdGlvbi48L3A+XG4vL1xuUmVjb2duaXplci5wcm90b3R5cGUuZ2V0UnVsZUluZGV4TWFwID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHJ1bGVOYW1lcyA9IHRoaXMucnVsZU5hbWVzO1xuICAgIGlmIChydWxlTmFtZXM9PT1udWxsKSB7XG4gICAgICAgIHRocm93KFwiVGhlIGN1cnJlbnQgcmVjb2duaXplciBkb2VzIG5vdCBwcm92aWRlIGEgbGlzdCBvZiBydWxlIG5hbWVzLlwiKTtcbiAgICB9XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMucnVsZUluZGV4TWFwQ2FjaGVbcnVsZU5hbWVzXTtcbiAgICBpZihyZXN1bHQ9PT11bmRlZmluZWQpIHtcbiAgICAgICAgcmVzdWx0ID0gcnVsZU5hbWVzLnJlZHVjZShmdW5jdGlvbihvLCBrLCBpKSB7IG9ba10gPSBpOyB9KTtcbiAgICAgICAgdGhpcy5ydWxlSW5kZXhNYXBDYWNoZVtydWxlTmFtZXNdID0gcmVzdWx0O1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuUmVjb2duaXplci5wcm90b3R5cGUuZ2V0VG9rZW5UeXBlID0gZnVuY3Rpb24odG9rZW5OYW1lKSB7XG4gICAgdmFyIHR0eXBlID0gdGhpcy5nZXRUb2tlblR5cGVNYXAoKVt0b2tlbk5hbWVdO1xuICAgIGlmICh0dHlwZSAhPT11bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHR0eXBlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBUb2tlbi5JTlZBTElEX1RZUEU7XG4gICAgfVxufTtcblxuXG4vLyBXaGF0IGlzIHRoZSBlcnJvciBoZWFkZXIsIG5vcm1hbGx5IGxpbmUvY2hhcmFjdGVyIHBvc2l0aW9uIGluZm9ybWF0aW9uPy8vXG5SZWNvZ25pemVyLnByb3RvdHlwZS5nZXRFcnJvckhlYWRlciA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbGluZSA9IGUuZ2V0T2ZmZW5kaW5nVG9rZW4oKS5saW5lO1xuICAgIHZhciBjb2x1bW4gPSBlLmdldE9mZmVuZGluZ1Rva2VuKCkuY29sdW1uO1xuICAgIHJldHVybiBcImxpbmUgXCIgKyBsaW5lICsgXCI6XCIgKyBjb2x1bW47XG59O1xuXG5cbi8vIEhvdyBzaG91bGQgYSB0b2tlbiBiZSBkaXNwbGF5ZWQgaW4gYW4gZXJyb3IgbWVzc2FnZT8gVGhlIGRlZmF1bHRcbi8vICBpcyB0byBkaXNwbGF5IGp1c3QgdGhlIHRleHQsIGJ1dCBkdXJpbmcgZGV2ZWxvcG1lbnQgeW91IG1pZ2h0XG4vLyAgd2FudCB0byBoYXZlIGEgbG90IG9mIGluZm9ybWF0aW9uIHNwaXQgb3V0LiAgT3ZlcnJpZGUgaW4gdGhhdCBjYXNlXG4vLyAgdG8gdXNlIHQudG9TdHJpbmcoKSAod2hpY2gsIGZvciBDb21tb25Ub2tlbiwgZHVtcHMgZXZlcnl0aGluZyBhYm91dFxuLy8gIHRoZSB0b2tlbikuIFRoaXMgaXMgYmV0dGVyIHRoYW4gZm9yY2luZyB5b3UgdG8gb3ZlcnJpZGUgYSBtZXRob2QgaW5cbi8vICB5b3VyIHRva2VuIG9iamVjdHMgYmVjYXVzZSB5b3UgZG9uJ3QgaGF2ZSB0byBnbyBtb2RpZnkgeW91ciBsZXhlclxuLy8gIHNvIHRoYXQgaXQgY3JlYXRlcyBhIG5ldyBKYXZhIHR5cGUuXG4vL1xuLy8gQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2QgaXMgbm90IGNhbGxlZCBieSB0aGUgQU5UTFIgNCBSdW50aW1lLiBTcGVjaWZpY1xuLy8gaW1wbGVtZW50YXRpb25zIG9mIHtAbGluayBBTlRMUkVycm9yU3RyYXRlZ3l9IG1heSBwcm92aWRlIGEgc2ltaWxhclxuLy8gZmVhdHVyZSB3aGVuIG5lY2Vzc2FyeS4gRm9yIGV4YW1wbGUsIHNlZVxuLy8ge0BsaW5rIERlZmF1bHRFcnJvclN0cmF0ZWd5Ly9nZXRUb2tlbkVycm9yRGlzcGxheX0uXG4vL1xuUmVjb2duaXplci5wcm90b3R5cGUuZ2V0VG9rZW5FcnJvckRpc3BsYXkgPSBmdW5jdGlvbih0KSB7XG4gICAgaWYgKHQ9PT1udWxsKSB7XG4gICAgICAgIHJldHVybiBcIjxubyB0b2tlbj5cIjtcbiAgICB9XG4gICAgdmFyIHMgPSB0LnRleHQ7XG4gICAgaWYgKHM9PT1udWxsKSB7XG4gICAgICAgIGlmICh0LnR5cGU9PT1Ub2tlbi5FT0YpIHtcbiAgICAgICAgICAgIHMgPSBcIjxFT0Y+XCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzID0gXCI8XCIgKyB0LnR5cGUgKyBcIj5cIjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzID0gcy5yZXBsYWNlKFwiXFxuXCIsXCJcXFxcblwiKS5yZXBsYWNlKFwiXFxyXCIsXCJcXFxcclwiKS5yZXBsYWNlKFwiXFx0XCIsXCJcXFxcdFwiKTtcbiAgICByZXR1cm4gXCInXCIgKyBzICsgXCInXCI7XG59O1xuXG5SZWNvZ25pemVyLnByb3RvdHlwZS5nZXRFcnJvckxpc3RlbmVyRGlzcGF0Y2ggPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFByb3h5RXJyb3JMaXN0ZW5lcih0aGlzLl9saXN0ZW5lcnMpO1xufTtcblxuLy8gc3ViY2xhc3MgbmVlZHMgdG8gb3ZlcnJpZGUgdGhlc2UgaWYgdGhlcmUgYXJlIHNlbXByZWRzIG9yIGFjdGlvbnNcbi8vIHRoYXQgdGhlIEFUTiBpbnRlcnAgbmVlZHMgdG8gZXhlY3V0ZVxuUmVjb2duaXplci5wcm90b3R5cGUuc2VtcHJlZCA9IGZ1bmN0aW9uKGxvY2FsY3R4LCBydWxlSW5kZXgsIGFjdGlvbkluZGV4KSB7XG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG5SZWNvZ25pemVyLnByb3RvdHlwZS5wcmVjcHJlZCA9IGZ1bmN0aW9uKGxvY2FsY3R4ICwgcHJlY2VkZW5jZSkge1xuICAgIHJldHVybiB0cnVlO1xufTtcblxuLy9JbmRpY2F0ZSB0aGF0IHRoZSByZWNvZ25pemVyIGhhcyBjaGFuZ2VkIGludGVybmFsIHN0YXRlIHRoYXQgaXNcbi8vY29uc2lzdGVudCB3aXRoIHRoZSBBVE4gc3RhdGUgcGFzc2VkIGluLiAgVGhpcyB3YXkgd2UgYWx3YXlzIGtub3dcbi8vd2hlcmUgd2UgYXJlIGluIHRoZSBBVE4gYXMgdGhlIHBhcnNlciBnb2VzIGFsb25nLiBUaGUgcnVsZVxuLy9jb250ZXh0IG9iamVjdHMgZm9ybSBhIHN0YWNrIHRoYXQgbGV0cyB1cyBzZWUgdGhlIHN0YWNrIG9mXG4vL2ludm9raW5nIHJ1bGVzLiBDb21iaW5lIHRoaXMgYW5kIHdlIGhhdmUgY29tcGxldGUgQVROXG4vL2NvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWNvZ25pemVyLnByb3RvdHlwZSwgXCJzdGF0ZVwiLCB7XG5cdGdldCA6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLl9zdGF0ZU51bWJlcjtcblx0fSxcblx0c2V0IDogZnVuY3Rpb24oc3RhdGUpIHtcblx0XHR0aGlzLl9zdGF0ZU51bWJlciA9IHN0YXRlO1xuXHR9XG59KTtcblxuXG5leHBvcnRzLlJlY29nbml6ZXIgPSBSZWNvZ25pemVyO1xuIiwiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy8vXG5cbi8vICBBIHJ1bGUgY29udGV4dCBpcyBhIHJlY29yZCBvZiBhIHNpbmdsZSBydWxlIGludm9jYXRpb24uIEl0IGtub3dzXG4vLyAgd2hpY2ggY29udGV4dCBpbnZva2VkIGl0LCBpZiBhbnkuIElmIHRoZXJlIGlzIG5vIHBhcmVudCBjb250ZXh0LCB0aGVuXG4vLyAgbmF0dXJhbGx5IHRoZSBpbnZva2luZyBzdGF0ZSBpcyBub3QgdmFsaWQuICBUaGUgcGFyZW50IGxpbmtcbi8vICBwcm92aWRlcyBhIGNoYWluIHVwd2FyZHMgZnJvbSB0aGUgY3VycmVudCBydWxlIGludm9jYXRpb24gdG8gdGhlIHJvb3Rcbi8vICBvZiB0aGUgaW52b2NhdGlvbiB0cmVlLCBmb3JtaW5nIGEgc3RhY2suIFdlIGFjdHVhbGx5IGNhcnJ5IG5vXG4vLyAgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJ1bGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29udGV4dCAoZXhjZXB0XG4vLyAgd2hlbiBwYXJzaW5nKS4gV2Uga2VlcCBvbmx5IHRoZSBzdGF0ZSBudW1iZXIgb2YgdGhlIGludm9raW5nIHN0YXRlIGZyb21cbi8vICB0aGUgQVROIHN1Ym1hY2hpbmUgdGhhdCBpbnZva2VkIHRoaXMuIENvbnRyYXN0IHRoaXMgd2l0aCB0aGUgc1xuLy8gIHBvaW50ZXIgaW5zaWRlIFBhcnNlclJ1bGVDb250ZXh0IHRoYXQgdHJhY2tzIHRoZSBjdXJyZW50IHN0YXRlXG4vLyAgYmVpbmcgXCJleGVjdXRlZFwiIGZvciB0aGUgY3VycmVudCBydWxlLlxuLy9cbi8vICBUaGUgcGFyZW50IGNvbnRleHRzIGFyZSB1c2VmdWwgZm9yIGNvbXB1dGluZyBsb29rYWhlYWQgc2V0cyBhbmRcbi8vICBnZXR0aW5nIGVycm9yIGluZm9ybWF0aW9uLlxuLy9cbi8vICBUaGVzZSBvYmplY3RzIGFyZSB1c2VkIGR1cmluZyBwYXJzaW5nIGFuZCBwcmVkaWN0aW9uLlxuLy8gIEZvciB0aGUgc3BlY2lhbCBjYXNlIG9mIHBhcnNlcnMsIHdlIHVzZSB0aGUgc3ViY2xhc3Ncbi8vICBQYXJzZXJSdWxlQ29udGV4dC5cbi8vXG4vLyAgQHNlZSBQYXJzZXJSdWxlQ29udGV4dFxuLy8vXG5cbnZhciBSdWxlTm9kZSA9IHJlcXVpcmUoJy4vdHJlZS9UcmVlJykuUnVsZU5vZGU7XG52YXIgSU5WQUxJRF9JTlRFUlZBTCA9IHJlcXVpcmUoJy4vdHJlZS9UcmVlJykuSU5WQUxJRF9JTlRFUlZBTDtcbnZhciBJTlZBTElEX0FMVF9OVU1CRVIgPSByZXF1aXJlKCcuL2F0bi9BVE4nKS5JTlZBTElEX0FMVF9OVU1CRVI7XG5cbmZ1bmN0aW9uIFJ1bGVDb250ZXh0KHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRSdWxlTm9kZS5jYWxsKHRoaXMpO1xuXHQvLyBXaGF0IGNvbnRleHQgaW52b2tlZCB0aGlzIHJ1bGU/XG5cdHRoaXMucGFyZW50Q3R4ID0gcGFyZW50IHx8IG51bGw7XG5cdC8vIFdoYXQgc3RhdGUgaW52b2tlZCB0aGUgcnVsZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb250ZXh0P1xuXHQvLyBUaGUgXCJyZXR1cm4gYWRkcmVzc1wiIGlzIHRoZSBmb2xsb3dTdGF0ZSBvZiBpbnZva2luZ1N0YXRlXG5cdC8vIElmIHBhcmVudCBpcyBudWxsLCB0aGlzIHNob3VsZCBiZSAtMS5cblx0dGhpcy5pbnZva2luZ1N0YXRlID0gaW52b2tpbmdTdGF0ZSB8fCAtMTtcblx0cmV0dXJuIHRoaXM7XG59XG5cblJ1bGVDb250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUnVsZU5vZGUucHJvdG90eXBlKTtcblJ1bGVDb250ZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJ1bGVDb250ZXh0O1xuXG5SdWxlQ29udGV4dC5wcm90b3R5cGUuZGVwdGggPSBmdW5jdGlvbigpIHtcblx0dmFyIG4gPSAwO1xuXHR2YXIgcCA9IHRoaXM7XG5cdHdoaWxlIChwICE9PSBudWxsKSB7XG5cdFx0cCA9IHAucGFyZW50Q3R4O1xuXHRcdG4gKz0gMTtcblx0fVxuXHRyZXR1cm4gbjtcbn07XG5cbi8vIEEgY29udGV4dCBpcyBlbXB0eSBpZiB0aGVyZSBpcyBubyBpbnZva2luZyBzdGF0ZTsgbWVhbmluZyBub2JvZHkgY2FsbFxuLy8gY3VycmVudCBjb250ZXh0LlxuUnVsZUNvbnRleHQucHJvdG90eXBlLmlzRW1wdHkgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuaW52b2tpbmdTdGF0ZSA9PT0gLTE7XG59O1xuXG4vLyBzYXRpc2Z5IHRoZSBQYXJzZVRyZWUgLyBTeW50YXhUcmVlIGludGVyZmFjZVxuXG5SdWxlQ29udGV4dC5wcm90b3R5cGUuZ2V0U291cmNlSW50ZXJ2YWwgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIElOVkFMSURfSU5URVJWQUw7XG59O1xuXG5SdWxlQ29udGV4dC5wcm90b3R5cGUuZ2V0UnVsZUNvbnRleHQgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5SdWxlQ29udGV4dC5wcm90b3R5cGUuZ2V0UGF5bG9hZCA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcztcbn07XG5cbi8vIFJldHVybiB0aGUgY29tYmluZWQgdGV4dCBvZiBhbGwgY2hpbGQgbm9kZXMuIFRoaXMgbWV0aG9kIG9ubHkgY29uc2lkZXJzXG4vLyB0b2tlbnMgd2hpY2ggaGF2ZSBiZWVuIGFkZGVkIHRvIHRoZSBwYXJzZSB0cmVlLlxuLy8gPHA+XG4vLyBTaW5jZSB0b2tlbnMgb24gaGlkZGVuIGNoYW5uZWxzIChlLmcuIHdoaXRlc3BhY2Ugb3IgY29tbWVudHMpIGFyZSBub3Rcbi8vIGFkZGVkIHRvIHRoZSBwYXJzZSB0cmVlcywgdGhleSB3aWxsIG5vdCBhcHBlYXIgaW4gdGhlIG91dHB1dCBvZiB0aGlzXG4vLyBtZXRob2QuXG4vLyAvXG5SdWxlQ29udGV4dC5wcm90b3R5cGUuZ2V0VGV4dCA9IGZ1bmN0aW9uKCkge1xuXHRpZiAodGhpcy5nZXRDaGlsZENvdW50KCkgPT09IDApIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdGhpcy5jaGlsZHJlbi5tYXAoZnVuY3Rpb24oY2hpbGQpIHtcblx0XHRcdHJldHVybiBjaGlsZC5nZXRUZXh0KCk7XG5cdFx0fSkuam9pbihcIlwiKTtcblx0fVxufTtcblxuLy8gRm9yIHJ1bGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGFyc2UgdHJlZSBpbnRlcm5hbCBub2RlLCByZXR1cm5cbi8vIHRoZSBvdXRlciBhbHRlcm5hdGl2ZSBudW1iZXIgdXNlZCB0byBtYXRjaCB0aGUgaW5wdXQuIERlZmF1bHRcbi8vIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IGNvbXB1dGUgbm9yIHN0b3JlIHRoaXMgYWx0IG51bS4gQ3JlYXRlXG4vLyBhIHN1YmNsYXNzIG9mIFBhcnNlclJ1bGVDb250ZXh0IHdpdGggYmFja2luZyBmaWVsZCBhbmQgc2V0XG4vLyBvcHRpb24gY29udGV4dFN1cGVyQ2xhc3MuXG4vLyB0byBzZXQgaXQuXG5SdWxlQ29udGV4dC5wcm90b3R5cGUuZ2V0QWx0TnVtYmVyID0gZnVuY3Rpb24oKSB7IHJldHVybiBJTlZBTElEX0FMVF9OVU1CRVI7IH1cblxuLy8gU2V0IHRoZSBvdXRlciBhbHRlcm5hdGl2ZSBudW1iZXIgZm9yIHRoaXMgY29udGV4dCBub2RlLiBEZWZhdWx0XG4vLyBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcgdG8gYXZvaWQgYmFja2luZyBmaWVsZCBvdmVyaGVhZCBmb3Jcbi8vIHRyZWVzIHRoYXQgZG9uJ3QgbmVlZCBpdC4gIENyZWF0ZVxuLy8gYSBzdWJjbGFzcyBvZiBQYXJzZXJSdWxlQ29udGV4dCB3aXRoIGJhY2tpbmcgZmllbGQgYW5kIHNldFxuLy8gb3B0aW9uIGNvbnRleHRTdXBlckNsYXNzLlxuUnVsZUNvbnRleHQucHJvdG90eXBlLnNldEFsdE51bWJlciA9IGZ1bmN0aW9uKGFsdE51bWJlcikgeyB9XG5cblJ1bGVDb250ZXh0LnByb3RvdHlwZS5nZXRDaGlsZCA9IGZ1bmN0aW9uKGkpIHtcblx0cmV0dXJuIG51bGw7XG59O1xuXG5SdWxlQ29udGV4dC5wcm90b3R5cGUuZ2V0Q2hpbGRDb3VudCA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gMDtcbn07XG5cblJ1bGVDb250ZXh0LnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbih2aXNpdG9yKSB7XG5cdHJldHVybiB2aXNpdG9yLnZpc2l0Q2hpbGRyZW4odGhpcyk7XG59O1xuXG4vL25lZWQgdG8gbWFuYWdlIGNpcmN1bGFyIGRlcGVuZGVuY2llcywgc28gZXhwb3J0IG5vd1xuZXhwb3J0cy5SdWxlQ29udGV4dCA9IFJ1bGVDb250ZXh0O1xudmFyIFRyZWVzID0gcmVxdWlyZSgnLi90cmVlL1RyZWVzJykuVHJlZXM7XG5cblxuLy8gUHJpbnQgb3V0IGEgd2hvbGUgdHJlZSwgbm90IGp1c3QgYSBub2RlLCBpbiBMSVNQIGZvcm1hdFxuLy8gKHJvb3QgY2hpbGQxIC4uIGNoaWxkTikuIFByaW50IGp1c3QgYSBub2RlIGlmIHRoaXMgaXMgYSBsZWFmLlxuLy9cblxuUnVsZUNvbnRleHQucHJvdG90eXBlLnRvU3RyaW5nVHJlZSA9IGZ1bmN0aW9uKHJ1bGVOYW1lcywgcmVjb2cpIHtcblx0cmV0dXJuIFRyZWVzLnRvU3RyaW5nVHJlZSh0aGlzLCBydWxlTmFtZXMsIHJlY29nKTtcbn07XG5cblJ1bGVDb250ZXh0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKHJ1bGVOYW1lcywgc3RvcCkge1xuXHRydWxlTmFtZXMgPSBydWxlTmFtZXMgfHwgbnVsbDtcblx0c3RvcCA9IHN0b3AgfHwgbnVsbDtcblx0dmFyIHAgPSB0aGlzO1xuXHR2YXIgcyA9IFwiW1wiO1xuXHR3aGlsZSAocCAhPT0gbnVsbCAmJiBwICE9PSBzdG9wKSB7XG5cdFx0aWYgKHJ1bGVOYW1lcyA9PT0gbnVsbCkge1xuXHRcdFx0aWYgKCFwLmlzRW1wdHkoKSkge1xuXHRcdFx0XHRzICs9IHAuaW52b2tpbmdTdGF0ZTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFyIHJpID0gcC5ydWxlSW5kZXg7XG5cdFx0XHR2YXIgcnVsZU5hbWUgPSAocmkgPj0gMCAmJiByaSA8IHJ1bGVOYW1lcy5sZW5ndGgpID8gcnVsZU5hbWVzW3JpXVxuXHRcdFx0XHRcdDogXCJcIiArIHJpO1xuXHRcdFx0cyArPSBydWxlTmFtZTtcblx0XHR9XG5cdFx0aWYgKHAucGFyZW50Q3R4ICE9PSBudWxsICYmIChydWxlTmFtZXMgIT09IG51bGwgfHwgIXAucGFyZW50Q3R4LmlzRW1wdHkoKSkpIHtcblx0XHRcdHMgKz0gXCIgXCI7XG5cdFx0fVxuXHRcdHAgPSBwLnBhcmVudEN0eDtcblx0fVxuXHRzICs9IFwiXVwiO1xuXHRyZXR1cm4gcztcbn07XG5cbiIsIi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbi8vXG5cbi8vIEEgdG9rZW4gaGFzIHByb3BlcnRpZXM6IHRleHQsIHR5cGUsIGxpbmUsIGNoYXJhY3RlciBwb3NpdGlvbiBpbiB0aGUgbGluZVxuLy8gKHNvIHdlIGNhbiBpZ25vcmUgdGFicyksIHRva2VuIGNoYW5uZWwsIGluZGV4LCBhbmQgc291cmNlIGZyb20gd2hpY2hcbi8vIHdlIG9idGFpbmVkIHRoaXMgdG9rZW4uXG5cbmZ1bmN0aW9uIFRva2VuKCkge1xuXHR0aGlzLnNvdXJjZSA9IG51bGw7XG5cdHRoaXMudHlwZSA9IG51bGw7IC8vIHRva2VuIHR5cGUgb2YgdGhlIHRva2VuXG5cdHRoaXMuY2hhbm5lbCA9IG51bGw7IC8vIFRoZSBwYXJzZXIgaWdub3JlcyBldmVyeXRoaW5nIG5vdCBvbiBERUZBVUxUX0NIQU5ORUxcblx0dGhpcy5zdGFydCA9IG51bGw7IC8vIG9wdGlvbmFsOyByZXR1cm4gLTEgaWYgbm90IGltcGxlbWVudGVkLlxuXHR0aGlzLnN0b3AgPSBudWxsOyAvLyBvcHRpb25hbDsgcmV0dXJuIC0xIGlmIG5vdCBpbXBsZW1lbnRlZC5cblx0dGhpcy50b2tlbkluZGV4ID0gbnVsbDsgLy8gZnJvbSAwLi5uLTEgb2YgdGhlIHRva2VuIG9iamVjdCBpbiB0aGUgaW5wdXQgc3RyZWFtXG5cdHRoaXMubGluZSA9IG51bGw7IC8vIGxpbmU9MS4ubiBvZiB0aGUgMXN0IGNoYXJhY3RlclxuXHR0aGlzLmNvbHVtbiA9IG51bGw7IC8vIGJlZ2lubmluZyBvZiB0aGUgbGluZSBhdCB3aGljaCBpdCBvY2N1cnMsIDAuLm4tMVxuXHR0aGlzLl90ZXh0ID0gbnVsbDsgLy8gdGV4dCBvZiB0aGUgdG9rZW4uXG5cdHJldHVybiB0aGlzO1xufVxuXG5Ub2tlbi5JTlZBTElEX1RZUEUgPSAwO1xuXG4vLyBEdXJpbmcgbG9va2FoZWFkIG9wZXJhdGlvbnMsIHRoaXMgXCJ0b2tlblwiIHNpZ25pZmllcyB3ZSBoaXQgcnVsZSBlbmQgQVROIHN0YXRlXG4vLyBhbmQgZGlkIG5vdCBmb2xsb3cgaXQgZGVzcGl0ZSBuZWVkaW5nIHRvLlxuVG9rZW4uRVBTSUxPTiA9IC0yO1xuXG5Ub2tlbi5NSU5fVVNFUl9UT0tFTl9UWVBFID0gMTtcblxuVG9rZW4uRU9GID0gLTE7XG5cbi8vIEFsbCB0b2tlbnMgZ28gdG8gdGhlIHBhcnNlciAodW5sZXNzIHNraXAoKSBpcyBjYWxsZWQgaW4gdGhhdCBydWxlKVxuLy8gb24gYSBwYXJ0aWN1bGFyIFwiY2hhbm5lbFwiLiBUaGUgcGFyc2VyIHR1bmVzIHRvIGEgcGFydGljdWxhciBjaGFubmVsXG4vLyBzbyB0aGF0IHdoaXRlc3BhY2UgZXRjLi4uIGNhbiBnbyB0byB0aGUgcGFyc2VyIG9uIGEgXCJoaWRkZW5cIiBjaGFubmVsLlxuXG5Ub2tlbi5ERUZBVUxUX0NIQU5ORUwgPSAwO1xuXG4vLyBBbnl0aGluZyBvbiBkaWZmZXJlbnQgY2hhbm5lbCB0aGFuIERFRkFVTFRfQ0hBTk5FTCBpcyBub3QgcGFyc2VkXG4vLyBieSBwYXJzZXIuXG5cblRva2VuLkhJRERFTl9DSEFOTkVMID0gMTtcblxuLy8gRXhwbGljaXRseSBzZXQgdGhlIHRleHQgZm9yIHRoaXMgdG9rZW4uIElmIHtjb2RlIHRleHR9IGlzIG5vdFxuLy8ge0Bjb2RlIG51bGx9LCB0aGVuIHtAbGluayAvL2dldFRleHR9IHdpbGwgcmV0dXJuIHRoaXMgdmFsdWUgcmF0aGVyIHRoYW5cbi8vIGV4dHJhY3RpbmcgdGhlIHRleHQgZnJvbSB0aGUgaW5wdXQuXG4vL1xuLy8gQHBhcmFtIHRleHQgVGhlIGV4cGxpY2l0IHRleHQgb2YgdGhlIHRva2VuLCBvciB7QGNvZGUgbnVsbH0gaWYgdGhlIHRleHRcbi8vIHNob3VsZCBiZSBvYnRhaW5lZCBmcm9tIHRoZSBpbnB1dCBhbG9uZyB3aXRoIHRoZSBzdGFydCBhbmQgc3RvcCBpbmRleGVzXG4vLyBvZiB0aGUgdG9rZW4uXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb2tlbi5wcm90b3R5cGUsIFwidGV4dFwiLCB7XG5cdGdldCA6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLl90ZXh0O1xuXHR9LFxuXHRzZXQgOiBmdW5jdGlvbih0ZXh0KSB7XG5cdFx0dGhpcy5fdGV4dCA9IHRleHQ7XG5cdH1cbn0pO1xuXG5Ub2tlbi5wcm90b3R5cGUuZ2V0VG9rZW5Tb3VyY2UgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuc291cmNlWzBdO1xufTtcblxuVG9rZW4ucHJvdG90eXBlLmdldElucHV0U3RyZWFtID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLnNvdXJjZVsxXTtcbn07XG5cbmZ1bmN0aW9uIENvbW1vblRva2VuKHNvdXJjZSwgdHlwZSwgY2hhbm5lbCwgc3RhcnQsIHN0b3ApIHtcblx0VG9rZW4uY2FsbCh0aGlzKTtcblx0dGhpcy5zb3VyY2UgPSBzb3VyY2UgIT09IHVuZGVmaW5lZCA/IHNvdXJjZSA6IENvbW1vblRva2VuLkVNUFRZX1NPVVJDRTtcblx0dGhpcy50eXBlID0gdHlwZSAhPT0gdW5kZWZpbmVkID8gdHlwZSA6IG51bGw7XG5cdHRoaXMuY2hhbm5lbCA9IGNoYW5uZWwgIT09IHVuZGVmaW5lZCA/IGNoYW5uZWwgOiBUb2tlbi5ERUZBVUxUX0NIQU5ORUw7XG5cdHRoaXMuc3RhcnQgPSBzdGFydCAhPT0gdW5kZWZpbmVkID8gc3RhcnQgOiAtMTtcblx0dGhpcy5zdG9wID0gc3RvcCAhPT0gdW5kZWZpbmVkID8gc3RvcCA6IC0xO1xuXHR0aGlzLnRva2VuSW5kZXggPSAtMTtcblx0aWYgKHRoaXMuc291cmNlWzBdICE9PSBudWxsKSB7XG5cdFx0dGhpcy5saW5lID0gc291cmNlWzBdLmxpbmU7XG5cdFx0dGhpcy5jb2x1bW4gPSBzb3VyY2VbMF0uY29sdW1uO1xuXHR9IGVsc2Uge1xuXHRcdHRoaXMuY29sdW1uID0gLTE7XG5cdH1cblx0cmV0dXJuIHRoaXM7XG59XG5cbkNvbW1vblRva2VuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVG9rZW4ucHJvdG90eXBlKTtcbkNvbW1vblRva2VuLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbW1vblRva2VuO1xuXG4vLyBBbiBlbXB0eSB7QGxpbmsgUGFpcn0gd2hpY2ggaXMgdXNlZCBhcyB0aGUgZGVmYXVsdCB2YWx1ZSBvZlxuLy8ge0BsaW5rIC8vc291cmNlfSBmb3IgdG9rZW5zIHRoYXQgZG8gbm90IGhhdmUgYSBzb3VyY2UuXG5Db21tb25Ub2tlbi5FTVBUWV9TT1VSQ0UgPSBbIG51bGwsIG51bGwgXTtcblxuLy8gQ29uc3RydWN0cyBhIG5ldyB7QGxpbmsgQ29tbW9uVG9rZW59IGFzIGEgY29weSBvZiBhbm90aGVyIHtAbGluayBUb2tlbn0uXG4vL1xuLy8gPHA+XG4vLyBJZiB7QGNvZGUgb2xkVG9rZW59IGlzIGFsc28gYSB7QGxpbmsgQ29tbW9uVG9rZW59IGluc3RhbmNlLCB0aGUgbmV3bHlcbi8vIGNvbnN0cnVjdGVkIHRva2VuIHdpbGwgc2hhcmUgYSByZWZlcmVuY2UgdG8gdGhlIHtAbGluayAvL3RleHR9IGZpZWxkIGFuZFxuLy8gdGhlIHtAbGluayBQYWlyfSBzdG9yZWQgaW4ge0BsaW5rIC8vc291cmNlfS4gT3RoZXJ3aXNlLCB7QGxpbmsgLy90ZXh0fSB3aWxsXG4vLyBiZSBhc3NpZ25lZCB0aGUgcmVzdWx0IG9mIGNhbGxpbmcge0BsaW5rIC8vZ2V0VGV4dH0sIGFuZCB7QGxpbmsgLy9zb3VyY2V9XG4vLyB3aWxsIGJlIGNvbnN0cnVjdGVkIGZyb20gdGhlIHJlc3VsdCBvZiB7QGxpbmsgVG9rZW4vL2dldFRva2VuU291cmNlfSBhbmRcbi8vIHtAbGluayBUb2tlbi8vZ2V0SW5wdXRTdHJlYW19LjwvcD5cbi8vXG4vLyBAcGFyYW0gb2xkVG9rZW4gVGhlIHRva2VuIHRvIGNvcHkuXG4vL1xuQ29tbW9uVG9rZW4ucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG5cdHZhciB0ID0gbmV3IENvbW1vblRva2VuKHRoaXMuc291cmNlLCB0aGlzLnR5cGUsIHRoaXMuY2hhbm5lbCwgdGhpcy5zdGFydCxcblx0XHRcdHRoaXMuc3RvcCk7XG5cdHQudG9rZW5JbmRleCA9IHRoaXMudG9rZW5JbmRleDtcblx0dC5saW5lID0gdGhpcy5saW5lO1xuXHR0LmNvbHVtbiA9IHRoaXMuY29sdW1uO1xuXHR0LnRleHQgPSB0aGlzLnRleHQ7XG5cdHJldHVybiB0O1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbW1vblRva2VuLnByb3RvdHlwZSwgXCJ0ZXh0XCIsIHtcblx0Z2V0IDogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKHRoaXMuX3RleHQgIT09IG51bGwpIHtcblx0XHRcdHJldHVybiB0aGlzLl90ZXh0O1xuXHRcdH1cblx0XHR2YXIgaW5wdXQgPSB0aGlzLmdldElucHV0U3RyZWFtKCk7XG5cdFx0aWYgKGlucHV0ID09PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0dmFyIG4gPSBpbnB1dC5zaXplO1xuXHRcdGlmICh0aGlzLnN0YXJ0IDwgbiAmJiB0aGlzLnN0b3AgPCBuKSB7XG5cdFx0XHRyZXR1cm4gaW5wdXQuZ2V0VGV4dCh0aGlzLnN0YXJ0LCB0aGlzLnN0b3ApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gXCI8RU9GPlwiO1xuXHRcdH1cblx0fSxcblx0c2V0IDogZnVuY3Rpb24odGV4dCkge1xuXHRcdHRoaXMuX3RleHQgPSB0ZXh0O1xuXHR9XG59KTtcblxuQ29tbW9uVG9rZW4ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdHZhciB0eHQgPSB0aGlzLnRleHQ7XG5cdGlmICh0eHQgIT09IG51bGwpIHtcblx0XHR0eHQgPSB0eHQucmVwbGFjZSgvXFxuL2csIFwiXFxcXG5cIikucmVwbGFjZSgvXFxyL2csIFwiXFxcXHJcIikucmVwbGFjZSgvXFx0L2csIFwiXFxcXHRcIik7XG5cdH0gZWxzZSB7XG5cdFx0dHh0ID0gXCI8bm8gdGV4dD5cIjtcblx0fVxuXHRyZXR1cm4gXCJbQFwiICsgdGhpcy50b2tlbkluZGV4ICsgXCIsXCIgKyB0aGlzLnN0YXJ0ICsgXCI6XCIgKyB0aGlzLnN0b3AgKyBcIj0nXCIgK1xuXHRcdFx0dHh0ICsgXCInLDxcIiArIHRoaXMudHlwZSArIFwiPlwiICtcblx0XHRcdCh0aGlzLmNoYW5uZWwgPiAwID8gXCIsY2hhbm5lbD1cIiArIHRoaXMuY2hhbm5lbCA6IFwiXCIpICsgXCIsXCIgK1xuXHRcdFx0dGhpcy5saW5lICsgXCI6XCIgKyB0aGlzLmNvbHVtbiArIFwiXVwiO1xufTtcblxuZXhwb3J0cy5Ub2tlbiA9IFRva2VuO1xuZXhwb3J0cy5Db21tb25Ub2tlbiA9IENvbW1vblRva2VuO1xuIiwiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuXG5mdW5jdGlvbiBhcnJheVRvU3RyaW5nKGEpIHtcbiAgICByZXR1cm4gXCJbXCIgKyBhLmpvaW4oXCIsIFwiKSArIFwiXVwiO1xufVxuXG5TdHJpbmcucHJvdG90eXBlLnNlZWQgPSBTdHJpbmcucHJvdG90eXBlLnNlZWQgfHwgTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpICogTWF0aC5wb3coMiwgMzIpKTtcblxuU3RyaW5nLnByb3RvdHlwZS5oYXNoQ29kZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmVtYWluZGVyLCBieXRlcywgaDEsIGgxYiwgYzEsIGMxYiwgYzIsIGMyYiwgazEsIGksXG4gICAgICAgIGtleSA9IHRoaXMudG9TdHJpbmcoKTtcblxuICAgIHJlbWFpbmRlciA9IGtleS5sZW5ndGggJiAzOyAvLyBrZXkubGVuZ3RoICUgNFxuICAgIGJ5dGVzID0ga2V5Lmxlbmd0aCAtIHJlbWFpbmRlcjtcbiAgICBoMSA9IFN0cmluZy5wcm90b3R5cGUuc2VlZDtcbiAgICBjMSA9IDB4Y2M5ZTJkNTE7XG4gICAgYzIgPSAweDFiODczNTkzO1xuICAgIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBieXRlcykge1xuICAgICAgICBrMSA9XG4gICAgICAgICAgICAoKGtleS5jaGFyQ29kZUF0KGkpICYgMHhmZikpIHxcbiAgICAgICAgICAgICgoa2V5LmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDgpIHxcbiAgICAgICAgICAgICgoa2V5LmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDE2KSB8XG4gICAgICAgICAgICAoKGtleS5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCAyNCk7XG4gICAgICAgICsraTtcblxuICAgICAgICBrMSA9ICgoKChrMSAmIDB4ZmZmZikgKiBjMSkgKyAoKCgoazEgPj4+IDE2KSAqIGMxKSAmIDB4ZmZmZikgPDwgMTYpKSkgJiAweGZmZmZmZmZmO1xuICAgICAgICBrMSA9IChrMSA8PCAxNSkgfCAoazEgPj4+IDE3KTtcbiAgICAgICAgazEgPSAoKCgoazEgJiAweGZmZmYpICogYzIpICsgKCgoKGsxID4+PiAxNikgKiBjMikgJiAweGZmZmYpIDw8IDE2KSkpICYgMHhmZmZmZmZmZjtcblxuICAgICAgICBoMSBePSBrMTtcbiAgICAgICAgaDEgPSAoaDEgPDwgMTMpIHwgKGgxID4+PiAxOSk7XG4gICAgICAgIGgxYiA9ICgoKChoMSAmIDB4ZmZmZikgKiA1KSArICgoKChoMSA+Pj4gMTYpICogNSkgJiAweGZmZmYpIDw8IDE2KSkpICYgMHhmZmZmZmZmZjtcbiAgICAgICAgaDEgPSAoKChoMWIgJiAweGZmZmYpICsgMHg2YjY0KSArICgoKChoMWIgPj4+IDE2KSArIDB4ZTY1NCkgJiAweGZmZmYpIDw8IDE2KSk7XG4gICAgfVxuXG4gICAgazEgPSAwO1xuXG4gICAgc3dpdGNoIChyZW1haW5kZXIpIHtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgazEgXj0gKGtleS5jaGFyQ29kZUF0KGkgKyAyKSAmIDB4ZmYpIDw8IDE2O1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBrMSBePSAoa2V5LmNoYXJDb2RlQXQoaSArIDEpICYgMHhmZikgPDwgODtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgazEgXj0gKGtleS5jaGFyQ29kZUF0KGkpICYgMHhmZik7XG5cbiAgICAgICAgICAgIGsxID0gKCgoazEgJiAweGZmZmYpICogYzEpICsgKCgoKGsxID4+PiAxNikgKiBjMSkgJiAweGZmZmYpIDw8IDE2KSkgJiAweGZmZmZmZmZmO1xuICAgICAgICAgICAgazEgPSAoazEgPDwgMTUpIHwgKGsxID4+PiAxNyk7XG4gICAgICAgICAgICBrMSA9ICgoKGsxICYgMHhmZmZmKSAqIGMyKSArICgoKChrMSA+Pj4gMTYpICogYzIpICYgMHhmZmZmKSA8PCAxNikpICYgMHhmZmZmZmZmZjtcbiAgICAgICAgICAgIGgxIF49IGsxO1xuICAgIH1cblxuICAgIGgxIF49IGtleS5sZW5ndGg7XG5cbiAgICBoMSBePSBoMSA+Pj4gMTY7XG4gICAgaDEgPSAoKChoMSAmIDB4ZmZmZikgKiAweDg1ZWJjYTZiKSArICgoKChoMSA+Pj4gMTYpICogMHg4NWViY2E2YikgJiAweGZmZmYpIDw8IDE2KSkgJiAweGZmZmZmZmZmO1xuICAgIGgxIF49IGgxID4+PiAxMztcbiAgICBoMSA9ICgoKChoMSAmIDB4ZmZmZikgKiAweGMyYjJhZTM1KSArICgoKChoMSA+Pj4gMTYpICogMHhjMmIyYWUzNSkgJiAweGZmZmYpIDw8IDE2KSkpICYgMHhmZmZmZmZmZjtcbiAgICBoMSBePSBoMSA+Pj4gMTY7XG5cbiAgICByZXR1cm4gaDEgPj4+IDA7XG59O1xuXG5mdW5jdGlvbiBzdGFuZGFyZEVxdWFsc0Z1bmN0aW9uKGEsIGIpIHtcbiAgICByZXR1cm4gYS5lcXVhbHMoYik7XG59XG5cbmZ1bmN0aW9uIHN0YW5kYXJkSGFzaENvZGVGdW5jdGlvbihhKSB7XG4gICAgcmV0dXJuIGEuaGFzaENvZGUoKTtcbn1cblxuZnVuY3Rpb24gU2V0KGhhc2hGdW5jdGlvbiwgZXF1YWxzRnVuY3Rpb24pIHtcbiAgICB0aGlzLmRhdGEgPSB7fTtcbiAgICB0aGlzLmhhc2hGdW5jdGlvbiA9IGhhc2hGdW5jdGlvbiB8fCBzdGFuZGFyZEhhc2hDb2RlRnVuY3Rpb247XG4gICAgdGhpcy5lcXVhbHNGdW5jdGlvbiA9IGVxdWFsc0Z1bmN0aW9uIHx8IHN0YW5kYXJkRXF1YWxzRnVuY3Rpb247XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShTZXQucHJvdG90eXBlLCBcImxlbmd0aFwiLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBsID0gMDtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMuZGF0YSkge1xuICAgICAgICAgICAgaWYgKGtleS5pbmRleE9mKFwiaGFzaF9cIikgPT09IDApIHtcbiAgICAgICAgICAgICAgICBsID0gbCArIHRoaXMuZGF0YVtrZXldLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbDtcbiAgICB9XG59KTtcblxuU2V0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICB2YXIgaGFzaCA9IHRoaXMuaGFzaEZ1bmN0aW9uKHZhbHVlKTtcbiAgICB2YXIga2V5ID0gXCJoYXNoX1wiICsgaGFzaDtcbiAgICBpZiAoa2V5IGluIHRoaXMuZGF0YSkge1xuICAgICAgICB2YXIgdmFsdWVzID0gdGhpcy5kYXRhW2tleV07XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5lcXVhbHNGdW5jdGlvbih2YWx1ZSwgdmFsdWVzW2ldKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZXNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWVzLnB1c2godmFsdWUpO1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kYXRhW2tleV0gPSBbdmFsdWVdO1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxufTtcblxuU2V0LnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHJldHVybiB0aGlzLmdldCh2YWx1ZSkgIT0gbnVsbDtcbn07XG5cblNldC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgdmFyIGhhc2ggPSB0aGlzLmhhc2hGdW5jdGlvbih2YWx1ZSk7XG4gICAgdmFyIGtleSA9IFwiaGFzaF9cIiArIGhhc2g7XG4gICAgaWYgKGtleSBpbiB0aGlzLmRhdGEpIHtcbiAgICAgICAgdmFyIHZhbHVlcyA9IHRoaXMuZGF0YVtrZXldO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZXF1YWxzRnVuY3Rpb24odmFsdWUsIHZhbHVlc1tpXSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuU2V0LnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGwgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5kYXRhKSB7XG4gICAgICAgIGlmIChrZXkuaW5kZXhPZihcImhhc2hfXCIpID09PSAwKSB7XG4gICAgICAgICAgICBsID0gbC5jb25jYXQodGhpcy5kYXRhW2tleV0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBsO1xufTtcblxuU2V0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gYXJyYXlUb1N0cmluZyh0aGlzLnZhbHVlcygpKTtcbn07XG5cbmZ1bmN0aW9uIEJpdFNldCgpIHtcbiAgICB0aGlzLmRhdGEgPSBbXTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuQml0U2V0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICB0aGlzLmRhdGFbdmFsdWVdID0gdHJ1ZTtcbn07XG5cbkJpdFNldC5wcm90b3R5cGUub3IgPSBmdW5jdGlvbiAoc2V0KSB7XG4gICAgdmFyIGJpdHMgPSB0aGlzO1xuICAgIE9iamVjdC5rZXlzKHNldC5kYXRhKS5tYXAoZnVuY3Rpb24gKGFsdCkge1xuICAgICAgICBiaXRzLmFkZChhbHQpO1xuICAgIH0pO1xufTtcblxuQml0U2V0LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICBkZWxldGUgdGhpcy5kYXRhW3ZhbHVlXTtcbn07XG5cbkJpdFNldC5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhW3ZhbHVlXSA9PT0gdHJ1ZTtcbn07XG5cbkJpdFNldC5wcm90b3R5cGUudmFsdWVzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmRhdGEpO1xufTtcblxuQml0U2V0LnByb3RvdHlwZS5taW5WYWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gTWF0aC5taW4uYXBwbHkobnVsbCwgdGhpcy52YWx1ZXMoKSk7XG59O1xuXG5CaXRTZXQucHJvdG90eXBlLmhhc2hDb2RlID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBoYXNoID0gbmV3IEhhc2goKTtcbiAgICBoYXNoLnVwZGF0ZSh0aGlzLnZhbHVlcygpKTtcbiAgICByZXR1cm4gaGFzaC5maW5pc2goKTtcbn07XG5cbkJpdFNldC5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gKG90aGVyKSB7XG4gICAgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBCaXRTZXQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaGFzaENvZGUoKSA9PT0gb3RoZXIuaGFzaENvZGUoKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCaXRTZXQucHJvdG90eXBlLCBcImxlbmd0aFwiLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlcygpLmxlbmd0aDtcbiAgICB9XG59KTtcblxuQml0U2V0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gXCJ7XCIgKyB0aGlzLnZhbHVlcygpLmpvaW4oXCIsIFwiKSArIFwifVwiO1xufTtcblxuZnVuY3Rpb24gTWFwKGhhc2hGdW5jdGlvbiwgZXF1YWxzRnVuY3Rpb24pIHtcbiAgICB0aGlzLmRhdGEgPSB7fTtcbiAgICB0aGlzLmhhc2hGdW5jdGlvbiA9IGhhc2hGdW5jdGlvbiB8fCBzdGFuZGFyZEhhc2hDb2RlRnVuY3Rpb247XG4gICAgdGhpcy5lcXVhbHNGdW5jdGlvbiA9IGVxdWFsc0Z1bmN0aW9uIHx8IHN0YW5kYXJkRXF1YWxzRnVuY3Rpb247XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXAucHJvdG90eXBlLCBcImxlbmd0aFwiLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBsID0gMDtcbiAgICAgICAgZm9yICh2YXIgaGFzaEtleSBpbiB0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgIGlmIChoYXNoS2V5LmluZGV4T2YoXCJoYXNoX1wiKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGwgPSBsICsgdGhpcy5kYXRhW2hhc2hLZXldLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbDtcbiAgICB9XG59KTtcblxuTWFwLnByb3RvdHlwZS5wdXQgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIHZhciBoYXNoS2V5ID0gXCJoYXNoX1wiICsgdGhpcy5oYXNoRnVuY3Rpb24oa2V5KTtcbiAgICBpZiAoaGFzaEtleSBpbiB0aGlzLmRhdGEpIHtcbiAgICAgICAgdmFyIGVudHJpZXMgPSB0aGlzLmRhdGFbaGFzaEtleV07XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZW50cmllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGVudHJ5ID0gZW50cmllc1tpXTtcbiAgICAgICAgICAgIGlmICh0aGlzLmVxdWFsc0Z1bmN0aW9uKGtleSwgZW50cnkua2V5KSkge1xuICAgICAgICAgICAgICAgIHZhciBvbGRWYWx1ZSA9IGVudHJ5LnZhbHVlO1xuICAgICAgICAgICAgICAgIGVudHJ5LnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9sZFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVudHJpZXMucHVzaCh7a2V5OmtleSwgdmFsdWU6dmFsdWV9KTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGF0YVtoYXNoS2V5XSA9IFt7a2V5OmtleSwgdmFsdWU6dmFsdWV9XTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbn07XG5cbk1hcC5wcm90b3R5cGUuY29udGFpbnNLZXkgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGhhc2hLZXkgPSBcImhhc2hfXCIgKyB0aGlzLmhhc2hGdW5jdGlvbihrZXkpO1xuICAgIGlmKGhhc2hLZXkgaW4gdGhpcy5kYXRhKSB7XG4gICAgICAgIHZhciBlbnRyaWVzID0gdGhpcy5kYXRhW2hhc2hLZXldO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVudHJpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaV07XG4gICAgICAgICAgICBpZiAodGhpcy5lcXVhbHNGdW5jdGlvbihrZXksIGVudHJ5LmtleSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuTWFwLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGhhc2hLZXkgPSBcImhhc2hfXCIgKyB0aGlzLmhhc2hGdW5jdGlvbihrZXkpO1xuICAgIGlmKGhhc2hLZXkgaW4gdGhpcy5kYXRhKSB7XG4gICAgICAgIHZhciBlbnRyaWVzID0gdGhpcy5kYXRhW2hhc2hLZXldO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVudHJpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaV07XG4gICAgICAgICAgICBpZiAodGhpcy5lcXVhbHNGdW5jdGlvbihrZXksIGVudHJ5LmtleSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5LnZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuTWFwLnByb3RvdHlwZS5lbnRyaWVzID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBsID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIHRoaXMuZGF0YSkge1xuICAgICAgICBpZiAoa2V5LmluZGV4T2YoXCJoYXNoX1wiKSA9PT0gMCkge1xuICAgICAgICAgICAgbCA9IGwuY29uY2F0KHRoaXMuZGF0YVtrZXldKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbDtcbn07XG5cblxuTWFwLnByb3RvdHlwZS5nZXRLZXlzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmVudHJpZXMoKS5tYXAoZnVuY3Rpb24oZSkge1xuICAgICAgICByZXR1cm4gZS5rZXk7XG4gICAgfSk7XG59O1xuXG5cbk1hcC5wcm90b3R5cGUuZ2V0VmFsdWVzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmVudHJpZXMoKS5tYXAoZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIGUudmFsdWU7XG4gICAgfSk7XG59O1xuXG5cbk1hcC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNzID0gdGhpcy5lbnRyaWVzKCkubWFwKGZ1bmN0aW9uKGVudHJ5KSB7XG4gICAgICAgIHJldHVybiAneycgKyBlbnRyeS5rZXkgKyAnOicgKyBlbnRyeS52YWx1ZSArICd9JztcbiAgICB9KTtcbiAgICByZXR1cm4gJ1snICsgc3Muam9pbihcIiwgXCIpICsgJ10nO1xufTtcblxuXG5mdW5jdGlvbiBBbHREaWN0KCkge1xuICAgIHRoaXMuZGF0YSA9IHt9O1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5cbkFsdERpY3QucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICBrZXkgPSBcImstXCIgKyBrZXk7XG4gICAgaWYgKGtleSBpbiB0aGlzLmRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVtrZXldO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn07XG5cbkFsdERpY3QucHJvdG90eXBlLnB1dCA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAga2V5ID0gXCJrLVwiICsga2V5O1xuICAgIHRoaXMuZGF0YVtrZXldID0gdmFsdWU7XG59O1xuXG5BbHREaWN0LnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGRhdGEgPSB0aGlzLmRhdGE7XG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLmRhdGEpO1xuICAgIHJldHVybiBrZXlzLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHJldHVybiBkYXRhW2tleV07XG4gICAgfSk7XG59O1xuXG5mdW5jdGlvbiBEb3VibGVEaWN0KCkge1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5mdW5jdGlvbiBIYXNoKCkge1xuICAgIHRoaXMuY291bnQgPSAwO1xuICAgIHRoaXMuaGFzaCA9IDA7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkhhc2gucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBmb3IodmFyIGk9MDtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgaWYoQXJyYXkuaXNBcnJheSh2YWx1ZSkpXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZS5hcHBseSh2YWx1ZSk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGsgPSAwO1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgICAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICAgICAgICAgIGsgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgICAgICAgICAgayA9IHZhbHVlLmhhc2hDb2RlKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLnVwZGF0ZUhhc2hDb2RlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGsgPSBrICogMHhDQzlFMkQ1MTtcbiAgICAgICAgICAgIGsgPSAoayA8PCAxNSkgfCAoayA+Pj4gKDMyIC0gMTUpKTtcbiAgICAgICAgICAgIGsgPSBrICogMHgxQjg3MzU5MztcbiAgICAgICAgICAgIHRoaXMuY291bnQgPSB0aGlzLmNvdW50ICsgMTtcbiAgICAgICAgICAgIHZhciBoYXNoID0gdGhpcy5oYXNoIF4gaztcbiAgICAgICAgICAgIGhhc2ggPSAoaGFzaCA8PCAxMykgfCAoaGFzaCA+Pj4gKDMyIC0gMTMpKTtcbiAgICAgICAgICAgIGhhc2ggPSBoYXNoICogNSArIDB4RTY1NDZCNjQ7XG4gICAgICAgICAgICB0aGlzLmhhc2ggPSBoYXNoO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5IYXNoLnByb3RvdHlwZS5maW5pc2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGhhc2ggPSB0aGlzLmhhc2ggXiAodGhpcy5jb3VudCAqIDQpO1xuICAgIGhhc2ggPSBoYXNoIF4gKGhhc2ggPj4+IDE2KTtcbiAgICBoYXNoID0gaGFzaCAqIDB4ODVFQkNBNkI7XG4gICAgaGFzaCA9IGhhc2ggXiAoaGFzaCA+Pj4gMTMpO1xuICAgIGhhc2ggPSBoYXNoICogMHhDMkIyQUUzNTtcbiAgICBoYXNoID0gaGFzaCBeIChoYXNoID4+PiAxNik7XG4gICAgcmV0dXJuIGhhc2g7XG59XG5cbmZ1bmN0aW9uIGhhc2hTdHVmZigpIHtcbiAgICB2YXIgaGFzaCA9IG5ldyBIYXNoKCk7XG4gICAgaGFzaC51cGRhdGUuYXBwbHkoYXJndW1lbnRzKTtcbiAgICByZXR1cm4gaGFzaC5maW5pc2goKTtcbn1cblxuRG91YmxlRGljdC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICB2YXIgZCA9IHRoaXNbYV0gfHwgbnVsbDtcbiAgICByZXR1cm4gZCA9PT0gbnVsbCA/IG51bGwgOiAoZFtiXSB8fCBudWxsKTtcbn07XG5cbkRvdWJsZURpY3QucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChhLCBiLCBvKSB7XG4gICAgdmFyIGQgPSB0aGlzW2FdIHx8IG51bGw7XG4gICAgaWYgKGQgPT09IG51bGwpIHtcbiAgICAgICAgZCA9IHt9O1xuICAgICAgICB0aGlzW2FdID0gZDtcbiAgICB9XG4gICAgZFtiXSA9IG87XG59O1xuXG5cbmZ1bmN0aW9uIGVzY2FwZVdoaXRlc3BhY2UocywgZXNjYXBlU3BhY2VzKSB7XG4gICAgcyA9IHMucmVwbGFjZSgvXFx0L2csIFwiXFxcXHRcIilcbiAgICAgICAgIC5yZXBsYWNlKC9cXG4vZywgXCJcXFxcblwiKVxuICAgICAgICAgLnJlcGxhY2UoL1xcci9nLCBcIlxcXFxyXCIpO1xuICAgIGlmIChlc2NhcGVTcGFjZXMpIHtcbiAgICAgICAgcyA9IHMucmVwbGFjZSgvIC9nLCBcIlxcdTAwQjdcIik7XG4gICAgfVxuICAgIHJldHVybiBzO1xufVxuXG5mdW5jdGlvbiB0aXRsZUNhc2Uoc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9cXHdcXFMqL2csIGZ1bmN0aW9uICh0eHQpIHtcbiAgICAgICAgcmV0dXJuIHR4dC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHR4dC5zdWJzdHIoMSk7XG4gICAgfSk7XG59O1xuXG5mdW5jdGlvbiBlcXVhbEFycmF5cyhhLCBiKVxue1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhKSB8fCAhQXJyYXkuaXNBcnJheShiKSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChhID09IGIpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIGlmIChhLmxlbmd0aCAhPSBiLmxlbmd0aClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoYVtpXSA9PSBiW2ldKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGlmICghYVtpXS5lcXVhbHMoYltpXSkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufTtcblxuZXhwb3J0cy5IYXNoID0gSGFzaDtcbmV4cG9ydHMuU2V0ID0gU2V0O1xuZXhwb3J0cy5NYXAgPSBNYXA7XG5leHBvcnRzLkJpdFNldCA9IEJpdFNldDtcbmV4cG9ydHMuQWx0RGljdCA9IEFsdERpY3Q7XG5leHBvcnRzLkRvdWJsZURpY3QgPSBEb3VibGVEaWN0O1xuZXhwb3J0cy5oYXNoU3R1ZmYgPSBoYXNoU3R1ZmY7XG5leHBvcnRzLmVzY2FwZVdoaXRlc3BhY2UgPSBlc2NhcGVXaGl0ZXNwYWNlO1xuZXhwb3J0cy5hcnJheVRvU3RyaW5nID0gYXJyYXlUb1N0cmluZztcbmV4cG9ydHMudGl0bGVDYXNlID0gdGl0bGVDYXNlO1xuZXhwb3J0cy5lcXVhbEFycmF5cyA9IGVxdWFsQXJyYXlzO1xuIiwiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuXG52YXIgTEwxQW5hbHl6ZXIgPSByZXF1aXJlKCcuLy4uL0xMMUFuYWx5emVyJykuTEwxQW5hbHl6ZXI7XG52YXIgSW50ZXJ2YWxTZXQgPSByZXF1aXJlKCcuLy4uL0ludGVydmFsU2V0JykuSW50ZXJ2YWxTZXQ7XG5cbmZ1bmN0aW9uIEFUTihncmFtbWFyVHlwZSAsIG1heFRva2VuVHlwZSkge1xuXG4gICAgLy8gVXNlZCBmb3IgcnVudGltZSBkZXNlcmlhbGl6YXRpb24gb2YgQVROcyBmcm9tIHN0cmluZ3MvLy9cbiAgICAvLyBUaGUgdHlwZSBvZiB0aGUgQVROLlxuICAgIHRoaXMuZ3JhbW1hclR5cGUgPSBncmFtbWFyVHlwZTtcbiAgICAvLyBUaGUgbWF4aW11bSB2YWx1ZSBmb3IgYW55IHN5bWJvbCByZWNvZ25pemVkIGJ5IGEgdHJhbnNpdGlvbiBpbiB0aGUgQVROLlxuICAgIHRoaXMubWF4VG9rZW5UeXBlID0gbWF4VG9rZW5UeXBlO1xuICAgIHRoaXMuc3RhdGVzID0gW107XG4gICAgLy8gRWFjaCBzdWJydWxlL3J1bGUgaXMgYSBkZWNpc2lvbiBwb2ludCBhbmQgd2UgbXVzdCB0cmFjayB0aGVtIHNvIHdlXG4gICAgLy8gIGNhbiBnbyBiYWNrIGxhdGVyIGFuZCBidWlsZCBERkEgcHJlZGljdG9ycyBmb3IgdGhlbS4gIFRoaXMgaW5jbHVkZXNcbiAgICAvLyAgYWxsIHRoZSBydWxlcywgc3VicnVsZXMsIG9wdGlvbmFsIGJsb2NrcywgKCkrLCAoKSogZXRjLi4uXG4gICAgdGhpcy5kZWNpc2lvblRvU3RhdGUgPSBbXTtcbiAgICAvLyBNYXBzIGZyb20gcnVsZSBpbmRleCB0byBzdGFydGluZyBzdGF0ZSBudW1iZXIuXG4gICAgdGhpcy5ydWxlVG9TdGFydFN0YXRlID0gW107XG4gICAgLy8gTWFwcyBmcm9tIHJ1bGUgaW5kZXggdG8gc3RvcCBzdGF0ZSBudW1iZXIuXG4gICAgdGhpcy5ydWxlVG9TdG9wU3RhdGUgPSBudWxsO1xuICAgIHRoaXMubW9kZU5hbWVUb1N0YXJ0U3RhdGUgPSB7fTtcbiAgICAvLyBGb3IgbGV4ZXIgQVROcywgdGhpcyBtYXBzIHRoZSBydWxlIGluZGV4IHRvIHRoZSByZXN1bHRpbmcgdG9rZW4gdHlwZS5cbiAgICAvLyBGb3IgcGFyc2VyIEFUTnMsIHRoaXMgbWFwcyB0aGUgcnVsZSBpbmRleCB0byB0aGUgZ2VuZXJhdGVkIGJ5cGFzcyB0b2tlblxuICAgIC8vIHR5cGUgaWYgdGhlXG4gICAgLy8ge0BsaW5rIEFUTkRlc2VyaWFsaXphdGlvbk9wdGlvbnMvL2lzR2VuZXJhdGVSdWxlQnlwYXNzVHJhbnNpdGlvbnN9XG4gICAgLy8gZGVzZXJpYWxpemF0aW9uIG9wdGlvbiB3YXMgc3BlY2lmaWVkOyBvdGhlcndpc2UsIHRoaXMgaXMge0Bjb2RlIG51bGx9LlxuICAgIHRoaXMucnVsZVRvVG9rZW5UeXBlID0gbnVsbDtcbiAgICAvLyBGb3IgbGV4ZXIgQVROcywgdGhpcyBpcyBhbiBhcnJheSBvZiB7QGxpbmsgTGV4ZXJBY3Rpb259IG9iamVjdHMgd2hpY2ggbWF5XG4gICAgLy8gYmUgcmVmZXJlbmNlZCBieSBhY3Rpb24gdHJhbnNpdGlvbnMgaW4gdGhlIEFUTi5cbiAgICB0aGlzLmxleGVyQWN0aW9ucyA9IG51bGw7XG4gICAgdGhpcy5tb2RlVG9TdGFydFN0YXRlID0gW107XG5cbiAgICByZXR1cm4gdGhpcztcbn1cblxuLy8gQ29tcHV0ZSB0aGUgc2V0IG9mIHZhbGlkIHRva2VucyB0aGF0IGNhbiBvY2N1ciBzdGFydGluZyBpbiBzdGF0ZSB7QGNvZGUgc30uXG4vLyAgSWYge0Bjb2RlIGN0eH0gaXMgbnVsbCwgdGhlIHNldCBvZiB0b2tlbnMgd2lsbCBub3QgaW5jbHVkZSB3aGF0IGNhbiBmb2xsb3dcbi8vICB0aGUgcnVsZSBzdXJyb3VuZGluZyB7QGNvZGUgc30uIEluIG90aGVyIHdvcmRzLCB0aGUgc2V0IHdpbGwgYmVcbi8vICByZXN0cmljdGVkIHRvIHRva2VucyByZWFjaGFibGUgc3RheWluZyB3aXRoaW4ge0Bjb2RlIHN9J3MgcnVsZS5cbkFUTi5wcm90b3R5cGUubmV4dFRva2Vuc0luQ29udGV4dCA9IGZ1bmN0aW9uKHMsIGN0eCkge1xuICAgIHZhciBhbmFsID0gbmV3IExMMUFuYWx5emVyKHRoaXMpO1xuICAgIHJldHVybiBhbmFsLkxPT0socywgbnVsbCwgY3R4KTtcbn07XG5cbi8vIENvbXB1dGUgdGhlIHNldCBvZiB2YWxpZCB0b2tlbnMgdGhhdCBjYW4gb2NjdXIgc3RhcnRpbmcgaW4ge0Bjb2RlIHN9IGFuZFxuLy8gc3RheWluZyBpbiBzYW1lIHJ1bGUuIHtAbGluayBUb2tlbi8vRVBTSUxPTn0gaXMgaW4gc2V0IGlmIHdlIHJlYWNoIGVuZCBvZlxuLy8gcnVsZS5cbkFUTi5wcm90b3R5cGUubmV4dFRva2Vuc05vQ29udGV4dCA9IGZ1bmN0aW9uKHMpIHtcbiAgICBpZiAocy5uZXh0VG9rZW5XaXRoaW5SdWxlICE9PSBudWxsICkge1xuICAgICAgICByZXR1cm4gcy5uZXh0VG9rZW5XaXRoaW5SdWxlO1xuICAgIH1cbiAgICBzLm5leHRUb2tlbldpdGhpblJ1bGUgPSB0aGlzLm5leHRUb2tlbnNJbkNvbnRleHQocywgbnVsbCk7XG4gICAgcy5uZXh0VG9rZW5XaXRoaW5SdWxlLnJlYWRPbmx5ID0gdHJ1ZTtcbiAgICByZXR1cm4gcy5uZXh0VG9rZW5XaXRoaW5SdWxlO1xufTtcblxuQVROLnByb3RvdHlwZS5uZXh0VG9rZW5zID0gZnVuY3Rpb24ocywgY3R4KSB7XG4gICAgaWYgKCBjdHg9PT11bmRlZmluZWQgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHRUb2tlbnNOb0NvbnRleHQocyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dFRva2Vuc0luQ29udGV4dChzLCBjdHgpO1xuICAgIH1cbn07XG5cbkFUTi5wcm90b3R5cGUuYWRkU3RhdGUgPSBmdW5jdGlvbiggc3RhdGUpIHtcbiAgICBpZiAoIHN0YXRlICE9PSBudWxsICkge1xuICAgICAgICBzdGF0ZS5hdG4gPSB0aGlzO1xuICAgICAgICBzdGF0ZS5zdGF0ZU51bWJlciA9IHRoaXMuc3RhdGVzLmxlbmd0aDtcbiAgICB9XG4gICAgdGhpcy5zdGF0ZXMucHVzaChzdGF0ZSk7XG59O1xuXG5BVE4ucHJvdG90eXBlLnJlbW92ZVN0YXRlID0gZnVuY3Rpb24oIHN0YXRlKSB7XG4gICAgdGhpcy5zdGF0ZXNbc3RhdGUuc3RhdGVOdW1iZXJdID0gbnVsbDsgLy8ganVzdCBmcmVlIG1lbSwgZG9uJ3Qgc2hpZnQgc3RhdGVzIGluIGxpc3Rcbn07XG5cbkFUTi5wcm90b3R5cGUuZGVmaW5lRGVjaXNpb25TdGF0ZSA9IGZ1bmN0aW9uKCBzKSB7XG4gICAgdGhpcy5kZWNpc2lvblRvU3RhdGUucHVzaChzKTtcbiAgICBzLmRlY2lzaW9uID0gdGhpcy5kZWNpc2lvblRvU3RhdGUubGVuZ3RoLTE7XG4gICAgcmV0dXJuIHMuZGVjaXNpb247XG59O1xuXG5BVE4ucHJvdG90eXBlLmdldERlY2lzaW9uU3RhdGUgPSBmdW5jdGlvbiggZGVjaXNpb24pIHtcbiAgICBpZiAodGhpcy5kZWNpc2lvblRvU3RhdGUubGVuZ3RoPT09MCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWNpc2lvblRvU3RhdGVbZGVjaXNpb25dO1xuICAgIH1cbn07XG5cbi8vIENvbXB1dGVzIHRoZSBzZXQgb2YgaW5wdXQgc3ltYm9scyB3aGljaCBjb3VsZCBmb2xsb3cgQVROIHN0YXRlIG51bWJlclxuLy8ge0Bjb2RlIHN0YXRlTnVtYmVyfSBpbiB0aGUgc3BlY2lmaWVkIGZ1bGwge0Bjb2RlIGNvbnRleHR9LiBUaGlzIG1ldGhvZFxuLy8gY29uc2lkZXJzIHRoZSBjb21wbGV0ZSBwYXJzZXIgY29udGV4dCwgYnV0IGRvZXMgbm90IGV2YWx1YXRlIHNlbWFudGljXG4vLyBwcmVkaWNhdGVzIChpLmUuIGFsbCBwcmVkaWNhdGVzIGVuY291bnRlcmVkIGR1cmluZyB0aGUgY2FsY3VsYXRpb24gYXJlXG4vLyBhc3N1bWVkIHRydWUpLiBJZiBhIHBhdGggaW4gdGhlIEFUTiBleGlzdHMgZnJvbSB0aGUgc3RhcnRpbmcgc3RhdGUgdG8gdGhlXG4vLyB7QGxpbmsgUnVsZVN0b3BTdGF0ZX0gb2YgdGhlIG91dGVybW9zdCBjb250ZXh0IHdpdGhvdXQgbWF0Y2hpbmcgYW55XG4vLyBzeW1ib2xzLCB7QGxpbmsgVG9rZW4vL0VPRn0gaXMgYWRkZWQgdG8gdGhlIHJldHVybmVkIHNldC5cbi8vXG4vLyA8cD5JZiB7QGNvZGUgY29udGV4dH0gaXMge0Bjb2RlIG51bGx9LCBpdCBpcyB0cmVhdGVkIGFzXG4vLyB7QGxpbmsgUGFyc2VyUnVsZUNvbnRleHQvL0VNUFRZfS48L3A+XG4vL1xuLy8gQHBhcmFtIHN0YXRlTnVtYmVyIHRoZSBBVE4gc3RhdGUgbnVtYmVyXG4vLyBAcGFyYW0gY29udGV4dCB0aGUgZnVsbCBwYXJzZSBjb250ZXh0XG4vLyBAcmV0dXJuIFRoZSBzZXQgb2YgcG90ZW50aWFsbHkgdmFsaWQgaW5wdXQgc3ltYm9scyB3aGljaCBjb3VsZCBmb2xsb3cgdGhlXG4vLyBzcGVjaWZpZWQgc3RhdGUgaW4gdGhlIHNwZWNpZmllZCBjb250ZXh0LlxuLy8gQHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgdGhlIEFUTiBkb2VzIG5vdCBjb250YWluIGEgc3RhdGUgd2l0aFxuLy8gbnVtYmVyIHtAY29kZSBzdGF0ZU51bWJlcn1cbnZhciBUb2tlbiA9IHJlcXVpcmUoJy4vLi4vVG9rZW4nKS5Ub2tlbjtcblxuQVROLnByb3RvdHlwZS5nZXRFeHBlY3RlZFRva2VucyA9IGZ1bmN0aW9uKCBzdGF0ZU51bWJlciwgY3R4ICkge1xuICAgIGlmICggc3RhdGVOdW1iZXIgPCAwIHx8IHN0YXRlTnVtYmVyID49IHRoaXMuc3RhdGVzLmxlbmd0aCApIHtcbiAgICAgICAgdGhyb3coXCJJbnZhbGlkIHN0YXRlIG51bWJlci5cIik7XG4gICAgfVxuICAgIHZhciBzID0gdGhpcy5zdGF0ZXNbc3RhdGVOdW1iZXJdO1xuICAgIHZhciBmb2xsb3dpbmcgPSB0aGlzLm5leHRUb2tlbnMocyk7XG4gICAgaWYgKCFmb2xsb3dpbmcuY29udGFpbnMoVG9rZW4uRVBTSUxPTikpIHtcbiAgICAgICAgcmV0dXJuIGZvbGxvd2luZztcbiAgICB9XG4gICAgdmFyIGV4cGVjdGVkID0gbmV3IEludGVydmFsU2V0KCk7XG4gICAgZXhwZWN0ZWQuYWRkU2V0KGZvbGxvd2luZyk7XG4gICAgZXhwZWN0ZWQucmVtb3ZlT25lKFRva2VuLkVQU0lMT04pO1xuICAgIHdoaWxlIChjdHggIT09IG51bGwgJiYgY3R4Lmludm9raW5nU3RhdGUgPj0gMCAmJiBmb2xsb3dpbmcuY29udGFpbnMoVG9rZW4uRVBTSUxPTikpIHtcbiAgICAgICAgdmFyIGludm9raW5nU3RhdGUgPSB0aGlzLnN0YXRlc1tjdHguaW52b2tpbmdTdGF0ZV07XG4gICAgICAgIHZhciBydCA9IGludm9raW5nU3RhdGUudHJhbnNpdGlvbnNbMF07XG4gICAgICAgIGZvbGxvd2luZyA9IHRoaXMubmV4dFRva2VucyhydC5mb2xsb3dTdGF0ZSk7XG4gICAgICAgIGV4cGVjdGVkLmFkZFNldChmb2xsb3dpbmcpO1xuICAgICAgICBleHBlY3RlZC5yZW1vdmVPbmUoVG9rZW4uRVBTSUxPTik7XG4gICAgICAgIGN0eCA9IGN0eC5wYXJlbnRDdHg7XG4gICAgfVxuICAgIGlmIChmb2xsb3dpbmcuY29udGFpbnMoVG9rZW4uRVBTSUxPTikpIHtcbiAgICAgICAgZXhwZWN0ZWQuYWRkT25lKFRva2VuLkVPRik7XG4gICAgfVxuICAgIHJldHVybiBleHBlY3RlZDtcbn07XG5cbkFUTi5JTlZBTElEX0FMVF9OVU1CRVIgPSAwO1xuXG5leHBvcnRzLkFUTiA9IEFUTjsiLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy8vXG5cbi8vIEEgdHVwbGU6IChBVE4gc3RhdGUsIHByZWRpY3RlZCBhbHQsIHN5bnRhY3RpYywgc2VtYW50aWMgY29udGV4dCkuXG4vLyAgVGhlIHN5bnRhY3RpYyBjb250ZXh0IGlzIGEgZ3JhcGgtc3RydWN0dXJlZCBzdGFjayBub2RlIHdob3NlXG4vLyAgcGF0aChzKSB0byB0aGUgcm9vdCBpcyB0aGUgcnVsZSBpbnZvY2F0aW9uKHMpXG4vLyAgY2hhaW4gdXNlZCB0byBhcnJpdmUgYXQgdGhlIHN0YXRlLiAgVGhlIHNlbWFudGljIGNvbnRleHQgaXNcbi8vICB0aGUgdHJlZSBvZiBzZW1hbnRpYyBwcmVkaWNhdGVzIGVuY291bnRlcmVkIGJlZm9yZSByZWFjaGluZ1xuLy8gIGFuIEFUTiBzdGF0ZS5cbi8vL1xuXG52YXIgRGVjaXNpb25TdGF0ZSA9IHJlcXVpcmUoJy4vQVROU3RhdGUnKS5EZWNpc2lvblN0YXRlO1xudmFyIFNlbWFudGljQ29udGV4dCA9IHJlcXVpcmUoJy4vU2VtYW50aWNDb250ZXh0JykuU2VtYW50aWNDb250ZXh0O1xudmFyIEhhc2ggPSByZXF1aXJlKFwiLi4vVXRpbHNcIikuSGFzaDtcblxuXG5mdW5jdGlvbiBjaGVja1BhcmFtcyhwYXJhbXMsIGlzQ2ZnKSB7XG5cdGlmKHBhcmFtcz09PW51bGwpIHtcblx0XHR2YXIgcmVzdWx0ID0geyBzdGF0ZTpudWxsLCBhbHQ6bnVsbCwgY29udGV4dDpudWxsLCBzZW1hbnRpY0NvbnRleHQ6bnVsbCB9O1xuXHRcdGlmKGlzQ2ZnKSB7XG5cdFx0XHRyZXN1bHQucmVhY2hlc0ludG9PdXRlckNvbnRleHQgPSAwO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9IGVsc2Uge1xuXHRcdHZhciBwcm9wcyA9IHt9O1xuXHRcdHByb3BzLnN0YXRlID0gcGFyYW1zLnN0YXRlIHx8IG51bGw7XG5cdFx0cHJvcHMuYWx0ID0gKHBhcmFtcy5hbHQgPT09IHVuZGVmaW5lZCkgPyBudWxsIDogcGFyYW1zLmFsdDtcblx0XHRwcm9wcy5jb250ZXh0ID0gcGFyYW1zLmNvbnRleHQgfHwgbnVsbDtcblx0XHRwcm9wcy5zZW1hbnRpY0NvbnRleHQgPSBwYXJhbXMuc2VtYW50aWNDb250ZXh0IHx8IG51bGw7XG5cdFx0aWYoaXNDZmcpIHtcblx0XHRcdHByb3BzLnJlYWNoZXNJbnRvT3V0ZXJDb250ZXh0ID0gcGFyYW1zLnJlYWNoZXNJbnRvT3V0ZXJDb250ZXh0IHx8IDA7XG5cdFx0XHRwcm9wcy5wcmVjZWRlbmNlRmlsdGVyU3VwcHJlc3NlZCA9IHBhcmFtcy5wcmVjZWRlbmNlRmlsdGVyU3VwcHJlc3NlZCB8fCBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHByb3BzO1xuXHR9XG59XG5cbmZ1bmN0aW9uIEFUTkNvbmZpZyhwYXJhbXMsIGNvbmZpZykge1xuXHR0aGlzLmNoZWNrQ29udGV4dChwYXJhbXMsIGNvbmZpZyk7XG5cdHBhcmFtcyA9IGNoZWNrUGFyYW1zKHBhcmFtcyk7XG5cdGNvbmZpZyA9IGNoZWNrUGFyYW1zKGNvbmZpZywgdHJ1ZSk7XG4gICAgLy8gVGhlIEFUTiBzdGF0ZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb25maWd1cmF0aW9uLy8vXG4gICAgdGhpcy5zdGF0ZSA9IHBhcmFtcy5zdGF0ZSE9PW51bGwgPyBwYXJhbXMuc3RhdGUgOiBjb25maWcuc3RhdGU7XG4gICAgLy8gV2hhdCBhbHQgKG9yIGxleGVyIHJ1bGUpIGlzIHByZWRpY3RlZCBieSB0aGlzIGNvbmZpZ3VyYXRpb24vLy9cbiAgICB0aGlzLmFsdCA9IHBhcmFtcy5hbHQhPT1udWxsID8gcGFyYW1zLmFsdCA6IGNvbmZpZy5hbHQ7XG4gICAgLy8gVGhlIHN0YWNrIG9mIGludm9raW5nIHN0YXRlcyBsZWFkaW5nIHRvIHRoZSBydWxlL3N0YXRlcyBhc3NvY2lhdGVkXG4gICAgLy8gIHdpdGggdGhpcyBjb25maWcuICBXZSB0cmFjayBvbmx5IHRob3NlIGNvbnRleHRzIHB1c2hlZCBkdXJpbmdcbiAgICAvLyAgZXhlY3V0aW9uIG9mIHRoZSBBVE4gc2ltdWxhdG9yLlxuICAgIHRoaXMuY29udGV4dCA9IHBhcmFtcy5jb250ZXh0IT09bnVsbCA/IHBhcmFtcy5jb250ZXh0IDogY29uZmlnLmNvbnRleHQ7XG4gICAgdGhpcy5zZW1hbnRpY0NvbnRleHQgPSBwYXJhbXMuc2VtYW50aWNDb250ZXh0IT09bnVsbCA/IHBhcmFtcy5zZW1hbnRpY0NvbnRleHQgOlxuICAgICAgICAoY29uZmlnLnNlbWFudGljQ29udGV4dCE9PW51bGwgPyBjb25maWcuc2VtYW50aWNDb250ZXh0IDogU2VtYW50aWNDb250ZXh0Lk5PTkUpO1xuICAgIC8vIFdlIGNhbm5vdCBleGVjdXRlIHByZWRpY2F0ZXMgZGVwZW5kZW50IHVwb24gbG9jYWwgY29udGV4dCB1bmxlc3NcbiAgICAvLyB3ZSBrbm93IGZvciBzdXJlIHdlIGFyZSBpbiB0aGUgY29ycmVjdCBjb250ZXh0LiBCZWNhdXNlIHRoZXJlIGlzXG4gICAgLy8gbm8gd2F5IHRvIGRvIHRoaXMgZWZmaWNpZW50bHksIHdlIHNpbXBseSBjYW5ub3QgZXZhbHVhdGVcbiAgICAvLyBkZXBlbmRlbnQgcHJlZGljYXRlcyB1bmxlc3Mgd2UgYXJlIGluIHRoZSBydWxlIHRoYXQgaW5pdGlhbGx5XG4gICAgLy8gaW52b2tlcyB0aGUgQVROIHNpbXVsYXRvci5cbiAgICAvL1xuICAgIC8vIGNsb3N1cmUoKSB0cmFja3MgdGhlIGRlcHRoIG9mIGhvdyBmYXIgd2UgZGlwIGludG8gdGhlXG4gICAgLy8gb3V0ZXIgY29udGV4dDogZGVwdGggJmd0OyAwLiAgTm90ZSB0aGF0IGl0IG1heSBub3QgYmUgdG90YWxseVxuICAgIC8vIGFjY3VyYXRlIGRlcHRoIHNpbmNlIEkgZG9uJ3QgZXZlciBkZWNyZW1lbnQuIFRPRE86IG1ha2UgaXQgYSBib29sZWFuIHRoZW5cbiAgICB0aGlzLnJlYWNoZXNJbnRvT3V0ZXJDb250ZXh0ID0gY29uZmlnLnJlYWNoZXNJbnRvT3V0ZXJDb250ZXh0O1xuICAgIHRoaXMucHJlY2VkZW5jZUZpbHRlclN1cHByZXNzZWQgPSBjb25maWcucHJlY2VkZW5jZUZpbHRlclN1cHByZXNzZWQ7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkFUTkNvbmZpZy5wcm90b3R5cGUuY2hlY2tDb250ZXh0ID0gZnVuY3Rpb24ocGFyYW1zLCBjb25maWcpIHtcblx0aWYoKHBhcmFtcy5jb250ZXh0PT09bnVsbCB8fCBwYXJhbXMuY29udGV4dD09PXVuZGVmaW5lZCkgJiZcblx0XHRcdChjb25maWc9PT1udWxsIHx8IGNvbmZpZy5jb250ZXh0PT09bnVsbCB8fCBjb25maWcuY29udGV4dD09PXVuZGVmaW5lZCkpIHtcblx0XHR0aGlzLmNvbnRleHQgPSBudWxsO1xuXHR9XG59O1xuXG5cbkFUTkNvbmZpZy5wcm90b3R5cGUuaGFzaENvZGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgaGFzaCA9IG5ldyBIYXNoKCk7XG4gICAgdGhpcy51cGRhdGVIYXNoQ29kZShoYXNoKTtcbiAgICByZXR1cm4gaGFzaC5maW5pc2goKTtcbn07XG5cblxuQVROQ29uZmlnLnByb3RvdHlwZS51cGRhdGVIYXNoQ29kZSA9IGZ1bmN0aW9uKGhhc2gpIHtcbiAgICBoYXNoLnVwZGF0ZSh0aGlzLnN0YXRlLnN0YXRlTnVtYmVyLCB0aGlzLmFsdCwgdGhpcy5jb250ZXh0LCB0aGlzLnNlbWFudGljQ29udGV4dCk7XG59O1xuXG4vLyBBbiBBVE4gY29uZmlndXJhdGlvbiBpcyBlcXVhbCB0byBhbm90aGVyIGlmIGJvdGggaGF2ZVxuLy8gIHRoZSBzYW1lIHN0YXRlLCB0aGV5IHByZWRpY3QgdGhlIHNhbWUgYWx0ZXJuYXRpdmUsIGFuZFxuLy8gIHN5bnRhY3RpYy9zZW1hbnRpYyBjb250ZXh0cyBhcmUgdGhlIHNhbWUuXG5cbkFUTkNvbmZpZy5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24ob3RoZXIpIHtcbiAgICBpZiAodGhpcyA9PT0gb3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICghIChvdGhlciBpbnN0YW5jZW9mIEFUTkNvbmZpZykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLnN0YXRlTnVtYmVyPT09b3RoZXIuc3RhdGUuc3RhdGVOdW1iZXIgJiZcbiAgICAgICAgICAgIHRoaXMuYWx0PT09b3RoZXIuYWx0ICYmXG4gICAgICAgICAgICAodGhpcy5jb250ZXh0PT09bnVsbCA/IG90aGVyLmNvbnRleHQ9PT1udWxsIDogdGhpcy5jb250ZXh0LmVxdWFscyhvdGhlci5jb250ZXh0KSkgJiZcbiAgICAgICAgICAgIHRoaXMuc2VtYW50aWNDb250ZXh0LmVxdWFscyhvdGhlci5zZW1hbnRpY0NvbnRleHQpICYmXG4gICAgICAgICAgICB0aGlzLnByZWNlZGVuY2VGaWx0ZXJTdXBwcmVzc2VkPT09b3RoZXIucHJlY2VkZW5jZUZpbHRlclN1cHByZXNzZWQ7XG4gICAgfVxufTtcblxuXG5BVE5Db25maWcucHJvdG90eXBlLmhhc2hDb2RlRm9yQ29uZmlnU2V0ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGhhc2ggPSBuZXcgSGFzaCgpO1xuICAgIGhhc2gudXBkYXRlKHRoaXMuc3RhdGUuc3RhdGVOdW1iZXIsIHRoaXMuYWx0LCB0aGlzLnNlbWFudGljQ29udGV4dCk7XG4gICAgcmV0dXJuIGhhc2guZmluaXNoKCk7XG59O1xuXG5cbkFUTkNvbmZpZy5wcm90b3R5cGUuZXF1YWxzRm9yQ29uZmlnU2V0ID0gZnVuY3Rpb24ob3RoZXIpIHtcbiAgICBpZiAodGhpcyA9PT0gb3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICghIChvdGhlciBpbnN0YW5jZW9mIEFUTkNvbmZpZykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLnN0YXRlTnVtYmVyPT09b3RoZXIuc3RhdGUuc3RhdGVOdW1iZXIgJiZcbiAgICAgICAgICAgIHRoaXMuYWx0PT09b3RoZXIuYWx0ICYmXG4gICAgICAgICAgICB0aGlzLnNlbWFudGljQ29udGV4dC5lcXVhbHMob3RoZXIuc2VtYW50aWNDb250ZXh0KTtcbiAgICB9XG59O1xuXG5cbkFUTkNvbmZpZy5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCIoXCIgKyB0aGlzLnN0YXRlICsgXCIsXCIgKyB0aGlzLmFsdCArXG4gICAgICAgICh0aGlzLmNvbnRleHQhPT1udWxsID8gXCIsW1wiICsgdGhpcy5jb250ZXh0LnRvU3RyaW5nKCkgKyBcIl1cIiA6IFwiXCIpICtcbiAgICAgICAgKHRoaXMuc2VtYW50aWNDb250ZXh0ICE9PSBTZW1hbnRpY0NvbnRleHQuTk9ORSA/XG4gICAgICAgICAgICAgICAgKFwiLFwiICsgdGhpcy5zZW1hbnRpY0NvbnRleHQudG9TdHJpbmcoKSlcbiAgICAgICAgICAgICAgICA6IFwiXCIpICtcbiAgICAgICAgKHRoaXMucmVhY2hlc0ludG9PdXRlckNvbnRleHQ+MCA/XG4gICAgICAgICAgICAgICAgKFwiLHVwPVwiICsgdGhpcy5yZWFjaGVzSW50b091dGVyQ29udGV4dClcbiAgICAgICAgICAgICAgICA6IFwiXCIpICsgXCIpXCI7XG59O1xuXG5cbmZ1bmN0aW9uIExleGVyQVROQ29uZmlnKHBhcmFtcywgY29uZmlnKSB7XG5cdEFUTkNvbmZpZy5jYWxsKHRoaXMsIHBhcmFtcywgY29uZmlnKTtcblxuICAgIC8vIFRoaXMgaXMgdGhlIGJhY2tpbmcgZmllbGQgZm9yIHtAbGluayAvL2dldExleGVyQWN0aW9uRXhlY3V0b3J9LlxuXHR2YXIgbGV4ZXJBY3Rpb25FeGVjdXRvciA9IHBhcmFtcy5sZXhlckFjdGlvbkV4ZWN1dG9yIHx8IG51bGw7XG4gICAgdGhpcy5sZXhlckFjdGlvbkV4ZWN1dG9yID0gbGV4ZXJBY3Rpb25FeGVjdXRvciB8fCAoY29uZmlnIT09bnVsbCA/IGNvbmZpZy5sZXhlckFjdGlvbkV4ZWN1dG9yIDogbnVsbCk7XG4gICAgdGhpcy5wYXNzZWRUaHJvdWdoTm9uR3JlZWR5RGVjaXNpb24gPSBjb25maWchPT1udWxsID8gdGhpcy5jaGVja05vbkdyZWVkeURlY2lzaW9uKGNvbmZpZywgdGhpcy5zdGF0ZSkgOiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuTGV4ZXJBVE5Db25maWcucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBVE5Db25maWcucHJvdG90eXBlKTtcbkxleGVyQVROQ29uZmlnLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExleGVyQVROQ29uZmlnO1xuXG5MZXhlckFUTkNvbmZpZy5wcm90b3R5cGUudXBkYXRlSGFzaENvZGUgPSBmdW5jdGlvbihoYXNoKSB7XG4gICAgaGFzaC51cGRhdGUodGhpcy5zdGF0ZS5zdGF0ZU51bWJlciwgdGhpcy5hbHQsIHRoaXMuY29udGV4dCwgdGhpcy5zZW1hbnRpY0NvbnRleHQsIHRoaXMucGFzc2VkVGhyb3VnaE5vbkdyZWVkeURlY2lzaW9uLCB0aGlzLmxleGVyQWN0aW9uRXhlY3V0b3IpO1xufTtcblxuTGV4ZXJBVE5Db25maWcucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uKG90aGVyKSB7XG4gICAgcmV0dXJuIHRoaXMgPT09IG90aGVyIHx8XG4gICAgICAgICAgICAob3RoZXIgaW5zdGFuY2VvZiBMZXhlckFUTkNvbmZpZyAmJlxuICAgICAgICAgICAgdGhpcy5wYXNzZWRUaHJvdWdoTm9uR3JlZWR5RGVjaXNpb24gPT0gb3RoZXIucGFzc2VkVGhyb3VnaE5vbkdyZWVkeURlY2lzaW9uICYmXG4gICAgICAgICAgICAodGhpcy5sZXhlckFjdGlvbkV4ZWN1dG9yID8gdGhpcy5sZXhlckFjdGlvbkV4ZWN1dG9yLmVxdWFscyhvdGhlci5sZXhlckFjdGlvbkV4ZWN1dG9yKSA6ICFvdGhlci5sZXhlckFjdGlvbkV4ZWN1dG9yKSAmJlxuICAgICAgICAgICAgQVROQ29uZmlnLnByb3RvdHlwZS5lcXVhbHMuY2FsbCh0aGlzLCBvdGhlcikpO1xufTtcblxuTGV4ZXJBVE5Db25maWcucHJvdG90eXBlLmhhc2hDb2RlRm9yQ29uZmlnU2V0ID0gTGV4ZXJBVE5Db25maWcucHJvdG90eXBlLmhhc2hDb2RlO1xuXG5MZXhlckFUTkNvbmZpZy5wcm90b3R5cGUuZXF1YWxzRm9yQ29uZmlnU2V0ID0gTGV4ZXJBVE5Db25maWcucHJvdG90eXBlLmVxdWFscztcblxuXG5MZXhlckFUTkNvbmZpZy5wcm90b3R5cGUuY2hlY2tOb25HcmVlZHlEZWNpc2lvbiA9IGZ1bmN0aW9uKHNvdXJjZSwgdGFyZ2V0KSB7XG4gICAgcmV0dXJuIHNvdXJjZS5wYXNzZWRUaHJvdWdoTm9uR3JlZWR5RGVjaXNpb24gfHxcbiAgICAgICAgKHRhcmdldCBpbnN0YW5jZW9mIERlY2lzaW9uU3RhdGUpICYmIHRhcmdldC5ub25HcmVlZHk7XG59O1xuXG5leHBvcnRzLkFUTkNvbmZpZyA9IEFUTkNvbmZpZztcbmV4cG9ydHMuTGV4ZXJBVE5Db25maWcgPSBMZXhlckFUTkNvbmZpZzsiLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuXG4vL1xuLy8gU3BlY2lhbGl6ZWQge0BsaW5rIFNldH17QGNvZGUgPH17QGxpbmsgQVROQ29uZmlnfXtAY29kZSA+fSB0aGF0IGNhbiB0cmFja1xuLy8gaW5mbyBhYm91dCB0aGUgc2V0LCB3aXRoIHN1cHBvcnQgZm9yIGNvbWJpbmluZyBzaW1pbGFyIGNvbmZpZ3VyYXRpb25zIHVzaW5nIGFcbi8vIGdyYXBoLXN0cnVjdHVyZWQgc3RhY2suXG4vLy9cblxudmFyIEFUTiA9IHJlcXVpcmUoJy4vQVROJykuQVROO1xudmFyIFV0aWxzID0gcmVxdWlyZSgnLi8uLi9VdGlscycpO1xudmFyIEhhc2ggPSBVdGlscy5IYXNoO1xudmFyIFNldCA9IFV0aWxzLlNldDtcbnZhciBTZW1hbnRpY0NvbnRleHQgPSByZXF1aXJlKCcuL1NlbWFudGljQ29udGV4dCcpLlNlbWFudGljQ29udGV4dDtcbnZhciBtZXJnZSA9IHJlcXVpcmUoJy4vLi4vUHJlZGljdGlvbkNvbnRleHQnKS5tZXJnZTtcblxuZnVuY3Rpb24gaGFzaEFUTkNvbmZpZyhjKSB7XG5cdHJldHVybiBjLmhhc2hDb2RlRm9yQ29uZmlnU2V0KCk7XG59XG5cbmZ1bmN0aW9uIGVxdWFsQVROQ29uZmlncyhhLCBiKSB7XG5cdGlmICggYT09PWIgKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSBpZiAoIGE9PT1udWxsIHx8IGI9PT1udWxsICkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBlbHNlXG4gICAgICAgcmV0dXJuIGEuZXF1YWxzRm9yQ29uZmlnU2V0KGIpO1xuIH1cblxuXG5mdW5jdGlvbiBBVE5Db25maWdTZXQoZnVsbEN0eCkge1xuXHQvL1xuXHQvLyBUaGUgcmVhc29uIHRoYXQgd2UgbmVlZCB0aGlzIGlzIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0aGUgaGFzaCBtYXAgdG8gdXNlXG5cdC8vIHRoZSBzdGFuZGFyZCBoYXNoIGNvZGUgYW5kIGVxdWFscy4gV2UgbmVlZCBhbGwgY29uZmlndXJhdGlvbnMgd2l0aCB0aGVcblx0Ly8gc2FtZVxuXHQvLyB7QGNvZGUgKHMsaSxfLHNlbWN0eCl9IHRvIGJlIGVxdWFsLiBVbmZvcnR1bmF0ZWx5LCB0aGlzIGtleSBlZmZlY3RpdmVseVxuXHQvLyBkb3VibGVzXG5cdC8vIHRoZSBudW1iZXIgb2Ygb2JqZWN0cyBhc3NvY2lhdGVkIHdpdGggQVROQ29uZmlncy4gVGhlIG90aGVyIHNvbHV0aW9uIGlzXG5cdC8vIHRvXG5cdC8vIHVzZSBhIGhhc2ggdGFibGUgdGhhdCBsZXRzIHVzIHNwZWNpZnkgdGhlIGVxdWFscy9oYXNoY29kZSBvcGVyYXRpb24uXG5cdC8vIEFsbCBjb25maWdzIGJ1dCBoYXNoZWQgYnkgKHMsIGksIF8sIHBpKSBub3QgaW5jbHVkaW5nIGNvbnRleHQuIFdpcGVkIG91dFxuXHQvLyB3aGVuIHdlIGdvIHJlYWRvbmx5IGFzIHRoaXMgc2V0IGJlY29tZXMgYSBERkEgc3RhdGUuXG5cdHRoaXMuY29uZmlnTG9va3VwID0gbmV3IFNldChoYXNoQVROQ29uZmlnLCBlcXVhbEFUTkNvbmZpZ3MpO1xuXHQvLyBJbmRpY2F0ZXMgdGhhdCB0aGlzIGNvbmZpZ3VyYXRpb24gc2V0IGlzIHBhcnQgb2YgYSBmdWxsIGNvbnRleHRcblx0Ly8gTEwgcHJlZGljdGlvbi4gSXQgd2lsbCBiZSB1c2VkIHRvIGRldGVybWluZSBob3cgdG8gbWVyZ2UgJC4gV2l0aCBTTExcblx0Ly8gaXQncyBhIHdpbGRjYXJkIHdoZXJlYXMgaXQgaXMgbm90IGZvciBMTCBjb250ZXh0IG1lcmdlLlxuXHR0aGlzLmZ1bGxDdHggPSBmdWxsQ3R4ID09PSB1bmRlZmluZWQgPyB0cnVlIDogZnVsbEN0eDtcblx0Ly8gSW5kaWNhdGVzIHRoYXQgdGhlIHNldCBvZiBjb25maWd1cmF0aW9ucyBpcyByZWFkLW9ubHkuIERvIG5vdFxuXHQvLyBhbGxvdyBhbnkgY29kZSB0byBtYW5pcHVsYXRlIHRoZSBzZXQ7IERGQSBzdGF0ZXMgd2lsbCBwb2ludCBhdFxuXHQvLyB0aGUgc2V0cyBhbmQgdGhleSBtdXN0IG5vdCBjaGFuZ2UuIFRoaXMgZG9lcyBub3QgcHJvdGVjdCB0aGUgb3RoZXJcblx0Ly8gZmllbGRzOyBpbiBwYXJ0aWN1bGFyLCBjb25mbGljdGluZ0FsdHMgaXMgc2V0IGFmdGVyXG5cdC8vIHdlJ3ZlIG1hZGUgdGhpcyByZWFkb25seS5cblx0dGhpcy5yZWFkT25seSA9IGZhbHNlO1xuXHQvLyBUcmFjayB0aGUgZWxlbWVudHMgYXMgdGhleSBhcmUgYWRkZWQgdG8gdGhlIHNldDsgc3VwcG9ydHMgZ2V0KGkpLy8vXG5cdHRoaXMuY29uZmlncyA9IFtdO1xuXG5cdC8vIFRPRE86IHRoZXNlIGZpZWxkcyBtYWtlIG1lIHByZXR0eSB1bmNvbWZvcnRhYmxlIGJ1dCBuaWNlIHRvIHBhY2sgdXAgaW5mb1xuXHQvLyB0b2dldGhlciwgc2F2ZXMgcmVjb21wdXRhdGlvblxuXHQvLyBUT0RPOiBjYW4gd2UgdHJhY2sgY29uZmxpY3RzIGFzIHRoZXkgYXJlIGFkZGVkIHRvIHNhdmUgc2Nhbm5pbmcgY29uZmlnc1xuXHQvLyBsYXRlcj9cblx0dGhpcy51bmlxdWVBbHQgPSAwO1xuXHR0aGlzLmNvbmZsaWN0aW5nQWx0cyA9IG51bGw7XG5cblx0Ly8gVXNlZCBpbiBwYXJzZXIgYW5kIGxleGVyLiBJbiBsZXhlciwgaXQgaW5kaWNhdGVzIHdlIGhpdCBhIHByZWRcblx0Ly8gd2hpbGUgY29tcHV0aW5nIGEgY2xvc3VyZSBvcGVyYXRpb24uIERvbid0IG1ha2UgYSBERkEgc3RhdGUgZnJvbSB0aGlzLlxuXHR0aGlzLmhhc1NlbWFudGljQ29udGV4dCA9IGZhbHNlO1xuXHR0aGlzLmRpcHNJbnRvT3V0ZXJDb250ZXh0ID0gZmFsc2U7XG5cblx0dGhpcy5jYWNoZWRIYXNoQ29kZSA9IC0xO1xuXG5cdHJldHVybiB0aGlzO1xufVxuXG4vLyBBZGRpbmcgYSBuZXcgY29uZmlnIG1lYW5zIG1lcmdpbmcgY29udGV4dHMgd2l0aCBleGlzdGluZyBjb25maWdzIGZvclxuLy8ge0Bjb2RlIChzLCBpLCBwaSwgXyl9LCB3aGVyZSB7QGNvZGUgc30gaXMgdGhlXG4vLyB7QGxpbmsgQVROQ29uZmlnLy9zdGF0ZX0sIHtAY29kZSBpfSBpcyB0aGUge0BsaW5rIEFUTkNvbmZpZy8vYWx0fSwgYW5kXG4vLyB7QGNvZGUgcGl9IGlzIHRoZSB7QGxpbmsgQVROQ29uZmlnLy9zZW1hbnRpY0NvbnRleHR9LiBXZSB1c2Vcbi8vIHtAY29kZSAocyxpLHBpKX0gYXMga2V5LlxuLy9cbi8vIDxwPlRoaXMgbWV0aG9kIHVwZGF0ZXMge0BsaW5rIC8vZGlwc0ludG9PdXRlckNvbnRleHR9IGFuZFxuLy8ge0BsaW5rIC8vaGFzU2VtYW50aWNDb250ZXh0fSB3aGVuIG5lY2Vzc2FyeS48L3A+XG4vLyAvXG5BVE5Db25maWdTZXQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKGNvbmZpZywgbWVyZ2VDYWNoZSkge1xuXHRpZiAobWVyZ2VDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0bWVyZ2VDYWNoZSA9IG51bGw7XG5cdH1cblx0aWYgKHRoaXMucmVhZE9ubHkpIHtcblx0XHR0aHJvdyBcIlRoaXMgc2V0IGlzIHJlYWRvbmx5XCI7XG5cdH1cblx0aWYgKGNvbmZpZy5zZW1hbnRpY0NvbnRleHQgIT09IFNlbWFudGljQ29udGV4dC5OT05FKSB7XG5cdFx0dGhpcy5oYXNTZW1hbnRpY0NvbnRleHQgPSB0cnVlO1xuXHR9XG5cdGlmIChjb25maWcucmVhY2hlc0ludG9PdXRlckNvbnRleHQgPiAwKSB7XG5cdFx0dGhpcy5kaXBzSW50b091dGVyQ29udGV4dCA9IHRydWU7XG5cdH1cblx0dmFyIGV4aXN0aW5nID0gdGhpcy5jb25maWdMb29rdXAuYWRkKGNvbmZpZyk7XG5cdGlmIChleGlzdGluZyA9PT0gY29uZmlnKSB7XG5cdFx0dGhpcy5jYWNoZWRIYXNoQ29kZSA9IC0xO1xuXHRcdHRoaXMuY29uZmlncy5wdXNoKGNvbmZpZyk7IC8vIHRyYWNrIG9yZGVyIGhlcmVcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHQvLyBhIHByZXZpb3VzIChzLGkscGksXyksIG1lcmdlIHdpdGggaXQgYW5kIHNhdmUgcmVzdWx0XG5cdHZhciByb290SXNXaWxkY2FyZCA9ICF0aGlzLmZ1bGxDdHg7XG5cdHZhciBtZXJnZWQgPSBtZXJnZShleGlzdGluZy5jb250ZXh0LCBjb25maWcuY29udGV4dCwgcm9vdElzV2lsZGNhcmQsIG1lcmdlQ2FjaGUpO1xuXHQvLyBubyBuZWVkIHRvIGNoZWNrIGZvciBleGlzdGluZy5jb250ZXh0LCBjb25maWcuY29udGV4dCBpbiBjYWNoZVxuXHQvLyBzaW5jZSBvbmx5IHdheSB0byBjcmVhdGUgbmV3IGdyYXBocyBpcyBcImNhbGwgcnVsZVwiIGFuZCBoZXJlLiBXZVxuXHQvLyBjYWNoZSBhdCBib3RoIHBsYWNlcy5cblx0ZXhpc3RpbmcucmVhY2hlc0ludG9PdXRlckNvbnRleHQgPSBNYXRoLm1heCggZXhpc3RpbmcucmVhY2hlc0ludG9PdXRlckNvbnRleHQsIGNvbmZpZy5yZWFjaGVzSW50b091dGVyQ29udGV4dCk7XG5cdC8vIG1ha2Ugc3VyZSB0byBwcmVzZXJ2ZSB0aGUgcHJlY2VkZW5jZSBmaWx0ZXIgc3VwcHJlc3Npb24gZHVyaW5nIHRoZSBtZXJnZVxuXHRpZiAoY29uZmlnLnByZWNlZGVuY2VGaWx0ZXJTdXBwcmVzc2VkKSB7XG5cdFx0ZXhpc3RpbmcucHJlY2VkZW5jZUZpbHRlclN1cHByZXNzZWQgPSB0cnVlO1xuXHR9XG5cdGV4aXN0aW5nLmNvbnRleHQgPSBtZXJnZWQ7IC8vIHJlcGxhY2UgY29udGV4dDsgbm8gbmVlZCB0byBhbHQgbWFwcGluZ1xuXHRyZXR1cm4gdHJ1ZTtcbn07XG5cbkFUTkNvbmZpZ1NldC5wcm90b3R5cGUuZ2V0U3RhdGVzID0gZnVuY3Rpb24oKSB7XG5cdHZhciBzdGF0ZXMgPSBuZXcgU2V0KCk7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb25maWdzLmxlbmd0aDsgaSsrKSB7XG5cdFx0c3RhdGVzLmFkZCh0aGlzLmNvbmZpZ3NbaV0uc3RhdGUpO1xuXHR9XG5cdHJldHVybiBzdGF0ZXM7XG59O1xuXG5BVE5Db25maWdTZXQucHJvdG90eXBlLmdldFByZWRpY2F0ZXMgPSBmdW5jdGlvbigpIHtcblx0dmFyIHByZWRzID0gW107XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb25maWdzLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIGMgPSB0aGlzLmNvbmZpZ3NbaV0uc2VtYW50aWNDb250ZXh0O1xuXHRcdGlmIChjICE9PSBTZW1hbnRpY0NvbnRleHQuTk9ORSkge1xuXHRcdFx0cHJlZHMucHVzaChjLnNlbWFudGljQ29udGV4dCk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBwcmVkcztcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShBVE5Db25maWdTZXQucHJvdG90eXBlLCBcIml0ZW1zXCIsIHtcblx0Z2V0IDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuY29uZmlncztcblx0fVxufSk7XG5cbkFUTkNvbmZpZ1NldC5wcm90b3R5cGUub3B0aW1pemVDb25maWdzID0gZnVuY3Rpb24oaW50ZXJwcmV0ZXIpIHtcblx0aWYgKHRoaXMucmVhZE9ubHkpIHtcblx0XHR0aHJvdyBcIlRoaXMgc2V0IGlzIHJlYWRvbmx5XCI7XG5cdH1cblx0aWYgKHRoaXMuY29uZmlnTG9va3VwLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybjtcblx0fVxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29uZmlncy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBjb25maWcgPSB0aGlzLmNvbmZpZ3NbaV07XG5cdFx0Y29uZmlnLmNvbnRleHQgPSBpbnRlcnByZXRlci5nZXRDYWNoZWRDb250ZXh0KGNvbmZpZy5jb250ZXh0KTtcblx0fVxufTtcblxuQVROQ29uZmlnU2V0LnByb3RvdHlwZS5hZGRBbGwgPSBmdW5jdGlvbihjb2xsKSB7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgY29sbC5sZW5ndGg7IGkrKykge1xuXHRcdHRoaXMuYWRkKGNvbGxbaV0pO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG5cbkFUTkNvbmZpZ1NldC5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24ob3RoZXIpIHtcblx0cmV0dXJuIHRoaXMgPT09IG90aGVyIHx8XG5cdFx0KG90aGVyIGluc3RhbmNlb2YgQVROQ29uZmlnU2V0ICYmXG5cdFx0VXRpbHMuZXF1YWxBcnJheXModGhpcy5jb25maWdzLCBvdGhlci5jb25maWdzKSAmJlxuXHRcdHRoaXMuZnVsbEN0eCA9PT0gb3RoZXIuZnVsbEN0eCAmJlxuXHRcdHRoaXMudW5pcXVlQWx0ID09PSBvdGhlci51bmlxdWVBbHQgJiZcblx0XHR0aGlzLmNvbmZsaWN0aW5nQWx0cyA9PT0gb3RoZXIuY29uZmxpY3RpbmdBbHRzICYmXG5cdFx0dGhpcy5oYXNTZW1hbnRpY0NvbnRleHQgPT09IG90aGVyLmhhc1NlbWFudGljQ29udGV4dCAmJlxuXHRcdHRoaXMuZGlwc0ludG9PdXRlckNvbnRleHQgPT09IG90aGVyLmRpcHNJbnRvT3V0ZXJDb250ZXh0KTtcbn07XG5cbkFUTkNvbmZpZ1NldC5wcm90b3R5cGUuaGFzaENvZGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgaGFzaCA9IG5ldyBIYXNoKCk7XG4gICAgdGhpcy51cGRhdGVIYXNoQ29kZShoYXNoKTtcbiAgICByZXR1cm4gaGFzaC5maW5pc2goKTtcbn07XG5cblxuQVROQ29uZmlnU2V0LnByb3RvdHlwZS51cGRhdGVIYXNoQ29kZSA9IGZ1bmN0aW9uKGhhc2gpIHtcblx0aWYgKHRoaXMucmVhZE9ubHkpIHtcblx0XHRpZiAodGhpcy5jYWNoZWRIYXNoQ29kZSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHZhciBoYXNoID0gbmV3IEhhc2goKTtcbiAgICAgICAgICAgIGhhc2gudXBkYXRlKHRoaXMuY29uZmlncyk7XG5cdFx0XHR0aGlzLmNhY2hlZEhhc2hDb2RlID0gaGFzaC5maW5pc2goKTtcblx0XHR9XG4gICAgICAgIGhhc2gudXBkYXRlKHRoaXMuY2FjaGVkSGFzaENvZGUpO1xuXHR9IGVsc2Uge1xuICAgICAgICBoYXNoLnVwZGF0ZSh0aGlzLmNvbmZpZ3MpO1xuXHR9XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShBVE5Db25maWdTZXQucHJvdG90eXBlLCBcImxlbmd0aFwiLCB7XG5cdGdldCA6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmNvbmZpZ3MubGVuZ3RoO1xuXHR9XG59KTtcblxuQVROQ29uZmlnU2V0LnByb3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLmNvbmZpZ3MubGVuZ3RoID09PSAwO1xufTtcblxuQVROQ29uZmlnU2V0LnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uKGl0ZW0pIHtcblx0aWYgKHRoaXMuY29uZmlnTG9va3VwID09PSBudWxsKSB7XG5cdFx0dGhyb3cgXCJUaGlzIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQgZm9yIHJlYWRvbmx5IHNldHMuXCI7XG5cdH1cblx0cmV0dXJuIHRoaXMuY29uZmlnTG9va3VwLmNvbnRhaW5zKGl0ZW0pO1xufTtcblxuQVROQ29uZmlnU2V0LnByb3RvdHlwZS5jb250YWluc0Zhc3QgPSBmdW5jdGlvbihpdGVtKSB7XG5cdGlmICh0aGlzLmNvbmZpZ0xvb2t1cCA9PT0gbnVsbCkge1xuXHRcdHRocm93IFwiVGhpcyBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkIGZvciByZWFkb25seSBzZXRzLlwiO1xuXHR9XG5cdHJldHVybiB0aGlzLmNvbmZpZ0xvb2t1cC5jb250YWluc0Zhc3QoaXRlbSk7XG59O1xuXG5BVE5Db25maWdTZXQucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oKSB7XG5cdGlmICh0aGlzLnJlYWRPbmx5KSB7XG5cdFx0dGhyb3cgXCJUaGlzIHNldCBpcyByZWFkb25seVwiO1xuXHR9XG5cdHRoaXMuY29uZmlncyA9IFtdO1xuXHR0aGlzLmNhY2hlZEhhc2hDb2RlID0gLTE7XG5cdHRoaXMuY29uZmlnTG9va3VwID0gbmV3IFNldCgpO1xufTtcblxuQVROQ29uZmlnU2V0LnByb3RvdHlwZS5zZXRSZWFkb25seSA9IGZ1bmN0aW9uKHJlYWRPbmx5KSB7XG5cdHRoaXMucmVhZE9ubHkgPSByZWFkT25seTtcblx0aWYgKHJlYWRPbmx5KSB7XG5cdFx0dGhpcy5jb25maWdMb29rdXAgPSBudWxsOyAvLyBjYW4ndCBtb2QsIG5vIG5lZWQgZm9yIGxvb2t1cCBjYWNoZVxuXHR9XG59O1xuXG5BVE5Db25maWdTZXQucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiBVdGlscy5hcnJheVRvU3RyaW5nKHRoaXMuY29uZmlncykgK1xuXHRcdCh0aGlzLmhhc1NlbWFudGljQ29udGV4dCA/IFwiLGhhc1NlbWFudGljQ29udGV4dD1cIiArIHRoaXMuaGFzU2VtYW50aWNDb250ZXh0IDogXCJcIikgK1xuXHRcdCh0aGlzLnVuaXF1ZUFsdCAhPT0gQVROLklOVkFMSURfQUxUX05VTUJFUiA/IFwiLHVuaXF1ZUFsdD1cIiArIHRoaXMudW5pcXVlQWx0IDogXCJcIikgK1xuXHRcdCh0aGlzLmNvbmZsaWN0aW5nQWx0cyAhPT0gbnVsbCA/IFwiLGNvbmZsaWN0aW5nQWx0cz1cIiArIHRoaXMuY29uZmxpY3RpbmdBbHRzIDogXCJcIikgK1xuXHRcdCh0aGlzLmRpcHNJbnRvT3V0ZXJDb250ZXh0ID8gXCIsZGlwc0ludG9PdXRlckNvbnRleHRcIiA6IFwiXCIpO1xufTtcblxuZnVuY3Rpb24gT3JkZXJlZEFUTkNvbmZpZ1NldCgpIHtcblx0QVROQ29uZmlnU2V0LmNhbGwodGhpcyk7XG5cdHRoaXMuY29uZmlnTG9va3VwID0gbmV3IFNldCgpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuT3JkZXJlZEFUTkNvbmZpZ1NldC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFUTkNvbmZpZ1NldC5wcm90b3R5cGUpO1xuT3JkZXJlZEFUTkNvbmZpZ1NldC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBPcmRlcmVkQVROQ29uZmlnU2V0O1xuXG5leHBvcnRzLkFUTkNvbmZpZ1NldCA9IEFUTkNvbmZpZ1NldDtcbmV4cG9ydHMuT3JkZXJlZEFUTkNvbmZpZ1NldCA9IE9yZGVyZWRBVE5Db25maWdTZXQ7XG4iLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG5cbmZ1bmN0aW9uIEFUTkRlc2VyaWFsaXphdGlvbk9wdGlvbnMoY29weUZyb20pIHtcblx0aWYoY29weUZyb209PT11bmRlZmluZWQpIHtcblx0XHRjb3B5RnJvbSA9IG51bGw7XG5cdH1cblx0dGhpcy5yZWFkT25seSA9IGZhbHNlO1xuICAgIHRoaXMudmVyaWZ5QVROID0gY29weUZyb209PT1udWxsID8gdHJ1ZSA6IGNvcHlGcm9tLnZlcmlmeUFUTjtcbiAgICB0aGlzLmdlbmVyYXRlUnVsZUJ5cGFzc1RyYW5zaXRpb25zID0gY29weUZyb209PT1udWxsID8gZmFsc2UgOiBjb3B5RnJvbS5nZW5lcmF0ZVJ1bGVCeXBhc3NUcmFuc2l0aW9ucztcblxuICAgIHJldHVybiB0aGlzO1xufVxuXG5BVE5EZXNlcmlhbGl6YXRpb25PcHRpb25zLmRlZmF1bHRPcHRpb25zID0gbmV3IEFUTkRlc2VyaWFsaXphdGlvbk9wdGlvbnMoKTtcbkFUTkRlc2VyaWFsaXphdGlvbk9wdGlvbnMuZGVmYXVsdE9wdGlvbnMucmVhZE9ubHkgPSB0cnVlO1xuXG4vLyAgICBkZWYgX19zZXRhdHRyX18oc2VsZiwga2V5LCB2YWx1ZSk6XG4vLyAgICAgICAgaWYga2V5IT1cInJlYWRPbmx5XCIgYW5kIHNlbGYucmVhZE9ubHk6XG4vLyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbihcIlRoZSBvYmplY3QgaXMgcmVhZCBvbmx5LlwiKVxuLy8gICAgICAgIHN1cGVyKHR5cGUoc2VsZiksIHNlbGYpLl9fc2V0YXR0cl9fKGtleSx2YWx1ZSlcblxuZXhwb3J0cy5BVE5EZXNlcmlhbGl6YXRpb25PcHRpb25zID0gQVRORGVzZXJpYWxpemF0aW9uT3B0aW9ucztcbiIsIi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cblxudmFyIFRva2VuID0gcmVxdWlyZSgnLi8uLi9Ub2tlbicpLlRva2VuO1xudmFyIEFUTiA9IHJlcXVpcmUoJy4vQVROJykuQVROO1xudmFyIEFUTlR5cGUgPSByZXF1aXJlKCcuL0FUTlR5cGUnKS5BVE5UeXBlO1xudmFyIEFUTlN0YXRlcyA9IHJlcXVpcmUoJy4vQVROU3RhdGUnKTtcbnZhciBBVE5TdGF0ZSA9IEFUTlN0YXRlcy5BVE5TdGF0ZTtcbnZhciBCYXNpY1N0YXRlID0gQVROU3RhdGVzLkJhc2ljU3RhdGU7XG52YXIgRGVjaXNpb25TdGF0ZSA9IEFUTlN0YXRlcy5EZWNpc2lvblN0YXRlO1xudmFyIEJsb2NrU3RhcnRTdGF0ZSA9IEFUTlN0YXRlcy5CbG9ja1N0YXJ0U3RhdGU7XG52YXIgQmxvY2tFbmRTdGF0ZSA9IEFUTlN0YXRlcy5CbG9ja0VuZFN0YXRlO1xudmFyIExvb3BFbmRTdGF0ZSA9IEFUTlN0YXRlcy5Mb29wRW5kU3RhdGU7XG52YXIgUnVsZVN0YXJ0U3RhdGUgPSBBVE5TdGF0ZXMuUnVsZVN0YXJ0U3RhdGU7XG52YXIgUnVsZVN0b3BTdGF0ZSA9IEFUTlN0YXRlcy5SdWxlU3RvcFN0YXRlO1xudmFyIFRva2Vuc1N0YXJ0U3RhdGUgPSBBVE5TdGF0ZXMuVG9rZW5zU3RhcnRTdGF0ZTtcbnZhciBQbHVzTG9vcGJhY2tTdGF0ZSA9IEFUTlN0YXRlcy5QbHVzTG9vcGJhY2tTdGF0ZTtcbnZhciBTdGFyTG9vcGJhY2tTdGF0ZSA9IEFUTlN0YXRlcy5TdGFyTG9vcGJhY2tTdGF0ZTtcbnZhciBTdGFyTG9vcEVudHJ5U3RhdGUgPSBBVE5TdGF0ZXMuU3Rhckxvb3BFbnRyeVN0YXRlO1xudmFyIFBsdXNCbG9ja1N0YXJ0U3RhdGUgPSBBVE5TdGF0ZXMuUGx1c0Jsb2NrU3RhcnRTdGF0ZTtcbnZhciBTdGFyQmxvY2tTdGFydFN0YXRlID0gQVROU3RhdGVzLlN0YXJCbG9ja1N0YXJ0U3RhdGU7XG52YXIgQmFzaWNCbG9ja1N0YXJ0U3RhdGUgPSBBVE5TdGF0ZXMuQmFzaWNCbG9ja1N0YXJ0U3RhdGU7XG52YXIgVHJhbnNpdGlvbnMgPSByZXF1aXJlKCcuL1RyYW5zaXRpb24nKTtcbnZhciBUcmFuc2l0aW9uID0gVHJhbnNpdGlvbnMuVHJhbnNpdGlvbjtcbnZhciBBdG9tVHJhbnNpdGlvbiA9IFRyYW5zaXRpb25zLkF0b21UcmFuc2l0aW9uO1xudmFyIFNldFRyYW5zaXRpb24gPSBUcmFuc2l0aW9ucy5TZXRUcmFuc2l0aW9uO1xudmFyIE5vdFNldFRyYW5zaXRpb24gPSBUcmFuc2l0aW9ucy5Ob3RTZXRUcmFuc2l0aW9uO1xudmFyIFJ1bGVUcmFuc2l0aW9uID0gVHJhbnNpdGlvbnMuUnVsZVRyYW5zaXRpb247XG52YXIgUmFuZ2VUcmFuc2l0aW9uID0gVHJhbnNpdGlvbnMuUmFuZ2VUcmFuc2l0aW9uO1xudmFyIEFjdGlvblRyYW5zaXRpb24gPSBUcmFuc2l0aW9ucy5BY3Rpb25UcmFuc2l0aW9uO1xudmFyIEVwc2lsb25UcmFuc2l0aW9uID0gVHJhbnNpdGlvbnMuRXBzaWxvblRyYW5zaXRpb247XG52YXIgV2lsZGNhcmRUcmFuc2l0aW9uID0gVHJhbnNpdGlvbnMuV2lsZGNhcmRUcmFuc2l0aW9uO1xudmFyIFByZWRpY2F0ZVRyYW5zaXRpb24gPSBUcmFuc2l0aW9ucy5QcmVkaWNhdGVUcmFuc2l0aW9uO1xudmFyIFByZWNlZGVuY2VQcmVkaWNhdGVUcmFuc2l0aW9uID0gVHJhbnNpdGlvbnMuUHJlY2VkZW5jZVByZWRpY2F0ZVRyYW5zaXRpb247XG52YXIgSW50ZXJ2YWxTZXQgPSByZXF1aXJlKCcuLy4uL0ludGVydmFsU2V0JykuSW50ZXJ2YWxTZXQ7XG52YXIgSW50ZXJ2YWwgPSByZXF1aXJlKCcuLy4uL0ludGVydmFsU2V0JykuSW50ZXJ2YWw7XG52YXIgQVRORGVzZXJpYWxpemF0aW9uT3B0aW9ucyA9IHJlcXVpcmUoJy4vQVRORGVzZXJpYWxpemF0aW9uT3B0aW9ucycpLkFUTkRlc2VyaWFsaXphdGlvbk9wdGlvbnM7XG52YXIgTGV4ZXJBY3Rpb25zID0gcmVxdWlyZSgnLi9MZXhlckFjdGlvbicpO1xudmFyIExleGVyQWN0aW9uVHlwZSA9IExleGVyQWN0aW9ucy5MZXhlckFjdGlvblR5cGU7XG52YXIgTGV4ZXJTa2lwQWN0aW9uID0gTGV4ZXJBY3Rpb25zLkxleGVyU2tpcEFjdGlvbjtcbnZhciBMZXhlckNoYW5uZWxBY3Rpb24gPSBMZXhlckFjdGlvbnMuTGV4ZXJDaGFubmVsQWN0aW9uO1xudmFyIExleGVyQ3VzdG9tQWN0aW9uID0gTGV4ZXJBY3Rpb25zLkxleGVyQ3VzdG9tQWN0aW9uO1xudmFyIExleGVyTW9yZUFjdGlvbiA9IExleGVyQWN0aW9ucy5MZXhlck1vcmVBY3Rpb247XG52YXIgTGV4ZXJUeXBlQWN0aW9uID0gTGV4ZXJBY3Rpb25zLkxleGVyVHlwZUFjdGlvbjtcbnZhciBMZXhlclB1c2hNb2RlQWN0aW9uID0gTGV4ZXJBY3Rpb25zLkxleGVyUHVzaE1vZGVBY3Rpb247XG52YXIgTGV4ZXJQb3BNb2RlQWN0aW9uID0gTGV4ZXJBY3Rpb25zLkxleGVyUG9wTW9kZUFjdGlvbjtcbnZhciBMZXhlck1vZGVBY3Rpb24gPSBMZXhlckFjdGlvbnMuTGV4ZXJNb2RlQWN0aW9uO1xuLy8gVGhpcyBpcyB0aGUgZWFybGllc3Qgc3VwcG9ydGVkIHNlcmlhbGl6ZWQgVVVJRC5cbi8vIHN0aWNrIHRvIHNlcmlhbGl6ZWQgdmVyc2lvbiBmb3Igbm93LCB3ZSBkb24ndCBuZWVkIGEgVVVJRCBpbnN0YW5jZVxudmFyIEJBU0VfU0VSSUFMSVpFRF9VVUlEID0gXCJBQURCOEQ3RS1BRUVGLTQ0MTUtQUQyQi04MjA0RDZDRjA0MkVcIjtcblxuLy9cbi8vIFRoaXMgVVVJRCBpbmRpY2F0ZXMgdGhlIHNlcmlhbGl6ZWQgQVROIGNvbnRhaW5zIHR3byBzZXRzIG9mXG4vLyBJbnRlcnZhbFNldHMsIHdoZXJlIHRoZSBzZWNvbmQgc2V0J3MgdmFsdWVzIGFyZSBlbmNvZGVkIGFzXG4vLyAzMi1iaXQgaW50ZWdlcnMgdG8gc3VwcG9ydCB0aGUgZnVsbCBVbmljb2RlIFNNUCByYW5nZSB1cCB0byBVKzEwRkZGRi5cbi8vXG52YXIgQURERURfVU5JQ09ERV9TTVAgPSBcIjU5NjI3Nzg0LTNCRTUtNDE3QS1COUVCLTgxMzFBNzI4NjA4OVwiO1xuXG4vLyBUaGlzIGxpc3QgY29udGFpbnMgYWxsIG9mIHRoZSBjdXJyZW50bHkgc3VwcG9ydGVkIFVVSURzLCBvcmRlcmVkIGJ5IHdoZW5cbi8vIHRoZSBmZWF0dXJlIGZpcnN0IGFwcGVhcmVkIGluIHRoaXMgYnJhbmNoLlxudmFyIFNVUFBPUlRFRF9VVUlEUyA9IFsgQkFTRV9TRVJJQUxJWkVEX1VVSUQsIEFEREVEX1VOSUNPREVfU01QIF07XG5cbnZhciBTRVJJQUxJWkVEX1ZFUlNJT04gPSAzO1xuXG4vLyBUaGlzIGlzIHRoZSBjdXJyZW50IHNlcmlhbGl6ZWQgVVVJRC5cbnZhciBTRVJJQUxJWkVEX1VVSUQgPSBBRERFRF9VTklDT0RFX1NNUDtcblxuZnVuY3Rpb24gaW5pdEFycmF5KCBsZW5ndGgsIHZhbHVlKSB7XG5cdHZhciB0bXAgPSBbXTtcblx0dG1wW2xlbmd0aC0xXSA9IHZhbHVlO1xuXHRyZXR1cm4gdG1wLm1hcChmdW5jdGlvbihpKSB7cmV0dXJuIHZhbHVlO30pO1xufVxuXG5mdW5jdGlvbiBBVE5EZXNlcmlhbGl6ZXIgKG9wdGlvbnMpIHtcblxuICAgIGlmICggb3B0aW9ucz09PSB1bmRlZmluZWQgfHwgb3B0aW9ucyA9PT0gbnVsbCApIHtcbiAgICAgICAgb3B0aW9ucyA9IEFUTkRlc2VyaWFsaXphdGlvbk9wdGlvbnMuZGVmYXVsdE9wdGlvbnM7XG4gICAgfVxuICAgIHRoaXMuZGVzZXJpYWxpemF0aW9uT3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5zdGF0ZUZhY3RvcmllcyA9IG51bGw7XG4gICAgdGhpcy5hY3Rpb25GYWN0b3JpZXMgPSBudWxsO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbi8vIERldGVybWluZXMgaWYgYSBwYXJ0aWN1bGFyIHNlcmlhbGl6ZWQgcmVwcmVzZW50YXRpb24gb2YgYW4gQVROIHN1cHBvcnRzXG4vLyBhIHBhcnRpY3VsYXIgZmVhdHVyZSwgaWRlbnRpZmllZCBieSB0aGUge0BsaW5rIFVVSUR9IHVzZWQgZm9yIHNlcmlhbGl6aW5nXG4vLyB0aGUgQVROIGF0IHRoZSB0aW1lIHRoZSBmZWF0dXJlIHdhcyBmaXJzdCBpbnRyb2R1Y2VkLlxuLy9cbi8vIEBwYXJhbSBmZWF0dXJlIFRoZSB7QGxpbmsgVVVJRH0gbWFya2luZyB0aGUgZmlyc3QgdGltZSB0aGUgZmVhdHVyZSB3YXNcbi8vIHN1cHBvcnRlZCBpbiB0aGUgc2VyaWFsaXplZCBBVE4uXG4vLyBAcGFyYW0gYWN0dWFsVXVpZCBUaGUge0BsaW5rIFVVSUR9IG9mIHRoZSBhY3R1YWwgc2VyaWFsaXplZCBBVE4gd2hpY2ggaXNcbi8vIGN1cnJlbnRseSBiZWluZyBkZXNlcmlhbGl6ZWQuXG4vLyBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiB0aGUge0Bjb2RlIGFjdHVhbFV1aWR9IHZhbHVlIHJlcHJlc2VudHMgYVxuLy8gc2VyaWFsaXplZCBBVE4gYXQgb3IgYWZ0ZXIgdGhlIGZlYXR1cmUgaWRlbnRpZmllZCBieSB7QGNvZGUgZmVhdHVyZX0gd2FzXG4vLyBpbnRyb2R1Y2VkOyBvdGhlcndpc2UsIHtAY29kZSBmYWxzZX0uXG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUuaXNGZWF0dXJlU3VwcG9ydGVkID0gZnVuY3Rpb24oZmVhdHVyZSwgYWN0dWFsVXVpZCkge1xuICAgIHZhciBpZHgxID0gU1VQUE9SVEVEX1VVSURTLmluZGV4T2YoZmVhdHVyZSk7XG4gICAgaWYgKGlkeDE8MCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHZhciBpZHgyID0gU1VQUE9SVEVEX1VVSURTLmluZGV4T2YoYWN0dWFsVXVpZCk7XG4gICAgcmV0dXJuIGlkeDIgPj0gaWR4MTtcbn07XG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUuZGVzZXJpYWxpemUgPSBmdW5jdGlvbihkYXRhKSB7XG4gICAgdGhpcy5yZXNldChkYXRhKTtcbiAgICB0aGlzLmNoZWNrVmVyc2lvbigpO1xuICAgIHRoaXMuY2hlY2tVVUlEKCk7XG4gICAgdmFyIGF0biA9IHRoaXMucmVhZEFUTigpO1xuICAgIHRoaXMucmVhZFN0YXRlcyhhdG4pO1xuICAgIHRoaXMucmVhZFJ1bGVzKGF0bik7XG4gICAgdGhpcy5yZWFkTW9kZXMoYXRuKTtcbiAgICB2YXIgc2V0cyA9IFtdO1xuICAgIC8vIEZpcnN0LCBkZXNlcmlhbGl6ZSBzZXRzIHdpdGggMTYtYml0IGFyZ3VtZW50cyA8PSBVK0ZGRkYuXG4gICAgdGhpcy5yZWFkU2V0cyhhdG4sIHNldHMsIHRoaXMucmVhZEludC5iaW5kKHRoaXMpKTtcbiAgICAvLyBOZXh0LCBpZiB0aGUgQVROIHdhcyBzZXJpYWxpemVkIHdpdGggdGhlIFVuaWNvZGUgU01QIGZlYXR1cmUsXG4gICAgLy8gZGVzZXJpYWxpemUgc2V0cyB3aXRoIDMyLWJpdCBhcmd1bWVudHMgPD0gVSsxMEZGRkYuXG4gICAgaWYgKHRoaXMuaXNGZWF0dXJlU3VwcG9ydGVkKEFEREVEX1VOSUNPREVfU01QLCB0aGlzLnV1aWQpKSB7XG4gICAgICAgIHRoaXMucmVhZFNldHMoYXRuLCBzZXRzLCB0aGlzLnJlYWRJbnQzMi5iaW5kKHRoaXMpKTtcbiAgICB9XG4gICAgdGhpcy5yZWFkRWRnZXMoYXRuLCBzZXRzKTtcbiAgICB0aGlzLnJlYWREZWNpc2lvbnMoYXRuKTtcbiAgICB0aGlzLnJlYWRMZXhlckFjdGlvbnMoYXRuKTtcbiAgICB0aGlzLm1hcmtQcmVjZWRlbmNlRGVjaXNpb25zKGF0bik7XG4gICAgdGhpcy52ZXJpZnlBVE4oYXRuKTtcbiAgICBpZiAodGhpcy5kZXNlcmlhbGl6YXRpb25PcHRpb25zLmdlbmVyYXRlUnVsZUJ5cGFzc1RyYW5zaXRpb25zICYmIGF0bi5ncmFtbWFyVHlwZSA9PT0gQVROVHlwZS5QQVJTRVIgKSB7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVSdWxlQnlwYXNzVHJhbnNpdGlvbnMoYXRuKTtcbiAgICAgICAgLy8gcmUtdmVyaWZ5IGFmdGVyIG1vZGlmaWNhdGlvblxuICAgICAgICB0aGlzLnZlcmlmeUFUTihhdG4pO1xuICAgIH1cbiAgICByZXR1cm4gYXRuO1xufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKGRhdGEpIHtcblx0dmFyIGFkanVzdCA9IGZ1bmN0aW9uKGMpIHtcbiAgICAgICAgdmFyIHYgPSBjLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgIHJldHVybiB2PjEgID8gdi0yIDogdiArIDY1NTMzO1xuXHR9O1xuICAgIHZhciB0ZW1wID0gZGF0YS5zcGxpdChcIlwiKS5tYXAoYWRqdXN0KTtcbiAgICAvLyBkb24ndCBhZGp1c3QgdGhlIGZpcnN0IHZhbHVlIHNpbmNlIHRoYXQncyB0aGUgdmVyc2lvbiBudW1iZXJcbiAgICB0ZW1wWzBdID0gZGF0YS5jaGFyQ29kZUF0KDApO1xuICAgIHRoaXMuZGF0YSA9IHRlbXA7XG4gICAgdGhpcy5wb3MgPSAwO1xufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5jaGVja1ZlcnNpb24gPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgdmVyc2lvbiA9IHRoaXMucmVhZEludCgpO1xuICAgIGlmICggdmVyc2lvbiAhPT0gU0VSSUFMSVpFRF9WRVJTSU9OICkge1xuICAgICAgICB0aHJvdyAoXCJDb3VsZCBub3QgZGVzZXJpYWxpemUgQVROIHdpdGggdmVyc2lvbiBcIiArIHZlcnNpb24gKyBcIiAoZXhwZWN0ZWQgXCIgKyBTRVJJQUxJWkVEX1ZFUlNJT04gKyBcIikuXCIpO1xuICAgIH1cbn07XG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUuY2hlY2tVVUlEID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHV1aWQgPSB0aGlzLnJlYWRVVUlEKCk7XG4gICAgaWYgKFNVUFBPUlRFRF9VVUlEUy5pbmRleE9mKHV1aWQpPDApIHtcbiAgICAgICAgdGhyb3cgKFwiQ291bGQgbm90IGRlc2VyaWFsaXplIEFUTiB3aXRoIFVVSUQ6IFwiICsgdXVpZCArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiAoZXhwZWN0ZWQgXCIgKyBTRVJJQUxJWkVEX1VVSUQgKyBcIiBvciBhIGxlZ2FjeSBVVUlEKS5cIiwgdXVpZCwgU0VSSUFMSVpFRF9VVUlEKTtcbiAgICB9XG4gICAgdGhpcy51dWlkID0gdXVpZDtcbn07XG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUucmVhZEFUTiA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBncmFtbWFyVHlwZSA9IHRoaXMucmVhZEludCgpO1xuICAgIHZhciBtYXhUb2tlblR5cGUgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICByZXR1cm4gbmV3IEFUTihncmFtbWFyVHlwZSwgbWF4VG9rZW5UeXBlKTtcbn07XG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUucmVhZFN0YXRlcyA9IGZ1bmN0aW9uKGF0bikge1xuXHR2YXIgaiwgcGFpciwgc3RhdGVOdW1iZXI7XG4gICAgdmFyIGxvb3BCYWNrU3RhdGVOdW1iZXJzID0gW107XG4gICAgdmFyIGVuZFN0YXRlTnVtYmVycyA9IFtdO1xuICAgIHZhciBuc3RhdGVzID0gdGhpcy5yZWFkSW50KCk7XG4gICAgZm9yKHZhciBpPTA7IGk8bnN0YXRlczsgaSsrKSB7XG4gICAgICAgIHZhciBzdHlwZSA9IHRoaXMucmVhZEludCgpO1xuICAgICAgICAvLyBpZ25vcmUgYmFkIHR5cGUgb2Ygc3RhdGVzXG4gICAgICAgIGlmIChzdHlwZT09PUFUTlN0YXRlLklOVkFMSURfVFlQRSkge1xuICAgICAgICAgICAgYXRuLmFkZFN0YXRlKG51bGwpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJ1bGVJbmRleCA9IHRoaXMucmVhZEludCgpO1xuICAgICAgICBpZiAocnVsZUluZGV4ID09PSAweEZGRkYpIHtcbiAgICAgICAgICAgIHJ1bGVJbmRleCA9IC0xO1xuICAgICAgICB9XG4gICAgICAgIHZhciBzID0gdGhpcy5zdGF0ZUZhY3Rvcnkoc3R5cGUsIHJ1bGVJbmRleCk7XG4gICAgICAgIGlmIChzdHlwZSA9PT0gQVROU3RhdGUuTE9PUF9FTkQpIHsgLy8gc3BlY2lhbCBjYXNlXG4gICAgICAgICAgICB2YXIgbG9vcEJhY2tTdGF0ZU51bWJlciA9IHRoaXMucmVhZEludCgpO1xuICAgICAgICAgICAgbG9vcEJhY2tTdGF0ZU51bWJlcnMucHVzaChbcywgbG9vcEJhY2tTdGF0ZU51bWJlcl0pO1xuICAgICAgICB9IGVsc2UgaWYocyBpbnN0YW5jZW9mIEJsb2NrU3RhcnRTdGF0ZSkge1xuICAgICAgICAgICAgdmFyIGVuZFN0YXRlTnVtYmVyID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgICAgICBlbmRTdGF0ZU51bWJlcnMucHVzaChbcywgZW5kU3RhdGVOdW1iZXJdKTtcbiAgICAgICAgfVxuICAgICAgICBhdG4uYWRkU3RhdGUocyk7XG4gICAgfVxuICAgIC8vIGRlbGF5IHRoZSBhc3NpZ25tZW50IG9mIGxvb3AgYmFjayBhbmQgZW5kIHN0YXRlcyB1bnRpbCB3ZSBrbm93IGFsbCB0aGVcblx0Ly8gc3RhdGUgaW5zdGFuY2VzIGhhdmUgYmVlbiBpbml0aWFsaXplZFxuICAgIGZvciAoaj0wOyBqPGxvb3BCYWNrU3RhdGVOdW1iZXJzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHBhaXIgPSBsb29wQmFja1N0YXRlTnVtYmVyc1tqXTtcbiAgICAgICAgcGFpclswXS5sb29wQmFja1N0YXRlID0gYXRuLnN0YXRlc1twYWlyWzFdXTtcbiAgICB9XG5cbiAgICBmb3IgKGo9MDsgajxlbmRTdGF0ZU51bWJlcnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgcGFpciA9IGVuZFN0YXRlTnVtYmVyc1tqXTtcbiAgICAgICAgcGFpclswXS5lbmRTdGF0ZSA9IGF0bi5zdGF0ZXNbcGFpclsxXV07XG4gICAgfVxuXG4gICAgdmFyIG51bU5vbkdyZWVkeVN0YXRlcyA9IHRoaXMucmVhZEludCgpO1xuICAgIGZvciAoaj0wOyBqPG51bU5vbkdyZWVkeVN0YXRlczsgaisrKSB7XG4gICAgICAgIHN0YXRlTnVtYmVyID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgIGF0bi5zdGF0ZXNbc3RhdGVOdW1iZXJdLm5vbkdyZWVkeSA9IHRydWU7XG4gICAgfVxuXG4gICAgdmFyIG51bVByZWNlZGVuY2VTdGF0ZXMgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICBmb3IgKGo9MDsgajxudW1QcmVjZWRlbmNlU3RhdGVzOyBqKyspIHtcbiAgICAgICAgc3RhdGVOdW1iZXIgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICAgICAgYXRuLnN0YXRlc1tzdGF0ZU51bWJlcl0uaXNQcmVjZWRlbmNlUnVsZSA9IHRydWU7XG4gICAgfVxufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5yZWFkUnVsZXMgPSBmdW5jdGlvbihhdG4pIHtcbiAgICB2YXIgaTtcbiAgICB2YXIgbnJ1bGVzID0gdGhpcy5yZWFkSW50KCk7XG4gICAgaWYgKGF0bi5ncmFtbWFyVHlwZSA9PT0gQVROVHlwZS5MRVhFUiApIHtcbiAgICAgICAgYXRuLnJ1bGVUb1Rva2VuVHlwZSA9IGluaXRBcnJheShucnVsZXMsIDApO1xuICAgIH1cbiAgICBhdG4ucnVsZVRvU3RhcnRTdGF0ZSA9IGluaXRBcnJheShucnVsZXMsIDApO1xuICAgIGZvciAoaT0wOyBpPG5ydWxlczsgaSsrKSB7XG4gICAgICAgIHZhciBzID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgIHZhciBzdGFydFN0YXRlID0gYXRuLnN0YXRlc1tzXTtcbiAgICAgICAgYXRuLnJ1bGVUb1N0YXJ0U3RhdGVbaV0gPSBzdGFydFN0YXRlO1xuICAgICAgICBpZiAoIGF0bi5ncmFtbWFyVHlwZSA9PT0gQVROVHlwZS5MRVhFUiApIHtcbiAgICAgICAgICAgIHZhciB0b2tlblR5cGUgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICAgICAgICAgIGlmICh0b2tlblR5cGUgPT09IDB4RkZGRikge1xuICAgICAgICAgICAgICAgIHRva2VuVHlwZSA9IFRva2VuLkVPRjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF0bi5ydWxlVG9Ub2tlblR5cGVbaV0gPSB0b2tlblR5cGU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXRuLnJ1bGVUb1N0b3BTdGF0ZSA9IGluaXRBcnJheShucnVsZXMsIDApO1xuICAgIGZvciAoaT0wOyBpPGF0bi5zdGF0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHN0YXRlID0gYXRuLnN0YXRlc1tpXTtcbiAgICAgICAgaWYgKCEoc3RhdGUgaW5zdGFuY2VvZiBSdWxlU3RvcFN0YXRlKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgYXRuLnJ1bGVUb1N0b3BTdGF0ZVtzdGF0ZS5ydWxlSW5kZXhdID0gc3RhdGU7XG4gICAgICAgIGF0bi5ydWxlVG9TdGFydFN0YXRlW3N0YXRlLnJ1bGVJbmRleF0uc3RvcFN0YXRlID0gc3RhdGU7XG4gICAgfVxufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5yZWFkTW9kZXMgPSBmdW5jdGlvbihhdG4pIHtcbiAgICB2YXIgbm1vZGVzID0gdGhpcy5yZWFkSW50KCk7XG4gICAgZm9yICh2YXIgaT0wOyBpPG5tb2RlczsgaSsrKSB7XG4gICAgICAgIHZhciBzID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgIGF0bi5tb2RlVG9TdGFydFN0YXRlLnB1c2goYXRuLnN0YXRlc1tzXSk7XG4gICAgfVxufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5yZWFkU2V0cyA9IGZ1bmN0aW9uKGF0biwgc2V0cywgcmVhZFVuaWNvZGUpIHtcbiAgICB2YXIgbSA9IHRoaXMucmVhZEludCgpO1xuICAgIGZvciAodmFyIGk9MDsgaTxtOyBpKyspIHtcbiAgICAgICAgdmFyIGlzZXQgPSBuZXcgSW50ZXJ2YWxTZXQoKTtcbiAgICAgICAgc2V0cy5wdXNoKGlzZXQpO1xuICAgICAgICB2YXIgbiA9IHRoaXMucmVhZEludCgpO1xuICAgICAgICB2YXIgY29udGFpbnNFb2YgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICAgICAgaWYgKGNvbnRhaW5zRW9mIT09MCkge1xuICAgICAgICAgICAgaXNldC5hZGRPbmUoLTEpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGo9MDsgajxuOyBqKyspIHtcbiAgICAgICAgICAgIHZhciBpMSA9IHJlYWRVbmljb2RlKCk7XG4gICAgICAgICAgICB2YXIgaTIgPSByZWFkVW5pY29kZSgpO1xuICAgICAgICAgICAgaXNldC5hZGRSYW5nZShpMSwgaTIpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5yZWFkRWRnZXMgPSBmdW5jdGlvbihhdG4sIHNldHMpIHtcblx0dmFyIGksIGosIHN0YXRlLCB0cmFucywgdGFyZ2V0O1xuICAgIHZhciBuZWRnZXMgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICBmb3IgKGk9MDsgaTxuZWRnZXM7IGkrKykge1xuICAgICAgICB2YXIgc3JjID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgIHZhciB0cmcgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICAgICAgdmFyIHR0eXBlID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgIHZhciBhcmcxID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgIHZhciBhcmcyID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgIHZhciBhcmczID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgIHRyYW5zID0gdGhpcy5lZGdlRmFjdG9yeShhdG4sIHR0eXBlLCBzcmMsIHRyZywgYXJnMSwgYXJnMiwgYXJnMywgc2V0cyk7XG4gICAgICAgIHZhciBzcmNTdGF0ZSA9IGF0bi5zdGF0ZXNbc3JjXTtcbiAgICAgICAgc3JjU3RhdGUuYWRkVHJhbnNpdGlvbih0cmFucyk7XG4gICAgfVxuICAgIC8vIGVkZ2VzIGZvciBydWxlIHN0b3Agc3RhdGVzIGNhbiBiZSBkZXJpdmVkLCBzbyB0aGV5IGFyZW4ndCBzZXJpYWxpemVkXG4gICAgZm9yIChpPTA7IGk8YXRuLnN0YXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBzdGF0ZSA9IGF0bi5zdGF0ZXNbaV07XG4gICAgICAgIGZvciAoaj0wOyBqPHN0YXRlLnRyYW5zaXRpb25zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICB2YXIgdCA9IHN0YXRlLnRyYW5zaXRpb25zW2pdO1xuICAgICAgICAgICAgaWYgKCEodCBpbnN0YW5jZW9mIFJ1bGVUcmFuc2l0aW9uKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXHRcdFx0dmFyIG91dGVybW9zdFByZWNlZGVuY2VSZXR1cm4gPSAtMTtcblx0XHRcdGlmIChhdG4ucnVsZVRvU3RhcnRTdGF0ZVt0LnRhcmdldC5ydWxlSW5kZXhdLmlzUHJlY2VkZW5jZVJ1bGUpIHtcblx0XHRcdFx0aWYgKHQucHJlY2VkZW5jZSA9PT0gMCkge1xuXHRcdFx0XHRcdG91dGVybW9zdFByZWNlZGVuY2VSZXR1cm4gPSB0LnRhcmdldC5ydWxlSW5kZXg7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0dHJhbnMgPSBuZXcgRXBzaWxvblRyYW5zaXRpb24odC5mb2xsb3dTdGF0ZSwgb3V0ZXJtb3N0UHJlY2VkZW5jZVJldHVybik7XG4gICAgICAgICAgICBhdG4ucnVsZVRvU3RvcFN0YXRlW3QudGFyZ2V0LnJ1bGVJbmRleF0uYWRkVHJhbnNpdGlvbih0cmFucyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGk9MDsgaTxhdG4uc3RhdGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHN0YXRlID0gYXRuLnN0YXRlc1tpXTtcbiAgICAgICAgaWYgKHN0YXRlIGluc3RhbmNlb2YgQmxvY2tTdGFydFN0YXRlKSB7XG4gICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIGtub3cgdGhlIGVuZCBzdGF0ZSB0byBzZXQgaXRzIHN0YXJ0IHN0YXRlXG4gICAgICAgICAgICBpZiAoc3RhdGUuZW5kU3RhdGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyAoXCJJbGxlZ2FsU3RhdGVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBibG9jayBlbmQgc3RhdGVzIGNhbiBvbmx5IGJlIGFzc29jaWF0ZWQgdG8gYSBzaW5nbGUgYmxvY2sgc3RhcnRcblx0XHRcdC8vIHN0YXRlXG4gICAgICAgICAgICBpZiAoIHN0YXRlLmVuZFN0YXRlLnN0YXJ0U3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyAoXCJJbGxlZ2FsU3RhdGVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGF0ZS5lbmRTdGF0ZS5zdGFydFN0YXRlID0gc3RhdGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXRlIGluc3RhbmNlb2YgUGx1c0xvb3BiYWNrU3RhdGUpIHtcbiAgICAgICAgICAgIGZvciAoaj0wOyBqPHN0YXRlLnRyYW5zaXRpb25zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gc3RhdGUudHJhbnNpdGlvbnNbal0udGFyZ2V0O1xuICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBQbHVzQmxvY2tTdGFydFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5sb29wQmFja1N0YXRlID0gc3RhdGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHN0YXRlIGluc3RhbmNlb2YgU3Rhckxvb3BiYWNrU3RhdGUpIHtcbiAgICAgICAgICAgIGZvciAoaj0wOyBqPHN0YXRlLnRyYW5zaXRpb25zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gc3RhdGUudHJhbnNpdGlvbnNbal0udGFyZ2V0O1xuICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBTdGFyTG9vcEVudHJ5U3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0Lmxvb3BCYWNrU3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5BVE5EZXNlcmlhbGl6ZXIucHJvdG90eXBlLnJlYWREZWNpc2lvbnMgPSBmdW5jdGlvbihhdG4pIHtcbiAgICB2YXIgbmRlY2lzaW9ucyA9IHRoaXMucmVhZEludCgpO1xuICAgIGZvciAodmFyIGk9MDsgaTxuZGVjaXNpb25zOyBpKyspIHtcbiAgICAgICAgdmFyIHMgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICAgICAgdmFyIGRlY1N0YXRlID0gYXRuLnN0YXRlc1tzXTtcbiAgICAgICAgYXRuLmRlY2lzaW9uVG9TdGF0ZS5wdXNoKGRlY1N0YXRlKTtcbiAgICAgICAgZGVjU3RhdGUuZGVjaXNpb24gPSBpO1xuICAgIH1cbn07XG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUucmVhZExleGVyQWN0aW9ucyA9IGZ1bmN0aW9uKGF0bikge1xuICAgIGlmIChhdG4uZ3JhbW1hclR5cGUgPT09IEFUTlR5cGUuTEVYRVIpIHtcbiAgICAgICAgdmFyIGNvdW50ID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgIGF0bi5sZXhlckFjdGlvbnMgPSBpbml0QXJyYXkoY291bnQsIG51bGwpO1xuICAgICAgICBmb3IgKHZhciBpPTA7IGk8Y291bnQ7IGkrKykge1xuICAgICAgICAgICAgdmFyIGFjdGlvblR5cGUgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICAgICAgICAgIHZhciBkYXRhMSA9IHRoaXMucmVhZEludCgpO1xuICAgICAgICAgICAgaWYgKGRhdGExID09PSAweEZGRkYpIHtcbiAgICAgICAgICAgICAgICBkYXRhMSA9IC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGRhdGEyID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgICAgICBpZiAoZGF0YTIgPT09IDB4RkZGRikge1xuICAgICAgICAgICAgICAgIGRhdGEyID0gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgbGV4ZXJBY3Rpb24gPSB0aGlzLmxleGVyQWN0aW9uRmFjdG9yeShhY3Rpb25UeXBlLCBkYXRhMSwgZGF0YTIpO1xuICAgICAgICAgICAgYXRuLmxleGVyQWN0aW9uc1tpXSA9IGxleGVyQWN0aW9uO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5nZW5lcmF0ZVJ1bGVCeXBhc3NUcmFuc2l0aW9ucyA9IGZ1bmN0aW9uKGF0bikge1xuXHR2YXIgaTtcbiAgICB2YXIgY291bnQgPSBhdG4ucnVsZVRvU3RhcnRTdGF0ZS5sZW5ndGg7XG4gICAgZm9yKGk9MDsgaTxjb3VudDsgaSsrKSB7XG4gICAgICAgIGF0bi5ydWxlVG9Ub2tlblR5cGVbaV0gPSBhdG4ubWF4VG9rZW5UeXBlICsgaSArIDE7XG4gICAgfVxuICAgIGZvcihpPTA7IGk8Y291bnQ7IGkrKykge1xuICAgICAgICB0aGlzLmdlbmVyYXRlUnVsZUJ5cGFzc1RyYW5zaXRpb24oYXRuLCBpKTtcbiAgICB9XG59O1xuXG5BVE5EZXNlcmlhbGl6ZXIucHJvdG90eXBlLmdlbmVyYXRlUnVsZUJ5cGFzc1RyYW5zaXRpb24gPSBmdW5jdGlvbihhdG4sIGlkeCkge1xuXHR2YXIgaSwgc3RhdGU7XG4gICAgdmFyIGJ5cGFzc1N0YXJ0ID0gbmV3IEJhc2ljQmxvY2tTdGFydFN0YXRlKCk7XG4gICAgYnlwYXNzU3RhcnQucnVsZUluZGV4ID0gaWR4O1xuICAgIGF0bi5hZGRTdGF0ZShieXBhc3NTdGFydCk7XG5cbiAgICB2YXIgYnlwYXNzU3RvcCA9IG5ldyBCbG9ja0VuZFN0YXRlKCk7XG4gICAgYnlwYXNzU3RvcC5ydWxlSW5kZXggPSBpZHg7XG4gICAgYXRuLmFkZFN0YXRlKGJ5cGFzc1N0b3ApO1xuXG4gICAgYnlwYXNzU3RhcnQuZW5kU3RhdGUgPSBieXBhc3NTdG9wO1xuICAgIGF0bi5kZWZpbmVEZWNpc2lvblN0YXRlKGJ5cGFzc1N0YXJ0KTtcblxuICAgIGJ5cGFzc1N0b3Auc3RhcnRTdGF0ZSA9IGJ5cGFzc1N0YXJ0O1xuXG4gICAgdmFyIGV4Y2x1ZGVUcmFuc2l0aW9uID0gbnVsbDtcbiAgICB2YXIgZW5kU3RhdGUgPSBudWxsO1xuXG4gICAgaWYgKGF0bi5ydWxlVG9TdGFydFN0YXRlW2lkeF0uaXNQcmVjZWRlbmNlUnVsZSkge1xuICAgICAgICAvLyB3cmFwIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgcnVsZSB0byB0aGUgU3Rhckxvb3BFbnRyeVN0YXRlXG4gICAgICAgIGVuZFN0YXRlID0gbnVsbDtcbiAgICAgICAgZm9yKGk9MDsgaTxhdG4uc3RhdGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IGF0bi5zdGF0ZXNbaV07XG4gICAgICAgICAgICBpZiAodGhpcy5zdGF0ZUlzRW5kU3RhdGVGb3Ioc3RhdGUsIGlkeCkpIHtcbiAgICAgICAgICAgICAgICBlbmRTdGF0ZSA9IHN0YXRlO1xuICAgICAgICAgICAgICAgIGV4Y2x1ZGVUcmFuc2l0aW9uID0gc3RhdGUubG9vcEJhY2tTdGF0ZS50cmFuc2l0aW9uc1swXTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZXhjbHVkZVRyYW5zaXRpb24gPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IChcIkNvdWxkbid0IGlkZW50aWZ5IGZpbmFsIHN0YXRlIG9mIHRoZSBwcmVjZWRlbmNlIHJ1bGUgcHJlZml4IHNlY3Rpb24uXCIpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZW5kU3RhdGUgPSBhdG4ucnVsZVRvU3RvcFN0YXRlW2lkeF07XG4gICAgfVxuXG4gICAgLy8gYWxsIG5vbi1leGNsdWRlZCB0cmFuc2l0aW9ucyB0aGF0IGN1cnJlbnRseSB0YXJnZXQgZW5kIHN0YXRlIG5lZWQgdG9cblx0Ly8gdGFyZ2V0IGJsb2NrRW5kIGluc3RlYWRcbiAgICBmb3IoaT0wOyBpPGF0bi5zdGF0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgc3RhdGUgPSBhdG4uc3RhdGVzW2ldO1xuICAgICAgICBmb3IodmFyIGo9MDsgajxzdGF0ZS50cmFuc2l0aW9ucy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgdmFyIHRyYW5zaXRpb24gPSBzdGF0ZS50cmFuc2l0aW9uc1tqXTtcbiAgICAgICAgICAgIGlmICh0cmFuc2l0aW9uID09PSBleGNsdWRlVHJhbnNpdGlvbikge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRyYW5zaXRpb24udGFyZ2V0ID09PSBlbmRTdGF0ZSkge1xuICAgICAgICAgICAgICAgIHRyYW5zaXRpb24udGFyZ2V0ID0gYnlwYXNzU3RvcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGFsbCB0cmFuc2l0aW9ucyBsZWF2aW5nIHRoZSBydWxlIHN0YXJ0IHN0YXRlIG5lZWQgdG8gbGVhdmUgYmxvY2tTdGFydFxuXHQvLyBpbnN0ZWFkXG4gICAgdmFyIHJ1bGVUb1N0YXJ0U3RhdGUgPSBhdG4ucnVsZVRvU3RhcnRTdGF0ZVtpZHhdO1xuICAgIHZhciBjb3VudCA9IHJ1bGVUb1N0YXJ0U3RhdGUudHJhbnNpdGlvbnMubGVuZ3RoO1xuICAgIHdoaWxlICggY291bnQgPiAwKSB7XG4gICAgICAgIGJ5cGFzc1N0YXJ0LmFkZFRyYW5zaXRpb24ocnVsZVRvU3RhcnRTdGF0ZS50cmFuc2l0aW9uc1tjb3VudC0xXSk7XG4gICAgICAgIHJ1bGVUb1N0YXJ0U3RhdGUudHJhbnNpdGlvbnMgPSBydWxlVG9TdGFydFN0YXRlLnRyYW5zaXRpb25zLnNsaWNlKC0xKTtcbiAgICB9XG4gICAgLy8gbGluayB0aGUgbmV3IHN0YXRlc1xuICAgIGF0bi5ydWxlVG9TdGFydFN0YXRlW2lkeF0uYWRkVHJhbnNpdGlvbihuZXcgRXBzaWxvblRyYW5zaXRpb24oYnlwYXNzU3RhcnQpKTtcbiAgICBieXBhc3NTdG9wLmFkZFRyYW5zaXRpb24obmV3IEVwc2lsb25UcmFuc2l0aW9uKGVuZFN0YXRlKSk7XG5cbiAgICB2YXIgbWF0Y2hTdGF0ZSA9IG5ldyBCYXNpY1N0YXRlKCk7XG4gICAgYXRuLmFkZFN0YXRlKG1hdGNoU3RhdGUpO1xuICAgIG1hdGNoU3RhdGUuYWRkVHJhbnNpdGlvbihuZXcgQXRvbVRyYW5zaXRpb24oYnlwYXNzU3RvcCwgYXRuLnJ1bGVUb1Rva2VuVHlwZVtpZHhdKSk7XG4gICAgYnlwYXNzU3RhcnQuYWRkVHJhbnNpdGlvbihuZXcgRXBzaWxvblRyYW5zaXRpb24obWF0Y2hTdGF0ZSkpO1xufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5zdGF0ZUlzRW5kU3RhdGVGb3IgPSBmdW5jdGlvbihzdGF0ZSwgaWR4KSB7XG4gICAgaWYgKCBzdGF0ZS5ydWxlSW5kZXggIT09IGlkeCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKCEoIHN0YXRlIGluc3RhbmNlb2YgU3Rhckxvb3BFbnRyeVN0YXRlKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdmFyIG1heWJlTG9vcEVuZFN0YXRlID0gc3RhdGUudHJhbnNpdGlvbnNbc3RhdGUudHJhbnNpdGlvbnMubGVuZ3RoIC0gMV0udGFyZ2V0O1xuICAgIGlmICghKCBtYXliZUxvb3BFbmRTdGF0ZSBpbnN0YW5jZW9mIExvb3BFbmRTdGF0ZSkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChtYXliZUxvb3BFbmRTdGF0ZS5lcHNpbG9uT25seVRyYW5zaXRpb25zICYmXG4gICAgICAgIChtYXliZUxvb3BFbmRTdGF0ZS50cmFuc2l0aW9uc1swXS50YXJnZXQgaW5zdGFuY2VvZiBSdWxlU3RvcFN0YXRlKSkge1xuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufTtcblxuLy9cbi8vIEFuYWx5emUgdGhlIHtAbGluayBTdGFyTG9vcEVudHJ5U3RhdGV9IHN0YXRlcyBpbiB0aGUgc3BlY2lmaWVkIEFUTiB0byBzZXRcbi8vIHRoZSB7QGxpbmsgU3Rhckxvb3BFbnRyeVN0YXRlLy9pc1ByZWNlZGVuY2VEZWNpc2lvbn0gZmllbGQgdG8gdGhlXG4vLyBjb3JyZWN0IHZhbHVlLlxuLy9cbi8vIEBwYXJhbSBhdG4gVGhlIEFUTi5cbi8vXG5BVE5EZXNlcmlhbGl6ZXIucHJvdG90eXBlLm1hcmtQcmVjZWRlbmNlRGVjaXNpb25zID0gZnVuY3Rpb24oYXRuKSB7XG5cdGZvcih2YXIgaT0wOyBpPGF0bi5zdGF0ZXMubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgc3RhdGUgPSBhdG4uc3RhdGVzW2ldO1xuXHRcdGlmICghKCBzdGF0ZSBpbnN0YW5jZW9mIFN0YXJMb29wRW50cnlTdGF0ZSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIFdlIGFuYWx5emUgdGhlIEFUTiB0byBkZXRlcm1pbmUgaWYgdGhpcyBBVE4gZGVjaXNpb24gc3RhdGUgaXMgdGhlXG4gICAgICAgIC8vIGRlY2lzaW9uIGZvciB0aGUgY2xvc3VyZSBibG9jayB0aGF0IGRldGVybWluZXMgd2hldGhlciBhXG4gICAgICAgIC8vIHByZWNlZGVuY2UgcnVsZSBzaG91bGQgY29udGludWUgb3IgY29tcGxldGUuXG4gICAgICAgIC8vXG4gICAgICAgIGlmICggYXRuLnJ1bGVUb1N0YXJ0U3RhdGVbc3RhdGUucnVsZUluZGV4XS5pc1ByZWNlZGVuY2VSdWxlKSB7XG4gICAgICAgICAgICB2YXIgbWF5YmVMb29wRW5kU3RhdGUgPSBzdGF0ZS50cmFuc2l0aW9uc1tzdGF0ZS50cmFuc2l0aW9ucy5sZW5ndGggLSAxXS50YXJnZXQ7XG4gICAgICAgICAgICBpZiAobWF5YmVMb29wRW5kU3RhdGUgaW5zdGFuY2VvZiBMb29wRW5kU3RhdGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIG1heWJlTG9vcEVuZFN0YXRlLmVwc2lsb25Pbmx5VHJhbnNpdGlvbnMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIChtYXliZUxvb3BFbmRTdGF0ZS50cmFuc2l0aW9uc1swXS50YXJnZXQgaW5zdGFuY2VvZiBSdWxlU3RvcFN0YXRlKSkge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5pc1ByZWNlZGVuY2VEZWNpc2lvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cdH1cbn07XG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUudmVyaWZ5QVROID0gZnVuY3Rpb24oYXRuKSB7XG4gICAgaWYgKCF0aGlzLmRlc2VyaWFsaXphdGlvbk9wdGlvbnMudmVyaWZ5QVROKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gdmVyaWZ5IGFzc3VtcHRpb25zXG5cdGZvcih2YXIgaT0wOyBpPGF0bi5zdGF0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHN0YXRlID0gYXRuLnN0YXRlc1tpXTtcbiAgICAgICAgaWYgKHN0YXRlID09PSBudWxsKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoZWNrQ29uZGl0aW9uKHN0YXRlLmVwc2lsb25Pbmx5VHJhbnNpdGlvbnMgfHwgc3RhdGUudHJhbnNpdGlvbnMubGVuZ3RoIDw9IDEpO1xuICAgICAgICBpZiAoc3RhdGUgaW5zdGFuY2VvZiBQbHVzQmxvY2tTdGFydFN0YXRlKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrQ29uZGl0aW9uKHN0YXRlLmxvb3BCYWNrU3RhdGUgIT09IG51bGwpO1xuICAgICAgICB9IGVsc2UgIGlmIChzdGF0ZSBpbnN0YW5jZW9mIFN0YXJMb29wRW50cnlTdGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5jaGVja0NvbmRpdGlvbihzdGF0ZS5sb29wQmFja1N0YXRlICE9PSBudWxsKTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tDb25kaXRpb24oc3RhdGUudHJhbnNpdGlvbnMubGVuZ3RoID09PSAyKTtcbiAgICAgICAgICAgIGlmIChzdGF0ZS50cmFuc2l0aW9uc1swXS50YXJnZXQgaW5zdGFuY2VvZiBTdGFyQmxvY2tTdGFydFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja0NvbmRpdGlvbihzdGF0ZS50cmFuc2l0aW9uc1sxXS50YXJnZXQgaW5zdGFuY2VvZiBMb29wRW5kU3RhdGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tDb25kaXRpb24oIXN0YXRlLm5vbkdyZWVkeSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLnRyYW5zaXRpb25zWzBdLnRhcmdldCBpbnN0YW5jZW9mIExvb3BFbmRTdGF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tDb25kaXRpb24oc3RhdGUudHJhbnNpdGlvbnNbMV0udGFyZ2V0IGluc3RhbmNlb2YgU3RhckJsb2NrU3RhcnRTdGF0ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja0NvbmRpdGlvbihzdGF0ZS5ub25HcmVlZHkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyhcIklsbGVnYWxTdGF0ZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSBpbnN0YW5jZW9mIFN0YXJMb29wYmFja1N0YXRlKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrQ29uZGl0aW9uKHN0YXRlLnRyYW5zaXRpb25zLmxlbmd0aCA9PT0gMSk7XG4gICAgICAgICAgICB0aGlzLmNoZWNrQ29uZGl0aW9uKHN0YXRlLnRyYW5zaXRpb25zWzBdLnRhcmdldCBpbnN0YW5jZW9mIFN0YXJMb29wRW50cnlTdGF0ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgaW5zdGFuY2VvZiBMb29wRW5kU3RhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tDb25kaXRpb24oc3RhdGUubG9vcEJhY2tTdGF0ZSAhPT0gbnVsbCk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgaW5zdGFuY2VvZiBSdWxlU3RhcnRTdGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5jaGVja0NvbmRpdGlvbihzdGF0ZS5zdG9wU3RhdGUgIT09IG51bGwpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXRlIGluc3RhbmNlb2YgQmxvY2tTdGFydFN0YXRlKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrQ29uZGl0aW9uKHN0YXRlLmVuZFN0YXRlICE9PSBudWxsKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSBpbnN0YW5jZW9mIEJsb2NrRW5kU3RhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tDb25kaXRpb24oc3RhdGUuc3RhcnRTdGF0ZSAhPT0gbnVsbCk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgaW5zdGFuY2VvZiBEZWNpc2lvblN0YXRlKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrQ29uZGl0aW9uKHN0YXRlLnRyYW5zaXRpb25zLmxlbmd0aCA8PSAxIHx8IHN0YXRlLmRlY2lzaW9uID49IDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jaGVja0NvbmRpdGlvbihzdGF0ZS50cmFuc2l0aW9ucy5sZW5ndGggPD0gMSB8fCAoc3RhdGUgaW5zdGFuY2VvZiBSdWxlU3RvcFN0YXRlKSk7XG4gICAgICAgIH1cblx0fVxufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5jaGVja0NvbmRpdGlvbiA9IGZ1bmN0aW9uKGNvbmRpdGlvbiwgbWVzc2FnZSkge1xuICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICAgIGlmIChtZXNzYWdlID09PSB1bmRlZmluZWQgfHwgbWVzc2FnZT09PW51bGwpIHtcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBcIklsbGVnYWxTdGF0ZVwiO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IChtZXNzYWdlKTtcbiAgICB9XG59O1xuXG5BVE5EZXNlcmlhbGl6ZXIucHJvdG90eXBlLnJlYWRJbnQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhW3RoaXMucG9zKytdO1xufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5yZWFkSW50MzIgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgbG93ID0gdGhpcy5yZWFkSW50KCk7XG4gICAgdmFyIGhpZ2ggPSB0aGlzLnJlYWRJbnQoKTtcbiAgICByZXR1cm4gbG93IHwgKGhpZ2ggPDwgMTYpO1xufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5yZWFkTG9uZyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBsb3cgPSB0aGlzLnJlYWRJbnQzMigpO1xuICAgIHZhciBoaWdoID0gdGhpcy5yZWFkSW50MzIoKTtcbiAgICByZXR1cm4gKGxvdyAmIDB4MDAwMDAwMDBGRkZGRkZGRikgfCAoaGlnaCA8PCAzMik7XG59O1xuXG5mdW5jdGlvbiBjcmVhdGVCeXRlVG9IZXgoKSB7XG5cdHZhciBidGggPSBbXTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuXHRcdGJ0aFtpXSA9IChpICsgMHgxMDApLnRvU3RyaW5nKDE2KS5zdWJzdHIoMSkudG9VcHBlckNhc2UoKTtcblx0fVxuXHRyZXR1cm4gYnRoO1xufVxuXG52YXIgYnl0ZVRvSGV4ID0gY3JlYXRlQnl0ZVRvSGV4KCk7XG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUucmVhZFVVSUQgPSBmdW5jdGlvbigpIHtcblx0dmFyIGJiID0gW107XG5cdGZvcih2YXIgaT03O2k+PTA7aS0tKSB7XG5cdFx0dmFyIGludCA9IHRoaXMucmVhZEludCgpO1xuXHRcdC8qIGpzaGludCBiaXR3aXNlOiBmYWxzZSAqL1xuXHRcdGJiWygyKmkpKzFdID0gaW50ICYgMHhGRjtcblx0XHRiYlsyKmldID0gKGludCA+PiA4KSAmIDB4RkY7XG5cdH1cbiAgICByZXR1cm4gYnl0ZVRvSGV4W2JiWzBdXSArIGJ5dGVUb0hleFtiYlsxXV0gK1xuICAgIGJ5dGVUb0hleFtiYlsyXV0gKyBieXRlVG9IZXhbYmJbM11dICsgJy0nICtcbiAgICBieXRlVG9IZXhbYmJbNF1dICsgYnl0ZVRvSGV4W2JiWzVdXSArICctJyArXG4gICAgYnl0ZVRvSGV4W2JiWzZdXSArIGJ5dGVUb0hleFtiYls3XV0gKyAnLScgK1xuICAgIGJ5dGVUb0hleFtiYls4XV0gKyBieXRlVG9IZXhbYmJbOV1dICsgJy0nICtcbiAgICBieXRlVG9IZXhbYmJbMTBdXSArIGJ5dGVUb0hleFtiYlsxMV1dICtcbiAgICBieXRlVG9IZXhbYmJbMTJdXSArIGJ5dGVUb0hleFtiYlsxM11dICtcbiAgICBieXRlVG9IZXhbYmJbMTRdXSArIGJ5dGVUb0hleFtiYlsxNV1dO1xufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5lZGdlRmFjdG9yeSA9IGZ1bmN0aW9uKGF0biwgdHlwZSwgc3JjLCB0cmcsIGFyZzEsIGFyZzIsIGFyZzMsIHNldHMpIHtcbiAgICB2YXIgdGFyZ2V0ID0gYXRuLnN0YXRlc1t0cmddO1xuICAgIHN3aXRjaCh0eXBlKSB7XG4gICAgY2FzZSBUcmFuc2l0aW9uLkVQU0lMT046XG4gICAgICAgIHJldHVybiBuZXcgRXBzaWxvblRyYW5zaXRpb24odGFyZ2V0KTtcbiAgICBjYXNlIFRyYW5zaXRpb24uUkFOR0U6XG4gICAgICAgIHJldHVybiBhcmczICE9PSAwID8gbmV3IFJhbmdlVHJhbnNpdGlvbih0YXJnZXQsIFRva2VuLkVPRiwgYXJnMikgOiBuZXcgUmFuZ2VUcmFuc2l0aW9uKHRhcmdldCwgYXJnMSwgYXJnMik7XG4gICAgY2FzZSBUcmFuc2l0aW9uLlJVTEU6XG4gICAgICAgIHJldHVybiBuZXcgUnVsZVRyYW5zaXRpb24oYXRuLnN0YXRlc1thcmcxXSwgYXJnMiwgYXJnMywgdGFyZ2V0KTtcbiAgICBjYXNlIFRyYW5zaXRpb24uUFJFRElDQVRFOlxuICAgICAgICByZXR1cm4gbmV3IFByZWRpY2F0ZVRyYW5zaXRpb24odGFyZ2V0LCBhcmcxLCBhcmcyLCBhcmczICE9PSAwKTtcbiAgICBjYXNlIFRyYW5zaXRpb24uUFJFQ0VERU5DRTpcbiAgICAgICAgcmV0dXJuIG5ldyBQcmVjZWRlbmNlUHJlZGljYXRlVHJhbnNpdGlvbih0YXJnZXQsIGFyZzEpO1xuICAgIGNhc2UgVHJhbnNpdGlvbi5BVE9NOlxuICAgICAgICByZXR1cm4gYXJnMyAhPT0gMCA/IG5ldyBBdG9tVHJhbnNpdGlvbih0YXJnZXQsIFRva2VuLkVPRikgOiBuZXcgQXRvbVRyYW5zaXRpb24odGFyZ2V0LCBhcmcxKTtcbiAgICBjYXNlIFRyYW5zaXRpb24uQUNUSU9OOlxuICAgICAgICByZXR1cm4gbmV3IEFjdGlvblRyYW5zaXRpb24odGFyZ2V0LCBhcmcxLCBhcmcyLCBhcmczICE9PSAwKTtcbiAgICBjYXNlIFRyYW5zaXRpb24uU0VUOlxuICAgICAgICByZXR1cm4gbmV3IFNldFRyYW5zaXRpb24odGFyZ2V0LCBzZXRzW2FyZzFdKTtcbiAgICBjYXNlIFRyYW5zaXRpb24uTk9UX1NFVDpcbiAgICAgICAgcmV0dXJuIG5ldyBOb3RTZXRUcmFuc2l0aW9uKHRhcmdldCwgc2V0c1thcmcxXSk7XG4gICAgY2FzZSBUcmFuc2l0aW9uLldJTERDQVJEOlxuICAgICAgICByZXR1cm4gbmV3IFdpbGRjYXJkVHJhbnNpdGlvbih0YXJnZXQpO1xuICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IFwiVGhlIHNwZWNpZmllZCB0cmFuc2l0aW9uIHR5cGU6IFwiICsgdHlwZSArIFwiIGlzIG5vdCB2YWxpZC5cIjtcbiAgICB9XG59O1xuXG5BVE5EZXNlcmlhbGl6ZXIucHJvdG90eXBlLnN0YXRlRmFjdG9yeSA9IGZ1bmN0aW9uKHR5cGUsIHJ1bGVJbmRleCkge1xuICAgIGlmICh0aGlzLnN0YXRlRmFjdG9yaWVzID09PSBudWxsKSB7XG4gICAgICAgIHZhciBzZiA9IFtdO1xuICAgICAgICBzZltBVE5TdGF0ZS5JTlZBTElEX1RZUEVdID0gbnVsbDtcbiAgICAgICAgc2ZbQVROU3RhdGUuQkFTSUNdID0gZnVuY3Rpb24oKSB7IHJldHVybiBuZXcgQmFzaWNTdGF0ZSgpOyB9O1xuICAgICAgICBzZltBVE5TdGF0ZS5SVUxFX1NUQVJUXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gbmV3IFJ1bGVTdGFydFN0YXRlKCk7IH07XG4gICAgICAgIHNmW0FUTlN0YXRlLkJMT0NLX1NUQVJUXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gbmV3IEJhc2ljQmxvY2tTdGFydFN0YXRlKCk7IH07XG4gICAgICAgIHNmW0FUTlN0YXRlLlBMVVNfQkxPQ0tfU1RBUlRdID0gZnVuY3Rpb24oKSB7IHJldHVybiBuZXcgUGx1c0Jsb2NrU3RhcnRTdGF0ZSgpOyB9O1xuICAgICAgICBzZltBVE5TdGF0ZS5TVEFSX0JMT0NLX1NUQVJUXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gbmV3IFN0YXJCbG9ja1N0YXJ0U3RhdGUoKTsgfTtcbiAgICAgICAgc2ZbQVROU3RhdGUuVE9LRU5fU1RBUlRdID0gZnVuY3Rpb24oKSB7IHJldHVybiBuZXcgVG9rZW5zU3RhcnRTdGF0ZSgpOyB9O1xuICAgICAgICBzZltBVE5TdGF0ZS5SVUxFX1NUT1BdID0gZnVuY3Rpb24oKSB7IHJldHVybiBuZXcgUnVsZVN0b3BTdGF0ZSgpOyB9O1xuICAgICAgICBzZltBVE5TdGF0ZS5CTE9DS19FTkRdID0gZnVuY3Rpb24oKSB7IHJldHVybiBuZXcgQmxvY2tFbmRTdGF0ZSgpOyB9O1xuICAgICAgICBzZltBVE5TdGF0ZS5TVEFSX0xPT1BfQkFDS10gPSBmdW5jdGlvbigpIHsgcmV0dXJuIG5ldyBTdGFyTG9vcGJhY2tTdGF0ZSgpOyB9O1xuICAgICAgICBzZltBVE5TdGF0ZS5TVEFSX0xPT1BfRU5UUlldID0gZnVuY3Rpb24oKSB7IHJldHVybiBuZXcgU3Rhckxvb3BFbnRyeVN0YXRlKCk7IH07XG4gICAgICAgIHNmW0FUTlN0YXRlLlBMVVNfTE9PUF9CQUNLXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gbmV3IFBsdXNMb29wYmFja1N0YXRlKCk7IH07XG4gICAgICAgIHNmW0FUTlN0YXRlLkxPT1BfRU5EXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gbmV3IExvb3BFbmRTdGF0ZSgpOyB9O1xuICAgICAgICB0aGlzLnN0YXRlRmFjdG9yaWVzID0gc2Y7XG4gICAgfVxuICAgIGlmICh0eXBlPnRoaXMuc3RhdGVGYWN0b3JpZXMubGVuZ3RoIHx8IHRoaXMuc3RhdGVGYWN0b3JpZXNbdHlwZV0gPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3coXCJUaGUgc3BlY2lmaWVkIHN0YXRlIHR5cGUgXCIgKyB0eXBlICsgXCIgaXMgbm90IHZhbGlkLlwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcyA9IHRoaXMuc3RhdGVGYWN0b3JpZXNbdHlwZV0oKTtcbiAgICAgICAgaWYgKHMhPT1udWxsKSB7XG4gICAgICAgICAgICBzLnJ1bGVJbmRleCA9IHJ1bGVJbmRleDtcbiAgICAgICAgICAgIHJldHVybiBzO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5sZXhlckFjdGlvbkZhY3RvcnkgPSBmdW5jdGlvbih0eXBlLCBkYXRhMSwgZGF0YTIpIHtcbiAgICBpZiAodGhpcy5hY3Rpb25GYWN0b3JpZXMgPT09IG51bGwpIHtcbiAgICAgICAgdmFyIGFmID0gW107XG4gICAgICAgIGFmW0xleGVyQWN0aW9uVHlwZS5DSEFOTkVMXSA9IGZ1bmN0aW9uKGRhdGExLCBkYXRhMikgeyByZXR1cm4gbmV3IExleGVyQ2hhbm5lbEFjdGlvbihkYXRhMSk7IH07XG4gICAgICAgIGFmW0xleGVyQWN0aW9uVHlwZS5DVVNUT01dID0gZnVuY3Rpb24oZGF0YTEsIGRhdGEyKSB7IHJldHVybiBuZXcgTGV4ZXJDdXN0b21BY3Rpb24oZGF0YTEsIGRhdGEyKTsgfTtcbiAgICAgICAgYWZbTGV4ZXJBY3Rpb25UeXBlLk1PREVdID0gZnVuY3Rpb24oZGF0YTEsIGRhdGEyKSB7IHJldHVybiBuZXcgTGV4ZXJNb2RlQWN0aW9uKGRhdGExKTsgfTtcbiAgICAgICAgYWZbTGV4ZXJBY3Rpb25UeXBlLk1PUkVdID0gZnVuY3Rpb24oZGF0YTEsIGRhdGEyKSB7IHJldHVybiBMZXhlck1vcmVBY3Rpb24uSU5TVEFOQ0U7IH07XG4gICAgICAgIGFmW0xleGVyQWN0aW9uVHlwZS5QT1BfTU9ERV0gPSBmdW5jdGlvbihkYXRhMSwgZGF0YTIpIHsgcmV0dXJuIExleGVyUG9wTW9kZUFjdGlvbi5JTlNUQU5DRTsgfTtcbiAgICAgICAgYWZbTGV4ZXJBY3Rpb25UeXBlLlBVU0hfTU9ERV0gPSBmdW5jdGlvbihkYXRhMSwgZGF0YTIpIHsgcmV0dXJuIG5ldyBMZXhlclB1c2hNb2RlQWN0aW9uKGRhdGExKTsgfTtcbiAgICAgICAgYWZbTGV4ZXJBY3Rpb25UeXBlLlNLSVBdID0gZnVuY3Rpb24oZGF0YTEsIGRhdGEyKSB7IHJldHVybiBMZXhlclNraXBBY3Rpb24uSU5TVEFOQ0U7IH07XG4gICAgICAgIGFmW0xleGVyQWN0aW9uVHlwZS5UWVBFXSA9IGZ1bmN0aW9uKGRhdGExLCBkYXRhMikgeyByZXR1cm4gbmV3IExleGVyVHlwZUFjdGlvbihkYXRhMSk7IH07XG4gICAgICAgIHRoaXMuYWN0aW9uRmFjdG9yaWVzID0gYWY7XG4gICAgfVxuICAgIGlmICh0eXBlPnRoaXMuYWN0aW9uRmFjdG9yaWVzLmxlbmd0aCB8fCB0aGlzLmFjdGlvbkZhY3Rvcmllc1t0eXBlXSA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyhcIlRoZSBzcGVjaWZpZWQgbGV4ZXIgYWN0aW9uIHR5cGUgXCIgKyB0eXBlICsgXCIgaXMgbm90IHZhbGlkLlwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3Rpb25GYWN0b3JpZXNbdHlwZV0oZGF0YTEsIGRhdGEyKTtcbiAgICB9XG59O1xuXG5cbmV4cG9ydHMuQVRORGVzZXJpYWxpemVyID0gQVRORGVzZXJpYWxpemVyOyIsIi8vXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vLy9cblxudmFyIERGQVN0YXRlID0gcmVxdWlyZSgnLi8uLi9kZmEvREZBU3RhdGUnKS5ERkFTdGF0ZTtcbnZhciBBVE5Db25maWdTZXQgPSByZXF1aXJlKCcuL0FUTkNvbmZpZ1NldCcpLkFUTkNvbmZpZ1NldDtcbnZhciBnZXRDYWNoZWRQcmVkaWN0aW9uQ29udGV4dCA9IHJlcXVpcmUoJy4vLi4vUHJlZGljdGlvbkNvbnRleHQnKS5nZXRDYWNoZWRQcmVkaWN0aW9uQ29udGV4dDtcblxuZnVuY3Rpb24gQVROU2ltdWxhdG9yKGF0biwgc2hhcmVkQ29udGV4dENhY2hlKSB7XG5cbiAgICAvLyBUaGUgY29udGV4dCBjYWNoZSBtYXBzIGFsbCBQcmVkaWN0aW9uQ29udGV4dCBvYmplY3RzIHRoYXQgYXJlID09XG4gICAgLy8gIHRvIGEgc2luZ2xlIGNhY2hlZCBjb3B5LiBUaGlzIGNhY2hlIGlzIHNoYXJlZCBhY3Jvc3MgYWxsIGNvbnRleHRzXG4gICAgLy8gIGluIGFsbCBBVE5Db25maWdzIGluIGFsbCBERkEgc3RhdGVzLiAgV2UgcmVidWlsZCBlYWNoIEFUTkNvbmZpZ1NldFxuICAgIC8vICB0byB1c2Ugb25seSBjYWNoZWQgbm9kZXMvZ3JhcGhzIGluIGFkZERGQVN0YXRlKCkuIFdlIGRvbid0IHdhbnQgdG9cbiAgICAvLyAgZmlsbCB0aGlzIGR1cmluZyBjbG9zdXJlKCkgc2luY2UgdGhlcmUgYXJlIGxvdHMgb2YgY29udGV4dHMgdGhhdFxuICAgIC8vICBwb3AgdXAgYnV0IGFyZSBub3QgdXNlZCBldmVyIGFnYWluLiBJdCBhbHNvIGdyZWF0bHkgc2xvd3MgZG93biBjbG9zdXJlKCkuXG4gICAgLy9cbiAgICAvLyAgPHA+VGhpcyBjYWNoZSBtYWtlcyBhIGh1Z2UgZGlmZmVyZW5jZSBpbiBtZW1vcnkgYW5kIGEgbGl0dGxlIGJpdCBpbiBzcGVlZC5cbiAgICAvLyAgRm9yIHRoZSBKYXZhIGdyYW1tYXIgb24gamF2YS4qLCBpdCBkcm9wcGVkIHRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzXG4gICAgLy8gIGF0IHRoZSBlbmQgZnJvbSAyNU0gdG8gMTZNLiBXZSBkb24ndCBzdG9yZSBhbnkgb2YgdGhlIGZ1bGwgY29udGV4dFxuICAgIC8vICBncmFwaHMgaW4gdGhlIERGQSBiZWNhdXNlIHRoZXkgYXJlIGxpbWl0ZWQgdG8gbG9jYWwgY29udGV4dCBvbmx5LFxuICAgIC8vICBidXQgYXBwYXJlbnRseSB0aGVyZSdzIGEgbG90IG9mIHJlcGV0aXRpb24gdGhlcmUgYXMgd2VsbC4gV2Ugb3B0aW1pemVcbiAgICAvLyAgdGhlIGNvbmZpZyBjb250ZXh0cyBiZWZvcmUgc3RvcmluZyB0aGUgY29uZmlnIHNldCBpbiB0aGUgREZBIHN0YXRlc1xuICAgIC8vICBieSBsaXRlcmFsbHkgcmVidWlsZGluZyB0aGVtIHdpdGggY2FjaGVkIHN1YmdyYXBocyBvbmx5LjwvcD5cbiAgICAvL1xuICAgIC8vICA8cD5JIHRyaWVkIGEgY2FjaGUgZm9yIHVzZSBkdXJpbmcgY2xvc3VyZSBvcGVyYXRpb25zLCB0aGF0IHdhc1xuICAgIC8vICB3aGFja2VkIGFmdGVyIGVhY2ggYWRhcHRpdmVQcmVkaWN0KCkuIEl0IGNvc3QgYSBsaXR0bGUgYml0XG4gICAgLy8gIG1vcmUgdGltZSBJIHRoaW5rIGFuZCBkb2Vzbid0IHNhdmUgb24gdGhlIG92ZXJhbGwgZm9vdHByaW50XG4gICAgLy8gIHNvIGl0J3Mgbm90IHdvcnRoIHRoZSBjb21wbGV4aXR5LjwvcD5cbiAgICAvLy9cbiAgICB0aGlzLmF0biA9IGF0bjtcbiAgICB0aGlzLnNoYXJlZENvbnRleHRDYWNoZSA9IHNoYXJlZENvbnRleHRDYWNoZTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuLy8gTXVzdCBkaXN0aW5ndWlzaCBiZXR3ZWVuIG1pc3NpbmcgZWRnZSBhbmQgZWRnZSB3ZSBrbm93IGxlYWRzIG5vd2hlcmUvLy9cbkFUTlNpbXVsYXRvci5FUlJPUiA9IG5ldyBERkFTdGF0ZSgweDdGRkZGRkZGLCBuZXcgQVROQ29uZmlnU2V0KCkpO1xuXG5cbkFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0Q2FjaGVkQ29udGV4dCA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICBpZiAodGhpcy5zaGFyZWRDb250ZXh0Q2FjaGUgPT09bnVsbCkge1xuICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICB9XG4gICAgdmFyIHZpc2l0ZWQgPSB7fTtcbiAgICByZXR1cm4gZ2V0Q2FjaGVkUHJlZGljdGlvbkNvbnRleHQoY29udGV4dCwgdGhpcy5zaGFyZWRDb250ZXh0Q2FjaGUsIHZpc2l0ZWQpO1xufTtcblxuZXhwb3J0cy5BVE5TaW11bGF0b3IgPSBBVE5TaW11bGF0b3I7XG4iLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy9cblxuLy8gVGhlIGZvbGxvd2luZyBpbWFnZXMgc2hvdyB0aGUgcmVsYXRpb24gb2Ygc3RhdGVzIGFuZFxuLy8ge0BsaW5rIEFUTlN0YXRlLy90cmFuc2l0aW9uc30gZm9yIHZhcmlvdXMgZ3JhbW1hciBjb25zdHJ1Y3RzLlxuLy9cbi8vIDx1bD5cbi8vXG4vLyA8bGk+U29saWQgZWRnZXMgbWFya2VkIHdpdGggYW4gJi8vMDk0OTsgaW5kaWNhdGUgYSByZXF1aXJlZFxuLy8ge0BsaW5rIEVwc2lsb25UcmFuc2l0aW9ufS48L2xpPlxuLy9cbi8vIDxsaT5EYXNoZWQgZWRnZXMgaW5kaWNhdGUgbG9jYXRpb25zIHdoZXJlIGFueSB0cmFuc2l0aW9uIGRlcml2ZWQgZnJvbVxuLy8ge0BsaW5rIFRyYW5zaXRpb259IG1pZ2h0IGFwcGVhci48L2xpPlxuLy9cbi8vIDxsaT5EYXNoZWQgbm9kZXMgYXJlIHBsYWNlIGhvbGRlcnMgZm9yIGVpdGhlciBhIHNlcXVlbmNlIG9mIGxpbmtlZFxuLy8ge0BsaW5rIEJhc2ljU3RhdGV9IHN0YXRlcyBvciB0aGUgaW5jbHVzaW9uIG9mIGEgYmxvY2sgcmVwcmVzZW50aW5nIGEgbmVzdGVkXG4vLyBjb25zdHJ1Y3QgaW4gb25lIG9mIHRoZSBmb3JtcyBiZWxvdy48L2xpPlxuLy9cbi8vIDxsaT5Ob2RlcyBzaG93aW5nIG11bHRpcGxlIG91dGdvaW5nIGFsdGVybmF0aXZlcyB3aXRoIGEge0Bjb2RlIC4uLn0gc3VwcG9ydFxuLy8gYW55IG51bWJlciBvZiBhbHRlcm5hdGl2ZXMgKG9uZSBvciBtb3JlKS4gTm9kZXMgd2l0aG91dCB0aGUge0Bjb2RlIC4uLn0gb25seVxuLy8gc3VwcG9ydCB0aGUgZXhhY3QgbnVtYmVyIG9mIGFsdGVybmF0aXZlcyBzaG93biBpbiB0aGUgZGlhZ3JhbS48L2xpPlxuLy9cbi8vIDwvdWw+XG4vL1xuLy8gPGgyPkJhc2ljIEJsb2NrczwvaDI+XG4vL1xuLy8gPGgzPlJ1bGU8L2gzPlxuLy9cbi8vIDxlbWJlZCBzcmM9XCJpbWFnZXMvUnVsZS5zdmdcIiB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz5cbi8vXG4vLyA8aDM+QmxvY2sgb2YgMSBvciBtb3JlIGFsdGVybmF0aXZlczwvaDM+XG4vL1xuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9CbG9jay5zdmdcIiB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz5cbi8vXG4vLyA8aDI+R3JlZWR5IExvb3BzPC9oMj5cbi8vXG4vLyA8aDM+R3JlZWR5IENsb3N1cmU6IHtAY29kZSAoLi4uKSp9PC9oMz5cbi8vXG4vLyA8ZW1iZWQgc3JjPVwiaW1hZ2VzL0Nsb3N1cmVHcmVlZHkuc3ZnXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+XG4vL1xuLy8gPGgzPkdyZWVkeSBQb3NpdGl2ZSBDbG9zdXJlOiB7QGNvZGUgKC4uLikrfTwvaDM+XG4vL1xuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9Qb3NpdGl2ZUNsb3N1cmVHcmVlZHkuc3ZnXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+XG4vL1xuLy8gPGgzPkdyZWVkeSBPcHRpb25hbDoge0Bjb2RlICguLi4pP308L2gzPlxuLy9cbi8vIDxlbWJlZCBzcmM9XCJpbWFnZXMvT3B0aW9uYWxHcmVlZHkuc3ZnXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+XG4vL1xuLy8gPGgyPk5vbi1HcmVlZHkgTG9vcHM8L2gyPlxuLy9cbi8vIDxoMz5Ob24tR3JlZWR5IENsb3N1cmU6IHtAY29kZSAoLi4uKSo/fTwvaDM+XG4vL1xuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9DbG9zdXJlTm9uR3JlZWR5LnN2Z1wiIHR5cGU9XCJpbWFnZS9zdmcreG1sXCIvPlxuLy9cbi8vIDxoMz5Ob24tR3JlZWR5IFBvc2l0aXZlIENsb3N1cmU6IHtAY29kZSAoLi4uKSs/fTwvaDM+XG4vL1xuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9Qb3NpdGl2ZUNsb3N1cmVOb25HcmVlZHkuc3ZnXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+XG4vL1xuLy8gPGgzPk5vbi1HcmVlZHkgT3B0aW9uYWw6IHtAY29kZSAoLi4uKT8/fTwvaDM+XG4vL1xuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9PcHRpb25hbE5vbkdyZWVkeS5zdmdcIiB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz5cbi8vXG5cbnZhciBJTklUSUFMX05VTV9UUkFOU0lUSU9OUyA9IDQ7XG5cbmZ1bmN0aW9uIEFUTlN0YXRlKCkge1xuICAgIC8vIFdoaWNoIEFUTiBhcmUgd2UgaW4/XG4gICAgdGhpcy5hdG4gPSBudWxsO1xuICAgIHRoaXMuc3RhdGVOdW1iZXIgPSBBVE5TdGF0ZS5JTlZBTElEX1NUQVRFX05VTUJFUjtcbiAgICB0aGlzLnN0YXRlVHlwZSA9IG51bGw7XG4gICAgdGhpcy5ydWxlSW5kZXggPSAwOyAvLyBhdCBydW50aW1lLCB3ZSBkb24ndCBoYXZlIFJ1bGUgb2JqZWN0c1xuICAgIHRoaXMuZXBzaWxvbk9ubHlUcmFuc2l0aW9ucyA9IGZhbHNlO1xuICAgIC8vIFRyYWNrIHRoZSB0cmFuc2l0aW9ucyBlbWFuYXRpbmcgZnJvbSB0aGlzIEFUTiBzdGF0ZS5cbiAgICB0aGlzLnRyYW5zaXRpb25zID0gW107XG4gICAgLy8gVXNlZCB0byBjYWNoZSBsb29rYWhlYWQgZHVyaW5nIHBhcnNpbmcsIG5vdCB1c2VkIGR1cmluZyBjb25zdHJ1Y3Rpb25cbiAgICB0aGlzLm5leHRUb2tlbldpdGhpblJ1bGUgPSBudWxsO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG4vLyBjb25zdGFudHMgZm9yIHNlcmlhbGl6YXRpb25cbkFUTlN0YXRlLklOVkFMSURfVFlQRSA9IDA7XG5BVE5TdGF0ZS5CQVNJQyA9IDE7XG5BVE5TdGF0ZS5SVUxFX1NUQVJUID0gMjtcbkFUTlN0YXRlLkJMT0NLX1NUQVJUID0gMztcbkFUTlN0YXRlLlBMVVNfQkxPQ0tfU1RBUlQgPSA0O1xuQVROU3RhdGUuU1RBUl9CTE9DS19TVEFSVCA9IDU7XG5BVE5TdGF0ZS5UT0tFTl9TVEFSVCA9IDY7XG5BVE5TdGF0ZS5SVUxFX1NUT1AgPSA3O1xuQVROU3RhdGUuQkxPQ0tfRU5EID0gODtcbkFUTlN0YXRlLlNUQVJfTE9PUF9CQUNLID0gOTtcbkFUTlN0YXRlLlNUQVJfTE9PUF9FTlRSWSA9IDEwO1xuQVROU3RhdGUuUExVU19MT09QX0JBQ0sgPSAxMTtcbkFUTlN0YXRlLkxPT1BfRU5EID0gMTI7XG5cbkFUTlN0YXRlLnNlcmlhbGl6YXRpb25OYW1lcyA9IFtcbiAgICAgICAgICAgIFwiSU5WQUxJRFwiLFxuICAgICAgICAgICAgXCJCQVNJQ1wiLFxuICAgICAgICAgICAgXCJSVUxFX1NUQVJUXCIsXG4gICAgICAgICAgICBcIkJMT0NLX1NUQVJUXCIsXG4gICAgICAgICAgICBcIlBMVVNfQkxPQ0tfU1RBUlRcIixcbiAgICAgICAgICAgIFwiU1RBUl9CTE9DS19TVEFSVFwiLFxuICAgICAgICAgICAgXCJUT0tFTl9TVEFSVFwiLFxuICAgICAgICAgICAgXCJSVUxFX1NUT1BcIixcbiAgICAgICAgICAgIFwiQkxPQ0tfRU5EXCIsXG4gICAgICAgICAgICBcIlNUQVJfTE9PUF9CQUNLXCIsXG4gICAgICAgICAgICBcIlNUQVJfTE9PUF9FTlRSWVwiLFxuICAgICAgICAgICAgXCJQTFVTX0xPT1BfQkFDS1wiLFxuICAgICAgICAgICAgXCJMT09QX0VORFwiIF07XG5cbkFUTlN0YXRlLklOVkFMSURfU1RBVEVfTlVNQkVSID0gLTE7XG5cbkFUTlN0YXRlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5zdGF0ZU51bWJlcjtcbn07XG5cbkFUTlN0YXRlLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbihvdGhlcikge1xuICAgIGlmIChvdGhlciBpbnN0YW5jZW9mIEFUTlN0YXRlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlTnVtYmVyPT09b3RoZXIuc3RhdGVOdW1iZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn07XG5cbkFUTlN0YXRlLnByb3RvdHlwZS5pc05vbkdyZWVkeUV4aXRTdGF0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBmYWxzZTtcbn07XG5cblxuQVROU3RhdGUucHJvdG90eXBlLmFkZFRyYW5zaXRpb24gPSBmdW5jdGlvbih0cmFucywgaW5kZXgpIHtcblx0aWYoaW5kZXg9PT11bmRlZmluZWQpIHtcblx0XHRpbmRleCA9IC0xO1xuXHR9XG4gICAgaWYgKHRoaXMudHJhbnNpdGlvbnMubGVuZ3RoPT09MCkge1xuICAgICAgICB0aGlzLmVwc2lsb25Pbmx5VHJhbnNpdGlvbnMgPSB0cmFucy5pc0Vwc2lsb247XG4gICAgfSBlbHNlIGlmKHRoaXMuZXBzaWxvbk9ubHlUcmFuc2l0aW9ucyAhPT0gdHJhbnMuaXNFcHNpbG9uKSB7XG4gICAgICAgIHRoaXMuZXBzaWxvbk9ubHlUcmFuc2l0aW9ucyA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaW5kZXg9PT0tMSkge1xuICAgICAgICB0aGlzLnRyYW5zaXRpb25zLnB1c2godHJhbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudHJhbnNpdGlvbnMuc3BsaWNlKGluZGV4LCAxLCB0cmFucyk7XG4gICAgfVxufTtcblxuZnVuY3Rpb24gQmFzaWNTdGF0ZSgpIHtcblx0QVROU3RhdGUuY2FsbCh0aGlzKTtcbiAgICB0aGlzLnN0YXRlVHlwZSA9IEFUTlN0YXRlLkJBU0lDO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5CYXNpY1N0YXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQVROU3RhdGUucHJvdG90eXBlKTtcbkJhc2ljU3RhdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmFzaWNTdGF0ZTtcblxuXG5mdW5jdGlvbiBEZWNpc2lvblN0YXRlKCkge1xuXHRBVE5TdGF0ZS5jYWxsKHRoaXMpO1xuICAgIHRoaXMuZGVjaXNpb24gPSAtMTtcbiAgICB0aGlzLm5vbkdyZWVkeSA9IGZhbHNlO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5EZWNpc2lvblN0YXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQVROU3RhdGUucHJvdG90eXBlKTtcbkRlY2lzaW9uU3RhdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRGVjaXNpb25TdGF0ZTtcblxuXG4vLyAgVGhlIHN0YXJ0IG9mIGEgcmVndWxhciB7QGNvZGUgKC4uLil9IGJsb2NrLlxuZnVuY3Rpb24gQmxvY2tTdGFydFN0YXRlKCkge1xuXHREZWNpc2lvblN0YXRlLmNhbGwodGhpcyk7XG5cdHRoaXMuZW5kU3RhdGUgPSBudWxsO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuQmxvY2tTdGFydFN0YXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRGVjaXNpb25TdGF0ZS5wcm90b3R5cGUpO1xuQmxvY2tTdGFydFN0YXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsb2NrU3RhcnRTdGF0ZTtcblxuXG5mdW5jdGlvbiBCYXNpY0Jsb2NrU3RhcnRTdGF0ZSgpIHtcblx0QmxvY2tTdGFydFN0YXRlLmNhbGwodGhpcyk7XG5cdHRoaXMuc3RhdGVUeXBlID0gQVROU3RhdGUuQkxPQ0tfU1RBUlQ7XG5cdHJldHVybiB0aGlzO1xufVxuXG5CYXNpY0Jsb2NrU3RhcnRTdGF0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJsb2NrU3RhcnRTdGF0ZS5wcm90b3R5cGUpO1xuQmFzaWNCbG9ja1N0YXJ0U3RhdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmFzaWNCbG9ja1N0YXJ0U3RhdGU7XG5cblxuLy8gVGVybWluYWwgbm9kZSBvZiBhIHNpbXBsZSB7QGNvZGUgKGF8YnxjKX0gYmxvY2suXG5mdW5jdGlvbiBCbG9ja0VuZFN0YXRlKCkge1xuXHRBVE5TdGF0ZS5jYWxsKHRoaXMpO1xuXHR0aGlzLnN0YXRlVHlwZSA9IEFUTlN0YXRlLkJMT0NLX0VORDtcbiAgICB0aGlzLnN0YXJ0U3RhdGUgPSBudWxsO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5CbG9ja0VuZFN0YXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQVROU3RhdGUucHJvdG90eXBlKTtcbkJsb2NrRW5kU3RhdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmxvY2tFbmRTdGF0ZTtcblxuXG4vLyBUaGUgbGFzdCBub2RlIGluIHRoZSBBVE4gZm9yIGEgcnVsZSwgdW5sZXNzIHRoYXQgcnVsZSBpcyB0aGUgc3RhcnQgc3ltYm9sLlxuLy8gIEluIHRoYXQgY2FzZSwgdGhlcmUgaXMgb25lIHRyYW5zaXRpb24gdG8gRU9GLiBMYXRlciwgd2UgbWlnaHQgZW5jb2RlXG4vLyAgcmVmZXJlbmNlcyB0byBhbGwgY2FsbHMgdG8gdGhpcyBydWxlIHRvIGNvbXB1dGUgRk9MTE9XIHNldHMgZm9yXG4vLyAgZXJyb3IgaGFuZGxpbmcuXG4vL1xuZnVuY3Rpb24gUnVsZVN0b3BTdGF0ZSgpIHtcblx0QVROU3RhdGUuY2FsbCh0aGlzKTtcbiAgICB0aGlzLnN0YXRlVHlwZSA9IEFUTlN0YXRlLlJVTEVfU1RPUDtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuUnVsZVN0b3BTdGF0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFUTlN0YXRlLnByb3RvdHlwZSk7XG5SdWxlU3RvcFN0YXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJ1bGVTdG9wU3RhdGU7XG5cbmZ1bmN0aW9uIFJ1bGVTdGFydFN0YXRlKCkge1xuXHRBVE5TdGF0ZS5jYWxsKHRoaXMpO1xuXHR0aGlzLnN0YXRlVHlwZSA9IEFUTlN0YXRlLlJVTEVfU1RBUlQ7XG5cdHRoaXMuc3RvcFN0YXRlID0gbnVsbDtcblx0dGhpcy5pc1ByZWNlZGVuY2VSdWxlID0gZmFsc2U7XG5cdHJldHVybiB0aGlzO1xufVxuXG5SdWxlU3RhcnRTdGF0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFUTlN0YXRlLnByb3RvdHlwZSk7XG5SdWxlU3RhcnRTdGF0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSdWxlU3RhcnRTdGF0ZTtcblxuLy8gRGVjaXNpb24gc3RhdGUgZm9yIHtAY29kZSBBK30gYW5kIHtAY29kZSAoQXxCKSt9LiAgSXQgaGFzIHR3byB0cmFuc2l0aW9uczpcbi8vICBvbmUgdG8gdGhlIGxvb3AgYmFjayB0byBzdGFydCBvZiB0aGUgYmxvY2sgYW5kIG9uZSB0byBleGl0LlxuLy9cbmZ1bmN0aW9uIFBsdXNMb29wYmFja1N0YXRlKCkge1xuXHREZWNpc2lvblN0YXRlLmNhbGwodGhpcyk7XG5cdHRoaXMuc3RhdGVUeXBlID0gQVROU3RhdGUuUExVU19MT09QX0JBQ0s7XG5cdHJldHVybiB0aGlzO1xufVxuXG5QbHVzTG9vcGJhY2tTdGF0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERlY2lzaW9uU3RhdGUucHJvdG90eXBlKTtcblBsdXNMb29wYmFja1N0YXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBsdXNMb29wYmFja1N0YXRlO1xuXG5cbi8vIFN0YXJ0IG9mIHtAY29kZSAoQXxCfC4uLikrfSBsb29wLiBUZWNobmljYWxseSBhIGRlY2lzaW9uIHN0YXRlLCBidXRcbi8vICB3ZSBkb24ndCB1c2UgZm9yIGNvZGUgZ2VuZXJhdGlvbjsgc29tZWJvZHkgbWlnaHQgbmVlZCBpdCwgc28gSSdtIGRlZmluaW5nXG4vLyAgaXQgZm9yIGNvbXBsZXRlbmVzcy4gSW4gcmVhbGl0eSwgdGhlIHtAbGluayBQbHVzTG9vcGJhY2tTdGF0ZX0gbm9kZSBpcyB0aGVcbi8vICByZWFsIGRlY2lzaW9uLW1ha2luZyBub3RlIGZvciB7QGNvZGUgQSt9LlxuLy9cbmZ1bmN0aW9uIFBsdXNCbG9ja1N0YXJ0U3RhdGUoKSB7XG5cdEJsb2NrU3RhcnRTdGF0ZS5jYWxsKHRoaXMpO1xuXHR0aGlzLnN0YXRlVHlwZSA9IEFUTlN0YXRlLlBMVVNfQkxPQ0tfU1RBUlQ7XG4gICAgdGhpcy5sb29wQmFja1N0YXRlID0gbnVsbDtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuUGx1c0Jsb2NrU3RhcnRTdGF0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJsb2NrU3RhcnRTdGF0ZS5wcm90b3R5cGUpO1xuUGx1c0Jsb2NrU3RhcnRTdGF0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQbHVzQmxvY2tTdGFydFN0YXRlO1xuXG4vLyBUaGUgYmxvY2sgdGhhdCBiZWdpbnMgYSBjbG9zdXJlIGxvb3AuXG5mdW5jdGlvbiBTdGFyQmxvY2tTdGFydFN0YXRlKCkge1xuXHRCbG9ja1N0YXJ0U3RhdGUuY2FsbCh0aGlzKTtcblx0dGhpcy5zdGF0ZVR5cGUgPSBBVE5TdGF0ZS5TVEFSX0JMT0NLX1NUQVJUO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuU3RhckJsb2NrU3RhcnRTdGF0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJsb2NrU3RhcnRTdGF0ZS5wcm90b3R5cGUpO1xuU3RhckJsb2NrU3RhcnRTdGF0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTdGFyQmxvY2tTdGFydFN0YXRlO1xuXG5cbmZ1bmN0aW9uIFN0YXJMb29wYmFja1N0YXRlKCkge1xuXHRBVE5TdGF0ZS5jYWxsKHRoaXMpO1xuXHR0aGlzLnN0YXRlVHlwZSA9IEFUTlN0YXRlLlNUQVJfTE9PUF9CQUNLO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuU3Rhckxvb3BiYWNrU3RhdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBVE5TdGF0ZS5wcm90b3R5cGUpO1xuU3Rhckxvb3BiYWNrU3RhdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3Rhckxvb3BiYWNrU3RhdGU7XG5cblxuZnVuY3Rpb24gU3Rhckxvb3BFbnRyeVN0YXRlKCkge1xuXHREZWNpc2lvblN0YXRlLmNhbGwodGhpcyk7XG5cdHRoaXMuc3RhdGVUeXBlID0gQVROU3RhdGUuU1RBUl9MT09QX0VOVFJZO1xuICAgIHRoaXMubG9vcEJhY2tTdGF0ZSA9IG51bGw7XG4gICAgLy8gSW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBzdGF0ZSBjYW4gYmVuZWZpdCBmcm9tIGEgcHJlY2VkZW5jZSBERkEgZHVyaW5nIFNMTCBkZWNpc2lvbiBtYWtpbmcuXG4gICAgdGhpcy5pc1ByZWNlZGVuY2VEZWNpc2lvbiA9IG51bGw7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cblN0YXJMb29wRW50cnlTdGF0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERlY2lzaW9uU3RhdGUucHJvdG90eXBlKTtcblN0YXJMb29wRW50cnlTdGF0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTdGFyTG9vcEVudHJ5U3RhdGU7XG5cblxuLy8gTWFyayB0aGUgZW5kIG9mIGEgKiBvciArIGxvb3AuXG5mdW5jdGlvbiBMb29wRW5kU3RhdGUoKSB7XG5cdEFUTlN0YXRlLmNhbGwodGhpcyk7XG5cdHRoaXMuc3RhdGVUeXBlID0gQVROU3RhdGUuTE9PUF9FTkQ7XG5cdHRoaXMubG9vcEJhY2tTdGF0ZSA9IG51bGw7XG5cdHJldHVybiB0aGlzO1xufVxuXG5Mb29wRW5kU3RhdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBVE5TdGF0ZS5wcm90b3R5cGUpO1xuTG9vcEVuZFN0YXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExvb3BFbmRTdGF0ZTtcblxuXG4vLyBUaGUgVG9rZW5zIHJ1bGUgc3RhcnQgc3RhdGUgbGlua2luZyB0byBlYWNoIGxleGVyIHJ1bGUgc3RhcnQgc3RhdGUgKi9cbmZ1bmN0aW9uIFRva2Vuc1N0YXJ0U3RhdGUoKSB7XG5cdERlY2lzaW9uU3RhdGUuY2FsbCh0aGlzKTtcblx0dGhpcy5zdGF0ZVR5cGUgPSBBVE5TdGF0ZS5UT0tFTl9TVEFSVDtcblx0cmV0dXJuIHRoaXM7XG59XG5cblRva2Vuc1N0YXJ0U3RhdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShEZWNpc2lvblN0YXRlLnByb3RvdHlwZSk7XG5Ub2tlbnNTdGFydFN0YXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRva2Vuc1N0YXJ0U3RhdGU7XG5cbmV4cG9ydHMuQVROU3RhdGUgPSBBVE5TdGF0ZTtcbmV4cG9ydHMuQmFzaWNTdGF0ZSA9IEJhc2ljU3RhdGU7XG5leHBvcnRzLkRlY2lzaW9uU3RhdGUgPSBEZWNpc2lvblN0YXRlO1xuZXhwb3J0cy5CbG9ja1N0YXJ0U3RhdGUgPSBCbG9ja1N0YXJ0U3RhdGU7XG5leHBvcnRzLkJsb2NrRW5kU3RhdGUgPSBCbG9ja0VuZFN0YXRlO1xuZXhwb3J0cy5Mb29wRW5kU3RhdGUgPSBMb29wRW5kU3RhdGU7XG5leHBvcnRzLlJ1bGVTdGFydFN0YXRlID0gUnVsZVN0YXJ0U3RhdGU7XG5leHBvcnRzLlJ1bGVTdG9wU3RhdGUgPSBSdWxlU3RvcFN0YXRlO1xuZXhwb3J0cy5Ub2tlbnNTdGFydFN0YXRlID0gVG9rZW5zU3RhcnRTdGF0ZTtcbmV4cG9ydHMuUGx1c0xvb3BiYWNrU3RhdGUgPSBQbHVzTG9vcGJhY2tTdGF0ZTtcbmV4cG9ydHMuU3Rhckxvb3BiYWNrU3RhdGUgPSBTdGFyTG9vcGJhY2tTdGF0ZTtcbmV4cG9ydHMuU3Rhckxvb3BFbnRyeVN0YXRlID0gU3Rhckxvb3BFbnRyeVN0YXRlO1xuZXhwb3J0cy5QbHVzQmxvY2tTdGFydFN0YXRlID0gUGx1c0Jsb2NrU3RhcnRTdGF0ZTtcbmV4cG9ydHMuU3RhckJsb2NrU3RhcnRTdGF0ZSA9IFN0YXJCbG9ja1N0YXJ0U3RhdGU7XG5leHBvcnRzLkJhc2ljQmxvY2tTdGFydFN0YXRlID0gQmFzaWNCbG9ja1N0YXJ0U3RhdGU7XG4iLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vLy9cblxuLy8gUmVwcmVzZW50cyB0aGUgdHlwZSBvZiByZWNvZ25pemVyIGFuIEFUTiBhcHBsaWVzIHRvLlxuXG5mdW5jdGlvbiBBVE5UeXBlKCkge1xuXG59XG5cbkFUTlR5cGUuTEVYRVIgPSAwO1xuQVROVHlwZS5QQVJTRVIgPSAxO1xuXG5leHBvcnRzLkFUTlR5cGUgPSBBVE5UeXBlO1xuXG4iLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy8vXG5cbi8vIFdoZW4gd2UgaGl0IGFuIGFjY2VwdCBzdGF0ZSBpbiBlaXRoZXIgdGhlIERGQSBvciB0aGUgQVROLCB3ZVxuLy8gIGhhdmUgdG8gbm90aWZ5IHRoZSBjaGFyYWN0ZXIgc3RyZWFtIHRvIHN0YXJ0IGJ1ZmZlcmluZyBjaGFyYWN0ZXJzXG4vLyAgdmlhIHtAbGluayBJbnRTdHJlYW0vL21hcmt9IGFuZCByZWNvcmQgdGhlIGN1cnJlbnQgc3RhdGUuIFRoZSBjdXJyZW50IHNpbSBzdGF0ZVxuLy8gIGluY2x1ZGVzIHRoZSBjdXJyZW50IGluZGV4IGludG8gdGhlIGlucHV0LCB0aGUgY3VycmVudCBsaW5lLFxuLy8gIGFuZCBjdXJyZW50IGNoYXJhY3RlciBwb3NpdGlvbiBpbiB0aGF0IGxpbmUuIE5vdGUgdGhhdCB0aGUgTGV4ZXIgaXNcbi8vICB0cmFja2luZyB0aGUgc3RhcnRpbmcgbGluZSBhbmQgY2hhcmFjdGVyaXphdGlvbiBvZiB0aGUgdG9rZW4uIFRoZXNlXG4vLyAgdmFyaWFibGVzIHRyYWNrIHRoZSBcInN0YXRlXCIgb2YgdGhlIHNpbXVsYXRvciB3aGVuIGl0IGhpdHMgYW4gYWNjZXB0IHN0YXRlLlxuLy9cbi8vICA8cD5XZSB0cmFjayB0aGVzZSB2YXJpYWJsZXMgc2VwYXJhdGVseSBmb3IgdGhlIERGQSBhbmQgQVROIHNpbXVsYXRpb25cbi8vICBiZWNhdXNlIHRoZSBERkEgc2ltdWxhdGlvbiBvZnRlbiBoYXMgdG8gZmFpbCBvdmVyIHRvIHRoZSBBVE5cbi8vICBzaW11bGF0aW9uLiBJZiB0aGUgQVROIHNpbXVsYXRpb24gZmFpbHMsIHdlIG5lZWQgdGhlIERGQSB0byBmYWxsXG4vLyAgYmFjayB0byBpdHMgcHJldmlvdXNseSBhY2NlcHRlZCBzdGF0ZSwgaWYgYW55LiBJZiB0aGUgQVROIHN1Y2NlZWRzLFxuLy8gIHRoZW4gdGhlIEFUTiBkb2VzIHRoZSBhY2NlcHQgYW5kIHRoZSBERkEgc2ltdWxhdG9yIHRoYXQgaW52b2tlZCBpdFxuLy8gIGNhbiBzaW1wbHkgcmV0dXJuIHRoZSBwcmVkaWN0ZWQgdG9rZW4gdHlwZS48L3A+XG4vLy9cblxudmFyIFRva2VuID0gcmVxdWlyZSgnLi8uLi9Ub2tlbicpLlRva2VuO1xudmFyIExleGVyID0gcmVxdWlyZSgnLi8uLi9MZXhlcicpLkxleGVyO1xudmFyIEFUTiA9IHJlcXVpcmUoJy4vQVROJykuQVROO1xudmFyIEFUTlNpbXVsYXRvciA9IHJlcXVpcmUoJy4vQVROU2ltdWxhdG9yJykuQVROU2ltdWxhdG9yO1xudmFyIERGQVN0YXRlID0gcmVxdWlyZSgnLi8uLi9kZmEvREZBU3RhdGUnKS5ERkFTdGF0ZTtcbnZhciBBVE5Db25maWdTZXQgPSByZXF1aXJlKCcuL0FUTkNvbmZpZ1NldCcpLkFUTkNvbmZpZ1NldDtcbnZhciBPcmRlcmVkQVROQ29uZmlnU2V0ID0gcmVxdWlyZSgnLi9BVE5Db25maWdTZXQnKS5PcmRlcmVkQVROQ29uZmlnU2V0O1xudmFyIFByZWRpY3Rpb25Db250ZXh0ID0gcmVxdWlyZSgnLi8uLi9QcmVkaWN0aW9uQ29udGV4dCcpLlByZWRpY3Rpb25Db250ZXh0O1xudmFyIFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0ID0gcmVxdWlyZSgnLi8uLi9QcmVkaWN0aW9uQ29udGV4dCcpLlNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0O1xudmFyIFJ1bGVTdG9wU3RhdGUgPSByZXF1aXJlKCcuL0FUTlN0YXRlJykuUnVsZVN0b3BTdGF0ZTtcbnZhciBMZXhlckFUTkNvbmZpZyA9IHJlcXVpcmUoJy4vQVROQ29uZmlnJykuTGV4ZXJBVE5Db25maWc7XG52YXIgVHJhbnNpdGlvbiA9IHJlcXVpcmUoJy4vVHJhbnNpdGlvbicpLlRyYW5zaXRpb247XG52YXIgTGV4ZXJBY3Rpb25FeGVjdXRvciA9IHJlcXVpcmUoJy4vTGV4ZXJBY3Rpb25FeGVjdXRvcicpLkxleGVyQWN0aW9uRXhlY3V0b3I7XG52YXIgTGV4ZXJOb1ZpYWJsZUFsdEV4Y2VwdGlvbiA9IHJlcXVpcmUoJy4vLi4vZXJyb3IvRXJyb3JzJykuTGV4ZXJOb1ZpYWJsZUFsdEV4Y2VwdGlvbjtcblxuZnVuY3Rpb24gcmVzZXRTaW1TdGF0ZShzaW0pIHtcblx0c2ltLmluZGV4ID0gLTE7XG5cdHNpbS5saW5lID0gMDtcblx0c2ltLmNvbHVtbiA9IC0xO1xuXHRzaW0uZGZhU3RhdGUgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBTaW1TdGF0ZSgpIHtcblx0cmVzZXRTaW1TdGF0ZSh0aGlzKTtcblx0cmV0dXJuIHRoaXM7XG59XG5cblNpbVN0YXRlLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKCkge1xuXHRyZXNldFNpbVN0YXRlKHRoaXMpO1xufTtcblxuZnVuY3Rpb24gTGV4ZXJBVE5TaW11bGF0b3IocmVjb2csIGF0biwgZGVjaXNpb25Ub0RGQSwgc2hhcmVkQ29udGV4dENhY2hlKSB7XG5cdEFUTlNpbXVsYXRvci5jYWxsKHRoaXMsIGF0biwgc2hhcmVkQ29udGV4dENhY2hlKTtcblx0dGhpcy5kZWNpc2lvblRvREZBID0gZGVjaXNpb25Ub0RGQTtcblx0dGhpcy5yZWNvZyA9IHJlY29nO1xuXHQvLyBUaGUgY3VycmVudCB0b2tlbidzIHN0YXJ0aW5nIGluZGV4IGludG8gdGhlIGNoYXJhY3RlciBzdHJlYW0uXG5cdC8vIFNoYXJlZCBhY3Jvc3MgREZBIHRvIEFUTiBzaW11bGF0aW9uIGluIGNhc2UgdGhlIEFUTiBmYWlscyBhbmQgdGhlXG5cdC8vIERGQSBkaWQgbm90IGhhdmUgYSBwcmV2aW91cyBhY2NlcHQgc3RhdGUuIEluIHRoaXMgY2FzZSwgd2UgdXNlIHRoZVxuXHQvLyBBVE4tZ2VuZXJhdGVkIGV4Y2VwdGlvbiBvYmplY3QuXG5cdHRoaXMuc3RhcnRJbmRleCA9IC0xO1xuXHQvLyBsaW5lIG51bWJlciAxLi5uIHdpdGhpbiB0aGUgaW5wdXQvLy9cblx0dGhpcy5saW5lID0gMTtcblx0Ly8gVGhlIGluZGV4IG9mIHRoZSBjaGFyYWN0ZXIgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGluZVxuXHQvLyAwLi5uLTEvLy9cblx0dGhpcy5jb2x1bW4gPSAwO1xuXHR0aGlzLm1vZGUgPSBMZXhlci5ERUZBVUxUX01PREU7XG5cdC8vIFVzZWQgZHVyaW5nIERGQS9BVE4gZXhlYyB0byByZWNvcmQgdGhlIG1vc3QgcmVjZW50IGFjY2VwdCBjb25maWd1cmF0aW9uXG5cdC8vIGluZm9cblx0dGhpcy5wcmV2QWNjZXB0ID0gbmV3IFNpbVN0YXRlKCk7XG5cdC8vIGRvbmVcblx0cmV0dXJuIHRoaXM7XG59XG5cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQVROU2ltdWxhdG9yLnByb3RvdHlwZSk7XG5MZXhlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMZXhlckFUTlNpbXVsYXRvcjtcblxuTGV4ZXJBVE5TaW11bGF0b3IuZGVidWcgPSBmYWxzZTtcbkxleGVyQVROU2ltdWxhdG9yLmRmYV9kZWJ1ZyA9IGZhbHNlO1xuXG5MZXhlckFUTlNpbXVsYXRvci5NSU5fREZBX0VER0UgPSAwO1xuTGV4ZXJBVE5TaW11bGF0b3IuTUFYX0RGQV9FREdFID0gMTI3OyAvLyBmb3JjZXMgdW5pY29kZSB0byBzdGF5IGluIEFUTlxuXG5MZXhlckFUTlNpbXVsYXRvci5tYXRjaF9jYWxscyA9IDA7XG5cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5jb3B5U3RhdGUgPSBmdW5jdGlvbihzaW11bGF0b3IpIHtcblx0dGhpcy5jb2x1bW4gPSBzaW11bGF0b3IuY29sdW1uO1xuXHR0aGlzLmxpbmUgPSBzaW11bGF0b3IubGluZTtcblx0dGhpcy5tb2RlID0gc2ltdWxhdG9yLm1vZGU7XG5cdHRoaXMuc3RhcnRJbmRleCA9IHNpbXVsYXRvci5zdGFydEluZGV4O1xufTtcblxuTGV4ZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLm1hdGNoID0gZnVuY3Rpb24oaW5wdXQsIG1vZGUpIHtcblx0dGhpcy5tYXRjaF9jYWxscyArPSAxO1xuXHR0aGlzLm1vZGUgPSBtb2RlO1xuXHR2YXIgbWFyayA9IGlucHV0Lm1hcmsoKTtcblx0dHJ5IHtcblx0XHR0aGlzLnN0YXJ0SW5kZXggPSBpbnB1dC5pbmRleDtcblx0XHR0aGlzLnByZXZBY2NlcHQucmVzZXQoKTtcblx0XHR2YXIgZGZhID0gdGhpcy5kZWNpc2lvblRvREZBW21vZGVdO1xuXHRcdGlmIChkZmEuczAgPT09IG51bGwpIHtcblx0XHRcdHJldHVybiB0aGlzLm1hdGNoQVROKGlucHV0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMuZXhlY0FUTihpbnB1dCwgZGZhLnMwKTtcblx0XHR9XG5cdH0gZmluYWxseSB7XG5cdFx0aW5wdXQucmVsZWFzZShtYXJrKTtcblx0fVxufTtcblxuTGV4ZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMucHJldkFjY2VwdC5yZXNldCgpO1xuXHR0aGlzLnN0YXJ0SW5kZXggPSAtMTtcblx0dGhpcy5saW5lID0gMTtcblx0dGhpcy5jb2x1bW4gPSAwO1xuXHR0aGlzLm1vZGUgPSBMZXhlci5ERUZBVUxUX01PREU7XG59O1xuXG5MZXhlckFUTlNpbXVsYXRvci5wcm90b3R5cGUubWF0Y2hBVE4gPSBmdW5jdGlvbihpbnB1dCkge1xuXHR2YXIgc3RhcnRTdGF0ZSA9IHRoaXMuYXRuLm1vZGVUb1N0YXJ0U3RhdGVbdGhpcy5tb2RlXTtcblxuXHRpZiAoTGV4ZXJBVE5TaW11bGF0b3IuZGVidWcpIHtcblx0XHRjb25zb2xlLmxvZyhcIm1hdGNoQVROIG1vZGUgXCIgKyB0aGlzLm1vZGUgKyBcIiBzdGFydDogXCIgKyBzdGFydFN0YXRlKTtcblx0fVxuXHR2YXIgb2xkX21vZGUgPSB0aGlzLm1vZGU7XG5cdHZhciBzMF9jbG9zdXJlID0gdGhpcy5jb21wdXRlU3RhcnRTdGF0ZShpbnB1dCwgc3RhcnRTdGF0ZSk7XG5cdHZhciBzdXBwcmVzc0VkZ2UgPSBzMF9jbG9zdXJlLmhhc1NlbWFudGljQ29udGV4dDtcblx0czBfY2xvc3VyZS5oYXNTZW1hbnRpY0NvbnRleHQgPSBmYWxzZTtcblxuXHR2YXIgbmV4dCA9IHRoaXMuYWRkREZBU3RhdGUoczBfY2xvc3VyZSk7XG5cdGlmICghc3VwcHJlc3NFZGdlKSB7XG5cdFx0dGhpcy5kZWNpc2lvblRvREZBW3RoaXMubW9kZV0uczAgPSBuZXh0O1xuXHR9XG5cblx0dmFyIHByZWRpY3QgPSB0aGlzLmV4ZWNBVE4oaW5wdXQsIG5leHQpO1xuXG5cdGlmIChMZXhlckFUTlNpbXVsYXRvci5kZWJ1Zykge1xuXHRcdGNvbnNvbGUubG9nKFwiREZBIGFmdGVyIG1hdGNoQVROOiBcIiArIHRoaXMuZGVjaXNpb25Ub0RGQVtvbGRfbW9kZV0udG9MZXhlclN0cmluZygpKTtcblx0fVxuXHRyZXR1cm4gcHJlZGljdDtcbn07XG5cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5leGVjQVROID0gZnVuY3Rpb24oaW5wdXQsIGRzMCkge1xuXHRpZiAoTGV4ZXJBVE5TaW11bGF0b3IuZGVidWcpIHtcblx0XHRjb25zb2xlLmxvZyhcInN0YXJ0IHN0YXRlIGNsb3N1cmU9XCIgKyBkczAuY29uZmlncyk7XG5cdH1cblx0aWYgKGRzMC5pc0FjY2VwdFN0YXRlKSB7XG5cdFx0Ly8gYWxsb3cgemVyby1sZW5ndGggdG9rZW5zXG5cdFx0dGhpcy5jYXB0dXJlU2ltU3RhdGUodGhpcy5wcmV2QWNjZXB0LCBpbnB1dCwgZHMwKTtcblx0fVxuXHR2YXIgdCA9IGlucHV0LkxBKDEpO1xuXHR2YXIgcyA9IGRzMDsgLy8gcyBpcyBjdXJyZW50L2Zyb20gREZBIHN0YXRlXG5cblx0d2hpbGUgKHRydWUpIHsgLy8gd2hpbGUgbW9yZSB3b3JrXG5cdFx0aWYgKExleGVyQVROU2ltdWxhdG9yLmRlYnVnKSB7XG5cdFx0XHRjb25zb2xlLmxvZyhcImV4ZWNBVE4gbG9vcCBzdGFydGluZyBjbG9zdXJlOiBcIiArIHMuY29uZmlncyk7XG5cdFx0fVxuXG5cdFx0Ly8gQXMgd2UgbW92ZSBzcmMtPnRyZywgc3JjLT50cmcsIHdlIGtlZXAgdHJhY2sgb2YgdGhlIHByZXZpb3VzIHRyZyB0b1xuXHRcdC8vIGF2b2lkIGxvb2tpbmcgdXAgdGhlIERGQSBzdGF0ZSBhZ2Fpbiwgd2hpY2ggaXMgZXhwZW5zaXZlLlxuXHRcdC8vIElmIHRoZSBwcmV2aW91cyB0YXJnZXQgd2FzIGFscmVhZHkgcGFydCBvZiB0aGUgREZBLCB3ZSBtaWdodFxuXHRcdC8vIGJlIGFibGUgdG8gYXZvaWQgZG9pbmcgYSByZWFjaCBvcGVyYXRpb24gdXBvbiB0LiBJZiBzIT1udWxsLFxuXHRcdC8vIGl0IG1lYW5zIHRoYXQgc2VtYW50aWMgcHJlZGljYXRlcyBkaWRuJ3QgcHJldmVudCB1cyBmcm9tXG5cdFx0Ly8gY3JlYXRpbmcgYSBERkEgc3RhdGUuIE9uY2Ugd2Uga25vdyBzIT1udWxsLCB3ZSBjaGVjayB0byBzZWUgaWZcblx0XHQvLyB0aGUgREZBIHN0YXRlIGhhcyBhbiBlZGdlIGFscmVhZHkgZm9yIHQuIElmIHNvLCB3ZSBjYW4ganVzdCByZXVzZVxuXHRcdC8vIGl0J3MgY29uZmlndXJhdGlvbiBzZXQ7IHRoZXJlJ3Mgbm8gcG9pbnQgaW4gcmUtY29tcHV0aW5nIGl0LlxuXHRcdC8vIFRoaXMgaXMga2luZCBvZiBsaWtlIGRvaW5nIERGQSBzaW11bGF0aW9uIHdpdGhpbiB0aGUgQVROXG5cdFx0Ly8gc2ltdWxhdGlvbiBiZWNhdXNlIERGQSBzaW11bGF0aW9uIGlzIHJlYWxseSBqdXN0IGEgd2F5IHRvIGF2b2lkXG5cdFx0Ly8gY29tcHV0aW5nIHJlYWNoL2Nsb3N1cmUgc2V0cy4gVGVjaG5pY2FsbHksIG9uY2Ugd2Uga25vdyB0aGF0XG5cdFx0Ly8gd2UgaGF2ZSBhIHByZXZpb3VzbHkgYWRkZWQgREZBIHN0YXRlLCB3ZSBjb3VsZCBqdW1wIG92ZXIgdG9cblx0XHQvLyB0aGUgREZBIHNpbXVsYXRvci4gQnV0LCB0aGF0IHdvdWxkIG1lYW4gcG9wcGluZyBiYWNrIGFuZCBmb3J0aFxuXHRcdC8vIGEgbG90IGFuZCBtYWtpbmcgdGhpbmdzIG1vcmUgY29tcGxpY2F0ZWQgYWxnb3JpdGhtaWNhbGx5LlxuXHRcdC8vIFRoaXMgb3B0aW1pemF0aW9uIG1ha2VzIGEgbG90IG9mIHNlbnNlIGZvciBsb29wcyB3aXRoaW4gREZBLlxuXHRcdC8vIEEgY2hhcmFjdGVyIHdpbGwgdGFrZSB1cyBiYWNrIHRvIGFuIGV4aXN0aW5nIERGQSBzdGF0ZVxuXHRcdC8vIHRoYXQgYWxyZWFkeSBoYXMgbG90cyBvZiBlZGdlcyBvdXQgb2YgaXQuIGUuZy4sIC4qIGluIGNvbW1lbnRzLlxuXHRcdC8vIHByaW50KFwiVGFyZ2V0IGZvcjpcIiArIHN0cihzKSArIFwiIGFuZDpcIiArIHN0cih0KSlcblx0XHR2YXIgdGFyZ2V0ID0gdGhpcy5nZXRFeGlzdGluZ1RhcmdldFN0YXRlKHMsIHQpO1xuXHRcdC8vIHByaW50KFwiRXhpc3Rpbmc6XCIgKyBzdHIodGFyZ2V0KSlcblx0XHRpZiAodGFyZ2V0ID09PSBudWxsKSB7XG5cdFx0XHR0YXJnZXQgPSB0aGlzLmNvbXB1dGVUYXJnZXRTdGF0ZShpbnB1dCwgcywgdCk7XG5cdFx0XHQvLyBwcmludChcIkNvbXB1dGVkOlwiICsgc3RyKHRhcmdldCkpXG5cdFx0fVxuXHRcdGlmICh0YXJnZXQgPT09IEFUTlNpbXVsYXRvci5FUlJPUikge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdC8vIElmIHRoaXMgaXMgYSBjb25zdW1hYmxlIGlucHV0IGVsZW1lbnQsIG1ha2Ugc3VyZSB0byBjb25zdW1lIGJlZm9yZVxuXHRcdC8vIGNhcHR1cmluZyB0aGUgYWNjZXB0IHN0YXRlIHNvIHRoZSBpbnB1dCBpbmRleCwgbGluZSwgYW5kIGNoYXJcblx0XHQvLyBwb3NpdGlvbiBhY2N1cmF0ZWx5IHJlZmxlY3QgdGhlIHN0YXRlIG9mIHRoZSBpbnRlcnByZXRlciBhdCB0aGVcblx0XHQvLyBlbmQgb2YgdGhlIHRva2VuLlxuXHRcdGlmICh0ICE9PSBUb2tlbi5FT0YpIHtcblx0XHRcdHRoaXMuY29uc3VtZShpbnB1dCk7XG5cdFx0fVxuXHRcdGlmICh0YXJnZXQuaXNBY2NlcHRTdGF0ZSkge1xuXHRcdFx0dGhpcy5jYXB0dXJlU2ltU3RhdGUodGhpcy5wcmV2QWNjZXB0LCBpbnB1dCwgdGFyZ2V0KTtcblx0XHRcdGlmICh0ID09PSBUb2tlbi5FT0YpIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHQgPSBpbnB1dC5MQSgxKTtcblx0XHRzID0gdGFyZ2V0OyAvLyBmbGlwOyBjdXJyZW50IERGQSB0YXJnZXQgYmVjb21lcyBuZXcgc3JjL2Zyb20gc3RhdGVcblx0fVxuXHRyZXR1cm4gdGhpcy5mYWlsT3JBY2NlcHQodGhpcy5wcmV2QWNjZXB0LCBpbnB1dCwgcy5jb25maWdzLCB0KTtcbn07XG5cbi8vIEdldCBhbiBleGlzdGluZyB0YXJnZXQgc3RhdGUgZm9yIGFuIGVkZ2UgaW4gdGhlIERGQS4gSWYgdGhlIHRhcmdldCBzdGF0ZVxuLy8gZm9yIHRoZSBlZGdlIGhhcyBub3QgeWV0IGJlZW4gY29tcHV0ZWQgb3IgaXMgb3RoZXJ3aXNlIG5vdCBhdmFpbGFibGUsXG4vLyB0aGlzIG1ldGhvZCByZXR1cm5zIHtAY29kZSBudWxsfS5cbi8vXG4vLyBAcGFyYW0gcyBUaGUgY3VycmVudCBERkEgc3RhdGVcbi8vIEBwYXJhbSB0IFRoZSBuZXh0IGlucHV0IHN5bWJvbFxuLy8gQHJldHVybiBUaGUgZXhpc3RpbmcgdGFyZ2V0IERGQSBzdGF0ZSBmb3IgdGhlIGdpdmVuIGlucHV0IHN5bWJvbFxuLy8ge0Bjb2RlIHR9LCBvciB7QGNvZGUgbnVsbH0gaWYgdGhlIHRhcmdldCBzdGF0ZSBmb3IgdGhpcyBlZGdlIGlzIG5vdFxuLy8gYWxyZWFkeSBjYWNoZWRcbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5nZXRFeGlzdGluZ1RhcmdldFN0YXRlID0gZnVuY3Rpb24ocywgdCkge1xuXHRpZiAocy5lZGdlcyA9PT0gbnVsbCB8fCB0IDwgTGV4ZXJBVE5TaW11bGF0b3IuTUlOX0RGQV9FREdFIHx8IHQgPiBMZXhlckFUTlNpbXVsYXRvci5NQVhfREZBX0VER0UpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdHZhciB0YXJnZXQgPSBzLmVkZ2VzW3QgLSBMZXhlckFUTlNpbXVsYXRvci5NSU5fREZBX0VER0VdO1xuXHRpZih0YXJnZXQ9PT11bmRlZmluZWQpIHtcblx0XHR0YXJnZXQgPSBudWxsO1xuXHR9XG5cdGlmIChMZXhlckFUTlNpbXVsYXRvci5kZWJ1ZyAmJiB0YXJnZXQgIT09IG51bGwpIHtcblx0XHRjb25zb2xlLmxvZyhcInJldXNlIHN0YXRlIFwiICsgcy5zdGF0ZU51bWJlciArIFwiIGVkZ2UgdG8gXCIgKyB0YXJnZXQuc3RhdGVOdW1iZXIpO1xuXHR9XG5cdHJldHVybiB0YXJnZXQ7XG59O1xuXG4vLyBDb21wdXRlIGEgdGFyZ2V0IHN0YXRlIGZvciBhbiBlZGdlIGluIHRoZSBERkEsIGFuZCBhdHRlbXB0IHRvIGFkZCB0aGVcbi8vIGNvbXB1dGVkIHN0YXRlIGFuZCBjb3JyZXNwb25kaW5nIGVkZ2UgdG8gdGhlIERGQS5cbi8vXG4vLyBAcGFyYW0gaW5wdXQgVGhlIGlucHV0IHN0cmVhbVxuLy8gQHBhcmFtIHMgVGhlIGN1cnJlbnQgREZBIHN0YXRlXG4vLyBAcGFyYW0gdCBUaGUgbmV4dCBpbnB1dCBzeW1ib2xcbi8vXG4vLyBAcmV0dXJuIFRoZSBjb21wdXRlZCB0YXJnZXQgREZBIHN0YXRlIGZvciB0aGUgZ2l2ZW4gaW5wdXQgc3ltYm9sXG4vLyB7QGNvZGUgdH0uIElmIHtAY29kZSB0fSBkb2VzIG5vdCBsZWFkIHRvIGEgdmFsaWQgREZBIHN0YXRlLCB0aGlzIG1ldGhvZFxuLy8gcmV0dXJucyB7QGxpbmsgLy9FUlJPUn0uXG5MZXhlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuY29tcHV0ZVRhcmdldFN0YXRlID0gZnVuY3Rpb24oaW5wdXQsIHMsIHQpIHtcblx0dmFyIHJlYWNoID0gbmV3IE9yZGVyZWRBVE5Db25maWdTZXQoKTtcblx0Ly8gaWYgd2UgZG9uJ3QgZmluZCBhbiBleGlzdGluZyBERkEgc3RhdGVcblx0Ly8gRmlsbCByZWFjaCBzdGFydGluZyBmcm9tIGNsb3N1cmUsIGZvbGxvd2luZyB0IHRyYW5zaXRpb25zXG5cdHRoaXMuZ2V0UmVhY2hhYmxlQ29uZmlnU2V0KGlucHV0LCBzLmNvbmZpZ3MsIHJlYWNoLCB0KTtcblxuXHRpZiAocmVhY2guaXRlbXMubGVuZ3RoID09PSAwKSB7IC8vIHdlIGdvdCBub3doZXJlIG9uIHQgZnJvbSBzXG5cdFx0aWYgKCFyZWFjaC5oYXNTZW1hbnRpY0NvbnRleHQpIHtcblx0XHRcdC8vIHdlIGdvdCBub3doZXJlIG9uIHQsIGRvbid0IHRocm93IG91dCB0aGlzIGtub3dsZWRnZTsgaXQnZFxuXHRcdFx0Ly8gY2F1c2UgYSBmYWlsb3ZlciBmcm9tIERGQSBsYXRlci5cblx0XHRcdHRoaXMuYWRkREZBRWRnZShzLCB0LCBBVE5TaW11bGF0b3IuRVJST1IpO1xuXHRcdH1cblx0XHQvLyBzdG9wIHdoZW4gd2UgY2FuJ3QgbWF0Y2ggYW55IG1vcmUgY2hhclxuXHRcdHJldHVybiBBVE5TaW11bGF0b3IuRVJST1I7XG5cdH1cblx0Ly8gQWRkIGFuIGVkZ2UgZnJvbSBzIHRvIHRhcmdldCBERkEgZm91bmQvY3JlYXRlZCBmb3IgcmVhY2hcblx0cmV0dXJuIHRoaXMuYWRkREZBRWRnZShzLCB0LCBudWxsLCByZWFjaCk7XG59O1xuXG5MZXhlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZmFpbE9yQWNjZXB0ID0gZnVuY3Rpb24ocHJldkFjY2VwdCwgaW5wdXQsIHJlYWNoLCB0KSB7XG5cdGlmICh0aGlzLnByZXZBY2NlcHQuZGZhU3RhdGUgIT09IG51bGwpIHtcblx0XHR2YXIgbGV4ZXJBY3Rpb25FeGVjdXRvciA9IHByZXZBY2NlcHQuZGZhU3RhdGUubGV4ZXJBY3Rpb25FeGVjdXRvcjtcblx0XHR0aGlzLmFjY2VwdChpbnB1dCwgbGV4ZXJBY3Rpb25FeGVjdXRvciwgdGhpcy5zdGFydEluZGV4LFxuXHRcdFx0XHRwcmV2QWNjZXB0LmluZGV4LCBwcmV2QWNjZXB0LmxpbmUsIHByZXZBY2NlcHQuY29sdW1uKTtcblx0XHRyZXR1cm4gcHJldkFjY2VwdC5kZmFTdGF0ZS5wcmVkaWN0aW9uO1xuXHR9IGVsc2Uge1xuXHRcdC8vIGlmIG5vIGFjY2VwdCBhbmQgRU9GIGlzIGZpcnN0IGNoYXIsIHJldHVybiBFT0Zcblx0XHRpZiAodCA9PT0gVG9rZW4uRU9GICYmIGlucHV0LmluZGV4ID09PSB0aGlzLnN0YXJ0SW5kZXgpIHtcblx0XHRcdHJldHVybiBUb2tlbi5FT0Y7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBMZXhlck5vVmlhYmxlQWx0RXhjZXB0aW9uKHRoaXMucmVjb2csIGlucHV0LCB0aGlzLnN0YXJ0SW5kZXgsIHJlYWNoKTtcblx0fVxufTtcblxuLy8gR2l2ZW4gYSBzdGFydGluZyBjb25maWd1cmF0aW9uIHNldCwgZmlndXJlIG91dCBhbGwgQVROIGNvbmZpZ3VyYXRpb25zXG4vLyB3ZSBjYW4gcmVhY2ggdXBvbiBpbnB1dCB7QGNvZGUgdH0uIFBhcmFtZXRlciB7QGNvZGUgcmVhY2h9IGlzIGEgcmV0dXJuXG4vLyBwYXJhbWV0ZXIuXG5MZXhlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0UmVhY2hhYmxlQ29uZmlnU2V0ID0gZnVuY3Rpb24oaW5wdXQsIGNsb3N1cmUsXG5cdFx0cmVhY2gsIHQpIHtcblx0Ly8gdGhpcyBpcyB1c2VkIHRvIHNraXAgcHJvY2Vzc2luZyBmb3IgY29uZmlncyB3aGljaCBoYXZlIGEgbG93ZXIgcHJpb3JpdHlcblx0Ly8gdGhhbiBhIGNvbmZpZyB0aGF0IGFscmVhZHkgcmVhY2hlZCBhbiBhY2NlcHQgc3RhdGUgZm9yIHRoZSBzYW1lIHJ1bGVcblx0dmFyIHNraXBBbHQgPSBBVE4uSU5WQUxJRF9BTFRfTlVNQkVSO1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IGNsb3N1cmUuaXRlbXMubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgY2ZnID0gY2xvc3VyZS5pdGVtc1tpXTtcblx0XHR2YXIgY3VycmVudEFsdFJlYWNoZWRBY2NlcHRTdGF0ZSA9IChjZmcuYWx0ID09PSBza2lwQWx0KTtcblx0XHRpZiAoY3VycmVudEFsdFJlYWNoZWRBY2NlcHRTdGF0ZSAmJiBjZmcucGFzc2VkVGhyb3VnaE5vbkdyZWVkeURlY2lzaW9uKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cdFx0aWYgKExleGVyQVROU2ltdWxhdG9yLmRlYnVnKSB7XG5cdFx0XHRjb25zb2xlLmxvZyhcInRlc3RpbmcgJXMgYXQgJXNcXG5cIiwgdGhpcy5nZXRUb2tlbk5hbWUodCksIGNmZ1xuXHRcdFx0XHRcdC50b1N0cmluZyh0aGlzLnJlY29nLCB0cnVlKSk7XG5cdFx0fVxuXHRcdGZvciAodmFyIGogPSAwOyBqIDwgY2ZnLnN0YXRlLnRyYW5zaXRpb25zLmxlbmd0aDsgaisrKSB7XG5cdFx0XHR2YXIgdHJhbnMgPSBjZmcuc3RhdGUudHJhbnNpdGlvbnNbal07IC8vIGZvciBlYWNoIHRyYW5zaXRpb25cblx0XHRcdHZhciB0YXJnZXQgPSB0aGlzLmdldFJlYWNoYWJsZVRhcmdldCh0cmFucywgdCk7XG5cdFx0XHRpZiAodGFyZ2V0ICE9PSBudWxsKSB7XG5cdFx0XHRcdHZhciBsZXhlckFjdGlvbkV4ZWN1dG9yID0gY2ZnLmxleGVyQWN0aW9uRXhlY3V0b3I7XG5cdFx0XHRcdGlmIChsZXhlckFjdGlvbkV4ZWN1dG9yICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0bGV4ZXJBY3Rpb25FeGVjdXRvciA9IGxleGVyQWN0aW9uRXhlY3V0b3IuZml4T2Zmc2V0QmVmb3JlTWF0Y2goaW5wdXQuaW5kZXggLSB0aGlzLnN0YXJ0SW5kZXgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHZhciB0cmVhdEVvZkFzRXBzaWxvbiA9ICh0ID09PSBUb2tlbi5FT0YpO1xuXHRcdFx0XHR2YXIgY29uZmlnID0gbmV3IExleGVyQVROQ29uZmlnKHtzdGF0ZTp0YXJnZXQsIGxleGVyQWN0aW9uRXhlY3V0b3I6bGV4ZXJBY3Rpb25FeGVjdXRvcn0sIGNmZyk7XG5cdFx0XHRcdGlmICh0aGlzLmNsb3N1cmUoaW5wdXQsIGNvbmZpZywgcmVhY2gsXG5cdFx0XHRcdFx0XHRjdXJyZW50QWx0UmVhY2hlZEFjY2VwdFN0YXRlLCB0cnVlLCB0cmVhdEVvZkFzRXBzaWxvbikpIHtcblx0XHRcdFx0XHQvLyBhbnkgcmVtYWluaW5nIGNvbmZpZ3MgZm9yIHRoaXMgYWx0IGhhdmUgYSBsb3dlciBwcmlvcml0eVxuXHRcdFx0XHRcdC8vIHRoYW4gdGhlIG9uZSB0aGF0IGp1c3QgcmVhY2hlZCBhbiBhY2NlcHQgc3RhdGUuXG5cdFx0XHRcdFx0c2tpcEFsdCA9IGNmZy5hbHQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbihpbnB1dCwgbGV4ZXJBY3Rpb25FeGVjdXRvcixcblx0XHRzdGFydEluZGV4LCBpbmRleCwgbGluZSwgY2hhclBvcykge1xuXHRpZiAoTGV4ZXJBVE5TaW11bGF0b3IuZGVidWcpIHtcblx0XHRjb25zb2xlLmxvZyhcIkFDVElPTiAlc1xcblwiLCBsZXhlckFjdGlvbkV4ZWN1dG9yKTtcblx0fVxuXHQvLyBzZWVrIHRvIGFmdGVyIGxhc3QgY2hhciBpbiB0b2tlblxuXHRpbnB1dC5zZWVrKGluZGV4KTtcblx0dGhpcy5saW5lID0gbGluZTtcblx0dGhpcy5jb2x1bW4gPSBjaGFyUG9zO1xuXHRpZiAobGV4ZXJBY3Rpb25FeGVjdXRvciAhPT0gbnVsbCAmJiB0aGlzLnJlY29nICE9PSBudWxsKSB7XG5cdFx0bGV4ZXJBY3Rpb25FeGVjdXRvci5leGVjdXRlKHRoaXMucmVjb2csIGlucHV0LCBzdGFydEluZGV4KTtcblx0fVxufTtcblxuTGV4ZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmdldFJlYWNoYWJsZVRhcmdldCA9IGZ1bmN0aW9uKHRyYW5zLCB0KSB7XG5cdGlmICh0cmFucy5tYXRjaGVzKHQsIDAsIExleGVyLk1BWF9DSEFSX1ZBTFVFKSkge1xuXHRcdHJldHVybiB0cmFucy50YXJnZXQ7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cbn07XG5cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5jb21wdXRlU3RhcnRTdGF0ZSA9IGZ1bmN0aW9uKGlucHV0LCBwKSB7XG5cdHZhciBpbml0aWFsQ29udGV4dCA9IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZO1xuXHR2YXIgY29uZmlncyA9IG5ldyBPcmRlcmVkQVROQ29uZmlnU2V0KCk7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgcC50cmFuc2l0aW9ucy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciB0YXJnZXQgPSBwLnRyYW5zaXRpb25zW2ldLnRhcmdldDtcbiAgICAgICAgdmFyIGNmZyA9IG5ldyBMZXhlckFUTkNvbmZpZyh7c3RhdGU6dGFyZ2V0LCBhbHQ6aSsxLCBjb250ZXh0OmluaXRpYWxDb250ZXh0fSwgbnVsbCk7XG5cdFx0dGhpcy5jbG9zdXJlKGlucHV0LCBjZmcsIGNvbmZpZ3MsIGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xuXHR9XG5cdHJldHVybiBjb25maWdzO1xufTtcblxuLy8gU2luY2UgdGhlIGFsdGVybmF0aXZlcyB3aXRoaW4gYW55IGxleGVyIGRlY2lzaW9uIGFyZSBvcmRlcmVkIGJ5XG4vLyBwcmVmZXJlbmNlLCB0aGlzIG1ldGhvZCBzdG9wcyBwdXJzdWluZyB0aGUgY2xvc3VyZSBhcyBzb29uIGFzIGFuIGFjY2VwdFxuLy8gc3RhdGUgaXMgcmVhY2hlZC4gQWZ0ZXIgdGhlIGZpcnN0IGFjY2VwdCBzdGF0ZSBpcyByZWFjaGVkIGJ5IGRlcHRoLWZpcnN0XG4vLyBzZWFyY2ggZnJvbSB7QGNvZGUgY29uZmlnfSwgYWxsIG90aGVyIChwb3RlbnRpYWxseSByZWFjaGFibGUpIHN0YXRlcyBmb3Jcbi8vIHRoaXMgcnVsZSB3b3VsZCBoYXZlIGEgbG93ZXIgcHJpb3JpdHkuXG4vL1xuLy8gQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgYW4gYWNjZXB0IHN0YXRlIGlzIHJlYWNoZWQsIG90aGVyd2lzZVxuLy8ge0Bjb2RlIGZhbHNlfS5cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5jbG9zdXJlID0gZnVuY3Rpb24oaW5wdXQsIGNvbmZpZywgY29uZmlncyxcblx0XHRjdXJyZW50QWx0UmVhY2hlZEFjY2VwdFN0YXRlLCBzcGVjdWxhdGl2ZSwgdHJlYXRFb2ZBc0Vwc2lsb24pIHtcblx0dmFyIGNmZyA9IG51bGw7XG5cdGlmIChMZXhlckFUTlNpbXVsYXRvci5kZWJ1Zykge1xuXHRcdGNvbnNvbGUubG9nKFwiY2xvc3VyZShcIiArIGNvbmZpZy50b1N0cmluZyh0aGlzLnJlY29nLCB0cnVlKSArIFwiKVwiKTtcblx0fVxuXHRpZiAoY29uZmlnLnN0YXRlIGluc3RhbmNlb2YgUnVsZVN0b3BTdGF0ZSkge1xuXHRcdGlmIChMZXhlckFUTlNpbXVsYXRvci5kZWJ1Zykge1xuXHRcdFx0aWYgKHRoaXMucmVjb2cgIT09IG51bGwpIHtcblx0XHRcdFx0Y29uc29sZS5sb2coXCJjbG9zdXJlIGF0ICVzIHJ1bGUgc3RvcCAlc1xcblwiLCB0aGlzLnJlY29nLnJ1bGVOYW1lc1tjb25maWcuc3RhdGUucnVsZUluZGV4XSwgY29uZmlnKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnNvbGUubG9nKFwiY2xvc3VyZSBhdCBydWxlIHN0b3AgJXNcXG5cIiwgY29uZmlnKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKGNvbmZpZy5jb250ZXh0ID09PSBudWxsIHx8IGNvbmZpZy5jb250ZXh0Lmhhc0VtcHR5UGF0aCgpKSB7XG5cdFx0XHRpZiAoY29uZmlnLmNvbnRleHQgPT09IG51bGwgfHwgY29uZmlnLmNvbnRleHQuaXNFbXB0eSgpKSB7XG5cdFx0XHRcdGNvbmZpZ3MuYWRkKGNvbmZpZyk7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uZmlncy5hZGQobmV3IExleGVyQVROQ29uZmlnKHsgc3RhdGU6Y29uZmlnLnN0YXRlLCBjb250ZXh0OlByZWRpY3Rpb25Db250ZXh0LkVNUFRZfSwgY29uZmlnKSk7XG5cdFx0XHRcdGN1cnJlbnRBbHRSZWFjaGVkQWNjZXB0U3RhdGUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoY29uZmlnLmNvbnRleHQgIT09IG51bGwgJiYgIWNvbmZpZy5jb250ZXh0LmlzRW1wdHkoKSkge1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBjb25maWcuY29udGV4dC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAoY29uZmlnLmNvbnRleHQuZ2V0UmV0dXJuU3RhdGUoaSkgIT09IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZX1JFVFVSTl9TVEFURSkge1xuXHRcdFx0XHRcdHZhciBuZXdDb250ZXh0ID0gY29uZmlnLmNvbnRleHQuZ2V0UGFyZW50KGkpOyAvLyBcInBvcFwiIHJldHVybiBzdGF0ZVxuXHRcdFx0XHRcdHZhciByZXR1cm5TdGF0ZSA9IHRoaXMuYXRuLnN0YXRlc1tjb25maWcuY29udGV4dC5nZXRSZXR1cm5TdGF0ZShpKV07XG5cdFx0XHRcdFx0Y2ZnID0gbmV3IExleGVyQVROQ29uZmlnKHsgc3RhdGU6cmV0dXJuU3RhdGUsIGNvbnRleHQ6bmV3Q29udGV4dCB9LCBjb25maWcpO1xuXHRcdFx0XHRcdGN1cnJlbnRBbHRSZWFjaGVkQWNjZXB0U3RhdGUgPSB0aGlzLmNsb3N1cmUoaW5wdXQsIGNmZyxcblx0XHRcdFx0XHRcdFx0Y29uZmlncywgY3VycmVudEFsdFJlYWNoZWRBY2NlcHRTdGF0ZSwgc3BlY3VsYXRpdmUsXG5cdFx0XHRcdFx0XHRcdHRyZWF0RW9mQXNFcHNpbG9uKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gY3VycmVudEFsdFJlYWNoZWRBY2NlcHRTdGF0ZTtcblx0fVxuXHQvLyBvcHRpbWl6YXRpb25cblx0aWYgKCFjb25maWcuc3RhdGUuZXBzaWxvbk9ubHlUcmFuc2l0aW9ucykge1xuXHRcdGlmICghY3VycmVudEFsdFJlYWNoZWRBY2NlcHRTdGF0ZSB8fCAhY29uZmlnLnBhc3NlZFRocm91Z2hOb25HcmVlZHlEZWNpc2lvbikge1xuXHRcdFx0Y29uZmlncy5hZGQoY29uZmlnKTtcblx0XHR9XG5cdH1cblx0Zm9yICh2YXIgaiA9IDA7IGogPCBjb25maWcuc3RhdGUudHJhbnNpdGlvbnMubGVuZ3RoOyBqKyspIHtcblx0XHR2YXIgdHJhbnMgPSBjb25maWcuc3RhdGUudHJhbnNpdGlvbnNbal07XG5cdFx0Y2ZnID0gdGhpcy5nZXRFcHNpbG9uVGFyZ2V0KGlucHV0LCBjb25maWcsIHRyYW5zLCBjb25maWdzLCBzcGVjdWxhdGl2ZSwgdHJlYXRFb2ZBc0Vwc2lsb24pO1xuXHRcdGlmIChjZmcgIT09IG51bGwpIHtcblx0XHRcdGN1cnJlbnRBbHRSZWFjaGVkQWNjZXB0U3RhdGUgPSB0aGlzLmNsb3N1cmUoaW5wdXQsIGNmZywgY29uZmlncyxcblx0XHRcdFx0XHRjdXJyZW50QWx0UmVhY2hlZEFjY2VwdFN0YXRlLCBzcGVjdWxhdGl2ZSwgdHJlYXRFb2ZBc0Vwc2lsb24pO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gY3VycmVudEFsdFJlYWNoZWRBY2NlcHRTdGF0ZTtcbn07XG5cbi8vIHNpZGUtZWZmZWN0OiBjYW4gYWx0ZXIgY29uZmlncy5oYXNTZW1hbnRpY0NvbnRleHRcbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5nZXRFcHNpbG9uVGFyZ2V0ID0gZnVuY3Rpb24oaW5wdXQsIGNvbmZpZywgdHJhbnMsXG5cdFx0Y29uZmlncywgc3BlY3VsYXRpdmUsIHRyZWF0RW9mQXNFcHNpbG9uKSB7XG5cdHZhciBjZmcgPSBudWxsO1xuXHRpZiAodHJhbnMuc2VyaWFsaXphdGlvblR5cGUgPT09IFRyYW5zaXRpb24uUlVMRSkge1xuXHRcdHZhciBuZXdDb250ZXh0ID0gU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQuY3JlYXRlKGNvbmZpZy5jb250ZXh0LCB0cmFucy5mb2xsb3dTdGF0ZS5zdGF0ZU51bWJlcik7XG5cdFx0Y2ZnID0gbmV3IExleGVyQVROQ29uZmlnKCB7IHN0YXRlOnRyYW5zLnRhcmdldCwgY29udGV4dDpuZXdDb250ZXh0fSwgY29uZmlnKTtcblx0fSBlbHNlIGlmICh0cmFucy5zZXJpYWxpemF0aW9uVHlwZSA9PT0gVHJhbnNpdGlvbi5QUkVDRURFTkNFKSB7XG5cdFx0dGhyb3cgXCJQcmVjZWRlbmNlIHByZWRpY2F0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gbGV4ZXJzLlwiO1xuXHR9IGVsc2UgaWYgKHRyYW5zLnNlcmlhbGl6YXRpb25UeXBlID09PSBUcmFuc2l0aW9uLlBSRURJQ0FURSkge1xuXHRcdC8vIFRyYWNrIHRyYXZlcnNpbmcgc2VtYW50aWMgcHJlZGljYXRlcy4gSWYgd2UgdHJhdmVyc2UsXG5cdFx0Ly8gd2UgY2Fubm90IGFkZCBhIERGQSBzdGF0ZSBmb3IgdGhpcyBcInJlYWNoXCIgY29tcHV0YXRpb25cblx0XHQvLyBiZWNhdXNlIHRoZSBERkEgd291bGQgbm90IHRlc3QgdGhlIHByZWRpY2F0ZSBhZ2FpbiBpbiB0aGVcblx0XHQvLyBmdXR1cmUuIFJhdGhlciB0aGFuIGNyZWF0aW5nIGNvbGxlY3Rpb25zIG9mIHNlbWFudGljIHByZWRpY2F0ZXNcblx0XHQvLyBsaWtlIHYzIGFuZCB0ZXN0aW5nIHRoZW0gb24gcHJlZGljdGlvbiwgdjQgd2lsbCB0ZXN0IHRoZW0gb24gdGhlXG5cdFx0Ly8gZmx5IGFsbCB0aGUgdGltZSB1c2luZyB0aGUgQVROIG5vdCB0aGUgREZBLiBUaGlzIGlzIHNsb3dlciBidXRcblx0XHQvLyBzZW1hbnRpY2FsbHkgaXQncyBub3QgdXNlZCB0aGF0IG9mdGVuLiBPbmUgb2YgdGhlIGtleSBlbGVtZW50cyB0b1xuXHRcdC8vIHRoaXMgcHJlZGljYXRlIG1lY2hhbmlzbSBpcyBub3QgYWRkaW5nIERGQSBzdGF0ZXMgdGhhdCBzZWVcblx0XHQvLyBwcmVkaWNhdGVzIGltbWVkaWF0ZWx5IGFmdGVyd2FyZHMgaW4gdGhlIEFUTi4gRm9yIGV4YW1wbGUsXG5cblx0XHQvLyBhIDogSUQge3AxfT8gfCBJRCB7cDJ9PyA7XG5cblx0XHQvLyBzaG91bGQgY3JlYXRlIHRoZSBzdGFydCBzdGF0ZSBmb3IgcnVsZSAnYScgKHRvIHNhdmUgc3RhcnQgc3RhdGVcblx0XHQvLyBjb21wZXRpdGlvbiksIGJ1dCBzaG91bGQgbm90IGNyZWF0ZSB0YXJnZXQgb2YgSUQgc3RhdGUuIFRoZVxuXHRcdC8vIGNvbGxlY3Rpb24gb2YgQVROIHN0YXRlcyB0aGUgZm9sbG93aW5nIElEIHJlZmVyZW5jZXMgaW5jbHVkZXNcblx0XHQvLyBzdGF0ZXMgcmVhY2hlZCBieSB0cmF2ZXJzaW5nIHByZWRpY2F0ZXMuIFNpbmNlIHRoaXMgaXMgd2hlbiB3ZVxuXHRcdC8vIHRlc3QgdGhlbSwgd2UgY2Fubm90IGNhc2ggdGhlIERGQSBzdGF0ZSB0YXJnZXQgb2YgSUQuXG5cblx0XHRpZiAoTGV4ZXJBVE5TaW11bGF0b3IuZGVidWcpIHtcblx0XHRcdGNvbnNvbGUubG9nKFwiRVZBTCBydWxlIFwiICsgdHJhbnMucnVsZUluZGV4ICsgXCI6XCIgKyB0cmFucy5wcmVkSW5kZXgpO1xuXHRcdH1cblx0XHRjb25maWdzLmhhc1NlbWFudGljQ29udGV4dCA9IHRydWU7XG5cdFx0aWYgKHRoaXMuZXZhbHVhdGVQcmVkaWNhdGUoaW5wdXQsIHRyYW5zLnJ1bGVJbmRleCwgdHJhbnMucHJlZEluZGV4LCBzcGVjdWxhdGl2ZSkpIHtcblx0XHRcdGNmZyA9IG5ldyBMZXhlckFUTkNvbmZpZyh7IHN0YXRlOnRyYW5zLnRhcmdldH0sIGNvbmZpZyk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKHRyYW5zLnNlcmlhbGl6YXRpb25UeXBlID09PSBUcmFuc2l0aW9uLkFDVElPTikge1xuXHRcdGlmIChjb25maWcuY29udGV4dCA9PT0gbnVsbCB8fCBjb25maWcuY29udGV4dC5oYXNFbXB0eVBhdGgoKSkge1xuXHRcdFx0Ly8gZXhlY3V0ZSBhY3Rpb25zIGFueXdoZXJlIGluIHRoZSBzdGFydCBydWxlIGZvciBhIHRva2VuLlxuXHRcdFx0Ly9cblx0XHRcdC8vIFRPRE86IGlmIHRoZSBlbnRyeSBydWxlIGlzIGludm9rZWQgcmVjdXJzaXZlbHksIHNvbWVcblx0XHRcdC8vIGFjdGlvbnMgbWF5IGJlIGV4ZWN1dGVkIGR1cmluZyB0aGUgcmVjdXJzaXZlIGNhbGwuIFRoZVxuXHRcdFx0Ly8gcHJvYmxlbSBjYW4gYXBwZWFyIHdoZW4gaGFzRW1wdHlQYXRoKCkgaXMgdHJ1ZSBidXRcblx0XHRcdC8vIGlzRW1wdHkoKSBpcyBmYWxzZS4gSW4gdGhpcyBjYXNlLCB0aGUgY29uZmlnIG5lZWRzIHRvIGJlXG5cdFx0XHQvLyBzcGxpdCBpbnRvIHR3byBjb250ZXh0cyAtIG9uZSB3aXRoIGp1c3QgdGhlIGVtcHR5IHBhdGhcblx0XHRcdC8vIGFuZCBhbm90aGVyIHdpdGggZXZlcnl0aGluZyBidXQgdGhlIGVtcHR5IHBhdGguXG5cdFx0XHQvLyBVbmZvcnR1bmF0ZWx5LCB0aGUgY3VycmVudCBhbGdvcml0aG0gZG9lcyBub3QgYWxsb3dcblx0XHRcdC8vIGdldEVwc2lsb25UYXJnZXQgdG8gcmV0dXJuIHR3byBjb25maWd1cmF0aW9ucywgc29cblx0XHRcdC8vIGFkZGl0aW9uYWwgbW9kaWZpY2F0aW9ucyBhcmUgbmVlZGVkIGJlZm9yZSB3ZSBjYW4gc3VwcG9ydFxuXHRcdFx0Ly8gdGhlIHNwbGl0IG9wZXJhdGlvbi5cblx0XHRcdHZhciBsZXhlckFjdGlvbkV4ZWN1dG9yID0gTGV4ZXJBY3Rpb25FeGVjdXRvci5hcHBlbmQoY29uZmlnLmxleGVyQWN0aW9uRXhlY3V0b3IsXG5cdFx0XHRcdFx0dGhpcy5hdG4ubGV4ZXJBY3Rpb25zW3RyYW5zLmFjdGlvbkluZGV4XSk7XG5cdFx0XHRjZmcgPSBuZXcgTGV4ZXJBVE5Db25maWcoeyBzdGF0ZTp0cmFucy50YXJnZXQsIGxleGVyQWN0aW9uRXhlY3V0b3I6bGV4ZXJBY3Rpb25FeGVjdXRvciB9LCBjb25maWcpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBpZ25vcmUgYWN0aW9ucyBpbiByZWZlcmVuY2VkIHJ1bGVzXG5cdFx0XHRjZmcgPSBuZXcgTGV4ZXJBVE5Db25maWcoIHsgc3RhdGU6dHJhbnMudGFyZ2V0fSwgY29uZmlnKTtcblx0XHR9XG5cdH0gZWxzZSBpZiAodHJhbnMuc2VyaWFsaXphdGlvblR5cGUgPT09IFRyYW5zaXRpb24uRVBTSUxPTikge1xuXHRcdGNmZyA9IG5ldyBMZXhlckFUTkNvbmZpZyh7IHN0YXRlOnRyYW5zLnRhcmdldH0sIGNvbmZpZyk7XG5cdH0gZWxzZSBpZiAodHJhbnMuc2VyaWFsaXphdGlvblR5cGUgPT09IFRyYW5zaXRpb24uQVRPTSB8fFxuXHRcdFx0XHR0cmFucy5zZXJpYWxpemF0aW9uVHlwZSA9PT0gVHJhbnNpdGlvbi5SQU5HRSB8fFxuXHRcdFx0XHR0cmFucy5zZXJpYWxpemF0aW9uVHlwZSA9PT0gVHJhbnNpdGlvbi5TRVQpIHtcblx0XHRpZiAodHJlYXRFb2ZBc0Vwc2lsb24pIHtcblx0XHRcdGlmICh0cmFucy5tYXRjaGVzKFRva2VuLkVPRiwgMCwgTGV4ZXIuTUFYX0NIQVJfVkFMVUUpKSB7XG5cdFx0XHRcdGNmZyA9IG5ldyBMZXhlckFUTkNvbmZpZyggeyBzdGF0ZTp0cmFucy50YXJnZXQgfSwgY29uZmlnKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIGNmZztcbn07XG5cbi8vIEV2YWx1YXRlIGEgcHJlZGljYXRlIHNwZWNpZmllZCBpbiB0aGUgbGV4ZXIuXG4vL1xuLy8gPHA+SWYge0Bjb2RlIHNwZWN1bGF0aXZlfSBpcyB7QGNvZGUgdHJ1ZX0sIHRoaXMgbWV0aG9kIHdhcyBjYWxsZWQgYmVmb3JlXG4vLyB7QGxpbmsgLy9jb25zdW1lfSBmb3IgdGhlIG1hdGNoZWQgY2hhcmFjdGVyLiBUaGlzIG1ldGhvZCBzaG91bGQgY2FsbFxuLy8ge0BsaW5rIC8vY29uc3VtZX0gYmVmb3JlIGV2YWx1YXRpbmcgdGhlIHByZWRpY2F0ZSB0byBlbnN1cmUgcG9zaXRpb25cbi8vIHNlbnNpdGl2ZSB2YWx1ZXMsIGluY2x1ZGluZyB7QGxpbmsgTGV4ZXIvL2dldFRleHR9LCB7QGxpbmsgTGV4ZXIvL2dldExpbmV9LFxuLy8gYW5kIHtAbGluayBMZXhlci8vZ2V0Y29sdW1ufSwgcHJvcGVybHkgcmVmbGVjdCB0aGUgY3VycmVudFxuLy8gbGV4ZXIgc3RhdGUuIFRoaXMgbWV0aG9kIHNob3VsZCByZXN0b3JlIHtAY29kZSBpbnB1dH0gYW5kIHRoZSBzaW11bGF0b3Jcbi8vIHRvIHRoZSBvcmlnaW5hbCBzdGF0ZSBiZWZvcmUgcmV0dXJuaW5nIChpLmUuIHVuZG8gdGhlIGFjdGlvbnMgbWFkZSBieSB0aGVcbi8vIGNhbGwgdG8ge0BsaW5rIC8vY29uc3VtZX0uPC9wPlxuLy9cbi8vIEBwYXJhbSBpbnB1dCBUaGUgaW5wdXQgc3RyZWFtLlxuLy8gQHBhcmFtIHJ1bGVJbmRleCBUaGUgcnVsZSBjb250YWluaW5nIHRoZSBwcmVkaWNhdGUuXG4vLyBAcGFyYW0gcHJlZEluZGV4IFRoZSBpbmRleCBvZiB0aGUgcHJlZGljYXRlIHdpdGhpbiB0aGUgcnVsZS5cbi8vIEBwYXJhbSBzcGVjdWxhdGl2ZSB7QGNvZGUgdHJ1ZX0gaWYgdGhlIGN1cnJlbnQgaW5kZXggaW4ge0Bjb2RlIGlucHV0fSBpc1xuLy8gb25lIGNoYXJhY3RlciBiZWZvcmUgdGhlIHByZWRpY2F0ZSdzIGxvY2F0aW9uLlxuLy9cbi8vIEByZXR1cm4ge0Bjb2RlIHRydWV9IGlmIHRoZSBzcGVjaWZpZWQgcHJlZGljYXRlIGV2YWx1YXRlcyB0b1xuLy8ge0Bjb2RlIHRydWV9LlxuLy8gL1xuTGV4ZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmV2YWx1YXRlUHJlZGljYXRlID0gZnVuY3Rpb24oaW5wdXQsIHJ1bGVJbmRleCxcblx0XHRwcmVkSW5kZXgsIHNwZWN1bGF0aXZlKSB7XG5cdC8vIGFzc3VtZSB0cnVlIGlmIG5vIHJlY29nbml6ZXIgd2FzIHByb3ZpZGVkXG5cdGlmICh0aGlzLnJlY29nID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0aWYgKCFzcGVjdWxhdGl2ZSkge1xuXHRcdHJldHVybiB0aGlzLnJlY29nLnNlbXByZWQobnVsbCwgcnVsZUluZGV4LCBwcmVkSW5kZXgpO1xuXHR9XG5cdHZhciBzYXZlZGNvbHVtbiA9IHRoaXMuY29sdW1uO1xuXHR2YXIgc2F2ZWRMaW5lID0gdGhpcy5saW5lO1xuXHR2YXIgaW5kZXggPSBpbnB1dC5pbmRleDtcblx0dmFyIG1hcmtlciA9IGlucHV0Lm1hcmsoKTtcblx0dHJ5IHtcblx0XHR0aGlzLmNvbnN1bWUoaW5wdXQpO1xuXHRcdHJldHVybiB0aGlzLnJlY29nLnNlbXByZWQobnVsbCwgcnVsZUluZGV4LCBwcmVkSW5kZXgpO1xuXHR9IGZpbmFsbHkge1xuXHRcdHRoaXMuY29sdW1uID0gc2F2ZWRjb2x1bW47XG5cdFx0dGhpcy5saW5lID0gc2F2ZWRMaW5lO1xuXHRcdGlucHV0LnNlZWsoaW5kZXgpO1xuXHRcdGlucHV0LnJlbGVhc2UobWFya2VyKTtcblx0fVxufTtcblxuTGV4ZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmNhcHR1cmVTaW1TdGF0ZSA9IGZ1bmN0aW9uKHNldHRpbmdzLCBpbnB1dCwgZGZhU3RhdGUpIHtcblx0c2V0dGluZ3MuaW5kZXggPSBpbnB1dC5pbmRleDtcblx0c2V0dGluZ3MubGluZSA9IHRoaXMubGluZTtcblx0c2V0dGluZ3MuY29sdW1uID0gdGhpcy5jb2x1bW47XG5cdHNldHRpbmdzLmRmYVN0YXRlID0gZGZhU3RhdGU7XG59O1xuXG5MZXhlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuYWRkREZBRWRnZSA9IGZ1bmN0aW9uKGZyb21fLCB0aywgdG8sIGNmZ3MpIHtcblx0aWYgKHRvID09PSB1bmRlZmluZWQpIHtcblx0XHR0byA9IG51bGw7XG5cdH1cblx0aWYgKGNmZ3MgPT09IHVuZGVmaW5lZCkge1xuXHRcdGNmZ3MgPSBudWxsO1xuXHR9XG5cdGlmICh0byA9PT0gbnVsbCAmJiBjZmdzICE9PSBudWxsKSB7XG5cdFx0Ly8gbGVhZGluZyB0byB0aGlzIGNhbGwsIEFUTkNvbmZpZ1NldC5oYXNTZW1hbnRpY0NvbnRleHQgaXMgdXNlZCBhcyBhXG5cdFx0Ly8gbWFya2VyIGluZGljYXRpbmcgZHluYW1pYyBwcmVkaWNhdGUgZXZhbHVhdGlvbiBtYWtlcyB0aGlzIGVkZ2Vcblx0XHQvLyBkZXBlbmRlbnQgb24gdGhlIHNwZWNpZmljIGlucHV0IHNlcXVlbmNlLCBzbyB0aGUgc3RhdGljIGVkZ2UgaW4gdGhlXG5cdFx0Ly8gREZBIHNob3VsZCBiZSBvbWl0dGVkLiBUaGUgdGFyZ2V0IERGQVN0YXRlIGlzIHN0aWxsIGNyZWF0ZWQgc2luY2Vcblx0XHQvLyBleGVjQVROIGhhcyB0aGUgYWJpbGl0eSB0byByZXN5bmNocm9uaXplIHdpdGggdGhlIERGQSBzdGF0ZSBjYWNoZVxuXHRcdC8vIGZvbGxvd2luZyB0aGUgcHJlZGljYXRlIGV2YWx1YXRpb24gc3RlcC5cblx0XHQvL1xuXHRcdC8vIFRKUCBub3RlczogbmV4dCB0aW1lIHRocm91Z2ggdGhlIERGQSwgd2Ugc2VlIGEgcHJlZCBhZ2FpbiBhbmQgZXZhbC5cblx0XHQvLyBJZiB0aGF0IGdldHMgdXMgdG8gYSBwcmV2aW91c2x5IGNyZWF0ZWQgKGJ1dCBkYW5nbGluZykgREZBXG5cdFx0Ly8gc3RhdGUsIHdlIGNhbiBjb250aW51ZSBpbiBwdXJlIERGQSBtb2RlIGZyb20gdGhlcmUuXG5cdFx0Ly8gL1xuXHRcdHZhciBzdXBwcmVzc0VkZ2UgPSBjZmdzLmhhc1NlbWFudGljQ29udGV4dDtcblx0XHRjZmdzLmhhc1NlbWFudGljQ29udGV4dCA9IGZhbHNlO1xuXG5cdFx0dG8gPSB0aGlzLmFkZERGQVN0YXRlKGNmZ3MpO1xuXG5cdFx0aWYgKHN1cHByZXNzRWRnZSkge1xuXHRcdFx0cmV0dXJuIHRvO1xuXHRcdH1cblx0fVxuXHQvLyBhZGQgdGhlIGVkZ2Vcblx0aWYgKHRrIDwgTGV4ZXJBVE5TaW11bGF0b3IuTUlOX0RGQV9FREdFIHx8IHRrID4gTGV4ZXJBVE5TaW11bGF0b3IuTUFYX0RGQV9FREdFKSB7XG5cdFx0Ly8gT25seSB0cmFjayBlZGdlcyB3aXRoaW4gdGhlIERGQSBib3VuZHNcblx0XHRyZXR1cm4gdG87XG5cdH1cblx0aWYgKExleGVyQVROU2ltdWxhdG9yLmRlYnVnKSB7XG5cdFx0Y29uc29sZS5sb2coXCJFREdFIFwiICsgZnJvbV8gKyBcIiAtPiBcIiArIHRvICsgXCIgdXBvbiBcIiArIHRrKTtcblx0fVxuXHRpZiAoZnJvbV8uZWRnZXMgPT09IG51bGwpIHtcblx0XHQvLyBtYWtlIHJvb20gZm9yIHRva2VucyAxLi5uIGFuZCAtMSBtYXNxdWVyYWRpbmcgYXMgaW5kZXggMFxuXHRcdGZyb21fLmVkZ2VzID0gW107XG5cdH1cblx0ZnJvbV8uZWRnZXNbdGsgLSBMZXhlckFUTlNpbXVsYXRvci5NSU5fREZBX0VER0VdID0gdG87IC8vIGNvbm5lY3RcblxuXHRyZXR1cm4gdG87XG59O1xuXG4vLyBBZGQgYSBuZXcgREZBIHN0YXRlIGlmIHRoZXJlIGlzbid0IG9uZSB3aXRoIHRoaXMgc2V0IG9mXG4vLyBjb25maWd1cmF0aW9ucyBhbHJlYWR5LiBUaGlzIG1ldGhvZCBhbHNvIGRldGVjdHMgdGhlIGZpcnN0XG4vLyBjb25maWd1cmF0aW9uIGNvbnRhaW5pbmcgYW4gQVROIHJ1bGUgc3RvcCBzdGF0ZS4gTGF0ZXIsIHdoZW5cbi8vIHRyYXZlcnNpbmcgdGhlIERGQSwgd2Ugd2lsbCBrbm93IHdoaWNoIHJ1bGUgdG8gYWNjZXB0LlxuTGV4ZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmFkZERGQVN0YXRlID0gZnVuY3Rpb24oY29uZmlncykge1xuXHR2YXIgcHJvcG9zZWQgPSBuZXcgREZBU3RhdGUobnVsbCwgY29uZmlncyk7XG5cdHZhciBmaXJzdENvbmZpZ1dpdGhSdWxlU3RvcFN0YXRlID0gbnVsbDtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBjb25maWdzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIGNmZyA9IGNvbmZpZ3MuaXRlbXNbaV07XG5cdFx0aWYgKGNmZy5zdGF0ZSBpbnN0YW5jZW9mIFJ1bGVTdG9wU3RhdGUpIHtcblx0XHRcdGZpcnN0Q29uZmlnV2l0aFJ1bGVTdG9wU3RhdGUgPSBjZmc7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblx0aWYgKGZpcnN0Q29uZmlnV2l0aFJ1bGVTdG9wU3RhdGUgIT09IG51bGwpIHtcblx0XHRwcm9wb3NlZC5pc0FjY2VwdFN0YXRlID0gdHJ1ZTtcblx0XHRwcm9wb3NlZC5sZXhlckFjdGlvbkV4ZWN1dG9yID0gZmlyc3RDb25maWdXaXRoUnVsZVN0b3BTdGF0ZS5sZXhlckFjdGlvbkV4ZWN1dG9yO1xuXHRcdHByb3Bvc2VkLnByZWRpY3Rpb24gPSB0aGlzLmF0bi5ydWxlVG9Ub2tlblR5cGVbZmlyc3RDb25maWdXaXRoUnVsZVN0b3BTdGF0ZS5zdGF0ZS5ydWxlSW5kZXhdO1xuXHR9XG5cdHZhciBkZmEgPSB0aGlzLmRlY2lzaW9uVG9ERkFbdGhpcy5tb2RlXTtcblx0dmFyIGV4aXN0aW5nID0gZGZhLnN0YXRlcy5nZXQocHJvcG9zZWQpO1xuXHRpZiAoZXhpc3RpbmchPT1udWxsKSB7XG5cdFx0cmV0dXJuIGV4aXN0aW5nO1xuXHR9XG5cdHZhciBuZXdTdGF0ZSA9IHByb3Bvc2VkO1xuXHRuZXdTdGF0ZS5zdGF0ZU51bWJlciA9IGRmYS5zdGF0ZXMubGVuZ3RoO1xuXHRjb25maWdzLnNldFJlYWRvbmx5KHRydWUpO1xuXHRuZXdTdGF0ZS5jb25maWdzID0gY29uZmlncztcblx0ZGZhLnN0YXRlcy5hZGQobmV3U3RhdGUpO1xuXHRyZXR1cm4gbmV3U3RhdGU7XG59O1xuXG5MZXhlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0REZBID0gZnVuY3Rpb24obW9kZSkge1xuXHRyZXR1cm4gdGhpcy5kZWNpc2lvblRvREZBW21vZGVdO1xufTtcblxuLy8gR2V0IHRoZSB0ZXh0IG1hdGNoZWQgc28gZmFyIGZvciB0aGUgY3VycmVudCB0b2tlbi5cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5nZXRUZXh0ID0gZnVuY3Rpb24oaW5wdXQpIHtcblx0Ly8gaW5kZXggaXMgZmlyc3QgbG9va2FoZWFkIGNoYXIsIGRvbid0IGluY2x1ZGUuXG5cdHJldHVybiBpbnB1dC5nZXRUZXh0KHRoaXMuc3RhcnRJbmRleCwgaW5wdXQuaW5kZXggLSAxKTtcbn07XG5cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5jb25zdW1lID0gZnVuY3Rpb24oaW5wdXQpIHtcblx0dmFyIGN1ckNoYXIgPSBpbnB1dC5MQSgxKTtcblx0aWYgKGN1ckNoYXIgPT09IFwiXFxuXCIuY2hhckNvZGVBdCgwKSkge1xuXHRcdHRoaXMubGluZSArPSAxO1xuXHRcdHRoaXMuY29sdW1uID0gMDtcblx0fSBlbHNlIHtcblx0XHR0aGlzLmNvbHVtbiArPSAxO1xuXHR9XG5cdGlucHV0LmNvbnN1bWUoKTtcbn07XG5cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5nZXRUb2tlbk5hbWUgPSBmdW5jdGlvbih0dCkge1xuXHRpZiAodHQgPT09IC0xKSB7XG5cdFx0cmV0dXJuIFwiRU9GXCI7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFwiJ1wiICsgU3RyaW5nLmZyb21DaGFyQ29kZSh0dCkgKyBcIidcIjtcblx0fVxufTtcblxuZXhwb3J0cy5MZXhlckFUTlNpbXVsYXRvciA9IExleGVyQVROU2ltdWxhdG9yO1xuIiwiLy9cbi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbiAvL1xuXG5mdW5jdGlvbiBMZXhlckFjdGlvblR5cGUoKSB7XG59XG5cbkxleGVyQWN0aW9uVHlwZS5DSEFOTkVMID0gMDsgICAgIC8vVGhlIHR5cGUgb2YgYSB7QGxpbmsgTGV4ZXJDaGFubmVsQWN0aW9ufSBhY3Rpb24uXG5MZXhlckFjdGlvblR5cGUuQ1VTVE9NID0gMTsgICAgICAvL1RoZSB0eXBlIG9mIGEge0BsaW5rIExleGVyQ3VzdG9tQWN0aW9ufSBhY3Rpb24uXG5MZXhlckFjdGlvblR5cGUuTU9ERSA9IDI7ICAgICAgICAvL1RoZSB0eXBlIG9mIGEge0BsaW5rIExleGVyTW9kZUFjdGlvbn0gYWN0aW9uLlxuTGV4ZXJBY3Rpb25UeXBlLk1PUkUgPSAzOyAgICAgICAgLy9UaGUgdHlwZSBvZiBhIHtAbGluayBMZXhlck1vcmVBY3Rpb259IGFjdGlvbi5cbkxleGVyQWN0aW9uVHlwZS5QT1BfTU9ERSA9IDQ7ICAgIC8vVGhlIHR5cGUgb2YgYSB7QGxpbmsgTGV4ZXJQb3BNb2RlQWN0aW9ufSBhY3Rpb24uXG5MZXhlckFjdGlvblR5cGUuUFVTSF9NT0RFID0gNTsgICAvL1RoZSB0eXBlIG9mIGEge0BsaW5rIExleGVyUHVzaE1vZGVBY3Rpb259IGFjdGlvbi5cbkxleGVyQWN0aW9uVHlwZS5TS0lQID0gNjsgICAgICAgIC8vVGhlIHR5cGUgb2YgYSB7QGxpbmsgTGV4ZXJTa2lwQWN0aW9ufSBhY3Rpb24uXG5MZXhlckFjdGlvblR5cGUuVFlQRSA9IDc7ICAgICAgICAvL1RoZSB0eXBlIG9mIGEge0BsaW5rIExleGVyVHlwZUFjdGlvbn0gYWN0aW9uLlxuXG5mdW5jdGlvbiBMZXhlckFjdGlvbihhY3Rpb24pIHtcbiAgICB0aGlzLmFjdGlvblR5cGUgPSBhY3Rpb247XG4gICAgdGhpcy5pc1Bvc2l0aW9uRGVwZW5kZW50ID0gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkxleGVyQWN0aW9uLnByb3RvdHlwZS5oYXNoQ29kZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBoYXNoID0gbmV3IEhhc2goKTtcbiAgICB0aGlzLnVwZGF0ZUhhc2hDb2RlKGhhc2gpO1xuICAgIHJldHVybiBoYXNoLmZpbmlzaCgpXG59O1xuXG5MZXhlckFjdGlvbi5wcm90b3R5cGUudXBkYXRlSGFzaENvZGUgPSBmdW5jdGlvbihoYXNoKSB7XG4gICAgaGFzaC51cGRhdGUodGhpcy5hY3Rpb25UeXBlKTtcbn07XG5cbkxleGVyQWN0aW9uLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbihvdGhlcikge1xuICAgIHJldHVybiB0aGlzID09PSBvdGhlcjtcbn07XG5cblxuXG4vL1xuLy8gSW1wbGVtZW50cyB0aGUge0Bjb2RlIHNraXB9IGxleGVyIGFjdGlvbiBieSBjYWxsaW5nIHtAbGluayBMZXhlci8vc2tpcH0uXG4vL1xuLy8gPHA+VGhlIHtAY29kZSBza2lwfSBjb21tYW5kIGRvZXMgbm90IGhhdmUgYW55IHBhcmFtZXRlcnMsIHNvIHRoaXMgYWN0aW9uIGlzXG4vLyBpbXBsZW1lbnRlZCBhcyBhIHNpbmdsZXRvbiBpbnN0YW5jZSBleHBvc2VkIGJ5IHtAbGluayAvL0lOU1RBTkNFfS48L3A+XG5mdW5jdGlvbiBMZXhlclNraXBBY3Rpb24oKSB7XG5cdExleGVyQWN0aW9uLmNhbGwodGhpcywgTGV4ZXJBY3Rpb25UeXBlLlNLSVApO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuTGV4ZXJTa2lwQWN0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTGV4ZXJBY3Rpb24ucHJvdG90eXBlKTtcbkxleGVyU2tpcEFjdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMZXhlclNraXBBY3Rpb247XG5cbi8vIFByb3ZpZGVzIGEgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgcGFyYW1ldGVybGVzcyBsZXhlciBhY3Rpb24uXG5MZXhlclNraXBBY3Rpb24uSU5TVEFOQ0UgPSBuZXcgTGV4ZXJTa2lwQWN0aW9uKCk7XG5cbkxleGVyU2tpcEFjdGlvbi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGxleGVyKSB7XG4gICAgbGV4ZXIuc2tpcCgpO1xufTtcblxuTGV4ZXJTa2lwQWN0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gXCJza2lwXCI7XG59O1xuXG4vLyAgSW1wbGVtZW50cyB0aGUge0Bjb2RlIHR5cGV9IGxleGVyIGFjdGlvbiBieSBjYWxsaW5nIHtAbGluayBMZXhlci8vc2V0VHlwZX1cbi8vIHdpdGggdGhlIGFzc2lnbmVkIHR5cGUuXG5mdW5jdGlvbiBMZXhlclR5cGVBY3Rpb24odHlwZSkge1xuXHRMZXhlckFjdGlvbi5jYWxsKHRoaXMsIExleGVyQWN0aW9uVHlwZS5UWVBFKTtcblx0dGhpcy50eXBlID0gdHlwZTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkxleGVyVHlwZUFjdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKExleGVyQWN0aW9uLnByb3RvdHlwZSk7XG5MZXhlclR5cGVBY3Rpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTGV4ZXJUeXBlQWN0aW9uO1xuXG5MZXhlclR5cGVBY3Rpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihsZXhlcikge1xuICAgIGxleGVyLnR5cGUgPSB0aGlzLnR5cGU7XG59O1xuXG5MZXhlclR5cGVBY3Rpb24ucHJvdG90eXBlLnVwZGF0ZUhhc2hDb2RlID0gZnVuY3Rpb24oaGFzaCkge1xuICAgIGhhc2gudXBkYXRlKHRoaXMuYWN0aW9uVHlwZSwgdGhpcy50eXBlKTtcbn07XG5cblxuTGV4ZXJUeXBlQWN0aW9uLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbihvdGhlcikge1xuICAgIGlmKHRoaXMgPT09IG90aGVyKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoISAob3RoZXIgaW5zdGFuY2VvZiBMZXhlclR5cGVBY3Rpb24pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlID09PSBvdGhlci50eXBlO1xuICAgIH1cbn07XG5cbkxleGVyVHlwZUFjdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJ0eXBlKFwiICsgdGhpcy50eXBlICsgXCIpXCI7XG59O1xuXG4vLyBJbXBsZW1lbnRzIHRoZSB7QGNvZGUgcHVzaE1vZGV9IGxleGVyIGFjdGlvbiBieSBjYWxsaW5nXG4vLyB7QGxpbmsgTGV4ZXIvL3B1c2hNb2RlfSB3aXRoIHRoZSBhc3NpZ25lZCBtb2RlLlxuZnVuY3Rpb24gTGV4ZXJQdXNoTW9kZUFjdGlvbihtb2RlKSB7XG5cdExleGVyQWN0aW9uLmNhbGwodGhpcywgTGV4ZXJBY3Rpb25UeXBlLlBVU0hfTU9ERSk7XG4gICAgdGhpcy5tb2RlID0gbW9kZTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuTGV4ZXJQdXNoTW9kZUFjdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKExleGVyQWN0aW9uLnByb3RvdHlwZSk7XG5MZXhlclB1c2hNb2RlQWN0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExleGVyUHVzaE1vZGVBY3Rpb247XG5cbi8vIDxwPlRoaXMgYWN0aW9uIGlzIGltcGxlbWVudGVkIGJ5IGNhbGxpbmcge0BsaW5rIExleGVyLy9wdXNoTW9kZX0gd2l0aCB0aGVcbi8vIHZhbHVlIHByb3ZpZGVkIGJ5IHtAbGluayAvL2dldE1vZGV9LjwvcD5cbkxleGVyUHVzaE1vZGVBY3Rpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihsZXhlcikge1xuICAgIGxleGVyLnB1c2hNb2RlKHRoaXMubW9kZSk7XG59O1xuXG5MZXhlclB1c2hNb2RlQWN0aW9uLnByb3RvdHlwZS51cGRhdGVIYXNoQ29kZSA9IGZ1bmN0aW9uKGhhc2gpIHtcbiAgICBoYXNoLnVwZGF0ZSh0aGlzLmFjdGlvblR5cGUsIHRoaXMubW9kZSk7XG59O1xuXG5MZXhlclB1c2hNb2RlQWN0aW9uLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbihvdGhlcikge1xuICAgIGlmICh0aGlzID09PSBvdGhlcikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKCEgKG90aGVyIGluc3RhbmNlb2YgTGV4ZXJQdXNoTW9kZUFjdGlvbikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUgPT09IG90aGVyLm1vZGU7XG4gICAgfVxufTtcblxuTGV4ZXJQdXNoTW9kZUFjdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIFwicHVzaE1vZGUoXCIgKyB0aGlzLm1vZGUgKyBcIilcIjtcbn07XG5cblxuLy8gSW1wbGVtZW50cyB0aGUge0Bjb2RlIHBvcE1vZGV9IGxleGVyIGFjdGlvbiBieSBjYWxsaW5nIHtAbGluayBMZXhlci8vcG9wTW9kZX0uXG4vL1xuLy8gPHA+VGhlIHtAY29kZSBwb3BNb2RlfSBjb21tYW5kIGRvZXMgbm90IGhhdmUgYW55IHBhcmFtZXRlcnMsIHNvIHRoaXMgYWN0aW9uIGlzXG4vLyBpbXBsZW1lbnRlZCBhcyBhIHNpbmdsZXRvbiBpbnN0YW5jZSBleHBvc2VkIGJ5IHtAbGluayAvL0lOU1RBTkNFfS48L3A+XG5mdW5jdGlvbiBMZXhlclBvcE1vZGVBY3Rpb24oKSB7XG5cdExleGVyQWN0aW9uLmNhbGwodGhpcyxMZXhlckFjdGlvblR5cGUuUE9QX01PREUpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuTGV4ZXJQb3BNb2RlQWN0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTGV4ZXJBY3Rpb24ucHJvdG90eXBlKTtcbkxleGVyUG9wTW9kZUFjdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMZXhlclBvcE1vZGVBY3Rpb247XG5cbkxleGVyUG9wTW9kZUFjdGlvbi5JTlNUQU5DRSA9IG5ldyBMZXhlclBvcE1vZGVBY3Rpb24oKTtcblxuLy8gPHA+VGhpcyBhY3Rpb24gaXMgaW1wbGVtZW50ZWQgYnkgY2FsbGluZyB7QGxpbmsgTGV4ZXIvL3BvcE1vZGV9LjwvcD5cbkxleGVyUG9wTW9kZUFjdGlvbi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGxleGVyKSB7XG4gICAgbGV4ZXIucG9wTW9kZSgpO1xufTtcblxuTGV4ZXJQb3BNb2RlQWN0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gXCJwb3BNb2RlXCI7XG59O1xuXG4vLyBJbXBsZW1lbnRzIHRoZSB7QGNvZGUgbW9yZX0gbGV4ZXIgYWN0aW9uIGJ5IGNhbGxpbmcge0BsaW5rIExleGVyLy9tb3JlfS5cbi8vXG4vLyA8cD5UaGUge0Bjb2RlIG1vcmV9IGNvbW1hbmQgZG9lcyBub3QgaGF2ZSBhbnkgcGFyYW1ldGVycywgc28gdGhpcyBhY3Rpb24gaXNcbi8vIGltcGxlbWVudGVkIGFzIGEgc2luZ2xldG9uIGluc3RhbmNlIGV4cG9zZWQgYnkge0BsaW5rIC8vSU5TVEFOQ0V9LjwvcD5cbmZ1bmN0aW9uIExleGVyTW9yZUFjdGlvbigpIHtcblx0TGV4ZXJBY3Rpb24uY2FsbCh0aGlzLCBMZXhlckFjdGlvblR5cGUuTU9SRSk7XG5cdHJldHVybiB0aGlzO1xufVxuXG5MZXhlck1vcmVBY3Rpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShMZXhlckFjdGlvbi5wcm90b3R5cGUpO1xuTGV4ZXJNb3JlQWN0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExleGVyTW9yZUFjdGlvbjtcblxuTGV4ZXJNb3JlQWN0aW9uLklOU1RBTkNFID0gbmV3IExleGVyTW9yZUFjdGlvbigpO1xuXG4vLyA8cD5UaGlzIGFjdGlvbiBpcyBpbXBsZW1lbnRlZCBieSBjYWxsaW5nIHtAbGluayBMZXhlci8vcG9wTW9kZX0uPC9wPlxuTGV4ZXJNb3JlQWN0aW9uLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24obGV4ZXIpIHtcbiAgICBsZXhlci5tb3JlKCk7XG59O1xuXG5MZXhlck1vcmVBY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFwibW9yZVwiO1xufTtcblxuXG4vLyBJbXBsZW1lbnRzIHRoZSB7QGNvZGUgbW9kZX0gbGV4ZXIgYWN0aW9uIGJ5IGNhbGxpbmcge0BsaW5rIExleGVyLy9tb2RlfSB3aXRoXG4vLyB0aGUgYXNzaWduZWQgbW9kZS5cbmZ1bmN0aW9uIExleGVyTW9kZUFjdGlvbihtb2RlKSB7XG5cdExleGVyQWN0aW9uLmNhbGwodGhpcywgTGV4ZXJBY3Rpb25UeXBlLk1PREUpO1xuICAgIHRoaXMubW9kZSA9IG1vZGU7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkxleGVyTW9kZUFjdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKExleGVyQWN0aW9uLnByb3RvdHlwZSk7XG5MZXhlck1vZGVBY3Rpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTGV4ZXJNb2RlQWN0aW9uO1xuXG4vLyA8cD5UaGlzIGFjdGlvbiBpcyBpbXBsZW1lbnRlZCBieSBjYWxsaW5nIHtAbGluayBMZXhlci8vbW9kZX0gd2l0aCB0aGVcbi8vIHZhbHVlIHByb3ZpZGVkIGJ5IHtAbGluayAvL2dldE1vZGV9LjwvcD5cbkxleGVyTW9kZUFjdGlvbi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGxleGVyKSB7XG4gICAgbGV4ZXIubW9kZSh0aGlzLm1vZGUpO1xufTtcblxuTGV4ZXJNb2RlQWN0aW9uLnByb3RvdHlwZS51cGRhdGVIYXNoQ29kZSA9IGZ1bmN0aW9uKGhhc2gpIHtcbiAgICBoYXNoLnVwZGF0ZSh0aGlzLmFjdGlvblR5cGUsIHRoaXMubW9kZSk7XG59O1xuXG5MZXhlck1vZGVBY3Rpb24ucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uKG90aGVyKSB7XG4gICAgaWYgKHRoaXMgPT09IG90aGVyKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoISAob3RoZXIgaW5zdGFuY2VvZiBMZXhlck1vZGVBY3Rpb24pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlID09PSBvdGhlci5tb2RlO1xuICAgIH1cbn07XG5cbkxleGVyTW9kZUFjdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJtb2RlKFwiICsgdGhpcy5tb2RlICsgXCIpXCI7XG59O1xuXG4vLyBFeGVjdXRlcyBhIGN1c3RvbSBsZXhlciBhY3Rpb24gYnkgY2FsbGluZyB7QGxpbmsgUmVjb2duaXplci8vYWN0aW9ufSB3aXRoIHRoZVxuLy8gcnVsZSBhbmQgYWN0aW9uIGluZGV4ZXMgYXNzaWduZWQgdG8gdGhlIGN1c3RvbSBhY3Rpb24uIFRoZSBpbXBsZW1lbnRhdGlvbiBvZlxuLy8gYSBjdXN0b20gYWN0aW9uIGlzIGFkZGVkIHRvIHRoZSBnZW5lcmF0ZWQgY29kZSBmb3IgdGhlIGxleGVyIGluIGFuIG92ZXJyaWRlXG4vLyBvZiB7QGxpbmsgUmVjb2duaXplci8vYWN0aW9ufSB3aGVuIHRoZSBncmFtbWFyIGlzIGNvbXBpbGVkLlxuLy9cbi8vIDxwPlRoaXMgY2xhc3MgbWF5IHJlcHJlc2VudCBlbWJlZGRlZCBhY3Rpb25zIGNyZWF0ZWQgd2l0aCB0aGUgPGNvZGU+ey4uLn08L2NvZGU+XG4vLyBzeW50YXggaW4gQU5UTFIgNCwgYXMgd2VsbCBhcyBhY3Rpb25zIGNyZWF0ZWQgZm9yIGxleGVyIGNvbW1hbmRzIHdoZXJlIHRoZVxuLy8gY29tbWFuZCBhcmd1bWVudCBjb3VsZCBub3QgYmUgZXZhbHVhdGVkIHdoZW4gdGhlIGdyYW1tYXIgd2FzIGNvbXBpbGVkLjwvcD5cblxuXG4gICAgLy8gQ29uc3RydWN0cyBhIGN1c3RvbSBsZXhlciBhY3Rpb24gd2l0aCB0aGUgc3BlY2lmaWVkIHJ1bGUgYW5kIGFjdGlvblxuICAgIC8vIGluZGV4ZXMuXG4gICAgLy9cbiAgICAvLyBAcGFyYW0gcnVsZUluZGV4IFRoZSBydWxlIGluZGV4IHRvIHVzZSBmb3IgY2FsbHMgdG9cbiAgICAvLyB7QGxpbmsgUmVjb2duaXplci8vYWN0aW9ufS5cbiAgICAvLyBAcGFyYW0gYWN0aW9uSW5kZXggVGhlIGFjdGlvbiBpbmRleCB0byB1c2UgZm9yIGNhbGxzIHRvXG4gICAgLy8ge0BsaW5rIFJlY29nbml6ZXIvL2FjdGlvbn0uXG5cbmZ1bmN0aW9uIExleGVyQ3VzdG9tQWN0aW9uKHJ1bGVJbmRleCwgYWN0aW9uSW5kZXgpIHtcblx0TGV4ZXJBY3Rpb24uY2FsbCh0aGlzLCBMZXhlckFjdGlvblR5cGUuQ1VTVE9NKTtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IHJ1bGVJbmRleDtcbiAgICB0aGlzLmFjdGlvbkluZGV4ID0gYWN0aW9uSW5kZXg7XG4gICAgdGhpcy5pc1Bvc2l0aW9uRGVwZW5kZW50ID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuTGV4ZXJDdXN0b21BY3Rpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShMZXhlckFjdGlvbi5wcm90b3R5cGUpO1xuTGV4ZXJDdXN0b21BY3Rpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTGV4ZXJDdXN0b21BY3Rpb247XG5cbi8vIDxwPkN1c3RvbSBhY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBieSBjYWxsaW5nIHtAbGluayBMZXhlci8vYWN0aW9ufSB3aXRoIHRoZVxuLy8gYXBwcm9wcmlhdGUgcnVsZSBhbmQgYWN0aW9uIGluZGV4ZXMuPC9wPlxuTGV4ZXJDdXN0b21BY3Rpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihsZXhlcikge1xuICAgIGxleGVyLmFjdGlvbihudWxsLCB0aGlzLnJ1bGVJbmRleCwgdGhpcy5hY3Rpb25JbmRleCk7XG59O1xuXG5MZXhlckN1c3RvbUFjdGlvbi5wcm90b3R5cGUudXBkYXRlSGFzaENvZGUgPSBmdW5jdGlvbihoYXNoKSB7XG4gICAgaGFzaC51cGRhdGUodGhpcy5hY3Rpb25UeXBlLCB0aGlzLnJ1bGVJbmRleCwgdGhpcy5hY3Rpb25JbmRleCk7XG59O1xuXG5MZXhlckN1c3RvbUFjdGlvbi5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24ob3RoZXIpIHtcbiAgICBpZiAodGhpcyA9PT0gb3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICghIChvdGhlciBpbnN0YW5jZW9mIExleGVyQ3VzdG9tQWN0aW9uKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucnVsZUluZGV4ID09PSBvdGhlci5ydWxlSW5kZXggJiYgdGhpcy5hY3Rpb25JbmRleCA9PT0gb3RoZXIuYWN0aW9uSW5kZXg7XG4gICAgfVxufTtcblxuLy8gSW1wbGVtZW50cyB0aGUge0Bjb2RlIGNoYW5uZWx9IGxleGVyIGFjdGlvbiBieSBjYWxsaW5nXG4vLyB7QGxpbmsgTGV4ZXIvL3NldENoYW5uZWx9IHdpdGggdGhlIGFzc2lnbmVkIGNoYW5uZWwuXG4vLyBDb25zdHJ1Y3RzIGEgbmV3IHtAY29kZSBjaGFubmVsfSBhY3Rpb24gd2l0aCB0aGUgc3BlY2lmaWVkIGNoYW5uZWwgdmFsdWUuXG4vLyBAcGFyYW0gY2hhbm5lbCBUaGUgY2hhbm5lbCB2YWx1ZSB0byBwYXNzIHRvIHtAbGluayBMZXhlci8vc2V0Q2hhbm5lbH0uXG5mdW5jdGlvbiBMZXhlckNoYW5uZWxBY3Rpb24oY2hhbm5lbCkge1xuXHRMZXhlckFjdGlvbi5jYWxsKHRoaXMsIExleGVyQWN0aW9uVHlwZS5DSEFOTkVMKTtcbiAgICB0aGlzLmNoYW5uZWwgPSBjaGFubmVsO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5MZXhlckNoYW5uZWxBY3Rpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShMZXhlckFjdGlvbi5wcm90b3R5cGUpO1xuTGV4ZXJDaGFubmVsQWN0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExleGVyQ2hhbm5lbEFjdGlvbjtcblxuLy8gPHA+VGhpcyBhY3Rpb24gaXMgaW1wbGVtZW50ZWQgYnkgY2FsbGluZyB7QGxpbmsgTGV4ZXIvL3NldENoYW5uZWx9IHdpdGggdGhlXG4vLyB2YWx1ZSBwcm92aWRlZCBieSB7QGxpbmsgLy9nZXRDaGFubmVsfS48L3A+XG5MZXhlckNoYW5uZWxBY3Rpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihsZXhlcikge1xuICAgIGxleGVyLl9jaGFubmVsID0gdGhpcy5jaGFubmVsO1xufTtcblxuTGV4ZXJDaGFubmVsQWN0aW9uLnByb3RvdHlwZS51cGRhdGVIYXNoQ29kZSA9IGZ1bmN0aW9uKGhhc2gpIHtcbiAgICBoYXNoLnVwZGF0ZSh0aGlzLmFjdGlvblR5cGUsIHRoaXMuY2hhbm5lbCk7XG59O1xuXG5MZXhlckNoYW5uZWxBY3Rpb24ucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uKG90aGVyKSB7XG4gICAgaWYgKHRoaXMgPT09IG90aGVyKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoISAob3RoZXIgaW5zdGFuY2VvZiBMZXhlckNoYW5uZWxBY3Rpb24pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGFubmVsID09PSBvdGhlci5jaGFubmVsO1xuICAgIH1cbn07XG5cbkxleGVyQ2hhbm5lbEFjdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJjaGFubmVsKFwiICsgdGhpcy5jaGFubmVsICsgXCIpXCI7XG59O1xuXG4vLyBUaGlzIGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBMZXhlckFjdGlvbn0gaXMgdXNlZCBmb3IgdHJhY2tpbmcgaW5wdXQgb2Zmc2V0c1xuLy8gZm9yIHBvc2l0aW9uLWRlcGVuZGVudCBhY3Rpb25zIHdpdGhpbiBhIHtAbGluayBMZXhlckFjdGlvbkV4ZWN1dG9yfS5cbi8vXG4vLyA8cD5UaGlzIGFjdGlvbiBpcyBub3Qgc2VyaWFsaXplZCBhcyBwYXJ0IG9mIHRoZSBBVE4sIGFuZCBpcyBvbmx5IHJlcXVpcmVkIGZvclxuLy8gcG9zaXRpb24tZGVwZW5kZW50IGxleGVyIGFjdGlvbnMgd2hpY2ggYXBwZWFyIGF0IGEgbG9jYXRpb24gb3RoZXIgdGhhbiB0aGVcbi8vIGVuZCBvZiBhIHJ1bGUuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IERGQSBvcHRpbWl6YXRpb25zIGVtcGxveWVkIGZvclxuLy8gbGV4ZXIgYWN0aW9ucywgc2VlIHtAbGluayBMZXhlckFjdGlvbkV4ZWN1dG9yLy9hcHBlbmR9IGFuZFxuLy8ge0BsaW5rIExleGVyQWN0aW9uRXhlY3V0b3IvL2ZpeE9mZnNldEJlZm9yZU1hdGNofS48L3A+XG5cbi8vIENvbnN0cnVjdHMgYSBuZXcgaW5kZXhlZCBjdXN0b20gYWN0aW9uIGJ5IGFzc29jaWF0aW5nIGEgY2hhcmFjdGVyIG9mZnNldFxuLy8gd2l0aCBhIHtAbGluayBMZXhlckFjdGlvbn0uXG4vL1xuLy8gPHA+Tm90ZTogVGhpcyBjbGFzcyBpcyBvbmx5IHJlcXVpcmVkIGZvciBsZXhlciBhY3Rpb25zIGZvciB3aGljaFxuLy8ge0BsaW5rIExleGVyQWN0aW9uLy9pc1Bvc2l0aW9uRGVwZW5kZW50fSByZXR1cm5zIHtAY29kZSB0cnVlfS48L3A+XG4vL1xuLy8gQHBhcmFtIG9mZnNldCBUaGUgb2Zmc2V0IGludG8gdGhlIGlucHV0IHtAbGluayBDaGFyU3RyZWFtfSwgcmVsYXRpdmUgdG9cbi8vIHRoZSB0b2tlbiBzdGFydCBpbmRleCwgYXQgd2hpY2ggdGhlIHNwZWNpZmllZCBsZXhlciBhY3Rpb24gc2hvdWxkIGJlXG4vLyBleGVjdXRlZC5cbi8vIEBwYXJhbSBhY3Rpb24gVGhlIGxleGVyIGFjdGlvbiB0byBleGVjdXRlIGF0IGEgcGFydGljdWxhciBvZmZzZXQgaW4gdGhlXG4vLyBpbnB1dCB7QGxpbmsgQ2hhclN0cmVhbX0uXG5mdW5jdGlvbiBMZXhlckluZGV4ZWRDdXN0b21BY3Rpb24ob2Zmc2V0LCBhY3Rpb24pIHtcblx0TGV4ZXJBY3Rpb24uY2FsbCh0aGlzLCBhY3Rpb24uYWN0aW9uVHlwZSk7XG4gICAgdGhpcy5vZmZzZXQgPSBvZmZzZXQ7XG4gICAgdGhpcy5hY3Rpb24gPSBhY3Rpb247XG4gICAgdGhpcy5pc1Bvc2l0aW9uRGVwZW5kZW50ID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuTGV4ZXJJbmRleGVkQ3VzdG9tQWN0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTGV4ZXJBY3Rpb24ucHJvdG90eXBlKTtcbkxleGVySW5kZXhlZEN1c3RvbUFjdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMZXhlckluZGV4ZWRDdXN0b21BY3Rpb247XG5cbi8vIDxwPlRoaXMgbWV0aG9kIGNhbGxzIHtAbGluayAvL2V4ZWN1dGV9IG9uIHRoZSByZXN1bHQgb2Yge0BsaW5rIC8vZ2V0QWN0aW9ufVxuLy8gdXNpbmcgdGhlIHByb3ZpZGVkIHtAY29kZSBsZXhlcn0uPC9wPlxuTGV4ZXJJbmRleGVkQ3VzdG9tQWN0aW9uLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24obGV4ZXIpIHtcbiAgICAvLyBhc3N1bWUgdGhlIGlucHV0IHN0cmVhbSBwb3NpdGlvbiB3YXMgcHJvcGVybHkgc2V0IGJ5IHRoZSBjYWxsaW5nIGNvZGVcbiAgICB0aGlzLmFjdGlvbi5leGVjdXRlKGxleGVyKTtcbn07XG5cbkxleGVySW5kZXhlZEN1c3RvbUFjdGlvbi5wcm90b3R5cGUudXBkYXRlSGFzaENvZGUgPSBmdW5jdGlvbihoYXNoKSB7XG4gICAgaGFzaC51cGRhdGUodGhpcy5hY3Rpb25UeXBlLCB0aGlzLm9mZnNldCwgdGhpcy5hY3Rpb24pO1xufTtcblxuTGV4ZXJJbmRleGVkQ3VzdG9tQWN0aW9uLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbihvdGhlcikge1xuICAgIGlmICh0aGlzID09PSBvdGhlcikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKCEgKG90aGVyIGluc3RhbmNlb2YgTGV4ZXJJbmRleGVkQ3VzdG9tQWN0aW9uKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub2Zmc2V0ID09PSBvdGhlci5vZmZzZXQgJiYgdGhpcy5hY3Rpb24gPT09IG90aGVyLmFjdGlvbjtcbiAgICB9XG59O1xuXG5cbmV4cG9ydHMuTGV4ZXJBY3Rpb25UeXBlID0gTGV4ZXJBY3Rpb25UeXBlO1xuZXhwb3J0cy5MZXhlclNraXBBY3Rpb24gPSBMZXhlclNraXBBY3Rpb247XG5leHBvcnRzLkxleGVyQ2hhbm5lbEFjdGlvbiA9IExleGVyQ2hhbm5lbEFjdGlvbjtcbmV4cG9ydHMuTGV4ZXJDdXN0b21BY3Rpb24gPSBMZXhlckN1c3RvbUFjdGlvbjtcbmV4cG9ydHMuTGV4ZXJJbmRleGVkQ3VzdG9tQWN0aW9uID0gTGV4ZXJJbmRleGVkQ3VzdG9tQWN0aW9uO1xuZXhwb3J0cy5MZXhlck1vcmVBY3Rpb24gPSBMZXhlck1vcmVBY3Rpb247XG5leHBvcnRzLkxleGVyVHlwZUFjdGlvbiA9IExleGVyVHlwZUFjdGlvbjtcbmV4cG9ydHMuTGV4ZXJQdXNoTW9kZUFjdGlvbiA9IExleGVyUHVzaE1vZGVBY3Rpb247XG5leHBvcnRzLkxleGVyUG9wTW9kZUFjdGlvbiA9IExleGVyUG9wTW9kZUFjdGlvbjtcbmV4cG9ydHMuTGV4ZXJNb2RlQWN0aW9uID0gTGV4ZXJNb2RlQWN0aW9uOyIsIi8vXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vLy9cblxuLy8gUmVwcmVzZW50cyBhbiBleGVjdXRvciBmb3IgYSBzZXF1ZW5jZSBvZiBsZXhlciBhY3Rpb25zIHdoaWNoIHRyYXZlcnNlZCBkdXJpbmdcbi8vIHRoZSBtYXRjaGluZyBvcGVyYXRpb24gb2YgYSBsZXhlciBydWxlICh0b2tlbikuXG4vL1xuLy8gPHA+VGhlIGV4ZWN1dG9yIHRyYWNrcyBwb3NpdGlvbiBpbmZvcm1hdGlvbiBmb3IgcG9zaXRpb24tZGVwZW5kZW50IGxleGVyIGFjdGlvbnNcbi8vIGVmZmljaWVudGx5LCBlbnN1cmluZyB0aGF0IGFjdGlvbnMgYXBwZWFyaW5nIG9ubHkgYXQgdGhlIGVuZCBvZiB0aGUgcnVsZSBkb1xuLy8gbm90IGNhdXNlIGJsb2F0aW5nIG9mIHRoZSB7QGxpbmsgREZBfSBjcmVhdGVkIGZvciB0aGUgbGV4ZXIuPC9wPlxuXG52YXIgaGFzaFN0dWZmID0gcmVxdWlyZShcIi4uL1V0aWxzXCIpLmhhc2hTdHVmZjtcbnZhciBMZXhlckluZGV4ZWRDdXN0b21BY3Rpb24gPSByZXF1aXJlKCcuL0xleGVyQWN0aW9uJykuTGV4ZXJJbmRleGVkQ3VzdG9tQWN0aW9uO1xuXG5mdW5jdGlvbiBMZXhlckFjdGlvbkV4ZWN1dG9yKGxleGVyQWN0aW9ucykge1xuXHR0aGlzLmxleGVyQWN0aW9ucyA9IGxleGVyQWN0aW9ucyA9PT0gbnVsbCA/IFtdIDogbGV4ZXJBY3Rpb25zO1xuXHQvLyBDYWNoZXMgdGhlIHJlc3VsdCBvZiB7QGxpbmsgLy9oYXNoQ29kZX0gc2luY2UgdGhlIGhhc2ggY29kZSBpcyBhbiBlbGVtZW50XG5cdC8vIG9mIHRoZSBwZXJmb3JtYW5jZS1jcml0aWNhbCB7QGxpbmsgTGV4ZXJBVE5Db25maWcvL2hhc2hDb2RlfSBvcGVyYXRpb24uXG5cdHRoaXMuY2FjaGVkSGFzaENvZGUgPSBoYXNoU3R1ZmYobGV4ZXJBY3Rpb25zKTsgLy8gXCJcIi5qb2luKFtzdHIobGEpIGZvciBsYSBpblxuXHQvLyBsZXhlckFjdGlvbnNdKSlcblx0cmV0dXJuIHRoaXM7XG59XG5cbi8vIENyZWF0ZXMgYSB7QGxpbmsgTGV4ZXJBY3Rpb25FeGVjdXRvcn0gd2hpY2ggZXhlY3V0ZXMgdGhlIGFjdGlvbnMgZm9yXG4vLyB0aGUgaW5wdXQge0Bjb2RlIGxleGVyQWN0aW9uRXhlY3V0b3J9IGZvbGxvd2VkIGJ5IGEgc3BlY2lmaWVkXG4vLyB7QGNvZGUgbGV4ZXJBY3Rpb259LlxuLy9cbi8vIEBwYXJhbSBsZXhlckFjdGlvbkV4ZWN1dG9yIFRoZSBleGVjdXRvciBmb3IgYWN0aW9ucyBhbHJlYWR5IHRyYXZlcnNlZCBieVxuLy8gdGhlIGxleGVyIHdoaWxlIG1hdGNoaW5nIGEgdG9rZW4gd2l0aGluIGEgcGFydGljdWxhclxuLy8ge0BsaW5rIExleGVyQVROQ29uZmlnfS4gSWYgdGhpcyBpcyB7QGNvZGUgbnVsbH0sIHRoZSBtZXRob2QgYmVoYXZlcyBhc1xuLy8gdGhvdWdoIGl0IHdlcmUgYW4gZW1wdHkgZXhlY3V0b3IuXG4vLyBAcGFyYW0gbGV4ZXJBY3Rpb24gVGhlIGxleGVyIGFjdGlvbiB0byBleGVjdXRlIGFmdGVyIHRoZSBhY3Rpb25zXG4vLyBzcGVjaWZpZWQgaW4ge0Bjb2RlIGxleGVyQWN0aW9uRXhlY3V0b3J9LlxuLy9cbi8vIEByZXR1cm4gQSB7QGxpbmsgTGV4ZXJBY3Rpb25FeGVjdXRvcn0gZm9yIGV4ZWN1dGluZyB0aGUgY29tYmluZSBhY3Rpb25zXG4vLyBvZiB7QGNvZGUgbGV4ZXJBY3Rpb25FeGVjdXRvcn0gYW5kIHtAY29kZSBsZXhlckFjdGlvbn0uXG5MZXhlckFjdGlvbkV4ZWN1dG9yLmFwcGVuZCA9IGZ1bmN0aW9uKGxleGVyQWN0aW9uRXhlY3V0b3IsIGxleGVyQWN0aW9uKSB7XG5cdGlmIChsZXhlckFjdGlvbkV4ZWN1dG9yID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIG5ldyBMZXhlckFjdGlvbkV4ZWN1dG9yKFsgbGV4ZXJBY3Rpb24gXSk7XG5cdH1cblx0dmFyIGxleGVyQWN0aW9ucyA9IGxleGVyQWN0aW9uRXhlY3V0b3IubGV4ZXJBY3Rpb25zLmNvbmNhdChbIGxleGVyQWN0aW9uIF0pO1xuXHRyZXR1cm4gbmV3IExleGVyQWN0aW9uRXhlY3V0b3IobGV4ZXJBY3Rpb25zKTtcbn07XG5cbi8vIENyZWF0ZXMgYSB7QGxpbmsgTGV4ZXJBY3Rpb25FeGVjdXRvcn0gd2hpY2ggZW5jb2RlcyB0aGUgY3VycmVudCBvZmZzZXRcbi8vIGZvciBwb3NpdGlvbi1kZXBlbmRlbnQgbGV4ZXIgYWN0aW9ucy5cbi8vXG4vLyA8cD5Ob3JtYWxseSwgd2hlbiB0aGUgZXhlY3V0b3IgZW5jb3VudGVycyBsZXhlciBhY3Rpb25zIHdoZXJlXG4vLyB7QGxpbmsgTGV4ZXJBY3Rpb24vL2lzUG9zaXRpb25EZXBlbmRlbnR9IHJldHVybnMge0Bjb2RlIHRydWV9LCBpdCBjYWxsc1xuLy8ge0BsaW5rIEludFN0cmVhbS8vc2Vla30gb24gdGhlIGlucHV0IHtAbGluayBDaGFyU3RyZWFtfSB0byBzZXQgdGhlIGlucHV0XG4vLyBwb3NpdGlvbiB0byB0aGUgPGVtPmVuZDwvZW0+IG9mIHRoZSBjdXJyZW50IHRva2VuLiBUaGlzIGJlaGF2aW9yIHByb3ZpZGVzXG4vLyBmb3IgZWZmaWNpZW50IERGQSByZXByZXNlbnRhdGlvbiBvZiBsZXhlciBhY3Rpb25zIHdoaWNoIGFwcGVhciBhdCB0aGUgZW5kXG4vLyBvZiBhIGxleGVyIHJ1bGUsIGV2ZW4gd2hlbiB0aGUgbGV4ZXIgcnVsZSBtYXRjaGVzIGEgdmFyaWFibGUgbnVtYmVyIG9mXG4vLyBjaGFyYWN0ZXJzLjwvcD5cbi8vXG4vLyA8cD5QcmlvciB0byB0cmF2ZXJzaW5nIGEgbWF0Y2ggdHJhbnNpdGlvbiBpbiB0aGUgQVROLCB0aGUgY3VycmVudCBvZmZzZXRcbi8vIGZyb20gdGhlIHRva2VuIHN0YXJ0IGluZGV4IGlzIGFzc2lnbmVkIHRvIGFsbCBwb3NpdGlvbi1kZXBlbmRlbnQgbGV4ZXJcbi8vIGFjdGlvbnMgd2hpY2ggaGF2ZSBub3QgYWxyZWFkeSBiZWVuIGFzc2lnbmVkIGEgZml4ZWQgb2Zmc2V0LiBCeSBzdG9yaW5nXG4vLyB0aGUgb2Zmc2V0cyByZWxhdGl2ZSB0byB0aGUgdG9rZW4gc3RhcnQgaW5kZXgsIHRoZSBERkEgcmVwcmVzZW50YXRpb24gb2Zcbi8vIGxleGVyIGFjdGlvbnMgd2hpY2ggYXBwZWFyIGluIHRoZSBtaWRkbGUgb2YgdG9rZW5zIHJlbWFpbnMgZWZmaWNpZW50IGR1ZVxuLy8gdG8gc2hhcmluZyBhbW9uZyB0b2tlbnMgb2YgdGhlIHNhbWUgbGVuZ3RoLCByZWdhcmRsZXNzIG9mIHRoZWlyIGFic29sdXRlXG4vLyBwb3NpdGlvbiBpbiB0aGUgaW5wdXQgc3RyZWFtLjwvcD5cbi8vXG4vLyA8cD5JZiB0aGUgY3VycmVudCBleGVjdXRvciBhbHJlYWR5IGhhcyBvZmZzZXRzIGFzc2lnbmVkIHRvIGFsbFxuLy8gcG9zaXRpb24tZGVwZW5kZW50IGxleGVyIGFjdGlvbnMsIHRoZSBtZXRob2QgcmV0dXJucyB7QGNvZGUgdGhpc30uPC9wPlxuLy9cbi8vIEBwYXJhbSBvZmZzZXQgVGhlIGN1cnJlbnQgb2Zmc2V0IHRvIGFzc2lnbiB0byBhbGwgcG9zaXRpb24tZGVwZW5kZW50XG4vLyBsZXhlciBhY3Rpb25zIHdoaWNoIGRvIG5vdCBhbHJlYWR5IGhhdmUgb2Zmc2V0cyBhc3NpZ25lZC5cbi8vXG4vLyBAcmV0dXJuIEEge0BsaW5rIExleGVyQWN0aW9uRXhlY3V0b3J9IHdoaWNoIHN0b3JlcyBpbnB1dCBzdHJlYW0gb2Zmc2V0c1xuLy8gZm9yIGFsbCBwb3NpdGlvbi1kZXBlbmRlbnQgbGV4ZXIgYWN0aW9ucy5cbi8vIC9cbkxleGVyQWN0aW9uRXhlY3V0b3IucHJvdG90eXBlLmZpeE9mZnNldEJlZm9yZU1hdGNoID0gZnVuY3Rpb24ob2Zmc2V0KSB7XG5cdHZhciB1cGRhdGVkTGV4ZXJBY3Rpb25zID0gbnVsbDtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxleGVyQWN0aW9ucy5sZW5ndGg7IGkrKykge1xuXHRcdGlmICh0aGlzLmxleGVyQWN0aW9uc1tpXS5pc1Bvc2l0aW9uRGVwZW5kZW50ICYmXG5cdFx0XHRcdCEodGhpcy5sZXhlckFjdGlvbnNbaV0gaW5zdGFuY2VvZiBMZXhlckluZGV4ZWRDdXN0b21BY3Rpb24pKSB7XG5cdFx0XHRpZiAodXBkYXRlZExleGVyQWN0aW9ucyA9PT0gbnVsbCkge1xuXHRcdFx0XHR1cGRhdGVkTGV4ZXJBY3Rpb25zID0gdGhpcy5sZXhlckFjdGlvbnMuY29uY2F0KFtdKTtcblx0XHRcdH1cblx0XHRcdHVwZGF0ZWRMZXhlckFjdGlvbnNbaV0gPSBuZXcgTGV4ZXJJbmRleGVkQ3VzdG9tQWN0aW9uKG9mZnNldCxcblx0XHRcdFx0XHR0aGlzLmxleGVyQWN0aW9uc1tpXSk7XG5cdFx0fVxuXHR9XG5cdGlmICh1cGRhdGVkTGV4ZXJBY3Rpb25zID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIG5ldyBMZXhlckFjdGlvbkV4ZWN1dG9yKHVwZGF0ZWRMZXhlckFjdGlvbnMpO1xuXHR9XG59O1xuXG4vLyBFeGVjdXRlIHRoZSBhY3Rpb25zIGVuY2Fwc3VsYXRlZCBieSB0aGlzIGV4ZWN1dG9yIHdpdGhpbiB0aGUgY29udGV4dCBvZiBhXG4vLyBwYXJ0aWN1bGFyIHtAbGluayBMZXhlcn0uXG4vL1xuLy8gPHA+VGhpcyBtZXRob2QgY2FsbHMge0BsaW5rIEludFN0cmVhbS8vc2Vla30gdG8gc2V0IHRoZSBwb3NpdGlvbiBvZiB0aGVcbi8vIHtAY29kZSBpbnB1dH0ge0BsaW5rIENoYXJTdHJlYW19IHByaW9yIHRvIGNhbGxpbmdcbi8vIHtAbGluayBMZXhlckFjdGlvbi8vZXhlY3V0ZX0gb24gYSBwb3NpdGlvbi1kZXBlbmRlbnQgYWN0aW9uLiBCZWZvcmUgdGhlXG4vLyBtZXRob2QgcmV0dXJucywgdGhlIGlucHV0IHBvc2l0aW9uIHdpbGwgYmUgcmVzdG9yZWQgdG8gdGhlIHNhbWUgcG9zaXRpb25cbi8vIGl0IHdhcyBpbiB3aGVuIHRoZSBtZXRob2Qgd2FzIGludm9rZWQuPC9wPlxuLy9cbi8vIEBwYXJhbSBsZXhlciBUaGUgbGV4ZXIgaW5zdGFuY2UuXG4vLyBAcGFyYW0gaW5wdXQgVGhlIGlucHV0IHN0cmVhbSB3aGljaCBpcyB0aGUgc291cmNlIGZvciB0aGUgY3VycmVudCB0b2tlbi5cbi8vIFdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkLCB0aGUgY3VycmVudCB7QGxpbmsgSW50U3RyZWFtLy9pbmRleH0gZm9yXG4vLyB7QGNvZGUgaW5wdXR9IHNob3VsZCBiZSB0aGUgc3RhcnQgb2YgdGhlIGZvbGxvd2luZyB0b2tlbiwgaS5lLiAxXG4vLyBjaGFyYWN0ZXIgcGFzdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IHRva2VuLlxuLy8gQHBhcmFtIHN0YXJ0SW5kZXggVGhlIHRva2VuIHN0YXJ0IGluZGV4LiBUaGlzIHZhbHVlIG1heSBiZSBwYXNzZWQgdG9cbi8vIHtAbGluayBJbnRTdHJlYW0vL3NlZWt9IHRvIHNldCB0aGUge0Bjb2RlIGlucHV0fSBwb3NpdGlvbiB0byB0aGUgYmVnaW5uaW5nXG4vLyBvZiB0aGUgdG9rZW4uXG4vLyAvXG5MZXhlckFjdGlvbkV4ZWN1dG9yLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24obGV4ZXIsIGlucHV0LCBzdGFydEluZGV4KSB7XG5cdHZhciByZXF1aXJlc1NlZWsgPSBmYWxzZTtcblx0dmFyIHN0b3BJbmRleCA9IGlucHV0LmluZGV4O1xuXHR0cnkge1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZXhlckFjdGlvbnMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBsZXhlckFjdGlvbiA9IHRoaXMubGV4ZXJBY3Rpb25zW2ldO1xuXHRcdFx0aWYgKGxleGVyQWN0aW9uIGluc3RhbmNlb2YgTGV4ZXJJbmRleGVkQ3VzdG9tQWN0aW9uKSB7XG5cdFx0XHRcdHZhciBvZmZzZXQgPSBsZXhlckFjdGlvbi5vZmZzZXQ7XG5cdFx0XHRcdGlucHV0LnNlZWsoc3RhcnRJbmRleCArIG9mZnNldCk7XG5cdFx0XHRcdGxleGVyQWN0aW9uID0gbGV4ZXJBY3Rpb24uYWN0aW9uO1xuXHRcdFx0XHRyZXF1aXJlc1NlZWsgPSAoc3RhcnRJbmRleCArIG9mZnNldCkgIT09IHN0b3BJbmRleDtcblx0XHRcdH0gZWxzZSBpZiAobGV4ZXJBY3Rpb24uaXNQb3NpdGlvbkRlcGVuZGVudCkge1xuXHRcdFx0XHRpbnB1dC5zZWVrKHN0b3BJbmRleCk7XG5cdFx0XHRcdHJlcXVpcmVzU2VlayA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0bGV4ZXJBY3Rpb24uZXhlY3V0ZShsZXhlcik7XG5cdFx0fVxuXHR9IGZpbmFsbHkge1xuXHRcdGlmIChyZXF1aXJlc1NlZWspIHtcblx0XHRcdGlucHV0LnNlZWsoc3RvcEluZGV4KTtcblx0XHR9XG5cdH1cbn07XG5cbkxleGVyQWN0aW9uRXhlY3V0b3IucHJvdG90eXBlLmhhc2hDb2RlID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLmNhY2hlZEhhc2hDb2RlO1xufTtcblxuTGV4ZXJBY3Rpb25FeGVjdXRvci5wcm90b3R5cGUudXBkYXRlSGFzaENvZGUgPSBmdW5jdGlvbihoYXNoKSB7XG4gICAgaGFzaC51cGRhdGUodGhpcy5jYWNoZWRIYXNoQ29kZSk7XG59O1xuXG5cbkxleGVyQWN0aW9uRXhlY3V0b3IucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uKG90aGVyKSB7XG5cdGlmICh0aGlzID09PSBvdGhlcikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGVsc2UgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBMZXhlckFjdGlvbkV4ZWN1dG9yKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBlbHNlIGlmICh0aGlzLmNhY2hlZEhhc2hDb2RlICE9IG90aGVyLmNhY2hlZEhhc2hDb2RlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9IGVsc2UgaWYgKHRoaXMubGV4ZXJBY3Rpb25zLmxlbmd0aCAhPSBvdGhlci5sZXhlckFjdGlvbnMubGVuZ3RoKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9IGVsc2Uge1xuXHRcdHZhciBudW1BY3Rpb25zID0gdGhpcy5sZXhlckFjdGlvbnMubGVuZ3RoXG5cdFx0Zm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgbnVtQWN0aW9uczsgKytpZHgpIHtcblx0XHRcdGlmICghdGhpcy5sZXhlckFjdGlvbnNbaWR4XS5lcXVhbHMob3RoZXIubGV4ZXJBY3Rpb25zW2lkeF0pKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn07XG5cbmV4cG9ydHMuTGV4ZXJBY3Rpb25FeGVjdXRvciA9IExleGVyQWN0aW9uRXhlY3V0b3I7XG4iLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy9cblxuLy9cbi8vIFRoZSBlbWJvZGltZW50IG9mIHRoZSBhZGFwdGl2ZSBMTCgqKSwgQUxMKCopLCBwYXJzaW5nIHN0cmF0ZWd5LlxuLy9cbi8vIDxwPlxuLy8gVGhlIGJhc2ljIGNvbXBsZXhpdHkgb2YgdGhlIGFkYXB0aXZlIHN0cmF0ZWd5IG1ha2VzIGl0IGhhcmRlciB0byB1bmRlcnN0YW5kLlxuLy8gV2UgYmVnaW4gd2l0aCBBVE4gc2ltdWxhdGlvbiB0byBidWlsZCBwYXRocyBpbiBhIERGQS4gU3Vic2VxdWVudCBwcmVkaWN0aW9uXG4vLyByZXF1ZXN0cyBnbyB0aHJvdWdoIHRoZSBERkEgZmlyc3QuIElmIHRoZXkgcmVhY2ggYSBzdGF0ZSB3aXRob3V0IGFuIGVkZ2UgZm9yXG4vLyB0aGUgY3VycmVudCBzeW1ib2wsIHRoZSBhbGdvcml0aG0gZmFpbHMgb3ZlciB0byB0aGUgQVROIHNpbXVsYXRpb24gdG9cbi8vIGNvbXBsZXRlIHRoZSBERkEgcGF0aCBmb3IgdGhlIGN1cnJlbnQgaW5wdXQgKHVudGlsIGl0IGZpbmRzIGEgY29uZmxpY3Qgc3RhdGVcbi8vIG9yIHVuaXF1ZWx5IHByZWRpY3Rpbmcgc3RhdGUpLjwvcD5cbi8vXG4vLyA8cD5cbi8vIEFsbCBvZiB0aGF0IGlzIGRvbmUgd2l0aG91dCB1c2luZyB0aGUgb3V0ZXIgY29udGV4dCBiZWNhdXNlIHdlIHdhbnQgdG8gY3JlYXRlXG4vLyBhIERGQSB0aGF0IGlzIG5vdCBkZXBlbmRlbnQgdXBvbiB0aGUgcnVsZSBpbnZvY2F0aW9uIHN0YWNrIHdoZW4gd2UgZG8gYVxuLy8gcHJlZGljdGlvbi4gT25lIERGQSB3b3JrcyBpbiBhbGwgY29udGV4dHMuIFdlIGF2b2lkIHVzaW5nIGNvbnRleHQgbm90XG4vLyBuZWNlc3NhcmlseSBiZWNhdXNlIGl0J3Mgc2xvd2VyLCBhbHRob3VnaCBpdCBjYW4gYmUsIGJ1dCBiZWNhdXNlIG9mIHRoZSBERkFcbi8vIGNhY2hpbmcgcHJvYmxlbS4gVGhlIGNsb3N1cmUgcm91dGluZSBvbmx5IGNvbnNpZGVycyB0aGUgcnVsZSBpbnZvY2F0aW9uIHN0YWNrXG4vLyBjcmVhdGVkIGR1cmluZyBwcmVkaWN0aW9uIGJlZ2lubmluZyBpbiB0aGUgZGVjaXNpb24gcnVsZS4gRm9yIGV4YW1wbGUsIGlmXG4vLyBwcmVkaWN0aW9uIG9jY3VycyB3aXRob3V0IGludm9raW5nIGFub3RoZXIgcnVsZSdzIEFUTiwgdGhlcmUgYXJlIG5vIGNvbnRleHRcbi8vIHN0YWNrcyBpbiB0aGUgY29uZmlndXJhdGlvbnMuIFdoZW4gbGFjayBvZiBjb250ZXh0IGxlYWRzIHRvIGEgY29uZmxpY3QsIHdlXG4vLyBkb24ndCBrbm93IGlmIGl0J3MgYW4gYW1iaWd1aXR5IG9yIGEgd2Vha25lc3MgaW4gdGhlIHN0cm9uZyBMTCgqKSBwYXJzaW5nXG4vLyBzdHJhdGVneSAodmVyc3VzIGZ1bGwgTEwoKikpLjwvcD5cbi8vXG4vLyA8cD5cbi8vIFdoZW4gU0xMIHlpZWxkcyBhIGNvbmZpZ3VyYXRpb24gc2V0IHdpdGggY29uZmxpY3QsIHdlIHJld2luZCB0aGUgaW5wdXQgYW5kXG4vLyByZXRyeSB0aGUgQVROIHNpbXVsYXRpb24sIHRoaXMgdGltZSB1c2luZyBmdWxsIG91dGVyIGNvbnRleHQgd2l0aG91dCBhZGRpbmdcbi8vIHRvIHRoZSBERkEuIENvbmZpZ3VyYXRpb24gY29udGV4dCBzdGFja3Mgd2lsbCBiZSB0aGUgZnVsbCBpbnZvY2F0aW9uIHN0YWNrc1xuLy8gZnJvbSB0aGUgc3RhcnQgcnVsZS4gSWYgd2UgZ2V0IGEgY29uZmxpY3QgdXNpbmcgZnVsbCBjb250ZXh0LCB0aGVuIHdlIGNhblxuLy8gZGVmaW5pdGl2ZWx5IHNheSB3ZSBoYXZlIGEgdHJ1ZSBhbWJpZ3VpdHkgZm9yIHRoYXQgaW5wdXQgc2VxdWVuY2UuIElmIHdlXG4vLyBkb24ndCBnZXQgYSBjb25mbGljdCwgaXQgaW1wbGllcyB0aGF0IHRoZSBkZWNpc2lvbiBpcyBzZW5zaXRpdmUgdG8gdGhlIG91dGVyXG4vLyBjb250ZXh0LiAoSXQgaXMgbm90IGNvbnRleHQtc2Vuc2l0aXZlIGluIHRoZSBzZW5zZSBvZiBjb250ZXh0LXNlbnNpdGl2ZVxuLy8gZ3JhbW1hcnMuKTwvcD5cbi8vXG4vLyA8cD5cbi8vIFRoZSBuZXh0IHRpbWUgd2UgcmVhY2ggdGhpcyBERkEgc3RhdGUgd2l0aCBhbiBTTEwgY29uZmxpY3QsIHRocm91Z2ggREZBXG4vLyBzaW11bGF0aW9uLCB3ZSB3aWxsIGFnYWluIHJldHJ5IHRoZSBBVE4gc2ltdWxhdGlvbiB1c2luZyBmdWxsIGNvbnRleHQgbW9kZS5cbi8vIFRoaXMgaXMgc2xvdyBiZWNhdXNlIHdlIGNhbid0IHNhdmUgdGhlIHJlc3VsdHMgYW5kIGhhdmUgdG8gXCJpbnRlcnByZXRcIiB0aGVcbi8vIEFUTiBlYWNoIHRpbWUgd2UgZ2V0IHRoYXQgaW5wdXQuPC9wPlxuLy9cbi8vIDxwPlxuLy8gPHN0cm9uZz5DQUNISU5HIEZVTEwgQ09OVEVYVCBQUkVESUNUSU9OUzwvc3Ryb25nPjwvcD5cbi8vXG4vLyA8cD5cbi8vIFdlIGNvdWxkIGNhY2hlIHJlc3VsdHMgZnJvbSBmdWxsIGNvbnRleHQgdG8gcHJlZGljdGVkIGFsdGVybmF0aXZlIGVhc2lseSBhbmRcbi8vIHRoYXQgc2F2ZXMgYSBsb3Qgb2YgdGltZSBidXQgZG9lc24ndCB3b3JrIGluIHByZXNlbmNlIG9mIHByZWRpY2F0ZXMuIFRoZSBzZXRcbi8vIG9mIHZpc2libGUgcHJlZGljYXRlcyBmcm9tIHRoZSBBVE4gc3RhcnQgc3RhdGUgY2hhbmdlcyBkZXBlbmRpbmcgb24gdGhlXG4vLyBjb250ZXh0LCBiZWNhdXNlIGNsb3N1cmUgY2FuIGZhbGwgb2ZmIHRoZSBlbmQgb2YgYSBydWxlLiBJIHRyaWVkIHRvIGNhY2hlXG4vLyB0dXBsZXMgKHN0YWNrIGNvbnRleHQsIHNlbWFudGljIGNvbnRleHQsIHByZWRpY3RlZCBhbHQpIGJ1dCBpdCB3YXMgc2xvd2VyXG4vLyB0aGFuIGludGVycHJldGluZyBhbmQgbXVjaCBtb3JlIGNvbXBsaWNhdGVkLiBBbHNvIHJlcXVpcmVkIGEgaHVnZSBhbW91bnQgb2Zcbi8vIG1lbW9yeS4gVGhlIGdvYWwgaXMgbm90IHRvIGNyZWF0ZSB0aGUgd29ybGQncyBmYXN0ZXN0IHBhcnNlciBhbnl3YXkuIEknZCBsaWtlXG4vLyB0byBrZWVwIHRoaXMgYWxnb3JpdGhtIHNpbXBsZS4gQnkgbGF1bmNoaW5nIG11bHRpcGxlIHRocmVhZHMsIHdlIGNhbiBpbXByb3ZlXG4vLyB0aGUgc3BlZWQgb2YgcGFyc2luZyBhY3Jvc3MgYSBsYXJnZSBudW1iZXIgb2YgZmlsZXMuPC9wPlxuLy9cbi8vIDxwPlxuLy8gVGhlcmUgaXMgbm8gc3RyaWN0IG9yZGVyaW5nIGJldHdlZW4gdGhlIGFtb3VudCBvZiBpbnB1dCB1c2VkIGJ5IFNMTCB2cyBMTCxcbi8vIHdoaWNoIG1ha2VzIGl0IHJlYWxseSBoYXJkIHRvIGJ1aWxkIGEgY2FjaGUgZm9yIGZ1bGwgY29udGV4dC4gTGV0J3Mgc2F5IHRoYXRcbi8vIHdlIGhhdmUgaW5wdXQgQSBCIEMgdGhhdCBsZWFkcyB0byBhbiBTTEwgY29uZmxpY3Qgd2l0aCBmdWxsIGNvbnRleHQgWC4gVGhhdFxuLy8gaW1wbGllcyB0aGF0IHVzaW5nIFggd2UgbWlnaHQgb25seSB1c2UgQSBCIGJ1dCB3ZSBjb3VsZCBhbHNvIHVzZSBBIEIgQyBEIHRvXG4vLyByZXNvbHZlIGNvbmZsaWN0LiBJbnB1dCBBIEIgQyBEIGNvdWxkIHByZWRpY3QgYWx0ZXJuYXRpdmUgMSBpbiBvbmUgcG9zaXRpb25cbi8vIGluIHRoZSBpbnB1dCBhbmQgQSBCIEMgRSBjb3VsZCBwcmVkaWN0IGFsdGVybmF0aXZlIDIgaW4gYW5vdGhlciBwb3NpdGlvbiBpblxuLy8gaW5wdXQuIFRoZSBjb25mbGljdGluZyBTTEwgY29uZmlndXJhdGlvbnMgY291bGQgc3RpbGwgYmUgbm9uLXVuaXF1ZSBpbiB0aGVcbi8vIGZ1bGwgY29udGV4dCBwcmVkaWN0aW9uLCB3aGljaCB3b3VsZCBsZWFkIHVzIHRvIHJlcXVpcmluZyBtb3JlIGlucHV0IHRoYW4gdGhlXG4vLyBvcmlnaW5hbCBBIEIgQy5cdFRvIG1ha2UgYVx0cHJlZGljdGlvbiBjYWNoZSB3b3JrLCB3ZSBoYXZlIHRvIHRyYWNrXHR0aGUgZXhhY3Rcbi8vIGlucHV0XHR1c2VkIGR1cmluZyB0aGUgcHJldmlvdXMgcHJlZGljdGlvbi4gVGhhdCBhbW91bnRzIHRvIGEgY2FjaGUgdGhhdCBtYXBzXG4vLyBYIHRvIGEgc3BlY2lmaWMgREZBIGZvciB0aGF0IGNvbnRleHQuPC9wPlxuLy9cbi8vIDxwPlxuLy8gU29tZXRoaW5nIHNob3VsZCBiZSBkb25lIGZvciBsZWZ0LXJlY3Vyc2l2ZSBleHByZXNzaW9uIHByZWRpY3Rpb25zLiBUaGV5IGFyZVxuLy8gbGlrZWx5IExMKDEpICsgcHJlZCBldmFsLiBFYXNpZXIgdG8gZG8gdGhlIHdob2xlIFNMTCB1bmxlc3MgZXJyb3IgYW5kIHJldHJ5XG4vLyB3aXRoIGZ1bGwgTEwgdGhpbmcgU2FtIGRvZXMuPC9wPlxuLy9cbi8vIDxwPlxuLy8gPHN0cm9uZz5BVk9JRElORyBGVUxMIENPTlRFWFQgUFJFRElDVElPTjwvc3Ryb25nPjwvcD5cbi8vXG4vLyA8cD5cbi8vIFdlIGF2b2lkIGRvaW5nIGZ1bGwgY29udGV4dCByZXRyeSB3aGVuIHRoZSBvdXRlciBjb250ZXh0IGlzIGVtcHR5LCB3ZSBkaWQgbm90XG4vLyBkaXAgaW50byB0aGUgb3V0ZXIgY29udGV4dCBieSBmYWxsaW5nIG9mZiB0aGUgZW5kIG9mIHRoZSBkZWNpc2lvbiBzdGF0ZSBydWxlLFxuLy8gb3Igd2hlbiB3ZSBmb3JjZSBTTEwgbW9kZS48L3A+XG4vL1xuLy8gPHA+XG4vLyBBcyBhbiBleGFtcGxlIG9mIHRoZSBub3QgZGlwIGludG8gb3V0ZXIgY29udGV4dCBjYXNlLCBjb25zaWRlciBhcyBzdXBlclxuLy8gY29uc3RydWN0b3IgY2FsbHMgdmVyc3VzIGZ1bmN0aW9uIGNhbGxzLiBPbmUgZ3JhbW1hciBtaWdodCBsb29rIGxpa2Vcbi8vIHRoaXM6PC9wPlxuLy9cbi8vIDxwcmU+XG4vLyBjdG9yQm9keVxuLy8gICA6ICd7JyBzdXBlckNhbGw/IHN0YXQqICd9J1xuLy8gICA7XG4vLyA8L3ByZT5cbi8vXG4vLyA8cD5cbi8vIE9yLCB5b3UgbWlnaHQgc2VlIHNvbWV0aGluZyBsaWtlPC9wPlxuLy9cbi8vIDxwcmU+XG4vLyBzdGF0XG4vLyAgIDogc3VwZXJDYWxsICc7J1xuLy8gICB8IGV4cHJlc3Npb24gJzsnXG4vLyAgIHwgLi4uXG4vLyAgIDtcbi8vIDwvcHJlPlxuLy9cbi8vIDxwPlxuLy8gSW4gYm90aCBjYXNlcyBJIGJlbGlldmUgdGhhdCBubyBjbG9zdXJlIG9wZXJhdGlvbnMgd2lsbCBkaXAgaW50byB0aGUgb3V0ZXJcbi8vIGNvbnRleHQuIEluIHRoZSBmaXJzdCBjYXNlIGN0b3JCb2R5IGluIHRoZSB3b3JzdCBjYXNlIHdpbGwgc3RvcCBhdCB0aGUgJ30nLlxuLy8gSW4gdGhlIDJuZCBjYXNlIGl0IHNob3VsZCBzdG9wIGF0IHRoZSAnOycuIEJvdGggY2FzZXMgc2hvdWxkIHN0YXkgd2l0aGluIHRoZVxuLy8gZW50cnkgcnVsZSBhbmQgbm90IGRpcCBpbnRvIHRoZSBvdXRlciBjb250ZXh0LjwvcD5cbi8vXG4vLyA8cD5cbi8vIDxzdHJvbmc+UFJFRElDQVRFUzwvc3Ryb25nPjwvcD5cbi8vXG4vLyA8cD5cbi8vIFByZWRpY2F0ZXMgYXJlIGFsd2F5cyBldmFsdWF0ZWQgaWYgcHJlc2VudCBpbiBlaXRoZXIgU0xMIG9yIExMIGJvdGguIFNMTCBhbmRcbi8vIExMIHNpbXVsYXRpb24gZGVhbHMgd2l0aCBwcmVkaWNhdGVzIGRpZmZlcmVudGx5LiBTTEwgY29sbGVjdHMgcHJlZGljYXRlcyBhc1xuLy8gaXQgcGVyZm9ybXMgY2xvc3VyZSBvcGVyYXRpb25zIGxpa2UgQU5UTFIgdjMgZGlkLiBJdCBkZWxheXMgcHJlZGljYXRlXG4vLyBldmFsdWF0aW9uIHVudGlsIGl0IHJlYWNoZXMgYW5kIGFjY2VwdCBzdGF0ZS4gVGhpcyBhbGxvd3MgdXMgdG8gY2FjaGUgdGhlIFNMTFxuLy8gQVROIHNpbXVsYXRpb24gd2hlcmVhcywgaWYgd2UgaGFkIGV2YWx1YXRlZCBwcmVkaWNhdGVzIG9uLXRoZS1mbHkgZHVyaW5nXG4vLyBjbG9zdXJlLCB0aGUgREZBIHN0YXRlIGNvbmZpZ3VyYXRpb24gc2V0cyB3b3VsZCBiZSBkaWZmZXJlbnQgYW5kIHdlIGNvdWxkbid0XG4vLyBidWlsZCB1cCBhIHN1aXRhYmxlIERGQS48L3A+XG4vL1xuLy8gPHA+XG4vLyBXaGVuIGJ1aWxkaW5nIGEgREZBIGFjY2VwdCBzdGF0ZSBkdXJpbmcgQVROIHNpbXVsYXRpb24sIHdlIGV2YWx1YXRlIGFueVxuLy8gcHJlZGljYXRlcyBhbmQgcmV0dXJuIHRoZSBzb2xlIHNlbWFudGljYWxseSB2YWxpZCBhbHRlcm5hdGl2ZS4gSWYgdGhlcmUgaXNcbi8vIG1vcmUgdGhhbiAxIGFsdGVybmF0aXZlLCB3ZSByZXBvcnQgYW4gYW1iaWd1aXR5LiBJZiB0aGVyZSBhcmUgMCBhbHRlcm5hdGl2ZXMsXG4vLyB3ZSB0aHJvdyBhbiBleGNlcHRpb24uIEFsdGVybmF0aXZlcyB3aXRob3V0IHByZWRpY2F0ZXMgYWN0IGxpa2UgdGhleSBoYXZlXG4vLyB0cnVlIHByZWRpY2F0ZXMuIFRoZSBzaW1wbGUgd2F5IHRvIHRoaW5rIGFib3V0IGl0IGlzIHRvIHN0cmlwIGF3YXkgYWxsXG4vLyBhbHRlcm5hdGl2ZXMgd2l0aCBmYWxzZSBwcmVkaWNhdGVzIGFuZCBjaG9vc2UgdGhlIG1pbmltdW0gYWx0ZXJuYXRpdmUgdGhhdFxuLy8gcmVtYWlucy48L3A+XG4vL1xuLy8gPHA+XG4vLyBXaGVuIHdlIHN0YXJ0IGluIHRoZSBERkEgYW5kIHJlYWNoIGFuIGFjY2VwdCBzdGF0ZSB0aGF0J3MgcHJlZGljYXRlZCwgd2UgdGVzdFxuLy8gdGhvc2UgYW5kIHJldHVybiB0aGUgbWluaW11bSBzZW1hbnRpY2FsbHkgdmlhYmxlIGFsdGVybmF0aXZlLiBJZiBub1xuLy8gYWx0ZXJuYXRpdmVzIGFyZSB2aWFibGUsIHdlIHRocm93IGFuIGV4Y2VwdGlvbi48L3A+XG4vL1xuLy8gPHA+XG4vLyBEdXJpbmcgZnVsbCBMTCBBVE4gc2ltdWxhdGlvbiwgY2xvc3VyZSBhbHdheXMgZXZhbHVhdGVzIHByZWRpY2F0ZXMgYW5kXG4vLyBvbi10aGUtZmx5LiBUaGlzIGlzIGNydWNpYWwgdG8gcmVkdWNpbmcgdGhlIGNvbmZpZ3VyYXRpb24gc2V0IHNpemUgZHVyaW5nXG4vLyBjbG9zdXJlLiBJdCBoaXRzIGEgbGFuZG1pbmUgd2hlbiBwYXJzaW5nIHdpdGggdGhlIEphdmEgZ3JhbW1hciwgZm9yIGV4YW1wbGUsXG4vLyB3aXRob3V0IHRoaXMgb24tdGhlLWZseSBldmFsdWF0aW9uLjwvcD5cbi8vXG4vLyA8cD5cbi8vIDxzdHJvbmc+U0hBUklORyBERkE8L3N0cm9uZz48L3A+XG4vL1xuLy8gPHA+XG4vLyBBbGwgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIHBhcnNlciBzaGFyZSB0aGUgc2FtZSBkZWNpc2lvbiBERkFzIHRocm91Z2ggYVxuLy8gc3RhdGljIGZpZWxkLiBFYWNoIGluc3RhbmNlIGdldHMgaXRzIG93biBBVE4gc2ltdWxhdG9yIGJ1dCB0aGV5IHNoYXJlIHRoZVxuLy8gc2FtZSB7QGxpbmsgLy9kZWNpc2lvblRvREZBfSBmaWVsZC4gVGhleSBhbHNvIHNoYXJlIGFcbi8vIHtAbGluayBQcmVkaWN0aW9uQ29udGV4dENhY2hlfSBvYmplY3QgdGhhdCBtYWtlcyBzdXJlIHRoYXQgYWxsXG4vLyB7QGxpbmsgUHJlZGljdGlvbkNvbnRleHR9IG9iamVjdHMgYXJlIHNoYXJlZCBhbW9uZyB0aGUgREZBIHN0YXRlcy4gVGhpcyBtYWtlc1xuLy8gYSBiaWcgc2l6ZSBkaWZmZXJlbmNlLjwvcD5cbi8vXG4vLyA8cD5cbi8vIDxzdHJvbmc+VEhSRUFEIFNBRkVUWTwvc3Ryb25nPjwvcD5cbi8vXG4vLyA8cD5cbi8vIFRoZSB7QGxpbmsgUGFyc2VyQVROU2ltdWxhdG9yfSBsb2NrcyBvbiB0aGUge0BsaW5rIC8vZGVjaXNpb25Ub0RGQX0gZmllbGQgd2hlblxuLy8gaXQgYWRkcyBhIG5ldyBERkEgb2JqZWN0IHRvIHRoYXQgYXJyYXkuIHtAbGluayAvL2FkZERGQUVkZ2V9XG4vLyBsb2NrcyBvbiB0aGUgREZBIGZvciB0aGUgY3VycmVudCBkZWNpc2lvbiB3aGVuIHNldHRpbmcgdGhlXG4vLyB7QGxpbmsgREZBU3RhdGUvL2VkZ2VzfSBmaWVsZC4ge0BsaW5rIC8vYWRkREZBU3RhdGV9IGxvY2tzIG9uXG4vLyB0aGUgREZBIGZvciB0aGUgY3VycmVudCBkZWNpc2lvbiB3aGVuIGxvb2tpbmcgdXAgYSBERkEgc3RhdGUgdG8gc2VlIGlmIGl0XG4vLyBhbHJlYWR5IGV4aXN0cy4gV2UgbXVzdCBtYWtlIHN1cmUgdGhhdCBhbGwgcmVxdWVzdHMgdG8gYWRkIERGQSBzdGF0ZXMgdGhhdFxuLy8gYXJlIGVxdWl2YWxlbnQgcmVzdWx0IGluIHRoZSBzYW1lIHNoYXJlZCBERkEgb2JqZWN0LiBUaGlzIGlzIGJlY2F1c2UgbG90cyBvZlxuLy8gdGhyZWFkcyB3aWxsIGJlIHRyeWluZyB0byB1cGRhdGUgdGhlIERGQSBhdCBvbmNlLiBUaGVcbi8vIHtAbGluayAvL2FkZERGQVN0YXRlfSBtZXRob2QgYWxzbyBsb2NrcyBpbnNpZGUgdGhlIERGQSBsb2NrXG4vLyBidXQgdGhpcyB0aW1lIG9uIHRoZSBzaGFyZWQgY29udGV4dCBjYWNoZSB3aGVuIGl0IHJlYnVpbGRzIHRoZVxuLy8gY29uZmlndXJhdGlvbnMnIHtAbGluayBQcmVkaWN0aW9uQ29udGV4dH0gb2JqZWN0cyB1c2luZyBjYWNoZWRcbi8vIHN1YmdyYXBocy9ub2Rlcy4gTm8gb3RoZXIgbG9ja2luZyBvY2N1cnMsIGV2ZW4gZHVyaW5nIERGQSBzaW11bGF0aW9uLiBUaGlzIGlzXG4vLyBzYWZlIGFzIGxvbmcgYXMgd2UgY2FuIGd1YXJhbnRlZSB0aGF0IGFsbCB0aHJlYWRzIHJlZmVyZW5jaW5nXG4vLyB7QGNvZGUgcy5lZGdlW3RdfSBnZXQgdGhlIHNhbWUgcGh5c2ljYWwgdGFyZ2V0IHtAbGluayBERkFTdGF0ZX0sIG9yXG4vLyB7QGNvZGUgbnVsbH0uIE9uY2UgaW50byB0aGUgREZBLCB0aGUgREZBIHNpbXVsYXRpb24gZG9lcyBub3QgcmVmZXJlbmNlIHRoZVxuLy8ge0BsaW5rIERGQS8vc3RhdGVzfSBtYXAuIEl0IGZvbGxvd3MgdGhlIHtAbGluayBERkFTdGF0ZS8vZWRnZXN9IGZpZWxkIHRvIG5ld1xuLy8gdGFyZ2V0cy4gVGhlIERGQSBzaW11bGF0b3Igd2lsbCBlaXRoZXIgZmluZCB7QGxpbmsgREZBU3RhdGUvL2VkZ2VzfSB0byBiZVxuLy8ge0Bjb2RlIG51bGx9LCB0byBiZSBub24te0Bjb2RlIG51bGx9IGFuZCB7QGNvZGUgZGZhLmVkZ2VzW3RdfSBudWxsLCBvclxuLy8ge0Bjb2RlIGRmYS5lZGdlc1t0XX0gdG8gYmUgbm9uLW51bGwuIFRoZVxuLy8ge0BsaW5rIC8vYWRkREZBRWRnZX0gbWV0aG9kIGNvdWxkIGJlIHJhY2luZyB0byBzZXQgdGhlIGZpZWxkXG4vLyBidXQgaW4gZWl0aGVyIGNhc2UgdGhlIERGQSBzaW11bGF0b3Igd29ya3M7IGlmIHtAY29kZSBudWxsfSwgYW5kIHJlcXVlc3RzIEFUTlxuLy8gc2ltdWxhdGlvbi4gSXQgY291bGQgYWxzbyByYWNlIHRyeWluZyB0byBnZXQge0Bjb2RlIGRmYS5lZGdlc1t0XX0sIGJ1dCBlaXRoZXJcbi8vIHdheSBpdCB3aWxsIHdvcmsgYmVjYXVzZSBpdCdzIG5vdCBkb2luZyBhIHRlc3QgYW5kIHNldCBvcGVyYXRpb24uPC9wPlxuLy9cbi8vIDxwPlxuLy8gPHN0cm9uZz5TdGFydGluZyB3aXRoIFNMTCB0aGVuIGZhaWxpbmcgdG8gY29tYmluZWQgU0xML0xMIChUd28tU3RhZ2Vcbi8vIFBhcnNpbmcpPC9zdHJvbmc+PC9wPlxuLy9cbi8vIDxwPlxuLy8gU2FtIHBvaW50ZWQgb3V0IHRoYXQgaWYgU0xMIGRvZXMgbm90IGdpdmUgYSBzeW50YXggZXJyb3IsIHRoZW4gdGhlcmUgaXMgbm9cbi8vIHBvaW50IGluIGRvaW5nIGZ1bGwgTEwsIHdoaWNoIGlzIHNsb3dlci4gV2Ugb25seSBoYXZlIHRvIHRyeSBMTCBpZiB3ZSBnZXQgYVxuLy8gc3ludGF4IGVycm9yLiBGb3IgbWF4aW11bSBzcGVlZCwgU2FtIHN0YXJ0cyB0aGUgcGFyc2VyIHNldCB0byBwdXJlIFNMTFxuLy8gbW9kZSB3aXRoIHRoZSB7QGxpbmsgQmFpbEVycm9yU3RyYXRlZ3l9OjwvcD5cbi8vXG4vLyA8cHJlPlxuLy8gcGFyc2VyLntAbGluayBQYXJzZXIvL2dldEludGVycHJldGVyKCkgZ2V0SW50ZXJwcmV0ZXIoKX0ue0BsaW5rIC8vc2V0UHJlZGljdGlvbk1vZGUgc2V0UHJlZGljdGlvbk1vZGV9e0Bjb2RlICh9e0BsaW5rIFByZWRpY3Rpb25Nb2RlLy9TTEx9e0Bjb2RlICl9O1xuLy8gcGFyc2VyLntAbGluayBQYXJzZXIvL3NldEVycm9ySGFuZGxlciBzZXRFcnJvckhhbmRsZXJ9KG5ldyB7QGxpbmsgQmFpbEVycm9yU3RyYXRlZ3l9KCkpO1xuLy8gPC9wcmU+XG4vL1xuLy8gPHA+XG4vLyBJZiBpdCBkb2VzIG5vdCBnZXQgYSBzeW50YXggZXJyb3IsIHRoZW4gd2UncmUgZG9uZS4gSWYgaXQgZG9lcyBnZXQgYSBzeW50YXhcbi8vIGVycm9yLCB3ZSBuZWVkIHRvIHJldHJ5IHdpdGggdGhlIGNvbWJpbmVkIFNMTC9MTCBzdHJhdGVneS48L3A+XG4vL1xuLy8gPHA+XG4vLyBUaGUgcmVhc29uIHRoaXMgd29ya3MgaXMgYXMgZm9sbG93cy4gSWYgdGhlcmUgYXJlIG5vIFNMTCBjb25mbGljdHMsIHRoZW4gdGhlXG4vLyBncmFtbWFyIGlzIFNMTCAoYXQgbGVhc3QgZm9yIHRoYXQgaW5wdXQgc2V0KS4gSWYgdGhlcmUgaXMgYW4gU0xMIGNvbmZsaWN0LFxuLy8gdGhlIGZ1bGwgTEwgYW5hbHlzaXMgbXVzdCB5aWVsZCBhIHNldCBvZiB2aWFibGUgYWx0ZXJuYXRpdmVzIHdoaWNoIGlzIGFcbi8vIHN1YnNldCBvZiB0aGUgYWx0ZXJuYXRpdmVzIHJlcG9ydGVkIGJ5IFNMTC4gSWYgdGhlIExMIHNldCBpcyBhIHNpbmdsZXRvbixcbi8vIHRoZW4gdGhlIGdyYW1tYXIgaXMgTEwgYnV0IG5vdCBTTEwuIElmIHRoZSBMTCBzZXQgaXMgdGhlIHNhbWUgc2l6ZSBhcyB0aGUgU0xMXG4vLyBzZXQsIHRoZSBkZWNpc2lvbiBpcyBTTEwuIElmIHRoZSBMTCBzZXQgaGFzIHNpemUgJmd0OyAxLCB0aGVuIHRoYXQgZGVjaXNpb25cbi8vIGlzIHRydWx5IGFtYmlndW91cyBvbiB0aGUgY3VycmVudCBpbnB1dC4gSWYgdGhlIExMIHNldCBpcyBzbWFsbGVyLCB0aGVuIHRoZVxuLy8gU0xMIGNvbmZsaWN0IHJlc29sdXRpb24gbWlnaHQgY2hvb3NlIGFuIGFsdGVybmF0aXZlIHRoYXQgdGhlIGZ1bGwgTEwgd291bGRcbi8vIHJ1bGUgb3V0IGFzIGEgcG9zc2liaWxpdHkgYmFzZWQgdXBvbiBiZXR0ZXIgY29udGV4dCBpbmZvcm1hdGlvbi4gSWYgdGhhdCdzXG4vLyB0aGUgY2FzZSwgdGhlbiB0aGUgU0xMIHBhcnNlIHdpbGwgZGVmaW5pdGVseSBnZXQgYW4gZXJyb3IgYmVjYXVzZSB0aGUgZnVsbCBMTFxuLy8gYW5hbHlzaXMgc2F5cyBpdCdzIG5vdCB2aWFibGUuIElmIFNMTCBjb25mbGljdCByZXNvbHV0aW9uIGNob29zZXMgYW5cbi8vIGFsdGVybmF0aXZlIHdpdGhpbiB0aGUgTEwgc2V0LCB0aGVtIGJvdGggU0xMIGFuZCBMTCB3b3VsZCBjaG9vc2UgdGhlIHNhbWVcbi8vIGFsdGVybmF0aXZlIGJlY2F1c2UgdGhleSBib3RoIGNob29zZSB0aGUgbWluaW11bSBvZiBtdWx0aXBsZSBjb25mbGljdGluZ1xuLy8gYWx0ZXJuYXRpdmVzLjwvcD5cbi8vXG4vLyA8cD5cbi8vIExldCdzIHNheSB3ZSBoYXZlIGEgc2V0IG9mIFNMTCBjb25mbGljdGluZyBhbHRlcm5hdGl2ZXMge0Bjb2RlIHsxLCAyLCAzfX0gYW5kXG4vLyBhIHNtYWxsZXIgTEwgc2V0IGNhbGxlZCA8ZW0+czwvZW0+LiBJZiA8ZW0+czwvZW0+IGlzIHtAY29kZSB7MiwgM319LCB0aGVuIFNMTFxuLy8gcGFyc2luZyB3aWxsIGdldCBhbiBlcnJvciBiZWNhdXNlIFNMTCB3aWxsIHB1cnN1ZSBhbHRlcm5hdGl2ZSAxLiBJZlxuLy8gPGVtPnM8L2VtPiBpcyB7QGNvZGUgezEsIDJ9fSBvciB7QGNvZGUgezEsIDN9fSB0aGVuIGJvdGggU0xMIGFuZCBMTCB3aWxsXG4vLyBjaG9vc2UgdGhlIHNhbWUgYWx0ZXJuYXRpdmUgYmVjYXVzZSBhbHRlcm5hdGl2ZSBvbmUgaXMgdGhlIG1pbmltdW0gb2YgZWl0aGVyXG4vLyBzZXQuIElmIDxlbT5zPC9lbT4gaXMge0Bjb2RlIHsyfX0gb3Ige0Bjb2RlIHszfX0gdGhlbiBTTEwgd2lsbCBnZXQgYSBzeW50YXhcbi8vIGVycm9yLiBJZiA8ZW0+czwvZW0+IGlzIHtAY29kZSB7MX19IHRoZW4gU0xMIHdpbGwgc3VjY2VlZC48L3A+XG4vL1xuLy8gPHA+XG4vLyBPZiBjb3Vyc2UsIGlmIHRoZSBpbnB1dCBpcyBpbnZhbGlkLCB0aGVuIHdlIHdpbGwgZ2V0IGFuIGVycm9yIGZvciBzdXJlIGluXG4vLyBib3RoIFNMTCBhbmQgTEwgcGFyc2luZy4gRXJyb25lb3VzIGlucHV0IHdpbGwgdGhlcmVmb3JlIHJlcXVpcmUgMiBwYXNzZXMgb3ZlclxuLy8gdGhlIGlucHV0LjwvcD5cbi8vXG5cbnZhciBVdGlscyA9IHJlcXVpcmUoJy4vLi4vVXRpbHMnKTtcbnZhciBTZXQgPSBVdGlscy5TZXQ7XG52YXIgQml0U2V0ID0gVXRpbHMuQml0U2V0O1xudmFyIERvdWJsZURpY3QgPSBVdGlscy5Eb3VibGVEaWN0O1xudmFyIEFUTiA9IHJlcXVpcmUoJy4vQVROJykuQVROO1xudmFyIEFUTlN0YXRlID0gcmVxdWlyZSgnLi9BVE5TdGF0ZScpLkFUTlN0YXRlO1xudmFyIEFUTkNvbmZpZyA9IHJlcXVpcmUoJy4vQVROQ29uZmlnJykuQVROQ29uZmlnO1xudmFyIEFUTkNvbmZpZ1NldCA9IHJlcXVpcmUoJy4vQVROQ29uZmlnU2V0JykuQVROQ29uZmlnU2V0O1xudmFyIFRva2VuID0gcmVxdWlyZSgnLi8uLi9Ub2tlbicpLlRva2VuO1xudmFyIERGQVN0YXRlID0gcmVxdWlyZSgnLi8uLi9kZmEvREZBU3RhdGUnKS5ERkFTdGF0ZTtcbnZhciBQcmVkUHJlZGljdGlvbiA9IHJlcXVpcmUoJy4vLi4vZGZhL0RGQVN0YXRlJykuUHJlZFByZWRpY3Rpb247XG52YXIgQVROU2ltdWxhdG9yID0gcmVxdWlyZSgnLi9BVE5TaW11bGF0b3InKS5BVE5TaW11bGF0b3I7XG52YXIgUHJlZGljdGlvbk1vZGUgPSByZXF1aXJlKCcuL1ByZWRpY3Rpb25Nb2RlJykuUHJlZGljdGlvbk1vZGU7XG52YXIgUnVsZUNvbnRleHQgPSByZXF1aXJlKCcuLy4uL1J1bGVDb250ZXh0JykuUnVsZUNvbnRleHQ7XG52YXIgUGFyc2VyUnVsZUNvbnRleHQgPSByZXF1aXJlKCcuLy4uL1BhcnNlclJ1bGVDb250ZXh0JykuUGFyc2VyUnVsZUNvbnRleHQ7XG52YXIgU2VtYW50aWNDb250ZXh0ID0gcmVxdWlyZSgnLi9TZW1hbnRpY0NvbnRleHQnKS5TZW1hbnRpY0NvbnRleHQ7XG52YXIgU3Rhckxvb3BFbnRyeVN0YXRlID0gcmVxdWlyZSgnLi9BVE5TdGF0ZScpLlN0YXJMb29wRW50cnlTdGF0ZTtcbnZhciBSdWxlU3RvcFN0YXRlID0gcmVxdWlyZSgnLi9BVE5TdGF0ZScpLlJ1bGVTdG9wU3RhdGU7XG52YXIgUHJlZGljdGlvbkNvbnRleHQgPSByZXF1aXJlKCcuLy4uL1ByZWRpY3Rpb25Db250ZXh0JykuUHJlZGljdGlvbkNvbnRleHQ7XG52YXIgSW50ZXJ2YWwgPSByZXF1aXJlKCcuLy4uL0ludGVydmFsU2V0JykuSW50ZXJ2YWw7XG52YXIgVHJhbnNpdGlvbnMgPSByZXF1aXJlKCcuL1RyYW5zaXRpb24nKTtcbnZhciBUcmFuc2l0aW9uID0gVHJhbnNpdGlvbnMuVHJhbnNpdGlvbjtcbnZhciBTZXRUcmFuc2l0aW9uID0gVHJhbnNpdGlvbnMuU2V0VHJhbnNpdGlvbjtcbnZhciBOb3RTZXRUcmFuc2l0aW9uID0gVHJhbnNpdGlvbnMuTm90U2V0VHJhbnNpdGlvbjtcbnZhciBSdWxlVHJhbnNpdGlvbiA9IFRyYW5zaXRpb25zLlJ1bGVUcmFuc2l0aW9uO1xudmFyIEFjdGlvblRyYW5zaXRpb24gPSBUcmFuc2l0aW9ucy5BY3Rpb25UcmFuc2l0aW9uO1xudmFyIE5vVmlhYmxlQWx0RXhjZXB0aW9uID0gcmVxdWlyZSgnLi8uLi9lcnJvci9FcnJvcnMnKS5Ob1ZpYWJsZUFsdEV4Y2VwdGlvbjtcblxudmFyIFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0ID0gcmVxdWlyZSgnLi8uLi9QcmVkaWN0aW9uQ29udGV4dCcpLlNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0O1xudmFyIHByZWRpY3Rpb25Db250ZXh0RnJvbVJ1bGVDb250ZXh0ID0gcmVxdWlyZSgnLi8uLi9QcmVkaWN0aW9uQ29udGV4dCcpLnByZWRpY3Rpb25Db250ZXh0RnJvbVJ1bGVDb250ZXh0O1xuXG5mdW5jdGlvbiBQYXJzZXJBVE5TaW11bGF0b3IocGFyc2VyLCBhdG4sIGRlY2lzaW9uVG9ERkEsIHNoYXJlZENvbnRleHRDYWNoZSkge1xuXHRBVE5TaW11bGF0b3IuY2FsbCh0aGlzLCBhdG4sIHNoYXJlZENvbnRleHRDYWNoZSk7XG4gICAgdGhpcy5wYXJzZXIgPSBwYXJzZXI7XG4gICAgdGhpcy5kZWNpc2lvblRvREZBID0gZGVjaXNpb25Ub0RGQTtcbiAgICAvLyBTTEwsIExMLCBvciBMTCArIGV4YWN0IGFtYmlnIGRldGVjdGlvbj8vL1xuICAgIHRoaXMucHJlZGljdGlvbk1vZGUgPSBQcmVkaWN0aW9uTW9kZS5MTDtcbiAgICAvLyBMQU1FIGdsb2JhbHMgdG8gYXZvaWQgcGFyYW1ldGVycyEhISEhIEkgbmVlZCB0aGVzZSBkb3duIGRlZXAgaW4gcHJlZFRyYW5zaXRpb25cbiAgICB0aGlzLl9pbnB1dCA9IG51bGw7XG4gICAgdGhpcy5fc3RhcnRJbmRleCA9IDA7XG4gICAgdGhpcy5fb3V0ZXJDb250ZXh0ID0gbnVsbDtcbiAgICB0aGlzLl9kZmEgPSBudWxsO1xuICAgIC8vIEVhY2ggcHJlZGljdGlvbiBvcGVyYXRpb24gdXNlcyBhIGNhY2hlIGZvciBtZXJnZSBvZiBwcmVkaWN0aW9uIGNvbnRleHRzLlxuICAgIC8vICBEb24ndCBrZWVwIGFyb3VuZCBhcyBpdCB3YXN0ZXMgaHVnZSBhbW91bnRzIG9mIG1lbW9yeS4gRG91YmxlS2V5TWFwXG4gICAgLy8gIGlzbid0IHN5bmNocm9uaXplZCBidXQgd2UncmUgb2sgc2luY2UgdHdvIHRocmVhZHMgc2hvdWxkbid0IHJldXNlIHNhbWVcbiAgICAvLyAgcGFyc2VyL2F0bnNpbSBvYmplY3QgYmVjYXVzZSBpdCBjYW4gb25seSBoYW5kbGUgb25lIGlucHV0IGF0IGEgdGltZS5cbiAgICAvLyAgVGhpcyBtYXBzIGdyYXBocyBhIGFuZCBiIHRvIG1lcmdlZCByZXN1bHQgYy4gKGEsYikmcmFycjtjLiBXZSBjYW4gYXZvaWRcbiAgICAvLyAgdGhlIG1lcmdlIGlmIHdlIGV2ZXIgc2VlIGEgYW5kIGIgYWdhaW4uICBOb3RlIHRoYXQgKGIsYSkmcmFycjtjIHNob3VsZFxuICAgIC8vICBhbHNvIGJlIGV4YW1pbmVkIGR1cmluZyBjYWNoZSBsb29rdXAuXG4gICAgLy9cbiAgICB0aGlzLm1lcmdlQ2FjaGUgPSBudWxsO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBVE5TaW11bGF0b3IucHJvdG90eXBlKTtcblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJzZXJBVE5TaW11bGF0b3I7XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZGVidWcgPSBmYWxzZTtcblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZGVidWdfY2xvc3VyZSA9IGZhbHNlO1xuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5kZWJ1Z19hZGQgPSBmYWxzZTtcblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZGVidWdfbGlzdF9hdG5fZGVjaXNpb25zID0gZmFsc2U7XG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmRmYV9kZWJ1ZyA9IGZhbHNlO1xuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5yZXRyeV9kZWJ1ZyA9IGZhbHNlO1xuXG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbigpIHtcbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuYWRhcHRpdmVQcmVkaWN0ID0gZnVuY3Rpb24oaW5wdXQsIGRlY2lzaW9uLCBvdXRlckNvbnRleHQpIHtcbiAgICBpZiAodGhpcy5kZWJ1ZyB8fCB0aGlzLmRlYnVnX2xpc3RfYXRuX2RlY2lzaW9ucykge1xuICAgICAgICBjb25zb2xlLmxvZyhcImFkYXB0aXZlUHJlZGljdCBkZWNpc2lvbiBcIiArIGRlY2lzaW9uICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBleGVjIExBKDEpPT1cIiArIHRoaXMuZ2V0TG9va2FoZWFkTmFtZShpbnB1dCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIGxpbmUgXCIgKyBpbnB1dC5MVCgxKS5saW5lICsgXCI6XCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LkxUKDEpLmNvbHVtbik7XG4gICAgfVxuICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG4gICAgdGhpcy5fc3RhcnRJbmRleCA9IGlucHV0LmluZGV4O1xuICAgIHRoaXMuX291dGVyQ29udGV4dCA9IG91dGVyQ29udGV4dDtcblxuICAgIHZhciBkZmEgPSB0aGlzLmRlY2lzaW9uVG9ERkFbZGVjaXNpb25dO1xuICAgIHRoaXMuX2RmYSA9IGRmYTtcbiAgICB2YXIgbSA9IGlucHV0Lm1hcmsoKTtcbiAgICB2YXIgaW5kZXggPSBpbnB1dC5pbmRleDtcblxuICAgIC8vIE5vdyB3ZSBhcmUgY2VydGFpbiB0byBoYXZlIGEgc3BlY2lmaWMgZGVjaXNpb24ncyBERkFcbiAgICAvLyBCdXQsIGRvIHdlIHN0aWxsIG5lZWQgYW4gaW5pdGlhbCBzdGF0ZT9cbiAgICB0cnkge1xuICAgICAgICB2YXIgczA7XG4gICAgICAgIGlmIChkZmEucHJlY2VkZW5jZURmYSkge1xuICAgICAgICAgICAgLy8gdGhlIHN0YXJ0IHN0YXRlIGZvciBhIHByZWNlZGVuY2UgREZBIGRlcGVuZHMgb24gdGhlIGN1cnJlbnRcbiAgICAgICAgICAgIC8vIHBhcnNlciBwcmVjZWRlbmNlLCBhbmQgaXMgcHJvdmlkZWQgYnkgYSBERkEgbWV0aG9kLlxuICAgICAgICAgICAgczAgPSBkZmEuZ2V0UHJlY2VkZW5jZVN0YXJ0U3RhdGUodGhpcy5wYXJzZXIuZ2V0UHJlY2VkZW5jZSgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHRoZSBzdGFydCBzdGF0ZSBmb3IgYSBcInJlZ3VsYXJcIiBERkEgaXMganVzdCBzMFxuICAgICAgICAgICAgczAgPSBkZmEuczA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMwPT09bnVsbCkge1xuICAgICAgICAgICAgaWYgKG91dGVyQ29udGV4dD09PW51bGwpIHtcbiAgICAgICAgICAgICAgICBvdXRlckNvbnRleHQgPSBSdWxlQ29udGV4dC5FTVBUWTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnIHx8IHRoaXMuZGVidWdfbGlzdF9hdG5fZGVjaXNpb25zKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJwcmVkaWN0QVROIGRlY2lzaW9uIFwiICsgZGZhLmRlY2lzaW9uICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgZXhlYyBMQSgxKT09XCIgKyB0aGlzLmdldExvb2thaGVhZE5hbWUoaW5wdXQpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIsIG91dGVyQ29udGV4dD1cIiArIG91dGVyQ29udGV4dC50b1N0cmluZyh0aGlzLnBhcnNlci5ydWxlTmFtZXMpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGZ1bGxDdHggPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBzMF9jbG9zdXJlID0gdGhpcy5jb21wdXRlU3RhcnRTdGF0ZShkZmEuYXRuU3RhcnRTdGF0ZSwgUnVsZUNvbnRleHQuRU1QVFksIGZ1bGxDdHgpO1xuXG4gICAgICAgICAgICBpZiggZGZhLnByZWNlZGVuY2VEZmEpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgcHJlY2VkZW5jZSBERkEsIHdlIHVzZSBhcHBseVByZWNlZGVuY2VGaWx0ZXJcbiAgICAgICAgICAgICAgICAvLyB0byBjb252ZXJ0IHRoZSBjb21wdXRlZCBzdGFydCBzdGF0ZSB0byBhIHByZWNlZGVuY2Ugc3RhcnRcbiAgICAgICAgICAgICAgICAvLyBzdGF0ZS4gV2UgdGhlbiB1c2UgREZBLnNldFByZWNlZGVuY2VTdGFydFN0YXRlIHRvIHNldCB0aGVcbiAgICAgICAgICAgICAgICAvLyBhcHByb3ByaWF0ZSBzdGFydCBzdGF0ZSBmb3IgdGhlIHByZWNlZGVuY2UgbGV2ZWwgcmF0aGVyXG4gICAgICAgICAgICAgICAgLy8gdGhhbiBzaW1wbHkgc2V0dGluZyBERkEuczAuXG4gICAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgICBkZmEuczAuY29uZmlncyA9IHMwX2Nsb3N1cmU7IC8vIG5vdCB1c2VkIGZvciBwcmVkaWN0aW9uIGJ1dCB1c2VmdWwgdG8ga25vdyBzdGFydCBjb25maWdzIGFueXdheVxuICAgICAgICAgICAgICAgIHMwX2Nsb3N1cmUgPSB0aGlzLmFwcGx5UHJlY2VkZW5jZUZpbHRlcihzMF9jbG9zdXJlKTtcbiAgICAgICAgICAgICAgICBzMCA9IHRoaXMuYWRkREZBU3RhdGUoZGZhLCBuZXcgREZBU3RhdGUobnVsbCwgczBfY2xvc3VyZSkpO1xuICAgICAgICAgICAgICAgIGRmYS5zZXRQcmVjZWRlbmNlU3RhcnRTdGF0ZSh0aGlzLnBhcnNlci5nZXRQcmVjZWRlbmNlKCksIHMwKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgczAgPSB0aGlzLmFkZERGQVN0YXRlKGRmYSwgbmV3IERGQVN0YXRlKG51bGwsIHMwX2Nsb3N1cmUpKTtcbiAgICAgICAgICAgICAgICBkZmEuczAgPSBzMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgYWx0ID0gdGhpcy5leGVjQVROKGRmYSwgczAsIGlucHV0LCBpbmRleCwgb3V0ZXJDb250ZXh0KTtcbiAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiREZBIGFmdGVyIHByZWRpY3RBVE46IFwiICsgZGZhLnRvU3RyaW5nKHRoaXMucGFyc2VyLmxpdGVyYWxOYW1lcykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhbHQ7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5fZGZhID0gbnVsbDtcbiAgICAgICAgdGhpcy5tZXJnZUNhY2hlID0gbnVsbDsgLy8gd2FjayBjYWNoZSBhZnRlciBlYWNoIHByZWRpY3Rpb25cbiAgICAgICAgaW5wdXQuc2VlayhpbmRleCk7XG4gICAgICAgIGlucHV0LnJlbGVhc2UobSk7XG4gICAgfVxufTtcbi8vIFBlcmZvcm1zIEFUTiBzaW11bGF0aW9uIHRvIGNvbXB1dGUgYSBwcmVkaWN0ZWQgYWx0ZXJuYXRpdmUgYmFzZWRcbi8vICB1cG9uIHRoZSByZW1haW5pbmcgaW5wdXQsIGJ1dCBhbHNvIHVwZGF0ZXMgdGhlIERGQSBjYWNoZSB0byBhdm9pZFxuLy8gIGhhdmluZyB0byB0cmF2ZXJzZSB0aGUgQVROIGFnYWluIGZvciB0aGUgc2FtZSBpbnB1dCBzZXF1ZW5jZS5cblxuLy8gVGhlcmUgYXJlIHNvbWUga2V5IGNvbmRpdGlvbnMgd2UncmUgbG9va2luZyBmb3IgYWZ0ZXIgY29tcHV0aW5nIGEgbmV3XG4vLyBzZXQgb2YgQVROIGNvbmZpZ3MgKHByb3Bvc2VkIERGQSBzdGF0ZSk6XG4gICAgICAvLyBpZiB0aGUgc2V0IGlzIGVtcHR5LCB0aGVyZSBpcyBubyB2aWFibGUgYWx0ZXJuYXRpdmUgZm9yIGN1cnJlbnQgc3ltYm9sXG4gICAgICAvLyBkb2VzIHRoZSBzdGF0ZSB1bmlxdWVseSBwcmVkaWN0IGFuIGFsdGVybmF0aXZlP1xuICAgICAgLy8gZG9lcyB0aGUgc3RhdGUgaGF2ZSBhIGNvbmZsaWN0IHRoYXQgd291bGQgcHJldmVudCB1cyBmcm9tXG4gICAgICAvLyAgIHB1dHRpbmcgaXQgb24gdGhlIHdvcmsgbGlzdD9cblxuLy8gV2UgYWxzbyBoYXZlIHNvbWUga2V5IG9wZXJhdGlvbnMgdG8gZG86XG4gICAgICAvLyBhZGQgYW4gZWRnZSBmcm9tIHByZXZpb3VzIERGQSBzdGF0ZSB0byBwb3RlbnRpYWxseSBuZXcgREZBIHN0YXRlLCBELFxuICAgICAgLy8gICB1cG9uIGN1cnJlbnQgc3ltYm9sIGJ1dCBvbmx5IGlmIGFkZGluZyB0byB3b3JrIGxpc3QsIHdoaWNoIG1lYW5zIGluIGFsbFxuICAgICAgLy8gICBjYXNlcyBleGNlcHQgbm8gdmlhYmxlIGFsdGVybmF0aXZlIChhbmQgcG9zc2libHkgbm9uLWdyZWVkeSBkZWNpc2lvbnM/KVxuICAgICAgLy8gY29sbGVjdGluZyBwcmVkaWNhdGVzIGFuZCBhZGRpbmcgc2VtYW50aWMgY29udGV4dCB0byBERkEgYWNjZXB0IHN0YXRlc1xuICAgICAgLy8gYWRkaW5nIHJ1bGUgY29udGV4dCB0byBjb250ZXh0LXNlbnNpdGl2ZSBERkEgYWNjZXB0IHN0YXRlc1xuICAgICAgLy8gY29uc3VtaW5nIGFuIGlucHV0IHN5bWJvbFxuICAgICAgLy8gcmVwb3J0aW5nIGEgY29uZmxpY3RcbiAgICAgIC8vIHJlcG9ydGluZyBhbiBhbWJpZ3VpdHlcbiAgICAgIC8vIHJlcG9ydGluZyBhIGNvbnRleHQgc2Vuc2l0aXZpdHlcbiAgICAgIC8vIHJlcG9ydGluZyBpbnN1ZmZpY2llbnQgcHJlZGljYXRlc1xuXG4vLyBjb3ZlciB0aGVzZSBjYXNlczpcbi8vICAgIGRlYWQgZW5kXG4vLyAgICBzaW5nbGUgYWx0XG4vLyAgICBzaW5nbGUgYWx0ICsgcHJlZHNcbi8vICAgIGNvbmZsaWN0XG4vLyAgICBjb25mbGljdCArIHByZWRzXG4vL1xuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5leGVjQVROID0gZnVuY3Rpb24oZGZhLCBzMCwgaW5wdXQsIHN0YXJ0SW5kZXgsIG91dGVyQ29udGV4dCApIHtcbiAgICBpZiAodGhpcy5kZWJ1ZyB8fCB0aGlzLmRlYnVnX2xpc3RfYXRuX2RlY2lzaW9ucykge1xuICAgICAgICBjb25zb2xlLmxvZyhcImV4ZWNBVE4gZGVjaXNpb24gXCIgKyBkZmEuZGVjaXNpb24gK1xuICAgICAgICAgICAgICAgIFwiIGV4ZWMgTEEoMSk9PVwiICsgdGhpcy5nZXRMb29rYWhlYWROYW1lKGlucHV0KSArXG4gICAgICAgICAgICAgICAgXCIgbGluZSBcIiArIGlucHV0LkxUKDEpLmxpbmUgKyBcIjpcIiArIGlucHV0LkxUKDEpLmNvbHVtbik7XG4gICAgfVxuICAgIHZhciBhbHQ7XG4gICAgdmFyIHByZXZpb3VzRCA9IHMwO1xuXG4gICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJzMCA9IFwiICsgczApO1xuICAgIH1cbiAgICB2YXIgdCA9IGlucHV0LkxBKDEpO1xuICAgIHdoaWxlKHRydWUpIHsgLy8gd2hpbGUgbW9yZSB3b3JrXG4gICAgICAgIHZhciBEID0gdGhpcy5nZXRFeGlzdGluZ1RhcmdldFN0YXRlKHByZXZpb3VzRCwgdCk7XG4gICAgICAgIGlmKEQ9PT1udWxsKSB7XG4gICAgICAgICAgICBEID0gdGhpcy5jb21wdXRlVGFyZ2V0U3RhdGUoZGZhLCBwcmV2aW91c0QsIHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmKEQ9PT1BVE5TaW11bGF0b3IuRVJST1IpIHtcbiAgICAgICAgICAgIC8vIGlmIGFueSBjb25maWdzIGluIHByZXZpb3VzIGRpcHBlZCBpbnRvIG91dGVyIGNvbnRleHQsIHRoYXRcbiAgICAgICAgICAgIC8vIG1lYW5zIHRoYXQgaW5wdXQgdXAgdG8gdCBhY3R1YWxseSBmaW5pc2hlZCBlbnRyeSBydWxlXG4gICAgICAgICAgICAvLyBhdCBsZWFzdCBmb3IgU0xMIGRlY2lzaW9uLiBGdWxsIExMIGRvZXNuJ3QgZGlwIGludG8gb3V0ZXJcbiAgICAgICAgICAgIC8vIHNvIGRvbid0IG5lZWQgc3BlY2lhbCBjYXNlLlxuICAgICAgICAgICAgLy8gV2Ugd2lsbCBnZXQgYW4gZXJyb3Igbm8gbWF0dGVyIHdoYXQgc28gZGVsYXkgdW50aWwgYWZ0ZXJcbiAgICAgICAgICAgIC8vIGRlY2lzaW9uOyBiZXR0ZXIgZXJyb3IgbWVzc2FnZS4gQWxzbywgbm8gcmVhY2hhYmxlIHRhcmdldFxuICAgICAgICAgICAgLy8gQVROIHN0YXRlcyBpbiBTTEwgaW1wbGllcyBMTCB3aWxsIGFsc28gZ2V0IG5vd2hlcmUuXG4gICAgICAgICAgICAvLyBJZiBjb25mbGljdCBpbiBzdGF0ZXMgdGhhdCBkaXAgb3V0LCBjaG9vc2UgbWluIHNpbmNlIHdlXG4gICAgICAgICAgICAvLyB3aWxsIGdldCBlcnJvciBubyBtYXR0ZXIgd2hhdC5cbiAgICAgICAgICAgIHZhciBlID0gdGhpcy5ub1ZpYWJsZUFsdChpbnB1dCwgb3V0ZXJDb250ZXh0LCBwcmV2aW91c0QuY29uZmlncywgc3RhcnRJbmRleCk7XG4gICAgICAgICAgICBpbnB1dC5zZWVrKHN0YXJ0SW5kZXgpO1xuICAgICAgICAgICAgYWx0ID0gdGhpcy5nZXRTeW5WYWxpZE9yU2VtSW52YWxpZEFsdFRoYXRGaW5pc2hlZERlY2lzaW9uRW50cnlSdWxlKHByZXZpb3VzRC5jb25maWdzLCBvdXRlckNvbnRleHQpO1xuICAgICAgICAgICAgaWYoYWx0IT09QVROLklOVkFMSURfQUxUX05VTUJFUikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhbHQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYoRC5yZXF1aXJlc0Z1bGxDb250ZXh0ICYmIHRoaXMucHJlZGljdGlvbk1vZGUgIT09IFByZWRpY3Rpb25Nb2RlLlNMTCkge1xuICAgICAgICAgICAgLy8gSUYgUFJFRFMsIE1JR0hUIFJFU09MVkUgVE8gU0lOR0xFIEFMVCA9PiBTTEwgKG9yIHN5bnRheCBlcnJvcilcbiAgICAgICAgICAgIHZhciBjb25mbGljdGluZ0FsdHMgPSBudWxsO1xuICAgICAgICAgICAgaWYgKEQucHJlZGljYXRlcyE9PW51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkRGQSBzdGF0ZSBoYXMgcHJlZHMgaW4gREZBIHNpbSBMTCBmYWlsb3ZlclwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIGNvbmZsaWN0SW5kZXggPSBpbnB1dC5pbmRleDtcbiAgICAgICAgICAgICAgICBpZihjb25mbGljdEluZGV4ICE9PSBzdGFydEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIGlucHV0LnNlZWsoc3RhcnRJbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbmZsaWN0aW5nQWx0cyA9IHRoaXMuZXZhbFNlbWFudGljQ29udGV4dChELnByZWRpY2F0ZXMsIG91dGVyQ29udGV4dCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbmZsaWN0aW5nQWx0cy5sZW5ndGg9PT0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRnVsbCBMTCBhdm9pZGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25mbGljdGluZ0FsdHMubWluVmFsdWUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNvbmZsaWN0SW5kZXggIT09IHN0YXJ0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVzdG9yZSB0aGUgaW5kZXggc28gcmVwb3J0aW5nIHRoZSBmYWxsYmFjayB0byBmdWxsXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnRleHQgb2NjdXJzIHdpdGggdGhlIGluZGV4IGF0IHRoZSBjb3JyZWN0IHNwb3RcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQuc2Vlayhjb25mbGljdEluZGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5kZmFfZGVidWcpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImN0eCBzZW5zaXRpdmUgc3RhdGUgXCIgKyBvdXRlckNvbnRleHQgK1wiIGluIFwiICsgRCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZnVsbEN0eCA9IHRydWU7XG4gICAgICAgICAgICB2YXIgczBfY2xvc3VyZSA9IHRoaXMuY29tcHV0ZVN0YXJ0U3RhdGUoZGZhLmF0blN0YXJ0U3RhdGUsIG91dGVyQ29udGV4dCwgZnVsbEN0eCk7XG4gICAgICAgICAgICB0aGlzLnJlcG9ydEF0dGVtcHRpbmdGdWxsQ29udGV4dChkZmEsIGNvbmZsaWN0aW5nQWx0cywgRC5jb25maWdzLCBzdGFydEluZGV4LCBpbnB1dC5pbmRleCk7XG4gICAgICAgICAgICBhbHQgPSB0aGlzLmV4ZWNBVE5XaXRoRnVsbENvbnRleHQoZGZhLCBELCBzMF9jbG9zdXJlLCBpbnB1dCwgc3RhcnRJbmRleCwgb3V0ZXJDb250ZXh0KTtcbiAgICAgICAgICAgIHJldHVybiBhbHQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEQuaXNBY2NlcHRTdGF0ZSkge1xuICAgICAgICAgICAgaWYgKEQucHJlZGljYXRlcz09PW51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gRC5wcmVkaWN0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHN0b3BJbmRleCA9IGlucHV0LmluZGV4O1xuICAgICAgICAgICAgaW5wdXQuc2VlayhzdGFydEluZGV4KTtcbiAgICAgICAgICAgIHZhciBhbHRzID0gdGhpcy5ldmFsU2VtYW50aWNDb250ZXh0KEQucHJlZGljYXRlcywgb3V0ZXJDb250ZXh0LCB0cnVlKTtcbiAgICAgICAgICAgIGlmIChhbHRzLmxlbmd0aD09PTApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyB0aGlzLm5vVmlhYmxlQWx0KGlucHV0LCBvdXRlckNvbnRleHQsIEQuY29uZmlncywgc3RhcnRJbmRleCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGFsdHMubGVuZ3RoPT09MSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhbHRzLm1pblZhbHVlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIHJlcG9ydCBhbWJpZ3VpdHkgYWZ0ZXIgcHJlZGljYXRlIGV2YWx1YXRpb24gdG8gbWFrZSBzdXJlIHRoZSBjb3JyZWN0IHNldCBvZiBhbWJpZyBhbHRzIGlzIHJlcG9ydGVkLlxuICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0QW1iaWd1aXR5KGRmYSwgRCwgc3RhcnRJbmRleCwgc3RvcEluZGV4LCBmYWxzZSwgYWx0cywgRC5jb25maWdzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWx0cy5taW5WYWx1ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHByZXZpb3VzRCA9IEQ7XG5cbiAgICAgICAgaWYgKHQgIT09IFRva2VuLkVPRikge1xuICAgICAgICAgICAgaW5wdXQuY29uc3VtZSgpO1xuICAgICAgICAgICAgdCA9IGlucHV0LkxBKDEpO1xuICAgICAgICB9XG4gICAgfVxufTtcbi8vXG4vLyBHZXQgYW4gZXhpc3RpbmcgdGFyZ2V0IHN0YXRlIGZvciBhbiBlZGdlIGluIHRoZSBERkEuIElmIHRoZSB0YXJnZXQgc3RhdGVcbi8vIGZvciB0aGUgZWRnZSBoYXMgbm90IHlldCBiZWVuIGNvbXB1dGVkIG9yIGlzIG90aGVyd2lzZSBub3QgYXZhaWxhYmxlLFxuLy8gdGhpcyBtZXRob2QgcmV0dXJucyB7QGNvZGUgbnVsbH0uXG4vL1xuLy8gQHBhcmFtIHByZXZpb3VzRCBUaGUgY3VycmVudCBERkEgc3RhdGVcbi8vIEBwYXJhbSB0IFRoZSBuZXh0IGlucHV0IHN5bWJvbFxuLy8gQHJldHVybiBUaGUgZXhpc3RpbmcgdGFyZ2V0IERGQSBzdGF0ZSBmb3IgdGhlIGdpdmVuIGlucHV0IHN5bWJvbFxuLy8ge0Bjb2RlIHR9LCBvciB7QGNvZGUgbnVsbH0gaWYgdGhlIHRhcmdldCBzdGF0ZSBmb3IgdGhpcyBlZGdlIGlzIG5vdFxuLy8gYWxyZWFkeSBjYWNoZWRcbi8vXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmdldEV4aXN0aW5nVGFyZ2V0U3RhdGUgPSBmdW5jdGlvbihwcmV2aW91c0QsIHQpIHtcbiAgICB2YXIgZWRnZXMgPSBwcmV2aW91c0QuZWRnZXM7XG4gICAgaWYgKGVkZ2VzPT09bnVsbCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZWRnZXNbdCArIDFdIHx8IG51bGw7XG4gICAgfVxufTtcbi8vXG4vLyBDb21wdXRlIGEgdGFyZ2V0IHN0YXRlIGZvciBhbiBlZGdlIGluIHRoZSBERkEsIGFuZCBhdHRlbXB0IHRvIGFkZCB0aGVcbi8vIGNvbXB1dGVkIHN0YXRlIGFuZCBjb3JyZXNwb25kaW5nIGVkZ2UgdG8gdGhlIERGQS5cbi8vXG4vLyBAcGFyYW0gZGZhIFRoZSBERkFcbi8vIEBwYXJhbSBwcmV2aW91c0QgVGhlIGN1cnJlbnQgREZBIHN0YXRlXG4vLyBAcGFyYW0gdCBUaGUgbmV4dCBpbnB1dCBzeW1ib2xcbi8vXG4vLyBAcmV0dXJuIFRoZSBjb21wdXRlZCB0YXJnZXQgREZBIHN0YXRlIGZvciB0aGUgZ2l2ZW4gaW5wdXQgc3ltYm9sXG4vLyB7QGNvZGUgdH0uIElmIHtAY29kZSB0fSBkb2VzIG5vdCBsZWFkIHRvIGEgdmFsaWQgREZBIHN0YXRlLCB0aGlzIG1ldGhvZFxuLy8gcmV0dXJucyB7QGxpbmsgLy9FUlJPUn0uXG4vL1xuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5jb21wdXRlVGFyZ2V0U3RhdGUgPSBmdW5jdGlvbihkZmEsIHByZXZpb3VzRCwgdCkge1xuICAgdmFyIHJlYWNoID0gdGhpcy5jb21wdXRlUmVhY2hTZXQocHJldmlvdXNELmNvbmZpZ3MsIHQsIGZhbHNlKTtcbiAgICBpZihyZWFjaD09PW51bGwpIHtcbiAgICAgICAgdGhpcy5hZGRERkFFZGdlKGRmYSwgcHJldmlvdXNELCB0LCBBVE5TaW11bGF0b3IuRVJST1IpO1xuICAgICAgICByZXR1cm4gQVROU2ltdWxhdG9yLkVSUk9SO1xuICAgIH1cbiAgICAvLyBjcmVhdGUgbmV3IHRhcmdldCBzdGF0ZTsgd2UnbGwgYWRkIHRvIERGQSBhZnRlciBpdCdzIGNvbXBsZXRlXG4gICAgdmFyIEQgPSBuZXcgREZBU3RhdGUobnVsbCwgcmVhY2gpO1xuXG4gICAgdmFyIHByZWRpY3RlZEFsdCA9IHRoaXMuZ2V0VW5pcXVlQWx0KHJlYWNoKTtcblxuICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgIHZhciBhbHRTdWJTZXRzID0gUHJlZGljdGlvbk1vZGUuZ2V0Q29uZmxpY3RpbmdBbHRTdWJzZXRzKHJlYWNoKTtcbiAgICAgICAgY29uc29sZS5sb2coXCJTTEwgYWx0U3ViU2V0cz1cIiArIFV0aWxzLmFycmF5VG9TdHJpbmcoYWx0U3ViU2V0cykgK1xuICAgICAgICAgICAgICAgICAgICBcIiwgcHJldmlvdXM9XCIgKyBwcmV2aW91c0QuY29uZmlncyArXG4gICAgICAgICAgICAgICAgICAgIFwiLCBjb25maWdzPVwiICsgcmVhY2ggK1xuICAgICAgICAgICAgICAgICAgICBcIiwgcHJlZGljdD1cIiArIHByZWRpY3RlZEFsdCArXG4gICAgICAgICAgICAgICAgICAgIFwiLCBhbGxTdWJzZXRzQ29uZmxpY3Q9XCIgK1xuICAgICAgICAgICAgICAgICAgICBQcmVkaWN0aW9uTW9kZS5hbGxTdWJzZXRzQ29uZmxpY3QoYWx0U3ViU2V0cykgKyBcIiwgY29uZmxpY3RpbmdBbHRzPVwiICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRDb25mbGljdGluZ0FsdHMocmVhY2gpKTtcbiAgICB9XG4gICAgaWYgKHByZWRpY3RlZEFsdCE9PUFUTi5JTlZBTElEX0FMVF9OVU1CRVIpIHtcbiAgICAgICAgLy8gTk8gQ09ORkxJQ1QsIFVOSVFVRUxZIFBSRURJQ1RFRCBBTFRcbiAgICAgICAgRC5pc0FjY2VwdFN0YXRlID0gdHJ1ZTtcbiAgICAgICAgRC5jb25maWdzLnVuaXF1ZUFsdCA9IHByZWRpY3RlZEFsdDtcbiAgICAgICAgRC5wcmVkaWN0aW9uID0gcHJlZGljdGVkQWx0O1xuICAgIH0gZWxzZSBpZiAoUHJlZGljdGlvbk1vZGUuaGFzU0xMQ29uZmxpY3RUZXJtaW5hdGluZ1ByZWRpY3Rpb24odGhpcy5wcmVkaWN0aW9uTW9kZSwgcmVhY2gpKSB7XG4gICAgICAgIC8vIE1PUkUgVEhBTiBPTkUgVklBQkxFIEFMVEVSTkFUSVZFXG4gICAgICAgIEQuY29uZmlncy5jb25mbGljdGluZ0FsdHMgPSB0aGlzLmdldENvbmZsaWN0aW5nQWx0cyhyZWFjaCk7XG4gICAgICAgIEQucmVxdWlyZXNGdWxsQ29udGV4dCA9IHRydWU7XG4gICAgICAgIC8vIGluIFNMTC1vbmx5IG1vZGUsIHdlIHdpbGwgc3RvcCBhdCB0aGlzIHN0YXRlIGFuZCByZXR1cm4gdGhlIG1pbmltdW0gYWx0XG4gICAgICAgIEQuaXNBY2NlcHRTdGF0ZSA9IHRydWU7XG4gICAgICAgIEQucHJlZGljdGlvbiA9IEQuY29uZmlncy5jb25mbGljdGluZ0FsdHMubWluVmFsdWUoKTtcbiAgICB9XG4gICAgaWYgKEQuaXNBY2NlcHRTdGF0ZSAmJiBELmNvbmZpZ3MuaGFzU2VtYW50aWNDb250ZXh0KSB7XG4gICAgICAgIHRoaXMucHJlZGljYXRlREZBU3RhdGUoRCwgdGhpcy5hdG4uZ2V0RGVjaXNpb25TdGF0ZShkZmEuZGVjaXNpb24pKTtcbiAgICAgICAgaWYoIEQucHJlZGljYXRlcyE9PW51bGwpIHtcbiAgICAgICAgICAgIEQucHJlZGljdGlvbiA9IEFUTi5JTlZBTElEX0FMVF9OVU1CRVI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gYWxsIGFkZHMgdG8gZGZhIGFyZSBkb25lIGFmdGVyIHdlJ3ZlIGNyZWF0ZWQgZnVsbCBEIHN0YXRlXG4gICAgRCA9IHRoaXMuYWRkREZBRWRnZShkZmEsIHByZXZpb3VzRCwgdCwgRCk7XG4gICAgcmV0dXJuIEQ7XG59O1xuXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLnByZWRpY2F0ZURGQVN0YXRlID0gZnVuY3Rpb24oZGZhU3RhdGUsIGRlY2lzaW9uU3RhdGUpIHtcbiAgICAvLyBXZSBuZWVkIHRvIHRlc3QgYWxsIHByZWRpY2F0ZXMsIGV2ZW4gaW4gREZBIHN0YXRlcyB0aGF0XG4gICAgLy8gdW5pcXVlbHkgcHJlZGljdCBhbHRlcm5hdGl2ZS5cbiAgICB2YXIgbmFsdHMgPSBkZWNpc2lvblN0YXRlLnRyYW5zaXRpb25zLmxlbmd0aDtcbiAgICAvLyBVcGRhdGUgREZBIHNvIHJlYWNoIGJlY29tZXMgYWNjZXB0IHN0YXRlIHdpdGggKHByZWRpY2F0ZSxhbHQpXG4gICAgLy8gcGFpcnMgaWYgcHJlZHMgZm91bmQgZm9yIGNvbmZsaWN0aW5nIGFsdHNcbiAgICB2YXIgYWx0c1RvQ29sbGVjdFByZWRzRnJvbSA9IHRoaXMuZ2V0Q29uZmxpY3RpbmdBbHRzT3JVbmlxdWVBbHQoZGZhU3RhdGUuY29uZmlncyk7XG4gICAgdmFyIGFsdFRvUHJlZCA9IHRoaXMuZ2V0UHJlZHNGb3JBbWJpZ0FsdHMoYWx0c1RvQ29sbGVjdFByZWRzRnJvbSwgZGZhU3RhdGUuY29uZmlncywgbmFsdHMpO1xuICAgIGlmIChhbHRUb1ByZWQhPT1udWxsKSB7XG4gICAgICAgIGRmYVN0YXRlLnByZWRpY2F0ZXMgPSB0aGlzLmdldFByZWRpY2F0ZVByZWRpY3Rpb25zKGFsdHNUb0NvbGxlY3RQcmVkc0Zyb20sIGFsdFRvUHJlZCk7XG4gICAgICAgIGRmYVN0YXRlLnByZWRpY3Rpb24gPSBBVE4uSU5WQUxJRF9BTFRfTlVNQkVSOyAvLyBtYWtlIHN1cmUgd2UgdXNlIHByZWRzXG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhlcmUgYXJlIHByZWRzIGluIGNvbmZpZ3MgYnV0IHRoZXkgbWlnaHQgZ28gYXdheVxuICAgICAgICAvLyB3aGVuIE9SJ2QgdG9nZXRoZXIgbGlrZSB7cH0/IHx8IE5PTkUgPT0gTk9ORS4gSWYgbmVpdGhlclxuICAgICAgICAvLyBhbHQgaGFzIHByZWRzLCByZXNvbHZlIHRvIG1pbiBhbHRcbiAgICAgICAgZGZhU3RhdGUucHJlZGljdGlvbiA9IGFsdHNUb0NvbGxlY3RQcmVkc0Zyb20ubWluVmFsdWUoKTtcbiAgICB9XG59O1xuXG4vLyBjb21lcyBiYWNrIHdpdGggcmVhY2gudW5pcXVlQWx0IHNldCB0byBhIHZhbGlkIGFsdFxuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5leGVjQVROV2l0aEZ1bGxDb250ZXh0ID0gZnVuY3Rpb24oZGZhLCBELCAvLyBob3cgZmFyIHdlIGdvdCBiZWZvcmUgZmFpbGluZyBvdmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRlckNvbnRleHQpIHtcbiAgICBpZiAodGhpcy5kZWJ1ZyB8fCB0aGlzLmRlYnVnX2xpc3RfYXRuX2RlY2lzaW9ucykge1xuICAgICAgICBjb25zb2xlLmxvZyhcImV4ZWNBVE5XaXRoRnVsbENvbnRleHQgXCIrczApO1xuICAgIH1cbiAgICB2YXIgZnVsbEN0eCA9IHRydWU7XG4gICAgdmFyIGZvdW5kRXhhY3RBbWJpZyA9IGZhbHNlO1xuICAgIHZhciByZWFjaCA9IG51bGw7XG4gICAgdmFyIHByZXZpb3VzID0gczA7XG4gICAgaW5wdXQuc2VlayhzdGFydEluZGV4KTtcbiAgICB2YXIgdCA9IGlucHV0LkxBKDEpO1xuICAgIHZhciBwcmVkaWN0ZWRBbHQgPSAtMTtcbiAgICB3aGlsZSAodHJ1ZSkgeyAvLyB3aGlsZSBtb3JlIHdvcmtcbiAgICAgICAgcmVhY2ggPSB0aGlzLmNvbXB1dGVSZWFjaFNldChwcmV2aW91cywgdCwgZnVsbEN0eCk7XG4gICAgICAgIGlmIChyZWFjaD09PW51bGwpIHtcbiAgICAgICAgICAgIC8vIGlmIGFueSBjb25maWdzIGluIHByZXZpb3VzIGRpcHBlZCBpbnRvIG91dGVyIGNvbnRleHQsIHRoYXRcbiAgICAgICAgICAgIC8vIG1lYW5zIHRoYXQgaW5wdXQgdXAgdG8gdCBhY3R1YWxseSBmaW5pc2hlZCBlbnRyeSBydWxlXG4gICAgICAgICAgICAvLyBhdCBsZWFzdCBmb3IgTEwgZGVjaXNpb24uIEZ1bGwgTEwgZG9lc24ndCBkaXAgaW50byBvdXRlclxuICAgICAgICAgICAgLy8gc28gZG9uJ3QgbmVlZCBzcGVjaWFsIGNhc2UuXG4gICAgICAgICAgICAvLyBXZSB3aWxsIGdldCBhbiBlcnJvciBubyBtYXR0ZXIgd2hhdCBzbyBkZWxheSB1bnRpbCBhZnRlclxuICAgICAgICAgICAgLy8gZGVjaXNpb247IGJldHRlciBlcnJvciBtZXNzYWdlLiBBbHNvLCBubyByZWFjaGFibGUgdGFyZ2V0XG4gICAgICAgICAgICAvLyBBVE4gc3RhdGVzIGluIFNMTCBpbXBsaWVzIExMIHdpbGwgYWxzbyBnZXQgbm93aGVyZS5cbiAgICAgICAgICAgIC8vIElmIGNvbmZsaWN0IGluIHN0YXRlcyB0aGF0IGRpcCBvdXQsIGNob29zZSBtaW4gc2luY2Ugd2VcbiAgICAgICAgICAgIC8vIHdpbGwgZ2V0IGVycm9yIG5vIG1hdHRlciB3aGF0LlxuICAgICAgICAgICAgdmFyIGUgPSB0aGlzLm5vVmlhYmxlQWx0KGlucHV0LCBvdXRlckNvbnRleHQsIHByZXZpb3VzLCBzdGFydEluZGV4KTtcbiAgICAgICAgICAgIGlucHV0LnNlZWsoc3RhcnRJbmRleCk7XG4gICAgICAgICAgICB2YXIgYWx0ID0gdGhpcy5nZXRTeW5WYWxpZE9yU2VtSW52YWxpZEFsdFRoYXRGaW5pc2hlZERlY2lzaW9uRW50cnlSdWxlKHByZXZpb3VzLCBvdXRlckNvbnRleHQpO1xuICAgICAgICAgICAgaWYoYWx0IT09QVROLklOVkFMSURfQUxUX05VTUJFUikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhbHQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGFsdFN1YlNldHMgPSBQcmVkaWN0aW9uTW9kZS5nZXRDb25mbGljdGluZ0FsdFN1YnNldHMocmVhY2gpO1xuICAgICAgICBpZih0aGlzLmRlYnVnKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkxMIGFsdFN1YlNldHM9XCIgKyBhbHRTdWJTZXRzICsgXCIsIHByZWRpY3Q9XCIgK1xuICAgICAgICAgICAgICAgICAgUHJlZGljdGlvbk1vZGUuZ2V0VW5pcXVlQWx0KGFsdFN1YlNldHMpICsgXCIsIHJlc29sdmVzVG9KdXN0T25lVmlhYmxlQWx0PVwiICtcbiAgICAgICAgICAgICAgICAgIFByZWRpY3Rpb25Nb2RlLnJlc29sdmVzVG9KdXN0T25lVmlhYmxlQWx0KGFsdFN1YlNldHMpKTtcbiAgICAgICAgfVxuICAgICAgICByZWFjaC51bmlxdWVBbHQgPSB0aGlzLmdldFVuaXF1ZUFsdChyZWFjaCk7XG4gICAgICAgIC8vIHVuaXF1ZSBwcmVkaWN0aW9uP1xuICAgICAgICBpZihyZWFjaC51bmlxdWVBbHQhPT1BVE4uSU5WQUxJRF9BTFRfTlVNQkVSKSB7XG4gICAgICAgICAgICBwcmVkaWN0ZWRBbHQgPSByZWFjaC51bmlxdWVBbHQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByZWRpY3Rpb25Nb2RlICE9PSBQcmVkaWN0aW9uTW9kZS5MTF9FWEFDVF9BTUJJR19ERVRFQ1RJT04pIHtcbiAgICAgICAgICAgIHByZWRpY3RlZEFsdCA9IFByZWRpY3Rpb25Nb2RlLnJlc29sdmVzVG9KdXN0T25lVmlhYmxlQWx0KGFsdFN1YlNldHMpO1xuICAgICAgICAgICAgaWYocHJlZGljdGVkQWx0ICE9PSBBVE4uSU5WQUxJRF9BTFRfTlVNQkVSKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJbiBleGFjdCBhbWJpZ3VpdHkgbW9kZSwgd2UgbmV2ZXIgdHJ5IHRvIHRlcm1pbmF0ZSBlYXJseS5cbiAgICAgICAgICAgIC8vIEp1c3Qga2VlcHMgc2NhcmZpbmcgdW50aWwgd2Uga25vdyB3aGF0IHRoZSBjb25mbGljdCBpc1xuICAgICAgICAgICAgaWYgKFByZWRpY3Rpb25Nb2RlLmFsbFN1YnNldHNDb25mbGljdChhbHRTdWJTZXRzKSAmJiBQcmVkaWN0aW9uTW9kZS5hbGxTdWJzZXRzRXF1YWwoYWx0U3ViU2V0cykpIHtcbiAgICAgICAgICAgICAgICBmb3VuZEV4YWN0QW1iaWcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHByZWRpY3RlZEFsdCA9IFByZWRpY3Rpb25Nb2RlLmdldFNpbmdsZVZpYWJsZUFsdChhbHRTdWJTZXRzKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGVsc2UgdGhlcmUgYXJlIG11bHRpcGxlIG5vbi1jb25mbGljdGluZyBzdWJzZXRzIG9yXG4gICAgICAgICAgICAvLyB3ZSdyZSBub3Qgc3VyZSB3aGF0IHRoZSBhbWJpZ3VpdHkgaXMgeWV0LlxuICAgICAgICAgICAgLy8gU28sIGtlZXAgZ29pbmcuXG4gICAgICAgIH1cbiAgICAgICAgcHJldmlvdXMgPSByZWFjaDtcbiAgICAgICAgaWYoIHQgIT09IFRva2VuLkVPRikge1xuICAgICAgICAgICAgaW5wdXQuY29uc3VtZSgpO1xuICAgICAgICAgICAgdCA9IGlucHV0LkxBKDEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIElmIHRoZSBjb25maWd1cmF0aW9uIHNldCB1bmlxdWVseSBwcmVkaWN0cyBhbiBhbHRlcm5hdGl2ZSxcbiAgICAvLyB3aXRob3V0IGNvbmZsaWN0LCB0aGVuIHdlIGtub3cgdGhhdCBpdCdzIGEgZnVsbCBMTCBkZWNpc2lvblxuICAgIC8vIG5vdCBTTEwuXG4gICAgaWYgKHJlYWNoLnVuaXF1ZUFsdCAhPT0gQVROLklOVkFMSURfQUxUX05VTUJFUiApIHtcbiAgICAgICAgdGhpcy5yZXBvcnRDb250ZXh0U2Vuc2l0aXZpdHkoZGZhLCBwcmVkaWN0ZWRBbHQsIHJlYWNoLCBzdGFydEluZGV4LCBpbnB1dC5pbmRleCk7XG4gICAgICAgIHJldHVybiBwcmVkaWN0ZWRBbHQ7XG4gICAgfVxuICAgIC8vIFdlIGRvIG5vdCBjaGVjayBwcmVkaWNhdGVzIGhlcmUgYmVjYXVzZSB3ZSBoYXZlIGNoZWNrZWQgdGhlbVxuICAgIC8vIG9uLXRoZS1mbHkgd2hlbiBkb2luZyBmdWxsIGNvbnRleHQgcHJlZGljdGlvbi5cblxuICAgIC8vXG4gICAgLy8gSW4gbm9uLWV4YWN0IGFtYmlndWl0eSBkZXRlY3Rpb24gbW9kZSwgd2UgbWlnaHRcdGFjdHVhbGx5IGJlIGFibGUgdG9cbiAgICAvLyBkZXRlY3QgYW4gZXhhY3QgYW1iaWd1aXR5LCBidXQgSSdtIG5vdCBnb2luZyB0byBzcGVuZCB0aGUgY3ljbGVzXG4gICAgLy8gbmVlZGVkIHRvIGNoZWNrLiBXZSBvbmx5IGVtaXQgYW1iaWd1aXR5IHdhcm5pbmdzIGluIGV4YWN0IGFtYmlndWl0eVxuICAgIC8vIG1vZGUuXG4gICAgLy9cbiAgICAvLyBGb3IgZXhhbXBsZSwgd2UgbWlnaHQga25vdyB0aGF0IHdlIGhhdmUgY29uZmxpY3RpbmcgY29uZmlndXJhdGlvbnMuXG4gICAgLy8gQnV0LCB0aGF0IGRvZXMgbm90IG1lYW4gdGhhdCB0aGVyZSBpcyBubyB3YXkgZm9yd2FyZCB3aXRob3V0IGFcbiAgICAvLyBjb25mbGljdC4gSXQncyBwb3NzaWJsZSB0byBoYXZlIG5vbmNvbmZsaWN0aW5nIGFsdCBzdWJzZXRzIGFzIGluOlxuXG4gICAgLy8gYWx0U3ViU2V0cz1bezEsIDJ9LCB7MSwgMn0sIHsxfSwgezEsIDJ9XVxuXG4gICAgLy8gZnJvbVxuICAgIC8vXG4gICAgLy8gICAgWygxNywxLFs1ICRdKSwgKDEzLDEsWzUgMTAgJF0pLCAoMjEsMSxbNSAxMCAkXSksICgxMSwxLFskXSksXG4gICAgLy8gICAgICgxMywyLFs1IDEwICRdKSwgKDIxLDIsWzUgMTAgJF0pLCAoMTEsMixbJF0pXVxuICAgIC8vXG4gICAgLy8gSW4gdGhpcyBjYXNlLCAoMTcsMSxbNSAkXSkgaW5kaWNhdGVzIHRoZXJlIGlzIHNvbWUgbmV4dCBzZXF1ZW5jZSB0aGF0XG4gICAgLy8gd291bGQgcmVzb2x2ZSB0aGlzIHdpdGhvdXQgY29uZmxpY3QgdG8gYWx0ZXJuYXRpdmUgMS4gQW55IG90aGVyIHZpYWJsZVxuICAgIC8vIG5leHQgc2VxdWVuY2UsIGhvd2V2ZXIsIGlzIGFzc29jaWF0ZWQgd2l0aCBhIGNvbmZsaWN0LiAgV2Ugc3RvcFxuICAgIC8vIGxvb2tpbmcgZm9yIGlucHV0IGJlY2F1c2Ugbm8gYW1vdW50IG9mIGZ1cnRoZXIgbG9va2FoZWFkIHdpbGwgYWx0ZXJcbiAgICAvLyB0aGUgZmFjdCB0aGF0IHdlIHNob3VsZCBwcmVkaWN0IGFsdGVybmF0aXZlIDEuICBXZSBqdXN0IGNhbid0IHNheSBmb3JcbiAgICAvLyBzdXJlIHRoYXQgdGhlcmUgaXMgYW4gYW1iaWd1aXR5IHdpdGhvdXQgbG9va2luZyBmdXJ0aGVyLlxuXG4gICAgdGhpcy5yZXBvcnRBbWJpZ3VpdHkoZGZhLCBELCBzdGFydEluZGV4LCBpbnB1dC5pbmRleCwgZm91bmRFeGFjdEFtYmlnLCBudWxsLCByZWFjaCk7XG5cbiAgICByZXR1cm4gcHJlZGljdGVkQWx0O1xufTtcblxuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5jb21wdXRlUmVhY2hTZXQgPSBmdW5jdGlvbihjbG9zdXJlLCB0LCBmdWxsQ3R4KSB7XG4gICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJpbiBjb21wdXRlUmVhY2hTZXQsIHN0YXJ0aW5nIGNsb3N1cmU6IFwiICsgY2xvc3VyZSk7XG4gICAgfVxuICAgIGlmKCB0aGlzLm1lcmdlQ2FjaGU9PT1udWxsKSB7XG4gICAgICAgIHRoaXMubWVyZ2VDYWNoZSA9IG5ldyBEb3VibGVEaWN0KCk7XG4gICAgfVxuICAgIHZhciBpbnRlcm1lZGlhdGUgPSBuZXcgQVROQ29uZmlnU2V0KGZ1bGxDdHgpO1xuXG4gICAgLy8gQ29uZmlndXJhdGlvbnMgYWxyZWFkeSBpbiBhIHJ1bGUgc3RvcCBzdGF0ZSBpbmRpY2F0ZSByZWFjaGluZyB0aGUgZW5kXG4gICAgLy8gb2YgdGhlIGRlY2lzaW9uIHJ1bGUgKGxvY2FsIGNvbnRleHQpIG9yIGVuZCBvZiB0aGUgc3RhcnQgcnVsZSAoZnVsbFxuICAgIC8vIGNvbnRleHQpLiBPbmNlIHJlYWNoZWQsIHRoZXNlIGNvbmZpZ3VyYXRpb25zIGFyZSBuZXZlciB1cGRhdGVkIGJ5IGFcbiAgICAvLyBjbG9zdXJlIG9wZXJhdGlvbiwgc28gdGhleSBhcmUgaGFuZGxlZCBzZXBhcmF0ZWx5IGZvciB0aGUgcGVyZm9ybWFuY2VcbiAgICAvLyBhZHZhbnRhZ2Ugb2YgaGF2aW5nIGEgc21hbGxlciBpbnRlcm1lZGlhdGUgc2V0IHdoZW4gY2FsbGluZyBjbG9zdXJlLlxuICAgIC8vXG4gICAgLy8gRm9yIGZ1bGwtY29udGV4dCByZWFjaCBvcGVyYXRpb25zLCBzZXBhcmF0ZSBoYW5kbGluZyBpcyByZXF1aXJlZCB0b1xuICAgIC8vIGVuc3VyZSB0aGF0IHRoZSBhbHRlcm5hdGl2ZSBtYXRjaGluZyB0aGUgbG9uZ2VzdCBvdmVyYWxsIHNlcXVlbmNlIGlzXG4gICAgLy8gY2hvc2VuIHdoZW4gbXVsdGlwbGUgc3VjaCBjb25maWd1cmF0aW9ucyBjYW4gbWF0Y2ggdGhlIGlucHV0LlxuXG4gICAgdmFyIHNraXBwZWRTdG9wU3RhdGVzID0gbnVsbDtcblxuICAgIC8vIEZpcnN0IGZpZ3VyZSBvdXQgd2hlcmUgd2UgY2FuIHJlYWNoIG9uIGlucHV0IHRcbiAgICBmb3IgKHZhciBpPTA7IGk8Y2xvc3VyZS5pdGVtcy5sZW5ndGg7aSsrKSB7XG4gICAgICAgIHZhciBjID0gY2xvc3VyZS5pdGVtc1tpXTtcbiAgICAgICAgaWYodGhpcy5kZWJ1Z19hZGQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwidGVzdGluZyBcIiArIHRoaXMuZ2V0VG9rZW5OYW1lKHQpICsgXCIgYXQgXCIgKyBjKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYy5zdGF0ZSBpbnN0YW5jZW9mIFJ1bGVTdG9wU3RhdGUpIHtcbiAgICAgICAgICAgIGlmIChmdWxsQ3R4IHx8IHQgPT09IFRva2VuLkVPRikge1xuICAgICAgICAgICAgICAgIGlmIChza2lwcGVkU3RvcFN0YXRlcz09PW51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgc2tpcHBlZFN0b3BTdGF0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2tpcHBlZFN0b3BTdGF0ZXMucHVzaChjKTtcbiAgICAgICAgICAgICAgICBpZih0aGlzLmRlYnVnX2FkZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImFkZGVkIFwiICsgYyArIFwiIHRvIHNraXBwZWRTdG9wU3RhdGVzXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGZvcih2YXIgaj0wO2o8Yy5zdGF0ZS50cmFuc2l0aW9ucy5sZW5ndGg7aisrKSB7XG4gICAgICAgICAgICB2YXIgdHJhbnMgPSBjLnN0YXRlLnRyYW5zaXRpb25zW2pdO1xuICAgICAgICAgICAgdmFyIHRhcmdldCA9IHRoaXMuZ2V0UmVhY2hhYmxlVGFyZ2V0KHRyYW5zLCB0KTtcbiAgICAgICAgICAgIGlmICh0YXJnZXQhPT1udWxsKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNmZyA9IG5ldyBBVE5Db25maWcoe3N0YXRlOnRhcmdldH0sIGMpO1xuICAgICAgICAgICAgICAgIGludGVybWVkaWF0ZS5hZGQoY2ZnLCB0aGlzLm1lcmdlQ2FjaGUpO1xuICAgICAgICAgICAgICAgIGlmKHRoaXMuZGVidWdfYWRkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiYWRkZWQgXCIgKyBjZmcgKyBcIiB0byBpbnRlcm1lZGlhdGVcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIE5vdyBmaWd1cmUgb3V0IHdoZXJlIHRoZSByZWFjaCBvcGVyYXRpb24gY2FuIHRha2UgdXMuLi5cbiAgICB2YXIgcmVhY2ggPSBudWxsO1xuXG4gICAgLy8gVGhpcyBibG9jayBvcHRpbWl6ZXMgdGhlIHJlYWNoIG9wZXJhdGlvbiBmb3IgaW50ZXJtZWRpYXRlIHNldHMgd2hpY2hcbiAgICAvLyB0cml2aWFsbHkgaW5kaWNhdGUgYSB0ZXJtaW5hdGlvbiBzdGF0ZSBmb3IgdGhlIG92ZXJhbGxcbiAgICAvLyBhZGFwdGl2ZVByZWRpY3Qgb3BlcmF0aW9uLlxuICAgIC8vXG4gICAgLy8gVGhlIGNvbmRpdGlvbnMgYXNzdW1lIHRoYXQgaW50ZXJtZWRpYXRlXG4gICAgLy8gY29udGFpbnMgYWxsIGNvbmZpZ3VyYXRpb25zIHJlbGV2YW50IHRvIHRoZSByZWFjaCBzZXQsIGJ1dCB0aGlzXG4gICAgLy8gY29uZGl0aW9uIGlzIG5vdCB0cnVlIHdoZW4gb25lIG9yIG1vcmUgY29uZmlndXJhdGlvbnMgaGF2ZSBiZWVuXG4gICAgLy8gd2l0aGhlbGQgaW4gc2tpcHBlZFN0b3BTdGF0ZXMsIG9yIHdoZW4gdGhlIGN1cnJlbnQgc3ltYm9sIGlzIEVPRi5cbiAgICAvL1xuICAgIGlmIChza2lwcGVkU3RvcFN0YXRlcz09PW51bGwgJiYgdCE9PVRva2VuLkVPRikge1xuICAgICAgICBpZiAoaW50ZXJtZWRpYXRlLml0ZW1zLmxlbmd0aD09PTEpIHtcbiAgICAgICAgICAgIC8vIERvbid0IHB1cnN1ZSB0aGUgY2xvc3VyZSBpZiB0aGVyZSBpcyBqdXN0IG9uZSBzdGF0ZS5cbiAgICAgICAgICAgIC8vIEl0IGNhbiBvbmx5IGhhdmUgb25lIGFsdGVybmF0aXZlOyBqdXN0IGFkZCB0byByZXN1bHRcbiAgICAgICAgICAgIC8vIEFsc28gZG9uJ3QgcHVyc3VlIHRoZSBjbG9zdXJlIGlmIHRoZXJlIGlzIHVuaXF1ZSBhbHRlcm5hdGl2ZVxuICAgICAgICAgICAgLy8gYW1vbmcgdGhlIGNvbmZpZ3VyYXRpb25zLlxuICAgICAgICAgICAgcmVhY2ggPSBpbnRlcm1lZGlhdGU7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5nZXRVbmlxdWVBbHQoaW50ZXJtZWRpYXRlKSE9PUFUTi5JTlZBTElEX0FMVF9OVU1CRVIpIHtcbiAgICAgICAgICAgIC8vIEFsc28gZG9uJ3QgcHVyc3VlIHRoZSBjbG9zdXJlIGlmIHRoZXJlIGlzIHVuaXF1ZSBhbHRlcm5hdGl2ZVxuICAgICAgICAgICAgLy8gYW1vbmcgdGhlIGNvbmZpZ3VyYXRpb25zLlxuICAgICAgICAgICAgcmVhY2ggPSBpbnRlcm1lZGlhdGU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gSWYgdGhlIHJlYWNoIHNldCBjb3VsZCBub3QgYmUgdHJpdmlhbGx5IGRldGVybWluZWQsIHBlcmZvcm0gYSBjbG9zdXJlXG4gICAgLy8gb3BlcmF0aW9uIG9uIHRoZSBpbnRlcm1lZGlhdGUgc2V0IHRvIGNvbXB1dGUgaXRzIGluaXRpYWwgdmFsdWUuXG4gICAgLy9cbiAgICBpZiAocmVhY2g9PT1udWxsKSB7XG4gICAgICAgIHJlYWNoID0gbmV3IEFUTkNvbmZpZ1NldChmdWxsQ3R4KTtcbiAgICAgICAgdmFyIGNsb3N1cmVCdXN5ID0gbmV3IFNldCgpO1xuICAgICAgICB2YXIgdHJlYXRFb2ZBc0Vwc2lsb24gPSB0ID09PSBUb2tlbi5FT0Y7XG4gICAgICAgIGZvciAodmFyIGs9MDsgazxpbnRlcm1lZGlhdGUuaXRlbXMubGVuZ3RoO2srKykge1xuICAgICAgICAgICAgdGhpcy5jbG9zdXJlKGludGVybWVkaWF0ZS5pdGVtc1trXSwgcmVhY2gsIGNsb3N1cmVCdXN5LCBmYWxzZSwgZnVsbEN0eCwgdHJlYXRFb2ZBc0Vwc2lsb24pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0ID09PSBUb2tlbi5FT0YpIHtcbiAgICAgICAgLy8gQWZ0ZXIgY29uc3VtaW5nIEVPRiBubyBhZGRpdGlvbmFsIGlucHV0IGlzIHBvc3NpYmxlLCBzbyB3ZSBhcmVcbiAgICAgICAgLy8gb25seSBpbnRlcmVzdGVkIGluIGNvbmZpZ3VyYXRpb25zIHdoaWNoIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGVcbiAgICAgICAgLy8gZGVjaXNpb24gcnVsZSAobG9jYWwgY29udGV4dCkgb3IgZW5kIG9mIHRoZSBzdGFydCBydWxlIChmdWxsXG4gICAgICAgIC8vIGNvbnRleHQpLiBVcGRhdGUgcmVhY2ggdG8gY29udGFpbiBvbmx5IHRoZXNlIGNvbmZpZ3VyYXRpb25zLiBUaGlzXG4gICAgICAgIC8vIGhhbmRsZXMgYm90aCBleHBsaWNpdCBFT0YgdHJhbnNpdGlvbnMgaW4gdGhlIGdyYW1tYXIgYW5kIGltcGxpY2l0XG4gICAgICAgIC8vIEVPRiB0cmFuc2l0aW9ucyBmb2xsb3dpbmcgdGhlIGVuZCBvZiB0aGUgZGVjaXNpb24gb3Igc3RhcnQgcnVsZS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gV2hlbiByZWFjaD09aW50ZXJtZWRpYXRlLCBubyBjbG9zdXJlIG9wZXJhdGlvbiB3YXMgcGVyZm9ybWVkLiBJblxuICAgICAgICAvLyB0aGlzIGNhc2UsIHJlbW92ZUFsbENvbmZpZ3NOb3RJblJ1bGVTdG9wU3RhdGUgbmVlZHMgdG8gY2hlY2sgZm9yXG4gICAgICAgIC8vIHJlYWNoYWJsZSBydWxlIHN0b3Agc3RhdGVzIGFzIHdlbGwgYXMgY29uZmlndXJhdGlvbnMgYWxyZWFkeSBpblxuICAgICAgICAvLyBhIHJ1bGUgc3RvcCBzdGF0ZS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gVGhpcyBpcyBoYW5kbGVkIGJlZm9yZSB0aGUgY29uZmlndXJhdGlvbnMgaW4gc2tpcHBlZFN0b3BTdGF0ZXMsXG4gICAgICAgIC8vIGJlY2F1c2UgYW55IGNvbmZpZ3VyYXRpb25zIHBvdGVudGlhbGx5IGFkZGVkIGZyb20gdGhhdCBsaXN0IGFyZVxuICAgICAgICAvLyBhbHJlYWR5IGd1YXJhbnRlZWQgdG8gbWVldCB0aGlzIGNvbmRpdGlvbiB3aGV0aGVyIG9yIG5vdCBpdCdzXG4gICAgICAgIC8vIHJlcXVpcmVkLlxuICAgICAgICAvL1xuICAgICAgICByZWFjaCA9IHRoaXMucmVtb3ZlQWxsQ29uZmlnc05vdEluUnVsZVN0b3BTdGF0ZShyZWFjaCwgcmVhY2ggPT09IGludGVybWVkaWF0ZSk7XG4gICAgfVxuICAgIC8vIElmIHNraXBwZWRTdG9wU3RhdGVzIT09bnVsbCwgdGhlbiBpdCBjb250YWlucyBhdCBsZWFzdCBvbmVcbiAgICAvLyBjb25maWd1cmF0aW9uLiBGb3IgZnVsbC1jb250ZXh0IHJlYWNoIG9wZXJhdGlvbnMsIHRoZXNlXG4gICAgLy8gY29uZmlndXJhdGlvbnMgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBzdGFydCBydWxlLCBpbiB3aGljaCBjYXNlIHdlXG4gICAgLy8gb25seSBhZGQgdGhlbSBiYWNrIHRvIHJlYWNoIGlmIG5vIGNvbmZpZ3VyYXRpb24gZHVyaW5nIHRoZSBjdXJyZW50XG4gICAgLy8gY2xvc3VyZSBvcGVyYXRpb24gcmVhY2hlZCBzdWNoIGEgc3RhdGUuIFRoaXMgZW5zdXJlcyBhZGFwdGl2ZVByZWRpY3RcbiAgICAvLyBjaG9vc2VzIGFuIGFsdGVybmF0aXZlIG1hdGNoaW5nIHRoZSBsb25nZXN0IG92ZXJhbGwgc2VxdWVuY2Ugd2hlblxuICAgIC8vIG11bHRpcGxlIGFsdGVybmF0aXZlcyBhcmUgdmlhYmxlLlxuICAgIC8vXG4gICAgaWYgKHNraXBwZWRTdG9wU3RhdGVzIT09bnVsbCAmJiAoICghIGZ1bGxDdHgpIHx8ICghIFByZWRpY3Rpb25Nb2RlLmhhc0NvbmZpZ0luUnVsZVN0b3BTdGF0ZShyZWFjaCkpKSkge1xuICAgICAgICBmb3IgKHZhciBsPTA7IGw8c2tpcHBlZFN0b3BTdGF0ZXMubGVuZ3RoO2wrKykge1xuICAgICAgICAgICAgcmVhY2guYWRkKHNraXBwZWRTdG9wU3RhdGVzW2xdLCB0aGlzLm1lcmdlQ2FjaGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChyZWFjaC5pdGVtcy5sZW5ndGg9PT0wKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiByZWFjaDtcbiAgICB9XG59O1xuLy9cbi8vIFJldHVybiBhIGNvbmZpZ3VyYXRpb24gc2V0IGNvbnRhaW5pbmcgb25seSB0aGUgY29uZmlndXJhdGlvbnMgZnJvbVxuLy8ge0Bjb2RlIGNvbmZpZ3N9IHdoaWNoIGFyZSBpbiBhIHtAbGluayBSdWxlU3RvcFN0YXRlfS4gSWYgYWxsXG4vLyBjb25maWd1cmF0aW9ucyBpbiB7QGNvZGUgY29uZmlnc30gYXJlIGFscmVhZHkgaW4gYSBydWxlIHN0b3Agc3RhdGUsIHRoaXNcbi8vIG1ldGhvZCBzaW1wbHkgcmV0dXJucyB7QGNvZGUgY29uZmlnc30uXG4vL1xuLy8gPHA+V2hlbiB7QGNvZGUgbG9va1RvRW5kT2ZSdWxlfSBpcyB0cnVlLCB0aGlzIG1ldGhvZCB1c2VzXG4vLyB7QGxpbmsgQVROLy9uZXh0VG9rZW5zfSBmb3IgZWFjaCBjb25maWd1cmF0aW9uIGluIHtAY29kZSBjb25maWdzfSB3aGljaCBpc1xuLy8gbm90IGFscmVhZHkgaW4gYSBydWxlIHN0b3Agc3RhdGUgdG8gc2VlIGlmIGEgcnVsZSBzdG9wIHN0YXRlIGlzIHJlYWNoYWJsZVxuLy8gZnJvbSB0aGUgY29uZmlndXJhdGlvbiB2aWEgZXBzaWxvbi1vbmx5IHRyYW5zaXRpb25zLjwvcD5cbi8vXG4vLyBAcGFyYW0gY29uZmlncyB0aGUgY29uZmlndXJhdGlvbiBzZXQgdG8gdXBkYXRlXG4vLyBAcGFyYW0gbG9va1RvRW5kT2ZSdWxlIHdoZW4gdHJ1ZSwgdGhpcyBtZXRob2QgY2hlY2tzIGZvciBydWxlIHN0b3Agc3RhdGVzXG4vLyByZWFjaGFibGUgYnkgZXBzaWxvbi1vbmx5IHRyYW5zaXRpb25zIGZyb20gZWFjaCBjb25maWd1cmF0aW9uIGluXG4vLyB7QGNvZGUgY29uZmlnc30uXG4vL1xuLy8gQHJldHVybiB7QGNvZGUgY29uZmlnc30gaWYgYWxsIGNvbmZpZ3VyYXRpb25zIGluIHtAY29kZSBjb25maWdzfSBhcmUgaW4gYVxuLy8gcnVsZSBzdG9wIHN0YXRlLCBvdGhlcndpc2UgcmV0dXJuIGEgbmV3IGNvbmZpZ3VyYXRpb24gc2V0IGNvbnRhaW5pbmcgb25seVxuLy8gdGhlIGNvbmZpZ3VyYXRpb25zIGZyb20ge0Bjb2RlIGNvbmZpZ3N9IHdoaWNoIGFyZSBpbiBhIHJ1bGUgc3RvcCBzdGF0ZVxuLy9cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUucmVtb3ZlQWxsQ29uZmlnc05vdEluUnVsZVN0b3BTdGF0ZSA9IGZ1bmN0aW9uKGNvbmZpZ3MsIGxvb2tUb0VuZE9mUnVsZSkge1xuICAgIGlmIChQcmVkaWN0aW9uTW9kZS5hbGxDb25maWdzSW5SdWxlU3RvcFN0YXRlcyhjb25maWdzKSkge1xuICAgICAgICByZXR1cm4gY29uZmlncztcbiAgICB9XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBBVE5Db25maWdTZXQoY29uZmlncy5mdWxsQ3R4KTtcbiAgICBmb3IodmFyIGk9MDsgaTxjb25maWdzLml0ZW1zLmxlbmd0aDtpKyspIHtcbiAgICAgICAgdmFyIGNvbmZpZyA9IGNvbmZpZ3MuaXRlbXNbaV07XG4gICAgICAgIGlmIChjb25maWcuc3RhdGUgaW5zdGFuY2VvZiBSdWxlU3RvcFN0YXRlKSB7XG4gICAgICAgICAgICByZXN1bHQuYWRkKGNvbmZpZywgdGhpcy5tZXJnZUNhY2hlKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb29rVG9FbmRPZlJ1bGUgJiYgY29uZmlnLnN0YXRlLmVwc2lsb25Pbmx5VHJhbnNpdGlvbnMpIHtcbiAgICAgICAgICAgIHZhciBuZXh0VG9rZW5zID0gdGhpcy5hdG4ubmV4dFRva2Vucyhjb25maWcuc3RhdGUpO1xuICAgICAgICAgICAgaWYgKG5leHRUb2tlbnMuY29udGFpbnMoVG9rZW4uRVBTSUxPTikpIHtcbiAgICAgICAgICAgICAgICB2YXIgZW5kT2ZSdWxlU3RhdGUgPSB0aGlzLmF0bi5ydWxlVG9TdG9wU3RhdGVbY29uZmlnLnN0YXRlLnJ1bGVJbmRleF07XG4gICAgICAgICAgICAgICAgcmVzdWx0LmFkZChuZXcgQVROQ29uZmlnKHtzdGF0ZTplbmRPZlJ1bGVTdGF0ZX0sIGNvbmZpZyksIHRoaXMubWVyZ2VDYWNoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuY29tcHV0ZVN0YXJ0U3RhdGUgPSBmdW5jdGlvbihwLCBjdHgsIGZ1bGxDdHgpIHtcbiAgICAvLyBhbHdheXMgYXQgbGVhc3QgdGhlIGltcGxpY2l0IGNhbGwgdG8gc3RhcnQgcnVsZVxuICAgIHZhciBpbml0aWFsQ29udGV4dCA9IHByZWRpY3Rpb25Db250ZXh0RnJvbVJ1bGVDb250ZXh0KHRoaXMuYXRuLCBjdHgpO1xuICAgIHZhciBjb25maWdzID0gbmV3IEFUTkNvbmZpZ1NldChmdWxsQ3R4KTtcbiAgICBmb3IodmFyIGk9MDtpPHAudHJhbnNpdGlvbnMubGVuZ3RoO2krKykge1xuICAgICAgICB2YXIgdGFyZ2V0ID0gcC50cmFuc2l0aW9uc1tpXS50YXJnZXQ7XG4gICAgICAgIHZhciBjID0gbmV3IEFUTkNvbmZpZyh7IHN0YXRlOnRhcmdldCwgYWx0OmkrMSwgY29udGV4dDppbml0aWFsQ29udGV4dCB9LCBudWxsKTtcbiAgICAgICAgdmFyIGNsb3N1cmVCdXN5ID0gbmV3IFNldCgpO1xuICAgICAgICB0aGlzLmNsb3N1cmUoYywgY29uZmlncywgY2xvc3VyZUJ1c3ksIHRydWUsIGZ1bGxDdHgsIGZhbHNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbmZpZ3M7XG59O1xuXG4vL1xuLy8gVGhpcyBtZXRob2QgdHJhbnNmb3JtcyB0aGUgc3RhcnQgc3RhdGUgY29tcHV0ZWQgYnlcbi8vIHtAbGluayAvL2NvbXB1dGVTdGFydFN0YXRlfSB0byB0aGUgc3BlY2lhbCBzdGFydCBzdGF0ZSB1c2VkIGJ5IGFcbi8vIHByZWNlZGVuY2UgREZBIGZvciBhIHBhcnRpY3VsYXIgcHJlY2VkZW5jZSB2YWx1ZS4gVGhlIHRyYW5zZm9ybWF0aW9uXG4vLyBwcm9jZXNzIGFwcGxpZXMgdGhlIGZvbGxvd2luZyBjaGFuZ2VzIHRvIHRoZSBzdGFydCBzdGF0ZSdzIGNvbmZpZ3VyYXRpb25cbi8vIHNldC5cbi8vXG4vLyA8b2w+XG4vLyA8bGk+RXZhbHVhdGUgdGhlIHByZWNlZGVuY2UgcHJlZGljYXRlcyBmb3IgZWFjaCBjb25maWd1cmF0aW9uIHVzaW5nXG4vLyB7QGxpbmsgU2VtYW50aWNDb250ZXh0Ly9ldmFsUHJlY2VkZW5jZX0uPC9saT5cbi8vIDxsaT5SZW1vdmUgYWxsIGNvbmZpZ3VyYXRpb25zIHdoaWNoIHByZWRpY3QgYW4gYWx0ZXJuYXRpdmUgZ3JlYXRlciB0aGFuXG4vLyAxLCBmb3Igd2hpY2ggYW5vdGhlciBjb25maWd1cmF0aW9uIHRoYXQgcHJlZGljdHMgYWx0ZXJuYXRpdmUgMSBpcyBpbiB0aGVcbi8vIHNhbWUgQVROIHN0YXRlIHdpdGggdGhlIHNhbWUgcHJlZGljdGlvbiBjb250ZXh0LiBUaGlzIHRyYW5zZm9ybWF0aW9uIGlzXG4vLyB2YWxpZCBmb3IgdGhlIGZvbGxvd2luZyByZWFzb25zOlxuLy8gPHVsPlxuLy8gPGxpPlRoZSBjbG9zdXJlIGJsb2NrIGNhbm5vdCBjb250YWluIGFueSBlcHNpbG9uIHRyYW5zaXRpb25zIHdoaWNoIGJ5cGFzc1xuLy8gdGhlIGJvZHkgb2YgdGhlIGNsb3N1cmUsIHNvIGFsbCBzdGF0ZXMgcmVhY2hhYmxlIHZpYSBhbHRlcm5hdGl2ZSAxIGFyZVxuLy8gcGFydCBvZiB0aGUgcHJlY2VkZW5jZSBhbHRlcm5hdGl2ZXMgb2YgdGhlIHRyYW5zZm9ybWVkIGxlZnQtcmVjdXJzaXZlXG4vLyBydWxlLjwvbGk+XG4vLyA8bGk+VGhlIFwicHJpbWFyeVwiIHBvcnRpb24gb2YgYSBsZWZ0IHJlY3Vyc2l2ZSBydWxlIGNhbm5vdCBjb250YWluIGFuXG4vLyBlcHNpbG9uIHRyYW5zaXRpb24sIHNvIHRoZSBvbmx5IHdheSBhbiBhbHRlcm5hdGl2ZSBvdGhlciB0aGFuIDEgY2FuIGV4aXN0XG4vLyBpbiBhIHN0YXRlIHRoYXQgaXMgYWxzbyByZWFjaGFibGUgdmlhIGFsdGVybmF0aXZlIDEgaXMgYnkgbmVzdGluZyBjYWxsc1xuLy8gdG8gdGhlIGxlZnQtcmVjdXJzaXZlIHJ1bGUsIHdpdGggdGhlIG91dGVyIGNhbGxzIG5vdCBiZWluZyBhdCB0aGVcbi8vIHByZWZlcnJlZCBwcmVjZWRlbmNlIGxldmVsLjwvbGk+XG4vLyA8L3VsPlxuLy8gPC9saT5cbi8vIDwvb2w+XG4vL1xuLy8gPHA+XG4vLyBUaGUgcHJlZGljdGlvbiBjb250ZXh0IG11c3QgYmUgY29uc2lkZXJlZCBieSB0aGlzIGZpbHRlciB0byBhZGRyZXNzXG4vLyBzaXR1YXRpb25zIGxpa2UgdGhlIGZvbGxvd2luZy5cbi8vIDwvcD5cbi8vIDxjb2RlPlxuLy8gPHByZT5cbi8vIGdyYW1tYXIgVEE7XG4vLyBwcm9nOiBzdGF0ZW1lbnQqIEVPRjtcbi8vIHN0YXRlbWVudDogbGV0dGVyQSB8IHN0YXRlbWVudCBsZXR0ZXJBICdiJyA7XG4vLyBsZXR0ZXJBOiAnYSc7XG4vLyA8L3ByZT5cbi8vIDwvY29kZT5cbi8vIDxwPlxuLy8gSWYgdGhlIGFib3ZlIGdyYW1tYXIsIHRoZSBBVE4gc3RhdGUgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSB0b2tlblxuLy8gcmVmZXJlbmNlIHtAY29kZSAnYSd9IGluIHtAY29kZSBsZXR0ZXJBfSBpcyByZWFjaGFibGUgZnJvbSB0aGUgbGVmdCBlZGdlXG4vLyBvZiBib3RoIHRoZSBwcmltYXJ5IGFuZCBjbG9zdXJlIGJsb2NrcyBvZiB0aGUgbGVmdC1yZWN1cnNpdmUgcnVsZVxuLy8ge0Bjb2RlIHN0YXRlbWVudH0uIFRoZSBwcmVkaWN0aW9uIGNvbnRleHQgYXNzb2NpYXRlZCB3aXRoIGVhY2ggb2YgdGhlc2Vcbi8vIGNvbmZpZ3VyYXRpb25zIGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiB0aGVtLCBhbmQgcHJldmVudHMgdGhlIGFsdGVybmF0aXZlXG4vLyB3aGljaCBzdGVwcGVkIG91dCB0byB7QGNvZGUgcHJvZ30gKGFuZCB0aGVuIGJhY2sgaW4gdG8ge0Bjb2RlIHN0YXRlbWVudH1cbi8vIGZyb20gYmVpbmcgZWxpbWluYXRlZCBieSB0aGUgZmlsdGVyLlxuLy8gPC9wPlxuLy9cbi8vIEBwYXJhbSBjb25maWdzIFRoZSBjb25maWd1cmF0aW9uIHNldCBjb21wdXRlZCBieVxuLy8ge0BsaW5rIC8vY29tcHV0ZVN0YXJ0U3RhdGV9IGFzIHRoZSBzdGFydCBzdGF0ZSBmb3IgdGhlIERGQS5cbi8vIEByZXR1cm4gVGhlIHRyYW5zZm9ybWVkIGNvbmZpZ3VyYXRpb24gc2V0IHJlcHJlc2VudGluZyB0aGUgc3RhcnQgc3RhdGVcbi8vIGZvciBhIHByZWNlZGVuY2UgREZBIGF0IGEgcGFydGljdWxhciBwcmVjZWRlbmNlIGxldmVsIChkZXRlcm1pbmVkIGJ5XG4vLyBjYWxsaW5nIHtAbGluayBQYXJzZXIvL2dldFByZWNlZGVuY2V9KS5cbi8vXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmFwcGx5UHJlY2VkZW5jZUZpbHRlciA9IGZ1bmN0aW9uKGNvbmZpZ3MpIHtcblx0dmFyIGNvbmZpZztcblx0dmFyIHN0YXRlc0Zyb21BbHQxID0gW107XG4gICAgdmFyIGNvbmZpZ1NldCA9IG5ldyBBVE5Db25maWdTZXQoY29uZmlncy5mdWxsQ3R4KTtcbiAgICBmb3IodmFyIGk9MDsgaTxjb25maWdzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbmZpZyA9IGNvbmZpZ3MuaXRlbXNbaV07XG4gICAgICAgIC8vIGhhbmRsZSBhbHQgMSBmaXJzdFxuICAgICAgICBpZiAoY29uZmlnLmFsdCAhPT0gMSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHVwZGF0ZWRDb250ZXh0ID0gY29uZmlnLnNlbWFudGljQ29udGV4dC5ldmFsUHJlY2VkZW5jZSh0aGlzLnBhcnNlciwgdGhpcy5fb3V0ZXJDb250ZXh0KTtcbiAgICAgICAgaWYgKHVwZGF0ZWRDb250ZXh0PT09bnVsbCkge1xuICAgICAgICAgICAgLy8gdGhlIGNvbmZpZ3VyYXRpb24gd2FzIGVsaW1pbmF0ZWRcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlc0Zyb21BbHQxW2NvbmZpZy5zdGF0ZS5zdGF0ZU51bWJlcl0gPSBjb25maWcuY29udGV4dDtcbiAgICAgICAgaWYgKHVwZGF0ZWRDb250ZXh0ICE9PSBjb25maWcuc2VtYW50aWNDb250ZXh0KSB7XG4gICAgICAgICAgICBjb25maWdTZXQuYWRkKG5ldyBBVE5Db25maWcoe3NlbWFudGljQ29udGV4dDp1cGRhdGVkQ29udGV4dH0sIGNvbmZpZyksIHRoaXMubWVyZ2VDYWNoZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWdTZXQuYWRkKGNvbmZpZywgdGhpcy5tZXJnZUNhY2hlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmb3IoaT0wOyBpPGNvbmZpZ3MuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uZmlnID0gY29uZmlncy5pdGVtc1tpXTtcbiAgICAgICAgaWYgKGNvbmZpZy5hbHQgPT09IDEpIHtcbiAgICAgICAgICAgIC8vIGFscmVhZHkgaGFuZGxlZFxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSW4gdGhlIGZ1dHVyZSwgdGhpcyBlbGltaW5hdGlvbiBzdGVwIGNvdWxkIGJlIHVwZGF0ZWQgdG8gYWxzb1xuICAgICAgICAvLyBmaWx0ZXIgdGhlIHByZWRpY3Rpb24gY29udGV4dCBmb3IgYWx0ZXJuYXRpdmVzIHByZWRpY3RpbmcgYWx0PjFcbiAgICAgICAgLy8gKGJhc2ljYWxseSBhIGdyYXBoIHN1YnRyYWN0aW9uIGFsZ29yaXRobSkuXG5cdFx0aWYgKCFjb25maWcucHJlY2VkZW5jZUZpbHRlclN1cHByZXNzZWQpIHtcbiAgICAgICAgICAgIHZhciBjb250ZXh0ID0gc3RhdGVzRnJvbUFsdDFbY29uZmlnLnN0YXRlLnN0YXRlTnVtYmVyXSB8fCBudWxsO1xuICAgICAgICAgICAgaWYgKGNvbnRleHQhPT1udWxsICYmIGNvbnRleHQuZXF1YWxzKGNvbmZpZy5jb250ZXh0KSkge1xuICAgICAgICAgICAgICAgIC8vIGVsaW1pbmF0ZWRcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblx0XHR9XG4gICAgICAgIGNvbmZpZ1NldC5hZGQoY29uZmlnLCB0aGlzLm1lcmdlQ2FjaGUpO1xuICAgIH1cbiAgICByZXR1cm4gY29uZmlnU2V0O1xufTtcblxuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5nZXRSZWFjaGFibGVUYXJnZXQgPSBmdW5jdGlvbih0cmFucywgdHR5cGUpIHtcbiAgICBpZiAodHJhbnMubWF0Y2hlcyh0dHlwZSwgMCwgdGhpcy5hdG4ubWF4VG9rZW5UeXBlKSkge1xuICAgICAgICByZXR1cm4gdHJhbnMudGFyZ2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0UHJlZHNGb3JBbWJpZ0FsdHMgPSBmdW5jdGlvbihhbWJpZ0FsdHMsIGNvbmZpZ3MsIG5hbHRzKSB7XG4gICAgLy8gUkVBQ0g9WzF8MXxbXXwwOjAsIDF8MnxbXXwwOjFdXG4gICAgLy8gYWx0VG9QcmVkIHN0YXJ0cyBhcyBhbiBhcnJheSBvZiBhbGwgbnVsbCBjb250ZXh0cy4gVGhlIGVudHJ5IGF0IGluZGV4IGlcbiAgICAvLyBjb3JyZXNwb25kcyB0byBhbHRlcm5hdGl2ZSBpLiBhbHRUb1ByZWRbaV0gbWF5IGhhdmUgb25lIG9mIHRocmVlIHZhbHVlczpcbiAgICAvLyAgIDEuIG51bGw6IG5vIEFUTkNvbmZpZyBjIGlzIGZvdW5kIHN1Y2ggdGhhdCBjLmFsdD09aVxuICAgIC8vICAgMi4gU2VtYW50aWNDb250ZXh0Lk5PTkU6IEF0IGxlYXN0IG9uZSBBVE5Db25maWcgYyBleGlzdHMgc3VjaCB0aGF0XG4gICAgLy8gICAgICBjLmFsdD09aSBhbmQgYy5zZW1hbnRpY0NvbnRleHQ9PVNlbWFudGljQ29udGV4dC5OT05FLiBJbiBvdGhlciB3b3JkcyxcbiAgICAvLyAgICAgIGFsdCBpIGhhcyBhdCBsZWFzdCBvbmUgdW5wcmVkaWNhdGVkIGNvbmZpZy5cbiAgICAvLyAgIDMuIE5vbi1OT05FIFNlbWFudGljIENvbnRleHQ6IFRoZXJlIGV4aXN0cyBhdCBsZWFzdCBvbmUsIGFuZCBmb3IgYWxsXG4gICAgLy8gICAgICBBVE5Db25maWcgYyBzdWNoIHRoYXQgYy5hbHQ9PWksIGMuc2VtYW50aWNDb250ZXh0IT1TZW1hbnRpY0NvbnRleHQuTk9ORS5cbiAgICAvL1xuICAgIC8vIEZyb20gdGhpcywgaXQgaXMgY2xlYXIgdGhhdCBOT05FfHxhbnl0aGluZz09Tk9ORS5cbiAgICAvL1xuICAgIHZhciBhbHRUb1ByZWQgPSBbXTtcbiAgICBmb3IodmFyIGk9MDtpPGNvbmZpZ3MuaXRlbXMubGVuZ3RoO2krKykge1xuICAgICAgICB2YXIgYyA9IGNvbmZpZ3MuaXRlbXNbaV07XG4gICAgICAgIGlmKGFtYmlnQWx0cy5jb250YWlucyggYy5hbHQgKSkge1xuICAgICAgICAgICAgYWx0VG9QcmVkW2MuYWx0XSA9IFNlbWFudGljQ29udGV4dC5vckNvbnRleHQoYWx0VG9QcmVkW2MuYWx0XSB8fCBudWxsLCBjLnNlbWFudGljQ29udGV4dCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFyIG5QcmVkQWx0cyA9IDA7XG4gICAgZm9yIChpID0xO2k8IG5hbHRzKzE7aSsrKSB7XG4gICAgICAgIHZhciBwcmVkID0gYWx0VG9QcmVkW2ldIHx8IG51bGw7XG4gICAgICAgIGlmIChwcmVkPT09bnVsbCkge1xuICAgICAgICAgICAgYWx0VG9QcmVkW2ldID0gU2VtYW50aWNDb250ZXh0Lk5PTkU7XG4gICAgICAgIH0gZWxzZSBpZiAocHJlZCAhPT0gU2VtYW50aWNDb250ZXh0Lk5PTkUpIHtcbiAgICAgICAgICAgIG5QcmVkQWx0cyArPSAxO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIG5vbmFtYmlnIGFsdHMgYXJlIG51bGwgaW4gYWx0VG9QcmVkXG4gICAgaWYgKG5QcmVkQWx0cz09PTApIHtcbiAgICAgICAgYWx0VG9QcmVkID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJnZXRQcmVkc0ZvckFtYmlnQWx0cyByZXN1bHQgXCIgKyBVdGlscy5hcnJheVRvU3RyaW5nKGFsdFRvUHJlZCkpO1xuICAgIH1cbiAgICByZXR1cm4gYWx0VG9QcmVkO1xufTtcblxuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5nZXRQcmVkaWNhdGVQcmVkaWN0aW9ucyA9IGZ1bmN0aW9uKGFtYmlnQWx0cywgYWx0VG9QcmVkKSB7XG4gICAgdmFyIHBhaXJzID0gW107XG4gICAgdmFyIGNvbnRhaW5zUHJlZGljYXRlID0gZmFsc2U7XG4gICAgZm9yICh2YXIgaT0xOyBpPGFsdFRvUHJlZC5sZW5ndGg7aSsrKSB7XG4gICAgICAgIHZhciBwcmVkID0gYWx0VG9QcmVkW2ldO1xuICAgICAgICAvLyB1bnByZWRpY2F0ZWQgaXMgaW5kaWNhdGVkIGJ5IFNlbWFudGljQ29udGV4dC5OT05FXG4gICAgICAgIGlmKCBhbWJpZ0FsdHMhPT1udWxsICYmIGFtYmlnQWx0cy5jb250YWlucyggaSApKSB7XG4gICAgICAgICAgICBwYWlycy5wdXNoKG5ldyBQcmVkUHJlZGljdGlvbihwcmVkLCBpKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByZWQgIT09IFNlbWFudGljQ29udGV4dC5OT05FKSB7XG4gICAgICAgICAgICBjb250YWluc1ByZWRpY2F0ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKCEgY29udGFpbnNQcmVkaWNhdGUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBwYWlycztcbn07XG5cbi8vXG4vLyBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGltcHJvdmUgdGhlIGxvY2FsaXphdGlvbiBvZiBlcnJvciBtZXNzYWdlcyBieVxuLy8gY2hvb3NpbmcgYW4gYWx0ZXJuYXRpdmUgcmF0aGVyIHRoYW4gdGhyb3dpbmcgYVxuLy8ge0BsaW5rIE5vVmlhYmxlQWx0RXhjZXB0aW9ufSBpbiBwYXJ0aWN1bGFyIHByZWRpY3Rpb24gc2NlbmFyaW9zIHdoZXJlIHRoZVxuLy8ge0BsaW5rIC8vRVJST1J9IHN0YXRlIHdhcyByZWFjaGVkIGR1cmluZyBBVE4gc2ltdWxhdGlvbi5cbi8vXG4vLyA8cD5cbi8vIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kIHVzZXMgdGhlIGZvbGxvd2luZ1xuLy8gYWxnb3JpdGhtIHRvIGlkZW50aWZ5IGFuIEFUTiBjb25maWd1cmF0aW9uIHdoaWNoIHN1Y2Nlc3NmdWxseSBwYXJzZWQgdGhlXG4vLyBkZWNpc2lvbiBlbnRyeSBydWxlLiBDaG9vc2luZyBzdWNoIGFuIGFsdGVybmF0aXZlIGVuc3VyZXMgdGhhdCB0aGVcbi8vIHtAbGluayBQYXJzZXJSdWxlQ29udGV4dH0gcmV0dXJuZWQgYnkgdGhlIGNhbGxpbmcgcnVsZSB3aWxsIGJlIGNvbXBsZXRlXG4vLyBhbmQgdmFsaWQsIGFuZCB0aGUgc3ludGF4IGVycm9yIHdpbGwgYmUgcmVwb3J0ZWQgbGF0ZXIgYXQgYSBtb3JlXG4vLyBsb2NhbGl6ZWQgbG9jYXRpb24uPC9wPlxuLy9cbi8vIDx1bD5cbi8vIDxsaT5JZiBhIHN5bnRhY3RpY2FsbHkgdmFsaWQgcGF0aCBvciBwYXRocyByZWFjaCB0aGUgZW5kIG9mIHRoZSBkZWNpc2lvbiBydWxlIGFuZFxuLy8gdGhleSBhcmUgc2VtYW50aWNhbGx5IHZhbGlkIGlmIHByZWRpY2F0ZWQsIHJldHVybiB0aGUgbWluIGFzc29jaWF0ZWQgYWx0LjwvbGk+XG4vLyA8bGk+RWxzZSwgaWYgYSBzZW1hbnRpY2FsbHkgaW52YWxpZCBidXQgc3ludGFjdGljYWxseSB2YWxpZCBwYXRoIGV4aXN0XG4vLyBvciBwYXRocyBleGlzdCwgcmV0dXJuIHRoZSBtaW5pbXVtIGFzc29jaWF0ZWQgYWx0LlxuLy8gPC9saT5cbi8vIDxsaT5PdGhlcndpc2UsIHJldHVybiB7QGxpbmsgQVROLy9JTlZBTElEX0FMVF9OVU1CRVJ9LjwvbGk+XG4vLyA8L3VsPlxuLy9cbi8vIDxwPlxuLy8gSW4gc29tZSBzY2VuYXJpb3MsIHRoZSBhbGdvcml0aG0gZGVzY3JpYmVkIGFib3ZlIGNvdWxkIHByZWRpY3QgYW5cbi8vIGFsdGVybmF0aXZlIHdoaWNoIHdpbGwgcmVzdWx0IGluIGEge0BsaW5rIEZhaWxlZFByZWRpY2F0ZUV4Y2VwdGlvbn0gaW5cbi8vIHRoZSBwYXJzZXIuIFNwZWNpZmljYWxseSwgdGhpcyBjb3VsZCBvY2N1ciBpZiB0aGUgPGVtPm9ubHk8L2VtPiBjb25maWd1cmF0aW9uXG4vLyBjYXBhYmxlIG9mIHN1Y2Nlc3NmdWxseSBwYXJzaW5nIHRvIHRoZSBlbmQgb2YgdGhlIGRlY2lzaW9uIHJ1bGUgaXNcbi8vIGJsb2NrZWQgYnkgYSBzZW1hbnRpYyBwcmVkaWNhdGUuIEJ5IGNob29zaW5nIHRoaXMgYWx0ZXJuYXRpdmUgd2l0aGluXG4vLyB7QGxpbmsgLy9hZGFwdGl2ZVByZWRpY3R9IGluc3RlYWQgb2YgdGhyb3dpbmcgYVxuLy8ge0BsaW5rIE5vVmlhYmxlQWx0RXhjZXB0aW9ufSwgdGhlIHJlc3VsdGluZ1xuLy8ge0BsaW5rIEZhaWxlZFByZWRpY2F0ZUV4Y2VwdGlvbn0gaW4gdGhlIHBhcnNlciB3aWxsIGlkZW50aWZ5IHRoZSBzcGVjaWZpY1xuLy8gcHJlZGljYXRlIHdoaWNoIGlzIHByZXZlbnRpbmcgdGhlIHBhcnNlciBmcm9tIHN1Y2Nlc3NmdWxseSBwYXJzaW5nIHRoZVxuLy8gZGVjaXNpb24gcnVsZSwgd2hpY2ggaGVscHMgZGV2ZWxvcGVycyBpZGVudGlmeSBhbmQgY29ycmVjdCBsb2dpYyBlcnJvcnNcbi8vIGluIHNlbWFudGljIHByZWRpY2F0ZXMuXG4vLyA8L3A+XG4vL1xuLy8gQHBhcmFtIGNvbmZpZ3MgVGhlIEFUTiBjb25maWd1cmF0aW9ucyB3aGljaCB3ZXJlIHZhbGlkIGltbWVkaWF0ZWx5IGJlZm9yZVxuLy8gdGhlIHtAbGluayAvL0VSUk9SfSBzdGF0ZSB3YXMgcmVhY2hlZFxuLy8gQHBhcmFtIG91dGVyQ29udGV4dCBUaGUgaXMgdGhlIFxcZ2FtbWFfMCBpbml0aWFsIHBhcnNlciBjb250ZXh0IGZyb20gdGhlIHBhcGVyXG4vLyBvciB0aGUgcGFyc2VyIHN0YWNrIGF0IHRoZSBpbnN0YW50IGJlZm9yZSBwcmVkaWN0aW9uIGNvbW1lbmNlcy5cbi8vXG4vLyBAcmV0dXJuIFRoZSB2YWx1ZSB0byByZXR1cm4gZnJvbSB7QGxpbmsgLy9hZGFwdGl2ZVByZWRpY3R9LCBvclxuLy8ge0BsaW5rIEFUTi8vSU5WQUxJRF9BTFRfTlVNQkVSfSBpZiBhIHN1aXRhYmxlIGFsdGVybmF0aXZlIHdhcyBub3Rcbi8vIGlkZW50aWZpZWQgYW5kIHtAbGluayAvL2FkYXB0aXZlUHJlZGljdH0gc2hvdWxkIHJlcG9ydCBhbiBlcnJvciBpbnN0ZWFkLlxuLy9cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0U3luVmFsaWRPclNlbUludmFsaWRBbHRUaGF0RmluaXNoZWREZWNpc2lvbkVudHJ5UnVsZSA9IGZ1bmN0aW9uKGNvbmZpZ3MsIG91dGVyQ29udGV4dCkge1xuICAgIHZhciBjZmdzID0gdGhpcy5zcGxpdEFjY29yZGluZ1RvU2VtYW50aWNWYWxpZGl0eShjb25maWdzLCBvdXRlckNvbnRleHQpO1xuICAgIHZhciBzZW1WYWxpZENvbmZpZ3MgPSBjZmdzWzBdO1xuICAgIHZhciBzZW1JbnZhbGlkQ29uZmlncyA9IGNmZ3NbMV07XG4gICAgdmFyIGFsdCA9IHRoaXMuZ2V0QWx0VGhhdEZpbmlzaGVkRGVjaXNpb25FbnRyeVJ1bGUoc2VtVmFsaWRDb25maWdzKTtcbiAgICBpZiAoYWx0IT09QVROLklOVkFMSURfQUxUX05VTUJFUikgeyAvLyBzZW1hbnRpY2FsbHkvc3ludGFjdGljYWxseSB2aWFibGUgcGF0aCBleGlzdHNcbiAgICAgICAgcmV0dXJuIGFsdDtcbiAgICB9XG4gICAgLy8gSXMgdGhlcmUgYSBzeW50YWN0aWNhbGx5IHZhbGlkIHBhdGggd2l0aCBhIGZhaWxlZCBwcmVkP1xuICAgIGlmIChzZW1JbnZhbGlkQ29uZmlncy5pdGVtcy5sZW5ndGg+MCkge1xuICAgICAgICBhbHQgPSB0aGlzLmdldEFsdFRoYXRGaW5pc2hlZERlY2lzaW9uRW50cnlSdWxlKHNlbUludmFsaWRDb25maWdzKTtcbiAgICAgICAgaWYgKGFsdCE9PUFUTi5JTlZBTElEX0FMVF9OVU1CRVIpIHsgLy8gc3ludGFjdGljYWxseSB2aWFibGUgcGF0aCBleGlzdHNcbiAgICAgICAgICAgIHJldHVybiBhbHQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIEFUTi5JTlZBTElEX0FMVF9OVU1CRVI7XG59O1xuXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmdldEFsdFRoYXRGaW5pc2hlZERlY2lzaW9uRW50cnlSdWxlID0gZnVuY3Rpb24oY29uZmlncykge1xuICAgIHZhciBhbHRzID0gW107XG4gICAgZm9yKHZhciBpPTA7aTxjb25maWdzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjID0gY29uZmlncy5pdGVtc1tpXTtcbiAgICAgICAgaWYgKGMucmVhY2hlc0ludG9PdXRlckNvbnRleHQ+MCB8fCAoKGMuc3RhdGUgaW5zdGFuY2VvZiBSdWxlU3RvcFN0YXRlKSAmJiBjLmNvbnRleHQuaGFzRW1wdHlQYXRoKCkpKSB7XG4gICAgICAgICAgICBpZihhbHRzLmluZGV4T2YoYy5hbHQpPDApIHtcbiAgICAgICAgICAgICAgICBhbHRzLnB1c2goYy5hbHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChhbHRzLmxlbmd0aD09PTApIHtcbiAgICAgICAgcmV0dXJuIEFUTi5JTlZBTElEX0FMVF9OVU1CRVI7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWluLmFwcGx5KG51bGwsIGFsdHMpO1xuICAgIH1cbn07XG4vLyBXYWxrIHRoZSBsaXN0IG9mIGNvbmZpZ3VyYXRpb25zIGFuZCBzcGxpdCB0aGVtIGFjY29yZGluZyB0b1xuLy8gIHRob3NlIHRoYXQgaGF2ZSBwcmVkcyBldmFsdWF0aW5nIHRvIHRydWUvZmFsc2UuICBJZiBubyBwcmVkLCBhc3N1bWVcbi8vICB0cnVlIHByZWQgYW5kIGluY2x1ZGUgaW4gc3VjY2VlZGVkIHNldC4gIFJldHVybnMgUGFpciBvZiBzZXRzLlxuLy9cbi8vICBDcmVhdGUgYSBuZXcgc2V0IHNvIGFzIG5vdCB0byBhbHRlciB0aGUgaW5jb21pbmcgcGFyYW1ldGVyLlxuLy9cbi8vICBBc3N1bXB0aW9uOiB0aGUgaW5wdXQgc3RyZWFtIGhhcyBiZWVuIHJlc3RvcmVkIHRvIHRoZSBzdGFydGluZyBwb2ludFxuLy8gIHByZWRpY3Rpb24sIHdoaWNoIGlzIHdoZXJlIHByZWRpY2F0ZXMgbmVlZCB0byBldmFsdWF0ZS5cbi8vXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLnNwbGl0QWNjb3JkaW5nVG9TZW1hbnRpY1ZhbGlkaXR5ID0gZnVuY3Rpb24oIGNvbmZpZ3MsIG91dGVyQ29udGV4dCkge1xuICAgIHZhciBzdWNjZWVkZWQgPSBuZXcgQVROQ29uZmlnU2V0KGNvbmZpZ3MuZnVsbEN0eCk7XG4gICAgdmFyIGZhaWxlZCA9IG5ldyBBVE5Db25maWdTZXQoY29uZmlncy5mdWxsQ3R4KTtcbiAgICBmb3IodmFyIGk9MDtpPGNvbmZpZ3MuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGMgPSBjb25maWdzLml0ZW1zW2ldO1xuICAgICAgICBpZiAoYy5zZW1hbnRpY0NvbnRleHQgIT09IFNlbWFudGljQ29udGV4dC5OT05FKSB7XG4gICAgICAgICAgICB2YXIgcHJlZGljYXRlRXZhbHVhdGlvblJlc3VsdCA9IGMuc2VtYW50aWNDb250ZXh0LmV2YWx1YXRlKHRoaXMucGFyc2VyLCBvdXRlckNvbnRleHQpO1xuICAgICAgICAgICAgaWYgKHByZWRpY2F0ZUV2YWx1YXRpb25SZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBzdWNjZWVkZWQuYWRkKGMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmYWlsZWQuYWRkKGMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3VjY2VlZGVkLmFkZChjKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gW3N1Y2NlZWRlZCwgZmFpbGVkXTtcbn07XG5cbi8vIExvb2sgdGhyb3VnaCBhIGxpc3Qgb2YgcHJlZGljYXRlL2FsdCBwYWlycywgcmV0dXJuaW5nIGFsdHMgZm9yIHRoZVxuLy8gIHBhaXJzIHRoYXQgd2luLiBBIHtAY29kZSBOT05FfSBwcmVkaWNhdGUgaW5kaWNhdGVzIGFuIGFsdCBjb250YWluaW5nIGFuXG4vLyAgdW5wcmVkaWNhdGVkIGNvbmZpZyB3aGljaCBiZWhhdmVzIGFzIFwiYWx3YXlzIHRydWUuXCIgSWYgIWNvbXBsZXRlXG4vLyAgdGhlbiB3ZSBzdG9wIGF0IHRoZSBmaXJzdCBwcmVkaWNhdGUgdGhhdCBldmFsdWF0ZXMgdG8gdHJ1ZS4gVGhpc1xuLy8gIGluY2x1ZGVzIHBhaXJzIHdpdGggbnVsbCBwcmVkaWNhdGVzLlxuLy9cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZXZhbFNlbWFudGljQ29udGV4dCA9IGZ1bmN0aW9uKHByZWRQcmVkaWN0aW9ucywgb3V0ZXJDb250ZXh0LCBjb21wbGV0ZSkge1xuICAgIHZhciBwcmVkaWN0aW9ucyA9IG5ldyBCaXRTZXQoKTtcbiAgICBmb3IodmFyIGk9MDtpPHByZWRQcmVkaWN0aW9ucy5sZW5ndGg7aSsrKSB7XG4gICAgXHR2YXIgcGFpciA9IHByZWRQcmVkaWN0aW9uc1tpXTtcbiAgICAgICAgaWYgKHBhaXIucHJlZCA9PT0gU2VtYW50aWNDb250ZXh0Lk5PTkUpIHtcbiAgICAgICAgICAgIHByZWRpY3Rpb25zLmFkZChwYWlyLmFsdCk7XG4gICAgICAgICAgICBpZiAoISBjb21wbGV0ZSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHByZWRpY2F0ZUV2YWx1YXRpb25SZXN1bHQgPSBwYWlyLnByZWQuZXZhbHVhdGUodGhpcy5wYXJzZXIsIG91dGVyQ29udGV4dCk7XG4gICAgICAgIGlmICh0aGlzLmRlYnVnIHx8IHRoaXMuZGZhX2RlYnVnKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcImV2YWwgcHJlZCBcIiArIHBhaXIgKyBcIj1cIiArIHByZWRpY2F0ZUV2YWx1YXRpb25SZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcmVkaWNhdGVFdmFsdWF0aW9uUmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kZWJ1ZyB8fCB0aGlzLmRmYV9kZWJ1Zykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiUFJFRElDVCBcIiArIHBhaXIuYWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByZWRpY3Rpb25zLmFkZChwYWlyLmFsdCk7XG4gICAgICAgICAgICBpZiAoISBjb21wbGV0ZSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcmVkaWN0aW9ucztcbn07XG5cbi8vIFRPRE86IElmIHdlIGFyZSBkb2luZyBwcmVkaWNhdGVzLCB0aGVyZSBpcyBubyBwb2ludCBpbiBwdXJzdWluZ1xuLy8gICAgIGNsb3N1cmUgb3BlcmF0aW9ucyBpZiB3ZSByZWFjaCBhIERGQSBzdGF0ZSB0aGF0IHVuaXF1ZWx5IHByZWRpY3RzXG4vLyAgICAgYWx0ZXJuYXRpdmUuIFdlIHdpbGwgbm90IGJlIGNhY2hpbmcgdGhhdCBERkEgc3RhdGUgYW5kIGl0IGlzIGFcbi8vICAgICB3YXN0ZSB0byBwdXJzdWUgdGhlIGNsb3N1cmUuIE1pZ2h0IGhhdmUgdG8gYWR2YW5jZSB3aGVuIHdlIGRvXG4vLyAgICAgYW1iaWcgZGV0ZWN0aW9uIHRob3VnaHQgOihcbi8vXG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuY2xvc3VyZSA9IGZ1bmN0aW9uKGNvbmZpZywgY29uZmlncywgY2xvc3VyZUJ1c3ksIGNvbGxlY3RQcmVkaWNhdGVzLCBmdWxsQ3R4LCB0cmVhdEVvZkFzRXBzaWxvbikge1xuICAgIHZhciBpbml0aWFsRGVwdGggPSAwO1xuICAgIHRoaXMuY2xvc3VyZUNoZWNraW5nU3RvcFN0YXRlKGNvbmZpZywgY29uZmlncywgY2xvc3VyZUJ1c3ksIGNvbGxlY3RQcmVkaWNhdGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsQ3R4LCBpbml0aWFsRGVwdGgsIHRyZWF0RW9mQXNFcHNpbG9uKTtcbn07XG5cblxuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5jbG9zdXJlQ2hlY2tpbmdTdG9wU3RhdGUgPSBmdW5jdGlvbihjb25maWcsIGNvbmZpZ3MsIGNsb3N1cmVCdXN5LCBjb2xsZWN0UHJlZGljYXRlcywgZnVsbEN0eCwgZGVwdGgsIHRyZWF0RW9mQXNFcHNpbG9uKSB7XG4gICAgaWYgKHRoaXMuZGVidWcgfHwgdGhpcy5kZWJ1Z19jbG9zdXJlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiY2xvc3VyZShcIiArIGNvbmZpZy50b1N0cmluZyh0aGlzLnBhcnNlcix0cnVlKSArIFwiKVwiKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJjb25maWdzKFwiICsgY29uZmlncy50b1N0cmluZygpICsgXCIpXCIpO1xuICAgICAgICBpZihjb25maWcucmVhY2hlc0ludG9PdXRlckNvbnRleHQ+NTApIHtcbiAgICAgICAgICAgIHRocm93IFwicHJvYmxlbVwiO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChjb25maWcuc3RhdGUgaW5zdGFuY2VvZiBSdWxlU3RvcFN0YXRlKSB7XG4gICAgICAgIC8vIFdlIGhpdCBydWxlIGVuZC4gSWYgd2UgaGF2ZSBjb250ZXh0IGluZm8sIHVzZSBpdFxuICAgICAgICAvLyBydW4gdGhydSBhbGwgcG9zc2libGUgc3RhY2sgdG9wcyBpbiBjdHhcbiAgICAgICAgaWYgKCEgY29uZmlnLmNvbnRleHQuaXNFbXB0eSgpKSB7XG4gICAgICAgICAgICBmb3IgKCB2YXIgaSA9MDsgaTxjb25maWcuY29udGV4dC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChjb25maWcuY29udGV4dC5nZXRSZXR1cm5TdGF0ZShpKSA9PT0gUHJlZGljdGlvbkNvbnRleHQuRU1QVFlfUkVUVVJOX1NUQVRFKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmdWxsQ3R4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maWdzLmFkZChuZXcgQVROQ29uZmlnKHtzdGF0ZTpjb25maWcuc3RhdGUsIGNvbnRleHQ6UHJlZGljdGlvbkNvbnRleHQuRU1QVFl9LCBjb25maWcpLCB0aGlzLm1lcmdlQ2FjaGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBoYXZlIG5vIGNvbnRleHQgaW5mbywganVzdCBjaGFzZSBmb2xsb3cgbGlua3MgKGlmIGdyZWVkeSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJGQUxMSU5HIG9mZiBydWxlIFwiICsgdGhpcy5nZXRSdWxlTmFtZShjb25maWcuc3RhdGUucnVsZUluZGV4KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3N1cmVfKGNvbmZpZywgY29uZmlncywgY2xvc3VyZUJ1c3ksIGNvbGxlY3RQcmVkaWNhdGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbEN0eCwgZGVwdGgsIHRyZWF0RW9mQXNFcHNpbG9uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIHJldHVyblN0YXRlID0gdGhpcy5hdG4uc3RhdGVzW2NvbmZpZy5jb250ZXh0LmdldFJldHVyblN0YXRlKGkpXTtcbiAgICAgICAgICAgICAgICB2YXIgbmV3Q29udGV4dCA9IGNvbmZpZy5jb250ZXh0LmdldFBhcmVudChpKTsgLy8gXCJwb3BcIiByZXR1cm4gc3RhdGVcbiAgICAgICAgICAgICAgICB2YXIgcGFybXMgPSB7c3RhdGU6cmV0dXJuU3RhdGUsIGFsdDpjb25maWcuYWx0LCBjb250ZXh0Om5ld0NvbnRleHQsIHNlbWFudGljQ29udGV4dDpjb25maWcuc2VtYW50aWNDb250ZXh0fTtcbiAgICAgICAgICAgICAgICB2YXIgYyA9IG5ldyBBVE5Db25maWcocGFybXMsIG51bGwpO1xuICAgICAgICAgICAgICAgIC8vIFdoaWxlIHdlIGhhdmUgY29udGV4dCB0byBwb3AgYmFjayBmcm9tLCB3ZSBtYXkgaGF2ZVxuICAgICAgICAgICAgICAgIC8vIGdvdHRlbiB0aGF0IGNvbnRleHQgQUZURVIgaGF2aW5nIGZhbGxpbmcgb2ZmIGEgcnVsZS5cbiAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgd2UgdHJhY2sgdGhhdCB3ZSBhcmUgbm93IG91dCBvZiBjb250ZXh0LlxuICAgICAgICAgICAgICAgIGMucmVhY2hlc0ludG9PdXRlckNvbnRleHQgPSBjb25maWcucmVhY2hlc0ludG9PdXRlckNvbnRleHQ7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zdXJlQ2hlY2tpbmdTdG9wU3RhdGUoYywgY29uZmlncywgY2xvc3VyZUJ1c3ksIGNvbGxlY3RQcmVkaWNhdGVzLCBmdWxsQ3R4LCBkZXB0aCAtIDEsIHRyZWF0RW9mQXNFcHNpbG9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIGlmKCBmdWxsQ3R4KSB7XG4gICAgICAgICAgICAvLyByZWFjaGVkIGVuZCBvZiBzdGFydCBydWxlXG4gICAgICAgICAgICBjb25maWdzLmFkZChjb25maWcsIHRoaXMubWVyZ2VDYWNoZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBlbHNlIGlmIHdlIGhhdmUgbm8gY29udGV4dCBpbmZvLCBqdXN0IGNoYXNlIGZvbGxvdyBsaW5rcyAoaWYgZ3JlZWR5KVxuICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkZBTExJTkcgb2ZmIHJ1bGUgXCIgKyB0aGlzLmdldFJ1bGVOYW1lKGNvbmZpZy5zdGF0ZS5ydWxlSW5kZXgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNsb3N1cmVfKGNvbmZpZywgY29uZmlncywgY2xvc3VyZUJ1c3ksIGNvbGxlY3RQcmVkaWNhdGVzLCBmdWxsQ3R4LCBkZXB0aCwgdHJlYXRFb2ZBc0Vwc2lsb24pO1xufTtcblxuXG4vLyBEbyB0aGUgYWN0dWFsIHdvcmsgb2Ygd2Fsa2luZyBlcHNpbG9uIGVkZ2VzLy9cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuY2xvc3VyZV8gPSBmdW5jdGlvbihjb25maWcsIGNvbmZpZ3MsIGNsb3N1cmVCdXN5LCBjb2xsZWN0UHJlZGljYXRlcywgZnVsbEN0eCwgZGVwdGgsIHRyZWF0RW9mQXNFcHNpbG9uKSB7XG4gICAgdmFyIHAgPSBjb25maWcuc3RhdGU7XG4gICAgLy8gb3B0aW1pemF0aW9uXG4gICAgaWYgKCEgcC5lcHNpbG9uT25seVRyYW5zaXRpb25zKSB7XG4gICAgICAgIGNvbmZpZ3MuYWRkKGNvbmZpZywgdGhpcy5tZXJnZUNhY2hlKTtcbiAgICAgICAgLy8gbWFrZSBzdXJlIHRvIG5vdCByZXR1cm4gaGVyZSwgYmVjYXVzZSBFT0YgdHJhbnNpdGlvbnMgY2FuIGFjdCBhc1xuICAgICAgICAvLyBib3RoIGVwc2lsb24gdHJhbnNpdGlvbnMgYW5kIG5vbi1lcHNpbG9uIHRyYW5zaXRpb25zLlxuICAgIH1cbiAgICBmb3IodmFyIGkgPSAwO2k8cC50cmFuc2l0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZihpPT0wICYmIHRoaXMuY2FuRHJvcExvb3BFbnRyeUVkZ2VJbkxlZnRSZWN1cnNpdmVSdWxlKGNvbmZpZykpXG4gICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICB2YXIgdCA9IHAudHJhbnNpdGlvbnNbaV07XG4gICAgICAgIHZhciBjb250aW51ZUNvbGxlY3RpbmcgPSBjb2xsZWN0UHJlZGljYXRlcyAmJiAhKHQgaW5zdGFuY2VvZiBBY3Rpb25UcmFuc2l0aW9uKTtcbiAgICAgICAgdmFyIGMgPSB0aGlzLmdldEVwc2lsb25UYXJnZXQoY29uZmlnLCB0LCBjb250aW51ZUNvbGxlY3RpbmcsIGRlcHRoID09PSAwLCBmdWxsQ3R4LCB0cmVhdEVvZkFzRXBzaWxvbik7XG4gICAgICAgIGlmIChjIT09bnVsbCkge1xuICAgICAgICAgICAgdmFyIG5ld0RlcHRoID0gZGVwdGg7XG4gICAgICAgICAgICBpZiAoIGNvbmZpZy5zdGF0ZSBpbnN0YW5jZW9mIFJ1bGVTdG9wU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAvLyB0YXJnZXQgZmVsbCBvZmYgZW5kIG9mIHJ1bGU7IG1hcmsgcmVzdWx0aW5nIGMgYXMgaGF2aW5nIGRpcHBlZCBpbnRvIG91dGVyIGNvbnRleHRcbiAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBnZXQgaGVyZSBpZiBpbmNvbWluZyBjb25maWcgd2FzIHJ1bGUgc3RvcCBhbmQgd2UgaGFkIGNvbnRleHRcbiAgICAgICAgICAgICAgICAvLyB0cmFjayBob3cgZmFyIHdlIGRpcCBpbnRvIG91dGVyIGNvbnRleHQuICBNaWdodFxuICAgICAgICAgICAgICAgIC8vIGNvbWUgaW4gaGFuZHkgYW5kIHdlIGF2b2lkIGV2YWx1YXRpbmcgY29udGV4dCBkZXBlbmRlbnRcbiAgICAgICAgICAgICAgICAvLyBwcmVkcyBpZiB0aGlzIGlzID4gMC5cblx0XHRcdFx0aWYgKHRoaXMuX2RmYSAhPT0gbnVsbCAmJiB0aGlzLl9kZmEucHJlY2VkZW5jZURmYSkge1xuXHRcdFx0XHRcdGlmICh0Lm91dGVybW9zdFByZWNlZGVuY2VSZXR1cm4gPT09IHRoaXMuX2RmYS5hdG5TdGFydFN0YXRlLnJ1bGVJbmRleCkge1xuXHRcdFx0XHRcdFx0Yy5wcmVjZWRlbmNlRmlsdGVyU3VwcHJlc3NlZCA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cbiAgICAgICAgICAgICAgICBjLnJlYWNoZXNJbnRvT3V0ZXJDb250ZXh0ICs9IDE7XG4gICAgICAgICAgICAgICAgaWYgKGNsb3N1cmVCdXN5LmFkZChjKSE9PWMpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gYXZvaWQgaW5maW5pdGUgcmVjdXJzaW9uIGZvciByaWdodC1yZWN1cnNpdmUgcnVsZXNcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbmZpZ3MuZGlwc0ludG9PdXRlckNvbnRleHQgPSB0cnVlOyAvLyBUT0RPOiBjYW4gcmVtb3ZlPyBvbmx5IGNhcmUgd2hlbiB3ZSBhZGQgdG8gc2V0IHBlciBtaWRkbGUgb2YgdGhpcyBtZXRob2RcbiAgICAgICAgICAgICAgICBuZXdEZXB0aCAtPSAxO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZGlwcyBpbnRvIG91dGVyIGN0eDogXCIgKyBjKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghdC5pc0Vwc2lsb24gJiYgY2xvc3VyZUJ1c3kuYWRkKGMpIT09Yyl7XG4gICAgICAgICAgICAgICAgICAgIC8vIGF2b2lkIGluZmluaXRlIHJlY3Vyc2lvbiBmb3IgRU9GKiBhbmQgRU9GK1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHQgaW5zdGFuY2VvZiBSdWxlVHJhbnNpdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAvLyBsYXRjaCB3aGVuIG5ld0RlcHRoIGdvZXMgbmVnYXRpdmUgLSBvbmNlIHdlIHN0ZXAgb3V0IG9mIHRoZSBlbnRyeSBjb250ZXh0IHdlIGNhbid0IHJldHVyblxuICAgICAgICAgICAgICAgICAgICBpZiAobmV3RGVwdGggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3RGVwdGggKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2xvc3VyZUNoZWNraW5nU3RvcFN0YXRlKGMsIGNvbmZpZ3MsIGNsb3N1cmVCdXN5LCBjb250aW51ZUNvbGxlY3RpbmcsIGZ1bGxDdHgsIG5ld0RlcHRoLCB0cmVhdEVvZkFzRXBzaWxvbik7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuY2FuRHJvcExvb3BFbnRyeUVkZ2VJbkxlZnRSZWN1cnNpdmVSdWxlID0gZnVuY3Rpb24oY29uZmlnKSB7XG4gICAgLy8gcmV0dXJuIEZhbHNlXG4gICAgdmFyIHAgPSBjb25maWcuc3RhdGU7XG4gICAgLy8gRmlyc3QgY2hlY2sgdG8gc2VlIGlmIHdlIGFyZSBpbiBTdGFyTG9vcEVudHJ5U3RhdGUgZ2VuZXJhdGVkIGR1cmluZ1xuICAgIC8vIGxlZnQtcmVjdXJzaW9uIGVsaW1pbmF0aW9uLiBGb3IgZWZmaWNpZW5jeSwgYWxzbyBjaGVjayBpZlxuICAgIC8vIHRoZSBjb250ZXh0IGhhcyBhbiBlbXB0eSBzdGFjayBjYXNlLiBJZiBzbywgaXQgd291bGQgbWVhblxuICAgIC8vIGdsb2JhbCBGT0xMT1cgc28gd2UgY2FuJ3QgcGVyZm9ybSBvcHRpbWl6YXRpb25cbiAgICAvLyBBcmUgd2UgdGhlIHNwZWNpYWwgbG9vcCBlbnRyeS9leGl0IHN0YXRlPyBvciBTTEwgd2lsZGNhcmRcbiAgICBpZihwLnN0YXRlVHlwZSAhPSBBVE5TdGF0ZS5TVEFSX0xPT1BfRU5UUlkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpZihwLnN0YXRlVHlwZSAhPSBBVE5TdGF0ZS5TVEFSX0xPT1BfRU5UUlkgfHwgIXAuaXNQcmVjZWRlbmNlRGVjaXNpb24gfHxcbiAgICAgICAgICAgY29uZmlnLmNvbnRleHQuaXNFbXB0eSgpIHx8IGNvbmZpZy5jb250ZXh0Lmhhc0VtcHR5UGF0aCgpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBSZXF1aXJlIGFsbCByZXR1cm4gc3RhdGVzIHRvIHJldHVybiBiYWNrIHRvIHRoZSBzYW1lIHJ1bGUgdGhhdCBwIGlzIGluLlxuICAgIHZhciBudW1DdHhzID0gY29uZmlnLmNvbnRleHQubGVuZ3RoO1xuICAgIGZvcih2YXIgaT0wOyBpPG51bUN0eHM7IGkrKykgeyAvLyBmb3IgZWFjaCBzdGFjayBjb250ZXh0XG4gICAgICAgIHZhciByZXR1cm5TdGF0ZSA9IHRoaXMuYXRuLnN0YXRlc1tjb25maWcuY29udGV4dC5nZXRSZXR1cm5TdGF0ZShpKV07XG4gICAgICAgIGlmIChyZXR1cm5TdGF0ZS5ydWxlSW5kZXggIT0gcC5ydWxlSW5kZXgpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIGRlY2lzaW9uU3RhcnRTdGF0ZSA9IHAudHJhbnNpdGlvbnNbMF0udGFyZ2V0O1xuICAgIHZhciBibG9ja0VuZFN0YXRlTnVtID0gZGVjaXNpb25TdGFydFN0YXRlLmVuZFN0YXRlLnN0YXRlTnVtYmVyO1xuICAgIHZhciBibG9ja0VuZFN0YXRlID0gdGhpcy5hdG4uc3RhdGVzW2Jsb2NrRW5kU3RhdGVOdW1dO1xuXG4gICAgLy8gVmVyaWZ5IHRoYXQgdGhlIHRvcCBvZiBlYWNoIHN0YWNrIGNvbnRleHQgbGVhZHMgdG8gbG9vcCBlbnRyeS9leGl0XG4gICAgLy8gc3RhdGUgdGhyb3VnaCBlcHNpbG9uIGVkZ2VzIGFuZCB3L28gbGVhdmluZyBydWxlLlxuICAgIGZvcih2YXIgaT0wOyBpPG51bUN0eHM7IGkrKykgeyAvLyBmb3IgZWFjaCBzdGFjayBjb250ZXh0XG4gICAgICAgIHZhciByZXR1cm5TdGF0ZU51bWJlciA9IGNvbmZpZy5jb250ZXh0LmdldFJldHVyblN0YXRlKGkpO1xuICAgICAgICB2YXIgcmV0dXJuU3RhdGUgPSB0aGlzLmF0bi5zdGF0ZXNbcmV0dXJuU3RhdGVOdW1iZXJdO1xuICAgICAgICAvLyBhbGwgc3RhdGVzIG11c3QgaGF2ZSBzaW5nbGUgb3V0Z29pbmcgZXBzaWxvbiBlZGdlXG4gICAgICAgIGlmIChyZXR1cm5TdGF0ZS50cmFuc2l0aW9ucy5sZW5ndGggIT0gMSB8fCAhcmV0dXJuU3RhdGUudHJhbnNpdGlvbnNbMF0uaXNFcHNpbG9uKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIC8vIExvb2sgZm9yIHByZWZpeCBvcCBjYXNlIGxpa2UgJ25vdCBleHByJywgKCcgdHlwZSAnKScgZXhwclxuICAgICAgICB2YXIgcmV0dXJuU3RhdGVUYXJnZXQgPSByZXR1cm5TdGF0ZS50cmFuc2l0aW9uc1swXS50YXJnZXQ7XG4gICAgICAgIGlmICggcmV0dXJuU3RhdGUuc3RhdGVUeXBlID09IEFUTlN0YXRlLkJMT0NLX0VORCAmJiByZXR1cm5TdGF0ZVRhcmdldCA9PSBwIClcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgIC8vIExvb2sgZm9yICdleHByIG9wIGV4cHInIG9yIGNhc2Ugd2hlcmUgZXhwcidzIHJldHVybiBzdGF0ZSBpcyBibG9jayBlbmRcbiAgICAgICAgLy8gb2YgKC4uLikqIGludGVybmFsIGJsb2NrOyB0aGUgYmxvY2sgZW5kIHBvaW50cyB0byBsb29wIGJhY2tcbiAgICAgICAgLy8gd2hpY2ggcG9pbnRzIHRvIHAgYnV0IHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgdGhhdFxuICAgICAgICBpZiAoIHJldHVyblN0YXRlID09IGJsb2NrRW5kU3RhdGUgKVxuICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgLy8gTG9vayBmb3IgdGVybmFyeSBleHByID8gZXhwciA6IGV4cHIuIFRoZSByZXR1cm4gc3RhdGUgcG9pbnRzIGF0IGJsb2NrIGVuZCxcbiAgICAgICAgLy8gd2hpY2ggcG9pbnRzIGF0IGxvb3AgZW50cnkgc3RhdGVcbiAgICAgICAgaWYgKCByZXR1cm5TdGF0ZVRhcmdldCA9PSBibG9ja0VuZFN0YXRlIClcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgIC8vIExvb2sgZm9yIGNvbXBsZXggcHJlZml4ICdiZXR3ZWVuIGV4cHIgYW5kIGV4cHInIGNhc2Ugd2hlcmUgMm5kIGV4cHInc1xuICAgICAgICAvLyByZXR1cm4gc3RhdGUgcG9pbnRzIGF0IGJsb2NrIGVuZCBzdGF0ZSBvZiAoLi4uKSogaW50ZXJuYWwgYmxvY2tcbiAgICAgICAgaWYgKHJldHVyblN0YXRlVGFyZ2V0LnN0YXRlVHlwZSA9PSBBVE5TdGF0ZS5CTE9DS19FTkQgJiYgcmV0dXJuU3RhdGVUYXJnZXQudHJhbnNpdGlvbnMubGVuZ3RoID09IDFcbiAgICAgICAgICAgICAgICAmJiByZXR1cm5TdGF0ZVRhcmdldC50cmFuc2l0aW9uc1swXS5pc0Vwc2lsb24gJiYgcmV0dXJuU3RhdGVUYXJnZXQudHJhbnNpdGlvbnNbMF0udGFyZ2V0ID09IHApXG4gICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAvLyBhbnl0aGluZyBlbHNlIGFpbid0IGNvbmZvcm1pbmdcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cblxuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5nZXRSdWxlTmFtZSA9IGZ1bmN0aW9uKCBpbmRleCkge1xuICAgIGlmICh0aGlzLnBhcnNlciE9PW51bGwgJiYgaW5kZXg+PTApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VyLnJ1bGVOYW1lc1tpbmRleF07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFwiPHJ1bGUgXCIgKyBpbmRleCArIFwiPlwiO1xuICAgIH1cbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0RXBzaWxvblRhcmdldCA9IGZ1bmN0aW9uKGNvbmZpZywgdCwgY29sbGVjdFByZWRpY2F0ZXMsIGluQ29udGV4dCwgZnVsbEN0eCwgdHJlYXRFb2ZBc0Vwc2lsb24pIHtcbiAgICBzd2l0Y2godC5zZXJpYWxpemF0aW9uVHlwZSkge1xuICAgIGNhc2UgVHJhbnNpdGlvbi5SVUxFOlxuICAgICAgICByZXR1cm4gdGhpcy5ydWxlVHJhbnNpdGlvbihjb25maWcsIHQpO1xuICAgIGNhc2UgVHJhbnNpdGlvbi5QUkVDRURFTkNFOlxuICAgICAgICByZXR1cm4gdGhpcy5wcmVjZWRlbmNlVHJhbnNpdGlvbihjb25maWcsIHQsIGNvbGxlY3RQcmVkaWNhdGVzLCBpbkNvbnRleHQsIGZ1bGxDdHgpO1xuICAgIGNhc2UgVHJhbnNpdGlvbi5QUkVESUNBVEU6XG4gICAgICAgIHJldHVybiB0aGlzLnByZWRUcmFuc2l0aW9uKGNvbmZpZywgdCwgY29sbGVjdFByZWRpY2F0ZXMsIGluQ29udGV4dCwgZnVsbEN0eCk7XG4gICAgY2FzZSBUcmFuc2l0aW9uLkFDVElPTjpcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aW9uVHJhbnNpdGlvbihjb25maWcsIHQpO1xuICAgIGNhc2UgVHJhbnNpdGlvbi5FUFNJTE9OOlxuICAgICAgICByZXR1cm4gbmV3IEFUTkNvbmZpZyh7c3RhdGU6dC50YXJnZXR9LCBjb25maWcpO1xuICAgIGNhc2UgVHJhbnNpdGlvbi5BVE9NOlxuICAgIGNhc2UgVHJhbnNpdGlvbi5SQU5HRTpcbiAgICBjYXNlIFRyYW5zaXRpb24uU0VUOlxuICAgICAgICAvLyBFT0YgdHJhbnNpdGlvbnMgYWN0IGxpa2UgZXBzaWxvbiB0cmFuc2l0aW9ucyBhZnRlciB0aGUgZmlyc3QgRU9GXG4gICAgICAgIC8vIHRyYW5zaXRpb24gaXMgdHJhdmVyc2VkXG4gICAgICAgIGlmICh0cmVhdEVvZkFzRXBzaWxvbikge1xuICAgICAgICAgICAgaWYgKHQubWF0Y2hlcyhUb2tlbi5FT0YsIDAsIDEpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBVE5Db25maWcoe3N0YXRlOiB0LnRhcmdldH0sIGNvbmZpZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgZGVmYXVsdDpcbiAgICBcdHJldHVybiBudWxsO1xuICAgIH1cbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuYWN0aW9uVHJhbnNpdGlvbiA9IGZ1bmN0aW9uKGNvbmZpZywgdCkge1xuICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgIHZhciBpbmRleCA9IHQuYWN0aW9uSW5kZXg9PS0xID8gNjU1MzUgOiB0LmFjdGlvbkluZGV4O1xuICAgICAgICBjb25zb2xlLmxvZyhcIkFDVElPTiBlZGdlIFwiICsgdC5ydWxlSW5kZXggKyBcIjpcIiArIGluZGV4KTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBBVE5Db25maWcoe3N0YXRlOnQudGFyZ2V0fSwgY29uZmlnKTtcbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUucHJlY2VkZW5jZVRyYW5zaXRpb24gPSBmdW5jdGlvbihjb25maWcsIHB0LCAgY29sbGVjdFByZWRpY2F0ZXMsIGluQ29udGV4dCwgZnVsbEN0eCkge1xuICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiUFJFRCAoY29sbGVjdFByZWRpY2F0ZXM9XCIgKyBjb2xsZWN0UHJlZGljYXRlcyArIFwiKSBcIiArXG4gICAgICAgICAgICAgICAgcHQucHJlY2VkZW5jZSArIFwiPj1fcCwgY3R4IGRlcGVuZGVudD10cnVlXCIpO1xuICAgICAgICBpZiAodGhpcy5wYXJzZXIhPT1udWxsKSB7XG4gICAgICAgIFx0Y29uc29sZS5sb2coXCJjb250ZXh0IHN1cnJvdW5kaW5nIHByZWQgaXMgXCIgKyBVdGlscy5hcnJheVRvU3RyaW5nKHRoaXMucGFyc2VyLmdldFJ1bGVJbnZvY2F0aW9uU3RhY2soKSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhciBjID0gbnVsbDtcbiAgICBpZiAoY29sbGVjdFByZWRpY2F0ZXMgJiYgaW5Db250ZXh0KSB7XG4gICAgICAgIGlmIChmdWxsQ3R4KSB7XG4gICAgICAgICAgICAvLyBJbiBmdWxsIGNvbnRleHQgbW9kZSwgd2UgY2FuIGV2YWx1YXRlIHByZWRpY2F0ZXMgb24tdGhlLWZseVxuICAgICAgICAgICAgLy8gZHVyaW5nIGNsb3N1cmUsIHdoaWNoIGRyYW1hdGljYWxseSByZWR1Y2VzIHRoZSBzaXplIG9mXG4gICAgICAgICAgICAvLyB0aGUgY29uZmlnIHNldHMuIEl0IGFsc28gb2J2aWF0ZXMgdGhlIG5lZWQgdG8gdGVzdCBwcmVkaWNhdGVzXG4gICAgICAgICAgICAvLyBsYXRlciBkdXJpbmcgY29uZmxpY3QgcmVzb2x1dGlvbi5cbiAgICAgICAgICAgIHZhciBjdXJyZW50UG9zaXRpb24gPSB0aGlzLl9pbnB1dC5pbmRleDtcbiAgICAgICAgICAgIHRoaXMuX2lucHV0LnNlZWsodGhpcy5fc3RhcnRJbmRleCk7XG4gICAgICAgICAgICB2YXIgcHJlZFN1Y2NlZWRzID0gcHQuZ2V0UHJlZGljYXRlKCkuZXZhbHVhdGUodGhpcy5wYXJzZXIsIHRoaXMuX291dGVyQ29udGV4dCk7XG4gICAgICAgICAgICB0aGlzLl9pbnB1dC5zZWVrKGN1cnJlbnRQb3NpdGlvbik7XG4gICAgICAgICAgICBpZiAocHJlZFN1Y2NlZWRzKSB7XG4gICAgICAgICAgICAgICAgYyA9IG5ldyBBVE5Db25maWcoe3N0YXRlOnB0LnRhcmdldH0sIGNvbmZpZyk7IC8vIG5vIHByZWQgY29udGV4dFxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIG5ld1NlbUN0eCA9IFNlbWFudGljQ29udGV4dC5hbmRDb250ZXh0KGNvbmZpZy5zZW1hbnRpY0NvbnRleHQsIHB0LmdldFByZWRpY2F0ZSgpKTtcbiAgICAgICAgICAgIGMgPSBuZXcgQVROQ29uZmlnKHtzdGF0ZTpwdC50YXJnZXQsIHNlbWFudGljQ29udGV4dDpuZXdTZW1DdHh9LCBjb25maWcpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYyA9IG5ldyBBVE5Db25maWcoe3N0YXRlOnB0LnRhcmdldH0sIGNvbmZpZyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiY29uZmlnIGZyb20gcHJlZCB0cmFuc2l0aW9uPVwiICsgYyk7XG4gICAgfVxuICAgIHJldHVybiBjO1xufTtcblxuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5wcmVkVHJhbnNpdGlvbiA9IGZ1bmN0aW9uKGNvbmZpZywgcHQsIGNvbGxlY3RQcmVkaWNhdGVzLCBpbkNvbnRleHQsIGZ1bGxDdHgpIHtcbiAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICBjb25zb2xlLmxvZyhcIlBSRUQgKGNvbGxlY3RQcmVkaWNhdGVzPVwiICsgY29sbGVjdFByZWRpY2F0ZXMgKyBcIikgXCIgKyBwdC5ydWxlSW5kZXggK1xuICAgICAgICAgICAgICAgIFwiOlwiICsgcHQucHJlZEluZGV4ICsgXCIsIGN0eCBkZXBlbmRlbnQ9XCIgKyBwdC5pc0N0eERlcGVuZGVudCk7XG4gICAgICAgIGlmICh0aGlzLnBhcnNlciE9PW51bGwpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiY29udGV4dCBzdXJyb3VuZGluZyBwcmVkIGlzIFwiICsgVXRpbHMuYXJyYXlUb1N0cmluZyh0aGlzLnBhcnNlci5nZXRSdWxlSW52b2NhdGlvblN0YWNrKCkpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgYyA9IG51bGw7XG4gICAgaWYgKGNvbGxlY3RQcmVkaWNhdGVzICYmICgocHQuaXNDdHhEZXBlbmRlbnQgJiYgaW5Db250ZXh0KSB8fCAhIHB0LmlzQ3R4RGVwZW5kZW50KSkge1xuICAgICAgICBpZiAoZnVsbEN0eCkge1xuICAgICAgICAgICAgLy8gSW4gZnVsbCBjb250ZXh0IG1vZGUsIHdlIGNhbiBldmFsdWF0ZSBwcmVkaWNhdGVzIG9uLXRoZS1mbHlcbiAgICAgICAgICAgIC8vIGR1cmluZyBjbG9zdXJlLCB3aGljaCBkcmFtYXRpY2FsbHkgcmVkdWNlcyB0aGUgc2l6ZSBvZlxuICAgICAgICAgICAgLy8gdGhlIGNvbmZpZyBzZXRzLiBJdCBhbHNvIG9idmlhdGVzIHRoZSBuZWVkIHRvIHRlc3QgcHJlZGljYXRlc1xuICAgICAgICAgICAgLy8gbGF0ZXIgZHVyaW5nIGNvbmZsaWN0IHJlc29sdXRpb24uXG4gICAgICAgICAgICB2YXIgY3VycmVudFBvc2l0aW9uID0gdGhpcy5faW5wdXQuaW5kZXg7XG4gICAgICAgICAgICB0aGlzLl9pbnB1dC5zZWVrKHRoaXMuX3N0YXJ0SW5kZXgpO1xuICAgICAgICAgICAgdmFyIHByZWRTdWNjZWVkcyA9IHB0LmdldFByZWRpY2F0ZSgpLmV2YWx1YXRlKHRoaXMucGFyc2VyLCB0aGlzLl9vdXRlckNvbnRleHQpO1xuICAgICAgICAgICAgdGhpcy5faW5wdXQuc2VlayhjdXJyZW50UG9zaXRpb24pO1xuICAgICAgICAgICAgaWYgKHByZWRTdWNjZWVkcykge1xuICAgICAgICAgICAgICAgIGMgPSBuZXcgQVROQ29uZmlnKHtzdGF0ZTpwdC50YXJnZXR9LCBjb25maWcpOyAvLyBubyBwcmVkIGNvbnRleHRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBuZXdTZW1DdHggPSBTZW1hbnRpY0NvbnRleHQuYW5kQ29udGV4dChjb25maWcuc2VtYW50aWNDb250ZXh0LCBwdC5nZXRQcmVkaWNhdGUoKSk7XG4gICAgICAgICAgICBjID0gbmV3IEFUTkNvbmZpZyh7c3RhdGU6cHQudGFyZ2V0LCBzZW1hbnRpY0NvbnRleHQ6bmV3U2VtQ3R4fSwgY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGMgPSBuZXcgQVROQ29uZmlnKHtzdGF0ZTpwdC50YXJnZXR9LCBjb25maWcpO1xuICAgIH1cbiAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICBjb25zb2xlLmxvZyhcImNvbmZpZyBmcm9tIHByZWQgdHJhbnNpdGlvbj1cIiArIGMpO1xuICAgIH1cbiAgICByZXR1cm4gYztcbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUucnVsZVRyYW5zaXRpb24gPSBmdW5jdGlvbihjb25maWcsIHQpIHtcbiAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICBjb25zb2xlLmxvZyhcIkNBTEwgcnVsZSBcIiArIHRoaXMuZ2V0UnVsZU5hbWUodC50YXJnZXQucnVsZUluZGV4KSArIFwiLCBjdHg9XCIgKyBjb25maWcuY29udGV4dCk7XG4gICAgfVxuICAgIHZhciByZXR1cm5TdGF0ZSA9IHQuZm9sbG93U3RhdGU7XG4gICAgdmFyIG5ld0NvbnRleHQgPSBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dC5jcmVhdGUoY29uZmlnLmNvbnRleHQsIHJldHVyblN0YXRlLnN0YXRlTnVtYmVyKTtcbiAgICByZXR1cm4gbmV3IEFUTkNvbmZpZyh7c3RhdGU6dC50YXJnZXQsIGNvbnRleHQ6bmV3Q29udGV4dH0sIGNvbmZpZyApO1xufTtcblxuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5nZXRDb25mbGljdGluZ0FsdHMgPSBmdW5jdGlvbihjb25maWdzKSB7XG4gICAgdmFyIGFsdHNldHMgPSBQcmVkaWN0aW9uTW9kZS5nZXRDb25mbGljdGluZ0FsdFN1YnNldHMoY29uZmlncyk7XG4gICAgcmV0dXJuIFByZWRpY3Rpb25Nb2RlLmdldEFsdHMoYWx0c2V0cyk7XG59O1xuXG4gLy8gU2FtIHBvaW50ZWQgb3V0IGEgcHJvYmxlbSB3aXRoIHRoZSBwcmV2aW91cyBkZWZpbml0aW9uLCB2Mywgb2ZcbiAvLyBhbWJpZ3VvdXMgc3RhdGVzLiBJZiB3ZSBoYXZlIGFub3RoZXIgc3RhdGUgYXNzb2NpYXRlZCB3aXRoIGNvbmZsaWN0aW5nXG4gLy8gYWx0ZXJuYXRpdmVzLCB3ZSBzaG91bGQga2VlcCBnb2luZy4gRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgZ3JhbW1hclxuIC8vXG4gLy8gcyA6IChJRCB8IElEIElEPykgJzsnIDtcbiAvL1xuIC8vIFdoZW4gdGhlIEFUTiBzaW11bGF0aW9uIHJlYWNoZXMgdGhlIHN0YXRlIGJlZm9yZSAnOycsIGl0IGhhcyBhIERGQVxuIC8vIHN0YXRlIHRoYXQgbG9va3MgbGlrZTogWzEyfDF8W10sIDZ8MnxbXSwgMTJ8MnxbXV0uIE5hdHVyYWxseVxuIC8vIDEyfDF8W10gYW5kIDEyfDJ8W10gY29uZmxpY3QsIGJ1dCB3ZSBjYW5ub3Qgc3RvcCBwcm9jZXNzaW5nIHRoaXMgbm9kZVxuIC8vIGJlY2F1c2UgYWx0ZXJuYXRpdmUgdG8gaGFzIGFub3RoZXIgd2F5IHRvIGNvbnRpbnVlLCB2aWEgWzZ8MnxbXV0uXG4gLy8gVGhlIGtleSBpcyB0aGF0IHdlIGhhdmUgYSBzaW5nbGUgc3RhdGUgdGhhdCBoYXMgY29uZmlnJ3Mgb25seSBhc3NvY2lhdGVkXG4gLy8gd2l0aCBhIHNpbmdsZSBhbHRlcm5hdGl2ZSwgMiwgYW5kIGNydWNpYWxseSB0aGUgc3RhdGUgdHJhbnNpdGlvbnNcbiAvLyBhbW9uZyB0aGUgY29uZmlndXJhdGlvbnMgYXJlIGFsbCBub24tZXBzaWxvbiB0cmFuc2l0aW9ucy4gVGhhdCBtZWFuc1xuIC8vIHdlIGRvbid0IGNvbnNpZGVyIGFueSBjb25mbGljdHMgdGhhdCBpbmNsdWRlIGFsdGVybmF0aXZlIDIuIFNvLCB3ZVxuIC8vIGlnbm9yZSB0aGUgY29uZmxpY3QgYmV0d2VlbiBhbHRzIDEgYW5kIDIuIFdlIGlnbm9yZSBhIHNldCBvZlxuIC8vIGNvbmZsaWN0aW5nIGFsdHMgd2hlbiB0aGVyZSBpcyBhbiBpbnRlcnNlY3Rpb24gd2l0aCBhbiBhbHRlcm5hdGl2ZVxuIC8vIGFzc29jaWF0ZWQgd2l0aCBhIHNpbmdsZSBhbHQgc3RhdGUgaW4gdGhlIHN0YXRlJnJhcnI7Y29uZmlnLWxpc3QgbWFwLlxuIC8vXG4gLy8gSXQncyBhbHNvIHRoZSBjYXNlIHRoYXQgd2UgbWlnaHQgaGF2ZSB0d28gY29uZmxpY3RpbmcgY29uZmlndXJhdGlvbnMgYnV0XG4gLy8gYWxzbyBhIDNyZCBub25jb25mbGljdGluZyBjb25maWd1cmF0aW9uIGZvciBhIGRpZmZlcmVudCBhbHRlcm5hdGl2ZTpcbiAvLyBbMXwxfFtdLCAxfDJ8W10sIDh8M3xbXV0uIFRoaXMgY2FuIGNvbWUgYWJvdXQgZnJvbSBncmFtbWFyOlxuIC8vXG4gLy8gYSA6IEEgfCBBIHwgQSBCIDtcbiAvL1xuIC8vIEFmdGVyIG1hdGNoaW5nIGlucHV0IEEsIHdlIHJlYWNoIHRoZSBzdG9wIHN0YXRlIGZvciBydWxlIEEsIHN0YXRlIDEuXG4gLy8gU3RhdGUgOCBpcyB0aGUgc3RhdGUgcmlnaHQgYmVmb3JlIEIuIENsZWFybHkgYWx0ZXJuYXRpdmVzIDEgYW5kIDJcbiAvLyBjb25mbGljdCBhbmQgbm8gYW1vdW50IG9mIGZ1cnRoZXIgbG9va2FoZWFkIHdpbGwgc2VwYXJhdGUgdGhlIHR3by5cbiAvLyBIb3dldmVyLCBhbHRlcm5hdGl2ZSAzIHdpbGwgYmUgYWJsZSB0byBjb250aW51ZSBhbmQgc28gd2UgZG8gbm90XG4gLy8gc3RvcCB3b3JraW5nIG9uIHRoaXMgc3RhdGUuIEluIHRoZSBwcmV2aW91cyBleGFtcGxlLCB3ZSdyZSBjb25jZXJuZWRcbiAvLyB3aXRoIHN0YXRlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbmZsaWN0aW5nIGFsdGVybmF0aXZlcy4gSGVyZSBhbHRcbiAvLyAzIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbmZsaWN0aW5nIGNvbmZpZ3MsIGJ1dCBzaW5jZSB3ZSBjYW4gY29udGludWVcbiAvLyBsb29raW5nIGZvciBpbnB1dCByZWFzb25hYmx5LCBJIGRvbid0IGRlY2xhcmUgdGhlIHN0YXRlIGRvbmUuIFdlXG4gLy8gaWdub3JlIGEgc2V0IG9mIGNvbmZsaWN0aW5nIGFsdHMgd2hlbiB3ZSBoYXZlIGFuIGFsdGVybmF0aXZlXG4gLy8gdGhhdCB3ZSBzdGlsbCBuZWVkIHRvIHB1cnN1ZS5cbi8vXG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0Q29uZmxpY3RpbmdBbHRzT3JVbmlxdWVBbHQgPSBmdW5jdGlvbihjb25maWdzKSB7XG4gICAgdmFyIGNvbmZsaWN0aW5nQWx0cyA9IG51bGw7XG4gICAgaWYgKGNvbmZpZ3MudW5pcXVlQWx0IT09IEFUTi5JTlZBTElEX0FMVF9OVU1CRVIpIHtcbiAgICAgICAgY29uZmxpY3RpbmdBbHRzID0gbmV3IEJpdFNldCgpO1xuICAgICAgICBjb25mbGljdGluZ0FsdHMuYWRkKGNvbmZpZ3MudW5pcXVlQWx0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25mbGljdGluZ0FsdHMgPSBjb25maWdzLmNvbmZsaWN0aW5nQWx0cztcbiAgICB9XG4gICAgcmV0dXJuIGNvbmZsaWN0aW5nQWx0cztcbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0VG9rZW5OYW1lID0gZnVuY3Rpb24oIHQpIHtcbiAgICBpZiAodD09PVRva2VuLkVPRikge1xuICAgICAgICByZXR1cm4gXCJFT0ZcIjtcbiAgICB9XG4gICAgaWYoIHRoaXMucGFyc2VyIT09bnVsbCAmJiB0aGlzLnBhcnNlci5saXRlcmFsTmFtZXMhPT1udWxsKSB7XG4gICAgICAgIGlmICh0ID49IHRoaXMucGFyc2VyLmxpdGVyYWxOYW1lcy5sZW5ndGggJiYgdCA+PSB0aGlzLnBhcnNlci5zeW1ib2xpY05hbWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJcIiArIHQgKyBcIiB0dHlwZSBvdXQgb2YgcmFuZ2U6IFwiICsgdGhpcy5wYXJzZXIubGl0ZXJhbE5hbWVzKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiXCIgKyB0aGlzLnBhcnNlci5nZXRJbnB1dFN0cmVhbSgpLmdldFRva2VucygpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBuYW1lID0gdGhpcy5wYXJzZXIubGl0ZXJhbE5hbWVzW3RdIHx8IHRoaXMucGFyc2VyLnN5bWJvbGljTmFtZXNbdF07XG4gICAgICAgICAgICByZXR1cm4gbmFtZSArIFwiPFwiICsgdCArIFwiPlwiO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBcIlwiICsgdDtcbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0TG9va2FoZWFkTmFtZSA9IGZ1bmN0aW9uKGlucHV0KSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW5OYW1lKGlucHV0LkxBKDEpKTtcbn07XG5cbi8vIFVzZWQgZm9yIGRlYnVnZ2luZyBpbiBhZGFwdGl2ZVByZWRpY3QgYXJvdW5kIGV4ZWNBVE4gYnV0IEkgY3V0XG4vLyAgaXQgb3V0IGZvciBjbGFyaXR5IG5vdyB0aGF0IGFsZy4gd29ya3Mgd2VsbC4gV2UgY2FuIGxlYXZlIHRoaXNcbi8vICBcImRlYWRcIiBjb2RlIGZvciBhIGJpdC5cbi8vXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmR1bXBEZWFkRW5kQ29uZmlncyA9IGZ1bmN0aW9uKG52YWUpIHtcbiAgICBjb25zb2xlLmxvZyhcImRlYWQgZW5kIGNvbmZpZ3M6IFwiKTtcbiAgICB2YXIgZGVjcyA9IG52YWUuZ2V0RGVhZEVuZENvbmZpZ3MoKTtcbiAgICBmb3IodmFyIGk9MDsgaTxkZWNzLmxlbmd0aDsgaSsrKSB7XG4gICAgXHR2YXIgYyA9IGRlY3NbaV07XG4gICAgICAgIHZhciB0cmFucyA9IFwibm8gZWRnZXNcIjtcbiAgICAgICAgaWYgKGMuc3RhdGUudHJhbnNpdGlvbnMubGVuZ3RoPjApIHtcbiAgICAgICAgICAgIHZhciB0ID0gYy5zdGF0ZS50cmFuc2l0aW9uc1swXTtcbiAgICAgICAgICAgIGlmICh0IGluc3RhbmNlb2YgQXRvbVRyYW5zaXRpb24pIHtcbiAgICAgICAgICAgICAgICB0cmFucyA9IFwiQXRvbSBcIisgdGhpcy5nZXRUb2tlbk5hbWUodC5sYWJlbCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHQgaW5zdGFuY2VvZiBTZXRUcmFuc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgdmFyIG5lZyA9ICh0IGluc3RhbmNlb2YgTm90U2V0VHJhbnNpdGlvbik7XG4gICAgICAgICAgICAgICAgdHJhbnMgPSAobmVnID8gXCJ+XCIgOiBcIlwiKSArIFwiU2V0IFwiICsgdC5zZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5lcnJvcihjLnRvU3RyaW5nKHRoaXMucGFyc2VyLCB0cnVlKSArIFwiOlwiICsgdHJhbnMpO1xuICAgIH1cbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUubm9WaWFibGVBbHQgPSBmdW5jdGlvbihpbnB1dCwgb3V0ZXJDb250ZXh0LCBjb25maWdzLCBzdGFydEluZGV4KSB7XG4gICAgcmV0dXJuIG5ldyBOb1ZpYWJsZUFsdEV4Y2VwdGlvbih0aGlzLnBhcnNlciwgaW5wdXQsIGlucHV0LmdldChzdGFydEluZGV4KSwgaW5wdXQuTFQoMSksIGNvbmZpZ3MsIG91dGVyQ29udGV4dCk7XG59O1xuXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmdldFVuaXF1ZUFsdCA9IGZ1bmN0aW9uKGNvbmZpZ3MpIHtcbiAgICB2YXIgYWx0ID0gQVROLklOVkFMSURfQUxUX05VTUJFUjtcbiAgICBmb3IodmFyIGk9MDtpPGNvbmZpZ3MuaXRlbXMubGVuZ3RoO2krKykge1xuICAgIFx0dmFyIGMgPSBjb25maWdzLml0ZW1zW2ldO1xuICAgICAgICBpZiAoYWx0ID09PSBBVE4uSU5WQUxJRF9BTFRfTlVNQkVSKSB7XG4gICAgICAgICAgICBhbHQgPSBjLmFsdCAvLyBmb3VuZCBmaXJzdCBhbHRcbiAgICAgICAgfSBlbHNlIGlmKCBjLmFsdCE9PWFsdCkge1xuICAgICAgICAgICAgcmV0dXJuIEFUTi5JTlZBTElEX0FMVF9OVU1CRVI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFsdDtcbn07XG5cbi8vXG4vLyBBZGQgYW4gZWRnZSB0byB0aGUgREZBLCBpZiBwb3NzaWJsZS4gVGhpcyBtZXRob2QgY2FsbHNcbi8vIHtAbGluayAvL2FkZERGQVN0YXRlfSB0byBlbnN1cmUgdGhlIHtAY29kZSB0b30gc3RhdGUgaXMgcHJlc2VudCBpbiB0aGVcbi8vIERGQS4gSWYge0Bjb2RlIGZyb219IGlzIHtAY29kZSBudWxsfSwgb3IgaWYge0Bjb2RlIHR9IGlzIG91dHNpZGUgdGhlXG4vLyByYW5nZSBvZiBlZGdlcyB0aGF0IGNhbiBiZSByZXByZXNlbnRlZCBpbiB0aGUgREZBIHRhYmxlcywgdGhpcyBtZXRob2Rcbi8vIHJldHVybnMgd2l0aG91dCBhZGRpbmcgdGhlIGVkZ2UgdG8gdGhlIERGQS5cbi8vXG4vLyA8cD5JZiB7QGNvZGUgdG99IGlzIHtAY29kZSBudWxsfSwgdGhpcyBtZXRob2QgcmV0dXJucyB7QGNvZGUgbnVsbH0uXG4vLyBPdGhlcndpc2UsIHRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHtAbGluayBERkFTdGF0ZX0gcmV0dXJuZWQgYnkgY2FsbGluZ1xuLy8ge0BsaW5rIC8vYWRkREZBU3RhdGV9IGZvciB0aGUge0Bjb2RlIHRvfSBzdGF0ZS48L3A+XG4vL1xuLy8gQHBhcmFtIGRmYSBUaGUgREZBXG4vLyBAcGFyYW0gZnJvbSBUaGUgc291cmNlIHN0YXRlIGZvciB0aGUgZWRnZVxuLy8gQHBhcmFtIHQgVGhlIGlucHV0IHN5bWJvbFxuLy8gQHBhcmFtIHRvIFRoZSB0YXJnZXQgc3RhdGUgZm9yIHRoZSBlZGdlXG4vL1xuLy8gQHJldHVybiBJZiB7QGNvZGUgdG99IGlzIHtAY29kZSBudWxsfSwgdGhpcyBtZXRob2QgcmV0dXJucyB7QGNvZGUgbnVsbH07XG4vLyBvdGhlcndpc2UgdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgcmVzdWx0IG9mIGNhbGxpbmcge0BsaW5rIC8vYWRkREZBU3RhdGV9XG4vLyBvbiB7QGNvZGUgdG99XG4vL1xuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5hZGRERkFFZGdlID0gZnVuY3Rpb24oZGZhLCBmcm9tXywgdCwgdG8pIHtcbiAgICBpZiggdGhpcy5kZWJ1Zykge1xuICAgICAgICBjb25zb2xlLmxvZyhcIkVER0UgXCIgKyBmcm9tXyArIFwiIC0+IFwiICsgdG8gKyBcIiB1cG9uIFwiICsgdGhpcy5nZXRUb2tlbk5hbWUodCkpO1xuICAgIH1cbiAgICBpZiAodG89PT1udWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB0byA9IHRoaXMuYWRkREZBU3RhdGUoZGZhLCB0byk7IC8vIHVzZWQgZXhpc3RpbmcgaWYgcG9zc2libGUgbm90IGluY29taW5nXG4gICAgaWYgKGZyb21fPT09bnVsbCB8fCB0IDwgLTEgfHwgdCA+IHRoaXMuYXRuLm1heFRva2VuVHlwZSkge1xuICAgICAgICByZXR1cm4gdG87XG4gICAgfVxuICAgIGlmIChmcm9tXy5lZGdlcz09PW51bGwpIHtcbiAgICAgICAgZnJvbV8uZWRnZXMgPSBbXTtcbiAgICB9XG4gICAgZnJvbV8uZWRnZXNbdCsxXSA9IHRvOyAvLyBjb25uZWN0XG5cbiAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICB2YXIgbGl0ZXJhbE5hbWVzID0gdGhpcy5wYXJzZXI9PT1udWxsID8gbnVsbCA6IHRoaXMucGFyc2VyLmxpdGVyYWxOYW1lcztcbiAgICAgICAgdmFyIHN5bWJvbGljTmFtZXMgPSB0aGlzLnBhcnNlcj09PW51bGwgPyBudWxsIDogdGhpcy5wYXJzZXIuc3ltYm9saWNOYW1lcztcbiAgICAgICAgY29uc29sZS5sb2coXCJERkE9XFxuXCIgKyBkZmEudG9TdHJpbmcobGl0ZXJhbE5hbWVzLCBzeW1ib2xpY05hbWVzKSk7XG4gICAgfVxuICAgIHJldHVybiB0bztcbn07XG4vL1xuLy8gQWRkIHN0YXRlIHtAY29kZSBEfSB0byB0aGUgREZBIGlmIGl0IGlzIG5vdCBhbHJlYWR5IHByZXNlbnQsIGFuZCByZXR1cm5cbi8vIHRoZSBhY3R1YWwgaW5zdGFuY2Ugc3RvcmVkIGluIHRoZSBERkEuIElmIGEgc3RhdGUgZXF1aXZhbGVudCB0byB7QGNvZGUgRH1cbi8vIGlzIGFscmVhZHkgaW4gdGhlIERGQSwgdGhlIGV4aXN0aW5nIHN0YXRlIGlzIHJldHVybmVkLiBPdGhlcndpc2UgdGhpc1xuLy8gbWV0aG9kIHJldHVybnMge0Bjb2RlIER9IGFmdGVyIGFkZGluZyBpdCB0byB0aGUgREZBLlxuLy9cbi8vIDxwPklmIHtAY29kZSBEfSBpcyB7QGxpbmsgLy9FUlJPUn0sIHRoaXMgbWV0aG9kIHJldHVybnMge0BsaW5rIC8vRVJST1J9IGFuZFxuLy8gZG9lcyBub3QgY2hhbmdlIHRoZSBERkEuPC9wPlxuLy9cbi8vIEBwYXJhbSBkZmEgVGhlIGRmYVxuLy8gQHBhcmFtIEQgVGhlIERGQSBzdGF0ZSB0byBhZGRcbi8vIEByZXR1cm4gVGhlIHN0YXRlIHN0b3JlZCBpbiB0aGUgREZBLiBUaGlzIHdpbGwgYmUgZWl0aGVyIHRoZSBleGlzdGluZ1xuLy8gc3RhdGUgaWYge0Bjb2RlIER9IGlzIGFscmVhZHkgaW4gdGhlIERGQSwgb3Ige0Bjb2RlIER9IGl0c2VsZiBpZiB0aGVcbi8vIHN0YXRlIHdhcyBub3QgYWxyZWFkeSBwcmVzZW50LlxuLy9cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuYWRkREZBU3RhdGUgPSBmdW5jdGlvbihkZmEsIEQpIHtcbiAgICBpZiAoRCA9PSBBVE5TaW11bGF0b3IuRVJST1IpIHtcbiAgICAgICAgcmV0dXJuIEQ7XG4gICAgfVxuICAgIHZhciBleGlzdGluZyA9IGRmYS5zdGF0ZXMuZ2V0KEQpO1xuICAgIGlmKGV4aXN0aW5nIT09bnVsbCkge1xuICAgICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfVxuICAgIEQuc3RhdGVOdW1iZXIgPSBkZmEuc3RhdGVzLmxlbmd0aDtcbiAgICBpZiAoISBELmNvbmZpZ3MucmVhZE9ubHkpIHtcbiAgICAgICAgRC5jb25maWdzLm9wdGltaXplQ29uZmlncyh0aGlzKTtcbiAgICAgICAgRC5jb25maWdzLnNldFJlYWRvbmx5KHRydWUpO1xuICAgIH1cbiAgICBkZmEuc3RhdGVzLmFkZChEKTtcbiAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICBjb25zb2xlLmxvZyhcImFkZGluZyBuZXcgREZBIHN0YXRlOiBcIiArIEQpO1xuICAgIH1cbiAgICByZXR1cm4gRDtcbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUucmVwb3J0QXR0ZW1wdGluZ0Z1bGxDb250ZXh0ID0gZnVuY3Rpb24oZGZhLCBjb25mbGljdGluZ0FsdHMsIGNvbmZpZ3MsIHN0YXJ0SW5kZXgsIHN0b3BJbmRleCkge1xuICAgIGlmICh0aGlzLmRlYnVnIHx8IHRoaXMucmV0cnlfZGVidWcpIHtcbiAgICAgICAgdmFyIGludGVydmFsID0gbmV3IEludGVydmFsKHN0YXJ0SW5kZXgsIHN0b3BJbmRleCArIDEpO1xuICAgICAgICBjb25zb2xlLmxvZyhcInJlcG9ydEF0dGVtcHRpbmdGdWxsQ29udGV4dCBkZWNpc2lvbj1cIiArIGRmYS5kZWNpc2lvbiArIFwiOlwiICsgY29uZmlncyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBcIiwgaW5wdXQ9XCIgKyB0aGlzLnBhcnNlci5nZXRUb2tlblN0cmVhbSgpLmdldFRleHQoaW50ZXJ2YWwpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucGFyc2VyIT09bnVsbCkge1xuICAgICAgICB0aGlzLnBhcnNlci5nZXRFcnJvckxpc3RlbmVyRGlzcGF0Y2goKS5yZXBvcnRBdHRlbXB0aW5nRnVsbENvbnRleHQodGhpcy5wYXJzZXIsIGRmYSwgc3RhcnRJbmRleCwgc3RvcEluZGV4LCBjb25mbGljdGluZ0FsdHMsIGNvbmZpZ3MpO1xuICAgIH1cbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUucmVwb3J0Q29udGV4dFNlbnNpdGl2aXR5ID0gZnVuY3Rpb24oZGZhLCBwcmVkaWN0aW9uLCBjb25maWdzLCBzdGFydEluZGV4LCBzdG9wSW5kZXgpIHtcbiAgICBpZiAodGhpcy5kZWJ1ZyB8fCB0aGlzLnJldHJ5X2RlYnVnKSB7XG4gICAgICAgIHZhciBpbnRlcnZhbCA9IG5ldyBJbnRlcnZhbChzdGFydEluZGV4LCBzdG9wSW5kZXggKyAxKTtcbiAgICAgICAgY29uc29sZS5sb2coXCJyZXBvcnRDb250ZXh0U2Vuc2l0aXZpdHkgZGVjaXNpb249XCIgKyBkZmEuZGVjaXNpb24gKyBcIjpcIiArIGNvbmZpZ3MgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIsIGlucHV0PVwiICsgdGhpcy5wYXJzZXIuZ2V0VG9rZW5TdHJlYW0oKS5nZXRUZXh0KGludGVydmFsKSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnBhcnNlciE9PW51bGwpIHtcbiAgICAgICAgdGhpcy5wYXJzZXIuZ2V0RXJyb3JMaXN0ZW5lckRpc3BhdGNoKCkucmVwb3J0Q29udGV4dFNlbnNpdGl2aXR5KHRoaXMucGFyc2VyLCBkZmEsIHN0YXJ0SW5kZXgsIHN0b3BJbmRleCwgcHJlZGljdGlvbiwgY29uZmlncyk7XG4gICAgfVxufTtcblxuLy8gSWYgY29udGV4dCBzZW5zaXRpdmUgcGFyc2luZywgd2Uga25vdyBpdCdzIGFtYmlndWl0eSBub3QgY29uZmxpY3QvL1xuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5yZXBvcnRBbWJpZ3VpdHkgPSBmdW5jdGlvbihkZmEsIEQsIHN0YXJ0SW5kZXgsIHN0b3BJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGFjdCwgYW1iaWdBbHRzLCBjb25maWdzICkge1xuICAgIGlmICh0aGlzLmRlYnVnIHx8IHRoaXMucmV0cnlfZGVidWcpIHtcbiAgICAgICAgdmFyIGludGVydmFsID0gbmV3IEludGVydmFsKHN0YXJ0SW5kZXgsIHN0b3BJbmRleCArIDEpO1xuICAgICAgICBjb25zb2xlLmxvZyhcInJlcG9ydEFtYmlndWl0eSBcIiArIGFtYmlnQWx0cyArIFwiOlwiICsgY29uZmlncyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBcIiwgaW5wdXQ9XCIgKyB0aGlzLnBhcnNlci5nZXRUb2tlblN0cmVhbSgpLmdldFRleHQoaW50ZXJ2YWwpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucGFyc2VyIT09bnVsbCkge1xuICAgICAgICB0aGlzLnBhcnNlci5nZXRFcnJvckxpc3RlbmVyRGlzcGF0Y2goKS5yZXBvcnRBbWJpZ3VpdHkodGhpcy5wYXJzZXIsIGRmYSwgc3RhcnRJbmRleCwgc3RvcEluZGV4LCBleGFjdCwgYW1iaWdBbHRzLCBjb25maWdzKTtcbiAgICB9XG59O1xuXG5leHBvcnRzLlBhcnNlckFUTlNpbXVsYXRvciA9IFBhcnNlckFUTlNpbXVsYXRvcjsiLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy9cbi8vXG4vLyBUaGlzIGVudW1lcmF0aW9uIGRlZmluZXMgdGhlIHByZWRpY3Rpb24gbW9kZXMgYXZhaWxhYmxlIGluIEFOVExSIDQgYWxvbmcgd2l0aFxuLy8gdXRpbGl0eSBtZXRob2RzIGZvciBhbmFseXppbmcgY29uZmlndXJhdGlvbiBzZXRzIGZvciBjb25mbGljdHMgYW5kL29yXG4vLyBhbWJpZ3VpdGllcy5cblxudmFyIFNldCA9IHJlcXVpcmUoJy4vLi4vVXRpbHMnKS5TZXQ7XG52YXIgTWFwID0gcmVxdWlyZSgnLi8uLi9VdGlscycpLk1hcDtcbnZhciBCaXRTZXQgPSByZXF1aXJlKCcuLy4uL1V0aWxzJykuQml0U2V0O1xudmFyIEFsdERpY3QgPSByZXF1aXJlKCcuLy4uL1V0aWxzJykuQWx0RGljdDtcbnZhciBBVE4gPSByZXF1aXJlKCcuL0FUTicpLkFUTjtcbnZhciBSdWxlU3RvcFN0YXRlID0gcmVxdWlyZSgnLi9BVE5TdGF0ZScpLlJ1bGVTdG9wU3RhdGU7XG52YXIgQVROQ29uZmlnU2V0ID0gcmVxdWlyZSgnLi9BVE5Db25maWdTZXQnKS5BVE5Db25maWdTZXQ7XG52YXIgQVROQ29uZmlnID0gcmVxdWlyZSgnLi9BVE5Db25maWcnKS5BVE5Db25maWc7XG52YXIgU2VtYW50aWNDb250ZXh0ID0gcmVxdWlyZSgnLi9TZW1hbnRpY0NvbnRleHQnKS5TZW1hbnRpY0NvbnRleHQ7XG52YXIgSGFzaCA9IHJlcXVpcmUoXCIuLi9VdGlsc1wiKS5IYXNoO1xudmFyIGhhc2hTdHVmZiA9IHJlcXVpcmUoJy4vLi4vVXRpbHMnKS5oYXNoU3R1ZmY7XG52YXIgZXF1YWxBcnJheXMgPSByZXF1aXJlKCcuLy4uL1V0aWxzJykuZXF1YWxBcnJheXM7XG5cbmZ1bmN0aW9uIFByZWRpY3Rpb25Nb2RlKCkge1xuXHRyZXR1cm4gdGhpcztcbn1cblxuLy9cbi8vIFRoZSBTTEwoKikgcHJlZGljdGlvbiBtb2RlLiBUaGlzIHByZWRpY3Rpb24gbW9kZSBpZ25vcmVzIHRoZSBjdXJyZW50XG4vLyBwYXJzZXIgY29udGV4dCB3aGVuIG1ha2luZyBwcmVkaWN0aW9ucy4gVGhpcyBpcyB0aGUgZmFzdGVzdCBwcmVkaWN0aW9uXG4vLyBtb2RlLCBhbmQgcHJvdmlkZXMgY29ycmVjdCByZXN1bHRzIGZvciBtYW55IGdyYW1tYXJzLiBUaGlzIHByZWRpY3Rpb25cbi8vIG1vZGUgaXMgbW9yZSBwb3dlcmZ1bCB0aGFuIHRoZSBwcmVkaWN0aW9uIG1vZGUgcHJvdmlkZWQgYnkgQU5UTFIgMywgYnV0XG4vLyBtYXkgcmVzdWx0IGluIHN5bnRheCBlcnJvcnMgZm9yIGdyYW1tYXIgYW5kIGlucHV0IGNvbWJpbmF0aW9ucyB3aGljaCBhcmVcbi8vIG5vdCBTTEwuXG4vL1xuLy8gPHA+XG4vLyBXaGVuIHVzaW5nIHRoaXMgcHJlZGljdGlvbiBtb2RlLCB0aGUgcGFyc2VyIHdpbGwgZWl0aGVyIHJldHVybiBhIGNvcnJlY3Rcbi8vIHBhcnNlIHRyZWUgKGkuZS4gdGhlIHNhbWUgcGFyc2UgdHJlZSB0aGF0IHdvdWxkIGJlIHJldHVybmVkIHdpdGggdGhlXG4vLyB7QGxpbmsgLy9MTH0gcHJlZGljdGlvbiBtb2RlKSwgb3IgaXQgd2lsbCByZXBvcnQgYSBzeW50YXggZXJyb3IuIElmIGFcbi8vIHN5bnRheCBlcnJvciBpcyBlbmNvdW50ZXJlZCB3aGVuIHVzaW5nIHRoZSB7QGxpbmsgLy9TTEx9IHByZWRpY3Rpb24gbW9kZSxcbi8vIGl0IG1heSBiZSBkdWUgdG8gZWl0aGVyIGFuIGFjdHVhbCBzeW50YXggZXJyb3IgaW4gdGhlIGlucHV0IG9yIGluZGljYXRlXG4vLyB0aGF0IHRoZSBwYXJ0aWN1bGFyIGNvbWJpbmF0aW9uIG9mIGdyYW1tYXIgYW5kIGlucHV0IHJlcXVpcmVzIHRoZSBtb3JlXG4vLyBwb3dlcmZ1bCB7QGxpbmsgLy9MTH0gcHJlZGljdGlvbiBhYmlsaXRpZXMgdG8gY29tcGxldGUgc3VjY2Vzc2Z1bGx5LjwvcD5cbi8vXG4vLyA8cD5cbi8vIFRoaXMgcHJlZGljdGlvbiBtb2RlIGRvZXMgbm90IHByb3ZpZGUgYW55IGd1YXJhbnRlZXMgZm9yIHByZWRpY3Rpb25cbi8vIGJlaGF2aW9yIGZvciBzeW50YWN0aWNhbGx5LWluY29ycmVjdCBpbnB1dHMuPC9wPlxuLy9cblByZWRpY3Rpb25Nb2RlLlNMTCA9IDA7XG4vL1xuLy8gVGhlIExMKCopIHByZWRpY3Rpb24gbW9kZS4gVGhpcyBwcmVkaWN0aW9uIG1vZGUgYWxsb3dzIHRoZSBjdXJyZW50IHBhcnNlclxuLy8gY29udGV4dCB0byBiZSB1c2VkIGZvciByZXNvbHZpbmcgU0xMIGNvbmZsaWN0cyB0aGF0IG9jY3VyIGR1cmluZ1xuLy8gcHJlZGljdGlvbi4gVGhpcyBpcyB0aGUgZmFzdGVzdCBwcmVkaWN0aW9uIG1vZGUgdGhhdCBndWFyYW50ZWVzIGNvcnJlY3Rcbi8vIHBhcnNlIHJlc3VsdHMgZm9yIGFsbCBjb21iaW5hdGlvbnMgb2YgZ3JhbW1hcnMgd2l0aCBzeW50YWN0aWNhbGx5IGNvcnJlY3Rcbi8vIGlucHV0cy5cbi8vXG4vLyA8cD5cbi8vIFdoZW4gdXNpbmcgdGhpcyBwcmVkaWN0aW9uIG1vZGUsIHRoZSBwYXJzZXIgd2lsbCBtYWtlIGNvcnJlY3QgZGVjaXNpb25zXG4vLyBmb3IgYWxsIHN5bnRhY3RpY2FsbHktY29ycmVjdCBncmFtbWFyIGFuZCBpbnB1dCBjb21iaW5hdGlvbnMuIEhvd2V2ZXIsIGluXG4vLyBjYXNlcyB3aGVyZSB0aGUgZ3JhbW1hciBpcyB0cnVseSBhbWJpZ3VvdXMgdGhpcyBwcmVkaWN0aW9uIG1vZGUgbWlnaHQgbm90XG4vLyByZXBvcnQgYSBwcmVjaXNlIGFuc3dlciBmb3IgPGVtPmV4YWN0bHkgd2hpY2g8L2VtPiBhbHRlcm5hdGl2ZXMgYXJlXG4vLyBhbWJpZ3VvdXMuPC9wPlxuLy9cbi8vIDxwPlxuLy8gVGhpcyBwcmVkaWN0aW9uIG1vZGUgZG9lcyBub3QgcHJvdmlkZSBhbnkgZ3VhcmFudGVlcyBmb3IgcHJlZGljdGlvblxuLy8gYmVoYXZpb3IgZm9yIHN5bnRhY3RpY2FsbHktaW5jb3JyZWN0IGlucHV0cy48L3A+XG4vL1xuUHJlZGljdGlvbk1vZGUuTEwgPSAxO1xuLy9cbi8vIFRoZSBMTCgqKSBwcmVkaWN0aW9uIG1vZGUgd2l0aCBleGFjdCBhbWJpZ3VpdHkgZGV0ZWN0aW9uLiBJbiBhZGRpdGlvbiB0b1xuLy8gdGhlIGNvcnJlY3RuZXNzIGd1YXJhbnRlZXMgcHJvdmlkZWQgYnkgdGhlIHtAbGluayAvL0xMfSBwcmVkaWN0aW9uIG1vZGUsXG4vLyB0aGlzIHByZWRpY3Rpb24gbW9kZSBpbnN0cnVjdHMgdGhlIHByZWRpY3Rpb24gYWxnb3JpdGhtIHRvIGRldGVybWluZSB0aGVcbi8vIGNvbXBsZXRlIGFuZCBleGFjdCBzZXQgb2YgYW1iaWd1b3VzIGFsdGVybmF0aXZlcyBmb3IgZXZlcnkgYW1iaWd1b3VzXG4vLyBkZWNpc2lvbiBlbmNvdW50ZXJlZCB3aGlsZSBwYXJzaW5nLlxuLy9cbi8vIDxwPlxuLy8gVGhpcyBwcmVkaWN0aW9uIG1vZGUgbWF5IGJlIHVzZWQgZm9yIGRpYWdub3NpbmcgYW1iaWd1aXRpZXMgZHVyaW5nXG4vLyBncmFtbWFyIGRldmVsb3BtZW50LiBEdWUgdG8gdGhlIHBlcmZvcm1hbmNlIG92ZXJoZWFkIG9mIGNhbGN1bGF0aW5nIHNldHNcbi8vIG9mIGFtYmlndW91cyBhbHRlcm5hdGl2ZXMsIHRoaXMgcHJlZGljdGlvbiBtb2RlIHNob3VsZCBiZSBhdm9pZGVkIHdoZW5cbi8vIHRoZSBleGFjdCByZXN1bHRzIGFyZSBub3QgbmVjZXNzYXJ5LjwvcD5cbi8vXG4vLyA8cD5cbi8vIFRoaXMgcHJlZGljdGlvbiBtb2RlIGRvZXMgbm90IHByb3ZpZGUgYW55IGd1YXJhbnRlZXMgZm9yIHByZWRpY3Rpb25cbi8vIGJlaGF2aW9yIGZvciBzeW50YWN0aWNhbGx5LWluY29ycmVjdCBpbnB1dHMuPC9wPlxuLy9cblByZWRpY3Rpb25Nb2RlLkxMX0VYQUNUX0FNQklHX0RFVEVDVElPTiA9IDI7XG5cblxuLy9cbi8vIENvbXB1dGVzIHRoZSBTTEwgcHJlZGljdGlvbiB0ZXJtaW5hdGlvbiBjb25kaXRpb24uXG4vL1xuLy8gPHA+XG4vLyBUaGlzIG1ldGhvZCBjb21wdXRlcyB0aGUgU0xMIHByZWRpY3Rpb24gdGVybWluYXRpb24gY29uZGl0aW9uIGZvciBib3RoIG9mXG4vLyB0aGUgZm9sbG93aW5nIGNhc2VzLjwvcD5cbi8vXG4vLyA8dWw+XG4vLyA8bGk+VGhlIHVzdWFsIFNMTCtMTCBmYWxsYmFjayB1cG9uIFNMTCBjb25mbGljdDwvbGk+XG4vLyA8bGk+UHVyZSBTTEwgd2l0aG91dCBMTCBmYWxsYmFjazwvbGk+XG4vLyA8L3VsPlxuLy9cbi8vIDxwPjxzdHJvbmc+Q09NQklORUQgU0xMK0xMIFBBUlNJTkc8L3N0cm9uZz48L3A+XG4vL1xuLy8gPHA+V2hlbiBMTC1mYWxsYmFjayBpcyBlbmFibGVkIHVwb24gU0xMIGNvbmZsaWN0LCBjb3JyZWN0IHByZWRpY3Rpb25zIGFyZVxuLy8gZW5zdXJlZCByZWdhcmRsZXNzIG9mIGhvdyB0aGUgdGVybWluYXRpb24gY29uZGl0aW9uIGlzIGNvbXB1dGVkIGJ5IHRoaXNcbi8vIG1ldGhvZC4gRHVlIHRvIHRoZSBzdWJzdGFudGlhbGx5IGhpZ2hlciBjb3N0IG9mIExMIHByZWRpY3Rpb24sIHRoZVxuLy8gcHJlZGljdGlvbiBzaG91bGQgb25seSBmYWxsIGJhY2sgdG8gTEwgd2hlbiB0aGUgYWRkaXRpb25hbCBsb29rYWhlYWRcbi8vIGNhbm5vdCBsZWFkIHRvIGEgdW5pcXVlIFNMTCBwcmVkaWN0aW9uLjwvcD5cbi8vXG4vLyA8cD5Bc3N1bWluZyBjb21iaW5lZCBTTEwrTEwgcGFyc2luZywgYW4gU0xMIGNvbmZpZ3VyYXRpb24gc2V0IHdpdGggb25seVxuLy8gY29uZmxpY3Rpbmcgc3Vic2V0cyBzaG91bGQgZmFsbCBiYWNrIHRvIGZ1bGwgTEwsIGV2ZW4gaWYgdGhlXG4vLyBjb25maWd1cmF0aW9uIHNldHMgZG9uJ3QgcmVzb2x2ZSB0byB0aGUgc2FtZSBhbHRlcm5hdGl2ZSAoZS5nLlxuLy8ge0Bjb2RlIHsxLDJ9fSBhbmQge0Bjb2RlIHszLDR9fS4gSWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIG5vbi1jb25mbGljdGluZ1xuLy8gY29uZmlndXJhdGlvbiwgU0xMIGNvdWxkIGNvbnRpbnVlIHdpdGggdGhlIGhvcGVzIHRoYXQgbW9yZSBsb29rYWhlYWQgd2lsbFxuLy8gcmVzb2x2ZSB2aWEgb25lIG9mIHRob3NlIG5vbi1jb25mbGljdGluZyBjb25maWd1cmF0aW9ucy48L3A+XG4vL1xuLy8gPHA+SGVyZSdzIHRoZSBwcmVkaWN0aW9uIHRlcm1pbmF0aW9uIHJ1bGUgdGhlbTogU0xMIChmb3IgU0xMK0xMIHBhcnNpbmcpXG4vLyBzdG9wcyB3aGVuIGl0IHNlZXMgb25seSBjb25mbGljdGluZyBjb25maWd1cmF0aW9uIHN1YnNldHMuIEluIGNvbnRyYXN0LFxuLy8gZnVsbCBMTCBrZWVwcyBnb2luZyB3aGVuIHRoZXJlIGlzIHVuY2VydGFpbnR5LjwvcD5cbi8vXG4vLyA8cD48c3Ryb25nPkhFVVJJU1RJQzwvc3Ryb25nPjwvcD5cbi8vXG4vLyA8cD5BcyBhIGhldXJpc3RpYywgd2Ugc3RvcCBwcmVkaWN0aW9uIHdoZW4gd2Ugc2VlIGFueSBjb25mbGljdGluZyBzdWJzZXRcbi8vIHVubGVzcyB3ZSBzZWUgYSBzdGF0ZSB0aGF0IG9ubHkgaGFzIG9uZSBhbHRlcm5hdGl2ZSBhc3NvY2lhdGVkIHdpdGggaXQuXG4vLyBUaGUgc2luZ2xlLWFsdC1zdGF0ZSB0aGluZyBsZXRzIHByZWRpY3Rpb24gY29udGludWUgdXBvbiBydWxlcyBsaWtlXG4vLyAob3RoZXJ3aXNlLCBpdCB3b3VsZCBhZG1pdCBkZWZlYXQgdG9vIHNvb24pOjwvcD5cbi8vXG4vLyA8cD57QGNvZGUgWzEyfDF8W10sIDZ8MnxbXSwgMTJ8MnxbXV0uIHMgOiAoSUQgfCBJRCBJRD8pICc7JyA7fTwvcD5cbi8vXG4vLyA8cD5XaGVuIHRoZSBBVE4gc2ltdWxhdGlvbiByZWFjaGVzIHRoZSBzdGF0ZSBiZWZvcmUge0Bjb2RlICc7J30sIGl0IGhhcyBhXG4vLyBERkEgc3RhdGUgdGhhdCBsb29rcyBsaWtlOiB7QGNvZGUgWzEyfDF8W10sIDZ8MnxbXSwgMTJ8MnxbXV19LiBOYXR1cmFsbHlcbi8vIHtAY29kZSAxMnwxfFtdfSBhbmQge0Bjb2RlIDEyfDJ8W119IGNvbmZsaWN0LCBidXQgd2UgY2Fubm90IHN0b3Bcbi8vIHByb2Nlc3NpbmcgdGhpcyBub2RlIGJlY2F1c2UgYWx0ZXJuYXRpdmUgdG8gaGFzIGFub3RoZXIgd2F5IHRvIGNvbnRpbnVlLFxuLy8gdmlhIHtAY29kZSBbNnwyfFtdXX0uPC9wPlxuLy9cbi8vIDxwPkl0IGFsc28gbGV0J3MgdXMgY29udGludWUgZm9yIHRoaXMgcnVsZTo8L3A+XG4vL1xuLy8gPHA+e0Bjb2RlIFsxfDF8W10sIDF8MnxbXSwgOHwzfFtdXSBhIDogQSB8IEEgfCBBIEIgO308L3A+XG4vL1xuLy8gPHA+QWZ0ZXIgbWF0Y2hpbmcgaW5wdXQgQSwgd2UgcmVhY2ggdGhlIHN0b3Agc3RhdGUgZm9yIHJ1bGUgQSwgc3RhdGUgMS5cbi8vIFN0YXRlIDggaXMgdGhlIHN0YXRlIHJpZ2h0IGJlZm9yZSBCLiBDbGVhcmx5IGFsdGVybmF0aXZlcyAxIGFuZCAyXG4vLyBjb25mbGljdCBhbmQgbm8gYW1vdW50IG9mIGZ1cnRoZXIgbG9va2FoZWFkIHdpbGwgc2VwYXJhdGUgdGhlIHR3by5cbi8vIEhvd2V2ZXIsIGFsdGVybmF0aXZlIDMgd2lsbCBiZSBhYmxlIHRvIGNvbnRpbnVlIGFuZCBzbyB3ZSBkbyBub3Qgc3RvcFxuLy8gd29ya2luZyBvbiB0aGlzIHN0YXRlLiBJbiB0aGUgcHJldmlvdXMgZXhhbXBsZSwgd2UncmUgY29uY2VybmVkIHdpdGhcbi8vIHN0YXRlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbmZsaWN0aW5nIGFsdGVybmF0aXZlcy4gSGVyZSBhbHQgMyBpcyBub3Rcbi8vIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29uZmxpY3RpbmcgY29uZmlncywgYnV0IHNpbmNlIHdlIGNhbiBjb250aW51ZVxuLy8gbG9va2luZyBmb3IgaW5wdXQgcmVhc29uYWJseSwgZG9uJ3QgZGVjbGFyZSB0aGUgc3RhdGUgZG9uZS48L3A+XG4vL1xuLy8gPHA+PHN0cm9uZz5QVVJFIFNMTCBQQVJTSU5HPC9zdHJvbmc+PC9wPlxuLy9cbi8vIDxwPlRvIGhhbmRsZSBwdXJlIFNMTCBwYXJzaW5nLCBhbGwgd2UgaGF2ZSB0byBkbyBpcyBtYWtlIHN1cmUgdGhhdCB3ZVxuLy8gY29tYmluZSBzdGFjayBjb250ZXh0cyBmb3IgY29uZmlndXJhdGlvbnMgdGhhdCBkaWZmZXIgb25seSBieSBzZW1hbnRpY1xuLy8gcHJlZGljYXRlLiBGcm9tIHRoZXJlLCB3ZSBjYW4gZG8gdGhlIHVzdWFsIFNMTCB0ZXJtaW5hdGlvbiBoZXVyaXN0aWMuPC9wPlxuLy9cbi8vIDxwPjxzdHJvbmc+UFJFRElDQVRFUyBJTiBTTEwrTEwgUEFSU0lORzwvc3Ryb25nPjwvcD5cbi8vXG4vLyA8cD5TTEwgZGVjaXNpb25zIGRvbid0IGV2YWx1YXRlIHByZWRpY2F0ZXMgdW50aWwgYWZ0ZXIgdGhleSByZWFjaCBERkEgc3RvcFxuLy8gc3RhdGVzIGJlY2F1c2UgdGhleSBuZWVkIHRvIGNyZWF0ZSB0aGUgREZBIGNhY2hlIHRoYXQgd29ya3MgaW4gYWxsXG4vLyBzZW1hbnRpYyBzaXR1YXRpb25zLiBJbiBjb250cmFzdCwgZnVsbCBMTCBldmFsdWF0ZXMgcHJlZGljYXRlcyBjb2xsZWN0ZWRcbi8vIGR1cmluZyBzdGFydCBzdGF0ZSBjb21wdXRhdGlvbiBzbyBpdCBjYW4gaWdub3JlIHByZWRpY2F0ZXMgdGhlcmVhZnRlci5cbi8vIFRoaXMgbWVhbnMgdGhhdCBTTEwgdGVybWluYXRpb24gZGV0ZWN0aW9uIGNhbiB0b3RhbGx5IGlnbm9yZSBzZW1hbnRpY1xuLy8gcHJlZGljYXRlcy48L3A+XG4vL1xuLy8gPHA+SW1wbGVtZW50YXRpb24td2lzZSwge0BsaW5rIEFUTkNvbmZpZ1NldH0gY29tYmluZXMgc3RhY2sgY29udGV4dHMgYnV0IG5vdFxuLy8gc2VtYW50aWMgcHJlZGljYXRlIGNvbnRleHRzIHNvIHdlIG1pZ2h0IHNlZSB0d28gY29uZmlndXJhdGlvbnMgbGlrZSB0aGVcbi8vIGZvbGxvd2luZy48L3A+XG4vL1xuLy8gPHA+e0Bjb2RlIChzLCAxLCB4LCB7fSksIChzLCAxLCB4Jywge3B9KX08L3A+XG4vL1xuLy8gPHA+QmVmb3JlIHRlc3RpbmcgdGhlc2UgY29uZmlndXJhdGlvbnMgYWdhaW5zdCBvdGhlcnMsIHdlIGhhdmUgdG8gbWVyZ2Vcbi8vIHtAY29kZSB4fSBhbmQge0Bjb2RlIHgnfSAod2l0aG91dCBtb2RpZnlpbmcgdGhlIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb25zKS5cbi8vIEZvciBleGFtcGxlLCB3ZSB0ZXN0IHtAY29kZSAoeCt4Jyk9PXgnJ30gd2hlbiBsb29raW5nIGZvciBjb25mbGljdHMgaW5cbi8vIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbnMuPC9wPlxuLy9cbi8vIDxwPntAY29kZSAocywgMSwgeCwge30pLCAocywgMSwgeCcsIHtwfSksIChzLCAyLCB4JycsIHt9KX08L3A+XG4vL1xuLy8gPHA+SWYgdGhlIGNvbmZpZ3VyYXRpb24gc2V0IGhhcyBwcmVkaWNhdGVzIChhcyBpbmRpY2F0ZWQgYnlcbi8vIHtAbGluayBBVE5Db25maWdTZXQvL2hhc1NlbWFudGljQ29udGV4dH0pLCB0aGlzIGFsZ29yaXRobSBtYWtlcyBhIGNvcHkgb2Zcbi8vIHRoZSBjb25maWd1cmF0aW9ucyB0byBzdHJpcCBvdXQgYWxsIG9mIHRoZSBwcmVkaWNhdGVzIHNvIHRoYXQgYSBzdGFuZGFyZFxuLy8ge0BsaW5rIEFUTkNvbmZpZ1NldH0gd2lsbCBtZXJnZSBldmVyeXRoaW5nIGlnbm9yaW5nIHByZWRpY2F0ZXMuPC9wPlxuLy9cblByZWRpY3Rpb25Nb2RlLmhhc1NMTENvbmZsaWN0VGVybWluYXRpbmdQcmVkaWN0aW9uID0gZnVuY3Rpb24oIG1vZGUsIGNvbmZpZ3MpIHtcbiAgICAvLyBDb25maWdzIGluIHJ1bGUgc3RvcCBzdGF0ZXMgaW5kaWNhdGUgcmVhY2hpbmcgdGhlIGVuZCBvZiB0aGUgZGVjaXNpb25cbiAgICAvLyBydWxlIChsb2NhbCBjb250ZXh0KSBvciBlbmQgb2Ygc3RhcnQgcnVsZSAoZnVsbCBjb250ZXh0KS4gSWYgYWxsXG4gICAgLy8gY29uZmlncyBtZWV0IHRoaXMgY29uZGl0aW9uLCB0aGVuIG5vbmUgb2YgdGhlIGNvbmZpZ3VyYXRpb25zIGlzIGFibGVcbiAgICAvLyB0byBtYXRjaCBhZGRpdGlvbmFsIGlucHV0IHNvIHdlIHRlcm1pbmF0ZSBwcmVkaWN0aW9uLlxuICAgIC8vXG4gICAgaWYgKFByZWRpY3Rpb25Nb2RlLmFsbENvbmZpZ3NJblJ1bGVTdG9wU3RhdGVzKGNvbmZpZ3MpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICAvLyBwdXJlIFNMTCBtb2RlIHBhcnNpbmdcbiAgICBpZiAobW9kZSA9PT0gUHJlZGljdGlvbk1vZGUuU0xMKSB7XG4gICAgICAgIC8vIERvbid0IGJvdGhlciB3aXRoIGNvbWJpbmluZyBjb25maWdzIGZyb20gZGlmZmVyZW50IHNlbWFudGljXG4gICAgICAgIC8vIGNvbnRleHRzIGlmIHdlIGNhbiBmYWlsIG92ZXIgdG8gZnVsbCBMTDsgY29zdHMgbW9yZSB0aW1lXG4gICAgICAgIC8vIHNpbmNlIHdlJ2xsIG9mdGVuIGZhaWwgb3ZlciBhbnl3YXkuXG4gICAgICAgIGlmIChjb25maWdzLmhhc1NlbWFudGljQ29udGV4dCkge1xuICAgICAgICAgICAgLy8gZHVwIGNvbmZpZ3MsIHRvc3Npbmcgb3V0IHNlbWFudGljIHByZWRpY2F0ZXNcbiAgICAgICAgICAgIHZhciBkdXAgPSBuZXcgQVROQ29uZmlnU2V0KCk7XG4gICAgICAgICAgICBmb3IodmFyIGk9MDtpPGNvbmZpZ3MuaXRlbXMubGVuZ3RoO2krKykge1xuICAgICAgICAgICAgXHR2YXIgYyA9IGNvbmZpZ3MuaXRlbXNbaV07XG4gICAgICAgICAgICAgICAgYyA9IG5ldyBBVE5Db25maWcoe3NlbWFudGljQ29udGV4dDpTZW1hbnRpY0NvbnRleHQuTk9ORX0sIGMpO1xuICAgICAgICAgICAgICAgIGR1cC5hZGQoYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25maWdzID0gZHVwO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5vdyB3ZSBoYXZlIGNvbWJpbmVkIGNvbnRleHRzIGZvciBjb25maWdzIHdpdGggZGlzc2ltaWxhciBwcmVkc1xuICAgIH1cbiAgICAvLyBwdXJlIFNMTCBvciBjb21iaW5lZCBTTEwrTEwgbW9kZSBwYXJzaW5nXG4gICAgdmFyIGFsdHNldHMgPSBQcmVkaWN0aW9uTW9kZS5nZXRDb25mbGljdGluZ0FsdFN1YnNldHMoY29uZmlncyk7XG4gICAgcmV0dXJuIFByZWRpY3Rpb25Nb2RlLmhhc0NvbmZsaWN0aW5nQWx0U2V0KGFsdHNldHMpICYmICFQcmVkaWN0aW9uTW9kZS5oYXNTdGF0ZUFzc29jaWF0ZWRXaXRoT25lQWx0KGNvbmZpZ3MpO1xufTtcblxuLy8gQ2hlY2tzIGlmIGFueSBjb25maWd1cmF0aW9uIGluIHtAY29kZSBjb25maWdzfSBpcyBpbiBhXG4vLyB7QGxpbmsgUnVsZVN0b3BTdGF0ZX0uIENvbmZpZ3VyYXRpb25zIG1lZXRpbmcgdGhpcyBjb25kaXRpb24gaGF2ZSByZWFjaGVkXG4vLyB0aGUgZW5kIG9mIHRoZSBkZWNpc2lvbiBydWxlIChsb2NhbCBjb250ZXh0KSBvciBlbmQgb2Ygc3RhcnQgcnVsZSAoZnVsbFxuLy8gY29udGV4dCkuXG4vL1xuLy8gQHBhcmFtIGNvbmZpZ3MgdGhlIGNvbmZpZ3VyYXRpb24gc2V0IHRvIHRlc3Rcbi8vIEByZXR1cm4ge0Bjb2RlIHRydWV9IGlmIGFueSBjb25maWd1cmF0aW9uIGluIHtAY29kZSBjb25maWdzfSBpcyBpbiBhXG4vLyB7QGxpbmsgUnVsZVN0b3BTdGF0ZX0sIG90aGVyd2lzZSB7QGNvZGUgZmFsc2V9XG5QcmVkaWN0aW9uTW9kZS5oYXNDb25maWdJblJ1bGVTdG9wU3RhdGUgPSBmdW5jdGlvbihjb25maWdzKSB7XG5cdGZvcih2YXIgaT0wO2k8Y29uZmlncy5pdGVtcy5sZW5ndGg7aSsrKSB7XG5cdFx0dmFyIGMgPSBjb25maWdzLml0ZW1zW2ldO1xuICAgICAgICBpZiAoYy5zdGF0ZSBpbnN0YW5jZW9mIFJ1bGVTdG9wU3RhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cdH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vLyBDaGVja3MgaWYgYWxsIGNvbmZpZ3VyYXRpb25zIGluIHtAY29kZSBjb25maWdzfSBhcmUgaW4gYVxuLy8ge0BsaW5rIFJ1bGVTdG9wU3RhdGV9LiBDb25maWd1cmF0aW9ucyBtZWV0aW5nIHRoaXMgY29uZGl0aW9uIGhhdmUgcmVhY2hlZFxuLy8gdGhlIGVuZCBvZiB0aGUgZGVjaXNpb24gcnVsZSAobG9jYWwgY29udGV4dCkgb3IgZW5kIG9mIHN0YXJ0IHJ1bGUgKGZ1bGxcbi8vIGNvbnRleHQpLlxuLy9cbi8vIEBwYXJhbSBjb25maWdzIHRoZSBjb25maWd1cmF0aW9uIHNldCB0byB0ZXN0XG4vLyBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiBhbGwgY29uZmlndXJhdGlvbnMgaW4ge0Bjb2RlIGNvbmZpZ3N9IGFyZSBpbiBhXG4vLyB7QGxpbmsgUnVsZVN0b3BTdGF0ZX0sIG90aGVyd2lzZSB7QGNvZGUgZmFsc2V9XG5QcmVkaWN0aW9uTW9kZS5hbGxDb25maWdzSW5SdWxlU3RvcFN0YXRlcyA9IGZ1bmN0aW9uKGNvbmZpZ3MpIHtcblx0Zm9yKHZhciBpPTA7aTxjb25maWdzLml0ZW1zLmxlbmd0aDtpKyspIHtcblx0XHR2YXIgYyA9IGNvbmZpZ3MuaXRlbXNbaV07XG4gICAgICAgIGlmICghKGMuc3RhdGUgaW5zdGFuY2VvZiBSdWxlU3RvcFN0YXRlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cdH1cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8vXG4vLyBGdWxsIExMIHByZWRpY3Rpb24gdGVybWluYXRpb24uXG4vL1xuLy8gPHA+Q2FuIHdlIHN0b3AgbG9va2luZyBhaGVhZCBkdXJpbmcgQVROIHNpbXVsYXRpb24gb3IgaXMgdGhlcmUgc29tZVxuLy8gdW5jZXJ0YWludHkgYXMgdG8gd2hpY2ggYWx0ZXJuYXRpdmUgd2Ugd2lsbCB1bHRpbWF0ZWx5IHBpY2ssIGFmdGVyXG4vLyBjb25zdW1pbmcgbW9yZSBpbnB1dD8gRXZlbiBpZiB0aGVyZSBhcmUgcGFydGlhbCBjb25mbGljdHMsIHdlIG1pZ2h0IGtub3dcbi8vIHRoYXQgZXZlcnl0aGluZyBpcyBnb2luZyB0byByZXNvbHZlIHRvIHRoZSBzYW1lIG1pbmltdW0gYWx0ZXJuYXRpdmUuIFRoYXRcbi8vIG1lYW5zIHdlIGNhbiBzdG9wIHNpbmNlIG5vIG1vcmUgbG9va2FoZWFkIHdpbGwgY2hhbmdlIHRoYXQgZmFjdC4gT24gdGhlXG4vLyBvdGhlciBoYW5kLCB0aGVyZSBtaWdodCBiZSBtdWx0aXBsZSBjb25mbGljdHMgdGhhdCByZXNvbHZlIHRvIGRpZmZlcmVudFxuLy8gbWluaW11bXMuIFRoYXQgbWVhbnMgd2UgbmVlZCBtb3JlIGxvb2sgYWhlYWQgdG8gZGVjaWRlIHdoaWNoIG9mIHRob3NlXG4vLyBhbHRlcm5hdGl2ZXMgd2Ugc2hvdWxkIHByZWRpY3QuPC9wPlxuLy9cbi8vIDxwPlRoZSBiYXNpYyBpZGVhIGlzIHRvIHNwbGl0IHRoZSBzZXQgb2YgY29uZmlndXJhdGlvbnMge0Bjb2RlIEN9LCBpbnRvXG4vLyBjb25mbGljdGluZyBzdWJzZXRzIHtAY29kZSAocywgXywgY3R4LCBfKX0gYW5kIHNpbmdsZXRvbiBzdWJzZXRzIHdpdGhcbi8vIG5vbi1jb25mbGljdGluZyBjb25maWd1cmF0aW9ucy4gVHdvIGNvbmZpZ3VyYXRpb25zIGNvbmZsaWN0IGlmIHRoZXkgaGF2ZVxuLy8gaWRlbnRpY2FsIHtAbGluayBBVE5Db25maWcvL3N0YXRlfSBhbmQge0BsaW5rIEFUTkNvbmZpZy8vY29udGV4dH0gdmFsdWVzXG4vLyBidXQgZGlmZmVyZW50IHtAbGluayBBVE5Db25maWcvL2FsdH0gdmFsdWUsIGUuZy4ge0Bjb2RlIChzLCBpLCBjdHgsIF8pfVxuLy8gYW5kIHtAY29kZSAocywgaiwgY3R4LCBfKX0gZm9yIHtAY29kZSBpIT1qfS48L3A+XG4vL1xuLy8gPHA+UmVkdWNlIHRoZXNlIGNvbmZpZ3VyYXRpb24gc3Vic2V0cyB0byB0aGUgc2V0IG9mIHBvc3NpYmxlIGFsdGVybmF0aXZlcy5cbi8vIFlvdSBjYW4gY29tcHV0ZSB0aGUgYWx0ZXJuYXRpdmUgc3Vic2V0cyBpbiBvbmUgcGFzcyBhcyBmb2xsb3dzOjwvcD5cbi8vXG4vLyA8cD57QGNvZGUgQV9zLGN0eCA9IHtpIHwgKHMsIGksIGN0eCwgXyl9fSBmb3IgZWFjaCBjb25maWd1cmF0aW9uIGluXG4vLyB7QGNvZGUgQ30gaG9sZGluZyB7QGNvZGUgc30gYW5kIHtAY29kZSBjdHh9IGZpeGVkLjwvcD5cbi8vXG4vLyA8cD5PciBpbiBwc2V1ZG8tY29kZSwgZm9yIGVhY2ggY29uZmlndXJhdGlvbiB7QGNvZGUgY30gaW4ge0Bjb2RlIEN9OjwvcD5cbi8vXG4vLyA8cHJlPlxuLy8gbWFwW2NdIFU9IGMue0BsaW5rIEFUTkNvbmZpZy8vYWx0IGFsdH0gLy8gbWFwIGhhc2gvZXF1YWxzIHVzZXMgcyBhbmQgeCwgbm90XG4vLyBhbHQgYW5kIG5vdCBwcmVkXG4vLyA8L3ByZT5cbi8vXG4vLyA8cD5UaGUgdmFsdWVzIGluIHtAY29kZSBtYXB9IGFyZSB0aGUgc2V0IG9mIHtAY29kZSBBX3MsY3R4fSBzZXRzLjwvcD5cbi8vXG4vLyA8cD5JZiB7QGNvZGUgfEFfcyxjdHh8PTF9IHRoZW4gdGhlcmUgaXMgbm8gY29uZmxpY3QgYXNzb2NpYXRlZCB3aXRoXG4vLyB7QGNvZGUgc30gYW5kIHtAY29kZSBjdHh9LjwvcD5cbi8vXG4vLyA8cD5SZWR1Y2UgdGhlIHN1YnNldHMgdG8gc2luZ2xldG9ucyBieSBjaG9vc2luZyBhIG1pbmltdW0gb2YgZWFjaCBzdWJzZXQuIElmXG4vLyB0aGUgdW5pb24gb2YgdGhlc2UgYWx0ZXJuYXRpdmUgc3Vic2V0cyBpcyBhIHNpbmdsZXRvbiwgdGhlbiBubyBhbW91bnQgb2Zcbi8vIG1vcmUgbG9va2FoZWFkIHdpbGwgaGVscCB1cy4gV2Ugd2lsbCBhbHdheXMgcGljayB0aGF0IGFsdGVybmF0aXZlLiBJZixcbi8vIGhvd2V2ZXIsIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgYWx0ZXJuYXRpdmUsIHRoZW4gd2UgYXJlIHVuY2VydGFpbiB3aGljaFxuLy8gYWx0ZXJuYXRpdmUgdG8gcHJlZGljdCBhbmQgbXVzdCBjb250aW51ZSBsb29raW5nIGZvciByZXNvbHV0aW9uLiBXZSBtYXlcbi8vIG9yIG1heSBub3QgZGlzY292ZXIgYW4gYW1iaWd1aXR5IGluIHRoZSBmdXR1cmUsIGV2ZW4gaWYgdGhlcmUgYXJlIG5vXG4vLyBjb25mbGljdGluZyBzdWJzZXRzIHRoaXMgcm91bmQuPC9wPlxuLy9cbi8vIDxwPlRoZSBiaWdnZXN0IHNpbiBpcyB0byB0ZXJtaW5hdGUgZWFybHkgYmVjYXVzZSBpdCBtZWFucyB3ZSd2ZSBtYWRlIGFcbi8vIGRlY2lzaW9uIGJ1dCB3ZXJlIHVuY2VydGFpbiBhcyB0byB0aGUgZXZlbnR1YWwgb3V0Y29tZS4gV2UgaGF2ZW4ndCB1c2VkXG4vLyBlbm91Z2ggbG9va2FoZWFkLiBPbiB0aGUgb3RoZXIgaGFuZCwgYW5ub3VuY2luZyBhIGNvbmZsaWN0IHRvbyBsYXRlIGlzIG5vXG4vLyBiaWcgZGVhbDsgeW91IHdpbGwgc3RpbGwgaGF2ZSB0aGUgY29uZmxpY3QuIEl0J3MganVzdCBpbmVmZmljaWVudC4gSXRcbi8vIG1pZ2h0IGV2ZW4gbG9vayB1bnRpbCB0aGUgZW5kIG9mIGZpbGUuPC9wPlxuLy9cbi8vIDxwPk5vIHNwZWNpYWwgY29uc2lkZXJhdGlvbiBmb3Igc2VtYW50aWMgcHJlZGljYXRlcyBpcyByZXF1aXJlZCBiZWNhdXNlXG4vLyBwcmVkaWNhdGVzIGFyZSBldmFsdWF0ZWQgb24tdGhlLWZseSBmb3IgZnVsbCBMTCBwcmVkaWN0aW9uLCBlbnN1cmluZyB0aGF0XG4vLyBubyBjb25maWd1cmF0aW9uIGNvbnRhaW5zIGEgc2VtYW50aWMgY29udGV4dCBkdXJpbmcgdGhlIHRlcm1pbmF0aW9uXG4vLyBjaGVjay48L3A+XG4vL1xuLy8gPHA+PHN0cm9uZz5DT05GTElDVElORyBDT05GSUdTPC9zdHJvbmc+PC9wPlxuLy9cbi8vIDxwPlR3byBjb25maWd1cmF0aW9ucyB7QGNvZGUgKHMsIGksIHgpfSBhbmQge0Bjb2RlIChzLCBqLCB4Jyl9LCBjb25mbGljdFxuLy8gd2hlbiB7QGNvZGUgaSE9an0gYnV0IHtAY29kZSB4PXgnfS4gQmVjYXVzZSB3ZSBtZXJnZSBhbGxcbi8vIHtAY29kZSAocywgaSwgXyl9IGNvbmZpZ3VyYXRpb25zIHRvZ2V0aGVyLCB0aGF0IG1lYW5zIHRoYXQgdGhlcmUgYXJlIGF0XG4vLyBtb3N0IHtAY29kZSBufSBjb25maWd1cmF0aW9ucyBhc3NvY2lhdGVkIHdpdGggc3RhdGUge0Bjb2RlIHN9IGZvclxuLy8ge0Bjb2RlIG59IHBvc3NpYmxlIGFsdGVybmF0aXZlcyBpbiB0aGUgZGVjaXNpb24uIFRoZSBtZXJnZWQgc3RhY2tzXG4vLyBjb21wbGljYXRlIHRoZSBjb21wYXJpc29uIG9mIGNvbmZpZ3VyYXRpb24gY29udGV4dHMge0Bjb2RlIHh9IGFuZFxuLy8ge0Bjb2RlIHgnfS4gU2FtIGNoZWNrcyB0byBzZWUgaWYgb25lIGlzIGEgc3Vic2V0IG9mIHRoZSBvdGhlciBieSBjYWxsaW5nXG4vLyBtZXJnZSBhbmQgY2hlY2tpbmcgdG8gc2VlIGlmIHRoZSBtZXJnZWQgcmVzdWx0IGlzIGVpdGhlciB7QGNvZGUgeH0gb3Jcbi8vIHtAY29kZSB4J30uIElmIHRoZSB7QGNvZGUgeH0gYXNzb2NpYXRlZCB3aXRoIGxvd2VzdCBhbHRlcm5hdGl2ZSB7QGNvZGUgaX1cbi8vIGlzIHRoZSBzdXBlcnNldCwgdGhlbiB7QGNvZGUgaX0gaXMgdGhlIG9ubHkgcG9zc2libGUgcHJlZGljdGlvbiBzaW5jZSB0aGVcbi8vIG90aGVycyByZXNvbHZlIHRvIHtAY29kZSBtaW4oaSl9IGFzIHdlbGwuIEhvd2V2ZXIsIGlmIHtAY29kZSB4fSBpc1xuLy8gYXNzb2NpYXRlZCB3aXRoIHtAY29kZSBqPml9IHRoZW4gYXQgbGVhc3Qgb25lIHN0YWNrIGNvbmZpZ3VyYXRpb24gZm9yXG4vLyB7QGNvZGUgan0gaXMgbm90IGluIGNvbmZsaWN0IHdpdGggYWx0ZXJuYXRpdmUge0Bjb2RlIGl9LiBUaGUgYWxnb3JpdGhtXG4vLyBzaG91bGQga2VlcCBnb2luZywgbG9va2luZyBmb3IgbW9yZSBsb29rYWhlYWQgZHVlIHRvIHRoZSB1bmNlcnRhaW50eS48L3A+XG4vL1xuLy8gPHA+Rm9yIHNpbXBsaWNpdHksIEknbSBkb2luZyBhIGVxdWFsaXR5IGNoZWNrIGJldHdlZW4ge0Bjb2RlIHh9IGFuZFxuLy8ge0Bjb2RlIHgnfSB0aGF0IGxldHMgdGhlIGFsZ29yaXRobSBjb250aW51ZSB0byBjb25zdW1lIGxvb2thaGVhZCBsb25nZXJcbi8vIHRoYW4gbmVjZXNzYXJ5LiBUaGUgcmVhc29uIEkgbGlrZSB0aGUgZXF1YWxpdHkgaXMgb2YgY291cnNlIHRoZVxuLy8gc2ltcGxpY2l0eSBidXQgYWxzbyBiZWNhdXNlIHRoYXQgaXMgdGhlIHRlc3QgeW91IG5lZWQgdG8gZGV0ZWN0IHRoZVxuLy8gYWx0ZXJuYXRpdmVzIHRoYXQgYXJlIGFjdHVhbGx5IGluIGNvbmZsaWN0LjwvcD5cbi8vXG4vLyA8cD48c3Ryb25nPkNPTlRJTlVFL1NUT1AgUlVMRTwvc3Ryb25nPjwvcD5cbi8vXG4vLyA8cD5Db250aW51ZSBpZiB1bmlvbiBvZiByZXNvbHZlZCBhbHRlcm5hdGl2ZSBzZXRzIGZyb20gbm9uLWNvbmZsaWN0aW5nIGFuZFxuLy8gY29uZmxpY3RpbmcgYWx0ZXJuYXRpdmUgc3Vic2V0cyBoYXMgbW9yZSB0aGFuIG9uZSBhbHRlcm5hdGl2ZS4gV2UgYXJlXG4vLyB1bmNlcnRhaW4gYWJvdXQgd2hpY2ggYWx0ZXJuYXRpdmUgdG8gcHJlZGljdC48L3A+XG4vL1xuLy8gPHA+VGhlIGNvbXBsZXRlIHNldCBvZiBhbHRlcm5hdGl2ZXMsIHtAY29kZSBbaSBmb3IgKF8saSxfKV19LCB0ZWxscyB1cyB3aGljaFxuLy8gYWx0ZXJuYXRpdmVzIGFyZSBzdGlsbCBpbiB0aGUgcnVubmluZyBmb3IgdGhlIGFtb3VudCBvZiBpbnB1dCB3ZSd2ZVxuLy8gY29uc3VtZWQgYXQgdGhpcyBwb2ludC4gVGhlIGNvbmZsaWN0aW5nIHNldHMgbGV0IHVzIHRvIHN0cmlwIGF3YXlcbi8vIGNvbmZpZ3VyYXRpb25zIHRoYXQgd29uJ3QgbGVhZCB0byBtb3JlIHN0YXRlcyBiZWNhdXNlIHdlIHJlc29sdmVcbi8vIGNvbmZsaWN0cyB0byB0aGUgY29uZmlndXJhdGlvbiB3aXRoIGEgbWluaW11bSBhbHRlcm5hdGUgZm9yIHRoZVxuLy8gY29uZmxpY3Rpbmcgc2V0LjwvcD5cbi8vXG4vLyA8cD48c3Ryb25nPkNBU0VTPC9zdHJvbmc+PC9wPlxuLy9cbi8vIDx1bD5cbi8vXG4vLyA8bGk+bm8gY29uZmxpY3RzIGFuZCBtb3JlIHRoYW4gMSBhbHRlcm5hdGl2ZSBpbiBzZXQgPSZndDsgY29udGludWU8L2xpPlxuLy9cbi8vIDxsaT4ge0Bjb2RlIChzLCAxLCB4KX0sIHtAY29kZSAocywgMiwgeCl9LCB7QGNvZGUgKHMsIDMsIHopfSxcbi8vIHtAY29kZSAocycsIDEsIHkpfSwge0Bjb2RlIChzJywgMiwgeSl9IHlpZWxkcyBub24tY29uZmxpY3Rpbmcgc2V0XG4vLyB7QGNvZGUgezN9fSBVIGNvbmZsaWN0aW5nIHNldHMge0Bjb2RlIG1pbih7MSwyfSl9IFUge0Bjb2RlIG1pbih7MSwyfSl9ID1cbi8vIHtAY29kZSB7MSwzfX0gPSZndDsgY29udGludWVcbi8vIDwvbGk+XG4vL1xuLy8gPGxpPntAY29kZSAocywgMSwgeCl9LCB7QGNvZGUgKHMsIDIsIHgpfSwge0Bjb2RlIChzJywgMSwgeSl9LFxuLy8ge0Bjb2RlIChzJywgMiwgeSl9LCB7QGNvZGUgKHMnJywgMSwgeil9IHlpZWxkcyBub24tY29uZmxpY3Rpbmcgc2V0XG4vLyB7QGNvZGUgezF9fSBVIGNvbmZsaWN0aW5nIHNldHMge0Bjb2RlIG1pbih7MSwyfSl9IFUge0Bjb2RlIG1pbih7MSwyfSl9ID1cbi8vIHtAY29kZSB7MX19ID0mZ3Q7IHN0b3AgYW5kIHByZWRpY3QgMTwvbGk+XG4vL1xuLy8gPGxpPntAY29kZSAocywgMSwgeCl9LCB7QGNvZGUgKHMsIDIsIHgpfSwge0Bjb2RlIChzJywgMSwgeSl9LFxuLy8ge0Bjb2RlIChzJywgMiwgeSl9IHlpZWxkcyBjb25mbGljdGluZywgcmVkdWNlZCBzZXRzIHtAY29kZSB7MX19IFVcbi8vIHtAY29kZSB7MX19ID0ge0Bjb2RlIHsxfX0gPSZndDsgc3RvcCBhbmQgcHJlZGljdCAxLCBjYW4gYW5ub3VuY2Vcbi8vIGFtYmlndWl0eSB7QGNvZGUgezEsMn19PC9saT5cbi8vXG4vLyA8bGk+e0Bjb2RlIChzLCAxLCB4KX0sIHtAY29kZSAocywgMiwgeCl9LCB7QGNvZGUgKHMnLCAyLCB5KX0sXG4vLyB7QGNvZGUgKHMnLCAzLCB5KX0geWllbGRzIGNvbmZsaWN0aW5nLCByZWR1Y2VkIHNldHMge0Bjb2RlIHsxfX0gVVxuLy8ge0Bjb2RlIHsyfX0gPSB7QGNvZGUgezEsMn19ID0mZ3Q7IGNvbnRpbnVlPC9saT5cbi8vXG4vLyA8bGk+e0Bjb2RlIChzLCAxLCB4KX0sIHtAY29kZSAocywgMiwgeCl9LCB7QGNvZGUgKHMnLCAzLCB5KX0sXG4vLyB7QGNvZGUgKHMnLCA0LCB5KX0geWllbGRzIGNvbmZsaWN0aW5nLCByZWR1Y2VkIHNldHMge0Bjb2RlIHsxfX0gVVxuLy8ge0Bjb2RlIHszfX0gPSB7QGNvZGUgezEsM319ID0mZ3Q7IGNvbnRpbnVlPC9saT5cbi8vXG4vLyA8L3VsPlxuLy9cbi8vIDxwPjxzdHJvbmc+RVhBQ1QgQU1CSUdVSVRZIERFVEVDVElPTjwvc3Ryb25nPjwvcD5cbi8vXG4vLyA8cD5JZiBhbGwgc3RhdGVzIHJlcG9ydCB0aGUgc2FtZSBjb25mbGljdGluZyBzZXQgb2YgYWx0ZXJuYXRpdmVzLCB0aGVuIHdlXG4vLyBrbm93IHdlIGhhdmUgdGhlIGV4YWN0IGFtYmlndWl0eSBzZXQuPC9wPlxuLy9cbi8vIDxwPjxjb2RlPnxBXzxlbT5pPC9lbT58Jmd0OzE8L2NvZGU+IGFuZFxuLy8gPGNvZGU+QV88ZW0+aTwvZW0+ID0gQV88ZW0+ajwvZW0+PC9jb2RlPiBmb3IgYWxsIDxlbT5pPC9lbT4sIDxlbT5qPC9lbT4uPC9wPlxuLy9cbi8vIDxwPkluIG90aGVyIHdvcmRzLCB3ZSBjb250aW51ZSBleGFtaW5pbmcgbG9va2FoZWFkIHVudGlsIGFsbCB7QGNvZGUgQV9pfVxuLy8gaGF2ZSBtb3JlIHRoYW4gb25lIGFsdGVybmF0aXZlIGFuZCBhbGwge0Bjb2RlIEFfaX0gYXJlIHRoZSBzYW1lLiBJZlxuLy8ge0Bjb2RlIEE9e3sxLDJ9LCB7MSwzfX19LCB0aGVuIHJlZ3VsYXIgTEwgcHJlZGljdGlvbiB3b3VsZCB0ZXJtaW5hdGVcbi8vIGJlY2F1c2UgdGhlIHJlc29sdmVkIHNldCBpcyB7QGNvZGUgezF9fS4gVG8gZGV0ZXJtaW5lIHdoYXQgdGhlIHJlYWxcbi8vIGFtYmlndWl0eSBpcywgd2UgaGF2ZSB0byBrbm93IHdoZXRoZXIgdGhlIGFtYmlndWl0eSBpcyBiZXR3ZWVuIG9uZSBhbmRcbi8vIHR3byBvciBvbmUgYW5kIHRocmVlIHNvIHdlIGtlZXAgZ29pbmcuIFdlIGNhbiBvbmx5IHN0b3AgcHJlZGljdGlvbiB3aGVuXG4vLyB3ZSBuZWVkIGV4YWN0IGFtYmlndWl0eSBkZXRlY3Rpb24gd2hlbiB0aGUgc2V0cyBsb29rIGxpa2Vcbi8vIHtAY29kZSBBPXt7MSwyfX19IG9yIHtAY29kZSB7ezEsMn0sezEsMn19fSwgZXRjLi4uPC9wPlxuLy9cblByZWRpY3Rpb25Nb2RlLnJlc29sdmVzVG9KdXN0T25lVmlhYmxlQWx0ID0gZnVuY3Rpb24oYWx0c2V0cykge1xuICAgIHJldHVybiBQcmVkaWN0aW9uTW9kZS5nZXRTaW5nbGVWaWFibGVBbHQoYWx0c2V0cyk7XG59O1xuXG4vL1xuLy8gRGV0ZXJtaW5lcyBpZiBldmVyeSBhbHRlcm5hdGl2ZSBzdWJzZXQgaW4ge0Bjb2RlIGFsdHNldHN9IGNvbnRhaW5zIG1vcmVcbi8vIHRoYW4gb25lIGFsdGVybmF0aXZlLlxuLy9cbi8vIEBwYXJhbSBhbHRzZXRzIGEgY29sbGVjdGlvbiBvZiBhbHRlcm5hdGl2ZSBzdWJzZXRzXG4vLyBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiBldmVyeSB7QGxpbmsgQml0U2V0fSBpbiB7QGNvZGUgYWx0c2V0c30gaGFzXG4vLyB7QGxpbmsgQml0U2V0Ly9jYXJkaW5hbGl0eSBjYXJkaW5hbGl0eX0gJmd0OyAxLCBvdGhlcndpc2Uge0Bjb2RlIGZhbHNlfVxuLy9cblByZWRpY3Rpb25Nb2RlLmFsbFN1YnNldHNDb25mbGljdCA9IGZ1bmN0aW9uKGFsdHNldHMpIHtcbiAgICByZXR1cm4gISBQcmVkaWN0aW9uTW9kZS5oYXNOb25Db25mbGljdGluZ0FsdFNldChhbHRzZXRzKTtcbn07XG4vL1xuLy8gRGV0ZXJtaW5lcyBpZiBhbnkgc2luZ2xlIGFsdGVybmF0aXZlIHN1YnNldCBpbiB7QGNvZGUgYWx0c2V0c30gY29udGFpbnNcbi8vIGV4YWN0bHkgb25lIGFsdGVybmF0aXZlLlxuLy9cbi8vIEBwYXJhbSBhbHRzZXRzIGEgY29sbGVjdGlvbiBvZiBhbHRlcm5hdGl2ZSBzdWJzZXRzXG4vLyBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiB7QGNvZGUgYWx0c2V0c30gY29udGFpbnMgYSB7QGxpbmsgQml0U2V0fSB3aXRoXG4vLyB7QGxpbmsgQml0U2V0Ly9jYXJkaW5hbGl0eSBjYXJkaW5hbGl0eX0gMSwgb3RoZXJ3aXNlIHtAY29kZSBmYWxzZX1cbi8vXG5QcmVkaWN0aW9uTW9kZS5oYXNOb25Db25mbGljdGluZ0FsdFNldCA9IGZ1bmN0aW9uKGFsdHNldHMpIHtcblx0Zm9yKHZhciBpPTA7aTxhbHRzZXRzLmxlbmd0aDtpKyspIHtcblx0XHR2YXIgYWx0cyA9IGFsdHNldHNbaV07XG4gICAgICAgIGlmIChhbHRzLmxlbmd0aD09PTEpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cdH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vL1xuLy8gRGV0ZXJtaW5lcyBpZiBhbnkgc2luZ2xlIGFsdGVybmF0aXZlIHN1YnNldCBpbiB7QGNvZGUgYWx0c2V0c30gY29udGFpbnNcbi8vIG1vcmUgdGhhbiBvbmUgYWx0ZXJuYXRpdmUuXG4vL1xuLy8gQHBhcmFtIGFsdHNldHMgYSBjb2xsZWN0aW9uIG9mIGFsdGVybmF0aXZlIHN1YnNldHNcbi8vIEByZXR1cm4ge0Bjb2RlIHRydWV9IGlmIHtAY29kZSBhbHRzZXRzfSBjb250YWlucyBhIHtAbGluayBCaXRTZXR9IHdpdGhcbi8vIHtAbGluayBCaXRTZXQvL2NhcmRpbmFsaXR5IGNhcmRpbmFsaXR5fSAmZ3Q7IDEsIG90aGVyd2lzZSB7QGNvZGUgZmFsc2V9XG4vL1xuUHJlZGljdGlvbk1vZGUuaGFzQ29uZmxpY3RpbmdBbHRTZXQgPSBmdW5jdGlvbihhbHRzZXRzKSB7XG5cdGZvcih2YXIgaT0wO2k8YWx0c2V0cy5sZW5ndGg7aSsrKSB7XG5cdFx0dmFyIGFsdHMgPSBhbHRzZXRzW2ldO1xuICAgICAgICBpZiAoYWx0cy5sZW5ndGg+MSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblx0fVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8vXG4vLyBEZXRlcm1pbmVzIGlmIGV2ZXJ5IGFsdGVybmF0aXZlIHN1YnNldCBpbiB7QGNvZGUgYWx0c2V0c30gaXMgZXF1aXZhbGVudC5cbi8vXG4vLyBAcGFyYW0gYWx0c2V0cyBhIGNvbGxlY3Rpb24gb2YgYWx0ZXJuYXRpdmUgc3Vic2V0c1xuLy8gQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgZXZlcnkgbWVtYmVyIG9mIHtAY29kZSBhbHRzZXRzfSBpcyBlcXVhbCB0byB0aGVcbi8vIG90aGVycywgb3RoZXJ3aXNlIHtAY29kZSBmYWxzZX1cbi8vXG5QcmVkaWN0aW9uTW9kZS5hbGxTdWJzZXRzRXF1YWwgPSBmdW5jdGlvbihhbHRzZXRzKSB7XG4gICAgdmFyIGZpcnN0ID0gbnVsbDtcblx0Zm9yKHZhciBpPTA7aTxhbHRzZXRzLmxlbmd0aDtpKyspIHtcblx0XHR2YXIgYWx0cyA9IGFsdHNldHNbaV07XG4gICAgICAgIGlmIChmaXJzdCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgZmlyc3QgPSBhbHRzO1xuICAgICAgICB9IGVsc2UgaWYgKGFsdHMhPT1maXJzdCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cdH1cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8vXG4vLyBSZXR1cm5zIHRoZSB1bmlxdWUgYWx0ZXJuYXRpdmUgcHJlZGljdGVkIGJ5IGFsbCBhbHRlcm5hdGl2ZSBzdWJzZXRzIGluXG4vLyB7QGNvZGUgYWx0c2V0c30uIElmIG5vIHN1Y2ggYWx0ZXJuYXRpdmUgZXhpc3RzLCB0aGlzIG1ldGhvZCByZXR1cm5zXG4vLyB7QGxpbmsgQVROLy9JTlZBTElEX0FMVF9OVU1CRVJ9LlxuLy9cbi8vIEBwYXJhbSBhbHRzZXRzIGEgY29sbGVjdGlvbiBvZiBhbHRlcm5hdGl2ZSBzdWJzZXRzXG4vL1xuUHJlZGljdGlvbk1vZGUuZ2V0VW5pcXVlQWx0ID0gZnVuY3Rpb24oYWx0c2V0cykge1xuICAgIHZhciBhbGwgPSBQcmVkaWN0aW9uTW9kZS5nZXRBbHRzKGFsdHNldHMpO1xuICAgIGlmIChhbGwubGVuZ3RoPT09MSkge1xuICAgICAgICByZXR1cm4gYWxsLm1pblZhbHVlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIEFUTi5JTlZBTElEX0FMVF9OVU1CRVI7XG4gICAgfVxufTtcblxuLy8gR2V0cyB0aGUgY29tcGxldGUgc2V0IG9mIHJlcHJlc2VudGVkIGFsdGVybmF0aXZlcyBmb3IgYSBjb2xsZWN0aW9uIG9mXG4vLyBhbHRlcm5hdGl2ZSBzdWJzZXRzLiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSB1bmlvbiBvZiBlYWNoIHtAbGluayBCaXRTZXR9XG4vLyBpbiB7QGNvZGUgYWx0c2V0c30uXG4vL1xuLy8gQHBhcmFtIGFsdHNldHMgYSBjb2xsZWN0aW9uIG9mIGFsdGVybmF0aXZlIHN1YnNldHNcbi8vIEByZXR1cm4gdGhlIHNldCBvZiByZXByZXNlbnRlZCBhbHRlcm5hdGl2ZXMgaW4ge0Bjb2RlIGFsdHNldHN9XG4vL1xuUHJlZGljdGlvbk1vZGUuZ2V0QWx0cyA9IGZ1bmN0aW9uKGFsdHNldHMpIHtcbiAgICB2YXIgYWxsID0gbmV3IEJpdFNldCgpO1xuICAgIGFsdHNldHMubWFwKCBmdW5jdGlvbihhbHRzKSB7IGFsbC5vcihhbHRzKTsgfSk7XG4gICAgcmV0dXJuIGFsbDtcbn07XG5cbi8vXG4vLyBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIGNvbmZsaWN0aW5nIGFsdCBzdWJzZXRzIGZyb20gYSBjb25maWd1cmF0aW9uIHNldC5cbi8vIEZvciBlYWNoIGNvbmZpZ3VyYXRpb24ge0Bjb2RlIGN9IGluIHtAY29kZSBjb25maWdzfTpcbi8vXG4vLyA8cHJlPlxuLy8gbWFwW2NdIFU9IGMue0BsaW5rIEFUTkNvbmZpZy8vYWx0IGFsdH0gLy8gbWFwIGhhc2gvZXF1YWxzIHVzZXMgcyBhbmQgeCwgbm90XG4vLyBhbHQgYW5kIG5vdCBwcmVkXG4vLyA8L3ByZT5cblxuUHJlZGljdGlvbk1vZGUuZ2V0Q29uZmxpY3RpbmdBbHRTdWJzZXRzID0gZnVuY3Rpb24oY29uZmlncykge1xuICAgIHZhciBjb25maWdUb0FsdHMgPSBuZXcgTWFwKCk7XG4gICAgY29uZmlnVG9BbHRzLmhhc2hGdW5jdGlvbiA9IGZ1bmN0aW9uKGNmZykgeyBoYXNoU3R1ZmYoY2ZnLnN0YXRlLnN0YXRlTnVtYmVyLCBjZmcuY29udGV4dCk7IH07XG4gICAgY29uZmlnVG9BbHRzLmVxdWFsc0Z1bmN0aW9uID0gZnVuY3Rpb24oYzEsIGMyKSB7IHJldHVybiBjMS5zdGF0ZS5zdGF0ZU51bWJlcj09YzIuc3RhdGUuc3RhdGVOdW1iZXIgJiYgYzEuY29udGV4dC5lcXVhbHMoYzIuY29udGV4dCk7fVxuICAgIGNvbmZpZ3MuaXRlbXMubWFwKGZ1bmN0aW9uKGNmZykge1xuICAgICAgICB2YXIgYWx0cyA9IGNvbmZpZ1RvQWx0cy5nZXQoY2ZnKTtcbiAgICAgICAgaWYgKGFsdHMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGFsdHMgPSBuZXcgQml0U2V0KCk7XG4gICAgICAgICAgICBjb25maWdUb0FsdHMucHV0KGNmZywgYWx0cyk7XG4gICAgICAgIH1cbiAgICAgICAgYWx0cy5hZGQoY2ZnLmFsdCk7XG5cdH0pO1xuICAgIHJldHVybiBjb25maWdUb0FsdHMuZ2V0VmFsdWVzKCk7XG59O1xuXG4vL1xuLy8gR2V0IGEgbWFwIGZyb20gc3RhdGUgdG8gYWx0IHN1YnNldCBmcm9tIGEgY29uZmlndXJhdGlvbiBzZXQuIEZvciBlYWNoXG4vLyBjb25maWd1cmF0aW9uIHtAY29kZSBjfSBpbiB7QGNvZGUgY29uZmlnc306XG4vL1xuLy8gPHByZT5cbi8vIG1hcFtjLntAbGluayBBVE5Db25maWcvL3N0YXRlIHN0YXRlfV0gVT0gYy57QGxpbmsgQVROQ29uZmlnLy9hbHQgYWx0fVxuLy8gPC9wcmU+XG4vL1xuUHJlZGljdGlvbk1vZGUuZ2V0U3RhdGVUb0FsdE1hcCA9IGZ1bmN0aW9uKGNvbmZpZ3MpIHtcbiAgICB2YXIgbSA9IG5ldyBBbHREaWN0KCk7XG4gICAgY29uZmlncy5pdGVtcy5tYXAoZnVuY3Rpb24oYykge1xuICAgICAgICB2YXIgYWx0cyA9IG0uZ2V0KGMuc3RhdGUpO1xuICAgICAgICBpZiAoYWx0cyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgYWx0cyA9IG5ldyBCaXRTZXQoKTtcbiAgICAgICAgICAgIG0ucHV0KGMuc3RhdGUsIGFsdHMpO1xuICAgICAgICB9XG4gICAgICAgIGFsdHMuYWRkKGMuYWx0KTtcbiAgICB9KTtcbiAgICByZXR1cm4gbTtcbn07XG5cblByZWRpY3Rpb25Nb2RlLmhhc1N0YXRlQXNzb2NpYXRlZFdpdGhPbmVBbHQgPSBmdW5jdGlvbihjb25maWdzKSB7XG4gICAgdmFyIHZhbHVlcyA9IFByZWRpY3Rpb25Nb2RlLmdldFN0YXRlVG9BbHRNYXAoY29uZmlncykudmFsdWVzKCk7XG4gICAgZm9yKHZhciBpPTA7aTx2YWx1ZXMubGVuZ3RoO2krKykge1xuICAgICAgICBpZiAodmFsdWVzW2ldLmxlbmd0aD09PTEpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cblByZWRpY3Rpb25Nb2RlLmdldFNpbmdsZVZpYWJsZUFsdCA9IGZ1bmN0aW9uKGFsdHNldHMpIHtcbiAgICB2YXIgcmVzdWx0ID0gbnVsbDtcblx0Zm9yKHZhciBpPTA7aTxhbHRzZXRzLmxlbmd0aDtpKyspIHtcblx0XHR2YXIgYWx0cyA9IGFsdHNldHNbaV07XG4gICAgICAgIHZhciBtaW5BbHQgPSBhbHRzLm1pblZhbHVlKCk7XG4gICAgICAgIGlmKHJlc3VsdD09PW51bGwpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IG1pbkFsdDtcbiAgICAgICAgfSBlbHNlIGlmKHJlc3VsdCE9PW1pbkFsdCkgeyAvLyBtb3JlIHRoYW4gMSB2aWFibGUgYWx0XG4gICAgICAgICAgICByZXR1cm4gQVROLklOVkFMSURfQUxUX05VTUJFUjtcbiAgICAgICAgfVxuXHR9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydHMuUHJlZGljdGlvbk1vZGUgPSBQcmVkaWN0aW9uTW9kZTtcbiIsIi8vXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vL1xuXG4vLyBBIHRyZWUgc3RydWN0dXJlIHVzZWQgdG8gcmVjb3JkIHRoZSBzZW1hbnRpYyBjb250ZXh0IGluIHdoaWNoXG4vLyAgYW4gQVROIGNvbmZpZ3VyYXRpb24gaXMgdmFsaWQuICBJdCdzIGVpdGhlciBhIHNpbmdsZSBwcmVkaWNhdGUsXG4vLyAgYSBjb25qdW5jdGlvbiB7QGNvZGUgcDEmJnAyfSwgb3IgYSBzdW0gb2YgcHJvZHVjdHMge0Bjb2RlIHAxfHxwMn0uXG4vL1xuLy8gIDxwPkkgaGF2ZSBzY29wZWQgdGhlIHtAbGluayBBTkR9LCB7QGxpbmsgT1J9LCBhbmQge0BsaW5rIFByZWRpY2F0ZX0gc3ViY2xhc3NlcyBvZlxuLy8gIHtAbGluayBTZW1hbnRpY0NvbnRleHR9IHdpdGhpbiB0aGUgc2NvcGUgb2YgdGhpcyBvdXRlciBjbGFzcy48L3A+XG4vL1xuXG52YXIgU2V0ID0gcmVxdWlyZSgnLi8uLi9VdGlscycpLlNldDtcbnZhciBIYXNoID0gcmVxdWlyZSgnLi8uLi9VdGlscycpLkhhc2g7XG5cbmZ1bmN0aW9uIFNlbWFudGljQ29udGV4dCgpIHtcblx0cmV0dXJuIHRoaXM7XG59XG5cblNlbWFudGljQ29udGV4dC5wcm90b3R5cGUuaGFzaENvZGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgaGFzaCA9IG5ldyBIYXNoKCk7XG4gICAgdGhpcy51cGRhdGVIYXNoQ29kZShoYXNoKTtcbiAgICByZXR1cm4gaGFzaC5maW5pc2goKTtcbn07XG5cbi8vIEZvciBjb250ZXh0IGluZGVwZW5kZW50IHByZWRpY2F0ZXMsIHdlIGV2YWx1YXRlIHRoZW0gd2l0aG91dCBhIGxvY2FsXG4vLyBjb250ZXh0IChpLmUuLCBudWxsIGNvbnRleHQpLiBUaGF0IHdheSwgd2UgY2FuIGV2YWx1YXRlIHRoZW0gd2l0aG91dFxuLy8gaGF2aW5nIHRvIGNyZWF0ZSBwcm9wZXIgcnVsZS1zcGVjaWZpYyBjb250ZXh0IGR1cmluZyBwcmVkaWN0aW9uIChhc1xuLy8gb3Bwb3NlZCB0byB0aGUgcGFyc2VyLCB3aGljaCBjcmVhdGVzIHRoZW0gbmF0dXJhbGx5KS4gSW4gYSBwcmFjdGljYWxcbi8vIHNlbnNlLCB0aGlzIGF2b2lkcyBhIGNhc3QgZXhjZXB0aW9uIGZyb20gUnVsZUNvbnRleHQgdG8gbXlydWxlQ29udGV4dC5cbi8vXG4vLyA8cD5Gb3IgY29udGV4dCBkZXBlbmRlbnQgcHJlZGljYXRlcywgd2UgbXVzdCBwYXNzIGluIGEgbG9jYWwgY29udGV4dCBzbyB0aGF0XG4vLyByZWZlcmVuY2VzIHN1Y2ggYXMgJGFyZyBldmFsdWF0ZSBwcm9wZXJseSBhcyBfbG9jYWxjdHguYXJnLiBXZSBvbmx5XG4vLyBjYXB0dXJlIGNvbnRleHQgZGVwZW5kZW50IHByZWRpY2F0ZXMgaW4gdGhlIGNvbnRleHQgaW4gd2hpY2ggd2UgYmVnaW5cbi8vIHByZWRpY3Rpb24sIHNvIHdlIHBhc3NlZCBpbiB0aGUgb3V0ZXIgY29udGV4dCBoZXJlIGluIGNhc2Ugb2YgY29udGV4dFxuLy8gZGVwZW5kZW50IHByZWRpY2F0ZSBldmFsdWF0aW9uLjwvcD5cbi8vXG5TZW1hbnRpY0NvbnRleHQucHJvdG90eXBlLmV2YWx1YXRlID0gZnVuY3Rpb24ocGFyc2VyLCBvdXRlckNvbnRleHQpIHtcbn07XG5cbi8vXG4vLyBFdmFsdWF0ZSB0aGUgcHJlY2VkZW5jZSBwcmVkaWNhdGVzIGZvciB0aGUgY29udGV4dCBhbmQgcmVkdWNlIHRoZSByZXN1bHQuXG4vL1xuLy8gQHBhcmFtIHBhcnNlciBUaGUgcGFyc2VyIGluc3RhbmNlLlxuLy8gQHBhcmFtIG91dGVyQ29udGV4dCBUaGUgY3VycmVudCBwYXJzZXIgY29udGV4dCBvYmplY3QuXG4vLyBAcmV0dXJuIFRoZSBzaW1wbGlmaWVkIHNlbWFudGljIGNvbnRleHQgYWZ0ZXIgcHJlY2VkZW5jZSBwcmVkaWNhdGVzIGFyZVxuLy8gZXZhbHVhdGVkLCB3aGljaCB3aWxsIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlcy5cbi8vIDx1bD5cbi8vIDxsaT57QGxpbmsgLy9OT05FfTogaWYgdGhlIHByZWRpY2F0ZSBzaW1wbGlmaWVzIHRvIHtAY29kZSB0cnVlfSBhZnRlclxuLy8gcHJlY2VkZW5jZSBwcmVkaWNhdGVzIGFyZSBldmFsdWF0ZWQuPC9saT5cbi8vIDxsaT57QGNvZGUgbnVsbH06IGlmIHRoZSBwcmVkaWNhdGUgc2ltcGxpZmllcyB0byB7QGNvZGUgZmFsc2V9IGFmdGVyXG4vLyBwcmVjZWRlbmNlIHByZWRpY2F0ZXMgYXJlIGV2YWx1YXRlZC48L2xpPlxuLy8gPGxpPntAY29kZSB0aGlzfTogaWYgdGhlIHNlbWFudGljIGNvbnRleHQgaXMgbm90IGNoYW5nZWQgYXMgYSByZXN1bHQgb2Zcbi8vIHByZWNlZGVuY2UgcHJlZGljYXRlIGV2YWx1YXRpb24uPC9saT5cbi8vIDxsaT5BIG5vbi17QGNvZGUgbnVsbH0ge0BsaW5rIFNlbWFudGljQ29udGV4dH06IHRoZSBuZXcgc2ltcGxpZmllZFxuLy8gc2VtYW50aWMgY29udGV4dCBhZnRlciBwcmVjZWRlbmNlIHByZWRpY2F0ZXMgYXJlIGV2YWx1YXRlZC48L2xpPlxuLy8gPC91bD5cbi8vXG5TZW1hbnRpY0NvbnRleHQucHJvdG90eXBlLmV2YWxQcmVjZWRlbmNlID0gZnVuY3Rpb24ocGFyc2VyLCBvdXRlckNvbnRleHQpIHtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5TZW1hbnRpY0NvbnRleHQuYW5kQ29udGV4dCA9IGZ1bmN0aW9uKGEsIGIpIHtcblx0aWYgKGEgPT09IG51bGwgfHwgYSA9PT0gU2VtYW50aWNDb250ZXh0Lk5PTkUpIHtcblx0XHRyZXR1cm4gYjtcblx0fVxuXHRpZiAoYiA9PT0gbnVsbCB8fCBiID09PSBTZW1hbnRpY0NvbnRleHQuTk9ORSkge1xuXHRcdHJldHVybiBhO1xuXHR9XG5cdHZhciByZXN1bHQgPSBuZXcgQU5EKGEsIGIpO1xuXHRpZiAocmVzdWx0Lm9wbmRzLmxlbmd0aCA9PT0gMSkge1xuXHRcdHJldHVybiByZXN1bHQub3BuZHNbMF07XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxufTtcblxuU2VtYW50aWNDb250ZXh0Lm9yQ29udGV4dCA9IGZ1bmN0aW9uKGEsIGIpIHtcblx0aWYgKGEgPT09IG51bGwpIHtcblx0XHRyZXR1cm4gYjtcblx0fVxuXHRpZiAoYiA9PT0gbnVsbCkge1xuXHRcdHJldHVybiBhO1xuXHR9XG5cdGlmIChhID09PSBTZW1hbnRpY0NvbnRleHQuTk9ORSB8fCBiID09PSBTZW1hbnRpY0NvbnRleHQuTk9ORSkge1xuXHRcdHJldHVybiBTZW1hbnRpY0NvbnRleHQuTk9ORTtcblx0fVxuXHR2YXIgcmVzdWx0ID0gbmV3IE9SKGEsIGIpO1xuXHRpZiAocmVzdWx0Lm9wbmRzLmxlbmd0aCA9PT0gMSkge1xuXHRcdHJldHVybiByZXN1bHQub3BuZHNbMF07XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxufTtcblxuZnVuY3Rpb24gUHJlZGljYXRlKHJ1bGVJbmRleCwgcHJlZEluZGV4LCBpc0N0eERlcGVuZGVudCkge1xuXHRTZW1hbnRpY0NvbnRleHQuY2FsbCh0aGlzKTtcblx0dGhpcy5ydWxlSW5kZXggPSBydWxlSW5kZXggPT09IHVuZGVmaW5lZCA/IC0xIDogcnVsZUluZGV4O1xuXHR0aGlzLnByZWRJbmRleCA9IHByZWRJbmRleCA9PT0gdW5kZWZpbmVkID8gLTEgOiBwcmVkSW5kZXg7XG5cdHRoaXMuaXNDdHhEZXBlbmRlbnQgPSBpc0N0eERlcGVuZGVudCA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBpc0N0eERlcGVuZGVudDsgLy8gZS5nLiwgJGkgcmVmIGluIHByZWRcblx0cmV0dXJuIHRoaXM7XG59XG5cblByZWRpY2F0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNlbWFudGljQ29udGV4dC5wcm90b3R5cGUpO1xuUHJlZGljYXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByZWRpY2F0ZTtcblxuLy9UaGUgZGVmYXVsdCB7QGxpbmsgU2VtYW50aWNDb250ZXh0fSwgd2hpY2ggaXMgc2VtYW50aWNhbGx5IGVxdWl2YWxlbnQgdG9cbi8vYSBwcmVkaWNhdGUgb2YgdGhlIGZvcm0ge0Bjb2RlIHt0cnVlfT99LlxuLy9cblNlbWFudGljQ29udGV4dC5OT05FID0gbmV3IFByZWRpY2F0ZSgpO1xuXG5cblByZWRpY2F0ZS5wcm90b3R5cGUuZXZhbHVhdGUgPSBmdW5jdGlvbihwYXJzZXIsIG91dGVyQ29udGV4dCkge1xuXHR2YXIgbG9jYWxjdHggPSB0aGlzLmlzQ3R4RGVwZW5kZW50ID8gb3V0ZXJDb250ZXh0IDogbnVsbDtcblx0cmV0dXJuIHBhcnNlci5zZW1wcmVkKGxvY2FsY3R4LCB0aGlzLnJ1bGVJbmRleCwgdGhpcy5wcmVkSW5kZXgpO1xufTtcblxuUHJlZGljYXRlLnByb3RvdHlwZS51cGRhdGVIYXNoQ29kZSA9IGZ1bmN0aW9uKGhhc2gpIHtcblx0aGFzaC51cGRhdGUodGhpcy5ydWxlSW5kZXgsIHRoaXMucHJlZEluZGV4LCB0aGlzLmlzQ3R4RGVwZW5kZW50KTtcbn07XG5cblByZWRpY2F0ZS5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24ob3RoZXIpIHtcblx0aWYgKHRoaXMgPT09IG90aGVyKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSBpZiAoIShvdGhlciBpbnN0YW5jZW9mIFByZWRpY2F0ZSkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHRoaXMucnVsZUluZGV4ID09PSBvdGhlci5ydWxlSW5kZXggJiZcblx0XHRcdFx0dGhpcy5wcmVkSW5kZXggPT09IG90aGVyLnByZWRJbmRleCAmJlxuXHRcdFx0XHR0aGlzLmlzQ3R4RGVwZW5kZW50ID09PSBvdGhlci5pc0N0eERlcGVuZGVudDtcblx0fVxufTtcblxuUHJlZGljYXRlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gXCJ7XCIgKyB0aGlzLnJ1bGVJbmRleCArIFwiOlwiICsgdGhpcy5wcmVkSW5kZXggKyBcIn0/XCI7XG59O1xuXG5mdW5jdGlvbiBQcmVjZWRlbmNlUHJlZGljYXRlKHByZWNlZGVuY2UpIHtcblx0U2VtYW50aWNDb250ZXh0LmNhbGwodGhpcyk7XG5cdHRoaXMucHJlY2VkZW5jZSA9IHByZWNlZGVuY2UgPT09IHVuZGVmaW5lZCA/IDAgOiBwcmVjZWRlbmNlO1xufVxuXG5QcmVjZWRlbmNlUHJlZGljYXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2VtYW50aWNDb250ZXh0LnByb3RvdHlwZSk7XG5QcmVjZWRlbmNlUHJlZGljYXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByZWNlZGVuY2VQcmVkaWNhdGU7XG5cblByZWNlZGVuY2VQcmVkaWNhdGUucHJvdG90eXBlLmV2YWx1YXRlID0gZnVuY3Rpb24ocGFyc2VyLCBvdXRlckNvbnRleHQpIHtcblx0cmV0dXJuIHBhcnNlci5wcmVjcHJlZChvdXRlckNvbnRleHQsIHRoaXMucHJlY2VkZW5jZSk7XG59O1xuXG5QcmVjZWRlbmNlUHJlZGljYXRlLnByb3RvdHlwZS5ldmFsUHJlY2VkZW5jZSA9IGZ1bmN0aW9uKHBhcnNlciwgb3V0ZXJDb250ZXh0KSB7XG5cdGlmIChwYXJzZXIucHJlY3ByZWQob3V0ZXJDb250ZXh0LCB0aGlzLnByZWNlZGVuY2UpKSB7XG5cdFx0cmV0dXJuIFNlbWFudGljQ29udGV4dC5OT05FO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG59O1xuXG5QcmVjZWRlbmNlUHJlZGljYXRlLnByb3RvdHlwZS5jb21wYXJlVG8gPSBmdW5jdGlvbihvdGhlcikge1xuXHRyZXR1cm4gdGhpcy5wcmVjZWRlbmNlIC0gb3RoZXIucHJlY2VkZW5jZTtcbn07XG5cblByZWNlZGVuY2VQcmVkaWNhdGUucHJvdG90eXBlLnVwZGF0ZUhhc2hDb2RlID0gZnVuY3Rpb24oaGFzaCkge1xuICAgIGhhc2gudXBkYXRlKDMxKTtcbn07XG5cblByZWNlZGVuY2VQcmVkaWNhdGUucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uKG90aGVyKSB7XG5cdGlmICh0aGlzID09PSBvdGhlcikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGVsc2UgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBQcmVjZWRlbmNlUHJlZGljYXRlKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdGhpcy5wcmVjZWRlbmNlID09PSBvdGhlci5wcmVjZWRlbmNlO1xuXHR9XG59O1xuXG5QcmVjZWRlbmNlUHJlZGljYXRlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gXCJ7XCIrdGhpcy5wcmVjZWRlbmNlK1wiPj1wcmVjfT9cIjtcbn07XG5cblxuXG5QcmVjZWRlbmNlUHJlZGljYXRlLmZpbHRlclByZWNlZGVuY2VQcmVkaWNhdGVzID0gZnVuY3Rpb24oc2V0KSB7XG5cdHZhciByZXN1bHQgPSBbXTtcblx0c2V0LnZhbHVlcygpLm1hcCggZnVuY3Rpb24oY29udGV4dCkge1xuXHRcdGlmIChjb250ZXh0IGluc3RhbmNlb2YgUHJlY2VkZW5jZVByZWRpY2F0ZSkge1xuXHRcdFx0cmVzdWx0LnB1c2goY29udGV4dCk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIHJlc3VsdDtcbn07XG5cblxuLy8gQSBzZW1hbnRpYyBjb250ZXh0IHdoaWNoIGlzIHRydWUgd2hlbmV2ZXIgbm9uZSBvZiB0aGUgY29udGFpbmVkIGNvbnRleHRzXG4vLyBpcyBmYWxzZS5cbi8vXG5mdW5jdGlvbiBBTkQoYSwgYikge1xuXHRTZW1hbnRpY0NvbnRleHQuY2FsbCh0aGlzKTtcblx0dmFyIG9wZXJhbmRzID0gbmV3IFNldCgpO1xuXHRpZiAoYSBpbnN0YW5jZW9mIEFORCkge1xuXHRcdGEub3BuZHMubWFwKGZ1bmN0aW9uKG8pIHtcblx0XHRcdG9wZXJhbmRzLmFkZChvKTtcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvcGVyYW5kcy5hZGQoYSk7XG5cdH1cblx0aWYgKGIgaW5zdGFuY2VvZiBBTkQpIHtcblx0XHRiLm9wbmRzLm1hcChmdW5jdGlvbihvKSB7XG5cdFx0XHRvcGVyYW5kcy5hZGQobyk7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0b3BlcmFuZHMuYWRkKGIpO1xuXHR9XG5cdHZhciBwcmVjZWRlbmNlUHJlZGljYXRlcyA9IFByZWNlZGVuY2VQcmVkaWNhdGUuZmlsdGVyUHJlY2VkZW5jZVByZWRpY2F0ZXMob3BlcmFuZHMpO1xuXHRpZiAocHJlY2VkZW5jZVByZWRpY2F0ZXMubGVuZ3RoID4gMCkge1xuXHRcdC8vIGludGVyZXN0ZWQgaW4gdGhlIHRyYW5zaXRpb24gd2l0aCB0aGUgbG93ZXN0IHByZWNlZGVuY2Vcblx0XHR2YXIgcmVkdWNlZCA9IG51bGw7XG5cdFx0cHJlY2VkZW5jZVByZWRpY2F0ZXMubWFwKCBmdW5jdGlvbihwKSB7XG5cdFx0XHRpZihyZWR1Y2VkPT09bnVsbCB8fCBwLnByZWNlZGVuY2U8cmVkdWNlZC5wcmVjZWRlbmNlKSB7XG5cdFx0XHRcdHJlZHVjZWQgPSBwO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdG9wZXJhbmRzLmFkZChyZWR1Y2VkKTtcblx0fVxuXHR0aGlzLm9wbmRzID0gb3BlcmFuZHMudmFsdWVzKCk7XG5cdHJldHVybiB0aGlzO1xufVxuXG5BTkQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTZW1hbnRpY0NvbnRleHQucHJvdG90eXBlKTtcbkFORC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBTkQ7XG5cbkFORC5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24ob3RoZXIpIHtcblx0aWYgKHRoaXMgPT09IG90aGVyKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSBpZiAoIShvdGhlciBpbnN0YW5jZW9mIEFORCkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHRoaXMub3BuZHMgPT09IG90aGVyLm9wbmRzO1xuXHR9XG59O1xuXG5BTkQucHJvdG90eXBlLnVwZGF0ZUhhc2hDb2RlID0gZnVuY3Rpb24oaGFzaCkge1xuICAgIGhhc2gudXBkYXRlKHRoaXMub3BuZHMsIFwiQU5EXCIpO1xufTtcbi8vXG4vLyB7QGluaGVyaXREb2N9XG4vL1xuLy8gPHA+XG4vLyBUaGUgZXZhbHVhdGlvbiBvZiBwcmVkaWNhdGVzIGJ5IHRoaXMgY29udGV4dCBpcyBzaG9ydC1jaXJjdWl0aW5nLCBidXRcbi8vIHVub3JkZXJlZC48L3A+XG4vL1xuQU5ELnByb3RvdHlwZS5ldmFsdWF0ZSA9IGZ1bmN0aW9uKHBhcnNlciwgb3V0ZXJDb250ZXh0KSB7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5vcG5kcy5sZW5ndGg7IGkrKykge1xuXHRcdGlmICghdGhpcy5vcG5kc1tpXS5ldmFsdWF0ZShwYXJzZXIsIG91dGVyQ29udGV4dCkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHRydWU7XG59O1xuXG5BTkQucHJvdG90eXBlLmV2YWxQcmVjZWRlbmNlID0gZnVuY3Rpb24ocGFyc2VyLCBvdXRlckNvbnRleHQpIHtcblx0dmFyIGRpZmZlcnMgPSBmYWxzZTtcblx0dmFyIG9wZXJhbmRzID0gW107XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5vcG5kcy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBjb250ZXh0ID0gdGhpcy5vcG5kc1tpXTtcblx0XHR2YXIgZXZhbHVhdGVkID0gY29udGV4dC5ldmFsUHJlY2VkZW5jZShwYXJzZXIsIG91dGVyQ29udGV4dCk7XG5cdFx0ZGlmZmVycyB8PSAoZXZhbHVhdGVkICE9PSBjb250ZXh0KTtcblx0XHRpZiAoZXZhbHVhdGVkID09PSBudWxsKSB7XG5cdFx0XHQvLyBUaGUgQU5EIGNvbnRleHQgaXMgZmFsc2UgaWYgYW55IGVsZW1lbnQgaXMgZmFsc2Vcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH0gZWxzZSBpZiAoZXZhbHVhdGVkICE9PSBTZW1hbnRpY0NvbnRleHQuTk9ORSkge1xuXHRcdFx0Ly8gUmVkdWNlIHRoZSByZXN1bHQgYnkgc2tpcHBpbmcgdHJ1ZSBlbGVtZW50c1xuXHRcdFx0b3BlcmFuZHMucHVzaChldmFsdWF0ZWQpO1xuXHRcdH1cblx0fVxuXHRpZiAoIWRpZmZlcnMpIHtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHRpZiAob3BlcmFuZHMubGVuZ3RoID09PSAwKSB7XG5cdFx0Ly8gYWxsIGVsZW1lbnRzIHdlcmUgdHJ1ZSwgc28gdGhlIEFORCBjb250ZXh0IGlzIHRydWVcblx0XHRyZXR1cm4gU2VtYW50aWNDb250ZXh0Lk5PTkU7XG5cdH1cblx0dmFyIHJlc3VsdCA9IG51bGw7XG5cdG9wZXJhbmRzLm1hcChmdW5jdGlvbihvKSB7XG5cdFx0cmVzdWx0ID0gcmVzdWx0ID09PSBudWxsID8gbyA6IFNlbWFudGljQ29udGV4dC5hbmRDb250ZXh0KHJlc3VsdCwgbyk7XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcblxuQU5ELnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgcyA9IFwiXCI7XG5cdHRoaXMub3BuZHMubWFwKGZ1bmN0aW9uKG8pIHtcblx0XHRzICs9IFwiJiYgXCIgKyBvLnRvU3RyaW5nKCk7XG5cdH0pO1xuXHRyZXR1cm4gcy5sZW5ndGggPiAzID8gcy5zbGljZSgzKSA6IHM7XG59O1xuXG4vL1xuLy8gQSBzZW1hbnRpYyBjb250ZXh0IHdoaWNoIGlzIHRydWUgd2hlbmV2ZXIgYXQgbGVhc3Qgb25lIG9mIHRoZSBjb250YWluZWRcbi8vIGNvbnRleHRzIGlzIHRydWUuXG4vL1xuZnVuY3Rpb24gT1IoYSwgYikge1xuXHRTZW1hbnRpY0NvbnRleHQuY2FsbCh0aGlzKTtcblx0dmFyIG9wZXJhbmRzID0gbmV3IFNldCgpO1xuXHRpZiAoYSBpbnN0YW5jZW9mIE9SKSB7XG5cdFx0YS5vcG5kcy5tYXAoZnVuY3Rpb24obykge1xuXHRcdFx0b3BlcmFuZHMuYWRkKG8pO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG9wZXJhbmRzLmFkZChhKTtcblx0fVxuXHRpZiAoYiBpbnN0YW5jZW9mIE9SKSB7XG5cdFx0Yi5vcG5kcy5tYXAoZnVuY3Rpb24obykge1xuXHRcdFx0b3BlcmFuZHMuYWRkKG8pO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG9wZXJhbmRzLmFkZChiKTtcblx0fVxuXG5cdHZhciBwcmVjZWRlbmNlUHJlZGljYXRlcyA9IFByZWNlZGVuY2VQcmVkaWNhdGUuZmlsdGVyUHJlY2VkZW5jZVByZWRpY2F0ZXMob3BlcmFuZHMpO1xuXHRpZiAocHJlY2VkZW5jZVByZWRpY2F0ZXMubGVuZ3RoID4gMCkge1xuXHRcdC8vIGludGVyZXN0ZWQgaW4gdGhlIHRyYW5zaXRpb24gd2l0aCB0aGUgaGlnaGVzdCBwcmVjZWRlbmNlXG5cdFx0dmFyIHMgPSBwcmVjZWRlbmNlUHJlZGljYXRlcy5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcblx0XHRcdHJldHVybiBhLmNvbXBhcmVUbyhiKTtcblx0XHR9KTtcblx0XHR2YXIgcmVkdWNlZCA9IHNbcy5sZW5ndGgtMV07XG5cdFx0b3BlcmFuZHMuYWRkKHJlZHVjZWQpO1xuXHR9XG5cdHRoaXMub3BuZHMgPSBvcGVyYW5kcy52YWx1ZXMoKTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbk9SLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2VtYW50aWNDb250ZXh0LnByb3RvdHlwZSk7XG5PUi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBPUjtcblxuT1IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gZnVuY3Rpb24ob3RoZXIpIHtcblx0aWYgKHRoaXMgPT09IG90aGVyKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSBpZiAoIShvdGhlciBpbnN0YW5jZW9mIE9SKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdGhpcy5vcG5kcyA9PT0gb3RoZXIub3BuZHM7XG5cdH1cbn07XG5cbk9SLnByb3RvdHlwZS51cGRhdGVIYXNoQ29kZSA9IGZ1bmN0aW9uKGhhc2gpIHtcbiAgICBoYXNoLnVwZGF0ZSh0aGlzLm9wbmRzLCBcIk9SXCIpO1xufTtcblxuLy8gPHA+XG4vLyBUaGUgZXZhbHVhdGlvbiBvZiBwcmVkaWNhdGVzIGJ5IHRoaXMgY29udGV4dCBpcyBzaG9ydC1jaXJjdWl0aW5nLCBidXRcbi8vIHVub3JkZXJlZC48L3A+XG4vL1xuT1IucHJvdG90eXBlLmV2YWx1YXRlID0gZnVuY3Rpb24ocGFyc2VyLCBvdXRlckNvbnRleHQpIHtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm9wbmRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0aWYgKHRoaXMub3BuZHNbaV0uZXZhbHVhdGUocGFyc2VyLCBvdXRlckNvbnRleHQpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcblxuT1IucHJvdG90eXBlLmV2YWxQcmVjZWRlbmNlID0gZnVuY3Rpb24ocGFyc2VyLCBvdXRlckNvbnRleHQpIHtcblx0dmFyIGRpZmZlcnMgPSBmYWxzZTtcblx0dmFyIG9wZXJhbmRzID0gW107XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5vcG5kcy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBjb250ZXh0ID0gdGhpcy5vcG5kc1tpXTtcblx0XHR2YXIgZXZhbHVhdGVkID0gY29udGV4dC5ldmFsUHJlY2VkZW5jZShwYXJzZXIsIG91dGVyQ29udGV4dCk7XG5cdFx0ZGlmZmVycyB8PSAoZXZhbHVhdGVkICE9PSBjb250ZXh0KTtcblx0XHRpZiAoZXZhbHVhdGVkID09PSBTZW1hbnRpY0NvbnRleHQuTk9ORSkge1xuXHRcdFx0Ly8gVGhlIE9SIGNvbnRleHQgaXMgdHJ1ZSBpZiBhbnkgZWxlbWVudCBpcyB0cnVlXG5cdFx0XHRyZXR1cm4gU2VtYW50aWNDb250ZXh0Lk5PTkU7XG5cdFx0fSBlbHNlIGlmIChldmFsdWF0ZWQgIT09IG51bGwpIHtcblx0XHRcdC8vIFJlZHVjZSB0aGUgcmVzdWx0IGJ5IHNraXBwaW5nIGZhbHNlIGVsZW1lbnRzXG5cdFx0XHRvcGVyYW5kcy5wdXNoKGV2YWx1YXRlZCk7XG5cdFx0fVxuXHR9XG5cdGlmICghZGlmZmVycykge1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdGlmIChvcGVyYW5kcy5sZW5ndGggPT09IDApIHtcblx0XHQvLyBhbGwgZWxlbWVudHMgd2VyZSBmYWxzZSwgc28gdGhlIE9SIGNvbnRleHQgaXMgZmFsc2Vcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHR2YXIgcmVzdWx0ID0gbnVsbDtcblx0b3BlcmFuZHMubWFwKGZ1bmN0aW9uKG8pIHtcblx0XHRyZXR1cm4gcmVzdWx0ID09PSBudWxsID8gbyA6IFNlbWFudGljQ29udGV4dC5vckNvbnRleHQocmVzdWx0LCBvKTtcblx0fSk7XG5cdHJldHVybiByZXN1bHQ7XG59O1xuXG5PUi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0dmFyIHMgPSBcIlwiO1xuXHR0aGlzLm9wbmRzLm1hcChmdW5jdGlvbihvKSB7XG5cdFx0cyArPSBcInx8IFwiICsgby50b1N0cmluZygpO1xuXHR9KTtcblx0cmV0dXJuIHMubGVuZ3RoID4gMyA/IHMuc2xpY2UoMykgOiBzO1xufTtcblxuZXhwb3J0cy5TZW1hbnRpY0NvbnRleHQgPSBTZW1hbnRpY0NvbnRleHQ7XG5leHBvcnRzLlByZWNlZGVuY2VQcmVkaWNhdGUgPSBQcmVjZWRlbmNlUHJlZGljYXRlO1xuZXhwb3J0cy5QcmVkaWNhdGUgPSBQcmVkaWNhdGU7XG4iLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vL1xuXG4vLyAgQW4gQVROIHRyYW5zaXRpb24gYmV0d2VlbiBhbnkgdHdvIEFUTiBzdGF0ZXMuICBTdWJjbGFzc2VzIGRlZmluZVxuLy8gIGF0b20sIHNldCwgZXBzaWxvbiwgYWN0aW9uLCBwcmVkaWNhdGUsIHJ1bGUgdHJhbnNpdGlvbnMuXG4vL1xuLy8gIDxwPlRoaXMgaXMgYSBvbmUgd2F5IGxpbmsuICBJdCBlbWFuYXRlcyBmcm9tIGEgc3RhdGUgKHVzdWFsbHkgdmlhIGEgbGlzdCBvZlxuLy8gIHRyYW5zaXRpb25zKSBhbmQgaGFzIGEgdGFyZ2V0IHN0YXRlLjwvcD5cbi8vXG4vLyAgPHA+U2luY2Ugd2UgbmV2ZXIgaGF2ZSB0byBjaGFuZ2UgdGhlIEFUTiB0cmFuc2l0aW9ucyBvbmNlIHdlIGNvbnN0cnVjdCBpdCxcbi8vICB3ZSBjYW4gZml4IHRoZXNlIHRyYW5zaXRpb25zIGFzIHNwZWNpZmljIGNsYXNzZXMuIFRoZSBERkEgdHJhbnNpdGlvbnNcbi8vICBvbiB0aGUgb3RoZXIgaGFuZCBuZWVkIHRvIHVwZGF0ZSB0aGUgbGFiZWxzIGFzIGl0IGFkZHMgdHJhbnNpdGlvbnMgdG9cbi8vICB0aGUgc3RhdGVzLiBXZSdsbCB1c2UgdGhlIHRlcm0gRWRnZSBmb3IgdGhlIERGQSB0byBkaXN0aW5ndWlzaCB0aGVtIGZyb21cbi8vICBBVE4gdHJhbnNpdGlvbnMuPC9wPlxuXG52YXIgVG9rZW4gPSByZXF1aXJlKCcuLy4uL1Rva2VuJykuVG9rZW47XG52YXIgSW50ZXJ2YWwgPSByZXF1aXJlKCcuLy4uL0ludGVydmFsU2V0JykuSW50ZXJ2YWw7XG52YXIgSW50ZXJ2YWxTZXQgPSByZXF1aXJlKCcuLy4uL0ludGVydmFsU2V0JykuSW50ZXJ2YWxTZXQ7XG52YXIgUHJlZGljYXRlID0gcmVxdWlyZSgnLi9TZW1hbnRpY0NvbnRleHQnKS5QcmVkaWNhdGU7XG52YXIgUHJlY2VkZW5jZVByZWRpY2F0ZSA9IHJlcXVpcmUoJy4vU2VtYW50aWNDb250ZXh0JykuUHJlY2VkZW5jZVByZWRpY2F0ZTtcblxuZnVuY3Rpb24gVHJhbnNpdGlvbiAodGFyZ2V0KSB7XG4gICAgLy8gVGhlIHRhcmdldCBvZiB0aGlzIHRyYW5zaXRpb24uXG4gICAgaWYgKHRhcmdldD09PXVuZGVmaW5lZCB8fCB0YXJnZXQ9PT1udWxsKSB7XG4gICAgICAgIHRocm93IFwidGFyZ2V0IGNhbm5vdCBiZSBudWxsLlwiO1xuICAgIH1cbiAgICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgICAvLyBBcmUgd2UgZXBzaWxvbiwgYWN0aW9uLCBzZW1wcmVkP1xuICAgIHRoaXMuaXNFcHNpbG9uID0gZmFsc2U7XG4gICAgdGhpcy5sYWJlbCA9IG51bGw7XG4gICAgcmV0dXJuIHRoaXM7XG59XG4gICAgLy8gY29uc3RhbnRzIGZvciBzZXJpYWxpemF0aW9uXG5UcmFuc2l0aW9uLkVQU0lMT04gPSAxO1xuVHJhbnNpdGlvbi5SQU5HRSA9IDI7XG5UcmFuc2l0aW9uLlJVTEUgPSAzO1xuVHJhbnNpdGlvbi5QUkVESUNBVEUgPSA0OyAvLyBlLmcuLCB7aXNUeXBlKGlucHV0LkxUKDEpKX0/XG5UcmFuc2l0aW9uLkFUT00gPSA1O1xuVHJhbnNpdGlvbi5BQ1RJT04gPSA2O1xuVHJhbnNpdGlvbi5TRVQgPSA3OyAvLyB+KEF8Qikgb3IgfmF0b20sIHdpbGRjYXJkLCB3aGljaCBjb252ZXJ0IHRvIG5leHQgMlxuVHJhbnNpdGlvbi5OT1RfU0VUID0gODtcblRyYW5zaXRpb24uV0lMRENBUkQgPSA5O1xuVHJhbnNpdGlvbi5QUkVDRURFTkNFID0gMTA7XG5cblRyYW5zaXRpb24uc2VyaWFsaXphdGlvbk5hbWVzID0gW1xuICAgICAgICAgICAgXCJJTlZBTElEXCIsXG4gICAgICAgICAgICBcIkVQU0lMT05cIixcbiAgICAgICAgICAgIFwiUkFOR0VcIixcbiAgICAgICAgICAgIFwiUlVMRVwiLFxuICAgICAgICAgICAgXCJQUkVESUNBVEVcIixcbiAgICAgICAgICAgIFwiQVRPTVwiLFxuICAgICAgICAgICAgXCJBQ1RJT05cIixcbiAgICAgICAgICAgIFwiU0VUXCIsXG4gICAgICAgICAgICBcIk5PVF9TRVRcIixcbiAgICAgICAgICAgIFwiV0lMRENBUkRcIixcbiAgICAgICAgICAgIFwiUFJFQ0VERU5DRVwiXG4gICAgICAgIF07XG5cblRyYW5zaXRpb24uc2VyaWFsaXphdGlvblR5cGVzID0ge1xuICAgICAgICBFcHNpbG9uVHJhbnNpdGlvbjogVHJhbnNpdGlvbi5FUFNJTE9OLFxuICAgICAgICBSYW5nZVRyYW5zaXRpb246IFRyYW5zaXRpb24uUkFOR0UsXG4gICAgICAgIFJ1bGVUcmFuc2l0aW9uOiBUcmFuc2l0aW9uLlJVTEUsXG4gICAgICAgIFByZWRpY2F0ZVRyYW5zaXRpb246IFRyYW5zaXRpb24uUFJFRElDQVRFLFxuICAgICAgICBBdG9tVHJhbnNpdGlvbjogVHJhbnNpdGlvbi5BVE9NLFxuICAgICAgICBBY3Rpb25UcmFuc2l0aW9uOiBUcmFuc2l0aW9uLkFDVElPTixcbiAgICAgICAgU2V0VHJhbnNpdGlvbjogVHJhbnNpdGlvbi5TRVQsXG4gICAgICAgIE5vdFNldFRyYW5zaXRpb246IFRyYW5zaXRpb24uTk9UX1NFVCxcbiAgICAgICAgV2lsZGNhcmRUcmFuc2l0aW9uOiBUcmFuc2l0aW9uLldJTERDQVJELFxuICAgICAgICBQcmVjZWRlbmNlUHJlZGljYXRlVHJhbnNpdGlvbjogVHJhbnNpdGlvbi5QUkVDRURFTkNFXG4gICAgfTtcblxuXG4vLyBUT0RPOiBtYWtlIGFsbCB0cmFuc2l0aW9ucyBzZXRzPyBubywgc2hvdWxkIHJlbW92ZSBzZXQgZWRnZXNcbmZ1bmN0aW9uIEF0b21UcmFuc2l0aW9uKHRhcmdldCwgbGFiZWwpIHtcblx0VHJhbnNpdGlvbi5jYWxsKHRoaXMsIHRhcmdldCk7XG5cdHRoaXMubGFiZWxfID0gbGFiZWw7IC8vIFRoZSB0b2tlbiB0eXBlIG9yIGNoYXJhY3RlciB2YWx1ZTsgb3IsIHNpZ25pZmllcyBzcGVjaWFsIGxhYmVsLlxuICAgIHRoaXMubGFiZWwgPSB0aGlzLm1ha2VMYWJlbCgpO1xuICAgIHRoaXMuc2VyaWFsaXphdGlvblR5cGUgPSBUcmFuc2l0aW9uLkFUT007XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkF0b21UcmFuc2l0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVHJhbnNpdGlvbi5wcm90b3R5cGUpO1xuQXRvbVRyYW5zaXRpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQXRvbVRyYW5zaXRpb247XG5cbkF0b21UcmFuc2l0aW9uLnByb3RvdHlwZS5tYWtlTGFiZWwgPSBmdW5jdGlvbigpIHtcblx0dmFyIHMgPSBuZXcgSW50ZXJ2YWxTZXQoKTtcbiAgICBzLmFkZE9uZSh0aGlzLmxhYmVsXyk7XG4gICAgcmV0dXJuIHM7XG59O1xuXG5BdG9tVHJhbnNpdGlvbi5wcm90b3R5cGUubWF0Y2hlcyA9IGZ1bmN0aW9uKCBzeW1ib2wsIG1pblZvY2FiU3ltYm9sLCAgbWF4Vm9jYWJTeW1ib2wpIHtcbiAgICByZXR1cm4gdGhpcy5sYWJlbF8gPT09IHN5bWJvbDtcbn07XG5cbkF0b21UcmFuc2l0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5sYWJlbF87XG59O1xuXG5mdW5jdGlvbiBSdWxlVHJhbnNpdGlvbihydWxlU3RhcnQsIHJ1bGVJbmRleCwgcHJlY2VkZW5jZSwgZm9sbG93U3RhdGUpIHtcblx0VHJhbnNpdGlvbi5jYWxsKHRoaXMsIHJ1bGVTdGFydCk7XG4gICAgdGhpcy5ydWxlSW5kZXggPSBydWxlSW5kZXg7IC8vIHB0ciB0byB0aGUgcnVsZSBkZWZpbml0aW9uIG9iamVjdCBmb3IgdGhpcyBydWxlIHJlZlxuICAgIHRoaXMucHJlY2VkZW5jZSA9IHByZWNlZGVuY2U7XG4gICAgdGhpcy5mb2xsb3dTdGF0ZSA9IGZvbGxvd1N0YXRlOyAvLyB3aGF0IG5vZGUgdG8gYmVnaW4gY29tcHV0YXRpb25zIGZvbGxvd2luZyByZWYgdG8gcnVsZVxuICAgIHRoaXMuc2VyaWFsaXphdGlvblR5cGUgPSBUcmFuc2l0aW9uLlJVTEU7XG4gICAgdGhpcy5pc0Vwc2lsb24gPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5SdWxlVHJhbnNpdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRyYW5zaXRpb24ucHJvdG90eXBlKTtcblJ1bGVUcmFuc2l0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJ1bGVUcmFuc2l0aW9uO1xuXG5SdWxlVHJhbnNpdGlvbi5wcm90b3R5cGUubWF0Y2hlcyA9IGZ1bmN0aW9uKHN5bWJvbCwgbWluVm9jYWJTeW1ib2wsICBtYXhWb2NhYlN5bWJvbCkge1xuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG5cbmZ1bmN0aW9uIEVwc2lsb25UcmFuc2l0aW9uKHRhcmdldCwgb3V0ZXJtb3N0UHJlY2VkZW5jZVJldHVybikge1xuXHRUcmFuc2l0aW9uLmNhbGwodGhpcywgdGFyZ2V0KTtcbiAgICB0aGlzLnNlcmlhbGl6YXRpb25UeXBlID0gVHJhbnNpdGlvbi5FUFNJTE9OO1xuICAgIHRoaXMuaXNFcHNpbG9uID0gdHJ1ZTtcbiAgICB0aGlzLm91dGVybW9zdFByZWNlZGVuY2VSZXR1cm4gPSBvdXRlcm1vc3RQcmVjZWRlbmNlUmV0dXJuO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5FcHNpbG9uVHJhbnNpdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRyYW5zaXRpb24ucHJvdG90eXBlKTtcbkVwc2lsb25UcmFuc2l0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEVwc2lsb25UcmFuc2l0aW9uO1xuXG5FcHNpbG9uVHJhbnNpdGlvbi5wcm90b3R5cGUubWF0Y2hlcyA9IGZ1bmN0aW9uKCBzeW1ib2wsIG1pblZvY2FiU3ltYm9sLCAgbWF4Vm9jYWJTeW1ib2wpIHtcblx0cmV0dXJuIGZhbHNlO1xufTtcblxuRXBzaWxvblRyYW5zaXRpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiBcImVwc2lsb25cIjtcbn07XG5cbmZ1bmN0aW9uIFJhbmdlVHJhbnNpdGlvbih0YXJnZXQsIHN0YXJ0LCBzdG9wKSB7XG5cdFRyYW5zaXRpb24uY2FsbCh0aGlzLCB0YXJnZXQpO1xuXHR0aGlzLnNlcmlhbGl6YXRpb25UeXBlID0gVHJhbnNpdGlvbi5SQU5HRTtcbiAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7XG4gICAgdGhpcy5zdG9wID0gc3RvcDtcbiAgICB0aGlzLmxhYmVsID0gdGhpcy5tYWtlTGFiZWwoKTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuUmFuZ2VUcmFuc2l0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVHJhbnNpdGlvbi5wcm90b3R5cGUpO1xuUmFuZ2VUcmFuc2l0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJhbmdlVHJhbnNpdGlvbjtcblxuUmFuZ2VUcmFuc2l0aW9uLnByb3RvdHlwZS5tYWtlTGFiZWwgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcyA9IG5ldyBJbnRlcnZhbFNldCgpO1xuICAgIHMuYWRkUmFuZ2UodGhpcy5zdGFydCwgdGhpcy5zdG9wKTtcbiAgICByZXR1cm4gcztcbn07XG5cblJhbmdlVHJhbnNpdGlvbi5wcm90b3R5cGUubWF0Y2hlcyA9IGZ1bmN0aW9uKHN5bWJvbCwgbWluVm9jYWJTeW1ib2wsICBtYXhWb2NhYlN5bWJvbCkge1xuXHRyZXR1cm4gc3ltYm9sID49IHRoaXMuc3RhcnQgJiYgc3ltYm9sIDw9IHRoaXMuc3RvcDtcbn07XG5cblJhbmdlVHJhbnNpdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIFwiJ1wiICsgU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLnN0YXJ0KSArIFwiJy4uJ1wiICsgU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLnN0b3ApICsgXCInXCI7XG59O1xuXG5mdW5jdGlvbiBBYnN0cmFjdFByZWRpY2F0ZVRyYW5zaXRpb24odGFyZ2V0KSB7XG5cdFRyYW5zaXRpb24uY2FsbCh0aGlzLCB0YXJnZXQpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuQWJzdHJhY3RQcmVkaWNhdGVUcmFuc2l0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVHJhbnNpdGlvbi5wcm90b3R5cGUpO1xuQWJzdHJhY3RQcmVkaWNhdGVUcmFuc2l0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEFic3RyYWN0UHJlZGljYXRlVHJhbnNpdGlvbjtcblxuZnVuY3Rpb24gUHJlZGljYXRlVHJhbnNpdGlvbih0YXJnZXQsIHJ1bGVJbmRleCwgcHJlZEluZGV4LCBpc0N0eERlcGVuZGVudCkge1xuXHRBYnN0cmFjdFByZWRpY2F0ZVRyYW5zaXRpb24uY2FsbCh0aGlzLCB0YXJnZXQpO1xuICAgIHRoaXMuc2VyaWFsaXphdGlvblR5cGUgPSBUcmFuc2l0aW9uLlBSRURJQ0FURTtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IHJ1bGVJbmRleDtcbiAgICB0aGlzLnByZWRJbmRleCA9IHByZWRJbmRleDtcbiAgICB0aGlzLmlzQ3R4RGVwZW5kZW50ID0gaXNDdHhEZXBlbmRlbnQ7IC8vIGUuZy4sICRpIHJlZiBpbiBwcmVkXG4gICAgdGhpcy5pc0Vwc2lsb24gPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5QcmVkaWNhdGVUcmFuc2l0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQWJzdHJhY3RQcmVkaWNhdGVUcmFuc2l0aW9uLnByb3RvdHlwZSk7XG5QcmVkaWNhdGVUcmFuc2l0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByZWRpY2F0ZVRyYW5zaXRpb247XG5cblByZWRpY2F0ZVRyYW5zaXRpb24ucHJvdG90eXBlLm1hdGNoZXMgPSBmdW5jdGlvbihzeW1ib2wsIG1pblZvY2FiU3ltYm9sLCAgbWF4Vm9jYWJTeW1ib2wpIHtcblx0cmV0dXJuIGZhbHNlO1xufTtcblxuUHJlZGljYXRlVHJhbnNpdGlvbi5wcm90b3R5cGUuZ2V0UHJlZGljYXRlID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiBuZXcgUHJlZGljYXRlKHRoaXMucnVsZUluZGV4LCB0aGlzLnByZWRJbmRleCwgdGhpcy5pc0N0eERlcGVuZGVudCk7XG59O1xuXG5QcmVkaWNhdGVUcmFuc2l0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gXCJwcmVkX1wiICsgdGhpcy5ydWxlSW5kZXggKyBcIjpcIiArIHRoaXMucHJlZEluZGV4O1xufTtcblxuZnVuY3Rpb24gQWN0aW9uVHJhbnNpdGlvbih0YXJnZXQsIHJ1bGVJbmRleCwgYWN0aW9uSW5kZXgsIGlzQ3R4RGVwZW5kZW50KSB7XG5cdFRyYW5zaXRpb24uY2FsbCh0aGlzLCB0YXJnZXQpO1xuICAgIHRoaXMuc2VyaWFsaXphdGlvblR5cGUgPSBUcmFuc2l0aW9uLkFDVElPTjtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IHJ1bGVJbmRleDtcbiAgICB0aGlzLmFjdGlvbkluZGV4ID0gYWN0aW9uSW5kZXg9PT11bmRlZmluZWQgPyAtMSA6IGFjdGlvbkluZGV4O1xuICAgIHRoaXMuaXNDdHhEZXBlbmRlbnQgPSBpc0N0eERlcGVuZGVudD09PXVuZGVmaW5lZCA/IGZhbHNlIDogaXNDdHhEZXBlbmRlbnQ7IC8vIGUuZy4sICRpIHJlZiBpbiBwcmVkXG4gICAgdGhpcy5pc0Vwc2lsb24gPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5BY3Rpb25UcmFuc2l0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVHJhbnNpdGlvbi5wcm90b3R5cGUpO1xuQWN0aW9uVHJhbnNpdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBY3Rpb25UcmFuc2l0aW9uO1xuXG5cbkFjdGlvblRyYW5zaXRpb24ucHJvdG90eXBlLm1hdGNoZXMgPSBmdW5jdGlvbihzeW1ib2wsIG1pblZvY2FiU3ltYm9sLCAgbWF4Vm9jYWJTeW1ib2wpIHtcblx0cmV0dXJuIGZhbHNlO1xufTtcblxuQWN0aW9uVHJhbnNpdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIFwiYWN0aW9uX1wiICsgdGhpcy5ydWxlSW5kZXggKyBcIjpcIiArIHRoaXMuYWN0aW9uSW5kZXg7XG59O1xuXG5cbi8vIEEgdHJhbnNpdGlvbiBjb250YWluaW5nIGEgc2V0IG9mIHZhbHVlcy5cbmZ1bmN0aW9uIFNldFRyYW5zaXRpb24odGFyZ2V0LCBzZXQpIHtcblx0VHJhbnNpdGlvbi5jYWxsKHRoaXMsIHRhcmdldCk7XG5cdHRoaXMuc2VyaWFsaXphdGlvblR5cGUgPSBUcmFuc2l0aW9uLlNFVDtcbiAgICBpZiAoc2V0ICE9PXVuZGVmaW5lZCAmJiBzZXQgIT09bnVsbCkge1xuICAgICAgICB0aGlzLmxhYmVsID0gc2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubGFiZWwgPSBuZXcgSW50ZXJ2YWxTZXQoKTtcbiAgICAgICAgdGhpcy5sYWJlbC5hZGRPbmUoVG9rZW4uSU5WQUxJRF9UWVBFKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cblNldFRyYW5zaXRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUcmFuc2l0aW9uLnByb3RvdHlwZSk7XG5TZXRUcmFuc2l0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNldFRyYW5zaXRpb247XG5cblNldFRyYW5zaXRpb24ucHJvdG90eXBlLm1hdGNoZXMgPSBmdW5jdGlvbihzeW1ib2wsIG1pblZvY2FiU3ltYm9sLCAgbWF4Vm9jYWJTeW1ib2wpIHtcblx0cmV0dXJuIHRoaXMubGFiZWwuY29udGFpbnMoc3ltYm9sKTtcbn07XG5cblxuU2V0VHJhbnNpdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMubGFiZWwudG9TdHJpbmcoKTtcbn07XG5cbmZ1bmN0aW9uIE5vdFNldFRyYW5zaXRpb24odGFyZ2V0LCBzZXQpIHtcblx0U2V0VHJhbnNpdGlvbi5jYWxsKHRoaXMsIHRhcmdldCwgc2V0KTtcblx0dGhpcy5zZXJpYWxpemF0aW9uVHlwZSA9IFRyYW5zaXRpb24uTk9UX1NFVDtcblx0cmV0dXJuIHRoaXM7XG59XG5cbk5vdFNldFRyYW5zaXRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTZXRUcmFuc2l0aW9uLnByb3RvdHlwZSk7XG5Ob3RTZXRUcmFuc2l0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE5vdFNldFRyYW5zaXRpb247XG5cbk5vdFNldFRyYW5zaXRpb24ucHJvdG90eXBlLm1hdGNoZXMgPSBmdW5jdGlvbihzeW1ib2wsIG1pblZvY2FiU3ltYm9sLCAgbWF4Vm9jYWJTeW1ib2wpIHtcblx0cmV0dXJuIHN5bWJvbCA+PSBtaW5Wb2NhYlN5bWJvbCAmJiBzeW1ib2wgPD0gbWF4Vm9jYWJTeW1ib2wgJiZcblx0XHRcdCFTZXRUcmFuc2l0aW9uLnByb3RvdHlwZS5tYXRjaGVzLmNhbGwodGhpcywgc3ltYm9sLCBtaW5Wb2NhYlN5bWJvbCwgbWF4Vm9jYWJTeW1ib2wpO1xufTtcblxuTm90U2V0VHJhbnNpdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuICd+JyArIFNldFRyYW5zaXRpb24ucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGhpcyk7XG59O1xuXG5mdW5jdGlvbiBXaWxkY2FyZFRyYW5zaXRpb24odGFyZ2V0KSB7XG5cdFRyYW5zaXRpb24uY2FsbCh0aGlzLCB0YXJnZXQpO1xuXHR0aGlzLnNlcmlhbGl6YXRpb25UeXBlID0gVHJhbnNpdGlvbi5XSUxEQ0FSRDtcblx0cmV0dXJuIHRoaXM7XG59XG5cbldpbGRjYXJkVHJhbnNpdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRyYW5zaXRpb24ucHJvdG90eXBlKTtcbldpbGRjYXJkVHJhbnNpdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBXaWxkY2FyZFRyYW5zaXRpb247XG5cblxuV2lsZGNhcmRUcmFuc2l0aW9uLnByb3RvdHlwZS5tYXRjaGVzID0gZnVuY3Rpb24oc3ltYm9sLCBtaW5Wb2NhYlN5bWJvbCwgIG1heFZvY2FiU3ltYm9sKSB7XG5cdHJldHVybiBzeW1ib2wgPj0gbWluVm9jYWJTeW1ib2wgJiYgc3ltYm9sIDw9IG1heFZvY2FiU3ltYm9sO1xufTtcblxuV2lsZGNhcmRUcmFuc2l0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gXCIuXCI7XG59O1xuXG5mdW5jdGlvbiBQcmVjZWRlbmNlUHJlZGljYXRlVHJhbnNpdGlvbih0YXJnZXQsIHByZWNlZGVuY2UpIHtcblx0QWJzdHJhY3RQcmVkaWNhdGVUcmFuc2l0aW9uLmNhbGwodGhpcywgdGFyZ2V0KTtcbiAgICB0aGlzLnNlcmlhbGl6YXRpb25UeXBlID0gVHJhbnNpdGlvbi5QUkVDRURFTkNFO1xuICAgIHRoaXMucHJlY2VkZW5jZSA9IHByZWNlZGVuY2U7XG4gICAgdGhpcy5pc0Vwc2lsb24gPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5QcmVjZWRlbmNlUHJlZGljYXRlVHJhbnNpdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFic3RyYWN0UHJlZGljYXRlVHJhbnNpdGlvbi5wcm90b3R5cGUpO1xuUHJlY2VkZW5jZVByZWRpY2F0ZVRyYW5zaXRpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUHJlY2VkZW5jZVByZWRpY2F0ZVRyYW5zaXRpb247XG5cblByZWNlZGVuY2VQcmVkaWNhdGVUcmFuc2l0aW9uLnByb3RvdHlwZS5tYXRjaGVzID0gZnVuY3Rpb24oc3ltYm9sLCBtaW5Wb2NhYlN5bWJvbCwgIG1heFZvY2FiU3ltYm9sKSB7XG5cdHJldHVybiBmYWxzZTtcbn07XG5cblByZWNlZGVuY2VQcmVkaWNhdGVUcmFuc2l0aW9uLnByb3RvdHlwZS5nZXRQcmVkaWNhdGUgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIG5ldyBQcmVjZWRlbmNlUHJlZGljYXRlKHRoaXMucHJlY2VkZW5jZSk7XG59O1xuXG5QcmVjZWRlbmNlUHJlZGljYXRlVHJhbnNpdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMucHJlY2VkZW5jZSArIFwiID49IF9wXCI7XG59O1xuXG5leHBvcnRzLlRyYW5zaXRpb24gPSBUcmFuc2l0aW9uO1xuZXhwb3J0cy5BdG9tVHJhbnNpdGlvbiA9IEF0b21UcmFuc2l0aW9uO1xuZXhwb3J0cy5TZXRUcmFuc2l0aW9uID0gU2V0VHJhbnNpdGlvbjtcbmV4cG9ydHMuTm90U2V0VHJhbnNpdGlvbiA9IE5vdFNldFRyYW5zaXRpb247XG5leHBvcnRzLlJ1bGVUcmFuc2l0aW9uID0gUnVsZVRyYW5zaXRpb247XG5leHBvcnRzLkFjdGlvblRyYW5zaXRpb24gPSBBY3Rpb25UcmFuc2l0aW9uO1xuZXhwb3J0cy5FcHNpbG9uVHJhbnNpdGlvbiA9IEVwc2lsb25UcmFuc2l0aW9uO1xuZXhwb3J0cy5SYW5nZVRyYW5zaXRpb24gPSBSYW5nZVRyYW5zaXRpb247XG5leHBvcnRzLldpbGRjYXJkVHJhbnNpdGlvbiA9IFdpbGRjYXJkVHJhbnNpdGlvbjtcbmV4cG9ydHMuUHJlZGljYXRlVHJhbnNpdGlvbiA9IFByZWRpY2F0ZVRyYW5zaXRpb247XG5leHBvcnRzLlByZWNlZGVuY2VQcmVkaWNhdGVUcmFuc2l0aW9uID0gUHJlY2VkZW5jZVByZWRpY2F0ZVRyYW5zaXRpb247XG5leHBvcnRzLkFic3RyYWN0UHJlZGljYXRlVHJhbnNpdGlvbiA9IEFic3RyYWN0UHJlZGljYXRlVHJhbnNpdGlvbjsiLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG5cbmV4cG9ydHMuQVROID0gcmVxdWlyZSgnLi9BVE4nKS5BVE47XG5leHBvcnRzLkFUTkRlc2VyaWFsaXplciA9IHJlcXVpcmUoJy4vQVRORGVzZXJpYWxpemVyJykuQVRORGVzZXJpYWxpemVyO1xuZXhwb3J0cy5MZXhlckFUTlNpbXVsYXRvciA9IHJlcXVpcmUoJy4vTGV4ZXJBVE5TaW11bGF0b3InKS5MZXhlckFUTlNpbXVsYXRvcjtcbmV4cG9ydHMuUGFyc2VyQVROU2ltdWxhdG9yID0gcmVxdWlyZSgnLi9QYXJzZXJBVE5TaW11bGF0b3InKS5QYXJzZXJBVE5TaW11bGF0b3I7XG5leHBvcnRzLlByZWRpY3Rpb25Nb2RlID0gcmVxdWlyZSgnLi9QcmVkaWN0aW9uTW9kZScpLlByZWRpY3Rpb25Nb2RlO1xuIiwiLy9cbi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cblxudmFyIFNldCA9IHJlcXVpcmUoXCIuLi9VdGlsc1wiKS5TZXQ7XG52YXIgREZBU3RhdGUgPSByZXF1aXJlKCcuL0RGQVN0YXRlJykuREZBU3RhdGU7XG52YXIgU3Rhckxvb3BFbnRyeVN0YXRlID0gcmVxdWlyZSgnLi4vYXRuL0FUTlN0YXRlJykuU3Rhckxvb3BFbnRyeVN0YXRlO1xudmFyIEFUTkNvbmZpZ1NldCA9IHJlcXVpcmUoJy4vLi4vYXRuL0FUTkNvbmZpZ1NldCcpLkFUTkNvbmZpZ1NldDtcbnZhciBERkFTZXJpYWxpemVyID0gcmVxdWlyZSgnLi9ERkFTZXJpYWxpemVyJykuREZBU2VyaWFsaXplcjtcbnZhciBMZXhlckRGQVNlcmlhbGl6ZXIgPSByZXF1aXJlKCcuL0RGQVNlcmlhbGl6ZXInKS5MZXhlckRGQVNlcmlhbGl6ZXI7XG5cblxuXG5mdW5jdGlvbiBERkEoYXRuU3RhcnRTdGF0ZSwgZGVjaXNpb24pIHtcblx0aWYgKGRlY2lzaW9uID09PSB1bmRlZmluZWQpIHtcblx0XHRkZWNpc2lvbiA9IDA7XG5cdH1cblx0Ly8gRnJvbSB3aGljaCBBVE4gc3RhdGUgZGlkIHdlIGNyZWF0ZSB0aGlzIERGQT9cblx0dGhpcy5hdG5TdGFydFN0YXRlID0gYXRuU3RhcnRTdGF0ZTtcblx0dGhpcy5kZWNpc2lvbiA9IGRlY2lzaW9uO1xuXHQvLyBBIHNldCBvZiBhbGwgREZBIHN0YXRlcy4gVXNlIHtAbGluayBNYXB9IHNvIHdlIGNhbiBnZXQgb2xkIHN0YXRlIGJhY2tcblx0Ly8gKHtAbGluayBTZXR9IG9ubHkgYWxsb3dzIHlvdSB0byBzZWUgaWYgaXQncyB0aGVyZSkuXG5cdHRoaXMuX3N0YXRlcyA9IG5ldyBTZXQoKTtcblx0dGhpcy5zMCA9IG51bGw7XG5cdC8vIHtAY29kZSB0cnVlfSBpZiB0aGlzIERGQSBpcyBmb3IgYSBwcmVjZWRlbmNlIGRlY2lzaW9uOyBvdGhlcndpc2UsXG5cdC8vIHtAY29kZSBmYWxzZX0uIFRoaXMgaXMgdGhlIGJhY2tpbmcgZmllbGQgZm9yIHtAbGluayAvL2lzUHJlY2VkZW5jZURmYX0sXG5cdC8vIHtAbGluayAvL3NldFByZWNlZGVuY2VEZmF9LlxuXHR0aGlzLnByZWNlZGVuY2VEZmEgPSBmYWxzZTtcbiAgICBpZiAoYXRuU3RhcnRTdGF0ZSBpbnN0YW5jZW9mIFN0YXJMb29wRW50cnlTdGF0ZSlcbiAgICB7XG4gICAgICAgIGlmIChhdG5TdGFydFN0YXRlLmlzUHJlY2VkZW5jZURlY2lzaW9uKSB7XG4gICAgICAgICAgICB0aGlzLnByZWNlZGVuY2VEZmEgPSB0cnVlO1xuICAgICAgICAgICAgdmFyIHByZWNlZGVuY2VTdGF0ZSA9IG5ldyBERkFTdGF0ZShudWxsLCBuZXcgQVROQ29uZmlnU2V0KCkpO1xuICAgICAgICAgICAgcHJlY2VkZW5jZVN0YXRlLmVkZ2VzID0gW107XG4gICAgICAgICAgICBwcmVjZWRlbmNlU3RhdGUuaXNBY2NlcHRTdGF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgcHJlY2VkZW5jZVN0YXRlLnJlcXVpcmVzRnVsbENvbnRleHQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuczAgPSBwcmVjZWRlbmNlU3RhdGU7XG4gICAgICAgIH1cbiAgICB9XG5cdHJldHVybiB0aGlzO1xufVxuXG4vLyBHZXQgdGhlIHN0YXJ0IHN0YXRlIGZvciBhIHNwZWNpZmljIHByZWNlZGVuY2UgdmFsdWUuXG4vL1xuLy8gQHBhcmFtIHByZWNlZGVuY2UgVGhlIGN1cnJlbnQgcHJlY2VkZW5jZS5cbi8vIEByZXR1cm4gVGhlIHN0YXJ0IHN0YXRlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHNwZWNpZmllZCBwcmVjZWRlbmNlLCBvclxuLy8ge0Bjb2RlIG51bGx9IGlmIG5vIHN0YXJ0IHN0YXRlIGV4aXN0cyBmb3IgdGhlIHNwZWNpZmllZCBwcmVjZWRlbmNlLlxuLy9cbi8vIEB0aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlmIHRoaXMgaXMgbm90IGEgcHJlY2VkZW5jZSBERkEuXG4vLyBAc2VlIC8vaXNQcmVjZWRlbmNlRGZhKClcblxuREZBLnByb3RvdHlwZS5nZXRQcmVjZWRlbmNlU3RhcnRTdGF0ZSA9IGZ1bmN0aW9uKHByZWNlZGVuY2UpIHtcblx0aWYgKCEodGhpcy5wcmVjZWRlbmNlRGZhKSkge1xuXHRcdHRocm93IChcIk9ubHkgcHJlY2VkZW5jZSBERkFzIG1heSBjb250YWluIGEgcHJlY2VkZW5jZSBzdGFydCBzdGF0ZS5cIik7XG5cdH1cblx0Ly8gczAuZWRnZXMgaXMgbmV2ZXIgbnVsbCBmb3IgYSBwcmVjZWRlbmNlIERGQVxuXHRpZiAocHJlY2VkZW5jZSA8IDAgfHwgcHJlY2VkZW5jZSA+PSB0aGlzLnMwLmVkZ2VzLmxlbmd0aCkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdHJldHVybiB0aGlzLnMwLmVkZ2VzW3ByZWNlZGVuY2VdIHx8IG51bGw7XG59O1xuXG4vLyBTZXQgdGhlIHN0YXJ0IHN0YXRlIGZvciBhIHNwZWNpZmljIHByZWNlZGVuY2UgdmFsdWUuXG4vL1xuLy8gQHBhcmFtIHByZWNlZGVuY2UgVGhlIGN1cnJlbnQgcHJlY2VkZW5jZS5cbi8vIEBwYXJhbSBzdGFydFN0YXRlIFRoZSBzdGFydCBzdGF0ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBzcGVjaWZpZWRcbi8vIHByZWNlZGVuY2UuXG4vL1xuLy8gQHRocm93cyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaWYgdGhpcyBpcyBub3QgYSBwcmVjZWRlbmNlIERGQS5cbi8vIEBzZWUgLy9pc1ByZWNlZGVuY2VEZmEoKVxuLy9cbkRGQS5wcm90b3R5cGUuc2V0UHJlY2VkZW5jZVN0YXJ0U3RhdGUgPSBmdW5jdGlvbihwcmVjZWRlbmNlLCBzdGFydFN0YXRlKSB7XG5cdGlmICghKHRoaXMucHJlY2VkZW5jZURmYSkpIHtcblx0XHR0aHJvdyAoXCJPbmx5IHByZWNlZGVuY2UgREZBcyBtYXkgY29udGFpbiBhIHByZWNlZGVuY2Ugc3RhcnQgc3RhdGUuXCIpO1xuXHR9XG5cdGlmIChwcmVjZWRlbmNlIDwgMCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIHN5bmNocm9uaXphdGlvbiBvbiBzMCBoZXJlIGlzIG9rLiB3aGVuIHRoZSBERkEgaXMgdHVybmVkIGludG8gYVxuXHQvLyBwcmVjZWRlbmNlIERGQSwgczAgd2lsbCBiZSBpbml0aWFsaXplZCBvbmNlIGFuZCBub3QgdXBkYXRlZCBhZ2FpblxuXHQvLyBzMC5lZGdlcyBpcyBuZXZlciBudWxsIGZvciBhIHByZWNlZGVuY2UgREZBXG5cdHRoaXMuczAuZWRnZXNbcHJlY2VkZW5jZV0gPSBzdGFydFN0YXRlO1xufTtcblxuLy9cbi8vIFNldHMgd2hldGhlciB0aGlzIGlzIGEgcHJlY2VkZW5jZSBERkEuIElmIHRoZSBzcGVjaWZpZWQgdmFsdWUgZGlmZmVyc1xuLy8gZnJvbSB0aGUgY3VycmVudCBERkEgY29uZmlndXJhdGlvbiwgdGhlIGZvbGxvd2luZyBhY3Rpb25zIGFyZSB0YWtlbjtcbi8vIG90aGVyd2lzZSBubyBjaGFuZ2VzIGFyZSBtYWRlIHRvIHRoZSBjdXJyZW50IERGQS5cbi8vXG4vLyA8dWw+XG4vLyA8bGk+VGhlIHtAbGluayAvL3N0YXRlc30gbWFwIGlzIGNsZWFyZWQ8L2xpPlxuLy8gPGxpPklmIHtAY29kZSBwcmVjZWRlbmNlRGZhfSBpcyB7QGNvZGUgZmFsc2V9LCB0aGUgaW5pdGlhbCBzdGF0ZVxuLy8ge0BsaW5rIC8vczB9IGlzIHNldCB0byB7QGNvZGUgbnVsbH07IG90aGVyd2lzZSwgaXQgaXMgaW5pdGlhbGl6ZWQgdG8gYSBuZXdcbi8vIHtAbGluayBERkFTdGF0ZX0gd2l0aCBhbiBlbXB0eSBvdXRnb2luZyB7QGxpbmsgREZBU3RhdGUvL2VkZ2VzfSBhcnJheSB0b1xuLy8gc3RvcmUgdGhlIHN0YXJ0IHN0YXRlcyBmb3IgaW5kaXZpZHVhbCBwcmVjZWRlbmNlIHZhbHVlcy48L2xpPlxuLy8gPGxpPlRoZSB7QGxpbmsgLy9wcmVjZWRlbmNlRGZhfSBmaWVsZCBpcyB1cGRhdGVkPC9saT5cbi8vIDwvdWw+XG4vL1xuLy8gQHBhcmFtIHByZWNlZGVuY2VEZmEge0Bjb2RlIHRydWV9IGlmIHRoaXMgaXMgYSBwcmVjZWRlbmNlIERGQTsgb3RoZXJ3aXNlLFxuLy8ge0Bjb2RlIGZhbHNlfVxuXG5ERkEucHJvdG90eXBlLnNldFByZWNlZGVuY2VEZmEgPSBmdW5jdGlvbihwcmVjZWRlbmNlRGZhKSB7XG5cdGlmICh0aGlzLnByZWNlZGVuY2VEZmEhPT1wcmVjZWRlbmNlRGZhKSB7XG5cdFx0dGhpcy5fc3RhdGVzID0gbmV3IERGQVN0YXRlc1NldCgpO1xuXHRcdGlmIChwcmVjZWRlbmNlRGZhKSB7XG5cdFx0XHR2YXIgcHJlY2VkZW5jZVN0YXRlID0gbmV3IERGQVN0YXRlKG51bGwsIG5ldyBBVE5Db25maWdTZXQoKSk7XG5cdFx0XHRwcmVjZWRlbmNlU3RhdGUuZWRnZXMgPSBbXTtcblx0XHRcdHByZWNlZGVuY2VTdGF0ZS5pc0FjY2VwdFN0YXRlID0gZmFsc2U7XG5cdFx0XHRwcmVjZWRlbmNlU3RhdGUucmVxdWlyZXNGdWxsQ29udGV4dCA9IGZhbHNlO1xuXHRcdFx0dGhpcy5zMCA9IHByZWNlZGVuY2VTdGF0ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zMCA9IG51bGw7XG5cdFx0fVxuXHRcdHRoaXMucHJlY2VkZW5jZURmYSA9IHByZWNlZGVuY2VEZmE7XG5cdH1cbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShERkEucHJvdG90eXBlLCBcInN0YXRlc1wiLCB7XG5cdGdldCA6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLl9zdGF0ZXM7XG5cdH1cbn0pO1xuXG4vLyBSZXR1cm4gYSBsaXN0IG9mIGFsbCBzdGF0ZXMgaW4gdGhpcyBERkEsIG9yZGVyZWQgYnkgc3RhdGUgbnVtYmVyLlxuREZBLnByb3RvdHlwZS5zb3J0ZWRTdGF0ZXMgPSBmdW5jdGlvbigpIHtcblx0dmFyIGxpc3QgPSB0aGlzLl9zdGF0ZXMudmFsdWVzKCk7XG5cdHJldHVybiBsaXN0LnNvcnQoZnVuY3Rpb24oYSwgYikge1xuXHRcdHJldHVybiBhLnN0YXRlTnVtYmVyIC0gYi5zdGF0ZU51bWJlcjtcblx0fSk7XG59O1xuXG5ERkEucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24obGl0ZXJhbE5hbWVzLCBzeW1ib2xpY05hbWVzKSB7XG5cdGxpdGVyYWxOYW1lcyA9IGxpdGVyYWxOYW1lcyB8fCBudWxsO1xuXHRzeW1ib2xpY05hbWVzID0gc3ltYm9saWNOYW1lcyB8fCBudWxsO1xuXHRpZiAodGhpcy5zMCA9PT0gbnVsbCkge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cdHZhciBzZXJpYWxpemVyID0gbmV3IERGQVNlcmlhbGl6ZXIodGhpcywgbGl0ZXJhbE5hbWVzLCBzeW1ib2xpY05hbWVzKTtcblx0cmV0dXJuIHNlcmlhbGl6ZXIudG9TdHJpbmcoKTtcbn07XG5cbkRGQS5wcm90b3R5cGUudG9MZXhlclN0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRpZiAodGhpcy5zMCA9PT0gbnVsbCkge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cdHZhciBzZXJpYWxpemVyID0gbmV3IExleGVyREZBU2VyaWFsaXplcih0aGlzKTtcblx0cmV0dXJuIHNlcmlhbGl6ZXIudG9TdHJpbmcoKTtcbn07XG5cbmV4cG9ydHMuREZBID0gREZBO1xuIiwiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuXG4vLyBBIERGQSB3YWxrZXIgdGhhdCBrbm93cyBob3cgdG8gZHVtcCB0aGVtIHRvIHNlcmlhbGl6ZWQgc3RyaW5ncy4jL1xuXG5cbmZ1bmN0aW9uIERGQVNlcmlhbGl6ZXIoZGZhLCBsaXRlcmFsTmFtZXMsIHN5bWJvbGljTmFtZXMpIHtcblx0dGhpcy5kZmEgPSBkZmE7XG5cdHRoaXMubGl0ZXJhbE5hbWVzID0gbGl0ZXJhbE5hbWVzIHx8IFtdO1xuXHR0aGlzLnN5bWJvbGljTmFtZXMgPSBzeW1ib2xpY05hbWVzIHx8IFtdO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuREZBU2VyaWFsaXplci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgIGlmKHRoaXMuZGZhLnMwID09PSBudWxsKSB7XG4gICAgICAgcmV0dXJuIG51bGw7XG4gICB9XG4gICB2YXIgYnVmID0gXCJcIjtcbiAgIHZhciBzdGF0ZXMgPSB0aGlzLmRmYS5zb3J0ZWRTdGF0ZXMoKTtcbiAgIGZvcih2YXIgaT0wO2k8c3RhdGVzLmxlbmd0aDtpKyspIHtcbiAgICAgICB2YXIgcyA9IHN0YXRlc1tpXTtcbiAgICAgICBpZihzLmVkZ2VzIT09bnVsbCkge1xuICAgICAgICAgICAgdmFyIG4gPSBzLmVkZ2VzLmxlbmd0aDtcbiAgICAgICAgICAgIGZvcih2YXIgaj0wO2o8bjtqKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgdCA9IHMuZWRnZXNbal0gfHwgbnVsbDtcbiAgICAgICAgICAgICAgICBpZih0IT09bnVsbCAmJiB0LnN0YXRlTnVtYmVyICE9PSAweDdGRkZGRkZGKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1ZiA9IGJ1Zi5jb25jYXQodGhpcy5nZXRTdGF0ZVN0cmluZyhzKSk7XG4gICAgICAgICAgICAgICAgICAgIGJ1ZiA9IGJ1Zi5jb25jYXQoXCItXCIpO1xuICAgICAgICAgICAgICAgICAgICBidWYgPSBidWYuY29uY2F0KHRoaXMuZ2V0RWRnZUxhYmVsKGopKTtcbiAgICAgICAgICAgICAgICAgICAgYnVmID0gYnVmLmNvbmNhdChcIi0+XCIpO1xuICAgICAgICAgICAgICAgICAgICBidWYgPSBidWYuY29uY2F0KHRoaXMuZ2V0U3RhdGVTdHJpbmcodCkpO1xuICAgICAgICAgICAgICAgICAgICBidWYgPSBidWYuY29uY2F0KCdcXG4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgfVxuICAgfVxuICAgcmV0dXJuIGJ1Zi5sZW5ndGg9PT0wID8gbnVsbCA6IGJ1Zjtcbn07XG5cbkRGQVNlcmlhbGl6ZXIucHJvdG90eXBlLmdldEVkZ2VMYWJlbCA9IGZ1bmN0aW9uKGkpIHtcbiAgICBpZiAoaT09PTApIHtcbiAgICAgICAgcmV0dXJuIFwiRU9GXCI7XG4gICAgfSBlbHNlIGlmKHRoaXMubGl0ZXJhbE5hbWVzICE9PW51bGwgfHwgdGhpcy5zeW1ib2xpY05hbWVzIT09bnVsbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5saXRlcmFsTmFtZXNbaS0xXSB8fCB0aGlzLnN5bWJvbGljTmFtZXNbaS0xXTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShpLTEpO1xuICAgIH1cbn07XG5cbkRGQVNlcmlhbGl6ZXIucHJvdG90eXBlLmdldFN0YXRlU3RyaW5nID0gZnVuY3Rpb24ocykge1xuICAgIHZhciBiYXNlU3RhdGVTdHIgPSAoIHMuaXNBY2NlcHRTdGF0ZSA/IFwiOlwiIDogXCJcIikgKyBcInNcIiArIHMuc3RhdGVOdW1iZXIgKyAoIHMucmVxdWlyZXNGdWxsQ29udGV4dCA/IFwiXlwiIDogXCJcIik7XG4gICAgaWYocy5pc0FjY2VwdFN0YXRlKSB7XG4gICAgICAgIGlmIChzLnByZWRpY2F0ZXMgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBiYXNlU3RhdGVTdHIgKyBcIj0+XCIgKyBzLnByZWRpY2F0ZXMudG9TdHJpbmcoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBiYXNlU3RhdGVTdHIgKyBcIj0+XCIgKyBzLnByZWRpY3Rpb24udG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBiYXNlU3RhdGVTdHI7XG4gICAgfVxufTtcblxuZnVuY3Rpb24gTGV4ZXJERkFTZXJpYWxpemVyKGRmYSkge1xuXHRERkFTZXJpYWxpemVyLmNhbGwodGhpcywgZGZhLCBudWxsKTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkxleGVyREZBU2VyaWFsaXplci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERGQVNlcmlhbGl6ZXIucHJvdG90eXBlKTtcbkxleGVyREZBU2VyaWFsaXplci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMZXhlckRGQVNlcmlhbGl6ZXI7XG5cbkxleGVyREZBU2VyaWFsaXplci5wcm90b3R5cGUuZ2V0RWRnZUxhYmVsID0gZnVuY3Rpb24oaSkge1xuXHRyZXR1cm4gXCInXCIgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpICsgXCInXCI7XG59O1xuXG5leHBvcnRzLkRGQVNlcmlhbGl6ZXIgPSBERkFTZXJpYWxpemVyO1xuZXhwb3J0cy5MZXhlckRGQVNlcmlhbGl6ZXIgPSBMZXhlckRGQVNlcmlhbGl6ZXI7XG5cbiIsIi8vXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vLy9cblxudmFyIEFUTkNvbmZpZ1NldCA9IHJlcXVpcmUoJy4vLi4vYXRuL0FUTkNvbmZpZ1NldCcpLkFUTkNvbmZpZ1NldDtcbnZhciBVdGlscyA9IHJlcXVpcmUoJy4vLi4vVXRpbHMnKTtcbnZhciBIYXNoID0gVXRpbHMuSGFzaDtcbnZhciBTZXQgPSBVdGlscy5TZXQ7XG5cbi8vIE1hcCBhIHByZWRpY2F0ZSB0byBhIHByZWRpY3RlZCBhbHRlcm5hdGl2ZS4vLy9cblxuZnVuY3Rpb24gUHJlZFByZWRpY3Rpb24ocHJlZCwgYWx0KSB7XG5cdHRoaXMuYWx0ID0gYWx0O1xuXHR0aGlzLnByZWQgPSBwcmVkO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuUHJlZFByZWRpY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiBcIihcIiArIHRoaXMucHJlZCArIFwiLCBcIiArIHRoaXMuYWx0ICsgXCIpXCI7XG59O1xuXG4vLyBBIERGQSBzdGF0ZSByZXByZXNlbnRzIGEgc2V0IG9mIHBvc3NpYmxlIEFUTiBjb25maWd1cmF0aW9ucy5cbi8vIEFzIEFobywgU2V0aGksIFVsbG1hbiBwLiAxMTcgc2F5cyBcIlRoZSBERkEgdXNlcyBpdHMgc3RhdGVcbi8vIHRvIGtlZXAgdHJhY2sgb2YgYWxsIHBvc3NpYmxlIHN0YXRlcyB0aGUgQVROIGNhbiBiZSBpbiBhZnRlclxuLy8gcmVhZGluZyBlYWNoIGlucHV0IHN5bWJvbC4gVGhhdCBpcyB0byBzYXksIGFmdGVyIHJlYWRpbmdcbi8vIGlucHV0IGExYTIuLmFuLCB0aGUgREZBIGlzIGluIGEgc3RhdGUgdGhhdCByZXByZXNlbnRzIHRoZVxuLy8gc3Vic2V0IFQgb2YgdGhlIHN0YXRlcyBvZiB0aGUgQVROIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIHRoZVxuLy8gQVROJ3Mgc3RhcnQgc3RhdGUgYWxvbmcgc29tZSBwYXRoIGxhYmVsZWQgYTFhMi4uYW4uXCJcbi8vIEluIGNvbnZlbnRpb25hbCBORkEmcmFycjtERkEgY29udmVyc2lvbiwgdGhlcmVmb3JlLCB0aGUgc3Vic2V0IFRcbi8vIHdvdWxkIGJlIGEgYml0c2V0IHJlcHJlc2VudGluZyB0aGUgc2V0IG9mIHN0YXRlcyB0aGVcbi8vIEFUTiBjb3VsZCBiZSBpbi4gV2UgbmVlZCB0byB0cmFjayB0aGUgYWx0IHByZWRpY3RlZCBieSBlYWNoXG4vLyBzdGF0ZSBhcyB3ZWxsLCBob3dldmVyLiBNb3JlIGltcG9ydGFudGx5LCB3ZSBuZWVkIHRvIG1haW50YWluXG4vLyBhIHN0YWNrIG9mIHN0YXRlcywgdHJhY2tpbmcgdGhlIGNsb3N1cmUgb3BlcmF0aW9ucyBhcyB0aGV5XG4vLyBqdW1wIGZyb20gcnVsZSB0byBydWxlLCBlbXVsYXRpbmcgcnVsZSBpbnZvY2F0aW9ucyAobWV0aG9kIGNhbGxzKS5cbi8vIEkgaGF2ZSB0byBhZGQgYSBzdGFjayB0byBzaW11bGF0ZSB0aGUgcHJvcGVyIGxvb2thaGVhZCBzZXF1ZW5jZXMgZm9yXG4vLyB0aGUgdW5kZXJseWluZyBMTCBncmFtbWFyIGZyb20gd2hpY2ggdGhlIEFUTiB3YXMgZGVyaXZlZC5cbi8vXG4vLyA8cD5JIHVzZSBhIHNldCBvZiBBVE5Db25maWcgb2JqZWN0cyBub3Qgc2ltcGxlIHN0YXRlcy4gQW4gQVROQ29uZmlnXG4vLyBpcyBib3RoIGEgc3RhdGUgKGFsYSBub3JtYWwgY29udmVyc2lvbikgYW5kIGEgUnVsZUNvbnRleHQgZGVzY3JpYmluZ1xuLy8gdGhlIGNoYWluIG9mIHJ1bGVzIChpZiBhbnkpIGZvbGxvd2VkIHRvIGFycml2ZSBhdCB0aGF0IHN0YXRlLjwvcD5cbi8vXG4vLyA8cD5BIERGQSBzdGF0ZSBtYXkgaGF2ZSBtdWx0aXBsZSByZWZlcmVuY2VzIHRvIGEgcGFydGljdWxhciBzdGF0ZSxcbi8vIGJ1dCB3aXRoIGRpZmZlcmVudCBBVE4gY29udGV4dHMgKHdpdGggc2FtZSBvciBkaWZmZXJlbnQgYWx0cylcbi8vIG1lYW5pbmcgdGhhdCBzdGF0ZSB3YXMgcmVhY2hlZCB2aWEgYSBkaWZmZXJlbnQgc2V0IG9mIHJ1bGUgaW52b2NhdGlvbnMuPC9wPlxuLy8gL1xuXG5mdW5jdGlvbiBERkFTdGF0ZShzdGF0ZU51bWJlciwgY29uZmlncykge1xuXHRpZiAoc3RhdGVOdW1iZXIgPT09IG51bGwpIHtcblx0XHRzdGF0ZU51bWJlciA9IC0xO1xuXHR9XG5cdGlmIChjb25maWdzID09PSBudWxsKSB7XG5cdFx0Y29uZmlncyA9IG5ldyBBVE5Db25maWdTZXQoKTtcblx0fVxuXHR0aGlzLnN0YXRlTnVtYmVyID0gc3RhdGVOdW1iZXI7XG5cdHRoaXMuY29uZmlncyA9IGNvbmZpZ3M7XG5cdC8vIHtAY29kZSBlZGdlc1tzeW1ib2xdfSBwb2ludHMgdG8gdGFyZ2V0IG9mIHN5bWJvbC4gU2hpZnQgdXAgYnkgMSBzbyAoLTEpXG5cdC8vIHtAbGluayBUb2tlbi8vRU9GfSBtYXBzIHRvIHtAY29kZSBlZGdlc1swXX0uXG5cdHRoaXMuZWRnZXMgPSBudWxsO1xuXHR0aGlzLmlzQWNjZXB0U3RhdGUgPSBmYWxzZTtcblx0Ly8gaWYgYWNjZXB0IHN0YXRlLCB3aGF0IHR0eXBlIGRvIHdlIG1hdGNoIG9yIGFsdCBkbyB3ZSBwcmVkaWN0P1xuXHQvLyBUaGlzIGlzIHNldCB0byB7QGxpbmsgQVROLy9JTlZBTElEX0FMVF9OVU1CRVJ9IHdoZW4ge0BsaW5rXG5cdC8vIC8vcHJlZGljYXRlc317QGNvZGUgIT1udWxsfSBvclxuXHQvLyB7QGxpbmsgLy9yZXF1aXJlc0Z1bGxDb250ZXh0fS5cblx0dGhpcy5wcmVkaWN0aW9uID0gMDtcblx0dGhpcy5sZXhlckFjdGlvbkV4ZWN1dG9yID0gbnVsbDtcblx0Ly8gSW5kaWNhdGVzIHRoYXQgdGhpcyBzdGF0ZSB3YXMgY3JlYXRlZCBkdXJpbmcgU0xMIHByZWRpY3Rpb24gdGhhdFxuXHQvLyBkaXNjb3ZlcmVkIGEgY29uZmxpY3QgYmV0d2VlbiB0aGUgY29uZmlndXJhdGlvbnMgaW4gdGhlIHN0YXRlLiBGdXR1cmVcblx0Ly8ge0BsaW5rIFBhcnNlckFUTlNpbXVsYXRvci8vZXhlY0FUTn0gaW52b2NhdGlvbnMgaW1tZWRpYXRlbHkganVtcGVkIGRvaW5nXG5cdC8vIGZ1bGwgY29udGV4dCBwcmVkaWN0aW9uIGlmIHRoaXMgZmllbGQgaXMgdHJ1ZS5cblx0dGhpcy5yZXF1aXJlc0Z1bGxDb250ZXh0ID0gZmFsc2U7XG5cdC8vIER1cmluZyBTTEwgcGFyc2luZywgdGhpcyBpcyBhIGxpc3Qgb2YgcHJlZGljYXRlcyBhc3NvY2lhdGVkIHdpdGggdGhlXG5cdC8vIEFUTiBjb25maWd1cmF0aW9ucyBvZiB0aGUgREZBIHN0YXRlLiBXaGVuIHdlIGhhdmUgcHJlZGljYXRlcyxcblx0Ly8ge0BsaW5rIC8vcmVxdWlyZXNGdWxsQ29udGV4dH0gaXMge0Bjb2RlIGZhbHNlfSBzaW5jZSBmdWxsIGNvbnRleHRcblx0Ly8gcHJlZGljdGlvbiBldmFsdWF0ZXMgcHJlZGljYXRlc1xuXHQvLyBvbi10aGUtZmx5LiBJZiB0aGlzIGlzIG5vdCBudWxsLCB0aGVuIHtAbGluayAvL3ByZWRpY3Rpb259IGlzXG5cdC8vIHtAbGluayBBVE4vL0lOVkFMSURfQUxUX05VTUJFUn0uXG5cdC8vXG5cdC8vIDxwPldlIG9ubHkgdXNlIHRoZXNlIGZvciBub24te0BsaW5rIC8vcmVxdWlyZXNGdWxsQ29udGV4dH0gYnV0XG5cdC8vIGNvbmZsaWN0aW5nIHN0YXRlcy4gVGhhdFxuXHQvLyBtZWFucyB3ZSBrbm93IGZyb20gdGhlIGNvbnRleHQgKGl0J3MgJCBvciB3ZSBkb24ndCBkaXAgaW50byBvdXRlclxuXHQvLyBjb250ZXh0KSB0aGF0IGl0J3MgYW4gYW1iaWd1aXR5IG5vdCBhIGNvbmZsaWN0LjwvcD5cblx0Ly9cblx0Ly8gPHA+VGhpcyBsaXN0IGlzIGNvbXB1dGVkIGJ5IHtAbGlua1xuXHQvLyBQYXJzZXJBVE5TaW11bGF0b3IvL3ByZWRpY2F0ZURGQVN0YXRlfS48L3A+XG5cdHRoaXMucHJlZGljYXRlcyA9IG51bGw7XG5cdHJldHVybiB0aGlzO1xufVxuXG4vLyBHZXQgdGhlIHNldCBvZiBhbGwgYWx0cyBtZW50aW9uZWQgYnkgYWxsIEFUTiBjb25maWd1cmF0aW9ucyBpbiB0aGlzXG4vLyBERkEgc3RhdGUuXG5ERkFTdGF0ZS5wcm90b3R5cGUuZ2V0QWx0U2V0ID0gZnVuY3Rpb24oKSB7XG5cdHZhciBhbHRzID0gbmV3IFNldCgpO1xuXHRpZiAodGhpcy5jb25maWdzICE9PSBudWxsKSB7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvbmZpZ3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBjID0gdGhpcy5jb25maWdzW2ldO1xuXHRcdFx0YWx0cy5hZGQoYy5hbHQpO1xuXHRcdH1cblx0fVxuXHRpZiAoYWx0cy5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gYWx0cztcblx0fVxufTtcblxuLy8gVHdvIHtAbGluayBERkFTdGF0ZX0gaW5zdGFuY2VzIGFyZSBlcXVhbCBpZiB0aGVpciBBVE4gY29uZmlndXJhdGlvbiBzZXRzXG4vLyBhcmUgdGhlIHNhbWUuIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gc2VlIGlmIGEgc3RhdGUgYWxyZWFkeSBleGlzdHMuXG4vL1xuLy8gPHA+QmVjYXVzZSB0aGUgbnVtYmVyIG9mIGFsdGVybmF0aXZlcyBhbmQgbnVtYmVyIG9mIEFUTiBjb25maWd1cmF0aW9ucyBhcmVcbi8vIGZpbml0ZSwgdGhlcmUgaXMgYSBmaW5pdGUgbnVtYmVyIG9mIERGQSBzdGF0ZXMgdGhhdCBjYW4gYmUgcHJvY2Vzc2VkLlxuLy8gVGhpcyBpcyBuZWNlc3NhcnkgdG8gc2hvdyB0aGF0IHRoZSBhbGdvcml0aG0gdGVybWluYXRlcy48L3A+XG4vL1xuLy8gPHA+Q2Fubm90IHRlc3QgdGhlIERGQSBzdGF0ZSBudW1iZXJzIGhlcmUgYmVjYXVzZSBpblxuLy8ge0BsaW5rIFBhcnNlckFUTlNpbXVsYXRvci8vYWRkREZBU3RhdGV9IHdlIG5lZWQgdG8ga25vdyBpZiBhbnkgb3RoZXIgc3RhdGVcbi8vIGV4aXN0cyB0aGF0IGhhcyB0aGlzIGV4YWN0IHNldCBvZiBBVE4gY29uZmlndXJhdGlvbnMuIFRoZVxuLy8ge0BsaW5rIC8vc3RhdGVOdW1iZXJ9IGlzIGlycmVsZXZhbnQuPC9wPlxuREZBU3RhdGUucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uKG90aGVyKSB7XG5cdC8vIGNvbXBhcmUgc2V0IG9mIEFUTiBjb25maWd1cmF0aW9ucyBpbiB0aGlzIHNldCB3aXRoIG90aGVyXG5cdHJldHVybiB0aGlzID09PSBvdGhlciB8fFxuXHRcdFx0KG90aGVyIGluc3RhbmNlb2YgREZBU3RhdGUgJiZcblx0XHRcdFx0dGhpcy5jb25maWdzLmVxdWFscyhvdGhlci5jb25maWdzKSk7XG59O1xuXG5ERkFTdGF0ZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0dmFyIHMgPSBcIlwiICsgdGhpcy5zdGF0ZU51bWJlciArIFwiOlwiICsgdGhpcy5jb25maWdzO1xuXHRpZih0aGlzLmlzQWNjZXB0U3RhdGUpIHtcbiAgICAgICAgcyA9IHMgKyBcIj0+XCI7XG4gICAgICAgIGlmICh0aGlzLnByZWRpY2F0ZXMgIT09IG51bGwpXG4gICAgICAgICAgICBzID0gcyArIHRoaXMucHJlZGljYXRlcztcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcyA9IHMgKyB0aGlzLnByZWRpY3Rpb247XG4gICAgfVxuXHRyZXR1cm4gcztcbn07XG5cbkRGQVN0YXRlLnByb3RvdHlwZS5oYXNoQ29kZSA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgaGFzaCA9IG5ldyBIYXNoKCk7XG5cdGhhc2gudXBkYXRlKHRoaXMuY29uZmlncyk7XG5cdGlmKHRoaXMuaXNBY2NlcHRTdGF0ZSkge1xuICAgICAgICBpZiAodGhpcy5wcmVkaWNhdGVzICE9PSBudWxsKVxuICAgICAgICAgICAgaGFzaC51cGRhdGUodGhpcy5wcmVkaWNhdGVzKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgaGFzaC51cGRhdGUodGhpcy5wcmVkaWN0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIGhhc2guZmluaXNoKCk7XG59O1xuXG5leHBvcnRzLkRGQVN0YXRlID0gREZBU3RhdGU7XG5leHBvcnRzLlByZWRQcmVkaWN0aW9uID0gUHJlZFByZWRpY3Rpb247XG4iLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG5cbmV4cG9ydHMuREZBID0gcmVxdWlyZSgnLi9ERkEnKS5ERkE7XG5leHBvcnRzLkRGQVNlcmlhbGl6ZXIgPSByZXF1aXJlKCcuL0RGQVNlcmlhbGl6ZXInKS5ERkFTZXJpYWxpemVyO1xuZXhwb3J0cy5MZXhlckRGQVNlcmlhbGl6ZXIgPSByZXF1aXJlKCcuL0RGQVNlcmlhbGl6ZXInKS5MZXhlckRGQVNlcmlhbGl6ZXI7XG5leHBvcnRzLlByZWRQcmVkaWN0aW9uID0gcmVxdWlyZSgnLi9ERkFTdGF0ZScpLlByZWRQcmVkaWN0aW9uO1xuIiwiLy9cbi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbi8vXG5cbi8vXG4vLyBUaGlzIGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBBTlRMUkVycm9yTGlzdGVuZXJ9IGNhbiBiZSB1c2VkIHRvIGlkZW50aWZ5XG4vLyBjZXJ0YWluIHBvdGVudGlhbCBjb3JyZWN0bmVzcyBhbmQgcGVyZm9ybWFuY2UgcHJvYmxlbXMgaW4gZ3JhbW1hcnMuIFwiUmVwb3J0c1wiXG4vLyBhcmUgbWFkZSBieSBjYWxsaW5nIHtAbGluayBQYXJzZXIvL25vdGlmeUVycm9yTGlzdGVuZXJzfSB3aXRoIHRoZSBhcHByb3ByaWF0ZVxuLy8gbWVzc2FnZS5cbi8vXG4vLyA8dWw+XG4vLyA8bGk+PGI+QW1iaWd1aXRpZXM8L2I+OiBUaGVzZSBhcmUgY2FzZXMgd2hlcmUgbW9yZSB0aGFuIG9uZSBwYXRoIHRocm91Z2ggdGhlXG4vLyBncmFtbWFyIGNhbiBtYXRjaCB0aGUgaW5wdXQuPC9saT5cbi8vIDxsaT48Yj5XZWFrIGNvbnRleHQgc2Vuc2l0aXZpdHk8L2I+OiBUaGVzZSBhcmUgY2FzZXMgd2hlcmUgZnVsbC1jb250ZXh0XG4vLyBwcmVkaWN0aW9uIHJlc29sdmVkIGFuIFNMTCBjb25mbGljdCB0byBhIHVuaXF1ZSBhbHRlcm5hdGl2ZSB3aGljaCBlcXVhbGVkIHRoZVxuLy8gbWluaW11bSBhbHRlcm5hdGl2ZSBvZiB0aGUgU0xMIGNvbmZsaWN0LjwvbGk+XG4vLyA8bGk+PGI+U3Ryb25nIChmb3JjZWQpIGNvbnRleHQgc2Vuc2l0aXZpdHk8L2I+OiBUaGVzZSBhcmUgY2FzZXMgd2hlcmUgdGhlXG4vLyBmdWxsLWNvbnRleHQgcHJlZGljdGlvbiByZXNvbHZlZCBhbiBTTEwgY29uZmxpY3QgdG8gYSB1bmlxdWUgYWx0ZXJuYXRpdmUsXG4vLyA8ZW0+YW5kPC9lbT4gdGhlIG1pbmltdW0gYWx0ZXJuYXRpdmUgb2YgdGhlIFNMTCBjb25mbGljdCB3YXMgZm91bmQgdG8gbm90IGJlXG4vLyBhIHRydWx5IHZpYWJsZSBhbHRlcm5hdGl2ZS4gVHdvLXN0YWdlIHBhcnNpbmcgY2Fubm90IGJlIHVzZWQgZm9yIGlucHV0cyB3aGVyZVxuLy8gdGhpcyBzaXR1YXRpb24gb2NjdXJzLjwvbGk+XG4vLyA8L3VsPlxuXG52YXIgQml0U2V0ID0gcmVxdWlyZSgnLi8uLi9VdGlscycpLkJpdFNldDtcbnZhciBFcnJvckxpc3RlbmVyID0gcmVxdWlyZSgnLi9FcnJvckxpc3RlbmVyJykuRXJyb3JMaXN0ZW5lcjtcbnZhciBJbnRlcnZhbCA9IHJlcXVpcmUoJy4vLi4vSW50ZXJ2YWxTZXQnKS5JbnRlcnZhbDtcblxuZnVuY3Rpb24gRGlhZ25vc3RpY0Vycm9yTGlzdGVuZXIoZXhhY3RPbmx5KSB7XG5cdEVycm9yTGlzdGVuZXIuY2FsbCh0aGlzKTtcblx0ZXhhY3RPbmx5ID0gZXhhY3RPbmx5IHx8IHRydWU7XG5cdC8vIHdoZXRoZXIgYWxsIGFtYmlndWl0aWVzIG9yIG9ubHkgZXhhY3QgYW1iaWd1aXRpZXMgYXJlIHJlcG9ydGVkLlxuXHR0aGlzLmV4YWN0T25seSA9IGV4YWN0T25seTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkRpYWdub3N0aWNFcnJvckxpc3RlbmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUpO1xuRGlhZ25vc3RpY0Vycm9yTGlzdGVuZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRGlhZ25vc3RpY0Vycm9yTGlzdGVuZXI7XG5cbkRpYWdub3N0aWNFcnJvckxpc3RlbmVyLnByb3RvdHlwZS5yZXBvcnRBbWJpZ3VpdHkgPSBmdW5jdGlvbihyZWNvZ25pemVyLCBkZmEsXG5cdFx0c3RhcnRJbmRleCwgc3RvcEluZGV4LCBleGFjdCwgYW1iaWdBbHRzLCBjb25maWdzKSB7XG5cdGlmICh0aGlzLmV4YWN0T25seSAmJiAhZXhhY3QpIHtcblx0XHRyZXR1cm47XG5cdH1cblx0dmFyIG1zZyA9IFwicmVwb3J0QW1iaWd1aXR5IGQ9XCIgK1xuXHRcdFx0dGhpcy5nZXREZWNpc2lvbkRlc2NyaXB0aW9uKHJlY29nbml6ZXIsIGRmYSkgK1xuXHRcdFx0XCI6IGFtYmlnQWx0cz1cIiArXG5cdFx0XHR0aGlzLmdldENvbmZsaWN0aW5nQWx0cyhhbWJpZ0FsdHMsIGNvbmZpZ3MpICtcblx0XHRcdFwiLCBpbnB1dD0nXCIgK1xuXHRcdFx0cmVjb2duaXplci5nZXRUb2tlblN0cmVhbSgpLmdldFRleHQobmV3IEludGVydmFsKHN0YXJ0SW5kZXgsIHN0b3BJbmRleCkpICsgXCInXCI7XG5cdHJlY29nbml6ZXIubm90aWZ5RXJyb3JMaXN0ZW5lcnMobXNnKTtcbn07XG5cbkRpYWdub3N0aWNFcnJvckxpc3RlbmVyLnByb3RvdHlwZS5yZXBvcnRBdHRlbXB0aW5nRnVsbENvbnRleHQgPSBmdW5jdGlvbihcblx0XHRyZWNvZ25pemVyLCBkZmEsIHN0YXJ0SW5kZXgsIHN0b3BJbmRleCwgY29uZmxpY3RpbmdBbHRzLCBjb25maWdzKSB7XG5cdHZhciBtc2cgPSBcInJlcG9ydEF0dGVtcHRpbmdGdWxsQ29udGV4dCBkPVwiICtcblx0XHRcdHRoaXMuZ2V0RGVjaXNpb25EZXNjcmlwdGlvbihyZWNvZ25pemVyLCBkZmEpICtcblx0XHRcdFwiLCBpbnB1dD0nXCIgK1xuXHRcdFx0cmVjb2duaXplci5nZXRUb2tlblN0cmVhbSgpLmdldFRleHQobmV3IEludGVydmFsKHN0YXJ0SW5kZXgsIHN0b3BJbmRleCkpICsgXCInXCI7XG5cdHJlY29nbml6ZXIubm90aWZ5RXJyb3JMaXN0ZW5lcnMobXNnKTtcbn07XG5cbkRpYWdub3N0aWNFcnJvckxpc3RlbmVyLnByb3RvdHlwZS5yZXBvcnRDb250ZXh0U2Vuc2l0aXZpdHkgPSBmdW5jdGlvbihcblx0XHRyZWNvZ25pemVyLCBkZmEsIHN0YXJ0SW5kZXgsIHN0b3BJbmRleCwgcHJlZGljdGlvbiwgY29uZmlncykge1xuXHR2YXIgbXNnID0gXCJyZXBvcnRDb250ZXh0U2Vuc2l0aXZpdHkgZD1cIiArXG5cdFx0XHR0aGlzLmdldERlY2lzaW9uRGVzY3JpcHRpb24ocmVjb2duaXplciwgZGZhKSArXG5cdFx0XHRcIiwgaW5wdXQ9J1wiICtcblx0XHRcdHJlY29nbml6ZXIuZ2V0VG9rZW5TdHJlYW0oKS5nZXRUZXh0KG5ldyBJbnRlcnZhbChzdGFydEluZGV4LCBzdG9wSW5kZXgpKSArIFwiJ1wiO1xuXHRyZWNvZ25pemVyLm5vdGlmeUVycm9yTGlzdGVuZXJzKG1zZyk7XG59O1xuXG5EaWFnbm9zdGljRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUuZ2V0RGVjaXNpb25EZXNjcmlwdGlvbiA9IGZ1bmN0aW9uKHJlY29nbml6ZXIsIGRmYSkge1xuXHR2YXIgZGVjaXNpb24gPSBkZmEuZGVjaXNpb247XG5cdHZhciBydWxlSW5kZXggPSBkZmEuYXRuU3RhcnRTdGF0ZS5ydWxlSW5kZXg7XG5cblx0dmFyIHJ1bGVOYW1lcyA9IHJlY29nbml6ZXIucnVsZU5hbWVzO1xuXHRpZiAocnVsZUluZGV4IDwgMCB8fCBydWxlSW5kZXggPj0gcnVsZU5hbWVzLmxlbmd0aCkge1xuXHRcdHJldHVybiBcIlwiICsgZGVjaXNpb247XG5cdH1cblx0dmFyIHJ1bGVOYW1lID0gcnVsZU5hbWVzW3J1bGVJbmRleF0gfHwgbnVsbDtcblx0aWYgKHJ1bGVOYW1lID09PSBudWxsIHx8IHJ1bGVOYW1lLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiBcIlwiICsgZGVjaXNpb247XG5cdH1cblx0cmV0dXJuIFwiXCIgKyBkZWNpc2lvbiArIFwiIChcIiArIHJ1bGVOYW1lICsgXCIpXCI7XG59O1xuXG4vL1xuLy8gQ29tcHV0ZXMgdGhlIHNldCBvZiBjb25mbGljdGluZyBvciBhbWJpZ3VvdXMgYWx0ZXJuYXRpdmVzIGZyb20gYVxuLy8gY29uZmlndXJhdGlvbiBzZXQsIGlmIHRoYXQgaW5mb3JtYXRpb24gd2FzIG5vdCBhbHJlYWR5IHByb3ZpZGVkIGJ5IHRoZVxuLy8gcGFyc2VyLlxuLy9cbi8vIEBwYXJhbSByZXBvcnRlZEFsdHMgVGhlIHNldCBvZiBjb25mbGljdGluZyBvciBhbWJpZ3VvdXMgYWx0ZXJuYXRpdmVzLCBhc1xuLy8gcmVwb3J0ZWQgYnkgdGhlIHBhcnNlci5cbi8vIEBwYXJhbSBjb25maWdzIFRoZSBjb25mbGljdGluZyBvciBhbWJpZ3VvdXMgY29uZmlndXJhdGlvbiBzZXQuXG4vLyBAcmV0dXJuIFJldHVybnMge0Bjb2RlIHJlcG9ydGVkQWx0c30gaWYgaXQgaXMgbm90IHtAY29kZSBudWxsfSwgb3RoZXJ3aXNlXG4vLyByZXR1cm5zIHRoZSBzZXQgb2YgYWx0ZXJuYXRpdmVzIHJlcHJlc2VudGVkIGluIHtAY29kZSBjb25maWdzfS5cbi8vXG5EaWFnbm9zdGljRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUuZ2V0Q29uZmxpY3RpbmdBbHRzID0gZnVuY3Rpb24ocmVwb3J0ZWRBbHRzLCBjb25maWdzKSB7XG5cdGlmIChyZXBvcnRlZEFsdHMgIT09IG51bGwpIHtcblx0XHRyZXR1cm4gcmVwb3J0ZWRBbHRzO1xuXHR9XG5cdHZhciByZXN1bHQgPSBuZXcgQml0U2V0KCk7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgY29uZmlncy5pdGVtcy5sZW5ndGg7IGkrKykge1xuXHRcdHJlc3VsdC5hZGQoY29uZmlncy5pdGVtc1tpXS5hbHQpO1xuXHR9XG5cdHJldHVybiBcIntcIiArIHJlc3VsdC52YWx1ZXMoKS5qb2luKFwiLCBcIikgKyBcIn1cIjtcbn07XG5cbmV4cG9ydHMuRGlhZ25vc3RpY0Vycm9yTGlzdGVuZXIgPSBEaWFnbm9zdGljRXJyb3JMaXN0ZW5lcjsiLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuXG4vLyBQcm92aWRlcyBhbiBlbXB0eSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBBTlRMUkVycm9yTGlzdGVuZXJ9LiBUaGVcbi8vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgZWFjaCBtZXRob2QgZG9lcyBub3RoaW5nLCBidXQgY2FuIGJlIG92ZXJyaWRkZW4gYXNcbi8vIG5lY2Vzc2FyeS5cblxuZnVuY3Rpb24gRXJyb3JMaXN0ZW5lcigpIHtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkVycm9yTGlzdGVuZXIucHJvdG90eXBlLnN5bnRheEVycm9yID0gZnVuY3Rpb24ocmVjb2duaXplciwgb2ZmZW5kaW5nU3ltYm9sLCBsaW5lLCBjb2x1bW4sIG1zZywgZSkge1xufTtcblxuRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUucmVwb3J0QW1iaWd1aXR5ID0gZnVuY3Rpb24ocmVjb2duaXplciwgZGZhLCBzdGFydEluZGV4LCBzdG9wSW5kZXgsIGV4YWN0LCBhbWJpZ0FsdHMsIGNvbmZpZ3MpIHtcbn07XG5cbkVycm9yTGlzdGVuZXIucHJvdG90eXBlLnJlcG9ydEF0dGVtcHRpbmdGdWxsQ29udGV4dCA9IGZ1bmN0aW9uKHJlY29nbml6ZXIsIGRmYSwgc3RhcnRJbmRleCwgc3RvcEluZGV4LCBjb25mbGljdGluZ0FsdHMsIGNvbmZpZ3MpIHtcbn07XG5cbkVycm9yTGlzdGVuZXIucHJvdG90eXBlLnJlcG9ydENvbnRleHRTZW5zaXRpdml0eSA9IGZ1bmN0aW9uKHJlY29nbml6ZXIsIGRmYSwgc3RhcnRJbmRleCwgc3RvcEluZGV4LCBwcmVkaWN0aW9uLCBjb25maWdzKSB7XG59O1xuXG5mdW5jdGlvbiBDb25zb2xlRXJyb3JMaXN0ZW5lcigpIHtcblx0RXJyb3JMaXN0ZW5lci5jYWxsKHRoaXMpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuQ29uc29sZUVycm9yTGlzdGVuZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvckxpc3RlbmVyLnByb3RvdHlwZSk7XG5Db25zb2xlRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb25zb2xlRXJyb3JMaXN0ZW5lcjtcblxuLy9cbi8vIFByb3ZpZGVzIGEgZGVmYXVsdCBpbnN0YW5jZSBvZiB7QGxpbmsgQ29uc29sZUVycm9yTGlzdGVuZXJ9LlxuLy9cbkNvbnNvbGVFcnJvckxpc3RlbmVyLklOU1RBTkNFID0gbmV3IENvbnNvbGVFcnJvckxpc3RlbmVyKCk7XG5cbi8vXG4vLyB7QGluaGVyaXREb2N9XG4vL1xuLy8gPHA+XG4vLyBUaGlzIGltcGxlbWVudGF0aW9uIHByaW50cyBtZXNzYWdlcyB0byB7QGxpbmsgU3lzdGVtLy9lcnJ9IGNvbnRhaW5pbmcgdGhlXG4vLyB2YWx1ZXMgb2Yge0Bjb2RlIGxpbmV9LCB7QGNvZGUgY2hhclBvc2l0aW9uSW5MaW5lfSwgYW5kIHtAY29kZSBtc2d9IHVzaW5nXG4vLyB0aGUgZm9sbG93aW5nIGZvcm1hdC48L3A+XG4vL1xuLy8gPHByZT5cbi8vIGxpbmUgPGVtPmxpbmU8L2VtPjo8ZW0+Y2hhclBvc2l0aW9uSW5MaW5lPC9lbT4gPGVtPm1zZzwvZW0+XG4vLyA8L3ByZT5cbi8vXG5Db25zb2xlRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUuc3ludGF4RXJyb3IgPSBmdW5jdGlvbihyZWNvZ25pemVyLCBvZmZlbmRpbmdTeW1ib2wsIGxpbmUsIGNvbHVtbiwgbXNnLCBlKSB7XG4gICAgY29uc29sZS5lcnJvcihcImxpbmUgXCIgKyBsaW5lICsgXCI6XCIgKyBjb2x1bW4gKyBcIiBcIiArIG1zZyk7XG59O1xuXG5mdW5jdGlvbiBQcm94eUVycm9yTGlzdGVuZXIoZGVsZWdhdGVzKSB7XG5cdEVycm9yTGlzdGVuZXIuY2FsbCh0aGlzKTtcbiAgICBpZiAoZGVsZWdhdGVzPT09bnVsbCkge1xuICAgICAgICB0aHJvdyBcImRlbGVnYXRlc1wiO1xuICAgIH1cbiAgICB0aGlzLmRlbGVnYXRlcyA9IGRlbGVnYXRlcztcblx0cmV0dXJuIHRoaXM7XG59XG5cblByb3h5RXJyb3JMaXN0ZW5lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yTGlzdGVuZXIucHJvdG90eXBlKTtcblByb3h5RXJyb3JMaXN0ZW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcm94eUVycm9yTGlzdGVuZXI7XG5cblByb3h5RXJyb3JMaXN0ZW5lci5wcm90b3R5cGUuc3ludGF4RXJyb3IgPSBmdW5jdGlvbihyZWNvZ25pemVyLCBvZmZlbmRpbmdTeW1ib2wsIGxpbmUsIGNvbHVtbiwgbXNnLCBlKSB7XG4gICAgdGhpcy5kZWxlZ2F0ZXMubWFwKGZ1bmN0aW9uKGQpIHsgZC5zeW50YXhFcnJvcihyZWNvZ25pemVyLCBvZmZlbmRpbmdTeW1ib2wsIGxpbmUsIGNvbHVtbiwgbXNnLCBlKTsgfSk7XG59O1xuXG5Qcm94eUVycm9yTGlzdGVuZXIucHJvdG90eXBlLnJlcG9ydEFtYmlndWl0eSA9IGZ1bmN0aW9uKHJlY29nbml6ZXIsIGRmYSwgc3RhcnRJbmRleCwgc3RvcEluZGV4LCBleGFjdCwgYW1iaWdBbHRzLCBjb25maWdzKSB7XG4gICAgdGhpcy5kZWxlZ2F0ZXMubWFwKGZ1bmN0aW9uKGQpIHsgZC5yZXBvcnRBbWJpZ3VpdHkocmVjb2duaXplciwgZGZhLCBzdGFydEluZGV4LCBzdG9wSW5kZXgsIGV4YWN0LCBhbWJpZ0FsdHMsIGNvbmZpZ3MpOyB9KTtcbn07XG5cblByb3h5RXJyb3JMaXN0ZW5lci5wcm90b3R5cGUucmVwb3J0QXR0ZW1wdGluZ0Z1bGxDb250ZXh0ID0gZnVuY3Rpb24ocmVjb2duaXplciwgZGZhLCBzdGFydEluZGV4LCBzdG9wSW5kZXgsIGNvbmZsaWN0aW5nQWx0cywgY29uZmlncykge1xuXHR0aGlzLmRlbGVnYXRlcy5tYXAoZnVuY3Rpb24oZCkgeyBkLnJlcG9ydEF0dGVtcHRpbmdGdWxsQ29udGV4dChyZWNvZ25pemVyLCBkZmEsIHN0YXJ0SW5kZXgsIHN0b3BJbmRleCwgY29uZmxpY3RpbmdBbHRzLCBjb25maWdzKTsgfSk7XG59O1xuXG5Qcm94eUVycm9yTGlzdGVuZXIucHJvdG90eXBlLnJlcG9ydENvbnRleHRTZW5zaXRpdml0eSA9IGZ1bmN0aW9uKHJlY29nbml6ZXIsIGRmYSwgc3RhcnRJbmRleCwgc3RvcEluZGV4LCBwcmVkaWN0aW9uLCBjb25maWdzKSB7XG5cdHRoaXMuZGVsZWdhdGVzLm1hcChmdW5jdGlvbihkKSB7IGQucmVwb3J0Q29udGV4dFNlbnNpdGl2aXR5KHJlY29nbml6ZXIsIGRmYSwgc3RhcnRJbmRleCwgc3RvcEluZGV4LCBwcmVkaWN0aW9uLCBjb25maWdzKTsgfSk7XG59O1xuXG5leHBvcnRzLkVycm9yTGlzdGVuZXIgPSBFcnJvckxpc3RlbmVyO1xuZXhwb3J0cy5Db25zb2xlRXJyb3JMaXN0ZW5lciA9IENvbnNvbGVFcnJvckxpc3RlbmVyO1xuZXhwb3J0cy5Qcm94eUVycm9yTGlzdGVuZXIgPSBQcm94eUVycm9yTGlzdGVuZXI7XG5cbiIsIi8vXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vL1xuXG52YXIgVG9rZW4gPSByZXF1aXJlKCcuLy4uL1Rva2VuJykuVG9rZW47XG52YXIgRXJyb3JzID0gcmVxdWlyZSgnLi9FcnJvcnMnKTtcbnZhciBOb1ZpYWJsZUFsdEV4Y2VwdGlvbiA9IEVycm9ycy5Ob1ZpYWJsZUFsdEV4Y2VwdGlvbjtcbnZhciBJbnB1dE1pc21hdGNoRXhjZXB0aW9uID0gRXJyb3JzLklucHV0TWlzbWF0Y2hFeGNlcHRpb247XG52YXIgRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9uID0gRXJyb3JzLkZhaWxlZFByZWRpY2F0ZUV4Y2VwdGlvbjtcbnZhciBQYXJzZUNhbmNlbGxhdGlvbkV4Y2VwdGlvbiA9IEVycm9ycy5QYXJzZUNhbmNlbGxhdGlvbkV4Y2VwdGlvbjtcbnZhciBBVE5TdGF0ZSA9IHJlcXVpcmUoJy4vLi4vYXRuL0FUTlN0YXRlJykuQVROU3RhdGU7XG52YXIgSW50ZXJ2YWwgPSByZXF1aXJlKCcuLy4uL0ludGVydmFsU2V0JykuSW50ZXJ2YWw7XG52YXIgSW50ZXJ2YWxTZXQgPSByZXF1aXJlKCcuLy4uL0ludGVydmFsU2V0JykuSW50ZXJ2YWxTZXQ7XG5cbmZ1bmN0aW9uIEVycm9yU3RyYXRlZ3koKSB7XG5cbn1cblxuRXJyb3JTdHJhdGVneS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbihyZWNvZ25pemVyKXtcbn07XG5cbkVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlY292ZXJJbmxpbmUgPSBmdW5jdGlvbihyZWNvZ25pemVyKXtcbn07XG5cbkVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlY292ZXIgPSBmdW5jdGlvbihyZWNvZ25pemVyLCBlKXtcbn07XG5cbkVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbihyZWNvZ25pemVyKXtcbn07XG5cbkVycm9yU3RyYXRlZ3kucHJvdG90eXBlLmluRXJyb3JSZWNvdmVyeU1vZGUgPSBmdW5jdGlvbihyZWNvZ25pemVyKXtcbn07XG5cbkVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlcG9ydEVycm9yID0gZnVuY3Rpb24ocmVjb2duaXplcil7XG59O1xuXG5cblxuLy8gVGhpcyBpcyB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB7QGxpbmsgQU5UTFJFcnJvclN0cmF0ZWd5fSB1c2VkIGZvclxuLy8gZXJyb3IgcmVwb3J0aW5nIGFuZCByZWNvdmVyeSBpbiBBTlRMUiBwYXJzZXJzLlxuLy9cbmZ1bmN0aW9uIERlZmF1bHRFcnJvclN0cmF0ZWd5KCkge1xuXHRFcnJvclN0cmF0ZWd5LmNhbGwodGhpcyk7XG4gICAgLy8gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGVycm9yIHN0cmF0ZWd5IGlzIGN1cnJlbnRseSBcInJlY292ZXJpbmcgZnJvbSBhblxuICAgIC8vIGVycm9yXCIuIFRoaXMgaXMgdXNlZCB0byBzdXBwcmVzcyByZXBvcnRpbmcgbXVsdGlwbGUgZXJyb3IgbWVzc2FnZXMgd2hpbGVcbiAgICAvLyBhdHRlbXB0aW5nIHRvIHJlY292ZXIgZnJvbSBhIGRldGVjdGVkIHN5bnRheCBlcnJvci5cbiAgICAvL1xuICAgIC8vIEBzZWUgLy9pbkVycm9yUmVjb3ZlcnlNb2RlXG4gICAgLy9cbiAgICB0aGlzLmVycm9yUmVjb3ZlcnlNb2RlID0gZmFsc2U7XG5cbiAgICAvLyBUaGUgaW5kZXggaW50byB0aGUgaW5wdXQgc3RyZWFtIHdoZXJlIHRoZSBsYXN0IGVycm9yIG9jY3VycmVkLlxuICAgIC8vIFRoaXMgaXMgdXNlZCB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzIHdoZXJlIGFuIGVycm9yIGlzIGZvdW5kXG4gICAgLy8gYnV0IG5vIHRva2VuIGlzIGNvbnN1bWVkIGR1cmluZyByZWNvdmVyeS4uLmFub3RoZXIgZXJyb3IgaXMgZm91bmQsXG4gICAgLy8gYWQgbmF1c2V1bS4gVGhpcyBpcyBhIGZhaWxzYWZlIG1lY2hhbmlzbSB0byBndWFyYW50ZWUgdGhhdCBhdCBsZWFzdFxuICAgIC8vIG9uZSB0b2tlbi90cmVlIG5vZGUgaXMgY29uc3VtZWQgZm9yIHR3byBlcnJvcnMuXG4gICAgLy9cbiAgICB0aGlzLmxhc3RFcnJvckluZGV4ID0gLTE7XG4gICAgdGhpcy5sYXN0RXJyb3JTdGF0ZXMgPSBudWxsO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5EZWZhdWx0RXJyb3JTdHJhdGVneS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yU3RyYXRlZ3kucHJvdG90eXBlKTtcbkRlZmF1bHRFcnJvclN0cmF0ZWd5LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERlZmF1bHRFcnJvclN0cmF0ZWd5O1xuXG4vLyA8cD5UaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBzaW1wbHkgY2FsbHMge0BsaW5rIC8vZW5kRXJyb3JDb25kaXRpb259IHRvXG4vLyBlbnN1cmUgdGhhdCB0aGUgaGFuZGxlciBpcyBub3QgaW4gZXJyb3IgcmVjb3ZlcnkgbW9kZS48L3A+XG5EZWZhdWx0RXJyb3JTdHJhdGVneS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbihyZWNvZ25pemVyKSB7XG4gICAgdGhpcy5lbmRFcnJvckNvbmRpdGlvbihyZWNvZ25pemVyKTtcbn07XG5cbi8vXG4vLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gZW50ZXIgZXJyb3IgcmVjb3ZlcnkgbW9kZSB3aGVuIGEgcmVjb2duaXRpb25cbi8vIGV4Y2VwdGlvbiBpcyByZXBvcnRlZC5cbi8vXG4vLyBAcGFyYW0gcmVjb2duaXplciB0aGUgcGFyc2VyIGluc3RhbmNlXG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLmJlZ2luRXJyb3JDb25kaXRpb24gPSBmdW5jdGlvbihyZWNvZ25pemVyKSB7XG4gICAgdGhpcy5lcnJvclJlY292ZXJ5TW9kZSA9IHRydWU7XG59O1xuXG5EZWZhdWx0RXJyb3JTdHJhdGVneS5wcm90b3R5cGUuaW5FcnJvclJlY292ZXJ5TW9kZSA9IGZ1bmN0aW9uKHJlY29nbml6ZXIpIHtcbiAgICByZXR1cm4gdGhpcy5lcnJvclJlY292ZXJ5TW9kZTtcbn07XG5cbi8vXG4vLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gbGVhdmUgZXJyb3IgcmVjb3ZlcnkgbW9kZSBhZnRlciByZWNvdmVyaW5nIGZyb21cbi8vIGEgcmVjb2duaXRpb24gZXhjZXB0aW9uLlxuLy9cbi8vIEBwYXJhbSByZWNvZ25pemVyXG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLmVuZEVycm9yQ29uZGl0aW9uID0gZnVuY3Rpb24ocmVjb2duaXplcikge1xuICAgIHRoaXMuZXJyb3JSZWNvdmVyeU1vZGUgPSBmYWxzZTtcbiAgICB0aGlzLmxhc3RFcnJvclN0YXRlcyA9IG51bGw7XG4gICAgdGhpcy5sYXN0RXJyb3JJbmRleCA9IC0xO1xufTtcblxuLy9cbi8vIHtAaW5oZXJpdERvY31cbi8vXG4vLyA8cD5UaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBzaW1wbHkgY2FsbHMge0BsaW5rIC8vZW5kRXJyb3JDb25kaXRpb259LjwvcD5cbi8vXG5EZWZhdWx0RXJyb3JTdHJhdGVneS5wcm90b3R5cGUucmVwb3J0TWF0Y2ggPSBmdW5jdGlvbihyZWNvZ25pemVyKSB7XG4gICAgdGhpcy5lbmRFcnJvckNvbmRpdGlvbihyZWNvZ25pemVyKTtcbn07XG5cbi8vXG4vLyB7QGluaGVyaXREb2N9XG4vL1xuLy8gPHA+VGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBpbW1lZGlhdGVseSBpZiB0aGUgaGFuZGxlciBpcyBhbHJlYWR5XG4vLyBpbiBlcnJvciByZWNvdmVyeSBtb2RlLiBPdGhlcndpc2UsIGl0IGNhbGxzIHtAbGluayAvL2JlZ2luRXJyb3JDb25kaXRpb259XG4vLyBhbmQgZGlzcGF0Y2hlcyB0aGUgcmVwb3J0aW5nIHRhc2sgYmFzZWQgb24gdGhlIHJ1bnRpbWUgdHlwZSBvZiB7QGNvZGUgZX1cbi8vIGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIHRhYmxlLjwvcD5cbi8vXG4vLyA8dWw+XG4vLyA8bGk+e0BsaW5rIE5vVmlhYmxlQWx0RXhjZXB0aW9ufTogRGlzcGF0Y2hlcyB0aGUgY2FsbCB0b1xuLy8ge0BsaW5rIC8vcmVwb3J0Tm9WaWFibGVBbHRlcm5hdGl2ZX08L2xpPlxuLy8gPGxpPntAbGluayBJbnB1dE1pc21hdGNoRXhjZXB0aW9ufTogRGlzcGF0Y2hlcyB0aGUgY2FsbCB0b1xuLy8ge0BsaW5rIC8vcmVwb3J0SW5wdXRNaXNtYXRjaH08L2xpPlxuLy8gPGxpPntAbGluayBGYWlsZWRQcmVkaWNhdGVFeGNlcHRpb259OiBEaXNwYXRjaGVzIHRoZSBjYWxsIHRvXG4vLyB7QGxpbmsgLy9yZXBvcnRGYWlsZWRQcmVkaWNhdGV9PC9saT5cbi8vIDxsaT5BbGwgb3RoZXIgdHlwZXM6IGNhbGxzIHtAbGluayBQYXJzZXIvL25vdGlmeUVycm9yTGlzdGVuZXJzfSB0byByZXBvcnRcbi8vIHRoZSBleGNlcHRpb248L2xpPlxuLy8gPC91bD5cbi8vXG5EZWZhdWx0RXJyb3JTdHJhdGVneS5wcm90b3R5cGUucmVwb3J0RXJyb3IgPSBmdW5jdGlvbihyZWNvZ25pemVyLCBlKSB7XG4gICAvLyBpZiB3ZSd2ZSBhbHJlYWR5IHJlcG9ydGVkIGFuIGVycm9yIGFuZCBoYXZlIG5vdCBtYXRjaGVkIGEgdG9rZW5cbiAgIC8vIHlldCBzdWNjZXNzZnVsbHksIGRvbid0IHJlcG9ydCBhbnkgZXJyb3JzLlxuICAgIGlmKHRoaXMuaW5FcnJvclJlY292ZXJ5TW9kZShyZWNvZ25pemVyKSkge1xuICAgICAgICByZXR1cm47IC8vIGRvbid0IHJlcG9ydCBzcHVyaW91cyBlcnJvcnNcbiAgICB9XG4gICAgdGhpcy5iZWdpbkVycm9yQ29uZGl0aW9uKHJlY29nbml6ZXIpO1xuICAgIGlmICggZSBpbnN0YW5jZW9mIE5vVmlhYmxlQWx0RXhjZXB0aW9uICkge1xuICAgICAgICB0aGlzLnJlcG9ydE5vVmlhYmxlQWx0ZXJuYXRpdmUocmVjb2duaXplciwgZSk7XG4gICAgfSBlbHNlIGlmICggZSBpbnN0YW5jZW9mIElucHV0TWlzbWF0Y2hFeGNlcHRpb24gKSB7XG4gICAgICAgIHRoaXMucmVwb3J0SW5wdXRNaXNtYXRjaChyZWNvZ25pemVyLCBlKTtcbiAgICB9IGVsc2UgaWYgKCBlIGluc3RhbmNlb2YgRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9uICkge1xuICAgICAgICB0aGlzLnJlcG9ydEZhaWxlZFByZWRpY2F0ZShyZWNvZ25pemVyLCBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhcInVua25vd24gcmVjb2duaXRpb24gZXJyb3IgdHlwZTogXCIgKyBlLmNvbnN0cnVjdG9yLm5hbWUpO1xuICAgICAgICBjb25zb2xlLmxvZyhlLnN0YWNrKTtcbiAgICAgICAgcmVjb2duaXplci5ub3RpZnlFcnJvckxpc3RlbmVycyhlLmdldE9mZmVuZGluZ1Rva2VuKCksIGUuZ2V0TWVzc2FnZSgpLCBlKTtcbiAgICB9XG59O1xuLy9cbi8vIHtAaW5oZXJpdERvY31cbi8vXG4vLyA8cD5UaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXN5bmNocm9uaXplcyB0aGUgcGFyc2VyIGJ5IGNvbnN1bWluZyB0b2tlbnNcbi8vIHVudGlsIHdlIGZpbmQgb25lIGluIHRoZSByZXN5bmNocm9uaXphdGlvbiBzZXQtLWxvb3NlbHkgdGhlIHNldCBvZiB0b2tlbnNcbi8vIHRoYXQgY2FuIGZvbGxvdyB0aGUgY3VycmVudCBydWxlLjwvcD5cbi8vXG5EZWZhdWx0RXJyb3JTdHJhdGVneS5wcm90b3R5cGUucmVjb3ZlciA9IGZ1bmN0aW9uKHJlY29nbml6ZXIsIGUpIHtcbiAgICBpZiAodGhpcy5sYXN0RXJyb3JJbmRleD09PXJlY29nbml6ZXIuZ2V0SW5wdXRTdHJlYW0oKS5pbmRleCAmJlxuICAgICAgICB0aGlzLmxhc3RFcnJvclN0YXRlcyAhPT0gbnVsbCAmJiB0aGlzLmxhc3RFcnJvclN0YXRlcy5pbmRleE9mKHJlY29nbml6ZXIuc3RhdGUpPj0wKSB7XG5cdFx0Ly8gdWggb2gsIGFub3RoZXIgZXJyb3IgYXQgc2FtZSB0b2tlbiBpbmRleCBhbmQgcHJldmlvdXNseS12aXNpdGVkXG5cdFx0Ly8gc3RhdGUgaW4gQVROOyBtdXN0IGJlIGEgY2FzZSB3aGVyZSBMVCgxKSBpcyBpbiB0aGUgcmVjb3Zlcnlcblx0XHQvLyB0b2tlbiBzZXQgc28gbm90aGluZyBnb3QgY29uc3VtZWQuIENvbnN1bWUgYSBzaW5nbGUgdG9rZW5cblx0XHQvLyBhdCBsZWFzdCB0byBwcmV2ZW50IGFuIGluZmluaXRlIGxvb3A7IHRoaXMgaXMgYSBmYWlsc2FmZS5cblx0XHRyZWNvZ25pemVyLmNvbnN1bWUoKTtcbiAgICB9XG4gICAgdGhpcy5sYXN0RXJyb3JJbmRleCA9IHJlY29nbml6ZXIuX2lucHV0LmluZGV4O1xuICAgIGlmICh0aGlzLmxhc3RFcnJvclN0YXRlcyA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLmxhc3RFcnJvclN0YXRlcyA9IFtdO1xuICAgIH1cbiAgICB0aGlzLmxhc3RFcnJvclN0YXRlcy5wdXNoKHJlY29nbml6ZXIuc3RhdGUpO1xuICAgIHZhciBmb2xsb3dTZXQgPSB0aGlzLmdldEVycm9yUmVjb3ZlcnlTZXQocmVjb2duaXplcik7XG4gICAgdGhpcy5jb25zdW1lVW50aWwocmVjb2duaXplciwgZm9sbG93U2V0KTtcbn07XG5cbi8vIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBBTlRMUkVycm9yU3RyYXRlZ3kvL3N5bmN9IG1ha2VzIHN1cmVcbi8vIHRoYXQgdGhlIGN1cnJlbnQgbG9va2FoZWFkIHN5bWJvbCBpcyBjb25zaXN0ZW50IHdpdGggd2hhdCB3ZXJlIGV4cGVjdGluZ1xuLy8gYXQgdGhpcyBwb2ludCBpbiB0aGUgQVROLiBZb3UgY2FuIGNhbGwgdGhpcyBhbnl0aW1lIGJ1dCBBTlRMUiBvbmx5XG4vLyBnZW5lcmF0ZXMgY29kZSB0byBjaGVjayBiZWZvcmUgc3VicnVsZXMvbG9vcHMgYW5kIGVhY2ggaXRlcmF0aW9uLlxuLy9cbi8vIDxwPkltcGxlbWVudHMgSmltIElkbGUncyBtYWdpYyBzeW5jIG1lY2hhbmlzbSBpbiBjbG9zdXJlcyBhbmQgb3B0aW9uYWxcbi8vIHN1YnJ1bGVzLiBFLmcuLDwvcD5cbi8vXG4vLyA8cHJlPlxuLy8gYSA6IHN5bmMgKCBzdHVmZiBzeW5jICkqIDtcbi8vIHN5bmMgOiB7Y29uc3VtZSB0byB3aGF0IGNhbiBmb2xsb3cgc3luY30gO1xuLy8gPC9wcmU+XG4vL1xuLy8gQXQgdGhlIHN0YXJ0IG9mIGEgc3ViIHJ1bGUgdXBvbiBlcnJvciwge0BsaW5rIC8vc3luY30gcGVyZm9ybXMgc2luZ2xlXG4vLyB0b2tlbiBkZWxldGlvbiwgaWYgcG9zc2libGUuIElmIGl0IGNhbid0IGRvIHRoYXQsIGl0IGJhaWxzIG9uIHRoZSBjdXJyZW50XG4vLyBydWxlIGFuZCB1c2VzIHRoZSBkZWZhdWx0IGVycm9yIHJlY292ZXJ5LCB3aGljaCBjb25zdW1lcyB1bnRpbCB0aGVcbi8vIHJlc3luY2hyb25pemF0aW9uIHNldCBvZiB0aGUgY3VycmVudCBydWxlLlxuLy9cbi8vIDxwPklmIHRoZSBzdWIgcnVsZSBpcyBvcHRpb25hbCAoe0Bjb2RlICguLi4pP30sIHtAY29kZSAoLi4uKSp9LCBvciBibG9ja1xuLy8gd2l0aCBhbiBlbXB0eSBhbHRlcm5hdGl2ZSksIHRoZW4gdGhlIGV4cGVjdGVkIHNldCBpbmNsdWRlcyB3aGF0IGZvbGxvd3Ncbi8vIHRoZSBzdWJydWxlLjwvcD5cbi8vXG4vLyA8cD5EdXJpbmcgbG9vcCBpdGVyYXRpb24sIGl0IGNvbnN1bWVzIHVudGlsIGl0IHNlZXMgYSB0b2tlbiB0aGF0IGNhbiBzdGFydCBhXG4vLyBzdWIgcnVsZSBvciB3aGF0IGZvbGxvd3MgbG9vcC4gWWVzLCB0aGF0IGlzIHByZXR0eSBhZ2dyZXNzaXZlLiBXZSBvcHQgdG9cbi8vIHN0YXkgaW4gdGhlIGxvb3AgYXMgbG9uZyBhcyBwb3NzaWJsZS48L3A+XG4vL1xuLy8gPHA+PHN0cm9uZz5PUklHSU5TPC9zdHJvbmc+PC9wPlxuLy9cbi8vIDxwPlByZXZpb3VzIHZlcnNpb25zIG9mIEFOVExSIGRpZCBhIHBvb3Igam9iIG9mIHRoZWlyIHJlY292ZXJ5IHdpdGhpbiBsb29wcy5cbi8vIEEgc2luZ2xlIG1pc21hdGNoIHRva2VuIG9yIG1pc3NpbmcgdG9rZW4gd291bGQgZm9yY2UgdGhlIHBhcnNlciB0byBiYWlsXG4vLyBvdXQgb2YgdGhlIGVudGlyZSBydWxlcyBzdXJyb3VuZGluZyB0aGUgbG9vcC4gU28sIGZvciBydWxlPC9wPlxuLy9cbi8vIDxwcmU+XG4vLyBjbGFzc0RlZiA6ICdjbGFzcycgSUQgJ3snIG1lbWJlciogJ30nXG4vLyA8L3ByZT5cbi8vXG4vLyBpbnB1dCB3aXRoIGFuIGV4dHJhIHRva2VuIGJldHdlZW4gbWVtYmVycyB3b3VsZCBmb3JjZSB0aGUgcGFyc2VyIHRvXG4vLyBjb25zdW1lIHVudGlsIGl0IGZvdW5kIHRoZSBuZXh0IGNsYXNzIGRlZmluaXRpb24gcmF0aGVyIHRoYW4gdGhlIG5leHRcbi8vIG1lbWJlciBkZWZpbml0aW9uIG9mIHRoZSBjdXJyZW50IGNsYXNzLlxuLy9cbi8vIDxwPlRoaXMgZnVuY3Rpb25hbGl0eSBjb3N0IGEgbGl0dGxlIGJpdCBvZiBlZmZvcnQgYmVjYXVzZSB0aGUgcGFyc2VyIGhhcyB0b1xuLy8gY29tcGFyZSB0b2tlbiBzZXQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsb29wIGFuZCBhdCBlYWNoIGl0ZXJhdGlvbi4gSWYgZm9yXG4vLyBzb21lIHJlYXNvbiBzcGVlZCBpcyBzdWZmZXJpbmcgZm9yIHlvdSwgeW91IGNhbiB0dXJuIG9mZiB0aGlzXG4vLyBmdW5jdGlvbmFsaXR5IGJ5IHNpbXBseSBvdmVycmlkaW5nIHRoaXMgbWV0aG9kIGFzIGEgYmxhbmsgeyB9LjwvcD5cbi8vXG5EZWZhdWx0RXJyb3JTdHJhdGVneS5wcm90b3R5cGUuc3luYyA9IGZ1bmN0aW9uKHJlY29nbml6ZXIpIHtcbiAgICAvLyBJZiBhbHJlYWR5IHJlY292ZXJpbmcsIGRvbid0IHRyeSB0byBzeW5jXG4gICAgaWYgKHRoaXMuaW5FcnJvclJlY292ZXJ5TW9kZShyZWNvZ25pemVyKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBzID0gcmVjb2duaXplci5faW50ZXJwLmF0bi5zdGF0ZXNbcmVjb2duaXplci5zdGF0ZV07XG4gICAgdmFyIGxhID0gcmVjb2duaXplci5nZXRUb2tlblN0cmVhbSgpLkxBKDEpO1xuICAgIC8vIHRyeSBjaGVhcGVyIHN1YnNldCBmaXJzdDsgbWlnaHQgZ2V0IGx1Y2t5LiBzZWVtcyB0byBzaGF2ZSBhIHdlZSBiaXQgb2ZmXG4gICAgdmFyIG5leHRUb2tlbnMgPSByZWNvZ25pemVyLmF0bi5uZXh0VG9rZW5zKHMpO1xuICAgIGlmIChuZXh0VG9rZW5zLmNvbnRhaW5zKFRva2VuLkVQU0lMT04pIHx8IG5leHRUb2tlbnMuY29udGFpbnMobGEpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3dpdGNoIChzLnN0YXRlVHlwZSkge1xuICAgIGNhc2UgQVROU3RhdGUuQkxPQ0tfU1RBUlQ6XG4gICAgY2FzZSBBVE5TdGF0ZS5TVEFSX0JMT0NLX1NUQVJUOlxuICAgIGNhc2UgQVROU3RhdGUuUExVU19CTE9DS19TVEFSVDpcbiAgICBjYXNlIEFUTlN0YXRlLlNUQVJfTE9PUF9FTlRSWTpcbiAgICAgICAvLyByZXBvcnQgZXJyb3IgYW5kIHJlY292ZXIgaWYgcG9zc2libGVcbiAgICAgICAgaWYoIHRoaXMuc2luZ2xlVG9rZW5EZWxldGlvbihyZWNvZ25pemVyKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IElucHV0TWlzbWF0Y2hFeGNlcHRpb24ocmVjb2duaXplcik7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgY2FzZSBBVE5TdGF0ZS5QTFVTX0xPT1BfQkFDSzpcbiAgICBjYXNlIEFUTlN0YXRlLlNUQVJfTE9PUF9CQUNLOlxuICAgICAgICB0aGlzLnJlcG9ydFVud2FudGVkVG9rZW4ocmVjb2duaXplcik7XG4gICAgICAgIHZhciBleHBlY3RpbmcgPSBuZXcgSW50ZXJ2YWxTZXQoKTtcbiAgICAgICAgZXhwZWN0aW5nLmFkZFNldChyZWNvZ25pemVyLmdldEV4cGVjdGVkVG9rZW5zKCkpO1xuICAgICAgICB2YXIgd2hhdEZvbGxvd3NMb29wSXRlcmF0aW9uT3JSdWxlID0gZXhwZWN0aW5nLmFkZFNldCh0aGlzLmdldEVycm9yUmVjb3ZlcnlTZXQocmVjb2duaXplcikpO1xuICAgICAgICB0aGlzLmNvbnN1bWVVbnRpbChyZWNvZ25pemVyLCB3aGF0Rm9sbG93c0xvb3BJdGVyYXRpb25PclJ1bGUpO1xuICAgICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgICAvLyBkbyBub3RoaW5nIGlmIHdlIGNhbid0IGlkZW50aWZ5IHRoZSBleGFjdCBraW5kIG9mIEFUTiBzdGF0ZVxuICAgIH1cbn07XG5cbi8vIFRoaXMgaXMgY2FsbGVkIGJ5IHtAbGluayAvL3JlcG9ydEVycm9yfSB3aGVuIHRoZSBleGNlcHRpb24gaXMgYVxuLy8ge0BsaW5rIE5vVmlhYmxlQWx0RXhjZXB0aW9ufS5cbi8vXG4vLyBAc2VlIC8vcmVwb3J0RXJyb3Jcbi8vXG4vLyBAcGFyYW0gcmVjb2duaXplciB0aGUgcGFyc2VyIGluc3RhbmNlXG4vLyBAcGFyYW0gZSB0aGUgcmVjb2duaXRpb24gZXhjZXB0aW9uXG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlcG9ydE5vVmlhYmxlQWx0ZXJuYXRpdmUgPSBmdW5jdGlvbihyZWNvZ25pemVyLCBlKSB7XG4gICAgdmFyIHRva2VucyA9IHJlY29nbml6ZXIuZ2V0VG9rZW5TdHJlYW0oKTtcbiAgICB2YXIgaW5wdXQ7XG4gICAgaWYodG9rZW5zICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChlLnN0YXJ0VG9rZW4udHlwZT09PVRva2VuLkVPRikge1xuICAgICAgICAgICAgaW5wdXQgPSBcIjxFT0Y+XCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbnB1dCA9IHRva2Vucy5nZXRUZXh0KG5ldyBJbnRlcnZhbChlLnN0YXJ0VG9rZW4udG9rZW5JbmRleCwgZS5vZmZlbmRpbmdUb2tlbi50b2tlbkluZGV4KSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBpbnB1dCA9IFwiPHVua25vd24gaW5wdXQ+XCI7XG4gICAgfVxuICAgIHZhciBtc2cgPSBcIm5vIHZpYWJsZSBhbHRlcm5hdGl2ZSBhdCBpbnB1dCBcIiArIHRoaXMuZXNjYXBlV1NBbmRRdW90ZShpbnB1dCk7XG4gICAgcmVjb2duaXplci5ub3RpZnlFcnJvckxpc3RlbmVycyhtc2csIGUub2ZmZW5kaW5nVG9rZW4sIGUpO1xufTtcblxuLy9cbi8vIFRoaXMgaXMgY2FsbGVkIGJ5IHtAbGluayAvL3JlcG9ydEVycm9yfSB3aGVuIHRoZSBleGNlcHRpb24gaXMgYW5cbi8vIHtAbGluayBJbnB1dE1pc21hdGNoRXhjZXB0aW9ufS5cbi8vXG4vLyBAc2VlIC8vcmVwb3J0RXJyb3Jcbi8vXG4vLyBAcGFyYW0gcmVjb2duaXplciB0aGUgcGFyc2VyIGluc3RhbmNlXG4vLyBAcGFyYW0gZSB0aGUgcmVjb2duaXRpb24gZXhjZXB0aW9uXG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlcG9ydElucHV0TWlzbWF0Y2ggPSBmdW5jdGlvbihyZWNvZ25pemVyLCBlKSB7XG4gICAgdmFyIG1zZyA9IFwibWlzbWF0Y2hlZCBpbnB1dCBcIiArIHRoaXMuZ2V0VG9rZW5FcnJvckRpc3BsYXkoZS5vZmZlbmRpbmdUb2tlbikgK1xuICAgICAgICAgIFwiIGV4cGVjdGluZyBcIiArIGUuZ2V0RXhwZWN0ZWRUb2tlbnMoKS50b1N0cmluZyhyZWNvZ25pemVyLmxpdGVyYWxOYW1lcywgcmVjb2duaXplci5zeW1ib2xpY05hbWVzKTtcbiAgICByZWNvZ25pemVyLm5vdGlmeUVycm9yTGlzdGVuZXJzKG1zZywgZS5vZmZlbmRpbmdUb2tlbiwgZSk7XG59O1xuXG4vL1xuLy8gVGhpcyBpcyBjYWxsZWQgYnkge0BsaW5rIC8vcmVwb3J0RXJyb3J9IHdoZW4gdGhlIGV4Y2VwdGlvbiBpcyBhXG4vLyB7QGxpbmsgRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9ufS5cbi8vXG4vLyBAc2VlIC8vcmVwb3J0RXJyb3Jcbi8vXG4vLyBAcGFyYW0gcmVjb2duaXplciB0aGUgcGFyc2VyIGluc3RhbmNlXG4vLyBAcGFyYW0gZSB0aGUgcmVjb2duaXRpb24gZXhjZXB0aW9uXG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlcG9ydEZhaWxlZFByZWRpY2F0ZSA9IGZ1bmN0aW9uKHJlY29nbml6ZXIsIGUpIHtcbiAgICB2YXIgcnVsZU5hbWUgPSByZWNvZ25pemVyLnJ1bGVOYW1lc1tyZWNvZ25pemVyLl9jdHgucnVsZUluZGV4XTtcbiAgICB2YXIgbXNnID0gXCJydWxlIFwiICsgcnVsZU5hbWUgKyBcIiBcIiArIGUubWVzc2FnZTtcbiAgICByZWNvZ25pemVyLm5vdGlmeUVycm9yTGlzdGVuZXJzKG1zZywgZS5vZmZlbmRpbmdUb2tlbiwgZSk7XG59O1xuXG4vLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gcmVwb3J0IGEgc3ludGF4IGVycm9yIHdoaWNoIHJlcXVpcmVzIHRoZSByZW1vdmFsXG4vLyBvZiBhIHRva2VuIGZyb20gdGhlIGlucHV0IHN0cmVhbS4gQXQgdGhlIHRpbWUgdGhpcyBtZXRob2QgaXMgY2FsbGVkLCB0aGVcbi8vIGVycm9uZW91cyBzeW1ib2wgaXMgY3VycmVudCB7QGNvZGUgTFQoMSl9IHN5bWJvbCBhbmQgaGFzIG5vdCB5ZXQgYmVlblxuLy8gcmVtb3ZlZCBmcm9tIHRoZSBpbnB1dCBzdHJlYW0uIFdoZW4gdGhpcyBtZXRob2QgcmV0dXJucyxcbi8vIHtAY29kZSByZWNvZ25pemVyfSBpcyBpbiBlcnJvciByZWNvdmVyeSBtb2RlLlxuLy9cbi8vIDxwPlRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHtAbGluayAvL3NpbmdsZVRva2VuRGVsZXRpb259IGlkZW50aWZpZXNcbi8vIHNpbmdsZS10b2tlbiBkZWxldGlvbiBhcyBhIHZpYWJsZSByZWNvdmVyeSBzdHJhdGVneSBmb3IgYSBtaXNtYXRjaGVkXG4vLyBpbnB1dCBlcnJvci48L3A+XG4vL1xuLy8gPHA+VGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gc2ltcGx5IHJldHVybnMgaWYgdGhlIGhhbmRsZXIgaXMgYWxyZWFkeSBpblxuLy8gZXJyb3IgcmVjb3ZlcnkgbW9kZS4gT3RoZXJ3aXNlLCBpdCBjYWxscyB7QGxpbmsgLy9iZWdpbkVycm9yQ29uZGl0aW9ufSB0b1xuLy8gZW50ZXIgZXJyb3IgcmVjb3ZlcnkgbW9kZSwgZm9sbG93ZWQgYnkgY2FsbGluZ1xuLy8ge0BsaW5rIFBhcnNlci8vbm90aWZ5RXJyb3JMaXN0ZW5lcnN9LjwvcD5cbi8vXG4vLyBAcGFyYW0gcmVjb2duaXplciB0aGUgcGFyc2VyIGluc3RhbmNlXG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlcG9ydFVud2FudGVkVG9rZW4gPSBmdW5jdGlvbihyZWNvZ25pemVyKSB7XG4gICAgaWYgKHRoaXMuaW5FcnJvclJlY292ZXJ5TW9kZShyZWNvZ25pemVyKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuYmVnaW5FcnJvckNvbmRpdGlvbihyZWNvZ25pemVyKTtcbiAgICB2YXIgdCA9IHJlY29nbml6ZXIuZ2V0Q3VycmVudFRva2VuKCk7XG4gICAgdmFyIHRva2VuTmFtZSA9IHRoaXMuZ2V0VG9rZW5FcnJvckRpc3BsYXkodCk7XG4gICAgdmFyIGV4cGVjdGluZyA9IHRoaXMuZ2V0RXhwZWN0ZWRUb2tlbnMocmVjb2duaXplcik7XG4gICAgdmFyIG1zZyA9IFwiZXh0cmFuZW91cyBpbnB1dCBcIiArIHRva2VuTmFtZSArIFwiIGV4cGVjdGluZyBcIiArXG4gICAgICAgIGV4cGVjdGluZy50b1N0cmluZyhyZWNvZ25pemVyLmxpdGVyYWxOYW1lcywgcmVjb2duaXplci5zeW1ib2xpY05hbWVzKTtcbiAgICByZWNvZ25pemVyLm5vdGlmeUVycm9yTGlzdGVuZXJzKG1zZywgdCwgbnVsbCk7XG59O1xuLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIHJlcG9ydCBhIHN5bnRheCBlcnJvciB3aGljaCByZXF1aXJlcyB0aGVcbi8vIGluc2VydGlvbiBvZiBhIG1pc3NpbmcgdG9rZW4gaW50byB0aGUgaW5wdXQgc3RyZWFtLiBBdCB0aGUgdGltZSB0aGlzXG4vLyBtZXRob2QgaXMgY2FsbGVkLCB0aGUgbWlzc2luZyB0b2tlbiBoYXMgbm90IHlldCBiZWVuIGluc2VydGVkLiBXaGVuIHRoaXNcbi8vIG1ldGhvZCByZXR1cm5zLCB7QGNvZGUgcmVjb2duaXplcn0gaXMgaW4gZXJyb3IgcmVjb3ZlcnkgbW9kZS5cbi8vXG4vLyA8cD5UaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB7QGxpbmsgLy9zaW5nbGVUb2tlbkluc2VydGlvbn0gaWRlbnRpZmllc1xuLy8gc2luZ2xlLXRva2VuIGluc2VydGlvbiBhcyBhIHZpYWJsZSByZWNvdmVyeSBzdHJhdGVneSBmb3IgYSBtaXNtYXRjaGVkXG4vLyBpbnB1dCBlcnJvci48L3A+XG4vL1xuLy8gPHA+VGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gc2ltcGx5IHJldHVybnMgaWYgdGhlIGhhbmRsZXIgaXMgYWxyZWFkeSBpblxuLy8gZXJyb3IgcmVjb3ZlcnkgbW9kZS4gT3RoZXJ3aXNlLCBpdCBjYWxscyB7QGxpbmsgLy9iZWdpbkVycm9yQ29uZGl0aW9ufSB0b1xuLy8gZW50ZXIgZXJyb3IgcmVjb3ZlcnkgbW9kZSwgZm9sbG93ZWQgYnkgY2FsbGluZ1xuLy8ge0BsaW5rIFBhcnNlci8vbm90aWZ5RXJyb3JMaXN0ZW5lcnN9LjwvcD5cbi8vXG4vLyBAcGFyYW0gcmVjb2duaXplciB0aGUgcGFyc2VyIGluc3RhbmNlXG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlcG9ydE1pc3NpbmdUb2tlbiA9IGZ1bmN0aW9uKHJlY29nbml6ZXIpIHtcbiAgICBpZiAoIHRoaXMuaW5FcnJvclJlY292ZXJ5TW9kZShyZWNvZ25pemVyKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuYmVnaW5FcnJvckNvbmRpdGlvbihyZWNvZ25pemVyKTtcbiAgICB2YXIgdCA9IHJlY29nbml6ZXIuZ2V0Q3VycmVudFRva2VuKCk7XG4gICAgdmFyIGV4cGVjdGluZyA9IHRoaXMuZ2V0RXhwZWN0ZWRUb2tlbnMocmVjb2duaXplcik7XG4gICAgdmFyIG1zZyA9IFwibWlzc2luZyBcIiArIGV4cGVjdGluZy50b1N0cmluZyhyZWNvZ25pemVyLmxpdGVyYWxOYW1lcywgcmVjb2duaXplci5zeW1ib2xpY05hbWVzKSArXG4gICAgICAgICAgXCIgYXQgXCIgKyB0aGlzLmdldFRva2VuRXJyb3JEaXNwbGF5KHQpO1xuICAgIHJlY29nbml6ZXIubm90aWZ5RXJyb3JMaXN0ZW5lcnMobXNnLCB0LCBudWxsKTtcbn07XG5cbi8vIDxwPlRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGF0dGVtcHRzIHRvIHJlY292ZXIgZnJvbSB0aGUgbWlzbWF0Y2hlZCBpbnB1dFxuLy8gYnkgdXNpbmcgc2luZ2xlIHRva2VuIGluc2VydGlvbiBhbmQgZGVsZXRpb24gYXMgZGVzY3JpYmVkIGJlbG93LiBJZiB0aGVcbi8vIHJlY292ZXJ5IGF0dGVtcHQgZmFpbHMsIHRoaXMgbWV0aG9kIHRocm93cyBhblxuLy8ge0BsaW5rIElucHV0TWlzbWF0Y2hFeGNlcHRpb259LjwvcD5cbi8vXG4vLyA8cD48c3Ryb25nPkVYVFJBIFRPS0VOPC9zdHJvbmc+IChzaW5nbGUgdG9rZW4gZGVsZXRpb24pPC9wPlxuLy9cbi8vIDxwPntAY29kZSBMQSgxKX0gaXMgbm90IHdoYXQgd2UgYXJlIGxvb2tpbmcgZm9yLiBJZiB7QGNvZGUgTEEoMil9IGhhcyB0aGVcbi8vIHJpZ2h0IHRva2VuLCBob3dldmVyLCB0aGVuIGFzc3VtZSB7QGNvZGUgTEEoMSl9IGlzIHNvbWUgZXh0cmEgc3B1cmlvdXNcbi8vIHRva2VuIGFuZCBkZWxldGUgaXQuIFRoZW4gY29uc3VtZSBhbmQgcmV0dXJuIHRoZSBuZXh0IHRva2VuICh3aGljaCB3YXNcbi8vIHRoZSB7QGNvZGUgTEEoMil9IHRva2VuKSBhcyB0aGUgc3VjY2Vzc2Z1bCByZXN1bHQgb2YgdGhlIG1hdGNoIG9wZXJhdGlvbi48L3A+XG4vL1xuLy8gPHA+VGhpcyByZWNvdmVyeSBzdHJhdGVneSBpcyBpbXBsZW1lbnRlZCBieSB7QGxpbmtcbi8vIC8vc2luZ2xlVG9rZW5EZWxldGlvbn0uPC9wPlxuLy9cbi8vIDxwPjxzdHJvbmc+TUlTU0lORyBUT0tFTjwvc3Ryb25nPiAoc2luZ2xlIHRva2VuIGluc2VydGlvbik8L3A+XG4vL1xuLy8gPHA+SWYgY3VycmVudCB0b2tlbiAoYXQge0Bjb2RlIExBKDEpfSkgaXMgY29uc2lzdGVudCB3aXRoIHdoYXQgY291bGQgY29tZVxuLy8gYWZ0ZXIgdGhlIGV4cGVjdGVkIHtAY29kZSBMQSgxKX0gdG9rZW4sIHRoZW4gYXNzdW1lIHRoZSB0b2tlbiBpcyBtaXNzaW5nXG4vLyBhbmQgdXNlIHRoZSBwYXJzZXIncyB7QGxpbmsgVG9rZW5GYWN0b3J5fSB0byBjcmVhdGUgaXQgb24gdGhlIGZseS4gVGhlXG4vLyBcImluc2VydGlvblwiIGlzIHBlcmZvcm1lZCBieSByZXR1cm5pbmcgdGhlIGNyZWF0ZWQgdG9rZW4gYXMgdGhlIHN1Y2Nlc3NmdWxcbi8vIHJlc3VsdCBvZiB0aGUgbWF0Y2ggb3BlcmF0aW9uLjwvcD5cbi8vXG4vLyA8cD5UaGlzIHJlY292ZXJ5IHN0cmF0ZWd5IGlzIGltcGxlbWVudGVkIGJ5IHtAbGlua1xuLy8gLy9zaW5nbGVUb2tlbkluc2VydGlvbn0uPC9wPlxuLy9cbi8vIDxwPjxzdHJvbmc+RVhBTVBMRTwvc3Ryb25nPjwvcD5cbi8vXG4vLyA8cD5Gb3IgZXhhbXBsZSwgSW5wdXQge0Bjb2RlIGk9KDM7fSBpcyBjbGVhcmx5IG1pc3NpbmcgdGhlIHtAY29kZSAnKSd9LiBXaGVuXG4vLyB0aGUgcGFyc2VyIHJldHVybnMgZnJvbSB0aGUgbmVzdGVkIGNhbGwgdG8ge0Bjb2RlIGV4cHJ9LCBpdCB3aWxsIGhhdmVcbi8vIGNhbGwgY2hhaW46PC9wPlxuLy9cbi8vIDxwcmU+XG4vLyBzdGF0ICZyYXJyOyBleHByICZyYXJyOyBhdG9tXG4vLyA8L3ByZT5cbi8vXG4vLyBhbmQgaXQgd2lsbCBiZSB0cnlpbmcgdG8gbWF0Y2ggdGhlIHtAY29kZSAnKSd9IGF0IHRoaXMgcG9pbnQgaW4gdGhlXG4vLyBkZXJpdmF0aW9uOlxuLy9cbi8vIDxwcmU+XG4vLyA9Jmd0OyBJRCAnPScgJygnIElOVCAnKScgKCcrJyBhdG9tKSogJzsnXG4vLyBeXG4vLyA8L3ByZT5cbi8vXG4vLyBUaGUgYXR0ZW1wdCB0byBtYXRjaCB7QGNvZGUgJyknfSB3aWxsIGZhaWwgd2hlbiBpdCBzZWVzIHtAY29kZSAnOyd9IGFuZFxuLy8gY2FsbCB7QGxpbmsgLy9yZWNvdmVySW5saW5lfS4gVG8gcmVjb3ZlciwgaXQgc2VlcyB0aGF0IHtAY29kZSBMQSgxKT09JzsnfVxuLy8gaXMgaW4gdGhlIHNldCBvZiB0b2tlbnMgdGhhdCBjYW4gZm9sbG93IHRoZSB7QGNvZGUgJyknfSB0b2tlbiByZWZlcmVuY2Vcbi8vIGluIHJ1bGUge0Bjb2RlIGF0b219LiBJdCBjYW4gYXNzdW1lIHRoYXQgeW91IGZvcmdvdCB0aGUge0Bjb2RlICcpJ30uXG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlY292ZXJJbmxpbmUgPSBmdW5jdGlvbihyZWNvZ25pemVyKSB7XG4gICAgLy8gU0lOR0xFIFRPS0VOIERFTEVUSU9OXG4gICAgdmFyIG1hdGNoZWRTeW1ib2wgPSB0aGlzLnNpbmdsZVRva2VuRGVsZXRpb24ocmVjb2duaXplcik7XG4gICAgaWYgKG1hdGNoZWRTeW1ib2wgIT09IG51bGwpIHtcbiAgICAgICAgLy8gd2UgaGF2ZSBkZWxldGVkIHRoZSBleHRyYSB0b2tlbi5cbiAgICAgICAgLy8gbm93LCBtb3ZlIHBhc3QgdHR5cGUgdG9rZW4gYXMgaWYgYWxsIHdlcmUgb2tcbiAgICAgICAgcmVjb2duaXplci5jb25zdW1lKCk7XG4gICAgICAgIHJldHVybiBtYXRjaGVkU3ltYm9sO1xuICAgIH1cbiAgICAvLyBTSU5HTEUgVE9LRU4gSU5TRVJUSU9OXG4gICAgaWYgKHRoaXMuc2luZ2xlVG9rZW5JbnNlcnRpb24ocmVjb2duaXplcikpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TWlzc2luZ1N5bWJvbChyZWNvZ25pemVyKTtcbiAgICB9XG4gICAgLy8gZXZlbiB0aGF0IGRpZG4ndCB3b3JrOyBtdXN0IHRocm93IHRoZSBleGNlcHRpb25cbiAgICB0aHJvdyBuZXcgSW5wdXRNaXNtYXRjaEV4Y2VwdGlvbihyZWNvZ25pemVyKTtcbn07XG5cbi8vXG4vLyBUaGlzIG1ldGhvZCBpbXBsZW1lbnRzIHRoZSBzaW5nbGUtdG9rZW4gaW5zZXJ0aW9uIGlubGluZSBlcnJvciByZWNvdmVyeVxuLy8gc3RyYXRlZ3kuIEl0IGlzIGNhbGxlZCBieSB7QGxpbmsgLy9yZWNvdmVySW5saW5lfSBpZiB0aGUgc2luZ2xlLXRva2VuXG4vLyBkZWxldGlvbiBzdHJhdGVneSBmYWlscyB0byByZWNvdmVyIGZyb20gdGhlIG1pc21hdGNoZWQgaW5wdXQuIElmIHRoaXNcbi8vIG1ldGhvZCByZXR1cm5zIHtAY29kZSB0cnVlfSwge0Bjb2RlIHJlY29nbml6ZXJ9IHdpbGwgYmUgaW4gZXJyb3IgcmVjb3Zlcnlcbi8vIG1vZGUuXG4vL1xuLy8gPHA+VGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCBzaW5nbGUtdG9rZW4gaW5zZXJ0aW9uIGlzIHZpYWJsZSBieVxuLy8gY2hlY2tpbmcgaWYgdGhlIHtAY29kZSBMQSgxKX0gaW5wdXQgc3ltYm9sIGNvdWxkIGJlIHN1Y2Nlc3NmdWxseSBtYXRjaGVkXG4vLyBpZiBpdCB3ZXJlIGluc3RlYWQgdGhlIHtAY29kZSBMQSgyKX0gc3ltYm9sLiBJZiB0aGlzIG1ldGhvZCByZXR1cm5zXG4vLyB7QGNvZGUgdHJ1ZX0sIHRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIGFuZCBpbnNlcnRpbmcgYVxuLy8gdG9rZW4gd2l0aCB0aGUgY29ycmVjdCB0eXBlIHRvIHByb2R1Y2UgdGhpcyBiZWhhdmlvci48L3A+XG4vL1xuLy8gQHBhcmFtIHJlY29nbml6ZXIgdGhlIHBhcnNlciBpbnN0YW5jZVxuLy8gQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgc2luZ2xlLXRva2VuIGluc2VydGlvbiBpcyBhIHZpYWJsZSByZWNvdmVyeVxuLy8gc3RyYXRlZ3kgZm9yIHRoZSBjdXJyZW50IG1pc21hdGNoZWQgaW5wdXQsIG90aGVyd2lzZSB7QGNvZGUgZmFsc2V9XG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnNpbmdsZVRva2VuSW5zZXJ0aW9uID0gZnVuY3Rpb24ocmVjb2duaXplcikge1xuICAgIHZhciBjdXJyZW50U3ltYm9sVHlwZSA9IHJlY29nbml6ZXIuZ2V0VG9rZW5TdHJlYW0oKS5MQSgxKTtcbiAgICAvLyBpZiBjdXJyZW50IHRva2VuIGlzIGNvbnNpc3RlbnQgd2l0aCB3aGF0IGNvdWxkIGNvbWUgYWZ0ZXIgY3VycmVudFxuICAgIC8vIEFUTiBzdGF0ZSwgdGhlbiB3ZSBrbm93IHdlJ3JlIG1pc3NpbmcgYSB0b2tlbjsgZXJyb3IgcmVjb3ZlcnlcbiAgICAvLyBpcyBmcmVlIHRvIGNvbmp1cmUgdXAgYW5kIGluc2VydCB0aGUgbWlzc2luZyB0b2tlblxuICAgIHZhciBhdG4gPSByZWNvZ25pemVyLl9pbnRlcnAuYXRuO1xuICAgIHZhciBjdXJyZW50U3RhdGUgPSBhdG4uc3RhdGVzW3JlY29nbml6ZXIuc3RhdGVdO1xuICAgIHZhciBuZXh0ID0gY3VycmVudFN0YXRlLnRyYW5zaXRpb25zWzBdLnRhcmdldDtcbiAgICB2YXIgZXhwZWN0aW5nQXRMTDIgPSBhdG4ubmV4dFRva2VucyhuZXh0LCByZWNvZ25pemVyLl9jdHgpO1xuICAgIGlmIChleHBlY3RpbmdBdExMMi5jb250YWlucyhjdXJyZW50U3ltYm9sVHlwZSkgKXtcbiAgICAgICAgdGhpcy5yZXBvcnRNaXNzaW5nVG9rZW4ocmVjb2duaXplcik7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59O1xuXG4vLyBUaGlzIG1ldGhvZCBpbXBsZW1lbnRzIHRoZSBzaW5nbGUtdG9rZW4gZGVsZXRpb24gaW5saW5lIGVycm9yIHJlY292ZXJ5XG4vLyBzdHJhdGVneS4gSXQgaXMgY2FsbGVkIGJ5IHtAbGluayAvL3JlY292ZXJJbmxpbmV9IHRvIGF0dGVtcHQgdG8gcmVjb3ZlclxuLy8gZnJvbSBtaXNtYXRjaGVkIGlucHV0LiBJZiB0aGlzIG1ldGhvZCByZXR1cm5zIG51bGwsIHRoZSBwYXJzZXIgYW5kIGVycm9yXG4vLyBoYW5kbGVyIHN0YXRlIHdpbGwgbm90IGhhdmUgY2hhbmdlZC4gSWYgdGhpcyBtZXRob2QgcmV0dXJucyBub24tbnVsbCxcbi8vIHtAY29kZSByZWNvZ25pemVyfSB3aWxsIDxlbT5ub3Q8L2VtPiBiZSBpbiBlcnJvciByZWNvdmVyeSBtb2RlIHNpbmNlIHRoZVxuLy8gcmV0dXJuZWQgdG9rZW4gd2FzIGEgc3VjY2Vzc2Z1bCBtYXRjaC5cbi8vXG4vLyA8cD5JZiB0aGUgc2luZ2xlLXRva2VuIGRlbGV0aW9uIGlzIHN1Y2Nlc3NmdWwsIHRoaXMgbWV0aG9kIGNhbGxzXG4vLyB7QGxpbmsgLy9yZXBvcnRVbndhbnRlZFRva2VufSB0byByZXBvcnQgdGhlIGVycm9yLCBmb2xsb3dlZCBieVxuLy8ge0BsaW5rIFBhcnNlci8vY29uc3VtZX0gdG8gYWN0dWFsbHkgXCJkZWxldGVcIiB0aGUgZXh0cmFuZW91cyB0b2tlbi4gVGhlbixcbi8vIGJlZm9yZSByZXR1cm5pbmcge0BsaW5rIC8vcmVwb3J0TWF0Y2h9IGlzIGNhbGxlZCB0byBzaWduYWwgYSBzdWNjZXNzZnVsXG4vLyBtYXRjaC48L3A+XG4vL1xuLy8gQHBhcmFtIHJlY29nbml6ZXIgdGhlIHBhcnNlciBpbnN0YW5jZVxuLy8gQHJldHVybiB0aGUgc3VjY2Vzc2Z1bGx5IG1hdGNoZWQge0BsaW5rIFRva2VufSBpbnN0YW5jZSBpZiBzaW5nbGUtdG9rZW5cbi8vIGRlbGV0aW9uIHN1Y2Nlc3NmdWxseSByZWNvdmVycyBmcm9tIHRoZSBtaXNtYXRjaGVkIGlucHV0LCBvdGhlcndpc2Vcbi8vIHtAY29kZSBudWxsfVxuLy9cbkRlZmF1bHRFcnJvclN0cmF0ZWd5LnByb3RvdHlwZS5zaW5nbGVUb2tlbkRlbGV0aW9uID0gZnVuY3Rpb24ocmVjb2duaXplcikge1xuICAgIHZhciBuZXh0VG9rZW5UeXBlID0gcmVjb2duaXplci5nZXRUb2tlblN0cmVhbSgpLkxBKDIpO1xuICAgIHZhciBleHBlY3RpbmcgPSB0aGlzLmdldEV4cGVjdGVkVG9rZW5zKHJlY29nbml6ZXIpO1xuICAgIGlmIChleHBlY3RpbmcuY29udGFpbnMobmV4dFRva2VuVHlwZSkpIHtcbiAgICAgICAgdGhpcy5yZXBvcnRVbndhbnRlZFRva2VuKHJlY29nbml6ZXIpO1xuICAgICAgICAvLyBwcmludChcInJlY292ZXJGcm9tTWlzbWF0Y2hlZFRva2VuIGRlbGV0aW5nIFwiIFxcXG4gICAgICAgIC8vICsgc3RyKHJlY29nbml6ZXIuZ2V0VG9rZW5TdHJlYW0oKS5MVCgxKSkgXFxcbiAgICAgICAgLy8gKyBcIiBzaW5jZSBcIiArIHN0cihyZWNvZ25pemVyLmdldFRva2VuU3RyZWFtKCkuTFQoMikpIFxcXG4gICAgICAgIC8vICsgXCIgaXMgd2hhdCB3ZSB3YW50XCIsIGZpbGU9c3lzLnN0ZGVycilcbiAgICAgICAgcmVjb2duaXplci5jb25zdW1lKCk7IC8vIHNpbXBseSBkZWxldGUgZXh0cmEgdG9rZW5cbiAgICAgICAgLy8gd2Ugd2FudCB0byByZXR1cm4gdGhlIHRva2VuIHdlJ3JlIGFjdHVhbGx5IG1hdGNoaW5nXG4gICAgICAgIHZhciBtYXRjaGVkU3ltYm9sID0gcmVjb2duaXplci5nZXRDdXJyZW50VG9rZW4oKTtcbiAgICAgICAgdGhpcy5yZXBvcnRNYXRjaChyZWNvZ25pemVyKTsgLy8gd2Uga25vdyBjdXJyZW50IHRva2VuIGlzIGNvcnJlY3RcbiAgICAgICAgcmV0dXJuIG1hdGNoZWRTeW1ib2w7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufTtcblxuLy8gQ29uanVyZSB1cCBhIG1pc3NpbmcgdG9rZW4gZHVyaW5nIGVycm9yIHJlY292ZXJ5LlxuLy9cbi8vIFRoZSByZWNvZ25pemVyIGF0dGVtcHRzIHRvIHJlY292ZXIgZnJvbSBzaW5nbGUgbWlzc2luZ1xuLy8gc3ltYm9scy4gQnV0LCBhY3Rpb25zIG1pZ2h0IHJlZmVyIHRvIHRoYXQgbWlzc2luZyBzeW1ib2wuXG4vLyBGb3IgZXhhbXBsZSwgeD1JRCB7ZigkeCk7fS4gVGhlIGFjdGlvbiBjbGVhcmx5IGFzc3VtZXNcbi8vIHRoYXQgdGhlcmUgaGFzIGJlZW4gYW4gaWRlbnRpZmllciBtYXRjaGVkIHByZXZpb3VzbHkgYW5kIHRoYXRcbi8vICR4IHBvaW50cyBhdCB0aGF0IHRva2VuLiBJZiB0aGF0IHRva2VuIGlzIG1pc3NpbmcsIGJ1dFxuLy8gdGhlIG5leHQgdG9rZW4gaW4gdGhlIHN0cmVhbSBpcyB3aGF0IHdlIHdhbnQgd2UgYXNzdW1lIHRoYXRcbi8vIHRoaXMgdG9rZW4gaXMgbWlzc2luZyBhbmQgd2Uga2VlcCBnb2luZy4gQmVjYXVzZSB3ZVxuLy8gaGF2ZSB0byByZXR1cm4gc29tZSB0b2tlbiB0byByZXBsYWNlIHRoZSBtaXNzaW5nIHRva2VuLFxuLy8gd2UgaGF2ZSB0byBjb25qdXJlIG9uZSB1cC4gVGhpcyBtZXRob2QgZ2l2ZXMgdGhlIHVzZXIgY29udHJvbFxuLy8gb3ZlciB0aGUgdG9rZW5zIHJldHVybmVkIGZvciBtaXNzaW5nIHRva2Vucy4gTW9zdGx5LFxuLy8geW91IHdpbGwgd2FudCB0byBjcmVhdGUgc29tZXRoaW5nIHNwZWNpYWwgZm9yIGlkZW50aWZpZXJcbi8vIHRva2Vucy4gRm9yIGxpdGVyYWxzIHN1Y2ggYXMgJ3snIGFuZCAnLCcsIHRoZSBkZWZhdWx0XG4vLyBhY3Rpb24gaW4gdGhlIHBhcnNlciBvciB0cmVlIHBhcnNlciB3b3Jrcy4gSXQgc2ltcGx5IGNyZWF0ZXNcbi8vIGEgQ29tbW9uVG9rZW4gb2YgdGhlIGFwcHJvcHJpYXRlIHR5cGUuIFRoZSB0ZXh0IHdpbGwgYmUgdGhlIHRva2VuLlxuLy8gSWYgeW91IGNoYW5nZSB3aGF0IHRva2VucyBtdXN0IGJlIGNyZWF0ZWQgYnkgdGhlIGxleGVyLFxuLy8gb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gY3JlYXRlIHRoZSBhcHByb3ByaWF0ZSB0b2tlbnMuXG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLmdldE1pc3NpbmdTeW1ib2wgPSBmdW5jdGlvbihyZWNvZ25pemVyKSB7XG4gICAgdmFyIGN1cnJlbnRTeW1ib2wgPSByZWNvZ25pemVyLmdldEN1cnJlbnRUb2tlbigpO1xuICAgIHZhciBleHBlY3RpbmcgPSB0aGlzLmdldEV4cGVjdGVkVG9rZW5zKHJlY29nbml6ZXIpO1xuICAgIHZhciBleHBlY3RlZFRva2VuVHlwZSA9IGV4cGVjdGluZy5maXJzdCgpOyAvLyBnZXQgYW55IGVsZW1lbnRcbiAgICB2YXIgdG9rZW5UZXh0O1xuICAgIGlmIChleHBlY3RlZFRva2VuVHlwZT09PVRva2VuLkVPRikge1xuICAgICAgICB0b2tlblRleHQgPSBcIjxtaXNzaW5nIEVPRj5cIjtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0b2tlblRleHQgPSBcIjxtaXNzaW5nIFwiICsgcmVjb2duaXplci5saXRlcmFsTmFtZXNbZXhwZWN0ZWRUb2tlblR5cGVdICsgXCI+XCI7XG4gICAgfVxuICAgIHZhciBjdXJyZW50ID0gY3VycmVudFN5bWJvbDtcbiAgICB2YXIgbG9va2JhY2sgPSByZWNvZ25pemVyLmdldFRva2VuU3RyZWFtKCkuTFQoLTEpO1xuICAgIGlmIChjdXJyZW50LnR5cGU9PT1Ub2tlbi5FT0YgJiYgbG9va2JhY2sgIT09IG51bGwpIHtcbiAgICAgICAgY3VycmVudCA9IGxvb2tiYWNrO1xuICAgIH1cbiAgICByZXR1cm4gcmVjb2duaXplci5nZXRUb2tlbkZhY3RvcnkoKS5jcmVhdGUoY3VycmVudC5zb3VyY2UsXG4gICAgICAgIGV4cGVjdGVkVG9rZW5UeXBlLCB0b2tlblRleHQsIFRva2VuLkRFRkFVTFRfQ0hBTk5FTCxcbiAgICAgICAgLTEsIC0xLCBjdXJyZW50LmxpbmUsIGN1cnJlbnQuY29sdW1uKTtcbn07XG5cbkRlZmF1bHRFcnJvclN0cmF0ZWd5LnByb3RvdHlwZS5nZXRFeHBlY3RlZFRva2VucyA9IGZ1bmN0aW9uKHJlY29nbml6ZXIpIHtcbiAgICByZXR1cm4gcmVjb2duaXplci5nZXRFeHBlY3RlZFRva2VucygpO1xufTtcblxuLy8gSG93IHNob3VsZCBhIHRva2VuIGJlIGRpc3BsYXllZCBpbiBhbiBlcnJvciBtZXNzYWdlPyBUaGUgZGVmYXVsdFxuLy8gaXMgdG8gZGlzcGxheSBqdXN0IHRoZSB0ZXh0LCBidXQgZHVyaW5nIGRldmVsb3BtZW50IHlvdSBtaWdodFxuLy8gd2FudCB0byBoYXZlIGEgbG90IG9mIGluZm9ybWF0aW9uIHNwaXQgb3V0LiBPdmVycmlkZSBpbiB0aGF0IGNhc2Vcbi8vIHRvIHVzZSB0LnRvU3RyaW5nKCkgKHdoaWNoLCBmb3IgQ29tbW9uVG9rZW4sIGR1bXBzIGV2ZXJ5dGhpbmcgYWJvdXRcbi8vIHRoZSB0b2tlbikuIFRoaXMgaXMgYmV0dGVyIHRoYW4gZm9yY2luZyB5b3UgdG8gb3ZlcnJpZGUgYSBtZXRob2QgaW5cbi8vIHlvdXIgdG9rZW4gb2JqZWN0cyBiZWNhdXNlIHlvdSBkb24ndCBoYXZlIHRvIGdvIG1vZGlmeSB5b3VyIGxleGVyXG4vLyBzbyB0aGF0IGl0IGNyZWF0ZXMgYSBuZXcgSmF2YSB0eXBlLlxuLy9cbkRlZmF1bHRFcnJvclN0cmF0ZWd5LnByb3RvdHlwZS5nZXRUb2tlbkVycm9yRGlzcGxheSA9IGZ1bmN0aW9uKHQpIHtcbiAgICBpZiAodCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gXCI8bm8gdG9rZW4+XCI7XG4gICAgfVxuICAgIHZhciBzID0gdC50ZXh0O1xuICAgIGlmIChzID09PSBudWxsKSB7XG4gICAgICAgIGlmICh0LnR5cGU9PT1Ub2tlbi5FT0YpIHtcbiAgICAgICAgICAgIHMgPSBcIjxFT0Y+XCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzID0gXCI8XCIgKyB0LnR5cGUgKyBcIj5cIjtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5lc2NhcGVXU0FuZFF1b3RlKHMpO1xufTtcblxuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLmVzY2FwZVdTQW5kUXVvdGUgPSBmdW5jdGlvbihzKSB7XG4gICAgcyA9IHMucmVwbGFjZSgvXFxuL2csXCJcXFxcblwiKTtcbiAgICBzID0gcy5yZXBsYWNlKC9cXHIvZyxcIlxcXFxyXCIpO1xuICAgIHMgPSBzLnJlcGxhY2UoL1xcdC9nLFwiXFxcXHRcIik7XG4gICAgcmV0dXJuIFwiJ1wiICsgcyArIFwiJ1wiO1xufTtcblxuLy8gQ29tcHV0ZSB0aGUgZXJyb3IgcmVjb3Zlcnkgc2V0IGZvciB0aGUgY3VycmVudCBydWxlLiBEdXJpbmdcbi8vIHJ1bGUgaW52b2NhdGlvbiwgdGhlIHBhcnNlciBwdXNoZXMgdGhlIHNldCBvZiB0b2tlbnMgdGhhdCBjYW5cbi8vIGZvbGxvdyB0aGF0IHJ1bGUgcmVmZXJlbmNlIG9uIHRoZSBzdGFjazsgdGhpcyBhbW91bnRzIHRvXG4vLyBjb21wdXRpbmcgRklSU1Qgb2Ygd2hhdCBmb2xsb3dzIHRoZSBydWxlIHJlZmVyZW5jZSBpbiB0aGVcbi8vIGVuY2xvc2luZyBydWxlLiBTZWUgTGluZWFyQXBwcm94aW1hdG9yLkZJUlNUKCkuXG4vLyBUaGlzIGxvY2FsIGZvbGxvdyBzZXQgb25seSBpbmNsdWRlcyB0b2tlbnNcbi8vIGZyb20gd2l0aGluIHRoZSBydWxlOyBpLmUuLCB0aGUgRklSU1QgY29tcHV0YXRpb24gZG9uZSBieVxuLy8gQU5UTFIgc3RvcHMgYXQgdGhlIGVuZCBvZiBhIHJ1bGUuXG4vL1xuLy8gRVhBTVBMRVxuLy9cbi8vIFdoZW4geW91IGZpbmQgYSBcIm5vIHZpYWJsZSBhbHQgZXhjZXB0aW9uXCIsIHRoZSBpbnB1dCBpcyBub3Rcbi8vIGNvbnNpc3RlbnQgd2l0aCBhbnkgb2YgdGhlIGFsdGVybmF0aXZlcyBmb3IgcnVsZSByLiBUaGUgYmVzdFxuLy8gdGhpbmcgdG8gZG8gaXMgdG8gY29uc3VtZSB0b2tlbnMgdW50aWwgeW91IHNlZSBzb21ldGhpbmcgdGhhdFxuLy8gY2FuIGxlZ2FsbHkgZm9sbG93IGEgY2FsbCB0byByLy9vciogYW55IHJ1bGUgdGhhdCBjYWxsZWQgci5cbi8vIFlvdSBkb24ndCB3YW50IHRoZSBleGFjdCBzZXQgb2YgdmlhYmxlIG5leHQgdG9rZW5zIGJlY2F1c2UgdGhlXG4vLyBpbnB1dCBtaWdodCBqdXN0IGJlIG1pc3NpbmcgYSB0b2tlbi0teW91IG1pZ2h0IGNvbnN1bWUgdGhlXG4vLyByZXN0IG9mIHRoZSBpbnB1dCBsb29raW5nIGZvciBvbmUgb2YgdGhlIG1pc3NpbmcgdG9rZW5zLlxuLy9cbi8vIENvbnNpZGVyIGdyYW1tYXI6XG4vL1xuLy8gYSA6ICdbJyBiICddJ1xuLy8gfCAnKCcgYiAnKSdcbi8vIDtcbi8vIGIgOiBjICdeJyBJTlQgO1xuLy8gYyA6IElEXG4vLyB8IElOVFxuLy8gO1xuLy9cbi8vIEF0IGVhY2ggcnVsZSBpbnZvY2F0aW9uLCB0aGUgc2V0IG9mIHRva2VucyB0aGF0IGNvdWxkIGZvbGxvd1xuLy8gdGhhdCBydWxlIGlzIHB1c2hlZCBvbiBhIHN0YWNrLiBIZXJlIGFyZSB0aGUgdmFyaW91c1xuLy8gY29udGV4dC1zZW5zaXRpdmUgZm9sbG93IHNldHM6XG4vL1xuLy8gRk9MTE9XKGIxX2luX2EpID0gRklSU1QoJ10nKSA9ICddJ1xuLy8gRk9MTE9XKGIyX2luX2EpID0gRklSU1QoJyknKSA9ICcpJ1xuLy8gRk9MTE9XKGNfaW5fYikgPSBGSVJTVCgnXicpID0gJ14nXG4vL1xuLy8gVXBvbiBlcnJvbmVvdXMgaW5wdXQgXCJbXVwiLCB0aGUgY2FsbCBjaGFpbiBpc1xuLy9cbi8vIGEgLT4gYiAtPiBjXG4vL1xuLy8gYW5kLCBoZW5jZSwgdGhlIGZvbGxvdyBjb250ZXh0IHN0YWNrIGlzOlxuLy9cbi8vIGRlcHRoIGZvbGxvdyBzZXQgc3RhcnQgb2YgcnVsZSBleGVjdXRpb25cbi8vIDAgPEVPRj4gYSAoZnJvbSBtYWluKCkpXG4vLyAxICddJyBiXG4vLyAyICdeJyBjXG4vL1xuLy8gTm90aWNlIHRoYXQgJyknIGlzIG5vdCBpbmNsdWRlZCwgYmVjYXVzZSBiIHdvdWxkIGhhdmUgdG8gaGF2ZVxuLy8gYmVlbiBjYWxsZWQgZnJvbSBhIGRpZmZlcmVudCBjb250ZXh0IGluIHJ1bGUgYSBmb3IgJyknIHRvIGJlXG4vLyBpbmNsdWRlZC5cbi8vXG4vLyBGb3IgZXJyb3IgcmVjb3ZlcnksIHdlIGNhbm5vdCBjb25zaWRlciBGT0xMT1coYylcbi8vIChjb250ZXh0LXNlbnNpdGl2ZSBvciBvdGhlcndpc2UpLiBXZSBuZWVkIHRoZSBjb21iaW5lZCBzZXQgb2Zcbi8vIGFsbCBjb250ZXh0LXNlbnNpdGl2ZSBGT0xMT1cgc2V0cy0tdGhlIHNldCBvZiBhbGwgdG9rZW5zIHRoYXRcbi8vIGNvdWxkIGZvbGxvdyBhbnkgcmVmZXJlbmNlIGluIHRoZSBjYWxsIGNoYWluLiBXZSBuZWVkIHRvXG4vLyByZXN5bmMgdG8gb25lIG9mIHRob3NlIHRva2Vucy4gTm90ZSB0aGF0IEZPTExPVyhjKT0nXicgYW5kIGlmXG4vLyB3ZSByZXN5bmMnZCB0byB0aGF0IHRva2VuLCB3ZSdkIGNvbnN1bWUgdW50aWwgRU9GLiBXZSBuZWVkIHRvXG4vLyBzeW5jIHRvIGNvbnRleHQtc2Vuc2l0aXZlIEZPTExPV3MgZm9yIGEsIGIsIGFuZCBjOiB7J10nLCdeJ30uXG4vLyBJbiB0aGlzIGNhc2UsIGZvciBpbnB1dCBcIltdXCIsIExBKDEpIGlzICddJyBhbmQgaW4gdGhlIHNldCwgc28gd2Ugd291bGRcbi8vIG5vdCBjb25zdW1lIGFueXRoaW5nLiBBZnRlciBwcmludGluZyBhbiBlcnJvciwgcnVsZSBjIHdvdWxkXG4vLyByZXR1cm4gbm9ybWFsbHkuIFJ1bGUgYiB3b3VsZCBub3QgZmluZCB0aGUgcmVxdWlyZWQgJ14nIHRob3VnaC5cbi8vIEF0IHRoaXMgcG9pbnQsIGl0IGdldHMgYSBtaXNtYXRjaGVkIHRva2VuIGVycm9yIGFuZCB0aHJvd3MgYW5cbi8vIGV4Y2VwdGlvbiAoc2luY2UgTEEoMSkgaXMgbm90IGluIHRoZSB2aWFibGUgZm9sbG93aW5nIHRva2VuXG4vLyBzZXQpLiBUaGUgcnVsZSBleGNlcHRpb24gaGFuZGxlciB0cmllcyB0byByZWNvdmVyLCBidXQgZmluZHNcbi8vIHRoZSBzYW1lIHJlY292ZXJ5IHNldCBhbmQgZG9lc24ndCBjb25zdW1lIGFueXRoaW5nLiBSdWxlIGJcbi8vIGV4aXRzIG5vcm1hbGx5IHJldHVybmluZyB0byBydWxlIGEuIE5vdyBpdCBmaW5kcyB0aGUgJ10nIChhbmRcbi8vIHdpdGggdGhlIHN1Y2Nlc3NmdWwgbWF0Y2ggZXhpdHMgZXJyb3JSZWNvdmVyeSBtb2RlKS5cbi8vXG4vLyBTbywgeW91IGNhbiBzZWUgdGhhdCB0aGUgcGFyc2VyIHdhbGtzIHVwIHRoZSBjYWxsIGNoYWluIGxvb2tpbmdcbi8vIGZvciB0aGUgdG9rZW4gdGhhdCB3YXMgYSBtZW1iZXIgb2YgdGhlIHJlY292ZXJ5IHNldC5cbi8vXG4vLyBFcnJvcnMgYXJlIG5vdCBnZW5lcmF0ZWQgaW4gZXJyb3JSZWNvdmVyeSBtb2RlLlxuLy9cbi8vIEFOVExSJ3MgZXJyb3IgcmVjb3ZlcnkgbWVjaGFuaXNtIGlzIGJhc2VkIHVwb24gb3JpZ2luYWwgaWRlYXM6XG4vL1xuLy8gXCJBbGdvcml0aG1zICsgRGF0YSBTdHJ1Y3R1cmVzID0gUHJvZ3JhbXNcIiBieSBOaWtsYXVzIFdpcnRoXG4vL1xuLy8gYW5kXG4vL1xuLy8gXCJBIG5vdGUgb24gZXJyb3IgcmVjb3ZlcnkgaW4gcmVjdXJzaXZlIGRlc2NlbnQgcGFyc2Vyc1wiOlxuLy8gaHR0cDovL3BvcnRhbC5hY20ub3JnL2NpdGF0aW9uLmNmbT9pZD05NDc5MDIuOTQ3OTA1XG4vL1xuLy8gTGF0ZXIsIEpvc2VmIEdyb3NjaCBoYWQgc29tZSBnb29kIGlkZWFzOlxuLy9cbi8vIFwiRWZmaWNpZW50IGFuZCBDb21mb3J0YWJsZSBFcnJvciBSZWNvdmVyeSBpbiBSZWN1cnNpdmUgRGVzY2VudFxuLy8gUGFyc2Vyc1wiOlxuLy8gZnRwOi8vd3d3LmNvY29sYWIuY29tL3Byb2R1Y3RzL2NvY2t0YWlsL2RvY2E0LnBzL2VsbC5wcy56aXBcbi8vXG4vLyBMaWtlIEdyb3NjaCBJIGltcGxlbWVudCBjb250ZXh0LXNlbnNpdGl2ZSBGT0xMT1cgc2V0cyB0aGF0IGFyZSBjb21iaW5lZFxuLy8gYXQgcnVuLXRpbWUgdXBvbiBlcnJvciB0byBhdm9pZCBvdmVyaGVhZCBkdXJpbmcgcGFyc2luZy5cbi8vXG5EZWZhdWx0RXJyb3JTdHJhdGVneS5wcm90b3R5cGUuZ2V0RXJyb3JSZWNvdmVyeVNldCA9IGZ1bmN0aW9uKHJlY29nbml6ZXIpIHtcbiAgICB2YXIgYXRuID0gcmVjb2duaXplci5faW50ZXJwLmF0bjtcbiAgICB2YXIgY3R4ID0gcmVjb2duaXplci5fY3R4O1xuICAgIHZhciByZWNvdmVyU2V0ID0gbmV3IEludGVydmFsU2V0KCk7XG4gICAgd2hpbGUgKGN0eCAhPT0gbnVsbCAmJiBjdHguaW52b2tpbmdTdGF0ZT49MCkge1xuICAgICAgICAvLyBjb21wdXRlIHdoYXQgZm9sbG93cyB3aG8gaW52b2tlZCB1c1xuICAgICAgICB2YXIgaW52b2tpbmdTdGF0ZSA9IGF0bi5zdGF0ZXNbY3R4Lmludm9raW5nU3RhdGVdO1xuICAgICAgICB2YXIgcnQgPSBpbnZva2luZ1N0YXRlLnRyYW5zaXRpb25zWzBdO1xuICAgICAgICB2YXIgZm9sbG93ID0gYXRuLm5leHRUb2tlbnMocnQuZm9sbG93U3RhdGUpO1xuICAgICAgICByZWNvdmVyU2V0LmFkZFNldChmb2xsb3cpO1xuICAgICAgICBjdHggPSBjdHgucGFyZW50Q3R4O1xuICAgIH1cbiAgICByZWNvdmVyU2V0LnJlbW92ZU9uZShUb2tlbi5FUFNJTE9OKTtcbiAgICByZXR1cm4gcmVjb3ZlclNldDtcbn07XG5cbi8vIENvbnN1bWUgdG9rZW5zIHVudGlsIG9uZSBtYXRjaGVzIHRoZSBnaXZlbiB0b2tlbiBzZXQuLy9cbkRlZmF1bHRFcnJvclN0cmF0ZWd5LnByb3RvdHlwZS5jb25zdW1lVW50aWwgPSBmdW5jdGlvbihyZWNvZ25pemVyLCBzZXQpIHtcbiAgICB2YXIgdHR5cGUgPSByZWNvZ25pemVyLmdldFRva2VuU3RyZWFtKCkuTEEoMSk7XG4gICAgd2hpbGUoIHR0eXBlICE9PSBUb2tlbi5FT0YgJiYgIXNldC5jb250YWlucyh0dHlwZSkpIHtcbiAgICAgICAgcmVjb2duaXplci5jb25zdW1lKCk7XG4gICAgICAgIHR0eXBlID0gcmVjb2duaXplci5nZXRUb2tlblN0cmVhbSgpLkxBKDEpO1xuICAgIH1cbn07XG5cbi8vXG4vLyBUaGlzIGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBBTlRMUkVycm9yU3RyYXRlZ3l9IHJlc3BvbmRzIHRvIHN5bnRheCBlcnJvcnNcbi8vIGJ5IGltbWVkaWF0ZWx5IGNhbmNlbGluZyB0aGUgcGFyc2Ugb3BlcmF0aW9uIHdpdGggYVxuLy8ge0BsaW5rIFBhcnNlQ2FuY2VsbGF0aW9uRXhjZXB0aW9ufS4gVGhlIGltcGxlbWVudGF0aW9uIGVuc3VyZXMgdGhhdCB0aGVcbi8vIHtAbGluayBQYXJzZXJSdWxlQ29udGV4dC8vZXhjZXB0aW9ufSBmaWVsZCBpcyBzZXQgZm9yIGFsbCBwYXJzZSB0cmVlIG5vZGVzXG4vLyB0aGF0IHdlcmUgbm90IGNvbXBsZXRlZCBwcmlvciB0byBlbmNvdW50ZXJpbmcgdGhlIGVycm9yLlxuLy9cbi8vIDxwPlxuLy8gVGhpcyBlcnJvciBzdHJhdGVneSBpcyB1c2VmdWwgaW4gdGhlIGZvbGxvd2luZyBzY2VuYXJpb3MuPC9wPlxuLy9cbi8vIDx1bD5cbi8vIDxsaT48c3Ryb25nPlR3by1zdGFnZSBwYXJzaW5nOjwvc3Ryb25nPiBUaGlzIGVycm9yIHN0cmF0ZWd5IGFsbG93cyB0aGUgZmlyc3Rcbi8vIHN0YWdlIG9mIHR3by1zdGFnZSBwYXJzaW5nIHRvIGltbWVkaWF0ZWx5IHRlcm1pbmF0ZSBpZiBhbiBlcnJvciBpc1xuLy8gZW5jb3VudGVyZWQsIGFuZCBpbW1lZGlhdGVseSBmYWxsIGJhY2sgdG8gdGhlIHNlY29uZCBzdGFnZS4gSW4gYWRkaXRpb24gdG9cbi8vIGF2b2lkaW5nIHdhc3RlZCB3b3JrIGJ5IGF0dGVtcHRpbmcgdG8gcmVjb3ZlciBmcm9tIGVycm9ycyBoZXJlLCB0aGUgZW1wdHlcbi8vIGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBCYWlsRXJyb3JTdHJhdGVneS8vc3luY30gaW1wcm92ZXMgdGhlIHBlcmZvcm1hbmNlIG9mXG4vLyB0aGUgZmlyc3Qgc3RhZ2UuPC9saT5cbi8vIDxsaT48c3Ryb25nPlNpbGVudCB2YWxpZGF0aW9uOjwvc3Ryb25nPiBXaGVuIHN5bnRheCBlcnJvcnMgYXJlIG5vdCBiZWluZ1xuLy8gcmVwb3J0ZWQgb3IgbG9nZ2VkLCBhbmQgdGhlIHBhcnNlIHJlc3VsdCBpcyBzaW1wbHkgaWdub3JlZCBpZiBlcnJvcnMgb2NjdXIsXG4vLyB0aGUge0BsaW5rIEJhaWxFcnJvclN0cmF0ZWd5fSBhdm9pZHMgd2FzdGluZyB3b3JrIG9uIHJlY292ZXJpbmcgZnJvbSBlcnJvcnNcbi8vIHdoZW4gdGhlIHJlc3VsdCB3aWxsIGJlIGlnbm9yZWQgZWl0aGVyIHdheS48L2xpPlxuLy8gPC91bD5cbi8vXG4vLyA8cD5cbi8vIHtAY29kZSBteXBhcnNlci5zZXRFcnJvckhhbmRsZXIobmV3IEJhaWxFcnJvclN0cmF0ZWd5KCkpO308L3A+XG4vL1xuLy8gQHNlZSBQYXJzZXIvL3NldEVycm9ySGFuZGxlcihBTlRMUkVycm9yU3RyYXRlZ3kpXG4vL1xuZnVuY3Rpb24gQmFpbEVycm9yU3RyYXRlZ3koKSB7XG5cdERlZmF1bHRFcnJvclN0cmF0ZWd5LmNhbGwodGhpcyk7XG5cdHJldHVybiB0aGlzO1xufVxuXG5CYWlsRXJyb3JTdHJhdGVneS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERlZmF1bHRFcnJvclN0cmF0ZWd5LnByb3RvdHlwZSk7XG5CYWlsRXJyb3JTdHJhdGVneS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCYWlsRXJyb3JTdHJhdGVneTtcblxuLy8gSW5zdGVhZCBvZiByZWNvdmVyaW5nIGZyb20gZXhjZXB0aW9uIHtAY29kZSBlfSwgcmUtdGhyb3cgaXQgd3JhcHBlZFxuLy8gaW4gYSB7QGxpbmsgUGFyc2VDYW5jZWxsYXRpb25FeGNlcHRpb259IHNvIGl0IGlzIG5vdCBjYXVnaHQgYnkgdGhlXG4vLyBydWxlIGZ1bmN0aW9uIGNhdGNoZXMuIFVzZSB7QGxpbmsgRXhjZXB0aW9uLy9nZXRDYXVzZSgpfSB0byBnZXQgdGhlXG4vLyBvcmlnaW5hbCB7QGxpbmsgUmVjb2duaXRpb25FeGNlcHRpb259LlxuLy9cbkJhaWxFcnJvclN0cmF0ZWd5LnByb3RvdHlwZS5yZWNvdmVyID0gZnVuY3Rpb24ocmVjb2duaXplciwgZSkge1xuICAgIHZhciBjb250ZXh0ID0gcmVjb2duaXplci5fY3R4O1xuICAgIHdoaWxlIChjb250ZXh0ICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnRleHQuZXhjZXB0aW9uID0gZTtcbiAgICAgICAgY29udGV4dCA9IGNvbnRleHQucGFyZW50Q3R4O1xuICAgIH1cbiAgICB0aHJvdyBuZXcgUGFyc2VDYW5jZWxsYXRpb25FeGNlcHRpb24oZSk7XG59O1xuXG4vLyBNYWtlIHN1cmUgd2UgZG9uJ3QgYXR0ZW1wdCB0byByZWNvdmVyIGlubGluZTsgaWYgdGhlIHBhcnNlclxuLy8gc3VjY2Vzc2Z1bGx5IHJlY292ZXJzLCBpdCB3b24ndCB0aHJvdyBhbiBleGNlcHRpb24uXG4vL1xuQmFpbEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlY292ZXJJbmxpbmUgPSBmdW5jdGlvbihyZWNvZ25pemVyKSB7XG4gICAgdGhpcy5yZWNvdmVyKHJlY29nbml6ZXIsIG5ldyBJbnB1dE1pc21hdGNoRXhjZXB0aW9uKHJlY29nbml6ZXIpKTtcbn07XG5cbi8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBhdHRlbXB0IHRvIHJlY292ZXIgZnJvbSBwcm9ibGVtcyBpbiBzdWJydWxlcy4vL1xuQmFpbEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbihyZWNvZ25pemVyKSB7XG4gICAgLy8gcGFzc1xufTtcblxuZXhwb3J0cy5CYWlsRXJyb3JTdHJhdGVneSA9IEJhaWxFcnJvclN0cmF0ZWd5O1xuZXhwb3J0cy5EZWZhdWx0RXJyb3JTdHJhdGVneSA9IERlZmF1bHRFcnJvclN0cmF0ZWd5O1xuIiwiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuXG4vLyBUaGUgcm9vdCBvZiB0aGUgQU5UTFIgZXhjZXB0aW9uIGhpZXJhcmNoeS4gSW4gZ2VuZXJhbCwgQU5UTFIgdHJhY2tzIGp1c3Rcbi8vICAzIGtpbmRzIG9mIGVycm9yczogcHJlZGljdGlvbiBlcnJvcnMsIGZhaWxlZCBwcmVkaWNhdGUgZXJyb3JzLCBhbmRcbi8vICBtaXNtYXRjaGVkIGlucHV0IGVycm9ycy4gSW4gZWFjaCBjYXNlLCB0aGUgcGFyc2VyIGtub3dzIHdoZXJlIGl0IGlzXG4vLyAgaW4gdGhlIGlucHV0LCB3aGVyZSBpdCBpcyBpbiB0aGUgQVROLCB0aGUgcnVsZSBpbnZvY2F0aW9uIHN0YWNrLFxuLy8gIGFuZCB3aGF0IGtpbmQgb2YgcHJvYmxlbSBvY2N1cnJlZC5cblxudmFyIFByZWRpY2F0ZVRyYW5zaXRpb24gPSByZXF1aXJlKCcuLy4uL2F0bi9UcmFuc2l0aW9uJykuUHJlZGljYXRlVHJhbnNpdGlvbjtcblxuZnVuY3Rpb24gUmVjb2duaXRpb25FeGNlcHRpb24ocGFyYW1zKSB7XG5cdEVycm9yLmNhbGwodGhpcyk7XG5cdGlmICghIUVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFJlY29nbml0aW9uRXhjZXB0aW9uKTtcblx0fSBlbHNlIHtcblx0XHR2YXIgc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcblx0fVxuXHR0aGlzLm1lc3NhZ2UgPSBwYXJhbXMubWVzc2FnZTtcbiAgICB0aGlzLnJlY29nbml6ZXIgPSBwYXJhbXMucmVjb2duaXplcjtcbiAgICB0aGlzLmlucHV0ID0gcGFyYW1zLmlucHV0O1xuICAgIHRoaXMuY3R4ID0gcGFyYW1zLmN0eDtcbiAgICAvLyBUaGUgY3VycmVudCB7QGxpbmsgVG9rZW59IHdoZW4gYW4gZXJyb3Igb2NjdXJyZWQuIFNpbmNlIG5vdCBhbGwgc3RyZWFtc1xuICAgIC8vIHN1cHBvcnQgYWNjZXNzaW5nIHN5bWJvbHMgYnkgaW5kZXgsIHdlIGhhdmUgdG8gdHJhY2sgdGhlIHtAbGluayBUb2tlbn1cbiAgICAvLyBpbnN0YW5jZSBpdHNlbGYuXG4gICAgdGhpcy5vZmZlbmRpbmdUb2tlbiA9IG51bGw7XG4gICAgLy8gR2V0IHRoZSBBVE4gc3RhdGUgbnVtYmVyIHRoZSBwYXJzZXIgd2FzIGluIGF0IHRoZSB0aW1lIHRoZSBlcnJvclxuICAgIC8vIG9jY3VycmVkLiBGb3Ige0BsaW5rIE5vVmlhYmxlQWx0RXhjZXB0aW9ufSBhbmRcbiAgICAvLyB7QGxpbmsgTGV4ZXJOb1ZpYWJsZUFsdEV4Y2VwdGlvbn0gZXhjZXB0aW9ucywgdGhpcyBpcyB0aGVcbiAgICAvLyB7QGxpbmsgRGVjaXNpb25TdGF0ZX0gbnVtYmVyLiBGb3Igb3RoZXJzLCBpdCBpcyB0aGUgc3RhdGUgd2hvc2Ugb3V0Z29pbmdcbiAgICAvLyBlZGdlIHdlIGNvdWxkbid0IG1hdGNoLlxuICAgIHRoaXMub2ZmZW5kaW5nU3RhdGUgPSAtMTtcbiAgICBpZiAodGhpcy5yZWNvZ25pemVyIT09bnVsbCkge1xuICAgICAgICB0aGlzLm9mZmVuZGluZ1N0YXRlID0gdGhpcy5yZWNvZ25pemVyLnN0YXRlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn1cblxuUmVjb2duaXRpb25FeGNlcHRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpO1xuUmVjb2duaXRpb25FeGNlcHRpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVjb2duaXRpb25FeGNlcHRpb247XG5cbi8vIDxwPklmIHRoZSBzdGF0ZSBudW1iZXIgaXMgbm90IGtub3duLCB0aGlzIG1ldGhvZCByZXR1cm5zIC0xLjwvcD5cblxuLy9cbi8vIEdldHMgdGhlIHNldCBvZiBpbnB1dCBzeW1ib2xzIHdoaWNoIGNvdWxkIHBvdGVudGlhbGx5IGZvbGxvdyB0aGVcbi8vIHByZXZpb3VzbHkgbWF0Y2hlZCBzeW1ib2wgYXQgdGhlIHRpbWUgdGhpcyBleGNlcHRpb24gd2FzIHRocm93bi5cbi8vXG4vLyA8cD5JZiB0aGUgc2V0IG9mIGV4cGVjdGVkIHRva2VucyBpcyBub3Qga25vd24gYW5kIGNvdWxkIG5vdCBiZSBjb21wdXRlZCxcbi8vIHRoaXMgbWV0aG9kIHJldHVybnMge0Bjb2RlIG51bGx9LjwvcD5cbi8vXG4vLyBAcmV0dXJuIFRoZSBzZXQgb2YgdG9rZW4gdHlwZXMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBmb2xsb3cgdGhlIGN1cnJlbnRcbi8vIHN0YXRlIGluIHRoZSBBVE4sIG9yIHtAY29kZSBudWxsfSBpZiB0aGUgaW5mb3JtYXRpb24gaXMgbm90IGF2YWlsYWJsZS5cbi8vIC9cblJlY29nbml0aW9uRXhjZXB0aW9uLnByb3RvdHlwZS5nZXRFeHBlY3RlZFRva2VucyA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLnJlY29nbml6ZXIhPT1udWxsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlY29nbml6ZXIuYXRuLmdldEV4cGVjdGVkVG9rZW5zKHRoaXMub2ZmZW5kaW5nU3RhdGUsIHRoaXMuY3R4KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59O1xuXG5SZWNvZ25pdGlvbkV4Y2VwdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlO1xufTtcblxuZnVuY3Rpb24gTGV4ZXJOb1ZpYWJsZUFsdEV4Y2VwdGlvbihsZXhlciwgaW5wdXQsIHN0YXJ0SW5kZXgsIGRlYWRFbmRDb25maWdzKSB7XG5cdFJlY29nbml0aW9uRXhjZXB0aW9uLmNhbGwodGhpcywge21lc3NhZ2U6XCJcIiwgcmVjb2duaXplcjpsZXhlciwgaW5wdXQ6aW5wdXQsIGN0eDpudWxsfSk7XG4gICAgdGhpcy5zdGFydEluZGV4ID0gc3RhcnRJbmRleDtcbiAgICB0aGlzLmRlYWRFbmRDb25maWdzID0gZGVhZEVuZENvbmZpZ3M7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkxleGVyTm9WaWFibGVBbHRFeGNlcHRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShSZWNvZ25pdGlvbkV4Y2VwdGlvbi5wcm90b3R5cGUpO1xuTGV4ZXJOb1ZpYWJsZUFsdEV4Y2VwdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMZXhlck5vVmlhYmxlQWx0RXhjZXB0aW9uO1xuXG5MZXhlck5vVmlhYmxlQWx0RXhjZXB0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBzeW1ib2wgPSBcIlwiO1xuICAgIGlmICh0aGlzLnN0YXJ0SW5kZXggPj0gMCAmJiB0aGlzLnN0YXJ0SW5kZXggPCB0aGlzLmlucHV0LnNpemUpIHtcbiAgICAgICAgc3ltYm9sID0gdGhpcy5pbnB1dC5nZXRUZXh0KCh0aGlzLnN0YXJ0SW5kZXgsdGhpcy5zdGFydEluZGV4KSk7XG4gICAgfVxuICAgIHJldHVybiBcIkxleGVyTm9WaWFibGVBbHRFeGNlcHRpb25cIiArIHN5bWJvbDtcbn07XG5cbi8vIEluZGljYXRlcyB0aGF0IHRoZSBwYXJzZXIgY291bGQgbm90IGRlY2lkZSB3aGljaCBvZiB0d28gb3IgbW9yZSBwYXRoc1xuLy8gdG8gdGFrZSBiYXNlZCB1cG9uIHRoZSByZW1haW5pbmcgaW5wdXQuIEl0IHRyYWNrcyB0aGUgc3RhcnRpbmcgdG9rZW5cbi8vIG9mIHRoZSBvZmZlbmRpbmcgaW5wdXQgYW5kIGFsc28ga25vd3Mgd2hlcmUgdGhlIHBhcnNlciB3YXNcbi8vIGluIHRoZSB2YXJpb3VzIHBhdGhzIHdoZW4gdGhlIGVycm9yLiBSZXBvcnRlZCBieSByZXBvcnROb1ZpYWJsZUFsdGVybmF0aXZlKClcbi8vXG5mdW5jdGlvbiBOb1ZpYWJsZUFsdEV4Y2VwdGlvbihyZWNvZ25pemVyLCBpbnB1dCwgc3RhcnRUb2tlbiwgb2ZmZW5kaW5nVG9rZW4sIGRlYWRFbmRDb25maWdzLCBjdHgpIHtcblx0Y3R4ID0gY3R4IHx8IHJlY29nbml6ZXIuX2N0eDtcblx0b2ZmZW5kaW5nVG9rZW4gPSBvZmZlbmRpbmdUb2tlbiB8fCByZWNvZ25pemVyLmdldEN1cnJlbnRUb2tlbigpO1xuXHRzdGFydFRva2VuID0gc3RhcnRUb2tlbiB8fCByZWNvZ25pemVyLmdldEN1cnJlbnRUb2tlbigpO1xuXHRpbnB1dCA9IGlucHV0IHx8IHJlY29nbml6ZXIuZ2V0SW5wdXRTdHJlYW0oKTtcblx0UmVjb2duaXRpb25FeGNlcHRpb24uY2FsbCh0aGlzLCB7bWVzc2FnZTpcIlwiLCByZWNvZ25pemVyOnJlY29nbml6ZXIsIGlucHV0OmlucHV0LCBjdHg6Y3R4fSk7XG4gICAgLy8gV2hpY2ggY29uZmlndXJhdGlvbnMgZGlkIHdlIHRyeSBhdCBpbnB1dC5pbmRleCgpIHRoYXQgY291bGRuJ3QgbWF0Y2hcblx0Ly8gaW5wdXQuTFQoMSk/Ly9cbiAgICB0aGlzLmRlYWRFbmRDb25maWdzID0gZGVhZEVuZENvbmZpZ3M7XG4gICAgLy8gVGhlIHRva2VuIG9iamVjdCBhdCB0aGUgc3RhcnQgaW5kZXg7IHRoZSBpbnB1dCBzdHJlYW0gbWlnaHRcbiAgICAvLyBub3QgYmUgYnVmZmVyaW5nIHRva2VucyBzbyBnZXQgYSByZWZlcmVuY2UgdG8gaXQuIChBdCB0aGVcbiAgICAvLyB0aW1lIHRoZSBlcnJvciBvY2N1cnJlZCwgb2YgY291cnNlIHRoZSBzdHJlYW0gbmVlZHMgdG8ga2VlcCBhXG4gICAgLy8gYnVmZmVyIGFsbCBvZiB0aGUgdG9rZW5zIGJ1dCBsYXRlciB3ZSBtaWdodCBub3QgaGF2ZSBhY2Nlc3MgdG8gdGhvc2UuKVxuICAgIHRoaXMuc3RhcnRUb2tlbiA9IHN0YXJ0VG9rZW47XG4gICAgdGhpcy5vZmZlbmRpbmdUb2tlbiA9IG9mZmVuZGluZ1Rva2VuO1xufVxuXG5Ob1ZpYWJsZUFsdEV4Y2VwdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFJlY29nbml0aW9uRXhjZXB0aW9uLnByb3RvdHlwZSk7XG5Ob1ZpYWJsZUFsdEV4Y2VwdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBOb1ZpYWJsZUFsdEV4Y2VwdGlvbjtcblxuLy8gVGhpcyBzaWduaWZpZXMgYW55IGtpbmQgb2YgbWlzbWF0Y2hlZCBpbnB1dCBleGNlcHRpb25zIHN1Y2ggYXNcbi8vIHdoZW4gdGhlIGN1cnJlbnQgaW5wdXQgZG9lcyBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIHRva2VuLlxuLy9cbmZ1bmN0aW9uIElucHV0TWlzbWF0Y2hFeGNlcHRpb24ocmVjb2duaXplcikge1xuXHRSZWNvZ25pdGlvbkV4Y2VwdGlvbi5jYWxsKHRoaXMsIHttZXNzYWdlOlwiXCIsIHJlY29nbml6ZXI6cmVjb2duaXplciwgaW5wdXQ6cmVjb2duaXplci5nZXRJbnB1dFN0cmVhbSgpLCBjdHg6cmVjb2duaXplci5fY3R4fSk7XG4gICAgdGhpcy5vZmZlbmRpbmdUb2tlbiA9IHJlY29nbml6ZXIuZ2V0Q3VycmVudFRva2VuKCk7XG59XG5cbklucHV0TWlzbWF0Y2hFeGNlcHRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShSZWNvZ25pdGlvbkV4Y2VwdGlvbi5wcm90b3R5cGUpO1xuSW5wdXRNaXNtYXRjaEV4Y2VwdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnB1dE1pc21hdGNoRXhjZXB0aW9uO1xuXG4vLyBBIHNlbWFudGljIHByZWRpY2F0ZSBmYWlsZWQgZHVyaW5nIHZhbGlkYXRpb24uIFZhbGlkYXRpb24gb2YgcHJlZGljYXRlc1xuLy8gb2NjdXJzIHdoZW4gbm9ybWFsbHkgcGFyc2luZyB0aGUgYWx0ZXJuYXRpdmUganVzdCBsaWtlIG1hdGNoaW5nIGEgdG9rZW4uXG4vLyBEaXNhbWJpZ3VhdGluZyBwcmVkaWNhdGUgZXZhbHVhdGlvbiBvY2N1cnMgd2hlbiB3ZSB0ZXN0IGEgcHJlZGljYXRlIGR1cmluZ1xuLy8gcHJlZGljdGlvbi5cblxuZnVuY3Rpb24gRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9uKHJlY29nbml6ZXIsIHByZWRpY2F0ZSwgbWVzc2FnZSkge1xuXHRSZWNvZ25pdGlvbkV4Y2VwdGlvbi5jYWxsKHRoaXMsIHttZXNzYWdlOnRoaXMuZm9ybWF0TWVzc2FnZShwcmVkaWNhdGUsbWVzc2FnZSB8fCBudWxsKSwgcmVjb2duaXplcjpyZWNvZ25pemVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OnJlY29nbml6ZXIuZ2V0SW5wdXRTdHJlYW0oKSwgY3R4OnJlY29nbml6ZXIuX2N0eH0pO1xuICAgIHZhciBzID0gcmVjb2duaXplci5faW50ZXJwLmF0bi5zdGF0ZXNbcmVjb2duaXplci5zdGF0ZV07XG4gICAgdmFyIHRyYW5zID0gcy50cmFuc2l0aW9uc1swXTtcbiAgICBpZiAodHJhbnMgaW5zdGFuY2VvZiBQcmVkaWNhdGVUcmFuc2l0aW9uKSB7XG4gICAgICAgIHRoaXMucnVsZUluZGV4ID0gdHJhbnMucnVsZUluZGV4O1xuICAgICAgICB0aGlzLnByZWRpY2F0ZUluZGV4ID0gdHJhbnMucHJlZEluZGV4O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucnVsZUluZGV4ID0gMDtcbiAgICAgICAgdGhpcy5wcmVkaWNhdGVJbmRleCA9IDA7XG4gICAgfVxuICAgIHRoaXMucHJlZGljYXRlID0gcHJlZGljYXRlO1xuICAgIHRoaXMub2ZmZW5kaW5nVG9rZW4gPSByZWNvZ25pemVyLmdldEN1cnJlbnRUb2tlbigpO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5GYWlsZWRQcmVkaWNhdGVFeGNlcHRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShSZWNvZ25pdGlvbkV4Y2VwdGlvbi5wcm90b3R5cGUpO1xuRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEZhaWxlZFByZWRpY2F0ZUV4Y2VwdGlvbjtcblxuRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9uLnByb3RvdHlwZS5mb3JtYXRNZXNzYWdlID0gZnVuY3Rpb24ocHJlZGljYXRlLCBtZXNzYWdlKSB7XG4gICAgaWYgKG1lc3NhZ2UgIT09bnVsbCkge1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gXCJmYWlsZWQgcHJlZGljYXRlOiB7XCIgKyBwcmVkaWNhdGUgKyBcIn0/XCI7XG4gICAgfVxufTtcblxuZnVuY3Rpb24gUGFyc2VDYW5jZWxsYXRpb25FeGNlcHRpb24oKSB7XG5cdEVycm9yLmNhbGwodGhpcyk7XG5cdEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFBhcnNlQ2FuY2VsbGF0aW9uRXhjZXB0aW9uKTtcblx0cmV0dXJuIHRoaXM7XG59XG5cblBhcnNlQ2FuY2VsbGF0aW9uRXhjZXB0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcblBhcnNlQ2FuY2VsbGF0aW9uRXhjZXB0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnNlQ2FuY2VsbGF0aW9uRXhjZXB0aW9uO1xuXG5leHBvcnRzLlJlY29nbml0aW9uRXhjZXB0aW9uID0gUmVjb2duaXRpb25FeGNlcHRpb247XG5leHBvcnRzLk5vVmlhYmxlQWx0RXhjZXB0aW9uID0gTm9WaWFibGVBbHRFeGNlcHRpb247XG5leHBvcnRzLkxleGVyTm9WaWFibGVBbHRFeGNlcHRpb24gPSBMZXhlck5vVmlhYmxlQWx0RXhjZXB0aW9uO1xuZXhwb3J0cy5JbnB1dE1pc21hdGNoRXhjZXB0aW9uID0gSW5wdXRNaXNtYXRjaEV4Y2VwdGlvbjtcbmV4cG9ydHMuRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9uID0gRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9uO1xuZXhwb3J0cy5QYXJzZUNhbmNlbGxhdGlvbkV4Y2VwdGlvbiA9IFBhcnNlQ2FuY2VsbGF0aW9uRXhjZXB0aW9uO1xuIiwiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuXG5leHBvcnRzLlJlY29nbml0aW9uRXhjZXB0aW9uID0gcmVxdWlyZSgnLi9FcnJvcnMnKS5SZWNvZ25pdGlvbkV4Y2VwdGlvbjtcbmV4cG9ydHMuTm9WaWFibGVBbHRFeGNlcHRpb24gPSByZXF1aXJlKCcuL0Vycm9ycycpLk5vVmlhYmxlQWx0RXhjZXB0aW9uO1xuZXhwb3J0cy5MZXhlck5vVmlhYmxlQWx0RXhjZXB0aW9uID0gcmVxdWlyZSgnLi9FcnJvcnMnKS5MZXhlck5vVmlhYmxlQWx0RXhjZXB0aW9uO1xuZXhwb3J0cy5JbnB1dE1pc21hdGNoRXhjZXB0aW9uID0gcmVxdWlyZSgnLi9FcnJvcnMnKS5JbnB1dE1pc21hdGNoRXhjZXB0aW9uO1xuZXhwb3J0cy5GYWlsZWRQcmVkaWNhdGVFeGNlcHRpb24gPSByZXF1aXJlKCcuL0Vycm9ycycpLkZhaWxlZFByZWRpY2F0ZUV4Y2VwdGlvbjtcbmV4cG9ydHMuRGlhZ25vc3RpY0Vycm9yTGlzdGVuZXIgPSByZXF1aXJlKCcuL0RpYWdub3N0aWNFcnJvckxpc3RlbmVyJykuRGlhZ25vc3RpY0Vycm9yTGlzdGVuZXI7XG5leHBvcnRzLkJhaWxFcnJvclN0cmF0ZWd5ID0gcmVxdWlyZSgnLi9FcnJvclN0cmF0ZWd5JykuQmFpbEVycm9yU3RyYXRlZ3k7XG5leHBvcnRzLkVycm9yTGlzdGVuZXIgPSByZXF1aXJlKCcuL0Vycm9yTGlzdGVuZXInKS5FcnJvckxpc3RlbmVyO1xuIiwiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuZXhwb3J0cy5hdG4gPSByZXF1aXJlKCcuL2F0bi9pbmRleCcpO1xuZXhwb3J0cy5jb2RlcG9pbnRhdCA9IHJlcXVpcmUoJy4vcG9seWZpbGxzL2NvZGVwb2ludGF0Jyk7XG5leHBvcnRzLmRmYSA9IHJlcXVpcmUoJy4vZGZhL2luZGV4Jyk7XG5leHBvcnRzLmZyb21jb2RlcG9pbnQgPSByZXF1aXJlKCcuL3BvbHlmaWxscy9mcm9tY29kZXBvaW50Jyk7XG5leHBvcnRzLnRyZWUgPSByZXF1aXJlKCcuL3RyZWUvaW5kZXgnKTtcbmV4cG9ydHMuZXJyb3IgPSByZXF1aXJlKCcuL2Vycm9yL2luZGV4Jyk7XG5leHBvcnRzLlRva2VuID0gcmVxdWlyZSgnLi9Ub2tlbicpLlRva2VuO1xuZXhwb3J0cy5DaGFyU3RyZWFtcyA9IHJlcXVpcmUoJy4vQ2hhclN0cmVhbXMnKS5DaGFyU3RyZWFtcztcbmV4cG9ydHMuQ29tbW9uVG9rZW4gPSByZXF1aXJlKCcuL1Rva2VuJykuQ29tbW9uVG9rZW47XG5leHBvcnRzLklucHV0U3RyZWFtID0gcmVxdWlyZSgnLi9JbnB1dFN0cmVhbScpLklucHV0U3RyZWFtO1xuZXhwb3J0cy5GaWxlU3RyZWFtID0gcmVxdWlyZSgnLi9GaWxlU3RyZWFtJykuRmlsZVN0cmVhbTtcbmV4cG9ydHMuQ29tbW9uVG9rZW5TdHJlYW0gPSByZXF1aXJlKCcuL0NvbW1vblRva2VuU3RyZWFtJykuQ29tbW9uVG9rZW5TdHJlYW07XG5leHBvcnRzLkxleGVyID0gcmVxdWlyZSgnLi9MZXhlcicpLkxleGVyO1xuZXhwb3J0cy5QYXJzZXIgPSByZXF1aXJlKCcuL1BhcnNlcicpLlBhcnNlcjtcbnZhciBwYyA9IHJlcXVpcmUoJy4vUHJlZGljdGlvbkNvbnRleHQnKTtcbmV4cG9ydHMuUHJlZGljdGlvbkNvbnRleHRDYWNoZSA9IHBjLlByZWRpY3Rpb25Db250ZXh0Q2FjaGU7XG5leHBvcnRzLlBhcnNlclJ1bGVDb250ZXh0ID0gcmVxdWlyZSgnLi9QYXJzZXJSdWxlQ29udGV4dCcpLlBhcnNlclJ1bGVDb250ZXh0O1xuZXhwb3J0cy5JbnRlcnZhbCA9IHJlcXVpcmUoJy4vSW50ZXJ2YWxTZXQnKS5JbnRlcnZhbDtcbmV4cG9ydHMuVXRpbHMgPSByZXF1aXJlKCcuL1V0aWxzJyk7XG4iLCIvKiEgaHR0cHM6Ly9tdGhzLmJlL2NvZGVwb2ludGF0IHYwLjIuMCBieSBAbWF0aGlhcyAqL1xuaWYgKCFTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0KSB7XG5cdChmdW5jdGlvbigpIHtcblx0XHQndXNlIHN0cmljdCc7IC8vIG5lZWRlZCB0byBzdXBwb3J0IGBhcHBseWAvYGNhbGxgIHdpdGggYHVuZGVmaW5lZGAvYG51bGxgXG5cdFx0dmFyIGRlZmluZVByb3BlcnR5ID0gKGZ1bmN0aW9uKCkge1xuXHRcdFx0Ly8gSUUgOCBvbmx5IHN1cHBvcnRzIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG9uIERPTSBlbGVtZW50c1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dmFyIG9iamVjdCA9IHt9O1xuXHRcdFx0XHR2YXIgJGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXHRcdFx0XHR2YXIgcmVzdWx0ID0gJGRlZmluZVByb3BlcnR5KG9iamVjdCwgb2JqZWN0LCBvYmplY3QpICYmICRkZWZpbmVQcm9wZXJ0eTtcblx0XHRcdH0gY2F0Y2goZXJyb3IpIHt9XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0oKSk7XG5cdFx0dmFyIGNvZGVQb2ludEF0ID0gZnVuY3Rpb24ocG9zaXRpb24pIHtcblx0XHRcdGlmICh0aGlzID09IG51bGwpIHtcblx0XHRcdFx0dGhyb3cgVHlwZUVycm9yKCk7XG5cdFx0XHR9XG5cdFx0XHR2YXIgc3RyaW5nID0gU3RyaW5nKHRoaXMpO1xuXHRcdFx0dmFyIHNpemUgPSBzdHJpbmcubGVuZ3RoO1xuXHRcdFx0Ly8gYFRvSW50ZWdlcmBcblx0XHRcdHZhciBpbmRleCA9IHBvc2l0aW9uID8gTnVtYmVyKHBvc2l0aW9uKSA6IDA7XG5cdFx0XHRpZiAoaW5kZXggIT0gaW5kZXgpIHsgLy8gYmV0dGVyIGBpc05hTmBcblx0XHRcdFx0aW5kZXggPSAwO1xuXHRcdFx0fVxuXHRcdFx0Ly8gQWNjb3VudCBmb3Igb3V0LW9mLWJvdW5kcyBpbmRpY2VzOlxuXHRcdFx0aWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBzaXplKSB7XG5cdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0XHQvLyBHZXQgdGhlIGZpcnN0IGNvZGUgdW5pdFxuXHRcdFx0dmFyIGZpcnN0ID0gc3RyaW5nLmNoYXJDb2RlQXQoaW5kZXgpO1xuXHRcdFx0dmFyIHNlY29uZDtcblx0XHRcdGlmICggLy8gY2hlY2sgaWYgaXTigJlzIHRoZSBzdGFydCBvZiBhIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0XHRcdGZpcnN0ID49IDB4RDgwMCAmJiBmaXJzdCA8PSAweERCRkYgJiYgLy8gaGlnaCBzdXJyb2dhdGVcblx0XHRcdFx0c2l6ZSA+IGluZGV4ICsgMSAvLyB0aGVyZSBpcyBhIG5leHQgY29kZSB1bml0XG5cdFx0XHQpIHtcblx0XHRcdFx0c2Vjb25kID0gc3RyaW5nLmNoYXJDb2RlQXQoaW5kZXggKyAxKTtcblx0XHRcdFx0aWYgKHNlY29uZCA+PSAweERDMDAgJiYgc2Vjb25kIDw9IDB4REZGRikgeyAvLyBsb3cgc3Vycm9nYXRlXG5cdFx0XHRcdFx0Ly8gaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmcjc3Vycm9nYXRlLWZvcm11bGFlXG5cdFx0XHRcdFx0cmV0dXJuIChmaXJzdCAtIDB4RDgwMCkgKiAweDQwMCArIHNlY29uZCAtIDB4REMwMCArIDB4MTAwMDA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmaXJzdDtcblx0XHR9O1xuXHRcdGlmIChkZWZpbmVQcm9wZXJ0eSkge1xuXHRcdFx0ZGVmaW5lUHJvcGVydHkoU3RyaW5nLnByb3RvdHlwZSwgJ2NvZGVQb2ludEF0Jywge1xuXHRcdFx0XHQndmFsdWUnOiBjb2RlUG9pbnRBdCxcblx0XHRcdFx0J2NvbmZpZ3VyYWJsZSc6IHRydWUsXG5cdFx0XHRcdCd3cml0YWJsZSc6IHRydWVcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0ID0gY29kZVBvaW50QXQ7XG5cdFx0fVxuXHR9KCkpO1xufVxuIiwiLyohIGh0dHBzOi8vbXRocy5iZS9mcm9tY29kZXBvaW50IHYwLjIuMSBieSBAbWF0aGlhcyAqL1xuaWYgKCFTdHJpbmcuZnJvbUNvZGVQb2ludCkge1xuXHQoZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGRlZmluZVByb3BlcnR5ID0gKGZ1bmN0aW9uKCkge1xuXHRcdFx0Ly8gSUUgOCBvbmx5IHN1cHBvcnRzIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG9uIERPTSBlbGVtZW50c1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dmFyIG9iamVjdCA9IHt9O1xuXHRcdFx0XHR2YXIgJGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXHRcdFx0XHR2YXIgcmVzdWx0ID0gJGRlZmluZVByb3BlcnR5KG9iamVjdCwgb2JqZWN0LCBvYmplY3QpICYmICRkZWZpbmVQcm9wZXJ0eTtcblx0XHRcdH0gY2F0Y2goZXJyb3IpIHt9XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0oKSk7XG5cdFx0dmFyIHN0cmluZ0Zyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG5cdFx0dmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblx0XHR2YXIgZnJvbUNvZGVQb2ludCA9IGZ1bmN0aW9uKF8pIHtcblx0XHRcdHZhciBNQVhfU0laRSA9IDB4NDAwMDtcblx0XHRcdHZhciBjb2RlVW5pdHMgPSBbXTtcblx0XHRcdHZhciBoaWdoU3Vycm9nYXRlO1xuXHRcdFx0dmFyIGxvd1N1cnJvZ2F0ZTtcblx0XHRcdHZhciBpbmRleCA9IC0xO1xuXHRcdFx0dmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0XHRpZiAoIWxlbmd0aCkge1xuXHRcdFx0XHRyZXR1cm4gJyc7XG5cdFx0XHR9XG5cdFx0XHR2YXIgcmVzdWx0ID0gJyc7XG5cdFx0XHR3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuXHRcdFx0XHR2YXIgY29kZVBvaW50ID0gTnVtYmVyKGFyZ3VtZW50c1tpbmRleF0pO1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0IWlzRmluaXRlKGNvZGVQb2ludCkgfHwgLy8gYE5hTmAsIGArSW5maW5pdHlgLCBvciBgLUluZmluaXR5YFxuXHRcdFx0XHRcdGNvZGVQb2ludCA8IDAgfHwgLy8gbm90IGEgdmFsaWQgVW5pY29kZSBjb2RlIHBvaW50XG5cdFx0XHRcdFx0Y29kZVBvaW50ID4gMHgxMEZGRkYgfHwgLy8gbm90IGEgdmFsaWQgVW5pY29kZSBjb2RlIHBvaW50XG5cdFx0XHRcdFx0Zmxvb3IoY29kZVBvaW50KSAhPSBjb2RlUG9pbnQgLy8gbm90IGFuIGludGVnZXJcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0dGhyb3cgUmFuZ2VFcnJvcignSW52YWxpZCBjb2RlIHBvaW50OiAnICsgY29kZVBvaW50KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoY29kZVBvaW50IDw9IDB4RkZGRikgeyAvLyBCTVAgY29kZSBwb2ludFxuXHRcdFx0XHRcdGNvZGVVbml0cy5wdXNoKGNvZGVQb2ludCk7XG5cdFx0XHRcdH0gZWxzZSB7IC8vIEFzdHJhbCBjb2RlIHBvaW50OyBzcGxpdCBpbiBzdXJyb2dhdGUgaGFsdmVzXG5cdFx0XHRcdFx0Ly8gaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmcjc3Vycm9nYXRlLWZvcm11bGFlXG5cdFx0XHRcdFx0Y29kZVBvaW50IC09IDB4MTAwMDA7XG5cdFx0XHRcdFx0aGlnaFN1cnJvZ2F0ZSA9IChjb2RlUG9pbnQgPj4gMTApICsgMHhEODAwO1xuXHRcdFx0XHRcdGxvd1N1cnJvZ2F0ZSA9IChjb2RlUG9pbnQgJSAweDQwMCkgKyAweERDMDA7XG5cdFx0XHRcdFx0Y29kZVVuaXRzLnB1c2goaGlnaFN1cnJvZ2F0ZSwgbG93U3Vycm9nYXRlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoaW5kZXggKyAxID09IGxlbmd0aCB8fCBjb2RlVW5pdHMubGVuZ3RoID4gTUFYX1NJWkUpIHtcblx0XHRcdFx0XHRyZXN1bHQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIGNvZGVVbml0cyk7XG5cdFx0XHRcdFx0Y29kZVVuaXRzLmxlbmd0aCA9IDA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fTtcblx0XHRpZiAoZGVmaW5lUHJvcGVydHkpIHtcblx0XHRcdGRlZmluZVByb3BlcnR5KFN0cmluZywgJ2Zyb21Db2RlUG9pbnQnLCB7XG5cdFx0XHRcdCd2YWx1ZSc6IGZyb21Db2RlUG9pbnQsXG5cdFx0XHRcdCdjb25maWd1cmFibGUnOiB0cnVlLFxuXHRcdFx0XHQnd3JpdGFibGUnOiB0cnVlXG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0U3RyaW5nLmZyb21Db2RlUG9pbnQgPSBmcm9tQ29kZVBvaW50O1xuXHRcdH1cblx0fSgpKTtcbn1cbiIsIi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbi8vL1xuXG4vLyBUaGUgYmFzaWMgbm90aW9uIG9mIGEgdHJlZSBoYXMgYSBwYXJlbnQsIGEgcGF5bG9hZCwgYW5kIGEgbGlzdCBvZiBjaGlsZHJlbi5cbi8vICBJdCBpcyB0aGUgbW9zdCBhYnN0cmFjdCBpbnRlcmZhY2UgZm9yIGFsbCB0aGUgdHJlZXMgdXNlZCBieSBBTlRMUi5cbi8vL1xuXG52YXIgVG9rZW4gPSByZXF1aXJlKCcuLy4uL1Rva2VuJykuVG9rZW47XG52YXIgSW50ZXJ2YWwgPSByZXF1aXJlKCcuLy4uL0ludGVydmFsU2V0JykuSW50ZXJ2YWw7XG52YXIgSU5WQUxJRF9JTlRFUlZBTCA9IG5ldyBJbnRlcnZhbCgtMSwgLTIpO1xudmFyIFV0aWxzID0gcmVxdWlyZSgnLi4vVXRpbHMuanMnKTtcblxuXG5mdW5jdGlvbiBUcmVlKCkge1xuXHRyZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gU3ludGF4VHJlZSgpIHtcblx0VHJlZS5jYWxsKHRoaXMpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuU3ludGF4VHJlZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRyZWUucHJvdG90eXBlKTtcblN5bnRheFRyZWUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3ludGF4VHJlZTtcblxuZnVuY3Rpb24gUGFyc2VUcmVlKCkge1xuXHRTeW50YXhUcmVlLmNhbGwodGhpcyk7XG5cdHJldHVybiB0aGlzO1xufVxuXG5QYXJzZVRyZWUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTeW50YXhUcmVlLnByb3RvdHlwZSk7XG5QYXJzZVRyZWUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFyc2VUcmVlO1xuXG5mdW5jdGlvbiBSdWxlTm9kZSgpIHtcblx0UGFyc2VUcmVlLmNhbGwodGhpcyk7XG5cdHJldHVybiB0aGlzO1xufVxuXG5SdWxlTm9kZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFBhcnNlVHJlZS5wcm90b3R5cGUpO1xuUnVsZU5vZGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUnVsZU5vZGU7XG5cbmZ1bmN0aW9uIFRlcm1pbmFsTm9kZSgpIHtcblx0UGFyc2VUcmVlLmNhbGwodGhpcyk7XG5cdHJldHVybiB0aGlzO1xufVxuXG5UZXJtaW5hbE5vZGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShQYXJzZVRyZWUucHJvdG90eXBlKTtcblRlcm1pbmFsTm9kZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXJtaW5hbE5vZGU7XG5cbmZ1bmN0aW9uIEVycm9yTm9kZSgpIHtcblx0VGVybWluYWxOb2RlLmNhbGwodGhpcyk7XG5cdHJldHVybiB0aGlzO1xufVxuXG5FcnJvck5vZGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXJtaW5hbE5vZGUucHJvdG90eXBlKTtcbkVycm9yTm9kZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBFcnJvck5vZGU7XG5cbmZ1bmN0aW9uIFBhcnNlVHJlZVZpc2l0b3IoKSB7XG5cdHJldHVybiB0aGlzO1xufVxuXG5QYXJzZVRyZWVWaXNpdG9yLnByb3RvdHlwZS52aXNpdCA9IGZ1bmN0aW9uKGN0eCkge1xuIFx0aWYgKEFycmF5LmlzQXJyYXkoY3R4KSkge1xuXHRcdHJldHVybiBjdHgubWFwKGZ1bmN0aW9uKGNoaWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGQuYWNjZXB0KHRoaXMpO1xuICAgICAgICB9LCB0aGlzKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gY3R4LmFjY2VwdCh0aGlzKTtcblx0fVxufTtcblxuUGFyc2VUcmVlVmlzaXRvci5wcm90b3R5cGUudmlzaXRDaGlsZHJlbiA9IGZ1bmN0aW9uKGN0eCkge1xuXHRpZiAoY3R4LmNoaWxkcmVuKSB7XG5cdFx0cmV0dXJuIHRoaXMudmlzaXQoY3R4LmNoaWxkcmVuKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxufVxuXG5QYXJzZVRyZWVWaXNpdG9yLnByb3RvdHlwZS52aXNpdFRlcm1pbmFsID0gZnVuY3Rpb24obm9kZSkge1xufTtcblxuUGFyc2VUcmVlVmlzaXRvci5wcm90b3R5cGUudmlzaXRFcnJvck5vZGUgPSBmdW5jdGlvbihub2RlKSB7XG59O1xuXG5cbmZ1bmN0aW9uIFBhcnNlVHJlZUxpc3RlbmVyKCkge1xuXHRyZXR1cm4gdGhpcztcbn1cblxuUGFyc2VUcmVlTGlzdGVuZXIucHJvdG90eXBlLnZpc2l0VGVybWluYWwgPSBmdW5jdGlvbihub2RlKSB7XG59O1xuXG5QYXJzZVRyZWVMaXN0ZW5lci5wcm90b3R5cGUudmlzaXRFcnJvck5vZGUgPSBmdW5jdGlvbihub2RlKSB7XG59O1xuXG5QYXJzZVRyZWVMaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJFdmVyeVJ1bGUgPSBmdW5jdGlvbihub2RlKSB7XG59O1xuXG5QYXJzZVRyZWVMaXN0ZW5lci5wcm90b3R5cGUuZXhpdEV2ZXJ5UnVsZSA9IGZ1bmN0aW9uKG5vZGUpIHtcbn07XG5cbmZ1bmN0aW9uIFRlcm1pbmFsTm9kZUltcGwoc3ltYm9sKSB7XG5cdFRlcm1pbmFsTm9kZS5jYWxsKHRoaXMpO1xuXHR0aGlzLnBhcmVudEN0eCA9IG51bGw7XG5cdHRoaXMuc3ltYm9sID0gc3ltYm9sO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuVGVybWluYWxOb2RlSW1wbC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRlcm1pbmFsTm9kZS5wcm90b3R5cGUpO1xuVGVybWluYWxOb2RlSW1wbC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXJtaW5hbE5vZGVJbXBsO1xuXG5UZXJtaW5hbE5vZGVJbXBsLnByb3RvdHlwZS5nZXRDaGlsZCA9IGZ1bmN0aW9uKGkpIHtcblx0cmV0dXJuIG51bGw7XG59O1xuXG5UZXJtaW5hbE5vZGVJbXBsLnByb3RvdHlwZS5nZXRTeW1ib2wgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuc3ltYm9sO1xufTtcblxuVGVybWluYWxOb2RlSW1wbC5wcm90b3R5cGUuZ2V0UGFyZW50ID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLnBhcmVudEN0eDtcbn07XG5cblRlcm1pbmFsTm9kZUltcGwucHJvdG90eXBlLmdldFBheWxvYWQgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuc3ltYm9sO1xufTtcblxuVGVybWluYWxOb2RlSW1wbC5wcm90b3R5cGUuZ2V0U291cmNlSW50ZXJ2YWwgPSBmdW5jdGlvbigpIHtcblx0aWYgKHRoaXMuc3ltYm9sID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIElOVkFMSURfSU5URVJWQUw7XG5cdH1cblx0dmFyIHRva2VuSW5kZXggPSB0aGlzLnN5bWJvbC50b2tlbkluZGV4O1xuXHRyZXR1cm4gbmV3IEludGVydmFsKHRva2VuSW5kZXgsIHRva2VuSW5kZXgpO1xufTtcblxuVGVybWluYWxOb2RlSW1wbC5wcm90b3R5cGUuZ2V0Q2hpbGRDb3VudCA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gMDtcbn07XG5cblRlcm1pbmFsTm9kZUltcGwucHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uKHZpc2l0b3IpIHtcblx0cmV0dXJuIHZpc2l0b3IudmlzaXRUZXJtaW5hbCh0aGlzKTtcbn07XG5cblRlcm1pbmFsTm9kZUltcGwucHJvdG90eXBlLmdldFRleHQgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuc3ltYm9sLnRleHQ7XG59O1xuXG5UZXJtaW5hbE5vZGVJbXBsLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRpZiAodGhpcy5zeW1ib2wudHlwZSA9PT0gVG9rZW4uRU9GKSB7XG5cdFx0cmV0dXJuIFwiPEVPRj5cIjtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdGhpcy5zeW1ib2wudGV4dDtcblx0fVxufTtcblxuLy8gUmVwcmVzZW50cyBhIHRva2VuIHRoYXQgd2FzIGNvbnN1bWVkIGR1cmluZyByZXN5bmNocm9uaXphdGlvblxuLy8gcmF0aGVyIHRoYW4gZHVyaW5nIGEgdmFsaWQgbWF0Y2ggb3BlcmF0aW9uLiBGb3IgZXhhbXBsZSxcbi8vIHdlIHdpbGwgY3JlYXRlIHRoaXMga2luZCBvZiBhIG5vZGUgZHVyaW5nIHNpbmdsZSB0b2tlbiBpbnNlcnRpb25cbi8vIGFuZCBkZWxldGlvbiBhcyB3ZWxsIGFzIGR1cmluZyBcImNvbnN1bWUgdW50aWwgZXJyb3IgcmVjb3Zlcnkgc2V0XCJcbi8vIHVwb24gbm8gdmlhYmxlIGFsdGVybmF0aXZlIGV4Y2VwdGlvbnMuXG5cbmZ1bmN0aW9uIEVycm9yTm9kZUltcGwodG9rZW4pIHtcblx0VGVybWluYWxOb2RlSW1wbC5jYWxsKHRoaXMsIHRva2VuKTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkVycm9yTm9kZUltcGwucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXJtaW5hbE5vZGVJbXBsLnByb3RvdHlwZSk7XG5FcnJvck5vZGVJbXBsLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEVycm9yTm9kZUltcGw7XG5cbkVycm9yTm9kZUltcGwucHJvdG90eXBlLmlzRXJyb3JOb2RlID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0cnVlO1xufTtcblxuRXJyb3JOb2RlSW1wbC5wcm90b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24odmlzaXRvcikge1xuXHRyZXR1cm4gdmlzaXRvci52aXNpdEVycm9yTm9kZSh0aGlzKTtcbn07XG5cbmZ1bmN0aW9uIFBhcnNlVHJlZVdhbGtlcigpIHtcblx0cmV0dXJuIHRoaXM7XG59XG5cblBhcnNlVHJlZVdhbGtlci5wcm90b3R5cGUud2FsayA9IGZ1bmN0aW9uKGxpc3RlbmVyLCB0KSB7XG5cdHZhciBlcnJvck5vZGUgPSB0IGluc3RhbmNlb2YgRXJyb3JOb2RlIHx8XG5cdFx0XHQodC5pc0Vycm9yTm9kZSAhPT0gdW5kZWZpbmVkICYmIHQuaXNFcnJvck5vZGUoKSk7XG5cdGlmIChlcnJvck5vZGUpIHtcblx0XHRsaXN0ZW5lci52aXNpdEVycm9yTm9kZSh0KTtcblx0fSBlbHNlIGlmICh0IGluc3RhbmNlb2YgVGVybWluYWxOb2RlKSB7XG5cdFx0bGlzdGVuZXIudmlzaXRUZXJtaW5hbCh0KTtcblx0fSBlbHNlIHtcblx0XHR0aGlzLmVudGVyUnVsZShsaXN0ZW5lciwgdCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0LmdldENoaWxkQ291bnQoKTsgaSsrKSB7XG5cdFx0XHR2YXIgY2hpbGQgPSB0LmdldENoaWxkKGkpO1xuXHRcdFx0dGhpcy53YWxrKGxpc3RlbmVyLCBjaGlsZCk7XG5cdFx0fVxuXHRcdHRoaXMuZXhpdFJ1bGUobGlzdGVuZXIsIHQpO1xuXHR9XG59O1xuLy9cbi8vIFRoZSBkaXNjb3Zlcnkgb2YgYSBydWxlIG5vZGUsIGludm9sdmVzIHNlbmRpbmcgdHdvIGV2ZW50czogdGhlIGdlbmVyaWNcbi8vIHtAbGluayBQYXJzZVRyZWVMaXN0ZW5lci8vZW50ZXJFdmVyeVJ1bGV9IGFuZCBhXG4vLyB7QGxpbmsgUnVsZUNvbnRleHR9LXNwZWNpZmljIGV2ZW50LiBGaXJzdCB3ZSB0cmlnZ2VyIHRoZSBnZW5lcmljIGFuZCB0aGVuXG4vLyB0aGUgcnVsZSBzcGVjaWZpYy4gV2UgdG8gdGhlbSBpbiByZXZlcnNlIG9yZGVyIHVwb24gZmluaXNoaW5nIHRoZSBub2RlLlxuLy9cblBhcnNlVHJlZVdhbGtlci5wcm90b3R5cGUuZW50ZXJSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIsIHIpIHtcblx0dmFyIGN0eCA9IHIuZ2V0UnVsZUNvbnRleHQoKTtcblx0bGlzdGVuZXIuZW50ZXJFdmVyeVJ1bGUoY3R4KTtcblx0Y3R4LmVudGVyUnVsZShsaXN0ZW5lcik7XG59O1xuXG5QYXJzZVRyZWVXYWxrZXIucHJvdG90eXBlLmV4aXRSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIsIHIpIHtcblx0dmFyIGN0eCA9IHIuZ2V0UnVsZUNvbnRleHQoKTtcblx0Y3R4LmV4aXRSdWxlKGxpc3RlbmVyKTtcblx0bGlzdGVuZXIuZXhpdEV2ZXJ5UnVsZShjdHgpO1xufTtcblxuUGFyc2VUcmVlV2Fsa2VyLkRFRkFVTFQgPSBuZXcgUGFyc2VUcmVlV2Fsa2VyKCk7XG5cbmV4cG9ydHMuUnVsZU5vZGUgPSBSdWxlTm9kZTtcbmV4cG9ydHMuRXJyb3JOb2RlID0gRXJyb3JOb2RlO1xuZXhwb3J0cy5UZXJtaW5hbE5vZGUgPSBUZXJtaW5hbE5vZGU7XG5leHBvcnRzLkVycm9yTm9kZUltcGwgPSBFcnJvck5vZGVJbXBsO1xuZXhwb3J0cy5UZXJtaW5hbE5vZGVJbXBsID0gVGVybWluYWxOb2RlSW1wbDtcbmV4cG9ydHMuUGFyc2VUcmVlTGlzdGVuZXIgPSBQYXJzZVRyZWVMaXN0ZW5lcjtcbmV4cG9ydHMuUGFyc2VUcmVlVmlzaXRvciA9IFBhcnNlVHJlZVZpc2l0b3I7XG5leHBvcnRzLlBhcnNlVHJlZVdhbGtlciA9IFBhcnNlVHJlZVdhbGtlcjtcbmV4cG9ydHMuSU5WQUxJRF9JTlRFUlZBTCA9IElOVkFMSURfSU5URVJWQUw7XG4iLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG5cbnZhciBVdGlscyA9IHJlcXVpcmUoJy4vLi4vVXRpbHMnKTtcbnZhciBUb2tlbiA9IHJlcXVpcmUoJy4vLi4vVG9rZW4nKS5Ub2tlbjtcbnZhciBSdWxlTm9kZSA9IHJlcXVpcmUoJy4vVHJlZScpLlJ1bGVOb2RlO1xudmFyIEVycm9yTm9kZSA9IHJlcXVpcmUoJy4vVHJlZScpLkVycm9yTm9kZTtcbnZhciBUZXJtaW5hbE5vZGUgPSByZXF1aXJlKCcuL1RyZWUnKS5UZXJtaW5hbE5vZGU7XG52YXIgUGFyc2VyUnVsZUNvbnRleHQgPSByZXF1aXJlKCcuLy4uL1BhcnNlclJ1bGVDb250ZXh0JykuUGFyc2VyUnVsZUNvbnRleHQ7XG52YXIgUnVsZUNvbnRleHQgPSByZXF1aXJlKCcuLy4uL1J1bGVDb250ZXh0JykuUnVsZUNvbnRleHQ7XG52YXIgSU5WQUxJRF9BTFRfTlVNQkVSID0gcmVxdWlyZSgnLi8uLi9hdG4vQVROJykuSU5WQUxJRF9BTFRfTlVNQkVSO1xuXG5cbi8qKiBBIHNldCBvZiB1dGlsaXR5IHJvdXRpbmVzIHVzZWZ1bCBmb3IgYWxsIGtpbmRzIG9mIEFOVExSIHRyZWVzLiAqL1xuZnVuY3Rpb24gVHJlZXMoKSB7XG59XG5cbi8vIFByaW50IG91dCBhIHdob2xlIHRyZWUgaW4gTElTUCBmb3JtLiB7QGxpbmsgLy9nZXROb2RlVGV4dH0gaXMgdXNlZCBvbiB0aGVcbi8vICBub2RlIHBheWxvYWRzIHRvIGdldCB0aGUgdGV4dCBmb3IgdGhlIG5vZGVzLiAgRGV0ZWN0XG4vLyAgcGFyc2UgdHJlZXMgYW5kIGV4dHJhY3QgZGF0YSBhcHByb3ByaWF0ZWx5LlxuVHJlZXMudG9TdHJpbmdUcmVlID0gZnVuY3Rpb24odHJlZSwgcnVsZU5hbWVzLCByZWNvZykge1xuXHRydWxlTmFtZXMgPSBydWxlTmFtZXMgfHwgbnVsbDtcblx0cmVjb2cgPSByZWNvZyB8fCBudWxsO1xuICAgIGlmKHJlY29nIT09bnVsbCkge1xuICAgICAgIHJ1bGVOYW1lcyA9IHJlY29nLnJ1bGVOYW1lcztcbiAgICB9XG4gICAgdmFyIHMgPSBUcmVlcy5nZXROb2RlVGV4dCh0cmVlLCBydWxlTmFtZXMpO1xuICAgIHMgPSBVdGlscy5lc2NhcGVXaGl0ZXNwYWNlKHMsIGZhbHNlKTtcbiAgICB2YXIgYyA9IHRyZWUuZ2V0Q2hpbGRDb3VudCgpO1xuICAgIGlmKGM9PT0wKSB7XG4gICAgICAgIHJldHVybiBzO1xuICAgIH1cbiAgICB2YXIgcmVzID0gXCIoXCIgKyBzICsgJyAnO1xuICAgIGlmKGM+MCkge1xuICAgICAgICBzID0gVHJlZXMudG9TdHJpbmdUcmVlKHRyZWUuZ2V0Q2hpbGQoMCksIHJ1bGVOYW1lcyk7XG4gICAgICAgIHJlcyA9IHJlcy5jb25jYXQocyk7XG4gICAgfVxuICAgIGZvcih2YXIgaT0xO2k8YztpKyspIHtcbiAgICAgICAgcyA9IFRyZWVzLnRvU3RyaW5nVHJlZSh0cmVlLmdldENoaWxkKGkpLCBydWxlTmFtZXMpO1xuICAgICAgICByZXMgPSByZXMuY29uY2F0KCcgJyArIHMpO1xuICAgIH1cbiAgICByZXMgPSByZXMuY29uY2F0KFwiKVwiKTtcbiAgICByZXR1cm4gcmVzO1xufTtcblxuVHJlZXMuZ2V0Tm9kZVRleHQgPSBmdW5jdGlvbih0LCBydWxlTmFtZXMsIHJlY29nKSB7XG5cdHJ1bGVOYW1lcyA9IHJ1bGVOYW1lcyB8fCBudWxsO1xuXHRyZWNvZyA9IHJlY29nIHx8IG51bGw7XG4gICAgaWYocmVjb2chPT1udWxsKSB7XG4gICAgICAgIHJ1bGVOYW1lcyA9IHJlY29nLnJ1bGVOYW1lcztcbiAgICB9XG4gICAgaWYocnVsZU5hbWVzIT09bnVsbCkge1xuICAgICAgIGlmICh0IGluc3RhbmNlb2YgUnVsZUNvbnRleHQpIHtcbiAgICAgICAgICAgdmFyIGFsdE51bWJlciA9IHQuZ2V0QWx0TnVtYmVyKCk7XG4gICAgICAgICAgIGlmICggYWx0TnVtYmVyIT1JTlZBTElEX0FMVF9OVU1CRVIgKSB7XG4gICAgICAgICAgICAgICByZXR1cm4gcnVsZU5hbWVzW3QucnVsZUluZGV4XStcIjpcIithbHROdW1iZXI7XG4gICAgICAgICAgIH1cbiAgICAgICAgICAgcmV0dXJuIHJ1bGVOYW1lc1t0LnJ1bGVJbmRleF07XG4gICAgICAgfSBlbHNlIGlmICggdCBpbnN0YW5jZW9mIEVycm9yTm9kZSkge1xuICAgICAgICAgICByZXR1cm4gdC50b1N0cmluZygpO1xuICAgICAgIH0gZWxzZSBpZih0IGluc3RhbmNlb2YgVGVybWluYWxOb2RlKSB7XG4gICAgICAgICAgIGlmKHQuc3ltYm9sIT09bnVsbCkge1xuICAgICAgICAgICAgICAgcmV0dXJuIHQuc3ltYm9sLnRleHQ7XG4gICAgICAgICAgIH1cbiAgICAgICB9XG4gICAgfVxuICAgIC8vIG5vIHJlY29nIGZvciBydWxlIG5hbWVzXG4gICAgdmFyIHBheWxvYWQgPSB0LmdldFBheWxvYWQoKTtcbiAgICBpZiAocGF5bG9hZCBpbnN0YW5jZW9mIFRva2VuICkge1xuICAgICAgIHJldHVybiBwYXlsb2FkLnRleHQ7XG4gICAgfVxuICAgIHJldHVybiB0LmdldFBheWxvYWQoKS50b1N0cmluZygpO1xufTtcblxuXG4vLyBSZXR1cm4gb3JkZXJlZCBsaXN0IG9mIGFsbCBjaGlsZHJlbiBvZiB0aGlzIG5vZGVcblRyZWVzLmdldENoaWxkcmVuID0gZnVuY3Rpb24odCkge1xuXHR2YXIgbGlzdCA9IFtdO1xuXHRmb3IodmFyIGk9MDtpPHQuZ2V0Q2hpbGRDb3VudCgpO2krKykge1xuXHRcdGxpc3QucHVzaCh0LmdldENoaWxkKGkpKTtcblx0fVxuXHRyZXR1cm4gbGlzdDtcbn07XG5cbi8vIFJldHVybiBhIGxpc3Qgb2YgYWxsIGFuY2VzdG9ycyBvZiB0aGlzIG5vZGUuICBUaGUgZmlyc3Qgbm9kZSBvZlxuLy8gIGxpc3QgaXMgdGhlIHJvb3QgYW5kIHRoZSBsYXN0IGlzIHRoZSBwYXJlbnQgb2YgdGhpcyBub2RlLlxuLy9cblRyZWVzLmdldEFuY2VzdG9ycyA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgYW5jZXN0b3JzID0gW107XG4gICAgdCA9IHQuZ2V0UGFyZW50KCk7XG4gICAgd2hpbGUodCE9PW51bGwpIHtcbiAgICAgICAgYW5jZXN0b3JzID0gW3RdLmNvbmNhdChhbmNlc3RvcnMpO1xuICAgICAgICB0ID0gdC5nZXRQYXJlbnQoKTtcbiAgICB9XG4gICAgcmV0dXJuIGFuY2VzdG9ycztcbn07XG5cblRyZWVzLmZpbmRBbGxUb2tlbk5vZGVzID0gZnVuY3Rpb24odCwgdHR5cGUpIHtcbiAgICByZXR1cm4gVHJlZXMuZmluZEFsbE5vZGVzKHQsIHR0eXBlLCB0cnVlKTtcbn07XG5cblRyZWVzLmZpbmRBbGxSdWxlTm9kZXMgPSBmdW5jdGlvbih0LCBydWxlSW5kZXgpIHtcblx0cmV0dXJuIFRyZWVzLmZpbmRBbGxOb2Rlcyh0LCBydWxlSW5kZXgsIGZhbHNlKTtcbn07XG5cblRyZWVzLmZpbmRBbGxOb2RlcyA9IGZ1bmN0aW9uKHQsIGluZGV4LCBmaW5kVG9rZW5zKSB7XG5cdHZhciBub2RlcyA9IFtdO1xuXHRUcmVlcy5fZmluZEFsbE5vZGVzKHQsIGluZGV4LCBmaW5kVG9rZW5zLCBub2Rlcyk7XG5cdHJldHVybiBub2Rlcztcbn07XG5cblRyZWVzLl9maW5kQWxsTm9kZXMgPSBmdW5jdGlvbih0LCBpbmRleCwgZmluZFRva2Vucywgbm9kZXMpIHtcblx0Ly8gY2hlY2sgdGhpcyBub2RlICh0aGUgcm9vdCkgZmlyc3Rcblx0aWYoZmluZFRva2VucyAmJiAodCBpbnN0YW5jZW9mIFRlcm1pbmFsTm9kZSkpIHtcblx0XHRpZih0LnN5bWJvbC50eXBlPT09aW5kZXgpIHtcblx0XHRcdG5vZGVzLnB1c2godCk7XG5cdFx0fVxuXHR9IGVsc2UgaWYoIWZpbmRUb2tlbnMgJiYgKHQgaW5zdGFuY2VvZiBQYXJzZXJSdWxlQ29udGV4dCkpIHtcblx0XHRpZih0LnJ1bGVJbmRleD09PWluZGV4KSB7XG5cdFx0XHRub2Rlcy5wdXNoKHQpO1xuXHRcdH1cblx0fVxuXHQvLyBjaGVjayBjaGlsZHJlblxuXHRmb3IodmFyIGk9MDtpPHQuZ2V0Q2hpbGRDb3VudCgpO2krKykge1xuXHRcdFRyZWVzLl9maW5kQWxsTm9kZXModC5nZXRDaGlsZChpKSwgaW5kZXgsIGZpbmRUb2tlbnMsIG5vZGVzKTtcblx0fVxufTtcblxuVHJlZXMuZGVzY2VuZGFudHMgPSBmdW5jdGlvbih0KSB7XG5cdHZhciBub2RlcyA9IFt0XTtcbiAgICBmb3IodmFyIGk9MDtpPHQuZ2V0Q2hpbGRDb3VudCgpO2krKykge1xuICAgICAgICBub2RlcyA9IG5vZGVzLmNvbmNhdChUcmVlcy5kZXNjZW5kYW50cyh0LmdldENoaWxkKGkpKSk7XG4gICAgfVxuICAgIHJldHVybiBub2Rlcztcbn07XG5cblxuZXhwb3J0cy5UcmVlcyA9IFRyZWVzOyIsIi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cblxudmFyIFRyZWUgPSByZXF1aXJlKCcuL1RyZWUnKTtcbmV4cG9ydHMuVHJlZXMgPSByZXF1aXJlKCcuL1RyZWVzJykuVHJlZXM7XG5leHBvcnRzLlJ1bGVOb2RlID0gVHJlZS5SdWxlTm9kZTtcbmV4cG9ydHMuUGFyc2VUcmVlTGlzdGVuZXIgPSBUcmVlLlBhcnNlVHJlZUxpc3RlbmVyO1xuZXhwb3J0cy5QYXJzZVRyZWVWaXNpdG9yID0gVHJlZS5QYXJzZVRyZWVWaXNpdG9yO1xuZXhwb3J0cy5QYXJzZVRyZWVXYWxrZXIgPSBUcmVlLlBhcnNlVHJlZVdhbGtlcjtcbiIsIiIsIi8qKlxuICogQGxpY2Vuc2UgQ29tcGxleC5qcyB2Mi4wLjExIDExLzAyLzIwMTZcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYsIFJvYmVydCBFaXNlbGUgKHJvYmVydEB4YXJnLm9yZylcbiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBvciBHUEwgVmVyc2lvbiAyIGxpY2Vuc2VzLlxuICoqL1xuXG4vKipcbiAqXG4gKiBUaGlzIGNsYXNzIGFsbG93cyB0aGUgbWFuaXB1bGF0aW9uIG9mIGNvbXBsZXggbnVtYmVycy5cbiAqIFlvdSBjYW4gcGFzcyBhIGNvbXBsZXggbnVtYmVyIGluIGRpZmZlcmVudCBmb3JtYXRzLiBFaXRoZXIgYXMgb2JqZWN0LCBkb3VibGUsIHN0cmluZyBvciB0d28gaW50ZWdlciBwYXJhbWV0ZXJzLlxuICpcbiAqIE9iamVjdCBmb3JtXG4gKiB7IHJlOiA8cmVhbD4sIGltOiA8aW1hZ2luYXJ5PiB9XG4gKiB7IGFyZzogPGFuZ2xlPiwgYWJzOiA8cmFkaXVzPiB9XG4gKiB7IHBoaTogPGFuZ2xlPiwgcjogPHJhZGl1cz4gfVxuICpcbiAqIEFycmF5IC8gVmVjdG9yIGZvcm1cbiAqIFsgcmVhbCwgaW1hZ2luYXJ5IF1cbiAqXG4gKiBEb3VibGUgZm9ybVxuICogOTkuMyAtIFNpbmdsZSBkb3VibGUgdmFsdWVcbiAqXG4gKiBTdHJpbmcgZm9ybVxuICogJzIzLjEzMzcnIC0gU2ltcGxlIHJlYWwgbnVtYmVyXG4gKiAnMTUrM2knIC0gYSBzaW1wbGUgY29tcGxleCBudW1iZXJcbiAqICczLWknIC0gYSBzaW1wbGUgY29tcGxleCBudW1iZXJcbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIHZhciBjID0gbmV3IENvbXBsZXgoJzk5LjMrOGknKTtcbiAqIGMubXVsKHtyOiAzLCBpOiA5fSkuZGl2KDQuOSkuc3ViKDMsIDIpO1xuICpcbiAqL1xuXG4oZnVuY3Rpb24ocm9vdCkge1xuXG4gICd1c2Ugc3RyaWN0JztcblxuICB2YXIgY29zaCA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gKE1hdGguZXhwKHgpICsgTWF0aC5leHAoLXgpKSAqIDAuNTtcbiAgfTtcblxuICB2YXIgc2luaCA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gKE1hdGguZXhwKHgpIC0gTWF0aC5leHAoLXgpKSAqIDAuNTtcbiAgfTtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyBjb3MoeCkgLSAxIHVzaW5nIFRheWxvciBzZXJpZXMgaWYgeCBpcyBzbWFsbC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHhcbiAgICogQHJldHVybnMge251bWJlcn0gY29zKHgpIC0gMVxuICAgKi9cblxuICB2YXIgY29zbTEgPSBmdW5jdGlvbih4KSB7XG4gICAgdmFyIGxpbWl0ID0gTWF0aC5QSS80O1xuICAgIGlmICh4IDwgLWxpbWl0IHx8IHggPiBsaW1pdCkge1xuICAgICAgcmV0dXJuIChNYXRoLmNvcyh4KSAtIDEuMCk7XG4gICAgfVxuXG4gICAgdmFyIHh4ID0geCAqIHg7XG4gICAgcmV0dXJuIHh4ICpcbiAgICAgICgtMC41ICsgeHggKlxuICAgICAgICAoMS8yNCArIHh4ICpcbiAgICAgICAgICAoLTEvNzIwICsgeHggKlxuICAgICAgICAgICAgKDEvNDAzMjAgKyB4eCAqXG4gICAgICAgICAgICAgICgtMS8zNjI4ODAwICsgeHggKlxuICAgICAgICAgICAgICAgICgxLzQ3OTAwMTQ2MDAgKyB4eCAqXG4gICAgICAgICAgICAgICAgICAoLTEvODcxNzgyOTEyMDAgKyB4eCAqXG4gICAgICAgICAgICAgICAgICAgICgxLzIwOTIyNzg5ODg4MDAwKVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICB9O1xuXG4gIHZhciBoeXBvdCA9IGZ1bmN0aW9uKHgsIHkpIHtcblxuICAgIHZhciBhID0gTWF0aC5hYnMoeCk7XG4gICAgdmFyIGIgPSBNYXRoLmFicyh5KTtcblxuICAgIGlmIChhIDwgMzAwMCAmJiBiIDwgMzAwMCkge1xuICAgICAgcmV0dXJuIE1hdGguc3FydChhICogYSArIGIgKiBiKTtcbiAgICB9XG5cbiAgICBpZiAoYSA8IGIpIHtcbiAgICAgIGEgPSBiO1xuICAgICAgYiA9IHggLyB5O1xuICAgIH0gZWxzZSB7XG4gICAgICBiID0geSAvIHg7XG4gICAgfVxuICAgIHJldHVybiBhICogTWF0aC5zcXJ0KDEgKyBiICogYik7XG4gIH07XG5cbiAgdmFyIHBhcnNlcl9leGl0ID0gZnVuY3Rpb24oKSB7XG4gICAgdGhyb3cgU3ludGF4RXJyb3IoJ0ludmFsaWQgUGFyYW0nKTtcbiAgfTtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyBsb2coc3FydChhXjIrYl4yKSkgaW4gYSB3YXkgdG8gYXZvaWQgb3ZlcmZsb3dzXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBiXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBmdW5jdGlvbiBsb2dIeXBvdChhLCBiKSB7XG5cbiAgICB2YXIgX2EgPSBNYXRoLmFicyhhKTtcbiAgICB2YXIgX2IgPSBNYXRoLmFicyhiKTtcblxuICAgIGlmIChhID09PSAwKSB7XG4gICAgICByZXR1cm4gTWF0aC5sb2coX2IpO1xuICAgIH1cblxuICAgIGlmIChiID09PSAwKSB7XG4gICAgICByZXR1cm4gTWF0aC5sb2coX2EpO1xuICAgIH1cblxuICAgIGlmIChfYSA8IDMwMDAgJiYgX2IgPCAzMDAwKSB7XG4gICAgICByZXR1cm4gTWF0aC5sb2coYSAqIGEgKyBiICogYikgKiAwLjU7XG4gICAgfVxuXG4gICAgLyogSSBnb3QgNCBpZGVhcyB0byBjb21wdXRlIHRoaXMgcHJvcGVydHkgd2l0aG91dCBvdmVyZmxvdzpcbiAgICAgKlxuICAgICAqIFRlc3RpbmcgMTAwMDAwMCB0aW1lcyB3aXRoIHJhbmRvbSBzYW1wbGVzIGZvciBhLGIg4oiIIFsxLCAxMDAwMDAwMDAwXSBhZ2FpbnN0IGEgYmlnIGRlY2ltYWwgbGlicmFyeSB0byBnZXQgYW4gZXJyb3IgZXN0aW1hdGVcbiAgICAgKlxuICAgICAqIDEuIE9ubHkgZWxpbWluYXRlIHRoZSBzcXVhcmUgcm9vdDogKE9WRVJBTEwgRVJST1I6IDMuOTEyMjQ4MzAzMDk1MTExNmUtMTEpXG5cbiAgICAgTWF0aC5sb2coYSAqIGEgKyBiICogYikgLyAyXG5cbiAgICAgKlxuICAgICAqXG4gICAgICogMi4gVHJ5IHRvIHVzZSB0aGUgbm9uLW92ZXJmbG93aW5nIHB5dGhhZ29yYXM6IChPVkVSQUxMIEVSUk9SOiA4Ljg4OTc2MDAzOTIxMDE1OWUtMTApXG5cbiAgICAgdmFyIGZuID0gZnVuY3Rpb24oYSwgYikge1xuICAgICBhID0gTWF0aC5hYnMoYSk7XG4gICAgIGIgPSBNYXRoLmFicyhiKTtcbiAgICAgdmFyIHQgPSBNYXRoLm1pbihhLCBiKTtcbiAgICAgYSA9IE1hdGgubWF4KGEsIGIpO1xuICAgICB0ID0gdCAvIGE7XG5cbiAgICAgcmV0dXJuIE1hdGgubG9nKGEpICsgTWF0aC5sb2coMSArIHQgKiB0KSAvIDI7XG4gICAgIH07XG5cbiAgICAgKiAzLiBBYnVzZSB0aGUgaWRlbnRpdHkgY29zKGF0YW4oeS94KSA9IHggLyBzcXJ0KHheMit5XjIpOiAoT1ZFUkFMTCBFUlJPUjogMy40NzgwMTc4NzM3MDM3MjA0ZS0xMClcblxuICAgICBNYXRoLmxvZyhhIC8gTWF0aC5jb3MoTWF0aC5hdGFuMihiLCBhKSkpXG5cbiAgICAgKiA0LiBVc2UgMy4gYW5kIGFwcGx5IGxvZyBydWxlczogKE9WRVJBTEwgRVJST1I6IDEuMjAxNDA4NzUwMjYyMDg5NmUtOSlcblxuICAgICBNYXRoLmxvZyhhKSAtIE1hdGgubG9nKE1hdGguY29zKE1hdGguYXRhbjIoYiwgYSkpKVxuXG4gICAgICovXG5cbiAgICByZXR1cm4gTWF0aC5sb2coYSAvIE1hdGguY29zKE1hdGguYXRhbjIoYiwgYSkpKTtcbiAgfVxuXG4gIHZhciBwYXJzZSA9IGZ1bmN0aW9uKGEsIGIpIHtcblxuICAgIHZhciB6ID0geydyZSc6IDAsICdpbSc6IDB9O1xuXG4gICAgaWYgKGEgPT09IHVuZGVmaW5lZCB8fCBhID09PSBudWxsKSB7XG4gICAgICB6WydyZSddID1cbiAgICAgICAgICAgICAgelsnaW0nXSA9IDA7XG4gICAgfSBlbHNlIGlmIChiICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHpbJ3JlJ10gPSBhO1xuICAgICAgelsnaW0nXSA9IGI7XG4gICAgfSBlbHNlXG4gICAgICBzd2l0Y2ggKHR5cGVvZiBhKSB7XG5cbiAgICAgICAgY2FzZSAnb2JqZWN0JzpcblxuICAgICAgICAgIGlmICgnaW0nIGluIGEgJiYgJ3JlJyBpbiBhKSB7XG4gICAgICAgICAgICB6WydyZSddID0gYVsncmUnXTtcbiAgICAgICAgICAgIHpbJ2ltJ10gPSBhWydpbSddO1xuICAgICAgICAgIH0gZWxzZSBpZiAoJ2FicycgaW4gYSAmJiAnYXJnJyBpbiBhKSB7XG4gICAgICAgICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShhWydhYnMnXSkgJiYgTnVtYmVyLmlzRmluaXRlKGFbJ2FyZyddKSkge1xuICAgICAgICAgICAgICByZXR1cm4gQ29tcGxleFsnSU5GSU5JVFknXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHpbJ3JlJ10gPSBhWydhYnMnXSAqIE1hdGguY29zKGFbJ2FyZyddKTtcbiAgICAgICAgICAgIHpbJ2ltJ10gPSBhWydhYnMnXSAqIE1hdGguc2luKGFbJ2FyZyddKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCdyJyBpbiBhICYmICdwaGknIGluIGEpIHtcbiAgICAgICAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKGFbJ3InXSkgJiYgTnVtYmVyLmlzRmluaXRlKGFbJ3BoaSddKSkge1xuICAgICAgICAgICAgICByZXR1cm4gQ29tcGxleFsnSU5GSU5JVFknXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHpbJ3JlJ10gPSBhWydyJ10gKiBNYXRoLmNvcyhhWydwaGknXSk7XG4gICAgICAgICAgICB6WydpbSddID0gYVsnciddICogTWF0aC5zaW4oYVsncGhpJ10pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYS5sZW5ndGggPT09IDIpIHsgLy8gUXVpY2sgYXJyYXkgY2hlY2tcbiAgICAgICAgICAgIHpbJ3JlJ10gPSBhWzBdO1xuICAgICAgICAgICAgelsnaW0nXSA9IGFbMV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcnNlcl9leGl0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3N0cmluZyc6XG5cbiAgICAgICAgICB6WydpbSddID0gLyogdm9pZCAqL1xuICAgICAgICAgICAgICAgICAgelsncmUnXSA9IDA7XG5cbiAgICAgICAgICB2YXIgdG9rZW5zID0gYS5tYXRjaCgvXFxkK1xcLj9cXGQqZVsrLV0/XFxkK3xcXGQrXFwuP1xcZCp8XFwuXFxkK3wuL2cpO1xuICAgICAgICAgIHZhciBwbHVzID0gMTtcbiAgICAgICAgICB2YXIgbWludXMgPSAwO1xuXG4gICAgICAgICAgaWYgKHRva2VucyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcGFyc2VyX2V4aXQoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuXG4gICAgICAgICAgICB2YXIgYyA9IHRva2Vuc1tpXTtcblxuICAgICAgICAgICAgaWYgKGMgPT09ICcgJyB8fCBjID09PSAnXFx0JyB8fCBjID09PSAnXFxuJykge1xuICAgICAgICAgICAgICAvKiB2b2lkICovXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09ICcrJykge1xuICAgICAgICAgICAgICBwbHVzKys7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09ICctJykge1xuICAgICAgICAgICAgICBtaW51cysrO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjID09PSAnaScgfHwgYyA9PT0gJ0knKSB7XG5cbiAgICAgICAgICAgICAgaWYgKHBsdXMgKyBtaW51cyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHBhcnNlcl9leGl0KCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodG9rZW5zW2kgKyAxXSAhPT0gJyAnICYmICFpc05hTih0b2tlbnNbaSArIDFdKSkge1xuICAgICAgICAgICAgICAgIHpbJ2ltJ10gKz0gcGFyc2VGbG9hdCgobWludXMgJSAyID8gJy0nIDogJycpICsgdG9rZW5zW2kgKyAxXSk7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHpbJ2ltJ10gKz0gcGFyc2VGbG9hdCgobWludXMgJSAyID8gJy0nIDogJycpICsgJzEnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBwbHVzID0gbWludXMgPSAwO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICAgIGlmIChwbHVzICsgbWludXMgPT09IDAgfHwgaXNOYU4oYykpIHtcbiAgICAgICAgICAgICAgICBwYXJzZXJfZXhpdCgpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHRva2Vuc1tpICsgMV0gPT09ICdpJyB8fCB0b2tlbnNbaSArIDFdID09PSAnSScpIHtcbiAgICAgICAgICAgICAgICB6WydpbSddICs9IHBhcnNlRmxvYXQoKG1pbnVzICUgMiA/ICctJyA6ICcnKSArIGMpO1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB6WydyZSddICs9IHBhcnNlRmxvYXQoKG1pbnVzICUgMiA/ICctJyA6ICcnKSArIGMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHBsdXMgPSBtaW51cyA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gU3RpbGwgc29tZXRoaW5nIG9uIHRoZSBzdGFja1xuICAgICAgICAgIGlmIChwbHVzICsgbWludXMgPiAwKSB7XG4gICAgICAgICAgICBwYXJzZXJfZXhpdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICAgIHpbJ2ltJ10gPSAwO1xuICAgICAgICAgIHpbJ3JlJ10gPSBhO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcGFyc2VyX2V4aXQoKTtcbiAgICAgIH1cblxuICAgIGlmIChpc05hTih6WydyZSddKSB8fCBpc05hTih6WydpbSddKSkge1xuICAgICAgLy8gSWYgYSBjYWxjdWxhdGlvbiBpcyBOYU4sIHdlIHRyZWF0IGl0IGFzIE5hTiBhbmQgZG9uJ3QgdGhyb3dcbiAgICAgIC8vcGFyc2VyX2V4aXQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gejtcbiAgfTtcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgKi9cbiAgZnVuY3Rpb24gQ29tcGxleChhLCBiKSB7XG5cbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQ29tcGxleCkpIHtcbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChhLCBiKTtcbiAgICB9XG5cbiAgICB2YXIgeiA9IHBhcnNlKGEsIGIpO1xuXG4gICAgdGhpc1sncmUnXSA9IHpbJ3JlJ107XG4gICAgdGhpc1snaW0nXSA9IHpbJ2ltJ107XG4gIH1cblxuICBDb21wbGV4LnByb3RvdHlwZSA9IHtcblxuICAgICdyZSc6IDAsXG4gICAgJ2ltJzogMCxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZXMgdGhlIHNpZ24gb2YgYSBjb21wbGV4IG51bWJlciwgd2hpY2ggaXMgYSBub3JtYWxpemVkIGNvbXBsZXhcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdzaWduJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIHZhciBhYnMgPSB0aGlzWydhYnMnXSgpO1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIHRoaXNbJ3JlJ10gLyBhYnMsXG4gICAgICAgICAgICAgIHRoaXNbJ2ltJ10gLyBhYnMpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBBZGRzIHR3byBjb21wbGV4IG51bWJlcnNcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdhZGQnOiBmdW5jdGlvbihhLCBiKSB7XG5cbiAgICAgIHZhciB6ID0gbmV3IENvbXBsZXgoYSwgYik7XG5cbiAgICAgIC8vIEluZmluaXR5ICsgSW5maW5pdHkgPSBOYU5cbiAgICAgIGlmICh0aGlzWydpc0luZmluaXRlJ10oKSAmJiB6Wydpc0luZmluaXRlJ10oKSkge1xuICAgICAgICByZXR1cm4gQ29tcGxleFsnTkFOJ107XG4gICAgICB9XG5cbiAgICAgIC8vIEluZmluaXR5ICsgeiA9IEluZmluaXR5IHsgd2hlcmUgeiAhPSBJbmZpbml0eSB9XG4gICAgICBpZiAodGhpc1snaXNJbmZpbml0ZSddKCkgfHwgelsnaXNJbmZpbml0ZSddKCkpIHtcbiAgICAgICAgcmV0dXJuIENvbXBsZXhbJ0lORklOSVRZJ107XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgdGhpc1sncmUnXSArIHpbJ3JlJ10sXG4gICAgICAgICAgICAgIHRoaXNbJ2ltJ10gKyB6WydpbSddKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU3VidHJhY3RzIHR3byBjb21wbGV4IG51bWJlcnNcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdzdWInOiBmdW5jdGlvbihhLCBiKSB7XG5cbiAgICAgIHZhciB6ID0gbmV3IENvbXBsZXgoYSwgYik7XG5cbiAgICAgIC8vIEluZmluaXR5IC0gSW5maW5pdHkgPSBOYU5cbiAgICAgIGlmICh0aGlzWydpc0luZmluaXRlJ10oKSAmJiB6Wydpc0luZmluaXRlJ10oKSkge1xuICAgICAgICByZXR1cm4gQ29tcGxleFsnTkFOJ107XG4gICAgICB9XG5cbiAgICAgIC8vIEluZmluaXR5IC0geiA9IEluZmluaXR5IHsgd2hlcmUgeiAhPSBJbmZpbml0eSB9XG4gICAgICBpZiAodGhpc1snaXNJbmZpbml0ZSddKCkgfHwgelsnaXNJbmZpbml0ZSddKCkpIHtcbiAgICAgICAgcmV0dXJuIENvbXBsZXhbJ0lORklOSVRZJ107XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgdGhpc1sncmUnXSAtIHpbJ3JlJ10sXG4gICAgICAgICAgICAgIHRoaXNbJ2ltJ10gLSB6WydpbSddKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTXVsdGlwbGllcyB0d28gY29tcGxleCBudW1iZXJzXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnbXVsJzogZnVuY3Rpb24oYSwgYikge1xuXG4gICAgICB2YXIgeiA9IG5ldyBDb21wbGV4KGEsIGIpO1xuXG4gICAgICAvLyBJbmZpbml0eSAqIDAgPSBOYU5cbiAgICAgIGlmICgodGhpc1snaXNJbmZpbml0ZSddKCkgJiYgelsnaXNaZXJvJ10oKSkgfHwgKHRoaXNbJ2lzWmVybyddKCkgJiYgelsnaXNJbmZpbml0ZSddKCkpKSB7XG4gICAgICAgIHJldHVybiBDb21wbGV4WydOQU4nXTtcbiAgICAgIH1cblxuICAgICAgLy8gSW5maW5pdHkgKiB6ID0gSW5maW5pdHkgeyB3aGVyZSB6ICE9IDAgfVxuICAgICAgaWYgKHRoaXNbJ2lzSW5maW5pdGUnXSgpIHx8IHpbJ2lzSW5maW5pdGUnXSgpKSB7XG4gICAgICAgIHJldHVybiBDb21wbGV4WydJTkZJTklUWSddO1xuICAgICAgfVxuXG4gICAgICAvLyBTaG9ydCBjaXJjdWl0IGZvciByZWFsIHZhbHVlc1xuICAgICAgaWYgKHpbJ2ltJ10gPT09IDAgJiYgdGhpc1snaW0nXSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgodGhpc1sncmUnXSAqIHpbJ3JlJ10sIDApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIHRoaXNbJ3JlJ10gKiB6WydyZSddIC0gdGhpc1snaW0nXSAqIHpbJ2ltJ10sXG4gICAgICAgICAgICAgIHRoaXNbJ3JlJ10gKiB6WydpbSddICsgdGhpc1snaW0nXSAqIHpbJ3JlJ10pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBEaXZpZGVzIHR3byBjb21wbGV4IG51bWJlcnNcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdkaXYnOiBmdW5jdGlvbihhLCBiKSB7XG5cbiAgICAgIHZhciB6ID0gbmV3IENvbXBsZXgoYSwgYik7XG5cbiAgICAgIC8vIDAgLyAwID0gTmFOIGFuZCBJbmZpbml0eSAvIEluZmluaXR5ID0gTmFOXG4gICAgICBpZiAoKHRoaXNbJ2lzWmVybyddKCkgJiYgelsnaXNaZXJvJ10oKSkgfHwgKHRoaXNbJ2lzSW5maW5pdGUnXSgpICYmIHpbJ2lzSW5maW5pdGUnXSgpKSkge1xuICAgICAgICByZXR1cm4gQ29tcGxleFsnTkFOJ107XG4gICAgICB9XG5cbiAgICAgIC8vIEluZmluaXR5IC8gMCA9IEluZmluaXR5XG4gICAgICBpZiAodGhpc1snaXNJbmZpbml0ZSddKCkgfHwgelsnaXNaZXJvJ10oKSkge1xuICAgICAgICByZXR1cm4gQ29tcGxleFsnSU5GSU5JVFknXTtcbiAgICAgIH1cblxuICAgICAgLy8gMCAvIEluZmluaXR5ID0gMFxuICAgICAgaWYgKHRoaXNbJ2lzWmVybyddKCkgfHwgelsnaXNJbmZpbml0ZSddKCkpIHtcbiAgICAgICAgcmV0dXJuIENvbXBsZXhbJ1pFUk8nXTtcbiAgICAgIH1cblxuICAgICAgYSA9IHRoaXNbJ3JlJ107XG4gICAgICBiID0gdGhpc1snaW0nXTtcblxuICAgICAgdmFyIGMgPSB6WydyZSddO1xuICAgICAgdmFyIGQgPSB6WydpbSddO1xuICAgICAgdmFyIHQsIHg7XG5cbiAgICAgIGlmICgwID09PSBkKSB7XG4gICAgICAgIC8vIERpdmlzb3IgaXMgcmVhbFxuICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoYSAvIGMsIGIgLyBjKTtcbiAgICAgIH1cblxuICAgICAgaWYgKE1hdGguYWJzKGMpIDwgTWF0aC5hYnMoZCkpIHtcblxuICAgICAgICB4ID0gYyAvIGQ7XG4gICAgICAgIHQgPSBjICogeCArIGQ7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICAgIChhICogeCArIGIpIC8gdCxcbiAgICAgICAgICAgICAgICAoYiAqIHggLSBhKSAvIHQpO1xuXG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIHggPSBkIC8gYztcbiAgICAgICAgdCA9IGQgKiB4ICsgYztcblxuICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgICAgKGEgKyBiICogeCkgLyB0LFxuICAgICAgICAgICAgICAgIChiIC0gYSAqIHgpIC8gdCk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgcG93ZXIgb2YgdHdvIGNvbXBsZXggbnVtYmVyc1xuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ3Bvdyc6IGZ1bmN0aW9uKGEsIGIpIHtcblxuICAgICAgdmFyIHogPSBuZXcgQ29tcGxleChhLCBiKTtcblxuICAgICAgYSA9IHRoaXNbJ3JlJ107XG4gICAgICBiID0gdGhpc1snaW0nXTtcblxuICAgICAgaWYgKHpbJ2lzWmVybyddKCkpIHtcbiAgICAgICAgcmV0dXJuIENvbXBsZXhbJ09ORSddO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGUgZXhwb25lbnQgaXMgcmVhbFxuICAgICAgaWYgKHpbJ2ltJ10gPT09IDApIHtcblxuICAgICAgICBpZiAoYiA9PT0gMCAmJiBhID49IDApIHtcblxuICAgICAgICAgIHJldHVybiBuZXcgQ29tcGxleChNYXRoLnBvdyhhLCB6WydyZSddKSwgMCk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChhID09PSAwKSB7IC8vIElmIGJhc2UgaXMgZnVsbHkgaW1hZ2luYXJ5XG5cbiAgICAgICAgICBzd2l0Y2ggKCh6WydyZSddICUgNCArIDQpICUgNCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoTWF0aC5wb3coYiwgelsncmUnXSksIDApO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoMCwgTWF0aC5wb3coYiwgelsncmUnXSkpO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoLU1hdGgucG93KGIsIHpbJ3JlJ10pLCAwKTtcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KDAsIC1NYXRoLnBvdyhiLCB6WydyZSddKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8qIEkgY291bGRuJ3QgZmluZCBhIGdvb2QgZm9ybXVsYSwgc28gaGVyZSBpcyBhIGRlcml2YXRpb24gYW5kIG9wdGltaXphdGlvblxuICAgICAgICpcbiAgICAgICAqIHpfMV56XzIgPSAoYSArIGJpKV4oYyArIGRpKVxuICAgICAgICogICAgICAgICA9IGV4cCgoYyArIGRpKSAqIGxvZyhhICsgYmkpXG4gICAgICAgKiAgICAgICAgID0gcG93KGFeMiArIGJeMiwgKGMgKyBkaSkgLyAyKSAqIGV4cChpKGMgKyBkaSlhdGFuMihiLCBhKSlcbiAgICAgICAqID0+Li4uXG4gICAgICAgKiBSZSA9IChwb3coYV4yICsgYl4yLCBjIC8gMikgKiBleHAoLWQgKiBhdGFuMihiLCBhKSkpICogY29zKGQgKiBsb2coYV4yICsgYl4yKSAvIDIgKyBjICogYXRhbjIoYiwgYSkpXG4gICAgICAgKiBJbSA9IChwb3coYV4yICsgYl4yLCBjIC8gMikgKiBleHAoLWQgKiBhdGFuMihiLCBhKSkpICogc2luKGQgKiBsb2coYV4yICsgYl4yKSAvIDIgKyBjICogYXRhbjIoYiwgYSkpXG4gICAgICAgKlxuICAgICAgICogPT4uLi5cbiAgICAgICAqIFJlID0gZXhwKGMgKiBsb2coc3FydChhXjIgKyBiXjIpKSAtIGQgKiBhdGFuMihiLCBhKSkgKiBjb3MoZCAqIGxvZyhzcXJ0KGFeMiArIGJeMikpICsgYyAqIGF0YW4yKGIsIGEpKVxuICAgICAgICogSW0gPSBleHAoYyAqIGxvZyhzcXJ0KGFeMiArIGJeMikpIC0gZCAqIGF0YW4yKGIsIGEpKSAqIHNpbihkICogbG9nKHNxcnQoYV4yICsgYl4yKSkgKyBjICogYXRhbjIoYiwgYSkpXG4gICAgICAgKlxuICAgICAgICogPT5cbiAgICAgICAqIFJlID0gZXhwKGMgKiBsb2dzcTIgLSBkICogYXJnKHpfMSkpICogY29zKGQgKiBsb2dzcTIgKyBjICogYXJnKHpfMSkpXG4gICAgICAgKiBJbSA9IGV4cChjICogbG9nc3EyIC0gZCAqIGFyZyh6XzEpKSAqIHNpbihkICogbG9nc3EyICsgYyAqIGFyZyh6XzEpKVxuICAgICAgICpcbiAgICAgICAqL1xuXG4gICAgICBpZiAoYSA9PT0gMCAmJiBiID09PSAwICYmIHpbJ3JlJ10gPiAwICYmIHpbJ2ltJ10gPj0gMCkge1xuICAgICAgICByZXR1cm4gQ29tcGxleFsnWkVSTyddO1xuICAgICAgfVxuXG4gICAgICB2YXIgYXJnID0gTWF0aC5hdGFuMihiLCBhKTtcbiAgICAgIHZhciBsb2ggPSBsb2dIeXBvdChhLCBiKTtcblxuICAgICAgYSA9IE1hdGguZXhwKHpbJ3JlJ10gKiBsb2ggLSB6WydpbSddICogYXJnKTtcbiAgICAgIGIgPSB6WydpbSddICogbG9oICsgelsncmUnXSAqIGFyZztcbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgYSAqIE1hdGguY29zKGIpLFxuICAgICAgICAgICAgICBhICogTWF0aC5zaW4oYikpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGNvbXBsZXggc3F1YXJlIHJvb3RcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdzcXJ0JzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIHZhciBhID0gdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gdGhpc1snaW0nXTtcbiAgICAgIHZhciByID0gdGhpc1snYWJzJ10oKTtcblxuICAgICAgdmFyIHJlLCBpbTtcblxuICAgICAgaWYgKGEgPj0gMCkge1xuXG4gICAgICAgIGlmIChiID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KE1hdGguc3FydChhKSwgMCk7XG4gICAgICAgIH1cblxuICAgICAgICByZSA9IDAuNSAqIE1hdGguc3FydCgyLjAgKiAociArIGEpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlID0gTWF0aC5hYnMoYikgLyBNYXRoLnNxcnQoMiAqIChyIC0gYSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoYSA8PSAwKSB7XG4gICAgICAgIGltID0gMC41ICogTWF0aC5zcXJ0KDIuMCAqIChyIC0gYSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW0gPSBNYXRoLmFicyhiKSAvIE1hdGguc3FydCgyICogKHIgKyBhKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChyZSwgYiA8IDAgPyAtaW0gOiBpbSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBleHBvbmVudFxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2V4cCc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICB2YXIgdG1wID0gTWF0aC5leHAodGhpc1sncmUnXSk7XG5cbiAgICAgIGlmICh0aGlzWydpbSddID09PSAwKSB7XG4gICAgICAgIC8vcmV0dXJuIG5ldyBDb21wbGV4KHRtcCwgMCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIHRtcCAqIE1hdGguY29zKHRoaXNbJ2ltJ10pLFxuICAgICAgICAgICAgICB0bXAgKiBNYXRoLnNpbih0aGlzWydpbSddKSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBleHBvbmVudCBhbmQgc3VidHJhY3RzIG9uZS5cbiAgICAgKlxuICAgICAqIFRoaXMgbWF5IGJlIG1vcmUgYWNjdXJhdGUgdGhhbiBgQ29tcGxleCh4KS5leHAoKS5zdWIoMSlgIGlmXG4gICAgICogYHhgIGlzIHNtYWxsLlxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2V4cG0xJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIC8qKlxuICAgICAgICogZXhwKGEgKyBpKmIpIC0gMVxuICAgICAgID0gZXhwKGEpICogKGNvcyhiKSArIGoqc2luKGIpKSAtIDFcbiAgICAgICA9IGV4cG0xKGEpKmNvcyhiKSArIGNvc20xKGIpICsgaipleHAoYSkqc2luKGIpXG4gICAgICAgKi9cblxuICAgICAgdmFyIGEgPSB0aGlzWydyZSddO1xuICAgICAgdmFyIGIgPSB0aGlzWydpbSddO1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIE1hdGguZXhwbTEoYSkgKiBNYXRoLmNvcyhiKSArIGNvc20xKGIpLFxuICAgICAgICAgICAgICBNYXRoLmV4cChhKSAqIE1hdGguc2luKGIpKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBuYXR1cmFsIGxvZ1xuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2xvZyc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107XG5cbiAgICAgIGlmIChiID09PSAwICYmIGEgPiAwKSB7XG4gICAgICAgIC8vcmV0dXJuIG5ldyBDb21wbGV4KE1hdGgubG9nKGEpLCAwKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICBsb2dIeXBvdChhLCBiKSxcbiAgICAgICAgICAgICAgTWF0aC5hdGFuMihiLCBhKSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgbWFnbml0dWRlIG9mIHRoZSBjb21wbGV4IG51bWJlclxuICAgICAqXG4gICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAgKi9cbiAgICAnYWJzJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIHJldHVybiBoeXBvdCh0aGlzWydyZSddLCB0aGlzWydpbSddKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBhbmdsZSBvZiB0aGUgY29tcGxleCBudW1iZXJcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAgICovXG4gICAgJ2FyZyc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICByZXR1cm4gTWF0aC5hdGFuMih0aGlzWydpbSddLCB0aGlzWydyZSddKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBzaW5lIG9mIHRoZSBjb21wbGV4IG51bWJlclxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ3Npbic6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBzaW4oYykgPSAoZV5iIC0gZV4oLWIpKSAvICgyaSlcblxuICAgICAgdmFyIGEgPSB0aGlzWydyZSddO1xuICAgICAgdmFyIGIgPSB0aGlzWydpbSddO1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIE1hdGguc2luKGEpICogY29zaChiKSxcbiAgICAgICAgICAgICAgTWF0aC5jb3MoYSkgKiBzaW5oKGIpKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb3NpbmVcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdjb3MnOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gY29zKHopID0gKGVeYiArIGVeKC1iKSkgLyAyXG5cbiAgICAgIHZhciBhID0gdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gdGhpc1snaW0nXTtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICBNYXRoLmNvcyhhKSAqIGNvc2goYiksXG4gICAgICAgICAgICAgIC1NYXRoLnNpbihhKSAqIHNpbmgoYikpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIHRhbmdlbnRcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICd0YW4nOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gdGFuKGMpID0gKGVeKGNpKSAtIGVeKC1jaSkpIC8gKGkoZV4oY2kpICsgZV4oLWNpKSkpXG5cbiAgICAgIHZhciBhID0gMiAqIHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IDIgKiB0aGlzWydpbSddO1xuICAgICAgdmFyIGQgPSBNYXRoLmNvcyhhKSArIGNvc2goYik7XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgTWF0aC5zaW4oYSkgLyBkLFxuICAgICAgICAgICAgICBzaW5oKGIpIC8gZCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY290YW5nZW50XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnY290JzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIC8vIGNvdChjKSA9IGkoZV4oY2kpICsgZV4oLWNpKSkgLyAoZV4oY2kpIC0gZV4oLWNpKSlcblxuICAgICAgdmFyIGEgPSAyICogdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gMiAqIHRoaXNbJ2ltJ107XG4gICAgICB2YXIgZCA9IE1hdGguY29zKGEpIC0gY29zaChiKTtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICAtTWF0aC5zaW4oYSkgLyBkLFxuICAgICAgICAgICAgICBzaW5oKGIpIC8gZCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgc2VjYW50XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnc2VjJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIC8vIHNlYyhjKSA9IDIgLyAoZV4oY2kpICsgZV4oLWNpKSlcblxuICAgICAgdmFyIGEgPSB0aGlzWydyZSddO1xuICAgICAgdmFyIGIgPSB0aGlzWydpbSddO1xuICAgICAgdmFyIGQgPSAwLjUgKiBjb3NoKDIgKiBiKSArIDAuNSAqIE1hdGguY29zKDIgKiBhKTtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICBNYXRoLmNvcyhhKSAqIGNvc2goYikgLyBkLFxuICAgICAgICAgICAgICBNYXRoLnNpbihhKSAqIHNpbmgoYikgLyBkKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb3NlY2Fuc1xuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2NzYyc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBjc2MoYykgPSAyaSAvIChlXihjaSkgLSBlXigtY2kpKVxuXG4gICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107XG4gICAgICB2YXIgZCA9IDAuNSAqIGNvc2goMiAqIGIpIC0gMC41ICogTWF0aC5jb3MoMiAqIGEpO1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIE1hdGguc2luKGEpICogY29zaChiKSAvIGQsXG4gICAgICAgICAgICAgIC1NYXRoLmNvcyhhKSAqIHNpbmgoYikgLyBkKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IGFyY3VzIHNpbnVzXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnYXNpbic6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBhc2luKGMpID0gLWkgKiBsb2coY2kgKyBzcXJ0KDEgLSBjXjIpKVxuXG4gICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107XG5cbiAgICAgIHZhciB0MSA9IG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICBiICogYiAtIGEgKiBhICsgMSxcbiAgICAgICAgICAgICAgLTIgKiBhICogYilbJ3NxcnQnXSgpO1xuXG4gICAgICB2YXIgdDIgPSBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgdDFbJ3JlJ10gLSBiLFxuICAgICAgICAgICAgICB0MVsnaW0nXSArIGEpWydsb2cnXSgpO1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgodDJbJ2ltJ10sIC10MlsncmUnXSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBhcmN1cyBjb3NpbnVzXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnYWNvcyc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBhY29zKGMpID0gaSAqIGxvZyhjIC0gaSAqIHNxcnQoMSAtIGNeMikpXG5cbiAgICAgIHZhciBhID0gdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gdGhpc1snaW0nXTtcblxuICAgICAgdmFyIHQxID0gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIGIgKiBiIC0gYSAqIGEgKyAxLFxuICAgICAgICAgICAgICAtMiAqIGEgKiBiKVsnc3FydCddKCk7XG5cbiAgICAgIHZhciB0MiA9IG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICB0MVsncmUnXSAtIGIsXG4gICAgICAgICAgICAgIHQxWydpbSddICsgYSlbJ2xvZyddKCk7XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChNYXRoLlBJIC8gMiAtIHQyWydpbSddLCB0MlsncmUnXSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBhcmN1cyB0YW5nZW50XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnYXRhbic6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBhdGFuKGMpID0gaSAvIDIgbG9nKChpICsgeCkgLyAoaSAtIHgpKVxuXG4gICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107XG5cbiAgICAgIGlmIChhID09PSAwKSB7XG5cbiAgICAgICAgaWYgKGIgPT09IDEpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoMCwgSW5maW5pdHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGIgPT09IC0xKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KDAsIC1JbmZpbml0eSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGQgPSBhICogYSArICgxLjAgLSBiKSAqICgxLjAgLSBiKTtcblxuICAgICAgdmFyIHQxID0gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgICgxIC0gYiAqIGIgLSBhICogYSkgLyBkLFxuICAgICAgICAgICAgICAtMiAqIGEgLyBkKS5sb2coKTtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KC0wLjUgKiB0MVsnaW0nXSwgMC41ICogdDFbJ3JlJ10pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGNvbXBsZXggYXJjdXMgY290YW5nZW50XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnYWNvdCc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBhY290KGMpID0gaSAvIDIgbG9nKChjIC0gaSkgLyAoYyArIGkpKVxuXG4gICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107XG5cbiAgICAgIGlmIChiID09PSAwKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29tcGxleChNYXRoLmF0YW4yKDEsIGEpLCAwKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGQgPSBhICogYSArIGIgKiBiO1xuICAgICAgcmV0dXJuIChkICE9PSAwKVxuICAgICAgICAgICAgICA/IG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICAgICAgICAgIGEgLyBkLFxuICAgICAgICAgICAgICAgICAgICAgIC1iIC8gZCkuYXRhbigpXG4gICAgICAgICAgICAgIDogbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgICAgICAgICAgKGEgIT09IDApID8gYSAvIDAgOiAwLFxuICAgICAgICAgICAgICAgICAgICAgIChiICE9PSAwKSA/IC1iIC8gMCA6IDApLmF0YW4oKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IGFyY3VzIHNlY2FudFxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2FzZWMnOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gYXNlYyhjKSA9IC1pICogbG9nKDEgLyBjICsgc3FydCgxIC0gaSAvIGNeMikpXG5cbiAgICAgIHZhciBhID0gdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gdGhpc1snaW0nXTtcblxuICAgICAgaWYgKGEgPT09IDAgJiYgYiA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoMCwgSW5maW5pdHkpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZCA9IGEgKiBhICsgYiAqIGI7XG4gICAgICByZXR1cm4gKGQgIT09IDApXG4gICAgICAgICAgICAgID8gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgICAgICAgICAgYSAvIGQsXG4gICAgICAgICAgICAgICAgICAgICAgLWIgLyBkKS5hY29zKClcbiAgICAgICAgICAgICAgOiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgICAgICAgICAoYSAhPT0gMCkgPyBhIC8gMCA6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgKGIgIT09IDApID8gLWIgLyAwIDogMCkuYWNvcygpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGNvbXBsZXggYXJjdXMgY29zZWNhbnNcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdhY3NjJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIC8vIGFjc2MoYykgPSAtaSAqIGxvZyhpIC8gYyArIHNxcnQoMSAtIDEgLyBjXjIpKVxuXG4gICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107XG5cbiAgICAgIGlmIChhID09PSAwICYmIGIgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KE1hdGguUEkgLyAyLCBJbmZpbml0eSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBkID0gYSAqIGEgKyBiICogYjtcbiAgICAgIHJldHVybiAoZCAhPT0gMClcbiAgICAgICAgICAgICAgPyBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgICAgICAgICBhIC8gZCxcbiAgICAgICAgICAgICAgICAgICAgICAtYiAvIGQpLmFzaW4oKVxuICAgICAgICAgICAgICA6IG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICAgICAgICAgIChhICE9PSAwKSA/IGEgLyAwIDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAoYiAhPT0gMCkgPyAtYiAvIDAgOiAwKS5hc2luKCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBzaW5oXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnc2luaCc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBzaW5oKGMpID0gKGVeYyAtIGVeLWMpIC8gMlxuXG4gICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgc2luaChhKSAqIE1hdGguY29zKGIpLFxuICAgICAgICAgICAgICBjb3NoKGEpICogTWF0aC5zaW4oYikpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGNvbXBsZXggY29zaFxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2Nvc2gnOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gY29zaChjKSA9IChlXmMgKyBlXi1jKSAvIDJcblxuICAgICAgdmFyIGEgPSB0aGlzWydyZSddO1xuICAgICAgdmFyIGIgPSB0aGlzWydpbSddO1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIGNvc2goYSkgKiBNYXRoLmNvcyhiKSxcbiAgICAgICAgICAgICAgc2luaChhKSAqIE1hdGguc2luKGIpKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IHRhbmhcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICd0YW5oJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIC8vIHRhbmgoYykgPSAoZV5jIC0gZV4tYykgLyAoZV5jICsgZV4tYylcblxuICAgICAgdmFyIGEgPSAyICogdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gMiAqIHRoaXNbJ2ltJ107XG4gICAgICB2YXIgZCA9IGNvc2goYSkgKyBNYXRoLmNvcyhiKTtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICBzaW5oKGEpIC8gZCxcbiAgICAgICAgICAgICAgTWF0aC5zaW4oYikgLyBkKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IGNvdGhcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdjb3RoJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIC8vIGNvdGgoYykgPSAoZV5jICsgZV4tYykgLyAoZV5jIC0gZV4tYylcblxuICAgICAgdmFyIGEgPSAyICogdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gMiAqIHRoaXNbJ2ltJ107XG4gICAgICB2YXIgZCA9IGNvc2goYSkgLSBNYXRoLmNvcyhiKTtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICBzaW5oKGEpIC8gZCxcbiAgICAgICAgICAgICAgLU1hdGguc2luKGIpIC8gZCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBjb3RoXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnY3NjaCc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBjc2NoKGMpID0gMiAvIChlXmMgLSBlXi1jKVxuXG4gICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107XG4gICAgICB2YXIgZCA9IE1hdGguY29zKDIgKiBiKSAtIGNvc2goMiAqIGEpO1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIC0yICogc2luaChhKSAqIE1hdGguY29zKGIpIC8gZCxcbiAgICAgICAgICAgICAgMiAqIGNvc2goYSkgKiBNYXRoLnNpbihiKSAvIGQpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGNvbXBsZXggc2VjaFxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ3NlY2gnOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gc2VjaChjKSA9IDIgLyAoZV5jICsgZV4tYylcblxuICAgICAgdmFyIGEgPSB0aGlzWydyZSddO1xuICAgICAgdmFyIGIgPSB0aGlzWydpbSddO1xuICAgICAgdmFyIGQgPSBNYXRoLmNvcygyICogYikgKyBjb3NoKDIgKiBhKTtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICAyICogY29zaChhKSAqIE1hdGguY29zKGIpIC8gZCxcbiAgICAgICAgICAgICAgLTIgKiBzaW5oKGEpICogTWF0aC5zaW4oYikgLyBkKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IGFzaW5oXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnYXNpbmgnOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gYXNpbmgoYykgPSBsb2coYyArIHNxcnQoY14yICsgMSkpXG5cbiAgICAgIHZhciB0bXAgPSB0aGlzWydpbSddO1xuICAgICAgdGhpc1snaW0nXSA9IC10aGlzWydyZSddO1xuICAgICAgdGhpc1sncmUnXSA9IHRtcDtcbiAgICAgIHZhciByZXMgPSB0aGlzWydhc2luJ10oKTtcblxuICAgICAgdGhpc1sncmUnXSA9IC10aGlzWydpbSddO1xuICAgICAgdGhpc1snaW0nXSA9IHRtcDtcbiAgICAgIHRtcCA9IHJlc1sncmUnXTtcblxuICAgICAgcmVzWydyZSddID0gLXJlc1snaW0nXTtcbiAgICAgIHJlc1snaW0nXSA9IHRtcDtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBhc2luaFxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2Fjb3NoJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIC8vIGFjb3NoKGMpID0gbG9nKGMgKyBzcXJ0KGNeMiAtIDEpKVxuXG4gICAgICB2YXIgcmVzID0gdGhpc1snYWNvcyddKCk7XG4gICAgICBpZiAocmVzWydpbSddIDw9IDApIHtcbiAgICAgICAgdmFyIHRtcCA9IHJlc1sncmUnXTtcbiAgICAgICAgcmVzWydyZSddID0gLXJlc1snaW0nXTtcbiAgICAgICAgcmVzWydpbSddID0gdG1wO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHRtcCA9IHJlc1snaW0nXTtcbiAgICAgICAgcmVzWydpbSddID0gLXJlc1sncmUnXTtcbiAgICAgICAgcmVzWydyZSddID0gdG1wO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IGF0YW5oXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnYXRhbmgnOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gYXRhbmgoYykgPSBsb2coKDErYykgLyAoMS1jKSkgLyAyXG5cbiAgICAgIHZhciBhID0gdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gdGhpc1snaW0nXTtcblxuICAgICAgdmFyIG5vSU0gPSBhID4gMSAmJiBiID09PSAwO1xuICAgICAgdmFyIG9uZU1pbnVzID0gMSAtIGE7XG4gICAgICB2YXIgb25lUGx1cyA9IDEgKyBhO1xuICAgICAgdmFyIGQgPSBvbmVNaW51cyAqIG9uZU1pbnVzICsgYiAqIGI7XG5cbiAgICAgIHZhciB4ID0gKGQgIT09IDApXG4gICAgICAgICAgICAgID8gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgICAgICAgICAgKG9uZVBsdXMgKiBvbmVNaW51cyAtIGIgKiBiKSAvIGQsXG4gICAgICAgICAgICAgICAgICAgICAgKGIgKiBvbmVNaW51cyArIG9uZVBsdXMgKiBiKSAvIGQpXG4gICAgICAgICAgICAgIDogbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgICAgICAgICAgKGEgIT09IC0xKSA/IChhIC8gMCkgOiAwLFxuICAgICAgICAgICAgICAgICAgICAgIChiICE9PSAwKSA/IChiIC8gMCkgOiAwKTtcblxuICAgICAgdmFyIHRlbXAgPSB4WydyZSddO1xuICAgICAgeFsncmUnXSA9IGxvZ0h5cG90KHhbJ3JlJ10sIHhbJ2ltJ10pIC8gMjtcbiAgICAgIHhbJ2ltJ10gPSBNYXRoLmF0YW4yKHhbJ2ltJ10sIHRlbXApIC8gMjtcbiAgICAgIGlmIChub0lNKSB7XG4gICAgICAgIHhbJ2ltJ10gPSAteFsnaW0nXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB4O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGNvbXBsZXggYWNvdGhcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdhY290aCc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBhY290aChjKSA9IGxvZygoYysxKSAvIChjLTEpKSAvIDJcblxuICAgICAgdmFyIGEgPSB0aGlzWydyZSddO1xuICAgICAgdmFyIGIgPSB0aGlzWydpbSddO1xuXG4gICAgICBpZiAoYSA9PT0gMCAmJiBiID09PSAwKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29tcGxleCgwLCBNYXRoLlBJIC8gMik7XG4gICAgICB9XG5cbiAgICAgIHZhciBkID0gYSAqIGEgKyBiICogYjtcbiAgICAgIHJldHVybiAoZCAhPT0gMClcbiAgICAgICAgICAgICAgPyBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgICAgICAgICBhIC8gZCxcbiAgICAgICAgICAgICAgICAgICAgICAtYiAvIGQpLmF0YW5oKClcbiAgICAgICAgICAgICAgOiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgICAgICAgICAoYSAhPT0gMCkgPyBhIC8gMCA6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgKGIgIT09IDApID8gLWIgLyAwIDogMCkuYXRhbmgoKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IGFjc2NoXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnYWNzY2gnOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gYWNzY2goYykgPSBsb2coKDErc3FydCgxK2NeMikpL2MpXG5cbiAgICAgIHZhciBhID0gdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gdGhpc1snaW0nXTtcblxuICAgICAgaWYgKGIgPT09IDApIHtcblxuICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgICAgKGEgIT09IDApXG4gICAgICAgICAgICAgICAgPyBNYXRoLmxvZyhhICsgTWF0aC5zcXJ0KGEgKiBhICsgMSkpXG4gICAgICAgICAgICAgICAgOiBJbmZpbml0eSwgMCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBkID0gYSAqIGEgKyBiICogYjtcbiAgICAgIHJldHVybiAoZCAhPT0gMClcbiAgICAgICAgICAgICAgPyBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgICAgICAgICBhIC8gZCxcbiAgICAgICAgICAgICAgICAgICAgICAtYiAvIGQpLmFzaW5oKClcbiAgICAgICAgICAgICAgOiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgICAgICAgICAoYSAhPT0gMCkgPyBhIC8gMCA6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgKGIgIT09IDApID8gLWIgLyAwIDogMCkuYXNpbmgoKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IGFzZWNoXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnYXNlY2gnOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gYXNlY2goYykgPSBsb2coKDErc3FydCgxLWNeMikpL2MpXG5cbiAgICAgIHZhciBhID0gdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gdGhpc1snaW0nXTtcblxuICAgICAgaWYgKHRoaXNbJ2lzWmVybyddKCkpIHtcbiAgICAgICAgcmV0dXJuIENvbXBsZXhbJ0lORklOSVRZJ107XG4gICAgICB9XG5cbiAgICAgIHZhciBkID0gYSAqIGEgKyBiICogYjtcbiAgICAgIHJldHVybiAoZCAhPT0gMClcbiAgICAgICAgICAgICAgPyBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgICAgICAgICBhIC8gZCxcbiAgICAgICAgICAgICAgICAgICAgICAtYiAvIGQpLmFjb3NoKClcbiAgICAgICAgICAgICAgOiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgICAgICAgICAoYSAhPT0gMCkgPyBhIC8gMCA6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgKGIgIT09IDApID8gLWIgLyAwIDogMCkuYWNvc2goKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IGludmVyc2UgMS96XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnaW52ZXJzZSc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyAxIC8gMCA9IEluZmluaXR5IGFuZCAxIC8gSW5maW5pdHkgPSAwXG4gICAgICBpZiAodGhpc1snaXNaZXJvJ10oKSkge1xuICAgICAgICByZXR1cm4gQ29tcGxleFsnSU5GSU5JVFknXTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXNbJ2lzSW5maW5pdGUnXSgpKSB7XG4gICAgICAgIHJldHVybiBDb21wbGV4WydaRVJPJ107XG4gICAgICB9XG5cbiAgICAgIHZhciBhID0gdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gdGhpc1snaW0nXTtcblxuICAgICAgdmFyIGQgPSBhICogYSArIGIgKiBiO1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoYSAvIGQsIC1iIC8gZCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGNvbXBsZXggY29uanVnYXRlXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnY29uanVnYXRlJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleCh0aGlzWydyZSddLCAtdGhpc1snaW0nXSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG5lZ2F0ZWQgY29tcGxleCBudW1iZXJcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICduZWcnOiBmdW5jdGlvbigpIHtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KC10aGlzWydyZSddLCAtdGhpc1snaW0nXSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENlaWxzIHRoZSBhY3R1YWwgY29tcGxleCBudW1iZXJcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdjZWlsJzogZnVuY3Rpb24ocGxhY2VzKSB7XG5cbiAgICAgIHBsYWNlcyA9IE1hdGgucG93KDEwLCBwbGFjZXMgfHwgMCk7XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgTWF0aC5jZWlsKHRoaXNbJ3JlJ10gKiBwbGFjZXMpIC8gcGxhY2VzLFxuICAgICAgICAgICAgICBNYXRoLmNlaWwodGhpc1snaW0nXSAqIHBsYWNlcykgLyBwbGFjZXMpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBGbG9vcnMgdGhlIGFjdHVhbCBjb21wbGV4IG51bWJlclxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2Zsb29yJzogZnVuY3Rpb24ocGxhY2VzKSB7XG5cbiAgICAgIHBsYWNlcyA9IE1hdGgucG93KDEwLCBwbGFjZXMgfHwgMCk7XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgTWF0aC5mbG9vcih0aGlzWydyZSddICogcGxhY2VzKSAvIHBsYWNlcyxcbiAgICAgICAgICAgICAgTWF0aC5mbG9vcih0aGlzWydpbSddICogcGxhY2VzKSAvIHBsYWNlcyk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENlaWxzIHRoZSBhY3R1YWwgY29tcGxleCBudW1iZXJcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdyb3VuZCc6IGZ1bmN0aW9uKHBsYWNlcykge1xuXG4gICAgICBwbGFjZXMgPSBNYXRoLnBvdygxMCwgcGxhY2VzIHx8IDApO1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIE1hdGgucm91bmQodGhpc1sncmUnXSAqIHBsYWNlcykgLyBwbGFjZXMsXG4gICAgICAgICAgICAgIE1hdGgucm91bmQodGhpc1snaW0nXSAqIHBsYWNlcykgLyBwbGFjZXMpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb21wYXJlcyB0d28gY29tcGxleCBudW1iZXJzXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogbmV3IENvbXBsZXgoSW5maW5pdHkpLmVxdWFscyhJbmZpbml0eSkgPT09IGZhbHNlXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICAnZXF1YWxzJzogZnVuY3Rpb24oYSwgYikge1xuXG4gICAgICB2YXIgeiA9IG5ldyBDb21wbGV4KGEsIGIpO1xuXG4gICAgICByZXR1cm4gTWF0aC5hYnMoelsncmUnXSAtIHRoaXNbJ3JlJ10pIDw9IENvbXBsZXhbJ0VQU0lMT04nXSAmJlxuICAgICAgICAgICAgICBNYXRoLmFicyh6WydpbSddIC0gdGhpc1snaW0nXSkgPD0gQ29tcGxleFsnRVBTSUxPTiddO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDbG9uZXMgdGhlIGFjdHVhbCBvYmplY3RcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdjbG9uZSc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgodGhpc1sncmUnXSwgdGhpc1snaW0nXSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdldHMgYSBzdHJpbmcgb2YgdGhlIGFjdHVhbCBjb21wbGV4IG51bWJlclxuICAgICAqXG4gICAgICogQHJldHVybnMge3N0cmluZ31cbiAgICAgKi9cbiAgICAndG9TdHJpbmcnOiBmdW5jdGlvbigpIHtcblxuICAgICAgdmFyIGEgPSB0aGlzWydyZSddO1xuICAgICAgdmFyIGIgPSB0aGlzWydpbSddO1xuICAgICAgdmFyIHJldCA9ICcnO1xuXG4gICAgICBpZiAodGhpc1snaXNOYU4nXSgpKSB7XG4gICAgICAgIHJldHVybiAnTmFOJztcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXNbJ2lzWmVybyddKCkpIHtcbiAgICAgICAgcmV0dXJuICcwJztcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXNbJ2lzSW5maW5pdGUnXSgpKSB7XG4gICAgICAgIHJldHVybiAnSW5maW5pdHknO1xuICAgICAgfVxuXG4gICAgICBpZiAoYSAhPT0gMCkge1xuICAgICAgICByZXQgKz0gYTtcbiAgICAgIH1cblxuICAgICAgaWYgKGIgIT09IDApIHtcblxuICAgICAgICBpZiAoYSAhPT0gMCkge1xuICAgICAgICAgIHJldCArPSBiIDwgMCA/ICcgLSAnIDogJyArICc7XG4gICAgICAgIH0gZWxzZSBpZiAoYiA8IDApIHtcbiAgICAgICAgICByZXQgKz0gJy0nO1xuICAgICAgICB9XG5cbiAgICAgICAgYiA9IE1hdGguYWJzKGIpO1xuXG4gICAgICAgIGlmICgxICE9PSBiKSB7XG4gICAgICAgICAgcmV0ICs9IGI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0ICs9ICdpJztcbiAgICAgIH1cblxuICAgICAgaWYgKCFyZXQpXG4gICAgICAgIHJldHVybiAnMCc7XG5cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGFjdHVhbCBudW1iZXIgYXMgYSB2ZWN0b3JcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtBcnJheX1cbiAgICAgKi9cbiAgICAndG9WZWN0b3InOiBmdW5jdGlvbigpIHtcblxuICAgICAgcmV0dXJuIFt0aGlzWydyZSddLCB0aGlzWydpbSddXTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgYWN0dWFsIHJlYWwgdmFsdWUgb2YgdGhlIGN1cnJlbnQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfG51bGx9XG4gICAgICovXG4gICAgJ3ZhbHVlT2YnOiBmdW5jdGlvbigpIHtcblxuICAgICAgaWYgKHRoaXNbJ2ltJ10gPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbJ3JlJ107XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgY29tcGxleCBudW1iZXIgaXMgbm90IG9uIHRoZSBSaWVtYW5uIHNwaGVyZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgICdpc05hTic6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGlzTmFOKHRoaXNbJ3JlJ10pIHx8IGlzTmFOKHRoaXNbJ2ltJ10pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IGEgY29tcGxleCBudW1iZXIgaXMgYXQgdGhlIHplcm8gcG9sZSBvZiB0aGVcbiAgICAgKiBSaWVtYW5uIHNwaGVyZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgICdpc1plcm8nOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICh0aGlzWydyZSddID09PSAwIHx8IHRoaXNbJ3JlJ10gPT09IC0wKSAmJlxuICAgICAgICAgICAgICAodGhpc1snaW0nXSA9PT0gMCB8fCB0aGlzWydpbSddID09PSAtMClcbiAgICAgICAgICAgICAgKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgY29tcGxleCBudW1iZXIgaXMgbm90IGF0IHRoZSBpbmZpbml0eSBwb2xlIG9mIHRoZVxuICAgICAqIFJpZW1hbm4gc3BoZXJlLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgJ2lzRmluaXRlJzogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gaXNGaW5pdGUodGhpc1sncmUnXSkgJiYgaXNGaW5pdGUodGhpc1snaW0nXSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIERldGVybWluZXMgd2hldGhlciBvciBub3QgYSBjb21wbGV4IG51bWJlciBpcyBhdCB0aGUgaW5maW5pdHkgcG9sZSBvZiB0aGVcbiAgICAgKiBSaWVtYW5uIHNwaGVyZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgICdpc0luZmluaXRlJzogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gISh0aGlzWydpc05hTiddKCkgfHwgdGhpc1snaXNGaW5pdGUnXSgpKTtcbiAgICB9XG4gIH07XG5cbiAgQ29tcGxleFsnWkVSTyddID0gbmV3IENvbXBsZXgoMCwgMCk7XG4gIENvbXBsZXhbJ09ORSddID0gbmV3IENvbXBsZXgoMSwgMCk7XG4gIENvbXBsZXhbJ0knXSA9IG5ldyBDb21wbGV4KDAsIDEpO1xuICBDb21wbGV4WydQSSddID0gbmV3IENvbXBsZXgoTWF0aC5QSSwgMCk7XG4gIENvbXBsZXhbJ0UnXSA9IG5ldyBDb21wbGV4KE1hdGguRSwgMCk7XG4gIENvbXBsZXhbJ0lORklOSVRZJ10gPSBuZXcgQ29tcGxleChJbmZpbml0eSwgSW5maW5pdHkpO1xuICBDb21wbGV4WydOQU4nXSA9IG5ldyBDb21wbGV4KE5hTiwgTmFOKTtcbiAgQ29tcGxleFsnRVBTSUxPTiddID0gMWUtMTY7XG5cbiAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lWydhbWQnXSkge1xuICAgIGRlZmluZShbXSwgZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gQ29tcGxleDtcbiAgICB9KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsndmFsdWUnOiB0cnVlfSk7XG4gICAgQ29tcGxleFsnZGVmYXVsdCddID0gQ29tcGxleDtcbiAgICBDb21wbGV4WydDb21wbGV4J10gPSBDb21wbGV4O1xuICAgIG1vZHVsZVsnZXhwb3J0cyddID0gQ29tcGxleDtcbiAgfSBlbHNlIHtcbiAgICByb290WydDb21wbGV4J10gPSBDb21wbGV4O1xuICB9XG5cbn0pKHRoaXMpO1xuIiwiOyhmdW5jdGlvbiAoZ2xvYmFsU2NvcGUpIHtcclxuICAndXNlIHN0cmljdCc7XHJcblxyXG5cclxuICAvKlxyXG4gICAqICBkZWNpbWFsLmpzIHYxMC4yLjBcclxuICAgKiAgQW4gYXJiaXRyYXJ5LXByZWNpc2lvbiBEZWNpbWFsIHR5cGUgZm9yIEphdmFTY3JpcHQuXHJcbiAgICogIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWtlTWNsL2RlY2ltYWwuanNcclxuICAgKiAgQ29weXJpZ2h0IChjKSAyMDE5IE1pY2hhZWwgTWNsYXVnaGxpbiA8TThjaDg4bEBnbWFpbC5jb20+XHJcbiAgICogIE1JVCBMaWNlbmNlXHJcbiAgICovXHJcblxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRURJVEFCTEUgREVGQVVMVFMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xyXG5cclxuXHJcbiAgICAvLyBUaGUgbWF4aW11bSBleHBvbmVudCBtYWduaXR1ZGUuXHJcbiAgICAvLyBUaGUgbGltaXQgb24gdGhlIHZhbHVlIG9mIGB0b0V4cE5lZ2AsIGB0b0V4cFBvc2AsIGBtaW5FYCBhbmQgYG1heEVgLlxyXG4gIHZhciBFWFBfTElNSVQgPSA5ZTE1LCAgICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIDllMTVcclxuXHJcbiAgICAvLyBUaGUgbGltaXQgb24gdGhlIHZhbHVlIG9mIGBwcmVjaXNpb25gLCBhbmQgb24gdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBhcmd1bWVudCB0b1xyXG4gICAgLy8gYHRvRGVjaW1hbFBsYWNlc2AsIGB0b0V4cG9uZW50aWFsYCwgYHRvRml4ZWRgLCBgdG9QcmVjaXNpb25gIGFuZCBgdG9TaWduaWZpY2FudERpZ2l0c2AuXHJcbiAgICBNQVhfRElHSVRTID0gMWU5LCAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gMWU5XHJcblxyXG4gICAgLy8gQmFzZSBjb252ZXJzaW9uIGFscGhhYmV0LlxyXG4gICAgTlVNRVJBTFMgPSAnMDEyMzQ1Njc4OWFiY2RlZicsXHJcblxyXG4gICAgLy8gVGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mIDEwICgxMDI1IGRpZ2l0cykuXHJcbiAgICBMTjEwID0gJzIuMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0Njg0MzY0MjA3NjAxMTAxNDg4NjI4NzcyOTc2MDMzMzI3OTAwOTY3NTcyNjA5Njc3MzUyNDgwMjM1OTk3MjA1MDg5NTk4Mjk4MzQxOTY3Nzg0MDQyMjg2MjQ4NjMzNDA5NTI1NDY1MDgyODA2NzU2NjY2Mjg3MzY5MDk4NzgxNjg5NDgyOTA3MjA4MzI1NTU0NjgwODQzNzk5ODk0ODI2MjMzMTk4NTI4MzkzNTA1MzA4OTY1Mzc3NzMyNjI4ODQ2MTYzMzY2MjIyMjg3Njk4MjE5ODg2NzQ2NTQzNjY3NDc0NDA0MjQzMjc0MzY1MTU1MDQ4OTM0MzE0OTM5MzkxNDc5NjE5NDA0NDAwMjIyMTA1MTAxNzE0MTc0ODAwMzY4ODA4NDAxMjY0NzA4MDY4NTU2Nzc0MzIxNjIyODM1NTIyMDExNDgwNDY2MzcxNTY1OTEyMTM3MzQ1MDc0Nzg1Njk0NzY4MzQ2MzYxNjc5MjEwMTgwNjQ0NTA3MDY0ODAwMDI3NzUwMjY4NDkxNjc0NjU1MDU4Njg1NjkzNTY3MzQyMDY3MDU4MTEzNjQyOTIyNDU1NDQwNTc1ODkyNTcyNDIwODI0MTMxNDY5NTY4OTAxNjc1ODk0MDI1Njc3NjMxMTM1NjkxOTI5MjAzMzM3NjU4NzE0MTY2MDIzMDEwNTcwMzA4OTYzNDU3MjA3NTQ0MDM3MDg0NzQ2OTk0MDE2ODI2OTI4MjgwODQ4MTE4NDI4OTMxNDg0ODUyNDk0ODY0NDg3MTkyNzgwOTY3NjI3MTI3NTc3NTM5NzAyNzY2ODYwNTk1MjQ5NjcxNjY3NDE4MzQ4NTcwNDQyMjUwNzE5Nzk2NTAwNDcxNDk1MTA1MDQ5MjIxNDc3NjU2NzYzNjkzODY2Mjk3Njk3OTUyMjExMDcxODI2NDU0OTczNDc3MjY2MjQyNTcwOTQyOTMyMjU4Mjc5ODUwMjU4NTUwOTc4NTI2NTM4MzIwNzYwNjcyNjMxNzE2NDMwOTUwNTk5NTA4NzgwNzUyMzcxMDMzMzEwMTE5Nzg1NzU0NzMzMTU0MTQyMTgwODQyNzU0Mzg2MzU5MTc3ODExNzA1NDMwOTgyNzQ4MjM4NTA0NTY0ODAxOTA5NTYxMDI5OTI5MTgyNDMxODIzNzUyNTM1NzcwOTc1MDUzOTU2NTE4NzY5NzUxMDM3NDk3MDg4ODY5MjE4MDIwNTE4OTMzOTUwNzIzODUzOTIwNTE0NDYzNDE5NzI2NTI4NzI4Njk2NTExMDg2MjU3MTQ5MjE5ODg0OTk3ODc0ODg3Mzc3MTM0NTY4NjIwOTE2NzA1OCcsXHJcblxyXG4gICAgLy8gUGkgKDEwMjUgZGlnaXRzKS5cclxuICAgIFBJID0gJzMuMTQxNTkyNjUzNTg5NzkzMjM4NDYyNjQzMzgzMjc5NTAyODg0MTk3MTY5Mzk5Mzc1MTA1ODIwOTc0OTQ0NTkyMzA3ODE2NDA2Mjg2MjA4OTk4NjI4MDM0ODI1MzQyMTE3MDY3OTgyMTQ4MDg2NTEzMjgyMzA2NjQ3MDkzODQ0NjA5NTUwNTgyMjMxNzI1MzU5NDA4MTI4NDgxMTE3NDUwMjg0MTAyNzAxOTM4NTIxMTA1NTU5NjQ0NjIyOTQ4OTU0OTMwMzgxOTY0NDI4ODEwOTc1NjY1OTMzNDQ2MTI4NDc1NjQ4MjMzNzg2NzgzMTY1MjcxMjAxOTA5MTQ1NjQ4NTY2OTIzNDYwMzQ4NjEwNDU0MzI2NjQ4MjEzMzkzNjA3MjYwMjQ5MTQxMjczNzI0NTg3MDA2NjA2MzE1NTg4MTc0ODgxNTIwOTIwOTYyODI5MjU0MDkxNzE1MzY0MzY3ODkyNTkwMzYwMDExMzMwNTMwNTQ4ODIwNDY2NTIxMzg0MTQ2OTUxOTQxNTExNjA5NDMzMDU3MjcwMzY1NzU5NTkxOTUzMDkyMTg2MTE3MzgxOTMyNjExNzkzMTA1MTE4NTQ4MDc0NDYyMzc5OTYyNzQ5NTY3MzUxODg1NzUyNzI0ODkxMjI3OTM4MTgzMDExOTQ5MTI5ODMzNjczMzYyNDQwNjU2NjQzMDg2MDIxMzk0OTQ2Mzk1MjI0NzM3MTkwNzAyMTc5ODYwOTQzNzAyNzcwNTM5MjE3MTc2MjkzMTc2NzUyMzg0Njc0ODE4NDY3NjY5NDA1MTMyMDAwNTY4MTI3MTQ1MjYzNTYwODI3Nzg1NzcxMzQyNzU3Nzg5NjA5MTczNjM3MTc4NzIxNDY4NDQwOTAxMjI0OTUzNDMwMTQ2NTQ5NTg1MzcxMDUwNzkyMjc5Njg5MjU4OTIzNTQyMDE5OTU2MTEyMTI5MDIxOTYwODY0MDM0NDE4MTU5ODEzNjI5Nzc0NzcxMzA5OTYwNTE4NzA3MjExMzQ5OTk5OTk4MzcyOTc4MDQ5OTUxMDU5NzMxNzMyODE2MDk2MzE4NTk1MDI0NDU5NDU1MzQ2OTA4MzAyNjQyNTIyMzA4MjUzMzQ0Njg1MDM1MjYxOTMxMTg4MTcxMDEwMDAzMTM3ODM4NzUyODg2NTg3NTMzMjA4MzgxNDIwNjE3MTc3NjY5MTQ3MzAzNTk4MjUzNDkwNDI4NzU1NDY4NzMxMTU5NTYyODYzODgyMzUzNzg3NTkzNzUxOTU3NzgxODU3NzgwNTMyMTcxMjI2ODA2NjEzMDAxOTI3ODc2NjExMTk1OTA5MjE2NDIwMTk4OTM4MDk1MjU3MjAxMDY1NDg1ODYzMjc4OScsXHJcblxyXG5cclxuICAgIC8vIFRoZSBpbml0aWFsIGNvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBvZiB0aGUgRGVjaW1hbCBjb25zdHJ1Y3Rvci5cclxuICAgIERFRkFVTFRTID0ge1xyXG5cclxuICAgICAgLy8gVGhlc2UgdmFsdWVzIG11c3QgYmUgaW50ZWdlcnMgd2l0aGluIHRoZSBzdGF0ZWQgcmFuZ2VzIChpbmNsdXNpdmUpLlxyXG4gICAgICAvLyBNb3N0IG9mIHRoZXNlIHZhbHVlcyBjYW4gYmUgY2hhbmdlZCBhdCBydW4tdGltZSB1c2luZyB0aGUgYERlY2ltYWwuY29uZmlnYCBtZXRob2QuXHJcblxyXG4gICAgICAvLyBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIG9mIHRoZSByZXN1bHQgb2YgYSBjYWxjdWxhdGlvbiBvciBiYXNlIGNvbnZlcnNpb24uXHJcbiAgICAgIC8vIEUuZy4gYERlY2ltYWwuY29uZmlnKHsgcHJlY2lzaW9uOiAyMCB9KTtgXHJcbiAgICAgIHByZWNpc2lvbjogMjAsICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEgdG8gTUFYX0RJR0lUU1xyXG5cclxuICAgICAgLy8gVGhlIHJvdW5kaW5nIG1vZGUgdXNlZCB3aGVuIHJvdW5kaW5nIHRvIGBwcmVjaXNpb25gLlxyXG4gICAgICAvL1xyXG4gICAgICAvLyBST1VORF9VUCAgICAgICAgIDAgQXdheSBmcm9tIHplcm8uXHJcbiAgICAgIC8vIFJPVU5EX0RPV04gICAgICAgMSBUb3dhcmRzIHplcm8uXHJcbiAgICAgIC8vIFJPVU5EX0NFSUwgICAgICAgMiBUb3dhcmRzICtJbmZpbml0eS5cclxuICAgICAgLy8gUk9VTkRfRkxPT1IgICAgICAzIFRvd2FyZHMgLUluZmluaXR5LlxyXG4gICAgICAvLyBST1VORF9IQUxGX1VQICAgIDQgVG93YXJkcyBuZWFyZXN0IG5laWdoYm91ci4gSWYgZXF1aWRpc3RhbnQsIHVwLlxyXG4gICAgICAvLyBST1VORF9IQUxGX0RPV04gIDUgVG93YXJkcyBuZWFyZXN0IG5laWdoYm91ci4gSWYgZXF1aWRpc3RhbnQsIGRvd24uXHJcbiAgICAgIC8vIFJPVU5EX0hBTEZfRVZFTiAgNiBUb3dhcmRzIG5lYXJlc3QgbmVpZ2hib3VyLiBJZiBlcXVpZGlzdGFudCwgdG93YXJkcyBldmVuIG5laWdoYm91ci5cclxuICAgICAgLy8gUk9VTkRfSEFMRl9DRUlMICA3IFRvd2FyZHMgbmVhcmVzdCBuZWlnaGJvdXIuIElmIGVxdWlkaXN0YW50LCB0b3dhcmRzICtJbmZpbml0eS5cclxuICAgICAgLy8gUk9VTkRfSEFMRl9GTE9PUiA4IFRvd2FyZHMgbmVhcmVzdCBuZWlnaGJvdXIuIElmIGVxdWlkaXN0YW50LCB0b3dhcmRzIC1JbmZpbml0eS5cclxuICAgICAgLy9cclxuICAgICAgLy8gRS5nLlxyXG4gICAgICAvLyBgRGVjaW1hbC5yb3VuZGluZyA9IDQ7YFxyXG4gICAgICAvLyBgRGVjaW1hbC5yb3VuZGluZyA9IERlY2ltYWwuUk9VTkRfSEFMRl9VUDtgXHJcbiAgICAgIHJvdW5kaW5nOiA0LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gOFxyXG5cclxuICAgICAgLy8gVGhlIG1vZHVsbyBtb2RlIHVzZWQgd2hlbiBjYWxjdWxhdGluZyB0aGUgbW9kdWx1czogYSBtb2Qgbi5cclxuICAgICAgLy8gVGhlIHF1b3RpZW50IChxID0gYSAvIG4pIGlzIGNhbGN1bGF0ZWQgYWNjb3JkaW5nIHRvIHRoZSBjb3JyZXNwb25kaW5nIHJvdW5kaW5nIG1vZGUuXHJcbiAgICAgIC8vIFRoZSByZW1haW5kZXIgKHIpIGlzIGNhbGN1bGF0ZWQgYXM6IHIgPSBhIC0gbiAqIHEuXHJcbiAgICAgIC8vXHJcbiAgICAgIC8vIFVQICAgICAgICAgMCBUaGUgcmVtYWluZGVyIGlzIHBvc2l0aXZlIGlmIHRoZSBkaXZpZGVuZCBpcyBuZWdhdGl2ZSwgZWxzZSBpcyBuZWdhdGl2ZS5cclxuICAgICAgLy8gRE9XTiAgICAgICAxIFRoZSByZW1haW5kZXIgaGFzIHRoZSBzYW1lIHNpZ24gYXMgdGhlIGRpdmlkZW5kIChKYXZhU2NyaXB0ICUpLlxyXG4gICAgICAvLyBGTE9PUiAgICAgIDMgVGhlIHJlbWFpbmRlciBoYXMgdGhlIHNhbWUgc2lnbiBhcyB0aGUgZGl2aXNvciAoUHl0aG9uICUpLlxyXG4gICAgICAvLyBIQUxGX0VWRU4gIDYgVGhlIElFRUUgNzU0IHJlbWFpbmRlciBmdW5jdGlvbi5cclxuICAgICAgLy8gRVVDTElEICAgICA5IEV1Y2xpZGlhbiBkaXZpc2lvbi4gcSA9IHNpZ24obikgKiBmbG9vcihhIC8gYWJzKG4pKS4gQWx3YXlzIHBvc2l0aXZlLlxyXG4gICAgICAvL1xyXG4gICAgICAvLyBUcnVuY2F0ZWQgZGl2aXNpb24gKDEpLCBmbG9vcmVkIGRpdmlzaW9uICgzKSwgdGhlIElFRUUgNzU0IHJlbWFpbmRlciAoNiksIGFuZCBFdWNsaWRpYW5cclxuICAgICAgLy8gZGl2aXNpb24gKDkpIGFyZSBjb21tb25seSB1c2VkIGZvciB0aGUgbW9kdWx1cyBvcGVyYXRpb24uIFRoZSBvdGhlciByb3VuZGluZyBtb2RlcyBjYW4gYWxzb1xyXG4gICAgICAvLyBiZSB1c2VkLCBidXQgdGhleSBtYXkgbm90IGdpdmUgdXNlZnVsIHJlc3VsdHMuXHJcbiAgICAgIG1vZHVsbzogMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gOVxyXG5cclxuICAgICAgLy8gVGhlIGV4cG9uZW50IHZhbHVlIGF0IGFuZCBiZW5lYXRoIHdoaWNoIGB0b1N0cmluZ2AgcmV0dXJucyBleHBvbmVudGlhbCBub3RhdGlvbi5cclxuICAgICAgLy8gSmF2YVNjcmlwdCBudW1iZXJzOiAtN1xyXG4gICAgICB0b0V4cE5lZzogLTcsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIC1FWFBfTElNSVRcclxuXHJcbiAgICAgIC8vIFRoZSBleHBvbmVudCB2YWx1ZSBhdCBhbmQgYWJvdmUgd2hpY2ggYHRvU3RyaW5nYCByZXR1cm5zIGV4cG9uZW50aWFsIG5vdGF0aW9uLlxyXG4gICAgICAvLyBKYXZhU2NyaXB0IG51bWJlcnM6IDIxXHJcbiAgICAgIHRvRXhwUG9zOiAgMjEsICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gRVhQX0xJTUlUXHJcblxyXG4gICAgICAvLyBUaGUgbWluaW11bSBleHBvbmVudCB2YWx1ZSwgYmVuZWF0aCB3aGljaCB1bmRlcmZsb3cgdG8gemVybyBvY2N1cnMuXHJcbiAgICAgIC8vIEphdmFTY3JpcHQgbnVtYmVyczogLTMyNCAgKDVlLTMyNClcclxuICAgICAgbWluRTogLUVYUF9MSU1JVCwgICAgICAgICAgICAgICAgICAgICAgLy8gLTEgdG8gLUVYUF9MSU1JVFxyXG5cclxuICAgICAgLy8gVGhlIG1heGltdW0gZXhwb25lbnQgdmFsdWUsIGFib3ZlIHdoaWNoIG92ZXJmbG93IHRvIEluZmluaXR5IG9jY3Vycy5cclxuICAgICAgLy8gSmF2YVNjcmlwdCBudW1iZXJzOiAzMDggICgxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOClcclxuICAgICAgbWF4RTogRVhQX0xJTUlULCAgICAgICAgICAgICAgICAgICAgICAgLy8gMSB0byBFWFBfTElNSVRcclxuXHJcbiAgICAgIC8vIFdoZXRoZXIgdG8gdXNlIGNyeXB0b2dyYXBoaWNhbGx5LXNlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24sIGlmIGF2YWlsYWJsZS5cclxuICAgICAgY3J5cHRvOiBmYWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJ1ZS9mYWxzZVxyXG4gICAgfSxcclxuXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVORCBPRiBFRElUQUJMRSBERUZBVUxUUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC8vXHJcblxyXG5cclxuICAgIERlY2ltYWwsIGluZXhhY3QsIG5vQ29uZmxpY3QsIHF1YWRyYW50LFxyXG4gICAgZXh0ZXJuYWwgPSB0cnVlLFxyXG5cclxuICAgIGRlY2ltYWxFcnJvciA9ICdbRGVjaW1hbEVycm9yXSAnLFxyXG4gICAgaW52YWxpZEFyZ3VtZW50ID0gZGVjaW1hbEVycm9yICsgJ0ludmFsaWQgYXJndW1lbnQ6ICcsXHJcbiAgICBwcmVjaXNpb25MaW1pdEV4Y2VlZGVkID0gZGVjaW1hbEVycm9yICsgJ1ByZWNpc2lvbiBsaW1pdCBleGNlZWRlZCcsXHJcbiAgICBjcnlwdG9VbmF2YWlsYWJsZSA9IGRlY2ltYWxFcnJvciArICdjcnlwdG8gdW5hdmFpbGFibGUnLFxyXG5cclxuICAgIG1hdGhmbG9vciA9IE1hdGguZmxvb3IsXHJcbiAgICBtYXRocG93ID0gTWF0aC5wb3csXHJcblxyXG4gICAgaXNCaW5hcnkgPSAvXjBiKFswMV0rKFxcLlswMV0qKT98XFwuWzAxXSspKHBbKy1dP1xcZCspPyQvaSxcclxuICAgIGlzSGV4ID0gL14weChbMC05YS1mXSsoXFwuWzAtOWEtZl0qKT98XFwuWzAtOWEtZl0rKShwWystXT9cXGQrKT8kL2ksXHJcbiAgICBpc09jdGFsID0gL14wbyhbMC03XSsoXFwuWzAtN10qKT98XFwuWzAtN10rKShwWystXT9cXGQrKT8kL2ksXHJcbiAgICBpc0RlY2ltYWwgPSAvXihcXGQrKFxcLlxcZCopP3xcXC5cXGQrKShlWystXT9cXGQrKT8kL2ksXHJcblxyXG4gICAgQkFTRSA9IDFlNyxcclxuICAgIExPR19CQVNFID0gNyxcclxuICAgIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxLFxyXG5cclxuICAgIExOMTBfUFJFQ0lTSU9OID0gTE4xMC5sZW5ndGggLSAxLFxyXG4gICAgUElfUFJFQ0lTSU9OID0gUEkubGVuZ3RoIC0gMSxcclxuXHJcbiAgICAvLyBEZWNpbWFsLnByb3RvdHlwZSBvYmplY3RcclxuICAgIFAgPSB7IG5hbWU6ICdbb2JqZWN0IERlY2ltYWxdJyB9O1xyXG5cclxuXHJcbiAgLy8gRGVjaW1hbCBwcm90b3R5cGUgbWV0aG9kc1xyXG5cclxuXHJcbiAgLypcclxuICAgKiAgYWJzb2x1dGVWYWx1ZSAgICAgICAgICAgICBhYnNcclxuICAgKiAgY2VpbFxyXG4gICAqICBjb21wYXJlZFRvICAgICAgICAgICAgICAgIGNtcFxyXG4gICAqICBjb3NpbmUgICAgICAgICAgICAgICAgICAgIGNvc1xyXG4gICAqICBjdWJlUm9vdCAgICAgICAgICAgICAgICAgIGNicnRcclxuICAgKiAgZGVjaW1hbFBsYWNlcyAgICAgICAgICAgICBkcFxyXG4gICAqICBkaXZpZGVkQnkgICAgICAgICAgICAgICAgIGRpdlxyXG4gICAqICBkaXZpZGVkVG9JbnRlZ2VyQnkgICAgICAgIGRpdlRvSW50XHJcbiAgICogIGVxdWFscyAgICAgICAgICAgICAgICAgICAgZXFcclxuICAgKiAgZmxvb3JcclxuICAgKiAgZ3JlYXRlclRoYW4gICAgICAgICAgICAgICBndFxyXG4gICAqICBncmVhdGVyVGhhbk9yRXF1YWxUbyAgICAgIGd0ZVxyXG4gICAqICBoeXBlcmJvbGljQ29zaW5lICAgICAgICAgIGNvc2hcclxuICAgKiAgaHlwZXJib2xpY1NpbmUgICAgICAgICAgICBzaW5oXHJcbiAgICogIGh5cGVyYm9saWNUYW5nZW50ICAgICAgICAgdGFuaFxyXG4gICAqICBpbnZlcnNlQ29zaW5lICAgICAgICAgICAgIGFjb3NcclxuICAgKiAgaW52ZXJzZUh5cGVyYm9saWNDb3NpbmUgICBhY29zaFxyXG4gICAqICBpbnZlcnNlSHlwZXJib2xpY1NpbmUgICAgIGFzaW5oXHJcbiAgICogIGludmVyc2VIeXBlcmJvbGljVGFuZ2VudCAgYXRhbmhcclxuICAgKiAgaW52ZXJzZVNpbmUgICAgICAgICAgICAgICBhc2luXHJcbiAgICogIGludmVyc2VUYW5nZW50ICAgICAgICAgICAgYXRhblxyXG4gICAqICBpc0Zpbml0ZVxyXG4gICAqICBpc0ludGVnZXIgICAgICAgICAgICAgICAgIGlzSW50XHJcbiAgICogIGlzTmFOXHJcbiAgICogIGlzTmVnYXRpdmUgICAgICAgICAgICAgICAgaXNOZWdcclxuICAgKiAgaXNQb3NpdGl2ZSAgICAgICAgICAgICAgICBpc1Bvc1xyXG4gICAqICBpc1plcm9cclxuICAgKiAgbGVzc1RoYW4gICAgICAgICAgICAgICAgICBsdFxyXG4gICAqICBsZXNzVGhhbk9yRXF1YWxUbyAgICAgICAgIGx0ZVxyXG4gICAqICBsb2dhcml0aG0gICAgICAgICAgICAgICAgIGxvZ1xyXG4gICAqICBbbWF4aW11bV0gICAgICAgICAgICAgICAgIFttYXhdXHJcbiAgICogIFttaW5pbXVtXSAgICAgICAgICAgICAgICAgW21pbl1cclxuICAgKiAgbWludXMgICAgICAgICAgICAgICAgICAgICBzdWJcclxuICAgKiAgbW9kdWxvICAgICAgICAgICAgICAgICAgICBtb2RcclxuICAgKiAgbmF0dXJhbEV4cG9uZW50aWFsICAgICAgICBleHBcclxuICAgKiAgbmF0dXJhbExvZ2FyaXRobSAgICAgICAgICBsblxyXG4gICAqICBuZWdhdGVkICAgICAgICAgICAgICAgICAgIG5lZ1xyXG4gICAqICBwbHVzICAgICAgICAgICAgICAgICAgICAgIGFkZFxyXG4gICAqICBwcmVjaXNpb24gICAgICAgICAgICAgICAgIHNkXHJcbiAgICogIHJvdW5kXHJcbiAgICogIHNpbmUgICAgICAgICAgICAgICAgICAgICAgc2luXHJcbiAgICogIHNxdWFyZVJvb3QgICAgICAgICAgICAgICAgc3FydFxyXG4gICAqICB0YW5nZW50ICAgICAgICAgICAgICAgICAgIHRhblxyXG4gICAqICB0aW1lcyAgICAgICAgICAgICAgICAgICAgIG11bFxyXG4gICAqICB0b0JpbmFyeVxyXG4gICAqICB0b0RlY2ltYWxQbGFjZXMgICAgICAgICAgIHRvRFBcclxuICAgKiAgdG9FeHBvbmVudGlhbFxyXG4gICAqICB0b0ZpeGVkXHJcbiAgICogIHRvRnJhY3Rpb25cclxuICAgKiAgdG9IZXhhZGVjaW1hbCAgICAgICAgICAgICB0b0hleFxyXG4gICAqICB0b05lYXJlc3RcclxuICAgKiAgdG9OdW1iZXJcclxuICAgKiAgdG9PY3RhbFxyXG4gICAqICB0b1Bvd2VyICAgICAgICAgICAgICAgICAgIHBvd1xyXG4gICAqICB0b1ByZWNpc2lvblxyXG4gICAqICB0b1NpZ25pZmljYW50RGlnaXRzICAgICAgIHRvU0RcclxuICAgKiAgdG9TdHJpbmdcclxuICAgKiAgdHJ1bmNhdGVkICAgICAgICAgICAgICAgICB0cnVuY1xyXG4gICAqICB2YWx1ZU9mICAgICAgICAgICAgICAgICAgIHRvSlNPTlxyXG4gICAqL1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5hYnNvbHV0ZVZhbHVlID0gUC5hYnMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgeCA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMpO1xyXG4gICAgaWYgKHgucyA8IDApIHgucyA9IDE7XHJcbiAgICByZXR1cm4gZmluYWxpc2UoeCk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCByb3VuZGVkIHRvIGEgd2hvbGUgbnVtYmVyIGluIHRoZVxyXG4gICAqIGRpcmVjdGlvbiBvZiBwb3NpdGl2ZSBJbmZpbml0eS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuY2VpbCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiBmaW5hbGlzZShuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzKSwgdGhpcy5lICsgMSwgMik7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuXHJcbiAgICogICAxICAgIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgaXMgZ3JlYXRlciB0aGFuIHRoZSB2YWx1ZSBvZiBgeWAsXHJcbiAgICogIC0xICAgIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgaXMgbGVzcyB0aGFuIHRoZSB2YWx1ZSBvZiBgeWAsXHJcbiAgICogICAwICAgIGlmIHRoZXkgaGF2ZSB0aGUgc2FtZSB2YWx1ZSxcclxuICAgKiAgIE5hTiAgaWYgdGhlIHZhbHVlIG9mIGVpdGhlciBEZWNpbWFsIGlzIE5hTi5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuY29tcGFyZWRUbyA9IFAuY21wID0gZnVuY3Rpb24gKHkpIHtcclxuICAgIHZhciBpLCBqLCB4ZEwsIHlkTCxcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIHhkID0geC5kLFxyXG4gICAgICB5ZCA9ICh5ID0gbmV3IHguY29uc3RydWN0b3IoeSkpLmQsXHJcbiAgICAgIHhzID0geC5zLFxyXG4gICAgICB5cyA9IHkucztcclxuXHJcbiAgICAvLyBFaXRoZXIgTmFOIG9yIMKxSW5maW5pdHk/XHJcbiAgICBpZiAoIXhkIHx8ICF5ZCkge1xyXG4gICAgICByZXR1cm4gIXhzIHx8ICF5cyA/IE5hTiA6IHhzICE9PSB5cyA/IHhzIDogeGQgPT09IHlkID8gMCA6ICF4ZCBeIHhzIDwgMCA/IDEgOiAtMTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBFaXRoZXIgemVybz9cclxuICAgIGlmICgheGRbMF0gfHwgIXlkWzBdKSByZXR1cm4geGRbMF0gPyB4cyA6IHlkWzBdID8gLXlzIDogMDtcclxuXHJcbiAgICAvLyBTaWducyBkaWZmZXI/XHJcbiAgICBpZiAoeHMgIT09IHlzKSByZXR1cm4geHM7XHJcblxyXG4gICAgLy8gQ29tcGFyZSBleHBvbmVudHMuXHJcbiAgICBpZiAoeC5lICE9PSB5LmUpIHJldHVybiB4LmUgPiB5LmUgXiB4cyA8IDAgPyAxIDogLTE7XHJcblxyXG4gICAgeGRMID0geGQubGVuZ3RoO1xyXG4gICAgeWRMID0geWQubGVuZ3RoO1xyXG5cclxuICAgIC8vIENvbXBhcmUgZGlnaXQgYnkgZGlnaXQuXHJcbiAgICBmb3IgKGkgPSAwLCBqID0geGRMIDwgeWRMID8geGRMIDogeWRMOyBpIDwgajsgKytpKSB7XHJcbiAgICAgIGlmICh4ZFtpXSAhPT0geWRbaV0pIHJldHVybiB4ZFtpXSA+IHlkW2ldIF4geHMgPCAwID8gMSA6IC0xO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENvbXBhcmUgbGVuZ3Rocy5cclxuICAgIHJldHVybiB4ZEwgPT09IHlkTCA/IDAgOiB4ZEwgPiB5ZEwgXiB4cyA8IDAgPyAxIDogLTE7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGNvc2luZSBvZiB0aGUgdmFsdWUgaW4gcmFkaWFucyBvZiB0aGlzIERlY2ltYWwuXHJcbiAgICpcclxuICAgKiBEb21haW46IFstSW5maW5pdHksIEluZmluaXR5XVxyXG4gICAqIFJhbmdlOiBbLTEsIDFdXHJcbiAgICpcclxuICAgKiBjb3MoMCkgICAgICAgICA9IDFcclxuICAgKiBjb3MoLTApICAgICAgICA9IDFcclxuICAgKiBjb3MoSW5maW5pdHkpICA9IE5hTlxyXG4gICAqIGNvcygtSW5maW5pdHkpID0gTmFOXHJcbiAgICogY29zKE5hTikgICAgICAgPSBOYU5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuY29zaW5lID0gUC5jb3MgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgcHIsIHJtLFxyXG4gICAgICB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7XHJcblxyXG4gICAgaWYgKCF4LmQpIHJldHVybiBuZXcgQ3RvcihOYU4pO1xyXG5cclxuICAgIC8vIGNvcygwKSA9IGNvcygtMCkgPSAxXHJcbiAgICBpZiAoIXguZFswXSkgcmV0dXJuIG5ldyBDdG9yKDEpO1xyXG5cclxuICAgIHByID0gQ3Rvci5wcmVjaXNpb247XHJcbiAgICBybSA9IEN0b3Iucm91bmRpbmc7XHJcbiAgICBDdG9yLnByZWNpc2lvbiA9IHByICsgTWF0aC5tYXgoeC5lLCB4LnNkKCkpICsgTE9HX0JBU0U7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gMTtcclxuXHJcbiAgICB4ID0gY29zaW5lKEN0b3IsIHRvTGVzc1RoYW5IYWxmUGkoQ3RvciwgeCkpO1xyXG5cclxuICAgIEN0b3IucHJlY2lzaW9uID0gcHI7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gcm07XHJcblxyXG4gICAgcmV0dXJuIGZpbmFsaXNlKHF1YWRyYW50ID09IDIgfHwgcXVhZHJhbnQgPT0gMyA/IHgubmVnKCkgOiB4LCBwciwgcm0sIHRydWUpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGN1YmUgcm9vdCBvZiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsLCByb3VuZGVkIHRvXHJcbiAgICogYHByZWNpc2lvbmAgc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqICBjYnJ0KDApICA9ICAwXHJcbiAgICogIGNicnQoLTApID0gLTBcclxuICAgKiAgY2JydCgxKSAgPSAgMVxyXG4gICAqICBjYnJ0KC0xKSA9IC0xXHJcbiAgICogIGNicnQoTikgID0gIE5cclxuICAgKiAgY2JydCgtSSkgPSAtSVxyXG4gICAqICBjYnJ0KEkpICA9ICBJXHJcbiAgICpcclxuICAgKiBNYXRoLmNicnQoeCkgPSAoeCA8IDAgPyAtTWF0aC5wb3coLXgsIDEvMykgOiBNYXRoLnBvdyh4LCAxLzMpKVxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5jdWJlUm9vdCA9IFAuY2JydCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBlLCBtLCBuLCByLCByZXAsIHMsIHNkLCB0LCB0MywgdDNwbHVzeCxcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIGlmICgheC5pc0Zpbml0ZSgpIHx8IHguaXNaZXJvKCkpIHJldHVybiBuZXcgQ3Rvcih4KTtcclxuICAgIGV4dGVybmFsID0gZmFsc2U7XHJcblxyXG4gICAgLy8gSW5pdGlhbCBlc3RpbWF0ZS5cclxuICAgIHMgPSB4LnMgKiBtYXRocG93KHgucyAqIHgsIDEgLyAzKTtcclxuXHJcbiAgICAgLy8gTWF0aC5jYnJ0IHVuZGVyZmxvdy9vdmVyZmxvdz9cclxuICAgICAvLyBQYXNzIHggdG8gTWF0aC5wb3cgYXMgaW50ZWdlciwgdGhlbiBhZGp1c3QgdGhlIGV4cG9uZW50IG9mIHRoZSByZXN1bHQuXHJcbiAgICBpZiAoIXMgfHwgTWF0aC5hYnMocykgPT0gMSAvIDApIHtcclxuICAgICAgbiA9IGRpZ2l0c1RvU3RyaW5nKHguZCk7XHJcbiAgICAgIGUgPSB4LmU7XHJcblxyXG4gICAgICAvLyBBZGp1c3QgbiBleHBvbmVudCBzbyBpdCBpcyBhIG11bHRpcGxlIG9mIDMgYXdheSBmcm9tIHggZXhwb25lbnQuXHJcbiAgICAgIGlmIChzID0gKGUgLSBuLmxlbmd0aCArIDEpICUgMykgbiArPSAocyA9PSAxIHx8IHMgPT0gLTIgPyAnMCcgOiAnMDAnKTtcclxuICAgICAgcyA9IG1hdGhwb3cobiwgMSAvIDMpO1xyXG5cclxuICAgICAgLy8gUmFyZWx5LCBlIG1heSBiZSBvbmUgbGVzcyB0aGFuIHRoZSByZXN1bHQgZXhwb25lbnQgdmFsdWUuXHJcbiAgICAgIGUgPSBtYXRoZmxvb3IoKGUgKyAxKSAvIDMpIC0gKGUgJSAzID09IChlIDwgMCA/IC0xIDogMikpO1xyXG5cclxuICAgICAgaWYgKHMgPT0gMSAvIDApIHtcclxuICAgICAgICBuID0gJzVlJyArIGU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbiA9IHMudG9FeHBvbmVudGlhbCgpO1xyXG4gICAgICAgIG4gPSBuLnNsaWNlKDAsIG4uaW5kZXhPZignZScpICsgMSkgKyBlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByID0gbmV3IEN0b3Iobik7XHJcbiAgICAgIHIucyA9IHgucztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHIgPSBuZXcgQ3RvcihzLnRvU3RyaW5nKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHNkID0gKGUgPSBDdG9yLnByZWNpc2lvbikgKyAzO1xyXG5cclxuICAgIC8vIEhhbGxleSdzIG1ldGhvZC5cclxuICAgIC8vIFRPRE8/IENvbXBhcmUgTmV3dG9uJ3MgbWV0aG9kLlxyXG4gICAgZm9yICg7Oykge1xyXG4gICAgICB0ID0gcjtcclxuICAgICAgdDMgPSB0LnRpbWVzKHQpLnRpbWVzKHQpO1xyXG4gICAgICB0M3BsdXN4ID0gdDMucGx1cyh4KTtcclxuICAgICAgciA9IGRpdmlkZSh0M3BsdXN4LnBsdXMoeCkudGltZXModCksIHQzcGx1c3gucGx1cyh0MyksIHNkICsgMiwgMSk7XHJcblxyXG4gICAgICAvLyBUT0RPPyBSZXBsYWNlIHdpdGggZm9yLWxvb3AgYW5kIGNoZWNrUm91bmRpbmdEaWdpdHMuXHJcbiAgICAgIGlmIChkaWdpdHNUb1N0cmluZyh0LmQpLnNsaWNlKDAsIHNkKSA9PT0gKG4gPSBkaWdpdHNUb1N0cmluZyhyLmQpKS5zbGljZSgwLCBzZCkpIHtcclxuICAgICAgICBuID0gbi5zbGljZShzZCAtIDMsIHNkICsgMSk7XHJcblxyXG4gICAgICAgIC8vIFRoZSA0dGggcm91bmRpbmcgZGlnaXQgbWF5IGJlIGluIGVycm9yIGJ5IC0xIHNvIGlmIHRoZSA0IHJvdW5kaW5nIGRpZ2l0cyBhcmUgOTk5OSBvciA0OTk5XHJcbiAgICAgICAgLy8gLCBpLmUuIGFwcHJvYWNoaW5nIGEgcm91bmRpbmcgYm91bmRhcnksIGNvbnRpbnVlIHRoZSBpdGVyYXRpb24uXHJcbiAgICAgICAgaWYgKG4gPT0gJzk5OTknIHx8ICFyZXAgJiYgbiA9PSAnNDk5OScpIHtcclxuXHJcbiAgICAgICAgICAvLyBPbiB0aGUgZmlyc3QgaXRlcmF0aW9uIG9ubHksIGNoZWNrIHRvIHNlZSBpZiByb3VuZGluZyB1cCBnaXZlcyB0aGUgZXhhY3QgcmVzdWx0IGFzIHRoZVxyXG4gICAgICAgICAgLy8gbmluZXMgbWF5IGluZmluaXRlbHkgcmVwZWF0LlxyXG4gICAgICAgICAgaWYgKCFyZXApIHtcclxuICAgICAgICAgICAgZmluYWxpc2UodCwgZSArIDEsIDApO1xyXG5cclxuICAgICAgICAgICAgaWYgKHQudGltZXModCkudGltZXModCkuZXEoeCkpIHtcclxuICAgICAgICAgICAgICByID0gdDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHNkICs9IDQ7XHJcbiAgICAgICAgICByZXAgPSAxO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgLy8gSWYgdGhlIHJvdW5kaW5nIGRpZ2l0cyBhcmUgbnVsbCwgMHswLDR9IG9yIDUwezAsM30sIGNoZWNrIGZvciBhbiBleGFjdCByZXN1bHQuXHJcbiAgICAgICAgICAvLyBJZiBub3QsIHRoZW4gdGhlcmUgYXJlIGZ1cnRoZXIgZGlnaXRzIGFuZCBtIHdpbGwgYmUgdHJ1dGh5LlxyXG4gICAgICAgICAgaWYgKCErbiB8fCAhK24uc2xpY2UoMSkgJiYgbi5jaGFyQXQoMCkgPT0gJzUnKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBUcnVuY2F0ZSB0byB0aGUgZmlyc3Qgcm91bmRpbmcgZGlnaXQuXHJcbiAgICAgICAgICAgIGZpbmFsaXNlKHIsIGUgKyAxLCAxKTtcclxuICAgICAgICAgICAgbSA9ICFyLnRpbWVzKHIpLnRpbWVzKHIpLmVxKHgpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGV4dGVybmFsID0gdHJ1ZTtcclxuXHJcbiAgICByZXR1cm4gZmluYWxpc2UociwgZSwgQ3Rvci5yb3VuZGluZywgbSk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIHRoZSBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMgb2YgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbC5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuZGVjaW1hbFBsYWNlcyA9IFAuZHAgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgdyxcclxuICAgICAgZCA9IHRoaXMuZCxcclxuICAgICAgbiA9IE5hTjtcclxuXHJcbiAgICBpZiAoZCkge1xyXG4gICAgICB3ID0gZC5sZW5ndGggLSAxO1xyXG4gICAgICBuID0gKHcgLSBtYXRoZmxvb3IodGhpcy5lIC8gTE9HX0JBU0UpKSAqIExPR19CQVNFO1xyXG5cclxuICAgICAgLy8gU3VidHJhY3QgdGhlIG51bWJlciBvZiB0cmFpbGluZyB6ZXJvcyBvZiB0aGUgbGFzdCB3b3JkLlxyXG4gICAgICB3ID0gZFt3XTtcclxuICAgICAgaWYgKHcpIGZvciAoOyB3ICUgMTAgPT0gMDsgdyAvPSAxMCkgbi0tO1xyXG4gICAgICBpZiAobiA8IDApIG4gPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqICBuIC8gMCA9IElcclxuICAgKiAgbiAvIE4gPSBOXHJcbiAgICogIG4gLyBJID0gMFxyXG4gICAqICAwIC8gbiA9IDBcclxuICAgKiAgMCAvIDAgPSBOXHJcbiAgICogIDAgLyBOID0gTlxyXG4gICAqICAwIC8gSSA9IDBcclxuICAgKiAgTiAvIG4gPSBOXHJcbiAgICogIE4gLyAwID0gTlxyXG4gICAqICBOIC8gTiA9IE5cclxuICAgKiAgTiAvIEkgPSBOXHJcbiAgICogIEkgLyBuID0gSVxyXG4gICAqICBJIC8gMCA9IElcclxuICAgKiAgSSAvIE4gPSBOXHJcbiAgICogIEkgLyBJID0gTlxyXG4gICAqXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCBkaXZpZGVkIGJ5IGB5YCwgcm91bmRlZCB0b1xyXG4gICAqIGBwcmVjaXNpb25gIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKi9cclxuICBQLmRpdmlkZWRCeSA9IFAuZGl2ID0gZnVuY3Rpb24gKHkpIHtcclxuICAgIHJldHVybiBkaXZpZGUodGhpcywgbmV3IHRoaXMuY29uc3RydWN0b3IoeSkpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBpbnRlZ2VyIHBhcnQgb2YgZGl2aWRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbFxyXG4gICAqIGJ5IHRoZSB2YWx1ZSBvZiBgeWAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmAgc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuZGl2aWRlZFRvSW50ZWdlckJ5ID0gUC5kaXZUb0ludCA9IGZ1bmN0aW9uICh5KSB7XHJcbiAgICB2YXIgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG4gICAgcmV0dXJuIGZpbmFsaXNlKGRpdmlkZSh4LCBuZXcgQ3Rvcih5KSwgMCwgMSwgMSksIEN0b3IucHJlY2lzaW9uLCBDdG9yLnJvdW5kaW5nKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGlzIGVxdWFsIHRvIHRoZSB2YWx1ZSBvZiBgeWAsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICpcclxuICAgKi9cclxuICBQLmVxdWFscyA9IFAuZXEgPSBmdW5jdGlvbiAoeSkge1xyXG4gICAgcmV0dXJuIHRoaXMuY21wKHkpID09PSAwO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgcm91bmRlZCB0byBhIHdob2xlIG51bWJlciBpbiB0aGVcclxuICAgKiBkaXJlY3Rpb24gb2YgbmVnYXRpdmUgSW5maW5pdHkuXHJcbiAgICpcclxuICAgKi9cclxuICBQLmZsb29yID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIGZpbmFsaXNlKG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMpLCB0aGlzLmUgKyAxLCAzKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGlzIGdyZWF0ZXIgdGhhbiB0aGUgdmFsdWUgb2YgYHlgLCBvdGhlcndpc2UgcmV0dXJuXHJcbiAgICogZmFsc2UuXHJcbiAgICpcclxuICAgKi9cclxuICBQLmdyZWF0ZXJUaGFuID0gUC5ndCA9IGZ1bmN0aW9uICh5KSB7XHJcbiAgICByZXR1cm4gdGhpcy5jbXAoeSkgPiAwO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSB2YWx1ZSBvZiBgeWAsXHJcbiAgICogb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuZ3JlYXRlclRoYW5PckVxdWFsVG8gPSBQLmd0ZSA9IGZ1bmN0aW9uICh5KSB7XHJcbiAgICB2YXIgayA9IHRoaXMuY21wKHkpO1xyXG4gICAgcmV0dXJuIGsgPT0gMSB8fCBrID09PSAwO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBoeXBlcmJvbGljIGNvc2luZSBvZiB0aGUgdmFsdWUgaW4gcmFkaWFucyBvZiB0aGlzXHJcbiAgICogRGVjaW1hbC5cclxuICAgKlxyXG4gICAqIERvbWFpbjogWy1JbmZpbml0eSwgSW5maW5pdHldXHJcbiAgICogUmFuZ2U6IFsxLCBJbmZpbml0eV1cclxuICAgKlxyXG4gICAqIGNvc2goeCkgPSAxICsgeF4yLzIhICsgeF40LzQhICsgeF42LzYhICsgLi4uXHJcbiAgICpcclxuICAgKiBjb3NoKDApICAgICAgICAgPSAxXHJcbiAgICogY29zaCgtMCkgICAgICAgID0gMVxyXG4gICAqIGNvc2goSW5maW5pdHkpICA9IEluZmluaXR5XHJcbiAgICogY29zaCgtSW5maW5pdHkpID0gSW5maW5pdHlcclxuICAgKiBjb3NoKE5hTikgICAgICAgPSBOYU5cclxuICAgKlxyXG4gICAqICB4ICAgICAgICB0aW1lIHRha2VuIChtcykgICByZXN1bHRcclxuICAgKiAxMDAwICAgICAgOSAgICAgICAgICAgICAgICAgOS44NTAzNTU1NzAwODUyMzQ5Njk0ZSs0MzNcclxuICAgKiAxMDAwMCAgICAgMjUgICAgICAgICAgICAgICAgNC40MDM0MDkxMTI4MzE0NjA3OTM2ZSs0MzQyXHJcbiAgICogMTAwMDAwICAgIDE3MSAgICAgICAgICAgICAgIDEuNDAzMzMxNjgwMjEzMDYxNTg5N2UrNDM0MjlcclxuICAgKiAxMDAwMDAwICAgMzgxNyAgICAgICAgICAgICAgMS41MTY2MDc2OTg0MDEwNDM3NzI1ZSs0MzQyOTRcclxuICAgKiAxMDAwMDAwMCAgYWJhbmRvbmVkIGFmdGVyIDIgbWludXRlIHdhaXRcclxuICAgKlxyXG4gICAqIFRPRE8/IENvbXBhcmUgcGVyZm9ybWFuY2Ugb2YgY29zaCh4KSA9IDAuNSAqIChleHAoeCkgKyBleHAoLXgpKVxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5oeXBlcmJvbGljQ29zaW5lID0gUC5jb3NoID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGssIG4sIHByLCBybSwgbGVuLFxyXG4gICAgICB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3IsXHJcbiAgICAgIG9uZSA9IG5ldyBDdG9yKDEpO1xyXG5cclxuICAgIGlmICgheC5pc0Zpbml0ZSgpKSByZXR1cm4gbmV3IEN0b3IoeC5zID8gMSAvIDAgOiBOYU4pO1xyXG4gICAgaWYgKHguaXNaZXJvKCkpIHJldHVybiBvbmU7XHJcblxyXG4gICAgcHIgPSBDdG9yLnByZWNpc2lvbjtcclxuICAgIHJtID0gQ3Rvci5yb3VuZGluZztcclxuICAgIEN0b3IucHJlY2lzaW9uID0gcHIgKyBNYXRoLm1heCh4LmUsIHguc2QoKSkgKyA0O1xyXG4gICAgQ3Rvci5yb3VuZGluZyA9IDE7XHJcbiAgICBsZW4gPSB4LmQubGVuZ3RoO1xyXG5cclxuICAgIC8vIEFyZ3VtZW50IHJlZHVjdGlvbjogY29zKDR4KSA9IDEgLSA4Y29zXjIoeCkgKyA4Y29zXjQoeCkgKyAxXHJcbiAgICAvLyBpLmUuIGNvcyh4KSA9IDEgLSBjb3NeMih4LzQpKDggLSA4Y29zXjIoeC80KSlcclxuXHJcbiAgICAvLyBFc3RpbWF0ZSB0aGUgb3B0aW11bSBudW1iZXIgb2YgdGltZXMgdG8gdXNlIHRoZSBhcmd1bWVudCByZWR1Y3Rpb24uXHJcbiAgICAvLyBUT0RPPyBFc3RpbWF0aW9uIHJldXNlZCBmcm9tIGNvc2luZSgpIGFuZCBtYXkgbm90IGJlIG9wdGltYWwgaGVyZS5cclxuICAgIGlmIChsZW4gPCAzMikge1xyXG4gICAgICBrID0gTWF0aC5jZWlsKGxlbiAvIDMpO1xyXG4gICAgICBuID0gKDEgLyB0aW55UG93KDQsIGspKS50b1N0cmluZygpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgayA9IDE2O1xyXG4gICAgICBuID0gJzIuMzI4MzA2NDM2NTM4Njk2Mjg5MDYyNWUtMTAnO1xyXG4gICAgfVxyXG5cclxuICAgIHggPSB0YXlsb3JTZXJpZXMoQ3RvciwgMSwgeC50aW1lcyhuKSwgbmV3IEN0b3IoMSksIHRydWUpO1xyXG5cclxuICAgIC8vIFJldmVyc2UgYXJndW1lbnQgcmVkdWN0aW9uXHJcbiAgICB2YXIgY29zaDJfeCxcclxuICAgICAgaSA9IGssXHJcbiAgICAgIGQ4ID0gbmV3IEN0b3IoOCk7XHJcbiAgICBmb3IgKDsgaS0tOykge1xyXG4gICAgICBjb3NoMl94ID0geC50aW1lcyh4KTtcclxuICAgICAgeCA9IG9uZS5taW51cyhjb3NoMl94LnRpbWVzKGQ4Lm1pbnVzKGNvc2gyX3gudGltZXMoZDgpKSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmaW5hbGlzZSh4LCBDdG9yLnByZWNpc2lvbiA9IHByLCBDdG9yLnJvdW5kaW5nID0gcm0sIHRydWUpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBoeXBlcmJvbGljIHNpbmUgb2YgdGhlIHZhbHVlIGluIHJhZGlhbnMgb2YgdGhpc1xyXG4gICAqIERlY2ltYWwuXHJcbiAgICpcclxuICAgKiBEb21haW46IFstSW5maW5pdHksIEluZmluaXR5XVxyXG4gICAqIFJhbmdlOiBbLUluZmluaXR5LCBJbmZpbml0eV1cclxuICAgKlxyXG4gICAqIHNpbmgoeCkgPSB4ICsgeF4zLzMhICsgeF41LzUhICsgeF43LzchICsgLi4uXHJcbiAgICpcclxuICAgKiBzaW5oKDApICAgICAgICAgPSAwXHJcbiAgICogc2luaCgtMCkgICAgICAgID0gLTBcclxuICAgKiBzaW5oKEluZmluaXR5KSAgPSBJbmZpbml0eVxyXG4gICAqIHNpbmgoLUluZmluaXR5KSA9IC1JbmZpbml0eVxyXG4gICAqIHNpbmgoTmFOKSAgICAgICA9IE5hTlxyXG4gICAqXHJcbiAgICogeCAgICAgICAgdGltZSB0YWtlbiAobXMpXHJcbiAgICogMTAgICAgICAgMiBtc1xyXG4gICAqIDEwMCAgICAgIDUgbXNcclxuICAgKiAxMDAwICAgICAxNCBtc1xyXG4gICAqIDEwMDAwICAgIDgyIG1zXHJcbiAgICogMTAwMDAwICAgODg2IG1zICAgICAgICAgICAgMS40MDMzMzE2ODAyMTMwNjE1ODk3ZSs0MzQyOVxyXG4gICAqIDIwMDAwMCAgIDI2MTMgbXNcclxuICAgKiAzMDAwMDAgICA1NDA3IG1zXHJcbiAgICogNDAwMDAwICAgODgyNCBtc1xyXG4gICAqIDUwMDAwMCAgIDEzMDI2IG1zICAgICAgICAgIDguNzA4MDY0MzYxMjcxODA4NDEyOWUrMjE3MTQ2XHJcbiAgICogMTAwMDAwMCAgNDg1NDMgbXNcclxuICAgKlxyXG4gICAqIFRPRE8/IENvbXBhcmUgcGVyZm9ybWFuY2Ugb2Ygc2luaCh4KSA9IDAuNSAqIChleHAoeCkgLSBleHAoLXgpKVxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5oeXBlcmJvbGljU2luZSA9IFAuc2luaCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBrLCBwciwgcm0sIGxlbixcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIGlmICgheC5pc0Zpbml0ZSgpIHx8IHguaXNaZXJvKCkpIHJldHVybiBuZXcgQ3Rvcih4KTtcclxuXHJcbiAgICBwciA9IEN0b3IucHJlY2lzaW9uO1xyXG4gICAgcm0gPSBDdG9yLnJvdW5kaW5nO1xyXG4gICAgQ3Rvci5wcmVjaXNpb24gPSBwciArIE1hdGgubWF4KHguZSwgeC5zZCgpKSArIDQ7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gMTtcclxuICAgIGxlbiA9IHguZC5sZW5ndGg7XHJcblxyXG4gICAgaWYgKGxlbiA8IDMpIHtcclxuICAgICAgeCA9IHRheWxvclNlcmllcyhDdG9yLCAyLCB4LCB4LCB0cnVlKTtcclxuICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAvLyBBbHRlcm5hdGl2ZSBhcmd1bWVudCByZWR1Y3Rpb246IHNpbmgoM3gpID0gc2luaCh4KSgzICsgNHNpbmheMih4KSlcclxuICAgICAgLy8gaS5lLiBzaW5oKHgpID0gc2luaCh4LzMpKDMgKyA0c2luaF4yKHgvMykpXHJcbiAgICAgIC8vIDMgbXVsdGlwbGljYXRpb25zIGFuZCAxIGFkZGl0aW9uXHJcblxyXG4gICAgICAvLyBBcmd1bWVudCByZWR1Y3Rpb246IHNpbmgoNXgpID0gc2luaCh4KSg1ICsgc2luaF4yKHgpKDIwICsgMTZzaW5oXjIoeCkpKVxyXG4gICAgICAvLyBpLmUuIHNpbmgoeCkgPSBzaW5oKHgvNSkoNSArIHNpbmheMih4LzUpKDIwICsgMTZzaW5oXjIoeC81KSkpXHJcbiAgICAgIC8vIDQgbXVsdGlwbGljYXRpb25zIGFuZCAyIGFkZGl0aW9uc1xyXG5cclxuICAgICAgLy8gRXN0aW1hdGUgdGhlIG9wdGltdW0gbnVtYmVyIG9mIHRpbWVzIHRvIHVzZSB0aGUgYXJndW1lbnQgcmVkdWN0aW9uLlxyXG4gICAgICBrID0gMS40ICogTWF0aC5zcXJ0KGxlbik7XHJcbiAgICAgIGsgPSBrID4gMTYgPyAxNiA6IGsgfCAwO1xyXG5cclxuICAgICAgeCA9IHgudGltZXMoMSAvIHRpbnlQb3coNSwgaykpO1xyXG4gICAgICB4ID0gdGF5bG9yU2VyaWVzKEN0b3IsIDIsIHgsIHgsIHRydWUpO1xyXG5cclxuICAgICAgLy8gUmV2ZXJzZSBhcmd1bWVudCByZWR1Y3Rpb25cclxuICAgICAgdmFyIHNpbmgyX3gsXHJcbiAgICAgICAgZDUgPSBuZXcgQ3Rvcig1KSxcclxuICAgICAgICBkMTYgPSBuZXcgQ3RvcigxNiksXHJcbiAgICAgICAgZDIwID0gbmV3IEN0b3IoMjApO1xyXG4gICAgICBmb3IgKDsgay0tOykge1xyXG4gICAgICAgIHNpbmgyX3ggPSB4LnRpbWVzKHgpO1xyXG4gICAgICAgIHggPSB4LnRpbWVzKGQ1LnBsdXMoc2luaDJfeC50aW1lcyhkMTYudGltZXMoc2luaDJfeCkucGx1cyhkMjApKSkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgQ3Rvci5wcmVjaXNpb24gPSBwcjtcclxuICAgIEN0b3Iucm91bmRpbmcgPSBybTtcclxuXHJcbiAgICByZXR1cm4gZmluYWxpc2UoeCwgcHIsIHJtLCB0cnVlKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgaHlwZXJib2xpYyB0YW5nZW50IG9mIHRoZSB2YWx1ZSBpbiByYWRpYW5zIG9mIHRoaXNcclxuICAgKiBEZWNpbWFsLlxyXG4gICAqXHJcbiAgICogRG9tYWluOiBbLUluZmluaXR5LCBJbmZpbml0eV1cclxuICAgKiBSYW5nZTogWy0xLCAxXVxyXG4gICAqXHJcbiAgICogdGFuaCh4KSA9IHNpbmgoeCkgLyBjb3NoKHgpXHJcbiAgICpcclxuICAgKiB0YW5oKDApICAgICAgICAgPSAwXHJcbiAgICogdGFuaCgtMCkgICAgICAgID0gLTBcclxuICAgKiB0YW5oKEluZmluaXR5KSAgPSAxXHJcbiAgICogdGFuaCgtSW5maW5pdHkpID0gLTFcclxuICAgKiB0YW5oKE5hTikgICAgICAgPSBOYU5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuaHlwZXJib2xpY1RhbmdlbnQgPSBQLnRhbmggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgcHIsIHJtLFxyXG4gICAgICB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7XHJcblxyXG4gICAgaWYgKCF4LmlzRmluaXRlKCkpIHJldHVybiBuZXcgQ3Rvcih4LnMpO1xyXG4gICAgaWYgKHguaXNaZXJvKCkpIHJldHVybiBuZXcgQ3Rvcih4KTtcclxuXHJcbiAgICBwciA9IEN0b3IucHJlY2lzaW9uO1xyXG4gICAgcm0gPSBDdG9yLnJvdW5kaW5nO1xyXG4gICAgQ3Rvci5wcmVjaXNpb24gPSBwciArIDc7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gMTtcclxuXHJcbiAgICByZXR1cm4gZGl2aWRlKHguc2luaCgpLCB4LmNvc2goKSwgQ3Rvci5wcmVjaXNpb24gPSBwciwgQ3Rvci5yb3VuZGluZyA9IHJtKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgYXJjY29zaW5lIChpbnZlcnNlIGNvc2luZSkgaW4gcmFkaWFucyBvZiB0aGUgdmFsdWUgb2ZcclxuICAgKiB0aGlzIERlY2ltYWwuXHJcbiAgICpcclxuICAgKiBEb21haW46IFstMSwgMV1cclxuICAgKiBSYW5nZTogWzAsIHBpXVxyXG4gICAqXHJcbiAgICogYWNvcyh4KSA9IHBpLzIgLSBhc2luKHgpXHJcbiAgICpcclxuICAgKiBhY29zKDApICAgICAgID0gcGkvMlxyXG4gICAqIGFjb3MoLTApICAgICAgPSBwaS8yXHJcbiAgICogYWNvcygxKSAgICAgICA9IDBcclxuICAgKiBhY29zKC0xKSAgICAgID0gcGlcclxuICAgKiBhY29zKDEvMikgICAgID0gcGkvM1xyXG4gICAqIGFjb3MoLTEvMikgICAgPSAyKnBpLzNcclxuICAgKiBhY29zKHx4fCA+IDEpID0gTmFOXHJcbiAgICogYWNvcyhOYU4pICAgICA9IE5hTlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5pbnZlcnNlQ29zaW5lID0gUC5hY29zID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGhhbGZQaSxcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yLFxyXG4gICAgICBrID0geC5hYnMoKS5jbXAoMSksXHJcbiAgICAgIHByID0gQ3Rvci5wcmVjaXNpb24sXHJcbiAgICAgIHJtID0gQ3Rvci5yb3VuZGluZztcclxuXHJcbiAgICBpZiAoayAhPT0gLTEpIHtcclxuICAgICAgcmV0dXJuIGsgPT09IDBcclxuICAgICAgICAvLyB8eHwgaXMgMVxyXG4gICAgICAgID8geC5pc05lZygpID8gZ2V0UGkoQ3RvciwgcHIsIHJtKSA6IG5ldyBDdG9yKDApXHJcbiAgICAgICAgLy8gfHh8ID4gMSBvciB4IGlzIE5hTlxyXG4gICAgICAgIDogbmV3IEN0b3IoTmFOKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoeC5pc1plcm8oKSkgcmV0dXJuIGdldFBpKEN0b3IsIHByICsgNCwgcm0pLnRpbWVzKDAuNSk7XHJcblxyXG4gICAgLy8gVE9ETz8gU3BlY2lhbCBjYXNlIGFjb3MoMC41KSA9IHBpLzMgYW5kIGFjb3MoLTAuNSkgPSAyKnBpLzNcclxuXHJcbiAgICBDdG9yLnByZWNpc2lvbiA9IHByICsgNjtcclxuICAgIEN0b3Iucm91bmRpbmcgPSAxO1xyXG5cclxuICAgIHggPSB4LmFzaW4oKTtcclxuICAgIGhhbGZQaSA9IGdldFBpKEN0b3IsIHByICsgNCwgcm0pLnRpbWVzKDAuNSk7XHJcblxyXG4gICAgQ3Rvci5wcmVjaXNpb24gPSBwcjtcclxuICAgIEN0b3Iucm91bmRpbmcgPSBybTtcclxuXHJcbiAgICByZXR1cm4gaGFsZlBpLm1pbnVzKHgpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBpbnZlcnNlIG9mIHRoZSBoeXBlcmJvbGljIGNvc2luZSBpbiByYWRpYW5zIG9mIHRoZVxyXG4gICAqIHZhbHVlIG9mIHRoaXMgRGVjaW1hbC5cclxuICAgKlxyXG4gICAqIERvbWFpbjogWzEsIEluZmluaXR5XVxyXG4gICAqIFJhbmdlOiBbMCwgSW5maW5pdHldXHJcbiAgICpcclxuICAgKiBhY29zaCh4KSA9IGxuKHggKyBzcXJ0KHheMiAtIDEpKVxyXG4gICAqXHJcbiAgICogYWNvc2goeCA8IDEpICAgICA9IE5hTlxyXG4gICAqIGFjb3NoKE5hTikgICAgICAgPSBOYU5cclxuICAgKiBhY29zaChJbmZpbml0eSkgID0gSW5maW5pdHlcclxuICAgKiBhY29zaCgtSW5maW5pdHkpID0gTmFOXHJcbiAgICogYWNvc2goMCkgICAgICAgICA9IE5hTlxyXG4gICAqIGFjb3NoKC0wKSAgICAgICAgPSBOYU5cclxuICAgKiBhY29zaCgxKSAgICAgICAgID0gMFxyXG4gICAqIGFjb3NoKC0xKSAgICAgICAgPSBOYU5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuaW52ZXJzZUh5cGVyYm9saWNDb3NpbmUgPSBQLmFjb3NoID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHByLCBybSxcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIGlmICh4Lmx0ZSgxKSkgcmV0dXJuIG5ldyBDdG9yKHguZXEoMSkgPyAwIDogTmFOKTtcclxuICAgIGlmICgheC5pc0Zpbml0ZSgpKSByZXR1cm4gbmV3IEN0b3IoeCk7XHJcblxyXG4gICAgcHIgPSBDdG9yLnByZWNpc2lvbjtcclxuICAgIHJtID0gQ3Rvci5yb3VuZGluZztcclxuICAgIEN0b3IucHJlY2lzaW9uID0gcHIgKyBNYXRoLm1heChNYXRoLmFicyh4LmUpLCB4LnNkKCkpICsgNDtcclxuICAgIEN0b3Iucm91bmRpbmcgPSAxO1xyXG4gICAgZXh0ZXJuYWwgPSBmYWxzZTtcclxuXHJcbiAgICB4ID0geC50aW1lcyh4KS5taW51cygxKS5zcXJ0KCkucGx1cyh4KTtcclxuXHJcbiAgICBleHRlcm5hbCA9IHRydWU7XHJcbiAgICBDdG9yLnByZWNpc2lvbiA9IHByO1xyXG4gICAgQ3Rvci5yb3VuZGluZyA9IHJtO1xyXG5cclxuICAgIHJldHVybiB4LmxuKCk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGludmVyc2Ugb2YgdGhlIGh5cGVyYm9saWMgc2luZSBpbiByYWRpYW5zIG9mIHRoZSB2YWx1ZVxyXG4gICAqIG9mIHRoaXMgRGVjaW1hbC5cclxuICAgKlxyXG4gICAqIERvbWFpbjogWy1JbmZpbml0eSwgSW5maW5pdHldXHJcbiAgICogUmFuZ2U6IFstSW5maW5pdHksIEluZmluaXR5XVxyXG4gICAqXHJcbiAgICogYXNpbmgoeCkgPSBsbih4ICsgc3FydCh4XjIgKyAxKSlcclxuICAgKlxyXG4gICAqIGFzaW5oKE5hTikgICAgICAgPSBOYU5cclxuICAgKiBhc2luaChJbmZpbml0eSkgID0gSW5maW5pdHlcclxuICAgKiBhc2luaCgtSW5maW5pdHkpID0gLUluZmluaXR5XHJcbiAgICogYXNpbmgoMCkgICAgICAgICA9IDBcclxuICAgKiBhc2luaCgtMCkgICAgICAgID0gLTBcclxuICAgKlxyXG4gICAqL1xyXG4gIFAuaW52ZXJzZUh5cGVyYm9saWNTaW5lID0gUC5hc2luaCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBwciwgcm0sXHJcbiAgICAgIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjtcclxuXHJcbiAgICBpZiAoIXguaXNGaW5pdGUoKSB8fCB4LmlzWmVybygpKSByZXR1cm4gbmV3IEN0b3IoeCk7XHJcblxyXG4gICAgcHIgPSBDdG9yLnByZWNpc2lvbjtcclxuICAgIHJtID0gQ3Rvci5yb3VuZGluZztcclxuICAgIEN0b3IucHJlY2lzaW9uID0gcHIgKyAyICogTWF0aC5tYXgoTWF0aC5hYnMoeC5lKSwgeC5zZCgpKSArIDY7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gMTtcclxuICAgIGV4dGVybmFsID0gZmFsc2U7XHJcblxyXG4gICAgeCA9IHgudGltZXMoeCkucGx1cygxKS5zcXJ0KCkucGx1cyh4KTtcclxuXHJcbiAgICBleHRlcm5hbCA9IHRydWU7XHJcbiAgICBDdG9yLnByZWNpc2lvbiA9IHByO1xyXG4gICAgQ3Rvci5yb3VuZGluZyA9IHJtO1xyXG5cclxuICAgIHJldHVybiB4LmxuKCk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGludmVyc2Ugb2YgdGhlIGh5cGVyYm9saWMgdGFuZ2VudCBpbiByYWRpYW5zIG9mIHRoZVxyXG4gICAqIHZhbHVlIG9mIHRoaXMgRGVjaW1hbC5cclxuICAgKlxyXG4gICAqIERvbWFpbjogWy0xLCAxXVxyXG4gICAqIFJhbmdlOiBbLUluZmluaXR5LCBJbmZpbml0eV1cclxuICAgKlxyXG4gICAqIGF0YW5oKHgpID0gMC41ICogbG4oKDEgKyB4KSAvICgxIC0geCkpXHJcbiAgICpcclxuICAgKiBhdGFuaCh8eHwgPiAxKSAgID0gTmFOXHJcbiAgICogYXRhbmgoTmFOKSAgICAgICA9IE5hTlxyXG4gICAqIGF0YW5oKEluZmluaXR5KSAgPSBOYU5cclxuICAgKiBhdGFuaCgtSW5maW5pdHkpID0gTmFOXHJcbiAgICogYXRhbmgoMCkgICAgICAgICA9IDBcclxuICAgKiBhdGFuaCgtMCkgICAgICAgID0gLTBcclxuICAgKiBhdGFuaCgxKSAgICAgICAgID0gSW5maW5pdHlcclxuICAgKiBhdGFuaCgtMSkgICAgICAgID0gLUluZmluaXR5XHJcbiAgICpcclxuICAgKi9cclxuICBQLmludmVyc2VIeXBlcmJvbGljVGFuZ2VudCA9IFAuYXRhbmggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgcHIsIHJtLCB3cHIsIHhzZCxcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIGlmICgheC5pc0Zpbml0ZSgpKSByZXR1cm4gbmV3IEN0b3IoTmFOKTtcclxuICAgIGlmICh4LmUgPj0gMCkgcmV0dXJuIG5ldyBDdG9yKHguYWJzKCkuZXEoMSkgPyB4LnMgLyAwIDogeC5pc1plcm8oKSA/IHggOiBOYU4pO1xyXG5cclxuICAgIHByID0gQ3Rvci5wcmVjaXNpb247XHJcbiAgICBybSA9IEN0b3Iucm91bmRpbmc7XHJcbiAgICB4c2QgPSB4LnNkKCk7XHJcblxyXG4gICAgaWYgKE1hdGgubWF4KHhzZCwgcHIpIDwgMiAqIC14LmUgLSAxKSByZXR1cm4gZmluYWxpc2UobmV3IEN0b3IoeCksIHByLCBybSwgdHJ1ZSk7XHJcblxyXG4gICAgQ3Rvci5wcmVjaXNpb24gPSB3cHIgPSB4c2QgLSB4LmU7XHJcblxyXG4gICAgeCA9IGRpdmlkZSh4LnBsdXMoMSksIG5ldyBDdG9yKDEpLm1pbnVzKHgpLCB3cHIgKyBwciwgMSk7XHJcblxyXG4gICAgQ3Rvci5wcmVjaXNpb24gPSBwciArIDQ7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gMTtcclxuXHJcbiAgICB4ID0geC5sbigpO1xyXG5cclxuICAgIEN0b3IucHJlY2lzaW9uID0gcHI7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gcm07XHJcblxyXG4gICAgcmV0dXJuIHgudGltZXMoMC41KTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgYXJjc2luZSAoaW52ZXJzZSBzaW5lKSBpbiByYWRpYW5zIG9mIHRoZSB2YWx1ZSBvZiB0aGlzXHJcbiAgICogRGVjaW1hbC5cclxuICAgKlxyXG4gICAqIERvbWFpbjogWy1JbmZpbml0eSwgSW5maW5pdHldXHJcbiAgICogUmFuZ2U6IFstcGkvMiwgcGkvMl1cclxuICAgKlxyXG4gICAqIGFzaW4oeCkgPSAyKmF0YW4oeC8oMSArIHNxcnQoMSAtIHheMikpKVxyXG4gICAqXHJcbiAgICogYXNpbigwKSAgICAgICA9IDBcclxuICAgKiBhc2luKC0wKSAgICAgID0gLTBcclxuICAgKiBhc2luKDEvMikgICAgID0gcGkvNlxyXG4gICAqIGFzaW4oLTEvMikgICAgPSAtcGkvNlxyXG4gICAqIGFzaW4oMSkgICAgICAgPSBwaS8yXHJcbiAgICogYXNpbigtMSkgICAgICA9IC1waS8yXHJcbiAgICogYXNpbih8eHwgPiAxKSA9IE5hTlxyXG4gICAqIGFzaW4oTmFOKSAgICAgPSBOYU5cclxuICAgKlxyXG4gICAqIFRPRE8/IENvbXBhcmUgcGVyZm9ybWFuY2Ugb2YgVGF5bG9yIHNlcmllcy5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuaW52ZXJzZVNpbmUgPSBQLmFzaW4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgaGFsZlBpLCBrLFxyXG4gICAgICBwciwgcm0sXHJcbiAgICAgIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjtcclxuXHJcbiAgICBpZiAoeC5pc1plcm8oKSkgcmV0dXJuIG5ldyBDdG9yKHgpO1xyXG5cclxuICAgIGsgPSB4LmFicygpLmNtcCgxKTtcclxuICAgIHByID0gQ3Rvci5wcmVjaXNpb247XHJcbiAgICBybSA9IEN0b3Iucm91bmRpbmc7XHJcblxyXG4gICAgaWYgKGsgIT09IC0xKSB7XHJcblxyXG4gICAgICAvLyB8eHwgaXMgMVxyXG4gICAgICBpZiAoayA9PT0gMCkge1xyXG4gICAgICAgIGhhbGZQaSA9IGdldFBpKEN0b3IsIHByICsgNCwgcm0pLnRpbWVzKDAuNSk7XHJcbiAgICAgICAgaGFsZlBpLnMgPSB4LnM7XHJcbiAgICAgICAgcmV0dXJuIGhhbGZQaTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gfHh8ID4gMSBvciB4IGlzIE5hTlxyXG4gICAgICByZXR1cm4gbmV3IEN0b3IoTmFOKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBUT0RPPyBTcGVjaWFsIGNhc2UgYXNpbigxLzIpID0gcGkvNiBhbmQgYXNpbigtMS8yKSA9IC1waS82XHJcblxyXG4gICAgQ3Rvci5wcmVjaXNpb24gPSBwciArIDY7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gMTtcclxuXHJcbiAgICB4ID0geC5kaXYobmV3IEN0b3IoMSkubWludXMoeC50aW1lcyh4KSkuc3FydCgpLnBsdXMoMSkpLmF0YW4oKTtcclxuXHJcbiAgICBDdG9yLnByZWNpc2lvbiA9IHByO1xyXG4gICAgQ3Rvci5yb3VuZGluZyA9IHJtO1xyXG5cclxuICAgIHJldHVybiB4LnRpbWVzKDIpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBhcmN0YW5nZW50IChpbnZlcnNlIHRhbmdlbnQpIGluIHJhZGlhbnMgb2YgdGhlIHZhbHVlXHJcbiAgICogb2YgdGhpcyBEZWNpbWFsLlxyXG4gICAqXHJcbiAgICogRG9tYWluOiBbLUluZmluaXR5LCBJbmZpbml0eV1cclxuICAgKiBSYW5nZTogWy1waS8yLCBwaS8yXVxyXG4gICAqXHJcbiAgICogYXRhbih4KSA9IHggLSB4XjMvMyArIHheNS81IC0geF43LzcgKyAuLi5cclxuICAgKlxyXG4gICAqIGF0YW4oMCkgICAgICAgICA9IDBcclxuICAgKiBhdGFuKC0wKSAgICAgICAgPSAtMFxyXG4gICAqIGF0YW4oMSkgICAgICAgICA9IHBpLzRcclxuICAgKiBhdGFuKC0xKSAgICAgICAgPSAtcGkvNFxyXG4gICAqIGF0YW4oSW5maW5pdHkpICA9IHBpLzJcclxuICAgKiBhdGFuKC1JbmZpbml0eSkgPSAtcGkvMlxyXG4gICAqIGF0YW4oTmFOKSAgICAgICA9IE5hTlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5pbnZlcnNlVGFuZ2VudCA9IFAuYXRhbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBpLCBqLCBrLCBuLCBweCwgdCwgciwgd3ByLCB4MixcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yLFxyXG4gICAgICBwciA9IEN0b3IucHJlY2lzaW9uLFxyXG4gICAgICBybSA9IEN0b3Iucm91bmRpbmc7XHJcblxyXG4gICAgaWYgKCF4LmlzRmluaXRlKCkpIHtcclxuICAgICAgaWYgKCF4LnMpIHJldHVybiBuZXcgQ3RvcihOYU4pO1xyXG4gICAgICBpZiAocHIgKyA0IDw9IFBJX1BSRUNJU0lPTikge1xyXG4gICAgICAgIHIgPSBnZXRQaShDdG9yLCBwciArIDQsIHJtKS50aW1lcygwLjUpO1xyXG4gICAgICAgIHIucyA9IHgucztcclxuICAgICAgICByZXR1cm4gcjtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh4LmlzWmVybygpKSB7XHJcbiAgICAgIHJldHVybiBuZXcgQ3Rvcih4KTtcclxuICAgIH0gZWxzZSBpZiAoeC5hYnMoKS5lcSgxKSAmJiBwciArIDQgPD0gUElfUFJFQ0lTSU9OKSB7XHJcbiAgICAgIHIgPSBnZXRQaShDdG9yLCBwciArIDQsIHJtKS50aW1lcygwLjI1KTtcclxuICAgICAgci5zID0geC5zO1xyXG4gICAgICByZXR1cm4gcjtcclxuICAgIH1cclxuXHJcbiAgICBDdG9yLnByZWNpc2lvbiA9IHdwciA9IHByICsgMTA7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gMTtcclxuXHJcbiAgICAvLyBUT0RPPyBpZiAoeCA+PSAxICYmIHByIDw9IFBJX1BSRUNJU0lPTikgYXRhbih4KSA9IGhhbGZQaSAqIHgucyAtIGF0YW4oMSAvIHgpO1xyXG5cclxuICAgIC8vIEFyZ3VtZW50IHJlZHVjdGlvblxyXG4gICAgLy8gRW5zdXJlIHx4fCA8IDAuNDJcclxuICAgIC8vIGF0YW4oeCkgPSAyICogYXRhbih4IC8gKDEgKyBzcXJ0KDEgKyB4XjIpKSlcclxuXHJcbiAgICBrID0gTWF0aC5taW4oMjgsIHdwciAvIExPR19CQVNFICsgMiB8IDApO1xyXG5cclxuICAgIGZvciAoaSA9IGs7IGk7IC0taSkgeCA9IHguZGl2KHgudGltZXMoeCkucGx1cygxKS5zcXJ0KCkucGx1cygxKSk7XHJcblxyXG4gICAgZXh0ZXJuYWwgPSBmYWxzZTtcclxuXHJcbiAgICBqID0gTWF0aC5jZWlsKHdwciAvIExPR19CQVNFKTtcclxuICAgIG4gPSAxO1xyXG4gICAgeDIgPSB4LnRpbWVzKHgpO1xyXG4gICAgciA9IG5ldyBDdG9yKHgpO1xyXG4gICAgcHggPSB4O1xyXG5cclxuICAgIC8vIGF0YW4oeCkgPSB4IC0geF4zLzMgKyB4XjUvNSAtIHheNy83ICsgLi4uXHJcbiAgICBmb3IgKDsgaSAhPT0gLTE7KSB7XHJcbiAgICAgIHB4ID0gcHgudGltZXMoeDIpO1xyXG4gICAgICB0ID0gci5taW51cyhweC5kaXYobiArPSAyKSk7XHJcblxyXG4gICAgICBweCA9IHB4LnRpbWVzKHgyKTtcclxuICAgICAgciA9IHQucGx1cyhweC5kaXYobiArPSAyKSk7XHJcblxyXG4gICAgICBpZiAoci5kW2pdICE9PSB2b2lkIDApIGZvciAoaSA9IGo7IHIuZFtpXSA9PT0gdC5kW2ldICYmIGktLTspO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChrKSByID0gci50aW1lcygyIDw8IChrIC0gMSkpO1xyXG5cclxuICAgIGV4dGVybmFsID0gdHJ1ZTtcclxuXHJcbiAgICByZXR1cm4gZmluYWxpc2UociwgQ3Rvci5wcmVjaXNpb24gPSBwciwgQ3Rvci5yb3VuZGluZyA9IHJtLCB0cnVlKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGlzIGEgZmluaXRlIG51bWJlciwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuaXNGaW5pdGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gISF0aGlzLmQ7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCBpcyBhbiBpbnRlZ2VyLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5pc0ludGVnZXIgPSBQLmlzSW50ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuICEhdGhpcy5kICYmIG1hdGhmbG9vcih0aGlzLmUgLyBMT0dfQkFTRSkgPiB0aGlzLmQubGVuZ3RoIC0gMjtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGlzIE5hTiwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuaXNOYU4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gIXRoaXMucztcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGlzIG5lZ2F0aXZlLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5pc05lZ2F0aXZlID0gUC5pc05lZyA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB0aGlzLnMgPCAwO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgaXMgcG9zaXRpdmUsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICpcclxuICAgKi9cclxuICBQLmlzUG9zaXRpdmUgPSBQLmlzUG9zID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHRoaXMucyA+IDA7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCBpcyAwIG9yIC0wLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5pc1plcm8gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gISF0aGlzLmQgJiYgdGhpcy5kWzBdID09PSAwO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgaXMgbGVzcyB0aGFuIGB5YCwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAubGVzc1RoYW4gPSBQLmx0ID0gZnVuY3Rpb24gKHkpIHtcclxuICAgIHJldHVybiB0aGlzLmNtcCh5KSA8IDA7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYHlgLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5sZXNzVGhhbk9yRXF1YWxUbyA9IFAubHRlID0gZnVuY3Rpb24gKHkpIHtcclxuICAgIHJldHVybiB0aGlzLmNtcCh5KSA8IDE7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIHRoZSBsb2dhcml0aG0gb2YgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCB0byB0aGUgc3BlY2lmaWVkIGJhc2UsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmBcclxuICAgKiBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogSWYgbm8gYmFzZSBpcyBzcGVjaWZpZWQsIHJldHVybiBsb2dbMTBdKGFyZykuXHJcbiAgICpcclxuICAgKiBsb2dbYmFzZV0oYXJnKSA9IGxuKGFyZykgLyBsbihiYXNlKVxyXG4gICAqXHJcbiAgICogVGhlIHJlc3VsdCB3aWxsIGFsd2F5cyBiZSBjb3JyZWN0bHkgcm91bmRlZCBpZiB0aGUgYmFzZSBvZiB0aGUgbG9nIGlzIDEwLCBhbmQgJ2FsbW9zdCBhbHdheXMnXHJcbiAgICogb3RoZXJ3aXNlOlxyXG4gICAqXHJcbiAgICogRGVwZW5kaW5nIG9uIHRoZSByb3VuZGluZyBtb2RlLCB0aGUgcmVzdWx0IG1heSBiZSBpbmNvcnJlY3RseSByb3VuZGVkIGlmIHRoZSBmaXJzdCBmaWZ0ZWVuXHJcbiAgICogcm91bmRpbmcgZGlnaXRzIGFyZSBbNDldOTk5OTk5OTk5OTk5OTkgb3IgWzUwXTAwMDAwMDAwMDAwMDAwLiBJbiB0aGF0IGNhc2UsIHRoZSBtYXhpbXVtIGVycm9yXHJcbiAgICogYmV0d2VlbiB0aGUgcmVzdWx0IGFuZCB0aGUgY29ycmVjdGx5IHJvdW5kZWQgcmVzdWx0IHdpbGwgYmUgb25lIHVscCAodW5pdCBpbiB0aGUgbGFzdCBwbGFjZSkuXHJcbiAgICpcclxuICAgKiBsb2dbLWJdKGEpICAgICAgID0gTmFOXHJcbiAgICogbG9nWzBdKGEpICAgICAgICA9IE5hTlxyXG4gICAqIGxvZ1sxXShhKSAgICAgICAgPSBOYU5cclxuICAgKiBsb2dbTmFOXShhKSAgICAgID0gTmFOXHJcbiAgICogbG9nW0luZmluaXR5XShhKSA9IE5hTlxyXG4gICAqIGxvZ1tiXSgwKSAgICAgICAgPSAtSW5maW5pdHlcclxuICAgKiBsb2dbYl0oLTApICAgICAgID0gLUluZmluaXR5XHJcbiAgICogbG9nW2JdKC1hKSAgICAgICA9IE5hTlxyXG4gICAqIGxvZ1tiXSgxKSAgICAgICAgPSAwXHJcbiAgICogbG9nW2JdKEluZmluaXR5KSA9IEluZmluaXR5XHJcbiAgICogbG9nW2JdKE5hTikgICAgICA9IE5hTlxyXG4gICAqXHJcbiAgICogW2Jhc2VdIHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IFRoZSBiYXNlIG9mIHRoZSBsb2dhcml0aG0uXHJcbiAgICpcclxuICAgKi9cclxuICBQLmxvZ2FyaXRobSA9IFAubG9nID0gZnVuY3Rpb24gKGJhc2UpIHtcclxuICAgIHZhciBpc0Jhc2UxMCwgZCwgZGVub21pbmF0b3IsIGssIGluZiwgbnVtLCBzZCwgcixcclxuICAgICAgYXJnID0gdGhpcyxcclxuICAgICAgQ3RvciA9IGFyZy5jb25zdHJ1Y3RvcixcclxuICAgICAgcHIgPSBDdG9yLnByZWNpc2lvbixcclxuICAgICAgcm0gPSBDdG9yLnJvdW5kaW5nLFxyXG4gICAgICBndWFyZCA9IDU7XHJcblxyXG4gICAgLy8gRGVmYXVsdCBiYXNlIGlzIDEwLlxyXG4gICAgaWYgKGJhc2UgPT0gbnVsbCkge1xyXG4gICAgICBiYXNlID0gbmV3IEN0b3IoMTApO1xyXG4gICAgICBpc0Jhc2UxMCA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBiYXNlID0gbmV3IEN0b3IoYmFzZSk7XHJcbiAgICAgIGQgPSBiYXNlLmQ7XHJcblxyXG4gICAgICAvLyBSZXR1cm4gTmFOIGlmIGJhc2UgaXMgbmVnYXRpdmUsIG9yIG5vbi1maW5pdGUsIG9yIGlzIDAgb3IgMS5cclxuICAgICAgaWYgKGJhc2UucyA8IDAgfHwgIWQgfHwgIWRbMF0gfHwgYmFzZS5lcSgxKSkgcmV0dXJuIG5ldyBDdG9yKE5hTik7XHJcblxyXG4gICAgICBpc0Jhc2UxMCA9IGJhc2UuZXEoMTApO1xyXG4gICAgfVxyXG5cclxuICAgIGQgPSBhcmcuZDtcclxuXHJcbiAgICAvLyBJcyBhcmcgbmVnYXRpdmUsIG5vbi1maW5pdGUsIDAgb3IgMT9cclxuICAgIGlmIChhcmcucyA8IDAgfHwgIWQgfHwgIWRbMF0gfHwgYXJnLmVxKDEpKSB7XHJcbiAgICAgIHJldHVybiBuZXcgQ3RvcihkICYmICFkWzBdID8gLTEgLyAwIDogYXJnLnMgIT0gMSA/IE5hTiA6IGQgPyAwIDogMSAvIDApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFRoZSByZXN1bHQgd2lsbCBoYXZlIGEgbm9uLXRlcm1pbmF0aW5nIGRlY2ltYWwgZXhwYW5zaW9uIGlmIGJhc2UgaXMgMTAgYW5kIGFyZyBpcyBub3QgYW5cclxuICAgIC8vIGludGVnZXIgcG93ZXIgb2YgMTAuXHJcbiAgICBpZiAoaXNCYXNlMTApIHtcclxuICAgICAgaWYgKGQubGVuZ3RoID4gMSkge1xyXG4gICAgICAgIGluZiA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZm9yIChrID0gZFswXTsgayAlIDEwID09PSAwOykgayAvPSAxMDtcclxuICAgICAgICBpbmYgPSBrICE9PSAxO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZXh0ZXJuYWwgPSBmYWxzZTtcclxuICAgIHNkID0gcHIgKyBndWFyZDtcclxuICAgIG51bSA9IG5hdHVyYWxMb2dhcml0aG0oYXJnLCBzZCk7XHJcbiAgICBkZW5vbWluYXRvciA9IGlzQmFzZTEwID8gZ2V0TG4xMChDdG9yLCBzZCArIDEwKSA6IG5hdHVyYWxMb2dhcml0aG0oYmFzZSwgc2QpO1xyXG5cclxuICAgIC8vIFRoZSByZXN1bHQgd2lsbCBoYXZlIDUgcm91bmRpbmcgZGlnaXRzLlxyXG4gICAgciA9IGRpdmlkZShudW0sIGRlbm9taW5hdG9yLCBzZCwgMSk7XHJcblxyXG4gICAgLy8gSWYgYXQgYSByb3VuZGluZyBib3VuZGFyeSwgaS5lLiB0aGUgcmVzdWx0J3Mgcm91bmRpbmcgZGlnaXRzIGFyZSBbNDldOTk5OSBvciBbNTBdMDAwMCxcclxuICAgIC8vIGNhbGN1bGF0ZSAxMCBmdXJ0aGVyIGRpZ2l0cy5cclxuICAgIC8vXHJcbiAgICAvLyBJZiB0aGUgcmVzdWx0IGlzIGtub3duIHRvIGhhdmUgYW4gaW5maW5pdGUgZGVjaW1hbCBleHBhbnNpb24sIHJlcGVhdCB0aGlzIHVudGlsIGl0IGlzIGNsZWFyXHJcbiAgICAvLyB0aGF0IHRoZSByZXN1bHQgaXMgYWJvdmUgb3IgYmVsb3cgdGhlIGJvdW5kYXJ5LiBPdGhlcndpc2UsIGlmIGFmdGVyIGNhbGN1bGF0aW5nIHRoZSAxMFxyXG4gICAgLy8gZnVydGhlciBkaWdpdHMsIHRoZSBsYXN0IDE0IGFyZSBuaW5lcywgcm91bmQgdXAgYW5kIGFzc3VtZSB0aGUgcmVzdWx0IGlzIGV4YWN0LlxyXG4gICAgLy8gQWxzbyBhc3N1bWUgdGhlIHJlc3VsdCBpcyBleGFjdCBpZiB0aGUgbGFzdCAxNCBhcmUgemVyby5cclxuICAgIC8vXHJcbiAgICAvLyBFeGFtcGxlIG9mIGEgcmVzdWx0IHRoYXQgd2lsbCBiZSBpbmNvcnJlY3RseSByb3VuZGVkOlxyXG4gICAgLy8gbG9nWzEwNDg1NzZdKDQ1MDM1OTk2MjczNzA1MDIpID0gMi42MDAwMDAwMDAwMDAwMDAwOTYxMDI3OTUxMTQ0NDc0Ni4uLlxyXG4gICAgLy8gVGhlIGFib3ZlIHJlc3VsdCBjb3JyZWN0bHkgcm91bmRlZCB1c2luZyBST1VORF9DRUlMIHRvIDEgZGVjaW1hbCBwbGFjZSBzaG91bGQgYmUgMi43LCBidXQgaXRcclxuICAgIC8vIHdpbGwgYmUgZ2l2ZW4gYXMgMi42IGFzIHRoZXJlIGFyZSAxNSB6ZXJvcyBpbW1lZGlhdGVseSBhZnRlciB0aGUgcmVxdWVzdGVkIGRlY2ltYWwgcGxhY2UsIHNvXHJcbiAgICAvLyB0aGUgZXhhY3QgcmVzdWx0IHdvdWxkIGJlIGFzc3VtZWQgdG8gYmUgMi42LCB3aGljaCByb3VuZGVkIHVzaW5nIFJPVU5EX0NFSUwgdG8gMSBkZWNpbWFsXHJcbiAgICAvLyBwbGFjZSBpcyBzdGlsbCAyLjYuXHJcbiAgICBpZiAoY2hlY2tSb3VuZGluZ0RpZ2l0cyhyLmQsIGsgPSBwciwgcm0pKSB7XHJcblxyXG4gICAgICBkbyB7XHJcbiAgICAgICAgc2QgKz0gMTA7XHJcbiAgICAgICAgbnVtID0gbmF0dXJhbExvZ2FyaXRobShhcmcsIHNkKTtcclxuICAgICAgICBkZW5vbWluYXRvciA9IGlzQmFzZTEwID8gZ2V0TG4xMChDdG9yLCBzZCArIDEwKSA6IG5hdHVyYWxMb2dhcml0aG0oYmFzZSwgc2QpO1xyXG4gICAgICAgIHIgPSBkaXZpZGUobnVtLCBkZW5vbWluYXRvciwgc2QsIDEpO1xyXG5cclxuICAgICAgICBpZiAoIWluZikge1xyXG5cclxuICAgICAgICAgIC8vIENoZWNrIGZvciAxNCBuaW5lcyBmcm9tIHRoZSAybmQgcm91bmRpbmcgZGlnaXQsIGFzIHRoZSBmaXJzdCBtYXkgYmUgNC5cclxuICAgICAgICAgIGlmICgrZGlnaXRzVG9TdHJpbmcoci5kKS5zbGljZShrICsgMSwgayArIDE1KSArIDEgPT0gMWUxNCkge1xyXG4gICAgICAgICAgICByID0gZmluYWxpc2UociwgcHIgKyAxLCAwKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH0gd2hpbGUgKGNoZWNrUm91bmRpbmdEaWdpdHMoci5kLCBrICs9IDEwLCBybSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGV4dGVybmFsID0gdHJ1ZTtcclxuXHJcbiAgICByZXR1cm4gZmluYWxpc2UociwgcHIsIHJtKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgbWF4aW11bSBvZiB0aGUgYXJndW1lbnRzIGFuZCB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsLlxyXG4gICAqXHJcbiAgICogYXJndW1lbnRzIHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICpcclxuICBQLm1heCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmNhbGwoYXJndW1lbnRzLCB0aGlzKTtcclxuICAgIHJldHVybiBtYXhPck1pbih0aGlzLmNvbnN0cnVjdG9yLCBhcmd1bWVudHMsICdsdCcpO1xyXG4gIH07XHJcbiAgICovXHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBtaW5pbXVtIG9mIHRoZSBhcmd1bWVudHMgYW5kIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwuXHJcbiAgICpcclxuICAgKiBhcmd1bWVudHMge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gIFAubWluID0gZnVuY3Rpb24gKCkge1xyXG4gICAgQXJyYXkucHJvdG90eXBlLnB1c2guY2FsbChhcmd1bWVudHMsIHRoaXMpO1xyXG4gICAgcmV0dXJuIG1heE9yTWluKHRoaXMuY29uc3RydWN0b3IsIGFyZ3VtZW50cywgJ2d0Jyk7XHJcbiAgfTtcclxuICAgKi9cclxuXHJcblxyXG4gIC8qXHJcbiAgICogIG4gLSAwID0gblxyXG4gICAqICBuIC0gTiA9IE5cclxuICAgKiAgbiAtIEkgPSAtSVxyXG4gICAqICAwIC0gbiA9IC1uXHJcbiAgICogIDAgLSAwID0gMFxyXG4gICAqICAwIC0gTiA9IE5cclxuICAgKiAgMCAtIEkgPSAtSVxyXG4gICAqICBOIC0gbiA9IE5cclxuICAgKiAgTiAtIDAgPSBOXHJcbiAgICogIE4gLSBOID0gTlxyXG4gICAqICBOIC0gSSA9IE5cclxuICAgKiAgSSAtIG4gPSBJXHJcbiAgICogIEkgLSAwID0gSVxyXG4gICAqICBJIC0gTiA9IE5cclxuICAgKiAgSSAtIEkgPSBOXHJcbiAgICpcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIG1pbnVzIGB5YCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYFxyXG4gICAqIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKi9cclxuICBQLm1pbnVzID0gUC5zdWIgPSBmdW5jdGlvbiAoeSkge1xyXG4gICAgdmFyIGQsIGUsIGksIGosIGssIGxlbiwgcHIsIHJtLCB4ZCwgeGUsIHhMVHksIHlkLFxyXG4gICAgICB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7XHJcblxyXG4gICAgeSA9IG5ldyBDdG9yKHkpO1xyXG5cclxuICAgIC8vIElmIGVpdGhlciBpcyBub3QgZmluaXRlLi4uXHJcbiAgICBpZiAoIXguZCB8fCAheS5kKSB7XHJcblxyXG4gICAgICAvLyBSZXR1cm4gTmFOIGlmIGVpdGhlciBpcyBOYU4uXHJcbiAgICAgIGlmICgheC5zIHx8ICF5LnMpIHkgPSBuZXcgQ3RvcihOYU4pO1xyXG5cclxuICAgICAgLy8gUmV0dXJuIHkgbmVnYXRlZCBpZiB4IGlzIGZpbml0ZSBhbmQgeSBpcyDCsUluZmluaXR5LlxyXG4gICAgICBlbHNlIGlmICh4LmQpIHkucyA9IC15LnM7XHJcblxyXG4gICAgICAvLyBSZXR1cm4geCBpZiB5IGlzIGZpbml0ZSBhbmQgeCBpcyDCsUluZmluaXR5LlxyXG4gICAgICAvLyBSZXR1cm4geCBpZiBib3RoIGFyZSDCsUluZmluaXR5IHdpdGggZGlmZmVyZW50IHNpZ25zLlxyXG4gICAgICAvLyBSZXR1cm4gTmFOIGlmIGJvdGggYXJlIMKxSW5maW5pdHkgd2l0aCB0aGUgc2FtZSBzaWduLlxyXG4gICAgICBlbHNlIHkgPSBuZXcgQ3Rvcih5LmQgfHwgeC5zICE9PSB5LnMgPyB4IDogTmFOKTtcclxuXHJcbiAgICAgIHJldHVybiB5O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIElmIHNpZ25zIGRpZmZlci4uLlxyXG4gICAgaWYgKHgucyAhPSB5LnMpIHtcclxuICAgICAgeS5zID0gLXkucztcclxuICAgICAgcmV0dXJuIHgucGx1cyh5KTtcclxuICAgIH1cclxuXHJcbiAgICB4ZCA9IHguZDtcclxuICAgIHlkID0geS5kO1xyXG4gICAgcHIgPSBDdG9yLnByZWNpc2lvbjtcclxuICAgIHJtID0gQ3Rvci5yb3VuZGluZztcclxuXHJcbiAgICAvLyBJZiBlaXRoZXIgaXMgemVyby4uLlxyXG4gICAgaWYgKCF4ZFswXSB8fCAheWRbMF0pIHtcclxuXHJcbiAgICAgIC8vIFJldHVybiB5IG5lZ2F0ZWQgaWYgeCBpcyB6ZXJvIGFuZCB5IGlzIG5vbi16ZXJvLlxyXG4gICAgICBpZiAoeWRbMF0pIHkucyA9IC15LnM7XHJcblxyXG4gICAgICAvLyBSZXR1cm4geCBpZiB5IGlzIHplcm8gYW5kIHggaXMgbm9uLXplcm8uXHJcbiAgICAgIGVsc2UgaWYgKHhkWzBdKSB5ID0gbmV3IEN0b3IoeCk7XHJcblxyXG4gICAgICAvLyBSZXR1cm4gemVybyBpZiBib3RoIGFyZSB6ZXJvLlxyXG4gICAgICAvLyBGcm9tIElFRUUgNzU0ICgyMDA4KSA2LjM6IDAgLSAwID0gLTAgLSAtMCA9IC0wIHdoZW4gcm91bmRpbmcgdG8gLUluZmluaXR5LlxyXG4gICAgICBlbHNlIHJldHVybiBuZXcgQ3RvcihybSA9PT0gMyA/IC0wIDogMCk7XHJcblxyXG4gICAgICByZXR1cm4gZXh0ZXJuYWwgPyBmaW5hbGlzZSh5LCBwciwgcm0pIDogeTtcclxuICAgIH1cclxuXHJcbiAgICAvLyB4IGFuZCB5IGFyZSBmaW5pdGUsIG5vbi16ZXJvIG51bWJlcnMgd2l0aCB0aGUgc2FtZSBzaWduLlxyXG5cclxuICAgIC8vIENhbGN1bGF0ZSBiYXNlIDFlNyBleHBvbmVudHMuXHJcbiAgICBlID0gbWF0aGZsb29yKHkuZSAvIExPR19CQVNFKTtcclxuICAgIHhlID0gbWF0aGZsb29yKHguZSAvIExPR19CQVNFKTtcclxuXHJcbiAgICB4ZCA9IHhkLnNsaWNlKCk7XHJcbiAgICBrID0geGUgLSBlO1xyXG5cclxuICAgIC8vIElmIGJhc2UgMWU3IGV4cG9uZW50cyBkaWZmZXIuLi5cclxuICAgIGlmIChrKSB7XHJcbiAgICAgIHhMVHkgPSBrIDwgMDtcclxuXHJcbiAgICAgIGlmICh4TFR5KSB7XHJcbiAgICAgICAgZCA9IHhkO1xyXG4gICAgICAgIGsgPSAtaztcclxuICAgICAgICBsZW4gPSB5ZC5sZW5ndGg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZCA9IHlkO1xyXG4gICAgICAgIGUgPSB4ZTtcclxuICAgICAgICBsZW4gPSB4ZC5sZW5ndGg7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIE51bWJlcnMgd2l0aCBtYXNzaXZlbHkgZGlmZmVyZW50IGV4cG9uZW50cyB3b3VsZCByZXN1bHQgaW4gYSB2ZXJ5IGhpZ2ggbnVtYmVyIG9mXHJcbiAgICAgIC8vIHplcm9zIG5lZWRpbmcgdG8gYmUgcHJlcGVuZGVkLCBidXQgdGhpcyBjYW4gYmUgYXZvaWRlZCB3aGlsZSBzdGlsbCBlbnN1cmluZyBjb3JyZWN0XHJcbiAgICAgIC8vIHJvdW5kaW5nIGJ5IGxpbWl0aW5nIHRoZSBudW1iZXIgb2YgemVyb3MgdG8gYE1hdGguY2VpbChwciAvIExPR19CQVNFKSArIDJgLlxyXG4gICAgICBpID0gTWF0aC5tYXgoTWF0aC5jZWlsKHByIC8gTE9HX0JBU0UpLCBsZW4pICsgMjtcclxuXHJcbiAgICAgIGlmIChrID4gaSkge1xyXG4gICAgICAgIGsgPSBpO1xyXG4gICAgICAgIGQubGVuZ3RoID0gMTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gUHJlcGVuZCB6ZXJvcyB0byBlcXVhbGlzZSBleHBvbmVudHMuXHJcbiAgICAgIGQucmV2ZXJzZSgpO1xyXG4gICAgICBmb3IgKGkgPSBrOyBpLS07KSBkLnB1c2goMCk7XHJcbiAgICAgIGQucmV2ZXJzZSgpO1xyXG5cclxuICAgIC8vIEJhc2UgMWU3IGV4cG9uZW50cyBlcXVhbC5cclxuICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAvLyBDaGVjayBkaWdpdHMgdG8gZGV0ZXJtaW5lIHdoaWNoIGlzIHRoZSBiaWdnZXIgbnVtYmVyLlxyXG5cclxuICAgICAgaSA9IHhkLmxlbmd0aDtcclxuICAgICAgbGVuID0geWQubGVuZ3RoO1xyXG4gICAgICB4TFR5ID0gaSA8IGxlbjtcclxuICAgICAgaWYgKHhMVHkpIGxlbiA9IGk7XHJcblxyXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICBpZiAoeGRbaV0gIT0geWRbaV0pIHtcclxuICAgICAgICAgIHhMVHkgPSB4ZFtpXSA8IHlkW2ldO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBrID0gMDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoeExUeSkge1xyXG4gICAgICBkID0geGQ7XHJcbiAgICAgIHhkID0geWQ7XHJcbiAgICAgIHlkID0gZDtcclxuICAgICAgeS5zID0gLXkucztcclxuICAgIH1cclxuXHJcbiAgICBsZW4gPSB4ZC5sZW5ndGg7XHJcblxyXG4gICAgLy8gQXBwZW5kIHplcm9zIHRvIGB4ZGAgaWYgc2hvcnRlci5cclxuICAgIC8vIERvbid0IGFkZCB6ZXJvcyB0byBgeWRgIGlmIHNob3J0ZXIgYXMgc3VidHJhY3Rpb24gb25seSBuZWVkcyB0byBzdGFydCBhdCBgeWRgIGxlbmd0aC5cclxuICAgIGZvciAoaSA9IHlkLmxlbmd0aCAtIGxlbjsgaSA+IDA7IC0taSkgeGRbbGVuKytdID0gMDtcclxuXHJcbiAgICAvLyBTdWJ0cmFjdCB5ZCBmcm9tIHhkLlxyXG4gICAgZm9yIChpID0geWQubGVuZ3RoOyBpID4gazspIHtcclxuXHJcbiAgICAgIGlmICh4ZFstLWldIDwgeWRbaV0pIHtcclxuICAgICAgICBmb3IgKGogPSBpOyBqICYmIHhkWy0tal0gPT09IDA7KSB4ZFtqXSA9IEJBU0UgLSAxO1xyXG4gICAgICAgIC0teGRbal07XHJcbiAgICAgICAgeGRbaV0gKz0gQkFTRTtcclxuICAgICAgfVxyXG5cclxuICAgICAgeGRbaV0gLT0geWRbaV07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgZm9yICg7IHhkWy0tbGVuXSA9PT0gMDspIHhkLnBvcCgpO1xyXG5cclxuICAgIC8vIFJlbW92ZSBsZWFkaW5nIHplcm9zIGFuZCBhZGp1c3QgZXhwb25lbnQgYWNjb3JkaW5nbHkuXHJcbiAgICBmb3IgKDsgeGRbMF0gPT09IDA7IHhkLnNoaWZ0KCkpIC0tZTtcclxuXHJcbiAgICAvLyBaZXJvP1xyXG4gICAgaWYgKCF4ZFswXSkgcmV0dXJuIG5ldyBDdG9yKHJtID09PSAzID8gLTAgOiAwKTtcclxuXHJcbiAgICB5LmQgPSB4ZDtcclxuICAgIHkuZSA9IGdldEJhc2UxMEV4cG9uZW50KHhkLCBlKTtcclxuXHJcbiAgICByZXR1cm4gZXh0ZXJuYWwgPyBmaW5hbGlzZSh5LCBwciwgcm0pIDogeTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiAgIG4gJSAwID0gIE5cclxuICAgKiAgIG4gJSBOID0gIE5cclxuICAgKiAgIG4gJSBJID0gIG5cclxuICAgKiAgIDAgJSBuID0gIDBcclxuICAgKiAgLTAgJSBuID0gLTBcclxuICAgKiAgIDAgJSAwID0gIE5cclxuICAgKiAgIDAgJSBOID0gIE5cclxuICAgKiAgIDAgJSBJID0gIDBcclxuICAgKiAgIE4gJSBuID0gIE5cclxuICAgKiAgIE4gJSAwID0gIE5cclxuICAgKiAgIE4gJSBOID0gIE5cclxuICAgKiAgIE4gJSBJID0gIE5cclxuICAgKiAgIEkgJSBuID0gIE5cclxuICAgKiAgIEkgJSAwID0gIE5cclxuICAgKiAgIEkgJSBOID0gIE5cclxuICAgKiAgIEkgJSBJID0gIE5cclxuICAgKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgbW9kdWxvIGB5YCwgcm91bmRlZCB0b1xyXG4gICAqIGBwcmVjaXNpb25gIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiBUaGUgcmVzdWx0IGRlcGVuZHMgb24gdGhlIG1vZHVsbyBtb2RlLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5tb2R1bG8gPSBQLm1vZCA9IGZ1bmN0aW9uICh5KSB7XHJcbiAgICB2YXIgcSxcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIHkgPSBuZXcgQ3Rvcih5KTtcclxuXHJcbiAgICAvLyBSZXR1cm4gTmFOIGlmIHggaXMgwrFJbmZpbml0eSBvciBOYU4sIG9yIHkgaXMgTmFOIG9yIMKxMC5cclxuICAgIGlmICgheC5kIHx8ICF5LnMgfHwgeS5kICYmICF5LmRbMF0pIHJldHVybiBuZXcgQ3RvcihOYU4pO1xyXG5cclxuICAgIC8vIFJldHVybiB4IGlmIHkgaXMgwrFJbmZpbml0eSBvciB4IGlzIMKxMC5cclxuICAgIGlmICgheS5kIHx8IHguZCAmJiAheC5kWzBdKSB7XHJcbiAgICAgIHJldHVybiBmaW5hbGlzZShuZXcgQ3Rvcih4KSwgQ3Rvci5wcmVjaXNpb24sIEN0b3Iucm91bmRpbmcpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFByZXZlbnQgcm91bmRpbmcgb2YgaW50ZXJtZWRpYXRlIGNhbGN1bGF0aW9ucy5cclxuICAgIGV4dGVybmFsID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKEN0b3IubW9kdWxvID09IDkpIHtcclxuXHJcbiAgICAgIC8vIEV1Y2xpZGlhbiBkaXZpc2lvbjogcSA9IHNpZ24oeSkgKiBmbG9vcih4IC8gYWJzKHkpKVxyXG4gICAgICAvLyByZXN1bHQgPSB4IC0gcSAqIHkgICAgd2hlcmUgIDAgPD0gcmVzdWx0IDwgYWJzKHkpXHJcbiAgICAgIHEgPSBkaXZpZGUoeCwgeS5hYnMoKSwgMCwgMywgMSk7XHJcbiAgICAgIHEucyAqPSB5LnM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBxID0gZGl2aWRlKHgsIHksIDAsIEN0b3IubW9kdWxvLCAxKTtcclxuICAgIH1cclxuXHJcbiAgICBxID0gcS50aW1lcyh5KTtcclxuXHJcbiAgICBleHRlcm5hbCA9IHRydWU7XHJcblxyXG4gICAgcmV0dXJuIHgubWludXMocSk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIG5hdHVyYWwgZXhwb25lbnRpYWwgb2YgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCxcclxuICAgKiBpLmUuIHRoZSBiYXNlIGUgcmFpc2VkIHRvIHRoZSBwb3dlciB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gXHJcbiAgICogc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAubmF0dXJhbEV4cG9uZW50aWFsID0gUC5leHAgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gbmF0dXJhbEV4cG9uZW50aWFsKHRoaXMpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBuYXR1cmFsIGxvZ2FyaXRobSBvZiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsLFxyXG4gICAqIHJvdW5kZWQgdG8gYHByZWNpc2lvbmAgc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAubmF0dXJhbExvZ2FyaXRobSA9IFAubG4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gbmF0dXJhbExvZ2FyaXRobSh0aGlzKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIG5lZ2F0ZWQsIGkuZS4gYXMgaWYgbXVsdGlwbGllZCBieVxyXG4gICAqIC0xLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5uZWdhdGVkID0gUC5uZWcgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgeCA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMpO1xyXG4gICAgeC5zID0gLXgucztcclxuICAgIHJldHVybiBmaW5hbGlzZSh4KTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiAgbiArIDAgPSBuXHJcbiAgICogIG4gKyBOID0gTlxyXG4gICAqICBuICsgSSA9IElcclxuICAgKiAgMCArIG4gPSBuXHJcbiAgICogIDAgKyAwID0gMFxyXG4gICAqICAwICsgTiA9IE5cclxuICAgKiAgMCArIEkgPSBJXHJcbiAgICogIE4gKyBuID0gTlxyXG4gICAqICBOICsgMCA9IE5cclxuICAgKiAgTiArIE4gPSBOXHJcbiAgICogIE4gKyBJID0gTlxyXG4gICAqICBJICsgbiA9IElcclxuICAgKiAgSSArIDAgPSBJXHJcbiAgICogIEkgKyBOID0gTlxyXG4gICAqICBJICsgSSA9IElcclxuICAgKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgcGx1cyBgeWAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmBcclxuICAgKiBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5wbHVzID0gUC5hZGQgPSBmdW5jdGlvbiAoeSkge1xyXG4gICAgdmFyIGNhcnJ5LCBkLCBlLCBpLCBrLCBsZW4sIHByLCBybSwgeGQsIHlkLFxyXG4gICAgICB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7XHJcblxyXG4gICAgeSA9IG5ldyBDdG9yKHkpO1xyXG5cclxuICAgIC8vIElmIGVpdGhlciBpcyBub3QgZmluaXRlLi4uXHJcbiAgICBpZiAoIXguZCB8fCAheS5kKSB7XHJcblxyXG4gICAgICAvLyBSZXR1cm4gTmFOIGlmIGVpdGhlciBpcyBOYU4uXHJcbiAgICAgIGlmICgheC5zIHx8ICF5LnMpIHkgPSBuZXcgQ3RvcihOYU4pO1xyXG5cclxuICAgICAgLy8gUmV0dXJuIHggaWYgeSBpcyBmaW5pdGUgYW5kIHggaXMgwrFJbmZpbml0eS5cclxuICAgICAgLy8gUmV0dXJuIHggaWYgYm90aCBhcmUgwrFJbmZpbml0eSB3aXRoIHRoZSBzYW1lIHNpZ24uXHJcbiAgICAgIC8vIFJldHVybiBOYU4gaWYgYm90aCBhcmUgwrFJbmZpbml0eSB3aXRoIGRpZmZlcmVudCBzaWducy5cclxuICAgICAgLy8gUmV0dXJuIHkgaWYgeCBpcyBmaW5pdGUgYW5kIHkgaXMgwrFJbmZpbml0eS5cclxuICAgICAgZWxzZSBpZiAoIXguZCkgeSA9IG5ldyBDdG9yKHkuZCB8fCB4LnMgPT09IHkucyA/IHggOiBOYU4pO1xyXG5cclxuICAgICAgcmV0dXJuIHk7XHJcbiAgICB9XHJcblxyXG4gICAgIC8vIElmIHNpZ25zIGRpZmZlci4uLlxyXG4gICAgaWYgKHgucyAhPSB5LnMpIHtcclxuICAgICAgeS5zID0gLXkucztcclxuICAgICAgcmV0dXJuIHgubWludXMoeSk7XHJcbiAgICB9XHJcblxyXG4gICAgeGQgPSB4LmQ7XHJcbiAgICB5ZCA9IHkuZDtcclxuICAgIHByID0gQ3Rvci5wcmVjaXNpb247XHJcbiAgICBybSA9IEN0b3Iucm91bmRpbmc7XHJcblxyXG4gICAgLy8gSWYgZWl0aGVyIGlzIHplcm8uLi5cclxuICAgIGlmICgheGRbMF0gfHwgIXlkWzBdKSB7XHJcblxyXG4gICAgICAvLyBSZXR1cm4geCBpZiB5IGlzIHplcm8uXHJcbiAgICAgIC8vIFJldHVybiB5IGlmIHkgaXMgbm9uLXplcm8uXHJcbiAgICAgIGlmICgheWRbMF0pIHkgPSBuZXcgQ3Rvcih4KTtcclxuXHJcbiAgICAgIHJldHVybiBleHRlcm5hbCA/IGZpbmFsaXNlKHksIHByLCBybSkgOiB5O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHggYW5kIHkgYXJlIGZpbml0ZSwgbm9uLXplcm8gbnVtYmVycyB3aXRoIHRoZSBzYW1lIHNpZ24uXHJcblxyXG4gICAgLy8gQ2FsY3VsYXRlIGJhc2UgMWU3IGV4cG9uZW50cy5cclxuICAgIGsgPSBtYXRoZmxvb3IoeC5lIC8gTE9HX0JBU0UpO1xyXG4gICAgZSA9IG1hdGhmbG9vcih5LmUgLyBMT0dfQkFTRSk7XHJcblxyXG4gICAgeGQgPSB4ZC5zbGljZSgpO1xyXG4gICAgaSA9IGsgLSBlO1xyXG5cclxuICAgIC8vIElmIGJhc2UgMWU3IGV4cG9uZW50cyBkaWZmZXIuLi5cclxuICAgIGlmIChpKSB7XHJcblxyXG4gICAgICBpZiAoaSA8IDApIHtcclxuICAgICAgICBkID0geGQ7XHJcbiAgICAgICAgaSA9IC1pO1xyXG4gICAgICAgIGxlbiA9IHlkLmxlbmd0aDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBkID0geWQ7XHJcbiAgICAgICAgZSA9IGs7XHJcbiAgICAgICAgbGVuID0geGQubGVuZ3RoO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBMaW1pdCBudW1iZXIgb2YgemVyb3MgcHJlcGVuZGVkIHRvIG1heChjZWlsKHByIC8gTE9HX0JBU0UpLCBsZW4pICsgMS5cclxuICAgICAgayA9IE1hdGguY2VpbChwciAvIExPR19CQVNFKTtcclxuICAgICAgbGVuID0gayA+IGxlbiA/IGsgKyAxIDogbGVuICsgMTtcclxuXHJcbiAgICAgIGlmIChpID4gbGVuKSB7XHJcbiAgICAgICAgaSA9IGxlbjtcclxuICAgICAgICBkLmxlbmd0aCA9IDE7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFByZXBlbmQgemVyb3MgdG8gZXF1YWxpc2UgZXhwb25lbnRzLiBOb3RlOiBGYXN0ZXIgdG8gdXNlIHJldmVyc2UgdGhlbiBkbyB1bnNoaWZ0cy5cclxuICAgICAgZC5yZXZlcnNlKCk7XHJcbiAgICAgIGZvciAoOyBpLS07KSBkLnB1c2goMCk7XHJcbiAgICAgIGQucmV2ZXJzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGxlbiA9IHhkLmxlbmd0aDtcclxuICAgIGkgPSB5ZC5sZW5ndGg7XHJcblxyXG4gICAgLy8gSWYgeWQgaXMgbG9uZ2VyIHRoYW4geGQsIHN3YXAgeGQgYW5kIHlkIHNvIHhkIHBvaW50cyB0byB0aGUgbG9uZ2VyIGFycmF5LlxyXG4gICAgaWYgKGxlbiAtIGkgPCAwKSB7XHJcbiAgICAgIGkgPSBsZW47XHJcbiAgICAgIGQgPSB5ZDtcclxuICAgICAgeWQgPSB4ZDtcclxuICAgICAgeGQgPSBkO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE9ubHkgc3RhcnQgYWRkaW5nIGF0IHlkLmxlbmd0aCAtIDEgYXMgdGhlIGZ1cnRoZXIgZGlnaXRzIG9mIHhkIGNhbiBiZSBsZWZ0IGFzIHRoZXkgYXJlLlxyXG4gICAgZm9yIChjYXJyeSA9IDA7IGk7KSB7XHJcbiAgICAgIGNhcnJ5ID0gKHhkWy0taV0gPSB4ZFtpXSArIHlkW2ldICsgY2FycnkpIC8gQkFTRSB8IDA7XHJcbiAgICAgIHhkW2ldICU9IEJBU0U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNhcnJ5KSB7XHJcbiAgICAgIHhkLnVuc2hpZnQoY2FycnkpO1xyXG4gICAgICArK2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgLy8gTm8gbmVlZCB0byBjaGVjayBmb3IgemVybywgYXMgK3ggKyAreSAhPSAwICYmIC14ICsgLXkgIT0gMFxyXG4gICAgZm9yIChsZW4gPSB4ZC5sZW5ndGg7IHhkWy0tbGVuXSA9PSAwOykgeGQucG9wKCk7XHJcblxyXG4gICAgeS5kID0geGQ7XHJcbiAgICB5LmUgPSBnZXRCYXNlMTBFeHBvbmVudCh4ZCwgZSk7XHJcblxyXG4gICAgcmV0dXJuIGV4dGVybmFsID8gZmluYWxpc2UoeSwgcHIsIHJtKSA6IHk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIHRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIG9mIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwuXHJcbiAgICpcclxuICAgKiBbel0ge2Jvb2xlYW58bnVtYmVyfSBXaGV0aGVyIHRvIGNvdW50IGludGVnZXItcGFydCB0cmFpbGluZyB6ZXJvczogdHJ1ZSwgZmFsc2UsIDEgb3IgMC5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAucHJlY2lzaW9uID0gUC5zZCA9IGZ1bmN0aW9uICh6KSB7XHJcbiAgICB2YXIgayxcclxuICAgICAgeCA9IHRoaXM7XHJcblxyXG4gICAgaWYgKHogIT09IHZvaWQgMCAmJiB6ICE9PSAhIXogJiYgeiAhPT0gMSAmJiB6ICE9PSAwKSB0aHJvdyBFcnJvcihpbnZhbGlkQXJndW1lbnQgKyB6KTtcclxuXHJcbiAgICBpZiAoeC5kKSB7XHJcbiAgICAgIGsgPSBnZXRQcmVjaXNpb24oeC5kKTtcclxuICAgICAgaWYgKHogJiYgeC5lICsgMSA+IGspIGsgPSB4LmUgKyAxO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgayA9IE5hTjtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaztcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIHJvdW5kZWQgdG8gYSB3aG9sZSBudW1iZXIgdXNpbmdcclxuICAgKiByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKi9cclxuICBQLnJvdW5kID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjtcclxuXHJcbiAgICByZXR1cm4gZmluYWxpc2UobmV3IEN0b3IoeCksIHguZSArIDEsIEN0b3Iucm91bmRpbmcpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBzaW5lIG9mIHRoZSB2YWx1ZSBpbiByYWRpYW5zIG9mIHRoaXMgRGVjaW1hbC5cclxuICAgKlxyXG4gICAqIERvbWFpbjogWy1JbmZpbml0eSwgSW5maW5pdHldXHJcbiAgICogUmFuZ2U6IFstMSwgMV1cclxuICAgKlxyXG4gICAqIHNpbih4KSA9IHggLSB4XjMvMyEgKyB4XjUvNSEgLSAuLi5cclxuICAgKlxyXG4gICAqIHNpbigwKSAgICAgICAgID0gMFxyXG4gICAqIHNpbigtMCkgICAgICAgID0gLTBcclxuICAgKiBzaW4oSW5maW5pdHkpICA9IE5hTlxyXG4gICAqIHNpbigtSW5maW5pdHkpID0gTmFOXHJcbiAgICogc2luKE5hTikgICAgICAgPSBOYU5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuc2luZSA9IFAuc2luID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHByLCBybSxcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIGlmICgheC5pc0Zpbml0ZSgpKSByZXR1cm4gbmV3IEN0b3IoTmFOKTtcclxuICAgIGlmICh4LmlzWmVybygpKSByZXR1cm4gbmV3IEN0b3IoeCk7XHJcblxyXG4gICAgcHIgPSBDdG9yLnByZWNpc2lvbjtcclxuICAgIHJtID0gQ3Rvci5yb3VuZGluZztcclxuICAgIEN0b3IucHJlY2lzaW9uID0gcHIgKyBNYXRoLm1heCh4LmUsIHguc2QoKSkgKyBMT0dfQkFTRTtcclxuICAgIEN0b3Iucm91bmRpbmcgPSAxO1xyXG5cclxuICAgIHggPSBzaW5lKEN0b3IsIHRvTGVzc1RoYW5IYWxmUGkoQ3RvciwgeCkpO1xyXG5cclxuICAgIEN0b3IucHJlY2lzaW9uID0gcHI7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gcm07XHJcblxyXG4gICAgcmV0dXJuIGZpbmFsaXNlKHF1YWRyYW50ID4gMiA/IHgubmVnKCkgOiB4LCBwciwgcm0sIHRydWUpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBzcXVhcmUgcm9vdCBvZiB0aGlzIERlY2ltYWwsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmBcclxuICAgKiBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogIHNxcnQoLW4pID0gIE5cclxuICAgKiAgc3FydChOKSAgPSAgTlxyXG4gICAqICBzcXJ0KC1JKSA9ICBOXHJcbiAgICogIHNxcnQoSSkgID0gIElcclxuICAgKiAgc3FydCgwKSAgPSAgMFxyXG4gICAqICBzcXJ0KC0wKSA9IC0wXHJcbiAgICpcclxuICAgKi9cclxuICBQLnNxdWFyZVJvb3QgPSBQLnNxcnQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgbSwgbiwgc2QsIHIsIHJlcCwgdCxcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIGQgPSB4LmQsXHJcbiAgICAgIGUgPSB4LmUsXHJcbiAgICAgIHMgPSB4LnMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIC8vIE5lZ2F0aXZlL05hTi9JbmZpbml0eS96ZXJvP1xyXG4gICAgaWYgKHMgIT09IDEgfHwgIWQgfHwgIWRbMF0pIHtcclxuICAgICAgcmV0dXJuIG5ldyBDdG9yKCFzIHx8IHMgPCAwICYmICghZCB8fCBkWzBdKSA/IE5hTiA6IGQgPyB4IDogMSAvIDApO1xyXG4gICAgfVxyXG5cclxuICAgIGV4dGVybmFsID0gZmFsc2U7XHJcblxyXG4gICAgLy8gSW5pdGlhbCBlc3RpbWF0ZS5cclxuICAgIHMgPSBNYXRoLnNxcnQoK3gpO1xyXG5cclxuICAgIC8vIE1hdGguc3FydCB1bmRlcmZsb3cvb3ZlcmZsb3c/XHJcbiAgICAvLyBQYXNzIHggdG8gTWF0aC5zcXJ0IGFzIGludGVnZXIsIHRoZW4gYWRqdXN0IHRoZSBleHBvbmVudCBvZiB0aGUgcmVzdWx0LlxyXG4gICAgaWYgKHMgPT0gMCB8fCBzID09IDEgLyAwKSB7XHJcbiAgICAgIG4gPSBkaWdpdHNUb1N0cmluZyhkKTtcclxuXHJcbiAgICAgIGlmICgobi5sZW5ndGggKyBlKSAlIDIgPT0gMCkgbiArPSAnMCc7XHJcbiAgICAgIHMgPSBNYXRoLnNxcnQobik7XHJcbiAgICAgIGUgPSBtYXRoZmxvb3IoKGUgKyAxKSAvIDIpIC0gKGUgPCAwIHx8IGUgJSAyKTtcclxuXHJcbiAgICAgIGlmIChzID09IDEgLyAwKSB7XHJcbiAgICAgICAgbiA9ICcxZScgKyBlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG4gPSBzLnRvRXhwb25lbnRpYWwoKTtcclxuICAgICAgICBuID0gbi5zbGljZSgwLCBuLmluZGV4T2YoJ2UnKSArIDEpICsgZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgciA9IG5ldyBDdG9yKG4pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgciA9IG5ldyBDdG9yKHMudG9TdHJpbmcoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2QgPSAoZSA9IEN0b3IucHJlY2lzaW9uKSArIDM7XHJcblxyXG4gICAgLy8gTmV3dG9uLVJhcGhzb24gaXRlcmF0aW9uLlxyXG4gICAgZm9yICg7Oykge1xyXG4gICAgICB0ID0gcjtcclxuICAgICAgciA9IHQucGx1cyhkaXZpZGUoeCwgdCwgc2QgKyAyLCAxKSkudGltZXMoMC41KTtcclxuXHJcbiAgICAgIC8vIFRPRE8/IFJlcGxhY2Ugd2l0aCBmb3ItbG9vcCBhbmQgY2hlY2tSb3VuZGluZ0RpZ2l0cy5cclxuICAgICAgaWYgKGRpZ2l0c1RvU3RyaW5nKHQuZCkuc2xpY2UoMCwgc2QpID09PSAobiA9IGRpZ2l0c1RvU3RyaW5nKHIuZCkpLnNsaWNlKDAsIHNkKSkge1xyXG4gICAgICAgIG4gPSBuLnNsaWNlKHNkIC0gMywgc2QgKyAxKTtcclxuXHJcbiAgICAgICAgLy8gVGhlIDR0aCByb3VuZGluZyBkaWdpdCBtYXkgYmUgaW4gZXJyb3IgYnkgLTEgc28gaWYgdGhlIDQgcm91bmRpbmcgZGlnaXRzIGFyZSA5OTk5IG9yXHJcbiAgICAgICAgLy8gNDk5OSwgaS5lLiBhcHByb2FjaGluZyBhIHJvdW5kaW5nIGJvdW5kYXJ5LCBjb250aW51ZSB0aGUgaXRlcmF0aW9uLlxyXG4gICAgICAgIGlmIChuID09ICc5OTk5JyB8fCAhcmVwICYmIG4gPT0gJzQ5OTknKSB7XHJcblxyXG4gICAgICAgICAgLy8gT24gdGhlIGZpcnN0IGl0ZXJhdGlvbiBvbmx5LCBjaGVjayB0byBzZWUgaWYgcm91bmRpbmcgdXAgZ2l2ZXMgdGhlIGV4YWN0IHJlc3VsdCBhcyB0aGVcclxuICAgICAgICAgIC8vIG5pbmVzIG1heSBpbmZpbml0ZWx5IHJlcGVhdC5cclxuICAgICAgICAgIGlmICghcmVwKSB7XHJcbiAgICAgICAgICAgIGZpbmFsaXNlKHQsIGUgKyAxLCAwKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0LnRpbWVzKHQpLmVxKHgpKSB7XHJcbiAgICAgICAgICAgICAgciA9IHQ7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBzZCArPSA0O1xyXG4gICAgICAgICAgcmVwID0gMTtcclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgIC8vIElmIHRoZSByb3VuZGluZyBkaWdpdHMgYXJlIG51bGwsIDB7MCw0fSBvciA1MHswLDN9LCBjaGVjayBmb3IgYW4gZXhhY3QgcmVzdWx0LlxyXG4gICAgICAgICAgLy8gSWYgbm90LCB0aGVuIHRoZXJlIGFyZSBmdXJ0aGVyIGRpZ2l0cyBhbmQgbSB3aWxsIGJlIHRydXRoeS5cclxuICAgICAgICAgIGlmICghK24gfHwgIStuLnNsaWNlKDEpICYmIG4uY2hhckF0KDApID09ICc1Jykge1xyXG5cclxuICAgICAgICAgICAgLy8gVHJ1bmNhdGUgdG8gdGhlIGZpcnN0IHJvdW5kaW5nIGRpZ2l0LlxyXG4gICAgICAgICAgICBmaW5hbGlzZShyLCBlICsgMSwgMSk7XHJcbiAgICAgICAgICAgIG0gPSAhci50aW1lcyhyKS5lcSh4KTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBleHRlcm5hbCA9IHRydWU7XHJcblxyXG4gICAgcmV0dXJuIGZpbmFsaXNlKHIsIGUsIEN0b3Iucm91bmRpbmcsIG0pO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSB0YW5nZW50IG9mIHRoZSB2YWx1ZSBpbiByYWRpYW5zIG9mIHRoaXMgRGVjaW1hbC5cclxuICAgKlxyXG4gICAqIERvbWFpbjogWy1JbmZpbml0eSwgSW5maW5pdHldXHJcbiAgICogUmFuZ2U6IFstSW5maW5pdHksIEluZmluaXR5XVxyXG4gICAqXHJcbiAgICogdGFuKDApICAgICAgICAgPSAwXHJcbiAgICogdGFuKC0wKSAgICAgICAgPSAtMFxyXG4gICAqIHRhbihJbmZpbml0eSkgID0gTmFOXHJcbiAgICogdGFuKC1JbmZpbml0eSkgPSBOYU5cclxuICAgKiB0YW4oTmFOKSAgICAgICA9IE5hTlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC50YW5nZW50ID0gUC50YW4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgcHIsIHJtLFxyXG4gICAgICB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7XHJcblxyXG4gICAgaWYgKCF4LmlzRmluaXRlKCkpIHJldHVybiBuZXcgQ3RvcihOYU4pO1xyXG4gICAgaWYgKHguaXNaZXJvKCkpIHJldHVybiBuZXcgQ3Rvcih4KTtcclxuXHJcbiAgICBwciA9IEN0b3IucHJlY2lzaW9uO1xyXG4gICAgcm0gPSBDdG9yLnJvdW5kaW5nO1xyXG4gICAgQ3Rvci5wcmVjaXNpb24gPSBwciArIDEwO1xyXG4gICAgQ3Rvci5yb3VuZGluZyA9IDE7XHJcblxyXG4gICAgeCA9IHguc2luKCk7XHJcbiAgICB4LnMgPSAxO1xyXG4gICAgeCA9IGRpdmlkZSh4LCBuZXcgQ3RvcigxKS5taW51cyh4LnRpbWVzKHgpKS5zcXJ0KCksIHByICsgMTAsIDApO1xyXG5cclxuICAgIEN0b3IucHJlY2lzaW9uID0gcHI7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gcm07XHJcblxyXG4gICAgcmV0dXJuIGZpbmFsaXNlKHF1YWRyYW50ID09IDIgfHwgcXVhZHJhbnQgPT0gNCA/IHgubmVnKCkgOiB4LCBwciwgcm0sIHRydWUpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqICBuICogMCA9IDBcclxuICAgKiAgbiAqIE4gPSBOXHJcbiAgICogIG4gKiBJID0gSVxyXG4gICAqICAwICogbiA9IDBcclxuICAgKiAgMCAqIDAgPSAwXHJcbiAgICogIDAgKiBOID0gTlxyXG4gICAqICAwICogSSA9IE5cclxuICAgKiAgTiAqIG4gPSBOXHJcbiAgICogIE4gKiAwID0gTlxyXG4gICAqICBOICogTiA9IE5cclxuICAgKiAgTiAqIEkgPSBOXHJcbiAgICogIEkgKiBuID0gSVxyXG4gICAqICBJICogMCA9IE5cclxuICAgKiAgSSAqIE4gPSBOXHJcbiAgICogIEkgKiBJID0gSVxyXG4gICAqXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhpcyBEZWNpbWFsIHRpbWVzIGB5YCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYCBzaWduaWZpY2FudFxyXG4gICAqIGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKi9cclxuICBQLnRpbWVzID0gUC5tdWwgPSBmdW5jdGlvbiAoeSkge1xyXG4gICAgdmFyIGNhcnJ5LCBlLCBpLCBrLCByLCByTCwgdCwgeGRMLCB5ZEwsXHJcbiAgICAgIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcixcclxuICAgICAgeGQgPSB4LmQsXHJcbiAgICAgIHlkID0gKHkgPSBuZXcgQ3Rvcih5KSkuZDtcclxuXHJcbiAgICB5LnMgKj0geC5zO1xyXG5cclxuICAgICAvLyBJZiBlaXRoZXIgaXMgTmFOLCDCsUluZmluaXR5IG9yIMKxMC4uLlxyXG4gICAgaWYgKCF4ZCB8fCAheGRbMF0gfHwgIXlkIHx8ICF5ZFswXSkge1xyXG5cclxuICAgICAgcmV0dXJuIG5ldyBDdG9yKCF5LnMgfHwgeGQgJiYgIXhkWzBdICYmICF5ZCB8fCB5ZCAmJiAheWRbMF0gJiYgIXhkXHJcblxyXG4gICAgICAgIC8vIFJldHVybiBOYU4gaWYgZWl0aGVyIGlzIE5hTi5cclxuICAgICAgICAvLyBSZXR1cm4gTmFOIGlmIHggaXMgwrEwIGFuZCB5IGlzIMKxSW5maW5pdHksIG9yIHkgaXMgwrEwIGFuZCB4IGlzIMKxSW5maW5pdHkuXHJcbiAgICAgICAgPyBOYU5cclxuXHJcbiAgICAgICAgLy8gUmV0dXJuIMKxSW5maW5pdHkgaWYgZWl0aGVyIGlzIMKxSW5maW5pdHkuXHJcbiAgICAgICAgLy8gUmV0dXJuIMKxMCBpZiBlaXRoZXIgaXMgwrEwLlxyXG4gICAgICAgIDogIXhkIHx8ICF5ZCA/IHkucyAvIDAgOiB5LnMgKiAwKTtcclxuICAgIH1cclxuXHJcbiAgICBlID0gbWF0aGZsb29yKHguZSAvIExPR19CQVNFKSArIG1hdGhmbG9vcih5LmUgLyBMT0dfQkFTRSk7XHJcbiAgICB4ZEwgPSB4ZC5sZW5ndGg7XHJcbiAgICB5ZEwgPSB5ZC5sZW5ndGg7XHJcblxyXG4gICAgLy8gRW5zdXJlIHhkIHBvaW50cyB0byB0aGUgbG9uZ2VyIGFycmF5LlxyXG4gICAgaWYgKHhkTCA8IHlkTCkge1xyXG4gICAgICByID0geGQ7XHJcbiAgICAgIHhkID0geWQ7XHJcbiAgICAgIHlkID0gcjtcclxuICAgICAgckwgPSB4ZEw7XHJcbiAgICAgIHhkTCA9IHlkTDtcclxuICAgICAgeWRMID0gckw7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSW5pdGlhbGlzZSB0aGUgcmVzdWx0IGFycmF5IHdpdGggemVyb3MuXHJcbiAgICByID0gW107XHJcbiAgICByTCA9IHhkTCArIHlkTDtcclxuICAgIGZvciAoaSA9IHJMOyBpLS07KSByLnB1c2goMCk7XHJcblxyXG4gICAgLy8gTXVsdGlwbHkhXHJcbiAgICBmb3IgKGkgPSB5ZEw7IC0taSA+PSAwOykge1xyXG4gICAgICBjYXJyeSA9IDA7XHJcbiAgICAgIGZvciAoayA9IHhkTCArIGk7IGsgPiBpOykge1xyXG4gICAgICAgIHQgPSByW2tdICsgeWRbaV0gKiB4ZFtrIC0gaSAtIDFdICsgY2Fycnk7XHJcbiAgICAgICAgcltrLS1dID0gdCAlIEJBU0UgfCAwO1xyXG4gICAgICAgIGNhcnJ5ID0gdCAvIEJBU0UgfCAwO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByW2tdID0gKHJba10gKyBjYXJyeSkgJSBCQVNFIHwgMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZW1vdmUgdHJhaWxpbmcgemVyb3MuXHJcbiAgICBmb3IgKDsgIXJbLS1yTF07KSByLnBvcCgpO1xyXG5cclxuICAgIGlmIChjYXJyeSkgKytlO1xyXG4gICAgZWxzZSByLnNoaWZ0KCk7XHJcblxyXG4gICAgeS5kID0gcjtcclxuICAgIHkuZSA9IGdldEJhc2UxMEV4cG9uZW50KHIsIGUpO1xyXG5cclxuICAgIHJldHVybiBleHRlcm5hbCA/IGZpbmFsaXNlKHksIEN0b3IucHJlY2lzaW9uLCBDdG9yLnJvdW5kaW5nKSA6IHk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGluIGJhc2UgMiwgcm91bmQgdG8gYHNkYCBzaWduaWZpY2FudFxyXG4gICAqIGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGBybWAuXHJcbiAgICpcclxuICAgKiBJZiB0aGUgb3B0aW9uYWwgYHNkYCBhcmd1bWVudCBpcyBwcmVzZW50IHRoZW4gcmV0dXJuIGJpbmFyeSBleHBvbmVudGlhbCBub3RhdGlvbi5cclxuICAgKlxyXG4gICAqIFtzZF0ge251bWJlcn0gU2lnbmlmaWNhbnQgZGlnaXRzLiBJbnRlZ2VyLCAxIHRvIE1BWF9ESUdJVFMgaW5jbHVzaXZlLlxyXG4gICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAudG9CaW5hcnkgPSBmdW5jdGlvbiAoc2QsIHJtKSB7XHJcbiAgICByZXR1cm4gdG9TdHJpbmdCaW5hcnkodGhpcywgMiwgc2QsIHJtKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIHJvdW5kZWQgdG8gYSBtYXhpbXVtIG9mIGBkcGBcclxuICAgKiBkZWNpbWFsIHBsYWNlcyB1c2luZyByb3VuZGluZyBtb2RlIGBybWAgb3IgYHJvdW5kaW5nYCBpZiBgcm1gIGlzIG9taXR0ZWQuXHJcbiAgICpcclxuICAgKiBJZiBgZHBgIGlzIG9taXR0ZWQsIHJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwuXHJcbiAgICpcclxuICAgKiBbZHBdIHtudW1iZXJ9IERlY2ltYWwgcGxhY2VzLiBJbnRlZ2VyLCAwIHRvIE1BWF9ESUdJVFMgaW5jbHVzaXZlLlxyXG4gICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAudG9EZWNpbWFsUGxhY2VzID0gUC50b0RQID0gZnVuY3Rpb24gKGRwLCBybSkge1xyXG4gICAgdmFyIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjtcclxuXHJcbiAgICB4ID0gbmV3IEN0b3IoeCk7XHJcbiAgICBpZiAoZHAgPT09IHZvaWQgMCkgcmV0dXJuIHg7XHJcblxyXG4gICAgY2hlY2tJbnQzMihkcCwgMCwgTUFYX0RJR0lUUyk7XHJcblxyXG4gICAgaWYgKHJtID09PSB2b2lkIDApIHJtID0gQ3Rvci5yb3VuZGluZztcclxuICAgIGVsc2UgY2hlY2tJbnQzMihybSwgMCwgOCk7XHJcblxyXG4gICAgcmV0dXJuIGZpbmFsaXNlKHgsIGRwICsgeC5lICsgMSwgcm0pO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCBpbiBleHBvbmVudGlhbCBub3RhdGlvbiByb3VuZGVkIHRvXHJcbiAgICogYGRwYCBmaXhlZCBkZWNpbWFsIHBsYWNlcyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiBbZHBdIHtudW1iZXJ9IERlY2ltYWwgcGxhY2VzLiBJbnRlZ2VyLCAwIHRvIE1BWF9ESUdJVFMgaW5jbHVzaXZlLlxyXG4gICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAudG9FeHBvbmVudGlhbCA9IGZ1bmN0aW9uIChkcCwgcm0pIHtcclxuICAgIHZhciBzdHIsXHJcbiAgICAgIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjtcclxuXHJcbiAgICBpZiAoZHAgPT09IHZvaWQgMCkge1xyXG4gICAgICBzdHIgPSBmaW5pdGVUb1N0cmluZyh4LCB0cnVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNoZWNrSW50MzIoZHAsIDAsIE1BWF9ESUdJVFMpO1xyXG5cclxuICAgICAgaWYgKHJtID09PSB2b2lkIDApIHJtID0gQ3Rvci5yb3VuZGluZztcclxuICAgICAgZWxzZSBjaGVja0ludDMyKHJtLCAwLCA4KTtcclxuXHJcbiAgICAgIHggPSBmaW5hbGlzZShuZXcgQ3Rvcih4KSwgZHAgKyAxLCBybSk7XHJcbiAgICAgIHN0ciA9IGZpbml0ZVRvU3RyaW5nKHgsIHRydWUsIGRwICsgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHguaXNOZWcoKSAmJiAheC5pc1plcm8oKSA/ICctJyArIHN0ciA6IHN0cjtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgaW4gbm9ybWFsIChmaXhlZC1wb2ludCkgbm90YXRpb24gdG9cclxuICAgKiBgZHBgIGZpeGVkIGRlY2ltYWwgcGxhY2VzIGFuZCByb3VuZGVkIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJtYCBvciBgcm91bmRpbmdgIGlmIGBybWAgaXNcclxuICAgKiBvbWl0dGVkLlxyXG4gICAqXHJcbiAgICogQXMgd2l0aCBKYXZhU2NyaXB0IG51bWJlcnMsICgtMCkudG9GaXhlZCgwKSBpcyAnMCcsIGJ1dCBlLmcuICgtMC4wMDAwMSkudG9GaXhlZCgwKSBpcyAnLTAnLlxyXG4gICAqXHJcbiAgICogW2RwXSB7bnVtYmVyfSBEZWNpbWFsIHBsYWNlcy4gSW50ZWdlciwgMCB0byBNQVhfRElHSVRTIGluY2x1c2l2ZS5cclxuICAgKiBbcm1dIHtudW1iZXJ9IFJvdW5kaW5nIG1vZGUuIEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICpcclxuICAgKiAoLTApLnRvRml4ZWQoMCkgaXMgJzAnLCBidXQgKC0wLjEpLnRvRml4ZWQoMCkgaXMgJy0wJy5cclxuICAgKiAoLTApLnRvRml4ZWQoMSkgaXMgJzAuMCcsIGJ1dCAoLTAuMDEpLnRvRml4ZWQoMSkgaXMgJy0wLjAnLlxyXG4gICAqICgtMCkudG9GaXhlZCgzKSBpcyAnMC4wMDAnLlxyXG4gICAqICgtMC41KS50b0ZpeGVkKDApIGlzICctMCcuXHJcbiAgICpcclxuICAgKi9cclxuICBQLnRvRml4ZWQgPSBmdW5jdGlvbiAoZHAsIHJtKSB7XHJcbiAgICB2YXIgc3RyLCB5LFxyXG4gICAgICB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7XHJcblxyXG4gICAgaWYgKGRwID09PSB2b2lkIDApIHtcclxuICAgICAgc3RyID0gZmluaXRlVG9TdHJpbmcoeCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjaGVja0ludDMyKGRwLCAwLCBNQVhfRElHSVRTKTtcclxuXHJcbiAgICAgIGlmIChybSA9PT0gdm9pZCAwKSBybSA9IEN0b3Iucm91bmRpbmc7XHJcbiAgICAgIGVsc2UgY2hlY2tJbnQzMihybSwgMCwgOCk7XHJcblxyXG4gICAgICB5ID0gZmluYWxpc2UobmV3IEN0b3IoeCksIGRwICsgeC5lICsgMSwgcm0pO1xyXG4gICAgICBzdHIgPSBmaW5pdGVUb1N0cmluZyh5LCBmYWxzZSwgZHAgKyB5LmUgKyAxKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBUbyBkZXRlcm1pbmUgd2hldGhlciB0byBhZGQgdGhlIG1pbnVzIHNpZ24gbG9vayBhdCB0aGUgdmFsdWUgYmVmb3JlIGl0IHdhcyByb3VuZGVkLFxyXG4gICAgLy8gaS5lLiBsb29rIGF0IGB4YCByYXRoZXIgdGhhbiBgeWAuXHJcbiAgICByZXR1cm4geC5pc05lZygpICYmICF4LmlzWmVybygpID8gJy0nICsgc3RyIDogc3RyO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhbiBhcnJheSByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCBhcyBhIHNpbXBsZSBmcmFjdGlvbiB3aXRoIGFuIGludGVnZXJcclxuICAgKiBudW1lcmF0b3IgYW5kIGFuIGludGVnZXIgZGVub21pbmF0b3IuXHJcbiAgICpcclxuICAgKiBUaGUgZGVub21pbmF0b3Igd2lsbCBiZSBhIHBvc2l0aXZlIG5vbi16ZXJvIHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgc3BlY2lmaWVkIG1heGltdW1cclxuICAgKiBkZW5vbWluYXRvci4gSWYgYSBtYXhpbXVtIGRlbm9taW5hdG9yIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBkZW5vbWluYXRvciB3aWxsIGJlIHRoZSBsb3dlc3RcclxuICAgKiB2YWx1ZSBuZWNlc3NhcnkgdG8gcmVwcmVzZW50IHRoZSBudW1iZXIgZXhhY3RseS5cclxuICAgKlxyXG4gICAqIFttYXhEXSB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfSBNYXhpbXVtIGRlbm9taW5hdG9yLiBJbnRlZ2VyID49IDEgYW5kIDwgSW5maW5pdHkuXHJcbiAgICpcclxuICAgKi9cclxuICBQLnRvRnJhY3Rpb24gPSBmdW5jdGlvbiAobWF4RCkge1xyXG4gICAgdmFyIGQsIGQwLCBkMSwgZDIsIGUsIGssIG4sIG4wLCBuMSwgcHIsIHEsIHIsXHJcbiAgICAgIHggPSB0aGlzLFxyXG4gICAgICB4ZCA9IHguZCxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7XHJcblxyXG4gICAgaWYgKCF4ZCkgcmV0dXJuIG5ldyBDdG9yKHgpO1xyXG5cclxuICAgIG4xID0gZDAgPSBuZXcgQ3RvcigxKTtcclxuICAgIGQxID0gbjAgPSBuZXcgQ3RvcigwKTtcclxuXHJcbiAgICBkID0gbmV3IEN0b3IoZDEpO1xyXG4gICAgZSA9IGQuZSA9IGdldFByZWNpc2lvbih4ZCkgLSB4LmUgLSAxO1xyXG4gICAgayA9IGUgJSBMT0dfQkFTRTtcclxuICAgIGQuZFswXSA9IG1hdGhwb3coMTAsIGsgPCAwID8gTE9HX0JBU0UgKyBrIDogayk7XHJcblxyXG4gICAgaWYgKG1heEQgPT0gbnVsbCkge1xyXG5cclxuICAgICAgLy8gZCBpcyAxMCoqZSwgdGhlIG1pbmltdW0gbWF4LWRlbm9taW5hdG9yIG5lZWRlZC5cclxuICAgICAgbWF4RCA9IGUgPiAwID8gZCA6IG4xO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbiA9IG5ldyBDdG9yKG1heEQpO1xyXG4gICAgICBpZiAoIW4uaXNJbnQoKSB8fCBuLmx0KG4xKSkgdGhyb3cgRXJyb3IoaW52YWxpZEFyZ3VtZW50ICsgbik7XHJcbiAgICAgIG1heEQgPSBuLmd0KGQpID8gKGUgPiAwID8gZCA6IG4xKSA6IG47XHJcbiAgICB9XHJcblxyXG4gICAgZXh0ZXJuYWwgPSBmYWxzZTtcclxuICAgIG4gPSBuZXcgQ3RvcihkaWdpdHNUb1N0cmluZyh4ZCkpO1xyXG4gICAgcHIgPSBDdG9yLnByZWNpc2lvbjtcclxuICAgIEN0b3IucHJlY2lzaW9uID0gZSA9IHhkLmxlbmd0aCAqIExPR19CQVNFICogMjtcclxuXHJcbiAgICBmb3IgKDs7KSAge1xyXG4gICAgICBxID0gZGl2aWRlKG4sIGQsIDAsIDEsIDEpO1xyXG4gICAgICBkMiA9IGQwLnBsdXMocS50aW1lcyhkMSkpO1xyXG4gICAgICBpZiAoZDIuY21wKG1heEQpID09IDEpIGJyZWFrO1xyXG4gICAgICBkMCA9IGQxO1xyXG4gICAgICBkMSA9IGQyO1xyXG4gICAgICBkMiA9IG4xO1xyXG4gICAgICBuMSA9IG4wLnBsdXMocS50aW1lcyhkMikpO1xyXG4gICAgICBuMCA9IGQyO1xyXG4gICAgICBkMiA9IGQ7XHJcbiAgICAgIGQgPSBuLm1pbnVzKHEudGltZXMoZDIpKTtcclxuICAgICAgbiA9IGQyO1xyXG4gICAgfVxyXG5cclxuICAgIGQyID0gZGl2aWRlKG1heEQubWludXMoZDApLCBkMSwgMCwgMSwgMSk7XHJcbiAgICBuMCA9IG4wLnBsdXMoZDIudGltZXMobjEpKTtcclxuICAgIGQwID0gZDAucGx1cyhkMi50aW1lcyhkMSkpO1xyXG4gICAgbjAucyA9IG4xLnMgPSB4LnM7XHJcblxyXG4gICAgLy8gRGV0ZXJtaW5lIHdoaWNoIGZyYWN0aW9uIGlzIGNsb3NlciB0byB4LCBuMC9kMCBvciBuMS9kMT9cclxuICAgIHIgPSBkaXZpZGUobjEsIGQxLCBlLCAxKS5taW51cyh4KS5hYnMoKS5jbXAoZGl2aWRlKG4wLCBkMCwgZSwgMSkubWludXMoeCkuYWJzKCkpIDwgMVxyXG4gICAgICAgID8gW24xLCBkMV0gOiBbbjAsIGQwXTtcclxuXHJcbiAgICBDdG9yLnByZWNpc2lvbiA9IHByO1xyXG4gICAgZXh0ZXJuYWwgPSB0cnVlO1xyXG5cclxuICAgIHJldHVybiByO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCBpbiBiYXNlIDE2LCByb3VuZCB0byBgc2RgIHNpZ25pZmljYW50XHJcbiAgICogZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJtYC5cclxuICAgKlxyXG4gICAqIElmIHRoZSBvcHRpb25hbCBgc2RgIGFyZ3VtZW50IGlzIHByZXNlbnQgdGhlbiByZXR1cm4gYmluYXJ5IGV4cG9uZW50aWFsIG5vdGF0aW9uLlxyXG4gICAqXHJcbiAgICogW3NkXSB7bnVtYmVyfSBTaWduaWZpY2FudCBkaWdpdHMuIEludGVnZXIsIDEgdG8gTUFYX0RJR0lUUyBpbmNsdXNpdmUuXHJcbiAgICogW3JtXSB7bnVtYmVyfSBSb3VuZGluZyBtb2RlLiBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC50b0hleGFkZWNpbWFsID0gUC50b0hleCA9IGZ1bmN0aW9uIChzZCwgcm0pIHtcclxuICAgIHJldHVybiB0b1N0cmluZ0JpbmFyeSh0aGlzLCAxNiwgc2QsIHJtKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm5zIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIG5lYXJlc3QgbXVsdGlwbGUgb2YgYHlgIGluIHRoZSBkaXJlY3Rpb24gb2Ygcm91bmRpbmdcclxuICAgKiBtb2RlIGBybWAsIG9yIGBEZWNpbWFsLnJvdW5kaW5nYCBpZiBgcm1gIGlzIG9taXR0ZWQsIHRvIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwuXHJcbiAgICpcclxuICAgKiBUaGUgcmV0dXJuIHZhbHVlIHdpbGwgYWx3YXlzIGhhdmUgdGhlIHNhbWUgc2lnbiBhcyB0aGlzIERlY2ltYWwsIHVubGVzcyBlaXRoZXIgdGhpcyBEZWNpbWFsXHJcbiAgICogb3IgYHlgIGlzIE5hTiwgaW4gd2hpY2ggY2FzZSB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgYWxzbyBiZSBOYU4uXHJcbiAgICpcclxuICAgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIG5vdCBhZmZlY3RlZCBieSB0aGUgdmFsdWUgb2YgYHByZWNpc2lvbmAuXHJcbiAgICpcclxuICAgKiB5IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IFRoZSBtYWduaXR1ZGUgdG8gcm91bmQgdG8gYSBtdWx0aXBsZSBvZi5cclxuICAgKiBbcm1dIHtudW1iZXJ9IFJvdW5kaW5nIG1vZGUuIEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICpcclxuICAgKiAndG9OZWFyZXN0KCkgcm91bmRpbmcgbW9kZSBub3QgYW4gaW50ZWdlcjoge3JtfSdcclxuICAgKiAndG9OZWFyZXN0KCkgcm91bmRpbmcgbW9kZSBvdXQgb2YgcmFuZ2U6IHtybX0nXHJcbiAgICpcclxuICAgKi9cclxuICBQLnRvTmVhcmVzdCA9IGZ1bmN0aW9uICh5LCBybSkge1xyXG4gICAgdmFyIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjtcclxuXHJcbiAgICB4ID0gbmV3IEN0b3IoeCk7XHJcblxyXG4gICAgaWYgKHkgPT0gbnVsbCkge1xyXG5cclxuICAgICAgLy8gSWYgeCBpcyBub3QgZmluaXRlLCByZXR1cm4geC5cclxuICAgICAgaWYgKCF4LmQpIHJldHVybiB4O1xyXG5cclxuICAgICAgeSA9IG5ldyBDdG9yKDEpO1xyXG4gICAgICBybSA9IEN0b3Iucm91bmRpbmc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB5ID0gbmV3IEN0b3IoeSk7XHJcbiAgICAgIGlmIChybSA9PT0gdm9pZCAwKSB7XHJcbiAgICAgICAgcm0gPSBDdG9yLnJvdW5kaW5nO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNoZWNrSW50MzIocm0sIDAsIDgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBJZiB4IGlzIG5vdCBmaW5pdGUsIHJldHVybiB4IGlmIHkgaXMgbm90IE5hTiwgZWxzZSBOYU4uXHJcbiAgICAgIGlmICgheC5kKSByZXR1cm4geS5zID8geCA6IHk7XHJcblxyXG4gICAgICAvLyBJZiB5IGlzIG5vdCBmaW5pdGUsIHJldHVybiBJbmZpbml0eSB3aXRoIHRoZSBzaWduIG9mIHggaWYgeSBpcyBJbmZpbml0eSwgZWxzZSBOYU4uXHJcbiAgICAgIGlmICgheS5kKSB7XHJcbiAgICAgICAgaWYgKHkucykgeS5zID0geC5zO1xyXG4gICAgICAgIHJldHVybiB5O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSWYgeSBpcyBub3QgemVybywgY2FsY3VsYXRlIHRoZSBuZWFyZXN0IG11bHRpcGxlIG9mIHkgdG8geC5cclxuICAgIGlmICh5LmRbMF0pIHtcclxuICAgICAgZXh0ZXJuYWwgPSBmYWxzZTtcclxuICAgICAgeCA9IGRpdmlkZSh4LCB5LCAwLCBybSwgMSkudGltZXMoeSk7XHJcbiAgICAgIGV4dGVybmFsID0gdHJ1ZTtcclxuICAgICAgZmluYWxpc2UoeCk7XHJcblxyXG4gICAgLy8gSWYgeSBpcyB6ZXJvLCByZXR1cm4gemVybyB3aXRoIHRoZSBzaWduIG9mIHguXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB5LnMgPSB4LnM7XHJcbiAgICAgIHggPSB5O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB4O1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGNvbnZlcnRlZCB0byBhIG51bWJlciBwcmltaXRpdmUuXHJcbiAgICogWmVybyBrZWVwcyBpdHMgc2lnbi5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAudG9OdW1iZXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gK3RoaXM7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGluIGJhc2UgOCwgcm91bmQgdG8gYHNkYCBzaWduaWZpY2FudFxyXG4gICAqIGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGBybWAuXHJcbiAgICpcclxuICAgKiBJZiB0aGUgb3B0aW9uYWwgYHNkYCBhcmd1bWVudCBpcyBwcmVzZW50IHRoZW4gcmV0dXJuIGJpbmFyeSBleHBvbmVudGlhbCBub3RhdGlvbi5cclxuICAgKlxyXG4gICAqIFtzZF0ge251bWJlcn0gU2lnbmlmaWNhbnQgZGlnaXRzLiBJbnRlZ2VyLCAxIHRvIE1BWF9ESUdJVFMgaW5jbHVzaXZlLlxyXG4gICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAudG9PY3RhbCA9IGZ1bmN0aW9uIChzZCwgcm0pIHtcclxuICAgIHJldHVybiB0b1N0cmluZ0JpbmFyeSh0aGlzLCA4LCBzZCwgcm0pO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgcmFpc2VkIHRvIHRoZSBwb3dlciBgeWAsIHJvdW5kZWRcclxuICAgKiB0byBgcHJlY2lzaW9uYCBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogRUNNQVNjcmlwdCBjb21wbGlhbnQuXHJcbiAgICpcclxuICAgKiAgIHBvdyh4LCBOYU4pICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBOYU5cclxuICAgKiAgIHBvdyh4LCDCsTApICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMVxyXG5cclxuICAgKiAgIHBvdyhOYU4sIG5vbi16ZXJvKSAgICAgICAgICAgICAgICAgICAgPSBOYU5cclxuICAgKiAgIHBvdyhhYnMoeCkgPiAxLCArSW5maW5pdHkpICAgICAgICAgICAgPSArSW5maW5pdHlcclxuICAgKiAgIHBvdyhhYnMoeCkgPiAxLCAtSW5maW5pdHkpICAgICAgICAgICAgPSArMFxyXG4gICAqICAgcG93KGFicyh4KSA9PSAxLCDCsUluZmluaXR5KSAgICAgICAgICAgPSBOYU5cclxuICAgKiAgIHBvdyhhYnMoeCkgPCAxLCArSW5maW5pdHkpICAgICAgICAgICAgPSArMFxyXG4gICAqICAgcG93KGFicyh4KSA8IDEsIC1JbmZpbml0eSkgICAgICAgICAgICA9ICtJbmZpbml0eVxyXG4gICAqICAgcG93KCtJbmZpbml0eSwgeSA+IDApICAgICAgICAgICAgICAgICA9ICtJbmZpbml0eVxyXG4gICAqICAgcG93KCtJbmZpbml0eSwgeSA8IDApICAgICAgICAgICAgICAgICA9ICswXHJcbiAgICogICBwb3coLUluZmluaXR5LCBvZGQgaW50ZWdlciA+IDApICAgICAgID0gLUluZmluaXR5XHJcbiAgICogICBwb3coLUluZmluaXR5LCBldmVuIGludGVnZXIgPiAwKSAgICAgID0gK0luZmluaXR5XHJcbiAgICogICBwb3coLUluZmluaXR5LCBvZGQgaW50ZWdlciA8IDApICAgICAgID0gLTBcclxuICAgKiAgIHBvdygtSW5maW5pdHksIGV2ZW4gaW50ZWdlciA8IDApICAgICAgPSArMFxyXG4gICAqICAgcG93KCswLCB5ID4gMCkgICAgICAgICAgICAgICAgICAgICAgICA9ICswXHJcbiAgICogICBwb3coKzAsIHkgPCAwKSAgICAgICAgICAgICAgICAgICAgICAgID0gK0luZmluaXR5XHJcbiAgICogICBwb3coLTAsIG9kZCBpbnRlZ2VyID4gMCkgICAgICAgICAgICAgID0gLTBcclxuICAgKiAgIHBvdygtMCwgZXZlbiBpbnRlZ2VyID4gMCkgICAgICAgICAgICAgPSArMFxyXG4gICAqICAgcG93KC0wLCBvZGQgaW50ZWdlciA8IDApICAgICAgICAgICAgICA9IC1JbmZpbml0eVxyXG4gICAqICAgcG93KC0wLCBldmVuIGludGVnZXIgPCAwKSAgICAgICAgICAgICA9ICtJbmZpbml0eVxyXG4gICAqICAgcG93KGZpbml0ZSB4IDwgMCwgZmluaXRlIG5vbi1pbnRlZ2VyKSA9IE5hTlxyXG4gICAqXHJcbiAgICogRm9yIG5vbi1pbnRlZ2VyIG9yIHZlcnkgbGFyZ2UgZXhwb25lbnRzIHBvdyh4LCB5KSBpcyBjYWxjdWxhdGVkIHVzaW5nXHJcbiAgICpcclxuICAgKiAgIHheeSA9IGV4cCh5KmxuKHgpKVxyXG4gICAqXHJcbiAgICogQXNzdW1pbmcgdGhlIGZpcnN0IDE1IHJvdW5kaW5nIGRpZ2l0cyBhcmUgZWFjaCBlcXVhbGx5IGxpa2VseSB0byBiZSBhbnkgZGlnaXQgMC05LCB0aGVcclxuICAgKiBwcm9iYWJpbGl0eSBvZiBhbiBpbmNvcnJlY3RseSByb3VuZGVkIHJlc3VsdFxyXG4gICAqIFAoWzQ5XTl7MTR9IHwgWzUwXTB7MTR9KSA9IDIgKiAwLjIgKiAxMF4tMTQgPSA0ZS0xNSA9IDEvMi41ZSsxNFxyXG4gICAqIGkuZS4gMSBpbiAyNTAsMDAwLDAwMCwwMDAsMDAwXHJcbiAgICpcclxuICAgKiBJZiBhIHJlc3VsdCBpcyBpbmNvcnJlY3RseSByb3VuZGVkIHRoZSBtYXhpbXVtIGVycm9yIHdpbGwgYmUgMSB1bHAgKHVuaXQgaW4gbGFzdCBwbGFjZSkuXHJcbiAgICpcclxuICAgKiB5IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IFRoZSBwb3dlciB0byB3aGljaCB0byByYWlzZSB0aGlzIERlY2ltYWwuXHJcbiAgICpcclxuICAgKi9cclxuICBQLnRvUG93ZXIgPSBQLnBvdyA9IGZ1bmN0aW9uICh5KSB7XHJcbiAgICB2YXIgZSwgaywgcHIsIHIsIHJtLCBzLFxyXG4gICAgICB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3IsXHJcbiAgICAgIHluID0gKyh5ID0gbmV3IEN0b3IoeSkpO1xyXG5cclxuICAgIC8vIEVpdGhlciDCsUluZmluaXR5LCBOYU4gb3IgwrEwP1xyXG4gICAgaWYgKCF4LmQgfHwgIXkuZCB8fCAheC5kWzBdIHx8ICF5LmRbMF0pIHJldHVybiBuZXcgQ3RvcihtYXRocG93KCt4LCB5bikpO1xyXG5cclxuICAgIHggPSBuZXcgQ3Rvcih4KTtcclxuXHJcbiAgICBpZiAoeC5lcSgxKSkgcmV0dXJuIHg7XHJcblxyXG4gICAgcHIgPSBDdG9yLnByZWNpc2lvbjtcclxuICAgIHJtID0gQ3Rvci5yb3VuZGluZztcclxuXHJcbiAgICBpZiAoeS5lcSgxKSkgcmV0dXJuIGZpbmFsaXNlKHgsIHByLCBybSk7XHJcblxyXG4gICAgLy8geSBleHBvbmVudFxyXG4gICAgZSA9IG1hdGhmbG9vcih5LmUgLyBMT0dfQkFTRSk7XHJcblxyXG4gICAgLy8gSWYgeSBpcyBhIHNtYWxsIGludGVnZXIgdXNlIHRoZSAnZXhwb25lbnRpYXRpb24gYnkgc3F1YXJpbmcnIGFsZ29yaXRobS5cclxuICAgIGlmIChlID49IHkuZC5sZW5ndGggLSAxICYmIChrID0geW4gPCAwID8gLXluIDogeW4pIDw9IE1BWF9TQUZFX0lOVEVHRVIpIHtcclxuICAgICAgciA9IGludFBvdyhDdG9yLCB4LCBrLCBwcik7XHJcbiAgICAgIHJldHVybiB5LnMgPCAwID8gbmV3IEN0b3IoMSkuZGl2KHIpIDogZmluYWxpc2UociwgcHIsIHJtKTtcclxuICAgIH1cclxuXHJcbiAgICBzID0geC5zO1xyXG5cclxuICAgIC8vIGlmIHggaXMgbmVnYXRpdmVcclxuICAgIGlmIChzIDwgMCkge1xyXG5cclxuICAgICAgLy8gaWYgeSBpcyBub3QgYW4gaW50ZWdlclxyXG4gICAgICBpZiAoZSA8IHkuZC5sZW5ndGggLSAxKSByZXR1cm4gbmV3IEN0b3IoTmFOKTtcclxuXHJcbiAgICAgIC8vIFJlc3VsdCBpcyBwb3NpdGl2ZSBpZiB4IGlzIG5lZ2F0aXZlIGFuZCB0aGUgbGFzdCBkaWdpdCBvZiBpbnRlZ2VyIHkgaXMgZXZlbi5cclxuICAgICAgaWYgKCh5LmRbZV0gJiAxKSA9PSAwKSBzID0gMTtcclxuXHJcbiAgICAgIC8vIGlmIHguZXEoLTEpXHJcbiAgICAgIGlmICh4LmUgPT0gMCAmJiB4LmRbMF0gPT0gMSAmJiB4LmQubGVuZ3RoID09IDEpIHtcclxuICAgICAgICB4LnMgPSBzO1xyXG4gICAgICAgIHJldHVybiB4O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRXN0aW1hdGUgcmVzdWx0IGV4cG9uZW50LlxyXG4gICAgLy8geF55ID0gMTBeZSwgIHdoZXJlIGUgPSB5ICogbG9nMTAoeClcclxuICAgIC8vIGxvZzEwKHgpID0gbG9nMTAoeF9zaWduaWZpY2FuZCkgKyB4X2V4cG9uZW50XHJcbiAgICAvLyBsb2cxMCh4X3NpZ25pZmljYW5kKSA9IGxuKHhfc2lnbmlmaWNhbmQpIC8gbG4oMTApXHJcbiAgICBrID0gbWF0aHBvdygreCwgeW4pO1xyXG4gICAgZSA9IGsgPT0gMCB8fCAhaXNGaW5pdGUoaylcclxuICAgICAgPyBtYXRoZmxvb3IoeW4gKiAoTWF0aC5sb2coJzAuJyArIGRpZ2l0c1RvU3RyaW5nKHguZCkpIC8gTWF0aC5MTjEwICsgeC5lICsgMSkpXHJcbiAgICAgIDogbmV3IEN0b3IoayArICcnKS5lO1xyXG5cclxuICAgIC8vIEV4cG9uZW50IGVzdGltYXRlIG1heSBiZSBpbmNvcnJlY3QgZS5nLiB4OiAwLjk5OTk5OTk5OTk5OTk5OTk5OSwgeTogMi4yOSwgZTogMCwgci5lOiAtMS5cclxuXHJcbiAgICAvLyBPdmVyZmxvdy91bmRlcmZsb3c/XHJcbiAgICBpZiAoZSA+IEN0b3IubWF4RSArIDEgfHwgZSA8IEN0b3IubWluRSAtIDEpIHJldHVybiBuZXcgQ3RvcihlID4gMCA/IHMgLyAwIDogMCk7XHJcblxyXG4gICAgZXh0ZXJuYWwgPSBmYWxzZTtcclxuICAgIEN0b3Iucm91bmRpbmcgPSB4LnMgPSAxO1xyXG5cclxuICAgIC8vIEVzdGltYXRlIHRoZSBleHRyYSBndWFyZCBkaWdpdHMgbmVlZGVkIHRvIGVuc3VyZSBmaXZlIGNvcnJlY3Qgcm91bmRpbmcgZGlnaXRzIGZyb21cclxuICAgIC8vIG5hdHVyYWxMb2dhcml0aG0oeCkuIEV4YW1wbGUgb2YgZmFpbHVyZSB3aXRob3V0IHRoZXNlIGV4dHJhIGRpZ2l0cyAocHJlY2lzaW9uOiAxMCk6XHJcbiAgICAvLyBuZXcgRGVjaW1hbCgyLjMyNDU2KS5wb3coJzIwODc5ODc0MzY1MzQ1NjYuNDY0MTEnKVxyXG4gICAgLy8gc2hvdWxkIGJlIDEuMTYyMzc3ODIzZSs3NjQ5MTQ5MDUxNzM4MTUsIGJ1dCBpcyAxLjE2MjM1NTgyM2UrNzY0OTE0OTA1MTczODE1XHJcbiAgICBrID0gTWF0aC5taW4oMTIsIChlICsgJycpLmxlbmd0aCk7XHJcblxyXG4gICAgLy8gciA9IHheeSA9IGV4cCh5KmxuKHgpKVxyXG4gICAgciA9IG5hdHVyYWxFeHBvbmVudGlhbCh5LnRpbWVzKG5hdHVyYWxMb2dhcml0aG0oeCwgcHIgKyBrKSksIHByKTtcclxuXHJcbiAgICAvLyByIG1heSBiZSBJbmZpbml0eSwgZS5nLiAoMC45OTk5OTk5OTk5OTk5OTk5KS5wb3coLTFlKzQwKVxyXG4gICAgaWYgKHIuZCkge1xyXG5cclxuICAgICAgLy8gVHJ1bmNhdGUgdG8gdGhlIHJlcXVpcmVkIHByZWNpc2lvbiBwbHVzIGZpdmUgcm91bmRpbmcgZGlnaXRzLlxyXG4gICAgICByID0gZmluYWxpc2UociwgcHIgKyA1LCAxKTtcclxuXHJcbiAgICAgIC8vIElmIHRoZSByb3VuZGluZyBkaWdpdHMgYXJlIFs0OV05OTk5IG9yIFs1MF0wMDAwIGluY3JlYXNlIHRoZSBwcmVjaXNpb24gYnkgMTAgYW5kIHJlY2FsY3VsYXRlXHJcbiAgICAgIC8vIHRoZSByZXN1bHQuXHJcbiAgICAgIGlmIChjaGVja1JvdW5kaW5nRGlnaXRzKHIuZCwgcHIsIHJtKSkge1xyXG4gICAgICAgIGUgPSBwciArIDEwO1xyXG5cclxuICAgICAgICAvLyBUcnVuY2F0ZSB0byB0aGUgaW5jcmVhc2VkIHByZWNpc2lvbiBwbHVzIGZpdmUgcm91bmRpbmcgZGlnaXRzLlxyXG4gICAgICAgIHIgPSBmaW5hbGlzZShuYXR1cmFsRXhwb25lbnRpYWwoeS50aW1lcyhuYXR1cmFsTG9nYXJpdGhtKHgsIGUgKyBrKSksIGUpLCBlICsgNSwgMSk7XHJcblxyXG4gICAgICAgIC8vIENoZWNrIGZvciAxNCBuaW5lcyBmcm9tIHRoZSAybmQgcm91bmRpbmcgZGlnaXQgKHRoZSBmaXJzdCByb3VuZGluZyBkaWdpdCBtYXkgYmUgNCBvciA5KS5cclxuICAgICAgICBpZiAoK2RpZ2l0c1RvU3RyaW5nKHIuZCkuc2xpY2UocHIgKyAxLCBwciArIDE1KSArIDEgPT0gMWUxNCkge1xyXG4gICAgICAgICAgciA9IGZpbmFsaXNlKHIsIHByICsgMSwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgci5zID0gcztcclxuICAgIGV4dGVybmFsID0gdHJ1ZTtcclxuICAgIEN0b3Iucm91bmRpbmcgPSBybTtcclxuXHJcbiAgICByZXR1cm4gZmluYWxpc2UociwgcHIsIHJtKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgcm91bmRlZCB0byBgc2RgIHNpZ25pZmljYW50IGRpZ2l0c1xyXG4gICAqIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIFJldHVybiBleHBvbmVudGlhbCBub3RhdGlvbiBpZiBgc2RgIGlzIGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBuZWNlc3NhcnkgdG8gcmVwcmVzZW50XHJcbiAgICogdGhlIGludGVnZXIgcGFydCBvZiB0aGUgdmFsdWUgaW4gbm9ybWFsIG5vdGF0aW9uLlxyXG4gICAqXHJcbiAgICogW3NkXSB7bnVtYmVyfSBTaWduaWZpY2FudCBkaWdpdHMuIEludGVnZXIsIDEgdG8gTUFYX0RJR0lUUyBpbmNsdXNpdmUuXHJcbiAgICogW3JtXSB7bnVtYmVyfSBSb3VuZGluZyBtb2RlLiBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC50b1ByZWNpc2lvbiA9IGZ1bmN0aW9uIChzZCwgcm0pIHtcclxuICAgIHZhciBzdHIsXHJcbiAgICAgIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjtcclxuXHJcbiAgICBpZiAoc2QgPT09IHZvaWQgMCkge1xyXG4gICAgICBzdHIgPSBmaW5pdGVUb1N0cmluZyh4LCB4LmUgPD0gQ3Rvci50b0V4cE5lZyB8fCB4LmUgPj0gQ3Rvci50b0V4cFBvcyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjaGVja0ludDMyKHNkLCAxLCBNQVhfRElHSVRTKTtcclxuXHJcbiAgICAgIGlmIChybSA9PT0gdm9pZCAwKSBybSA9IEN0b3Iucm91bmRpbmc7XHJcbiAgICAgIGVsc2UgY2hlY2tJbnQzMihybSwgMCwgOCk7XHJcblxyXG4gICAgICB4ID0gZmluYWxpc2UobmV3IEN0b3IoeCksIHNkLCBybSk7XHJcbiAgICAgIHN0ciA9IGZpbml0ZVRvU3RyaW5nKHgsIHNkIDw9IHguZSB8fCB4LmUgPD0gQ3Rvci50b0V4cE5lZywgc2QpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB4LmlzTmVnKCkgJiYgIXguaXNaZXJvKCkgPyAnLScgKyBzdHIgOiBzdHI7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCByb3VuZGVkIHRvIGEgbWF4aW11bSBvZiBgc2RgXHJcbiAgICogc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJtYCwgb3IgdG8gYHByZWNpc2lvbmAgYW5kIGByb3VuZGluZ2AgcmVzcGVjdGl2ZWx5IGlmXHJcbiAgICogb21pdHRlZC5cclxuICAgKlxyXG4gICAqIFtzZF0ge251bWJlcn0gU2lnbmlmaWNhbnQgZGlnaXRzLiBJbnRlZ2VyLCAxIHRvIE1BWF9ESUdJVFMgaW5jbHVzaXZlLlxyXG4gICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgKlxyXG4gICAqICd0b1NEKCkgZGlnaXRzIG91dCBvZiByYW5nZToge3NkfSdcclxuICAgKiAndG9TRCgpIGRpZ2l0cyBub3QgYW4gaW50ZWdlcjoge3NkfSdcclxuICAgKiAndG9TRCgpIHJvdW5kaW5nIG1vZGUgbm90IGFuIGludGVnZXI6IHtybX0nXHJcbiAgICogJ3RvU0QoKSByb3VuZGluZyBtb2RlIG91dCBvZiByYW5nZToge3JtfSdcclxuICAgKlxyXG4gICAqL1xyXG4gIFAudG9TaWduaWZpY2FudERpZ2l0cyA9IFAudG9TRCA9IGZ1bmN0aW9uIChzZCwgcm0pIHtcclxuICAgIHZhciB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7XHJcblxyXG4gICAgaWYgKHNkID09PSB2b2lkIDApIHtcclxuICAgICAgc2QgPSBDdG9yLnByZWNpc2lvbjtcclxuICAgICAgcm0gPSBDdG9yLnJvdW5kaW5nO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY2hlY2tJbnQzMihzZCwgMSwgTUFYX0RJR0lUUyk7XHJcblxyXG4gICAgICBpZiAocm0gPT09IHZvaWQgMCkgcm0gPSBDdG9yLnJvdW5kaW5nO1xyXG4gICAgICBlbHNlIGNoZWNrSW50MzIocm0sIDAsIDgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmaW5hbGlzZShuZXcgQ3Rvcih4KSwgc2QsIHJtKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwuXHJcbiAgICpcclxuICAgKiBSZXR1cm4gZXhwb25lbnRpYWwgbm90YXRpb24gaWYgdGhpcyBEZWNpbWFsIGhhcyBhIHBvc2l0aXZlIGV4cG9uZW50IGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhblxyXG4gICAqIGB0b0V4cFBvc2AsIG9yIGEgbmVnYXRpdmUgZXhwb25lbnQgZXF1YWwgdG8gb3IgbGVzcyB0aGFuIGB0b0V4cE5lZ2AuXHJcbiAgICpcclxuICAgKi9cclxuICBQLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcixcclxuICAgICAgc3RyID0gZmluaXRlVG9TdHJpbmcoeCwgeC5lIDw9IEN0b3IudG9FeHBOZWcgfHwgeC5lID49IEN0b3IudG9FeHBQb3MpO1xyXG5cclxuICAgIHJldHVybiB4LmlzTmVnKCkgJiYgIXguaXNaZXJvKCkgPyAnLScgKyBzdHIgOiBzdHI7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCB0cnVuY2F0ZWQgdG8gYSB3aG9sZSBudW1iZXIuXHJcbiAgICpcclxuICAgKi9cclxuICBQLnRydW5jYXRlZCA9IFAudHJ1bmMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gZmluYWxpc2UobmV3IHRoaXMuY29uc3RydWN0b3IodGhpcyksIHRoaXMuZSArIDEsIDEpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbC5cclxuICAgKiBVbmxpa2UgYHRvU3RyaW5nYCwgbmVnYXRpdmUgemVybyB3aWxsIGluY2x1ZGUgdGhlIG1pbnVzIHNpZ24uXHJcbiAgICpcclxuICAgKi9cclxuICBQLnZhbHVlT2YgPSBQLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3IsXHJcbiAgICAgIHN0ciA9IGZpbml0ZVRvU3RyaW5nKHgsIHguZSA8PSBDdG9yLnRvRXhwTmVnIHx8IHguZSA+PSBDdG9yLnRvRXhwUG9zKTtcclxuXHJcbiAgICByZXR1cm4geC5pc05lZygpID8gJy0nICsgc3RyIDogc3RyO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gIC8vIEFkZCBhbGlhc2VzIHRvIG1hdGNoIEJpZ0RlY2ltYWwgbWV0aG9kIG5hbWVzLlxyXG4gIC8vIFAuYWRkID0gUC5wbHVzO1xyXG4gIFAuc3VidHJhY3QgPSBQLm1pbnVzO1xyXG4gIFAubXVsdGlwbHkgPSBQLnRpbWVzO1xyXG4gIFAuZGl2aWRlID0gUC5kaXY7XHJcbiAgUC5yZW1haW5kZXIgPSBQLm1vZDtcclxuICBQLmNvbXBhcmVUbyA9IFAuY21wO1xyXG4gIFAubmVnYXRlID0gUC5uZWc7XHJcbiAgICovXHJcblxyXG5cclxuICAvLyBIZWxwZXIgZnVuY3Rpb25zIGZvciBEZWNpbWFsLnByb3RvdHlwZSAoUCkgYW5kL29yIERlY2ltYWwgbWV0aG9kcywgYW5kIHRoZWlyIGNhbGxlcnMuXHJcblxyXG5cclxuICAvKlxyXG4gICAqICBkaWdpdHNUb1N0cmluZyAgICAgICAgICAgUC5jdWJlUm9vdCwgUC5sb2dhcml0aG0sIFAuc3F1YXJlUm9vdCwgUC50b0ZyYWN0aW9uLCBQLnRvUG93ZXIsXHJcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5pdGVUb1N0cmluZywgbmF0dXJhbEV4cG9uZW50aWFsLCBuYXR1cmFsTG9nYXJpdGhtXHJcbiAgICogIGNoZWNrSW50MzIgICAgICAgICAgICAgICBQLnRvRGVjaW1hbFBsYWNlcywgUC50b0V4cG9uZW50aWFsLCBQLnRvRml4ZWQsIFAudG9OZWFyZXN0LFxyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgUC50b1ByZWNpc2lvbiwgUC50b1NpZ25pZmljYW50RGlnaXRzLCB0b1N0cmluZ0JpbmFyeSwgcmFuZG9tXHJcbiAgICogIGNoZWNrUm91bmRpbmdEaWdpdHMgICAgICBQLmxvZ2FyaXRobSwgUC50b1Bvd2VyLCBuYXR1cmFsRXhwb25lbnRpYWwsIG5hdHVyYWxMb2dhcml0aG1cclxuICAgKiAgY29udmVydEJhc2UgICAgICAgICAgICAgIHRvU3RyaW5nQmluYXJ5LCBwYXJzZU90aGVyXHJcbiAgICogIGNvcyAgICAgICAgICAgICAgICAgICAgICBQLmNvc1xyXG4gICAqICBkaXZpZGUgICAgICAgICAgICAgICAgICAgUC5hdGFuaCwgUC5jdWJlUm9vdCwgUC5kaXZpZGVkQnksIFAuZGl2aWRlZFRvSW50ZWdlckJ5LFxyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgUC5sb2dhcml0aG0sIFAubW9kdWxvLCBQLnNxdWFyZVJvb3QsIFAudGFuLCBQLnRhbmgsIFAudG9GcmFjdGlvbixcclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFAudG9OZWFyZXN0LCB0b1N0cmluZ0JpbmFyeSwgbmF0dXJhbEV4cG9uZW50aWFsLCBuYXR1cmFsTG9nYXJpdGhtLFxyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF5bG9yU2VyaWVzLCBhdGFuMiwgcGFyc2VPdGhlclxyXG4gICAqICBmaW5hbGlzZSAgICAgICAgICAgICAgICAgUC5hYnNvbHV0ZVZhbHVlLCBQLmF0YW4sIFAuYXRhbmgsIFAuY2VpbCwgUC5jb3MsIFAuY29zaCxcclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFAuY3ViZVJvb3QsIFAuZGl2aWRlZFRvSW50ZWdlckJ5LCBQLmZsb29yLCBQLmxvZ2FyaXRobSwgUC5taW51cyxcclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFAubW9kdWxvLCBQLm5lZ2F0ZWQsIFAucGx1cywgUC5yb3VuZCwgUC5zaW4sIFAuc2luaCwgUC5zcXVhcmVSb290LFxyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgUC50YW4sIFAudGltZXMsIFAudG9EZWNpbWFsUGxhY2VzLCBQLnRvRXhwb25lbnRpYWwsIFAudG9GaXhlZCxcclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFAudG9OZWFyZXN0LCBQLnRvUG93ZXIsIFAudG9QcmVjaXNpb24sIFAudG9TaWduaWZpY2FudERpZ2l0cyxcclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFAudHJ1bmNhdGVkLCBkaXZpZGUsIGdldExuMTAsIGdldFBpLCBuYXR1cmFsRXhwb25lbnRpYWwsXHJcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBuYXR1cmFsTG9nYXJpdGhtLCBjZWlsLCBmbG9vciwgcm91bmQsIHRydW5jXHJcbiAgICogIGZpbml0ZVRvU3RyaW5nICAgICAgICAgICBQLnRvRXhwb25lbnRpYWwsIFAudG9GaXhlZCwgUC50b1ByZWNpc2lvbiwgUC50b1N0cmluZywgUC52YWx1ZU9mLFxyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9TdHJpbmdCaW5hcnlcclxuICAgKiAgZ2V0QmFzZTEwRXhwb25lbnQgICAgICAgIFAubWludXMsIFAucGx1cywgUC50aW1lcywgcGFyc2VPdGhlclxyXG4gICAqICBnZXRMbjEwICAgICAgICAgICAgICAgICAgUC5sb2dhcml0aG0sIG5hdHVyYWxMb2dhcml0aG1cclxuICAgKiAgZ2V0UGkgICAgICAgICAgICAgICAgICAgIFAuYWNvcywgUC5hc2luLCBQLmF0YW4sIHRvTGVzc1RoYW5IYWxmUGksIGF0YW4yXHJcbiAgICogIGdldFByZWNpc2lvbiAgICAgICAgICAgICBQLnByZWNpc2lvbiwgUC50b0ZyYWN0aW9uXHJcbiAgICogIGdldFplcm9TdHJpbmcgICAgICAgICAgICBkaWdpdHNUb1N0cmluZywgZmluaXRlVG9TdHJpbmdcclxuICAgKiAgaW50UG93ICAgICAgICAgICAgICAgICAgIFAudG9Qb3dlciwgcGFyc2VPdGhlclxyXG4gICAqICBpc09kZCAgICAgICAgICAgICAgICAgICAgdG9MZXNzVGhhbkhhbGZQaVxyXG4gICAqICBtYXhPck1pbiAgICAgICAgICAgICAgICAgbWF4LCBtaW5cclxuICAgKiAgbmF0dXJhbEV4cG9uZW50aWFsICAgICAgIFAubmF0dXJhbEV4cG9uZW50aWFsLCBQLnRvUG93ZXJcclxuICAgKiAgbmF0dXJhbExvZ2FyaXRobSAgICAgICAgIFAuYWNvc2gsIFAuYXNpbmgsIFAuYXRhbmgsIFAubG9nYXJpdGhtLCBQLm5hdHVyYWxMb2dhcml0aG0sXHJcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBQLnRvUG93ZXIsIG5hdHVyYWxFeHBvbmVudGlhbFxyXG4gICAqICBub25GaW5pdGVUb1N0cmluZyAgICAgICAgZmluaXRlVG9TdHJpbmcsIHRvU3RyaW5nQmluYXJ5XHJcbiAgICogIHBhcnNlRGVjaW1hbCAgICAgICAgICAgICBEZWNpbWFsXHJcbiAgICogIHBhcnNlT3RoZXIgICAgICAgICAgICAgICBEZWNpbWFsXHJcbiAgICogIHNpbiAgICAgICAgICAgICAgICAgICAgICBQLnNpblxyXG4gICAqICB0YXlsb3JTZXJpZXMgICAgICAgICAgICAgUC5jb3NoLCBQLnNpbmgsIGNvcywgc2luXHJcbiAgICogIHRvTGVzc1RoYW5IYWxmUGkgICAgICAgICBQLmNvcywgUC5zaW5cclxuICAgKiAgdG9TdHJpbmdCaW5hcnkgICAgICAgICAgIFAudG9CaW5hcnksIFAudG9IZXhhZGVjaW1hbCwgUC50b09jdGFsXHJcbiAgICogIHRydW5jYXRlICAgICAgICAgICAgICAgICBpbnRQb3dcclxuICAgKlxyXG4gICAqICBUaHJvd3M6ICAgICAgICAgICAgICAgICAgUC5sb2dhcml0aG0sIFAucHJlY2lzaW9uLCBQLnRvRnJhY3Rpb24sIGNoZWNrSW50MzIsIGdldExuMTAsIGdldFBpLFxyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0dXJhbExvZ2FyaXRobSwgY29uZmlnLCBwYXJzZU90aGVyLCByYW5kb20sIERlY2ltYWxcclxuICAgKi9cclxuXHJcblxyXG4gIGZ1bmN0aW9uIGRpZ2l0c1RvU3RyaW5nKGQpIHtcclxuICAgIHZhciBpLCBrLCB3cyxcclxuICAgICAgaW5kZXhPZkxhc3RXb3JkID0gZC5sZW5ndGggLSAxLFxyXG4gICAgICBzdHIgPSAnJyxcclxuICAgICAgdyA9IGRbMF07XHJcblxyXG4gICAgaWYgKGluZGV4T2ZMYXN0V29yZCA+IDApIHtcclxuICAgICAgc3RyICs9IHc7XHJcbiAgICAgIGZvciAoaSA9IDE7IGkgPCBpbmRleE9mTGFzdFdvcmQ7IGkrKykge1xyXG4gICAgICAgIHdzID0gZFtpXSArICcnO1xyXG4gICAgICAgIGsgPSBMT0dfQkFTRSAtIHdzLmxlbmd0aDtcclxuICAgICAgICBpZiAoaykgc3RyICs9IGdldFplcm9TdHJpbmcoayk7XHJcbiAgICAgICAgc3RyICs9IHdzO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB3ID0gZFtpXTtcclxuICAgICAgd3MgPSB3ICsgJyc7XHJcbiAgICAgIGsgPSBMT0dfQkFTRSAtIHdzLmxlbmd0aDtcclxuICAgICAgaWYgKGspIHN0ciArPSBnZXRaZXJvU3RyaW5nKGspO1xyXG4gICAgfSBlbHNlIGlmICh3ID09PSAwKSB7XHJcbiAgICAgIHJldHVybiAnMCc7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHplcm9zIG9mIGxhc3Qgdy5cclxuICAgIGZvciAoOyB3ICUgMTAgPT09IDA7KSB3IC89IDEwO1xyXG5cclxuICAgIHJldHVybiBzdHIgKyB3O1xyXG4gIH1cclxuXHJcblxyXG4gIGZ1bmN0aW9uIGNoZWNrSW50MzIoaSwgbWluLCBtYXgpIHtcclxuICAgIGlmIChpICE9PSB+fmkgfHwgaSA8IG1pbiB8fCBpID4gbWF4KSB7XHJcbiAgICAgIHRocm93IEVycm9yKGludmFsaWRBcmd1bWVudCArIGkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogQ2hlY2sgNSByb3VuZGluZyBkaWdpdHMgaWYgYHJlcGVhdGluZ2AgaXMgbnVsbCwgNCBvdGhlcndpc2UuXHJcbiAgICogYHJlcGVhdGluZyA9PSBudWxsYCBpZiBjYWxsZXIgaXMgYGxvZ2Agb3IgYHBvd2AsXHJcbiAgICogYHJlcGVhdGluZyAhPSBudWxsYCBpZiBjYWxsZXIgaXMgYG5hdHVyYWxMb2dhcml0aG1gIG9yIGBuYXR1cmFsRXhwb25lbnRpYWxgLlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGNoZWNrUm91bmRpbmdEaWdpdHMoZCwgaSwgcm0sIHJlcGVhdGluZykge1xyXG4gICAgdmFyIGRpLCBrLCByLCByZDtcclxuXHJcbiAgICAvLyBHZXQgdGhlIGxlbmd0aCBvZiB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgYXJyYXkgZC5cclxuICAgIGZvciAoayA9IGRbMF07IGsgPj0gMTA7IGsgLz0gMTApIC0taTtcclxuXHJcbiAgICAvLyBJcyB0aGUgcm91bmRpbmcgZGlnaXQgaW4gdGhlIGZpcnN0IHdvcmQgb2YgZD9cclxuICAgIGlmICgtLWkgPCAwKSB7XHJcbiAgICAgIGkgKz0gTE9HX0JBU0U7XHJcbiAgICAgIGRpID0gMDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRpID0gTWF0aC5jZWlsKChpICsgMSkgLyBMT0dfQkFTRSk7XHJcbiAgICAgIGkgJT0gTE9HX0JBU0U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaSBpcyB0aGUgaW5kZXggKDAgLSA2KSBvZiB0aGUgcm91bmRpbmcgZGlnaXQuXHJcbiAgICAvLyBFLmcuIGlmIHdpdGhpbiB0aGUgd29yZCAzNDg3NTYzIHRoZSBmaXJzdCByb3VuZGluZyBkaWdpdCBpcyA1LFxyXG4gICAgLy8gdGhlbiBpID0gNCwgayA9IDEwMDAsIHJkID0gMzQ4NzU2MyAlIDEwMDAgPSA1NjNcclxuICAgIGsgPSBtYXRocG93KDEwLCBMT0dfQkFTRSAtIGkpO1xyXG4gICAgcmQgPSBkW2RpXSAlIGsgfCAwO1xyXG5cclxuICAgIGlmIChyZXBlYXRpbmcgPT0gbnVsbCkge1xyXG4gICAgICBpZiAoaSA8IDMpIHtcclxuICAgICAgICBpZiAoaSA9PSAwKSByZCA9IHJkIC8gMTAwIHwgMDtcclxuICAgICAgICBlbHNlIGlmIChpID09IDEpIHJkID0gcmQgLyAxMCB8IDA7XHJcbiAgICAgICAgciA9IHJtIDwgNCAmJiByZCA9PSA5OTk5OSB8fCBybSA+IDMgJiYgcmQgPT0gNDk5OTkgfHwgcmQgPT0gNTAwMDAgfHwgcmQgPT0gMDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByID0gKHJtIDwgNCAmJiByZCArIDEgPT0gayB8fCBybSA+IDMgJiYgcmQgKyAxID09IGsgLyAyKSAmJlxyXG4gICAgICAgICAgKGRbZGkgKyAxXSAvIGsgLyAxMDAgfCAwKSA9PSBtYXRocG93KDEwLCBpIC0gMikgLSAxIHx8XHJcbiAgICAgICAgICAgIChyZCA9PSBrIC8gMiB8fCByZCA9PSAwKSAmJiAoZFtkaSArIDFdIC8gayAvIDEwMCB8IDApID09IDA7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChpIDwgNCkge1xyXG4gICAgICAgIGlmIChpID09IDApIHJkID0gcmQgLyAxMDAwIHwgMDtcclxuICAgICAgICBlbHNlIGlmIChpID09IDEpIHJkID0gcmQgLyAxMDAgfCAwO1xyXG4gICAgICAgIGVsc2UgaWYgKGkgPT0gMikgcmQgPSByZCAvIDEwIHwgMDtcclxuICAgICAgICByID0gKHJlcGVhdGluZyB8fCBybSA8IDQpICYmIHJkID09IDk5OTkgfHwgIXJlcGVhdGluZyAmJiBybSA+IDMgJiYgcmQgPT0gNDk5OTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByID0gKChyZXBlYXRpbmcgfHwgcm0gPCA0KSAmJiByZCArIDEgPT0gayB8fFxyXG4gICAgICAgICghcmVwZWF0aW5nICYmIHJtID4gMykgJiYgcmQgKyAxID09IGsgLyAyKSAmJlxyXG4gICAgICAgICAgKGRbZGkgKyAxXSAvIGsgLyAxMDAwIHwgMCkgPT0gbWF0aHBvdygxMCwgaSAtIDMpIC0gMTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIENvbnZlcnQgc3RyaW5nIG9mIGBiYXNlSW5gIHRvIGFuIGFycmF5IG9mIG51bWJlcnMgb2YgYGJhc2VPdXRgLlxyXG4gIC8vIEVnLiBjb252ZXJ0QmFzZSgnMjU1JywgMTAsIDE2KSByZXR1cm5zIFsxNSwgMTVdLlxyXG4gIC8vIEVnLiBjb252ZXJ0QmFzZSgnZmYnLCAxNiwgMTApIHJldHVybnMgWzIsIDUsIDVdLlxyXG4gIGZ1bmN0aW9uIGNvbnZlcnRCYXNlKHN0ciwgYmFzZUluLCBiYXNlT3V0KSB7XHJcbiAgICB2YXIgaixcclxuICAgICAgYXJyID0gWzBdLFxyXG4gICAgICBhcnJMLFxyXG4gICAgICBpID0gMCxcclxuICAgICAgc3RyTCA9IHN0ci5sZW5ndGg7XHJcblxyXG4gICAgZm9yICg7IGkgPCBzdHJMOykge1xyXG4gICAgICBmb3IgKGFyckwgPSBhcnIubGVuZ3RoOyBhcnJMLS07KSBhcnJbYXJyTF0gKj0gYmFzZUluO1xyXG4gICAgICBhcnJbMF0gKz0gTlVNRVJBTFMuaW5kZXhPZihzdHIuY2hhckF0KGkrKykpO1xyXG4gICAgICBmb3IgKGogPSAwOyBqIDwgYXJyLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgaWYgKGFycltqXSA+IGJhc2VPdXQgLSAxKSB7XHJcbiAgICAgICAgICBpZiAoYXJyW2ogKyAxXSA9PT0gdm9pZCAwKSBhcnJbaiArIDFdID0gMDtcclxuICAgICAgICAgIGFycltqICsgMV0gKz0gYXJyW2pdIC8gYmFzZU91dCB8IDA7XHJcbiAgICAgICAgICBhcnJbal0gJT0gYmFzZU91dDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYXJyLnJldmVyc2UoKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIGNvcyh4KSA9IDEgLSB4XjIvMiEgKyB4XjQvNCEgLSAuLi5cclxuICAgKiB8eHwgPCBwaS8yXHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBjb3NpbmUoQ3RvciwgeCkge1xyXG4gICAgdmFyIGssIHksXHJcbiAgICAgIGxlbiA9IHguZC5sZW5ndGg7XHJcblxyXG4gICAgLy8gQXJndW1lbnQgcmVkdWN0aW9uOiBjb3MoNHgpID0gOCooY29zXjQoeCkgLSBjb3NeMih4KSkgKyAxXHJcbiAgICAvLyBpLmUuIGNvcyh4KSA9IDgqKGNvc140KHgvNCkgLSBjb3NeMih4LzQpKSArIDFcclxuXHJcbiAgICAvLyBFc3RpbWF0ZSB0aGUgb3B0aW11bSBudW1iZXIgb2YgdGltZXMgdG8gdXNlIHRoZSBhcmd1bWVudCByZWR1Y3Rpb24uXHJcbiAgICBpZiAobGVuIDwgMzIpIHtcclxuICAgICAgayA9IE1hdGguY2VpbChsZW4gLyAzKTtcclxuICAgICAgeSA9ICgxIC8gdGlueVBvdyg0LCBrKSkudG9TdHJpbmcoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGsgPSAxNjtcclxuICAgICAgeSA9ICcyLjMyODMwNjQzNjUzODY5NjI4OTA2MjVlLTEwJztcclxuICAgIH1cclxuXHJcbiAgICBDdG9yLnByZWNpc2lvbiArPSBrO1xyXG5cclxuICAgIHggPSB0YXlsb3JTZXJpZXMoQ3RvciwgMSwgeC50aW1lcyh5KSwgbmV3IEN0b3IoMSkpO1xyXG5cclxuICAgIC8vIFJldmVyc2UgYXJndW1lbnQgcmVkdWN0aW9uXHJcbiAgICBmb3IgKHZhciBpID0gazsgaS0tOykge1xyXG4gICAgICB2YXIgY29zMnggPSB4LnRpbWVzKHgpO1xyXG4gICAgICB4ID0gY29zMngudGltZXMoY29zMngpLm1pbnVzKGNvczJ4KS50aW1lcyg4KS5wbHVzKDEpO1xyXG4gICAgfVxyXG5cclxuICAgIEN0b3IucHJlY2lzaW9uIC09IGs7XHJcblxyXG4gICAgcmV0dXJuIHg7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBQZXJmb3JtIGRpdmlzaW9uIGluIHRoZSBzcGVjaWZpZWQgYmFzZS5cclxuICAgKi9cclxuICB2YXIgZGl2aWRlID0gKGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAvLyBBc3N1bWVzIG5vbi16ZXJvIHggYW5kIGssIGFuZCBoZW5jZSBub24temVybyByZXN1bHQuXHJcbiAgICBmdW5jdGlvbiBtdWx0aXBseUludGVnZXIoeCwgaywgYmFzZSkge1xyXG4gICAgICB2YXIgdGVtcCxcclxuICAgICAgICBjYXJyeSA9IDAsXHJcbiAgICAgICAgaSA9IHgubGVuZ3RoO1xyXG5cclxuICAgICAgZm9yICh4ID0geC5zbGljZSgpOyBpLS07KSB7XHJcbiAgICAgICAgdGVtcCA9IHhbaV0gKiBrICsgY2Fycnk7XHJcbiAgICAgICAgeFtpXSA9IHRlbXAgJSBiYXNlIHwgMDtcclxuICAgICAgICBjYXJyeSA9IHRlbXAgLyBiYXNlIHwgMDtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNhcnJ5KSB4LnVuc2hpZnQoY2FycnkpO1xyXG5cclxuICAgICAgcmV0dXJuIHg7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gY29tcGFyZShhLCBiLCBhTCwgYkwpIHtcclxuICAgICAgdmFyIGksIHI7XHJcblxyXG4gICAgICBpZiAoYUwgIT0gYkwpIHtcclxuICAgICAgICByID0gYUwgPiBiTCA/IDEgOiAtMTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBmb3IgKGkgPSByID0gMDsgaSA8IGFMOyBpKyspIHtcclxuICAgICAgICAgIGlmIChhW2ldICE9IGJbaV0pIHtcclxuICAgICAgICAgICAgciA9IGFbaV0gPiBiW2ldID8gMSA6IC0xO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiByO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHN1YnRyYWN0KGEsIGIsIGFMLCBiYXNlKSB7XHJcbiAgICAgIHZhciBpID0gMDtcclxuXHJcbiAgICAgIC8vIFN1YnRyYWN0IGIgZnJvbSBhLlxyXG4gICAgICBmb3IgKDsgYUwtLTspIHtcclxuICAgICAgICBhW2FMXSAtPSBpO1xyXG4gICAgICAgIGkgPSBhW2FMXSA8IGJbYUxdID8gMSA6IDA7XHJcbiAgICAgICAgYVthTF0gPSBpICogYmFzZSArIGFbYUxdIC0gYlthTF07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFJlbW92ZSBsZWFkaW5nIHplcm9zLlxyXG4gICAgICBmb3IgKDsgIWFbMF0gJiYgYS5sZW5ndGggPiAxOykgYS5zaGlmdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmdW5jdGlvbiAoeCwgeSwgcHIsIHJtLCBkcCwgYmFzZSkge1xyXG4gICAgICB2YXIgY21wLCBlLCBpLCBrLCBsb2dCYXNlLCBtb3JlLCBwcm9kLCBwcm9kTCwgcSwgcWQsIHJlbSwgcmVtTCwgcmVtMCwgc2QsIHQsIHhpLCB4TCwgeWQwLFxyXG4gICAgICAgIHlMLCB5eixcclxuICAgICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcixcclxuICAgICAgICBzaWduID0geC5zID09IHkucyA/IDEgOiAtMSxcclxuICAgICAgICB4ZCA9IHguZCxcclxuICAgICAgICB5ZCA9IHkuZDtcclxuXHJcbiAgICAgIC8vIEVpdGhlciBOYU4sIEluZmluaXR5IG9yIDA/XHJcbiAgICAgIGlmICgheGQgfHwgIXhkWzBdIHx8ICF5ZCB8fCAheWRbMF0pIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIG5ldyBDdG9yKC8vIFJldHVybiBOYU4gaWYgZWl0aGVyIE5hTiwgb3IgYm90aCBJbmZpbml0eSBvciAwLlxyXG4gICAgICAgICAgIXgucyB8fCAheS5zIHx8ICh4ZCA/IHlkICYmIHhkWzBdID09IHlkWzBdIDogIXlkKSA/IE5hTiA6XHJcblxyXG4gICAgICAgICAgLy8gUmV0dXJuIMKxMCBpZiB4IGlzIDAgb3IgeSBpcyDCsUluZmluaXR5LCBvciByZXR1cm4gwrFJbmZpbml0eSBhcyB5IGlzIDAuXHJcbiAgICAgICAgICB4ZCAmJiB4ZFswXSA9PSAwIHx8ICF5ZCA/IHNpZ24gKiAwIDogc2lnbiAvIDApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoYmFzZSkge1xyXG4gICAgICAgIGxvZ0Jhc2UgPSAxO1xyXG4gICAgICAgIGUgPSB4LmUgLSB5LmU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYmFzZSA9IEJBU0U7XHJcbiAgICAgICAgbG9nQmFzZSA9IExPR19CQVNFO1xyXG4gICAgICAgIGUgPSBtYXRoZmxvb3IoeC5lIC8gbG9nQmFzZSkgLSBtYXRoZmxvb3IoeS5lIC8gbG9nQmFzZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHlMID0geWQubGVuZ3RoO1xyXG4gICAgICB4TCA9IHhkLmxlbmd0aDtcclxuICAgICAgcSA9IG5ldyBDdG9yKHNpZ24pO1xyXG4gICAgICBxZCA9IHEuZCA9IFtdO1xyXG5cclxuICAgICAgLy8gUmVzdWx0IGV4cG9uZW50IG1heSBiZSBvbmUgbGVzcyB0aGFuIGUuXHJcbiAgICAgIC8vIFRoZSBkaWdpdCBhcnJheSBvZiBhIERlY2ltYWwgZnJvbSB0b1N0cmluZ0JpbmFyeSBtYXkgaGF2ZSB0cmFpbGluZyB6ZXJvcy5cclxuICAgICAgZm9yIChpID0gMDsgeWRbaV0gPT0gKHhkW2ldIHx8IDApOyBpKyspO1xyXG5cclxuICAgICAgaWYgKHlkW2ldID4gKHhkW2ldIHx8IDApKSBlLS07XHJcblxyXG4gICAgICBpZiAocHIgPT0gbnVsbCkge1xyXG4gICAgICAgIHNkID0gcHIgPSBDdG9yLnByZWNpc2lvbjtcclxuICAgICAgICBybSA9IEN0b3Iucm91bmRpbmc7XHJcbiAgICAgIH0gZWxzZSBpZiAoZHApIHtcclxuICAgICAgICBzZCA9IHByICsgKHguZSAtIHkuZSkgKyAxO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHNkID0gcHI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChzZCA8IDApIHtcclxuICAgICAgICBxZC5wdXNoKDEpO1xyXG4gICAgICAgIG1vcmUgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAvLyBDb252ZXJ0IHByZWNpc2lvbiBpbiBudW1iZXIgb2YgYmFzZSAxMCBkaWdpdHMgdG8gYmFzZSAxZTcgZGlnaXRzLlxyXG4gICAgICAgIHNkID0gc2QgLyBsb2dCYXNlICsgMiB8IDA7XHJcbiAgICAgICAgaSA9IDA7XHJcblxyXG4gICAgICAgIC8vIGRpdmlzb3IgPCAxZTdcclxuICAgICAgICBpZiAoeUwgPT0gMSkge1xyXG4gICAgICAgICAgayA9IDA7XHJcbiAgICAgICAgICB5ZCA9IHlkWzBdO1xyXG4gICAgICAgICAgc2QrKztcclxuXHJcbiAgICAgICAgICAvLyBrIGlzIHRoZSBjYXJyeS5cclxuICAgICAgICAgIGZvciAoOyAoaSA8IHhMIHx8IGspICYmIHNkLS07IGkrKykge1xyXG4gICAgICAgICAgICB0ID0gayAqIGJhc2UgKyAoeGRbaV0gfHwgMCk7XHJcbiAgICAgICAgICAgIHFkW2ldID0gdCAvIHlkIHwgMDtcclxuICAgICAgICAgICAgayA9IHQgJSB5ZCB8IDA7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgbW9yZSA9IGsgfHwgaSA8IHhMO1xyXG5cclxuICAgICAgICAvLyBkaXZpc29yID49IDFlN1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgLy8gTm9ybWFsaXNlIHhkIGFuZCB5ZCBzbyBoaWdoZXN0IG9yZGVyIGRpZ2l0IG9mIHlkIGlzID49IGJhc2UvMlxyXG4gICAgICAgICAgayA9IGJhc2UgLyAoeWRbMF0gKyAxKSB8IDA7XHJcblxyXG4gICAgICAgICAgaWYgKGsgPiAxKSB7XHJcbiAgICAgICAgICAgIHlkID0gbXVsdGlwbHlJbnRlZ2VyKHlkLCBrLCBiYXNlKTtcclxuICAgICAgICAgICAgeGQgPSBtdWx0aXBseUludGVnZXIoeGQsIGssIGJhc2UpO1xyXG4gICAgICAgICAgICB5TCA9IHlkLmxlbmd0aDtcclxuICAgICAgICAgICAgeEwgPSB4ZC5sZW5ndGg7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgeGkgPSB5TDtcclxuICAgICAgICAgIHJlbSA9IHhkLnNsaWNlKDAsIHlMKTtcclxuICAgICAgICAgIHJlbUwgPSByZW0ubGVuZ3RoO1xyXG5cclxuICAgICAgICAgIC8vIEFkZCB6ZXJvcyB0byBtYWtlIHJlbWFpbmRlciBhcyBsb25nIGFzIGRpdmlzb3IuXHJcbiAgICAgICAgICBmb3IgKDsgcmVtTCA8IHlMOykgcmVtW3JlbUwrK10gPSAwO1xyXG5cclxuICAgICAgICAgIHl6ID0geWQuc2xpY2UoKTtcclxuICAgICAgICAgIHl6LnVuc2hpZnQoMCk7XHJcbiAgICAgICAgICB5ZDAgPSB5ZFswXTtcclxuXHJcbiAgICAgICAgICBpZiAoeWRbMV0gPj0gYmFzZSAvIDIpICsreWQwO1xyXG5cclxuICAgICAgICAgIGRvIHtcclxuICAgICAgICAgICAgayA9IDA7XHJcblxyXG4gICAgICAgICAgICAvLyBDb21wYXJlIGRpdmlzb3IgYW5kIHJlbWFpbmRlci5cclxuICAgICAgICAgICAgY21wID0gY29tcGFyZSh5ZCwgcmVtLCB5TCwgcmVtTCk7XHJcblxyXG4gICAgICAgICAgICAvLyBJZiBkaXZpc29yIDwgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICBpZiAoY21wIDwgMCkge1xyXG5cclxuICAgICAgICAgICAgICAvLyBDYWxjdWxhdGUgdHJpYWwgZGlnaXQsIGsuXHJcbiAgICAgICAgICAgICAgcmVtMCA9IHJlbVswXTtcclxuICAgICAgICAgICAgICBpZiAoeUwgIT0gcmVtTCkgcmVtMCA9IHJlbTAgKiBiYXNlICsgKHJlbVsxXSB8fCAwKTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gayB3aWxsIGJlIGhvdyBtYW55IHRpbWVzIHRoZSBkaXZpc29yIGdvZXMgaW50byB0aGUgY3VycmVudCByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgayA9IHJlbTAgLyB5ZDAgfCAwO1xyXG5cclxuICAgICAgICAgICAgICAvLyAgQWxnb3JpdGhtOlxyXG4gICAgICAgICAgICAgIC8vICAxLiBwcm9kdWN0ID0gZGl2aXNvciAqIHRyaWFsIGRpZ2l0IChrKVxyXG4gICAgICAgICAgICAgIC8vICAyLiBpZiBwcm9kdWN0ID4gcmVtYWluZGVyOiBwcm9kdWN0IC09IGRpdmlzb3IsIGstLVxyXG4gICAgICAgICAgICAgIC8vICAzLiByZW1haW5kZXIgLT0gcHJvZHVjdFxyXG4gICAgICAgICAgICAgIC8vICA0LiBpZiBwcm9kdWN0IHdhcyA8IHJlbWFpbmRlciBhdCAyOlxyXG4gICAgICAgICAgICAgIC8vICAgIDUuIGNvbXBhcmUgbmV3IHJlbWFpbmRlciBhbmQgZGl2aXNvclxyXG4gICAgICAgICAgICAgIC8vICAgIDYuIElmIHJlbWFpbmRlciA+IGRpdmlzb3I6IHJlbWFpbmRlciAtPSBkaXZpc29yLCBrKytcclxuXHJcbiAgICAgICAgICAgICAgaWYgKGsgPiAxKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoayA+PSBiYXNlKSBrID0gYmFzZSAtIDE7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gcHJvZHVjdCA9IGRpdmlzb3IgKiB0cmlhbCBkaWdpdC5cclxuICAgICAgICAgICAgICAgIHByb2QgPSBtdWx0aXBseUludGVnZXIoeWQsIGssIGJhc2UpO1xyXG4gICAgICAgICAgICAgICAgcHJvZEwgPSBwcm9kLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIHJlbUwgPSByZW0ubGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIENvbXBhcmUgcHJvZHVjdCBhbmQgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgICAgY21wID0gY29tcGFyZShwcm9kLCByZW0sIHByb2RMLCByZW1MKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBwcm9kdWN0ID4gcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgICAgaWYgKGNtcCA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgIGstLTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIC8vIFN1YnRyYWN0IGRpdmlzb3IgZnJvbSBwcm9kdWN0LlxyXG4gICAgICAgICAgICAgICAgICBzdWJ0cmFjdChwcm9kLCB5TCA8IHByb2RMID8geXogOiB5ZCwgcHJvZEwsIGJhc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gY21wIGlzIC0xLlxyXG4gICAgICAgICAgICAgICAgLy8gSWYgayBpcyAwLCB0aGVyZSBpcyBubyBuZWVkIHRvIGNvbXBhcmUgeWQgYW5kIHJlbSBhZ2FpbiBiZWxvdywgc28gY2hhbmdlIGNtcCB0byAxXHJcbiAgICAgICAgICAgICAgICAvLyB0byBhdm9pZCBpdC4gSWYgayBpcyAxIHRoZXJlIGlzIGEgbmVlZCB0byBjb21wYXJlIHlkIGFuZCByZW0gYWdhaW4gYmVsb3cuXHJcbiAgICAgICAgICAgICAgICBpZiAoayA9PSAwKSBjbXAgPSBrID0gMTtcclxuICAgICAgICAgICAgICAgIHByb2QgPSB5ZC5zbGljZSgpO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgcHJvZEwgPSBwcm9kLmxlbmd0aDtcclxuICAgICAgICAgICAgICBpZiAocHJvZEwgPCByZW1MKSBwcm9kLnVuc2hpZnQoMCk7XHJcblxyXG4gICAgICAgICAgICAgIC8vIFN1YnRyYWN0IHByb2R1Y3QgZnJvbSByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgc3VidHJhY3QocmVtLCBwcm9kLCByZW1MLCBiYXNlKTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gSWYgcHJvZHVjdCB3YXMgPCBwcmV2aW91cyByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgaWYgKGNtcCA9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgcmVtTCA9IHJlbS5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gQ29tcGFyZSBkaXZpc29yIGFuZCBuZXcgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgICAgY21wID0gY29tcGFyZSh5ZCwgcmVtLCB5TCwgcmVtTCk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gSWYgZGl2aXNvciA8IG5ldyByZW1haW5kZXIsIHN1YnRyYWN0IGRpdmlzb3IgZnJvbSByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgICBpZiAoY21wIDwgMSkge1xyXG4gICAgICAgICAgICAgICAgICBrKys7XHJcblxyXG4gICAgICAgICAgICAgICAgICAvLyBTdWJ0cmFjdCBkaXZpc29yIGZyb20gcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgICAgICBzdWJ0cmFjdChyZW0sIHlMIDwgcmVtTCA/IHl6IDogeWQsIHJlbUwsIGJhc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgcmVtTCA9IHJlbS5sZW5ndGg7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY21wID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgaysrO1xyXG4gICAgICAgICAgICAgIHJlbSA9IFswXTtcclxuICAgICAgICAgICAgfSAgICAvLyBpZiBjbXAgPT09IDEsIGsgd2lsbCBiZSAwXHJcblxyXG4gICAgICAgICAgICAvLyBBZGQgdGhlIG5leHQgZGlnaXQsIGssIHRvIHRoZSByZXN1bHQgYXJyYXkuXHJcbiAgICAgICAgICAgIHFkW2krK10gPSBrO1xyXG5cclxuICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSByZW1haW5kZXIuXHJcbiAgICAgICAgICAgIGlmIChjbXAgJiYgcmVtWzBdKSB7XHJcbiAgICAgICAgICAgICAgcmVtW3JlbUwrK10gPSB4ZFt4aV0gfHwgMDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByZW0gPSBbeGRbeGldXTtcclxuICAgICAgICAgICAgICByZW1MID0gMTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIH0gd2hpbGUgKCh4aSsrIDwgeEwgfHwgcmVtWzBdICE9PSB2b2lkIDApICYmIHNkLS0pO1xyXG5cclxuICAgICAgICAgIG1vcmUgPSByZW1bMF0gIT09IHZvaWQgMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIExlYWRpbmcgemVybz9cclxuICAgICAgICBpZiAoIXFkWzBdKSBxZC5zaGlmdCgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBsb2dCYXNlIGlzIDEgd2hlbiBkaXZpZGUgaXMgYmVpbmcgdXNlZCBmb3IgYmFzZSBjb252ZXJzaW9uLlxyXG4gICAgICBpZiAobG9nQmFzZSA9PSAxKSB7XHJcbiAgICAgICAgcS5lID0gZTtcclxuICAgICAgICBpbmV4YWN0ID0gbW9yZTtcclxuICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgLy8gVG8gY2FsY3VsYXRlIHEuZSwgZmlyc3QgZ2V0IHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIHFkWzBdLlxyXG4gICAgICAgIGZvciAoaSA9IDEsIGsgPSBxZFswXTsgayA+PSAxMDsgayAvPSAxMCkgaSsrO1xyXG4gICAgICAgIHEuZSA9IGkgKyBlICogbG9nQmFzZSAtIDE7XHJcblxyXG4gICAgICAgIGZpbmFsaXNlKHEsIGRwID8gcHIgKyBxLmUgKyAxIDogcHIsIHJtLCBtb3JlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHE7XHJcbiAgICB9O1xyXG4gIH0pKCk7XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJvdW5kIGB4YCB0byBgc2RgIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGBybWAuXHJcbiAgICogQ2hlY2sgZm9yIG92ZXIvdW5kZXItZmxvdy5cclxuICAgKi9cclxuICAgZnVuY3Rpb24gZmluYWxpc2UoeCwgc2QsIHJtLCBpc1RydW5jYXRlZCkge1xyXG4gICAgdmFyIGRpZ2l0cywgaSwgaiwgaywgcmQsIHJvdW5kVXAsIHcsIHhkLCB4ZGksXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIC8vIERvbid0IHJvdW5kIGlmIHNkIGlzIG51bGwgb3IgdW5kZWZpbmVkLlxyXG4gICAgb3V0OiBpZiAoc2QgIT0gbnVsbCkge1xyXG4gICAgICB4ZCA9IHguZDtcclxuXHJcbiAgICAgIC8vIEluZmluaXR5L05hTi5cclxuICAgICAgaWYgKCF4ZCkgcmV0dXJuIHg7XHJcblxyXG4gICAgICAvLyByZDogdGhlIHJvdW5kaW5nIGRpZ2l0LCBpLmUuIHRoZSBkaWdpdCBhZnRlciB0aGUgZGlnaXQgdGhhdCBtYXkgYmUgcm91bmRlZCB1cC5cclxuICAgICAgLy8gdzogdGhlIHdvcmQgb2YgeGQgY29udGFpbmluZyByZCwgYSBiYXNlIDFlNyBudW1iZXIuXHJcbiAgICAgIC8vIHhkaTogdGhlIGluZGV4IG9mIHcgd2l0aGluIHhkLlxyXG4gICAgICAvLyBkaWdpdHM6IHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIHcuXHJcbiAgICAgIC8vIGk6IHdoYXQgd291bGQgYmUgdGhlIGluZGV4IG9mIHJkIHdpdGhpbiB3IGlmIGFsbCB0aGUgbnVtYmVycyB3ZXJlIDcgZGlnaXRzIGxvbmcgKGkuZS4gaWZcclxuICAgICAgLy8gdGhleSBoYWQgbGVhZGluZyB6ZXJvcylcclxuICAgICAgLy8gajogaWYgPiAwLCB0aGUgYWN0dWFsIGluZGV4IG9mIHJkIHdpdGhpbiB3IChpZiA8IDAsIHJkIGlzIGEgbGVhZGluZyB6ZXJvKS5cclxuXHJcbiAgICAgIC8vIEdldCB0aGUgbGVuZ3RoIG9mIHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBkaWdpdHMgYXJyYXkgeGQuXHJcbiAgICAgIGZvciAoZGlnaXRzID0gMSwgayA9IHhkWzBdOyBrID49IDEwOyBrIC89IDEwKSBkaWdpdHMrKztcclxuICAgICAgaSA9IHNkIC0gZGlnaXRzO1xyXG5cclxuICAgICAgLy8gSXMgdGhlIHJvdW5kaW5nIGRpZ2l0IGluIHRoZSBmaXJzdCB3b3JkIG9mIHhkP1xyXG4gICAgICBpZiAoaSA8IDApIHtcclxuICAgICAgICBpICs9IExPR19CQVNFO1xyXG4gICAgICAgIGogPSBzZDtcclxuICAgICAgICB3ID0geGRbeGRpID0gMF07XHJcblxyXG4gICAgICAgIC8vIEdldCB0aGUgcm91bmRpbmcgZGlnaXQgYXQgaW5kZXggaiBvZiB3LlxyXG4gICAgICAgIHJkID0gdyAvIG1hdGhwb3coMTAsIGRpZ2l0cyAtIGogLSAxKSAlIDEwIHwgMDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB4ZGkgPSBNYXRoLmNlaWwoKGkgKyAxKSAvIExPR19CQVNFKTtcclxuICAgICAgICBrID0geGQubGVuZ3RoO1xyXG4gICAgICAgIGlmICh4ZGkgPj0gaykge1xyXG4gICAgICAgICAgaWYgKGlzVHJ1bmNhdGVkKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBOZWVkZWQgYnkgYG5hdHVyYWxFeHBvbmVudGlhbGAsIGBuYXR1cmFsTG9nYXJpdGhtYCBhbmQgYHNxdWFyZVJvb3RgLlxyXG4gICAgICAgICAgICBmb3IgKDsgaysrIDw9IHhkaTspIHhkLnB1c2goMCk7XHJcbiAgICAgICAgICAgIHcgPSByZCA9IDA7XHJcbiAgICAgICAgICAgIGRpZ2l0cyA9IDE7XHJcbiAgICAgICAgICAgIGkgJT0gTE9HX0JBU0U7XHJcbiAgICAgICAgICAgIGogPSBpIC0gTE9HX0JBU0UgKyAxO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYnJlYWsgb3V0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB3ID0gayA9IHhkW3hkaV07XHJcblxyXG4gICAgICAgICAgLy8gR2V0IHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIHcuXHJcbiAgICAgICAgICBmb3IgKGRpZ2l0cyA9IDE7IGsgPj0gMTA7IGsgLz0gMTApIGRpZ2l0cysrO1xyXG5cclxuICAgICAgICAgIC8vIEdldCB0aGUgaW5kZXggb2YgcmQgd2l0aGluIHcuXHJcbiAgICAgICAgICBpICU9IExPR19CQVNFO1xyXG5cclxuICAgICAgICAgIC8vIEdldCB0aGUgaW5kZXggb2YgcmQgd2l0aGluIHcsIGFkanVzdGVkIGZvciBsZWFkaW5nIHplcm9zLlxyXG4gICAgICAgICAgLy8gVGhlIG51bWJlciBvZiBsZWFkaW5nIHplcm9zIG9mIHcgaXMgZ2l2ZW4gYnkgTE9HX0JBU0UgLSBkaWdpdHMuXHJcbiAgICAgICAgICBqID0gaSAtIExPR19CQVNFICsgZGlnaXRzO1xyXG5cclxuICAgICAgICAgIC8vIEdldCB0aGUgcm91bmRpbmcgZGlnaXQgYXQgaW5kZXggaiBvZiB3LlxyXG4gICAgICAgICAgcmQgPSBqIDwgMCA/IDAgOiB3IC8gbWF0aHBvdygxMCwgZGlnaXRzIC0gaiAtIDEpICUgMTAgfCAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gQXJlIHRoZXJlIGFueSBub24temVybyBkaWdpdHMgYWZ0ZXIgdGhlIHJvdW5kaW5nIGRpZ2l0P1xyXG4gICAgICBpc1RydW5jYXRlZCA9IGlzVHJ1bmNhdGVkIHx8IHNkIDwgMCB8fFxyXG4gICAgICAgIHhkW3hkaSArIDFdICE9PSB2b2lkIDAgfHwgKGogPCAwID8gdyA6IHcgJSBtYXRocG93KDEwLCBkaWdpdHMgLSBqIC0gMSkpO1xyXG5cclxuICAgICAgLy8gVGhlIGV4cHJlc3Npb24gYHcgJSBtYXRocG93KDEwLCBkaWdpdHMgLSBqIC0gMSlgIHJldHVybnMgYWxsIHRoZSBkaWdpdHMgb2YgdyB0byB0aGUgcmlnaHRcclxuICAgICAgLy8gb2YgdGhlIGRpZ2l0IGF0IChsZWZ0LXRvLXJpZ2h0KSBpbmRleCBqLCBlLmcuIGlmIHcgaXMgOTA4NzE0IGFuZCBqIGlzIDIsIHRoZSBleHByZXNzaW9uXHJcbiAgICAgIC8vIHdpbGwgZ2l2ZSA3MTQuXHJcblxyXG4gICAgICByb3VuZFVwID0gcm0gPCA0XHJcbiAgICAgICAgPyAocmQgfHwgaXNUcnVuY2F0ZWQpICYmIChybSA9PSAwIHx8IHJtID09ICh4LnMgPCAwID8gMyA6IDIpKVxyXG4gICAgICAgIDogcmQgPiA1IHx8IHJkID09IDUgJiYgKHJtID09IDQgfHwgaXNUcnVuY2F0ZWQgfHwgcm0gPT0gNiAmJlxyXG5cclxuICAgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgdGhlIGRpZ2l0IHRvIHRoZSBsZWZ0IG9mIHRoZSByb3VuZGluZyBkaWdpdCBpcyBvZGQuXHJcbiAgICAgICAgICAoKGkgPiAwID8gaiA+IDAgPyB3IC8gbWF0aHBvdygxMCwgZGlnaXRzIC0gaikgOiAwIDogeGRbeGRpIC0gMV0pICUgMTApICYgMSB8fFxyXG4gICAgICAgICAgICBybSA9PSAoeC5zIDwgMCA/IDggOiA3KSk7XHJcblxyXG4gICAgICBpZiAoc2QgPCAxIHx8ICF4ZFswXSkge1xyXG4gICAgICAgIHhkLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgaWYgKHJvdW5kVXApIHtcclxuXHJcbiAgICAgICAgICAvLyBDb252ZXJ0IHNkIHRvIGRlY2ltYWwgcGxhY2VzLlxyXG4gICAgICAgICAgc2QgLT0geC5lICsgMTtcclxuXHJcbiAgICAgICAgICAvLyAxLCAwLjEsIDAuMDEsIDAuMDAxLCAwLjAwMDEgZXRjLlxyXG4gICAgICAgICAgeGRbMF0gPSBtYXRocG93KDEwLCAoTE9HX0JBU0UgLSBzZCAlIExPR19CQVNFKSAlIExPR19CQVNFKTtcclxuICAgICAgICAgIHguZSA9IC1zZCB8fCAwO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgLy8gWmVyby5cclxuICAgICAgICAgIHhkWzBdID0geC5lID0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB4O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBSZW1vdmUgZXhjZXNzIGRpZ2l0cy5cclxuICAgICAgaWYgKGkgPT0gMCkge1xyXG4gICAgICAgIHhkLmxlbmd0aCA9IHhkaTtcclxuICAgICAgICBrID0gMTtcclxuICAgICAgICB4ZGktLTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB4ZC5sZW5ndGggPSB4ZGkgKyAxO1xyXG4gICAgICAgIGsgPSBtYXRocG93KDEwLCBMT0dfQkFTRSAtIGkpO1xyXG5cclxuICAgICAgICAvLyBFLmcuIDU2NzAwIGJlY29tZXMgNTYwMDAgaWYgNyBpcyB0aGUgcm91bmRpbmcgZGlnaXQuXHJcbiAgICAgICAgLy8gaiA+IDAgbWVhbnMgaSA+IG51bWJlciBvZiBsZWFkaW5nIHplcm9zIG9mIHcuXHJcbiAgICAgICAgeGRbeGRpXSA9IGogPiAwID8gKHcgLyBtYXRocG93KDEwLCBkaWdpdHMgLSBqKSAlIG1hdGhwb3coMTAsIGopIHwgMCkgKiBrIDogMDtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHJvdW5kVXApIHtcclxuICAgICAgICBmb3IgKDs7KSB7XHJcblxyXG4gICAgICAgICAgLy8gSXMgdGhlIGRpZ2l0IHRvIGJlIHJvdW5kZWQgdXAgaW4gdGhlIGZpcnN0IHdvcmQgb2YgeGQ/XHJcbiAgICAgICAgICBpZiAoeGRpID09IDApIHtcclxuXHJcbiAgICAgICAgICAgIC8vIGkgd2lsbCBiZSB0aGUgbGVuZ3RoIG9mIHhkWzBdIGJlZm9yZSBrIGlzIGFkZGVkLlxyXG4gICAgICAgICAgICBmb3IgKGkgPSAxLCBqID0geGRbMF07IGogPj0gMTA7IGogLz0gMTApIGkrKztcclxuICAgICAgICAgICAgaiA9IHhkWzBdICs9IGs7XHJcbiAgICAgICAgICAgIGZvciAoayA9IDE7IGogPj0gMTA7IGogLz0gMTApIGsrKztcclxuXHJcbiAgICAgICAgICAgIC8vIGlmIGkgIT0gayB0aGUgbGVuZ3RoIGhhcyBpbmNyZWFzZWQuXHJcbiAgICAgICAgICAgIGlmIChpICE9IGspIHtcclxuICAgICAgICAgICAgICB4LmUrKztcclxuICAgICAgICAgICAgICBpZiAoeGRbMF0gPT0gQkFTRSkgeGRbMF0gPSAxO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHhkW3hkaV0gKz0gaztcclxuICAgICAgICAgICAgaWYgKHhkW3hkaV0gIT0gQkFTRSkgYnJlYWs7XHJcbiAgICAgICAgICAgIHhkW3hkaS0tXSA9IDA7XHJcbiAgICAgICAgICAgIGsgPSAxO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgICBmb3IgKGkgPSB4ZC5sZW5ndGg7IHhkWy0taV0gPT09IDA7KSB4ZC5wb3AoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZXh0ZXJuYWwpIHtcclxuXHJcbiAgICAgIC8vIE92ZXJmbG93P1xyXG4gICAgICBpZiAoeC5lID4gQ3Rvci5tYXhFKSB7XHJcblxyXG4gICAgICAgIC8vIEluZmluaXR5LlxyXG4gICAgICAgIHguZCA9IG51bGw7XHJcbiAgICAgICAgeC5lID0gTmFOO1xyXG5cclxuICAgICAgLy8gVW5kZXJmbG93P1xyXG4gICAgICB9IGVsc2UgaWYgKHguZSA8IEN0b3IubWluRSkge1xyXG5cclxuICAgICAgICAvLyBaZXJvLlxyXG4gICAgICAgIHguZSA9IDA7XHJcbiAgICAgICAgeC5kID0gWzBdO1xyXG4gICAgICAgIC8vIEN0b3IudW5kZXJmbG93ID0gdHJ1ZTtcclxuICAgICAgfSAvLyBlbHNlIEN0b3IudW5kZXJmbG93ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHg7XHJcbiAgfVxyXG5cclxuXHJcbiAgZnVuY3Rpb24gZmluaXRlVG9TdHJpbmcoeCwgaXNFeHAsIHNkKSB7XHJcbiAgICBpZiAoIXguaXNGaW5pdGUoKSkgcmV0dXJuIG5vbkZpbml0ZVRvU3RyaW5nKHgpO1xyXG4gICAgdmFyIGssXHJcbiAgICAgIGUgPSB4LmUsXHJcbiAgICAgIHN0ciA9IGRpZ2l0c1RvU3RyaW5nKHguZCksXHJcbiAgICAgIGxlbiA9IHN0ci5sZW5ndGg7XHJcblxyXG4gICAgaWYgKGlzRXhwKSB7XHJcbiAgICAgIGlmIChzZCAmJiAoayA9IHNkIC0gbGVuKSA+IDApIHtcclxuICAgICAgICBzdHIgPSBzdHIuY2hhckF0KDApICsgJy4nICsgc3RyLnNsaWNlKDEpICsgZ2V0WmVyb1N0cmluZyhrKTtcclxuICAgICAgfSBlbHNlIGlmIChsZW4gPiAxKSB7XHJcbiAgICAgICAgc3RyID0gc3RyLmNoYXJBdCgwKSArICcuJyArIHN0ci5zbGljZSgxKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgc3RyID0gc3RyICsgKHguZSA8IDAgPyAnZScgOiAnZSsnKSArIHguZTtcclxuICAgIH0gZWxzZSBpZiAoZSA8IDApIHtcclxuICAgICAgc3RyID0gJzAuJyArIGdldFplcm9TdHJpbmcoLWUgLSAxKSArIHN0cjtcclxuICAgICAgaWYgKHNkICYmIChrID0gc2QgLSBsZW4pID4gMCkgc3RyICs9IGdldFplcm9TdHJpbmcoayk7XHJcbiAgICB9IGVsc2UgaWYgKGUgPj0gbGVuKSB7XHJcbiAgICAgIHN0ciArPSBnZXRaZXJvU3RyaW5nKGUgKyAxIC0gbGVuKTtcclxuICAgICAgaWYgKHNkICYmIChrID0gc2QgLSBlIC0gMSkgPiAwKSBzdHIgPSBzdHIgKyAnLicgKyBnZXRaZXJvU3RyaW5nKGspO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKChrID0gZSArIDEpIDwgbGVuKSBzdHIgPSBzdHIuc2xpY2UoMCwgaykgKyAnLicgKyBzdHIuc2xpY2Uoayk7XHJcbiAgICAgIGlmIChzZCAmJiAoayA9IHNkIC0gbGVuKSA+IDApIHtcclxuICAgICAgICBpZiAoZSArIDEgPT09IGxlbikgc3RyICs9ICcuJztcclxuICAgICAgICBzdHIgKz0gZ2V0WmVyb1N0cmluZyhrKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzdHI7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gQ2FsY3VsYXRlIHRoZSBiYXNlIDEwIGV4cG9uZW50IGZyb20gdGhlIGJhc2UgMWU3IGV4cG9uZW50LlxyXG4gIGZ1bmN0aW9uIGdldEJhc2UxMEV4cG9uZW50KGRpZ2l0cywgZSkge1xyXG4gICAgdmFyIHcgPSBkaWdpdHNbMF07XHJcblxyXG4gICAgLy8gQWRkIHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBkaWdpdHMgYXJyYXkuXHJcbiAgICBmb3IgKCBlICo9IExPR19CQVNFOyB3ID49IDEwOyB3IC89IDEwKSBlKys7XHJcbiAgICByZXR1cm4gZTtcclxuICB9XHJcblxyXG5cclxuICBmdW5jdGlvbiBnZXRMbjEwKEN0b3IsIHNkLCBwcikge1xyXG4gICAgaWYgKHNkID4gTE4xMF9QUkVDSVNJT04pIHtcclxuXHJcbiAgICAgIC8vIFJlc2V0IGdsb2JhbCBzdGF0ZSBpbiBjYXNlIHRoZSBleGNlcHRpb24gaXMgY2F1Z2h0LlxyXG4gICAgICBleHRlcm5hbCA9IHRydWU7XHJcbiAgICAgIGlmIChwcikgQ3Rvci5wcmVjaXNpb24gPSBwcjtcclxuICAgICAgdGhyb3cgRXJyb3IocHJlY2lzaW9uTGltaXRFeGNlZWRlZCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmluYWxpc2UobmV3IEN0b3IoTE4xMCksIHNkLCAxLCB0cnVlKTtcclxuICB9XHJcblxyXG5cclxuICBmdW5jdGlvbiBnZXRQaShDdG9yLCBzZCwgcm0pIHtcclxuICAgIGlmIChzZCA+IFBJX1BSRUNJU0lPTikgdGhyb3cgRXJyb3IocHJlY2lzaW9uTGltaXRFeGNlZWRlZCk7XHJcbiAgICByZXR1cm4gZmluYWxpc2UobmV3IEN0b3IoUEkpLCBzZCwgcm0sIHRydWUpO1xyXG4gIH1cclxuXHJcblxyXG4gIGZ1bmN0aW9uIGdldFByZWNpc2lvbihkaWdpdHMpIHtcclxuICAgIHZhciB3ID0gZGlnaXRzLmxlbmd0aCAtIDEsXHJcbiAgICAgIGxlbiA9IHcgKiBMT0dfQkFTRSArIDE7XHJcblxyXG4gICAgdyA9IGRpZ2l0c1t3XTtcclxuXHJcbiAgICAvLyBJZiBub24temVyby4uLlxyXG4gICAgaWYgKHcpIHtcclxuXHJcbiAgICAgIC8vIFN1YnRyYWN0IHRoZSBudW1iZXIgb2YgdHJhaWxpbmcgemVyb3Mgb2YgdGhlIGxhc3Qgd29yZC5cclxuICAgICAgZm9yICg7IHcgJSAxMCA9PSAwOyB3IC89IDEwKSBsZW4tLTtcclxuXHJcbiAgICAgIC8vIEFkZCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBvZiB0aGUgZmlyc3Qgd29yZC5cclxuICAgICAgZm9yICh3ID0gZGlnaXRzWzBdOyB3ID49IDEwOyB3IC89IDEwKSBsZW4rKztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGVuO1xyXG4gIH1cclxuXHJcblxyXG4gIGZ1bmN0aW9uIGdldFplcm9TdHJpbmcoaykge1xyXG4gICAgdmFyIHpzID0gJyc7XHJcbiAgICBmb3IgKDsgay0tOykgenMgKz0gJzAnO1xyXG4gICAgcmV0dXJuIHpzO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIERlY2ltYWwgYHhgIHRvIHRoZSBwb3dlciBgbmAsIHdoZXJlIGBuYCBpcyBhblxyXG4gICAqIGludGVnZXIgb2YgdHlwZSBudW1iZXIuXHJcbiAgICpcclxuICAgKiBJbXBsZW1lbnRzICdleHBvbmVudGlhdGlvbiBieSBzcXVhcmluZycuIENhbGxlZCBieSBgcG93YCBhbmQgYHBhcnNlT3RoZXJgLlxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gaW50UG93KEN0b3IsIHgsIG4sIHByKSB7XHJcbiAgICB2YXIgaXNUcnVuY2F0ZWQsXHJcbiAgICAgIHIgPSBuZXcgQ3RvcigxKSxcclxuXHJcbiAgICAgIC8vIE1heCBuIG9mIDkwMDcxOTkyNTQ3NDA5OTEgdGFrZXMgNTMgbG9vcCBpdGVyYXRpb25zLlxyXG4gICAgICAvLyBNYXhpbXVtIGRpZ2l0cyBhcnJheSBsZW5ndGg7IGxlYXZlcyBbMjgsIDM0XSBndWFyZCBkaWdpdHMuXHJcbiAgICAgIGsgPSBNYXRoLmNlaWwocHIgLyBMT0dfQkFTRSArIDQpO1xyXG5cclxuICAgIGV4dGVybmFsID0gZmFsc2U7XHJcblxyXG4gICAgZm9yICg7Oykge1xyXG4gICAgICBpZiAobiAlIDIpIHtcclxuICAgICAgICByID0gci50aW1lcyh4KTtcclxuICAgICAgICBpZiAodHJ1bmNhdGUoci5kLCBrKSkgaXNUcnVuY2F0ZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBuID0gbWF0aGZsb29yKG4gLyAyKTtcclxuICAgICAgaWYgKG4gPT09IDApIHtcclxuXHJcbiAgICAgICAgLy8gVG8gZW5zdXJlIGNvcnJlY3Qgcm91bmRpbmcgd2hlbiByLmQgaXMgdHJ1bmNhdGVkLCBpbmNyZW1lbnQgdGhlIGxhc3Qgd29yZCBpZiBpdCBpcyB6ZXJvLlxyXG4gICAgICAgIG4gPSByLmQubGVuZ3RoIC0gMTtcclxuICAgICAgICBpZiAoaXNUcnVuY2F0ZWQgJiYgci5kW25dID09PSAwKSArK3IuZFtuXTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgeCA9IHgudGltZXMoeCk7XHJcbiAgICAgIHRydW5jYXRlKHguZCwgayk7XHJcbiAgICB9XHJcblxyXG4gICAgZXh0ZXJuYWwgPSB0cnVlO1xyXG5cclxuICAgIHJldHVybiByO1xyXG4gIH1cclxuXHJcblxyXG4gIGZ1bmN0aW9uIGlzT2RkKG4pIHtcclxuICAgIHJldHVybiBuLmRbbi5kLmxlbmd0aCAtIDFdICYgMTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIEhhbmRsZSBgbWF4YCBhbmQgYG1pbmAuIGBsdGd0YCBpcyAnbHQnIG9yICdndCcuXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gbWF4T3JNaW4oQ3RvciwgYXJncywgbHRndCkge1xyXG4gICAgdmFyIHksXHJcbiAgICAgIHggPSBuZXcgQ3RvcihhcmdzWzBdKSxcclxuICAgICAgaSA9IDA7XHJcblxyXG4gICAgZm9yICg7ICsraSA8IGFyZ3MubGVuZ3RoOykge1xyXG4gICAgICB5ID0gbmV3IEN0b3IoYXJnc1tpXSk7XHJcbiAgICAgIGlmICgheS5zKSB7XHJcbiAgICAgICAgeCA9IHk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH0gZWxzZSBpZiAoeFtsdGd0XSh5KSkge1xyXG4gICAgICAgIHggPSB5O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHg7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgbmF0dXJhbCBleHBvbmVudGlhbCBvZiBgeGAgcm91bmRlZCB0byBgc2RgIHNpZ25pZmljYW50XHJcbiAgICogZGlnaXRzLlxyXG4gICAqXHJcbiAgICogVGF5bG9yL01hY2xhdXJpbiBzZXJpZXMuXHJcbiAgICpcclxuICAgKiBleHAoeCkgPSB4XjAvMCEgKyB4XjEvMSEgKyB4XjIvMiEgKyB4XjMvMyEgKyAuLi5cclxuICAgKlxyXG4gICAqIEFyZ3VtZW50IHJlZHVjdGlvbjpcclxuICAgKiAgIFJlcGVhdCB4ID0geCAvIDMyLCBrICs9IDUsIHVudGlsIHx4fCA8IDAuMVxyXG4gICAqICAgZXhwKHgpID0gZXhwKHggLyAyXmspXigyXmspXHJcbiAgICpcclxuICAgKiBQcmV2aW91c2x5LCB0aGUgYXJndW1lbnQgd2FzIGluaXRpYWxseSByZWR1Y2VkIGJ5XHJcbiAgICogZXhwKHgpID0gZXhwKHIpICogMTBeayAgd2hlcmUgciA9IHggLSBrICogbG4xMCwgayA9IGZsb29yKHggLyBsbjEwKVxyXG4gICAqIHRvIGZpcnN0IHB1dCByIGluIHRoZSByYW5nZSBbMCwgbG4xMF0sIGJlZm9yZSBkaXZpZGluZyBieSAzMiB1bnRpbCB8eHwgPCAwLjEsIGJ1dCB0aGlzIHdhc1xyXG4gICAqIGZvdW5kIHRvIGJlIHNsb3dlciB0aGFuIGp1c3QgZGl2aWRpbmcgcmVwZWF0ZWRseSBieSAzMiBhcyBhYm92ZS5cclxuICAgKlxyXG4gICAqIE1heCBpbnRlZ2VyIGFyZ3VtZW50OiBleHAoJzIwNzIzMjY1ODM2OTQ2NDEzJykgPSA2LjNlKzkwMDAwMDAwMDAwMDAwMDBcclxuICAgKiBNaW4gaW50ZWdlciBhcmd1bWVudDogZXhwKCctMjA3MjMyNjU4MzY5NDY0MTEnKSA9IDEuMmUtOTAwMDAwMDAwMDAwMDAwMFxyXG4gICAqIChNYXRoIG9iamVjdCBpbnRlZ2VyIG1pbi9tYXg6IE1hdGguZXhwKDcwOSkgPSA4LjJlKzMwNywgTWF0aC5leHAoLTc0NSkgPSA1ZS0zMjQpXHJcbiAgICpcclxuICAgKiAgZXhwKEluZmluaXR5KSAgPSBJbmZpbml0eVxyXG4gICAqICBleHAoLUluZmluaXR5KSA9IDBcclxuICAgKiAgZXhwKE5hTikgICAgICAgPSBOYU5cclxuICAgKiAgZXhwKMKxMCkgICAgICAgID0gMVxyXG4gICAqXHJcbiAgICogIGV4cCh4KSBpcyBub24tdGVybWluYXRpbmcgZm9yIGFueSBmaW5pdGUsIG5vbi16ZXJvIHguXHJcbiAgICpcclxuICAgKiAgVGhlIHJlc3VsdCB3aWxsIGFsd2F5cyBiZSBjb3JyZWN0bHkgcm91bmRlZC5cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIG5hdHVyYWxFeHBvbmVudGlhbCh4LCBzZCkge1xyXG4gICAgdmFyIGRlbm9taW5hdG9yLCBndWFyZCwgaiwgcG93LCBzdW0sIHQsIHdwcixcclxuICAgICAgcmVwID0gMCxcclxuICAgICAgaSA9IDAsXHJcbiAgICAgIGsgPSAwLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcixcclxuICAgICAgcm0gPSBDdG9yLnJvdW5kaW5nLFxyXG4gICAgICBwciA9IEN0b3IucHJlY2lzaW9uO1xyXG5cclxuICAgIC8vIDAvTmFOL0luZmluaXR5P1xyXG4gICAgaWYgKCF4LmQgfHwgIXguZFswXSB8fCB4LmUgPiAxNykge1xyXG5cclxuICAgICAgcmV0dXJuIG5ldyBDdG9yKHguZFxyXG4gICAgICAgID8gIXguZFswXSA/IDEgOiB4LnMgPCAwID8gMCA6IDEgLyAwXHJcbiAgICAgICAgOiB4LnMgPyB4LnMgPCAwID8gMCA6IHggOiAwIC8gMCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHNkID09IG51bGwpIHtcclxuICAgICAgZXh0ZXJuYWwgPSBmYWxzZTtcclxuICAgICAgd3ByID0gcHI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB3cHIgPSBzZDtcclxuICAgIH1cclxuXHJcbiAgICB0ID0gbmV3IEN0b3IoMC4wMzEyNSk7XHJcblxyXG4gICAgLy8gd2hpbGUgYWJzKHgpID49IDAuMVxyXG4gICAgd2hpbGUgKHguZSA+IC0yKSB7XHJcblxyXG4gICAgICAvLyB4ID0geCAvIDJeNVxyXG4gICAgICB4ID0geC50aW1lcyh0KTtcclxuICAgICAgayArPSA1O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFVzZSAyICogbG9nMTAoMl5rKSArIDUgKGVtcGlyaWNhbGx5IGRlcml2ZWQpIHRvIGVzdGltYXRlIHRoZSBpbmNyZWFzZSBpbiBwcmVjaXNpb25cclxuICAgIC8vIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIGZpcnN0IDQgcm91bmRpbmcgZGlnaXRzIGFyZSBjb3JyZWN0LlxyXG4gICAgZ3VhcmQgPSBNYXRoLmxvZyhtYXRocG93KDIsIGspKSAvIE1hdGguTE4xMCAqIDIgKyA1IHwgMDtcclxuICAgIHdwciArPSBndWFyZDtcclxuICAgIGRlbm9taW5hdG9yID0gcG93ID0gc3VtID0gbmV3IEN0b3IoMSk7XHJcbiAgICBDdG9yLnByZWNpc2lvbiA9IHdwcjtcclxuXHJcbiAgICBmb3IgKDs7KSB7XHJcbiAgICAgIHBvdyA9IGZpbmFsaXNlKHBvdy50aW1lcyh4KSwgd3ByLCAxKTtcclxuICAgICAgZGVub21pbmF0b3IgPSBkZW5vbWluYXRvci50aW1lcygrK2kpO1xyXG4gICAgICB0ID0gc3VtLnBsdXMoZGl2aWRlKHBvdywgZGVub21pbmF0b3IsIHdwciwgMSkpO1xyXG5cclxuICAgICAgaWYgKGRpZ2l0c1RvU3RyaW5nKHQuZCkuc2xpY2UoMCwgd3ByKSA9PT0gZGlnaXRzVG9TdHJpbmcoc3VtLmQpLnNsaWNlKDAsIHdwcikpIHtcclxuICAgICAgICBqID0gaztcclxuICAgICAgICB3aGlsZSAoai0tKSBzdW0gPSBmaW5hbGlzZShzdW0udGltZXMoc3VtKSwgd3ByLCAxKTtcclxuXHJcbiAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBmaXJzdCA0IHJvdW5kaW5nIGRpZ2l0cyBhcmUgWzQ5XTk5OS5cclxuICAgICAgICAvLyBJZiBzbywgcmVwZWF0IHRoZSBzdW1tYXRpb24gd2l0aCBhIGhpZ2hlciBwcmVjaXNpb24sIG90aGVyd2lzZVxyXG4gICAgICAgIC8vIGUuZy4gd2l0aCBwcmVjaXNpb246IDE4LCByb3VuZGluZzogMVxyXG4gICAgICAgIC8vIGV4cCgxOC40MDQyNzI0NjI1OTUwMzQwODM1Njc3OTM5MTk4NDM3NjEpID0gOTgzNzI1NjAuMTIyOTk5OTk5OSAoc2hvdWxkIGJlIDk4MzcyNTYwLjEyMylcclxuICAgICAgICAvLyBgd3ByIC0gZ3VhcmRgIGlzIHRoZSBpbmRleCBvZiBmaXJzdCByb3VuZGluZyBkaWdpdC5cclxuICAgICAgICBpZiAoc2QgPT0gbnVsbCkge1xyXG5cclxuICAgICAgICAgIGlmIChyZXAgPCAzICYmIGNoZWNrUm91bmRpbmdEaWdpdHMoc3VtLmQsIHdwciAtIGd1YXJkLCBybSwgcmVwKSkge1xyXG4gICAgICAgICAgICBDdG9yLnByZWNpc2lvbiA9IHdwciArPSAxMDtcclxuICAgICAgICAgICAgZGVub21pbmF0b3IgPSBwb3cgPSB0ID0gbmV3IEN0b3IoMSk7XHJcbiAgICAgICAgICAgIGkgPSAwO1xyXG4gICAgICAgICAgICByZXArKztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmaW5hbGlzZShzdW0sIEN0b3IucHJlY2lzaW9uID0gcHIsIHJtLCBleHRlcm5hbCA9IHRydWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBDdG9yLnByZWNpc2lvbiA9IHByO1xyXG4gICAgICAgICAgcmV0dXJuIHN1bTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHN1bSA9IHQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgbmF0dXJhbCBsb2dhcml0aG0gb2YgYHhgIHJvdW5kZWQgdG8gYHNkYCBzaWduaWZpY2FudFxyXG4gICAqIGRpZ2l0cy5cclxuICAgKlxyXG4gICAqICBsbigtbikgICAgICAgID0gTmFOXHJcbiAgICogIGxuKDApICAgICAgICAgPSAtSW5maW5pdHlcclxuICAgKiAgbG4oLTApICAgICAgICA9IC1JbmZpbml0eVxyXG4gICAqICBsbigxKSAgICAgICAgID0gMFxyXG4gICAqICBsbihJbmZpbml0eSkgID0gSW5maW5pdHlcclxuICAgKiAgbG4oLUluZmluaXR5KSA9IE5hTlxyXG4gICAqICBsbihOYU4pICAgICAgID0gTmFOXHJcbiAgICpcclxuICAgKiAgbG4obikgKG4gIT0gMSkgaXMgbm9uLXRlcm1pbmF0aW5nLlxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gbmF0dXJhbExvZ2FyaXRobSh5LCBzZCkge1xyXG4gICAgdmFyIGMsIGMwLCBkZW5vbWluYXRvciwgZSwgbnVtZXJhdG9yLCByZXAsIHN1bSwgdCwgd3ByLCB4MSwgeDIsXHJcbiAgICAgIG4gPSAxLFxyXG4gICAgICBndWFyZCA9IDEwLFxyXG4gICAgICB4ID0geSxcclxuICAgICAgeGQgPSB4LmQsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yLFxyXG4gICAgICBybSA9IEN0b3Iucm91bmRpbmcsXHJcbiAgICAgIHByID0gQ3Rvci5wcmVjaXNpb247XHJcblxyXG4gICAgLy8gSXMgeCBuZWdhdGl2ZSBvciBJbmZpbml0eSwgTmFOLCAwIG9yIDE/XHJcbiAgICBpZiAoeC5zIDwgMCB8fCAheGQgfHwgIXhkWzBdIHx8ICF4LmUgJiYgeGRbMF0gPT0gMSAmJiB4ZC5sZW5ndGggPT0gMSkge1xyXG4gICAgICByZXR1cm4gbmV3IEN0b3IoeGQgJiYgIXhkWzBdID8gLTEgLyAwIDogeC5zICE9IDEgPyBOYU4gOiB4ZCA/IDAgOiB4KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2QgPT0gbnVsbCkge1xyXG4gICAgICBleHRlcm5hbCA9IGZhbHNlO1xyXG4gICAgICB3cHIgPSBwcjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHdwciA9IHNkO1xyXG4gICAgfVxyXG5cclxuICAgIEN0b3IucHJlY2lzaW9uID0gd3ByICs9IGd1YXJkO1xyXG4gICAgYyA9IGRpZ2l0c1RvU3RyaW5nKHhkKTtcclxuICAgIGMwID0gYy5jaGFyQXQoMCk7XHJcblxyXG4gICAgaWYgKE1hdGguYWJzKGUgPSB4LmUpIDwgMS41ZTE1KSB7XHJcblxyXG4gICAgICAvLyBBcmd1bWVudCByZWR1Y3Rpb24uXHJcbiAgICAgIC8vIFRoZSBzZXJpZXMgY29udmVyZ2VzIGZhc3RlciB0aGUgY2xvc2VyIHRoZSBhcmd1bWVudCBpcyB0byAxLCBzbyB1c2luZ1xyXG4gICAgICAvLyBsbihhXmIpID0gYiAqIGxuKGEpLCAgIGxuKGEpID0gbG4oYV5iKSAvIGJcclxuICAgICAgLy8gbXVsdGlwbHkgdGhlIGFyZ3VtZW50IGJ5IGl0c2VsZiB1bnRpbCB0aGUgbGVhZGluZyBkaWdpdHMgb2YgdGhlIHNpZ25pZmljYW5kIGFyZSA3LCA4LCA5LFxyXG4gICAgICAvLyAxMCwgMTEsIDEyIG9yIDEzLCByZWNvcmRpbmcgdGhlIG51bWJlciBvZiBtdWx0aXBsaWNhdGlvbnMgc28gdGhlIHN1bSBvZiB0aGUgc2VyaWVzIGNhblxyXG4gICAgICAvLyBsYXRlciBiZSBkaXZpZGVkIGJ5IHRoaXMgbnVtYmVyLCB0aGVuIHNlcGFyYXRlIG91dCB0aGUgcG93ZXIgb2YgMTAgdXNpbmdcclxuICAgICAgLy8gbG4oYSoxMF5iKSA9IGxuKGEpICsgYipsbigxMCkuXHJcblxyXG4gICAgICAvLyBtYXggbiBpcyAyMSAoZ2l2ZXMgMC45LCAxLjAgb3IgMS4xKSAoOWUxNSAvIDIxID0gNC4yZTE0KS5cclxuICAgICAgLy93aGlsZSAoYzAgPCA5ICYmIGMwICE9IDEgfHwgYzAgPT0gMSAmJiBjLmNoYXJBdCgxKSA+IDEpIHtcclxuICAgICAgLy8gbWF4IG4gaXMgNiAoZ2l2ZXMgMC43IC0gMS4zKVxyXG4gICAgICB3aGlsZSAoYzAgPCA3ICYmIGMwICE9IDEgfHwgYzAgPT0gMSAmJiBjLmNoYXJBdCgxKSA+IDMpIHtcclxuICAgICAgICB4ID0geC50aW1lcyh5KTtcclxuICAgICAgICBjID0gZGlnaXRzVG9TdHJpbmcoeC5kKTtcclxuICAgICAgICBjMCA9IGMuY2hhckF0KDApO1xyXG4gICAgICAgIG4rKztcclxuICAgICAgfVxyXG5cclxuICAgICAgZSA9IHguZTtcclxuXHJcbiAgICAgIGlmIChjMCA+IDEpIHtcclxuICAgICAgICB4ID0gbmV3IEN0b3IoJzAuJyArIGMpO1xyXG4gICAgICAgIGUrKztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB4ID0gbmV3IEN0b3IoYzAgKyAnLicgKyBjLnNsaWNlKDEpKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuXHJcbiAgICAgIC8vIFRoZSBhcmd1bWVudCByZWR1Y3Rpb24gbWV0aG9kIGFib3ZlIG1heSByZXN1bHQgaW4gb3ZlcmZsb3cgaWYgdGhlIGFyZ3VtZW50IHkgaXMgYSBtYXNzaXZlXHJcbiAgICAgIC8vIG51bWJlciB3aXRoIGV4cG9uZW50ID49IDE1MDAwMDAwMDAwMDAwMDAgKDllMTUgLyA2ID0gMS41ZTE1KSwgc28gaW5zdGVhZCByZWNhbGwgdGhpc1xyXG4gICAgICAvLyBmdW5jdGlvbiB1c2luZyBsbih4KjEwXmUpID0gbG4oeCkgKyBlKmxuKDEwKS5cclxuICAgICAgdCA9IGdldExuMTAoQ3Rvciwgd3ByICsgMiwgcHIpLnRpbWVzKGUgKyAnJyk7XHJcbiAgICAgIHggPSBuYXR1cmFsTG9nYXJpdGhtKG5ldyBDdG9yKGMwICsgJy4nICsgYy5zbGljZSgxKSksIHdwciAtIGd1YXJkKS5wbHVzKHQpO1xyXG4gICAgICBDdG9yLnByZWNpc2lvbiA9IHByO1xyXG5cclxuICAgICAgcmV0dXJuIHNkID09IG51bGwgPyBmaW5hbGlzZSh4LCBwciwgcm0sIGV4dGVybmFsID0gdHJ1ZSkgOiB4O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHgxIGlzIHggcmVkdWNlZCB0byBhIHZhbHVlIG5lYXIgMS5cclxuICAgIHgxID0geDtcclxuXHJcbiAgICAvLyBUYXlsb3Igc2VyaWVzLlxyXG4gICAgLy8gbG4oeSkgPSBsbigoMSArIHgpLygxIC0geCkpID0gMih4ICsgeF4zLzMgKyB4XjUvNSArIHheNy83ICsgLi4uKVxyXG4gICAgLy8gd2hlcmUgeCA9ICh5IC0gMSkvKHkgKyAxKSAgICAofHh8IDwgMSlcclxuICAgIHN1bSA9IG51bWVyYXRvciA9IHggPSBkaXZpZGUoeC5taW51cygxKSwgeC5wbHVzKDEpLCB3cHIsIDEpO1xyXG4gICAgeDIgPSBmaW5hbGlzZSh4LnRpbWVzKHgpLCB3cHIsIDEpO1xyXG4gICAgZGVub21pbmF0b3IgPSAzO1xyXG5cclxuICAgIGZvciAoOzspIHtcclxuICAgICAgbnVtZXJhdG9yID0gZmluYWxpc2UobnVtZXJhdG9yLnRpbWVzKHgyKSwgd3ByLCAxKTtcclxuICAgICAgdCA9IHN1bS5wbHVzKGRpdmlkZShudW1lcmF0b3IsIG5ldyBDdG9yKGRlbm9taW5hdG9yKSwgd3ByLCAxKSk7XHJcblxyXG4gICAgICBpZiAoZGlnaXRzVG9TdHJpbmcodC5kKS5zbGljZSgwLCB3cHIpID09PSBkaWdpdHNUb1N0cmluZyhzdW0uZCkuc2xpY2UoMCwgd3ByKSkge1xyXG4gICAgICAgIHN1bSA9IHN1bS50aW1lcygyKTtcclxuXHJcbiAgICAgICAgLy8gUmV2ZXJzZSB0aGUgYXJndW1lbnQgcmVkdWN0aW9uLiBDaGVjayB0aGF0IGUgaXMgbm90IDAgYmVjYXVzZSwgYmVzaWRlcyBwcmV2ZW50aW5nIGFuXHJcbiAgICAgICAgLy8gdW5uZWNlc3NhcnkgY2FsY3VsYXRpb24sIC0wICsgMCA9ICswIGFuZCB0byBlbnN1cmUgY29ycmVjdCByb3VuZGluZyAtMCBuZWVkcyB0byBzdGF5IC0wLlxyXG4gICAgICAgIGlmIChlICE9PSAwKSBzdW0gPSBzdW0ucGx1cyhnZXRMbjEwKEN0b3IsIHdwciArIDIsIHByKS50aW1lcyhlICsgJycpKTtcclxuICAgICAgICBzdW0gPSBkaXZpZGUoc3VtLCBuZXcgQ3RvcihuKSwgd3ByLCAxKTtcclxuXHJcbiAgICAgICAgLy8gSXMgcm0gPiAzIGFuZCB0aGUgZmlyc3QgNCByb3VuZGluZyBkaWdpdHMgNDk5OSwgb3Igcm0gPCA0IChvciB0aGUgc3VtbWF0aW9uIGhhc1xyXG4gICAgICAgIC8vIGJlZW4gcmVwZWF0ZWQgcHJldmlvdXNseSkgYW5kIHRoZSBmaXJzdCA0IHJvdW5kaW5nIGRpZ2l0cyA5OTk5P1xyXG4gICAgICAgIC8vIElmIHNvLCByZXN0YXJ0IHRoZSBzdW1tYXRpb24gd2l0aCBhIGhpZ2hlciBwcmVjaXNpb24sIG90aGVyd2lzZVxyXG4gICAgICAgIC8vIGUuZy4gd2l0aCBwcmVjaXNpb246IDEyLCByb3VuZGluZzogMVxyXG4gICAgICAgIC8vIGxuKDEzNTUyMDAyOC42MTI2MDkxNzE0MjY1MzgxNTMzKSA9IDE4LjcyNDYyOTk5OTkgd2hlbiBpdCBzaG91bGQgYmUgMTguNzI0NjMuXHJcbiAgICAgICAgLy8gYHdwciAtIGd1YXJkYCBpcyB0aGUgaW5kZXggb2YgZmlyc3Qgcm91bmRpbmcgZGlnaXQuXHJcbiAgICAgICAgaWYgKHNkID09IG51bGwpIHtcclxuICAgICAgICAgIGlmIChjaGVja1JvdW5kaW5nRGlnaXRzKHN1bS5kLCB3cHIgLSBndWFyZCwgcm0sIHJlcCkpIHtcclxuICAgICAgICAgICAgQ3Rvci5wcmVjaXNpb24gPSB3cHIgKz0gZ3VhcmQ7XHJcbiAgICAgICAgICAgIHQgPSBudW1lcmF0b3IgPSB4ID0gZGl2aWRlKHgxLm1pbnVzKDEpLCB4MS5wbHVzKDEpLCB3cHIsIDEpO1xyXG4gICAgICAgICAgICB4MiA9IGZpbmFsaXNlKHgudGltZXMoeCksIHdwciwgMSk7XHJcbiAgICAgICAgICAgIGRlbm9taW5hdG9yID0gcmVwID0gMTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmaW5hbGlzZShzdW0sIEN0b3IucHJlY2lzaW9uID0gcHIsIHJtLCBleHRlcm5hbCA9IHRydWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBDdG9yLnByZWNpc2lvbiA9IHByO1xyXG4gICAgICAgICAgcmV0dXJuIHN1bTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHN1bSA9IHQ7XHJcbiAgICAgIGRlbm9taW5hdG9yICs9IDI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gwrFJbmZpbml0eSwgTmFOLlxyXG4gIGZ1bmN0aW9uIG5vbkZpbml0ZVRvU3RyaW5nKHgpIHtcclxuICAgIC8vIFVuc2lnbmVkLlxyXG4gICAgcmV0dXJuIFN0cmluZyh4LnMgKiB4LnMgLyAwKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFBhcnNlIHRoZSB2YWx1ZSBvZiBhIG5ldyBEZWNpbWFsIGB4YCBmcm9tIHN0cmluZyBgc3RyYC5cclxuICAgKi9cclxuICBmdW5jdGlvbiBwYXJzZURlY2ltYWwoeCwgc3RyKSB7XHJcbiAgICB2YXIgZSwgaSwgbGVuO1xyXG5cclxuICAgIC8vIERlY2ltYWwgcG9pbnQ/XHJcbiAgICBpZiAoKGUgPSBzdHIuaW5kZXhPZignLicpKSA+IC0xKSBzdHIgPSBzdHIucmVwbGFjZSgnLicsICcnKTtcclxuXHJcbiAgICAvLyBFeHBvbmVudGlhbCBmb3JtP1xyXG4gICAgaWYgKChpID0gc3RyLnNlYXJjaCgvZS9pKSkgPiAwKSB7XHJcblxyXG4gICAgICAvLyBEZXRlcm1pbmUgZXhwb25lbnQuXHJcbiAgICAgIGlmIChlIDwgMCkgZSA9IGk7XHJcbiAgICAgIGUgKz0gK3N0ci5zbGljZShpICsgMSk7XHJcbiAgICAgIHN0ciA9IHN0ci5zdWJzdHJpbmcoMCwgaSk7XHJcbiAgICB9IGVsc2UgaWYgKGUgPCAwKSB7XHJcblxyXG4gICAgICAvLyBJbnRlZ2VyLlxyXG4gICAgICBlID0gc3RyLmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBEZXRlcm1pbmUgbGVhZGluZyB6ZXJvcy5cclxuICAgIGZvciAoaSA9IDA7IHN0ci5jaGFyQ29kZUF0KGkpID09PSA0ODsgaSsrKTtcclxuXHJcbiAgICAvLyBEZXRlcm1pbmUgdHJhaWxpbmcgemVyb3MuXHJcbiAgICBmb3IgKGxlbiA9IHN0ci5sZW5ndGg7IHN0ci5jaGFyQ29kZUF0KGxlbiAtIDEpID09PSA0ODsgLS1sZW4pO1xyXG4gICAgc3RyID0gc3RyLnNsaWNlKGksIGxlbik7XHJcblxyXG4gICAgaWYgKHN0cikge1xyXG4gICAgICBsZW4gLT0gaTtcclxuICAgICAgeC5lID0gZSA9IGUgLSBpIC0gMTtcclxuICAgICAgeC5kID0gW107XHJcblxyXG4gICAgICAvLyBUcmFuc2Zvcm0gYmFzZVxyXG5cclxuICAgICAgLy8gZSBpcyB0aGUgYmFzZSAxMCBleHBvbmVudC5cclxuICAgICAgLy8gaSBpcyB3aGVyZSB0byBzbGljZSBzdHIgdG8gZ2V0IHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBkaWdpdHMgYXJyYXkuXHJcbiAgICAgIGkgPSAoZSArIDEpICUgTE9HX0JBU0U7XHJcbiAgICAgIGlmIChlIDwgMCkgaSArPSBMT0dfQkFTRTtcclxuXHJcbiAgICAgIGlmIChpIDwgbGVuKSB7XHJcbiAgICAgICAgaWYgKGkpIHguZC5wdXNoKCtzdHIuc2xpY2UoMCwgaSkpO1xyXG4gICAgICAgIGZvciAobGVuIC09IExPR19CQVNFOyBpIDwgbGVuOykgeC5kLnB1c2goK3N0ci5zbGljZShpLCBpICs9IExPR19CQVNFKSk7XHJcbiAgICAgICAgc3RyID0gc3RyLnNsaWNlKGkpO1xyXG4gICAgICAgIGkgPSBMT0dfQkFTRSAtIHN0ci5sZW5ndGg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaSAtPSBsZW47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZvciAoOyBpLS07KSBzdHIgKz0gJzAnO1xyXG4gICAgICB4LmQucHVzaCgrc3RyKTtcclxuXHJcbiAgICAgIGlmIChleHRlcm5hbCkge1xyXG5cclxuICAgICAgICAvLyBPdmVyZmxvdz9cclxuICAgICAgICBpZiAoeC5lID4geC5jb25zdHJ1Y3Rvci5tYXhFKSB7XHJcblxyXG4gICAgICAgICAgLy8gSW5maW5pdHkuXHJcbiAgICAgICAgICB4LmQgPSBudWxsO1xyXG4gICAgICAgICAgeC5lID0gTmFOO1xyXG5cclxuICAgICAgICAvLyBVbmRlcmZsb3c/XHJcbiAgICAgICAgfSBlbHNlIGlmICh4LmUgPCB4LmNvbnN0cnVjdG9yLm1pbkUpIHtcclxuXHJcbiAgICAgICAgICAvLyBaZXJvLlxyXG4gICAgICAgICAgeC5lID0gMDtcclxuICAgICAgICAgIHguZCA9IFswXTtcclxuICAgICAgICAgIC8vIHguY29uc3RydWN0b3IudW5kZXJmbG93ID0gdHJ1ZTtcclxuICAgICAgICB9IC8vIGVsc2UgeC5jb25zdHJ1Y3Rvci51bmRlcmZsb3cgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuXHJcbiAgICAgIC8vIFplcm8uXHJcbiAgICAgIHguZSA9IDA7XHJcbiAgICAgIHguZCA9IFswXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4geDtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFBhcnNlIHRoZSB2YWx1ZSBvZiBhIG5ldyBEZWNpbWFsIGB4YCBmcm9tIGEgc3RyaW5nIGBzdHJgLCB3aGljaCBpcyBub3QgYSBkZWNpbWFsIHZhbHVlLlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIHBhcnNlT3RoZXIoeCwgc3RyKSB7XHJcbiAgICB2YXIgYmFzZSwgQ3RvciwgZGl2aXNvciwgaSwgaXNGbG9hdCwgbGVuLCBwLCB4ZCwgeGU7XHJcblxyXG4gICAgaWYgKHN0ciA9PT0gJ0luZmluaXR5JyB8fCBzdHIgPT09ICdOYU4nKSB7XHJcbiAgICAgIGlmICghK3N0cikgeC5zID0gTmFOO1xyXG4gICAgICB4LmUgPSBOYU47XHJcbiAgICAgIHguZCA9IG51bGw7XHJcbiAgICAgIHJldHVybiB4O1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpc0hleC50ZXN0KHN0cikpICB7XHJcbiAgICAgIGJhc2UgPSAxNjtcclxuICAgICAgc3RyID0gc3RyLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB9IGVsc2UgaWYgKGlzQmluYXJ5LnRlc3Qoc3RyKSkgIHtcclxuICAgICAgYmFzZSA9IDI7XHJcbiAgICB9IGVsc2UgaWYgKGlzT2N0YWwudGVzdChzdHIpKSAge1xyXG4gICAgICBiYXNlID0gODtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IEVycm9yKGludmFsaWRBcmd1bWVudCArIHN0cik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSXMgdGhlcmUgYSBiaW5hcnkgZXhwb25lbnQgcGFydD9cclxuICAgIGkgPSBzdHIuc2VhcmNoKC9wL2kpO1xyXG5cclxuICAgIGlmIChpID4gMCkge1xyXG4gICAgICBwID0gK3N0ci5zbGljZShpICsgMSk7XHJcbiAgICAgIHN0ciA9IHN0ci5zdWJzdHJpbmcoMiwgaSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzdHIgPSBzdHIuc2xpY2UoMik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ29udmVydCBgc3RyYCBhcyBhbiBpbnRlZ2VyIHRoZW4gZGl2aWRlIHRoZSByZXN1bHQgYnkgYGJhc2VgIHJhaXNlZCB0byBhIHBvd2VyIHN1Y2ggdGhhdCB0aGVcclxuICAgIC8vIGZyYWN0aW9uIHBhcnQgd2lsbCBiZSByZXN0b3JlZC5cclxuICAgIGkgPSBzdHIuaW5kZXhPZignLicpO1xyXG4gICAgaXNGbG9hdCA9IGkgPj0gMDtcclxuICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIGlmIChpc0Zsb2F0KSB7XHJcbiAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKCcuJywgJycpO1xyXG4gICAgICBsZW4gPSBzdHIubGVuZ3RoO1xyXG4gICAgICBpID0gbGVuIC0gaTtcclxuXHJcbiAgICAgIC8vIGxvZ1sxMF0oMTYpID0gMS4yMDQxLi4uICwgbG9nWzEwXSg4OCkgPSAxLjk0NDQuLi4uXHJcbiAgICAgIGRpdmlzb3IgPSBpbnRQb3coQ3RvciwgbmV3IEN0b3IoYmFzZSksIGksIGkgKiAyKTtcclxuICAgIH1cclxuXHJcbiAgICB4ZCA9IGNvbnZlcnRCYXNlKHN0ciwgYmFzZSwgQkFTRSk7XHJcbiAgICB4ZSA9IHhkLmxlbmd0aCAtIDE7XHJcblxyXG4gICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgZm9yIChpID0geGU7IHhkW2ldID09PSAwOyAtLWkpIHhkLnBvcCgpO1xyXG4gICAgaWYgKGkgPCAwKSByZXR1cm4gbmV3IEN0b3IoeC5zICogMCk7XHJcbiAgICB4LmUgPSBnZXRCYXNlMTBFeHBvbmVudCh4ZCwgeGUpO1xyXG4gICAgeC5kID0geGQ7XHJcbiAgICBleHRlcm5hbCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIEF0IHdoYXQgcHJlY2lzaW9uIHRvIHBlcmZvcm0gdGhlIGRpdmlzaW9uIHRvIGVuc3VyZSBleGFjdCBjb252ZXJzaW9uP1xyXG4gICAgLy8gbWF4RGVjaW1hbEludGVnZXJQYXJ0RGlnaXRDb3VudCA9IGNlaWwobG9nWzEwXShiKSAqIG90aGVyQmFzZUludGVnZXJQYXJ0RGlnaXRDb3VudClcclxuICAgIC8vIGxvZ1sxMF0oMikgPSAwLjMwMTAzLCBsb2dbMTBdKDgpID0gMC45MDMwOSwgbG9nWzEwXSgxNikgPSAxLjIwNDEyXHJcbiAgICAvLyBFLmcuIGNlaWwoMS4yICogMykgPSA0LCBzbyB1cCB0byA0IGRlY2ltYWwgZGlnaXRzIGFyZSBuZWVkZWQgdG8gcmVwcmVzZW50IDMgaGV4IGludCBkaWdpdHMuXHJcbiAgICAvLyBtYXhEZWNpbWFsRnJhY3Rpb25QYXJ0RGlnaXRDb3VudCA9IHtIZXg6NHxPY3Q6M3xCaW46MX0gKiBvdGhlckJhc2VGcmFjdGlvblBhcnREaWdpdENvdW50XHJcbiAgICAvLyBUaGVyZWZvcmUgdXNpbmcgNCAqIHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIHN0ciB3aWxsIGFsd2F5cyBiZSBlbm91Z2guXHJcbiAgICBpZiAoaXNGbG9hdCkgeCA9IGRpdmlkZSh4LCBkaXZpc29yLCBsZW4gKiA0KTtcclxuXHJcbiAgICAvLyBNdWx0aXBseSBieSB0aGUgYmluYXJ5IGV4cG9uZW50IHBhcnQgaWYgcHJlc2VudC5cclxuICAgIGlmIChwKSB4ID0geC50aW1lcyhNYXRoLmFicyhwKSA8IDU0ID8gbWF0aHBvdygyLCBwKSA6IERlY2ltYWwucG93KDIsIHApKTtcclxuICAgIGV4dGVybmFsID0gdHJ1ZTtcclxuXHJcbiAgICByZXR1cm4geDtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIHNpbih4KSA9IHggLSB4XjMvMyEgKyB4XjUvNSEgLSAuLi5cclxuICAgKiB8eHwgPCBwaS8yXHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBzaW5lKEN0b3IsIHgpIHtcclxuICAgIHZhciBrLFxyXG4gICAgICBsZW4gPSB4LmQubGVuZ3RoO1xyXG5cclxuICAgIGlmIChsZW4gPCAzKSByZXR1cm4gdGF5bG9yU2VyaWVzKEN0b3IsIDIsIHgsIHgpO1xyXG5cclxuICAgIC8vIEFyZ3VtZW50IHJlZHVjdGlvbjogc2luKDV4KSA9IDE2KnNpbl41KHgpIC0gMjAqc2luXjMoeCkgKyA1KnNpbih4KVxyXG4gICAgLy8gaS5lLiBzaW4oeCkgPSAxNipzaW5eNSh4LzUpIC0gMjAqc2luXjMoeC81KSArIDUqc2luKHgvNSlcclxuICAgIC8vIGFuZCAgc2luKHgpID0gc2luKHgvNSkoNSArIHNpbl4yKHgvNSkoMTZzaW5eMih4LzUpIC0gMjApKVxyXG5cclxuICAgIC8vIEVzdGltYXRlIHRoZSBvcHRpbXVtIG51bWJlciBvZiB0aW1lcyB0byB1c2UgdGhlIGFyZ3VtZW50IHJlZHVjdGlvbi5cclxuICAgIGsgPSAxLjQgKiBNYXRoLnNxcnQobGVuKTtcclxuICAgIGsgPSBrID4gMTYgPyAxNiA6IGsgfCAwO1xyXG5cclxuICAgIHggPSB4LnRpbWVzKDEgLyB0aW55UG93KDUsIGspKTtcclxuICAgIHggPSB0YXlsb3JTZXJpZXMoQ3RvciwgMiwgeCwgeCk7XHJcblxyXG4gICAgLy8gUmV2ZXJzZSBhcmd1bWVudCByZWR1Y3Rpb25cclxuICAgIHZhciBzaW4yX3gsXHJcbiAgICAgIGQ1ID0gbmV3IEN0b3IoNSksXHJcbiAgICAgIGQxNiA9IG5ldyBDdG9yKDE2KSxcclxuICAgICAgZDIwID0gbmV3IEN0b3IoMjApO1xyXG4gICAgZm9yICg7IGstLTspIHtcclxuICAgICAgc2luMl94ID0geC50aW1lcyh4KTtcclxuICAgICAgeCA9IHgudGltZXMoZDUucGx1cyhzaW4yX3gudGltZXMoZDE2LnRpbWVzKHNpbjJfeCkubWludXMoZDIwKSkpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4geDtcclxuICB9XHJcblxyXG5cclxuICAvLyBDYWxjdWxhdGUgVGF5bG9yIHNlcmllcyBmb3IgYGNvc2AsIGBjb3NoYCwgYHNpbmAgYW5kIGBzaW5oYC5cclxuICBmdW5jdGlvbiB0YXlsb3JTZXJpZXMoQ3RvciwgbiwgeCwgeSwgaXNIeXBlcmJvbGljKSB7XHJcbiAgICB2YXIgaiwgdCwgdSwgeDIsXHJcbiAgICAgIGkgPSAxLFxyXG4gICAgICBwciA9IEN0b3IucHJlY2lzaW9uLFxyXG4gICAgICBrID0gTWF0aC5jZWlsKHByIC8gTE9HX0JBU0UpO1xyXG5cclxuICAgIGV4dGVybmFsID0gZmFsc2U7XHJcbiAgICB4MiA9IHgudGltZXMoeCk7XHJcbiAgICB1ID0gbmV3IEN0b3IoeSk7XHJcblxyXG4gICAgZm9yICg7Oykge1xyXG4gICAgICB0ID0gZGl2aWRlKHUudGltZXMoeDIpLCBuZXcgQ3RvcihuKysgKiBuKyspLCBwciwgMSk7XHJcbiAgICAgIHUgPSBpc0h5cGVyYm9saWMgPyB5LnBsdXModCkgOiB5Lm1pbnVzKHQpO1xyXG4gICAgICB5ID0gZGl2aWRlKHQudGltZXMoeDIpLCBuZXcgQ3RvcihuKysgKiBuKyspLCBwciwgMSk7XHJcbiAgICAgIHQgPSB1LnBsdXMoeSk7XHJcblxyXG4gICAgICBpZiAodC5kW2tdICE9PSB2b2lkIDApIHtcclxuICAgICAgICBmb3IgKGogPSBrOyB0LmRbal0gPT09IHUuZFtqXSAmJiBqLS07KTtcclxuICAgICAgICBpZiAoaiA9PSAtMSkgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGogPSB1O1xyXG4gICAgICB1ID0geTtcclxuICAgICAgeSA9IHQ7XHJcbiAgICAgIHQgPSBqO1xyXG4gICAgICBpKys7XHJcbiAgICB9XHJcblxyXG4gICAgZXh0ZXJuYWwgPSB0cnVlO1xyXG4gICAgdC5kLmxlbmd0aCA9IGsgKyAxO1xyXG5cclxuICAgIHJldHVybiB0O1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIEV4cG9uZW50IGUgbXVzdCBiZSBwb3NpdGl2ZSBhbmQgbm9uLXplcm8uXHJcbiAgZnVuY3Rpb24gdGlueVBvdyhiLCBlKSB7XHJcbiAgICB2YXIgbiA9IGI7XHJcbiAgICB3aGlsZSAoLS1lKSBuICo9IGI7XHJcbiAgICByZXR1cm4gbjtcclxuICB9XHJcblxyXG5cclxuICAvLyBSZXR1cm4gdGhlIGFic29sdXRlIHZhbHVlIG9mIGB4YCByZWR1Y2VkIHRvIGxlc3MgdGhhbiBvciBlcXVhbCB0byBoYWxmIHBpLlxyXG4gIGZ1bmN0aW9uIHRvTGVzc1RoYW5IYWxmUGkoQ3RvciwgeCkge1xyXG4gICAgdmFyIHQsXHJcbiAgICAgIGlzTmVnID0geC5zIDwgMCxcclxuICAgICAgcGkgPSBnZXRQaShDdG9yLCBDdG9yLnByZWNpc2lvbiwgMSksXHJcbiAgICAgIGhhbGZQaSA9IHBpLnRpbWVzKDAuNSk7XHJcblxyXG4gICAgeCA9IHguYWJzKCk7XHJcblxyXG4gICAgaWYgKHgubHRlKGhhbGZQaSkpIHtcclxuICAgICAgcXVhZHJhbnQgPSBpc05lZyA/IDQgOiAxO1xyXG4gICAgICByZXR1cm4geDtcclxuICAgIH1cclxuXHJcbiAgICB0ID0geC5kaXZUb0ludChwaSk7XHJcblxyXG4gICAgaWYgKHQuaXNaZXJvKCkpIHtcclxuICAgICAgcXVhZHJhbnQgPSBpc05lZyA/IDMgOiAyO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgeCA9IHgubWludXModC50aW1lcyhwaSkpO1xyXG5cclxuICAgICAgLy8gMCA8PSB4IDwgcGlcclxuICAgICAgaWYgKHgubHRlKGhhbGZQaSkpIHtcclxuICAgICAgICBxdWFkcmFudCA9IGlzT2RkKHQpID8gKGlzTmVnID8gMiA6IDMpIDogKGlzTmVnID8gNCA6IDEpO1xyXG4gICAgICAgIHJldHVybiB4O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBxdWFkcmFudCA9IGlzT2RkKHQpID8gKGlzTmVnID8gMSA6IDQpIDogKGlzTmVnID8gMyA6IDIpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB4Lm1pbnVzKHBpKS5hYnMoKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiB0aGUgdmFsdWUgb2YgRGVjaW1hbCBgeGAgYXMgYSBzdHJpbmcgaW4gYmFzZSBgYmFzZU91dGAuXHJcbiAgICpcclxuICAgKiBJZiB0aGUgb3B0aW9uYWwgYHNkYCBhcmd1bWVudCBpcyBwcmVzZW50IGluY2x1ZGUgYSBiaW5hcnkgZXhwb25lbnQgc3VmZml4LlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIHRvU3RyaW5nQmluYXJ5KHgsIGJhc2VPdXQsIHNkLCBybSkge1xyXG4gICAgdmFyIGJhc2UsIGUsIGksIGssIGxlbiwgcm91bmRVcCwgc3RyLCB4ZCwgeSxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3IsXHJcbiAgICAgIGlzRXhwID0gc2QgIT09IHZvaWQgMDtcclxuXHJcbiAgICBpZiAoaXNFeHApIHtcclxuICAgICAgY2hlY2tJbnQzMihzZCwgMSwgTUFYX0RJR0lUUyk7XHJcbiAgICAgIGlmIChybSA9PT0gdm9pZCAwKSBybSA9IEN0b3Iucm91bmRpbmc7XHJcbiAgICAgIGVsc2UgY2hlY2tJbnQzMihybSwgMCwgOCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzZCA9IEN0b3IucHJlY2lzaW9uO1xyXG4gICAgICBybSA9IEN0b3Iucm91bmRpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF4LmlzRmluaXRlKCkpIHtcclxuICAgICAgc3RyID0gbm9uRmluaXRlVG9TdHJpbmcoeCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzdHIgPSBmaW5pdGVUb1N0cmluZyh4KTtcclxuICAgICAgaSA9IHN0ci5pbmRleE9mKCcuJyk7XHJcblxyXG4gICAgICAvLyBVc2UgZXhwb25lbnRpYWwgbm90YXRpb24gYWNjb3JkaW5nIHRvIGB0b0V4cFBvc2AgYW5kIGB0b0V4cE5lZ2A/IE5vLCBidXQgaWYgcmVxdWlyZWQ6XHJcbiAgICAgIC8vIG1heEJpbmFyeUV4cG9uZW50ID0gZmxvb3IoKGRlY2ltYWxFeHBvbmVudCArIDEpICogbG9nWzJdKDEwKSlcclxuICAgICAgLy8gbWluQmluYXJ5RXhwb25lbnQgPSBmbG9vcihkZWNpbWFsRXhwb25lbnQgKiBsb2dbMl0oMTApKVxyXG4gICAgICAvLyBsb2dbMl0oMTApID0gMy4zMjE5MjgwOTQ4ODczNjIzNDc4NzAzMTk0Mjk0ODkzOTAxNzU4NjRcclxuXHJcbiAgICAgIGlmIChpc0V4cCkge1xyXG4gICAgICAgIGJhc2UgPSAyO1xyXG4gICAgICAgIGlmIChiYXNlT3V0ID09IDE2KSB7XHJcbiAgICAgICAgICBzZCA9IHNkICogNCAtIDM7XHJcbiAgICAgICAgfSBlbHNlIGlmIChiYXNlT3V0ID09IDgpIHtcclxuICAgICAgICAgIHNkID0gc2QgKiAzIC0gMjtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYmFzZSA9IGJhc2VPdXQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIENvbnZlcnQgdGhlIG51bWJlciBhcyBhbiBpbnRlZ2VyIHRoZW4gZGl2aWRlIHRoZSByZXN1bHQgYnkgaXRzIGJhc2UgcmFpc2VkIHRvIGEgcG93ZXIgc3VjaFxyXG4gICAgICAvLyB0aGF0IHRoZSBmcmFjdGlvbiBwYXJ0IHdpbGwgYmUgcmVzdG9yZWQuXHJcblxyXG4gICAgICAvLyBOb24taW50ZWdlci5cclxuICAgICAgaWYgKGkgPj0gMCkge1xyXG4gICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKCcuJywgJycpO1xyXG4gICAgICAgIHkgPSBuZXcgQ3RvcigxKTtcclxuICAgICAgICB5LmUgPSBzdHIubGVuZ3RoIC0gaTtcclxuICAgICAgICB5LmQgPSBjb252ZXJ0QmFzZShmaW5pdGVUb1N0cmluZyh5KSwgMTAsIGJhc2UpO1xyXG4gICAgICAgIHkuZSA9IHkuZC5sZW5ndGg7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHhkID0gY29udmVydEJhc2Uoc3RyLCAxMCwgYmFzZSk7XHJcbiAgICAgIGUgPSBsZW4gPSB4ZC5sZW5ndGg7XHJcblxyXG4gICAgICAvLyBSZW1vdmUgdHJhaWxpbmcgemVyb3MuXHJcbiAgICAgIGZvciAoOyB4ZFstLWxlbl0gPT0gMDspIHhkLnBvcCgpO1xyXG5cclxuICAgICAgaWYgKCF4ZFswXSkge1xyXG4gICAgICAgIHN0ciA9IGlzRXhwID8gJzBwKzAnIDogJzAnO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChpIDwgMCkge1xyXG4gICAgICAgICAgZS0tO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB4ID0gbmV3IEN0b3IoeCk7XHJcbiAgICAgICAgICB4LmQgPSB4ZDtcclxuICAgICAgICAgIHguZSA9IGU7XHJcbiAgICAgICAgICB4ID0gZGl2aWRlKHgsIHksIHNkLCBybSwgMCwgYmFzZSk7XHJcbiAgICAgICAgICB4ZCA9IHguZDtcclxuICAgICAgICAgIGUgPSB4LmU7XHJcbiAgICAgICAgICByb3VuZFVwID0gaW5leGFjdDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFRoZSByb3VuZGluZyBkaWdpdCwgaS5lLiB0aGUgZGlnaXQgYWZ0ZXIgdGhlIGRpZ2l0IHRoYXQgbWF5IGJlIHJvdW5kZWQgdXAuXHJcbiAgICAgICAgaSA9IHhkW3NkXTtcclxuICAgICAgICBrID0gYmFzZSAvIDI7XHJcbiAgICAgICAgcm91bmRVcCA9IHJvdW5kVXAgfHwgeGRbc2QgKyAxXSAhPT0gdm9pZCAwO1xyXG5cclxuICAgICAgICByb3VuZFVwID0gcm0gPCA0XHJcbiAgICAgICAgICA/IChpICE9PSB2b2lkIDAgfHwgcm91bmRVcCkgJiYgKHJtID09PSAwIHx8IHJtID09PSAoeC5zIDwgMCA/IDMgOiAyKSlcclxuICAgICAgICAgIDogaSA+IGsgfHwgaSA9PT0gayAmJiAocm0gPT09IDQgfHwgcm91bmRVcCB8fCBybSA9PT0gNiAmJiB4ZFtzZCAtIDFdICYgMSB8fFxyXG4gICAgICAgICAgICBybSA9PT0gKHgucyA8IDAgPyA4IDogNykpO1xyXG5cclxuICAgICAgICB4ZC5sZW5ndGggPSBzZDtcclxuXHJcbiAgICAgICAgaWYgKHJvdW5kVXApIHtcclxuXHJcbiAgICAgICAgICAvLyBSb3VuZGluZyB1cCBtYXkgbWVhbiB0aGUgcHJldmlvdXMgZGlnaXQgaGFzIHRvIGJlIHJvdW5kZWQgdXAgYW5kIHNvIG9uLlxyXG4gICAgICAgICAgZm9yICg7ICsreGRbLS1zZF0gPiBiYXNlIC0gMTspIHtcclxuICAgICAgICAgICAgeGRbc2RdID0gMDtcclxuICAgICAgICAgICAgaWYgKCFzZCkge1xyXG4gICAgICAgICAgICAgICsrZTtcclxuICAgICAgICAgICAgICB4ZC51bnNoaWZ0KDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBEZXRlcm1pbmUgdHJhaWxpbmcgemVyb3MuXHJcbiAgICAgICAgZm9yIChsZW4gPSB4ZC5sZW5ndGg7ICF4ZFtsZW4gLSAxXTsgLS1sZW4pO1xyXG5cclxuICAgICAgICAvLyBFLmcuIFs0LCAxMSwgMTVdIGJlY29tZXMgNGJmLlxyXG4gICAgICAgIGZvciAoaSA9IDAsIHN0ciA9ICcnOyBpIDwgbGVuOyBpKyspIHN0ciArPSBOVU1FUkFMUy5jaGFyQXQoeGRbaV0pO1xyXG5cclxuICAgICAgICAvLyBBZGQgYmluYXJ5IGV4cG9uZW50IHN1ZmZpeD9cclxuICAgICAgICBpZiAoaXNFeHApIHtcclxuICAgICAgICAgIGlmIChsZW4gPiAxKSB7XHJcbiAgICAgICAgICAgIGlmIChiYXNlT3V0ID09IDE2IHx8IGJhc2VPdXQgPT0gOCkge1xyXG4gICAgICAgICAgICAgIGkgPSBiYXNlT3V0ID09IDE2ID8gNCA6IDM7XHJcbiAgICAgICAgICAgICAgZm9yICgtLWxlbjsgbGVuICUgaTsgbGVuKyspIHN0ciArPSAnMCc7XHJcbiAgICAgICAgICAgICAgeGQgPSBjb252ZXJ0QmFzZShzdHIsIGJhc2UsIGJhc2VPdXQpO1xyXG4gICAgICAgICAgICAgIGZvciAobGVuID0geGQubGVuZ3RoOyAheGRbbGVuIC0gMV07IC0tbGVuKTtcclxuXHJcbiAgICAgICAgICAgICAgLy8geGRbMF0gd2lsbCBhbHdheXMgYmUgYmUgMVxyXG4gICAgICAgICAgICAgIGZvciAoaSA9IDEsIHN0ciA9ICcxLic7IGkgPCBsZW47IGkrKykgc3RyICs9IE5VTUVSQUxTLmNoYXJBdCh4ZFtpXSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgc3RyID0gc3RyLmNoYXJBdCgwKSArICcuJyArIHN0ci5zbGljZSgxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHN0ciA9ICBzdHIgKyAoZSA8IDAgPyAncCcgOiAncCsnKSArIGU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChlIDwgMCkge1xyXG4gICAgICAgICAgZm9yICg7ICsrZTspIHN0ciA9ICcwJyArIHN0cjtcclxuICAgICAgICAgIHN0ciA9ICcwLicgKyBzdHI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICgrK2UgPiBsZW4pIGZvciAoZSAtPSBsZW47IGUtLSA7KSBzdHIgKz0gJzAnO1xyXG4gICAgICAgICAgZWxzZSBpZiAoZSA8IGxlbikgc3RyID0gc3RyLnNsaWNlKDAsIGUpICsgJy4nICsgc3RyLnNsaWNlKGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgc3RyID0gKGJhc2VPdXQgPT0gMTYgPyAnMHgnIDogYmFzZU91dCA9PSAyID8gJzBiJyA6IGJhc2VPdXQgPT0gOCA/ICcwbycgOiAnJykgKyBzdHI7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHgucyA8IDAgPyAnLScgKyBzdHIgOiBzdHI7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gRG9lcyBub3Qgc3RyaXAgdHJhaWxpbmcgemVyb3MuXHJcbiAgZnVuY3Rpb24gdHJ1bmNhdGUoYXJyLCBsZW4pIHtcclxuICAgIGlmIChhcnIubGVuZ3RoID4gbGVuKSB7XHJcbiAgICAgIGFyci5sZW5ndGggPSBsZW47XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8vIERlY2ltYWwgbWV0aG9kc1xyXG5cclxuXHJcbiAgLypcclxuICAgKiAgYWJzXHJcbiAgICogIGFjb3NcclxuICAgKiAgYWNvc2hcclxuICAgKiAgYWRkXHJcbiAgICogIGFzaW5cclxuICAgKiAgYXNpbmhcclxuICAgKiAgYXRhblxyXG4gICAqICBhdGFuaFxyXG4gICAqICBhdGFuMlxyXG4gICAqICBjYnJ0XHJcbiAgICogIGNlaWxcclxuICAgKiAgY2xvbmVcclxuICAgKiAgY29uZmlnXHJcbiAgICogIGNvc1xyXG4gICAqICBjb3NoXHJcbiAgICogIGRpdlxyXG4gICAqICBleHBcclxuICAgKiAgZmxvb3JcclxuICAgKiAgaHlwb3RcclxuICAgKiAgbG5cclxuICAgKiAgbG9nXHJcbiAgICogIGxvZzJcclxuICAgKiAgbG9nMTBcclxuICAgKiAgbWF4XHJcbiAgICogIG1pblxyXG4gICAqICBtb2RcclxuICAgKiAgbXVsXHJcbiAgICogIHBvd1xyXG4gICAqICByYW5kb21cclxuICAgKiAgcm91bmRcclxuICAgKiAgc2V0XHJcbiAgICogIHNpZ25cclxuICAgKiAgc2luXHJcbiAgICogIHNpbmhcclxuICAgKiAgc3FydFxyXG4gICAqICBzdWJcclxuICAgKiAgdGFuXHJcbiAgICogIHRhbmhcclxuICAgKiAgdHJ1bmNcclxuICAgKi9cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGFic29sdXRlIHZhbHVlIG9mIGB4YC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGFicyh4KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkuYWJzKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgYXJjY29zaW5lIGluIHJhZGlhbnMgb2YgYHhgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gYWNvcyh4KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkuYWNvcygpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGludmVyc2Ugb2YgdGhlIGh5cGVyYm9saWMgY29zaW5lIG9mIGB4YCwgcm91bmRlZCB0b1xyXG4gICAqIGBwcmVjaXNpb25gIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IEEgdmFsdWUgaW4gcmFkaWFucy5cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGFjb3NoKHgpIHtcclxuICAgIHJldHVybiBuZXcgdGhpcyh4KS5hY29zaCgpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIHN1bSBvZiBgeGAgYW5kIGB5YCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYCBzaWduaWZpY2FudFxyXG4gICAqIGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICogeSB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gYWRkKHgsIHkpIHtcclxuICAgIHJldHVybiBuZXcgdGhpcyh4KS5wbHVzKHkpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGFyY3NpbmUgaW4gcmFkaWFucyBvZiBgeGAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmBcclxuICAgKiBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gYXNpbih4KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkuYXNpbigpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGludmVyc2Ugb2YgdGhlIGh5cGVyYm9saWMgc2luZSBvZiBgeGAsIHJvdW5kZWQgdG9cclxuICAgKiBgcHJlY2lzaW9uYCBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfSBBIHZhbHVlIGluIHJhZGlhbnMuXHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBhc2luaCh4KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkuYXNpbmgoKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBhcmN0YW5nZW50IGluIHJhZGlhbnMgb2YgYHhgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gXHJcbiAgICogc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGF0YW4oeCkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLmF0YW4oKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBpbnZlcnNlIG9mIHRoZSBoeXBlcmJvbGljIHRhbmdlbnQgb2YgYHhgLCByb3VuZGVkIHRvXHJcbiAgICogYHByZWNpc2lvbmAgc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH0gQSB2YWx1ZSBpbiByYWRpYW5zLlxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gYXRhbmgoeCkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLmF0YW5oKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgYXJjdGFuZ2VudCBpbiByYWRpYW5zIG9mIGB5L3hgIGluIHRoZSByYW5nZSAtcGkgdG8gcGlcclxuICAgKiAoaW5jbHVzaXZlKSwgcm91bmRlZCB0byBgcHJlY2lzaW9uYCBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogRG9tYWluOiBbLUluZmluaXR5LCBJbmZpbml0eV1cclxuICAgKiBSYW5nZTogWy1waSwgcGldXHJcbiAgICpcclxuICAgKiB5IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IFRoZSB5LWNvb3JkaW5hdGUuXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfSBUaGUgeC1jb29yZGluYXRlLlxyXG4gICAqXHJcbiAgICogYXRhbjIowrEwLCAtMCkgICAgICAgICAgICAgICA9IMKxcGlcclxuICAgKiBhdGFuMijCsTAsICswKSAgICAgICAgICAgICAgID0gwrEwXHJcbiAgICogYXRhbjIowrEwLCAteCkgICAgICAgICAgICAgICA9IMKxcGkgZm9yIHggPiAwXHJcbiAgICogYXRhbjIowrEwLCB4KSAgICAgICAgICAgICAgICA9IMKxMCBmb3IgeCA+IDBcclxuICAgKiBhdGFuMigteSwgwrEwKSAgICAgICAgICAgICAgID0gLXBpLzIgZm9yIHkgPiAwXHJcbiAgICogYXRhbjIoeSwgwrEwKSAgICAgICAgICAgICAgICA9IHBpLzIgZm9yIHkgPiAwXHJcbiAgICogYXRhbjIowrF5LCAtSW5maW5pdHkpICAgICAgICA9IMKxcGkgZm9yIGZpbml0ZSB5ID4gMFxyXG4gICAqIGF0YW4yKMKxeSwgK0luZmluaXR5KSAgICAgICAgPSDCsTAgZm9yIGZpbml0ZSB5ID4gMFxyXG4gICAqIGF0YW4yKMKxSW5maW5pdHksIHgpICAgICAgICAgPSDCsXBpLzIgZm9yIGZpbml0ZSB4XHJcbiAgICogYXRhbjIowrFJbmZpbml0eSwgLUluZmluaXR5KSA9IMKxMypwaS80XHJcbiAgICogYXRhbjIowrFJbmZpbml0eSwgK0luZmluaXR5KSA9IMKxcGkvNFxyXG4gICAqIGF0YW4yKE5hTiwgeCkgPSBOYU5cclxuICAgKiBhdGFuMih5LCBOYU4pID0gTmFOXHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBhdGFuMih5LCB4KSB7XHJcbiAgICB5ID0gbmV3IHRoaXMoeSk7XHJcbiAgICB4ID0gbmV3IHRoaXMoeCk7XHJcbiAgICB2YXIgcixcclxuICAgICAgcHIgPSB0aGlzLnByZWNpc2lvbixcclxuICAgICAgcm0gPSB0aGlzLnJvdW5kaW5nLFxyXG4gICAgICB3cHIgPSBwciArIDQ7XHJcblxyXG4gICAgLy8gRWl0aGVyIE5hTlxyXG4gICAgaWYgKCF5LnMgfHwgIXgucykge1xyXG4gICAgICByID0gbmV3IHRoaXMoTmFOKTtcclxuXHJcbiAgICAvLyBCb3RoIMKxSW5maW5pdHlcclxuICAgIH0gZWxzZSBpZiAoIXkuZCAmJiAheC5kKSB7XHJcbiAgICAgIHIgPSBnZXRQaSh0aGlzLCB3cHIsIDEpLnRpbWVzKHgucyA+IDAgPyAwLjI1IDogMC43NSk7XHJcbiAgICAgIHIucyA9IHkucztcclxuXHJcbiAgICAvLyB4IGlzIMKxSW5maW5pdHkgb3IgeSBpcyDCsTBcclxuICAgIH0gZWxzZSBpZiAoIXguZCB8fCB5LmlzWmVybygpKSB7XHJcbiAgICAgIHIgPSB4LnMgPCAwID8gZ2V0UGkodGhpcywgcHIsIHJtKSA6IG5ldyB0aGlzKDApO1xyXG4gICAgICByLnMgPSB5LnM7XHJcblxyXG4gICAgLy8geSBpcyDCsUluZmluaXR5IG9yIHggaXMgwrEwXHJcbiAgICB9IGVsc2UgaWYgKCF5LmQgfHwgeC5pc1plcm8oKSkge1xyXG4gICAgICByID0gZ2V0UGkodGhpcywgd3ByLCAxKS50aW1lcygwLjUpO1xyXG4gICAgICByLnMgPSB5LnM7XHJcblxyXG4gICAgLy8gQm90aCBub24temVybyBhbmQgZmluaXRlXHJcbiAgICB9IGVsc2UgaWYgKHgucyA8IDApIHtcclxuICAgICAgdGhpcy5wcmVjaXNpb24gPSB3cHI7XHJcbiAgICAgIHRoaXMucm91bmRpbmcgPSAxO1xyXG4gICAgICByID0gdGhpcy5hdGFuKGRpdmlkZSh5LCB4LCB3cHIsIDEpKTtcclxuICAgICAgeCA9IGdldFBpKHRoaXMsIHdwciwgMSk7XHJcbiAgICAgIHRoaXMucHJlY2lzaW9uID0gcHI7XHJcbiAgICAgIHRoaXMucm91bmRpbmcgPSBybTtcclxuICAgICAgciA9IHkucyA8IDAgPyByLm1pbnVzKHgpIDogci5wbHVzKHgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgciA9IHRoaXMuYXRhbihkaXZpZGUoeSwgeCwgd3ByLCAxKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHI7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgY3ViZSByb290IG9mIGB4YCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYCBzaWduaWZpY2FudFxyXG4gICAqIGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBjYnJ0KHgpIHtcclxuICAgIHJldHVybiBuZXcgdGhpcyh4KS5jYnJ0KCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyBgeGAgcm91bmRlZCB0byBhbiBpbnRlZ2VyIHVzaW5nIGBST1VORF9DRUlMYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGNlaWwoeCkge1xyXG4gICAgcmV0dXJuIGZpbmFsaXNlKHggPSBuZXcgdGhpcyh4KSwgeC5lICsgMSwgMik7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBDb25maWd1cmUgZ2xvYmFsIHNldHRpbmdzIGZvciBhIERlY2ltYWwgY29uc3RydWN0b3IuXHJcbiAgICpcclxuICAgKiBgb2JqYCBpcyBhbiBvYmplY3Qgd2l0aCBvbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMsXHJcbiAgICpcclxuICAgKiAgIHByZWNpc2lvbiAge251bWJlcn1cclxuICAgKiAgIHJvdW5kaW5nICAge251bWJlcn1cclxuICAgKiAgIHRvRXhwTmVnICAge251bWJlcn1cclxuICAgKiAgIHRvRXhwUG9zICAge251bWJlcn1cclxuICAgKiAgIG1heEUgICAgICAge251bWJlcn1cclxuICAgKiAgIG1pbkUgICAgICAge251bWJlcn1cclxuICAgKiAgIG1vZHVsbyAgICAge251bWJlcn1cclxuICAgKiAgIGNyeXB0byAgICAge2Jvb2xlYW58bnVtYmVyfVxyXG4gICAqICAgZGVmYXVsdHMgICB7dHJ1ZX1cclxuICAgKlxyXG4gICAqIEUuZy4gRGVjaW1hbC5jb25maWcoeyBwcmVjaXNpb246IDIwLCByb3VuZGluZzogNCB9KVxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gY29uZmlnKG9iaikge1xyXG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHRocm93IEVycm9yKGRlY2ltYWxFcnJvciArICdPYmplY3QgZXhwZWN0ZWQnKTtcclxuICAgIHZhciBpLCBwLCB2LFxyXG4gICAgICB1c2VEZWZhdWx0cyA9IG9iai5kZWZhdWx0cyA9PT0gdHJ1ZSxcclxuICAgICAgcHMgPSBbXHJcbiAgICAgICAgJ3ByZWNpc2lvbicsIDEsIE1BWF9ESUdJVFMsXHJcbiAgICAgICAgJ3JvdW5kaW5nJywgMCwgOCxcclxuICAgICAgICAndG9FeHBOZWcnLCAtRVhQX0xJTUlULCAwLFxyXG4gICAgICAgICd0b0V4cFBvcycsIDAsIEVYUF9MSU1JVCxcclxuICAgICAgICAnbWF4RScsIDAsIEVYUF9MSU1JVCxcclxuICAgICAgICAnbWluRScsIC1FWFBfTElNSVQsIDAsXHJcbiAgICAgICAgJ21vZHVsbycsIDAsIDlcclxuICAgICAgXTtcclxuXHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgcHMubGVuZ3RoOyBpICs9IDMpIHtcclxuICAgICAgaWYgKHAgPSBwc1tpXSwgdXNlRGVmYXVsdHMpIHRoaXNbcF0gPSBERUZBVUxUU1twXTtcclxuICAgICAgaWYgKCh2ID0gb2JqW3BdKSAhPT0gdm9pZCAwKSB7XHJcbiAgICAgICAgaWYgKG1hdGhmbG9vcih2KSA9PT0gdiAmJiB2ID49IHBzW2kgKyAxXSAmJiB2IDw9IHBzW2kgKyAyXSkgdGhpc1twXSA9IHY7XHJcbiAgICAgICAgZWxzZSB0aHJvdyBFcnJvcihpbnZhbGlkQXJndW1lbnQgKyBwICsgJzogJyArIHYpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHAgPSAnY3J5cHRvJywgdXNlRGVmYXVsdHMpIHRoaXNbcF0gPSBERUZBVUxUU1twXTtcclxuICAgIGlmICgodiA9IG9ialtwXSkgIT09IHZvaWQgMCkge1xyXG4gICAgICBpZiAodiA9PT0gdHJ1ZSB8fCB2ID09PSBmYWxzZSB8fCB2ID09PSAwIHx8IHYgPT09IDEpIHtcclxuICAgICAgICBpZiAodikge1xyXG4gICAgICAgICAgaWYgKHR5cGVvZiBjcnlwdG8gIT0gJ3VuZGVmaW5lZCcgJiYgY3J5cHRvICYmXHJcbiAgICAgICAgICAgIChjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzIHx8IGNyeXB0by5yYW5kb21CeXRlcykpIHtcclxuICAgICAgICAgICAgdGhpc1twXSA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihjcnlwdG9VbmF2YWlsYWJsZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXNbcF0gPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhyb3cgRXJyb3IoaW52YWxpZEFyZ3VtZW50ICsgcCArICc6ICcgKyB2KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGNvc2luZSBvZiBgeGAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmAgc2lnbmlmaWNhbnRcclxuICAgKiBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfSBBIHZhbHVlIGluIHJhZGlhbnMuXHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBjb3MoeCkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLmNvcygpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGh5cGVyYm9saWMgY29zaW5lIG9mIGB4YCwgcm91bmRlZCB0byBwcmVjaXNpb25cclxuICAgKiBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfSBBIHZhbHVlIGluIHJhZGlhbnMuXHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBjb3NoKHgpIHtcclxuICAgIHJldHVybiBuZXcgdGhpcyh4KS5jb3NoKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBDcmVhdGUgYW5kIHJldHVybiBhIERlY2ltYWwgY29uc3RydWN0b3Igd2l0aCB0aGUgc2FtZSBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMgYXMgdGhpcyBEZWNpbWFsXHJcbiAgICogY29uc3RydWN0b3IuXHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBjbG9uZShvYmopIHtcclxuICAgIHZhciBpLCBwLCBwcztcclxuXHJcbiAgICAvKlxyXG4gICAgICogVGhlIERlY2ltYWwgY29uc3RydWN0b3IgYW5kIGV4cG9ydGVkIGZ1bmN0aW9uLlxyXG4gICAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgaW5zdGFuY2UuXHJcbiAgICAgKlxyXG4gICAgICogdiB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfSBBIG51bWVyaWMgdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBEZWNpbWFsKHYpIHtcclxuICAgICAgdmFyIGUsIGksIHQsXHJcbiAgICAgICAgeCA9IHRoaXM7XHJcblxyXG4gICAgICAvLyBEZWNpbWFsIGNhbGxlZCB3aXRob3V0IG5ldy5cclxuICAgICAgaWYgKCEoeCBpbnN0YW5jZW9mIERlY2ltYWwpKSByZXR1cm4gbmV3IERlY2ltYWwodik7XHJcblxyXG4gICAgICAvLyBSZXRhaW4gYSByZWZlcmVuY2UgdG8gdGhpcyBEZWNpbWFsIGNvbnN0cnVjdG9yLCBhbmQgc2hhZG93IERlY2ltYWwucHJvdG90eXBlLmNvbnN0cnVjdG9yXHJcbiAgICAgIC8vIHdoaWNoIHBvaW50cyB0byBPYmplY3QuXHJcbiAgICAgIHguY29uc3RydWN0b3IgPSBEZWNpbWFsO1xyXG5cclxuICAgICAgLy8gRHVwbGljYXRlLlxyXG4gICAgICBpZiAodiBpbnN0YW5jZW9mIERlY2ltYWwpIHtcclxuICAgICAgICB4LnMgPSB2LnM7XHJcblxyXG4gICAgICAgIGlmIChleHRlcm5hbCkge1xyXG4gICAgICAgICAgaWYgKCF2LmQgfHwgdi5lID4gRGVjaW1hbC5tYXhFKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBJbmZpbml0eS5cclxuICAgICAgICAgICAgeC5lID0gTmFOO1xyXG4gICAgICAgICAgICB4LmQgPSBudWxsO1xyXG4gICAgICAgICAgfSBlbHNlIGlmICh2LmUgPCBEZWNpbWFsLm1pbkUpIHtcclxuXHJcbiAgICAgICAgICAgIC8vIFplcm8uXHJcbiAgICAgICAgICAgIHguZSA9IDA7XHJcbiAgICAgICAgICAgIHguZCA9IFswXTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHguZSA9IHYuZTtcclxuICAgICAgICAgICAgeC5kID0gdi5kLnNsaWNlKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHguZSA9IHYuZTtcclxuICAgICAgICAgIHguZCA9IHYuZCA/IHYuZC5zbGljZSgpIDogdi5kO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0ID0gdHlwZW9mIHY7XHJcblxyXG4gICAgICBpZiAodCA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICBpZiAodiA9PT0gMCkge1xyXG4gICAgICAgICAgeC5zID0gMSAvIHYgPCAwID8gLTEgOiAxO1xyXG4gICAgICAgICAgeC5lID0gMDtcclxuICAgICAgICAgIHguZCA9IFswXTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2IDwgMCkge1xyXG4gICAgICAgICAgdiA9IC12O1xyXG4gICAgICAgICAgeC5zID0gLTE7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHgucyA9IDE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBGYXN0IHBhdGggZm9yIHNtYWxsIGludGVnZXJzLlxyXG4gICAgICAgIGlmICh2ID09PSB+fnYgJiYgdiA8IDFlNykge1xyXG4gICAgICAgICAgZm9yIChlID0gMCwgaSA9IHY7IGkgPj0gMTA7IGkgLz0gMTApIGUrKztcclxuXHJcbiAgICAgICAgICBpZiAoZXh0ZXJuYWwpIHtcclxuICAgICAgICAgICAgaWYgKGUgPiBEZWNpbWFsLm1heEUpIHtcclxuICAgICAgICAgICAgICB4LmUgPSBOYU47XHJcbiAgICAgICAgICAgICAgeC5kID0gbnVsbDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChlIDwgRGVjaW1hbC5taW5FKSB7XHJcbiAgICAgICAgICAgICAgeC5lID0gMDtcclxuICAgICAgICAgICAgICB4LmQgPSBbMF07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgeC5lID0gZTtcclxuICAgICAgICAgICAgICB4LmQgPSBbdl07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHguZSA9IGU7XHJcbiAgICAgICAgICAgIHguZCA9IFt2XTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIC8vIEluZmluaXR5LCBOYU4uXHJcbiAgICAgICAgfSBlbHNlIGlmICh2ICogMCAhPT0gMCkge1xyXG4gICAgICAgICAgaWYgKCF2KSB4LnMgPSBOYU47XHJcbiAgICAgICAgICB4LmUgPSBOYU47XHJcbiAgICAgICAgICB4LmQgPSBudWxsO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHBhcnNlRGVjaW1hbCh4LCB2LnRvU3RyaW5nKCkpO1xyXG5cclxuICAgICAgfSBlbHNlIGlmICh0ICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHRocm93IEVycm9yKGludmFsaWRBcmd1bWVudCArIHYpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBNaW51cyBzaWduP1xyXG4gICAgICBpZiAoKGkgPSB2LmNoYXJDb2RlQXQoMCkpID09PSA0NSkge1xyXG4gICAgICAgIHYgPSB2LnNsaWNlKDEpO1xyXG4gICAgICAgIHgucyA9IC0xO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIFBsdXMgc2lnbj9cclxuICAgICAgICBpZiAoaSA9PT0gNDMpIHYgPSB2LnNsaWNlKDEpO1xyXG4gICAgICAgIHgucyA9IDE7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBpc0RlY2ltYWwudGVzdCh2KSA/IHBhcnNlRGVjaW1hbCh4LCB2KSA6IHBhcnNlT3RoZXIoeCwgdik7XHJcbiAgICB9XHJcblxyXG4gICAgRGVjaW1hbC5wcm90b3R5cGUgPSBQO1xyXG5cclxuICAgIERlY2ltYWwuUk9VTkRfVVAgPSAwO1xyXG4gICAgRGVjaW1hbC5ST1VORF9ET1dOID0gMTtcclxuICAgIERlY2ltYWwuUk9VTkRfQ0VJTCA9IDI7XHJcbiAgICBEZWNpbWFsLlJPVU5EX0ZMT09SID0gMztcclxuICAgIERlY2ltYWwuUk9VTkRfSEFMRl9VUCA9IDQ7XHJcbiAgICBEZWNpbWFsLlJPVU5EX0hBTEZfRE9XTiA9IDU7XHJcbiAgICBEZWNpbWFsLlJPVU5EX0hBTEZfRVZFTiA9IDY7XHJcbiAgICBEZWNpbWFsLlJPVU5EX0hBTEZfQ0VJTCA9IDc7XHJcbiAgICBEZWNpbWFsLlJPVU5EX0hBTEZfRkxPT1IgPSA4O1xyXG4gICAgRGVjaW1hbC5FVUNMSUQgPSA5O1xyXG5cclxuICAgIERlY2ltYWwuY29uZmlnID0gRGVjaW1hbC5zZXQgPSBjb25maWc7XHJcbiAgICBEZWNpbWFsLmNsb25lID0gY2xvbmU7XHJcbiAgICBEZWNpbWFsLmlzRGVjaW1hbCA9IGlzRGVjaW1hbEluc3RhbmNlO1xyXG5cclxuICAgIERlY2ltYWwuYWJzID0gYWJzO1xyXG4gICAgRGVjaW1hbC5hY29zID0gYWNvcztcclxuICAgIERlY2ltYWwuYWNvc2ggPSBhY29zaDsgICAgICAgIC8vIEVTNlxyXG4gICAgRGVjaW1hbC5hZGQgPSBhZGQ7XHJcbiAgICBEZWNpbWFsLmFzaW4gPSBhc2luO1xyXG4gICAgRGVjaW1hbC5hc2luaCA9IGFzaW5oOyAgICAgICAgLy8gRVM2XHJcbiAgICBEZWNpbWFsLmF0YW4gPSBhdGFuO1xyXG4gICAgRGVjaW1hbC5hdGFuaCA9IGF0YW5oOyAgICAgICAgLy8gRVM2XHJcbiAgICBEZWNpbWFsLmF0YW4yID0gYXRhbjI7XHJcbiAgICBEZWNpbWFsLmNicnQgPSBjYnJ0OyAgICAgICAgICAvLyBFUzZcclxuICAgIERlY2ltYWwuY2VpbCA9IGNlaWw7XHJcbiAgICBEZWNpbWFsLmNvcyA9IGNvcztcclxuICAgIERlY2ltYWwuY29zaCA9IGNvc2g7ICAgICAgICAgIC8vIEVTNlxyXG4gICAgRGVjaW1hbC5kaXYgPSBkaXY7XHJcbiAgICBEZWNpbWFsLmV4cCA9IGV4cDtcclxuICAgIERlY2ltYWwuZmxvb3IgPSBmbG9vcjtcclxuICAgIERlY2ltYWwuaHlwb3QgPSBoeXBvdDsgICAgICAgIC8vIEVTNlxyXG4gICAgRGVjaW1hbC5sbiA9IGxuO1xyXG4gICAgRGVjaW1hbC5sb2cgPSBsb2c7XHJcbiAgICBEZWNpbWFsLmxvZzEwID0gbG9nMTA7ICAgICAgICAvLyBFUzZcclxuICAgIERlY2ltYWwubG9nMiA9IGxvZzI7ICAgICAgICAgIC8vIEVTNlxyXG4gICAgRGVjaW1hbC5tYXggPSBtYXg7XHJcbiAgICBEZWNpbWFsLm1pbiA9IG1pbjtcclxuICAgIERlY2ltYWwubW9kID0gbW9kO1xyXG4gICAgRGVjaW1hbC5tdWwgPSBtdWw7XHJcbiAgICBEZWNpbWFsLnBvdyA9IHBvdztcclxuICAgIERlY2ltYWwucmFuZG9tID0gcmFuZG9tO1xyXG4gICAgRGVjaW1hbC5yb3VuZCA9IHJvdW5kO1xyXG4gICAgRGVjaW1hbC5zaWduID0gc2lnbjsgICAgICAgICAgLy8gRVM2XHJcbiAgICBEZWNpbWFsLnNpbiA9IHNpbjtcclxuICAgIERlY2ltYWwuc2luaCA9IHNpbmg7ICAgICAgICAgIC8vIEVTNlxyXG4gICAgRGVjaW1hbC5zcXJ0ID0gc3FydDtcclxuICAgIERlY2ltYWwuc3ViID0gc3ViO1xyXG4gICAgRGVjaW1hbC50YW4gPSB0YW47XHJcbiAgICBEZWNpbWFsLnRhbmggPSB0YW5oOyAgICAgICAgICAvLyBFUzZcclxuICAgIERlY2ltYWwudHJ1bmMgPSB0cnVuYzsgICAgICAgIC8vIEVTNlxyXG5cclxuICAgIGlmIChvYmogPT09IHZvaWQgMCkgb2JqID0ge307XHJcbiAgICBpZiAob2JqKSB7XHJcbiAgICAgIGlmIChvYmouZGVmYXVsdHMgIT09IHRydWUpIHtcclxuICAgICAgICBwcyA9IFsncHJlY2lzaW9uJywgJ3JvdW5kaW5nJywgJ3RvRXhwTmVnJywgJ3RvRXhwUG9zJywgJ21heEUnLCAnbWluRScsICdtb2R1bG8nLCAnY3J5cHRvJ107XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHBzLmxlbmd0aDspIGlmICghb2JqLmhhc093blByb3BlcnR5KHAgPSBwc1tpKytdKSkgb2JqW3BdID0gdGhpc1twXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIERlY2ltYWwuY29uZmlnKG9iaik7XHJcblxyXG4gICAgcmV0dXJuIERlY2ltYWw7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyBgeGAgZGl2aWRlZCBieSBgeWAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmAgc2lnbmlmaWNhbnRcclxuICAgKiBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqIHkge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGRpdih4LCB5KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkuZGl2KHkpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIG5hdHVyYWwgZXhwb25lbnRpYWwgb2YgYHhgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gXHJcbiAgICogc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH0gVGhlIHBvd2VyIHRvIHdoaWNoIHRvIHJhaXNlIHRoZSBiYXNlIG9mIHRoZSBuYXR1cmFsIGxvZy5cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGV4cCh4KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkuZXhwKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyBgeGAgcm91bmQgdG8gYW4gaW50ZWdlciB1c2luZyBgUk9VTkRfRkxPT1JgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gZmxvb3IoeCkge1xyXG4gICAgcmV0dXJuIGZpbmFsaXNlKHggPSBuZXcgdGhpcyh4KSwgeC5lICsgMSwgMyk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgc3F1YXJlIHJvb3Qgb2YgdGhlIHN1bSBvZiB0aGUgc3F1YXJlcyBvZiB0aGUgYXJndW1lbnRzLFxyXG4gICAqIHJvdW5kZWQgdG8gYHByZWNpc2lvbmAgc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIGh5cG90KGEsIGIsIC4uLikgPSBzcXJ0KGFeMiArIGJeMiArIC4uLilcclxuICAgKlxyXG4gICAqIGFyZ3VtZW50cyB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gaHlwb3QoKSB7XHJcbiAgICB2YXIgaSwgbixcclxuICAgICAgdCA9IG5ldyB0aGlzKDApO1xyXG5cclxuICAgIGV4dGVybmFsID0gZmFsc2U7XHJcblxyXG4gICAgZm9yIChpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7KSB7XHJcbiAgICAgIG4gPSBuZXcgdGhpcyhhcmd1bWVudHNbaSsrXSk7XHJcbiAgICAgIGlmICghbi5kKSB7XHJcbiAgICAgICAgaWYgKG4ucykge1xyXG4gICAgICAgICAgZXh0ZXJuYWwgPSB0cnVlO1xyXG4gICAgICAgICAgcmV0dXJuIG5ldyB0aGlzKDEgLyAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdCA9IG47XHJcbiAgICAgIH0gZWxzZSBpZiAodC5kKSB7XHJcbiAgICAgICAgdCA9IHQucGx1cyhuLnRpbWVzKG4pKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGV4dGVybmFsID0gdHJ1ZTtcclxuXHJcbiAgICByZXR1cm4gdC5zcXJ0KCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gdHJ1ZSBpZiBvYmplY3QgaXMgYSBEZWNpbWFsIGluc3RhbmNlICh3aGVyZSBEZWNpbWFsIGlzIGFueSBEZWNpbWFsIGNvbnN0cnVjdG9yKSxcclxuICAgKiBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gaXNEZWNpbWFsSW5zdGFuY2Uob2JqKSB7XHJcbiAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgRGVjaW1hbCB8fCBvYmogJiYgb2JqLm5hbWUgPT09ICdbb2JqZWN0IERlY2ltYWxdJyB8fCBmYWxzZTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBuYXR1cmFsIGxvZ2FyaXRobSBvZiBgeGAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmBcclxuICAgKiBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gbG4oeCkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLmxuKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgbG9nIG9mIGB4YCB0byB0aGUgYmFzZSBgeWAsIG9yIHRvIGJhc2UgMTAgaWYgbm8gYmFzZVxyXG4gICAqIGlzIHNwZWNpZmllZCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYCBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogbG9nW3ldKHgpXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IFRoZSBhcmd1bWVudCBvZiB0aGUgbG9nYXJpdGhtLlxyXG4gICAqIHkge251bWJlcnxzdHJpbmd8RGVjaW1hbH0gVGhlIGJhc2Ugb2YgdGhlIGxvZ2FyaXRobS5cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGxvZyh4LCB5KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkubG9nKHkpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGJhc2UgMiBsb2dhcml0aG0gb2YgYHhgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gXHJcbiAgICogc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGxvZzIoeCkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLmxvZygyKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBiYXNlIDEwIGxvZ2FyaXRobSBvZiBgeGAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmBcclxuICAgKiBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gbG9nMTAoeCkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLmxvZygxMCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgbWF4aW11bSBvZiB0aGUgYXJndW1lbnRzLlxyXG4gICAqXHJcbiAgICogYXJndW1lbnRzIHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBtYXgoKSB7XHJcbiAgICByZXR1cm4gbWF4T3JNaW4odGhpcywgYXJndW1lbnRzLCAnbHQnKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBtaW5pbXVtIG9mIHRoZSBhcmd1bWVudHMuXHJcbiAgICpcclxuICAgKiBhcmd1bWVudHMge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIG1pbigpIHtcclxuICAgIHJldHVybiBtYXhPck1pbih0aGlzLCBhcmd1bWVudHMsICdndCcpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgYHhgIG1vZHVsbyBgeWAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmAgc2lnbmlmaWNhbnQgZGlnaXRzXHJcbiAgICogdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqIHkge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIG1vZCh4LCB5KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkubW9kKHkpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgYHhgIG11bHRpcGxpZWQgYnkgYHlgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gIHNpZ25pZmljYW50XHJcbiAgICogZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKiB5IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBtdWwoeCwgeSkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLm11bCh5KTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIGB4YCByYWlzZWQgdG8gdGhlIHBvd2VyIGB5YCwgcm91bmRlZCB0byBwcmVjaXNpb25cclxuICAgKiBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfSBUaGUgYmFzZS5cclxuICAgKiB5IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IFRoZSBleHBvbmVudC5cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIHBvdyh4LCB5KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkucG93KHkpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJucyBhIG5ldyBEZWNpbWFsIHdpdGggYSByYW5kb20gdmFsdWUgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIDAgYW5kIGxlc3MgdGhhbiAxLCBhbmQgd2l0aFxyXG4gICAqIGBzZGAsIG9yIGBEZWNpbWFsLnByZWNpc2lvbmAgaWYgYHNkYCBpcyBvbWl0dGVkLCBzaWduaWZpY2FudCBkaWdpdHMgKG9yIGxlc3MgaWYgdHJhaWxpbmcgemVyb3NcclxuICAgKiBhcmUgcHJvZHVjZWQpLlxyXG4gICAqXHJcbiAgICogW3NkXSB7bnVtYmVyfSBTaWduaWZpY2FudCBkaWdpdHMuIEludGVnZXIsIDAgdG8gTUFYX0RJR0lUUyBpbmNsdXNpdmUuXHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiByYW5kb20oc2QpIHtcclxuICAgIHZhciBkLCBlLCBrLCBuLFxyXG4gICAgICBpID0gMCxcclxuICAgICAgciA9IG5ldyB0aGlzKDEpLFxyXG4gICAgICByZCA9IFtdO1xyXG5cclxuICAgIGlmIChzZCA9PT0gdm9pZCAwKSBzZCA9IHRoaXMucHJlY2lzaW9uO1xyXG4gICAgZWxzZSBjaGVja0ludDMyKHNkLCAxLCBNQVhfRElHSVRTKTtcclxuXHJcbiAgICBrID0gTWF0aC5jZWlsKHNkIC8gTE9HX0JBU0UpO1xyXG5cclxuICAgIGlmICghdGhpcy5jcnlwdG8pIHtcclxuICAgICAgZm9yICg7IGkgPCBrOykgcmRbaSsrXSA9IE1hdGgucmFuZG9tKCkgKiAxZTcgfCAwO1xyXG5cclxuICAgIC8vIEJyb3dzZXJzIHN1cHBvcnRpbmcgY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5cclxuICAgIH0gZWxzZSBpZiAoY3J5cHRvLmdldFJhbmRvbVZhbHVlcykge1xyXG4gICAgICBkID0gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDMyQXJyYXkoaykpO1xyXG5cclxuICAgICAgZm9yICg7IGkgPCBrOykge1xyXG4gICAgICAgIG4gPSBkW2ldO1xyXG5cclxuICAgICAgICAvLyAwIDw9IG4gPCA0Mjk0OTY3Mjk2XHJcbiAgICAgICAgLy8gUHJvYmFiaWxpdHkgbiA+PSA0LjI5ZTksIGlzIDQ5NjcyOTYgLyA0Mjk0OTY3Mjk2ID0gMC4wMDExNiAoMSBpbiA4NjUpLlxyXG4gICAgICAgIGlmIChuID49IDQuMjllOSkge1xyXG4gICAgICAgICAgZFtpXSA9IGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KDEpKVswXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgIC8vIDAgPD0gbiA8PSA0Mjg5OTk5OTk5XHJcbiAgICAgICAgICAvLyAwIDw9IChuICUgMWU3KSA8PSA5OTk5OTk5XHJcbiAgICAgICAgICByZFtpKytdID0gbiAlIDFlNztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAvLyBOb2RlLmpzIHN1cHBvcnRpbmcgY3J5cHRvLnJhbmRvbUJ5dGVzLlxyXG4gICAgfSBlbHNlIGlmIChjcnlwdG8ucmFuZG9tQnl0ZXMpIHtcclxuXHJcbiAgICAgIC8vIGJ1ZmZlclxyXG4gICAgICBkID0gY3J5cHRvLnJhbmRvbUJ5dGVzKGsgKj0gNCk7XHJcblxyXG4gICAgICBmb3IgKDsgaSA8IGs7KSB7XHJcblxyXG4gICAgICAgIC8vIDAgPD0gbiA8IDIxNDc0ODM2NDhcclxuICAgICAgICBuID0gZFtpXSArIChkW2kgKyAxXSA8PCA4KSArIChkW2kgKyAyXSA8PCAxNikgKyAoKGRbaSArIDNdICYgMHg3ZikgPDwgMjQpO1xyXG5cclxuICAgICAgICAvLyBQcm9iYWJpbGl0eSBuID49IDIuMTRlOSwgaXMgNzQ4MzY0OCAvIDIxNDc0ODM2NDggPSAwLjAwMzUgKDEgaW4gMjg2KS5cclxuICAgICAgICBpZiAobiA+PSAyLjE0ZTkpIHtcclxuICAgICAgICAgIGNyeXB0by5yYW5kb21CeXRlcyg0KS5jb3B5KGQsIGkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgLy8gMCA8PSBuIDw9IDIxMzk5OTk5OTlcclxuICAgICAgICAgIC8vIDAgPD0gKG4gJSAxZTcpIDw9IDk5OTk5OTlcclxuICAgICAgICAgIHJkLnB1c2gobiAlIDFlNyk7XHJcbiAgICAgICAgICBpICs9IDQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpID0gayAvIDQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBFcnJvcihjcnlwdG9VbmF2YWlsYWJsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgayA9IHJkWy0taV07XHJcbiAgICBzZCAlPSBMT0dfQkFTRTtcclxuXHJcbiAgICAvLyBDb252ZXJ0IHRyYWlsaW5nIGRpZ2l0cyB0byB6ZXJvcyBhY2NvcmRpbmcgdG8gc2QuXHJcbiAgICBpZiAoayAmJiBzZCkge1xyXG4gICAgICBuID0gbWF0aHBvdygxMCwgTE9HX0JBU0UgLSBzZCk7XHJcbiAgICAgIHJkW2ldID0gKGsgLyBuIHwgMCkgKiBuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFJlbW92ZSB0cmFpbGluZyB3b3JkcyB3aGljaCBhcmUgemVyby5cclxuICAgIGZvciAoOyByZFtpXSA9PT0gMDsgaS0tKSByZC5wb3AoKTtcclxuXHJcbiAgICAvLyBaZXJvP1xyXG4gICAgaWYgKGkgPCAwKSB7XHJcbiAgICAgIGUgPSAwO1xyXG4gICAgICByZCA9IFswXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGUgPSAtMTtcclxuXHJcbiAgICAgIC8vIFJlbW92ZSBsZWFkaW5nIHdvcmRzIHdoaWNoIGFyZSB6ZXJvIGFuZCBhZGp1c3QgZXhwb25lbnQgYWNjb3JkaW5nbHkuXHJcbiAgICAgIGZvciAoOyByZFswXSA9PT0gMDsgZSAtPSBMT0dfQkFTRSkgcmQuc2hpZnQoKTtcclxuXHJcbiAgICAgIC8vIENvdW50IHRoZSBkaWdpdHMgb2YgdGhlIGZpcnN0IHdvcmQgb2YgcmQgdG8gZGV0ZXJtaW5lIGxlYWRpbmcgemVyb3MuXHJcbiAgICAgIGZvciAoayA9IDEsIG4gPSByZFswXTsgbiA+PSAxMDsgbiAvPSAxMCkgaysrO1xyXG5cclxuICAgICAgLy8gQWRqdXN0IHRoZSBleHBvbmVudCBmb3IgbGVhZGluZyB6ZXJvcyBvZiB0aGUgZmlyc3Qgd29yZCBvZiByZC5cclxuICAgICAgaWYgKGsgPCBMT0dfQkFTRSkgZSAtPSBMT0dfQkFTRSAtIGs7XHJcbiAgICB9XHJcblxyXG4gICAgci5lID0gZTtcclxuICAgIHIuZCA9IHJkO1xyXG5cclxuICAgIHJldHVybiByO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgYHhgIHJvdW5kZWQgdG8gYW4gaW50ZWdlciB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiBUbyBlbXVsYXRlIGBNYXRoLnJvdW5kYCwgc2V0IHJvdW5kaW5nIHRvIDcgKFJPVU5EX0hBTEZfQ0VJTCkuXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiByb3VuZCh4KSB7XHJcbiAgICByZXR1cm4gZmluYWxpc2UoeCA9IG5ldyB0aGlzKHgpLCB4LmUgKyAxLCB0aGlzLnJvdW5kaW5nKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVyblxyXG4gICAqICAgMSAgICBpZiB4ID4gMCxcclxuICAgKiAgLTEgICAgaWYgeCA8IDAsXHJcbiAgICogICAwICAgIGlmIHggaXMgMCxcclxuICAgKiAgLTAgICAgaWYgeCBpcyAtMCxcclxuICAgKiAgIE5hTiAgb3RoZXJ3aXNlXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBzaWduKHgpIHtcclxuICAgIHggPSBuZXcgdGhpcyh4KTtcclxuICAgIHJldHVybiB4LmQgPyAoeC5kWzBdID8geC5zIDogMCAqIHgucykgOiB4LnMgfHwgTmFOO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIHNpbmUgb2YgYHhgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gIHNpZ25pZmljYW50IGRpZ2l0c1xyXG4gICAqIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH0gQSB2YWx1ZSBpbiByYWRpYW5zLlxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gc2luKHgpIHtcclxuICAgIHJldHVybiBuZXcgdGhpcyh4KS5zaW4oKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBoeXBlcmJvbGljIHNpbmUgb2YgYHhgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gXHJcbiAgICogc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH0gQSB2YWx1ZSBpbiByYWRpYW5zLlxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gc2luaCh4KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkuc2luaCgpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIHNxdWFyZSByb290IG9mIGB4YCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYCBzaWduaWZpY2FudFxyXG4gICAqIGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBzcXJ0KHgpIHtcclxuICAgIHJldHVybiBuZXcgdGhpcyh4KS5zcXJ0KCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyBgeGAgbWludXMgYHlgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gIHNpZ25pZmljYW50IGRpZ2l0c1xyXG4gICAqIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKiB5IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBzdWIoeCwgeSkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLnN1Yih5KTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSB0YW5nZW50IG9mIGB4YCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYCBzaWduaWZpY2FudFxyXG4gICAqIGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IEEgdmFsdWUgaW4gcmFkaWFucy5cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIHRhbih4KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkudGFuKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgaHlwZXJib2xpYyB0YW5nZW50IG9mIGB4YCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYFxyXG4gICAqIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IEEgdmFsdWUgaW4gcmFkaWFucy5cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIHRhbmgoeCkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLnRhbmgoKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIGB4YCB0cnVuY2F0ZWQgdG8gYW4gaW50ZWdlci5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIHRydW5jKHgpIHtcclxuICAgIHJldHVybiBmaW5hbGlzZSh4ID0gbmV3IHRoaXMoeCksIHguZSArIDEsIDEpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIENyZWF0ZSBhbmQgY29uZmlndXJlIGluaXRpYWwgRGVjaW1hbCBjb25zdHJ1Y3Rvci5cclxuICBEZWNpbWFsID0gY2xvbmUoREVGQVVMVFMpO1xyXG5cclxuICBEZWNpbWFsWydkZWZhdWx0J10gPSBEZWNpbWFsLkRlY2ltYWwgPSBEZWNpbWFsO1xyXG5cclxuICAvLyBDcmVhdGUgdGhlIGludGVybmFsIGNvbnN0YW50cyBmcm9tIHRoZWlyIHN0cmluZyB2YWx1ZXMuXHJcbiAgTE4xMCA9IG5ldyBEZWNpbWFsKExOMTApO1xyXG4gIFBJID0gbmV3IERlY2ltYWwoUEkpO1xyXG5cclxuXHJcbiAgLy8gRXhwb3J0LlxyXG5cclxuXHJcbiAgLy8gQU1ELlxyXG4gIGlmICh0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xyXG4gICAgZGVmaW5lKGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuIERlY2ltYWw7XHJcbiAgICB9KTtcclxuXHJcbiAgLy8gTm9kZSBhbmQgb3RoZXIgZW52aXJvbm1lbnRzIHRoYXQgc3VwcG9ydCBtb2R1bGUuZXhwb3J0cy5cclxuICB9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgIT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcclxuICAgIGlmICh0eXBlb2YgU3ltYm9sID09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJykge1xyXG4gICAgICBQW1N5bWJvbC5mb3IoJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJyldID0gUC50b1N0cmluZztcclxuICAgICAgUFtTeW1ib2wudG9TdHJpbmdUYWddID0gJ0RlY2ltYWwnO1xyXG4gICAgfVxyXG5cclxuICAgIG1vZHVsZS5leHBvcnRzID0gRGVjaW1hbDtcclxuXHJcbiAgLy8gQnJvd3Nlci5cclxuICB9IGVsc2Uge1xyXG4gICAgaWYgKCFnbG9iYWxTY29wZSkge1xyXG4gICAgICBnbG9iYWxTY29wZSA9IHR5cGVvZiBzZWxmICE9ICd1bmRlZmluZWQnICYmIHNlbGYgJiYgc2VsZi5zZWxmID09IHNlbGYgPyBzZWxmIDogd2luZG93O1xyXG4gICAgfVxyXG5cclxuICAgIG5vQ29uZmxpY3QgPSBnbG9iYWxTY29wZS5EZWNpbWFsO1xyXG4gICAgRGVjaW1hbC5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICBnbG9iYWxTY29wZS5EZWNpbWFsID0gbm9Db25mbGljdDtcclxuICAgICAgcmV0dXJuIERlY2ltYWw7XHJcbiAgICB9O1xyXG5cclxuICAgIGdsb2JhbFNjb3BlLkRlY2ltYWwgPSBEZWNpbWFsO1xyXG4gIH1cclxufSkodGhpcyk7XHJcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vLyBNYXAgdGhlIGNoYXJhY3RlcnMgdG8gZXNjYXBlIHRvIHRoZWlyIGVzY2FwZWQgdmFsdWVzLiBUaGUgbGlzdCBpcyBkZXJpdmVkXG4vLyBmcm9tIGh0dHA6Ly93d3cuY2VzcGVkZXMub3JnL2Jsb2cvODUvaG93LXRvLWVzY2FwZS1sYXRleC1zcGVjaWFsLWNoYXJhY3RlcnNcblxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxudmFyIGRlZmF1bHRFc2NhcGVzID0ge1xuICBcIntcIjogXCJcXFxce1wiLFxuICBcIn1cIjogXCJcXFxcfVwiLFxuICBcIlxcXFxcIjogXCJcXFxcdGV4dGJhY2tzbGFzaHt9XCIsXG4gIFwiI1wiOiBcIlxcXFwjXCIsXG4gICQ6IFwiXFxcXCRcIixcbiAgXCIlXCI6IFwiXFxcXCVcIixcbiAgXCImXCI6IFwiXFxcXCZcIixcbiAgXCJeXCI6IFwiXFxcXHRleHRhc2NpaWNpcmN1bXt9XCIsXG4gIF86IFwiXFxcXF9cIixcbiAgXCJ+XCI6IFwiXFxcXHRleHRhc2NpaXRpbGRle31cIlxufTtcbnZhciBmb3JtYXRFc2NhcGVzID0ge1xuICBcIlxcdTIwMTNcIjogXCJcXFxcLS1cIixcbiAgXCJcXHUyMDE0XCI6IFwiXFxcXC0tLVwiLFxuICBcIiBcIjogXCJ+XCIsXG4gIFwiXFx0XCI6IFwiXFxcXHFxdWFke31cIixcbiAgXCJcXHJcXG5cIjogXCJcXFxcbmV3bGluZXt9XCIsXG4gIFwiXFxuXCI6IFwiXFxcXG5ld2xpbmV7fVwiXG59O1xuXG52YXIgZGVmYXVsdEVzY2FwZU1hcEZuID0gZnVuY3Rpb24gZGVmYXVsdEVzY2FwZU1hcEZuKGRlZmF1bHRFc2NhcGVzLCBmb3JtYXRFc2NhcGVzKSB7XG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgZGVmYXVsdEVzY2FwZXMsIGZvcm1hdEVzY2FwZXMpO1xufTtcblxuLyoqXG4gKiBFc2NhcGUgYSBzdHJpbmcgdG8gYmUgdXNlZCBpbiBMYVRlWCBkb2N1bWVudHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIHRoZSBzdHJpbmcgdG8gYmUgZXNjYXBlZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gcGFyYW1zLnByZXNlcnZlRm9ybWF0dGluZyB3aGV0aGVyIGZvcm1hdHRpbmcgZXNjYXBlcyBzaG91bGRcbiAqICBiZSBwZXJmb3JtZWQgKGRlZmF1bHQ6IGZhbHNlKS5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHBhcmFtcy5lc2NhcGVNYXBGbiB0aGUgZnVuY3Rpb24gdG8gbW9kaWZ5IHRoZSBlc2NhcGUgbWFwcy5cbiAqIEByZXR1cm4ge3N0cmluZ30gdGhlIGVzY2FwZWQgc3RyaW5nLCByZWFkeSB0byBiZSB1c2VkIGluIExhVGVYLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgdmFyIF9yZWYgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgICAgX3JlZiRwcmVzZXJ2ZUZvcm1hdHRpID0gX3JlZi5wcmVzZXJ2ZUZvcm1hdHRpbmcsXG4gICAgICBwcmVzZXJ2ZUZvcm1hdHRpbmcgPSBfcmVmJHByZXNlcnZlRm9ybWF0dGkgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogX3JlZiRwcmVzZXJ2ZUZvcm1hdHRpLFxuICAgICAgX3JlZiRlc2NhcGVNYXBGbiA9IF9yZWYuZXNjYXBlTWFwRm4sXG4gICAgICBlc2NhcGVNYXBGbiA9IF9yZWYkZXNjYXBlTWFwRm4gPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRFc2NhcGVNYXBGbiA6IF9yZWYkZXNjYXBlTWFwRm47XG5cbiAgdmFyIHJ1bm5pbmdTdHIgPSBTdHJpbmcoc3RyKTtcbiAgdmFyIHJlc3VsdCA9IFwiXCI7XG5cbiAgdmFyIGVzY2FwZXMgPSBlc2NhcGVNYXBGbihfZXh0ZW5kcyh7fSwgZGVmYXVsdEVzY2FwZXMpLCBwcmVzZXJ2ZUZvcm1hdHRpbmcgPyBfZXh0ZW5kcyh7fSwgZm9ybWF0RXNjYXBlcykgOiB7fSk7XG4gIHZhciBlc2NhcGVLZXlzID0gT2JqZWN0LmtleXMoZXNjYXBlcyk7IC8vIGFzIGl0IGlzIHJldXNlZCBsYXRlciBvblxuXG4gIC8vIEFsZ29yaXRobTogR28gdGhyb3VnaCB0aGUgc3RyaW5nIGNoYXJhY3RlciBieSBjaGFyYWN0ZXIsIGlmIGl0IG1hdGNoZXNcbiAgLy8gd2l0aCBvbmUgb2YgdGhlIHNwZWNpYWwgY2hhcmFjdGVycyB0aGVuIHdlJ2xsIHJlcGxhY2UgaXQgd2l0aCB0aGUgZXNjYXBlZFxuICAvLyB2ZXJzaW9uLlxuXG4gIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKCkge1xuICAgIHZhciBzcGVjaWFsQ2hhckZvdW5kID0gZmFsc2U7XG4gICAgZXNjYXBlS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXksIGluZGV4KSB7XG4gICAgICBpZiAoc3BlY2lhbENoYXJGb3VuZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAocnVubmluZ1N0ci5sZW5ndGggPj0ga2V5Lmxlbmd0aCAmJiBydW5uaW5nU3RyLnNsaWNlKDAsIGtleS5sZW5ndGgpID09PSBrZXkpIHtcbiAgICAgICAgcmVzdWx0ICs9IGVzY2FwZXNbZXNjYXBlS2V5c1tpbmRleF1dO1xuICAgICAgICBydW5uaW5nU3RyID0gcnVubmluZ1N0ci5zbGljZShrZXkubGVuZ3RoLCBydW5uaW5nU3RyLmxlbmd0aCk7XG4gICAgICAgIHNwZWNpYWxDaGFyRm91bmQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghc3BlY2lhbENoYXJGb3VuZCkge1xuICAgICAgcmVzdWx0ICs9IHJ1bm5pbmdTdHIuc2xpY2UoMCwgMSk7XG4gICAgICBydW5uaW5nU3RyID0gcnVubmluZ1N0ci5zbGljZSgxLCBydW5uaW5nU3RyLmxlbmd0aCk7XG4gICAgfVxuICB9O1xuXG4gIHdoaWxlIChydW5uaW5nU3RyKSB7XG4gICAgX2xvb3AoKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTsiLCIvKipcbiAqIEBsaWNlbnNlIEZyYWN0aW9uLmpzIHY0LjAuMTIgMDkvMDkvMjAxNVxuICogaHR0cDovL3d3dy54YXJnLm9yZy8yMDE0LzAzL3JhdGlvbmFsLW51bWJlcnMtaW4tamF2YXNjcmlwdC9cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUsIFJvYmVydCBFaXNlbGUgKHJvYmVydEB4YXJnLm9yZylcbiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBvciBHUEwgVmVyc2lvbiAyIGxpY2Vuc2VzLlxuICoqL1xuXG5cbi8qKlxuICpcbiAqIFRoaXMgY2xhc3Mgb2ZmZXJzIHRoZSBwb3NzaWJpbGl0eSB0byBjYWxjdWxhdGUgZnJhY3Rpb25zLlxuICogWW91IGNhbiBwYXNzIGEgZnJhY3Rpb24gaW4gZGlmZmVyZW50IGZvcm1hdHMuIEVpdGhlciBhcyBhcnJheSwgYXMgZG91YmxlLCBhcyBzdHJpbmcgb3IgYXMgYW4gaW50ZWdlci5cbiAqXG4gKiBBcnJheS9PYmplY3QgZm9ybVxuICogWyAwID0+IDxub21pbmF0b3I+LCAxID0+IDxkZW5vbWluYXRvcj4gXVxuICogWyBuID0+IDxub21pbmF0b3I+LCBkID0+IDxkZW5vbWluYXRvcj4gXVxuICpcbiAqIEludGVnZXIgZm9ybVxuICogLSBTaW5nbGUgaW50ZWdlciB2YWx1ZVxuICpcbiAqIERvdWJsZSBmb3JtXG4gKiAtIFNpbmdsZSBkb3VibGUgdmFsdWVcbiAqXG4gKiBTdHJpbmcgZm9ybVxuICogMTIzLjQ1NiAtIGEgc2ltcGxlIGRvdWJsZVxuICogMTIzLzQ1NiAtIGEgc3RyaW5nIGZyYWN0aW9uXG4gKiAxMjMuJzQ1NicgLSBhIGRvdWJsZSB3aXRoIHJlcGVhdGluZyBkZWNpbWFsIHBsYWNlc1xuICogMTIzLig0NTYpIC0gc3lub255bVxuICogMTIzLjQ1JzYnIC0gYSBkb3VibGUgd2l0aCByZXBlYXRpbmcgbGFzdCBwbGFjZVxuICogMTIzLjQ1KDYpIC0gc3lub255bVxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogdmFyIGYgPSBuZXcgRnJhY3Rpb24oXCI5LjQnMzEnXCIpO1xuICogZi5tdWwoWy00LCAzXSkuZGl2KDQuOSk7XG4gKlxuICovXG5cbihmdW5jdGlvbihyb290KSB7XG5cbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgLy8gTWF4aW11bSBzZWFyY2ggZGVwdGggZm9yIGN5Y2xpYyByYXRpb25hbCBudW1iZXJzLiAyMDAwIHNob3VsZCBiZSBtb3JlIHRoYW4gZW5vdWdoLlxuICAvLyBFeGFtcGxlOiAxLzcgPSAwLigxNDI4NTcpIGhhcyA2IHJlcGVhdGluZyBkZWNpbWFsIHBsYWNlcy5cbiAgLy8gSWYgTUFYX0NZQ0xFX0xFTiBnZXRzIHJlZHVjZWQsIGxvbmcgY3ljbGVzIHdpbGwgbm90IGJlIGRldGVjdGVkIGFuZCB0b1N0cmluZygpIG9ubHkgZ2V0cyB0aGUgZmlyc3QgMTAgZGlnaXRzXG4gIHZhciBNQVhfQ1lDTEVfTEVOID0gMjAwMDtcblxuICAvLyBQYXJzZWQgZGF0YSB0byBhdm9pZCBjYWxsaW5nIFwibmV3XCIgYWxsIHRoZSB0aW1lXG4gIHZhciBQID0ge1xuICAgIFwic1wiOiAxLFxuICAgIFwiblwiOiAwLFxuICAgIFwiZFwiOiAxXG4gIH07XG5cbiAgZnVuY3Rpb24gY3JlYXRlRXJyb3IobmFtZSkge1xuXG4gICAgZnVuY3Rpb24gZXJyb3JDb25zdHJ1Y3RvcigpIHtcbiAgICAgIHZhciB0ZW1wID0gRXJyb3IuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIHRlbXBbJ25hbWUnXSA9IHRoaXNbJ25hbWUnXSA9IG5hbWU7XG4gICAgICB0aGlzWydzdGFjayddID0gdGVtcFsnc3RhY2snXTtcbiAgICAgIHRoaXNbJ21lc3NhZ2UnXSA9IHRlbXBbJ21lc3NhZ2UnXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFcnJvciBjb25zdHJ1Y3RvclxuICAgICAqXG4gICAgICogQGNvbnN0cnVjdG9yXG4gICAgICovXG4gICAgZnVuY3Rpb24gSW50ZXJtZWRpYXRlSW5oZXJpdG9yKCkge31cbiAgICBJbnRlcm1lZGlhdGVJbmhlcml0b3IucHJvdG90eXBlID0gRXJyb3IucHJvdG90eXBlO1xuICAgIGVycm9yQ29uc3RydWN0b3IucHJvdG90eXBlID0gbmV3IEludGVybWVkaWF0ZUluaGVyaXRvcigpO1xuXG4gICAgcmV0dXJuIGVycm9yQ29uc3RydWN0b3I7XG4gIH1cblxuICB2YXIgRGl2aXNpb25CeVplcm8gPSBGcmFjdGlvblsnRGl2aXNpb25CeVplcm8nXSA9IGNyZWF0ZUVycm9yKCdEaXZpc2lvbkJ5WmVybycpO1xuICB2YXIgSW52YWxpZFBhcmFtZXRlciA9IEZyYWN0aW9uWydJbnZhbGlkUGFyYW1ldGVyJ10gPSBjcmVhdGVFcnJvcignSW52YWxpZFBhcmFtZXRlcicpO1xuXG4gIGZ1bmN0aW9uIGFzc2lnbihuLCBzKSB7XG5cbiAgICBpZiAoaXNOYU4obiA9IHBhcnNlSW50KG4sIDEwKSkpIHtcbiAgICAgIHRocm93SW52YWxpZFBhcmFtKCk7XG4gICAgfVxuICAgIHJldHVybiBuICogcztcbiAgfVxuXG4gIGZ1bmN0aW9uIHRocm93SW52YWxpZFBhcmFtKCkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkUGFyYW1ldGVyKCk7XG4gIH1cblxuICB2YXIgcGFyc2UgPSBmdW5jdGlvbihwMSwgcDIpIHtcblxuICAgIHZhciBuID0gMCwgZCA9IDEsIHMgPSAxO1xuICAgIHZhciB2ID0gMCwgdyA9IDAsIHggPSAwLCB5ID0gMSwgeiA9IDE7XG5cbiAgICB2YXIgQSA9IDAsIEIgPSAxO1xuICAgIHZhciBDID0gMSwgRCA9IDE7XG5cbiAgICB2YXIgTiA9IDEwMDAwMDAwO1xuICAgIHZhciBNO1xuXG4gICAgaWYgKHAxID09PSB1bmRlZmluZWQgfHwgcDEgPT09IG51bGwpIHtcbiAgICAgIC8qIHZvaWQgKi9cbiAgICB9IGVsc2UgaWYgKHAyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG4gPSBwMTtcbiAgICAgIGQgPSBwMjtcbiAgICAgIHMgPSBuICogZDtcbiAgICB9IGVsc2VcbiAgICAgIHN3aXRjaCAodHlwZW9mIHAxKSB7XG5cbiAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKFwiZFwiIGluIHAxICYmIFwiblwiIGluIHAxKSB7XG4gICAgICAgICAgICBuID0gcDFbXCJuXCJdO1xuICAgICAgICAgICAgZCA9IHAxW1wiZFwiXTtcbiAgICAgICAgICAgIGlmIChcInNcIiBpbiBwMSlcbiAgICAgICAgICAgICAgbiAqPSBwMVtcInNcIl07XG4gICAgICAgICAgfSBlbHNlIGlmICgwIGluIHAxKSB7XG4gICAgICAgICAgICBuID0gcDFbMF07XG4gICAgICAgICAgICBpZiAoMSBpbiBwMSlcbiAgICAgICAgICAgICAgZCA9IHAxWzFdO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvd0ludmFsaWRQYXJhbSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzID0gbiAqIGQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKHAxIDwgMCkge1xuICAgICAgICAgICAgcyA9IHAxO1xuICAgICAgICAgICAgcDEgPSAtcDE7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHAxICUgMSA9PT0gMCkge1xuICAgICAgICAgICAgbiA9IHAxO1xuICAgICAgICAgIH0gZWxzZSBpZiAocDEgPiAwKSB7IC8vIGNoZWNrIGZvciAhPSAwLCBzY2FsZSB3b3VsZCBiZWNvbWUgTmFOIChsb2coMCkpLCB3aGljaCBjb252ZXJnZXMgcmVhbGx5IHNsb3dcblxuICAgICAgICAgICAgaWYgKHAxID49IDEpIHtcbiAgICAgICAgICAgICAgeiA9IE1hdGgucG93KDEwLCBNYXRoLmZsb29yKDEgKyBNYXRoLmxvZyhwMSkgLyBNYXRoLkxOMTApKTtcbiAgICAgICAgICAgICAgcDEgLz0gejtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gVXNpbmcgRmFyZXkgU2VxdWVuY2VzXG4gICAgICAgICAgICAvLyBodHRwOi8vd3d3LmpvaG5kY29vay5jb20vYmxvZy8yMDEwLzEwLzIwL2Jlc3QtcmF0aW9uYWwtYXBwcm94aW1hdGlvbi9cblxuICAgICAgICAgICAgd2hpbGUgKEIgPD0gTiAmJiBEIDw9IE4pIHtcbiAgICAgICAgICAgICAgTSA9IChBICsgQykgLyAoQiArIEQpO1xuXG4gICAgICAgICAgICAgIGlmIChwMSA9PT0gTSkge1xuICAgICAgICAgICAgICAgIGlmIChCICsgRCA8PSBOKSB7XG4gICAgICAgICAgICAgICAgICBuID0gQSArIEM7XG4gICAgICAgICAgICAgICAgICBkID0gQiArIEQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChEID4gQikge1xuICAgICAgICAgICAgICAgICAgbiA9IEM7XG4gICAgICAgICAgICAgICAgICBkID0gRDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgbiA9IEE7XG4gICAgICAgICAgICAgICAgICBkID0gQjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICAgIGlmIChwMSA+IE0pIHtcbiAgICAgICAgICAgICAgICAgIEEgKz0gQztcbiAgICAgICAgICAgICAgICAgIEIgKz0gRDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgQyArPSBBO1xuICAgICAgICAgICAgICAgICAgRCArPSBCO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChCID4gTikge1xuICAgICAgICAgICAgICAgICAgbiA9IEM7XG4gICAgICAgICAgICAgICAgICBkID0gRDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgbiA9IEE7XG4gICAgICAgICAgICAgICAgICBkID0gQjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG4gKj0gejtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzTmFOKHAxKSB8fCBpc05hTihwMikpIHtcbiAgICAgICAgICAgIGQgPSBuID0gTmFOO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgIHtcbiAgICAgICAgICBCID0gcDEubWF0Y2goL1xcZCt8Li9nKTtcblxuICAgICAgICAgIGlmIChCID09PSBudWxsKVxuICAgICAgICAgICAgdGhyb3dJbnZhbGlkUGFyYW0oKTtcblxuICAgICAgICAgIGlmIChCW0FdID09PSAnLScpIHsvLyBDaGVjayBmb3IgbWludXMgc2lnbiBhdCB0aGUgYmVnaW5uaW5nXG4gICAgICAgICAgICBzID0gLTE7XG4gICAgICAgICAgICBBKys7XG4gICAgICAgICAgfSBlbHNlIGlmIChCW0FdID09PSAnKycpIHsvLyBDaGVjayBmb3IgcGx1cyBzaWduIGF0IHRoZSBiZWdpbm5pbmdcbiAgICAgICAgICAgIEErKztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoQi5sZW5ndGggPT09IEEgKyAxKSB7IC8vIENoZWNrIGlmIGl0J3MganVzdCBhIHNpbXBsZSBudW1iZXIgXCIxMjM0XCJcbiAgICAgICAgICAgIHcgPSBhc3NpZ24oQltBKytdLCBzKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKEJbQSArIDFdID09PSAnLicgfHwgQltBXSA9PT0gJy4nKSB7IC8vIENoZWNrIGlmIGl0J3MgYSBkZWNpbWFsIG51bWJlclxuXG4gICAgICAgICAgICBpZiAoQltBXSAhPT0gJy4nKSB7IC8vIEhhbmRsZSAwLjUgYW5kIC41XG4gICAgICAgICAgICAgIHYgPSBhc3NpZ24oQltBKytdLCBzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEErKztcblxuICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGRlY2ltYWwgcGxhY2VzXG4gICAgICAgICAgICBpZiAoQSArIDEgPT09IEIubGVuZ3RoIHx8IEJbQSArIDFdID09PSAnKCcgJiYgQltBICsgM10gPT09ICcpJyB8fCBCW0EgKyAxXSA9PT0gXCInXCIgJiYgQltBICsgM10gPT09IFwiJ1wiKSB7XG4gICAgICAgICAgICAgIHcgPSBhc3NpZ24oQltBXSwgcyk7XG4gICAgICAgICAgICAgIHkgPSBNYXRoLnBvdygxMCwgQltBXS5sZW5ndGgpO1xuICAgICAgICAgICAgICBBKys7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIENoZWNrIGZvciByZXBlYXRpbmcgcGxhY2VzXG4gICAgICAgICAgICBpZiAoQltBXSA9PT0gJygnICYmIEJbQSArIDJdID09PSAnKScgfHwgQltBXSA9PT0gXCInXCIgJiYgQltBICsgMl0gPT09IFwiJ1wiKSB7XG4gICAgICAgICAgICAgIHggPSBhc3NpZ24oQltBICsgMV0sIHMpO1xuICAgICAgICAgICAgICB6ID0gTWF0aC5wb3coMTAsIEJbQSArIDFdLmxlbmd0aCkgLSAxO1xuICAgICAgICAgICAgICBBICs9IDM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKEJbQSArIDFdID09PSAnLycgfHwgQltBICsgMV0gPT09ICc6JykgeyAvLyBDaGVjayBmb3IgYSBzaW1wbGUgZnJhY3Rpb24gXCIxMjMvNDU2XCIgb3IgXCIxMjM6NDU2XCJcbiAgICAgICAgICAgIHcgPSBhc3NpZ24oQltBXSwgcyk7XG4gICAgICAgICAgICB5ID0gYXNzaWduKEJbQSArIDJdLCAxKTtcbiAgICAgICAgICAgIEEgKz0gMztcbiAgICAgICAgICB9IGVsc2UgaWYgKEJbQSArIDNdID09PSAnLycgJiYgQltBICsgMV0gPT09ICcgJykgeyAvLyBDaGVjayBmb3IgYSBjb21wbGV4IGZyYWN0aW9uIFwiMTIzIDEvMlwiXG4gICAgICAgICAgICB2ID0gYXNzaWduKEJbQV0sIHMpO1xuICAgICAgICAgICAgdyA9IGFzc2lnbihCW0EgKyAyXSwgcyk7XG4gICAgICAgICAgICB5ID0gYXNzaWduKEJbQSArIDRdLCAxKTtcbiAgICAgICAgICAgIEEgKz0gNTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoQi5sZW5ndGggPD0gQSkgeyAvLyBDaGVjayBmb3IgbW9yZSB0b2tlbnMgb24gdGhlIHN0YWNrXG4gICAgICAgICAgICBkID0geSAqIHo7XG4gICAgICAgICAgICBzID0gLyogdm9pZCAqL1xuICAgICAgICAgICAgICAgICAgICBuID0geCArIGQgKiB2ICsgeiAqIHc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvKiBGYWxsIHRocm91Z2ggb24gZXJyb3IgKi9cbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93SW52YWxpZFBhcmFtKCk7XG4gICAgICB9XG5cbiAgICBpZiAoZCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IERpdmlzaW9uQnlaZXJvKCk7XG4gICAgfVxuXG4gICAgUFtcInNcIl0gPSBzIDwgMCA/IC0xIDogMTtcbiAgICBQW1wiblwiXSA9IE1hdGguYWJzKG4pO1xuICAgIFBbXCJkXCJdID0gTWF0aC5hYnMoZCk7XG4gIH07XG5cbiAgZnVuY3Rpb24gbW9kcG93KGIsIGUsIG0pIHtcblxuICAgIHZhciByID0gMTtcbiAgICBmb3IgKDsgZSA+IDA7IGIgPSAoYiAqIGIpICUgbSwgZSA+Pj0gMSkge1xuXG4gICAgICBpZiAoZSAmIDEpIHtcbiAgICAgICAgciA9IChyICogYikgJSBtO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcjtcbiAgfVxuXG5cbiAgZnVuY3Rpb24gY3ljbGVMZW4obiwgZCkge1xuXG4gICAgZm9yICg7IGQgJSAyID09PSAwO1xuICAgICAgICAgICAgZCAvPSAyKSB7XG4gICAgfVxuXG4gICAgZm9yICg7IGQgJSA1ID09PSAwO1xuICAgICAgICAgICAgZCAvPSA1KSB7XG4gICAgfVxuXG4gICAgaWYgKGQgPT09IDEpIC8vIENhdGNoIG5vbi1jeWNsaWMgbnVtYmVyc1xuICAgICAgcmV0dXJuIDA7XG5cbiAgICAvLyBJZiB3ZSB3b3VsZCBsaWtlIHRvIGNvbXB1dGUgcmVhbGx5IGxhcmdlIG51bWJlcnMgcXVpY2tlciwgd2UgY291bGQgbWFrZSB1c2Ugb2YgRmVybWF0J3MgbGl0dGxlIHRoZW9yZW06XG4gICAgLy8gMTBeKGQtMSkgJSBkID09IDFcbiAgICAvLyBIb3dldmVyLCB3ZSBkb24ndCBuZWVkIHN1Y2ggbGFyZ2UgbnVtYmVycyBhbmQgTUFYX0NZQ0xFX0xFTiBzaG91bGQgYmUgdGhlIGNhcHN0b25lLFxuICAgIC8vIGFzIHdlIHdhbnQgdG8gdHJhbnNsYXRlIHRoZSBudW1iZXJzIHRvIHN0cmluZ3MuXG5cbiAgICB2YXIgcmVtID0gMTAgJSBkO1xuICAgIHZhciB0ID0gMTtcblxuICAgIGZvciAoOyByZW0gIT09IDE7IHQrKykge1xuICAgICAgcmVtID0gcmVtICogMTAgJSBkO1xuXG4gICAgICBpZiAodCA+IE1BWF9DWUNMRV9MRU4pXG4gICAgICAgIHJldHVybiAwOyAvLyBSZXR1cm5pbmcgMCBoZXJlIG1lYW5zIHRoYXQgd2UgZG9uJ3QgcHJpbnQgaXQgYXMgYSBjeWNsaWMgbnVtYmVyLiBJdCdzIGxpa2VseSB0aGF0IHRoZSBhbnN3ZXIgaXMgYGQtMWBcbiAgICB9XG4gICAgcmV0dXJuIHQ7XG4gIH1cblxuXG4gICAgIGZ1bmN0aW9uIGN5Y2xlU3RhcnQobiwgZCwgbGVuKSB7XG5cbiAgICB2YXIgcmVtMSA9IDE7XG4gICAgdmFyIHJlbTIgPSBtb2Rwb3coMTAsIGxlbiwgZCk7XG5cbiAgICBmb3IgKHZhciB0ID0gMDsgdCA8IDMwMDsgdCsrKSB7IC8vIHMgPCB+bG9nMTAoTnVtYmVyLk1BWF9WQUxVRSlcbiAgICAgIC8vIFNvbHZlIDEwXnMgPT0gMTBeKHMrdCkgKG1vZCBkKVxuXG4gICAgICBpZiAocmVtMSA9PT0gcmVtMilcbiAgICAgICAgcmV0dXJuIHQ7XG5cbiAgICAgIHJlbTEgPSByZW0xICogMTAgJSBkO1xuICAgICAgcmVtMiA9IHJlbTIgKiAxMCAlIGQ7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2NkKGEsIGIpIHtcblxuICAgIGlmICghYSlcbiAgICAgIHJldHVybiBiO1xuICAgIGlmICghYilcbiAgICAgIHJldHVybiBhO1xuXG4gICAgd2hpbGUgKDEpIHtcbiAgICAgIGEgJT0gYjtcbiAgICAgIGlmICghYSlcbiAgICAgICAgcmV0dXJuIGI7XG4gICAgICBiICU9IGE7XG4gICAgICBpZiAoIWIpXG4gICAgICAgIHJldHVybiBhO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogTW9kdWxlIGNvbnN0cnVjdG9yXG4gICAqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge251bWJlcnxGcmFjdGlvbj19IGFcbiAgICogQHBhcmFtIHtudW1iZXI9fSBiXG4gICAqL1xuICBmdW5jdGlvbiBGcmFjdGlvbihhLCBiKSB7XG5cbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRnJhY3Rpb24pKSB7XG4gICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKGEsIGIpO1xuICAgIH1cblxuICAgIHBhcnNlKGEsIGIpO1xuXG4gICAgaWYgKEZyYWN0aW9uWydSRURVQ0UnXSkge1xuICAgICAgYSA9IGdjZChQW1wiZFwiXSwgUFtcIm5cIl0pOyAvLyBBYnVzZSBhXG4gICAgfSBlbHNlIHtcbiAgICAgIGEgPSAxO1xuICAgIH1cblxuICAgIHRoaXNbXCJzXCJdID0gUFtcInNcIl07XG4gICAgdGhpc1tcIm5cIl0gPSBQW1wiblwiXSAvIGE7XG4gICAgdGhpc1tcImRcIl0gPSBQW1wiZFwiXSAvIGE7XG4gIH1cblxuICAvKipcbiAgICogQm9vbGVhbiBnbG9iYWwgdmFyaWFibGUgdG8gYmUgYWJsZSB0byBkaXNhYmxlIGF1dG9tYXRpYyByZWR1Y3Rpb24gb2YgdGhlIGZyYWN0aW9uXG4gICAqXG4gICAqL1xuICBGcmFjdGlvblsnUkVEVUNFJ10gPSAxO1xuXG4gIEZyYWN0aW9uLnByb3RvdHlwZSA9IHtcblxuICAgIFwic1wiOiAxLFxuICAgIFwiblwiOiAwLFxuICAgIFwiZFwiOiAxLFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgYWJzb2x1dGUgdmFsdWVcbiAgICAgKlxuICAgICAqIEV4OiBuZXcgRnJhY3Rpb24oLTQpLmFicygpID0+IDRcbiAgICAgKiovXG4gICAgXCJhYnNcIjogZnVuY3Rpb24oKSB7XG5cbiAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24odGhpc1tcIm5cIl0sIHRoaXNbXCJkXCJdKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSW52ZXJ0cyB0aGUgc2lnbiBvZiB0aGUgY3VycmVudCBmcmFjdGlvblxuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbigtNCkubmVnKCkgPT4gNFxuICAgICAqKi9cbiAgICBcIm5lZ1wiOiBmdW5jdGlvbigpIHtcblxuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbigtdGhpc1tcInNcIl0gKiB0aGlzW1wiblwiXSwgdGhpc1tcImRcIl0pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBBZGRzIHR3byByYXRpb25hbCBudW1iZXJzXG4gICAgICpcbiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKHtuOiAyLCBkOiAzfSkuYWRkKFwiMTQuOVwiKSA9PiA0NjcgLyAzMFxuICAgICAqKi9cbiAgICBcImFkZFwiOiBmdW5jdGlvbihhLCBiKSB7XG5cbiAgICAgIHBhcnNlKGEsIGIpO1xuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbihcbiAgICAgICAgICAgICAgdGhpc1tcInNcIl0gKiB0aGlzW1wiblwiXSAqIFBbXCJkXCJdICsgUFtcInNcIl0gKiB0aGlzW1wiZFwiXSAqIFBbXCJuXCJdLFxuICAgICAgICAgICAgICB0aGlzW1wiZFwiXSAqIFBbXCJkXCJdXG4gICAgICAgICAgICAgICk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFN1YnRyYWN0cyB0d28gcmF0aW9uYWwgbnVtYmVyc1xuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbih7bjogMiwgZDogM30pLmFkZChcIjE0LjlcIikgPT4gLTQyNyAvIDMwXG4gICAgICoqL1xuICAgIFwic3ViXCI6IGZ1bmN0aW9uKGEsIGIpIHtcblxuICAgICAgcGFyc2UoYSwgYik7XG4gICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKFxuICAgICAgICAgICAgICB0aGlzW1wic1wiXSAqIHRoaXNbXCJuXCJdICogUFtcImRcIl0gLSBQW1wic1wiXSAqIHRoaXNbXCJkXCJdICogUFtcIm5cIl0sXG4gICAgICAgICAgICAgIHRoaXNbXCJkXCJdICogUFtcImRcIl1cbiAgICAgICAgICAgICAgKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTXVsdGlwbGllcyB0d28gcmF0aW9uYWwgbnVtYmVyc1xuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbihcIi0xNy4oMzQ1KVwiKS5tdWwoMykgPT4gNTc3NiAvIDExMVxuICAgICAqKi9cbiAgICBcIm11bFwiOiBmdW5jdGlvbihhLCBiKSB7XG5cbiAgICAgIHBhcnNlKGEsIGIpO1xuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbihcbiAgICAgICAgICAgICAgdGhpc1tcInNcIl0gKiBQW1wic1wiXSAqIHRoaXNbXCJuXCJdICogUFtcIm5cIl0sXG4gICAgICAgICAgICAgIHRoaXNbXCJkXCJdICogUFtcImRcIl1cbiAgICAgICAgICAgICAgKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRGl2aWRlcyB0d28gcmF0aW9uYWwgbnVtYmVyc1xuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbihcIi0xNy4oMzQ1KVwiKS5pbnZlcnNlKCkuZGl2KDMpXG4gICAgICoqL1xuICAgIFwiZGl2XCI6IGZ1bmN0aW9uKGEsIGIpIHtcblxuICAgICAgcGFyc2UoYSwgYik7XG4gICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKFxuICAgICAgICAgICAgICB0aGlzW1wic1wiXSAqIFBbXCJzXCJdICogdGhpc1tcIm5cIl0gKiBQW1wiZFwiXSxcbiAgICAgICAgICAgICAgdGhpc1tcImRcIl0gKiBQW1wiblwiXVxuICAgICAgICAgICAgICApO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDbG9uZXMgdGhlIGFjdHVhbCBvYmplY3RcbiAgICAgKlxuICAgICAqIEV4OiBuZXcgRnJhY3Rpb24oXCItMTcuKDM0NSlcIikuY2xvbmUoKVxuICAgICAqKi9cbiAgICBcImNsb25lXCI6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbih0aGlzKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgbW9kdWxvIG9mIHR3byByYXRpb25hbCBudW1iZXJzIC0gYSBtb3JlIHByZWNpc2UgZm1vZFxuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbignNC4oMyknKS5tb2QoWzcsIDhdKSA9PiAoMTMvMykgJSAoNy84KSA9ICg1LzYpXG4gICAgICoqL1xuICAgIFwibW9kXCI6IGZ1bmN0aW9uKGEsIGIpIHtcblxuICAgICAgaWYgKGlzTmFOKHRoaXNbJ24nXSkgfHwgaXNOYU4odGhpc1snZCddKSkge1xuICAgICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKE5hTik7XG4gICAgICB9XG5cbiAgICAgIGlmIChhID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbih0aGlzW1wic1wiXSAqIHRoaXNbXCJuXCJdICUgdGhpc1tcImRcIl0sIDEpO1xuICAgICAgfVxuXG4gICAgICBwYXJzZShhLCBiKTtcbiAgICAgIGlmICgwID09PSBQW1wiblwiXSAmJiAwID09PSB0aGlzW1wiZFwiXSkge1xuICAgICAgICBGcmFjdGlvbigwLCAwKTsgLy8gVGhyb3cgRGl2aXNpb25CeVplcm9cbiAgICAgIH1cblxuICAgICAgLypcbiAgICAgICAqIEZpcnN0IHNpbGx5IGF0dGVtcHQsIGtpbmRhIHNsb3dcbiAgICAgICAqXG4gICAgICAgcmV0dXJuIHRoYXRbXCJzdWJcIl0oe1xuICAgICAgIFwiblwiOiBudW1bXCJuXCJdICogTWF0aC5mbG9vcigodGhpcy5uIC8gdGhpcy5kKSAvIChudW0ubiAvIG51bS5kKSksXG4gICAgICAgXCJkXCI6IG51bVtcImRcIl0sXG4gICAgICAgXCJzXCI6IHRoaXNbXCJzXCJdXG4gICAgICAgfSk7Ki9cblxuICAgICAgLypcbiAgICAgICAqIE5ldyBhdHRlbXB0OiBhMSAvIGIxID0gYTIgLyBiMiAqIHEgKyByXG4gICAgICAgKiA9PiBiMiAqIGExID0gYTIgKiBiMSAqIHEgKyBiMSAqIGIyICogclxuICAgICAgICogPT4gKGIyICogYTEgJSBhMiAqIGIxKSAvIChiMSAqIGIyKVxuICAgICAgICovXG4gICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKFxuICAgICAgICAgICAgICB0aGlzW1wic1wiXSAqIChQW1wiZFwiXSAqIHRoaXNbXCJuXCJdKSAlIChQW1wiblwiXSAqIHRoaXNbXCJkXCJdKSxcbiAgICAgICAgICAgICAgUFtcImRcIl0gKiB0aGlzW1wiZFwiXVxuICAgICAgICAgICAgICApO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBmcmFjdGlvbmFsIGdjZCBvZiB0d28gcmF0aW9uYWwgbnVtYmVyc1xuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbig1LDgpLmdjZCgzLDcpID0+IDEvNTZcbiAgICAgKi9cbiAgICBcImdjZFwiOiBmdW5jdGlvbihhLCBiKSB7XG5cbiAgICAgIHBhcnNlKGEsIGIpO1xuXG4gICAgICAvLyBnY2QoYSAvIGIsIGMgLyBkKSA9IGdjZChhLCBjKSAvIGxjbShiLCBkKVxuXG4gICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKGdjZChQW1wiblwiXSwgdGhpc1tcIm5cIl0pICogZ2NkKFBbXCJkXCJdLCB0aGlzW1wiZFwiXSksIFBbXCJkXCJdICogdGhpc1tcImRcIl0pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBmcmFjdGlvbmFsIGxjbSBvZiB0d28gcmF0aW9uYWwgbnVtYmVyc1xuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbig1LDgpLmxjbSgzLDcpID0+IDE1XG4gICAgICovXG4gICAgXCJsY21cIjogZnVuY3Rpb24oYSwgYikge1xuXG4gICAgICBwYXJzZShhLCBiKTtcblxuICAgICAgLy8gbGNtKGEgLyBiLCBjIC8gZCkgPSBsY20oYSwgYykgLyBnY2QoYiwgZClcblxuICAgICAgaWYgKFBbXCJuXCJdID09PSAwICYmIHRoaXNbXCJuXCJdID09PSAwKSB7XG4gICAgICAgIHJldHVybiBuZXcgRnJhY3Rpb247XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKFBbXCJuXCJdICogdGhpc1tcIm5cIl0sIGdjZChQW1wiblwiXSwgdGhpc1tcIm5cIl0pICogZ2NkKFBbXCJkXCJdLCB0aGlzW1wiZFwiXSkpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBjZWlsIG9mIGEgcmF0aW9uYWwgbnVtYmVyXG4gICAgICpcbiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKCc0LigzKScpLmNlaWwoKSA9PiAoNSAvIDEpXG4gICAgICoqL1xuICAgIFwiY2VpbFwiOiBmdW5jdGlvbihwbGFjZXMpIHtcblxuICAgICAgcGxhY2VzID0gTWF0aC5wb3coMTAsIHBsYWNlcyB8fCAwKTtcblxuICAgICAgaWYgKGlzTmFOKHRoaXNbXCJuXCJdKSB8fCBpc05hTih0aGlzW1wiZFwiXSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbihOYU4pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbihNYXRoLmNlaWwocGxhY2VzICogdGhpc1tcInNcIl0gKiB0aGlzW1wiblwiXSAvIHRoaXNbXCJkXCJdKSwgcGxhY2VzKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgZmxvb3Igb2YgYSByYXRpb25hbCBudW1iZXJcbiAgICAgKlxuICAgICAqIEV4OiBuZXcgRnJhY3Rpb24oJzQuKDMpJykuZmxvb3IoKSA9PiAoNCAvIDEpXG4gICAgICoqL1xuICAgIFwiZmxvb3JcIjogZnVuY3Rpb24ocGxhY2VzKSB7XG5cbiAgICAgIHBsYWNlcyA9IE1hdGgucG93KDEwLCBwbGFjZXMgfHwgMCk7XG5cbiAgICAgIGlmIChpc05hTih0aGlzW1wiblwiXSkgfHwgaXNOYU4odGhpc1tcImRcIl0pKSB7XG4gICAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24oTmFOKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24oTWF0aC5mbG9vcihwbGFjZXMgKiB0aGlzW1wic1wiXSAqIHRoaXNbXCJuXCJdIC8gdGhpc1tcImRcIl0pLCBwbGFjZXMpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSb3VuZHMgYSByYXRpb25hbCBudW1iZXJzXG4gICAgICpcbiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKCc0LigzKScpLnJvdW5kKCkgPT4gKDQgLyAxKVxuICAgICAqKi9cbiAgICBcInJvdW5kXCI6IGZ1bmN0aW9uKHBsYWNlcykge1xuXG4gICAgICBwbGFjZXMgPSBNYXRoLnBvdygxMCwgcGxhY2VzIHx8IDApO1xuXG4gICAgICBpZiAoaXNOYU4odGhpc1tcIm5cIl0pIHx8IGlzTmFOKHRoaXNbXCJkXCJdKSkge1xuICAgICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKE5hTik7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKE1hdGgucm91bmQocGxhY2VzICogdGhpc1tcInNcIl0gKiB0aGlzW1wiblwiXSAvIHRoaXNbXCJkXCJdKSwgcGxhY2VzKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgaW52ZXJzZSBvZiB0aGUgZnJhY3Rpb24sIG1lYW5zIG51bWVyYXRvciBhbmQgZGVudW1lcmF0b3IgYXJlIGV4Y2hhbmdlZFxuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbihbLTMsIDRdKS5pbnZlcnNlKCkgPT4gLTQgLyAzXG4gICAgICoqL1xuICAgIFwiaW52ZXJzZVwiOiBmdW5jdGlvbigpIHtcblxuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbih0aGlzW1wic1wiXSAqIHRoaXNbXCJkXCJdLCB0aGlzW1wiblwiXSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZXMgdGhlIGZyYWN0aW9uIHRvIHNvbWUgaW50ZWdlciBleHBvbmVudFxuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbigtMSwyKS5wb3coLTMpID0+IC04XG4gICAgICovXG4gICAgXCJwb3dcIjogZnVuY3Rpb24obSkge1xuXG4gICAgICBpZiAobSA8IDApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbihNYXRoLnBvdyh0aGlzWydzJ10gKiB0aGlzW1wiZFwiXSwgLW0pLCBNYXRoLnBvdyh0aGlzW1wiblwiXSwgLW0pKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24oTWF0aC5wb3codGhpc1sncyddICogdGhpc1tcIm5cIl0sIG0pLCBNYXRoLnBvdyh0aGlzW1wiZFwiXSwgbSkpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiB0d28gcmF0aW9uYWwgbnVtYmVycyBhcmUgdGhlIHNhbWVcbiAgICAgKlxuICAgICAqIEV4OiBuZXcgRnJhY3Rpb24oMTkuNikuZXF1YWxzKFs5OCwgNV0pO1xuICAgICAqKi9cbiAgICBcImVxdWFsc1wiOiBmdW5jdGlvbihhLCBiKSB7XG5cbiAgICAgIHBhcnNlKGEsIGIpO1xuICAgICAgcmV0dXJuIHRoaXNbXCJzXCJdICogdGhpc1tcIm5cIl0gKiBQW1wiZFwiXSA9PT0gUFtcInNcIl0gKiBQW1wiblwiXSAqIHRoaXNbXCJkXCJdOyAvLyBTYW1lIGFzIGNvbXBhcmUoKSA9PT0gMFxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiB0d28gcmF0aW9uYWwgbnVtYmVycyBhcmUgdGhlIHNhbWVcbiAgICAgKlxuICAgICAqIEV4OiBuZXcgRnJhY3Rpb24oMTkuNikuZXF1YWxzKFs5OCwgNV0pO1xuICAgICAqKi9cbiAgICBcImNvbXBhcmVcIjogZnVuY3Rpb24oYSwgYikge1xuXG4gICAgICBwYXJzZShhLCBiKTtcbiAgICAgIHZhciB0ID0gKHRoaXNbXCJzXCJdICogdGhpc1tcIm5cIl0gKiBQW1wiZFwiXSAtIFBbXCJzXCJdICogUFtcIm5cIl0gKiB0aGlzW1wiZFwiXSk7XG4gICAgICByZXR1cm4gKDAgPCB0KSAtICh0IDwgMCk7XG4gICAgfSxcblxuICAgIFwic2ltcGxpZnlcIjogZnVuY3Rpb24oZXBzKSB7XG5cbiAgICAgIC8vIEZpcnN0IG5haXZlIGltcGxlbWVudGF0aW9uLCBuZWVkcyBpbXByb3ZlbWVudFxuXG4gICAgICBpZiAoaXNOYU4odGhpc1snbiddKSB8fCBpc05hTih0aGlzWydkJ10pKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICB2YXIgY29udCA9IHRoaXNbJ2FicyddKClbJ3RvQ29udGludWVkJ10oKTtcblxuICAgICAgZXBzID0gZXBzIHx8IDAuMDAxO1xuXG4gICAgICBmdW5jdGlvbiByZWMoYSkge1xuICAgICAgICBpZiAoYS5sZW5ndGggPT09IDEpXG4gICAgICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbihhWzBdKTtcbiAgICAgICAgcmV0dXJuIHJlYyhhLnNsaWNlKDEpKVsnaW52ZXJzZSddKClbJ2FkZCddKGFbMF0pO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHRtcCA9IHJlYyhjb250LnNsaWNlKDAsIGkgKyAxKSk7XG4gICAgICAgIGlmICh0bXBbJ3N1YiddKHRoaXNbJ2FicyddKCkpWydhYnMnXSgpLnZhbHVlT2YoKSA8IGVwcykge1xuICAgICAgICAgIHJldHVybiB0bXBbJ211bCddKHRoaXNbJ3MnXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiB0d28gcmF0aW9uYWwgbnVtYmVycyBhcmUgZGl2aXNpYmxlXG4gICAgICpcbiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKDE5LjYpLmRpdmlzaWJsZSgxLjUpO1xuICAgICAqL1xuICAgIFwiZGl2aXNpYmxlXCI6IGZ1bmN0aW9uKGEsIGIpIHtcblxuICAgICAgcGFyc2UoYSwgYik7XG4gICAgICByZXR1cm4gISghKFBbXCJuXCJdICogdGhpc1tcImRcIl0pIHx8ICgodGhpc1tcIm5cIl0gKiBQW1wiZFwiXSkgJSAoUFtcIm5cIl0gKiB0aGlzW1wiZFwiXSkpKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIGZyYWN0aW9uXG4gICAgICpcbiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKFwiMTAwLic5MTgyMydcIikudmFsdWVPZigpID0+IDEwMC45MTgyMzkxODIzOTE4M1xuICAgICAqKi9cbiAgICAndmFsdWVPZic6IGZ1bmN0aW9uKCkge1xuXG4gICAgICByZXR1cm4gdGhpc1tcInNcIl0gKiB0aGlzW1wiblwiXSAvIHRoaXNbXCJkXCJdO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgc3RyaW5nLWZyYWN0aW9uIHJlcHJlc2VudGF0aW9uIG9mIGEgRnJhY3Rpb24gb2JqZWN0XG4gICAgICpcbiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKFwiMS4nMydcIikudG9GcmFjdGlvbigpID0+IFwiNCAxLzNcIlxuICAgICAqKi9cbiAgICAndG9GcmFjdGlvbic6IGZ1bmN0aW9uKGV4Y2x1ZGVXaG9sZSkge1xuXG4gICAgICB2YXIgd2hvbGUsIHN0ciA9IFwiXCI7XG4gICAgICB2YXIgbiA9IHRoaXNbXCJuXCJdO1xuICAgICAgdmFyIGQgPSB0aGlzW1wiZFwiXTtcbiAgICAgIGlmICh0aGlzW1wic1wiXSA8IDApIHtcbiAgICAgICAgc3RyICs9ICctJztcbiAgICAgIH1cblxuICAgICAgaWYgKGQgPT09IDEpIHtcbiAgICAgICAgc3RyICs9IG47XG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIGlmIChleGNsdWRlV2hvbGUgJiYgKHdob2xlID0gTWF0aC5mbG9vcihuIC8gZCkpID4gMCkge1xuICAgICAgICAgIHN0ciArPSB3aG9sZTtcbiAgICAgICAgICBzdHIgKz0gXCIgXCI7XG4gICAgICAgICAgbiAlPSBkO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RyICs9IG47XG4gICAgICAgIHN0ciArPSAnLyc7XG4gICAgICAgIHN0ciArPSBkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGxhdGV4IHJlcHJlc2VudGF0aW9uIG9mIGEgRnJhY3Rpb24gb2JqZWN0XG4gICAgICpcbiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKFwiMS4nMydcIikudG9MYXRleCgpID0+IFwiXFxmcmFjezR9ezN9XCJcbiAgICAgKiovXG4gICAgJ3RvTGF0ZXgnOiBmdW5jdGlvbihleGNsdWRlV2hvbGUpIHtcblxuICAgICAgdmFyIHdob2xlLCBzdHIgPSBcIlwiO1xuICAgICAgdmFyIG4gPSB0aGlzW1wiblwiXTtcbiAgICAgIHZhciBkID0gdGhpc1tcImRcIl07XG4gICAgICBpZiAodGhpc1tcInNcIl0gPCAwKSB7XG4gICAgICAgIHN0ciArPSAnLSc7XG4gICAgICB9XG5cbiAgICAgIGlmIChkID09PSAxKSB7XG4gICAgICAgIHN0ciArPSBuO1xuICAgICAgfSBlbHNlIHtcblxuICAgICAgICBpZiAoZXhjbHVkZVdob2xlICYmICh3aG9sZSA9IE1hdGguZmxvb3IobiAvIGQpKSA+IDApIHtcbiAgICAgICAgICBzdHIgKz0gd2hvbGU7XG4gICAgICAgICAgbiAlPSBkO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RyICs9IFwiXFxcXGZyYWN7XCI7XG4gICAgICAgIHN0ciArPSBuO1xuICAgICAgICBzdHIgKz0gJ317JztcbiAgICAgICAgc3RyICs9IGQ7XG4gICAgICAgIHN0ciArPSAnfSc7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIGNvbnRpbnVlZCBmcmFjdGlvbiBlbGVtZW50c1xuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbihcIjcvOFwiKS50b0NvbnRpbnVlZCgpID0+IFswLDEsN11cbiAgICAgKi9cbiAgICAndG9Db250aW51ZWQnOiBmdW5jdGlvbigpIHtcblxuICAgICAgdmFyIHQ7XG4gICAgICB2YXIgYSA9IHRoaXNbJ24nXTtcbiAgICAgIHZhciBiID0gdGhpc1snZCddO1xuICAgICAgdmFyIHJlcyA9IFtdO1xuXG4gICAgICBpZiAoaXNOYU4odGhpc1snbiddKSB8fCBpc05hTih0aGlzWydkJ10pKSB7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9XG5cbiAgICAgIGRvIHtcbiAgICAgICAgcmVzLnB1c2goTWF0aC5mbG9vcihhIC8gYikpO1xuICAgICAgICB0ID0gYSAlIGI7XG4gICAgICAgIGEgPSBiO1xuICAgICAgICBiID0gdDtcbiAgICAgIH0gd2hpbGUgKGEgIT09IDEpO1xuXG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgZnJhY3Rpb24gd2l0aCBhbGwgZGlnaXRzXG4gICAgICpcbiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKFwiMTAwLic5MTgyMydcIikudG9TdHJpbmcoKSA9PiBcIjEwMC4oOTE4MjMpXCJcbiAgICAgKiovXG4gICAgJ3RvU3RyaW5nJzogZnVuY3Rpb24oZGVjKSB7XG5cbiAgICAgIHZhciBnO1xuICAgICAgdmFyIE4gPSB0aGlzW1wiblwiXTtcbiAgICAgIHZhciBEID0gdGhpc1tcImRcIl07XG5cbiAgICAgIGlmIChpc05hTihOKSB8fCBpc05hTihEKSkge1xuICAgICAgICByZXR1cm4gXCJOYU5cIjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFGcmFjdGlvblsnUkVEVUNFJ10pIHtcbiAgICAgICAgZyA9IGdjZChOLCBEKTtcbiAgICAgICAgTiAvPSBnO1xuICAgICAgICBEIC89IGc7XG4gICAgICB9XG5cbiAgICAgIGRlYyA9IGRlYyB8fCAxNTsgLy8gMTUgPSBkZWNpbWFsIHBsYWNlcyB3aGVuIG5vIHJlcGl0YXRpb25cblxuICAgICAgdmFyIGN5Y0xlbiA9IGN5Y2xlTGVuKE4sIEQpOyAvLyBDeWNsZSBsZW5ndGhcbiAgICAgIHZhciBjeWNPZmYgPSBjeWNsZVN0YXJ0KE4sIEQsIGN5Y0xlbik7IC8vIEN5Y2xlIHN0YXJ0XG5cbiAgICAgIHZhciBzdHIgPSB0aGlzWydzJ10gPT09IC0xID8gXCItXCIgOiBcIlwiO1xuXG4gICAgICBzdHIgKz0gTiAvIEQgfCAwO1xuXG4gICAgICBOICU9IEQ7XG4gICAgICBOICo9IDEwO1xuXG4gICAgICBpZiAoTilcbiAgICAgICAgc3RyICs9IFwiLlwiO1xuXG4gICAgICBpZiAoY3ljTGVuKSB7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IGN5Y09mZjsgaS0tOyApIHtcbiAgICAgICAgICBzdHIgKz0gTiAvIEQgfCAwO1xuICAgICAgICAgIE4gJT0gRDtcbiAgICAgICAgICBOICo9IDEwO1xuICAgICAgICB9XG4gICAgICAgIHN0ciArPSBcIihcIjtcbiAgICAgICAgZm9yICh2YXIgaSA9IGN5Y0xlbjsgaS0tOyApIHtcbiAgICAgICAgICBzdHIgKz0gTiAvIEQgfCAwO1xuICAgICAgICAgIE4gJT0gRDtcbiAgICAgICAgICBOICo9IDEwO1xuICAgICAgICB9XG4gICAgICAgIHN0ciArPSBcIilcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAodmFyIGkgPSBkZWM7IE4gJiYgaS0tOyApIHtcbiAgICAgICAgICBzdHIgKz0gTiAvIEQgfCAwO1xuICAgICAgICAgIE4gJT0gRDtcbiAgICAgICAgICBOICo9IDEwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH1cbiAgfTtcblxuICBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZVtcImFtZFwiXSkge1xuICAgIGRlZmluZShbXSwgZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gRnJhY3Rpb247XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsndmFsdWUnOiB0cnVlfSk7XG4gICAgRnJhY3Rpb25bJ2RlZmF1bHQnXSA9IEZyYWN0aW9uO1xuICAgIEZyYWN0aW9uWydGcmFjdGlvbiddID0gRnJhY3Rpb247XG4gICAgbW9kdWxlWydleHBvcnRzJ10gPSBGcmFjdGlvbjtcbiAgfSBlbHNlIHtcbiAgICByb290WydGcmFjdGlvbiddID0gRnJhY3Rpb247XG4gIH1cblxufSkodGhpcyk7XG4iLCIvKlxyXG4gKiBOYXR1cmFsIFNvcnQgYWxnb3JpdGhtIGZvciBKYXZhc2NyaXB0IC0gVmVyc2lvbiAwLjcgLSBSZWxlYXNlZCB1bmRlciBNSVQgbGljZW5zZVxyXG4gKiBBdXRob3I6IEppbSBQYWxtZXIgKGJhc2VkIG9uIGNodW5raW5nIGlkZWEgZnJvbSBEYXZlIEtvZWxsZSlcclxuICovXHJcbi8qanNoaW50IHVudXNlZDpmYWxzZSAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG5hdHVyYWxTb3J0IChhLCBiKSB7XHJcblx0XCJ1c2Ugc3RyaWN0XCI7XHJcblx0dmFyIHJlID0gLyheKFsrXFwtXT8oPzowfFsxLTldXFxkKikoPzpcXC5cXGQqKT8oPzpbZUVdWytcXC1dP1xcZCspPyk/JHxeMHhbMC05YS1mXSskfFxcZCspL2dpLFxyXG5cdFx0c3JlID0gLyheWyBdKnxbIF0qJCkvZyxcclxuXHRcdGRyZSA9IC8oXihbXFx3IF0rLD9bXFx3IF0rKT9bXFx3IF0rLD9bXFx3IF0rXFxkKzpcXGQrKDpcXGQrKT9bXFx3IF0/fF5cXGR7MSw0fVtcXC9cXC1dXFxkezEsNH1bXFwvXFwtXVxcZHsxLDR9fF5cXHcrLCBcXHcrIFxcZCssIFxcZHs0fSkvLFxyXG5cdFx0aHJlID0gL14weFswLTlhLWZdKyQvaSxcclxuXHRcdG9yZSA9IC9eMC8sXHJcblx0XHRpID0gZnVuY3Rpb24ocykgeyByZXR1cm4gbmF0dXJhbFNvcnQuaW5zZW5zaXRpdmUgJiYgKCcnICsgcykudG9Mb3dlckNhc2UoKSB8fCAnJyArIHM7IH0sXHJcblx0XHQvLyBjb252ZXJ0IGFsbCB0byBzdHJpbmdzIHN0cmlwIHdoaXRlc3BhY2VcclxuXHRcdHggPSBpKGEpLnJlcGxhY2Uoc3JlLCAnJykgfHwgJycsXHJcblx0XHR5ID0gaShiKS5yZXBsYWNlKHNyZSwgJycpIHx8ICcnLFxyXG5cdFx0Ly8gY2h1bmsvdG9rZW5pemVcclxuXHRcdHhOID0geC5yZXBsYWNlKHJlLCAnXFwwJDFcXDAnKS5yZXBsYWNlKC9cXDAkLywnJykucmVwbGFjZSgvXlxcMC8sJycpLnNwbGl0KCdcXDAnKSxcclxuXHRcdHlOID0geS5yZXBsYWNlKHJlLCAnXFwwJDFcXDAnKS5yZXBsYWNlKC9cXDAkLywnJykucmVwbGFjZSgvXlxcMC8sJycpLnNwbGl0KCdcXDAnKSxcclxuXHRcdC8vIG51bWVyaWMsIGhleCBvciBkYXRlIGRldGVjdGlvblxyXG5cdFx0eEQgPSBwYXJzZUludCh4Lm1hdGNoKGhyZSksIDE2KSB8fCAoeE4ubGVuZ3RoICE9PSAxICYmIHgubWF0Y2goZHJlKSAmJiBEYXRlLnBhcnNlKHgpKSxcclxuXHRcdHlEID0gcGFyc2VJbnQoeS5tYXRjaChocmUpLCAxNikgfHwgeEQgJiYgeS5tYXRjaChkcmUpICYmIERhdGUucGFyc2UoeSkgfHwgbnVsbCxcclxuXHRcdG9GeE5jTCwgb0Z5TmNMO1xyXG5cdC8vIGZpcnN0IHRyeSBhbmQgc29ydCBIZXggY29kZXMgb3IgRGF0ZXNcclxuXHRpZiAoeUQpIHtcclxuXHRcdGlmICggeEQgPCB5RCApIHsgcmV0dXJuIC0xOyB9XHJcblx0XHRlbHNlIGlmICggeEQgPiB5RCApIHsgcmV0dXJuIDE7IH1cclxuXHR9XHJcblx0Ly8gbmF0dXJhbCBzb3J0aW5nIHRocm91Z2ggc3BsaXQgbnVtZXJpYyBzdHJpbmdzIGFuZCBkZWZhdWx0IHN0cmluZ3NcclxuXHRmb3IodmFyIGNMb2M9MCwgbnVtUz1NYXRoLm1heCh4Ti5sZW5ndGgsIHlOLmxlbmd0aCk7IGNMb2MgPCBudW1TOyBjTG9jKyspIHtcclxuXHRcdC8vIGZpbmQgZmxvYXRzIG5vdCBzdGFydGluZyB3aXRoICcwJywgc3RyaW5nIG9yIDAgaWYgbm90IGRlZmluZWQgKENsaW50IFByaWVzdClcclxuXHRcdG9GeE5jTCA9ICEoeE5bY0xvY10gfHwgJycpLm1hdGNoKG9yZSkgJiYgcGFyc2VGbG9hdCh4TltjTG9jXSkgfHwgeE5bY0xvY10gfHwgMDtcclxuXHRcdG9GeU5jTCA9ICEoeU5bY0xvY10gfHwgJycpLm1hdGNoKG9yZSkgJiYgcGFyc2VGbG9hdCh5TltjTG9jXSkgfHwgeU5bY0xvY10gfHwgMDtcclxuXHRcdC8vIGhhbmRsZSBudW1lcmljIHZzIHN0cmluZyBjb21wYXJpc29uIC0gbnVtYmVyIDwgc3RyaW5nIC0gKEt5bGUgQWRhbXMpXHJcblx0XHRpZiAoaXNOYU4ob0Z4TmNMKSAhPT0gaXNOYU4ob0Z5TmNMKSkgeyByZXR1cm4gKGlzTmFOKG9GeE5jTCkpID8gMSA6IC0xOyB9XHJcblx0XHQvLyByZWx5IG9uIHN0cmluZyBjb21wYXJpc29uIGlmIGRpZmZlcmVudCB0eXBlcyAtIGkuZS4gJzAyJyA8IDIgIT0gJzAyJyA8ICcyJ1xyXG5cdFx0ZWxzZSBpZiAodHlwZW9mIG9GeE5jTCAhPT0gdHlwZW9mIG9GeU5jTCkge1xyXG5cdFx0XHRvRnhOY0wgKz0gJyc7XHJcblx0XHRcdG9GeU5jTCArPSAnJztcclxuXHRcdH1cclxuXHRcdGlmIChvRnhOY0wgPCBvRnlOY0wpIHsgcmV0dXJuIC0xOyB9XHJcblx0XHRpZiAob0Z4TmNMID4gb0Z5TmNMKSB7IHJldHVybiAxOyB9XHJcblx0fVxyXG5cdHJldHVybiAwO1xyXG59O1xyXG4iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlVmVyc2lvbiA9IGV4cG9ydHMuY3JlYXRlVXBwZXJjYXNlRSA9IGV4cG9ydHMuY3JlYXRlVXBwZXJjYXNlUGkgPSBleHBvcnRzLmNyZWF0ZUkgPSBleHBvcnRzLmNyZWF0ZVNRUlQyID0gZXhwb3J0cy5jcmVhdGVTUVJUMV8yID0gZXhwb3J0cy5jcmVhdGVMT0cxMEUgPSBleHBvcnRzLmNyZWF0ZUxPRzJFID0gZXhwb3J0cy5jcmVhdGVMTjEwID0gZXhwb3J0cy5jcmVhdGVMTjIgPSBleHBvcnRzLmNyZWF0ZVBoaSA9IGV4cG9ydHMuY3JlYXRlRSA9IGV4cG9ydHMuY3JlYXRlVGF1ID0gZXhwb3J0cy5jcmVhdGVQaSA9IGV4cG9ydHMuY3JlYXRlTmFOID0gZXhwb3J0cy5jcmVhdGVJbmZpbml0eSA9IGV4cG9ydHMuY3JlYXRlTnVsbCA9IGV4cG9ydHMuY3JlYXRlRmFsc2UgPSBleHBvcnRzLmNyZWF0ZVRydWUgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfdmVyc2lvbiA9IHJlcXVpcmUoXCIuL3ZlcnNpb25cIik7XG5cbnZhciBfY29uc3RhbnRzID0gcmVxdWlyZShcIi4vdXRpbHMvYmlnbnVtYmVyL2NvbnN0YW50c1wiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBjcmVhdGVUcnVlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKCd0cnVlJywgW10sIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRydWU7XG59KTtcbmV4cG9ydHMuY3JlYXRlVHJ1ZSA9IGNyZWF0ZVRydWU7XG52YXIgY3JlYXRlRmFsc2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkoJ2ZhbHNlJywgW10sIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZhbHNlO1xufSk7XG5leHBvcnRzLmNyZWF0ZUZhbHNlID0gY3JlYXRlRmFsc2U7XG52YXIgY3JlYXRlTnVsbCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KSgnbnVsbCcsIFtdLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBudWxsO1xufSk7XG5leHBvcnRzLmNyZWF0ZU51bGwgPSBjcmVhdGVOdWxsO1xudmFyIGNyZWF0ZUluZmluaXR5ID0gLyogI19fUFVSRV9fICovcmVjcmVhdGVGYWN0b3J5KCdJbmZpbml0eScsIFsnY29uZmlnJywgJz9CaWdOdW1iZXInXSwgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXI7XG4gIHJldHVybiBjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJyA/IG5ldyBCaWdOdW1iZXIoSW5maW5pdHkpIDogSW5maW5pdHk7XG59KTtcbmV4cG9ydHMuY3JlYXRlSW5maW5pdHkgPSBjcmVhdGVJbmZpbml0eTtcbnZhciBjcmVhdGVOYU4gPSAvKiAjX19QVVJFX18gKi9yZWNyZWF0ZUZhY3RvcnkoJ05hTicsIFsnY29uZmlnJywgJz9CaWdOdW1iZXInXSwgZnVuY3Rpb24gKF9yZWYyKSB7XG4gIHZhciBjb25maWcgPSBfcmVmMi5jb25maWcsXG4gICAgICBCaWdOdW1iZXIgPSBfcmVmMi5CaWdOdW1iZXI7XG4gIHJldHVybiBjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJyA/IG5ldyBCaWdOdW1iZXIoTmFOKSA6IE5hTjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVOYU4gPSBjcmVhdGVOYU47XG52YXIgY3JlYXRlUGkgPSAvKiAjX19QVVJFX18gKi9yZWNyZWF0ZUZhY3RvcnkoJ3BpJywgWydjb25maWcnLCAnP0JpZ051bWJlciddLCBmdW5jdGlvbiAoX3JlZjMpIHtcbiAgdmFyIGNvbmZpZyA9IF9yZWYzLmNvbmZpZyxcbiAgICAgIEJpZ051bWJlciA9IF9yZWYzLkJpZ051bWJlcjtcbiAgcmV0dXJuIGNvbmZpZy5udW1iZXIgPT09ICdCaWdOdW1iZXInID8gKDAsIF9jb25zdGFudHMuY3JlYXRlQmlnTnVtYmVyUGkpKEJpZ051bWJlcikgOiBfbnVtYmVyLnBpO1xufSk7XG5leHBvcnRzLmNyZWF0ZVBpID0gY3JlYXRlUGk7XG52YXIgY3JlYXRlVGF1ID0gLyogI19fUFVSRV9fICovcmVjcmVhdGVGYWN0b3J5KCd0YXUnLCBbJ2NvbmZpZycsICc/QmlnTnVtYmVyJ10sIGZ1bmN0aW9uIChfcmVmNCkge1xuICB2YXIgY29uZmlnID0gX3JlZjQuY29uZmlnLFxuICAgICAgQmlnTnVtYmVyID0gX3JlZjQuQmlnTnVtYmVyO1xuICByZXR1cm4gY29uZmlnLm51bWJlciA9PT0gJ0JpZ051bWJlcicgPyAoMCwgX2NvbnN0YW50cy5jcmVhdGVCaWdOdW1iZXJUYXUpKEJpZ051bWJlcikgOiBfbnVtYmVyLnRhdTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVUYXUgPSBjcmVhdGVUYXU7XG52YXIgY3JlYXRlRSA9IC8qICNfX1BVUkVfXyAqL3JlY3JlYXRlRmFjdG9yeSgnZScsIFsnY29uZmlnJywgJz9CaWdOdW1iZXInXSwgZnVuY3Rpb24gKF9yZWY1KSB7XG4gIHZhciBjb25maWcgPSBfcmVmNS5jb25maWcsXG4gICAgICBCaWdOdW1iZXIgPSBfcmVmNS5CaWdOdW1iZXI7XG4gIHJldHVybiBjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJyA/ICgwLCBfY29uc3RhbnRzLmNyZWF0ZUJpZ051bWJlckUpKEJpZ051bWJlcikgOiBfbnVtYmVyLmU7XG59KTsgLy8gZ29sZGVuIHJhdGlvLCAoMStzcXJ0KDUpKS8yXG5cbmV4cG9ydHMuY3JlYXRlRSA9IGNyZWF0ZUU7XG52YXIgY3JlYXRlUGhpID0gLyogI19fUFVSRV9fICovcmVjcmVhdGVGYWN0b3J5KCdwaGknLCBbJ2NvbmZpZycsICc/QmlnTnVtYmVyJ10sIGZ1bmN0aW9uIChfcmVmNikge1xuICB2YXIgY29uZmlnID0gX3JlZjYuY29uZmlnLFxuICAgICAgQmlnTnVtYmVyID0gX3JlZjYuQmlnTnVtYmVyO1xuICByZXR1cm4gY29uZmlnLm51bWJlciA9PT0gJ0JpZ051bWJlcicgPyAoMCwgX2NvbnN0YW50cy5jcmVhdGVCaWdOdW1iZXJQaGkpKEJpZ051bWJlcikgOiBfbnVtYmVyLnBoaTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVQaGkgPSBjcmVhdGVQaGk7XG52YXIgY3JlYXRlTE4yID0gLyogI19fUFVSRV9fICovcmVjcmVhdGVGYWN0b3J5KCdMTjInLCBbJ2NvbmZpZycsICc/QmlnTnVtYmVyJ10sIGZ1bmN0aW9uIChfcmVmNykge1xuICB2YXIgY29uZmlnID0gX3JlZjcuY29uZmlnLFxuICAgICAgQmlnTnVtYmVyID0gX3JlZjcuQmlnTnVtYmVyO1xuICByZXR1cm4gY29uZmlnLm51bWJlciA9PT0gJ0JpZ051bWJlcicgPyBuZXcgQmlnTnVtYmVyKDIpLmxuKCkgOiBNYXRoLkxOMjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVMTjIgPSBjcmVhdGVMTjI7XG52YXIgY3JlYXRlTE4xMCA9IC8qICNfX1BVUkVfXyAqL3JlY3JlYXRlRmFjdG9yeSgnTE4xMCcsIFsnY29uZmlnJywgJz9CaWdOdW1iZXInXSwgZnVuY3Rpb24gKF9yZWY4KSB7XG4gIHZhciBjb25maWcgPSBfcmVmOC5jb25maWcsXG4gICAgICBCaWdOdW1iZXIgPSBfcmVmOC5CaWdOdW1iZXI7XG4gIHJldHVybiBjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJyA/IG5ldyBCaWdOdW1iZXIoMTApLmxuKCkgOiBNYXRoLkxOMTA7XG59KTtcbmV4cG9ydHMuY3JlYXRlTE4xMCA9IGNyZWF0ZUxOMTA7XG52YXIgY3JlYXRlTE9HMkUgPSAvKiAjX19QVVJFX18gKi9yZWNyZWF0ZUZhY3RvcnkoJ0xPRzJFJywgWydjb25maWcnLCAnP0JpZ051bWJlciddLCBmdW5jdGlvbiAoX3JlZjkpIHtcbiAgdmFyIGNvbmZpZyA9IF9yZWY5LmNvbmZpZyxcbiAgICAgIEJpZ051bWJlciA9IF9yZWY5LkJpZ051bWJlcjtcbiAgcmV0dXJuIGNvbmZpZy5udW1iZXIgPT09ICdCaWdOdW1iZXInID8gbmV3IEJpZ051bWJlcigxKS5kaXYobmV3IEJpZ051bWJlcigyKS5sbigpKSA6IE1hdGguTE9HMkU7XG59KTtcbmV4cG9ydHMuY3JlYXRlTE9HMkUgPSBjcmVhdGVMT0cyRTtcbnZhciBjcmVhdGVMT0cxMEUgPSAvKiAjX19QVVJFX18gKi9yZWNyZWF0ZUZhY3RvcnkoJ0xPRzEwRScsIFsnY29uZmlnJywgJz9CaWdOdW1iZXInXSwgZnVuY3Rpb24gKF9yZWYxMCkge1xuICB2YXIgY29uZmlnID0gX3JlZjEwLmNvbmZpZyxcbiAgICAgIEJpZ051bWJlciA9IF9yZWYxMC5CaWdOdW1iZXI7XG4gIHJldHVybiBjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJyA/IG5ldyBCaWdOdW1iZXIoMSkuZGl2KG5ldyBCaWdOdW1iZXIoMTApLmxuKCkpIDogTWF0aC5MT0cxMEU7XG59KTtcbmV4cG9ydHMuY3JlYXRlTE9HMTBFID0gY3JlYXRlTE9HMTBFO1xudmFyIGNyZWF0ZVNRUlQxXzIgPSAvKiAjX19QVVJFX18gKi9yZWNyZWF0ZUZhY3RvcnkoIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY2FtZWxjYXNlXG4nU1FSVDFfMicsIFsnY29uZmlnJywgJz9CaWdOdW1iZXInXSwgZnVuY3Rpb24gKF9yZWYxMSkge1xuICB2YXIgY29uZmlnID0gX3JlZjExLmNvbmZpZyxcbiAgICAgIEJpZ051bWJlciA9IF9yZWYxMS5CaWdOdW1iZXI7XG4gIHJldHVybiBjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJyA/IG5ldyBCaWdOdW1iZXIoJzAuNScpLnNxcnQoKSA6IE1hdGguU1FSVDFfMjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTUVJUMV8yID0gY3JlYXRlU1FSVDFfMjtcbnZhciBjcmVhdGVTUVJUMiA9IC8qICNfX1BVUkVfXyAqL3JlY3JlYXRlRmFjdG9yeSgnU1FSVDInLCBbJ2NvbmZpZycsICc/QmlnTnVtYmVyJ10sIGZ1bmN0aW9uIChfcmVmMTIpIHtcbiAgdmFyIGNvbmZpZyA9IF9yZWYxMi5jb25maWcsXG4gICAgICBCaWdOdW1iZXIgPSBfcmVmMTIuQmlnTnVtYmVyO1xuICByZXR1cm4gY29uZmlnLm51bWJlciA9PT0gJ0JpZ051bWJlcicgPyBuZXcgQmlnTnVtYmVyKDIpLnNxcnQoKSA6IE1hdGguU1FSVDI7XG59KTtcbmV4cG9ydHMuY3JlYXRlU1FSVDIgPSBjcmVhdGVTUVJUMjtcbnZhciBjcmVhdGVJID0gLyogI19fUFVSRV9fICovcmVjcmVhdGVGYWN0b3J5KCdpJywgWydDb21wbGV4J10sIGZ1bmN0aW9uIChfcmVmMTMpIHtcbiAgdmFyIENvbXBsZXggPSBfcmVmMTMuQ29tcGxleDtcbiAgcmV0dXJuIENvbXBsZXguSTtcbn0pOyAvLyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIHY1XG5cbmV4cG9ydHMuY3JlYXRlSSA9IGNyZWF0ZUk7XG52YXIgY3JlYXRlVXBwZXJjYXNlUGkgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkoJ1BJJywgWydwaSddLCBmdW5jdGlvbiAoX3JlZjE0KSB7XG4gIHZhciBwaSA9IF9yZWYxNC5waTtcbiAgcmV0dXJuIHBpO1xufSk7XG5leHBvcnRzLmNyZWF0ZVVwcGVyY2FzZVBpID0gY3JlYXRlVXBwZXJjYXNlUGk7XG52YXIgY3JlYXRlVXBwZXJjYXNlRSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KSgnRScsIFsnZSddLCBmdW5jdGlvbiAoX3JlZjE1KSB7XG4gIHZhciBlID0gX3JlZjE1LmU7XG4gIHJldHVybiBlO1xufSk7XG5leHBvcnRzLmNyZWF0ZVVwcGVyY2FzZUUgPSBjcmVhdGVVcHBlcmNhc2VFO1xudmFyIGNyZWF0ZVZlcnNpb24gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkoJ3ZlcnNpb24nLCBbXSwgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gX3ZlcnNpb24udmVyc2lvbjtcbn0pOyAvLyBoZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGEgZmFjdG9yeSB3aXRoIGEgZmxhZyByZWNyZWF0ZU9uQ29uZmlnQ2hhbmdlXG4vLyBpZGVhOiBhbGxvdyBwYXNzaW5nIG9wdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYXR0YWNoZWQgdG8gdGhlIGZhY3RvcnkgZnVuY3Rpb24gYXMgNHRoIGFyZ3VtZW50P1xuXG5leHBvcnRzLmNyZWF0ZVZlcnNpb24gPSBjcmVhdGVWZXJzaW9uO1xuXG5mdW5jdGlvbiByZWNyZWF0ZUZhY3RvcnkobmFtZSwgZGVwZW5kZW5jaWVzLCBjcmVhdGUpIHtcbiAgcmV0dXJuICgwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGNyZWF0ZSwge1xuICAgIHJlY3JlYXRlT25Db25maWdDaGFuZ2U6IHRydWVcbiAgfSk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkRFRkFVTFRfQ09ORklHID0gdm9pZCAwO1xudmFyIERFRkFVTFRfQ09ORklHID0ge1xuICAvLyBtaW5pbXVtIHJlbGF0aXZlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gY29tcGFyZWQgdmFsdWVzLFxuICAvLyB1c2VkIGJ5IGFsbCBjb21wYXJpc29uIGZ1bmN0aW9uc1xuICBlcHNpbG9uOiAxZS0xMixcbiAgLy8gdHlwZSBvZiBkZWZhdWx0IG1hdHJpeCBvdXRwdXQuIENob29zZSAnbWF0cml4JyAoZGVmYXVsdCkgb3IgJ2FycmF5J1xuICBtYXRyaXg6ICdNYXRyaXgnLFxuICAvLyB0eXBlIG9mIGRlZmF1bHQgbnVtYmVyIG91dHB1dC4gQ2hvb3NlICdudW1iZXInIChkZWZhdWx0KSAnQmlnTnVtYmVyJywgb3IgJ0ZyYWN0aW9uXG4gIG51bWJlcjogJ251bWJlcicsXG4gIC8vIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMgaW4gQmlnTnVtYmVyc1xuICBwcmVjaXNpb246IDY0LFxuICAvLyBwcmVkaWN0YWJsZSBvdXRwdXQgdHlwZSBvZiBmdW5jdGlvbnMuIFdoZW4gdHJ1ZSwgb3V0cHV0IHR5cGUgZGVwZW5kcyBvbmx5XG4gIC8vIG9uIHRoZSBpbnB1dCB0eXBlcy4gV2hlbiBmYWxzZSAoZGVmYXVsdCksIG91dHB1dCB0eXBlIGNhbiB2YXJ5IGRlcGVuZGluZ1xuICAvLyBvbiBpbnB1dCB2YWx1ZXMuIEZvciBleGFtcGxlIGBtYXRoLnNxcnQoLTQpYCByZXR1cm5zIGBjb21wbGV4KCcyaScpYCB3aGVuXG4gIC8vIHByZWRpY3RhYmxlIGlzIGZhbHNlLCBhbmQgcmV0dXJucyBgTmFOYCB3aGVuIHRydWUuXG4gIHByZWRpY3RhYmxlOiBmYWxzZSxcbiAgLy8gcmFuZG9tIHNlZWQgZm9yIHNlZWRlZCBwc2V1ZG8gcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uXG4gIC8vIG51bGwgPSByYW5kb21seSBzZWVkXG4gIHJhbmRvbVNlZWQ6IG51bGxcbn07XG5leHBvcnRzLkRFRkFVTFRfQ09ORklHID0gREVGQVVMVF9DT05GSUc7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlID0gY3JlYXRlO1xuXG5yZXF1aXJlKFwiLi8uLi91dGlscy9wb2x5ZmlsbHNcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4vLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgZW1pdHRlciA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuLy4uL3V0aWxzL2VtaXR0ZXJcIikpO1xuXG52YXIgX2ltcG9ydCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2ltcG9ydFwiKTtcblxudmFyIF9jb25maWcgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9jb25maWdcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2xvZyA9IHJlcXVpcmUoXCIuLi91dGlscy9sb2dcIik7XG5cbnZhciBfQXJndW1lbnRzRXJyb3IgPSByZXF1aXJlKFwiLi4vZXJyb3IvQXJndW1lbnRzRXJyb3JcIik7XG5cbnZhciBfRGltZW5zaW9uRXJyb3IgPSByZXF1aXJlKFwiLi4vZXJyb3IvRGltZW5zaW9uRXJyb3JcIik7XG5cbnZhciBfSW5kZXhFcnJvciA9IHJlcXVpcmUoXCIuLi9lcnJvci9JbmRleEVycm9yXCIpO1xuXG52YXIgX2NvbmZpZzIgPSByZXF1aXJlKFwiLi9jb25maWdcIik7XG5cbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSgpIHsgaWYgKHR5cGVvZiBXZWFrTWFwICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBudWxsOyB2YXIgY2FjaGUgPSBuZXcgV2Vha01hcCgpOyBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoKSB7IHJldHVybiBjYWNoZTsgfTsgcmV0dXJuIGNhY2hlOyB9XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKG9iaikgeyBpZiAob2JqICYmIG9iai5fX2VzTW9kdWxlKSB7IHJldHVybiBvYmo7IH0gaWYgKG9iaiA9PT0gbnVsbCB8fCBfdHlwZW9mKG9iaikgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG9iaiAhPT0gXCJmdW5jdGlvblwiKSB7IHJldHVybiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfSB2YXIgY2FjaGUgPSBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoKTsgaWYgKGNhY2hlICYmIGNhY2hlLmhhcyhvYmopKSB7IHJldHVybiBjYWNoZS5nZXQob2JqKTsgfSB2YXIgbmV3T2JqID0ge307IHZhciBoYXNQcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIga2V5IGluIG9iaikgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkgeyB2YXIgZGVzYyA9IGhhc1Byb3BlcnR5RGVzY3JpcHRvciA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBrZXkpIDogbnVsbDsgaWYgKGRlc2MgJiYgKGRlc2MuZ2V0IHx8IGRlc2Muc2V0KSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkobmV3T2JqLCBrZXksIGRlc2MpOyB9IGVsc2UgeyBuZXdPYmpba2V5XSA9IG9ialtrZXldOyB9IH0gfSBuZXdPYmpbXCJkZWZhdWx0XCJdID0gb2JqOyBpZiAoY2FjaGUpIHsgY2FjaGUuc2V0KG9iaiwgbmV3T2JqKTsgfSByZXR1cm4gbmV3T2JqOyB9XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbi8qKlxuICogQ3JlYXRlIGEgbWF0aGpzIGluc3RhbmNlIGZyb20gZ2l2ZW4gZmFjdG9yeSBmdW5jdGlvbnMgYW5kIG9wdGlvbmFsbHkgY29uZmlnXG4gKlxuICogVXNhZ2U6XG4gKlxuICogICAgIGNvbnN0IG1hdGhqczEgPSBjcmVhdGUoeyBjcmVhdGVBZGQsIGNyZWF0ZU11bHRpcGx5LCAuLi59KVxuICogICAgIGNvbnN0IGNvbmZpZyA9IHsgbnVtYmVyOiAnQmlnTnVtYmVyJyB9XG4gKiAgICAgY29uc3QgbWF0aGpzMiA9IGNyZWF0ZShhbGwsIGNvbmZpZylcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW2ZhY3Rvcmllc10gQW4gb2JqZWN0IHdpdGggZmFjdG9yeSBmdW5jdGlvbnNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgb2JqZWN0IGNhbiBjb250YWluIG5lc3RlZCBvYmplY3RzLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbCBuZXN0ZWQgb2JqZWN0cyB3aWxsIGJlIGZsYXR0ZW5lZC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbY29uZmlnXSAgICBBdmFpbGFibGUgb3B0aW9uczpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtudW1iZXJ9IGVwc2lsb25cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWluaW11bSByZWxhdGl2ZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmVkIHZhbHVlcywgdXNlZCBieSBhbGwgY29tcGFyaXNvbiBmdW5jdGlvbnMuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nfSBtYXRyaXhcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQSBzdHJpbmcgJ01hdHJpeCcgKGRlZmF1bHQpIG9yICdBcnJheScuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nfSBudW1iZXJcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQSBzdHJpbmcgJ251bWJlcicgKGRlZmF1bHQpLCAnQmlnTnVtYmVyJywgb3IgJ0ZyYWN0aW9uJ1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAge251bWJlcn0gcHJlY2lzaW9uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIGZvciBCaWdOdW1iZXJzLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3QgYXBwbGljYWJsZSBmb3IgTnVtYmVycy5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtib29sZWFufSBwcmVkaWN0YWJsZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVkaWN0YWJsZSBvdXRwdXQgdHlwZSBvZiBmdW5jdGlvbnMuIFdoZW4gdHJ1ZSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IHR5cGUgZGVwZW5kcyBvbmx5IG9uIHRoZSBpbnB1dCB0eXBlcy4gV2hlblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSAoZGVmYXVsdCksIG91dHB1dCB0eXBlIGNhbiB2YXJ5IGRlcGVuZGluZ1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiBpbnB1dCB2YWx1ZXMuIEZvciBleGFtcGxlIGBtYXRoLnNxcnQoLTQpYFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5zIGBjb21wbGV4KCcyaScpYCB3aGVuIHByZWRpY3RhYmxlIGlzIGZhbHNlLCBhbmRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJucyBgTmFOYCB3aGVuIHRydWUuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nfSByYW5kb21TZWVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJhbmRvbSBzZWVkIGZvciBzZWVkZWQgcHNldWRvIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXQgdG8gbnVsbCB0byByYW5kb21seSBzZWVkLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBhIGJhcmUtYm9uZSBtYXRoLmpzIGluc3RhbmNlIGNvbnRhaW5pbmdcbiAqICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uczpcbiAqICAgICAgICAgICAgICAgICAgIC0gYGltcG9ydGAgdG8gYWRkIG5ldyBmdW5jdGlvbnNcbiAqICAgICAgICAgICAgICAgICAgIC0gYGNvbmZpZ2AgdG8gY2hhbmdlIGNvbmZpZ3VyYXRpb25cbiAqICAgICAgICAgICAgICAgICAgIC0gYG9uYCwgYG9mZmAsIGBvbmNlYCwgYGVtaXRgIGZvciBldmVudHNcbiAqL1xuZnVuY3Rpb24gY3JlYXRlKGZhY3RvcmllcywgY29uZmlnKSB7XG4gIHZhciBjb25maWdJbnRlcm5hbCA9IF9leHRlbmRzKHt9LCBfY29uZmlnMi5ERUZBVUxUX0NPTkZJRywgY29uZmlnKTsgLy8gc2ltcGxlIHRlc3QgZm9yIEVTNSBzdXBwb3J0XG5cblxuICBpZiAodHlwZW9mIE9iamVjdC5jcmVhdGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0VTNSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgSmF2YVNjcmlwdCBlbmdpbmUuICcgKyAnUGxlYXNlIGxvYWQgdGhlIGVzNS1zaGltIGFuZCBlczUtc2hhbSBsaWJyYXJ5IGZvciBjb21wYXRpYmlsaXR5LicpO1xuICB9IC8vIGNyZWF0ZSB0aGUgbWF0aGpzIGluc3RhbmNlXG5cblxuICB2YXIgbWF0aCA9IGVtaXR0ZXIubWl4aW4oe1xuICAgIC8vIG9ubHkgaGVyZSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBmb3IgbGVnYWN5IGZhY3RvcnkgZnVuY3Rpb25zXG4gICAgaXNOdW1iZXI6IF9pcy5pc051bWJlcixcbiAgICBpc0NvbXBsZXg6IF9pcy5pc0NvbXBsZXgsXG4gICAgaXNCaWdOdW1iZXI6IF9pcy5pc0JpZ051bWJlcixcbiAgICBpc0ZyYWN0aW9uOiBfaXMuaXNGcmFjdGlvbixcbiAgICBpc1VuaXQ6IF9pcy5pc1VuaXQsXG4gICAgaXNTdHJpbmc6IF9pcy5pc1N0cmluZyxcbiAgICBpc0FycmF5OiBfaXMuaXNBcnJheSxcbiAgICBpc01hdHJpeDogX2lzLmlzTWF0cml4LFxuICAgIGlzQ29sbGVjdGlvbjogX2lzLmlzQ29sbGVjdGlvbixcbiAgICBpc0RlbnNlTWF0cml4OiBfaXMuaXNEZW5zZU1hdHJpeCxcbiAgICBpc1NwYXJzZU1hdHJpeDogX2lzLmlzU3BhcnNlTWF0cml4LFxuICAgIGlzUmFuZ2U6IF9pcy5pc1JhbmdlLFxuICAgIGlzSW5kZXg6IF9pcy5pc0luZGV4LFxuICAgIGlzQm9vbGVhbjogX2lzLmlzQm9vbGVhbixcbiAgICBpc1Jlc3VsdFNldDogX2lzLmlzUmVzdWx0U2V0LFxuICAgIGlzSGVscDogX2lzLmlzSGVscCxcbiAgICBpc0Z1bmN0aW9uOiBfaXMuaXNGdW5jdGlvbixcbiAgICBpc0RhdGU6IF9pcy5pc0RhdGUsXG4gICAgaXNSZWdFeHA6IF9pcy5pc1JlZ0V4cCxcbiAgICBpc09iamVjdDogX2lzLmlzT2JqZWN0LFxuICAgIGlzTnVsbDogX2lzLmlzTnVsbCxcbiAgICBpc1VuZGVmaW5lZDogX2lzLmlzVW5kZWZpbmVkLFxuICAgIGlzQWNjZXNzb3JOb2RlOiBfaXMuaXNBY2Nlc3Nvck5vZGUsXG4gICAgaXNBcnJheU5vZGU6IF9pcy5pc0FycmF5Tm9kZSxcbiAgICBpc0Fzc2lnbm1lbnROb2RlOiBfaXMuaXNBc3NpZ25tZW50Tm9kZSxcbiAgICBpc0Jsb2NrTm9kZTogX2lzLmlzQmxvY2tOb2RlLFxuICAgIGlzQ29uZGl0aW9uYWxOb2RlOiBfaXMuaXNDb25kaXRpb25hbE5vZGUsXG4gICAgaXNDb25zdGFudE5vZGU6IF9pcy5pc0NvbnN0YW50Tm9kZSxcbiAgICBpc0Z1bmN0aW9uQXNzaWdubWVudE5vZGU6IF9pcy5pc0Z1bmN0aW9uQXNzaWdubWVudE5vZGUsXG4gICAgaXNGdW5jdGlvbk5vZGU6IF9pcy5pc0Z1bmN0aW9uTm9kZSxcbiAgICBpc0luZGV4Tm9kZTogX2lzLmlzSW5kZXhOb2RlLFxuICAgIGlzTm9kZTogX2lzLmlzTm9kZSxcbiAgICBpc09iamVjdE5vZGU6IF9pcy5pc09iamVjdE5vZGUsXG4gICAgaXNPcGVyYXRvck5vZGU6IF9pcy5pc09wZXJhdG9yTm9kZSxcbiAgICBpc1BhcmVudGhlc2lzTm9kZTogX2lzLmlzUGFyZW50aGVzaXNOb2RlLFxuICAgIGlzUmFuZ2VOb2RlOiBfaXMuaXNSYW5nZU5vZGUsXG4gICAgaXNTeW1ib2xOb2RlOiBfaXMuaXNTeW1ib2xOb2RlLFxuICAgIGlzQ2hhaW46IF9pcy5pc0NoYWluXG4gIH0pOyAvLyBsb2FkIGNvbmZpZyBmdW5jdGlvbiBhbmQgYXBwbHkgcHJvdmlkZWQgY29uZmlnXG5cbiAgbWF0aC5jb25maWcgPSAoMCwgX2NvbmZpZy5jb25maWdGYWN0b3J5KShjb25maWdJbnRlcm5hbCwgbWF0aC5lbWl0KTtcbiAgbWF0aC5leHByZXNzaW9uID0ge1xuICAgIHRyYW5zZm9ybToge30sXG4gICAgbWF0aFdpdGhUcmFuc2Zvcm06IHtcbiAgICAgIGNvbmZpZzogbWF0aC5jb25maWdcbiAgICB9XG4gIH07IC8vIGNhY2hlZCBmYWN0b3JpZXMgYW5kIGluc3RhbmNlcyB1c2VkIGJ5IGZ1bmN0aW9uIGxvYWRcblxuICB2YXIgbGVnYWN5RmFjdG9yaWVzID0gW107XG4gIHZhciBsZWdhY3lJbnN0YW5jZXMgPSBbXTtcbiAgLyoqXG4gICAqIExvYWQgYSBmdW5jdGlvbiBvciBkYXRhIHR5cGUgZnJvbSBhIGZhY3RvcnkuXG4gICAqIElmIHRoZSBmdW5jdGlvbiBvciBkYXRhIHR5cGUgYWxyZWFkeSBleGlzdHMsIHRoZSBleGlzdGluZyBpbnN0YW5jZSBpc1xuICAgKiByZXR1cm5lZC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZmFjdG9yeVxuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG5cbiAgZnVuY3Rpb24gbG9hZChmYWN0b3J5KSB7XG4gICAgaWYgKCgwLCBfZmFjdG9yeS5pc0ZhY3RvcnkpKGZhY3RvcnkpKSB7XG4gICAgICByZXR1cm4gZmFjdG9yeShtYXRoKTtcbiAgICB9XG5cbiAgICB2YXIgZmlyc3RQcm9wZXJ0eSA9IGZhY3RvcnlbT2JqZWN0LmtleXMoZmFjdG9yeSlbMF1dO1xuXG4gICAgaWYgKCgwLCBfZmFjdG9yeS5pc0ZhY3RvcnkpKGZpcnN0UHJvcGVydHkpKSB7XG4gICAgICByZXR1cm4gZmlyc3RQcm9wZXJ0eShtYXRoKTtcbiAgICB9XG5cbiAgICBpZiAoISgwLCBfb2JqZWN0LmlzTGVnYWN5RmFjdG9yeSkoZmFjdG9yeSkpIHtcbiAgICAgIGNvbnNvbGUud2FybignRmFjdG9yeSBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIGB0eXBlYCwgYG5hbWVgLCBhbmQgYGZhY3RvcnlgIGV4cGVjdGVkJywgZmFjdG9yeSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhY3Rvcnkgb2JqZWN0IHdpdGggcHJvcGVydGllcyBgdHlwZWAsIGBuYW1lYCwgYW5kIGBmYWN0b3J5YCBleHBlY3RlZCcpO1xuICAgIH1cblxuICAgIHZhciBpbmRleCA9IGxlZ2FjeUZhY3Rvcmllcy5pbmRleE9mKGZhY3RvcnkpO1xuICAgIHZhciBpbnN0YW5jZTtcblxuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIC8vIGRvZXNuJ3QgeWV0IGV4aXN0XG4gICAgICBpZiAoZmFjdG9yeS5tYXRoID09PSB0cnVlKSB7XG4gICAgICAgIC8vIHBhc3Mgd2l0aCBtYXRoIG5hbWVzcGFjZVxuICAgICAgICBpbnN0YW5jZSA9IGZhY3RvcnkuZmFjdG9yeShtYXRoLnR5cGUsIGNvbmZpZ0ludGVybmFsLCBsb2FkLCBtYXRoLnR5cGVkLCBtYXRoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluc3RhbmNlID0gZmFjdG9yeS5mYWN0b3J5KG1hdGgudHlwZSwgY29uZmlnSW50ZXJuYWwsIGxvYWQsIG1hdGgudHlwZWQpO1xuICAgICAgfSAvLyBhcHBlbmQgdG8gdGhlIGNhY2hlXG5cblxuICAgICAgbGVnYWN5RmFjdG9yaWVzLnB1c2goZmFjdG9yeSk7XG4gICAgICBsZWdhY3lJbnN0YW5jZXMucHVzaChpbnN0YW5jZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGFscmVhZHkgZXhpc3RpbmcgZnVuY3Rpb24sIHJldHVybiB0aGUgY2FjaGVkIGluc3RhbmNlXG4gICAgICBpbnN0YW5jZSA9IGxlZ2FjeUluc3RhbmNlc1tpbmRleF07XG4gICAgfVxuXG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgdmFyIGltcG9ydGVkRmFjdG9yaWVzID0ge307IC8vIGxvYWQgdGhlIGltcG9ydCBmdW5jdGlvblxuXG4gIGZ1bmN0aW9uIGxhenlUeXBlZCgpIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGgudHlwZWQuYXBwbHkobWF0aC50eXBlZCwgYXJncyk7XG4gIH1cblxuICB2YXIgaW50ZXJuYWxJbXBvcnQgPSAoMCwgX2ltcG9ydC5pbXBvcnRGYWN0b3J5KShsYXp5VHlwZWQsIGxvYWQsIG1hdGgsIGltcG9ydGVkRmFjdG9yaWVzKTtcbiAgbWF0aFtcImltcG9ydFwiXSA9IGludGVybmFsSW1wb3J0OyAvLyBsaXN0ZW4gZm9yIGNoYW5nZXMgaW4gY29uZmlnLCBpbXBvcnQgYWxsIGZ1bmN0aW9ucyBhZ2FpbiB3aGVuIGNoYW5nZWRcbiAgLy8gVE9ETzogbW92ZSB0aGlzIGxpc3RlbmVyIGludG8gdGhlIGltcG9ydCBmdW5jdGlvbj9cblxuICBtYXRoLm9uKCdjb25maWcnLCBmdW5jdGlvbiAoKSB7XG4gICAgKDAsIF9vYmplY3QudmFsdWVzKShpbXBvcnRlZEZhY3RvcmllcykuZm9yRWFjaChmdW5jdGlvbiAoZmFjdG9yeSkge1xuICAgICAgaWYgKGZhY3RvcnkgJiYgZmFjdG9yeS5tZXRhICYmIGZhY3RvcnkubWV0YS5yZWNyZWF0ZU9uQ29uZmlnQ2hhbmdlKSB7XG4gICAgICAgIC8vIEZJWE1FOiBvbmx5IHJlLWNyZWF0ZSB3aGVuIHRoZSBjdXJyZW50IGluc3RhbmNlIGlzIHRoZSBzYW1lIGFzIHdhcyBpbml0aWFsbHkgY3JlYXRlZFxuICAgICAgICAvLyBGSVhNRTogZGVsZXRlIHRoZSBmdW5jdGlvbnMvY29uc3RhbnRzIGJlZm9yZSBpbXBvcnRpbmcgdGhlbSBhZ2Fpbj9cbiAgICAgICAgaW50ZXJuYWxJbXBvcnQoZmFjdG9yeSwge1xuICAgICAgICAgIG92ZXJyaWRlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTsgLy8gdGhlIGNyZWF0ZSBmdW5jdGlvbiBleHBvc2VkIG9uIHRoZSBtYXRoanMgaW5zdGFuY2UgaXMgYm91bmQgdG9cbiAgLy8gdGhlIGZhY3RvcnkgZnVuY3Rpb25zIHBhc3NlZCBiZWZvcmVcblxuICBtYXRoLmNyZWF0ZSA9IGNyZWF0ZS5iaW5kKG51bGwsIGZhY3Rvcmllcyk7IC8vIGV4cG9ydCBmYWN0b3J5IGZ1bmN0aW9uXG5cbiAgbWF0aC5mYWN0b3J5ID0gX2ZhY3RvcnkuZmFjdG9yeTsgLy8gaW1wb3J0IHRoZSBmYWN0b3J5IGZ1bmN0aW9ucyBsaWtlIGNyZWF0ZUFkZCBhcyBhbiBhcnJheSBpbnN0ZWFkIG9mIG9iamVjdCxcbiAgLy8gZWxzZSB0aGV5IHdpbGwgZ2V0IGEgZGlmZmVyZW50IG5hbWluZyAoYGNyZWF0ZUFkZGAgaW5zdGVhZCBvZiBgYWRkYCkuXG5cbiAgbWF0aFtcImltcG9ydFwiXSgoMCwgX29iamVjdC52YWx1ZXMpKCgwLCBfb2JqZWN0LmRlZXBGbGF0dGVuKShmYWN0b3JpZXMpKSk7IC8vIFRPRE86IGRlcHJlY2F0ZWQgc2luY2UgdjYuMC4wLiBDbGVhbiB1cCBzb21lIGRheVxuXG4gIHZhciBtb3ZlZE5hbWVzID0gWyd0eXBlLmlzTnVtYmVyJywgJ3R5cGUuaXNDb21wbGV4JywgJ3R5cGUuaXNCaWdOdW1iZXInLCAndHlwZS5pc0ZyYWN0aW9uJywgJ3R5cGUuaXNVbml0JywgJ3R5cGUuaXNTdHJpbmcnLCAndHlwZS5pc0FycmF5JywgJ3R5cGUuaXNNYXRyaXgnLCAndHlwZS5pc0RlbnNlTWF0cml4JywgJ3R5cGUuaXNTcGFyc2VNYXRyaXgnLCAndHlwZS5pc0NvbGxlY3Rpb24nLCAndHlwZS5pc1JhbmdlJywgJ3R5cGUuaXNJbmRleCcsICd0eXBlLmlzQm9vbGVhbicsICd0eXBlLmlzUmVzdWx0U2V0JywgJ3R5cGUuaXNIZWxwJywgJ3R5cGUuaXNGdW5jdGlvbicsICd0eXBlLmlzRGF0ZScsICd0eXBlLmlzUmVnRXhwJywgJ3R5cGUuaXNPYmplY3QnLCAndHlwZS5pc051bGwnLCAndHlwZS5pc1VuZGVmaW5lZCcsICd0eXBlLmlzQWNjZXNzb3JOb2RlJywgJ3R5cGUuaXNBcnJheU5vZGUnLCAndHlwZS5pc0Fzc2lnbm1lbnROb2RlJywgJ3R5cGUuaXNCbG9ja05vZGUnLCAndHlwZS5pc0NvbmRpdGlvbmFsTm9kZScsICd0eXBlLmlzQ29uc3RhbnROb2RlJywgJ3R5cGUuaXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlJywgJ3R5cGUuaXNGdW5jdGlvbk5vZGUnLCAndHlwZS5pc0luZGV4Tm9kZScsICd0eXBlLmlzTm9kZScsICd0eXBlLmlzT2JqZWN0Tm9kZScsICd0eXBlLmlzT3BlcmF0b3JOb2RlJywgJ3R5cGUuaXNQYXJlbnRoZXNpc05vZGUnLCAndHlwZS5pc1JhbmdlTm9kZScsICd0eXBlLmlzU3ltYm9sTm9kZScsICd0eXBlLmlzQ2hhaW4nLCAndHlwZS5CaWdOdW1iZXInLCAndHlwZS5DaGFpbicsICd0eXBlLkNvbXBsZXgnLCAndHlwZS5GcmFjdGlvbicsICd0eXBlLk1hdHJpeCcsICd0eXBlLkRlbnNlTWF0cml4JywgJ3R5cGUuU3BhcnNlTWF0cml4JywgJ3R5cGUuU3BhJywgJ3R5cGUuRmlib25hY2NpSGVhcCcsICd0eXBlLkltbXV0YWJsZURlbnNlTWF0cml4JywgJ3R5cGUuSW5kZXgnLCAndHlwZS5SYW5nZScsICd0eXBlLlJlc3VsdFNldCcsICd0eXBlLlVuaXQnLCAndHlwZS5IZWxwJywgJ3R5cGUuUGFyc2VyJywgJ2V4cHJlc3Npb24ucGFyc2UnLCAnZXhwcmVzc2lvbi5QYXJzZXInLCAnZXhwcmVzc2lvbi5ub2RlLkFjY2Vzc29yTm9kZScsICdleHByZXNzaW9uLm5vZGUuQXJyYXlOb2RlJywgJ2V4cHJlc3Npb24ubm9kZS5Bc3NpZ25tZW50Tm9kZScsICdleHByZXNzaW9uLm5vZGUuQmxvY2tOb2RlJywgJ2V4cHJlc3Npb24ubm9kZS5Db25kaXRpb25hbE5vZGUnLCAnZXhwcmVzc2lvbi5ub2RlLkNvbnN0YW50Tm9kZScsICdleHByZXNzaW9uLm5vZGUuSW5kZXhOb2RlJywgJ2V4cHJlc3Npb24ubm9kZS5GdW5jdGlvbkFzc2lnbm1lbnROb2RlJywgJ2V4cHJlc3Npb24ubm9kZS5GdW5jdGlvbk5vZGUnLCAnZXhwcmVzc2lvbi5ub2RlLk5vZGUnLCAnZXhwcmVzc2lvbi5ub2RlLk9iamVjdE5vZGUnLCAnZXhwcmVzc2lvbi5ub2RlLk9wZXJhdG9yTm9kZScsICdleHByZXNzaW9uLm5vZGUuUGFyZW50aGVzaXNOb2RlJywgJ2V4cHJlc3Npb24ubm9kZS5SYW5nZU5vZGUnLCAnZXhwcmVzc2lvbi5ub2RlLlJlbGF0aW9uYWxOb2RlJywgJ2V4cHJlc3Npb24ubm9kZS5TeW1ib2xOb2RlJywgJ2pzb24ucmV2aXZlcicsICdlcnJvci5Bcmd1bWVudHNFcnJvcicsICdlcnJvci5EaW1lbnNpb25FcnJvcicsICdlcnJvci5JbmRleEVycm9yJ107XG4gIG1vdmVkTmFtZXMuZm9yRWFjaChmdW5jdGlvbiAoZnVsbE5hbWUpIHtcbiAgICB2YXIgcGFydHMgPSBmdWxsTmFtZS5zcGxpdCgnLicpO1xuICAgIHZhciBwYXRoID0gKDAsIF9hcnJheS5pbml0aWFsKShwYXJ0cyk7XG4gICAgdmFyIG5hbWUgPSAoMCwgX2FycmF5Lmxhc3QpKHBhcnRzKTtcbiAgICB2YXIgb2JqID0gKDAsIF9vYmplY3QudHJhdmVyc2UpKG1hdGgsIHBhdGgpO1xuICAgICgwLCBfb2JqZWN0LmxhenkpKG9iaiwgbmFtZSwgZnVuY3Rpb24gKCkge1xuICAgICAgKDAsIF9sb2cud2Fybk9uY2UpKFwibWF0aC5cIi5jb25jYXQoZnVsbE5hbWUsIFwiIGlzIG1vdmVkIHRvIG1hdGguXCIpLmNvbmNhdChuYW1lLCBcIiBpbiB2Ni4wLjAuIFwiKSArICdQbGVhc2UgdXNlIHRoZSBuZXcgbG9jYXRpb24gaW5zdGVhZC4nKTtcbiAgICAgIHJldHVybiBtYXRoW25hbWVdO1xuICAgIH0pO1xuICB9KTtcbiAgKDAsIF9vYmplY3QubGF6eSkobWF0aC5leHByZXNzaW9uLCAnZG9jcycsIGZ1bmN0aW9uICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21hdGguZXhwcmVzc2lvbi5kb2NzIGhhcyBiZWVuIG1vdmVkLiAnICsgJ1BsZWFzZSBpbXBvcnQgdmlhIFwiaW1wb3J0IHsgZG9jcyB9IGZyb20gXFwnbWF0aGpzXFwnXCInKTtcbiAgfSk7XG4gIG1hdGguQXJndW1lbnRzRXJyb3IgPSBfQXJndW1lbnRzRXJyb3IuQXJndW1lbnRzRXJyb3I7XG4gIG1hdGguRGltZW5zaW9uRXJyb3IgPSBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3I7XG4gIG1hdGguSW5kZXhFcnJvciA9IF9JbmRleEVycm9yLkluZGV4RXJyb3I7XG4gIHJldHVybiBtYXRoO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb25maWdGYWN0b3J5ID0gY29uZmlnRmFjdG9yeTtcbmV4cG9ydHMuTlVNQkVSX09QVElPTlMgPSBleHBvcnRzLk1BVFJJWF9PUFRJT05TID0gdm9pZCAwO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfY29uZmlnMiA9IHJlcXVpcmUoXCIuLi9jb25maWdcIik7XG5cbnZhciBNQVRSSVhfT1BUSU9OUyA9IFsnTWF0cml4JywgJ0FycmF5J107IC8vIHZhbGlkIHZhbHVlcyBmb3Igb3B0aW9uIG1hdHJpeFxuXG5leHBvcnRzLk1BVFJJWF9PUFRJT05TID0gTUFUUklYX09QVElPTlM7XG52YXIgTlVNQkVSX09QVElPTlMgPSBbJ251bWJlcicsICdCaWdOdW1iZXInLCAnRnJhY3Rpb24nXTsgLy8gdmFsaWQgdmFsdWVzIGZvciBvcHRpb24gbnVtYmVyXG5cbmV4cG9ydHMuTlVNQkVSX09QVElPTlMgPSBOVU1CRVJfT1BUSU9OUztcblxuZnVuY3Rpb24gY29uZmlnRmFjdG9yeShjb25maWcsIGVtaXQpIHtcbiAgLyoqXG4gICAqIFNldCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIG1hdGguanMsIGFuZCBnZXQgY3VycmVudCBvcHRpb25zLlxuICAgKiBXaWxsIGVtaXQgYSAnY29uZmlnJyBldmVudCwgd2l0aCBhcmd1bWVudHMgKGN1cnIsIHByZXYsIGNoYW5nZXMpLlxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYXZhaWxhYmxlIG9uIGEgbWF0aGpzIGluc3RhbmNlIGNyZWF0ZWQgdXNpbmcgYGNyZWF0ZWAuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguY29uZmlnKGNvbmZpZzogT2JqZWN0KTogT2JqZWN0XG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKlxuICAgKiAgICAgaW1wb3J0IHsgY3JlYXRlLCBhbGwgfSBmcm9tICdtYXRoanMnXG4gICAqXG4gICAqICAgICAvLyBjcmVhdGUgYSBtYXRoanMgaW5zdGFuY2VcbiAgICogICAgIGNvbnN0IG1hdGggPSBjcmVhdGUoYWxsKVxuICAgKlxuICAgKiAgICAgbWF0aC5jb25maWcoKS5udW1iZXIgICAgICAgICAgICAgICAgLy8gb3V0cHV0cyAnbnVtYmVyJ1xuICAgKiAgICAgbWF0aC5ldmFsdWF0ZSgnMC40JykgICAgICAgICAgICAgICAgLy8gb3V0cHV0cyBudW1iZXIgMC40XG4gICAqICAgICBtYXRoLmNvbmZpZyh7bnVtYmVyOiAnRnJhY3Rpb24nfSlcbiAgICogICAgIG1hdGguZXZhbHVhdGUoJzAuNCcpICAgICAgICAgICAgICAgIC8vIG91dHB1dHMgRnJhY3Rpb24gMi81XG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gQXZhaWxhYmxlIG9wdGlvbnM6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtudW1iZXJ9IGVwc2lsb25cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNaW5pbXVtIHJlbGF0aXZlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d29cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJlZCB2YWx1ZXMsIHVzZWQgYnkgYWxsIGNvbXBhcmlzb24gZnVuY3Rpb25zLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nfSBtYXRyaXhcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIHN0cmluZyAnTWF0cml4JyAoZGVmYXVsdCkgb3IgJ0FycmF5Jy5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0cmluZ30gbnVtYmVyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQSBzdHJpbmcgJ251bWJlcicgKGRlZmF1bHQpLCAnQmlnTnVtYmVyJywgb3IgJ0ZyYWN0aW9uJ1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bnVtYmVyfSBwcmVjaXNpb25cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cyBmb3IgQmlnTnVtYmVycy5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3QgYXBwbGljYWJsZSBmb3IgTnVtYmVycy5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0cmluZ30gcGFyZW50aGVzaXNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3cgdG8gZGlzcGxheSBwYXJlbnRoZXNlcyBpbiBMYVRlWCBhbmQgc3RyaW5nXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nfSByYW5kb21TZWVkXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmFuZG9tIHNlZWQgZm9yIHNlZWRlZCBwc2V1ZG8gcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0IHRvIG51bGwgdG8gcmFuZG9tbHkgc2VlZC5cbiAgICogQHJldHVybiB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIGZ1bmN0aW9uIF9jb25maWcob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICB2YXIgcHJldiA9ICgwLCBfb2JqZWN0Lm1hcE9iamVjdCkoY29uZmlnLCBfb2JqZWN0LmNsb25lKTsgLy8gdmFsaWRhdGUgc29tZSBvZiB0aGUgb3B0aW9uc1xuXG4gICAgICB2YWxpZGF0ZU9wdGlvbihvcHRpb25zLCAnbWF0cml4JywgTUFUUklYX09QVElPTlMpO1xuICAgICAgdmFsaWRhdGVPcHRpb24ob3B0aW9ucywgJ251bWJlcicsIE5VTUJFUl9PUFRJT05TKTsgLy8gbWVyZ2Ugb3B0aW9uc1xuXG4gICAgICAoMCwgX29iamVjdC5kZWVwRXh0ZW5kKShjb25maWcsIG9wdGlvbnMpO1xuICAgICAgdmFyIGN1cnIgPSAoMCwgX29iamVjdC5tYXBPYmplY3QpKGNvbmZpZywgX29iamVjdC5jbG9uZSk7XG4gICAgICB2YXIgY2hhbmdlcyA9ICgwLCBfb2JqZWN0Lm1hcE9iamVjdCkob3B0aW9ucywgX29iamVjdC5jbG9uZSk7IC8vIGVtaXQgJ2NvbmZpZycgZXZlbnRcblxuICAgICAgZW1pdCgnY29uZmlnJywgY3VyciwgcHJldiwgY2hhbmdlcyk7XG4gICAgICByZXR1cm4gY3VycjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICgwLCBfb2JqZWN0Lm1hcE9iamVjdCkoY29uZmlnLCBfb2JqZWN0LmNsb25lKTtcbiAgICB9XG4gIH0gLy8gYXR0YWNoIHRoZSB2YWxpZCBvcHRpb25zIHRvIHRoZSBmdW5jdGlvbiBzbyB0aGV5IGNhbiBiZSBleHRlbmRlZFxuXG5cbiAgX2NvbmZpZy5NQVRSSVhfT1BUSU9OUyA9IE1BVFJJWF9PUFRJT05TO1xuICBfY29uZmlnLk5VTUJFUl9PUFRJT05TID0gTlVNQkVSX09QVElPTlM7IC8vIGF0dGFjaCB0aGUgY29uZmlnIHByb3BlcnRpZXMgYXMgcmVhZG9ubHkgcHJvcGVydGllcyB0byB0aGUgY29uZmlnIGZ1bmN0aW9uXG5cbiAgT2JqZWN0LmtleXMoX2NvbmZpZzIuREVGQVVMVF9DT05GSUcpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY29uZmlnLCBrZXksIHtcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gY29uZmlnW2tleV07XG4gICAgICB9LFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIF9jb25maWc7XG59XG4vKipcbiAqIFRlc3Qgd2hldGhlciBhbiBBcnJheSBjb250YWlucyBhIHNwZWNpZmljIGl0ZW0uXG4gKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBhcnJheVxuICogQHBhcmFtIHtzdHJpbmd9IGl0ZW1cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cblxuXG5mdW5jdGlvbiBjb250YWlucyhhcnJheSwgaXRlbSkge1xuICByZXR1cm4gYXJyYXkuaW5kZXhPZihpdGVtKSAhPT0gLTE7XG59XG4vKipcbiAqIEZpbmQgYSBzdHJpbmcgaW4gYW4gYXJyYXkuIENhc2UgaW5zZW5zaXRpdmUgc2VhcmNoXG4gKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBhcnJheVxuICogQHBhcmFtIHtzdHJpbmd9IGl0ZW1cbiAqIEByZXR1cm4ge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggd2hlbiBmb3VuZC4gUmV0dXJucyAtMSB3aGVuIG5vdCBmb3VuZFxuICovXG5cblxuZnVuY3Rpb24gZmluZEluZGV4KGFycmF5LCBpdGVtKSB7XG4gIHJldHVybiBhcnJheS5tYXAoZnVuY3Rpb24gKGkpIHtcbiAgICByZXR1cm4gaS50b0xvd2VyQ2FzZSgpO1xuICB9KS5pbmRleE9mKGl0ZW0udG9Mb3dlckNhc2UoKSk7XG59XG4vKipcbiAqIFZhbGlkYXRlIGFuIG9wdGlvblxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgICAgICAgICBPYmplY3Qgd2l0aCBvcHRpb25zXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAgICAgICAgICAgIE5hbWUgb2YgdGhlIG9wdGlvbiB0byB2YWxpZGF0ZVxuICogQHBhcmFtIHtBcnJheS48c3RyaW5nPn0gdmFsdWVzICBBcnJheSB3aXRoIHZhbGlkIHZhbHVlcyBmb3IgdGhpcyBvcHRpb25cbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlT3B0aW9uKG9wdGlvbnMsIG5hbWUsIHZhbHVlcykge1xuICBpZiAob3B0aW9uc1tuYW1lXSAhPT0gdW5kZWZpbmVkICYmICFjb250YWlucyh2YWx1ZXMsIG9wdGlvbnNbbmFtZV0pKSB7XG4gICAgdmFyIGluZGV4ID0gZmluZEluZGV4KHZhbHVlcywgb3B0aW9uc1tuYW1lXSk7XG5cbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAvLyByaWdodCB2YWx1ZSwgd3JvbmcgY2FzaW5nXG4gICAgICAvLyBUT0RPOiBsb3dlciBjYXNlIHZhbHVlcyBhcmUgZGVwcmVjYXRlZCBzaW5jZSB2MywgcmVtb3ZlIHRoaXMgd2FybmluZyBzb21lIGRheS5cbiAgICAgIGNvbnNvbGUud2FybignV2FybmluZzogV3JvbmcgY2FzaW5nIGZvciBjb25maWd1cmF0aW9uIG9wdGlvbiBcIicgKyBuYW1lICsgJ1wiLCBzaG91bGQgYmUgXCInICsgdmFsdWVzW2luZGV4XSArICdcIiBpbnN0ZWFkIG9mIFwiJyArIG9wdGlvbnNbbmFtZV0gKyAnXCIuJyk7XG4gICAgICBvcHRpb25zW25hbWVdID0gdmFsdWVzW2luZGV4XTsgLy8gY2hhbmdlIHRoZSBvcHRpb24gdG8gdGhlIHJpZ2h0IGNhc2luZ1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB1bmtub3duIHZhbHVlXG4gICAgICBjb25zb2xlLndhcm4oJ1dhcm5pbmc6IFVua25vd24gdmFsdWUgXCInICsgb3B0aW9uc1tuYW1lXSArICdcIiBmb3IgY29uZmlndXJhdGlvbiBvcHRpb24gXCInICsgbmFtZSArICdcIi4gQXZhaWxhYmxlIG9wdGlvbnM6ICcgKyB2YWx1ZXMubWFwKEpTT04uc3RyaW5naWZ5KS5qb2luKCcsICcpICsgJy4nKTtcbiAgICB9XG4gIH1cbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRGVwcmVjYXRlZEltcG9ydCA9IGNyZWF0ZURlcHJlY2F0ZWRJbXBvcnQ7XG5cbmZ1bmN0aW9uIGNyZWF0ZURlcHJlY2F0ZWRJbXBvcnQoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBkZXByZWNhdGVkSW1wb3J0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIGdsb2JhbCBpbXBvcnQgZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZSBhbnltb3JlIGluIHY2LjAuMC4gXFxuJyArICdQbGVhc2UgY3JlYXRlIGEgbWF0aGpzIGluc3RhbmNlIGlmIHlvdSB3YW50IHRvIGltcG9ydCBmdW5jdGlvbnMuIFxcbicgKyAnRXhhbXBsZTpcXG4nICsgJ1xcbicgKyAnICBpbXBvcnQgeyBjcmVhdGUsIGFsbCB9IGZyb20gXFwnbWF0aGpzXFwnO1xcbicgKyAnICBjb25zdCBtYXRoanMgPSBjcmVhdGUoYWxsKTtcXG4nICsgJyAgbWF0aGpzLmltcG9ydCguLi4pO1xcbicpO1xuICB9O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pbXBvcnRGYWN0b3J5ID0gaW1wb3J0RmFjdG9yeTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9Bcmd1bWVudHNFcnJvciA9IHJlcXVpcmUoXCIuLi8uLi9lcnJvci9Bcmd1bWVudHNFcnJvclwiKTtcblxudmFyIF9sb2cgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbG9nXCIpO1xuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIGltcG9ydEZhY3RvcnkodHlwZWQsIGxvYWQsIG1hdGgsIGltcG9ydGVkRmFjdG9yaWVzKSB7XG4gIC8qKlxuICAgKiBJbXBvcnQgZnVuY3Rpb25zIGZyb20gYW4gb2JqZWN0IG9yIGEgbW9kdWxlLlxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYXZhaWxhYmxlIG9uIGEgbWF0aGpzIGluc3RhbmNlIGNyZWF0ZWQgdXNpbmcgYGNyZWF0ZWAuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5pbXBvcnQoZnVuY3Rpb25zKVxuICAgKiAgICBtYXRoLmltcG9ydChmdW5jdGlvbnMsIG9wdGlvbnMpXG4gICAqXG4gICAqIFdoZXJlOlxuICAgKlxuICAgKiAtIGBmdW5jdGlvbnM6IE9iamVjdGBcbiAgICogICBBbiBvYmplY3Qgd2l0aCBmdW5jdGlvbnMgb3IgZmFjdG9yaWVzIHRvIGJlIGltcG9ydGVkLlxuICAgKiAtIGBvcHRpb25zOiBPYmplY3RgIEFuIG9iamVjdCB3aXRoIGltcG9ydCBvcHRpb25zLiBBdmFpbGFibGUgb3B0aW9uczpcbiAgICogICAtIGBvdmVycmlkZTogYm9vbGVhbmBcbiAgICogICAgIElmIHRydWUsIGV4aXN0aW5nIGZ1bmN0aW9ucyB3aWxsIGJlIG92ZXJ3cml0dGVuLiBGYWxzZSBieSBkZWZhdWx0LlxuICAgKiAgIC0gYHNpbGVudDogYm9vbGVhbmBcbiAgICogICAgIElmIHRydWUsIHRoZSBmdW5jdGlvbiB3aWxsIG5vdCB0aHJvdyBlcnJvcnMgb24gZHVwbGljYXRlcyBvciBpbnZhbGlkXG4gICAqICAgICB0eXBlcy4gRmFsc2UgYnkgZGVmYXVsdC5cbiAgICogICAtIGB3cmFwOiBib29sZWFuYFxuICAgKiAgICAgSWYgdHJ1ZSwgdGhlIGZ1bmN0aW9ucyB3aWxsIGJlIHdyYXBwZWQgaW4gYSB3cmFwcGVyIGZ1bmN0aW9uXG4gICAqICAgICB3aGljaCBjb252ZXJ0cyBkYXRhIHR5cGVzIGxpa2UgTWF0cml4IHRvIHByaW1pdGl2ZSBkYXRhIHR5cGVzIGxpa2UgQXJyYXkuXG4gICAqICAgICBUaGUgd3JhcHBlciBpcyBuZWVkZWQgd2hlbiBleHRlbmRpbmcgbWF0aC5qcyB3aXRoIGxpYnJhcmllcyB3aGljaCBkbyBub3RcbiAgICogICAgIHN1cHBvcnQgdGhlc2UgZGF0YSB0eXBlLiBGYWxzZSBieSBkZWZhdWx0LlxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgaW1wb3J0IHsgY3JlYXRlLCBhbGwgfSBmcm9tICdtYXRoanMnXG4gICAqICAgIGltcG9ydCAqIGFzIG51bWJlcnMgZnJvbSAnbnVtYmVycydcbiAgICpcbiAgICogICAgLy8gY3JlYXRlIGEgbWF0aGpzIGluc3RhbmNlXG4gICAqICAgIGNvbnN0IG1hdGggPSBjcmVhdGUoYWxsKVxuICAgKlxuICAgKiAgICAvLyBkZWZpbmUgbmV3IGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzXG4gICAqICAgIG1hdGguaW1wb3J0KHtcbiAgICogICAgICBteXZhbHVlOiA0MixcbiAgICogICAgICBoZWxsbzogZnVuY3Rpb24gKG5hbWUpIHtcbiAgICogICAgICAgIHJldHVybiAnaGVsbG8sICcgKyBuYW1lICsgJyEnXG4gICAqICAgICAgfVxuICAgKiAgICB9KVxuICAgKlxuICAgKiAgICAvLyB1c2UgdGhlIGltcG9ydGVkIGZ1bmN0aW9uIGFuZCB2YXJpYWJsZVxuICAgKiAgICBtYXRoLm15dmFsdWUgKiAyICAgICAgICAgICAgICAgLy8gODRcbiAgICogICAgbWF0aC5oZWxsbygndXNlcicpICAgICAgICAgICAgIC8vICdoZWxsbywgdXNlciEnXG4gICAqXG4gICAqICAgIC8vIGltcG9ydCB0aGUgbnBtIG1vZHVsZSAnbnVtYmVycydcbiAgICogICAgLy8gKG11c3QgYmUgaW5zdGFsbGVkIGZpcnN0IHdpdGggYG5wbSBpbnN0YWxsIG51bWJlcnNgKVxuICAgKiAgICBtYXRoLmltcG9ydChudW1iZXJzLCB7d3JhcDogdHJ1ZX0pXG4gICAqXG4gICAqICAgIG1hdGguZmlib25hY2NpKDcpIC8vIHJldHVybnMgMTNcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3QgfCBBcnJheX0gZnVuY3Rpb25zICBPYmplY3Qgd2l0aCBmdW5jdGlvbnMgdG8gYmUgaW1wb3J0ZWQuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gICAgICAgICAgSW1wb3J0IG9wdGlvbnMuXG4gICAqL1xuICBmdW5jdGlvbiBtYXRoSW1wb3J0KGZ1bmN0aW9ucywgb3B0aW9ucykge1xuICAgIHZhciBudW0gPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgaWYgKG51bSAhPT0gMSAmJiBudW0gIT09IDIpIHtcbiAgICAgIHRocm93IG5ldyBfQXJndW1lbnRzRXJyb3IuQXJndW1lbnRzRXJyb3IoJ2ltcG9ydCcsIG51bSwgMSwgMik7XG4gICAgfVxuXG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmxhdHRlbkltcG9ydHMoZmxhdFZhbHVlcywgdmFsdWUsIG5hbWUpIHtcbiAgICAgIGlmICgoMCwgX29iamVjdC5pc0xlZ2FjeUZhY3RvcnkpKHZhbHVlKSkge1xuICAgICAgICAvLyBsZWdhY3kgZmFjdG9yaWVzIGRvbid0IGFsd2F5cyBoYXZlIGEgbmFtZSxcbiAgICAgICAgLy8gbGV0J3Mgbm90IGhhbmRsZSB0aGVtIHZpYSB0aGUgbmV3IGZsYXRWYWx1ZXNcbiAgICAgICAgX2ltcG9ydExlZ2FjeUZhY3RvcnkodmFsdWUsIG9wdGlvbnMpO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIGZsYXR0ZW5JbXBvcnRzKGZsYXRWYWx1ZXMsIGl0ZW0pO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoX3R5cGVvZih2YWx1ZSkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGZvciAodmFyIF9uYW1lIGluIHZhbHVlKSB7XG4gICAgICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KSh2YWx1ZSwgX25hbWUpKSB7XG4gICAgICAgICAgICBmbGF0dGVuSW1wb3J0cyhmbGF0VmFsdWVzLCB2YWx1ZVtfbmFtZV0sIF9uYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoKDAsIF9mYWN0b3J5LmlzRmFjdG9yeSkodmFsdWUpIHx8IG5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YXIgZmxhdE5hbWUgPSAoMCwgX2ZhY3RvcnkuaXNGYWN0b3J5KSh2YWx1ZSkgPyBpc1RyYW5zZm9ybUZ1bmN0aW9uRmFjdG9yeSh2YWx1ZSkgPyB2YWx1ZS5mbiArICcudHJhbnNmb3JtJyA6IC8vIFRPRE86IHRoaXMgaXMgdWdseVxuICAgICAgICB2YWx1ZS5mbiA6IG5hbWU7IC8vIHdlIGFsbG93IGltcG9ydGluZyB0aGUgc2FtZSBmdW5jdGlvbiB0d2ljZSBpZiBpdCBwb2ludHMgdG8gdGhlIHNhbWUgaW1wbGVtZW50YXRpb25cblxuICAgICAgICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKGZsYXRWYWx1ZXMsIGZsYXROYW1lKSAmJiBmbGF0VmFsdWVzW2ZsYXROYW1lXSAhPT0gdmFsdWUgJiYgIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW1wb3J0IFwiJyArIGZsYXROYW1lICsgJ1wiIHR3aWNlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBmbGF0VmFsdWVzW2ZsYXROYW1lXSA9IHZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ZhY3RvcnksIE9iamVjdCwgb3IgQXJyYXkgZXhwZWN0ZWQnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBmbGF0VmFsdWVzID0ge307XG4gICAgZmxhdHRlbkltcG9ydHMoZmxhdFZhbHVlcywgZnVuY3Rpb25zKTtcblxuICAgIGZvciAodmFyIG5hbWUgaW4gZmxhdFZhbHVlcykge1xuICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShmbGF0VmFsdWVzLCBuYW1lKSkge1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnaW1wb3J0JywgbmFtZSlcbiAgICAgICAgdmFyIHZhbHVlID0gZmxhdFZhbHVlc1tuYW1lXTtcblxuICAgICAgICBpZiAoKDAsIF9mYWN0b3J5LmlzRmFjdG9yeSkodmFsdWUpKSB7XG4gICAgICAgICAgLy8gd2UgaWdub3JlIG5hbWUgaGVyZSBhbmQgZW5mb3JjZSB0aGUgbmFtZSBvZiB0aGUgZmFjdG9yeVxuICAgICAgICAgIC8vIG1heWJlIGF0IHNvbWUgcG9pbnQgd2UgZG8gd2FudCB0byBhbGxvdyBvdmVycmlkaW5nIGl0XG4gICAgICAgICAgLy8gaW4gdGhhdCBjYXNlIHdlIGNhbiBpbXBsZW1lbnQgYW4gb3B0aW9uIG92ZXJyaWRlRmFjdG9yeU5hbWVzOiB0cnVlXG4gICAgICAgICAgX2ltcG9ydEZhY3RvcnkodmFsdWUsIG9wdGlvbnMpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzU3VwcG9ydGVkVHlwZSh2YWx1ZSkpIHtcbiAgICAgICAgICBfaW1wb3J0KG5hbWUsIHZhbHVlLCBvcHRpb25zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGYWN0b3J5LCBPYmplY3QsIG9yIEFycmF5IGV4cGVjdGVkJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBBZGQgYSBwcm9wZXJ0eSB0byB0aGUgbWF0aCBuYW1lc3BhY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAgU2VlIGltcG9ydCBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgb3B0aW9uc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9pbXBvcnQobmFtZSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgICAvLyBUT0RPOiByZWZhY3RvciB0aGlzIGZ1bmN0aW9uLCBpdCdzIHRvIGNvbXBsaWNhdGVkIGFuZCBjb250YWlucyBkdXBsaWNhdGUgY29kZVxuICAgIGlmIChvcHRpb25zLndyYXAgJiYgdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBjcmVhdGUgYSB3cmFwcGVyIGFyb3VuZCB0aGUgZnVuY3Rpb25cbiAgICAgIHZhbHVlID0gX3dyYXAodmFsdWUpO1xuICAgIH0gLy8gdHVybiBhIHBsYWluIGZ1bmN0aW9uIHdpdGggYSB0eXBlZC1mdW5jdGlvbiBzaWduYXR1cmUgaW50byBhIHR5cGVkLWZ1bmN0aW9uXG5cblxuICAgIGlmIChoYXNUeXBlZEZ1bmN0aW9uU2lnbmF0dXJlKHZhbHVlKSkge1xuICAgICAgdmFsdWUgPSB0eXBlZChuYW1lLCBfZGVmaW5lUHJvcGVydHkoe30sIHZhbHVlLnNpZ25hdHVyZSwgdmFsdWUpKTtcbiAgICB9XG5cbiAgICBpZiAoaXNUeXBlZEZ1bmN0aW9uKG1hdGhbbmFtZV0pICYmIGlzVHlwZWRGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgIGlmIChvcHRpb25zLm92ZXJyaWRlKSB7XG4gICAgICAgIC8vIGdpdmUgdGhlIHR5cGVkIGZ1bmN0aW9uIHRoZSByaWdodCBuYW1lXG4gICAgICAgIHZhbHVlID0gdHlwZWQobmFtZSwgdmFsdWUuc2lnbmF0dXJlcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBtZXJnZSB0aGUgZXhpc3RpbmcgYW5kIHR5cGVkIGZ1bmN0aW9uXG4gICAgICAgIHZhbHVlID0gdHlwZWQobWF0aFtuYW1lXSwgdmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBtYXRoW25hbWVdID0gdmFsdWU7XG4gICAgICBkZWxldGUgaW1wb3J0ZWRGYWN0b3JpZXNbbmFtZV07XG5cbiAgICAgIF9pbXBvcnRUcmFuc2Zvcm0obmFtZSwgdmFsdWUpO1xuXG4gICAgICBtYXRoLmVtaXQoJ2ltcG9ydCcsIG5hbWUsIGZ1bmN0aW9uIHJlc29sdmVyKCkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAobWF0aFtuYW1lXSA9PT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMub3ZlcnJpZGUpIHtcbiAgICAgIG1hdGhbbmFtZV0gPSB2YWx1ZTtcbiAgICAgIGRlbGV0ZSBpbXBvcnRlZEZhY3Rvcmllc1tuYW1lXTtcblxuICAgICAgX2ltcG9ydFRyYW5zZm9ybShuYW1lLCB2YWx1ZSk7XG5cbiAgICAgIG1hdGguZW1pdCgnaW1wb3J0JywgbmFtZSwgZnVuY3Rpb24gcmVzb2x2ZXIoKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGltcG9ydCBcIicgKyBuYW1lICsgJ1wiOiBhbHJlYWR5IGV4aXN0cycpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIF9pbXBvcnRUcmFuc2Zvcm0obmFtZSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlLnRyYW5zZm9ybSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbWF0aC5leHByZXNzaW9uLnRyYW5zZm9ybVtuYW1lXSA9IHZhbHVlLnRyYW5zZm9ybTtcblxuICAgICAgaWYgKGFsbG93ZWRJbkV4cHJlc3Npb25zKG5hbWUpKSB7XG4gICAgICAgIG1hdGguZXhwcmVzc2lvbi5tYXRoV2l0aFRyYW5zZm9ybVtuYW1lXSA9IHZhbHVlLnRyYW5zZm9ybTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gcmVtb3ZlIGV4aXN0aW5nIHRyYW5zZm9ybVxuICAgICAgZGVsZXRlIG1hdGguZXhwcmVzc2lvbi50cmFuc2Zvcm1bbmFtZV07XG5cbiAgICAgIGlmIChhbGxvd2VkSW5FeHByZXNzaW9ucyhuYW1lKSkge1xuICAgICAgICBtYXRoLmV4cHJlc3Npb24ubWF0aFdpdGhUcmFuc2Zvcm1bbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBfZGVsZXRlVHJhbnNmb3JtKG5hbWUpIHtcbiAgICBkZWxldGUgbWF0aC5leHByZXNzaW9uLnRyYW5zZm9ybVtuYW1lXTtcblxuICAgIGlmIChhbGxvd2VkSW5FeHByZXNzaW9ucyhuYW1lKSkge1xuICAgICAgbWF0aC5leHByZXNzaW9uLm1hdGhXaXRoVHJhbnNmb3JtW25hbWVdID0gbWF0aFtuYW1lXTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIG1hdGguZXhwcmVzc2lvbi5tYXRoV2l0aFRyYW5zZm9ybVtuYW1lXTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHdyYXBwZXIgYSByb3VuZCBhbiBmdW5jdGlvbiB3aGljaCBjb252ZXJ0cyB0aGUgYXJndW1lbnRzXG4gICAqIHRvIHRoZWlyIHByaW1pdGl2ZSB2YWx1ZXMgKGxpa2UgY29udmVydCBhIE1hdHJpeCB0byBBcnJheSlcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAgICogQHJldHVybiB7RnVuY3Rpb259IFJldHVybnMgdGhlIHdyYXBwZWQgZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBfd3JhcChmbikge1xuICAgIHZhciB3cmFwcGVyID0gZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICAgIHZhciBhcmdzID0gW107XG5cbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgdmFyIGFyZyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgYXJnc1tpXSA9IGFyZyAmJiBhcmcudmFsdWVPZigpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm4uYXBwbHkobWF0aCwgYXJncyk7XG4gICAgfTtcblxuICAgIGlmIChmbi50cmFuc2Zvcm0pIHtcbiAgICAgIHdyYXBwZXIudHJhbnNmb3JtID0gZm4udHJhbnNmb3JtO1xuICAgIH1cblxuICAgIHJldHVybiB3cmFwcGVyO1xuICB9XG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gaW5zdGFuY2Ugb2YgYSBmYWN0b3J5IGludG8gbWF0aC5qc1xuICAgKiBAcGFyYW0ge3tmYWN0b3J5OiBGdW5jdGlvbiwgbmFtZTogc3RyaW5nLCBwYXRoOiBzdHJpbmcsIG1hdGg6IGJvb2xlYW59fSBmYWN0b3J5XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zICBTZWUgaW1wb3J0IGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBvcHRpb25zXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICAvLyBUT0RPOiBfaW1wb3J0TGVnYWN5RmFjdG9yeSBpcyBkZXByZWNhdGVkIHNpbmNlIHY2LjAuMCwgY2xlYW4gdXAgc29tZSBkYXlcblxuXG4gIGZ1bmN0aW9uIF9pbXBvcnRMZWdhY3lGYWN0b3J5KGZhY3RvcnksIG9wdGlvbnMpIHtcbiAgICAoMCwgX2xvZy53YXJuT25jZSkoJ0ZhY3RvcmllcyBvZiB0eXBlIHsgbmFtZSwgZmFjdG9yeSB9IGFyZSBkZXByZWNhdGVkIHNpbmNlIHY2LiAnICsgJ1BsZWFzZSBjcmVhdGUgeW91ciBmYWN0b3J5IGZ1bmN0aW9ucyB1c2luZyB0aGUgbWF0aC5mYWN0b3J5IGZ1bmN0aW9uLicpO1xuXG4gICAgaWYgKHR5cGVvZiBmYWN0b3J5Lm5hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICB2YXIgbmFtZSA9IGZhY3RvcnkubmFtZTtcbiAgICAgIHZhciBleGlzdGluZ1RyYW5zZm9ybSA9IChuYW1lIGluIG1hdGguZXhwcmVzc2lvbi50cmFuc2Zvcm0pO1xuICAgICAgdmFyIG5hbWVzcGFjZSA9IGZhY3RvcnkucGF0aCA/ICgwLCBfb2JqZWN0LnRyYXZlcnNlKShtYXRoLCBmYWN0b3J5LnBhdGgpIDogbWF0aDtcbiAgICAgIHZhciBleGlzdGluZyA9ICgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShuYW1lc3BhY2UsIG5hbWUpID8gbmFtZXNwYWNlW25hbWVdIDogdW5kZWZpbmVkO1xuXG4gICAgICB2YXIgcmVzb2x2ZXIgPSBmdW5jdGlvbiByZXNvbHZlcigpIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gbG9hZChmYWN0b3J5KTtcblxuICAgICAgICBpZiAoaW5zdGFuY2UgJiYgdHlwZW9mIGluc3RhbmNlLnRyYW5zZm9ybSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVHJhbnNmb3JtcyBjYW5ub3QgYmUgYXR0YWNoZWQgdG8gZmFjdG9yeSBmdW5jdGlvbnMuICcgKyAnUGxlYXNlIGNyZWF0ZSBhIHNlcGFyYXRlIGZ1bmN0aW9uIGZvciBpdCB3aXRoIGV4cG9ydHMucGF0aD1cImV4cHJlc3Npb24udHJhbnNmb3JtXCInKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc1R5cGVkRnVuY3Rpb24oZXhpc3RpbmcpICYmIGlzVHlwZWRGdW5jdGlvbihpbnN0YW5jZSkpIHtcbiAgICAgICAgICBpZiAob3B0aW9ucy5vdmVycmlkZSkgey8vIHJlcGxhY2UgdGhlIGV4aXN0aW5nIHR5cGVkIGZ1bmN0aW9uIChub3RoaW5nIHRvIGRvKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBtZXJnZSB0aGUgZXhpc3RpbmcgYW5kIG5ldyB0eXBlZCBmdW5jdGlvblxuICAgICAgICAgICAgaW5zdGFuY2UgPSB0eXBlZChleGlzdGluZywgaW5zdGFuY2UpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChleGlzdGluZyA9PT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMub3ZlcnJpZGUpIHtcbiAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW1wb3J0IFwiJyArIG5hbWUgKyAnXCI6IGFscmVhZHkgZXhpc3RzJyk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGlmIChmYWN0b3J5LmxhenkgIT09IGZhbHNlKSB7XG4gICAgICAgICgwLCBfb2JqZWN0LmxhenkpKG5hbWVzcGFjZSwgbmFtZSwgcmVzb2x2ZXIpO1xuXG4gICAgICAgIGlmIChleGlzdGluZ1RyYW5zZm9ybSkge1xuICAgICAgICAgIF9kZWxldGVUcmFuc2Zvcm0obmFtZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGZhY3RvcnkucGF0aCA9PT0gJ2V4cHJlc3Npb24udHJhbnNmb3JtJyB8fCBsZWdhY3lGYWN0b3J5QWxsb3dlZEluRXhwcmVzc2lvbnMoZmFjdG9yeSkpIHtcbiAgICAgICAgICAgICgwLCBfb2JqZWN0LmxhenkpKG1hdGguZXhwcmVzc2lvbi5tYXRoV2l0aFRyYW5zZm9ybSwgbmFtZSwgcmVzb2x2ZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmFtZXNwYWNlW25hbWVdID0gcmVzb2x2ZXIoKTtcblxuICAgICAgICBpZiAoZXhpc3RpbmdUcmFuc2Zvcm0pIHtcbiAgICAgICAgICBfZGVsZXRlVHJhbnNmb3JtKG5hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChmYWN0b3J5LnBhdGggPT09ICdleHByZXNzaW9uLnRyYW5zZm9ybScgfHwgbGVnYWN5RmFjdG9yeUFsbG93ZWRJbkV4cHJlc3Npb25zKGZhY3RvcnkpKSB7XG4gICAgICAgICAgICBtYXRoLmV4cHJlc3Npb24ubWF0aFdpdGhUcmFuc2Zvcm1bbmFtZV0gPSByZXNvbHZlcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIga2V5ID0gZmFjdG9yeS5wYXRoID8gZmFjdG9yeS5wYXRoICsgJy4nICsgZmFjdG9yeS5uYW1lIDogZmFjdG9yeS5uYW1lO1xuICAgICAgaW1wb3J0ZWRGYWN0b3JpZXNba2V5XSA9IGZhY3Rvcnk7XG4gICAgICBtYXRoLmVtaXQoJ2ltcG9ydCcsIG5hbWUsIHJlc29sdmVyLCBmYWN0b3J5LnBhdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB1bm5hbWVkIGZhY3RvcnkuXG4gICAgICAvLyBubyBsYXp5IGxvYWRpbmdcbiAgICAgIGxvYWQoZmFjdG9yeSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gaW5zdGFuY2Ugb2YgYSBmYWN0b3J5IGludG8gbWF0aC5qc1xuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKHNjb3BlOiBvYmplY3QpfSBmYWN0b3J5XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zICBTZWUgaW1wb3J0IGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBvcHRpb25zXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZT1mYWN0b3J5Lm5hbWVdIE9wdGlvbmFsIGN1c3RvbSBuYW1lXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX2ltcG9ydEZhY3RvcnkoZmFjdG9yeSwgb3B0aW9ucykge1xuICAgIHZhciBuYW1lID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmYWN0b3J5LmZuO1xuXG4gICAgaWYgKCgwLCBfYXJyYXkuY29udGFpbnMpKG5hbWUsICcuJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmFjdG9yeSBuYW1lIHNob3VsZCBub3QgY29udGFpbiBhIG5lc3RlZCBwYXRoLiAnICsgJ05hbWU6ICcgKyBKU09OLnN0cmluZ2lmeShuYW1lKSk7XG4gICAgfVxuXG4gICAgdmFyIG5hbWVzcGFjZSA9IGlzVHJhbnNmb3JtRnVuY3Rpb25GYWN0b3J5KGZhY3RvcnkpID8gbWF0aC5leHByZXNzaW9uLnRyYW5zZm9ybSA6IG1hdGg7XG4gICAgdmFyIGV4aXN0aW5nVHJhbnNmb3JtID0gKG5hbWUgaW4gbWF0aC5leHByZXNzaW9uLnRyYW5zZm9ybSk7XG4gICAgdmFyIGV4aXN0aW5nID0gKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKG5hbWVzcGFjZSwgbmFtZSkgPyBuYW1lc3BhY2VbbmFtZV0gOiB1bmRlZmluZWQ7XG5cbiAgICB2YXIgcmVzb2x2ZXIgPSBmdW5jdGlvbiByZXNvbHZlcigpIHtcbiAgICAgIC8vIGNvbGxlY3QgYWxsIGRlcGVuZGVuY2llcywgaGFuZGxlIGZpbmRpbmcgYm90aCBmdW5jdGlvbnMgYW5kIGNsYXNzZXMgYW5kIG90aGVyIHNwZWNpYWwgY2FzZXNcbiAgICAgIHZhciBkZXBlbmRlbmNpZXMgPSB7fTtcbiAgICAgIGZhY3RvcnkuZGVwZW5kZW5jaWVzLm1hcChfZmFjdG9yeS5zdHJpcE9wdGlvbmFsTm90YXRpb24pLmZvckVhY2goZnVuY3Rpb24gKGRlcGVuZGVuY3kpIHtcbiAgICAgICAgaWYgKCgwLCBfYXJyYXkuY29udGFpbnMpKGRlcGVuZGVuY3ksICcuJykpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhY3RvcnkgZGVwZW5kZW5jeSBzaG91bGQgbm90IGNvbnRhaW4gYSBuZXN0ZWQgcGF0aC4gJyArICdOYW1lOiAnICsgSlNPTi5zdHJpbmdpZnkoZGVwZW5kZW5jeSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlcGVuZGVuY3kgPT09ICdtYXRoJykge1xuICAgICAgICAgIGRlcGVuZGVuY2llcy5tYXRoID0gbWF0aDtcbiAgICAgICAgfSBlbHNlIGlmIChkZXBlbmRlbmN5ID09PSAnbWF0aFdpdGhUcmFuc2Zvcm0nKSB7XG4gICAgICAgICAgZGVwZW5kZW5jaWVzLm1hdGhXaXRoVHJhbnNmb3JtID0gbWF0aC5leHByZXNzaW9uLm1hdGhXaXRoVHJhbnNmb3JtO1xuICAgICAgICB9IGVsc2UgaWYgKGRlcGVuZGVuY3kgPT09ICdjbGFzc2VzJykge1xuICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZSBmb3IganNvbiByZXZpdmVyXG4gICAgICAgICAgZGVwZW5kZW5jaWVzLmNsYXNzZXMgPSBtYXRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlcGVuZGVuY2llc1tkZXBlbmRlbmN5XSA9IG1hdGhbZGVwZW5kZW5jeV07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdmFyIGluc3RhbmNlID0gLyogI19fUFVSRV9fICovZmFjdG9yeShkZXBlbmRlbmNpZXMpO1xuXG4gICAgICBpZiAoaW5zdGFuY2UgJiYgdHlwZW9mIGluc3RhbmNlLnRyYW5zZm9ybSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RyYW5zZm9ybXMgY2Fubm90IGJlIGF0dGFjaGVkIHRvIGZhY3RvcnkgZnVuY3Rpb25zLiAnICsgJ1BsZWFzZSBjcmVhdGUgYSBzZXBhcmF0ZSBmdW5jdGlvbiBmb3IgaXQgd2l0aCBleHBvcnRzLnBhdGg9XCJleHByZXNzaW9uLnRyYW5zZm9ybVwiJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChleGlzdGluZyA9PT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMub3ZlcnJpZGUpIHtcbiAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNUeXBlZEZ1bmN0aW9uKGV4aXN0aW5nKSAmJiBpc1R5cGVkRnVuY3Rpb24oaW5zdGFuY2UpKSB7XG4gICAgICAgIC8vIG1lcmdlIHRoZSBleGlzdGluZyBhbmQgbmV3IHR5cGVkIGZ1bmN0aW9uXG4gICAgICAgIHJldHVybiB0eXBlZChleGlzdGluZywgaW5zdGFuY2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgLy8ga2VlcCBleGlzdGluZywgaWdub3JlIGltcG9ydGVkIGZ1bmN0aW9uXG4gICAgICAgIHJldHVybiBleGlzdGluZztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGltcG9ydCBcIicgKyBuYW1lICsgJ1wiOiBhbHJlYWR5IGV4aXN0cycpO1xuICAgICAgfVxuICAgIH07IC8vIFRPRE86IGFkZCB1bml0IHRlc3Qgd2l0aCBub24tbGF6eSBmYWN0b3J5XG5cblxuICAgIGlmICghZmFjdG9yeS5tZXRhIHx8IGZhY3RvcnkubWV0YS5sYXp5ICE9PSBmYWxzZSkge1xuICAgICAgKDAsIF9vYmplY3QubGF6eSkobmFtZXNwYWNlLCBuYW1lLCByZXNvbHZlcik7IC8vIEZJWE1FOiByZW1vdmUgdGhlIGBpZiAoZXhpc3RpbmcgJiZgIGNvbmRpdGlvbiBhZ2Fpbi4gQ2FuIHdlIG1ha2Ugc3VyZSBzdWJzZXQgaXMgbG9hZGVkIGJlZm9yZSBzdWJzZXQudHJhbnNmb3JtPyAoTmFtZSBjb2xsaXNpb24sIGFuZCBubyBkZXBlbmRlbmNpZXMgYmV0d2VlbiB0aGUgdHdvKVxuXG4gICAgICBpZiAoZXhpc3RpbmcgJiYgZXhpc3RpbmdUcmFuc2Zvcm0pIHtcbiAgICAgICAgX2RlbGV0ZVRyYW5zZm9ybShuYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc1RyYW5zZm9ybUZ1bmN0aW9uRmFjdG9yeShmYWN0b3J5KSB8fCBmYWN0b3J5QWxsb3dlZEluRXhwcmVzc2lvbnMoZmFjdG9yeSkpIHtcbiAgICAgICAgICAoMCwgX29iamVjdC5sYXp5KShtYXRoLmV4cHJlc3Npb24ubWF0aFdpdGhUcmFuc2Zvcm0sIG5hbWUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBuYW1lc3BhY2VbbmFtZV07XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbmFtZXNwYWNlW25hbWVdID0gcmVzb2x2ZXIoKTsgLy8gRklYTUU6IHJlbW92ZSB0aGUgYGlmIChleGlzdGluZyAmJmAgY29uZGl0aW9uIGFnYWluLiBDYW4gd2UgbWFrZSBzdXJlIHN1YnNldCBpcyBsb2FkZWQgYmVmb3JlIHN1YnNldC50cmFuc2Zvcm0/IChOYW1lIGNvbGxpc2lvbiwgYW5kIG5vIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRoZSB0d28pXG5cbiAgICAgIGlmIChleGlzdGluZyAmJiBleGlzdGluZ1RyYW5zZm9ybSkge1xuICAgICAgICBfZGVsZXRlVHJhbnNmb3JtKG5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzVHJhbnNmb3JtRnVuY3Rpb25GYWN0b3J5KGZhY3RvcnkpIHx8IGZhY3RvcnlBbGxvd2VkSW5FeHByZXNzaW9ucyhmYWN0b3J5KSkge1xuICAgICAgICAgICgwLCBfb2JqZWN0LmxhenkpKG1hdGguZXhwcmVzc2lvbi5tYXRoV2l0aFRyYW5zZm9ybSwgbmFtZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5hbWVzcGFjZVtuYW1lXTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gVE9ETzogaW1wcm92ZSBmYWN0b3JpZXMsIHN0b3JlIGEgbGlzdCB3aXRoIGltcG9ydHMgaW5zdGVhZCB3aGljaCBjYW4gYmUgcmUtcGxheWVkXG5cblxuICAgIGltcG9ydGVkRmFjdG9yaWVzW25hbWVdID0gZmFjdG9yeTtcbiAgICBtYXRoLmVtaXQoJ2ltcG9ydCcsIG5hbWUsIHJlc29sdmVyKTtcbiAgfVxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciBnaXZlbiBvYmplY3QgaXMgYSB0eXBlIHdoaWNoIGNhbiBiZSBpbXBvcnRlZFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uIHwgbnVtYmVyIHwgc3RyaW5nIHwgYm9vbGVhbiB8IG51bGwgfCBVbml0IHwgQ29tcGxleH0gb2JqZWN0XG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gaXNTdXBwb3J0ZWRUeXBlKG9iamVjdCkge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBvYmplY3QgPT09ICdudW1iZXInIHx8IHR5cGVvZiBvYmplY3QgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBvYmplY3QgPT09ICdib29sZWFuJyB8fCBvYmplY3QgPT09IG51bGwgfHwgKDAsIF9pcy5pc1VuaXQpKG9iamVjdCkgfHwgKDAsIF9pcy5pc0NvbXBsZXgpKG9iamVjdCkgfHwgKDAsIF9pcy5pc0JpZ051bWJlcikob2JqZWN0KSB8fCAoMCwgX2lzLmlzRnJhY3Rpb24pKG9iamVjdCkgfHwgKDAsIF9pcy5pc01hdHJpeCkob2JqZWN0KSB8fCBBcnJheS5pc0FycmF5KG9iamVjdCk7XG4gIH1cbiAgLyoqXG4gICAqIFRlc3Qgd2hldGhlciBhIGdpdmVuIHRoaW5nIGlzIGEgdHlwZWQtZnVuY3Rpb25cbiAgICogQHBhcmFtIHsqfSBmblxuICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgd2hlbiBgZm5gIGlzIGEgdHlwZWQtZnVuY3Rpb25cbiAgICovXG5cblxuICBmdW5jdGlvbiBpc1R5cGVkRnVuY3Rpb24oZm4pIHtcbiAgICByZXR1cm4gdHlwZW9mIGZuID09PSAnZnVuY3Rpb24nICYmIF90eXBlb2YoZm4uc2lnbmF0dXJlcykgPT09ICdvYmplY3QnO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFzVHlwZWRGdW5jdGlvblNpZ25hdHVyZShmbikge1xuICAgIHJldHVybiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGZuLnNpZ25hdHVyZSA9PT0gJ3N0cmluZyc7XG4gIH1cblxuICBmdW5jdGlvbiBhbGxvd2VkSW5FeHByZXNzaW9ucyhuYW1lKSB7XG4gICAgcmV0dXJuICEoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkodW5zYWZlLCBuYW1lKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxlZ2FjeUZhY3RvcnlBbGxvd2VkSW5FeHByZXNzaW9ucyhmYWN0b3J5KSB7XG4gICAgcmV0dXJuIGZhY3RvcnkucGF0aCA9PT0gdW5kZWZpbmVkICYmICEoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkodW5zYWZlLCBmYWN0b3J5Lm5hbWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gZmFjdG9yeUFsbG93ZWRJbkV4cHJlc3Npb25zKGZhY3RvcnkpIHtcbiAgICByZXR1cm4gZmFjdG9yeS5mbi5pbmRleE9mKCcuJykgPT09IC0xICYmIC8vIEZJWE1FOiBtYWtlIGNoZWNraW5nIG9uIHBhdGggcmVkdW5kYW50LCBjaGVjayBvbiBtZXRhIGRhdGEgaW5zdGVhZFxuICAgICEoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkodW5zYWZlLCBmYWN0b3J5LmZuKSAmJiAoIWZhY3RvcnkubWV0YSB8fCAhZmFjdG9yeS5tZXRhLmlzQ2xhc3MpO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNUcmFuc2Zvcm1GdW5jdGlvbkZhY3RvcnkoZmFjdG9yeSkge1xuICAgIHJldHVybiBmYWN0b3J5ICE9PSB1bmRlZmluZWQgJiYgZmFjdG9yeS5tZXRhICE9PSB1bmRlZmluZWQgJiYgZmFjdG9yeS5tZXRhLmlzVHJhbnNmb3JtRnVuY3Rpb24gPT09IHRydWUgfHwgZmFsc2U7XG4gIH0gLy8gbmFtZXNwYWNlcyBhbmQgZnVuY3Rpb25zIG5vdCBhdmFpbGFibGUgaW4gdGhlIHBhcnNlciBmb3Igc2FmZXR5IHJlYXNvbnNcblxuXG4gIHZhciB1bnNhZmUgPSB7XG4gICAgZXhwcmVzc2lvbjogdHJ1ZSxcbiAgICB0eXBlOiB0cnVlLFxuICAgIGRvY3M6IHRydWUsXG4gICAgZXJyb3I6IHRydWUsXG4gICAganNvbjogdHJ1ZSxcbiAgICBjaGFpbjogdHJ1ZSAvLyBjaGFpbiBtZXRob2Qgbm90IHN1cHBvcnRlZC4gTm90ZSB0aGF0IHRoZXJlIGlzIGEgdW5pdCBjaGFpbiB0b28uXG5cbiAgfTtcbiAgcmV0dXJuIG1hdGhJbXBvcnQ7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVR5cGVkID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX3R5cGVkRnVuY3Rpb24gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJ0eXBlZC1mdW5jdGlvblwiKSk7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG4vKipcbiAqIENyZWF0ZSBhIHR5cGVkLWZ1bmN0aW9uIHdoaWNoIGNoZWNrcyB0aGUgdHlwZXMgb2YgdGhlIGFyZ3VtZW50cyBhbmRcbiAqIGNhbiBtYXRjaCB0aGVtIGFnYWluc3QgbXVsdGlwbGUgcHJvdmlkZWQgc2lnbmF0dXJlcy4gVGhlIHR5cGVkLWZ1bmN0aW9uXG4gKiBhdXRvbWF0aWNhbGx5IGNvbnZlcnRzIGlucHV0cyBpbiBvcmRlciB0byBmaW5kIGEgbWF0Y2hpbmcgc2lnbmF0dXJlLlxuICogVHlwZWQgZnVuY3Rpb25zIHRocm93IGluZm9ybWF0aXZlIGVycm9ycyBpbiBjYXNlIG9mIHdyb25nIGlucHV0IGFyZ3VtZW50cy5cbiAqXG4gKiBTZWUgdGhlIGxpYnJhcnkgW3R5cGVkLWZ1bmN0aW9uXShodHRwczovL2dpdGh1Yi5jb20vam9zZGVqb25nL3R5cGVkLWZ1bmN0aW9uKVxuICogZm9yIGRldGFpbGVkIGRvY3VtZW50YXRpb24uXG4gKlxuICogU3ludGF4OlxuICpcbiAqICAgICBtYXRoLnR5cGVkKG5hbWUsIHNpZ25hdHVyZXMpIDogZnVuY3Rpb25cbiAqICAgICBtYXRoLnR5cGVkKHNpZ25hdHVyZXMpIDogZnVuY3Rpb25cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgICAgLy8gY3JlYXRlIGEgdHlwZWQgZnVuY3Rpb24gd2l0aCBtdWx0aXBsZSB0eXBlcyBwZXIgYXJndW1lbnQgKHR5cGUgdW5pb24pXG4gKiAgICAgY29uc3QgZm4yID0gdHlwZWQoe1xuICogICAgICAgJ251bWJlciB8IGJvb2xlYW4nOiBmdW5jdGlvbiAoYikge1xuICogICAgICAgICByZXR1cm4gJ2IgaXMgYSBudW1iZXIgb3IgYm9vbGVhbidcbiAqICAgICAgIH0sXG4gKiAgICAgICAnc3RyaW5nLCBudW1iZXIgfCBib29sZWFuJzogZnVuY3Rpb24gKGEsIGIpIHtcbiAqICAgICAgICAgcmV0dXJuICdhIGlzIGEgc3RyaW5nLCBiIGlzIGEgbnVtYmVyIG9yIGJvb2xlYW4nXG4gKiAgICAgICB9XG4gKiAgICAgfSlcbiAqXG4gKiAgICAgLy8gY3JlYXRlIGEgdHlwZWQgZnVuY3Rpb24gd2l0aCBhbiBhbnkgdHlwZSBhcmd1bWVudFxuICogICAgIGNvbnN0IGxvZyA9IHR5cGVkKHtcbiAqICAgICAgICdzdHJpbmcsIGFueSc6IGZ1bmN0aW9uIChldmVudCwgZGF0YSkge1xuICogICAgICAgICBjb25zb2xlLmxvZygnZXZlbnQ6ICcgKyBldmVudCArICcsIGRhdGE6ICcgKyBKU09OLnN0cmluZ2lmeShkYXRhKSlcbiAqICAgICAgIH1cbiAqICAgICB9KVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZV0gICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbmFsIG5hbWUgZm9yIHRoZSB0eXBlZC1mdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBmdW5jdGlvbj59IHNpZ25hdHVyZXMgICBPYmplY3Qgd2l0aCBvbmUgb3IgbXVsdGlwbGUgZnVuY3Rpb24gc2lnbmF0dXJlc1xuICogQHJldHVybnMge2Z1bmN0aW9ufSBUaGUgY3JlYXRlZCB0eXBlZC1mdW5jdGlvbi5cbiAqL1xuLy8gcmV0dXJucyBhIG5ldyBpbnN0YW5jZSBvZiB0eXBlZC1mdW5jdGlvblxudmFyIF9jcmVhdGVUeXBlZDIgPSBmdW5jdGlvbiBfY3JlYXRlVHlwZWQoKSB7XG4gIC8vIGluaXRpYWxseSwgcmV0dXJuIHRoZSBvcmlnaW5hbCBpbnN0YW5jZSBvZiB0eXBlZC1mdW5jdGlvblxuICAvLyBjb25zZWN1dGl2ZWx5LCByZXR1cm4gYSBuZXcgaW5zdGFuY2UgZnJvbSB0eXBlZC5jcmVhdGUuXG4gIF9jcmVhdGVUeXBlZDIgPSBfdHlwZWRGdW5jdGlvbltcImRlZmF1bHRcIl0uY3JlYXRlO1xuICByZXR1cm4gX3R5cGVkRnVuY3Rpb25bXCJkZWZhdWx0XCJdO1xufTtcblxudmFyIGRlcGVuZGVuY2llcyA9IFsnP0JpZ051bWJlcicsICc/Q29tcGxleCcsICc/RGVuc2VNYXRyaXgnLCAnP0ZyYWN0aW9uJ107XG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGEgbmV3IHR5cGVkIGluc3RhbmNlXG4gKiBAcGFyYW0ge09iamVjdH0gZGVwZW5kZW5jaWVzICAgT2JqZWN0IHdpdGggZGF0YSB0eXBlcyBsaWtlIENvbXBsZXggYW5kIEJpZ051bWJlclxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5cbnZhciBjcmVhdGVUeXBlZCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KSgndHlwZWQnLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIGNyZWF0ZVR5cGVkKF9yZWYpIHtcbiAgdmFyIEJpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyLFxuICAgICAgQ29tcGxleCA9IF9yZWYuQ29tcGxleCxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeCxcbiAgICAgIEZyYWN0aW9uID0gX3JlZi5GcmFjdGlvbjtcblxuICAvLyBUT0RPOiB0eXBlZC1mdW5jdGlvbiBtdXN0IGJlIGFibGUgdG8gc2lsZW50bHkgaWdub3JlIHNpZ25hdHVyZXMgd2l0aCB1bmtub3duIGRhdGEgdHlwZXNcbiAgLy8gZ2V0IGEgbmV3IGluc3RhbmNlIG9mIHR5cGVkLWZ1bmN0aW9uXG4gIHZhciB0eXBlZCA9IF9jcmVhdGVUeXBlZDIoKTsgLy8gZGVmaW5lIGFsbCB0eXBlcy4gVGhlIG9yZGVyIG9mIHRoZSB0eXBlcyBkZXRlcm1pbmVzIGluIHdoaWNoIG9yZGVyIGZ1bmN0aW9uXG4gIC8vIGFyZ3VtZW50cyBhcmUgdHlwZS1jaGVja2VkIChzbyBmb3IgcGVyZm9ybWFuY2UgaXQncyBpbXBvcnRhbnQgdG8gcHV0IHRoZVxuICAvLyBtb3N0IHVzZWQgdHlwZXMgZmlyc3QpLlxuXG5cbiAgdHlwZWQudHlwZXMgPSBbe1xuICAgIG5hbWU6ICdudW1iZXInLFxuICAgIHRlc3Q6IF9pcy5pc051bWJlclxuICB9LCB7XG4gICAgbmFtZTogJ0NvbXBsZXgnLFxuICAgIHRlc3Q6IF9pcy5pc0NvbXBsZXhcbiAgfSwge1xuICAgIG5hbWU6ICdCaWdOdW1iZXInLFxuICAgIHRlc3Q6IF9pcy5pc0JpZ051bWJlclxuICB9LCB7XG4gICAgbmFtZTogJ0ZyYWN0aW9uJyxcbiAgICB0ZXN0OiBfaXMuaXNGcmFjdGlvblxuICB9LCB7XG4gICAgbmFtZTogJ1VuaXQnLFxuICAgIHRlc3Q6IF9pcy5pc1VuaXRcbiAgfSwge1xuICAgIG5hbWU6ICdzdHJpbmcnLFxuICAgIHRlc3Q6IF9pcy5pc1N0cmluZ1xuICB9LCB7XG4gICAgbmFtZTogJ0NoYWluJyxcbiAgICB0ZXN0OiBfaXMuaXNDaGFpblxuICB9LCB7XG4gICAgbmFtZTogJ0FycmF5JyxcbiAgICB0ZXN0OiBfaXMuaXNBcnJheVxuICB9LCB7XG4gICAgbmFtZTogJ01hdHJpeCcsXG4gICAgdGVzdDogX2lzLmlzTWF0cml4XG4gIH0sIHtcbiAgICBuYW1lOiAnRGVuc2VNYXRyaXgnLFxuICAgIHRlc3Q6IF9pcy5pc0RlbnNlTWF0cml4XG4gIH0sIHtcbiAgICBuYW1lOiAnU3BhcnNlTWF0cml4JyxcbiAgICB0ZXN0OiBfaXMuaXNTcGFyc2VNYXRyaXhcbiAgfSwge1xuICAgIG5hbWU6ICdSYW5nZScsXG4gICAgdGVzdDogX2lzLmlzUmFuZ2VcbiAgfSwge1xuICAgIG5hbWU6ICdJbmRleCcsXG4gICAgdGVzdDogX2lzLmlzSW5kZXhcbiAgfSwge1xuICAgIG5hbWU6ICdib29sZWFuJyxcbiAgICB0ZXN0OiBfaXMuaXNCb29sZWFuXG4gIH0sIHtcbiAgICBuYW1lOiAnUmVzdWx0U2V0JyxcbiAgICB0ZXN0OiBfaXMuaXNSZXN1bHRTZXRcbiAgfSwge1xuICAgIG5hbWU6ICdIZWxwJyxcbiAgICB0ZXN0OiBfaXMuaXNIZWxwXG4gIH0sIHtcbiAgICBuYW1lOiAnZnVuY3Rpb24nLFxuICAgIHRlc3Q6IF9pcy5pc0Z1bmN0aW9uXG4gIH0sIHtcbiAgICBuYW1lOiAnRGF0ZScsXG4gICAgdGVzdDogX2lzLmlzRGF0ZVxuICB9LCB7XG4gICAgbmFtZTogJ1JlZ0V4cCcsXG4gICAgdGVzdDogX2lzLmlzUmVnRXhwXG4gIH0sIHtcbiAgICBuYW1lOiAnbnVsbCcsXG4gICAgdGVzdDogX2lzLmlzTnVsbFxuICB9LCB7XG4gICAgbmFtZTogJ3VuZGVmaW5lZCcsXG4gICAgdGVzdDogX2lzLmlzVW5kZWZpbmVkXG4gIH0sIHtcbiAgICBuYW1lOiAnQWNjZXNzb3JOb2RlJyxcbiAgICB0ZXN0OiBfaXMuaXNBY2Nlc3Nvck5vZGVcbiAgfSwge1xuICAgIG5hbWU6ICdBcnJheU5vZGUnLFxuICAgIHRlc3Q6IF9pcy5pc0FycmF5Tm9kZVxuICB9LCB7XG4gICAgbmFtZTogJ0Fzc2lnbm1lbnROb2RlJyxcbiAgICB0ZXN0OiBfaXMuaXNBc3NpZ25tZW50Tm9kZVxuICB9LCB7XG4gICAgbmFtZTogJ0Jsb2NrTm9kZScsXG4gICAgdGVzdDogX2lzLmlzQmxvY2tOb2RlXG4gIH0sIHtcbiAgICBuYW1lOiAnQ29uZGl0aW9uYWxOb2RlJyxcbiAgICB0ZXN0OiBfaXMuaXNDb25kaXRpb25hbE5vZGVcbiAgfSwge1xuICAgIG5hbWU6ICdDb25zdGFudE5vZGUnLFxuICAgIHRlc3Q6IF9pcy5pc0NvbnN0YW50Tm9kZVxuICB9LCB7XG4gICAgbmFtZTogJ0Z1bmN0aW9uTm9kZScsXG4gICAgdGVzdDogX2lzLmlzRnVuY3Rpb25Ob2RlXG4gIH0sIHtcbiAgICBuYW1lOiAnRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZScsXG4gICAgdGVzdDogX2lzLmlzRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZVxuICB9LCB7XG4gICAgbmFtZTogJ0luZGV4Tm9kZScsXG4gICAgdGVzdDogX2lzLmlzSW5kZXhOb2RlXG4gIH0sIHtcbiAgICBuYW1lOiAnTm9kZScsXG4gICAgdGVzdDogX2lzLmlzTm9kZVxuICB9LCB7XG4gICAgbmFtZTogJ09iamVjdE5vZGUnLFxuICAgIHRlc3Q6IF9pcy5pc09iamVjdE5vZGVcbiAgfSwge1xuICAgIG5hbWU6ICdPcGVyYXRvck5vZGUnLFxuICAgIHRlc3Q6IF9pcy5pc09wZXJhdG9yTm9kZVxuICB9LCB7XG4gICAgbmFtZTogJ1BhcmVudGhlc2lzTm9kZScsXG4gICAgdGVzdDogX2lzLmlzUGFyZW50aGVzaXNOb2RlXG4gIH0sIHtcbiAgICBuYW1lOiAnUmFuZ2VOb2RlJyxcbiAgICB0ZXN0OiBfaXMuaXNSYW5nZU5vZGVcbiAgfSwge1xuICAgIG5hbWU6ICdTeW1ib2xOb2RlJyxcbiAgICB0ZXN0OiBfaXMuaXNTeW1ib2xOb2RlXG4gIH0sIHtcbiAgICBuYW1lOiAnT2JqZWN0JyxcbiAgICB0ZXN0OiBfaXMuaXNPYmplY3RcbiAgfSAvLyBvcmRlciAnT2JqZWN0JyBsYXN0LCBpdCBtYXRjaGVzIG9uIG90aGVyIGNsYXNzZXMgdG9vXG4gIF07XG4gIHR5cGVkLmNvbnZlcnNpb25zID0gW3tcbiAgICBmcm9tOiAnbnVtYmVyJyxcbiAgICB0bzogJ0JpZ051bWJlcicsXG4gICAgY29udmVydDogZnVuY3Rpb24gY29udmVydCh4KSB7XG4gICAgICBpZiAoIUJpZ051bWJlcikge1xuICAgICAgICB0aHJvd05vQmlnbnVtYmVyKHgpO1xuICAgICAgfSAvLyBub3RlOiBjb252ZXJzaW9uIGZyb20gbnVtYmVyIHRvIEJpZ051bWJlciBjYW4gZmFpbCBpZiB4IGhhcyA+MTUgZGlnaXRzXG5cblxuICAgICAgaWYgKCgwLCBfbnVtYmVyLmRpZ2l0cykoeCkgPiAxNSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgaW1wbGljaXRseSBjb252ZXJ0IGEgbnVtYmVyIHdpdGggPjE1IHNpZ25pZmljYW50IGRpZ2l0cyB0byBCaWdOdW1iZXIgJyArICcodmFsdWU6ICcgKyB4ICsgJykuICcgKyAnVXNlIGZ1bmN0aW9uIGJpZ251bWJlcih4KSB0byBjb252ZXJ0IHRvIEJpZ051bWJlci4nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoeCk7XG4gICAgfVxuICB9LCB7XG4gICAgZnJvbTogJ251bWJlcicsXG4gICAgdG86ICdDb21wbGV4JyxcbiAgICBjb252ZXJ0OiBmdW5jdGlvbiBjb252ZXJ0KHgpIHtcbiAgICAgIGlmICghQ29tcGxleCkge1xuICAgICAgICB0aHJvd05vQ29tcGxleCh4KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgsIDApO1xuICAgIH1cbiAgfSwge1xuICAgIGZyb206ICdudW1iZXInLFxuICAgIHRvOiAnc3RyaW5nJyxcbiAgICBjb252ZXJ0OiBmdW5jdGlvbiBjb252ZXJ0KHgpIHtcbiAgICAgIHJldHVybiB4ICsgJyc7XG4gICAgfVxuICB9LCB7XG4gICAgZnJvbTogJ0JpZ051bWJlcicsXG4gICAgdG86ICdDb21wbGV4JyxcbiAgICBjb252ZXJ0OiBmdW5jdGlvbiBjb252ZXJ0KHgpIHtcbiAgICAgIGlmICghQ29tcGxleCkge1xuICAgICAgICB0aHJvd05vQ29tcGxleCh4KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgudG9OdW1iZXIoKSwgMCk7XG4gICAgfVxuICB9LCB7XG4gICAgZnJvbTogJ0ZyYWN0aW9uJyxcbiAgICB0bzogJ0JpZ051bWJlcicsXG4gICAgY29udmVydDogZnVuY3Rpb24gY29udmVydCh4KSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgaW1wbGljaXRseSBjb252ZXJ0IGEgRnJhY3Rpb24gdG8gQmlnTnVtYmVyIG9yIHZpY2UgdmVyc2EuICcgKyAnVXNlIGZ1bmN0aW9uIGJpZ251bWJlcih4KSB0byBjb252ZXJ0IHRvIEJpZ051bWJlciBvciBmcmFjdGlvbih4KSB0byBjb252ZXJ0IHRvIEZyYWN0aW9uLicpO1xuICAgIH1cbiAgfSwge1xuICAgIGZyb206ICdGcmFjdGlvbicsXG4gICAgdG86ICdDb21wbGV4JyxcbiAgICBjb252ZXJ0OiBmdW5jdGlvbiBjb252ZXJ0KHgpIHtcbiAgICAgIGlmICghQ29tcGxleCkge1xuICAgICAgICB0aHJvd05vQ29tcGxleCh4KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgudmFsdWVPZigpLCAwKTtcbiAgICB9XG4gIH0sIHtcbiAgICBmcm9tOiAnbnVtYmVyJyxcbiAgICB0bzogJ0ZyYWN0aW9uJyxcbiAgICBjb252ZXJ0OiBmdW5jdGlvbiBjb252ZXJ0KHgpIHtcbiAgICAgIGlmICghRnJhY3Rpb24pIHtcbiAgICAgICAgdGhyb3dOb0ZyYWN0aW9uKHgpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZiA9IG5ldyBGcmFjdGlvbih4KTtcblxuICAgICAgaWYgKGYudmFsdWVPZigpICE9PSB4KSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBpbXBsaWNpdGx5IGNvbnZlcnQgYSBudW1iZXIgdG8gYSBGcmFjdGlvbiB3aGVuIHRoZXJlIHdpbGwgYmUgYSBsb3NzIG9mIHByZWNpc2lvbiAnICsgJyh2YWx1ZTogJyArIHggKyAnKS4gJyArICdVc2UgZnVuY3Rpb24gZnJhY3Rpb24oeCkgdG8gY29udmVydCB0byBGcmFjdGlvbi4nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGY7XG4gICAgfVxuICB9LCB7XG4gICAgLy8gRklYTUU6IGFkZCBjb252ZXJzaW9uIGZyb20gRnJhY3Rpb24gdG8gbnVtYmVyLCBmb3IgZXhhbXBsZSBmb3IgYHNxcnQoZnJhY3Rpb24oMSwzKSlgXG4gICAgLy8gIGZyb206ICdGcmFjdGlvbicsXG4gICAgLy8gIHRvOiAnbnVtYmVyJyxcbiAgICAvLyAgY29udmVydDogZnVuY3Rpb24gKHgpIHtcbiAgICAvLyAgICByZXR1cm4geC52YWx1ZU9mKClcbiAgICAvLyAgfVxuICAgIC8vIH0sIHtcbiAgICBmcm9tOiAnc3RyaW5nJyxcbiAgICB0bzogJ251bWJlcicsXG4gICAgY29udmVydDogZnVuY3Rpb24gY29udmVydCh4KSB7XG4gICAgICB2YXIgbiA9IE51bWJlcih4KTtcblxuICAgICAgaWYgKGlzTmFOKG4pKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbnZlcnQgXCInICsgeCArICdcIiB0byBhIG51bWJlcicpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbjtcbiAgICB9XG4gIH0sIHtcbiAgICBmcm9tOiAnc3RyaW5nJyxcbiAgICB0bzogJ0JpZ051bWJlcicsXG4gICAgY29udmVydDogZnVuY3Rpb24gY29udmVydCh4KSB7XG4gICAgICBpZiAoIUJpZ051bWJlcikge1xuICAgICAgICB0aHJvd05vQmlnbnVtYmVyKHgpO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbmV3IEJpZ051bWJlcih4KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IFwiJyArIHggKyAnXCIgdG8gQmlnTnVtYmVyJyk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAgZnJvbTogJ3N0cmluZycsXG4gICAgdG86ICdGcmFjdGlvbicsXG4gICAgY29udmVydDogZnVuY3Rpb24gY29udmVydCh4KSB7XG4gICAgICBpZiAoIUZyYWN0aW9uKSB7XG4gICAgICAgIHRocm93Tm9GcmFjdGlvbih4KTtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbih4KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IFwiJyArIHggKyAnXCIgdG8gRnJhY3Rpb24nKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBmcm9tOiAnc3RyaW5nJyxcbiAgICB0bzogJ0NvbXBsZXgnLFxuICAgIGNvbnZlcnQ6IGZ1bmN0aW9uIGNvbnZlcnQoeCkge1xuICAgICAgaWYgKCFDb21wbGV4KSB7XG4gICAgICAgIHRocm93Tm9Db21wbGV4KHgpO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoeCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY29udmVydCBcIicgKyB4ICsgJ1wiIHRvIENvbXBsZXgnKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBmcm9tOiAnYm9vbGVhbicsXG4gICAgdG86ICdudW1iZXInLFxuICAgIGNvbnZlcnQ6IGZ1bmN0aW9uIGNvbnZlcnQoeCkge1xuICAgICAgcmV0dXJuICt4O1xuICAgIH1cbiAgfSwge1xuICAgIGZyb206ICdib29sZWFuJyxcbiAgICB0bzogJ0JpZ051bWJlcicsXG4gICAgY29udmVydDogZnVuY3Rpb24gY29udmVydCh4KSB7XG4gICAgICBpZiAoIUJpZ051bWJlcikge1xuICAgICAgICB0aHJvd05vQmlnbnVtYmVyKHgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IEJpZ051bWJlcigreCk7XG4gICAgfVxuICB9LCB7XG4gICAgZnJvbTogJ2Jvb2xlYW4nLFxuICAgIHRvOiAnRnJhY3Rpb24nLFxuICAgIGNvbnZlcnQ6IGZ1bmN0aW9uIGNvbnZlcnQoeCkge1xuICAgICAgaWYgKCFGcmFjdGlvbikge1xuICAgICAgICB0aHJvd05vRnJhY3Rpb24oeCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24oK3gpO1xuICAgIH1cbiAgfSwge1xuICAgIGZyb206ICdib29sZWFuJyxcbiAgICB0bzogJ3N0cmluZycsXG4gICAgY29udmVydDogZnVuY3Rpb24gY29udmVydCh4KSB7XG4gICAgICByZXR1cm4gU3RyaW5nKHgpO1xuICAgIH1cbiAgfSwge1xuICAgIGZyb206ICdBcnJheScsXG4gICAgdG86ICdNYXRyaXgnLFxuICAgIGNvbnZlcnQ6IGZ1bmN0aW9uIGNvbnZlcnQoYXJyYXkpIHtcbiAgICAgIGlmICghRGVuc2VNYXRyaXgpIHtcbiAgICAgICAgdGhyb3dOb01hdHJpeCgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IERlbnNlTWF0cml4KGFycmF5KTtcbiAgICB9XG4gIH0sIHtcbiAgICBmcm9tOiAnTWF0cml4JyxcbiAgICB0bzogJ0FycmF5JyxcbiAgICBjb252ZXJ0OiBmdW5jdGlvbiBjb252ZXJ0KG1hdHJpeCkge1xuICAgICAgcmV0dXJuIG1hdHJpeC52YWx1ZU9mKCk7XG4gICAgfVxuICB9XTtcbiAgcmV0dXJuIHR5cGVkO1xufSk7XG5leHBvcnRzLmNyZWF0ZVR5cGVkID0gY3JlYXRlVHlwZWQ7XG5cbmZ1bmN0aW9uIHRocm93Tm9CaWdudW1iZXIoeCkge1xuICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgY29udmVydCB2YWx1ZSBcIi5jb25jYXQoeCwgXCIgaW50byBhIEJpZ051bWJlcjogbm8gY2xhc3MgJ0JpZ051bWJlcicgcHJvdmlkZWRcIikpO1xufVxuXG5mdW5jdGlvbiB0aHJvd05vQ29tcGxleCh4KSB7XG4gIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBjb252ZXJ0IHZhbHVlIFwiLmNvbmNhdCh4LCBcIiBpbnRvIGEgQ29tcGxleCBudW1iZXI6IG5vIGNsYXNzICdDb21wbGV4JyBwcm92aWRlZFwiKSk7XG59XG5cbmZ1bmN0aW9uIHRocm93Tm9NYXRyaXgoKSB7XG4gIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbnZlcnQgYXJyYXkgaW50byBhIE1hdHJpeDogbm8gY2xhc3MgXFwnRGVuc2VNYXRyaXhcXCcgcHJvdmlkZWQnKTtcbn1cblxuZnVuY3Rpb24gdGhyb3dOb0ZyYWN0aW9uKHgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGNvbnZlcnQgdmFsdWUgXCIuY29uY2F0KHgsIFwiIGludG8gYSBGcmFjdGlvbiwgbm8gY2xhc3MgJ0ZyYWN0aW9uJyBwcm92aWRlZC5cIikpO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFsbCA9IHZvaWQgMDtcblxudmFyIGFsbEZhY3RvcmllcyA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuLi9mYWN0b3JpZXNBbnlcIikpO1xuXG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoKSB7IGlmICh0eXBlb2YgV2Vha01hcCAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gbnVsbDsgdmFyIGNhY2hlID0gbmV3IFdlYWtNYXAoKTsgX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlID0gZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKCkgeyByZXR1cm4gY2FjaGU7IH07IHJldHVybiBjYWNoZTsgfVxuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChvYmopIHsgaWYgKG9iaiAmJiBvYmouX19lc01vZHVsZSkgeyByZXR1cm4gb2JqOyB9IGlmIChvYmogPT09IG51bGwgfHwgX3R5cGVvZihvYmopICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBvYmogIT09IFwiZnVuY3Rpb25cIikgeyByZXR1cm4geyBcImRlZmF1bHRcIjogb2JqIH07IH0gdmFyIGNhY2hlID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKCk7IGlmIChjYWNoZSAmJiBjYWNoZS5oYXMob2JqKSkgeyByZXR1cm4gY2FjaGUuZ2V0KG9iaik7IH0gdmFyIG5ld09iaiA9IHt9OyB2YXIgaGFzUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7IGZvciAodmFyIGtleSBpbiBvYmopIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHsgdmFyIGRlc2MgPSBoYXNQcm9wZXJ0eURlc2NyaXB0b3IgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwga2V5KSA6IG51bGw7IGlmIChkZXNjICYmIChkZXNjLmdldCB8fCBkZXNjLnNldCkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5ld09iaiwga2V5LCBkZXNjKTsgfSBlbHNlIHsgbmV3T2JqW2tleV0gPSBvYmpba2V5XTsgfSB9IH0gbmV3T2JqW1wiZGVmYXVsdFwiXSA9IG9iajsgaWYgKGNhY2hlKSB7IGNhY2hlLnNldChvYmosIG5ld09iaik7IH0gcmV0dXJuIG5ld09iajsgfVxuXG4vLyBjcmVhdGluZyBhbGwgZmFjdG9yaWVzIGhlcmUgaW4gYSBzZXBhcmF0ZSBmaWxlIGlzIG5lZWRlZCB0byBnZXQgdHJlZS1zaGFraW5nIHdvcmtpbmdcbnZhciBhbGwgPSBhbGxGYWN0b3JpZXM7XG5leHBvcnRzLmFsbCA9IGFsbDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29uZmlnID0gdm9pZCAwO1xuXG52YXIgX2NvbmZpZyA9IHJlcXVpcmUoXCIuLi9jb3JlL2NvbmZpZ1wiKTtcblxudmFyIF9jb25maWcyID0gcmVxdWlyZShcIi4uL2NvcmUvZnVuY3Rpb24vY29uZmlnXCIpO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG4vLyBjcmVhdGUgYSByZWFkLW9ubHkgdmVyc2lvbiBvZiBjb25maWdcbnZhciBjb25maWcgPSAvKiAjX19QVVJFX18gKi9mdW5jdGlvbiBjb25maWcob3B0aW9ucykge1xuICBpZiAob3B0aW9ucykge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIGdsb2JhbCBjb25maWcgaXMgcmVhZG9ubHkuIFxcbicgKyAnUGxlYXNlIGNyZWF0ZSBhIG1hdGhqcyBpbnN0YW5jZSBpZiB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbi4gXFxuJyArICdFeGFtcGxlOlxcbicgKyAnXFxuJyArICcgIGltcG9ydCB7IGNyZWF0ZSwgYWxsIH0gZnJvbSBcXCdtYXRoanNcXCc7XFxuJyArICcgIGNvbnN0IG1hdGhqcyA9IGNyZWF0ZShhbGwpO1xcbicgKyAnICBtYXRoanMuY29uZmlnKHsgbnVtYmVyOiBcXCdCaWdOdW1iZXJcXCcgfSk7XFxuJyk7XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmZyZWV6ZShfY29uZmlnLkRFRkFVTFRfQ09ORklHKTtcbn07XG5cbmV4cG9ydHMuY29uZmlnID0gY29uZmlnO1xuXG5fZXh0ZW5kcyhjb25maWcsIF9jb25maWcuREVGQVVMVF9DT05GSUcsIHtcbiAgTUFUUklYX09QVElPTlM6IF9jb25maWcyLk1BVFJJWF9PUFRJT05TLFxuICBOVU1CRVJfT1BUSU9OUzogX2NvbmZpZzIuTlVNQkVSX09QVElPTlNcbn0pOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHlwZWREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJlc3VsdFNldERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUmVzdWx0U2V0LlJlc3VsdFNldERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJCaWdOdW1iZXJEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJDb21wbGV4RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJGcmFjdGlvbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRnJhY3Rpb25DbGFzcy5GcmFjdGlvbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJSYW5nZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUmFuZ2VDbGFzcy5SYW5nZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJNYXRyaXhEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc01hdHJpeENsYXNzLk1hdHJpeERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJEZW5zZU1hdHJpeERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjbG9uZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ2xvbmUuY2xvbmVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNJbnRlZ2VyRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNJc0ludGVnZXIuaXNJbnRlZ2VyRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzTmVnYXRpdmVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0lzTmVnYXRpdmUuaXNOZWdhdGl2ZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc051bWVyaWNEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0lzTnVtZXJpYy5pc051bWVyaWNEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaGFzTnVtZXJpY1ZhbHVlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNIYXNOdW1lcmljVmFsdWUuaGFzTnVtZXJpY1ZhbHVlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzUG9zaXRpdmVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0lzUG9zaXRpdmUuaXNQb3NpdGl2ZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc1plcm9EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0lzWmVyby5pc1plcm9EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNOYU5EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0lzTmFOLmlzTmFORGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInR5cGVPZkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVHlwZU9mLnR5cGVPZkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0eXBlb2ZEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0RlcHJlY2F0ZWRUeXBlb2YudHlwZW9mRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5lcXVhbFNjYWxhckRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTcGFyc2VNYXRyaXhEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzLlNwYXJzZU1hdHJpeERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJudW1iZXJEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc051bWJlci5udW1iZXJEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RyaW5nRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTdHJpbmcuc3RyaW5nRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImJvb2xlYW5EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0Jvb2xlYW4uYm9vbGVhbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJiaWdudW1iZXJEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0JpZ251bWJlci5iaWdudW1iZXJEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29tcGxleERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ29tcGxleC5jb21wbGV4RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZyYWN0aW9uRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNGcmFjdGlvbi5mcmFjdGlvbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtYXRyaXhEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3BsaXRVbml0RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTcGxpdFVuaXQuc3BsaXRVbml0RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInVuYXJ5TWludXNEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1VuYXJ5TWludXMudW5hcnlNaW51c0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ1bmFyeVBsdXNEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1VuYXJ5UGx1cy51bmFyeVBsdXNEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYWJzRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBYnMuYWJzRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFwcGx5RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBcHBseS5hcHBseURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhZGRTY2FsYXJEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0FkZFNjYWxhci5hZGRTY2FsYXJEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY2JydERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ2JydC5jYnJ0RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNlaWxEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NlaWwuY2VpbERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjdWJlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDdWJlLmN1YmVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZXhwRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNFeHAuZXhwRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImV4cG0xRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNFeHBtLmV4cG0xRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZpeERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRml4LmZpeERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmbG9vckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRmxvb3IuZmxvb3JEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2NkRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNHY2QuZ2NkRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImxjbURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTGNtLmxjbURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsb2cxMERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTG9nLmxvZzEwRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImxvZzJEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0xvZzIubG9nMkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtb2REZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc01vZC5tb2REZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLm11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm11bHRpcGx5RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNNdWx0aXBseS5tdWx0aXBseURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJudGhSb290RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNOdGhSb290Lm50aFJvb3REZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2lnbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU2lnbi5zaWduRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNxcnREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NxcnQuc3FydERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzcXVhcmVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NxdWFyZS5zcXVhcmVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3VidHJhY3REZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1N1YnRyYWN0LnN1YnRyYWN0RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInhnY2REZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1hnY2QueGdjZERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkb3RNdWx0aXBseURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRG90TXVsdGlwbHkuZG90TXVsdGlwbHlEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYml0QW5kRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNCaXRBbmQuYml0QW5kRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImJpdE5vdERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQml0Tm90LmJpdE5vdERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJiaXRPckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQml0T3IuYml0T3JEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYml0WG9yRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNCaXRYb3IuYml0WG9yRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFyZ0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQXJnLmFyZ0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb25qRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDb25qLmNvbmpEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaW1EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0ltLmltRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNSZS5yZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJub3REZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc05vdC5ub3REZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwib3JEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc09yLm9yRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInhvckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzWG9yLnhvckRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb25jYXREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NvbmNhdC5jb25jYXREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29sdW1uRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDb2x1bW4uY29sdW1uRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyb3NzRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDcm9zcy5jcm9zc0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkaWFnRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNEaWFnLmRpYWdEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZXllRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNFeWUuZXllRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZpbHRlckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRmlsdGVyLmZpbHRlckRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmbGF0dGVuRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNGbGF0dGVuLmZsYXR0ZW5EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZm9yRWFjaERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRm9yRWFjaC5mb3JFYWNoRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdldE1hdHJpeERhdGFUeXBlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNHZXRNYXRyaXhEYXRhVHlwZS5nZXRNYXRyaXhEYXRhVHlwZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpZGVudGl0eURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzSWRlbnRpdHkuaWRlbnRpdHlEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwia3JvbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzS3Jvbi5rcm9uRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1hcERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTWFwLm1hcERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJvbmVzRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNPbmVzLm9uZXNEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmFuZ2VEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1JhbmdlLnJhbmdlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlc2hhcGVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1Jlc2hhcGUucmVzaGFwZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZXNpemVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1Jlc2l6ZS5yZXNpemVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicm93RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNSb3cucm93RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNpemVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NpemUuc2l6ZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzcXVlZXplRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTcXVlZXplLnNxdWVlemVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3Vic2V0RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTdWJzZXQuc3Vic2V0RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRyYW5zcG9zZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVHJhbnNwb3NlLnRyYW5zcG9zZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjdHJhbnNwb3NlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDdHJhbnNwb3NlLmN0cmFuc3Bvc2VEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiemVyb3NEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1plcm9zLnplcm9zRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVyZkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRXJmLmVyZkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtb2RlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNNb2RlLm1vZGVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicHJvZERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUHJvZC5wcm9kRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZvcm1hdERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRm9ybWF0LmZvcm1hdERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwcmludERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUHJpbnQucHJpbnREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidG9EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1RvLnRvRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzUHJpbWVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0lzUHJpbWUuaXNQcmltZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJudW1lcmljRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNOdW1lcmljLm51bWVyaWNEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInBvd0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUG93LnBvd0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyb3VuZERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUm91bmQucm91bmREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibG9nRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNMb2czLmxvZ0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsb2cxcERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTG9nMXAubG9nMXBEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibnRoUm9vdHNEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc050aFJvb3RzLm50aFJvb3RzRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRvdFBvd0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRG90UG93LmRvdFBvd0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkb3REaXZpZGVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0RvdERpdmlkZS5kb3REaXZpZGVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibHNvbHZlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNMc29sdmUubHNvbHZlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInVzb2x2ZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVXNvbHZlLnVzb2x2ZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsZWZ0U2hpZnREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0xlZnRTaGlmdC5sZWZ0U2hpZnREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmlnaHRBcml0aFNoaWZ0RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNSaWdodEFyaXRoU2hpZnQucmlnaHRBcml0aFNoaWZ0RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJpZ2h0TG9nU2hpZnREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1JpZ2h0TG9nU2hpZnQucmlnaHRMb2dTaGlmdERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhbmREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0FuZC5hbmREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29tcGFyZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ29tcGFyZS5jb21wYXJlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvbXBhcmVOYXR1cmFsRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbC5jb21wYXJlTmF0dXJhbERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb21wYXJlVGV4dERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ29tcGFyZVRleHQuY29tcGFyZVRleHREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZXF1YWxEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0VxdWFsLmVxdWFsRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVxdWFsVGV4dERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRXF1YWxUZXh0LmVxdWFsVGV4dERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzbWFsbGVyRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTbWFsbGVyLnNtYWxsZXJEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic21hbGxlckVxRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTbWFsbGVyRXEuc21hbGxlckVxRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImxhcmdlckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTGFyZ2VyLmxhcmdlckRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsYXJnZXJFcURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTGFyZ2VyRXEubGFyZ2VyRXFEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVlcEVxdWFsRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNEZWVwRXF1YWwuZGVlcEVxdWFsRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInVuZXF1YWxEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1VuZXF1YWwudW5lcXVhbERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwYXJ0aXRpb25TZWxlY3REZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1BhcnRpdGlvblNlbGVjdC5wYXJ0aXRpb25TZWxlY3REZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic29ydERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU29ydC5zb3J0RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1heERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTWF4Lm1heERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtaW5EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc01pbi5taW5EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSW1tdXRhYmxlRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0ltbXV0YWJsZURlbnNlTWF0cml4Q2xhc3MuSW1tdXRhYmxlRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSW5kZXhEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuSW5kZXhEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRmlib25hY2NpSGVhcERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRmlib25hY2NpSGVhcENsYXNzLkZpYm9uYWNjaUhlYXBEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU3BhRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTcGFDbGFzcy5TcGFEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVW5pdERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidW5pdERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVW5pdEZ1bmN0aW9uLnVuaXREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3BhcnNlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTcGFyc2Uuc3BhcnNlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVVuaXREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NyZWF0ZVVuaXQuY3JlYXRlVW5pdERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhY29zRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBY29zLmFjb3NEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYWNvc2hEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0Fjb3NoLmFjb3NoRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFjb3REZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0Fjb3QuYWNvdERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhY290aERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQWNvdGguYWNvdGhEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYWNzY0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQWNzYy5hY3NjRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFjc2NoRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBY3NjaC5hY3NjaERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhc2VjRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBc2VjLmFzZWNEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXNlY2hEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0FzZWNoLmFzZWNoRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFzaW5EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0FzaW4uYXNpbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhc2luaERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQXNpbmguYXNpbmhEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXRhbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQXRhbi5hdGFuRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImF0YW4yRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBdGFuMi5hdGFuMkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhdGFuaERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQXRhbmguYXRhbmhEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29zRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDb3MuY29zRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvc2hEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0Nvc2guY29zaERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb3REZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NvdC5jb3REZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY290aERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ290aC5jb3RoRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNzY0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ3NjLmNzY0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjc2NoRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDc2NoLmNzY2hEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2VjRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTZWMuc2VjRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNlY2hEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NlY2guc2VjaERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzaW5EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1Npbi5zaW5EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2luaERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU2luaC5zaW5oRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRhbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVGFuLnRhbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0YW5oRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNUYW5oLnRhbmhEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2V0Q2FydGVzaWFuRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTZXRDYXJ0ZXNpYW4uc2V0Q2FydGVzaWFuRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNldERpZmZlcmVuY2VEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NldERpZmZlcmVuY2Uuc2V0RGlmZmVyZW5jZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzZXREaXN0aW5jdERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU2V0RGlzdGluY3Quc2V0RGlzdGluY3REZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2V0SW50ZXJzZWN0RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTZXRJbnRlcnNlY3Quc2V0SW50ZXJzZWN0RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNldElzU3Vic2V0RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTZXRJc1N1YnNldC5zZXRJc1N1YnNldERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzZXRNdWx0aXBsaWNpdHlEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NldE11bHRpcGxpY2l0eS5zZXRNdWx0aXBsaWNpdHlEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2V0UG93ZXJzZXREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NldFBvd2Vyc2V0LnNldFBvd2Vyc2V0RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNldFNpemVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NldFNpemUuc2V0U2l6ZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzZXRTeW1EaWZmZXJlbmNlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTZXRTeW1EaWZmZXJlbmNlLnNldFN5bURpZmZlcmVuY2VEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2V0VW5pb25EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NldFVuaW9uLnNldFVuaW9uRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFkZERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQWRkLmFkZERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJoeXBvdERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzSHlwb3QuaHlwb3REZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTm9ybS5ub3JtRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRvdERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRG90LmRvdERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0cmFjZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVHJhY2UudHJhY2VEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaW5kZXhEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0luZGV4LmluZGV4RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk5vZGVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc05vZGUuTm9kZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJBY2Nlc3Nvck5vZGVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0FjY2Vzc29yTm9kZS5BY2Nlc3Nvck5vZGVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQXJyYXlOb2RlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBcnJheU5vZGUuQXJyYXlOb2RlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkFzc2lnbm1lbnROb2RlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBc3NpZ25tZW50Tm9kZS5Bc3NpZ25tZW50Tm9kZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJCbG9ja05vZGVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0Jsb2NrTm9kZS5CbG9ja05vZGVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ29uZGl0aW9uYWxOb2RlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDb25kaXRpb25hbE5vZGUuQ29uZGl0aW9uYWxOb2RlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkNvbnN0YW50Tm9kZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ29uc3RhbnROb2RlLkNvbnN0YW50Tm9kZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJGdW5jdGlvbkFzc2lnbm1lbnROb2RlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlLkZ1bmN0aW9uQXNzaWdubWVudE5vZGVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSW5kZXhOb2RlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNJbmRleE5vZGUuSW5kZXhOb2RlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk9iamVjdE5vZGVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc09iamVjdE5vZGUuT2JqZWN0Tm9kZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJPcGVyYXRvck5vZGVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc09wZXJhdG9yTm9kZS5PcGVyYXRvck5vZGVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUGFyZW50aGVzaXNOb2RlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNQYXJlbnRoZXNpc05vZGUuUGFyZW50aGVzaXNOb2RlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJhbmdlTm9kZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUmFuZ2VOb2RlLlJhbmdlTm9kZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJSZWxhdGlvbmFsTm9kZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUmVsYXRpb25hbE5vZGUuUmVsYXRpb25hbE5vZGVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU3ltYm9sTm9kZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU3ltYm9sTm9kZS5TeW1ib2xOb2RlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkZ1bmN0aW9uTm9kZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRnVuY3Rpb25Ob2RlLkZ1bmN0aW9uTm9kZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwYXJzZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUGFyc2UucGFyc2VEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29tcGlsZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ29tcGlsZS5jb21waWxlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImV2YWx1YXRlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNFdmFsdWF0ZS5ldmFsdWF0ZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJldmFsRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNEZXByZWNhdGVkRXZhbC5ldmFsRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlBhcnNlckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUGFyc2VyQ2xhc3MuUGFyc2VyRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInBhcnNlckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUGFyc2VyLnBhcnNlckRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsdXBEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0x1cC5sdXBEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicXJEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1FyLnFyRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNsdURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU2x1LnNsdURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsdXNvbHZlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNMdXNvbHZlLmx1c29sdmVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSGVscERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzSGVscENsYXNzLkhlbHBEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ2hhaW5EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NoYWluQ2xhc3MuQ2hhaW5EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaGVscERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzSGVscC5oZWxwRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNoYWluRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDaGFpbi5jaGFpbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZXREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0RldC5kZXREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaW52RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNJbnYuaW52RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVpZ3NEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0VpZ3MuZWlnc0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJleHBtRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNFeHBtMi5leHBtRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNxcnRtRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTcXJ0bS5zcXJ0bURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkaXZpZGVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0RpdmlkZS5kaXZpZGVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGlzdGFuY2VEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0Rpc3RhbmNlLmRpc3RhbmNlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImludGVyc2VjdERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzSW50ZXJzZWN0LmludGVyc2VjdERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdW1EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1N1bS5zdW1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibWVhbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTWVhbi5tZWFuRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1lZGlhbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTWVkaWFuLm1lZGlhbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtYWREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc01hZC5tYWREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidmFyaWFuY2VEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1ZhcmlhbmNlLnZhcmlhbmNlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInZhckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRGVwcmVjYXRlZFZhci52YXJEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicXVhbnRpbGVTZXFEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1F1YW50aWxlU2VxLnF1YW50aWxlU2VxRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0ZERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU3RkLnN0ZERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb21iaW5hdGlvbnNEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NvbWJpbmF0aW9ucy5jb21iaW5hdGlvbnNEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29tYmluYXRpb25zV2l0aFJlcERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ29tYmluYXRpb25zV2l0aFJlcC5jb21iaW5hdGlvbnNXaXRoUmVwRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdhbW1hRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNHYW1tYS5nYW1tYURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmYWN0b3JpYWxEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0ZhY3RvcmlhbC5mYWN0b3JpYWxEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwia2xkaXZlcmdlbmNlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNLbGRpdmVyZ2VuY2Uua2xkaXZlcmdlbmNlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm11bHRpbm9taWFsRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNNdWx0aW5vbWlhbC5tdWx0aW5vbWlhbERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwZXJtdXRhdGlvbnNEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1Blcm11dGF0aW9ucy5wZXJtdXRhdGlvbnNEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGlja1JhbmRvbURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUGlja1JhbmRvbS5waWNrUmFuZG9tRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJhbmRvbURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUmFuZG9tLnJhbmRvbURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyYW5kb21JbnREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1JhbmRvbUludC5yYW5kb21JbnREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RpcmxpbmdTMkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU3RpcmxpbmdTLnN0aXJsaW5nUzJEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYmVsbE51bWJlcnNEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0JlbGxOdW1iZXJzLmJlbGxOdW1iZXJzRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNhdGFsYW5EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NhdGFsYW4uY2F0YWxhbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb21wb3NpdGlvbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ29tcG9zaXRpb24uY29tcG9zaXRpb25EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2ltcGxpZnlEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NpbXBsaWZ5LnNpbXBsaWZ5RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlcml2YXRpdmVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0Rlcml2YXRpdmUuZGVyaXZhdGl2ZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyYXRpb25hbGl6ZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUmF0aW9uYWxpemUucmF0aW9uYWxpemVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmV2aXZlckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUmV2aXZlci5yZXZpdmVyRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlcGxhY2VyRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNSZXBsYWNlci5yZXBsYWNlckRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNFLmVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVXBwZXJjYXNlRS5FRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZhbHNlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNGYWxzZS5mYWxzZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNJLmlEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSW5maW5pdHlEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0luZmluaXR5LkluZmluaXR5RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkxOMTBEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0xOLkxOMTBEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTE4yRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNMTjIuTE4yRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkxPRzEwRURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTE9HMTBFLkxPRzEwRURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJMT0cyRURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTE9HMkUuTE9HMkVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTmFORGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNOYU4uTmFORGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm51bGxEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc051bGwubnVsbERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwaGlEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1BoaS5waGlEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGlEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1BpLnBpRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlBJRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNVcHBlcmNhc2VQaS5QSURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTUVJUMV8yRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTUVJUMV8uU1FSVDFfMkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTUVJUMkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU1FSVC5TUVJUMkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0YXVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1RhdS50YXVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHJ1ZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVHJ1ZS50cnVlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInZlcnNpb25EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1ZlcnNpb24udmVyc2lvbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhdG9taWNNYXNzRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBdG9taWNNYXNzLmF0b21pY01hc3NEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXZvZ2Fkcm9EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0F2b2dhZHJvLmF2b2dhZHJvRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImJvaHJNYWduZXRvbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQm9ock1hZ25ldG9uLmJvaHJNYWduZXRvbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJib2hyUmFkaXVzRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNCb2hyUmFkaXVzLmJvaHJSYWRpdXNEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYm9sdHptYW5uRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNCb2x0em1hbm4uYm9sdHptYW5uRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNsYXNzaWNhbEVsZWN0cm9uUmFkaXVzRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDbGFzc2ljYWxFbGVjdHJvblJhZGl1cy5jbGFzc2ljYWxFbGVjdHJvblJhZGl1c0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb25kdWN0YW5jZVF1YW50dW1EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NvbmR1Y3RhbmNlUXVhbnR1bS5jb25kdWN0YW5jZVF1YW50dW1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY291bG9tYkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ291bG9tYi5jb3Vsb21iRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRldXRlcm9uTWFzc0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRGV1dGVyb25NYXNzLmRldXRlcm9uTWFzc0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJlZmltb3ZGYWN0b3JEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0VmaW1vdkZhY3Rvci5lZmltb3ZGYWN0b3JEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZWxlY3RyaWNDb25zdGFudERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRWxlY3RyaWNDb25zdGFudC5lbGVjdHJpY0NvbnN0YW50RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVsZWN0cm9uTWFzc0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRWxlY3Ryb25NYXNzLmVsZWN0cm9uTWFzc0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJlbGVtZW50YXJ5Q2hhcmdlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNFbGVtZW50YXJ5Q2hhcmdlLmVsZW1lbnRhcnlDaGFyZ2VEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZmFyYWRheURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRmFyYWRheS5mYXJhZGF5RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZlcm1pQ291cGxpbmdEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0Zlcm1pQ291cGxpbmcuZmVybWlDb3VwbGluZ0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmaW5lU3RydWN0dXJlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNGaW5lU3RydWN0dXJlLmZpbmVTdHJ1Y3R1cmVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZmlyc3RSYWRpYXRpb25EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0ZpcnN0UmFkaWF0aW9uLmZpcnN0UmFkaWF0aW9uRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdhc0NvbnN0YW50RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNHYXNDb25zdGFudC5nYXNDb25zdGFudERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJncmF2aXRhdGlvbkNvbnN0YW50RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNHcmF2aXRhdGlvbkNvbnN0YW50LmdyYXZpdGF0aW9uQ29uc3RhbnREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ3Jhdml0eURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzR3Jhdml0eS5ncmF2aXR5RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImhhcnRyZWVFbmVyZ3lEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0hhcnRyZWVFbmVyZ3kuaGFydHJlZUVuZXJneURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNJbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtLmludmVyc2VDb25kdWN0YW5jZVF1YW50dW1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwia2xpdHppbmdEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0tsaXR6aW5nLmtsaXR6aW5nRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImxvc2NobWlkdERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTG9zY2htaWR0Lmxvc2NobWlkdERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtYWduZXRpY0NvbnN0YW50RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNNYWduZXRpY0NvbnN0YW50Lm1hZ25ldGljQ29uc3RhbnREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibWFnbmV0aWNGbHV4UXVhbnR1bURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTWFnbmV0aWNGbHV4UXVhbnR1bS5tYWduZXRpY0ZsdXhRdWFudHVtRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1vbGFyTWFzc0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTW9sYXJNYXNzLm1vbGFyTWFzc0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtb2xhck1hc3NDMTJEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc01vbGFyTWFzc0MubW9sYXJNYXNzQzEyRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1vbGFyUGxhbmNrQ29uc3RhbnREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc01vbGFyUGxhbmNrQ29uc3RhbnQubW9sYXJQbGFuY2tDb25zdGFudERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtb2xhclZvbHVtZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTW9sYXJWb2x1bWUubW9sYXJWb2x1bWVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibmV1dHJvbk1hc3NEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc05ldXRyb25NYXNzLm5ldXRyb25NYXNzRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm51Y2xlYXJNYWduZXRvbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTnVjbGVhck1hZ25ldG9uLm51Y2xlYXJNYWduZXRvbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwbGFuY2tDaGFyZ2VEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1BsYW5ja0NoYXJnZS5wbGFuY2tDaGFyZ2VEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGxhbmNrQ29uc3RhbnREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1BsYW5ja0NvbnN0YW50LnBsYW5ja0NvbnN0YW50RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInBsYW5ja0xlbmd0aERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUGxhbmNrTGVuZ3RoLnBsYW5ja0xlbmd0aERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwbGFuY2tNYXNzRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNQbGFuY2tNYXNzLnBsYW5ja01hc3NEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGxhbmNrVGVtcGVyYXR1cmVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1BsYW5ja1RlbXBlcmF0dXJlLnBsYW5ja1RlbXBlcmF0dXJlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInBsYW5ja1RpbWVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1BsYW5ja1RpbWUucGxhbmNrVGltZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwcm90b25NYXNzRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNQcm90b25NYXNzLnByb3Rvbk1hc3NEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicXVhbnR1bU9mQ2lyY3VsYXRpb25EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1F1YW50dW1PZkNpcmN1bGF0aW9uLnF1YW50dW1PZkNpcmN1bGF0aW9uRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlZHVjZWRQbGFuY2tDb25zdGFudERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUmVkdWNlZFBsYW5ja0NvbnN0YW50LnJlZHVjZWRQbGFuY2tDb25zdGFudERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyeWRiZXJnRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNSeWRiZXJnLnJ5ZGJlcmdEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2Fja3VyVGV0cm9kZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU2Fja3VyVGV0cm9kZS5zYWNrdXJUZXRyb2RlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNlY29uZFJhZGlhdGlvbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU2Vjb25kUmFkaWF0aW9uLnNlY29uZFJhZGlhdGlvbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzcGVlZE9mTGlnaHREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NwZWVkT2ZMaWdodC5zcGVlZE9mTGlnaHREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RlZmFuQm9sdHptYW5uRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTdGVmYW5Cb2x0em1hbm4uc3RlZmFuQm9sdHptYW5uRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRob21zb25Dcm9zc1NlY3Rpb25EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1Rob21zb25Dcm9zc1NlY3Rpb24udGhvbXNvbkNyb3NzU2VjdGlvbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ2YWN1dW1JbXBlZGFuY2VEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1ZhY3V1bUltcGVkYW5jZS52YWN1dW1JbXBlZGFuY2VEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwid2Vha01peGluZ0FuZ2xlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNXZWFrTWl4aW5nQW5nbGUud2Vha01peGluZ0FuZ2xlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIndpZW5EaXNwbGFjZW1lbnREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1dpZW5EaXNwbGFjZW1lbnQud2llbkRpc3BsYWNlbWVudERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhcHBseVRyYW5zZm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQXBwbHlUcmFuc2Zvcm0uYXBwbHlUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29sdW1uVHJhbnNmb3JtRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDb2x1bW5UcmFuc2Zvcm0uY29sdW1uVHJhbnNmb3JtRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZpbHRlclRyYW5zZm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRmlsdGVyVHJhbnNmb3JtLmZpbHRlclRyYW5zZm9ybURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmb3JFYWNoVHJhbnNmb3JtRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNGb3JFYWNoVHJhbnNmb3JtLmZvckVhY2hUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaW5kZXhUcmFuc2Zvcm1EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0luZGV4VHJhbnNmb3JtLmluZGV4VHJhbnNmb3JtRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1hcFRyYW5zZm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTWFwVHJhbnNmb3JtLm1hcFRyYW5zZm9ybURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtYXhUcmFuc2Zvcm1EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc01heFRyYW5zZm9ybS5tYXhUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibWVhblRyYW5zZm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTWVhblRyYW5zZm9ybS5tZWFuVHJhbnNmb3JtRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1pblRyYW5zZm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTWluVHJhbnNmb3JtLm1pblRyYW5zZm9ybURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyYW5nZVRyYW5zZm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUmFuZ2VUcmFuc2Zvcm0ucmFuZ2VUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicm93VHJhbnNmb3JtRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNSb3dUcmFuc2Zvcm0ucm93VHJhbnNmb3JtRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN1YnNldFRyYW5zZm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU3Vic2V0VHJhbnNmb3JtLnN1YnNldFRyYW5zZm9ybURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb25jYXRUcmFuc2Zvcm1EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NvbmNhdFRyYW5zZm9ybS5jb25jYXRUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RkVHJhbnNmb3JtRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTdGRUcmFuc2Zvcm0uc3RkVHJhbnNmb3JtRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN1bVRyYW5zZm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU3VtVHJhbnNmb3JtLnN1bVRyYW5zZm9ybURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ2YXJpYW5jZVRyYW5zZm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVmFyaWFuY2VUcmFuc2Zvcm0udmFyaWFuY2VUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYWxsXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9hbGxGYWN0b3JpZXNBbnkuYWxsO1xuICB9XG59KTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUmVzdWx0U2V0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1Jlc3VsdFNldC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRnJhY3Rpb25DbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUmFuZ2VDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYW5nZUNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDbG9uZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDbG9uZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNJbnRlZ2VyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0lzSW50ZWdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNOZWdhdGl2ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJc05lZ2F0aXZlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc051bWVyaWMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSXNOdW1lcmljLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNIYXNOdW1lcmljVmFsdWUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSGFzTnVtZXJpY1ZhbHVlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc1Bvc2l0aXZlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0lzUG9zaXRpdmUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzWmVybyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJc1plcm8uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzTmFOID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0lzTmFOLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlT2YgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVHlwZU9mLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEZXByZWNhdGVkVHlwZW9mID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RlcHJlY2F0ZWRUeXBlb2YuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTnVtYmVyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc051bWJlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3RyaW5nID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N0cmluZy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQm9vbGVhbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNCb29sZWFuLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdudW1iZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQmlnbnVtYmVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbXBsZXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZyYWN0aW9uID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZyYWN0aW9uLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTcGxpdFVuaXQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3BsaXRVbml0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1VuYXJ5TWludXMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuYXJ5UGx1cyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNVbmFyeVBsdXMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FicyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBYnMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FwcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FwcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDYnJ0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NicnQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NlaWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ2VpbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ3ViZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDdWJlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFeHAgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRXhwLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFeHBtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0V4cG0xLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGbG9vciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGbG9vci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzR2NkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0djZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTGNtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xjbS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTG9nID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xvZzEwLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMb2cyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xvZzIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01vZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNb2QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNdWx0aXBseS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTnRoUm9vdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNOdGhSb290LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaWduID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NpZ24uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NxcnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3FydC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3F1YXJlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NxdWFyZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3VidHJhY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3VidHJhY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1hnY2QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzWGdjZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRG90TXVsdGlwbHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRG90TXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpdEFuZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNCaXRBbmQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpdE5vdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNCaXROb3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpdE9yID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0JpdE9yLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNCaXRYb3IgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQml0WG9yLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBcmcgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQXJnLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb25qID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbmouZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ltID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ltLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTm90ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc05vdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzT3IgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzT3IuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1hvciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNYb3IuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbmNhdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb25jYXQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbHVtbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb2x1bW4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Nyb3NzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Nyb3NzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEaWFnID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RpYWcuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0V5ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNFeWUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZpbHRlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGaWx0ZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZsYXR0ZW4gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmxhdHRlbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRm9yRWFjaCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGb3JFYWNoLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNHZXRNYXRyaXhEYXRhVHlwZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNHZXRNYXRyaXhEYXRhVHlwZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSWRlbnRpdHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSWRlbnRpdHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0tyb24gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzS3Jvbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWFwID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01hcC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzT25lcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNPbmVzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSYW5nZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYW5nZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUmVzaGFwZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSZXNoYXBlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSZXNpemUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmVzaXplLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSb3cgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUm93LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaXplID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NpemUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NxdWVlemUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3F1ZWV6ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3Vic2V0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N1YnNldC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHJhbnNwb3NlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1RyYW5zcG9zZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ3RyYW5zcG9zZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDdHJhbnNwb3NlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNaZXJvcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNaZXJvcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXJmID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VyZi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTW9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQcm9kID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1Byb2QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Zvcm1hdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGb3JtYXQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1ByaW50ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1ByaW50LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUbyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUby5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNQcmltZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJc1ByaW1lLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNOdW1lcmljID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc051bWVyaWMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BvdyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQb3cuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1JvdW5kID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1JvdW5kLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMb2czID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xvZy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTG9nMXAgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTG9nMXAuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc050aFJvb3RzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc050aFJvb3RzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEb3RQb3cgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRG90UG93LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEb3REaXZpZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRG90RGl2aWRlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMc29sdmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTHNvbHZlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVc29sdmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVXNvbHZlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMZWZ0U2hpZnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTGVmdFNoaWZ0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSaWdodEFyaXRoU2hpZnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmlnaHRBcml0aFNoaWZ0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSaWdodExvZ1NoaWZ0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1JpZ2h0TG9nU2hpZnQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FuZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBbmQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBhcmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29tcGFyZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBhcmVUZXh0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbXBhcmVUZXh0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNFcXVhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxUZXh0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VxdWFsVGV4dC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU21hbGxlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTbWFsbGVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTbWFsbGVyRXEgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU21hbGxlckVxLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMYXJnZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTGFyZ2VyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMYXJnZXJFcSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMYXJnZXJFcS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVlcEVxdWFsID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RlZXBFcXVhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5lcXVhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNVbmVxdWFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQYXJ0aXRpb25TZWxlY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGFydGl0aW9uU2VsZWN0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTb3J0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NvcnQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01heCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNYXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01pbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNaW4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ltbXV0YWJsZURlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSW1tdXRhYmxlRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJbmRleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGaWJvbmFjY2lIZWFwQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmlib25hY2NpSGVhcENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTcGFDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTcGFDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdEZ1bmN0aW9uID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1VuaXRGdW5jdGlvbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3BhcnNlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NwYXJzZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ3JlYXRlVW5pdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDcmVhdGVVbml0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBY29zID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Fjb3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Fjb3NoID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Fjb3NoLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBY290ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Fjb3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Fjb3RoID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Fjb3RoLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBY3NjID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Fjc2MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Fjc2NoID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Fjc2NoLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBc2VjID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FzZWMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FzZWNoID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FzZWNoLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBc2luID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FzaW4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FzaW5oID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FzaW5oLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBdGFuID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0F0YW4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0F0YW4yID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0F0YW4yLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBdGFuaCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBdGFuaC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29zID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Nvcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29zaCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb3NoLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ290LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb3RoID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvdGguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NzYyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDc2MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NzY2ggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ3NjaC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2VjID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NlYy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2VjaCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZWNoLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaW4gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2luLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaW5oID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NpbmguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1RhbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUYW4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1RhbmggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVGFuaC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2V0Q2FydGVzaWFuID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NldENhcnRlc2lhbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2V0RGlmZmVyZW5jZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZXREaWZmZXJlbmNlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTZXREaXN0aW5jdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZXREaXN0aW5jdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2V0SW50ZXJzZWN0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NldEludGVyc2VjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2V0SXNTdWJzZXQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0SXNTdWJzZXQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NldE11bHRpcGxpY2l0eSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZXRNdWx0aXBsaWNpdHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NldFBvd2Vyc2V0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NldFBvd2Vyc2V0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTZXRTaXplID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NldFNpemUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NldFN5bURpZmZlcmVuY2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0U3ltRGlmZmVyZW5jZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2V0VW5pb24gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0VW5pb24uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBZGQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0h5cG90ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0h5cG90LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNOb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc05vcm0uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RvdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNEb3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1RyYWNlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1RyYWNlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJbmRleC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBY2Nlc3Nvck5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQWNjZXNzb3JOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBcnJheU5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQXJyYXlOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBc3NpZ25tZW50Tm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBc3NpZ25tZW50Tm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmxvY2tOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Jsb2NrTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29uZGl0aW9uYWxOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbmRpdGlvbmFsTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29uc3RhbnROb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbnN0YW50Tm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleE5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSW5kZXhOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNPYmplY3ROb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc09iamVjdE5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc09wZXJhdG9yTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNPcGVyYXRvck5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BhcmVudGhlc2lzTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQYXJlbnRoZXNpc05vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1JhbmdlTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYW5nZU5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1JlbGF0aW9uYWxOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1JlbGF0aW9uYWxOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTeW1ib2xOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N5bWJvbE5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Z1bmN0aW9uTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGdW5jdGlvbk5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BhcnNlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1BhcnNlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21waWxlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbXBpbGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0V2YWx1YXRlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0V2YWx1YXRlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEZXByZWNhdGVkRXZhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNEZXByZWNhdGVkRXZhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGFyc2VyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGFyc2VyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BhcnNlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQYXJzZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0x1cCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMdXAuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1FyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1FyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTbHUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2x1LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMdXNvbHZlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0x1c29sdmUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0hlbHBDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNIZWxwQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NoYWluQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ2hhaW5DbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSGVscCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNIZWxwLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDaGFpbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDaGFpbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGV0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RldC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW52ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ludi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRWlncyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNFaWdzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFeHBtMiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNFeHBtLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTcXJ0bSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTcXJ0bS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RpdmlkZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGlzdGFuY2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRGlzdGFuY2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ludGVyc2VjdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJbnRlcnNlY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1bSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTdW0uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01lYW4gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTWVhbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWVkaWFuID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01lZGlhbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWFkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01hZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVmFyaWFuY2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVmFyaWFuY2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlcHJlY2F0ZWRWYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRGVwcmVjYXRlZFZhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUXVhbnRpbGVTZXEgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUXVhbnRpbGVTZXEuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N0ZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTdGQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbWJpbmF0aW9ucyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb21iaW5hdGlvbnMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbWJpbmF0aW9uc1dpdGhSZXAgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29tYmluYXRpb25zV2l0aFJlcC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzR2FtbWEgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzR2FtbWEuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZhY3RvcmlhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGYWN0b3JpYWwuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0tsZGl2ZXJnZW5jZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNLbGRpdmVyZ2VuY2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpbm9taWFsID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc011bHRpbm9taWFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQZXJtdXRhdGlvbnMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGVybXV0YXRpb25zLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQaWNrUmFuZG9tID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1BpY2tSYW5kb20uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1JhbmRvbSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYW5kb20uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1JhbmRvbUludCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYW5kb21JbnQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N0aXJsaW5nUyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTdGlybGluZ1MyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNCZWxsTnVtYmVycyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNCZWxsTnVtYmVycy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ2F0YWxhbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDYXRhbGFuLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wb3NpdGlvbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb21wb3NpdGlvbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2ltcGxpZnkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2ltcGxpZnkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Rlcml2YXRpdmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRGVyaXZhdGl2ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUmF0aW9uYWxpemUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmF0aW9uYWxpemUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1Jldml2ZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmV2aXZlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUmVwbGFjZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmVwbGFjZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVXBwZXJjYXNlRSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNVcHBlcmNhc2VFLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGYWxzZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGYWxzZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmZpbml0eSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJbmZpbml0eS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTE4gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTE4xMC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTE4yID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xOMi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTE9HMTBFID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xPRzEwRS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTE9HMkUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTE9HMkUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc05hTiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNOYU4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc051bGwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTnVsbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGhpID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1BoaS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VwcGVyY2FzZVBpID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1VwcGVyY2FzZVBpLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTUVJUMV8gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU1FSVDFfMi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU1FSVCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTUVJUMi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVGF1ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1RhdS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHJ1ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUcnVlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNWZXJzaW9uID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1ZlcnNpb24uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0F0b21pY01hc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQXRvbWljTWFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQXZvZ2Fkcm8gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQXZvZ2Fkcm8uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0JvaHJNYWduZXRvbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNCb2hyTWFnbmV0b24uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0JvaHJSYWRpdXMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQm9oclJhZGl1cy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQm9sdHptYW5uID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0JvbHR6bWFubi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ2xhc3NpY2FsRWxlY3Ryb25SYWRpdXMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ2xhc3NpY2FsRWxlY3Ryb25SYWRpdXMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbmR1Y3RhbmNlUXVhbnR1bSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb25kdWN0YW5jZVF1YW50dW0uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvdWxvbWIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ291bG9tYi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGV1dGVyb25NYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RldXRlcm9uTWFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRWZpbW92RmFjdG9yID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VmaW1vdkZhY3Rvci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRWxlY3RyaWNDb25zdGFudCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNFbGVjdHJpY0NvbnN0YW50LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFbGVjdHJvbk1hc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRWxlY3Ryb25NYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFbGVtZW50YXJ5Q2hhcmdlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VsZW1lbnRhcnlDaGFyZ2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZhcmFkYXkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmFyYWRheS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRmVybWlDb3VwbGluZyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGZXJtaUNvdXBsaW5nLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGaW5lU3RydWN0dXJlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZpbmVTdHJ1Y3R1cmUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZpcnN0UmFkaWF0aW9uID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZpcnN0UmFkaWF0aW9uLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNHYXNDb25zdGFudCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNHYXNDb25zdGFudC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzR3Jhdml0YXRpb25Db25zdGFudCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNHcmF2aXRhdGlvbkNvbnN0YW50LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNHcmF2aXR5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0dyYXZpdHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0hhcnRyZWVFbmVyZ3kgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSGFydHJlZUVuZXJneS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNLbGl0emluZyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNLbGl0emluZy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTG9zY2htaWR0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xvc2NobWlkdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWFnbmV0aWNDb25zdGFudCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNYWduZXRpY0NvbnN0YW50LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYWduZXRpY0ZsdXhRdWFudHVtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01hZ25ldGljRmx1eFF1YW50dW0uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01vbGFyTWFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNb2xhck1hc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01vbGFyTWFzc0MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTW9sYXJNYXNzQzEyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNb2xhclBsYW5ja0NvbnN0YW50ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01vbGFyUGxhbmNrQ29uc3RhbnQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01vbGFyVm9sdW1lID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01vbGFyVm9sdW1lLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNOZXV0cm9uTWFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNOZXV0cm9uTWFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTnVjbGVhck1hZ25ldG9uID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc051Y2xlYXJNYWduZXRvbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGxhbmNrQ2hhcmdlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1BsYW5ja0NoYXJnZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGxhbmNrQ29uc3RhbnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGxhbmNrQ29uc3RhbnQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BsYW5ja0xlbmd0aCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQbGFuY2tMZW5ndGguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BsYW5ja01hc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGxhbmNrTWFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGxhbmNrVGVtcGVyYXR1cmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGxhbmNrVGVtcGVyYXR1cmUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BsYW5ja1RpbWUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGxhbmNrVGltZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUHJvdG9uTWFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQcm90b25NYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNRdWFudHVtT2ZDaXJjdWxhdGlvbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNRdWFudHVtT2ZDaXJjdWxhdGlvbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUmVkdWNlZFBsYW5ja0NvbnN0YW50ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1JlZHVjZWRQbGFuY2tDb25zdGFudC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUnlkYmVyZyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSeWRiZXJnLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTYWNrdXJUZXRyb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NhY2t1clRldHJvZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NlY29uZFJhZGlhdGlvbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZWNvbmRSYWRpYXRpb24uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NwZWVkT2ZMaWdodCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTcGVlZE9mTGlnaHQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N0ZWZhbkJvbHR6bWFubiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTdGVmYW5Cb2x0em1hbm4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1Rob21zb25Dcm9zc1NlY3Rpb24gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVGhvbXNvbkNyb3NzU2VjdGlvbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVmFjdXVtSW1wZWRhbmNlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1ZhY3V1bUltcGVkYW5jZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzV2Vha01peGluZ0FuZ2xlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1dlYWtNaXhpbmdBbmdsZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzV2llbkRpc3BsYWNlbWVudCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNXaWVuRGlzcGxhY2VtZW50LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBcHBseVRyYW5zZm9ybSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBcHBseVRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29sdW1uVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbHVtblRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRmlsdGVyVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZpbHRlclRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRm9yRWFjaFRyYW5zZm9ybSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGb3JFYWNoVHJhbnNmb3JtLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleFRyYW5zZm9ybSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJbmRleFRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWFwVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01hcFRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF4VHJhbnNmb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01heFRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWVhblRyYW5zZm9ybSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNZWFuVHJhbnNmb3JtLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNaW5UcmFuc2Zvcm0gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTWluVHJhbnNmb3JtLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSYW5nZVRyYW5zZm9ybSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYW5nZVRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUm93VHJhbnNmb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1Jvd1RyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3Vic2V0VHJhbnNmb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N1YnNldFRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29uY2F0VHJhbnNmb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbmNhdFRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3RkVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N0ZFRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3VtVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N1bVRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVmFyaWFuY2VUcmFuc2Zvcm0gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVmFyaWFuY2VUcmFuc2Zvcm0uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2FsbEZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuL2FsbEZhY3Rvcmllc0FueS5qc1wiKTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWJzRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYWJzRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBYnM6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQWJzXG59O1xuZXhwb3J0cy5hYnNEZXBlbmRlbmNpZXMgPSBhYnNEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkFjY2Vzc29yTm9kZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3Vic2V0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3Vic2V0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIEFjY2Vzc29yTm9kZURlcGVuZGVuY2llcyA9IHtcbiAgTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc05vZGUuTm9kZURlcGVuZGVuY2llcyxcbiAgc3Vic2V0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3Vic2V0LnN1YnNldERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQWNjZXNzb3JOb2RlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUFjY2Vzc29yTm9kZVxufTtcbmV4cG9ydHMuQWNjZXNzb3JOb2RlRGVwZW5kZW5jaWVzID0gQWNjZXNzb3JOb2RlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hY29zRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBhY29zRGVwZW5kZW5jaWVzID0ge1xuICBDb21wbGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLkNvbXBsZXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFjb3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQWNvc1xufTtcbmV4cG9ydHMuYWNvc0RlcGVuZGVuY2llcyA9IGFjb3NEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFjb3NoRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBhY29zaERlcGVuZGVuY2llcyA9IHtcbiAgQ29tcGxleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5Db21wbGV4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBY29zaDogX2ZhY3Rvcmllc0FueS5jcmVhdGVBY29zaFxufTtcbmV4cG9ydHMuYWNvc2hEZXBlbmRlbmNpZXMgPSBhY29zaERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWNvdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGFjb3REZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQWNvdDogX2ZhY3Rvcmllc0FueS5jcmVhdGVBY290XG59O1xuZXhwb3J0cy5hY290RGVwZW5kZW5jaWVzID0gYWNvdERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWNvdGhEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGFjb3RoRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQWNvdGg6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQWNvdGhcbn07XG5leHBvcnRzLmFjb3RoRGVwZW5kZW5jaWVzID0gYWNvdGhEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFjc2NEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGFjc2NEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgQ29tcGxleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5Db21wbGV4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBY3NjOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUFjc2Ncbn07XG5leHBvcnRzLmFjc2NEZXBlbmRlbmNpZXMgPSBhY3NjRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hY3NjaERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGFjc2NoRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFjc2NoOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUFjc2NoXG59O1xuZXhwb3J0cy5hY3NjaERlcGVuZGVuY2llcyA9IGFjc2NoRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hZGREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3BhcnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGFkZERlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBTcGFyc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcy5TcGFyc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGFkZFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZFNjYWxhci5hZGRTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFkZDogX2ZhY3Rvcmllc0FueS5jcmVhdGVBZGRcbn07XG5leHBvcnRzLmFkZERlcGVuZGVuY2llcyA9IGFkZERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWRkU2NhbGFyRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYWRkU2NhbGFyRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBZGRTY2FsYXI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQWRkU2NhbGFyXG59O1xuZXhwb3J0cy5hZGRTY2FsYXJEZXBlbmRlbmNpZXMgPSBhZGRTY2FsYXJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFuZERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc05vdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc05vdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzWmVyb3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNaZXJvcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBhbmREZXBlbmRlbmNpZXMgPSB7XG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG5vdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc05vdC5ub3REZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIHplcm9zRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzWmVyb3MuemVyb3NEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFuZDogX2ZhY3Rvcmllc0FueS5jcmVhdGVBbmRcbn07XG5leHBvcnRzLmFuZERlcGVuZGVuY2llcyA9IGFuZERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYXBwbHlEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNJbnRlZ2VyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNJbnRlZ2VyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGFwcGx5RGVwZW5kZW5jaWVzID0ge1xuICBpc0ludGVnZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc0ludGVnZXIuaXNJbnRlZ2VyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBcHBseTogX2ZhY3Rvcmllc0FueS5jcmVhdGVBcHBseVxufTtcbmV4cG9ydHMuYXBwbHlEZXBlbmRlbmNpZXMgPSBhcHBseURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYXBwbHlUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNJbnRlZ2VyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNJbnRlZ2VyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGFwcGx5VHJhbnNmb3JtRGVwZW5kZW5jaWVzID0ge1xuICBpc0ludGVnZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc0ludGVnZXIuaXNJbnRlZ2VyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBcHBseVRyYW5zZm9ybTogX2ZhY3Rvcmllc0FueS5jcmVhdGVBcHBseVRyYW5zZm9ybVxufTtcbmV4cG9ydHMuYXBwbHlUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSBhcHBseVRyYW5zZm9ybURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYXJnRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYXJnRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBcmc6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQXJnXG59O1xuZXhwb3J0cy5hcmdEZXBlbmRlbmNpZXMgPSBhcmdEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkFycmF5Tm9kZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBBcnJheU5vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOb2RlLk5vZGVEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFycmF5Tm9kZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVBcnJheU5vZGVcbn07XG5leHBvcnRzLkFycmF5Tm9kZURlcGVuZGVuY2llcyA9IEFycmF5Tm9kZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYXNlY0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYXNlY0RlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBDb21wbGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLkNvbXBsZXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFzZWM6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQXNlY1xufTtcbmV4cG9ydHMuYXNlY0RlcGVuZGVuY2llcyA9IGFzZWNEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFzZWNoRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBhc2VjaERlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBDb21wbGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLkNvbXBsZXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFzZWNoOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUFzZWNoXG59O1xuZXhwb3J0cy5hc2VjaERlcGVuZGVuY2llcyA9IGFzZWNoRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hc2luRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBhc2luRGVwZW5kZW5jaWVzID0ge1xuICBDb21wbGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLkNvbXBsZXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFzaW46IF9mYWN0b3JpZXNBbnkuY3JlYXRlQXNpblxufTtcbmV4cG9ydHMuYXNpbkRlcGVuZGVuY2llcyA9IGFzaW5EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFzaW5oRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYXNpbmhEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFzaW5oOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUFzaW5oXG59O1xuZXhwb3J0cy5hc2luaERlcGVuZGVuY2llcyA9IGFzaW5oRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5Bc3NpZ25tZW50Tm9kZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc05vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJzZXQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJzZXQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgQXNzaWdubWVudE5vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOb2RlLk5vZGVEZXBlbmRlbmNpZXMsXG4gIHN1YnNldERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnNldC5zdWJzZXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFzc2lnbm1lbnROb2RlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUFzc2lnbm1lbnROb2RlXG59O1xuZXhwb3J0cy5Bc3NpZ25tZW50Tm9kZURlcGVuZGVuY2llcyA9IEFzc2lnbm1lbnROb2RlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hdGFuRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYXRhbkRlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQXRhbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVBdGFuXG59O1xuZXhwb3J0cy5hdGFuRGVwZW5kZW5jaWVzID0gYXRhbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYXRhbjJEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBhdGFuMkRlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUF0YW4yOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUF0YW4yXG59O1xuZXhwb3J0cy5hdGFuMkRlcGVuZGVuY2llcyA9IGF0YW4yRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hdGFuaERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYXRhbmhEZXBlbmRlbmNpZXMgPSB7XG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQXRhbmg6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQXRhbmhcbn07XG5leHBvcnRzLmF0YW5oRGVwZW5kZW5jaWVzID0gYXRhbmhEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmF0b21pY01hc3NEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGF0b21pY01hc3NEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBdG9taWNNYXNzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUF0b21pY01hc3Ncbn07XG5leHBvcnRzLmF0b21pY01hc3NEZXBlbmRlbmNpZXMgPSBhdG9taWNNYXNzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hdm9nYWRyb0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYXZvZ2Fkcm9EZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBdm9nYWRybzogX2ZhY3Rvcmllc0FueS5jcmVhdGVBdm9nYWRyb1xufTtcbmV4cG9ydHMuYXZvZ2Fkcm9EZXBlbmRlbmNpZXMgPSBhdm9nYWRyb0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYmVsbE51bWJlcnNEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc0ludGVnZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc0ludGVnZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzTmVnYXRpdmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc05lZ2F0aXZlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdGlybGluZ1MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdGlybGluZ1MyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGJlbGxOdW1iZXJzRGVwZW5kZW5jaWVzID0ge1xuICBhZGRTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuYWRkU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBpc0ludGVnZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc0ludGVnZXIuaXNJbnRlZ2VyRGVwZW5kZW5jaWVzLFxuICBpc05lZ2F0aXZlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSXNOZWdhdGl2ZS5pc05lZ2F0aXZlRGVwZW5kZW5jaWVzLFxuICBzdGlybGluZ1MyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3RpcmxpbmdTLnN0aXJsaW5nUzJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUJlbGxOdW1iZXJzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUJlbGxOdW1iZXJzXG59O1xuZXhwb3J0cy5iZWxsTnVtYmVyc0RlcGVuZGVuY2llcyA9IGJlbGxOdW1iZXJzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBCaWdOdW1iZXJEZXBlbmRlbmNpZXMgPSB7XG4gIGNyZWF0ZUJpZ051bWJlckNsYXNzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUJpZ051bWJlckNsYXNzXG59O1xuZXhwb3J0cy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMgPSBCaWdOdW1iZXJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJpZ251bWJlckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGJpZ251bWJlckRlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVCaWdudW1iZXI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQmlnbnVtYmVyXG59O1xuZXhwb3J0cy5iaWdudW1iZXJEZXBlbmRlbmNpZXMgPSBiaWdudW1iZXJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJpdEFuZERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYml0QW5kRGVwZW5kZW5jaWVzID0ge1xuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVCaXRBbmQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQml0QW5kXG59O1xuZXhwb3J0cy5iaXRBbmREZXBlbmRlbmNpZXMgPSBiaXRBbmREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJpdE5vdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGJpdE5vdERlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQml0Tm90OiBfZmFjdG9yaWVzQW55LmNyZWF0ZUJpdE5vdFxufTtcbmV4cG9ydHMuYml0Tm90RGVwZW5kZW5jaWVzID0gYml0Tm90RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5iaXRPckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGJpdE9yRGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUJpdE9yOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUJpdE9yXG59O1xuZXhwb3J0cy5iaXRPckRlcGVuZGVuY2llcyA9IGJpdE9yRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5iaXRYb3JEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBiaXRYb3JEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQml0WG9yOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUJpdFhvclxufTtcbmV4cG9ydHMuYml0WG9yRGVwZW5kZW5jaWVzID0gYml0WG9yRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5CbG9ja05vZGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc05vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1Jlc3VsdFNldCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1Jlc3VsdFNldC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBCbG9ja05vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOb2RlLk5vZGVEZXBlbmRlbmNpZXMsXG4gIFJlc3VsdFNldERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1Jlc3VsdFNldC5SZXN1bHRTZXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUJsb2NrTm9kZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVCbG9ja05vZGVcbn07XG5leHBvcnRzLkJsb2NrTm9kZURlcGVuZGVuY2llcyA9IEJsb2NrTm9kZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYm9ock1hZ25ldG9uRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBib2hyTWFnbmV0b25EZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVCb2hyTWFnbmV0b246IF9mYWN0b3JpZXNBbnkuY3JlYXRlQm9ock1hZ25ldG9uXG59O1xuZXhwb3J0cy5ib2hyTWFnbmV0b25EZXBlbmRlbmNpZXMgPSBib2hyTWFnbmV0b25EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJvaHJSYWRpdXNEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGJvaHJSYWRpdXNEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVCb2hyUmFkaXVzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUJvaHJSYWRpdXNcbn07XG5leHBvcnRzLmJvaHJSYWRpdXNEZXBlbmRlbmNpZXMgPSBib2hyUmFkaXVzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5ib2x0em1hbm5EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGJvbHR6bWFubkRlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUJvbHR6bWFubjogX2ZhY3Rvcmllc0FueS5jcmVhdGVCb2x0em1hbm5cbn07XG5leHBvcnRzLmJvbHR6bWFubkRlcGVuZGVuY2llcyA9IGJvbHR6bWFubkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYm9vbGVhbkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGJvb2xlYW5EZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUJvb2xlYW46IF9mYWN0b3JpZXNBbnkuY3JlYXRlQm9vbGVhblxufTtcbmV4cG9ydHMuYm9vbGVhbkRlcGVuZGVuY2llcyA9IGJvb2xlYW5EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNhdGFsYW5EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21iaW5hdGlvbnMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21iaW5hdGlvbnMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNJbnRlZ2VyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNJbnRlZ2VyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc05lZ2F0aXZlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNOZWdhdGl2ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjYXRhbGFuRGVwZW5kZW5jaWVzID0ge1xuICBhZGRTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuYWRkU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBjb21iaW5hdGlvbnNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21iaW5hdGlvbnMuY29tYmluYXRpb25zRGVwZW5kZW5jaWVzLFxuICBkaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBpc0ludGVnZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc0ludGVnZXIuaXNJbnRlZ2VyRGVwZW5kZW5jaWVzLFxuICBpc05lZ2F0aXZlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSXNOZWdhdGl2ZS5pc05lZ2F0aXZlRGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLm11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDYXRhbGFuOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNhdGFsYW5cbn07XG5leHBvcnRzLmNhdGFsYW5EZXBlbmRlbmNpZXMgPSBjYXRhbGFuRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jYnJ0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRnJhY3Rpb25DbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzTmVnYXRpdmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc05lZ2F0aXZlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuYXJ5TWludXMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGNicnREZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgQ29tcGxleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5Db21wbGV4RGVwZW5kZW5jaWVzLFxuICBGcmFjdGlvbkRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MuRnJhY3Rpb25EZXBlbmRlbmNpZXMsXG4gIGlzTmVnYXRpdmVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc05lZ2F0aXZlLmlzTmVnYXRpdmVEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIHVuYXJ5TWludXNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzLnVuYXJ5TWludXNEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUNicnQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ2JydFxufTtcbmV4cG9ydHMuY2JydERlcGVuZGVuY2llcyA9IGNicnREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNlaWxEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzUm91bmQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNSb3VuZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjZWlsRGVwZW5kZW5jaWVzID0ge1xuICByb3VuZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1JvdW5kLnJvdW5kRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDZWlsOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNlaWxcbn07XG5leHBvcnRzLmNlaWxEZXBlbmRlbmNpZXMgPSBjZWlsRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jaGFpbkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDaGFpbkNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ2hhaW5DbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjaGFpbkRlcGVuZGVuY2llcyA9IHtcbiAgQ2hhaW5EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDaGFpbkNsYXNzLkNoYWluRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDaGFpbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVDaGFpblxufTtcbmV4cG9ydHMuY2hhaW5EZXBlbmRlbmNpZXMgPSBjaGFpbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuQ2hhaW5EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBDaGFpbkRlcGVuZGVuY2llcyA9IHtcbiAgY3JlYXRlQ2hhaW5DbGFzczogX2ZhY3Rvcmllc0FueS5jcmVhdGVDaGFpbkNsYXNzXG59O1xuZXhwb3J0cy5DaGFpbkRlcGVuZGVuY2llcyA9IENoYWluRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jbGFzc2ljYWxFbGVjdHJvblJhZGl1c0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY2xhc3NpY2FsRWxlY3Ryb25SYWRpdXNEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDbGFzc2ljYWxFbGVjdHJvblJhZGl1czogX2ZhY3Rvcmllc0FueS5jcmVhdGVDbGFzc2ljYWxFbGVjdHJvblJhZGl1c1xufTtcbmV4cG9ydHMuY2xhc3NpY2FsRWxlY3Ryb25SYWRpdXNEZXBlbmRlbmNpZXMgPSBjbGFzc2ljYWxFbGVjdHJvblJhZGl1c0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY2xvbmVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjbG9uZURlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ2xvbmU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ2xvbmVcbn07XG5leHBvcnRzLmNsb25lRGVwZW5kZW5jaWVzID0gY2xvbmVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbHVtbkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSYW5nZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1JhbmdlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGNvbHVtbkRlcGVuZGVuY2llcyA9IHtcbiAgSW5kZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJbmRleENsYXNzLkluZGV4RGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICByYW5nZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1JhbmdlLnJhbmdlRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDb2x1bW46IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29sdW1uXG59O1xuZXhwb3J0cy5jb2x1bW5EZXBlbmRlbmNpZXMgPSBjb2x1bW5EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbHVtblRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSYW5nZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1JhbmdlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGNvbHVtblRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHtcbiAgSW5kZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJbmRleENsYXNzLkluZGV4RGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICByYW5nZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1JhbmdlLnJhbmdlRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDb2x1bW5UcmFuc2Zvcm06IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29sdW1uVHJhbnNmb3JtXG59O1xuZXhwb3J0cy5jb2x1bW5UcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSBjb2x1bW5UcmFuc2Zvcm1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbWJpbmF0aW9uc0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGNvbWJpbmF0aW9uc0RlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ29tYmluYXRpb25zOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbWJpbmF0aW9uc1xufTtcbmV4cG9ydHMuY29tYmluYXRpb25zRGVwZW5kZW5jaWVzID0gY29tYmluYXRpb25zRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb21iaW5hdGlvbnNXaXRoUmVwRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY29tYmluYXRpb25zV2l0aFJlcERlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ29tYmluYXRpb25zV2l0aFJlcDogX2ZhY3Rvcmllc0FueS5jcmVhdGVDb21iaW5hdGlvbnNXaXRoUmVwXG59O1xuZXhwb3J0cy5jb21iaW5hdGlvbnNXaXRoUmVwRGVwZW5kZW5jaWVzID0gY29tYmluYXRpb25zV2l0aFJlcERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tcGFyZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRnJhY3Rpb25DbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjb21wYXJlRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgRnJhY3Rpb25EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGcmFjdGlvbkNsYXNzLkZyYWN0aW9uRGVwZW5kZW5jaWVzLFxuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDb21wYXJlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbXBhcmVcbn07XG5leHBvcnRzLmNvbXBhcmVEZXBlbmRlbmNpZXMgPSBjb21wYXJlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb21wYXJlTmF0dXJhbERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wYXJlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGFyZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjb21wYXJlTmF0dXJhbERlcGVuZGVuY2llcyA9IHtcbiAgY29tcGFyZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBhcmUuY29tcGFyZURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ29tcGFyZU5hdHVyYWw6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29tcGFyZU5hdHVyYWxcbn07XG5leHBvcnRzLmNvbXBhcmVOYXR1cmFsRGVwZW5kZW5jaWVzID0gY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbXBhcmVUZXh0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjb21wYXJlVGV4dERlcGVuZGVuY2llcyA9IHtcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ29tcGFyZVRleHQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29tcGFyZVRleHRcbn07XG5leHBvcnRzLmNvbXBhcmVUZXh0RGVwZW5kZW5jaWVzID0gY29tcGFyZVRleHREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbXBpbGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGFyc2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNQYXJzZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjb21waWxlRGVwZW5kZW5jaWVzID0ge1xuICBwYXJzZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1BhcnNlLnBhcnNlRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDb21waWxlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbXBpbGVcbn07XG5leHBvcnRzLmNvbXBpbGVEZXBlbmRlbmNpZXMgPSBjb21waWxlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb21wbGV4RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjb21wbGV4RGVwZW5kZW5jaWVzID0ge1xuICBDb21wbGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLkNvbXBsZXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUNvbXBsZXg6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29tcGxleFxufTtcbmV4cG9ydHMuY29tcGxleERlcGVuZGVuY2llcyA9IGNvbXBsZXhEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkNvbXBsZXhEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBDb21wbGV4RGVwZW5kZW5jaWVzID0ge1xuICBjcmVhdGVDb21wbGV4Q2xhc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29tcGxleENsYXNzXG59O1xuZXhwb3J0cy5Db21wbGV4RGVwZW5kZW5jaWVzID0gQ29tcGxleERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tcG9zaXRpb25EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21iaW5hdGlvbnMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21iaW5hdGlvbnMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzSW50ZWdlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzSW50ZWdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNOZWdhdGl2ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzTmVnYXRpdmUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzUG9zaXRpdmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc1Bvc2l0aXZlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMYXJnZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNMYXJnZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY29tcG9zaXRpb25EZXBlbmRlbmNpZXMgPSB7XG4gIGFkZFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZFNjYWxhci5hZGRTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGNvbWJpbmF0aW9uc0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbWJpbmF0aW9ucy5jb21iaW5hdGlvbnNEZXBlbmRlbmNpZXMsXG4gIGlzSW50ZWdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzSW50ZWdlci5pc0ludGVnZXJEZXBlbmRlbmNpZXMsXG4gIGlzTmVnYXRpdmVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc05lZ2F0aXZlLmlzTmVnYXRpdmVEZXBlbmRlbmNpZXMsXG4gIGlzUG9zaXRpdmVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc1Bvc2l0aXZlLmlzUG9zaXRpdmVEZXBlbmRlbmNpZXMsXG4gIGxhcmdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0xhcmdlci5sYXJnZXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUNvbXBvc2l0aW9uOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbXBvc2l0aW9uXG59O1xuZXhwb3J0cy5jb21wb3NpdGlvbkRlcGVuZGVuY2llcyA9IGNvbXBvc2l0aW9uRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb25jYXREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNJbnRlZ2VyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNJbnRlZ2VyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY29uY2F0RGVwZW5kZW5jaWVzID0ge1xuICBpc0ludGVnZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc0ludGVnZXIuaXNJbnRlZ2VyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDb25jYXQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29uY2F0XG59O1xuZXhwb3J0cy5jb25jYXREZXBlbmRlbmNpZXMgPSBjb25jYXREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbmNhdFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNJc0ludGVnZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc0ludGVnZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjb25jYXRUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB7XG4gIGlzSW50ZWdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzSW50ZWdlci5pc0ludGVnZXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUNvbmNhdFRyYW5zZm9ybTogX2ZhY3Rvcmllc0FueS5jcmVhdGVDb25jYXRUcmFuc2Zvcm1cbn07XG5leHBvcnRzLmNvbmNhdFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IGNvbmNhdFRyYW5zZm9ybURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuQ29uZGl0aW9uYWxOb2RlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc05vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIENvbmRpdGlvbmFsTm9kZURlcGVuZGVuY2llcyA9IHtcbiAgTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc05vZGUuTm9kZURlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ29uZGl0aW9uYWxOb2RlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbmRpdGlvbmFsTm9kZVxufTtcbmV4cG9ydHMuQ29uZGl0aW9uYWxOb2RlRGVwZW5kZW5jaWVzID0gQ29uZGl0aW9uYWxOb2RlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb25kdWN0YW5jZVF1YW50dW1EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGNvbmR1Y3RhbmNlUXVhbnR1bURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUNvbmR1Y3RhbmNlUXVhbnR1bTogX2ZhY3Rvcmllc0FueS5jcmVhdGVDb25kdWN0YW5jZVF1YW50dW1cbn07XG5leHBvcnRzLmNvbmR1Y3RhbmNlUXVhbnR1bURlcGVuZGVuY2llcyA9IGNvbmR1Y3RhbmNlUXVhbnR1bURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29uakRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGNvbmpEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUNvbmo6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29ualxufTtcbmV4cG9ydHMuY29uakRlcGVuZGVuY2llcyA9IGNvbmpEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkNvbnN0YW50Tm9kZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBDb25zdGFudE5vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOb2RlLk5vZGVEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUNvbnN0YW50Tm9kZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVDb25zdGFudE5vZGVcbn07XG5leHBvcnRzLkNvbnN0YW50Tm9kZURlcGVuZGVuY2llcyA9IENvbnN0YW50Tm9kZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29zRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY29zRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDb3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29zXG59O1xuZXhwb3J0cy5jb3NEZXBlbmRlbmNpZXMgPSBjb3NEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvc2hEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjb3NoRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDb3NoOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvc2hcbn07XG5leHBvcnRzLmNvc2hEZXBlbmRlbmNpZXMgPSBjb3NoRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb3REZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjb3REZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ290OiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvdFxufTtcbmV4cG9ydHMuY290RGVwZW5kZW5jaWVzID0gY290RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb3RoRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY290aERlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDb3RoOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvdGhcbn07XG5leHBvcnRzLmNvdGhEZXBlbmRlbmNpZXMgPSBjb3RoRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb3Vsb21iRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjb3Vsb21iRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ291bG9tYjogX2ZhY3Rvcmllc0FueS5jcmVhdGVDb3Vsb21iXG59O1xuZXhwb3J0cy5jb3Vsb21iRGVwZW5kZW5jaWVzID0gY291bG9tYkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlVW5pdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY3JlYXRlVW5pdERlcGVuZGVuY2llcyA9IHtcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDcmVhdGVVbml0OiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNyZWF0ZVVuaXRcbn07XG5leHBvcnRzLmNyZWF0ZVVuaXREZXBlbmRlbmNpZXMgPSBjcmVhdGVVbml0RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcm9zc0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnRyYWN0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3VidHJhY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY3Jvc3NEZXBlbmRlbmNpZXMgPSB7XG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXMsXG4gIHN1YnRyYWN0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3VidHJhY3Quc3VidHJhY3REZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUNyb3NzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNyb3NzXG59O1xuZXhwb3J0cy5jcm9zc0RlcGVuZGVuY2llcyA9IGNyb3NzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jc2NEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjc2NEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ3NjOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNzY1xufTtcbmV4cG9ydHMuY3NjRGVwZW5kZW5jaWVzID0gY3NjRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jc2NoRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY3NjaERlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDc2NoOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNzY2hcbn07XG5leHBvcnRzLmNzY2hEZXBlbmRlbmNpZXMgPSBjc2NoRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jdHJhbnNwb3NlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbmogPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb25qLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUcmFuc3Bvc2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUcmFuc3Bvc2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY3RyYW5zcG9zZURlcGVuZGVuY2llcyA9IHtcbiAgY29uakRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbmouY29uakRlcGVuZGVuY2llcyxcbiAgdHJhbnNwb3NlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHJhbnNwb3NlLnRyYW5zcG9zZURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ3RyYW5zcG9zZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVDdHJhbnNwb3NlXG59O1xuZXhwb3J0cy5jdHJhbnNwb3NlRGVwZW5kZW5jaWVzID0gY3RyYW5zcG9zZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3ViZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGN1YmVEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUN1YmU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ3ViZVxufTtcbmV4cG9ydHMuY3ViZURlcGVuZGVuY2llcyA9IGN1YmVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZXBFcXVhbERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGRlZXBFcXVhbERlcGVuZGVuY2llcyA9IHtcbiAgZXF1YWxEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbC5lcXVhbERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRGVlcEVxdWFsOiBfZmFjdG9yaWVzQW55LmNyZWF0ZURlZXBFcXVhbFxufTtcbmV4cG9ydHMuZGVlcEVxdWFsRGVwZW5kZW5jaWVzID0gZGVlcEVxdWFsRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzID0ge1xuICBNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXhDbGFzcy5NYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZURlbnNlTWF0cml4Q2xhc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRGVuc2VNYXRyaXhDbGFzc1xufTtcbmV4cG9ydHMuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMgPSBEZW5zZU1hdHJpeERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZXZhbERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNFdmFsdWF0ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0V2YWx1YXRlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGV2YWxEZXBlbmRlbmNpZXMgPSB7XG4gIGV2YWx1YXRlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXZhbHVhdGUuZXZhbHVhdGVEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZURlcHJlY2F0ZWRFdmFsOiBfZmFjdG9yaWVzQW55LmNyZWF0ZURlcHJlY2F0ZWRFdmFsXG59O1xuZXhwb3J0cy5ldmFsRGVwZW5kZW5jaWVzID0gZXZhbERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudHlwZW9mRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdHlwZW9mRGVwZW5kZW5jaWVzID0ge1xuICBjcmVhdGVEZXByZWNhdGVkVHlwZW9mOiBfZmFjdG9yaWVzQW55LmNyZWF0ZURlcHJlY2F0ZWRUeXBlb2Zcbn07XG5leHBvcnRzLnR5cGVvZkRlcGVuZGVuY2llcyA9IHR5cGVvZkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudmFyRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1ZhcmlhbmNlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVmFyaWFuY2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdmFyRGVwZW5kZW5jaWVzID0ge1xuICB2YXJpYW5jZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1ZhcmlhbmNlLnZhcmlhbmNlRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVEZXByZWNhdGVkVmFyOiBfZmFjdG9yaWVzQW55LmNyZWF0ZURlcHJlY2F0ZWRWYXJcbn07XG5leHBvcnRzLnZhckRlcGVuZGVuY2llcyA9IHZhckRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVyaXZhdGl2ZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDb25zdGFudE5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb25zdGFudE5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Z1bmN0aW9uTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Z1bmN0aW9uTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzT3BlcmF0b3JOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzT3BlcmF0b3JOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQYXJlbnRoZXNpc05vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNQYXJlbnRoZXNpc05vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N5bWJvbE5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTeW1ib2xOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc1plcm8gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc1plcm8uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc051bWVyaWMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNOdW1lcmljLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQYXJzZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1BhcnNlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaW1wbGlmeSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NpbXBsaWZ5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGRlcml2YXRpdmVEZXBlbmRlbmNpZXMgPSB7XG4gIENvbnN0YW50Tm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbnN0YW50Tm9kZS5Db25zdGFudE5vZGVEZXBlbmRlbmNpZXMsXG4gIEZ1bmN0aW9uTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0Z1bmN0aW9uTm9kZS5GdW5jdGlvbk5vZGVEZXBlbmRlbmNpZXMsXG4gIE9wZXJhdG9yTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc09wZXJhdG9yTm9kZS5PcGVyYXRvck5vZGVEZXBlbmRlbmNpZXMsXG4gIFBhcmVudGhlc2lzTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1BhcmVudGhlc2lzTm9kZS5QYXJlbnRoZXNpc05vZGVEZXBlbmRlbmNpZXMsXG4gIFN5bWJvbE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTeW1ib2xOb2RlLlN5bWJvbE5vZGVEZXBlbmRlbmNpZXMsXG4gIGVxdWFsRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWwuZXF1YWxEZXBlbmRlbmNpZXMsXG4gIGlzWmVyb0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzWmVyby5pc1plcm9EZXBlbmRlbmNpZXMsXG4gIG51bWVyaWNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOdW1lcmljLm51bWVyaWNEZXBlbmRlbmNpZXMsXG4gIHBhcnNlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUGFyc2UucGFyc2VEZXBlbmRlbmNpZXMsXG4gIHNpbXBsaWZ5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU2ltcGxpZnkuc2ltcGxpZnlEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZURlcml2YXRpdmU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRGVyaXZhdGl2ZVxufTtcbmV4cG9ydHMuZGVyaXZhdGl2ZURlcGVuZGVuY2llcyA9IGRlcml2YXRpdmVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRldERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNMdXAgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNMdXAuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3VidHJhY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5hcnlNaW51cyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuYXJ5TWludXMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZGV0RGVwZW5kZW5jaWVzID0ge1xuICBsdXBEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNMdXAubHVwRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5Lm11bHRpcGx5RGVwZW5kZW5jaWVzLFxuICBzdWJ0cmFjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnRyYWN0LnN1YnRyYWN0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICB1bmFyeU1pbnVzRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5hcnlNaW51cy51bmFyeU1pbnVzRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVEZXQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRGV0XG59O1xuZXhwb3J0cy5kZXREZXBlbmRlbmNpZXMgPSBkZXREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRldXRlcm9uTWFzc0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZGV1dGVyb25NYXNzRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRGV1dGVyb25NYXNzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZURldXRlcm9uTWFzc1xufTtcbmV4cG9ydHMuZGV1dGVyb25NYXNzRGVwZW5kZW5jaWVzID0gZGV1dGVyb25NYXNzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kaWFnRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZGlhZ0RlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBTcGFyc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcy5TcGFyc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZURpYWc6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRGlhZ1xufTtcbmV4cG9ydHMuZGlhZ0RlcGVuZGVuY2llcyA9IGRpYWdEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRpc3RhbmNlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FicyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Ficy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NxcnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTcXJ0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJ0cmFjdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1YnRyYWN0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5hcnlNaW51cy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBkaXN0YW5jZURlcGVuZGVuY2llcyA9IHtcbiAgYWJzRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWJzLmFic0RlcGVuZGVuY2llcyxcbiAgYWRkU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmFkZFNjYWxhckRlcGVuZGVuY2llcyxcbiAgZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmRpdmlkZVNjYWxhckRlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5tdWx0aXBseVNjYWxhckRlcGVuZGVuY2llcyxcbiAgc3FydERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NxcnQuc3FydERlcGVuZGVuY2llcyxcbiAgc3VidHJhY3REZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5zdWJ0cmFjdERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgdW5hcnlNaW51c0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuYXJ5TWludXMudW5hcnlNaW51c0RlcGVuZGVuY2llcyxcbiAgY3JlYXRlRGlzdGFuY2U6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRGlzdGFuY2Vcbn07XG5leHBvcnRzLmRpc3RhbmNlRGVwZW5kZW5jaWVzID0gZGlzdGFuY2VEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRpdmlkZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ludiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0ludi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGRpdmlkZURlcGVuZGVuY2llcyA9IHtcbiAgZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmRpdmlkZVNjYWxhckRlcGVuZGVuY2llcyxcbiAgZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5lcXVhbFNjYWxhckRlcGVuZGVuY2llcyxcbiAgaW52RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSW52LmludkRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseS5tdWx0aXBseURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRGl2aWRlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZURpdmlkZVxufTtcbmV4cG9ydHMuZGl2aWRlRGVwZW5kZW5jaWVzID0gZGl2aWRlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTnVtZXJpYyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc051bWVyaWMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzID0ge1xuICBudW1lcmljRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTnVtZXJpYy5udW1lcmljRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVEaXZpZGVTY2FsYXI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRGl2aWRlU2NhbGFyXG59O1xuZXhwb3J0cy5kaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXMgPSBkaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRvdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZG90RGVwZW5kZW5jaWVzID0ge1xuICBhZGREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGQuYWRkRGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5Lm11bHRpcGx5RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVEb3Q6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRG90XG59O1xuZXhwb3J0cy5kb3REZXBlbmRlbmNpZXMgPSBkb3REZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRvdERpdmlkZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZG90RGl2aWRlRGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGRpdmlkZVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5kaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZURvdERpdmlkZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVEb3REaXZpZGVcbn07XG5leHBvcnRzLmRvdERpdmlkZURlcGVuZGVuY2llcyA9IGRvdERpdmlkZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZG90TXVsdGlwbHlEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGRvdE11bHRpcGx5RGVwZW5kZW5jaWVzID0ge1xuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLm11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVEb3RNdWx0aXBseTogX2ZhY3Rvcmllc0FueS5jcmVhdGVEb3RNdWx0aXBseVxufTtcbmV4cG9ydHMuZG90TXVsdGlwbHlEZXBlbmRlbmNpZXMgPSBkb3RNdWx0aXBseURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZG90UG93RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BvdyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1Bvdy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBkb3RQb3dEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5lcXVhbFNjYWxhckRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgcG93RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUG93LnBvd0RlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRG90UG93OiBfZmFjdG9yaWVzQW55LmNyZWF0ZURvdFBvd1xufTtcbmV4cG9ydHMuZG90UG93RGVwZW5kZW5jaWVzID0gZG90UG93RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVFOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUVcbn07XG5leHBvcnRzLmVEZXBlbmRlbmNpZXMgPSBlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lZmltb3ZGYWN0b3JEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBlZmltb3ZGYWN0b3JEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlRWZpbW92RmFjdG9yOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUVmaW1vdkZhY3RvclxufTtcbmV4cG9ydHMuZWZpbW92RmFjdG9yRGVwZW5kZW5jaWVzID0gZWZpbW92RmFjdG9yRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5laWdzRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FicyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Ficy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0F0YW4gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBdGFuLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdudW1iZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdudW1iZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Nvcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW52ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW52LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NpbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1Npbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3VidHJhY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBlaWdzRGVwZW5kZW5jaWVzID0ge1xuICBhYnNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBYnMuYWJzRGVwZW5kZW5jaWVzLFxuICBhZGREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGQuYWRkRGVwZW5kZW5jaWVzLFxuICBhZGRTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuYWRkU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBhdGFuRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQXRhbi5hdGFuRGVwZW5kZW5jaWVzLFxuICBiaWdudW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdudW1iZXIuYmlnbnVtYmVyRGVwZW5kZW5jaWVzLFxuICBjb3NEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb3MuY29zRGVwZW5kZW5jaWVzLFxuICBlcXVhbERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsLmVxdWFsRGVwZW5kZW5jaWVzLFxuICBpbnZEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJbnYuaW52RGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5Lm11bHRpcGx5RGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLm11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzLFxuICBzaW5EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTaW4uc2luRGVwZW5kZW5jaWVzLFxuICBzdWJ0cmFjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnRyYWN0LnN1YnRyYWN0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVFaWdzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUVpZ3Ncbn07XG5leHBvcnRzLmVpZ3NEZXBlbmRlbmNpZXMgPSBlaWdzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lbGVjdHJpY0NvbnN0YW50RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBlbGVjdHJpY0NvbnN0YW50RGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRWxlY3RyaWNDb25zdGFudDogX2ZhY3Rvcmllc0FueS5jcmVhdGVFbGVjdHJpY0NvbnN0YW50XG59O1xuZXhwb3J0cy5lbGVjdHJpY0NvbnN0YW50RGVwZW5kZW5jaWVzID0gZWxlY3RyaWNDb25zdGFudERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZWxlY3Ryb25NYXNzRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBlbGVjdHJvbk1hc3NEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVFbGVjdHJvbk1hc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRWxlY3Ryb25NYXNzXG59O1xuZXhwb3J0cy5lbGVjdHJvbk1hc3NEZXBlbmRlbmNpZXMgPSBlbGVjdHJvbk1hc3NEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmVsZW1lbnRhcnlDaGFyZ2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGVsZW1lbnRhcnlDaGFyZ2VEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVFbGVtZW50YXJ5Q2hhcmdlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUVsZW1lbnRhcnlDaGFyZ2Vcbn07XG5leHBvcnRzLmVsZW1lbnRhcnlDaGFyZ2VEZXBlbmRlbmNpZXMgPSBlbGVtZW50YXJ5Q2hhcmdlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lcXVhbERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGVxdWFsRGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUVxdWFsOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUVxdWFsXG59O1xuZXhwb3J0cy5lcXVhbERlcGVuZGVuY2llcyA9IGVxdWFsRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lcXVhbFNjYWxhckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVFcXVhbFNjYWxhcjogX2ZhY3Rvcmllc0FueS5jcmVhdGVFcXVhbFNjYWxhclxufTtcbmV4cG9ydHMuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMgPSBlcXVhbFNjYWxhckRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZXF1YWxUZXh0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBhcmVUZXh0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGFyZVRleHQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzWmVybyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzWmVyby5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBlcXVhbFRleHREZXBlbmRlbmNpZXMgPSB7XG4gIGNvbXBhcmVUZXh0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGFyZVRleHQuY29tcGFyZVRleHREZXBlbmRlbmNpZXMsXG4gIGlzWmVyb0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzWmVyby5pc1plcm9EZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUVxdWFsVGV4dDogX2ZhY3Rvcmllc0FueS5jcmVhdGVFcXVhbFRleHRcbn07XG5leHBvcnRzLmVxdWFsVGV4dERlcGVuZGVuY2llcyA9IGVxdWFsVGV4dERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZXJmRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZXJmRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVFcmY6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRXJmXG59O1xuZXhwb3J0cy5lcmZEZXBlbmRlbmNpZXMgPSBlcmZEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmV2YWx1YXRlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1BhcnNlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUGFyc2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZXZhbHVhdGVEZXBlbmRlbmNpZXMgPSB7XG4gIHBhcnNlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUGFyc2UucGFyc2VEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUV2YWx1YXRlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUV2YWx1YXRlXG59O1xuZXhwb3J0cy5ldmFsdWF0ZURlcGVuZGVuY2llcyA9IGV2YWx1YXRlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5leHBEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBleHBEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUV4cDogX2ZhY3Rvcmllc0FueS5jcmVhdGVFeHBcbn07XG5leHBvcnRzLmV4cERlcGVuZGVuY2llcyA9IGV4cERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZXhwbURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNBYnMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBYnMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSWRlbnRpdHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJZGVudGl0eS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW52ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW52LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGV4cG1EZXBlbmRlbmNpZXMgPSB7XG4gIGFic0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0Ficy5hYnNEZXBlbmRlbmNpZXMsXG4gIGFkZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZC5hZGREZXBlbmRlbmNpZXMsXG4gIGlkZW50aXR5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSWRlbnRpdHkuaWRlbnRpdHlEZXBlbmRlbmNpZXMsXG4gIGludkRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0ludi5pbnZEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUV4cG06IF9mYWN0b3JpZXNBbnkuY3JlYXRlRXhwbVxufTtcbmV4cG9ydHMuZXhwbURlcGVuZGVuY2llcyA9IGV4cG1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmV4cG0xRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBleHBtMURlcGVuZGVuY2llcyA9IHtcbiAgQ29tcGxleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5Db21wbGV4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVFeHBtMTogX2ZhY3Rvcmllc0FueS5jcmVhdGVFeHBtMVxufTtcbmV4cG9ydHMuZXhwbTFEZXBlbmRlbmNpZXMgPSBleHBtMURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZXllRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZXllRGVwZW5kZW5jaWVzID0ge1xuICBjcmVhdGVFeWU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRXllXG59O1xuZXhwb3J0cy5leWVEZXBlbmRlbmNpZXMgPSBleWVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZhY3RvcmlhbERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNHYW1tYSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0dhbW1hLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZhY3RvcmlhbERlcGVuZGVuY2llcyA9IHtcbiAgZ2FtbWFEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNHYW1tYS5nYW1tYURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRmFjdG9yaWFsOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUZhY3RvcmlhbFxufTtcbmV4cG9ydHMuZmFjdG9yaWFsRGVwZW5kZW5jaWVzID0gZmFjdG9yaWFsRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5mYWxzZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZhbHNlRGVwZW5kZW5jaWVzID0ge1xuICBjcmVhdGVGYWxzZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVGYWxzZVxufTtcbmV4cG9ydHMuZmFsc2VEZXBlbmRlbmNpZXMgPSBmYWxzZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZmFyYWRheURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZmFyYWRheURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUZhcmFkYXk6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRmFyYWRheVxufTtcbmV4cG9ydHMuZmFyYWRheURlcGVuZGVuY2llcyA9IGZhcmFkYXlEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZlcm1pQ291cGxpbmdEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZlcm1pQ291cGxpbmdEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVGZXJtaUNvdXBsaW5nOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUZlcm1pQ291cGxpbmdcbn07XG5leHBvcnRzLmZlcm1pQ291cGxpbmdEZXBlbmRlbmNpZXMgPSBmZXJtaUNvdXBsaW5nRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5GaWJvbmFjY2lIZWFwRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0xhcmdlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0xhcmdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU21hbGxlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NtYWxsZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgRmlib25hY2NpSGVhcERlcGVuZGVuY2llcyA9IHtcbiAgbGFyZ2VyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTGFyZ2VyLmxhcmdlckRlcGVuZGVuY2llcyxcbiAgc21hbGxlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NtYWxsZXIuc21hbGxlckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlRmlib25hY2NpSGVhcENsYXNzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUZpYm9uYWNjaUhlYXBDbGFzc1xufTtcbmV4cG9ydHMuRmlib25hY2NpSGVhcERlcGVuZGVuY2llcyA9IEZpYm9uYWNjaUhlYXBEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZpbHRlckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZpbHRlckRlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRmlsdGVyOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUZpbHRlclxufTtcbmV4cG9ydHMuZmlsdGVyRGVwZW5kZW5jaWVzID0gZmlsdGVyRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5maWx0ZXJUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBmaWx0ZXJUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUZpbHRlclRyYW5zZm9ybTogX2ZhY3Rvcmllc0FueS5jcmVhdGVGaWx0ZXJUcmFuc2Zvcm1cbn07XG5leHBvcnRzLmZpbHRlclRyYW5zZm9ybURlcGVuZGVuY2llcyA9IGZpbHRlclRyYW5zZm9ybURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZmluZVN0cnVjdHVyZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZpbmVTdHJ1Y3R1cmVEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlRmluZVN0cnVjdHVyZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVGaW5lU3RydWN0dXJlXG59O1xuZXhwb3J0cy5maW5lU3RydWN0dXJlRGVwZW5kZW5jaWVzID0gZmluZVN0cnVjdHVyZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZmlyc3RSYWRpYXRpb25EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZpcnN0UmFkaWF0aW9uRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRmlyc3RSYWRpYXRpb246IF9mYWN0b3JpZXNBbnkuY3JlYXRlRmlyc3RSYWRpYXRpb25cbn07XG5leHBvcnRzLmZpcnN0UmFkaWF0aW9uRGVwZW5kZW5jaWVzID0gZmlyc3RSYWRpYXRpb25EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZpeERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NlaWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDZWlsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGbG9vciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Zsb29yLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZpeERlcGVuZGVuY2llcyA9IHtcbiAgQ29tcGxleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5Db21wbGV4RGVwZW5kZW5jaWVzLFxuICBjZWlsRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ2VpbC5jZWlsRGVwZW5kZW5jaWVzLFxuICBmbG9vckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0Zsb29yLmZsb29yRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVGaXg6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRml4XG59O1xuZXhwb3J0cy5maXhEZXBlbmRlbmNpZXMgPSBmaXhEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZsYXR0ZW5EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZsYXR0ZW5EZXBlbmRlbmNpZXMgPSB7XG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUZsYXR0ZW46IF9mYWN0b3JpZXNBbnkuY3JlYXRlRmxhdHRlblxufTtcbmV4cG9ydHMuZmxhdHRlbkRlcGVuZGVuY2llcyA9IGZsYXR0ZW5EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZsb29yRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1JvdW5kID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUm91bmQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZmxvb3JEZXBlbmRlbmNpZXMgPSB7XG4gIHJvdW5kRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUm91bmQucm91bmREZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUZsb29yOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUZsb29yXG59O1xuZXhwb3J0cy5mbG9vckRlcGVuZGVuY2llcyA9IGZsb29yRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5mb3JFYWNoRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZm9yRWFjaERlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRm9yRWFjaDogX2ZhY3Rvcmllc0FueS5jcmVhdGVGb3JFYWNoXG59O1xuZXhwb3J0cy5mb3JFYWNoRGVwZW5kZW5jaWVzID0gZm9yRWFjaERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZm9yRWFjaFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZvckVhY2hUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUZvckVhY2hUcmFuc2Zvcm06IF9mYWN0b3JpZXNBbnkuY3JlYXRlRm9yRWFjaFRyYW5zZm9ybVxufTtcbmV4cG9ydHMuZm9yRWFjaFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IGZvckVhY2hUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZvcm1hdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZvcm1hdERlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRm9ybWF0OiBfZmFjdG9yaWVzQW55LmNyZWF0ZUZvcm1hdFxufTtcbmV4cG9ydHMuZm9ybWF0RGVwZW5kZW5jaWVzID0gZm9ybWF0RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5mcmFjdGlvbkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNGcmFjdGlvbkNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRnJhY3Rpb25DbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBmcmFjdGlvbkRlcGVuZGVuY2llcyA9IHtcbiAgRnJhY3Rpb25EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGcmFjdGlvbkNsYXNzLkZyYWN0aW9uRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVGcmFjdGlvbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVGcmFjdGlvblxufTtcbmV4cG9ydHMuZnJhY3Rpb25EZXBlbmRlbmNpZXMgPSBmcmFjdGlvbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuRnJhY3Rpb25EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBGcmFjdGlvbkRlcGVuZGVuY2llcyA9IHtcbiAgY3JlYXRlRnJhY3Rpb25DbGFzczogX2ZhY3Rvcmllc0FueS5jcmVhdGVGcmFjdGlvbkNsYXNzXG59O1xuZXhwb3J0cy5GcmFjdGlvbkRlcGVuZGVuY2llcyA9IEZyYWN0aW9uRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5GdW5jdGlvbkFzc2lnbm1lbnROb2RlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc05vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIEZ1bmN0aW9uQXNzaWdubWVudE5vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOb2RlLk5vZGVEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUZ1bmN0aW9uQXNzaWdubWVudE5vZGU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZVxufTtcbmV4cG9ydHMuRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZURlcGVuZGVuY2llcyA9IEZ1bmN0aW9uQXNzaWdubWVudE5vZGVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkZ1bmN0aW9uTm9kZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3ltYm9sTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N5bWJvbE5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgRnVuY3Rpb25Ob2RlRGVwZW5kZW5jaWVzID0ge1xuICBOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTm9kZS5Ob2RlRGVwZW5kZW5jaWVzLFxuICBTeW1ib2xOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3ltYm9sTm9kZS5TeW1ib2xOb2RlRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVGdW5jdGlvbk5vZGU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRnVuY3Rpb25Ob2RlXG59O1xuZXhwb3J0cy5GdW5jdGlvbk5vZGVEZXBlbmRlbmNpZXMgPSBGdW5jdGlvbk5vZGVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmdhbW1hRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUG93ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUG93LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGdhbW1hRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5tdWx0aXBseVNjYWxhckRlcGVuZGVuY2llcyxcbiAgcG93RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUG93LnBvd0RlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlR2FtbWE6IF9mYWN0b3JpZXNBbnkuY3JlYXRlR2FtbWFcbn07XG5leHBvcnRzLmdhbW1hRGVwZW5kZW5jaWVzID0gZ2FtbWFEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmdhc0NvbnN0YW50RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBnYXNDb25zdGFudERlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUdhc0NvbnN0YW50OiBfZmFjdG9yaWVzQW55LmNyZWF0ZUdhc0NvbnN0YW50XG59O1xuZXhwb3J0cy5nYXNDb25zdGFudERlcGVuZGVuY2llcyA9IGdhc0NvbnN0YW50RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5nY2REZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBnY2REZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVHY2Q6IF9mYWN0b3JpZXNBbnkuY3JlYXRlR2NkXG59O1xuZXhwb3J0cy5nY2REZXBlbmRlbmNpZXMgPSBnY2REZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmdldE1hdHJpeERhdGFUeXBlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZ2V0TWF0cml4RGF0YVR5cGVEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUdldE1hdHJpeERhdGFUeXBlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUdldE1hdHJpeERhdGFUeXBlXG59O1xuZXhwb3J0cy5nZXRNYXRyaXhEYXRhVHlwZURlcGVuZGVuY2llcyA9IGdldE1hdHJpeERhdGFUeXBlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5ncmF2aXRhdGlvbkNvbnN0YW50RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBncmF2aXRhdGlvbkNvbnN0YW50RGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlR3Jhdml0YXRpb25Db25zdGFudDogX2ZhY3Rvcmllc0FueS5jcmVhdGVHcmF2aXRhdGlvbkNvbnN0YW50XG59O1xuZXhwb3J0cy5ncmF2aXRhdGlvbkNvbnN0YW50RGVwZW5kZW5jaWVzID0gZ3Jhdml0YXRpb25Db25zdGFudERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZ3Jhdml0eURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZ3Jhdml0eURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUdyYXZpdHk6IF9mYWN0b3JpZXNBbnkuY3JlYXRlR3Jhdml0eVxufTtcbmV4cG9ydHMuZ3Jhdml0eURlcGVuZGVuY2llcyA9IGdyYXZpdHlEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmhhcnRyZWVFbmVyZ3lEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGhhcnRyZWVFbmVyZ3lEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVIYXJ0cmVlRW5lcmd5OiBfZmFjdG9yaWVzQW55LmNyZWF0ZUhhcnRyZWVFbmVyZ3lcbn07XG5leHBvcnRzLmhhcnRyZWVFbmVyZ3lEZXBlbmRlbmNpZXMgPSBoYXJ0cmVlRW5lcmd5RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5oYXNOdW1lcmljVmFsdWVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNOdW1lcmljID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNOdW1lcmljLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGhhc051bWVyaWNWYWx1ZURlcGVuZGVuY2llcyA9IHtcbiAgaXNOdW1lcmljRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSXNOdW1lcmljLmlzTnVtZXJpY0RlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlSGFzTnVtZXJpY1ZhbHVlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUhhc051bWVyaWNWYWx1ZVxufTtcbmV4cG9ydHMuaGFzTnVtZXJpY1ZhbHVlRGVwZW5kZW5jaWVzID0gaGFzTnVtZXJpY1ZhbHVlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5oZWxwRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0hlbHBDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0hlbHBDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBoZWxwRGVwZW5kZW5jaWVzID0ge1xuICBIZWxwRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSGVscENsYXNzLkhlbHBEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUhlbHA6IF9mYWN0b3JpZXNBbnkuY3JlYXRlSGVscFxufTtcbmV4cG9ydHMuaGVscERlcGVuZGVuY2llcyA9IGhlbHBEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkhlbHBEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGFyc2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNQYXJzZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBIZWxwRGVwZW5kZW5jaWVzID0ge1xuICBwYXJzZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1BhcnNlLnBhcnNlRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVIZWxwQ2xhc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlSGVscENsYXNzXG59O1xuZXhwb3J0cy5IZWxwRGVwZW5kZW5jaWVzID0gSGVscERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaHlwb3REZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWJzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWJzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNQb3NpdGl2ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzUG9zaXRpdmUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NtYWxsZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTbWFsbGVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTcXJ0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3FydC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBoeXBvdERlcGVuZGVuY2llcyA9IHtcbiAgYWJzRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWJzLmFic0RlcGVuZGVuY2llcyxcbiAgYWRkU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmFkZFNjYWxhckRlcGVuZGVuY2llcyxcbiAgZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmRpdmlkZVNjYWxhckRlcGVuZGVuY2llcyxcbiAgaXNQb3NpdGl2ZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzUG9zaXRpdmUuaXNQb3NpdGl2ZURlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5tdWx0aXBseVNjYWxhckRlcGVuZGVuY2llcyxcbiAgc21hbGxlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NtYWxsZXIuc21hbGxlckRlcGVuZGVuY2llcyxcbiAgc3FydERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NxcnQuc3FydERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlSHlwb3Q6IF9mYWN0b3JpZXNBbnkuY3JlYXRlSHlwb3Rcbn07XG5leHBvcnRzLmh5cG90RGVwZW5kZW5jaWVzID0gaHlwb3REZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmlEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGlEZXBlbmRlbmNpZXMgPSB7XG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgY3JlYXRlSTogX2ZhY3Rvcmllc0FueS5jcmVhdGVJXG59O1xuZXhwb3J0cy5pRGVwZW5kZW5jaWVzID0gaURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaWRlbnRpdHlEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3BhcnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBpZGVudGl0eURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIFNwYXJzZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzLlNwYXJzZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlSWRlbnRpdHk6IF9mYWN0b3JpZXNBbnkuY3JlYXRlSWRlbnRpdHlcbn07XG5leHBvcnRzLmlkZW50aXR5RGVwZW5kZW5jaWVzID0gaWRlbnRpdHlEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmltRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgaW1EZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUltOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUltXG59O1xuZXhwb3J0cy5pbURlcGVuZGVuY2llcyA9IGltRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5JbW11dGFibGVEZW5zZU1hdHJpeERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU21hbGxlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NtYWxsZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgSW1tdXRhYmxlRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgc21hbGxlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NtYWxsZXIuc21hbGxlckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlSW1tdXRhYmxlRGVuc2VNYXRyaXhDbGFzczogX2ZhY3Rvcmllc0FueS5jcmVhdGVJbW11dGFibGVEZW5zZU1hdHJpeENsYXNzXG59O1xuZXhwb3J0cy5JbW11dGFibGVEZW5zZU1hdHJpeERlcGVuZGVuY2llcyA9IEltbXV0YWJsZURlbnNlTWF0cml4RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pbmRleERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBpbmRleERlcGVuZGVuY2llcyA9IHtcbiAgSW5kZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJbmRleENsYXNzLkluZGV4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVJbmRleDogX2ZhY3Rvcmllc0FueS5jcmVhdGVJbmRleFxufTtcbmV4cG9ydHMuaW5kZXhEZXBlbmRlbmNpZXMgPSBpbmRleERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuSW5kZXhEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW1tdXRhYmxlRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0ltbXV0YWJsZURlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgSW5kZXhEZXBlbmRlbmNpZXMgPSB7XG4gIEltbXV0YWJsZURlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSW1tdXRhYmxlRGVuc2VNYXRyaXhDbGFzcy5JbW11dGFibGVEZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgY3JlYXRlSW5kZXhDbGFzczogX2ZhY3Rvcmllc0FueS5jcmVhdGVJbmRleENsYXNzXG59O1xuZXhwb3J0cy5JbmRleERlcGVuZGVuY2llcyA9IEluZGV4RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5JbmRleE5vZGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc05vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1JhbmdlQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNSYW5nZUNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaXplID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU2l6ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBJbmRleE5vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOb2RlLk5vZGVEZXBlbmRlbmNpZXMsXG4gIFJhbmdlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUmFuZ2VDbGFzcy5SYW5nZURlcGVuZGVuY2llcyxcbiAgc2l6ZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NpemUuc2l6ZURlcGVuZGVuY2llcyxcbiAgY3JlYXRlSW5kZXhOb2RlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUluZGV4Tm9kZVxufTtcbmV4cG9ydHMuSW5kZXhOb2RlRGVwZW5kZW5jaWVzID0gSW5kZXhOb2RlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pbmRleFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBpbmRleFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHtcbiAgSW5kZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJbmRleENsYXNzLkluZGV4RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVJbmRleFRyYW5zZm9ybTogX2ZhY3Rvcmllc0FueS5jcmVhdGVJbmRleFRyYW5zZm9ybVxufTtcbmV4cG9ydHMuaW5kZXhUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSBpbmRleFRyYW5zZm9ybURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuSW5maW5pdHlEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBJbmZpbml0eURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVJbmZpbml0eTogX2ZhY3Rvcmllc0FueS5jcmVhdGVJbmZpbml0eVxufTtcbmV4cG9ydHMuSW5maW5pdHlEZXBlbmRlbmNpZXMgPSBJbmZpbml0eURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaW50ZXJzZWN0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FicyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Ficy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTbWFsbGVyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU21hbGxlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3VidHJhY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBpbnRlcnNlY3REZXBlbmRlbmNpZXMgPSB7XG4gIGFic0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0Ficy5hYnNEZXBlbmRlbmNpZXMsXG4gIGFkZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZC5hZGREZXBlbmRlbmNpZXMsXG4gIGFkZFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZFNjYWxhci5hZGRTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGRpdmlkZVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5kaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIubXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIHNtYWxsZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTbWFsbGVyLnNtYWxsZXJEZXBlbmRlbmNpZXMsXG4gIHN1YnRyYWN0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3VidHJhY3Quc3VidHJhY3REZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUludGVyc2VjdDogX2ZhY3Rvcmllc0FueS5jcmVhdGVJbnRlcnNlY3Rcbn07XG5leHBvcnRzLmludGVyc2VjdERlcGVuZGVuY2llcyA9IGludGVyc2VjdERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaW52RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FicyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Ficy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEZXQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZXQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSWRlbnRpdHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJZGVudGl0eS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5hcnlNaW51cy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBpbnZEZXBlbmRlbmNpZXMgPSB7XG4gIGFic0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0Ficy5hYnNEZXBlbmRlbmNpZXMsXG4gIGFkZFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZFNjYWxhci5hZGRTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGRldERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RldC5kZXREZXBlbmRlbmNpZXMsXG4gIGRpdmlkZVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5kaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGlkZW50aXR5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSWRlbnRpdHkuaWRlbnRpdHlEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIHVuYXJ5TWludXNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzLnVuYXJ5TWludXNEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUludjogX2ZhY3Rvcmllc0FueS5jcmVhdGVJbnZcbn07XG5leHBvcnRzLmludkRlcGVuZGVuY2llcyA9IGludkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgaW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUludmVyc2VDb25kdWN0YW5jZVF1YW50dW06IF9mYWN0b3JpZXNBbnkuY3JlYXRlSW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bVxufTtcbmV4cG9ydHMuaW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bURlcGVuZGVuY2llcyA9IGludmVyc2VDb25kdWN0YW5jZVF1YW50dW1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmlzSW50ZWdlckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGlzSW50ZWdlckRlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlSXNJbnRlZ2VyOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUlzSW50ZWdlclxufTtcbmV4cG9ydHMuaXNJbnRlZ2VyRGVwZW5kZW5jaWVzID0gaXNJbnRlZ2VyRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pc05hTkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGlzTmFORGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVJc05hTjogX2ZhY3Rvcmllc0FueS5jcmVhdGVJc05hTlxufTtcbmV4cG9ydHMuaXNOYU5EZXBlbmRlbmNpZXMgPSBpc05hTkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaXNOZWdhdGl2ZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGlzTmVnYXRpdmVEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUlzTmVnYXRpdmU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlSXNOZWdhdGl2ZVxufTtcbmV4cG9ydHMuaXNOZWdhdGl2ZURlcGVuZGVuY2llcyA9IGlzTmVnYXRpdmVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmlzTnVtZXJpY0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGlzTnVtZXJpY0RlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlSXNOdW1lcmljOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUlzTnVtZXJpY1xufTtcbmV4cG9ydHMuaXNOdW1lcmljRGVwZW5kZW5jaWVzID0gaXNOdW1lcmljRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pc1Bvc2l0aXZlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgaXNQb3NpdGl2ZURlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlSXNQb3NpdGl2ZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVJc1Bvc2l0aXZlXG59O1xuZXhwb3J0cy5pc1Bvc2l0aXZlRGVwZW5kZW5jaWVzID0gaXNQb3NpdGl2ZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaXNQcmltZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGlzUHJpbWVEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUlzUHJpbWU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlSXNQcmltZVxufTtcbmV4cG9ydHMuaXNQcmltZURlcGVuZGVuY2llcyA9IGlzUHJpbWVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmlzWmVyb0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGlzWmVyb0RlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlSXNaZXJvOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUlzWmVyb1xufTtcbmV4cG9ydHMuaXNaZXJvRGVwZW5kZW5jaWVzID0gaXNaZXJvRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5rbGRpdmVyZ2VuY2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEb3REaXZpZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEb3REaXZpZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzTnVtZXJpYyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzTnVtZXJpYy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTG9nID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTG9nLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1bSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1bS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBrbGRpdmVyZ2VuY2VEZXBlbmRlbmNpZXMgPSB7XG4gIGRpdmlkZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZS5kaXZpZGVEZXBlbmRlbmNpZXMsXG4gIGRvdERpdmlkZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RvdERpdmlkZS5kb3REaXZpZGVEZXBlbmRlbmNpZXMsXG4gIGlzTnVtZXJpY0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzTnVtZXJpYy5pc051bWVyaWNEZXBlbmRlbmNpZXMsXG4gIGxvZ0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0xvZy5sb2dEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXMsXG4gIHN1bURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1bS5zdW1EZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUtsZGl2ZXJnZW5jZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVLbGRpdmVyZ2VuY2Vcbn07XG5leHBvcnRzLmtsZGl2ZXJnZW5jZURlcGVuZGVuY2llcyA9IGtsZGl2ZXJnZW5jZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMua2xpdHppbmdEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGtsaXR6aW5nRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlS2xpdHppbmc6IF9mYWN0b3JpZXNBbnkuY3JlYXRlS2xpdHppbmdcbn07XG5leHBvcnRzLmtsaXR6aW5nRGVwZW5kZW5jaWVzID0ga2xpdHppbmdEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmtyb25EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGtyb25EZXBlbmRlbmNpZXMgPSB7XG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIubXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUtyb246IF9mYWN0b3JpZXNBbnkuY3JlYXRlS3JvblxufTtcbmV4cG9ydHMua3JvbkRlcGVuZGVuY2llcyA9IGtyb25EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkxOMTBEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBMTjEwRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUxOMTA6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTE4xMFxufTtcbmV4cG9ydHMuTE4xMERlcGVuZGVuY2llcyA9IExOMTBEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkxOMkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIExOMkRlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVMTjI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTE4yXG59O1xuZXhwb3J0cy5MTjJEZXBlbmRlbmNpZXMgPSBMTjJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkxPRzEwRURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIExPRzEwRURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVMT0cxMEU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTE9HMTBFXG59O1xuZXhwb3J0cy5MT0cxMEVEZXBlbmRlbmNpZXMgPSBMT0cxMEVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkxPRzJFRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgTE9HMkVEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlTE9HMkU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTE9HMkVcbn07XG5leHBvcnRzLkxPRzJFRGVwZW5kZW5jaWVzID0gTE9HMkVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxhcmdlckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGxhcmdlckRlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVMYXJnZXI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTGFyZ2VyXG59O1xuZXhwb3J0cy5sYXJnZXJEZXBlbmRlbmNpZXMgPSBsYXJnZXJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxhcmdlckVxRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbGFyZ2VyRXFEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTGFyZ2VyRXE6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTGFyZ2VyRXFcbn07XG5leHBvcnRzLmxhcmdlckVxRGVwZW5kZW5jaWVzID0gbGFyZ2VyRXFEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxjbURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbGNtRGVwZW5kZW5jaWVzID0ge1xuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVMY206IF9mYWN0b3JpZXNBbnkuY3JlYXRlTGNtXG59O1xuZXhwb3J0cy5sY21EZXBlbmRlbmNpZXMgPSBsY21EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxlZnRTaGlmdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNaZXJvcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1plcm9zLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGxlZnRTaGlmdERlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICB6ZXJvc0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1plcm9zLnplcm9zRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVMZWZ0U2hpZnQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTGVmdFNoaWZ0XG59O1xuZXhwb3J0cy5sZWZ0U2hpZnREZXBlbmRlbmNpZXMgPSBsZWZ0U2hpZnREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxvZ0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBsb2dEZXBlbmRlbmNpZXMgPSB7XG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmRpdmlkZVNjYWxhckRlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTG9nOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUxvZ1xufTtcbmV4cG9ydHMubG9nRGVwZW5kZW5jaWVzID0gbG9nRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5sb2cxMERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbG9nMTBEZXBlbmRlbmNpZXMgPSB7XG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTG9nMTA6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTG9nMTBcbn07XG5leHBvcnRzLmxvZzEwRGVwZW5kZW5jaWVzID0gbG9nMTBEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxvZzFwRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMb2cgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNMb2cuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbG9nMXBEZXBlbmRlbmNpZXMgPSB7XG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmRpdmlkZVNjYWxhckRlcGVuZGVuY2llcyxcbiAgbG9nRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTG9nLmxvZ0RlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTG9nMXA6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTG9nMXBcbn07XG5leHBvcnRzLmxvZzFwRGVwZW5kZW5jaWVzID0gbG9nMXBEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxvZzJEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGxvZzJEZXBlbmRlbmNpZXMgPSB7XG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTG9nMjogX2ZhY3Rvcmllc0FueS5jcmVhdGVMb2cyXG59O1xuZXhwb3J0cy5sb2cyRGVwZW5kZW5jaWVzID0gbG9nMkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubG9zY2htaWR0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBsb3NjaG1pZHREZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVMb3NjaG1pZHQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTG9zY2htaWR0XG59O1xuZXhwb3J0cy5sb3NjaG1pZHREZXBlbmRlbmNpZXMgPSBsb3NjaG1pZHREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxzb2x2ZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnRyYWN0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3VidHJhY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbHNvbHZlRGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGRpdmlkZVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5kaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIubXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIHN1YnRyYWN0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3VidHJhY3Quc3VidHJhY3REZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUxzb2x2ZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVMc29sdmVcbn07XG5leHBvcnRzLmxzb2x2ZURlcGVuZGVuY2llcyA9IGxzb2x2ZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubHVwRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTcGFDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NwYUNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBYnMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBYnMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMYXJnZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNMYXJnZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3VidHJhY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5hcnlNaW51cyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuYXJ5TWludXMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbHVwRGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIFNwYURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NwYUNsYXNzLlNwYURlcGVuZGVuY2llcyxcbiAgU3BhcnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3BhcnNlTWF0cml4Q2xhc3MuU3BhcnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBhYnNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBYnMuYWJzRGVwZW5kZW5jaWVzLFxuICBhZGRTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuYWRkU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBkaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBsYXJnZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNMYXJnZXIubGFyZ2VyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLm11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzLFxuICBzdWJ0cmFjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnRyYWN0LnN1YnRyYWN0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICB1bmFyeU1pbnVzRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5hcnlNaW51cy51bmFyeU1pbnVzRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVMdXA6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTHVwXG59O1xuZXhwb3J0cy5sdXBEZXBlbmRlbmNpZXMgPSBsdXBEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmx1c29sdmVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0xzb2x2ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0xzb2x2ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTHVwID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTHVwLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NsdSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NsdS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVXNvbHZlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVXNvbHZlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGx1c29sdmVEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgbHNvbHZlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTHNvbHZlLmxzb2x2ZURlcGVuZGVuY2llcyxcbiAgbHVwRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTHVwLmx1cERlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgc2x1RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU2x1LnNsdURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgdXNvbHZlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVXNvbHZlLnVzb2x2ZURlcGVuZGVuY2llcyxcbiAgY3JlYXRlTHVzb2x2ZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVMdXNvbHZlXG59O1xuZXhwb3J0cy5sdXNvbHZlRGVwZW5kZW5jaWVzID0gbHVzb2x2ZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWFkRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FicyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Ficy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWFwID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWFwLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNZWRpYW4gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNZWRpYW4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnRyYWN0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3VidHJhY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbWFkRGVwZW5kZW5jaWVzID0ge1xuICBhYnNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBYnMuYWJzRGVwZW5kZW5jaWVzLFxuICBtYXBEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXAubWFwRGVwZW5kZW5jaWVzLFxuICBtZWRpYW5EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNZWRpYW4ubWVkaWFuRGVwZW5kZW5jaWVzLFxuICBzdWJ0cmFjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnRyYWN0LnN1YnRyYWN0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNYWQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTWFkXG59O1xuZXhwb3J0cy5tYWREZXBlbmRlbmNpZXMgPSBtYWREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1hZ25ldGljQ29uc3RhbnREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG1hZ25ldGljQ29uc3RhbnREZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNYWduZXRpY0NvbnN0YW50OiBfZmFjdG9yaWVzQW55LmNyZWF0ZU1hZ25ldGljQ29uc3RhbnRcbn07XG5leHBvcnRzLm1hZ25ldGljQ29uc3RhbnREZXBlbmRlbmNpZXMgPSBtYWduZXRpY0NvbnN0YW50RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tYWduZXRpY0ZsdXhRdWFudHVtRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBtYWduZXRpY0ZsdXhRdWFudHVtRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTWFnbmV0aWNGbHV4UXVhbnR1bTogX2ZhY3Rvcmllc0FueS5jcmVhdGVNYWduZXRpY0ZsdXhRdWFudHVtXG59O1xuZXhwb3J0cy5tYWduZXRpY0ZsdXhRdWFudHVtRGVwZW5kZW5jaWVzID0gbWFnbmV0aWNGbHV4UXVhbnR1bURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWFwRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbWFwRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNYXA6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTWFwXG59O1xuZXhwb3J0cy5tYXBEZXBlbmRlbmNpZXMgPSBtYXBEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1hcFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG1hcFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTWFwVHJhbnNmb3JtOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU1hcFRyYW5zZm9ybVxufTtcbmV4cG9ydHMubWFwVHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gbWFwVHJhbnNmb3JtRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tYXRyaXhEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3BhcnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbWF0cml4RGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIE1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeENsYXNzLk1hdHJpeERlcGVuZGVuY2llcyxcbiAgU3BhcnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3BhcnNlTWF0cml4Q2xhc3MuU3BhcnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNYXRyaXg6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTWF0cml4XG59O1xuZXhwb3J0cy5tYXRyaXhEZXBlbmRlbmNpZXMgPSBtYXRyaXhEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLk1hdHJpeERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIE1hdHJpeERlcGVuZGVuY2llcyA9IHtcbiAgY3JlYXRlTWF0cml4Q2xhc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTWF0cml4Q2xhc3Ncbn07XG5leHBvcnRzLk1hdHJpeERlcGVuZGVuY2llcyA9IE1hdHJpeERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWF4RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0xhcmdlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0xhcmdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBtYXhEZXBlbmRlbmNpZXMgPSB7XG4gIGxhcmdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0xhcmdlci5sYXJnZXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU1heDogX2ZhY3Rvcmllc0FueS5jcmVhdGVNYXhcbn07XG5leHBvcnRzLm1heERlcGVuZGVuY2llcyA9IG1heERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWF4VHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0xhcmdlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0xhcmdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBtYXhUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB7XG4gIGxhcmdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0xhcmdlci5sYXJnZXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU1heFRyYW5zZm9ybTogX2ZhY3Rvcmllc0FueS5jcmVhdGVNYXhUcmFuc2Zvcm1cbn07XG5leHBvcnRzLm1heFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IG1heFRyYW5zZm9ybURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWVhbkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBtZWFuRGVwZW5kZW5jaWVzID0ge1xuICBhZGREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGQuYWRkRGVwZW5kZW5jaWVzLFxuICBkaXZpZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEaXZpZGUuZGl2aWRlRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNZWFuOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU1lYW5cbn07XG5leHBvcnRzLm1lYW5EZXBlbmRlbmNpZXMgPSBtZWFuRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tZWFuVHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG1lYW5UcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB7XG4gIGFkZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZC5hZGREZXBlbmRlbmNpZXMsXG4gIGRpdmlkZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZS5kaXZpZGVEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU1lYW5UcmFuc2Zvcm06IF9mYWN0b3JpZXNBbnkuY3JlYXRlTWVhblRyYW5zZm9ybVxufTtcbmV4cG9ydHMubWVhblRyYW5zZm9ybURlcGVuZGVuY2llcyA9IG1lYW5UcmFuc2Zvcm1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1lZGlhbkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBhcmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wYXJlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEaXZpZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEaXZpZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BhcnRpdGlvblNlbGVjdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1BhcnRpdGlvblNlbGVjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBtZWRpYW5EZXBlbmRlbmNpZXMgPSB7XG4gIGFkZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZC5hZGREZXBlbmRlbmNpZXMsXG4gIGNvbXBhcmVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wYXJlLmNvbXBhcmVEZXBlbmRlbmNpZXMsXG4gIGRpdmlkZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZS5kaXZpZGVEZXBlbmRlbmNpZXMsXG4gIHBhcnRpdGlvblNlbGVjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1BhcnRpdGlvblNlbGVjdC5wYXJ0aXRpb25TZWxlY3REZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU1lZGlhbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVNZWRpYW5cbn07XG5leHBvcnRzLm1lZGlhbkRlcGVuZGVuY2llcyA9IG1lZGlhbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWluRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1NtYWxsZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTbWFsbGVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG1pbkRlcGVuZGVuY2llcyA9IHtcbiAgc21hbGxlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NtYWxsZXIuc21hbGxlckRlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTWluOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU1pblxufTtcbmV4cG9ydHMubWluRGVwZW5kZW5jaWVzID0gbWluRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5taW5UcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzU21hbGxlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NtYWxsZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbWluVHJhbnNmb3JtRGVwZW5kZW5jaWVzID0ge1xuICBzbWFsbGVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU21hbGxlci5zbWFsbGVyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNaW5UcmFuc2Zvcm06IF9mYWN0b3JpZXNBbnkuY3JlYXRlTWluVHJhbnNmb3JtXG59O1xuZXhwb3J0cy5taW5UcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSBtaW5UcmFuc2Zvcm1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1vZERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG1vZERlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNb2Q6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTW9kXG59O1xuZXhwb3J0cy5tb2REZXBlbmRlbmNpZXMgPSBtb2REZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1vZGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNOYU4gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc05hTi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNOdW1lcmljID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNOdW1lcmljLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG1vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIGlzTmFORGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSXNOYU4uaXNOYU5EZXBlbmRlbmNpZXMsXG4gIGlzTnVtZXJpY0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzTnVtZXJpYy5pc051bWVyaWNEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU1vZGU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTW9kZVxufTtcbmV4cG9ydHMubW9kZURlcGVuZGVuY2llcyA9IG1vZGVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1vbGFyTWFzc0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbW9sYXJNYXNzRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTW9sYXJNYXNzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU1vbGFyTWFzc1xufTtcbmV4cG9ydHMubW9sYXJNYXNzRGVwZW5kZW5jaWVzID0gbW9sYXJNYXNzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tb2xhck1hc3NDMTJEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG1vbGFyTWFzc0MxMkRlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU1vbGFyTWFzc0MxMjogX2ZhY3Rvcmllc0FueS5jcmVhdGVNb2xhck1hc3NDMTJcbn07XG5leHBvcnRzLm1vbGFyTWFzc0MxMkRlcGVuZGVuY2llcyA9IG1vbGFyTWFzc0MxMkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubW9sYXJQbGFuY2tDb25zdGFudERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbW9sYXJQbGFuY2tDb25zdGFudERlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU1vbGFyUGxhbmNrQ29uc3RhbnQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTW9sYXJQbGFuY2tDb25zdGFudFxufTtcbmV4cG9ydHMubW9sYXJQbGFuY2tDb25zdGFudERlcGVuZGVuY2llcyA9IG1vbGFyUGxhbmNrQ29uc3RhbnREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1vbGFyVm9sdW1lRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBtb2xhclZvbHVtZURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU1vbGFyVm9sdW1lOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU1vbGFyVm9sdW1lXG59O1xuZXhwb3J0cy5tb2xhclZvbHVtZURlcGVuZGVuY2llcyA9IG1vbGFyVm9sdW1lRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tdWx0aW5vbWlhbERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRmFjdG9yaWFsID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRmFjdG9yaWFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc0ludGVnZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc0ludGVnZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzUG9zaXRpdmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc1Bvc2l0aXZlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG11bHRpbm9taWFsRGVwZW5kZW5jaWVzID0ge1xuICBhZGREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGQuYWRkRGVwZW5kZW5jaWVzLFxuICBkaXZpZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEaXZpZGUuZGl2aWRlRGVwZW5kZW5jaWVzLFxuICBmYWN0b3JpYWxEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGYWN0b3JpYWwuZmFjdG9yaWFsRGVwZW5kZW5jaWVzLFxuICBpc0ludGVnZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc0ludGVnZXIuaXNJbnRlZ2VyRGVwZW5kZW5jaWVzLFxuICBpc1Bvc2l0aXZlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSXNQb3NpdGl2ZS5pc1Bvc2l0aXZlRGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5Lm11bHRpcGx5RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNdWx0aW5vbWlhbDogX2ZhY3Rvcmllc0FueS5jcmVhdGVNdWx0aW5vbWlhbFxufTtcbmV4cG9ydHMubXVsdGlub21pYWxEZXBlbmRlbmNpZXMgPSBtdWx0aW5vbWlhbERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubXVsdGlwbHlEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbXVsdGlwbHlEZXBlbmRlbmNpZXMgPSB7XG4gIGFkZFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZFNjYWxhci5hZGRTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIubXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU11bHRpcGx5OiBfZmFjdG9yaWVzQW55LmNyZWF0ZU11bHRpcGx5XG59O1xuZXhwb3J0cy5tdWx0aXBseURlcGVuZGVuY2llcyA9IG11bHRpcGx5RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tdWx0aXBseVNjYWxhckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNdWx0aXBseVNjYWxhcjogX2ZhY3Rvcmllc0FueS5jcmVhdGVNdWx0aXBseVNjYWxhclxufTtcbmV4cG9ydHMubXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXMgPSBtdWx0aXBseVNjYWxhckRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuTmFORGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgTmFORGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU5hTjogX2ZhY3Rvcmllc0FueS5jcmVhdGVOYU5cbn07XG5leHBvcnRzLk5hTkRlcGVuZGVuY2llcyA9IE5hTkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubmV1dHJvbk1hc3NEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG5ldXRyb25NYXNzRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTmV1dHJvbk1hc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTmV1dHJvbk1hc3Ncbn07XG5leHBvcnRzLm5ldXRyb25NYXNzRGVwZW5kZW5jaWVzID0gbmV1dHJvbk1hc3NEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLk5vZGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBOb2RlRGVwZW5kZW5jaWVzID0ge1xuICBjcmVhdGVOb2RlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU5vZGVcbn07XG5leHBvcnRzLk5vZGVEZXBlbmRlbmNpZXMgPSBOb2RlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5ub3JtRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FicyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Ficy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb25qID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29uai5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTGFyZ2VyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTGFyZ2VyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BvdyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1Bvdy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU21hbGxlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NtYWxsZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NxcnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTcXJ0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG5vcm1EZXBlbmRlbmNpZXMgPSB7XG4gIGFic0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0Ficy5hYnNEZXBlbmRlbmNpZXMsXG4gIGFkZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZC5hZGREZXBlbmRlbmNpZXMsXG4gIGNvbmpEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb25qLmNvbmpEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGxhcmdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0xhcmdlci5sYXJnZXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXMsXG4gIHBvd0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1Bvdy5wb3dEZXBlbmRlbmNpZXMsXG4gIHNtYWxsZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTbWFsbGVyLnNtYWxsZXJEZXBlbmRlbmNpZXMsXG4gIHNxcnREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTcXJ0LnNxcnREZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU5vcm06IF9mYWN0b3JpZXNBbnkuY3JlYXRlTm9ybVxufTtcbmV4cG9ydHMubm9ybURlcGVuZGVuY2llcyA9IG5vcm1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm5vdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG5vdERlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTm90OiBfZmFjdG9yaWVzQW55LmNyZWF0ZU5vdFxufTtcbmV4cG9ydHMubm90RGVwZW5kZW5jaWVzID0gbm90RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5udGhSb290RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBudGhSb290RGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU50aFJvb3Q6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTnRoUm9vdFxufTtcbmV4cG9ydHMubnRoUm9vdERlcGVuZGVuY2llcyA9IG50aFJvb3REZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm50aFJvb3RzRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG50aFJvb3RzRGVwZW5kZW5jaWVzID0ge1xuICBDb21wbGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLkNvbXBsZXhEZXBlbmRlbmNpZXMsXG4gIGRpdmlkZVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5kaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU50aFJvb3RzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU50aFJvb3RzXG59O1xuZXhwb3J0cy5udGhSb290c0RlcGVuZGVuY2llcyA9IG50aFJvb3RzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5udWNsZWFyTWFnbmV0b25EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG51Y2xlYXJNYWduZXRvbkRlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU51Y2xlYXJNYWduZXRvbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVOdWNsZWFyTWFnbmV0b25cbn07XG5leHBvcnRzLm51Y2xlYXJNYWduZXRvbkRlcGVuZGVuY2llcyA9IG51Y2xlYXJNYWduZXRvbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubnVsbERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG51bGxEZXBlbmRlbmNpZXMgPSB7XG4gIGNyZWF0ZU51bGw6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTnVsbFxufTtcbmV4cG9ydHMubnVsbERlcGVuZGVuY2llcyA9IG51bGxEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm51bWJlckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG51bWJlckRlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTnVtYmVyOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU51bWJlclxufTtcbmV4cG9ydHMubnVtYmVyRGVwZW5kZW5jaWVzID0gbnVtYmVyRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5udW1lcmljRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ251bWJlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ251bWJlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRnJhY3Rpb24gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGcmFjdGlvbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTnVtYmVyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTnVtYmVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG51bWVyaWNEZXBlbmRlbmNpZXMgPSB7XG4gIGJpZ251bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ251bWJlci5iaWdudW1iZXJEZXBlbmRlbmNpZXMsXG4gIGZyYWN0aW9uRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRnJhY3Rpb24uZnJhY3Rpb25EZXBlbmRlbmNpZXMsXG4gIG51bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc051bWJlci5udW1iZXJEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU51bWVyaWM6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTnVtZXJpY1xufTtcbmV4cG9ydHMubnVtZXJpY0RlcGVuZGVuY2llcyA9IG51bWVyaWNEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLk9iamVjdE5vZGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc05vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgT2JqZWN0Tm9kZURlcGVuZGVuY2llcyA9IHtcbiAgTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc05vZGUuTm9kZURlcGVuZGVuY2llcyxcbiAgY3JlYXRlT2JqZWN0Tm9kZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVPYmplY3ROb2RlXG59O1xuZXhwb3J0cy5PYmplY3ROb2RlRGVwZW5kZW5jaWVzID0gT2JqZWN0Tm9kZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMub25lc0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgb25lc0RlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVPbmVzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU9uZXNcbn07XG5leHBvcnRzLm9uZXNEZXBlbmRlbmNpZXMgPSBvbmVzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5PcGVyYXRvck5vZGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc05vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgT3BlcmF0b3JOb2RlRGVwZW5kZW5jaWVzID0ge1xuICBOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTm9kZS5Ob2RlRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVPcGVyYXRvck5vZGU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlT3BlcmF0b3JOb2RlXG59O1xuZXhwb3J0cy5PcGVyYXRvck5vZGVEZXBlbmRlbmNpZXMgPSBPcGVyYXRvck5vZGVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm9yRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgb3JEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5lcXVhbFNjYWxhckRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlT3I6IF9mYWN0b3JpZXNBbnkuY3JlYXRlT3Jcbn07XG5leHBvcnRzLm9yRGVwZW5kZW5jaWVzID0gb3JEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLlBhcmVudGhlc2lzTm9kZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBQYXJlbnRoZXNpc05vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOb2RlLk5vZGVEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVBhcmVudGhlc2lzTm9kZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVQYXJlbnRoZXNpc05vZGVcbn07XG5leHBvcnRzLlBhcmVudGhlc2lzTm9kZURlcGVuZGVuY2llcyA9IFBhcmVudGhlc2lzTm9kZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucGFyc2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWNjZXNzb3JOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWNjZXNzb3JOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBcnJheU5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBcnJheU5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Fzc2lnbm1lbnROb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQXNzaWdubWVudE5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Jsb2NrTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Jsb2NrTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29uZGl0aW9uYWxOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29uZGl0aW9uYWxOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb25zdGFudE5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb25zdGFudE5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Z1bmN0aW9uQXNzaWdubWVudE5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGdW5jdGlvbk5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGdW5jdGlvbk5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0luZGV4Tm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0luZGV4Tm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzT2JqZWN0Tm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc09iamVjdE5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc09wZXJhdG9yTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc09wZXJhdG9yTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGFyZW50aGVzaXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUGFyZW50aGVzaXNOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSYW5nZU5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNSYW5nZU5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1JlbGF0aW9uYWxOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUmVsYXRpb25hbE5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N5bWJvbE5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTeW1ib2xOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNOdW1lcmljID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTnVtZXJpYy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBwYXJzZURlcGVuZGVuY2llcyA9IHtcbiAgQWNjZXNzb3JOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWNjZXNzb3JOb2RlLkFjY2Vzc29yTm9kZURlcGVuZGVuY2llcyxcbiAgQXJyYXlOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQXJyYXlOb2RlLkFycmF5Tm9kZURlcGVuZGVuY2llcyxcbiAgQXNzaWdubWVudE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBc3NpZ25tZW50Tm9kZS5Bc3NpZ25tZW50Tm9kZURlcGVuZGVuY2llcyxcbiAgQmxvY2tOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmxvY2tOb2RlLkJsb2NrTm9kZURlcGVuZGVuY2llcyxcbiAgQ29uZGl0aW9uYWxOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29uZGl0aW9uYWxOb2RlLkNvbmRpdGlvbmFsTm9kZURlcGVuZGVuY2llcyxcbiAgQ29uc3RhbnROb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29uc3RhbnROb2RlLkNvbnN0YW50Tm9kZURlcGVuZGVuY2llcyxcbiAgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0Z1bmN0aW9uQXNzaWdubWVudE5vZGUuRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZURlcGVuZGVuY2llcyxcbiAgRnVuY3Rpb25Ob2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRnVuY3Rpb25Ob2RlLkZ1bmN0aW9uTm9kZURlcGVuZGVuY2llcyxcbiAgSW5kZXhOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSW5kZXhOb2RlLkluZGV4Tm9kZURlcGVuZGVuY2llcyxcbiAgT2JqZWN0Tm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc09iamVjdE5vZGUuT2JqZWN0Tm9kZURlcGVuZGVuY2llcyxcbiAgT3BlcmF0b3JOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzT3BlcmF0b3JOb2RlLk9wZXJhdG9yTm9kZURlcGVuZGVuY2llcyxcbiAgUGFyZW50aGVzaXNOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUGFyZW50aGVzaXNOb2RlLlBhcmVudGhlc2lzTm9kZURlcGVuZGVuY2llcyxcbiAgUmFuZ2VOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUmFuZ2VOb2RlLlJhbmdlTm9kZURlcGVuZGVuY2llcyxcbiAgUmVsYXRpb25hbE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNSZWxhdGlvbmFsTm9kZS5SZWxhdGlvbmFsTm9kZURlcGVuZGVuY2llcyxcbiAgU3ltYm9sTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N5bWJvbE5vZGUuU3ltYm9sTm9kZURlcGVuZGVuY2llcyxcbiAgbnVtZXJpY0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc051bWVyaWMubnVtZXJpY0RlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUGFyc2U6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUGFyc2Vcbn07XG5leHBvcnRzLnBhcnNlRGVwZW5kZW5jaWVzID0gcGFyc2VEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBhcnNlckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNQYXJzZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1BhcnNlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHBhcnNlckRlcGVuZGVuY2llcyA9IHtcbiAgUGFyc2VyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUGFyc2VyQ2xhc3MuUGFyc2VyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVQYXJzZXI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUGFyc2VyXG59O1xuZXhwb3J0cy5wYXJzZXJEZXBlbmRlbmNpZXMgPSBwYXJzZXJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLlBhcnNlckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNQYXJzZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1BhcnNlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIFBhcnNlckRlcGVuZGVuY2llcyA9IHtcbiAgcGFyc2VEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNQYXJzZS5wYXJzZURlcGVuZGVuY2llcyxcbiAgY3JlYXRlUGFyc2VyQ2xhc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUGFyc2VyQ2xhc3Ncbn07XG5leHBvcnRzLlBhcnNlckRlcGVuZGVuY2llcyA9IFBhcnNlckRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucGFydGl0aW9uU2VsZWN0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBhcmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wYXJlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc05hTiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzTmFOLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc051bWVyaWMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc051bWVyaWMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcGFydGl0aW9uU2VsZWN0RGVwZW5kZW5jaWVzID0ge1xuICBjb21wYXJlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGFyZS5jb21wYXJlRGVwZW5kZW5jaWVzLFxuICBpc05hTkRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzTmFOLmlzTmFORGVwZW5kZW5jaWVzLFxuICBpc051bWVyaWNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc051bWVyaWMuaXNOdW1lcmljRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVQYXJ0aXRpb25TZWxlY3Q6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUGFydGl0aW9uU2VsZWN0XG59O1xuZXhwb3J0cy5wYXJ0aXRpb25TZWxlY3REZXBlbmRlbmNpZXMgPSBwYXJ0aXRpb25TZWxlY3REZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBlcm11dGF0aW9uc0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNGYWN0b3JpYWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGYWN0b3JpYWwuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcGVybXV0YXRpb25zRGVwZW5kZW5jaWVzID0ge1xuICBmYWN0b3JpYWxEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGYWN0b3JpYWwuZmFjdG9yaWFsRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVQZXJtdXRhdGlvbnM6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUGVybXV0YXRpb25zXG59O1xuZXhwb3J0cy5wZXJtdXRhdGlvbnNEZXBlbmRlbmNpZXMgPSBwZXJtdXRhdGlvbnNEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBoaURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHBoaURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVQaGk6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUGhpXG59O1xuZXhwb3J0cy5waGlEZXBlbmRlbmNpZXMgPSBwaGlEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBpRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcGlEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlUGk6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUGlcbn07XG5leHBvcnRzLnBpRGVwZW5kZW5jaWVzID0gcGlEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBpY2tSYW5kb21EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBwaWNrUmFuZG9tRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVQaWNrUmFuZG9tOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVBpY2tSYW5kb21cbn07XG5leHBvcnRzLnBpY2tSYW5kb21EZXBlbmRlbmNpZXMgPSBwaWNrUmFuZG9tRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5wbGFuY2tDaGFyZ2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHBsYW5ja0NoYXJnZURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVBsYW5ja0NoYXJnZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVQbGFuY2tDaGFyZ2Vcbn07XG5leHBvcnRzLnBsYW5ja0NoYXJnZURlcGVuZGVuY2llcyA9IHBsYW5ja0NoYXJnZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucGxhbmNrQ29uc3RhbnREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHBsYW5ja0NvbnN0YW50RGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUGxhbmNrQ29uc3RhbnQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUGxhbmNrQ29uc3RhbnRcbn07XG5leHBvcnRzLnBsYW5ja0NvbnN0YW50RGVwZW5kZW5jaWVzID0gcGxhbmNrQ29uc3RhbnREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBsYW5ja0xlbmd0aERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcGxhbmNrTGVuZ3RoRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUGxhbmNrTGVuZ3RoOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVBsYW5ja0xlbmd0aFxufTtcbmV4cG9ydHMucGxhbmNrTGVuZ3RoRGVwZW5kZW5jaWVzID0gcGxhbmNrTGVuZ3RoRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5wbGFuY2tNYXNzRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBwbGFuY2tNYXNzRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUGxhbmNrTWFzczogX2ZhY3Rvcmllc0FueS5jcmVhdGVQbGFuY2tNYXNzXG59O1xuZXhwb3J0cy5wbGFuY2tNYXNzRGVwZW5kZW5jaWVzID0gcGxhbmNrTWFzc0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucGxhbmNrVGVtcGVyYXR1cmVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHBsYW5ja1RlbXBlcmF0dXJlRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUGxhbmNrVGVtcGVyYXR1cmU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUGxhbmNrVGVtcGVyYXR1cmVcbn07XG5leHBvcnRzLnBsYW5ja1RlbXBlcmF0dXJlRGVwZW5kZW5jaWVzID0gcGxhbmNrVGVtcGVyYXR1cmVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBsYW5ja1RpbWVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHBsYW5ja1RpbWVEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVQbGFuY2tUaW1lOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVBsYW5ja1RpbWVcbn07XG5leHBvcnRzLnBsYW5ja1RpbWVEZXBlbmRlbmNpZXMgPSBwbGFuY2tUaW1lRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5wb3dEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGcmFjdGlvbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0ZyYWN0aW9uLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJZGVudGl0eSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lkZW50aXR5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc051bWJlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc051bWJlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBwb3dEZXBlbmRlbmNpZXMgPSB7XG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgZnJhY3Rpb25EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGcmFjdGlvbi5mcmFjdGlvbkRlcGVuZGVuY2llcyxcbiAgaWRlbnRpdHlEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJZGVudGl0eS5pZGVudGl0eURlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseS5tdWx0aXBseURlcGVuZGVuY2llcyxcbiAgbnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTnVtYmVyLm51bWJlckRlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUG93OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVBvd1xufTtcbmV4cG9ydHMucG93RGVwZW5kZW5jaWVzID0gcG93RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5wcmludERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHByaW50RGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVQcmludDogX2ZhY3Rvcmllc0FueS5jcmVhdGVQcmludFxufTtcbmV4cG9ydHMucHJpbnREZXBlbmRlbmNpZXMgPSBwcmludERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucHJvZERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHByb2REZXBlbmRlbmNpZXMgPSB7XG4gIG11bHRpcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVByb2Q6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUHJvZFxufTtcbmV4cG9ydHMucHJvZERlcGVuZGVuY2llcyA9IHByb2REZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnByb3Rvbk1hc3NEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHByb3Rvbk1hc3NEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVQcm90b25NYXNzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVByb3Rvbk1hc3Ncbn07XG5leHBvcnRzLnByb3Rvbk1hc3NEZXBlbmRlbmNpZXMgPSBwcm90b25NYXNzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5xckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wbGV4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb25qID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29uai5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJZGVudGl0eSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lkZW50aXR5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc1plcm8gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc1plcm8uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2lnbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NpZ24uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NxcnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTcXJ0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJ0cmFjdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1YnRyYWN0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5hcnlNaW51cy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzWmVyb3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNaZXJvcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBxckRlcGVuZGVuY2llcyA9IHtcbiAgYWRkU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmFkZFNjYWxhckRlcGVuZGVuY2llcyxcbiAgY29tcGxleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBsZXguY29tcGxleERlcGVuZGVuY2llcyxcbiAgY29uakRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbmouY29uakRlcGVuZGVuY2llcyxcbiAgZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmRpdmlkZVNjYWxhckRlcGVuZGVuY2llcyxcbiAgZXF1YWxEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbC5lcXVhbERlcGVuZGVuY2llcyxcbiAgaWRlbnRpdHlEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJZGVudGl0eS5pZGVudGl0eURlcGVuZGVuY2llcyxcbiAgaXNaZXJvRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSXNaZXJvLmlzWmVyb0RlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5tdWx0aXBseVNjYWxhckRlcGVuZGVuY2llcyxcbiAgc2lnbkRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NpZ24uc2lnbkRlcGVuZGVuY2llcyxcbiAgc3FydERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NxcnQuc3FydERlcGVuZGVuY2llcyxcbiAgc3VidHJhY3REZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5zdWJ0cmFjdERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgdW5hcnlNaW51c0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuYXJ5TWludXMudW5hcnlNaW51c0RlcGVuZGVuY2llcyxcbiAgemVyb3NEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNaZXJvcy56ZXJvc0RlcGVuZGVuY2llcyxcbiAgY3JlYXRlUXI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUXJcbn07XG5leHBvcnRzLnFyRGVwZW5kZW5jaWVzID0gcXJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnF1YW50aWxlU2VxRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGFyZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBhcmUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BhcnRpdGlvblNlbGVjdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1BhcnRpdGlvblNlbGVjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBxdWFudGlsZVNlcURlcGVuZGVuY2llcyA9IHtcbiAgYWRkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWRkLmFkZERlcGVuZGVuY2llcyxcbiAgY29tcGFyZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBhcmUuY29tcGFyZURlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseS5tdWx0aXBseURlcGVuZGVuY2llcyxcbiAgcGFydGl0aW9uU2VsZWN0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUGFydGl0aW9uU2VsZWN0LnBhcnRpdGlvblNlbGVjdERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUXVhbnRpbGVTZXE6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUXVhbnRpbGVTZXFcbn07XG5leHBvcnRzLnF1YW50aWxlU2VxRGVwZW5kZW5jaWVzID0gcXVhbnRpbGVTZXFEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnF1YW50dW1PZkNpcmN1bGF0aW9uRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBxdWFudHVtT2ZDaXJjdWxhdGlvbkRlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVF1YW50dW1PZkNpcmN1bGF0aW9uOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVF1YW50dW1PZkNpcmN1bGF0aW9uXG59O1xuZXhwb3J0cy5xdWFudHVtT2ZDaXJjdWxhdGlvbkRlcGVuZGVuY2llcyA9IHF1YW50dW1PZkNpcmN1bGF0aW9uRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yYW5kb21EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciByYW5kb21EZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVJhbmRvbTogX2ZhY3Rvcmllc0FueS5jcmVhdGVSYW5kb21cbn07XG5leHBvcnRzLnJhbmRvbURlcGVuZGVuY2llcyA9IHJhbmRvbURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmFuZG9tSW50RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcmFuZG9tSW50RGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVSYW5kb21JbnQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUmFuZG9tSW50XG59O1xuZXhwb3J0cy5yYW5kb21JbnREZXBlbmRlbmNpZXMgPSByYW5kb21JbnREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJhbmdlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ251bWJlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ251bWJlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMYXJnZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNMYXJnZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0xhcmdlckVxID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTGFyZ2VyRXEuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NtYWxsZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTbWFsbGVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTbWFsbGVyRXEgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTbWFsbGVyRXEuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcmFuZ2VEZXBlbmRlbmNpZXMgPSB7XG4gIGJpZ251bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ251bWJlci5iaWdudW1iZXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGxhcmdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0xhcmdlci5sYXJnZXJEZXBlbmRlbmNpZXMsXG4gIGxhcmdlckVxRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTGFyZ2VyRXEubGFyZ2VyRXFEZXBlbmRlbmNpZXMsXG4gIHNtYWxsZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTbWFsbGVyLnNtYWxsZXJEZXBlbmRlbmNpZXMsXG4gIHNtYWxsZXJFcURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NtYWxsZXJFcS5zbWFsbGVyRXFEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVJhbmdlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVJhbmdlXG59O1xuZXhwb3J0cy5yYW5nZURlcGVuZGVuY2llcyA9IHJhbmdlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5SYW5nZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIFJhbmdlRGVwZW5kZW5jaWVzID0ge1xuICBjcmVhdGVSYW5nZUNsYXNzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVJhbmdlQ2xhc3Ncbn07XG5leHBvcnRzLlJhbmdlRGVwZW5kZW5jaWVzID0gUmFuZ2VEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLlJhbmdlTm9kZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBSYW5nZU5vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOb2RlLk5vZGVEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVJhbmdlTm9kZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVSYW5nZU5vZGVcbn07XG5leHBvcnRzLlJhbmdlTm9kZURlcGVuZGVuY2llcyA9IFJhbmdlTm9kZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmFuZ2VUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnbnVtYmVyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnbnVtYmVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0xhcmdlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0xhcmdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTGFyZ2VyRXEgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNMYXJnZXJFcS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU21hbGxlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NtYWxsZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NtYWxsZXJFcSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NtYWxsZXJFcS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciByYW5nZVRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHtcbiAgYmlnbnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnbnVtYmVyLmJpZ251bWJlckRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgbGFyZ2VyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTGFyZ2VyLmxhcmdlckRlcGVuZGVuY2llcyxcbiAgbGFyZ2VyRXFEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNMYXJnZXJFcS5sYXJnZXJFcURlcGVuZGVuY2llcyxcbiAgc21hbGxlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NtYWxsZXIuc21hbGxlckRlcGVuZGVuY2llcyxcbiAgc21hbGxlckVxRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU21hbGxlckVxLnNtYWxsZXJFcURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUmFuZ2VUcmFuc2Zvcm06IF9mYWN0b3JpZXNBbnkuY3JlYXRlUmFuZ2VUcmFuc2Zvcm1cbn07XG5leHBvcnRzLnJhbmdlVHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gcmFuZ2VUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJhdGlvbmFsaXplRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ251bWJlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ251bWJlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRnJhY3Rpb24gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGcmFjdGlvbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29uc3RhbnROb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29uc3RhbnROb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGdW5jdGlvbk5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGdW5jdGlvbk5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc09wZXJhdG9yTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc09wZXJhdG9yTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGFyZW50aGVzaXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUGFyZW50aGVzaXNOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTeW1ib2xOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3ltYm9sTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEaXZpZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEaXZpZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWwuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzWmVybyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzWmVyby5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGFyc2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNQYXJzZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUG93ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUG93LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaW1wbGlmeSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NpbXBsaWZ5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJ0cmFjdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1YnRyYWN0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHJhdGlvbmFsaXplRGVwZW5kZW5jaWVzID0ge1xuICBiaWdudW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdudW1iZXIuYmlnbnVtYmVyRGVwZW5kZW5jaWVzLFxuICBmcmFjdGlvbkRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0ZyYWN0aW9uLmZyYWN0aW9uRGVwZW5kZW5jaWVzLFxuICBDb25zdGFudE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb25zdGFudE5vZGUuQ29uc3RhbnROb2RlRGVwZW5kZW5jaWVzLFxuICBGdW5jdGlvbk5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGdW5jdGlvbk5vZGUuRnVuY3Rpb25Ob2RlRGVwZW5kZW5jaWVzLFxuICBPcGVyYXRvck5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNPcGVyYXRvck5vZGUuT3BlcmF0b3JOb2RlRGVwZW5kZW5jaWVzLFxuICBQYXJlbnRoZXNpc05vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNQYXJlbnRoZXNpc05vZGUuUGFyZW50aGVzaXNOb2RlRGVwZW5kZW5jaWVzLFxuICBTeW1ib2xOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3ltYm9sTm9kZS5TeW1ib2xOb2RlRGVwZW5kZW5jaWVzLFxuICBhZGREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGQuYWRkRGVwZW5kZW5jaWVzLFxuICBkaXZpZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEaXZpZGUuZGl2aWRlRGVwZW5kZW5jaWVzLFxuICBlcXVhbERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsLmVxdWFsRGVwZW5kZW5jaWVzLFxuICBpc1plcm9EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc1plcm8uaXNaZXJvRGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5Lm11bHRpcGx5RGVwZW5kZW5jaWVzLFxuICBwYXJzZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1BhcnNlLnBhcnNlRGVwZW5kZW5jaWVzLFxuICBwb3dEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNQb3cucG93RGVwZW5kZW5jaWVzLFxuICBzaW1wbGlmeURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NpbXBsaWZ5LnNpbXBsaWZ5RGVwZW5kZW5jaWVzLFxuICBzdWJ0cmFjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnRyYWN0LnN1YnRyYWN0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVSYXRpb25hbGl6ZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVSYXRpb25hbGl6ZVxufTtcbmV4cG9ydHMucmF0aW9uYWxpemVEZXBlbmRlbmNpZXMgPSByYXRpb25hbGl6ZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciByZURlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUmU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUmVcbn07XG5leHBvcnRzLnJlRGVwZW5kZW5jaWVzID0gcmVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJlZHVjZWRQbGFuY2tDb25zdGFudERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcmVkdWNlZFBsYW5ja0NvbnN0YW50RGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUmVkdWNlZFBsYW5ja0NvbnN0YW50OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVJlZHVjZWRQbGFuY2tDb25zdGFudFxufTtcbmV4cG9ydHMucmVkdWNlZFBsYW5ja0NvbnN0YW50RGVwZW5kZW5jaWVzID0gcmVkdWNlZFBsYW5ja0NvbnN0YW50RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5SZWxhdGlvbmFsTm9kZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBSZWxhdGlvbmFsTm9kZURlcGVuZGVuY2llcyA9IHtcbiAgTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc05vZGUuTm9kZURlcGVuZGVuY2llcyxcbiAgY3JlYXRlUmVsYXRpb25hbE5vZGU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUmVsYXRpb25hbE5vZGVcbn07XG5leHBvcnRzLlJlbGF0aW9uYWxOb2RlRGVwZW5kZW5jaWVzID0gUmVsYXRpb25hbE5vZGVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJlcGxhY2VyRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcmVwbGFjZXJEZXBlbmRlbmNpZXMgPSB7XG4gIGNyZWF0ZVJlcGxhY2VyOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVJlcGxhY2VyXG59O1xuZXhwb3J0cy5yZXBsYWNlckRlcGVuZGVuY2llcyA9IHJlcGxhY2VyRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yZXNoYXBlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzSW50ZWdlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzSW50ZWdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHJlc2hhcGVEZXBlbmRlbmNpZXMgPSB7XG4gIGlzSW50ZWdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzSW50ZWdlci5pc0ludGVnZXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVJlc2hhcGU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUmVzaGFwZVxufTtcbmV4cG9ydHMucmVzaGFwZURlcGVuZGVuY2llcyA9IHJlc2hhcGVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJlc2l6ZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcmVzaXplRGVwZW5kZW5jaWVzID0ge1xuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVSZXNpemU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUmVzaXplXG59O1xuZXhwb3J0cy5yZXNpemVEZXBlbmRlbmNpZXMgPSByZXNpemVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLlJlc3VsdFNldERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIFJlc3VsdFNldERlcGVuZGVuY2llcyA9IHtcbiAgY3JlYXRlUmVzdWx0U2V0OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVJlc3VsdFNldFxufTtcbmV4cG9ydHMuUmVzdWx0U2V0RGVwZW5kZW5jaWVzID0gUmVzdWx0U2V0RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yZXZpdmVyRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcmV2aXZlckRlcGVuZGVuY2llcyA9IHtcbiAgY3JlYXRlUmV2aXZlcjogX2ZhY3Rvcmllc0FueS5jcmVhdGVSZXZpdmVyXG59O1xuZXhwb3J0cy5yZXZpdmVyRGVwZW5kZW5jaWVzID0gcmV2aXZlckRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmlnaHRBcml0aFNoaWZ0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1plcm9zID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzWmVyb3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcmlnaHRBcml0aFNoaWZ0RGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIHplcm9zRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzWmVyb3MuemVyb3NEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVJpZ2h0QXJpdGhTaGlmdDogX2ZhY3Rvcmllc0FueS5jcmVhdGVSaWdodEFyaXRoU2hpZnRcbn07XG5leHBvcnRzLnJpZ2h0QXJpdGhTaGlmdERlcGVuZGVuY2llcyA9IHJpZ2h0QXJpdGhTaGlmdERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmlnaHRMb2dTaGlmdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNaZXJvcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1plcm9zLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHJpZ2h0TG9nU2hpZnREZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5lcXVhbFNjYWxhckRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgemVyb3NEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNaZXJvcy56ZXJvc0RlcGVuZGVuY2llcyxcbiAgY3JlYXRlUmlnaHRMb2dTaGlmdDogX2ZhY3Rvcmllc0FueS5jcmVhdGVSaWdodExvZ1NoaWZ0XG59O1xuZXhwb3J0cy5yaWdodExvZ1NoaWZ0RGVwZW5kZW5jaWVzID0gcmlnaHRMb2dTaGlmdERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucm91bmREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzWmVyb3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNaZXJvcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciByb3VuZERlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIHplcm9zRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzWmVyb3MuemVyb3NEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVJvdW5kOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVJvdW5kXG59O1xuZXhwb3J0cy5yb3VuZERlcGVuZGVuY2llcyA9IHJvdW5kRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yb3dEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUmFuZ2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNSYW5nZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciByb3dEZXBlbmRlbmNpZXMgPSB7XG4gIEluZGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5JbmRleERlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgcmFuZ2VEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNSYW5nZS5yYW5nZURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUm93OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVJvd1xufTtcbmV4cG9ydHMucm93RGVwZW5kZW5jaWVzID0gcm93RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yb3dUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUmFuZ2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNSYW5nZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciByb3dUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB7XG4gIEluZGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5JbmRleERlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgcmFuZ2VEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNSYW5nZS5yYW5nZURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUm93VHJhbnNmb3JtOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVJvd1RyYW5zZm9ybVxufTtcbmV4cG9ydHMucm93VHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gcm93VHJhbnNmb3JtRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yeWRiZXJnRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciByeWRiZXJnRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUnlkYmVyZzogX2ZhY3Rvcmllc0FueS5jcmVhdGVSeWRiZXJnXG59O1xuZXhwb3J0cy5yeWRiZXJnRGVwZW5kZW5jaWVzID0gcnlkYmVyZ0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuU1FSVDFfMkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbGluZSBjYW1lbGNhc2VcbnZhciBTUVJUMV8yRGVwZW5kZW5jaWVzID0ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGNhbWVsY2FzZVxuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNRUlQxXzI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU1FSVDFfMlxufTtcbmV4cG9ydHMuU1FSVDFfMkRlcGVuZGVuY2llcyA9IFNRUlQxXzJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLlNRUlQyRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgU1FSVDJEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlU1FSVDI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU1FSVDJcbn07XG5leHBvcnRzLlNRUlQyRGVwZW5kZW5jaWVzID0gU1FSVDJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNhY2t1clRldHJvZGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzYWNrdXJUZXRyb2RlRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNhY2t1clRldHJvZGU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU2Fja3VyVGV0cm9kZVxufTtcbmV4cG9ydHMuc2Fja3VyVGV0cm9kZURlcGVuZGVuY2llcyA9IHNhY2t1clRldHJvZGVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNlY0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNlY0RlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTZWM6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU2VjXG59O1xuZXhwb3J0cy5zZWNEZXBlbmRlbmNpZXMgPSBzZWNEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNlY2hEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzZWNoRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNlY2g6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU2VjaFxufTtcbmV4cG9ydHMuc2VjaERlcGVuZGVuY2llcyA9IHNlY2hEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNlY29uZFJhZGlhdGlvbkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc2Vjb25kUmFkaWF0aW9uRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU2Vjb25kUmFkaWF0aW9uOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNlY29uZFJhZGlhdGlvblxufTtcbmV4cG9ydHMuc2Vjb25kUmFkaWF0aW9uRGVwZW5kZW5jaWVzID0gc2Vjb25kUmFkaWF0aW9uRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXRDYXJ0ZXNpYW5EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0luZGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJbmRleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBhcmVOYXR1cmFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaXplID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU2l6ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3Vic2V0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3Vic2V0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNldENhcnRlc2lhbkRlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBJbmRleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuSW5kZXhEZXBlbmRlbmNpZXMsXG4gIGNvbXBhcmVOYXR1cmFsRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXMsXG4gIHNpemVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTaXplLnNpemVEZXBlbmRlbmNpZXMsXG4gIHN1YnNldERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnNldC5zdWJzZXREZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNldENhcnRlc2lhbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVTZXRDYXJ0ZXNpYW5cbn07XG5leHBvcnRzLnNldENhcnRlc2lhbkRlcGVuZGVuY2llcyA9IHNldENhcnRlc2lhbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2V0RGlmZmVyZW5jZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBhcmVOYXR1cmFsID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NpemUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTaXplLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJzZXQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJzZXQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc2V0RGlmZmVyZW5jZURlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBJbmRleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuSW5kZXhEZXBlbmRlbmNpZXMsXG4gIGNvbXBhcmVOYXR1cmFsRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXMsXG4gIHNpemVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTaXplLnNpemVEZXBlbmRlbmNpZXMsXG4gIHN1YnNldERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnNldC5zdWJzZXREZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNldERpZmZlcmVuY2U6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU2V0RGlmZmVyZW5jZVxufTtcbmV4cG9ydHMuc2V0RGlmZmVyZW5jZURlcGVuZGVuY2llcyA9IHNldERpZmZlcmVuY2VEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNldERpc3RpbmN0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2l6ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NpemUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnNldCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1YnNldC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzZXREaXN0aW5jdERlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBJbmRleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuSW5kZXhEZXBlbmRlbmNpZXMsXG4gIGNvbXBhcmVOYXR1cmFsRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXMsXG4gIHNpemVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTaXplLnNpemVEZXBlbmRlbmNpZXMsXG4gIHN1YnNldERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnNldC5zdWJzZXREZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNldERpc3RpbmN0OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNldERpc3RpbmN0XG59O1xuZXhwb3J0cy5zZXREaXN0aW5jdERlcGVuZGVuY2llcyA9IHNldERpc3RpbmN0RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXRJbnRlcnNlY3REZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0luZGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJbmRleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBhcmVOYXR1cmFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaXplID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU2l6ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3Vic2V0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3Vic2V0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNldEludGVyc2VjdERlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBJbmRleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuSW5kZXhEZXBlbmRlbmNpZXMsXG4gIGNvbXBhcmVOYXR1cmFsRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXMsXG4gIHNpemVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTaXplLnNpemVEZXBlbmRlbmNpZXMsXG4gIHN1YnNldERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnNldC5zdWJzZXREZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNldEludGVyc2VjdDogX2ZhY3Rvcmllc0FueS5jcmVhdGVTZXRJbnRlcnNlY3Rcbn07XG5leHBvcnRzLnNldEludGVyc2VjdERlcGVuZGVuY2llcyA9IHNldEludGVyc2VjdERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2V0SXNTdWJzZXREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBhcmVOYXR1cmFsID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NpemUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTaXplLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJzZXQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJzZXQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc2V0SXNTdWJzZXREZXBlbmRlbmNpZXMgPSB7XG4gIEluZGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5JbmRleERlcGVuZGVuY2llcyxcbiAgY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbC5jb21wYXJlTmF0dXJhbERlcGVuZGVuY2llcyxcbiAgc2l6ZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NpemUuc2l6ZURlcGVuZGVuY2llcyxcbiAgc3Vic2V0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3Vic2V0LnN1YnNldERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU2V0SXNTdWJzZXQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU2V0SXNTdWJzZXRcbn07XG5leHBvcnRzLnNldElzU3Vic2V0RGVwZW5kZW5jaWVzID0gc2V0SXNTdWJzZXREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNldE11bHRpcGxpY2l0eURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2l6ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NpemUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnNldCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1YnNldC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzZXRNdWx0aXBsaWNpdHlEZXBlbmRlbmNpZXMgPSB7XG4gIEluZGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5JbmRleERlcGVuZGVuY2llcyxcbiAgY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbC5jb21wYXJlTmF0dXJhbERlcGVuZGVuY2llcyxcbiAgc2l6ZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NpemUuc2l6ZURlcGVuZGVuY2llcyxcbiAgc3Vic2V0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3Vic2V0LnN1YnNldERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU2V0TXVsdGlwbGljaXR5OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNldE11bHRpcGxpY2l0eVxufTtcbmV4cG9ydHMuc2V0TXVsdGlwbGljaXR5RGVwZW5kZW5jaWVzID0gc2V0TXVsdGlwbGljaXR5RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXRQb3dlcnNldERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2l6ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NpemUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnNldCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1YnNldC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzZXRQb3dlcnNldERlcGVuZGVuY2llcyA9IHtcbiAgSW5kZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJbmRleENsYXNzLkluZGV4RGVwZW5kZW5jaWVzLFxuICBjb21wYXJlTmF0dXJhbERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBhcmVOYXR1cmFsLmNvbXBhcmVOYXR1cmFsRGVwZW5kZW5jaWVzLFxuICBzaXplRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU2l6ZS5zaXplRGVwZW5kZW5jaWVzLFxuICBzdWJzZXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTdWJzZXQuc3Vic2V0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTZXRQb3dlcnNldDogX2ZhY3Rvcmllc0FueS5jcmVhdGVTZXRQb3dlcnNldFxufTtcbmV4cG9ydHMuc2V0UG93ZXJzZXREZXBlbmRlbmNpZXMgPSBzZXRQb3dlcnNldERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2V0U2l6ZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBhcmVOYXR1cmFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNldFNpemVEZXBlbmRlbmNpZXMgPSB7XG4gIGNvbXBhcmVOYXR1cmFsRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNldFNpemU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU2V0U2l6ZVxufTtcbmV4cG9ydHMuc2V0U2l6ZURlcGVuZGVuY2llcyA9IHNldFNpemVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNldFN5bURpZmZlcmVuY2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbmNhdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbmNhdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2V0RGlmZmVyZW5jZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NldERpZmZlcmVuY2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NpemUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTaXplLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJzZXQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJzZXQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc2V0U3ltRGlmZmVyZW5jZURlcGVuZGVuY2llcyA9IHtcbiAgSW5kZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJbmRleENsYXNzLkluZGV4RGVwZW5kZW5jaWVzLFxuICBjb25jYXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb25jYXQuY29uY2F0RGVwZW5kZW5jaWVzLFxuICBzZXREaWZmZXJlbmNlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU2V0RGlmZmVyZW5jZS5zZXREaWZmZXJlbmNlRGVwZW5kZW5jaWVzLFxuICBzaXplRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU2l6ZS5zaXplRGVwZW5kZW5jaWVzLFxuICBzdWJzZXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTdWJzZXQuc3Vic2V0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTZXRTeW1EaWZmZXJlbmNlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNldFN5bURpZmZlcmVuY2Vcbn07XG5leHBvcnRzLnNldFN5bURpZmZlcmVuY2VEZXBlbmRlbmNpZXMgPSBzZXRTeW1EaWZmZXJlbmNlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXRVbmlvbkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29uY2F0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29uY2F0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTZXRJbnRlcnNlY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTZXRJbnRlcnNlY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NldFN5bURpZmZlcmVuY2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTZXRTeW1EaWZmZXJlbmNlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaXplID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU2l6ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3Vic2V0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3Vic2V0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNldFVuaW9uRGVwZW5kZW5jaWVzID0ge1xuICBJbmRleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuSW5kZXhEZXBlbmRlbmNpZXMsXG4gIGNvbmNhdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbmNhdC5jb25jYXREZXBlbmRlbmNpZXMsXG4gIHNldEludGVyc2VjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NldEludGVyc2VjdC5zZXRJbnRlcnNlY3REZXBlbmRlbmNpZXMsXG4gIHNldFN5bURpZmZlcmVuY2VEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTZXRTeW1EaWZmZXJlbmNlLnNldFN5bURpZmZlcmVuY2VEZXBlbmRlbmNpZXMsXG4gIHNpemVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTaXplLnNpemVEZXBlbmRlbmNpZXMsXG4gIHN1YnNldERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnNldC5zdWJzZXREZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNldFVuaW9uOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNldFVuaW9uXG59O1xuZXhwb3J0cy5zZXRVbmlvbkRlcGVuZGVuY2llcyA9IHNldFVuaW9uRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zaWduRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGcmFjdGlvbkNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGxleC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzaWduRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIEZyYWN0aW9uRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRnJhY3Rpb25DbGFzcy5GcmFjdGlvbkRlcGVuZGVuY2llcyxcbiAgY29tcGxleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBsZXguY29tcGxleERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU2lnbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVTaWduXG59O1xuZXhwb3J0cy5zaWduRGVwZW5kZW5jaWVzID0gc2lnbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2ltcGxpZnlEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnbnVtYmVyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnbnVtYmVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGcmFjdGlvbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0ZyYWN0aW9uLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb25zdGFudE5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb25zdGFudE5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Z1bmN0aW9uTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Z1bmN0aW9uTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzT3BlcmF0b3JOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzT3BlcmF0b3JOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQYXJlbnRoZXNpc05vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNQYXJlbnRoZXNpc05vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N5bWJvbE5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTeW1ib2xOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNaZXJvID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNaZXJvLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQYXJzZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1BhcnNlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQb3cgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNQb3cuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnRyYWN0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3VidHJhY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc2ltcGxpZnlEZXBlbmRlbmNpZXMgPSB7XG4gIGJpZ251bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ251bWJlci5iaWdudW1iZXJEZXBlbmRlbmNpZXMsXG4gIGZyYWN0aW9uRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRnJhY3Rpb24uZnJhY3Rpb25EZXBlbmRlbmNpZXMsXG4gIENvbnN0YW50Tm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbnN0YW50Tm9kZS5Db25zdGFudE5vZGVEZXBlbmRlbmNpZXMsXG4gIEZ1bmN0aW9uTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0Z1bmN0aW9uTm9kZS5GdW5jdGlvbk5vZGVEZXBlbmRlbmNpZXMsXG4gIE9wZXJhdG9yTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc09wZXJhdG9yTm9kZS5PcGVyYXRvck5vZGVEZXBlbmRlbmNpZXMsXG4gIFBhcmVudGhlc2lzTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1BhcmVudGhlc2lzTm9kZS5QYXJlbnRoZXNpc05vZGVEZXBlbmRlbmNpZXMsXG4gIFN5bWJvbE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTeW1ib2xOb2RlLlN5bWJvbE5vZGVEZXBlbmRlbmNpZXMsXG4gIGFkZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZC5hZGREZXBlbmRlbmNpZXMsXG4gIGRpdmlkZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZS5kaXZpZGVEZXBlbmRlbmNpZXMsXG4gIGVxdWFsRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWwuZXF1YWxEZXBlbmRlbmNpZXMsXG4gIGlzWmVyb0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzWmVyby5pc1plcm9EZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXMsXG4gIHBhcnNlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUGFyc2UucGFyc2VEZXBlbmRlbmNpZXMsXG4gIHBvd0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1Bvdy5wb3dEZXBlbmRlbmNpZXMsXG4gIHN1YnRyYWN0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3VidHJhY3Quc3VidHJhY3REZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNpbXBsaWZ5OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNpbXBsaWZ5XG59O1xuZXhwb3J0cy5zaW1wbGlmeURlcGVuZGVuY2llcyA9IHNpbXBsaWZ5RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zaW5EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzaW5EZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNpbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVTaW5cbn07XG5leHBvcnRzLnNpbkRlcGVuZGVuY2llcyA9IHNpbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2luaERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNpbmhEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNpbmg6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU2luaFxufTtcbmV4cG9ydHMuc2luaERlcGVuZGVuY2llcyA9IHNpbmhEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNpemVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNpemVEZXBlbmRlbmNpZXMgPSB7XG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNpemU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU2l6ZVxufTtcbmV4cG9ydHMuc2l6ZURlcGVuZGVuY2llcyA9IHNpemVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNsdURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBYnMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBYnMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMYXJnZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNMYXJnZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0xhcmdlckVxID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTGFyZ2VyRXEuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnRyYWN0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3VidHJhY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1RyYW5zcG9zZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1RyYW5zcG9zZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzbHVEZXBlbmRlbmNpZXMgPSB7XG4gIFNwYXJzZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzLlNwYXJzZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgYWJzRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWJzLmFic0RlcGVuZGVuY2llcyxcbiAgYWRkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWRkLmFkZERlcGVuZGVuY2llcyxcbiAgZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmRpdmlkZVNjYWxhckRlcGVuZGVuY2llcyxcbiAgbGFyZ2VyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTGFyZ2VyLmxhcmdlckRlcGVuZGVuY2llcyxcbiAgbGFyZ2VyRXFEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNMYXJnZXJFcS5sYXJnZXJFcURlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseS5tdWx0aXBseURlcGVuZGVuY2llcyxcbiAgc3VidHJhY3REZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5zdWJ0cmFjdERlcGVuZGVuY2llcyxcbiAgdHJhbnNwb3NlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHJhbnNwb3NlLnRyYW5zcG9zZURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU2x1OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNsdVxufTtcbmV4cG9ydHMuc2x1RGVwZW5kZW5jaWVzID0gc2x1RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zbWFsbGVyRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc21hbGxlckRlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTbWFsbGVyOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNtYWxsZXJcbn07XG5leHBvcnRzLnNtYWxsZXJEZXBlbmRlbmNpZXMgPSBzbWFsbGVyRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zbWFsbGVyRXFEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzbWFsbGVyRXFEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU21hbGxlckVxOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNtYWxsZXJFcVxufTtcbmV4cG9ydHMuc21hbGxlckVxRGVwZW5kZW5jaWVzID0gc21hbGxlckVxRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zb3J0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBhcmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wYXJlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBhcmVOYXR1cmFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc29ydERlcGVuZGVuY2llcyA9IHtcbiAgY29tcGFyZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBhcmUuY29tcGFyZURlcGVuZGVuY2llcyxcbiAgY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbC5jb21wYXJlTmF0dXJhbERlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU29ydDogX2ZhY3Rvcmllc0FueS5jcmVhdGVTb3J0XG59O1xuZXhwb3J0cy5zb3J0RGVwZW5kZW5jaWVzID0gc29ydERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuU3BhRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZpYm9uYWNjaUhlYXBDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0ZpYm9uYWNjaUhlYXBDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIFNwYURlcGVuZGVuY2llcyA9IHtcbiAgRmlib25hY2NpSGVhcERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0ZpYm9uYWNjaUhlYXBDbGFzcy5GaWJvbmFjY2lIZWFwRGVwZW5kZW5jaWVzLFxuICBhZGRTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuYWRkU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTcGFDbGFzczogX2ZhY3Rvcmllc0FueS5jcmVhdGVTcGFDbGFzc1xufTtcbmV4cG9ydHMuU3BhRGVwZW5kZW5jaWVzID0gU3BhRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zcGFyc2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3BhcnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzcGFyc2VEZXBlbmRlbmNpZXMgPSB7XG4gIFNwYXJzZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzLlNwYXJzZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU3BhcnNlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNwYXJzZVxufTtcbmV4cG9ydHMuc3BhcnNlRGVwZW5kZW5jaWVzID0gc3BhcnNlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5TcGFyc2VNYXRyaXhEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBTcGFyc2VNYXRyaXhEZXBlbmRlbmNpZXMgPSB7XG4gIE1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeENsYXNzLk1hdHJpeERlcGVuZGVuY2llcyxcbiAgZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5lcXVhbFNjYWxhckRlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU3BhcnNlTWF0cml4Q2xhc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU3BhcnNlTWF0cml4Q2xhc3Ncbn07XG5leHBvcnRzLlNwYXJzZU1hdHJpeERlcGVuZGVuY2llcyA9IFNwYXJzZU1hdHJpeERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3BlZWRPZkxpZ2h0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzcGVlZE9mTGlnaHREZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTcGVlZE9mTGlnaHQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU3BlZWRPZkxpZ2h0XG59O1xuZXhwb3J0cy5zcGVlZE9mTGlnaHREZXBlbmRlbmNpZXMgPSBzcGVlZE9mTGlnaHREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNwbGl0VW5pdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNwbGl0VW5pdERlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU3BsaXRVbml0OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNwbGl0VW5pdFxufTtcbmV4cG9ydHMuc3BsaXRVbml0RGVwZW5kZW5jaWVzID0gc3BsaXRVbml0RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zcXJ0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzcXJ0RGVwZW5kZW5jaWVzID0ge1xuICBDb21wbGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLkNvbXBsZXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNxcnQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU3FydFxufTtcbmV4cG9ydHMuc3FydERlcGVuZGVuY2llcyA9IHNxcnREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNxcnRtRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FicyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Ficy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJZGVudGl0eSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lkZW50aXR5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJbnYgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJbnYuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01heCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01heC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2l6ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NpemUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NxcnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTcXJ0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJ0cmFjdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1YnRyYWN0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNxcnRtRGVwZW5kZW5jaWVzID0ge1xuICBhYnNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBYnMuYWJzRGVwZW5kZW5jaWVzLFxuICBhZGREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGQuYWRkRGVwZW5kZW5jaWVzLFxuICBpZGVudGl0eURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lkZW50aXR5LmlkZW50aXR5RGVwZW5kZW5jaWVzLFxuICBpbnZEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJbnYuaW52RGVwZW5kZW5jaWVzLFxuICBtYXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXgubWF4RGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5Lm11bHRpcGx5RGVwZW5kZW5jaWVzLFxuICBzaXplRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU2l6ZS5zaXplRGVwZW5kZW5jaWVzLFxuICBzcXJ0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3FydC5zcXJ0RGVwZW5kZW5jaWVzLFxuICBzdWJ0cmFjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnRyYWN0LnN1YnRyYWN0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTcXJ0bTogX2ZhY3Rvcmllc0FueS5jcmVhdGVTcXJ0bVxufTtcbmV4cG9ydHMuc3FydG1EZXBlbmRlbmNpZXMgPSBzcXJ0bURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3F1YXJlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc3F1YXJlRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTcXVhcmU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU3F1YXJlXG59O1xuZXhwb3J0cy5zcXVhcmVEZXBlbmRlbmNpZXMgPSBzcXVhcmVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNxdWVlemVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNxdWVlemVEZXBlbmRlbmNpZXMgPSB7XG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNxdWVlemU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU3F1ZWV6ZVxufTtcbmV4cG9ydHMuc3F1ZWV6ZURlcGVuZGVuY2llcyA9IHNxdWVlemVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnN0ZERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNTcXJ0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3FydC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVmFyaWFuY2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNWYXJpYW5jZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzdGREZXBlbmRlbmNpZXMgPSB7XG4gIHNxcnREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTcXJ0LnNxcnREZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIHZhcmlhbmNlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVmFyaWFuY2UudmFyaWFuY2VEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVN0ZDogX2ZhY3Rvcmllc0FueS5jcmVhdGVTdGRcbn07XG5leHBvcnRzLnN0ZERlcGVuZGVuY2llcyA9IHN0ZERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3RkVHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1NxcnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTcXJ0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNWYXJpYW5jZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1ZhcmlhbmNlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHN0ZFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHtcbiAgc3FydERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NxcnQuc3FydERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgdmFyaWFuY2VEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNWYXJpYW5jZS52YXJpYW5jZURlcGVuZGVuY2llcyxcbiAgY3JlYXRlU3RkVHJhbnNmb3JtOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVN0ZFRyYW5zZm9ybVxufTtcbmV4cG9ydHMuc3RkVHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gc3RkVHJhbnNmb3JtRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zdGVmYW5Cb2x0em1hbm5EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHN0ZWZhbkJvbHR6bWFubkRlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVN0ZWZhbkJvbHR6bWFubjogX2ZhY3Rvcmllc0FueS5jcmVhdGVTdGVmYW5Cb2x0em1hbm5cbn07XG5leHBvcnRzLnN0ZWZhbkJvbHR6bWFubkRlcGVuZGVuY2llcyA9IHN0ZWZhbkJvbHR6bWFubkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3RpcmxpbmdTMkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbWJpbmF0aW9ucyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbWJpbmF0aW9ucy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGYWN0b3JpYWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGYWN0b3JpYWwuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzSW50ZWdlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzSW50ZWdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNOZWdhdGl2ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzTmVnYXRpdmUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0xhcmdlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0xhcmdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUG93ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUG93LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJ0cmFjdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1YnRyYWN0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHN0aXJsaW5nUzJEZXBlbmRlbmNpZXMgPSB7XG4gIGFkZFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZFNjYWxhci5hZGRTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGNvbWJpbmF0aW9uc0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbWJpbmF0aW9ucy5jb21iaW5hdGlvbnNEZXBlbmRlbmNpZXMsXG4gIGRpdmlkZVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5kaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGZhY3RvcmlhbERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0ZhY3RvcmlhbC5mYWN0b3JpYWxEZXBlbmRlbmNpZXMsXG4gIGlzSW50ZWdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzSW50ZWdlci5pc0ludGVnZXJEZXBlbmRlbmNpZXMsXG4gIGlzTmVnYXRpdmVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc05lZ2F0aXZlLmlzTmVnYXRpdmVEZXBlbmRlbmNpZXMsXG4gIGxhcmdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0xhcmdlci5sYXJnZXJEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIubXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIHBvd0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1Bvdy5wb3dEZXBlbmRlbmNpZXMsXG4gIHN1YnRyYWN0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3VidHJhY3Quc3VidHJhY3REZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVN0aXJsaW5nUzI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU3RpcmxpbmdTMlxufTtcbmV4cG9ydHMuc3RpcmxpbmdTMkRlcGVuZGVuY2llcyA9IHN0aXJsaW5nUzJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnN0cmluZ0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHN0cmluZ0RlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU3RyaW5nOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVN0cmluZ1xufTtcbmV4cG9ydHMuc3RyaW5nRGVwZW5kZW5jaWVzID0gc3RyaW5nRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zdWJzZXREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHN1YnNldERlcGVuZGVuY2llcyA9IHtcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU3Vic2V0OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVN1YnNldFxufTtcbmV4cG9ydHMuc3Vic2V0RGVwZW5kZW5jaWVzID0gc3Vic2V0RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zdWJzZXRUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHN1YnNldFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHtcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU3Vic2V0VHJhbnNmb3JtOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVN1YnNldFRyYW5zZm9ybVxufTtcbmV4cG9ydHMuc3Vic2V0VHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gc3Vic2V0VHJhbnNmb3JtRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zdWJ0cmFjdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuYXJ5TWludXMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHN1YnRyYWN0RGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGFkZFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZFNjYWxhci5hZGRTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIHVuYXJ5TWludXNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzLnVuYXJ5TWludXNEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVN1YnRyYWN0OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVN1YnRyYWN0XG59O1xuZXhwb3J0cy5zdWJ0cmFjdERlcGVuZGVuY2llcyA9IHN1YnRyYWN0RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zdW1EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnbnVtYmVyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnbnVtYmVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGcmFjdGlvbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0ZyYWN0aW9uLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc3VtRGVwZW5kZW5jaWVzID0ge1xuICBiaWdudW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdudW1iZXIuYmlnbnVtYmVyRGVwZW5kZW5jaWVzLFxuICBmcmFjdGlvbkRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0ZyYWN0aW9uLmZyYWN0aW9uRGVwZW5kZW5jaWVzLFxuICBhZGREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGQuYWRkRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTdW06IF9mYWN0b3JpZXNBbnkuY3JlYXRlU3VtXG59O1xuZXhwb3J0cy5zdW1EZXBlbmRlbmNpZXMgPSBzdW1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnN1bVRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdudW1iZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdudW1iZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZyYWN0aW9uID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRnJhY3Rpb24uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzdW1UcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB7XG4gIGJpZ251bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ251bWJlci5iaWdudW1iZXJEZXBlbmRlbmNpZXMsXG4gIGZyYWN0aW9uRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRnJhY3Rpb24uZnJhY3Rpb25EZXBlbmRlbmNpZXMsXG4gIGFkZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZC5hZGREZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVN1bVRyYW5zZm9ybTogX2ZhY3Rvcmllc0FueS5jcmVhdGVTdW1UcmFuc2Zvcm1cbn07XG5leHBvcnRzLnN1bVRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHN1bVRyYW5zZm9ybURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuU3ltYm9sTm9kZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc05vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIFN5bWJvbE5vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc05vZGUuTm9kZURlcGVuZGVuY2llcyxcbiAgY3JlYXRlU3ltYm9sTm9kZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVTeW1ib2xOb2RlXG59O1xuZXhwb3J0cy5TeW1ib2xOb2RlRGVwZW5kZW5jaWVzID0gU3ltYm9sTm9kZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudGFuRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdGFuRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVUYW46IF9mYWN0b3JpZXNBbnkuY3JlYXRlVGFuXG59O1xuZXhwb3J0cy50YW5EZXBlbmRlbmNpZXMgPSB0YW5EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnRhbmhEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciB0YW5oRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVUYW5oOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVRhbmhcbn07XG5leHBvcnRzLnRhbmhEZXBlbmRlbmNpZXMgPSB0YW5oRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy50YXVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciB0YXVEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlVGF1OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVRhdVxufTtcbmV4cG9ydHMudGF1RGVwZW5kZW5jaWVzID0gdGF1RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy50aG9tc29uQ3Jvc3NTZWN0aW9uRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciB0aG9tc29uQ3Jvc3NTZWN0aW9uRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlVGhvbXNvbkNyb3NzU2VjdGlvbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVUaG9tc29uQ3Jvc3NTZWN0aW9uXG59O1xuZXhwb3J0cy50aG9tc29uQ3Jvc3NTZWN0aW9uRGVwZW5kZW5jaWVzID0gdGhvbXNvbkNyb3NzU2VjdGlvbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudG9EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHRvRGVwZW5kZW5jaWVzID0ge1xuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVUbzogX2ZhY3Rvcmllc0FueS5jcmVhdGVUb1xufTtcbmV4cG9ydHMudG9EZXBlbmRlbmNpZXMgPSB0b0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudHJhY2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdHJhY2VEZXBlbmRlbmNpZXMgPSB7XG4gIGFkZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZC5hZGREZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVRyYWNlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVRyYWNlXG59O1xuZXhwb3J0cy50cmFjZURlcGVuZGVuY2llcyA9IHRyYWNlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy50cmFuc3Bvc2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHRyYW5zcG9zZURlcGVuZGVuY2llcyA9IHtcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlVHJhbnNwb3NlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVRyYW5zcG9zZVxufTtcbmV4cG9ydHMudHJhbnNwb3NlRGVwZW5kZW5jaWVzID0gdHJhbnNwb3NlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy50cnVlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdHJ1ZURlcGVuZGVuY2llcyA9IHtcbiAgY3JlYXRlVHJ1ZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVUcnVlXG59O1xuZXhwb3J0cy50cnVlRGVwZW5kZW5jaWVzID0gdHJ1ZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudHlwZU9mRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdHlwZU9mRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVUeXBlT2Y6IF9mYWN0b3JpZXNBbnkuY3JlYXRlVHlwZU9mXG59O1xuZXhwb3J0cy50eXBlT2ZEZXBlbmRlbmNpZXMgPSB0eXBlT2ZEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnR5cGVkRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGcmFjdGlvbkNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHR5cGVkRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBGcmFjdGlvbkRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MuRnJhY3Rpb25EZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVR5cGVkOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVR5cGVkXG59O1xuZXhwb3J0cy50eXBlZERlcGVuZGVuY2llcyA9IHR5cGVkRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy51bmFyeU1pbnVzRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdW5hcnlNaW51c0RlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlVW5hcnlNaW51czogX2ZhY3Rvcmllc0FueS5jcmVhdGVVbmFyeU1pbnVzXG59O1xuZXhwb3J0cy51bmFyeU1pbnVzRGVwZW5kZW5jaWVzID0gdW5hcnlNaW51c0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudW5hcnlQbHVzRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdW5hcnlQbHVzRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVVuYXJ5UGx1czogX2ZhY3Rvcmllc0FueS5jcmVhdGVVbmFyeVBsdXNcbn07XG5leHBvcnRzLnVuYXJ5UGx1c0RlcGVuZGVuY2llcyA9IHVuYXJ5UGx1c0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudW5lcXVhbERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHVuZXF1YWxEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5lcXVhbFNjYWxhckRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlVW5lcXVhbDogX2ZhY3Rvcmllc0FueS5jcmVhdGVVbmVxdWFsXG59O1xuZXhwb3J0cy51bmVxdWFsRGVwZW5kZW5jaWVzID0gdW5lcXVhbERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuVW5pdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGcmFjdGlvbkNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBYnMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBYnMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Zvcm1hdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Zvcm1hdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNOdW1lcmljID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNOdW1lcmljLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNOdW1iZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNOdW1iZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BvdyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1Bvdy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUm91bmQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNSb3VuZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3VidHJhY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBVbml0RGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgRnJhY3Rpb25EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGcmFjdGlvbkNsYXNzLkZyYWN0aW9uRGVwZW5kZW5jaWVzLFxuICBhYnNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBYnMuYWJzRGVwZW5kZW5jaWVzLFxuICBhZGRTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuYWRkU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBkaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBlcXVhbERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsLmVxdWFsRGVwZW5kZW5jaWVzLFxuICBmaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGaXguZml4RGVwZW5kZW5jaWVzLFxuICBmb3JtYXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGb3JtYXQuZm9ybWF0RGVwZW5kZW5jaWVzLFxuICBpc051bWVyaWNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc051bWVyaWMuaXNOdW1lcmljRGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLm11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzLFxuICBudW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOdW1iZXIubnVtYmVyRGVwZW5kZW5jaWVzLFxuICBwb3dEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNQb3cucG93RGVwZW5kZW5jaWVzLFxuICByb3VuZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1JvdW5kLnJvdW5kRGVwZW5kZW5jaWVzLFxuICBzdWJ0cmFjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnRyYWN0LnN1YnRyYWN0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVVbml0Q2xhc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlVW5pdENsYXNzXG59O1xuZXhwb3J0cy5Vbml0RGVwZW5kZW5jaWVzID0gVW5pdERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudW5pdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdW5pdERlcGVuZGVuY2llcyA9IHtcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVVbml0RnVuY3Rpb246IF9mYWN0b3JpZXNBbnkuY3JlYXRlVW5pdEZ1bmN0aW9uXG59O1xuZXhwb3J0cy51bml0RGVwZW5kZW5jaWVzID0gdW5pdERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuRURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNFID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBFRGVwZW5kZW5jaWVzID0ge1xuICBlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRS5lRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVVcHBlcmNhc2VFOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVVwcGVyY2FzZUVcbn07XG5leHBvcnRzLkVEZXBlbmRlbmNpZXMgPSBFRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5QSURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNQaSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1BpLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIFBJRGVwZW5kZW5jaWVzID0ge1xuICBwaURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1BpLnBpRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVVcHBlcmNhc2VQaTogX2ZhY3Rvcmllc0FueS5jcmVhdGVVcHBlcmNhc2VQaVxufTtcbmV4cG9ydHMuUElEZXBlbmRlbmNpZXMgPSBQSURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudXNvbHZlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3VidHJhY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciB1c29sdmVEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmRpdmlkZVNjYWxhckRlcGVuZGVuY2llcyxcbiAgZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5lcXVhbFNjYWxhckRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5tdWx0aXBseVNjYWxhckRlcGVuZGVuY2llcyxcbiAgc3VidHJhY3REZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5zdWJ0cmFjdERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlVXNvbHZlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVVzb2x2ZVxufTtcbmV4cG9ydHMudXNvbHZlRGVwZW5kZW5jaWVzID0gdXNvbHZlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy52YWN1dW1JbXBlZGFuY2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHZhY3V1bUltcGVkYW5jZURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVZhY3V1bUltcGVkYW5jZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVWYWN1dW1JbXBlZGFuY2Vcbn07XG5leHBvcnRzLnZhY3V1bUltcGVkYW5jZURlcGVuZGVuY2llcyA9IHZhY3V1bUltcGVkYW5jZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudmFyaWFuY2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBcHBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FwcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEaXZpZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEaXZpZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzTmFOID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNOYU4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnRyYWN0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3VidHJhY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdmFyaWFuY2VEZXBlbmRlbmNpZXMgPSB7XG4gIGFkZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZC5hZGREZXBlbmRlbmNpZXMsXG4gIGFwcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQXBwbHkuYXBwbHlEZXBlbmRlbmNpZXMsXG4gIGRpdmlkZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZS5kaXZpZGVEZXBlbmRlbmNpZXMsXG4gIGlzTmFORGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSXNOYU4uaXNOYU5EZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXMsXG4gIHN1YnRyYWN0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3VidHJhY3Quc3VidHJhY3REZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVZhcmlhbmNlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVZhcmlhbmNlXG59O1xuZXhwb3J0cy52YXJpYW5jZURlcGVuZGVuY2llcyA9IHZhcmlhbmNlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy52YXJpYW5jZVRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FwcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQXBwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNOYU4gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc05hTi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3VidHJhY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciB2YXJpYW5jZVRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHtcbiAgYWRkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWRkLmFkZERlcGVuZGVuY2llcyxcbiAgYXBwbHlEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBcHBseS5hcHBseURlcGVuZGVuY2llcyxcbiAgZGl2aWRlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlLmRpdmlkZURlcGVuZGVuY2llcyxcbiAgaXNOYU5EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc05hTi5pc05hTkRlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseS5tdWx0aXBseURlcGVuZGVuY2llcyxcbiAgc3VidHJhY3REZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5zdWJ0cmFjdERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlVmFyaWFuY2VUcmFuc2Zvcm06IF9mYWN0b3JpZXNBbnkuY3JlYXRlVmFyaWFuY2VUcmFuc2Zvcm1cbn07XG5leHBvcnRzLnZhcmlhbmNlVHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gdmFyaWFuY2VUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnZlcnNpb25EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciB2ZXJzaW9uRGVwZW5kZW5jaWVzID0ge1xuICBjcmVhdGVWZXJzaW9uOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVZlcnNpb25cbn07XG5leHBvcnRzLnZlcnNpb25EZXBlbmRlbmNpZXMgPSB2ZXJzaW9uRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy53ZWFrTWl4aW5nQW5nbGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciB3ZWFrTWl4aW5nQW5nbGVEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlV2Vha01peGluZ0FuZ2xlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVdlYWtNaXhpbmdBbmdsZVxufTtcbmV4cG9ydHMud2Vha01peGluZ0FuZ2xlRGVwZW5kZW5jaWVzID0gd2Vha01peGluZ0FuZ2xlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy53aWVuRGlzcGxhY2VtZW50RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciB3aWVuRGlzcGxhY2VtZW50RGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlV2llbkRpc3BsYWNlbWVudDogX2ZhY3Rvcmllc0FueS5jcmVhdGVXaWVuRGlzcGxhY2VtZW50XG59O1xuZXhwb3J0cy53aWVuRGlzcGxhY2VtZW50RGVwZW5kZW5jaWVzID0gd2llbkRpc3BsYWNlbWVudERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMueGdjZERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgeGdjZERlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVYZ2NkOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVhnY2Rcbn07XG5leHBvcnRzLnhnY2REZXBlbmRlbmNpZXMgPSB4Z2NkRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy54b3JEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciB4b3JEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlWG9yOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVhvclxufTtcbmV4cG9ydHMueG9yRGVwZW5kZW5jaWVzID0geG9yRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy56ZXJvc0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgemVyb3NEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlWmVyb3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlWmVyb3Ncbn07XG5leHBvcnRzLnplcm9zRGVwZW5kZW5jaWVzID0gemVyb3NEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmVycm9yID0gZXhwb3J0cy5qc29uID0gZXhwb3J0cy5leHByZXNzaW9uID0gZXhwb3J0cy50eXBlID0gZXhwb3J0cy5kZXByZWNhdGVkVHlwZW9mID0gZXhwb3J0cy5kZXByZWNhdGVkVmFyID0gZXhwb3J0cy5kZXByZWNhdGVkSW1wb3J0ID0gZXhwb3J0cy5kZXByZWNhdGVkRXZhbCA9IHZvaWQgMDtcblxudmFyIF9ldmFsID0gcmVxdWlyZShcIi4uL2V4cHJlc3Npb24vZnVuY3Rpb24vZXZhbFwiKTtcblxudmFyIF9kZXByZWNhdGVkSW1wb3J0ID0gcmVxdWlyZShcIi4uL2NvcmUvZnVuY3Rpb24vZGVwcmVjYXRlZEltcG9ydFwiKTtcblxudmFyIF92YXJpYW5jZSA9IHJlcXVpcmUoXCIuLi9mdW5jdGlvbi9zdGF0aXN0aWNzL3ZhcmlhbmNlXCIpO1xuXG52YXIgX3R5cGVPZiA9IHJlcXVpcmUoXCIuLi9mdW5jdGlvbi91dGlscy90eXBlT2ZcIik7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfQXJndW1lbnRzRXJyb3IgPSByZXF1aXJlKFwiLi4vZXJyb3IvQXJndW1lbnRzRXJyb3JcIik7XG5cbnZhciBfRGltZW5zaW9uRXJyb3IgPSByZXF1aXJlKFwiLi4vZXJyb3IvRGltZW5zaW9uRXJyb3JcIik7XG5cbnZhciBfSW5kZXhFcnJvciA9IHJlcXVpcmUoXCIuLi9lcnJvci9JbmRleEVycm9yXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfbG9nID0gcmVxdWlyZShcIi4uL3V0aWxzL2xvZ1wiKTtcblxudmFyIF9wdXJlRnVuY3Rpb25zQW55ID0gcmVxdWlyZShcIi4vcHVyZUZ1bmN0aW9uc0FueS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfaW1wdXJlRnVuY3Rpb25zQW55ID0gcmVxdWlyZShcIi4vaW1wdXJlRnVuY3Rpb25zQW55LmdlbmVyYXRlZFwiKTtcblxuLy8gVE9ETzogZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDYuMC4wLiBEYXRlOiAyMDE5LTA0LTE0XG4vLyBcImRlcHJlY2F0ZWRFdmFsXCIgaXMgYWxzbyBleHBvc2VkIGFzIFwiZXZhbFwiIGluIHRoZSBjb2RlIGNvbXBpbGVkIHRvIEVTNStDb21tb25Kc1xudmFyIGRlcHJlY2F0ZWRFdmFsID0gLyogI19fUFVSRV9fICovKDAsIF9ldmFsLmNyZWF0ZURlcHJlY2F0ZWRFdmFsKSh7XG4gIGV2YWx1YXRlOiBfaW1wdXJlRnVuY3Rpb25zQW55LmV2YWx1YXRlXG59KTsgLy8gXCJkZXByZWNhdGVkSW1wb3J0XCIgaXMgYWxzbyBleHBvc2VkIGFzIFwiaW1wb3J0XCIgaW4gdGhlIGNvZGUgY29tcGlsZWQgdG8gRVM1K0NvbW1vbkpzXG5cbmV4cG9ydHMuZGVwcmVjYXRlZEV2YWwgPSBkZXByZWNhdGVkRXZhbDtcbnZhciBkZXByZWNhdGVkSW1wb3J0ID0gLyogI19fUFVSRV9fICovKDAsIF9kZXByZWNhdGVkSW1wb3J0LmNyZWF0ZURlcHJlY2F0ZWRJbXBvcnQpKHt9KTsgLy8gXCJkZXByZWNhdGVkVmFyXCIgaXMgYWxzbyBleHBvc2VkIGFzIFwidmFyXCIgaW4gdGhlIGNvZGUgY29tcGlsZWQgdG8gRVM1K0NvbW1vbkpzXG5cbmV4cG9ydHMuZGVwcmVjYXRlZEltcG9ydCA9IGRlcHJlY2F0ZWRJbXBvcnQ7XG52YXIgZGVwcmVjYXRlZFZhciA9IC8qICNfX1BVUkVfXyAqLygwLCBfdmFyaWFuY2UuY3JlYXRlRGVwcmVjYXRlZFZhcikoe1xuICB2YXJpYW5jZTogX3B1cmVGdW5jdGlvbnNBbnkudmFyaWFuY2Vcbn0pOyAvLyBcImRlcHJlY2F0ZWRUeXBlb2ZcIiBpcyBhbHNvIGV4cG9zZWQgYXMgXCJ0eXBlb2ZcIiBpbiB0aGUgY29kZSBjb21waWxlZCB0byBFUzUrQ29tbW9uSnNcblxuZXhwb3J0cy5kZXByZWNhdGVkVmFyID0gZGVwcmVjYXRlZFZhcjtcbnZhciBkZXByZWNhdGVkVHlwZW9mID0gLyogI19fUFVSRV9fICovKDAsIF90eXBlT2YuY3JlYXRlRGVwcmVjYXRlZFR5cGVvZikoe1xuICB0eXBlT2Y6IF9wdXJlRnVuY3Rpb25zQW55LnR5cGVPZlxufSk7XG5leHBvcnRzLmRlcHJlY2F0ZWRUeXBlb2YgPSBkZXByZWNhdGVkVHlwZW9mO1xudmFyIHR5cGUgPSAvKiAjX19QVVJFX18gKi9jcmVhdGVEZXByZWNhdGVkUHJvcGVydGllcygndHlwZScsIHtcbiAgaXNOdW1iZXI6IF9pcy5pc051bWJlcixcbiAgaXNDb21wbGV4OiBfaXMuaXNDb21wbGV4LFxuICBpc0JpZ051bWJlcjogX2lzLmlzQmlnTnVtYmVyLFxuICBpc0ZyYWN0aW9uOiBfaXMuaXNGcmFjdGlvbixcbiAgaXNVbml0OiBfaXMuaXNVbml0LFxuICBpc1N0cmluZzogX2lzLmlzU3RyaW5nLFxuICBpc0FycmF5OiBfaXMuaXNBcnJheSxcbiAgaXNNYXRyaXg6IF9pcy5pc01hdHJpeCxcbiAgaXNDb2xsZWN0aW9uOiBfaXMuaXNDb2xsZWN0aW9uLFxuICBpc0RlbnNlTWF0cml4OiBfaXMuaXNEZW5zZU1hdHJpeCxcbiAgaXNTcGFyc2VNYXRyaXg6IF9pcy5pc1NwYXJzZU1hdHJpeCxcbiAgaXNSYW5nZTogX2lzLmlzUmFuZ2UsXG4gIGlzSW5kZXg6IF9pcy5pc0luZGV4LFxuICBpc0Jvb2xlYW46IF9pcy5pc0Jvb2xlYW4sXG4gIGlzUmVzdWx0U2V0OiBfaXMuaXNSZXN1bHRTZXQsXG4gIGlzSGVscDogX2lzLmlzSGVscCxcbiAgaXNGdW5jdGlvbjogX2lzLmlzRnVuY3Rpb24sXG4gIGlzRGF0ZTogX2lzLmlzRGF0ZSxcbiAgaXNSZWdFeHA6IF9pcy5pc1JlZ0V4cCxcbiAgaXNPYmplY3Q6IF9pcy5pc09iamVjdCxcbiAgaXNOdWxsOiBfaXMuaXNOdWxsLFxuICBpc1VuZGVmaW5lZDogX2lzLmlzVW5kZWZpbmVkLFxuICBpc0FjY2Vzc29yTm9kZTogX2lzLmlzQWNjZXNzb3JOb2RlLFxuICBpc0FycmF5Tm9kZTogX2lzLmlzQXJyYXlOb2RlLFxuICBpc0Fzc2lnbm1lbnROb2RlOiBfaXMuaXNBc3NpZ25tZW50Tm9kZSxcbiAgaXNCbG9ja05vZGU6IF9pcy5pc0Jsb2NrTm9kZSxcbiAgaXNDb25kaXRpb25hbE5vZGU6IF9pcy5pc0NvbmRpdGlvbmFsTm9kZSxcbiAgaXNDb25zdGFudE5vZGU6IF9pcy5pc0NvbnN0YW50Tm9kZSxcbiAgaXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlOiBfaXMuaXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlLFxuICBpc0Z1bmN0aW9uTm9kZTogX2lzLmlzRnVuY3Rpb25Ob2RlLFxuICBpc0luZGV4Tm9kZTogX2lzLmlzSW5kZXhOb2RlLFxuICBpc05vZGU6IF9pcy5pc05vZGUsXG4gIGlzT2JqZWN0Tm9kZTogX2lzLmlzT2JqZWN0Tm9kZSxcbiAgaXNPcGVyYXRvck5vZGU6IF9pcy5pc09wZXJhdG9yTm9kZSxcbiAgaXNQYXJlbnRoZXNpc05vZGU6IF9pcy5pc1BhcmVudGhlc2lzTm9kZSxcbiAgaXNSYW5nZU5vZGU6IF9pcy5pc1JhbmdlTm9kZSxcbiAgaXNTeW1ib2xOb2RlOiBfaXMuaXNTeW1ib2xOb2RlLFxuICBpc0NoYWluOiBfaXMuaXNDaGFpbixcbiAgQmlnTnVtYmVyOiBfcHVyZUZ1bmN0aW9uc0FueS5CaWdOdW1iZXIsXG4gIENoYWluOiBfaW1wdXJlRnVuY3Rpb25zQW55LkNoYWluLFxuICBDb21wbGV4OiBfcHVyZUZ1bmN0aW9uc0FueS5Db21wbGV4LFxuICBGcmFjdGlvbjogX3B1cmVGdW5jdGlvbnNBbnkuRnJhY3Rpb24sXG4gIE1hdHJpeDogX3B1cmVGdW5jdGlvbnNBbnkuTWF0cml4LFxuICBEZW5zZU1hdHJpeDogX3B1cmVGdW5jdGlvbnNBbnkuRGVuc2VNYXRyaXgsXG4gIFNwYXJzZU1hdHJpeDogX3B1cmVGdW5jdGlvbnNBbnkuU3BhcnNlTWF0cml4LFxuICBTcGE6IF9wdXJlRnVuY3Rpb25zQW55LlNwYSxcbiAgRmlib25hY2NpSGVhcDogX3B1cmVGdW5jdGlvbnNBbnkuRmlib25hY2NpSGVhcCxcbiAgSW1tdXRhYmxlRGVuc2VNYXRyaXg6IF9wdXJlRnVuY3Rpb25zQW55LkltbXV0YWJsZURlbnNlTWF0cml4LFxuICBJbmRleDogX3B1cmVGdW5jdGlvbnNBbnkuSW5kZXgsXG4gIFJhbmdlOiBfcHVyZUZ1bmN0aW9uc0FueS5SYW5nZSxcbiAgUmVzdWx0U2V0OiBfcHVyZUZ1bmN0aW9uc0FueS5SZXN1bHRTZXQsXG4gIFVuaXQ6IF9wdXJlRnVuY3Rpb25zQW55LlVuaXQsXG4gIEhlbHA6IF9pbXB1cmVGdW5jdGlvbnNBbnkuSGVscCxcbiAgUGFyc2VyOiBfaW1wdXJlRnVuY3Rpb25zQW55LlBhcnNlclxufSk7XG5leHBvcnRzLnR5cGUgPSB0eXBlO1xudmFyIGV4cHJlc3Npb24gPSAvKiAjX19QVVJFX18gKi9jcmVhdGVEZXByZWNhdGVkUHJvcGVydGllcygnZXhwcmVzc2lvbicsIHtcbiAgcGFyc2U6IF9pbXB1cmVGdW5jdGlvbnNBbnkucGFyc2UsXG4gIFBhcnNlcjogX2ltcHVyZUZ1bmN0aW9uc0FueS5QYXJzZXIsXG4gIG5vZGU6IGNyZWF0ZURlcHJlY2F0ZWRQcm9wZXJ0aWVzKCdleHByZXNzaW9uLm5vZGUnLCB7XG4gICAgQWNjZXNzb3JOb2RlOiBfaW1wdXJlRnVuY3Rpb25zQW55LkFjY2Vzc29yTm9kZSxcbiAgICBBcnJheU5vZGU6IF9pbXB1cmVGdW5jdGlvbnNBbnkuQXJyYXlOb2RlLFxuICAgIEFzc2lnbm1lbnROb2RlOiBfaW1wdXJlRnVuY3Rpb25zQW55LkFzc2lnbm1lbnROb2RlLFxuICAgIEJsb2NrTm9kZTogX2ltcHVyZUZ1bmN0aW9uc0FueS5CbG9ja05vZGUsXG4gICAgQ29uZGl0aW9uYWxOb2RlOiBfaW1wdXJlRnVuY3Rpb25zQW55LkNvbmRpdGlvbmFsTm9kZSxcbiAgICBDb25zdGFudE5vZGU6IF9pbXB1cmVGdW5jdGlvbnNBbnkuQ29uc3RhbnROb2RlLFxuICAgIEluZGV4Tm9kZTogX2ltcHVyZUZ1bmN0aW9uc0FueS5JbmRleE5vZGUsXG4gICAgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZTogX2ltcHVyZUZ1bmN0aW9uc0FueS5GdW5jdGlvbkFzc2lnbm1lbnROb2RlLFxuICAgIEZ1bmN0aW9uTm9kZTogX2ltcHVyZUZ1bmN0aW9uc0FueS5GdW5jdGlvbk5vZGUsXG4gICAgTm9kZTogX2ltcHVyZUZ1bmN0aW9uc0FueS5Ob2RlLFxuICAgIE9iamVjdE5vZGU6IF9pbXB1cmVGdW5jdGlvbnNBbnkuT2JqZWN0Tm9kZSxcbiAgICBPcGVyYXRvck5vZGU6IF9pbXB1cmVGdW5jdGlvbnNBbnkuT3BlcmF0b3JOb2RlLFxuICAgIFBhcmVudGhlc2lzTm9kZTogX2ltcHVyZUZ1bmN0aW9uc0FueS5QYXJlbnRoZXNpc05vZGUsXG4gICAgUmFuZ2VOb2RlOiBfaW1wdXJlRnVuY3Rpb25zQW55LlJhbmdlTm9kZSxcbiAgICBSZWxhdGlvbmFsTm9kZTogX2ltcHVyZUZ1bmN0aW9uc0FueS5SZWxhdGlvbmFsTm9kZSxcbiAgICBTeW1ib2xOb2RlOiBfaW1wdXJlRnVuY3Rpb25zQW55LlN5bWJvbE5vZGVcbiAgfSlcbn0pO1xuZXhwb3J0cy5leHByZXNzaW9uID0gZXhwcmVzc2lvbjtcbnZhciBqc29uID0gLyogI19fUFVSRV9fICovY3JlYXRlRGVwcmVjYXRlZFByb3BlcnRpZXMoJ2pzb24nLCB7XG4gIHJldml2ZXI6IF9pbXB1cmVGdW5jdGlvbnNBbnkucmV2aXZlclxufSk7XG5leHBvcnRzLmpzb24gPSBqc29uO1xudmFyIGVycm9yID0gLyogI19fUFVSRV9fICovY3JlYXRlRGVwcmVjYXRlZFByb3BlcnRpZXMoJ2Vycm9yJywge1xuICBBcmd1bWVudHNFcnJvcjogX0FyZ3VtZW50c0Vycm9yLkFyZ3VtZW50c0Vycm9yLFxuICBEaW1lbnNpb25FcnJvcjogX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yLFxuICBJbmRleEVycm9yOiBfSW5kZXhFcnJvci5JbmRleEVycm9yXG59KTtcbmV4cG9ydHMuZXJyb3IgPSBlcnJvcjtcblxuZnVuY3Rpb24gY3JlYXRlRGVwcmVjYXRlZFByb3BlcnRpZXMocGF0aCwgcHJvcHMpIHtcbiAgdmFyIG9iaiA9IHt9O1xuICBPYmplY3Qua2V5cyhwcm9wcykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICgwLCBfb2JqZWN0LmxhenkpKG9iaiwgbmFtZSwgZnVuY3Rpb24gKCkge1xuICAgICAgKDAsIF9sb2cud2Fybk9uY2UpKFwibWF0aC5cIi5jb25jYXQocGF0aCwgXCIuXCIpLmNvbmNhdChuYW1lLCBcIiBpcyBtb3ZlZCB0byBtYXRoLlwiKS5jb25jYXQobmFtZSwgXCIgaW4gdjYuMC4wLiBcIikgKyAnUGxlYXNlIHVzZSB0aGUgbmV3IGxvY2F0aW9uIGluc3RlYWQuJyk7XG4gICAgICByZXR1cm4gcHJvcHNbbmFtZV07XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gb2JqO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZG9jc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZW1iZWRkZWREb2NzLmVtYmVkZGVkRG9jcztcbiAgfVxufSk7XG5leHBvcnRzLmRlcml2YXRpdmUgPSBleHBvcnRzLmhlbHAgPSBleHBvcnRzLnJhdGlvbmFsaXplID0gZXhwb3J0cy5zaW1wbGlmeSA9IGV4cG9ydHMucGFyc2VyID0gZXhwb3J0cy5jb21waWxlID0gZXhwb3J0cy5IZWxwID0gZXhwb3J0cy5QYXJzZXIgPSBleHBvcnRzLmV2YWx1YXRlID0gZXhwb3J0cy5wYXJzZSA9IGV4cG9ydHMuRnVuY3Rpb25Ob2RlID0gZXhwb3J0cy5TeW1ib2xOb2RlID0gZXhwb3J0cy5Bc3NpZ25tZW50Tm9kZSA9IGV4cG9ydHMuSW5kZXhOb2RlID0gZXhwb3J0cy5BY2Nlc3Nvck5vZGUgPSBleHBvcnRzLmNoYWluID0gZXhwb3J0cy5GdW5jdGlvbkFzc2lnbm1lbnROb2RlID0gZXhwb3J0cy5SYW5nZU5vZGUgPSBleHBvcnRzLk9wZXJhdG9yTm9kZSA9IGV4cG9ydHMuQ29uZGl0aW9uYWxOb2RlID0gZXhwb3J0cy5yZXZpdmVyID0gZXhwb3J0cy5DaGFpbiA9IGV4cG9ydHMuUmVsYXRpb25hbE5vZGUgPSBleHBvcnRzLlBhcmVudGhlc2lzTm9kZSA9IGV4cG9ydHMuT2JqZWN0Tm9kZSA9IGV4cG9ydHMuQ29uc3RhbnROb2RlID0gZXhwb3J0cy5CbG9ja05vZGUgPSBleHBvcnRzLkFycmF5Tm9kZSA9IGV4cG9ydHMuTm9kZSA9IHZvaWQgMDtcblxudmFyIF9jb25maWdSZWFkb25seSA9IHJlcXVpcmUoXCIuL2NvbmZpZ1JlYWRvbmx5XCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi9mYWN0b3JpZXNBbnlcIik7XG5cbnZhciBfcHVyZUZ1bmN0aW9uc0FueSA9IHJlcXVpcmUoXCIuL3B1cmVGdW5jdGlvbnNBbnkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2VtYmVkZGVkRG9jcyA9IHJlcXVpcmUoXCIuLi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9lbWJlZGRlZERvY3NcIik7XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbnZhciBtYXRoID0ge307IC8vIE5PVCBwdXJlIVxuXG52YXIgbWF0aFdpdGhUcmFuc2Zvcm0gPSB7fTsgLy8gTk9UIHB1cmUhXG5cbnZhciBjbGFzc2VzID0ge307IC8vIE5PVCBwdXJlIVxuXG52YXIgTm9kZSA9ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU5vZGUpKHtcbiAgbWF0aFdpdGhUcmFuc2Zvcm06IG1hdGhXaXRoVHJhbnNmb3JtXG59KTtcbmV4cG9ydHMuTm9kZSA9IE5vZGU7XG52YXIgQXJyYXlOb2RlID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQXJyYXlOb2RlKSh7XG4gIE5vZGU6IE5vZGVcbn0pO1xuZXhwb3J0cy5BcnJheU5vZGUgPSBBcnJheU5vZGU7XG52YXIgQmxvY2tOb2RlID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQmxvY2tOb2RlKSh7XG4gIE5vZGU6IE5vZGUsXG4gIFJlc3VsdFNldDogX3B1cmVGdW5jdGlvbnNBbnkuUmVzdWx0U2V0XG59KTtcbmV4cG9ydHMuQmxvY2tOb2RlID0gQmxvY2tOb2RlO1xudmFyIENvbnN0YW50Tm9kZSA9ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbnN0YW50Tm9kZSkoe1xuICBOb2RlOiBOb2RlXG59KTtcbmV4cG9ydHMuQ29uc3RhbnROb2RlID0gQ29uc3RhbnROb2RlO1xudmFyIE9iamVjdE5vZGUgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVPYmplY3ROb2RlKSh7XG4gIE5vZGU6IE5vZGVcbn0pO1xuZXhwb3J0cy5PYmplY3ROb2RlID0gT2JqZWN0Tm9kZTtcbnZhciBQYXJlbnRoZXNpc05vZGUgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVQYXJlbnRoZXNpc05vZGUpKHtcbiAgTm9kZTogTm9kZVxufSk7XG5leHBvcnRzLlBhcmVudGhlc2lzTm9kZSA9IFBhcmVudGhlc2lzTm9kZTtcbnZhciBSZWxhdGlvbmFsTm9kZSA9ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVJlbGF0aW9uYWxOb2RlKSh7XG4gIE5vZGU6IE5vZGVcbn0pO1xuZXhwb3J0cy5SZWxhdGlvbmFsTm9kZSA9IFJlbGF0aW9uYWxOb2RlO1xudmFyIENoYWluID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ2hhaW5DbGFzcykoe1xuICBtYXRoOiBtYXRoXG59KTtcbmV4cG9ydHMuQ2hhaW4gPSBDaGFpbjtcbnZhciByZXZpdmVyID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUmV2aXZlcikoe1xuICBjbGFzc2VzOiBjbGFzc2VzXG59KTtcbmV4cG9ydHMucmV2aXZlciA9IHJldml2ZXI7XG52YXIgQ29uZGl0aW9uYWxOb2RlID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29uZGl0aW9uYWxOb2RlKSh7XG4gIE5vZGU6IE5vZGVcbn0pO1xuZXhwb3J0cy5Db25kaXRpb25hbE5vZGUgPSBDb25kaXRpb25hbE5vZGU7XG52YXIgT3BlcmF0b3JOb2RlID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlT3BlcmF0b3JOb2RlKSh7XG4gIE5vZGU6IE5vZGVcbn0pO1xuZXhwb3J0cy5PcGVyYXRvck5vZGUgPSBPcGVyYXRvck5vZGU7XG52YXIgUmFuZ2VOb2RlID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUmFuZ2VOb2RlKSh7XG4gIE5vZGU6IE5vZGVcbn0pO1xuZXhwb3J0cy5SYW5nZU5vZGUgPSBSYW5nZU5vZGU7XG52YXIgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSA9ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUZ1bmN0aW9uQXNzaWdubWVudE5vZGUpKHtcbiAgTm9kZTogTm9kZSxcbiAgdHlwZWQ6IF9wdXJlRnVuY3Rpb25zQW55LnR5cGVkXG59KTtcbmV4cG9ydHMuRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSA9IEZ1bmN0aW9uQXNzaWdubWVudE5vZGU7XG52YXIgY2hhaW4gPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDaGFpbikoe1xuICBDaGFpbjogQ2hhaW4sXG4gIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxufSk7XG5leHBvcnRzLmNoYWluID0gY2hhaW47XG52YXIgQWNjZXNzb3JOb2RlID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQWNjZXNzb3JOb2RlKSh7XG4gIE5vZGU6IE5vZGUsXG4gIHN1YnNldDogX3B1cmVGdW5jdGlvbnNBbnkuc3Vic2V0XG59KTtcbmV4cG9ydHMuQWNjZXNzb3JOb2RlID0gQWNjZXNzb3JOb2RlO1xudmFyIEluZGV4Tm9kZSA9ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUluZGV4Tm9kZSkoe1xuICBOb2RlOiBOb2RlLFxuICBSYW5nZTogX3B1cmVGdW5jdGlvbnNBbnkuUmFuZ2UsXG4gIHNpemU6IF9wdXJlRnVuY3Rpb25zQW55LnNpemVcbn0pO1xuZXhwb3J0cy5JbmRleE5vZGUgPSBJbmRleE5vZGU7XG52YXIgQXNzaWdubWVudE5vZGUgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVBc3NpZ25tZW50Tm9kZSkoe1xuICBtYXRyaXg6IF9wdXJlRnVuY3Rpb25zQW55Lm1hdHJpeCxcbiAgTm9kZTogTm9kZSxcbiAgc3Vic2V0OiBfcHVyZUZ1bmN0aW9uc0FueS5zdWJzZXRcbn0pO1xuZXhwb3J0cy5Bc3NpZ25tZW50Tm9kZSA9IEFzc2lnbm1lbnROb2RlO1xudmFyIFN5bWJvbE5vZGUgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTeW1ib2xOb2RlKSh7XG4gIFVuaXQ6IF9wdXJlRnVuY3Rpb25zQW55LlVuaXQsXG4gIE5vZGU6IE5vZGUsXG4gIG1hdGg6IG1hdGhcbn0pO1xuZXhwb3J0cy5TeW1ib2xOb2RlID0gU3ltYm9sTm9kZTtcbnZhciBGdW5jdGlvbk5vZGUgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVGdW5jdGlvbk5vZGUpKHtcbiAgTm9kZTogTm9kZSxcbiAgU3ltYm9sTm9kZTogU3ltYm9sTm9kZSxcbiAgbWF0aDogbWF0aFxufSk7XG5leHBvcnRzLkZ1bmN0aW9uTm9kZSA9IEZ1bmN0aW9uTm9kZTtcbnZhciBwYXJzZSA9ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVBhcnNlKSh7XG4gIEFjY2Vzc29yTm9kZTogQWNjZXNzb3JOb2RlLFxuICBBcnJheU5vZGU6IEFycmF5Tm9kZSxcbiAgQXNzaWdubWVudE5vZGU6IEFzc2lnbm1lbnROb2RlLFxuICBCbG9ja05vZGU6IEJsb2NrTm9kZSxcbiAgQ29uZGl0aW9uYWxOb2RlOiBDb25kaXRpb25hbE5vZGUsXG4gIENvbnN0YW50Tm9kZTogQ29uc3RhbnROb2RlLFxuICBGdW5jdGlvbkFzc2lnbm1lbnROb2RlOiBGdW5jdGlvbkFzc2lnbm1lbnROb2RlLFxuICBGdW5jdGlvbk5vZGU6IEZ1bmN0aW9uTm9kZSxcbiAgSW5kZXhOb2RlOiBJbmRleE5vZGUsXG4gIE9iamVjdE5vZGU6IE9iamVjdE5vZGUsXG4gIE9wZXJhdG9yTm9kZTogT3BlcmF0b3JOb2RlLFxuICBQYXJlbnRoZXNpc05vZGU6IFBhcmVudGhlc2lzTm9kZSxcbiAgUmFuZ2VOb2RlOiBSYW5nZU5vZGUsXG4gIFJlbGF0aW9uYWxOb2RlOiBSZWxhdGlvbmFsTm9kZSxcbiAgU3ltYm9sTm9kZTogU3ltYm9sTm9kZSxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICBudW1lcmljOiBfcHVyZUZ1bmN0aW9uc0FueS5udW1lcmljLFxuICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbn0pO1xuZXhwb3J0cy5wYXJzZSA9IHBhcnNlO1xudmFyIGV2YWx1YXRlID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRXZhbHVhdGUpKHtcbiAgcGFyc2U6IHBhcnNlLFxuICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbn0pO1xuZXhwb3J0cy5ldmFsdWF0ZSA9IGV2YWx1YXRlO1xudmFyIFBhcnNlciA9ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVBhcnNlckNsYXNzKSh7XG4gIHBhcnNlOiBwYXJzZVxufSk7XG5leHBvcnRzLlBhcnNlciA9IFBhcnNlcjtcbnZhciBIZWxwID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlSGVscENsYXNzKSh7XG4gIHBhcnNlOiBwYXJzZVxufSk7XG5leHBvcnRzLkhlbHAgPSBIZWxwO1xudmFyIGNvbXBpbGUgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb21waWxlKSh7XG4gIHBhcnNlOiBwYXJzZSxcbiAgdHlwZWQ6IF9wdXJlRnVuY3Rpb25zQW55LnR5cGVkXG59KTtcbmV4cG9ydHMuY29tcGlsZSA9IGNvbXBpbGU7XG52YXIgcGFyc2VyID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUGFyc2VyKSh7XG4gIFBhcnNlcjogUGFyc2VyLFxuICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbn0pO1xuZXhwb3J0cy5wYXJzZXIgPSBwYXJzZXI7XG52YXIgc2ltcGxpZnkgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTaW1wbGlmeSkoe1xuICBiaWdudW1iZXI6IF9wdXJlRnVuY3Rpb25zQW55LmJpZ251bWJlcixcbiAgZnJhY3Rpb246IF9wdXJlRnVuY3Rpb25zQW55LmZyYWN0aW9uLFxuICBDb25zdGFudE5vZGU6IENvbnN0YW50Tm9kZSxcbiAgRnVuY3Rpb25Ob2RlOiBGdW5jdGlvbk5vZGUsXG4gIE9wZXJhdG9yTm9kZTogT3BlcmF0b3JOb2RlLFxuICBQYXJlbnRoZXNpc05vZGU6IFBhcmVudGhlc2lzTm9kZSxcbiAgU3ltYm9sTm9kZTogU3ltYm9sTm9kZSxcbiAgYWRkOiBfcHVyZUZ1bmN0aW9uc0FueS5hZGQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgZGl2aWRlOiBfcHVyZUZ1bmN0aW9uc0FueS5kaXZpZGUsXG4gIGVxdWFsOiBfcHVyZUZ1bmN0aW9uc0FueS5lcXVhbCxcbiAgaXNaZXJvOiBfcHVyZUZ1bmN0aW9uc0FueS5pc1plcm8sXG4gIG1hdGhXaXRoVHJhbnNmb3JtOiBtYXRoV2l0aFRyYW5zZm9ybSxcbiAgbXVsdGlwbHk6IF9wdXJlRnVuY3Rpb25zQW55Lm11bHRpcGx5LFxuICBwYXJzZTogcGFyc2UsXG4gIHBvdzogX3B1cmVGdW5jdGlvbnNBbnkucG93LFxuICBzdWJ0cmFjdDogX3B1cmVGdW5jdGlvbnNBbnkuc3VidHJhY3QsXG4gIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxufSk7XG5leHBvcnRzLnNpbXBsaWZ5ID0gc2ltcGxpZnk7XG52YXIgcmF0aW9uYWxpemUgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSYXRpb25hbGl6ZSkoe1xuICBiaWdudW1iZXI6IF9wdXJlRnVuY3Rpb25zQW55LmJpZ251bWJlcixcbiAgZnJhY3Rpb246IF9wdXJlRnVuY3Rpb25zQW55LmZyYWN0aW9uLFxuICBDb25zdGFudE5vZGU6IENvbnN0YW50Tm9kZSxcbiAgRnVuY3Rpb25Ob2RlOiBGdW5jdGlvbk5vZGUsXG4gIE9wZXJhdG9yTm9kZTogT3BlcmF0b3JOb2RlLFxuICBQYXJlbnRoZXNpc05vZGU6IFBhcmVudGhlc2lzTm9kZSxcbiAgU3ltYm9sTm9kZTogU3ltYm9sTm9kZSxcbiAgYWRkOiBfcHVyZUZ1bmN0aW9uc0FueS5hZGQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgZGl2aWRlOiBfcHVyZUZ1bmN0aW9uc0FueS5kaXZpZGUsXG4gIGVxdWFsOiBfcHVyZUZ1bmN0aW9uc0FueS5lcXVhbCxcbiAgaXNaZXJvOiBfcHVyZUZ1bmN0aW9uc0FueS5pc1plcm8sXG4gIG1hdGhXaXRoVHJhbnNmb3JtOiBtYXRoV2l0aFRyYW5zZm9ybSxcbiAgbXVsdGlwbHk6IF9wdXJlRnVuY3Rpb25zQW55Lm11bHRpcGx5LFxuICBwYXJzZTogcGFyc2UsXG4gIHBvdzogX3B1cmVGdW5jdGlvbnNBbnkucG93LFxuICBzaW1wbGlmeTogc2ltcGxpZnksXG4gIHN1YnRyYWN0OiBfcHVyZUZ1bmN0aW9uc0FueS5zdWJ0cmFjdCxcbiAgdHlwZWQ6IF9wdXJlRnVuY3Rpb25zQW55LnR5cGVkXG59KTtcbmV4cG9ydHMucmF0aW9uYWxpemUgPSByYXRpb25hbGl6ZTtcbnZhciBoZWxwID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlSGVscCkoe1xuICBIZWxwOiBIZWxwLFxuICBtYXRoV2l0aFRyYW5zZm9ybTogbWF0aFdpdGhUcmFuc2Zvcm0sXG4gIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxufSk7XG5leHBvcnRzLmhlbHAgPSBoZWxwO1xudmFyIGRlcml2YXRpdmUgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVEZXJpdmF0aXZlKSh7XG4gIENvbnN0YW50Tm9kZTogQ29uc3RhbnROb2RlLFxuICBGdW5jdGlvbk5vZGU6IEZ1bmN0aW9uTm9kZSxcbiAgT3BlcmF0b3JOb2RlOiBPcGVyYXRvck5vZGUsXG4gIFBhcmVudGhlc2lzTm9kZTogUGFyZW50aGVzaXNOb2RlLFxuICBTeW1ib2xOb2RlOiBTeW1ib2xOb2RlLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIGVxdWFsOiBfcHVyZUZ1bmN0aW9uc0FueS5lcXVhbCxcbiAgaXNaZXJvOiBfcHVyZUZ1bmN0aW9uc0FueS5pc1plcm8sXG4gIG51bWVyaWM6IF9wdXJlRnVuY3Rpb25zQW55Lm51bWVyaWMsXG4gIHBhcnNlOiBwYXJzZSxcbiAgc2ltcGxpZnk6IHNpbXBsaWZ5LFxuICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbn0pO1xuZXhwb3J0cy5kZXJpdmF0aXZlID0gZGVyaXZhdGl2ZTtcblxuX2V4dGVuZHMobWF0aCwge1xuICAndHlwZW9mJzogX3B1cmVGdW5jdGlvbnNBbnkudHlwZU9mLFxuICBleWU6IF9wdXJlRnVuY3Rpb25zQW55LmV5ZSxcbiAgcmV2aXZlcjogcmV2aXZlcixcbiAgXCJmYWxzZVwiOiBfcHVyZUZ1bmN0aW9uc0FueS5fZmFsc2UsXG4gIFwibnVsbFwiOiBfcHVyZUZ1bmN0aW9uc0FueS5fbnVsbCxcbiAgXCJ0cnVlXCI6IF9wdXJlRnVuY3Rpb25zQW55Ll90cnVlLFxuICByZXBsYWNlcjogX3B1cmVGdW5jdGlvbnNBbnkucmVwbGFjZXIsXG4gIGk6IF9wdXJlRnVuY3Rpb25zQW55LmksXG4gIExOMTA6IF9wdXJlRnVuY3Rpb25zQW55LkxOMTAsXG4gIExPRzEwRTogX3B1cmVGdW5jdGlvbnNBbnkuTE9HMTBFLFxuICBOYU46IF9wdXJlRnVuY3Rpb25zQW55Ll9OYU4sXG4gIHBpOiBfcHVyZUZ1bmN0aW9uc0FueS5waSxcbiAgU1FSVDFfMjogX3B1cmVGdW5jdGlvbnNBbnkuU1FSVDFfMixcbiAgdGF1OiBfcHVyZUZ1bmN0aW9uc0FueS50YXUsXG4gIGVmaW1vdkZhY3RvcjogX3B1cmVGdW5jdGlvbnNBbnkuZWZpbW92RmFjdG9yLFxuICBmaW5lU3RydWN0dXJlOiBfcHVyZUZ1bmN0aW9uc0FueS5maW5lU3RydWN0dXJlLFxuICBzYWNrdXJUZXRyb2RlOiBfcHVyZUZ1bmN0aW9uc0FueS5zYWNrdXJUZXRyb2RlLFxuICB3ZWFrTWl4aW5nQW5nbGU6IF9wdXJlRnVuY3Rpb25zQW55LndlYWtNaXhpbmdBbmdsZSxcbiAgZTogX3B1cmVGdW5jdGlvbnNBbnkuZSxcbiAgSW5maW5pdHk6IF9wdXJlRnVuY3Rpb25zQW55Ll9JbmZpbml0eSxcbiAgTE9HMkU6IF9wdXJlRnVuY3Rpb25zQW55LkxPRzJFLFxuICAnUEknOiBfcHVyZUZ1bmN0aW9uc0FueS5waSxcbiAgdmVyc2lvbjogX3B1cmVGdW5jdGlvbnNBbnkudmVyc2lvbixcbiAgJ0UnOiBfcHVyZUZ1bmN0aW9uc0FueS5lLFxuICBwaGk6IF9wdXJlRnVuY3Rpb25zQW55LnBoaSxcbiAgdHlwZWQ6IF9wdXJlRnVuY3Rpb25zQW55LnR5cGVkLFxuICBpc0ludGVnZXI6IF9wdXJlRnVuY3Rpb25zQW55LmlzSW50ZWdlcixcbiAgaXNOdW1lcmljOiBfcHVyZUZ1bmN0aW9uc0FueS5pc051bWVyaWMsXG4gIGlzUG9zaXRpdmU6IF9wdXJlRnVuY3Rpb25zQW55LmlzUG9zaXRpdmUsXG4gIGlzTmFOOiBfcHVyZUZ1bmN0aW9uc0FueS5pc05hTixcbiAgZXF1YWxTY2FsYXI6IF9wdXJlRnVuY3Rpb25zQW55LmVxdWFsU2NhbGFyLFxuICBudW1iZXI6IF9wdXJlRnVuY3Rpb25zQW55Lm51bWJlcixcbiAgXCJib29sZWFuXCI6IF9wdXJlRnVuY3Rpb25zQW55W1wiYm9vbGVhblwiXSxcbiAgY29tcGxleDogX3B1cmVGdW5jdGlvbnNBbnkuY29tcGxleCxcbiAgc3BsaXRVbml0OiBfcHVyZUZ1bmN0aW9uc0FueS5zcGxpdFVuaXQsXG4gIHVuYXJ5UGx1czogX3B1cmVGdW5jdGlvbnNBbnkudW5hcnlQbHVzLFxuICBhcHBseTogX3B1cmVGdW5jdGlvbnNBbnkuYXBwbHksXG4gIGN1YmU6IF9wdXJlRnVuY3Rpb25zQW55LmN1YmUsXG4gIGV4cG0xOiBfcHVyZUZ1bmN0aW9uc0FueS5leHBtMSxcbiAgbG9nMTA6IF9wdXJlRnVuY3Rpb25zQW55LmxvZzEwLFxuICBtdWx0aXBseVNjYWxhcjogX3B1cmVGdW5jdGlvbnNBbnkubXVsdGlwbHlTY2FsYXIsXG4gIHNpZ246IF9wdXJlRnVuY3Rpb25zQW55LnNpZ24sXG4gIHNxdWFyZTogX3B1cmVGdW5jdGlvbnNBbnkuc3F1YXJlLFxuICBiaXROb3Q6IF9wdXJlRnVuY3Rpb25zQW55LmJpdE5vdCxcbiAgYXJnOiBfcHVyZUZ1bmN0aW9uc0FueS5hcmcsXG4gIGltOiBfcHVyZUZ1bmN0aW9uc0FueS5pbSxcbiAgbm90OiBfcHVyZUZ1bmN0aW9uc0FueS5ub3QsXG4gIGZpbHRlcjogX3B1cmVGdW5jdGlvbnNBbnkuZmlsdGVyLFxuICBmb3JFYWNoOiBfcHVyZUZ1bmN0aW9uc0FueS5mb3JFYWNoLFxuICBtYXA6IF9wdXJlRnVuY3Rpb25zQW55Lm1hcCxcbiAgZXJmOiBfcHVyZUZ1bmN0aW9uc0FueS5lcmYsXG4gIGZvcm1hdDogX3B1cmVGdW5jdGlvbnNBbnkuZm9ybWF0LFxuICBpc1ByaW1lOiBfcHVyZUZ1bmN0aW9uc0FueS5pc1ByaW1lLFxuICBhY29zOiBfcHVyZUZ1bmN0aW9uc0FueS5hY29zLFxuICBhY290OiBfcHVyZUZ1bmN0aW9uc0FueS5hY290LFxuICBhY3NjOiBfcHVyZUZ1bmN0aW9uc0FueS5hY3NjLFxuICBhc2VjOiBfcHVyZUZ1bmN0aW9uc0FueS5hc2VjLFxuICBhc2luOiBfcHVyZUZ1bmN0aW9uc0FueS5hc2luLFxuICBhdGFuOiBfcHVyZUZ1bmN0aW9uc0FueS5hdGFuLFxuICBhdGFuaDogX3B1cmVGdW5jdGlvbnNBbnkuYXRhbmgsXG4gIGNvc2g6IF9wdXJlRnVuY3Rpb25zQW55LmNvc2gsXG4gIGNvdGg6IF9wdXJlRnVuY3Rpb25zQW55LmNvdGgsXG4gIGNzY2g6IF9wdXJlRnVuY3Rpb25zQW55LmNzY2gsXG4gIHNlY2g6IF9wdXJlRnVuY3Rpb25zQW55LnNlY2gsXG4gIHNpbmg6IF9wdXJlRnVuY3Rpb25zQW55LnNpbmgsXG4gIHRhbmg6IF9wdXJlRnVuY3Rpb25zQW55LnRhbmgsXG4gIGNoYWluOiBjaGFpbixcbiAgY29tYmluYXRpb25zOiBfcHVyZUZ1bmN0aW9uc0FueS5jb21iaW5hdGlvbnMsXG4gIHBpY2tSYW5kb206IF9wdXJlRnVuY3Rpb25zQW55LnBpY2tSYW5kb20sXG4gIHJhbmRvbUludDogX3B1cmVGdW5jdGlvbnNBbnkucmFuZG9tSW50LFxuICBMTjI6IF9wdXJlRnVuY3Rpb25zQW55LkxOMixcbiAgY2xvbmU6IF9wdXJlRnVuY3Rpb25zQW55LmNsb25lLFxuICBoYXNOdW1lcmljVmFsdWU6IF9wdXJlRnVuY3Rpb25zQW55Lmhhc051bWVyaWNWYWx1ZSxcbiAgdHlwZU9mOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlT2YsXG4gIHN0cmluZzogX3B1cmVGdW5jdGlvbnNBbnkuc3RyaW5nLFxuICBmcmFjdGlvbjogX3B1cmVGdW5jdGlvbnNBbnkuZnJhY3Rpb24sXG4gIHVuYXJ5TWludXM6IF9wdXJlRnVuY3Rpb25zQW55LnVuYXJ5TWludXMsXG4gIGFkZFNjYWxhcjogX3B1cmVGdW5jdGlvbnNBbnkuYWRkU2NhbGFyLFxuICBleHA6IF9wdXJlRnVuY3Rpb25zQW55LmV4cCxcbiAgbG9nMjogX3B1cmVGdW5jdGlvbnNBbnkubG9nMixcbiAgc3FydDogX3B1cmVGdW5jdGlvbnNBbnkuc3FydCxcbiAgY29uajogX3B1cmVGdW5jdGlvbnNBbnkuY29uaixcbiAgZ2V0TWF0cml4RGF0YVR5cGU6IF9wdXJlRnVuY3Rpb25zQW55LmdldE1hdHJpeERhdGFUeXBlLFxuICBtb2RlOiBfcHVyZUZ1bmN0aW9uc0FueS5tb2RlLFxuICBwcmludDogX3B1cmVGdW5jdGlvbnNBbnkucHJpbnQsXG4gIGFjb3NoOiBfcHVyZUZ1bmN0aW9uc0FueS5hY29zaCxcbiAgYWNzY2g6IF9wdXJlRnVuY3Rpb25zQW55LmFjc2NoLFxuICBhc2luaDogX3B1cmVGdW5jdGlvbnNBbnkuYXNpbmgsXG4gIGNvczogX3B1cmVGdW5jdGlvbnNBbnkuY29zLFxuICBjc2M6IF9wdXJlRnVuY3Rpb25zQW55LmNzYyxcbiAgc2luOiBfcHVyZUZ1bmN0aW9uc0FueS5zaW4sXG4gIGNvbWJpbmF0aW9uc1dpdGhSZXA6IF9wdXJlRnVuY3Rpb25zQW55LmNvbWJpbmF0aW9uc1dpdGhSZXAsXG4gIHJhbmRvbTogX3B1cmVGdW5jdGlvbnNBbnkucmFuZG9tLFxuICBTUVJUMjogX3B1cmVGdW5jdGlvbnNBbnkuU1FSVDIsXG4gIGlzTmVnYXRpdmU6IF9wdXJlRnVuY3Rpb25zQW55LmlzTmVnYXRpdmUsXG4gIG1hdHJpeDogX3B1cmVGdW5jdGlvbnNBbnkubWF0cml4LFxuICBjYnJ0OiBfcHVyZUZ1bmN0aW9uc0FueS5jYnJ0LFxuICBnY2Q6IF9wdXJlRnVuY3Rpb25zQW55LmdjZCxcbiAgbW9kOiBfcHVyZUZ1bmN0aW9uc0FueS5tb2QsXG4gIG50aFJvb3Q6IF9wdXJlRnVuY3Rpb25zQW55Lm50aFJvb3QsXG4gIHhnY2Q6IF9wdXJlRnVuY3Rpb25zQW55LnhnY2QsXG4gIGJpdEFuZDogX3B1cmVGdW5jdGlvbnNBbnkuYml0QW5kLFxuICBiaXRYb3I6IF9wdXJlRnVuY3Rpb25zQW55LmJpdFhvcixcbiAgb3I6IF9wdXJlRnVuY3Rpb25zQW55Lm9yLFxuICBjb25jYXQ6IF9wdXJlRnVuY3Rpb25zQW55LmNvbmNhdCxcbiAgZGlhZzogX3B1cmVGdW5jdGlvbnNBbnkuZGlhZyxcbiAgaWRlbnRpdHk6IF9wdXJlRnVuY3Rpb25zQW55LmlkZW50aXR5LFxuICBvbmVzOiBfcHVyZUZ1bmN0aW9uc0FueS5vbmVzLFxuICByZXNoYXBlOiBfcHVyZUZ1bmN0aW9uc0FueS5yZXNoYXBlLFxuICBzaXplOiBfcHVyZUZ1bmN0aW9uc0FueS5zaXplLFxuICBzdWJzZXQ6IF9wdXJlRnVuY3Rpb25zQW55LnN1YnNldCxcbiAgemVyb3M6IF9wdXJlRnVuY3Rpb25zQW55Lnplcm9zLFxuICB0bzogX3B1cmVGdW5jdGlvbnNBbnkudG8sXG4gIHJvdW5kOiBfcHVyZUZ1bmN0aW9uc0FueS5yb3VuZCxcbiAgbGVmdFNoaWZ0OiBfcHVyZUZ1bmN0aW9uc0FueS5sZWZ0U2hpZnQsXG4gIHJpZ2h0TG9nU2hpZnQ6IF9wdXJlRnVuY3Rpb25zQW55LnJpZ2h0TG9nU2hpZnQsXG4gIGNvbXBhcmU6IF9wdXJlRnVuY3Rpb25zQW55LmNvbXBhcmUsXG4gIGNvbXBhcmVUZXh0OiBfcHVyZUZ1bmN0aW9uc0FueS5jb21wYXJlVGV4dCxcbiAgc21hbGxlcjogX3B1cmVGdW5jdGlvbnNBbnkuc21hbGxlcixcbiAgbGFyZ2VyOiBfcHVyZUZ1bmN0aW9uc0FueS5sYXJnZXIsXG4gIHVuZXF1YWw6IF9wdXJlRnVuY3Rpb25zQW55LnVuZXF1YWwsXG4gIG1heDogX3B1cmVGdW5jdGlvbnNBbnkubWF4LFxuICBzcGFyc2U6IF9wdXJlRnVuY3Rpb25zQW55LnNwYXJzZSxcbiAgYWNvdGg6IF9wdXJlRnVuY3Rpb25zQW55LmFjb3RoLFxuICBhdGFuMjogX3B1cmVGdW5jdGlvbnNBbnkuYXRhbjIsXG4gIHNlYzogX3B1cmVGdW5jdGlvbnNBbnkuc2VjLFxuICBhZGQ6IF9wdXJlRnVuY3Rpb25zQW55LmFkZCxcbiAgdHJhY2U6IF9wdXJlRnVuY3Rpb25zQW55LnRyYWNlLFxuICBjb21wb3NpdGlvbjogX3B1cmVGdW5jdGlvbnNBbnkuY29tcG9zaXRpb24sXG4gIGlzWmVybzogX3B1cmVGdW5jdGlvbnNBbnkuaXNaZXJvLFxuICBhYnM6IF9wdXJlRnVuY3Rpb25zQW55LmFicyxcbiAgZmxvb3I6IF9wdXJlRnVuY3Rpb25zQW55LmZsb29yLFxuICBtdWx0aXBseTogX3B1cmVGdW5jdGlvbnNBbnkubXVsdGlwbHksXG4gIGRvdE11bHRpcGx5OiBfcHVyZUZ1bmN0aW9uc0FueS5kb3RNdWx0aXBseSxcbiAgcmU6IF9wdXJlRnVuY3Rpb25zQW55LnJlLFxuICBmbGF0dGVuOiBfcHVyZUZ1bmN0aW9uc0FueS5mbGF0dGVuLFxuICByZXNpemU6IF9wdXJlRnVuY3Rpb25zQW55LnJlc2l6ZSxcbiAgc3F1ZWV6ZTogX3B1cmVGdW5jdGlvbnNBbnkuc3F1ZWV6ZSxcbiAgcHJvZDogX3B1cmVGdW5jdGlvbnNBbnkucHJvZCxcbiAgcG93OiBfcHVyZUZ1bmN0aW9uc0FueS5wb3csXG4gIGRvdFBvdzogX3B1cmVGdW5jdGlvbnNBbnkuZG90UG93LFxuICByaWdodEFyaXRoU2hpZnQ6IF9wdXJlRnVuY3Rpb25zQW55LnJpZ2h0QXJpdGhTaGlmdCxcbiAgY29tcGFyZU5hdHVyYWw6IF9wdXJlRnVuY3Rpb25zQW55LmNvbXBhcmVOYXR1cmFsLFxuICBlcXVhbFRleHQ6IF9wdXJlRnVuY3Rpb25zQW55LmVxdWFsVGV4dCxcbiAgbGFyZ2VyRXE6IF9wdXJlRnVuY3Rpb25zQW55LmxhcmdlckVxLFxuICBwYXJ0aXRpb25TZWxlY3Q6IF9wdXJlRnVuY3Rpb25zQW55LnBhcnRpdGlvblNlbGVjdCxcbiAgbWluOiBfcHVyZUZ1bmN0aW9uc0FueS5taW4sXG4gIGFzZWNoOiBfcHVyZUZ1bmN0aW9uc0FueS5hc2VjaCxcbiAgdGFuOiBfcHVyZUZ1bmN0aW9uc0FueS50YW4sXG4gIHNldFNpemU6IF9wdXJlRnVuY3Rpb25zQW55LnNldFNpemUsXG4gIG5vcm06IF9wdXJlRnVuY3Rpb25zQW55Lm5vcm0sXG4gIHF1YW50aWxlU2VxOiBfcHVyZUZ1bmN0aW9uc0FueS5xdWFudGlsZVNlcSxcbiAgZ2FtbWE6IF9wdXJlRnVuY3Rpb25zQW55LmdhbW1hLFxuICBiaWdudW1iZXI6IF9wdXJlRnVuY3Rpb25zQW55LmJpZ251bWJlcixcbiAgbGNtOiBfcHVyZUZ1bmN0aW9uc0FueS5sY20sXG4gIGJpdE9yOiBfcHVyZUZ1bmN0aW9uc0FueS5iaXRPcixcbiAga3JvbjogX3B1cmVGdW5jdGlvbnNBbnkua3JvbixcbiAgdHJhbnNwb3NlOiBfcHVyZUZ1bmN0aW9uc0FueS50cmFuc3Bvc2UsXG4gIG51bWVyaWM6IF9wdXJlRnVuY3Rpb25zQW55Lm51bWVyaWMsXG4gIGFuZDogX3B1cmVGdW5jdGlvbnNBbnkuYW5kLFxuICBzbWFsbGVyRXE6IF9wdXJlRnVuY3Rpb25zQW55LnNtYWxsZXJFcSxcbiAgc29ydDogX3B1cmVGdW5jdGlvbnNBbnkuc29ydCxcbiAgY290OiBfcHVyZUZ1bmN0aW9uc0FueS5jb3QsXG4gIGRvdDogX3B1cmVGdW5jdGlvbnNBbnkuZG90LFxuICBzdW06IF9wdXJlRnVuY3Rpb25zQW55LnN1bSxcbiAgZmFjdG9yaWFsOiBfcHVyZUZ1bmN0aW9uc0FueS5mYWN0b3JpYWwsXG4gIHBlcm11dGF0aW9uczogX3B1cmVGdW5jdGlvbnNBbnkucGVybXV0YXRpb25zLFxuICBjZWlsOiBfcHVyZUZ1bmN0aW9uc0FueS5jZWlsLFxuICBzdWJ0cmFjdDogX3B1cmVGdW5jdGlvbnNBbnkuc3VidHJhY3QsXG4gIGNyb3NzOiBfcHVyZUZ1bmN0aW9uc0FueS5jcm9zcyxcbiAgY3RyYW5zcG9zZTogX3B1cmVGdW5jdGlvbnNBbnkuY3RyYW5zcG9zZSxcbiAgZXF1YWw6IF9wdXJlRnVuY3Rpb25zQW55LmVxdWFsLFxuICBzZXRDYXJ0ZXNpYW46IF9wdXJlRnVuY3Rpb25zQW55LnNldENhcnRlc2lhbixcbiAgc2V0RGlzdGluY3Q6IF9wdXJlRnVuY3Rpb25zQW55LnNldERpc3RpbmN0LFxuICBzZXRJc1N1YnNldDogX3B1cmVGdW5jdGlvbnNBbnkuc2V0SXNTdWJzZXQsXG4gIHNldFBvd2Vyc2V0OiBfcHVyZUZ1bmN0aW9uc0FueS5zZXRQb3dlcnNldCxcbiAgaW5kZXg6IF9wdXJlRnVuY3Rpb25zQW55LmluZGV4LFxuICBmaXg6IF9wdXJlRnVuY3Rpb25zQW55LmZpeCxcbiAgcmFuZ2U6IF9wdXJlRnVuY3Rpb25zQW55LnJhbmdlLFxuICBkaXZpZGVTY2FsYXI6IF9wdXJlRnVuY3Rpb25zQW55LmRpdmlkZVNjYWxhcixcbiAgbnRoUm9vdHM6IF9wdXJlRnVuY3Rpb25zQW55Lm50aFJvb3RzLFxuICBsc29sdmU6IF9wdXJlRnVuY3Rpb25zQW55Lmxzb2x2ZSxcbiAgZGVlcEVxdWFsOiBfcHVyZUZ1bmN0aW9uc0FueS5kZWVwRXF1YWwsXG4gIHNldERpZmZlcmVuY2U6IF9wdXJlRnVuY3Rpb25zQW55LnNldERpZmZlcmVuY2UsXG4gIHNldE11bHRpcGxpY2l0eTogX3B1cmVGdW5jdGlvbnNBbnkuc2V0TXVsdGlwbGljaXR5LFxuICBoeXBvdDogX3B1cmVGdW5jdGlvbnNBbnkuaHlwb3QsXG4gIGx1cDogX3B1cmVGdW5jdGlvbnNBbnkubHVwLFxuICBzbHU6IF9wdXJlRnVuY3Rpb25zQW55LnNsdSxcbiAgZGV0OiBfcHVyZUZ1bmN0aW9uc0FueS5kZXQsXG4gIGRpc3RhbmNlOiBfcHVyZUZ1bmN0aW9uc0FueS5kaXN0YW5jZSxcbiAgc3RpcmxpbmdTMjogX3B1cmVGdW5jdGlvbnNBbnkuc3RpcmxpbmdTMixcbiAgY2F0YWxhbjogX3B1cmVGdW5jdGlvbnNBbnkuY2F0YWxhbixcbiAgeG9yOiBfcHVyZUZ1bmN0aW9uc0FueS54b3IsXG4gIHJvdzogX3B1cmVGdW5jdGlvbnNBbnkucm93LFxuICBkb3REaXZpZGU6IF9wdXJlRnVuY3Rpb25zQW55LmRvdERpdmlkZSxcbiAgY3JlYXRlVW5pdDogX3B1cmVGdW5jdGlvbnNBbnkuY3JlYXRlVW5pdCxcbiAgc2V0U3ltRGlmZmVyZW5jZTogX3B1cmVGdW5jdGlvbnNBbnkuc2V0U3ltRGlmZmVyZW5jZSxcbiAgcXI6IF9wdXJlRnVuY3Rpb25zQW55LnFyLFxuICBpbnY6IF9wdXJlRnVuY3Rpb25zQW55LmludixcbiAgZXhwbTogX3B1cmVGdW5jdGlvbnNBbnkuZXhwbSxcbiAgZGl2aWRlOiBfcHVyZUZ1bmN0aW9uc0FueS5kaXZpZGUsXG4gIG1lYW46IF9wdXJlRnVuY3Rpb25zQW55Lm1lYW4sXG4gIHZhcmlhbmNlOiBfcHVyZUZ1bmN0aW9uc0FueS52YXJpYW5jZSxcbiAgc3RkOiBfcHVyZUZ1bmN0aW9uc0FueS5zdGQsXG4gIG11bHRpbm9taWFsOiBfcHVyZUZ1bmN0aW9uc0FueS5tdWx0aW5vbWlhbCxcbiAgYXRvbWljTWFzczogX3B1cmVGdW5jdGlvbnNBbnkuYXRvbWljTWFzcyxcbiAgYm9ock1hZ25ldG9uOiBfcHVyZUZ1bmN0aW9uc0FueS5ib2hyTWFnbmV0b24sXG4gIGJvbHR6bWFubjogX3B1cmVGdW5jdGlvbnNBbnkuYm9sdHptYW5uLFxuICBjb25kdWN0YW5jZVF1YW50dW06IF9wdXJlRnVuY3Rpb25zQW55LmNvbmR1Y3RhbmNlUXVhbnR1bSxcbiAgZGV1dGVyb25NYXNzOiBfcHVyZUZ1bmN0aW9uc0FueS5kZXV0ZXJvbk1hc3MsXG4gIGVsZWN0cm9uTWFzczogX3B1cmVGdW5jdGlvbnNBbnkuZWxlY3Ryb25NYXNzLFxuICBmYXJhZGF5OiBfcHVyZUZ1bmN0aW9uc0FueS5mYXJhZGF5LFxuICBmaXJzdFJhZGlhdGlvbjogX3B1cmVGdW5jdGlvbnNBbnkuZmlyc3RSYWRpYXRpb24sXG4gIGdyYXZpdGF0aW9uQ29uc3RhbnQ6IF9wdXJlRnVuY3Rpb25zQW55LmdyYXZpdGF0aW9uQ29uc3RhbnQsXG4gIGhhcnRyZWVFbmVyZ3k6IF9wdXJlRnVuY3Rpb25zQW55LmhhcnRyZWVFbmVyZ3ksXG4gIGtsaXR6aW5nOiBfcHVyZUZ1bmN0aW9uc0FueS5rbGl0emluZyxcbiAgbWFnbmV0aWNDb25zdGFudDogX3B1cmVGdW5jdGlvbnNBbnkubWFnbmV0aWNDb25zdGFudCxcbiAgbW9sYXJNYXNzOiBfcHVyZUZ1bmN0aW9uc0FueS5tb2xhck1hc3MsXG4gIG1vbGFyUGxhbmNrQ29uc3RhbnQ6IF9wdXJlRnVuY3Rpb25zQW55Lm1vbGFyUGxhbmNrQ29uc3RhbnQsXG4gIG5ldXRyb25NYXNzOiBfcHVyZUZ1bmN0aW9uc0FueS5uZXV0cm9uTWFzcyxcbiAgcGxhbmNrQ2hhcmdlOiBfcHVyZUZ1bmN0aW9uc0FueS5wbGFuY2tDaGFyZ2UsXG4gIHBsYW5ja0xlbmd0aDogX3B1cmVGdW5jdGlvbnNBbnkucGxhbmNrTGVuZ3RoLFxuICBwbGFuY2tUZW1wZXJhdHVyZTogX3B1cmVGdW5jdGlvbnNBbnkucGxhbmNrVGVtcGVyYXR1cmUsXG4gIHByb3Rvbk1hc3M6IF9wdXJlRnVuY3Rpb25zQW55LnByb3Rvbk1hc3MsXG4gIHJlZHVjZWRQbGFuY2tDb25zdGFudDogX3B1cmVGdW5jdGlvbnNBbnkucmVkdWNlZFBsYW5ja0NvbnN0YW50LFxuICBzZWNvbmRSYWRpYXRpb246IF9wdXJlRnVuY3Rpb25zQW55LnNlY29uZFJhZGlhdGlvbixcbiAgc3RlZmFuQm9sdHptYW5uOiBfcHVyZUZ1bmN0aW9uc0FueS5zdGVmYW5Cb2x0em1hbm4sXG4gIHZhY3V1bUltcGVkYW5jZTogX3B1cmVGdW5jdGlvbnNBbnkudmFjdXVtSW1wZWRhbmNlLFxuICBjb2x1bW46IF9wdXJlRnVuY3Rpb25zQW55LmNvbHVtbixcbiAgdXNvbHZlOiBfcHVyZUZ1bmN0aW9uc0FueS51c29sdmUsXG4gIHNldEludGVyc2VjdDogX3B1cmVGdW5jdGlvbnNBbnkuc2V0SW50ZXJzZWN0LFxuICBsdXNvbHZlOiBfcHVyZUZ1bmN0aW9uc0FueS5sdXNvbHZlLFxuICBlaWdzOiBfcHVyZUZ1bmN0aW9uc0FueS5laWdzLFxuICBpbnRlcnNlY3Q6IF9wdXJlRnVuY3Rpb25zQW55LmludGVyc2VjdCxcbiAgJ3Zhcic6IF9wdXJlRnVuY3Rpb25zQW55LnZhcmlhbmNlLFxuICBiZWxsTnVtYmVyczogX3B1cmVGdW5jdGlvbnNBbnkuYmVsbE51bWJlcnMsXG4gIGF2b2dhZHJvOiBfcHVyZUZ1bmN0aW9uc0FueS5hdm9nYWRybyxcbiAgY2xhc3NpY2FsRWxlY3Ryb25SYWRpdXM6IF9wdXJlRnVuY3Rpb25zQW55LmNsYXNzaWNhbEVsZWN0cm9uUmFkaXVzLFxuICBlbGVjdHJpY0NvbnN0YW50OiBfcHVyZUZ1bmN0aW9uc0FueS5lbGVjdHJpY0NvbnN0YW50LFxuICBmZXJtaUNvdXBsaW5nOiBfcHVyZUZ1bmN0aW9uc0FueS5mZXJtaUNvdXBsaW5nLFxuICBncmF2aXR5OiBfcHVyZUZ1bmN0aW9uc0FueS5ncmF2aXR5LFxuICBsb3NjaG1pZHQ6IF9wdXJlRnVuY3Rpb25zQW55Lmxvc2NobWlkdCxcbiAgbW9sYXJNYXNzQzEyOiBfcHVyZUZ1bmN0aW9uc0FueS5tb2xhck1hc3NDMTIsXG4gIG51Y2xlYXJNYWduZXRvbjogX3B1cmVGdW5jdGlvbnNBbnkubnVjbGVhck1hZ25ldG9uLFxuICBwbGFuY2tNYXNzOiBfcHVyZUZ1bmN0aW9uc0FueS5wbGFuY2tNYXNzLFxuICBxdWFudHVtT2ZDaXJjdWxhdGlvbjogX3B1cmVGdW5jdGlvbnNBbnkucXVhbnR1bU9mQ2lyY3VsYXRpb24sXG4gIHNwZWVkT2ZMaWdodDogX3B1cmVGdW5jdGlvbnNBbnkuc3BlZWRPZkxpZ2h0LFxuICB3aWVuRGlzcGxhY2VtZW50OiBfcHVyZUZ1bmN0aW9uc0FueS53aWVuRGlzcGxhY2VtZW50LFxuICBsb2c6IF9wdXJlRnVuY3Rpb25zQW55LmxvZyxcbiAgdW5pdDogX3B1cmVGdW5jdGlvbnNBbnkudW5pdCxcbiAgcGFyc2U6IHBhcnNlLFxuICBldmFsdWF0ZTogZXZhbHVhdGUsXG4gIHNxcnRtOiBfcHVyZUZ1bmN0aW9uc0FueS5zcXJ0bSxcbiAga2xkaXZlcmdlbmNlOiBfcHVyZUZ1bmN0aW9uc0FueS5rbGRpdmVyZ2VuY2UsXG4gIGJvaHJSYWRpdXM6IF9wdXJlRnVuY3Rpb25zQW55LmJvaHJSYWRpdXMsXG4gIGVsZW1lbnRhcnlDaGFyZ2U6IF9wdXJlRnVuY3Rpb25zQW55LmVsZW1lbnRhcnlDaGFyZ2UsXG4gIGludmVyc2VDb25kdWN0YW5jZVF1YW50dW06IF9wdXJlRnVuY3Rpb25zQW55LmludmVyc2VDb25kdWN0YW5jZVF1YW50dW0sXG4gIG1vbGFyVm9sdW1lOiBfcHVyZUZ1bmN0aW9uc0FueS5tb2xhclZvbHVtZSxcbiAgcGxhbmNrVGltZTogX3B1cmVGdW5jdGlvbnNBbnkucGxhbmNrVGltZSxcbiAgdGhvbXNvbkNyb3NzU2VjdGlvbjogX3B1cmVGdW5jdGlvbnNBbnkudGhvbXNvbkNyb3NzU2VjdGlvbixcbiAgbG9nMXA6IF9wdXJlRnVuY3Rpb25zQW55LmxvZzFwLFxuICBjb21waWxlOiBjb21waWxlLFxuICBwYXJzZXI6IHBhcnNlcixcbiAgbWVkaWFuOiBfcHVyZUZ1bmN0aW9uc0FueS5tZWRpYW4sXG4gIHNpbXBsaWZ5OiBzaW1wbGlmeSxcbiAgcmF0aW9uYWxpemU6IHJhdGlvbmFsaXplLFxuICBnYXNDb25zdGFudDogX3B1cmVGdW5jdGlvbnNBbnkuZ2FzQ29uc3RhbnQsXG4gIHBsYW5ja0NvbnN0YW50OiBfcHVyZUZ1bmN0aW9uc0FueS5wbGFuY2tDb25zdGFudCxcbiAgc2V0VW5pb246IF9wdXJlRnVuY3Rpb25zQW55LnNldFVuaW9uLFxuICBoZWxwOiBoZWxwLFxuICBkZXJpdmF0aXZlOiBkZXJpdmF0aXZlLFxuICBtYWduZXRpY0ZsdXhRdWFudHVtOiBfcHVyZUZ1bmN0aW9uc0FueS5tYWduZXRpY0ZsdXhRdWFudHVtLFxuICAnZXZhbCc6IGV2YWx1YXRlLFxuICBjb3Vsb21iOiBfcHVyZUZ1bmN0aW9uc0FueS5jb3Vsb21iLFxuICBtYWQ6IF9wdXJlRnVuY3Rpb25zQW55Lm1hZCxcbiAgcnlkYmVyZzogX3B1cmVGdW5jdGlvbnNBbnkucnlkYmVyZyxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcblxuX2V4dGVuZHMobWF0aFdpdGhUcmFuc2Zvcm0sIG1hdGgsIHtcbiAgYXBwbHk6ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUFwcGx5VHJhbnNmb3JtKSh7XG4gICAgaXNJbnRlZ2VyOiBfcHVyZUZ1bmN0aW9uc0FueS5pc0ludGVnZXIsXG4gICAgdHlwZWQ6IF9wdXJlRnVuY3Rpb25zQW55LnR5cGVkXG4gIH0pLFxuICBmaWx0ZXI6ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUZpbHRlclRyYW5zZm9ybSkoe1xuICAgIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxuICB9KSxcbiAgbWFwOiAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVNYXBUcmFuc2Zvcm0pKHtcbiAgICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbiAgfSksXG4gIGZvckVhY2g6ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUZvckVhY2hUcmFuc2Zvcm0pKHtcbiAgICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbiAgfSksXG4gIG1heDogKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTWF4VHJhbnNmb3JtKSh7XG4gICAgbGFyZ2VyOiBfcHVyZUZ1bmN0aW9uc0FueS5sYXJnZXIsXG4gICAgdHlwZWQ6IF9wdXJlRnVuY3Rpb25zQW55LnR5cGVkXG4gIH0pLFxuICBtaW46ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU1pblRyYW5zZm9ybSkoe1xuICAgIHNtYWxsZXI6IF9wdXJlRnVuY3Rpb25zQW55LnNtYWxsZXIsXG4gICAgdHlwZWQ6IF9wdXJlRnVuY3Rpb25zQW55LnR5cGVkXG4gIH0pLFxuICBzdWJzZXQ6ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVN1YnNldFRyYW5zZm9ybSkoe1xuICAgIG1hdHJpeDogX3B1cmVGdW5jdGlvbnNBbnkubWF0cml4LFxuICAgIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxuICB9KSxcbiAgY29uY2F0OiAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb25jYXRUcmFuc2Zvcm0pKHtcbiAgICBpc0ludGVnZXI6IF9wdXJlRnVuY3Rpb25zQW55LmlzSW50ZWdlcixcbiAgICBtYXRyaXg6IF9wdXJlRnVuY3Rpb25zQW55Lm1hdHJpeCxcbiAgICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbiAgfSksXG4gIHJhbmdlOiAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSYW5nZVRyYW5zZm9ybSkoe1xuICAgIGJpZ251bWJlcjogX3B1cmVGdW5jdGlvbnNBbnkuYmlnbnVtYmVyLFxuICAgIG1hdHJpeDogX3B1cmVGdW5jdGlvbnNBbnkubWF0cml4LFxuICAgIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgICBsYXJnZXI6IF9wdXJlRnVuY3Rpb25zQW55LmxhcmdlcixcbiAgICBsYXJnZXJFcTogX3B1cmVGdW5jdGlvbnNBbnkubGFyZ2VyRXEsXG4gICAgc21hbGxlcjogX3B1cmVGdW5jdGlvbnNBbnkuc21hbGxlcixcbiAgICBzbWFsbGVyRXE6IF9wdXJlRnVuY3Rpb25zQW55LnNtYWxsZXJFcSxcbiAgICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbiAgfSksXG4gIHN1bTogKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3VtVHJhbnNmb3JtKSh7XG4gICAgYmlnbnVtYmVyOiBfcHVyZUZ1bmN0aW9uc0FueS5iaWdudW1iZXIsXG4gICAgZnJhY3Rpb246IF9wdXJlRnVuY3Rpb25zQW55LmZyYWN0aW9uLFxuICAgIGFkZDogX3B1cmVGdW5jdGlvbnNBbnkuYWRkLFxuICAgIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbiAgfSksXG4gIGluZGV4OiAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVJbmRleFRyYW5zZm9ybSkoe1xuICAgIEluZGV4OiBfcHVyZUZ1bmN0aW9uc0FueS5JbmRleFxuICB9KSxcbiAgY29sdW1uOiAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb2x1bW5UcmFuc2Zvcm0pKHtcbiAgICBJbmRleDogX3B1cmVGdW5jdGlvbnNBbnkuSW5kZXgsXG4gICAgbWF0cml4OiBfcHVyZUZ1bmN0aW9uc0FueS5tYXRyaXgsXG4gICAgcmFuZ2U6IF9wdXJlRnVuY3Rpb25zQW55LnJhbmdlLFxuICAgIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxuICB9KSxcbiAgcm93OiAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSb3dUcmFuc2Zvcm0pKHtcbiAgICBJbmRleDogX3B1cmVGdW5jdGlvbnNBbnkuSW5kZXgsXG4gICAgbWF0cml4OiBfcHVyZUZ1bmN0aW9uc0FueS5tYXRyaXgsXG4gICAgcmFuZ2U6IF9wdXJlRnVuY3Rpb25zQW55LnJhbmdlLFxuICAgIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxuICB9KSxcbiAgbWVhbjogKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTWVhblRyYW5zZm9ybSkoe1xuICAgIGFkZDogX3B1cmVGdW5jdGlvbnNBbnkuYWRkLFxuICAgIGRpdmlkZTogX3B1cmVGdW5jdGlvbnNBbnkuZGl2aWRlLFxuICAgIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxuICB9KSxcbiAgdmFyaWFuY2U6ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVZhcmlhbmNlVHJhbnNmb3JtKSh7XG4gICAgYWRkOiBfcHVyZUZ1bmN0aW9uc0FueS5hZGQsXG4gICAgYXBwbHk6IF9wdXJlRnVuY3Rpb25zQW55LmFwcGx5LFxuICAgIGRpdmlkZTogX3B1cmVGdW5jdGlvbnNBbnkuZGl2aWRlLFxuICAgIGlzTmFOOiBfcHVyZUZ1bmN0aW9uc0FueS5pc05hTixcbiAgICBtdWx0aXBseTogX3B1cmVGdW5jdGlvbnNBbnkubXVsdGlwbHksXG4gICAgc3VidHJhY3Q6IF9wdXJlRnVuY3Rpb25zQW55LnN1YnRyYWN0LFxuICAgIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxuICB9KSxcbiAgc3RkOiAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTdGRUcmFuc2Zvcm0pKHtcbiAgICBzcXJ0OiBfcHVyZUZ1bmN0aW9uc0FueS5zcXJ0LFxuICAgIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZCxcbiAgICB2YXJpYW5jZTogX3B1cmVGdW5jdGlvbnNBbnkudmFyaWFuY2VcbiAgfSlcbn0pO1xuXG5fZXh0ZW5kcyhjbGFzc2VzLCB7XG4gIFJlc3VsdFNldDogX3B1cmVGdW5jdGlvbnNBbnkuUmVzdWx0U2V0LFxuICBDb21wbGV4OiBfcHVyZUZ1bmN0aW9uc0FueS5Db21wbGV4LFxuICBSYW5nZTogX3B1cmVGdW5jdGlvbnNBbnkuUmFuZ2UsXG4gIE5vZGU6IE5vZGUsXG4gIEFycmF5Tm9kZTogQXJyYXlOb2RlLFxuICBCbG9ja05vZGU6IEJsb2NrTm9kZSxcbiAgQ29uc3RhbnROb2RlOiBDb25zdGFudE5vZGUsXG4gIE9iamVjdE5vZGU6IE9iamVjdE5vZGUsXG4gIFBhcmVudGhlc2lzTm9kZTogUGFyZW50aGVzaXNOb2RlLFxuICBSZWxhdGlvbmFsTm9kZTogUmVsYXRpb25hbE5vZGUsXG4gIENoYWluOiBDaGFpbixcbiAgQmlnTnVtYmVyOiBfcHVyZUZ1bmN0aW9uc0FueS5CaWdOdW1iZXIsXG4gIE1hdHJpeDogX3B1cmVGdW5jdGlvbnNBbnkuTWF0cml4LFxuICBDb25kaXRpb25hbE5vZGU6IENvbmRpdGlvbmFsTm9kZSxcbiAgT3BlcmF0b3JOb2RlOiBPcGVyYXRvck5vZGUsXG4gIEZyYWN0aW9uOiBfcHVyZUZ1bmN0aW9uc0FueS5GcmFjdGlvbixcbiAgUmFuZ2VOb2RlOiBSYW5nZU5vZGUsXG4gIERlbnNlTWF0cml4OiBfcHVyZUZ1bmN0aW9uc0FueS5EZW5zZU1hdHJpeCxcbiAgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZTogRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSxcbiAgU3BhcnNlTWF0cml4OiBfcHVyZUZ1bmN0aW9uc0FueS5TcGFyc2VNYXRyaXgsXG4gIEltbXV0YWJsZURlbnNlTWF0cml4OiBfcHVyZUZ1bmN0aW9uc0FueS5JbW11dGFibGVEZW5zZU1hdHJpeCxcbiAgRmlib25hY2NpSGVhcDogX3B1cmVGdW5jdGlvbnNBbnkuRmlib25hY2NpSGVhcCxcbiAgQWNjZXNzb3JOb2RlOiBBY2Nlc3Nvck5vZGUsXG4gIEluZGV4Tm9kZTogSW5kZXhOb2RlLFxuICBTcGE6IF9wdXJlRnVuY3Rpb25zQW55LlNwYSxcbiAgQXNzaWdubWVudE5vZGU6IEFzc2lnbm1lbnROb2RlLFxuICBJbmRleDogX3B1cmVGdW5jdGlvbnNBbnkuSW5kZXgsXG4gIFVuaXQ6IF9wdXJlRnVuY3Rpb25zQW55LlVuaXQsXG4gIFN5bWJvbE5vZGU6IFN5bWJvbE5vZGUsXG4gIEZ1bmN0aW9uTm9kZTogRnVuY3Rpb25Ob2RlLFxuICBQYXJzZXI6IFBhcnNlcixcbiAgSGVscDogSGVscFxufSk7XG5cbkNoYWluLmNyZWF0ZVByb3h5KG1hdGgpOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xudmFyIF9leHBvcnROYW1lcyA9IHtcbiAgY29uZmlnOiB0cnVlLFxuICBJbmRleEVycm9yOiB0cnVlLFxuICBEaW1lbnNpb25FcnJvcjogdHJ1ZSxcbiAgQXJndW1lbnRzRXJyb3I6IHRydWUsXG4gIGNyZWF0ZTogdHJ1ZSxcbiAgZmFjdG9yeTogdHJ1ZVxufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvbmZpZ1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29uZmlnUmVhZG9ubHkuY29uZmlnO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkluZGV4RXJyb3JcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0luZGV4RXJyb3IuSW5kZXhFcnJvcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJEaW1lbnNpb25FcnJvclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3I7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQXJndW1lbnRzRXJyb3JcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0FyZ3VtZW50c0Vycm9yLkFyZ3VtZW50c0Vycm9yO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY3JlYXRlLmNyZWF0ZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmYWN0b3J5XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9mYWN0b3J5LmZhY3Rvcnk7XG4gIH1cbn0pO1xuXG52YXIgX2NvbmZpZ1JlYWRvbmx5ID0gcmVxdWlyZShcIi4vY29uZmlnUmVhZG9ubHlcIik7XG5cbnZhciBfcHVyZUZ1bmN0aW9uc0FueSA9IHJlcXVpcmUoXCIuL3B1cmVGdW5jdGlvbnNBbnkuZ2VuZXJhdGVkXCIpO1xuXG5PYmplY3Qua2V5cyhfcHVyZUZ1bmN0aW9uc0FueSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIGlmIChrZXkgPT09IFwiZGVmYXVsdFwiIHx8IGtleSA9PT0gXCJfX2VzTW9kdWxlXCIpIHJldHVybjtcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfZXhwb3J0TmFtZXMsIGtleSkpIHJldHVybjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gX3B1cmVGdW5jdGlvbnNBbnlba2V5XTtcbiAgICB9XG4gIH0pO1xufSk7XG5cbnZhciBfaW1wdXJlRnVuY3Rpb25zQW55ID0gcmVxdWlyZShcIi4vaW1wdXJlRnVuY3Rpb25zQW55LmdlbmVyYXRlZFwiKTtcblxuT2JqZWN0LmtleXMoX2ltcHVyZUZ1bmN0aW9uc0FueSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIGlmIChrZXkgPT09IFwiZGVmYXVsdFwiIHx8IGtleSA9PT0gXCJfX2VzTW9kdWxlXCIpIHJldHVybjtcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfZXhwb3J0TmFtZXMsIGtleSkpIHJldHVybjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gX2ltcHVyZUZ1bmN0aW9uc0FueVtrZXldO1xuICAgIH1cbiAgfSk7XG59KTtcblxudmFyIF90eXBlQ2hlY2tzID0gcmVxdWlyZShcIi4vdHlwZUNoZWNrc1wiKTtcblxuT2JqZWN0LmtleXMoX3R5cGVDaGVja3MpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBpZiAoa2V5ID09PSBcImRlZmF1bHRcIiB8fCBrZXkgPT09IFwiX19lc01vZHVsZVwiKSByZXR1cm47XG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX2V4cG9ydE5hbWVzLCBrZXkpKSByZXR1cm47XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIF90eXBlQ2hlY2tzW2tleV07XG4gICAgfVxuICB9KTtcbn0pO1xuXG52YXIgX0luZGV4RXJyb3IgPSByZXF1aXJlKFwiLi4vZXJyb3IvSW5kZXhFcnJvclwiKTtcblxudmFyIF9EaW1lbnNpb25FcnJvciA9IHJlcXVpcmUoXCIuLi9lcnJvci9EaW1lbnNpb25FcnJvclwiKTtcblxudmFyIF9Bcmd1bWVudHNFcnJvciA9IHJlcXVpcmUoXCIuLi9lcnJvci9Bcmd1bWVudHNFcnJvclwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBbnkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkuZ2VuZXJhdGVkXCIpO1xuXG5PYmplY3Qua2V5cyhfZGVwZW5kZW5jaWVzQW55KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgaWYgKGtleSA9PT0gXCJkZWZhdWx0XCIgfHwga2V5ID09PSBcIl9fZXNNb2R1bGVcIikgcmV0dXJuO1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9leHBvcnROYW1lcywga2V5KSkgcmV0dXJuO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQW55W2tleV07XG4gICAgfVxuICB9KTtcbn0pO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi9mYWN0b3JpZXNBbnlcIik7XG5cbk9iamVjdC5rZXlzKF9mYWN0b3JpZXNBbnkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBpZiAoa2V5ID09PSBcImRlZmF1bHRcIiB8fCBrZXkgPT09IFwiX19lc01vZHVsZVwiKSByZXR1cm47XG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX2V4cG9ydE5hbWVzLCBrZXkpKSByZXR1cm47XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIF9mYWN0b3JpZXNBbnlba2V5XTtcbiAgICB9XG4gIH0pO1xufSk7XG5cbnZhciBfY3JlYXRlID0gcmVxdWlyZShcIi4uL2NvcmUvY3JlYXRlXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9kZXByZWNhdGVkQW55ID0gcmVxdWlyZShcIi4vZGVwcmVjYXRlZEFueVwiKTtcblxuT2JqZWN0LmtleXMoX2RlcHJlY2F0ZWRBbnkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBpZiAoa2V5ID09PSBcImRlZmF1bHRcIiB8fCBrZXkgPT09IFwiX19lc01vZHVsZVwiKSByZXR1cm47XG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX2V4cG9ydE5hbWVzLCBrZXkpKSByZXR1cm47XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIF9kZXByZWNhdGVkQW55W2tleV07XG4gICAgfVxuICB9KTtcbn0pO1xuXG5leHBvcnRzWyd2YXInXSA9IGV4cG9ydHMuZGVwcmVjYXRlZFZhcjtcbmV4cG9ydHNbJ3R5cGVvZiddID0gZXhwb3J0cy5kZXByZWNhdGVkVHlwZW9mO1xuZXhwb3J0c1snZXZhbCddID0gZXhwb3J0cy5kZXByZWNhdGVkRXZhbDtcbmV4cG9ydHNbJ2ltcG9ydCddID0gZXhwb3J0cy5kZXByZWNhdGVkSW1wb3J0O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNicnQgPSBleHBvcnRzLm1hdHJpeCA9IGV4cG9ydHMuU3BhcnNlTWF0cml4ID0gZXhwb3J0cy5pc05lZ2F0aXZlID0gZXhwb3J0cy5TUVJUMiA9IGV4cG9ydHMucmFuZG9tID0gZXhwb3J0cy5jb21iaW5hdGlvbnNXaXRoUmVwID0gZXhwb3J0cy5zaW4gPSBleHBvcnRzLmNzYyA9IGV4cG9ydHMuY29zID0gZXhwb3J0cy5hc2luaCA9IGV4cG9ydHMuYWNzY2ggPSBleHBvcnRzLmFjb3NoID0gZXhwb3J0cy5wcmludCA9IGV4cG9ydHMubW9kZSA9IGV4cG9ydHMuZ2V0TWF0cml4RGF0YVR5cGUgPSBleHBvcnRzLmNvbmogPSBleHBvcnRzLnNxcnQgPSBleHBvcnRzLmxvZzIgPSBleHBvcnRzLmV4cCA9IGV4cG9ydHMuYWRkU2NhbGFyID0gZXhwb3J0cy51bmFyeU1pbnVzID0gZXhwb3J0cy5mcmFjdGlvbiA9IGV4cG9ydHMuc3RyaW5nID0gZXhwb3J0cy50eXBlT2YgPSBleHBvcnRzLmhhc051bWVyaWNWYWx1ZSA9IGV4cG9ydHMuY2xvbmUgPSBleHBvcnRzLkxOMiA9IGV4cG9ydHMucmFuZG9tSW50ID0gZXhwb3J0cy5waWNrUmFuZG9tID0gZXhwb3J0cy5jb21iaW5hdGlvbnMgPSBleHBvcnRzLnRhbmggPSBleHBvcnRzLnNpbmggPSBleHBvcnRzLnNlY2ggPSBleHBvcnRzLmNzY2ggPSBleHBvcnRzLmNvdGggPSBleHBvcnRzLmNvc2ggPSBleHBvcnRzLmF0YW5oID0gZXhwb3J0cy5hdGFuID0gZXhwb3J0cy5hc2luID0gZXhwb3J0cy5hc2VjID0gZXhwb3J0cy5hY3NjID0gZXhwb3J0cy5hY290ID0gZXhwb3J0cy5hY29zID0gZXhwb3J0cy5pc1ByaW1lID0gZXhwb3J0cy5mb3JtYXQgPSBleHBvcnRzLmVyZiA9IGV4cG9ydHMubWFwID0gZXhwb3J0cy5mb3JFYWNoID0gZXhwb3J0cy5maWx0ZXIgPSBleHBvcnRzLm5vdCA9IGV4cG9ydHMuaW0gPSBleHBvcnRzLmFyZyA9IGV4cG9ydHMuYml0Tm90ID0gZXhwb3J0cy5zcXVhcmUgPSBleHBvcnRzLnNpZ24gPSBleHBvcnRzLm11bHRpcGx5U2NhbGFyID0gZXhwb3J0cy5sb2cxMCA9IGV4cG9ydHMuZXhwbTEgPSBleHBvcnRzLmN1YmUgPSBleHBvcnRzLmFwcGx5ID0gZXhwb3J0cy51bmFyeVBsdXMgPSBleHBvcnRzLnNwbGl0VW5pdCA9IGV4cG9ydHMuY29tcGxleCA9IGV4cG9ydHNbXCJib29sZWFuXCJdID0gZXhwb3J0cy5udW1iZXIgPSBleHBvcnRzLmVxdWFsU2NhbGFyID0gZXhwb3J0cy5pc05hTiA9IGV4cG9ydHMuaXNQb3NpdGl2ZSA9IGV4cG9ydHMuaXNOdW1lcmljID0gZXhwb3J0cy5pc0ludGVnZXIgPSBleHBvcnRzLnR5cGVkID0gZXhwb3J0cy5waGkgPSBleHBvcnRzLkRlbnNlTWF0cml4ID0gZXhwb3J0cy52ZXJzaW9uID0gZXhwb3J0cy5MT0cyRSA9IGV4cG9ydHMuX0luZmluaXR5ID0gZXhwb3J0cy5lID0gZXhwb3J0cy5GcmFjdGlvbiA9IGV4cG9ydHMud2Vha01peGluZ0FuZ2xlID0gZXhwb3J0cy5zYWNrdXJUZXRyb2RlID0gZXhwb3J0cy5maW5lU3RydWN0dXJlID0gZXhwb3J0cy5lZmltb3ZGYWN0b3IgPSBleHBvcnRzLnRhdSA9IGV4cG9ydHMuU1FSVDFfMiA9IGV4cG9ydHMucGkgPSBleHBvcnRzLl9OYU4gPSBleHBvcnRzLkxPRzEwRSA9IGV4cG9ydHMuTE4xMCA9IGV4cG9ydHMuaSA9IGV4cG9ydHMucmVwbGFjZXIgPSBleHBvcnRzLk1hdHJpeCA9IGV4cG9ydHMuQmlnTnVtYmVyID0gZXhwb3J0cy5fdHJ1ZSA9IGV4cG9ydHMuX251bGwgPSBleHBvcnRzLl9mYWxzZSA9IGV4cG9ydHMuZXllID0gZXhwb3J0cy5SYW5nZSA9IGV4cG9ydHMuQ29tcGxleCA9IGV4cG9ydHMuUmVzdWx0U2V0ID0gdm9pZCAwO1xuZXhwb3J0cy54b3IgPSBleHBvcnRzLmNhdGFsYW4gPSBleHBvcnRzLnN0aXJsaW5nUzIgPSBleHBvcnRzLmRpc3RhbmNlID0gZXhwb3J0cy5kZXQgPSBleHBvcnRzLnNsdSA9IGV4cG9ydHMubHVwID0gZXhwb3J0cy5oeXBvdCA9IGV4cG9ydHMuc2V0TXVsdGlwbGljaXR5ID0gZXhwb3J0cy5zZXREaWZmZXJlbmNlID0gZXhwb3J0cy5kZWVwRXF1YWwgPSBleHBvcnRzLmxzb2x2ZSA9IGV4cG9ydHMubnRoUm9vdHMgPSBleHBvcnRzLmRpdmlkZVNjYWxhciA9IGV4cG9ydHMucmFuZ2UgPSBleHBvcnRzLmZpeCA9IGV4cG9ydHMuaW5kZXggPSBleHBvcnRzLnNldFBvd2Vyc2V0ID0gZXhwb3J0cy5zZXRJc1N1YnNldCA9IGV4cG9ydHMuc2V0RGlzdGluY3QgPSBleHBvcnRzLnNldENhcnRlc2lhbiA9IGV4cG9ydHMuSW5kZXggPSBleHBvcnRzLmVxdWFsID0gZXhwb3J0cy5jdHJhbnNwb3NlID0gZXhwb3J0cy5jcm9zcyA9IGV4cG9ydHMuc3VidHJhY3QgPSBleHBvcnRzLmNlaWwgPSBleHBvcnRzLnBlcm11dGF0aW9ucyA9IGV4cG9ydHMuZmFjdG9yaWFsID0gZXhwb3J0cy5zdW0gPSBleHBvcnRzLmRvdCA9IGV4cG9ydHMuY290ID0gZXhwb3J0cy5zb3J0ID0gZXhwb3J0cy5zbWFsbGVyRXEgPSBleHBvcnRzLmFuZCA9IGV4cG9ydHMubnVtZXJpYyA9IGV4cG9ydHMudHJhbnNwb3NlID0gZXhwb3J0cy5rcm9uID0gZXhwb3J0cy5iaXRPciA9IGV4cG9ydHMubGNtID0gZXhwb3J0cy5iaWdudW1iZXIgPSBleHBvcnRzLmdhbW1hID0gZXhwb3J0cy5xdWFudGlsZVNlcSA9IGV4cG9ydHMubm9ybSA9IGV4cG9ydHMuc2V0U2l6ZSA9IGV4cG9ydHMudGFuID0gZXhwb3J0cy5hc2VjaCA9IGV4cG9ydHMuU3BhID0gZXhwb3J0cy5taW4gPSBleHBvcnRzLnBhcnRpdGlvblNlbGVjdCA9IGV4cG9ydHMubGFyZ2VyRXEgPSBleHBvcnRzLmVxdWFsVGV4dCA9IGV4cG9ydHMuY29tcGFyZU5hdHVyYWwgPSBleHBvcnRzLnJpZ2h0QXJpdGhTaGlmdCA9IGV4cG9ydHMuZG90UG93ID0gZXhwb3J0cy5wb3cgPSBleHBvcnRzLnByb2QgPSBleHBvcnRzLnNxdWVlemUgPSBleHBvcnRzLnJlc2l6ZSA9IGV4cG9ydHMuZmxhdHRlbiA9IGV4cG9ydHMucmUgPSBleHBvcnRzLmRvdE11bHRpcGx5ID0gZXhwb3J0cy5tdWx0aXBseSA9IGV4cG9ydHMuZmxvb3IgPSBleHBvcnRzLmFicyA9IGV4cG9ydHMuaXNaZXJvID0gZXhwb3J0cy5jb21wb3NpdGlvbiA9IGV4cG9ydHMudHJhY2UgPSBleHBvcnRzLmFkZCA9IGV4cG9ydHMuc2VjID0gZXhwb3J0cy5hdGFuMiA9IGV4cG9ydHMuYWNvdGggPSBleHBvcnRzLnNwYXJzZSA9IGV4cG9ydHMuRmlib25hY2NpSGVhcCA9IGV4cG9ydHMuSW1tdXRhYmxlRGVuc2VNYXRyaXggPSBleHBvcnRzLm1heCA9IGV4cG9ydHMudW5lcXVhbCA9IGV4cG9ydHMubGFyZ2VyID0gZXhwb3J0cy5zbWFsbGVyID0gZXhwb3J0cy5jb21wYXJlVGV4dCA9IGV4cG9ydHMuY29tcGFyZSA9IGV4cG9ydHMucmlnaHRMb2dTaGlmdCA9IGV4cG9ydHMubGVmdFNoaWZ0ID0gZXhwb3J0cy5yb3VuZCA9IGV4cG9ydHMudG8gPSBleHBvcnRzLnplcm9zID0gZXhwb3J0cy5zdWJzZXQgPSBleHBvcnRzLnNpemUgPSBleHBvcnRzLnJlc2hhcGUgPSBleHBvcnRzLm9uZXMgPSBleHBvcnRzLmlkZW50aXR5ID0gZXhwb3J0cy5kaWFnID0gZXhwb3J0cy5jb25jYXQgPSBleHBvcnRzLm9yID0gZXhwb3J0cy5iaXRYb3IgPSBleHBvcnRzLmJpdEFuZCA9IGV4cG9ydHMueGdjZCA9IGV4cG9ydHMubnRoUm9vdCA9IGV4cG9ydHMubW9kID0gZXhwb3J0cy5nY2QgPSB2b2lkIDA7XG5leHBvcnRzLnJ5ZGJlcmcgPSBleHBvcnRzLm1hZCA9IGV4cG9ydHMuY291bG9tYiA9IGV4cG9ydHMubWFnbmV0aWNGbHV4UXVhbnR1bSA9IGV4cG9ydHMuc2V0VW5pb24gPSBleHBvcnRzLnBsYW5ja0NvbnN0YW50ID0gZXhwb3J0cy5nYXNDb25zdGFudCA9IGV4cG9ydHMubWVkaWFuID0gZXhwb3J0cy5sb2cxcCA9IGV4cG9ydHMudGhvbXNvbkNyb3NzU2VjdGlvbiA9IGV4cG9ydHMucGxhbmNrVGltZSA9IGV4cG9ydHMubW9sYXJWb2x1bWUgPSBleHBvcnRzLmludmVyc2VDb25kdWN0YW5jZVF1YW50dW0gPSBleHBvcnRzLmVsZW1lbnRhcnlDaGFyZ2UgPSBleHBvcnRzLmJvaHJSYWRpdXMgPSBleHBvcnRzLmtsZGl2ZXJnZW5jZSA9IGV4cG9ydHMuc3FydG0gPSBleHBvcnRzLnVuaXQgPSBleHBvcnRzLmxvZyA9IGV4cG9ydHMud2llbkRpc3BsYWNlbWVudCA9IGV4cG9ydHMuc3BlZWRPZkxpZ2h0ID0gZXhwb3J0cy5xdWFudHVtT2ZDaXJjdWxhdGlvbiA9IGV4cG9ydHMucGxhbmNrTWFzcyA9IGV4cG9ydHMubnVjbGVhck1hZ25ldG9uID0gZXhwb3J0cy5tb2xhck1hc3NDMTIgPSBleHBvcnRzLmxvc2NobWlkdCA9IGV4cG9ydHMuZ3Jhdml0eSA9IGV4cG9ydHMuZmVybWlDb3VwbGluZyA9IGV4cG9ydHMuZWxlY3RyaWNDb25zdGFudCA9IGV4cG9ydHMuY2xhc3NpY2FsRWxlY3Ryb25SYWRpdXMgPSBleHBvcnRzLmF2b2dhZHJvID0gZXhwb3J0cy5iZWxsTnVtYmVycyA9IGV4cG9ydHMuaW50ZXJzZWN0ID0gZXhwb3J0cy5laWdzID0gZXhwb3J0cy5sdXNvbHZlID0gZXhwb3J0cy5zZXRJbnRlcnNlY3QgPSBleHBvcnRzLnVzb2x2ZSA9IGV4cG9ydHMuY29sdW1uID0gZXhwb3J0cy52YWN1dW1JbXBlZGFuY2UgPSBleHBvcnRzLnN0ZWZhbkJvbHR6bWFubiA9IGV4cG9ydHMuc2Vjb25kUmFkaWF0aW9uID0gZXhwb3J0cy5yZWR1Y2VkUGxhbmNrQ29uc3RhbnQgPSBleHBvcnRzLnByb3Rvbk1hc3MgPSBleHBvcnRzLnBsYW5ja1RlbXBlcmF0dXJlID0gZXhwb3J0cy5wbGFuY2tMZW5ndGggPSBleHBvcnRzLnBsYW5ja0NoYXJnZSA9IGV4cG9ydHMubmV1dHJvbk1hc3MgPSBleHBvcnRzLm1vbGFyUGxhbmNrQ29uc3RhbnQgPSBleHBvcnRzLm1vbGFyTWFzcyA9IGV4cG9ydHMubWFnbmV0aWNDb25zdGFudCA9IGV4cG9ydHMua2xpdHppbmcgPSBleHBvcnRzLmhhcnRyZWVFbmVyZ3kgPSBleHBvcnRzLmdyYXZpdGF0aW9uQ29uc3RhbnQgPSBleHBvcnRzLmZpcnN0UmFkaWF0aW9uID0gZXhwb3J0cy5mYXJhZGF5ID0gZXhwb3J0cy5lbGVjdHJvbk1hc3MgPSBleHBvcnRzLmRldXRlcm9uTWFzcyA9IGV4cG9ydHMuY29uZHVjdGFuY2VRdWFudHVtID0gZXhwb3J0cy5ib2x0em1hbm4gPSBleHBvcnRzLmJvaHJNYWduZXRvbiA9IGV4cG9ydHMuYXRvbWljTWFzcyA9IGV4cG9ydHMubXVsdGlub21pYWwgPSBleHBvcnRzLnN0ZCA9IGV4cG9ydHMudmFyaWFuY2UgPSBleHBvcnRzLm1lYW4gPSBleHBvcnRzLmRpdmlkZSA9IGV4cG9ydHMuZXhwbSA9IGV4cG9ydHMuaW52ID0gZXhwb3J0cy5xciA9IGV4cG9ydHMuc2V0U3ltRGlmZmVyZW5jZSA9IGV4cG9ydHMuY3JlYXRlVW5pdCA9IGV4cG9ydHMuVW5pdCA9IGV4cG9ydHMuZG90RGl2aWRlID0gZXhwb3J0cy5yb3cgPSB2b2lkIDA7XG5cbnZhciBfY29uZmlnUmVhZG9ubHkgPSByZXF1aXJlKFwiLi9jb25maWdSZWFkb25seVwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vZmFjdG9yaWVzQW55XCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIFJlc3VsdFNldCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVJlc3VsdFNldCkoe30pO1xuZXhwb3J0cy5SZXN1bHRTZXQgPSBSZXN1bHRTZXQ7XG52YXIgQ29tcGxleCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbXBsZXhDbGFzcykoe30pO1xuZXhwb3J0cy5Db21wbGV4ID0gQ29tcGxleDtcbnZhciBSYW5nZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVJhbmdlQ2xhc3MpKHt9KTtcbmV4cG9ydHMuUmFuZ2UgPSBSYW5nZTtcbnZhciBleWUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVFeWUpKHt9KTtcbmV4cG9ydHMuZXllID0gZXllO1xuXG52YXIgX2ZhbHNlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRmFsc2UpKHt9KTtcblxuZXhwb3J0cy5fZmFsc2UgPSBfZmFsc2U7XG5cbnZhciBfbnVsbCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU51bGwpKHt9KTtcblxuZXhwb3J0cy5fbnVsbCA9IF9udWxsO1xuXG52YXIgX3RydWUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVUcnVlKSh7fSk7XG5cbmV4cG9ydHMuX3RydWUgPSBfdHJ1ZTtcbnZhciBCaWdOdW1iZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVCaWdOdW1iZXJDbGFzcykoe1xuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5CaWdOdW1iZXIgPSBCaWdOdW1iZXI7XG52YXIgTWF0cml4ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTWF0cml4Q2xhc3MpKHt9KTtcbmV4cG9ydHMuTWF0cml4ID0gTWF0cml4O1xudmFyIHJlcGxhY2VyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUmVwbGFjZXIpKHt9KTtcbmV4cG9ydHMucmVwbGFjZXIgPSByZXBsYWNlcjtcbnZhciBpID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlSSkoe1xuICBDb21wbGV4OiBDb21wbGV4XG59KTtcbmV4cG9ydHMuaSA9IGk7XG52YXIgTE4xMCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUxOMTApKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLkxOMTAgPSBMTjEwO1xudmFyIExPRzEwRSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUxPRzEwRSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuTE9HMTBFID0gTE9HMTBFO1xuXG52YXIgX05hTiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU5hTikoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcblxuZXhwb3J0cy5fTmFOID0gX05hTjtcbnZhciBwaSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVBpKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5waSA9IHBpO1xudmFyIFNRUlQxXzIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTUVJUMV8yKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5TUVJUMV8yID0gU1FSVDFfMjtcbnZhciB0YXUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVUYXUpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLnRhdSA9IHRhdTtcbnZhciBlZmltb3ZGYWN0b3IgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVFZmltb3ZGYWN0b3IpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmVmaW1vdkZhY3RvciA9IGVmaW1vdkZhY3RvcjtcbnZhciBmaW5lU3RydWN0dXJlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRmluZVN0cnVjdHVyZSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuZmluZVN0cnVjdHVyZSA9IGZpbmVTdHJ1Y3R1cmU7XG52YXIgc2Fja3VyVGV0cm9kZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNhY2t1clRldHJvZGUpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLnNhY2t1clRldHJvZGUgPSBzYWNrdXJUZXRyb2RlO1xudmFyIHdlYWtNaXhpbmdBbmdsZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVdlYWtNaXhpbmdBbmdsZSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMud2Vha01peGluZ0FuZ2xlID0gd2Vha01peGluZ0FuZ2xlO1xudmFyIEZyYWN0aW9uID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRnJhY3Rpb25DbGFzcykoe30pO1xuZXhwb3J0cy5GcmFjdGlvbiA9IEZyYWN0aW9uO1xudmFyIGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVFKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5lID0gZTtcblxudmFyIF9JbmZpbml0eSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUluZmluaXR5KSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuXG5leHBvcnRzLl9JbmZpbml0eSA9IF9JbmZpbml0eTtcbnZhciBMT0cyRSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUxPRzJFKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5MT0cyRSA9IExPRzJFO1xudmFyIHZlcnNpb24gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVWZXJzaW9uKSh7fSk7XG5leHBvcnRzLnZlcnNpb24gPSB2ZXJzaW9uO1xudmFyIERlbnNlTWF0cml4ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRGVuc2VNYXRyaXhDbGFzcykoe1xuICBNYXRyaXg6IE1hdHJpeFxufSk7XG5leHBvcnRzLkRlbnNlTWF0cml4ID0gRGVuc2VNYXRyaXg7XG52YXIgcGhpID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUGhpKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5waGkgPSBwaGk7XG52YXIgdHlwZWQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVUeXBlZCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBGcmFjdGlvbjogRnJhY3Rpb25cbn0pO1xuZXhwb3J0cy50eXBlZCA9IHR5cGVkO1xudmFyIGlzSW50ZWdlciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUlzSW50ZWdlcikoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5pc0ludGVnZXIgPSBpc0ludGVnZXI7XG52YXIgaXNOdW1lcmljID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlSXNOdW1lcmljKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmlzTnVtZXJpYyA9IGlzTnVtZXJpYztcbnZhciBpc1Bvc2l0aXZlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlSXNQb3NpdGl2ZSkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5pc1Bvc2l0aXZlID0gaXNQb3NpdGl2ZTtcbnZhciBpc05hTiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUlzTmFOKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmlzTmFOID0gaXNOYU47XG52YXIgZXF1YWxTY2FsYXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVFcXVhbFNjYWxhcikoe1xuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmVxdWFsU2NhbGFyID0gZXF1YWxTY2FsYXI7XG52YXIgbnVtYmVyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTnVtYmVyKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm51bWJlciA9IG51bWJlcjtcblxudmFyIF9ib29sZWFuID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQm9vbGVhbikoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuXG5leHBvcnRzW1wiYm9vbGVhblwiXSA9IF9ib29sZWFuO1xudmFyIGNvbXBsZXggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb21wbGV4KSh7XG4gIENvbXBsZXg6IENvbXBsZXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNvbXBsZXggPSBjb21wbGV4O1xudmFyIHNwbGl0VW5pdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNwbGl0VW5pdCkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5zcGxpdFVuaXQgPSBzcGxpdFVuaXQ7XG52YXIgdW5hcnlQbHVzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlVW5hcnlQbHVzKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnVuYXJ5UGx1cyA9IHVuYXJ5UGx1cztcbnZhciBhcHBseSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUFwcGx5KSh7XG4gIGlzSW50ZWdlcjogaXNJbnRlZ2VyLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5hcHBseSA9IGFwcGx5O1xudmFyIGN1YmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDdWJlKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmN1YmUgPSBjdWJlO1xudmFyIGV4cG0xID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRXhwbTEpKHtcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZXhwbTEgPSBleHBtMTtcbnZhciBsb2cxMCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUxvZzEwKSh7XG4gIENvbXBsZXg6IENvbXBsZXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMubG9nMTAgPSBsb2cxMDtcbnZhciBtdWx0aXBseVNjYWxhciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU11bHRpcGx5U2NhbGFyKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm11bHRpcGx5U2NhbGFyID0gbXVsdGlwbHlTY2FsYXI7XG52YXIgc2lnbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNpZ24pKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIEZyYWN0aW9uOiBGcmFjdGlvbixcbiAgY29tcGxleDogY29tcGxleCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc2lnbiA9IHNpZ247XG52YXIgc3F1YXJlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3F1YXJlKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNxdWFyZSA9IHNxdWFyZTtcbnZhciBiaXROb3QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVCaXROb3QpKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuYml0Tm90ID0gYml0Tm90O1xudmFyIGFyZyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUFyZykoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5hcmcgPSBhcmc7XG52YXIgaW0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVJbSkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5pbSA9IGltO1xudmFyIG5vdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU5vdCkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5ub3QgPSBub3Q7XG52YXIgZmlsdGVyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRmlsdGVyKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmZpbHRlciA9IGZpbHRlcjtcbnZhciBmb3JFYWNoID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRm9yRWFjaCkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5mb3JFYWNoID0gZm9yRWFjaDtcbnZhciBtYXAgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVNYXApKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMubWFwID0gbWFwO1xudmFyIGVyZiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUVyZikoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5lcmYgPSBlcmY7XG52YXIgZm9ybWF0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRm9ybWF0KSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmZvcm1hdCA9IGZvcm1hdDtcbnZhciBpc1ByaW1lID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlSXNQcmltZSkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5pc1ByaW1lID0gaXNQcmltZTtcbnZhciBhY29zID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQWNvcykoe1xuICBDb21wbGV4OiBDb21wbGV4LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmFjb3MgPSBhY29zO1xudmFyIGFjb3QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVBY290KSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5hY290ID0gYWNvdDtcbnZhciBhY3NjID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQWNzYykoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5hY3NjID0gYWNzYztcbnZhciBhc2VjID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQXNlYykoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5hc2VjID0gYXNlYztcbnZhciBhc2luID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQXNpbikoe1xuICBDb21wbGV4OiBDb21wbGV4LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmFzaW4gPSBhc2luO1xudmFyIGF0YW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVBdGFuKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmF0YW4gPSBhdGFuO1xudmFyIGF0YW5oID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQXRhbmgpKHtcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5hdGFuaCA9IGF0YW5oO1xudmFyIGNvc2ggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb3NoKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNvc2ggPSBjb3NoO1xudmFyIGNvdGggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb3RoKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5jb3RoID0gY290aDtcbnZhciBjc2NoID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ3NjaCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuY3NjaCA9IGNzY2g7XG52YXIgc2VjaCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNlY2gpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNlY2ggPSBzZWNoO1xudmFyIHNpbmggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTaW5oKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNpbmggPSBzaW5oO1xudmFyIHRhbmggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVUYW5oKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnRhbmggPSB0YW5oO1xudmFyIGNvbWJpbmF0aW9ucyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbWJpbmF0aW9ucykoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5jb21iaW5hdGlvbnMgPSBjb21iaW5hdGlvbnM7XG52YXIgcGlja1JhbmRvbSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVBpY2tSYW5kb20pKHtcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5waWNrUmFuZG9tID0gcGlja1JhbmRvbTtcbnZhciByYW5kb21JbnQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSYW5kb21JbnQpKHtcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5yYW5kb21JbnQgPSByYW5kb21JbnQ7XG52YXIgTE4yID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTE4yKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5MTjIgPSBMTjI7XG52YXIgY2xvbmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDbG9uZSkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5jbG9uZSA9IGNsb25lO1xudmFyIGhhc051bWVyaWNWYWx1ZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUhhc051bWVyaWNWYWx1ZSkoe1xuICBpc051bWVyaWM6IGlzTnVtZXJpYyxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuaGFzTnVtZXJpY1ZhbHVlID0gaGFzTnVtZXJpY1ZhbHVlO1xudmFyIHR5cGVPZiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVR5cGVPZikoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy50eXBlT2YgPSB0eXBlT2Y7XG52YXIgc3RyaW5nID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3RyaW5nKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnN0cmluZyA9IHN0cmluZztcbnZhciBmcmFjdGlvbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUZyYWN0aW9uKSh7XG4gIEZyYWN0aW9uOiBGcmFjdGlvbixcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZnJhY3Rpb24gPSBmcmFjdGlvbjtcbnZhciB1bmFyeU1pbnVzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlVW5hcnlNaW51cykoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy51bmFyeU1pbnVzID0gdW5hcnlNaW51cztcbnZhciBhZGRTY2FsYXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVBZGRTY2FsYXIpKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuYWRkU2NhbGFyID0gYWRkU2NhbGFyO1xudmFyIGV4cCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUV4cCkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5leHAgPSBleHA7XG52YXIgbG9nMiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUxvZzIpKHtcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5sb2cyID0gbG9nMjtcbnZhciBzcXJ0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3FydCkoe1xuICBDb21wbGV4OiBDb21wbGV4LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNxcnQgPSBzcXJ0O1xudmFyIGNvbmogPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb25qKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNvbmogPSBjb25qO1xudmFyIGdldE1hdHJpeERhdGFUeXBlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlR2V0TWF0cml4RGF0YVR5cGUpKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZ2V0TWF0cml4RGF0YVR5cGUgPSBnZXRNYXRyaXhEYXRhVHlwZTtcbnZhciBtb2RlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTW9kZSkoe1xuICBpc05hTjogaXNOYU4sXG4gIGlzTnVtZXJpYzogaXNOdW1lcmljLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5tb2RlID0gbW9kZTtcbnZhciBwcmludCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVByaW50KSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnByaW50ID0gcHJpbnQ7XG52YXIgYWNvc2ggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVBY29zaCkoe1xuICBDb21wbGV4OiBDb21wbGV4LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmFjb3NoID0gYWNvc2g7XG52YXIgYWNzY2ggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVBY3NjaCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuYWNzY2ggPSBhY3NjaDtcbnZhciBhc2luaCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUFzaW5oKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmFzaW5oID0gYXNpbmg7XG52YXIgY29zID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29zKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNvcyA9IGNvcztcbnZhciBjc2MgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDc2MpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNzYyA9IGNzYztcbnZhciBzaW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTaW4pKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc2luID0gc2luO1xudmFyIGNvbWJpbmF0aW9uc1dpdGhSZXAgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb21iaW5hdGlvbnNXaXRoUmVwKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNvbWJpbmF0aW9uc1dpdGhSZXAgPSBjb21iaW5hdGlvbnNXaXRoUmVwO1xudmFyIHJhbmRvbSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVJhbmRvbSkoe1xuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnJhbmRvbSA9IHJhbmRvbTtcbnZhciBTUVJUMiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNRUlQyKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5TUVJUMiA9IFNRUlQyO1xudmFyIGlzTmVnYXRpdmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVJc05lZ2F0aXZlKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmlzTmVnYXRpdmUgPSBpc05lZ2F0aXZlO1xudmFyIFNwYXJzZU1hdHJpeCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNwYXJzZU1hdHJpeENsYXNzKSh7XG4gIE1hdHJpeDogTWF0cml4LFxuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLlNwYXJzZU1hdHJpeCA9IFNwYXJzZU1hdHJpeDtcbnZhciBtYXRyaXggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVNYXRyaXgpKHtcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBNYXRyaXg6IE1hdHJpeCxcbiAgU3BhcnNlTWF0cml4OiBTcGFyc2VNYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm1hdHJpeCA9IG1hdHJpeDtcbnZhciBjYnJ0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ2JydCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgRnJhY3Rpb246IEZyYWN0aW9uLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIGlzTmVnYXRpdmU6IGlzTmVnYXRpdmUsXG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWQsXG4gIHVuYXJ5TWludXM6IHVuYXJ5TWludXNcbn0pO1xuZXhwb3J0cy5jYnJ0ID0gY2JydDtcbnZhciBnY2QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVHY2QpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZ2NkID0gZ2NkO1xudmFyIG1vZCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU1vZCkoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm1vZCA9IG1vZDtcbnZhciBudGhSb290ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTnRoUm9vdCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMubnRoUm9vdCA9IG50aFJvb3Q7XG52YXIgeGdjZCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVhnY2QpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnhnY2QgPSB4Z2NkO1xudmFyIGJpdEFuZCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUJpdEFuZCkoe1xuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5iaXRBbmQgPSBiaXRBbmQ7XG52YXIgYml0WG9yID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQml0WG9yKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmJpdFhvciA9IGJpdFhvcjtcbnZhciBvciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU9yKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMub3IgPSBvcjtcbnZhciBjb25jYXQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb25jYXQpKHtcbiAgaXNJbnRlZ2VyOiBpc0ludGVnZXIsXG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5jb25jYXQgPSBjb25jYXQ7XG52YXIgZGlhZyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZURpYWcpKHtcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBTcGFyc2VNYXRyaXg6IFNwYXJzZU1hdHJpeCxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmRpYWcgPSBkaWFnO1xudmFyIGlkZW50aXR5ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlSWRlbnRpdHkpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgU3BhcnNlTWF0cml4OiBTcGFyc2VNYXRyaXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmlkZW50aXR5ID0gaWRlbnRpdHk7XG52YXIgb25lcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU9uZXMpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm9uZXMgPSBvbmVzO1xudmFyIHJlc2hhcGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSZXNoYXBlKSh7XG4gIGlzSW50ZWdlcjogaXNJbnRlZ2VyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMucmVzaGFwZSA9IHJlc2hhcGU7XG52YXIgc2l6ZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNpemUpKHtcbiAgbWF0cml4OiBtYXRyaXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc2l6ZSA9IHNpemU7XG52YXIgc3Vic2V0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3Vic2V0KSh7XG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5zdWJzZXQgPSBzdWJzZXQ7XG52YXIgemVyb3MgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVaZXJvcykoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuemVyb3MgPSB6ZXJvcztcbnZhciB0byA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVRvKSh7XG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy50byA9IHRvO1xudmFyIHJvdW5kID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUm91bmQpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkLFxuICB6ZXJvczogemVyb3Ncbn0pO1xuZXhwb3J0cy5yb3VuZCA9IHJvdW5kO1xudmFyIGxlZnRTaGlmdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUxlZnRTaGlmdCkoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZCxcbiAgemVyb3M6IHplcm9zXG59KTtcbmV4cG9ydHMubGVmdFNoaWZ0ID0gbGVmdFNoaWZ0O1xudmFyIHJpZ2h0TG9nU2hpZnQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSaWdodExvZ1NoaWZ0KSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkLFxuICB6ZXJvczogemVyb3Ncbn0pO1xuZXhwb3J0cy5yaWdodExvZ1NoaWZ0ID0gcmlnaHRMb2dTaGlmdDtcbnZhciBjb21wYXJlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29tcGFyZSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBGcmFjdGlvbjogRnJhY3Rpb24sXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuY29tcGFyZSA9IGNvbXBhcmU7XG52YXIgY29tcGFyZVRleHQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb21wYXJlVGV4dCkoe1xuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuY29tcGFyZVRleHQgPSBjb21wYXJlVGV4dDtcbnZhciBzbWFsbGVyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU21hbGxlcikoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNtYWxsZXIgPSBzbWFsbGVyO1xudmFyIGxhcmdlciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUxhcmdlcikoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmxhcmdlciA9IGxhcmdlcjtcbnZhciB1bmVxdWFsID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlVW5lcXVhbCkoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMudW5lcXVhbCA9IHVuZXF1YWw7XG52YXIgbWF4ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTWF4KSh7XG4gIGxhcmdlcjogbGFyZ2VyLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5tYXggPSBtYXg7XG52YXIgSW1tdXRhYmxlRGVuc2VNYXRyaXggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVJbW11dGFibGVEZW5zZU1hdHJpeENsYXNzKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgc21hbGxlcjogc21hbGxlclxufSk7XG5leHBvcnRzLkltbXV0YWJsZURlbnNlTWF0cml4ID0gSW1tdXRhYmxlRGVuc2VNYXRyaXg7XG52YXIgRmlib25hY2NpSGVhcCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUZpYm9uYWNjaUhlYXBDbGFzcykoe1xuICBsYXJnZXI6IGxhcmdlcixcbiAgc21hbGxlcjogc21hbGxlclxufSk7XG5leHBvcnRzLkZpYm9uYWNjaUhlYXAgPSBGaWJvbmFjY2lIZWFwO1xudmFyIHNwYXJzZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNwYXJzZSkoe1xuICBTcGFyc2VNYXRyaXg6IFNwYXJzZU1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc3BhcnNlID0gc3BhcnNlO1xudmFyIGFjb3RoID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQWNvdGgpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIENvbXBsZXg6IENvbXBsZXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuYWNvdGggPSBhY290aDtcbnZhciBhdGFuMiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUF0YW4yKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmF0YW4yID0gYXRhbjI7XG52YXIgc2VjID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU2VjKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5zZWMgPSBzZWM7XG52YXIgYWRkID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQWRkKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgU3BhcnNlTWF0cml4OiBTcGFyc2VNYXRyaXgsXG4gIGFkZFNjYWxhcjogYWRkU2NhbGFyLFxuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5hZGQgPSBhZGQ7XG52YXIgdHJhY2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVUcmFjZSkoe1xuICBhZGQ6IGFkZCxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnRyYWNlID0gdHJhY2U7XG52YXIgY29tcG9zaXRpb24gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb21wb3NpdGlvbikoe1xuICBhZGRTY2FsYXI6IGFkZFNjYWxhcixcbiAgY29tYmluYXRpb25zOiBjb21iaW5hdGlvbnMsXG4gIGlzSW50ZWdlcjogaXNJbnRlZ2VyLFxuICBpc05lZ2F0aXZlOiBpc05lZ2F0aXZlLFxuICBpc1Bvc2l0aXZlOiBpc1Bvc2l0aXZlLFxuICBsYXJnZXI6IGxhcmdlcixcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuY29tcG9zaXRpb24gPSBjb21wb3NpdGlvbjtcbnZhciBpc1plcm8gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVJc1plcm8pKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuaXNaZXJvID0gaXNaZXJvO1xudmFyIGFicyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUFicykoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5hYnMgPSBhYnM7XG52YXIgZmxvb3IgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVGbG9vcikoe1xuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIHJvdW5kOiByb3VuZCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZmxvb3IgPSBmbG9vcjtcbnZhciBtdWx0aXBseSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU11bHRpcGx5KSh7XG4gIGFkZFNjYWxhcjogYWRkU2NhbGFyLFxuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIG1hdHJpeDogbWF0cml4LFxuICBtdWx0aXBseVNjYWxhcjogbXVsdGlwbHlTY2FsYXIsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm11bHRpcGx5ID0gbXVsdGlwbHk7XG52YXIgZG90TXVsdGlwbHkgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVEb3RNdWx0aXBseSkoe1xuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIG1hdHJpeDogbWF0cml4LFxuICBtdWx0aXBseVNjYWxhcjogbXVsdGlwbHlTY2FsYXIsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmRvdE11bHRpcGx5ID0gZG90TXVsdGlwbHk7XG52YXIgcmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSZSkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5yZSA9IHJlO1xudmFyIGZsYXR0ZW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVGbGF0dGVuKSh7XG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5mbGF0dGVuID0gZmxhdHRlbjtcbnZhciByZXNpemUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSZXNpemUpKHtcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICBtYXRyaXg6IG1hdHJpeFxufSk7XG5leHBvcnRzLnJlc2l6ZSA9IHJlc2l6ZTtcbnZhciBzcXVlZXplID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3F1ZWV6ZSkoe1xuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc3F1ZWV6ZSA9IHNxdWVlemU7XG52YXIgcHJvZCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVByb2QpKHtcbiAgbXVsdGlwbHk6IG11bHRpcGx5LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5wcm9kID0gcHJvZDtcbnZhciBwb3cgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVQb3cpKHtcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICBmcmFjdGlvbjogZnJhY3Rpb24sXG4gIGlkZW50aXR5OiBpZGVudGl0eSxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgbnVtYmVyOiBudW1iZXIsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnBvdyA9IHBvdztcbnZhciBkb3RQb3cgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVEb3RQb3cpKHtcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIG1hdHJpeDogbWF0cml4LFxuICBwb3c6IHBvdyxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZG90UG93ID0gZG90UG93O1xudmFyIHJpZ2h0QXJpdGhTaGlmdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVJpZ2h0QXJpdGhTaGlmdCkoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZCxcbiAgemVyb3M6IHplcm9zXG59KTtcbmV4cG9ydHMucmlnaHRBcml0aFNoaWZ0ID0gcmlnaHRBcml0aFNoaWZ0O1xudmFyIGNvbXBhcmVOYXR1cmFsID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29tcGFyZU5hdHVyYWwpKHtcbiAgY29tcGFyZTogY29tcGFyZSxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuY29tcGFyZU5hdHVyYWwgPSBjb21wYXJlTmF0dXJhbDtcbnZhciBlcXVhbFRleHQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVFcXVhbFRleHQpKHtcbiAgY29tcGFyZVRleHQ6IGNvbXBhcmVUZXh0LFxuICBpc1plcm86IGlzWmVybyxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZXF1YWxUZXh0ID0gZXF1YWxUZXh0O1xudmFyIGxhcmdlckVxID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTGFyZ2VyRXEpKHtcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5sYXJnZXJFcSA9IGxhcmdlckVxO1xudmFyIHBhcnRpdGlvblNlbGVjdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVBhcnRpdGlvblNlbGVjdCkoe1xuICBjb21wYXJlOiBjb21wYXJlLFxuICBpc05hTjogaXNOYU4sXG4gIGlzTnVtZXJpYzogaXNOdW1lcmljLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5wYXJ0aXRpb25TZWxlY3QgPSBwYXJ0aXRpb25TZWxlY3Q7XG52YXIgbWluID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTWluKSh7XG4gIHNtYWxsZXI6IHNtYWxsZXIsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm1pbiA9IG1pbjtcbnZhciBTcGEgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTcGFDbGFzcykoe1xuICBGaWJvbmFjY2lIZWFwOiBGaWJvbmFjY2lIZWFwLFxuICBhZGRTY2FsYXI6IGFkZFNjYWxhcixcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG59KTtcbmV4cG9ydHMuU3BhID0gU3BhO1xudmFyIGFzZWNoID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQXNlY2gpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIENvbXBsZXg6IENvbXBsZXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuYXNlY2ggPSBhc2VjaDtcbnZhciB0YW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVUYW4pKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMudGFuID0gdGFuO1xudmFyIHNldFNpemUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTZXRTaXplKSh7XG4gIGNvbXBhcmVOYXR1cmFsOiBjb21wYXJlTmF0dXJhbCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc2V0U2l6ZSA9IHNldFNpemU7XG52YXIgbm9ybSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU5vcm0pKHtcbiAgYWJzOiBhYnMsXG4gIGFkZDogYWRkLFxuICBjb25qOiBjb25qLFxuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIGxhcmdlcjogbGFyZ2VyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgbXVsdGlwbHk6IG11bHRpcGx5LFxuICBwb3c6IHBvdyxcbiAgc21hbGxlcjogc21hbGxlcixcbiAgc3FydDogc3FydCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMubm9ybSA9IG5vcm07XG52YXIgcXVhbnRpbGVTZXEgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVRdWFudGlsZVNlcSkoe1xuICBhZGQ6IGFkZCxcbiAgY29tcGFyZTogY29tcGFyZSxcbiAgbXVsdGlwbHk6IG11bHRpcGx5LFxuICBwYXJ0aXRpb25TZWxlY3Q6IHBhcnRpdGlvblNlbGVjdCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMucXVhbnRpbGVTZXEgPSBxdWFudGlsZVNlcTtcbnZhciBnYW1tYSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUdhbW1hKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBDb21wbGV4OiBDb21wbGV4LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIG11bHRpcGx5U2NhbGFyOiBtdWx0aXBseVNjYWxhcixcbiAgcG93OiBwb3csXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmdhbW1hID0gZ2FtbWE7XG52YXIgYmlnbnVtYmVyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQmlnbnVtYmVyKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5iaWdudW1iZXIgPSBiaWdudW1iZXI7XG52YXIgbGNtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTGNtKSh7XG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmxjbSA9IGxjbTtcbnZhciBiaXRPciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUJpdE9yKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuYml0T3IgPSBiaXRPcjtcbnZhciBrcm9uID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlS3Jvbikoe1xuICBtYXRyaXg6IG1hdHJpeCxcbiAgbXVsdGlwbHlTY2FsYXI6IG11bHRpcGx5U2NhbGFyLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5rcm9uID0ga3JvbjtcbnZhciB0cmFuc3Bvc2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVUcmFuc3Bvc2UpKHtcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnRyYW5zcG9zZSA9IHRyYW5zcG9zZTtcbnZhciBudW1lcmljID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTnVtZXJpYykoe1xuICBiaWdudW1iZXI6IGJpZ251bWJlcixcbiAgZnJhY3Rpb246IGZyYWN0aW9uLFxuICBudW1iZXI6IG51bWJlclxufSk7XG5leHBvcnRzLm51bWVyaWMgPSBudW1lcmljO1xudmFyIGFuZCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUFuZCkoe1xuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIG1hdHJpeDogbWF0cml4LFxuICBub3Q6IG5vdCxcbiAgdHlwZWQ6IHR5cGVkLFxuICB6ZXJvczogemVyb3Ncbn0pO1xuZXhwb3J0cy5hbmQgPSBhbmQ7XG52YXIgc21hbGxlckVxID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU21hbGxlckVxKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc21hbGxlckVxID0gc21hbGxlckVxO1xudmFyIHNvcnQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTb3J0KSh7XG4gIGNvbXBhcmU6IGNvbXBhcmUsXG4gIGNvbXBhcmVOYXR1cmFsOiBjb21wYXJlTmF0dXJhbCxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNvcnQgPSBzb3J0O1xudmFyIGNvdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvdCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuY290ID0gY290O1xudmFyIGRvdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZURvdCkoe1xuICBhZGQ6IGFkZCxcbiAgbXVsdGlwbHk6IG11bHRpcGx5LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5kb3QgPSBkb3Q7XG52YXIgc3VtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3VtKSh7XG4gIGJpZ251bWJlcjogYmlnbnVtYmVyLFxuICBmcmFjdGlvbjogZnJhY3Rpb24sXG4gIGFkZDogYWRkLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnN1bSA9IHN1bTtcbnZhciBmYWN0b3JpYWwgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVGYWN0b3JpYWwpKHtcbiAgZ2FtbWE6IGdhbW1hLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5mYWN0b3JpYWwgPSBmYWN0b3JpYWw7XG52YXIgcGVybXV0YXRpb25zID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUGVybXV0YXRpb25zKSh7XG4gIGZhY3RvcmlhbDogZmFjdG9yaWFsLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5wZXJtdXRhdGlvbnMgPSBwZXJtdXRhdGlvbnM7XG52YXIgY2VpbCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNlaWwpKHtcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICByb3VuZDogcm91bmQsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNlaWwgPSBjZWlsO1xudmFyIHN1YnRyYWN0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3VidHJhY3QpKHtcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBhZGRTY2FsYXI6IGFkZFNjYWxhcixcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkLFxuICB1bmFyeU1pbnVzOiB1bmFyeU1pbnVzXG59KTtcbmV4cG9ydHMuc3VidHJhY3QgPSBzdWJ0cmFjdDtcbnZhciBjcm9zcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNyb3NzKSh7XG4gIG1hdHJpeDogbWF0cml4LFxuICBtdWx0aXBseTogbXVsdGlwbHksXG4gIHN1YnRyYWN0OiBzdWJ0cmFjdCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuY3Jvc3MgPSBjcm9zcztcbnZhciBjdHJhbnNwb3NlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ3RyYW5zcG9zZSkoe1xuICBjb25qOiBjb25qLFxuICB0cmFuc3Bvc2U6IHRyYW5zcG9zZSxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuY3RyYW5zcG9zZSA9IGN0cmFuc3Bvc2U7XG52YXIgZXF1YWwgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVFcXVhbCkoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmVxdWFsID0gZXF1YWw7XG52YXIgSW5kZXggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVJbmRleENsYXNzKSh7XG4gIEltbXV0YWJsZURlbnNlTWF0cml4OiBJbW11dGFibGVEZW5zZU1hdHJpeFxufSk7XG5leHBvcnRzLkluZGV4ID0gSW5kZXg7XG52YXIgc2V0Q2FydGVzaWFuID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU2V0Q2FydGVzaWFuKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgSW5kZXg6IEluZGV4LFxuICBjb21wYXJlTmF0dXJhbDogY29tcGFyZU5hdHVyYWwsXG4gIHNpemU6IHNpemUsXG4gIHN1YnNldDogc3Vic2V0LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5zZXRDYXJ0ZXNpYW4gPSBzZXRDYXJ0ZXNpYW47XG52YXIgc2V0RGlzdGluY3QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTZXREaXN0aW5jdCkoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIEluZGV4OiBJbmRleCxcbiAgY29tcGFyZU5hdHVyYWw6IGNvbXBhcmVOYXR1cmFsLFxuICBzaXplOiBzaXplLFxuICBzdWJzZXQ6IHN1YnNldCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc2V0RGlzdGluY3QgPSBzZXREaXN0aW5jdDtcbnZhciBzZXRJc1N1YnNldCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNldElzU3Vic2V0KSh7XG4gIEluZGV4OiBJbmRleCxcbiAgY29tcGFyZU5hdHVyYWw6IGNvbXBhcmVOYXR1cmFsLFxuICBzaXplOiBzaXplLFxuICBzdWJzZXQ6IHN1YnNldCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc2V0SXNTdWJzZXQgPSBzZXRJc1N1YnNldDtcbnZhciBzZXRQb3dlcnNldCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNldFBvd2Vyc2V0KSh7XG4gIEluZGV4OiBJbmRleCxcbiAgY29tcGFyZU5hdHVyYWw6IGNvbXBhcmVOYXR1cmFsLFxuICBzaXplOiBzaXplLFxuICBzdWJzZXQ6IHN1YnNldCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc2V0UG93ZXJzZXQgPSBzZXRQb3dlcnNldDtcbnZhciBpbmRleCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUluZGV4KSh7XG4gIEluZGV4OiBJbmRleCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuaW5kZXggPSBpbmRleDtcbnZhciBmaXggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVGaXgpKHtcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgY2VpbDogY2VpbCxcbiAgZmxvb3I6IGZsb29yLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5maXggPSBmaXg7XG52YXIgcmFuZ2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSYW5nZSkoe1xuICBiaWdudW1iZXI6IGJpZ251bWJlcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgbGFyZ2VyOiBsYXJnZXIsXG4gIGxhcmdlckVxOiBsYXJnZXJFcSxcbiAgc21hbGxlcjogc21hbGxlcixcbiAgc21hbGxlckVxOiBzbWFsbGVyRXEsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnJhbmdlID0gcmFuZ2U7XG52YXIgZGl2aWRlU2NhbGFyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRGl2aWRlU2NhbGFyKSh7XG4gIG51bWVyaWM6IG51bWVyaWMsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmRpdmlkZVNjYWxhciA9IGRpdmlkZVNjYWxhcjtcbnZhciBudGhSb290cyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU50aFJvb3RzKSh7XG4gIENvbXBsZXg6IENvbXBsZXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgZGl2aWRlU2NhbGFyOiBkaXZpZGVTY2FsYXIsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm50aFJvb3RzID0gbnRoUm9vdHM7XG52YXIgbHNvbHZlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTHNvbHZlKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgZGl2aWRlU2NhbGFyOiBkaXZpZGVTY2FsYXIsXG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIG11bHRpcGx5U2NhbGFyOiBtdWx0aXBseVNjYWxhcixcbiAgc3VidHJhY3Q6IHN1YnRyYWN0LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5sc29sdmUgPSBsc29sdmU7XG52YXIgZGVlcEVxdWFsID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRGVlcEVxdWFsKSh7XG4gIGVxdWFsOiBlcXVhbCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZGVlcEVxdWFsID0gZGVlcEVxdWFsO1xudmFyIHNldERpZmZlcmVuY2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTZXREaWZmZXJlbmNlKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgSW5kZXg6IEluZGV4LFxuICBjb21wYXJlTmF0dXJhbDogY29tcGFyZU5hdHVyYWwsXG4gIHNpemU6IHNpemUsXG4gIHN1YnNldDogc3Vic2V0LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5zZXREaWZmZXJlbmNlID0gc2V0RGlmZmVyZW5jZTtcbnZhciBzZXRNdWx0aXBsaWNpdHkgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTZXRNdWx0aXBsaWNpdHkpKHtcbiAgSW5kZXg6IEluZGV4LFxuICBjb21wYXJlTmF0dXJhbDogY29tcGFyZU5hdHVyYWwsXG4gIHNpemU6IHNpemUsXG4gIHN1YnNldDogc3Vic2V0LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5zZXRNdWx0aXBsaWNpdHkgPSBzZXRNdWx0aXBsaWNpdHk7XG52YXIgaHlwb3QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVIeXBvdCkoe1xuICBhYnM6IGFicyxcbiAgYWRkU2NhbGFyOiBhZGRTY2FsYXIsXG4gIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICBpc1Bvc2l0aXZlOiBpc1Bvc2l0aXZlLFxuICBtdWx0aXBseVNjYWxhcjogbXVsdGlwbHlTY2FsYXIsXG4gIHNtYWxsZXI6IHNtYWxsZXIsXG4gIHNxcnQ6IHNxcnQsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmh5cG90ID0gaHlwb3Q7XG52YXIgbHVwID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTHVwKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgU3BhOiBTcGEsXG4gIFNwYXJzZU1hdHJpeDogU3BhcnNlTWF0cml4LFxuICBhYnM6IGFicyxcbiAgYWRkU2NhbGFyOiBhZGRTY2FsYXIsXG4gIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIGxhcmdlcjogbGFyZ2VyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgbXVsdGlwbHlTY2FsYXI6IG11bHRpcGx5U2NhbGFyLFxuICBzdWJ0cmFjdDogc3VidHJhY3QsXG4gIHR5cGVkOiB0eXBlZCxcbiAgdW5hcnlNaW51czogdW5hcnlNaW51c1xufSk7XG5leHBvcnRzLmx1cCA9IGx1cDtcbnZhciBzbHUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTbHUpKHtcbiAgU3BhcnNlTWF0cml4OiBTcGFyc2VNYXRyaXgsXG4gIGFiczogYWJzLFxuICBhZGQ6IGFkZCxcbiAgZGl2aWRlU2NhbGFyOiBkaXZpZGVTY2FsYXIsXG4gIGxhcmdlcjogbGFyZ2VyLFxuICBsYXJnZXJFcTogbGFyZ2VyRXEsXG4gIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgc3VidHJhY3Q6IHN1YnRyYWN0LFxuICB0cmFuc3Bvc2U6IHRyYW5zcG9zZSxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc2x1ID0gc2x1O1xudmFyIGRldCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZURldCkoe1xuICBsdXA6IGx1cCxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgc3VidHJhY3Q6IHN1YnRyYWN0LFxuICB0eXBlZDogdHlwZWQsXG4gIHVuYXJ5TWludXM6IHVuYXJ5TWludXNcbn0pO1xuZXhwb3J0cy5kZXQgPSBkZXQ7XG52YXIgZGlzdGFuY2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVEaXN0YW5jZSkoe1xuICBhYnM6IGFicyxcbiAgYWRkU2NhbGFyOiBhZGRTY2FsYXIsXG4gIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICBtdWx0aXBseVNjYWxhcjogbXVsdGlwbHlTY2FsYXIsXG4gIHNxcnQ6IHNxcnQsXG4gIHN1YnRyYWN0OiBzdWJ0cmFjdCxcbiAgdHlwZWQ6IHR5cGVkLFxuICB1bmFyeU1pbnVzOiB1bmFyeU1pbnVzXG59KTtcbmV4cG9ydHMuZGlzdGFuY2UgPSBkaXN0YW5jZTtcbnZhciBzdGlybGluZ1MyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3RpcmxpbmdTMikoe1xuICBhZGRTY2FsYXI6IGFkZFNjYWxhcixcbiAgY29tYmluYXRpb25zOiBjb21iaW5hdGlvbnMsXG4gIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICBmYWN0b3JpYWw6IGZhY3RvcmlhbCxcbiAgaXNJbnRlZ2VyOiBpc0ludGVnZXIsXG4gIGlzTmVnYXRpdmU6IGlzTmVnYXRpdmUsXG4gIGxhcmdlcjogbGFyZ2VyLFxuICBtdWx0aXBseVNjYWxhcjogbXVsdGlwbHlTY2FsYXIsXG4gIHBvdzogcG93LFxuICBzdWJ0cmFjdDogc3VidHJhY3QsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnN0aXJsaW5nUzIgPSBzdGlybGluZ1MyO1xudmFyIGNhdGFsYW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDYXRhbGFuKSh7XG4gIGFkZFNjYWxhcjogYWRkU2NhbGFyLFxuICBjb21iaW5hdGlvbnM6IGNvbWJpbmF0aW9ucyxcbiAgZGl2aWRlU2NhbGFyOiBkaXZpZGVTY2FsYXIsXG4gIGlzSW50ZWdlcjogaXNJbnRlZ2VyLFxuICBpc05lZ2F0aXZlOiBpc05lZ2F0aXZlLFxuICBtdWx0aXBseVNjYWxhcjogbXVsdGlwbHlTY2FsYXIsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNhdGFsYW4gPSBjYXRhbGFuO1xudmFyIHhvciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVhvcikoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy54b3IgPSB4b3I7XG52YXIgcm93ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUm93KSh7XG4gIEluZGV4OiBJbmRleCxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHJhbmdlOiByYW5nZSxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMucm93ID0gcm93O1xudmFyIGRvdERpdmlkZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZURvdERpdmlkZSkoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5kb3REaXZpZGUgPSBkb3REaXZpZGU7XG52YXIgVW5pdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVVuaXRDbGFzcykoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgRnJhY3Rpb246IEZyYWN0aW9uLFxuICBhYnM6IGFicyxcbiAgYWRkU2NhbGFyOiBhZGRTY2FsYXIsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgZGl2aWRlU2NhbGFyOiBkaXZpZGVTY2FsYXIsXG4gIGVxdWFsOiBlcXVhbCxcbiAgZml4OiBmaXgsXG4gIGZvcm1hdDogZm9ybWF0LFxuICBpc051bWVyaWM6IGlzTnVtZXJpYyxcbiAgbXVsdGlwbHlTY2FsYXI6IG11bHRpcGx5U2NhbGFyLFxuICBudW1iZXI6IG51bWJlcixcbiAgcG93OiBwb3csXG4gIHJvdW5kOiByb3VuZCxcbiAgc3VidHJhY3Q6IHN1YnRyYWN0XG59KTtcbmV4cG9ydHMuVW5pdCA9IFVuaXQ7XG52YXIgY3JlYXRlVW5pdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNyZWF0ZVVuaXQpKHtcbiAgVW5pdDogVW5pdCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuY3JlYXRlVW5pdCA9IGNyZWF0ZVVuaXQ7XG52YXIgc2V0U3ltRGlmZmVyZW5jZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNldFN5bURpZmZlcmVuY2UpKHtcbiAgSW5kZXg6IEluZGV4LFxuICBjb25jYXQ6IGNvbmNhdCxcbiAgc2V0RGlmZmVyZW5jZTogc2V0RGlmZmVyZW5jZSxcbiAgc2l6ZTogc2l6ZSxcbiAgc3Vic2V0OiBzdWJzZXQsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNldFN5bURpZmZlcmVuY2UgPSBzZXRTeW1EaWZmZXJlbmNlO1xudmFyIHFyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUXIpKHtcbiAgYWRkU2NhbGFyOiBhZGRTY2FsYXIsXG4gIGNvbXBsZXg6IGNvbXBsZXgsXG4gIGNvbmo6IGNvbmosXG4gIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICBlcXVhbDogZXF1YWwsXG4gIGlkZW50aXR5OiBpZGVudGl0eSxcbiAgaXNaZXJvOiBpc1plcm8sXG4gIG1hdHJpeDogbWF0cml4LFxuICBtdWx0aXBseVNjYWxhcjogbXVsdGlwbHlTY2FsYXIsXG4gIHNpZ246IHNpZ24sXG4gIHNxcnQ6IHNxcnQsXG4gIHN1YnRyYWN0OiBzdWJ0cmFjdCxcbiAgdHlwZWQ6IHR5cGVkLFxuICB1bmFyeU1pbnVzOiB1bmFyeU1pbnVzLFxuICB6ZXJvczogemVyb3Ncbn0pO1xuZXhwb3J0cy5xciA9IHFyO1xudmFyIGludiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUludikoe1xuICBhYnM6IGFicyxcbiAgYWRkU2NhbGFyOiBhZGRTY2FsYXIsXG4gIGRldDogZGV0LFxuICBkaXZpZGVTY2FsYXI6IGRpdmlkZVNjYWxhcixcbiAgaWRlbnRpdHk6IGlkZW50aXR5LFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgbXVsdGlwbHk6IG11bHRpcGx5LFxuICB0eXBlZDogdHlwZWQsXG4gIHVuYXJ5TWludXM6IHVuYXJ5TWludXNcbn0pO1xuZXhwb3J0cy5pbnYgPSBpbnY7XG52YXIgZXhwbSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUV4cG0pKHtcbiAgYWJzOiBhYnMsXG4gIGFkZDogYWRkLFxuICBpZGVudGl0eTogaWRlbnRpdHksXG4gIGludjogaW52LFxuICBtdWx0aXBseTogbXVsdGlwbHksXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmV4cG0gPSBleHBtO1xudmFyIGRpdmlkZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZURpdmlkZSkoe1xuICBkaXZpZGVTY2FsYXI6IGRpdmlkZVNjYWxhcixcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBpbnY6IGludixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZGl2aWRlID0gZGl2aWRlO1xudmFyIG1lYW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVNZWFuKSh7XG4gIGFkZDogYWRkLFxuICBkaXZpZGU6IGRpdmlkZSxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMubWVhbiA9IG1lYW47XG52YXIgdmFyaWFuY2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVWYXJpYW5jZSkoe1xuICBhZGQ6IGFkZCxcbiAgYXBwbHk6IGFwcGx5LFxuICBkaXZpZGU6IGRpdmlkZSxcbiAgaXNOYU46IGlzTmFOLFxuICBtdWx0aXBseTogbXVsdGlwbHksXG4gIHN1YnRyYWN0OiBzdWJ0cmFjdCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMudmFyaWFuY2UgPSB2YXJpYW5jZTtcbnZhciBzdGQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTdGQpKHtcbiAgc3FydDogc3FydCxcbiAgdHlwZWQ6IHR5cGVkLFxuICB2YXJpYW5jZTogdmFyaWFuY2Vcbn0pO1xuZXhwb3J0cy5zdGQgPSBzdGQ7XG52YXIgbXVsdGlub21pYWwgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVNdWx0aW5vbWlhbCkoe1xuICBhZGQ6IGFkZCxcbiAgZGl2aWRlOiBkaXZpZGUsXG4gIGZhY3RvcmlhbDogZmFjdG9yaWFsLFxuICBpc0ludGVnZXI6IGlzSW50ZWdlcixcbiAgaXNQb3NpdGl2ZTogaXNQb3NpdGl2ZSxcbiAgbXVsdGlwbHk6IG11bHRpcGx5LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5tdWx0aW5vbWlhbCA9IG11bHRpbm9taWFsO1xudmFyIGF0b21pY01hc3MgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVBdG9taWNNYXNzKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5hdG9taWNNYXNzID0gYXRvbWljTWFzcztcbnZhciBib2hyTWFnbmV0b24gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVCb2hyTWFnbmV0b24pKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmJvaHJNYWduZXRvbiA9IGJvaHJNYWduZXRvbjtcbnZhciBib2x0em1hbm4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVCb2x0em1hbm4pKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmJvbHR6bWFubiA9IGJvbHR6bWFubjtcbnZhciBjb25kdWN0YW5jZVF1YW50dW0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb25kdWN0YW5jZVF1YW50dW0pKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmNvbmR1Y3RhbmNlUXVhbnR1bSA9IGNvbmR1Y3RhbmNlUXVhbnR1bTtcbnZhciBkZXV0ZXJvbk1hc3MgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVEZXV0ZXJvbk1hc3MpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmRldXRlcm9uTWFzcyA9IGRldXRlcm9uTWFzcztcbnZhciBlbGVjdHJvbk1hc3MgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVFbGVjdHJvbk1hc3MpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmVsZWN0cm9uTWFzcyA9IGVsZWN0cm9uTWFzcztcbnZhciBmYXJhZGF5ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRmFyYWRheSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuZmFyYWRheSA9IGZhcmFkYXk7XG52YXIgZmlyc3RSYWRpYXRpb24gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVGaXJzdFJhZGlhdGlvbikoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuZmlyc3RSYWRpYXRpb24gPSBmaXJzdFJhZGlhdGlvbjtcbnZhciBncmF2aXRhdGlvbkNvbnN0YW50ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlR3Jhdml0YXRpb25Db25zdGFudCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuZ3Jhdml0YXRpb25Db25zdGFudCA9IGdyYXZpdGF0aW9uQ29uc3RhbnQ7XG52YXIgaGFydHJlZUVuZXJneSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUhhcnRyZWVFbmVyZ3kpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmhhcnRyZWVFbmVyZ3kgPSBoYXJ0cmVlRW5lcmd5O1xudmFyIGtsaXR6aW5nID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlS2xpdHppbmcpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmtsaXR6aW5nID0ga2xpdHppbmc7XG52YXIgbWFnbmV0aWNDb25zdGFudCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU1hZ25ldGljQ29uc3RhbnQpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLm1hZ25ldGljQ29uc3RhbnQgPSBtYWduZXRpY0NvbnN0YW50O1xudmFyIG1vbGFyTWFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU1vbGFyTWFzcykoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMubW9sYXJNYXNzID0gbW9sYXJNYXNzO1xudmFyIG1vbGFyUGxhbmNrQ29uc3RhbnQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVNb2xhclBsYW5ja0NvbnN0YW50KSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5tb2xhclBsYW5ja0NvbnN0YW50ID0gbW9sYXJQbGFuY2tDb25zdGFudDtcbnZhciBuZXV0cm9uTWFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU5ldXRyb25NYXNzKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5uZXV0cm9uTWFzcyA9IG5ldXRyb25NYXNzO1xudmFyIHBsYW5ja0NoYXJnZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVBsYW5ja0NoYXJnZSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMucGxhbmNrQ2hhcmdlID0gcGxhbmNrQ2hhcmdlO1xudmFyIHBsYW5ja0xlbmd0aCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVBsYW5ja0xlbmd0aCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMucGxhbmNrTGVuZ3RoID0gcGxhbmNrTGVuZ3RoO1xudmFyIHBsYW5ja1RlbXBlcmF0dXJlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUGxhbmNrVGVtcGVyYXR1cmUpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLnBsYW5ja1RlbXBlcmF0dXJlID0gcGxhbmNrVGVtcGVyYXR1cmU7XG52YXIgcHJvdG9uTWFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVByb3Rvbk1hc3MpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLnByb3Rvbk1hc3MgPSBwcm90b25NYXNzO1xudmFyIHJlZHVjZWRQbGFuY2tDb25zdGFudCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVJlZHVjZWRQbGFuY2tDb25zdGFudCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMucmVkdWNlZFBsYW5ja0NvbnN0YW50ID0gcmVkdWNlZFBsYW5ja0NvbnN0YW50O1xudmFyIHNlY29uZFJhZGlhdGlvbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNlY29uZFJhZGlhdGlvbikoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuc2Vjb25kUmFkaWF0aW9uID0gc2Vjb25kUmFkaWF0aW9uO1xudmFyIHN0ZWZhbkJvbHR6bWFubiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVN0ZWZhbkJvbHR6bWFubikoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuc3RlZmFuQm9sdHptYW5uID0gc3RlZmFuQm9sdHptYW5uO1xudmFyIHZhY3V1bUltcGVkYW5jZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVZhY3V1bUltcGVkYW5jZSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMudmFjdXVtSW1wZWRhbmNlID0gdmFjdXVtSW1wZWRhbmNlO1xudmFyIGNvbHVtbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbHVtbikoe1xuICBJbmRleDogSW5kZXgsXG4gIG1hdHJpeDogbWF0cml4LFxuICByYW5nZTogcmFuZ2UsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNvbHVtbiA9IGNvbHVtbjtcbnZhciB1c29sdmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVVc29sdmUpKHtcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBkaXZpZGVTY2FsYXI6IGRpdmlkZVNjYWxhcixcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgbXVsdGlwbHlTY2FsYXI6IG11bHRpcGx5U2NhbGFyLFxuICBzdWJ0cmFjdDogc3VidHJhY3QsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnVzb2x2ZSA9IHVzb2x2ZTtcbnZhciBzZXRJbnRlcnNlY3QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTZXRJbnRlcnNlY3QpKHtcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBJbmRleDogSW5kZXgsXG4gIGNvbXBhcmVOYXR1cmFsOiBjb21wYXJlTmF0dXJhbCxcbiAgc2l6ZTogc2l6ZSxcbiAgc3Vic2V0OiBzdWJzZXQsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNldEludGVyc2VjdCA9IHNldEludGVyc2VjdDtcbnZhciBsdXNvbHZlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTHVzb2x2ZSkoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGxzb2x2ZTogbHNvbHZlLFxuICBsdXA6IGx1cCxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHNsdTogc2x1LFxuICB0eXBlZDogdHlwZWQsXG4gIHVzb2x2ZTogdXNvbHZlXG59KTtcbmV4cG9ydHMubHVzb2x2ZSA9IGx1c29sdmU7XG52YXIgZWlncyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUVpZ3MpKHtcbiAgYWJzOiBhYnMsXG4gIGFkZDogYWRkLFxuICBhZGRTY2FsYXI6IGFkZFNjYWxhcixcbiAgYXRhbjogYXRhbixcbiAgYmlnbnVtYmVyOiBiaWdudW1iZXIsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgY29zOiBjb3MsXG4gIGVxdWFsOiBlcXVhbCxcbiAgaW52OiBpbnYsXG4gIG1hdHJpeDogbWF0cml4LFxuICBtdWx0aXBseTogbXVsdGlwbHksXG4gIG11bHRpcGx5U2NhbGFyOiBtdWx0aXBseVNjYWxhcixcbiAgc2luOiBzaW4sXG4gIHN1YnRyYWN0OiBzdWJ0cmFjdCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZWlncyA9IGVpZ3M7XG52YXIgaW50ZXJzZWN0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlSW50ZXJzZWN0KSh7XG4gIGFiczogYWJzLFxuICBhZGQ6IGFkZCxcbiAgYWRkU2NhbGFyOiBhZGRTY2FsYXIsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgZGl2aWRlU2NhbGFyOiBkaXZpZGVTY2FsYXIsXG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgbXVsdGlwbHlTY2FsYXI6IG11bHRpcGx5U2NhbGFyLFxuICBzbWFsbGVyOiBzbWFsbGVyLFxuICBzdWJ0cmFjdDogc3VidHJhY3QsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmludGVyc2VjdCA9IGludGVyc2VjdDtcbnZhciBiZWxsTnVtYmVycyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUJlbGxOdW1iZXJzKSh7XG4gIGFkZFNjYWxhcjogYWRkU2NhbGFyLFxuICBpc0ludGVnZXI6IGlzSW50ZWdlcixcbiAgaXNOZWdhdGl2ZTogaXNOZWdhdGl2ZSxcbiAgc3RpcmxpbmdTMjogc3RpcmxpbmdTMixcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuYmVsbE51bWJlcnMgPSBiZWxsTnVtYmVycztcbnZhciBhdm9nYWRybyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUF2b2dhZHJvKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5hdm9nYWRybyA9IGF2b2dhZHJvO1xudmFyIGNsYXNzaWNhbEVsZWN0cm9uUmFkaXVzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ2xhc3NpY2FsRWxlY3Ryb25SYWRpdXMpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmNsYXNzaWNhbEVsZWN0cm9uUmFkaXVzID0gY2xhc3NpY2FsRWxlY3Ryb25SYWRpdXM7XG52YXIgZWxlY3RyaWNDb25zdGFudCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUVsZWN0cmljQ29uc3RhbnQpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmVsZWN0cmljQ29uc3RhbnQgPSBlbGVjdHJpY0NvbnN0YW50O1xudmFyIGZlcm1pQ291cGxpbmcgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVGZXJtaUNvdXBsaW5nKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5mZXJtaUNvdXBsaW5nID0gZmVybWlDb3VwbGluZztcbnZhciBncmF2aXR5ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlR3Jhdml0eSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuZ3Jhdml0eSA9IGdyYXZpdHk7XG52YXIgbG9zY2htaWR0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTG9zY2htaWR0KSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5sb3NjaG1pZHQgPSBsb3NjaG1pZHQ7XG52YXIgbW9sYXJNYXNzQzEyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTW9sYXJNYXNzQzEyKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5tb2xhck1hc3NDMTIgPSBtb2xhck1hc3NDMTI7XG52YXIgbnVjbGVhck1hZ25ldG9uID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTnVjbGVhck1hZ25ldG9uKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5udWNsZWFyTWFnbmV0b24gPSBudWNsZWFyTWFnbmV0b247XG52YXIgcGxhbmNrTWFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVBsYW5ja01hc3MpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLnBsYW5ja01hc3MgPSBwbGFuY2tNYXNzO1xudmFyIHF1YW50dW1PZkNpcmN1bGF0aW9uID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUXVhbnR1bU9mQ2lyY3VsYXRpb24pKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLnF1YW50dW1PZkNpcmN1bGF0aW9uID0gcXVhbnR1bU9mQ2lyY3VsYXRpb247XG52YXIgc3BlZWRPZkxpZ2h0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3BlZWRPZkxpZ2h0KSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5zcGVlZE9mTGlnaHQgPSBzcGVlZE9mTGlnaHQ7XG52YXIgd2llbkRpc3BsYWNlbWVudCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVdpZW5EaXNwbGFjZW1lbnQpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLndpZW5EaXNwbGFjZW1lbnQgPSB3aWVuRGlzcGxhY2VtZW50O1xudmFyIGxvZyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUxvZykoe1xuICBDb21wbGV4OiBDb21wbGV4LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5sb2cgPSBsb2c7XG52YXIgdW5pdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVVuaXRGdW5jdGlvbikoe1xuICBVbml0OiBVbml0LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy51bml0ID0gdW5pdDtcbnZhciBzcXJ0bSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNxcnRtKSh7XG4gIGFiczogYWJzLFxuICBhZGQ6IGFkZCxcbiAgaWRlbnRpdHk6IGlkZW50aXR5LFxuICBpbnY6IGludixcbiAgbWF4OiBtYXgsXG4gIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgc2l6ZTogc2l6ZSxcbiAgc3FydDogc3FydCxcbiAgc3VidHJhY3Q6IHN1YnRyYWN0LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5zcXJ0bSA9IHNxcnRtO1xudmFyIGtsZGl2ZXJnZW5jZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUtsZGl2ZXJnZW5jZSkoe1xuICBkaXZpZGU6IGRpdmlkZSxcbiAgZG90RGl2aWRlOiBkb3REaXZpZGUsXG4gIGlzTnVtZXJpYzogaXNOdW1lcmljLFxuICBsb2c6IGxvZyxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgc3VtOiBzdW0sXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmtsZGl2ZXJnZW5jZSA9IGtsZGl2ZXJnZW5jZTtcbnZhciBib2hyUmFkaXVzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQm9oclJhZGl1cykoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuYm9oclJhZGl1cyA9IGJvaHJSYWRpdXM7XG52YXIgZWxlbWVudGFyeUNoYXJnZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUVsZW1lbnRhcnlDaGFyZ2UpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmVsZW1lbnRhcnlDaGFyZ2UgPSBlbGVtZW50YXJ5Q2hhcmdlO1xudmFyIGludmVyc2VDb25kdWN0YW5jZVF1YW50dW0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVJbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5pbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtID0gaW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bTtcbnZhciBtb2xhclZvbHVtZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU1vbGFyVm9sdW1lKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5tb2xhclZvbHVtZSA9IG1vbGFyVm9sdW1lO1xudmFyIHBsYW5ja1RpbWUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVQbGFuY2tUaW1lKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5wbGFuY2tUaW1lID0gcGxhbmNrVGltZTtcbnZhciB0aG9tc29uQ3Jvc3NTZWN0aW9uID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlVGhvbXNvbkNyb3NzU2VjdGlvbikoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMudGhvbXNvbkNyb3NzU2VjdGlvbiA9IHRob21zb25Dcm9zc1NlY3Rpb247XG52YXIgbG9nMXAgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVMb2cxcCkoe1xuICBDb21wbGV4OiBDb21wbGV4LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICBsb2c6IGxvZyxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMubG9nMXAgPSBsb2cxcDtcbnZhciBtZWRpYW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVNZWRpYW4pKHtcbiAgYWRkOiBhZGQsXG4gIGNvbXBhcmU6IGNvbXBhcmUsXG4gIGRpdmlkZTogZGl2aWRlLFxuICBwYXJ0aXRpb25TZWxlY3Q6IHBhcnRpdGlvblNlbGVjdCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMubWVkaWFuID0gbWVkaWFuO1xudmFyIGdhc0NvbnN0YW50ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlR2FzQ29uc3RhbnQpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmdhc0NvbnN0YW50ID0gZ2FzQ29uc3RhbnQ7XG52YXIgcGxhbmNrQ29uc3RhbnQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVQbGFuY2tDb25zdGFudCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMucGxhbmNrQ29uc3RhbnQgPSBwbGFuY2tDb25zdGFudDtcbnZhciBzZXRVbmlvbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNldFVuaW9uKSh7XG4gIEluZGV4OiBJbmRleCxcbiAgY29uY2F0OiBjb25jYXQsXG4gIHNldEludGVyc2VjdDogc2V0SW50ZXJzZWN0LFxuICBzZXRTeW1EaWZmZXJlbmNlOiBzZXRTeW1EaWZmZXJlbmNlLFxuICBzaXplOiBzaXplLFxuICBzdWJzZXQ6IHN1YnNldCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc2V0VW5pb24gPSBzZXRVbmlvbjtcbnZhciBtYWduZXRpY0ZsdXhRdWFudHVtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTWFnbmV0aWNGbHV4UXVhbnR1bSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMubWFnbmV0aWNGbHV4UXVhbnR1bSA9IG1hZ25ldGljRmx1eFF1YW50dW07XG52YXIgY291bG9tYiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvdWxvbWIpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmNvdWxvbWIgPSBjb3Vsb21iO1xudmFyIG1hZCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU1hZCkoe1xuICBhYnM6IGFicyxcbiAgbWFwOiBtYXAsXG4gIG1lZGlhbjogbWVkaWFuLFxuICBzdWJ0cmFjdDogc3VidHJhY3QsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm1hZCA9IG1hZDtcbnZhciByeWRiZXJnID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUnlkYmVyZykoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMucnlkYmVyZyA9IHJ5ZGJlcmc7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0FjY2Vzc29yTm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNBY2Nlc3Nvck5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNBcnJheVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNBcnJheTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0FycmF5Tm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNBcnJheU5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNBc3NpZ25tZW50Tm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNBc3NpZ25tZW50Tm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0JpZ051bWJlclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNCaWdOdW1iZXI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNCbG9ja05vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzQmxvY2tOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzQm9vbGVhblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNCb29sZWFuO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzQ2hhaW5cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzQ2hhaW47XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNDb2xsZWN0aW9uXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc0NvbGxlY3Rpb247XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNDb21wbGV4XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc0NvbXBsZXg7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNDb25kaXRpb25hbE5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzQ29uZGl0aW9uYWxOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzQ29uc3RhbnROb2RlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc0NvbnN0YW50Tm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0RhdGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzRGF0ZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0RlbnNlTWF0cml4XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc0RlbnNlTWF0cml4O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzRnJhY3Rpb25cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzRnJhY3Rpb247XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNGdW5jdGlvblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNGdW5jdGlvbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0Z1bmN0aW9uQXNzaWdubWVudE5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0Z1bmN0aW9uTm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNGdW5jdGlvbk5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNIZWxwXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc0hlbHA7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNJbmRleFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNJbmRleDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0luZGV4Tm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNJbmRleE5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNNYXRyaXhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzTWF0cml4O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzTm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzTnVsbFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNOdWxsO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzTnVtYmVyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc051bWJlcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc1N0cmluZ1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNTdHJpbmc7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNVbmRlZmluZWRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzVW5kZWZpbmVkO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzT2JqZWN0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc09iamVjdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc09iamVjdE5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzT2JqZWN0Tm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc09wZXJhdG9yTm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNPcGVyYXRvck5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNQYXJlbnRoZXNpc05vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzUGFyZW50aGVzaXNOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzUmFuZ2VcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzUmFuZ2U7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNSYW5nZU5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzUmFuZ2VOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzUmVnRXhwXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc1JlZ0V4cDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc1Jlc3VsdFNldFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNSZXN1bHRTZXQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNTcGFyc2VNYXRyaXhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzU3BhcnNlTWF0cml4O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzU3ltYm9sTm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNTeW1ib2xOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzVW5pdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNVbml0O1xuICB9XG59KTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi91dGlscy9pc1wiKTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuQXJndW1lbnRzRXJyb3IgPSBBcmd1bWVudHNFcnJvcjtcblxuLyoqXG4gKiBDcmVhdGUgYSBzeW50YXggZXJyb3Igd2l0aCB0aGUgbWVzc2FnZTpcbiAqICAgICAnV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyBpbiBmdW5jdGlvbiA8Zm4+ICg8Y291bnQ+IHByb3ZpZGVkLCA8bWluPi08bWF4PiBleHBlY3RlZCknXG4gKiBAcGFyYW0ge3N0cmluZ30gZm4gICAgIEZ1bmN0aW9uIG5hbWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb3VudCAgQWN0dWFsIGFyZ3VtZW50IGNvdW50XG4gKiBAcGFyYW0ge251bWJlcn0gbWluICAgIE1pbmltdW0gcmVxdWlyZWQgYXJndW1lbnQgY291bnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBbbWF4XSAgTWF4aW11bSByZXF1aXJlZCBhcmd1bWVudCBjb3VudFxuICogQGV4dGVuZHMgRXJyb3JcbiAqL1xuZnVuY3Rpb24gQXJndW1lbnRzRXJyb3IoZm4sIGNvdW50LCBtaW4sIG1heCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQXJndW1lbnRzRXJyb3IpKSB7XG4gICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgfVxuXG4gIHRoaXMuZm4gPSBmbjtcbiAgdGhpcy5jb3VudCA9IGNvdW50O1xuICB0aGlzLm1pbiA9IG1pbjtcbiAgdGhpcy5tYXggPSBtYXg7XG4gIHRoaXMubWVzc2FnZSA9ICdXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzIGluIGZ1bmN0aW9uICcgKyBmbiArICcgKCcgKyBjb3VudCArICcgcHJvdmlkZWQsICcgKyBtaW4gKyAobWF4ICE9PSB1bmRlZmluZWQgJiYgbWF4ICE9PSBudWxsID8gJy0nICsgbWF4IDogJycpICsgJyBleHBlY3RlZCknO1xuICB0aGlzLnN0YWNrID0gbmV3IEVycm9yKCkuc3RhY2s7XG59XG5cbkFyZ3VtZW50c0Vycm9yLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuQXJndW1lbnRzRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRXJyb3I7XG5Bcmd1bWVudHNFcnJvci5wcm90b3R5cGUubmFtZSA9ICdBcmd1bWVudHNFcnJvcic7XG5Bcmd1bWVudHNFcnJvci5wcm90b3R5cGUuaXNBcmd1bWVudHNFcnJvciA9IHRydWU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkRpbWVuc2lvbkVycm9yID0gRGltZW5zaW9uRXJyb3I7XG5cbi8qKlxuICogQ3JlYXRlIGEgcmFuZ2UgZXJyb3Igd2l0aCB0aGUgbWVzc2FnZTpcbiAqICAgICAnRGltZW5zaW9uIG1pc21hdGNoICg8YWN0dWFsIHNpemU+ICE9IDxleHBlY3RlZCBzaXplPiknXG4gKiBAcGFyYW0ge251bWJlciB8IG51bWJlcltdfSBhY3R1YWwgICAgICAgIFRoZSBhY3R1YWwgc2l6ZVxuICogQHBhcmFtIHtudW1iZXIgfCBudW1iZXJbXX0gZXhwZWN0ZWQgICAgICBUaGUgZXhwZWN0ZWQgc2l6ZVxuICogQHBhcmFtIHtzdHJpbmd9IFtyZWxhdGlvbj0nIT0nXSAgICAgICAgICBPcHRpb25hbCByZWxhdGlvbiBiZXR3ZWVuIGFjdHVhbFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZXhwZWN0ZWQgc2l6ZTogJyE9JywgJzwnLCBldGMuXG4gKiBAZXh0ZW5kcyBSYW5nZUVycm9yXG4gKi9cbmZ1bmN0aW9uIERpbWVuc2lvbkVycm9yKGFjdHVhbCwgZXhwZWN0ZWQsIHJlbGF0aW9uKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBEaW1lbnNpb25FcnJvcikpIHtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICB9XG5cbiAgdGhpcy5hY3R1YWwgPSBhY3R1YWw7XG4gIHRoaXMuZXhwZWN0ZWQgPSBleHBlY3RlZDtcbiAgdGhpcy5yZWxhdGlvbiA9IHJlbGF0aW9uO1xuICB0aGlzLm1lc3NhZ2UgPSAnRGltZW5zaW9uIG1pc21hdGNoICgnICsgKEFycmF5LmlzQXJyYXkoYWN0dWFsKSA/ICdbJyArIGFjdHVhbC5qb2luKCcsICcpICsgJ10nIDogYWN0dWFsKSArICcgJyArICh0aGlzLnJlbGF0aW9uIHx8ICchPScpICsgJyAnICsgKEFycmF5LmlzQXJyYXkoZXhwZWN0ZWQpID8gJ1snICsgZXhwZWN0ZWQuam9pbignLCAnKSArICddJyA6IGV4cGVjdGVkKSArICcpJztcbiAgdGhpcy5zdGFjayA9IG5ldyBFcnJvcigpLnN0YWNrO1xufVxuXG5EaW1lbnNpb25FcnJvci5wcm90b3R5cGUgPSBuZXcgUmFuZ2VFcnJvcigpO1xuRGltZW5zaW9uRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmFuZ2VFcnJvcjtcbkRpbWVuc2lvbkVycm9yLnByb3RvdHlwZS5uYW1lID0gJ0RpbWVuc2lvbkVycm9yJztcbkRpbWVuc2lvbkVycm9yLnByb3RvdHlwZS5pc0RpbWVuc2lvbkVycm9yID0gdHJ1ZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuSW5kZXhFcnJvciA9IEluZGV4RXJyb3I7XG5cbi8qKlxuICogQ3JlYXRlIGEgcmFuZ2UgZXJyb3Igd2l0aCB0aGUgbWVzc2FnZTpcbiAqICAgICAnSW5kZXggb3V0IG9mIHJhbmdlIChpbmRleCA8IG1pbiknXG4gKiAgICAgJ0luZGV4IG91dCBvZiByYW5nZSAoaW5kZXggPCBtYXgpJ1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCAgICAgVGhlIGFjdHVhbCBpbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IFttaW49MF0gICBNaW5pbXVtIGluZGV4IChpbmNsdWRlZClcbiAqIEBwYXJhbSB7bnVtYmVyfSBbbWF4XSAgICAgTWF4aW11bSBpbmRleCAoZXhjbHVkZWQpXG4gKiBAZXh0ZW5kcyBSYW5nZUVycm9yXG4gKi9cbmZ1bmN0aW9uIEluZGV4RXJyb3IoaW5kZXgsIG1pbiwgbWF4KSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBJbmRleEVycm9yKSkge1xuICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7XG4gIH1cblxuICB0aGlzLmluZGV4ID0gaW5kZXg7XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAzKSB7XG4gICAgdGhpcy5taW4gPSAwO1xuICAgIHRoaXMubWF4ID0gbWluO1xuICB9IGVsc2Uge1xuICAgIHRoaXMubWluID0gbWluO1xuICAgIHRoaXMubWF4ID0gbWF4O1xuICB9XG5cbiAgaWYgKHRoaXMubWluICE9PSB1bmRlZmluZWQgJiYgdGhpcy5pbmRleCA8IHRoaXMubWluKSB7XG4gICAgdGhpcy5tZXNzYWdlID0gJ0luZGV4IG91dCBvZiByYW5nZSAoJyArIHRoaXMuaW5kZXggKyAnIDwgJyArIHRoaXMubWluICsgJyknO1xuICB9IGVsc2UgaWYgKHRoaXMubWF4ICE9PSB1bmRlZmluZWQgJiYgdGhpcy5pbmRleCA+PSB0aGlzLm1heCkge1xuICAgIHRoaXMubWVzc2FnZSA9ICdJbmRleCBvdXQgb2YgcmFuZ2UgKCcgKyB0aGlzLmluZGV4ICsgJyA+ICcgKyAodGhpcy5tYXggLSAxKSArICcpJztcbiAgfSBlbHNlIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSAnSW5kZXggb3V0IG9mIHJhbmdlICgnICsgdGhpcy5pbmRleCArICcpJztcbiAgfVxuXG4gIHRoaXMuc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcbn1cblxuSW5kZXhFcnJvci5wcm90b3R5cGUgPSBuZXcgUmFuZ2VFcnJvcigpO1xuSW5kZXhFcnJvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSYW5nZUVycm9yO1xuSW5kZXhFcnJvci5wcm90b3R5cGUubmFtZSA9ICdJbmRleEVycm9yJztcbkluZGV4RXJyb3IucHJvdG90eXBlLmlzSW5kZXhFcnJvciA9IHRydWU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUhlbHBDbGFzcyA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi91dGlscy9pc1wiKTtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdIZWxwJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3BhcnNlJ107XG52YXIgY3JlYXRlSGVscENsYXNzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHBhcnNlID0gX3JlZi5wYXJzZTtcblxuICAvKipcbiAgICogRG9jdW1lbnRhdGlvbiBvYmplY3RcbiAgICogQHBhcmFtIHtPYmplY3R9IGRvYyAgT2JqZWN0IGNvbnRhaW5pbmcgcHJvcGVydGllczpcbiAgICogICAgICAgICAgICAgICAgICAgICAge3N0cmluZ30gbmFtZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nfSBjYXRlZ29yeVxuICAgKiAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nfSBkZXNjcmlwdGlvblxuICAgKiAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nW119IHN5bnRheFxuICAgKiAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nW119IGV4YW1wbGVzXG4gICAqICAgICAgICAgICAgICAgICAgICAgIHtzdHJpbmdbXX0gc2VlYWxzb1xuICAgKiBAY29uc3RydWN0b3JcbiAgICovXG4gIGZ1bmN0aW9uIEhlbHAoZG9jKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEhlbHApKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH1cblxuICAgIGlmICghZG9jKSB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwiZG9jXCIgbWlzc2luZycpO1xuICAgIHRoaXMuZG9jID0gZG9jO1xuICB9XG4gIC8qKlxuICAgKiBBdHRhY2ggdHlwZSBpbmZvcm1hdGlvblxuICAgKi9cblxuXG4gIEhlbHAucHJvdG90eXBlLnR5cGUgPSAnSGVscCc7XG4gIEhlbHAucHJvdG90eXBlLmlzSGVscCA9IHRydWU7XG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgSGVscCBvYmplY3RcbiAgICogQHJldHVybiB7c3RyaW5nfSBSZXR1cm5zIGEgc3RyaW5nXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIEhlbHAucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBkb2MgPSB0aGlzLmRvYyB8fCB7fTtcbiAgICB2YXIgZGVzYyA9ICdcXG4nO1xuXG4gICAgaWYgKGRvYy5uYW1lKSB7XG4gICAgICBkZXNjICs9ICdOYW1lOiAnICsgZG9jLm5hbWUgKyAnXFxuXFxuJztcbiAgICB9XG5cbiAgICBpZiAoZG9jLmNhdGVnb3J5KSB7XG4gICAgICBkZXNjICs9ICdDYXRlZ29yeTogJyArIGRvYy5jYXRlZ29yeSArICdcXG5cXG4nO1xuICAgIH1cblxuICAgIGlmIChkb2MuZGVzY3JpcHRpb24pIHtcbiAgICAgIGRlc2MgKz0gJ0Rlc2NyaXB0aW9uOlxcbiAgICAnICsgZG9jLmRlc2NyaXB0aW9uICsgJ1xcblxcbic7XG4gICAgfVxuXG4gICAgaWYgKGRvYy5zeW50YXgpIHtcbiAgICAgIGRlc2MgKz0gJ1N5bnRheDpcXG4gICAgJyArIGRvYy5zeW50YXguam9pbignXFxuICAgICcpICsgJ1xcblxcbic7XG4gICAgfVxuXG4gICAgaWYgKGRvYy5leGFtcGxlcykge1xuICAgICAgZGVzYyArPSAnRXhhbXBsZXM6XFxuJztcbiAgICAgIHZhciBzY29wZSA9IHt9O1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvYy5leGFtcGxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZXhwciA9IGRvYy5leGFtcGxlc1tpXTtcbiAgICAgICAgZGVzYyArPSAnICAgICcgKyBleHByICsgJ1xcbic7XG4gICAgICAgIHZhciByZXMgPSB2b2lkIDA7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBub3RlOiByZXMgY2FuIGJlIHVuZGVmaW5lZCB3aGVuIGBleHByYCBpcyBhbiBlbXB0eSBzdHJpbmdcbiAgICAgICAgICByZXMgPSBwYXJzZShleHByKS5jb21waWxlKCkuZXZhbHVhdGUoc2NvcGUpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgcmVzID0gZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCAmJiAhKDAsIF9pcy5pc0hlbHApKHJlcykpIHtcbiAgICAgICAgICBkZXNjICs9ICcgICAgICAgICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKHJlcywge1xuICAgICAgICAgICAgcHJlY2lzaW9uOiAxNFxuICAgICAgICAgIH0pICsgJ1xcbic7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZGVzYyArPSAnXFxuJztcbiAgICB9XG5cbiAgICBpZiAoZG9jLnNlZWFsc28gJiYgZG9jLnNlZWFsc28ubGVuZ3RoKSB7XG4gICAgICBkZXNjICs9ICdTZWUgYWxzbzogJyArIGRvYy5zZWVhbHNvLmpvaW4oJywgJykgKyAnXFxuJztcbiAgICB9XG5cbiAgICByZXR1cm4gZGVzYztcbiAgfTtcbiAgLyoqXG4gICAqIEV4cG9ydCB0aGUgaGVscCBvYmplY3QgdG8gSlNPTlxuICAgKi9cblxuXG4gIEhlbHAucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgb2JqID0gKDAsIF9vYmplY3QuY2xvbmUpKHRoaXMuZG9jKTtcbiAgICBvYmoubWF0aGpzID0gJ0hlbHAnO1xuICAgIHJldHVybiBvYmo7XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhIEhlbHAgb2JqZWN0IGZyb20gYSBKU09OIG9iamVjdFxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvblxuICAgKiBAcmV0dXJucyB7SGVscH0gUmV0dXJucyBhIG5ldyBIZWxwIG9iamVjdFxuICAgKi9cblxuXG4gIEhlbHAuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHZhciBkb2MgPSB7fTtcblxuICAgIGZvciAodmFyIHByb3AgaW4ganNvbikge1xuICAgICAgaWYgKHByb3AgIT09ICdtYXRoanMnKSB7XG4gICAgICAgIC8vIGlnbm9yZSBtYXRoanMgZmllbGRcbiAgICAgICAgZG9jW3Byb3BdID0ganNvbltwcm9wXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEhlbHAoZG9jKTtcbiAgfTtcbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIEhlbHAgb2JqZWN0XG4gICAqL1xuXG5cbiAgSGVscC5wcm90b3R5cGUudmFsdWVPZiA9IEhlbHAucHJvdG90eXBlLnRvU3RyaW5nO1xuICByZXR1cm4gSGVscDtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUhlbHBDbGFzcyA9IGNyZWF0ZUhlbHBDbGFzczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUGFyc2VyQ2xhc3MgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfY3VzdG9tcyA9IHJlcXVpcmUoXCIuLi91dGlscy9jdXN0b21zXCIpO1xuXG52YXIgX2xvZyA9IHJlcXVpcmUoXCIuLi91dGlscy9sb2dcIik7XG5cbnZhciBuYW1lID0gJ1BhcnNlcic7XG52YXIgZGVwZW5kZW5jaWVzID0gWydwYXJzZSddO1xudmFyIGNyZWF0ZVBhcnNlckNsYXNzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHBhcnNlID0gX3JlZi5wYXJzZTtcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yIFBhcnNlclxuICAgKiBQYXJzZXIgY29udGFpbnMgbWV0aG9kcyB0byBldmFsdWF0ZSBvciBwYXJzZSBleHByZXNzaW9ucywgYW5kIGhhcyBhIG51bWJlclxuICAgKiBvZiBjb252ZW5pZW5jZSBtZXRob2RzIHRvIGdldCwgc2V0LCBhbmQgcmVtb3ZlIHZhcmlhYmxlcyBmcm9tIG1lbW9yeS4gUGFyc2VyXG4gICAqIGtlZXBzIGEgc2NvcGUgY29udGFpbmluZyB2YXJpYWJsZXMgaW4gbWVtb3J5LCB3aGljaCBpcyB1c2VkIGZvciBhbGxcbiAgICogZXZhbHVhdGlvbnMuXG4gICAqXG4gICAqIE1ldGhvZHM6XG4gICAqICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlci5ldmFsdWF0ZShleHByKSAgLy8gZXZhbHVhdGUgYW4gZXhwcmVzc2lvblxuICAgKiAgICBjb25zdCB2YWx1ZSA9IHBhcnNlci5nZXQobmFtZSkgICAgICAgIC8vIHJldHJpZXZlIGEgdmFyaWFibGUgZnJvbSB0aGUgcGFyc2VyXG4gICAqICAgIGNvbnN0IHZhbHVlcyA9IHBhcnNlci5nZXRBbGwoKSAgICAgICAgLy8gcmV0cmlldmUgYWxsIGRlZmluZWQgdmFyaWFibGVzXG4gICAqICAgIHBhcnNlci5zZXQobmFtZSwgdmFsdWUpICAgICAgICAgICAgICAgLy8gc2V0IGEgdmFyaWFibGUgaW4gdGhlIHBhcnNlclxuICAgKiAgICBwYXJzZXIucmVtb3ZlKG5hbWUpICAgICAgICAgICAgICAgICAgIC8vIGNsZWFyIGEgdmFyaWFibGUgZnJvbSB0aGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwYXJzZXJzIHNjb3BlXG4gICAqICAgIHBhcnNlci5jbGVhcigpICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2xlYXIgdGhlIHBhcnNlcnMgc2NvcGVcbiAgICpcbiAgICogRXhhbXBsZSB1c2FnZTpcbiAgICogICAgY29uc3QgcGFyc2VyID0gbmV3IFBhcnNlcigpXG4gICAqICAgIC8vIE5vdGU6IHRoZXJlIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHdoaWNoIGNhbiBiZSB1c2VkIGluc3RlYWQ6XG4gICAqICAgIC8vIGNvbnN0IHBhcnNlciA9IG5ldyBtYXRoLnBhcnNlcigpXG4gICAqXG4gICAqICAgIC8vIGV2YWx1YXRlIGV4cHJlc3Npb25zXG4gICAqICAgIHBhcnNlci5ldmFsdWF0ZSgnc3FydCgzXjIgKyA0XjIpJykgICAgICAgIC8vIDVcbiAgICogICAgcGFyc2VyLmV2YWx1YXRlKCdzcXJ0KC00KScpICAgICAgICAgICAgICAgLy8gMmlcbiAgICogICAgcGFyc2VyLmV2YWx1YXRlKCcyIGluY2ggaW4gY20nKSAgICAgICAgICAgLy8gNS4wOCBjbVxuICAgKiAgICBwYXJzZXIuZXZhbHVhdGUoJ2Nvcyg0NSBkZWcpJykgICAgICAgICAgICAvLyAwLjcwNzEwNjc4MTE4NjU0NzZcbiAgICpcbiAgICogICAgLy8gZGVmaW5lIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zXG4gICAqICAgIHBhcnNlci5ldmFsdWF0ZSgneCA9IDcgLyAyJykgICAgICAgICAgICAgIC8vIDMuNVxuICAgKiAgICBwYXJzZXIuZXZhbHVhdGUoJ3ggKyAzJykgICAgICAgICAgICAgICAgICAvLyA2LjVcbiAgICogICAgcGFyc2VyLmV2YWx1YXRlKCdmdW5jdGlvbiBmKHgsIHkpID0geF55JykgLy8gZih4LCB5KVxuICAgKiAgICBwYXJzZXIuZXZhbHVhdGUoJ2YoMiwgMyknKSAgICAgICAgICAgICAgICAvLyA4XG4gICAqXG4gICAqICAgIC8vIGdldCBhbmQgc2V0IHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zXG4gICAqICAgIGNvbnN0IHggPSBwYXJzZXIuZ2V0KCd4JykgICAgICAgICAgICAgICAgIC8vIDdcbiAgICogICAgY29uc3QgZiA9IHBhcnNlci5nZXQoJ2YnKSAgICAgICAgICAgICAgICAgLy8gZnVuY3Rpb25cbiAgICogICAgY29uc3QgZyA9IGYoMywgMikgICAgICAgICAgICAgICAgICAgICAgICAgLy8gOVxuICAgKiAgICBwYXJzZXIuc2V0KCdoJywgNTAwKVxuICAgKiAgICBjb25zdCBpID0gcGFyc2VyLmV2YWx1YXRlKCdoIC8gMicpICAgICAgICAvLyAyNTBcbiAgICogICAgcGFyc2VyLnNldCgnaGVsbG8nLCBmdW5jdGlvbiAobmFtZSkge1xuICAgKiAgICAgICAgcmV0dXJuICdoZWxsbywgJyArIG5hbWUgKyAnISdcbiAgICogICAgfSlcbiAgICogICAgcGFyc2VyLmV2YWx1YXRlKCdoZWxsbyhcInVzZXJcIiknKSAgICAgICAgICAvLyBcImhlbGxvLCB1c2VyIVwiXG4gICAqXG4gICAqICAgIC8vIGNsZWFyIGRlZmluZWQgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXNcbiAgICogICAgcGFyc2VyLmNsZWFyKClcbiAgICpcbiAgICovXG4gIGZ1bmN0aW9uIFBhcnNlcigpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUGFyc2VyKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG5cbiAgICB0aGlzLnNjb3BlID0ge307XG4gIH1cbiAgLyoqXG4gICAqIEF0dGFjaCB0eXBlIGluZm9ybWF0aW9uXG4gICAqL1xuXG5cbiAgUGFyc2VyLnByb3RvdHlwZS50eXBlID0gJ1BhcnNlcic7XG4gIFBhcnNlci5wcm90b3R5cGUuaXNQYXJzZXIgPSB0cnVlO1xuICAvKipcbiAgICogUGFyc2UgYW4gZXhwcmVzc2lvbiBhbmQgcmV0dXJuIHRoZSBwYXJzZWQgZnVuY3Rpb24gbm9kZS5cbiAgICogVGhlIG5vZGUgdHJlZSBjYW4gYmUgY29tcGlsZWQgdmlhIGBjb2RlID0gbm9kZS5jb21waWxlKG1hdGgpYCxcbiAgICogYW5kIHRoZSBjb21waWxlZCBjb2RlIGNhbiBiZSBleGVjdXRlZCBhcyBgY29kZS5ldmFsdWF0ZShbc2NvcGVdKWBcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4cHJcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAdGhyb3dzIHtFcnJvcn1cbiAgICovXG5cbiAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uIChleHByKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQYXJzZXIucGFyc2UgaXMgZGVwcmVjYXRlZC4gVXNlIG1hdGgucGFyc2UgaW5zdGVhZC4nKTtcbiAgfTtcbiAgLyoqXG4gICAqIFBhcnNlIGFuZCBjb21waWxlIGFuIGV4cHJlc3Npb24sIHJldHVybiB0aGUgY29tcGlsZWQgamF2YXNjcmlwdCBjb2RlLlxuICAgKiBUaGUgbm9kZSBjYW4gYmUgZXZhbHVhdGVkIHZpYSBjb2RlLmV2YWx1YXRlKFtzY29wZV0pXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHByXG4gICAqIEByZXR1cm4ge3tldmFsdWF0ZTogZnVuY3Rpb259fSBjb2RlXG4gICAqIEB0aHJvd3Mge0Vycm9yfVxuICAgKi9cblxuXG4gIFBhcnNlci5wcm90b3R5cGUuY29tcGlsZSA9IGZ1bmN0aW9uIChleHByKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQYXJzZXIuY29tcGlsZSBpcyBkZXByZWNhdGVkLiBVc2UgbWF0aC5jb21waWxlIGluc3RlYWQuJyk7XG4gIH07XG4gIC8qKlxuICAgKiBQYXJzZSBhbmQgZXZhbHVhdGUgdGhlIGdpdmVuIGV4cHJlc3Npb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4cHIgICBBIHN0cmluZyBjb250YWluaW5nIGFuIGV4cHJlc3Npb24sIGZvciBleGFtcGxlIFwiMiszXCJcbiAgICogQHJldHVybiB7Kn0gcmVzdWx0ICAgICBUaGUgcmVzdWx0LCBvciB1bmRlZmluZWQgd2hlbiB0aGUgZXhwcmVzc2lvbiB3YXMgZW1wdHlcbiAgICogQHRocm93cyB7RXJyb3J9XG4gICAqL1xuXG5cbiAgUGFyc2VyLnByb3RvdHlwZS5ldmFsdWF0ZSA9IGZ1bmN0aW9uIChleHByKSB7XG4gICAgLy8gVE9ETzogdmFsaWRhdGUgYXJndW1lbnRzXG4gICAgcmV0dXJuIHBhcnNlKGV4cHIpLmNvbXBpbGUoKS5ldmFsdWF0ZSh0aGlzLnNjb3BlKTtcbiAgfTtcbiAgLyoqXG4gICAqIFBhcnNlIGFuZCBldmFsdWF0ZSB0aGUgZ2l2ZW4gZXhwcmVzc2lvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXhwciAgIEEgc3RyaW5nIGNvbnRhaW5pbmcgYW4gZXhwcmVzc2lvbiwgZm9yIGV4YW1wbGUgXCIyKzNcIlxuICAgKiBAcmV0dXJuIHsqfSByZXN1bHQgICAgIFRoZSByZXN1bHQsIG9yIHVuZGVmaW5lZCB3aGVuIHRoZSBleHByZXNzaW9uIHdhcyBlbXB0eVxuICAgKiBAdGhyb3dzIHtFcnJvcn1cbiAgICovXG4gIC8vIFRPRE86IERlcHJlY2F0ZWQgc2luY2UgdjYuMC4wLiBDbGVhbiB1cCBzb21lIGRheVxuXG5cbiAgUGFyc2VyLnByb3RvdHlwZS5ldmFsID0gZnVuY3Rpb24gKGV4cHIpIHtcbiAgICAoMCwgX2xvZy53YXJuT25jZSkoJ01ldGhvZCBQYXJzZXIuZXZhbCBpcyByZW5hbWVkIHRvIFBhcnNlci5ldmFsdWF0ZS4gUGxlYXNlIHVzZSB0aGUgbmV3IG1ldGhvZCBuYW1lLicpO1xuICAgIHJldHVybiB0aGlzLmV2YWx1YXRlKGV4cHIpO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgdmFyaWFibGUgKGEgZnVuY3Rpb24gb3IgdmFyaWFibGUpIGJ5IG5hbWUgZnJvbSB0aGUgcGFyc2VycyBzY29wZS5cbiAgICogUmV0dXJucyB1bmRlZmluZWQgd2hlbiBub3QgZm91bmRcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHJldHVybiB7KiB8IHVuZGVmaW5lZH0gdmFsdWVcbiAgICovXG5cblxuICBQYXJzZXIucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgLy8gVE9ETzogdmFsaWRhdGUgYXJndW1lbnRzXG4gICAgcmV0dXJuIG5hbWUgaW4gdGhpcy5zY29wZSA/ICgwLCBfY3VzdG9tcy5nZXRTYWZlUHJvcGVydHkpKHRoaXMuc2NvcGUsIG5hbWUpIDogdW5kZWZpbmVkO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgbWFwIHdpdGggYWxsIGRlZmluZWQgdmFyaWFibGVzXG4gICAqIEByZXR1cm4ge09iamVjdH0gdmFsdWVzXG4gICAqL1xuXG5cbiAgUGFyc2VyLnByb3RvdHlwZS5nZXRBbGwgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICgwLCBfb2JqZWN0LmV4dGVuZCkoe30sIHRoaXMuc2NvcGUpO1xuICB9O1xuICAvKipcbiAgICogU2V0IGEgc3ltYm9sIChhIGZ1bmN0aW9uIG9yIHZhcmlhYmxlKSBieSBuYW1lIGZyb20gdGhlIHBhcnNlcnMgc2NvcGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7KiB8IHVuZGVmaW5lZH0gdmFsdWVcbiAgICovXG5cblxuICBQYXJzZXIucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgIC8vIFRPRE86IHZhbGlkYXRlIGFyZ3VtZW50c1xuICAgIHJldHVybiAoMCwgX2N1c3RvbXMuc2V0U2FmZVByb3BlcnR5KSh0aGlzLnNjb3BlLCBuYW1lLCB2YWx1ZSk7XG4gIH07XG4gIC8qKlxuICAgKiBSZW1vdmUgYSB2YXJpYWJsZSBmcm9tIHRoZSBwYXJzZXJzIHNjb3BlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqL1xuXG5cbiAgUGFyc2VyLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIC8vIFRPRE86IHZhbGlkYXRlIGFyZ3VtZW50c1xuICAgIGRlbGV0ZSB0aGlzLnNjb3BlW25hbWVdO1xuICB9O1xuICAvKipcbiAgICogQ2xlYXIgdGhlIHNjb3BlIHdpdGggdmFyaWFibGVzIGFuZCBmdW5jdGlvbnNcbiAgICovXG5cblxuICBQYXJzZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIF9uYW1lIGluIHRoaXMuc2NvcGUpIHtcbiAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkodGhpcy5zY29wZSwgX25hbWUpKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnNjb3BlW19uYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFBhcnNlcjtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVBhcnNlckNsYXNzID0gY3JlYXRlUGFyc2VyQ2xhc3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkluZmluaXR5RG9jcyA9IHZvaWQgMDtcbnZhciBJbmZpbml0eURvY3MgPSB7XG4gIG5hbWU6ICdJbmZpbml0eScsXG4gIGNhdGVnb3J5OiAnQ29uc3RhbnRzJyxcbiAgc3ludGF4OiBbJ0luZmluaXR5J10sXG4gIGRlc2NyaXB0aW9uOiAnSW5maW5pdHksIGEgbnVtYmVyIHdoaWNoIGlzIGxhcmdlciB0aGFuIHRoZSBtYXhpbXVtIG51bWJlciB0aGF0IGNhbiBiZSBoYW5kbGVkIGJ5IGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLicsXG4gIGV4YW1wbGVzOiBbJ0luZmluaXR5JywgJzEgLyAwJ10sXG4gIHNlZWFsc286IFtdXG59O1xuZXhwb3J0cy5JbmZpbml0eURvY3MgPSBJbmZpbml0eURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkxOMTBEb2NzID0gdm9pZCAwO1xudmFyIExOMTBEb2NzID0ge1xuICBuYW1lOiAnTE4xMCcsXG4gIGNhdGVnb3J5OiAnQ29uc3RhbnRzJyxcbiAgc3ludGF4OiBbJ0xOMTAnXSxcbiAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBuYXR1cmFsIGxvZ2FyaXRobSBvZiAxMCwgYXBwcm94aW1hdGVseSBlcXVhbCB0byAyLjMwMicsXG4gIGV4YW1wbGVzOiBbJ0xOMTAnLCAnbG9nKDEwKSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMuTE4xMERvY3MgPSBMTjEwRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuTE4yRG9jcyA9IHZvaWQgMDtcbnZhciBMTjJEb2NzID0ge1xuICBuYW1lOiAnTE4yJyxcbiAgY2F0ZWdvcnk6ICdDb25zdGFudHMnLFxuICBzeW50YXg6IFsnTE4yJ10sXG4gIGRlc2NyaXB0aW9uOiAnUmV0dXJucyB0aGUgbmF0dXJhbCBsb2dhcml0aG0gb2YgMiwgYXBwcm94aW1hdGVseSBlcXVhbCB0byAwLjY5MycsXG4gIGV4YW1wbGVzOiBbJ0xOMicsICdsb2coMiknXSxcbiAgc2VlYWxzbzogW11cbn07XG5leHBvcnRzLkxOMkRvY3MgPSBMTjJEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5MT0cxMEVEb2NzID0gdm9pZCAwO1xudmFyIExPRzEwRURvY3MgPSB7XG4gIG5hbWU6ICdMT0cxMEUnLFxuICBjYXRlZ29yeTogJ0NvbnN0YW50cycsXG4gIHN5bnRheDogWydMT0cxMEUnXSxcbiAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBiYXNlLTEwIGxvZ2FyaXRobSBvZiBFLCBhcHByb3hpbWF0ZWx5IGVxdWFsIHRvIDAuNDM0JyxcbiAgZXhhbXBsZXM6IFsnTE9HMTBFJywgJ2xvZyhlLCAxMCknXSxcbiAgc2VlYWxzbzogW11cbn07XG5leHBvcnRzLkxPRzEwRURvY3MgPSBMT0cxMEVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5MT0cyRURvY3MgPSB2b2lkIDA7XG52YXIgTE9HMkVEb2NzID0ge1xuICBuYW1lOiAnTE9HMkUnLFxuICBjYXRlZ29yeTogJ0NvbnN0YW50cycsXG4gIHN5bnRheDogWydMT0cyRSddLFxuICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdGhlIGJhc2UtMiBsb2dhcml0aG0gb2YgRSwgYXBwcm94aW1hdGVseSBlcXVhbCB0byAxLjQ0MicsXG4gIGV4YW1wbGVzOiBbJ0xPRzJFJywgJ2xvZyhlLCAyKSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMuTE9HMkVEb2NzID0gTE9HMkVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5OYU5Eb2NzID0gdm9pZCAwO1xudmFyIE5hTkRvY3MgPSB7XG4gIG5hbWU6ICdOYU4nLFxuICBjYXRlZ29yeTogJ0NvbnN0YW50cycsXG4gIHN5bnRheDogWydOYU4nXSxcbiAgZGVzY3JpcHRpb246ICdOb3QgYSBudW1iZXInLFxuICBleGFtcGxlczogWydOYU4nLCAnMCAvIDAnXSxcbiAgc2VlYWxzbzogW11cbn07XG5leHBvcnRzLk5hTkRvY3MgPSBOYU5Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5TUVJUMTJEb2NzID0gdm9pZCAwO1xudmFyIFNRUlQxMkRvY3MgPSB7XG4gIG5hbWU6ICdTUVJUMV8yJyxcbiAgY2F0ZWdvcnk6ICdDb25zdGFudHMnLFxuICBzeW50YXg6IFsnU1FSVDFfMiddLFxuICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdGhlIHNxdWFyZSByb290IG9mIDEvMiwgYXBwcm94aW1hdGVseSBlcXVhbCB0byAwLjcwNycsXG4gIGV4YW1wbGVzOiBbJ1NRUlQxXzInLCAnc3FydCgxLzIpJ10sXG4gIHNlZWFsc286IFtdXG59O1xuZXhwb3J0cy5TUVJUMTJEb2NzID0gU1FSVDEyRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuU1FSVDJEb2NzID0gdm9pZCAwO1xudmFyIFNRUlQyRG9jcyA9IHtcbiAgbmFtZTogJ1NRUlQyJyxcbiAgY2F0ZWdvcnk6ICdDb25zdGFudHMnLFxuICBzeW50YXg6IFsnU1FSVDInXSxcbiAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBzcXVhcmUgcm9vdCBvZiAyLCBhcHByb3hpbWF0ZWx5IGVxdWFsIHRvIDEuNDE0JyxcbiAgZXhhbXBsZXM6IFsnU1FSVDInLCAnc3FydCgyKSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMuU1FSVDJEb2NzID0gU1FSVDJEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lRG9jcyA9IHZvaWQgMDtcbnZhciBlRG9jcyA9IHtcbiAgbmFtZTogJ2UnLFxuICBjYXRlZ29yeTogJ0NvbnN0YW50cycsXG4gIHN5bnRheDogWydlJ10sXG4gIGRlc2NyaXB0aW9uOiAnRXVsZXJcXCdzIG51bWJlciwgdGhlIGJhc2Ugb2YgdGhlIG5hdHVyYWwgbG9nYXJpdGhtLiBBcHByb3hpbWF0ZWx5IGVxdWFsIHRvIDIuNzE4MjgnLFxuICBleGFtcGxlczogWydlJywgJ2UgXiAyJywgJ2V4cCgyKScsICdsb2coZSknXSxcbiAgc2VlYWxzbzogWydleHAnXVxufTtcbmV4cG9ydHMuZURvY3MgPSBlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZmFsc2VEb2NzID0gdm9pZCAwO1xudmFyIGZhbHNlRG9jcyA9IHtcbiAgbmFtZTogJ2ZhbHNlJyxcbiAgY2F0ZWdvcnk6ICdDb25zdGFudHMnLFxuICBzeW50YXg6IFsnZmFsc2UnXSxcbiAgZGVzY3JpcHRpb246ICdCb29sZWFuIHZhbHVlIGZhbHNlJyxcbiAgZXhhbXBsZXM6IFsnZmFsc2UnXSxcbiAgc2VlYWxzbzogWyd0cnVlJ11cbn07XG5leHBvcnRzLmZhbHNlRG9jcyA9IGZhbHNlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaURvY3MgPSB2b2lkIDA7XG52YXIgaURvY3MgPSB7XG4gIG5hbWU6ICdpJyxcbiAgY2F0ZWdvcnk6ICdDb25zdGFudHMnLFxuICBzeW50YXg6IFsnaSddLFxuICBkZXNjcmlwdGlvbjogJ0ltYWdpbmFyeSB1bml0LCBkZWZpbmVkIGFzIGkqaT0tMS4gQSBjb21wbGV4IG51bWJlciBpcyBkZXNjcmliZWQgYXMgYSArIGIqaSwgd2hlcmUgYSBpcyB0aGUgcmVhbCBwYXJ0LCBhbmQgYiBpcyB0aGUgaW1hZ2luYXJ5IHBhcnQuJyxcbiAgZXhhbXBsZXM6IFsnaScsICdpICogaScsICdzcXJ0KC0xKSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMuaURvY3MgPSBpRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubnVsbERvY3MgPSB2b2lkIDA7XG52YXIgbnVsbERvY3MgPSB7XG4gIG5hbWU6ICdudWxsJyxcbiAgY2F0ZWdvcnk6ICdDb25zdGFudHMnLFxuICBzeW50YXg6IFsnbnVsbCddLFxuICBkZXNjcmlwdGlvbjogJ1ZhbHVlIG51bGwnLFxuICBleGFtcGxlczogWydudWxsJ10sXG4gIHNlZWFsc286IFsndHJ1ZScsICdmYWxzZSddXG59O1xuZXhwb3J0cy5udWxsRG9jcyA9IG51bGxEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5waGlEb2NzID0gdm9pZCAwO1xudmFyIHBoaURvY3MgPSB7XG4gIG5hbWU6ICdwaGknLFxuICBjYXRlZ29yeTogJ0NvbnN0YW50cycsXG4gIHN5bnRheDogWydwaGknXSxcbiAgZGVzY3JpcHRpb246ICdQaGkgaXMgdGhlIGdvbGRlbiByYXRpby4gVHdvIHF1YW50aXRpZXMgYXJlIGluIHRoZSBnb2xkZW4gcmF0aW8gaWYgdGhlaXIgcmF0aW8gaXMgdGhlIHNhbWUgYXMgdGhlIHJhdGlvIG9mIHRoZWlyIHN1bSB0byB0aGUgbGFyZ2VyIG9mIHRoZSB0d28gcXVhbnRpdGllcy4gUGhpIGlzIGRlZmluZWQgYXMgYCgxICsgc3FydCg1KSkgLyAyYCBhbmQgaXMgYXBwcm94aW1hdGVseSAxLjYxODAzNC4uLicsXG4gIGV4YW1wbGVzOiBbJ3BoaSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMucGhpRG9jcyA9IHBoaURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBpRG9jcyA9IHZvaWQgMDtcbnZhciBwaURvY3MgPSB7XG4gIG5hbWU6ICdwaScsXG4gIGNhdGVnb3J5OiAnQ29uc3RhbnRzJyxcbiAgc3ludGF4OiBbJ3BpJ10sXG4gIGRlc2NyaXB0aW9uOiAnVGhlIG51bWJlciBwaSBpcyBhIG1hdGhlbWF0aWNhbCBjb25zdGFudCB0aGF0IGlzIHRoZSByYXRpbyBvZiBhIGNpcmNsZVxcJ3MgY2lyY3VtZmVyZW5jZSB0byBpdHMgZGlhbWV0ZXIsIGFuZCBpcyBhcHByb3hpbWF0ZWx5IGVxdWFsIHRvIDMuMTQxNTknLFxuICBleGFtcGxlczogWydwaScsICdzaW4ocGkvMiknXSxcbiAgc2VlYWxzbzogWyd0YXUnXVxufTtcbmV4cG9ydHMucGlEb2NzID0gcGlEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy50YXVEb2NzID0gdm9pZCAwO1xudmFyIHRhdURvY3MgPSB7XG4gIG5hbWU6ICd0YXUnLFxuICBjYXRlZ29yeTogJ0NvbnN0YW50cycsXG4gIHN5bnRheDogWyd0YXUnXSxcbiAgZGVzY3JpcHRpb246ICdUYXUgaXMgdGhlIHJhdGlvIGNvbnN0YW50IG9mIGEgY2lyY2xlXFwncyBjaXJjdW1mZXJlbmNlIHRvIHJhZGl1cywgZXF1YWwgdG8gMiAqIHBpLCBhcHByb3hpbWF0ZWx5IDYuMjgzMi4nLFxuICBleGFtcGxlczogWyd0YXUnLCAnMiAqIHBpJ10sXG4gIHNlZWFsc286IFsncGknXVxufTtcbmV4cG9ydHMudGF1RG9jcyA9IHRhdURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnRydWVEb2NzID0gdm9pZCAwO1xudmFyIHRydWVEb2NzID0ge1xuICBuYW1lOiAndHJ1ZScsXG4gIGNhdGVnb3J5OiAnQ29uc3RhbnRzJyxcbiAgc3ludGF4OiBbJ3RydWUnXSxcbiAgZGVzY3JpcHRpb246ICdCb29sZWFuIHZhbHVlIHRydWUnLFxuICBleGFtcGxlczogWyd0cnVlJ10sXG4gIHNlZWFsc286IFsnZmFsc2UnXVxufTtcbmV4cG9ydHMudHJ1ZURvY3MgPSB0cnVlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudmVyc2lvbkRvY3MgPSB2b2lkIDA7XG52YXIgdmVyc2lvbkRvY3MgPSB7XG4gIG5hbWU6ICd2ZXJzaW9uJyxcbiAgY2F0ZWdvcnk6ICdDb25zdGFudHMnLFxuICBzeW50YXg6IFsndmVyc2lvbiddLFxuICBkZXNjcmlwdGlvbjogJ0Egc3RyaW5nIHdpdGggdGhlIHZlcnNpb24gbnVtYmVyIG9mIG1hdGguanMnLFxuICBleGFtcGxlczogWyd2ZXJzaW9uJ10sXG4gIHNlZWFsc286IFtdXG59O1xuZXhwb3J0cy52ZXJzaW9uRG9jcyA9IHZlcnNpb25Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5iaWdudW1iZXJEb2NzID0gdm9pZCAwO1xudmFyIGJpZ251bWJlckRvY3MgPSB7XG4gIG5hbWU6ICdiaWdudW1iZXInLFxuICBjYXRlZ29yeTogJ0NvbnN0cnVjdGlvbicsXG4gIHN5bnRheDogWydiaWdudW1iZXIoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDcmVhdGUgYSBiaWcgbnVtYmVyIGZyb20gYSBudW1iZXIgb3Igc3RyaW5nLicsXG4gIGV4YW1wbGVzOiBbJzAuMSArIDAuMicsICdiaWdudW1iZXIoMC4xKSArIGJpZ251bWJlcigwLjIpJywgJ2JpZ251bWJlcihcIjcuMlwiKScsICdiaWdudW1iZXIoXCI3LjJlNTAwXCIpJywgJ2JpZ251bWJlcihbMC4xLCAwLjIsIDAuM10pJ10sXG4gIHNlZWFsc286IFsnYm9vbGVhbicsICdjb21wbGV4JywgJ2ZyYWN0aW9uJywgJ2luZGV4JywgJ21hdHJpeCcsICdzdHJpbmcnLCAndW5pdCddXG59O1xuZXhwb3J0cy5iaWdudW1iZXJEb2NzID0gYmlnbnVtYmVyRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYm9vbGVhbkRvY3MgPSB2b2lkIDA7XG52YXIgYm9vbGVhbkRvY3MgPSB7XG4gIG5hbWU6ICdib29sZWFuJyxcbiAgY2F0ZWdvcnk6ICdDb25zdHJ1Y3Rpb24nLFxuICBzeW50YXg6IFsneCcsICdib29sZWFuKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29udmVydCBhIHN0cmluZyBvciBudW1iZXIgaW50byBhIGJvb2xlYW4uJyxcbiAgZXhhbXBsZXM6IFsnYm9vbGVhbigwKScsICdib29sZWFuKDEpJywgJ2Jvb2xlYW4oMyknLCAnYm9vbGVhbihcInRydWVcIiknLCAnYm9vbGVhbihcImZhbHNlXCIpJywgJ2Jvb2xlYW4oWzEsIDAsIDEsIDFdKSddLFxuICBzZWVhbHNvOiBbJ2JpZ251bWJlcicsICdjb21wbGV4JywgJ2luZGV4JywgJ21hdHJpeCcsICdudW1iZXInLCAnc3RyaW5nJywgJ3VuaXQnXVxufTtcbmV4cG9ydHMuYm9vbGVhbkRvY3MgPSBib29sZWFuRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tcGxleERvY3MgPSB2b2lkIDA7XG52YXIgY29tcGxleERvY3MgPSB7XG4gIG5hbWU6ICdjb21wbGV4JyxcbiAgY2F0ZWdvcnk6ICdDb25zdHJ1Y3Rpb24nLFxuICBzeW50YXg6IFsnY29tcGxleCgpJywgJ2NvbXBsZXgocmUsIGltKScsICdjb21wbGV4KHN0cmluZyknXSxcbiAgZGVzY3JpcHRpb246ICdDcmVhdGUgYSBjb21wbGV4IG51bWJlci4nLFxuICBleGFtcGxlczogWydjb21wbGV4KCknLCAnY29tcGxleCgyLCAzKScsICdjb21wbGV4KFwiNyAtIDJpXCIpJ10sXG4gIHNlZWFsc286IFsnYmlnbnVtYmVyJywgJ2Jvb2xlYW4nLCAnaW5kZXgnLCAnbWF0cml4JywgJ251bWJlcicsICdzdHJpbmcnLCAndW5pdCddXG59O1xuZXhwb3J0cy5jb21wbGV4RG9jcyA9IGNvbXBsZXhEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVVbml0RG9jcyA9IHZvaWQgMDtcbnZhciBjcmVhdGVVbml0RG9jcyA9IHtcbiAgbmFtZTogJ2NyZWF0ZVVuaXQnLFxuICBjYXRlZ29yeTogJ0NvbnN0cnVjdGlvbicsXG4gIHN5bnRheDogWydjcmVhdGVVbml0KGRlZmluaXRpb25zKScsICdjcmVhdGVVbml0KG5hbWUsIGRlZmluaXRpb24pJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIGEgdXNlci1kZWZpbmVkIHVuaXQgYW5kIHJlZ2lzdGVyIGl0IHdpdGggdGhlIFVuaXQgdHlwZS4nLFxuICBleGFtcGxlczogWydjcmVhdGVVbml0KFwiZm9vXCIpJywgJ2NyZWF0ZVVuaXQoXCJrbm90XCIsIHtkZWZpbml0aW9uOiBcIjAuNTE0NDQ0NDQ0IG0vc1wiLCBhbGlhc2VzOiBbXCJrbm90c1wiLCBcImt0XCIsIFwia3RzXCJdfSknLCAnY3JlYXRlVW5pdChcIm1waFwiLCBcIjEgbWlsZS9ob3VyXCIpJ10sXG4gIHNlZWFsc286IFsndW5pdCcsICdzcGxpdFVuaXQnXVxufTtcbmV4cG9ydHMuY3JlYXRlVW5pdERvY3MgPSBjcmVhdGVVbml0RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZnJhY3Rpb25Eb2NzID0gdm9pZCAwO1xudmFyIGZyYWN0aW9uRG9jcyA9IHtcbiAgbmFtZTogJ2ZyYWN0aW9uJyxcbiAgY2F0ZWdvcnk6ICdDb25zdHJ1Y3Rpb24nLFxuICBzeW50YXg6IFsnZnJhY3Rpb24obnVtKScsICdmcmFjdGlvbihudW0sZGVuKSddLFxuICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSBhIGZyYWN0aW9uIGZyb20gYSBudW1iZXIgb3IgZnJvbSBhIG51bWVyYXRvciBhbmQgZGVub21pbmF0b3IuJyxcbiAgZXhhbXBsZXM6IFsnZnJhY3Rpb24oMC4xMjUpJywgJ2ZyYWN0aW9uKDEsIDMpICsgZnJhY3Rpb24oMiwgNSknXSxcbiAgc2VlYWxzbzogWydiaWdudW1iZXInLCAnYm9vbGVhbicsICdjb21wbGV4JywgJ2luZGV4JywgJ21hdHJpeCcsICdzdHJpbmcnLCAndW5pdCddXG59O1xuZXhwb3J0cy5mcmFjdGlvbkRvY3MgPSBmcmFjdGlvbkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmluZGV4RG9jcyA9IHZvaWQgMDtcbnZhciBpbmRleERvY3MgPSB7XG4gIG5hbWU6ICdpbmRleCcsXG4gIGNhdGVnb3J5OiAnQ29uc3RydWN0aW9uJyxcbiAgc3ludGF4OiBbJ1tzdGFydF0nLCAnW3N0YXJ0OmVuZF0nLCAnW3N0YXJ0OnN0ZXA6ZW5kXScsICdbc3RhcnQxLCBzdGFydCAyLCAuLi5dJywgJ1tzdGFydDE6ZW5kMSwgc3RhcnQyOmVuZDIsIC4uLl0nLCAnW3N0YXJ0MTpzdGVwMTplbmQxLCBzdGFydDI6c3RlcDI6ZW5kMiwgLi4uXSddLFxuICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSBhbiBpbmRleCB0byBnZXQgb3IgcmVwbGFjZSBhIHN1YnNldCBvZiBhIG1hdHJpeCcsXG4gIGV4YW1wbGVzOiBbJ1tdJywgJ1sxLCAyLCAzXScsICdBID0gWzEsIDIsIDM7IDQsIDUsIDZdJywgJ0FbMSwgOl0nLCAnQVsxLCAyXSA9IDUwJywgJ0FbMDoyLCAwOjJdID0gb25lcygyLCAyKSddLFxuICBzZWVhbHNvOiBbJ2JpZ251bWJlcicsICdib29sZWFuJywgJ2NvbXBsZXgnLCAnbWF0cml4LCcsICdudW1iZXInLCAncmFuZ2UnLCAnc3RyaW5nJywgJ3VuaXQnXVxufTtcbmV4cG9ydHMuaW5kZXhEb2NzID0gaW5kZXhEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tYXRyaXhEb2NzID0gdm9pZCAwO1xudmFyIG1hdHJpeERvY3MgPSB7XG4gIG5hbWU6ICdtYXRyaXgnLFxuICBjYXRlZ29yeTogJ0NvbnN0cnVjdGlvbicsXG4gIHN5bnRheDogWydbXScsICdbYTEsIGIxLCAuLi47IGEyLCBiMiwgLi4uXScsICdtYXRyaXgoKScsICdtYXRyaXgoXCJkZW5zZVwiKScsICdtYXRyaXgoWy4uLl0pJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIGEgbWF0cml4LicsXG4gIGV4YW1wbGVzOiBbJ1tdJywgJ1sxLCAyLCAzXScsICdbMSwgMiwgMzsgNCwgNSwgNl0nLCAnbWF0cml4KCknLCAnbWF0cml4KFszLCA0XSknLCAnbWF0cml4KFszLCA0OyA1LCA2XSwgXCJzcGFyc2VcIiknLCAnbWF0cml4KFszLCA0OyA1LCA2XSwgXCJzcGFyc2VcIiwgXCJudW1iZXJcIiknXSxcbiAgc2VlYWxzbzogWydiaWdudW1iZXInLCAnYm9vbGVhbicsICdjb21wbGV4JywgJ2luZGV4JywgJ251bWJlcicsICdzdHJpbmcnLCAndW5pdCcsICdzcGFyc2UnXVxufTtcbmV4cG9ydHMubWF0cml4RG9jcyA9IG1hdHJpeERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm51bWJlckRvY3MgPSB2b2lkIDA7XG52YXIgbnVtYmVyRG9jcyA9IHtcbiAgbmFtZTogJ251bWJlcicsXG4gIGNhdGVnb3J5OiAnQ29uc3RydWN0aW9uJyxcbiAgc3ludGF4OiBbJ3gnLCAnbnVtYmVyKHgpJywgJ251bWJlcih1bml0LCB2YWx1ZWxlc3NVbml0KSddLFxuICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSBhIG51bWJlciBvciBjb252ZXJ0IGEgc3RyaW5nIG9yIGJvb2xlYW4gaW50byBhIG51bWJlci4nLFxuICBleGFtcGxlczogWycyJywgJzJlMycsICc0LjA1JywgJ251bWJlcigyKScsICdudW1iZXIoXCI3LjJcIiknLCAnbnVtYmVyKHRydWUpJywgJ251bWJlcihbdHJ1ZSwgZmFsc2UsIHRydWUsIHRydWVdKScsICdudW1iZXIodW5pdChcIjUyY21cIiksIFwibVwiKSddLFxuICBzZWVhbHNvOiBbJ2JpZ251bWJlcicsICdib29sZWFuJywgJ2NvbXBsZXgnLCAnZnJhY3Rpb24nLCAnaW5kZXgnLCAnbWF0cml4JywgJ3N0cmluZycsICd1bml0J11cbn07XG5leHBvcnRzLm51bWJlckRvY3MgPSBudW1iZXJEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zcGFyc2VEb2NzID0gdm9pZCAwO1xudmFyIHNwYXJzZURvY3MgPSB7XG4gIG5hbWU6ICdzcGFyc2UnLFxuICBjYXRlZ29yeTogJ0NvbnN0cnVjdGlvbicsXG4gIHN5bnRheDogWydzcGFyc2UoKScsICdzcGFyc2UoW2ExLCBiMSwgLi4uOyBhMSwgYjIsIC4uLl0pJywgJ3NwYXJzZShbYTEsIGIxLCAuLi47IGExLCBiMiwgLi4uXSwgXCJudW1iZXJcIiknXSxcbiAgZGVzY3JpcHRpb246ICdDcmVhdGUgYSBzcGFyc2UgbWF0cml4LicsXG4gIGV4YW1wbGVzOiBbJ3NwYXJzZSgpJywgJ3NwYXJzZShbMywgNDsgNSwgNl0pJywgJ3NwYXJzZShbMywgMDsgNSwgMF0sIFwibnVtYmVyXCIpJ10sXG4gIHNlZWFsc286IFsnYmlnbnVtYmVyJywgJ2Jvb2xlYW4nLCAnY29tcGxleCcsICdpbmRleCcsICdudW1iZXInLCAnc3RyaW5nJywgJ3VuaXQnLCAnbWF0cml4J11cbn07XG5leHBvcnRzLnNwYXJzZURvY3MgPSBzcGFyc2VEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zcGxpdFVuaXREb2NzID0gdm9pZCAwO1xudmFyIHNwbGl0VW5pdERvY3MgPSB7XG4gIG5hbWU6ICdzcGxpdFVuaXQnLFxuICBjYXRlZ29yeTogJ0NvbnN0cnVjdGlvbicsXG4gIHN5bnRheDogWydzcGxpdFVuaXQodW5pdDogVW5pdCwgcGFydHM6IFVuaXRbXSknXSxcbiAgZGVzY3JpcHRpb246ICdTcGxpdCBhIHVuaXQgaW4gYW4gYXJyYXkgb2YgdW5pdHMgd2hvc2Ugc3VtIGlzIGVxdWFsIHRvIHRoZSBvcmlnaW5hbCB1bml0LicsXG4gIGV4YW1wbGVzOiBbJ3NwbGl0VW5pdCgxIG0sIFtcImZlZXRcIiwgXCJpbmNoXCJdKSddLFxuICBzZWVhbHNvOiBbJ3VuaXQnLCAnY3JlYXRlVW5pdCddXG59O1xuZXhwb3J0cy5zcGxpdFVuaXREb2NzID0gc3BsaXRVbml0RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3RyaW5nRG9jcyA9IHZvaWQgMDtcbnZhciBzdHJpbmdEb2NzID0ge1xuICBuYW1lOiAnc3RyaW5nJyxcbiAgY2F0ZWdvcnk6ICdDb25zdHJ1Y3Rpb24nLFxuICBzeW50YXg6IFsnXCJ0ZXh0XCInLCAnc3RyaW5nKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIGEgc3RyaW5nIG9yIGNvbnZlcnQgYSB2YWx1ZSB0byBhIHN0cmluZycsXG4gIGV4YW1wbGVzOiBbJ1wiSGVsbG8gV29ybGQhXCInLCAnc3RyaW5nKDQuMiknLCAnc3RyaW5nKDMgKyAyaSknXSxcbiAgc2VlYWxzbzogWydiaWdudW1iZXInLCAnYm9vbGVhbicsICdjb21wbGV4JywgJ2luZGV4JywgJ21hdHJpeCcsICdudW1iZXInLCAndW5pdCddXG59O1xuZXhwb3J0cy5zdHJpbmdEb2NzID0gc3RyaW5nRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudW5pdERvY3MgPSB2b2lkIDA7XG52YXIgdW5pdERvY3MgPSB7XG4gIG5hbWU6ICd1bml0JyxcbiAgY2F0ZWdvcnk6ICdDb25zdHJ1Y3Rpb24nLFxuICBzeW50YXg6IFsndmFsdWUgdW5pdCcsICd1bml0KHZhbHVlLCB1bml0KScsICd1bml0KHN0cmluZyknXSxcbiAgZGVzY3JpcHRpb246ICdDcmVhdGUgYSB1bml0LicsXG4gIGV4YW1wbGVzOiBbJzUuNSBtbScsICczIGluY2gnLCAndW5pdCg3LjEsIFwia2lsb2dyYW1cIiknLCAndW5pdChcIjIzIGRlZ1wiKSddLFxuICBzZWVhbHNvOiBbJ2JpZ251bWJlcicsICdib29sZWFuJywgJ2NvbXBsZXgnLCAnaW5kZXgnLCAnbWF0cml4JywgJ251bWJlcicsICdzdHJpbmcnXVxufTtcbmV4cG9ydHMudW5pdERvY3MgPSB1bml0RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29uZmlnRG9jcyA9IHZvaWQgMDtcbnZhciBjb25maWdEb2NzID0ge1xuICBuYW1lOiAnY29uZmlnJyxcbiAgY2F0ZWdvcnk6ICdDb3JlJyxcbiAgc3ludGF4OiBbJ2NvbmZpZygpJywgJ2NvbmZpZyhvcHRpb25zKSddLFxuICBkZXNjcmlwdGlvbjogJ0dldCBjb25maWd1cmF0aW9uIG9yIGNoYW5nZSBjb25maWd1cmF0aW9uLicsXG4gIGV4YW1wbGVzOiBbJ2NvbmZpZygpJywgJzEvMyArIDEvNCcsICdjb25maWcoe251bWJlcjogXCJGcmFjdGlvblwifSknLCAnMS8zICsgMS80J10sXG4gIHNlZWFsc286IFtdXG59O1xuZXhwb3J0cy5jb25maWdEb2NzID0gY29uZmlnRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaW1wb3J0RG9jcyA9IHZvaWQgMDtcbnZhciBpbXBvcnREb2NzID0ge1xuICBuYW1lOiAnaW1wb3J0JyxcbiAgY2F0ZWdvcnk6ICdDb3JlJyxcbiAgc3ludGF4OiBbJ2ltcG9ydChmdW5jdGlvbnMpJywgJ2ltcG9ydChmdW5jdGlvbnMsIG9wdGlvbnMpJ10sXG4gIGRlc2NyaXB0aW9uOiAnSW1wb3J0IGZ1bmN0aW9ucyBvciBjb25zdGFudHMgZnJvbSBhbiBvYmplY3QuJyxcbiAgZXhhbXBsZXM6IFsnaW1wb3J0KHtteUZuOiBmKHgpPXheMiwgbXlDb25zdGFudDogMzIgfSknLCAnbXlGbigyKScsICdteUNvbnN0YW50J10sXG4gIHNlZWFsc286IFtdXG59O1xuZXhwb3J0cy5pbXBvcnREb2NzID0gaW1wb3J0RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudHlwZWREb2NzID0gdm9pZCAwO1xudmFyIHR5cGVkRG9jcyA9IHtcbiAgbmFtZTogJ3R5cGVkJyxcbiAgY2F0ZWdvcnk6ICdDb3JlJyxcbiAgc3ludGF4OiBbJ3R5cGVkKHNpZ25hdHVyZXMpJywgJ3R5cGVkKG5hbWUsIHNpZ25hdHVyZXMpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIGEgdHlwZWQgZnVuY3Rpb24uJyxcbiAgZXhhbXBsZXM6IFsnZG91YmxlID0gdHlwZWQoeyBcIm51bWJlciwgbnVtYmVyXCI6IGYoeCk9eCt4IH0pJywgJ2RvdWJsZSgyKScsICdkb3VibGUoXCJoZWxsb1wiKSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMudHlwZWREb2NzID0gdHlwZWREb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lbWJlZGRlZERvY3MgPSB2b2lkIDA7XG5cbnZhciBfYmlnbnVtYmVyID0gcmVxdWlyZShcIi4vY29uc3RydWN0aW9uL2JpZ251bWJlclwiKTtcblxudmFyIF90eXBlT2YgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy90eXBlT2ZcIik7XG5cbnZhciBfaXNaZXJvID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdXRpbHMvaXNaZXJvXCIpO1xuXG52YXIgX2lzUHJpbWUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy9pc1ByaW1lXCIpO1xuXG52YXIgX2lzUG9zaXRpdmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy9pc1Bvc2l0aXZlXCIpO1xuXG52YXIgX2lzTnVtZXJpYyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3V0aWxzL2lzTnVtZXJpY1wiKTtcblxudmFyIF9oYXNOdW1lcmljVmFsdWUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy9oYXNOdW1lcmljVmFsdWVcIik7XG5cbnZhciBfaXNOZWdhdGl2ZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3V0aWxzL2lzTmVnYXRpdmVcIik7XG5cbnZhciBfaXNJbnRlZ2VyID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdXRpbHMvaXNJbnRlZ2VyXCIpO1xuXG52YXIgX2lzTmFOID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdXRpbHMvaXNOYU5cIik7XG5cbnZhciBfZm9ybWF0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdXRpbHMvZm9ybWF0XCIpO1xuXG52YXIgX2Nsb25lID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdXRpbHMvY2xvbmVcIik7XG5cbnZhciBfdG8gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91bml0cy90b1wiKTtcblxudmFyIF90YW5oID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3RhbmhcIik7XG5cbnZhciBfdGFuID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3RhblwiKTtcblxudmFyIF9zaW5oID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NpbmhcIik7XG5cbnZhciBfc2VjaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9zZWNoXCIpO1xuXG52YXIgX3NlYyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9zZWNcIik7XG5cbnZhciBfY3NjaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9jc2NoXCIpO1xuXG52YXIgX2NzYyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9jc2NcIik7XG5cbnZhciBfY290aCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9jb3RoXCIpO1xuXG52YXIgX2NvdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9jb3RcIik7XG5cbnZhciBfY29zaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9jb3NoXCIpO1xuXG52YXIgX2NvcyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9jb3NcIik7XG5cbnZhciBfYXRhbiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hdGFuMlwiKTtcblxudmFyIF9hdGFuaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hdGFuaFwiKTtcblxudmFyIF9hdGFuMiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hdGFuXCIpO1xuXG52YXIgX2FzaW5oID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2FzaW5oXCIpO1xuXG52YXIgX2FzaW4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXNpblwiKTtcblxudmFyIF9hc2VjaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hc2VjaFwiKTtcblxudmFyIF9hc2VjID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2FzZWNcIik7XG5cbnZhciBfYWNzY2ggPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNzY2hcIik7XG5cbnZhciBfYWNzYyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY3NjXCIpO1xuXG52YXIgX2Fjb3RoID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjb3RoXCIpO1xuXG52YXIgX2Fjb3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNvdFwiKTtcblxudmFyIF9hY29zaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY29zaFwiKTtcblxudmFyIF9hY29zID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjb3NcIik7XG5cbnZhciBfc3VtID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RhdGlzdGljcy9zdW1cIik7XG5cbnZhciBfc3RkID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RhdGlzdGljcy9zdGRcIik7XG5cbnZhciBfcXVhbnRpbGVTZXEgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zdGF0aXN0aWNzL3F1YW50aWxlU2VxXCIpO1xuXG52YXIgX3Byb2QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zdGF0aXN0aWNzL3Byb2RcIik7XG5cbnZhciBfbW9kZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbW9kZVwiKTtcblxudmFyIF9taW4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zdGF0aXN0aWNzL21pblwiKTtcblxudmFyIF9tZWRpYW4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zdGF0aXN0aWNzL21lZGlhblwiKTtcblxudmFyIF9tZWFuID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RhdGlzdGljcy9tZWFuXCIpO1xuXG52YXIgX21heCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbWF4XCIpO1xuXG52YXIgX21hZCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbWFkXCIpO1xuXG52YXIgX2VyZiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3NwZWNpYWwvZXJmXCIpO1xuXG52YXIgX3NldFVuaW9uID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldFVuaW9uXCIpO1xuXG52YXIgX3NldFN5bURpZmZlcmVuY2UgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zZXQvc2V0U3ltRGlmZmVyZW5jZVwiKTtcblxudmFyIF9zZXRTaXplID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldFNpemVcIik7XG5cbnZhciBfc2V0UG93ZXJzZXQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zZXQvc2V0UG93ZXJzZXRcIik7XG5cbnZhciBfc2V0TXVsdGlwbGljaXR5ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldE11bHRpcGxpY2l0eVwiKTtcblxudmFyIF9zZXRJc1N1YnNldCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3NldC9zZXRJc1N1YnNldFwiKTtcblxudmFyIF9zZXRJbnRlcnNlY3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zZXQvc2V0SW50ZXJzZWN0XCIpO1xuXG52YXIgX3NldERpc3RpbmN0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldERpc3RpbmN0XCIpO1xuXG52YXIgX3NldERpZmZlcmVuY2UgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zZXQvc2V0RGlmZmVyZW5jZVwiKTtcblxudmFyIF9zZXRDYXJ0ZXNpYW4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zZXQvc2V0Q2FydGVzaWFuXCIpO1xuXG52YXIgX3VuZXF1YWwgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9yZWxhdGlvbmFsL3VuZXF1YWxcIik7XG5cbnZhciBfc21hbGxlckVxID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcmVsYXRpb25hbC9zbWFsbGVyRXFcIik7XG5cbnZhciBfc21hbGxlciA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3JlbGF0aW9uYWwvc21hbGxlclwiKTtcblxudmFyIF9sYXJnZXJFcSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3JlbGF0aW9uYWwvbGFyZ2VyRXFcIik7XG5cbnZhciBfbGFyZ2VyID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcmVsYXRpb25hbC9sYXJnZXJcIik7XG5cbnZhciBfZXF1YWxUZXh0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcmVsYXRpb25hbC9lcXVhbFRleHRcIik7XG5cbnZhciBfZXF1YWwgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9yZWxhdGlvbmFsL2VxdWFsXCIpO1xuXG52YXIgX2RlZXBFcXVhbCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3JlbGF0aW9uYWwvZGVlcEVxdWFsXCIpO1xuXG52YXIgX2NvbXBhcmVUZXh0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcmVsYXRpb25hbC9jb21wYXJlVGV4dFwiKTtcblxudmFyIF9jb21wYXJlTmF0dXJhbCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3JlbGF0aW9uYWwvY29tcGFyZU5hdHVyYWxcIik7XG5cbnZhciBfY29tcGFyZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3JlbGF0aW9uYWwvY29tcGFyZVwiKTtcblxudmFyIF9yYW5kb21JbnQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9yYW5kb21JbnRcIik7XG5cbnZhciBfcmFuZG9tID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcHJvYmFiaWxpdHkvcmFuZG9tXCIpO1xuXG52YXIgX3BpY2tSYW5kb20gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9waWNrUmFuZG9tXCIpO1xuXG52YXIgX3Blcm11dGF0aW9ucyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3Blcm11dGF0aW9uc1wiKTtcblxudmFyIF9tdWx0aW5vbWlhbCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L211bHRpbm9taWFsXCIpO1xuXG52YXIgX2tsZGl2ZXJnZW5jZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2tsZGl2ZXJnZW5jZVwiKTtcblxudmFyIF9nYW1tYSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2dhbW1hXCIpO1xuXG52YXIgX2ZhY3RvcmlhbCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2ZhY3RvcmlhbFwiKTtcblxudmFyIF9jb21iaW5hdGlvbnMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9jb21iaW5hdGlvbnNcIik7XG5cbnZhciBfY29tYmluYXRpb25zV2l0aFJlcCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2NvbWJpbmF0aW9uc1dpdGhSZXBcIik7XG5cbnZhciBfemVyb3MgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvemVyb3NcIik7XG5cbnZhciBfdHJhbnNwb3NlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3RyYW5zcG9zZVwiKTtcblxudmFyIF90cmFjZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC90cmFjZVwiKTtcblxudmFyIF9zdWJzZXQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvc3Vic2V0XCIpO1xuXG52YXIgX3NxdWVlemUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvc3F1ZWV6ZVwiKTtcblxudmFyIF9zb3J0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3NvcnRcIik7XG5cbnZhciBfc2l6ZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9zaXplXCIpO1xuXG52YXIgX3Jlc2hhcGUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvcmVzaGFwZVwiKTtcblxudmFyIF9yZXNpemUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvcmVzaXplXCIpO1xuXG52YXIgX3JhbmdlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3JhbmdlXCIpO1xuXG52YXIgX3BhcnRpdGlvblNlbGVjdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9wYXJ0aXRpb25TZWxlY3RcIik7XG5cbnZhciBfb25lcyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9vbmVzXCIpO1xuXG52YXIgX21hcCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9tYXBcIik7XG5cbnZhciBfa3JvbiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9rcm9uXCIpO1xuXG52YXIgX2ludiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9pbnZcIik7XG5cbnZhciBfZm9yRWFjaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9mb3JFYWNoXCIpO1xuXG52YXIgX2ZsYXR0ZW4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvZmxhdHRlblwiKTtcblxudmFyIF9maWx0ZXIgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvZmlsdGVyXCIpO1xuXG52YXIgX2lkZW50aXR5ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2lkZW50aXR5XCIpO1xuXG52YXIgX2dldE1hdHJpeERhdGFUeXBlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2dldE1hdHJpeERhdGFUeXBlXCIpO1xuXG52YXIgX2RvdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9kb3RcIik7XG5cbnZhciBfZGlhZyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9kaWFnXCIpO1xuXG52YXIgX2RldCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9kZXRcIik7XG5cbnZhciBfY3RyYW5zcG9zZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9jdHJhbnNwb3NlXCIpO1xuXG52YXIgX2Nyb3NzID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2Nyb3NzXCIpO1xuXG52YXIgX2NvbmNhdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9jb25jYXRcIik7XG5cbnZhciBfeG9yID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbG9naWNhbC94b3JcIik7XG5cbnZhciBfb3IgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9sb2dpY2FsL29yXCIpO1xuXG52YXIgX25vdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2xvZ2ljYWwvbm90XCIpO1xuXG52YXIgX2FuZCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2xvZ2ljYWwvYW5kXCIpO1xuXG52YXIgX2ludGVyc2VjdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2dlb21ldHJ5L2ludGVyc2VjdFwiKTtcblxudmFyIF9kaXN0YW5jZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2dlb21ldHJ5L2Rpc3RhbmNlXCIpO1xuXG52YXIgX2hlbHAgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9leHByZXNzaW9uL2hlbHBcIik7XG5cbnZhciBfZXZhbHVhdGUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9leHByZXNzaW9uL2V2YWx1YXRlXCIpO1xuXG52YXIgX2ltID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vY29tcGxleC9pbVwiKTtcblxudmFyIF9yZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2NvbXBsZXgvcmVcIik7XG5cbnZhciBfY29uaiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2NvbXBsZXgvY29ualwiKTtcblxudmFyIF9hcmcgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9jb21wbGV4L2FyZ1wiKTtcblxudmFyIF90eXBlZCA9IHJlcXVpcmUoXCIuL2NvcmUvdHlwZWRcIik7XG5cbnZhciBfaW1wb3J0ID0gcmVxdWlyZShcIi4vY29yZS9pbXBvcnRcIik7XG5cbnZhciBfY29uZmlnID0gcmVxdWlyZShcIi4vY29yZS9jb25maWdcIik7XG5cbnZhciBfc3RpcmxpbmdTID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vY29tYmluYXRvcmljcy9zdGlybGluZ1MyXCIpO1xuXG52YXIgX2NvbXBvc2l0aW9uID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vY29tYmluYXRvcmljcy9jb21wb3NpdGlvblwiKTtcblxudmFyIF9jYXRhbGFuID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vY29tYmluYXRvcmljcy9jYXRhbGFuXCIpO1xuXG52YXIgX2JlbGxOdW1iZXJzID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vY29tYmluYXRvcmljcy9iZWxsTnVtYmVyc1wiKTtcblxudmFyIF9yaWdodExvZ1NoaWZ0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYml0d2lzZS9yaWdodExvZ1NoaWZ0XCIpO1xuXG52YXIgX3JpZ2h0QXJpdGhTaGlmdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2JpdHdpc2UvcmlnaHRBcml0aFNoaWZ0XCIpO1xuXG52YXIgX2xlZnRTaGlmdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2JpdHdpc2UvbGVmdFNoaWZ0XCIpO1xuXG52YXIgX2JpdFhvciA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2JpdHdpc2UvYml0WG9yXCIpO1xuXG52YXIgX2JpdE9yID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYml0d2lzZS9iaXRPclwiKTtcblxudmFyIF9iaXROb3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9iaXR3aXNlL2JpdE5vdFwiKTtcblxudmFyIF9iaXRBbmQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9iaXR3aXNlL2JpdEFuZFwiKTtcblxudmFyIF94Z2NkID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy94Z2NkXCIpO1xuXG52YXIgX3VuYXJ5UGx1cyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvdW5hcnlQbHVzXCIpO1xuXG52YXIgX3VuYXJ5TWludXMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL3VuYXJ5TWludXNcIik7XG5cbnZhciBfc3F1YXJlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9zcXVhcmVcIik7XG5cbnZhciBfc3FydG0gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL3NxcnRtXCIpO1xuXG52YXIgX3NxcnQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL3NxcnRcIik7XG5cbnZhciBfc2lnbiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvc2lnblwiKTtcblxudmFyIF9yb3VuZCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvcm91bmRcIik7XG5cbnZhciBfcG93ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9wb3dcIik7XG5cbnZhciBfbnRoUm9vdHMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL250aFJvb3RzXCIpO1xuXG52YXIgX250aFJvb3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL250aFJvb3RcIik7XG5cbnZhciBfbm9ybSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvbm9ybVwiKTtcblxudmFyIF9tdWx0aXBseSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvbXVsdGlwbHlcIik7XG5cbnZhciBfbW9kID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9tb2RcIik7XG5cbnZhciBfbG9nID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9sb2cxMFwiKTtcblxudmFyIF9sb2cxcCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvbG9nMXBcIik7XG5cbnZhciBfbG9nMiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvbG9nMlwiKTtcblxudmFyIF9sb2czID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9sb2dcIik7XG5cbnZhciBfbGNtID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9sY21cIik7XG5cbnZhciBfaHlwb3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2h5cG90XCIpO1xuXG52YXIgX2djZCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZ2NkXCIpO1xuXG52YXIgX2Zsb29yID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9mbG9vclwiKTtcblxudmFyIF9maXggPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2ZpeFwiKTtcblxudmFyIF9leHBtID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9leHBtMVwiKTtcblxudmFyIF9leHBtMiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZXhwbVwiKTtcblxudmFyIF9laWdzID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2VpZ3NcIik7XG5cbnZhciBfZXhwID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9leHBcIik7XG5cbnZhciBfZG90TXVsdGlwbHkgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2RvdE11bHRpcGx5XCIpO1xuXG52YXIgX2RvdERpdmlkZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZG90RGl2aWRlXCIpO1xuXG52YXIgX2RpdmlkZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZGl2aWRlXCIpO1xuXG52YXIgX2N1YmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2N1YmVcIik7XG5cbnZhciBfY2VpbCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvY2VpbFwiKTtcblxudmFyIF9jYnJ0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9jYnJ0XCIpO1xuXG52YXIgX2FkZCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvYWRkXCIpO1xuXG52YXIgX2FicyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvYWJzXCIpO1xuXG52YXIgX3FyID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYWxnZWJyYS9xclwiKTtcblxudmFyIF91c29sdmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hbGdlYnJhL3Vzb2x2ZVwiKTtcblxudmFyIF9zbHUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hbGdlYnJhL3NsdVwiKTtcblxudmFyIF9yYXRpb25hbGl6ZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FsZ2VicmEvcmF0aW9uYWxpemVcIik7XG5cbnZhciBfc2ltcGxpZnkgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hbGdlYnJhL3NpbXBsaWZ5XCIpO1xuXG52YXIgX2x1cCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FsZ2VicmEvbHVwXCIpO1xuXG52YXIgX2xzb2x2ZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FsZ2VicmEvbHNvbHZlXCIpO1xuXG52YXIgX2Rlcml2YXRpdmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hbGdlYnJhL2Rlcml2YXRpdmVcIik7XG5cbnZhciBfdmVyc2lvbiA9IHJlcXVpcmUoXCIuL2NvbnN0YW50cy92ZXJzaW9uXCIpO1xuXG52YXIgX3RydWUgPSByZXF1aXJlKFwiLi9jb25zdGFudHMvdHJ1ZVwiKTtcblxudmFyIF90YXUgPSByZXF1aXJlKFwiLi9jb25zdGFudHMvdGF1XCIpO1xuXG52YXIgX1NRUlQgPSByZXF1aXJlKFwiLi9jb25zdGFudHMvU1FSVDJcIik7XG5cbnZhciBfU1FSVDFfID0gcmVxdWlyZShcIi4vY29uc3RhbnRzL1NRUlQxXzJcIik7XG5cbnZhciBfcGhpID0gcmVxdWlyZShcIi4vY29uc3RhbnRzL3BoaVwiKTtcblxudmFyIF9waSA9IHJlcXVpcmUoXCIuL2NvbnN0YW50cy9waVwiKTtcblxudmFyIF9udWxsID0gcmVxdWlyZShcIi4vY29uc3RhbnRzL251bGxcIik7XG5cbnZhciBfTmFOID0gcmVxdWlyZShcIi4vY29uc3RhbnRzL05hTlwiKTtcblxudmFyIF9MT0cxMEUgPSByZXF1aXJlKFwiLi9jb25zdGFudHMvTE9HMTBFXCIpO1xuXG52YXIgX0xPRzJFID0gcmVxdWlyZShcIi4vY29uc3RhbnRzL0xPRzJFXCIpO1xuXG52YXIgX0xOID0gcmVxdWlyZShcIi4vY29uc3RhbnRzL0xOMTBcIik7XG5cbnZhciBfTE4yID0gcmVxdWlyZShcIi4vY29uc3RhbnRzL0xOMlwiKTtcblxudmFyIF9JbmZpbml0eSA9IHJlcXVpcmUoXCIuL2NvbnN0YW50cy9JbmZpbml0eVwiKTtcblxudmFyIF9pID0gcmVxdWlyZShcIi4vY29uc3RhbnRzL2lcIik7XG5cbnZhciBfZmFsc2UgPSByZXF1aXJlKFwiLi9jb25zdGFudHMvZmFsc2VcIik7XG5cbnZhciBfZSA9IHJlcXVpcmUoXCIuL2NvbnN0YW50cy9lXCIpO1xuXG52YXIgX3VuaXQgPSByZXF1aXJlKFwiLi9jb25zdHJ1Y3Rpb24vdW5pdFwiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi9jb25zdHJ1Y3Rpb24vc3RyaW5nXCIpO1xuXG52YXIgX3NwbGl0VW5pdCA9IHJlcXVpcmUoXCIuL2NvbnN0cnVjdGlvbi9zcGxpdFVuaXRcIik7XG5cbnZhciBfc3BhcnNlID0gcmVxdWlyZShcIi4vY29uc3RydWN0aW9uL3NwYXJzZVwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi9jb25zdHJ1Y3Rpb24vbnVtYmVyXCIpO1xuXG52YXIgX21hdHJpeCA9IHJlcXVpcmUoXCIuL2NvbnN0cnVjdGlvbi9tYXRyaXhcIik7XG5cbnZhciBfY29uc3RydWN0aW9uID0gcmVxdWlyZShcIi4vY29uc3RydWN0aW9uXCIpO1xuXG52YXIgX2ZyYWN0aW9uID0gcmVxdWlyZShcIi4vY29uc3RydWN0aW9uL2ZyYWN0aW9uXCIpO1xuXG52YXIgX2NyZWF0ZVVuaXQgPSByZXF1aXJlKFwiLi9jb25zdHJ1Y3Rpb24vY3JlYXRlVW5pdFwiKTtcblxudmFyIF9jb21wbGV4ID0gcmVxdWlyZShcIi4vY29uc3RydWN0aW9uL2NvbXBsZXhcIik7XG5cbnZhciBfYm9vbGVhbiA9IHJlcXVpcmUoXCIuL2NvbnN0cnVjdGlvbi9ib29sZWFuXCIpO1xuXG52YXIgX2RvdFBvdyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZG90UG93XCIpO1xuXG52YXIgX2x1c29sdmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hbGdlYnJhL2x1c29sdmVcIik7XG5cbnZhciBfc3VidHJhY3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL3N1YnRyYWN0XCIpO1xuXG52YXIgX3ZhcmlhbmNlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RhdGlzdGljcy92YXJpYW5jZVwiKTtcblxudmFyIF9zaW4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvc2luXCIpO1xuXG52YXIgX251bWVyaWMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy9udW1lcmljXCIpO1xuXG52YXIgX2NvbHVtbiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9jb2x1bW5cIik7XG5cbnZhciBfcm93ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3Jvd1wiKTtcblxudmFyIGVtYmVkZGVkRG9jcyA9IHtcbiAgLy8gY29uc3RydWN0aW9uIGZ1bmN0aW9uc1xuICBiaWdudW1iZXI6IF9iaWdudW1iZXIuYmlnbnVtYmVyRG9jcyxcbiAgXCJib29sZWFuXCI6IF9ib29sZWFuLmJvb2xlYW5Eb2NzLFxuICBjb21wbGV4OiBfY29tcGxleC5jb21wbGV4RG9jcyxcbiAgY3JlYXRlVW5pdDogX2NyZWF0ZVVuaXQuY3JlYXRlVW5pdERvY3MsXG4gIGZyYWN0aW9uOiBfZnJhY3Rpb24uZnJhY3Rpb25Eb2NzLFxuICBpbmRleDogX2NvbnN0cnVjdGlvbi5pbmRleERvY3MsXG4gIG1hdHJpeDogX21hdHJpeC5tYXRyaXhEb2NzLFxuICBudW1iZXI6IF9udW1iZXIubnVtYmVyRG9jcyxcbiAgc3BhcnNlOiBfc3BhcnNlLnNwYXJzZURvY3MsXG4gIHNwbGl0VW5pdDogX3NwbGl0VW5pdC5zcGxpdFVuaXREb2NzLFxuICBzdHJpbmc6IF9zdHJpbmcuc3RyaW5nRG9jcyxcbiAgdW5pdDogX3VuaXQudW5pdERvY3MsXG4gIC8vIGNvbnN0YW50c1xuICBlOiBfZS5lRG9jcyxcbiAgRTogX2UuZURvY3MsXG4gIFwiZmFsc2VcIjogX2ZhbHNlLmZhbHNlRG9jcyxcbiAgaTogX2kuaURvY3MsXG4gIEluZmluaXR5OiBfSW5maW5pdHkuSW5maW5pdHlEb2NzLFxuICBMTjI6IF9MTjIuTE4yRG9jcyxcbiAgTE4xMDogX0xOLkxOMTBEb2NzLFxuICBMT0cyRTogX0xPRzJFLkxPRzJFRG9jcyxcbiAgTE9HMTBFOiBfTE9HMTBFLkxPRzEwRURvY3MsXG4gIE5hTjogX05hTi5OYU5Eb2NzLFxuICBcIm51bGxcIjogX251bGwubnVsbERvY3MsXG4gIHBpOiBfcGkucGlEb2NzLFxuICBQSTogX3BpLnBpRG9jcyxcbiAgcGhpOiBfcGhpLnBoaURvY3MsXG4gIFNRUlQxXzI6IF9TUVJUMV8uU1FSVDEyRG9jcyxcbiAgU1FSVDI6IF9TUVJULlNRUlQyRG9jcyxcbiAgdGF1OiBfdGF1LnRhdURvY3MsXG4gIFwidHJ1ZVwiOiBfdHJ1ZS50cnVlRG9jcyxcbiAgdmVyc2lvbjogX3ZlcnNpb24udmVyc2lvbkRvY3MsXG4gIC8vIHBoeXNpY2FsIGNvbnN0YW50c1xuICAvLyBUT0RPOiBtb3JlIGRldGFpbGVkIGRvY3MgZm9yIHBoeXNpY2FsIGNvbnN0YW50c1xuICBzcGVlZE9mTGlnaHQ6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1NwZWVkIG9mIGxpZ2h0IGluIHZhY3V1bScsXG4gICAgZXhhbXBsZXM6IFsnc3BlZWRPZkxpZ2h0J11cbiAgfSxcbiAgZ3Jhdml0YXRpb25Db25zdGFudDoge1xuICAgIGRlc2NyaXB0aW9uOiAnTmV3dG9uaWFuIGNvbnN0YW50IG9mIGdyYXZpdGF0aW9uJyxcbiAgICBleGFtcGxlczogWydncmF2aXRhdGlvbkNvbnN0YW50J11cbiAgfSxcbiAgcGxhbmNrQ29uc3RhbnQ6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1BsYW5jayBjb25zdGFudCcsXG4gICAgZXhhbXBsZXM6IFsncGxhbmNrQ29uc3RhbnQnXVxuICB9LFxuICByZWR1Y2VkUGxhbmNrQ29uc3RhbnQ6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1JlZHVjZWQgUGxhbmNrIGNvbnN0YW50JyxcbiAgICBleGFtcGxlczogWydyZWR1Y2VkUGxhbmNrQ29uc3RhbnQnXVxuICB9LFxuICBtYWduZXRpY0NvbnN0YW50OiB7XG4gICAgZGVzY3JpcHRpb246ICdNYWduZXRpYyBjb25zdGFudCAodmFjdXVtIHBlcm1lYWJpbGl0eSknLFxuICAgIGV4YW1wbGVzOiBbJ21hZ25ldGljQ29uc3RhbnQnXVxuICB9LFxuICBlbGVjdHJpY0NvbnN0YW50OiB7XG4gICAgZGVzY3JpcHRpb246ICdFbGVjdHJpYyBjb25zdGFudCAodmFjdXVtIHBlcm1lYWJpbGl0eSknLFxuICAgIGV4YW1wbGVzOiBbJ2VsZWN0cmljQ29uc3RhbnQnXVxuICB9LFxuICB2YWN1dW1JbXBlZGFuY2U6IHtcbiAgICBkZXNjcmlwdGlvbjogJ0NoYXJhY3RlcmlzdGljIGltcGVkYW5jZSBvZiB2YWN1dW0nLFxuICAgIGV4YW1wbGVzOiBbJ3ZhY3V1bUltcGVkYW5jZSddXG4gIH0sXG4gIGNvdWxvbWI6IHtcbiAgICBkZXNjcmlwdGlvbjogJ0NvdWxvbWJcXCdzIGNvbnN0YW50JyxcbiAgICBleGFtcGxlczogWydjb3Vsb21iJ11cbiAgfSxcbiAgZWxlbWVudGFyeUNoYXJnZToge1xuICAgIGRlc2NyaXB0aW9uOiAnRWxlbWVudGFyeSBjaGFyZ2UnLFxuICAgIGV4YW1wbGVzOiBbJ2VsZW1lbnRhcnlDaGFyZ2UnXVxuICB9LFxuICBib2hyTWFnbmV0b246IHtcbiAgICBkZXNjcmlwdGlvbjogJ0JvcmggbWFnbmV0b24nLFxuICAgIGV4YW1wbGVzOiBbJ2JvaHJNYWduZXRvbiddXG4gIH0sXG4gIGNvbmR1Y3RhbmNlUXVhbnR1bToge1xuICAgIGRlc2NyaXB0aW9uOiAnQ29uZHVjdGFuY2UgcXVhbnR1bScsXG4gICAgZXhhbXBsZXM6IFsnY29uZHVjdGFuY2VRdWFudHVtJ11cbiAgfSxcbiAgaW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bToge1xuICAgIGRlc2NyaXB0aW9uOiAnSW52ZXJzZSBjb25kdWN0YW5jZSBxdWFudHVtJyxcbiAgICBleGFtcGxlczogWydpbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtJ11cbiAgfSxcbiAgLy8gam9zZXBoc29uOiB7ZGVzY3JpcHRpb246ICdKb3NlcGhzb24gY29uc3RhbnQnLCBleGFtcGxlczogWydqb3NlcGhzb24nXX0sXG4gIG1hZ25ldGljRmx1eFF1YW50dW06IHtcbiAgICBkZXNjcmlwdGlvbjogJ01hZ25ldGljIGZsdXggcXVhbnR1bScsXG4gICAgZXhhbXBsZXM6IFsnbWFnbmV0aWNGbHV4UXVhbnR1bSddXG4gIH0sXG4gIG51Y2xlYXJNYWduZXRvbjoge1xuICAgIGRlc2NyaXB0aW9uOiAnTnVjbGVhciBtYWduZXRvbicsXG4gICAgZXhhbXBsZXM6IFsnbnVjbGVhck1hZ25ldG9uJ11cbiAgfSxcbiAga2xpdHppbmc6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1ZvbiBLbGl0emluZyBjb25zdGFudCcsXG4gICAgZXhhbXBsZXM6IFsna2xpdHppbmcnXVxuICB9LFxuICBib2hyUmFkaXVzOiB7XG4gICAgZGVzY3JpcHRpb246ICdCb3JoIHJhZGl1cycsXG4gICAgZXhhbXBsZXM6IFsnYm9oclJhZGl1cyddXG4gIH0sXG4gIGNsYXNzaWNhbEVsZWN0cm9uUmFkaXVzOiB7XG4gICAgZGVzY3JpcHRpb246ICdDbGFzc2ljYWwgZWxlY3Ryb24gcmFkaXVzJyxcbiAgICBleGFtcGxlczogWydjbGFzc2ljYWxFbGVjdHJvblJhZGl1cyddXG4gIH0sXG4gIGVsZWN0cm9uTWFzczoge1xuICAgIGRlc2NyaXB0aW9uOiAnRWxlY3Ryb24gbWFzcycsXG4gICAgZXhhbXBsZXM6IFsnZWxlY3Ryb25NYXNzJ11cbiAgfSxcbiAgZmVybWlDb3VwbGluZzoge1xuICAgIGRlc2NyaXB0aW9uOiAnRmVybWkgY291cGxpbmcgY29uc3RhbnQnLFxuICAgIGV4YW1wbGVzOiBbJ2Zlcm1pQ291cGxpbmcnXVxuICB9LFxuICBmaW5lU3RydWN0dXJlOiB7XG4gICAgZGVzY3JpcHRpb246ICdGaW5lLXN0cnVjdHVyZSBjb25zdGFudCcsXG4gICAgZXhhbXBsZXM6IFsnZmluZVN0cnVjdHVyZSddXG4gIH0sXG4gIGhhcnRyZWVFbmVyZ3k6IHtcbiAgICBkZXNjcmlwdGlvbjogJ0hhcnRyZWUgZW5lcmd5JyxcbiAgICBleGFtcGxlczogWydoYXJ0cmVlRW5lcmd5J11cbiAgfSxcbiAgcHJvdG9uTWFzczoge1xuICAgIGRlc2NyaXB0aW9uOiAnUHJvdG9uIG1hc3MnLFxuICAgIGV4YW1wbGVzOiBbJ3Byb3Rvbk1hc3MnXVxuICB9LFxuICBkZXV0ZXJvbk1hc3M6IHtcbiAgICBkZXNjcmlwdGlvbjogJ0RldXRlcm9uIE1hc3MnLFxuICAgIGV4YW1wbGVzOiBbJ2RldXRlcm9uTWFzcyddXG4gIH0sXG4gIG5ldXRyb25NYXNzOiB7XG4gICAgZGVzY3JpcHRpb246ICdOZXV0cm9uIG1hc3MnLFxuICAgIGV4YW1wbGVzOiBbJ25ldXRyb25NYXNzJ11cbiAgfSxcbiAgcXVhbnR1bU9mQ2lyY3VsYXRpb246IHtcbiAgICBkZXNjcmlwdGlvbjogJ1F1YW50dW0gb2YgY2lyY3VsYXRpb24nLFxuICAgIGV4YW1wbGVzOiBbJ3F1YW50dW1PZkNpcmN1bGF0aW9uJ11cbiAgfSxcbiAgcnlkYmVyZzoge1xuICAgIGRlc2NyaXB0aW9uOiAnUnlkYmVyZyBjb25zdGFudCcsXG4gICAgZXhhbXBsZXM6IFsncnlkYmVyZyddXG4gIH0sXG4gIHRob21zb25Dcm9zc1NlY3Rpb246IHtcbiAgICBkZXNjcmlwdGlvbjogJ1Rob21zb24gY3Jvc3Mgc2VjdGlvbicsXG4gICAgZXhhbXBsZXM6IFsndGhvbXNvbkNyb3NzU2VjdGlvbiddXG4gIH0sXG4gIHdlYWtNaXhpbmdBbmdsZToge1xuICAgIGRlc2NyaXB0aW9uOiAnV2VhayBtaXhpbmcgYW5nbGUnLFxuICAgIGV4YW1wbGVzOiBbJ3dlYWtNaXhpbmdBbmdsZSddXG4gIH0sXG4gIGVmaW1vdkZhY3Rvcjoge1xuICAgIGRlc2NyaXB0aW9uOiAnRWZpbW92IGZhY3RvcicsXG4gICAgZXhhbXBsZXM6IFsnZWZpbW92RmFjdG9yJ11cbiAgfSxcbiAgYXRvbWljTWFzczoge1xuICAgIGRlc2NyaXB0aW9uOiAnQXRvbWljIG1hc3MgY29uc3RhbnQnLFxuICAgIGV4YW1wbGVzOiBbJ2F0b21pY01hc3MnXVxuICB9LFxuICBhdm9nYWRybzoge1xuICAgIGRlc2NyaXB0aW9uOiAnQXZvZ2Fkcm9cXCdzIG51bWJlcicsXG4gICAgZXhhbXBsZXM6IFsnYXZvZ2Fkcm8nXVxuICB9LFxuICBib2x0em1hbm46IHtcbiAgICBkZXNjcmlwdGlvbjogJ0JvbHR6bWFubiBjb25zdGFudCcsXG4gICAgZXhhbXBsZXM6IFsnYm9sdHptYW5uJ11cbiAgfSxcbiAgZmFyYWRheToge1xuICAgIGRlc2NyaXB0aW9uOiAnRmFyYWRheSBjb25zdGFudCcsXG4gICAgZXhhbXBsZXM6IFsnZmFyYWRheSddXG4gIH0sXG4gIGZpcnN0UmFkaWF0aW9uOiB7XG4gICAgZGVzY3JpcHRpb246ICdGaXJzdCByYWRpYXRpb24gY29uc3RhbnQnLFxuICAgIGV4YW1wbGVzOiBbJ2ZpcnN0UmFkaWF0aW9uJ11cbiAgfSxcbiAgbG9zY2htaWR0OiB7XG4gICAgZGVzY3JpcHRpb246ICdMb3NjaG1pZHQgY29uc3RhbnQgYXQgVD0yNzMuMTUgSyBhbmQgcD0xMDEuMzI1IGtQYScsXG4gICAgZXhhbXBsZXM6IFsnbG9zY2htaWR0J11cbiAgfSxcbiAgZ2FzQ29uc3RhbnQ6IHtcbiAgICBkZXNjcmlwdGlvbjogJ0dhcyBjb25zdGFudCcsXG4gICAgZXhhbXBsZXM6IFsnZ2FzQ29uc3RhbnQnXVxuICB9LFxuICBtb2xhclBsYW5ja0NvbnN0YW50OiB7XG4gICAgZGVzY3JpcHRpb246ICdNb2xhciBQbGFuY2sgY29uc3RhbnQnLFxuICAgIGV4YW1wbGVzOiBbJ21vbGFyUGxhbmNrQ29uc3RhbnQnXVxuICB9LFxuICBtb2xhclZvbHVtZToge1xuICAgIGRlc2NyaXB0aW9uOiAnTW9sYXIgdm9sdW1lIG9mIGFuIGlkZWFsIGdhcyBhdCBUPTI3My4xNSBLIGFuZCBwPTEwMS4zMjUga1BhJyxcbiAgICBleGFtcGxlczogWydtb2xhclZvbHVtZSddXG4gIH0sXG4gIHNhY2t1clRldHJvZGU6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1NhY2t1ci1UZXRyb2RlIGNvbnN0YW50IGF0IFQ9MSBLIGFuZCBwPTEwMS4zMjUga1BhJyxcbiAgICBleGFtcGxlczogWydzYWNrdXJUZXRyb2RlJ11cbiAgfSxcbiAgc2Vjb25kUmFkaWF0aW9uOiB7XG4gICAgZGVzY3JpcHRpb246ICdTZWNvbmQgcmFkaWF0aW9uIGNvbnN0YW50JyxcbiAgICBleGFtcGxlczogWydzZWNvbmRSYWRpYXRpb24nXVxuICB9LFxuICBzdGVmYW5Cb2x0em1hbm46IHtcbiAgICBkZXNjcmlwdGlvbjogJ1N0ZWZhbi1Cb2x0em1hbm4gY29uc3RhbnQnLFxuICAgIGV4YW1wbGVzOiBbJ3N0ZWZhbkJvbHR6bWFubiddXG4gIH0sXG4gIHdpZW5EaXNwbGFjZW1lbnQ6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1dpZW4gZGlzcGxhY2VtZW50IGxhdyBjb25zdGFudCcsXG4gICAgZXhhbXBsZXM6IFsnd2llbkRpc3BsYWNlbWVudCddXG4gIH0sXG4gIC8vIHNwZWN0cmFsUmFkaWFuY2U6IHtkZXNjcmlwdGlvbjogJ0ZpcnN0IHJhZGlhdGlvbiBjb25zdGFudCBmb3Igc3BlY3RyYWwgcmFkaWFuY2UnLCBleGFtcGxlczogWydzcGVjdHJhbFJhZGlhbmNlJ119LFxuICBtb2xhck1hc3M6IHtcbiAgICBkZXNjcmlwdGlvbjogJ01vbGFyIG1hc3MgY29uc3RhbnQnLFxuICAgIGV4YW1wbGVzOiBbJ21vbGFyTWFzcyddXG4gIH0sXG4gIG1vbGFyTWFzc0MxMjoge1xuICAgIGRlc2NyaXB0aW9uOiAnTW9sYXIgbWFzcyBjb25zdGFudCBvZiBjYXJib24tMTInLFxuICAgIGV4YW1wbGVzOiBbJ21vbGFyTWFzc0MxMiddXG4gIH0sXG4gIGdyYXZpdHk6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1N0YW5kYXJkIGFjY2VsZXJhdGlvbiBvZiBncmF2aXR5IChzdGFuZGFyZCBhY2NlbGVyYXRpb24gb2YgZnJlZS1mYWxsIG9uIEVhcnRoKScsXG4gICAgZXhhbXBsZXM6IFsnZ3Jhdml0eSddXG4gIH0sXG4gIHBsYW5ja0xlbmd0aDoge1xuICAgIGRlc2NyaXB0aW9uOiAnUGxhbmNrIGxlbmd0aCcsXG4gICAgZXhhbXBsZXM6IFsncGxhbmNrTGVuZ3RoJ11cbiAgfSxcbiAgcGxhbmNrTWFzczoge1xuICAgIGRlc2NyaXB0aW9uOiAnUGxhbmNrIG1hc3MnLFxuICAgIGV4YW1wbGVzOiBbJ3BsYW5ja01hc3MnXVxuICB9LFxuICBwbGFuY2tUaW1lOiB7XG4gICAgZGVzY3JpcHRpb246ICdQbGFuY2sgdGltZScsXG4gICAgZXhhbXBsZXM6IFsncGxhbmNrVGltZSddXG4gIH0sXG4gIHBsYW5ja0NoYXJnZToge1xuICAgIGRlc2NyaXB0aW9uOiAnUGxhbmNrIGNoYXJnZScsXG4gICAgZXhhbXBsZXM6IFsncGxhbmNrQ2hhcmdlJ11cbiAgfSxcbiAgcGxhbmNrVGVtcGVyYXR1cmU6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1BsYW5jayB0ZW1wZXJhdHVyZScsXG4gICAgZXhhbXBsZXM6IFsncGxhbmNrVGVtcGVyYXR1cmUnXVxuICB9LFxuICAvLyBmdW5jdGlvbnMgLSBhbGdlYnJhXG4gIGRlcml2YXRpdmU6IF9kZXJpdmF0aXZlLmRlcml2YXRpdmVEb2NzLFxuICBsc29sdmU6IF9sc29sdmUubHNvbHZlRG9jcyxcbiAgbHVwOiBfbHVwLmx1cERvY3MsXG4gIGx1c29sdmU6IF9sdXNvbHZlLmx1c29sdmVEb2NzLFxuICBzaW1wbGlmeTogX3NpbXBsaWZ5LnNpbXBsaWZ5RG9jcyxcbiAgcmF0aW9uYWxpemU6IF9yYXRpb25hbGl6ZS5yYXRpb25hbGl6ZURvY3MsXG4gIHNsdTogX3NsdS5zbHVEb2NzLFxuICB1c29sdmU6IF91c29sdmUudXNvbHZlRG9jcyxcbiAgcXI6IF9xci5xckRvY3MsXG4gIC8vIGZ1bmN0aW9ucyAtIGFyaXRobWV0aWNcbiAgYWJzOiBfYWJzLmFic0RvY3MsXG4gIGFkZDogX2FkZC5hZGREb2NzLFxuICBjYnJ0OiBfY2JydC5jYnJ0RG9jcyxcbiAgY2VpbDogX2NlaWwuY2VpbERvY3MsXG4gIGN1YmU6IF9jdWJlLmN1YmVEb2NzLFxuICBkaXZpZGU6IF9kaXZpZGUuZGl2aWRlRG9jcyxcbiAgZG90RGl2aWRlOiBfZG90RGl2aWRlLmRvdERpdmlkZURvY3MsXG4gIGRvdE11bHRpcGx5OiBfZG90TXVsdGlwbHkuZG90TXVsdGlwbHlEb2NzLFxuICBkb3RQb3c6IF9kb3RQb3cuZG90UG93RG9jcyxcbiAgZXhwOiBfZXhwLmV4cERvY3MsXG4gIGV4cG06IF9leHBtMi5leHBtRG9jcyxcbiAgZXhwbTE6IF9leHBtLmV4cG0xRG9jcyxcbiAgZml4OiBfZml4LmZpeERvY3MsXG4gIGZsb29yOiBfZmxvb3IuZmxvb3JEb2NzLFxuICBnY2Q6IF9nY2QuZ2NkRG9jcyxcbiAgaHlwb3Q6IF9oeXBvdC5oeXBvdERvY3MsXG4gIGxjbTogX2xjbS5sY21Eb2NzLFxuICBsb2c6IF9sb2czLmxvZ0RvY3MsXG4gIGxvZzI6IF9sb2cyLmxvZzJEb2NzLFxuICBsb2cxcDogX2xvZzFwLmxvZzFwRG9jcyxcbiAgbG9nMTA6IF9sb2cubG9nMTBEb2NzLFxuICBtb2Q6IF9tb2QubW9kRG9jcyxcbiAgbXVsdGlwbHk6IF9tdWx0aXBseS5tdWx0aXBseURvY3MsXG4gIG5vcm06IF9ub3JtLm5vcm1Eb2NzLFxuICBudGhSb290OiBfbnRoUm9vdC5udGhSb290RG9jcyxcbiAgbnRoUm9vdHM6IF9udGhSb290cy5udGhSb290c0RvY3MsXG4gIHBvdzogX3Bvdy5wb3dEb2NzLFxuICByb3VuZDogX3JvdW5kLnJvdW5kRG9jcyxcbiAgc2lnbjogX3NpZ24uc2lnbkRvY3MsXG4gIHNxcnQ6IF9zcXJ0LnNxcnREb2NzLFxuICBzcXJ0bTogX3NxcnRtLnNxcnRtRG9jcyxcbiAgc3F1YXJlOiBfc3F1YXJlLnNxdWFyZURvY3MsXG4gIHN1YnRyYWN0OiBfc3VidHJhY3Quc3VidHJhY3REb2NzLFxuICB1bmFyeU1pbnVzOiBfdW5hcnlNaW51cy51bmFyeU1pbnVzRG9jcyxcbiAgdW5hcnlQbHVzOiBfdW5hcnlQbHVzLnVuYXJ5UGx1c0RvY3MsXG4gIHhnY2Q6IF94Z2NkLnhnY2REb2NzLFxuICAvLyBmdW5jdGlvbnMgLSBiaXR3aXNlXG4gIGJpdEFuZDogX2JpdEFuZC5iaXRBbmREb2NzLFxuICBiaXROb3Q6IF9iaXROb3QuYml0Tm90RG9jcyxcbiAgYml0T3I6IF9iaXRPci5iaXRPckRvY3MsXG4gIGJpdFhvcjogX2JpdFhvci5iaXRYb3JEb2NzLFxuICBsZWZ0U2hpZnQ6IF9sZWZ0U2hpZnQubGVmdFNoaWZ0RG9jcyxcbiAgcmlnaHRBcml0aFNoaWZ0OiBfcmlnaHRBcml0aFNoaWZ0LnJpZ2h0QXJpdGhTaGlmdERvY3MsXG4gIHJpZ2h0TG9nU2hpZnQ6IF9yaWdodExvZ1NoaWZ0LnJpZ2h0TG9nU2hpZnREb2NzLFxuICAvLyBmdW5jdGlvbnMgLSBjb21iaW5hdG9yaWNzXG4gIGJlbGxOdW1iZXJzOiBfYmVsbE51bWJlcnMuYmVsbE51bWJlcnNEb2NzLFxuICBjYXRhbGFuOiBfY2F0YWxhbi5jYXRhbGFuRG9jcyxcbiAgY29tcG9zaXRpb246IF9jb21wb3NpdGlvbi5jb21wb3NpdGlvbkRvY3MsXG4gIHN0aXJsaW5nUzI6IF9zdGlybGluZ1Muc3RpcmxpbmdTMkRvY3MsXG4gIC8vIGZ1bmN0aW9ucyAtIGNvcmVcbiAgY29uZmlnOiBfY29uZmlnLmNvbmZpZ0RvY3MsXG4gIFwiaW1wb3J0XCI6IF9pbXBvcnQuaW1wb3J0RG9jcyxcbiAgdHlwZWQ6IF90eXBlZC50eXBlZERvY3MsXG4gIC8vIGZ1bmN0aW9ucyAtIGNvbXBsZXhcbiAgYXJnOiBfYXJnLmFyZ0RvY3MsXG4gIGNvbmo6IF9jb25qLmNvbmpEb2NzLFxuICByZTogX3JlLnJlRG9jcyxcbiAgaW06IF9pbS5pbURvY3MsXG4gIC8vIGZ1bmN0aW9ucyAtIGV4cHJlc3Npb25cbiAgZXZhbHVhdGU6IF9ldmFsdWF0ZS5ldmFsdWF0ZURvY3MsXG4gIGV2YWw6IF9ldmFsdWF0ZS5ldmFsdWF0ZURvY3MsXG4gIC8vIFRPRE86IGRlcHJlY2F0ZWQsIGNsZWFudXAgaW4gdjdcbiAgaGVscDogX2hlbHAuaGVscERvY3MsXG4gIC8vIGZ1bmN0aW9ucyAtIGdlb21ldHJ5XG4gIGRpc3RhbmNlOiBfZGlzdGFuY2UuZGlzdGFuY2VEb2NzLFxuICBpbnRlcnNlY3Q6IF9pbnRlcnNlY3QuaW50ZXJzZWN0RG9jcyxcbiAgLy8gZnVuY3Rpb25zIC0gbG9naWNhbFxuICBhbmQ6IF9hbmQuYW5kRG9jcyxcbiAgbm90OiBfbm90Lm5vdERvY3MsXG4gIG9yOiBfb3Iub3JEb2NzLFxuICB4b3I6IF94b3IueG9yRG9jcyxcbiAgLy8gZnVuY3Rpb25zIC0gbWF0cml4XG4gIGNvbmNhdDogX2NvbmNhdC5jb25jYXREb2NzLFxuICBjcm9zczogX2Nyb3NzLmNyb3NzRG9jcyxcbiAgY29sdW1uOiBfY29sdW1uLmNvbHVtbkRvY3MsXG4gIGN0cmFuc3Bvc2U6IF9jdHJhbnNwb3NlLmN0cmFuc3Bvc2VEb2NzLFxuICBkZXQ6IF9kZXQuZGV0RG9jcyxcbiAgZGlhZzogX2RpYWcuZGlhZ0RvY3MsXG4gIGRvdDogX2RvdC5kb3REb2NzLFxuICBnZXRNYXRyaXhEYXRhVHlwZTogX2dldE1hdHJpeERhdGFUeXBlLmdldE1hdHJpeERhdGFUeXBlRG9jcyxcbiAgaWRlbnRpdHk6IF9pZGVudGl0eS5pZGVudGl0eURvY3MsXG4gIGZpbHRlcjogX2ZpbHRlci5maWx0ZXJEb2NzLFxuICBmbGF0dGVuOiBfZmxhdHRlbi5mbGF0dGVuRG9jcyxcbiAgZm9yRWFjaDogX2ZvckVhY2guZm9yRWFjaERvY3MsXG4gIGludjogX2ludi5pbnZEb2NzLFxuICBlaWdzOiBfZWlncy5laWdzRG9jcyxcbiAga3JvbjogX2tyb24ua3JvbkRvY3MsXG4gIG1hcDogX21hcC5tYXBEb2NzLFxuICBvbmVzOiBfb25lcy5vbmVzRG9jcyxcbiAgcGFydGl0aW9uU2VsZWN0OiBfcGFydGl0aW9uU2VsZWN0LnBhcnRpdGlvblNlbGVjdERvY3MsXG4gIHJhbmdlOiBfcmFuZ2UucmFuZ2VEb2NzLFxuICByZXNpemU6IF9yZXNpemUucmVzaXplRG9jcyxcbiAgcmVzaGFwZTogX3Jlc2hhcGUucmVzaGFwZURvY3MsXG4gIHJvdzogX3Jvdy5yb3dEb2NzLFxuICBzaXplOiBfc2l6ZS5zaXplRG9jcyxcbiAgc29ydDogX3NvcnQuc29ydERvY3MsXG4gIHNxdWVlemU6IF9zcXVlZXplLnNxdWVlemVEb2NzLFxuICBzdWJzZXQ6IF9zdWJzZXQuc3Vic2V0RG9jcyxcbiAgdHJhY2U6IF90cmFjZS50cmFjZURvY3MsXG4gIHRyYW5zcG9zZTogX3RyYW5zcG9zZS50cmFuc3Bvc2VEb2NzLFxuICB6ZXJvczogX3plcm9zLnplcm9zRG9jcyxcbiAgLy8gZnVuY3Rpb25zIC0gcHJvYmFiaWxpdHlcbiAgY29tYmluYXRpb25zOiBfY29tYmluYXRpb25zLmNvbWJpbmF0aW9uc0RvY3MsXG4gIGNvbWJpbmF0aW9uc1dpdGhSZXA6IF9jb21iaW5hdGlvbnNXaXRoUmVwLmNvbWJpbmF0aW9uc1dpdGhSZXBEb2NzLFxuICAvLyBkaXN0cmlidXRpb246IGRpc3RyaWJ1dGlvbkRvY3MsXG4gIGZhY3RvcmlhbDogX2ZhY3RvcmlhbC5mYWN0b3JpYWxEb2NzLFxuICBnYW1tYTogX2dhbW1hLmdhbW1hRG9jcyxcbiAga2xkaXZlcmdlbmNlOiBfa2xkaXZlcmdlbmNlLmtsZGl2ZXJnZW5jZURvY3MsXG4gIG11bHRpbm9taWFsOiBfbXVsdGlub21pYWwubXVsdGlub21pYWxEb2NzLFxuICBwZXJtdXRhdGlvbnM6IF9wZXJtdXRhdGlvbnMucGVybXV0YXRpb25zRG9jcyxcbiAgcGlja1JhbmRvbTogX3BpY2tSYW5kb20ucGlja1JhbmRvbURvY3MsXG4gIHJhbmRvbTogX3JhbmRvbS5yYW5kb21Eb2NzLFxuICByYW5kb21JbnQ6IF9yYW5kb21JbnQucmFuZG9tSW50RG9jcyxcbiAgLy8gZnVuY3Rpb25zIC0gcmVsYXRpb25hbFxuICBjb21wYXJlOiBfY29tcGFyZS5jb21wYXJlRG9jcyxcbiAgY29tcGFyZU5hdHVyYWw6IF9jb21wYXJlTmF0dXJhbC5jb21wYXJlTmF0dXJhbERvY3MsXG4gIGNvbXBhcmVUZXh0OiBfY29tcGFyZVRleHQuY29tcGFyZVRleHREb2NzLFxuICBkZWVwRXF1YWw6IF9kZWVwRXF1YWwuZGVlcEVxdWFsRG9jcyxcbiAgZXF1YWw6IF9lcXVhbC5lcXVhbERvY3MsXG4gIGVxdWFsVGV4dDogX2VxdWFsVGV4dC5lcXVhbFRleHREb2NzLFxuICBsYXJnZXI6IF9sYXJnZXIubGFyZ2VyRG9jcyxcbiAgbGFyZ2VyRXE6IF9sYXJnZXJFcS5sYXJnZXJFcURvY3MsXG4gIHNtYWxsZXI6IF9zbWFsbGVyLnNtYWxsZXJEb2NzLFxuICBzbWFsbGVyRXE6IF9zbWFsbGVyRXEuc21hbGxlckVxRG9jcyxcbiAgdW5lcXVhbDogX3VuZXF1YWwudW5lcXVhbERvY3MsXG4gIC8vIGZ1bmN0aW9ucyAtIHNldFxuICBzZXRDYXJ0ZXNpYW46IF9zZXRDYXJ0ZXNpYW4uc2V0Q2FydGVzaWFuRG9jcyxcbiAgc2V0RGlmZmVyZW5jZTogX3NldERpZmZlcmVuY2Uuc2V0RGlmZmVyZW5jZURvY3MsXG4gIHNldERpc3RpbmN0OiBfc2V0RGlzdGluY3Quc2V0RGlzdGluY3REb2NzLFxuICBzZXRJbnRlcnNlY3Q6IF9zZXRJbnRlcnNlY3Quc2V0SW50ZXJzZWN0RG9jcyxcbiAgc2V0SXNTdWJzZXQ6IF9zZXRJc1N1YnNldC5zZXRJc1N1YnNldERvY3MsXG4gIHNldE11bHRpcGxpY2l0eTogX3NldE11bHRpcGxpY2l0eS5zZXRNdWx0aXBsaWNpdHlEb2NzLFxuICBzZXRQb3dlcnNldDogX3NldFBvd2Vyc2V0LnNldFBvd2Vyc2V0RG9jcyxcbiAgc2V0U2l6ZTogX3NldFNpemUuc2V0U2l6ZURvY3MsXG4gIHNldFN5bURpZmZlcmVuY2U6IF9zZXRTeW1EaWZmZXJlbmNlLnNldFN5bURpZmZlcmVuY2VEb2NzLFxuICBzZXRVbmlvbjogX3NldFVuaW9uLnNldFVuaW9uRG9jcyxcbiAgLy8gZnVuY3Rpb25zIC0gc3BlY2lhbFxuICBlcmY6IF9lcmYuZXJmRG9jcyxcbiAgLy8gZnVuY3Rpb25zIC0gc3RhdGlzdGljc1xuICBtYWQ6IF9tYWQubWFkRG9jcyxcbiAgbWF4OiBfbWF4Lm1heERvY3MsXG4gIG1lYW46IF9tZWFuLm1lYW5Eb2NzLFxuICBtZWRpYW46IF9tZWRpYW4ubWVkaWFuRG9jcyxcbiAgbWluOiBfbWluLm1pbkRvY3MsXG4gIG1vZGU6IF9tb2RlLm1vZGVEb2NzLFxuICBwcm9kOiBfcHJvZC5wcm9kRG9jcyxcbiAgcXVhbnRpbGVTZXE6IF9xdWFudGlsZVNlcS5xdWFudGlsZVNlcURvY3MsXG4gIHN0ZDogX3N0ZC5zdGREb2NzLFxuICBzdW06IF9zdW0uc3VtRG9jcyxcbiAgdmFyaWFuY2U6IF92YXJpYW5jZS52YXJpYW5jZURvY3MsXG4gIFwidmFyXCI6IF92YXJpYW5jZS52YXJpYW5jZURvY3MsXG4gIC8vIFRPRE86IGRlcHJlY2F0ZWQsIGNsZWFudXAgaW4gdjdcbiAgLy8gZnVuY3Rpb25zIC0gdHJpZ29ub21ldHJ5XG4gIGFjb3M6IF9hY29zLmFjb3NEb2NzLFxuICBhY29zaDogX2Fjb3NoLmFjb3NoRG9jcyxcbiAgYWNvdDogX2Fjb3QuYWNvdERvY3MsXG4gIGFjb3RoOiBfYWNvdGguYWNvdGhEb2NzLFxuICBhY3NjOiBfYWNzYy5hY3NjRG9jcyxcbiAgYWNzY2g6IF9hY3NjaC5hY3NjaERvY3MsXG4gIGFzZWM6IF9hc2VjLmFzZWNEb2NzLFxuICBhc2VjaDogX2FzZWNoLmFzZWNoRG9jcyxcbiAgYXNpbjogX2FzaW4uYXNpbkRvY3MsXG4gIGFzaW5oOiBfYXNpbmguYXNpbmhEb2NzLFxuICBhdGFuOiBfYXRhbjIuYXRhbkRvY3MsXG4gIGF0YW5oOiBfYXRhbmguYXRhbmhEb2NzLFxuICBhdGFuMjogX2F0YW4uYXRhbjJEb2NzLFxuICBjb3M6IF9jb3MuY29zRG9jcyxcbiAgY29zaDogX2Nvc2guY29zaERvY3MsXG4gIGNvdDogX2NvdC5jb3REb2NzLFxuICBjb3RoOiBfY290aC5jb3RoRG9jcyxcbiAgY3NjOiBfY3NjLmNzY0RvY3MsXG4gIGNzY2g6IF9jc2NoLmNzY2hEb2NzLFxuICBzZWM6IF9zZWMuc2VjRG9jcyxcbiAgc2VjaDogX3NlY2guc2VjaERvY3MsXG4gIHNpbjogX3Npbi5zaW5Eb2NzLFxuICBzaW5oOiBfc2luaC5zaW5oRG9jcyxcbiAgdGFuOiBfdGFuLnRhbkRvY3MsXG4gIHRhbmg6IF90YW5oLnRhbmhEb2NzLFxuICAvLyBmdW5jdGlvbnMgLSB1bml0c1xuICB0bzogX3RvLnRvRG9jcyxcbiAgLy8gZnVuY3Rpb25zIC0gdXRpbHNcbiAgY2xvbmU6IF9jbG9uZS5jbG9uZURvY3MsXG4gIGZvcm1hdDogX2Zvcm1hdC5mb3JtYXREb2NzLFxuICBpc05hTjogX2lzTmFOLmlzTmFORG9jcyxcbiAgaXNJbnRlZ2VyOiBfaXNJbnRlZ2VyLmlzSW50ZWdlckRvY3MsXG4gIGlzTmVnYXRpdmU6IF9pc05lZ2F0aXZlLmlzTmVnYXRpdmVEb2NzLFxuICBpc051bWVyaWM6IF9pc051bWVyaWMuaXNOdW1lcmljRG9jcyxcbiAgaGFzTnVtZXJpY1ZhbHVlOiBfaGFzTnVtZXJpY1ZhbHVlLmhhc051bWVyaWNWYWx1ZURvY3MsXG4gIGlzUG9zaXRpdmU6IF9pc1Bvc2l0aXZlLmlzUG9zaXRpdmVEb2NzLFxuICBpc1ByaW1lOiBfaXNQcmltZS5pc1ByaW1lRG9jcyxcbiAgaXNaZXJvOiBfaXNaZXJvLmlzWmVyb0RvY3MsXG4gIC8vIHByaW50OiBwcmludERvY3MgLy8gVE9ETzogYWRkIGRvY3VtZW50YXRpb24gZm9yIHByaW50IGFzIHNvb24gYXMgdGhlIHBhcnNlciBzdXBwb3J0cyBvYmplY3RzLlxuICB0eXBlT2Y6IF90eXBlT2YudHlwZU9mRG9jcyxcbiAgXCJ0eXBlb2ZcIjogX3R5cGVPZi50eXBlT2ZEb2NzLFxuICAvLyBUT0RPOiBkZXByZWNhdGVkLCBjbGVhbnVwIGluIHY3XG4gIG51bWVyaWM6IF9udW1lcmljLm51bWVyaWNEb2NzXG59O1xuZXhwb3J0cy5lbWJlZGRlZERvY3MgPSBlbWJlZGRlZERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlcml2YXRpdmVEb2NzID0gdm9pZCAwO1xudmFyIGRlcml2YXRpdmVEb2NzID0ge1xuICBuYW1lOiAnZGVyaXZhdGl2ZScsXG4gIGNhdGVnb3J5OiAnQWxnZWJyYScsXG4gIHN5bnRheDogWydkZXJpdmF0aXZlKGV4cHIsIHZhcmlhYmxlKScsICdkZXJpdmF0aXZlKGV4cHIsIHZhcmlhYmxlLCB7c2ltcGxpZnk6IGJvb2xlYW59KSddLFxuICBkZXNjcmlwdGlvbjogJ1Rha2VzIHRoZSBkZXJpdmF0aXZlIG9mIGFuIGV4cHJlc3Npb24gZXhwcmVzc2VkIGluIHBhcnNlciBOb2Rlcy4gVGhlIGRlcml2YXRpdmUgd2lsbCBiZSB0YWtlbiBvdmVyIHRoZSBzdXBwbGllZCB2YXJpYWJsZSBpbiB0aGUgc2Vjb25kIHBhcmFtZXRlci4gSWYgdGhlcmUgYXJlIG11bHRpcGxlIHZhcmlhYmxlcyBpbiB0aGUgZXhwcmVzc2lvbiwgaXQgd2lsbCByZXR1cm4gYSBwYXJ0aWFsIGRlcml2YXRpdmUuJyxcbiAgZXhhbXBsZXM6IFsnZGVyaXZhdGl2ZShcIjJ4XjNcIiwgXCJ4XCIpJywgJ2Rlcml2YXRpdmUoXCIyeF4zXCIsIFwieFwiLCB7c2ltcGxpZnk6IGZhbHNlfSknLCAnZGVyaXZhdGl2ZShcIjJ4XjIgKyAzeCArIDRcIiwgXCJ4XCIpJywgJ2Rlcml2YXRpdmUoXCJzaW4oMngpXCIsIFwieFwiKScsICdmID0gcGFyc2UoXCJ4XjIgKyB4XCIpJywgJ3ggPSBwYXJzZShcInhcIiknLCAnZGYgPSBkZXJpdmF0aXZlKGYsIHgpJywgJ2RmLmV2YWx1YXRlKHt4OiAzfSknXSxcbiAgc2VlYWxzbzogWydzaW1wbGlmeScsICdwYXJzZScsICdldmFsdWF0ZSddXG59O1xuZXhwb3J0cy5kZXJpdmF0aXZlRG9jcyA9IGRlcml2YXRpdmVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5sc29sdmVEb2NzID0gdm9pZCAwO1xudmFyIGxzb2x2ZURvY3MgPSB7XG4gIG5hbWU6ICdsc29sdmUnLFxuICBjYXRlZ29yeTogJ0FsZ2VicmEnLFxuICBzeW50YXg6IFsneD1sc29sdmUoTCwgYiknXSxcbiAgZGVzY3JpcHRpb246ICdTb2x2ZXMgdGhlIGxpbmVhciBzeXN0ZW0gTCAqIHggPSBiIHdoZXJlIEwgaXMgYW4gW24geCBuXSBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeCBhbmQgYiBpcyBhIFtuXSBjb2x1bW4gdmVjdG9yLicsXG4gIGV4YW1wbGVzOiBbJ2EgPSBbLTIsIDM7IDIsIDFdJywgJ2IgPSBbMTEsIDldJywgJ3ggPSBsc29sdmUoYSwgYiknXSxcbiAgc2VlYWxzbzogWydsdXAnLCAnbHVzb2x2ZScsICd1c29sdmUnLCAnbWF0cml4JywgJ3NwYXJzZSddXG59O1xuZXhwb3J0cy5sc29sdmVEb2NzID0gbHNvbHZlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubHVwRG9jcyA9IHZvaWQgMDtcbnZhciBsdXBEb2NzID0ge1xuICBuYW1lOiAnbHVwJyxcbiAgY2F0ZWdvcnk6ICdBbGdlYnJhJyxcbiAgc3ludGF4OiBbJ2x1cChtKSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgTWF0cml4IExVIGRlY29tcG9zaXRpb24gd2l0aCBwYXJ0aWFsIHBpdm90aW5nLiBNYXRyaXggQSBpcyBkZWNvbXBvc2VkIGluIHRocmVlIG1hdHJpY2VzIChMLCBVLCBQKSB3aGVyZSBQICogQSA9IEwgKiBVJyxcbiAgZXhhbXBsZXM6IFsnbHVwKFtbMiwgMV0sIFsxLCA0XV0pJywgJ2x1cChtYXRyaXgoW1syLCAxXSwgWzEsIDRdXSkpJywgJ2x1cChzcGFyc2UoW1syLCAxXSwgWzEsIDRdXSkpJ10sXG4gIHNlZWFsc286IFsnbHVzb2x2ZScsICdsc29sdmUnLCAndXNvbHZlJywgJ21hdHJpeCcsICdzcGFyc2UnLCAnc2x1JywgJ3FyJ11cbn07XG5leHBvcnRzLmx1cERvY3MgPSBsdXBEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5sdXNvbHZlRG9jcyA9IHZvaWQgMDtcbnZhciBsdXNvbHZlRG9jcyA9IHtcbiAgbmFtZTogJ2x1c29sdmUnLFxuICBjYXRlZ29yeTogJ0FsZ2VicmEnLFxuICBzeW50YXg6IFsneD1sdXNvbHZlKEEsIGIpJywgJ3g9bHVzb2x2ZShsdSwgYiknXSxcbiAgZGVzY3JpcHRpb246ICdTb2x2ZXMgdGhlIGxpbmVhciBzeXN0ZW0gQSAqIHggPSBiIHdoZXJlIEEgaXMgYW4gW24geCBuXSBtYXRyaXggYW5kIGIgaXMgYSBbbl0gY29sdW1uIHZlY3Rvci4nLFxuICBleGFtcGxlczogWydhID0gWy0yLCAzOyAyLCAxXScsICdiID0gWzExLCA5XScsICd4ID0gbHVzb2x2ZShhLCBiKSddLFxuICBzZWVhbHNvOiBbJ2x1cCcsICdzbHUnLCAnbHNvbHZlJywgJ3Vzb2x2ZScsICdtYXRyaXgnLCAnc3BhcnNlJ11cbn07XG5leHBvcnRzLmx1c29sdmVEb2NzID0gbHVzb2x2ZURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnFyRG9jcyA9IHZvaWQgMDtcbnZhciBxckRvY3MgPSB7XG4gIG5hbWU6ICdxcicsXG4gIGNhdGVnb3J5OiAnQWxnZWJyYScsXG4gIHN5bnRheDogWydxcihBKSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZXMgdGhlIE1hdHJpeCBRUiBkZWNvbXBvc2l0aW9uLiBNYXRyaXggYEFgIGlzIGRlY29tcG9zZWQgaW4gdHdvIG1hdHJpY2VzIChgUWAsIGBSYCkgd2hlcmUgYFFgIGlzIGFuIG9ydGhvZ29uYWwgbWF0cml4IGFuZCBgUmAgaXMgYW4gdXBwZXIgdHJpYW5ndWxhciBtYXRyaXguJyxcbiAgZXhhbXBsZXM6IFsncXIoW1sxLCAtMSwgIDRdLCBbMSwgIDQsIC0yXSwgWzEsICA0LCAgMl0sIFsxLCAgLTEsIDBdXSknXSxcbiAgc2VlYWxzbzogWydsdXAnLCAnc2x1JywgJ21hdHJpeCddXG59O1xuZXhwb3J0cy5xckRvY3MgPSBxckRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJhdGlvbmFsaXplRG9jcyA9IHZvaWQgMDtcbnZhciByYXRpb25hbGl6ZURvY3MgPSB7XG4gIG5hbWU6ICdyYXRpb25hbGl6ZScsXG4gIGNhdGVnb3J5OiAnQWxnZWJyYScsXG4gIHN5bnRheDogWydyYXRpb25hbGl6ZShleHByKScsICdyYXRpb25hbGl6ZShleHByLCBzY29wZSknLCAncmF0aW9uYWxpemUoZXhwciwgc2NvcGUsIGRldGFpbGVkKSddLFxuICBkZXNjcmlwdGlvbjogJ1RyYW5zZm9ybSBhIHJhdGlvbmFsaXphYmxlIGV4cHJlc3Npb24gaW4gYSByYXRpb25hbCBmcmFjdGlvbi4gSWYgcmF0aW9uYWwgZnJhY3Rpb24gaXMgb25lIHZhcmlhYmxlIHBvbHlub21pYWwgdGhlbiBjb252ZXJ0cyB0aGUgbnVtZXJhdG9yIGFuZCBkZW5vbWluYXRvciBpbiBjYW5vbmljYWwgZm9ybSwgd2l0aCBkZWNyZWFzaW5nIGV4cG9uZW50cywgcmV0dXJuaW5nIHRoZSBjb2VmZmljaWVudHMgb2YgbnVtZXJhdG9yLicsXG4gIGV4YW1wbGVzOiBbJ3JhdGlvbmFsaXplKFwiMngveSAtIHkvKHgrMSlcIiknLCAncmF0aW9uYWxpemUoXCIyeC95IC0geS8oeCsxKVwiLCB0cnVlKSddLFxuICBzZWVhbHNvOiBbJ3NpbXBsaWZ5J11cbn07XG5leHBvcnRzLnJhdGlvbmFsaXplRG9jcyA9IHJhdGlvbmFsaXplRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2ltcGxpZnlEb2NzID0gdm9pZCAwO1xudmFyIHNpbXBsaWZ5RG9jcyA9IHtcbiAgbmFtZTogJ3NpbXBsaWZ5JyxcbiAgY2F0ZWdvcnk6ICdBbGdlYnJhJyxcbiAgc3ludGF4OiBbJ3NpbXBsaWZ5KGV4cHIpJywgJ3NpbXBsaWZ5KGV4cHIsIHJ1bGVzKSddLFxuICBkZXNjcmlwdGlvbjogJ1NpbXBsaWZ5IGFuIGV4cHJlc3Npb24gdHJlZS4nLFxuICBleGFtcGxlczogWydzaW1wbGlmeShcIjMgKyAyIC8gNFwiKScsICdzaW1wbGlmeShcIjJ4ICsgeFwiKScsICdmID0gcGFyc2UoXCJ4ICogKHggKyAyICsgeClcIiknLCAnc2ltcGxpZmllZCA9IHNpbXBsaWZ5KGYpJywgJ3NpbXBsaWZpZWQuZXZhbHVhdGUoe3g6IDJ9KSddLFxuICBzZWVhbHNvOiBbJ2Rlcml2YXRpdmUnLCAncGFyc2UnLCAnZXZhbHVhdGUnXVxufTtcbmV4cG9ydHMuc2ltcGxpZnlEb2NzID0gc2ltcGxpZnlEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zbHVEb2NzID0gdm9pZCAwO1xudmFyIHNsdURvY3MgPSB7XG4gIG5hbWU6ICdzbHUnLFxuICBjYXRlZ29yeTogJ0FsZ2VicmEnLFxuICBzeW50YXg6IFsnc2x1KEEsIG9yZGVyLCB0aHJlc2hvbGQpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBNYXRyaXggTFUgZGVjb21wb3NpdGlvbiB3aXRoIGZ1bGwgcGl2b3RpbmcuIE1hdHJpeCBBIGlzIGRlY29tcG9zZWQgaW4gdHdvIG1hdHJpY2VzIChMLCBVKSBhbmQgdHdvIHBlcm11dGF0aW9uIHZlY3RvcnMgKHBpbnYsIHEpIHdoZXJlIFAgKiBBICogUSA9IEwgKiBVJyxcbiAgZXhhbXBsZXM6IFsnc2x1KHNwYXJzZShbNC41LCAwLCAzLjIsIDA7IDMuMSwgMi45LCAwLCAwLjk7IDAsIDEuNywgMywgMDsgMy41LCAwLjQsIDAsIDFdKSwgMSwgMC4wMDEpJ10sXG4gIHNlZWFsc286IFsnbHVzb2x2ZScsICdsc29sdmUnLCAndXNvbHZlJywgJ21hdHJpeCcsICdzcGFyc2UnLCAnbHVwJywgJ3FyJ11cbn07XG5leHBvcnRzLnNsdURvY3MgPSBzbHVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy51c29sdmVEb2NzID0gdm9pZCAwO1xudmFyIHVzb2x2ZURvY3MgPSB7XG4gIG5hbWU6ICd1c29sdmUnLFxuICBjYXRlZ29yeTogJ0FsZ2VicmEnLFxuICBzeW50YXg6IFsneD11c29sdmUoVSwgYiknXSxcbiAgZGVzY3JpcHRpb246ICdTb2x2ZXMgdGhlIGxpbmVhciBzeXN0ZW0gVSAqIHggPSBiIHdoZXJlIFUgaXMgYW4gW24geCBuXSB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeCBhbmQgYiBpcyBhIFtuXSBjb2x1bW4gdmVjdG9yLicsXG4gIGV4YW1wbGVzOiBbJ3g9dXNvbHZlKHNwYXJzZShbMSwgMSwgMSwgMTsgMCwgMSwgMSwgMTsgMCwgMCwgMSwgMTsgMCwgMCwgMCwgMV0pLCBbMTsgMjsgMzsgNF0pJ10sXG4gIHNlZWFsc286IFsnbHVwJywgJ2x1c29sdmUnLCAnbHNvbHZlJywgJ21hdHJpeCcsICdzcGFyc2UnXVxufTtcbmV4cG9ydHMudXNvbHZlRG9jcyA9IHVzb2x2ZURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFic0RvY3MgPSB2b2lkIDA7XG52YXIgYWJzRG9jcyA9IHtcbiAgbmFtZTogJ2FicycsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydhYnMoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBhYnNvbHV0ZSB2YWx1ZS4nLFxuICBleGFtcGxlczogWydhYnMoMy41KScsICdhYnMoLTQuMiknXSxcbiAgc2VlYWxzbzogWydzaWduJ11cbn07XG5leHBvcnRzLmFic0RvY3MgPSBhYnNEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hZGREb2NzID0gdm9pZCAwO1xudmFyIGFkZERvY3MgPSB7XG4gIG5hbWU6ICdhZGQnLFxuICBjYXRlZ29yeTogJ09wZXJhdG9ycycsXG4gIHN5bnRheDogWyd4ICsgeScsICdhZGQoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdBZGQgdHdvIHZhbHVlcy4nLFxuICBleGFtcGxlczogWydhID0gMi4xICsgMy42JywgJ2EgLSAzLjYnLCAnMyArIDJpJywgJzMgY20gKyAyIGluY2gnLCAnXCIyLjNcIiArIFwiNFwiJ10sXG4gIHNlZWFsc286IFsnc3VidHJhY3QnXVxufTtcbmV4cG9ydHMuYWRkRG9jcyA9IGFkZERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNicnREb2NzID0gdm9pZCAwO1xudmFyIGNicnREb2NzID0ge1xuICBuYW1lOiAnY2JydCcsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydjYnJ0KHgpJywgJ2NicnQoeCwgYWxsUm9vdHMpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgY3ViaWMgcm9vdCB2YWx1ZS4gSWYgeCA9IHkgKiB5ICogeSwgdGhlbiB5IGlzIHRoZSBjdWJpYyByb290IG9mIHguIFdoZW4gYHhgIGlzIGEgbnVtYmVyIG9yIGNvbXBsZXggbnVtYmVyLCBhbiBvcHRpb25hbCBzZWNvbmQgYXJndW1lbnQgYGFsbFJvb3RzYCBjYW4gYmUgcHJvdmlkZWQgdG8gcmV0dXJuIGFsbCB0aHJlZSBjdWJpYyByb290cy4gSWYgbm90IHByb3ZpZGVkLCB0aGUgcHJpbmNpcGFsIHJvb3QgaXMgcmV0dXJuZWQnLFxuICBleGFtcGxlczogWydjYnJ0KDY0KScsICdjdWJlKDQpJywgJ2NicnQoLTgpJywgJ2NicnQoMiArIDNpKScsICdjYnJ0KDhpKScsICdjYnJ0KDhpLCB0cnVlKScsICdjYnJ0KDI3IG1eMyknXSxcbiAgc2VlYWxzbzogWydzcXVhcmUnLCAnc3FydCcsICdjdWJlJywgJ211bHRpcGx5J11cbn07XG5leHBvcnRzLmNicnREb2NzID0gY2JydERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNlaWxEb2NzID0gdm9pZCAwO1xudmFyIGNlaWxEb2NzID0ge1xuICBuYW1lOiAnY2VpbCcsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydjZWlsKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnUm91bmQgYSB2YWx1ZSB0b3dhcmRzIHBsdXMgaW5maW5pdHkuIElmIHggaXMgY29tcGxleCwgYm90aCByZWFsIGFuZCBpbWFnaW5hcnkgcGFydCBhcmUgcm91bmRlZCB0b3dhcmRzIHBsdXMgaW5maW5pdHkuJyxcbiAgZXhhbXBsZXM6IFsnY2VpbCgzLjIpJywgJ2NlaWwoMy44KScsICdjZWlsKC00LjIpJ10sXG4gIHNlZWFsc286IFsnZmxvb3InLCAnZml4JywgJ3JvdW5kJ11cbn07XG5leHBvcnRzLmNlaWxEb2NzID0gY2VpbERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmN1YmVEb2NzID0gdm9pZCAwO1xudmFyIGN1YmVEb2NzID0ge1xuICBuYW1lOiAnY3ViZScsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydjdWJlKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgY3ViZSBvZiBhIHZhbHVlLiBUaGUgY3ViZSBvZiB4IGlzIHggKiB4ICogeC4nLFxuICBleGFtcGxlczogWydjdWJlKDIpJywgJzJeMycsICcyICogMiAqIDInXSxcbiAgc2VlYWxzbzogWydtdWx0aXBseScsICdzcXVhcmUnLCAncG93J11cbn07XG5leHBvcnRzLmN1YmVEb2NzID0gY3ViZURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRpdmlkZURvY3MgPSB2b2lkIDA7XG52YXIgZGl2aWRlRG9jcyA9IHtcbiAgbmFtZTogJ2RpdmlkZScsXG4gIGNhdGVnb3J5OiAnT3BlcmF0b3JzJyxcbiAgc3ludGF4OiBbJ3ggLyB5JywgJ2RpdmlkZSh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0RpdmlkZSB0d28gdmFsdWVzLicsXG4gIGV4YW1wbGVzOiBbJ2EgPSAyIC8gMycsICdhICogMycsICc0LjUgLyAyJywgJzMgKyA0IC8gMicsICcoMyArIDQpIC8gMicsICcxOCBrbSAvIDQuNSddLFxuICBzZWVhbHNvOiBbJ211bHRpcGx5J11cbn07XG5leHBvcnRzLmRpdmlkZURvY3MgPSBkaXZpZGVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kb3REaXZpZGVEb2NzID0gdm9pZCAwO1xudmFyIGRvdERpdmlkZURvY3MgPSB7XG4gIG5hbWU6ICdkb3REaXZpZGUnLFxuICBjYXRlZ29yeTogJ09wZXJhdG9ycycsXG4gIHN5bnRheDogWyd4IC4vIHknLCAnZG90RGl2aWRlKHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnRGl2aWRlIHR3byB2YWx1ZXMgZWxlbWVudCB3aXNlLicsXG4gIGV4YW1wbGVzOiBbJ2EgPSBbMSwgMiwgMzsgNCwgNSwgNl0nLCAnYiA9IFsyLCAxLCAxOyAzLCAyLCA1XScsICdhIC4vIGInXSxcbiAgc2VlYWxzbzogWydtdWx0aXBseScsICdkb3RNdWx0aXBseScsICdkaXZpZGUnXVxufTtcbmV4cG9ydHMuZG90RGl2aWRlRG9jcyA9IGRvdERpdmlkZURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRvdE11bHRpcGx5RG9jcyA9IHZvaWQgMDtcbnZhciBkb3RNdWx0aXBseURvY3MgPSB7XG4gIG5hbWU6ICdkb3RNdWx0aXBseScsXG4gIGNhdGVnb3J5OiAnT3BlcmF0b3JzJyxcbiAgc3ludGF4OiBbJ3ggLiogeScsICdkb3RNdWx0aXBseSh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ011bHRpcGx5IHR3byB2YWx1ZXMgZWxlbWVudCB3aXNlLicsXG4gIGV4YW1wbGVzOiBbJ2EgPSBbMSwgMiwgMzsgNCwgNSwgNl0nLCAnYiA9IFsyLCAxLCAxOyAzLCAyLCA1XScsICdhIC4qIGInXSxcbiAgc2VlYWxzbzogWydtdWx0aXBseScsICdkaXZpZGUnLCAnZG90RGl2aWRlJ11cbn07XG5leHBvcnRzLmRvdE11bHRpcGx5RG9jcyA9IGRvdE11bHRpcGx5RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZG90UG93RG9jcyA9IHZvaWQgMDtcbnZhciBkb3RQb3dEb2NzID0ge1xuICBuYW1lOiAnZG90UG93JyxcbiAgY2F0ZWdvcnk6ICdPcGVyYXRvcnMnLFxuICBzeW50YXg6IFsneCAuXiB5JywgJ2RvdFBvdyh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZXMgdGhlIHBvd2VyIG9mIHggdG8geSBlbGVtZW50IHdpc2UuJyxcbiAgZXhhbXBsZXM6IFsnYSA9IFsxLCAyLCAzOyA0LCA1LCA2XScsICdhIC5eIDInXSxcbiAgc2VlYWxzbzogWydwb3cnXVxufTtcbmV4cG9ydHMuZG90UG93RG9jcyA9IGRvdFBvd0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmV4cERvY3MgPSB2b2lkIDA7XG52YXIgZXhwRG9jcyA9IHtcbiAgbmFtZTogJ2V4cCcsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydleHAoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIGV4cG9uZW50IG9mIGEgdmFsdWUuJyxcbiAgZXhhbXBsZXM6IFsnZXhwKDEuMyknLCAnZSBeIDEuMycsICdsb2coZXhwKDEuMykpJywgJ3ggPSAyLjQnLCAnKGV4cChpKngpID09IGNvcyh4KSArIGkqc2luKHgpKSAgICMgRXVsZXJcXCdzIGZvcm11bGEnXSxcbiAgc2VlYWxzbzogWydleHBtJywgJ2V4cG0xJywgJ3BvdycsICdsb2cnXVxufTtcbmV4cG9ydHMuZXhwRG9jcyA9IGV4cERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmV4cG1Eb2NzID0gdm9pZCAwO1xudmFyIGV4cG1Eb2NzID0ge1xuICBuYW1lOiAnZXhwbScsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydleHAoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBtYXRyaXggZXhwb25lbnRpYWwsIGV4cG0oQSkgPSBlXkEuICcgKyAnVGhlIG1hdHJpeCBtdXN0IGJlIHNxdWFyZS4gJyArICdOb3QgdG8gYmUgY29uZnVzZWQgd2l0aCBleHAoYSksIHdoaWNoIHBlcmZvcm1zIGVsZW1lbnQtd2lzZSBleHBvbmVudGlhdGlvbi4nLFxuICBleGFtcGxlczogWydleHBtKFtbMCwyXSxbMCwwXV0pJ10sXG4gIHNlZWFsc286IFsnZXhwJ11cbn07XG5leHBvcnRzLmV4cG1Eb2NzID0gZXhwbURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmV4cG0xRG9jcyA9IHZvaWQgMDtcbnZhciBleHBtMURvY3MgPSB7XG4gIG5hbWU6ICdleHBtMScsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydleHBtMSh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgdmFsdWUgb2Ygc3VidHJhY3RpbmcgMSBmcm9tIHRoZSBleHBvbmVudGlhbCB2YWx1ZS4nLFxuICBleGFtcGxlczogWydleHBtMSgyKScsICdwb3coZSwgMikgLSAxJywgJ2xvZyhleHBtMSgyKSArIDEpJ10sXG4gIHNlZWFsc286IFsnZXhwJywgJ3BvdycsICdsb2cnXVxufTtcbmV4cG9ydHMuZXhwbTFEb2NzID0gZXhwbTFEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5maXhEb2NzID0gdm9pZCAwO1xudmFyIGZpeERvY3MgPSB7XG4gIG5hbWU6ICdmaXgnLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsnZml4KHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnUm91bmQgYSB2YWx1ZSB0b3dhcmRzIHplcm8uIElmIHggaXMgY29tcGxleCwgYm90aCByZWFsIGFuZCBpbWFnaW5hcnkgcGFydCBhcmUgcm91bmRlZCB0b3dhcmRzIHplcm8uJyxcbiAgZXhhbXBsZXM6IFsnZml4KDMuMiknLCAnZml4KDMuOCknLCAnZml4KC00LjIpJywgJ2ZpeCgtNC44KSddLFxuICBzZWVhbHNvOiBbJ2NlaWwnLCAnZmxvb3InLCAncm91bmQnXVxufTtcbmV4cG9ydHMuZml4RG9jcyA9IGZpeERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZsb29yRG9jcyA9IHZvaWQgMDtcbnZhciBmbG9vckRvY3MgPSB7XG4gIG5hbWU6ICdmbG9vcicsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydmbG9vcih4KSddLFxuICBkZXNjcmlwdGlvbjogJ1JvdW5kIGEgdmFsdWUgdG93YXJkcyBtaW51cyBpbmZpbml0eS5JZiB4IGlzIGNvbXBsZXgsIGJvdGggcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnQgYXJlIHJvdW5kZWQgdG93YXJkcyBtaW51cyBpbmZpbml0eS4nLFxuICBleGFtcGxlczogWydmbG9vcigzLjIpJywgJ2Zsb29yKDMuOCknLCAnZmxvb3IoLTQuMiknXSxcbiAgc2VlYWxzbzogWydjZWlsJywgJ2ZpeCcsICdyb3VuZCddXG59O1xuZXhwb3J0cy5mbG9vckRvY3MgPSBmbG9vckRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmdjZERvY3MgPSB2b2lkIDA7XG52YXIgZ2NkRG9jcyA9IHtcbiAgbmFtZTogJ2djZCcsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydnY2QoYSwgYiknLCAnZ2NkKGEsIGIsIGMsIC4uLiknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBncmVhdGVzdCBjb21tb24gZGl2aXNvci4nLFxuICBleGFtcGxlczogWydnY2QoOCwgMTIpJywgJ2djZCgtNCwgNiknLCAnZ2NkKDI1LCAxNSwgLTEwKSddLFxuICBzZWVhbHNvOiBbJ2xjbScsICd4Z2NkJ11cbn07XG5leHBvcnRzLmdjZERvY3MgPSBnY2REb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5oeXBvdERvY3MgPSB2b2lkIDA7XG52YXIgaHlwb3REb2NzID0ge1xuICBuYW1lOiAnaHlwb3QnLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsnaHlwb3QoYSwgYiwgYywgLi4uKScsICdoeXBvdChbYSwgYiwgYywgLi4uXSknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIGh5cG90ZW51c2Egb2YgYSBsaXN0IHdpdGggdmFsdWVzLiAnLFxuICBleGFtcGxlczogWydoeXBvdCgzLCA0KScsICdzcXJ0KDNeMiArIDReMiknLCAnaHlwb3QoLTIpJywgJ2h5cG90KFszLCA0LCA1XSknXSxcbiAgc2VlYWxzbzogWydhYnMnLCAnbm9ybSddXG59O1xuZXhwb3J0cy5oeXBvdERvY3MgPSBoeXBvdERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxjbURvY3MgPSB2b2lkIDA7XG52YXIgbGNtRG9jcyA9IHtcbiAgbmFtZTogJ2xjbScsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydsY20oeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBsZWFzdCBjb21tb24gbXVsdGlwbGUuJyxcbiAgZXhhbXBsZXM6IFsnbGNtKDQsIDYpJywgJ2xjbSg2LCAyMSknLCAnbGNtKDYsIDIxLCA1KSddLFxuICBzZWVhbHNvOiBbJ2djZCddXG59O1xuZXhwb3J0cy5sY21Eb2NzID0gbGNtRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubG9nRG9jcyA9IHZvaWQgMDtcbnZhciBsb2dEb2NzID0ge1xuICBuYW1lOiAnbG9nJyxcbiAgY2F0ZWdvcnk6ICdBcml0aG1ldGljJyxcbiAgc3ludGF4OiBbJ2xvZyh4KScsICdsb2coeCwgYmFzZSknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBsb2dhcml0aG0gb2YgYSB2YWx1ZS4gSWYgbm8gYmFzZSBpcyBwcm92aWRlZCwgdGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mIHggaXMgY2FsY3VsYXRlZC4gSWYgYmFzZSBpZiBwcm92aWRlZCwgdGhlIGxvZ2FyaXRobSBpcyBjYWxjdWxhdGVkIGZvciB0aGUgc3BlY2lmaWVkIGJhc2UuIGxvZyh4LCBiYXNlKSBpcyBkZWZpbmVkIGFzIGxvZyh4KSAvIGxvZyhiYXNlKS4nLFxuICBleGFtcGxlczogWydsb2coMy41KScsICdhID0gbG9nKDIuNCknLCAnZXhwKGEpJywgJzEwIF4gNCcsICdsb2coMTAwMDAsIDEwKScsICdsb2coMTAwMDApIC8gbG9nKDEwKScsICdiID0gbG9nKDEwMjQsIDIpJywgJzIgXiBiJ10sXG4gIHNlZWFsc286IFsnZXhwJywgJ2xvZzFwJywgJ2xvZzInLCAnbG9nMTAnXVxufTtcbmV4cG9ydHMubG9nRG9jcyA9IGxvZ0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxvZzEwRG9jcyA9IHZvaWQgMDtcbnZhciBsb2cxMERvY3MgPSB7XG4gIG5hbWU6ICdsb2cxMCcsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydsb2cxMCh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIDEwLWJhc2UgbG9nYXJpdGhtIG9mIGEgdmFsdWUuJyxcbiAgZXhhbXBsZXM6IFsnbG9nMTAoMC4wMDAwMSknLCAnbG9nMTAoMTAwMDApJywgJzEwIF4gNCcsICdsb2coMTAwMDApIC8gbG9nKDEwKScsICdsb2coMTAwMDAsIDEwKSddLFxuICBzZWVhbHNvOiBbJ2V4cCcsICdsb2cnXVxufTtcbmV4cG9ydHMubG9nMTBEb2NzID0gbG9nMTBEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5sb2cxcERvY3MgPSB2b2lkIDA7XG52YXIgbG9nMXBEb2NzID0ge1xuICBuYW1lOiAnbG9nMXAnLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsnbG9nMXAoeCknLCAnbG9nMXAoeCwgYmFzZSknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIGxvZ2FyaXRobSBvZiBhIGB2YWx1ZSsxYCcsXG4gIGV4YW1wbGVzOiBbJ2xvZzFwKDIuNSknLCAnZXhwKGxvZzFwKDEuNCkpJywgJ3BvdygxMCwgNCknLCAnbG9nMXAoOTk5OSwgMTApJywgJ2xvZzFwKDk5OTkpIC8gbG9nKDEwKSddLFxuICBzZWVhbHNvOiBbJ2V4cCcsICdsb2cnLCAnbG9nMicsICdsb2cxMCddXG59O1xuZXhwb3J0cy5sb2cxcERvY3MgPSBsb2cxcERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxvZzJEb2NzID0gdm9pZCAwO1xudmFyIGxvZzJEb2NzID0ge1xuICBuYW1lOiAnbG9nMicsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydsb2cyKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSAyLWJhc2Ugb2YgYSB2YWx1ZS4gVGhpcyBpcyB0aGUgc2FtZSBhcyBjYWxjdWxhdGluZyBgbG9nKHgsIDIpYC4nLFxuICBleGFtcGxlczogWydsb2cyKDAuMDMxMjUpJywgJ2xvZzIoMTYpJywgJ2xvZzIoMTYpIC8gbG9nMigyKScsICdwb3coMiwgNCknXSxcbiAgc2VlYWxzbzogWydleHAnLCAnbG9nMXAnLCAnbG9nJywgJ2xvZzEwJ11cbn07XG5leHBvcnRzLmxvZzJEb2NzID0gbG9nMkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1vZERvY3MgPSB2b2lkIDA7XG52YXIgbW9kRG9jcyA9IHtcbiAgbmFtZTogJ21vZCcsXG4gIGNhdGVnb3J5OiAnT3BlcmF0b3JzJyxcbiAgc3ludGF4OiBbJ3ggJSB5JywgJ3ggbW9kIHknLCAnbW9kKHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlcyB0aGUgbW9kdWx1cywgdGhlIHJlbWFpbmRlciBvZiBhbiBpbnRlZ2VyIGRpdmlzaW9uLicsXG4gIGV4YW1wbGVzOiBbJzcgJSAzJywgJzExICUgMicsICcxMCBtb2QgNCcsICdpc09kZCh4KSA9IHggJSAyJywgJ2lzT2RkKDIpJywgJ2lzT2RkKDMpJ10sXG4gIHNlZWFsc286IFsnZGl2aWRlJ11cbn07XG5leHBvcnRzLm1vZERvY3MgPSBtb2REb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tdWx0aXBseURvY3MgPSB2b2lkIDA7XG52YXIgbXVsdGlwbHlEb2NzID0ge1xuICBuYW1lOiAnbXVsdGlwbHknLFxuICBjYXRlZ29yeTogJ09wZXJhdG9ycycsXG4gIHN5bnRheDogWyd4ICogeScsICdtdWx0aXBseSh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ211bHRpcGx5IHR3byB2YWx1ZXMuJyxcbiAgZXhhbXBsZXM6IFsnYSA9IDIuMSAqIDMuNCcsICdhIC8gMy40JywgJzIgKiAzICsgNCcsICcyICogKDMgKyA0KScsICczICogMi4xIGttJ10sXG4gIHNlZWFsc286IFsnZGl2aWRlJ11cbn07XG5leHBvcnRzLm11bHRpcGx5RG9jcyA9IG11bHRpcGx5RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubm9ybURvY3MgPSB2b2lkIDA7XG52YXIgbm9ybURvY3MgPSB7XG4gIG5hbWU6ICdub3JtJyxcbiAgY2F0ZWdvcnk6ICdBcml0aG1ldGljJyxcbiAgc3ludGF4OiBbJ25vcm0oeCknLCAnbm9ybSh4LCBwKSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgbm9ybSBvZiBhIG51bWJlciwgdmVjdG9yIG9yIG1hdHJpeC4nLFxuICBleGFtcGxlczogWydhYnMoLTMuNSknLCAnbm9ybSgtMy41KScsICdub3JtKDMgLSA0aSknLCAnbm9ybShbMSwgMiwgLTNdLCBJbmZpbml0eSknLCAnbm9ybShbMSwgMiwgLTNdLCAtSW5maW5pdHkpJywgJ25vcm0oWzMsIDRdLCAyKScsICdub3JtKFtbMSwgMl0sIFszLCA0XV0sIDEpJywgJ25vcm0oW1sxLCAyXSwgWzMsIDRdXSwgXCJpbmZcIiknLCAnbm9ybShbWzEsIDJdLCBbMywgNF1dLCBcImZyb1wiKSddXG59O1xuZXhwb3J0cy5ub3JtRG9jcyA9IG5vcm1Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5udGhSb290RG9jcyA9IHZvaWQgMDtcbnZhciBudGhSb290RG9jcyA9IHtcbiAgbmFtZTogJ250aFJvb3QnLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsnbnRoUm9vdChhKScsICdudGhSb290KGEsIHJvb3QpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBudGggcm9vdCBvZiBhIHZhbHVlLiAnICsgJ1RoZSBwcmluY2lwYWwgbnRoIHJvb3Qgb2YgYSBwb3NpdGl2ZSByZWFsIG51bWJlciBBLCAnICsgJ2lzIHRoZSBwb3NpdGl2ZSByZWFsIHNvbHV0aW9uIG9mIHRoZSBlcXVhdGlvbiBcInhecm9vdCA9IEFcIi4nLFxuICBleGFtcGxlczogWyc0IF4gMycsICdudGhSb290KDY0LCAzKScsICdudGhSb290KDksIDIpJywgJ3NxcnQoOSknXSxcbiAgc2VlYWxzbzogWydudGhSb290cycsICdwb3cnLCAnc3FydCddXG59O1xuZXhwb3J0cy5udGhSb290RG9jcyA9IG50aFJvb3REb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5udGhSb290c0RvY3MgPSB2b2lkIDA7XG52YXIgbnRoUm9vdHNEb2NzID0ge1xuICBuYW1lOiAnbnRoUm9vdHMnLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsnbnRoUm9vdHMoQSknLCAnbnRoUm9vdHMoQSwgcm9vdCknXSxcbiAgZGVzY3JpcHRpb246ICcnICsgJ0NhbGN1bGF0ZSB0aGUgbnRoIHJvb3RzIG9mIGEgdmFsdWUuICcgKyAnQW4gbnRoIHJvb3Qgb2YgYSBwb3NpdGl2ZSByZWFsIG51bWJlciBBLCAnICsgJ2lzIGEgcG9zaXRpdmUgcmVhbCBzb2x1dGlvbiBvZiB0aGUgZXF1YXRpb24gXCJ4XnJvb3QgPSBBXCIuICcgKyAnVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGFycmF5IG9mIGNvbXBsZXggdmFsdWVzLicsXG4gIGV4YW1wbGVzOiBbJ250aFJvb3RzKDEpJywgJ250aFJvb3RzKDEsIDMpJ10sXG4gIHNlZWFsc286IFsnc3FydCcsICdwb3cnLCAnbnRoUm9vdCddXG59O1xuZXhwb3J0cy5udGhSb290c0RvY3MgPSBudGhSb290c0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBvd0RvY3MgPSB2b2lkIDA7XG52YXIgcG93RG9jcyA9IHtcbiAgbmFtZTogJ3BvdycsXG4gIGNhdGVnb3J5OiAnT3BlcmF0b3JzJyxcbiAgc3ludGF4OiBbJ3ggXiB5JywgJ3Bvdyh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZXMgdGhlIHBvd2VyIG9mIHggdG8geSwgeF55LicsXG4gIGV4YW1wbGVzOiBbJzJeMycsICcyKjIqMicsICcxICsgZSBeIChwaSAqIGkpJ10sXG4gIHNlZWFsc286IFsnbXVsdGlwbHknLCAnbnRoUm9vdCcsICdudGhSb290cycsICdzcXJ0J11cbn07XG5leHBvcnRzLnBvd0RvY3MgPSBwb3dEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yb3VuZERvY3MgPSB2b2lkIDA7XG52YXIgcm91bmREb2NzID0ge1xuICBuYW1lOiAncm91bmQnLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsncm91bmQoeCknLCAncm91bmQoeCwgbiknXSxcbiAgZGVzY3JpcHRpb246ICdyb3VuZCBhIHZhbHVlIHRvd2FyZHMgdGhlIG5lYXJlc3QgaW50ZWdlci5JZiB4IGlzIGNvbXBsZXgsIGJvdGggcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnQgYXJlIHJvdW5kZWQgdG93YXJkcyB0aGUgbmVhcmVzdCBpbnRlZ2VyLiBXaGVuIG4gaXMgc3BlY2lmaWVkLCB0aGUgdmFsdWUgaXMgcm91bmRlZCB0byBuIGRlY2ltYWxzLicsXG4gIGV4YW1wbGVzOiBbJ3JvdW5kKDMuMiknLCAncm91bmQoMy44KScsICdyb3VuZCgtNC4yKScsICdyb3VuZCgtNC44KScsICdyb3VuZChwaSwgMyknLCAncm91bmQoMTIzLjQ1Njc4LCAyKSddLFxuICBzZWVhbHNvOiBbJ2NlaWwnLCAnZmxvb3InLCAnZml4J11cbn07XG5leHBvcnRzLnJvdW5kRG9jcyA9IHJvdW5kRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2lnbkRvY3MgPSB2b2lkIDA7XG52YXIgc2lnbkRvY3MgPSB7XG4gIG5hbWU6ICdzaWduJyxcbiAgY2F0ZWdvcnk6ICdBcml0aG1ldGljJyxcbiAgc3ludGF4OiBbJ3NpZ24oeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBzaWduIG9mIGEgdmFsdWUuIFRoZSBzaWduIG9mIGEgdmFsdWUgeCBpcyAxIHdoZW4geD4xLCAtMSB3aGVuIHg8MCwgYW5kIDAgd2hlbiB4PTAuJyxcbiAgZXhhbXBsZXM6IFsnc2lnbigzLjUpJywgJ3NpZ24oLTQuMiknLCAnc2lnbigwKSddLFxuICBzZWVhbHNvOiBbJ2FicyddXG59O1xuZXhwb3J0cy5zaWduRG9jcyA9IHNpZ25Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zcXJ0RG9jcyA9IHZvaWQgMDtcbnZhciBzcXJ0RG9jcyA9IHtcbiAgbmFtZTogJ3NxcnQnLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsnc3FydCh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIHNxdWFyZSByb290IHZhbHVlLiBJZiB4ID0geSAqIHksIHRoZW4geSBpcyB0aGUgc3F1YXJlIHJvb3Qgb2YgeC4nLFxuICBleGFtcGxlczogWydzcXJ0KDI1KScsICc1ICogNScsICdzcXJ0KC0xKSddLFxuICBzZWVhbHNvOiBbJ3NxdWFyZScsICdzcXJ0bScsICdtdWx0aXBseScsICdudGhSb290JywgJ250aFJvb3RzJywgJ3BvdyddXG59O1xuZXhwb3J0cy5zcXJ0RG9jcyA9IHNxcnREb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zcXJ0bURvY3MgPSB2b2lkIDA7XG52YXIgc3FydG1Eb2NzID0ge1xuICBuYW1lOiAnc3FydG0nLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsnc3FydG0oeCknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIHByaW5jaXBhbCBzcXVhcmUgcm9vdCBvZiBhIHNxdWFyZSBtYXRyaXguIFRoZSBwcmluY2lwYWwgc3F1YXJlIHJvb3QgbWF0cml4IGBYYCBvZiBhbm90aGVyIG1hdHJpeCBgQWAgaXMgc3VjaCB0aGF0IGBYICogWCA9IEFgLicsXG4gIGV4YW1wbGVzOiBbJ3NxcnRtKFtbMSwgMl0sIFszLCA0XV0pJ10sXG4gIHNlZWFsc286IFsnc3FydCcsICdhYnMnLCAnc3F1YXJlJywgJ211bHRpcGx5J11cbn07XG5leHBvcnRzLnNxcnRtRG9jcyA9IHNxcnRtRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3F1YXJlRG9jcyA9IHZvaWQgMDtcbnZhciBzcXVhcmVEb2NzID0ge1xuICBuYW1lOiAnc3F1YXJlJyxcbiAgY2F0ZWdvcnk6ICdBcml0aG1ldGljJyxcbiAgc3ludGF4OiBbJ3NxdWFyZSh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIHNxdWFyZSBvZiBhIHZhbHVlLiBUaGUgc3F1YXJlIG9mIHggaXMgeCAqIHguJyxcbiAgZXhhbXBsZXM6IFsnc3F1YXJlKDMpJywgJ3NxcnQoOSknLCAnM14yJywgJzMgKiAzJ10sXG4gIHNlZWFsc286IFsnbXVsdGlwbHknLCAncG93JywgJ3NxcnQnLCAnY3ViZSddXG59O1xuZXhwb3J0cy5zcXVhcmVEb2NzID0gc3F1YXJlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3VidHJhY3REb2NzID0gdm9pZCAwO1xudmFyIHN1YnRyYWN0RG9jcyA9IHtcbiAgbmFtZTogJ3N1YnRyYWN0JyxcbiAgY2F0ZWdvcnk6ICdPcGVyYXRvcnMnLFxuICBzeW50YXg6IFsneCAtIHknLCAnc3VidHJhY3QoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdzdWJ0cmFjdCB0d28gdmFsdWVzLicsXG4gIGV4YW1wbGVzOiBbJ2EgPSA1LjMgLSAyJywgJ2EgKyAyJywgJzIvMyAtIDEvNicsICcyICogMyAtIDMnLCAnMi4xIGttIC0gNTAwbSddLFxuICBzZWVhbHNvOiBbJ2FkZCddXG59O1xuZXhwb3J0cy5zdWJ0cmFjdERvY3MgPSBzdWJ0cmFjdERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnVuYXJ5TWludXNEb2NzID0gdm9pZCAwO1xudmFyIHVuYXJ5TWludXNEb2NzID0ge1xuICBuYW1lOiAndW5hcnlNaW51cycsXG4gIGNhdGVnb3J5OiAnT3BlcmF0b3JzJyxcbiAgc3ludGF4OiBbJy14JywgJ3VuYXJ5TWludXMoeCknXSxcbiAgZGVzY3JpcHRpb246ICdJbnZlcnNlIHRoZSBzaWduIG9mIGEgdmFsdWUuIENvbnZlcnRzIGJvb2xlYW5zIGFuZCBzdHJpbmdzIHRvIG51bWJlcnMuJyxcbiAgZXhhbXBsZXM6IFsnLTQuNScsICctKC01LjYpJywgJy1cIjIyXCInXSxcbiAgc2VlYWxzbzogWydhZGQnLCAnc3VidHJhY3QnLCAndW5hcnlQbHVzJ11cbn07XG5leHBvcnRzLnVuYXJ5TWludXNEb2NzID0gdW5hcnlNaW51c0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnVuYXJ5UGx1c0RvY3MgPSB2b2lkIDA7XG52YXIgdW5hcnlQbHVzRG9jcyA9IHtcbiAgbmFtZTogJ3VuYXJ5UGx1cycsXG4gIGNhdGVnb3J5OiAnT3BlcmF0b3JzJyxcbiAgc3ludGF4OiBbJyt4JywgJ3VuYXJ5UGx1cyh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbnZlcnRzIGJvb2xlYW5zIGFuZCBzdHJpbmdzIHRvIG51bWJlcnMuJyxcbiAgZXhhbXBsZXM6IFsnK3RydWUnLCAnK1wiMlwiJ10sXG4gIHNlZWFsc286IFsnYWRkJywgJ3N1YnRyYWN0JywgJ3VuYXJ5TWludXMnXVxufTtcbmV4cG9ydHMudW5hcnlQbHVzRG9jcyA9IHVuYXJ5UGx1c0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnhnY2REb2NzID0gdm9pZCAwO1xudmFyIHhnY2REb2NzID0ge1xuICBuYW1lOiAneGdjZCcsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWyd4Z2NkKGEsIGIpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBleHRlbmRlZCBncmVhdGVzdCBjb21tb24gZGl2aXNvciBmb3IgdHdvIHZhbHVlcy4gVGhlIHJlc3VsdCBpcyBhbiBhcnJheSBbZCwgeCwgeV0gd2l0aCAzIGVudHJpZXMsIHdoZXJlIGQgaXMgdGhlIGdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yLCBhbmQgZCA9IHggKiBhICsgeSAqIGIuJyxcbiAgZXhhbXBsZXM6IFsneGdjZCg4LCAxMiknLCAnZ2NkKDgsIDEyKScsICd4Z2NkKDM2MTYzLCAyMTE5OSknXSxcbiAgc2VlYWxzbzogWydnY2QnLCAnbGNtJ11cbn07XG5leHBvcnRzLnhnY2REb2NzID0geGdjZERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJpdEFuZERvY3MgPSB2b2lkIDA7XG52YXIgYml0QW5kRG9jcyA9IHtcbiAgbmFtZTogJ2JpdEFuZCcsXG4gIGNhdGVnb3J5OiAnQml0d2lzZScsXG4gIHN5bnRheDogWyd4ICYgeScsICdiaXRBbmQoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdCaXR3aXNlIEFORCBvcGVyYXRpb24uIFBlcmZvcm1zIHRoZSBsb2dpY2FsIEFORCBvcGVyYXRpb24gb24gZWFjaCBwYWlyIG9mIHRoZSBjb3JyZXNwb25kaW5nIGJpdHMgb2YgdGhlIHR3byBnaXZlbiB2YWx1ZXMgYnkgbXVsdGlwbHlpbmcgdGhlbS4gSWYgYm90aCBiaXRzIGluIHRoZSBjb21wYXJlZCBwb3NpdGlvbiBhcmUgMSwgdGhlIGJpdCBpbiB0aGUgcmVzdWx0aW5nIGJpbmFyeSByZXByZXNlbnRhdGlvbiBpcyAxLCBvdGhlcndpc2UsIHRoZSByZXN1bHQgaXMgMCcsXG4gIGV4YW1wbGVzOiBbJzUgJiAzJywgJ2JpdEFuZCg1MywgMTMxKScsICdbMSwgMTIsIDMxXSAmIDQyJ10sXG4gIHNlZWFsc286IFsnYml0Tm90JywgJ2JpdE9yJywgJ2JpdFhvcicsICdsZWZ0U2hpZnQnLCAncmlnaHRBcml0aFNoaWZ0JywgJ3JpZ2h0TG9nU2hpZnQnXVxufTtcbmV4cG9ydHMuYml0QW5kRG9jcyA9IGJpdEFuZERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJpdE5vdERvY3MgPSB2b2lkIDA7XG52YXIgYml0Tm90RG9jcyA9IHtcbiAgbmFtZTogJ2JpdE5vdCcsXG4gIGNhdGVnb3J5OiAnQml0d2lzZScsXG4gIHN5bnRheDogWyd+eCcsICdiaXROb3QoeCknXSxcbiAgZGVzY3JpcHRpb246ICdCaXR3aXNlIE5PVCBvcGVyYXRpb24uIFBlcmZvcm1zIGEgbG9naWNhbCBuZWdhdGlvbiBvbiBlYWNoIGJpdCBvZiB0aGUgZ2l2ZW4gdmFsdWUuIEJpdHMgdGhhdCBhcmUgMCBiZWNvbWUgMSwgYW5kIHRob3NlIHRoYXQgYXJlIDEgYmVjb21lIDAuJyxcbiAgZXhhbXBsZXM6IFsnfjEnLCAnfjInLCAnYml0Tm90KFsyLCAtMywgNF0pJ10sXG4gIHNlZWFsc286IFsnYml0QW5kJywgJ2JpdE9yJywgJ2JpdFhvcicsICdsZWZ0U2hpZnQnLCAncmlnaHRBcml0aFNoaWZ0JywgJ3JpZ2h0TG9nU2hpZnQnXVxufTtcbmV4cG9ydHMuYml0Tm90RG9jcyA9IGJpdE5vdERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJpdE9yRG9jcyA9IHZvaWQgMDtcbnZhciBiaXRPckRvY3MgPSB7XG4gIG5hbWU6ICdiaXRPcicsXG4gIGNhdGVnb3J5OiAnQml0d2lzZScsXG4gIHN5bnRheDogWyd4IHwgeScsICdiaXRPcih4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0JpdHdpc2UgT1Igb3BlcmF0aW9uLiBQZXJmb3JtcyB0aGUgbG9naWNhbCBpbmNsdXNpdmUgT1Igb3BlcmF0aW9uIG9uIGVhY2ggcGFpciBvZiBjb3JyZXNwb25kaW5nIGJpdHMgb2YgdGhlIHR3byBnaXZlbiB2YWx1ZXMuIFRoZSByZXN1bHQgaW4gZWFjaCBwb3NpdGlvbiBpcyAxIGlmIHRoZSBmaXJzdCBiaXQgaXMgMSBvciB0aGUgc2Vjb25kIGJpdCBpcyAxIG9yIGJvdGggYml0cyBhcmUgMSwgb3RoZXJ3aXNlLCB0aGUgcmVzdWx0IGlzIDAuJyxcbiAgZXhhbXBsZXM6IFsnNSB8IDMnLCAnYml0T3IoWzEsIDIsIDNdLCA0KSddLFxuICBzZWVhbHNvOiBbJ2JpdEFuZCcsICdiaXROb3QnLCAnYml0WG9yJywgJ2xlZnRTaGlmdCcsICdyaWdodEFyaXRoU2hpZnQnLCAncmlnaHRMb2dTaGlmdCddXG59O1xuZXhwb3J0cy5iaXRPckRvY3MgPSBiaXRPckRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJpdFhvckRvY3MgPSB2b2lkIDA7XG52YXIgYml0WG9yRG9jcyA9IHtcbiAgbmFtZTogJ2JpdFhvcicsXG4gIGNhdGVnb3J5OiAnQml0d2lzZScsXG4gIHN5bnRheDogWydiaXRYb3IoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdCaXR3aXNlIFhPUiBvcGVyYXRpb24sIGV4Y2x1c2l2ZSBPUi4gUGVyZm9ybXMgdGhlIGxvZ2ljYWwgZXhjbHVzaXZlIE9SIG9wZXJhdGlvbiBvbiBlYWNoIHBhaXIgb2YgY29ycmVzcG9uZGluZyBiaXRzIG9mIHRoZSB0d28gZ2l2ZW4gdmFsdWVzLiBUaGUgcmVzdWx0IGluIGVhY2ggcG9zaXRpb24gaXMgMSBpZiBvbmx5IHRoZSBmaXJzdCBiaXQgaXMgMSBvciBvbmx5IHRoZSBzZWNvbmQgYml0IGlzIDEsIGJ1dCB3aWxsIGJlIDAgaWYgYm90aCBhcmUgMCBvciBib3RoIGFyZSAxLicsXG4gIGV4YW1wbGVzOiBbJ2JpdE9yKDEsIDIpJywgJ2JpdFhvcihbMiwgMywgNF0sIDQpJ10sXG4gIHNlZWFsc286IFsnYml0QW5kJywgJ2JpdE5vdCcsICdiaXRPcicsICdsZWZ0U2hpZnQnLCAncmlnaHRBcml0aFNoaWZ0JywgJ3JpZ2h0TG9nU2hpZnQnXVxufTtcbmV4cG9ydHMuYml0WG9yRG9jcyA9IGJpdFhvckRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxlZnRTaGlmdERvY3MgPSB2b2lkIDA7XG52YXIgbGVmdFNoaWZ0RG9jcyA9IHtcbiAgbmFtZTogJ2xlZnRTaGlmdCcsXG4gIGNhdGVnb3J5OiAnQml0d2lzZScsXG4gIHN5bnRheDogWyd4IDw8IHknLCAnbGVmdFNoaWZ0KHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQml0d2lzZSBsZWZ0IGxvZ2ljYWwgc2hpZnQgb2YgYSB2YWx1ZSB4IGJ5IHkgbnVtYmVyIG9mIGJpdHMuJyxcbiAgZXhhbXBsZXM6IFsnNCA8PCAxJywgJzggPj4gMSddLFxuICBzZWVhbHNvOiBbJ2JpdEFuZCcsICdiaXROb3QnLCAnYml0T3InLCAnYml0WG9yJywgJ3JpZ2h0QXJpdGhTaGlmdCcsICdyaWdodExvZ1NoaWZ0J11cbn07XG5leHBvcnRzLmxlZnRTaGlmdERvY3MgPSBsZWZ0U2hpZnREb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yaWdodEFyaXRoU2hpZnREb2NzID0gdm9pZCAwO1xudmFyIHJpZ2h0QXJpdGhTaGlmdERvY3MgPSB7XG4gIG5hbWU6ICdyaWdodEFyaXRoU2hpZnQnLFxuICBjYXRlZ29yeTogJ0JpdHdpc2UnLFxuICBzeW50YXg6IFsneCA+PiB5JywgJ3JpZ2h0QXJpdGhTaGlmdCh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0JpdHdpc2UgcmlnaHQgYXJpdGhtZXRpYyBzaGlmdCBvZiBhIHZhbHVlIHggYnkgeSBudW1iZXIgb2YgYml0cy4nLFxuICBleGFtcGxlczogWyc4ID4+IDEnLCAnNCA8PCAxJywgJy0xMiA+PiAyJ10sXG4gIHNlZWFsc286IFsnYml0QW5kJywgJ2JpdE5vdCcsICdiaXRPcicsICdiaXRYb3InLCAnbGVmdFNoaWZ0JywgJ3JpZ2h0TG9nU2hpZnQnXVxufTtcbmV4cG9ydHMucmlnaHRBcml0aFNoaWZ0RG9jcyA9IHJpZ2h0QXJpdGhTaGlmdERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJpZ2h0TG9nU2hpZnREb2NzID0gdm9pZCAwO1xudmFyIHJpZ2h0TG9nU2hpZnREb2NzID0ge1xuICBuYW1lOiAncmlnaHRMb2dTaGlmdCcsXG4gIGNhdGVnb3J5OiAnQml0d2lzZScsXG4gIHN5bnRheDogWyd4ID4+PiB5JywgJ3JpZ2h0TG9nU2hpZnQoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdCaXR3aXNlIHJpZ2h0IGxvZ2ljYWwgc2hpZnQgb2YgYSB2YWx1ZSB4IGJ5IHkgbnVtYmVyIG9mIGJpdHMuJyxcbiAgZXhhbXBsZXM6IFsnOCA+Pj4gMScsICc0IDw8IDEnLCAnLTEyID4+PiAyJ10sXG4gIHNlZWFsc286IFsnYml0QW5kJywgJ2JpdE5vdCcsICdiaXRPcicsICdiaXRYb3InLCAnbGVmdFNoaWZ0JywgJ3JpZ2h0QXJpdGhTaGlmdCddXG59O1xuZXhwb3J0cy5yaWdodExvZ1NoaWZ0RG9jcyA9IHJpZ2h0TG9nU2hpZnREb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5iZWxsTnVtYmVyc0RvY3MgPSB2b2lkIDA7XG52YXIgYmVsbE51bWJlcnNEb2NzID0ge1xuICBuYW1lOiAnYmVsbE51bWJlcnMnLFxuICBjYXRlZ29yeTogJ0NvbWJpbmF0b3JpY3MnLFxuICBzeW50YXg6IFsnYmVsbE51bWJlcnMobiknXSxcbiAgZGVzY3JpcHRpb246ICdUaGUgQmVsbCBOdW1iZXJzIGNvdW50IHRoZSBudW1iZXIgb2YgcGFydGl0aW9ucyBvZiBhIHNldC4gQSBwYXJ0aXRpb24gaXMgYSBwYWlyd2lzZSBkaXNqb2ludCBzdWJzZXQgb2YgUyB3aG9zZSB1bmlvbiBpcyBTLiBgYmVsbE51bWJlcnNgIG9ubHkgdGFrZXMgaW50ZWdlciBhcmd1bWVudHMuIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIG11c3QgYmUgZW5mb3JjZWQ6IG4gPj0gMC4nLFxuICBleGFtcGxlczogWydiZWxsTnVtYmVycygzKScsICdiZWxsTnVtYmVycyg4KSddLFxuICBzZWVhbHNvOiBbJ3N0aXJsaW5nUzInXVxufTtcbmV4cG9ydHMuYmVsbE51bWJlcnNEb2NzID0gYmVsbE51bWJlcnNEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jYXRhbGFuRG9jcyA9IHZvaWQgMDtcbnZhciBjYXRhbGFuRG9jcyA9IHtcbiAgbmFtZTogJ2NhdGFsYW4nLFxuICBjYXRlZ29yeTogJ0NvbWJpbmF0b3JpY3MnLFxuICBzeW50YXg6IFsnY2F0YWxhbihuKSddLFxuICBkZXNjcmlwdGlvbjogJ1RoZSBDYXRhbGFuIE51bWJlcnMgZW51bWVyYXRlIGNvbWJpbmF0b3JpYWwgc3RydWN0dXJlcyBvZiBtYW55IGRpZmZlcmVudCB0eXBlcy4gY2F0YWxhbiBvbmx5IHRha2VzIGludGVnZXIgYXJndW1lbnRzLiBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbiBtdXN0IGJlIGVuZm9yY2VkOiBuID49IDAuJyxcbiAgZXhhbXBsZXM6IFsnY2F0YWxhbigzKScsICdjYXRhbGFuKDgpJ10sXG4gIHNlZWFsc286IFsnYmVsbE51bWJlcnMnXVxufTtcbmV4cG9ydHMuY2F0YWxhbkRvY3MgPSBjYXRhbGFuRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tcG9zaXRpb25Eb2NzID0gdm9pZCAwO1xudmFyIGNvbXBvc2l0aW9uRG9jcyA9IHtcbiAgbmFtZTogJ2NvbXBvc2l0aW9uJyxcbiAgY2F0ZWdvcnk6ICdDb21iaW5hdG9yaWNzJyxcbiAgc3ludGF4OiBbJ2NvbXBvc2l0aW9uKG4sIGspJ10sXG4gIGRlc2NyaXB0aW9uOiAnVGhlIGNvbXBvc2l0aW9uIGNvdW50cyBvZiBuIGludG8gayBwYXJ0cy4gY29tcG9zaXRpb24gb25seSB0YWtlcyBpbnRlZ2VyIGFyZ3VtZW50cy4gVGhlIGZvbGxvd2luZyBjb25kaXRpb24gbXVzdCBiZSBlbmZvcmNlZDogayA8PSBuLicsXG4gIGV4YW1wbGVzOiBbJ2NvbXBvc2l0aW9uKDUsIDMpJ10sXG4gIHNlZWFsc286IFsnY29tYmluYXRpb25zJ11cbn07XG5leHBvcnRzLmNvbXBvc2l0aW9uRG9jcyA9IGNvbXBvc2l0aW9uRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3RpcmxpbmdTMkRvY3MgPSB2b2lkIDA7XG52YXIgc3RpcmxpbmdTMkRvY3MgPSB7XG4gIG5hbWU6ICdzdGlybGluZ1MyJyxcbiAgY2F0ZWdvcnk6ICdDb21iaW5hdG9yaWNzJyxcbiAgc3ludGF4OiBbJ3N0aXJsaW5nUzIobiwgayknXSxcbiAgZGVzY3JpcHRpb246ICdoZSBTdGlybGluZyBudW1iZXJzIG9mIHRoZSBzZWNvbmQga2luZCwgY291bnRzIHRoZSBudW1iZXIgb2Ygd2F5cyB0byBwYXJ0aXRpb24gYSBzZXQgb2YgbiBsYWJlbGxlZCBvYmplY3RzIGludG8gayBub25lbXB0eSB1bmxhYmVsbGVkIHN1YnNldHMuIGBzdGlybGluZ1MyYCBvbmx5IHRha2VzIGludGVnZXIgYXJndW1lbnRzLiBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbiBtdXN0IGJlIGVuZm9yY2VkOiBrIDw9IG4uIElmIG4gPSBrIG9yIGsgPSAxLCB0aGVuIHMobixrKSA9IDEuJyxcbiAgZXhhbXBsZXM6IFsnc3RpcmxpbmdTMig1LCAzKSddLFxuICBzZWVhbHNvOiBbJ2JlbGxOdW1iZXJzJ11cbn07XG5leHBvcnRzLnN0aXJsaW5nUzJEb2NzID0gc3RpcmxpbmdTMkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFyZ0RvY3MgPSB2b2lkIDA7XG52YXIgYXJnRG9jcyA9IHtcbiAgbmFtZTogJ2FyZycsXG4gIGNhdGVnb3J5OiAnQ29tcGxleCcsXG4gIHN5bnRheDogWydhcmcoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBhcmd1bWVudCBvZiBhIGNvbXBsZXggdmFsdWUuIElmIHggPSBhK2JpLCB0aGUgYXJndW1lbnQgaXMgY29tcHV0ZWQgYXMgYXRhbjIoYiwgYSkuJyxcbiAgZXhhbXBsZXM6IFsnYXJnKDIgKyAyaSknLCAnYXRhbjIoMywgMiknLCAnYXJnKDIgKyAzaSknXSxcbiAgc2VlYWxzbzogWydyZScsICdpbScsICdjb25qJywgJ2FicyddXG59O1xuZXhwb3J0cy5hcmdEb2NzID0gYXJnRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29uakRvY3MgPSB2b2lkIDA7XG52YXIgY29uakRvY3MgPSB7XG4gIG5hbWU6ICdjb25qJyxcbiAgY2F0ZWdvcnk6ICdDb21wbGV4JyxcbiAgc3ludGF4OiBbJ2NvbmooeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBjb21wbGV4IGNvbmp1Z2F0ZSBvZiBhIGNvbXBsZXggdmFsdWUuIElmIHggPSBhK2JpLCB0aGUgY29tcGxleCBjb25qdWdhdGUgaXMgYS1iaS4nLFxuICBleGFtcGxlczogWydjb25qKDIgKyAzaSknLCAnY29uaigyIC0gM2kpJywgJ2NvbmooLTUuMmkpJ10sXG4gIHNlZWFsc286IFsncmUnLCAnaW0nLCAnYWJzJywgJ2FyZyddXG59O1xuZXhwb3J0cy5jb25qRG9jcyA9IGNvbmpEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pbURvY3MgPSB2b2lkIDA7XG52YXIgaW1Eb2NzID0ge1xuICBuYW1lOiAnaW0nLFxuICBjYXRlZ29yeTogJ0NvbXBsZXgnLFxuICBzeW50YXg6IFsnaW0oeCknXSxcbiAgZGVzY3JpcHRpb246ICdHZXQgdGhlIGltYWdpbmFyeSBwYXJ0IG9mIGEgY29tcGxleCBudW1iZXIuJyxcbiAgZXhhbXBsZXM6IFsnaW0oMiArIDNpKScsICdyZSgyICsgM2kpJywgJ2ltKC01LjJpKScsICdpbSgyLjQpJ10sXG4gIHNlZWFsc286IFsncmUnLCAnY29uaicsICdhYnMnLCAnYXJnJ11cbn07XG5leHBvcnRzLmltRG9jcyA9IGltRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmVEb2NzID0gdm9pZCAwO1xudmFyIHJlRG9jcyA9IHtcbiAgbmFtZTogJ3JlJyxcbiAgY2F0ZWdvcnk6ICdDb21wbGV4JyxcbiAgc3ludGF4OiBbJ3JlKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnR2V0IHRoZSByZWFsIHBhcnQgb2YgYSBjb21wbGV4IG51bWJlci4nLFxuICBleGFtcGxlczogWydyZSgyICsgM2kpJywgJ2ltKDIgKyAzaSknLCAncmUoLTUuMmkpJywgJ3JlKDIuNCknXSxcbiAgc2VlYWxzbzogWydpbScsICdjb25qJywgJ2FicycsICdhcmcnXVxufTtcbmV4cG9ydHMucmVEb2NzID0gcmVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5ldmFsdWF0ZURvY3MgPSB2b2lkIDA7XG52YXIgZXZhbHVhdGVEb2NzID0ge1xuICBuYW1lOiAnZXZhbHVhdGUnLFxuICBjYXRlZ29yeTogJ0V4cHJlc3Npb24nLFxuICBzeW50YXg6IFsnZXZhbHVhdGUoZXhwcmVzc2lvbiknLCAnZXZhbHVhdGUoW2V4cHIxLCBleHByMiwgZXhwcjMsIC4uLl0pJ10sXG4gIGRlc2NyaXB0aW9uOiAnRXZhbHVhdGUgYW4gZXhwcmVzc2lvbiBvciBhbiBhcnJheSB3aXRoIGV4cHJlc3Npb25zLicsXG4gIGV4YW1wbGVzOiBbJ2V2YWx1YXRlKFwiMiArIDNcIiknLCAnZXZhbHVhdGUoXCJzcXJ0KFwiICsgNCArIFwiKVwiKSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMuZXZhbHVhdGVEb2NzID0gZXZhbHVhdGVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5oZWxwRG9jcyA9IHZvaWQgMDtcbnZhciBoZWxwRG9jcyA9IHtcbiAgbmFtZTogJ2hlbHAnLFxuICBjYXRlZ29yeTogJ0V4cHJlc3Npb24nLFxuICBzeW50YXg6IFsnaGVscChvYmplY3QpJywgJ2hlbHAoc3RyaW5nKSddLFxuICBkZXNjcmlwdGlvbjogJ0Rpc3BsYXkgZG9jdW1lbnRhdGlvbiBvbiBhIGZ1bmN0aW9uIG9yIGRhdGEgdHlwZS4nLFxuICBleGFtcGxlczogWydoZWxwKHNxcnQpJywgJ2hlbHAoXCJjb21wbGV4XCIpJ10sXG4gIHNlZWFsc286IFtdXG59O1xuZXhwb3J0cy5oZWxwRG9jcyA9IGhlbHBEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kaXN0YW5jZURvY3MgPSB2b2lkIDA7XG52YXIgZGlzdGFuY2VEb2NzID0ge1xuICBuYW1lOiAnZGlzdGFuY2UnLFxuICBjYXRlZ29yeTogJ0dlb21ldHJ5JyxcbiAgc3ludGF4OiBbJ2Rpc3RhbmNlKFt4MSwgeTFdLCBbeDIsIHkyXSknLCAnZGlzdGFuY2UoW1t4MSwgeTFdLCBbeDIsIHkyXV0pJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlcyB0aGUgRXVjbGlkZWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHBvaW50cy4nLFxuICBleGFtcGxlczogWydkaXN0YW5jZShbMCwwXSwgWzQsNF0pJywgJ2Rpc3RhbmNlKFtbMCwwXSwgWzQsNF1dKSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMuZGlzdGFuY2VEb2NzID0gZGlzdGFuY2VEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pbnRlcnNlY3REb2NzID0gdm9pZCAwO1xudmFyIGludGVyc2VjdERvY3MgPSB7XG4gIG5hbWU6ICdpbnRlcnNlY3QnLFxuICBjYXRlZ29yeTogJ0dlb21ldHJ5JyxcbiAgc3ludGF4OiBbJ2ludGVyc2VjdChleHByMSwgZXhwcjIsIGV4cHIzLCBleHByNCknLCAnaW50ZXJzZWN0KGV4cHIxLCBleHByMiwgZXhwcjMpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZXMgdGhlIGludGVyc2VjdGlvbiBwb2ludCBvZiBsaW5lcyBhbmQvb3IgcGxhbmVzLicsXG4gIGV4YW1wbGVzOiBbJ2ludGVyc2VjdChbMCwgMF0sIFsxMCwgMTBdLCBbMTAsIDBdLCBbMCwgMTBdKScsICdpbnRlcnNlY3QoWzEsIDAsIDFdLCAgWzQsIC0yLCAyXSwgWzEsIDEsIDEsIDZdKSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMuaW50ZXJzZWN0RG9jcyA9IGludGVyc2VjdERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFuZERvY3MgPSB2b2lkIDA7XG52YXIgYW5kRG9jcyA9IHtcbiAgbmFtZTogJ2FuZCcsXG4gIGNhdGVnb3J5OiAnTG9naWNhbCcsXG4gIHN5bnRheDogWyd4IGFuZCB5JywgJ2FuZCh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0xvZ2ljYWwgYW5kLiBUZXN0IHdoZXRoZXIgdHdvIHZhbHVlcyBhcmUgYm90aCBkZWZpbmVkIHdpdGggYSBub256ZXJvL25vbmVtcHR5IHZhbHVlLicsXG4gIGV4YW1wbGVzOiBbJ3RydWUgYW5kIGZhbHNlJywgJ3RydWUgYW5kIHRydWUnLCAnMiBhbmQgNCddLFxuICBzZWVhbHNvOiBbJ25vdCcsICdvcicsICd4b3InXVxufTtcbmV4cG9ydHMuYW5kRG9jcyA9IGFuZERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm5vdERvY3MgPSB2b2lkIDA7XG52YXIgbm90RG9jcyA9IHtcbiAgbmFtZTogJ25vdCcsXG4gIGNhdGVnb3J5OiAnTG9naWNhbCcsXG4gIHN5bnRheDogWydub3QgeCcsICdub3QoeCknXSxcbiAgZGVzY3JpcHRpb246ICdMb2dpY2FsIG5vdC4gRmxpcHMgdGhlIGJvb2xlYW4gdmFsdWUgb2YgZ2l2ZW4gYXJndW1lbnQuJyxcbiAgZXhhbXBsZXM6IFsnbm90IHRydWUnLCAnbm90IGZhbHNlJywgJ25vdCAyJywgJ25vdCAwJ10sXG4gIHNlZWFsc286IFsnYW5kJywgJ29yJywgJ3hvciddXG59O1xuZXhwb3J0cy5ub3REb2NzID0gbm90RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMub3JEb2NzID0gdm9pZCAwO1xudmFyIG9yRG9jcyA9IHtcbiAgbmFtZTogJ29yJyxcbiAgY2F0ZWdvcnk6ICdMb2dpY2FsJyxcbiAgc3ludGF4OiBbJ3ggb3IgeScsICdvcih4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0xvZ2ljYWwgb3IuIFRlc3QgaWYgYXQgbGVhc3Qgb25lIHZhbHVlIGlzIGRlZmluZWQgd2l0aCBhIG5vbnplcm8vbm9uZW1wdHkgdmFsdWUuJyxcbiAgZXhhbXBsZXM6IFsndHJ1ZSBvciBmYWxzZScsICdmYWxzZSBvciBmYWxzZScsICcwIG9yIDQnXSxcbiAgc2VlYWxzbzogWydub3QnLCAnYW5kJywgJ3hvciddXG59O1xuZXhwb3J0cy5vckRvY3MgPSBvckRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnhvckRvY3MgPSB2b2lkIDA7XG52YXIgeG9yRG9jcyA9IHtcbiAgbmFtZTogJ3hvcicsXG4gIGNhdGVnb3J5OiAnTG9naWNhbCcsXG4gIHN5bnRheDogWyd4IHhvciB5JywgJ3hvcih4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0xvZ2ljYWwgZXhjbHVzaXZlIG9yLCB4b3IuIFRlc3Qgd2hldGhlciBvbmUgYW5kIG9ubHkgb25lIHZhbHVlIGlzIGRlZmluZWQgd2l0aCBhIG5vbnplcm8vbm9uZW1wdHkgdmFsdWUuJyxcbiAgZXhhbXBsZXM6IFsndHJ1ZSB4b3IgZmFsc2UnLCAnZmFsc2UgeG9yIGZhbHNlJywgJ3RydWUgeG9yIHRydWUnLCAnMCB4b3IgNCddLFxuICBzZWVhbHNvOiBbJ25vdCcsICdhbmQnLCAnb3InXVxufTtcbmV4cG9ydHMueG9yRG9jcyA9IHhvckRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbHVtbkRvY3MgPSB2b2lkIDA7XG52YXIgY29sdW1uRG9jcyA9IHtcbiAgbmFtZTogJ2NvbHVtbicsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ2NvbHVtbih4LCBpbmRleCknXSxcbiAgZGVzY3JpcHRpb246ICdSZXR1cm4gYSBjb2x1bW4gZnJvbSBhIG1hdHJpeCBvciBhcnJheS4nLFxuICBleGFtcGxlczogWydBID0gW1sxLCAyXSwgWzMsIDRdXScsICdjb2x1bW4oQSwgMSknLCAnY29sdW1uKEEsIDIpJ10sXG4gIHNlZWFsc286IFsncm93J11cbn07XG5leHBvcnRzLmNvbHVtbkRvY3MgPSBjb2x1bW5Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb25jYXREb2NzID0gdm9pZCAwO1xudmFyIGNvbmNhdERvY3MgPSB7XG4gIG5hbWU6ICdjb25jYXQnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWydjb25jYXQoQSwgQiwgQywgLi4uKScsICdjb25jYXQoQSwgQiwgQywgLi4uLCBkaW0pJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29uY2F0ZW5hdGUgbWF0cmljZXMuIEJ5IGRlZmF1bHQsIHRoZSBtYXRyaWNlcyBhcmUgY29uY2F0ZW5hdGVkIGJ5IHRoZSBsYXN0IGRpbWVuc2lvbi4gVGhlIGRpbWVuc2lvbiBvbiB3aGljaCB0byBjb25jYXRlbmF0ZSBjYW4gYmUgcHJvdmlkZWQgYXMgbGFzdCBhcmd1bWVudC4nLFxuICBleGFtcGxlczogWydBID0gWzEsIDI7IDUsIDZdJywgJ0IgPSBbMywgNDsgNywgOF0nLCAnY29uY2F0KEEsIEIpJywgJ2NvbmNhdChBLCBCLCAxKScsICdjb25jYXQoQSwgQiwgMiknXSxcbiAgc2VlYWxzbzogWydkZXQnLCAnZGlhZycsICdpZGVudGl0eScsICdpbnYnLCAnb25lcycsICdyYW5nZScsICdzaXplJywgJ3NxdWVlemUnLCAnc3Vic2V0JywgJ3RyYWNlJywgJ3RyYW5zcG9zZScsICd6ZXJvcyddXG59O1xuZXhwb3J0cy5jb25jYXREb2NzID0gY29uY2F0RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3Jvc3NEb2NzID0gdm9pZCAwO1xudmFyIGNyb3NzRG9jcyA9IHtcbiAgbmFtZTogJ2Nyb3NzJyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsnY3Jvc3MoQSwgQiknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIGNyb3NzIHByb2R1Y3QgZm9yIHR3byB2ZWN0b3JzIGluIHRocmVlIGRpbWVuc2lvbmFsIHNwYWNlLicsXG4gIGV4YW1wbGVzOiBbJ2Nyb3NzKFsxLCAxLCAwXSwgIFswLCAxLCAxXSknLCAnY3Jvc3MoWzMsIC0zLCAxXSwgWzQsIDksIDJdKScsICdjcm9zcyhbMiwgMywgNF0sICBbNSwgNiwgN10pJ10sXG4gIHNlZWFsc286IFsnbXVsdGlwbHknLCAnZG90J11cbn07XG5leHBvcnRzLmNyb3NzRG9jcyA9IGNyb3NzRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3RyYW5zcG9zZURvY3MgPSB2b2lkIDA7XG52YXIgY3RyYW5zcG9zZURvY3MgPSB7XG4gIG5hbWU6ICdjdHJhbnNwb3NlJyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsneFxcJycsICdjdHJhbnNwb3NlKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcGxleCBDb25qdWdhdGUgYW5kIFRyYW5zcG9zZSBhIG1hdHJpeCcsXG4gIGV4YW1wbGVzOiBbJ2EgPSBbMSwgMiwgMzsgNCwgNSwgNl0nLCAnYVxcJycsICdjdHJhbnNwb3NlKGEpJ10sXG4gIHNlZWFsc286IFsnY29uY2F0JywgJ2RldCcsICdkaWFnJywgJ2lkZW50aXR5JywgJ2ludicsICdvbmVzJywgJ3JhbmdlJywgJ3NpemUnLCAnc3F1ZWV6ZScsICdzdWJzZXQnLCAndHJhY2UnLCAnemVyb3MnXVxufTtcbmV4cG9ydHMuY3RyYW5zcG9zZURvY3MgPSBjdHJhbnNwb3NlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGV0RG9jcyA9IHZvaWQgMDtcbnZhciBkZXREb2NzID0ge1xuICBuYW1lOiAnZGV0JyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsnZGV0KHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudCBvZiBhIG1hdHJpeCcsXG4gIGV4YW1wbGVzOiBbJ2RldChbMSwgMjsgMywgNF0pJywgJ2RldChbLTIsIDIsIDM7IC0xLCAxLCAzOyAyLCAwLCAtMV0pJ10sXG4gIHNlZWFsc286IFsnY29uY2F0JywgJ2RpYWcnLCAnaWRlbnRpdHknLCAnaW52JywgJ29uZXMnLCAncmFuZ2UnLCAnc2l6ZScsICdzcXVlZXplJywgJ3N1YnNldCcsICd0cmFjZScsICd0cmFuc3Bvc2UnLCAnemVyb3MnXVxufTtcbmV4cG9ydHMuZGV0RG9jcyA9IGRldERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRpYWdEb2NzID0gdm9pZCAwO1xudmFyIGRpYWdEb2NzID0ge1xuICBuYW1lOiAnZGlhZycsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ2RpYWcoeCknLCAnZGlhZyh4LCBrKSddLFxuICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSBhIGRpYWdvbmFsIG1hdHJpeCBvciByZXRyaWV2ZSB0aGUgZGlhZ29uYWwgb2YgYSBtYXRyaXguIFdoZW4geCBpcyBhIHZlY3RvciwgYSBtYXRyaXggd2l0aCB0aGUgdmVjdG9yIHZhbHVlcyBvbiB0aGUgZGlhZ29uYWwgd2lsbCBiZSByZXR1cm5lZC4gV2hlbiB4IGlzIGEgbWF0cml4LCBhIHZlY3RvciB3aXRoIHRoZSBkaWFnb25hbCB2YWx1ZXMgb2YgdGhlIG1hdHJpeCBpcyByZXR1cm5lZC4gV2hlbiBrIGlzIHByb3ZpZGVkLCB0aGUgay10aCBkaWFnb25hbCB3aWxsIGJlIGZpbGxlZCBpbiBvciByZXRyaWV2ZWQsIGlmIGsgaXMgcG9zaXRpdmUsIHRoZSB2YWx1ZXMgYXJlIHBsYWNlZCBvbiB0aGUgc3VwZXIgZGlhZ29uYWwuIFdoZW4gayBpcyBuZWdhdGl2ZSwgdGhlIHZhbHVlcyBhcmUgcGxhY2VkIG9uIHRoZSBzdWIgZGlhZ29uYWwuJyxcbiAgZXhhbXBsZXM6IFsnZGlhZygxOjMpJywgJ2RpYWcoMTozLCAxKScsICdhID0gWzEsIDIsIDM7IDQsIDUsIDY7IDcsIDgsIDldJywgJ2RpYWcoYSknXSxcbiAgc2VlYWxzbzogWydjb25jYXQnLCAnZGV0JywgJ2lkZW50aXR5JywgJ2ludicsICdvbmVzJywgJ3JhbmdlJywgJ3NpemUnLCAnc3F1ZWV6ZScsICdzdWJzZXQnLCAndHJhY2UnLCAndHJhbnNwb3NlJywgJ3plcm9zJ11cbn07XG5leHBvcnRzLmRpYWdEb2NzID0gZGlhZ0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRvdERvY3MgPSB2b2lkIDA7XG52YXIgZG90RG9jcyA9IHtcbiAgbmFtZTogJ2RvdCcsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ2RvdChBLCBCKScsICdBICogQiddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgZG90IHByb2R1Y3Qgb2YgdHdvIHZlY3RvcnMuICcgKyAnVGhlIGRvdCBwcm9kdWN0IG9mIEEgPSBbYTEsIGEyLCBhMywgLi4uLCBhbl0gYW5kIEIgPSBbYjEsIGIyLCBiMywgLi4uLCBibl0gJyArICdpcyBkZWZpbmVkIGFzIGRvdChBLCBCKSA9IGExICogYjEgKyBhMiAqIGIyICsgYTMgKiBiMyArIC4uLiArIGFuICogYm4nLFxuICBleGFtcGxlczogWydkb3QoWzIsIDQsIDFdLCBbMiwgMiwgM10pJywgJ1syLCA0LCAxXSAqIFsyLCAyLCAzXSddLFxuICBzZWVhbHNvOiBbJ211bHRpcGx5JywgJ2Nyb3NzJ11cbn07XG5leHBvcnRzLmRvdERvY3MgPSBkb3REb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5laWdzRG9jcyA9IHZvaWQgMDtcbnZhciBlaWdzRG9jcyA9IHtcbiAgbmFtZTogJ2VpZ3MnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWydlaWdzKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBlaWdlbnZhbHVlcyBhbmQgZWlnZW52ZWN0b3JzIG9mIGEgcmVhbCBzeW1tZXRyaWMgbWF0cml4JyxcbiAgZXhhbXBsZXM6IFsnZWlncyhbWzUsIDIuM10sIFsyLjMsIDFdXSknXSxcbiAgc2VlYWxzbzogWydpbnYnXVxufTtcbmV4cG9ydHMuZWlnc0RvY3MgPSBlaWdzRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZmlsdGVyRG9jcyA9IHZvaWQgMDtcbnZhciBmaWx0ZXJEb2NzID0ge1xuICBuYW1lOiAnZmlsdGVyJyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsnZmlsdGVyKHgsIHRlc3QpJ10sXG4gIGRlc2NyaXB0aW9uOiAnRmlsdGVyIGl0ZW1zIGluIGEgbWF0cml4LicsXG4gIGV4YW1wbGVzOiBbJ2lzUG9zaXRpdmUoeCkgPSB4ID4gMCcsICdmaWx0ZXIoWzYsIC0yLCAtMSwgNCwgM10sIGlzUG9zaXRpdmUpJywgJ2ZpbHRlcihbNiwgLTIsIDAsIDEsIDBdLCB4ICE9IDApJ10sXG4gIHNlZWFsc286IFsnc29ydCcsICdtYXAnLCAnZm9yRWFjaCddXG59O1xuZXhwb3J0cy5maWx0ZXJEb2NzID0gZmlsdGVyRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZmxhdHRlbkRvY3MgPSB2b2lkIDA7XG52YXIgZmxhdHRlbkRvY3MgPSB7XG4gIG5hbWU6ICdmbGF0dGVuJyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsnZmxhdHRlbih4KSddLFxuICBkZXNjcmlwdGlvbjogJ0ZsYXR0ZW4gYSBtdWx0aSBkaW1lbnNpb25hbCBtYXRyaXggaW50byBhIHNpbmdsZSBkaW1lbnNpb25hbCBtYXRyaXguJyxcbiAgZXhhbXBsZXM6IFsnYSA9IFsxLCAyLCAzOyA0LCA1LCA2XScsICdzaXplKGEpJywgJ2IgPSBmbGF0dGVuKGEpJywgJ3NpemUoYiknXSxcbiAgc2VlYWxzbzogWydjb25jYXQnLCAncmVzaXplJywgJ3NpemUnLCAnc3F1ZWV6ZSddXG59O1xuZXhwb3J0cy5mbGF0dGVuRG9jcyA9IGZsYXR0ZW5Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5mb3JFYWNoRG9jcyA9IHZvaWQgMDtcbnZhciBmb3JFYWNoRG9jcyA9IHtcbiAgbmFtZTogJ2ZvckVhY2gnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWydmb3JFYWNoKHgsIGNhbGxiYWNrKSddLFxuICBkZXNjcmlwdGlvbjogJ0l0ZXJhdGVzIG92ZXIgYWxsIGVsZW1lbnRzIG9mIGEgbWF0cml4L2FycmF5LCBhbmQgZXhlY3V0ZXMgdGhlIGdpdmVuIGNhbGxiYWNrIGZ1bmN0aW9uLicsXG4gIGV4YW1wbGVzOiBbJ2ZvckVhY2goWzEsIDIsIDNdLCBmdW5jdGlvbih2YWwpIHsgY29uc29sZS5sb2codmFsKSB9KSddLFxuICBzZWVhbHNvOiBbJ21hcCcsICdzb3J0JywgJ2ZpbHRlciddXG59O1xuZXhwb3J0cy5mb3JFYWNoRG9jcyA9IGZvckVhY2hEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5nZXRNYXRyaXhEYXRhVHlwZURvY3MgPSB2b2lkIDA7XG52YXIgZ2V0TWF0cml4RGF0YVR5cGVEb2NzID0ge1xuICBuYW1lOiAnZ2V0TWF0cml4RGF0YVR5cGUnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWydnZXRNYXRyaXhEYXRhVHlwZSh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0ZpbmQgdGhlIGRhdGEgdHlwZSBvZiBhbGwgZWxlbWVudHMgaW4gYSBtYXRyaXggb3IgYXJyYXksICcgKyAnZm9yIGV4YW1wbGUgXCJudW1iZXJcIiBpZiBhbGwgaXRlbXMgYXJlIGEgbnVtYmVyICcgKyAnYW5kIFwiQ29tcGxleFwiIGlmIGFsbCB2YWx1ZXMgYXJlIGNvbXBsZXggbnVtYmVycy4gJyArICdJZiBhIG1hdHJpeCBjb250YWlucyBtb3JlIHRoYW4gb25lIGRhdGEgdHlwZSwgaXQgd2lsbCByZXR1cm4gXCJtaXhlZFwiLicsXG4gIGV4YW1wbGVzOiBbJ2dldE1hdHJpeERhdGFUeXBlKFsxLCAyLCAzXSknLCAnZ2V0TWF0cml4RGF0YVR5cGUoW1s1IGNtXSwgWzIgaW5jaF1dKScsICdnZXRNYXRyaXhEYXRhVHlwZShbMSwgXCJ0ZXh0XCJdKScsICdnZXRNYXRyaXhEYXRhVHlwZShbMSwgYmlnbnVtYmVyKDQpXSknXSxcbiAgc2VlYWxzbzogWydtYXRyaXgnLCAnc3BhcnNlJywgJ3R5cGVPZiddXG59O1xuZXhwb3J0cy5nZXRNYXRyaXhEYXRhVHlwZURvY3MgPSBnZXRNYXRyaXhEYXRhVHlwZURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmlkZW50aXR5RG9jcyA9IHZvaWQgMDtcbnZhciBpZGVudGl0eURvY3MgPSB7XG4gIG5hbWU6ICdpZGVudGl0eScsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ2lkZW50aXR5KG4pJywgJ2lkZW50aXR5KG0sIG4pJywgJ2lkZW50aXR5KFttLCBuXSknXSxcbiAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBpZGVudGl0eSBtYXRyaXggd2l0aCBzaXplIG0tYnktbi4gVGhlIG1hdHJpeCBoYXMgb25lcyBvbiB0aGUgZGlhZ29uYWwgYW5kIHplcm9zIGVsc2V3aGVyZS4nLFxuICBleGFtcGxlczogWydpZGVudGl0eSgzKScsICdpZGVudGl0eSgzLCA1KScsICdhID0gWzEsIDIsIDM7IDQsIDUsIDZdJywgJ2lkZW50aXR5KHNpemUoYSkpJ10sXG4gIHNlZWFsc286IFsnY29uY2F0JywgJ2RldCcsICdkaWFnJywgJ2ludicsICdvbmVzJywgJ3JhbmdlJywgJ3NpemUnLCAnc3F1ZWV6ZScsICdzdWJzZXQnLCAndHJhY2UnLCAndHJhbnNwb3NlJywgJ3plcm9zJ11cbn07XG5leHBvcnRzLmlkZW50aXR5RG9jcyA9IGlkZW50aXR5RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaW52RG9jcyA9IHZvaWQgMDtcbnZhciBpbnZEb2NzID0ge1xuICBuYW1lOiAnaW52JyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsnaW52KHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBpbnZlcnNlIG9mIGEgbWF0cml4JyxcbiAgZXhhbXBsZXM6IFsnaW52KFsxLCAyOyAzLCA0XSknLCAnaW52KDQpJywgJzEgLyA0J10sXG4gIHNlZWFsc286IFsnY29uY2F0JywgJ2RldCcsICdkaWFnJywgJ2lkZW50aXR5JywgJ29uZXMnLCAncmFuZ2UnLCAnc2l6ZScsICdzcXVlZXplJywgJ3N1YnNldCcsICd0cmFjZScsICd0cmFuc3Bvc2UnLCAnemVyb3MnXVxufTtcbmV4cG9ydHMuaW52RG9jcyA9IGludkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmtyb25Eb2NzID0gdm9pZCAwO1xudmFyIGtyb25Eb2NzID0ge1xuICBuYW1lOiAna3JvbicsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ2tyb24oeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGVzIHRoZSBrcm9uZWNrZXIgcHJvZHVjdCBvZiAyIG1hdHJpY2VzIG9yIHZlY3RvcnMuJyxcbiAgZXhhbXBsZXM6IFsna3JvbihbWzEsIDBdLCBbMCwgMV1dLCBbWzEsIDJdLCBbMywgNF1dKScsICdrcm9uKFsxLDFdLCBbMiwzLDRdKSddLFxuICBzZWVhbHNvOiBbJ211bHRpcGx5JywgJ2RvdCcsICdjcm9zcyddXG59O1xuZXhwb3J0cy5rcm9uRG9jcyA9IGtyb25Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tYXBEb2NzID0gdm9pZCAwO1xudmFyIG1hcERvY3MgPSB7XG4gIG5hbWU6ICdtYXAnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWydtYXAoeCwgY2FsbGJhY2spJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIGEgbmV3IG1hdHJpeCBvciBhcnJheSB3aXRoIHRoZSByZXN1bHRzIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBleGVjdXRlZCBvbiBlYWNoIGVudHJ5IG9mIHRoZSBtYXRyaXgvYXJyYXkuJyxcbiAgZXhhbXBsZXM6IFsnbWFwKFsxLCAyLCAzXSwgc3F1YXJlKSddLFxuICBzZWVhbHNvOiBbJ2ZpbHRlcicsICdmb3JFYWNoJ11cbn07XG5leHBvcnRzLm1hcERvY3MgPSBtYXBEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5vbmVzRG9jcyA9IHZvaWQgMDtcbnZhciBvbmVzRG9jcyA9IHtcbiAgbmFtZTogJ29uZXMnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWydvbmVzKG0pJywgJ29uZXMobSwgbiknLCAnb25lcyhtLCBuLCBwLCAuLi4pJywgJ29uZXMoW21dKScsICdvbmVzKFttLCBuXSknLCAnb25lcyhbbSwgbiwgcCwgLi4uXSknXSxcbiAgZGVzY3JpcHRpb246ICdDcmVhdGUgYSBtYXRyaXggY29udGFpbmluZyBvbmVzLicsXG4gIGV4YW1wbGVzOiBbJ29uZXMoMyknLCAnb25lcygzLCA1KScsICdvbmVzKFsyLDNdKSAqIDQuNScsICdhID0gWzEsIDIsIDM7IDQsIDUsIDZdJywgJ29uZXMoc2l6ZShhKSknXSxcbiAgc2VlYWxzbzogWydjb25jYXQnLCAnZGV0JywgJ2RpYWcnLCAnaWRlbnRpdHknLCAnaW52JywgJ3JhbmdlJywgJ3NpemUnLCAnc3F1ZWV6ZScsICdzdWJzZXQnLCAndHJhY2UnLCAndHJhbnNwb3NlJywgJ3plcm9zJ11cbn07XG5leHBvcnRzLm9uZXNEb2NzID0gb25lc0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBhcnRpdGlvblNlbGVjdERvY3MgPSB2b2lkIDA7XG52YXIgcGFydGl0aW9uU2VsZWN0RG9jcyA9IHtcbiAgbmFtZTogJ3BhcnRpdGlvblNlbGVjdCcsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ3BhcnRpdGlvblNlbGVjdCh4LCBrKScsICdwYXJ0aXRpb25TZWxlY3QoeCwgaywgY29tcGFyZSknXSxcbiAgZGVzY3JpcHRpb246ICdQYXJ0aXRpb24tYmFzZWQgc2VsZWN0aW9uIG9mIGFuIGFycmF5IG9yIDFEIG1hdHJpeC4gV2lsbCBmaW5kIHRoZSBrdGggc21hbGxlc3QgdmFsdWUsIGFuZCBtdXRhdGVzIHRoZSBpbnB1dCBhcnJheS4gVXNlcyBRdWlja3NlbGVjdC4nLFxuICBleGFtcGxlczogWydwYXJ0aXRpb25TZWxlY3QoWzUsIDEwLCAxXSwgMiknLCAncGFydGl0aW9uU2VsZWN0KFtcIkNcIiwgXCJCXCIsIFwiQVwiLCBcIkRcIl0sIDEpJ10sXG4gIHNlZWFsc286IFsnc29ydCddXG59O1xuZXhwb3J0cy5wYXJ0aXRpb25TZWxlY3REb2NzID0gcGFydGl0aW9uU2VsZWN0RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmFuZ2VEb2NzID0gdm9pZCAwO1xudmFyIHJhbmdlRG9jcyA9IHtcbiAgbmFtZTogJ3JhbmdlJyxcbiAgY2F0ZWdvcnk6ICdUeXBlJyxcbiAgc3ludGF4OiBbJ3N0YXJ0OmVuZCcsICdzdGFydDpzdGVwOmVuZCcsICdyYW5nZShzdGFydCwgZW5kKScsICdyYW5nZShzdGFydCwgZW5kLCBzdGVwKScsICdyYW5nZShzdHJpbmcpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIGEgcmFuZ2UuIExvd2VyIGJvdW5kIG9mIHRoZSByYW5nZSBpcyBpbmNsdWRlZCwgdXBwZXIgYm91bmQgaXMgZXhjbHVkZWQuJyxcbiAgZXhhbXBsZXM6IFsnMTo1JywgJzM6LTE6LTMnLCAncmFuZ2UoMywgNyknLCAncmFuZ2UoMCwgMTIsIDIpJywgJ3JhbmdlKFwiNDoxMFwiKScsICdhID0gWzEsIDIsIDMsIDQ7IDUsIDYsIDcsIDhdJywgJ2FbMToyLCAxOjJdJ10sXG4gIHNlZWFsc286IFsnY29uY2F0JywgJ2RldCcsICdkaWFnJywgJ2lkZW50aXR5JywgJ2ludicsICdvbmVzJywgJ3NpemUnLCAnc3F1ZWV6ZScsICdzdWJzZXQnLCAndHJhY2UnLCAndHJhbnNwb3NlJywgJ3plcm9zJ11cbn07XG5leHBvcnRzLnJhbmdlRG9jcyA9IHJhbmdlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmVzaGFwZURvY3MgPSB2b2lkIDA7XG52YXIgcmVzaGFwZURvY3MgPSB7XG4gIG5hbWU6ICdyZXNoYXBlJyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsncmVzaGFwZSh4LCBzaXplcyknXSxcbiAgZGVzY3JpcHRpb246ICdSZXNoYXBlIGEgbXVsdGkgZGltZW5zaW9uYWwgYXJyYXkgdG8gZml0IHRoZSBzcGVjaWZpZWQgZGltZW5zaW9ucy4nLFxuICBleGFtcGxlczogWydyZXNoYXBlKFsxLCAyLCAzLCA0LCA1LCA2XSwgWzIsIDNdKScsICdyZXNoYXBlKFtbMSwgMl0sIFszLCA0XV0sIFsxLCA0XSknLCAncmVzaGFwZShbWzEsIDJdLCBbMywgNF1dLCBbNF0pJ10sXG4gIHNlZWFsc286IFsnc2l6ZScsICdzcXVlZXplJywgJ3Jlc2l6ZSddXG59O1xuZXhwb3J0cy5yZXNoYXBlRG9jcyA9IHJlc2hhcGVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yZXNpemVEb2NzID0gdm9pZCAwO1xudmFyIHJlc2l6ZURvY3MgPSB7XG4gIG5hbWU6ICdyZXNpemUnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWydyZXNpemUoeCwgc2l6ZSknLCAncmVzaXplKHgsIHNpemUsIGRlZmF1bHRWYWx1ZSknXSxcbiAgZGVzY3JpcHRpb246ICdSZXNpemUgYSBtYXRyaXguJyxcbiAgZXhhbXBsZXM6IFsncmVzaXplKFsxLDIsMyw0LDVdLCBbM10pJywgJ3Jlc2l6ZShbMSwyLDNdLCBbNV0pJywgJ3Jlc2l6ZShbMSwyLDNdLCBbNV0sIC0xKScsICdyZXNpemUoMiwgWzIsIDNdKScsICdyZXNpemUoXCJoZWxsb1wiLCBbOF0sIFwiIVwiKSddLFxuICBzZWVhbHNvOiBbJ3NpemUnLCAnc3Vic2V0JywgJ3NxdWVlemUnLCAncmVzaGFwZSddXG59O1xuZXhwb3J0cy5yZXNpemVEb2NzID0gcmVzaXplRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucm93RG9jcyA9IHZvaWQgMDtcbnZhciByb3dEb2NzID0ge1xuICBuYW1lOiAncm93JyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsncm93KHgsIGluZGV4KSddLFxuICBkZXNjcmlwdGlvbjogJ1JldHVybiBhIHJvdyBmcm9tIGEgbWF0cml4IG9yIGFycmF5LicsXG4gIGV4YW1wbGVzOiBbJ0EgPSBbWzEsIDJdLCBbMywgNF1dJywgJ3JvdyhBLCAxKScsICdyb3coQSwgMiknXSxcbiAgc2VlYWxzbzogWydjb2x1bW4nXVxufTtcbmV4cG9ydHMucm93RG9jcyA9IHJvd0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNpemVEb2NzID0gdm9pZCAwO1xudmFyIHNpemVEb2NzID0ge1xuICBuYW1lOiAnc2l6ZScsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ3NpemUoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIHNpemUgb2YgYSBtYXRyaXguJyxcbiAgZXhhbXBsZXM6IFsnc2l6ZSgyLjMpJywgJ3NpemUoXCJoZWxsbyB3b3JsZFwiKScsICdhID0gWzEsIDI7IDMsIDQ7IDUsIDZdJywgJ3NpemUoYSknLCAnc2l6ZSgxOjYpJ10sXG4gIHNlZWFsc286IFsnY29uY2F0JywgJ2RldCcsICdkaWFnJywgJ2lkZW50aXR5JywgJ2ludicsICdvbmVzJywgJ3JhbmdlJywgJ3NxdWVlemUnLCAnc3Vic2V0JywgJ3RyYWNlJywgJ3RyYW5zcG9zZScsICd6ZXJvcyddXG59O1xuZXhwb3J0cy5zaXplRG9jcyA9IHNpemVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zb3J0RG9jcyA9IHZvaWQgMDtcbnZhciBzb3J0RG9jcyA9IHtcbiAgbmFtZTogJ3NvcnQnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWydzb3J0KHgpJywgJ3NvcnQoeCwgY29tcGFyZSknXSxcbiAgZGVzY3JpcHRpb246ICdTb3J0IHRoZSBpdGVtcyBpbiBhIG1hdHJpeC4gQ29tcGFyZSBjYW4gYmUgYSBzdHJpbmcgXCJhc2NcIiwgXCJkZXNjXCIsIFwibmF0dXJhbFwiLCBvciBhIGN1c3RvbSBzb3J0IGZ1bmN0aW9uLicsXG4gIGV4YW1wbGVzOiBbJ3NvcnQoWzUsIDEwLCAxXSknLCAnc29ydChbXCJDXCIsIFwiQlwiLCBcIkFcIiwgXCJEXCJdKScsICdzb3J0QnlMZW5ndGgoYSwgYikgPSBzaXplKGEpWzFdIC0gc2l6ZShiKVsxXScsICdzb3J0KFtcIkxhbmdkb25cIiwgXCJUb21cIiwgXCJTYXJhXCJdLCBzb3J0QnlMZW5ndGgpJywgJ3NvcnQoW1wiMTBcIiwgXCIxXCIsIFwiMlwiXSwgXCJuYXR1cmFsXCIpJ10sXG4gIHNlZWFsc286IFsnbWFwJywgJ2ZpbHRlcicsICdmb3JFYWNoJ11cbn07XG5leHBvcnRzLnNvcnREb2NzID0gc29ydERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNxdWVlemVEb2NzID0gdm9pZCAwO1xudmFyIHNxdWVlemVEb2NzID0ge1xuICBuYW1lOiAnc3F1ZWV6ZScsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ3NxdWVlemUoeCknXSxcbiAgZGVzY3JpcHRpb246ICdSZW1vdmUgaW5uZXIgYW5kIG91dGVyIHNpbmdsZXRvbiBkaW1lbnNpb25zIGZyb20gYSBtYXRyaXguJyxcbiAgZXhhbXBsZXM6IFsnYSA9IHplcm9zKDMsMiwxKScsICdzaXplKHNxdWVlemUoYSkpJywgJ2IgPSB6ZXJvcygxLDEsMyknLCAnc2l6ZShzcXVlZXplKGIpKSddLFxuICBzZWVhbHNvOiBbJ2NvbmNhdCcsICdkZXQnLCAnZGlhZycsICdpZGVudGl0eScsICdpbnYnLCAnb25lcycsICdyYW5nZScsICdzaXplJywgJ3N1YnNldCcsICd0cmFjZScsICd0cmFuc3Bvc2UnLCAnemVyb3MnXVxufTtcbmV4cG9ydHMuc3F1ZWV6ZURvY3MgPSBzcXVlZXplRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3Vic2V0RG9jcyA9IHZvaWQgMDtcbnZhciBzdWJzZXREb2NzID0ge1xuICBuYW1lOiAnc3Vic2V0JyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsndmFsdWUoaW5kZXgpJywgJ3ZhbHVlKGluZGV4KSA9IHJlcGxhY2VtZW50JywgJ3N1YnNldCh2YWx1ZSwgW2luZGV4XSknLCAnc3Vic2V0KHZhbHVlLCBbaW5kZXhdLCByZXBsYWNlbWVudCknXSxcbiAgZGVzY3JpcHRpb246ICdHZXQgb3Igc2V0IGEgc3Vic2V0IG9mIGEgbWF0cml4IG9yIHN0cmluZy4gJyArICdJbmRleGVzIGFyZSBvbmUtYmFzZWQuICcgKyAnQm90aCB0aGUgcmFuZ2VzIGxvd2VyLWJvdW5kIGFuZCB1cHBlci1ib3VuZCBhcmUgaW5jbHVkZWQuJyxcbiAgZXhhbXBsZXM6IFsnZCA9IFsxLCAyOyAzLCA0XScsICdlID0gW10nLCAnZVsxLCAxOjJdID0gWzUsIDZdJywgJ2VbMiwgOl0gPSBbNywgOF0nLCAnZiA9IGQgKiBlJywgJ2ZbMiwgMV0nLCAnZls6LCAxXSddLFxuICBzZWVhbHNvOiBbJ2NvbmNhdCcsICdkZXQnLCAnZGlhZycsICdpZGVudGl0eScsICdpbnYnLCAnb25lcycsICdyYW5nZScsICdzaXplJywgJ3NxdWVlemUnLCAndHJhY2UnLCAndHJhbnNwb3NlJywgJ3plcm9zJ11cbn07XG5leHBvcnRzLnN1YnNldERvY3MgPSBzdWJzZXREb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy50cmFjZURvY3MgPSB2b2lkIDA7XG52YXIgdHJhY2VEb2NzID0ge1xuICBuYW1lOiAndHJhY2UnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWyd0cmFjZShBKSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgdHJhY2Ugb2YgYSBtYXRyaXg6IHRoZSBzdW0gb2YgdGhlIGVsZW1lbnRzIG9uIHRoZSBtYWluIGRpYWdvbmFsIG9mIGEgc3F1YXJlIG1hdHJpeC4nLFxuICBleGFtcGxlczogWydBID0gWzEsIDIsIDM7IC0xLCAyLCAzOyAyLCAwLCAzXScsICd0cmFjZShBKSddLFxuICBzZWVhbHNvOiBbJ2NvbmNhdCcsICdkZXQnLCAnZGlhZycsICdpZGVudGl0eScsICdpbnYnLCAnb25lcycsICdyYW5nZScsICdzaXplJywgJ3NxdWVlemUnLCAnc3Vic2V0JywgJ3RyYW5zcG9zZScsICd6ZXJvcyddXG59O1xuZXhwb3J0cy50cmFjZURvY3MgPSB0cmFjZURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnRyYW5zcG9zZURvY3MgPSB2b2lkIDA7XG52YXIgdHJhbnNwb3NlRG9jcyA9IHtcbiAgbmFtZTogJ3RyYW5zcG9zZScsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ3hcXCcnLCAndHJhbnNwb3NlKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnVHJhbnNwb3NlIGEgbWF0cml4JyxcbiAgZXhhbXBsZXM6IFsnYSA9IFsxLCAyLCAzOyA0LCA1LCA2XScsICdhXFwnJywgJ3RyYW5zcG9zZShhKSddLFxuICBzZWVhbHNvOiBbJ2NvbmNhdCcsICdkZXQnLCAnZGlhZycsICdpZGVudGl0eScsICdpbnYnLCAnb25lcycsICdyYW5nZScsICdzaXplJywgJ3NxdWVlemUnLCAnc3Vic2V0JywgJ3RyYWNlJywgJ3plcm9zJ11cbn07XG5leHBvcnRzLnRyYW5zcG9zZURvY3MgPSB0cmFuc3Bvc2VEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy56ZXJvc0RvY3MgPSB2b2lkIDA7XG52YXIgemVyb3NEb2NzID0ge1xuICBuYW1lOiAnemVyb3MnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWyd6ZXJvcyhtKScsICd6ZXJvcyhtLCBuKScsICd6ZXJvcyhtLCBuLCBwLCAuLi4pJywgJ3plcm9zKFttXSknLCAnemVyb3MoW20sIG5dKScsICd6ZXJvcyhbbSwgbiwgcCwgLi4uXSknXSxcbiAgZGVzY3JpcHRpb246ICdDcmVhdGUgYSBtYXRyaXggY29udGFpbmluZyB6ZXJvcy4nLFxuICBleGFtcGxlczogWyd6ZXJvcygzKScsICd6ZXJvcygzLCA1KScsICdhID0gWzEsIDIsIDM7IDQsIDUsIDZdJywgJ3plcm9zKHNpemUoYSkpJ10sXG4gIHNlZWFsc286IFsnY29uY2F0JywgJ2RldCcsICdkaWFnJywgJ2lkZW50aXR5JywgJ2ludicsICdvbmVzJywgJ3JhbmdlJywgJ3NpemUnLCAnc3F1ZWV6ZScsICdzdWJzZXQnLCAndHJhY2UnLCAndHJhbnNwb3NlJ11cbn07XG5leHBvcnRzLnplcm9zRG9jcyA9IHplcm9zRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tYmluYXRpb25zRG9jcyA9IHZvaWQgMDtcbnZhciBjb21iaW5hdGlvbnNEb2NzID0ge1xuICBuYW1lOiAnY29tYmluYXRpb25zJyxcbiAgY2F0ZWdvcnk6ICdQcm9iYWJpbGl0eScsXG4gIHN5bnRheDogWydjb21iaW5hdGlvbnMobiwgayknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBudW1iZXIgb2YgY29tYmluYXRpb25zIG9mIG4gaXRlbXMgdGFrZW4gayBhdCBhIHRpbWUnLFxuICBleGFtcGxlczogWydjb21iaW5hdGlvbnMoNywgNSknXSxcbiAgc2VlYWxzbzogWydjb21iaW5hdGlvbnNXaXRoUmVwJywgJ3Blcm11dGF0aW9ucycsICdmYWN0b3JpYWwnXVxufTtcbmV4cG9ydHMuY29tYmluYXRpb25zRG9jcyA9IGNvbWJpbmF0aW9uc0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbWJpbmF0aW9uc1dpdGhSZXBEb2NzID0gdm9pZCAwO1xudmFyIGNvbWJpbmF0aW9uc1dpdGhSZXBEb2NzID0ge1xuICBuYW1lOiAnY29tYmluYXRpb25zV2l0aFJlcCcsXG4gIGNhdGVnb3J5OiAnUHJvYmFiaWxpdHknLFxuICBzeW50YXg6IFsnY29tYmluYXRpb25zV2l0aFJlcChuLCBrKSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIG51bWJlciBvZiBjb21iaW5hdGlvbnMgb2YgbiBpdGVtcyB0YWtlbiBrIGF0IGEgdGltZSB3aXRoIHJlcGxhY2VtZW50cy4nLFxuICBleGFtcGxlczogWydjb21iaW5hdGlvbnNXaXRoUmVwKDcsIDUpJ10sXG4gIHNlZWFsc286IFsnY29tYmluYXRpb25zJywgJ3Blcm11dGF0aW9ucycsICdmYWN0b3JpYWwnXVxufTtcbmV4cG9ydHMuY29tYmluYXRpb25zV2l0aFJlcERvY3MgPSBjb21iaW5hdGlvbnNXaXRoUmVwRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZmFjdG9yaWFsRG9jcyA9IHZvaWQgMDtcbnZhciBmYWN0b3JpYWxEb2NzID0ge1xuICBuYW1lOiAnZmFjdG9yaWFsJyxcbiAgY2F0ZWdvcnk6ICdQcm9iYWJpbGl0eScsXG4gIHN5bnRheDogWyduIScsICdmYWN0b3JpYWwobiknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBmYWN0b3JpYWwgb2YgYSB2YWx1ZScsXG4gIGV4YW1wbGVzOiBbJzUhJywgJzUgKiA0ICogMyAqIDIgKiAxJywgJzMhJ10sXG4gIHNlZWFsc286IFsnY29tYmluYXRpb25zJywgJ2NvbWJpbmF0aW9uc1dpdGhSZXAnLCAncGVybXV0YXRpb25zJywgJ2dhbW1hJ11cbn07XG5leHBvcnRzLmZhY3RvcmlhbERvY3MgPSBmYWN0b3JpYWxEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5nYW1tYURvY3MgPSB2b2lkIDA7XG52YXIgZ2FtbWFEb2NzID0ge1xuICBuYW1lOiAnZ2FtbWEnLFxuICBjYXRlZ29yeTogJ1Byb2JhYmlsaXR5JyxcbiAgc3ludGF4OiBbJ2dhbW1hKG4pJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgZ2FtbWEgZnVuY3Rpb24uIEZvciBzbWFsbCB2YWx1ZXMsIHRoZSBMYW5jem9zIGFwcHJveGltYXRpb24gaXMgdXNlZCwgYW5kIGZvciBsYXJnZSB2YWx1ZXMgdGhlIGV4dGVuZGVkIFN0aXJsaW5nIGFwcHJveGltYXRpb24uJyxcbiAgZXhhbXBsZXM6IFsnZ2FtbWEoNCknLCAnMyEnLCAnZ2FtbWEoMS8yKScsICdzcXJ0KHBpKSddLFxuICBzZWVhbHNvOiBbJ2ZhY3RvcmlhbCddXG59O1xuZXhwb3J0cy5nYW1tYURvY3MgPSBnYW1tYURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmtsZGl2ZXJnZW5jZURvY3MgPSB2b2lkIDA7XG52YXIga2xkaXZlcmdlbmNlRG9jcyA9IHtcbiAgbmFtZTogJ2tsZGl2ZXJnZW5jZScsXG4gIGNhdGVnb3J5OiAnUHJvYmFiaWxpdHknLFxuICBzeW50YXg6IFsna2xkaXZlcmdlbmNlKHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBLdWxsYmFjay1MZWlibGVyIChLTCkgZGl2ZXJnZW5jZSAgYmV0d2VlbiB0d28gZGlzdHJpYnV0aW9ucy4nLFxuICBleGFtcGxlczogWydrbGRpdmVyZ2VuY2UoWzAuNywwLjUsMC40XSwgWzAuMiwwLjksMC41XSknXSxcbiAgc2VlYWxzbzogW11cbn07XG5leHBvcnRzLmtsZGl2ZXJnZW5jZURvY3MgPSBrbGRpdmVyZ2VuY2VEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tdWx0aW5vbWlhbERvY3MgPSB2b2lkIDA7XG52YXIgbXVsdGlub21pYWxEb2NzID0ge1xuICBuYW1lOiAnbXVsdGlub21pYWwnLFxuICBjYXRlZ29yeTogJ1Byb2JhYmlsaXR5JyxcbiAgc3ludGF4OiBbJ211bHRpbm9taWFsKEEpJ10sXG4gIGRlc2NyaXB0aW9uOiAnTXVsdGlub21pYWwgQ29lZmZpY2llbnRzIGNvbXB1dGUgdGhlIG51bWJlciBvZiB3YXlzIG9mIHBpY2tpbmcgYTEsIGEyLCAuLi4sIGFpIHVub3JkZXJlZCBvdXRjb21lcyBmcm9tIGBuYCBwb3NzaWJpbGl0aWVzLiBtdWx0aW5vbWlhbCB0YWtlcyBvbmUgYXJyYXkgb2YgaW50ZWdlcnMgYXMgYW4gYXJndW1lbnQuIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIG11c3QgYmUgZW5mb3JjZWQ6IGV2ZXJ5IGFpID4gMC4nLFxuICBleGFtcGxlczogWydtdWx0aW5vbWlhbChbMSwgMiwgMV0pJ10sXG4gIHNlZWFsc286IFsnY29tYmluYXRpb25zJywgJ2ZhY3RvcmlhbCddXG59O1xuZXhwb3J0cy5tdWx0aW5vbWlhbERvY3MgPSBtdWx0aW5vbWlhbERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBlcm11dGF0aW9uc0RvY3MgPSB2b2lkIDA7XG52YXIgcGVybXV0YXRpb25zRG9jcyA9IHtcbiAgbmFtZTogJ3Blcm11dGF0aW9ucycsXG4gIGNhdGVnb3J5OiAnUHJvYmFiaWxpdHknLFxuICBzeW50YXg6IFsncGVybXV0YXRpb25zKG4pJywgJ3Blcm11dGF0aW9ucyhuLCBrKSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIG51bWJlciBvZiBwZXJtdXRhdGlvbnMgb2YgbiBpdGVtcyB0YWtlbiBrIGF0IGEgdGltZScsXG4gIGV4YW1wbGVzOiBbJ3Blcm11dGF0aW9ucyg1KScsICdwZXJtdXRhdGlvbnMoNSwgMyknXSxcbiAgc2VlYWxzbzogWydjb21iaW5hdGlvbnMnLCAnY29tYmluYXRpb25zV2l0aFJlcCcsICdmYWN0b3JpYWwnXVxufTtcbmV4cG9ydHMucGVybXV0YXRpb25zRG9jcyA9IHBlcm11dGF0aW9uc0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBpY2tSYW5kb21Eb2NzID0gdm9pZCAwO1xudmFyIHBpY2tSYW5kb21Eb2NzID0ge1xuICBuYW1lOiAncGlja1JhbmRvbScsXG4gIGNhdGVnb3J5OiAnUHJvYmFiaWxpdHknLFxuICBzeW50YXg6IFsncGlja1JhbmRvbShhcnJheSknLCAncGlja1JhbmRvbShhcnJheSwgbnVtYmVyKScsICdwaWNrUmFuZG9tKGFycmF5LCB3ZWlnaHRzKScsICdwaWNrUmFuZG9tKGFycmF5LCBudW1iZXIsIHdlaWdodHMpJywgJ3BpY2tSYW5kb20oYXJyYXksIHdlaWdodHMsIG51bWJlciknXSxcbiAgZGVzY3JpcHRpb246ICdQaWNrIGEgcmFuZG9tIGVudHJ5IGZyb20gYSBnaXZlbiBhcnJheS4nLFxuICBleGFtcGxlczogWydwaWNrUmFuZG9tKDA6MTApJywgJ3BpY2tSYW5kb20oWzEsIDMsIDEsIDZdKScsICdwaWNrUmFuZG9tKFsxLCAzLCAxLCA2XSwgMiknLCAncGlja1JhbmRvbShbMSwgMywgMSwgNl0sIFsyLCAzLCAyLCAxXSknLCAncGlja1JhbmRvbShbMSwgMywgMSwgNl0sIDIsIFsyLCAzLCAyLCAxXSknLCAncGlja1JhbmRvbShbMSwgMywgMSwgNl0sIFsyLCAzLCAyLCAxXSwgMiknXSxcbiAgc2VlYWxzbzogWydyYW5kb20nLCAncmFuZG9tSW50J11cbn07XG5leHBvcnRzLnBpY2tSYW5kb21Eb2NzID0gcGlja1JhbmRvbURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJhbmRvbURvY3MgPSB2b2lkIDA7XG52YXIgcmFuZG9tRG9jcyA9IHtcbiAgbmFtZTogJ3JhbmRvbScsXG4gIGNhdGVnb3J5OiAnUHJvYmFiaWxpdHknLFxuICBzeW50YXg6IFsncmFuZG9tKCknLCAncmFuZG9tKG1heCknLCAncmFuZG9tKG1pbiwgbWF4KScsICdyYW5kb20oc2l6ZSknLCAncmFuZG9tKHNpemUsIG1heCknLCAncmFuZG9tKHNpemUsIG1pbiwgbWF4KSddLFxuICBkZXNjcmlwdGlvbjogJ1JldHVybiBhIHJhbmRvbSBudW1iZXIuJyxcbiAgZXhhbXBsZXM6IFsncmFuZG9tKCknLCAncmFuZG9tKDEwLCAyMCknLCAncmFuZG9tKFsyLCAzXSknXSxcbiAgc2VlYWxzbzogWydwaWNrUmFuZG9tJywgJ3JhbmRvbUludCddXG59O1xuZXhwb3J0cy5yYW5kb21Eb2NzID0gcmFuZG9tRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmFuZG9tSW50RG9jcyA9IHZvaWQgMDtcbnZhciByYW5kb21JbnREb2NzID0ge1xuICBuYW1lOiAncmFuZG9tSW50JyxcbiAgY2F0ZWdvcnk6ICdQcm9iYWJpbGl0eScsXG4gIHN5bnRheDogWydyYW5kb21JbnQobWF4KScsICdyYW5kb21JbnQobWluLCBtYXgpJywgJ3JhbmRvbUludChzaXplKScsICdyYW5kb21JbnQoc2l6ZSwgbWF4KScsICdyYW5kb21JbnQoc2l6ZSwgbWluLCBtYXgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnUmV0dXJuIGEgcmFuZG9tIGludGVnZXIgbnVtYmVyJyxcbiAgZXhhbXBsZXM6IFsncmFuZG9tSW50KDEwLCAyMCknLCAncmFuZG9tSW50KFsyLCAzXSwgMTApJ10sXG4gIHNlZWFsc286IFsncGlja1JhbmRvbScsICdyYW5kb20nXVxufTtcbmV4cG9ydHMucmFuZG9tSW50RG9jcyA9IHJhbmRvbUludERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbXBhcmVEb2NzID0gdm9pZCAwO1xudmFyIGNvbXBhcmVEb2NzID0ge1xuICBuYW1lOiAnY29tcGFyZScsXG4gIGNhdGVnb3J5OiAnUmVsYXRpb25hbCcsXG4gIHN5bnRheDogWydjb21wYXJlKHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcGFyZSB0d28gdmFsdWVzLiAnICsgJ1JldHVybnMgMSB3aGVuIHggPiB5LCAtMSB3aGVuIHggPCB5LCBhbmQgMCB3aGVuIHggPT0geS4nLFxuICBleGFtcGxlczogWydjb21wYXJlKDIsIDMpJywgJ2NvbXBhcmUoMywgMiknLCAnY29tcGFyZSgyLCAyKScsICdjb21wYXJlKDVjbSwgNDBtbSknLCAnY29tcGFyZSgyLCBbMSwgMiwgM10pJ10sXG4gIHNlZWFsc286IFsnZXF1YWwnLCAndW5lcXVhbCcsICdzbWFsbGVyJywgJ3NtYWxsZXJFcScsICdsYXJnZXJFcScsICdjb21wYXJlTmF0dXJhbCcsICdjb21wYXJlVGV4dCddXG59O1xuZXhwb3J0cy5jb21wYXJlRG9jcyA9IGNvbXBhcmVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb21wYXJlTmF0dXJhbERvY3MgPSB2b2lkIDA7XG52YXIgY29tcGFyZU5hdHVyYWxEb2NzID0ge1xuICBuYW1lOiAnY29tcGFyZU5hdHVyYWwnLFxuICBjYXRlZ29yeTogJ1JlbGF0aW9uYWwnLFxuICBzeW50YXg6IFsnY29tcGFyZU5hdHVyYWwoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wYXJlIHR3byB2YWx1ZXMgb2YgYW55IHR5cGUgaW4gYSBkZXRlcm1pbmlzdGljLCBuYXR1cmFsIHdheS4gJyArICdSZXR1cm5zIDEgd2hlbiB4ID4geSwgLTEgd2hlbiB4IDwgeSwgYW5kIDAgd2hlbiB4ID09IHkuJyxcbiAgZXhhbXBsZXM6IFsnY29tcGFyZU5hdHVyYWwoMiwgMyknLCAnY29tcGFyZU5hdHVyYWwoMywgMiknLCAnY29tcGFyZU5hdHVyYWwoMiwgMiknLCAnY29tcGFyZU5hdHVyYWwoNWNtLCA0MG1tKScsICdjb21wYXJlTmF0dXJhbChcIjJcIiwgXCIxMFwiKScsICdjb21wYXJlTmF0dXJhbCgyICsgM2ksIDIgKyA0aSknLCAnY29tcGFyZU5hdHVyYWwoWzEsIDIsIDRdLCBbMSwgMiwgM10pJywgJ2NvbXBhcmVOYXR1cmFsKFsxLCA1XSwgWzEsIDIsIDNdKScsICdjb21wYXJlTmF0dXJhbChbMSwgMl0sIFsxLCAyXSknLCAnY29tcGFyZU5hdHVyYWwoe2E6IDJ9LCB7YTogNH0pJ10sXG4gIHNlZWFsc286IFsnZXF1YWwnLCAndW5lcXVhbCcsICdzbWFsbGVyJywgJ3NtYWxsZXJFcScsICdsYXJnZXJFcScsICdjb21wYXJlJywgJ2NvbXBhcmVUZXh0J11cbn07XG5leHBvcnRzLmNvbXBhcmVOYXR1cmFsRG9jcyA9IGNvbXBhcmVOYXR1cmFsRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tcGFyZVRleHREb2NzID0gdm9pZCAwO1xudmFyIGNvbXBhcmVUZXh0RG9jcyA9IHtcbiAgbmFtZTogJ2NvbXBhcmVUZXh0JyxcbiAgY2F0ZWdvcnk6ICdSZWxhdGlvbmFsJyxcbiAgc3ludGF4OiBbJ2NvbXBhcmVUZXh0KHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcGFyZSB0d28gc3RyaW5ncyBsZXhpY2FsbHkuIENvbXBhcmlzb24gaXMgY2FzZSBzZW5zaXRpdmUuICcgKyAnUmV0dXJucyAxIHdoZW4geCA+IHksIC0xIHdoZW4geCA8IHksIGFuZCAwIHdoZW4geCA9PSB5LicsXG4gIGV4YW1wbGVzOiBbJ2NvbXBhcmVUZXh0KFwiQlwiLCBcIkFcIiknLCAnY29tcGFyZVRleHQoXCJBXCIsIFwiQlwiKScsICdjb21wYXJlVGV4dChcIkFcIiwgXCJBXCIpJywgJ2NvbXBhcmVUZXh0KFwiMlwiLCBcIjEwXCIpJywgJ2NvbXBhcmUoXCIyXCIsIFwiMTBcIiknLCAnY29tcGFyZSgyLCAxMCknLCAnY29tcGFyZU5hdHVyYWwoXCIyXCIsIFwiMTBcIiknLCAnY29tcGFyZVRleHQoXCJCXCIsIFtcIkFcIiwgXCJCXCIsIFwiQ1wiXSknXSxcbiAgc2VlYWxzbzogWydjb21wYXJlJywgJ2NvbXBhcmVOYXR1cmFsJ11cbn07XG5leHBvcnRzLmNvbXBhcmVUZXh0RG9jcyA9IGNvbXBhcmVUZXh0RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVlcEVxdWFsRG9jcyA9IHZvaWQgMDtcbnZhciBkZWVwRXF1YWxEb2NzID0ge1xuICBuYW1lOiAnZGVlcEVxdWFsJyxcbiAgY2F0ZWdvcnk6ICdSZWxhdGlvbmFsJyxcbiAgc3ludGF4OiBbJ2RlZXBFcXVhbCh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0NoZWNrIGVxdWFsaXR5IG9mIHR3byBtYXRyaWNlcyBlbGVtZW50IHdpc2UuIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2l6ZSBvZiBib3RoIG1hdHJpY2VzIGlzIGVxdWFsIGFuZCB3aGVuIGFuZCBlYWNoIG9mIHRoZSBlbGVtZW50cyBhcmUgZXF1YWwuJyxcbiAgZXhhbXBsZXM6IFsnZGVlcEVxdWFsKFsxLDMsNF0sIFsxLDMsNF0pJywgJ2RlZXBFcXVhbChbMSwzLDRdLCBbMSwzXSknXSxcbiAgc2VlYWxzbzogWydlcXVhbCcsICd1bmVxdWFsJywgJ3NtYWxsZXInLCAnbGFyZ2VyJywgJ3NtYWxsZXJFcScsICdsYXJnZXJFcScsICdjb21wYXJlJ11cbn07XG5leHBvcnRzLmRlZXBFcXVhbERvY3MgPSBkZWVwRXF1YWxEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lcXVhbERvY3MgPSB2b2lkIDA7XG52YXIgZXF1YWxEb2NzID0ge1xuICBuYW1lOiAnZXF1YWwnLFxuICBjYXRlZ29yeTogJ1JlbGF0aW9uYWwnLFxuICBzeW50YXg6IFsneCA9PSB5JywgJ2VxdWFsKHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2hlY2sgZXF1YWxpdHkgb2YgdHdvIHZhbHVlcy4gUmV0dXJucyB0cnVlIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWFsLCBhbmQgZmFsc2UgaWYgbm90LicsXG4gIGV4YW1wbGVzOiBbJzIrMiA9PSAzJywgJzIrMiA9PSA0JywgJ2EgPSAzLjInLCAnYiA9IDYtMi44JywgJ2EgPT0gYicsICc1MGNtID09IDAuNW0nXSxcbiAgc2VlYWxzbzogWyd1bmVxdWFsJywgJ3NtYWxsZXInLCAnbGFyZ2VyJywgJ3NtYWxsZXJFcScsICdsYXJnZXJFcScsICdjb21wYXJlJywgJ2RlZXBFcXVhbCcsICdlcXVhbFRleHQnXVxufTtcbmV4cG9ydHMuZXF1YWxEb2NzID0gZXF1YWxEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lcXVhbFRleHREb2NzID0gdm9pZCAwO1xudmFyIGVxdWFsVGV4dERvY3MgPSB7XG4gIG5hbWU6ICdlcXVhbFRleHQnLFxuICBjYXRlZ29yeTogJ1JlbGF0aW9uYWwnLFxuICBzeW50YXg6IFsnZXF1YWxUZXh0KHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2hlY2sgZXF1YWxpdHkgb2YgdHdvIHN0cmluZ3MuIENvbXBhcmlzb24gaXMgY2FzZSBzZW5zaXRpdmUuIFJldHVybnMgdHJ1ZSBpZiB0aGUgdmFsdWVzIGFyZSBlcXVhbCwgYW5kIGZhbHNlIGlmIG5vdC4nLFxuICBleGFtcGxlczogWydlcXVhbFRleHQoXCJIZWxsb1wiLCBcIkhlbGxvXCIpJywgJ2VxdWFsVGV4dChcImFcIiwgXCJBXCIpJywgJ2VxdWFsKFwiMmUzXCIsIFwiMjAwMFwiKScsICdlcXVhbFRleHQoXCIyZTNcIiwgXCIyMDAwXCIpJywgJ2VxdWFsVGV4dChcIkJcIiwgW1wiQVwiLCBcIkJcIiwgXCJDXCJdKSddLFxuICBzZWVhbHNvOiBbJ2NvbXBhcmUnLCAnY29tcGFyZU5hdHVyYWwnLCAnY29tcGFyZVRleHQnLCAnZXF1YWwnXVxufTtcbmV4cG9ydHMuZXF1YWxUZXh0RG9jcyA9IGVxdWFsVGV4dERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxhcmdlckRvY3MgPSB2b2lkIDA7XG52YXIgbGFyZ2VyRG9jcyA9IHtcbiAgbmFtZTogJ2xhcmdlcicsXG4gIGNhdGVnb3J5OiAnUmVsYXRpb25hbCcsXG4gIHN5bnRheDogWyd4ID4geScsICdsYXJnZXIoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdDaGVjayBpZiB2YWx1ZSB4IGlzIGxhcmdlciB0aGFuIHkuIFJldHVybnMgdHJ1ZSBpZiB4IGlzIGxhcmdlciB0aGFuIHksIGFuZCBmYWxzZSBpZiBub3QuJyxcbiAgZXhhbXBsZXM6IFsnMiA+IDMnLCAnNSA+IDIqMicsICdhID0gMy4zJywgJ2IgPSA2LTIuOCcsICcoYSA+IGIpJywgJyhiIDwgYSknLCAnNSBjbSA+IDIgaW5jaCddLFxuICBzZWVhbHNvOiBbJ2VxdWFsJywgJ3VuZXF1YWwnLCAnc21hbGxlcicsICdzbWFsbGVyRXEnLCAnbGFyZ2VyRXEnLCAnY29tcGFyZSddXG59O1xuZXhwb3J0cy5sYXJnZXJEb2NzID0gbGFyZ2VyRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubGFyZ2VyRXFEb2NzID0gdm9pZCAwO1xudmFyIGxhcmdlckVxRG9jcyA9IHtcbiAgbmFtZTogJ2xhcmdlckVxJyxcbiAgY2F0ZWdvcnk6ICdSZWxhdGlvbmFsJyxcbiAgc3ludGF4OiBbJ3ggPj0geScsICdsYXJnZXJFcSh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0NoZWNrIGlmIHZhbHVlIHggaXMgbGFyZ2VyIG9yIGVxdWFsIHRvIHkuIFJldHVybnMgdHJ1ZSBpZiB4IGlzIGxhcmdlciBvciBlcXVhbCB0byB5LCBhbmQgZmFsc2UgaWYgbm90LicsXG4gIGV4YW1wbGVzOiBbJzIgPj0gMSsxJywgJzIgPiAxKzEnLCAnYSA9IDMuMicsICdiID0gNi0yLjgnLCAnKGEgPj0gYiknXSxcbiAgc2VlYWxzbzogWydlcXVhbCcsICd1bmVxdWFsJywgJ3NtYWxsZXJFcScsICdzbWFsbGVyJywgJ2NvbXBhcmUnXVxufTtcbmV4cG9ydHMubGFyZ2VyRXFEb2NzID0gbGFyZ2VyRXFEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zbWFsbGVyRG9jcyA9IHZvaWQgMDtcbnZhciBzbWFsbGVyRG9jcyA9IHtcbiAgbmFtZTogJ3NtYWxsZXInLFxuICBjYXRlZ29yeTogJ1JlbGF0aW9uYWwnLFxuICBzeW50YXg6IFsneCA8IHknLCAnc21hbGxlcih4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0NoZWNrIGlmIHZhbHVlIHggaXMgc21hbGxlciB0aGFuIHZhbHVlIHkuIFJldHVybnMgdHJ1ZSBpZiB4IGlzIHNtYWxsZXIgdGhhbiB5LCBhbmQgZmFsc2UgaWYgbm90LicsXG4gIGV4YW1wbGVzOiBbJzIgPCAzJywgJzUgPCAyKjInLCAnYSA9IDMuMycsICdiID0gNi0yLjgnLCAnKGEgPCBiKScsICc1IGNtIDwgMiBpbmNoJ10sXG4gIHNlZWFsc286IFsnZXF1YWwnLCAndW5lcXVhbCcsICdsYXJnZXInLCAnc21hbGxlckVxJywgJ2xhcmdlckVxJywgJ2NvbXBhcmUnXVxufTtcbmV4cG9ydHMuc21hbGxlckRvY3MgPSBzbWFsbGVyRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc21hbGxlckVxRG9jcyA9IHZvaWQgMDtcbnZhciBzbWFsbGVyRXFEb2NzID0ge1xuICBuYW1lOiAnc21hbGxlckVxJyxcbiAgY2F0ZWdvcnk6ICdSZWxhdGlvbmFsJyxcbiAgc3ludGF4OiBbJ3ggPD0geScsICdzbWFsbGVyRXEoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdDaGVjayBpZiB2YWx1ZSB4IGlzIHNtYWxsZXIgb3IgZXF1YWwgdG8gdmFsdWUgeS4gUmV0dXJucyB0cnVlIGlmIHggaXMgc21hbGxlciB0aGFuIHksIGFuZCBmYWxzZSBpZiBub3QuJyxcbiAgZXhhbXBsZXM6IFsnMiA8PSAxKzEnLCAnMiA8IDErMScsICdhID0gMy4yJywgJ2IgPSA2LTIuOCcsICcoYSA8PSBiKSddLFxuICBzZWVhbHNvOiBbJ2VxdWFsJywgJ3VuZXF1YWwnLCAnbGFyZ2VyJywgJ3NtYWxsZXInLCAnbGFyZ2VyRXEnLCAnY29tcGFyZSddXG59O1xuZXhwb3J0cy5zbWFsbGVyRXFEb2NzID0gc21hbGxlckVxRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudW5lcXVhbERvY3MgPSB2b2lkIDA7XG52YXIgdW5lcXVhbERvY3MgPSB7XG4gIG5hbWU6ICd1bmVxdWFsJyxcbiAgY2F0ZWdvcnk6ICdSZWxhdGlvbmFsJyxcbiAgc3ludGF4OiBbJ3ggIT0geScsICd1bmVxdWFsKHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2hlY2sgdW5lcXVhbGl0eSBvZiB0d28gdmFsdWVzLiBSZXR1cm5zIHRydWUgaWYgdGhlIHZhbHVlcyBhcmUgdW5lcXVhbCwgYW5kIGZhbHNlIGlmIHRoZXkgYXJlIGVxdWFsLicsXG4gIGV4YW1wbGVzOiBbJzIrMiAhPSAzJywgJzIrMiAhPSA0JywgJ2EgPSAzLjInLCAnYiA9IDYtMi44JywgJ2EgIT0gYicsICc1MGNtICE9IDAuNW0nLCAnNSBjbSAhPSAyIGluY2gnXSxcbiAgc2VlYWxzbzogWydlcXVhbCcsICdzbWFsbGVyJywgJ2xhcmdlcicsICdzbWFsbGVyRXEnLCAnbGFyZ2VyRXEnLCAnY29tcGFyZScsICdkZWVwRXF1YWwnXVxufTtcbmV4cG9ydHMudW5lcXVhbERvY3MgPSB1bmVxdWFsRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2V0Q2FydGVzaWFuRG9jcyA9IHZvaWQgMDtcbnZhciBzZXRDYXJ0ZXNpYW5Eb2NzID0ge1xuICBuYW1lOiAnc2V0Q2FydGVzaWFuJyxcbiAgY2F0ZWdvcnk6ICdTZXQnLFxuICBzeW50YXg6IFsnc2V0Q2FydGVzaWFuKHNldDEsIHNldDIpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIHRoZSBjYXJ0ZXNpYW4gcHJvZHVjdCBvZiB0d28gKG11bHRpKXNldHMuIE11bHRpLWRpbWVuc2lvbiBhcnJheXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gc2luZ2xlLWRpbWVuc2lvbiBhcnJheXMgYmVmb3JlIHRoZSBvcGVyYXRpb24uJyxcbiAgZXhhbXBsZXM6IFsnc2V0Q2FydGVzaWFuKFsxLCAyXSwgWzMsIDRdKSddLFxuICBzZWVhbHNvOiBbJ3NldFVuaW9uJywgJ3NldEludGVyc2VjdCcsICdzZXREaWZmZXJlbmNlJywgJ3NldFBvd2Vyc2V0J11cbn07XG5leHBvcnRzLnNldENhcnRlc2lhbkRvY3MgPSBzZXRDYXJ0ZXNpYW5Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXREaWZmZXJlbmNlRG9jcyA9IHZvaWQgMDtcbnZhciBzZXREaWZmZXJlbmNlRG9jcyA9IHtcbiAgbmFtZTogJ3NldERpZmZlcmVuY2UnLFxuICBjYXRlZ29yeTogJ1NldCcsXG4gIHN5bnRheDogWydzZXREaWZmZXJlbmNlKHNldDEsIHNldDIpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIHRoZSBkaWZmZXJlbmNlIG9mIHR3byAobXVsdGkpc2V0czogZXZlcnkgZWxlbWVudCBvZiBzZXQxLCB0aGF0IGlzIG5vdCB0aGUgZWxlbWVudCBvZiBzZXQyLiBNdWx0aS1kaW1lbnNpb24gYXJyYXlzIHdpbGwgYmUgY29udmVydGVkIHRvIHNpbmdsZS1kaW1lbnNpb24gYXJyYXlzIGJlZm9yZSB0aGUgb3BlcmF0aW9uLicsXG4gIGV4YW1wbGVzOiBbJ3NldERpZmZlcmVuY2UoWzEsIDIsIDMsIDRdLCBbMywgNCwgNSwgNl0pJywgJ3NldERpZmZlcmVuY2UoW1sxLCAyXSwgWzMsIDRdXSwgW1szLCA0XSwgWzUsIDZdXSknXSxcbiAgc2VlYWxzbzogWydzZXRVbmlvbicsICdzZXRJbnRlcnNlY3QnLCAnc2V0U3ltRGlmZmVyZW5jZSddXG59O1xuZXhwb3J0cy5zZXREaWZmZXJlbmNlRG9jcyA9IHNldERpZmZlcmVuY2VEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXREaXN0aW5jdERvY3MgPSB2b2lkIDA7XG52YXIgc2V0RGlzdGluY3REb2NzID0ge1xuICBuYW1lOiAnc2V0RGlzdGluY3QnLFxuICBjYXRlZ29yeTogJ1NldCcsXG4gIHN5bnRheDogWydzZXREaXN0aW5jdChzZXQpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29sbGVjdCB0aGUgZGlzdGluY3QgZWxlbWVudHMgb2YgYSBtdWx0aXNldC4gQSBtdWx0aS1kaW1lbnNpb24gYXJyYXkgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBzaW5nbGUtZGltZW5zaW9uIGFycmF5IGJlZm9yZSB0aGUgb3BlcmF0aW9uLicsXG4gIGV4YW1wbGVzOiBbJ3NldERpc3RpbmN0KFsxLCAxLCAxLCAyLCAyLCAzXSknXSxcbiAgc2VlYWxzbzogWydzZXRNdWx0aXBsaWNpdHknXVxufTtcbmV4cG9ydHMuc2V0RGlzdGluY3REb2NzID0gc2V0RGlzdGluY3REb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXRJbnRlcnNlY3REb2NzID0gdm9pZCAwO1xudmFyIHNldEludGVyc2VjdERvY3MgPSB7XG4gIG5hbWU6ICdzZXRJbnRlcnNlY3QnLFxuICBjYXRlZ29yeTogJ1NldCcsXG4gIHN5bnRheDogWydzZXRJbnRlcnNlY3Qoc2V0MSwgc2V0MiknXSxcbiAgZGVzY3JpcHRpb246ICdDcmVhdGUgdGhlIGludGVyc2VjdGlvbiBvZiB0d28gKG11bHRpKXNldHMuIE11bHRpLWRpbWVuc2lvbiBhcnJheXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gc2luZ2xlLWRpbWVuc2lvbiBhcnJheXMgYmVmb3JlIHRoZSBvcGVyYXRpb24uJyxcbiAgZXhhbXBsZXM6IFsnc2V0SW50ZXJzZWN0KFsxLCAyLCAzLCA0XSwgWzMsIDQsIDUsIDZdKScsICdzZXRJbnRlcnNlY3QoW1sxLCAyXSwgWzMsIDRdXSwgW1szLCA0XSwgWzUsIDZdXSknXSxcbiAgc2VlYWxzbzogWydzZXRVbmlvbicsICdzZXREaWZmZXJlbmNlJ11cbn07XG5leHBvcnRzLnNldEludGVyc2VjdERvY3MgPSBzZXRJbnRlcnNlY3REb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXRJc1N1YnNldERvY3MgPSB2b2lkIDA7XG52YXIgc2V0SXNTdWJzZXREb2NzID0ge1xuICBuYW1lOiAnc2V0SXNTdWJzZXQnLFxuICBjYXRlZ29yeTogJ1NldCcsXG4gIHN5bnRheDogWydzZXRJc1N1YnNldChzZXQxLCBzZXQyKSddLFxuICBkZXNjcmlwdGlvbjogJ0NoZWNrIHdoZXRoZXIgYSAobXVsdGkpc2V0IGlzIGEgc3Vic2V0IG9mIGFub3RoZXIgKG11bHRpKXNldDogZXZlcnkgZWxlbWVudCBvZiBzZXQxIGlzIHRoZSBlbGVtZW50IG9mIHNldDIuIE11bHRpLWRpbWVuc2lvbiBhcnJheXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gc2luZ2xlLWRpbWVuc2lvbiBhcnJheXMgYmVmb3JlIHRoZSBvcGVyYXRpb24uJyxcbiAgZXhhbXBsZXM6IFsnc2V0SXNTdWJzZXQoWzEsIDJdLCBbMywgNCwgNSwgNl0pJywgJ3NldElzU3Vic2V0KFszLCA0XSwgWzMsIDQsIDUsIDZdKSddLFxuICBzZWVhbHNvOiBbJ3NldFVuaW9uJywgJ3NldEludGVyc2VjdCcsICdzZXREaWZmZXJlbmNlJ11cbn07XG5leHBvcnRzLnNldElzU3Vic2V0RG9jcyA9IHNldElzU3Vic2V0RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2V0TXVsdGlwbGljaXR5RG9jcyA9IHZvaWQgMDtcbnZhciBzZXRNdWx0aXBsaWNpdHlEb2NzID0ge1xuICBuYW1lOiAnc2V0TXVsdGlwbGljaXR5JyxcbiAgY2F0ZWdvcnk6ICdTZXQnLFxuICBzeW50YXg6IFsnc2V0TXVsdGlwbGljaXR5KGVsZW1lbnQsIHNldCknXSxcbiAgZGVzY3JpcHRpb246ICdDb3VudCB0aGUgbXVsdGlwbGljaXR5IG9mIGFuIGVsZW1lbnQgaW4gYSBtdWx0aXNldC4gQSBtdWx0aS1kaW1lbnNpb24gYXJyYXkgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBzaW5nbGUtZGltZW5zaW9uIGFycmF5IGJlZm9yZSB0aGUgb3BlcmF0aW9uLicsXG4gIGV4YW1wbGVzOiBbJ3NldE11bHRpcGxpY2l0eSgxLCBbMSwgMiwgMiwgNF0pJywgJ3NldE11bHRpcGxpY2l0eSgyLCBbMSwgMiwgMiwgNF0pJ10sXG4gIHNlZWFsc286IFsnc2V0RGlzdGluY3QnLCAnc2V0U2l6ZSddXG59O1xuZXhwb3J0cy5zZXRNdWx0aXBsaWNpdHlEb2NzID0gc2V0TXVsdGlwbGljaXR5RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2V0UG93ZXJzZXREb2NzID0gdm9pZCAwO1xudmFyIHNldFBvd2Vyc2V0RG9jcyA9IHtcbiAgbmFtZTogJ3NldFBvd2Vyc2V0JyxcbiAgY2F0ZWdvcnk6ICdTZXQnLFxuICBzeW50YXg6IFsnc2V0UG93ZXJzZXQoc2V0KSddLFxuICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSB0aGUgcG93ZXJzZXQgb2YgYSAobXVsdGkpc2V0OiB0aGUgcG93ZXJzZXQgY29udGFpbnMgdmVyeSBwb3NzaWJsZSBzdWJzZXRzIG9mIGEgKG11bHRpKXNldC4gQSBtdWx0aS1kaW1lbnNpb24gYXJyYXkgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBzaW5nbGUtZGltZW5zaW9uIGFycmF5IGJlZm9yZSB0aGUgb3BlcmF0aW9uLicsXG4gIGV4YW1wbGVzOiBbJ3NldFBvd2Vyc2V0KFsxLCAyLCAzXSknXSxcbiAgc2VlYWxzbzogWydzZXRDYXJ0ZXNpYW4nXVxufTtcbmV4cG9ydHMuc2V0UG93ZXJzZXREb2NzID0gc2V0UG93ZXJzZXREb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXRTaXplRG9jcyA9IHZvaWQgMDtcbnZhciBzZXRTaXplRG9jcyA9IHtcbiAgbmFtZTogJ3NldFNpemUnLFxuICBjYXRlZ29yeTogJ1NldCcsXG4gIHN5bnRheDogWydzZXRTaXplKHNldCknLCAnc2V0U2l6ZShzZXQsIHVuaXF1ZSknXSxcbiAgZGVzY3JpcHRpb246ICdDb3VudCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIG9mIGEgKG11bHRpKXNldC4gV2hlbiB0aGUgc2Vjb25kIHBhcmFtZXRlciBcInVuaXF1ZVwiIGlzIHRydWUsIGNvdW50IG9ubHkgdGhlIHVuaXF1ZSB2YWx1ZXMuIEEgbXVsdGktZGltZW5zaW9uIGFycmF5IHdpbGwgYmUgY29udmVydGVkIHRvIGEgc2luZ2xlLWRpbWVuc2lvbiBhcnJheSBiZWZvcmUgdGhlIG9wZXJhdGlvbi4nLFxuICBleGFtcGxlczogWydzZXRTaXplKFsxLCAyLCAyLCA0XSknLCAnc2V0U2l6ZShbMSwgMiwgMiwgNF0sIHRydWUpJ10sXG4gIHNlZWFsc286IFsnc2V0VW5pb24nLCAnc2V0SW50ZXJzZWN0JywgJ3NldERpZmZlcmVuY2UnXVxufTtcbmV4cG9ydHMuc2V0U2l6ZURvY3MgPSBzZXRTaXplRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2V0U3ltRGlmZmVyZW5jZURvY3MgPSB2b2lkIDA7XG52YXIgc2V0U3ltRGlmZmVyZW5jZURvY3MgPSB7XG4gIG5hbWU6ICdzZXRTeW1EaWZmZXJlbmNlJyxcbiAgY2F0ZWdvcnk6ICdTZXQnLFxuICBzeW50YXg6IFsnc2V0U3ltRGlmZmVyZW5jZShzZXQxLCBzZXQyKSddLFxuICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSB0aGUgc3ltbWV0cmljIGRpZmZlcmVuY2Ugb2YgdHdvIChtdWx0aSlzZXRzLiBNdWx0aS1kaW1lbnNpb24gYXJyYXlzIHdpbGwgYmUgY29udmVydGVkIHRvIHNpbmdsZS1kaW1lbnNpb24gYXJyYXlzIGJlZm9yZSB0aGUgb3BlcmF0aW9uLicsXG4gIGV4YW1wbGVzOiBbJ3NldFN5bURpZmZlcmVuY2UoWzEsIDIsIDMsIDRdLCBbMywgNCwgNSwgNl0pJywgJ3NldFN5bURpZmZlcmVuY2UoW1sxLCAyXSwgWzMsIDRdXSwgW1szLCA0XSwgWzUsIDZdXSknXSxcbiAgc2VlYWxzbzogWydzZXRVbmlvbicsICdzZXRJbnRlcnNlY3QnLCAnc2V0RGlmZmVyZW5jZSddXG59O1xuZXhwb3J0cy5zZXRTeW1EaWZmZXJlbmNlRG9jcyA9IHNldFN5bURpZmZlcmVuY2VEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXRVbmlvbkRvY3MgPSB2b2lkIDA7XG52YXIgc2V0VW5pb25Eb2NzID0ge1xuICBuYW1lOiAnc2V0VW5pb24nLFxuICBjYXRlZ29yeTogJ1NldCcsXG4gIHN5bnRheDogWydzZXRVbmlvbihzZXQxLCBzZXQyKSddLFxuICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSB0aGUgdW5pb24gb2YgdHdvIChtdWx0aSlzZXRzLiBNdWx0aS1kaW1lbnNpb24gYXJyYXlzIHdpbGwgYmUgY29udmVydGVkIHRvIHNpbmdsZS1kaW1lbnNpb24gYXJyYXlzIGJlZm9yZSB0aGUgb3BlcmF0aW9uLicsXG4gIGV4YW1wbGVzOiBbJ3NldFVuaW9uKFsxLCAyLCAzLCA0XSwgWzMsIDQsIDUsIDZdKScsICdzZXRVbmlvbihbWzEsIDJdLCBbMywgNF1dLCBbWzMsIDRdLCBbNSwgNl1dKSddLFxuICBzZWVhbHNvOiBbJ3NldEludGVyc2VjdCcsICdzZXREaWZmZXJlbmNlJ11cbn07XG5leHBvcnRzLnNldFVuaW9uRG9jcyA9IHNldFVuaW9uRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZXJmRG9jcyA9IHZvaWQgMDtcbnZhciBlcmZEb2NzID0ge1xuICBuYW1lOiAnZXJmJyxcbiAgY2F0ZWdvcnk6ICdTcGVjaWFsJyxcbiAgc3ludGF4OiBbJ2VyZih4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGVyZiBmdW5jdGlvbiBvZiBhIHZhbHVlIHVzaW5nIGEgcmF0aW9uYWwgQ2hlYnlzaGV2IGFwcHJveGltYXRpb25zIGZvciBkaWZmZXJlbnQgaW50ZXJ2YWxzIG9mIHgnLFxuICBleGFtcGxlczogWydlcmYoMC4yKScsICdlcmYoLTAuNSknLCAnZXJmKDQpJ10sXG4gIHNlZWFsc286IFtdXG59O1xuZXhwb3J0cy5lcmZEb2NzID0gZXJmRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWFkRG9jcyA9IHZvaWQgMDtcbnZhciBtYWREb2NzID0ge1xuICBuYW1lOiAnbWFkJyxcbiAgY2F0ZWdvcnk6ICdTdGF0aXN0aWNzJyxcbiAgc3ludGF4OiBbJ21hZChhLCBiLCBjLCAuLi4pJywgJ21hZChBKSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIG1lZGlhbiBhYnNvbHV0ZSBkZXZpYXRpb24gb2YgYSBtYXRyaXggb3IgYSBsaXN0IHdpdGggdmFsdWVzLiBUaGUgbWVkaWFuIGFic29sdXRlIGRldmlhdGlvbiBpcyBkZWZpbmVkIGFzIHRoZSBtZWRpYW4gb2YgdGhlIGFic29sdXRlIGRldmlhdGlvbnMgZnJvbSB0aGUgbWVkaWFuLicsXG4gIGV4YW1wbGVzOiBbJ21hZCgxMCwgMjAsIDMwKScsICdtYWQoWzEsIDIsIDNdKSddLFxuICBzZWVhbHNvOiBbJ21lYW4nLCAnbWVkaWFuJywgJ3N0ZCcsICdhYnMnXVxufTtcbmV4cG9ydHMubWFkRG9jcyA9IG1hZERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1heERvY3MgPSB2b2lkIDA7XG52YXIgbWF4RG9jcyA9IHtcbiAgbmFtZTogJ21heCcsXG4gIGNhdGVnb3J5OiAnU3RhdGlzdGljcycsXG4gIHN5bnRheDogWydtYXgoYSwgYiwgYywgLi4uKScsICdtYXgoQSknLCAnbWF4KEEsIGRpbSknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBtYXhpbXVtIHZhbHVlIG9mIGEgbGlzdCBvZiB2YWx1ZXMuJyxcbiAgZXhhbXBsZXM6IFsnbWF4KDIsIDMsIDQsIDEpJywgJ21heChbMiwgMywgNCwgMV0pJywgJ21heChbMiwgNTsgNCwgM10pJywgJ21heChbMiwgNTsgNCwgM10sIDEpJywgJ21heChbMiwgNTsgNCwgM10sIDIpJywgJ21heCgyLjcsIDcuMSwgLTQuNSwgMi4wLCA0LjEpJywgJ21pbigyLjcsIDcuMSwgLTQuNSwgMi4wLCA0LjEpJ10sXG4gIHNlZWFsc286IFsnbWVhbicsICdtZWRpYW4nLCAnbWluJywgJ3Byb2QnLCAnc3RkJywgJ3N1bScsICd2YXJpYW5jZSddXG59O1xuZXhwb3J0cy5tYXhEb2NzID0gbWF4RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWVhbkRvY3MgPSB2b2lkIDA7XG52YXIgbWVhbkRvY3MgPSB7XG4gIG5hbWU6ICdtZWFuJyxcbiAgY2F0ZWdvcnk6ICdTdGF0aXN0aWNzJyxcbiAgc3ludGF4OiBbJ21lYW4oYSwgYiwgYywgLi4uKScsICdtZWFuKEEpJywgJ21lYW4oQSwgZGltKSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGFyaXRobWV0aWMgbWVhbiBvZiBhIGxpc3Qgb2YgdmFsdWVzLicsXG4gIGV4YW1wbGVzOiBbJ21lYW4oMiwgMywgNCwgMSknLCAnbWVhbihbMiwgMywgNCwgMV0pJywgJ21lYW4oWzIsIDU7IDQsIDNdKScsICdtZWFuKFsyLCA1OyA0LCAzXSwgMSknLCAnbWVhbihbMiwgNTsgNCwgM10sIDIpJywgJ21lYW4oWzEuMCwgMi43LCAzLjIsIDQuMF0pJ10sXG4gIHNlZWFsc286IFsnbWF4JywgJ21lZGlhbicsICdtaW4nLCAncHJvZCcsICdzdGQnLCAnc3VtJywgJ3ZhcmlhbmNlJ11cbn07XG5leHBvcnRzLm1lYW5Eb2NzID0gbWVhbkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1lZGlhbkRvY3MgPSB2b2lkIDA7XG52YXIgbWVkaWFuRG9jcyA9IHtcbiAgbmFtZTogJ21lZGlhbicsXG4gIGNhdGVnb3J5OiAnU3RhdGlzdGljcycsXG4gIHN5bnRheDogWydtZWRpYW4oYSwgYiwgYywgLi4uKScsICdtZWRpYW4oQSknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBtZWRpYW4gb2YgYWxsIHZhbHVlcy4gVGhlIHZhbHVlcyBhcmUgc29ydGVkIGFuZCB0aGUgbWlkZGxlIHZhbHVlIGlzIHJldHVybmVkLiBJbiBjYXNlIG9mIGFuIGV2ZW4gbnVtYmVyIG9mIHZhbHVlcywgdGhlIGF2ZXJhZ2Ugb2YgdGhlIHR3byBtaWRkbGUgdmFsdWVzIGlzIHJldHVybmVkLicsXG4gIGV4YW1wbGVzOiBbJ21lZGlhbig1LCAyLCA3KScsICdtZWRpYW4oWzMsIC0xLCA1LCA3XSknXSxcbiAgc2VlYWxzbzogWydtYXgnLCAnbWVhbicsICdtaW4nLCAncHJvZCcsICdzdGQnLCAnc3VtJywgJ3ZhcmlhbmNlJywgJ3F1YW50aWxlU2VxJ11cbn07XG5leHBvcnRzLm1lZGlhbkRvY3MgPSBtZWRpYW5Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5taW5Eb2NzID0gdm9pZCAwO1xudmFyIG1pbkRvY3MgPSB7XG4gIG5hbWU6ICdtaW4nLFxuICBjYXRlZ29yeTogJ1N0YXRpc3RpY3MnLFxuICBzeW50YXg6IFsnbWluKGEsIGIsIGMsIC4uLiknLCAnbWluKEEpJywgJ21pbihBLCBkaW0pJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgbWluaW11bSB2YWx1ZSBvZiBhIGxpc3Qgb2YgdmFsdWVzLicsXG4gIGV4YW1wbGVzOiBbJ21pbigyLCAzLCA0LCAxKScsICdtaW4oWzIsIDMsIDQsIDFdKScsICdtaW4oWzIsIDU7IDQsIDNdKScsICdtaW4oWzIsIDU7IDQsIDNdLCAxKScsICdtaW4oWzIsIDU7IDQsIDNdLCAyKScsICdtaW4oMi43LCA3LjEsIC00LjUsIDIuMCwgNC4xKScsICdtYXgoMi43LCA3LjEsIC00LjUsIDIuMCwgNC4xKSddLFxuICBzZWVhbHNvOiBbJ21heCcsICdtZWFuJywgJ21lZGlhbicsICdwcm9kJywgJ3N0ZCcsICdzdW0nLCAndmFyaWFuY2UnXVxufTtcbmV4cG9ydHMubWluRG9jcyA9IG1pbkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1vZGVEb2NzID0gdm9pZCAwO1xudmFyIG1vZGVEb2NzID0ge1xuICBuYW1lOiAnbW9kZScsXG4gIGNhdGVnb3J5OiAnU3RhdGlzdGljcycsXG4gIHN5bnRheDogWydtb2RlKGEsIGIsIGMsIC4uLiknLCAnbW9kZShBKScsICdtb2RlKEEsIGEsIGIsIEIsIGMsIC4uLiknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlcyB0aGUgbW9kZSBvZiBhbGwgdmFsdWVzIGFzIGFuIGFycmF5LiBJbiBjYXNlIG1vZGUgYmVpbmcgbW9yZSB0aGFuIG9uZSwgbXVsdGlwbGUgdmFsdWVzIGFyZSByZXR1cm5lZCBpbiBhbiBhcnJheS4nLFxuICBleGFtcGxlczogWydtb2RlKDIsIDEsIDQsIDMsIDEpJywgJ21vZGUoWzEsIDIuNywgMy4yLCA0LCAyLjddKScsICdtb2RlKDEsIDQsIDYsIDEsIDYpJ10sXG4gIHNlZWFsc286IFsnbWF4JywgJ21lYW4nLCAnbWluJywgJ21lZGlhbicsICdwcm9kJywgJ3N0ZCcsICdzdW0nLCAndmFyaWFuY2UnXVxufTtcbmV4cG9ydHMubW9kZURvY3MgPSBtb2RlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucHJvZERvY3MgPSB2b2lkIDA7XG52YXIgcHJvZERvY3MgPSB7XG4gIG5hbWU6ICdwcm9kJyxcbiAgY2F0ZWdvcnk6ICdTdGF0aXN0aWNzJyxcbiAgc3ludGF4OiBbJ3Byb2QoYSwgYiwgYywgLi4uKScsICdwcm9kKEEpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgcHJvZHVjdCBvZiBhbGwgdmFsdWVzLicsXG4gIGV4YW1wbGVzOiBbJ3Byb2QoMiwgMywgNCknLCAncHJvZChbMiwgMywgNF0pJywgJ3Byb2QoWzIsIDU7IDQsIDNdKSddLFxuICBzZWVhbHNvOiBbJ21heCcsICdtZWFuJywgJ21pbicsICdtZWRpYW4nLCAnbWluJywgJ3N0ZCcsICdzdW0nLCAndmFyaWFuY2UnXVxufTtcbmV4cG9ydHMucHJvZERvY3MgPSBwcm9kRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucXVhbnRpbGVTZXFEb2NzID0gdm9pZCAwO1xudmFyIHF1YW50aWxlU2VxRG9jcyA9IHtcbiAgbmFtZTogJ3F1YW50aWxlU2VxJyxcbiAgY2F0ZWdvcnk6ICdTdGF0aXN0aWNzJyxcbiAgc3ludGF4OiBbJ3F1YW50aWxlU2VxKEEsIHByb2JbLCBzb3J0ZWRdKScsICdxdWFudGlsZVNlcShBLCBbcHJvYjEsIHByb2IyLCAuLi5dWywgc29ydGVkXSknLCAncXVhbnRpbGVTZXEoQSwgTlssIHNvcnRlZF0pJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgcHJvYiBvcmRlciBxdWFudGlsZSBvZiBhIG1hdHJpeCBvciBhIGxpc3Qgd2l0aCB2YWx1ZXMuIFRoZSBzZXF1ZW5jZSBpcyBzb3J0ZWQgYW5kIHRoZSBtaWRkbGUgdmFsdWUgaXMgcmV0dXJuZWQuIFN1cHBvcnRlZCB0eXBlcyBvZiBzZXF1ZW5jZSB2YWx1ZXMgYXJlOiBOdW1iZXIsIEJpZ051bWJlciwgVW5pdCBTdXBwb3J0ZWQgdHlwZXMgb2YgcHJvYmFibGl0eSBhcmU6IE51bWJlciwgQmlnTnVtYmVyLiBcXG5cXG5JbiBjYXNlIG9mIGEgKG11bHRpIGRpbWVuc2lvbmFsKSBhcnJheSBvciBtYXRyaXgsIHRoZSBwcm9iIG9yZGVyIHF1YW50aWxlIG9mIGFsbCBlbGVtZW50cyB3aWxsIGJlIGNhbGN1bGF0ZWQuJyxcbiAgZXhhbXBsZXM6IFsncXVhbnRpbGVTZXEoWzMsIC0xLCA1LCA3XSwgMC41KScsICdxdWFudGlsZVNlcShbMywgLTEsIDUsIDddLCBbMS8zLCAyLzNdKScsICdxdWFudGlsZVNlcShbMywgLTEsIDUsIDddLCAyKScsICdxdWFudGlsZVNlcShbLTEsIDMsIDUsIDddLCAwLjUsIHRydWUpJ10sXG4gIHNlZWFsc286IFsnbWVhbicsICdtZWRpYW4nLCAnbWluJywgJ21heCcsICdwcm9kJywgJ3N0ZCcsICdzdW0nLCAndmFyaWFuY2UnXVxufTtcbmV4cG9ydHMucXVhbnRpbGVTZXFEb2NzID0gcXVhbnRpbGVTZXFEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zdGREb2NzID0gdm9pZCAwO1xudmFyIHN0ZERvY3MgPSB7XG4gIG5hbWU6ICdzdGQnLFxuICBjYXRlZ29yeTogJ1N0YXRpc3RpY3MnLFxuICBzeW50YXg6IFsnc3RkKGEsIGIsIGMsIC4uLiknLCAnc3RkKEEpJywgJ3N0ZChBLCBub3JtYWxpemF0aW9uKSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIHN0YW5kYXJkIGRldmlhdGlvbiBvZiBhbGwgdmFsdWVzLCBkZWZpbmVkIGFzIHN0ZChBKSA9IHNxcnQodmFyaWFuY2UoQSkpLiBPcHRpb25hbCBwYXJhbWV0ZXIgbm9ybWFsaXphdGlvbiBjYW4gYmUgXCJ1bmJpYXNlZFwiIChkZWZhdWx0KSwgXCJ1bmNvcnJlY3RlZFwiLCBvciBcImJpYXNlZFwiLicsXG4gIGV4YW1wbGVzOiBbJ3N0ZCgyLCA0LCA2KScsICdzdGQoWzIsIDQsIDYsIDhdKScsICdzdGQoWzIsIDQsIDYsIDhdLCBcInVuY29ycmVjdGVkXCIpJywgJ3N0ZChbMiwgNCwgNiwgOF0sIFwiYmlhc2VkXCIpJywgJ3N0ZChbMSwgMiwgMzsgNCwgNSwgNl0pJ10sXG4gIHNlZWFsc286IFsnbWF4JywgJ21lYW4nLCAnbWluJywgJ21lZGlhbicsICdwcm9kJywgJ3N1bScsICd2YXJpYW5jZSddXG59O1xuZXhwb3J0cy5zdGREb2NzID0gc3RkRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3VtRG9jcyA9IHZvaWQgMDtcbnZhciBzdW1Eb2NzID0ge1xuICBuYW1lOiAnc3VtJyxcbiAgY2F0ZWdvcnk6ICdTdGF0aXN0aWNzJyxcbiAgc3ludGF4OiBbJ3N1bShhLCBiLCBjLCAuLi4pJywgJ3N1bShBKSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIHN1bSBvZiBhbGwgdmFsdWVzLicsXG4gIGV4YW1wbGVzOiBbJ3N1bSgyLCAzLCA0LCAxKScsICdzdW0oWzIsIDMsIDQsIDFdKScsICdzdW0oWzIsIDU7IDQsIDNdKSddLFxuICBzZWVhbHNvOiBbJ21heCcsICdtZWFuJywgJ21lZGlhbicsICdtaW4nLCAncHJvZCcsICdzdGQnLCAnc3VtJywgJ3ZhcmlhbmNlJ11cbn07XG5leHBvcnRzLnN1bURvY3MgPSBzdW1Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy52YXJpYW5jZURvY3MgPSB2b2lkIDA7XG52YXIgdmFyaWFuY2VEb2NzID0ge1xuICBuYW1lOiAndmFyaWFuY2UnLFxuICBjYXRlZ29yeTogJ1N0YXRpc3RpY3MnLFxuICBzeW50YXg6IFsndmFyaWFuY2UoYSwgYiwgYywgLi4uKScsICd2YXJpYW5jZShBKScsICd2YXJpYW5jZShBLCBub3JtYWxpemF0aW9uKSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIHZhcmlhbmNlIG9mIGFsbCB2YWx1ZXMuIE9wdGlvbmFsIHBhcmFtZXRlciBub3JtYWxpemF0aW9uIGNhbiBiZSBcInVuYmlhc2VkXCIgKGRlZmF1bHQpLCBcInVuY29ycmVjdGVkXCIsIG9yIFwiYmlhc2VkXCIuJyxcbiAgZXhhbXBsZXM6IFsndmFyaWFuY2UoMiwgNCwgNiknLCAndmFyaWFuY2UoWzIsIDQsIDYsIDhdKScsICd2YXJpYW5jZShbMiwgNCwgNiwgOF0sIFwidW5jb3JyZWN0ZWRcIiknLCAndmFyaWFuY2UoWzIsIDQsIDYsIDhdLCBcImJpYXNlZFwiKScsICd2YXJpYW5jZShbMSwgMiwgMzsgNCwgNSwgNl0pJ10sXG4gIHNlZWFsc286IFsnbWF4JywgJ21lYW4nLCAnbWluJywgJ21lZGlhbicsICdtaW4nLCAncHJvZCcsICdzdGQnLCAnc3VtJ11cbn07XG5leHBvcnRzLnZhcmlhbmNlRG9jcyA9IHZhcmlhbmNlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWNvc0RvY3MgPSB2b2lkIDA7XG52YXIgYWNvc0RvY3MgPSB7XG4gIG5hbWU6ICdhY29zJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnYWNvcyh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGludmVyc2UgY29zaW5lIG9mIGEgdmFsdWUgaW4gcmFkaWFucy4nLFxuICBleGFtcGxlczogWydhY29zKDAuNSknLCAnYWNvcyhjb3MoMi4zKSknXSxcbiAgc2VlYWxzbzogWydjb3MnLCAnYXRhbicsICdhc2luJ11cbn07XG5leHBvcnRzLmFjb3NEb2NzID0gYWNvc0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFjb3NoRG9jcyA9IHZvaWQgMDtcbnZhciBhY29zaERvY3MgPSB7XG4gIG5hbWU6ICdhY29zaCcsXG4gIGNhdGVnb3J5OiAnVHJpZ29ub21ldHJ5JyxcbiAgc3ludGF4OiBbJ2Fjb3NoKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBoeXBlcmJvbGljIGFyY2NvcyBvZiBhIHZhbHVlLCBkZWZpbmVkIGFzIGBhY29zaCh4KSA9IGxuKHNxcnQoeF4yIC0gMSkgKyB4KWAuJyxcbiAgZXhhbXBsZXM6IFsnYWNvc2goMS41KSddLFxuICBzZWVhbHNvOiBbJ2Nvc2gnLCAnYXNpbmgnLCAnYXRhbmgnXVxufTtcbmV4cG9ydHMuYWNvc2hEb2NzID0gYWNvc2hEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hY290RG9jcyA9IHZvaWQgMDtcbnZhciBhY290RG9jcyA9IHtcbiAgbmFtZTogJ2Fjb3QnLFxuICBjYXRlZ29yeTogJ1RyaWdvbm9tZXRyeScsXG4gIHN5bnRheDogWydhY290KHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBpbnZlcnNlIGNvdGFuZ2VudCBvZiBhIHZhbHVlLicsXG4gIGV4YW1wbGVzOiBbJ2Fjb3QoMC41KScsICdhY290KGNvdCgwLjUpKScsICdhY290KDIpJ10sXG4gIHNlZWFsc286IFsnY290JywgJ2F0YW4nXVxufTtcbmV4cG9ydHMuYWNvdERvY3MgPSBhY290RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWNvdGhEb2NzID0gdm9pZCAwO1xudmFyIGFjb3RoRG9jcyA9IHtcbiAgbmFtZTogJ2Fjb3RoJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnYWNvdGgoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgYXJjY290YW5nZW50IG9mIGEgdmFsdWUsIGRlZmluZWQgYXMgYGFjb3RoKHgpID0gKGxuKCh4KzEpL3gpICsgbG4oeC8oeC0xKSkpIC8gMmAuJyxcbiAgZXhhbXBsZXM6IFsnYWNvdGgoMiknLCAnYWNvdGgoMC41KSddLFxuICBzZWVhbHNvOiBbJ2Fjc2NoJywgJ2FzZWNoJ11cbn07XG5leHBvcnRzLmFjb3RoRG9jcyA9IGFjb3RoRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWNzY0RvY3MgPSB2b2lkIDA7XG52YXIgYWNzY0RvY3MgPSB7XG4gIG5hbWU6ICdhY3NjJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnYWNzYyh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgaW52ZXJzZSBjb3RhbmdlbnQgb2YgYSB2YWx1ZS4nLFxuICBleGFtcGxlczogWydhY3NjKDIpJywgJ2Fjc2MoY3NjKDAuNSkpJywgJ2Fjc2MoMC41KSddLFxuICBzZWVhbHNvOiBbJ2NzYycsICdhc2luJywgJ2FzZWMnXVxufTtcbmV4cG9ydHMuYWNzY0RvY3MgPSBhY3NjRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWNzY2hEb2NzID0gdm9pZCAwO1xudmFyIGFjc2NoRG9jcyA9IHtcbiAgbmFtZTogJ2Fjc2NoJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnYWNzY2goeCknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgYXJjY29zZWNhbnQgb2YgYSB2YWx1ZSwgZGVmaW5lZCBhcyBgYWNzY2goeCkgPSBsbigxL3ggKyBzcXJ0KDEveF4yICsgMSkpYC4nLFxuICBleGFtcGxlczogWydhY3NjaCgwLjUpJ10sXG4gIHNlZWFsc286IFsnYXNlY2gnLCAnYWNvdGgnXVxufTtcbmV4cG9ydHMuYWNzY2hEb2NzID0gYWNzY2hEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hc2VjRG9jcyA9IHZvaWQgMDtcbnZhciBhc2VjRG9jcyA9IHtcbiAgbmFtZTogJ2FzZWMnLFxuICBjYXRlZ29yeTogJ1RyaWdvbm9tZXRyeScsXG4gIHN5bnRheDogWydhc2VjKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBpbnZlcnNlIHNlY2FudCBvZiBhIHZhbHVlLicsXG4gIGV4YW1wbGVzOiBbJ2FzZWMoMC41KScsICdhc2VjKHNlYygwLjUpKScsICdhc2VjKDIpJ10sXG4gIHNlZWFsc286IFsnYWNvcycsICdhY290JywgJ2Fjc2MnXVxufTtcbmV4cG9ydHMuYXNlY0RvY3MgPSBhc2VjRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYXNlY2hEb2NzID0gdm9pZCAwO1xudmFyIGFzZWNoRG9jcyA9IHtcbiAgbmFtZTogJ2FzZWNoJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnYXNlY2goeCknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIGludmVyc2Ugc2VjYW50IG9mIGEgdmFsdWUuJyxcbiAgZXhhbXBsZXM6IFsnYXNlY2goMC41KSddLFxuICBzZWVhbHNvOiBbJ2Fjc2NoJywgJ2Fjb3RoJ11cbn07XG5leHBvcnRzLmFzZWNoRG9jcyA9IGFzZWNoRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYXNpbkRvY3MgPSB2b2lkIDA7XG52YXIgYXNpbkRvY3MgPSB7XG4gIG5hbWU6ICdhc2luJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnYXNpbih4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGludmVyc2Ugc2luZSBvZiBhIHZhbHVlIGluIHJhZGlhbnMuJyxcbiAgZXhhbXBsZXM6IFsnYXNpbigwLjUpJywgJ2FzaW4oc2luKDAuNSkpJ10sXG4gIHNlZWFsc286IFsnc2luJywgJ2Fjb3MnLCAnYXRhbiddXG59O1xuZXhwb3J0cy5hc2luRG9jcyA9IGFzaW5Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hc2luaERvY3MgPSB2b2lkIDA7XG52YXIgYXNpbmhEb2NzID0ge1xuICBuYW1lOiAnYXNpbmgnLFxuICBjYXRlZ29yeTogJ1RyaWdvbm9tZXRyeScsXG4gIHN5bnRheDogWydhc2luaCh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgaHlwZXJib2xpYyBhcmNzaW5lIG9mIGEgdmFsdWUsIGRlZmluZWQgYXMgYGFzaW5oKHgpID0gbG4oeCArIHNxcnQoeF4yICsgMSkpYC4nLFxuICBleGFtcGxlczogWydhc2luaCgwLjUpJ10sXG4gIHNlZWFsc286IFsnYWNvc2gnLCAnYXRhbmgnXVxufTtcbmV4cG9ydHMuYXNpbmhEb2NzID0gYXNpbmhEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hdGFuRG9jcyA9IHZvaWQgMDtcbnZhciBhdGFuRG9jcyA9IHtcbiAgbmFtZTogJ2F0YW4nLFxuICBjYXRlZ29yeTogJ1RyaWdvbm9tZXRyeScsXG4gIHN5bnRheDogWydhdGFuKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgaW52ZXJzZSB0YW5nZW50IG9mIGEgdmFsdWUgaW4gcmFkaWFucy4nLFxuICBleGFtcGxlczogWydhdGFuKDAuNSknLCAnYXRhbih0YW4oMC41KSknXSxcbiAgc2VlYWxzbzogWyd0YW4nLCAnYWNvcycsICdhc2luJ11cbn07XG5leHBvcnRzLmF0YW5Eb2NzID0gYXRhbkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmF0YW4yRG9jcyA9IHZvaWQgMDtcbnZhciBhdGFuMkRvY3MgPSB7XG4gIG5hbWU6ICdhdGFuMicsXG4gIGNhdGVnb3J5OiAnVHJpZ29ub21ldHJ5JyxcbiAgc3ludGF4OiBbJ2F0YW4yKHksIHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZXMgdGhlIHByaW5jaXBhbCB2YWx1ZSBvZiB0aGUgYXJjIHRhbmdlbnQgb2YgeS94IGluIHJhZGlhbnMuJyxcbiAgZXhhbXBsZXM6IFsnYXRhbjIoMiwgMikgLyBwaScsICdhbmdsZSA9IDYwIGRlZyBpbiByYWQnLCAneCA9IGNvcyhhbmdsZSknLCAneSA9IHNpbihhbmdsZSknLCAnYXRhbjIoeSwgeCknXSxcbiAgc2VlYWxzbzogWydzaW4nLCAnY29zJywgJ3RhbiddXG59O1xuZXhwb3J0cy5hdGFuMkRvY3MgPSBhdGFuMkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmF0YW5oRG9jcyA9IHZvaWQgMDtcbnZhciBhdGFuaERvY3MgPSB7XG4gIG5hbWU6ICdhdGFuaCcsXG4gIGNhdGVnb3J5OiAnVHJpZ29ub21ldHJ5JyxcbiAgc3ludGF4OiBbJ2F0YW5oKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBoeXBlcmJvbGljIGFyY3RhbmdlbnQgb2YgYSB2YWx1ZSwgZGVmaW5lZCBhcyBgYXRhbmgoeCkgPSBsbigoMSArIHgpLygxIC0geCkpIC8gMmAuJyxcbiAgZXhhbXBsZXM6IFsnYXRhbmgoMC41KSddLFxuICBzZWVhbHNvOiBbJ2Fjb3NoJywgJ2FzaW5oJ11cbn07XG5leHBvcnRzLmF0YW5oRG9jcyA9IGF0YW5oRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29zRG9jcyA9IHZvaWQgMDtcbnZhciBjb3NEb2NzID0ge1xuICBuYW1lOiAnY29zJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnY29zKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgY29zaW5lIG9mIHggaW4gcmFkaWFucy4nLFxuICBleGFtcGxlczogWydjb3MoMiknLCAnY29zKHBpIC8gNCkgXiAyJywgJ2NvcygxODAgZGVnKScsICdjb3MoNjAgZGVnKScsICdzaW4oMC4yKV4yICsgY29zKDAuMileMiddLFxuICBzZWVhbHNvOiBbJ2Fjb3MnLCAnc2luJywgJ3RhbiddXG59O1xuZXhwb3J0cy5jb3NEb2NzID0gY29zRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29zaERvY3MgPSB2b2lkIDA7XG52YXIgY29zaERvY3MgPSB7XG4gIG5hbWU6ICdjb3NoJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnY29zaCh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGh5cGVyYm9saWMgY29zaW5lIG9mIHggaW4gcmFkaWFucy4nLFxuICBleGFtcGxlczogWydjb3NoKDAuNSknXSxcbiAgc2VlYWxzbzogWydzaW5oJywgJ3RhbmgnLCAnY290aCddXG59O1xuZXhwb3J0cy5jb3NoRG9jcyA9IGNvc2hEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb3REb2NzID0gdm9pZCAwO1xudmFyIGNvdERvY3MgPSB7XG4gIG5hbWU6ICdjb3QnLFxuICBjYXRlZ29yeTogJ1RyaWdvbm9tZXRyeScsXG4gIHN5bnRheDogWydjb3QoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBjb3RhbmdlbnQgb2YgeCBpbiByYWRpYW5zLiBEZWZpbmVkIGFzIDEvdGFuKHgpJyxcbiAgZXhhbXBsZXM6IFsnY290KDIpJywgJzEgLyB0YW4oMiknXSxcbiAgc2VlYWxzbzogWydzZWMnLCAnY3NjJywgJ3RhbiddXG59O1xuZXhwb3J0cy5jb3REb2NzID0gY290RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY290aERvY3MgPSB2b2lkIDA7XG52YXIgY290aERvY3MgPSB7XG4gIG5hbWU6ICdjb3RoJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnY290aCh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGh5cGVyYm9saWMgY290YW5nZW50IG9mIHggaW4gcmFkaWFucy4nLFxuICBleGFtcGxlczogWydjb3RoKDIpJywgJzEgLyB0YW5oKDIpJ10sXG4gIHNlZWFsc286IFsnc2VjaCcsICdjc2NoJywgJ3RhbmgnXVxufTtcbmV4cG9ydHMuY290aERvY3MgPSBjb3RoRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3NjRG9jcyA9IHZvaWQgMDtcbnZhciBjc2NEb2NzID0ge1xuICBuYW1lOiAnY3NjJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnY3NjKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgY29zZWNhbnQgb2YgeCBpbiByYWRpYW5zLiBEZWZpbmVkIGFzIDEvc2luKHgpJyxcbiAgZXhhbXBsZXM6IFsnY3NjKDIpJywgJzEgLyBzaW4oMiknXSxcbiAgc2VlYWxzbzogWydzZWMnLCAnY290JywgJ3NpbiddXG59O1xuZXhwb3J0cy5jc2NEb2NzID0gY3NjRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3NjaERvY3MgPSB2b2lkIDA7XG52YXIgY3NjaERvY3MgPSB7XG4gIG5hbWU6ICdjc2NoJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnY3NjaCh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGh5cGVyYm9saWMgY29zZWNhbnQgb2YgeCBpbiByYWRpYW5zLiBEZWZpbmVkIGFzIDEvc2luaCh4KScsXG4gIGV4YW1wbGVzOiBbJ2NzY2goMiknLCAnMSAvIHNpbmgoMiknXSxcbiAgc2VlYWxzbzogWydzZWNoJywgJ2NvdGgnLCAnc2luaCddXG59O1xuZXhwb3J0cy5jc2NoRG9jcyA9IGNzY2hEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZWNEb2NzID0gdm9pZCAwO1xudmFyIHNlY0RvY3MgPSB7XG4gIG5hbWU6ICdzZWMnLFxuICBjYXRlZ29yeTogJ1RyaWdvbm9tZXRyeScsXG4gIHN5bnRheDogWydzZWMoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBzZWNhbnQgb2YgeCBpbiByYWRpYW5zLiBEZWZpbmVkIGFzIDEvY29zKHgpJyxcbiAgZXhhbXBsZXM6IFsnc2VjKDIpJywgJzEgLyBjb3MoMiknXSxcbiAgc2VlYWxzbzogWydjb3QnLCAnY3NjJywgJ2NvcyddXG59O1xuZXhwb3J0cy5zZWNEb2NzID0gc2VjRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2VjaERvY3MgPSB2b2lkIDA7XG52YXIgc2VjaERvY3MgPSB7XG4gIG5hbWU6ICdzZWNoJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnc2VjaCh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGh5cGVyYm9saWMgc2VjYW50IG9mIHggaW4gcmFkaWFucy4gRGVmaW5lZCBhcyAxL2Nvc2goeCknLFxuICBleGFtcGxlczogWydzZWNoKDIpJywgJzEgLyBjb3NoKDIpJ10sXG4gIHNlZWFsc286IFsnY290aCcsICdjc2NoJywgJ2Nvc2gnXVxufTtcbmV4cG9ydHMuc2VjaERvY3MgPSBzZWNoRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2luRG9jcyA9IHZvaWQgMDtcbnZhciBzaW5Eb2NzID0ge1xuICBuYW1lOiAnc2luJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnc2luKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgc2luZSBvZiB4IGluIHJhZGlhbnMuJyxcbiAgZXhhbXBsZXM6IFsnc2luKDIpJywgJ3NpbihwaSAvIDQpIF4gMicsICdzaW4oOTAgZGVnKScsICdzaW4oMzAgZGVnKScsICdzaW4oMC4yKV4yICsgY29zKDAuMileMiddLFxuICBzZWVhbHNvOiBbJ2FzaW4nLCAnY29zJywgJ3RhbiddXG59O1xuZXhwb3J0cy5zaW5Eb2NzID0gc2luRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2luaERvY3MgPSB2b2lkIDA7XG52YXIgc2luaERvY3MgPSB7XG4gIG5hbWU6ICdzaW5oJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnc2luaCh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGh5cGVyYm9saWMgc2luZSBvZiB4IGluIHJhZGlhbnMuJyxcbiAgZXhhbXBsZXM6IFsnc2luaCgwLjUpJ10sXG4gIHNlZWFsc286IFsnY29zaCcsICd0YW5oJ11cbn07XG5leHBvcnRzLnNpbmhEb2NzID0gc2luaERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnRhbkRvY3MgPSB2b2lkIDA7XG52YXIgdGFuRG9jcyA9IHtcbiAgbmFtZTogJ3RhbicsXG4gIGNhdGVnb3J5OiAnVHJpZ29ub21ldHJ5JyxcbiAgc3ludGF4OiBbJ3Rhbih4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIHRhbmdlbnQgb2YgeCBpbiByYWRpYW5zLicsXG4gIGV4YW1wbGVzOiBbJ3RhbigwLjUpJywgJ3NpbigwLjUpIC8gY29zKDAuNSknLCAndGFuKHBpIC8gNCknLCAndGFuKDQ1IGRlZyknXSxcbiAgc2VlYWxzbzogWydhdGFuJywgJ3NpbicsICdjb3MnXVxufTtcbmV4cG9ydHMudGFuRG9jcyA9IHRhbkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnRhbmhEb2NzID0gdm9pZCAwO1xudmFyIHRhbmhEb2NzID0ge1xuICBuYW1lOiAndGFuaCcsXG4gIGNhdGVnb3J5OiAnVHJpZ29ub21ldHJ5JyxcbiAgc3ludGF4OiBbJ3RhbmgoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBoeXBlcmJvbGljIHRhbmdlbnQgb2YgeCBpbiByYWRpYW5zLicsXG4gIGV4YW1wbGVzOiBbJ3RhbmgoMC41KScsICdzaW5oKDAuNSkgLyBjb3NoKDAuNSknXSxcbiAgc2VlYWxzbzogWydzaW5oJywgJ2Nvc2gnXVxufTtcbmV4cG9ydHMudGFuaERvY3MgPSB0YW5oRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudG9Eb2NzID0gdm9pZCAwO1xudmFyIHRvRG9jcyA9IHtcbiAgbmFtZTogJ3RvJyxcbiAgY2F0ZWdvcnk6ICdVbml0cycsXG4gIHN5bnRheDogWyd4IHRvIHVuaXQnLCAndG8oeCwgdW5pdCknXSxcbiAgZGVzY3JpcHRpb246ICdDaGFuZ2UgdGhlIHVuaXQgb2YgYSB2YWx1ZS4nLFxuICBleGFtcGxlczogWyc1IGluY2ggdG8gY20nLCAnMy4ya2cgdG8gZycsICcxNiBieXRlcyBpbiBiaXRzJ10sXG4gIHNlZWFsc286IFtdXG59O1xuZXhwb3J0cy50b0RvY3MgPSB0b0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNsb25lRG9jcyA9IHZvaWQgMDtcbnZhciBjbG9uZURvY3MgPSB7XG4gIG5hbWU6ICdjbG9uZScsXG4gIGNhdGVnb3J5OiAnVXRpbHMnLFxuICBzeW50YXg6IFsnY2xvbmUoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDbG9uZSBhIHZhcmlhYmxlLiBDcmVhdGVzIGEgY29weSBvZiBwcmltaXRpdmUgdmFyaWFibGVzLGFuZCBhIGRlZXAgY29weSBvZiBtYXRyaWNlcycsXG4gIGV4YW1wbGVzOiBbJ2Nsb25lKDMuNSknLCAnY2xvbmUoMiAtIDRpKScsICdjbG9uZSg0NSBkZWcpJywgJ2Nsb25lKFsxLCAyOyAzLCA0XSknLCAnY2xvbmUoXCJoZWxsbyB3b3JsZFwiKSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMuY2xvbmVEb2NzID0gY2xvbmVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5mb3JtYXREb2NzID0gdm9pZCAwO1xudmFyIGZvcm1hdERvY3MgPSB7XG4gIG5hbWU6ICdmb3JtYXQnLFxuICBjYXRlZ29yeTogJ1V0aWxzJyxcbiAgc3ludGF4OiBbJ2Zvcm1hdCh2YWx1ZSknLCAnZm9ybWF0KHZhbHVlLCBwcmVjaXNpb24pJ10sXG4gIGRlc2NyaXB0aW9uOiAnRm9ybWF0IGEgdmFsdWUgb2YgYW55IHR5cGUgYXMgc3RyaW5nLicsXG4gIGV4YW1wbGVzOiBbJ2Zvcm1hdCgyLjMpJywgJ2Zvcm1hdCgzIC0gNGkpJywgJ2Zvcm1hdChbXSknLCAnZm9ybWF0KHBpLCAzKSddLFxuICBzZWVhbHNvOiBbJ3ByaW50J11cbn07XG5leHBvcnRzLmZvcm1hdERvY3MgPSBmb3JtYXREb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5oYXNOdW1lcmljVmFsdWVEb2NzID0gdm9pZCAwO1xudmFyIGhhc051bWVyaWNWYWx1ZURvY3MgPSB7XG4gIG5hbWU6ICdoYXNOdW1lcmljVmFsdWUnLFxuICBjYXRlZ29yeTogJ1V0aWxzJyxcbiAgc3ludGF4OiBbJ2hhc051bWVyaWNWYWx1ZSh4KSddLFxuICBkZXNjcmlwdGlvbjogJ1Rlc3Qgd2hldGhlciBhIHZhbHVlIGlzIGFuIG51bWVyaWMgdmFsdWUuICcgKyAnSW4gY2FzZSBvZiBhIHN0cmluZywgdHJ1ZSBpcyByZXR1cm5lZCBpZiB0aGUgc3RyaW5nIGNvbnRhaW5zIGEgbnVtZXJpYyB2YWx1ZS4nLFxuICBleGFtcGxlczogWydoYXNOdW1lcmljVmFsdWUoMiknLCAnaGFzTnVtZXJpY1ZhbHVlKFwiMlwiKScsICdpc051bWVyaWMoXCIyXCIpJywgJ2hhc051bWVyaWNWYWx1ZSgwKScsICdoYXNOdW1lcmljVmFsdWUoYmlnbnVtYmVyKDUwMCkpJywgJ2hhc051bWVyaWNWYWx1ZShmcmFjdGlvbigwLjEyNSkpJywgJ2hhc051bWVyaWNWYWx1ZSgyICsgM2kpJywgJ2hhc051bWVyaWNWYWx1ZShbMi4zLCBcImZvb1wiLCBmYWxzZV0pJ10sXG4gIHNlZWFsc286IFsnaXNJbnRlZ2VyJywgJ2lzWmVybycsICdpc05lZ2F0aXZlJywgJ2lzUG9zaXRpdmUnLCAnaXNOYU4nLCAnaXNOdW1lcmljJ11cbn07XG5leHBvcnRzLmhhc051bWVyaWNWYWx1ZURvY3MgPSBoYXNOdW1lcmljVmFsdWVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pc0ludGVnZXJEb2NzID0gdm9pZCAwO1xudmFyIGlzSW50ZWdlckRvY3MgPSB7XG4gIG5hbWU6ICdpc0ludGVnZXInLFxuICBjYXRlZ29yeTogJ1V0aWxzJyxcbiAgc3ludGF4OiBbJ2lzSW50ZWdlcih4KSddLFxuICBkZXNjcmlwdGlvbjogJ1Rlc3Qgd2hldGhlciBhIHZhbHVlIGlzIGFuIGludGVnZXIgbnVtYmVyLicsXG4gIGV4YW1wbGVzOiBbJ2lzSW50ZWdlcigyKScsICdpc0ludGVnZXIoMy41KScsICdpc0ludGVnZXIoWzMsIDAuNSwgLTJdKSddLFxuICBzZWVhbHNvOiBbJ2lzTmVnYXRpdmUnLCAnaXNOdW1lcmljJywgJ2lzUG9zaXRpdmUnLCAnaXNaZXJvJ11cbn07XG5leHBvcnRzLmlzSW50ZWdlckRvY3MgPSBpc0ludGVnZXJEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pc05hTkRvY3MgPSB2b2lkIDA7XG52YXIgaXNOYU5Eb2NzID0ge1xuICBuYW1lOiAnaXNOYU4nLFxuICBjYXRlZ29yeTogJ1V0aWxzJyxcbiAgc3ludGF4OiBbJ2lzTmFOKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnVGVzdCB3aGV0aGVyIGEgdmFsdWUgaXMgTmFOIChub3QgYSBudW1iZXIpJyxcbiAgZXhhbXBsZXM6IFsnaXNOYU4oMiknLCAnaXNOYU4oMCAvIDApJywgJ2lzTmFOKE5hTiknLCAnaXNOYU4oSW5maW5pdHkpJ10sXG4gIHNlZWFsc286IFsnaXNOZWdhdGl2ZScsICdpc051bWVyaWMnLCAnaXNQb3NpdGl2ZScsICdpc1plcm8nXVxufTtcbmV4cG9ydHMuaXNOYU5Eb2NzID0gaXNOYU5Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pc05lZ2F0aXZlRG9jcyA9IHZvaWQgMDtcbnZhciBpc05lZ2F0aXZlRG9jcyA9IHtcbiAgbmFtZTogJ2lzTmVnYXRpdmUnLFxuICBjYXRlZ29yeTogJ1V0aWxzJyxcbiAgc3ludGF4OiBbJ2lzTmVnYXRpdmUoeCknXSxcbiAgZGVzY3JpcHRpb246ICdUZXN0IHdoZXRoZXIgYSB2YWx1ZSBpcyBuZWdhdGl2ZTogc21hbGxlciB0aGFuIHplcm8uJyxcbiAgZXhhbXBsZXM6IFsnaXNOZWdhdGl2ZSgyKScsICdpc05lZ2F0aXZlKDApJywgJ2lzTmVnYXRpdmUoLTQpJywgJ2lzTmVnYXRpdmUoWzMsIDAuNSwgLTJdKSddLFxuICBzZWVhbHNvOiBbJ2lzSW50ZWdlcicsICdpc051bWVyaWMnLCAnaXNQb3NpdGl2ZScsICdpc1plcm8nXVxufTtcbmV4cG9ydHMuaXNOZWdhdGl2ZURvY3MgPSBpc05lZ2F0aXZlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaXNOdW1lcmljRG9jcyA9IHZvaWQgMDtcbnZhciBpc051bWVyaWNEb2NzID0ge1xuICBuYW1lOiAnaXNOdW1lcmljJyxcbiAgY2F0ZWdvcnk6ICdVdGlscycsXG4gIHN5bnRheDogWydpc051bWVyaWMoeCknXSxcbiAgZGVzY3JpcHRpb246ICdUZXN0IHdoZXRoZXIgYSB2YWx1ZSBpcyBhIG51bWVyaWMgdmFsdWUuICcgKyAnUmV0dXJucyB0cnVlIHdoZW4gdGhlIGlucHV0IGlzIGEgbnVtYmVyLCBCaWdOdW1iZXIsIEZyYWN0aW9uLCBvciBib29sZWFuLicsXG4gIGV4YW1wbGVzOiBbJ2lzTnVtZXJpYygyKScsICdpc051bWVyaWMoXCIyXCIpJywgJ2hhc051bWVyaWNWYWx1ZShcIjJcIiknLCAnaXNOdW1lcmljKDApJywgJ2lzTnVtZXJpYyhiaWdudW1iZXIoNTAwKSknLCAnaXNOdW1lcmljKGZyYWN0aW9uKDAuMTI1KSknLCAnaXNOdW1lcmljKDIgKyAzaSknLCAnaXNOdW1lcmljKFsyLjMsIFwiZm9vXCIsIGZhbHNlXSknXSxcbiAgc2VlYWxzbzogWydpc0ludGVnZXInLCAnaXNaZXJvJywgJ2lzTmVnYXRpdmUnLCAnaXNQb3NpdGl2ZScsICdpc05hTicsICdoYXNOdW1lcmljVmFsdWUnXVxufTtcbmV4cG9ydHMuaXNOdW1lcmljRG9jcyA9IGlzTnVtZXJpY0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmlzUG9zaXRpdmVEb2NzID0gdm9pZCAwO1xudmFyIGlzUG9zaXRpdmVEb2NzID0ge1xuICBuYW1lOiAnaXNQb3NpdGl2ZScsXG4gIGNhdGVnb3J5OiAnVXRpbHMnLFxuICBzeW50YXg6IFsnaXNQb3NpdGl2ZSh4KSddLFxuICBkZXNjcmlwdGlvbjogJ1Rlc3Qgd2hldGhlciBhIHZhbHVlIGlzIHBvc2l0aXZlOiBsYXJnZXIgdGhhbiB6ZXJvLicsXG4gIGV4YW1wbGVzOiBbJ2lzUG9zaXRpdmUoMiknLCAnaXNQb3NpdGl2ZSgwKScsICdpc1Bvc2l0aXZlKC00KScsICdpc1Bvc2l0aXZlKFszLCAwLjUsIC0yXSknXSxcbiAgc2VlYWxzbzogWydpc0ludGVnZXInLCAnaXNOdW1lcmljJywgJ2lzTmVnYXRpdmUnLCAnaXNaZXJvJ11cbn07XG5leHBvcnRzLmlzUG9zaXRpdmVEb2NzID0gaXNQb3NpdGl2ZURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmlzUHJpbWVEb2NzID0gdm9pZCAwO1xudmFyIGlzUHJpbWVEb2NzID0ge1xuICBuYW1lOiAnaXNQcmltZScsXG4gIGNhdGVnb3J5OiAnVXRpbHMnLFxuICBzeW50YXg6IFsnaXNQcmltZSh4KSddLFxuICBkZXNjcmlwdGlvbjogJ1Rlc3Qgd2hldGhlciBhIHZhbHVlIGlzIHByaW1lOiBoYXMgbm8gZGl2aXNvcnMgb3RoZXIgdGhhbiBpdHNlbGYgYW5kIG9uZS4nLFxuICBleGFtcGxlczogWydpc1ByaW1lKDMpJywgJ2lzUHJpbWUoLTIpJywgJ2lzUHJpbWUoWzIsIDE3LCAxMDBdKSddLFxuICBzZWVhbHNvOiBbJ2lzSW50ZWdlcicsICdpc051bWVyaWMnLCAnaXNOZWdhdGl2ZScsICdpc1plcm8nXVxufTtcbmV4cG9ydHMuaXNQcmltZURvY3MgPSBpc1ByaW1lRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaXNaZXJvRG9jcyA9IHZvaWQgMDtcbnZhciBpc1plcm9Eb2NzID0ge1xuICBuYW1lOiAnaXNaZXJvJyxcbiAgY2F0ZWdvcnk6ICdVdGlscycsXG4gIHN5bnRheDogWydpc1plcm8oeCknXSxcbiAgZGVzY3JpcHRpb246ICdUZXN0IHdoZXRoZXIgYSB2YWx1ZSBpcyB6ZXJvLicsXG4gIGV4YW1wbGVzOiBbJ2lzWmVybygyKScsICdpc1plcm8oMCknLCAnaXNaZXJvKC00KScsICdpc1plcm8oWzMsIDAsIC0yLCAwXSknXSxcbiAgc2VlYWxzbzogWydpc0ludGVnZXInLCAnaXNOdW1lcmljJywgJ2lzTmVnYXRpdmUnLCAnaXNQb3NpdGl2ZSddXG59O1xuZXhwb3J0cy5pc1plcm9Eb2NzID0gaXNaZXJvRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubnVtZXJpY0RvY3MgPSB2b2lkIDA7XG52YXIgbnVtZXJpY0RvY3MgPSB7XG4gIG5hbWU6ICdudW1lcmljJyxcbiAgY2F0ZWdvcnk6ICdVdGlscycsXG4gIHN5bnRheDogWydudW1lcmljKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29udmVydCBhIG51bWVyaWMgaW5wdXQgdG8gYSBzcGVjaWZpYyBudW1lcmljIHR5cGU6IG51bWJlciwgQmlnTnVtYmVyLCBvciBGcmFjdGlvbi4nLFxuICBleGFtcGxlczogWydudW1lcmljKFwiNFwiKScsICdudW1lcmljKFwiNFwiLCBcIm51bWJlclwiKScsICdudW1lcmljKFwiNFwiLCBcIkJpZ051bWJlclwiKScsICdudW1lcmljKFwiNFwiLCBcIkZyYWN0aW9uKScsICdudW1lcmljKDQsIFwiRnJhY3Rpb25cIiknLCAnbnVtZXJpYyhmcmFjdGlvbigyLCA1KSwgXCJudW1iZXIpJ10sXG4gIHNlZWFsc286IFsnbnVtYmVyJywgJ2ZyYWN0aW9uJywgJ2JpZ251bWJlcicsICdzdHJpbmcnLCAnZm9ybWF0J11cbn07XG5leHBvcnRzLm51bWVyaWNEb2NzID0gbnVtZXJpY0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnR5cGVPZkRvY3MgPSB2b2lkIDA7XG52YXIgdHlwZU9mRG9jcyA9IHtcbiAgbmFtZTogJ3R5cGVPZicsXG4gIGNhdGVnb3J5OiAnVXRpbHMnLFxuICBzeW50YXg6IFsndHlwZU9mKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnR2V0IHRoZSB0eXBlIG9mIGEgdmFyaWFibGUuJyxcbiAgZXhhbXBsZXM6IFsndHlwZU9mKDMuNSknLCAndHlwZU9mKDIgLSA0aSknLCAndHlwZU9mKDQ1IGRlZyknLCAndHlwZU9mKFwiaGVsbG8gd29ybGRcIiknXSxcbiAgc2VlYWxzbzogWydnZXRNYXRyaXhEYXRhVHlwZSddXG59O1xuZXhwb3J0cy50eXBlT2ZEb2NzID0gdHlwZU9mRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ29tcGlsZSA9IHZvaWQgMDtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdjb21waWxlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ3BhcnNlJ107XG52YXIgY3JlYXRlQ29tcGlsZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBwYXJzZSA9IF9yZWYucGFyc2U7XG5cbiAgLyoqXG4gICAqIFBhcnNlIGFuZCBjb21waWxlIGFuIGV4cHJlc3Npb24uXG4gICAqIFJldHVybnMgYSBhbiBvYmplY3Qgd2l0aCBhIGZ1bmN0aW9uIGBldmFsdWF0ZShbc2NvcGVdKWAgdG8gZXZhbHVhdGUgdGhlXG4gICAqIGNvbXBpbGVkIGV4cHJlc3Npb24uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguY29tcGlsZShleHByKSAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBvbmUgbm9kZVxuICAgKiAgICAgbWF0aC5jb21waWxlKFtleHByMSwgZXhwcjIsIGV4cHIzLCAuLi5dKSAvLyByZXR1cm5zIGFuIGFycmF5IHdpdGggbm9kZXNcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBjb25zdCBjb2RlMSA9IG1hdGguY29tcGlsZSgnc3FydCgzXjIgKyA0XjIpJylcbiAgICogICAgIGNvZGUxLmV2YWx1YXRlKCkgLy8gNVxuICAgKlxuICAgKiAgICAgbGV0IHNjb3BlID0ge2E6IDMsIGI6IDR9XG4gICAqICAgICBjb25zdCBjb2RlMiA9IG1hdGguY29tcGlsZSgnYSAqIGInKSAvLyAxMlxuICAgKiAgICAgY29kZTIuZXZhbHVhdGUoc2NvcGUpIC8vIDEyXG4gICAqICAgICBzY29wZS5hID0gNVxuICAgKiAgICAgY29kZTIuZXZhbHVhdGUoc2NvcGUpIC8vIDIwXG4gICAqXG4gICAqICAgICBjb25zdCBub2RlcyA9IG1hdGguY29tcGlsZShbJ2EgPSAzJywgJ2IgPSA0JywgJ2EgKiBiJ10pXG4gICAqICAgICBub2Rlc1syXS5ldmFsdWF0ZSgpIC8vIDEyXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBwYXJzZSwgZXZhbHVhdGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBzdHJpbmdbXSB8IEFycmF5IHwgTWF0cml4fSBleHByXG4gICAqICAgICAgICAgICAgVGhlIGV4cHJlc3Npb24gdG8gYmUgY29tcGlsZWRcbiAgICogQHJldHVybiB7e2V2YWx1YXRlOiBGdW5jdGlvbn0gfCBBcnJheS48e2V2YWx1YXRlOiBGdW5jdGlvbn0+fSBjb2RlXG4gICAqICAgICAgICAgICAgQW4gb2JqZWN0IHdpdGggdGhlIGNvbXBpbGVkIGV4cHJlc3Npb25cbiAgICogQHRocm93cyB7RXJyb3J9XG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIHN0cmluZzogZnVuY3Rpb24gc3RyaW5nKGV4cHIpIHtcbiAgICAgIHJldHVybiBwYXJzZShleHByKS5jb21waWxlKCk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeChleHByKSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKGV4cHIsIGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgICByZXR1cm4gcGFyc2UoZW50cnkpLmNvbXBpbGUoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlQ29tcGlsZSA9IGNyZWF0ZUNvbXBpbGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZURlcHJlY2F0ZWRFdmFsID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9sb2cgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbG9nXCIpO1xuXG4vLyBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDYuMC4wLiBEYXRlOiAyMDE4LTEyLTA1XG52YXIgY3JlYXRlRGVwcmVjYXRlZEV2YWwgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkoJ2V2YWwnLCBbJ2V2YWx1YXRlJ10sIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBldmFsdWF0ZSA9IF9yZWYuZXZhbHVhdGU7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgKDAsIF9sb2cud2Fybk9uY2UpKCdGdW5jdGlvbiBcImV2YWxcIiBoYXMgYmVlbiByZW5hbWVkIHRvIFwiZXZhbHVhdGVcIiBpbiB2Ni4wLjAsIHBsZWFzZSB1c2UgdGhlIG5ldyBmdW5jdGlvbiBpbnN0ZWFkLicpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiBldmFsdWF0ZS5hcHBseShldmFsdWF0ZSwgYXJncyk7XG4gIH07XG59KTtcbmV4cG9ydHMuY3JlYXRlRGVwcmVjYXRlZEV2YWwgPSBjcmVhdGVEZXByZWNhdGVkRXZhbDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRXZhbHVhdGUgPSB2b2lkIDA7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnZXZhbHVhdGUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAncGFyc2UnXTtcbnZhciBjcmVhdGVFdmFsdWF0ZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBwYXJzZSA9IF9yZWYucGFyc2U7XG5cbiAgLyoqXG4gICAqIEV2YWx1YXRlIGFuIGV4cHJlc3Npb24uXG4gICAqXG4gICAqIE5vdGUgdGhlIGV2YWx1YXRpbmcgYXJiaXRyYXJ5IGV4cHJlc3Npb25zIG1heSBpbnZvbHZlIHNlY3VyaXR5IHJpc2tzLFxuICAgKiBzZWUgW2h0dHBzOi8vbWF0aGpzLm9yZy9kb2NzL2V4cHJlc3Npb25zL3NlY3VyaXR5Lmh0bWxdKGh0dHBzOi8vbWF0aGpzLm9yZy9kb2NzL2V4cHJlc3Npb25zL3NlY3VyaXR5Lmh0bWwpIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLmV2YWx1YXRlKGV4cHIpXG4gICAqICAgICBtYXRoLmV2YWx1YXRlKGV4cHIsIHNjb3BlKVxuICAgKiAgICAgbWF0aC5ldmFsdWF0ZShbZXhwcjEsIGV4cHIyLCBleHByMywgLi4uXSlcbiAgICogICAgIG1hdGguZXZhbHVhdGUoW2V4cHIxLCBleHByMiwgZXhwcjMsIC4uLl0sIHNjb3BlKVxuICAgKlxuICAgKiBFeGFtcGxlOlxuICAgKlxuICAgKiAgICAgbWF0aC5ldmFsdWF0ZSgnKDIrMykvNCcpICAgICAgICAgICAgICAgIC8vIDEuMjVcbiAgICogICAgIG1hdGguZXZhbHVhdGUoJ3NxcnQoM14yICsgNF4yKScpICAgICAgICAvLyA1XG4gICAqICAgICBtYXRoLmV2YWx1YXRlKCdzcXJ0KC00KScpICAgICAgICAgICAgICAgLy8gMmlcbiAgICogICAgIG1hdGguZXZhbHVhdGUoWydhPTMnLCAnYj00JywgJ2EqYiddKSAgICAvLyBbMywgNCwgMTJdXG4gICAqXG4gICAqICAgICBsZXQgc2NvcGUgPSB7YTozLCBiOjR9XG4gICAqICAgICBtYXRoLmV2YWx1YXRlKCdhICogYicsIHNjb3BlKSAgICAgICAgICAgLy8gMTJcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIHBhcnNlLCBjb21waWxlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgc3RyaW5nW10gfCBNYXRyaXh9IGV4cHIgICBUaGUgZXhwcmVzc2lvbiB0byBiZSBldmFsdWF0ZWRcbiAgICogQHBhcmFtIHtPYmplY3R9IFtzY29wZV0gICAgICAgICAgICAgICAgICAgIFNjb3BlIHRvIHJlYWQvd3JpdGUgdmFyaWFibGVzXG4gICAqIEByZXR1cm4geyp9IFRoZSByZXN1bHQgb2YgdGhlIGV4cHJlc3Npb25cbiAgICogQHRocm93cyB7RXJyb3J9XG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIHN0cmluZzogZnVuY3Rpb24gc3RyaW5nKGV4cHIpIHtcbiAgICAgIHZhciBzY29wZSA9IHt9O1xuICAgICAgcmV0dXJuIHBhcnNlKGV4cHIpLmNvbXBpbGUoKS5ldmFsdWF0ZShzY29wZSk7XG4gICAgfSxcbiAgICAnc3RyaW5nLCBPYmplY3QnOiBmdW5jdGlvbiBzdHJpbmdPYmplY3QoZXhwciwgc2NvcGUpIHtcbiAgICAgIHJldHVybiBwYXJzZShleHByKS5jb21waWxlKCkuZXZhbHVhdGUoc2NvcGUpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoZXhwcikge1xuICAgICAgdmFyIHNjb3BlID0ge307XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKGV4cHIsIGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgICByZXR1cm4gcGFyc2UoZW50cnkpLmNvbXBpbGUoKS5ldmFsdWF0ZShzY29wZSk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCwgT2JqZWN0JzogZnVuY3Rpb24gQXJyYXlNYXRyaXhPYmplY3QoZXhwciwgc2NvcGUpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoZXhwciwgZnVuY3Rpb24gKGVudHJ5KSB7XG4gICAgICAgIHJldHVybiBwYXJzZShlbnRyeSkuY29tcGlsZSgpLmV2YWx1YXRlKHNjb3BlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlRXZhbHVhdGUgPSBjcmVhdGVFdmFsdWF0ZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlSGVscCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY3VzdG9tcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jdXN0b21zXCIpO1xuXG52YXIgX2VtYmVkZGVkRG9jcyA9IHJlcXVpcmUoXCIuLi9lbWJlZGRlZERvY3MvZW1iZWRkZWREb2NzXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBuYW1lID0gJ2hlbHAnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0aFdpdGhUcmFuc2Zvcm0nLCAnSGVscCddO1xudmFyIGNyZWF0ZUhlbHAgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0aFdpdGhUcmFuc2Zvcm0gPSBfcmVmLm1hdGhXaXRoVHJhbnNmb3JtLFxuICAgICAgSGVscCA9IF9yZWYuSGVscDtcblxuICAvKipcbiAgICogUmV0cmlldmUgaGVscCBvbiBhIGZ1bmN0aW9uIG9yIGRhdGEgdHlwZS5cbiAgICogSGVscCBmaWxlcyBhcmUgcmV0cmlldmVkIGZyb20gdGhlIGVtYmVkZGVkIGRvY3VtZW50YXRpb24gaW4gbWF0aC5kb2NzLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguaGVscChzZWFyY2gpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBjb25zb2xlLmxvZyhtYXRoLmhlbHAoJ3NpbicpLnRvU3RyaW5nKCkpXG4gICAqICAgIGNvbnNvbGUubG9nKG1hdGguaGVscChtYXRoLmFkZCkudG9TdHJpbmcoKSlcbiAgICogICAgY29uc29sZS5sb2cobWF0aC5oZWxwKG1hdGguYWRkKS50b0pTT04oKSlcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbiB8IHN0cmluZyB8IE9iamVjdH0gc2VhcmNoICAgQSBmdW5jdGlvbiBvciBmdW5jdGlvbiBuYW1lXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB3aGljaCB0byBnZXQgaGVscFxuICAgKiBAcmV0dXJuIHtIZWxwfSBBIGhlbHAgb2JqZWN0XG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIGFueTogZnVuY3Rpb24gYW55KHNlYXJjaCkge1xuICAgICAgdmFyIHByb3A7XG4gICAgICB2YXIgc2VhcmNoTmFtZSA9IHNlYXJjaDtcblxuICAgICAgaWYgKHR5cGVvZiBzZWFyY2ggIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGZvciAocHJvcCBpbiBtYXRoV2l0aFRyYW5zZm9ybSkge1xuICAgICAgICAgIC8vIHNlYXJjaCBpbiBmdW5jdGlvbnMgYW5kIGNvbnN0YW50c1xuICAgICAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkobWF0aFdpdGhUcmFuc2Zvcm0sIHByb3ApICYmIHNlYXJjaCA9PT0gbWF0aFdpdGhUcmFuc2Zvcm1bcHJvcF0pIHtcbiAgICAgICAgICAgIHNlYXJjaE5hbWUgPSBwcm9wO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8qIFRPRE86IGltcGxlbWVudCBoZWxwIGZvciBkYXRhIHR5cGVzXG4gICAgICAgICBpZiAoIXRleHQpIHtcbiAgICAgICAgIC8vIHNlYXJjaCBkYXRhIHR5cGVcbiAgICAgICAgIGZvciAocHJvcCBpbiBtYXRoLnR5cGUpIHtcbiAgICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eShtYXRoLCBwcm9wKSkge1xuICAgICAgICAgaWYgKHNlYXJjaCA9PT0gbWF0aC50eXBlW3Byb3BdKSB7XG4gICAgICAgICB0ZXh0ID0gcHJvcFxuICAgICAgICAgYnJlYWtcbiAgICAgICAgIH1cbiAgICAgICAgIH1cbiAgICAgICAgIH1cbiAgICAgICAgIH1cbiAgICAgICAgICovXG5cbiAgICAgIH1cblxuICAgICAgdmFyIGRvYyA9ICgwLCBfY3VzdG9tcy5nZXRTYWZlUHJvcGVydHkpKF9lbWJlZGRlZERvY3MuZW1iZWRkZWREb2NzLCBzZWFyY2hOYW1lKTtcblxuICAgICAgaWYgKCFkb2MpIHtcbiAgICAgICAgdmFyIHNlYXJjaFRleHQgPSB0eXBlb2Ygc2VhcmNoTmFtZSA9PT0gJ2Z1bmN0aW9uJyA/IHNlYXJjaE5hbWUubmFtZSA6IHNlYXJjaE5hbWU7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gZG9jdW1lbnRhdGlvbiBmb3VuZCBvbiBcIicgKyBzZWFyY2hUZXh0ICsgJ1wiJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgSGVscChkb2MpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlSGVscCA9IGNyZWF0ZUhlbHA7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVBhcnNlciA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3BhcnNlcic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdQYXJzZXInXTtcbnZhciBjcmVhdGVQYXJzZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgUGFyc2VyID0gX3JlZi5QYXJzZXI7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHBhcnNlci4gVGhlIGZ1bmN0aW9uIGNyZWF0ZXMgYSBuZXcgYG1hdGguUGFyc2VyYCBvYmplY3QuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5wYXJzZXIoKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIGNvbnN0IHBhcnNlciA9IG5ldyBtYXRoLnBhcnNlcigpXG4gICAqXG4gICAqICAgICAvLyBldmFsdWF0ZSBleHByZXNzaW9uc1xuICAgKiAgICAgY29uc3QgYSA9IHBhcnNlci5ldmFsdWF0ZSgnc3FydCgzXjIgKyA0XjIpJykgLy8gNVxuICAgKiAgICAgY29uc3QgYiA9IHBhcnNlci5ldmFsdWF0ZSgnc3FydCgtNCknKSAgICAgICAgLy8gMmlcbiAgICogICAgIGNvbnN0IGMgPSBwYXJzZXIuZXZhbHVhdGUoJzIgaW5jaCBpbiBjbScpICAgIC8vIDUuMDggY21cbiAgICogICAgIGNvbnN0IGQgPSBwYXJzZXIuZXZhbHVhdGUoJ2Nvcyg0NSBkZWcpJykgICAgIC8vIDAuNzA3MTA2NzgxMTg2NTQ3NlxuICAgKlxuICAgKiAgICAgLy8gZGVmaW5lIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zXG4gICAqICAgICBwYXJzZXIuZXZhbHVhdGUoJ3ggPSA3IC8gMicpICAgICAgICAgICAgICAgICAvLyAzLjVcbiAgICogICAgIHBhcnNlci5ldmFsdWF0ZSgneCArIDMnKSAgICAgICAgICAgICAgICAgICAgIC8vIDYuNVxuICAgKiAgICAgcGFyc2VyLmV2YWx1YXRlKCdmdW5jdGlvbiBmKHgsIHkpID0geF55JykgICAgLy8gZih4LCB5KVxuICAgKiAgICAgcGFyc2VyLmV2YWx1YXRlKCdmKDIsIDMpJykgICAgICAgICAgICAgICAgICAgLy8gOFxuICAgKlxuICAgKiAgICAgLy8gZ2V0IGFuZCBzZXQgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnNcbiAgICogICAgIGNvbnN0IHggPSBwYXJzZXIuZ2V0KCd4JykgICAgICAgICAgICAgICAgLy8gN1xuICAgKiAgICAgY29uc3QgZiA9IHBhcnNlci5nZXQoJ2YnKSAgICAgICAgICAgICAgICAvLyBmdW5jdGlvblxuICAgKiAgICAgY29uc3QgZyA9IGYoMywgMikgICAgICAgICAgICAgICAgICAgICAgICAvLyA5XG4gICAqICAgICBwYXJzZXIuc2V0KCdoJywgNTAwKVxuICAgKiAgICAgY29uc3QgaSA9IHBhcnNlci5ldmFsdWF0ZSgnaCAvIDInKSAgICAgICAvLyAyNTBcbiAgICogICAgIHBhcnNlci5zZXQoJ2hlbGxvJywgZnVuY3Rpb24gKG5hbWUpIHtcbiAgICogICAgICAgcmV0dXJuICdoZWxsbywgJyArIG5hbWUgKyAnISdcbiAgICogICAgIH0pXG4gICAqICAgICBwYXJzZXIuZXZhbHVhdGUoJ2hlbGxvKFwidXNlclwiKScpICAgICAgICAgLy8gXCJoZWxsbywgdXNlciFcIlxuICAgKlxuICAgKiAgICAgLy8gY2xlYXIgZGVmaW5lZCBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlc1xuICAgKiAgICAgcGFyc2VyLmNsZWFyKClcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGV2YWx1YXRlLCBjb21waWxlLCBwYXJzZVxuICAgKlxuICAgKiBAcmV0dXJuIHtQYXJzZXJ9IFBhcnNlclxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnJzogZnVuY3Rpb24gXygpIHtcbiAgICAgIHJldHVybiBuZXcgUGFyc2VyKCk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVQYXJzZXIgPSBjcmVhdGVQYXJzZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmtleXdvcmRzID0gdm9pZCAwO1xuLy8gUmVzZXJ2ZWQga2V5d29yZHMgbm90IGFsbG93ZWQgdG8gdXNlIGluIHRoZSBwYXJzZXJcbnZhciBrZXl3b3JkcyA9IHtcbiAgZW5kOiB0cnVlXG59O1xuZXhwb3J0cy5rZXl3b3JkcyA9IGtleXdvcmRzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBY2Nlc3Nvck5vZGUgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfY3VzdG9tcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jdXN0b21zXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9hY2Nlc3MgPSByZXF1aXJlKFwiLi91dGlscy9hY2Nlc3NcIik7XG5cbnZhciBuYW1lID0gJ0FjY2Vzc29yTm9kZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydzdWJzZXQnLCAnTm9kZSddO1xudmFyIGNyZWF0ZUFjY2Vzc29yTm9kZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBzdWJzZXQgPSBfcmVmLnN1YnNldCxcbiAgICAgIE5vZGUgPSBfcmVmLk5vZGU7XG4gIHZhciBhY2Nlc3MgPSAoMCwgX2FjY2Vzcy5hY2Nlc3NGYWN0b3J5KSh7XG4gICAgc3Vic2V0OiBzdWJzZXRcbiAgfSk7XG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3IgQWNjZXNzb3JOb2RlXG4gICAqIEBleHRlbmRzIHtOb2RlfVxuICAgKiBBY2Nlc3MgYW4gb2JqZWN0IHByb3BlcnR5IG9yIGdldCBhIG1hdHJpeCBzdWJzZXRcbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBvYmplY3QgICAgICAgICAgICAgICAgIFRoZSBvYmplY3QgZnJvbSB3aGljaCB0byByZXRyaWV2ZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBwcm9wZXJ0eSBvciBzdWJzZXQuXG4gICAqIEBwYXJhbSB7SW5kZXhOb2RlfSBpbmRleCAgICAgICAgICAgICBJbmRleE5vZGUgY29udGFpbmluZyByYW5nZXNcbiAgICovXG5cbiAgZnVuY3Rpb24gQWNjZXNzb3JOb2RlKG9iamVjdCwgaW5kZXgpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQWNjZXNzb3JOb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG5cbiAgICBpZiAoISgwLCBfaXMuaXNOb2RlKShvYmplY3QpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdOb2RlIGV4cGVjdGVkIGZvciBwYXJhbWV0ZXIgXCJvYmplY3RcIicpO1xuICAgIH1cblxuICAgIGlmICghKDAsIF9pcy5pc0luZGV4Tm9kZSkoaW5kZXgpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbmRleE5vZGUgZXhwZWN0ZWQgZm9yIHBhcmFtZXRlciBcImluZGV4XCInKTtcbiAgICB9XG5cbiAgICB0aGlzLm9iamVjdCA9IG9iamVjdCB8fCBudWxsO1xuICAgIHRoaXMuaW5kZXggPSBpbmRleDsgLy8gcmVhZG9ubHkgcHJvcGVydHkgbmFtZVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICduYW1lJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmluZGV4KSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXguaXNPYmplY3RQcm9wZXJ0eSgpID8gdGhpcy5pbmRleC5nZXRPYmplY3RQcm9wZXJ0eSgpIDogJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMub2JqZWN0Lm5hbWUgfHwgJyc7XG4gICAgICAgIH1cbiAgICAgIH0uYmluZCh0aGlzKSxcbiAgICAgIHNldDogZnVuY3Rpb24gc2V0KCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBhc3NpZ24gYSBuZXcgbmFtZSwgbmFtZSBpcyByZWFkLW9ubHknKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIEFjY2Vzc29yTm9kZS5wcm90b3R5cGUgPSBuZXcgTm9kZSgpO1xuICBBY2Nlc3Nvck5vZGUucHJvdG90eXBlLnR5cGUgPSAnQWNjZXNzb3JOb2RlJztcbiAgQWNjZXNzb3JOb2RlLnByb3RvdHlwZS5pc0FjY2Vzc29yTm9kZSA9IHRydWU7XG4gIC8qKlxuICAgKiBDb21waWxlIGEgbm9kZSBpbnRvIGEgSmF2YVNjcmlwdCBmdW5jdGlvbi5cbiAgICogVGhpcyBiYXNpY2FsbHkgcHJlLWNhbGN1bGF0ZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSBhbmQgb25seSBsZWF2ZXMgb3BlblxuICAgKiBjYWxjdWxhdGlvbnMgd2hpY2ggZGVwZW5kIG9uIGEgZHluYW1pYyBzY29wZSB3aXRoIHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG1hdGggICAgIE1hdGguanMgbmFtZXNwYWNlIHdpdGggZnVuY3Rpb25zIGFuZCBjb25zdGFudHMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdOYW1lcyBBbiBvYmplY3Qgd2l0aCBhcmd1bWVudCBuYW1lcyBhcyBrZXkgYW5kIGB0cnVlYFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdmFsdWUuIFVzZWQgaW4gdGhlIFN5bWJvbE5vZGUgdG8gb3B0aW1pemVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudHMgZnJvbSB1c2VyIGFzc2lnbmVkIGZ1bmN0aW9uc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZSBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKSBvciBzcGVjaWFsIHN5bWJvbHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UgYGVuZGAgKHNlZSBJbmRleE5vZGUpLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgbGlrZTpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICBldmFsTm9kZShzY29wZTogT2JqZWN0LCBhcmdzOiBPYmplY3QsIGNvbnRleHQ6ICopXG4gICAqL1xuXG4gIEFjY2Vzc29yTm9kZS5wcm90b3R5cGUuX2NvbXBpbGUgPSBmdW5jdGlvbiAobWF0aCwgYXJnTmFtZXMpIHtcbiAgICB2YXIgZXZhbE9iamVjdCA9IHRoaXMub2JqZWN0Ll9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTtcblxuICAgIHZhciBldmFsSW5kZXggPSB0aGlzLmluZGV4Ll9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTtcblxuICAgIGlmICh0aGlzLmluZGV4LmlzT2JqZWN0UHJvcGVydHkoKSkge1xuICAgICAgdmFyIHByb3AgPSB0aGlzLmluZGV4LmdldE9iamVjdFByb3BlcnR5KCk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gZXZhbEFjY2Vzc29yTm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIF9jdXN0b21zLmdldFNhZmVQcm9wZXJ0eSkoZXZhbE9iamVjdChzY29wZSwgYXJncywgY29udGV4dCksIHByb3ApO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxBY2Nlc3Nvck5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgdmFyIG9iamVjdCA9IGV2YWxPYmplY3Qoc2NvcGUsIGFyZ3MsIGNvbnRleHQpO1xuICAgICAgICB2YXIgaW5kZXggPSBldmFsSW5kZXgoc2NvcGUsIGFyZ3MsIG9iamVjdCk7IC8vIHdlIHBhc3Mgb2JqZWN0IGhlcmUgaW5zdGVhZCBvZiBjb250ZXh0XG5cbiAgICAgICAgcmV0dXJuIGFjY2VzcyhvYmplY3QsIGluZGV4KTtcbiAgICAgIH07XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBlYWNoIG9mIHRoZSBjaGlsZCBub2RlcyBvZiB0aGlzIG5vZGVcbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpfSBjYWxsYmFja1xuICAgKi9cblxuXG4gIEFjY2Vzc29yTm9kZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIGNhbGxiYWNrKHRoaXMub2JqZWN0LCAnb2JqZWN0JywgdGhpcyk7XG4gICAgY2FsbGJhY2sodGhpcy5pbmRleCwgJ2luZGV4JywgdGhpcyk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgQWNjZXNzb3JOb2RlIGhhdmluZyBpdCdzIGNoaWxkcyBiZSB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nXG4gICAqIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCBvZiB0aGUgY2hpbGRzIG9mIHRoZSBvcmlnaW5hbCBub2RlLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSk6IE5vZGV9IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHtBY2Nlc3Nvck5vZGV9IFJldHVybnMgYSB0cmFuc2Zvcm1lZCBjb3B5IG9mIHRoZSBub2RlXG4gICAqL1xuXG5cbiAgQWNjZXNzb3JOb2RlLnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICByZXR1cm4gbmV3IEFjY2Vzc29yTm9kZSh0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy5vYmplY3QsICdvYmplY3QnLCB0aGlzKSksIHRoaXMuX2lmTm9kZShjYWxsYmFjayh0aGlzLmluZGV4LCAnaW5kZXgnLCB0aGlzKSkpO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgY2xvbmUgb2YgdGhpcyBub2RlLCBhIHNoYWxsb3cgY29weVxuICAgKiBAcmV0dXJuIHtBY2Nlc3Nvck5vZGV9XG4gICAqL1xuXG5cbiAgQWNjZXNzb3JOb2RlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IEFjY2Vzc29yTm9kZSh0aGlzLm9iamVjdCwgdGhpcy5pbmRleCk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBBY2Nlc3Nvck5vZGUucHJvdG90eXBlLl90b1N0cmluZyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIG9iamVjdCA9IHRoaXMub2JqZWN0LnRvU3RyaW5nKG9wdGlvbnMpO1xuXG4gICAgaWYgKG5lZWRQYXJlbnRoZXNpcyh0aGlzLm9iamVjdCkpIHtcbiAgICAgIG9iamVjdCA9ICcoJyArIG9iamVjdCArICcpJztcbiAgICB9XG5cbiAgICByZXR1cm4gb2JqZWN0ICsgdGhpcy5pbmRleC50b1N0cmluZyhvcHRpb25zKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBIVE1MIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBBY2Nlc3Nvck5vZGUucHJvdG90eXBlLnRvSFRNTCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIG9iamVjdCA9IHRoaXMub2JqZWN0LnRvSFRNTChvcHRpb25zKTtcblxuICAgIGlmIChuZWVkUGFyZW50aGVzaXModGhpcy5vYmplY3QpKSB7XG4gICAgICBvYmplY3QgPSAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4oPC9zcGFuPicgKyBvYmplY3QgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4pPC9zcGFuPic7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iamVjdCArIHRoaXMuaW5kZXgudG9IVE1MKG9wdGlvbnMpO1xuICB9O1xuICAvKipcbiAgICogR2V0IExhVGVYIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBBY2Nlc3Nvck5vZGUucHJvdG90eXBlLl90b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIG9iamVjdCA9IHRoaXMub2JqZWN0LnRvVGV4KG9wdGlvbnMpO1xuXG4gICAgaWYgKG5lZWRQYXJlbnRoZXNpcyh0aGlzLm9iamVjdCkpIHtcbiAgICAgIG9iamVjdCA9ICdcXFxcbGVmdChcXCcgKyBvYmplY3QgKyBcXCdcXFxccmlnaHQpJztcbiAgICB9XG5cbiAgICByZXR1cm4gb2JqZWN0ICsgdGhpcy5pbmRleC50b1RleChvcHRpb25zKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGVcbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG5cblxuICBBY2Nlc3Nvck5vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnQWNjZXNzb3JOb2RlJyxcbiAgICAgIG9iamVjdDogdGhpcy5vYmplY3QsXG4gICAgICBpbmRleDogdGhpcy5pbmRleFxuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhbiBBY2Nlc3Nvck5vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIkFjY2Vzc29yTm9kZVwiLCBvYmplY3Q6IC4uLiwgaW5kZXg6IC4uLn1gLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgbWF0aGpzIGlzIG9wdGlvbmFsXG4gICAqIEByZXR1cm5zIHtBY2Nlc3Nvck5vZGV9XG4gICAqL1xuXG5cbiAgQWNjZXNzb3JOb2RlLmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICByZXR1cm4gbmV3IEFjY2Vzc29yTm9kZShqc29uLm9iamVjdCwganNvbi5pbmRleCk7XG4gIH07XG4gIC8qKlxuICAgKiBBcmUgcGFyZW50aGVzaXMgbmVlZGVkP1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIG5lZWRQYXJlbnRoZXNpcyhub2RlKSB7XG4gICAgLy8gVE9ETzogbWF5YmUgbWFrZSBhIG1ldGhvZCBvbiB0aGUgbm9kZXMgd2hpY2ggdGVsbHMgd2hldGhlciB0aGV5IG5lZWQgcGFyZW50aGVzaXM/XG4gICAgcmV0dXJuICEoKDAsIF9pcy5pc0FjY2Vzc29yTm9kZSkobm9kZSkgfHwgKDAsIF9pcy5pc0FycmF5Tm9kZSkobm9kZSkgfHwgKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkobm9kZSkgfHwgKDAsIF9pcy5pc0Z1bmN0aW9uTm9kZSkobm9kZSkgfHwgKDAsIF9pcy5pc09iamVjdE5vZGUpKG5vZGUpIHx8ICgwLCBfaXMuaXNQYXJlbnRoZXNpc05vZGUpKG5vZGUpIHx8ICgwLCBfaXMuaXNTeW1ib2xOb2RlKShub2RlKSk7XG4gIH1cblxuICByZXR1cm4gQWNjZXNzb3JOb2RlO1xufSwge1xuICBpc0NsYXNzOiB0cnVlLFxuICBpc05vZGU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBY2Nlc3Nvck5vZGUgPSBjcmVhdGVBY2Nlc3Nvck5vZGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFycmF5Tm9kZSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ0FycmF5Tm9kZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydOb2RlJ107XG52YXIgY3JlYXRlQXJyYXlOb2RlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIE5vZGUgPSBfcmVmLk5vZGU7XG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvciBBcnJheU5vZGVcbiAgICogQGV4dGVuZHMge05vZGV9XG4gICAqIEhvbGRzIGFuIDEtZGltZW5zaW9uYWwgYXJyYXkgd2l0aCBpdGVtc1xuICAgKiBAcGFyYW0ge05vZGVbXX0gW2l0ZW1zXSAgIDEgZGltZW5zaW9uYWwgYXJyYXkgd2l0aCBpdGVtc1xuICAgKi9cbiAgZnVuY3Rpb24gQXJyYXlOb2RlKGl0ZW1zKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEFycmF5Tm9kZSkpIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7XG4gICAgfVxuXG4gICAgdGhpcy5pdGVtcyA9IGl0ZW1zIHx8IFtdOyAvLyB2YWxpZGF0ZSBpbnB1dFxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMuaXRlbXMpIHx8ICF0aGlzLml0ZW1zLmV2ZXJ5KF9pcy5pc05vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSBjb250YWluaW5nIE5vZGVzIGV4cGVjdGVkJyk7XG4gICAgfSAvLyBUT0RPOiBkZXByZWNhdGVkIHNpbmNlIHYzLCByZW1vdmUgc29tZSBkYXlcblxuXG4gICAgdmFyIGRlcHJlY2F0ZWQgPSBmdW5jdGlvbiBkZXByZWNhdGVkKCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm9wZXJ0eSBgQXJyYXlOb2RlLm5vZGVzYCBpcyBkZXByZWNhdGVkLCB1c2UgYEFycmF5Tm9kZS5pdGVtc2AgaW5zdGVhZCcpO1xuICAgIH07XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ25vZGVzJywge1xuICAgICAgZ2V0OiBkZXByZWNhdGVkLFxuICAgICAgc2V0OiBkZXByZWNhdGVkXG4gICAgfSk7XG4gIH1cblxuICBBcnJheU5vZGUucHJvdG90eXBlID0gbmV3IE5vZGUoKTtcbiAgQXJyYXlOb2RlLnByb3RvdHlwZS50eXBlID0gJ0FycmF5Tm9kZSc7XG4gIEFycmF5Tm9kZS5wcm90b3R5cGUuaXNBcnJheU5vZGUgPSB0cnVlO1xuICAvKipcbiAgICogQ29tcGlsZSBhIG5vZGUgaW50byBhIEphdmFTY3JpcHQgZnVuY3Rpb24uXG4gICAqIFRoaXMgYmFzaWNhbGx5IHByZS1jYWxjdWxhdGVzIGFzIG11Y2ggYXMgcG9zc2libGUgYW5kIG9ubHkgbGVhdmVzIG9wZW5cbiAgICogY2FsY3VsYXRpb25zIHdoaWNoIGRlcGVuZCBvbiBhIGR5bmFtaWMgc2NvcGUgd2l0aCB2YXJpYWJsZXMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBtYXRoICAgICBNYXRoLmpzIG5hbWVzcGFjZSB3aXRoIGZ1bmN0aW9ucyBhbmQgY29uc3RhbnRzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gYXJnTmFtZXMgQW4gb2JqZWN0IHdpdGggYXJndW1lbnQgbmFtZXMgYXMga2V5IGFuZCBgdHJ1ZWBcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHZhbHVlLiBVc2VkIGluIHRoZSBTeW1ib2xOb2RlIHRvIG9wdGltaXplXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJndW1lbnRzIGZyb20gdXNlciBhc3NpZ25lZCBmdW5jdGlvbnNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIChzZWUgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSkgb3Igc3BlY2lhbCBzeW1ib2xzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlIGBlbmRgIChzZWUgSW5kZXhOb2RlKS5cbiAgICogQHJldHVybiB7ZnVuY3Rpb259IFJldHVybnMgYSBmdW5jdGlvbiB3aGljaCBjYW4gYmUgY2FsbGVkIGxpa2U6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgZXZhbE5vZGUoc2NvcGU6IE9iamVjdCwgYXJnczogT2JqZWN0LCBjb250ZXh0OiAqKVxuICAgKi9cblxuICBBcnJheU5vZGUucHJvdG90eXBlLl9jb21waWxlID0gZnVuY3Rpb24gKG1hdGgsIGFyZ05hbWVzKSB7XG4gICAgdmFyIGV2YWxJdGVtcyA9ICgwLCBfYXJyYXkubWFwKSh0aGlzLml0ZW1zLCBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuIGl0ZW0uX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpO1xuICAgIH0pO1xuICAgIHZhciBhc01hdHJpeCA9IG1hdGguY29uZmlnLm1hdHJpeCAhPT0gJ0FycmF5JztcblxuICAgIGlmIChhc01hdHJpeCkge1xuICAgICAgdmFyIG1hdHJpeCA9IG1hdGgubWF0cml4O1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxBcnJheU5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIG1hdHJpeCgoMCwgX2FycmF5Lm1hcCkoZXZhbEl0ZW1zLCBmdW5jdGlvbiAoZXZhbEl0ZW0pIHtcbiAgICAgICAgICByZXR1cm4gZXZhbEl0ZW0oc2NvcGUsIGFyZ3MsIGNvbnRleHQpO1xuICAgICAgICB9KSk7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gZXZhbEFycmF5Tm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIF9hcnJheS5tYXApKGV2YWxJdGVtcywgZnVuY3Rpb24gKGV2YWxJdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIGV2YWxJdGVtKHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZWFjaCBvZiB0aGUgY2hpbGQgbm9kZXMgb2YgdGhpcyBub2RlXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKX0gY2FsbGJhY2tcbiAgICovXG5cblxuICBBcnJheU5vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBub2RlID0gdGhpcy5pdGVtc1tpXTtcbiAgICAgIGNhbGxiYWNrKG5vZGUsICdpdGVtc1snICsgaSArICddJywgdGhpcyk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IEFycmF5Tm9kZSBoYXZpbmcgaXQncyBjaGlsZHMgYmUgdGhlIHJlc3VsdHMgb2YgY2FsbGluZ1xuICAgKiB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggb2YgdGhlIGNoaWxkcyBvZiB0aGUgb3JpZ2luYWwgbm9kZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpOiBOb2RlfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7QXJyYXlOb2RlfSBSZXR1cm5zIGEgdHJhbnNmb3JtZWQgY29weSBvZiB0aGUgbm9kZVxuICAgKi9cblxuXG4gIEFycmF5Tm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgdmFyIGl0ZW1zID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGl0ZW1zW2ldID0gdGhpcy5faWZOb2RlKGNhbGxiYWNrKHRoaXMuaXRlbXNbaV0sICdpdGVtc1snICsgaSArICddJywgdGhpcykpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgQXJyYXlOb2RlKGl0ZW1zKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoaXMgbm9kZSwgYSBzaGFsbG93IGNvcHlcbiAgICogQHJldHVybiB7QXJyYXlOb2RlfVxuICAgKi9cblxuXG4gIEFycmF5Tm9kZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBBcnJheU5vZGUodGhpcy5pdGVtcy5zbGljZSgwKSk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqIEBvdmVycmlkZVxuICAgKi9cblxuXG4gIEFycmF5Tm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgaXRlbXMgPSB0aGlzLml0ZW1zLm1hcChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgcmV0dXJuIG5vZGUudG9TdHJpbmcob3B0aW9ucyk7XG4gICAgfSk7XG4gICAgcmV0dXJuICdbJyArIGl0ZW1zLmpvaW4oJywgJykgKyAnXSc7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBub2RlXG4gICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAqL1xuXG5cbiAgQXJyYXlOb2RlLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hdGhqczogJ0FycmF5Tm9kZScsXG4gICAgICBpdGVtczogdGhpcy5pdGVtc1xuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhbiBBcnJheU5vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIkFycmF5Tm9kZVwiLCBpdGVtczogWy4uLl19YCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG1hdGhqcyBpcyBvcHRpb25hbFxuICAgKiBAcmV0dXJucyB7QXJyYXlOb2RlfVxuICAgKi9cblxuXG4gIEFycmF5Tm9kZS5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgcmV0dXJuIG5ldyBBcnJheU5vZGUoanNvbi5pdGVtcyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgSFRNTCByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKiBAb3ZlcnJpZGVcbiAgICovXG5cblxuICBBcnJheU5vZGUucHJvdG90eXBlLnRvSFRNTCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIGl0ZW1zID0gdGhpcy5pdGVtcy5tYXAoZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIHJldHVybiBub2RlLnRvSFRNTChvcHRpb25zKTtcbiAgICB9KTtcbiAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXNxdWFyZS1wYXJlbnRoZXNpc1wiPls8L3NwYW4+JyArIGl0ZW1zLmpvaW4oJzxzcGFuIGNsYXNzPVwibWF0aC1zZXBhcmF0b3JcIj4sPC9zcGFuPicpICsgJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXNxdWFyZS1wYXJlbnRoZXNpc1wiPl08L3NwYW4+JztcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBMYVRlWCByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIEFycmF5Tm9kZS5wcm90b3R5cGUuX3RvVGV4ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgcyA9ICdcXFxcYmVnaW57Ym1hdHJpeH0nO1xuICAgIHRoaXMuaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgaWYgKG5vZGUuaXRlbXMpIHtcbiAgICAgICAgcyArPSBub2RlLml0ZW1zLm1hcChmdW5jdGlvbiAoY2hpbGROb2RlKSB7XG4gICAgICAgICAgcmV0dXJuIGNoaWxkTm9kZS50b1RleChvcHRpb25zKTtcbiAgICAgICAgfSkuam9pbignJicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcyArPSBub2RlLnRvVGV4KG9wdGlvbnMpO1xuICAgICAgfSAvLyBuZXcgbGluZVxuXG5cbiAgICAgIHMgKz0gJ1xcXFxcXFxcJztcbiAgICB9KTtcbiAgICBzICs9ICdcXFxcZW5ke2JtYXRyaXh9JztcbiAgICByZXR1cm4gcztcbiAgfTtcblxuICByZXR1cm4gQXJyYXlOb2RlO1xufSwge1xuICBpc0NsYXNzOiB0cnVlLFxuICBpc05vZGU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBcnJheU5vZGUgPSBjcmVhdGVBcnJheU5vZGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFzc2lnbm1lbnROb2RlID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2N1c3RvbXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY3VzdG9tc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYWNjZXNzID0gcmVxdWlyZShcIi4vdXRpbHMvYWNjZXNzXCIpO1xuXG52YXIgX2Fzc2lnbiA9IHJlcXVpcmUoXCIuL3V0aWxzL2Fzc2lnblwiKTtcblxudmFyIF9vcGVyYXRvcnMgPSByZXF1aXJlKFwiLi4vb3BlcmF0b3JzXCIpO1xuXG52YXIgbmFtZSA9ICdBc3NpZ25tZW50Tm9kZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydzdWJzZXQnLCAnP21hdHJpeCcsIC8vIEZJWE1FOiBzaG91bGQgbm90IGJlIG5lZWRlZCBhdCBhbGwsIHNob3VsZCBiZSBoYW5kbGVkIGJ5IHN1YnNldFxuJ05vZGUnXTtcbnZhciBjcmVhdGVBc3NpZ25tZW50Tm9kZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBzdWJzZXQgPSBfcmVmLnN1YnNldCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgTm9kZSA9IF9yZWYuTm9kZTtcbiAgdmFyIGFjY2VzcyA9ICgwLCBfYWNjZXNzLmFjY2Vzc0ZhY3RvcnkpKHtcbiAgICBzdWJzZXQ6IHN1YnNldFxuICB9KTtcbiAgdmFyIGFzc2lnbiA9ICgwLCBfYXNzaWduLmFzc2lnbkZhY3RvcnkpKHtcbiAgICBzdWJzZXQ6IHN1YnNldCxcbiAgICBtYXRyaXg6IG1hdHJpeFxuICB9KTtcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvciBBc3NpZ25tZW50Tm9kZVxuICAgKiBAZXh0ZW5kcyB7Tm9kZX1cbiAgICpcbiAgICogRGVmaW5lIGEgc3ltYm9sLCBsaWtlIGBhPTMuMmAsIHVwZGF0ZSBhIHByb3BlcnR5IGxpa2UgYGEuYj0zLjJgLCBvclxuICAgKiByZXBsYWNlIGEgc3Vic2V0IG9mIGEgbWF0cml4IGxpa2UgYEFbMiwyXT00MmAuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG5ldyBBc3NpZ25tZW50Tm9kZShzeW1ib2wsIHZhbHVlKVxuICAgKiAgICAgbmV3IEFzc2lnbm1lbnROb2RlKG9iamVjdCwgaW5kZXgsIHZhbHVlKVxuICAgKlxuICAgKiBVc2FnZTpcbiAgICpcbiAgICogICAgbmV3IEFzc2lnbm1lbnROb2RlKG5ldyBTeW1ib2xOb2RlKCdhJyksIG5ldyBDb25zdGFudE5vZGUoMikpICAgICAgICAgICAgICAgICAgICAgICAvLyBhPTJcbiAgICogICAgbmV3IEFzc2lnbm1lbnROb2RlKG5ldyBTeW1ib2xOb2RlKCdhJyksIG5ldyBJbmRleE5vZGUoJ2InKSwgbmV3IENvbnN0YW50Tm9kZSgyKSkgICAvLyBhLmI9MlxuICAgKiAgICBuZXcgQXNzaWdubWVudE5vZGUobmV3IFN5bWJvbE5vZGUoJ2EnKSwgbmV3IEluZGV4Tm9kZSgxLCAyKSwgbmV3IENvbnN0YW50Tm9kZSgzKSkgIC8vIGFbMSwyXT0zXG4gICAqXG4gICAqIEBwYXJhbSB7U3ltYm9sTm9kZSB8IEFjY2Vzc29yTm9kZX0gb2JqZWN0ICBPYmplY3Qgb24gd2hpY2ggdG8gYXNzaWduIGEgdmFsdWVcbiAgICogQHBhcmFtIHtJbmRleE5vZGV9IFtpbmRleD1udWxsXSAgICAgICAgICAgIEluZGV4LCBwcm9wZXJ0eSBuYW1lIG9yIG1hdHJpeFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXguIE9wdGlvbmFsLiBJZiBub3QgcHJvdmlkZWRcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBgb2JqZWN0YCBpcyBhIFN5bWJvbE5vZGUsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcHJvcGVydHkgaXMgYXNzaWduZWQgdG8gdGhlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWwgc2NvcGUuXG4gICAqIEBwYXJhbSB7Tm9kZX0gdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgdG8gYmUgYXNzaWduZWRcbiAgICovXG5cbiAgZnVuY3Rpb24gQXNzaWdubWVudE5vZGUob2JqZWN0LCBpbmRleCwgdmFsdWUpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQXNzaWdubWVudE5vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH1cblxuICAgIHRoaXMub2JqZWN0ID0gb2JqZWN0O1xuICAgIHRoaXMuaW5kZXggPSB2YWx1ZSA/IGluZGV4IDogbnVsbDtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWUgfHwgaW5kZXg7IC8vIHZhbGlkYXRlIGlucHV0XG5cbiAgICBpZiAoISgwLCBfaXMuaXNTeW1ib2xOb2RlKShvYmplY3QpICYmICEoMCwgX2lzLmlzQWNjZXNzb3JOb2RlKShvYmplY3QpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTeW1ib2xOb2RlIG9yIEFjY2Vzc29yTm9kZSBleHBlY3RlZCBhcyBcIm9iamVjdFwiJyk7XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfaXMuaXNTeW1ib2xOb2RlKShvYmplY3QpICYmIG9iamVjdC5uYW1lID09PSAnZW5kJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgYXNzaWduIHRvIHN5bWJvbCBcImVuZFwiJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaW5kZXggJiYgISgwLCBfaXMuaXNJbmRleE5vZGUpKHRoaXMuaW5kZXgpKSB7XG4gICAgICAvLyBpbmRleCBpcyBvcHRpb25hbFxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW5kZXhOb2RlIGV4cGVjdGVkIGFzIFwiaW5kZXhcIicpO1xuICAgIH1cblxuICAgIGlmICghKDAsIF9pcy5pc05vZGUpKHRoaXMudmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdOb2RlIGV4cGVjdGVkIGFzIFwidmFsdWVcIicpO1xuICAgIH0gLy8gcmVhZG9ubHkgcHJvcGVydHkgbmFtZVxuXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ25hbWUnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5kZXgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5pbmRleC5pc09iamVjdFByb3BlcnR5KCkgPyB0aGlzLmluZGV4LmdldE9iamVjdFByb3BlcnR5KCkgOiAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5vYmplY3QubmFtZSB8fCAnJztcbiAgICAgICAgfVxuICAgICAgfS5iaW5kKHRoaXMpLFxuICAgICAgc2V0OiBmdW5jdGlvbiBzZXQoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGFzc2lnbiBhIG5ldyBuYW1lLCBuYW1lIGlzIHJlYWQtb25seScpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgQXNzaWdubWVudE5vZGUucHJvdG90eXBlID0gbmV3IE5vZGUoKTtcbiAgQXNzaWdubWVudE5vZGUucHJvdG90eXBlLnR5cGUgPSAnQXNzaWdubWVudE5vZGUnO1xuICBBc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUuaXNBc3NpZ25tZW50Tm9kZSA9IHRydWU7XG4gIC8qKlxuICAgKiBDb21waWxlIGEgbm9kZSBpbnRvIGEgSmF2YVNjcmlwdCBmdW5jdGlvbi5cbiAgICogVGhpcyBiYXNpY2FsbHkgcHJlLWNhbGN1bGF0ZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSBhbmQgb25seSBsZWF2ZXMgb3BlblxuICAgKiBjYWxjdWxhdGlvbnMgd2hpY2ggZGVwZW5kIG9uIGEgZHluYW1pYyBzY29wZSB3aXRoIHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG1hdGggICAgIE1hdGguanMgbmFtZXNwYWNlIHdpdGggZnVuY3Rpb25zIGFuZCBjb25zdGFudHMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdOYW1lcyBBbiBvYmplY3Qgd2l0aCBhcmd1bWVudCBuYW1lcyBhcyBrZXkgYW5kIGB0cnVlYFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdmFsdWUuIFVzZWQgaW4gdGhlIFN5bWJvbE5vZGUgdG8gb3B0aW1pemVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudHMgZnJvbSB1c2VyIGFzc2lnbmVkIGZ1bmN0aW9uc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZSBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKSBvciBzcGVjaWFsIHN5bWJvbHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UgYGVuZGAgKHNlZSBJbmRleE5vZGUpLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgbGlrZTpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICBldmFsTm9kZShzY29wZTogT2JqZWN0LCBhcmdzOiBPYmplY3QsIGNvbnRleHQ6ICopXG4gICAqL1xuXG4gIEFzc2lnbm1lbnROb2RlLnByb3RvdHlwZS5fY29tcGlsZSA9IGZ1bmN0aW9uIChtYXRoLCBhcmdOYW1lcykge1xuICAgIHZhciBldmFsT2JqZWN0ID0gdGhpcy5vYmplY3QuX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpO1xuXG4gICAgdmFyIGV2YWxJbmRleCA9IHRoaXMuaW5kZXggPyB0aGlzLmluZGV4Ll9jb21waWxlKG1hdGgsIGFyZ05hbWVzKSA6IG51bGw7XG5cbiAgICB2YXIgZXZhbFZhbHVlID0gdGhpcy52YWx1ZS5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7XG5cbiAgICB2YXIgbmFtZSA9IHRoaXMub2JqZWN0Lm5hbWU7XG5cbiAgICBpZiAoIXRoaXMuaW5kZXgpIHtcbiAgICAgIC8vIGFwcGx5IGEgdmFyaWFibGUgdG8gdGhlIHNjb3BlLCBmb3IgZXhhbXBsZSBgYT0yYFxuICAgICAgaWYgKCEoMCwgX2lzLmlzU3ltYm9sTm9kZSkodGhpcy5vYmplY3QpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1N5bWJvbE5vZGUgZXhwZWN0ZWQgYXMgb2JqZWN0Jyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmdW5jdGlvbiBldmFsQXNzaWdubWVudE5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfY3VzdG9tcy5zZXRTYWZlUHJvcGVydHkpKHNjb3BlLCBuYW1lLCBldmFsVmFsdWUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICh0aGlzLmluZGV4LmlzT2JqZWN0UHJvcGVydHkoKSkge1xuICAgICAgLy8gYXBwbHkgYW4gb2JqZWN0IHByb3BlcnR5IGZvciBleGFtcGxlIGBhLmI9MmBcbiAgICAgIHZhciBwcm9wID0gdGhpcy5pbmRleC5nZXRPYmplY3RQcm9wZXJ0eSgpO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxBc3NpZ25tZW50Tm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICB2YXIgb2JqZWN0ID0gZXZhbE9iamVjdChzY29wZSwgYXJncywgY29udGV4dCk7XG4gICAgICAgIHZhciB2YWx1ZSA9IGV2YWxWYWx1ZShzY29wZSwgYXJncywgY29udGV4dCk7XG4gICAgICAgIHJldHVybiAoMCwgX2N1c3RvbXMuc2V0U2FmZVByb3BlcnR5KShvYmplY3QsIHByb3AsIHZhbHVlKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzU3ltYm9sTm9kZSkodGhpcy5vYmplY3QpKSB7XG4gICAgICAvLyB1cGRhdGUgYSBtYXRyaXggc3Vic2V0LCBmb3IgZXhhbXBsZSBgYVsyXT0zYFxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxBc3NpZ25tZW50Tm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICB2YXIgY2hpbGRPYmplY3QgPSBldmFsT2JqZWN0KHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcbiAgICAgICAgdmFyIHZhbHVlID0gZXZhbFZhbHVlKHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcbiAgICAgICAgdmFyIGluZGV4ID0gZXZhbEluZGV4KHNjb3BlLCBhcmdzLCBjaGlsZE9iamVjdCk7IC8vIEltcG9ydGFudDogIHdlIHBhc3MgY2hpbGRPYmplY3QgaW5zdGVhZCBvZiBjb250ZXh0XG5cbiAgICAgICAgKDAsIF9jdXN0b21zLnNldFNhZmVQcm9wZXJ0eSkoc2NvcGUsIG5hbWUsIGFzc2lnbihjaGlsZE9iamVjdCwgaW5kZXgsIHZhbHVlKSk7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGlzQWNjZXNzb3JOb2RlKG5vZGUub2JqZWN0KSA9PT0gdHJ1ZVxuICAgICAgLy8gdXBkYXRlIGEgbWF0cml4IHN1YnNldCwgZm9yIGV4YW1wbGUgYGEuYlsyXT0zYFxuICAgICAgLy8gd2Ugd2lsbCBub3QgdXNlIHRoZSBjb21waWxlIGZ1bmN0aW9uIG9mIHRoZSBBY2Nlc3Nvck5vZGUsIGJ1dCBjb21waWxlIGl0XG4gICAgICAvLyBvdXJzZWx2ZXMgaGVyZSBhcyB3ZSBuZWVkIHRoZSBwYXJlbnQgb2JqZWN0IG9mIHRoZSBBY2Nlc3Nvck5vZGU6XG4gICAgICAvLyB3ZWUgbmVlZCB0byBhcHBseSB0aGUgdXBkYXRlZCBvYmplY3QgdG8gcGFyZW50IG9iamVjdFxuICAgICAgdmFyIGV2YWxQYXJlbnRPYmplY3QgPSB0aGlzLm9iamVjdC5vYmplY3QuX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpO1xuXG4gICAgICBpZiAodGhpcy5vYmplY3QuaW5kZXguaXNPYmplY3RQcm9wZXJ0eSgpKSB7XG4gICAgICAgIHZhciBwYXJlbnRQcm9wID0gdGhpcy5vYmplY3QuaW5kZXguZ2V0T2JqZWN0UHJvcGVydHkoKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxBc3NpZ25tZW50Tm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICAgIHZhciBwYXJlbnQgPSBldmFsUGFyZW50T2JqZWN0KHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcbiAgICAgICAgICB2YXIgY2hpbGRPYmplY3QgPSAoMCwgX2N1c3RvbXMuZ2V0U2FmZVByb3BlcnR5KShwYXJlbnQsIHBhcmVudFByb3ApO1xuICAgICAgICAgIHZhciBpbmRleCA9IGV2YWxJbmRleChzY29wZSwgYXJncywgY2hpbGRPYmplY3QpOyAvLyBJbXBvcnRhbnQ6IHdlIHBhc3MgY2hpbGRPYmplY3QgaW5zdGVhZCBvZiBjb250ZXh0XG5cbiAgICAgICAgICB2YXIgdmFsdWUgPSBldmFsVmFsdWUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpO1xuICAgICAgICAgICgwLCBfY3VzdG9tcy5zZXRTYWZlUHJvcGVydHkpKHBhcmVudCwgcGFyZW50UHJvcCwgYXNzaWduKGNoaWxkT2JqZWN0LCBpbmRleCwgdmFsdWUpKTtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBpZiBzb21lIHBhcmFtZXRlcnMgdXNlIHRoZSAnZW5kJyBwYXJhbWV0ZXIsIHdlIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBzaXplXG4gICAgICAgIHZhciBldmFsUGFyZW50SW5kZXggPSB0aGlzLm9iamVjdC5pbmRleC5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxBc3NpZ25tZW50Tm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICAgIHZhciBwYXJlbnQgPSBldmFsUGFyZW50T2JqZWN0KHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcbiAgICAgICAgICB2YXIgcGFyZW50SW5kZXggPSBldmFsUGFyZW50SW5kZXgoc2NvcGUsIGFyZ3MsIHBhcmVudCk7IC8vIEltcG9ydGFudDogd2UgcGFzcyBwYXJlbnQgaW5zdGVhZCBvZiBjb250ZXh0XG5cbiAgICAgICAgICB2YXIgY2hpbGRPYmplY3QgPSBhY2Nlc3MocGFyZW50LCBwYXJlbnRJbmRleCk7XG4gICAgICAgICAgdmFyIGluZGV4ID0gZXZhbEluZGV4KHNjb3BlLCBhcmdzLCBjaGlsZE9iamVjdCk7IC8vIEltcG9ydGFudDogIHdlIHBhc3MgY2hpbGRPYmplY3QgaW5zdGVhZCBvZiBjb250ZXh0XG5cbiAgICAgICAgICB2YXIgdmFsdWUgPSBldmFsVmFsdWUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpO1xuICAgICAgICAgIGFzc2lnbihwYXJlbnQsIHBhcmVudEluZGV4LCBhc3NpZ24oY2hpbGRPYmplY3QsIGluZGV4LCB2YWx1ZSkpO1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGVhY2ggb2YgdGhlIGNoaWxkIG5vZGVzIG9mIHRoaXMgbm9kZVxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSl9IGNhbGxiYWNrXG4gICAqL1xuXG5cbiAgQXNzaWdubWVudE5vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBjYWxsYmFjayh0aGlzLm9iamVjdCwgJ29iamVjdCcsIHRoaXMpO1xuXG4gICAgaWYgKHRoaXMuaW5kZXgpIHtcbiAgICAgIGNhbGxiYWNrKHRoaXMuaW5kZXgsICdpbmRleCcsIHRoaXMpO1xuICAgIH1cblxuICAgIGNhbGxiYWNrKHRoaXMudmFsdWUsICd2YWx1ZScsIHRoaXMpO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IEFzc2lnbm1lbnROb2RlIGhhdmluZyBpdCdzIGNoaWxkcyBiZSB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nXG4gICAqIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCBvZiB0aGUgY2hpbGRzIG9mIHRoZSBvcmlnaW5hbCBub2RlLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSk6IE5vZGV9IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHtBc3NpZ25tZW50Tm9kZX0gUmV0dXJucyBhIHRyYW5zZm9ybWVkIGNvcHkgb2YgdGhlIG5vZGVcbiAgICovXG5cblxuICBBc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgdmFyIG9iamVjdCA9IHRoaXMuX2lmTm9kZShjYWxsYmFjayh0aGlzLm9iamVjdCwgJ29iamVjdCcsIHRoaXMpKTtcblxuICAgIHZhciBpbmRleCA9IHRoaXMuaW5kZXggPyB0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy5pbmRleCwgJ2luZGV4JywgdGhpcykpIDogbnVsbDtcblxuICAgIHZhciB2YWx1ZSA9IHRoaXMuX2lmTm9kZShjYWxsYmFjayh0aGlzLnZhbHVlLCAndmFsdWUnLCB0aGlzKSk7XG5cbiAgICByZXR1cm4gbmV3IEFzc2lnbm1lbnROb2RlKG9iamVjdCwgaW5kZXgsIHZhbHVlKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoaXMgbm9kZSwgYSBzaGFsbG93IGNvcHlcbiAgICogQHJldHVybiB7QXNzaWdubWVudE5vZGV9XG4gICAqL1xuXG5cbiAgQXNzaWdubWVudE5vZGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgQXNzaWdubWVudE5vZGUodGhpcy5vYmplY3QsIHRoaXMuaW5kZXgsIHRoaXMudmFsdWUpO1xuICB9O1xuICAvKlxuICAgKiBJcyBwYXJlbnRoZXNpcyBuZWVkZWQ/XG4gICAqIEBwYXJhbSB7bm9kZX0gbm9kZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3BhcmVudGhlc2lzPSdrZWVwJ11cbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBuZWVkUGFyZW50aGVzaXMobm9kZSwgcGFyZW50aGVzaXMpIHtcbiAgICBpZiAoIXBhcmVudGhlc2lzKSB7XG4gICAgICBwYXJlbnRoZXNpcyA9ICdrZWVwJztcbiAgICB9XG5cbiAgICB2YXIgcHJlY2VkZW5jZSA9ICgwLCBfb3BlcmF0b3JzLmdldFByZWNlZGVuY2UpKG5vZGUsIHBhcmVudGhlc2lzKTtcbiAgICB2YXIgZXhwclByZWNlZGVuY2UgPSAoMCwgX29wZXJhdG9ycy5nZXRQcmVjZWRlbmNlKShub2RlLnZhbHVlLCBwYXJlbnRoZXNpcyk7XG4gICAgcmV0dXJuIHBhcmVudGhlc2lzID09PSAnYWxsJyB8fCBleHByUHJlY2VkZW5jZSAhPT0gbnVsbCAmJiBleHByUHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBBc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgb2JqZWN0ID0gdGhpcy5vYmplY3QudG9TdHJpbmcob3B0aW9ucyk7XG4gICAgdmFyIGluZGV4ID0gdGhpcy5pbmRleCA/IHRoaXMuaW5kZXgudG9TdHJpbmcob3B0aW9ucykgOiAnJztcbiAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlLnRvU3RyaW5nKG9wdGlvbnMpO1xuXG4gICAgaWYgKG5lZWRQYXJlbnRoZXNpcyh0aGlzLCBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMpKSB7XG4gICAgICB2YWx1ZSA9ICcoJyArIHZhbHVlICsgJyknO1xuICAgIH1cblxuICAgIHJldHVybiBvYmplY3QgKyBpbmRleCArICcgPSAnICsgdmFsdWU7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBub2RlXG4gICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAqL1xuXG5cbiAgQXNzaWdubWVudE5vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnQXNzaWdubWVudE5vZGUnLFxuICAgICAgb2JqZWN0OiB0aGlzLm9iamVjdCxcbiAgICAgIGluZGV4OiB0aGlzLmluZGV4LFxuICAgICAgdmFsdWU6IHRoaXMudmFsdWVcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogSW5zdGFudGlhdGUgYW4gQXNzaWdubWVudE5vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIkFzc2lnbm1lbnROb2RlXCIsIG9iamVjdDogLi4uLCBpbmRleDogLi4uLCB2YWx1ZTogLi4ufWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge0Fzc2lnbm1lbnROb2RlfVxuICAgKi9cblxuXG4gIEFzc2lnbm1lbnROb2RlLmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICByZXR1cm4gbmV3IEFzc2lnbm1lbnROb2RlKGpzb24ub2JqZWN0LCBqc29uLmluZGV4LCBqc29uLnZhbHVlKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBIVE1MIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBBc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgb2JqZWN0ID0gdGhpcy5vYmplY3QudG9IVE1MKG9wdGlvbnMpO1xuICAgIHZhciBpbmRleCA9IHRoaXMuaW5kZXggPyB0aGlzLmluZGV4LnRvSFRNTChvcHRpb25zKSA6ICcnO1xuICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWUudG9IVE1MKG9wdGlvbnMpO1xuXG4gICAgaWYgKG5lZWRQYXJlbnRoZXNpcyh0aGlzLCBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMpKSB7XG4gICAgICB2YWx1ZSA9ICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyYW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPig8L3NwYW4+JyArIHZhbHVlICsgJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJhbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KTwvc3Bhbj4nO1xuICAgIH1cblxuICAgIHJldHVybiBvYmplY3QgKyBpbmRleCArICc8c3BhbiBjbGFzcz1cIm1hdGgtb3BlcmF0b3IgbWF0aC1hc3NpZ25tZW50LW9wZXJhdG9yIG1hdGgtdmFyaWFibGUtYXNzaWdubWVudC1vcGVyYXRvciBtYXRoLWJpbmFyeS1vcGVyYXRvclwiPj08L3NwYW4+JyArIHZhbHVlO1xuICB9O1xuICAvKipcbiAgICogR2V0IExhVGVYIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBBc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUuX3RvVGV4ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgb2JqZWN0ID0gdGhpcy5vYmplY3QudG9UZXgob3B0aW9ucyk7XG4gICAgdmFyIGluZGV4ID0gdGhpcy5pbmRleCA/IHRoaXMuaW5kZXgudG9UZXgob3B0aW9ucykgOiAnJztcbiAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlLnRvVGV4KG9wdGlvbnMpO1xuXG4gICAgaWYgKG5lZWRQYXJlbnRoZXNpcyh0aGlzLCBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMpKSB7XG4gICAgICB2YWx1ZSA9IFwiXFxcXGxlZnQoXCIuY29uY2F0KHZhbHVlLCBcIlxcXFxyaWdodClcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iamVjdCArIGluZGV4ICsgJzo9JyArIHZhbHVlO1xuICB9O1xuXG4gIHJldHVybiBBc3NpZ25tZW50Tm9kZTtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZSxcbiAgaXNOb2RlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQXNzaWdubWVudE5vZGUgPSBjcmVhdGVBc3NpZ25tZW50Tm9kZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQmxvY2tOb2RlID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnQmxvY2tOb2RlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ1Jlc3VsdFNldCcsICdOb2RlJ107XG52YXIgY3JlYXRlQmxvY2tOb2RlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIFJlc3VsdFNldCA9IF9yZWYuUmVzdWx0U2V0LFxuICAgICAgTm9kZSA9IF9yZWYuTm9kZTtcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yIEJsb2NrTm9kZVxuICAgKiBAZXh0ZW5kcyB7Tm9kZX1cbiAgICogSG9sZHMgYSBzZXQgd2l0aCBibG9ja3NcbiAgICogQHBhcmFtIHtBcnJheS48e25vZGU6IE5vZGV9IHwge25vZGU6IE5vZGUsIHZpc2libGU6IGJvb2xlYW59Pn0gYmxvY2tzXG4gICAqICAgICAgICAgICAgQW4gYXJyYXkgd2l0aCBibG9ja3MsIHdoZXJlIGEgYmxvY2sgaXMgY29uc3RydWN0ZWQgYXMgYW4gT2JqZWN0XG4gICAqICAgICAgICAgICAgd2l0aCBwcm9wZXJ0aWVzIGJsb2NrLCB3aGljaCBpcyBhIE5vZGUsIGFuZCB2aXNpYmxlLCB3aGljaCBpc1xuICAgKiAgICAgICAgICAgIGEgYm9vbGVhbi4gVGhlIHByb3BlcnR5IHZpc2libGUgaXMgb3B0aW9uYWwgYW5kIGlzIHRydWUgYnkgZGVmYXVsdFxuICAgKi9cbiAgZnVuY3Rpb24gQmxvY2tOb2RlKGJsb2Nrcykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBCbG9ja05vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH0gLy8gdmFsaWRhdGUgaW5wdXQsIGNvcHkgYmxvY2tzXG5cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShibG9ja3MpKSB0aHJvdyBuZXcgRXJyb3IoJ0FycmF5IGV4cGVjdGVkJyk7XG4gICAgdGhpcy5ibG9ja3MgPSBibG9ja3MubWFwKGZ1bmN0aW9uIChibG9jaykge1xuICAgICAgdmFyIG5vZGUgPSBibG9jayAmJiBibG9jay5ub2RlO1xuICAgICAgdmFyIHZpc2libGUgPSBibG9jayAmJiBibG9jay52aXNpYmxlICE9PSB1bmRlZmluZWQgPyBibG9jay52aXNpYmxlIDogdHJ1ZTtcbiAgICAgIGlmICghKDAsIF9pcy5pc05vZGUpKG5vZGUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm9wZXJ0eSBcIm5vZGVcIiBtdXN0IGJlIGEgTm9kZScpO1xuICAgICAgaWYgKHR5cGVvZiB2aXNpYmxlICE9PSAnYm9vbGVhbicpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Byb3BlcnR5IFwidmlzaWJsZVwiIG11c3QgYmUgYSBib29sZWFuJyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICB2aXNpYmxlOiB2aXNpYmxlXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgQmxvY2tOb2RlLnByb3RvdHlwZSA9IG5ldyBOb2RlKCk7XG4gIEJsb2NrTm9kZS5wcm90b3R5cGUudHlwZSA9ICdCbG9ja05vZGUnO1xuICBCbG9ja05vZGUucHJvdG90eXBlLmlzQmxvY2tOb2RlID0gdHJ1ZTtcbiAgLyoqXG4gICAqIENvbXBpbGUgYSBub2RlIGludG8gYSBKYXZhU2NyaXB0IGZ1bmN0aW9uLlxuICAgKiBUaGlzIGJhc2ljYWxseSBwcmUtY2FsY3VsYXRlcyBhcyBtdWNoIGFzIHBvc3NpYmxlIGFuZCBvbmx5IGxlYXZlcyBvcGVuXG4gICAqIGNhbGN1bGF0aW9ucyB3aGljaCBkZXBlbmQgb24gYSBkeW5hbWljIHNjb3BlIHdpdGggdmFyaWFibGVzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gbWF0aCAgICAgTWF0aC5qcyBuYW1lc3BhY2Ugd2l0aCBmdW5jdGlvbnMgYW5kIGNvbnN0YW50cy5cbiAgICogQHBhcmFtIHtPYmplY3R9IGFyZ05hbWVzIEFuIG9iamVjdCB3aXRoIGFyZ3VtZW50IG5hbWVzIGFzIGtleSBhbmQgYHRydWVgXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBhcyB2YWx1ZS4gVXNlZCBpbiB0aGUgU3ltYm9sTm9kZSB0byBvcHRpbWl6ZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFyZ3VtZW50cyBmcm9tIHVzZXIgYXNzaWduZWQgZnVuY3Rpb25zXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VlIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUpIG9yIHNwZWNpYWwgc3ltYm9sc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSBgZW5kYCAoc2VlIEluZGV4Tm9kZSkuXG4gICAqIEByZXR1cm4ge2Z1bmN0aW9ufSBSZXR1cm5zIGEgZnVuY3Rpb24gd2hpY2ggY2FuIGJlIGNhbGxlZCBsaWtlOlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWxOb2RlKHNjb3BlOiBPYmplY3QsIGFyZ3M6IE9iamVjdCwgY29udGV4dDogKilcbiAgICovXG5cbiAgQmxvY2tOb2RlLnByb3RvdHlwZS5fY29tcGlsZSA9IGZ1bmN0aW9uIChtYXRoLCBhcmdOYW1lcykge1xuICAgIHZhciBldmFsQmxvY2tzID0gKDAsIF9hcnJheS5tYXApKHRoaXMuYmxvY2tzLCBmdW5jdGlvbiAoYmxvY2spIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGV2YWx1YXRlOiBibG9jay5ub2RlLl9jb21waWxlKG1hdGgsIGFyZ05hbWVzKSxcbiAgICAgICAgdmlzaWJsZTogYmxvY2sudmlzaWJsZVxuICAgICAgfTtcbiAgICB9KTtcbiAgICByZXR1cm4gZnVuY3Rpb24gZXZhbEJsb2NrTm9kZXMoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAoMCwgX2FycmF5LmZvckVhY2gpKGV2YWxCbG9ja3MsIGZ1bmN0aW9uIGV2YWxCbG9ja05vZGUoYmxvY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGJsb2NrLmV2YWx1YXRlKHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcblxuICAgICAgICBpZiAoYmxvY2sudmlzaWJsZSkge1xuICAgICAgICAgIHJlc3VsdHMucHVzaChyZXN1bHQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXcgUmVzdWx0U2V0KHJlc3VsdHMpO1xuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGVhY2ggb2YgdGhlIGNoaWxkIGJsb2NrcyBvZiB0aGlzIG5vZGVcbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpfSBjYWxsYmFja1xuICAgKi9cblxuXG4gIEJsb2NrTm9kZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ibG9ja3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNhbGxiYWNrKHRoaXMuYmxvY2tzW2ldLm5vZGUsICdibG9ja3NbJyArIGkgKyAnXS5ub2RlJywgdGhpcyk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IEJsb2NrTm9kZSBoYXZpbmcgaXQncyBjaGlsZHMgYmUgdGhlIHJlc3VsdHMgb2YgY2FsbGluZ1xuICAgKiB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggb2YgdGhlIGNoaWxkcyBvZiB0aGUgb3JpZ2luYWwgbm9kZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpOiBOb2RlfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7QmxvY2tOb2RlfSBSZXR1cm5zIGEgdHJhbnNmb3JtZWQgY29weSBvZiB0aGUgbm9kZVxuICAgKi9cblxuXG4gIEJsb2NrTm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgdmFyIGJsb2NrcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmJsb2Nrcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGJsb2NrID0gdGhpcy5ibG9ja3NbaV07XG5cbiAgICAgIHZhciBub2RlID0gdGhpcy5faWZOb2RlKGNhbGxiYWNrKGJsb2NrLm5vZGUsICdibG9ja3NbJyArIGkgKyAnXS5ub2RlJywgdGhpcykpO1xuXG4gICAgICBibG9ja3NbaV0gPSB7XG4gICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgIHZpc2libGU6IGJsb2NrLnZpc2libGVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBCbG9ja05vZGUoYmxvY2tzKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoaXMgbm9kZSwgYSBzaGFsbG93IGNvcHlcbiAgICogQHJldHVybiB7QmxvY2tOb2RlfVxuICAgKi9cblxuXG4gIEJsb2NrTm9kZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGJsb2NrcyA9IHRoaXMuYmxvY2tzLm1hcChmdW5jdGlvbiAoYmxvY2spIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5vZGU6IGJsb2NrLm5vZGUsXG4gICAgICAgIHZpc2libGU6IGJsb2NrLnZpc2libGVcbiAgICAgIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBCbG9ja05vZGUoYmxvY2tzKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuXG5cbiAgQmxvY2tOb2RlLnByb3RvdHlwZS5fdG9TdHJpbmcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmJsb2Nrcy5tYXAoZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICByZXR1cm4gcGFyYW0ubm9kZS50b1N0cmluZyhvcHRpb25zKSArIChwYXJhbS52aXNpYmxlID8gJycgOiAnOycpO1xuICAgIH0pLmpvaW4oJ1xcbicpO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cblxuXG4gIEJsb2NrTm9kZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdCbG9ja05vZGUnLFxuICAgICAgYmxvY2tzOiB0aGlzLmJsb2Nrc1xuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhbiBCbG9ja05vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIkJsb2NrTm9kZVwiLCBibG9ja3M6IFt7bm9kZTogLi4uLCB2aXNpYmxlOiBmYWxzZX0sIC4uLl19YCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG1hdGhqcyBpcyBvcHRpb25hbFxuICAgKiBAcmV0dXJucyB7QmxvY2tOb2RlfVxuICAgKi9cblxuXG4gIEJsb2NrTm9kZS5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgcmV0dXJuIG5ldyBCbG9ja05vZGUoanNvbi5ibG9ja3MpO1xuICB9O1xuICAvKipcbiAgICogR2V0IEhUTUwgcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuXG5cbiAgQmxvY2tOb2RlLnByb3RvdHlwZS50b0hUTUwgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmJsb2Nrcy5tYXAoZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICByZXR1cm4gcGFyYW0ubm9kZS50b0hUTUwob3B0aW9ucykgKyAocGFyYW0udmlzaWJsZSA/ICcnIDogJzxzcGFuIGNsYXNzPVwibWF0aC1zZXBhcmF0b3JcIj47PC9zcGFuPicpO1xuICAgIH0pLmpvaW4oJzxzcGFuIGNsYXNzPVwibWF0aC1zZXBhcmF0b3JcIj48YnIgLz48L3NwYW4+Jyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgTGFUZVggcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBCbG9ja05vZGUucHJvdG90eXBlLl90b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMuYmxvY2tzLm1hcChmdW5jdGlvbiAocGFyYW0pIHtcbiAgICAgIHJldHVybiBwYXJhbS5ub2RlLnRvVGV4KG9wdGlvbnMpICsgKHBhcmFtLnZpc2libGUgPyAnJyA6ICc7Jyk7XG4gICAgfSkuam9pbignXFxcXDtcXFxcO1xcbicpO1xuICB9O1xuXG4gIHJldHVybiBCbG9ja05vZGU7XG59LCB7XG4gIGlzQ2xhc3M6IHRydWUsXG4gIGlzTm9kZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUJsb2NrTm9kZSA9IGNyZWF0ZUJsb2NrTm9kZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ29uZGl0aW9uYWxOb2RlID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9vcGVyYXRvcnMgPSByZXF1aXJlKFwiLi4vb3BlcmF0b3JzXCIpO1xuXG52YXIgbmFtZSA9ICdDb25kaXRpb25hbE5vZGUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnTm9kZSddO1xudmFyIGNyZWF0ZUNvbmRpdGlvbmFsTm9kZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBOb2RlID0gX3JlZi5Ob2RlO1xuXG4gIC8qKlxuICAgKiBBIGxhenkgZXZhbHVhdGluZyBjb25kaXRpb25hbCBvcGVyYXRvcjogJ2NvbmRpdGlvbiA/IHRydWVFeHByIDogZmFsc2VFeHByJ1xuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IGNvbmRpdGlvbiAgIENvbmRpdGlvbiwgbXVzdCByZXN1bHQgaW4gYSBib29sZWFuXG4gICAqIEBwYXJhbSB7Tm9kZX0gdHJ1ZUV4cHIgICAgRXhwcmVzc2lvbiBldmFsdWF0ZWQgd2hlbiBjb25kaXRpb24gaXMgdHJ1ZVxuICAgKiBAcGFyYW0ge05vZGV9IGZhbHNlRXhwciAgIEV4cHJlc3Npb24gZXZhbHVhdGVkIHdoZW4gY29uZGl0aW9uIGlzIHRydWVcbiAgICpcbiAgICogQGNvbnN0cnVjdG9yIENvbmRpdGlvbmFsTm9kZVxuICAgKiBAZXh0ZW5kcyB7Tm9kZX1cbiAgICovXG4gIGZ1bmN0aW9uIENvbmRpdGlvbmFsTm9kZShjb25kaXRpb24sIHRydWVFeHByLCBmYWxzZUV4cHIpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQ29uZGl0aW9uYWxOb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG5cbiAgICBpZiAoISgwLCBfaXMuaXNOb2RlKShjb25kaXRpb24pKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXJhbWV0ZXIgY29uZGl0aW9uIG11c3QgYmUgYSBOb2RlJyk7XG4gICAgaWYgKCEoMCwgX2lzLmlzTm9kZSkodHJ1ZUV4cHIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXJhbWV0ZXIgdHJ1ZUV4cHIgbXVzdCBiZSBhIE5vZGUnKTtcbiAgICBpZiAoISgwLCBfaXMuaXNOb2RlKShmYWxzZUV4cHIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXJhbWV0ZXIgZmFsc2VFeHByIG11c3QgYmUgYSBOb2RlJyk7XG4gICAgdGhpcy5jb25kaXRpb24gPSBjb25kaXRpb247XG4gICAgdGhpcy50cnVlRXhwciA9IHRydWVFeHByO1xuICAgIHRoaXMuZmFsc2VFeHByID0gZmFsc2VFeHByO1xuICB9XG5cbiAgQ29uZGl0aW9uYWxOb2RlLnByb3RvdHlwZSA9IG5ldyBOb2RlKCk7XG4gIENvbmRpdGlvbmFsTm9kZS5wcm90b3R5cGUudHlwZSA9ICdDb25kaXRpb25hbE5vZGUnO1xuICBDb25kaXRpb25hbE5vZGUucHJvdG90eXBlLmlzQ29uZGl0aW9uYWxOb2RlID0gdHJ1ZTtcbiAgLyoqXG4gICAqIENvbXBpbGUgYSBub2RlIGludG8gYSBKYXZhU2NyaXB0IGZ1bmN0aW9uLlxuICAgKiBUaGlzIGJhc2ljYWxseSBwcmUtY2FsY3VsYXRlcyBhcyBtdWNoIGFzIHBvc3NpYmxlIGFuZCBvbmx5IGxlYXZlcyBvcGVuXG4gICAqIGNhbGN1bGF0aW9ucyB3aGljaCBkZXBlbmQgb24gYSBkeW5hbWljIHNjb3BlIHdpdGggdmFyaWFibGVzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gbWF0aCAgICAgTWF0aC5qcyBuYW1lc3BhY2Ugd2l0aCBmdW5jdGlvbnMgYW5kIGNvbnN0YW50cy5cbiAgICogQHBhcmFtIHtPYmplY3R9IGFyZ05hbWVzIEFuIG9iamVjdCB3aXRoIGFyZ3VtZW50IG5hbWVzIGFzIGtleSBhbmQgYHRydWVgXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBhcyB2YWx1ZS4gVXNlZCBpbiB0aGUgU3ltYm9sTm9kZSB0byBvcHRpbWl6ZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFyZ3VtZW50cyBmcm9tIHVzZXIgYXNzaWduZWQgZnVuY3Rpb25zXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VlIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUpIG9yIHNwZWNpYWwgc3ltYm9sc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSBgZW5kYCAoc2VlIEluZGV4Tm9kZSkuXG4gICAqIEByZXR1cm4ge2Z1bmN0aW9ufSBSZXR1cm5zIGEgZnVuY3Rpb24gd2hpY2ggY2FuIGJlIGNhbGxlZCBsaWtlOlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWxOb2RlKHNjb3BlOiBPYmplY3QsIGFyZ3M6IE9iamVjdCwgY29udGV4dDogKilcbiAgICovXG5cbiAgQ29uZGl0aW9uYWxOb2RlLnByb3RvdHlwZS5fY29tcGlsZSA9IGZ1bmN0aW9uIChtYXRoLCBhcmdOYW1lcykge1xuICAgIHZhciBldmFsQ29uZGl0aW9uID0gdGhpcy5jb25kaXRpb24uX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpO1xuXG4gICAgdmFyIGV2YWxUcnVlRXhwciA9IHRoaXMudHJ1ZUV4cHIuX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpO1xuXG4gICAgdmFyIGV2YWxGYWxzZUV4cHIgPSB0aGlzLmZhbHNlRXhwci5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gZXZhbENvbmRpdGlvbmFsTm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgcmV0dXJuIHRlc3RDb25kaXRpb24oZXZhbENvbmRpdGlvbihzY29wZSwgYXJncywgY29udGV4dCkpID8gZXZhbFRydWVFeHByKHNjb3BlLCBhcmdzLCBjb250ZXh0KSA6IGV2YWxGYWxzZUV4cHIoc2NvcGUsIGFyZ3MsIGNvbnRleHQpO1xuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGVhY2ggb2YgdGhlIGNoaWxkIG5vZGVzIG9mIHRoaXMgbm9kZVxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSl9IGNhbGxiYWNrXG4gICAqL1xuXG5cbiAgQ29uZGl0aW9uYWxOb2RlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgY2FsbGJhY2sodGhpcy5jb25kaXRpb24sICdjb25kaXRpb24nLCB0aGlzKTtcbiAgICBjYWxsYmFjayh0aGlzLnRydWVFeHByLCAndHJ1ZUV4cHInLCB0aGlzKTtcbiAgICBjYWxsYmFjayh0aGlzLmZhbHNlRXhwciwgJ2ZhbHNlRXhwcicsIHRoaXMpO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IENvbmRpdGlvbmFsTm9kZSBoYXZpbmcgaXQncyBjaGlsZHMgYmUgdGhlIHJlc3VsdHMgb2YgY2FsbGluZ1xuICAgKiB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggb2YgdGhlIGNoaWxkcyBvZiB0aGUgb3JpZ2luYWwgbm9kZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpOiBOb2RlfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7Q29uZGl0aW9uYWxOb2RlfSBSZXR1cm5zIGEgdHJhbnNmb3JtZWQgY29weSBvZiB0aGUgbm9kZVxuICAgKi9cblxuXG4gIENvbmRpdGlvbmFsTm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIG5ldyBDb25kaXRpb25hbE5vZGUodGhpcy5faWZOb2RlKGNhbGxiYWNrKHRoaXMuY29uZGl0aW9uLCAnY29uZGl0aW9uJywgdGhpcykpLCB0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy50cnVlRXhwciwgJ3RydWVFeHByJywgdGhpcykpLCB0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy5mYWxzZUV4cHIsICdmYWxzZUV4cHInLCB0aGlzKSkpO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgY2xvbmUgb2YgdGhpcyBub2RlLCBhIHNoYWxsb3cgY29weVxuICAgKiBAcmV0dXJuIHtDb25kaXRpb25hbE5vZGV9XG4gICAqL1xuXG5cbiAgQ29uZGl0aW9uYWxOb2RlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IENvbmRpdGlvbmFsTm9kZSh0aGlzLmNvbmRpdGlvbiwgdGhpcy50cnVlRXhwciwgdGhpcy5mYWxzZUV4cHIpO1xuICB9O1xuICAvKipcbiAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIENvbmRpdGlvbmFsTm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgcGFyZW50aGVzaXMgPSBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMgPyBvcHRpb25zLnBhcmVudGhlc2lzIDogJ2tlZXAnO1xuICAgIHZhciBwcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkodGhpcywgcGFyZW50aGVzaXMpOyAvLyBFbmNsb3NlIEFyZ3VtZW50cyBpbiBwYXJlbnRoZXNlcyBpZiB0aGV5IGFyZSBhbiBPcGVyYXRvck5vZGVcbiAgICAvLyBvciBoYXZlIGxvd2VyIG9yIGVxdWFsIHByZWNlZGVuY2VcbiAgICAvLyBOT1RFOiBlbmNsb3NpbmcgYWxsIE9wZXJhdG9yTm9kZXMgaW4gcGFyZW50aGVzZXMgaXMgYSBkZWNpc2lvblxuICAgIC8vIHB1cmVseSBiYXNlZCBvbiBhZXN0aGV0aWNzIGFuZCByZWFkYWJpbGl0eVxuXG4gICAgdmFyIGNvbmRpdGlvbiA9IHRoaXMuY29uZGl0aW9uLnRvU3RyaW5nKG9wdGlvbnMpO1xuICAgIHZhciBjb25kaXRpb25QcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkodGhpcy5jb25kaXRpb24sIHBhcmVudGhlc2lzKTtcblxuICAgIGlmIChwYXJlbnRoZXNpcyA9PT0gJ2FsbCcgfHwgdGhpcy5jb25kaXRpb24udHlwZSA9PT0gJ09wZXJhdG9yTm9kZScgfHwgY29uZGl0aW9uUHJlY2VkZW5jZSAhPT0gbnVsbCAmJiBjb25kaXRpb25QcmVjZWRlbmNlIDw9IHByZWNlZGVuY2UpIHtcbiAgICAgIGNvbmRpdGlvbiA9ICcoJyArIGNvbmRpdGlvbiArICcpJztcbiAgICB9XG5cbiAgICB2YXIgdHJ1ZUV4cHIgPSB0aGlzLnRydWVFeHByLnRvU3RyaW5nKG9wdGlvbnMpO1xuICAgIHZhciB0cnVlUHJlY2VkZW5jZSA9ICgwLCBfb3BlcmF0b3JzLmdldFByZWNlZGVuY2UpKHRoaXMudHJ1ZUV4cHIsIHBhcmVudGhlc2lzKTtcblxuICAgIGlmIChwYXJlbnRoZXNpcyA9PT0gJ2FsbCcgfHwgdGhpcy50cnVlRXhwci50eXBlID09PSAnT3BlcmF0b3JOb2RlJyB8fCB0cnVlUHJlY2VkZW5jZSAhPT0gbnVsbCAmJiB0cnVlUHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlKSB7XG4gICAgICB0cnVlRXhwciA9ICcoJyArIHRydWVFeHByICsgJyknO1xuICAgIH1cblxuICAgIHZhciBmYWxzZUV4cHIgPSB0aGlzLmZhbHNlRXhwci50b1N0cmluZyhvcHRpb25zKTtcbiAgICB2YXIgZmFsc2VQcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkodGhpcy5mYWxzZUV4cHIsIHBhcmVudGhlc2lzKTtcblxuICAgIGlmIChwYXJlbnRoZXNpcyA9PT0gJ2FsbCcgfHwgdGhpcy5mYWxzZUV4cHIudHlwZSA9PT0gJ09wZXJhdG9yTm9kZScgfHwgZmFsc2VQcmVjZWRlbmNlICE9PSBudWxsICYmIGZhbHNlUHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlKSB7XG4gICAgICBmYWxzZUV4cHIgPSAnKCcgKyBmYWxzZUV4cHIgKyAnKSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmRpdGlvbiArICcgPyAnICsgdHJ1ZUV4cHIgKyAnIDogJyArIGZhbHNlRXhwcjtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGVcbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG5cblxuICBDb25kaXRpb25hbE5vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnQ29uZGl0aW9uYWxOb2RlJyxcbiAgICAgIGNvbmRpdGlvbjogdGhpcy5jb25kaXRpb24sXG4gICAgICB0cnVlRXhwcjogdGhpcy50cnVlRXhwcixcbiAgICAgIGZhbHNlRXhwcjogdGhpcy5mYWxzZUV4cHJcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogSW5zdGFudGlhdGUgYW4gQ29uZGl0aW9uYWxOb2RlIGZyb20gaXRzIEpTT04gcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIEFuIG9iamVjdCBzdHJ1Y3R1cmVkIGxpa2VcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJDb25kaXRpb25hbE5vZGVcIiwgXCJjb25kaXRpb25cIjogLi4uLCBcInRydWVFeHByXCI6IC4uLiwgXCJmYWxzZUV4cHJcIjogLi4ufWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge0NvbmRpdGlvbmFsTm9kZX1cbiAgICovXG5cblxuICBDb25kaXRpb25hbE5vZGUuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBuZXcgQ29uZGl0aW9uYWxOb2RlKGpzb24uY29uZGl0aW9uLCBqc29uLnRydWVFeHByLCBqc29uLmZhbHNlRXhwcik7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgSFRNTCByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIENvbmRpdGlvbmFsTm9kZS5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgcGFyZW50aGVzaXMgPSBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMgPyBvcHRpb25zLnBhcmVudGhlc2lzIDogJ2tlZXAnO1xuICAgIHZhciBwcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkodGhpcywgcGFyZW50aGVzaXMpOyAvLyBFbmNsb3NlIEFyZ3VtZW50cyBpbiBwYXJlbnRoZXNlcyBpZiB0aGV5IGFyZSBhbiBPcGVyYXRvck5vZGVcbiAgICAvLyBvciBoYXZlIGxvd2VyIG9yIGVxdWFsIHByZWNlZGVuY2VcbiAgICAvLyBOT1RFOiBlbmNsb3NpbmcgYWxsIE9wZXJhdG9yTm9kZXMgaW4gcGFyZW50aGVzZXMgaXMgYSBkZWNpc2lvblxuICAgIC8vIHB1cmVseSBiYXNlZCBvbiBhZXN0aGV0aWNzIGFuZCByZWFkYWJpbGl0eVxuXG4gICAgdmFyIGNvbmRpdGlvbiA9IHRoaXMuY29uZGl0aW9uLnRvSFRNTChvcHRpb25zKTtcbiAgICB2YXIgY29uZGl0aW9uUHJlY2VkZW5jZSA9ICgwLCBfb3BlcmF0b3JzLmdldFByZWNlZGVuY2UpKHRoaXMuY29uZGl0aW9uLCBwYXJlbnRoZXNpcyk7XG5cbiAgICBpZiAocGFyZW50aGVzaXMgPT09ICdhbGwnIHx8IHRoaXMuY29uZGl0aW9uLnR5cGUgPT09ICdPcGVyYXRvck5vZGUnIHx8IGNvbmRpdGlvblByZWNlZGVuY2UgIT09IG51bGwgJiYgY29uZGl0aW9uUHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlKSB7XG4gICAgICBjb25kaXRpb24gPSAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4oPC9zcGFuPicgKyBjb25kaXRpb24gKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4pPC9zcGFuPic7XG4gICAgfVxuXG4gICAgdmFyIHRydWVFeHByID0gdGhpcy50cnVlRXhwci50b0hUTUwob3B0aW9ucyk7XG4gICAgdmFyIHRydWVQcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkodGhpcy50cnVlRXhwciwgcGFyZW50aGVzaXMpO1xuXG4gICAgaWYgKHBhcmVudGhlc2lzID09PSAnYWxsJyB8fCB0aGlzLnRydWVFeHByLnR5cGUgPT09ICdPcGVyYXRvck5vZGUnIHx8IHRydWVQcmVjZWRlbmNlICE9PSBudWxsICYmIHRydWVQcmVjZWRlbmNlIDw9IHByZWNlZGVuY2UpIHtcbiAgICAgIHRydWVFeHByID0gJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KDwvc3Bhbj4nICsgdHJ1ZUV4cHIgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4pPC9zcGFuPic7XG4gICAgfVxuXG4gICAgdmFyIGZhbHNlRXhwciA9IHRoaXMuZmFsc2VFeHByLnRvSFRNTChvcHRpb25zKTtcbiAgICB2YXIgZmFsc2VQcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkodGhpcy5mYWxzZUV4cHIsIHBhcmVudGhlc2lzKTtcblxuICAgIGlmIChwYXJlbnRoZXNpcyA9PT0gJ2FsbCcgfHwgdGhpcy5mYWxzZUV4cHIudHlwZSA9PT0gJ09wZXJhdG9yTm9kZScgfHwgZmFsc2VQcmVjZWRlbmNlICE9PSBudWxsICYmIGZhbHNlUHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlKSB7XG4gICAgICBmYWxzZUV4cHIgPSAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4oPC9zcGFuPicgKyBmYWxzZUV4cHIgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4pPC9zcGFuPic7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmRpdGlvbiArICc8c3BhbiBjbGFzcz1cIm1hdGgtb3BlcmF0b3IgbWF0aC1jb25kaXRpb25hbC1vcGVyYXRvclwiPj88L3NwYW4+JyArIHRydWVFeHByICsgJzxzcGFuIGNsYXNzPVwibWF0aC1vcGVyYXRvciBtYXRoLWNvbmRpdGlvbmFsLW9wZXJhdG9yXCI+Ojwvc3Bhbj4nICsgZmFsc2VFeHByO1xuICB9O1xuICAvKipcbiAgICogR2V0IExhVGVYIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqL1xuXG5cbiAgQ29uZGl0aW9uYWxOb2RlLnByb3RvdHlwZS5fdG9UZXggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHJldHVybiAnXFxcXGJlZ2lue2Nhc2VzfSB7JyArIHRoaXMudHJ1ZUV4cHIudG9UZXgob3B0aW9ucykgKyAnfSwgJlxcXFxxdWFke1xcXFx0ZXh0e2lmIH1cXFxcOycgKyB0aGlzLmNvbmRpdGlvbi50b1RleChvcHRpb25zKSArICd9XFxcXFxcXFx7JyArIHRoaXMuZmFsc2VFeHByLnRvVGV4KG9wdGlvbnMpICsgJ30sICZcXFxccXVhZHtcXFxcdGV4dHtvdGhlcndpc2V9fVxcXFxlbmR7Y2FzZXN9JztcbiAgfTtcbiAgLyoqXG4gICAqIFRlc3Qgd2hldGhlciBhIGNvbmRpdGlvbiBpcyBtZXRcbiAgICogQHBhcmFtIHsqfSBjb25kaXRpb25cbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgY29uZGl0aW9uIGlzIHRydWUgb3Igbm9uLXplcm8sIGVsc2UgZmFsc2VcbiAgICovXG5cblxuICBmdW5jdGlvbiB0ZXN0Q29uZGl0aW9uKGNvbmRpdGlvbikge1xuICAgIGlmICh0eXBlb2YgY29uZGl0aW9uID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgY29uZGl0aW9uID09PSAnYm9vbGVhbicgfHwgdHlwZW9mIGNvbmRpdGlvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiAhIWNvbmRpdGlvbjtcbiAgICB9XG5cbiAgICBpZiAoY29uZGl0aW9uKSB7XG4gICAgICBpZiAoKDAsIF9pcy5pc0JpZ051bWJlcikoY29uZGl0aW9uKSkge1xuICAgICAgICByZXR1cm4gIWNvbmRpdGlvbi5pc1plcm8oKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCgwLCBfaXMuaXNDb21wbGV4KShjb25kaXRpb24pKSB7XG4gICAgICAgIHJldHVybiAhIShjb25kaXRpb24ucmUgfHwgY29uZGl0aW9uLmltKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCgwLCBfaXMuaXNVbml0KShjb25kaXRpb24pKSB7XG4gICAgICAgIHJldHVybiAhIWNvbmRpdGlvbi52YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29uZGl0aW9uID09PSBudWxsIHx8IGNvbmRpdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5zdXBwb3J0ZWQgdHlwZSBvZiBjb25kaXRpb24gXCInICsgKDAsIF9pcy50eXBlT2YpKGNvbmRpdGlvbikgKyAnXCInKTtcbiAgfVxuXG4gIHJldHVybiBDb25kaXRpb25hbE5vZGU7XG59LCB7XG4gIGlzQ2xhc3M6IHRydWUsXG4gIGlzTm9kZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNvbmRpdGlvbmFsTm9kZSA9IGNyZWF0ZUNvbmRpdGlvbmFsTm9kZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ29uc3RhbnROb2RlID0gdm9pZCAwO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfbGF0ZXggPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbGF0ZXhcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdDb25zdGFudE5vZGUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnTm9kZSddO1xudmFyIGNyZWF0ZUNvbnN0YW50Tm9kZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBOb2RlID0gX3JlZi5Ob2RlO1xuXG4gIC8qKlxuICAgKiBBIENvbnN0YW50Tm9kZSBob2xkcyBhIGNvbnN0YW50IHZhbHVlIGxpa2UgYSBudW1iZXIgb3Igc3RyaW5nLlxuICAgKlxuICAgKiBVc2FnZTpcbiAgICpcbiAgICogICAgIG5ldyBDb25zdGFudE5vZGUoMi4zKVxuICAgKiAgICAgbmV3IENvbnN0YW50Tm9kZSgnaGVsbG8nKVxuICAgKlxuICAgKiBAcGFyYW0geyp9IHZhbHVlICAgIFZhbHVlIGNhbiBiZSBhbnkgdHlwZSAobnVtYmVyLCBCaWdOdW1iZXIsIHN0cmluZywgLi4uKVxuICAgKiBAY29uc3RydWN0b3IgQ29uc3RhbnROb2RlXG4gICAqIEBleHRlbmRzIHtOb2RlfVxuICAgKi9cbiAgZnVuY3Rpb24gQ29uc3RhbnROb2RlKHZhbHVlKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIENvbnN0YW50Tm9kZSkpIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7XG4gICAgfVxuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICAgIC8vIFRPRE86IHJlbW92ZSBkZXByZWNhdGlvbiBlcnJvciBzb21lIGRheSAoY3JlYXRlZCAyMDE4LTAxLTIzKVxuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCduZXcgQ29uc3RhbnROb2RlKHZhbHVlU3RyLCB2YWx1ZVR5cGUpIGlzIG5vdCBzdXBwb3J0ZWQgYW55bW9yZSBzaW5jZSBtYXRoIHY0LjAuMC4gVXNlIG5ldyBDb25zdGFudE5vZGUodmFsdWUpIGluc3RlYWQsIHdoZXJlIHZhbHVlIGlzIGEgbm9uLXN0cmluZ2lmaWVkIHZhbHVlLicpO1xuICAgIH1cblxuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIENvbnN0YW50Tm9kZS5wcm90b3R5cGUgPSBuZXcgTm9kZSgpO1xuICBDb25zdGFudE5vZGUucHJvdG90eXBlLnR5cGUgPSAnQ29uc3RhbnROb2RlJztcbiAgQ29uc3RhbnROb2RlLnByb3RvdHlwZS5pc0NvbnN0YW50Tm9kZSA9IHRydWU7XG4gIC8qKlxuICAgKiBDb21waWxlIGEgbm9kZSBpbnRvIGEgSmF2YVNjcmlwdCBmdW5jdGlvbi5cbiAgICogVGhpcyBiYXNpY2FsbHkgcHJlLWNhbGN1bGF0ZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSBhbmQgb25seSBsZWF2ZXMgb3BlblxuICAgKiBjYWxjdWxhdGlvbnMgd2hpY2ggZGVwZW5kIG9uIGEgZHluYW1pYyBzY29wZSB3aXRoIHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG1hdGggICAgIE1hdGguanMgbmFtZXNwYWNlIHdpdGggZnVuY3Rpb25zIGFuZCBjb25zdGFudHMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdOYW1lcyBBbiBvYmplY3Qgd2l0aCBhcmd1bWVudCBuYW1lcyBhcyBrZXkgYW5kIGB0cnVlYFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdmFsdWUuIFVzZWQgaW4gdGhlIFN5bWJvbE5vZGUgdG8gb3B0aW1pemVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudHMgZnJvbSB1c2VyIGFzc2lnbmVkIGZ1bmN0aW9uc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZSBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKSBvciBzcGVjaWFsIHN5bWJvbHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UgYGVuZGAgKHNlZSBJbmRleE5vZGUpLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgbGlrZTpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICBldmFsTm9kZShzY29wZTogT2JqZWN0LCBhcmdzOiBPYmplY3QsIGNvbnRleHQ6ICopXG4gICAqL1xuXG4gIENvbnN0YW50Tm9kZS5wcm90b3R5cGUuX2NvbXBpbGUgPSBmdW5jdGlvbiAobWF0aCwgYXJnTmFtZXMpIHtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgIHJldHVybiBmdW5jdGlvbiBldmFsQ29uc3RhbnROb2RlKCkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGVhY2ggb2YgdGhlIGNoaWxkIG5vZGVzIG9mIHRoaXMgbm9kZVxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSl9IGNhbGxiYWNrXG4gICAqL1xuXG5cbiAgQ29uc3RhbnROb2RlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7fSAvLyBub3RoaW5nIHRvIGRvLCB3ZSBkb24ndCBoYXZlIGNoaWxkc1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgQ29uc3RhbnROb2RlIGhhdmluZyBpdCdzIGNoaWxkcyBiZSB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nXG4gICAqIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCBvZiB0aGUgY2hpbGRzIG9mIHRoZSBvcmlnaW5hbCBub2RlLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSkgOiBOb2RlfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7Q29uc3RhbnROb2RlfSBSZXR1cm5zIGEgY2xvbmUgb2YgdGhlIG5vZGVcbiAgICovXG4gIDtcblxuICBDb25zdGFudE5vZGUucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIG5vZGUsIGEgc2hhbGxvdyBjb3B5XG4gICAqIEByZXR1cm4ge0NvbnN0YW50Tm9kZX1cbiAgICovXG5cblxuICBDb25zdGFudE5vZGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgQ29uc3RhbnROb2RlKHRoaXMudmFsdWUpO1xuICB9O1xuICAvKipcbiAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIENvbnN0YW50Tm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gKDAsIF9zdHJpbmcuZm9ybWF0KSh0aGlzLnZhbHVlLCBvcHRpb25zKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBIVE1MIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqL1xuXG5cbiAgQ29uc3RhbnROb2RlLnByb3RvdHlwZS50b0hUTUwgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciB2YWx1ZSA9IHRoaXMuX3RvU3RyaW5nKG9wdGlvbnMpO1xuXG4gICAgc3dpdGNoICgoMCwgX2lzLnR5cGVPZikodGhpcy52YWx1ZSkpIHtcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICBjYXNlICdCaWdOdW1iZXInOlxuICAgICAgY2FzZSAnRnJhY3Rpb24nOlxuICAgICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1udW1iZXJcIj4nICsgdmFsdWUgKyAnPC9zcGFuPic7XG5cbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJtYXRoLXN0cmluZ1wiPicgKyB2YWx1ZSArICc8L3NwYW4+JztcblxuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJtYXRoLWJvb2xlYW5cIj4nICsgdmFsdWUgKyAnPC9zcGFuPic7XG5cbiAgICAgIGNhc2UgJ251bGwnOlxuICAgICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1udWxsLXN5bWJvbFwiPicgKyB2YWx1ZSArICc8L3NwYW4+JztcblxuICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgcmV0dXJuICc8c3BhbiBjbGFzcz1cIm1hdGgtdW5kZWZpbmVkXCI+JyArIHZhbHVlICsgJzwvc3Bhbj4nO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1zeW1ib2xcIj4nICsgdmFsdWUgKyAnPC9zcGFuPic7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cblxuXG4gIENvbnN0YW50Tm9kZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdDb25zdGFudE5vZGUnLFxuICAgICAgdmFsdWU6IHRoaXMudmFsdWVcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogSW5zdGFudGlhdGUgYSBDb25zdGFudE5vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIlN5bWJvbE5vZGVcIiwgdmFsdWU6IDIuM31gLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgbWF0aGpzIGlzIG9wdGlvbmFsXG4gICAqIEByZXR1cm5zIHtDb25zdGFudE5vZGV9XG4gICAqL1xuXG5cbiAgQ29uc3RhbnROb2RlLmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICByZXR1cm4gbmV3IENvbnN0YW50Tm9kZShqc29uLnZhbHVlKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBMYVRlWCByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIENvbnN0YW50Tm9kZS5wcm90b3R5cGUuX3RvVGV4ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLl90b1N0cmluZyhvcHRpb25zKTtcblxuICAgIHN3aXRjaCAoKDAsIF9pcy50eXBlT2YpKHRoaXMudmFsdWUpKSB7XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICByZXR1cm4gJ1xcXFxtYXRodHR7JyArICgwLCBfbGF0ZXguZXNjYXBlTGF0ZXgpKHZhbHVlKSArICd9JztcblxuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIGNhc2UgJ0JpZ051bWJlcic6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoIWlzRmluaXRlKHRoaXMudmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZS52YWx1ZU9mKCkgPCAwID8gJy1cXFxcaW5mdHknIDogJ1xcXFxpbmZ0eSc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGluZGV4ID0gdmFsdWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdlJyk7XG5cbiAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUuc3Vic3RyaW5nKDAsIGluZGV4KSArICdcXFxcY2RvdDEwXnsnICsgdmFsdWUuc3Vic3RyaW5nKGluZGV4ICsgMSkgKyAnfSc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcblxuICAgICAgY2FzZSAnRnJhY3Rpb24nOlxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZS50b0xhdGV4KCk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIENvbnN0YW50Tm9kZTtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZSxcbiAgaXNOb2RlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ29uc3RhbnROb2RlID0gY3JlYXRlQ29uc3RhbnROb2RlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVGdW5jdGlvbkFzc2lnbm1lbnROb2RlID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2tleXdvcmRzID0gcmVxdWlyZShcIi4uL2tleXdvcmRzXCIpO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfbGF0ZXggPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbGF0ZXhcIik7XG5cbnZhciBfb3BlcmF0b3JzID0gcmVxdWlyZShcIi4uL29wZXJhdG9yc1wiKTtcblxudmFyIF9jdXN0b21zID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2N1c3RvbXNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdGdW5jdGlvbkFzc2lnbm1lbnROb2RlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ05vZGUnXTtcbnZhciBjcmVhdGVGdW5jdGlvbkFzc2lnbm1lbnROb2RlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIE5vZGUgPSBfcmVmLk5vZGU7XG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvciBGdW5jdGlvbkFzc2lnbm1lbnROb2RlXG4gICAqIEBleHRlbmRzIHtOb2RlfVxuICAgKiBGdW5jdGlvbiBhc3NpZ25tZW50XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lICAgICAgICAgICBGdW5jdGlvbiBuYW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nW10gfCBBcnJheS48e25hbWU6IHN0cmluZywgdHlwZTogc3RyaW5nfT59IHBhcmFtc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkgd2l0aCBmdW5jdGlvbiBwYXJhbWV0ZXIgbmFtZXMsIG9yIGFuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSB3aXRoIG9iamVjdHMgY29udGFpbmluZyB0aGUgbmFtZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHR5cGUgb2YgdGhlIHBhcmFtZXRlclxuICAgKiBAcGFyYW0ge05vZGV9IGV4cHIgICAgICAgICAgICAgVGhlIGZ1bmN0aW9uIGV4cHJlc3Npb25cbiAgICovXG4gIGZ1bmN0aW9uIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUobmFtZSwgcGFyYW1zLCBleHByKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH0gLy8gdmFsaWRhdGUgaW5wdXRcblxuXG4gICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykgdGhyb3cgbmV3IFR5cGVFcnJvcignU3RyaW5nIGV4cGVjdGVkIGZvciBwYXJhbWV0ZXIgXCJuYW1lXCInKTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocGFyYW1zKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgY29udGFpbmluZyBzdHJpbmdzIG9yIG9iamVjdHMgZXhwZWN0ZWQgZm9yIHBhcmFtZXRlciBcInBhcmFtc1wiJyk7XG4gICAgaWYgKCEoMCwgX2lzLmlzTm9kZSkoZXhwcikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vZGUgZXhwZWN0ZWQgZm9yIHBhcmFtZXRlciBcImV4cHJcIicpO1xuICAgIGlmIChuYW1lIGluIF9rZXl3b3Jkcy5rZXl3b3JkcykgdGhyb3cgbmV3IEVycm9yKCdJbGxlZ2FsIGZ1bmN0aW9uIG5hbWUsIFwiJyArIG5hbWUgKyAnXCIgaXMgYSByZXNlcnZlZCBrZXl3b3JkJyk7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLnBhcmFtcyA9IHBhcmFtcy5tYXAoZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICByZXR1cm4gcGFyYW0gJiYgcGFyYW0ubmFtZSB8fCBwYXJhbTtcbiAgICB9KTtcbiAgICB0aGlzLnR5cGVzID0gcGFyYW1zLm1hcChmdW5jdGlvbiAocGFyYW0pIHtcbiAgICAgIHJldHVybiBwYXJhbSAmJiBwYXJhbS50eXBlIHx8ICdhbnknO1xuICAgIH0pO1xuICAgIHRoaXMuZXhwciA9IGV4cHI7XG4gIH1cblxuICBGdW5jdGlvbkFzc2lnbm1lbnROb2RlLnByb3RvdHlwZSA9IG5ldyBOb2RlKCk7XG4gIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUucHJvdG90eXBlLnR5cGUgPSAnRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSc7XG4gIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUucHJvdG90eXBlLmlzRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSA9IHRydWU7XG4gIC8qKlxuICAgKiBDb21waWxlIGEgbm9kZSBpbnRvIGEgSmF2YVNjcmlwdCBmdW5jdGlvbi5cbiAgICogVGhpcyBiYXNpY2FsbHkgcHJlLWNhbGN1bGF0ZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSBhbmQgb25seSBsZWF2ZXMgb3BlblxuICAgKiBjYWxjdWxhdGlvbnMgd2hpY2ggZGVwZW5kIG9uIGEgZHluYW1pYyBzY29wZSB3aXRoIHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG1hdGggICAgIE1hdGguanMgbmFtZXNwYWNlIHdpdGggZnVuY3Rpb25zIGFuZCBjb25zdGFudHMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdOYW1lcyBBbiBvYmplY3Qgd2l0aCBhcmd1bWVudCBuYW1lcyBhcyBrZXkgYW5kIGB0cnVlYFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdmFsdWUuIFVzZWQgaW4gdGhlIFN5bWJvbE5vZGUgdG8gb3B0aW1pemVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudHMgZnJvbSB1c2VyIGFzc2lnbmVkIGZ1bmN0aW9uc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZSBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKSBvciBzcGVjaWFsIHN5bWJvbHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UgYGVuZGAgKHNlZSBJbmRleE5vZGUpLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgbGlrZTpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICBldmFsTm9kZShzY29wZTogT2JqZWN0LCBhcmdzOiBPYmplY3QsIGNvbnRleHQ6ICopXG4gICAqL1xuXG4gIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUucHJvdG90eXBlLl9jb21waWxlID0gZnVuY3Rpb24gKG1hdGgsIGFyZ05hbWVzKSB7XG4gICAgdmFyIGNoaWxkQXJnTmFtZXMgPSBPYmplY3QuY3JlYXRlKGFyZ05hbWVzKTtcbiAgICAoMCwgX2FycmF5LmZvckVhY2gpKHRoaXMucGFyYW1zLCBmdW5jdGlvbiAocGFyYW0pIHtcbiAgICAgIGNoaWxkQXJnTmFtZXNbcGFyYW1dID0gdHJ1ZTtcbiAgICB9KTsgLy8gY29tcGlsZSB0aGUgZnVuY3Rpb24gZXhwcmVzc2lvbiB3aXRoIHRoZSBjaGlsZCBhcmdzXG5cbiAgICB2YXIgZXZhbEV4cHIgPSB0aGlzLmV4cHIuX2NvbXBpbGUobWF0aCwgY2hpbGRBcmdOYW1lcyk7XG5cbiAgICB2YXIgbmFtZSA9IHRoaXMubmFtZTtcbiAgICB2YXIgcGFyYW1zID0gdGhpcy5wYXJhbXM7XG4gICAgdmFyIHNpZ25hdHVyZSA9ICgwLCBfYXJyYXkuam9pbikodGhpcy50eXBlcywgJywnKTtcbiAgICB2YXIgc3ludGF4ID0gbmFtZSArICcoJyArICgwLCBfYXJyYXkuam9pbikodGhpcy5wYXJhbXMsICcsICcpICsgJyknO1xuICAgIHJldHVybiBmdW5jdGlvbiBldmFsRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgdmFyIHNpZ25hdHVyZXMgPSB7fTtcblxuICAgICAgc2lnbmF0dXJlc1tzaWduYXR1cmVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY2hpbGRBcmdzID0gT2JqZWN0LmNyZWF0ZShhcmdzKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNoaWxkQXJnc1twYXJhbXNbaV1dID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGV2YWxFeHByKHNjb3BlLCBjaGlsZEFyZ3MsIGNvbnRleHQpO1xuICAgICAgfTtcblxuICAgICAgdmFyIGZuID0gdHlwZWQobmFtZSwgc2lnbmF0dXJlcyk7XG4gICAgICBmbi5zeW50YXggPSBzeW50YXg7XG4gICAgICAoMCwgX2N1c3RvbXMuc2V0U2FmZVByb3BlcnR5KShzY29wZSwgbmFtZSwgZm4pO1xuICAgICAgcmV0dXJuIGZuO1xuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGVhY2ggb2YgdGhlIGNoaWxkIG5vZGVzIG9mIHRoaXMgbm9kZVxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSl9IGNhbGxiYWNrXG4gICAqL1xuXG5cbiAgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIGNhbGxiYWNrKHRoaXMuZXhwciwgJ2V4cHInLCB0aGlzKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBGdW5jdGlvbkFzc2lnbm1lbnROb2RlIGhhdmluZyBpdCdzIGNoaWxkcyBiZSB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nXG4gICAqIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCBvZiB0aGUgY2hpbGRzIG9mIHRoZSBvcmlnaW5hbCBub2RlLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSk6IE5vZGV9IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbkFzc2lnbm1lbnROb2RlfSBSZXR1cm5zIGEgdHJhbnNmb3JtZWQgY29weSBvZiB0aGUgbm9kZVxuICAgKi9cblxuXG4gIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHZhciBleHByID0gdGhpcy5faWZOb2RlKGNhbGxiYWNrKHRoaXMuZXhwciwgJ2V4cHInLCB0aGlzKSk7XG5cbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uQXNzaWdubWVudE5vZGUodGhpcy5uYW1lLCB0aGlzLnBhcmFtcy5zbGljZSgwKSwgZXhwcik7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIG5vZGUsIGEgc2hhbGxvdyBjb3B5XG4gICAqIEByZXR1cm4ge0Z1bmN0aW9uQXNzaWdubWVudE5vZGV9XG4gICAqL1xuXG5cbiAgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKHRoaXMubmFtZSwgdGhpcy5wYXJhbXMuc2xpY2UoMCksIHRoaXMuZXhwcik7XG4gIH07XG4gIC8qKlxuICAgKiBJcyBwYXJlbnRoZXNpcyBuZWVkZWQ/XG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyZW50aGVzaXNcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBuZWVkUGFyZW50aGVzaXMobm9kZSwgcGFyZW50aGVzaXMpIHtcbiAgICB2YXIgcHJlY2VkZW5jZSA9ICgwLCBfb3BlcmF0b3JzLmdldFByZWNlZGVuY2UpKG5vZGUsIHBhcmVudGhlc2lzKTtcbiAgICB2YXIgZXhwclByZWNlZGVuY2UgPSAoMCwgX29wZXJhdG9ycy5nZXRQcmVjZWRlbmNlKShub2RlLmV4cHIsIHBhcmVudGhlc2lzKTtcbiAgICByZXR1cm4gcGFyZW50aGVzaXMgPT09ICdhbGwnIHx8IGV4cHJQcmVjZWRlbmNlICE9PSBudWxsICYmIGV4cHJQcmVjZWRlbmNlIDw9IHByZWNlZGVuY2U7XG4gIH1cbiAgLyoqXG4gICAqIGdldCBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBGdW5jdGlvbkFzc2lnbm1lbnROb2RlLnByb3RvdHlwZS5fdG9TdHJpbmcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBwYXJlbnRoZXNpcyA9IG9wdGlvbnMgJiYgb3B0aW9ucy5wYXJlbnRoZXNpcyA/IG9wdGlvbnMucGFyZW50aGVzaXMgOiAna2VlcCc7XG4gICAgdmFyIGV4cHIgPSB0aGlzLmV4cHIudG9TdHJpbmcob3B0aW9ucyk7XG5cbiAgICBpZiAobmVlZFBhcmVudGhlc2lzKHRoaXMsIHBhcmVudGhlc2lzKSkge1xuICAgICAgZXhwciA9ICcoJyArIGV4cHIgKyAnKSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubmFtZSArICcoJyArIHRoaXMucGFyYW1zLmpvaW4oJywgJykgKyAnKSA9ICcgKyBleHByO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cblxuXG4gIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdHlwZXMgPSB0aGlzLnR5cGVzO1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdGdW5jdGlvbkFzc2lnbm1lbnROb2RlJyxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIHBhcmFtczogdGhpcy5wYXJhbXMubWFwKGZ1bmN0aW9uIChwYXJhbSwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBwYXJhbSxcbiAgICAgICAgICB0eXBlOiB0eXBlc1tpbmRleF1cbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICAgZXhwcjogdGhpcy5leHByXG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIEluc3RhbnRpYXRlIGFuIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIkZ1bmN0aW9uQXNzaWdubWVudE5vZGVcIiwgbmFtZTogLi4uLCBwYXJhbXM6IC4uLiwgZXhwcjogLi4ufWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge0Z1bmN0aW9uQXNzaWdubWVudE5vZGV9XG4gICAqL1xuXG5cbiAgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZS5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKGpzb24ubmFtZSwganNvbi5wYXJhbXMsIGpzb24uZXhwcik7XG4gIH07XG4gIC8qKlxuICAgKiBnZXQgSFRNTCByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUucHJvdG90eXBlLnRvSFRNTCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIHBhcmVudGhlc2lzID0gb3B0aW9ucyAmJiBvcHRpb25zLnBhcmVudGhlc2lzID8gb3B0aW9ucy5wYXJlbnRoZXNpcyA6ICdrZWVwJztcbiAgICB2YXIgcGFyYW1zID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFyYW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBwYXJhbXMucHVzaCgnPHNwYW4gY2xhc3M9XCJtYXRoLXN5bWJvbCBtYXRoLXBhcmFtZXRlclwiPicgKyAoMCwgX3N0cmluZy5lc2NhcGUpKHRoaXMucGFyYW1zW2ldKSArICc8L3NwYW4+Jyk7XG4gICAgfVxuXG4gICAgdmFyIGV4cHIgPSB0aGlzLmV4cHIudG9IVE1MKG9wdGlvbnMpO1xuXG4gICAgaWYgKG5lZWRQYXJlbnRoZXNpcyh0aGlzLCBwYXJlbnRoZXNpcykpIHtcbiAgICAgIGV4cHIgPSAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4oPC9zcGFuPicgKyBleHByICsgJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KTwvc3Bhbj4nO1xuICAgIH1cblxuICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJtYXRoLWZ1bmN0aW9uXCI+JyArICgwLCBfc3RyaW5nLmVzY2FwZSkodGhpcy5uYW1lKSArICc8L3NwYW4+JyArICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPig8L3NwYW4+JyArIHBhcmFtcy5qb2luKCc8c3BhbiBjbGFzcz1cIm1hdGgtc2VwYXJhdG9yXCI+LDwvc3Bhbj4nKSArICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPik8L3NwYW4+PHNwYW4gY2xhc3M9XCJtYXRoLW9wZXJhdG9yIG1hdGgtYXNzaWdubWVudC1vcGVyYXRvciBtYXRoLXZhcmlhYmxlLWFzc2lnbm1lbnQtb3BlcmF0b3IgbWF0aC1iaW5hcnktb3BlcmF0b3JcIj49PC9zcGFuPicgKyBleHByO1xuICB9O1xuICAvKipcbiAgICogZ2V0IExhVGVYIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqL1xuXG5cbiAgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUuX3RvVGV4ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgcGFyZW50aGVzaXMgPSBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMgPyBvcHRpb25zLnBhcmVudGhlc2lzIDogJ2tlZXAnO1xuICAgIHZhciBleHByID0gdGhpcy5leHByLnRvVGV4KG9wdGlvbnMpO1xuXG4gICAgaWYgKG5lZWRQYXJlbnRoZXNpcyh0aGlzLCBwYXJlbnRoZXNpcykpIHtcbiAgICAgIGV4cHIgPSBcIlxcXFxsZWZ0KFwiLmNvbmNhdChleHByLCBcIlxcXFxyaWdodClcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuICdcXFxcbWF0aHJteycgKyB0aGlzLm5hbWUgKyAnfVxcXFxsZWZ0KCcgKyB0aGlzLnBhcmFtcy5tYXAoX2xhdGV4LnRvU3ltYm9sKS5qb2luKCcsJykgKyAnXFxcXHJpZ2h0KTo9JyArIGV4cHI7XG4gIH07XG5cbiAgcmV0dXJuIEZ1bmN0aW9uQXNzaWdubWVudE5vZGU7XG59LCB7XG4gIGlzQ2xhc3M6IHRydWUsXG4gIGlzTm9kZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUZ1bmN0aW9uQXNzaWdubWVudE5vZGUgPSBjcmVhdGVGdW5jdGlvbkFzc2lnbm1lbnROb2RlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVGdW5jdGlvbk5vZGUgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3N0cmluZ1wiKTtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2N1c3RvbXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY3VzdG9tc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfbGF0ZXggPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbGF0ZXhcIik7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxudmFyIG5hbWUgPSAnRnVuY3Rpb25Ob2RlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ21hdGgnLCAnTm9kZScsICdTeW1ib2xOb2RlJ107XG52YXIgY3JlYXRlRnVuY3Rpb25Ob2RlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIG1hdGggPSBfcmVmLm1hdGgsXG4gICAgICBOb2RlID0gX3JlZi5Ob2RlLFxuICAgICAgU3ltYm9sTm9kZSA9IF9yZWYuU3ltYm9sTm9kZTtcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yIEZ1bmN0aW9uTm9kZVxuICAgKiBAZXh0ZW5kcyB7Li9Ob2RlfVxuICAgKiBpbnZva2UgYSBsaXN0IHdpdGggYXJndW1lbnRzIG9uIGEgbm9kZVxuICAgKiBAcGFyYW0gey4vTm9kZSB8IHN0cmluZ30gZm4gTm9kZSByZXNvbHZpbmcgd2l0aCBhIGZ1bmN0aW9uIG9uIHdoaWNoIHRvIGludm9rZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGFyZ3VtZW50cywgdHlwaWNhbGx5IGEgU3ltYm9Ob2RlIG9yIEFjY2Vzc29yTm9kZVxuICAgKiBAcGFyYW0gey4vTm9kZVtdfSBhcmdzXG4gICAqL1xuICBmdW5jdGlvbiBGdW5jdGlvbk5vZGUoZm4sIGFyZ3MpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRnVuY3Rpb25Ob2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnc3RyaW5nJykge1xuICAgICAgZm4gPSBuZXcgU3ltYm9sTm9kZShmbik7XG4gICAgfSAvLyB2YWxpZGF0ZSBpbnB1dFxuXG5cbiAgICBpZiAoISgwLCBfaXMuaXNOb2RlKShmbikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vZGUgZXhwZWN0ZWQgYXMgcGFyYW1ldGVyIFwiZm5cIicpO1xuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFyZ3MpIHx8ICFhcmdzLmV2ZXJ5KF9pcy5pc05vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSBjb250YWluaW5nIE5vZGVzIGV4cGVjdGVkIGZvciBwYXJhbWV0ZXIgXCJhcmdzXCInKTtcbiAgICB9XG5cbiAgICB0aGlzLmZuID0gZm47XG4gICAgdGhpcy5hcmdzID0gYXJncyB8fCBbXTsgLy8gcmVhZG9ubHkgcHJvcGVydHkgbmFtZVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICduYW1lJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZuLm5hbWUgfHwgJyc7XG4gICAgICB9LmJpbmQodGhpcyksXG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldCgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgYXNzaWduIGEgbmV3IG5hbWUsIG5hbWUgaXMgcmVhZC1vbmx5Jyk7XG4gICAgICB9XG4gICAgfSk7IC8vIFRPRE86IGRlcHJlY2F0ZWQgc2luY2UgdjMsIHJlbW92ZSBzb21lIGRheVxuXG4gICAgdmFyIGRlcHJlY2F0ZWQgPSBmdW5jdGlvbiBkZXByZWNhdGVkKCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm9wZXJ0eSBgRnVuY3Rpb25Ob2RlLm9iamVjdGAgaXMgZGVwcmVjYXRlZCwgdXNlIGBGdW5jdGlvbk5vZGUuZm5gIGluc3RlYWQnKTtcbiAgICB9O1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdvYmplY3QnLCB7XG4gICAgICBnZXQ6IGRlcHJlY2F0ZWQsXG4gICAgICBzZXQ6IGRlcHJlY2F0ZWRcbiAgICB9KTtcbiAgfVxuXG4gIEZ1bmN0aW9uTm9kZS5wcm90b3R5cGUgPSBuZXcgTm9kZSgpO1xuICBGdW5jdGlvbk5vZGUucHJvdG90eXBlLnR5cGUgPSAnRnVuY3Rpb25Ob2RlJztcbiAgRnVuY3Rpb25Ob2RlLnByb3RvdHlwZS5pc0Z1bmN0aW9uTm9kZSA9IHRydWU7XG4gIC8qKlxuICAgKiBDb21waWxlIGEgbm9kZSBpbnRvIGEgSmF2YVNjcmlwdCBmdW5jdGlvbi5cbiAgICogVGhpcyBiYXNpY2FsbHkgcHJlLWNhbGN1bGF0ZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSBhbmQgb25seSBsZWF2ZXMgb3BlblxuICAgKiBjYWxjdWxhdGlvbnMgd2hpY2ggZGVwZW5kIG9uIGEgZHluYW1pYyBzY29wZSB3aXRoIHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG1hdGggICAgIE1hdGguanMgbmFtZXNwYWNlIHdpdGggZnVuY3Rpb25zIGFuZCBjb25zdGFudHMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdOYW1lcyBBbiBvYmplY3Qgd2l0aCBhcmd1bWVudCBuYW1lcyBhcyBrZXkgYW5kIGB0cnVlYFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdmFsdWUuIFVzZWQgaW4gdGhlIFN5bWJvbE5vZGUgdG8gb3B0aW1pemVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudHMgZnJvbSB1c2VyIGFzc2lnbmVkIGZ1bmN0aW9uc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZSBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKSBvciBzcGVjaWFsIHN5bWJvbHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UgYGVuZGAgKHNlZSBJbmRleE5vZGUpLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgbGlrZTpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICBldmFsTm9kZShzY29wZTogT2JqZWN0LCBhcmdzOiBPYmplY3QsIGNvbnRleHQ6ICopXG4gICAqL1xuXG4gIEZ1bmN0aW9uTm9kZS5wcm90b3R5cGUuX2NvbXBpbGUgPSBmdW5jdGlvbiAobWF0aCwgYXJnTmFtZXMpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRnVuY3Rpb25Ob2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gdmFsaWQgRnVuY3Rpb25Ob2RlJyk7XG4gICAgfSAvLyBjb21waWxlIGFyZ3VtZW50c1xuXG5cbiAgICB2YXIgZXZhbEFyZ3MgPSAoMCwgX2FycmF5Lm1hcCkodGhpcy5hcmdzLCBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICByZXR1cm4gYXJnLl9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTtcbiAgICB9KTtcblxuICAgIGlmICgoMCwgX2lzLmlzU3ltYm9sTm9kZSkodGhpcy5mbikpIHtcbiAgICAgIC8vIHdlIGNhbiBzdGF0aWNhbGx5IGRldGVybWluZSB3aGV0aGVyIHRoZSBmdW5jdGlvbiBoYXMgYW4gcmF3QXJncyBwcm9wZXJ0eVxuICAgICAgdmFyIF9uYW1lID0gdGhpcy5mbi5uYW1lO1xuICAgICAgdmFyIGZuID0gX25hbWUgaW4gbWF0aCA/ICgwLCBfY3VzdG9tcy5nZXRTYWZlUHJvcGVydHkpKG1hdGgsIF9uYW1lKSA6IHVuZGVmaW5lZDtcbiAgICAgIHZhciBpc1JhdyA9IHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJyAmJiBmbi5yYXdBcmdzID09PSB0cnVlO1xuXG4gICAgICBpZiAoaXNSYXcpIHtcbiAgICAgICAgLy8gcGFzcyB1bmV2YWx1YXRlZCBwYXJhbWV0ZXJzIChub2RlcykgdG8gdGhlIGZ1bmN0aW9uXG4gICAgICAgIC8vIFwicmF3XCIgZXZhbHVhdGlvblxuICAgICAgICB2YXIgcmF3QXJncyA9IHRoaXMuYXJncztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxGdW5jdGlvbk5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgICByZXR1cm4gKF9uYW1lIGluIHNjb3BlID8gKDAsIF9jdXN0b21zLmdldFNhZmVQcm9wZXJ0eSkoc2NvcGUsIF9uYW1lKSA6IGZuKShyYXdBcmdzLCBtYXRoLCBfZXh0ZW5kcyh7fSwgc2NvcGUsIGFyZ3MpKTtcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFwicmVndWxhclwiIGV2YWx1YXRpb25cbiAgICAgICAgaWYgKGV2YWxBcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIHZhciBldmFsQXJnMCA9IGV2YWxBcmdzWzBdO1xuICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBldmFsRnVuY3Rpb25Ob2RlKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICAgICAgICByZXR1cm4gKF9uYW1lIGluIHNjb3BlID8gKDAsIF9jdXN0b21zLmdldFNhZmVQcm9wZXJ0eSkoc2NvcGUsIF9uYW1lKSA6IGZuKShldmFsQXJnMChzY29wZSwgYXJncywgY29udGV4dCkpO1xuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoZXZhbEFyZ3MubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgdmFyIF9ldmFsQXJnID0gZXZhbEFyZ3NbMF07XG4gICAgICAgICAgdmFyIGV2YWxBcmcxID0gZXZhbEFyZ3NbMV07XG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxGdW5jdGlvbk5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgICAgIHJldHVybiAoX25hbWUgaW4gc2NvcGUgPyAoMCwgX2N1c3RvbXMuZ2V0U2FmZVByb3BlcnR5KShzY29wZSwgX25hbWUpIDogZm4pKF9ldmFsQXJnKHNjb3BlLCBhcmdzLCBjb250ZXh0KSwgZXZhbEFyZzEoc2NvcGUsIGFyZ3MsIGNvbnRleHQpKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBldmFsRnVuY3Rpb25Ob2RlKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICAgICAgICByZXR1cm4gKF9uYW1lIGluIHNjb3BlID8gKDAsIF9jdXN0b21zLmdldFNhZmVQcm9wZXJ0eSkoc2NvcGUsIF9uYW1lKSA6IGZuKS5hcHBseShudWxsLCAoMCwgX2FycmF5Lm1hcCkoZXZhbEFyZ3MsIGZ1bmN0aW9uIChldmFsQXJnKSB7XG4gICAgICAgICAgICAgIHJldHVybiBldmFsQXJnKHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQWNjZXNzb3JOb2RlKSh0aGlzLmZuKSAmJiAoMCwgX2lzLmlzSW5kZXhOb2RlKSh0aGlzLmZuLmluZGV4KSAmJiB0aGlzLmZuLmluZGV4LmlzT2JqZWN0UHJvcGVydHkoKSkge1xuICAgICAgLy8gZXhlY3V0ZSB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgcmlnaHQgY29udGV4dDogdGhlIG9iamVjdCBvZiB0aGUgQWNjZXNzb3JOb2RlXG4gICAgICB2YXIgZXZhbE9iamVjdCA9IHRoaXMuZm4ub2JqZWN0Ll9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTtcblxuICAgICAgdmFyIHByb3AgPSB0aGlzLmZuLmluZGV4LmdldE9iamVjdFByb3BlcnR5KCk7XG4gICAgICB2YXIgX3Jhd0FyZ3MgPSB0aGlzLmFyZ3M7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gZXZhbEZ1bmN0aW9uTm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICB2YXIgb2JqZWN0ID0gZXZhbE9iamVjdChzY29wZSwgYXJncywgY29udGV4dCk7XG4gICAgICAgICgwLCBfY3VzdG9tcy52YWxpZGF0ZVNhZmVNZXRob2QpKG9iamVjdCwgcHJvcCk7XG4gICAgICAgIHZhciBpc1JhdyA9IG9iamVjdFtwcm9wXSAmJiBvYmplY3RbcHJvcF0ucmF3QXJncztcbiAgICAgICAgcmV0dXJuIGlzUmF3ID8gb2JqZWN0W3Byb3BdKF9yYXdBcmdzLCBtYXRoLCBfZXh0ZW5kcyh7fSwgc2NvcGUsIGFyZ3MpKSAvLyBcInJhd1wiIGV2YWx1YXRpb25cbiAgICAgICAgOiBvYmplY3RbcHJvcF0uYXBwbHkob2JqZWN0LCAoMCwgX2FycmF5Lm1hcCkoZXZhbEFyZ3MsIGZ1bmN0aW9uIChldmFsQXJnKSB7XG4gICAgICAgICAgLy8gXCJyZWd1bGFyXCIgZXZhbHVhdGlvblxuICAgICAgICAgIHJldHVybiBldmFsQXJnKHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcbiAgICAgICAgfSkpO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gbm9kZS5mbi5pc0FjY2Vzc29yTm9kZSAmJiAhbm9kZS5mbi5pbmRleC5pc09iamVjdFByb3BlcnR5KClcbiAgICAgIC8vIHdlIGhhdmUgdG8gZHluYW1pY2FsbHkgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGZ1bmN0aW9uIGhhcyBhIHJhd0FyZ3MgcHJvcGVydHlcbiAgICAgIHZhciBldmFsRm4gPSB0aGlzLmZuLl9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTtcblxuICAgICAgdmFyIF9yYXdBcmdzMiA9IHRoaXMuYXJncztcbiAgICAgIHJldHVybiBmdW5jdGlvbiBldmFsRnVuY3Rpb25Ob2RlKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICAgIHZhciBmbiA9IGV2YWxGbihzY29wZSwgYXJncywgY29udGV4dCk7XG4gICAgICAgIHZhciBpc1JhdyA9IGZuICYmIGZuLnJhd0FyZ3M7XG4gICAgICAgIHJldHVybiBpc1JhdyA/IGZuKF9yYXdBcmdzMiwgbWF0aCwgX2V4dGVuZHMoe30sIHNjb3BlLCBhcmdzKSkgLy8gXCJyYXdcIiBldmFsdWF0aW9uXG4gICAgICAgIDogZm4uYXBwbHkoZm4sICgwLCBfYXJyYXkubWFwKShldmFsQXJncywgZnVuY3Rpb24gKGV2YWxBcmcpIHtcbiAgICAgICAgICAvLyBcInJlZ3VsYXJcIiBldmFsdWF0aW9uXG4gICAgICAgICAgcmV0dXJuIGV2YWxBcmcoc2NvcGUsIGFyZ3MsIGNvbnRleHQpO1xuICAgICAgICB9KSk7XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZWFjaCBvZiB0aGUgY2hpbGQgbm9kZXMgb2YgdGhpcyBub2RlXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKX0gY2FsbGJhY2tcbiAgICovXG5cblxuICBGdW5jdGlvbk5vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBjYWxsYmFjayh0aGlzLmZuLCAnZm4nLCB0aGlzKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjYWxsYmFjayh0aGlzLmFyZ3NbaV0sICdhcmdzWycgKyBpICsgJ10nLCB0aGlzKTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgRnVuY3Rpb25Ob2RlIGhhdmluZyBpdCdzIGNoaWxkcyBiZSB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nXG4gICAqIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCBvZiB0aGUgY2hpbGRzIG9mIHRoZSBvcmlnaW5hbCBub2RlLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSk6IE5vZGV9IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbk5vZGV9IFJldHVybnMgYSB0cmFuc2Zvcm1lZCBjb3B5IG9mIHRoZSBub2RlXG4gICAqL1xuXG5cbiAgRnVuY3Rpb25Ob2RlLnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICB2YXIgZm4gPSB0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy5mbiwgJ2ZuJywgdGhpcykpO1xuXG4gICAgdmFyIGFyZ3MgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcmdzW2ldID0gdGhpcy5faWZOb2RlKGNhbGxiYWNrKHRoaXMuYXJnc1tpXSwgJ2FyZ3NbJyArIGkgKyAnXScsIHRoaXMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uTm9kZShmbiwgYXJncyk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIG5vZGUsIGEgc2hhbGxvdyBjb3B5XG4gICAqIEByZXR1cm4ge0Z1bmN0aW9uTm9kZX1cbiAgICovXG5cblxuICBGdW5jdGlvbk5vZGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb25Ob2RlKHRoaXMuZm4sIHRoaXMuYXJncy5zbGljZSgwKSk7XG4gIH07IC8vIGJhY2t1cCBOb2RlJ3MgdG9TdHJpbmcgZnVuY3Rpb25cbiAgLy8gQHByaXZhdGVcblxuXG4gIHZhciBub2RlVG9TdHJpbmcgPSBGdW5jdGlvbk5vZGUucHJvdG90eXBlLnRvU3RyaW5nO1xuICAvKipcbiAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvbi4gKHdyYXBwZXIgZnVuY3Rpb24pXG4gICAqIFRoaXMgb3ZlcnJpZGVzIHBhcnRzIG9mIE5vZGUncyB0b1N0cmluZyBmdW5jdGlvbi5cbiAgICogSWYgY2FsbGJhY2sgaXMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgY2FsbGJhY2tzLCBpdFxuICAgKiBjYWxscyB0aGUgY29ycmVjdCBjYWxsYmFjayBmb3IgdGhlIGN1cnJlbnQgbm9kZSxcbiAgICogb3RoZXJ3aXNlIGl0IGZhbGxzIGJhY2sgdG8gY2FsbGluZyBOb2RlJ3MgdG9TdHJpbmdcbiAgICogZnVuY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqIEBvdmVycmlkZVxuICAgKi9cblxuICBGdW5jdGlvbk5vZGUucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgY3VzdG9tU3RyaW5nO1xuICAgIHZhciBuYW1lID0gdGhpcy5mbi50b1N0cmluZyhvcHRpb25zKTtcblxuICAgIGlmIChvcHRpb25zICYmIF90eXBlb2Yob3B0aW9ucy5oYW5kbGVyKSA9PT0gJ29iamVjdCcgJiYgKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKG9wdGlvbnMuaGFuZGxlciwgbmFtZSkpIHtcbiAgICAgIC8vIGNhbGxiYWNrIGlzIGEgbWFwIG9mIGNhbGxiYWNrIGZ1bmN0aW9uc1xuICAgICAgY3VzdG9tU3RyaW5nID0gb3B0aW9ucy5oYW5kbGVyW25hbWVdKHRoaXMsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY3VzdG9tU3RyaW5nICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGN1c3RvbVN0cmluZztcbiAgICB9IC8vIGZhbGwgYmFjayB0byBOb2RlJ3MgdG9TdHJpbmdcblxuXG4gICAgcmV0dXJuIG5vZGVUb1N0cmluZy5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICB9O1xuICAvKipcbiAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIEZ1bmN0aW9uTm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgYXJncyA9IHRoaXMuYXJncy5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgICAgcmV0dXJuIGFyZy50b1N0cmluZyhvcHRpb25zKTtcbiAgICB9KTtcbiAgICB2YXIgZm4gPSAoMCwgX2lzLmlzRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSkodGhpcy5mbikgPyAnKCcgKyB0aGlzLmZuLnRvU3RyaW5nKG9wdGlvbnMpICsgJyknIDogdGhpcy5mbi50b1N0cmluZyhvcHRpb25zKTsgLy8gZm9ybWF0IHRoZSBhcmd1bWVudHMgbGlrZSBcImFkZCgyLCA0LjIpXCJcblxuICAgIHJldHVybiBmbiArICcoJyArIGFyZ3Muam9pbignLCAnKSArICcpJztcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGVcbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG5cblxuICBGdW5jdGlvbk5vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnRnVuY3Rpb25Ob2RlJyxcbiAgICAgIGZuOiB0aGlzLmZuLFxuICAgICAgYXJnczogdGhpcy5hcmdzXG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIEluc3RhbnRpYXRlIGFuIEFzc2lnbm1lbnROb2RlIGZyb20gaXRzIEpTT04gcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIEFuIG9iamVjdCBzdHJ1Y3R1cmVkIGxpa2VcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJGdW5jdGlvbk5vZGVcIiwgZm46IC4uLiwgYXJnczogLi4ufWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge0Z1bmN0aW9uTm9kZX1cbiAgICovXG5cblxuICBGdW5jdGlvbk5vZGUuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb25Ob2RlKGpzb24uZm4sIGpzb24uYXJncyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgSFRNTCByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIEZ1bmN0aW9uTm9kZS5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgYXJncyA9IHRoaXMuYXJncy5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgICAgcmV0dXJuIGFyZy50b0hUTUwob3B0aW9ucyk7XG4gICAgfSk7IC8vIGZvcm1hdCB0aGUgYXJndW1lbnRzIGxpa2UgXCJhZGQoMiwgNC4yKVwiXG5cbiAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1mdW5jdGlvblwiPicgKyAoMCwgX3N0cmluZy5lc2NhcGUpKHRoaXMuZm4pICsgJzwvc3Bhbj48c3BhbiBjbGFzcz1cIm1hdGgtcGFyYW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPig8L3NwYW4+JyArIGFyZ3Muam9pbignPHNwYW4gY2xhc3M9XCJtYXRoLXNlcGFyYXRvclwiPiw8L3NwYW4+JykgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmFudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4pPC9zcGFuPic7XG4gIH07XG4gIC8qXG4gICAqIEV4cGFuZCBhIExhVGVYIHRlbXBsYXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZW1wbGF0ZVxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHByaXZhdGVcbiAgICoqL1xuXG5cbiAgZnVuY3Rpb24gZXhwYW5kVGVtcGxhdGUodGVtcGxhdGUsIG5vZGUsIG9wdGlvbnMpIHtcbiAgICB2YXIgbGF0ZXggPSAnJzsgLy8gTWF0Y2ggZXZlcnl0aGluZyBvZiB0aGUgZm9ybSAke2lkZW50aWZpZXJ9IG9yICR7aWRlbnRpZmllclsyXX0gb3IgJCRcbiAgICAvLyB3aGlsZSBzdWJtYXRjaGluZyBpZGVudGlmaWVyIGFuZCAyIChpbiB0aGUgc2Vjb25kIGNhc2UpXG5cbiAgICB2YXIgcmVnZXggPSBuZXcgUmVnRXhwKCdcXFxcJCg/OlxcXFx7KFthLXpfXVthLXpfMC05XSopKD86XFxcXFsoWzAtOV0rKVxcXFxdKT9cXFxcfXxcXFxcJCknLCAnaWcnKTtcbiAgICB2YXIgaW5wdXRQb3MgPSAwOyAvLyBwb3NpdGlvbiBpbiB0aGUgaW5wdXQgc3RyaW5nXG5cbiAgICB2YXIgbWF0Y2g7XG5cbiAgICB3aGlsZSAoKG1hdGNoID0gcmVnZXguZXhlYyh0ZW1wbGF0ZSkpICE9PSBudWxsKSB7XG4gICAgICAvLyBnbyB0aHJvdWdoIGFsbCBtYXRjaGVzXG4gICAgICAvLyBhZGQgZXZlcnl0aGluZyBpbiBmcm9udCBvZiB0aGUgbWF0Y2ggdG8gdGhlIExhVGVYIHN0cmluZ1xuICAgICAgbGF0ZXggKz0gdGVtcGxhdGUuc3Vic3RyaW5nKGlucHV0UG9zLCBtYXRjaC5pbmRleCk7XG4gICAgICBpbnB1dFBvcyA9IG1hdGNoLmluZGV4O1xuXG4gICAgICBpZiAobWF0Y2hbMF0gPT09ICckJCcpIHtcbiAgICAgICAgLy8gZXNjYXBlZCBkb2xsYXIgc2lnblxuICAgICAgICBsYXRleCArPSAnJCc7XG4gICAgICAgIGlucHV0UG9zKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB0ZW1wbGF0ZSBwYXJhbWV0ZXJcbiAgICAgICAgaW5wdXRQb3MgKz0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgICB2YXIgcHJvcGVydHkgPSBub2RlW21hdGNoWzFdXTtcblxuICAgICAgICBpZiAoIXByb3BlcnR5KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdUZW1wbGF0ZTogUHJvcGVydHkgJyArIG1hdGNoWzFdICsgJyBkb2VzIG5vdCBleGlzdC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtYXRjaFsyXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gbm8gc3F1YXJlIGJyYWNrZXRzXG4gICAgICAgICAgc3dpdGNoIChfdHlwZW9mKHByb3BlcnR5KSkge1xuICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgICAgbGF0ZXggKz0gcHJvcGVydHk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICAgICAgICBpZiAoKDAsIF9pcy5pc05vZGUpKHByb3BlcnR5KSkge1xuICAgICAgICAgICAgICAgIGxhdGV4ICs9IHByb3BlcnR5LnRvVGV4KG9wdGlvbnMpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocHJvcGVydHkpKSB7XG4gICAgICAgICAgICAgICAgLy8gbWFrZSBhcnJheSBvZiBOb2RlcyBpbnRvIGNvbW1hIHNlcGFyYXRlZCBsaXN0XG4gICAgICAgICAgICAgICAgbGF0ZXggKz0gcHJvcGVydHkubWFwKGZ1bmN0aW9uIChhcmcsIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICBpZiAoKDAsIF9pcy5pc05vZGUpKGFyZykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFyZy50b1RleChvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGVtcGxhdGU6ICcgKyBtYXRjaFsxXSArICdbJyArIGluZGV4ICsgJ10gaXMgbm90IGEgTm9kZS4nKTtcbiAgICAgICAgICAgICAgICB9KS5qb2luKCcsJyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGVtcGxhdGU6ICcgKyBtYXRjaFsxXSArICcgaGFzIHRvIGJlIGEgTm9kZSwgU3RyaW5nIG9yIGFycmF5IG9mIE5vZGVzJyk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGVtcGxhdGU6ICcgKyBtYXRjaFsxXSArICcgaGFzIHRvIGJlIGEgTm9kZSwgU3RyaW5nIG9yIGFycmF5IG9mIE5vZGVzJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHdpdGggc3F1YXJlIGJyYWNrZXRzXG4gICAgICAgICAgaWYgKCgwLCBfaXMuaXNOb2RlKShwcm9wZXJ0eVttYXRjaFsyXV0gJiYgcHJvcGVydHlbbWF0Y2hbMl1dKSkge1xuICAgICAgICAgICAgbGF0ZXggKz0gcHJvcGVydHlbbWF0Y2hbMl1dLnRvVGV4KG9wdGlvbnMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUZW1wbGF0ZTogJyArIG1hdGNoWzFdICsgJ1snICsgbWF0Y2hbMl0gKyAnXSBpcyBub3QgYSBOb2RlLicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGxhdGV4ICs9IHRlbXBsYXRlLnNsaWNlKGlucHV0UG9zKTsgLy8gYXBwZW5kIHJlc3Qgb2YgdGhlIHRlbXBsYXRlXG5cbiAgICByZXR1cm4gbGF0ZXg7XG4gIH0gLy8gYmFja3VwIE5vZGUncyB0b1RleCBmdW5jdGlvblxuICAvLyBAcHJpdmF0ZVxuXG5cbiAgdmFyIG5vZGVUb1RleCA9IEZ1bmN0aW9uTm9kZS5wcm90b3R5cGUudG9UZXg7XG4gIC8qKlxuICAgKiBHZXQgTGFUZVggcmVwcmVzZW50YXRpb24uICh3cmFwcGVyIGZ1bmN0aW9uKVxuICAgKiBUaGlzIG92ZXJyaWRlcyBwYXJ0cyBvZiBOb2RlJ3MgdG9UZXggZnVuY3Rpb24uXG4gICAqIElmIGNhbGxiYWNrIGlzIGFuIG9iamVjdCBjb250YWluaW5nIGNhbGxiYWNrcywgaXRcbiAgICogY2FsbHMgdGhlIGNvcnJlY3QgY2FsbGJhY2sgZm9yIHRoZSBjdXJyZW50IG5vZGUsXG4gICAqIG90aGVyd2lzZSBpdCBmYWxscyBiYWNrIHRvIGNhbGxpbmcgTm9kZSdzIHRvVGV4XG4gICAqIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG4gIEZ1bmN0aW9uTm9kZS5wcm90b3R5cGUudG9UZXggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBjdXN0b21UZXg7XG5cbiAgICBpZiAob3B0aW9ucyAmJiBfdHlwZW9mKG9wdGlvbnMuaGFuZGxlcikgPT09ICdvYmplY3QnICYmICgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShvcHRpb25zLmhhbmRsZXIsIHRoaXMubmFtZSkpIHtcbiAgICAgIC8vIGNhbGxiYWNrIGlzIGEgbWFwIG9mIGNhbGxiYWNrIGZ1bmN0aW9uc1xuICAgICAgY3VzdG9tVGV4ID0gb3B0aW9ucy5oYW5kbGVyW3RoaXMubmFtZV0odGhpcywgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjdXN0b21UZXggIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gY3VzdG9tVGV4O1xuICAgIH0gLy8gZmFsbCBiYWNrIHRvIE5vZGUncyB0b1RleFxuXG5cbiAgICByZXR1cm4gbm9kZVRvVGV4LmNhbGwodGhpcywgb3B0aW9ucyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgTGFUZVggcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBGdW5jdGlvbk5vZGUucHJvdG90eXBlLl90b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIGFyZ3MgPSB0aGlzLmFyZ3MubWFwKGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgIC8vIGdldCBMYVRlWCBvZiB0aGUgYXJndW1lbnRzXG4gICAgICByZXR1cm4gYXJnLnRvVGV4KG9wdGlvbnMpO1xuICAgIH0pO1xuICAgIHZhciBsYXRleENvbnZlcnRlcjtcblxuICAgIGlmIChfbGF0ZXgubGF0ZXhGdW5jdGlvbnNbdGhpcy5uYW1lXSkge1xuICAgICAgbGF0ZXhDb252ZXJ0ZXIgPSBfbGF0ZXgubGF0ZXhGdW5jdGlvbnNbdGhpcy5uYW1lXTtcbiAgICB9IC8vIHRvVGV4IHByb3BlcnR5IG9uIHRoZSBmdW5jdGlvbiBpdHNlbGZcblxuXG4gICAgaWYgKG1hdGhbdGhpcy5uYW1lXSAmJiAodHlwZW9mIG1hdGhbdGhpcy5uYW1lXS50b1RleCA9PT0gJ2Z1bmN0aW9uJyB8fCBfdHlwZW9mKG1hdGhbdGhpcy5uYW1lXS50b1RleCkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBtYXRoW3RoaXMubmFtZV0udG9UZXggPT09ICdzdHJpbmcnKSkge1xuICAgICAgLy8gLnRvVGV4IGlzIGEgY2FsbGJhY2sgZnVuY3Rpb25cbiAgICAgIGxhdGV4Q29udmVydGVyID0gbWF0aFt0aGlzLm5hbWVdLnRvVGV4O1xuICAgIH1cblxuICAgIHZhciBjdXN0b21Ub1RleDtcblxuICAgIHN3aXRjaCAoX3R5cGVvZihsYXRleENvbnZlcnRlcikpIHtcbiAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgLy8gYSBjYWxsYmFjayBmdW5jdGlvblxuICAgICAgICBjdXN0b21Ub1RleCA9IGxhdGV4Q29udmVydGVyKHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgLy8gYSB0ZW1wbGF0ZSBzdHJpbmdcbiAgICAgICAgY3VzdG9tVG9UZXggPSBleHBhbmRUZW1wbGF0ZShsYXRleENvbnZlcnRlciwgdGhpcywgb3B0aW9ucyk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICAvLyBhbiBvYmplY3Qgd2l0aCBkaWZmZXJlbnQgXCJjb252ZXJ0ZXJzXCIgZm9yIGRpZmZlcmVudCBudW1iZXJzIG9mIGFyZ3VtZW50c1xuICAgICAgICBzd2l0Y2ggKF90eXBlb2YobGF0ZXhDb252ZXJ0ZXJbYXJncy5sZW5ndGhdKSkge1xuICAgICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgICAgIGN1c3RvbVRvVGV4ID0gbGF0ZXhDb252ZXJ0ZXJbYXJncy5sZW5ndGhdKHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgY3VzdG9tVG9UZXggPSBleHBhbmRUZW1wbGF0ZShsYXRleENvbnZlcnRlclthcmdzLmxlbmd0aF0sIHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY3VzdG9tVG9UZXggIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gY3VzdG9tVG9UZXg7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4cGFuZFRlbXBsYXRlKF9sYXRleC5kZWZhdWx0VGVtcGxhdGUsIHRoaXMsIG9wdGlvbnMpO1xuICB9O1xuICAvKipcbiAgICogR2V0IGlkZW50aWZpZXIuXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBGdW5jdGlvbk5vZGUucHJvdG90eXBlLmdldElkZW50aWZpZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZSArICc6JyArIHRoaXMubmFtZTtcbiAgfTtcblxuICByZXR1cm4gRnVuY3Rpb25Ob2RlO1xufSwge1xuICBpc0NsYXNzOiB0cnVlLFxuICBpc05vZGU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVGdW5jdGlvbk5vZGUgPSBjcmVhdGVGdW5jdGlvbk5vZGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUluZGV4Tm9kZSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvc3RyaW5nXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jdXN0b21zID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2N1c3RvbXNcIik7XG5cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHsgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChpdGVyKSkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkoYXJyKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxudmFyIG5hbWUgPSAnSW5kZXhOb2RlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ1JhbmdlJywgJ05vZGUnLCAnc2l6ZSddO1xudmFyIGNyZWF0ZUluZGV4Tm9kZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBSYW5nZSA9IF9yZWYuUmFuZ2UsXG4gICAgICBOb2RlID0gX3JlZi5Ob2RlLFxuICAgICAgc2l6ZSA9IF9yZWYuc2l6ZTtcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yIEluZGV4Tm9kZVxuICAgKiBAZXh0ZW5kcyBOb2RlXG4gICAqXG4gICAqIERlc2NyaWJlcyBhIHN1YnNldCBvZiBhIG1hdHJpeCBvciBhbiBvYmplY3QgcHJvcGVydHkuXG4gICAqIENhbm5vdCBiZSB1c2VkIG9uIGl0cyBvd24sIG5lZWRzIHRvIGJlIHVzZWQgd2l0aGluIGFuIEFjY2Vzc29yTm9kZSBvclxuICAgKiBBc3NpZ25tZW50Tm9kZS5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlW119IGRpbWVuc2lvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbZG90Tm90YXRpb249ZmFsc2VdICBPcHRpb25hbCBwcm9wZXJ0eSBkZXNjcmliaW5nIHdoZXRoZXJcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGluZGV4IHdhcyB3cml0dGVuIHVzaW5nIGRvdFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGF0aW9uIGxpa2UgYGEuYmAsIG9yIHVzaW5nIGJyYWNrZXRcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RhdGlvbiBsaWtlIGBhW1wiYlwiXWAgKGRlZmF1bHQpLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZWQgdG8gc3RyaW5naWZ5IGFuIEluZGV4Tm9kZS5cbiAgICovXG4gIGZ1bmN0aW9uIEluZGV4Tm9kZShkaW1lbnNpb25zLCBkb3ROb3RhdGlvbikge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBJbmRleE5vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH1cblxuICAgIHRoaXMuZGltZW5zaW9ucyA9IGRpbWVuc2lvbnM7XG4gICAgdGhpcy5kb3ROb3RhdGlvbiA9IGRvdE5vdGF0aW9uIHx8IGZhbHNlOyAvLyB2YWxpZGF0ZSBpbnB1dFxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGRpbWVuc2lvbnMpIHx8ICFkaW1lbnNpb25zLmV2ZXJ5KF9pcy5pc05vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSBjb250YWluaW5nIE5vZGVzIGV4cGVjdGVkIGZvciBwYXJhbWV0ZXIgXCJkaW1lbnNpb25zXCInKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kb3ROb3RhdGlvbiAmJiAhdGhpcy5pc09iamVjdFByb3BlcnR5KCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZG90Tm90YXRpb24gb25seSBhcHBsaWNhYmxlIGZvciBvYmplY3QgcHJvcGVydGllcycpO1xuICAgIH0gLy8gVE9ETzogZGVwcmVjYXRlZCBzaW5jZSB2MywgcmVtb3ZlIHNvbWUgZGF5XG5cblxuICAgIHZhciBkZXByZWNhdGVkID0gZnVuY3Rpb24gZGVwcmVjYXRlZCgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUHJvcGVydHkgYEluZGV4Tm9kZS5vYmplY3RgIGlzIGRlcHJlY2F0ZWQsIHVzZSBgSW5kZXhOb2RlLmZuYCBpbnN0ZWFkJyk7XG4gICAgfTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnb2JqZWN0Jywge1xuICAgICAgZ2V0OiBkZXByZWNhdGVkLFxuICAgICAgc2V0OiBkZXByZWNhdGVkXG4gICAgfSk7XG4gIH1cblxuICBJbmRleE5vZGUucHJvdG90eXBlID0gbmV3IE5vZGUoKTtcbiAgSW5kZXhOb2RlLnByb3RvdHlwZS50eXBlID0gJ0luZGV4Tm9kZSc7XG4gIEluZGV4Tm9kZS5wcm90b3R5cGUuaXNJbmRleE5vZGUgPSB0cnVlO1xuICAvKipcbiAgICogQ29tcGlsZSBhIG5vZGUgaW50byBhIEphdmFTY3JpcHQgZnVuY3Rpb24uXG4gICAqIFRoaXMgYmFzaWNhbGx5IHByZS1jYWxjdWxhdGVzIGFzIG11Y2ggYXMgcG9zc2libGUgYW5kIG9ubHkgbGVhdmVzIG9wZW5cbiAgICogY2FsY3VsYXRpb25zIHdoaWNoIGRlcGVuZCBvbiBhIGR5bmFtaWMgc2NvcGUgd2l0aCB2YXJpYWJsZXMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBtYXRoICAgICBNYXRoLmpzIG5hbWVzcGFjZSB3aXRoIGZ1bmN0aW9ucyBhbmQgY29uc3RhbnRzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gYXJnTmFtZXMgQW4gb2JqZWN0IHdpdGggYXJndW1lbnQgbmFtZXMgYXMga2V5IGFuZCBgdHJ1ZWBcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHZhbHVlLiBVc2VkIGluIHRoZSBTeW1ib2xOb2RlIHRvIG9wdGltaXplXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJndW1lbnRzIGZyb20gdXNlciBhc3NpZ25lZCBmdW5jdGlvbnNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIChzZWUgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSkgb3Igc3BlY2lhbCBzeW1ib2xzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlIGBlbmRgIChzZWUgSW5kZXhOb2RlKS5cbiAgICogQHJldHVybiB7ZnVuY3Rpb259IFJldHVybnMgYSBmdW5jdGlvbiB3aGljaCBjYW4gYmUgY2FsbGVkIGxpa2U6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgZXZhbE5vZGUoc2NvcGU6IE9iamVjdCwgYXJnczogT2JqZWN0LCBjb250ZXh0OiAqKVxuICAgKi9cblxuICBJbmRleE5vZGUucHJvdG90eXBlLl9jb21waWxlID0gZnVuY3Rpb24gKG1hdGgsIGFyZ05hbWVzKSB7XG4gICAgLy8gVE9ETzogaW1wbGVtZW50IHN1cHBvcnQgZm9yIGJpZ251bWJlciAoY3VycmVudGx5IGJpZ251bWJlcnMgYXJlIHNpbGVudGx5XG4gICAgLy8gICAgICAgcmVkdWNlZCB0byBudW1iZXJzIHdoZW4gY2hhbmdpbmcgdGhlIHZhbHVlIHRvIHplcm8tYmFzZWQpXG4gICAgLy8gVE9ETzogT3B0aW1pemF0aW9uOiB3aGVuIHRoZSByYW5nZSB2YWx1ZXMgYXJlIENvbnN0YW50Tm9kZXMsXG4gICAgLy8gICAgICAgd2UgY2FuIGJlZm9yZWhhbmQgcmVzb2x2ZSB0aGUgemVyby1iYXNlZCB2YWx1ZVxuICAgIC8vIG9wdGltaXphdGlvbiBmb3IgYSBzaW1wbGUgb2JqZWN0IHByb3BlcnR5XG4gICAgdmFyIGV2YWxEaW1lbnNpb25zID0gKDAsIF9hcnJheS5tYXApKHRoaXMuZGltZW5zaW9ucywgZnVuY3Rpb24gKHJhbmdlLCBpKSB7XG4gICAgICBpZiAoKDAsIF9pcy5pc1JhbmdlTm9kZSkocmFuZ2UpKSB7XG4gICAgICAgIGlmIChyYW5nZS5uZWVkc0VuZCgpKSB7XG4gICAgICAgICAgLy8gY3JlYXRlIGEgcmFuZ2UgY29udGFpbmluZyBlbmQgKGxpa2UgJzQ6ZW5kJylcbiAgICAgICAgICB2YXIgY2hpbGRBcmdOYW1lcyA9IE9iamVjdC5jcmVhdGUoYXJnTmFtZXMpO1xuICAgICAgICAgIGNoaWxkQXJnTmFtZXMuZW5kID0gdHJ1ZTtcblxuICAgICAgICAgIHZhciBldmFsU3RhcnQgPSByYW5nZS5zdGFydC5fY29tcGlsZShtYXRoLCBjaGlsZEFyZ05hbWVzKTtcblxuICAgICAgICAgIHZhciBldmFsRW5kID0gcmFuZ2UuZW5kLl9jb21waWxlKG1hdGgsIGNoaWxkQXJnTmFtZXMpO1xuXG4gICAgICAgICAgdmFyIGV2YWxTdGVwID0gcmFuZ2Uuc3RlcCA/IHJhbmdlLnN0ZXAuX2NvbXBpbGUobWF0aCwgY2hpbGRBcmdOYW1lcykgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBldmFsRGltZW5zaW9uKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICAgICAgICB2YXIgcyA9IHNpemUoY29udGV4dCkudmFsdWVPZigpO1xuICAgICAgICAgICAgdmFyIGNoaWxkQXJncyA9IE9iamVjdC5jcmVhdGUoYXJncyk7XG4gICAgICAgICAgICBjaGlsZEFyZ3MuZW5kID0gc1tpXTtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVSYW5nZShldmFsU3RhcnQoc2NvcGUsIGNoaWxkQXJncywgY29udGV4dCksIGV2YWxFbmQoc2NvcGUsIGNoaWxkQXJncywgY29udGV4dCksIGV2YWxTdGVwKHNjb3BlLCBjaGlsZEFyZ3MsIGNvbnRleHQpKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGNyZWF0ZSByYW5nZVxuICAgICAgICAgIHZhciBfZXZhbFN0YXJ0ID0gcmFuZ2Uuc3RhcnQuX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpO1xuXG4gICAgICAgICAgdmFyIF9ldmFsRW5kID0gcmFuZ2UuZW5kLl9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTtcblxuICAgICAgICAgIHZhciBfZXZhbFN0ZXAgPSByYW5nZS5zdGVwID8gcmFuZ2Uuc3RlcC5fY29tcGlsZShtYXRoLCBhcmdOYW1lcykgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxEaW1lbnNpb24oc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVSYW5nZShfZXZhbFN0YXJ0KHNjb3BlLCBhcmdzLCBjb250ZXh0KSwgX2V2YWxFbmQoc2NvcGUsIGFyZ3MsIGNvbnRleHQpLCBfZXZhbFN0ZXAoc2NvcGUsIGFyZ3MsIGNvbnRleHQpKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNTeW1ib2xOb2RlKShyYW5nZSkgJiYgcmFuZ2UubmFtZSA9PT0gJ2VuZCcpIHtcbiAgICAgICAgLy8gU3ltYm9sTm9kZSAnZW5kJ1xuICAgICAgICB2YXIgX2NoaWxkQXJnTmFtZXMgPSBPYmplY3QuY3JlYXRlKGFyZ05hbWVzKTtcblxuICAgICAgICBfY2hpbGRBcmdOYW1lcy5lbmQgPSB0cnVlO1xuXG4gICAgICAgIHZhciBldmFsUmFuZ2UgPSByYW5nZS5fY29tcGlsZShtYXRoLCBfY2hpbGRBcmdOYW1lcyk7XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxEaW1lbnNpb24oc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgICB2YXIgcyA9IHNpemUoY29udGV4dCkudmFsdWVPZigpO1xuICAgICAgICAgIHZhciBjaGlsZEFyZ3MgPSBPYmplY3QuY3JlYXRlKGFyZ3MpO1xuICAgICAgICAgIGNoaWxkQXJncy5lbmQgPSBzW2ldO1xuICAgICAgICAgIHJldHVybiBldmFsUmFuZ2Uoc2NvcGUsIGNoaWxkQXJncywgY29udGV4dCk7XG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBDb25zdGFudE5vZGVcbiAgICAgICAgdmFyIF9ldmFsUmFuZ2UgPSByYW5nZS5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxEaW1lbnNpb24oc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgICByZXR1cm4gX2V2YWxSYW5nZShzY29wZSwgYXJncywgY29udGV4dCk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSk7XG4gICAgdmFyIGluZGV4ID0gKDAsIF9jdXN0b21zLmdldFNhZmVQcm9wZXJ0eSkobWF0aCwgJ2luZGV4Jyk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxJbmRleE5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgIHZhciBkaW1lbnNpb25zID0gKDAsIF9hcnJheS5tYXApKGV2YWxEaW1lbnNpb25zLCBmdW5jdGlvbiAoZXZhbERpbWVuc2lvbikge1xuICAgICAgICByZXR1cm4gZXZhbERpbWVuc2lvbihzY29wZSwgYXJncywgY29udGV4dCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBpbmRleC5hcHBseSh2b2lkIDAsIF90b0NvbnN1bWFibGVBcnJheShkaW1lbnNpb25zKSk7XG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZWFjaCBvZiB0aGUgY2hpbGQgbm9kZXMgb2YgdGhpcyBub2RlXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKX0gY2FsbGJhY2tcbiAgICovXG5cblxuICBJbmRleE5vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGltZW5zaW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgY2FsbGJhY2sodGhpcy5kaW1lbnNpb25zW2ldLCAnZGltZW5zaW9uc1snICsgaSArICddJywgdGhpcyk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IEluZGV4Tm9kZSBoYXZpbmcgaXQncyBjaGlsZHMgYmUgdGhlIHJlc3VsdHMgb2YgY2FsbGluZ1xuICAgKiB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggb2YgdGhlIGNoaWxkcyBvZiB0aGUgb3JpZ2luYWwgbm9kZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpOiBOb2RlfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7SW5kZXhOb2RlfSBSZXR1cm5zIGEgdHJhbnNmb3JtZWQgY29weSBvZiB0aGUgbm9kZVxuICAgKi9cblxuXG4gIEluZGV4Tm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgdmFyIGRpbWVuc2lvbnMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kaW1lbnNpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBkaW1lbnNpb25zW2ldID0gdGhpcy5faWZOb2RlKGNhbGxiYWNrKHRoaXMuZGltZW5zaW9uc1tpXSwgJ2RpbWVuc2lvbnNbJyArIGkgKyAnXScsIHRoaXMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEluZGV4Tm9kZShkaW1lbnNpb25zLCB0aGlzLmRvdE5vdGF0aW9uKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoaXMgbm9kZSwgYSBzaGFsbG93IGNvcHlcbiAgICogQHJldHVybiB7SW5kZXhOb2RlfVxuICAgKi9cblxuXG4gIEluZGV4Tm9kZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBJbmRleE5vZGUodGhpcy5kaW1lbnNpb25zLnNsaWNlKDApLCB0aGlzLmRvdE5vdGF0aW9uKTtcbiAgfTtcbiAgLyoqXG4gICAqIFRlc3Qgd2hldGhlciB0aGlzIEluZGV4Tm9kZSBjb250YWlucyBhIHNpbmdsZSBwcm9wZXJ0eSBuYW1lXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgSW5kZXhOb2RlLnByb3RvdHlwZS5pc09iamVjdFByb3BlcnR5ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmRpbWVuc2lvbnMubGVuZ3RoID09PSAxICYmICgwLCBfaXMuaXNDb25zdGFudE5vZGUpKHRoaXMuZGltZW5zaW9uc1swXSkgJiYgdHlwZW9mIHRoaXMuZGltZW5zaW9uc1swXS52YWx1ZSA9PT0gJ3N0cmluZyc7XG4gIH07XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBwcm9wZXJ0eSBuYW1lIGlmIEluZGV4Tm9kZSBjb250YWlucyBhIHByb3BlcnR5LlxuICAgKiBJZiBub3QsIHJldHVybnMgbnVsbC5cbiAgICogQHJldHVybiB7c3RyaW5nIHwgbnVsbH1cbiAgICovXG5cblxuICBJbmRleE5vZGUucHJvdG90eXBlLmdldE9iamVjdFByb3BlcnR5ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmlzT2JqZWN0UHJvcGVydHkoKSA/IHRoaXMuZGltZW5zaW9uc1swXS52YWx1ZSA6IG51bGw7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqL1xuXG5cbiAgSW5kZXhOb2RlLnByb3RvdHlwZS5fdG9TdHJpbmcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIC8vIGZvcm1hdCB0aGUgcGFyYW1ldGVycyBsaWtlIFwiWzEsIDA6NV1cIlxuICAgIHJldHVybiB0aGlzLmRvdE5vdGF0aW9uID8gJy4nICsgdGhpcy5nZXRPYmplY3RQcm9wZXJ0eSgpIDogJ1snICsgdGhpcy5kaW1lbnNpb25zLmpvaW4oJywgJykgKyAnXSc7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBub2RlXG4gICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAqL1xuXG5cbiAgSW5kZXhOb2RlLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hdGhqczogJ0luZGV4Tm9kZScsXG4gICAgICBkaW1lbnNpb25zOiB0aGlzLmRpbWVuc2lvbnMsXG4gICAgICBkb3ROb3RhdGlvbjogdGhpcy5kb3ROb3RhdGlvblxuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhbiBJbmRleE5vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIkluZGV4Tm9kZVwiLCBkaW1lbnNpb25zOiBbLi4uXSwgZG90Tm90YXRpb246IGZhbHNlfWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge0luZGV4Tm9kZX1cbiAgICovXG5cblxuICBJbmRleE5vZGUuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBuZXcgSW5kZXhOb2RlKGpzb24uZGltZW5zaW9ucywganNvbi5kb3ROb3RhdGlvbik7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgSFRNTCByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIEluZGV4Tm9kZS5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAvLyBmb3JtYXQgdGhlIHBhcmFtZXRlcnMgbGlrZSBcIlsxLCAwOjVdXCJcbiAgICB2YXIgZGltZW5zaW9ucyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRpbWVuc2lvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGRpbWVuc2lvbnNbaV0gPSB0aGlzLmRpbWVuc2lvbnNbaV0udG9IVE1MKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZG90Tm90YXRpb24pIHtcbiAgICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJtYXRoLW9wZXJhdG9yIG1hdGgtYWNjZXNzb3Itb3BlcmF0b3JcIj4uPC9zcGFuPicgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXN5bWJvbCBtYXRoLXByb3BlcnR5XCI+JyArICgwLCBfc3RyaW5nLmVzY2FwZSkodGhpcy5nZXRPYmplY3RQcm9wZXJ0eSgpKSArICc8L3NwYW4+JztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyZW50aGVzaXMgbWF0aC1zcXVhcmUtcGFyZW50aGVzaXNcIj5bPC9zcGFuPicgKyBkaW1lbnNpb25zLmpvaW4oJzxzcGFuIGNsYXNzPVwibWF0aC1zZXBhcmF0b3JcIj4sPC9zcGFuPicpICsgJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXNxdWFyZS1wYXJlbnRoZXNpc1wiPl08L3NwYW4+JztcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgTGFUZVggcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBJbmRleE5vZGUucHJvdG90eXBlLl90b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIGRpbWVuc2lvbnMgPSB0aGlzLmRpbWVuc2lvbnMubWFwKGZ1bmN0aW9uIChyYW5nZSkge1xuICAgICAgcmV0dXJuIHJhbmdlLnRvVGV4KG9wdGlvbnMpO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmRvdE5vdGF0aW9uID8gJy4nICsgdGhpcy5nZXRPYmplY3RQcm9wZXJ0eSgpICsgJycgOiAnX3snICsgZGltZW5zaW9ucy5qb2luKCcsJykgKyAnfSc7XG4gIH07IC8vIGhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgYSBSYW5nZSBmcm9tIHN0YXJ0LCBzdGVwIGFuZCBlbmRcblxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVJhbmdlKHN0YXJ0LCBlbmQsIHN0ZXApIHtcbiAgICByZXR1cm4gbmV3IFJhbmdlKCgwLCBfaXMuaXNCaWdOdW1iZXIpKHN0YXJ0KSA/IHN0YXJ0LnRvTnVtYmVyKCkgOiBzdGFydCwgKDAsIF9pcy5pc0JpZ051bWJlcikoZW5kKSA/IGVuZC50b051bWJlcigpIDogZW5kLCAoMCwgX2lzLmlzQmlnTnVtYmVyKShzdGVwKSA/IHN0ZXAudG9OdW1iZXIoKSA6IHN0ZXApO1xuICB9XG5cbiAgcmV0dXJuIEluZGV4Tm9kZTtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZSxcbiAgaXNOb2RlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlSW5kZXhOb2RlID0gY3JlYXRlSW5kZXhOb2RlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVOb2RlID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2tleXdvcmRzID0gcmVxdWlyZShcIi4uL2tleXdvcmRzXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2xvZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9sb2dcIik7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIG5hbWUgPSAnTm9kZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydtYXRoV2l0aFRyYW5zZm9ybSddO1xudmFyIGNyZWF0ZU5vZGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgbWF0aFdpdGhUcmFuc2Zvcm0gPSBfcmVmLm1hdGhXaXRoVHJhbnNmb3JtO1xuXG4gIC8qKlxuICAgKiBOb2RlXG4gICAqL1xuICBmdW5jdGlvbiBOb2RlKCkge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBOb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEV2YWx1YXRlIHRoZSBub2RlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbc2NvcGVdICBTY29wZSB0byByZWFkL3dyaXRlIHZhcmlhYmxlc1xuICAgKiBAcmV0dXJuIHsqfSAgICAgICAgICAgICAgUmV0dXJucyB0aGUgcmVzdWx0XG4gICAqL1xuXG5cbiAgTm9kZS5wcm90b3R5cGUuZXZhbHVhdGUgPSBmdW5jdGlvbiAoc2NvcGUpIHtcbiAgICByZXR1cm4gdGhpcy5jb21waWxlKCkuZXZhbHVhdGUoc2NvcGUpO1xuICB9O1xuICAvKipcbiAgICogRXZhbHVhdGUgdGhlIG5vZGVcbiAgICogQHBhcmFtIHtPYmplY3R9IFtzY29wZV0gIFNjb3BlIHRvIHJlYWQvd3JpdGUgdmFyaWFibGVzXG4gICAqIEByZXR1cm4geyp9ICAgICAgICAgICAgICBSZXR1cm5zIHRoZSByZXN1bHRcbiAgICovXG4gIC8vIFRPRE86IERlcHJlY2F0ZWQgc2luY2UgdjYuMC4wLiBDbGVhbiB1cCBzb21lIGRheVxuXG5cbiAgTm9kZS5wcm90b3R5cGUuZXZhbCA9IGZ1bmN0aW9uIChzY29wZSkge1xuICAgICgwLCBfbG9nLndhcm5PbmNlKSgnTWV0aG9kIE5vZGUuZXZhbCBpcyByZW5hbWVkIHRvIE5vZGUuZXZhbHVhdGUuIFBsZWFzZSB1c2UgdGhlIG5ldyBtZXRob2QgbmFtZS4nKTtcbiAgICByZXR1cm4gdGhpcy5ldmFsdWF0ZShzY29wZSk7XG4gIH07XG5cbiAgTm9kZS5wcm90b3R5cGUudHlwZSA9ICdOb2RlJztcbiAgTm9kZS5wcm90b3R5cGUuaXNOb2RlID0gdHJ1ZTtcbiAgTm9kZS5wcm90b3R5cGUuY29tbWVudCA9ICcnO1xuICAvKipcbiAgICogQ29tcGlsZSB0aGUgbm9kZSBpbnRvIGFuIG9wdGltaXplZCwgZXZhdWF0YWJsZSBKYXZhU2NyaXB0IGZ1bmN0aW9uXG4gICAqIEByZXR1cm4ge3tldmFsdWF0ZTogZnVuY3Rpb24oW09iamVjdF0pfX0gb2JqZWN0XG4gICAqICAgICAgICAgICAgICAgIFJldHVybnMgYW4gb2JqZWN0IHdpdGggYSBmdW5jdGlvbiAnZXZhbHVhdGUnLFxuICAgKiAgICAgICAgICAgICAgICB3aGljaCBjYW4gYmUgaW52b2tlZCBhcyBleHByLmV2YWx1YXRlKFtzY29wZTogT2JqZWN0XSksXG4gICAqICAgICAgICAgICAgICAgIHdoZXJlIHNjb3BlIGlzIGFuIG9wdGlvbmFsIG9iamVjdCB3aXRoXG4gICAqICAgICAgICAgICAgICAgIHZhcmlhYmxlcy5cbiAgICovXG5cbiAgTm9kZS5wcm90b3R5cGUuY29tcGlsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXhwciA9IHRoaXMuX2NvbXBpbGUobWF0aFdpdGhUcmFuc2Zvcm0sIHt9KTtcblxuICAgIHZhciBhcmdzID0ge307XG4gICAgdmFyIGNvbnRleHQgPSBudWxsO1xuXG4gICAgZnVuY3Rpb24gZXZhbHVhdGUoc2NvcGUpIHtcbiAgICAgIHZhciBzID0gc2NvcGUgfHwge307XG5cbiAgICAgIF92YWxpZGF0ZVNjb3BlKHMpO1xuXG4gICAgICByZXR1cm4gZXhwcihzLCBhcmdzLCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZXZhbHVhdGU6IGV2YWx1YXRlLFxuICAgICAgLy8gVE9ETzogRGVwcmVjYXRlZCBzaW5jZSB2Ni4wLjAuIENsZWFuIHVwIHNvbWUgZGF5XG4gICAgICBldmFsOiBmdW5jdGlvbiBkZXByZWNhdGVkRXZhbChzY29wZSkge1xuICAgICAgICAoMCwgX2xvZy53YXJuT25jZSkoJ01ldGhvZCBldmFsIGlzIHJlbmFtZWQgdG8gZXZhbHVhdGUuIFBsZWFzZSB1c2UgdGhlIG5ldyBtZXRob2QuJyk7XG4gICAgICAgIHJldHVybiBldmFsdWF0ZShzY29wZSk7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIENvbXBpbGUgYSBub2RlIGludG8gYSBKYXZhU2NyaXB0IGZ1bmN0aW9uLlxuICAgKiBUaGlzIGJhc2ljYWxseSBwcmUtY2FsY3VsYXRlcyBhcyBtdWNoIGFzIHBvc3NpYmxlIGFuZCBvbmx5IGxlYXZlcyBvcGVuXG4gICAqIGNhbGN1bGF0aW9ucyB3aGljaCBkZXBlbmQgb24gYSBkeW5hbWljIHNjb3BlIHdpdGggdmFyaWFibGVzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gbWF0aCAgICAgTWF0aC5qcyBuYW1lc3BhY2Ugd2l0aCBmdW5jdGlvbnMgYW5kIGNvbnN0YW50cy5cbiAgICogQHBhcmFtIHtPYmplY3R9IGFyZ05hbWVzIEFuIG9iamVjdCB3aXRoIGFyZ3VtZW50IG5hbWVzIGFzIGtleSBhbmQgYHRydWVgXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBhcyB2YWx1ZS4gVXNlZCBpbiB0aGUgU3ltYm9sTm9kZSB0byBvcHRpbWl6ZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFyZ3VtZW50cyBmcm9tIHVzZXIgYXNzaWduZWQgZnVuY3Rpb25zXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VlIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUpIG9yIHNwZWNpYWwgc3ltYm9sc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSBgZW5kYCAoc2VlIEluZGV4Tm9kZSkuXG4gICAqIEByZXR1cm4ge2Z1bmN0aW9ufSBSZXR1cm5zIGEgZnVuY3Rpb24gd2hpY2ggY2FuIGJlIGNhbGxlZCBsaWtlOlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWxOb2RlKHNjb3BlOiBPYmplY3QsIGFyZ3M6IE9iamVjdCwgY29udGV4dDogKilcbiAgICovXG5cblxuICBOb2RlLnByb3RvdHlwZS5fY29tcGlsZSA9IGZ1bmN0aW9uIChtYXRoLCBhcmdOYW1lcykge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIF9jb21waWxlIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBieSB0eXBlICcgKyB0aGlzLnR5cGUpO1xuICB9O1xuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBlYWNoIG9mIHRoZSBjaGlsZCBub2RlcyBvZiB0aGlzIG5vZGVcbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpfSBjYWxsYmFja1xuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAvLyBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGVhY2ggb2YgdGhlIE5vZGUgaW1wbGVtZW50YXRpb25zXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcnVuIGZvckVhY2ggb24gYSBOb2RlIGludGVyZmFjZScpO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IE5vZGUgaGF2aW5nIGl0J3MgY2hpbGRzIGJlIHRoZSByZXN1bHRzIG9mIGNhbGxpbmdcbiAgICogdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBlYWNoIG9mIHRoZSBjaGlsZHMgb2YgdGhlIG9yaWdpbmFsIG5vZGUuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKTogTm9kZX0gY2FsbGJhY2tcbiAgICogQHJldHVybnMge09wZXJhdG9yTm9kZX0gUmV0dXJucyBhIHRyYW5zZm9ybWVkIGNvcHkgb2YgdGhlIG5vZGVcbiAgICovXG5cblxuICBOb2RlLnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAvLyBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGVhY2ggb2YgdGhlIE5vZGUgaW1wbGVtZW50YXRpb25zXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcnVuIG1hcCBvbiBhIE5vZGUgaW50ZXJmYWNlJyk7XG4gIH07XG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB3aGV0aGVyIGFuIG9iamVjdCBpcyBhIE5vZGUsIGZvciB1c2Ugd2l0aCBtYXBcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqIEByZXR1cm5zIHtOb2RlfSBSZXR1cm5zIHRoZSBpbnB1dCBpZiBpdCdzIGEgbm9kZSwgZWxzZSB0aHJvd3MgYW4gRXJyb3JcbiAgICogQHByb3RlY3RlZFxuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLl9pZk5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIGlmICghKDAsIF9pcy5pc05vZGUpKG5vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYWxsYmFjayBmdW5jdGlvbiBtdXN0IHJldHVybiBhIE5vZGUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfTtcbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IHRyYXZlcnNlIGFsbCBub2RlcyBpbiBhIG5vZGUgdHJlZS4gRXhlY3V0ZXMgZ2l2ZW4gY2FsbGJhY2sgZm9yXG4gICAqIHRoaXMgbm9kZSBhbmQgZWFjaCBvZiBpdHMgY2hpbGQgbm9kZXMuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obm9kZTogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpfSBjYWxsYmFja1xuICAgKiAgICAgICAgICBBIGNhbGxiYWNrIGNhbGxlZCBmb3IgZXZlcnkgbm9kZSBpbiB0aGUgbm9kZSB0cmVlLlxuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLnRyYXZlcnNlID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgLy8gZXhlY3V0ZSBjYWxsYmFjayBmb3IgaXRzZWxmXG4gICAgY2FsbGJhY2sodGhpcywgbnVsbCwgbnVsbCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgc3RhbmRhcmQvbm8tY2FsbGJhY2stbGl0ZXJhbFxuICAgIC8vIHJlY3Vyc2l2ZWx5IHRyYXZlcnNlIG92ZXIgYWxsIGNoaWxkcyBvZiBhIG5vZGVcblxuICAgIGZ1bmN0aW9uIF90cmF2ZXJzZShub2RlLCBjYWxsYmFjaykge1xuICAgICAgbm9kZS5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCwgcGF0aCwgcGFyZW50KSB7XG4gICAgICAgIGNhbGxiYWNrKGNoaWxkLCBwYXRoLCBwYXJlbnQpO1xuXG4gICAgICAgIF90cmF2ZXJzZShjaGlsZCwgY2FsbGJhY2spO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgX3RyYXZlcnNlKHRoaXMsIGNhbGxiYWNrKTtcbiAgfTtcbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IHRyYW5zZm9ybSBhIG5vZGUgdHJlZSB2aWEgYSB0cmFuc2Zvcm0gZnVuY3Rpb24uXG4gICAqXG4gICAqIEZvciBleGFtcGxlLCB0byByZXBsYWNlIGFsbCBub2RlcyBvZiB0eXBlIFN5bWJvbE5vZGUgaGF2aW5nIG5hbWUgJ3gnIHdpdGggYVxuICAgKiBDb25zdGFudE5vZGUgd2l0aCB2YWx1ZSAyOlxuICAgKlxuICAgKiAgICAgY29uc3QgcmVzID0gTm9kZS50cmFuc2Zvcm0oZnVuY3Rpb24gKG5vZGUsIHBhdGgsIHBhcmVudCkge1xuICAgKiAgICAgICBpZiAobm9kZSAmJiBub2RlLmlzU3ltYm9sTm9kZSkgJiYgKG5vZGUubmFtZSA9PT0gJ3gnKSkge1xuICAgKiAgICAgICAgIHJldHVybiBuZXcgQ29uc3RhbnROb2RlKDIpXG4gICAqICAgICAgIH1cbiAgICogICAgICAgZWxzZSB7XG4gICAqICAgICAgICAgcmV0dXJuIG5vZGVcbiAgICogICAgICAgfVxuICAgKiAgICAgfSlcbiAgICpcbiAgICogQHBhcmFtIHtmdW5jdGlvbihub2RlOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSkgOiBOb2RlfSBjYWxsYmFja1xuICAgKiAgICAgICAgICBBIG1hcHBpbmcgZnVuY3Rpb24gYWNjZXB0aW5nIGEgbm9kZSwgYW5kIHJldHVybmluZ1xuICAgKiAgICAgICAgICBhIHJlcGxhY2VtZW50IGZvciB0aGUgbm9kZSBvciB0aGUgb3JpZ2luYWwgbm9kZS5cbiAgICogICAgICAgICAgU2lnbmF0dXJlOiBjYWxsYmFjayhub2RlOiBOb2RlLCBpbmRleDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpIDogTm9kZVxuICAgKiBAcmV0dXJuIHtOb2RlfSBSZXR1cm5zIHRoZSBvcmlnaW5hbCBub2RlIG9yIGl0cyByZXBsYWNlbWVudFxuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLnRyYW5zZm9ybSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIGZ1bmN0aW9uIF90cmFuc2Zvcm0oY2hpbGQsIHBhdGgsIHBhcmVudCkge1xuICAgICAgdmFyIHJlcGxhY2VtZW50ID0gY2FsbGJhY2soY2hpbGQsIHBhdGgsIHBhcmVudCk7XG5cbiAgICAgIGlmIChyZXBsYWNlbWVudCAhPT0gY2hpbGQpIHtcbiAgICAgICAgLy8gc3RvcCBpdGVyYXRpbmcgd2hlbiB0aGUgbm9kZSBpcyByZXBsYWNlZFxuICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjaGlsZC5tYXAoX3RyYW5zZm9ybSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF90cmFuc2Zvcm0odGhpcywgbnVsbCwgbnVsbCk7XG4gIH07XG4gIC8qKlxuICAgKiBGaW5kIGFueSBub2RlIGluIHRoZSBub2RlIHRyZWUgbWF0Y2hpbmcgZ2l2ZW4gZmlsdGVyIGZ1bmN0aW9uLiBGb3IgZXhhbXBsZSwgdG9cbiAgICogZmluZCBhbGwgbm9kZXMgb2YgdHlwZSBTeW1ib2xOb2RlIGhhdmluZyBuYW1lICd4JzpcbiAgICpcbiAgICogICAgIGNvbnN0IHJlc3VsdHMgPSBOb2RlLmZpbHRlcihmdW5jdGlvbiAobm9kZSkge1xuICAgKiAgICAgICByZXR1cm4gKG5vZGUgJiYgbm9kZS5pc1N5bWJvbE5vZGUpICYmIChub2RlLm5hbWUgPT09ICd4JylcbiAgICogICAgIH0pXG4gICAqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obm9kZTogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpIDogTm9kZX0gY2FsbGJhY2tcbiAgICogICAgICAgICAgICBBIHRlc3QgZnVuY3Rpb24gcmV0dXJuaW5nIHRydWUgd2hlbiBhIG5vZGUgbWF0Y2hlcywgYW5kIGZhbHNlXG4gICAqICAgICAgICAgICAgb3RoZXJ3aXNlLiBGdW5jdGlvbiBzaWduYXR1cmU6XG4gICAqICAgICAgICAgICAgY2FsbGJhY2sobm9kZTogTm9kZSwgaW5kZXg6IHN0cmluZywgcGFyZW50OiBOb2RlKSA6IGJvb2xlYW5cbiAgICogQHJldHVybiB7Tm9kZVtdfSBub2RlcyAgICAgICBBbiBhcnJheSB3aXRoIG5vZGVzIG1hdGNoaW5nIGdpdmVuIGZpbHRlciBjcml0ZXJpYVxuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLmZpbHRlciA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHZhciBub2RlcyA9IFtdO1xuICAgIHRoaXMudHJhdmVyc2UoZnVuY3Rpb24gKG5vZGUsIHBhdGgsIHBhcmVudCkge1xuICAgICAgaWYgKGNhbGxiYWNrKG5vZGUsIHBhdGgsIHBhcmVudCkpIHtcbiAgICAgICAgbm9kZXMucHVzaChub2RlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gbm9kZXM7XG4gIH07IC8vIFRPRE86IGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAxLjEuMCwgcmVtb3ZlIHRoaXMgc29tZSBkYXlcblxuXG4gIE5vZGUucHJvdG90eXBlLmZpbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGdW5jdGlvbiBOb2RlLmZpbmQgaXMgZGVwcmVjYXRlZC4gVXNlIE5vZGUuZmlsdGVyIGluc3RlYWQuJyk7XG4gIH07IC8vIFRPRE86IGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAxLjEuMCwgcmVtb3ZlIHRoaXMgc29tZSBkYXlcblxuXG4gIE5vZGUucHJvdG90eXBlLm1hdGNoID0gZnVuY3Rpb24gKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRnVuY3Rpb24gTm9kZS5tYXRjaCBpcyBkZXByZWNhdGVkLiBTZWUgZnVuY3Rpb25zIE5vZGUuZmlsdGVyLCBOb2RlLnRyYW5zZm9ybSwgTm9kZS50cmF2ZXJzZS4nKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgb2YgdGhpcyBub2RlXG4gICAqIEByZXR1cm4ge05vZGV9XG4gICAqL1xuXG5cbiAgTm9kZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIG9mIHRoZSBOb2RlIGltcGxlbWVudGF0aW9uc1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNsb25lIGEgTm9kZSBpbnRlcmZhY2UnKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGRlZXAgY2xvbmUgb2YgdGhpcyBub2RlXG4gICAqIEByZXR1cm4ge05vZGV9XG4gICAqL1xuXG5cbiAgTm9kZS5wcm90b3R5cGUuY2xvbmVEZWVwID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgcmV0dXJuIG5vZGUuY2xvbmVEZWVwKCk7XG4gICAgfSk7XG4gIH07XG4gIC8qKlxuICAgKiBEZWVwIGNvbXBhcmUgdGhpcyBub2RlIHdpdGggYW5vdGhlciBub2RlLlxuICAgKiBAcGFyYW0ge05vZGV9IG90aGVyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSB3aGVuIGJvdGggbm9kZXMgYXJlIG9mIHRoZSBzYW1lIHR5cGUgYW5kXG4gICAqICAgICAgICAgICAgICAgICAgIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWVzIChhcyBkbyB0aGVpciBjaGlsZHMpXG4gICAqL1xuXG5cbiAgTm9kZS5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gKG90aGVyKSB7XG4gICAgcmV0dXJuIG90aGVyID8gKDAsIF9vYmplY3QuZGVlcFN0cmljdEVxdWFsKSh0aGlzLCBvdGhlcikgOiBmYWxzZTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb24uICh3cmFwcGVyIGZ1bmN0aW9uKVxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGNhbiBnZXQgYW4gb2JqZWN0IG9mIHRoZSBmb2xsb3dpbmcgZm9ybTpcbiAgICoge1xuICAgKiAgICBoYW5kbGVyOiAvL1RoaXMgY2FuIGJlIGEgY2FsbGJhY2sgZnVuY3Rpb24gb2YgdGhlIGZvcm1cbiAgICogICAgICAgICAgICAgLy8gXCJmdW5jdGlvbiBjYWxsYmFjayhub2RlLCBvcHRpb25zKVwib3JcbiAgICogICAgICAgICAgICAgLy8gYSBtYXAgdGhhdCBtYXBzIGZ1bmN0aW9uIG5hbWVzICh1c2VkIGluIEZ1bmN0aW9uTm9kZXMpXG4gICAqICAgICAgICAgICAgIC8vIHRvIGNhbGxiYWNrc1xuICAgKiAgICBwYXJlbnRoZXNpczogXCJrZWVwXCIgLy90aGUgcGFyZW50aGVzaXMgb3B0aW9uIChUaGlzIGlzIG9wdGlvbmFsKVxuICAgKiB9XG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgY3VzdG9tU3RyaW5nO1xuXG4gICAgaWYgKG9wdGlvbnMgJiYgX3R5cGVvZihvcHRpb25zKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHN3aXRjaCAoX3R5cGVvZihvcHRpb25zLmhhbmRsZXIpKSB7XG4gICAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgICAgIGN1c3RvbVN0cmluZyA9IG9wdGlvbnMuaGFuZGxlcih0aGlzLCBvcHRpb25zKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdCBvciBmdW5jdGlvbiBleHBlY3RlZCBhcyBjYWxsYmFjaycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY3VzdG9tU3RyaW5nICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGN1c3RvbVN0cmluZztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fdG9TdHJpbmcob3B0aW9ucyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBub2RlXG4gICAqIEJvdGggLnRvSlNPTigpIGFuZCB0aGUgc3RhdGljIC5mcm9tSlNPTihqc29uKSBzaG91bGQgYmUgaW1wbGVtZW50ZWQgYnkgYWxsXG4gICAqIGltcGxlbWVudGF0aW9ucyBvZiBOb2RlXG4gICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAqL1xuXG5cbiAgTm9kZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHNlcmlhbGl6ZSBvYmplY3Q6IHRvSlNPTiBub3QgaW1wbGVtZW50ZWQgYnkgJyArIHRoaXMudHlwZSk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgSFRNTCByZXByZXNlbnRhdGlvbi4gKHdyYXBwZXIgZnVuY3Rpb24pXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gY2FuIGdldCBhbiBvYmplY3Qgb2YgdGhlIGZvbGxvd2luZyBmb3JtOlxuICAgKiB7XG4gICAqICAgIGhhbmRsZXI6IC8vVGhpcyBjYW4gYmUgYSBjYWxsYmFjayBmdW5jdGlvbiBvZiB0aGUgZm9ybVxuICAgKiAgICAgICAgICAgICAvLyBcImZ1bmN0aW9uIGNhbGxiYWNrKG5vZGUsIG9wdGlvbnMpXCIgb3JcbiAgICogICAgICAgICAgICAgLy8gYSBtYXAgdGhhdCBtYXBzIGZ1bmN0aW9uIG5hbWVzICh1c2VkIGluIEZ1bmN0aW9uTm9kZXMpXG4gICAqICAgICAgICAgICAgIC8vIHRvIGNhbGxiYWNrc1xuICAgKiAgICBwYXJlbnRoZXNpczogXCJrZWVwXCIgLy90aGUgcGFyZW50aGVzaXMgb3B0aW9uIChUaGlzIGlzIG9wdGlvbmFsKVxuICAgKiB9XG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLnRvSFRNTCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIGN1c3RvbVN0cmluZztcblxuICAgIGlmIChvcHRpb25zICYmIF90eXBlb2Yob3B0aW9ucykgPT09ICdvYmplY3QnKSB7XG4gICAgICBzd2l0Y2ggKF90eXBlb2Yob3B0aW9ucy5oYW5kbGVyKSkge1xuICAgICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgICBjdXN0b21TdHJpbmcgPSBvcHRpb25zLmhhbmRsZXIodGhpcywgb3B0aW9ucyk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qgb3IgZnVuY3Rpb24gZXhwZWN0ZWQgYXMgY2FsbGJhY2snKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGN1c3RvbVN0cmluZyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBjdXN0b21TdHJpbmc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudG9IVE1MKG9wdGlvbnMpO1xuICB9O1xuICAvKipcbiAgICogSW50ZXJuYWwgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgdGhlIHN0cmluZyBvdXRwdXQuXG4gICAqIFRoaXMgaGFzIHRvIGJlIGltcGxlbWVudGVkIGJ5IGV2ZXJ5IE5vZGVcbiAgICpcbiAgICogQHRocm93cyB7RXJyb3J9XG4gICAqL1xuXG5cbiAgTm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBvZiB0aGUgTm9kZSBpbXBsZW1lbnRhdGlvbnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ190b1N0cmluZyBub3QgaW1wbGVtZW50ZWQgZm9yICcgKyB0aGlzLnR5cGUpO1xuICB9O1xuICAvKipcbiAgICogR2V0IExhVGVYIHJlcHJlc2VudGF0aW9uLiAod3JhcHBlciBmdW5jdGlvbilcbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiBjYW4gZ2V0IGFuIG9iamVjdCBvZiB0aGUgZm9sbG93aW5nIGZvcm06XG4gICAqIHtcbiAgICogICAgaGFuZGxlcjogLy9UaGlzIGNhbiBiZSBhIGNhbGxiYWNrIGZ1bmN0aW9uIG9mIHRoZSBmb3JtXG4gICAqICAgICAgICAgICAgIC8vIFwiZnVuY3Rpb24gY2FsbGJhY2sobm9kZSwgb3B0aW9ucylcIm9yXG4gICAqICAgICAgICAgICAgIC8vIGEgbWFwIHRoYXQgbWFwcyBmdW5jdGlvbiBuYW1lcyAodXNlZCBpbiBGdW5jdGlvbk5vZGVzKVxuICAgKiAgICAgICAgICAgICAvLyB0byBjYWxsYmFja3NcbiAgICogICAgcGFyZW50aGVzaXM6IFwia2VlcFwiIC8vdGhlIHBhcmVudGhlc2lzIG9wdGlvbiAoVGhpcyBpcyBvcHRpb25hbClcbiAgICogfVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBOb2RlLnByb3RvdHlwZS50b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIGN1c3RvbVRleDtcblxuICAgIGlmIChvcHRpb25zICYmIF90eXBlb2Yob3B0aW9ucykgPT09ICdvYmplY3QnKSB7XG4gICAgICBzd2l0Y2ggKF90eXBlb2Yob3B0aW9ucy5oYW5kbGVyKSkge1xuICAgICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgICBjdXN0b21UZXggPSBvcHRpb25zLmhhbmRsZXIodGhpcywgb3B0aW9ucyk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qgb3IgZnVuY3Rpb24gZXhwZWN0ZWQgYXMgY2FsbGJhY2snKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGN1c3RvbVRleCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBjdXN0b21UZXg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3RvVGV4KG9wdGlvbnMpO1xuICB9O1xuICAvKipcbiAgICogSW50ZXJuYWwgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgdGhlIExhVGVYIG91dHB1dC5cbiAgICogVGhpcyBoYXMgdG8gYmUgaW1wbGVtZW50ZWQgYnkgZXZlcnkgTm9kZVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gICAqIEB0aHJvd3Mge0Vycm9yfVxuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLl90b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgLy8gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIG9mIHRoZSBOb2RlIGltcGxlbWVudGF0aW9uc1xuICAgIHRocm93IG5ldyBFcnJvcignX3RvVGV4IG5vdCBpbXBsZW1lbnRlZCBmb3IgJyArIHRoaXMudHlwZSk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgaWRlbnRpZmllci5cbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLmdldElkZW50aWZpZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCB0aGUgY29udGVudCBvZiB0aGUgY3VycmVudCBOb2RlLlxuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLmdldENvbnRlbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGUgc3ltYm9sIG5hbWVzIG9mIGEgc2NvcGUuXG4gICAqIFRocm93cyBhbiBlcnJvciB3aGVuIHRoZSBzY29wZSBjb250YWlucyBhbiBpbGxlZ2FsIHN5bWJvbC5cbiAgICogQHBhcmFtIHtPYmplY3R9IHNjb3BlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX3ZhbGlkYXRlU2NvcGUoc2NvcGUpIHtcbiAgICBmb3IgKHZhciBzeW1ib2wgaW4gc2NvcGUpIHtcbiAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoc2NvcGUsIHN5bWJvbCkpIHtcbiAgICAgICAgaWYgKHN5bWJvbCBpbiBfa2V5d29yZHMua2V5d29yZHMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Njb3BlIGNvbnRhaW5zIGFuIGlsbGVnYWwgc3ltYm9sLCBcIicgKyBzeW1ib2wgKyAnXCIgaXMgYSByZXNlcnZlZCBrZXl3b3JkJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gTm9kZTtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZSxcbiAgaXNOb2RlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTm9kZSA9IGNyZWF0ZU5vZGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU9iamVjdE5vZGUgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3N0cmluZ1wiKTtcblxudmFyIF9jdXN0b21zID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2N1c3RvbXNcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIG5hbWUgPSAnT2JqZWN0Tm9kZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydOb2RlJ107XG52YXIgY3JlYXRlT2JqZWN0Tm9kZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBOb2RlID0gX3JlZi5Ob2RlO1xuXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3IgT2JqZWN0Tm9kZVxuICAgKiBAZXh0ZW5kcyB7Tm9kZX1cbiAgICogSG9sZHMgYW4gb2JqZWN0IHdpdGgga2V5cy92YWx1ZXNcbiAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywgTm9kZT59IFtwcm9wZXJ0aWVzXSAgIG9iamVjdCB3aXRoIGtleS92YWx1ZSBwYWlyc1xuICAgKi9cbiAgZnVuY3Rpb24gT2JqZWN0Tm9kZShwcm9wZXJ0aWVzKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIE9iamVjdE5vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH1cblxuICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXMgfHwge307IC8vIHZhbGlkYXRlIGlucHV0XG5cbiAgICBpZiAocHJvcGVydGllcykge1xuICAgICAgaWYgKCEoX3R5cGVvZihwcm9wZXJ0aWVzKSA9PT0gJ29iamVjdCcpIHx8ICFPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKS5ldmVyeShmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHJldHVybiAoMCwgX2lzLmlzTm9kZSkocHJvcGVydGllc1trZXldKTtcbiAgICAgIH0pKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdCBjb250YWluaW5nIE5vZGVzIGV4cGVjdGVkJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgT2JqZWN0Tm9kZS5wcm90b3R5cGUgPSBuZXcgTm9kZSgpO1xuICBPYmplY3ROb2RlLnByb3RvdHlwZS50eXBlID0gJ09iamVjdE5vZGUnO1xuICBPYmplY3ROb2RlLnByb3RvdHlwZS5pc09iamVjdE5vZGUgPSB0cnVlO1xuICAvKipcbiAgICogQ29tcGlsZSBhIG5vZGUgaW50byBhIEphdmFTY3JpcHQgZnVuY3Rpb24uXG4gICAqIFRoaXMgYmFzaWNhbGx5IHByZS1jYWxjdWxhdGVzIGFzIG11Y2ggYXMgcG9zc2libGUgYW5kIG9ubHkgbGVhdmVzIG9wZW5cbiAgICogY2FsY3VsYXRpb25zIHdoaWNoIGRlcGVuZCBvbiBhIGR5bmFtaWMgc2NvcGUgd2l0aCB2YXJpYWJsZXMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBtYXRoICAgICBNYXRoLmpzIG5hbWVzcGFjZSB3aXRoIGZ1bmN0aW9ucyBhbmQgY29uc3RhbnRzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gYXJnTmFtZXMgQW4gb2JqZWN0IHdpdGggYXJndW1lbnQgbmFtZXMgYXMga2V5IGFuZCBgdHJ1ZWBcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHZhbHVlLiBVc2VkIGluIHRoZSBTeW1ib2xOb2RlIHRvIG9wdGltaXplXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJndW1lbnRzIGZyb20gdXNlciBhc3NpZ25lZCBmdW5jdGlvbnNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIChzZWUgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSkgb3Igc3BlY2lhbCBzeW1ib2xzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlIGBlbmRgIChzZWUgSW5kZXhOb2RlKS5cbiAgICogQHJldHVybiB7ZnVuY3Rpb259IFJldHVybnMgYSBmdW5jdGlvbiB3aGljaCBjYW4gYmUgY2FsbGVkIGxpa2U6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgZXZhbE5vZGUoc2NvcGU6IE9iamVjdCwgYXJnczogT2JqZWN0LCBjb250ZXh0OiAqKVxuICAgKi9cblxuICBPYmplY3ROb2RlLnByb3RvdHlwZS5fY29tcGlsZSA9IGZ1bmN0aW9uIChtYXRoLCBhcmdOYW1lcykge1xuICAgIHZhciBldmFsRW50cmllcyA9IHt9O1xuXG4gICAgZm9yICh2YXIga2V5IGluIHRoaXMucHJvcGVydGllcykge1xuICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KSh0aGlzLnByb3BlcnRpZXMsIGtleSkpIHtcbiAgICAgICAgLy8gd2Ugc3RyaW5naWZ5L3BhcnNlIHRoZSBrZXkgaGVyZSB0byByZXNvbHZlIHVuaWNvZGUgY2hhcmFjdGVycyxcbiAgICAgICAgLy8gc28geW91IGNhbm5vdCBjcmVhdGUgYSBrZXkgbGlrZSB7XCJjb1xcXFx1MDA2RXN0cnVjdG9yXCI6IG51bGx9XG4gICAgICAgIHZhciBzdHJpbmdpZmllZEtleSA9ICgwLCBfc3RyaW5nLnN0cmluZ2lmeSkoa2V5KTtcbiAgICAgICAgdmFyIHBhcnNlZEtleSA9IEpTT04ucGFyc2Uoc3RyaW5naWZpZWRLZXkpO1xuXG4gICAgICAgIGlmICghKDAsIF9jdXN0b21zLmlzU2FmZVByb3BlcnR5KSh0aGlzLnByb3BlcnRpZXMsIHBhcnNlZEtleSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGFjY2VzcyB0byBwcm9wZXJ0eSBcIicgKyBwYXJzZWRLZXkgKyAnXCInKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGV2YWxFbnRyaWVzW3BhcnNlZEtleV0gPSB0aGlzLnByb3BlcnRpZXNba2V5XS5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxPYmplY3ROb2RlKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICB2YXIgb2JqID0ge307XG5cbiAgICAgIGZvciAodmFyIF9rZXkgaW4gZXZhbEVudHJpZXMpIHtcbiAgICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShldmFsRW50cmllcywgX2tleSkpIHtcbiAgICAgICAgICBvYmpbX2tleV0gPSBldmFsRW50cmllc1tfa2V5XShzY29wZSwgYXJncywgY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBlYWNoIG9mIHRoZSBjaGlsZCBub2RlcyBvZiB0aGlzIG5vZGVcbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpfSBjYWxsYmFja1xuICAgKi9cblxuXG4gIE9iamVjdE5vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5wcm9wZXJ0aWVzKSB7XG4gICAgICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKHRoaXMucHJvcGVydGllcywga2V5KSkge1xuICAgICAgICBjYWxsYmFjayh0aGlzLnByb3BlcnRpZXNba2V5XSwgJ3Byb3BlcnRpZXNbJyArICgwLCBfc3RyaW5nLnN0cmluZ2lmeSkoa2V5KSArICddJywgdGhpcyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IE9iamVjdE5vZGUgaGF2aW5nIGl0J3MgY2hpbGRzIGJlIHRoZSByZXN1bHRzIG9mIGNhbGxpbmdcbiAgICogdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBlYWNoIG9mIHRoZSBjaGlsZHMgb2YgdGhlIG9yaWdpbmFsIG5vZGUuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKTogTm9kZX0gY2FsbGJhY2tcbiAgICogQHJldHVybnMge09iamVjdE5vZGV9IFJldHVybnMgYSB0cmFuc2Zvcm1lZCBjb3B5IG9mIHRoZSBub2RlXG4gICAqL1xuXG5cbiAgT2JqZWN0Tm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgdmFyIHByb3BlcnRpZXMgPSB7fTtcblxuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnByb3BlcnRpZXMpIHtcbiAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkodGhpcy5wcm9wZXJ0aWVzLCBrZXkpKSB7XG4gICAgICAgIHByb3BlcnRpZXNba2V5XSA9IHRoaXMuX2lmTm9kZShjYWxsYmFjayh0aGlzLnByb3BlcnRpZXNba2V5XSwgJ3Byb3BlcnRpZXNbJyArICgwLCBfc3RyaW5nLnN0cmluZ2lmeSkoa2V5KSArICddJywgdGhpcykpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgT2JqZWN0Tm9kZShwcm9wZXJ0aWVzKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoaXMgbm9kZSwgYSBzaGFsbG93IGNvcHlcbiAgICogQHJldHVybiB7T2JqZWN0Tm9kZX1cbiAgICovXG5cblxuICBPYmplY3ROb2RlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJvcGVydGllcyA9IHt9O1xuXG4gICAgZm9yICh2YXIga2V5IGluIHRoaXMucHJvcGVydGllcykge1xuICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KSh0aGlzLnByb3BlcnRpZXMsIGtleSkpIHtcbiAgICAgICAgcHJvcGVydGllc1trZXldID0gdGhpcy5wcm9wZXJ0aWVzW2tleV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBPYmplY3ROb2RlKHByb3BlcnRpZXMpO1xuICB9O1xuICAvKipcbiAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKiBAb3ZlcnJpZGVcbiAgICovXG5cblxuICBPYmplY3ROb2RlLnByb3RvdHlwZS5fdG9TdHJpbmcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBlbnRyaWVzID0gW107XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5wcm9wZXJ0aWVzKSB7XG4gICAgICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKHRoaXMucHJvcGVydGllcywga2V5KSkge1xuICAgICAgICBlbnRyaWVzLnB1c2goKDAsIF9zdHJpbmcuc3RyaW5naWZ5KShrZXkpICsgJzogJyArIHRoaXMucHJvcGVydGllc1trZXldLnRvU3RyaW5nKG9wdGlvbnMpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gJ3snICsgZW50cmllcy5qb2luKCcsICcpICsgJ30nO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cblxuXG4gIE9iamVjdE5vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnT2JqZWN0Tm9kZScsXG4gICAgICBwcm9wZXJ0aWVzOiB0aGlzLnByb3BlcnRpZXNcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogSW5zdGFudGlhdGUgYW4gT3BlcmF0b3JOb2RlIGZyb20gaXRzIEpTT04gcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIEFuIG9iamVjdCBzdHJ1Y3R1cmVkIGxpa2VcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJPYmplY3ROb2RlXCIsIFwicHJvcGVydGllc1wiOiB7Li4ufX1gLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgbWF0aGpzIGlzIG9wdGlvbmFsXG4gICAqIEByZXR1cm5zIHtPYmplY3ROb2RlfVxuICAgKi9cblxuXG4gIE9iamVjdE5vZGUuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBuZXcgT2JqZWN0Tm9kZShqc29uLnByb3BlcnRpZXMpO1xuICB9O1xuICAvKipcbiAgICogR2V0IEhUTUwgcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuXG5cbiAgT2JqZWN0Tm9kZS5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgZW50cmllcyA9IFtdO1xuXG4gICAgZm9yICh2YXIga2V5IGluIHRoaXMucHJvcGVydGllcykge1xuICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KSh0aGlzLnByb3BlcnRpZXMsIGtleSkpIHtcbiAgICAgICAgZW50cmllcy5wdXNoKCc8c3BhbiBjbGFzcz1cIm1hdGgtc3ltYm9sIG1hdGgtcHJvcGVydHlcIj4nICsgKDAsIF9zdHJpbmcuZXNjYXBlKShrZXkpICsgJzwvc3Bhbj4nICsgJzxzcGFuIGNsYXNzPVwibWF0aC1vcGVyYXRvciBtYXRoLWFzc2lnbm1lbnQtb3BlcmF0b3IgbWF0aC1wcm9wZXJ0eS1hc3NpZ25tZW50LW9wZXJhdG9yIG1hdGgtYmluYXJ5LW9wZXJhdG9yXCI+Ojwvc3Bhbj4nICsgdGhpcy5wcm9wZXJ0aWVzW2tleV0udG9IVE1MKG9wdGlvbnMpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLWN1cmx5LXBhcmVudGhlc2lzXCI+ezwvc3Bhbj4nICsgZW50cmllcy5qb2luKCc8c3BhbiBjbGFzcz1cIm1hdGgtc2VwYXJhdG9yXCI+LDwvc3Bhbj4nKSArICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyZW50aGVzaXMgbWF0aC1jdXJseS1wYXJlbnRoZXNpc1wiPn08L3NwYW4+JztcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBMYVRlWCByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIE9iamVjdE5vZGUucHJvdG90eXBlLl90b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIGVudHJpZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnByb3BlcnRpZXMpIHtcbiAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkodGhpcy5wcm9wZXJ0aWVzLCBrZXkpKSB7XG4gICAgICAgIGVudHJpZXMucHVzaCgnXFxcXG1hdGhiZnsnICsga2V5ICsgJzp9ICYgJyArIHRoaXMucHJvcGVydGllc1trZXldLnRvVGV4KG9wdGlvbnMpICsgJ1xcXFxcXFxcJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFwiXFxcXGxlZnRcXFxce1xcXFxiZWdpbnthcnJheX17bGx9XCIuY29uY2F0KGVudHJpZXMuam9pbignXFxuJyksIFwiXFxcXGVuZHthcnJheX1cXFxccmlnaHRcXFxcfVwiKTtcbiAgfTtcblxuICByZXR1cm4gT2JqZWN0Tm9kZTtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZSxcbiAgaXNOb2RlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlT2JqZWN0Tm9kZSA9IGNyZWF0ZU9iamVjdE5vZGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU9wZXJhdG9yTm9kZSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvc3RyaW5nXCIpO1xuXG52YXIgX2N1c3RvbXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY3VzdG9tc1wiKTtcblxudmFyIF9vcGVyYXRvcnMgPSByZXF1aXJlKFwiLi4vb3BlcmF0b3JzXCIpO1xuXG52YXIgX2xhdGV4ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2xhdGV4XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnT3BlcmF0b3JOb2RlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ05vZGUnXTtcbnZhciBjcmVhdGVPcGVyYXRvck5vZGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgTm9kZSA9IF9yZWYuTm9kZTtcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yIE9wZXJhdG9yTm9kZVxuICAgKiBAZXh0ZW5kcyB7Tm9kZX1cbiAgICogQW4gb3BlcmF0b3Igd2l0aCB0d28gYXJndW1lbnRzLCBsaWtlIDIrM1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3AgICAgICAgICAgIE9wZXJhdG9yIG5hbWUsIGZvciBleGFtcGxlICcrJ1xuICAgKiBAcGFyYW0ge3N0cmluZ30gZm4gICAgICAgICAgIEZ1bmN0aW9uIG5hbWUsIGZvciBleGFtcGxlICdhZGQnXG4gICAqIEBwYXJhbSB7Tm9kZVtdfSBhcmdzICAgICAgICAgT3BlcmF0b3IgYXJndW1lbnRzXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ltcGxpY2l0XSAgSXMgdGhpcyBhbiBpbXBsaWNpdCBtdWx0aXBsaWNhdGlvbj9cbiAgICovXG4gIGZ1bmN0aW9uIE9wZXJhdG9yTm9kZShvcCwgZm4sIGFyZ3MsIGltcGxpY2l0KSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIE9wZXJhdG9yTm9kZSkpIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7XG4gICAgfSAvLyB2YWxpZGF0ZSBpbnB1dFxuXG5cbiAgICBpZiAodHlwZW9mIG9wICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc3RyaW5nIGV4cGVjdGVkIGZvciBwYXJhbWV0ZXIgXCJvcFwiJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3N0cmluZyBleHBlY3RlZCBmb3IgcGFyYW1ldGVyIFwiZm5cIicpO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShhcmdzKSB8fCAhYXJncy5ldmVyeShfaXMuaXNOb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgY29udGFpbmluZyBOb2RlcyBleHBlY3RlZCBmb3IgcGFyYW1ldGVyIFwiYXJnc1wiJyk7XG4gICAgfVxuXG4gICAgdGhpcy5pbXBsaWNpdCA9IGltcGxpY2l0ID09PSB0cnVlO1xuICAgIHRoaXMub3AgPSBvcDtcbiAgICB0aGlzLmZuID0gZm47XG4gICAgdGhpcy5hcmdzID0gYXJncyB8fCBbXTtcbiAgfVxuXG4gIE9wZXJhdG9yTm9kZS5wcm90b3R5cGUgPSBuZXcgTm9kZSgpO1xuICBPcGVyYXRvck5vZGUucHJvdG90eXBlLnR5cGUgPSAnT3BlcmF0b3JOb2RlJztcbiAgT3BlcmF0b3JOb2RlLnByb3RvdHlwZS5pc09wZXJhdG9yTm9kZSA9IHRydWU7XG4gIC8qKlxuICAgKiBDb21waWxlIGEgbm9kZSBpbnRvIGEgSmF2YVNjcmlwdCBmdW5jdGlvbi5cbiAgICogVGhpcyBiYXNpY2FsbHkgcHJlLWNhbGN1bGF0ZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSBhbmQgb25seSBsZWF2ZXMgb3BlblxuICAgKiBjYWxjdWxhdGlvbnMgd2hpY2ggZGVwZW5kIG9uIGEgZHluYW1pYyBzY29wZSB3aXRoIHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG1hdGggICAgIE1hdGguanMgbmFtZXNwYWNlIHdpdGggZnVuY3Rpb25zIGFuZCBjb25zdGFudHMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdOYW1lcyBBbiBvYmplY3Qgd2l0aCBhcmd1bWVudCBuYW1lcyBhcyBrZXkgYW5kIGB0cnVlYFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdmFsdWUuIFVzZWQgaW4gdGhlIFN5bWJvbE5vZGUgdG8gb3B0aW1pemVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudHMgZnJvbSB1c2VyIGFzc2lnbmVkIGZ1bmN0aW9uc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZSBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKSBvciBzcGVjaWFsIHN5bWJvbHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UgYGVuZGAgKHNlZSBJbmRleE5vZGUpLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgbGlrZTpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICBldmFsTm9kZShzY29wZTogT2JqZWN0LCBhcmdzOiBPYmplY3QsIGNvbnRleHQ6ICopXG4gICAqL1xuXG4gIE9wZXJhdG9yTm9kZS5wcm90b3R5cGUuX2NvbXBpbGUgPSBmdW5jdGlvbiAobWF0aCwgYXJnTmFtZXMpIHtcbiAgICAvLyB2YWxpZGF0ZSBmblxuICAgIGlmICh0eXBlb2YgdGhpcy5mbiAhPT0gJ3N0cmluZycgfHwgISgwLCBfY3VzdG9tcy5pc1NhZmVNZXRob2QpKG1hdGgsIHRoaXMuZm4pKSB7XG4gICAgICBpZiAoIW1hdGhbdGhpcy5mbl0pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGdW5jdGlvbiAnICsgdGhpcy5mbiArICcgbWlzc2luZyBpbiBwcm92aWRlZCBuYW1lc3BhY2UgXCJtYXRoXCInKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gYWNjZXNzIHRvIGZ1bmN0aW9uIFwiJyArIHRoaXMuZm4gKyAnXCInKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZm4gPSAoMCwgX2N1c3RvbXMuZ2V0U2FmZVByb3BlcnR5KShtYXRoLCB0aGlzLmZuKTtcbiAgICB2YXIgZXZhbEFyZ3MgPSAoMCwgX2FycmF5Lm1hcCkodGhpcy5hcmdzLCBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICByZXR1cm4gYXJnLl9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTtcbiAgICB9KTtcblxuICAgIGlmIChldmFsQXJncy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHZhciBldmFsQXJnMCA9IGV2YWxBcmdzWzBdO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxPcGVyYXRvck5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGZuKGV2YWxBcmcwKHNjb3BlLCBhcmdzLCBjb250ZXh0KSk7XG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoZXZhbEFyZ3MubGVuZ3RoID09PSAyKSB7XG4gICAgICB2YXIgX2V2YWxBcmcgPSBldmFsQXJnc1swXTtcbiAgICAgIHZhciBldmFsQXJnMSA9IGV2YWxBcmdzWzFdO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxPcGVyYXRvck5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGZuKF9ldmFsQXJnKHNjb3BlLCBhcmdzLCBjb250ZXh0KSwgZXZhbEFyZzEoc2NvcGUsIGFyZ3MsIGNvbnRleHQpKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBldmFsT3BlcmF0b3JOb2RlKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBmbi5hcHBseShudWxsLCAoMCwgX2FycmF5Lm1hcCkoZXZhbEFyZ3MsIGZ1bmN0aW9uIChldmFsQXJnKSB7XG4gICAgICAgICAgcmV0dXJuIGV2YWxBcmcoc2NvcGUsIGFyZ3MsIGNvbnRleHQpO1xuICAgICAgICB9KSk7XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZWFjaCBvZiB0aGUgY2hpbGQgbm9kZXMgb2YgdGhpcyBub2RlXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKX0gY2FsbGJhY2tcbiAgICovXG5cblxuICBPcGVyYXRvck5vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgY2FsbGJhY2sodGhpcy5hcmdzW2ldLCAnYXJnc1snICsgaSArICddJywgdGhpcyk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IE9wZXJhdG9yTm9kZSBoYXZpbmcgaXQncyBjaGlsZHMgYmUgdGhlIHJlc3VsdHMgb2YgY2FsbGluZ1xuICAgKiB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggb2YgdGhlIGNoaWxkcyBvZiB0aGUgb3JpZ2luYWwgbm9kZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpOiBOb2RlfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7T3BlcmF0b3JOb2RlfSBSZXR1cm5zIGEgdHJhbnNmb3JtZWQgY29weSBvZiB0aGUgbm9kZVxuICAgKi9cblxuXG4gIE9wZXJhdG9yTm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcmdzW2ldID0gdGhpcy5faWZOb2RlKGNhbGxiYWNrKHRoaXMuYXJnc1tpXSwgJ2FyZ3NbJyArIGkgKyAnXScsIHRoaXMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yTm9kZSh0aGlzLm9wLCB0aGlzLmZuLCBhcmdzLCB0aGlzLmltcGxpY2l0KTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoaXMgbm9kZSwgYSBzaGFsbG93IGNvcHlcbiAgICogQHJldHVybiB7T3BlcmF0b3JOb2RlfVxuICAgKi9cblxuXG4gIE9wZXJhdG9yTm9kZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUodGhpcy5vcCwgdGhpcy5mbiwgdGhpcy5hcmdzLnNsaWNlKDApLCB0aGlzLmltcGxpY2l0KTtcbiAgfTtcbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgdGhpcyBpcyBhbiB1bmFyeSBPcGVyYXRvck5vZGU6XG4gICAqIGhhcyBleGFjdGx5IG9uZSBhcmd1bWVudCwgbGlrZSBgLWFgLlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgd2hlbiBhbiB1bmFyeSBvcGVyYXRvciBub2RlLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuXG5cbiAgT3BlcmF0b3JOb2RlLnByb3RvdHlwZS5pc1VuYXJ5ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmFyZ3MubGVuZ3RoID09PSAxO1xuICB9O1xuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciB0aGlzIGlzIGEgYmluYXJ5IE9wZXJhdG9yTm9kZTpcbiAgICogaGFzIGV4YWN0bHkgdHdvIGFyZ3VtZW50cywgbGlrZSBgYSArIGJgLlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgd2hlbiBhIGJpbmFyeSBvcGVyYXRvciBub2RlLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuXG5cbiAgT3BlcmF0b3JOb2RlLnByb3RvdHlwZS5pc0JpbmFyeSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5hcmdzLmxlbmd0aCA9PT0gMjtcbiAgfTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB3aGljaCBwYXJlbnRoZXNlcyBhcmUgbmVjZXNzYXJ5LiBHZXRzIGFuIE9wZXJhdG9yTm9kZVxuICAgKiAod2hpY2ggaXMgdGhlIHJvb3Qgb2YgdGhlIHRyZWUpIGFuZCBhbiBBcnJheSBvZiBOb2Rlc1xuICAgKiAodGhpcy5hcmdzKSBhbmQgcmV0dXJucyBhbiBhcnJheSB3aGVyZSAndHJ1ZScgbWVhbnMgdGhhdCBhbiBhcmd1bWVudFxuICAgKiBoYXMgdG8gYmUgZW5jbG9zZWQgaW4gcGFyZW50aGVzZXMgd2hlcmVhcyAnZmFsc2UnIG1lYW5zIHRoZSBvcHBvc2l0ZS5cbiAgICpcbiAgICogQHBhcmFtIHtPcGVyYXRvck5vZGV9IHJvb3RcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhcmVudGhlc2lzXG4gICAqIEBwYXJhbSB7Tm9kZVtdfSBhcmdzXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gbGF0ZXhcbiAgICogQHJldHVybiB7Ym9vbGVhbltdfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGNhbGN1bGF0ZU5lY2Vzc2FyeVBhcmVudGhlc2VzKHJvb3QsIHBhcmVudGhlc2lzLCBpbXBsaWNpdCwgYXJncywgbGF0ZXgpIHtcbiAgICAvLyBwcmVjZWRlbmNlIG9mIHRoZSByb290IE9wZXJhdG9yTm9kZVxuICAgIHZhciBwcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkocm9vdCwgcGFyZW50aGVzaXMpO1xuICAgIHZhciBhc3NvY2lhdGl2aXR5ID0gKDAsIF9vcGVyYXRvcnMuZ2V0QXNzb2NpYXRpdml0eSkocm9vdCwgcGFyZW50aGVzaXMpO1xuXG4gICAgaWYgKHBhcmVudGhlc2lzID09PSAnYWxsJyB8fCBhcmdzLmxlbmd0aCA+IDIgJiYgcm9vdC5nZXRJZGVudGlmaWVyKCkgIT09ICdPcGVyYXRvck5vZGU6YWRkJyAmJiByb290LmdldElkZW50aWZpZXIoKSAhPT0gJ09wZXJhdG9yTm9kZTptdWx0aXBseScpIHtcbiAgICAgIHJldHVybiBhcmdzLm1hcChmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgIHN3aXRjaCAoYXJnLmdldENvbnRlbnQoKS50eXBlKSB7XG4gICAgICAgICAgLy8gTm9kZXMgdGhhdCBkb24ndCBuZWVkIGV4dHJhIHBhcmVudGhlc2VzXG4gICAgICAgICAgY2FzZSAnQXJyYXlOb2RlJzpcbiAgICAgICAgICBjYXNlICdDb25zdGFudE5vZGUnOlxuICAgICAgICAgIGNhc2UgJ1N5bWJvbE5vZGUnOlxuICAgICAgICAgIGNhc2UgJ1BhcmVudGhlc2lzTm9kZSc6XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhciByZXN1bHQ7XG5cbiAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIHJlc3VsdCA9IFtdO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAxOlxuICAgICAgICAvLyB1bmFyeSBvcGVyYXRvcnNcbiAgICAgICAge1xuICAgICAgICAgIC8vIHByZWNlZGVuY2Ugb2YgdGhlIG9wZXJhbmRcbiAgICAgICAgICB2YXIgb3BlcmFuZFByZWNlZGVuY2UgPSAoMCwgX29wZXJhdG9ycy5nZXRQcmVjZWRlbmNlKShhcmdzWzBdLCBwYXJlbnRoZXNpcyk7IC8vIGhhbmRsZSBzcGVjaWFsIGNhc2VzIGZvciBMYVRlWCwgd2hlcmUgc29tZSBvZiB0aGUgcGFyZW50aGVzZXMgYXJlbid0IG5lZWRlZFxuXG4gICAgICAgICAgaWYgKGxhdGV4ICYmIG9wZXJhbmRQcmVjZWRlbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgb3BlcmFuZElkZW50aWZpZXI7XG4gICAgICAgICAgICB2YXIgcm9vdElkZW50aWZpZXI7XG5cbiAgICAgICAgICAgIGlmIChwYXJlbnRoZXNpcyA9PT0gJ2tlZXAnKSB7XG4gICAgICAgICAgICAgIG9wZXJhbmRJZGVudGlmaWVyID0gYXJnc1swXS5nZXRJZGVudGlmaWVyKCk7XG4gICAgICAgICAgICAgIHJvb3RJZGVudGlmaWVyID0gcm9vdC5nZXRJZGVudGlmaWVyKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBJZ25vcmUgUGFyZW50aGVzaXMgTm9kZXMgd2hlbiBub3QgaW4gJ2tlZXAnIG1vZGVcbiAgICAgICAgICAgICAgb3BlcmFuZElkZW50aWZpZXIgPSBhcmdzWzBdLmdldENvbnRlbnQoKS5nZXRJZGVudGlmaWVyKCk7XG4gICAgICAgICAgICAgIHJvb3RJZGVudGlmaWVyID0gcm9vdC5nZXRDb250ZW50KCkuZ2V0SWRlbnRpZmllcigpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoX29wZXJhdG9ycy5wcm9wZXJ0aWVzW3ByZWNlZGVuY2VdW3Jvb3RJZGVudGlmaWVyXS5sYXRleExlZnRQYXJlbnMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIHJlc3VsdCA9IFtmYWxzZV07XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoX29wZXJhdG9ycy5wcm9wZXJ0aWVzW29wZXJhbmRQcmVjZWRlbmNlXVtvcGVyYW5kSWRlbnRpZmllcl0ubGF0ZXhQYXJlbnMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIHJlc3VsdCA9IFtmYWxzZV07XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChvcGVyYW5kUHJlY2VkZW5jZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gaWYgdGhlIG9wZXJhbmQgaGFzIG5vIGRlZmluZWQgcHJlY2VkZW5jZSwgbm8gcGFyZW5zIGFyZSBuZWVkZWRcbiAgICAgICAgICAgIHJlc3VsdCA9IFtmYWxzZV07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAob3BlcmFuZFByZWNlZGVuY2UgPD0gcHJlY2VkZW5jZSkge1xuICAgICAgICAgICAgLy8gaWYgdGhlIG9wZXJhbmRzIHByZWNlZGVuY2UgaXMgbG93ZXIsIHBhcmVucyBhcmUgbmVlZGVkXG4gICAgICAgICAgICByZXN1bHQgPSBbdHJ1ZV07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IC8vIG90aGVyd2lzZSwgbm8gcGFyZW5zIG5lZWRlZFxuXG5cbiAgICAgICAgICByZXN1bHQgPSBbZmFsc2VdO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDI6XG4gICAgICAgIC8vIGJpbmFyeSBvcGVyYXRvcnNcbiAgICAgICAge1xuICAgICAgICAgIHZhciBsaHNQYXJlbnM7IC8vIGxlZnQgaGFuZCBzaWRlIG5lZWRzIHBhcmVudGhlc2lzP1xuICAgICAgICAgIC8vIHByZWNlZGVuY2Ugb2YgdGhlIGxlZnQgaGFuZCBzaWRlXG5cbiAgICAgICAgICB2YXIgbGhzUHJlY2VkZW5jZSA9ICgwLCBfb3BlcmF0b3JzLmdldFByZWNlZGVuY2UpKGFyZ3NbMF0sIHBhcmVudGhlc2lzKTsgLy8gaXMgdGhlIHJvb3Qgbm9kZSBhc3NvY2lhdGl2ZSB3aXRoIHRoZSBsZWZ0IGhhbmQgc2lkZVxuXG4gICAgICAgICAgdmFyIGFzc29jV2l0aExocyA9ICgwLCBfb3BlcmF0b3JzLmlzQXNzb2NpYXRpdmVXaXRoKShyb290LCBhcmdzWzBdLCBwYXJlbnRoZXNpcyk7XG5cbiAgICAgICAgICBpZiAobGhzUHJlY2VkZW5jZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gaWYgdGhlIGxlZnQgaGFuZCBzaWRlIGhhcyBubyBkZWZpbmVkIHByZWNlZGVuY2UsIG5vIHBhcmVucyBhcmUgbmVlZGVkXG4gICAgICAgICAgICAvLyBGdW5jdGlvbk5vZGUgZm9yIGV4YW1wbGVcbiAgICAgICAgICAgIGxoc1BhcmVucyA9IGZhbHNlO1xuICAgICAgICAgIH0gZWxzZSBpZiAobGhzUHJlY2VkZW5jZSA9PT0gcHJlY2VkZW5jZSAmJiBhc3NvY2lhdGl2aXR5ID09PSAncmlnaHQnICYmICFhc3NvY1dpdGhMaHMpIHtcbiAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgZXF1YWwgcHJlY2VkZW5jZSwgaWYgdGhlIHJvb3Qgbm9kZSBpcyBsZWZ0IGFzc29jaWF0aXZlXG4gICAgICAgICAgICAvLyBwYXJlbnMgYXJlICoqbmV2ZXIqKiBuZWNlc3NhcnkgZm9yIHRoZSBsZWZ0IGhhbmQgc2lkZS5cbiAgICAgICAgICAgIC8vIElmIGl0IGlzIHJpZ2h0IGFzc29jaWF0aXZlIGhvd2V2ZXIsIHBhcmVucyBhcmUgbmVjZXNzYXJ5XG4gICAgICAgICAgICAvLyBpZiB0aGUgcm9vdCBub2RlIGlzbid0IGFzc29jaWF0aXZlIHdpdGggdGhlIGxlZnQgaGFuZCBzaWRlXG4gICAgICAgICAgICBsaHNQYXJlbnMgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAobGhzUHJlY2VkZW5jZSA8IHByZWNlZGVuY2UpIHtcbiAgICAgICAgICAgIGxoc1BhcmVucyA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxoc1BhcmVucyA9IGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciByaHNQYXJlbnM7IC8vIHJpZ2h0IGhhbmQgc2lkZSBuZWVkcyBwYXJlbnRoZXNpcz9cbiAgICAgICAgICAvLyBwcmVjZWRlbmNlIG9mIHRoZSByaWdodCBoYW5kIHNpZGVcblxuICAgICAgICAgIHZhciByaHNQcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkoYXJnc1sxXSwgcGFyZW50aGVzaXMpOyAvLyBpcyB0aGUgcm9vdCBub2RlIGFzc29jaWF0aXZlIHdpdGggdGhlIHJpZ2h0IGhhbmQgc2lkZT9cblxuICAgICAgICAgIHZhciBhc3NvY1dpdGhSaHMgPSAoMCwgX29wZXJhdG9ycy5pc0Fzc29jaWF0aXZlV2l0aCkocm9vdCwgYXJnc1sxXSwgcGFyZW50aGVzaXMpO1xuXG4gICAgICAgICAgaWYgKHJoc1ByZWNlZGVuY2UgPT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIGlmIHRoZSByaWdodCBoYW5kIHNpZGUgaGFzIG5vIGRlZmluZWQgcHJlY2VkZW5jZSwgbm8gcGFyZW5zIGFyZSBuZWVkZWRcbiAgICAgICAgICAgIC8vIEZ1bmN0aW9uTm9kZSBmb3IgZXhhbXBsZVxuICAgICAgICAgICAgcmhzUGFyZW5zID0gZmFsc2U7XG4gICAgICAgICAgfSBlbHNlIGlmIChyaHNQcmVjZWRlbmNlID09PSBwcmVjZWRlbmNlICYmIGFzc29jaWF0aXZpdHkgPT09ICdsZWZ0JyAmJiAhYXNzb2NXaXRoUmhzKSB7XG4gICAgICAgICAgICAvLyBJbiBjYXNlIG9mIGVxdWFsIHByZWNlZGVuY2UsIGlmIHRoZSByb290IG5vZGUgaXMgcmlnaHQgYXNzb2NpYXRpdmVcbiAgICAgICAgICAgIC8vIHBhcmVucyBhcmUgKipuZXZlcioqIG5lY2Vzc2FyeSBmb3IgdGhlIHJpZ2h0IGhhbmQgc2lkZS5cbiAgICAgICAgICAgIC8vIElmIGl0IGlzIGxlZnQgYXNzb2NpYXRpdmUgaG93ZXZlciwgcGFyZW5zIGFyZSBuZWNlc3NhcnlcbiAgICAgICAgICAgIC8vIGlmIHRoZSByb290IG5vZGUgaXNuJ3QgYXNzb2NpYXRpdmUgd2l0aCB0aGUgcmlnaHQgaGFuZCBzaWRlXG4gICAgICAgICAgICByaHNQYXJlbnMgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAocmhzUHJlY2VkZW5jZSA8IHByZWNlZGVuY2UpIHtcbiAgICAgICAgICAgIHJoc1BhcmVucyA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJoc1BhcmVucyA9IGZhbHNlO1xuICAgICAgICAgIH0gLy8gaGFuZGxlIHNwZWNpYWwgY2FzZXMgZm9yIExhVGVYLCB3aGVyZSBzb21lIG9mIHRoZSBwYXJlbnRoZXNlcyBhcmVuJ3QgbmVlZGVkXG5cblxuICAgICAgICAgIGlmIChsYXRleCkge1xuICAgICAgICAgICAgdmFyIF9yb290SWRlbnRpZmllcjtcblxuICAgICAgICAgICAgdmFyIGxoc0lkZW50aWZpZXI7XG4gICAgICAgICAgICB2YXIgcmhzSWRlbnRpZmllcjtcblxuICAgICAgICAgICAgaWYgKHBhcmVudGhlc2lzID09PSAna2VlcCcpIHtcbiAgICAgICAgICAgICAgX3Jvb3RJZGVudGlmaWVyID0gcm9vdC5nZXRJZGVudGlmaWVyKCk7XG4gICAgICAgICAgICAgIGxoc0lkZW50aWZpZXIgPSByb290LmFyZ3NbMF0uZ2V0SWRlbnRpZmllcigpO1xuICAgICAgICAgICAgICByaHNJZGVudGlmaWVyID0gcm9vdC5hcmdzWzFdLmdldElkZW50aWZpZXIoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIElnbm9yZSBQYXJlbnRoZXNpc05vZGVzIHdoZW4gbm90IGluICdrZWVwJyBtb2RlXG4gICAgICAgICAgICAgIF9yb290SWRlbnRpZmllciA9IHJvb3QuZ2V0Q29udGVudCgpLmdldElkZW50aWZpZXIoKTtcbiAgICAgICAgICAgICAgbGhzSWRlbnRpZmllciA9IHJvb3QuYXJnc1swXS5nZXRDb250ZW50KCkuZ2V0SWRlbnRpZmllcigpO1xuICAgICAgICAgICAgICByaHNJZGVudGlmaWVyID0gcm9vdC5hcmdzWzFdLmdldENvbnRlbnQoKS5nZXRJZGVudGlmaWVyKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChsaHNQcmVjZWRlbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIGlmIChfb3BlcmF0b3JzLnByb3BlcnRpZXNbcHJlY2VkZW5jZV1bX3Jvb3RJZGVudGlmaWVyXS5sYXRleExlZnRQYXJlbnMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgbGhzUGFyZW5zID0gZmFsc2U7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoX29wZXJhdG9ycy5wcm9wZXJ0aWVzW2xoc1ByZWNlZGVuY2VdW2xoc0lkZW50aWZpZXJdLmxhdGV4UGFyZW5zID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIGxoc1BhcmVucyA9IGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyaHNQcmVjZWRlbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIGlmIChfb3BlcmF0b3JzLnByb3BlcnRpZXNbcHJlY2VkZW5jZV1bX3Jvb3RJZGVudGlmaWVyXS5sYXRleFJpZ2h0UGFyZW5zID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJoc1BhcmVucyA9IGZhbHNlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKF9vcGVyYXRvcnMucHJvcGVydGllc1tyaHNQcmVjZWRlbmNlXVtyaHNJZGVudGlmaWVyXS5sYXRleFBhcmVucyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByaHNQYXJlbnMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlc3VsdCA9IFtsaHNQYXJlbnMsIHJoc1BhcmVuc107XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChyb290LmdldElkZW50aWZpZXIoKSA9PT0gJ09wZXJhdG9yTm9kZTphZGQnIHx8IHJvb3QuZ2V0SWRlbnRpZmllcigpID09PSAnT3BlcmF0b3JOb2RlOm11bHRpcGx5Jykge1xuICAgICAgICAgIHJlc3VsdCA9IGFyZ3MubWFwKGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgICAgIHZhciBhcmdQcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkoYXJnLCBwYXJlbnRoZXNpcyk7XG4gICAgICAgICAgICB2YXIgYXNzb2NXaXRoQXJnID0gKDAsIF9vcGVyYXRvcnMuaXNBc3NvY2lhdGl2ZVdpdGgpKHJvb3QsIGFyZywgcGFyZW50aGVzaXMpO1xuICAgICAgICAgICAgdmFyIGFyZ0Fzc29jaWF0aXZpdHkgPSAoMCwgX29wZXJhdG9ycy5nZXRBc3NvY2lhdGl2aXR5KShhcmcsIHBhcmVudGhlc2lzKTtcblxuICAgICAgICAgICAgaWYgKGFyZ1ByZWNlZGVuY2UgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gaWYgdGhlIGFyZ3VtZW50IGhhcyBubyBkZWZpbmVkIHByZWNlZGVuY2UsIG5vIHBhcmVucyBhcmUgbmVlZGVkXG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJlY2VkZW5jZSA9PT0gYXJnUHJlY2VkZW5jZSAmJiBhc3NvY2lhdGl2aXR5ID09PSBhcmdBc3NvY2lhdGl2aXR5ICYmICFhc3NvY1dpdGhBcmcpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGFyZ1ByZWNlZGVuY2UgPCBwcmVjZWRlbmNlKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICB9IC8vIGhhbmRsZXMgYW4gZWRnZSBjYXNlIG9mICdhdXRvJyBwYXJlbnRoZXNlcyB3aXRoIGltcGxpY2l0IG11bHRpcGxpY2F0aW9uIG9mIENvbnN0YW50Tm9kZVxuICAgIC8vIEluIHRoYXQgY2FzZSBwcmludCBwYXJlbnRoZXNlcyBmb3IgUGFyZW50aGVzaXNOb2RlcyBldmVuIHRob3VnaCB0aGV5IG5vcm1hbGx5IHdvdWxkbid0IGJlXG4gICAgLy8gcHJpbnRlZC5cblxuXG4gICAgaWYgKGFyZ3MubGVuZ3RoID49IDIgJiYgcm9vdC5nZXRJZGVudGlmaWVyKCkgPT09ICdPcGVyYXRvck5vZGU6bXVsdGlwbHknICYmIHJvb3QuaW1wbGljaXQgJiYgcGFyZW50aGVzaXMgPT09ICdhdXRvJyAmJiBpbXBsaWNpdCA9PT0gJ2hpZGUnKSB7XG4gICAgICByZXN1bHQgPSBhcmdzLm1hcChmdW5jdGlvbiAoYXJnLCBpbmRleCkge1xuICAgICAgICB2YXIgaXNQYXJlbnRoZXNpc05vZGUgPSBhcmcuZ2V0SWRlbnRpZmllcigpID09PSAnUGFyZW50aGVzaXNOb2RlJztcblxuICAgICAgICBpZiAocmVzdWx0W2luZGV4XSB8fCBpc1BhcmVudGhlc2lzTm9kZSkge1xuICAgICAgICAgIC8vIHB1dCBpbiBwYXJlbnRoZXNpcz9cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgLyoqXG4gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb24uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqL1xuXG5cbiAgT3BlcmF0b3JOb2RlLnByb3RvdHlwZS5fdG9TdHJpbmcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBwYXJlbnRoZXNpcyA9IG9wdGlvbnMgJiYgb3B0aW9ucy5wYXJlbnRoZXNpcyA/IG9wdGlvbnMucGFyZW50aGVzaXMgOiAna2VlcCc7XG4gICAgdmFyIGltcGxpY2l0ID0gb3B0aW9ucyAmJiBvcHRpb25zLmltcGxpY2l0ID8gb3B0aW9ucy5pbXBsaWNpdCA6ICdoaWRlJztcbiAgICB2YXIgYXJncyA9IHRoaXMuYXJncztcbiAgICB2YXIgcGFyZW5zID0gY2FsY3VsYXRlTmVjZXNzYXJ5UGFyZW50aGVzZXModGhpcywgcGFyZW50aGVzaXMsIGltcGxpY2l0LCBhcmdzLCBmYWxzZSk7XG5cbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDEpIHtcbiAgICAgIC8vIHVuYXJ5IG9wZXJhdG9yc1xuICAgICAgdmFyIGFzc29jID0gKDAsIF9vcGVyYXRvcnMuZ2V0QXNzb2NpYXRpdml0eSkodGhpcywgcGFyZW50aGVzaXMpO1xuICAgICAgdmFyIG9wZXJhbmQgPSBhcmdzWzBdLnRvU3RyaW5nKG9wdGlvbnMpO1xuXG4gICAgICBpZiAocGFyZW5zWzBdKSB7XG4gICAgICAgIG9wZXJhbmQgPSAnKCcgKyBvcGVyYW5kICsgJyknO1xuICAgICAgfSAvLyBmb3IgZXhhbXBsZSBmb3IgXCJub3RcIiwgd2Ugd2FudCBhIHNwYWNlIGJldHdlZW4gb3BlcmFuZCBhbmQgYXJndW1lbnRcblxuXG4gICAgICB2YXIgb3BJc05hbWVkID0gL1thLXpBLVpdKy8udGVzdCh0aGlzLm9wKTtcblxuICAgICAgaWYgKGFzc29jID09PSAncmlnaHQnKSB7XG4gICAgICAgIC8vIHByZWZpeCBvcGVyYXRvclxuICAgICAgICByZXR1cm4gdGhpcy5vcCArIChvcElzTmFtZWQgPyAnICcgOiAnJykgKyBvcGVyYW5kO1xuICAgICAgfSBlbHNlIGlmIChhc3NvYyA9PT0gJ2xlZnQnKSB7XG4gICAgICAgIC8vIHBvc3RmaXhcbiAgICAgICAgcmV0dXJuIG9wZXJhbmQgKyAob3BJc05hbWVkID8gJyAnIDogJycpICsgdGhpcy5vcDtcbiAgICAgIH0gLy8gZmFsbCBiYWNrIHRvIHBvc3RmaXhcblxuXG4gICAgICByZXR1cm4gb3BlcmFuZCArIHRoaXMub3A7XG4gICAgfSBlbHNlIGlmIChhcmdzLmxlbmd0aCA9PT0gMikge1xuICAgICAgdmFyIGxocyA9IGFyZ3NbMF0udG9TdHJpbmcob3B0aW9ucyk7IC8vIGxlZnQgaGFuZCBzaWRlXG5cbiAgICAgIHZhciByaHMgPSBhcmdzWzFdLnRvU3RyaW5nKG9wdGlvbnMpOyAvLyByaWdodCBoYW5kIHNpZGVcblxuICAgICAgaWYgKHBhcmVuc1swXSkge1xuICAgICAgICAvLyBsZWZ0IGhhbmQgc2lkZSBpbiBwYXJlbnRoZXNpcz9cbiAgICAgICAgbGhzID0gJygnICsgbGhzICsgJyknO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyZW5zWzFdKSB7XG4gICAgICAgIC8vIHJpZ2h0IGhhbmQgc2lkZSBpbiBwYXJlbnRoZXNpcz9cbiAgICAgICAgcmhzID0gJygnICsgcmhzICsgJyknO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5pbXBsaWNpdCAmJiB0aGlzLmdldElkZW50aWZpZXIoKSA9PT0gJ09wZXJhdG9yTm9kZTptdWx0aXBseScgJiYgaW1wbGljaXQgPT09ICdoaWRlJykge1xuICAgICAgICByZXR1cm4gbGhzICsgJyAnICsgcmhzO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGhzICsgJyAnICsgdGhpcy5vcCArICcgJyArIHJocztcbiAgICB9IGVsc2UgaWYgKGFyZ3MubGVuZ3RoID4gMiAmJiAodGhpcy5nZXRJZGVudGlmaWVyKCkgPT09ICdPcGVyYXRvck5vZGU6YWRkJyB8fCB0aGlzLmdldElkZW50aWZpZXIoKSA9PT0gJ09wZXJhdG9yTm9kZTptdWx0aXBseScpKSB7XG4gICAgICB2YXIgc3RyaW5naWZpZWRBcmdzID0gYXJncy5tYXAoZnVuY3Rpb24gKGFyZywgaW5kZXgpIHtcbiAgICAgICAgYXJnID0gYXJnLnRvU3RyaW5nKG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChwYXJlbnNbaW5kZXhdKSB7XG4gICAgICAgICAgLy8gcHV0IGluIHBhcmVudGhlc2lzP1xuICAgICAgICAgIGFyZyA9ICcoJyArIGFyZyArICcpJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhcmc7XG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMuaW1wbGljaXQgJiYgdGhpcy5nZXRJZGVudGlmaWVyKCkgPT09ICdPcGVyYXRvck5vZGU6bXVsdGlwbHknICYmIGltcGxpY2l0ID09PSAnaGlkZScpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZ2lmaWVkQXJncy5qb2luKCcgJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdHJpbmdpZmllZEFyZ3Muam9pbignICcgKyB0aGlzLm9wICsgJyAnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZmFsbGJhY2sgdG8gZm9ybWF0dGluZyBhcyBhIGZ1bmN0aW9uIGNhbGxcbiAgICAgIHJldHVybiB0aGlzLmZuICsgJygnICsgdGhpcy5hcmdzLmpvaW4oJywgJykgKyAnKSc7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cblxuXG4gIE9wZXJhdG9yTm9kZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdPcGVyYXRvck5vZGUnLFxuICAgICAgb3A6IHRoaXMub3AsXG4gICAgICBmbjogdGhpcy5mbixcbiAgICAgIGFyZ3M6IHRoaXMuYXJncyxcbiAgICAgIGltcGxpY2l0OiB0aGlzLmltcGxpY2l0XG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIEluc3RhbnRpYXRlIGFuIE9wZXJhdG9yTm9kZSBmcm9tIGl0cyBKU09OIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBqc29uICBBbiBvYmplY3Qgc3RydWN0dXJlZCBsaWtlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiT3BlcmF0b3JOb2RlXCIsIFwib3BcIjogXCIrXCIsIFwiZm5cIjogXCJhZGRcIiwgXCJhcmdzXCI6IFsuLi5dLCBcImltcGxpY2l0XCI6IGZhbHNlfWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge09wZXJhdG9yTm9kZX1cbiAgICovXG5cblxuICBPcGVyYXRvck5vZGUuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKGpzb24ub3AsIGpzb24uZm4sIGpzb24uYXJncywganNvbi5pbXBsaWNpdCk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgSFRNTCByZXByZXNlbnRhdGlvbi5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBPcGVyYXRvck5vZGUucHJvdG90eXBlLnRvSFRNTCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIHBhcmVudGhlc2lzID0gb3B0aW9ucyAmJiBvcHRpb25zLnBhcmVudGhlc2lzID8gb3B0aW9ucy5wYXJlbnRoZXNpcyA6ICdrZWVwJztcbiAgICB2YXIgaW1wbGljaXQgPSBvcHRpb25zICYmIG9wdGlvbnMuaW1wbGljaXQgPyBvcHRpb25zLmltcGxpY2l0IDogJ2hpZGUnO1xuICAgIHZhciBhcmdzID0gdGhpcy5hcmdzO1xuICAgIHZhciBwYXJlbnMgPSBjYWxjdWxhdGVOZWNlc3NhcnlQYXJlbnRoZXNlcyh0aGlzLCBwYXJlbnRoZXNpcywgaW1wbGljaXQsIGFyZ3MsIGZhbHNlKTtcblxuICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgLy8gdW5hcnkgb3BlcmF0b3JzXG4gICAgICB2YXIgYXNzb2MgPSAoMCwgX29wZXJhdG9ycy5nZXRBc3NvY2lhdGl2aXR5KSh0aGlzLCBwYXJlbnRoZXNpcyk7XG4gICAgICB2YXIgb3BlcmFuZCA9IGFyZ3NbMF0udG9IVE1MKG9wdGlvbnMpO1xuXG4gICAgICBpZiAocGFyZW5zWzBdKSB7XG4gICAgICAgIG9wZXJhbmQgPSAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4oPC9zcGFuPicgKyBvcGVyYW5kICsgJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KTwvc3Bhbj4nO1xuICAgICAgfVxuXG4gICAgICBpZiAoYXNzb2MgPT09ICdyaWdodCcpIHtcbiAgICAgICAgLy8gcHJlZml4IG9wZXJhdG9yXG4gICAgICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJtYXRoLW9wZXJhdG9yIG1hdGgtdW5hcnktb3BlcmF0b3IgbWF0aC1sZWZ0aGFuZC11bmFyeS1vcGVyYXRvclwiPicgKyAoMCwgX3N0cmluZy5lc2NhcGUpKHRoaXMub3ApICsgJzwvc3Bhbj4nICsgb3BlcmFuZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHBvc3RmaXggd2hlbiBhc3NvYyA9PT0gJ2xlZnQnIG9yIHVuZGVmaW5lZFxuICAgICAgICByZXR1cm4gb3BlcmFuZCArICc8c3BhbiBjbGFzcz1cIm1hdGgtb3BlcmF0b3IgbWF0aC11bmFyeS1vcGVyYXRvciBtYXRoLXJpZ2h0aGFuZC11bmFyeS1vcGVyYXRvclwiPicgKyAoMCwgX3N0cmluZy5lc2NhcGUpKHRoaXMub3ApICsgJzwvc3Bhbj4nO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYXJncy5sZW5ndGggPT09IDIpIHtcbiAgICAgIC8vIGJpbmFyeSBvcGVyYXRvZXNcbiAgICAgIHZhciBsaHMgPSBhcmdzWzBdLnRvSFRNTChvcHRpb25zKTsgLy8gbGVmdCBoYW5kIHNpZGVcblxuICAgICAgdmFyIHJocyA9IGFyZ3NbMV0udG9IVE1MKG9wdGlvbnMpOyAvLyByaWdodCBoYW5kIHNpZGVcblxuICAgICAgaWYgKHBhcmVuc1swXSkge1xuICAgICAgICAvLyBsZWZ0IGhhbmQgc2lkZSBpbiBwYXJlbnRoZXNpcz9cbiAgICAgICAgbGhzID0gJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KDwvc3Bhbj4nICsgbGhzICsgJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KTwvc3Bhbj4nO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyZW5zWzFdKSB7XG4gICAgICAgIC8vIHJpZ2h0IGhhbmQgc2lkZSBpbiBwYXJlbnRoZXNpcz9cbiAgICAgICAgcmhzID0gJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KDwvc3Bhbj4nICsgcmhzICsgJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KTwvc3Bhbj4nO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5pbXBsaWNpdCAmJiB0aGlzLmdldElkZW50aWZpZXIoKSA9PT0gJ09wZXJhdG9yTm9kZTptdWx0aXBseScgJiYgaW1wbGljaXQgPT09ICdoaWRlJykge1xuICAgICAgICByZXR1cm4gbGhzICsgJzxzcGFuIGNsYXNzPVwibWF0aC1vcGVyYXRvciBtYXRoLWJpbmFyeS1vcGVyYXRvciBtYXRoLWltcGxpY2l0LWJpbmFyeS1vcGVyYXRvclwiPjwvc3Bhbj4nICsgcmhzO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGhzICsgJzxzcGFuIGNsYXNzPVwibWF0aC1vcGVyYXRvciBtYXRoLWJpbmFyeS1vcGVyYXRvciBtYXRoLWV4cGxpY2l0LWJpbmFyeS1vcGVyYXRvclwiPicgKyAoMCwgX3N0cmluZy5lc2NhcGUpKHRoaXMub3ApICsgJzwvc3Bhbj4nICsgcmhzO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgc3RyaW5naWZpZWRBcmdzID0gYXJncy5tYXAoZnVuY3Rpb24gKGFyZywgaW5kZXgpIHtcbiAgICAgICAgYXJnID0gYXJnLnRvSFRNTChvcHRpb25zKTtcblxuICAgICAgICBpZiAocGFyZW5zW2luZGV4XSkge1xuICAgICAgICAgIC8vIHB1dCBpbiBwYXJlbnRoZXNpcz9cbiAgICAgICAgICBhcmcgPSAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4oPC9zcGFuPicgKyBhcmcgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4pPC9zcGFuPic7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXJnO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDIgJiYgKHRoaXMuZ2V0SWRlbnRpZmllcigpID09PSAnT3BlcmF0b3JOb2RlOmFkZCcgfHwgdGhpcy5nZXRJZGVudGlmaWVyKCkgPT09ICdPcGVyYXRvck5vZGU6bXVsdGlwbHknKSkge1xuICAgICAgICBpZiAodGhpcy5pbXBsaWNpdCAmJiB0aGlzLmdldElkZW50aWZpZXIoKSA9PT0gJ09wZXJhdG9yTm9kZTptdWx0aXBseScgJiYgaW1wbGljaXQgPT09ICdoaWRlJykge1xuICAgICAgICAgIHJldHVybiBzdHJpbmdpZmllZEFyZ3Muam9pbignPHNwYW4gY2xhc3M9XCJtYXRoLW9wZXJhdG9yIG1hdGgtYmluYXJ5LW9wZXJhdG9yIG1hdGgtaW1wbGljaXQtYmluYXJ5LW9wZXJhdG9yXCI+PC9zcGFuPicpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN0cmluZ2lmaWVkQXJncy5qb2luKCc8c3BhbiBjbGFzcz1cIm1hdGgtb3BlcmF0b3IgbWF0aC1iaW5hcnktb3BlcmF0b3IgbWF0aC1leHBsaWNpdC1iaW5hcnktb3BlcmF0b3JcIj4nICsgKDAsIF9zdHJpbmcuZXNjYXBlKSh0aGlzLm9wKSArICc8L3NwYW4+Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBmYWxsYmFjayB0byBmb3JtYXR0aW5nIGFzIGEgZnVuY3Rpb24gY2FsbFxuICAgICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1mdW5jdGlvblwiPicgKyAoMCwgX3N0cmluZy5lc2NhcGUpKHRoaXMuZm4pICsgJzwvc3Bhbj48c3BhbiBjbGFzcz1cIm1hdGgtcGFyYW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPig8L3NwYW4+JyArIHN0cmluZ2lmaWVkQXJncy5qb2luKCc8c3BhbiBjbGFzcz1cIm1hdGgtc2VwYXJhdG9yXCI+LDwvc3Bhbj4nKSArICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyYW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPik8L3NwYW4+JztcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgTGFUZVggcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBPcGVyYXRvck5vZGUucHJvdG90eXBlLl90b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIHBhcmVudGhlc2lzID0gb3B0aW9ucyAmJiBvcHRpb25zLnBhcmVudGhlc2lzID8gb3B0aW9ucy5wYXJlbnRoZXNpcyA6ICdrZWVwJztcbiAgICB2YXIgaW1wbGljaXQgPSBvcHRpb25zICYmIG9wdGlvbnMuaW1wbGljaXQgPyBvcHRpb25zLmltcGxpY2l0IDogJ2hpZGUnO1xuICAgIHZhciBhcmdzID0gdGhpcy5hcmdzO1xuICAgIHZhciBwYXJlbnMgPSBjYWxjdWxhdGVOZWNlc3NhcnlQYXJlbnRoZXNlcyh0aGlzLCBwYXJlbnRoZXNpcywgaW1wbGljaXQsIGFyZ3MsIHRydWUpO1xuICAgIHZhciBvcCA9IF9sYXRleC5sYXRleE9wZXJhdG9yc1t0aGlzLmZuXTtcbiAgICBvcCA9IHR5cGVvZiBvcCA9PT0gJ3VuZGVmaW5lZCcgPyB0aGlzLm9wIDogb3A7IC8vIGZhbGwgYmFjayB0byB1c2luZyB0aGlzLm9wXG5cbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDEpIHtcbiAgICAgIC8vIHVuYXJ5IG9wZXJhdG9yc1xuICAgICAgdmFyIGFzc29jID0gKDAsIF9vcGVyYXRvcnMuZ2V0QXNzb2NpYXRpdml0eSkodGhpcywgcGFyZW50aGVzaXMpO1xuICAgICAgdmFyIG9wZXJhbmQgPSBhcmdzWzBdLnRvVGV4KG9wdGlvbnMpO1xuXG4gICAgICBpZiAocGFyZW5zWzBdKSB7XG4gICAgICAgIG9wZXJhbmQgPSBcIlxcXFxsZWZ0KFwiLmNvbmNhdChvcGVyYW5kLCBcIlxcXFxyaWdodClcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChhc3NvYyA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAvLyBwcmVmaXggb3BlcmF0b3JcbiAgICAgICAgcmV0dXJuIG9wICsgb3BlcmFuZDtcbiAgICAgIH0gZWxzZSBpZiAoYXNzb2MgPT09ICdsZWZ0Jykge1xuICAgICAgICAvLyBwb3N0Zml4IG9wZXJhdG9yXG4gICAgICAgIHJldHVybiBvcGVyYW5kICsgb3A7XG4gICAgICB9IC8vIGZhbGwgYmFjayB0byBwb3N0Zml4XG5cblxuICAgICAgcmV0dXJuIG9wZXJhbmQgKyBvcDtcbiAgICB9IGVsc2UgaWYgKGFyZ3MubGVuZ3RoID09PSAyKSB7XG4gICAgICAvLyBiaW5hcnkgb3BlcmF0b3JzXG4gICAgICB2YXIgbGhzID0gYXJnc1swXTsgLy8gbGVmdCBoYW5kIHNpZGVcblxuICAgICAgdmFyIGxoc1RleCA9IGxocy50b1RleChvcHRpb25zKTtcblxuICAgICAgaWYgKHBhcmVuc1swXSkge1xuICAgICAgICBsaHNUZXggPSBcIlxcXFxsZWZ0KFwiLmNvbmNhdChsaHNUZXgsIFwiXFxcXHJpZ2h0KVwiKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHJocyA9IGFyZ3NbMV07IC8vIHJpZ2h0IGhhbmQgc2lkZVxuXG4gICAgICB2YXIgcmhzVGV4ID0gcmhzLnRvVGV4KG9wdGlvbnMpO1xuXG4gICAgICBpZiAocGFyZW5zWzFdKSB7XG4gICAgICAgIHJoc1RleCA9IFwiXFxcXGxlZnQoXCIuY29uY2F0KHJoc1RleCwgXCJcXFxccmlnaHQpXCIpO1xuICAgICAgfSAvLyBoYW5kbGUgc29tZSBleGNlcHRpb25zIChkdWUgdG8gdGhlIHdheSBMYVRlWCB3b3JrcylcblxuXG4gICAgICB2YXIgbGhzSWRlbnRpZmllcjtcblxuICAgICAgaWYgKHBhcmVudGhlc2lzID09PSAna2VlcCcpIHtcbiAgICAgICAgbGhzSWRlbnRpZmllciA9IGxocy5nZXRJZGVudGlmaWVyKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJZ25vcmUgUGFyZW50aGVzaXNOb2RlcyBpZiBpbiAna2VlcCcgbW9kZVxuICAgICAgICBsaHNJZGVudGlmaWVyID0gbGhzLmdldENvbnRlbnQoKS5nZXRJZGVudGlmaWVyKCk7XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAodGhpcy5nZXRJZGVudGlmaWVyKCkpIHtcbiAgICAgICAgY2FzZSAnT3BlcmF0b3JOb2RlOmRpdmlkZSc6XG4gICAgICAgICAgLy8gb3AgY29udGFpbnMgJ1xcXFxmcmFjJyBhdCB0aGlzIHBvaW50XG4gICAgICAgICAgcmV0dXJuIG9wICsgJ3snICsgbGhzVGV4ICsgJ30nICsgJ3snICsgcmhzVGV4ICsgJ30nO1xuXG4gICAgICAgIGNhc2UgJ09wZXJhdG9yTm9kZTpwb3cnOlxuICAgICAgICAgIGxoc1RleCA9ICd7JyArIGxoc1RleCArICd9JztcbiAgICAgICAgICByaHNUZXggPSAneycgKyByaHNUZXggKyAnfSc7XG5cbiAgICAgICAgICBzd2l0Y2ggKGxoc0lkZW50aWZpZXIpIHtcbiAgICAgICAgICAgIGNhc2UgJ0NvbmRpdGlvbmFsTm9kZSc6IC8vXG5cbiAgICAgICAgICAgIGNhc2UgJ09wZXJhdG9yTm9kZTpkaXZpZGUnOlxuICAgICAgICAgICAgICBsaHNUZXggPSBcIlxcXFxsZWZ0KFwiLmNvbmNhdChsaHNUZXgsIFwiXFxcXHJpZ2h0KVwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdPcGVyYXRvck5vZGU6bXVsdGlwbHknOlxuICAgICAgICAgIGlmICh0aGlzLmltcGxpY2l0ICYmIGltcGxpY2l0ID09PSAnaGlkZScpIHtcbiAgICAgICAgICAgIHJldHVybiBsaHNUZXggKyAnficgKyByaHNUZXg7XG4gICAgICAgICAgfVxuXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBsaHNUZXggKyBvcCArIHJoc1RleDtcbiAgICB9IGVsc2UgaWYgKGFyZ3MubGVuZ3RoID4gMiAmJiAodGhpcy5nZXRJZGVudGlmaWVyKCkgPT09ICdPcGVyYXRvck5vZGU6YWRkJyB8fCB0aGlzLmdldElkZW50aWZpZXIoKSA9PT0gJ09wZXJhdG9yTm9kZTptdWx0aXBseScpKSB7XG4gICAgICB2YXIgdGV4aWZpZWRBcmdzID0gYXJncy5tYXAoZnVuY3Rpb24gKGFyZywgaW5kZXgpIHtcbiAgICAgICAgYXJnID0gYXJnLnRvVGV4KG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChwYXJlbnNbaW5kZXhdKSB7XG4gICAgICAgICAgYXJnID0gXCJcXFxcbGVmdChcIi5jb25jYXQoYXJnLCBcIlxcXFxyaWdodClcIik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXJnO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLmdldElkZW50aWZpZXIoKSA9PT0gJ09wZXJhdG9yTm9kZTptdWx0aXBseScgJiYgdGhpcy5pbXBsaWNpdCkge1xuICAgICAgICByZXR1cm4gdGV4aWZpZWRBcmdzLmpvaW4oJ34nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRleGlmaWVkQXJncy5qb2luKG9wKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZmFsbCBiYWNrIHRvIGZvcm1hdHRpbmcgYXMgYSBmdW5jdGlvbiBjYWxsXG4gICAgICAvLyBhcyB0aGlzIGlzIGEgZmFsbGJhY2ssIGl0IGRvZXNuJ3QgdXNlXG4gICAgICAvLyBmYW5jeSBmdW5jdGlvbiBuYW1lc1xuICAgICAgcmV0dXJuICdcXFxcbWF0aHJteycgKyB0aGlzLmZuICsgJ31cXFxcbGVmdCgnICsgYXJncy5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgICAgICByZXR1cm4gYXJnLnRvVGV4KG9wdGlvbnMpO1xuICAgICAgfSkuam9pbignLCcpICsgJ1xcXFxyaWdodCknO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEdldCBpZGVudGlmaWVyLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG5cbiAgT3BlcmF0b3JOb2RlLnByb3RvdHlwZS5nZXRJZGVudGlmaWVyID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGUgKyAnOicgKyB0aGlzLmZuO1xuICB9O1xuXG4gIHJldHVybiBPcGVyYXRvck5vZGU7XG59LCB7XG4gIGlzQ2xhc3M6IHRydWUsXG4gIGlzTm9kZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU9wZXJhdG9yTm9kZSA9IGNyZWF0ZU9wZXJhdG9yTm9kZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUGFyZW50aGVzaXNOb2RlID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnUGFyZW50aGVzaXNOb2RlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ05vZGUnXTtcbnZhciBjcmVhdGVQYXJlbnRoZXNpc05vZGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgTm9kZSA9IF9yZWYuTm9kZTtcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yIFBhcmVudGhlc2lzTm9kZVxuICAgKiBAZXh0ZW5kcyB7Tm9kZX1cbiAgICogQSBwYXJlbnRoZXNpcyBub2RlIGRlc2NyaWJlcyBtYW51YWwgcGFyZW50aGVzaXMgZnJvbSB0aGUgdXNlciBpbnB1dFxuICAgKiBAcGFyYW0ge05vZGV9IGNvbnRlbnRcbiAgICogQGV4dGVuZHMge05vZGV9XG4gICAqL1xuICBmdW5jdGlvbiBQYXJlbnRoZXNpc05vZGUoY29udGVudCkge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQYXJlbnRoZXNpc05vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH0gLy8gdmFsaWRhdGUgaW5wdXRcblxuXG4gICAgaWYgKCEoMCwgX2lzLmlzTm9kZSkoY29udGVudCkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vZGUgZXhwZWN0ZWQgZm9yIHBhcmFtZXRlciBcImNvbnRlbnRcIicpO1xuICAgIH1cblxuICAgIHRoaXMuY29udGVudCA9IGNvbnRlbnQ7XG4gIH1cblxuICBQYXJlbnRoZXNpc05vZGUucHJvdG90eXBlID0gbmV3IE5vZGUoKTtcbiAgUGFyZW50aGVzaXNOb2RlLnByb3RvdHlwZS50eXBlID0gJ1BhcmVudGhlc2lzTm9kZSc7XG4gIFBhcmVudGhlc2lzTm9kZS5wcm90b3R5cGUuaXNQYXJlbnRoZXNpc05vZGUgPSB0cnVlO1xuICAvKipcbiAgICogQ29tcGlsZSBhIG5vZGUgaW50byBhIEphdmFTY3JpcHQgZnVuY3Rpb24uXG4gICAqIFRoaXMgYmFzaWNhbGx5IHByZS1jYWxjdWxhdGVzIGFzIG11Y2ggYXMgcG9zc2libGUgYW5kIG9ubHkgbGVhdmVzIG9wZW5cbiAgICogY2FsY3VsYXRpb25zIHdoaWNoIGRlcGVuZCBvbiBhIGR5bmFtaWMgc2NvcGUgd2l0aCB2YXJpYWJsZXMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBtYXRoICAgICBNYXRoLmpzIG5hbWVzcGFjZSB3aXRoIGZ1bmN0aW9ucyBhbmQgY29uc3RhbnRzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gYXJnTmFtZXMgQW4gb2JqZWN0IHdpdGggYXJndW1lbnQgbmFtZXMgYXMga2V5IGFuZCBgdHJ1ZWBcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHZhbHVlLiBVc2VkIGluIHRoZSBTeW1ib2xOb2RlIHRvIG9wdGltaXplXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJndW1lbnRzIGZyb20gdXNlciBhc3NpZ25lZCBmdW5jdGlvbnNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIChzZWUgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSkgb3Igc3BlY2lhbCBzeW1ib2xzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlIGBlbmRgIChzZWUgSW5kZXhOb2RlKS5cbiAgICogQHJldHVybiB7ZnVuY3Rpb259IFJldHVybnMgYSBmdW5jdGlvbiB3aGljaCBjYW4gYmUgY2FsbGVkIGxpa2U6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgZXZhbE5vZGUoc2NvcGU6IE9iamVjdCwgYXJnczogT2JqZWN0LCBjb250ZXh0OiAqKVxuICAgKi9cblxuICBQYXJlbnRoZXNpc05vZGUucHJvdG90eXBlLl9jb21waWxlID0gZnVuY3Rpb24gKG1hdGgsIGFyZ05hbWVzKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGVudC5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgdGhlIGNvbnRlbnQgb2YgdGhlIGN1cnJlbnQgTm9kZS5cbiAgICogQHJldHVybiB7Tm9kZX0gY29udGVudFxuICAgKiBAb3ZlcnJpZGVcbiAgICoqL1xuXG5cbiAgUGFyZW50aGVzaXNOb2RlLnByb3RvdHlwZS5nZXRDb250ZW50ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRlbnQuZ2V0Q29udGVudCgpO1xuICB9O1xuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBlYWNoIG9mIHRoZSBjaGlsZCBub2RlcyBvZiB0aGlzIG5vZGVcbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpfSBjYWxsYmFja1xuICAgKi9cblxuXG4gIFBhcmVudGhlc2lzTm9kZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIGNhbGxiYWNrKHRoaXMuY29udGVudCwgJ2NvbnRlbnQnLCB0aGlzKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBQYXJlbnRoZXNpc05vZGUgaGF2aW5nIGl0J3MgY2hpbGRzIGJlIHRoZSByZXN1bHRzIG9mIGNhbGxpbmdcbiAgICogdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBlYWNoIG9mIHRoZSBjaGlsZHMgb2YgdGhlIG9yaWdpbmFsIG5vZGUuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKSA6IE5vZGV9IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHtQYXJlbnRoZXNpc05vZGV9IFJldHVybnMgYSBjbG9uZSBvZiB0aGUgbm9kZVxuICAgKi9cblxuXG4gIFBhcmVudGhlc2lzTm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgdmFyIGNvbnRlbnQgPSBjYWxsYmFjayh0aGlzLmNvbnRlbnQsICdjb250ZW50JywgdGhpcyk7XG4gICAgcmV0dXJuIG5ldyBQYXJlbnRoZXNpc05vZGUoY29udGVudCk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIG5vZGUsIGEgc2hhbGxvdyBjb3B5XG4gICAqIEByZXR1cm4ge1BhcmVudGhlc2lzTm9kZX1cbiAgICovXG5cblxuICBQYXJlbnRoZXNpc05vZGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgUGFyZW50aGVzaXNOb2RlKHRoaXMuY29udGVudCk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqIEBvdmVycmlkZVxuICAgKi9cblxuXG4gIFBhcmVudGhlc2lzTm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMgfHwgb3B0aW9ucyAmJiAhb3B0aW9ucy5wYXJlbnRoZXNpcyB8fCBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMgPT09ICdrZWVwJykge1xuICAgICAgcmV0dXJuICcoJyArIHRoaXMuY29udGVudC50b1N0cmluZyhvcHRpb25zKSArICcpJztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jb250ZW50LnRvU3RyaW5nKG9wdGlvbnMpO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cblxuXG4gIFBhcmVudGhlc2lzTm9kZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdQYXJlbnRoZXNpc05vZGUnLFxuICAgICAgY29udGVudDogdGhpcy5jb250ZW50XG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIEluc3RhbnRpYXRlIGFuIFBhcmVudGhlc2lzTm9kZSBmcm9tIGl0cyBKU09OIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBqc29uICBBbiBvYmplY3Qgc3RydWN0dXJlZCBsaWtlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiUGFyZW50aGVzaXNOb2RlXCIsIFwiY29udGVudFwiOiAuLi59YCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG1hdGhqcyBpcyBvcHRpb25hbFxuICAgKiBAcmV0dXJucyB7UGFyZW50aGVzaXNOb2RlfVxuICAgKi9cblxuXG4gIFBhcmVudGhlc2lzTm9kZS5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgcmV0dXJuIG5ldyBQYXJlbnRoZXNpc05vZGUoanNvbi5jb250ZW50KTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBIVE1MIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqIEBvdmVycmlkZVxuICAgKi9cblxuXG4gIFBhcmVudGhlc2lzTm9kZS5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMgfHwgb3B0aW9ucyAmJiAhb3B0aW9ucy5wYXJlbnRoZXNpcyB8fCBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMgPT09ICdrZWVwJykge1xuICAgICAgcmV0dXJuICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPig8L3NwYW4+JyArIHRoaXMuY29udGVudC50b0hUTUwob3B0aW9ucykgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4pPC9zcGFuPic7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29udGVudC50b0hUTUwob3B0aW9ucyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgTGFUZVggcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuXG5cbiAgUGFyZW50aGVzaXNOb2RlLnByb3RvdHlwZS5fdG9UZXggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIGlmICghb3B0aW9ucyB8fCBvcHRpb25zICYmICFvcHRpb25zLnBhcmVudGhlc2lzIHx8IG9wdGlvbnMgJiYgb3B0aW9ucy5wYXJlbnRoZXNpcyA9PT0gJ2tlZXAnKSB7XG4gICAgICByZXR1cm4gXCJcXFxcbGVmdChcIi5jb25jYXQodGhpcy5jb250ZW50LnRvVGV4KG9wdGlvbnMpLCBcIlxcXFxyaWdodClcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29udGVudC50b1RleChvcHRpb25zKTtcbiAgfTtcblxuICByZXR1cm4gUGFyZW50aGVzaXNOb2RlO1xufSwge1xuICBpc0NsYXNzOiB0cnVlLFxuICBpc05vZGU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVQYXJlbnRoZXNpc05vZGUgPSBjcmVhdGVQYXJlbnRoZXNpc05vZGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJhbmdlTm9kZSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfb3BlcmF0b3JzID0gcmVxdWlyZShcIi4uL29wZXJhdG9yc1wiKTtcblxudmFyIG5hbWUgPSAnUmFuZ2VOb2RlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ05vZGUnXTtcbnZhciBjcmVhdGVSYW5nZU5vZGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgTm9kZSA9IF9yZWYuTm9kZTtcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yIFJhbmdlTm9kZVxuICAgKiBAZXh0ZW5kcyB7Tm9kZX1cbiAgICogY3JlYXRlIGEgcmFuZ2VcbiAgICogQHBhcmFtIHtOb2RlfSBzdGFydCAgaW5jbHVkZWQgbG93ZXItYm91bmRcbiAgICogQHBhcmFtIHtOb2RlfSBlbmQgICAgaW5jbHVkZWQgdXBwZXItYm91bmRcbiAgICogQHBhcmFtIHtOb2RlfSBbc3RlcF0gb3B0aW9uYWwgc3RlcFxuICAgKi9cbiAgZnVuY3Rpb24gUmFuZ2VOb2RlKHN0YXJ0LCBlbmQsIHN0ZXApIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmFuZ2VOb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9IC8vIHZhbGlkYXRlIGlucHV0c1xuXG5cbiAgICBpZiAoISgwLCBfaXMuaXNOb2RlKShzdGFydCkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vZGUgZXhwZWN0ZWQnKTtcbiAgICBpZiAoISgwLCBfaXMuaXNOb2RlKShlbmQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdOb2RlIGV4cGVjdGVkJyk7XG4gICAgaWYgKHN0ZXAgJiYgISgwLCBfaXMuaXNOb2RlKShzdGVwKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignTm9kZSBleHBlY3RlZCcpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMykgdGhyb3cgbmV3IEVycm9yKCdUb28gbWFueSBhcmd1bWVudHMnKTtcbiAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7IC8vIGluY2x1ZGVkIGxvd2VyLWJvdW5kXG5cbiAgICB0aGlzLmVuZCA9IGVuZDsgLy8gaW5jbHVkZWQgdXBwZXItYm91bmRcblxuICAgIHRoaXMuc3RlcCA9IHN0ZXAgfHwgbnVsbDsgLy8gb3B0aW9uYWwgc3RlcFxuICB9XG5cbiAgUmFuZ2VOb2RlLnByb3RvdHlwZSA9IG5ldyBOb2RlKCk7XG4gIFJhbmdlTm9kZS5wcm90b3R5cGUudHlwZSA9ICdSYW5nZU5vZGUnO1xuICBSYW5nZU5vZGUucHJvdG90eXBlLmlzUmFuZ2VOb2RlID0gdHJ1ZTtcbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgdGhlIFJhbmdlTm9kZSBuZWVkcyB0aGUgYGVuZGAgc3ltYm9sIHRvIGJlIGRlZmluZWQuXG4gICAqIFRoaXMgZW5kIGlzIHRoZSBzaXplIG9mIHRoZSBNYXRyaXggaW4gY3VycmVudCBkaW1lbnNpb24uXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuXG4gIFJhbmdlTm9kZS5wcm90b3R5cGUubmVlZHNFbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gZmluZCBhbGwgYGVuZGAgc3ltYm9scyBpbiB0aGlzIFJhbmdlTm9kZVxuICAgIHZhciBlbmRTeW1ib2xzID0gdGhpcy5maWx0ZXIoZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIHJldHVybiAoMCwgX2lzLmlzU3ltYm9sTm9kZSkobm9kZSkgJiYgbm9kZS5uYW1lID09PSAnZW5kJztcbiAgICB9KTtcbiAgICByZXR1cm4gZW5kU3ltYm9scy5sZW5ndGggPiAwO1xuICB9O1xuICAvKipcbiAgICogQ29tcGlsZSBhIG5vZGUgaW50byBhIEphdmFTY3JpcHQgZnVuY3Rpb24uXG4gICAqIFRoaXMgYmFzaWNhbGx5IHByZS1jYWxjdWxhdGVzIGFzIG11Y2ggYXMgcG9zc2libGUgYW5kIG9ubHkgbGVhdmVzIG9wZW5cbiAgICogY2FsY3VsYXRpb25zIHdoaWNoIGRlcGVuZCBvbiBhIGR5bmFtaWMgc2NvcGUgd2l0aCB2YXJpYWJsZXMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBtYXRoICAgICBNYXRoLmpzIG5hbWVzcGFjZSB3aXRoIGZ1bmN0aW9ucyBhbmQgY29uc3RhbnRzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gYXJnTmFtZXMgQW4gb2JqZWN0IHdpdGggYXJndW1lbnQgbmFtZXMgYXMga2V5IGFuZCBgdHJ1ZWBcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHZhbHVlLiBVc2VkIGluIHRoZSBTeW1ib2xOb2RlIHRvIG9wdGltaXplXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJndW1lbnRzIGZyb20gdXNlciBhc3NpZ25lZCBmdW5jdGlvbnNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIChzZWUgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSkgb3Igc3BlY2lhbCBzeW1ib2xzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlIGBlbmRgIChzZWUgSW5kZXhOb2RlKS5cbiAgICogQHJldHVybiB7ZnVuY3Rpb259IFJldHVybnMgYSBmdW5jdGlvbiB3aGljaCBjYW4gYmUgY2FsbGVkIGxpa2U6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgZXZhbE5vZGUoc2NvcGU6IE9iamVjdCwgYXJnczogT2JqZWN0LCBjb250ZXh0OiAqKVxuICAgKi9cblxuXG4gIFJhbmdlTm9kZS5wcm90b3R5cGUuX2NvbXBpbGUgPSBmdW5jdGlvbiAobWF0aCwgYXJnTmFtZXMpIHtcbiAgICB2YXIgcmFuZ2UgPSBtYXRoLnJhbmdlO1xuXG4gICAgdmFyIGV2YWxTdGFydCA9IHRoaXMuc3RhcnQuX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpO1xuXG4gICAgdmFyIGV2YWxFbmQgPSB0aGlzLmVuZC5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7XG5cbiAgICBpZiAodGhpcy5zdGVwKSB7XG4gICAgICB2YXIgZXZhbFN0ZXAgPSB0aGlzLnN0ZXAuX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpO1xuXG4gICAgICByZXR1cm4gZnVuY3Rpb24gZXZhbFJhbmdlTm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gcmFuZ2UoZXZhbFN0YXJ0KHNjb3BlLCBhcmdzLCBjb250ZXh0KSwgZXZhbEVuZChzY29wZSwgYXJncywgY29udGV4dCksIGV2YWxTdGVwKHNjb3BlLCBhcmdzLCBjb250ZXh0KSk7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gZXZhbFJhbmdlTm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gcmFuZ2UoZXZhbFN0YXJ0KHNjb3BlLCBhcmdzLCBjb250ZXh0KSwgZXZhbEVuZChzY29wZSwgYXJncywgY29udGV4dCkpO1xuICAgICAgfTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGVhY2ggb2YgdGhlIGNoaWxkIG5vZGVzIG9mIHRoaXMgbm9kZVxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSl9IGNhbGxiYWNrXG4gICAqL1xuXG5cbiAgUmFuZ2VOb2RlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgY2FsbGJhY2sodGhpcy5zdGFydCwgJ3N0YXJ0JywgdGhpcyk7XG4gICAgY2FsbGJhY2sodGhpcy5lbmQsICdlbmQnLCB0aGlzKTtcblxuICAgIGlmICh0aGlzLnN0ZXApIHtcbiAgICAgIGNhbGxiYWNrKHRoaXMuc3RlcCwgJ3N0ZXAnLCB0aGlzKTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgUmFuZ2VOb2RlIGhhdmluZyBpdCdzIGNoaWxkcyBiZSB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nXG4gICAqIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCBvZiB0aGUgY2hpbGRzIG9mIHRoZSBvcmlnaW5hbCBub2RlLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSk6IE5vZGV9IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHtSYW5nZU5vZGV9IFJldHVybnMgYSB0cmFuc2Zvcm1lZCBjb3B5IG9mIHRoZSBub2RlXG4gICAqL1xuXG5cbiAgUmFuZ2VOb2RlLnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICByZXR1cm4gbmV3IFJhbmdlTm9kZSh0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy5zdGFydCwgJ3N0YXJ0JywgdGhpcykpLCB0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy5lbmQsICdlbmQnLCB0aGlzKSksIHRoaXMuc3RlcCAmJiB0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy5zdGVwLCAnc3RlcCcsIHRoaXMpKSk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIG5vZGUsIGEgc2hhbGxvdyBjb3B5XG4gICAqIEByZXR1cm4ge1JhbmdlTm9kZX1cbiAgICovXG5cblxuICBSYW5nZU5vZGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgUmFuZ2VOb2RlKHRoaXMuc3RhcnQsIHRoaXMuZW5kLCB0aGlzLnN0ZXAgJiYgdGhpcy5zdGVwKTtcbiAgfTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgbmVjZXNzYXJ5IHBhcmVudGhlc2VzXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyZW50aGVzaXNcbiAgICogQHJldHVybiB7T2JqZWN0fSBwYXJlbnRoZXNlc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGNhbGN1bGF0ZU5lY2Vzc2FyeVBhcmVudGhlc2VzKG5vZGUsIHBhcmVudGhlc2lzKSB7XG4gICAgdmFyIHByZWNlZGVuY2UgPSAoMCwgX29wZXJhdG9ycy5nZXRQcmVjZWRlbmNlKShub2RlLCBwYXJlbnRoZXNpcyk7XG4gICAgdmFyIHBhcmVucyA9IHt9O1xuICAgIHZhciBzdGFydFByZWNlZGVuY2UgPSAoMCwgX29wZXJhdG9ycy5nZXRQcmVjZWRlbmNlKShub2RlLnN0YXJ0LCBwYXJlbnRoZXNpcyk7XG4gICAgcGFyZW5zLnN0YXJ0ID0gc3RhcnRQcmVjZWRlbmNlICE9PSBudWxsICYmIHN0YXJ0UHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlIHx8IHBhcmVudGhlc2lzID09PSAnYWxsJztcblxuICAgIGlmIChub2RlLnN0ZXApIHtcbiAgICAgIHZhciBzdGVwUHJlY2VkZW5jZSA9ICgwLCBfb3BlcmF0b3JzLmdldFByZWNlZGVuY2UpKG5vZGUuc3RlcCwgcGFyZW50aGVzaXMpO1xuICAgICAgcGFyZW5zLnN0ZXAgPSBzdGVwUHJlY2VkZW5jZSAhPT0gbnVsbCAmJiBzdGVwUHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlIHx8IHBhcmVudGhlc2lzID09PSAnYWxsJztcbiAgICB9XG5cbiAgICB2YXIgZW5kUHJlY2VkZW5jZSA9ICgwLCBfb3BlcmF0b3JzLmdldFByZWNlZGVuY2UpKG5vZGUuZW5kLCBwYXJlbnRoZXNpcyk7XG4gICAgcGFyZW5zLmVuZCA9IGVuZFByZWNlZGVuY2UgIT09IG51bGwgJiYgZW5kUHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlIHx8IHBhcmVudGhlc2lzID09PSAnYWxsJztcbiAgICByZXR1cm4gcGFyZW5zO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqL1xuXG5cbiAgUmFuZ2VOb2RlLnByb3RvdHlwZS5fdG9TdHJpbmcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBwYXJlbnRoZXNpcyA9IG9wdGlvbnMgJiYgb3B0aW9ucy5wYXJlbnRoZXNpcyA/IG9wdGlvbnMucGFyZW50aGVzaXMgOiAna2VlcCc7XG4gICAgdmFyIHBhcmVucyA9IGNhbGN1bGF0ZU5lY2Vzc2FyeVBhcmVudGhlc2VzKHRoaXMsIHBhcmVudGhlc2lzKTsgLy8gZm9ybWF0IHN0cmluZyBhcyBzdGFydDpzdGVwOnN0b3BcblxuICAgIHZhciBzdHI7XG4gICAgdmFyIHN0YXJ0ID0gdGhpcy5zdGFydC50b1N0cmluZyhvcHRpb25zKTtcblxuICAgIGlmIChwYXJlbnMuc3RhcnQpIHtcbiAgICAgIHN0YXJ0ID0gJygnICsgc3RhcnQgKyAnKSc7XG4gICAgfVxuXG4gICAgc3RyID0gc3RhcnQ7XG5cbiAgICBpZiAodGhpcy5zdGVwKSB7XG4gICAgICB2YXIgc3RlcCA9IHRoaXMuc3RlcC50b1N0cmluZyhvcHRpb25zKTtcblxuICAgICAgaWYgKHBhcmVucy5zdGVwKSB7XG4gICAgICAgIHN0ZXAgPSAnKCcgKyBzdGVwICsgJyknO1xuICAgICAgfVxuXG4gICAgICBzdHIgKz0gJzonICsgc3RlcDtcbiAgICB9XG5cbiAgICB2YXIgZW5kID0gdGhpcy5lbmQudG9TdHJpbmcob3B0aW9ucyk7XG5cbiAgICBpZiAocGFyZW5zLmVuZCkge1xuICAgICAgZW5kID0gJygnICsgZW5kICsgJyknO1xuICAgIH1cblxuICAgIHN0ciArPSAnOicgKyBlbmQ7XG4gICAgcmV0dXJuIHN0cjtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGVcbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG5cblxuICBSYW5nZU5vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnUmFuZ2VOb2RlJyxcbiAgICAgIHN0YXJ0OiB0aGlzLnN0YXJ0LFxuICAgICAgZW5kOiB0aGlzLmVuZCxcbiAgICAgIHN0ZXA6IHRoaXMuc3RlcFxuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhbiBSYW5nZU5vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIlJhbmdlTm9kZVwiLCBcInN0YXJ0XCI6IC4uLiwgXCJlbmRcIjogLi4uLCBcInN0ZXBcIjogLi4ufWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge1JhbmdlTm9kZX1cbiAgICovXG5cblxuICBSYW5nZU5vZGUuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBuZXcgUmFuZ2VOb2RlKGpzb24uc3RhcnQsIGpzb24uZW5kLCBqc29uLnN0ZXApO1xuICB9O1xuICAvKipcbiAgICogR2V0IEhUTUwgcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBSYW5nZU5vZGUucHJvdG90eXBlLnRvSFRNTCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIHBhcmVudGhlc2lzID0gb3B0aW9ucyAmJiBvcHRpb25zLnBhcmVudGhlc2lzID8gb3B0aW9ucy5wYXJlbnRoZXNpcyA6ICdrZWVwJztcbiAgICB2YXIgcGFyZW5zID0gY2FsY3VsYXRlTmVjZXNzYXJ5UGFyZW50aGVzZXModGhpcywgcGFyZW50aGVzaXMpOyAvLyBmb3JtYXQgc3RyaW5nIGFzIHN0YXJ0OnN0ZXA6c3RvcFxuXG4gICAgdmFyIHN0cjtcbiAgICB2YXIgc3RhcnQgPSB0aGlzLnN0YXJ0LnRvSFRNTChvcHRpb25zKTtcblxuICAgIGlmIChwYXJlbnMuc3RhcnQpIHtcbiAgICAgIHN0YXJ0ID0gJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KDwvc3Bhbj4nICsgc3RhcnQgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4pPC9zcGFuPic7XG4gICAgfVxuXG4gICAgc3RyID0gc3RhcnQ7XG5cbiAgICBpZiAodGhpcy5zdGVwKSB7XG4gICAgICB2YXIgc3RlcCA9IHRoaXMuc3RlcC50b0hUTUwob3B0aW9ucyk7XG5cbiAgICAgIGlmIChwYXJlbnMuc3RlcCkge1xuICAgICAgICBzdGVwID0gJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KDwvc3Bhbj4nICsgc3RlcCArICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPik8L3NwYW4+JztcbiAgICAgIH1cblxuICAgICAgc3RyICs9ICc8c3BhbiBjbGFzcz1cIm1hdGgtb3BlcmF0b3IgbWF0aC1yYW5nZS1vcGVyYXRvclwiPjo8L3NwYW4+JyArIHN0ZXA7XG4gICAgfVxuXG4gICAgdmFyIGVuZCA9IHRoaXMuZW5kLnRvSFRNTChvcHRpb25zKTtcblxuICAgIGlmIChwYXJlbnMuZW5kKSB7XG4gICAgICBlbmQgPSAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4oPC9zcGFuPicgKyBlbmQgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4pPC9zcGFuPic7XG4gICAgfVxuXG4gICAgc3RyICs9ICc8c3BhbiBjbGFzcz1cIm1hdGgtb3BlcmF0b3IgbWF0aC1yYW5nZS1vcGVyYXRvclwiPjo8L3NwYW4+JyArIGVuZDtcbiAgICByZXR1cm4gc3RyO1xuICB9O1xuICAvKipcbiAgICogR2V0IExhVGVYIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbXMge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIFJhbmdlTm9kZS5wcm90b3R5cGUuX3RvVGV4ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgcGFyZW50aGVzaXMgPSBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMgPyBvcHRpb25zLnBhcmVudGhlc2lzIDogJ2tlZXAnO1xuICAgIHZhciBwYXJlbnMgPSBjYWxjdWxhdGVOZWNlc3NhcnlQYXJlbnRoZXNlcyh0aGlzLCBwYXJlbnRoZXNpcyk7XG4gICAgdmFyIHN0ciA9IHRoaXMuc3RhcnQudG9UZXgob3B0aW9ucyk7XG5cbiAgICBpZiAocGFyZW5zLnN0YXJ0KSB7XG4gICAgICBzdHIgPSBcIlxcXFxsZWZ0KFwiLmNvbmNhdChzdHIsIFwiXFxcXHJpZ2h0KVwiKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdGVwKSB7XG4gICAgICB2YXIgc3RlcCA9IHRoaXMuc3RlcC50b1RleChvcHRpb25zKTtcblxuICAgICAgaWYgKHBhcmVucy5zdGVwKSB7XG4gICAgICAgIHN0ZXAgPSBcIlxcXFxsZWZ0KFwiLmNvbmNhdChzdGVwLCBcIlxcXFxyaWdodClcIik7XG4gICAgICB9XG5cbiAgICAgIHN0ciArPSAnOicgKyBzdGVwO1xuICAgIH1cblxuICAgIHZhciBlbmQgPSB0aGlzLmVuZC50b1RleChvcHRpb25zKTtcblxuICAgIGlmIChwYXJlbnMuZW5kKSB7XG4gICAgICBlbmQgPSBcIlxcXFxsZWZ0KFwiLmNvbmNhdChlbmQsIFwiXFxcXHJpZ2h0KVwiKTtcbiAgICB9XG5cbiAgICBzdHIgKz0gJzonICsgZW5kO1xuICAgIHJldHVybiBzdHI7XG4gIH07XG5cbiAgcmV0dXJuIFJhbmdlTm9kZTtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZSxcbiAgaXNOb2RlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUmFuZ2VOb2RlID0gY3JlYXRlUmFuZ2VOb2RlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVSZWxhdGlvbmFsTm9kZSA9IHZvaWQgMDtcblxudmFyIF9vcGVyYXRvcnMgPSByZXF1aXJlKFwiLi4vb3BlcmF0b3JzXCIpO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfY3VzdG9tcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jdXN0b21zXCIpO1xuXG52YXIgX2xhdGV4ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2xhdGV4XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnUmVsYXRpb25hbE5vZGUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnTm9kZSddO1xudmFyIGNyZWF0ZVJlbGF0aW9uYWxOb2RlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIE5vZGUgPSBfcmVmLk5vZGU7XG5cbiAgLyoqXG4gICAqIEEgbm9kZSByZXByZXNlbnRpbmcgYSBjaGFpbmVkIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24sIHN1Y2ggYXMgJ3ggPiB5ID4geidcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmdbXX0gY29uZGl0aW9uYWxzICAgQW4gYXJyYXkgb2YgY29uZGl0aW9uYWwgb3BlcmF0b3JzIHVzZWQgdG8gY29tcGFyZSB0aGUgcGFyYW1ldGVyc1xuICAgKiBAcGFyYW0ge05vZGVbXX0gcGFyYW1zICAgVGhlIHBhcmFtZXRlcnMgdGhhdCB3aWxsIGJlIGNvbXBhcmVkXG4gICAqXG4gICAqIEBjb25zdHJ1Y3RvciBSZWxhdGlvbmFsTm9kZVxuICAgKiBAZXh0ZW5kcyB7Tm9kZX1cbiAgICovXG4gIGZ1bmN0aW9uIFJlbGF0aW9uYWxOb2RlKGNvbmRpdGlvbmFscywgcGFyYW1zKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlbGF0aW9uYWxOb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29uZGl0aW9uYWxzKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignUGFyYW1ldGVyIGNvbmRpdGlvbmFscyBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBhcmFtcykpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BhcmFtZXRlciBwYXJhbXMgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgIGlmIChjb25kaXRpb25hbHMubGVuZ3RoICE9PSBwYXJhbXMubGVuZ3RoIC0gMSkgdGhyb3cgbmV3IFR5cGVFcnJvcignUGFyYW1ldGVyIHBhcmFtcyBtdXN0IGNvbnRhaW4gZXhhY3RseSBvbmUgbW9yZSBlbGVtZW50IHRoYW4gcGFyYW1ldGVyIGNvbmRpdGlvbmFscycpO1xuICAgIHRoaXMuY29uZGl0aW9uYWxzID0gY29uZGl0aW9uYWxzO1xuICAgIHRoaXMucGFyYW1zID0gcGFyYW1zO1xuICB9XG5cbiAgUmVsYXRpb25hbE5vZGUucHJvdG90eXBlID0gbmV3IE5vZGUoKTtcbiAgUmVsYXRpb25hbE5vZGUucHJvdG90eXBlLnR5cGUgPSAnUmVsYXRpb25hbE5vZGUnO1xuICBSZWxhdGlvbmFsTm9kZS5wcm90b3R5cGUuaXNSZWxhdGlvbmFsTm9kZSA9IHRydWU7XG4gIC8qKlxuICAgKiBDb21waWxlIGEgbm9kZSBpbnRvIGEgSmF2YVNjcmlwdCBmdW5jdGlvbi5cbiAgICogVGhpcyBiYXNpY2FsbHkgcHJlLWNhbGN1bGF0ZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSBhbmQgb25seSBsZWF2ZXMgb3BlblxuICAgKiBjYWxjdWxhdGlvbnMgd2hpY2ggZGVwZW5kIG9uIGEgZHluYW1pYyBzY29wZSB3aXRoIHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG1hdGggICAgIE1hdGguanMgbmFtZXNwYWNlIHdpdGggZnVuY3Rpb25zIGFuZCBjb25zdGFudHMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdOYW1lcyBBbiBvYmplY3Qgd2l0aCBhcmd1bWVudCBuYW1lcyBhcyBrZXkgYW5kIGB0cnVlYFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdmFsdWUuIFVzZWQgaW4gdGhlIFN5bWJvbE5vZGUgdG8gb3B0aW1pemVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudHMgZnJvbSB1c2VyIGFzc2lnbmVkIGZ1bmN0aW9uc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZSBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKSBvciBzcGVjaWFsIHN5bWJvbHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UgYGVuZGAgKHNlZSBJbmRleE5vZGUpLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgbGlrZTpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICBldmFsTm9kZShzY29wZTogT2JqZWN0LCBhcmdzOiBPYmplY3QsIGNvbnRleHQ6ICopXG4gICAqL1xuXG4gIFJlbGF0aW9uYWxOb2RlLnByb3RvdHlwZS5fY29tcGlsZSA9IGZ1bmN0aW9uIChtYXRoLCBhcmdOYW1lcykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgY29tcGlsZWQgPSB0aGlzLnBhcmFtcy5tYXAoZnVuY3Rpb24gKHApIHtcbiAgICAgIHJldHVybiBwLl9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTtcbiAgICB9KTtcbiAgICByZXR1cm4gZnVuY3Rpb24gZXZhbFJlbGF0aW9uYWxOb2RlKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICB2YXIgZXZhbExocztcbiAgICAgIHZhciBldmFsUmhzID0gY29tcGlsZWRbMF0oc2NvcGUsIGFyZ3MsIGNvbnRleHQpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGYuY29uZGl0aW9uYWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGV2YWxMaHMgPSBldmFsUmhzO1xuICAgICAgICBldmFsUmhzID0gY29tcGlsZWRbaSArIDFdKHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcbiAgICAgICAgdmFyIGNvbmRGbiA9ICgwLCBfY3VzdG9tcy5nZXRTYWZlUHJvcGVydHkpKG1hdGgsIHNlbGYuY29uZGl0aW9uYWxzW2ldKTtcblxuICAgICAgICBpZiAoIWNvbmRGbihldmFsTGhzLCBldmFsUmhzKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBlYWNoIG9mIHRoZSBjaGlsZCBub2RlcyBvZiB0aGlzIG5vZGVcbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpfSBjYWxsYmFja1xuICAgKi9cblxuXG4gIFJlbGF0aW9uYWxOb2RlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMucGFyYW1zLmZvckVhY2goZnVuY3Rpb24gKG4sIGkpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayhuLCAncGFyYW1zWycgKyBpICsgJ10nLCBfdGhpcyk7XG4gICAgfSwgdGhpcyk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgUmVsYXRpb25hbE5vZGUgaGF2aW5nIGl0cyBjaGlsZHMgYmUgdGhlIHJlc3VsdHMgb2YgY2FsbGluZ1xuICAgKiB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggb2YgdGhlIGNoaWxkcyBvZiB0aGUgb3JpZ2luYWwgbm9kZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpOiBOb2RlfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7UmVsYXRpb25hbE5vZGV9IFJldHVybnMgYSB0cmFuc2Zvcm1lZCBjb3B5IG9mIHRoZSBub2RlXG4gICAqL1xuXG5cbiAgUmVsYXRpb25hbE5vZGUucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgcmV0dXJuIG5ldyBSZWxhdGlvbmFsTm9kZSh0aGlzLmNvbmRpdGlvbmFscy5zbGljZSgpLCB0aGlzLnBhcmFtcy5tYXAoZnVuY3Rpb24gKG4sIGkpIHtcbiAgICAgIHJldHVybiBfdGhpczIuX2lmTm9kZShjYWxsYmFjayhuLCAncGFyYW1zWycgKyBpICsgJ10nLCBfdGhpczIpKTtcbiAgICB9LCB0aGlzKSk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIG5vZGUsIGEgc2hhbGxvdyBjb3B5XG4gICAqIEByZXR1cm4ge1JlbGF0aW9uYWxOb2RlfVxuICAgKi9cblxuXG4gIFJlbGF0aW9uYWxOb2RlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IFJlbGF0aW9uYWxOb2RlKHRoaXMuY29uZGl0aW9uYWxzLCB0aGlzLnBhcmFtcyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIFJlbGF0aW9uYWxOb2RlLnByb3RvdHlwZS5fdG9TdHJpbmcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBwYXJlbnRoZXNpcyA9IG9wdGlvbnMgJiYgb3B0aW9ucy5wYXJlbnRoZXNpcyA/IG9wdGlvbnMucGFyZW50aGVzaXMgOiAna2VlcCc7XG4gICAgdmFyIHByZWNlZGVuY2UgPSAoMCwgX29wZXJhdG9ycy5nZXRQcmVjZWRlbmNlKSh0aGlzLCBwYXJlbnRoZXNpcyk7XG4gICAgdmFyIHBhcmFtU3RyaW5ncyA9IHRoaXMucGFyYW1zLm1hcChmdW5jdGlvbiAocCwgaW5kZXgpIHtcbiAgICAgIHZhciBwYXJhbVByZWNlZGVuY2UgPSAoMCwgX29wZXJhdG9ycy5nZXRQcmVjZWRlbmNlKShwLCBwYXJlbnRoZXNpcyk7XG4gICAgICByZXR1cm4gcGFyZW50aGVzaXMgPT09ICdhbGwnIHx8IHBhcmFtUHJlY2VkZW5jZSAhPT0gbnVsbCAmJiBwYXJhbVByZWNlZGVuY2UgPD0gcHJlY2VkZW5jZSA/ICcoJyArIHAudG9TdHJpbmcob3B0aW9ucykgKyAnKScgOiBwLnRvU3RyaW5nKG9wdGlvbnMpO1xuICAgIH0pO1xuICAgIHZhciBvcGVyYXRvck1hcCA9IHtcbiAgICAgIGVxdWFsOiAnPT0nLFxuICAgICAgdW5lcXVhbDogJyE9JyxcbiAgICAgIHNtYWxsZXI6ICc8JyxcbiAgICAgIGxhcmdlcjogJz4nLFxuICAgICAgc21hbGxlckVxOiAnPD0nLFxuICAgICAgbGFyZ2VyRXE6ICc+PSdcbiAgICB9O1xuICAgIHZhciByZXQgPSBwYXJhbVN0cmluZ3NbMF07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29uZGl0aW9uYWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXQgKz0gJyAnICsgb3BlcmF0b3JNYXBbdGhpcy5jb25kaXRpb25hbHNbaV1dICsgJyAnICsgcGFyYW1TdHJpbmdzW2kgKyAxXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cblxuXG4gIFJlbGF0aW9uYWxOb2RlLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hdGhqczogJ1JlbGF0aW9uYWxOb2RlJyxcbiAgICAgIGNvbmRpdGlvbmFsczogdGhpcy5jb25kaXRpb25hbHMsXG4gICAgICBwYXJhbXM6IHRoaXMucGFyYW1zXG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIEluc3RhbnRpYXRlIGEgUmVsYXRpb25hbE5vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIlJlbGF0aW9uYWxOb2RlXCIsIFwiY29uZGl0aW9uXCI6IC4uLiwgXCJ0cnVlRXhwclwiOiAuLi4sIFwiZmFsc2VFeHByXCI6IC4uLn1gLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgbWF0aGpzIGlzIG9wdGlvbmFsXG4gICAqIEByZXR1cm5zIHtSZWxhdGlvbmFsTm9kZX1cbiAgICovXG5cblxuICBSZWxhdGlvbmFsTm9kZS5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgcmV0dXJuIG5ldyBSZWxhdGlvbmFsTm9kZShqc29uLmNvbmRpdGlvbmFscywganNvbi5wYXJhbXMpO1xuICB9O1xuICAvKipcbiAgICogR2V0IEhUTUwgcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBSZWxhdGlvbmFsTm9kZS5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgcGFyZW50aGVzaXMgPSBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMgPyBvcHRpb25zLnBhcmVudGhlc2lzIDogJ2tlZXAnO1xuICAgIHZhciBwcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkodGhpcywgcGFyZW50aGVzaXMpO1xuICAgIHZhciBwYXJhbVN0cmluZ3MgPSB0aGlzLnBhcmFtcy5tYXAoZnVuY3Rpb24gKHAsIGluZGV4KSB7XG4gICAgICB2YXIgcGFyYW1QcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkocCwgcGFyZW50aGVzaXMpO1xuICAgICAgcmV0dXJuIHBhcmVudGhlc2lzID09PSAnYWxsJyB8fCBwYXJhbVByZWNlZGVuY2UgIT09IG51bGwgJiYgcGFyYW1QcmVjZWRlbmNlIDw9IHByZWNlZGVuY2UgPyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4oPC9zcGFuPicgKyBwLnRvSFRNTChvcHRpb25zKSArICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPik8L3NwYW4+JyA6IHAudG9IVE1MKG9wdGlvbnMpO1xuICAgIH0pO1xuICAgIHZhciBvcGVyYXRvck1hcCA9IHtcbiAgICAgIGVxdWFsOiAnPT0nLFxuICAgICAgdW5lcXVhbDogJyE9JyxcbiAgICAgIHNtYWxsZXI6ICc8JyxcbiAgICAgIGxhcmdlcjogJz4nLFxuICAgICAgc21hbGxlckVxOiAnPD0nLFxuICAgICAgbGFyZ2VyRXE6ICc+PSdcbiAgICB9O1xuICAgIHZhciByZXQgPSBwYXJhbVN0cmluZ3NbMF07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29uZGl0aW9uYWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXQgKz0gJzxzcGFuIGNsYXNzPVwibWF0aC1vcGVyYXRvciBtYXRoLWJpbmFyeS1vcGVyYXRvciBtYXRoLWV4cGxpY2l0LWJpbmFyeS1vcGVyYXRvclwiPicgKyAoMCwgX3N0cmluZy5lc2NhcGUpKG9wZXJhdG9yTWFwW3RoaXMuY29uZGl0aW9uYWxzW2ldXSkgKyAnPC9zcGFuPicgKyBwYXJhbVN0cmluZ3NbaSArIDFdO1xuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgTGFUZVggcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBSZWxhdGlvbmFsTm9kZS5wcm90b3R5cGUuX3RvVGV4ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgcGFyZW50aGVzaXMgPSBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMgPyBvcHRpb25zLnBhcmVudGhlc2lzIDogJ2tlZXAnO1xuICAgIHZhciBwcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkodGhpcywgcGFyZW50aGVzaXMpO1xuICAgIHZhciBwYXJhbVN0cmluZ3MgPSB0aGlzLnBhcmFtcy5tYXAoZnVuY3Rpb24gKHAsIGluZGV4KSB7XG4gICAgICB2YXIgcGFyYW1QcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkocCwgcGFyZW50aGVzaXMpO1xuICAgICAgcmV0dXJuIHBhcmVudGhlc2lzID09PSAnYWxsJyB8fCBwYXJhbVByZWNlZGVuY2UgIT09IG51bGwgJiYgcGFyYW1QcmVjZWRlbmNlIDw9IHByZWNlZGVuY2UgPyAnXFxcXGxlZnQoJyArIHAudG9UZXgob3B0aW9ucykgKyAnXFxyaWdodCknIDogcC50b1RleChvcHRpb25zKTtcbiAgICB9KTtcbiAgICB2YXIgcmV0ID0gcGFyYW1TdHJpbmdzWzBdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvbmRpdGlvbmFscy5sZW5ndGg7IGkrKykge1xuICAgICAgcmV0ICs9IF9sYXRleC5sYXRleE9wZXJhdG9yc1t0aGlzLmNvbmRpdGlvbmFsc1tpXV0gKyBwYXJhbVN0cmluZ3NbaSArIDFdO1xuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH07XG5cbiAgcmV0dXJuIFJlbGF0aW9uYWxOb2RlO1xufSwge1xuICBpc0NsYXNzOiB0cnVlLFxuICBpc05vZGU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVSZWxhdGlvbmFsTm9kZSA9IGNyZWF0ZVJlbGF0aW9uYWxOb2RlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTeW1ib2xOb2RlID0gdm9pZCAwO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfY3VzdG9tcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jdXN0b21zXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9sYXRleCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9sYXRleFwiKTtcblxudmFyIG5hbWUgPSAnU3ltYm9sTm9kZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydtYXRoJywgJz9Vbml0JywgJ05vZGUnXTtcbnZhciBjcmVhdGVTeW1ib2xOb2RlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIG1hdGggPSBfcmVmLm1hdGgsXG4gICAgICBVbml0ID0gX3JlZi5Vbml0LFxuICAgICAgTm9kZSA9IF9yZWYuTm9kZTtcblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciBzb21lIG5hbWUgaXMgYSB2YWx1ZWxlc3MgdW5pdCBsaWtlIFwiaW5jaFwiLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgZnVuY3Rpb24gaXNWYWx1ZWxlc3NVbml0KG5hbWUpIHtcbiAgICByZXR1cm4gVW5pdCA/IFVuaXQuaXNWYWx1ZWxlc3NVbml0KG5hbWUpIDogZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvciBTeW1ib2xOb2RlXG4gICAqIEBleHRlbmRzIHtOb2RlfVxuICAgKiBBIHN5bWJvbCBub2RlIGNhbiBob2xkIGFuZCByZXNvbHZlIGEgc3ltYm9sXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBleHRlbmRzIHtOb2RlfVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIFN5bWJvbE5vZGUobmFtZSkge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTeW1ib2xOb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9IC8vIHZhbGlkYXRlIGlucHV0XG5cblxuICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1N0cmluZyBleHBlY3RlZCBmb3IgcGFyYW1ldGVyIFwibmFtZVwiJyk7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgfVxuXG4gIFN5bWJvbE5vZGUucHJvdG90eXBlID0gbmV3IE5vZGUoKTtcbiAgU3ltYm9sTm9kZS5wcm90b3R5cGUudHlwZSA9ICdTeW1ib2xOb2RlJztcbiAgU3ltYm9sTm9kZS5wcm90b3R5cGUuaXNTeW1ib2xOb2RlID0gdHJ1ZTtcbiAgLyoqXG4gICAqIENvbXBpbGUgYSBub2RlIGludG8gYSBKYXZhU2NyaXB0IGZ1bmN0aW9uLlxuICAgKiBUaGlzIGJhc2ljYWxseSBwcmUtY2FsY3VsYXRlcyBhcyBtdWNoIGFzIHBvc3NpYmxlIGFuZCBvbmx5IGxlYXZlcyBvcGVuXG4gICAqIGNhbGN1bGF0aW9ucyB3aGljaCBkZXBlbmQgb24gYSBkeW5hbWljIHNjb3BlIHdpdGggdmFyaWFibGVzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gbWF0aCAgICAgTWF0aC5qcyBuYW1lc3BhY2Ugd2l0aCBmdW5jdGlvbnMgYW5kIGNvbnN0YW50cy5cbiAgICogQHBhcmFtIHtPYmplY3R9IGFyZ05hbWVzIEFuIG9iamVjdCB3aXRoIGFyZ3VtZW50IG5hbWVzIGFzIGtleSBhbmQgYHRydWVgXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBhcyB2YWx1ZS4gVXNlZCBpbiB0aGUgU3ltYm9sTm9kZSB0byBvcHRpbWl6ZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFyZ3VtZW50cyBmcm9tIHVzZXIgYXNzaWduZWQgZnVuY3Rpb25zXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VlIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUpIG9yIHNwZWNpYWwgc3ltYm9sc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSBgZW5kYCAoc2VlIEluZGV4Tm9kZSkuXG4gICAqIEByZXR1cm4ge2Z1bmN0aW9ufSBSZXR1cm5zIGEgZnVuY3Rpb24gd2hpY2ggY2FuIGJlIGNhbGxlZCBsaWtlOlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWxOb2RlKHNjb3BlOiBPYmplY3QsIGFyZ3M6IE9iamVjdCwgY29udGV4dDogKilcbiAgICovXG5cbiAgU3ltYm9sTm9kZS5wcm90b3R5cGUuX2NvbXBpbGUgPSBmdW5jdGlvbiAobWF0aCwgYXJnTmFtZXMpIHtcbiAgICB2YXIgbmFtZSA9IHRoaXMubmFtZTtcblxuICAgIGlmIChhcmdOYW1lc1tuYW1lXSA9PT0gdHJ1ZSkge1xuICAgICAgLy8gdGhpcyBpcyBhIEZ1bmN0aW9uQXNzaWdubWVudCBhcmd1bWVudFxuICAgICAgLy8gKGxpa2UgYW4geCB3aGVuIGluc2lkZSB0aGUgZXhwcmVzc2lvbiBvZiBhIGZ1bmN0aW9uIGFzc2lnbm1lbnQgYGYoeCkgPSAuLi5gKVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gYXJnc1tuYW1lXTtcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChuYW1lIGluIG1hdGgpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIG5hbWUgaW4gc2NvcGUgPyAoMCwgX2N1c3RvbXMuZ2V0U2FmZVByb3BlcnR5KShzY29wZSwgbmFtZSkgOiAoMCwgX2N1c3RvbXMuZ2V0U2FmZVByb3BlcnR5KShtYXRoLCBuYW1lKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBpc1VuaXQgPSBpc1ZhbHVlbGVzc1VuaXQobmFtZSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBuYW1lIGluIHNjb3BlID8gKDAsIF9jdXN0b21zLmdldFNhZmVQcm9wZXJ0eSkoc2NvcGUsIG5hbWUpIDogaXNVbml0ID8gbmV3IFVuaXQobnVsbCwgbmFtZSkgOiB1bmRlZihuYW1lKTtcbiAgICAgIH07XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBlYWNoIG9mIHRoZSBjaGlsZCBub2RlcyBvZiB0aGlzIG5vZGVcbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpfSBjYWxsYmFja1xuICAgKi9cblxuXG4gIFN5bWJvbE5vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHt9IC8vIG5vdGhpbmcgdG8gZG8sIHdlIGRvbid0IGhhdmUgY2hpbGRzXG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBTeW1ib2xOb2RlIGhhdmluZyBpdCdzIGNoaWxkcyBiZSB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nXG4gICAqIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCBvZiB0aGUgY2hpbGRzIG9mIHRoZSBvcmlnaW5hbCBub2RlLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSkgOiBOb2RlfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7U3ltYm9sTm9kZX0gUmV0dXJucyBhIGNsb25lIG9mIHRoZSBub2RlXG4gICAqL1xuICA7XG5cbiAgU3ltYm9sTm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKTtcbiAgfTtcbiAgLyoqXG4gICAqIFRocm93cyBhbiBlcnJvciAnVW5kZWZpbmVkIHN5bWJvbCB7bmFtZX0nXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gdW5kZWYobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5kZWZpbmVkIHN5bWJvbCAnICsgbmFtZSk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoaXMgbm9kZSwgYSBzaGFsbG93IGNvcHlcbiAgICogQHJldHVybiB7U3ltYm9sTm9kZX1cbiAgICovXG5cblxuICBTeW1ib2xOb2RlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IFN5bWJvbE5vZGUodGhpcy5uYW1lKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuXG5cbiAgU3ltYm9sTm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lO1xuICB9O1xuICAvKipcbiAgICogR2V0IEhUTUwgcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuXG5cbiAgU3ltYm9sTm9kZS5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgbmFtZSA9ICgwLCBfc3RyaW5nLmVzY2FwZSkodGhpcy5uYW1lKTtcblxuICAgIGlmIChuYW1lID09PSAndHJ1ZScgfHwgbmFtZSA9PT0gJ2ZhbHNlJykge1xuICAgICAgcmV0dXJuICc8c3BhbiBjbGFzcz1cIm1hdGgtc3ltYm9sIG1hdGgtYm9vbGVhblwiPicgKyBuYW1lICsgJzwvc3Bhbj4nO1xuICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ2knKSB7XG4gICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1zeW1ib2wgbWF0aC1pbWFnaW5hcnktc3ltYm9sXCI+JyArIG5hbWUgKyAnPC9zcGFuPic7XG4gICAgfSBlbHNlIGlmIChuYW1lID09PSAnSW5maW5pdHknKSB7XG4gICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1zeW1ib2wgbWF0aC1pbmZpbml0eS1zeW1ib2xcIj4nICsgbmFtZSArICc8L3NwYW4+JztcbiAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdOYU4nKSB7XG4gICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1zeW1ib2wgbWF0aC1uYW4tc3ltYm9sXCI+JyArIG5hbWUgKyAnPC9zcGFuPic7XG4gICAgfSBlbHNlIGlmIChuYW1lID09PSAnbnVsbCcpIHtcbiAgICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJtYXRoLXN5bWJvbCBtYXRoLW51bGwtc3ltYm9sXCI+JyArIG5hbWUgKyAnPC9zcGFuPic7XG4gICAgfSBlbHNlIGlmIChuYW1lID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuICc8c3BhbiBjbGFzcz1cIm1hdGgtc3ltYm9sIG1hdGgtdW5kZWZpbmVkLXN5bWJvbFwiPicgKyBuYW1lICsgJzwvc3Bhbj4nO1xuICAgIH1cblxuICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJtYXRoLXN5bWJvbFwiPicgKyBuYW1lICsgJzwvc3Bhbj4nO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cblxuXG4gIFN5bWJvbE5vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnU3ltYm9sTm9kZScsXG4gICAgICBuYW1lOiB0aGlzLm5hbWVcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogSW5zdGFudGlhdGUgYSBTeW1ib2xOb2RlIGZyb20gaXRzIEpTT04gcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIEFuIG9iamVjdCBzdHJ1Y3R1cmVkIGxpa2VcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJTeW1ib2xOb2RlXCIsIG5hbWU6IFwieFwifWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge1N5bWJvbE5vZGV9XG4gICAqL1xuXG5cbiAgU3ltYm9sTm9kZS5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgcmV0dXJuIG5ldyBTeW1ib2xOb2RlKGpzb24ubmFtZSk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgTGFUZVggcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuXG5cbiAgU3ltYm9sTm9kZS5wcm90b3R5cGUuX3RvVGV4ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgaXNVbml0ID0gZmFsc2U7XG5cbiAgICBpZiAodHlwZW9mIG1hdGhbdGhpcy5uYW1lXSA9PT0gJ3VuZGVmaW5lZCcgJiYgaXNWYWx1ZWxlc3NVbml0KHRoaXMubmFtZSkpIHtcbiAgICAgIGlzVW5pdCA9IHRydWU7XG4gICAgfVxuXG4gICAgdmFyIHN5bWJvbCA9ICgwLCBfbGF0ZXgudG9TeW1ib2wpKHRoaXMubmFtZSwgaXNVbml0KTtcblxuICAgIGlmIChzeW1ib2xbMF0gPT09ICdcXFxcJykge1xuICAgICAgLy8gbm8gc3BhY2UgbmVlZGVkIGlmIHRoZSBzeW1ib2wgc3RhcnRzIHdpdGggJ1xcJ1xuICAgICAgcmV0dXJuIHN5bWJvbDtcbiAgICB9IC8vIHRoZSBzcGFjZSBwcmV2ZW50cyBzeW1ib2xzIGZyb20gYnJlYWtpbmcgc3R1ZmYgbGlrZSAnXFxjZG90JyBpZiBpdCdzIHdyaXR0ZW4gcmlnaHQgYmVmb3JlIHRoZSBzeW1ib2xcblxuXG4gICAgcmV0dXJuICcgJyArIHN5bWJvbDtcbiAgfTtcblxuICByZXR1cm4gU3ltYm9sTm9kZTtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZSxcbiAgaXNOb2RlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3ltYm9sTm9kZSA9IGNyZWF0ZVN5bWJvbE5vZGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFjY2Vzc0ZhY3RvcnkgPSBhY2Nlc3NGYWN0b3J5O1xuXG52YXIgX2Vycm9yVHJhbnNmb3JtID0gcmVxdWlyZShcIi4uLy4uL3RyYW5zZm9ybS91dGlscy9lcnJvclRyYW5zZm9ybVwiKTtcblxudmFyIF9jdXN0b21zID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2N1c3RvbXNcIik7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gYWNjZXNzRmFjdG9yeShfcmVmKSB7XG4gIHZhciBzdWJzZXQgPSBfcmVmLnN1YnNldDtcblxuICAvKipcbiAgICogUmV0cmlldmUgcGFydCBvZiBhbiBvYmplY3Q6XG4gICAqXG4gICAqIC0gUmV0cmlldmUgYSBwcm9wZXJ0eSBmcm9tIGFuIG9iamVjdFxuICAgKiAtIFJldHJpZXZlIGEgcGFydCBvZiBhIHN0cmluZ1xuICAgKiAtIFJldHJpZXZlIGEgbWF0cml4IHN1YnNldFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdCB8IEFycmF5IHwgTWF0cml4IHwgc3RyaW5nfSBvYmplY3RcbiAgICogQHBhcmFtIHtJbmRleH0gaW5kZXhcbiAgICogQHJldHVybiB7T2JqZWN0IHwgQXJyYXkgfCBNYXRyaXggfCBzdHJpbmd9IFJldHVybnMgdGhlIHN1YnNldFxuICAgKi9cbiAgcmV0dXJuIGZ1bmN0aW9uIGFjY2VzcyhvYmplY3QsIGluZGV4KSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcbiAgICAgICAgcmV0dXJuIHN1YnNldChvYmplY3QsIGluZGV4KTtcbiAgICAgIH0gZWxzZSBpZiAob2JqZWN0ICYmIHR5cGVvZiBvYmplY3Quc3Vic2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIE1hdHJpeFxuICAgICAgICByZXR1cm4gb2JqZWN0LnN1YnNldChpbmRleCk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIFRPRE86IG1vdmUgZ2V0U3RyaW5nU3Vic2V0IGludG8gYSBzZXBhcmF0ZSB1dGlsIGZpbGUsIHVzZSB0aGF0XG4gICAgICAgIHJldHVybiBzdWJzZXQob2JqZWN0LCBpbmRleCk7XG4gICAgICB9IGVsc2UgaWYgKF90eXBlb2Yob2JqZWN0KSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKCFpbmRleC5pc09iamVjdFByb3BlcnR5KCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgYXBwbHkgYSBudW1lcmljIGluZGV4IGFzIG9iamVjdCBwcm9wZXJ0eScpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICgwLCBfY3VzdG9tcy5nZXRTYWZlUHJvcGVydHkpKG9iamVjdCwgaW5kZXguZ2V0T2JqZWN0UHJvcGVydHkoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgYXBwbHkgaW5kZXg6IHVuc3VwcG9ydGVkIHR5cGUgb2Ygb2JqZWN0Jyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aHJvdyAoMCwgX2Vycm9yVHJhbnNmb3JtLmVycm9yVHJhbnNmb3JtKShlcnIpO1xuICAgIH1cbiAgfTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYXNzaWduRmFjdG9yeSA9IGFzc2lnbkZhY3Rvcnk7XG5cbnZhciBfZXJyb3JUcmFuc2Zvcm0gPSByZXF1aXJlKFwiLi4vLi4vdHJhbnNmb3JtL3V0aWxzL2Vycm9yVHJhbnNmb3JtXCIpO1xuXG52YXIgX2N1c3RvbXMgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvY3VzdG9tc1wiKTtcblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBhc3NpZ25GYWN0b3J5KF9yZWYpIHtcbiAgdmFyIHN1YnNldCA9IF9yZWYuc3Vic2V0LFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXg7XG5cbiAgLyoqXG4gICAqIFJlcGxhY2UgcGFydCBvZiBhbiBvYmplY3Q6XG4gICAqXG4gICAqIC0gQXNzaWduIGEgcHJvcGVydHkgdG8gYW4gb2JqZWN0XG4gICAqIC0gUmVwbGFjZSBhIHBhcnQgb2YgYSBzdHJpbmdcbiAgICogLSBSZXBsYWNlIGEgbWF0cml4IHN1YnNldFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdCB8IEFycmF5IHwgTWF0cml4IHwgc3RyaW5nfSBvYmplY3RcbiAgICogQHBhcmFtIHtJbmRleH0gaW5kZXhcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcmV0dXJuIHtPYmplY3QgfCBBcnJheSB8IE1hdHJpeCB8IHN0cmluZ30gUmV0dXJucyB0aGUgb3JpZ2luYWwgb2JqZWN0XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgaW4gY2FzZSBvZiBhIHN0cmluZ1xuICAgKi9cbiAgLy8gVE9ETzogY2hhbmdlIGFzc2lnbiB0byByZXR1cm4gdGhlIHZhbHVlIGluc3RlYWQgb2YgdGhlIG9iamVjdFxuICByZXR1cm4gZnVuY3Rpb24gYXNzaWduKG9iamVjdCwgaW5kZXgsIHZhbHVlKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcbiAgICAgICAgLy8gd2UgdXNlIG1hdHJpeC5zdWJzZXQgaGVyZSBpbnN0ZWFkIG9mIHRoZSBmdW5jdGlvbiBzdWJzZXQgYmVjYXVzZSB3ZSBtdXN0IG5vdCBjbG9uZSB0aGUgY29udGVudHNcbiAgICAgICAgcmV0dXJuIG1hdHJpeChvYmplY3QpLnN1YnNldChpbmRleCwgdmFsdWUpLnZhbHVlT2YoKTtcbiAgICAgIH0gZWxzZSBpZiAob2JqZWN0ICYmIHR5cGVvZiBvYmplY3Quc3Vic2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIE1hdHJpeFxuICAgICAgICByZXR1cm4gb2JqZWN0LnN1YnNldChpbmRleCwgdmFsdWUpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBUT0RPOiBtb3ZlIHNldFN0cmluZ1N1YnNldCBpbnRvIGEgc2VwYXJhdGUgdXRpbCBmaWxlLCB1c2UgdGhhdFxuICAgICAgICByZXR1cm4gc3Vic2V0KG9iamVjdCwgaW5kZXgsIHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoX3R5cGVvZihvYmplY3QpID09PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAoIWluZGV4LmlzT2JqZWN0UHJvcGVydHkoKSkge1xuICAgICAgICAgIHRocm93IFR5cGVFcnJvcignQ2Fubm90IGFwcGx5IGEgbnVtZXJpYyBpbmRleCBhcyBvYmplY3QgcHJvcGVydHknKTtcbiAgICAgICAgfVxuXG4gICAgICAgICgwLCBfY3VzdG9tcy5zZXRTYWZlUHJvcGVydHkpKG9iamVjdCwgaW5kZXguZ2V0T2JqZWN0UHJvcGVydHkoKSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGFwcGx5IGluZGV4OiB1bnN1cHBvcnRlZCB0eXBlIG9mIG9iamVjdCcpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgKDAsIF9lcnJvclRyYW5zZm9ybS5lcnJvclRyYW5zZm9ybSkoZXJyKTtcbiAgICB9XG4gIH07XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmdldFByZWNlZGVuY2UgPSBnZXRQcmVjZWRlbmNlO1xuZXhwb3J0cy5nZXRBc3NvY2lhdGl2aXR5ID0gZ2V0QXNzb2NpYXRpdml0eTtcbmV4cG9ydHMuaXNBc3NvY2lhdGl2ZVdpdGggPSBpc0Fzc29jaWF0aXZlV2l0aDtcbmV4cG9ydHMucHJvcGVydGllcyA9IHZvaWQgMDtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG4vLyBsaXN0IG9mIGlkZW50aWZpZXJzIG9mIG5vZGVzIGluIG9yZGVyIG9mIHRoZWlyIHByZWNlZGVuY2Vcbi8vIGFsc28gY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgbGVmdC9yaWdodCBhc3NvY2lhdGl2aXR5XG4vLyBhbmQgd2hpY2ggb3RoZXIgb3BlcmF0b3IgdGhlIG9wZXJhdG9yIGlzIGFzc29jaWF0aXZlIHdpdGhcbi8vIEV4YW1wbGU6XG4vLyBhZGRpdGlvbiBpcyBhc3NvY2lhdGl2ZSB3aXRoIGFkZGl0aW9uIGFuZCBzdWJ0cmFjdGlvbiwgYmVjYXVzZTpcbi8vIChhK2IpK2M9YSsoYitjKVxuLy8gKGErYiktYz1hKyhiLWMpXG4vL1xuLy8gcG9zdGZpeCBvcGVyYXRvcnMgYXJlIGxlZnQgYXNzb2NpYXRpdmUsIHByZWZpeCBvcGVyYXRvcnNcbi8vIGFyZSByaWdodCBhc3NvY2lhdGl2ZVxuLy9cbi8vIEl0J3MgYWxzbyBwb3NzaWJsZSB0byBzZXQgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuLy8gbGF0ZXhQYXJlbnM6IGlmIHNldCB0byBmYWxzZSwgdGhpcyBub2RlIGRvZXNuJ3QgbmVlZCB0byBiZSBlbmNsb3NlZFxuLy8gICAgICAgICAgICAgIGluIHBhcmVudGhlc2VzIHdoZW4gdXNpbmcgTGFUZVhcbi8vIGxhdGV4TGVmdFBhcmVuczogaWYgc2V0IHRvIGZhbHNlLCB0aGlzICFPcGVyYXRvck5vZGUncyFcbi8vICAgICAgICAgICAgICAgICAgbGVmdCBhcmd1bWVudCBkb2Vzbid0IG5lZWQgdG8gYmUgZW5jbG9zZWRcbi8vICAgICAgICAgICAgICAgICAgaW4gcGFyZW50aGVzZXNcbi8vIGxhdGV4UmlnaHRQYXJlbnM6IHRoZSBzYW1lIGZvciB0aGUgcmlnaHQgYXJndW1lbnRcbnZhciBwcm9wZXJ0aWVzID0gW3tcbiAgLy8gYXNzaWdubWVudFxuICBBc3NpZ25tZW50Tm9kZToge30sXG4gIEZ1bmN0aW9uQXNzaWdubWVudE5vZGU6IHt9XG59LCB7XG4gIC8vIGNvbmRpdGlvbmFsIGV4cHJlc3Npb25cbiAgQ29uZGl0aW9uYWxOb2RlOiB7XG4gICAgbGF0ZXhMZWZ0UGFyZW5zOiBmYWxzZSxcbiAgICBsYXRleFJpZ2h0UGFyZW5zOiBmYWxzZSxcbiAgICBsYXRleFBhcmVuczogZmFsc2UgLy8gY29uZGl0aW9uYWxzIGRvbid0IG5lZWQgcGFyZW50aGVzZXMgaW4gTGFUZVggYmVjYXVzZVxuICAgIC8vIHRoZXkgYXJlIDIgZGltZW5zaW9uYWxcblxuICB9XG59LCB7XG4gIC8vIGxvZ2ljYWwgb3JcbiAgJ09wZXJhdG9yTm9kZTpvcic6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCcsXG4gICAgYXNzb2NpYXRpdmVXaXRoOiBbXVxuICB9XG59LCB7XG4gIC8vIGxvZ2ljYWwgeG9yXG4gICdPcGVyYXRvck5vZGU6eG9yJzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFtdXG4gIH1cbn0sIHtcbiAgLy8gbG9naWNhbCBhbmRcbiAgJ09wZXJhdG9yTm9kZTphbmQnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW11cbiAgfVxufSwge1xuICAvLyBiaXR3aXNlIG9yXG4gICdPcGVyYXRvck5vZGU6Yml0T3InOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW11cbiAgfVxufSwge1xuICAvLyBiaXR3aXNlIHhvclxuICAnT3BlcmF0b3JOb2RlOmJpdFhvcic6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCcsXG4gICAgYXNzb2NpYXRpdmVXaXRoOiBbXVxuICB9XG59LCB7XG4gIC8vIGJpdHdpc2UgYW5kXG4gICdPcGVyYXRvck5vZGU6Yml0QW5kJzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFtdXG4gIH1cbn0sIHtcbiAgLy8gcmVsYXRpb25hbCBvcGVyYXRvcnNcbiAgJ09wZXJhdG9yTm9kZTplcXVhbCc6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCcsXG4gICAgYXNzb2NpYXRpdmVXaXRoOiBbXVxuICB9LFxuICAnT3BlcmF0b3JOb2RlOnVuZXF1YWwnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW11cbiAgfSxcbiAgJ09wZXJhdG9yTm9kZTpzbWFsbGVyJzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFtdXG4gIH0sXG4gICdPcGVyYXRvck5vZGU6bGFyZ2VyJzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFtdXG4gIH0sXG4gICdPcGVyYXRvck5vZGU6c21hbGxlckVxJzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFtdXG4gIH0sXG4gICdPcGVyYXRvck5vZGU6bGFyZ2VyRXEnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW11cbiAgfSxcbiAgUmVsYXRpb25hbE5vZGU6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCcsXG4gICAgYXNzb2NpYXRpdmVXaXRoOiBbXVxuICB9XG59LCB7XG4gIC8vIGJpdHNoaWZ0IG9wZXJhdG9yc1xuICAnT3BlcmF0b3JOb2RlOmxlZnRTaGlmdCc6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCcsXG4gICAgYXNzb2NpYXRpdmVXaXRoOiBbXVxuICB9LFxuICAnT3BlcmF0b3JOb2RlOnJpZ2h0QXJpdGhTaGlmdCc6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCcsXG4gICAgYXNzb2NpYXRpdmVXaXRoOiBbXVxuICB9LFxuICAnT3BlcmF0b3JOb2RlOnJpZ2h0TG9nU2hpZnQnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW11cbiAgfVxufSwge1xuICAvLyB1bml0IGNvbnZlcnNpb25cbiAgJ09wZXJhdG9yTm9kZTp0byc6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCcsXG4gICAgYXNzb2NpYXRpdmVXaXRoOiBbXVxuICB9XG59LCB7XG4gIC8vIHJhbmdlXG4gIFJhbmdlTm9kZToge31cbn0sIHtcbiAgLy8gYWRkaXRpb24sIHN1YnRyYWN0aW9uXG4gICdPcGVyYXRvck5vZGU6YWRkJzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFsnT3BlcmF0b3JOb2RlOmFkZCcsICdPcGVyYXRvck5vZGU6c3VidHJhY3QnXVxuICB9LFxuICAnT3BlcmF0b3JOb2RlOnN1YnRyYWN0Jzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFtdXG4gIH1cbn0sIHtcbiAgLy8gbXVsdGlwbHksIGRpdmlkZSwgbW9kdWx1c1xuICAnT3BlcmF0b3JOb2RlOm11bHRpcGx5Jzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFsnT3BlcmF0b3JOb2RlOm11bHRpcGx5JywgJ09wZXJhdG9yTm9kZTpkaXZpZGUnLCAnT3BlcmF0b3I6ZG90TXVsdGlwbHknLCAnT3BlcmF0b3I6ZG90RGl2aWRlJ11cbiAgfSxcbiAgJ09wZXJhdG9yTm9kZTpkaXZpZGUnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW10sXG4gICAgbGF0ZXhMZWZ0UGFyZW5zOiBmYWxzZSxcbiAgICBsYXRleFJpZ2h0UGFyZW5zOiBmYWxzZSxcbiAgICBsYXRleFBhcmVuczogZmFsc2UgLy8gZnJhY3Rpb25zIGRvbid0IHJlcXVpcmUgcGFyZW50aGVzZXMgYmVjYXVzZVxuICAgIC8vIHRoZXkncmUgMiBkaW1lbnNpb25hbCwgc28gcGFyZW5zIGFyZW4ndCBuZWVkZWRcbiAgICAvLyBpbiBMYVRlWFxuXG4gIH0sXG4gICdPcGVyYXRvck5vZGU6ZG90TXVsdGlwbHknOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogWydPcGVyYXRvck5vZGU6bXVsdGlwbHknLCAnT3BlcmF0b3JOb2RlOmRpdmlkZScsICdPcGVyYXRvck5vZGU6ZG90TXVsdGlwbHknLCAnT3BlcmF0b3JOb2RlOmRvRGl2aWRlJ11cbiAgfSxcbiAgJ09wZXJhdG9yTm9kZTpkb3REaXZpZGUnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW11cbiAgfSxcbiAgJ09wZXJhdG9yTm9kZTptb2QnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW11cbiAgfVxufSwge1xuICAvLyB1bmFyeSBwcmVmaXggb3BlcmF0b3JzXG4gICdPcGVyYXRvck5vZGU6dW5hcnlQbHVzJzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdyaWdodCdcbiAgfSxcbiAgJ09wZXJhdG9yTm9kZTp1bmFyeU1pbnVzJzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdyaWdodCdcbiAgfSxcbiAgJ09wZXJhdG9yTm9kZTpiaXROb3QnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ3JpZ2h0J1xuICB9LFxuICAnT3BlcmF0b3JOb2RlOm5vdCc6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAncmlnaHQnXG4gIH1cbn0sIHtcbiAgLy8gZXhwb25lbnRpYXRpb25cbiAgJ09wZXJhdG9yTm9kZTpwb3cnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ3JpZ2h0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFtdLFxuICAgIGxhdGV4UmlnaHRQYXJlbnM6IGZhbHNlIC8vIHRoZSBleHBvbmVudCBkb2Vzbid0IG5lZWQgcGFyZW50aGVzZXMgaW5cbiAgICAvLyBMYVRlWCBiZWNhdXNlIGl0J3MgMiBkaW1lbnNpb25hbFxuICAgIC8vIChpdCdzIG9uIHRvcClcblxuICB9LFxuICAnT3BlcmF0b3JOb2RlOmRvdFBvdyc6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAncmlnaHQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW11cbiAgfVxufSwge1xuICAvLyBmYWN0b3JpYWxcbiAgJ09wZXJhdG9yTm9kZTpmYWN0b3JpYWwnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnXG4gIH1cbn0sIHtcbiAgLy8gbWF0cml4IHRyYW5zcG9zZVxuICAnT3BlcmF0b3JOb2RlOnRyYW5zcG9zZSc6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCdcbiAgfVxufV07XG4vKipcbiAqIEdldCB0aGUgcHJlY2VkZW5jZSBvZiBhIE5vZGUuXG4gKiBIaWdoZXIgbnVtYmVyIGZvciBoaWdoZXIgcHJlY2VkZW5jZSwgc3RhcnRpbmcgd2l0aCAwLlxuICogUmV0dXJucyBudWxsIGlmIHRoZSBwcmVjZWRlbmNlIGlzIHVuZGVmaW5lZC5cbiAqXG4gKiBAcGFyYW0ge05vZGV9IF9ub2RlXG4gKiBAcGFyYW0ge3N0cmluZ30gcGFyZW50aGVzaXNcbiAqIEByZXR1cm4ge251bWJlciB8IG51bGx9XG4gKi9cblxuZXhwb3J0cy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcblxuZnVuY3Rpb24gZ2V0UHJlY2VkZW5jZShfbm9kZSwgcGFyZW50aGVzaXMpIHtcbiAgdmFyIG5vZGUgPSBfbm9kZTtcblxuICBpZiAocGFyZW50aGVzaXMgIT09ICdrZWVwJykge1xuICAgIC8vIFBhcmVudGhlc2lzTm9kZXMgYXJlIG9ubHkgaWdub3JlZCB3aGVuIG5vdCBpbiAna2VlcCcgbW9kZVxuICAgIG5vZGUgPSBfbm9kZS5nZXRDb250ZW50KCk7XG4gIH1cblxuICB2YXIgaWRlbnRpZmllciA9IG5vZGUuZ2V0SWRlbnRpZmllcigpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChpZGVudGlmaWVyIGluIHByb3BlcnRpZXNbaV0pIHtcbiAgICAgIHJldHVybiBpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuLyoqXG4gKiBHZXQgdGhlIGFzc29jaWF0aXZpdHkgb2YgYW4gb3BlcmF0b3IgKGxlZnQgb3IgcmlnaHQpLlxuICogUmV0dXJucyBhIHN0cmluZyBjb250YWluaW5nICdsZWZ0JyBvciAncmlnaHQnIG9yIG51bGwgaWZcbiAqIHRoZSBhc3NvY2lhdGl2aXR5IGlzIG5vdCBkZWZpbmVkLlxuICpcbiAqIEBwYXJhbSB7Tm9kZX1cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXJlbnRoZXNpc1xuICogQHJldHVybiB7c3RyaW5nfG51bGx9XG4gKiBAdGhyb3dzIHtFcnJvcn1cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldEFzc29jaWF0aXZpdHkoX25vZGUsIHBhcmVudGhlc2lzKSB7XG4gIHZhciBub2RlID0gX25vZGU7XG5cbiAgaWYgKHBhcmVudGhlc2lzICE9PSAna2VlcCcpIHtcbiAgICAvLyBQYXJlbnRoZXNpc05vZGVzIGFyZSBvbmx5IGlnbm9yZWQgd2hlbiBub3QgaW4gJ2tlZXAnIG1vZGVcbiAgICBub2RlID0gX25vZGUuZ2V0Q29udGVudCgpO1xuICB9XG5cbiAgdmFyIGlkZW50aWZpZXIgPSBub2RlLmdldElkZW50aWZpZXIoKTtcbiAgdmFyIGluZGV4ID0gZ2V0UHJlY2VkZW5jZShub2RlLCBwYXJlbnRoZXNpcyk7XG5cbiAgaWYgKGluZGV4ID09PSBudWxsKSB7XG4gICAgLy8gbm9kZSBpc24ndCBpbiB0aGUgbGlzdFxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIHByb3BlcnR5ID0gcHJvcGVydGllc1tpbmRleF1baWRlbnRpZmllcl07XG5cbiAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShwcm9wZXJ0eSwgJ2Fzc29jaWF0aXZpdHknKSkge1xuICAgIGlmIChwcm9wZXJ0eS5hc3NvY2lhdGl2aXR5ID09PSAnbGVmdCcpIHtcbiAgICAgIHJldHVybiAnbGVmdCc7XG4gICAgfVxuXG4gICAgaWYgKHByb3BlcnR5LmFzc29jaWF0aXZpdHkgPT09ICdyaWdodCcpIHtcbiAgICAgIHJldHVybiAncmlnaHQnO1xuICAgIH0gLy8gYXNzb2NpYXRpdml0eSBpcyBpbnZhbGlkXG5cblxuICAgIHRocm93IEVycm9yKCdcXCcnICsgaWRlbnRpZmllciArICdcXCcgaGFzIHRoZSBpbnZhbGlkIGFzc29jaWF0aXZpdHkgXFwnJyArIHByb3BlcnR5LmFzc29jaWF0aXZpdHkgKyAnXFwnLicpO1xuICB9IC8vIGFzc29jaWF0aXZpdHkgaXMgdW5kZWZpbmVkXG5cblxuICByZXR1cm4gbnVsbDtcbn1cbi8qKlxuICogQ2hlY2sgaWYgYW4gb3BlcmF0b3IgaXMgYXNzb2NpYXRpdmUgd2l0aCBhbm90aGVyIG9wZXJhdG9yLlxuICogUmV0dXJucyBlaXRoZXIgdHJ1ZSBvciBmYWxzZSBvciBudWxsIGlmIG5vdCBkZWZpbmVkLlxuICpcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZUFcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZUJcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXJlbnRoZXNpc1xuICogQHJldHVybiB7Ym9vbGVhbiB8IG51bGx9XG4gKi9cblxuXG5mdW5jdGlvbiBpc0Fzc29jaWF0aXZlV2l0aChub2RlQSwgbm9kZUIsIHBhcmVudGhlc2lzKSB7XG4gIC8vIFBhcmVudGhlc2lzTm9kZXMgYXJlIG9ubHkgaWdub3JlZCB3aGVuIG5vdCBpbiAna2VlcCcgbW9kZVxuICB2YXIgYSA9IHBhcmVudGhlc2lzICE9PSAna2VlcCcgPyBub2RlQS5nZXRDb250ZW50KCkgOiBub2RlQTtcbiAgdmFyIGIgPSBwYXJlbnRoZXNpcyAhPT0gJ2tlZXAnID8gbm9kZUEuZ2V0Q29udGVudCgpIDogbm9kZUI7XG4gIHZhciBpZGVudGlmaWVyQSA9IGEuZ2V0SWRlbnRpZmllcigpO1xuICB2YXIgaWRlbnRpZmllckIgPSBiLmdldElkZW50aWZpZXIoKTtcbiAgdmFyIGluZGV4ID0gZ2V0UHJlY2VkZW5jZShhLCBwYXJlbnRoZXNpcyk7XG5cbiAgaWYgKGluZGV4ID09PSBudWxsKSB7XG4gICAgLy8gbm9kZSBpc24ndCBpbiB0aGUgbGlzdFxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIHByb3BlcnR5ID0gcHJvcGVydGllc1tpbmRleF1baWRlbnRpZmllckFdO1xuXG4gIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkocHJvcGVydHksICdhc3NvY2lhdGl2ZVdpdGgnKSAmJiBwcm9wZXJ0eS5hc3NvY2lhdGl2ZVdpdGggaW5zdGFuY2VvZiBBcnJheSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydHkuYXNzb2NpYXRpdmVXaXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocHJvcGVydHkuYXNzb2NpYXRpdmVXaXRoW2ldID09PSBpZGVudGlmaWVyQikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gYXNzb2NpYXRpdmVXaXRoIGlzIG5vdCBkZWZpbmVkXG5cblxuICByZXR1cm4gbnVsbDtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUGFyc2UgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG52YXIgbmFtZSA9ICdwYXJzZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdudW1lcmljJywgJ2NvbmZpZycsICdBY2Nlc3Nvck5vZGUnLCAnQXJyYXlOb2RlJywgJ0Fzc2lnbm1lbnROb2RlJywgJ0Jsb2NrTm9kZScsICdDb25kaXRpb25hbE5vZGUnLCAnQ29uc3RhbnROb2RlJywgJ0Z1bmN0aW9uQXNzaWdubWVudE5vZGUnLCAnRnVuY3Rpb25Ob2RlJywgJ0luZGV4Tm9kZScsICdPYmplY3ROb2RlJywgJ09wZXJhdG9yTm9kZScsICdQYXJlbnRoZXNpc05vZGUnLCAnUmFuZ2VOb2RlJywgJ1JlbGF0aW9uYWxOb2RlJywgJ1N5bWJvbE5vZGUnXTtcbnZhciBjcmVhdGVQYXJzZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBudW1lcmljID0gX3JlZi5udW1lcmljLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBBY2Nlc3Nvck5vZGUgPSBfcmVmLkFjY2Vzc29yTm9kZSxcbiAgICAgIEFycmF5Tm9kZSA9IF9yZWYuQXJyYXlOb2RlLFxuICAgICAgQXNzaWdubWVudE5vZGUgPSBfcmVmLkFzc2lnbm1lbnROb2RlLFxuICAgICAgQmxvY2tOb2RlID0gX3JlZi5CbG9ja05vZGUsXG4gICAgICBDb25kaXRpb25hbE5vZGUgPSBfcmVmLkNvbmRpdGlvbmFsTm9kZSxcbiAgICAgIENvbnN0YW50Tm9kZSA9IF9yZWYuQ29uc3RhbnROb2RlLFxuICAgICAgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSA9IF9yZWYuRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSxcbiAgICAgIEZ1bmN0aW9uTm9kZSA9IF9yZWYuRnVuY3Rpb25Ob2RlLFxuICAgICAgSW5kZXhOb2RlID0gX3JlZi5JbmRleE5vZGUsXG4gICAgICBPYmplY3ROb2RlID0gX3JlZi5PYmplY3ROb2RlLFxuICAgICAgT3BlcmF0b3JOb2RlID0gX3JlZi5PcGVyYXRvck5vZGUsXG4gICAgICBQYXJlbnRoZXNpc05vZGUgPSBfcmVmLlBhcmVudGhlc2lzTm9kZSxcbiAgICAgIFJhbmdlTm9kZSA9IF9yZWYuUmFuZ2VOb2RlLFxuICAgICAgUmVsYXRpb25hbE5vZGUgPSBfcmVmLlJlbGF0aW9uYWxOb2RlLFxuICAgICAgU3ltYm9sTm9kZSA9IF9yZWYuU3ltYm9sTm9kZTtcblxuICAvKipcbiAgICogUGFyc2UgYW4gZXhwcmVzc2lvbi4gUmV0dXJucyBhIG5vZGUgdHJlZSwgd2hpY2ggY2FuIGJlIGV2YWx1YXRlZCBieVxuICAgKiBpbnZva2luZyBub2RlLmV2YWx1YXRlKCkuXG4gICAqXG4gICAqIE5vdGUgdGhlIGV2YWx1YXRpbmcgYXJiaXRyYXJ5IGV4cHJlc3Npb25zIG1heSBpbnZvbHZlIHNlY3VyaXR5IHJpc2tzLFxuICAgKiBzZWUgW2h0dHBzOi8vbWF0aGpzLm9yZy9kb2NzL2V4cHJlc3Npb25zL3NlY3VyaXR5Lmh0bWxdKGh0dHBzOi8vbWF0aGpzLm9yZy9kb2NzL2V4cHJlc3Npb25zL3NlY3VyaXR5Lmh0bWwpIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLnBhcnNlKGV4cHIpXG4gICAqICAgICBtYXRoLnBhcnNlKGV4cHIsIG9wdGlvbnMpXG4gICAqICAgICBtYXRoLnBhcnNlKFtleHByMSwgZXhwcjIsIGV4cHIzLCAuLi5dKVxuICAgKiAgICAgbWF0aC5wYXJzZShbZXhwcjEsIGV4cHIyLCBleHByMywgLi4uXSwgb3B0aW9ucylcbiAgICpcbiAgICogRXhhbXBsZTpcbiAgICpcbiAgICogICAgIGNvbnN0IG5vZGUxID0gbWF0aC5wYXJzZSgnc3FydCgzXjIgKyA0XjIpJylcbiAgICogICAgIG5vZGUxLmNvbXBpbGUoKS5ldmFsdWF0ZSgpIC8vIDVcbiAgICpcbiAgICogICAgIGxldCBzY29wZSA9IHthOjMsIGI6NH1cbiAgICogICAgIGNvbnN0IG5vZGUyID0gbWF0aC5wYXJzZSgnYSAqIGInKSAvLyAxMlxuICAgKiAgICAgY29uc3QgY29kZTIgPSBub2RlMi5jb21waWxlKClcbiAgICogICAgIGNvZGUyLmV2YWx1YXRlKHNjb3BlKSAvLyAxMlxuICAgKiAgICAgc2NvcGUuYSA9IDVcbiAgICogICAgIGNvZGUyLmV2YWx1YXRlKHNjb3BlKSAvLyAyMFxuICAgKlxuICAgKiAgICAgY29uc3Qgbm9kZXMgPSBtYXRoLnBhcnNlKFsnYSA9IDMnLCAnYiA9IDQnLCAnYSAqIGInXSlcbiAgICogICAgIG5vZGVzWzJdLmNvbXBpbGUoKS5ldmFsdWF0ZSgpIC8vIDEyXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgZXZhbHVhdGUsIGNvbXBpbGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBzdHJpbmdbXSB8IE1hdHJpeH0gZXhwciAgICAgICAgICBFeHByZXNzaW9uIHRvIGJlIHBhcnNlZFxuICAgKiBAcGFyYW0ge3tub2RlczogT2JqZWN0PHN0cmluZywgTm9kZT59fSBbb3B0aW9uc10gIEF2YWlsYWJsZSBvcHRpb25zOlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gYG5vZGVzYCBhIHNldCBvZiBjdXN0b20gbm9kZXNcbiAgICogQHJldHVybiB7Tm9kZSB8IE5vZGVbXX0gbm9kZVxuICAgKiBAdGhyb3dzIHtFcnJvcn1cbiAgICovXG4gIHZhciBwYXJzZSA9IHR5cGVkKG5hbWUsIHtcbiAgICBzdHJpbmc6IGZ1bmN0aW9uIHN0cmluZyhleHByZXNzaW9uKSB7XG4gICAgICByZXR1cm4gcGFyc2VTdGFydChleHByZXNzaW9uLCB7fSk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeChleHByZXNzaW9ucykge1xuICAgICAgcmV0dXJuIHBhcnNlTXVsdGlwbGUoZXhwcmVzc2lvbnMsIHt9KTtcbiAgICB9LFxuICAgICdzdHJpbmcsIE9iamVjdCc6IGZ1bmN0aW9uIHN0cmluZ09iamVjdChleHByZXNzaW9uLCBvcHRpb25zKSB7XG4gICAgICB2YXIgZXh0cmFOb2RlcyA9IG9wdGlvbnMubm9kZXMgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubm9kZXMgOiB7fTtcbiAgICAgIHJldHVybiBwYXJzZVN0YXJ0KGV4cHJlc3Npb24sIGV4dHJhTm9kZXMpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4LCBPYmplY3QnOiBwYXJzZU11bHRpcGxlXG4gIH0pO1xuXG4gIGZ1bmN0aW9uIHBhcnNlTXVsdGlwbGUoZXhwcmVzc2lvbnMpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgdmFyIGV4dHJhTm9kZXMgPSBvcHRpb25zLm5vZGVzICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm5vZGVzIDoge307IC8vIHBhcnNlIGFuIGFycmF5IG9yIG1hdHJpeCB3aXRoIGV4cHJlc3Npb25zXG5cbiAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKGV4cHJlc3Npb25zLCBmdW5jdGlvbiAoZWxlbSkge1xuICAgICAgaWYgKHR5cGVvZiBlbGVtICE9PSAnc3RyaW5nJykgdGhyb3cgbmV3IFR5cGVFcnJvcignU3RyaW5nIGV4cGVjdGVkJyk7XG4gICAgICByZXR1cm4gcGFyc2VTdGFydChlbGVtLCBleHRyYU5vZGVzKTtcbiAgICB9KTtcbiAgfSAvLyB0b2tlbiB0eXBlcyBlbnVtZXJhdGlvblxuXG5cbiAgdmFyIFRPS0VOVFlQRSA9IHtcbiAgICBOVUxMOiAwLFxuICAgIERFTElNSVRFUjogMSxcbiAgICBOVU1CRVI6IDIsXG4gICAgU1lNQk9MOiAzLFxuICAgIFVOS05PV046IDRcbiAgfTsgLy8gbWFwIHdpdGggYWxsIGRlbGltaXRlcnNcblxuICB2YXIgREVMSU1JVEVSUyA9IHtcbiAgICAnLCc6IHRydWUsXG4gICAgJygnOiB0cnVlLFxuICAgICcpJzogdHJ1ZSxcbiAgICAnWyc6IHRydWUsXG4gICAgJ10nOiB0cnVlLFxuICAgICd7JzogdHJ1ZSxcbiAgICAnfSc6IHRydWUsXG4gICAgJ1wiJzogdHJ1ZSxcbiAgICAnXFwnJzogdHJ1ZSxcbiAgICAnOyc6IHRydWUsXG4gICAgJysnOiB0cnVlLFxuICAgICctJzogdHJ1ZSxcbiAgICAnKic6IHRydWUsXG4gICAgJy4qJzogdHJ1ZSxcbiAgICAnLyc6IHRydWUsXG4gICAgJy4vJzogdHJ1ZSxcbiAgICAnJSc6IHRydWUsXG4gICAgJ14nOiB0cnVlLFxuICAgICcuXic6IHRydWUsXG4gICAgJ34nOiB0cnVlLFxuICAgICchJzogdHJ1ZSxcbiAgICAnJic6IHRydWUsXG4gICAgJ3wnOiB0cnVlLFxuICAgICdefCc6IHRydWUsXG4gICAgJz0nOiB0cnVlLFxuICAgICc6JzogdHJ1ZSxcbiAgICAnPyc6IHRydWUsXG4gICAgJz09JzogdHJ1ZSxcbiAgICAnIT0nOiB0cnVlLFxuICAgICc8JzogdHJ1ZSxcbiAgICAnPic6IHRydWUsXG4gICAgJzw9JzogdHJ1ZSxcbiAgICAnPj0nOiB0cnVlLFxuICAgICc8PCc6IHRydWUsXG4gICAgJz4+JzogdHJ1ZSxcbiAgICAnPj4+JzogdHJ1ZVxuICB9OyAvLyBtYXAgd2l0aCBhbGwgbmFtZWQgZGVsaW1pdGVyc1xuXG4gIHZhciBOQU1FRF9ERUxJTUlURVJTID0ge1xuICAgIG1vZDogdHJ1ZSxcbiAgICB0bzogdHJ1ZSxcbiAgICBcImluXCI6IHRydWUsXG4gICAgYW5kOiB0cnVlLFxuICAgIHhvcjogdHJ1ZSxcbiAgICBvcjogdHJ1ZSxcbiAgICBub3Q6IHRydWVcbiAgfTtcbiAgdmFyIENPTlNUQU5UUyA9IHtcbiAgICBcInRydWVcIjogdHJ1ZSxcbiAgICBcImZhbHNlXCI6IGZhbHNlLFxuICAgIFwibnVsbFwiOiBudWxsLFxuICAgIHVuZGVmaW5lZDogdW5kZWZpbmVkXG4gIH07XG4gIHZhciBOVU1FUklDX0NPTlNUQU5UUyA9IFsnTmFOJywgJ0luZmluaXR5J107XG5cbiAgZnVuY3Rpb24gaW5pdGlhbFN0YXRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICBleHRyYU5vZGVzOiB7fSxcbiAgICAgIC8vIGN1cnJlbnQgZXh0cmEgbm9kZXMsIG11c3QgYmUgY2FyZWZ1bCBub3QgdG8gbXV0YXRlXG4gICAgICBleHByZXNzaW9uOiAnJyxcbiAgICAgIC8vIGN1cnJlbnQgZXhwcmVzc2lvblxuICAgICAgY29tbWVudDogJycsXG4gICAgICAvLyBsYXN0IHBhcnNlZCBjb21tZW50XG4gICAgICBpbmRleDogMCxcbiAgICAgIC8vIGN1cnJlbnQgaW5kZXggaW4gZXhwclxuICAgICAgdG9rZW46ICcnLFxuICAgICAgLy8gY3VycmVudCB0b2tlblxuICAgICAgdG9rZW5UeXBlOiBUT0tFTlRZUEUuTlVMTCxcbiAgICAgIC8vIHR5cGUgb2YgdGhlIHRva2VuXG4gICAgICBuZXN0aW5nTGV2ZWw6IDAsXG4gICAgICAvLyBsZXZlbCBvZiBuZXN0aW5nIGluc2lkZSBwYXJhbWV0ZXJzLCB1c2VkIHRvIGlnbm9yZSBuZXdsaW5lIGNoYXJhY3RlcnNcbiAgICAgIGNvbmRpdGlvbmFsTGV2ZWw6IG51bGwgLy8gd2hlbiBhIGNvbmRpdGlvbmFsIGlzIGJlaW5nIHBhcnNlZCwgdGhlIGxldmVsIG9mIHRoZSBjb25kaXRpb25hbCBpcyBzdG9yZWQgaGVyZVxuXG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogVmlldyB1cHRvIGBsZW5ndGhgIGNoYXJhY3RlcnMgb2YgdGhlIGV4cHJlc3Npb24gc3RhcnRpbmcgYXQgdGhlIGN1cnJlbnQgY2hhcmFjdGVyLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9MV0gTnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gdmlld1xuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGN1cnJlbnRTdHJpbmcoc3RhdGUsIGxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZS5leHByZXNzaW9uLnN1YnN0cihzdGF0ZS5pbmRleCwgbGVuZ3RoKTtcbiAgfVxuICAvKipcbiAgICogVmlldyB0aGUgY3VycmVudCBjaGFyYWN0ZXIuIFJldHVybnMgJycgaWYgZW5kIG9mIGV4cHJlc3Npb24gaXMgcmVhY2hlZC5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gY3VycmVudENoYXJhY3RlcihzdGF0ZSkge1xuICAgIHJldHVybiBjdXJyZW50U3RyaW5nKHN0YXRlLCAxKTtcbiAgfVxuICAvKipcbiAgICogR2V0IHRoZSBuZXh0IGNoYXJhY3RlciBmcm9tIHRoZSBleHByZXNzaW9uLlxuICAgKiBUaGUgY2hhcmFjdGVyIGlzIHN0b3JlZCBpbnRvIHRoZSBjaGFyIGMuIElmIHRoZSBlbmQgb2YgdGhlIGV4cHJlc3Npb24gaXNcbiAgICogcmVhY2hlZCwgdGhlIGZ1bmN0aW9uIHB1dHMgYW4gZW1wdHkgc3RyaW5nIGluIGMuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gbmV4dChzdGF0ZSkge1xuICAgIHN0YXRlLmluZGV4Kys7XG4gIH1cbiAgLyoqXG4gICAqIFByZXZpZXcgdGhlIHByZXZpb3VzIGNoYXJhY3RlciBmcm9tIHRoZSBleHByZXNzaW9uLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IGNOZXh0XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcHJldkNoYXJhY3RlcihzdGF0ZSkge1xuICAgIHJldHVybiBzdGF0ZS5leHByZXNzaW9uLmNoYXJBdChzdGF0ZS5pbmRleCAtIDEpO1xuICB9XG4gIC8qKlxuICAgKiBQcmV2aWV3IHRoZSBuZXh0IGNoYXJhY3RlciBmcm9tIHRoZSBleHByZXNzaW9uLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IGNOZXh0XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gbmV4dENoYXJhY3RlcihzdGF0ZSkge1xuICAgIHJldHVybiBzdGF0ZS5leHByZXNzaW9uLmNoYXJBdChzdGF0ZS5pbmRleCArIDEpO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgbmV4dCB0b2tlbiBpbiB0aGUgY3VycmVudCBzdHJpbmcgZXhwci5cbiAgICogVGhlIHRva2VuIGFuZCB0b2tlbiB0eXBlIGFyZSBhdmFpbGFibGUgYXMgdG9rZW4gYW5kIHRva2VuVHlwZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGdldFRva2VuKHN0YXRlKSB7XG4gICAgc3RhdGUudG9rZW5UeXBlID0gVE9LRU5UWVBFLk5VTEw7XG4gICAgc3RhdGUudG9rZW4gPSAnJztcbiAgICBzdGF0ZS5jb21tZW50ID0gJyc7IC8vIHNraXAgb3ZlciB3aGl0ZXNwYWNlc1xuICAgIC8vIHNwYWNlLCB0YWIsIGFuZCBuZXdsaW5lIHdoZW4gaW5zaWRlIHBhcmFtZXRlcnNcblxuICAgIHdoaWxlIChwYXJzZS5pc1doaXRlc3BhY2UoY3VycmVudENoYXJhY3RlcihzdGF0ZSksIHN0YXRlLm5lc3RpbmdMZXZlbCkpIHtcbiAgICAgIG5leHQoc3RhdGUpO1xuICAgIH0gLy8gc2tpcCBjb21tZW50XG5cblxuICAgIGlmIChjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSA9PT0gJyMnKSB7XG4gICAgICB3aGlsZSAoY3VycmVudENoYXJhY3RlcihzdGF0ZSkgIT09ICdcXG4nICYmIGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpICE9PSAnJykge1xuICAgICAgICBzdGF0ZS5jb21tZW50ICs9IGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpO1xuICAgICAgICBuZXh0KHN0YXRlKTtcbiAgICAgIH1cbiAgICB9IC8vIGNoZWNrIGZvciBlbmQgb2YgZXhwcmVzc2lvblxuXG5cbiAgICBpZiAoY3VycmVudENoYXJhY3RlcihzdGF0ZSkgPT09ICcnKSB7XG4gICAgICAvLyB0b2tlbiBpcyBzdGlsbCBlbXB0eVxuICAgICAgc3RhdGUudG9rZW5UeXBlID0gVE9LRU5UWVBFLkRFTElNSVRFUjtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIGNoZWNrIGZvciBuZXcgbGluZSBjaGFyYWN0ZXJcblxuXG4gICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpID09PSAnXFxuJyAmJiAhc3RhdGUubmVzdGluZ0xldmVsKSB7XG4gICAgICBzdGF0ZS50b2tlblR5cGUgPSBUT0tFTlRZUEUuREVMSU1JVEVSO1xuICAgICAgc3RhdGUudG9rZW4gPSBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKTtcbiAgICAgIG5leHQoc3RhdGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjMSA9IGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpO1xuICAgIHZhciBjMiA9IGN1cnJlbnRTdHJpbmcoc3RhdGUsIDIpO1xuICAgIHZhciBjMyA9IGN1cnJlbnRTdHJpbmcoc3RhdGUsIDMpO1xuXG4gICAgaWYgKGMzLmxlbmd0aCA9PT0gMyAmJiBERUxJTUlURVJTW2MzXSkge1xuICAgICAgc3RhdGUudG9rZW5UeXBlID0gVE9LRU5UWVBFLkRFTElNSVRFUjtcbiAgICAgIHN0YXRlLnRva2VuID0gYzM7XG4gICAgICBuZXh0KHN0YXRlKTtcbiAgICAgIG5leHQoc3RhdGUpO1xuICAgICAgbmV4dChzdGF0ZSk7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBjaGVjayBmb3IgZGVsaW1pdGVycyBjb25zaXN0aW5nIG9mIDIgY2hhcmFjdGVyc1xuXG5cbiAgICBpZiAoYzIubGVuZ3RoID09PSAyICYmIERFTElNSVRFUlNbYzJdKSB7XG4gICAgICBzdGF0ZS50b2tlblR5cGUgPSBUT0tFTlRZUEUuREVMSU1JVEVSO1xuICAgICAgc3RhdGUudG9rZW4gPSBjMjtcbiAgICAgIG5leHQoc3RhdGUpO1xuICAgICAgbmV4dChzdGF0ZSk7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBjaGVjayBmb3IgZGVsaW1pdGVycyBjb25zaXN0aW5nIG9mIDEgY2hhcmFjdGVyXG5cblxuICAgIGlmIChERUxJTUlURVJTW2MxXSkge1xuICAgICAgc3RhdGUudG9rZW5UeXBlID0gVE9LRU5UWVBFLkRFTElNSVRFUjtcbiAgICAgIHN0YXRlLnRva2VuID0gYzE7XG4gICAgICBuZXh0KHN0YXRlKTtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIGNoZWNrIGZvciBhIG51bWJlclxuXG5cbiAgICBpZiAocGFyc2UuaXNEaWdpdERvdChjMSkpIHtcbiAgICAgIHN0YXRlLnRva2VuVHlwZSA9IFRPS0VOVFlQRS5OVU1CRVI7IC8vIGdldCBudW1iZXIsIGNhbiBoYXZlIGEgc2luZ2xlIGRvdFxuXG4gICAgICBpZiAoY3VycmVudENoYXJhY3RlcihzdGF0ZSkgPT09ICcuJykge1xuICAgICAgICBzdGF0ZS50b2tlbiArPSBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKTtcbiAgICAgICAgbmV4dChzdGF0ZSk7XG5cbiAgICAgICAgaWYgKCFwYXJzZS5pc0RpZ2l0KGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpKSkge1xuICAgICAgICAgIC8vIHRoaXMgaXMgbm8gbnVtYmVyLCBpdCBpcyBqdXN0IGEgZG90IChjYW4gYmUgZG90IG5vdGF0aW9uKVxuICAgICAgICAgIHN0YXRlLnRva2VuVHlwZSA9IFRPS0VOVFlQRS5ERUxJTUlURVI7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdoaWxlIChwYXJzZS5pc0RpZ2l0KGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpKSkge1xuICAgICAgICAgIHN0YXRlLnRva2VuICs9IGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpO1xuICAgICAgICAgIG5leHQoc3RhdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcnNlLmlzRGVjaW1hbE1hcmsoY3VycmVudENoYXJhY3RlcihzdGF0ZSksIG5leHRDaGFyYWN0ZXIoc3RhdGUpKSkge1xuICAgICAgICAgIHN0YXRlLnRva2VuICs9IGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpO1xuICAgICAgICAgIG5leHQoc3RhdGUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHdoaWxlIChwYXJzZS5pc0RpZ2l0KGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpKSkge1xuICAgICAgICBzdGF0ZS50b2tlbiArPSBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKTtcbiAgICAgICAgbmV4dChzdGF0ZSk7XG4gICAgICB9IC8vIGNoZWNrIGZvciBleHBvbmVudGlhbCBub3RhdGlvbiBsaWtlIFwiMi4zZS00XCIsIFwiMS4yM2U1MFwiIG9yIFwiMmUrNFwiXG5cblxuICAgICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpID09PSAnRScgfHwgY3VycmVudENoYXJhY3RlcihzdGF0ZSkgPT09ICdlJykge1xuICAgICAgICBpZiAocGFyc2UuaXNEaWdpdChuZXh0Q2hhcmFjdGVyKHN0YXRlKSkgfHwgbmV4dENoYXJhY3RlcihzdGF0ZSkgPT09ICctJyB8fCBuZXh0Q2hhcmFjdGVyKHN0YXRlKSA9PT0gJysnKSB7XG4gICAgICAgICAgc3RhdGUudG9rZW4gKz0gY3VycmVudENoYXJhY3RlcihzdGF0ZSk7XG4gICAgICAgICAgbmV4dChzdGF0ZSk7XG5cbiAgICAgICAgICBpZiAoY3VycmVudENoYXJhY3RlcihzdGF0ZSkgPT09ICcrJyB8fCBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSA9PT0gJy0nKSB7XG4gICAgICAgICAgICBzdGF0ZS50b2tlbiArPSBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKTtcbiAgICAgICAgICAgIG5leHQoc3RhdGUpO1xuICAgICAgICAgIH0gLy8gU2NpZW50aWZpYyBub3RhdGlvbiBNVVNUIGJlIGZvbGxvd2VkIGJ5IGFuIGV4cG9uZW50XG5cblxuICAgICAgICAgIGlmICghcGFyc2UuaXNEaWdpdChjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSkpIHtcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnRGlnaXQgZXhwZWN0ZWQsIGdvdCBcIicgKyBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSArICdcIicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHdoaWxlIChwYXJzZS5pc0RpZ2l0KGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpKSkge1xuICAgICAgICAgICAgc3RhdGUudG9rZW4gKz0gY3VycmVudENoYXJhY3RlcihzdGF0ZSk7XG4gICAgICAgICAgICBuZXh0KHN0YXRlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocGFyc2UuaXNEZWNpbWFsTWFyayhjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSwgbmV4dENoYXJhY3RlcihzdGF0ZSkpKSB7XG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ0RpZ2l0IGV4cGVjdGVkLCBnb3QgXCInICsgY3VycmVudENoYXJhY3RlcihzdGF0ZSkgKyAnXCInKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAobmV4dENoYXJhY3RlcihzdGF0ZSkgPT09ICcuJykge1xuICAgICAgICAgIG5leHQoc3RhdGUpO1xuICAgICAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnRGlnaXQgZXhwZWN0ZWQsIGdvdCBcIicgKyBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSArICdcIicpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9IC8vIGNoZWNrIGZvciB2YXJpYWJsZXMsIGZ1bmN0aW9ucywgbmFtZWQgb3BlcmF0b3JzXG5cblxuICAgIGlmIChwYXJzZS5pc0FscGhhKGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpLCBwcmV2Q2hhcmFjdGVyKHN0YXRlKSwgbmV4dENoYXJhY3RlcihzdGF0ZSkpKSB7XG4gICAgICB3aGlsZSAocGFyc2UuaXNBbHBoYShjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSwgcHJldkNoYXJhY3RlcihzdGF0ZSksIG5leHRDaGFyYWN0ZXIoc3RhdGUpKSB8fCBwYXJzZS5pc0RpZ2l0KGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpKSkge1xuICAgICAgICBzdGF0ZS50b2tlbiArPSBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKTtcbiAgICAgICAgbmV4dChzdGF0ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoTkFNRURfREVMSU1JVEVSUywgc3RhdGUudG9rZW4pKSB7XG4gICAgICAgIHN0YXRlLnRva2VuVHlwZSA9IFRPS0VOVFlQRS5ERUxJTUlURVI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS50b2tlblR5cGUgPSBUT0tFTlRZUEUuU1lNQk9MO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfSAvLyBzb21ldGhpbmcgdW5rbm93biBpcyBmb3VuZCwgd3JvbmcgY2hhcmFjdGVycyAtPiBhIHN5bnRheCBlcnJvclxuXG5cbiAgICBzdGF0ZS50b2tlblR5cGUgPSBUT0tFTlRZUEUuVU5LTk9XTjtcblxuICAgIHdoaWxlIChjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSAhPT0gJycpIHtcbiAgICAgIHN0YXRlLnRva2VuICs9IGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpO1xuICAgICAgbmV4dChzdGF0ZSk7XG4gICAgfVxuXG4gICAgdGhyb3cgY3JlYXRlU3ludGF4RXJyb3Ioc3RhdGUsICdTeW50YXggZXJyb3IgaW4gcGFydCBcIicgKyBzdGF0ZS50b2tlbiArICdcIicpO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgbmV4dCB0b2tlbiBhbmQgc2tpcCBuZXdsaW5lIHRva2Vuc1xuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpIHtcbiAgICBkbyB7XG4gICAgICBnZXRUb2tlbihzdGF0ZSk7XG4gICAgfSB3aGlsZSAoc3RhdGUudG9rZW4gPT09ICdcXG4nKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uXG5cbiAgfVxuICAvKipcbiAgICogT3BlbiBwYXJhbWV0ZXJzLlxuICAgKiBOZXcgbGluZSBjaGFyYWN0ZXJzIHdpbGwgYmUgaWdub3JlZCB1bnRpbCBjbG9zZVBhcmFtcyhzdGF0ZSkgaXMgY2FsbGVkXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gb3BlblBhcmFtcyhzdGF0ZSkge1xuICAgIHN0YXRlLm5lc3RpbmdMZXZlbCsrO1xuICB9XG4gIC8qKlxuICAgKiBDbG9zZSBwYXJhbWV0ZXJzLlxuICAgKiBOZXcgbGluZSBjaGFyYWN0ZXJzIHdpbGwgbm8gbG9uZ2VyIGJlIGlnbm9yZWRcbiAgICovXG5cblxuICBmdW5jdGlvbiBjbG9zZVBhcmFtcyhzdGF0ZSkge1xuICAgIHN0YXRlLm5lc3RpbmdMZXZlbC0tO1xuICB9XG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgY3VycmVudCBjaGFyYWN0ZXIgYGNgIGlzIGEgdmFsaWQgYWxwaGEgY2hhcmFjdGVyOlxuICAgKlxuICAgKiAtIEEgbGF0aW4gbGV0dGVyICh1cHBlciBvciBsb3dlciBjYXNlKSBBc2NpaTogYS16LCBBLVpcbiAgICogLSBBbiB1bmRlcnNjb3JlICAgICAgICAgICAgICAgICAgICAgICAgQXNjaWk6IF9cbiAgICogLSBBIGRvbGxhciBzaWduICAgICAgICAgICAgICAgICAgICAgICAgQXNjaWk6ICRcbiAgICogLSBBIGxhdGluIGxldHRlciB3aXRoIGFjY2VudHMgICAgICAgICAgVW5pY29kZTogXFx1MDBDMCAtIFxcdTAyQUZcbiAgICogLSBBIGdyZWVrIGxldHRlciAgICAgICAgICAgICAgICAgICAgICAgVW5pY29kZTogXFx1MDM3MCAtIFxcdTAzRkZcbiAgICogLSBBIG1hdGhlbWF0aWNhbCBhbHBoYW51bWVyaWMgc3ltYm9sICAgVW5pY29kZTogXFx1ezFENDAwfSAtIFxcdXsxRDdGRn0gZXhjbHVkaW5nIGludmFsaWQgY29kZSBwb2ludHNcbiAgICpcbiAgICogVGhlIHByZXZpb3VzIGFuZCBuZXh0IGNoYXJhY3RlcnMgYXJlIG5lZWRlZCB0byBkZXRlcm1pbmUgd2hldGhlclxuICAgKiB0aGlzIGNoYXJhY3RlciBpcyBwYXJ0IG9mIGEgdW5pY29kZSBzdXJyb2dhdGUgcGFpci5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGMgICAgICBDdXJyZW50IGNoYXJhY3RlciBpbiB0aGUgZXhwcmVzc2lvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gY1ByZXYgIFByZXZpb3VzIGNoYXJhY3RlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gY05leHQgIE5leHQgY2hhcmFjdGVyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgcGFyc2UuaXNBbHBoYSA9IGZ1bmN0aW9uIGlzQWxwaGEoYywgY1ByZXYsIGNOZXh0KSB7XG4gICAgcmV0dXJuIHBhcnNlLmlzVmFsaWRMYXRpbk9yR3JlZWsoYykgfHwgcGFyc2UuaXNWYWxpZE1hdGhTeW1ib2woYywgY05leHQpIHx8IHBhcnNlLmlzVmFsaWRNYXRoU3ltYm9sKGNQcmV2LCBjKTtcbiAgfTtcbiAgLyoqXG4gICAqIFRlc3Qgd2hldGhlciBhIGNoYXJhY3RlciBpcyBhIHZhbGlkIGxhdGluLCBncmVlaywgb3IgbGV0dGVyLWxpa2UgY2hhcmFjdGVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgcGFyc2UuaXNWYWxpZExhdGluT3JHcmVlayA9IGZ1bmN0aW9uIGlzVmFsaWRMYXRpbk9yR3JlZWsoYykge1xuICAgIHJldHVybiAvXlthLXpBLVpfJFxcdTAwQzAtXFx1MDJBRlxcdTAzNzAtXFx1MDNGRlxcdTIxMDAtXFx1MjE0Rl0kLy50ZXN0KGMpO1xuICB9O1xuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIHR3byBnaXZlbiAxNiBiaXQgY2hhcmFjdGVycyBmb3JtIGEgc3Vycm9nYXRlIHBhaXIgb2YgYVxuICAgKiB1bmljb2RlIG1hdGggc3ltYm9sLlxuICAgKlxuICAgKiBodHRwczovL3VuaWNvZGUtdGFibGUuY29tL2VuL1xuICAgKiBodHRwczovL3d3dy53aWtpd2FuZC5jb20vZW4vTWF0aGVtYXRpY2FsX29wZXJhdG9yc19hbmRfc3ltYm9sc19pbl9Vbmljb2RlXG4gICAqXG4gICAqIE5vdGU6IEluIEVTNiB3aWxsIGJlIHVuaWNvZGUgYXdhcmU6XG4gICAqIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzI4MDcxMi9qYXZhc2NyaXB0LXVuaWNvZGUtcmVnZXhlc1xuICAgKiBodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvZXM2LXVuaWNvZGUtcmVnZXhcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGhpZ2hcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxvd1xuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cblxuXG4gIHBhcnNlLmlzVmFsaWRNYXRoU3ltYm9sID0gZnVuY3Rpb24gaXNWYWxpZE1hdGhTeW1ib2woaGlnaCwgbG93KSB7XG4gICAgcmV0dXJuIC9eW1xcdUQ4MzVdJC8udGVzdChoaWdoKSAmJiAvXltcXHVEQzAwLVxcdURGRkZdJC8udGVzdChsb3cpICYmIC9eW15cXHVEQzU1XFx1REM5RFxcdURDQTBcXHVEQ0ExXFx1RENBM1xcdURDQTRcXHVEQ0E3XFx1RENBOFxcdURDQURcXHVEQ0JBXFx1RENCQ1xcdURDQzRcXHVERDA2XFx1REQwQlxcdUREMENcXHVERDE1XFx1REQxRFxcdUREM0FcXHVERDNGXFx1REQ0NVxcdURENDctXFx1REQ0OVxcdURENTFcXHVERUE2XFx1REVBN1xcdURGQ0NcXHVERkNEXSQvLnRlc3QobG93KTtcbiAgfTtcbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgZ2l2ZW4gY2hhcmFjdGVyIGMgaXMgYSB3aGl0ZSBzcGFjZSBjaGFyYWN0ZXI6IHNwYWNlLCB0YWIsIG9yIGVudGVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBuZXN0aW5nTGV2ZWxcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG5cblxuICBwYXJzZS5pc1doaXRlc3BhY2UgPSBmdW5jdGlvbiBpc1doaXRlc3BhY2UoYywgbmVzdGluZ0xldmVsKSB7XG4gICAgLy8gVE9ETzogYWxzbyB0YWtlICdcXHInIGNhcnJpYWdlIHJldHVybiBhcyBuZXdsaW5lPyBPciBkb2VzIHRoYXQgZ2l2ZSBwcm9ibGVtcyBvbiBtYWM/XG4gICAgcmV0dXJuIGMgPT09ICcgJyB8fCBjID09PSAnXFx0JyB8fCBjID09PSAnXFxuJyAmJiBuZXN0aW5nTGV2ZWwgPiAwO1xuICB9O1xuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIHRoZSBjaGFyYWN0ZXIgYyBpcyBhIGRlY2ltYWwgbWFyayAoZG90KS5cbiAgICogVGhpcyBpcyB0aGUgY2FzZSB3aGVuIGl0J3Mgbm90IHRoZSBzdGFydCBvZiBhIGRlbGltaXRlciAnLionLCAnLi8nLCBvciAnLl4nXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjTmV4dFxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cblxuXG4gIHBhcnNlLmlzRGVjaW1hbE1hcmsgPSBmdW5jdGlvbiBpc0RlY2ltYWxNYXJrKGMsIGNOZXh0KSB7XG4gICAgcmV0dXJuIGMgPT09ICcuJyAmJiBjTmV4dCAhPT0gJy8nICYmIGNOZXh0ICE9PSAnKicgJiYgY05leHQgIT09ICdeJztcbiAgfTtcbiAgLyoqXG4gICAqIGNoZWNrcyBpZiB0aGUgZ2l2ZW4gY2hhciBjIGlzIGEgZGlnaXQgb3IgZG90XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjICAgYSBzdHJpbmcgd2l0aCBvbmUgY2hhcmFjdGVyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgcGFyc2UuaXNEaWdpdERvdCA9IGZ1bmN0aW9uIGlzRGlnaXREb3QoYykge1xuICAgIHJldHVybiBjID49ICcwJyAmJiBjIDw9ICc5JyB8fCBjID09PSAnLic7XG4gIH07XG4gIC8qKlxuICAgKiBjaGVja3MgaWYgdGhlIGdpdmVuIGNoYXIgYyBpcyBhIGRpZ2l0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjICAgYSBzdHJpbmcgd2l0aCBvbmUgY2hhcmFjdGVyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgcGFyc2UuaXNEaWdpdCA9IGZ1bmN0aW9uIGlzRGlnaXQoYykge1xuICAgIHJldHVybiBjID49ICcwJyAmJiBjIDw9ICc5JztcbiAgfTtcbiAgLyoqXG4gICAqIFN0YXJ0IG9mIHRoZSBwYXJzZSBsZXZlbHMgYmVsb3csIGluIG9yZGVyIG9mIHByZWNlZGVuY2VcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlU3RhcnQoZXhwcmVzc2lvbiwgZXh0cmFOb2Rlcykge1xuICAgIHZhciBzdGF0ZSA9IGluaXRpYWxTdGF0ZSgpO1xuXG4gICAgX2V4dGVuZHMoc3RhdGUsIHtcbiAgICAgIGV4cHJlc3Npb246IGV4cHJlc3Npb24sXG4gICAgICBleHRyYU5vZGVzOiBleHRyYU5vZGVzXG4gICAgfSk7XG5cbiAgICBnZXRUb2tlbihzdGF0ZSk7XG4gICAgdmFyIG5vZGUgPSBwYXJzZUJsb2NrKHN0YXRlKTsgLy8gY2hlY2sgZm9yIGdhcmJhZ2UgYXQgdGhlIGVuZCBvZiB0aGUgZXhwcmVzc2lvblxuICAgIC8vIGFuIGV4cHJlc3Npb24gZW5kcyB3aXRoIGEgZW1wdHkgY2hhcmFjdGVyICcnIGFuZCB0b2tlblR5cGUgREVMSU1JVEVSXG5cbiAgICBpZiAoc3RhdGUudG9rZW4gIT09ICcnKSB7XG4gICAgICBpZiAoc3RhdGUudG9rZW5UeXBlID09PSBUT0tFTlRZUEUuREVMSU1JVEVSKSB7XG4gICAgICAgIC8vIHVzZXIgZW50ZXJlZCBhIG5vdCBleGlzdGluZyBvcGVyYXRvciBsaWtlIFwiLy9cIlxuICAgICAgICAvLyBUT0RPOiBnaXZlIGhpbnRzIGZvciBhbGlhc2VzLCBmb3IgZXhhbXBsZSB3aXRoIFwiPD5cIiBnaXZlIGFzIGhpbnQgXCIgZGlkIHlvdSBtZWFuICE9PSA/XCJcbiAgICAgICAgdGhyb3cgY3JlYXRlRXJyb3Ioc3RhdGUsICdVbmV4cGVjdGVkIG9wZXJhdG9yICcgKyBzdGF0ZS50b2tlbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ1VuZXhwZWN0ZWQgcGFydCBcIicgKyBzdGF0ZS50b2tlbiArICdcIicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZSBhIGJsb2NrIHdpdGggZXhwcmVzc2lvbnMuIEV4cHJlc3Npb25zIGNhbiBiZSBzZXBhcmF0ZWQgYnkgYSBuZXdsaW5lXG4gICAqIGNoYXJhY3RlciAnXFxuJywgb3IgYnkgYSBzZW1pY29sb24gJzsnLiBJbiBjYXNlIG9mIGEgc2VtaWNvbG9uLCBubyBvdXRwdXRcbiAgICogb2YgdGhlIHByZWNlZGluZyBsaW5lIGlzIHJldHVybmVkLlxuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VCbG9jayhzdGF0ZSkge1xuICAgIHZhciBub2RlO1xuICAgIHZhciBibG9ja3MgPSBbXTtcbiAgICB2YXIgdmlzaWJsZTtcblxuICAgIGlmIChzdGF0ZS50b2tlbiAhPT0gJycgJiYgc3RhdGUudG9rZW4gIT09ICdcXG4nICYmIHN0YXRlLnRva2VuICE9PSAnOycpIHtcbiAgICAgIG5vZGUgPSBwYXJzZUFzc2lnbm1lbnQoc3RhdGUpO1xuICAgICAgbm9kZS5jb21tZW50ID0gc3RhdGUuY29tbWVudDtcbiAgICB9IC8vIFRPRE86IHNpbXBsaWZ5IHRoaXMgbG9vcFxuXG5cbiAgICB3aGlsZSAoc3RhdGUudG9rZW4gPT09ICdcXG4nIHx8IHN0YXRlLnRva2VuID09PSAnOycpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvblxuICAgICAgaWYgKGJsb2Nrcy5sZW5ndGggPT09IDAgJiYgbm9kZSkge1xuICAgICAgICB2aXNpYmxlID0gc3RhdGUudG9rZW4gIT09ICc7JztcbiAgICAgICAgYmxvY2tzLnB1c2goe1xuICAgICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgICAgdmlzaWJsZTogdmlzaWJsZVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuXG4gICAgICBpZiAoc3RhdGUudG9rZW4gIT09ICdcXG4nICYmIHN0YXRlLnRva2VuICE9PSAnOycgJiYgc3RhdGUudG9rZW4gIT09ICcnKSB7XG4gICAgICAgIG5vZGUgPSBwYXJzZUFzc2lnbm1lbnQoc3RhdGUpO1xuICAgICAgICBub2RlLmNvbW1lbnQgPSBzdGF0ZS5jb21tZW50O1xuICAgICAgICB2aXNpYmxlID0gc3RhdGUudG9rZW4gIT09ICc7JztcbiAgICAgICAgYmxvY2tzLnB1c2goe1xuICAgICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgICAgdmlzaWJsZTogdmlzaWJsZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYmxvY2tzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBuZXcgQmxvY2tOb2RlKGJsb2Nrcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghbm9kZSkge1xuICAgICAgICBub2RlID0gbmV3IENvbnN0YW50Tm9kZSh1bmRlZmluZWQpO1xuICAgICAgICBub2RlLmNvbW1lbnQgPSBzdGF0ZS5jb21tZW50O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEFzc2lnbm1lbnQgb2YgYSBmdW5jdGlvbiBvciB2YXJpYWJsZSxcbiAgICogLSBjYW4gYmUgYSB2YXJpYWJsZSBsaWtlICdhPTIuMydcbiAgICogLSBvciBhIHVwZGF0aW5nIGFuIGV4aXN0aW5nIHZhcmlhYmxlIGxpa2UgJ21hdHJpeCgyLDM6NSk9WzYsNyw4XSdcbiAgICogLSBkZWZpbmluZyBhIGZ1bmN0aW9uIGxpa2UgJ2YoeCkgPSB4XjInXG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZUFzc2lnbm1lbnQoc3RhdGUpIHtcbiAgICB2YXIgbmFtZSwgYXJncywgdmFsdWUsIHZhbGlkO1xuICAgIHZhciBub2RlID0gcGFyc2VDb25kaXRpb25hbChzdGF0ZSk7XG5cbiAgICBpZiAoc3RhdGUudG9rZW4gPT09ICc9Jykge1xuICAgICAgaWYgKCgwLCBfaXMuaXNTeW1ib2xOb2RlKShub2RlKSkge1xuICAgICAgICAvLyBwYXJzZSBhIHZhcmlhYmxlIGFzc2lnbm1lbnQgbGlrZSAnYSA9IDIvMydcbiAgICAgICAgbmFtZSA9IG5vZGUubmFtZTtcbiAgICAgICAgZ2V0VG9rZW5Ta2lwTmV3bGluZShzdGF0ZSk7XG4gICAgICAgIHZhbHVlID0gcGFyc2VBc3NpZ25tZW50KHN0YXRlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBBc3NpZ25tZW50Tm9kZShuZXcgU3ltYm9sTm9kZShuYW1lKSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQWNjZXNzb3JOb2RlKShub2RlKSkge1xuICAgICAgICAvLyBwYXJzZSBhIG1hdHJpeCBzdWJzZXQgYXNzaWdubWVudCBsaWtlICdBWzEsMl0gPSA0J1xuICAgICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTtcbiAgICAgICAgdmFsdWUgPSBwYXJzZUFzc2lnbm1lbnQoc3RhdGUpO1xuICAgICAgICByZXR1cm4gbmV3IEFzc2lnbm1lbnROb2RlKG5vZGUub2JqZWN0LCBub2RlLmluZGV4LCB2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNGdW5jdGlvbk5vZGUpKG5vZGUpICYmICgwLCBfaXMuaXNTeW1ib2xOb2RlKShub2RlLmZuKSkge1xuICAgICAgICAvLyBwYXJzZSBmdW5jdGlvbiBhc3NpZ25tZW50IGxpa2UgJ2YoeCkgPSB4XjInXG4gICAgICAgIHZhbGlkID0gdHJ1ZTtcbiAgICAgICAgYXJncyA9IFtdO1xuICAgICAgICBuYW1lID0gbm9kZS5uYW1lO1xuICAgICAgICBub2RlLmFyZ3MuZm9yRWFjaChmdW5jdGlvbiAoYXJnLCBpbmRleCkge1xuICAgICAgICAgIGlmICgoMCwgX2lzLmlzU3ltYm9sTm9kZSkoYXJnKSkge1xuICAgICAgICAgICAgYXJnc1tpbmRleF0gPSBhcmcubmFtZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh2YWxpZCkge1xuICAgICAgICAgIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpO1xuICAgICAgICAgIHZhbHVlID0gcGFyc2VBc3NpZ25tZW50KHN0YXRlKTtcbiAgICAgICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uQXNzaWdubWVudE5vZGUobmFtZSwgYXJncywgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnSW52YWxpZCBsZWZ0IGhhbmQgc2lkZSBvZiBhc3NpZ25tZW50IG9wZXJhdG9yID0nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICAvKipcbiAgICogY29uZGl0aW9uYWwgb3BlcmF0aW9uXG4gICAqXG4gICAqICAgICBjb25kaXRpb24gPyB0cnVlUGFydCA6IGZhbHNlUGFydFxuICAgKlxuICAgKiBOb3RlOiBjb25kaXRpb25hbCBvcGVyYXRvciBpcyByaWdodC1hc3NvY2lhdGl2ZVxuICAgKlxuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VDb25kaXRpb25hbChzdGF0ZSkge1xuICAgIHZhciBub2RlID0gcGFyc2VMb2dpY2FsT3Ioc3RhdGUpO1xuXG4gICAgd2hpbGUgKHN0YXRlLnRva2VuID09PSAnPycpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvblxuICAgICAgLy8gc2V0IGEgY29uZGl0aW9uYWwgbGV2ZWwsIHRoZSByYW5nZSBvcGVyYXRvciB3aWxsIGJlIGlnbm9yZWQgYXMgbG9uZ1xuICAgICAgLy8gYXMgY29uZGl0aW9uYWxMZXZlbCA9PT0gc3RhdGUubmVzdGluZ0xldmVsLlxuICAgICAgdmFyIHByZXYgPSBzdGF0ZS5jb25kaXRpb25hbExldmVsO1xuICAgICAgc3RhdGUuY29uZGl0aW9uYWxMZXZlbCA9IHN0YXRlLm5lc3RpbmdMZXZlbDtcbiAgICAgIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpO1xuICAgICAgdmFyIGNvbmRpdGlvbiA9IG5vZGU7XG4gICAgICB2YXIgdHJ1ZUV4cHIgPSBwYXJzZUFzc2lnbm1lbnQoc3RhdGUpO1xuICAgICAgaWYgKHN0YXRlLnRva2VuICE9PSAnOicpIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnRmFsc2UgcGFydCBvZiBjb25kaXRpb25hbCBleHByZXNzaW9uIGV4cGVjdGVkJyk7XG4gICAgICBzdGF0ZS5jb25kaXRpb25hbExldmVsID0gbnVsbDtcbiAgICAgIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpO1xuICAgICAgdmFyIGZhbHNlRXhwciA9IHBhcnNlQXNzaWdubWVudChzdGF0ZSk7IC8vIE5vdGU6IGNoZWNrIGZvciBjb25kaXRpb25hbCBvcGVyYXRvciBhZ2FpbiwgcmlnaHQgYXNzb2NpYXRpdml0eVxuXG4gICAgICBub2RlID0gbmV3IENvbmRpdGlvbmFsTm9kZShjb25kaXRpb24sIHRydWVFeHByLCBmYWxzZUV4cHIpOyAvLyByZXN0b3JlIHRoZSBwcmV2aW91cyBjb25kaXRpb25hbCBsZXZlbFxuXG4gICAgICBzdGF0ZS5jb25kaXRpb25hbExldmVsID0gcHJldjtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICAvKipcbiAgICogbG9naWNhbCBvciwgJ3ggb3IgeSdcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlTG9naWNhbE9yKHN0YXRlKSB7XG4gICAgdmFyIG5vZGUgPSBwYXJzZUxvZ2ljYWxYb3Ioc3RhdGUpO1xuXG4gICAgd2hpbGUgKHN0YXRlLnRva2VuID09PSAnb3InKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVubW9kaWZpZWQtbG9vcC1jb25kaXRpb25cbiAgICAgIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpO1xuICAgICAgbm9kZSA9IG5ldyBPcGVyYXRvck5vZGUoJ29yJywgJ29yJywgW25vZGUsIHBhcnNlTG9naWNhbFhvcihzdGF0ZSldKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICAvKipcbiAgICogbG9naWNhbCBleGNsdXNpdmUgb3IsICd4IHhvciB5J1xuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VMb2dpY2FsWG9yKHN0YXRlKSB7XG4gICAgdmFyIG5vZGUgPSBwYXJzZUxvZ2ljYWxBbmQoc3RhdGUpO1xuXG4gICAgd2hpbGUgKHN0YXRlLnRva2VuID09PSAneG9yJykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uXG4gICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTtcbiAgICAgIG5vZGUgPSBuZXcgT3BlcmF0b3JOb2RlKCd4b3InLCAneG9yJywgW25vZGUsIHBhcnNlTG9naWNhbEFuZChzdGF0ZSldKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICAvKipcbiAgICogbG9naWNhbCBhbmQsICd4IGFuZCB5J1xuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VMb2dpY2FsQW5kKHN0YXRlKSB7XG4gICAgdmFyIG5vZGUgPSBwYXJzZUJpdHdpc2VPcihzdGF0ZSk7XG5cbiAgICB3aGlsZSAoc3RhdGUudG9rZW4gPT09ICdhbmQnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVubW9kaWZpZWQtbG9vcC1jb25kaXRpb25cbiAgICAgIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpO1xuICAgICAgbm9kZSA9IG5ldyBPcGVyYXRvck5vZGUoJ2FuZCcsICdhbmQnLCBbbm9kZSwgcGFyc2VCaXR3aXNlT3Ioc3RhdGUpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgLyoqXG4gICAqIGJpdHdpc2Ugb3IsICd4IHwgeSdcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlQml0d2lzZU9yKHN0YXRlKSB7XG4gICAgdmFyIG5vZGUgPSBwYXJzZUJpdHdpc2VYb3Ioc3RhdGUpO1xuXG4gICAgd2hpbGUgKHN0YXRlLnRva2VuID09PSAnfCcpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvblxuICAgICAgZ2V0VG9rZW5Ta2lwTmV3bGluZShzdGF0ZSk7XG4gICAgICBub2RlID0gbmV3IE9wZXJhdG9yTm9kZSgnfCcsICdiaXRPcicsIFtub2RlLCBwYXJzZUJpdHdpc2VYb3Ioc3RhdGUpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgLyoqXG4gICAqIGJpdHdpc2UgZXhjbHVzaXZlIG9yICh4b3IpLCAneCBefCB5J1xuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VCaXR3aXNlWG9yKHN0YXRlKSB7XG4gICAgdmFyIG5vZGUgPSBwYXJzZUJpdHdpc2VBbmQoc3RhdGUpO1xuXG4gICAgd2hpbGUgKHN0YXRlLnRva2VuID09PSAnXnwnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVubW9kaWZpZWQtbG9vcC1jb25kaXRpb25cbiAgICAgIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpO1xuICAgICAgbm9kZSA9IG5ldyBPcGVyYXRvck5vZGUoJ158JywgJ2JpdFhvcicsIFtub2RlLCBwYXJzZUJpdHdpc2VBbmQoc3RhdGUpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgLyoqXG4gICAqIGJpdHdpc2UgYW5kLCAneCAmIHknXG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZUJpdHdpc2VBbmQoc3RhdGUpIHtcbiAgICB2YXIgbm9kZSA9IHBhcnNlUmVsYXRpb25hbChzdGF0ZSk7XG5cbiAgICB3aGlsZSAoc3RhdGUudG9rZW4gPT09ICcmJykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uXG4gICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTtcbiAgICAgIG5vZGUgPSBuZXcgT3BlcmF0b3JOb2RlKCcmJywgJ2JpdEFuZCcsIFtub2RlLCBwYXJzZVJlbGF0aW9uYWwoc3RhdGUpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlIGEgY2hhaW5lZCBjb25kaXRpb25hbCwgbGlrZSAnYSA+IGIgPj0gYydcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlUmVsYXRpb25hbChzdGF0ZSkge1xuICAgIHZhciBwYXJhbXMgPSBbcGFyc2VTaGlmdChzdGF0ZSldO1xuICAgIHZhciBjb25kaXRpb25hbHMgPSBbXTtcbiAgICB2YXIgb3BlcmF0b3JzID0ge1xuICAgICAgJz09JzogJ2VxdWFsJyxcbiAgICAgICchPSc6ICd1bmVxdWFsJyxcbiAgICAgICc8JzogJ3NtYWxsZXInLFxuICAgICAgJz4nOiAnbGFyZ2VyJyxcbiAgICAgICc8PSc6ICdzbWFsbGVyRXEnLFxuICAgICAgJz49JzogJ2xhcmdlckVxJ1xuICAgIH07XG5cbiAgICB3aGlsZSAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKG9wZXJhdG9ycywgc3RhdGUudG9rZW4pKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVubW9kaWZpZWQtbG9vcC1jb25kaXRpb25cbiAgICAgIHZhciBjb25kID0ge1xuICAgICAgICBuYW1lOiBzdGF0ZS50b2tlbixcbiAgICAgICAgZm46IG9wZXJhdG9yc1tzdGF0ZS50b2tlbl1cbiAgICAgIH07XG4gICAgICBjb25kaXRpb25hbHMucHVzaChjb25kKTtcbiAgICAgIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpO1xuICAgICAgcGFyYW1zLnB1c2gocGFyc2VTaGlmdChzdGF0ZSkpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMubGVuZ3RoID09PSAxKSB7XG4gICAgICByZXR1cm4gcGFyYW1zWzBdO1xuICAgIH0gZWxzZSBpZiAocGFyYW1zLmxlbmd0aCA9PT0gMikge1xuICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUoY29uZGl0aW9uYWxzWzBdLm5hbWUsIGNvbmRpdGlvbmFsc1swXS5mbiwgcGFyYW1zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBSZWxhdGlvbmFsTm9kZShjb25kaXRpb25hbHMubWFwKGZ1bmN0aW9uIChjKSB7XG4gICAgICAgIHJldHVybiBjLmZuO1xuICAgICAgfSksIHBhcmFtcyk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBCaXR3aXNlIGxlZnQgc2hpZnQsIGJpdHdpc2UgcmlnaHQgYXJpdGhtZXRpYyBzaGlmdCwgYml0d2lzZSByaWdodCBsb2dpY2FsIHNoaWZ0XG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZVNoaWZ0KHN0YXRlKSB7XG4gICAgdmFyIG5vZGUsIG5hbWUsIGZuLCBwYXJhbXM7XG4gICAgbm9kZSA9IHBhcnNlQ29udmVyc2lvbihzdGF0ZSk7XG4gICAgdmFyIG9wZXJhdG9ycyA9IHtcbiAgICAgICc8PCc6ICdsZWZ0U2hpZnQnLFxuICAgICAgJz4+JzogJ3JpZ2h0QXJpdGhTaGlmdCcsXG4gICAgICAnPj4+JzogJ3JpZ2h0TG9nU2hpZnQnXG4gICAgfTtcblxuICAgIHdoaWxlICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkob3BlcmF0b3JzLCBzdGF0ZS50b2tlbikpIHtcbiAgICAgIG5hbWUgPSBzdGF0ZS50b2tlbjtcbiAgICAgIGZuID0gb3BlcmF0b3JzW25hbWVdO1xuICAgICAgZ2V0VG9rZW5Ta2lwTmV3bGluZShzdGF0ZSk7XG4gICAgICBwYXJhbXMgPSBbbm9kZSwgcGFyc2VDb252ZXJzaW9uKHN0YXRlKV07XG4gICAgICBub2RlID0gbmV3IE9wZXJhdG9yTm9kZShuYW1lLCBmbiwgcGFyYW1zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICAvKipcbiAgICogY29udmVyc2lvbiBvcGVyYXRvcnMgJ3RvJyBhbmQgJ2luJ1xuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VDb252ZXJzaW9uKHN0YXRlKSB7XG4gICAgdmFyIG5vZGUsIG5hbWUsIGZuLCBwYXJhbXM7XG4gICAgbm9kZSA9IHBhcnNlUmFuZ2Uoc3RhdGUpO1xuICAgIHZhciBvcGVyYXRvcnMgPSB7XG4gICAgICB0bzogJ3RvJyxcbiAgICAgIFwiaW5cIjogJ3RvJyAvLyBhbGlhcyBvZiAndG8nXG5cbiAgICB9O1xuXG4gICAgd2hpbGUgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShvcGVyYXRvcnMsIHN0YXRlLnRva2VuKSkge1xuICAgICAgbmFtZSA9IHN0YXRlLnRva2VuO1xuICAgICAgZm4gPSBvcGVyYXRvcnNbbmFtZV07XG4gICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTtcblxuICAgICAgaWYgKG5hbWUgPT09ICdpbicgJiYgc3RhdGUudG9rZW4gPT09ICcnKSB7XG4gICAgICAgIC8vIGVuZCBvZiBleHByZXNzaW9uIC0+IHRoaXMgaXMgdGhlIHVuaXQgJ2luJyAoJ2luY2gnKVxuICAgICAgICBub2RlID0gbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFtub2RlLCBuZXcgU3ltYm9sTm9kZSgnaW4nKV0sIHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gb3BlcmF0b3IgJ2EgdG8gYicgb3IgJ2EgaW4gYidcbiAgICAgICAgcGFyYW1zID0gW25vZGUsIHBhcnNlUmFuZ2Uoc3RhdGUpXTtcbiAgICAgICAgbm9kZSA9IG5ldyBPcGVyYXRvck5vZGUobmFtZSwgZm4sIHBhcmFtcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgLyoqXG4gICAqIHBhcnNlIHJhbmdlLCBcInN0YXJ0OmVuZFwiLCBcInN0YXJ0OnN0ZXA6ZW5kXCIsIFwiOlwiLCBcInN0YXJ0OlwiLCBcIjplbmRcIiwgZXRjXG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZVJhbmdlKHN0YXRlKSB7XG4gICAgdmFyIG5vZGU7XG4gICAgdmFyIHBhcmFtcyA9IFtdO1xuXG4gICAgaWYgKHN0YXRlLnRva2VuID09PSAnOicpIHtcbiAgICAgIC8vIGltcGxpY2l0IHN0YXJ0PTEgKG9uZS1iYXNlZClcbiAgICAgIG5vZGUgPSBuZXcgQ29uc3RhbnROb2RlKDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBleHBsaWNpdCBzdGFydFxuICAgICAgbm9kZSA9IHBhcnNlQWRkU3VidHJhY3Qoc3RhdGUpO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZS50b2tlbiA9PT0gJzonICYmIHN0YXRlLmNvbmRpdGlvbmFsTGV2ZWwgIT09IHN0YXRlLm5lc3RpbmdMZXZlbCkge1xuICAgICAgLy8gd2UgaWdub3JlIHRoZSByYW5nZSBvcGVyYXRvciB3aGVuIGEgY29uZGl0aW9uYWwgb3BlcmF0b3IgaXMgYmVpbmcgcHJvY2Vzc2VkIG9uIHRoZSBzYW1lIGxldmVsXG4gICAgICBwYXJhbXMucHVzaChub2RlKTsgLy8gcGFyc2Ugc3RlcCBhbmQgZW5kXG5cbiAgICAgIHdoaWxlIChzdGF0ZS50b2tlbiA9PT0gJzonICYmIHBhcmFtcy5sZW5ndGggPCAzKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvblxuICAgICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTtcblxuICAgICAgICBpZiAoc3RhdGUudG9rZW4gPT09ICcpJyB8fCBzdGF0ZS50b2tlbiA9PT0gJ10nIHx8IHN0YXRlLnRva2VuID09PSAnLCcgfHwgc3RhdGUudG9rZW4gPT09ICcnKSB7XG4gICAgICAgICAgLy8gaW1wbGljaXQgZW5kXG4gICAgICAgICAgcGFyYW1zLnB1c2gobmV3IFN5bWJvbE5vZGUoJ2VuZCcpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBleHBsaWNpdCBlbmRcbiAgICAgICAgICBwYXJhbXMucHVzaChwYXJzZUFkZFN1YnRyYWN0KHN0YXRlKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHBhcmFtcy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgLy8gcGFyYW1zID0gW3N0YXJ0LCBzdGVwLCBlbmRdXG4gICAgICAgIG5vZGUgPSBuZXcgUmFuZ2VOb2RlKHBhcmFtc1swXSwgcGFyYW1zWzJdLCBwYXJhbXNbMV0pOyAvLyBzdGFydCwgZW5kLCBzdGVwXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBsZW5ndGggPT09IDJcbiAgICAgICAgLy8gcGFyYW1zID0gW3N0YXJ0LCBlbmRdXG4gICAgICAgIG5vZGUgPSBuZXcgUmFuZ2VOb2RlKHBhcmFtc1swXSwgcGFyYW1zWzFdKTsgLy8gc3RhcnQsIGVuZFxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG4gIC8qKlxuICAgKiBhZGQgb3Igc3VidHJhY3RcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlQWRkU3VidHJhY3Qoc3RhdGUpIHtcbiAgICB2YXIgbm9kZSwgbmFtZSwgZm4sIHBhcmFtcztcbiAgICBub2RlID0gcGFyc2VNdWx0aXBseURpdmlkZShzdGF0ZSk7XG4gICAgdmFyIG9wZXJhdG9ycyA9IHtcbiAgICAgICcrJzogJ2FkZCcsXG4gICAgICAnLSc6ICdzdWJ0cmFjdCdcbiAgICB9O1xuXG4gICAgd2hpbGUgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShvcGVyYXRvcnMsIHN0YXRlLnRva2VuKSkge1xuICAgICAgbmFtZSA9IHN0YXRlLnRva2VuO1xuICAgICAgZm4gPSBvcGVyYXRvcnNbbmFtZV07XG4gICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTtcbiAgICAgIHBhcmFtcyA9IFtub2RlLCBwYXJzZU11bHRpcGx5RGl2aWRlKHN0YXRlKV07XG4gICAgICBub2RlID0gbmV3IE9wZXJhdG9yTm9kZShuYW1lLCBmbiwgcGFyYW1zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICAvKipcbiAgICogbXVsdGlwbHksIGRpdmlkZSwgbW9kdWx1c1xuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VNdWx0aXBseURpdmlkZShzdGF0ZSkge1xuICAgIHZhciBub2RlLCBsYXN0LCBuYW1lLCBmbjtcbiAgICBub2RlID0gcGFyc2VJbXBsaWNpdE11bHRpcGxpY2F0aW9uKHN0YXRlKTtcbiAgICBsYXN0ID0gbm9kZTtcbiAgICB2YXIgb3BlcmF0b3JzID0ge1xuICAgICAgJyonOiAnbXVsdGlwbHknLFxuICAgICAgJy4qJzogJ2RvdE11bHRpcGx5JyxcbiAgICAgICcvJzogJ2RpdmlkZScsXG4gICAgICAnLi8nOiAnZG90RGl2aWRlJyxcbiAgICAgICclJzogJ21vZCcsXG4gICAgICBtb2Q6ICdtb2QnXG4gICAgfTtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKG9wZXJhdG9ycywgc3RhdGUudG9rZW4pKSB7XG4gICAgICAgIC8vIGV4cGxpY2l0IG9wZXJhdG9yc1xuICAgICAgICBuYW1lID0gc3RhdGUudG9rZW47XG4gICAgICAgIGZuID0gb3BlcmF0b3JzW25hbWVdO1xuICAgICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTtcbiAgICAgICAgbGFzdCA9IHBhcnNlSW1wbGljaXRNdWx0aXBsaWNhdGlvbihzdGF0ZSk7XG4gICAgICAgIG5vZGUgPSBuZXcgT3BlcmF0b3JOb2RlKG5hbWUsIGZuLCBbbm9kZSwgbGFzdF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgLyoqXG4gICAqIGltcGxpY2l0IG11bHRpcGxpY2F0aW9uXG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZUltcGxpY2l0TXVsdGlwbGljYXRpb24oc3RhdGUpIHtcbiAgICB2YXIgbm9kZSwgbGFzdDtcbiAgICBub2RlID0gcGFyc2VSdWxlMihzdGF0ZSk7XG4gICAgbGFzdCA9IG5vZGU7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKHN0YXRlLnRva2VuVHlwZSA9PT0gVE9LRU5UWVBFLlNZTUJPTCB8fCBzdGF0ZS50b2tlbiA9PT0gJ2luJyAmJiAoMCwgX2lzLmlzQ29uc3RhbnROb2RlKShub2RlKSB8fCBzdGF0ZS50b2tlblR5cGUgPT09IFRPS0VOVFlQRS5OVU1CRVIgJiYgISgwLCBfaXMuaXNDb25zdGFudE5vZGUpKGxhc3QpICYmICghKDAsIF9pcy5pc09wZXJhdG9yTm9kZSkobGFzdCkgfHwgbGFzdC5vcCA9PT0gJyEnKSB8fCBzdGF0ZS50b2tlbiA9PT0gJygnKSB7XG4gICAgICAgIC8vIHBhcnNlIGltcGxpY2l0IG11bHRpcGxpY2F0aW9uXG4gICAgICAgIC8vXG4gICAgICAgIC8vIHN5bWJvbDogICAgICBpbXBsaWNpdCBtdWx0aXBsaWNhdGlvbiBsaWtlICcyYScsICcoMiszKWEnLCAnYSBiJ1xuICAgICAgICAvLyBudW1iZXI6ICAgICAgaW1wbGljaXQgbXVsdGlwbGljYXRpb24gbGlrZSAnKDIrMykyJ1xuICAgICAgICAvLyBwYXJlbnRoZXNpczogaW1wbGljaXQgbXVsdGlwbGljYXRpb24gbGlrZSAnMigzKzQpJywgJygzKzQpKDErMiknXG4gICAgICAgIGxhc3QgPSBwYXJzZVJ1bGUyKHN0YXRlKTtcbiAgICAgICAgbm9kZSA9IG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbbm9kZSwgbGFzdF0sIHRydWVcbiAgICAgICAgLyogaW1wbGljaXQgKi9cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG4gIC8qKlxuICAgKiBJbmZhbW91cyBcInJ1bGUgMlwiIGFzIGRlc2NyaWJlZCBpbiBodHRwczovL2dpdGh1Yi5jb20vam9zZGVqb25nL21hdGhqcy9pc3N1ZXMvNzkyI2lzc3VlY29tbWVudC0zNjEwNjUzNzBcbiAgICogRXhwbGljaXQgZGl2aXNpb24gZ2V0cyBoaWdoZXIgcHJlY2VkZW5jZSB0aGFuIGltcGxpY2l0IG11bHRpcGxpY2F0aW9uXG4gICAqIHdoZW4gdGhlIGRpdmlzaW9uIG1hdGNoZXMgdGhpcyBwYXR0ZXJuOiBbbnVtYmVyXSAvIFtudW1iZXJdIFtzeW1ib2xdXG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZVJ1bGUyKHN0YXRlKSB7XG4gICAgdmFyIG5vZGUgPSBwYXJzZVVuYXJ5KHN0YXRlKTtcbiAgICB2YXIgbGFzdCA9IG5vZGU7XG4gICAgdmFyIHRva2VuU3RhdGVzID0gW107XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgLy8gTWF0Y2ggdGhlIFwibnVtYmVyIC9cIiBwYXJ0IG9mIHRoZSBwYXR0ZXJuIFwibnVtYmVyIC8gbnVtYmVyIHN5bWJvbFwiXG4gICAgICBpZiAoc3RhdGUudG9rZW4gPT09ICcvJyAmJiAoMCwgX2lzLmlzQ29uc3RhbnROb2RlKShsYXN0KSkge1xuICAgICAgICAvLyBMb29rIGFoZWFkIHRvIHNlZSBpZiB0aGUgbmV4dCB0b2tlbiBpcyBhIG51bWJlclxuICAgICAgICB0b2tlblN0YXRlcy5wdXNoKF9leHRlbmRzKHt9LCBzdGF0ZSkpO1xuICAgICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTsgLy8gTWF0Y2ggdGhlIFwibnVtYmVyIC8gbnVtYmVyXCIgcGFydCBvZiB0aGUgcGF0dGVyblxuXG4gICAgICAgIGlmIChzdGF0ZS50b2tlblR5cGUgPT09IFRPS0VOVFlQRS5OVU1CRVIpIHtcbiAgICAgICAgICAvLyBMb29rIGFoZWFkIGFnYWluXG4gICAgICAgICAgdG9rZW5TdGF0ZXMucHVzaChfZXh0ZW5kcyh7fSwgc3RhdGUpKTtcbiAgICAgICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTsgLy8gTWF0Y2ggdGhlIFwic3ltYm9sXCIgcGFydCBvZiB0aGUgcGF0dGVybiwgb3IgYSBsZWZ0IHBhcmVudGhlc2lzXG5cbiAgICAgICAgICBpZiAoc3RhdGUudG9rZW5UeXBlID09PSBUT0tFTlRZUEUuU1lNQk9MIHx8IHN0YXRlLnRva2VuID09PSAnKCcpIHtcbiAgICAgICAgICAgIC8vIFdlJ3ZlIG1hdGNoZWQgdGhlIHBhdHRlcm4gXCJudW1iZXIgLyBudW1iZXIgc3ltYm9sXCIuXG4gICAgICAgICAgICAvLyBSZXdpbmQgb25jZSBhbmQgYnVpbGQgdGhlIFwibnVtYmVyIC8gbnVtYmVyXCIgbm9kZTsgdGhlIHN5bWJvbCB3aWxsIGJlIGNvbnN1bWVkIGxhdGVyXG4gICAgICAgICAgICBfZXh0ZW5kcyhzdGF0ZSwgdG9rZW5TdGF0ZXMucG9wKCkpO1xuXG4gICAgICAgICAgICB0b2tlblN0YXRlcy5wb3AoKTtcbiAgICAgICAgICAgIGxhc3QgPSBwYXJzZVVuYXJ5KHN0YXRlKTtcbiAgICAgICAgICAgIG5vZGUgPSBuZXcgT3BlcmF0b3JOb2RlKCcvJywgJ2RpdmlkZScsIFtub2RlLCBsYXN0XSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE5vdCBhIG1hdGNoLCBzbyByZXdpbmRcbiAgICAgICAgICAgIHRva2VuU3RhdGVzLnBvcCgpO1xuXG4gICAgICAgICAgICBfZXh0ZW5kcyhzdGF0ZSwgdG9rZW5TdGF0ZXMucG9wKCkpO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gTm90IGEgbWF0Y2gsIHNvIHJld2luZFxuICAgICAgICAgIF9leHRlbmRzKHN0YXRlLCB0b2tlblN0YXRlcy5wb3AoKSk7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgLyoqXG4gICAqIFVuYXJ5IHBsdXMgYW5kIG1pbnVzLCBhbmQgbG9naWNhbCBhbmQgYml0d2lzZSBub3RcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlVW5hcnkoc3RhdGUpIHtcbiAgICB2YXIgbmFtZSwgcGFyYW1zLCBmbjtcbiAgICB2YXIgb3BlcmF0b3JzID0ge1xuICAgICAgJy0nOiAndW5hcnlNaW51cycsXG4gICAgICAnKyc6ICd1bmFyeVBsdXMnLFxuICAgICAgJ34nOiAnYml0Tm90JyxcbiAgICAgIG5vdDogJ25vdCdcbiAgICB9O1xuXG4gICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShvcGVyYXRvcnMsIHN0YXRlLnRva2VuKSkge1xuICAgICAgZm4gPSBvcGVyYXRvcnNbc3RhdGUudG9rZW5dO1xuICAgICAgbmFtZSA9IHN0YXRlLnRva2VuO1xuICAgICAgZ2V0VG9rZW5Ta2lwTmV3bGluZShzdGF0ZSk7XG4gICAgICBwYXJhbXMgPSBbcGFyc2VVbmFyeShzdGF0ZSldO1xuICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUobmFtZSwgZm4sIHBhcmFtcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlUG93KHN0YXRlKTtcbiAgfVxuICAvKipcbiAgICogcG93ZXJcbiAgICogTm90ZTogcG93ZXIgb3BlcmF0b3IgaXMgcmlnaHQgYXNzb2NpYXRpdmVcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlUG93KHN0YXRlKSB7XG4gICAgdmFyIG5vZGUsIG5hbWUsIGZuLCBwYXJhbXM7XG4gICAgbm9kZSA9IHBhcnNlTGVmdEhhbmRPcGVyYXRvcnMoc3RhdGUpO1xuXG4gICAgaWYgKHN0YXRlLnRva2VuID09PSAnXicgfHwgc3RhdGUudG9rZW4gPT09ICcuXicpIHtcbiAgICAgIG5hbWUgPSBzdGF0ZS50b2tlbjtcbiAgICAgIGZuID0gbmFtZSA9PT0gJ14nID8gJ3BvdycgOiAnZG90UG93JztcbiAgICAgIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpO1xuICAgICAgcGFyYW1zID0gW25vZGUsIHBhcnNlVW5hcnkoc3RhdGUpXTsgLy8gR28gYmFjayB0byB1bmFyeSwgd2UgY2FuIGhhdmUgJzJeLTMnXG5cbiAgICAgIG5vZGUgPSBuZXcgT3BlcmF0b3JOb2RlKG5hbWUsIGZuLCBwYXJhbXMpO1xuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG4gIC8qKlxuICAgKiBMZWZ0IGhhbmQgb3BlcmF0b3JzOiBmYWN0b3JpYWwgeCEsIGN0cmFuc3Bvc2UgeCdcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlTGVmdEhhbmRPcGVyYXRvcnMoc3RhdGUpIHtcbiAgICB2YXIgbm9kZSwgbmFtZSwgZm4sIHBhcmFtcztcbiAgICBub2RlID0gcGFyc2VDdXN0b21Ob2RlcyhzdGF0ZSk7XG4gICAgdmFyIG9wZXJhdG9ycyA9IHtcbiAgICAgICchJzogJ2ZhY3RvcmlhbCcsXG4gICAgICAnXFwnJzogJ2N0cmFuc3Bvc2UnXG4gICAgfTtcblxuICAgIHdoaWxlICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkob3BlcmF0b3JzLCBzdGF0ZS50b2tlbikpIHtcbiAgICAgIG5hbWUgPSBzdGF0ZS50b2tlbjtcbiAgICAgIGZuID0gb3BlcmF0b3JzW25hbWVdO1xuICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgICAgcGFyYW1zID0gW25vZGVdO1xuICAgICAgbm9kZSA9IG5ldyBPcGVyYXRvck5vZGUobmFtZSwgZm4sIHBhcmFtcyk7XG4gICAgICBub2RlID0gcGFyc2VBY2Nlc3NvcnMoc3RhdGUsIG5vZGUpO1xuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZSBhIGN1c3RvbSBub2RlIGhhbmRsZXIuIEEgbm9kZSBoYW5kbGVyIGNhbiBiZSB1c2VkIHRvIHByb2Nlc3NcbiAgICogbm9kZXMgaW4gYSBjdXN0b20gd2F5LCBmb3IgZXhhbXBsZSBmb3IgaGFuZGxpbmcgYSBwbG90LlxuICAgKlxuICAgKiBBIGhhbmRsZXIgbXVzdCBiZSBwYXNzZWQgYXMgc2Vjb25kIGFyZ3VtZW50IG9mIHRoZSBwYXJzZSBmdW5jdGlvbi5cbiAgICogLSBtdXN0IGV4dGVuZCBtYXRoLmV4cHJlc3Npb24ubm9kZS5Ob2RlXG4gICAqIC0gbXVzdCBjb250YWluIGEgZnVuY3Rpb24gX2NvbXBpbGUoZGVmczogT2JqZWN0KSA6IHN0cmluZ1xuICAgKiAtIG11c3QgY29udGFpbiBhIGZ1bmN0aW9uIGZpbmQoZmlsdGVyOiBPYmplY3QpIDogTm9kZVtdXG4gICAqIC0gbXVzdCBjb250YWluIGEgZnVuY3Rpb24gdG9TdHJpbmcoKSA6IHN0cmluZ1xuICAgKiAtIHRoZSBjb25zdHJ1Y3RvciBpcyBjYWxsZWQgd2l0aCBhIHNpbmdsZSBhcmd1bWVudCBjb250YWluaW5nIGFsbCBwYXJhbWV0ZXJzXG4gICAqXG4gICAqIEZvciBleGFtcGxlOlxuICAgKlxuICAgKiAgICAgbm9kZXMgPSB7XG4gICAqICAgICAgICdwbG90JzogUGxvdEhhbmRsZXJcbiAgICogICAgIH1cbiAgICpcbiAgICogVGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBoYW5kbGVyIGlzIGNhbGxlZCBhczpcbiAgICpcbiAgICogICAgIG5vZGUgPSBuZXcgUGxvdEhhbmRsZXIocGFyYW1zKVxuICAgKlxuICAgKiBUaGUgaGFuZGxlciB3aWxsIGJlIGludm9rZWQgd2hlbiBldmFsdWF0aW5nIGFuIGV4cHJlc3Npb24gbGlrZTpcbiAgICpcbiAgICogICAgIG5vZGUgPSBtYXRoLnBhcnNlKCdwbG90KHNpbih4KSwgeCknLCBub2RlcylcbiAgICpcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlQ3VzdG9tTm9kZXMoc3RhdGUpIHtcbiAgICB2YXIgcGFyYW1zID0gW107XG5cbiAgICBpZiAoc3RhdGUudG9rZW5UeXBlID09PSBUT0tFTlRZUEUuU1lNQk9MICYmICgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShzdGF0ZS5leHRyYU5vZGVzLCBzdGF0ZS50b2tlbikpIHtcbiAgICAgIHZhciBDdXN0b21Ob2RlID0gc3RhdGUuZXh0cmFOb2Rlc1tzdGF0ZS50b2tlbl07XG4gICAgICBnZXRUb2tlbihzdGF0ZSk7IC8vIHBhcnNlIHBhcmFtZXRlcnNcblxuICAgICAgaWYgKHN0YXRlLnRva2VuID09PSAnKCcpIHtcbiAgICAgICAgcGFyYW1zID0gW107XG4gICAgICAgIG9wZW5QYXJhbXMoc3RhdGUpO1xuICAgICAgICBnZXRUb2tlbihzdGF0ZSk7XG5cbiAgICAgICAgaWYgKHN0YXRlLnRva2VuICE9PSAnKScpIHtcbiAgICAgICAgICBwYXJhbXMucHVzaChwYXJzZUFzc2lnbm1lbnQoc3RhdGUpKTsgLy8gcGFyc2UgYSBsaXN0IHdpdGggcGFyYW1ldGVyc1xuXG4gICAgICAgICAgd2hpbGUgKHN0YXRlLnRva2VuID09PSAnLCcpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvblxuICAgICAgICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgICAgICAgICAgcGFyYW1zLnB1c2gocGFyc2VBc3NpZ25tZW50KHN0YXRlKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXRlLnRva2VuICE9PSAnKScpIHtcbiAgICAgICAgICB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ1BhcmVudGhlc2lzICkgZXhwZWN0ZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNsb3NlUGFyYW1zKHN0YXRlKTtcbiAgICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgICAgfSAvLyBjcmVhdGUgYSBuZXcgY3VzdG9tIG5vZGVcbiAgICAgIC8vIG5vaW5zcGVjdGlvbiBKU1ZhbGlkYXRlVHlwZXNcblxuXG4gICAgICByZXR1cm4gbmV3IEN1c3RvbU5vZGUocGFyYW1zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VTeW1ib2woc3RhdGUpO1xuICB9XG4gIC8qKlxuICAgKiBwYXJzZSBzeW1ib2xzOiBmdW5jdGlvbnMsIHZhcmlhYmxlcywgY29uc3RhbnRzLCB1bml0c1xuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VTeW1ib2woc3RhdGUpIHtcbiAgICB2YXIgbm9kZSwgbmFtZTtcblxuICAgIGlmIChzdGF0ZS50b2tlblR5cGUgPT09IFRPS0VOVFlQRS5TWU1CT0wgfHwgc3RhdGUudG9rZW5UeXBlID09PSBUT0tFTlRZUEUuREVMSU1JVEVSICYmIHN0YXRlLnRva2VuIGluIE5BTUVEX0RFTElNSVRFUlMpIHtcbiAgICAgIG5hbWUgPSBzdGF0ZS50b2tlbjtcbiAgICAgIGdldFRva2VuKHN0YXRlKTtcblxuICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShDT05TVEFOVFMsIG5hbWUpKSB7XG4gICAgICAgIC8vIHRydWUsIGZhbHNlLCBudWxsLCAuLi5cbiAgICAgICAgbm9kZSA9IG5ldyBDb25zdGFudE5vZGUoQ09OU1RBTlRTW25hbWVdKTtcbiAgICAgIH0gZWxzZSBpZiAoTlVNRVJJQ19DT05TVEFOVFMuaW5kZXhPZihuYW1lKSAhPT0gLTEpIHtcbiAgICAgICAgLy8gTmFOLCBJbmZpbml0eVxuICAgICAgICBub2RlID0gbmV3IENvbnN0YW50Tm9kZShudW1lcmljKG5hbWUsICdudW1iZXInKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlID0gbmV3IFN5bWJvbE5vZGUobmFtZSk7XG4gICAgICB9IC8vIHBhcnNlIGZ1bmN0aW9uIHBhcmFtZXRlcnMgYW5kIG1hdHJpeCBpbmRleFxuXG5cbiAgICAgIG5vZGUgPSBwYXJzZUFjY2Vzc29ycyhzdGF0ZSwgbm9kZSk7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VEb3VibGVRdW90ZXNTdHJpbmcoc3RhdGUpO1xuICB9XG4gIC8qKlxuICAgKiBwYXJzZSBhY2Nlc3NvcnM6XG4gICAqIC0gZnVuY3Rpb24gaW52b2NhdGlvbiBpbiByb3VuZCBicmFja2V0cyAoLi4uKSwgZm9yIGV4YW1wbGUgc3FydCgyKVxuICAgKiAtIGluZGV4IGVuY2xvc2VkIGluIHNxdWFyZSBicmFja2V0cyBbLi4uXSwgZm9yIGV4YW1wbGUgQVsyLDNdXG4gICAqIC0gZG90IG5vdGF0aW9uIGZvciBwcm9wZXJ0aWVzLCBsaWtlIGZvby5iYXJcbiAgICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAgICBOb2RlIG9uIHdoaWNoIHRvIGFwcGx5IHRoZSBwYXJhbWV0ZXJzLiBJZiB0aGVyZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYXJlIG5vIHBhcmFtZXRlcnMgaW4gdGhlIGV4cHJlc3Npb24sIHRoZSBub2RlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICBpdHNlbGYgaXMgcmV0dXJuZWRcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gW3R5cGVzXSAgRmlsdGVyIHRoZSB0eXBlcyBvZiBub3RhdGlvbnNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuIGJlIFsnKCcsICdbJywgJy4nXVxuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VBY2Nlc3NvcnMoc3RhdGUsIG5vZGUsIHR5cGVzKSB7XG4gICAgdmFyIHBhcmFtcztcblxuICAgIHdoaWxlICgoc3RhdGUudG9rZW4gPT09ICcoJyB8fCBzdGF0ZS50b2tlbiA9PT0gJ1snIHx8IHN0YXRlLnRva2VuID09PSAnLicpICYmICghdHlwZXMgfHwgdHlwZXMuaW5kZXhPZihzdGF0ZS50b2tlbikgIT09IC0xKSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uXG4gICAgICBwYXJhbXMgPSBbXTtcblxuICAgICAgaWYgKHN0YXRlLnRva2VuID09PSAnKCcpIHtcbiAgICAgICAgaWYgKCgwLCBfaXMuaXNTeW1ib2xOb2RlKShub2RlKSB8fCAoMCwgX2lzLmlzQWNjZXNzb3JOb2RlKShub2RlKSkge1xuICAgICAgICAgIC8vIGZ1bmN0aW9uIGludm9jYXRpb24gbGlrZSBmbigyLCAzKSBvciBvYmouZm4oMiwgMylcbiAgICAgICAgICBvcGVuUGFyYW1zKHN0YXRlKTtcbiAgICAgICAgICBnZXRUb2tlbihzdGF0ZSk7XG5cbiAgICAgICAgICBpZiAoc3RhdGUudG9rZW4gIT09ICcpJykge1xuICAgICAgICAgICAgcGFyYW1zLnB1c2gocGFyc2VBc3NpZ25tZW50KHN0YXRlKSk7IC8vIHBhcnNlIGEgbGlzdCB3aXRoIHBhcmFtZXRlcnNcblxuICAgICAgICAgICAgd2hpbGUgKHN0YXRlLnRva2VuID09PSAnLCcpIHtcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uXG4gICAgICAgICAgICAgIGdldFRva2VuKHN0YXRlKTtcbiAgICAgICAgICAgICAgcGFyYW1zLnB1c2gocGFyc2VBc3NpZ25tZW50KHN0YXRlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHN0YXRlLnRva2VuICE9PSAnKScpIHtcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnUGFyZW50aGVzaXMgKSBleHBlY3RlZCcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNsb3NlUGFyYW1zKHN0YXRlKTtcbiAgICAgICAgICBnZXRUb2tlbihzdGF0ZSk7XG4gICAgICAgICAgbm9kZSA9IG5ldyBGdW5jdGlvbk5vZGUobm9kZSwgcGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBpbXBsaWNpdCBtdWx0aXBsaWNhdGlvbiBsaWtlICgyKzMpKDQrNSkgb3Igc3FydCgyKSgxKzIpXG4gICAgICAgICAgLy8gZG9uJ3QgcGFyc2UgaXQgaGVyZSBidXQgbGV0IGl0IGJlIGhhbmRsZWQgYnkgcGFyc2VJbXBsaWNpdE11bHRpcGxpY2F0aW9uXG4gICAgICAgICAgLy8gd2l0aCBjb3JyZWN0IHByZWNlZGVuY2VcbiAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzdGF0ZS50b2tlbiA9PT0gJ1snKSB7XG4gICAgICAgIC8vIGluZGV4IG5vdGF0aW9uIGxpa2UgdmFyaWFibGVbMiwgM11cbiAgICAgICAgb3BlblBhcmFtcyhzdGF0ZSk7XG4gICAgICAgIGdldFRva2VuKHN0YXRlKTtcblxuICAgICAgICBpZiAoc3RhdGUudG9rZW4gIT09ICddJykge1xuICAgICAgICAgIHBhcmFtcy5wdXNoKHBhcnNlQXNzaWdubWVudChzdGF0ZSkpOyAvLyBwYXJzZSBhIGxpc3Qgd2l0aCBwYXJhbWV0ZXJzXG5cbiAgICAgICAgICB3aGlsZSAoc3RhdGUudG9rZW4gPT09ICcsJykge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uXG4gICAgICAgICAgICBnZXRUb2tlbihzdGF0ZSk7XG4gICAgICAgICAgICBwYXJhbXMucHVzaChwYXJzZUFzc2lnbm1lbnQoc3RhdGUpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdGUudG9rZW4gIT09ICddJykge1xuICAgICAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnUGFyZW50aGVzaXMgXSBleHBlY3RlZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2xvc2VQYXJhbXMoc3RhdGUpO1xuICAgICAgICBnZXRUb2tlbihzdGF0ZSk7XG4gICAgICAgIG5vZGUgPSBuZXcgQWNjZXNzb3JOb2RlKG5vZGUsIG5ldyBJbmRleE5vZGUocGFyYW1zKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBkb3Qgbm90YXRpb24gbGlrZSB2YXJpYWJsZS5wcm9wXG4gICAgICAgIGdldFRva2VuKHN0YXRlKTtcblxuICAgICAgICBpZiAoc3RhdGUudG9rZW5UeXBlICE9PSBUT0tFTlRZUEUuU1lNQk9MKSB7XG4gICAgICAgICAgdGhyb3cgY3JlYXRlU3ludGF4RXJyb3Ioc3RhdGUsICdQcm9wZXJ0eSBuYW1lIGV4cGVjdGVkIGFmdGVyIGRvdCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgcGFyYW1zLnB1c2gobmV3IENvbnN0YW50Tm9kZShzdGF0ZS50b2tlbikpO1xuICAgICAgICBnZXRUb2tlbihzdGF0ZSk7XG4gICAgICAgIHZhciBkb3ROb3RhdGlvbiA9IHRydWU7XG4gICAgICAgIG5vZGUgPSBuZXcgQWNjZXNzb3JOb2RlKG5vZGUsIG5ldyBJbmRleE5vZGUocGFyYW1zLCBkb3ROb3RhdGlvbikpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZSBhIGRvdWJsZSBxdW90ZXMgc3RyaW5nLlxuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VEb3VibGVRdW90ZXNTdHJpbmcoc3RhdGUpIHtcbiAgICB2YXIgbm9kZSwgc3RyO1xuXG4gICAgaWYgKHN0YXRlLnRva2VuID09PSAnXCInKSB7XG4gICAgICBzdHIgPSBwYXJzZURvdWJsZVF1b3Rlc1N0cmluZ1Rva2VuKHN0YXRlKTsgLy8gY3JlYXRlIGNvbnN0YW50XG5cbiAgICAgIG5vZGUgPSBuZXcgQ29uc3RhbnROb2RlKHN0cik7IC8vIHBhcnNlIGluZGV4IHBhcmFtZXRlcnNcblxuICAgICAgbm9kZSA9IHBhcnNlQWNjZXNzb3JzKHN0YXRlLCBub2RlKTtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZVNpbmdsZVF1b3Rlc1N0cmluZyhzdGF0ZSk7XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlIGEgc3RyaW5nIHN1cnJvdW5kZWQgYnkgZG91YmxlIHF1b3RlcyBcIi4uLlwiXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZURvdWJsZVF1b3Rlc1N0cmluZ1Rva2VuKHN0YXRlKSB7XG4gICAgdmFyIHN0ciA9ICcnO1xuXG4gICAgd2hpbGUgKGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpICE9PSAnJyAmJiBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSAhPT0gJ1wiJykge1xuICAgICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpID09PSAnXFxcXCcpIHtcbiAgICAgICAgLy8gZXNjYXBlIGNoYXJhY3RlciwgaW1tZWRpYXRlbHkgcHJvY2VzcyB0aGUgbmV4dFxuICAgICAgICAvLyBjaGFyYWN0ZXIgdG8gcHJldmVudCBzdG9wcGluZyBhdCBhIG5leHQgJ1xcXCInXG4gICAgICAgIHN0ciArPSBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKTtcbiAgICAgICAgbmV4dChzdGF0ZSk7XG4gICAgICB9XG5cbiAgICAgIHN0ciArPSBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKTtcbiAgICAgIG5leHQoc3RhdGUpO1xuICAgIH1cblxuICAgIGdldFRva2VuKHN0YXRlKTtcblxuICAgIGlmIChzdGF0ZS50b2tlbiAhPT0gJ1wiJykge1xuICAgICAgdGhyb3cgY3JlYXRlU3ludGF4RXJyb3Ioc3RhdGUsICdFbmQgb2Ygc3RyaW5nIFwiIGV4cGVjdGVkJyk7XG4gICAgfVxuXG4gICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgIHJldHVybiBKU09OLnBhcnNlKCdcIicgKyBzdHIgKyAnXCInKTsgLy8gdW5lc2NhcGUgZXNjYXBlZCBjaGFyYWN0ZXJzXG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlIGEgc2luZ2xlIHF1b3RlcyBzdHJpbmcuXG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZVNpbmdsZVF1b3Rlc1N0cmluZyhzdGF0ZSkge1xuICAgIHZhciBub2RlLCBzdHI7XG5cbiAgICBpZiAoc3RhdGUudG9rZW4gPT09ICdcXCcnKSB7XG4gICAgICBzdHIgPSBwYXJzZVNpbmdsZVF1b3Rlc1N0cmluZ1Rva2VuKHN0YXRlKTsgLy8gY3JlYXRlIGNvbnN0YW50XG5cbiAgICAgIG5vZGUgPSBuZXcgQ29uc3RhbnROb2RlKHN0cik7IC8vIHBhcnNlIGluZGV4IHBhcmFtZXRlcnNcblxuICAgICAgbm9kZSA9IHBhcnNlQWNjZXNzb3JzKHN0YXRlLCBub2RlKTtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZU1hdHJpeChzdGF0ZSk7XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlIGEgc3RyaW5nIHN1cnJvdW5kZWQgYnkgc2luZ2xlIHF1b3RlcyAnLi4uJ1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VTaW5nbGVRdW90ZXNTdHJpbmdUb2tlbihzdGF0ZSkge1xuICAgIHZhciBzdHIgPSAnJztcblxuICAgIHdoaWxlIChjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSAhPT0gJycgJiYgY3VycmVudENoYXJhY3RlcihzdGF0ZSkgIT09ICdcXCcnKSB7XG4gICAgICBpZiAoY3VycmVudENoYXJhY3RlcihzdGF0ZSkgPT09ICdcXFxcJykge1xuICAgICAgICAvLyBlc2NhcGUgY2hhcmFjdGVyLCBpbW1lZGlhdGVseSBwcm9jZXNzIHRoZSBuZXh0XG4gICAgICAgIC8vIGNoYXJhY3RlciB0byBwcmV2ZW50IHN0b3BwaW5nIGF0IGEgbmV4dCAnXFwnJ1xuICAgICAgICBzdHIgKz0gY3VycmVudENoYXJhY3RlcihzdGF0ZSk7XG4gICAgICAgIG5leHQoc3RhdGUpO1xuICAgICAgfVxuXG4gICAgICBzdHIgKz0gY3VycmVudENoYXJhY3RlcihzdGF0ZSk7XG4gICAgICBuZXh0KHN0YXRlKTtcbiAgICB9XG5cbiAgICBnZXRUb2tlbihzdGF0ZSk7XG5cbiAgICBpZiAoc3RhdGUudG9rZW4gIT09ICdcXCcnKSB7XG4gICAgICB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ0VuZCBvZiBzdHJpbmcgXFwnIGV4cGVjdGVkJyk7XG4gICAgfVxuXG4gICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgIHJldHVybiBKU09OLnBhcnNlKCdcIicgKyBzdHIgKyAnXCInKTsgLy8gdW5lc2NhcGUgZXNjYXBlZCBjaGFyYWN0ZXJzXG4gIH1cbiAgLyoqXG4gICAqIHBhcnNlIHRoZSBtYXRyaXhcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlTWF0cml4KHN0YXRlKSB7XG4gICAgdmFyIGFycmF5LCBwYXJhbXMsIHJvd3MsIGNvbHM7XG5cbiAgICBpZiAoc3RhdGUudG9rZW4gPT09ICdbJykge1xuICAgICAgLy8gbWF0cml4IFsuLi5dXG4gICAgICBvcGVuUGFyYW1zKHN0YXRlKTtcbiAgICAgIGdldFRva2VuKHN0YXRlKTtcblxuICAgICAgaWYgKHN0YXRlLnRva2VuICE9PSAnXScpIHtcbiAgICAgICAgLy8gdGhpcyBpcyBhIG5vbi1lbXB0eSBtYXRyaXhcbiAgICAgICAgdmFyIHJvdyA9IHBhcnNlUm93KHN0YXRlKTtcblxuICAgICAgICBpZiAoc3RhdGUudG9rZW4gPT09ICc7Jykge1xuICAgICAgICAgIC8vIDIgZGltZW5zaW9uYWwgYXJyYXlcbiAgICAgICAgICByb3dzID0gMTtcbiAgICAgICAgICBwYXJhbXMgPSBbcm93XTsgLy8gdGhlIHJvd3Mgb2YgdGhlIG1hdHJpeCBhcmUgc2VwYXJhdGVkIGJ5IGRvdC1jb21tYSdzXG5cbiAgICAgICAgICB3aGlsZSAoc3RhdGUudG9rZW4gPT09ICc7Jykge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uXG4gICAgICAgICAgICBnZXRUb2tlbihzdGF0ZSk7XG4gICAgICAgICAgICBwYXJhbXNbcm93c10gPSBwYXJzZVJvdyhzdGF0ZSk7XG4gICAgICAgICAgICByb3dzKys7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHN0YXRlLnRva2VuICE9PSAnXScpIHtcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnRW5kIG9mIG1hdHJpeCBdIGV4cGVjdGVkJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2xvc2VQYXJhbXMoc3RhdGUpO1xuICAgICAgICAgIGdldFRva2VuKHN0YXRlKTsgLy8gY2hlY2sgaWYgdGhlIG51bWJlciBvZiBjb2x1bW5zIG1hdGNoZXMgaW4gYWxsIHJvd3NcblxuICAgICAgICAgIGNvbHMgPSBwYXJhbXNbMF0uaXRlbXMubGVuZ3RoO1xuXG4gICAgICAgICAgZm9yICh2YXIgciA9IDE7IHIgPCByb3dzOyByKyspIHtcbiAgICAgICAgICAgIGlmIChwYXJhbXNbcl0uaXRlbXMubGVuZ3RoICE9PSBjb2xzKSB7XG4gICAgICAgICAgICAgIHRocm93IGNyZWF0ZUVycm9yKHN0YXRlLCAnQ29sdW1uIGRpbWVuc2lvbnMgbWlzbWF0Y2ggJyArICcoJyArIHBhcmFtc1tyXS5pdGVtcy5sZW5ndGggKyAnICE9PSAnICsgY29scyArICcpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYXJyYXkgPSBuZXcgQXJyYXlOb2RlKHBhcmFtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gMSBkaW1lbnNpb25hbCB2ZWN0b3JcbiAgICAgICAgICBpZiAoc3RhdGUudG9rZW4gIT09ICddJykge1xuICAgICAgICAgICAgdGhyb3cgY3JlYXRlU3ludGF4RXJyb3Ioc3RhdGUsICdFbmQgb2YgbWF0cml4IF0gZXhwZWN0ZWQnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjbG9zZVBhcmFtcyhzdGF0ZSk7XG4gICAgICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgICAgICAgIGFycmF5ID0gcm93O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB0aGlzIGlzIGFuIGVtcHR5IG1hdHJpeCBcIlsgXVwiXG4gICAgICAgIGNsb3NlUGFyYW1zKHN0YXRlKTtcbiAgICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgICAgICBhcnJheSA9IG5ldyBBcnJheU5vZGUoW10pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFyc2VBY2Nlc3NvcnMoc3RhdGUsIGFycmF5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VPYmplY3Qoc3RhdGUpO1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZSBhIHNpbmdsZSBjb21tYS1zZXBhcmF0ZWQgcm93IGZyb20gYSBtYXRyaXgsIGxpa2UgJ2EsIGIsIGMnXG4gICAqIEByZXR1cm4ge0FycmF5Tm9kZX0gbm9kZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlUm93KHN0YXRlKSB7XG4gICAgdmFyIHBhcmFtcyA9IFtwYXJzZUFzc2lnbm1lbnQoc3RhdGUpXTtcbiAgICB2YXIgbGVuID0gMTtcblxuICAgIHdoaWxlIChzdGF0ZS50b2tlbiA9PT0gJywnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVubW9kaWZpZWQtbG9vcC1jb25kaXRpb25cbiAgICAgIGdldFRva2VuKHN0YXRlKTsgLy8gcGFyc2UgZXhwcmVzc2lvblxuXG4gICAgICBwYXJhbXNbbGVuXSA9IHBhcnNlQXNzaWdubWVudChzdGF0ZSk7XG4gICAgICBsZW4rKztcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEFycmF5Tm9kZShwYXJhbXMpO1xuICB9XG4gIC8qKlxuICAgKiBwYXJzZSBhbiBvYmplY3QsIGVuY2xvc2VkIGluIGFuZ2xlIGJyYWNrZXRzey4uLn0sIGZvciBleGFtcGxlIHt2YWx1ZTogMn1cbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlT2JqZWN0KHN0YXRlKSB7XG4gICAgaWYgKHN0YXRlLnRva2VuID09PSAneycpIHtcbiAgICAgIG9wZW5QYXJhbXMoc3RhdGUpO1xuICAgICAgdmFyIGtleTtcbiAgICAgIHZhciBwcm9wZXJ0aWVzID0ge307XG5cbiAgICAgIGRvIHtcbiAgICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuXG4gICAgICAgIGlmIChzdGF0ZS50b2tlbiAhPT0gJ30nKSB7XG4gICAgICAgICAgLy8gcGFyc2Uga2V5XG4gICAgICAgICAgaWYgKHN0YXRlLnRva2VuID09PSAnXCInKSB7XG4gICAgICAgICAgICBrZXkgPSBwYXJzZURvdWJsZVF1b3Rlc1N0cmluZ1Rva2VuKHN0YXRlKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLnRva2VuID09PSAnXFwnJykge1xuICAgICAgICAgICAga2V5ID0gcGFyc2VTaW5nbGVRdW90ZXNTdHJpbmdUb2tlbihzdGF0ZSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS50b2tlblR5cGUgPT09IFRPS0VOVFlQRS5TWU1CT0wgfHwgc3RhdGUudG9rZW5UeXBlID09PSBUT0tFTlRZUEUuREVMSU1JVEVSICYmIHN0YXRlLnRva2VuIGluIE5BTUVEX0RFTElNSVRFUlMpIHtcbiAgICAgICAgICAgIGtleSA9IHN0YXRlLnRva2VuO1xuICAgICAgICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ1N5bWJvbCBvciBzdHJpbmcgZXhwZWN0ZWQgYXMgb2JqZWN0IGtleScpO1xuICAgICAgICAgIH0gLy8gcGFyc2Uga2V5L3ZhbHVlIHNlcGFyYXRvclxuXG5cbiAgICAgICAgICBpZiAoc3RhdGUudG9rZW4gIT09ICc6Jykge1xuICAgICAgICAgICAgdGhyb3cgY3JlYXRlU3ludGF4RXJyb3Ioc3RhdGUsICdDb2xvbiA6IGV4cGVjdGVkIGFmdGVyIG9iamVjdCBrZXknKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBnZXRUb2tlbihzdGF0ZSk7IC8vIHBhcnNlIGtleVxuXG4gICAgICAgICAgcHJvcGVydGllc1trZXldID0gcGFyc2VBc3NpZ25tZW50KHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfSB3aGlsZSAoc3RhdGUudG9rZW4gPT09ICcsJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvblxuXG5cbiAgICAgIGlmIChzdGF0ZS50b2tlbiAhPT0gJ30nKSB7XG4gICAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnQ29tbWEgLCBvciBicmFja2V0IH0gZXhwZWN0ZWQgYWZ0ZXIgb2JqZWN0IHZhbHVlJyk7XG4gICAgICB9XG5cbiAgICAgIGNsb3NlUGFyYW1zKHN0YXRlKTtcbiAgICAgIGdldFRva2VuKHN0YXRlKTtcbiAgICAgIHZhciBub2RlID0gbmV3IE9iamVjdE5vZGUocHJvcGVydGllcyk7IC8vIHBhcnNlIGluZGV4IHBhcmFtZXRlcnNcblxuICAgICAgbm9kZSA9IHBhcnNlQWNjZXNzb3JzKHN0YXRlLCBub2RlKTtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZU51bWJlcihzdGF0ZSk7XG4gIH1cbiAgLyoqXG4gICAqIHBhcnNlIGEgbnVtYmVyXG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZU51bWJlcihzdGF0ZSkge1xuICAgIHZhciBudW1iZXJTdHI7XG5cbiAgICBpZiAoc3RhdGUudG9rZW5UeXBlID09PSBUT0tFTlRZUEUuTlVNQkVSKSB7XG4gICAgICAvLyB0aGlzIGlzIGEgbnVtYmVyXG4gICAgICBudW1iZXJTdHIgPSBzdGF0ZS50b2tlbjtcbiAgICAgIGdldFRva2VuKHN0YXRlKTtcbiAgICAgIHJldHVybiBuZXcgQ29uc3RhbnROb2RlKG51bWVyaWMobnVtYmVyU3RyLCBjb25maWcubnVtYmVyKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlUGFyZW50aGVzZXMoc3RhdGUpO1xuICB9XG4gIC8qKlxuICAgKiBwYXJlbnRoZXNlc1xuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VQYXJlbnRoZXNlcyhzdGF0ZSkge1xuICAgIHZhciBub2RlOyAvLyBjaGVjayBpZiBpdCBpcyBhIHBhcmVudGhlc2l6ZWQgZXhwcmVzc2lvblxuXG4gICAgaWYgKHN0YXRlLnRva2VuID09PSAnKCcpIHtcbiAgICAgIC8vIHBhcmVudGhlc2VzICguLi4pXG4gICAgICBvcGVuUGFyYW1zKHN0YXRlKTtcbiAgICAgIGdldFRva2VuKHN0YXRlKTtcbiAgICAgIG5vZGUgPSBwYXJzZUFzc2lnbm1lbnQoc3RhdGUpOyAvLyBzdGFydCBhZ2FpblxuXG4gICAgICBpZiAoc3RhdGUudG9rZW4gIT09ICcpJykge1xuICAgICAgICB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ1BhcmVudGhlc2lzICkgZXhwZWN0ZWQnKTtcbiAgICAgIH1cblxuICAgICAgY2xvc2VQYXJhbXMoc3RhdGUpO1xuICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgICAgbm9kZSA9IG5ldyBQYXJlbnRoZXNpc05vZGUobm9kZSk7XG4gICAgICBub2RlID0gcGFyc2VBY2Nlc3NvcnMoc3RhdGUsIG5vZGUpO1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlRW5kKHN0YXRlKTtcbiAgfVxuICAvKipcbiAgICogRXZhbHVhdGVkIHdoZW4gdGhlIGV4cHJlc3Npb24gaXMgbm90IHlldCBlbmRlZCBidXQgZXhwZWN0ZWQgdG8gZW5kXG4gICAqIEByZXR1cm4ge05vZGV9IHJlc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlRW5kKHN0YXRlKSB7XG4gICAgaWYgKHN0YXRlLnRva2VuID09PSAnJykge1xuICAgICAgLy8gc3ludGF4IGVycm9yIG9yIHVuZXhwZWN0ZWQgZW5kIG9mIGV4cHJlc3Npb25cbiAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnVW5leHBlY3RlZCBlbmQgb2YgZXhwcmVzc2lvbicpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ1ZhbHVlIGV4cGVjdGVkJyk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBTaG9ydGN1dCBmb3IgZ2V0dGluZyB0aGUgY3VycmVudCByb3cgdmFsdWUgKG9uZSBiYXNlZClcbiAgICogUmV0dXJucyB0aGUgbGluZSBvZiB0aGUgY3VycmVudGx5IGhhbmRsZWQgZXhwcmVzc2lvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICAvKiBUT0RPOiBpbXBsZW1lbnQga2VlcGluZyB0cmFjayBvbiB0aGUgcm93IG51bWJlclxuICBmdW5jdGlvbiByb3cgKCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgKi9cblxuICAvKipcbiAgICogU2hvcnRjdXQgZm9yIGdldHRpbmcgdGhlIGN1cnJlbnQgY29sIHZhbHVlIChvbmUgYmFzZWQpXG4gICAqIFJldHVybnMgdGhlIGNvbHVtbiAocG9zaXRpb24pIHdoZXJlIHRoZSBsYXN0IHN0YXRlLnRva2VuIHN0YXJ0c1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGNvbChzdGF0ZSkge1xuICAgIHJldHVybiBzdGF0ZS5pbmRleCAtIHN0YXRlLnRva2VuLmxlbmd0aCArIDE7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBlcnJvclxuICAgKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VcbiAgICogQHJldHVybiB7U3ludGF4RXJyb3J9IGluc3RhbnRpYXRlZCBlcnJvclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCBtZXNzYWdlKSB7XG4gICAgdmFyIGMgPSBjb2woc3RhdGUpO1xuICAgIHZhciBlcnJvciA9IG5ldyBTeW50YXhFcnJvcihtZXNzYWdlICsgJyAoY2hhciAnICsgYyArICcpJyk7XG4gICAgZXJyb3JbXCJjaGFyXCJdID0gYztcbiAgICByZXR1cm4gZXJyb3I7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBlcnJvclxuICAgKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VcbiAgICogQHJldHVybiB7RXJyb3J9IGluc3RhbnRpYXRlZCBlcnJvclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVycm9yKHN0YXRlLCBtZXNzYWdlKSB7XG4gICAgdmFyIGMgPSBjb2woc3RhdGUpO1xuICAgIHZhciBlcnJvciA9IG5ldyBTeW50YXhFcnJvcihtZXNzYWdlICsgJyAoY2hhciAnICsgYyArICcpJyk7XG4gICAgZXJyb3JbXCJjaGFyXCJdID0gYztcbiAgICByZXR1cm4gZXJyb3I7XG4gIH1cblxuICByZXR1cm4gcGFyc2U7XG59KTtcbmV4cG9ydHMuY3JlYXRlUGFyc2UgPSBjcmVhdGVQYXJzZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQXBwbHlUcmFuc2Zvcm0gPSB2b2lkIDA7XG5cbnZhciBfZXJyb3JUcmFuc2Zvcm0gPSByZXF1aXJlKFwiLi91dGlscy9lcnJvclRyYW5zZm9ybVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYXBwbHkgPSByZXF1aXJlKFwiLi4vLi4vZnVuY3Rpb24vbWF0cml4L2FwcGx5XCIpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgbmFtZSA9ICdhcHBseSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdpc0ludGVnZXInXTtcbi8qKlxuICogQXR0YWNoIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIHRvIG1hdGguYXBwbHlcbiAqIEFkZHMgYSBwcm9wZXJ0eSB0cmFuc2Zvcm0gY29udGFpbmluZyB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uLlxuICpcbiAqIFRoaXMgdHJhbnNmb3JtIGNoYW5nZWQgdGhlIGxhc3QgYGRpbWAgcGFyYW1ldGVyIG9mIGZ1bmN0aW9uIGFwcGx5XG4gKiBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvIGJhc2VkXG4gKi9cblxudmFyIGNyZWF0ZUFwcGx5VHJhbnNmb3JtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGlzSW50ZWdlciA9IF9yZWYuaXNJbnRlZ2VyO1xuICB2YXIgYXBwbHkgPSAoMCwgX2FwcGx5LmNyZWF0ZUFwcGx5KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGlzSW50ZWdlcjogaXNJbnRlZ2VyXG4gIH0pOyAvLyBAc2VlOiBjb21tZW50IG9mIGNvbmNhdCBpdHNlbGZcblxuICByZXR1cm4gdHlwZWQoJ2FwcGx5Jywge1xuICAgICcuLi5hbnknOiBmdW5jdGlvbiBhbnkoYXJncykge1xuICAgICAgLy8gY2hhbmdlIGRpbSBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvLWJhc2VkXG4gICAgICB2YXIgZGltID0gYXJnc1sxXTtcblxuICAgICAgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKGRpbSkpIHtcbiAgICAgICAgYXJnc1sxXSA9IGRpbSAtIDE7XG4gICAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKGRpbSkpIHtcbiAgICAgICAgYXJnc1sxXSA9IGRpbS5taW51cygxKTtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGFwcGx5LmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93ICgwLCBfZXJyb3JUcmFuc2Zvcm0uZXJyb3JUcmFuc2Zvcm0pKGVycik7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn0sIHtcbiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFwcGx5VHJhbnNmb3JtID0gY3JlYXRlQXBwbHlUcmFuc2Zvcm07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNvbHVtblRyYW5zZm9ybSA9IHZvaWQgMDtcblxudmFyIF9lcnJvclRyYW5zZm9ybSA9IHJlcXVpcmUoXCIuL3V0aWxzL2Vycm9yVHJhbnNmb3JtXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2x1bW4gPSByZXF1aXJlKFwiLi4vLi4vZnVuY3Rpb24vbWF0cml4L2NvbHVtblwiKTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIG5hbWUgPSAnY29sdW1uJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ0luZGV4JywgJ21hdHJpeCcsICdyYW5nZSddO1xuLyoqXG4gKiBBdHRhY2ggYSB0cmFuc2Zvcm0gZnVuY3Rpb24gdG8gbWF0cml4LmNvbHVtblxuICogQWRkcyBhIHByb3BlcnR5IHRyYW5zZm9ybSBjb250YWluaW5nIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24uXG4gKlxuICogVGhpcyB0cmFuc2Zvcm0gY2hhbmdlZCB0aGUgbGFzdCBgaW5kZXhgIHBhcmFtZXRlciBvZiBmdW5jdGlvbiBjb2x1bW5cbiAqIGZyb20gemVyby1iYXNlZCB0byBvbmUtYmFzZWRcbiAqL1xuXG52YXIgY3JlYXRlQ29sdW1uVHJhbnNmb3JtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIEluZGV4ID0gX3JlZi5JbmRleCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgcmFuZ2UgPSBfcmVmLnJhbmdlO1xuICB2YXIgY29sdW1uID0gKDAsIF9jb2x1bW4uY3JlYXRlQ29sdW1uKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIEluZGV4OiBJbmRleCxcbiAgICBtYXRyaXg6IG1hdHJpeCxcbiAgICByYW5nZTogcmFuZ2VcbiAgfSk7IC8vIEBzZWU6IGNvbW1lbnQgb2YgY29sdW1uIGl0c2VsZlxuXG4gIHJldHVybiB0eXBlZCgnY29sdW1uJywge1xuICAgICcuLi5hbnknOiBmdW5jdGlvbiBhbnkoYXJncykge1xuICAgICAgLy8gY2hhbmdlIGxhc3QgYXJndW1lbnQgZnJvbSB6ZXJvLWJhc2VkIHRvIG9uZS1iYXNlZFxuICAgICAgdmFyIGxhc3RJbmRleCA9IGFyZ3MubGVuZ3RoIC0gMTtcbiAgICAgIHZhciBsYXN0ID0gYXJnc1tsYXN0SW5kZXhdO1xuXG4gICAgICBpZiAoKDAsIF9pcy5pc051bWJlcikobGFzdCkpIHtcbiAgICAgICAgYXJnc1tsYXN0SW5kZXhdID0gbGFzdCAtIDE7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBjb2x1bW4uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgKDAsIF9lcnJvclRyYW5zZm9ybS5lcnJvclRyYW5zZm9ybSkoZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufSwge1xuICBpc1RyYW5zZm9ybUZ1bmN0aW9uOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ29sdW1uVHJhbnNmb3JtID0gY3JlYXRlQ29sdW1uVHJhbnNmb3JtOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb25jYXRUcmFuc2Zvcm0gPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZXJyb3JUcmFuc2Zvcm0gPSByZXF1aXJlKFwiLi91dGlscy9lcnJvclRyYW5zZm9ybVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29uY2F0ID0gcmVxdWlyZShcIi4uLy4uL2Z1bmN0aW9uL21hdHJpeC9jb25jYXRcIik7XG5cbnZhciBuYW1lID0gJ2NvbmNhdCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnaXNJbnRlZ2VyJ107XG52YXIgY3JlYXRlQ29uY2F0VHJhbnNmb3JtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgaXNJbnRlZ2VyID0gX3JlZi5pc0ludGVnZXI7XG4gIHZhciBjb25jYXQgPSAoMCwgX2NvbmNhdC5jcmVhdGVDb25jYXQpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgbWF0cml4OiBtYXRyaXgsXG4gICAgaXNJbnRlZ2VyOiBpc0ludGVnZXJcbiAgfSk7XG4gIC8qKlxuICAgKiBBdHRhY2ggYSB0cmFuc2Zvcm0gZnVuY3Rpb24gdG8gbWF0aC5yYW5nZVxuICAgKiBBZGRzIGEgcHJvcGVydHkgdHJhbnNmb3JtIGNvbnRhaW5pbmcgdGhlIHRyYW5zZm9ybSBmdW5jdGlvbi5cbiAgICpcbiAgICogVGhpcyB0cmFuc2Zvcm0gY2hhbmdlZCB0aGUgbGFzdCBgZGltYCBwYXJhbWV0ZXIgb2YgZnVuY3Rpb24gY29uY2F0XG4gICAqIGZyb20gb25lLWJhc2VkIHRvIHplcm8gYmFzZWRcbiAgICovXG5cbiAgcmV0dXJuIHR5cGVkKCdjb25jYXQnLCB7XG4gICAgJy4uLmFueSc6IGZ1bmN0aW9uIGFueShhcmdzKSB7XG4gICAgICAvLyBjaGFuZ2UgbGFzdCBhcmd1bWVudCBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvLWJhc2VkXG4gICAgICB2YXIgbGFzdEluZGV4ID0gYXJncy5sZW5ndGggLSAxO1xuICAgICAgdmFyIGxhc3QgPSBhcmdzW2xhc3RJbmRleF07XG5cbiAgICAgIGlmICgoMCwgX2lzLmlzTnVtYmVyKShsYXN0KSkge1xuICAgICAgICBhcmdzW2xhc3RJbmRleF0gPSBsYXN0IC0gMTtcbiAgICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc0JpZ051bWJlcikobGFzdCkpIHtcbiAgICAgICAgYXJnc1tsYXN0SW5kZXhdID0gbGFzdC5taW51cygxKTtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGNvbmNhdC5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyAoMCwgX2Vycm9yVHJhbnNmb3JtLmVycm9yVHJhbnNmb3JtKShlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59LCB7XG4gIGlzVHJhbnNmb3JtRnVuY3Rpb246IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb25jYXRUcmFuc2Zvcm0gPSBjcmVhdGVDb25jYXRUcmFuc2Zvcm07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUZpbHRlclRyYW5zZm9ybSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mdW5jdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mdW5jdGlvblwiKTtcblxudmFyIF9jb21waWxlSW5saW5lRXhwcmVzc2lvbiA9IHJlcXVpcmUoXCIuL3V0aWxzL2NvbXBpbGVJbmxpbmVFeHByZXNzaW9uXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnZmlsdGVyJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlRmlsdGVyVHJhbnNmb3JtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogQXR0YWNoIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIHRvIG1hdGguZmlsdGVyXG4gICAqIEFkZHMgYSBwcm9wZXJ0eSB0cmFuc2Zvcm0gY29udGFpbmluZyB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBUaGlzIHRyYW5zZm9ybSBhZGRzIHN1cHBvcnQgZm9yIGVxdWF0aW9ucyBhcyB0ZXN0IGZ1bmN0aW9uIGZvciBtYXRoLmZpbHRlcixcbiAgICogc28geW91IGNhbiBkbyBzb21ldGhpbmcgbGlrZSAnZmlsdGVyKFszLCAtMiwgNV0sIHggPiAwKScuXG4gICAqL1xuICBmdW5jdGlvbiBmaWx0ZXJUcmFuc2Zvcm0oYXJncywgbWF0aCwgc2NvcGUpIHtcbiAgICB2YXIgeCwgY2FsbGJhY2s7XG5cbiAgICBpZiAoYXJnc1swXSkge1xuICAgICAgeCA9IGFyZ3NbMF0uY29tcGlsZSgpLmV2YWx1YXRlKHNjb3BlKTtcbiAgICB9XG5cbiAgICBpZiAoYXJnc1sxXSkge1xuICAgICAgaWYgKCgwLCBfaXMuaXNTeW1ib2xOb2RlKShhcmdzWzFdKSB8fCAoMCwgX2lzLmlzRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSkoYXJnc1sxXSkpIHtcbiAgICAgICAgLy8gYSBmdW5jdGlvbiBwb2ludGVyLCBsaWtlIGZpbHRlcihbMywgLTIsIDVdLCBteVRlc3RGdW5jdGlvbilcbiAgICAgICAgY2FsbGJhY2sgPSBhcmdzWzFdLmNvbXBpbGUoKS5ldmFsdWF0ZShzY29wZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBhbiBleHByZXNzaW9uIGxpa2UgZmlsdGVyKFszLCAtMiwgNV0sIHggPiAwKVxuICAgICAgICBjYWxsYmFjayA9ICgwLCBfY29tcGlsZUlubGluZUV4cHJlc3Npb24uY29tcGlsZUlubGluZUV4cHJlc3Npb24pKGFyZ3NbMV0sIG1hdGgsIHNjb3BlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVyKHgsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIGZpbHRlclRyYW5zZm9ybS5yYXdBcmdzID0gdHJ1ZTsgLy8gb25lIGJhc2VkIHZlcnNpb24gb2YgZnVuY3Rpb24gZmlsdGVyXG5cbiAgdmFyIGZpbHRlciA9IHR5cGVkKCdmaWx0ZXInLCB7XG4gICAgJ0FycmF5LCBmdW5jdGlvbic6IF9maWx0ZXIsXG4gICAgJ01hdHJpeCwgZnVuY3Rpb24nOiBmdW5jdGlvbiBNYXRyaXhGdW5jdGlvbih4LCB0ZXN0KSB7XG4gICAgICByZXR1cm4geC5jcmVhdGUoX2ZpbHRlcih4LnRvQXJyYXkoKSwgdGVzdCkpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBSZWdFeHAnOiBfYXJyYXkuZmlsdGVyUmVnRXhwLFxuICAgICdNYXRyaXgsIFJlZ0V4cCc6IGZ1bmN0aW9uIE1hdHJpeFJlZ0V4cCh4LCB0ZXN0KSB7XG4gICAgICByZXR1cm4geC5jcmVhdGUoKDAsIF9hcnJheS5maWx0ZXJSZWdFeHApKHgudG9BcnJheSgpLCB0ZXN0KSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGZpbHRlclRyYW5zZm9ybTtcbn0sIHtcbiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZVxufSk7XG4vKipcbiAqIEZpbHRlciB2YWx1ZXMgaW4gYSBjYWxsYmFjayBnaXZlbiBhIGNhbGxiYWNrIGZ1bmN0aW9uXG4gKlxuICogISEhIFBhc3NlcyBhIG9uZS1iYXNlZCBpbmRleCAhISFcbiAqXG4gKiBAcGFyYW0ge0FycmF5fSB4XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7QXJyYXl9IFJldHVybnMgdGhlIGZpbHRlcmVkIGFycmF5XG4gKiBAcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMuY3JlYXRlRmlsdGVyVHJhbnNmb3JtID0gY3JlYXRlRmlsdGVyVHJhbnNmb3JtO1xuXG5mdW5jdGlvbiBfZmlsdGVyKHgsIGNhbGxiYWNrKSB7XG4gIC8vIGZpZ3VyZSBvdXQgd2hhdCBudW1iZXIgb2YgYXJndW1lbnRzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBleHBlY3RzXG4gIHZhciBhcmdzID0gKDAsIF9mdW5jdGlvbi5tYXhBcmd1bWVudENvdW50KShjYWxsYmFjayk7XG4gIHJldHVybiAoMCwgX2FycmF5LmZpbHRlcikoeCwgZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgYXJyYXkpIHtcbiAgICAvLyBpbnZva2UgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGggdGhlIHJpZ2h0IG51bWJlciBvZiBhcmd1bWVudHNcbiAgICBpZiAoYXJncyA9PT0gMSkge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKGFyZ3MgPT09IDIpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayh2YWx1ZSwgW2luZGV4ICsgMV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyAzIG9yIC0xXG4gICAgICByZXR1cm4gY2FsbGJhY2sodmFsdWUsIFtpbmRleCArIDFdLCBhcnJheSk7XG4gICAgfVxuICB9KTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRm9yRWFjaFRyYW5zZm9ybSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mdW5jdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mdW5jdGlvblwiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29tcGlsZUlubGluZUV4cHJlc3Npb24gPSByZXF1aXJlKFwiLi91dGlscy9jb21waWxlSW5saW5lRXhwcmVzc2lvblwiKTtcblxudmFyIG5hbWUgPSAnZm9yRWFjaCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUZvckVhY2hUcmFuc2Zvcm0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBBdHRhY2ggYSB0cmFuc2Zvcm0gZnVuY3Rpb24gdG8gbWF0aC5mb3JFYWNoXG4gICAqIEFkZHMgYSBwcm9wZXJ0eSB0cmFuc2Zvcm0gY29udGFpbmluZyB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBUaGlzIHRyYW5zZm9ybSBjcmVhdGVzIGEgb25lLWJhc2VkIGluZGV4IGluc3RlYWQgb2YgYSB6ZXJvLWJhc2VkIGluZGV4XG4gICAqL1xuICBmdW5jdGlvbiBmb3JFYWNoVHJhbnNmb3JtKGFyZ3MsIG1hdGgsIHNjb3BlKSB7XG4gICAgdmFyIHgsIGNhbGxiYWNrO1xuXG4gICAgaWYgKGFyZ3NbMF0pIHtcbiAgICAgIHggPSBhcmdzWzBdLmNvbXBpbGUoKS5ldmFsdWF0ZShzY29wZSk7XG4gICAgfVxuXG4gICAgaWYgKGFyZ3NbMV0pIHtcbiAgICAgIGlmICgoMCwgX2lzLmlzU3ltYm9sTm9kZSkoYXJnc1sxXSkgfHwgKDAsIF9pcy5pc0Z1bmN0aW9uQXNzaWdubWVudE5vZGUpKGFyZ3NbMV0pKSB7XG4gICAgICAgIC8vIGEgZnVuY3Rpb24gcG9pbnRlciwgbGlrZSBmb3JFYWNoKFszLCAtMiwgNV0sIG15VGVzdEZ1bmN0aW9uKVxuICAgICAgICBjYWxsYmFjayA9IGFyZ3NbMV0uY29tcGlsZSgpLmV2YWx1YXRlKHNjb3BlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGFuIGV4cHJlc3Npb24gbGlrZSBmb3JFYWNoKFszLCAtMiwgNV0sIHggPiAwID8gY2FsbGJhY2sxKHgpIDogY2FsbGJhY2syKHgpIClcbiAgICAgICAgY2FsbGJhY2sgPSAoMCwgX2NvbXBpbGVJbmxpbmVFeHByZXNzaW9uLmNvbXBpbGVJbmxpbmVFeHByZXNzaW9uKShhcmdzWzFdLCBtYXRoLCBzY29wZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIF9mb3JFYWNoKHgsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIGZvckVhY2hUcmFuc2Zvcm0ucmF3QXJncyA9IHRydWU7IC8vIG9uZS1iYXNlZCB2ZXJzaW9uIG9mIGZvckVhY2hcblxuICB2YXIgX2ZvckVhY2ggPSB0eXBlZCgnZm9yRWFjaCcsIHtcbiAgICAnQXJyYXkgfCBNYXRyaXgsIGZ1bmN0aW9uJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhGdW5jdGlvbihhcnJheSwgY2FsbGJhY2spIHtcbiAgICAgIC8vIGZpZ3VyZSBvdXQgd2hhdCBudW1iZXIgb2YgYXJndW1lbnRzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBleHBlY3RzXG4gICAgICB2YXIgYXJncyA9ICgwLCBfZnVuY3Rpb24ubWF4QXJndW1lbnRDb3VudCkoY2FsbGJhY2spO1xuXG4gICAgICB2YXIgcmVjdXJzZSA9IGZ1bmN0aW9uIHJlY3Vyc2UodmFsdWUsIGluZGV4KSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICgwLCBfYXJyYXkuZm9yRWFjaCkodmFsdWUsIGZ1bmN0aW9uIChjaGlsZCwgaSkge1xuICAgICAgICAgICAgLy8gd2UgY3JlYXRlIGEgY29weSBvZiB0aGUgaW5kZXggYXJyYXkgYW5kIGFwcGVuZCB0aGUgbmV3IGluZGV4IHZhbHVlXG4gICAgICAgICAgICByZWN1cnNlKGNoaWxkLCBpbmRleC5jb25jYXQoaSArIDEpKTsgLy8gb25lIGJhc2VkIGluZGV4LCBoZW5jZSBpKzFcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBpbnZva2UgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGggdGhlIHJpZ2h0IG51bWJlciBvZiBhcmd1bWVudHNcbiAgICAgICAgICBpZiAoYXJncyA9PT0gMSkge1xuICAgICAgICAgICAgY2FsbGJhY2sodmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYXJncyA9PT0gMikge1xuICAgICAgICAgICAgY2FsbGJhY2sodmFsdWUsIGluZGV4KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gMyBvciAtMVxuICAgICAgICAgICAgY2FsbGJhY2sodmFsdWUsIGluZGV4LCBhcnJheSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZWN1cnNlKGFycmF5LnZhbHVlT2YoKSwgW10pOyAvLyBwYXNzIEFycmF5XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZm9yRWFjaFRyYW5zZm9ybTtcbn0sIHtcbiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUZvckVhY2hUcmFuc2Zvcm0gPSBjcmVhdGVGb3JFYWNoVHJhbnNmb3JtOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVJbmRleFRyYW5zZm9ybSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2luZGV4JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ0luZGV4J107XG52YXIgY3JlYXRlSW5kZXhUcmFuc2Zvcm0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgSW5kZXggPSBfcmVmLkluZGV4O1xuXG4gIC8qKlxuICAgKiBBdHRhY2ggYSB0cmFuc2Zvcm0gZnVuY3Rpb24gdG8gbWF0aC5pbmRleFxuICAgKiBBZGRzIGEgcHJvcGVydHkgdHJhbnNmb3JtIGNvbnRhaW5pbmcgdGhlIHRyYW5zZm9ybSBmdW5jdGlvbi5cbiAgICpcbiAgICogVGhpcyB0cmFuc2Zvcm0gY3JlYXRlcyBhIG9uZS1iYXNlZCBpbmRleCBpbnN0ZWFkIG9mIGEgemVyby1iYXNlZCBpbmRleFxuICAgKi9cbiAgcmV0dXJuIGZ1bmN0aW9uIGluZGV4VHJhbnNmb3JtKCkge1xuICAgIHZhciBhcmdzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgdmFyIGFyZyA9IGFyZ3VtZW50c1tpXTsgLy8gY2hhbmdlIGZyb20gb25lLWJhc2VkIHRvIHplcm8gYmFzZWQsIGFuZCBjb252ZXJ0IEJpZ051bWJlciB0byBudW1iZXJcblxuICAgICAgaWYgKCgwLCBfaXMuaXNSYW5nZSkoYXJnKSkge1xuICAgICAgICBhcmcuc3RhcnQtLTtcbiAgICAgICAgYXJnLmVuZCAtPSBhcmcuc3RlcCA+IDAgPyAwIDogMjtcbiAgICAgIH0gZWxzZSBpZiAoYXJnICYmIGFyZy5pc1NldCA9PT0gdHJ1ZSkge1xuICAgICAgICBhcmcgPSBhcmcubWFwKGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgcmV0dXJuIHYgLSAxO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc0FycmF5KShhcmcpIHx8ICgwLCBfaXMuaXNNYXRyaXgpKGFyZykpIHtcbiAgICAgICAgYXJnID0gYXJnLm1hcChmdW5jdGlvbiAodikge1xuICAgICAgICAgIHJldHVybiB2IC0gMTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKGFyZykpIHtcbiAgICAgICAgYXJnLS07XG4gICAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKGFyZykpIHtcbiAgICAgICAgYXJnID0gYXJnLnRvTnVtYmVyKCkgLSAxO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYXJnID09PSAnc3RyaW5nJykgey8vIGxlYXZlIGFzIGlzXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdEaW1lbnNpb24gbXVzdCBiZSBhbiBBcnJheSwgTWF0cml4LCBudW1iZXIsIHN0cmluZywgb3IgUmFuZ2UnKTtcbiAgICAgIH1cblxuICAgICAgYXJnc1tpXSA9IGFyZztcbiAgICB9XG5cbiAgICB2YXIgcmVzID0gbmV3IEluZGV4KCk7XG4gICAgSW5kZXguYXBwbHkocmVzLCBhcmdzKTtcbiAgICByZXR1cm4gcmVzO1xuICB9O1xufSwge1xuICBpc1RyYW5zZm9ybUZ1bmN0aW9uOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlSW5kZXhUcmFuc2Zvcm0gPSBjcmVhdGVJbmRleFRyYW5zZm9ybTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTWFwVHJhbnNmb3JtID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2Z1bmN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2Z1bmN0aW9uXCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb21waWxlSW5saW5lRXhwcmVzc2lvbiA9IHJlcXVpcmUoXCIuL3V0aWxzL2NvbXBpbGVJbmxpbmVFeHByZXNzaW9uXCIpO1xuXG52YXIgbmFtZSA9ICdtYXAnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVNYXBUcmFuc2Zvcm0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBBdHRhY2ggYSB0cmFuc2Zvcm0gZnVuY3Rpb24gdG8gbWF0aC5tYXBcbiAgICogQWRkcyBhIHByb3BlcnR5IHRyYW5zZm9ybSBjb250YWluaW5nIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24uXG4gICAqXG4gICAqIFRoaXMgdHJhbnNmb3JtIGNyZWF0ZXMgYSBvbmUtYmFzZWQgaW5kZXggaW5zdGVhZCBvZiBhIHplcm8tYmFzZWQgaW5kZXhcbiAgICovXG4gIGZ1bmN0aW9uIG1hcFRyYW5zZm9ybShhcmdzLCBtYXRoLCBzY29wZSkge1xuICAgIHZhciB4LCBjYWxsYmFjaztcblxuICAgIGlmIChhcmdzWzBdKSB7XG4gICAgICB4ID0gYXJnc1swXS5jb21waWxlKCkuZXZhbHVhdGUoc2NvcGUpO1xuICAgIH1cblxuICAgIGlmIChhcmdzWzFdKSB7XG4gICAgICBpZiAoKDAsIF9pcy5pc1N5bWJvbE5vZGUpKGFyZ3NbMV0pIHx8ICgwLCBfaXMuaXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlKShhcmdzWzFdKSkge1xuICAgICAgICAvLyBhIGZ1bmN0aW9uIHBvaW50ZXIsIGxpa2UgZmlsdGVyKFszLCAtMiwgNV0sIG15VGVzdEZ1bmN0aW9uKVxuICAgICAgICBjYWxsYmFjayA9IGFyZ3NbMV0uY29tcGlsZSgpLmV2YWx1YXRlKHNjb3BlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGFuIGV4cHJlc3Npb24gbGlrZSBmaWx0ZXIoWzMsIC0yLCA1XSwgeCA+IDApXG4gICAgICAgIGNhbGxiYWNrID0gKDAsIF9jb21waWxlSW5saW5lRXhwcmVzc2lvbi5jb21waWxlSW5saW5lRXhwcmVzc2lvbikoYXJnc1sxXSwgbWF0aCwgc2NvcGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXAoeCwgY2FsbGJhY2spO1xuICB9XG5cbiAgbWFwVHJhbnNmb3JtLnJhd0FyZ3MgPSB0cnVlOyAvLyBvbmUtYmFzZWQgdmVyc2lvbiBvZiBtYXAgZnVuY3Rpb25cblxuICB2YXIgbWFwID0gdHlwZWQoJ21hcCcsIHtcbiAgICAnQXJyYXksIGZ1bmN0aW9uJzogZnVuY3Rpb24gQXJyYXlGdW5jdGlvbih4LCBjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIF9tYXAoeCwgY2FsbGJhY2ssIHgpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgZnVuY3Rpb24nOiBmdW5jdGlvbiBNYXRyaXhGdW5jdGlvbih4LCBjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHguY3JlYXRlKF9tYXAoeC52YWx1ZU9mKCksIGNhbGxiYWNrLCB4KSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG1hcFRyYW5zZm9ybTtcbn0sIHtcbiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZVxufSk7XG4vKipcbiAqIE1hcCBmb3IgYSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheS4gT25lLWJhc2VkIGluZGV4ZXNcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHBhcmFtIHtBcnJheX0gb3JpZ1xuICogQHJldHVybiB7QXJyYXl9XG4gKiBAcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMuY3JlYXRlTWFwVHJhbnNmb3JtID0gY3JlYXRlTWFwVHJhbnNmb3JtO1xuXG5mdW5jdGlvbiBfbWFwKGFycmF5LCBjYWxsYmFjaywgb3JpZykge1xuICAvLyBmaWd1cmUgb3V0IHdoYXQgbnVtYmVyIG9mIGFyZ3VtZW50cyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZXhwZWN0c1xuICB2YXIgYXJnc0NvdW50ID0gKDAsIF9mdW5jdGlvbi5tYXhBcmd1bWVudENvdW50KShjYWxsYmFjayk7XG5cbiAgZnVuY3Rpb24gcmVjdXJzZSh2YWx1ZSwgaW5kZXgpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiAoMCwgX2FycmF5Lm1hcCkodmFsdWUsIGZ1bmN0aW9uIChjaGlsZCwgaSkge1xuICAgICAgICAvLyB3ZSBjcmVhdGUgYSBjb3B5IG9mIHRoZSBpbmRleCBhcnJheSBhbmQgYXBwZW5kIHRoZSBuZXcgaW5kZXggdmFsdWVcbiAgICAgICAgcmV0dXJuIHJlY3Vyc2UoY2hpbGQsIGluZGV4LmNvbmNhdChpICsgMSkpOyAvLyBvbmUgYmFzZWQgaW5kZXgsIGhlbmNlIGkgKyAxXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaW52b2tlIHRoZSAodHlwZWQpIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGggdGhlIHJpZ2h0IG51bWJlciBvZiBhcmd1bWVudHNcbiAgICAgIGlmIChhcmdzQ291bnQgPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoYXJnc0NvdW50ID09PSAyKSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayh2YWx1ZSwgaW5kZXgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gMyBvciAtMVxuICAgICAgICByZXR1cm4gY2FsbGJhY2sodmFsdWUsIGluZGV4LCBvcmlnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVjdXJzZShhcnJheSwgW10pO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVNYXhUcmFuc2Zvcm0gPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2Vycm9yVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vdXRpbHMvZXJyb3JUcmFuc2Zvcm1cIik7XG5cbnZhciBfbWF4ID0gcmVxdWlyZShcIi4uLy4uL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbWF4XCIpO1xuXG52YXIgbmFtZSA9ICdtYXgnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbGFyZ2VyJ107XG52YXIgY3JlYXRlTWF4VHJhbnNmb3JtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGxhcmdlciA9IF9yZWYubGFyZ2VyO1xuICB2YXIgbWF4ID0gKDAsIF9tYXguY3JlYXRlTWF4KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGxhcmdlcjogbGFyZ2VyXG4gIH0pO1xuICAvKipcbiAgICogQXR0YWNoIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIHRvIG1hdGgubWF4XG4gICAqIEFkZHMgYSBwcm9wZXJ0eSB0cmFuc2Zvcm0gY29udGFpbmluZyB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBUaGlzIHRyYW5zZm9ybSBjaGFuZ2VkIHRoZSBsYXN0IGBkaW1gIHBhcmFtZXRlciBvZiBmdW5jdGlvbiBtYXhcbiAgICogZnJvbSBvbmUtYmFzZWQgdG8gemVybyBiYXNlZFxuICAgKi9cblxuICByZXR1cm4gdHlwZWQoJ21heCcsIHtcbiAgICAnLi4uYW55JzogZnVuY3Rpb24gYW55KGFyZ3MpIHtcbiAgICAgIC8vIGNoYW5nZSBsYXN0IGFyZ3VtZW50IGRpbSBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvLWJhc2VkXG4gICAgICBpZiAoYXJncy5sZW5ndGggPT09IDIgJiYgKDAsIF9pcy5pc0NvbGxlY3Rpb24pKGFyZ3NbMF0pKSB7XG4gICAgICAgIHZhciBkaW0gPSBhcmdzWzFdO1xuXG4gICAgICAgIGlmICgoMCwgX2lzLmlzTnVtYmVyKShkaW0pKSB7XG4gICAgICAgICAgYXJnc1sxXSA9IGRpbSAtIDE7XG4gICAgICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc0JpZ051bWJlcikoZGltKSkge1xuICAgICAgICAgIGFyZ3NbMV0gPSBkaW0ubWludXMoMSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1heC5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyAoMCwgX2Vycm9yVHJhbnNmb3JtLmVycm9yVHJhbnNmb3JtKShlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59LCB7XG4gIGlzVHJhbnNmb3JtRnVuY3Rpb246IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVNYXhUcmFuc2Zvcm0gPSBjcmVhdGVNYXhUcmFuc2Zvcm07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU1lYW5UcmFuc2Zvcm0gPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2Vycm9yVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vdXRpbHMvZXJyb3JUcmFuc2Zvcm1cIik7XG5cbnZhciBfbWVhbiA9IHJlcXVpcmUoXCIuLi8uLi9mdW5jdGlvbi9zdGF0aXN0aWNzL21lYW5cIik7XG5cbnZhciBuYW1lID0gJ21lYW4nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnYWRkJywgJ2RpdmlkZSddO1xudmFyIGNyZWF0ZU1lYW5UcmFuc2Zvcm0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgYWRkID0gX3JlZi5hZGQsXG4gICAgICBkaXZpZGUgPSBfcmVmLmRpdmlkZTtcbiAgdmFyIG1lYW4gPSAoMCwgX21lYW4uY3JlYXRlTWVhbikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBhZGQ6IGFkZCxcbiAgICBkaXZpZGU6IGRpdmlkZVxuICB9KTtcbiAgLyoqXG4gICAqIEF0dGFjaCBhIHRyYW5zZm9ybSBmdW5jdGlvbiB0byBtYXRoLm1lYW5cbiAgICogQWRkcyBhIHByb3BlcnR5IHRyYW5zZm9ybSBjb250YWluaW5nIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24uXG4gICAqXG4gICAqIFRoaXMgdHJhbnNmb3JtIGNoYW5nZWQgdGhlIGxhc3QgYGRpbWAgcGFyYW1ldGVyIG9mIGZ1bmN0aW9uIG1lYW5cbiAgICogZnJvbSBvbmUtYmFzZWQgdG8gemVybyBiYXNlZFxuICAgKi9cblxuICByZXR1cm4gdHlwZWQoJ21lYW4nLCB7XG4gICAgJy4uLmFueSc6IGZ1bmN0aW9uIGFueShhcmdzKSB7XG4gICAgICAvLyBjaGFuZ2UgbGFzdCBhcmd1bWVudCBkaW0gZnJvbSBvbmUtYmFzZWQgdG8gemVyby1iYXNlZFxuICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAyICYmICgwLCBfaXMuaXNDb2xsZWN0aW9uKShhcmdzWzBdKSkge1xuICAgICAgICB2YXIgZGltID0gYXJnc1sxXTtcblxuICAgICAgICBpZiAoKDAsIF9pcy5pc051bWJlcikoZGltKSkge1xuICAgICAgICAgIGFyZ3NbMV0gPSBkaW0gLSAxO1xuICAgICAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKGRpbSkpIHtcbiAgICAgICAgICBhcmdzWzFdID0gZGltLm1pbnVzKDEpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtZWFuLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93ICgwLCBfZXJyb3JUcmFuc2Zvcm0uZXJyb3JUcmFuc2Zvcm0pKGVycik7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn0sIHtcbiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU1lYW5UcmFuc2Zvcm0gPSBjcmVhdGVNZWFuVHJhbnNmb3JtOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVNaW5UcmFuc2Zvcm0gPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2Vycm9yVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vdXRpbHMvZXJyb3JUcmFuc2Zvcm1cIik7XG5cbnZhciBfbWluID0gcmVxdWlyZShcIi4uLy4uL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbWluXCIpO1xuXG52YXIgbmFtZSA9ICdtaW4nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnc21hbGxlciddO1xudmFyIGNyZWF0ZU1pblRyYW5zZm9ybSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBzbWFsbGVyID0gX3JlZi5zbWFsbGVyO1xuICB2YXIgbWluID0gKDAsIF9taW4uY3JlYXRlTWluKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIHNtYWxsZXI6IHNtYWxsZXJcbiAgfSk7XG4gIC8qKlxuICAgKiBBdHRhY2ggYSB0cmFuc2Zvcm0gZnVuY3Rpb24gdG8gbWF0aC5taW5cbiAgICogQWRkcyBhIHByb3BlcnR5IHRyYW5zZm9ybSBjb250YWluaW5nIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24uXG4gICAqXG4gICAqIFRoaXMgdHJhbnNmb3JtIGNoYW5nZWQgdGhlIGxhc3QgYGRpbWAgcGFyYW1ldGVyIG9mIGZ1bmN0aW9uIG1pblxuICAgKiBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvIGJhc2VkXG4gICAqL1xuXG4gIHJldHVybiB0eXBlZCgnbWluJywge1xuICAgICcuLi5hbnknOiBmdW5jdGlvbiBhbnkoYXJncykge1xuICAgICAgLy8gY2hhbmdlIGxhc3QgYXJndW1lbnQgZGltIGZyb20gb25lLWJhc2VkIHRvIHplcm8tYmFzZWRcbiAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMiAmJiAoMCwgX2lzLmlzQ29sbGVjdGlvbikoYXJnc1swXSkpIHtcbiAgICAgICAgdmFyIGRpbSA9IGFyZ3NbMV07XG5cbiAgICAgICAgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKGRpbSkpIHtcbiAgICAgICAgICBhcmdzWzFdID0gZGltIC0gMTtcbiAgICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShkaW0pKSB7XG4gICAgICAgICAgYXJnc1sxXSA9IGRpbS5taW51cygxKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbWluLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93ICgwLCBfZXJyb3JUcmFuc2Zvcm0uZXJyb3JUcmFuc2Zvcm0pKGVycik7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn0sIHtcbiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU1pblRyYW5zZm9ybSA9IGNyZWF0ZU1pblRyYW5zZm9ybTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUmFuZ2VUcmFuc2Zvcm0gPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX3JhbmdlID0gcmVxdWlyZShcIi4uLy4uL2Z1bmN0aW9uL21hdHJpeC9yYW5nZVwiKTtcblxudmFyIG5hbWUgPSAncmFuZ2UnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJz9tYXRyaXgnLCAnP2JpZ251bWJlcicsICdzbWFsbGVyJywgJ3NtYWxsZXJFcScsICdsYXJnZXInLCAnbGFyZ2VyRXEnXTtcbnZhciBjcmVhdGVSYW5nZVRyYW5zZm9ybSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgYmlnbnVtYmVyID0gX3JlZi5iaWdudW1iZXIsXG4gICAgICBzbWFsbGVyID0gX3JlZi5zbWFsbGVyLFxuICAgICAgc21hbGxlckVxID0gX3JlZi5zbWFsbGVyRXEsXG4gICAgICBsYXJnZXIgPSBfcmVmLmxhcmdlcixcbiAgICAgIGxhcmdlckVxID0gX3JlZi5sYXJnZXJFcTtcbiAgdmFyIHJhbmdlID0gKDAsIF9yYW5nZS5jcmVhdGVSYW5nZSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBjb25maWc6IGNvbmZpZyxcbiAgICBtYXRyaXg6IG1hdHJpeCxcbiAgICBiaWdudW1iZXI6IGJpZ251bWJlcixcbiAgICBzbWFsbGVyOiBzbWFsbGVyLFxuICAgIHNtYWxsZXJFcTogc21hbGxlckVxLFxuICAgIGxhcmdlcjogbGFyZ2VyLFxuICAgIGxhcmdlckVxOiBsYXJnZXJFcVxuICB9KTtcbiAgLyoqXG4gICAqIEF0dGFjaCBhIHRyYW5zZm9ybSBmdW5jdGlvbiB0byBtYXRoLnJhbmdlXG4gICAqIEFkZHMgYSBwcm9wZXJ0eSB0cmFuc2Zvcm0gY29udGFpbmluZyB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBUaGlzIHRyYW5zZm9ybSBjcmVhdGVzIGEgcmFuZ2Ugd2hpY2ggaW5jbHVkZXMgdGhlIGVuZCB2YWx1ZVxuICAgKi9cblxuICByZXR1cm4gdHlwZWQoJ3JhbmdlJywge1xuICAgICcuLi5hbnknOiBmdW5jdGlvbiBhbnkoYXJncykge1xuICAgICAgdmFyIGxhc3RJbmRleCA9IGFyZ3MubGVuZ3RoIC0gMTtcbiAgICAgIHZhciBsYXN0ID0gYXJnc1tsYXN0SW5kZXhdO1xuXG4gICAgICBpZiAodHlwZW9mIGxhc3QgIT09ICdib29sZWFuJykge1xuICAgICAgICAvLyBhcHBlbmQgYSBwYXJhbWV0ZXIgaW5jbHVkZUVuZD10cnVlXG4gICAgICAgIGFyZ3MucHVzaCh0cnVlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJhbmdlLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgIH1cbiAgfSk7XG59LCB7XG4gIGlzVHJhbnNmb3JtRnVuY3Rpb246IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVSYW5nZVRyYW5zZm9ybSA9IGNyZWF0ZVJhbmdlVHJhbnNmb3JtOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVSb3dUcmFuc2Zvcm0gPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX3JvdyA9IHJlcXVpcmUoXCIuLi8uLi9mdW5jdGlvbi9tYXRyaXgvcm93XCIpO1xuXG52YXIgX2Vycm9yVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vdXRpbHMvZXJyb3JUcmFuc2Zvcm1cIik7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBuYW1lID0gJ3Jvdyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdJbmRleCcsICdtYXRyaXgnLCAncmFuZ2UnXTtcbi8qKlxuICogQXR0YWNoIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIHRvIG1hdHJpeC5jb2x1bW5cbiAqIEFkZHMgYSBwcm9wZXJ0eSB0cmFuc2Zvcm0gY29udGFpbmluZyB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uLlxuICpcbiAqIFRoaXMgdHJhbnNmb3JtIGNoYW5nZWQgdGhlIGxhc3QgYGluZGV4YCBwYXJhbWV0ZXIgb2YgZnVuY3Rpb24gY29sdW1uXG4gKiBmcm9tIHplcm8tYmFzZWQgdG8gb25lLWJhc2VkXG4gKi9cblxudmFyIGNyZWF0ZVJvd1RyYW5zZm9ybSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBJbmRleCA9IF9yZWYuSW5kZXgsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIHJhbmdlID0gX3JlZi5yYW5nZTtcbiAgdmFyIHJvdyA9ICgwLCBfcm93LmNyZWF0ZVJvdykoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBJbmRleDogSW5kZXgsXG4gICAgbWF0cml4OiBtYXRyaXgsXG4gICAgcmFuZ2U6IHJhbmdlXG4gIH0pOyAvLyBAc2VlOiBjb21tZW50IG9mIHJvdyBpdHNlbGZcblxuICByZXR1cm4gdHlwZWQoJ3JvdycsIHtcbiAgICAnLi4uYW55JzogZnVuY3Rpb24gYW55KGFyZ3MpIHtcbiAgICAgIC8vIGNoYW5nZSBsYXN0IGFyZ3VtZW50IGZyb20gemVyby1iYXNlZCB0byBvbmUtYmFzZWRcbiAgICAgIHZhciBsYXN0SW5kZXggPSBhcmdzLmxlbmd0aCAtIDE7XG4gICAgICB2YXIgbGFzdCA9IGFyZ3NbbGFzdEluZGV4XTtcblxuICAgICAgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKGxhc3QpKSB7XG4gICAgICAgIGFyZ3NbbGFzdEluZGV4XSA9IGxhc3QgLSAxO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gcm93LmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93ICgwLCBfZXJyb3JUcmFuc2Zvcm0uZXJyb3JUcmFuc2Zvcm0pKGVycik7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn0sIHtcbiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJvd1RyYW5zZm9ybSA9IGNyZWF0ZVJvd1RyYW5zZm9ybTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3RkVHJhbnNmb3JtID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9zdGQgPSByZXF1aXJlKFwiLi4vLi4vZnVuY3Rpb24vc3RhdGlzdGljcy9zdGRcIik7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZXJyb3JUcmFuc2Zvcm0gPSByZXF1aXJlKFwiLi91dGlscy9lcnJvclRyYW5zZm9ybVwiKTtcblxudmFyIG5hbWUgPSAnc3RkJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ3NxcnQnLCAndmFyaWFuY2UnXTtcbi8qKlxuICogQXR0YWNoIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIHRvIG1hdGguc3RkXG4gKiBBZGRzIGEgcHJvcGVydHkgdHJhbnNmb3JtIGNvbnRhaW5pbmcgdGhlIHRyYW5zZm9ybSBmdW5jdGlvbi5cbiAqXG4gKiBUaGlzIHRyYW5zZm9ybSBjaGFuZ2VkIHRoZSBgZGltYCBwYXJhbWV0ZXIgb2YgZnVuY3Rpb24gc3RkXG4gKiBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvIGJhc2VkXG4gKi9cblxudmFyIGNyZWF0ZVN0ZFRyYW5zZm9ybSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBzcXJ0ID0gX3JlZi5zcXJ0LFxuICAgICAgdmFyaWFuY2UgPSBfcmVmLnZhcmlhbmNlO1xuICB2YXIgc3RkID0gKDAsIF9zdGQuY3JlYXRlU3RkKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIHNxcnQ6IHNxcnQsXG4gICAgdmFyaWFuY2U6IHZhcmlhbmNlXG4gIH0pO1xuICByZXR1cm4gdHlwZWQoJ3N0ZCcsIHtcbiAgICAnLi4uYW55JzogZnVuY3Rpb24gYW55KGFyZ3MpIHtcbiAgICAgIC8vIGNoYW5nZSBsYXN0IGFyZ3VtZW50IGRpbSBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvLWJhc2VkXG4gICAgICBpZiAoYXJncy5sZW5ndGggPj0gMiAmJiAoMCwgX2lzLmlzQ29sbGVjdGlvbikoYXJnc1swXSkpIHtcbiAgICAgICAgdmFyIGRpbSA9IGFyZ3NbMV07XG5cbiAgICAgICAgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKGRpbSkpIHtcbiAgICAgICAgICBhcmdzWzFdID0gZGltIC0gMTtcbiAgICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShkaW0pKSB7XG4gICAgICAgICAgYXJnc1sxXSA9IGRpbS5taW51cygxKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gc3RkLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93ICgwLCBfZXJyb3JUcmFuc2Zvcm0uZXJyb3JUcmFuc2Zvcm0pKGVycik7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn0sIHtcbiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVN0ZFRyYW5zZm9ybSA9IGNyZWF0ZVN0ZFRyYW5zZm9ybTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3Vic2V0VHJhbnNmb3JtID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9lcnJvclRyYW5zZm9ybSA9IHJlcXVpcmUoXCIuL3V0aWxzL2Vycm9yVHJhbnNmb3JtXCIpO1xuXG52YXIgX3N1YnNldCA9IHJlcXVpcmUoXCIuLi8uLi9mdW5jdGlvbi9tYXRyaXgvc3Vic2V0XCIpO1xuXG52YXIgbmFtZSA9ICdzdWJzZXQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4J107XG52YXIgY3JlYXRlU3Vic2V0VHJhbnNmb3JtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4O1xuICB2YXIgc3Vic2V0ID0gKDAsIF9zdWJzZXQuY3JlYXRlU3Vic2V0KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIG1hdHJpeDogbWF0cml4XG4gIH0pO1xuICAvKipcbiAgICogQXR0YWNoIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIHRvIG1hdGguc3Vic2V0XG4gICAqIEFkZHMgYSBwcm9wZXJ0eSB0cmFuc2Zvcm0gY29udGFpbmluZyB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBUaGlzIHRyYW5zZm9ybSBjcmVhdGVzIGEgcmFuZ2Ugd2hpY2ggaW5jbHVkZXMgdGhlIGVuZCB2YWx1ZVxuICAgKi9cblxuICByZXR1cm4gdHlwZWQoJ3N1YnNldCcsIHtcbiAgICAnLi4uYW55JzogZnVuY3Rpb24gYW55KGFyZ3MpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBzdWJzZXQuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgKDAsIF9lcnJvclRyYW5zZm9ybS5lcnJvclRyYW5zZm9ybSkoZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufSwge1xuICBpc1RyYW5zZm9ybUZ1bmN0aW9uOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3Vic2V0VHJhbnNmb3JtID0gY3JlYXRlU3Vic2V0VHJhbnNmb3JtOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTdW1UcmFuc2Zvcm0gPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2Vycm9yVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vdXRpbHMvZXJyb3JUcmFuc2Zvcm1cIik7XG5cbnZhciBfc3VtID0gcmVxdWlyZShcIi4uLy4uL2Z1bmN0aW9uL3N0YXRpc3RpY3Mvc3VtXCIpO1xuXG4vKipcbiAqIEF0dGFjaCBhIHRyYW5zZm9ybSBmdW5jdGlvbiB0byBtYXRoLnN1bVxuICogQWRkcyBhIHByb3BlcnR5IHRyYW5zZm9ybSBjb250YWluaW5nIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24uXG4gKlxuICogVGhpcyB0cmFuc2Zvcm0gY2hhbmdlZCB0aGUgbGFzdCBgZGltYCBwYXJhbWV0ZXIgb2YgZnVuY3Rpb24gbWVhblxuICogZnJvbSBvbmUtYmFzZWQgdG8gemVybyBiYXNlZFxuICovXG52YXIgbmFtZSA9ICdzdW0nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ2FkZCcsICc/YmlnbnVtYmVyJywgJz9mcmFjdGlvbiddO1xudmFyIGNyZWF0ZVN1bVRyYW5zZm9ybSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIGFkZCA9IF9yZWYuYWRkLFxuICAgICAgYmlnbnVtYmVyID0gX3JlZi5iaWdudW1iZXIsXG4gICAgICBmcmFjdGlvbiA9IF9yZWYuZnJhY3Rpb247XG4gIHZhciBzdW0gPSAoMCwgX3N1bS5jcmVhdGVTdW0pKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgY29uZmlnOiBjb25maWcsXG4gICAgYWRkOiBhZGQsXG4gICAgYmlnbnVtYmVyOiBiaWdudW1iZXIsXG4gICAgZnJhY3Rpb246IGZyYWN0aW9uXG4gIH0pO1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICcuLi5hbnknOiBmdW5jdGlvbiBhbnkoYXJncykge1xuICAgICAgLy8gY2hhbmdlIGxhc3QgYXJndW1lbnQgZGltIGZyb20gb25lLWJhc2VkIHRvIHplcm8tYmFzZWRcbiAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMiAmJiAoMCwgX2lzLmlzQ29sbGVjdGlvbikoYXJnc1swXSkpIHtcbiAgICAgICAgdmFyIGRpbSA9IGFyZ3NbMV07XG5cbiAgICAgICAgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKGRpbSkpIHtcbiAgICAgICAgICBhcmdzWzFdID0gZGltIC0gMTtcbiAgICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShkaW0pKSB7XG4gICAgICAgICAgYXJnc1sxXSA9IGRpbS5taW51cygxKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gc3VtLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93ICgwLCBfZXJyb3JUcmFuc2Zvcm0uZXJyb3JUcmFuc2Zvcm0pKGVycik7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn0sIHtcbiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVN1bVRyYW5zZm9ybSA9IGNyZWF0ZVN1bVRyYW5zZm9ybTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tcGlsZUlubGluZUV4cHJlc3Npb24gPSBjb21waWxlSW5saW5lRXhwcmVzc2lvbjtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9pc1wiKTtcblxuLyoqXG4gKiBDb21waWxlIGFuIGlubGluZSBleHByZXNzaW9uIGxpa2UgXCJ4ID4gMFwiXG4gKiBAcGFyYW0ge05vZGV9IGV4cHJlc3Npb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXRoXG4gKiBAcGFyYW0ge09iamVjdH0gc2NvcGVcbiAqIEByZXR1cm4ge2Z1bmN0aW9ufSBSZXR1cm5zIGEgZnVuY3Rpb24gd2l0aCBvbmUgYXJndW1lbnQgd2hpY2ggZmlsbHMgaW4gdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkIHZhcmlhYmxlIChsaWtlIFwieFwiKSBhbmQgZXZhbHVhdGVzIHRoZSBleHByZXNzaW9uXG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGVJbmxpbmVFeHByZXNzaW9uKGV4cHJlc3Npb24sIG1hdGgsIHNjb3BlKSB7XG4gIC8vIGZpbmQgYW4gdW5kZWZpbmVkIHN5bWJvbFxuICB2YXIgc3ltYm9sID0gZXhwcmVzc2lvbi5maWx0ZXIoZnVuY3Rpb24gKG5vZGUpIHtcbiAgICByZXR1cm4gKDAsIF9pcy5pc1N5bWJvbE5vZGUpKG5vZGUpICYmICEobm9kZS5uYW1lIGluIG1hdGgpICYmICEobm9kZS5uYW1lIGluIHNjb3BlKTtcbiAgfSlbMF07XG5cbiAgaWYgKCFzeW1ib2wpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHVuZGVmaW5lZCB2YXJpYWJsZSBmb3VuZCBpbiBpbmxpbmUgZXhwcmVzc2lvbiBcIicgKyBleHByZXNzaW9uICsgJ1wiJyk7XG4gIH0gLy8gY3JlYXRlIGEgdGVzdCBmdW5jdGlvbiBmb3IgdGhpcyBlcXVhdGlvblxuXG5cbiAgdmFyIG5hbWUgPSBzeW1ib2wubmFtZTsgLy8gdmFyaWFibGUgbmFtZVxuXG4gIHZhciBzdWJTY29wZSA9IE9iamVjdC5jcmVhdGUoc2NvcGUpO1xuICB2YXIgZXEgPSBleHByZXNzaW9uLmNvbXBpbGUoKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlubGluZUV4cHJlc3Npb24oeCkge1xuICAgIHN1YlNjb3BlW25hbWVdID0geDtcbiAgICByZXR1cm4gZXEuZXZhbHVhdGUoc3ViU2NvcGUpO1xuICB9O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lcnJvclRyYW5zZm9ybSA9IGVycm9yVHJhbnNmb3JtO1xuXG52YXIgX0luZGV4RXJyb3IgPSByZXF1aXJlKFwiLi4vLi4vLi4vZXJyb3IvSW5kZXhFcnJvclwiKTtcblxuLyoqXG4gKiBUcmFuc2Zvcm0gemVyby1iYXNlZCBpbmRpY2VzIHRvIG9uZS1iYXNlZCBpbmRpY2VzIGluIGVycm9yc1xuICogQHBhcmFtIHtFcnJvcn0gZXJyXG4gKiBAcmV0dXJucyB7RXJyb3IgfCBJbmRleEVycm9yfSBSZXR1cm5zIHRoZSB0cmFuc2Zvcm1lZCBlcnJvclxuICovXG5mdW5jdGlvbiBlcnJvclRyYW5zZm9ybShlcnIpIHtcbiAgaWYgKGVyciAmJiBlcnIuaXNJbmRleEVycm9yKSB7XG4gICAgcmV0dXJuIG5ldyBfSW5kZXhFcnJvci5JbmRleEVycm9yKGVyci5pbmRleCArIDEsIGVyci5taW4gKyAxLCBlcnIubWF4ICE9PSB1bmRlZmluZWQgPyBlcnIubWF4ICsgMSA6IHVuZGVmaW5lZCk7XG4gIH1cblxuICByZXR1cm4gZXJyO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVWYXJpYW5jZVRyYW5zZm9ybSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZXJyb3JUcmFuc2Zvcm0gPSByZXF1aXJlKFwiLi91dGlscy9lcnJvclRyYW5zZm9ybVwiKTtcblxudmFyIF92YXJpYW5jZSA9IHJlcXVpcmUoXCIuLi8uLi9mdW5jdGlvbi9zdGF0aXN0aWNzL3ZhcmlhbmNlXCIpO1xuXG52YXIgbmFtZSA9ICd2YXJpYW5jZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdhZGQnLCAnc3VidHJhY3QnLCAnbXVsdGlwbHknLCAnZGl2aWRlJywgJ2FwcGx5JywgJ2lzTmFOJ107XG4vKipcbiAqIEF0dGFjaCBhIHRyYW5zZm9ybSBmdW5jdGlvbiB0byBtYXRoLnZhclxuICogQWRkcyBhIHByb3BlcnR5IHRyYW5zZm9ybSBjb250YWluaW5nIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24uXG4gKlxuICogVGhpcyB0cmFuc2Zvcm0gY2hhbmdlZCB0aGUgYGRpbWAgcGFyYW1ldGVyIG9mIGZ1bmN0aW9uIHZhclxuICogZnJvbSBvbmUtYmFzZWQgdG8gemVybyBiYXNlZFxuICovXG5cbnZhciBjcmVhdGVWYXJpYW5jZVRyYW5zZm9ybSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBhZGQgPSBfcmVmLmFkZCxcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCxcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSxcbiAgICAgIGRpdmlkZSA9IF9yZWYuZGl2aWRlLFxuICAgICAgYXBwbHkgPSBfcmVmLmFwcGx5LFxuICAgICAgaXNOYU4gPSBfcmVmLmlzTmFOO1xuICB2YXIgdmFyaWFuY2UgPSAoMCwgX3ZhcmlhbmNlLmNyZWF0ZVZhcmlhbmNlKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGFkZDogYWRkLFxuICAgIHN1YnRyYWN0OiBzdWJ0cmFjdCxcbiAgICBtdWx0aXBseTogbXVsdGlwbHksXG4gICAgZGl2aWRlOiBkaXZpZGUsXG4gICAgYXBwbHk6IGFwcGx5LFxuICAgIGlzTmFOOiBpc05hTlxuICB9KTtcbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnLi4uYW55JzogZnVuY3Rpb24gYW55KGFyZ3MpIHtcbiAgICAgIC8vIGNoYW5nZSBsYXN0IGFyZ3VtZW50IGRpbSBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvLWJhc2VkXG4gICAgICBpZiAoYXJncy5sZW5ndGggPj0gMiAmJiAoMCwgX2lzLmlzQ29sbGVjdGlvbikoYXJnc1swXSkpIHtcbiAgICAgICAgdmFyIGRpbSA9IGFyZ3NbMV07XG5cbiAgICAgICAgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKGRpbSkpIHtcbiAgICAgICAgICBhcmdzWzFdID0gZGltIC0gMTtcbiAgICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShkaW0pKSB7XG4gICAgICAgICAgYXJnc1sxXSA9IGRpbS5taW51cygxKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdmFyaWFuY2UuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgKDAsIF9lcnJvclRyYW5zZm9ybS5lcnJvclRyYW5zZm9ybSkoZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufSwge1xuICBpc1RyYW5zZm9ybUZ1bmN0aW9uOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlVmFyaWFuY2VUcmFuc2Zvcm0gPSBjcmVhdGVWYXJpYW5jZVRyYW5zZm9ybTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVR5cGVkXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF90eXBlZC5jcmVhdGVUeXBlZDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVSZXN1bHRTZXRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX1Jlc3VsdFNldC5jcmVhdGVSZXN1bHRTZXQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQmlnTnVtYmVyQ2xhc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0JpZ051bWJlci5jcmVhdGVCaWdOdW1iZXJDbGFzcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDb21wbGV4Q2xhc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0NvbXBsZXguY3JlYXRlQ29tcGxleENsYXNzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUZyYWN0aW9uQ2xhc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0ZyYWN0aW9uLmNyZWF0ZUZyYWN0aW9uQ2xhc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUmFuZ2VDbGFzc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfUmFuZ2UuY3JlYXRlUmFuZ2VDbGFzcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVNYXRyaXhDbGFzc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfTWF0cml4LmNyZWF0ZU1hdHJpeENsYXNzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZURlbnNlTWF0cml4Q2xhc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0RlbnNlTWF0cml4LmNyZWF0ZURlbnNlTWF0cml4Q2xhc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ2xvbmVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2Nsb25lLmNyZWF0ZUNsb25lO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUlzSW50ZWdlclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXNJbnRlZ2VyLmNyZWF0ZUlzSW50ZWdlcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVJc05lZ2F0aXZlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pc05lZ2F0aXZlLmNyZWF0ZUlzTmVnYXRpdmU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSXNOdW1lcmljXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pc051bWVyaWMuY3JlYXRlSXNOdW1lcmljO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUhhc051bWVyaWNWYWx1ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaGFzTnVtZXJpY1ZhbHVlLmNyZWF0ZUhhc051bWVyaWNWYWx1ZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVJc1Bvc2l0aXZlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pc1Bvc2l0aXZlLmNyZWF0ZUlzUG9zaXRpdmU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSXNaZXJvXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pc1plcm8uY3JlYXRlSXNaZXJvO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUlzTmFOXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pc05hTi5jcmVhdGVJc05hTjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVUeXBlT2ZcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3R5cGVPZi5jcmVhdGVUeXBlT2Y7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRGVwcmVjYXRlZFR5cGVvZlwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfdHlwZU9mLmNyZWF0ZURlcHJlY2F0ZWRUeXBlb2Y7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRXF1YWxTY2FsYXJcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2VxdWFsU2NhbGFyLmNyZWF0ZUVxdWFsU2NhbGFyO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNwYXJzZU1hdHJpeENsYXNzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9TcGFyc2VNYXRyaXguY3JlYXRlU3BhcnNlTWF0cml4Q2xhc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTnVtYmVyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9udW1iZXIuY3JlYXRlTnVtYmVyO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVN0cmluZ1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc3RyaW5nLmNyZWF0ZVN0cmluZztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVCb29sZWFuXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9ib29sZWFuLmNyZWF0ZUJvb2xlYW47XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQmlnbnVtYmVyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9iaWdudW1iZXIuY3JlYXRlQmlnbnVtYmVyO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvbXBsZXhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbXBsZXguY3JlYXRlQ29tcGxleDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVGcmFjdGlvblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZnJhY3Rpb24uY3JlYXRlRnJhY3Rpb247XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTWF0cml4XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9tYXRyaXguY3JlYXRlTWF0cml4O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNwbGl0VW5pdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc3BsaXRVbml0LmNyZWF0ZVNwbGl0VW5pdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVVbmFyeU1pbnVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF91bmFyeU1pbnVzLmNyZWF0ZVVuYXJ5TWludXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlVW5hcnlQbHVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF91bmFyeVBsdXMuY3JlYXRlVW5hcnlQbHVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUFic1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYWJzLmNyZWF0ZUFicztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBcHBseVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYXBwbHkuY3JlYXRlQXBwbHk7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQWRkU2NhbGFyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9hZGRTY2FsYXIuY3JlYXRlQWRkU2NhbGFyO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNicnRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NicnQuY3JlYXRlQ2JydDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDZWlsXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jZWlsLmNyZWF0ZUNlaWw7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ3ViZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY3ViZS5jcmVhdGVDdWJlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUV4cFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZXhwLmNyZWF0ZUV4cDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVFeHBtMVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZXhwbS5jcmVhdGVFeHBtMTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVGaXhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2ZpeC5jcmVhdGVGaXg7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRmxvb3JcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2Zsb29yLmNyZWF0ZUZsb29yO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUdjZFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZ2NkLmNyZWF0ZUdjZDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVMY21cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2xjbS5jcmVhdGVMY207XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTG9nMTBcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2xvZy5jcmVhdGVMb2cxMDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVMb2cyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9sb2cyLmNyZWF0ZUxvZzI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTW9kXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9tb2QuY3JlYXRlTW9kO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU11bHRpcGx5U2NhbGFyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9tdWx0aXBseVNjYWxhci5jcmVhdGVNdWx0aXBseVNjYWxhcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVNdWx0aXBseVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbXVsdGlwbHkuY3JlYXRlTXVsdGlwbHk7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTnRoUm9vdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbnRoUm9vdC5jcmVhdGVOdGhSb290O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNpZ25cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3NpZ24uY3JlYXRlU2lnbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTcXJ0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zcXJ0LmNyZWF0ZVNxcnQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU3F1YXJlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zcXVhcmUuY3JlYXRlU3F1YXJlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVN1YnRyYWN0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zdWJ0cmFjdC5jcmVhdGVTdWJ0cmFjdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVYZ2NkXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF94Z2NkLmNyZWF0ZVhnY2Q7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRG90TXVsdGlwbHlcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RvdE11bHRpcGx5LmNyZWF0ZURvdE11bHRpcGx5O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUJpdEFuZFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYml0QW5kLmNyZWF0ZUJpdEFuZDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVCaXROb3RcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2JpdE5vdC5jcmVhdGVCaXROb3Q7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQml0T3JcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2JpdE9yLmNyZWF0ZUJpdE9yO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUJpdFhvclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYml0WG9yLmNyZWF0ZUJpdFhvcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBcmdcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2FyZy5jcmVhdGVBcmc7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ29ualwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29uai5jcmVhdGVDb25qO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUltXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pbS5jcmVhdGVJbTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVSZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcmUuY3JlYXRlUmU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTm90XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9ub3QuY3JlYXRlTm90O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU9yXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9vci5jcmVhdGVPcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVYb3JcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3hvci5jcmVhdGVYb3I7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ29uY2F0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb25jYXQuY3JlYXRlQ29uY2F0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvbHVtblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29sdW1uLmNyZWF0ZUNvbHVtbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDcm9zc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY3Jvc3MuY3JlYXRlQ3Jvc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRGlhZ1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGlhZy5jcmVhdGVEaWFnO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUV5ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZXllLmNyZWF0ZUV5ZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVGaWx0ZXJcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2ZpbHRlci5jcmVhdGVGaWx0ZXI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRmxhdHRlblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZmxhdHRlbi5jcmVhdGVGbGF0dGVuO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUZvckVhY2hcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2ZvckVhY2guY3JlYXRlRm9yRWFjaDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVHZXRNYXRyaXhEYXRhVHlwZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZ2V0TWF0cml4RGF0YVR5cGUuY3JlYXRlR2V0TWF0cml4RGF0YVR5cGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSWRlbnRpdHlcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lkZW50aXR5LmNyZWF0ZUlkZW50aXR5O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUtyb25cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2tyb24uY3JlYXRlS3JvbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVNYXBcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX21hcC5jcmVhdGVNYXA7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlT25lc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfb25lcy5jcmVhdGVPbmVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVJhbmdlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9yYW5nZS5jcmVhdGVSYW5nZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVSZXNoYXBlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9yZXNoYXBlLmNyZWF0ZVJlc2hhcGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUmVzaXplXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9yZXNpemUuY3JlYXRlUmVzaXplO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVJvd1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcm93LmNyZWF0ZVJvdztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTaXplXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zaXplLmNyZWF0ZVNpemU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU3F1ZWV6ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc3F1ZWV6ZS5jcmVhdGVTcXVlZXplO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVN1YnNldFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc3Vic2V0LmNyZWF0ZVN1YnNldDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVUcmFuc3Bvc2VcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3RyYW5zcG9zZS5jcmVhdGVUcmFuc3Bvc2U7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ3RyYW5zcG9zZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY3RyYW5zcG9zZS5jcmVhdGVDdHJhbnNwb3NlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVplcm9zXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF96ZXJvcy5jcmVhdGVaZXJvcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVFcmZcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2VyZi5jcmVhdGVFcmY7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTW9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbW9kZS5jcmVhdGVNb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVByb2RcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3Byb2QuY3JlYXRlUHJvZDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVGb3JtYXRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2Zvcm1hdC5jcmVhdGVGb3JtYXQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUHJpbnRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3ByaW50LmNyZWF0ZVByaW50O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVRvXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF90by5jcmVhdGVUbztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVJc1ByaW1lXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pc1ByaW1lLmNyZWF0ZUlzUHJpbWU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTnVtZXJpY1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbnVtZXJpYy5jcmVhdGVOdW1lcmljO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZURpdmlkZVNjYWxhclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGl2aWRlU2NhbGFyLmNyZWF0ZURpdmlkZVNjYWxhcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVQb3dcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3Bvdy5jcmVhdGVQb3c7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUm91bmRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3JvdW5kLmNyZWF0ZVJvdW5kO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUxvZ1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbG9nMy5jcmVhdGVMb2c7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTG9nMXBcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2xvZzFwLmNyZWF0ZUxvZzFwO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU50aFJvb3RzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9udGhSb290cy5jcmVhdGVOdGhSb290cztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVEb3RQb3dcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RvdFBvdy5jcmVhdGVEb3RQb3c7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRG90RGl2aWRlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kb3REaXZpZGUuY3JlYXRlRG90RGl2aWRlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUxzb2x2ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbHNvbHZlLmNyZWF0ZUxzb2x2ZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVVc29sdmVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3Vzb2x2ZS5jcmVhdGVVc29sdmU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTGVmdFNoaWZ0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9sZWZ0U2hpZnQuY3JlYXRlTGVmdFNoaWZ0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVJpZ2h0QXJpdGhTaGlmdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcmlnaHRBcml0aFNoaWZ0LmNyZWF0ZVJpZ2h0QXJpdGhTaGlmdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVSaWdodExvZ1NoaWZ0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9yaWdodExvZ1NoaWZ0LmNyZWF0ZVJpZ2h0TG9nU2hpZnQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQW5kXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9hbmQuY3JlYXRlQW5kO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvbXBhcmVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbXBhcmUuY3JlYXRlQ29tcGFyZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDb21wYXJlTmF0dXJhbFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29tcGFyZU5hdHVyYWwuY3JlYXRlQ29tcGFyZU5hdHVyYWw7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ29tcGFyZVRleHRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbXBhcmVUZXh0LmNyZWF0ZUNvbXBhcmVUZXh0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUVxdWFsXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9lcXVhbC5jcmVhdGVFcXVhbDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVFcXVhbFRleHRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2VxdWFsVGV4dC5jcmVhdGVFcXVhbFRleHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU21hbGxlclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc21hbGxlci5jcmVhdGVTbWFsbGVyO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNtYWxsZXJFcVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc21hbGxlckVxLmNyZWF0ZVNtYWxsZXJFcTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVMYXJnZXJcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2xhcmdlci5jcmVhdGVMYXJnZXI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTGFyZ2VyRXFcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2xhcmdlckVxLmNyZWF0ZUxhcmdlckVxO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZURlZXBFcXVhbFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVlcEVxdWFsLmNyZWF0ZURlZXBFcXVhbDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVVbmVxdWFsXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF91bmVxdWFsLmNyZWF0ZVVuZXF1YWw7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUGFydGl0aW9uU2VsZWN0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9wYXJ0aXRpb25TZWxlY3QuY3JlYXRlUGFydGl0aW9uU2VsZWN0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNvcnRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3NvcnQuY3JlYXRlU29ydDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVNYXhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX21heC5jcmVhdGVNYXg7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTWluXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9taW4uY3JlYXRlTWluO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUltbXV0YWJsZURlbnNlTWF0cml4Q2xhc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0ltbXV0YWJsZURlbnNlTWF0cml4LmNyZWF0ZUltbXV0YWJsZURlbnNlTWF0cml4Q2xhc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSW5kZXhDbGFzc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfTWF0cml4SW5kZXguY3JlYXRlSW5kZXhDbGFzcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVGaWJvbmFjY2lIZWFwQ2xhc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0ZpYm9uYWNjaUhlYXAuY3JlYXRlRmlib25hY2NpSGVhcENsYXNzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNwYUNsYXNzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9TcGEuY3JlYXRlU3BhQ2xhc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlVW5pdENsYXNzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9Vbml0LmNyZWF0ZVVuaXRDbGFzcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVVbml0RnVuY3Rpb25cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3VuaXQuY3JlYXRlVW5pdEZ1bmN0aW9uO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNwYXJzZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc3BhcnNlLmNyZWF0ZVNwYXJzZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDcmVhdGVVbml0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jcmVhdGVVbml0LmNyZWF0ZUNyZWF0ZVVuaXQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQWNvc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYWNvcy5jcmVhdGVBY29zO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUFjb3NoXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9hY29zaC5jcmVhdGVBY29zaDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBY290XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9hY290LmNyZWF0ZUFjb3Q7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQWNvdGhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2Fjb3RoLmNyZWF0ZUFjb3RoO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUFjc2NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2Fjc2MuY3JlYXRlQWNzYztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBY3NjaFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYWNzY2guY3JlYXRlQWNzY2g7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQXNlY1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYXNlYy5jcmVhdGVBc2VjO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUFzZWNoXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9hc2VjaC5jcmVhdGVBc2VjaDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBc2luXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9hc2luLmNyZWF0ZUFzaW47XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQXNpbmhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2FzaW5oLmNyZWF0ZUFzaW5oO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUF0YW5cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2F0YW4uY3JlYXRlQXRhbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBdGFuMlwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYXRhbjIuY3JlYXRlQXRhbjI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQXRhbmhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2F0YW5oLmNyZWF0ZUF0YW5oO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29zLmNyZWF0ZUNvcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDb3NoXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb3NoLmNyZWF0ZUNvc2g7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ290XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb3QuY3JlYXRlQ290O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvdGhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvdGguY3JlYXRlQ290aDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDc2NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NzYy5jcmVhdGVDc2M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ3NjaFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY3NjaC5jcmVhdGVDc2NoO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNlY1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc2VjLmNyZWF0ZVNlYztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTZWNoXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zZWNoLmNyZWF0ZVNlY2g7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU2luXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zaW4uY3JlYXRlU2luO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNpbmhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3NpbmguY3JlYXRlU2luaDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVUYW5cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3Rhbi5jcmVhdGVUYW47XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlVGFuaFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfdGFuaC5jcmVhdGVUYW5oO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNldENhcnRlc2lhblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc2V0Q2FydGVzaWFuLmNyZWF0ZVNldENhcnRlc2lhbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTZXREaWZmZXJlbmNlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zZXREaWZmZXJlbmNlLmNyZWF0ZVNldERpZmZlcmVuY2U7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU2V0RGlzdGluY3RcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3NldERpc3RpbmN0LmNyZWF0ZVNldERpc3RpbmN0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNldEludGVyc2VjdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc2V0SW50ZXJzZWN0LmNyZWF0ZVNldEludGVyc2VjdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTZXRJc1N1YnNldFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc2V0SXNTdWJzZXQuY3JlYXRlU2V0SXNTdWJzZXQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU2V0TXVsdGlwbGljaXR5XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zZXRNdWx0aXBsaWNpdHkuY3JlYXRlU2V0TXVsdGlwbGljaXR5O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNldFBvd2Vyc2V0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zZXRQb3dlcnNldC5jcmVhdGVTZXRQb3dlcnNldDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTZXRTaXplXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zZXRTaXplLmNyZWF0ZVNldFNpemU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU2V0U3ltRGlmZmVyZW5jZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc2V0U3ltRGlmZmVyZW5jZS5jcmVhdGVTZXRTeW1EaWZmZXJlbmNlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNldFVuaW9uXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zZXRVbmlvbi5jcmVhdGVTZXRVbmlvbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBZGRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2FkZC5jcmVhdGVBZGQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSHlwb3RcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2h5cG90LmNyZWF0ZUh5cG90O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU5vcm1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX25vcm0uY3JlYXRlTm9ybTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVEb3RcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RvdC5jcmVhdGVEb3Q7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlVHJhY2VcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3RyYWNlLmNyZWF0ZVRyYWNlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUluZGV4XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9mdW5jdGlvbi5jcmVhdGVJbmRleDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVOb2RlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9Ob2RlLmNyZWF0ZU5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQWNjZXNzb3JOb2RlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9BY2Nlc3Nvck5vZGUuY3JlYXRlQWNjZXNzb3JOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUFycmF5Tm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfQXJyYXlOb2RlLmNyZWF0ZUFycmF5Tm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBc3NpZ25tZW50Tm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfQXNzaWdubWVudE5vZGUuY3JlYXRlQXNzaWdubWVudE5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQmxvY2tOb2RlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9CbG9ja05vZGUuY3JlYXRlQmxvY2tOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvbmRpdGlvbmFsTm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfQ29uZGl0aW9uYWxOb2RlLmNyZWF0ZUNvbmRpdGlvbmFsTm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDb25zdGFudE5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0NvbnN0YW50Tm9kZS5jcmVhdGVDb25zdGFudE5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZS5jcmVhdGVGdW5jdGlvbkFzc2lnbm1lbnROb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUluZGV4Tm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfSW5kZXhOb2RlLmNyZWF0ZUluZGV4Tm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVPYmplY3ROb2RlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9PYmplY3ROb2RlLmNyZWF0ZU9iamVjdE5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlT3BlcmF0b3JOb2RlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9PcGVyYXRvck5vZGUuY3JlYXRlT3BlcmF0b3JOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVBhcmVudGhlc2lzTm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfUGFyZW50aGVzaXNOb2RlLmNyZWF0ZVBhcmVudGhlc2lzTm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVSYW5nZU5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX1JhbmdlTm9kZS5jcmVhdGVSYW5nZU5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUmVsYXRpb25hbE5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX1JlbGF0aW9uYWxOb2RlLmNyZWF0ZVJlbGF0aW9uYWxOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVN5bWJvbE5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX1N5bWJvbE5vZGUuY3JlYXRlU3ltYm9sTm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVGdW5jdGlvbk5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0Z1bmN0aW9uTm9kZS5jcmVhdGVGdW5jdGlvbk5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUGFyc2VcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BhcnNlLmNyZWF0ZVBhcnNlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvbXBpbGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbXBpbGUuY3JlYXRlQ29tcGlsZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVFdmFsdWF0ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZXZhbHVhdGUuY3JlYXRlRXZhbHVhdGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRGVwcmVjYXRlZEV2YWxcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2V2YWwuY3JlYXRlRGVwcmVjYXRlZEV2YWw7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUGFyc2VyQ2xhc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX1BhcnNlci5jcmVhdGVQYXJzZXJDbGFzcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVQYXJzZXJcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BhcnNlci5jcmVhdGVQYXJzZXI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTHVwXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9sdXAuY3JlYXRlTHVwO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVFyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9xci5jcmVhdGVRcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTbHVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3NsdS5jcmVhdGVTbHU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTHVzb2x2ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbHVzb2x2ZS5jcmVhdGVMdXNvbHZlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUhlbHBDbGFzc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfSGVscC5jcmVhdGVIZWxwQ2xhc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ2hhaW5DbGFzc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfQ2hhaW4uY3JlYXRlQ2hhaW5DbGFzcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVIZWxwXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9oZWxwLmNyZWF0ZUhlbHA7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ2hhaW5cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NoYWluLmNyZWF0ZUNoYWluO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZURldFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGV0LmNyZWF0ZURldDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVJbnZcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2ludi5jcmVhdGVJbnY7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRWlnc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZWlncy5jcmVhdGVFaWdzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUV4cG1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2V4cG0yLmNyZWF0ZUV4cG07XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU3FydG1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3NxcnRtLmNyZWF0ZVNxcnRtO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZURpdmlkZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGl2aWRlLmNyZWF0ZURpdmlkZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVEaXN0YW5jZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGlzdGFuY2UuY3JlYXRlRGlzdGFuY2U7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSW50ZXJzZWN0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pbnRlcnNlY3QuY3JlYXRlSW50ZXJzZWN0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVN1bVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc3VtLmNyZWF0ZVN1bTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVNZWFuXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9tZWFuLmNyZWF0ZU1lYW47XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTWVkaWFuXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9tZWRpYW4uY3JlYXRlTWVkaWFuO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU1hZFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbWFkLmNyZWF0ZU1hZDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVWYXJpYW5jZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfdmFyaWFuY2UuY3JlYXRlVmFyaWFuY2U7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRGVwcmVjYXRlZFZhclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfdmFyaWFuY2UuY3JlYXRlRGVwcmVjYXRlZFZhcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVRdWFudGlsZVNlcVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcXVhbnRpbGVTZXEuY3JlYXRlUXVhbnRpbGVTZXE7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU3RkXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zdGQuY3JlYXRlU3RkO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvbWJpbmF0aW9uc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29tYmluYXRpb25zLmNyZWF0ZUNvbWJpbmF0aW9ucztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDb21iaW5hdGlvbnNXaXRoUmVwXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb21iaW5hdGlvbnNXaXRoUmVwLmNyZWF0ZUNvbWJpbmF0aW9uc1dpdGhSZXA7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlR2FtbWFcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2dhbW1hLmNyZWF0ZUdhbW1hO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUZhY3RvcmlhbFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZmFjdG9yaWFsLmNyZWF0ZUZhY3RvcmlhbDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVLbGRpdmVyZ2VuY2VcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2tsZGl2ZXJnZW5jZS5jcmVhdGVLbGRpdmVyZ2VuY2U7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTXVsdGlub21pYWxcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX211bHRpbm9taWFsLmNyZWF0ZU11bHRpbm9taWFsO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVBlcm11dGF0aW9uc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGVybXV0YXRpb25zLmNyZWF0ZVBlcm11dGF0aW9ucztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVQaWNrUmFuZG9tXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waWNrUmFuZG9tLmNyZWF0ZVBpY2tSYW5kb207XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUmFuZG9tXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9yYW5kb20uY3JlYXRlUmFuZG9tO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVJhbmRvbUludFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcmFuZG9tSW50LmNyZWF0ZVJhbmRvbUludDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTdGlybGluZ1MyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zdGlybGluZ1MuY3JlYXRlU3RpcmxpbmdTMjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVCZWxsTnVtYmVyc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYmVsbE51bWJlcnMuY3JlYXRlQmVsbE51bWJlcnM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ2F0YWxhblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY2F0YWxhbi5jcmVhdGVDYXRhbGFuO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvbXBvc2l0aW9uXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb21wb3NpdGlvbi5jcmVhdGVDb21wb3NpdGlvbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTaW1wbGlmeVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc2ltcGxpZnkuY3JlYXRlU2ltcGxpZnk7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRGVyaXZhdGl2ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVyaXZhdGl2ZS5jcmVhdGVEZXJpdmF0aXZlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVJhdGlvbmFsaXplXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9yYXRpb25hbGl6ZS5jcmVhdGVSYXRpb25hbGl6ZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVSZXZpdmVyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9yZXZpdmVyLmNyZWF0ZVJldml2ZXI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUmVwbGFjZXJcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3JlcGxhY2VyLmNyZWF0ZVJlcGxhY2VyO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbnN0YW50cy5jcmVhdGVFO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVVwcGVyY2FzZUVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbnN0YW50cy5jcmVhdGVVcHBlcmNhc2VFO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUZhbHNlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb25zdGFudHMuY3JlYXRlRmFsc2U7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29uc3RhbnRzLmNyZWF0ZUk7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSW5maW5pdHlcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbnN0YW50cy5jcmVhdGVJbmZpbml0eTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVMTjEwXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb25zdGFudHMuY3JlYXRlTE4xMDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVMTjJcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbnN0YW50cy5jcmVhdGVMTjI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTE9HMTBFXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb25zdGFudHMuY3JlYXRlTE9HMTBFO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUxPRzJFXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb25zdGFudHMuY3JlYXRlTE9HMkU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTmFOXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb25zdGFudHMuY3JlYXRlTmFOO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU51bGxcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbnN0YW50cy5jcmVhdGVOdWxsO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVBoaVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29uc3RhbnRzLmNyZWF0ZVBoaTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVQaVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29uc3RhbnRzLmNyZWF0ZVBpO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVVwcGVyY2FzZVBpXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb25zdGFudHMuY3JlYXRlVXBwZXJjYXNlUGk7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU1FSVDFfMlwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29uc3RhbnRzLmNyZWF0ZVNRUlQxXzI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU1FSVDJcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbnN0YW50cy5jcmVhdGVTUVJUMjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVUYXVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbnN0YW50cy5jcmVhdGVUYXU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlVHJ1ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29uc3RhbnRzLmNyZWF0ZVRydWU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlVmVyc2lvblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29uc3RhbnRzLmNyZWF0ZVZlcnNpb247XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQXRvbWljTWFzc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlQXRvbWljTWFzcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBdm9nYWRyb1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlQXZvZ2Fkcm87XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQm9ock1hZ25ldG9uXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVCb2hyTWFnbmV0b247XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQm9oclJhZGl1c1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlQm9oclJhZGl1cztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVCb2x0em1hbm5cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZUJvbHR6bWFubjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDbGFzc2ljYWxFbGVjdHJvblJhZGl1c1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlQ2xhc3NpY2FsRWxlY3Ryb25SYWRpdXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ29uZHVjdGFuY2VRdWFudHVtXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVDb25kdWN0YW5jZVF1YW50dW07XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ291bG9tYlwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlQ291bG9tYjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVEZXV0ZXJvbk1hc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZURldXRlcm9uTWFzcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVFZmltb3ZGYWN0b3JcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZUVmaW1vdkZhY3RvcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVFbGVjdHJpY0NvbnN0YW50XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVFbGVjdHJpY0NvbnN0YW50O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUVsZWN0cm9uTWFzc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlRWxlY3Ryb25NYXNzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUVsZW1lbnRhcnlDaGFyZ2VcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZUVsZW1lbnRhcnlDaGFyZ2U7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRmFyYWRheVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlRmFyYWRheTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVGZXJtaUNvdXBsaW5nXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVGZXJtaUNvdXBsaW5nO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUZpbmVTdHJ1Y3R1cmVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZUZpbmVTdHJ1Y3R1cmU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRmlyc3RSYWRpYXRpb25cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZUZpcnN0UmFkaWF0aW9uO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUdhc0NvbnN0YW50XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVHYXNDb25zdGFudDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVHcmF2aXRhdGlvbkNvbnN0YW50XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVHcmF2aXRhdGlvbkNvbnN0YW50O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUdyYXZpdHlcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZUdyYXZpdHk7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSGFydHJlZUVuZXJneVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlSGFydHJlZUVuZXJneTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVJbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVJbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUtsaXR6aW5nXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVLbGl0emluZztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVMb3NjaG1pZHRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZUxvc2NobWlkdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVNYWduZXRpY0NvbnN0YW50XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVNYWduZXRpY0NvbnN0YW50O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU1hZ25ldGljRmx1eFF1YW50dW1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZU1hZ25ldGljRmx1eFF1YW50dW07XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTW9sYXJNYXNzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVNb2xhck1hc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTW9sYXJNYXNzQzEyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVNb2xhck1hc3NDMTI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTW9sYXJQbGFuY2tDb25zdGFudFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlTW9sYXJQbGFuY2tDb25zdGFudDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVNb2xhclZvbHVtZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlTW9sYXJWb2x1bWU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTmV1dHJvbk1hc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZU5ldXRyb25NYXNzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU51Y2xlYXJNYWduZXRvblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlTnVjbGVhck1hZ25ldG9uO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVBsYW5ja0NoYXJnZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlUGxhbmNrQ2hhcmdlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVBsYW5ja0NvbnN0YW50XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVQbGFuY2tDb25zdGFudDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVQbGFuY2tMZW5ndGhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZVBsYW5ja0xlbmd0aDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVQbGFuY2tNYXNzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVQbGFuY2tNYXNzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVBsYW5ja1RlbXBlcmF0dXJlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVQbGFuY2tUZW1wZXJhdHVyZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVQbGFuY2tUaW1lXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVQbGFuY2tUaW1lO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVByb3Rvbk1hc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZVByb3Rvbk1hc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUXVhbnR1bU9mQ2lyY3VsYXRpb25cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZVF1YW50dW1PZkNpcmN1bGF0aW9uO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVJlZHVjZWRQbGFuY2tDb25zdGFudFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlUmVkdWNlZFBsYW5ja0NvbnN0YW50O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVJ5ZGJlcmdcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZVJ5ZGJlcmc7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU2Fja3VyVGV0cm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlU2Fja3VyVGV0cm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTZWNvbmRSYWRpYXRpb25cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZVNlY29uZFJhZGlhdGlvbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTcGVlZE9mTGlnaHRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZVNwZWVkT2ZMaWdodDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTdGVmYW5Cb2x0em1hbm5cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZVN0ZWZhbkJvbHR6bWFubjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVUaG9tc29uQ3Jvc3NTZWN0aW9uXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVUaG9tc29uQ3Jvc3NTZWN0aW9uO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVZhY3V1bUltcGVkYW5jZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlVmFjdXVtSW1wZWRhbmNlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVdlYWtNaXhpbmdBbmdsZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlV2Vha01peGluZ0FuZ2xlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVdpZW5EaXNwbGFjZW1lbnRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZVdpZW5EaXNwbGFjZW1lbnQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQXBwbHlUcmFuc2Zvcm1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2FwcGx5Mi5jcmVhdGVBcHBseVRyYW5zZm9ybTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDb2x1bW5UcmFuc2Zvcm1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbHVtbjIuY3JlYXRlQ29sdW1uVHJhbnNmb3JtO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUZpbHRlclRyYW5zZm9ybVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZmlsdGVyMi5jcmVhdGVGaWx0ZXJUcmFuc2Zvcm07XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRm9yRWFjaFRyYW5zZm9ybVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZm9yRWFjaDIuY3JlYXRlRm9yRWFjaFRyYW5zZm9ybTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVJbmRleFRyYW5zZm9ybVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaW5kZXguY3JlYXRlSW5kZXhUcmFuc2Zvcm07XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTWFwVHJhbnNmb3JtXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9tYXAyLmNyZWF0ZU1hcFRyYW5zZm9ybTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVNYXhUcmFuc2Zvcm1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX21heDIuY3JlYXRlTWF4VHJhbnNmb3JtO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU1lYW5UcmFuc2Zvcm1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX21lYW4yLmNyZWF0ZU1lYW5UcmFuc2Zvcm07XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTWluVHJhbnNmb3JtXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9taW4yLmNyZWF0ZU1pblRyYW5zZm9ybTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVSYW5nZVRyYW5zZm9ybVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcmFuZ2UyLmNyZWF0ZVJhbmdlVHJhbnNmb3JtO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVJvd1RyYW5zZm9ybVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcm93Mi5jcmVhdGVSb3dUcmFuc2Zvcm07XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU3Vic2V0VHJhbnNmb3JtXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zdWJzZXQyLmNyZWF0ZVN1YnNldFRyYW5zZm9ybTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDb25jYXRUcmFuc2Zvcm1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbmNhdDIuY3JlYXRlQ29uY2F0VHJhbnNmb3JtO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVN0ZFRyYW5zZm9ybVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc3RkMi5jcmVhdGVTdGRUcmFuc2Zvcm07XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU3VtVHJhbnNmb3JtXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zdW0yLmNyZWF0ZVN1bVRyYW5zZm9ybTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVWYXJpYW5jZVRyYW5zZm9ybVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfdmFyaWFuY2UyLmNyZWF0ZVZhcmlhbmNlVHJhbnNmb3JtO1xuICB9XG59KTtcblxudmFyIF90eXBlZCA9IHJlcXVpcmUoXCIuL2NvcmUvZnVuY3Rpb24vdHlwZWRcIik7XG5cbnZhciBfUmVzdWx0U2V0ID0gcmVxdWlyZShcIi4vdHlwZS9yZXN1bHRzZXQvUmVzdWx0U2V0XCIpO1xuXG52YXIgX0JpZ051bWJlciA9IHJlcXVpcmUoXCIuL3R5cGUvYmlnbnVtYmVyL0JpZ051bWJlclwiKTtcblxudmFyIF9Db21wbGV4ID0gcmVxdWlyZShcIi4vdHlwZS9jb21wbGV4L0NvbXBsZXhcIik7XG5cbnZhciBfRnJhY3Rpb24gPSByZXF1aXJlKFwiLi90eXBlL2ZyYWN0aW9uL0ZyYWN0aW9uXCIpO1xuXG52YXIgX1JhbmdlID0gcmVxdWlyZShcIi4vdHlwZS9tYXRyaXgvUmFuZ2VcIik7XG5cbnZhciBfTWF0cml4ID0gcmVxdWlyZShcIi4vdHlwZS9tYXRyaXgvTWF0cml4XCIpO1xuXG52YXIgX0RlbnNlTWF0cml4ID0gcmVxdWlyZShcIi4vdHlwZS9tYXRyaXgvRGVuc2VNYXRyaXhcIik7XG5cbnZhciBfY2xvbmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy9jbG9uZVwiKTtcblxudmFyIF9pc0ludGVnZXIgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy9pc0ludGVnZXJcIik7XG5cbnZhciBfaXNOZWdhdGl2ZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3V0aWxzL2lzTmVnYXRpdmVcIik7XG5cbnZhciBfaXNOdW1lcmljID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdXRpbHMvaXNOdW1lcmljXCIpO1xuXG52YXIgX2hhc051bWVyaWNWYWx1ZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3V0aWxzL2hhc051bWVyaWNWYWx1ZVwiKTtcblxudmFyIF9pc1Bvc2l0aXZlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdXRpbHMvaXNQb3NpdGl2ZVwiKTtcblxudmFyIF9pc1plcm8gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy9pc1plcm9cIik7XG5cbnZhciBfaXNOYU4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy9pc05hTlwiKTtcblxudmFyIF90eXBlT2YgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy90eXBlT2ZcIik7XG5cbnZhciBfZXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9yZWxhdGlvbmFsL2VxdWFsU2NhbGFyXCIpO1xuXG52YXIgX1NwYXJzZU1hdHJpeCA9IHJlcXVpcmUoXCIuL3R5cGUvbWF0cml4L1NwYXJzZU1hdHJpeFwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi90eXBlL251bWJlclwiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi90eXBlL3N0cmluZ1wiKTtcblxudmFyIF9ib29sZWFuID0gcmVxdWlyZShcIi4vdHlwZS9ib29sZWFuXCIpO1xuXG52YXIgX2JpZ251bWJlciA9IHJlcXVpcmUoXCIuL3R5cGUvYmlnbnVtYmVyL2Z1bmN0aW9uL2JpZ251bWJlclwiKTtcblxudmFyIF9jb21wbGV4ID0gcmVxdWlyZShcIi4vdHlwZS9jb21wbGV4L2Z1bmN0aW9uL2NvbXBsZXhcIik7XG5cbnZhciBfZnJhY3Rpb24gPSByZXF1aXJlKFwiLi90eXBlL2ZyYWN0aW9uL2Z1bmN0aW9uL2ZyYWN0aW9uXCIpO1xuXG52YXIgX21hdHJpeCA9IHJlcXVpcmUoXCIuL3R5cGUvbWF0cml4L2Z1bmN0aW9uL21hdHJpeFwiKTtcblxudmFyIF9zcGxpdFVuaXQgPSByZXF1aXJlKFwiLi90eXBlL3VuaXQvZnVuY3Rpb24vc3BsaXRVbml0XCIpO1xuXG52YXIgX3VuYXJ5TWludXMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL3VuYXJ5TWludXNcIik7XG5cbnZhciBfdW5hcnlQbHVzID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy91bmFyeVBsdXNcIik7XG5cbnZhciBfYWJzID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9hYnNcIik7XG5cbnZhciBfYXBwbHkgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvYXBwbHlcIik7XG5cbnZhciBfYWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9hZGRTY2FsYXJcIik7XG5cbnZhciBfY2JydCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvY2JydFwiKTtcblxudmFyIF9jZWlsID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9jZWlsXCIpO1xuXG52YXIgX2N1YmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2N1YmVcIik7XG5cbnZhciBfZXhwID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9leHBcIik7XG5cbnZhciBfZXhwbSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZXhwbTFcIik7XG5cbnZhciBfZml4ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9maXhcIik7XG5cbnZhciBfZmxvb3IgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2Zsb29yXCIpO1xuXG52YXIgX2djZCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZ2NkXCIpO1xuXG52YXIgX2xjbSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvbGNtXCIpO1xuXG52YXIgX2xvZyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvbG9nMTBcIik7XG5cbnZhciBfbG9nMiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvbG9nMlwiKTtcblxudmFyIF9tb2QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL21vZFwiKTtcblxudmFyIF9tdWx0aXBseVNjYWxhciA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvbXVsdGlwbHlTY2FsYXJcIik7XG5cbnZhciBfbXVsdGlwbHkgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL211bHRpcGx5XCIpO1xuXG52YXIgX250aFJvb3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL250aFJvb3RcIik7XG5cbnZhciBfc2lnbiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvc2lnblwiKTtcblxudmFyIF9zcXJ0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9zcXJ0XCIpO1xuXG52YXIgX3NxdWFyZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvc3F1YXJlXCIpO1xuXG52YXIgX3N1YnRyYWN0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9zdWJ0cmFjdFwiKTtcblxudmFyIF94Z2NkID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy94Z2NkXCIpO1xuXG52YXIgX2RvdE11bHRpcGx5ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9kb3RNdWx0aXBseVwiKTtcblxudmFyIF9iaXRBbmQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9iaXR3aXNlL2JpdEFuZFwiKTtcblxudmFyIF9iaXROb3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9iaXR3aXNlL2JpdE5vdFwiKTtcblxudmFyIF9iaXRPciA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2JpdHdpc2UvYml0T3JcIik7XG5cbnZhciBfYml0WG9yID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYml0d2lzZS9iaXRYb3JcIik7XG5cbnZhciBfYXJnID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vY29tcGxleC9hcmdcIik7XG5cbnZhciBfY29uaiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2NvbXBsZXgvY29ualwiKTtcblxudmFyIF9pbSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2NvbXBsZXgvaW1cIik7XG5cbnZhciBfcmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9jb21wbGV4L3JlXCIpO1xuXG52YXIgX25vdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2xvZ2ljYWwvbm90XCIpO1xuXG52YXIgX29yID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbG9naWNhbC9vclwiKTtcblxudmFyIF94b3IgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9sb2dpY2FsL3hvclwiKTtcblxudmFyIF9jb25jYXQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvY29uY2F0XCIpO1xuXG52YXIgX2NvbHVtbiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9jb2x1bW5cIik7XG5cbnZhciBfY3Jvc3MgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvY3Jvc3NcIik7XG5cbnZhciBfZGlhZyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9kaWFnXCIpO1xuXG52YXIgX2V5ZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9leWVcIik7XG5cbnZhciBfZmlsdGVyID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2ZpbHRlclwiKTtcblxudmFyIF9mbGF0dGVuID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2ZsYXR0ZW5cIik7XG5cbnZhciBfZm9yRWFjaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9mb3JFYWNoXCIpO1xuXG52YXIgX2dldE1hdHJpeERhdGFUeXBlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2dldE1hdHJpeERhdGFUeXBlXCIpO1xuXG52YXIgX2lkZW50aXR5ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2lkZW50aXR5XCIpO1xuXG52YXIgX2tyb24gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgva3JvblwiKTtcblxudmFyIF9tYXAgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvbWFwXCIpO1xuXG52YXIgX29uZXMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvb25lc1wiKTtcblxudmFyIF9yYW5nZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9yYW5nZVwiKTtcblxudmFyIF9yZXNoYXBlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3Jlc2hhcGVcIik7XG5cbnZhciBfcmVzaXplID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3Jlc2l6ZVwiKTtcblxudmFyIF9yb3cgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvcm93XCIpO1xuXG52YXIgX3NpemUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvc2l6ZVwiKTtcblxudmFyIF9zcXVlZXplID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3NxdWVlemVcIik7XG5cbnZhciBfc3Vic2V0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3N1YnNldFwiKTtcblxudmFyIF90cmFuc3Bvc2UgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvdHJhbnNwb3NlXCIpO1xuXG52YXIgX2N0cmFuc3Bvc2UgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvY3RyYW5zcG9zZVwiKTtcblxudmFyIF96ZXJvcyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC96ZXJvc1wiKTtcblxudmFyIF9lcmYgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zcGVjaWFsL2VyZlwiKTtcblxudmFyIF9tb2RlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RhdGlzdGljcy9tb2RlXCIpO1xuXG52YXIgX3Byb2QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zdGF0aXN0aWNzL3Byb2RcIik7XG5cbnZhciBfZm9ybWF0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RyaW5nL2Zvcm1hdFwiKTtcblxudmFyIF9wcmludCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3N0cmluZy9wcmludFwiKTtcblxudmFyIF90byA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3VuaXQvdG9cIik7XG5cbnZhciBfaXNQcmltZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3V0aWxzL2lzUHJpbWVcIik7XG5cbnZhciBfbnVtZXJpYyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3V0aWxzL251bWVyaWNcIik7XG5cbnZhciBfZGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9kaXZpZGVTY2FsYXJcIik7XG5cbnZhciBfcG93ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9wb3dcIik7XG5cbnZhciBfcm91bmQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL3JvdW5kXCIpO1xuXG52YXIgX2xvZzMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2xvZ1wiKTtcblxudmFyIF9sb2cxcCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvbG9nMXBcIik7XG5cbnZhciBfbnRoUm9vdHMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL250aFJvb3RzXCIpO1xuXG52YXIgX2RvdFBvdyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZG90UG93XCIpO1xuXG52YXIgX2RvdERpdmlkZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZG90RGl2aWRlXCIpO1xuXG52YXIgX2xzb2x2ZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FsZ2VicmEvc29sdmVyL2xzb2x2ZVwiKTtcblxudmFyIF91c29sdmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hbGdlYnJhL3NvbHZlci91c29sdmVcIik7XG5cbnZhciBfbGVmdFNoaWZ0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYml0d2lzZS9sZWZ0U2hpZnRcIik7XG5cbnZhciBfcmlnaHRBcml0aFNoaWZ0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYml0d2lzZS9yaWdodEFyaXRoU2hpZnRcIik7XG5cbnZhciBfcmlnaHRMb2dTaGlmdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2JpdHdpc2UvcmlnaHRMb2dTaGlmdFwiKTtcblxudmFyIF9hbmQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9sb2dpY2FsL2FuZFwiKTtcblxudmFyIF9jb21wYXJlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcmVsYXRpb25hbC9jb21wYXJlXCIpO1xuXG52YXIgX2NvbXBhcmVOYXR1cmFsID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcmVsYXRpb25hbC9jb21wYXJlTmF0dXJhbFwiKTtcblxudmFyIF9jb21wYXJlVGV4dCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3JlbGF0aW9uYWwvY29tcGFyZVRleHRcIik7XG5cbnZhciBfZXF1YWwgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9yZWxhdGlvbmFsL2VxdWFsXCIpO1xuXG52YXIgX2VxdWFsVGV4dCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3JlbGF0aW9uYWwvZXF1YWxUZXh0XCIpO1xuXG52YXIgX3NtYWxsZXIgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9yZWxhdGlvbmFsL3NtYWxsZXJcIik7XG5cbnZhciBfc21hbGxlckVxID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcmVsYXRpb25hbC9zbWFsbGVyRXFcIik7XG5cbnZhciBfbGFyZ2VyID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcmVsYXRpb25hbC9sYXJnZXJcIik7XG5cbnZhciBfbGFyZ2VyRXEgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9yZWxhdGlvbmFsL2xhcmdlckVxXCIpO1xuXG52YXIgX2RlZXBFcXVhbCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3JlbGF0aW9uYWwvZGVlcEVxdWFsXCIpO1xuXG52YXIgX3VuZXF1YWwgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9yZWxhdGlvbmFsL3VuZXF1YWxcIik7XG5cbnZhciBfcGFydGl0aW9uU2VsZWN0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3BhcnRpdGlvblNlbGVjdFwiKTtcblxudmFyIF9zb3J0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3NvcnRcIik7XG5cbnZhciBfbWF4ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RhdGlzdGljcy9tYXhcIik7XG5cbnZhciBfbWluID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RhdGlzdGljcy9taW5cIik7XG5cbnZhciBfSW1tdXRhYmxlRGVuc2VNYXRyaXggPSByZXF1aXJlKFwiLi90eXBlL21hdHJpeC9JbW11dGFibGVEZW5zZU1hdHJpeFwiKTtcblxudmFyIF9NYXRyaXhJbmRleCA9IHJlcXVpcmUoXCIuL3R5cGUvbWF0cml4L01hdHJpeEluZGV4XCIpO1xuXG52YXIgX0ZpYm9uYWNjaUhlYXAgPSByZXF1aXJlKFwiLi90eXBlL21hdHJpeC9GaWJvbmFjY2lIZWFwXCIpO1xuXG52YXIgX1NwYSA9IHJlcXVpcmUoXCIuL3R5cGUvbWF0cml4L1NwYVwiKTtcblxudmFyIF9Vbml0ID0gcmVxdWlyZShcIi4vdHlwZS91bml0L1VuaXRcIik7XG5cbnZhciBfdW5pdCA9IHJlcXVpcmUoXCIuL3R5cGUvdW5pdC9mdW5jdGlvbi91bml0XCIpO1xuXG52YXIgX3NwYXJzZSA9IHJlcXVpcmUoXCIuL3R5cGUvbWF0cml4L2Z1bmN0aW9uL3NwYXJzZVwiKTtcblxudmFyIF9jcmVhdGVVbml0ID0gcmVxdWlyZShcIi4vdHlwZS91bml0L2Z1bmN0aW9uL2NyZWF0ZVVuaXRcIik7XG5cbnZhciBfYWNvcyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY29zXCIpO1xuXG52YXIgX2Fjb3NoID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjb3NoXCIpO1xuXG52YXIgX2Fjb3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNvdFwiKTtcblxudmFyIF9hY290aCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY290aFwiKTtcblxudmFyIF9hY3NjID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjc2NcIik7XG5cbnZhciBfYWNzY2ggPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNzY2hcIik7XG5cbnZhciBfYXNlYyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hc2VjXCIpO1xuXG52YXIgX2FzZWNoID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2FzZWNoXCIpO1xuXG52YXIgX2FzaW4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXNpblwiKTtcblxudmFyIF9hc2luaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hc2luaFwiKTtcblxudmFyIF9hdGFuID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2F0YW5cIik7XG5cbnZhciBfYXRhbjIgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXRhbjJcIik7XG5cbnZhciBfYXRhbmggPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXRhbmhcIik7XG5cbnZhciBfY29zID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Nvc1wiKTtcblxudmFyIF9jb3NoID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Nvc2hcIik7XG5cbnZhciBfY290ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2NvdFwiKTtcblxudmFyIF9jb3RoID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2NvdGhcIik7XG5cbnZhciBfY3NjID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2NzY1wiKTtcblxudmFyIF9jc2NoID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2NzY2hcIik7XG5cbnZhciBfc2VjID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NlY1wiKTtcblxudmFyIF9zZWNoID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NlY2hcIik7XG5cbnZhciBfc2luID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NpblwiKTtcblxudmFyIF9zaW5oID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NpbmhcIik7XG5cbnZhciBfdGFuID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3RhblwiKTtcblxudmFyIF90YW5oID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3RhbmhcIik7XG5cbnZhciBfc2V0Q2FydGVzaWFuID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldENhcnRlc2lhblwiKTtcblxudmFyIF9zZXREaWZmZXJlbmNlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldERpZmZlcmVuY2VcIik7XG5cbnZhciBfc2V0RGlzdGluY3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zZXQvc2V0RGlzdGluY3RcIik7XG5cbnZhciBfc2V0SW50ZXJzZWN0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldEludGVyc2VjdFwiKTtcblxudmFyIF9zZXRJc1N1YnNldCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3NldC9zZXRJc1N1YnNldFwiKTtcblxudmFyIF9zZXRNdWx0aXBsaWNpdHkgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zZXQvc2V0TXVsdGlwbGljaXR5XCIpO1xuXG52YXIgX3NldFBvd2Vyc2V0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldFBvd2Vyc2V0XCIpO1xuXG52YXIgX3NldFNpemUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zZXQvc2V0U2l6ZVwiKTtcblxudmFyIF9zZXRTeW1EaWZmZXJlbmNlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldFN5bURpZmZlcmVuY2VcIik7XG5cbnZhciBfc2V0VW5pb24gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zZXQvc2V0VW5pb25cIik7XG5cbnZhciBfYWRkID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9hZGRcIik7XG5cbnZhciBfaHlwb3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2h5cG90XCIpO1xuXG52YXIgX25vcm0gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL25vcm1cIik7XG5cbnZhciBfZG90ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2RvdFwiKTtcblxudmFyIF90cmFjZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC90cmFjZVwiKTtcblxudmFyIF9mdW5jdGlvbiA9IHJlcXVpcmUoXCIuL3R5cGUvbWF0cml4L2Z1bmN0aW9uXCIpO1xuXG52YXIgX05vZGUgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL25vZGUvTm9kZVwiKTtcblxudmFyIF9BY2Nlc3Nvck5vZGUgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL25vZGUvQWNjZXNzb3JOb2RlXCIpO1xuXG52YXIgX0FycmF5Tm9kZSA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vbm9kZS9BcnJheU5vZGVcIik7XG5cbnZhciBfQXNzaWdubWVudE5vZGUgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL25vZGUvQXNzaWdubWVudE5vZGVcIik7XG5cbnZhciBfQmxvY2tOb2RlID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9ub2RlL0Jsb2NrTm9kZVwiKTtcblxudmFyIF9Db25kaXRpb25hbE5vZGUgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL25vZGUvQ29uZGl0aW9uYWxOb2RlXCIpO1xuXG52YXIgX0NvbnN0YW50Tm9kZSA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vbm9kZS9Db25zdGFudE5vZGVcIik7XG5cbnZhciBfRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vbm9kZS9GdW5jdGlvbkFzc2lnbm1lbnROb2RlXCIpO1xuXG52YXIgX0luZGV4Tm9kZSA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vbm9kZS9JbmRleE5vZGVcIik7XG5cbnZhciBfT2JqZWN0Tm9kZSA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vbm9kZS9PYmplY3ROb2RlXCIpO1xuXG52YXIgX09wZXJhdG9yTm9kZSA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vbm9kZS9PcGVyYXRvck5vZGVcIik7XG5cbnZhciBfUGFyZW50aGVzaXNOb2RlID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9ub2RlL1BhcmVudGhlc2lzTm9kZVwiKTtcblxudmFyIF9SYW5nZU5vZGUgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL25vZGUvUmFuZ2VOb2RlXCIpO1xuXG52YXIgX1JlbGF0aW9uYWxOb2RlID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9ub2RlL1JlbGF0aW9uYWxOb2RlXCIpO1xuXG52YXIgX1N5bWJvbE5vZGUgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL25vZGUvU3ltYm9sTm9kZVwiKTtcblxudmFyIF9GdW5jdGlvbk5vZGUgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL25vZGUvRnVuY3Rpb25Ob2RlXCIpO1xuXG52YXIgX3BhcnNlID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9wYXJzZVwiKTtcblxudmFyIF9jb21waWxlID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9mdW5jdGlvbi9jb21waWxlXCIpO1xuXG52YXIgX2V2YWx1YXRlID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9mdW5jdGlvbi9ldmFsdWF0ZVwiKTtcblxudmFyIF9ldmFsID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9mdW5jdGlvbi9ldmFsXCIpO1xuXG52YXIgX1BhcnNlciA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vUGFyc2VyXCIpO1xuXG52YXIgX3BhcnNlciA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vZnVuY3Rpb24vcGFyc2VyXCIpO1xuXG52YXIgX2x1cCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FsZ2VicmEvZGVjb21wb3NpdGlvbi9sdXBcIik7XG5cbnZhciBfcXIgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hbGdlYnJhL2RlY29tcG9zaXRpb24vcXJcIik7XG5cbnZhciBfc2x1ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYWxnZWJyYS9kZWNvbXBvc2l0aW9uL3NsdVwiKTtcblxudmFyIF9sdXNvbHZlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYWxnZWJyYS9zb2x2ZXIvbHVzb2x2ZVwiKTtcblxudmFyIF9IZWxwID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9IZWxwXCIpO1xuXG52YXIgX0NoYWluID0gcmVxdWlyZShcIi4vdHlwZS9jaGFpbi9DaGFpblwiKTtcblxudmFyIF9oZWxwID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9mdW5jdGlvbi9oZWxwXCIpO1xuXG52YXIgX2NoYWluID0gcmVxdWlyZShcIi4vdHlwZS9jaGFpbi9mdW5jdGlvbi9jaGFpblwiKTtcblxudmFyIF9kZXQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvZGV0XCIpO1xuXG52YXIgX2ludiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9pbnZcIik7XG5cbnZhciBfZWlncyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9laWdzXCIpO1xuXG52YXIgX2V4cG0yID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2V4cG1cIik7XG5cbnZhciBfc3FydG0gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvc3FydG1cIik7XG5cbnZhciBfZGl2aWRlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9kaXZpZGVcIik7XG5cbnZhciBfZGlzdGFuY2UgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9nZW9tZXRyeS9kaXN0YW5jZVwiKTtcblxudmFyIF9pbnRlcnNlY3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9nZW9tZXRyeS9pbnRlcnNlY3RcIik7XG5cbnZhciBfc3VtID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RhdGlzdGljcy9zdW1cIik7XG5cbnZhciBfbWVhbiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbWVhblwiKTtcblxudmFyIF9tZWRpYW4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zdGF0aXN0aWNzL21lZGlhblwiKTtcblxudmFyIF9tYWQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zdGF0aXN0aWNzL21hZFwiKTtcblxudmFyIF92YXJpYW5jZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3N0YXRpc3RpY3MvdmFyaWFuY2VcIik7XG5cbnZhciBfcXVhbnRpbGVTZXEgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zdGF0aXN0aWNzL3F1YW50aWxlU2VxXCIpO1xuXG52YXIgX3N0ZCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3N0YXRpc3RpY3Mvc3RkXCIpO1xuXG52YXIgX2NvbWJpbmF0aW9ucyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2NvbWJpbmF0aW9uc1wiKTtcblxudmFyIF9jb21iaW5hdGlvbnNXaXRoUmVwID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcHJvYmFiaWxpdHkvY29tYmluYXRpb25zV2l0aFJlcFwiKTtcblxudmFyIF9nYW1tYSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2dhbW1hXCIpO1xuXG52YXIgX2ZhY3RvcmlhbCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2ZhY3RvcmlhbFwiKTtcblxudmFyIF9rbGRpdmVyZ2VuY2UgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9rbGRpdmVyZ2VuY2VcIik7XG5cbnZhciBfbXVsdGlub21pYWwgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9tdWx0aW5vbWlhbFwiKTtcblxudmFyIF9wZXJtdXRhdGlvbnMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9wZXJtdXRhdGlvbnNcIik7XG5cbnZhciBfcGlja1JhbmRvbSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3BpY2tSYW5kb21cIik7XG5cbnZhciBfcmFuZG9tID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcHJvYmFiaWxpdHkvcmFuZG9tXCIpO1xuXG52YXIgX3JhbmRvbUludCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3JhbmRvbUludFwiKTtcblxudmFyIF9zdGlybGluZ1MgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9jb21iaW5hdG9yaWNzL3N0aXJsaW5nUzJcIik7XG5cbnZhciBfYmVsbE51bWJlcnMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9jb21iaW5hdG9yaWNzL2JlbGxOdW1iZXJzXCIpO1xuXG52YXIgX2NhdGFsYW4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9jb21iaW5hdG9yaWNzL2NhdGFsYW5cIik7XG5cbnZhciBfY29tcG9zaXRpb24gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9jb21iaW5hdG9yaWNzL2NvbXBvc2l0aW9uXCIpO1xuXG52YXIgX3NpbXBsaWZ5ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYWxnZWJyYS9zaW1wbGlmeVwiKTtcblxudmFyIF9kZXJpdmF0aXZlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYWxnZWJyYS9kZXJpdmF0aXZlXCIpO1xuXG52YXIgX3JhdGlvbmFsaXplID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYWxnZWJyYS9yYXRpb25hbGl6ZVwiKTtcblxudmFyIF9yZXZpdmVyID0gcmVxdWlyZShcIi4vanNvbi9yZXZpdmVyXCIpO1xuXG52YXIgX3JlcGxhY2VyID0gcmVxdWlyZShcIi4vanNvbi9yZXBsYWNlclwiKTtcblxudmFyIF9jb25zdGFudHMgPSByZXF1aXJlKFwiLi9jb25zdGFudHNcIik7XG5cbnZhciBfcGh5c2ljYWxDb25zdGFudHMgPSByZXF1aXJlKFwiLi90eXBlL3VuaXQvcGh5c2ljYWxDb25zdGFudHNcIik7XG5cbnZhciBfYXBwbHkyID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi90cmFuc2Zvcm0vYXBwbHkudHJhbnNmb3JtXCIpO1xuXG52YXIgX2NvbHVtbjIgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL3RyYW5zZm9ybS9jb2x1bW4udHJhbnNmb3JtXCIpO1xuXG52YXIgX2ZpbHRlcjIgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL3RyYW5zZm9ybS9maWx0ZXIudHJhbnNmb3JtXCIpO1xuXG52YXIgX2ZvckVhY2gyID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi90cmFuc2Zvcm0vZm9yRWFjaC50cmFuc2Zvcm1cIik7XG5cbnZhciBfaW5kZXggPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL3RyYW5zZm9ybS9pbmRleC50cmFuc2Zvcm1cIik7XG5cbnZhciBfbWFwMiA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vdHJhbnNmb3JtL21hcC50cmFuc2Zvcm1cIik7XG5cbnZhciBfbWF4MiA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vdHJhbnNmb3JtL21heC50cmFuc2Zvcm1cIik7XG5cbnZhciBfbWVhbjIgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL3RyYW5zZm9ybS9tZWFuLnRyYW5zZm9ybVwiKTtcblxudmFyIF9taW4yID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi90cmFuc2Zvcm0vbWluLnRyYW5zZm9ybVwiKTtcblxudmFyIF9yYW5nZTIgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL3RyYW5zZm9ybS9yYW5nZS50cmFuc2Zvcm1cIik7XG5cbnZhciBfcm93MiA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vdHJhbnNmb3JtL3Jvdy50cmFuc2Zvcm1cIik7XG5cbnZhciBfc3Vic2V0MiA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vdHJhbnNmb3JtL3N1YnNldC50cmFuc2Zvcm1cIik7XG5cbnZhciBfY29uY2F0MiA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vdHJhbnNmb3JtL2NvbmNhdC50cmFuc2Zvcm1cIik7XG5cbnZhciBfc3RkMiA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vdHJhbnNmb3JtL3N0ZC50cmFuc2Zvcm1cIik7XG5cbnZhciBfc3VtMiA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vdHJhbnNmb3JtL3N1bS50cmFuc2Zvcm1cIik7XG5cbnZhciBfdmFyaWFuY2UyID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi90cmFuc2Zvcm0vdmFyaWFuY2UudHJhbnNmb3JtXCIpOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVMdXAgPSB2b2lkIDA7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2x1cCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnYWJzJywgJ2FkZFNjYWxhcicsICdkaXZpZGVTY2FsYXInLCAnbXVsdGlwbHlTY2FsYXInLCAnc3VidHJhY3QnLCAnbGFyZ2VyJywgJ2VxdWFsU2NhbGFyJywgJ3VuYXJ5TWludXMnLCAnRGVuc2VNYXRyaXgnLCAnU3BhcnNlTWF0cml4JywgJ1NwYSddO1xudmFyIGNyZWF0ZUx1cCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGFicyA9IF9yZWYuYWJzLFxuICAgICAgYWRkU2NhbGFyID0gX3JlZi5hZGRTY2FsYXIsXG4gICAgICBkaXZpZGVTY2FsYXIgPSBfcmVmLmRpdmlkZVNjYWxhcixcbiAgICAgIG11bHRpcGx5U2NhbGFyID0gX3JlZi5tdWx0aXBseVNjYWxhcixcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCxcbiAgICAgIGxhcmdlciA9IF9yZWYubGFyZ2VyLFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLFxuICAgICAgdW5hcnlNaW51cyA9IF9yZWYudW5hcnlNaW51cyxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeCxcbiAgICAgIFNwYXJzZU1hdHJpeCA9IF9yZWYuU3BhcnNlTWF0cml4LFxuICAgICAgU3BhID0gX3JlZi5TcGE7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgTWF0cml4IExVIGRlY29tcG9zaXRpb24gd2l0aCBwYXJ0aWFsIHBpdm90aW5nLiBNYXRyaXggYEFgIGlzIGRlY29tcG9zZWQgaW4gdHdvIG1hdHJpY2VzIChgTGAsIGBVYCkgYW5kIGFcbiAgICogcm93IHBlcm11dGF0aW9uIHZlY3RvciBgcGAgd2hlcmUgYEFbcCw6XSA9IEwgKiBVYFxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgubHVwKEEpXG4gICAqXG4gICAqIEV4YW1wbGU6XG4gICAqXG4gICAqICAgIGNvbnN0IG0gPSBbWzIsIDFdLCBbMSwgNF1dXG4gICAqICAgIGNvbnN0IHIgPSBtYXRoLmx1cChtKVxuICAgKiAgICAvLyByID0ge1xuICAgKiAgICAvLyAgIEw6IFtbMSwgMF0sIFswLjUsIDFdXSxcbiAgICogICAgLy8gICBVOiBbWzIsIDFdLCBbMCwgMy41XV0sXG4gICAqICAgIC8vICAgUDogWzAsIDFdXG4gICAqICAgIC8vIH1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIHNsdSwgbHNvbHZlLCBsdXNvbHZlLCB1c29sdmVcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXggfCBBcnJheX0gQSAgICBBIHR3byBkaW1lbnNpb25hbCBtYXRyaXggb3IgYXJyYXkgZm9yIHdoaWNoIHRvIGdldCB0aGUgTFVQIGRlY29tcG9zaXRpb24uXG4gICAqXG4gICAqIEByZXR1cm4ge3tMOiBBcnJheSB8IE1hdHJpeCwgVTogQXJyYXkgfCBNYXRyaXgsIFA6IEFycmF5LjxudW1iZXI+fX0gVGhlIGxvd2VyIHRyaWFuZ3VsYXIgbWF0cml4LCB0aGUgdXBwZXIgdHJpYW5ndWxhciBtYXRyaXggYW5kIHRoZSBwZXJtdXRhdGlvbiBtYXRyaXguXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIERlbnNlTWF0cml4OiBmdW5jdGlvbiBEZW5zZU1hdHJpeChtKSB7XG4gICAgICByZXR1cm4gX2RlbnNlTFVQKG0pO1xuICAgIH0sXG4gICAgU3BhcnNlTWF0cml4OiBmdW5jdGlvbiBTcGFyc2VNYXRyaXgobSkge1xuICAgICAgcmV0dXJuIF9zcGFyc2VMVVAobSk7XG4gICAgfSxcbiAgICBBcnJheTogZnVuY3Rpb24gQXJyYXkoYSkge1xuICAgICAgLy8gY3JlYXRlIGRlbnNlIG1hdHJpeCBmcm9tIGFycmF5XG4gICAgICB2YXIgbSA9IG1hdHJpeChhKTsgLy8gbHVwLCB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG5cbiAgICAgIHZhciByID0gX2RlbnNlTFVQKG0pOyAvLyByZXN1bHRcblxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBMOiByLkwudmFsdWVPZigpLFxuICAgICAgICBVOiByLlUudmFsdWVPZigpLFxuICAgICAgICBwOiByLnBcbiAgICAgIH07XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBfZGVuc2VMVVAobSkge1xuICAgIC8vIHJvd3MgJiBjb2x1bW5zXG4gICAgdmFyIHJvd3MgPSBtLl9zaXplWzBdO1xuICAgIHZhciBjb2x1bW5zID0gbS5fc2l6ZVsxXTsgLy8gbWluaW11bSByb3dzIGFuZCBjb2x1bW5zXG5cbiAgICB2YXIgbiA9IE1hdGgubWluKHJvd3MsIGNvbHVtbnMpOyAvLyBtYXRyaXggYXJyYXksIGNsb25lIG9yaWdpbmFsIGRhdGFcblxuICAgIHZhciBkYXRhID0gKDAsIF9vYmplY3QuY2xvbmUpKG0uX2RhdGEpOyAvLyBsIG1hdHJpeCBhcnJheXNcblxuICAgIHZhciBsZGF0YSA9IFtdO1xuICAgIHZhciBsc2l6ZSA9IFtyb3dzLCBuXTsgLy8gdSBtYXRyaXggYXJyYXlzXG5cbiAgICB2YXIgdWRhdGEgPSBbXTtcbiAgICB2YXIgdXNpemUgPSBbbiwgY29sdW1uc107IC8vIHZhcnNcblxuICAgIHZhciBpLCBqLCBrOyAvLyBwZXJtdXRhdGlvbiB2ZWN0b3JcblxuICAgIHZhciBwID0gW107XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICBwW2ldID0gaTtcbiAgICB9IC8vIGxvb3AgY29sdW1uc1xuXG5cbiAgICBmb3IgKGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAvLyBza2lwIGZpcnN0IGNvbHVtbiBpbiB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeFxuICAgICAgaWYgKGogPiAwKSB7XG4gICAgICAgIC8vIGxvb3Agcm93c1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgLy8gbWluIGksalxuICAgICAgICAgIHZhciBtaW4gPSBNYXRoLm1pbihpLCBqKTsgLy8gdltpLCBqXVxuXG4gICAgICAgICAgdmFyIHMgPSAwOyAvLyBsb29wIHVwIHRvIG1pblxuXG4gICAgICAgICAgZm9yIChrID0gMDsgayA8IG1pbjsgaysrKSB7XG4gICAgICAgICAgICAvLyBzID0gbFtpLCBrXSAtIGRhdGFbaywgal1cbiAgICAgICAgICAgIHMgPSBhZGRTY2FsYXIocywgbXVsdGlwbHlTY2FsYXIoZGF0YVtpXVtrXSwgZGF0YVtrXVtqXSkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRhdGFbaV1bal0gPSBzdWJ0cmFjdChkYXRhW2ldW2pdLCBzKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyByb3cgd2l0aCBsYXJnZXIgdmFsdWUgaW4gY3ZlY3Rvciwgcm93ID49IGpcblxuXG4gICAgICB2YXIgcGkgPSBqO1xuICAgICAgdmFyIHBhYnN2ID0gMDtcbiAgICAgIHZhciB2amogPSAwOyAvLyBsb29wIHJvd3NcblxuICAgICAgZm9yIChpID0gajsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAvLyBkYXRhIEAgaSwgalxuICAgICAgICB2YXIgdiA9IGRhdGFbaV1bal07IC8vIGFic29sdXRlIHZhbHVlXG5cbiAgICAgICAgdmFyIGFic3YgPSBhYnModik7IC8vIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBwaXZvdGUgdmFsdWVcblxuICAgICAgICBpZiAobGFyZ2VyKGFic3YsIHBhYnN2KSkge1xuICAgICAgICAgIC8vIHN0b3JlIHJvd1xuICAgICAgICAgIHBpID0gaTsgLy8gdXBkYXRlIG1heCB2YWx1ZVxuXG4gICAgICAgICAgcGFic3YgPSBhYnN2OyAvLyB2YWx1ZSBAIFtqLCBqXVxuXG4gICAgICAgICAgdmpqID0gdjtcbiAgICAgICAgfVxuICAgICAgfSAvLyBzd2FwIHJvd3MgKGogPC0+IHBpKVxuXG5cbiAgICAgIGlmIChqICE9PSBwaSkge1xuICAgICAgICAvLyBzd2FwIHZhbHVlcyBqIDwtPiBwaSBpbiBwXG4gICAgICAgIHBbal0gPSBbcFtwaV0sIHBbcGldID0gcFtqXV1bMF07IC8vIHN3YXAgaiA8LT4gcGkgaW4gZGF0YVxuXG4gICAgICAgIERlbnNlTWF0cml4Ll9zd2FwUm93cyhqLCBwaSwgZGF0YSk7XG4gICAgICB9IC8vIGNoZWNrIGNvbHVtbiBpcyBpbiBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeFxuXG5cbiAgICAgIGlmIChqIDwgcm93cykge1xuICAgICAgICAvLyBsb29wIHJvd3MgKGxvd2VyIHRyaWFuZ3VsYXIgbWF0cml4KVxuICAgICAgICBmb3IgKGkgPSBqICsgMTsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAgIC8vIHZhbHVlIEAgaSwgalxuICAgICAgICAgIHZhciB2aWogPSBkYXRhW2ldW2pdO1xuXG4gICAgICAgICAgaWYgKCFlcXVhbFNjYWxhcih2aWosIDApKSB7XG4gICAgICAgICAgICAvLyB1cGRhdGUgZGF0YVxuICAgICAgICAgICAgZGF0YVtpXVtqXSA9IGRpdmlkZVNjYWxhcihkYXRhW2ldW2pdLCB2amopO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gbG9vcCBjb2x1bW5zXG5cblxuICAgIGZvciAoaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgIC8vIGxvb3Agcm93c1xuICAgICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAvLyBpbml0aWFsaXplIHJvdyBpbiBhcnJheXNcbiAgICAgICAgaWYgKGogPT09IDApIHtcbiAgICAgICAgICAvLyBjaGVjayByb3cgZXhpc3RzIGluIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4XG4gICAgICAgICAgaWYgKGkgPCBjb2x1bW5zKSB7XG4gICAgICAgICAgICAvLyBVXG4gICAgICAgICAgICB1ZGF0YVtpXSA9IFtdO1xuICAgICAgICAgIH0gLy8gTFxuXG5cbiAgICAgICAgICBsZGF0YVtpXSA9IFtdO1xuICAgICAgICB9IC8vIGNoZWNrIHdlIGFyZSBpbiB0aGUgdXBwZXIgdHJpYW5ndWxhciBtYXRyaXhcblxuXG4gICAgICAgIGlmIChpIDwgaikge1xuICAgICAgICAgIC8vIGNoZWNrIHJvdyBleGlzdHMgaW4gdXBwZXIgdHJpYW5ndWxhciBtYXRyaXhcbiAgICAgICAgICBpZiAoaSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAgIC8vIFVcbiAgICAgICAgICAgIHVkYXRhW2ldW2pdID0gZGF0YVtpXVtqXTtcbiAgICAgICAgICB9IC8vIGNoZWNrIGNvbHVtbiBleGlzdHMgaW4gbG93ZXIgdHJpYW5ndWxhciBtYXRyaXhcblxuXG4gICAgICAgICAgaWYgKGogPCByb3dzKSB7XG4gICAgICAgICAgICAvLyBMXG4gICAgICAgICAgICBsZGF0YVtpXVtqXSA9IDA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gLy8gZGlhZ29uYWwgdmFsdWVcblxuXG4gICAgICAgIGlmIChpID09PSBqKSB7XG4gICAgICAgICAgLy8gY2hlY2sgcm93IGV4aXN0cyBpbiB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeFxuICAgICAgICAgIGlmIChpIDwgY29sdW1ucykge1xuICAgICAgICAgICAgLy8gVVxuICAgICAgICAgICAgdWRhdGFbaV1bal0gPSBkYXRhW2ldW2pdO1xuICAgICAgICAgIH0gLy8gY2hlY2sgY29sdW1uIGV4aXN0cyBpbiBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeFxuXG5cbiAgICAgICAgICBpZiAoaiA8IHJvd3MpIHtcbiAgICAgICAgICAgIC8vIExcbiAgICAgICAgICAgIGxkYXRhW2ldW2pdID0gMTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSAvLyBjaGVjayByb3cgZXhpc3RzIGluIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4XG5cblxuICAgICAgICBpZiAoaSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAvLyBVXG4gICAgICAgICAgdWRhdGFbaV1bal0gPSAwO1xuICAgICAgICB9IC8vIGNoZWNrIGNvbHVtbiBleGlzdHMgaW4gbG93ZXIgdHJpYW5ndWxhciBtYXRyaXhcblxuXG4gICAgICAgIGlmIChqIDwgcm93cykge1xuICAgICAgICAgIC8vIExcbiAgICAgICAgICBsZGF0YVtpXVtqXSA9IGRhdGFbaV1bal07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIGwgbWF0cml4XG5cblxuICAgIHZhciBsID0gbmV3IERlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6IGxkYXRhLFxuICAgICAgc2l6ZTogbHNpemVcbiAgICB9KTsgLy8gdSBtYXRyaXhcblxuICAgIHZhciB1ID0gbmV3IERlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6IHVkYXRhLFxuICAgICAgc2l6ZTogdXNpemVcbiAgICB9KTsgLy8gcCB2ZWN0b3JcblxuICAgIHZhciBwdiA9IFtdO1xuXG4gICAgZm9yIChpID0gMCwgbiA9IHAubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICBwdltwW2ldXSA9IGk7XG4gICAgfSAvLyByZXR1cm4gbWF0cmljZXNcblxuXG4gICAgcmV0dXJuIHtcbiAgICAgIEw6IGwsXG4gICAgICBVOiB1LFxuICAgICAgcDogcHYsXG4gICAgICB0b1N0cmluZzogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiAnTDogJyArIHRoaXMuTC50b1N0cmluZygpICsgJ1xcblU6ICcgKyB0aGlzLlUudG9TdHJpbmcoKSArICdcXG5QOiAnICsgdGhpcy5wO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBfc3BhcnNlTFVQKG0pIHtcbiAgICAvLyByb3dzICYgY29sdW1uc1xuICAgIHZhciByb3dzID0gbS5fc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IG0uX3NpemVbMV07IC8vIG1pbmltdW0gcm93cyBhbmQgY29sdW1uc1xuXG4gICAgdmFyIG4gPSBNYXRoLm1pbihyb3dzLCBjb2x1bW5zKTsgLy8gbWF0cml4IGFycmF5cyAod2lsbCBub3QgYmUgbW9kaWZpZWQsIHRoYW5rcyB0byBwZXJtdXRhdGlvbiB2ZWN0b3IpXG5cbiAgICB2YXIgdmFsdWVzID0gbS5fdmFsdWVzO1xuICAgIHZhciBpbmRleCA9IG0uX2luZGV4O1xuICAgIHZhciBwdHIgPSBtLl9wdHI7IC8vIGwgbWF0cml4IGFycmF5c1xuXG4gICAgdmFyIGx2YWx1ZXMgPSBbXTtcbiAgICB2YXIgbGluZGV4ID0gW107XG4gICAgdmFyIGxwdHIgPSBbXTtcbiAgICB2YXIgbHNpemUgPSBbcm93cywgbl07IC8vIHUgbWF0cml4IGFycmF5c1xuXG4gICAgdmFyIHV2YWx1ZXMgPSBbXTtcbiAgICB2YXIgdWluZGV4ID0gW107XG4gICAgdmFyIHVwdHIgPSBbXTtcbiAgICB2YXIgdXNpemUgPSBbbiwgY29sdW1uc107IC8vIHZhcnNcblxuICAgIHZhciBpLCBqLCBrOyAvLyBwZXJtdXRhdGlvbiB2ZWN0b3JzLCAoY3VycmVudCBpbmRleCAtPiBvcmlnaW5hbCBpbmRleCkgYW5kIChvcmlnaW5hbCBpbmRleCAtPiBjdXJyZW50IGluZGV4KVxuXG4gICAgdmFyIHB2Q28gPSBbXTtcbiAgICB2YXIgcHZPYyA9IFtdO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgcHZDb1tpXSA9IGk7XG4gICAgICBwdk9jW2ldID0gaTtcbiAgICB9IC8vIHN3YXAgaW5kaWNlcyBpbiBwZXJtdXRhdGlvbiB2ZWN0b3JzIChjb25kaXRpb24geCA8IHkpIVxuXG5cbiAgICB2YXIgc3dhcEluZGVjZXMgPSBmdW5jdGlvbiBzd2FwSW5kZWNlcyh4LCB5KSB7XG4gICAgICAvLyBmaW5kIHB2IGluZGVjZXMgZ2V0dGluZyBkYXRhIGZyb20geCBhbmQgeVxuICAgICAgdmFyIGt4ID0gcHZPY1t4XTtcbiAgICAgIHZhciBreSA9IHB2T2NbeV07IC8vIHVwZGF0ZSBwZXJtdXRhdGlvbiB2ZWN0b3IgY3VycmVudCAtPiBvcmlnaW5hbFxuXG4gICAgICBwdkNvW2t4XSA9IHk7XG4gICAgICBwdkNvW2t5XSA9IHg7IC8vIHVwZGF0ZSBwZXJtdXRhdGlvbiB2ZWN0b3Igb3JpZ2luYWwgLT4gY3VycmVudFxuXG4gICAgICBwdk9jW3hdID0ga3k7XG4gICAgICBwdk9jW3ldID0ga3g7XG4gICAgfTsgLy8gbG9vcCBjb2x1bW5zXG5cblxuICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKCkge1xuICAgICAgLy8gc3BhcnNlIGFjY3VtdWxhdG9yXG4gICAgICB2YXIgc3BhID0gbmV3IFNwYSgpOyAvLyBjaGVjayBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeCBoYXMgYSB2YWx1ZSBAIGNvbHVtbiBqXG5cbiAgICAgIGlmIChqIDwgcm93cykge1xuICAgICAgICAvLyB1cGRhdGUgcHRyXG4gICAgICAgIGxwdHIucHVzaChsdmFsdWVzLmxlbmd0aCk7IC8vIGZpcnN0IHZhbHVlIGluIGogY29sdW1uIGZvciBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeFxuXG4gICAgICAgIGx2YWx1ZXMucHVzaCgxKTtcbiAgICAgICAgbGluZGV4LnB1c2goaik7XG4gICAgICB9IC8vIHVwZGF0ZSBwdHJcblxuXG4gICAgICB1cHRyLnB1c2godXZhbHVlcy5sZW5ndGgpOyAvLyBrMCA8PSBrIDwgazEgd2hlcmUgazAgPSBfcHRyW2pdICYmIGsxID0gX3B0cltqKzFdXG5cbiAgICAgIHZhciBrMCA9IHB0cltqXTtcbiAgICAgIHZhciBrMSA9IHB0cltqICsgMV07IC8vIGNvcHkgY29sdW1uIGogaW50byBzcGFyc2UgYWNjdW11bGF0b3JcblxuICAgICAgZm9yIChrID0gazA7IGsgPCBrMTsgaysrKSB7XG4gICAgICAgIC8vIHJvd1xuICAgICAgICBpID0gaW5kZXhba107IC8vIGNvcHkgY29sdW1uIHZhbHVlcyBpbnRvIHNwYXJzZSBhY2N1bXVsYXRvciAodXNlIHBlcm11dGF0aW9uIHZlY3RvcilcblxuICAgICAgICBzcGEuc2V0KHB2Q29baV0sIHZhbHVlc1trXSk7XG4gICAgICB9IC8vIHNraXAgZmlyc3QgY29sdW1uIGluIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4XG5cblxuICAgICAgaWYgKGogPiAwKSB7XG4gICAgICAgIC8vIGxvb3Agcm93cyBpbiBjb2x1bW4gaiAoYWJvdmUgZGlhZ29uYWwpXG4gICAgICAgIHNwYS5mb3JFYWNoKDAsIGogLSAxLCBmdW5jdGlvbiAoaywgdmtqKSB7XG4gICAgICAgICAgLy8gbG9vcCByb3dzIGluIGNvbHVtbiBrIChMKVxuICAgICAgICAgIFNwYXJzZU1hdHJpeC5fZm9yRWFjaFJvdyhrLCBsdmFsdWVzLCBsaW5kZXgsIGxwdHIsIGZ1bmN0aW9uIChpLCB2aWspIHtcbiAgICAgICAgICAgIC8vIGNoZWNrIHJvdyBpcyBiZWxvdyBrXG4gICAgICAgICAgICBpZiAoaSA+IGspIHtcbiAgICAgICAgICAgICAgLy8gdXBkYXRlIHNwYSB2YWx1ZVxuICAgICAgICAgICAgICBzcGEuYWNjdW11bGF0ZShpLCB1bmFyeU1pbnVzKG11bHRpcGx5U2NhbGFyKHZpaywgdmtqKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0gLy8gcm93IHdpdGggbGFyZ2VyIHZhbHVlIGluIHNwYSwgcm93ID49IGpcblxuXG4gICAgICB2YXIgcGkgPSBqO1xuICAgICAgdmFyIHZqaiA9IHNwYS5nZXQoaik7XG4gICAgICB2YXIgcGFic3YgPSBhYnModmpqKTsgLy8gbG9vcCB2YWx1ZXMgaW4gc3BhIChvcmRlciBieSByb3csIGJlbG93IGRpYWdvbmFsKVxuXG4gICAgICBzcGEuZm9yRWFjaChqICsgMSwgcm93cyAtIDEsIGZ1bmN0aW9uICh4LCB2KSB7XG4gICAgICAgIC8vIGFic29sdXRlIHZhbHVlXG4gICAgICAgIHZhciBhYnN2ID0gYWJzKHYpOyAvLyB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gcGl2b3RlIHZhbHVlXG5cbiAgICAgICAgaWYgKGxhcmdlcihhYnN2LCBwYWJzdikpIHtcbiAgICAgICAgICAvLyBzdG9yZSByb3dcbiAgICAgICAgICBwaSA9IHg7IC8vIHVwZGF0ZSBtYXggdmFsdWVcblxuICAgICAgICAgIHBhYnN2ID0gYWJzdjsgLy8gdmFsdWUgQCBbaiwgal1cblxuICAgICAgICAgIHZqaiA9IHY7XG4gICAgICAgIH1cbiAgICAgIH0pOyAvLyBzd2FwIHJvd3MgKGogPC0+IHBpKVxuXG4gICAgICBpZiAoaiAhPT0gcGkpIHtcbiAgICAgICAgLy8gc3dhcCB2YWx1ZXMgaiA8LT4gcGkgaW4gTFxuICAgICAgICBTcGFyc2VNYXRyaXguX3N3YXBSb3dzKGosIHBpLCBsc2l6ZVsxXSwgbHZhbHVlcywgbGluZGV4LCBscHRyKTsgLy8gc3dhcCB2YWx1ZXMgaiA8LT4gcGkgaW4gVVxuXG5cbiAgICAgICAgU3BhcnNlTWF0cml4Ll9zd2FwUm93cyhqLCBwaSwgdXNpemVbMV0sIHV2YWx1ZXMsIHVpbmRleCwgdXB0cik7IC8vIHN3YXAgdmFsdWVzIGluIHNwYVxuXG5cbiAgICAgICAgc3BhLnN3YXAoaiwgcGkpOyAvLyB1cGRhdGUgcGVybXV0YXRpb24gdmVjdG9yIChzd2FwIHZhbHVlcyBAIGosIHBpKVxuXG4gICAgICAgIHN3YXBJbmRlY2VzKGosIHBpKTtcbiAgICAgIH0gLy8gbG9vcCB2YWx1ZXMgaW4gc3BhIChvcmRlciBieSByb3cpXG5cblxuICAgICAgc3BhLmZvckVhY2goMCwgcm93cyAtIDEsIGZ1bmN0aW9uICh4LCB2KSB7XG4gICAgICAgIC8vIGNoZWNrIHdlIGFyZSBhYm92ZSBkaWFnb25hbFxuICAgICAgICBpZiAoeCA8PSBqKSB7XG4gICAgICAgICAgLy8gdXBkYXRlIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4XG4gICAgICAgICAgdXZhbHVlcy5wdXNoKHYpO1xuICAgICAgICAgIHVpbmRleC5wdXNoKHgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHVwZGF0ZSB2YWx1ZVxuICAgICAgICAgIHYgPSBkaXZpZGVTY2FsYXIodiwgdmpqKTsgLy8gY2hlY2sgdmFsdWUgaXMgbm9uIHplcm9cblxuICAgICAgICAgIGlmICghZXF1YWxTY2FsYXIodiwgMCkpIHtcbiAgICAgICAgICAgIC8vIHVwZGF0ZSBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeFxuICAgICAgICAgICAgbHZhbHVlcy5wdXNoKHYpO1xuICAgICAgICAgICAgbGluZGV4LnB1c2goeCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgZm9yIChqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgX2xvb3AoKTtcbiAgICB9IC8vIHVwZGF0ZSBwdHJzXG5cblxuICAgIHVwdHIucHVzaCh1dmFsdWVzLmxlbmd0aCk7XG4gICAgbHB0ci5wdXNoKGx2YWx1ZXMubGVuZ3RoKTsgLy8gcmV0dXJuIG1hdHJpY2VzXG5cbiAgICByZXR1cm4ge1xuICAgICAgTDogbmV3IFNwYXJzZU1hdHJpeCh7XG4gICAgICAgIHZhbHVlczogbHZhbHVlcyxcbiAgICAgICAgaW5kZXg6IGxpbmRleCxcbiAgICAgICAgcHRyOiBscHRyLFxuICAgICAgICBzaXplOiBsc2l6ZVxuICAgICAgfSksXG4gICAgICBVOiBuZXcgU3BhcnNlTWF0cml4KHtcbiAgICAgICAgdmFsdWVzOiB1dmFsdWVzLFxuICAgICAgICBpbmRleDogdWluZGV4LFxuICAgICAgICBwdHI6IHVwdHIsXG4gICAgICAgIHNpemU6IHVzaXplXG4gICAgICB9KSxcbiAgICAgIHA6IHB2Q28sXG4gICAgICB0b1N0cmluZzogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiAnTDogJyArIHRoaXMuTC50b1N0cmluZygpICsgJ1xcblU6ICcgKyB0aGlzLlUudG9TdHJpbmcoKSArICdcXG5QOiAnICsgdGhpcy5wO1xuICAgICAgfVxuICAgIH07XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVMdXAgPSBjcmVhdGVMdXA7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVFyID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxudmFyIG5hbWUgPSAncXInO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ3plcm9zJywgJ2lkZW50aXR5JywgJ2lzWmVybycsICdlcXVhbCcsICdzaWduJywgJ3NxcnQnLCAnY29uaicsICd1bmFyeU1pbnVzJywgJ2FkZFNjYWxhcicsICdkaXZpZGVTY2FsYXInLCAnbXVsdGlwbHlTY2FsYXInLCAnc3VidHJhY3QnLCAnY29tcGxleCddO1xudmFyIGNyZWF0ZVFyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgemVyb3MgPSBfcmVmLnplcm9zLFxuICAgICAgaWRlbnRpdHkgPSBfcmVmLmlkZW50aXR5LFxuICAgICAgaXNaZXJvID0gX3JlZi5pc1plcm8sXG4gICAgICBlcXVhbCA9IF9yZWYuZXF1YWwsXG4gICAgICBzaWduID0gX3JlZi5zaWduLFxuICAgICAgc3FydCA9IF9yZWYuc3FydCxcbiAgICAgIGNvbmogPSBfcmVmLmNvbmosXG4gICAgICB1bmFyeU1pbnVzID0gX3JlZi51bmFyeU1pbnVzLFxuICAgICAgYWRkU2NhbGFyID0gX3JlZi5hZGRTY2FsYXIsXG4gICAgICBkaXZpZGVTY2FsYXIgPSBfcmVmLmRpdmlkZVNjYWxhcixcbiAgICAgIG11bHRpcGx5U2NhbGFyID0gX3JlZi5tdWx0aXBseVNjYWxhcixcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCxcbiAgICAgIGNvbXBsZXggPSBfcmVmLmNvbXBsZXg7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgTWF0cml4IFFSIGRlY29tcG9zaXRpb24uIE1hdHJpeCBgQWAgaXMgZGVjb21wb3NlZCBpblxuICAgKiB0d28gbWF0cmljZXMgKGBRYCwgYFJgKSB3aGVyZSBgUWAgaXMgYW5cbiAgICogb3J0aG9nb25hbCBtYXRyaXggYW5kIGBSYCBpcyBhbiB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnFyKEEpXG4gICAqXG4gICAqIEV4YW1wbGU6XG4gICAqXG4gICAqICAgIGNvbnN0IG0gPSBbXG4gICAqICAgICAgWzEsIC0xLCAgNF0sXG4gICAqICAgICAgWzEsICA0LCAtMl0sXG4gICAqICAgICAgWzEsICA0LCAgMl0sXG4gICAqICAgICAgWzEsICAtMSwgMF1cbiAgICogICAgXVxuICAgKiAgICBjb25zdCByZXN1bHQgPSBtYXRoLnFyKG0pXG4gICAqICAgIC8vIHIgPSB7XG4gICAqICAgIC8vICAgUTogW1xuICAgKiAgICAvLyAgICAgWzAuNSwgLTAuNSwgICAwLjVdLFxuICAgKiAgICAvLyAgICAgWzAuNSwgIDAuNSwgIC0wLjVdLFxuICAgKiAgICAvLyAgICAgWzAuNSwgIDAuNSwgICAwLjVdLFxuICAgKiAgICAvLyAgICAgWzAuNSwgLTAuNSwgIC0wLjVdLFxuICAgKiAgICAvLyAgIF0sXG4gICAqICAgIC8vICAgUjogW1xuICAgKiAgICAvLyAgICAgWzIsIDMsICAyXSxcbiAgICogICAgLy8gICAgIFswLCA1LCAtMl0sXG4gICAqICAgIC8vICAgICBbMCwgMCwgIDRdLFxuICAgKiAgICAvLyAgICAgWzAsIDAsICAwXVxuICAgKiAgICAvLyAgIF1cbiAgICogICAgLy8gfVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgbHVwLCBsdXNvbHZlXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4IHwgQXJyYXl9IEEgICAgQSB0d28gZGltZW5zaW9uYWwgbWF0cml4IG9yIGFycmF5XG4gICAqIGZvciB3aGljaCB0byBnZXQgdGhlIFFSIGRlY29tcG9zaXRpb24uXG4gICAqXG4gICAqIEByZXR1cm4ge3tROiBBcnJheSB8IE1hdHJpeCwgUjogQXJyYXkgfCBNYXRyaXh9fSBROiB0aGUgb3J0aG9nb25hbFxuICAgKiBtYXRyaXggYW5kIFI6IHRoZSB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeFxuICAgKi9cbiAgcmV0dXJuIF9leHRlbmRzKHR5cGVkKG5hbWUsIHtcbiAgICBEZW5zZU1hdHJpeDogZnVuY3Rpb24gRGVuc2VNYXRyaXgobSkge1xuICAgICAgcmV0dXJuIF9kZW5zZVFSKG0pO1xuICAgIH0sXG4gICAgU3BhcnNlTWF0cml4OiBmdW5jdGlvbiBTcGFyc2VNYXRyaXgobSkge1xuICAgICAgcmV0dXJuIF9zcGFyc2VRUihtKTtcbiAgICB9LFxuICAgIEFycmF5OiBmdW5jdGlvbiBBcnJheShhKSB7XG4gICAgICAvLyBjcmVhdGUgZGVuc2UgbWF0cml4IGZyb20gYXJyYXlcbiAgICAgIHZhciBtID0gbWF0cml4KGEpOyAvLyBsdXAsIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cblxuICAgICAgdmFyIHIgPSBfZGVuc2VRUihtKTsgLy8gcmVzdWx0XG5cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgUTogci5RLnZhbHVlT2YoKSxcbiAgICAgICAgUjogci5SLnZhbHVlT2YoKVxuICAgICAgfTtcbiAgICB9XG4gIH0pLCB7XG4gICAgX2RlbnNlUVJpbXBsOiBfZGVuc2VRUmltcGxcbiAgfSk7XG5cbiAgZnVuY3Rpb24gX2RlbnNlUVJpbXBsKG0pIHtcbiAgICAvLyByb3dzICYgY29sdW1ucyAobSB4IG4pXG4gICAgdmFyIHJvd3MgPSBtLl9zaXplWzBdOyAvLyBtXG5cbiAgICB2YXIgY29scyA9IG0uX3NpemVbMV07IC8vIG5cblxuICAgIHZhciBRID0gaWRlbnRpdHkoW3Jvd3NdLCAnZGVuc2UnKTtcbiAgICB2YXIgUWRhdGEgPSBRLl9kYXRhO1xuICAgIHZhciBSID0gbS5jbG9uZSgpO1xuICAgIHZhciBSZGF0YSA9IFIuX2RhdGE7IC8vIHZhcnNcblxuICAgIHZhciBpLCBqLCBrO1xuICAgIHZhciB3ID0gemVyb3MoW3Jvd3NdLCAnJyk7XG5cbiAgICBmb3IgKGsgPSAwOyBrIDwgTWF0aC5taW4oY29scywgcm93cyk7ICsraykge1xuICAgICAgLypcbiAgICAgICAqICoqay10aCBIb3VzZWhvbGQgbWF0cml4KipcbiAgICAgICAqXG4gICAgICAgKiBUaGUgbWF0cml4IEkgLSAyKnYqdHJhbnNwb3NlKHYpXG4gICAgICAgKiB4ICAgICA9IGZpcnN0IGNvbHVtbiBvZiBBXG4gICAgICAgKiB4MSAgICA9IGZpcnN0IGVsZW1lbnQgb2YgeFxuICAgICAgICogYWxwaGEgPSB4MSAvIHx4MXwgKiB8eHxcbiAgICAgICAqIGUxICAgID0gdHJhbnBvc2UoWzEsIDAsIDAsIC4uLl0pXG4gICAgICAgKiB1ICAgICA9IHggLSBhbHBoYSAqIGUxXG4gICAgICAgKiB2ICAgICA9IHUgLyB8dXxcbiAgICAgICAqXG4gICAgICAgKiBIb3VzZWhvbGQgbWF0cml4ID0gSSAtIDIgKiB2ICogdHJhbnBvc2UodilcbiAgICAgICAqXG4gICAgICAgKiAgKiBJbml0aWFsbHkgUSA9IEkgYW5kIFIgPSBBLlxuICAgICAgICogICogSG91c2Vob2xkIG1hdHJpeCBpcyBhIHJlZmxlY3Rpb24gaW4gYSBwbGFuZSBub3JtYWwgdG8gdiB3aGljaFxuICAgICAgICogICAgd2lsbCB6ZXJvIG91dCBhbGwgYnV0IHRoZSB0b3AgcmlnaHQgZWxlbWVudCBpbiBSLlxuICAgICAgICogICogQXBwcGx5aW5nIHJlZmxlY3Rpb24gdG8gYm90aCBRIGFuZCBSIHdpbGwgbm90IGNoYW5nZSBwcm9kdWN0LlxuICAgICAgICogICogUmVwZWF0IHRoaXMgcHJvY2VzcyBvbiB0aGUgKDEsMSkgbWlub3IgdG8gZ2V0IFIgYXMgYW4gdXBwZXJcbiAgICAgICAqICAgIHRyaWFuZ3VsYXIgbWF0cml4LlxuICAgICAgICogICogUmVmbGVjdGlvbnMgbGVhdmUgdGhlIG1hZ25pdHVkZSBvZiB0aGUgY29sdW1ucyBvZiBRIHVuY2hhbmdlZFxuICAgICAgICogICAgc28gUSByZW1haW5zIG90aG9nYW5hbC5cbiAgICAgICAqXG4gICAgICAgKi9cbiAgICAgIHZhciBwaXZvdCA9IFJkYXRhW2tdW2tdO1xuICAgICAgdmFyIHNnbiA9IHVuYXJ5TWludXMoZXF1YWwocGl2b3QsIDApID8gMSA6IHNpZ24ocGl2b3QpKTtcbiAgICAgIHZhciBjb25qU2duID0gY29uaihzZ24pO1xuICAgICAgdmFyIGFscGhhU3F1YXJlZCA9IDA7XG5cbiAgICAgIGZvciAoaSA9IGs7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgYWxwaGFTcXVhcmVkID0gYWRkU2NhbGFyKGFscGhhU3F1YXJlZCwgbXVsdGlwbHlTY2FsYXIoUmRhdGFbaV1ba10sIGNvbmooUmRhdGFbaV1ba10pKSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBhbHBoYSA9IG11bHRpcGx5U2NhbGFyKHNnbiwgc3FydChhbHBoYVNxdWFyZWQpKTtcblxuICAgICAgaWYgKCFpc1plcm8oYWxwaGEpKSB7XG4gICAgICAgIC8vIGZpcnN0IGVsZW1lbnQgaW4gdmVjdG9yIHVcbiAgICAgICAgdmFyIHUxID0gc3VidHJhY3QocGl2b3QsIGFscGhhKTsgLy8gdyA9IHYgKiB1MSAvIHx1fCAgICAob25seSBlbGVtZW50cyBrIHRvIChyb3dzLTEpIGFyZSB1c2VkKVxuXG4gICAgICAgIHdba10gPSAxO1xuXG4gICAgICAgIGZvciAoaSA9IGsgKyAxOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgd1tpXSA9IGRpdmlkZVNjYWxhcihSZGF0YVtpXVtrXSwgdTEpO1xuICAgICAgICB9IC8vIHRhdSA9IC0gY29uaih1MSAvIGFscGhhKVxuXG5cbiAgICAgICAgdmFyIHRhdSA9IHVuYXJ5TWludXMoY29uaihkaXZpZGVTY2FsYXIodTEsIGFscGhhKSkpO1xuICAgICAgICB2YXIgcyA9IHZvaWQgMDtcbiAgICAgICAgLypcbiAgICAgICAgICogdGF1IGFuZCB3IGhhdmUgYmVlbiBjaG9vc2VuIHNvIHRoYXRcbiAgICAgICAgICpcbiAgICAgICAgICogMiAqIHYgKiB0cmFucG9zZSh2KSA9IHRhdSAqIHcgKiB0cmFucG9zZSh3KVxuICAgICAgICAgKi9cblxuICAgICAgICAvKlxuICAgICAgICAgKiAtLSBjYWxjdWxhdGUgUiA9IFIgLSB0YXUgKiB3ICogdHJhbnBvc2UodykgKiBSIC0tXG4gICAgICAgICAqIE9ubHkgZG8gY2FsY3VsYXRpb24gd2l0aCByb3dzIGsgdG8gKHJvd3MtMSlcbiAgICAgICAgICogQWRkaXRpb25hbGx5IGNvbHVtbnMgMCB0byAoay0xKSB3aWxsIG5vdCBiZSBjaGFuZ2VkIGJ5IHRoaXNcbiAgICAgICAgICogICBtdWx0aXBsaWNhdGlvbiBzbyBkbyBub3QgYm90aGVyIHJlY2FsY3VsYXRpbmcgdGhlbVxuICAgICAgICAgKi9cblxuICAgICAgICBmb3IgKGogPSBrOyBqIDwgY29sczsgaisrKSB7XG4gICAgICAgICAgcyA9IDAuMDsgLy8gY2FsY3VsYXRlIGp0aCBlbGVtZW50IG9mIFt0cmFucG9zZSh3KSAqIFJdXG5cbiAgICAgICAgICBmb3IgKGkgPSBrOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYWRkU2NhbGFyKHMsIG11bHRpcGx5U2NhbGFyKGNvbmood1tpXSksIFJkYXRhW2ldW2pdKSk7XG4gICAgICAgICAgfSAvLyBjYWxjdWxhdGUgdGhlIGp0aCBlbGVtZW50IG9mIFt0YXUgKiB0cmFuc3Bvc2UodykgKiBSXVxuXG5cbiAgICAgICAgICBzID0gbXVsdGlwbHlTY2FsYXIocywgdGF1KTtcblxuICAgICAgICAgIGZvciAoaSA9IGs7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgICAgIFJkYXRhW2ldW2pdID0gbXVsdGlwbHlTY2FsYXIoc3VidHJhY3QoUmRhdGFbaV1bal0sIG11bHRpcGx5U2NhbGFyKHdbaV0sIHMpKSwgY29ualNnbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8qXG4gICAgICAgICAqIC0tIGNhbGN1bGF0ZSBRID0gUSAtIHRhdSAqIFEgKiB3ICogdHJhbnNwb3NlKHcpIC0tXG4gICAgICAgICAqIFEgaXMgYSBzcXVhcmUgbWF0cml4IChyb3dzIHggcm93cylcbiAgICAgICAgICogT25seSBkbyBjYWxjdWxhdGlvbiB3aXRoIGNvbHVtbnMgayB0byAocm93cy0xKVxuICAgICAgICAgKiBBZGRpdGlvbmFsbHkgcm93cyAwIHRvIChrLTEpIHdpbGwgbm90IGJlIGNoYW5nZWQgYnkgdGhpc1xuICAgICAgICAgKiAgIG11bHRpcGxpY2F0aW9uIHNvIGRvIG5vdCBib3RoZXIgcmVjYWxjdWxhdGluZyB0aGVtXG4gICAgICAgICAqL1xuXG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAgIHMgPSAwLjA7IC8vIGNhbGN1bGF0ZSBpdGggZWxlbWVudCBvZiBbUSAqIHddXG5cbiAgICAgICAgICBmb3IgKGogPSBrOyBqIDwgcm93czsgaisrKSB7XG4gICAgICAgICAgICBzID0gYWRkU2NhbGFyKHMsIG11bHRpcGx5U2NhbGFyKFFkYXRhW2ldW2pdLCB3W2pdKSk7XG4gICAgICAgICAgfSAvLyBjYWxjdWxhdGUgdGhlIGl0aCBlbGVtZW50IG9mIFt0YXUgKiBRICogd11cblxuXG4gICAgICAgICAgcyA9IG11bHRpcGx5U2NhbGFyKHMsIHRhdSk7XG5cbiAgICAgICAgICBmb3IgKGogPSBrOyBqIDwgcm93czsgKytqKSB7XG4gICAgICAgICAgICBRZGF0YVtpXVtqXSA9IGRpdmlkZVNjYWxhcihzdWJ0cmFjdChRZGF0YVtpXVtqXSwgbXVsdGlwbHlTY2FsYXIocywgY29uaih3W2pdKSkpLCBjb25qU2duKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIHJldHVybiBtYXRyaWNlc1xuXG5cbiAgICByZXR1cm4ge1xuICAgICAgUTogUSxcbiAgICAgIFI6IFIsXG4gICAgICB0b1N0cmluZzogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiAnUTogJyArIHRoaXMuUS50b1N0cmluZygpICsgJ1xcblI6ICcgKyB0aGlzLlIudG9TdHJpbmcoKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gX2RlbnNlUVIobSkge1xuICAgIHZhciByZXQgPSBfZGVuc2VRUmltcGwobSk7XG5cbiAgICB2YXIgUmRhdGEgPSByZXQuUi5fZGF0YTtcblxuICAgIGlmIChtLl9kYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhciB6ZXJvID0gUmRhdGFbMF1bMF0udHlwZSA9PT0gJ0NvbXBsZXgnID8gY29tcGxleCgwKSA6IDA7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgUmRhdGEubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpICYmIGogPCAoUmRhdGFbMF0gfHwgW10pLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgUmRhdGFbaV1bal0gPSB6ZXJvO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9zcGFyc2VRUihtKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdxciBub3QgaW1wbGVtZW50ZWQgZm9yIHNwYXJzZSBtYXRyaWNlcyB5ZXQnKTtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZVFyID0gY3JlYXRlUXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNsdSA9IHZvaWQgMDtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jc1NxciA9IHJlcXVpcmUoXCIuLi9zcGFyc2UvY3NTcXJcIik7XG5cbnZhciBfY3NMdSA9IHJlcXVpcmUoXCIuLi9zcGFyc2UvY3NMdVwiKTtcblxudmFyIG5hbWUgPSAnc2x1JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FicycsICdhZGQnLCAnbXVsdGlwbHknLCAndHJhbnNwb3NlJywgJ2RpdmlkZVNjYWxhcicsICdzdWJ0cmFjdCcsICdsYXJnZXInLCAnbGFyZ2VyRXEnLCAnU3BhcnNlTWF0cml4J107XG52YXIgY3JlYXRlU2x1ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGFicyA9IF9yZWYuYWJzLFxuICAgICAgYWRkID0gX3JlZi5hZGQsXG4gICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHksXG4gICAgICB0cmFuc3Bvc2UgPSBfcmVmLnRyYW5zcG9zZSxcbiAgICAgIGRpdmlkZVNjYWxhciA9IF9yZWYuZGl2aWRlU2NhbGFyLFxuICAgICAgc3VidHJhY3QgPSBfcmVmLnN1YnRyYWN0LFxuICAgICAgbGFyZ2VyID0gX3JlZi5sYXJnZXIsXG4gICAgICBsYXJnZXJFcSA9IF9yZWYubGFyZ2VyRXEsXG4gICAgICBTcGFyc2VNYXRyaXggPSBfcmVmLlNwYXJzZU1hdHJpeDtcbiAgdmFyIGNzU3FyID0gKDAsIF9jc1Nxci5jcmVhdGVDc1Nxcikoe1xuICAgIGFkZDogYWRkLFxuICAgIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgICB0cmFuc3Bvc2U6IHRyYW5zcG9zZVxuICB9KTtcbiAgdmFyIGNzTHUgPSAoMCwgX2NzTHUuY3JlYXRlQ3NMdSkoe1xuICAgIGFiczogYWJzLFxuICAgIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICAgIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgICBzdWJ0cmFjdDogc3VidHJhY3QsXG4gICAgbGFyZ2VyOiBsYXJnZXIsXG4gICAgbGFyZ2VyRXE6IGxhcmdlckVxLFxuICAgIFNwYXJzZU1hdHJpeDogU3BhcnNlTWF0cml4XG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBTcGFyc2UgTWF0cml4IExVIGRlY29tcG9zaXRpb24gd2l0aCBmdWxsIHBpdm90aW5nLiBTcGFyc2UgTWF0cml4IGBBYCBpcyBkZWNvbXBvc2VkIGluIHR3byBtYXRyaWNlcyAoYExgLCBgVWApIGFuZCB0d28gcGVybXV0YXRpb24gdmVjdG9ycyAoYHBpbnZgLCBgcWApIHdoZXJlXG4gICAqXG4gICAqIGBQICogQSAqIFEgPSBMICogVWBcbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnNsdShBLCBvcmRlciwgdGhyZXNob2xkKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgY29uc3QgQSA9IG1hdGguc3BhcnNlKFtbNCwzXSwgWzYsIDNdXSlcbiAgICogICAgbWF0aC5zbHUoQSwgMSwgMC4wMDEpXG4gICAqICAgIC8vIHJldHVybnM6XG4gICAqICAgIC8vIHtcbiAgICogICAgLy8gICBMOiBbWzEsIDBdLCBbMS41LCAxXV1cbiAgICogICAgLy8gICBVOiBbWzQsIDNdLCBbMCwgLTEuNV1dXG4gICAqICAgIC8vICAgcDogWzAsIDFdXG4gICAqICAgIC8vICAgcTogWzAsIDFdXG4gICAqICAgIC8vIH1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGx1cCwgbHNvbHZlLCB1c29sdmUsIGx1c29sdmVcbiAgICpcbiAgICogQHBhcmFtIHtTcGFyc2VNYXRyaXh9IEEgICAgICAgICAgICAgIEEgdHdvIGRpbWVuc2lvbmFsIHNwYXJzZSBtYXRyaXggZm9yIHdoaWNoIHRvIGdldCB0aGUgTFUgZGVjb21wb3NpdGlvbi5cbiAgICogQHBhcmFtIHtOdW1iZXJ9ICAgICAgIG9yZGVyICAgICAgICAgIFRoZSBTeW1ib2xpYyBPcmRlcmluZyBhbmQgQW5hbHlzaXMgb3JkZXI6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAtIE5hdHVyYWwgb3JkZXJpbmcsIG5vIHBlcm11dGF0aW9uIHZlY3RvciBxIGlzIHJldHVybmVkXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtIE1hdHJpeCBtdXN0IGJlIHNxdWFyZSwgc3ltYm9saWMgb3JkZXJpbmcgYW5kIGFuYWxpc2lzIGlzIHBlcmZvcm1lZCBvbiBNID0gQSArIEEnXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAtIFN5bWJvbGljIG9yZGVyaW5nIGFuZCBhbmFsaXNpcyBpcyBwZXJmb3JtZWQgb24gTSA9IEEnICogQS4gRGVuc2UgY29sdW1ucyBmcm9tIEEnIGFyZSBkcm9wcGVkLCBBIHJlY3JlYXRlZCBmcm9tIEEnLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIGFwcHJvcHJpYXRlZm9yIExVIGZhY3Rvcml6YXRpb24gb2YgdW5zeW1tZXRyaWMgbWF0cmljZXMuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyAtIFN5bWJvbGljIG9yZGVyaW5nIGFuZCBhbmFsaXNpcyBpcyBwZXJmb3JtZWQgb24gTSA9IEEnICogQS4gVGhpcyBpcyBiZXN0IHVzZWQgZm9yIExVIGZhY3Rvcml6YXRpb24gaXMgbWF0cml4IE0gaGFzIG5vIGRlbnNlIHJvd3MuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgZGVuc2Ugcm93IGlzIGEgcm93IHdpdGggbW9yZSB0aGFuIDEwKnNxcihjb2x1bW5zKSBlbnRyaWVzLlxuICAgKiBAcGFyYW0ge051bWJlcn0gICAgICAgdGhyZXNob2xkICAgICAgIFBhcnRpYWwgcGl2b3RpbmcgdGhyZXNob2xkICgxIGZvciBwYXJ0aWFsIHBpdm90aW5nKVxuICAgKlxuICAgKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeCwgdGhlIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4IGFuZCB0aGUgcGVybXV0YXRpb24gdmVjdG9ycy5cbiAgICovXG5cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnU3BhcnNlTWF0cml4LCBudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeE51bWJlck51bWJlcihhLCBvcmRlciwgdGhyZXNob2xkKSB7XG4gICAgICAvLyB2ZXJpZnkgb3JkZXJcbiAgICAgIGlmICghKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShvcmRlcikgfHwgb3JkZXIgPCAwIHx8IG9yZGVyID4gMykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N5bWJvbGljIE9yZGVyaW5nIGFuZCBBbmFseXNpcyBvcmRlciBtdXN0IGJlIGFuIGludGVnZXIgbnVtYmVyIGluIHRoZSBpbnRlcnZhbCBbMCwgM10nKTtcbiAgICAgIH0gLy8gdmVyaWZ5IHRocmVzaG9sZFxuXG5cbiAgICAgIGlmICh0aHJlc2hvbGQgPCAwIHx8IHRocmVzaG9sZCA+IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJ0aWFsIHBpdm90aW5nIHRocmVzaG9sZCBtdXN0IGJlIGEgbnVtYmVyIGZyb20gMCB0byAxJyk7XG4gICAgICB9IC8vIHBlcmZvcm0gc3ltYm9saWMgb3JkZXJpbmcgYW5kIGFuYWx5c2lzXG5cblxuICAgICAgdmFyIHMgPSBjc1NxcihvcmRlciwgYSwgZmFsc2UpOyAvLyBwZXJmb3JtIGx1IGRlY29tcG9zaXRpb25cblxuICAgICAgdmFyIGYgPSBjc0x1KGEsIHMsIHRocmVzaG9sZCk7IC8vIHJldHVybiBkZWNvbXBvc2l0aW9uXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIEw6IGYuTCxcbiAgICAgICAgVTogZi5VLFxuICAgICAgICBwOiBmLnBpbnYsXG4gICAgICAgIHE6IHMucSxcbiAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgICAgIHJldHVybiAnTDogJyArIHRoaXMuTC50b1N0cmluZygpICsgJ1xcblU6ICcgKyB0aGlzLlUudG9TdHJpbmcoKSArICdcXG5wOiAnICsgdGhpcy5wLnRvU3RyaW5nKCkgKyAodGhpcy5xID8gJ1xcbnE6ICcgKyB0aGlzLnEudG9TdHJpbmcoKSA6ICcnKSArICdcXG4nO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlU2x1ID0gY3JlYXRlU2x1OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVEZXJpdmF0aXZlID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnZGVyaXZhdGl2ZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAncGFyc2UnLCAnc2ltcGxpZnknLCAnZXF1YWwnLCAnaXNaZXJvJywgJ251bWVyaWMnLCAnQ29uc3RhbnROb2RlJywgJ0Z1bmN0aW9uTm9kZScsICdPcGVyYXRvck5vZGUnLCAnUGFyZW50aGVzaXNOb2RlJywgJ1N5bWJvbE5vZGUnXTtcbnZhciBjcmVhdGVEZXJpdmF0aXZlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgcGFyc2UgPSBfcmVmLnBhcnNlLFxuICAgICAgc2ltcGxpZnkgPSBfcmVmLnNpbXBsaWZ5LFxuICAgICAgZXF1YWwgPSBfcmVmLmVxdWFsLFxuICAgICAgaXNaZXJvID0gX3JlZi5pc1plcm8sXG4gICAgICBudW1lcmljID0gX3JlZi5udW1lcmljLFxuICAgICAgQ29uc3RhbnROb2RlID0gX3JlZi5Db25zdGFudE5vZGUsXG4gICAgICBGdW5jdGlvbk5vZGUgPSBfcmVmLkZ1bmN0aW9uTm9kZSxcbiAgICAgIE9wZXJhdG9yTm9kZSA9IF9yZWYuT3BlcmF0b3JOb2RlLFxuICAgICAgUGFyZW50aGVzaXNOb2RlID0gX3JlZi5QYXJlbnRoZXNpc05vZGUsXG4gICAgICBTeW1ib2xOb2RlID0gX3JlZi5TeW1ib2xOb2RlO1xuXG4gIC8qKlxuICAgKiBUYWtlcyB0aGUgZGVyaXZhdGl2ZSBvZiBhbiBleHByZXNzaW9uIGV4cHJlc3NlZCBpbiBwYXJzZXIgTm9kZXMuXG4gICAqIFRoZSBkZXJpdmF0aXZlIHdpbGwgYmUgdGFrZW4gb3ZlciB0aGUgc3VwcGxpZWQgdmFyaWFibGUgaW4gdGhlXG4gICAqIHNlY29uZCBwYXJhbWV0ZXIuIElmIHRoZXJlIGFyZSBtdWx0aXBsZSB2YXJpYWJsZXMgaW4gdGhlIGV4cHJlc3Npb24sXG4gICAqIGl0IHdpbGwgcmV0dXJuIGEgcGFydGlhbCBkZXJpdmF0aXZlLlxuICAgKlxuICAgKiBUaGlzIHVzZXMgcnVsZXMgb2YgZGlmZmVyZW50aWF0aW9uIHdoaWNoIGNhbiBiZSBmb3VuZCBoZXJlOlxuICAgKlxuICAgKiAtIFtEaWZmZXJlbnRpYXRpb24gcnVsZXMgKFdpa2lwZWRpYSldKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0RpZmZlcmVudGlhdGlvbl9ydWxlcylcbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgZGVyaXZhdGl2ZShleHByLCB2YXJpYWJsZSlcbiAgICogICAgIGRlcml2YXRpdmUoZXhwciwgdmFyaWFibGUsIG9wdGlvbnMpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgbWF0aC5kZXJpdmF0aXZlKCd4XjInLCAneCcpICAgICAgICAgICAgICAgICAgICAgLy8gTm9kZSB7MiAqIHh9XG4gICAqICAgICBtYXRoLmRlcml2YXRpdmUoJ3heMicsICd4Jywge3NpbXBsaWZ5OiBmYWxzZX0pICAvLyBOb2RlIHsyICogMSAqIHggXiAoMiAtIDEpXG4gICAqICAgICBtYXRoLmRlcml2YXRpdmUoJ3NpbigyeCknLCAneCcpKSAgICAgICAgICAgICAgICAvLyBOb2RlIHsyICogY29zKDIgKiB4KX1cbiAgICogICAgIG1hdGguZGVyaXZhdGl2ZSgnMip4JywgJ3gnKS5ldmFsdWF0ZSgpICAgICAgICAgIC8vIG51bWJlciAyXG4gICAqICAgICBtYXRoLmRlcml2YXRpdmUoJ3heMicsICd4JykuZXZhbHVhdGUoe3g6IDR9KSAgICAvLyBudW1iZXIgOFxuICAgKiAgICAgY29uc3QgZiA9IG1hdGgucGFyc2UoJ3heMicpXG4gICAqICAgICBjb25zdCB4ID0gbWF0aC5wYXJzZSgneCcpXG4gICAqICAgICBtYXRoLmRlcml2YXRpdmUoZiwgeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb2RlIHsyICogeH1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBzaW1wbGlmeSwgcGFyc2UsIGV2YWx1YXRlXG4gICAqXG4gICAqIEBwYXJhbSAge05vZGUgfCBzdHJpbmd9IGV4cHIgICAgICAgICAgIFRoZSBleHByZXNzaW9uIHRvIGRpZmZlcmVudGlhdGVcbiAgICogQHBhcmFtICB7U3ltYm9sTm9kZSB8IHN0cmluZ30gdmFyaWFibGUgVGhlIHZhcmlhYmxlIG92ZXIgd2hpY2ggdG8gZGlmZmVyZW50aWF0ZVxuICAgKiBAcGFyYW0gIHt7c2ltcGxpZnk6IGJvb2xlYW59fSBbb3B0aW9uc11cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgVGhlcmUgaXMgb25lIG9wdGlvbiBhdmFpbGFibGUsIGBzaW1wbGlmeWAsIHdoaWNoXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHRydWUgYnkgZGVmYXVsdC4gV2hlbiBmYWxzZSwgb3V0cHV0IHdpbGwgbm90XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgIGJlIHNpbXBsaWZpZWQuXG4gICAqIEByZXR1cm4ge0NvbnN0YW50Tm9kZSB8IFN5bWJvbE5vZGUgfCBQYXJlbnRoZXNpc05vZGUgfCBGdW5jdGlvbk5vZGUgfCBPcGVyYXRvck5vZGV9ICAgIFRoZSBkZXJpdmF0aXZlIG9mIGBleHByYFxuICAgKi9cbiAgdmFyIGRlcml2YXRpdmUgPSB0eXBlZCgnZGVyaXZhdGl2ZScsIHtcbiAgICAnTm9kZSwgU3ltYm9sTm9kZSwgT2JqZWN0JzogZnVuY3Rpb24gTm9kZVN5bWJvbE5vZGVPYmplY3QoZXhwciwgdmFyaWFibGUsIG9wdGlvbnMpIHtcbiAgICAgIHZhciBjb25zdE5vZGVzID0ge307XG4gICAgICBjb25zdFRhZyhjb25zdE5vZGVzLCBleHByLCB2YXJpYWJsZS5uYW1lKTtcblxuICAgICAgdmFyIHJlcyA9IF9kZXJpdmF0aXZlKGV4cHIsIGNvbnN0Tm9kZXMpO1xuXG4gICAgICByZXR1cm4gb3B0aW9ucy5zaW1wbGlmeSA/IHNpbXBsaWZ5KHJlcykgOiByZXM7XG4gICAgfSxcbiAgICAnTm9kZSwgU3ltYm9sTm9kZSc6IGZ1bmN0aW9uIE5vZGVTeW1ib2xOb2RlKGV4cHIsIHZhcmlhYmxlKSB7XG4gICAgICByZXR1cm4gZGVyaXZhdGl2ZShleHByLCB2YXJpYWJsZSwge1xuICAgICAgICBzaW1wbGlmeTogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSxcbiAgICAnc3RyaW5nLCBTeW1ib2xOb2RlJzogZnVuY3Rpb24gc3RyaW5nU3ltYm9sTm9kZShleHByLCB2YXJpYWJsZSkge1xuICAgICAgcmV0dXJuIGRlcml2YXRpdmUocGFyc2UoZXhwciksIHZhcmlhYmxlKTtcbiAgICB9LFxuICAgICdzdHJpbmcsIFN5bWJvbE5vZGUsIE9iamVjdCc6IGZ1bmN0aW9uIHN0cmluZ1N5bWJvbE5vZGVPYmplY3QoZXhwciwgdmFyaWFibGUsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBkZXJpdmF0aXZlKHBhcnNlKGV4cHIpLCB2YXJpYWJsZSwgb3B0aW9ucyk7XG4gICAgfSxcbiAgICAnc3RyaW5nLCBzdHJpbmcnOiBmdW5jdGlvbiBzdHJpbmdTdHJpbmcoZXhwciwgdmFyaWFibGUpIHtcbiAgICAgIHJldHVybiBkZXJpdmF0aXZlKHBhcnNlKGV4cHIpLCBwYXJzZSh2YXJpYWJsZSkpO1xuICAgIH0sXG4gICAgJ3N0cmluZywgc3RyaW5nLCBPYmplY3QnOiBmdW5jdGlvbiBzdHJpbmdTdHJpbmdPYmplY3QoZXhwciwgdmFyaWFibGUsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBkZXJpdmF0aXZlKHBhcnNlKGV4cHIpLCBwYXJzZSh2YXJpYWJsZSksIG9wdGlvbnMpO1xuICAgIH0sXG4gICAgJ05vZGUsIHN0cmluZyc6IGZ1bmN0aW9uIE5vZGVTdHJpbmcoZXhwciwgdmFyaWFibGUpIHtcbiAgICAgIHJldHVybiBkZXJpdmF0aXZlKGV4cHIsIHBhcnNlKHZhcmlhYmxlKSk7XG4gICAgfSxcbiAgICAnTm9kZSwgc3RyaW5nLCBPYmplY3QnOiBmdW5jdGlvbiBOb2RlU3RyaW5nT2JqZWN0KGV4cHIsIHZhcmlhYmxlLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gZGVyaXZhdGl2ZShleHByLCBwYXJzZSh2YXJpYWJsZSksIG9wdGlvbnMpO1xuICAgIH0gLy8gVE9ETzogcmVwbGFjZSB0aGUgOCBzaWduYXR1cmVzIGFib3ZlIHdpdGggNCBhcyBzb29uIGFzIHR5cGVkLWZ1bmN0aW9uIHN1cHBvcnRzIG9wdGlvbmFsIGFyZ3VtZW50c1xuXG4gICAgLyogVE9ETzogaW1wbGVtZW50IGFuZCB0ZXN0IHN5bnRheCB3aXRoIG9yZGVyIG9mIGRlcml2YXRpdmVzIC0+IGltcGxlbWVudCBhcyBhbiBvcHRpb24ge29yZGVyOiBudW1iZXJ9XG4gICAgJ05vZGUsIFN5bWJvbE5vZGUsIENvbnN0YW50Tm9kZSc6IGZ1bmN0aW9uIChleHByLCB2YXJpYWJsZSwge29yZGVyfSkge1xuICAgICAgbGV0IHJlcyA9IGV4cHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXI7IGkrKykge1xuICAgICAgICBsZXQgY29uc3ROb2RlcyA9IHt9XG4gICAgICAgIGNvbnN0VGFnKGNvbnN0Tm9kZXMsIGV4cHIsIHZhcmlhYmxlLm5hbWUpXG4gICAgICAgIHJlcyA9IF9kZXJpdmF0aXZlKHJlcywgY29uc3ROb2RlcylcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNcbiAgICB9XG4gICAgKi9cblxuICB9KTtcbiAgZGVyaXZhdGl2ZS5fc2ltcGxpZnkgPSB0cnVlO1xuXG4gIGRlcml2YXRpdmUudG9UZXggPSBmdW5jdGlvbiAoZGVyaXYpIHtcbiAgICByZXR1cm4gX2Rlcml2VGV4LmFwcGx5KG51bGwsIGRlcml2LmFyZ3MpO1xuICB9OyAvLyBGSVhNRTogbW92ZSB0aGUgdG9UZXggbWV0aG9kIG9mIGRlcml2YXRpdmUgdG8gbGF0ZXguanMuIERpZmZpY3VsdHkgaXMgdGhhdCBpdCByZWxpZXMgb24gcGFyc2UuXG4gIC8vIE5PVEU6IHRoZSBvcHRpb25hbCBcIm9yZGVyXCIgcGFyYW1ldGVyIGhlcmUgaXMgY3VycmVudGx5IHVudXNlZFxuXG5cbiAgdmFyIF9kZXJpdlRleCA9IHR5cGVkKCdfZGVyaXZUZXgnLCB7XG4gICAgJ05vZGUsIFN5bWJvbE5vZGUnOiBmdW5jdGlvbiBOb2RlU3ltYm9sTm9kZShleHByLCB4KSB7XG4gICAgICBpZiAoKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkoZXhwcikgJiYgKDAsIF9pcy50eXBlT2YpKGV4cHIudmFsdWUpID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gX2Rlcml2VGV4KHBhcnNlKGV4cHIudmFsdWUpLnRvU3RyaW5nKCksIHgudG9TdHJpbmcoKSwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gX2Rlcml2VGV4KGV4cHIudG9TdHJpbmcoKSwgeC50b1N0cmluZygpLCAxKTtcbiAgICAgIH1cbiAgICB9LFxuICAgICdOb2RlLCBDb25zdGFudE5vZGUnOiBmdW5jdGlvbiBOb2RlQ29uc3RhbnROb2RlKGV4cHIsIHgpIHtcbiAgICAgIGlmICgoMCwgX2lzLnR5cGVPZikoeC52YWx1ZSkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBfZGVyaXZUZXgoZXhwciwgcGFyc2UoeC52YWx1ZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHNlY29uZCBwYXJhbWV0ZXIgdG8gJ2Rlcml2YXRpdmUnIGlzIGEgbm9uLXN0cmluZyBjb25zdGFudFwiKTtcbiAgICAgIH1cbiAgICB9LFxuICAgICdOb2RlLCBTeW1ib2xOb2RlLCBDb25zdGFudE5vZGUnOiBmdW5jdGlvbiBOb2RlU3ltYm9sTm9kZUNvbnN0YW50Tm9kZShleHByLCB4LCBvcmRlcikge1xuICAgICAgcmV0dXJuIF9kZXJpdlRleChleHByLnRvU3RyaW5nKCksIHgubmFtZSwgb3JkZXIudmFsdWUpO1xuICAgIH0sXG4gICAgJ3N0cmluZywgc3RyaW5nLCBudW1iZXInOiBmdW5jdGlvbiBzdHJpbmdTdHJpbmdOdW1iZXIoZXhwciwgeCwgb3JkZXIpIHtcbiAgICAgIHZhciBkO1xuXG4gICAgICBpZiAob3JkZXIgPT09IDEpIHtcbiAgICAgICAgZCA9ICd7ZFxcXFxvdmVyIGQnICsgeCArICd9JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGQgPSAne2ReeycgKyBvcmRlciArICd9XFxcXG92ZXIgZCcgKyB4ICsgJ157JyArIG9yZGVyICsgJ319JztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGQgKyBcIlxcXFxsZWZ0W1wiLmNvbmNhdChleHByLCBcIlxcXFxyaWdodF1cIik7XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIERvZXMgYSBkZXB0aC1maXJzdCBzZWFyY2ggb24gdGhlIGV4cHJlc3Npb24gdHJlZSB0byBpZGVudGlmeSB3aGF0IE5vZGVzXG4gICAqIGFyZSBjb25zdGFudHMgKGUuZy4gMiArIDIpLCBhbmQgc3RvcmVzIHRoZSBvbmVzIHRoYXQgYXJlIGNvbnN0YW50cyBpblxuICAgKiBjb25zdE5vZGVzLiBDbGFzc2lmaWNhdGlvbiBpcyBkb25lIGFzIGZvbGxvd3M6XG4gICAqXG4gICAqICAgMS4gQ29uc3RhbnROb2RlcyBhcmUgY29uc3RhbnRzLlxuICAgKiAgIDIuIElmIHRoZXJlIGV4aXN0cyBhIFN5bWJvbE5vZGUsIG9mIHdoaWNoIHdlIGFyZSBkaWZmZXJlbnRpYXRpbmcgb3ZlcixcbiAgICogICAgICBpbiB0aGUgc3VidHJlZSBpdCBpcyBub3QgY29uc3RhbnQuXG4gICAqXG4gICAqIEBwYXJhbSAge09iamVjdH0gY29uc3ROb2RlcyAgSG9sZHMgdGhlIG5vZGVzIHRoYXQgYXJlIGNvbnN0YW50XG4gICAqIEBwYXJhbSAge0NvbnN0YW50Tm9kZSB8IFN5bWJvbE5vZGUgfCBQYXJlbnRoZXNpc05vZGUgfCBGdW5jdGlvbk5vZGUgfCBPcGVyYXRvck5vZGV9IG5vZGVcbiAgICogQHBhcmFtICB7c3RyaW5nfSB2YXJOYW1lICAgICBWYXJpYWJsZSB0aGF0IHdlIGFyZSBkaWZmZXJlbnRpYXRpbmdcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gIGlmIG5vZGUgaXMgY29uc3RhbnRcbiAgICovXG4gIC8vIFRPRE86IGNhbiB3ZSByZXdyaXRlIGNvbnN0VGFnIGludG8gYSBwdXJlIGZ1bmN0aW9uP1xuXG5cbiAgdmFyIGNvbnN0VGFnID0gdHlwZWQoJ2NvbnN0VGFnJywge1xuICAgICdPYmplY3QsIENvbnN0YW50Tm9kZSwgc3RyaW5nJzogZnVuY3Rpb24gT2JqZWN0Q29uc3RhbnROb2RlU3RyaW5nKGNvbnN0Tm9kZXMsIG5vZGUpIHtcbiAgICAgIGNvbnN0Tm9kZXNbbm9kZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICAnT2JqZWN0LCBTeW1ib2xOb2RlLCBzdHJpbmcnOiBmdW5jdGlvbiBPYmplY3RTeW1ib2xOb2RlU3RyaW5nKGNvbnN0Tm9kZXMsIG5vZGUsIHZhck5hbWUpIHtcbiAgICAgIC8vIFRyZWF0IG90aGVyIHZhcmlhYmxlcyBsaWtlIGNvbnN0YW50cy4gRm9yIHJlYXNvbmluZywgc2VlOlxuICAgICAgLy8gICBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9QYXJ0aWFsX2Rlcml2YXRpdmVcbiAgICAgIGlmIChub2RlLm5hbWUgIT09IHZhck5hbWUpIHtcbiAgICAgICAgY29uc3ROb2Rlc1tub2RlXSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICAnT2JqZWN0LCBQYXJlbnRoZXNpc05vZGUsIHN0cmluZyc6IGZ1bmN0aW9uIE9iamVjdFBhcmVudGhlc2lzTm9kZVN0cmluZyhjb25zdE5vZGVzLCBub2RlLCB2YXJOYW1lKSB7XG4gICAgICByZXR1cm4gY29uc3RUYWcoY29uc3ROb2Rlcywgbm9kZS5jb250ZW50LCB2YXJOYW1lKTtcbiAgICB9LFxuICAgICdPYmplY3QsIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUsIHN0cmluZyc6IGZ1bmN0aW9uIE9iamVjdEZ1bmN0aW9uQXNzaWdubWVudE5vZGVTdHJpbmcoY29uc3ROb2Rlcywgbm9kZSwgdmFyTmFtZSkge1xuICAgICAgaWYgKG5vZGUucGFyYW1zLmluZGV4T2YodmFyTmFtZSkgPT09IC0xKSB7XG4gICAgICAgIGNvbnN0Tm9kZXNbbm9kZV0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnN0VGFnKGNvbnN0Tm9kZXMsIG5vZGUuZXhwciwgdmFyTmFtZSk7XG4gICAgfSxcbiAgICAnT2JqZWN0LCBGdW5jdGlvbk5vZGUgfCBPcGVyYXRvck5vZGUsIHN0cmluZyc6IGZ1bmN0aW9uIE9iamVjdEZ1bmN0aW9uTm9kZU9wZXJhdG9yTm9kZVN0cmluZyhjb25zdE5vZGVzLCBub2RlLCB2YXJOYW1lKSB7XG4gICAgICBpZiAobm9kZS5hcmdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdmFyIGlzQ29uc3QgPSBjb25zdFRhZyhjb25zdE5vZGVzLCBub2RlLmFyZ3NbMF0sIHZhck5hbWUpO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbm9kZS5hcmdzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgaXNDb25zdCA9IGNvbnN0VGFnKGNvbnN0Tm9kZXMsIG5vZGUuYXJnc1tpXSwgdmFyTmFtZSkgJiYgaXNDb25zdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0NvbnN0KSB7XG4gICAgICAgICAgY29uc3ROb2Rlc1tub2RlXSA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBBcHBsaWVzIGRpZmZlcmVudGlhdGlvbiBydWxlcy5cbiAgICpcbiAgICogQHBhcmFtICB7Q29uc3RhbnROb2RlIHwgU3ltYm9sTm9kZSB8IFBhcmVudGhlc2lzTm9kZSB8IEZ1bmN0aW9uTm9kZSB8IE9wZXJhdG9yTm9kZX0gbm9kZVxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGNvbnN0Tm9kZXMgIEhvbGRzIHRoZSBub2RlcyB0aGF0IGFyZSBjb25zdGFudFxuICAgKiBAcmV0dXJuIHtDb25zdGFudE5vZGUgfCBTeW1ib2xOb2RlIHwgUGFyZW50aGVzaXNOb2RlIHwgRnVuY3Rpb25Ob2RlIHwgT3BlcmF0b3JOb2RlfSAgICBUaGUgZGVyaXZhdGl2ZSBvZiBgZXhwcmBcbiAgICovXG5cbiAgdmFyIF9kZXJpdmF0aXZlID0gdHlwZWQoJ19kZXJpdmF0aXZlJywge1xuICAgICdDb25zdGFudE5vZGUsIE9iamVjdCc6IGZ1bmN0aW9uIENvbnN0YW50Tm9kZU9iamVjdChub2RlKSB7XG4gICAgICByZXR1cm4gY3JlYXRlQ29uc3RhbnROb2RlKDApO1xuICAgIH0sXG4gICAgJ1N5bWJvbE5vZGUsIE9iamVjdCc6IGZ1bmN0aW9uIFN5bWJvbE5vZGVPYmplY3Qobm9kZSwgY29uc3ROb2Rlcykge1xuICAgICAgaWYgKGNvbnN0Tm9kZXNbbm9kZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlQ29uc3RhbnROb2RlKDApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY3JlYXRlQ29uc3RhbnROb2RlKDEpO1xuICAgIH0sXG4gICAgJ1BhcmVudGhlc2lzTm9kZSwgT2JqZWN0JzogZnVuY3Rpb24gUGFyZW50aGVzaXNOb2RlT2JqZWN0KG5vZGUsIGNvbnN0Tm9kZXMpIHtcbiAgICAgIHJldHVybiBuZXcgUGFyZW50aGVzaXNOb2RlKF9kZXJpdmF0aXZlKG5vZGUuY29udGVudCwgY29uc3ROb2RlcykpO1xuICAgIH0sXG4gICAgJ0Z1bmN0aW9uQXNzaWdubWVudE5vZGUsIE9iamVjdCc6IGZ1bmN0aW9uIEZ1bmN0aW9uQXNzaWdubWVudE5vZGVPYmplY3Qobm9kZSwgY29uc3ROb2Rlcykge1xuICAgICAgaWYgKGNvbnN0Tm9kZXNbbm9kZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlQ29uc3RhbnROb2RlKDApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX2Rlcml2YXRpdmUobm9kZS5leHByLCBjb25zdE5vZGVzKTtcbiAgICB9LFxuICAgICdGdW5jdGlvbk5vZGUsIE9iamVjdCc6IGZ1bmN0aW9uIEZ1bmN0aW9uTm9kZU9iamVjdChub2RlLCBjb25zdE5vZGVzKSB7XG4gICAgICBpZiAobm9kZS5hcmdzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICBmdW5jQXJnc0NoZWNrKG5vZGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uc3ROb2Rlc1tub2RlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVDb25zdGFudE5vZGUoMCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBhcmcwID0gbm9kZS5hcmdzWzBdO1xuICAgICAgdmFyIGFyZzE7XG4gICAgICB2YXIgZGl2ID0gZmFsc2U7IC8vIGlzIG91dHB1dCBhIGZyYWN0aW9uP1xuXG4gICAgICB2YXIgbmVnYXRpdmUgPSBmYWxzZTsgLy8gaXMgb3V0cHV0IG5lZ2F0aXZlP1xuXG4gICAgICB2YXIgZnVuY0Rlcml2YXRpdmU7XG5cbiAgICAgIHN3aXRjaCAobm9kZS5uYW1lKSB7XG4gICAgICAgIGNhc2UgJ2NicnQnOlxuICAgICAgICAgIC8vIGQvZHgoY2JydCh4KSkgPSAxIC8gKDN4XigyLzMpKVxuICAgICAgICAgIGRpdiA9IHRydWU7XG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW2NyZWF0ZUNvbnN0YW50Tm9kZSgzKSwgbmV3IE9wZXJhdG9yTm9kZSgnXicsICdwb3cnLCBbYXJnMCwgbmV3IE9wZXJhdG9yTm9kZSgnLycsICdkaXZpZGUnLCBbY3JlYXRlQ29uc3RhbnROb2RlKDIpLCBjcmVhdGVDb25zdGFudE5vZGUoMyldKV0pXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnc3FydCc6XG4gICAgICAgIGNhc2UgJ250aFJvb3QnOlxuICAgICAgICAgIC8vIGQvZHgoc3FydCh4KSkgPSAxIC8gKDIqc3FydCh4KSlcbiAgICAgICAgICBpZiAobm9kZS5hcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgZGl2ID0gdHJ1ZTtcbiAgICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFtjcmVhdGVDb25zdGFudE5vZGUoMiksIG5ldyBGdW5jdGlvbk5vZGUoJ3NxcnQnLCBbYXJnMF0pXSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChub2RlLmFyZ3MubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAvLyBSZWFycmFuZ2UgZnJvbSBudGhSb290KHgsIGEpIC0+IHheKDEvYSlcbiAgICAgICAgICAgIGFyZzEgPSBuZXcgT3BlcmF0b3JOb2RlKCcvJywgJ2RpdmlkZScsIFtjcmVhdGVDb25zdGFudE5vZGUoMSksIG5vZGUuYXJnc1sxXV0pOyAvLyBJcyBhIHZhcmlhYmxlP1xuXG4gICAgICAgICAgICBjb25zdE5vZGVzW2FyZzFdID0gY29uc3ROb2Rlc1tub2RlLmFyZ3NbMV1dO1xuICAgICAgICAgICAgcmV0dXJuIF9kZXJpdmF0aXZlKG5ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAsIGFyZzFdKSwgY29uc3ROb2Rlcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnbG9nMTAnOlxuICAgICAgICAgIGFyZzEgPSBjcmVhdGVDb25zdGFudE5vZGUoMTApO1xuXG4gICAgICAgIC8qIGZhbGwgdGhyb3VnaCEgKi9cblxuICAgICAgICBjYXNlICdsb2cnOlxuICAgICAgICAgIGlmICghYXJnMSAmJiBub2RlLmFyZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAvLyBkL2R4KGxvZyh4KSkgPSAxIC8geFxuICAgICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBhcmcwLmNsb25lKCk7XG4gICAgICAgICAgICBkaXYgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5hcmdzLmxlbmd0aCA9PT0gMSAmJiBhcmcxIHx8IG5vZGUuYXJncy5sZW5ndGggPT09IDIgJiYgY29uc3ROb2Rlc1tub2RlLmFyZ3NbMV1dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIGQvZHgobG9nKHgsIGMpKSA9IDEgLyAoeCpsbihjKSlcbiAgICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFthcmcwLmNsb25lKCksIG5ldyBGdW5jdGlvbk5vZGUoJ2xvZycsIFthcmcxIHx8IG5vZGUuYXJnc1sxXV0pXSk7XG4gICAgICAgICAgICBkaXYgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5hcmdzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgLy8gZC9keChsb2coZih4KSwgZyh4KSkpID0gZC9keChsb2coZih4KSkgLyBsb2coZyh4KSkpXG4gICAgICAgICAgICByZXR1cm4gX2Rlcml2YXRpdmUobmV3IE9wZXJhdG9yTm9kZSgnLycsICdkaXZpZGUnLCBbbmV3IEZ1bmN0aW9uTm9kZSgnbG9nJywgW2FyZzBdKSwgbmV3IEZ1bmN0aW9uTm9kZSgnbG9nJywgW25vZGUuYXJnc1sxXV0pXSksIGNvbnN0Tm9kZXMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3Bvdyc6XG4gICAgICAgICAgY29uc3ROb2Rlc1thcmcxXSA9IGNvbnN0Tm9kZXNbbm9kZS5hcmdzWzFdXTsgLy8gUGFzcyB0byBwb3cgb3BlcmF0b3Igbm9kZSBwYXJzZXJcblxuICAgICAgICAgIHJldHVybiBfZGVyaXZhdGl2ZShuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFthcmcwLCBub2RlLmFyZ3NbMV1dKSwgY29uc3ROb2Rlcyk7XG5cbiAgICAgICAgY2FzZSAnZXhwJzpcbiAgICAgICAgICAvLyBkL2R4KGVeeCkgPSBlXnhcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBGdW5jdGlvbk5vZGUoJ2V4cCcsIFthcmcwLmNsb25lKCldKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdzaW4nOlxuICAgICAgICAgIC8vIGQvZHgoc2luKHgpKSA9IGNvcyh4KVxuICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IEZ1bmN0aW9uTm9kZSgnY29zJywgW2FyZzAuY2xvbmUoKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2Nvcyc6XG4gICAgICAgICAgLy8gZC9keChjb3MoeCkpID0gLXNpbih4KVxuICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnLScsICd1bmFyeU1pbnVzJywgW25ldyBGdW5jdGlvbk5vZGUoJ3NpbicsIFthcmcwLmNsb25lKCldKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3Rhbic6XG4gICAgICAgICAgLy8gZC9keCh0YW4oeCkpID0gc2VjKHgpXjJcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW25ldyBGdW5jdGlvbk5vZGUoJ3NlYycsIFthcmcwLmNsb25lKCldKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnc2VjJzpcbiAgICAgICAgICAvLyBkL2R4KHNlYyh4KSkgPSBzZWMoeCl0YW4oeClcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbbm9kZSwgbmV3IEZ1bmN0aW9uTm9kZSgndGFuJywgW2FyZzAuY2xvbmUoKV0pXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnY3NjJzpcbiAgICAgICAgICAvLyBkL2R4KGNzYyh4KSkgPSAtY3NjKHgpY290KHgpXG4gICAgICAgICAgbmVnYXRpdmUgPSB0cnVlO1xuICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFtub2RlLCBuZXcgRnVuY3Rpb25Ob2RlKCdjb3QnLCBbYXJnMC5jbG9uZSgpXSldKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdjb3QnOlxuICAgICAgICAgIC8vIGQvZHgoY290KHgpKSA9IC1jc2MoeCleMlxuICAgICAgICAgIG5lZ2F0aXZlID0gdHJ1ZTtcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW25ldyBGdW5jdGlvbk5vZGUoJ2NzYycsIFthcmcwLmNsb25lKCldKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYXNpbic6XG4gICAgICAgICAgLy8gZC9keChhc2luKHgpKSA9IDEgLyBzcXJ0KDEgLSB4XjIpXG4gICAgICAgICAgZGl2ID0gdHJ1ZTtcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBGdW5jdGlvbk5vZGUoJ3NxcnQnLCBbbmV3IE9wZXJhdG9yTm9kZSgnLScsICdzdWJ0cmFjdCcsIFtjcmVhdGVDb25zdGFudE5vZGUoMSksIG5ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSldKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2Fjb3MnOlxuICAgICAgICAgIC8vIGQvZHgoYWNvcyh4KSkgPSAtMSAvIHNxcnQoMSAtIHheMilcbiAgICAgICAgICBkaXYgPSB0cnVlO1xuICAgICAgICAgIG5lZ2F0aXZlID0gdHJ1ZTtcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBGdW5jdGlvbk5vZGUoJ3NxcnQnLCBbbmV3IE9wZXJhdG9yTm9kZSgnLScsICdzdWJ0cmFjdCcsIFtjcmVhdGVDb25zdGFudE5vZGUoMSksIG5ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSldKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2F0YW4nOlxuICAgICAgICAgIC8vIGQvZHgoYXRhbih4KSkgPSAxIC8gKHheMiArIDEpXG4gICAgICAgICAgZGl2ID0gdHJ1ZTtcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJysnLCAnYWRkJywgW25ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSksIGNyZWF0ZUNvbnN0YW50Tm9kZSgxKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2FzZWMnOlxuICAgICAgICAgIC8vIGQvZHgoYXNlYyh4KSkgPSAxIC8gKHx4fCpzcXJ0KHheMiAtIDEpKVxuICAgICAgICAgIGRpdiA9IHRydWU7XG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW25ldyBGdW5jdGlvbk5vZGUoJ2FicycsIFthcmcwLmNsb25lKCldKSwgbmV3IEZ1bmN0aW9uTm9kZSgnc3FydCcsIFtuZXcgT3BlcmF0b3JOb2RlKCctJywgJ3N1YnRyYWN0JywgW25ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSksIGNyZWF0ZUNvbnN0YW50Tm9kZSgxKV0pXSldKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdhY3NjJzpcbiAgICAgICAgICAvLyBkL2R4KGFjc2MoeCkpID0gLTEgLyAofHh8KnNxcnQoeF4yIC0gMSkpXG4gICAgICAgICAgZGl2ID0gdHJ1ZTtcbiAgICAgICAgICBuZWdhdGl2ZSA9IHRydWU7XG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW25ldyBGdW5jdGlvbk5vZGUoJ2FicycsIFthcmcwLmNsb25lKCldKSwgbmV3IEZ1bmN0aW9uTm9kZSgnc3FydCcsIFtuZXcgT3BlcmF0b3JOb2RlKCctJywgJ3N1YnRyYWN0JywgW25ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSksIGNyZWF0ZUNvbnN0YW50Tm9kZSgxKV0pXSldKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdhY290JzpcbiAgICAgICAgICAvLyBkL2R4KGFjb3QoeCkpID0gLTEgLyAoeF4yICsgMSlcbiAgICAgICAgICBkaXYgPSB0cnVlO1xuICAgICAgICAgIG5lZ2F0aXZlID0gdHJ1ZTtcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJysnLCAnYWRkJywgW25ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSksIGNyZWF0ZUNvbnN0YW50Tm9kZSgxKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3NpbmgnOlxuICAgICAgICAgIC8vIGQvZHgoc2luaCh4KSkgPSBjb3NoKHgpXG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgRnVuY3Rpb25Ob2RlKCdjb3NoJywgW2FyZzAuY2xvbmUoKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2Nvc2gnOlxuICAgICAgICAgIC8vIGQvZHgoY29zaCh4KSkgPSBzaW5oKHgpXG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgRnVuY3Rpb25Ob2RlKCdzaW5oJywgW2FyZzAuY2xvbmUoKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3RhbmgnOlxuICAgICAgICAgIC8vIGQvZHgodGFuaCh4KSkgPSBzZWNoKHgpXjJcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW25ldyBGdW5jdGlvbk5vZGUoJ3NlY2gnLCBbYXJnMC5jbG9uZSgpXSksIGNyZWF0ZUNvbnN0YW50Tm9kZSgyKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3NlY2gnOlxuICAgICAgICAgIC8vIGQvZHgoc2VjaCh4KSkgPSAtc2VjaCh4KXRhbmgoeClcbiAgICAgICAgICBuZWdhdGl2ZSA9IHRydWU7XG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW25vZGUsIG5ldyBGdW5jdGlvbk5vZGUoJ3RhbmgnLCBbYXJnMC5jbG9uZSgpXSldKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdjc2NoJzpcbiAgICAgICAgICAvLyBkL2R4KGNzY2goeCkpID0gLWNzY2goeCljb3RoKHgpXG4gICAgICAgICAgbmVnYXRpdmUgPSB0cnVlO1xuICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFtub2RlLCBuZXcgRnVuY3Rpb25Ob2RlKCdjb3RoJywgW2FyZzAuY2xvbmUoKV0pXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnY290aCc6XG4gICAgICAgICAgLy8gZC9keChjb3RoKHgpKSA9IC1jc2NoKHgpXjJcbiAgICAgICAgICBuZWdhdGl2ZSA9IHRydWU7XG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFtuZXcgRnVuY3Rpb25Ob2RlKCdjc2NoJywgW2FyZzAuY2xvbmUoKV0pLCBjcmVhdGVDb25zdGFudE5vZGUoMildKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdhc2luaCc6XG4gICAgICAgICAgLy8gZC9keChhc2luaCh4KSkgPSAxIC8gc3FydCh4XjIgKyAxKVxuICAgICAgICAgIGRpdiA9IHRydWU7XG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgRnVuY3Rpb25Ob2RlKCdzcXJ0JywgW25ldyBPcGVyYXRvck5vZGUoJysnLCAnYWRkJywgW25ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSksIGNyZWF0ZUNvbnN0YW50Tm9kZSgxKV0pXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYWNvc2gnOlxuICAgICAgICAgIC8vIGQvZHgoYWNvc2goeCkpID0gMSAvIHNxcnQoeF4yIC0gMSk7IFhYWCBwb3RlbnRpYWxseSBvbmx5IGZvciB4ID49IDEgKHRoZSByZWFsIHNwZWN0cnVtKVxuICAgICAgICAgIGRpdiA9IHRydWU7XG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgRnVuY3Rpb25Ob2RlKCdzcXJ0JywgW25ldyBPcGVyYXRvck5vZGUoJy0nLCAnc3VidHJhY3QnLCBbbmV3IE9wZXJhdG9yTm9kZSgnXicsICdwb3cnLCBbYXJnMC5jbG9uZSgpLCBjcmVhdGVDb25zdGFudE5vZGUoMildKSwgY3JlYXRlQ29uc3RhbnROb2RlKDEpXSldKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdhdGFuaCc6XG4gICAgICAgICAgLy8gZC9keChhdGFuaCh4KSkgPSAxIC8gKDEgLSB4XjIpXG4gICAgICAgICAgZGl2ID0gdHJ1ZTtcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJy0nLCAnc3VidHJhY3QnLCBbY3JlYXRlQ29uc3RhbnROb2RlKDEpLCBuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFthcmcwLmNsb25lKCksIGNyZWF0ZUNvbnN0YW50Tm9kZSgyKV0pXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYXNlY2gnOlxuICAgICAgICAgIC8vIGQvZHgoYXNlY2goeCkpID0gLTEgLyAoeCpzcXJ0KDEgLSB4XjIpKVxuICAgICAgICAgIGRpdiA9IHRydWU7XG4gICAgICAgICAgbmVnYXRpdmUgPSB0cnVlO1xuICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFthcmcwLmNsb25lKCksIG5ldyBGdW5jdGlvbk5vZGUoJ3NxcnQnLCBbbmV3IE9wZXJhdG9yTm9kZSgnLScsICdzdWJ0cmFjdCcsIFtjcmVhdGVDb25zdGFudE5vZGUoMSksIG5ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSldKV0pXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYWNzY2gnOlxuICAgICAgICAgIC8vIGQvZHgoYWNzY2goeCkpID0gLTEgLyAofHh8KnNxcnQoeF4yICsgMSkpXG4gICAgICAgICAgZGl2ID0gdHJ1ZTtcbiAgICAgICAgICBuZWdhdGl2ZSA9IHRydWU7XG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW25ldyBGdW5jdGlvbk5vZGUoJ2FicycsIFthcmcwLmNsb25lKCldKSwgbmV3IEZ1bmN0aW9uTm9kZSgnc3FydCcsIFtuZXcgT3BlcmF0b3JOb2RlKCcrJywgJ2FkZCcsIFtuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFthcmcwLmNsb25lKCksIGNyZWF0ZUNvbnN0YW50Tm9kZSgyKV0pLCBjcmVhdGVDb25zdGFudE5vZGUoMSldKV0pXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYWNvdGgnOlxuICAgICAgICAgIC8vIGQvZHgoYWNvdGgoeCkpID0gLTEgLyAoMSAtIHheMilcbiAgICAgICAgICBkaXYgPSB0cnVlO1xuICAgICAgICAgIG5lZ2F0aXZlID0gdHJ1ZTtcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJy0nLCAnc3VidHJhY3QnLCBbY3JlYXRlQ29uc3RhbnROb2RlKDEpLCBuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFthcmcwLmNsb25lKCksIGNyZWF0ZUNvbnN0YW50Tm9kZSgyKV0pXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYWJzJzpcbiAgICAgICAgICAvLyBkL2R4KGFicyh4KSkgPSBhYnMoeCkveFxuICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnLycsICdkaXZpZGUnLCBbbmV3IEZ1bmN0aW9uTm9kZShuZXcgU3ltYm9sTm9kZSgnYWJzJyksIFthcmcwLmNsb25lKCldKSwgYXJnMC5jbG9uZSgpXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnZ2FtbWEnOiAvLyBOZWVkcyBkaWdhbW1hIGZ1bmN0aW9uLCBkL2R4KGdhbW1hKHgpKSA9IGdhbW1hKHgpZGlnYW1tYSh4KVxuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGdW5jdGlvbiBcIicgKyBub2RlLm5hbWUgKyAnXCIgaXMgbm90IHN1cHBvcnRlZCBieSBkZXJpdmF0aXZlLCBvciBhIHdyb25nIG51bWJlciBvZiBhcmd1bWVudHMgaXMgcGFzc2VkJyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBvcCwgZnVuYztcblxuICAgICAgaWYgKGRpdikge1xuICAgICAgICBvcCA9ICcvJztcbiAgICAgICAgZnVuYyA9ICdkaXZpZGUnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3AgPSAnKic7XG4gICAgICAgIGZ1bmMgPSAnbXVsdGlwbHknO1xuICAgICAgfVxuICAgICAgLyogQXBwbHkgY2hhaW4gcnVsZSB0byBhbGwgZnVuY3Rpb25zOlxuICAgICAgICAgRih4KSAgPSBmKGcoeCkpXG4gICAgICAgICBGJyh4KSA9IGcnKHgpKmYnKGcoeCkpICovXG5cblxuICAgICAgdmFyIGNoYWluRGVyaXZhdGl2ZSA9IF9kZXJpdmF0aXZlKGFyZzAsIGNvbnN0Tm9kZXMpO1xuXG4gICAgICBpZiAobmVnYXRpdmUpIHtcbiAgICAgICAgY2hhaW5EZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnLScsICd1bmFyeU1pbnVzJywgW2NoYWluRGVyaXZhdGl2ZV0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IE9wZXJhdG9yTm9kZShvcCwgZnVuYywgW2NoYWluRGVyaXZhdGl2ZSwgZnVuY0Rlcml2YXRpdmVdKTtcbiAgICB9LFxuICAgICdPcGVyYXRvck5vZGUsIE9iamVjdCc6IGZ1bmN0aW9uIE9wZXJhdG9yTm9kZU9iamVjdChub2RlLCBjb25zdE5vZGVzKSB7XG4gICAgICBpZiAoY29uc3ROb2Rlc1tub2RlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVDb25zdGFudE5vZGUoMCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlLm9wID09PSAnKycpIHtcbiAgICAgICAgLy8gZC9keChzdW0oZih4KSkgPSBzdW0oZicoeCkpXG4gICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5vZGUub3AsIG5vZGUuZm4sIG5vZGUuYXJncy5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgICAgICAgIHJldHVybiBfZGVyaXZhdGl2ZShhcmcsIGNvbnN0Tm9kZXMpO1xuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlLm9wID09PSAnLScpIHtcbiAgICAgICAgLy8gZC9keCgrLy1mKHgpKSA9ICsvLWYnKHgpXG4gICAgICAgIGlmIChub2RlLmlzVW5hcnkoKSkge1xuICAgICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5vZGUub3AsIG5vZGUuZm4sIFtfZGVyaXZhdGl2ZShub2RlLmFyZ3NbMF0sIGNvbnN0Tm9kZXMpXSk7XG4gICAgICAgIH0gLy8gTGluZWFyaXR5IG9mIGRpZmZlcmVudGlhdGlvbiwgZC9keChmKHgpICsvLSBnKHgpKSA9IGYnKHgpICsvLSBnJyh4KVxuXG5cbiAgICAgICAgaWYgKG5vZGUuaXNCaW5hcnkoKSkge1xuICAgICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5vZGUub3AsIG5vZGUuZm4sIFtfZGVyaXZhdGl2ZShub2RlLmFyZ3NbMF0sIGNvbnN0Tm9kZXMpLCBfZGVyaXZhdGl2ZShub2RlLmFyZ3NbMV0sIGNvbnN0Tm9kZXMpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUub3AgPT09ICcqJykge1xuICAgICAgICAvLyBkL2R4KGMqZih4KSkgPSBjKmYnKHgpXG4gICAgICAgIHZhciBjb25zdGFudFRlcm1zID0gbm9kZS5hcmdzLmZpbHRlcihmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnN0Tm9kZXNbYXJnXSAhPT0gdW5kZWZpbmVkO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoY29uc3RhbnRUZXJtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdmFyIG5vbkNvbnN0YW50VGVybXMgPSBub2RlLmFyZ3MuZmlsdGVyKGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgICAgIHJldHVybiBjb25zdE5vZGVzW2FyZ10gPT09IHVuZGVmaW5lZDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB2YXIgbm9uQ29uc3RhbnROb2RlID0gbm9uQ29uc3RhbnRUZXJtcy5sZW5ndGggPT09IDEgPyBub25Db25zdGFudFRlcm1zWzBdIDogbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIG5vbkNvbnN0YW50VGVybXMpO1xuICAgICAgICAgIHZhciBuZXdBcmdzID0gY29uc3RhbnRUZXJtcy5jb25jYXQoX2Rlcml2YXRpdmUobm9uQ29uc3RhbnROb2RlLCBjb25zdE5vZGVzKSk7XG4gICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBuZXdBcmdzKTtcbiAgICAgICAgfSAvLyBQcm9kdWN0IFJ1bGUsIGQvZHgoZih4KSpnKHgpKSA9IGYnKHgpKmcoeCkgKyBmKHgpKmcnKHgpXG5cblxuICAgICAgICByZXR1cm4gbmV3IE9wZXJhdG9yTm9kZSgnKycsICdhZGQnLCBub2RlLmFyZ3MubWFwKGZ1bmN0aW9uIChhcmdPdXRlcikge1xuICAgICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5Jywgbm9kZS5hcmdzLm1hcChmdW5jdGlvbiAoYXJnSW5uZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBhcmdJbm5lciA9PT0gYXJnT3V0ZXIgPyBfZGVyaXZhdGl2ZShhcmdJbm5lciwgY29uc3ROb2RlcykgOiBhcmdJbm5lci5jbG9uZSgpO1xuICAgICAgICAgIH0pKTtcbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZS5vcCA9PT0gJy8nICYmIG5vZGUuaXNCaW5hcnkoKSkge1xuICAgICAgICB2YXIgYXJnMCA9IG5vZGUuYXJnc1swXTtcbiAgICAgICAgdmFyIGFyZzEgPSBub2RlLmFyZ3NbMV07IC8vIGQvZHgoZih4KSAvIGMpID0gZicoeCkgLyBjXG5cbiAgICAgICAgaWYgKGNvbnN0Tm9kZXNbYXJnMV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKCcvJywgJ2RpdmlkZScsIFtfZGVyaXZhdGl2ZShhcmcwLCBjb25zdE5vZGVzKSwgYXJnMV0pO1xuICAgICAgICB9IC8vIFJlY2lwcm9jYWwgUnVsZSwgZC9keChjIC8gZih4KSkgPSAtYyhmJyh4KS9mKHgpXjIpXG5cblxuICAgICAgICBpZiAoY29uc3ROb2Rlc1thcmcwXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbbmV3IE9wZXJhdG9yTm9kZSgnLScsICd1bmFyeU1pbnVzJywgW2FyZzBdKSwgbmV3IE9wZXJhdG9yTm9kZSgnLycsICdkaXZpZGUnLCBbX2Rlcml2YXRpdmUoYXJnMSwgY29uc3ROb2RlcyksIG5ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzEuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSldKV0pO1xuICAgICAgICB9IC8vIFF1b3RpZW50IHJ1bGUsIGQvZHgoZih4KSAvIGcoeCkpID0gKGYnKHgpZyh4KSAtIGYoeClnJyh4KSkgLyBnKHgpXjJcblxuXG4gICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKCcvJywgJ2RpdmlkZScsIFtuZXcgT3BlcmF0b3JOb2RlKCctJywgJ3N1YnRyYWN0JywgW25ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbX2Rlcml2YXRpdmUoYXJnMCwgY29uc3ROb2RlcyksIGFyZzEuY2xvbmUoKV0pLCBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW2FyZzAuY2xvbmUoKSwgX2Rlcml2YXRpdmUoYXJnMSwgY29uc3ROb2RlcyldKV0pLCBuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFthcmcxLmNsb25lKCksIGNyZWF0ZUNvbnN0YW50Tm9kZSgyKV0pXSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlLm9wID09PSAnXicgJiYgbm9kZS5pc0JpbmFyeSgpKSB7XG4gICAgICAgIHZhciBfYXJnID0gbm9kZS5hcmdzWzBdO1xuICAgICAgICB2YXIgX2FyZzIgPSBub2RlLmFyZ3NbMV07XG5cbiAgICAgICAgaWYgKGNvbnN0Tm9kZXNbX2FyZ10gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIElmIGlzIHNlY3JldGx5IGNvbnN0YW50OyAwXmYoeCkgPSAxIChpbiBKUyksIDFeZih4KSA9IDFcbiAgICAgICAgICBpZiAoKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkoX2FyZykgJiYgKGlzWmVybyhfYXJnLnZhbHVlKSB8fCBlcXVhbChfYXJnLnZhbHVlLCAxKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVDb25zdGFudE5vZGUoMCk7XG4gICAgICAgICAgfSAvLyBkL2R4KGNeZih4KSkgPSBjXmYoeCkqbG4oYykqZicoeClcblxuXG4gICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbbm9kZSwgbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFtuZXcgRnVuY3Rpb25Ob2RlKCdsb2cnLCBbX2FyZy5jbG9uZSgpXSksIF9kZXJpdmF0aXZlKF9hcmcyLmNsb25lKCksIGNvbnN0Tm9kZXMpXSldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25zdE5vZGVzW19hcmcyXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKCgwLCBfaXMuaXNDb25zdGFudE5vZGUpKF9hcmcyKSkge1xuICAgICAgICAgICAgLy8gSWYgaXMgc2VjcmV0bHkgY29uc3RhbnQ7IGYoeCleMCA9IDEgLT4gZC9keCgxKSA9IDBcbiAgICAgICAgICAgIGlmIChpc1plcm8oX2FyZzIudmFsdWUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBjcmVhdGVDb25zdGFudE5vZGUoMCk7XG4gICAgICAgICAgICB9IC8vIElnbm9yZSBleHBvbmVudDsgZih4KV4xID0gZih4KVxuXG5cbiAgICAgICAgICAgIGlmIChlcXVhbChfYXJnMi52YWx1ZSwgMSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIF9kZXJpdmF0aXZlKF9hcmcsIGNvbnN0Tm9kZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gLy8gRWxlbWVudGFyeSBQb3dlciBSdWxlLCBkL2R4KGYoeCleYykgPSBjKmYnKHgpKmYoeCleKGMtMSlcblxuXG4gICAgICAgICAgdmFyIHBvd01pbnVzT25lID0gbmV3IE9wZXJhdG9yTm9kZSgnXicsICdwb3cnLCBbX2FyZy5jbG9uZSgpLCBuZXcgT3BlcmF0b3JOb2RlKCctJywgJ3N1YnRyYWN0JywgW19hcmcyLCBjcmVhdGVDb25zdGFudE5vZGUoMSldKV0pO1xuICAgICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW19hcmcyLmNsb25lKCksIG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbX2Rlcml2YXRpdmUoX2FyZywgY29uc3ROb2RlcyksIHBvd01pbnVzT25lXSldKTtcbiAgICAgICAgfSAvLyBGdW5jdGlvbmFsIFBvd2VyIFJ1bGUsIGQvZHgoZl5nKSA9IGZeZypbZicqKGcvZikgKyBnJ2xuKGYpXVxuXG5cbiAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbbmV3IE9wZXJhdG9yTm9kZSgnXicsICdwb3cnLCBbX2FyZy5jbG9uZSgpLCBfYXJnMi5jbG9uZSgpXSksIG5ldyBPcGVyYXRvck5vZGUoJysnLCAnYWRkJywgW25ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbX2Rlcml2YXRpdmUoX2FyZywgY29uc3ROb2RlcyksIG5ldyBPcGVyYXRvck5vZGUoJy8nLCAnZGl2aWRlJywgW19hcmcyLmNsb25lKCksIF9hcmcuY2xvbmUoKV0pXSksIG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbX2Rlcml2YXRpdmUoX2FyZzIsIGNvbnN0Tm9kZXMpLCBuZXcgRnVuY3Rpb25Ob2RlKCdsb2cnLCBbX2FyZy5jbG9uZSgpXSldKV0pXSk7XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcignT3BlcmF0b3IgXCInICsgbm9kZS5vcCArICdcIiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGRlcml2YXRpdmUsIG9yIGEgd3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyBpcyBwYXNzZWQnKTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogRW5zdXJlcyB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBmb3IgYSBmdW5jdGlvbiBhcmUgY29ycmVjdCxcbiAgICogYW5kIHdpbGwgdGhyb3cgYW4gZXJyb3Igb3RoZXJ3aXNlLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uTm9kZX0gbm9kZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGZ1bmNBcmdzQ2hlY2sobm9kZSkge1xuICAgIC8vIFRPRE8gYWRkIG1pbiwgbWF4IGV0Y1xuICAgIGlmICgobm9kZS5uYW1lID09PSAnbG9nJyB8fCBub2RlLm5hbWUgPT09ICdudGhSb290JyB8fCBub2RlLm5hbWUgPT09ICdwb3cnKSAmJiBub2RlLmFyZ3MubGVuZ3RoID09PSAyKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBUaGVyZSBzaG91bGQgYmUgYW4gaW5jb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHMgaWYgd2UgcmVhY2ggaGVyZVxuICAgIC8vIENoYW5nZSBhbGwgYXJncyB0byBjb25zdGFudHMgdG8gYXZvaWQgdW5pZGVudGlmaWVkXG4gICAgLy8gc3ltYm9sIGVycm9yIHdoZW4gY29tcGlsaW5nIGZ1bmN0aW9uXG5cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5hcmdzLmxlbmd0aDsgKytpKSB7XG4gICAgICBub2RlLmFyZ3NbaV0gPSBjcmVhdGVDb25zdGFudE5vZGUoMCk7XG4gICAgfVxuXG4gICAgbm9kZS5jb21waWxlKCkuZXZhbHVhdGUoKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIFR5cGVFcnJvciwgYnV0IG5vbmUgZm91bmQnKTtcbiAgfVxuICAvKipcbiAgICogSGVscGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIGNvbnN0YW50IG5vZGUgd2l0aCBhIHNwZWNpZmljIHR5cGVcbiAgICogKG51bWJlciwgQmlnTnVtYmVyLCBGcmFjdGlvbilcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbdmFsdWVUeXBlXVxuICAgKiBAcmV0dXJuIHtDb25zdGFudE5vZGV9XG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gY3JlYXRlQ29uc3RhbnROb2RlKHZhbHVlLCB2YWx1ZVR5cGUpIHtcbiAgICByZXR1cm4gbmV3IENvbnN0YW50Tm9kZShudW1lcmljKHZhbHVlLCB2YWx1ZVR5cGUgfHwgY29uZmlnLm51bWJlcikpO1xuICB9XG5cbiAgcmV0dXJuIGRlcml2YXRpdmU7XG59KTtcbmV4cG9ydHMuY3JlYXRlRGVyaXZhdGl2ZSA9IGNyZWF0ZURlcml2YXRpdmU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJhdGlvbmFsaXplID0gdm9pZCAwO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX3NpbXBsaWZ5Q29uc3RhbnQgPSByZXF1aXJlKFwiLi9zaW1wbGlmeS9zaW1wbGlmeUNvbnN0YW50XCIpO1xuXG52YXIgX3NpbXBsaWZ5Q29yZSA9IHJlcXVpcmUoXCIuL3NpbXBsaWZ5L3NpbXBsaWZ5Q29yZVwiKTtcblxudmFyIG5hbWUgPSAncmF0aW9uYWxpemUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnY29uZmlnJywgJ3R5cGVkJywgJ2VxdWFsJywgJ2lzWmVybycsICdhZGQnLCAnc3VidHJhY3QnLCAnbXVsdGlwbHknLCAnZGl2aWRlJywgJ3BvdycsICdwYXJzZScsICdzaW1wbGlmeScsICc/YmlnbnVtYmVyJywgJz9mcmFjdGlvbicsICdtYXRoV2l0aFRyYW5zZm9ybScsICdDb25zdGFudE5vZGUnLCAnT3BlcmF0b3JOb2RlJywgJ0Z1bmN0aW9uTm9kZScsICdTeW1ib2xOb2RlJywgJ1BhcmVudGhlc2lzTm9kZSddO1xudmFyIGNyZWF0ZVJhdGlvbmFsaXplID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgZXF1YWwgPSBfcmVmLmVxdWFsLFxuICAgICAgaXNaZXJvID0gX3JlZi5pc1plcm8sXG4gICAgICBhZGQgPSBfcmVmLmFkZCxcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCxcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSxcbiAgICAgIGRpdmlkZSA9IF9yZWYuZGl2aWRlLFxuICAgICAgcG93ID0gX3JlZi5wb3csXG4gICAgICBwYXJzZSA9IF9yZWYucGFyc2UsXG4gICAgICBzaW1wbGlmeSA9IF9yZWYuc2ltcGxpZnksXG4gICAgICBmcmFjdGlvbiA9IF9yZWYuZnJhY3Rpb24sXG4gICAgICBiaWdudW1iZXIgPSBfcmVmLmJpZ251bWJlcixcbiAgICAgIG1hdGhXaXRoVHJhbnNmb3JtID0gX3JlZi5tYXRoV2l0aFRyYW5zZm9ybSxcbiAgICAgIENvbnN0YW50Tm9kZSA9IF9yZWYuQ29uc3RhbnROb2RlLFxuICAgICAgT3BlcmF0b3JOb2RlID0gX3JlZi5PcGVyYXRvck5vZGUsXG4gICAgICBGdW5jdGlvbk5vZGUgPSBfcmVmLkZ1bmN0aW9uTm9kZSxcbiAgICAgIFN5bWJvbE5vZGUgPSBfcmVmLlN5bWJvbE5vZGUsXG4gICAgICBQYXJlbnRoZXNpc05vZGUgPSBfcmVmLlBhcmVudGhlc2lzTm9kZTtcbiAgdmFyIHNpbXBsaWZ5Q29uc3RhbnQgPSAoMCwgX3NpbXBsaWZ5Q29uc3RhbnQuY3JlYXRlU2ltcGxpZnlDb25zdGFudCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBjb25maWc6IGNvbmZpZyxcbiAgICBtYXRoV2l0aFRyYW5zZm9ybTogbWF0aFdpdGhUcmFuc2Zvcm0sXG4gICAgZnJhY3Rpb246IGZyYWN0aW9uLFxuICAgIGJpZ251bWJlcjogYmlnbnVtYmVyLFxuICAgIENvbnN0YW50Tm9kZTogQ29uc3RhbnROb2RlLFxuICAgIE9wZXJhdG9yTm9kZTogT3BlcmF0b3JOb2RlLFxuICAgIEZ1bmN0aW9uTm9kZTogRnVuY3Rpb25Ob2RlLFxuICAgIFN5bWJvbE5vZGU6IFN5bWJvbE5vZGVcbiAgfSk7XG4gIHZhciBzaW1wbGlmeUNvcmUgPSAoMCwgX3NpbXBsaWZ5Q29yZS5jcmVhdGVTaW1wbGlmeUNvcmUpKHtcbiAgICBlcXVhbDogZXF1YWwsXG4gICAgaXNaZXJvOiBpc1plcm8sXG4gICAgYWRkOiBhZGQsXG4gICAgc3VidHJhY3Q6IHN1YnRyYWN0LFxuICAgIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgICBkaXZpZGU6IGRpdmlkZSxcbiAgICBwb3c6IHBvdyxcbiAgICBDb25zdGFudE5vZGU6IENvbnN0YW50Tm9kZSxcbiAgICBPcGVyYXRvck5vZGU6IE9wZXJhdG9yTm9kZSxcbiAgICBGdW5jdGlvbk5vZGU6IEZ1bmN0aW9uTm9kZSxcbiAgICBQYXJlbnRoZXNpc05vZGU6IFBhcmVudGhlc2lzTm9kZVxuICB9KTtcbiAgLyoqXG4gICAqIFRyYW5zZm9ybSBhIHJhdGlvbmFsaXphYmxlIGV4cHJlc3Npb24gaW4gYSByYXRpb25hbCBmcmFjdGlvbi5cbiAgICogSWYgcmF0aW9uYWwgZnJhY3Rpb24gaXMgb25lIHZhcmlhYmxlIHBvbHlub21pYWwgdGhlbiBjb252ZXJ0c1xuICAgKiB0aGUgbnVtZXJhdG9yIGFuZCBkZW5vbWluYXRvciBpbiBjYW5vbmljYWwgZm9ybSwgd2l0aCBkZWNyZWFzaW5nXG4gICAqIGV4cG9uZW50cywgcmV0dXJuaW5nIHRoZSBjb2VmZmljaWVudHMgb2YgbnVtZXJhdG9yLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICByYXRpb25hbGl6ZShleHByKVxuICAgKiAgICAgcmF0aW9uYWxpemUoZXhwciwgZGV0YWlsZWQpXG4gICAqICAgICByYXRpb25hbGl6ZShleHByLCBzY29wZSlcbiAgICogICAgIHJhdGlvbmFsaXplKGV4cHIsIHNjb3BlLCBkZXRhaWxlZClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLnJhdGlvbmFsaXplKCdzaW4oeCkreScpXG4gICAqICAgICAgICAgICAgICAgICAgIC8vICBFcnJvcjogVGhlcmUgaXMgYW4gdW5zb2x2ZWQgZnVuY3Rpb24gY2FsbFxuICAgKiAgICAgbWF0aC5yYXRpb25hbGl6ZSgnMngveSAtIHkvKHgrMSknKVxuICAgKiAgICAgICAgICAgICAgICAgICAvLyAoMip4XjIteV4yKzIqeCkvKHgqeSt5KVxuICAgKiAgICAgbWF0aC5yYXRpb25hbGl6ZSgnKDJ4KzEpXjYnKVxuICAgKiAgICAgICAgICAgICAgICAgICAvLyA2NCp4XjYrMTkyKnheNSsyNDAqeF40KzE2MCp4XjMrNjAqeF4yKzEyKngrMVxuICAgKiAgICAgbWF0aC5yYXRpb25hbGl6ZSgnMngvKCAoMngtMSkgLyAoM3grMikgKSAtIDV4LyAoICgzeCs0KSAvICgyeF4yLTUpICkgKyAzJylcbiAgICogICAgICAgICAgICAgICAgICAgLy8gLTIwKnheNCsyOCp4XjMrMTA0KnheMis2KngtMTIpLyg2KnheMis1KngtNClcbiAgICogICAgIG1hdGgucmF0aW9uYWxpemUoJ3gvKDEteCkvKHgtMikvKHgtMykvKHgtNCkgKyAyeC8gKCAoMS0yeCkvKDItM3gpICkvICgoMy00eCkvKDQtNXgpICknKSA9XG4gICAqICAgICAgICAgICAgICAgICAgIC8vICgtMzAqeF43KzM0NCp4XjYtMTUwNip4XjUrMzIwMCp4XjQtMzQ3Mip4XjMrMTg0Nip4XjItMzgxKngpL1xuICAgKiAgICAgICAgICAgICAgICAgICAvLyAgICAgKC04KnheNis5MCp4XjUtMzgzKnheNCs3ODAqeF4zLTc5Nyp4XjIrMzkwKngtNzIpXG4gICAqXG4gICAqICAgICBtYXRoLnJhdGlvbmFsaXplKCd4K3greCt5Jyx7eToxfSkgLy8gMyp4KzFcbiAgICogICAgIG1hdGgucmF0aW9uYWxpemUoJ3greCt4K3knLHt9KSAgICAvLyAzKngreVxuICAgKlxuICAgKiAgICAgY29uc3QgcmV0ID0gbWF0aC5yYXRpb25hbGl6ZSgneCt4K3greScse30sdHJ1ZSlcbiAgICogICAgICAgICAgICAgICAgICAgLy8gcmV0LmV4cHJlc3Npb249Myp4K3ksIHJldC52YXJpYWJsZXMgPSBbXCJ4XCIsXCJ5XCJdXG4gICAqICAgICBjb25zdCByZXQgPSBtYXRoLnJhdGlvbmFsaXplKCctMis1eF4yJyx7fSx0cnVlKVxuICAgKiAgICAgICAgICAgICAgICAgICAvLyByZXQuZXhwcmVzc2lvbj01KnheMi0yLCByZXQudmFyaWFibGVzID0gW1wieFwiXSwgcmV0LmNvZWZmaWNpZW50cz1bLTIsMCw1XVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgIHNpbXBsaWZ5XG4gICAqXG4gICAqIEBwYXJhbSAge05vZGV8c3RyaW5nfSBleHByICAgIFRoZSBleHByZXNzaW9uIHRvIGNoZWNrIGlmIGlzIGEgcG9seW5vbWlhbCBleHByZXNzaW9uXG4gICAqIEBwYXJhbSAge09iamVjdHxib29sZWFufSAgICAgIG9wdGlvbmFsIHNjb3BlIG9mIGV4cHJlc3Npb24gb3IgdHJ1ZSBmb3IgYWxyZWFkeSBldmFsdWF0ZWQgcmF0aW9uYWwgZXhwcmVzc2lvbiBhdCBpbnB1dFxuICAgKiBAcGFyYW0gIHtCb29sZWFufSAgZGV0YWlsZWQgICBvcHRpb25hbCBUcnVlIGlmIHJldHVybiBhbiBvYmplY3QsIGZhbHNlIGlmIHJldHVybiBleHByZXNzaW9uIG5vZGUgKGRlZmF1bHQpXG4gICAqXG4gICAqIEByZXR1cm4ge09iamVjdCB8IE5vZGV9ICAgIFRoZSByYXRpb25hbCBwb2x5bm9taWFsIG9mIGBleHByYCBvciBuYSBvYmplY3RcbiAgICogICAgICAgICAgICB7T2JqZWN0fVxuICAgKiAgICAgICAgICAgICAge0V4cHJlc3Npb24gTm9kZX0gZXhwcmVzc2lvbjogbm9kZSBzaW1wbGlmaWVkIGV4cHJlc3Npb25cbiAgICogICAgICAgICAgICAgIHtFeHByZXNzaW9uIE5vZGV9IG51bWVyYXRvcjogc2ltcGxpZmllZCBudW1lcmF0b3Igb2YgZXhwcmVzc2lvblxuICAgKiAgICAgICAgICAgICAge0V4cHJlc3Npb24gTm9kZSB8IGJvb2xlYW59IGRlbm9taW5hdG9yOiBzaW1wbGlmaWVkIGRlbm9taW5hdG9yIG9yIGZhbHNlIChpZiB0aGVyZSBpcyBubyBkZW5vbWluYXRvcilcbiAgICogICAgICAgICAgICAgIHtBcnJheX0gICAgICAgICAgIHZhcmlhYmxlczogIHZhcmlhYmxlIG5hbWVzXG4gICAqICAgICAgICAgICAgICB7QXJyYXl9ICAgICAgICAgICBjb2VmZmljaWVudHM6IGNvZWZmaWNpZW50cyBvZiBudW1lcmF0b3Igc29ydGVkIGJ5IGluY3JlYXNlZCBleHBvbmVudFxuICAgKiAgICAgICAgICAge0V4cHJlc3Npb24gTm9kZX0gIG5vZGUgc2ltcGxpZmllZCBleHByZXNzaW9uXG4gICAqXG4gICAqL1xuXG4gIHZhciByYXRpb25hbGl6ZSA9IHR5cGVkKG5hbWUsIHtcbiAgICBzdHJpbmc6IGZ1bmN0aW9uIHN0cmluZyhleHByKSB7XG4gICAgICByZXR1cm4gcmF0aW9uYWxpemUocGFyc2UoZXhwciksIHt9LCBmYWxzZSk7XG4gICAgfSxcbiAgICAnc3RyaW5nLCBib29sZWFuJzogZnVuY3Rpb24gc3RyaW5nQm9vbGVhbihleHByLCBkZXRhaWxlZCkge1xuICAgICAgcmV0dXJuIHJhdGlvbmFsaXplKHBhcnNlKGV4cHIpLCB7fSwgZGV0YWlsZWQpO1xuICAgIH0sXG4gICAgJ3N0cmluZywgT2JqZWN0JzogZnVuY3Rpb24gc3RyaW5nT2JqZWN0KGV4cHIsIHNjb3BlKSB7XG4gICAgICByZXR1cm4gcmF0aW9uYWxpemUocGFyc2UoZXhwciksIHNjb3BlLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnc3RyaW5nLCBPYmplY3QsIGJvb2xlYW4nOiBmdW5jdGlvbiBzdHJpbmdPYmplY3RCb29sZWFuKGV4cHIsIHNjb3BlLCBkZXRhaWxlZCkge1xuICAgICAgcmV0dXJuIHJhdGlvbmFsaXplKHBhcnNlKGV4cHIpLCBzY29wZSwgZGV0YWlsZWQpO1xuICAgIH0sXG4gICAgTm9kZTogZnVuY3Rpb24gTm9kZShleHByKSB7XG4gICAgICByZXR1cm4gcmF0aW9uYWxpemUoZXhwciwge30sIGZhbHNlKTtcbiAgICB9LFxuICAgICdOb2RlLCBib29sZWFuJzogZnVuY3Rpb24gTm9kZUJvb2xlYW4oZXhwciwgZGV0YWlsZWQpIHtcbiAgICAgIHJldHVybiByYXRpb25hbGl6ZShleHByLCB7fSwgZGV0YWlsZWQpO1xuICAgIH0sXG4gICAgJ05vZGUsIE9iamVjdCc6IGZ1bmN0aW9uIE5vZGVPYmplY3QoZXhwciwgc2NvcGUpIHtcbiAgICAgIHJldHVybiByYXRpb25hbGl6ZShleHByLCBzY29wZSwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ05vZGUsIE9iamVjdCwgYm9vbGVhbic6IGZ1bmN0aW9uIE5vZGVPYmplY3RCb29sZWFuKGV4cHIsIHNjb3BlLCBkZXRhaWxlZCkge1xuICAgICAgdmFyIHNldFJ1bGVzID0gcnVsZXNSYXRpb25hbGl6ZSgpOyAvLyBSdWxlcyBmb3IgY2hhbmdlIHBvbHlub21pYWwgaW4gbmVhciBjYW5vbmljYWwgZm9ybVxuXG4gICAgICB2YXIgcG9seVJldCA9IHBvbHlub21pYWwoZXhwciwgc2NvcGUsIHRydWUsIHNldFJ1bGVzLmZpcnN0UnVsZXMpOyAvLyBDaGVjayBpZiBleHByZXNzaW9uIGlzIGEgcmF0aW9uYWxpemFibGUgcG9seW5vbWlhbFxuXG4gICAgICB2YXIgblZhcnMgPSBwb2x5UmV0LnZhcmlhYmxlcy5sZW5ndGg7XG4gICAgICBleHByID0gcG9seVJldC5leHByZXNzaW9uO1xuXG4gICAgICBpZiAoblZhcnMgPj0gMSkge1xuICAgICAgICAvLyBJZiBleHByZXNzaW9uIGluIG5vdCBhIGNvbnN0YW50XG4gICAgICAgIGV4cHIgPSBleHBhbmRQb3dlcihleHByKTsgLy8gRmlyc3QgZXhwYW5kIHBvd2VyIG9mIHBvbHlub21pYWxzIChjYW5ub3QgYmUgbWFkZSBmcm9tIHJ1bGVzISlcblxuICAgICAgICB2YXIgc0JlZm9yZTsgLy8gUHJldmlvdXMgZXhwcmVzc2lvblxuXG4gICAgICAgIHZhciBydWxlcztcbiAgICAgICAgdmFyIGVEaXN0ckRpdiA9IHRydWU7XG4gICAgICAgIHZhciByZWRvSW5pYyA9IGZhbHNlO1xuICAgICAgICBleHByID0gc2ltcGxpZnkoZXhwciwgc2V0UnVsZXMuZmlyc3RSdWxlcywge30sIHtcbiAgICAgICAgICBleGFjdEZyYWN0aW9uczogZmFsc2VcbiAgICAgICAgfSk7IC8vIEFwcGx5IHRoZSBpbml0aWFsIHJ1bGVzLCBpbmNsdWRpbmcgc3VjYyBkaXYgcnVsZXNcblxuICAgICAgICB2YXIgcztcblxuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgIC8vIEFwcGx5IGFsdGVybmF0ZWx5ICBzdWNjZXNzaXZlIGRpdmlzaW9uIHJ1bGVzIGFuZCBkaXN0ci5kaXYucnVsZXNcbiAgICAgICAgICBydWxlcyA9IGVEaXN0ckRpdiA/IHNldFJ1bGVzLmRpc3RyRGl2UnVsZXMgOiBzZXRSdWxlcy5zdWNEaXZSdWxlcztcbiAgICAgICAgICBleHByID0gc2ltcGxpZnkoZXhwciwgcnVsZXMpOyAvLyB1bnRpbCBubyBtb3JlIGNoYW5nZXNcblxuICAgICAgICAgIGVEaXN0ckRpdiA9ICFlRGlzdHJEaXY7IC8vIFN3YXAgYmV0d2VlbiBEaXN0ci5EaXYgYW5kIFN1Y2MuIERpdi4gUnVsZXNcblxuICAgICAgICAgIHMgPSBleHByLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICBpZiAocyA9PT0gc0JlZm9yZSkge1xuICAgICAgICAgICAgYnJlYWs7IC8vIE5vIGNoYW5nZXMgOiBlbmQgb2YgdGhlIGxvb3BcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZWRvSW5pYyA9IHRydWU7XG4gICAgICAgICAgc0JlZm9yZSA9IHM7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVkb0luaWMpIHtcbiAgICAgICAgICAvLyBBcHBseSBmaXJzdCBydWxlcyBhZ2FpbiB3aXRob3V0IHN1Y2MgZGl2IHJ1bGVzIChpZiB0aGVyZSBhcmUgY2hhbmdlcylcbiAgICAgICAgICBleHByID0gc2ltcGxpZnkoZXhwciwgc2V0UnVsZXMuZmlyc3RSdWxlc0FnYWluLCB7fSwge1xuICAgICAgICAgICAgZXhhY3RGcmFjdGlvbnM6IGZhbHNlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBleHByID0gc2ltcGxpZnkoZXhwciwgc2V0UnVsZXMuZmluYWxSdWxlcywge30sIHtcbiAgICAgICAgICBleGFjdEZyYWN0aW9uczogZmFsc2VcbiAgICAgICAgfSk7IC8vIEFwcGx5IGZpbmFsIHJ1bGVzXG4gICAgICB9IC8vIE5WYXJzID49IDFcblxuXG4gICAgICB2YXIgY29lZmZpY2llbnRzID0gW107XG4gICAgICB2YXIgcmV0UmF0aW9uYWxpemUgPSB7fTtcblxuICAgICAgaWYgKGV4cHIudHlwZSA9PT0gJ09wZXJhdG9yTm9kZScgJiYgZXhwci5pc0JpbmFyeSgpICYmIGV4cHIub3AgPT09ICcvJykge1xuICAgICAgICAvLyBTZXBhcmF0ZSBudW1lcmF0b3IgZnJvbSBkZW5vbWluYXRvclxuICAgICAgICBpZiAoblZhcnMgPT09IDEpIHtcbiAgICAgICAgICBleHByLmFyZ3NbMF0gPSBwb2x5VG9DYW5vbmljYWwoZXhwci5hcmdzWzBdLCBjb2VmZmljaWVudHMpO1xuICAgICAgICAgIGV4cHIuYXJnc1sxXSA9IHBvbHlUb0Nhbm9uaWNhbChleHByLmFyZ3NbMV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRldGFpbGVkKSB7XG4gICAgICAgICAgcmV0UmF0aW9uYWxpemUubnVtZXJhdG9yID0gZXhwci5hcmdzWzBdO1xuICAgICAgICAgIHJldFJhdGlvbmFsaXplLmRlbm9taW5hdG9yID0gZXhwci5hcmdzWzFdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoblZhcnMgPT09IDEpIHtcbiAgICAgICAgICBleHByID0gcG9seVRvQ2Fub25pY2FsKGV4cHIsIGNvZWZmaWNpZW50cyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGV0YWlsZWQpIHtcbiAgICAgICAgICByZXRSYXRpb25hbGl6ZS5udW1lcmF0b3IgPSBleHByO1xuICAgICAgICAgIHJldFJhdGlvbmFsaXplLmRlbm9taW5hdG9yID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSAvLyBuVmFyc1xuXG5cbiAgICAgIGlmICghZGV0YWlsZWQpIHJldHVybiBleHByO1xuICAgICAgcmV0UmF0aW9uYWxpemUuY29lZmZpY2llbnRzID0gY29lZmZpY2llbnRzO1xuICAgICAgcmV0UmF0aW9uYWxpemUudmFyaWFibGVzID0gcG9seVJldC52YXJpYWJsZXM7XG4gICAgICByZXRSYXRpb25hbGl6ZS5leHByZXNzaW9uID0gZXhwcjtcbiAgICAgIHJldHVybiByZXRSYXRpb25hbGl6ZTtcbiAgICB9IC8vIF5eXl5eXl4gZW5kIG9mIHJhdGlvbmFsaXplIF5eXl5eXl5eXG5cbiAgfSk7IC8vIGVuZCBvZiB0eXBlZCByYXRpb25hbGl6ZVxuXG4gIC8qKlxuICAgKiAgRnVuY3Rpb24gdG8gc2ltcGxpZnkgYW4gZXhwcmVzc2lvbiB1c2luZyBhbiBvcHRpb25hbCBzY29wZSBhbmRcbiAgICogIHJldHVybiBpdCBpZiB0aGUgZXhwcmVzc2lvbiBpcyBhIHBvbHlub21pYWwgZXhwcmVzc2lvbiwgaS5lLlxuICAgKiAgYW4gZXhwcmVzc2lvbiB3aXRoIG9uZSBvciBtb3JlIHZhcmlhYmxlcyBhbmQgdGhlIG9wZXJhdG9yc1xuICAgKiAgKywgLSwgKiwgYW5kIF4sIHdoZXJlIHRoZSBleHBvbmVudCBjYW4gb25seSBiZSBhIHBvc2l0aXZlIGludGVnZXIuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIHBvbHlub21pYWwoZXhwcixzY29wZSxleHRlbmRlZCwgcnVsZXMpXG4gICAqXG4gICAqIEBwYXJhbSAge05vZGUgfCBzdHJpbmd9IGV4cHIgICAgIFRoZSBleHByZXNzaW9uIHRvIHNpbXBsaWZ5IGFuZCBjaGVjayBpZiBpcyBwb2x5bm9taWFsIGV4cHJlc3Npb25cbiAgICogQHBhcmFtICB7b2JqZWN0fSBzY29wZSAgICAgICAgICAgT3B0aW9uYWwgc2NvcGUgZm9yIGV4cHJlc3Npb24gc2ltcGxpZmljYXRpb25cbiAgICogQHBhcmFtICB7Ym9vbGVhbn0gZXh0ZW5kZWQgICAgICAgT3B0aW9uYWwuIERlZmF1bHQgaXMgZmFsc2UuIFdoZW4gdHJ1ZSBhbGxvd3MgZGl2aWRlIG9wZXJhdG9yLlxuICAgKiBAcGFyYW0gIHthcnJheX0gIHJ1bGVzICAgICAgICAgICBPcHRpb25hbC4gRGVmYXVsdCBpcyBubyBydWxlLlxuICAgKlxuICAgKlxuICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAqICAgICAgICAgICAge09iamVjdH0gbm9kZTogICBub2RlIHNpbXBsaWZpZWQgZXhwcmVzc2lvblxuICAgKiAgICAgICAgICAgIHtBcnJheX0gIHZhcmlhYmxlczogIHZhcmlhYmxlIG5hbWVzXG4gICAqL1xuXG4gIGZ1bmN0aW9uIHBvbHlub21pYWwoZXhwciwgc2NvcGUsIGV4dGVuZGVkLCBydWxlcykge1xuICAgIHZhciB2YXJpYWJsZXMgPSBbXTtcbiAgICB2YXIgbm9kZSA9IHNpbXBsaWZ5KGV4cHIsIHJ1bGVzLCBzY29wZSwge1xuICAgICAgZXhhY3RGcmFjdGlvbnM6IGZhbHNlXG4gICAgfSk7IC8vIFJlc29sdmVzIGFueSB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucyB3aXRoIGFsbCBkZWZpbmVkIHBhcmFtZXRlcnNcblxuICAgIGV4dGVuZGVkID0gISFleHRlbmRlZDtcbiAgICB2YXIgb3BlciA9ICcrLSonICsgKGV4dGVuZGVkID8gJy8nIDogJycpO1xuICAgIHJlY1BvbHkobm9kZSk7XG4gICAgdmFyIHJldEZ1bmMgPSB7fTtcbiAgICByZXRGdW5jLmV4cHJlc3Npb24gPSBub2RlO1xuICAgIHJldEZ1bmMudmFyaWFibGVzID0gdmFyaWFibGVzO1xuICAgIHJldHVybiByZXRGdW5jOyAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICAvKipcbiAgICAgKiAgRnVuY3Rpb24gdG8gc2ltcGxpZnkgYW4gZXhwcmVzc2lvbiB1c2luZyBhbiBvcHRpb25hbCBzY29wZSBhbmRcbiAgICAgKiAgcmV0dXJuIGl0IGlmIHRoZSBleHByZXNzaW9uIGlzIGEgcG9seW5vbWlhbCBleHByZXNzaW9uLCBpLmUuXG4gICAgICogIGFuIGV4cHJlc3Npb24gd2l0aCBvbmUgb3IgbW9yZSB2YXJpYWJsZXMgYW5kIHRoZSBvcGVyYXRvcnNcbiAgICAgKiAgKywgLSwgKiwgYW5kIF4sIHdoZXJlIHRoZSBleHBvbmVudCBjYW4gb25seSBiZSBhIHBvc2l0aXZlIGludGVnZXIuXG4gICAgICpcbiAgICAgKiBTeW50YXg6XG4gICAgICpcbiAgICAgKiAgICAgcmVjUG9seShub2RlKVxuICAgICAqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtOb2RlfSBub2RlICAgICAgICAgICAgICAgVGhlIGN1cnJlbnQgc3ViIHRyZWUgZXhwcmVzc2lvbiBpbiByZWN1cnNpb25cbiAgICAgKlxuICAgICAqIEByZXR1cm4gICAgICAgICAgICAgICAgICAgICAgICAgICBub3RoaW5nLCB0aHJvdyBhbiBleGNlcHRpb24gaWYgZXJyb3JcbiAgICAgKi9cblxuICAgIGZ1bmN0aW9uIHJlY1BvbHkobm9kZSkge1xuICAgICAgdmFyIHRwID0gbm9kZS50eXBlOyAvLyBub2RlIHR5cGVcblxuICAgICAgaWYgKHRwID09PSAnRnVuY3Rpb25Ob2RlJykge1xuICAgICAgICAvLyBObyBmdW5jdGlvbiBjYWxsIGluIHBvbHlub21pYWwgZXhwcmVzc2lvblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGlzIGFuIHVuc29sdmVkIGZ1bmN0aW9uIGNhbGwnKTtcbiAgICAgIH0gZWxzZSBpZiAodHAgPT09ICdPcGVyYXRvck5vZGUnKSB7XG4gICAgICAgIGlmIChub2RlLm9wID09PSAnXicpIHtcbiAgICAgICAgICAvLyBUT0RPOiBoYW5kbGUgbmVnYXRpdmUgZXhwb25lbnRzIGxpa2UgaW4gJzEveF4oLTIpJ1xuICAgICAgICAgIGlmIChub2RlLmFyZ3NbMV0udHlwZSAhPT0gJ0NvbnN0YW50Tm9kZScgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikocGFyc2VGbG9hdChub2RlLmFyZ3NbMV0udmFsdWUpKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGVyZSBpcyBhIG5vbi1pbnRlZ2VyIGV4cG9uZW50Jyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlY1BvbHkobm9kZS5hcmdzWzBdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKG9wZXIuaW5kZXhPZihub2RlLm9wKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignT3BlcmF0b3IgJyArIG5vZGUub3AgKyAnIGludmFsaWQgaW4gcG9seW5vbWlhbCBleHByZXNzaW9uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHJlY1BvbHkobm9kZS5hcmdzW2ldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gdHlwZSBvZiBvcGVyYXRvclxuXG4gICAgICB9IGVsc2UgaWYgKHRwID09PSAnU3ltYm9sTm9kZScpIHtcbiAgICAgICAgdmFyIF9uYW1lID0gbm9kZS5uYW1lOyAvLyB2YXJpYWJsZSBuYW1lXG5cbiAgICAgICAgdmFyIHBvcyA9IHZhcmlhYmxlcy5pbmRleE9mKF9uYW1lKTtcblxuICAgICAgICBpZiAocG9zID09PSAtMSkge1xuICAgICAgICAgIC8vIG5ldyB2YXJpYWJsZSBpbiBleHByZXNzaW9uXG4gICAgICAgICAgdmFyaWFibGVzLnB1c2goX25hbWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRwID09PSAnUGFyZW50aGVzaXNOb2RlJykge1xuICAgICAgICByZWNQb2x5KG5vZGUuY29udGVudCk7XG4gICAgICB9IGVsc2UgaWYgKHRwICE9PSAnQ29uc3RhbnROb2RlJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3R5cGUgJyArIHRwICsgJyBpcyBub3QgYWxsb3dlZCBpbiBwb2x5bm9taWFsIGV4cHJlc3Npb24nKTtcbiAgICAgIH1cbiAgICB9IC8vIGVuZCBvZiByZWNQb2x5XG5cbiAgfSAvLyBlbmQgb2YgcG9seW5vbWlhbFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogUmV0dXJuIGEgcnVsZSBzZXQgdG8gcmF0aW9uYWxpemUgYW4gcG9seW5vbWlhbCBleHByZXNzaW9uIGluIHJhdGlvbmFsaXplXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIHJ1bGVzUmF0aW9uYWxpemUoKVxuICAgKlxuICAgKiBAcmV0dXJuIHthcnJheX0gICAgICAgIHJ1bGUgc2V0IHRvIHJhdGlvbmFsaXplIGFuIHBvbHlub21pYWwgZXhwcmVzc2lvblxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHJ1bGVzUmF0aW9uYWxpemUoKSB7XG4gICAgdmFyIG9sZFJ1bGVzID0gW3NpbXBsaWZ5Q29yZSwgLy8gc0NvcmVcbiAgICB7XG4gICAgICBsOiAnbituJyxcbiAgICAgIHI6ICcyKm4nXG4gICAgfSwge1xuICAgICAgbDogJ24rLW4nLFxuICAgICAgcjogJzAnXG4gICAgfSwgc2ltcGxpZnlDb25zdGFudCwgLy8gc0NvbnN0YW50XG4gICAge1xuICAgICAgbDogJ24qKG4xXi0xKScsXG4gICAgICByOiAnbi9uMSdcbiAgICB9LCB7XG4gICAgICBsOiAnbipuMV4tbjInLFxuICAgICAgcjogJ24vbjFebjInXG4gICAgfSwge1xuICAgICAgbDogJ24xXi0xJyxcbiAgICAgIHI6ICcxL24xJ1xuICAgIH0sIHtcbiAgICAgIGw6ICduKihuMS9uMiknLFxuICAgICAgcjogJyhuKm4xKS9uMidcbiAgICB9LCB7XG4gICAgICBsOiAnMSpuJyxcbiAgICAgIHI6ICduJ1xuICAgIH1dO1xuICAgIHZhciBydWxlc0ZpcnN0ID0gW3tcbiAgICAgIGw6ICcoLW4xKS8oLW4yKScsXG4gICAgICByOiAnbjEvbjInXG4gICAgfSwgLy8gVW5hcnkgZGl2aXNpb25cbiAgICB7XG4gICAgICBsOiAnKC1uMSkqKC1uMiknLFxuICAgICAgcjogJ24xKm4yJ1xuICAgIH0sIC8vIFVuYXJ5IG11bHRpcGxpY2F0aW9uXG4gICAge1xuICAgICAgbDogJ24xLS1uMicsXG4gICAgICByOiAnbjErbjInXG4gICAgfSwgLy8gJy0tJyBlbGltaW5hdGlvblxuICAgIHtcbiAgICAgIGw6ICduMS1uMicsXG4gICAgICByOiAnbjErKC1uMiknXG4gICAgfSwgLy8gU3VidHJhY3Rpb24gdHVybiBpbnRvIGFkZCB3aXRoIHVu77+9cnkgbWludXNcbiAgICB7XG4gICAgICBsOiAnKG4xK24yKSpuMycsXG4gICAgICByOiAnKG4xKm4zICsgbjIqbjMpJ1xuICAgIH0sIC8vIERpc3RyaWJ1dGl2ZSAxXG4gICAge1xuICAgICAgbDogJ24xKihuMituMyknLFxuICAgICAgcjogJyhuMSpuMituMSpuMyknXG4gICAgfSwgLy8gRGlzdHJpYnV0aXZlIDJcbiAgICB7XG4gICAgICBsOiAnYzEqbiArIGMyKm4nLFxuICAgICAgcjogJyhjMStjMikqbidcbiAgICB9LCAvLyBKb2luaW5nIGNvbnN0YW50c1xuICAgIHtcbiAgICAgIGw6ICdjMSpuICsgbicsXG4gICAgICByOiAnKGMxKzEpKm4nXG4gICAgfSwgLy8gSm9pbmluZyBjb25zdGFudHNcbiAgICB7XG4gICAgICBsOiAnYzEqbiAtIGMyKm4nLFxuICAgICAgcjogJyhjMS1jMikqbidcbiAgICB9LCAvLyBKb2luaW5nIGNvbnN0YW50c1xuICAgIHtcbiAgICAgIGw6ICdjMSpuIC0gbicsXG4gICAgICByOiAnKGMxLTEpKm4nXG4gICAgfSwgLy8gSm9pbmluZyBjb25zdGFudHNcbiAgICB7XG4gICAgICBsOiAndi9jJyxcbiAgICAgIHI6ICcoMS9jKSp2J1xuICAgIH0sIC8vIHZhcmlhYmxlL2NvbnN0YW50IChuZXchKVxuICAgIHtcbiAgICAgIGw6ICd2Ly1jJyxcbiAgICAgIHI6ICctKDEvYykqdidcbiAgICB9LCAvLyB2YXJpYWJsZS9jb25zdGFudCAobmV3ISlcbiAgICB7XG4gICAgICBsOiAnLXYqLWMnLFxuICAgICAgcjogJ2MqdidcbiAgICB9LCAvLyBJbnZlcnNpb24gY29uc3RhbnQgYW5kIHZhcmlhYmxlIDFcbiAgICB7XG4gICAgICBsOiAnLXYqYycsXG4gICAgICByOiAnLWMqdidcbiAgICB9LCAvLyBJbnZlcnNpb24gY29uc3RhbnQgYW5kIHZhcmlhYmxlIDJcbiAgICB7XG4gICAgICBsOiAndiotYycsXG4gICAgICByOiAnLWMqdidcbiAgICB9LCAvLyBJbnZlcnNpb24gY29uc3RhbnQgYW5kIHZhcmlhYmxlIDNcbiAgICB7XG4gICAgICBsOiAndipjJyxcbiAgICAgIHI6ICdjKnYnXG4gICAgfSwgLy8gSW52ZXJzaW9uIGNvbnN0YW50IGFuZCB2YXJpYWJsZSA0XG4gICAge1xuICAgICAgbDogJy0oLW4xKm4yKScsXG4gICAgICByOiAnKG4xKm4yKSdcbiAgICB9LCAvLyBVbmFyeSBwcm9wYWdhdGlvblxuICAgIHtcbiAgICAgIGw6ICctKG4xKm4yKScsXG4gICAgICByOiAnKC1uMSpuMiknXG4gICAgfSwgLy8gVW5hcnkgcHJvcGFnYXRpb25cbiAgICB7XG4gICAgICBsOiAnLSgtbjErbjIpJyxcbiAgICAgIHI6ICcobjEtbjIpJ1xuICAgIH0sIC8vIFVuYXJ5IHByb3BhZ2F0aW9uXG4gICAge1xuICAgICAgbDogJy0objErbjIpJyxcbiAgICAgIHI6ICcoLW4xLW4yKSdcbiAgICB9LCAvLyBVbmFyeSBwcm9wYWdhdGlvblxuICAgIHtcbiAgICAgIGw6ICcobjFebjIpXm4zJyxcbiAgICAgIHI6ICcobjFeKG4yKm4zKSknXG4gICAgfSwgLy8gUG93ZXIgdG8gUG93ZXJcbiAgICB7XG4gICAgICBsOiAnLSgtbjEvbjIpJyxcbiAgICAgIHI6ICcobjEvbjIpJ1xuICAgIH0sIC8vIERpdmlzaW9uIGFuZCBVbmFyeVxuICAgIHtcbiAgICAgIGw6ICctKG4xL24yKScsXG4gICAgICByOiAnKC1uMS9uMiknXG4gICAgfV07IC8vIERpdmlzYW8gYW5kIFVuYXJ5XG5cbiAgICB2YXIgcnVsZXNEaXN0ckRpdiA9IFt7XG4gICAgICBsOiAnKG4xL24yICsgbjMvbjQpJyxcbiAgICAgIHI6ICcoKG4xKm40ICsgbjMqbjIpLyhuMipuNCkpJ1xuICAgIH0sIC8vIFN1bSBvZiBmcmFjdGlvbnNcbiAgICB7XG4gICAgICBsOiAnKG4xL24yICsgbjMpJyxcbiAgICAgIHI6ICcoKG4xICsgbjMqbjIpL24yKSdcbiAgICB9LCAvLyBTdW0gZnJhY3Rpb24gd2l0aCBudW1iZXIgMVxuICAgIHtcbiAgICAgIGw6ICcobjEgKyBuMi9uMyknLFxuICAgICAgcjogJygobjEqbjMgKyBuMikvbjMpJ1xuICAgIH1dOyAvLyBTdW0gZnJhY3Rpb24gd2l0aCBudW1iZXIgMVxuXG4gICAgdmFyIHJ1bGVzU3VjRGl2ID0gW3tcbiAgICAgIGw6ICcobjEvKG4yL24zKSknLFxuICAgICAgcjogJygobjEqbjMpL24yKSdcbiAgICB9LCAvLyBEaXZpc2lvbiBzaW1wbGlmaWNhdGlvblxuICAgIHtcbiAgICAgIGw6ICcobjEvbjIvbjMpJyxcbiAgICAgIHI6ICcobjEvKG4yKm4zKSknXG4gICAgfV07XG4gICAgdmFyIHNldFJ1bGVzID0ge307IC8vIHJ1bGVzIHNldCBpbiA0IHN0ZXBzLlxuICAgIC8vIEFsbCBydWxlcyA9PiBpbmZpbml0ZSBsb29wXG4gICAgLy8gc2V0UnVsZXMuYWxsUnVsZXMgPW9sZFJ1bGVzLmNvbmNhdChydWxlc0ZpcnN0LHJ1bGVzRGlzdHJEaXYscnVsZXNTdWNEaXYpXG5cbiAgICBzZXRSdWxlcy5maXJzdFJ1bGVzID0gb2xkUnVsZXMuY29uY2F0KHJ1bGVzRmlyc3QsIHJ1bGVzU3VjRGl2KTsgLy8gRmlyc3QgcnVsZSBzZXRcblxuICAgIHNldFJ1bGVzLmRpc3RyRGl2UnVsZXMgPSBydWxlc0Rpc3RyRGl2OyAvLyBKdXN0IGRpc3RyLiBkaXYuIHJ1bGVzXG5cbiAgICBzZXRSdWxlcy5zdWNEaXZSdWxlcyA9IHJ1bGVzU3VjRGl2OyAvLyBKdXMgc3VjYy4gZGl2LiBydWxlc1xuXG4gICAgc2V0UnVsZXMuZmlyc3RSdWxlc0FnYWluID0gb2xkUnVsZXMuY29uY2F0KHJ1bGVzRmlyc3QpOyAvLyBMYXN0IHJ1bGVzIHNldCB3aXRob3V0IHN1Y2MuIGRpdi5cbiAgICAvLyBEaXZpc2lvbiBzaW1wbGlmaWNhdGlvblxuICAgIC8vIFNlY29uZCBydWxlIHNldC5cbiAgICAvLyBUaGVyZSBpcyBubyBhZ2dyZWdhdGUgZXhwcmVzc2lvbiB3aXRoIHBhcmVudGVzaXMsIGJ1dCB0aGUgb25seSB2YXJpYWJsZSBjYW4gYmUgc2NhdHRlcmVkLlxuXG4gICAgc2V0UnVsZXMuZmluYWxSdWxlcyA9IFtzaW1wbGlmeUNvcmUsIC8vIHNpbXBsaWZ5LnJ1bGVzWzBdXG4gICAge1xuICAgICAgbDogJ24qLW4nLFxuICAgICAgcjogJy1uXjInXG4gICAgfSwgLy8gSm9pbmluZyBtdWx0aXBseSB3aXRoIHBvd2VyIDFcbiAgICB7XG4gICAgICBsOiAnbipuJyxcbiAgICAgIHI6ICduXjInXG4gICAgfSwgLy8gSm9pbmluZyBtdWx0aXBseSB3aXRoIHBvd2VyIDJcbiAgICBzaW1wbGlmeUNvbnN0YW50LCAvLyBzaW1wbGlmeS5ydWxlc1sxNF0gb2xkIDNyZCBpbmRleCBpbiBvbGRSdWxlc1xuICAgIHtcbiAgICAgIGw6ICduKi1uXm4xJyxcbiAgICAgIHI6ICctbl4objErMSknXG4gICAgfSwgLy8gSm9pbmluZyBtdWx0aXBseSB3aXRoIHBvd2VyIDNcbiAgICB7XG4gICAgICBsOiAnbipuXm4xJyxcbiAgICAgIHI6ICduXihuMSsxKSdcbiAgICB9LCAvLyBKb2luaW5nIG11bHRpcGx5IHdpdGggcG93ZXIgNFxuICAgIHtcbiAgICAgIGw6ICduXm4xKi1uXm4yJyxcbiAgICAgIHI6ICctbl4objErbjIpJ1xuICAgIH0sIC8vIEpvaW5pbmcgbXVsdGlwbHkgd2l0aCBwb3dlciA1XG4gICAge1xuICAgICAgbDogJ25ebjEqbl5uMicsXG4gICAgICByOiAnbl4objErbjIpJ1xuICAgIH0sIC8vIEpvaW5pbmcgbXVsdGlwbHkgd2l0aCBwb3dlciA2XG4gICAge1xuICAgICAgbDogJ25ebjEqLW4nLFxuICAgICAgcjogJy1uXihuMSsxKSdcbiAgICB9LCAvLyBKb2luaW5nIG11bHRpcGx5IHdpdGggcG93ZXIgN1xuICAgIHtcbiAgICAgIGw6ICduXm4xKm4nLFxuICAgICAgcjogJ25eKG4xKzEpJ1xuICAgIH0sIC8vIEpvaW5pbmcgbXVsdGlwbHkgd2l0aCBwb3dlciA4XG4gICAge1xuICAgICAgbDogJ25ebjEvLW4nLFxuICAgICAgcjogJy1uXihuMS0xKSdcbiAgICB9LCAvLyBKb2luaW5nIG11bHRpcGx5IHdpdGggcG93ZXIgOFxuICAgIHtcbiAgICAgIGw6ICduXm4xL24nLFxuICAgICAgcjogJ25eKG4xLTEpJ1xuICAgIH0sIC8vIEpvaW5pbmcgZGl2aXNpb24gd2l0aCBwb3dlciAxXG4gICAge1xuICAgICAgbDogJ24vLW5ebjEnLFxuICAgICAgcjogJy1uXigxLW4xKSdcbiAgICB9LCAvLyBKb2luaW5nIGRpdmlzaW9uIHdpdGggcG93ZXIgMlxuICAgIHtcbiAgICAgIGw6ICduL25ebjEnLFxuICAgICAgcjogJ25eKDEtbjEpJ1xuICAgIH0sIC8vIEpvaW5pbmcgZGl2aXNpb24gd2l0aCBwb3dlciAzXG4gICAge1xuICAgICAgbDogJ25ebjEvLW5ebjInLFxuICAgICAgcjogJ25eKG4xLW4yKSdcbiAgICB9LCAvLyBKb2luaW5nIGRpdmlzaW9uIHdpdGggcG93ZXIgNFxuICAgIHtcbiAgICAgIGw6ICduXm4xL25ebjInLFxuICAgICAgcjogJ25eKG4xLW4yKSdcbiAgICB9LCAvLyBKb2luaW5nIGRpdmlzaW9uIHdpdGggcG93ZXIgNVxuICAgIHtcbiAgICAgIGw6ICduMSsoLW4yKm4zKScsXG4gICAgICByOiAnbjEtbjIqbjMnXG4gICAgfSwgLy8gU29sdmluZyB1c2VsZXNzIHBhcmVudGhlc2lzIDFcbiAgICB7XG4gICAgICBsOiAndiooLWMpJyxcbiAgICAgIHI6ICctYyp2J1xuICAgIH0sIC8vIFNvbHZpbmcgdXNlbGVzcyB1bmFyeSAyXG4gICAge1xuICAgICAgbDogJ24xKy1uMicsXG4gICAgICByOiAnbjEtbjInXG4gICAgfSwgLy8gU29sdmluZyArLSB0b2dldGhlciAobmV3ISlcbiAgICB7XG4gICAgICBsOiAndipjJyxcbiAgICAgIHI6ICdjKnYnXG4gICAgfSwgLy8gaW52ZXJzaW9uIGNvbnN0YW50IHdpdGggdmFyaWFibGVcbiAgICB7XG4gICAgICBsOiAnKG4xXm4yKV5uMycsXG4gICAgICByOiAnKG4xXihuMipuMykpJ1xuICAgIH0gLy8gUG93ZXIgdG8gUG93ZXJcbiAgICBdO1xuICAgIHJldHVybiBzZXRSdWxlcztcbiAgfSAvLyBFbmQgcnVsZXNSYXRpb25hbGl6ZVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogIEV4cGFuZCByZWN1cnNpdmVseSBhIHRyZWUgbm9kZSBmb3IgaGFuZGxpbmcgd2l0aCBleHByZXNzaW9ucyB3aXRoIGV4cG9uZW50c1xuICAgKiAgKGl0J3Mgbm90IGZvciBjb25zdGFudHMsIHN5bWJvbHMgb3IgZnVuY3Rpb25zIHdpdGggZXhwb25lbnRzKVxuICAgKiAgUFM6IFRoZSBvdGhlciBwYXJhbWV0ZXJzIGFyZSBpbnRlcm5hbCBmb3IgcmVjdXJzaW9uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIGV4cGFuZFBvd2VyKG5vZGUpXG4gICAqXG4gICAqIEBwYXJhbSAge05vZGV9IG5vZGUgICAgICAgICBDdXJyZW50IGV4cHJlc3Npb24gbm9kZVxuICAgKiBAcGFyYW0gIHtub2RlfSBwYXJlbnQgICAgICAgUGFyZW50IGN1cnJlbnQgbm9kZSBpbnNpZGUgdGhlIHJlY3Vyc2lvblxuICAgKiBAcGFyYW0gIChpbnR9ICAgICAgICAgICAgICAgUGFyZW50IG51bWJlciBvZiBjaGlkIGluc2lkZSB0aGUgcmVyY3Vyc2lvblxuICAgKlxuICAgKiBAcmV0dXJuIHtub2RlfSAgICAgICAgbm9kZSBleHByZXNzaW9uIHdpdGggYWxsIHBvd2VycyBleHBhbmRlZC5cbiAgICovXG5cblxuICBmdW5jdGlvbiBleHBhbmRQb3dlcihub2RlLCBwYXJlbnQsIGluZFBhcmVudCkge1xuICAgIHZhciB0cCA9IG5vZGUudHlwZTtcbiAgICB2YXIgaW50ZXJuYWwgPSBhcmd1bWVudHMubGVuZ3RoID4gMTsgLy8gVFJVRSBpbiBpbnRlcm5hbCBjYWxsc1xuXG4gICAgaWYgKHRwID09PSAnT3BlcmF0b3JOb2RlJyAmJiBub2RlLmlzQmluYXJ5KCkpIHtcbiAgICAgIHZhciBkb2VzID0gZmFsc2U7XG4gICAgICB2YXIgdmFsO1xuXG4gICAgICBpZiAobm9kZS5vcCA9PT0gJ14nKSB7XG4gICAgICAgIC8vIEZpcnN0IG9wZXJhdG9yOiBQYXJlbnRoZXNpcyBvciBVbmFyeU1pbnVzXG4gICAgICAgIGlmICgobm9kZS5hcmdzWzBdLnR5cGUgPT09ICdQYXJlbnRoZXNpc05vZGUnIHx8IG5vZGUuYXJnc1swXS50eXBlID09PSAnT3BlcmF0b3JOb2RlJykgJiYgbm9kZS5hcmdzWzFdLnR5cGUgPT09ICdDb25zdGFudE5vZGUnKSB7XG4gICAgICAgICAgLy8gU2Vjb25kIG9wZXJhdG9yOiBDb25zdGFudFxuICAgICAgICAgIHZhbCA9IHBhcnNlRmxvYXQobm9kZS5hcmdzWzFdLnZhbHVlKTtcbiAgICAgICAgICBkb2VzID0gdmFsID49IDIgJiYgKDAsIF9udW1iZXIuaXNJbnRlZ2VyKSh2YWwpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChkb2VzKSB7XG4gICAgICAgIC8vIEV4cG9uZW50ID49IDJcbiAgICAgICAgLy8gQmVmb3JlOlxuICAgICAgICAvLyAgICAgICAgICAgIG9wZXJhdG9yIEEgLS0+IFN1YnRyZWVcbiAgICAgICAgLy8gcGFyZW50IHBvd1xuICAgICAgICAvLyAgICAgICAgICAgIGNvbnN0YW50XG4gICAgICAgIC8vXG4gICAgICAgIGlmICh2YWwgPiAyKSB7XG4gICAgICAgICAgLy8gRXhwb25lbnQgPiAyLFxuICAgICAgICAgIC8vIEFGVEVSOiAgKGV4cG9uZW50ID4gMilcbiAgICAgICAgICAvLyAgICAgICAgICAgICBvcGVyYXRvciBBIC0tPiBTdWJ0cmVlXG4gICAgICAgICAgLy8gcGFyZW50ICAqXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgIGRlZXAgY2xvbmUgKG9wZXJhdG9yIEEgLS0+IFN1YnRyZWVcbiAgICAgICAgICAvLyAgICAgICAgICAgICBwb3dcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgY29uc3RhbnQgLSAxXG4gICAgICAgICAgLy9cbiAgICAgICAgICB2YXIgbkVzcVRvcG8gPSBub2RlLmFyZ3NbMF07XG4gICAgICAgICAgdmFyIG5EaXJUb3BvID0gbmV3IE9wZXJhdG9yTm9kZSgnXicsICdwb3cnLCBbbm9kZS5hcmdzWzBdLmNsb25lRGVlcCgpLCBuZXcgQ29uc3RhbnROb2RlKHZhbCAtIDEpXSk7XG4gICAgICAgICAgbm9kZSA9IG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbbkVzcVRvcG8sIG5EaXJUb3BvXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRXhwbyA9IDIgLSBubyBwb3dlclxuICAgICAgICAgIC8vIEFGVEVSOiAgKGV4cG9uZW50ID0gIDIpXG4gICAgICAgICAgLy8gICAgICAgICAgICAgb3BlcmF0b3IgQSAtLT4gU3VidHJlZVxuICAgICAgICAgIC8vIHBhcmVudCAgIG9wZXJcbiAgICAgICAgICAvLyAgICAgICAgICAgIGRlZXAgY2xvbmUgKG9wZXJhdG9yIEEgLS0+IFN1YnRyZWUpXG4gICAgICAgICAgLy9cbiAgICAgICAgICBub2RlID0gbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFtub2RlLmFyZ3NbMF0sIG5vZGUuYXJnc1swXS5jbG9uZURlZXAoKV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGludGVybmFsKSB7XG4gICAgICAgICAgLy8gQ2hhbmdlIHBhcmVudCByZWZlcmVuY2VzIGluIGludGVybmFsIHJlY3Vyc2l2ZSBjYWxsc1xuICAgICAgICAgIGlmIChpbmRQYXJlbnQgPT09ICdjb250ZW50Jykge1xuICAgICAgICAgICAgcGFyZW50LmNvbnRlbnQgPSBub2RlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJlbnQuYXJnc1tpbmRQYXJlbnRdID0gbm9kZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gZG9lc1xuXG4gICAgfSAvLyBiaW5hcnkgT3BlcmF0b3JOb2RlXG5cblxuICAgIGlmICh0cCA9PT0gJ1BhcmVudGhlc2lzTm9kZScpIHtcbiAgICAgIC8vIFJlY3Vyc2lvblxuICAgICAgZXhwYW5kUG93ZXIobm9kZS5jb250ZW50LCBub2RlLCAnY29udGVudCcpO1xuICAgIH0gZWxzZSBpZiAodHAgIT09ICdDb25zdGFudE5vZGUnICYmIHRwICE9PSAnU3ltYm9sTm9kZScpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5hcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGV4cGFuZFBvd2VyKG5vZGUuYXJnc1tpXSwgbm9kZSwgaSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFpbnRlcm5hbCkge1xuICAgICAgLy8gcmV0dXJuIHRoZSByb290IG5vZGVcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgfSAvLyBFbmQgZXhwYW5kUG93ZXJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIEF1eGlsYXJ5IGZ1bmN0aW9uIGZvciByYXRpb25hbGl6ZVxuICAgKiBDb252ZXJ0IG5lYXIgY2Fub25pY2FsIHBvbHlub21pYWwgaW4gb25lIHZhcmlhYmxlIGluIGEgY2Fub25pY2FsIHBvbHlub21pYWxcbiAgICogd2l0aCBvbmUgdGVybSBmb3IgZWFjaCBleHBvbmVudCBpbiBkZWNyZWFzaW5nIG9yZGVyXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIHBvbHlUb0Nhbm9uaWNhbChub2RlIFssIGNvZWZmaWNpZW50c10pXG4gICAqXG4gICAqIEBwYXJhbSAge05vZGUgfCBzdHJpbmd9IGV4cHIgICAgICAgVGhlIG5lYXIgY2Fub25pY2FsIHBvbHlub21pYWwgZXhwcmVzc2lvbiB0byBjb252ZXJ0IGluIGEgYSBjYW5vbmljYWwgcG9seW5vbWlhbCBleHByZXNzaW9uXG4gICAqXG4gICAqICAgICAgICBUaGUgc3RyaW5nIG9yIHRyZWUgZXhwcmVzc2lvbiBuZWVkcyB0byBiZSBhdCBiZWxvdyBzeW50YXgsIHdpdGggZnJlZSBzcGFjZXM6XG4gICAqICAgICAgICAgKCAgKF4oLSk/IHwgWystXT8gKWN0ZSAoKik/IHZhciAoXmV4cG8pPyAgfCBjdGUgKStcbiAgICogICAgICAgV2hlcmUgJ3ZhcicgaXMgb25lIHZhcmlhYmxlIHdpdGggYW55IHZhbGlkIG5hbWVcbiAgICogICAgICAgICAgICAgJ2N0ZScgYXJlIHJlYWwgbnVtZXJpYyBjb25zdGFudHMgd2l0aCBhbnkgdmFsdWUuIEl0IGNhbiBiZSBvbWl0dGVkIGlmIGVxdWFsIHRoYW4gMVxuICAgKiAgICAgICAgICAgICAnZXhwbycgYXJlIGludGVnZXJzIGdyZWF0ZXIgdGhhbiAwLiBJdCBjYW4gYmUgb21pdHRlZCBpZiBlcXVhbCB0aGFuIDEuXG4gICAqXG4gICAqIEBwYXJhbSAge2FycmF5fSAgIGNvZWZmaWNpZW50cyAgICAgICAgICAgICBPcHRpb25hbCByZXR1cm5zIGNvZWZmaWNpZW50cyBzb3J0ZWQgYnkgaW5jcmVhc2VkIGV4cG9uZW50XG4gICAqXG4gICAqXG4gICAqIEByZXR1cm4ge25vZGV9ICAgICAgICBuZXcgbm9kZSB0cmVlIHdpdGggb25lIHZhcmlhYmxlIHBvbHlub21pYWwgb3Igc3RyaW5nIGVycm9yLlxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBvbHlUb0Nhbm9uaWNhbChub2RlLCBjb2VmZmljaWVudHMpIHtcbiAgICBpZiAoY29lZmZpY2llbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvZWZmaWNpZW50cyA9IFtdO1xuICAgIH0gLy8gY29lZmZpY2llbnRzLlxuXG5cbiAgICBjb2VmZmljaWVudHNbMF0gPSAwOyAvLyBpbmRleCBpcyB0aGUgZXhwb25lbnRcblxuICAgIHZhciBvID0ge307XG4gICAgby5jdGUgPSAxO1xuICAgIG8ub3BlciA9ICcrJzsgLy8gZmlyZTogbWFyayB3aXRoICogb3IgXiB3aGVuIGZpbmRzICogb3IgXiBkb3duIHRyZWUsIHJlc2V0IHRvIFwiXCIgd2l0aCArIGFuZCAtLlxuICAgIC8vICAgICAgIEl0IGlzIHVzZWQgdG8gZGVkdWNlIHRoZSBleHBvbmVudDogMSBmb3IgKiwgMCBmb3IgXCJcIi5cblxuICAgIG8uZmlyZSA9ICcnO1xuICAgIHZhciBtYXhFeHBvID0gMDsgLy8gbWF4aW11bSBleHBvbmVudFxuXG4gICAgdmFyIHZhcm5hbWUgPSAnJzsgLy8gdmFyaWFibGUgbmFtZVxuXG4gICAgcmVjdXJQb2wobm9kZSwgbnVsbCwgbyk7XG4gICAgbWF4RXhwbyA9IGNvZWZmaWNpZW50cy5sZW5ndGggLSAxO1xuICAgIHZhciBmaXJzdCA9IHRydWU7XG4gICAgdmFyIG5vO1xuXG4gICAgZm9yICh2YXIgaSA9IG1heEV4cG87IGkgPj0gMDsgaS0tKSB7XG4gICAgICBpZiAoY29lZmZpY2llbnRzW2ldID09PSAwKSBjb250aW51ZTtcbiAgICAgIHZhciBuMSA9IG5ldyBDb25zdGFudE5vZGUoZmlyc3QgPyBjb2VmZmljaWVudHNbaV0gOiBNYXRoLmFicyhjb2VmZmljaWVudHNbaV0pKTtcbiAgICAgIHZhciBvcCA9IGNvZWZmaWNpZW50c1tpXSA8IDAgPyAnLScgOiAnKyc7XG5cbiAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAvLyBJcyBub3QgYSBjb25zdGFudCB3aXRob3V0IHZhcmlhYmxlXG4gICAgICAgIHZhciBuMiA9IG5ldyBTeW1ib2xOb2RlKHZhcm5hbWUpO1xuXG4gICAgICAgIGlmIChpID4gMSkge1xuICAgICAgICAgIHZhciBuMyA9IG5ldyBDb25zdGFudE5vZGUoaSk7XG4gICAgICAgICAgbjIgPSBuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFtuMiwgbjNdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2VmZmljaWVudHNbaV0gPT09IC0xICYmIGZpcnN0KSB7XG4gICAgICAgICAgbjEgPSBuZXcgT3BlcmF0b3JOb2RlKCctJywgJ3VuYXJ5TWludXMnLCBbbjJdKTtcbiAgICAgICAgfSBlbHNlIGlmIChNYXRoLmFicyhjb2VmZmljaWVudHNbaV0pID09PSAxKSB7XG4gICAgICAgICAgbjEgPSBuMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuMSA9IG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbbjEsIG4yXSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZpcnN0KSB7XG4gICAgICAgIG5vID0gbjE7XG4gICAgICB9IGVsc2UgaWYgKG9wID09PSAnKycpIHtcbiAgICAgICAgbm8gPSBuZXcgT3BlcmF0b3JOb2RlKCcrJywgJ2FkZCcsIFtubywgbjFdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vID0gbmV3IE9wZXJhdG9yTm9kZSgnLScsICdzdWJ0cmFjdCcsIFtubywgbjFdKTtcbiAgICAgIH1cblxuICAgICAgZmlyc3QgPSBmYWxzZTtcbiAgICB9IC8vIGZvclxuXG5cbiAgICBpZiAoZmlyc3QpIHtcbiAgICAgIHJldHVybiBuZXcgQ29uc3RhbnROb2RlKDApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbm87XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlY3Vyc2l2ZSBhdXhpbGFyeSBmdW5jdGlvbiBpbnNpZGUgcG9seVRvQ2Fub25pY2FsIGZvclxuICAgICAqIGNvbnZlcnRpbmcgZXhwcmVzc2lvbiBpbiBjYW5vbmljYWwgZm9ybVxuICAgICAqXG4gICAgICogU3ludGF4OlxuICAgICAqXG4gICAgICogICAgIHJlY3VyUG9sKG5vZGUsIG5vUGFpLCBvYmopXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtOb2RlfSBub2RlICAgICAgICBUaGUgY3VycmVudCBzdWJwb2x5bm9taWFsIGV4cHJlc3Npb25cbiAgICAgKiBAcGFyYW0gIHtOb2RlIHwgTnVsbH0gIG5vUGFpICAgVGhlIGN1cnJlbnQgcGFyZW50IG5vZGVcbiAgICAgKiBAcGFyYW0gIHtvYmplY3R9ICAgIG9iaiAgICAgICAgT2JqZWN0IHdpdGggbWFueSBpbnRlcm5hbCBmbGFnc1xuICAgICAqXG4gICAgICogQHJldHVybiB7fSAgICAgICAgICAgICAgICAgICAgTm8gcmV0dXJuLiBJZiBlcnJvciwgdGhyb3dzIGFuIGV4Y2VwdGlvblxuICAgICAqL1xuXG5cbiAgICBmdW5jdGlvbiByZWN1clBvbChub2RlLCBub1BhaSwgbykge1xuICAgICAgdmFyIHRwID0gbm9kZS50eXBlO1xuXG4gICAgICBpZiAodHAgPT09ICdGdW5jdGlvbk5vZGUnKSB7XG4gICAgICAgIC8vICoqKioqIEZ1bmN0aW9uTmFtZSAqKioqKlxuICAgICAgICAvLyBObyBmdW5jdGlvbiBjYWxsIGluIHBvbHlub21pYWwgZXhwcmVzc2lvblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGlzIGFuIHVuc29sdmVkIGZ1bmN0aW9uIGNhbGwnKTtcbiAgICAgIH0gZWxzZSBpZiAodHAgPT09ICdPcGVyYXRvck5vZGUnKSB7XG4gICAgICAgIC8vICoqKioqIE9wZXJhdG9yTmFtZSAqKioqKlxuICAgICAgICBpZiAoJystKl4nLmluZGV4T2Yobm9kZS5vcCkgPT09IC0xKSB0aHJvdyBuZXcgRXJyb3IoJ09wZXJhdG9yICcgKyBub2RlLm9wICsgJyBpbnZhbGlkJyk7XG5cbiAgICAgICAgaWYgKG5vUGFpICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gLSh1bmFyeSksXiAgOiBjaGlsZHJlbiBvZiAqLCssLVxuICAgICAgICAgIGlmICgobm9kZS5mbiA9PT0gJ3VuYXJ5TWludXMnIHx8IG5vZGUuZm4gPT09ICdwb3cnKSAmJiBub1BhaS5mbiAhPT0gJ2FkZCcgJiYgbm9QYWkuZm4gIT09ICdzdWJ0cmFjdCcgJiYgbm9QYWkuZm4gIT09ICdtdWx0aXBseScpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCAnICsgbm9kZS5vcCArICcgcGxhY2luZycpO1xuICAgICAgICAgIH0gLy8gLSwrLCogOiBjaGlsZHJlbiBvZiArLC1cblxuXG4gICAgICAgICAgaWYgKChub2RlLmZuID09PSAnc3VidHJhY3QnIHx8IG5vZGUuZm4gPT09ICdhZGQnIHx8IG5vZGUuZm4gPT09ICdtdWx0aXBseScpICYmIG5vUGFpLmZuICE9PSAnYWRkJyAmJiBub1BhaS5mbiAhPT0gJ3N1YnRyYWN0Jykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkICcgKyBub2RlLm9wICsgJyBwbGFjaW5nJyk7XG4gICAgICAgICAgfSAvLyAtLCsgOiBmaXJzdCBjaGlsZFxuXG5cbiAgICAgICAgICBpZiAoKG5vZGUuZm4gPT09ICdzdWJ0cmFjdCcgfHwgbm9kZS5mbiA9PT0gJ2FkZCcgfHwgbm9kZS5mbiA9PT0gJ3VuYXJ5TWludXMnKSAmJiBvLm5vRmlsICE9PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgJyArIG5vZGUub3AgKyAnIHBsYWNpbmcnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gSGFzIHBhcmVudFxuICAgICAgICAvLyBGaXJlcnM6IF4sKiAgICAgICBPbGQ6ICAgXiwmLC0odW5hcnkpOiBmaXJlcnNcblxuXG4gICAgICAgIGlmIChub2RlLm9wID09PSAnXicgfHwgbm9kZS5vcCA9PT0gJyonKSB7XG4gICAgICAgICAgby5maXJlID0gbm9kZS5vcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBub2RlLmFyZ3MubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgLy8gKywtOiByZXNldCBmaXJlXG4gICAgICAgICAgaWYgKG5vZGUuZm4gPT09ICd1bmFyeU1pbnVzJykgby5vcGVyID0gJy0nO1xuXG4gICAgICAgICAgaWYgKG5vZGUub3AgPT09ICcrJyB8fCBub2RlLmZuID09PSAnc3VidHJhY3QnKSB7XG4gICAgICAgICAgICBvLmZpcmUgPSAnJztcbiAgICAgICAgICAgIG8uY3RlID0gMTsgLy8gZGVmYXVsdCBpZiB0aGVyZSBpcyBubyBjb25zdGFudFxuXG4gICAgICAgICAgICBvLm9wZXIgPSBfaSA9PT0gMCA/ICcrJyA6IG5vZGUub3A7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgby5ub0ZpbCA9IF9pOyAvLyBudW1iZXIgb2Ygc29uXG5cbiAgICAgICAgICByZWN1clBvbChub2RlLmFyZ3NbX2ldLCBub2RlLCBvKTtcbiAgICAgICAgfSAvLyBmb3IgaW4gY2hpbGRyZW5cblxuICAgICAgfSBlbHNlIGlmICh0cCA9PT0gJ1N5bWJvbE5vZGUnKSB7XG4gICAgICAgIC8vICoqKioqIFN5bWJvbE5hbWUgKioqKipcbiAgICAgICAgaWYgKG5vZGUubmFtZSAhPT0gdmFybmFtZSAmJiB2YXJuYW1lICE9PSAnJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlcmUgaXMgbW9yZSB0aGFuIG9uZSB2YXJpYWJsZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFybmFtZSA9IG5vZGUubmFtZTtcblxuICAgICAgICBpZiAobm9QYWkgPT09IG51bGwpIHtcbiAgICAgICAgICBjb2VmZmljaWVudHNbMV0gPSAxO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBeOiBTeW1ib2wgaXMgRmlyc3QgY2hpbGRcblxuXG4gICAgICAgIGlmIChub1BhaS5vcCA9PT0gJ14nICYmIG8ubm9GaWwgIT09IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0luIHBvd2VyIHRoZSB2YXJpYWJsZSBzaG91bGQgYmUgdGhlIGZpcnN0IHBhcmFtZXRlcicpO1xuICAgICAgICB9IC8vICo6IFN5bWJvbCBpcyBTZWNvbmQgY2hpbGRcblxuXG4gICAgICAgIGlmIChub1BhaS5vcCA9PT0gJyonICYmIG8ubm9GaWwgIT09IDEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0luIG11bHRpcGx5IHRoZSB2YXJpYWJsZSBzaG91bGQgYmUgdGhlIHNlY29uZCBwYXJhbWV0ZXInKTtcbiAgICAgICAgfSAvLyBTeW1ib2w6IGZpcmVycyAnJywqID0+IGl0IG1lYW5zIHRoZXJlIGlzIG5vIGV4cG9uZW50IGFib3ZlLCBzbyBpdCdzIDEgKGN0ZSAqIHZhcilcblxuXG4gICAgICAgIGlmIChvLmZpcmUgPT09ICcnIHx8IG8uZmlyZSA9PT0gJyonKSB7XG4gICAgICAgICAgaWYgKG1heEV4cG8gPCAxKSBjb2VmZmljaWVudHNbMV0gPSAwO1xuICAgICAgICAgIGNvZWZmaWNpZW50c1sxXSArPSBvLmN0ZSAqIChvLm9wZXIgPT09ICcrJyA/IDEgOiAtMSk7XG4gICAgICAgICAgbWF4RXhwbyA9IE1hdGgubWF4KDEsIG1heEV4cG8pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRwID09PSAnQ29uc3RhbnROb2RlJykge1xuICAgICAgICB2YXIgdmFsb3IgPSBwYXJzZUZsb2F0KG5vZGUudmFsdWUpO1xuXG4gICAgICAgIGlmIChub1BhaSA9PT0gbnVsbCkge1xuICAgICAgICAgIGNvZWZmaWNpZW50c1swXSA9IHZhbG9yO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChub1BhaS5vcCA9PT0gJ14nKSB7XG4gICAgICAgICAgLy8gY3RlOiBzZWNvbmQgIGNoaWxkIG9mIHBvd2VyXG4gICAgICAgICAgaWYgKG8ubm9GaWwgIT09IDEpIHRocm93IG5ldyBFcnJvcignQ29uc3RhbnQgY2Fubm90IGJlIHBvd2VyZWQnKTtcblxuICAgICAgICAgIGlmICghKDAsIF9udW1iZXIuaXNJbnRlZ2VyKSh2YWxvcikgfHwgdmFsb3IgPD0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb24taW50ZWdlciBleHBvbmVudCBpcyBub3QgYWxsb3dlZCcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZvciAodmFyIF9pMiA9IG1heEV4cG8gKyAxOyBfaTIgPCB2YWxvcjsgX2kyKyspIHtcbiAgICAgICAgICAgIGNvZWZmaWNpZW50c1tfaTJdID0gMDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodmFsb3IgPiBtYXhFeHBvKSBjb2VmZmljaWVudHNbdmFsb3JdID0gMDtcbiAgICAgICAgICBjb2VmZmljaWVudHNbdmFsb3JdICs9IG8uY3RlICogKG8ub3BlciA9PT0gJysnID8gMSA6IC0xKTtcbiAgICAgICAgICBtYXhFeHBvID0gTWF0aC5tYXgodmFsb3IsIG1heEV4cG8pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG8uY3RlID0gdmFsb3I7IC8vIEN0ZTogZmlyZXIgJycgPT4gVGhlcmUgaXMgbm8gZXhwb25lbnQgYW5kIG5vIG11bHRpcGxpY2F0aW9uLCBzbyB0aGUgZXhwb25lbnQgaXMgMC5cblxuICAgICAgICBpZiAoby5maXJlID09PSAnJykge1xuICAgICAgICAgIGNvZWZmaWNpZW50c1swXSArPSBvLmN0ZSAqIChvLm9wZXIgPT09ICcrJyA/IDEgOiAtMSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVHlwZSAnICsgdHAgKyAnIGlzIG5vdCBhbGxvd2VkJyk7XG4gICAgICB9XG4gICAgfSAvLyBFbmQgb2YgcmVjdXJQb2xcblxuICB9IC8vIEVuZCBvZiBwb2x5VG9DYW5vbmljYWxcblxuXG4gIHJldHVybiByYXRpb25hbGl6ZTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVSYXRpb25hbGl6ZSA9IGNyZWF0ZVJhdGlvbmFsaXplOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTaW1wbGlmeSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfdXRpbCA9IHJlcXVpcmUoXCIuL3NpbXBsaWZ5L3V0aWxcIik7XG5cbnZhciBfc2ltcGxpZnlDb3JlID0gcmVxdWlyZShcIi4vc2ltcGxpZnkvc2ltcGxpZnlDb3JlXCIpO1xuXG52YXIgX3NpbXBsaWZ5Q29uc3RhbnQgPSByZXF1aXJlKFwiLi9zaW1wbGlmeS9zaW1wbGlmeUNvbnN0YW50XCIpO1xuXG52YXIgX3Jlc29sdmUgPSByZXF1aXJlKFwiLi9zaW1wbGlmeS9yZXNvbHZlXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIG5hbWUgPSAnc2ltcGxpZnknO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnY29uZmlnJywgJ3R5cGVkJywgJ3BhcnNlJywgJ2FkZCcsICdzdWJ0cmFjdCcsICdtdWx0aXBseScsICdkaXZpZGUnLCAncG93JywgJ2lzWmVybycsICdlcXVhbCcsICc/ZnJhY3Rpb24nLCAnP2JpZ251bWJlcicsICdtYXRoV2l0aFRyYW5zZm9ybScsICdDb25zdGFudE5vZGUnLCAnRnVuY3Rpb25Ob2RlJywgJ09wZXJhdG9yTm9kZScsICdQYXJlbnRoZXNpc05vZGUnLCAnU3ltYm9sTm9kZSddO1xudmFyIGNyZWF0ZVNpbXBsaWZ5ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgcGFyc2UgPSBfcmVmLnBhcnNlLFxuICAgICAgYWRkID0gX3JlZi5hZGQsXG4gICAgICBzdWJ0cmFjdCA9IF9yZWYuc3VidHJhY3QsXG4gICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHksXG4gICAgICBkaXZpZGUgPSBfcmVmLmRpdmlkZSxcbiAgICAgIHBvdyA9IF9yZWYucG93LFxuICAgICAgaXNaZXJvID0gX3JlZi5pc1plcm8sXG4gICAgICBlcXVhbCA9IF9yZWYuZXF1YWwsXG4gICAgICBmcmFjdGlvbiA9IF9yZWYuZnJhY3Rpb24sXG4gICAgICBiaWdudW1iZXIgPSBfcmVmLmJpZ251bWJlcixcbiAgICAgIG1hdGhXaXRoVHJhbnNmb3JtID0gX3JlZi5tYXRoV2l0aFRyYW5zZm9ybSxcbiAgICAgIENvbnN0YW50Tm9kZSA9IF9yZWYuQ29uc3RhbnROb2RlLFxuICAgICAgRnVuY3Rpb25Ob2RlID0gX3JlZi5GdW5jdGlvbk5vZGUsXG4gICAgICBPcGVyYXRvck5vZGUgPSBfcmVmLk9wZXJhdG9yTm9kZSxcbiAgICAgIFBhcmVudGhlc2lzTm9kZSA9IF9yZWYuUGFyZW50aGVzaXNOb2RlLFxuICAgICAgU3ltYm9sTm9kZSA9IF9yZWYuU3ltYm9sTm9kZTtcbiAgdmFyIHNpbXBsaWZ5Q29uc3RhbnQgPSAoMCwgX3NpbXBsaWZ5Q29uc3RhbnQuY3JlYXRlU2ltcGxpZnlDb25zdGFudCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBjb25maWc6IGNvbmZpZyxcbiAgICBtYXRoV2l0aFRyYW5zZm9ybTogbWF0aFdpdGhUcmFuc2Zvcm0sXG4gICAgZnJhY3Rpb246IGZyYWN0aW9uLFxuICAgIGJpZ251bWJlcjogYmlnbnVtYmVyLFxuICAgIENvbnN0YW50Tm9kZTogQ29uc3RhbnROb2RlLFxuICAgIE9wZXJhdG9yTm9kZTogT3BlcmF0b3JOb2RlLFxuICAgIEZ1bmN0aW9uTm9kZTogRnVuY3Rpb25Ob2RlLFxuICAgIFN5bWJvbE5vZGU6IFN5bWJvbE5vZGVcbiAgfSk7XG4gIHZhciBzaW1wbGlmeUNvcmUgPSAoMCwgX3NpbXBsaWZ5Q29yZS5jcmVhdGVTaW1wbGlmeUNvcmUpKHtcbiAgICBlcXVhbDogZXF1YWwsXG4gICAgaXNaZXJvOiBpc1plcm8sXG4gICAgYWRkOiBhZGQsXG4gICAgc3VidHJhY3Q6IHN1YnRyYWN0LFxuICAgIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgICBkaXZpZGU6IGRpdmlkZSxcbiAgICBwb3c6IHBvdyxcbiAgICBDb25zdGFudE5vZGU6IENvbnN0YW50Tm9kZSxcbiAgICBPcGVyYXRvck5vZGU6IE9wZXJhdG9yTm9kZSxcbiAgICBGdW5jdGlvbk5vZGU6IEZ1bmN0aW9uTm9kZSxcbiAgICBQYXJlbnRoZXNpc05vZGU6IFBhcmVudGhlc2lzTm9kZVxuICB9KTtcbiAgdmFyIHJlc29sdmUgPSAoMCwgX3Jlc29sdmUuY3JlYXRlUmVzb2x2ZSkoe1xuICAgIHBhcnNlOiBwYXJzZSxcbiAgICBGdW5jdGlvbk5vZGU6IEZ1bmN0aW9uTm9kZSxcbiAgICBPcGVyYXRvck5vZGU6IE9wZXJhdG9yTm9kZSxcbiAgICBQYXJlbnRoZXNpc05vZGU6IFBhcmVudGhlc2lzTm9kZVxuICB9KTtcblxuICB2YXIgX2NyZWF0ZVV0aWwgPSAoMCwgX3V0aWwuY3JlYXRlVXRpbCkoe1xuICAgIEZ1bmN0aW9uTm9kZTogRnVuY3Rpb25Ob2RlLFxuICAgIE9wZXJhdG9yTm9kZTogT3BlcmF0b3JOb2RlLFxuICAgIFN5bWJvbE5vZGU6IFN5bWJvbE5vZGVcbiAgfSksXG4gICAgICBpc0NvbW11dGF0aXZlID0gX2NyZWF0ZVV0aWwuaXNDb21tdXRhdGl2ZSxcbiAgICAgIGlzQXNzb2NpYXRpdmUgPSBfY3JlYXRlVXRpbC5pc0Fzc29jaWF0aXZlLFxuICAgICAgZmxhdHRlbiA9IF9jcmVhdGVVdGlsLmZsYXR0ZW4sXG4gICAgICB1bmZsYXR0ZW5yID0gX2NyZWF0ZVV0aWwudW5mbGF0dGVucixcbiAgICAgIHVuZmxhdHRlbmwgPSBfY3JlYXRlVXRpbC51bmZsYXR0ZW5sLFxuICAgICAgY3JlYXRlTWFrZU5vZGVGdW5jdGlvbiA9IF9jcmVhdGVVdGlsLmNyZWF0ZU1ha2VOb2RlRnVuY3Rpb247XG4gIC8qKlxuICAgKiBTaW1wbGlmeSBhbiBleHByZXNzaW9uIHRyZWUuXG4gICAqXG4gICAqIEEgbGlzdCBvZiBydWxlcyBhcmUgYXBwbGllZCB0byBhbiBleHByZXNzaW9uLCByZXBlYXRpbmcgb3ZlciB0aGUgbGlzdCB1bnRpbFxuICAgKiBubyBmdXJ0aGVyIGNoYW5nZXMgYXJlIG1hZGUuXG4gICAqIEl0J3MgcG9zc2libGUgdG8gcGFzcyBhIGN1c3RvbSBzZXQgb2YgcnVsZXMgdG8gdGhlIGZ1bmN0aW9uIGFzIHNlY29uZFxuICAgKiBhcmd1bWVudC4gQSBydWxlIGNhbiBiZSBzcGVjaWZpZWQgYXMgYW4gb2JqZWN0LCBzdHJpbmcsIG9yIGZ1bmN0aW9uOlxuICAgKlxuICAgKiAgICAgY29uc3QgcnVsZXMgPSBbXG4gICAqICAgICAgIHsgbDogJ24xKm4zICsgbjIqbjMnLCByOiAnKG4xK24yKSpuMycgfSxcbiAgICogICAgICAgJ24xKm4zICsgbjIqbjMgLT4gKG4xK24yKSpuMycsXG4gICAqICAgICAgIGZ1bmN0aW9uIChub2RlKSB7XG4gICAqICAgICAgICAgLy8gLi4uIHJldHVybiBhIG5ldyBub2RlIG9yIHJldHVybiB0aGUgbm9kZSB1bmNoYW5nZWRcbiAgICogICAgICAgICByZXR1cm4gbm9kZVxuICAgKiAgICAgICB9XG4gICAqICAgICBdXG4gICAqXG4gICAqIFN0cmluZyBhbmQgb2JqZWN0IHJ1bGVzIGNvbnNpc3Qgb2YgYSBsZWZ0IGFuZCByaWdodCBwYXR0ZXJuLiBUaGUgbGVmdCBpc1xuICAgKiB1c2VkIHRvIG1hdGNoIGFnYWluc3QgdGhlIGV4cHJlc3Npb24gYW5kIHRoZSByaWdodCBkZXRlcm1pbmVzIHdoYXQgbWF0Y2hlc1xuICAgKiBhcmUgcmVwbGFjZWQgd2l0aC4gVGhlIG1haW4gZGlmZmVyZW5jZSBiZXR3ZWVuIGEgcGF0dGVybiBhbmQgYSBub3JtYWxcbiAgICogZXhwcmVzc2lvbiBpcyB0aGF0IHZhcmlhYmxlcyBzdGFydGluZyB3aXRoIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVycyBhcmVcbiAgICogaW50ZXJwcmV0ZWQgYXMgd2lsZGNhcmRzOlxuICAgKlxuICAgKiAtICduJyAtIG1hdGNoZXMgYW55IE5vZGVcbiAgICogLSAnYycgLSBtYXRjaGVzIGFueSBDb25zdGFudE5vZGVcbiAgICogLSAndicgLSBtYXRjaGVzIGFueSBOb2RlIHRoYXQgaXMgbm90IGEgQ29uc3RhbnROb2RlXG4gICAqXG4gICAqIFRoZSBkZWZhdWx0IGxpc3Qgb2YgcnVsZXMgaXMgZXhwb3NlZCBvbiB0aGUgZnVuY3Rpb24gYXMgYHNpbXBsaWZ5LnJ1bGVzYFxuICAgKiBhbmQgY2FuIGJlIHVzZWQgYXMgYSBiYXNpcyB0byBidWlsdCBhIHNldCBvZiBjdXN0b20gcnVsZXMuXG4gICAqXG4gICAqIEZvciBtb3JlIGRldGFpbHMgb24gdGhlIHRoZW9yeSwgc2VlOlxuICAgKlxuICAgKiAtIFtTdHJhdGVnaWVzIGZvciBzaW1wbGlmeWluZyBtYXRoIGV4cHJlc3Npb25zIChTdGFja292ZXJmbG93KV0oaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzU0MDIyNy9zdHJhdGVnaWVzLWZvci1zaW1wbGlmeWluZy1tYXRoLWV4cHJlc3Npb25zKVxuICAgKiAtIFtTeW1ib2xpYyBjb21wdXRhdGlvbiAtIFNpbXBsaWZpY2F0aW9uIChXaWtpcGVkaWEpXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TeW1ib2xpY19jb21wdXRhdGlvbiNTaW1wbGlmaWNhdGlvbilcbiAgICpcbiAgICogIEFuIG9wdGlvbmFsIGBvcHRpb25zYCBhcmd1bWVudCBjYW4gYmUgcGFzc2VkIGFzIGxhc3QgYXJndW1lbnQgb2YgYHNpbXBsaWZ5YC5cbiAgICogIFRoZXJlIGlzIGN1cnJlbnRseSBvbmUgb3B0aW9uIGF2YWlsYWJsZTogYGV4YWN0RnJhY3Rpb25zYCwgYSBib29sZWFuIHdoaWNoXG4gICAqICBpcyBgdHJ1ZWAgYnkgZGVmYXVsdC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgc2ltcGxpZnkoZXhwcilcbiAgICogICAgIHNpbXBsaWZ5KGV4cHIsIHJ1bGVzKVxuICAgKiAgICAgc2ltcGxpZnkoZXhwciwgcnVsZXMpXG4gICAqICAgICBzaW1wbGlmeShleHByLCBydWxlcywgc2NvcGUpXG4gICAqICAgICBzaW1wbGlmeShleHByLCBydWxlcywgc2NvcGUsIG9wdGlvbnMpXG4gICAqICAgICBzaW1wbGlmeShleHByLCBzY29wZSlcbiAgICogICAgIHNpbXBsaWZ5KGV4cHIsIHNjb3BlLCBvcHRpb25zKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGguc2ltcGxpZnkoJzIgKiAxICogeCBeICgyIC0gMSknKSAgICAgIC8vIE5vZGUgXCIyICogeFwiXG4gICAqICAgICBtYXRoLnNpbXBsaWZ5KCcyICogMyAqIHgnLCB7eDogNH0pICAgICAgICAvLyBOb2RlIFwiMjRcIlxuICAgKiAgICAgY29uc3QgZiA9IG1hdGgucGFyc2UoJzIgKiAxICogeCBeICgyIC0gMSknKVxuICAgKiAgICAgbWF0aC5zaW1wbGlmeShmKSAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm9kZSBcIjIgKiB4XCJcbiAgICogICAgIG1hdGguc2ltcGxpZnkoJzAuNCAqIHgnLCB7fSwge2V4YWN0RnJhY3Rpb25zOiB0cnVlfSkgIC8vIE5vZGUgXCJ4ICogMiAvIDVcIlxuICAgKiAgICAgbWF0aC5zaW1wbGlmeSgnMC40ICogeCcsIHt9LCB7ZXhhY3RGcmFjdGlvbnM6IGZhbHNlfSkgLy8gTm9kZSBcIjAuNCAqIHhcIlxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgIGRlcml2YXRpdmUsIHBhcnNlLCBldmFsdWF0ZSwgcmF0aW9uYWxpemVcbiAgICpcbiAgICogQHBhcmFtIHtOb2RlIHwgc3RyaW5nfSBleHByXG4gICAqICAgICAgICAgICAgVGhlIGV4cHJlc3Npb24gdG8gYmUgc2ltcGxpZmllZFxuICAgKiBAcGFyYW0ge0FycmF5PHtsOnN0cmluZywgcjogc3RyaW5nfSB8IHN0cmluZyB8IGZ1bmN0aW9uPn0gW3J1bGVzXVxuICAgKiAgICAgICAgICAgIE9wdGlvbmFsIGxpc3Qgd2l0aCBjdXN0b20gcnVsZXNcbiAgICogQHJldHVybiB7Tm9kZX0gUmV0dXJucyB0aGUgc2ltcGxpZmllZCBmb3JtIG9mIGBleHByYFxuICAgKi9cblxuXG4gIHZhciBzaW1wbGlmeSA9IHR5cGVkKCdzaW1wbGlmeScsIHtcbiAgICBzdHJpbmc6IGZ1bmN0aW9uIHN0cmluZyhleHByKSB7XG4gICAgICByZXR1cm4gc2ltcGxpZnkocGFyc2UoZXhwciksIHNpbXBsaWZ5LnJ1bGVzLCB7fSwge30pO1xuICAgIH0sXG4gICAgJ3N0cmluZywgT2JqZWN0JzogZnVuY3Rpb24gc3RyaW5nT2JqZWN0KGV4cHIsIHNjb3BlKSB7XG4gICAgICByZXR1cm4gc2ltcGxpZnkocGFyc2UoZXhwciksIHNpbXBsaWZ5LnJ1bGVzLCBzY29wZSwge30pO1xuICAgIH0sXG4gICAgJ3N0cmluZywgT2JqZWN0LCBPYmplY3QnOiBmdW5jdGlvbiBzdHJpbmdPYmplY3RPYmplY3QoZXhwciwgc2NvcGUsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBzaW1wbGlmeShwYXJzZShleHByKSwgc2ltcGxpZnkucnVsZXMsIHNjb3BlLCBvcHRpb25zKTtcbiAgICB9LFxuICAgICdzdHJpbmcsIEFycmF5JzogZnVuY3Rpb24gc3RyaW5nQXJyYXkoZXhwciwgcnVsZXMpIHtcbiAgICAgIHJldHVybiBzaW1wbGlmeShwYXJzZShleHByKSwgcnVsZXMsIHt9LCB7fSk7XG4gICAgfSxcbiAgICAnc3RyaW5nLCBBcnJheSwgT2JqZWN0JzogZnVuY3Rpb24gc3RyaW5nQXJyYXlPYmplY3QoZXhwciwgcnVsZXMsIHNjb3BlKSB7XG4gICAgICByZXR1cm4gc2ltcGxpZnkocGFyc2UoZXhwciksIHJ1bGVzLCBzY29wZSwge30pO1xuICAgIH0sXG4gICAgJ3N0cmluZywgQXJyYXksIE9iamVjdCwgT2JqZWN0JzogZnVuY3Rpb24gc3RyaW5nQXJyYXlPYmplY3RPYmplY3QoZXhwciwgcnVsZXMsIHNjb3BlLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gc2ltcGxpZnkocGFyc2UoZXhwciksIHJ1bGVzLCBzY29wZSwgb3B0aW9ucyk7XG4gICAgfSxcbiAgICAnTm9kZSwgT2JqZWN0JzogZnVuY3Rpb24gTm9kZU9iamVjdChleHByLCBzY29wZSkge1xuICAgICAgcmV0dXJuIHNpbXBsaWZ5KGV4cHIsIHNpbXBsaWZ5LnJ1bGVzLCBzY29wZSwge30pO1xuICAgIH0sXG4gICAgJ05vZGUsIE9iamVjdCwgT2JqZWN0JzogZnVuY3Rpb24gTm9kZU9iamVjdE9iamVjdChleHByLCBzY29wZSwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIHNpbXBsaWZ5KGV4cHIsIHNpbXBsaWZ5LnJ1bGVzLCBzY29wZSwgb3B0aW9ucyk7XG4gICAgfSxcbiAgICBOb2RlOiBmdW5jdGlvbiBOb2RlKGV4cHIpIHtcbiAgICAgIHJldHVybiBzaW1wbGlmeShleHByLCBzaW1wbGlmeS5ydWxlcywge30sIHt9KTtcbiAgICB9LFxuICAgICdOb2RlLCBBcnJheSc6IGZ1bmN0aW9uIE5vZGVBcnJheShleHByLCBydWxlcykge1xuICAgICAgcmV0dXJuIHNpbXBsaWZ5KGV4cHIsIHJ1bGVzLCB7fSwge30pO1xuICAgIH0sXG4gICAgJ05vZGUsIEFycmF5LCBPYmplY3QnOiBmdW5jdGlvbiBOb2RlQXJyYXlPYmplY3QoZXhwciwgcnVsZXMsIHNjb3BlKSB7XG4gICAgICByZXR1cm4gc2ltcGxpZnkoZXhwciwgcnVsZXMsIHNjb3BlLCB7fSk7XG4gICAgfSxcbiAgICAnTm9kZSwgQXJyYXksIE9iamVjdCwgT2JqZWN0JzogZnVuY3Rpb24gTm9kZUFycmF5T2JqZWN0T2JqZWN0KGV4cHIsIHJ1bGVzLCBzY29wZSwgb3B0aW9ucykge1xuICAgICAgcnVsZXMgPSBfYnVpbGRSdWxlcyhydWxlcyk7XG4gICAgICB2YXIgcmVzID0gcmVzb2x2ZShleHByLCBzY29wZSk7XG4gICAgICByZXMgPSByZW1vdmVQYXJlbnMocmVzKTtcbiAgICAgIHZhciB2aXNpdGVkID0ge307XG4gICAgICB2YXIgc3RyID0gcmVzLnRvU3RyaW5nKHtcbiAgICAgICAgcGFyZW50aGVzaXM6ICdhbGwnXG4gICAgICB9KTtcblxuICAgICAgd2hpbGUgKCF2aXNpdGVkW3N0cl0pIHtcbiAgICAgICAgdmlzaXRlZFtzdHJdID0gdHJ1ZTtcbiAgICAgICAgX2xhc3RzeW0gPSAwOyAvLyBjb3VudGVyIGZvciBwbGFjZWhvbGRlciBzeW1ib2xzXG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmICh0eXBlb2YgcnVsZXNbaV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJlcyA9IHJ1bGVzW2ldKHJlcywgb3B0aW9ucyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZsYXR0ZW4ocmVzKTtcbiAgICAgICAgICAgIHJlcyA9IGFwcGx5UnVsZShyZXMsIHJ1bGVzW2ldKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB1bmZsYXR0ZW5sKHJlcyk7IC8vIHVzaW5nIGxlZnQtaGVhdnkgYmluYXJ5IHRyZWUgaGVyZSBzaW5jZSBjdXN0b20gcnVsZSBmdW5jdGlvbnMgbWF5IGV4cGVjdCBpdFxuICAgICAgICB9XG5cbiAgICAgICAgc3RyID0gcmVzLnRvU3RyaW5nKHtcbiAgICAgICAgICBwYXJlbnRoZXNpczogJ2FsbCdcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICB9KTtcbiAgc2ltcGxpZnkuc2ltcGxpZnlDb3JlID0gc2ltcGxpZnlDb3JlO1xuICBzaW1wbGlmeS5yZXNvbHZlID0gcmVzb2x2ZTtcblxuICBmdW5jdGlvbiByZW1vdmVQYXJlbnMobm9kZSkge1xuICAgIHJldHVybiBub2RlLnRyYW5zZm9ybShmdW5jdGlvbiAobm9kZSwgcGF0aCwgcGFyZW50KSB7XG4gICAgICByZXR1cm4gKDAsIF9pcy5pc1BhcmVudGhlc2lzTm9kZSkobm9kZSkgPyByZW1vdmVQYXJlbnMobm9kZS5jb250ZW50KSA6IG5vZGU7XG4gICAgfSk7XG4gIH0gLy8gQWxsIGNvbnN0YW50cyB0aGF0IGFyZSBhbGxvd2VkIGluIHJ1bGVzXG5cblxuICB2YXIgU1VQUE9SVEVEX0NPTlNUQU5UUyA9IHtcbiAgICBcInRydWVcIjogdHJ1ZSxcbiAgICBcImZhbHNlXCI6IHRydWUsXG4gICAgZTogdHJ1ZSxcbiAgICBpOiB0cnVlLFxuICAgIEluZmluaXR5OiB0cnVlLFxuICAgIExOMjogdHJ1ZSxcbiAgICBMTjEwOiB0cnVlLFxuICAgIExPRzJFOiB0cnVlLFxuICAgIExPRzEwRTogdHJ1ZSxcbiAgICBOYU46IHRydWUsXG4gICAgcGhpOiB0cnVlLFxuICAgIHBpOiB0cnVlLFxuICAgIFNRUlQxXzI6IHRydWUsXG4gICAgU1FSVDI6IHRydWUsXG4gICAgdGF1OiB0cnVlIC8vIG51bGw6IGZhbHNlLFxuICAgIC8vIHVuZGVmaW5lZDogZmFsc2UsXG4gICAgLy8gdmVyc2lvbjogZmFsc2UsXG5cbiAgfTsgLy8gQXJyYXkgb2Ygc3RyaW5ncywgdXNlZCB0byBidWlsZCB0aGUgcnVsZVNldC5cbiAgLy8gRWFjaCBsIChsZWZ0IHNpZGUpIGFuZCByIChyaWdodCBzaWRlKSBhcmUgcGFyc2VkIGJ5XG4gIC8vIHRoZSBleHByZXNzaW9uIHBhcnNlciBpbnRvIGEgbm9kZSB0cmVlLlxuICAvLyBMZWZ0IGhhbmQgc2lkZXMgYXJlIG1hdGNoZWQgdG8gc3VidHJlZXMgd2l0aGluIHRoZVxuICAvLyBleHByZXNzaW9uIHRvIGJlIHBhcnNlZCBhbmQgcmVwbGFjZWQgd2l0aCB0aGUgcmlnaHRcbiAgLy8gaGFuZCBzaWRlLlxuICAvLyBUT0RPOiBBZGQgc3VwcG9ydCBmb3IgY29uc3RyYWludHMgb24gY29uc3RhbnRzIChlaXRoZXIgaW4gdGhlIGZvcm0gb2YgYSAnPScgZXhwcmVzc2lvbiBvciBhIGNhbGxiYWNrIFtjYWxsYmFjayBhbGxvd3MgdGhpbmdzIGxpa2UgY29tcGFyaW5nIHN5bWJvbHMgYWxwaGFiZXRpY2FsbHldKVxuICAvLyBUbyBldmFsdWF0ZSBsaHMgY29uc3RhbnRzIGZvciByaHMgY29uc3RhbnRzLCB1c2U6IHsgbDogJ2MxK2MyJywgcjogJ2MzJywgZXZhbHVhdGU6ICdjMyA9IGMxICsgYzInIH0uIE11bHRpcGxlIGFzc2lnbm1lbnRzIGFyZSBzZXBhcmF0ZWQgYnkgJzsnIGluIGJsb2NrIGZvcm1hdC5cbiAgLy8gSXQgaXMgcG9zc2libGUgdG8gZ2V0IGludG8gYW4gaW5maW5pdGUgbG9vcCB3aXRoIGNvbmZsaWN0aW5nIHJ1bGVzXG5cbiAgc2ltcGxpZnkucnVsZXMgPSBbc2ltcGxpZnlDb3JlLCAvLyB7IGw6ICduKzAnLCByOiAnbicgfSwgICAgIC8vIHNpbXBsaWZ5Q29yZVxuICAvLyB7IGw6ICduXjAnLCByOiAnMScgfSwgICAgIC8vIHNpbXBsaWZ5Q29yZVxuICAvLyB7IGw6ICcwKm4nLCByOiAnMCcgfSwgICAgIC8vIHNpbXBsaWZ5Q29yZVxuICAvLyB7IGw6ICduL24nLCByOiAnMSd9LCAgICAgIC8vIHNpbXBsaWZ5Q29yZVxuICAvLyB7IGw6ICduXjEnLCByOiAnbicgfSwgICAgIC8vIHNpbXBsaWZ5Q29yZVxuICAvLyB7IGw6ICcrbjEnLCByOiduMScgfSwgICAgIC8vIHNpbXBsaWZ5Q29yZVxuICAvLyB7IGw6ICduLS1uMScsIHI6J24rbjEnIH0sIC8vIHNpbXBsaWZ5Q29yZVxuICB7XG4gICAgbDogJ2xvZyhlKScsXG4gICAgcjogJzEnXG4gIH0sIC8vIHRlbXBvcmFyeSBydWxlc1xuICB7XG4gICAgbDogJ24tbjEnLFxuICAgIHI6ICduKy1uMSdcbiAgfSwgLy8gdGVtcG9yYXJpbHkgcmVwbGFjZSAnc3VidHJhY3QnIHNvIHdlIGNhbiBmdXJ0aGVyIGZsYXR0ZW4gdGhlICdhZGQnIG9wZXJhdG9yXG4gIHtcbiAgICBsOiAnLShjKnYpJyxcbiAgICByOiAnKC1jKSAqIHYnXG4gIH0sIC8vIG1ha2Ugbm9uLWNvbnN0YW50IHRlcm1zIHBvc2l0aXZlXG4gIHtcbiAgICBsOiAnLXYnLFxuICAgIHI6ICcoLTEpICogdidcbiAgfSwge1xuICAgIGw6ICduL24xXm4yJyxcbiAgICByOiAnbipuMV4tbjInXG4gIH0sIC8vIHRlbXBvcmFyaWx5IHJlcGxhY2UgJ2RpdmlkZScgc28gd2UgY2FuIGZ1cnRoZXIgZmxhdHRlbiB0aGUgJ211bHRpcGx5JyBvcGVyYXRvclxuICB7XG4gICAgbDogJ24vbjEnLFxuICAgIHI6ICduKm4xXi0xJ1xuICB9LCAvLyBleHBhbmQgbmVzdGVkIGV4cG9uZW50aWF0aW9uXG4gIHtcbiAgICBsOiAnKG4gXiBuMSkgXiBuMicsXG4gICAgcjogJ24gXiAobjEgKiBuMiknXG4gIH0sIC8vIGNvbGxlY3QgbGlrZSBmYWN0b3JzXG4gIHtcbiAgICBsOiAnbipuJyxcbiAgICByOiAnbl4yJ1xuICB9LCB7XG4gICAgbDogJ24gKiBuXm4xJyxcbiAgICByOiAnbl4objErMSknXG4gIH0sIHtcbiAgICBsOiAnbl5uMSAqIG5ebjInLFxuICAgIHI6ICduXihuMStuMiknXG4gIH0sIC8vIGNvbGxlY3QgbGlrZSB0ZXJtc1xuICB7XG4gICAgbDogJ24rbicsXG4gICAgcjogJzIqbidcbiAgfSwge1xuICAgIGw6ICduKy1uJyxcbiAgICByOiAnMCdcbiAgfSwge1xuICAgIGw6ICduMSpuMiArIG4yJyxcbiAgICByOiAnKG4xKzEpKm4yJ1xuICB9LCB7XG4gICAgbDogJ24xKm4zICsgbjIqbjMnLFxuICAgIHI6ICcobjErbjIpKm4zJ1xuICB9LCAvLyByZW1vdmUgcGFyZW50aGVzaXMgaW4gdGhlIGNhc2Ugb2YgbmVnYXRpbmcgYSBxdWFudGl0aXlcbiAge1xuICAgIGw6ICduMSArIC0xICogKG4yICsgbjMpJyxcbiAgICByOiAnbjEgKyAtMSAqIG4yICsgLTEgKiBuMydcbiAgfSwgc2ltcGxpZnlDb25zdGFudCwge1xuICAgIGw6ICcoLW4pKm4xJyxcbiAgICByOiAnLShuKm4xKSdcbiAgfSwgLy8gbWFrZSBmYWN0b3JzIHBvc2l0aXZlIChhbmQgdW5kbyAnbWFrZSBub24tY29uc3RhbnQgdGVybXMgcG9zaXRpdmUnKVxuICAvLyBvcmRlcmluZyBvZiBjb25zdGFudHNcbiAge1xuICAgIGw6ICdjK3YnLFxuICAgIHI6ICd2K2MnLFxuICAgIGNvbnRleHQ6IHtcbiAgICAgIGFkZDoge1xuICAgICAgICBjb21tdXRhdGl2ZTogZmFsc2VcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBsOiAndipjJyxcbiAgICByOiAnYyp2JyxcbiAgICBjb250ZXh0OiB7XG4gICAgICBtdWx0aXBseToge1xuICAgICAgICBjb21tdXRhdGl2ZTogZmFsc2VcbiAgICAgIH1cbiAgICB9XG4gIH0sIC8vIHVuZG8gdGVtcG9yYXJ5IHJ1bGVzXG4gIC8vIHsgbDogJygtMSkgKiBuJywgcjogJy1uJyB9LCAvLyAjODExIGFkZGVkIHRlc3Qgd2hpY2ggcHJvdmVkIHRoaXMgaXMgcmVkdW5kYW50XG4gIHtcbiAgICBsOiAnbistbjEnLFxuICAgIHI6ICduLW4xJ1xuICB9LCAvLyB1bmRvIHJlcGxhY2UgJ3N1YnRyYWN0J1xuICB7XG4gICAgbDogJ24qKG4xXi0xKScsXG4gICAgcjogJ24vbjEnXG4gIH0sIC8vIHVuZG8gcmVwbGFjZSAnZGl2aWRlJ1xuICB7XG4gICAgbDogJ24qbjFeLW4yJyxcbiAgICByOiAnbi9uMV5uMidcbiAgfSwge1xuICAgIGw6ICduMV4tMScsXG4gICAgcjogJzEvbjEnXG4gIH0sIHtcbiAgICBsOiAnbioobjEvbjIpJyxcbiAgICByOiAnKG4qbjEpL24yJ1xuICB9LCAvLyAnKicgYmVmb3JlICcvJ1xuICB7XG4gICAgbDogJ24tKG4xK24yKScsXG4gICAgcjogJ24tbjEtbjInXG4gIH0sIC8vICctJyBiZWZvcmUgJysnXG4gIC8vIHsgbDogJyhuMS9uMikvbjMnLCByOiAnbjEvKG4yKm4zKScgfSxcbiAgLy8geyBsOiAnKG4qbjEpLyhuKm4yKScsIHI6ICduMS9uMicgfSxcbiAge1xuICAgIGw6ICcxKm4nLFxuICAgIHI6ICduJ1xuICB9LCAvLyB0aGlzIHBhdHRlcm4gY2FuIGJlIHByb2R1Y2VkIGJ5IHNpbXBsaWZ5Q29uc3RhbnRcbiAge1xuICAgIGw6ICduMS8objIvbjMpJyxcbiAgICByOiAnKG4xKm4zKS9uMidcbiAgfV07XG4gIC8qKlxuICAgKiBQYXJzZSB0aGUgc3RyaW5nIGFycmF5IG9mIHJ1bGVzIGludG8gbm9kZXNcbiAgICpcbiAgICogRXhhbXBsZSBzeW50YXggZm9yIHJ1bGVzOlxuICAgKlxuICAgKiBQb3NpdGlvbiBjb25zdGFudHMgdG8gdGhlIGxlZnQgaW4gYSBwcm9kdWN0OlxuICAgKiB7IGw6ICduMSAqIGMxJywgcjogJ2MxICogbjEnIH1cbiAgICogbjEgaXMgYW55IE5vZGUsIGFuZCBjMSBpcyBhIENvbnN0YW50Tm9kZS5cbiAgICpcbiAgICogQXBwbHkgZGlmZmVyZW5jZSBvZiBzcXVhcmVzIGZvcm11bGE6XG4gICAqIHsgbDogJyhuMSAtIG4yKSAqIChuMSArIG4yKScsIHI6ICduMV4yIC0gbjJeMicgfVxuICAgKiBuMSwgbjIgbWVhbiBhbnkgTm9kZS5cbiAgICpcbiAgICogU2hvcnQgaGFuZCBub3RhdGlvbjpcbiAgICogJ24xICogYzEgLT4gYzEgKiBuMSdcbiAgICovXG5cbiAgZnVuY3Rpb24gX2J1aWxkUnVsZXMocnVsZXMpIHtcbiAgICAvLyBBcnJheSBvZiBydWxlcyB0byBiZSB1c2VkIHRvIHNpbXBsaWZ5IGV4cHJlc3Npb25zXG4gICAgdmFyIHJ1bGVTZXQgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBydWxlID0gcnVsZXNbaV07XG4gICAgICB2YXIgbmV3UnVsZSA9IHZvaWQgMDtcblxuICAgICAgdmFyIHJ1bGVUeXBlID0gX3R5cGVvZihydWxlKTtcblxuICAgICAgc3dpdGNoIChydWxlVHlwZSkge1xuICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBsciA9IHJ1bGUuc3BsaXQoJy0+Jyk7XG5cbiAgICAgICAgICAgIGlmIChsci5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgcnVsZSA9IHtcbiAgICAgICAgICAgICAgICBsOiBsclswXSxcbiAgICAgICAgICAgICAgICByOiBsclsxXVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhyb3cgU3ludGF4RXJyb3IoJ0NvdWxkIG5vdCBwYXJzZSBydWxlOiAnICsgcnVsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cblxuICAgICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICAgIG5ld1J1bGUgPSB7XG4gICAgICAgICAgICBsOiByZW1vdmVQYXJlbnMocGFyc2UocnVsZS5sKSksXG4gICAgICAgICAgICByOiByZW1vdmVQYXJlbnMocGFyc2UocnVsZS5yKSlcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKHJ1bGUuY29udGV4dCkge1xuICAgICAgICAgICAgbmV3UnVsZS5ldmFsdWF0ZSA9IHJ1bGUuY29udGV4dDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocnVsZS5ldmFsdWF0ZSkge1xuICAgICAgICAgICAgbmV3UnVsZS5ldmFsdWF0ZSA9IHBhcnNlKHJ1bGUuZXZhbHVhdGUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpc0Fzc29jaWF0aXZlKG5ld1J1bGUubCkpIHtcbiAgICAgICAgICAgIHZhciBtYWtlTm9kZSA9IGNyZWF0ZU1ha2VOb2RlRnVuY3Rpb24obmV3UnVsZS5sKTtcblxuICAgICAgICAgICAgdmFyIGV4cGFuZHN5bSA9IF9nZXRFeHBhbmRQbGFjZWhvbGRlclN5bWJvbCgpO1xuXG4gICAgICAgICAgICBuZXdSdWxlLmV4cGFuZGVkID0ge307XG4gICAgICAgICAgICBuZXdSdWxlLmV4cGFuZGVkLmwgPSBtYWtlTm9kZShbbmV3UnVsZS5sLmNsb25lKCksIGV4cGFuZHN5bV0pOyAvLyBQdXNoIHRoZSBleHBhbmRzeW0gaW50byB0aGUgZGVlcGVzdCBwb3NzaWJsZSBicmFuY2guXG4gICAgICAgICAgICAvLyBUaGlzIGhlbHBzIHRvIG1hdGNoIHRoZSBuZXdSdWxlIGFnYWluc3Qgbm9kZXMgcmV0dXJuZWQgZnJvbSBnZXRTcGxpdHMoKSBsYXRlciBvbi5cblxuICAgICAgICAgICAgZmxhdHRlbihuZXdSdWxlLmV4cGFuZGVkLmwpO1xuICAgICAgICAgICAgdW5mbGF0dGVucihuZXdSdWxlLmV4cGFuZGVkLmwpO1xuICAgICAgICAgICAgbmV3UnVsZS5leHBhbmRlZC5yID0gbWFrZU5vZGUoW25ld1J1bGUuciwgZXhwYW5kc3ltXSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgICAgIG5ld1J1bGUgPSBydWxlO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgVHlwZUVycm9yKCdVbnN1cHBvcnRlZCB0eXBlIG9mIHJ1bGU6ICcgKyBydWxlVHlwZSk7XG4gICAgICB9IC8vIGNvbnNvbGUubG9nKCdBZGRpbmcgcnVsZTogJyArIHJ1bGVzW2ldKVxuICAgICAgLy8gY29uc29sZS5sb2cobmV3UnVsZSlcblxuXG4gICAgICBydWxlU2V0LnB1c2gobmV3UnVsZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJ1bGVTZXQ7XG4gIH1cblxuICB2YXIgX2xhc3RzeW0gPSAwO1xuXG4gIGZ1bmN0aW9uIF9nZXRFeHBhbmRQbGFjZWhvbGRlclN5bWJvbCgpIHtcbiAgICByZXR1cm4gbmV3IFN5bWJvbE5vZGUoJ19wJyArIF9sYXN0c3ltKyspO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc2ltcGxmaWVkIGZvcm0gb2Ygbm9kZSwgb3IgdGhlIG9yaWdpbmFsIG5vZGUgaWYgbm8gc2ltcGxpZmljYXRpb24gd2FzIHBvc3NpYmxlLlxuICAgKlxuICAgKiBAcGFyYW0gIHtDb25zdGFudE5vZGUgfCBTeW1ib2xOb2RlIHwgUGFyZW50aGVzaXNOb2RlIHwgRnVuY3Rpb25Ob2RlIHwgT3BlcmF0b3JOb2RlfSBub2RlXG4gICAqIEByZXR1cm4ge0NvbnN0YW50Tm9kZSB8IFN5bWJvbE5vZGUgfCBQYXJlbnRoZXNpc05vZGUgfCBGdW5jdGlvbk5vZGUgfCBPcGVyYXRvck5vZGV9IFRoZSBzaW1wbGlmaWVkIGZvcm0gb2YgYGV4cHJgLCBvciB0aGUgb3JpZ2luYWwgbm9kZSBpZiBubyBzaW1wbGlmaWNhdGlvbiB3YXMgcG9zc2libGUuXG4gICAqL1xuXG5cbiAgdmFyIGFwcGx5UnVsZSA9IHR5cGVkKCdhcHBseVJ1bGUnLCB7XG4gICAgJ05vZGUsIE9iamVjdCc6IGZ1bmN0aW9uIE5vZGVPYmplY3Qobm9kZSwgcnVsZSkge1xuICAgICAgLy8gY29uc29sZS5sb2coJ0VudGVyaW5nIGFwcGx5UnVsZSgnICsgbm9kZS50b1N0cmluZygpICsgJyknKVxuICAgICAgLy8gRG8gbm90IGNsb25lIG5vZGUgdW5sZXNzIHdlIGZpbmQgYSBtYXRjaFxuICAgICAgdmFyIHJlcyA9IG5vZGU7IC8vIEZpcnN0IHJlcGxhY2Ugb3VyIGNoaWxkIG5vZGVzIHdpdGggdGhlaXIgc2ltcGxpZmllZCB2ZXJzaW9uc1xuICAgICAgLy8gSWYgYSBjaGlsZCBjb3VsZCBub3QgYmUgc2ltcGxpZmllZCwgdGhlIGFzc2lnbm1lbnRzIHdpbGwgaGF2ZVxuICAgICAgLy8gbm8gZWZmZWN0IHNpbmNlIHRoZSBub2RlIGlzIHJldHVybmVkIHVuY2hhbmdlZFxuXG4gICAgICBpZiAocmVzIGluc3RhbmNlb2YgT3BlcmF0b3JOb2RlIHx8IHJlcyBpbnN0YW5jZW9mIEZ1bmN0aW9uTm9kZSkge1xuICAgICAgICBpZiAocmVzLmFyZ3MpIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlcy5hcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICByZXMuYXJnc1tpXSA9IGFwcGx5UnVsZShyZXMuYXJnc1tpXSwgcnVsZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHJlcyBpbnN0YW5jZW9mIFBhcmVudGhlc2lzTm9kZSkge1xuICAgICAgICBpZiAocmVzLmNvbnRlbnQpIHtcbiAgICAgICAgICByZXMuY29udGVudCA9IGFwcGx5UnVsZShyZXMuY29udGVudCwgcnVsZSk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gVHJ5IHRvIG1hdGNoIGEgcnVsZSBhZ2FpbnN0IHRoaXMgbm9kZVxuXG5cbiAgICAgIHZhciByZXBsID0gcnVsZS5yO1xuXG4gICAgICB2YXIgbWF0Y2hlcyA9IF9ydWxlTWF0Y2gocnVsZS5sLCByZXMpWzBdOyAvLyBJZiB0aGUgcnVsZSBpcyBhc3NvY2lhdGl2ZSBvcGVyYXRvciwgd2UgY2FuIHRyeSBtYXRjaGluZyBpdCB3aGlsZSBhbGxvd2luZyBhZGRpdGlvbmFsIHRlcm1zLlxuICAgICAgLy8gVGhpcyBhbGxvd3MgdXMgdG8gbWF0Y2ggcnVsZXMgbGlrZSAnbituJyB0byB0aGUgZXhwcmVzc2lvbiAnKDEreCkreCcgb3IgZXZlbiAneCsxK3gnIGlmIHRoZSBvcGVyYXRvciBpcyBjb21tdXRhdGl2ZS5cblxuXG4gICAgICBpZiAoIW1hdGNoZXMgJiYgcnVsZS5leHBhbmRlZCkge1xuICAgICAgICByZXBsID0gcnVsZS5leHBhbmRlZC5yO1xuICAgICAgICBtYXRjaGVzID0gX3J1bGVNYXRjaChydWxlLmV4cGFuZGVkLmwsIHJlcylbMF07XG4gICAgICB9XG5cbiAgICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICAgIC8vIGNvbnN0IGJlZm9yZSA9IHJlcy50b1N0cmluZyh7cGFyZW50aGVzaXM6ICdhbGwnfSlcbiAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IG5vZGUgYnkgY2xvbmluZyB0aGUgcmhzIG9mIHRoZSBtYXRjaGVkIHJ1bGVcbiAgICAgICAgLy8gd2Uga2VlcCBhbnkgaW1wbGljaXQgbXVsdGlwbGljYXRpb24gc3RhdGUgaWYgcmVsZXZhbnRcbiAgICAgICAgdmFyIGltcGxpY2l0ID0gcmVzLmltcGxpY2l0O1xuICAgICAgICByZXMgPSByZXBsLmNsb25lKCk7XG5cbiAgICAgICAgaWYgKGltcGxpY2l0ICYmICdpbXBsaWNpdCcgaW4gcmVwbCkge1xuICAgICAgICAgIHJlcy5pbXBsaWNpdCA9IHRydWU7XG4gICAgICAgIH0gLy8gUmVwbGFjZSBwbGFjZWhvbGRlcnMgd2l0aCB0aGVpciByZXNwZWN0aXZlIG5vZGVzIHdpdGhvdXQgdHJhdmVyc2luZyBkZWVwZXIgaW50byB0aGUgcmVwbGFjZWQgbm9kZXNcblxuXG4gICAgICAgIHJlcyA9IHJlcy50cmFuc2Zvcm0oZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICBpZiAobm9kZS5pc1N5bWJvbE5vZGUgJiYgKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKG1hdGNoZXMucGxhY2Vob2xkZXJzLCBub2RlLm5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hlcy5wbGFjZWhvbGRlcnNbbm9kZS5uYW1lXS5jbG9uZSgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pOyAvLyBjb25zdCBhZnRlciA9IHJlcy50b1N0cmluZyh7cGFyZW50aGVzaXM6ICdhbGwnfSlcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ1NpbXBsaWZpZWQgJyArIGJlZm9yZSArICcgdG8gJyArIGFmdGVyKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBHZXQgKGJpbmFyeSkgY29tYmluYXRpb25zIG9mIGEgZmxhdHRlbmVkIGJpbmFyeSBub2RlXG4gICAqIGUuZy4gKyhub2RlMSwgbm9kZTIsIG5vZGUzKSAtPiBbXG4gICAqICAgICAgICArKG5vZGUxLCAgKyhub2RlMiwgbm9kZTMpKSxcbiAgICogICAgICAgICsobm9kZTIsICArKG5vZGUxLCBub2RlMykpLFxuICAgKiAgICAgICAgKyhub2RlMywgICsobm9kZTEsIG5vZGUyKSldXG4gICAqXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGdldFNwbGl0cyhub2RlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIHZhciByaWdodCwgcmlnaHRBcmdzO1xuICAgIHZhciBtYWtlTm9kZSA9IGNyZWF0ZU1ha2VOb2RlRnVuY3Rpb24obm9kZSk7XG5cbiAgICBpZiAoaXNDb21tdXRhdGl2ZShub2RlLCBjb250ZXh0KSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmlnaHRBcmdzID0gbm9kZS5hcmdzLnNsaWNlKDApO1xuICAgICAgICByaWdodEFyZ3Muc3BsaWNlKGksIDEpO1xuICAgICAgICByaWdodCA9IHJpZ2h0QXJncy5sZW5ndGggPT09IDEgPyByaWdodEFyZ3NbMF0gOiBtYWtlTm9kZShyaWdodEFyZ3MpO1xuICAgICAgICByZXMucHVzaChtYWtlTm9kZShbbm9kZS5hcmdzW2ldLCByaWdodF0pKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmlnaHRBcmdzID0gbm9kZS5hcmdzLnNsaWNlKDEpO1xuICAgICAgcmlnaHQgPSByaWdodEFyZ3MubGVuZ3RoID09PSAxID8gcmlnaHRBcmdzWzBdIDogbWFrZU5vZGUocmlnaHRBcmdzKTtcbiAgICAgIHJlcy5wdXNoKG1ha2VOb2RlKFtub2RlLmFyZ3NbMF0sIHJpZ2h0XSkpO1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHNldCB1bmlvbiBvZiB0d28gbWF0Y2gtcGxhY2Vob2xkZXJzIG9yIG51bGwgaWYgdGhlcmUgaXMgYSBjb25mbGljdC5cbiAgICovXG5cblxuICBmdW5jdGlvbiBtZXJnZU1hdGNoKG1hdGNoMSwgbWF0Y2gyKSB7XG4gICAgdmFyIHJlcyA9IHtcbiAgICAgIHBsYWNlaG9sZGVyczoge31cbiAgICB9OyAvLyBTb21lIG1hdGNoZXMgbWF5IG5vdCBoYXZlIHBsYWNlaG9sZGVyczsgdGhpcyBpcyBPS1xuXG4gICAgaWYgKCFtYXRjaDEucGxhY2Vob2xkZXJzICYmICFtYXRjaDIucGxhY2Vob2xkZXJzKSB7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0gZWxzZSBpZiAoIW1hdGNoMS5wbGFjZWhvbGRlcnMpIHtcbiAgICAgIHJldHVybiBtYXRjaDI7XG4gICAgfSBlbHNlIGlmICghbWF0Y2gyLnBsYWNlaG9sZGVycykge1xuICAgICAgcmV0dXJuIG1hdGNoMTtcbiAgICB9IC8vIFBsYWNlaG9sZGVycyB3aXRoIHRoZSBzYW1lIGtleSBtdXN0IG1hdGNoIGV4YWN0bHlcblxuXG4gICAgZm9yICh2YXIga2V5IGluIG1hdGNoMS5wbGFjZWhvbGRlcnMpIHtcbiAgICAgIHJlcy5wbGFjZWhvbGRlcnNba2V5XSA9IG1hdGNoMS5wbGFjZWhvbGRlcnNba2V5XTtcblxuICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShtYXRjaDIucGxhY2Vob2xkZXJzLCBrZXkpKSB7XG4gICAgICAgIGlmICghX2V4YWN0TWF0Y2gobWF0Y2gxLnBsYWNlaG9sZGVyc1trZXldLCBtYXRjaDIucGxhY2Vob2xkZXJzW2tleV0pKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBfa2V5IGluIG1hdGNoMi5wbGFjZWhvbGRlcnMpIHtcbiAgICAgIHJlcy5wbGFjZWhvbGRlcnNbX2tleV0gPSBtYXRjaDIucGxhY2Vob2xkZXJzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgLyoqXG4gICAqIENvbWJpbmUgdHdvIGxpc3RzIG9mIG1hdGNoZXMgYnkgYXBwbHlpbmcgbWVyZ2VNYXRjaCB0byB0aGUgY2FydGVzaWFuIHByb2R1Y3Qgb2YgdHdvIGxpc3RzIG9mIG1hdGNoZXMuXG4gICAqIEVhY2ggbGlzdCByZXByZXNlbnRzIG1hdGNoZXMgZm91bmQgaW4gb25lIGNoaWxkIG9mIGEgbm9kZS5cbiAgICovXG5cblxuICBmdW5jdGlvbiBjb21iaW5lQ2hpbGRNYXRjaGVzKGxpc3QxLCBsaXN0Mikge1xuICAgIHZhciByZXMgPSBbXTtcblxuICAgIGlmIChsaXN0MS5sZW5ndGggPT09IDAgfHwgbGlzdDIubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIHZhciBtZXJnZWQ7XG5cbiAgICBmb3IgKHZhciBpMSA9IDA7IGkxIDwgbGlzdDEubGVuZ3RoOyBpMSsrKSB7XG4gICAgICBmb3IgKHZhciBpMiA9IDA7IGkyIDwgbGlzdDIubGVuZ3RoOyBpMisrKSB7XG4gICAgICAgIG1lcmdlZCA9IG1lcmdlTWF0Y2gobGlzdDFbaTFdLCBsaXN0MltpMl0pO1xuXG4gICAgICAgIGlmIChtZXJnZWQpIHtcbiAgICAgICAgICByZXMucHVzaChtZXJnZWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICAvKipcbiAgICogQ29tYmluZSBtdWx0aXBsZSBsaXN0cyBvZiBtYXRjaGVzIGJ5IGFwcGx5aW5nIG1lcmdlTWF0Y2ggdG8gdGhlIGNhcnRlc2lhbiBwcm9kdWN0IG9mIHR3byBsaXN0cyBvZiBtYXRjaGVzLlxuICAgKiBFYWNoIGxpc3QgcmVwcmVzZW50cyBtYXRjaGVzIGZvdW5kIGluIG9uZSBjaGlsZCBvZiBhIG5vZGUuXG4gICAqIFJldHVybnMgYSBsaXN0IG9mIHVuaXF1ZSBtYXRjaGVzLlxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIG1lcmdlQ2hpbGRNYXRjaGVzKGNoaWxkTWF0Y2hlcykge1xuICAgIGlmIChjaGlsZE1hdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gY2hpbGRNYXRjaGVzO1xuICAgIH1cblxuICAgIHZhciBzZXRzID0gY2hpbGRNYXRjaGVzLnJlZHVjZShjb21iaW5lQ2hpbGRNYXRjaGVzKTtcbiAgICB2YXIgdW5pcXVlU2V0cyA9IFtdO1xuICAgIHZhciB1bmlxdWUgPSB7fTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2V0cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHMgPSBKU09OLnN0cmluZ2lmeShzZXRzW2ldKTtcblxuICAgICAgaWYgKCF1bmlxdWVbc10pIHtcbiAgICAgICAgdW5pcXVlW3NdID0gdHJ1ZTtcbiAgICAgICAgdW5pcXVlU2V0cy5wdXNoKHNldHNbaV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmlxdWVTZXRzO1xuICB9XG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgbm9kZSBtYXRjaGVzIHJ1bGUuXG4gICAqXG4gICAqIEBwYXJhbSB7Q29uc3RhbnROb2RlIHwgU3ltYm9sTm9kZSB8IFBhcmVudGhlc2lzTm9kZSB8IEZ1bmN0aW9uTm9kZSB8IE9wZXJhdG9yTm9kZX0gcnVsZVxuICAgKiBAcGFyYW0ge0NvbnN0YW50Tm9kZSB8IFN5bWJvbE5vZGUgfCBQYXJlbnRoZXNpc05vZGUgfCBGdW5jdGlvbk5vZGUgfCBPcGVyYXRvck5vZGV9IG5vZGVcbiAgICogQHJldHVybiB7T2JqZWN0fSBJbmZvcm1hdGlvbiBhYm91dCB0aGUgbWF0Y2gsIGlmIGl0IGV4aXN0cy5cbiAgICovXG5cblxuICBmdW5jdGlvbiBfcnVsZU1hdGNoKHJ1bGUsIG5vZGUsIGlzU3BsaXQpIHtcbiAgICAvLyAgICBjb25zb2xlLmxvZygnRW50ZXJpbmcgX3J1bGVNYXRjaCgnICsgSlNPTi5zdHJpbmdpZnkocnVsZSkgKyAnLCAnICsgSlNPTi5zdHJpbmdpZnkobm9kZSkgKyAnKScpXG4gICAgLy8gICAgY29uc29sZS5sb2coJ3J1bGUgPSAnICsgcnVsZSlcbiAgICAvLyAgICBjb25zb2xlLmxvZygnbm9kZSA9ICcgKyBub2RlKVxuICAgIC8vICAgIGNvbnNvbGUubG9nKCdFbnRlcmluZyBfcnVsZU1hdGNoKCcgKyBydWxlLnRvU3RyaW5nKCkgKyAnLCAnICsgbm9kZS50b1N0cmluZygpICsgJyknKVxuICAgIHZhciByZXMgPSBbe1xuICAgICAgcGxhY2Vob2xkZXJzOiB7fVxuICAgIH1dO1xuXG4gICAgaWYgKHJ1bGUgaW5zdGFuY2VvZiBPcGVyYXRvck5vZGUgJiYgbm9kZSBpbnN0YW5jZW9mIE9wZXJhdG9yTm9kZSB8fCBydWxlIGluc3RhbmNlb2YgRnVuY3Rpb25Ob2RlICYmIG5vZGUgaW5zdGFuY2VvZiBGdW5jdGlvbk5vZGUpIHtcbiAgICAgIC8vIElmIHRoZSBydWxlIGlzIGFuIE9wZXJhdG9yTm9kZSBvciBhIEZ1bmN0aW9uTm9kZSwgdGhlbiBub2RlIG11c3QgbWF0Y2ggZXhhY3RseVxuICAgICAgaWYgKHJ1bGUgaW5zdGFuY2VvZiBPcGVyYXRvck5vZGUpIHtcbiAgICAgICAgaWYgKHJ1bGUub3AgIT09IG5vZGUub3AgfHwgcnVsZS5mbiAhPT0gbm9kZS5mbikge1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChydWxlIGluc3RhbmNlb2YgRnVuY3Rpb25Ob2RlKSB7XG4gICAgICAgIGlmIChydWxlLm5hbWUgIT09IG5vZGUubmFtZSkge1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBydWxlIGFuZCBub2RlIG1hdGNoLiBTZWFyY2ggdGhlIGNoaWxkcmVuIG9mIHJ1bGUgYW5kIG5vZGUuXG5cblxuICAgICAgaWYgKG5vZGUuYXJncy5sZW5ndGggPT09IDEgJiYgcnVsZS5hcmdzLmxlbmd0aCA9PT0gMSB8fCAhaXNBc3NvY2lhdGl2ZShub2RlKSB8fCBpc1NwbGl0KSB7XG4gICAgICAgIC8vIEV4cGVjdCBub24tYXNzb2NpYXRpdmUgb3BlcmF0b3JzIHRvIG1hdGNoIGV4YWN0bHlcbiAgICAgICAgdmFyIGNoaWxkTWF0Y2hlcyA9IFtdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZS5hcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGNoaWxkTWF0Y2ggPSBfcnVsZU1hdGNoKHJ1bGUuYXJnc1tpXSwgbm9kZS5hcmdzW2ldKTtcblxuICAgICAgICAgIGlmIChjaGlsZE1hdGNoLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgLy8gQ2hpbGQgZGlkIG5vdCBtYXRjaCwgc28gc3RvcCBzZWFyY2hpbmcgaW1tZWRpYXRlbHlcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICB9IC8vIFRoZSBjaGlsZCBtYXRjaGVkLCBzbyBhZGQgdGhlIGluZm9ybWF0aW9uIHJldHVybmVkIGZyb20gdGhlIGNoaWxkIHRvIG91ciByZXN1bHRcblxuXG4gICAgICAgICAgY2hpbGRNYXRjaGVzLnB1c2goY2hpbGRNYXRjaCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXMgPSBtZXJnZUNoaWxkTWF0Y2hlcyhjaGlsZE1hdGNoZXMpO1xuICAgICAgfSBlbHNlIGlmIChub2RlLmFyZ3MubGVuZ3RoID49IDIgJiYgcnVsZS5hcmdzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAvLyBub2RlIGlzIGZsYXR0ZW5lZCwgcnVsZSBpcyBub3RcbiAgICAgICAgLy8gQXNzb2NpYXRpdmUgb3BlcmF0b3JzL2Z1bmN0aW9ucyBjYW4gYmUgc3BsaXQgaW4gZGlmZmVyZW50IHdheXMgc28gd2UgY2hlY2sgaWYgdGhlIHJ1bGUgbWF0Y2hlcyBlYWNoXG4gICAgICAgIC8vIHRoZW0gYW5kIHJldHVybiB0aGVpciB1bmlvbi5cbiAgICAgICAgdmFyIHNwbGl0cyA9IGdldFNwbGl0cyhub2RlLCBydWxlLmNvbnRleHQpO1xuICAgICAgICB2YXIgc3BsaXRNYXRjaGVzID0gW107XG5cbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHNwbGl0cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICB2YXIgbWF0Y2hTZXQgPSBfcnVsZU1hdGNoKHJ1bGUsIHNwbGl0c1tfaV0sIHRydWUpOyAvLyByZWN1cnNpbmcgYXQgdGhlIHNhbWUgdHJlZSBkZXB0aCBoZXJlXG5cblxuICAgICAgICAgIHNwbGl0TWF0Y2hlcyA9IHNwbGl0TWF0Y2hlcy5jb25jYXQobWF0Y2hTZXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNwbGl0TWF0Y2hlcztcbiAgICAgIH0gZWxzZSBpZiAocnVsZS5hcmdzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ1VuZXhwZWN0ZWQgbm9uLWJpbmFyeSBhc3NvY2lhdGl2ZSBmdW5jdGlvbjogJyArIHJ1bGUudG9TdHJpbmcoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cyBpbiBydWxlIGFuZCBub2RlLCBzbyBubyBtYXRjaFxuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChydWxlIGluc3RhbmNlb2YgU3ltYm9sTm9kZSkge1xuICAgICAgLy8gSWYgdGhlIHJ1bGUgaXMgYSBTeW1ib2xOb2RlLCB0aGVuIGl0IGNhcnJpZXMgYSBzcGVjaWFsIG1lYW5pbmdcbiAgICAgIC8vIGFjY29yZGluZyB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBzeW1ib2wgbm9kZSBuYW1lLlxuICAgICAgLy8gYy4qIG1hdGNoZXMgYSBDb25zdGFudE5vZGVcbiAgICAgIC8vIG4uKiBtYXRjaGVzIGFueSBub2RlXG4gICAgICBpZiAocnVsZS5uYW1lLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N5bWJvbCBpbiBydWxlIGhhcyAwIGxlbmd0aC4uLiE/Jyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChTVVBQT1JURURfQ09OU1RBTlRTW3J1bGUubmFtZV0pIHtcbiAgICAgICAgLy8gYnVpbHQtaW4gY29uc3RhbnQgbXVzdCBtYXRjaCBleGFjdGx5XG4gICAgICAgIGlmIChydWxlLm5hbWUgIT09IG5vZGUubmFtZSkge1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChydWxlLm5hbWVbMF0gPT09ICduJyB8fCBydWxlLm5hbWUuc3Vic3RyaW5nKDAsIDIpID09PSAnX3AnKSB7XG4gICAgICAgIC8vIHJ1bGUgbWF0Y2hlcyBfYW55dGhpbmdfLCBzbyBhc3NpZ24gdGhpcyBub2RlIHRvIHRoZSBydWxlLm5hbWUgcGxhY2Vob2xkZXJcbiAgICAgICAgLy8gQXNzaWduIG5vZGUgdG8gdGhlIHJ1bGUubmFtZSBwbGFjZWhvbGRlci5cbiAgICAgICAgLy8gT3VyIHBhcmVudCB3aWxsIGNoZWNrIGZvciBtYXRjaGVzIGFtb25nIHBsYWNlaG9sZGVycy5cbiAgICAgICAgcmVzWzBdLnBsYWNlaG9sZGVyc1tydWxlLm5hbWVdID0gbm9kZTtcbiAgICAgIH0gZWxzZSBpZiAocnVsZS5uYW1lWzBdID09PSAndicpIHtcbiAgICAgICAgLy8gcnVsZSBtYXRjaGVzIGFueSB2YXJpYWJsZSB0aGluZyAobm90IGEgQ29uc3RhbnROb2RlKVxuICAgICAgICBpZiAoISgwLCBfaXMuaXNDb25zdGFudE5vZGUpKG5vZGUpKSB7XG4gICAgICAgICAgcmVzWzBdLnBsYWNlaG9sZGVyc1tydWxlLm5hbWVdID0gbm9kZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBNaXMtbWF0Y2g6IHJ1bGUgd2FzIGV4cGVjdGluZyBzb21ldGhpbmcgb3RoZXIgdGhhbiBhIENvbnN0YW50Tm9kZVxuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChydWxlLm5hbWVbMF0gPT09ICdjJykge1xuICAgICAgICAvLyBydWxlIG1hdGNoZXMgYW55IENvbnN0YW50Tm9kZVxuICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIENvbnN0YW50Tm9kZSkge1xuICAgICAgICAgIHJlc1swXS5wbGFjZWhvbGRlcnNbcnVsZS5uYW1lXSA9IG5vZGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gTWlzLW1hdGNoOiBydWxlIHdhcyBleHBlY3RpbmcgYSBDb25zdGFudE5vZGVcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzeW1ib2wgaW4gcnVsZTogJyArIHJ1bGUubmFtZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChydWxlIGluc3RhbmNlb2YgQ29uc3RhbnROb2RlKSB7XG4gICAgICAvLyBMaXRlcmFsIGNvbnN0YW50IG11c3QgbWF0Y2ggZXhhY3RseVxuICAgICAgaWYgKCFlcXVhbChydWxlLnZhbHVlLCBub2RlLnZhbHVlKSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNvbWUgb3RoZXIgbm9kZSB3YXMgZW5jb3VudGVyZWQgd2hpY2ggd2UgYXJlbid0IHByZXBhcmVkIGZvciwgc28gbm8gbWF0Y2hcbiAgICAgIHJldHVybiBbXTtcbiAgICB9IC8vIEl0J3MgYSBtYXRjaCFcbiAgICAvLyBjb25zb2xlLmxvZygnX3J1bGVNYXRjaCgnICsgcnVsZS50b1N0cmluZygpICsgJywgJyArIG5vZGUudG9TdHJpbmcoKSArICcpIGZvdW5kIGEgbWF0Y2gnKVxuXG5cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgcCBhbmQgcSAoYW5kIGFsbCB0aGVpciBjaGlsZHJlbiBub2RlcykgYXJlIGlkZW50aWNhbC5cbiAgICpcbiAgICogQHBhcmFtIHtDb25zdGFudE5vZGUgfCBTeW1ib2xOb2RlIHwgUGFyZW50aGVzaXNOb2RlIHwgRnVuY3Rpb25Ob2RlIHwgT3BlcmF0b3JOb2RlfSBwXG4gICAqIEBwYXJhbSB7Q29uc3RhbnROb2RlIHwgU3ltYm9sTm9kZSB8IFBhcmVudGhlc2lzTm9kZSB8IEZ1bmN0aW9uTm9kZSB8IE9wZXJhdG9yTm9kZX0gcVxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEluZm9ybWF0aW9uIGFib3V0IHRoZSBtYXRjaCwgaWYgaXQgZXhpc3RzLlxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9leGFjdE1hdGNoKHAsIHEpIHtcbiAgICBpZiAocCBpbnN0YW5jZW9mIENvbnN0YW50Tm9kZSAmJiBxIGluc3RhbmNlb2YgQ29uc3RhbnROb2RlKSB7XG4gICAgICBpZiAoIWVxdWFsKHAudmFsdWUsIHEudmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHAgaW5zdGFuY2VvZiBTeW1ib2xOb2RlICYmIHEgaW5zdGFuY2VvZiBTeW1ib2xOb2RlKSB7XG4gICAgICBpZiAocC5uYW1lICE9PSBxLm5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocCBpbnN0YW5jZW9mIE9wZXJhdG9yTm9kZSAmJiBxIGluc3RhbmNlb2YgT3BlcmF0b3JOb2RlIHx8IHAgaW5zdGFuY2VvZiBGdW5jdGlvbk5vZGUgJiYgcSBpbnN0YW5jZW9mIEZ1bmN0aW9uTm9kZSkge1xuICAgICAgaWYgKHAgaW5zdGFuY2VvZiBPcGVyYXRvck5vZGUpIHtcbiAgICAgICAgaWYgKHAub3AgIT09IHEub3AgfHwgcC5mbiAhPT0gcS5mbikge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChwIGluc3RhbmNlb2YgRnVuY3Rpb25Ob2RlKSB7XG4gICAgICAgIGlmIChwLm5hbWUgIT09IHEubmFtZSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocC5hcmdzLmxlbmd0aCAhPT0gcS5hcmdzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcC5hcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghX2V4YWN0TWF0Y2gocC5hcmdzW2ldLCBxLmFyZ3NbaV0pKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBzaW1wbGlmeTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTaW1wbGlmeSA9IGNyZWF0ZVNpbXBsaWZ5OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVSZXNvbHZlID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAncmVzb2x2ZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydwYXJzZScsICdGdW5jdGlvbk5vZGUnLCAnT3BlcmF0b3JOb2RlJywgJ1BhcmVudGhlc2lzTm9kZSddO1xudmFyIGNyZWF0ZVJlc29sdmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgcGFyc2UgPSBfcmVmLnBhcnNlLFxuICAgICAgRnVuY3Rpb25Ob2RlID0gX3JlZi5GdW5jdGlvbk5vZGUsXG4gICAgICBPcGVyYXRvck5vZGUgPSBfcmVmLk9wZXJhdG9yTm9kZSxcbiAgICAgIFBhcmVudGhlc2lzTm9kZSA9IF9yZWYuUGFyZW50aGVzaXNOb2RlO1xuXG4gIC8qKlxuICAgKiByZXNvbHZlKGV4cHIsIHNjb3BlKSByZXBsYWNlcyB2YXJpYWJsZSBub2RlcyB3aXRoIHRoZWlyIHNjb3BlZCB2YWx1ZXNcbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgc2ltcGxpZnkucmVzb2x2ZShleHByLCBzY29wZSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLnNpbXBsaWZ5LnJlc29sdmUoJ3ggKyB5Jywge3g6MSwgeToyfSkgICAgICAgICAgIC8vIE5vZGUgezEgKyAyfVxuICAgKiAgICAgbWF0aC5zaW1wbGlmeS5yZXNvbHZlKG1hdGgucGFyc2UoJ3greScpLCB7eDoxLCB5OjJ9KSAvLyBOb2RlIHsxICsgMn1cbiAgICogICAgIG1hdGguc2ltcGxpZnkoJ3greScsIHt4OjIsIHk6J3greCd9KS50b1N0cmluZygpICAgICAgLy8gXCI2XCJcbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqICAgICBUaGUgZXhwcmVzc2lvbiB0cmVlIHRvIGJlIHNpbXBsaWZpZWRcbiAgICogQHBhcmFtIHtPYmplY3R9IHNjb3BlIHdpdGggdmFyaWFibGVzIHRvIGJlIHJlc29sdmVkXG4gICAqL1xuICBmdW5jdGlvbiByZXNvbHZlKG5vZGUsIHNjb3BlKSB7XG4gICAgaWYgKCFzY29wZSkge1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfaXMuaXNTeW1ib2xOb2RlKShub2RlKSkge1xuICAgICAgdmFyIHZhbHVlID0gc2NvcGVbbm9kZS5uYW1lXTtcblxuICAgICAgaWYgKCgwLCBfaXMuaXNOb2RlKSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUodmFsdWUsIHNjb3BlKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICByZXR1cm4gcGFyc2UoU3RyaW5nKHZhbHVlKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzT3BlcmF0b3JOb2RlKShub2RlKSkge1xuICAgICAgdmFyIGFyZ3MgPSBub2RlLmFyZ3MubWFwKGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUoYXJnLCBzY29wZSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5vZGUub3AsIG5vZGUuZm4sIGFyZ3MsIG5vZGUuaW1wbGljaXQpO1xuICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc1BhcmVudGhlc2lzTm9kZSkobm9kZSkpIHtcbiAgICAgIHJldHVybiBuZXcgUGFyZW50aGVzaXNOb2RlKHJlc29sdmUobm9kZS5jb250ZW50LCBzY29wZSkpO1xuICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc0Z1bmN0aW9uTm9kZSkobm9kZSkpIHtcbiAgICAgIHZhciBfYXJncyA9IG5vZGUuYXJncy5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZShhcmcsIHNjb3BlKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uTm9kZShub2RlLm5hbWUsIF9hcmdzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIHJldHVybiByZXNvbHZlO1xufSk7XG5leHBvcnRzLmNyZWF0ZVJlc29sdmUgPSBjcmVhdGVSZXNvbHZlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTaW1wbGlmeUNvbnN0YW50ID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF91dGlsID0gcmVxdWlyZShcIi4vdXRpbFwiKTtcblxudmFyIF9ub29wID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL25vb3BcIik7XG5cbi8vIFRPRE8gdGhpcyBjb3VsZCBiZSBpbXByb3ZlZCBieSBzaW1wbGlmeWluZyBzZXBlcmF0ZWQgY29uc3RhbnRzIHVuZGVyIGFzc29jaWF0aXZlIGFuZCBjb21tdXRhdGl2ZSBvcGVyYXRvcnNcbnZhciBuYW1lID0gJ3NpbXBsaWZ5Q29uc3RhbnQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ21hdGhXaXRoVHJhbnNmb3JtJywgJz9mcmFjdGlvbicsICc/YmlnbnVtYmVyJywgJ0NvbnN0YW50Tm9kZScsICdPcGVyYXRvck5vZGUnLCAnRnVuY3Rpb25Ob2RlJywgJ1N5bWJvbE5vZGUnXTtcbnZhciBjcmVhdGVTaW1wbGlmeUNvbnN0YW50ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgbWF0aFdpdGhUcmFuc2Zvcm0gPSBfcmVmLm1hdGhXaXRoVHJhbnNmb3JtLFxuICAgICAgZnJhY3Rpb24gPSBfcmVmLmZyYWN0aW9uLFxuICAgICAgYmlnbnVtYmVyID0gX3JlZi5iaWdudW1iZXIsXG4gICAgICBDb25zdGFudE5vZGUgPSBfcmVmLkNvbnN0YW50Tm9kZSxcbiAgICAgIE9wZXJhdG9yTm9kZSA9IF9yZWYuT3BlcmF0b3JOb2RlLFxuICAgICAgRnVuY3Rpb25Ob2RlID0gX3JlZi5GdW5jdGlvbk5vZGUsXG4gICAgICBTeW1ib2xOb2RlID0gX3JlZi5TeW1ib2xOb2RlO1xuXG4gIHZhciBfY3JlYXRlVXRpbCA9ICgwLCBfdXRpbC5jcmVhdGVVdGlsKSh7XG4gICAgRnVuY3Rpb25Ob2RlOiBGdW5jdGlvbk5vZGUsXG4gICAgT3BlcmF0b3JOb2RlOiBPcGVyYXRvck5vZGUsXG4gICAgU3ltYm9sTm9kZTogU3ltYm9sTm9kZVxuICB9KSxcbiAgICAgIGlzQ29tbXV0YXRpdmUgPSBfY3JlYXRlVXRpbC5pc0NvbW11dGF0aXZlLFxuICAgICAgaXNBc3NvY2lhdGl2ZSA9IF9jcmVhdGVVdGlsLmlzQXNzb2NpYXRpdmUsXG4gICAgICBhbGxDaGlsZHJlbiA9IF9jcmVhdGVVdGlsLmFsbENoaWxkcmVuLFxuICAgICAgY3JlYXRlTWFrZU5vZGVGdW5jdGlvbiA9IF9jcmVhdGVVdGlsLmNyZWF0ZU1ha2VOb2RlRnVuY3Rpb247XG5cbiAgZnVuY3Rpb24gc2ltcGxpZnlDb25zdGFudChleHByLCBvcHRpb25zKSB7XG4gICAgdmFyIHJlcyA9IGZvbGRGcmFjdGlvbihleHByLCBvcHRpb25zKTtcbiAgICByZXR1cm4gKDAsIF9pcy5pc05vZGUpKHJlcykgPyByZXMgOiBfdG9Ob2RlKHJlcyk7XG4gIH1cblxuICBmdW5jdGlvbiBfZXZhbChmbm5hbWUsIGFyZ3MsIG9wdGlvbnMpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIF90b051bWJlcihtYXRoV2l0aFRyYW5zZm9ybVtmbm5hbWVdLmFwcGx5KG51bGwsIGFyZ3MpLCBvcHRpb25zKTtcbiAgICB9IGNhdGNoIChpZ25vcmUpIHtcbiAgICAgIC8vIHNvbWV0aW1lcyB0aGUgaW1wbGljaXQgdHlwZSBjb252ZXJzaW9uIGNhdXNlcyB0aGUgZXZhbHVhdGlvbiB0byBmYWlsLCBzbyB3ZSdsbCB0cnkgYWdhaW4gYWZ0ZXIgcmVtb3ZpbmcgRnJhY3Rpb25zXG4gICAgICBhcmdzID0gYXJncy5tYXAoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgaWYgKCgwLCBfaXMuaXNGcmFjdGlvbikoeCkpIHtcbiAgICAgICAgICByZXR1cm4geC52YWx1ZU9mKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4geDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIF90b051bWJlcihtYXRoV2l0aFRyYW5zZm9ybVtmbm5hbWVdLmFwcGx5KG51bGwsIGFyZ3MpLCBvcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICB2YXIgX3RvTm9kZSA9IHR5cGVkKHtcbiAgICBGcmFjdGlvbjogX2ZyYWN0aW9uVG9Ob2RlLFxuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKG4pIHtcbiAgICAgIGlmIChuIDwgMCkge1xuICAgICAgICByZXR1cm4gdW5hcnlNaW51c05vZGUobmV3IENvbnN0YW50Tm9kZSgtbikpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IENvbnN0YW50Tm9kZShuKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKG4pIHtcbiAgICAgIGlmIChuIDwgMCkge1xuICAgICAgICByZXR1cm4gdW5hcnlNaW51c05vZGUobmV3IENvbnN0YW50Tm9kZSgtbikpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IENvbnN0YW50Tm9kZShuKTsgLy8gb2xkIHBhcmFtZXRlcnM6IChuLnRvU3RyaW5nKCksICdudW1iZXInKVxuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleChzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IENvbXBsZXggbnVtYmVyIHRvIE5vZGUnKTtcbiAgICB9XG4gIH0pOyAvLyBjb252ZXJ0IGEgbnVtYmVyIHRvIGEgZnJhY3Rpb24gb25seSBpZiBpdCBjYW4gYmUgZXhwcmVzc2VkIGV4YWN0bHlcblxuXG4gIGZ1bmN0aW9uIF9leGFjdEZyYWN0aW9uKG4sIG9wdGlvbnMpIHtcbiAgICB2YXIgZXhhY3RGcmFjdGlvbnMgPSBvcHRpb25zICYmIG9wdGlvbnMuZXhhY3RGcmFjdGlvbnMgIT09IGZhbHNlO1xuXG4gICAgaWYgKGV4YWN0RnJhY3Rpb25zICYmIGlzRmluaXRlKG4pICYmIGZyYWN0aW9uKSB7XG4gICAgICB2YXIgZiA9IGZyYWN0aW9uKG4pO1xuXG4gICAgICBpZiAoZi52YWx1ZU9mKCkgPT09IG4pIHtcbiAgICAgICAgcmV0dXJuIGY7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG47XG4gIH0gLy8gQ29udmVydCBudW1iZXJzIHRvIGEgcHJlZmVycmVkIG51bWJlciB0eXBlIGluIHByZWZlcmVuY2Ugb3JkZXI6IEZyYWN0aW9uLCBudW1iZXIsIENvbXBsZXhcbiAgLy8gQmlnTnVtYmVycyBhcmUgbGVmdCBhbG9uZVxuXG5cbiAgdmFyIF90b051bWJlciA9IHR5cGVkKHtcbiAgICAnc3RyaW5nLCBPYmplY3QnOiBmdW5jdGlvbiBzdHJpbmdPYmplY3Qocywgb3B0aW9ucykge1xuICAgICAgaWYgKGNvbmZpZy5udW1iZXIgPT09ICdCaWdOdW1iZXInKSB7XG4gICAgICAgIGlmIChiaWdudW1iZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICgwLCBfbm9vcC5ub0JpZ251bWJlcikoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBiaWdudW1iZXIocyk7XG4gICAgICB9IGVsc2UgaWYgKGNvbmZpZy5udW1iZXIgPT09ICdGcmFjdGlvbicpIHtcbiAgICAgICAgaWYgKGZyYWN0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAoMCwgX25vb3Aubm9GcmFjdGlvbikoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmcmFjdGlvbihzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBuID0gcGFyc2VGbG9hdChzKTtcbiAgICAgICAgcmV0dXJuIF9leGFjdEZyYWN0aW9uKG4sIG9wdGlvbnMpO1xuICAgICAgfVxuICAgIH0sXG4gICAgJ0ZyYWN0aW9uLCBPYmplY3QnOiBmdW5jdGlvbiBGcmFjdGlvbk9iamVjdChzLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gcztcbiAgICB9LFxuICAgIC8vIHdlIGRvbid0IG5lZWQgb3B0aW9ucyBoZXJlXG4gICAgJ0JpZ051bWJlciwgT2JqZWN0JzogZnVuY3Rpb24gQmlnTnVtYmVyT2JqZWN0KHMsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBzO1xuICAgIH0sXG4gICAgLy8gd2UgZG9uJ3QgbmVlZCBvcHRpb25zIGhlcmVcbiAgICAnbnVtYmVyLCBPYmplY3QnOiBmdW5jdGlvbiBudW1iZXJPYmplY3Qocywgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIF9leGFjdEZyYWN0aW9uKHMsIG9wdGlvbnMpO1xuICAgIH0sXG4gICAgJ0NvbXBsZXgsIE9iamVjdCc6IGZ1bmN0aW9uIENvbXBsZXhPYmplY3Qocywgb3B0aW9ucykge1xuICAgICAgaWYgKHMuaW0gIT09IDApIHtcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfZXhhY3RGcmFjdGlvbihzLnJlLCBvcHRpb25zKTtcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIHVuYXJ5TWludXNOb2RlKG4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yTm9kZSgnLScsICd1bmFyeU1pbnVzJywgW25dKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9mcmFjdGlvblRvTm9kZShmKSB7XG4gICAgdmFyIG47XG4gICAgdmFyIHZuID0gZi5zICogZi5uO1xuXG4gICAgaWYgKHZuIDwgMCkge1xuICAgICAgbiA9IG5ldyBPcGVyYXRvck5vZGUoJy0nLCAndW5hcnlNaW51cycsIFtuZXcgQ29uc3RhbnROb2RlKC12bildKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbiA9IG5ldyBDb25zdGFudE5vZGUodm4pO1xuICAgIH1cblxuICAgIGlmIChmLmQgPT09IDEpIHtcbiAgICAgIHJldHVybiBuO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKCcvJywgJ2RpdmlkZScsIFtuLCBuZXcgQ29uc3RhbnROb2RlKGYuZCldKTtcbiAgfVxuICAvKlxuICAgKiBDcmVhdGUgYSBiaW5hcnkgdHJlZSBmcm9tIGEgbGlzdCBvZiBGcmFjdGlvbnMgYW5kIE5vZGVzLlxuICAgKiBUcmllcyB0byBmb2xkIEZyYWN0aW9ucyBieSBldmFsdWF0aW5nIHRoZW0gdW50aWwgdGhlIGZpcnN0IE5vZGUgaW4gdGhlIGxpc3QgaXMgaGl0LCBzb1xuICAgKiBgYXJnc2Agc2hvdWxkIGJlIHNvcnRlZCB0byBoYXZlIHRoZSBGcmFjdGlvbnMgYXQgdGhlIHN0YXJ0IChpZiB0aGUgb3BlcmF0b3IgaXMgY29tbXV0YXRpdmUpLlxuICAgKiBAcGFyYW0gYXJncyAtIGxpc3Qgb2YgRnJhY3Rpb25zIGFuZCBOb2Rlc1xuICAgKiBAcGFyYW0gZm4gLSBldmFsdWF0b3IgZm9yIHRoZSBiaW5hcnkgb3BlcmF0aW9uIGV2YWx1YXRvciB0aGF0IGFjY2VwdHMgdHdvIEZyYWN0aW9uc1xuICAgKiBAcGFyYW0gbWFrZU5vZGUgLSBjcmVhdGVzIGEgYmluYXJ5IE9wZXJhdG9yTm9kZS9GdW5jdGlvbk5vZGUgZnJvbSBhIGxpc3Qgb2YgY2hpbGQgTm9kZXNcbiAgICogaWYgYXJncy5sZW5ndGggaXMgMSwgcmV0dXJucyBhcmdzWzBdXG4gICAqIEByZXR1cm4gLSBFaXRoZXIgYSBOb2RlIHJlcHJlc2VudGluZyBhIGJpbmFyeSBleHByZXNzaW9uIG9yIEZyYWN0aW9uXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gZm9sZE9wKGZuLCBhcmdzLCBtYWtlTm9kZSwgb3B0aW9ucykge1xuICAgIHJldHVybiBhcmdzLnJlZHVjZShmdW5jdGlvbiAoYSwgYikge1xuICAgICAgaWYgKCEoMCwgX2lzLmlzTm9kZSkoYSkgJiYgISgwLCBfaXMuaXNOb2RlKShiKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBfZXZhbChmbiwgW2EsIGJdLCBvcHRpb25zKTtcbiAgICAgICAgfSBjYXRjaCAoaWdub3JlYW5kY29udGludWUpIHt9XG5cbiAgICAgICAgYSA9IF90b05vZGUoYSk7XG4gICAgICAgIGIgPSBfdG9Ob2RlKGIpO1xuICAgICAgfSBlbHNlIGlmICghKDAsIF9pcy5pc05vZGUpKGEpKSB7XG4gICAgICAgIGEgPSBfdG9Ob2RlKGEpO1xuICAgICAgfSBlbHNlIGlmICghKDAsIF9pcy5pc05vZGUpKGIpKSB7XG4gICAgICAgIGIgPSBfdG9Ob2RlKGIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbWFrZU5vZGUoW2EsIGJdKTtcbiAgICB9KTtcbiAgfSAvLyBkZXN0cm95cyB0aGUgb3JpZ2luYWwgbm9kZSBhbmQgcmV0dXJucyBhIGZvbGRlZCBvbmVcblxuXG4gIGZ1bmN0aW9uIGZvbGRGcmFjdGlvbihub2RlLCBvcHRpb25zKSB7XG4gICAgc3dpdGNoIChub2RlLnR5cGUpIHtcbiAgICAgIGNhc2UgJ1N5bWJvbE5vZGUnOlxuICAgICAgICByZXR1cm4gbm9kZTtcblxuICAgICAgY2FzZSAnQ29uc3RhbnROb2RlJzpcbiAgICAgICAgaWYgKHR5cGVvZiBub2RlLnZhbHVlID09PSAnbnVtYmVyJyB8fCAhaXNOYU4obm9kZS52YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gX3RvTnVtYmVyKG5vZGUudmFsdWUsIG9wdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vZGU7XG5cbiAgICAgIGNhc2UgJ0Z1bmN0aW9uTm9kZSc6XG4gICAgICAgIGlmIChtYXRoV2l0aFRyYW5zZm9ybVtub2RlLm5hbWVdICYmIG1hdGhXaXRoVHJhbnNmb3JtW25vZGUubmFtZV0ucmF3QXJncykge1xuICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9XG5cbiAgICAgICAge1xuICAgICAgICAgIC8vIFByb2Nlc3Mgb3BlcmF0b3JzIGFzIE9wZXJhdG9yTm9kZVxuICAgICAgICAgIHZhciBvcGVyYXRvckZ1bmN0aW9ucyA9IFsnYWRkJywgJ211bHRpcGx5J107XG5cbiAgICAgICAgICBpZiAob3BlcmF0b3JGdW5jdGlvbnMuaW5kZXhPZihub2RlLm5hbWUpID09PSAtMSkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBub2RlLmFyZ3MubWFwKGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZvbGRGcmFjdGlvbihhcmcsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfSk7IC8vIElmIGFsbCBhcmdzIGFyZSBudW1iZXJzXG5cbiAgICAgICAgICAgIGlmICghYXJncy5zb21lKF9pcy5pc05vZGUpKSB7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9ldmFsKG5vZGUubmFtZSwgYXJncywgb3B0aW9ucyk7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGlnbm9yZWFuZGNvbnRpbmUpIHt9XG4gICAgICAgICAgICB9IC8vIENvbnZlcnQgYWxsIGFyZ3MgdG8gbm9kZXMgYW5kIGNvbnN0cnVjdCBhIHN5bWJvbGljIGZ1bmN0aW9uIGNhbGxcblxuXG4gICAgICAgICAgICBhcmdzID0gYXJncy5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgICAgICAgICAgICByZXR1cm4gKDAsIF9pcy5pc05vZGUpKGFyZykgPyBhcmcgOiBfdG9Ob2RlKGFyZyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRnVuY3Rpb25Ob2RlKG5vZGUubmFtZSwgYXJncyk7XG4gICAgICAgICAgfSBlbHNlIHsvLyB0cmVhdCBhcyBvcGVyYXRvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG5cbiAgICAgIGNhc2UgJ09wZXJhdG9yTm9kZSc6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgZm4gPSBub2RlLmZuLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICB2YXIgX2FyZ3M7XG5cbiAgICAgICAgICB2YXIgcmVzO1xuICAgICAgICAgIHZhciBtYWtlTm9kZSA9IGNyZWF0ZU1ha2VOb2RlRnVuY3Rpb24obm9kZSk7XG5cbiAgICAgICAgICBpZiAoKDAsIF9pcy5pc09wZXJhdG9yTm9kZSkobm9kZSkgJiYgbm9kZS5pc1VuYXJ5KCkpIHtcbiAgICAgICAgICAgIF9hcmdzID0gW2ZvbGRGcmFjdGlvbihub2RlLmFyZ3NbMF0sIG9wdGlvbnMpXTtcblxuICAgICAgICAgICAgaWYgKCEoMCwgX2lzLmlzTm9kZSkoX2FyZ3NbMF0pKSB7XG4gICAgICAgICAgICAgIHJlcyA9IF9ldmFsKGZuLCBfYXJncywgb3B0aW9ucyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXMgPSBtYWtlTm9kZShfYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChpc0Fzc29jaWF0aXZlKG5vZGUpKSB7XG4gICAgICAgICAgICBfYXJncyA9IGFsbENoaWxkcmVuKG5vZGUpO1xuICAgICAgICAgICAgX2FyZ3MgPSBfYXJncy5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgICAgICAgICAgICByZXR1cm4gZm9sZEZyYWN0aW9uKGFyZywgb3B0aW9ucyk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGlzQ29tbXV0YXRpdmUoZm4pKSB7XG4gICAgICAgICAgICAgIC8vIGNvbW11dGF0aXZlIGJpbmFyeSBvcGVyYXRvclxuICAgICAgICAgICAgICB2YXIgY29uc3RzID0gW107XG4gICAgICAgICAgICAgIHZhciB2YXJzID0gW107XG5cbiAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICghKDAsIF9pcy5pc05vZGUpKF9hcmdzW2ldKSkge1xuICAgICAgICAgICAgICAgICAgY29uc3RzLnB1c2goX2FyZ3NbaV0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB2YXJzLnB1c2goX2FyZ3NbaV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChjb25zdHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIHJlcyA9IGZvbGRPcChmbiwgY29uc3RzLCBtYWtlTm9kZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgdmFycy51bnNoaWZ0KHJlcyk7XG4gICAgICAgICAgICAgICAgcmVzID0gZm9sZE9wKGZuLCB2YXJzLCBtYWtlTm9kZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gd2Ugd29uJ3QgY2hhbmdlIHRoZSBjaGlsZHJlbiBvcmRlciBzaW5jZSBpdCdzIG5vdCBuZWNjZXNzYXJ5XG4gICAgICAgICAgICAgICAgcmVzID0gZm9sZE9wKGZuLCBfYXJncywgbWFrZU5vZGUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBub24tY29tbXV0YXRpdmUgYmluYXJ5IG9wZXJhdG9yXG4gICAgICAgICAgICAgIHJlcyA9IGZvbGRPcChmbiwgX2FyZ3MsIG1ha2VOb2RlLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gbm9uLWFzc29jaWF0aXZlIGJpbmFyeSBvcGVyYXRvclxuICAgICAgICAgICAgX2FyZ3MgPSBub2RlLmFyZ3MubWFwKGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZvbGRGcmFjdGlvbihhcmcsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXMgPSBmb2xkT3AoZm4sIF9hcmdzLCBtYWtlTm9kZSwgb3B0aW9ucyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlICdQYXJlbnRoZXNpc05vZGUnOlxuICAgICAgICAvLyByZW1vdmUgdGhlIHVuZWNjZXNzYXJ5IHBhcmVudGhlc2lzXG4gICAgICAgIHJldHVybiBmb2xkRnJhY3Rpb24obm9kZS5jb250ZW50LCBvcHRpb25zKTtcblxuICAgICAgY2FzZSAnQWNjZXNzb3JOb2RlJzpcbiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cblxuICAgICAgY2FzZSAnQXJyYXlOb2RlJzpcbiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cblxuICAgICAgY2FzZSAnQXNzaWdubWVudE5vZGUnOlxuICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuXG4gICAgICBjYXNlICdCbG9ja05vZGUnOlxuICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuXG4gICAgICBjYXNlICdGdW5jdGlvbkFzc2lnbm1lbnROb2RlJzpcbiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cblxuICAgICAgY2FzZSAnSW5kZXhOb2RlJzpcbiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cblxuICAgICAgY2FzZSAnT2JqZWN0Tm9kZSc6XG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG5cbiAgICAgIGNhc2UgJ1JhbmdlTm9kZSc6XG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG5cbiAgICAgIGNhc2UgJ0NvbmRpdGlvbmFsTm9kZSc6XG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuaW1wbGVtZW50ZWQgbm9kZSB0eXBlIGluIHNpbXBsaWZ5Q29uc3RhbnQ6IFwiLmNvbmNhdChub2RlLnR5cGUpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc2ltcGxpZnlDb25zdGFudDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTaW1wbGlmeUNvbnN0YW50ID0gY3JlYXRlU2ltcGxpZnlDb25zdGFudDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU2ltcGxpZnlDb3JlID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnc2ltcGxpZnlDb3JlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ2VxdWFsJywgJ2lzWmVybycsICdhZGQnLCAnc3VidHJhY3QnLCAnbXVsdGlwbHknLCAnZGl2aWRlJywgJ3BvdycsICdDb25zdGFudE5vZGUnLCAnT3BlcmF0b3JOb2RlJywgJ0Z1bmN0aW9uTm9kZScsICdQYXJlbnRoZXNpc05vZGUnXTtcbnZhciBjcmVhdGVTaW1wbGlmeUNvcmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgZXF1YWwgPSBfcmVmLmVxdWFsLFxuICAgICAgaXNaZXJvID0gX3JlZi5pc1plcm8sXG4gICAgICBhZGQgPSBfcmVmLmFkZCxcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCxcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSxcbiAgICAgIGRpdmlkZSA9IF9yZWYuZGl2aWRlLFxuICAgICAgcG93ID0gX3JlZi5wb3csXG4gICAgICBDb25zdGFudE5vZGUgPSBfcmVmLkNvbnN0YW50Tm9kZSxcbiAgICAgIE9wZXJhdG9yTm9kZSA9IF9yZWYuT3BlcmF0b3JOb2RlLFxuICAgICAgRnVuY3Rpb25Ob2RlID0gX3JlZi5GdW5jdGlvbk5vZGUsXG4gICAgICBQYXJlbnRoZXNpc05vZGUgPSBfcmVmLlBhcmVudGhlc2lzTm9kZTtcbiAgdmFyIG5vZGUwID0gbmV3IENvbnN0YW50Tm9kZSgwKTtcbiAgdmFyIG5vZGUxID0gbmV3IENvbnN0YW50Tm9kZSgxKTtcbiAgLyoqXG4gICAqIHNpbXBsaWZ5Q29yZSgpIHBlcmZvcm1zIHNpbmdsZSBwYXNzIHNpbXBsaWZpY2F0aW9uIHN1aXRhYmxlIGZvclxuICAgKiBhcHBsaWNhdGlvbnMgcmVxdWlyaW5nIHVsdGltYXRlIHBlcmZvcm1hbmNlLiBJbiBjb250cmFzdCwgc2ltcGxpZnkoKVxuICAgKiBleHRlbmRzIHNpbXBsaWZ5Q29yZSgpIHdpdGggYWRkaXRpb25hbCBwYXNzZXMgdG8gcHJvdmlkZSBkZWVwZXJcbiAgICogc2ltcGxpZmljYXRpb24uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIHNpbXBsaWZ5LnNpbXBsaWZ5Q29yZShleHByKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIGNvbnN0IGYgPSBtYXRoLnBhcnNlKCcyICogMSAqIHggXiAoMiAtIDEpJylcbiAgICogICAgIG1hdGguc2ltcGxpZnkuc2ltcGlmeUNvcmUoZikgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vZGUgezIgKiB4fVxuICAgKiAgICAgbWF0aC5zaW1wbGlmeSgnMiAqIDEgKiB4IF4gKDIgLSAxKScsIFttYXRoLnNpbXBsaWZ5LnNpbXBpZnlDb3JlXSkgLy8gTm9kZSB7MiAqIHh9XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgZGVyaXZhdGl2ZVxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogICAgIFRoZSBleHByZXNzaW9uIHRvIGJlIHNpbXBsaWZpZWRcbiAgICovXG5cbiAgZnVuY3Rpb24gc2ltcGxpZnlDb3JlKG5vZGUpIHtcbiAgICBpZiAoKDAsIF9pcy5pc09wZXJhdG9yTm9kZSkobm9kZSkgJiYgbm9kZS5pc1VuYXJ5KCkpIHtcbiAgICAgIHZhciBhMCA9IHNpbXBsaWZ5Q29yZShub2RlLmFyZ3NbMF0pO1xuXG4gICAgICBpZiAobm9kZS5vcCA9PT0gJysnKSB7XG4gICAgICAgIC8vIHVuYXJ5IHBsdXNcbiAgICAgICAgcmV0dXJuIGEwO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZS5vcCA9PT0gJy0nKSB7XG4gICAgICAgIC8vIHVuYXJ5IG1pbnVzXG4gICAgICAgIGlmICgoMCwgX2lzLmlzT3BlcmF0b3JOb2RlKShhMCkpIHtcbiAgICAgICAgICBpZiAoYTAuaXNVbmFyeSgpICYmIGEwLm9wID09PSAnLScpIHtcbiAgICAgICAgICAgIHJldHVybiBhMC5hcmdzWzBdO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYTAuaXNCaW5hcnkoKSAmJiBhMC5mbiA9PT0gJ3N1YnRyYWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUoJy0nLCAnc3VidHJhY3QnLCBbYTAuYXJnc1sxXSwgYTAuYXJnc1swXV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5vZGUub3AsIG5vZGUuZm4sIFthMF0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc09wZXJhdG9yTm9kZSkobm9kZSkgJiYgbm9kZS5pc0JpbmFyeSgpKSB7XG4gICAgICB2YXIgX2EgPSBzaW1wbGlmeUNvcmUobm9kZS5hcmdzWzBdKTtcblxuICAgICAgdmFyIGExID0gc2ltcGxpZnlDb3JlKG5vZGUuYXJnc1sxXSk7XG5cbiAgICAgIGlmIChub2RlLm9wID09PSAnKycpIHtcbiAgICAgICAgaWYgKCgwLCBfaXMuaXNDb25zdGFudE5vZGUpKF9hKSkge1xuICAgICAgICAgIGlmIChpc1plcm8oX2EudmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gYTE7XG4gICAgICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQ29uc3RhbnROb2RlKShhMSkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ29uc3RhbnROb2RlKGFkZChfYS52YWx1ZSwgYTEudmFsdWUpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkoYTEpICYmIGlzWmVybyhhMS52YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gX2E7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKDAsIF9pcy5pc09wZXJhdG9yTm9kZSkoYTEpICYmIGExLmlzVW5hcnkoKSAmJiBhMS5vcCA9PT0gJy0nKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUoJy0nLCAnc3VidHJhY3QnLCBbX2EsIGExLmFyZ3NbMF1dKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5vZGUub3AsIG5vZGUuZm4sIGExID8gW19hLCBhMV0gOiBbX2FdKTtcbiAgICAgIH0gZWxzZSBpZiAobm9kZS5vcCA9PT0gJy0nKSB7XG4gICAgICAgIGlmICgoMCwgX2lzLmlzQ29uc3RhbnROb2RlKShfYSkgJiYgYTEpIHtcbiAgICAgICAgICBpZiAoKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkoYTEpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbnN0YW50Tm9kZShzdWJ0cmFjdChfYS52YWx1ZSwgYTEudmFsdWUpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzWmVybyhfYS52YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKCctJywgJ3VuYXJ5TWludXMnLCBbYTFdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gaWYgKG5vZGUuZm4gPT09IFwic3VidHJhY3RcIiAmJiBub2RlLmFyZ3MubGVuZ3RoID09PSAyKSB7XG5cblxuICAgICAgICBpZiAobm9kZS5mbiA9PT0gJ3N1YnRyYWN0Jykge1xuICAgICAgICAgIGlmICgoMCwgX2lzLmlzQ29uc3RhbnROb2RlKShhMSkgJiYgaXNaZXJvKGExLnZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIF9hO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICgoMCwgX2lzLmlzT3BlcmF0b3JOb2RlKShhMSkgJiYgYTEuaXNVbmFyeSgpICYmIGExLm9wID09PSAnLScpIHtcbiAgICAgICAgICAgIHJldHVybiBzaW1wbGlmeUNvcmUobmV3IE9wZXJhdG9yTm9kZSgnKycsICdhZGQnLCBbX2EsIGExLmFyZ3NbMF1dKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUobm9kZS5vcCwgbm9kZS5mbiwgW19hLCBhMV0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG5vZGUub3AgPT09ICcqJykge1xuICAgICAgICBpZiAoKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkoX2EpKSB7XG4gICAgICAgICAgaWYgKGlzWmVybyhfYS52YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBub2RlMDtcbiAgICAgICAgICB9IGVsc2UgaWYgKGVxdWFsKF9hLnZhbHVlLCAxKSkge1xuICAgICAgICAgICAgcmV0dXJuIGExO1xuICAgICAgICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkoYTEpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbnN0YW50Tm9kZShtdWx0aXBseShfYS52YWx1ZSwgYTEudmFsdWUpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkoYTEpKSB7XG4gICAgICAgICAgaWYgKGlzWmVybyhhMS52YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBub2RlMDtcbiAgICAgICAgICB9IGVsc2UgaWYgKGVxdWFsKGExLnZhbHVlLCAxKSkge1xuICAgICAgICAgICAgcmV0dXJuIF9hO1xuICAgICAgICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc09wZXJhdG9yTm9kZSkoX2EpICYmIF9hLmlzQmluYXJ5KCkgJiYgX2Eub3AgPT09IG5vZGUub3ApIHtcbiAgICAgICAgICAgIHZhciBhMDAgPSBfYS5hcmdzWzBdO1xuXG4gICAgICAgICAgICBpZiAoKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkoYTAwKSkge1xuICAgICAgICAgICAgICB2YXIgYTAwYTEgPSBuZXcgQ29uc3RhbnROb2RlKG11bHRpcGx5KGEwMC52YWx1ZSwgYTEudmFsdWUpKTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUobm9kZS5vcCwgbm9kZS5mbiwgW2EwMGExLCBfYS5hcmdzWzFdXSwgbm9kZS5pbXBsaWNpdCk7IC8vIGNvbnN0YW50cyBvbiBsZWZ0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUobm9kZS5vcCwgbm9kZS5mbiwgW2ExLCBfYV0sIG5vZGUuaW1wbGljaXQpOyAvLyBjb25zdGFudHMgb24gbGVmdFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUobm9kZS5vcCwgbm9kZS5mbiwgW19hLCBhMV0sIG5vZGUuaW1wbGljaXQpO1xuICAgICAgfSBlbHNlIGlmIChub2RlLm9wID09PSAnLycpIHtcbiAgICAgICAgaWYgKCgwLCBfaXMuaXNDb25zdGFudE5vZGUpKF9hKSkge1xuICAgICAgICAgIGlmIChpc1plcm8oX2EudmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZTA7XG4gICAgICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQ29uc3RhbnROb2RlKShhMSkgJiYgKGVxdWFsKGExLnZhbHVlLCAxKSB8fCBlcXVhbChhMS52YWx1ZSwgMikgfHwgZXF1YWwoYTEudmFsdWUsIDQpKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb25zdGFudE5vZGUoZGl2aWRlKF9hLnZhbHVlLCBhMS52YWx1ZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5vZGUub3AsIG5vZGUuZm4sIFtfYSwgYTFdKTtcbiAgICAgIH0gZWxzZSBpZiAobm9kZS5vcCA9PT0gJ14nKSB7XG4gICAgICAgIGlmICgoMCwgX2lzLmlzQ29uc3RhbnROb2RlKShhMSkpIHtcbiAgICAgICAgICBpZiAoaXNaZXJvKGExLnZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5vZGUxO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZXF1YWwoYTEudmFsdWUsIDEpKSB7XG4gICAgICAgICAgICByZXR1cm4gX2E7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICgoMCwgX2lzLmlzQ29uc3RhbnROb2RlKShfYSkpIHtcbiAgICAgICAgICAgICAgLy8gZm9sZCBjb25zdGFudFxuICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbnN0YW50Tm9kZShwb3coX2EudmFsdWUsIGExLnZhbHVlKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNPcGVyYXRvck5vZGUpKF9hKSAmJiBfYS5pc0JpbmFyeSgpICYmIF9hLm9wID09PSAnXicpIHtcbiAgICAgICAgICAgICAgdmFyIGEwMSA9IF9hLmFyZ3NbMV07XG5cbiAgICAgICAgICAgICAgaWYgKCgwLCBfaXMuaXNDb25zdGFudE5vZGUpKGEwMSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE9wZXJhdG9yTm9kZShub2RlLm9wLCBub2RlLmZuLCBbX2EuYXJnc1swXSwgbmV3IENvbnN0YW50Tm9kZShtdWx0aXBseShhMDEudmFsdWUsIGExLnZhbHVlKSldKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5vZGUub3AsIG5vZGUuZm4sIFtfYSwgYTFdKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNQYXJlbnRoZXNpc05vZGUpKG5vZGUpKSB7XG4gICAgICB2YXIgYyA9IHNpbXBsaWZ5Q29yZShub2RlLmNvbnRlbnQpO1xuXG4gICAgICBpZiAoKDAsIF9pcy5pc1BhcmVudGhlc2lzTm9kZSkoYykgfHwgKDAsIF9pcy5pc1N5bWJvbE5vZGUpKGMpIHx8ICgwLCBfaXMuaXNDb25zdGFudE5vZGUpKGMpKSB7XG4gICAgICAgIHJldHVybiBjO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IFBhcmVudGhlc2lzTm9kZShjKTtcbiAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNGdW5jdGlvbk5vZGUpKG5vZGUpKSB7XG4gICAgICB2YXIgYXJncyA9IG5vZGUuYXJncy5tYXAoc2ltcGxpZnlDb3JlKS5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgICAgICByZXR1cm4gKDAsIF9pcy5pc1BhcmVudGhlc2lzTm9kZSkoYXJnKSA/IGFyZy5jb250ZW50IDogYXJnO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uTm9kZShzaW1wbGlmeUNvcmUobm9kZS5mbiksIGFyZ3MpO1xuICAgIH0gZWxzZSB7Ly8gY2Fubm90IHNpbXBsaWZ5XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICByZXR1cm4gc2ltcGxpZnlDb3JlO1xufSk7XG5leHBvcnRzLmNyZWF0ZVNpbXBsaWZ5Q29yZSA9IGNyZWF0ZVNpbXBsaWZ5Q29yZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlVXRpbCA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIG5hbWUgPSAnc2ltcGxpZnlVdGlsJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ0Z1bmN0aW9uTm9kZScsICdPcGVyYXRvck5vZGUnLCAnU3ltYm9sTm9kZSddO1xudmFyIGNyZWF0ZVV0aWwgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgRnVuY3Rpb25Ob2RlID0gX3JlZi5GdW5jdGlvbk5vZGUsXG4gICAgICBPcGVyYXRvck5vZGUgPSBfcmVmLk9wZXJhdG9yTm9kZSxcbiAgICAgIFN5bWJvbE5vZGUgPSBfcmVmLlN5bWJvbE5vZGU7XG4gIC8vIFRPRE8gY29tbXV0YXRpdmUvYXNzb2NpYXRpdmUgcHJvcGVydGllcyByZWx5IG9uIHRoZSBhcmd1bWVudHNcbiAgLy8gZS5nLiBtdWx0aXBseSBpcyBub3QgY29tbXV0YXRpdmUgZm9yIG1hdHJpY2VzXG4gIC8vIFRoZSBwcm9wZXJ0aWVzIHNob3VsZCBiZSBjYWxjdWxhdGVkIGZyb20gYW4gYXJndW1lbnQgdG8gc2ltcGxpZnksIG9yIHBvc3NpYmx5IHNvbWV0aGluZyBpbiBtYXRoLmNvbmZpZ1xuICAvLyB0aGUgb3RoZXIgb3B0aW9uIGlzIGZvciB0eXBlZCgpIHRvIHNwZWNpZnkgYSByZXR1cm4gdHlwZSBzbyB0aGF0IHdlIGNhbiBldmFsdWF0ZSB0aGUgdHlwZSBvZiBhcmd1bWVudHNcbiAgdmFyIGNvbW11dGF0aXZlID0ge1xuICAgIGFkZDogdHJ1ZSxcbiAgICBtdWx0aXBseTogdHJ1ZVxuICB9O1xuICB2YXIgYXNzb2NpYXRpdmUgPSB7XG4gICAgYWRkOiB0cnVlLFxuICAgIG11bHRpcGx5OiB0cnVlXG4gIH07XG5cbiAgZnVuY3Rpb24gaXNDb21tdXRhdGl2ZShub2RlLCBjb250ZXh0KSB7XG4gICAgaWYgKCEoMCwgX2lzLmlzT3BlcmF0b3JOb2RlKShub2RlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmFyIG5hbWUgPSBub2RlLmZuLnRvU3RyaW5nKCk7XG5cbiAgICBpZiAoY29udGV4dCAmJiAoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoY29udGV4dCwgbmFtZSkgJiYgKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKGNvbnRleHRbbmFtZV0sICdjb21tdXRhdGl2ZScpKSB7XG4gICAgICByZXR1cm4gY29udGV4dFtuYW1lXS5jb21tdXRhdGl2ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29tbXV0YXRpdmVbbmFtZV0gfHwgZmFsc2U7XG4gIH1cblxuICBmdW5jdGlvbiBpc0Fzc29jaWF0aXZlKG5vZGUsIGNvbnRleHQpIHtcbiAgICBpZiAoISgwLCBfaXMuaXNPcGVyYXRvck5vZGUpKG5vZGUpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIG5hbWUgPSBub2RlLmZuLnRvU3RyaW5nKCk7XG5cbiAgICBpZiAoY29udGV4dCAmJiAoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoY29udGV4dCwgbmFtZSkgJiYgKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKGNvbnRleHRbbmFtZV0sICdhc3NvY2lhdGl2ZScpKSB7XG4gICAgICByZXR1cm4gY29udGV4dFtuYW1lXS5hc3NvY2lhdGl2ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXNzb2NpYXRpdmVbbmFtZV0gfHwgZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIEZsYXR0ZW4gYWxsIGFzc29jaWF0aXZlIG9wZXJhdG9ycyBpbiBhbiBleHByZXNzaW9uIHRyZWUuXG4gICAqIEFzc3VtZXMgcGFyZW50aGVzZXMgaGF2ZSBhbHJlYWR5IGJlZW4gcmVtb3ZlZC5cbiAgICovXG5cblxuICBmdW5jdGlvbiBmbGF0dGVuKG5vZGUpIHtcbiAgICBpZiAoIW5vZGUuYXJncyB8fCBub2RlLmFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICBub2RlLmFyZ3MgPSBhbGxDaGlsZHJlbihub2RlKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5hcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBmbGF0dGVuKG5vZGUuYXJnc1tpXSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIGNoaWxkcmVuIG9mIGEgbm9kZSBhcyBpZiBpdCBoYXMgYmVlbiBmbGF0dGVuZWQuXG4gICAqIFRPRE8gaW1wbGVtZW50IGZvciBGdW5jdGlvbk5vZGVzXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gYWxsQ2hpbGRyZW4obm9kZSkge1xuICAgIHZhciBvcDtcbiAgICB2YXIgY2hpbGRyZW4gPSBbXTtcblxuICAgIHZhciBmaW5kQ2hpbGRyZW4gPSBmdW5jdGlvbiBmaW5kQ2hpbGRyZW4obm9kZSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNoaWxkID0gbm9kZS5hcmdzW2ldO1xuXG4gICAgICAgIGlmICgoMCwgX2lzLmlzT3BlcmF0b3JOb2RlKShjaGlsZCkgJiYgb3AgPT09IGNoaWxkLm9wKSB7XG4gICAgICAgICAgZmluZENoaWxkcmVuKGNoaWxkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoaXNBc3NvY2lhdGl2ZShub2RlKSkge1xuICAgICAgb3AgPSBub2RlLm9wO1xuICAgICAgZmluZENoaWxkcmVuKG5vZGUpO1xuICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbm9kZS5hcmdzO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogIFVuZmxhdHRlbiBhbGwgZmxhdHRlbmVkIG9wZXJhdG9ycyB0byBhIHJpZ2h0LWhlYXZ5IGJpbmFyeSB0cmVlLlxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHVuZmxhdHRlbnIobm9kZSkge1xuICAgIGlmICghbm9kZS5hcmdzIHx8IG5vZGUuYXJncy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbWFrZU5vZGUgPSBjcmVhdGVNYWtlTm9kZUZ1bmN0aW9uKG5vZGUpO1xuICAgIHZhciBsID0gbm9kZS5hcmdzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICB1bmZsYXR0ZW5yKG5vZGUuYXJnc1tpXSk7XG4gICAgfVxuXG4gICAgaWYgKGwgPiAyICYmIGlzQXNzb2NpYXRpdmUobm9kZSkpIHtcbiAgICAgIHZhciBjdXJub2RlID0gbm9kZS5hcmdzLnBvcCgpO1xuXG4gICAgICB3aGlsZSAobm9kZS5hcmdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY3Vybm9kZSA9IG1ha2VOb2RlKFtub2RlLmFyZ3MucG9wKCksIGN1cm5vZGVdKTtcbiAgICAgIH1cblxuICAgICAgbm9kZS5hcmdzID0gY3Vybm9kZS5hcmdzO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogIFVuZmxhdHRlbiBhbGwgZmxhdHRlbmVkIG9wZXJhdG9ycyB0byBhIGxlZnQtaGVhdnkgYmluYXJ5IHRyZWUuXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gdW5mbGF0dGVubChub2RlKSB7XG4gICAgaWYgKCFub2RlLmFyZ3MgfHwgbm9kZS5hcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBtYWtlTm9kZSA9IGNyZWF0ZU1ha2VOb2RlRnVuY3Rpb24obm9kZSk7XG4gICAgdmFyIGwgPSBub2RlLmFyZ3MubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgIHVuZmxhdHRlbmwobm9kZS5hcmdzW2ldKTtcbiAgICB9XG5cbiAgICBpZiAobCA+IDIgJiYgaXNBc3NvY2lhdGl2ZShub2RlKSkge1xuICAgICAgdmFyIGN1cm5vZGUgPSBub2RlLmFyZ3Muc2hpZnQoKTtcblxuICAgICAgd2hpbGUgKG5vZGUuYXJncy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGN1cm5vZGUgPSBtYWtlTm9kZShbY3Vybm9kZSwgbm9kZS5hcmdzLnNoaWZ0KCldKTtcbiAgICAgIH1cblxuICAgICAgbm9kZS5hcmdzID0gY3Vybm9kZS5hcmdzO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU1ha2VOb2RlRnVuY3Rpb24obm9kZSkge1xuICAgIGlmICgoMCwgX2lzLmlzT3BlcmF0b3JOb2RlKShub2RlKSkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUobm9kZS5vcCwgbm9kZS5mbiwgYXJncywgbm9kZS5pbXBsaWNpdCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoYXJncykge1xuICAgICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uTm9kZShuZXcgU3ltYm9sTm9kZShub2RlLm5hbWUpLCBhcmdzKTtcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBjcmVhdGVNYWtlTm9kZUZ1bmN0aW9uOiBjcmVhdGVNYWtlTm9kZUZ1bmN0aW9uLFxuICAgIGlzQ29tbXV0YXRpdmU6IGlzQ29tbXV0YXRpdmUsXG4gICAgaXNBc3NvY2lhdGl2ZTogaXNBc3NvY2lhdGl2ZSxcbiAgICBmbGF0dGVuOiBmbGF0dGVuLFxuICAgIGFsbENoaWxkcmVuOiBhbGxDaGlsZHJlbixcbiAgICB1bmZsYXR0ZW5yOiB1bmZsYXR0ZW5yLFxuICAgIHVuZmxhdHRlbmw6IHVuZmxhdHRlbmxcbiAgfTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVVdGlsID0gY3JlYXRlVXRpbDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTHNvbHZlID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9zb2x2ZVZhbGlkYXRpb24gPSByZXF1aXJlKFwiLi91dGlscy9zb2x2ZVZhbGlkYXRpb25cIik7XG5cbnZhciBuYW1lID0gJ2xzb2x2ZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnZGl2aWRlU2NhbGFyJywgJ211bHRpcGx5U2NhbGFyJywgJ3N1YnRyYWN0JywgJ2VxdWFsU2NhbGFyJywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlTHNvbHZlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgZGl2aWRlU2NhbGFyID0gX3JlZi5kaXZpZGVTY2FsYXIsXG4gICAgICBtdWx0aXBseVNjYWxhciA9IF9yZWYubXVsdGlwbHlTY2FsYXIsXG4gICAgICBzdWJ0cmFjdCA9IF9yZWYuc3VidHJhY3QsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsXG4gICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXg7XG4gIHZhciBzb2x2ZVZhbGlkYXRpb24gPSAoMCwgX3NvbHZlVmFsaWRhdGlvbi5jcmVhdGVTb2x2ZVZhbGlkYXRpb24pKHtcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIC8qKlxuICAgKiBTb2x2ZXMgdGhlIGxpbmVhciBlcXVhdGlvbiBzeXN0ZW0gYnkgZm9yd2FyZHMgc3Vic3RpdHV0aW9uLiBNYXRyaXggbXVzdCBiZSBhIGxvd2VyIHRyaWFuZ3VsYXIgbWF0cml4LlxuICAgKlxuICAgKiBgTCAqIHggPSBiYFxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgubHNvbHZlKEwsIGIpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBjb25zdCBhID0gW1stMiwgM10sIFsyLCAxXV1cbiAgICogICAgY29uc3QgYiA9IFsxMSwgOV1cbiAgICogICAgY29uc3QgeCA9IGxzb2x2ZShhLCBiKSAgLy8gW1stNS41XSwgWzIwXV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGx1cCwgc2x1LCB1c29sdmUsIGx1c29sdmVcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXgsIEFycmF5fSBMICAgICAgIEEgTiB4IE4gbWF0cml4IG9yIGFycmF5IChMKVxuICAgKiBAcGFyYW0ge01hdHJpeCwgQXJyYXl9IGIgICAgICAgQSBjb2x1bW4gdmVjdG9yIHdpdGggdGhlIGIgdmFsdWVzXG4gICAqXG4gICAqIEByZXR1cm4ge0RlbnNlTWF0cml4IHwgQXJyYXl9ICBBIGNvbHVtbiB2ZWN0b3Igd2l0aCB0aGUgbGluZWFyIHN5c3RlbSBzb2x1dGlvbiAoeClcbiAgICovXG5cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnU3BhcnNlTWF0cml4LCBBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFycmF5TWF0cml4KG0sIGIpIHtcbiAgICAgIC8vIHByb2Nlc3MgbWF0cml4XG4gICAgICByZXR1cm4gX3NwYXJzZUZvcndhcmRTdWJzdGl0dXRpb24obSwgYik7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBcnJheU1hdHJpeChtLCBiKSB7XG4gICAgICAvLyBwcm9jZXNzIG1hdHJpeFxuICAgICAgcmV0dXJuIF9kZW5zZUZvcndhcmRTdWJzdGl0dXRpb24obSwgYik7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlBcnJheU1hdHJpeChhLCBiKSB7XG4gICAgICAvLyBjcmVhdGUgZGVuc2UgbWF0cml4IGZyb20gYXJyYXlcbiAgICAgIHZhciBtID0gbWF0cml4KGEpOyAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG5cbiAgICAgIHZhciByID0gX2RlbnNlRm9yd2FyZFN1YnN0aXR1dGlvbihtLCBiKTsgLy8gcmVzdWx0XG5cblxuICAgICAgcmV0dXJuIHIudmFsdWVPZigpO1xuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gX2RlbnNlRm9yd2FyZFN1YnN0aXR1dGlvbihtLCBiKSB7XG4gICAgLy8gdmFsaWRhdGUgbWF0cml4IGFuZCB2ZWN0b3IsIHJldHVybiBjb3B5IG9mIGNvbHVtbiB2ZWN0b3IgYlxuICAgIGIgPSBzb2x2ZVZhbGlkYXRpb24obSwgYiwgdHJ1ZSk7IC8vIGNvbHVtbiB2ZWN0b3IgZGF0YVxuXG4gICAgdmFyIGJkYXRhID0gYi5fZGF0YTsgLy8gcm93cyAmIGNvbHVtbnNcblxuICAgIHZhciByb3dzID0gbS5fc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IG0uX3NpemVbMV07IC8vIHJlc3VsdFxuXG4gICAgdmFyIHggPSBbXTsgLy8gZGF0YVxuXG4gICAgdmFyIGRhdGEgPSBtLl9kYXRhOyAvLyBmb3J3YXJkIHNvbHZlIG0gKiB4ID0gYiwgbG9vcCBjb2x1bW5zXG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgLy8gYltqXVxuICAgICAgdmFyIGJqID0gYmRhdGFbal1bMF0gfHwgMDsgLy8geFtqXVxuXG4gICAgICB2YXIgeGogPSB2b2lkIDA7IC8vIGZvcndhcmQgc3Vic3RpdHV0aW9uIChvdXRlciBwcm9kdWN0KSBhdm9pZHMgaW5uZXIgbG9vcGluZyB3aGVuIGJqID09PSAwXG5cbiAgICAgIGlmICghZXF1YWxTY2FsYXIoYmosIDApKSB7XG4gICAgICAgIC8vIHZhbHVlIEAgW2osIGpdXG4gICAgICAgIHZhciB2amogPSBkYXRhW2pdW2pdOyAvLyBjaGVjayB2ampcblxuICAgICAgICBpZiAoZXF1YWxTY2FsYXIodmpqLCAwKSkge1xuICAgICAgICAgIC8vIHN5c3RlbSBjYW5ub3QgYmUgc29sdmVkXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdMaW5lYXIgc3lzdGVtIGNhbm5vdCBiZSBzb2x2ZWQgc2luY2UgbWF0cml4IGlzIHNpbmd1bGFyJyk7XG4gICAgICAgIH0gLy8gY2FsY3VsYXRlIHhqXG5cblxuICAgICAgICB4aiA9IGRpdmlkZVNjYWxhcihiaiwgdmpqKTsgLy8gbG9vcCByb3dzXG5cbiAgICAgICAgZm9yICh2YXIgaSA9IGogKyAxOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgLy8gdXBkYXRlIGNvcHkgb2YgYlxuICAgICAgICAgIGJkYXRhW2ldID0gW3N1YnRyYWN0KGJkYXRhW2ldWzBdIHx8IDAsIG11bHRpcGx5U2NhbGFyKHhqLCBkYXRhW2ldW2pdKSldO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB6ZXJvIEAgalxuICAgICAgICB4aiA9IDA7XG4gICAgICB9IC8vIHVwZGF0ZSB4XG5cblxuICAgICAgeFtqXSA9IFt4al07XG4gICAgfSAvLyByZXR1cm4gdmVjdG9yXG5cblxuICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoe1xuICAgICAgZGF0YTogeCxcbiAgICAgIHNpemU6IFtyb3dzLCAxXVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gX3NwYXJzZUZvcndhcmRTdWJzdGl0dXRpb24obSwgYikge1xuICAgIC8vIHZhbGlkYXRlIG1hdHJpeCBhbmQgdmVjdG9yLCByZXR1cm4gY29weSBvZiBjb2x1bW4gdmVjdG9yIGJcbiAgICBiID0gc29sdmVWYWxpZGF0aW9uKG0sIGIsIHRydWUpOyAvLyBjb2x1bW4gdmVjdG9yIGRhdGFcblxuICAgIHZhciBiZGF0YSA9IGIuX2RhdGE7IC8vIHJvd3MgJiBjb2x1bW5zXG5cbiAgICB2YXIgcm93cyA9IG0uX3NpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSBtLl9zaXplWzFdOyAvLyBtYXRyaXggYXJyYXlzXG5cbiAgICB2YXIgdmFsdWVzID0gbS5fdmFsdWVzO1xuICAgIHZhciBpbmRleCA9IG0uX2luZGV4O1xuICAgIHZhciBwdHIgPSBtLl9wdHI7IC8vIHZhcnNcblxuICAgIHZhciBpLCBrOyAvLyByZXN1bHRcblxuICAgIHZhciB4ID0gW107IC8vIGZvcndhcmQgc29sdmUgbSAqIHggPSBiLCBsb29wIGNvbHVtbnNcblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAvLyBiW2pdXG4gICAgICB2YXIgYmogPSBiZGF0YVtqXVswXSB8fCAwOyAvLyBmb3J3YXJkIHN1YnN0aXR1dGlvbiAob3V0ZXIgcHJvZHVjdCkgYXZvaWRzIGlubmVyIGxvb3Bpbmcgd2hlbiBiaiA9PT0gMFxuXG4gICAgICBpZiAoIWVxdWFsU2NhbGFyKGJqLCAwKSkge1xuICAgICAgICAvLyB2YWx1ZSBAIFtqLCBqXVxuICAgICAgICB2YXIgdmpqID0gMDsgLy8gbG93ZXIgdHJpYW5ndWxhciBtYXRyaXggdmFsdWVzICYgaW5kZXggKGNvbHVtbiBqKVxuXG4gICAgICAgIHZhciBqdmFsdWVzID0gW107XG4gICAgICAgIHZhciBqaW5kZXggPSBbXTsgLy8gbGFzdCBpbmRleCBpbiBjb2x1bW5cblxuICAgICAgICB2YXIgbCA9IHB0cltqICsgMV07IC8vIHZhbHVlcyBpbiBjb2x1bW4sIGZpbmQgdmFsdWUgQCBbaiwgal1cblxuICAgICAgICBmb3IgKGsgPSBwdHJbal07IGsgPCBsOyBrKyspIHtcbiAgICAgICAgICAvLyByb3dcbiAgICAgICAgICBpID0gaW5kZXhba107IC8vIGNoZWNrIHJvdyAocm93cyBhcmUgbm90IHNvcnRlZCEpXG5cbiAgICAgICAgICBpZiAoaSA9PT0gaikge1xuICAgICAgICAgICAgLy8gdXBkYXRlIHZqalxuICAgICAgICAgICAgdmpqID0gdmFsdWVzW2tdO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaSA+IGopIHtcbiAgICAgICAgICAgIC8vIHN0b3JlIGxvd2VyIHRyaWFuZ3VsYXJcbiAgICAgICAgICAgIGp2YWx1ZXMucHVzaCh2YWx1ZXNba10pO1xuICAgICAgICAgICAgamluZGV4LnB1c2goaSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIGF0IHRoaXMgcG9pbnQgd2UgbXVzdCBoYXZlIGEgdmFsdWUgQCBbaiwgal1cblxuXG4gICAgICAgIGlmIChlcXVhbFNjYWxhcih2amosIDApKSB7XG4gICAgICAgICAgLy8gc3lzdGVtIGNhbm5vdCBiZSBzb2x2ZWQsIHRoZXJlIGlzIG5vIHZhbHVlIEAgW2osIGpdXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdMaW5lYXIgc3lzdGVtIGNhbm5vdCBiZSBzb2x2ZWQgc2luY2UgbWF0cml4IGlzIHNpbmd1bGFyJyk7XG4gICAgICAgIH0gLy8gY2FsY3VsYXRlIHhqXG5cblxuICAgICAgICB2YXIgeGogPSBkaXZpZGVTY2FsYXIoYmosIHZqaik7IC8vIGxvb3AgbG93ZXIgdHJpYW5ndWxhclxuXG4gICAgICAgIGZvciAoayA9IDAsIGwgPSBqaW5kZXgubGVuZ3RoOyBrIDwgbDsgaysrKSB7XG4gICAgICAgICAgLy8gcm93XG4gICAgICAgICAgaSA9IGppbmRleFtrXTsgLy8gdXBkYXRlIGNvcHkgb2YgYlxuXG4gICAgICAgICAgYmRhdGFbaV0gPSBbc3VidHJhY3QoYmRhdGFbaV1bMF0gfHwgMCwgbXVsdGlwbHlTY2FsYXIoeGosIGp2YWx1ZXNba10pKV07XG4gICAgICAgIH0gLy8gdXBkYXRlIHhcblxuXG4gICAgICAgIHhbal0gPSBbeGpdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdXBkYXRlIHhcbiAgICAgICAgeFtqXSA9IFswXTtcbiAgICAgIH1cbiAgICB9IC8vIHJldHVybiB2ZWN0b3JcblxuXG4gICAgcmV0dXJuIG5ldyBEZW5zZU1hdHJpeCh7XG4gICAgICBkYXRhOiB4LFxuICAgICAgc2l6ZTogW3Jvd3MsIDFdXG4gICAgfSk7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVMc29sdmUgPSBjcmVhdGVMc29sdmU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUx1c29sdmUgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX3NvbHZlVmFsaWRhdGlvbiA9IHJlcXVpcmUoXCIuL3V0aWxzL3NvbHZlVmFsaWRhdGlvblwiKTtcblxudmFyIF9jc0lwdmVjID0gcmVxdWlyZShcIi4uL3NwYXJzZS9jc0lwdmVjXCIpO1xuXG52YXIgbmFtZSA9ICdsdXNvbHZlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdsdXAnLCAnc2x1JywgJ3Vzb2x2ZScsICdsc29sdmUnLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVMdXNvbHZlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgbHVwID0gX3JlZi5sdXAsXG4gICAgICBzbHUgPSBfcmVmLnNsdSxcbiAgICAgIHVzb2x2ZSA9IF9yZWYudXNvbHZlLFxuICAgICAgbHNvbHZlID0gX3JlZi5sc29sdmUsXG4gICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXg7XG4gIHZhciBzb2x2ZVZhbGlkYXRpb24gPSAoMCwgX3NvbHZlVmFsaWRhdGlvbi5jcmVhdGVTb2x2ZVZhbGlkYXRpb24pKHtcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIC8qKlxuICAgKiBTb2x2ZXMgdGhlIGxpbmVhciBzeXN0ZW0gYEEgKiB4ID0gYmAgd2hlcmUgYEFgIGlzIGFuIFtuIHggbl0gbWF0cml4IGFuZCBgYmAgaXMgYSBbbl0gY29sdW1uIHZlY3Rvci5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmx1c29sdmUoQSwgYikgICAgIC8vIHJldHVybnMgY29sdW1uIHZlY3RvciB3aXRoIHRoZSBzb2x1dGlvbiB0byB0aGUgbGluZWFyIHN5c3RlbSBBICogeCA9IGJcbiAgICogICAgbWF0aC5sdXNvbHZlKGx1cCwgYikgICAvLyByZXR1cm5zIGNvbHVtbiB2ZWN0b3Igd2l0aCB0aGUgc29sdXRpb24gdG8gdGhlIGxpbmVhciBzeXN0ZW0gQSAqIHggPSBiLCBsdXAgPSBtYXRoLmx1cChBKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgY29uc3QgbSA9IFtbMSwgMCwgMCwgMF0sIFswLCAyLCAwLCAwXSwgWzAsIDAsIDMsIDBdLCBbMCwgMCwgMCwgNF1dXG4gICAqXG4gICAqICAgIGNvbnN0IHggPSBtYXRoLmx1c29sdmUobSwgWy0xLCAtMSwgLTEsIC0xXSkgICAgICAgIC8vIHggPSBbWy0xXSwgWy0wLjVdLCBbLTEvM10sIFstMC4yNV1dXG4gICAqXG4gICAqICAgIGNvbnN0IGYgPSBtYXRoLmx1cChtKVxuICAgKiAgICBjb25zdCB4MSA9IG1hdGgubHVzb2x2ZShmLCBbLTEsIC0xLCAtMSwgLTFdKSAgICAgICAvLyB4MSA9IFtbLTFdLCBbLTAuNV0sIFstMS8zXSwgWy0wLjI1XV1cbiAgICogICAgY29uc3QgeDIgPSBtYXRoLmx1c29sdmUoZiwgWzEsIDIsIDEsIC0xXSkgICAgICAgICAgLy8geDIgPSBbWzFdLCBbMV0sIFsxLzNdLCBbLTAuMjVdXVxuICAgKlxuICAgKiAgICBjb25zdCBhID0gW1stMiwgM10sIFsyLCAxXV1cbiAgICogICAgY29uc3QgYiA9IFsxMSwgOV1cbiAgICogICAgY29uc3QgeCA9IG1hdGgubHVzb2x2ZShhLCBiKSAgLy8gW1syXSwgWzVdXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgbHVwLCBzbHUsIGxzb2x2ZSwgdXNvbHZlXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4IHwgQXJyYXkgfCBPYmplY3R9IEEgICAgICBJbnZlcnRpYmxlIE1hdHJpeCBvciB0aGUgTWF0cml4IExVIGRlY29tcG9zaXRpb25cbiAgICogQHBhcmFtIHtNYXRyaXggfCBBcnJheX0gYiAgICAgICAgICAgICAgIENvbHVtbiBWZWN0b3JcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcmRlcl0gICAgICAgICAgICAgICAgIFRoZSBTeW1ib2xpYyBPcmRlcmluZyBhbmQgQW5hbHlzaXMgb3JkZXIsIHNlZSBzbHUgZm9yIGRldGFpbHMuIE1hdHJpeCBtdXN0IGJlIGEgU3BhcnNlTWF0cml4XG4gICAqIEBwYXJhbSB7TnVtYmVyfSBbdGhyZXNob2xkXSAgICAgICAgICAgICBQYXJ0aWFsIHBpdm90aW5nIHRocmVzaG9sZCAoMSBmb3IgcGFydGlhbCBwaXZvdGluZyksIHNlZSBzbHUgZm9yIGRldGFpbHMuIE1hdHJpeCBtdXN0IGJlIGEgU3BhcnNlTWF0cml4LlxuICAgKlxuICAgKiBAcmV0dXJuIHtEZW5zZU1hdHJpeCB8IEFycmF5fSAgICAgICAgICAgQ29sdW1uIHZlY3RvciB3aXRoIHRoZSBzb2x1dGlvbiB0byB0aGUgbGluZWFyIHN5c3RlbSBBICogeCA9IGJcbiAgICovXG5cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnQXJyYXksIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlBcnJheU1hdHJpeChhLCBiKSB7XG4gICAgICAvLyBjb252ZXJ0IGEgdG8gbWF0cml4XG4gICAgICBhID0gbWF0cml4KGEpOyAvLyBtYXRyaXggbHVwIGRlY29tcG9zaXRpb25cblxuICAgICAgdmFyIGQgPSBsdXAoYSk7IC8vIHNvbHZlXG5cbiAgICAgIHZhciB4ID0gX2x1c29sdmUoZC5MLCBkLlUsIGQucCwgbnVsbCwgYik7IC8vIGNvbnZlcnQgcmVzdWx0IHRvIGFycmF5XG5cblxuICAgICAgcmV0dXJuIHgudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4QXJyYXlNYXRyaXgoYSwgYikge1xuICAgICAgLy8gbWF0cml4IGx1cCBkZWNvbXBvc2l0aW9uXG4gICAgICB2YXIgZCA9IGx1cChhKTsgLy8gc29sdmVcblxuICAgICAgcmV0dXJuIF9sdXNvbHZlKGQuTCwgZC5VLCBkLnAsIG51bGwsIGIpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhBcnJheU1hdHJpeChhLCBiKSB7XG4gICAgICAvLyBtYXRyaXggbHVwIGRlY29tcG9zaXRpb25cbiAgICAgIHZhciBkID0gbHVwKGEpOyAvLyBzb2x2ZVxuXG4gICAgICByZXR1cm4gX2x1c29sdmUoZC5MLCBkLlUsIGQucCwgbnVsbCwgYik7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBBcnJheSB8IE1hdHJpeCwgbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhBcnJheU1hdHJpeE51bWJlck51bWJlcihhLCBiLCBvcmRlciwgdGhyZXNob2xkKSB7XG4gICAgICAvLyBtYXRyaXggbHUgZGVjb21wb3NpdGlvblxuICAgICAgdmFyIGQgPSBzbHUoYSwgb3JkZXIsIHRocmVzaG9sZCk7IC8vIHNvbHZlXG5cbiAgICAgIHJldHVybiBfbHVzb2x2ZShkLkwsIGQuVSwgZC5wLCBkLnEsIGIpO1xuICAgIH0sXG4gICAgJ09iamVjdCwgQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBPYmplY3RBcnJheU1hdHJpeChkLCBiKSB7XG4gICAgICAvLyBzb2x2ZVxuICAgICAgcmV0dXJuIF9sdXNvbHZlKGQuTCwgZC5VLCBkLnAsIGQucSwgYik7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBfdG9NYXRyaXgoYSkge1xuICAgIC8vIGNoZWNrIGl0IGlzIGEgbWF0cml4XG4gICAgaWYgKCgwLCBfaXMuaXNNYXRyaXgpKGEpKSB7XG4gICAgICByZXR1cm4gYTtcbiAgICB9IC8vIGNoZWNrIGFycmF5XG5cblxuICAgIGlmICgoMCwgX2lzLmlzQXJyYXkpKGEpKSB7XG4gICAgICByZXR1cm4gbWF0cml4KGEpO1xuICAgIH0gLy8gdGhyb3dcblxuXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBNYXRyaXggTFUgZGVjb21wb3NpdGlvbicpO1xuICB9XG5cbiAgZnVuY3Rpb24gX2x1c29sdmUobCwgdSwgcCwgcSwgYikge1xuICAgIC8vIHZlcmlmeSBMLCBVLCBQXG4gICAgbCA9IF90b01hdHJpeChsKTtcbiAgICB1ID0gX3RvTWF0cml4KHUpOyAvLyB2YWxpZGF0ZSBtYXRyaXggYW5kIHZlY3RvclxuXG4gICAgYiA9IHNvbHZlVmFsaWRhdGlvbihsLCBiLCBmYWxzZSk7IC8vIGFwcGx5IHJvdyBwZXJtdXRhdGlvbnMgaWYgbmVlZGVkIChiIGlzIGEgRGVuc2VNYXRyaXgpXG5cbiAgICBpZiAocCkge1xuICAgICAgYi5fZGF0YSA9ICgwLCBfY3NJcHZlYy5jc0lwdmVjKShwLCBiLl9kYXRhKTtcbiAgICB9IC8vIHVzZSBmb3J3YXJkIHN1YnN0aXR1dGlvbiB0byByZXNvbHZlIEwgKiB5ID0gYlxuXG5cbiAgICB2YXIgeSA9IGxzb2x2ZShsLCBiKTsgLy8gdXNlIGJhY2t3YXJkIHN1YnN0aXR1dGlvbiB0byByZXNvbHZlIFUgKiB4ID0geVxuXG4gICAgdmFyIHggPSB1c29sdmUodSwgeSk7IC8vIGFwcGx5IGNvbHVtbiBwZXJtdXRhdGlvbnMgaWYgbmVlZGVkICh4IGlzIGEgRGVuc2VNYXRyaXgpXG5cbiAgICBpZiAocSkge1xuICAgICAgeC5fZGF0YSA9ICgwLCBfY3NJcHZlYy5jc0lwdmVjKShxLCB4Ll9kYXRhKTtcbiAgICB9IC8vIHJldHVybiBzb2x1dGlvblxuXG5cbiAgICByZXR1cm4geDtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZUx1c29sdmUgPSBjcmVhdGVMdXNvbHZlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVVc29sdmUgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX3NvbHZlVmFsaWRhdGlvbiA9IHJlcXVpcmUoXCIuL3V0aWxzL3NvbHZlVmFsaWRhdGlvblwiKTtcblxudmFyIG5hbWUgPSAndXNvbHZlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdkaXZpZGVTY2FsYXInLCAnbXVsdGlwbHlTY2FsYXInLCAnc3VidHJhY3QnLCAnZXF1YWxTY2FsYXInLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVVc29sdmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBkaXZpZGVTY2FsYXIgPSBfcmVmLmRpdmlkZVNjYWxhcixcbiAgICAgIG11bHRpcGx5U2NhbGFyID0gX3JlZi5tdWx0aXBseVNjYWxhcixcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcbiAgdmFyIHNvbHZlVmFsaWRhdGlvbiA9ICgwLCBfc29sdmVWYWxpZGF0aW9uLmNyZWF0ZVNvbHZlVmFsaWRhdGlvbikoe1xuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgLyoqXG4gICAqIFNvbHZlcyB0aGUgbGluZWFyIGVxdWF0aW9uIHN5c3RlbSBieSBiYWNrd2FyZCBzdWJzdGl0dXRpb24uIE1hdHJpeCBtdXN0IGJlIGFuIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4LlxuICAgKlxuICAgKiBgVSAqIHggPSBiYFxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgudXNvbHZlKFUsIGIpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBjb25zdCBhID0gW1stMiwgM10sIFsyLCAxXV1cbiAgICogICAgY29uc3QgYiA9IFsxMSwgOV1cbiAgICogICAgY29uc3QgeCA9IHVzb2x2ZShhLCBiKSAgLy8gW1s4XSwgWzldXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgbHVwLCBzbHUsIHVzb2x2ZSwgbHVzb2x2ZVxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeCwgQXJyYXl9IFUgICAgICAgQSBOIHggTiBtYXRyaXggb3IgYXJyYXkgKFUpXG4gICAqIEBwYXJhbSB7TWF0cml4LCBBcnJheX0gYiAgICAgICBBIGNvbHVtbiB2ZWN0b3Igd2l0aCB0aGUgYiB2YWx1ZXNcbiAgICpcbiAgICogQHJldHVybiB7RGVuc2VNYXRyaXggfCBBcnJheX0gIEEgY29sdW1uIHZlY3RvciB3aXRoIHRoZSBsaW5lYXIgc3lzdGVtIHNvbHV0aW9uICh4KVxuICAgKi9cblxuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdTcGFyc2VNYXRyaXgsIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QXJyYXlNYXRyaXgobSwgYikge1xuICAgICAgLy8gcHJvY2VzcyBtYXRyaXhcbiAgICAgIHJldHVybiBfc3BhcnNlQmFja3dhcmRTdWJzdGl0dXRpb24obSwgYik7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBcnJheU1hdHJpeChtLCBiKSB7XG4gICAgICAvLyBwcm9jZXNzIG1hdHJpeFxuICAgICAgcmV0dXJuIF9kZW5zZUJhY2t3YXJkU3Vic3RpdHV0aW9uKG0sIGIpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5QXJyYXlNYXRyaXgoYSwgYikge1xuICAgICAgLy8gY3JlYXRlIGRlbnNlIG1hdHJpeCBmcm9tIGFycmF5XG4gICAgICB2YXIgbSA9IG1hdHJpeChhKTsgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuXG4gICAgICB2YXIgciA9IF9kZW5zZUJhY2t3YXJkU3Vic3RpdHV0aW9uKG0sIGIpOyAvLyByZXN1bHRcblxuXG4gICAgICByZXR1cm4gci52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBfZGVuc2VCYWNrd2FyZFN1YnN0aXR1dGlvbihtLCBiKSB7XG4gICAgLy8gdmFsaWRhdGUgbWF0cml4IGFuZCB2ZWN0b3IsIHJldHVybiBjb3B5IG9mIGNvbHVtbiB2ZWN0b3IgYlxuICAgIGIgPSBzb2x2ZVZhbGlkYXRpb24obSwgYiwgdHJ1ZSk7IC8vIGNvbHVtbiB2ZWN0b3IgZGF0YVxuXG4gICAgdmFyIGJkYXRhID0gYi5fZGF0YTsgLy8gcm93cyAmIGNvbHVtbnNcblxuICAgIHZhciByb3dzID0gbS5fc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IG0uX3NpemVbMV07IC8vIHJlc3VsdFxuXG4gICAgdmFyIHggPSBbXTsgLy8gYXJyYXlzXG5cbiAgICB2YXIgZGF0YSA9IG0uX2RhdGE7IC8vIGJhY2t3YXJkIHNvbHZlIG0gKiB4ID0gYiwgbG9vcCBjb2x1bW5zIChiYWNrd2FyZHMpXG5cbiAgICBmb3IgKHZhciBqID0gY29sdW1ucyAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgICAvLyBiW2pdXG4gICAgICB2YXIgYmogPSBiZGF0YVtqXVswXSB8fCAwOyAvLyB4W2pdXG5cbiAgICAgIHZhciB4aiA9IHZvaWQgMDsgLy8gYmFja3dhcmQgc3Vic3RpdHV0aW9uIChvdXRlciBwcm9kdWN0KSBhdm9pZHMgaW5uZXIgbG9vcGluZyB3aGVuIGJqID09PSAwXG5cbiAgICAgIGlmICghZXF1YWxTY2FsYXIoYmosIDApKSB7XG4gICAgICAgIC8vIHZhbHVlIEAgW2osIGpdXG4gICAgICAgIHZhciB2amogPSBkYXRhW2pdW2pdOyAvLyBjaGVjayB2ampcblxuICAgICAgICBpZiAoZXF1YWxTY2FsYXIodmpqLCAwKSkge1xuICAgICAgICAgIC8vIHN5c3RlbSBjYW5ub3QgYmUgc29sdmVkXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdMaW5lYXIgc3lzdGVtIGNhbm5vdCBiZSBzb2x2ZWQgc2luY2UgbWF0cml4IGlzIHNpbmd1bGFyJyk7XG4gICAgICAgIH0gLy8gY2FsY3VsYXRlIHhqXG5cblxuICAgICAgICB4aiA9IGRpdmlkZVNjYWxhcihiaiwgdmpqKTsgLy8gbG9vcCByb3dzXG5cbiAgICAgICAgZm9yICh2YXIgaSA9IGogLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIC8vIHVwZGF0ZSBjb3B5IG9mIGJcbiAgICAgICAgICBiZGF0YVtpXSA9IFtzdWJ0cmFjdChiZGF0YVtpXVswXSB8fCAwLCBtdWx0aXBseVNjYWxhcih4aiwgZGF0YVtpXVtqXSkpXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gemVybyB2YWx1ZSBAIGpcbiAgICAgICAgeGogPSAwO1xuICAgICAgfSAvLyB1cGRhdGUgeFxuXG5cbiAgICAgIHhbal0gPSBbeGpdO1xuICAgIH0gLy8gcmV0dXJuIGNvbHVtbiB2ZWN0b3JcblxuXG4gICAgcmV0dXJuIG5ldyBEZW5zZU1hdHJpeCh7XG4gICAgICBkYXRhOiB4LFxuICAgICAgc2l6ZTogW3Jvd3MsIDFdXG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBfc3BhcnNlQmFja3dhcmRTdWJzdGl0dXRpb24obSwgYikge1xuICAgIC8vIHZhbGlkYXRlIG1hdHJpeCBhbmQgdmVjdG9yLCByZXR1cm4gY29weSBvZiBjb2x1bW4gdmVjdG9yIGJcbiAgICBiID0gc29sdmVWYWxpZGF0aW9uKG0sIGIsIHRydWUpOyAvLyBjb2x1bW4gdmVjdG9yIGRhdGFcblxuICAgIHZhciBiZGF0YSA9IGIuX2RhdGE7IC8vIHJvd3MgJiBjb2x1bW5zXG5cbiAgICB2YXIgcm93cyA9IG0uX3NpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSBtLl9zaXplWzFdOyAvLyBtYXRyaXggYXJyYXlzXG5cbiAgICB2YXIgdmFsdWVzID0gbS5fdmFsdWVzO1xuICAgIHZhciBpbmRleCA9IG0uX2luZGV4O1xuICAgIHZhciBwdHIgPSBtLl9wdHI7IC8vIHZhcnNcblxuICAgIHZhciBpLCBrOyAvLyByZXN1bHRcblxuICAgIHZhciB4ID0gW107IC8vIGJhY2t3YXJkIHNvbHZlIG0gKiB4ID0gYiwgbG9vcCBjb2x1bW5zIChiYWNrd2FyZHMpXG5cbiAgICBmb3IgKHZhciBqID0gY29sdW1ucyAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgICAvLyBiW2pdXG4gICAgICB2YXIgYmogPSBiZGF0YVtqXVswXSB8fCAwOyAvLyBiYWNrd2FyZCBzdWJzdGl0dXRpb24gKG91dGVyIHByb2R1Y3QpIGF2b2lkcyBpbm5lciBsb29waW5nIHdoZW4gYmogPT09IDBcblxuICAgICAgaWYgKCFlcXVhbFNjYWxhcihiaiwgMCkpIHtcbiAgICAgICAgLy8gdmFsdWUgQCBbaiwgal1cbiAgICAgICAgdmFyIHZqaiA9IDA7IC8vIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4IHZhbHVlcyAmIGluZGV4IChjb2x1bW4gailcblxuICAgICAgICB2YXIganZhbHVlcyA9IFtdO1xuICAgICAgICB2YXIgamluZGV4ID0gW107IC8vIGZpcnN0ICYgbGFzdCBpbmRlY2VzIGluIGNvbHVtblxuXG4gICAgICAgIHZhciBmID0gcHRyW2pdO1xuICAgICAgICB2YXIgbCA9IHB0cltqICsgMV07IC8vIHZhbHVlcyBpbiBjb2x1bW4sIGZpbmQgdmFsdWUgQCBbaiwgal0sIGxvb3AgYmFja3dhcmRzXG5cbiAgICAgICAgZm9yIChrID0gbCAtIDE7IGsgPj0gZjsgay0tKSB7XG4gICAgICAgICAgLy8gcm93XG4gICAgICAgICAgaSA9IGluZGV4W2tdOyAvLyBjaGVjayByb3dcblxuICAgICAgICAgIGlmIChpID09PSBqKSB7XG4gICAgICAgICAgICAvLyB1cGRhdGUgdmpqXG4gICAgICAgICAgICB2amogPSB2YWx1ZXNba107XG4gICAgICAgICAgfSBlbHNlIGlmIChpIDwgaikge1xuICAgICAgICAgICAgLy8gc3RvcmUgdXBwZXIgdHJpYW5ndWxhclxuICAgICAgICAgICAganZhbHVlcy5wdXNoKHZhbHVlc1trXSk7XG4gICAgICAgICAgICBqaW5kZXgucHVzaChpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gYXQgdGhpcyBwb2ludCB3ZSBtdXN0IGhhdmUgYSB2YWx1ZSBAIFtqLCBqXVxuXG5cbiAgICAgICAgaWYgKGVxdWFsU2NhbGFyKHZqaiwgMCkpIHtcbiAgICAgICAgICAvLyBzeXN0ZW0gY2Fubm90IGJlIHNvbHZlZCwgdGhlcmUgaXMgbm8gdmFsdWUgQCBbaiwgal1cbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0xpbmVhciBzeXN0ZW0gY2Fubm90IGJlIHNvbHZlZCBzaW5jZSBtYXRyaXggaXMgc2luZ3VsYXInKTtcbiAgICAgICAgfSAvLyBjYWxjdWxhdGUgeGpcblxuXG4gICAgICAgIHZhciB4aiA9IGRpdmlkZVNjYWxhcihiaiwgdmpqKTsgLy8gbG9vcCB1cHBlciB0cmlhbmd1bGFyXG5cbiAgICAgICAgZm9yIChrID0gMCwgbCA9IGppbmRleC5sZW5ndGg7IGsgPCBsOyBrKyspIHtcbiAgICAgICAgICAvLyByb3dcbiAgICAgICAgICBpID0gamluZGV4W2tdOyAvLyB1cGRhdGUgY29weSBvZiBiXG5cbiAgICAgICAgICBiZGF0YVtpXSA9IFtzdWJ0cmFjdChiZGF0YVtpXVswXSwgbXVsdGlwbHlTY2FsYXIoeGosIGp2YWx1ZXNba10pKV07XG4gICAgICAgIH0gLy8gdXBkYXRlIHhcblxuXG4gICAgICAgIHhbal0gPSBbeGpdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdXBkYXRlIHhcbiAgICAgICAgeFtqXSA9IFswXTtcbiAgICAgIH1cbiAgICB9IC8vIHJldHVybiB2ZWN0b3JcblxuXG4gICAgcmV0dXJuIG5ldyBEZW5zZU1hdHJpeCh7XG4gICAgICBkYXRhOiB4LFxuICAgICAgc2l6ZTogW3Jvd3MsIDFdXG4gICAgfSk7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVVc29sdmUgPSBjcmVhdGVVc29sdmU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNvbHZlVmFsaWRhdGlvbiA9IGNyZWF0ZVNvbHZlVmFsaWRhdGlvbjtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi8uLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi8uLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vdXRpbHMvc3RyaW5nXCIpO1xuXG5mdW5jdGlvbiBjcmVhdGVTb2x2ZVZhbGlkYXRpb24oX3JlZikge1xuICB2YXIgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgbWF0cml4IGFuZCBjb2x1bW4gdmVjdG9yIGIgZm9yIGJhY2t3YXJkL2ZvcndhcmQgc3Vic3RpdHV0aW9uIGFsZ29yaXRobXMuXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSBtICAgICAgICAgICAgQW4gTiB4IE4gbWF0cml4XG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IGIgICAgQSBjb2x1bW4gdmVjdG9yXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gY29weSAgICAgICAgUmV0dXJuIGEgY29weSBvZiB2ZWN0b3IgYlxuICAgKlxuICAgKiBAcmV0dXJuIHtEZW5zZU1hdHJpeH0gICAgICAgIERlbnNlIGNvbHVtbiB2ZWN0b3IgYlxuICAgKi9cbiAgcmV0dXJuIGZ1bmN0aW9uIHNvbHZlVmFsaWRhdGlvbihtLCBiLCBjb3B5KSB7XG4gICAgLy8gbWF0cml4IHNpemVcbiAgICB2YXIgc2l6ZSA9IG0uc2l6ZSgpOyAvLyB2YWxpZGF0ZSBtYXRyaXggZGltZW5zaW9uc1xuXG4gICAgaWYgKHNpemUubGVuZ3RoICE9PSAyKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgdHdvIGRpbWVuc2lvbmFsIChzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShzaXplKSArICcpJyk7XG4gICAgfSAvLyByb3dzICYgY29sdW1uc1xuXG5cbiAgICB2YXIgcm93cyA9IHNpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSBzaXplWzFdOyAvLyB2YWxpZGF0ZSByb3dzICYgY29sdW1uc1xuXG4gICAgaWYgKHJvd3MgIT09IGNvbHVtbnMpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggbXVzdCBiZSBzcXVhcmUgKHNpemU6ICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKHNpemUpICsgJyknKTtcbiAgICB9IC8vIHZhcnNcblxuXG4gICAgdmFyIGRhdGEsIGksIGJkYXRhOyAvLyBjaGVjayBiIGlzIG1hdHJpeFxuXG4gICAgaWYgKCgwLCBfaXMuaXNNYXRyaXgpKGIpKSB7XG4gICAgICAvLyBtYXRyaXggc2l6ZVxuICAgICAgdmFyIG1zaXplID0gYi5zaXplKCk7IC8vIHZlY3RvclxuXG4gICAgICBpZiAobXNpemUubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIC8vIGNoZWNrIHZlY3RvciBsZW5ndGhcbiAgICAgICAgaWYgKG1zaXplWzBdICE9PSByb3dzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RpbWVuc2lvbiBtaXNtYXRjaC4gTWF0cml4IGNvbHVtbnMgbXVzdCBtYXRjaCB2ZWN0b3IgbGVuZ3RoLicpO1xuICAgICAgICB9IC8vIGNyZWF0ZSBkYXRhIGFycmF5XG5cblxuICAgICAgICBkYXRhID0gW107IC8vIG1hdHJpeCBkYXRhIChEZW5zZU1hdHJpeClcblxuICAgICAgICBiZGF0YSA9IGIuX2RhdGE7IC8vIGxvb3AgYiBkYXRhXG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAgIC8vIHJvdyBhcnJheVxuICAgICAgICAgIGRhdGFbaV0gPSBbYmRhdGFbaV1dO1xuICAgICAgICB9IC8vIHJldHVybiBEZW5zZSBNYXRyaXhcblxuXG4gICAgICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoe1xuICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgc2l6ZTogW3Jvd3MsIDFdLFxuICAgICAgICAgIGRhdGF0eXBlOiBiLl9kYXRhdHlwZVxuICAgICAgICB9KTtcbiAgICAgIH0gLy8gdHdvIGRpbWVuc2lvbnNcblxuXG4gICAgICBpZiAobXNpemUubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIC8vIGFycmF5IG11c3QgYmUgYSBjb2x1bW4gdmVjdG9yXG4gICAgICAgIGlmIChtc2l6ZVswXSAhPT0gcm93cyB8fCBtc2l6ZVsxXSAhPT0gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdEaW1lbnNpb24gbWlzbWF0Y2guIE1hdHJpeCBjb2x1bW5zIG11c3QgbWF0Y2ggdmVjdG9yIGxlbmd0aC4nKTtcbiAgICAgICAgfSAvLyBjaGVjayBtYXRyaXggdHlwZVxuXG5cbiAgICAgICAgaWYgKCgwLCBfaXMuaXNEZW5zZU1hdHJpeCkoYikpIHtcbiAgICAgICAgICAvLyBjaGVjayBhIGNvcHkgaXMgbmVlZGVkXG4gICAgICAgICAgaWYgKGNvcHkpIHtcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBkYXRhIGFycmF5XG4gICAgICAgICAgICBkYXRhID0gW107IC8vIG1hdHJpeCBkYXRhIChEZW5zZU1hdHJpeClcblxuICAgICAgICAgICAgYmRhdGEgPSBiLl9kYXRhOyAvLyBsb29wIGIgZGF0YVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgICAgIC8vIHJvdyBhcnJheVxuICAgICAgICAgICAgICBkYXRhW2ldID0gW2JkYXRhW2ldWzBdXTtcbiAgICAgICAgICAgIH0gLy8gcmV0dXJuIERlbnNlIE1hdHJpeFxuXG5cbiAgICAgICAgICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoe1xuICAgICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgICBzaXplOiBbcm93cywgMV0sXG4gICAgICAgICAgICAgIGRhdGF0eXBlOiBiLl9kYXRhdHlwZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSAvLyBiIGlzIGFscmVhZHkgYSBjb2x1bW4gdmVjdG9yXG5cblxuICAgICAgICAgIHJldHVybiBiO1xuICAgICAgICB9IC8vIGNyZWF0ZSBkYXRhIGFycmF5XG5cblxuICAgICAgICBkYXRhID0gW107XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAgIGRhdGFbaV0gPSBbMF07XG4gICAgICAgIH0gLy8gc3BhcnNlIG1hdHJpeCBhcnJheXNcblxuXG4gICAgICAgIHZhciB2YWx1ZXMgPSBiLl92YWx1ZXM7XG4gICAgICAgIHZhciBpbmRleCA9IGIuX2luZGV4O1xuICAgICAgICB2YXIgcHRyID0gYi5fcHRyOyAvLyBsb29wIHZhbHVlcyBpbiBjb2x1bW4gMFxuXG4gICAgICAgIGZvciAodmFyIGsxID0gcHRyWzFdLCBrID0gcHRyWzBdOyBrIDwgazE7IGsrKykge1xuICAgICAgICAgIC8vIHJvd1xuICAgICAgICAgIGkgPSBpbmRleFtrXTsgLy8gYWRkIHRvIGRhdGFcblxuICAgICAgICAgIGRhdGFbaV1bMF0gPSB2YWx1ZXNba107XG4gICAgICAgIH0gLy8gcmV0dXJuIERlbnNlIE1hdHJpeFxuXG5cbiAgICAgICAgcmV0dXJuIG5ldyBEZW5zZU1hdHJpeCh7XG4gICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICBzaXplOiBbcm93cywgMV0sXG4gICAgICAgICAgZGF0YXR5cGU6IGIuX2RhdGF0eXBlXG4gICAgICAgIH0pO1xuICAgICAgfSAvLyB0aHJvdyBlcnJvclxuXG5cbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdEaW1lbnNpb24gbWlzbWF0Y2guIE1hdHJpeCBjb2x1bW5zIG11c3QgbWF0Y2ggdmVjdG9yIGxlbmd0aC4nKTtcbiAgICB9IC8vIGNoZWNrIGIgaXMgYXJyYXlcblxuXG4gICAgaWYgKCgwLCBfaXMuaXNBcnJheSkoYikpIHtcbiAgICAgIC8vIHNpemVcbiAgICAgIHZhciBhc2l6ZSA9ICgwLCBfYXJyYXkuYXJyYXlTaXplKShiKTsgLy8gY2hlY2sgbWF0cml4IGRpbWVuc2lvbnMsIHZlY3RvclxuXG4gICAgICBpZiAoYXNpemUubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIC8vIGNoZWNrIHZlY3RvciBsZW5ndGhcbiAgICAgICAgaWYgKGFzaXplWzBdICE9PSByb3dzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RpbWVuc2lvbiBtaXNtYXRjaC4gTWF0cml4IGNvbHVtbnMgbXVzdCBtYXRjaCB2ZWN0b3IgbGVuZ3RoLicpO1xuICAgICAgICB9IC8vIGNyZWF0ZSBkYXRhIGFycmF5XG5cblxuICAgICAgICBkYXRhID0gW107IC8vIGxvb3AgYlxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgICAvLyByb3cgYXJyYXlcbiAgICAgICAgICBkYXRhW2ldID0gW2JbaV1dO1xuICAgICAgICB9IC8vIHJldHVybiBEZW5zZSBNYXRyaXhcblxuXG4gICAgICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoe1xuICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgc2l6ZTogW3Jvd3MsIDFdXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoYXNpemUubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIC8vIGFycmF5IG11c3QgYmUgYSBjb2x1bW4gdmVjdG9yXG4gICAgICAgIGlmIChhc2l6ZVswXSAhPT0gcm93cyB8fCBhc2l6ZVsxXSAhPT0gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdEaW1lbnNpb24gbWlzbWF0Y2guIE1hdHJpeCBjb2x1bW5zIG11c3QgbWF0Y2ggdmVjdG9yIGxlbmd0aC4nKTtcbiAgICAgICAgfSAvLyBjcmVhdGUgZGF0YSBhcnJheVxuXG5cbiAgICAgICAgZGF0YSA9IFtdOyAvLyBsb29wIGIgZGF0YVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgICAvLyByb3cgYXJyYXlcbiAgICAgICAgICBkYXRhW2ldID0gW2JbaV1bMF1dO1xuICAgICAgICB9IC8vIHJldHVybiBEZW5zZSBNYXRyaXhcblxuXG4gICAgICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoe1xuICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgc2l6ZTogW3Jvd3MsIDFdXG4gICAgICAgIH0pO1xuICAgICAgfSAvLyB0aHJvdyBlcnJvclxuXG5cbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdEaW1lbnNpb24gbWlzbWF0Y2guIE1hdHJpeCBjb2x1bW5zIG11c3QgbWF0Y2ggdmVjdG9yIGxlbmd0aC4nKTtcbiAgICB9XG4gIH07XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNzQW1kID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jc0ZrZWVwID0gcmVxdWlyZShcIi4vY3NGa2VlcFwiKTtcblxudmFyIF9jc0ZsaXAgPSByZXF1aXJlKFwiLi9jc0ZsaXBcIik7XG5cbnZhciBfY3NUZGZzID0gcmVxdWlyZShcIi4vY3NUZGZzXCIpO1xuXG52YXIgbmFtZSA9ICdjc0FtZCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydhZGQnLCAnbXVsdGlwbHknLCAndHJhbnNwb3NlJ107XG52YXIgY3JlYXRlQ3NBbWQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgYWRkID0gX3JlZi5hZGQsXG4gICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHksXG4gICAgICB0cmFuc3Bvc2UgPSBfcmVmLnRyYW5zcG9zZTtcblxuICAvKipcbiAgICogQXBwcm94aW1hdGUgbWluaW11bSBkZWdyZWUgb3JkZXJpbmcuIFRoZSBtaW5pbXVtIGRlZ3JlZSBhbGdvcml0aG0gaXMgYSB3aWRlbHkgdXNlZFxuICAgKiBoZXVyaXN0aWMgZm9yIGZpbmRpbmcgYSBwZXJtdXRhdGlvbiBQIHNvIHRoYXQgUCpBKlAnIGhhcyBmZXdlciBub256ZXJvcyBpbiBpdHMgZmFjdG9yaXphdGlvblxuICAgKiB0aGFuIEEuIEl0IGlzIGEgZ3JlYWR5IG1ldGhvZCB0aGF0IHNlbGVjdHMgdGhlIHNwYXJzZXN0IHBpdm90IHJvdyBhbmQgY29sdW1uIGR1cmluZyB0aGUgY291cnNlXG4gICAqIG9mIGEgcmlnaHQgbG9va2luZyBzcGFyc2UgQ2hvbGVza3kgZmFjdG9yaXphdGlvbi5cbiAgICpcbiAgICogUmVmZXJlbmNlOiBodHRwOi8vZmFjdWx0eS5jc2UudGFtdS5lZHUvZGF2aXMvcHVibGljYXRpb25zLmh0bWxcbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXJ9IG9yZGVyICAgIDA6IE5hdHVyYWwsIDE6IENob2xlc2t5LCAyOiBMVSwgMzogUVJcbiAgICogQHBhcmFtIHtNYXRyaXh9IG0gICAgICAgIFNwYXJzZSBNYXRyaXhcbiAgICovXG4gIHJldHVybiBmdW5jdGlvbiBjc0FtZChvcmRlciwgYSkge1xuICAgIC8vIGNoZWNrIGlucHV0IHBhcmFtZXRlcnNcbiAgICBpZiAoIWEgfHwgb3JkZXIgPD0gMCB8fCBvcmRlciA+IDMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gLy8gYSBtYXRyaXggYXJyYXlzXG5cblxuICAgIHZhciBhc2l6ZSA9IGEuX3NpemU7IC8vIHJvd3MgYW5kIGNvbHVtbnNcblxuICAgIHZhciBtID0gYXNpemVbMF07XG4gICAgdmFyIG4gPSBhc2l6ZVsxXTsgLy8gaW5pdGlhbGl6ZSB2YXJzXG5cbiAgICB2YXIgbGVtYXggPSAwOyAvLyBkZW5zZSB0aHJlc2hvbGRcblxuICAgIHZhciBkZW5zZSA9IE1hdGgubWF4KDE2LCAxMCAqIE1hdGguc3FydChuKSk7XG4gICAgZGVuc2UgPSBNYXRoLm1pbihuIC0gMiwgZGVuc2UpOyAvLyBjcmVhdGUgdGFyZ2V0IG1hdHJpeCBDXG5cbiAgICB2YXIgY20gPSBfY3JlYXRlVGFyZ2V0TWF0cml4KG9yZGVyLCBhLCBtLCBuLCBkZW5zZSk7IC8vIGRyb3AgZGlhZ29uYWwgZW50cmllc1xuXG5cbiAgICAoMCwgX2NzRmtlZXAuY3NGa2VlcCkoY20sIF9kaWFnLCBudWxsKTsgLy8gQyBtYXRyaXggYXJyYXlzXG5cbiAgICB2YXIgY2luZGV4ID0gY20uX2luZGV4O1xuICAgIHZhciBjcHRyID0gY20uX3B0cjsgLy8gbnVtYmVyIG9mIG5vbnplcm8gZWxlbWVudHMgaW4gQ1xuXG4gICAgdmFyIGNueiA9IGNwdHJbbl07IC8vIGFsbG9jYXRlIHJlc3VsdCAobisxKVxuXG4gICAgdmFyIFAgPSBbXTsgLy8gY3JlYXRlIHdvcmtzcGFjZSAoOCAqIChuICsgMSkpXG5cbiAgICB2YXIgVyA9IFtdO1xuICAgIHZhciBsZW4gPSAwOyAvLyBmaXJzdCBuICsgMSBlbnRyaWVzXG5cbiAgICB2YXIgbnYgPSBuICsgMTsgLy8gbmV4dCBuICsgMSBlbnRyaWVzXG5cbiAgICB2YXIgbmV4dCA9IDIgKiAobiArIDEpOyAvLyBuZXh0IG4gKyAxIGVudHJpZXNcblxuICAgIHZhciBoZWFkID0gMyAqIChuICsgMSk7IC8vIG5leHQgbiArIDEgZW50cmllc1xuXG4gICAgdmFyIGVsZW4gPSA0ICogKG4gKyAxKTsgLy8gbmV4dCBuICsgMSBlbnRyaWVzXG5cbiAgICB2YXIgZGVncmVlID0gNSAqIChuICsgMSk7IC8vIG5leHQgbiArIDEgZW50cmllc1xuXG4gICAgdmFyIHcgPSA2ICogKG4gKyAxKTsgLy8gbmV4dCBuICsgMSBlbnRyaWVzXG5cbiAgICB2YXIgaGhlYWQgPSA3ICogKG4gKyAxKTsgLy8gbGFzdCBuICsgMSBlbnRyaWVzXG4gICAgLy8gdXNlIFAgYXMgd29ya3NwYWNlIGZvciBsYXN0XG5cbiAgICB2YXIgbGFzdCA9IFA7IC8vIGluaXRpYWxpemUgcXVvdGllbnQgZ3JhcGhcblxuICAgIHZhciBtYXJrID0gX2luaXRpYWxpemVRdW90aWVudEdyYXBoKG4sIGNwdHIsIFcsIGxlbiwgaGVhZCwgbGFzdCwgbmV4dCwgaGhlYWQsIG52LCB3LCBlbGVuLCBkZWdyZWUpOyAvLyBpbml0aWFsaXplIGRlZ3JlZSBsaXN0c1xuXG5cbiAgICB2YXIgbmVsID0gX2luaXRpYWxpemVEZWdyZWVMaXN0cyhuLCBjcHRyLCBXLCBkZWdyZWUsIGVsZW4sIHcsIGRlbnNlLCBudiwgaGVhZCwgbGFzdCwgbmV4dCk7IC8vIG1pbmltdW0gZGVncmVlIG5vZGVcblxuXG4gICAgdmFyIG1pbmRlZyA9IDA7IC8vIHZhcnNcblxuICAgIHZhciBpLCBqLCBrLCBrMSwgazIsIGUsIHBqLCBsbiwgbnZpLCBwaywgZWxuLCBwMSwgcDIsIHBuLCBoLCBkOyAvLyB3aGlsZSAoc2VsZWN0aW5nIHBpdm90cykgZG9cblxuICAgIHdoaWxlIChuZWwgPCBuKSB7XG4gICAgICAvLyBzZWxlY3Qgbm9kZSBvZiBtaW5pbXVtIGFwcHJveGltYXRlIGRlZ3JlZS4gYW1kKCkgaXMgbm93IHJlYWR5IHRvIHN0YXJ0IGVsaW1pbmF0aW5nIHRoZSBncmFwaC4gSXQgZmlyc3RcbiAgICAgIC8vIGZpbmRzIGEgbm9kZSBrIG9mIG1pbmltdW0gZGVncmVlIGFuZCByZW1vdmVzIGl0IGZyb20gaXRzIGRlZ3JlZSBsaXN0LiBUaGUgdmFyaWFibGUgbmVsIGtlZXBzIHRyYWNrIG9mIHRob3dcbiAgICAgIC8vIG1hbnkgbm9kZXMgaGF2ZSBiZWVuIGVsaW1pbmF0ZWQuXG4gICAgICBmb3IgKGsgPSAtMTsgbWluZGVnIDwgbiAmJiAoayA9IFdbaGVhZCArIG1pbmRlZ10pID09PSAtMTsgbWluZGVnKyspIHtcbiAgICAgICAgO1xuICAgICAgfVxuXG4gICAgICBpZiAoV1tuZXh0ICsga10gIT09IC0xKSB7XG4gICAgICAgIGxhc3RbV1tuZXh0ICsga11dID0gLTE7XG4gICAgICB9IC8vIHJlbW92ZSBrIGZyb20gZGVncmVlIGxpc3RcblxuXG4gICAgICBXW2hlYWQgKyBtaW5kZWddID0gV1tuZXh0ICsga107IC8vIGVsZW5rID0gfEVrfFxuXG4gICAgICB2YXIgZWxlbmsgPSBXW2VsZW4gKyBrXTsgLy8gIyBvZiBub2RlcyBrIHJlcHJlc2VudHNcblxuICAgICAgdmFyIG52ayA9IFdbbnYgKyBrXTsgLy8gV1tudiArIGtdIG5vZGVzIG9mIEEgZWxpbWluYXRlZFxuXG4gICAgICBuZWwgKz0gbnZrOyAvLyBDb25zdHJ1Y3QgYSBuZXcgZWxlbWVudC4gVGhlIG5ldyBlbGVtZW50IExrIGlzIGNvbnN0cnVjdGVkIGluIHBsYWNlIGlmIHxFa3wgPSAwLiBudltpXSBpc1xuICAgICAgLy8gbmVnYXRlZCBmb3IgYWxsIG5vZGVzIGkgaW4gTGsgdG8gZmxhZyB0aGVtIGFzIG1lbWJlcnMgb2YgdGhpcyBzZXQuIEVhY2ggbm9kZSBpIGlzIHJlbW92ZWQgZnJvbSB0aGVcbiAgICAgIC8vIGRlZ3JlZSBsaXN0cy4gQWxsIGVsZW1lbnRzIGUgaW4gRWsgYXJlIGFic29ydmVkIGludG8gZWxlbWVudCBrLlxuXG4gICAgICB2YXIgZGsgPSAwOyAvLyBmbGFnIGsgYXMgaW4gTGtcblxuICAgICAgV1tudiArIGtdID0gLW52aztcbiAgICAgIHZhciBwID0gY3B0cltrXTsgLy8gZG8gaW4gcGxhY2UgaWYgV1tlbGVuICsga10gPT09IDBcblxuICAgICAgdmFyIHBrMSA9IGVsZW5rID09PSAwID8gcCA6IGNuejtcbiAgICAgIHZhciBwazIgPSBwazE7XG5cbiAgICAgIGZvciAoazEgPSAxOyBrMSA8PSBlbGVuayArIDE7IGsxKyspIHtcbiAgICAgICAgaWYgKGsxID4gZWxlbmspIHtcbiAgICAgICAgICAvLyBzZWFyY2ggdGhlIG5vZGVzIGluIGtcbiAgICAgICAgICBlID0gazsgLy8gbGlzdCBvZiBub2RlcyBzdGFydHMgYXQgY2luZGV4W3BqXVxuXG4gICAgICAgICAgcGogPSBwOyAvLyBsZW5ndGggb2YgbGlzdCBvZiBub2RlcyBpbiBrXG5cbiAgICAgICAgICBsbiA9IFdbbGVuICsga10gLSBlbGVuaztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBzZWFyY2ggdGhlIG5vZGVzIGluIGVcbiAgICAgICAgICBlID0gY2luZGV4W3ArK107XG4gICAgICAgICAgcGogPSBjcHRyW2VdOyAvLyBsZW5ndGggb2YgbGlzdCBvZiBub2RlcyBpbiBlXG5cbiAgICAgICAgICBsbiA9IFdbbGVuICsgZV07XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGsyID0gMTsgazIgPD0gbG47IGsyKyspIHtcbiAgICAgICAgICBpID0gY2luZGV4W3BqKytdOyAvLyBjaGVjayAgbm9kZSBpIGRlYWQsIG9yIHNlZW5cblxuICAgICAgICAgIGlmICgobnZpID0gV1tudiArIGldKSA8PSAwKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IC8vIFdbZGVncmVlICsgTGtdICs9IHNpemUgb2Ygbm9kZSBpXG5cblxuICAgICAgICAgIGRrICs9IG52aTsgLy8gbmVnYXRlIFdbbnYgKyBpXSB0byBkZW5vdGUgaSBpbiBMa1xuXG4gICAgICAgICAgV1tudiArIGldID0gLW52aTsgLy8gcGxhY2UgaSBpbiBMa1xuXG4gICAgICAgICAgY2luZGV4W3BrMisrXSA9IGk7XG5cbiAgICAgICAgICBpZiAoV1tuZXh0ICsgaV0gIT09IC0xKSB7XG4gICAgICAgICAgICBsYXN0W1dbbmV4dCArIGldXSA9IGxhc3RbaV07XG4gICAgICAgICAgfSAvLyBjaGVjayB3ZSBuZWVkIHRvIHJlbW92ZSBpIGZyb20gZGVncmVlIGxpc3RcblxuXG4gICAgICAgICAgaWYgKGxhc3RbaV0gIT09IC0xKSB7XG4gICAgICAgICAgICBXW25leHQgKyBsYXN0W2ldXSA9IFdbbmV4dCArIGldO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBXW2hlYWQgKyBXW2RlZ3JlZSArIGldXSA9IFdbbmV4dCArIGldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlICE9PSBrKSB7XG4gICAgICAgICAgLy8gYWJzb3JiIGUgaW50byBrXG4gICAgICAgICAgY3B0cltlXSA9ICgwLCBfY3NGbGlwLmNzRmxpcCkoayk7IC8vIGUgaXMgbm93IGEgZGVhZCBlbGVtZW50XG5cbiAgICAgICAgICBXW3cgKyBlXSA9IDA7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gY2luZGV4W2Nuei4uLm56bWF4XSBpcyBmcmVlXG5cblxuICAgICAgaWYgKGVsZW5rICE9PSAwKSB7XG4gICAgICAgIGNueiA9IHBrMjtcbiAgICAgIH0gLy8gZXh0ZXJuYWwgZGVncmVlIG9mIGsgLSB8TGtcXGl8XG5cblxuICAgICAgV1tkZWdyZWUgKyBrXSA9IGRrOyAvLyBlbGVtZW50IGsgaXMgaW4gY2luZGV4W3BrMS4ucGsyLTFdXG5cbiAgICAgIGNwdHJba10gPSBwazE7XG4gICAgICBXW2xlbiArIGtdID0gcGsyIC0gcGsxOyAvLyBrIGlzIG5vdyBhbiBlbGVtZW50XG5cbiAgICAgIFdbZWxlbiArIGtdID0gLTI7IC8vIEZpbmQgc2V0IGRpZmZlcmVuY2VzLiBUaGUgc2NhbjEgZnVuY3Rpb24gbm93IGNvbXB1dGVzIHRoZSBzZXQgZGlmZmVyZW5jZXMgfExlIFxcIExrfCBmb3IgYWxsIGVsZW1lbnRzIGUuIEF0IHRoZSBzdGFydCBvZiB0aGVcbiAgICAgIC8vIHNjYW4sIG5vIGVudHJ5IGluIHRoZSB3IGFycmF5IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBtYXJrLlxuICAgICAgLy8gY2xlYXIgdyBpZiBuZWNlc3NhcnlcblxuICAgICAgbWFyayA9IF93Y2xlYXIobWFyaywgbGVtYXgsIFcsIHcsIG4pOyAvLyBzY2FuIDE6IGZpbmQgfExlXFxMa3xcblxuICAgICAgZm9yIChwayA9IHBrMTsgcGsgPCBwazI7IHBrKyspIHtcbiAgICAgICAgaSA9IGNpbmRleFtwa107IC8vIGNoZWNrIGlmIFdbZWxlbiArIGldIGVtcHR5LCBza2lwIGl0XG5cbiAgICAgICAgaWYgKChlbG4gPSBXW2VsZW4gKyBpXSkgPD0gMCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IC8vIFdbbnYgKyBpXSB3YXMgbmVnYXRlZFxuXG5cbiAgICAgICAgbnZpID0gLVdbbnYgKyBpXTtcbiAgICAgICAgdmFyIHdudmkgPSBtYXJrIC0gbnZpOyAvLyBzY2FuIEVpXG5cbiAgICAgICAgZm9yIChwID0gY3B0cltpXSwgcDEgPSBjcHRyW2ldICsgZWxuIC0gMTsgcCA8PSBwMTsgcCsrKSB7XG4gICAgICAgICAgZSA9IGNpbmRleFtwXTtcblxuICAgICAgICAgIGlmIChXW3cgKyBlXSA+PSBtYXJrKSB7XG4gICAgICAgICAgICAvLyBkZWNyZW1lbnQgfExlXFxMa3xcbiAgICAgICAgICAgIFdbdyArIGVdIC09IG52aTtcbiAgICAgICAgICB9IGVsc2UgaWYgKFdbdyArIGVdICE9PSAwKSB7XG4gICAgICAgICAgICAvLyBlbnN1cmUgZSBpcyBhIGxpdmUgZWxlbWVudCwgMXN0IHRpbWUgZSBzZWVuIGluIHNjYW4gMVxuICAgICAgICAgICAgV1t3ICsgZV0gPSBXW2RlZ3JlZSArIGVdICsgd252aTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gZGVncmVlIHVwZGF0ZVxuICAgICAgLy8gVGhlIHNlY29uZCBwYXNzIGNvbXB1dGVzIHRoZSBhcHByb3hpbWF0ZSBkZWdyZWUgZGksIHBydW5lcyB0aGUgc2V0cyBFaSBhbmQgQWksIGFuZCBjb21wdXRlcyBhIGhhc2hcbiAgICAgIC8vIGZ1bmN0aW9uIGgoaSkgZm9yIGFsbCBub2RlcyBpbiBMay5cbiAgICAgIC8vIHNjYW4yOiBkZWdyZWUgdXBkYXRlXG5cblxuICAgICAgZm9yIChwayA9IHBrMTsgcGsgPCBwazI7IHBrKyspIHtcbiAgICAgICAgLy8gY29uc2lkZXIgbm9kZSBpIGluIExrXG4gICAgICAgIGkgPSBjaW5kZXhbcGtdO1xuICAgICAgICBwMSA9IGNwdHJbaV07XG4gICAgICAgIHAyID0gcDEgKyBXW2VsZW4gKyBpXSAtIDE7XG4gICAgICAgIHBuID0gcDE7IC8vIHNjYW4gRWlcblxuICAgICAgICBmb3IgKGggPSAwLCBkID0gMCwgcCA9IHAxOyBwIDw9IHAyOyBwKyspIHtcbiAgICAgICAgICBlID0gY2luZGV4W3BdOyAvLyBjaGVjayBlIGlzIGFuIHVuYWJzb3JiZWQgZWxlbWVudFxuXG4gICAgICAgICAgaWYgKFdbdyArIGVdICE9PSAwKSB7XG4gICAgICAgICAgICAvLyBkZXh0ID0gfExlXFxMa3xcbiAgICAgICAgICAgIHZhciBkZXh0ID0gV1t3ICsgZV0gLSBtYXJrO1xuXG4gICAgICAgICAgICBpZiAoZGV4dCA+IDApIHtcbiAgICAgICAgICAgICAgLy8gc3VtIHVwIHRoZSBzZXQgZGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgZCArPSBkZXh0OyAvLyBrZWVwIGUgaW4gRWlcblxuICAgICAgICAgICAgICBjaW5kZXhbcG4rK10gPSBlOyAvLyBjb21wdXRlIHRoZSBoYXNoIG9mIG5vZGUgaVxuXG4gICAgICAgICAgICAgIGggKz0gZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIGFnZ3Jlc3NpdmUgYWJzb3JiLiBlLT5rXG4gICAgICAgICAgICAgIGNwdHJbZV0gPSAoMCwgX2NzRmxpcC5jc0ZsaXApKGspOyAvLyBlIGlzIGEgZGVhZCBlbGVtZW50XG5cbiAgICAgICAgICAgICAgV1t3ICsgZV0gPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBXW2VsZW4gKyBpXSA9IHxFaXxcblxuXG4gICAgICAgIFdbZWxlbiArIGldID0gcG4gLSBwMSArIDE7XG4gICAgICAgIHZhciBwMyA9IHBuO1xuICAgICAgICB2YXIgcDQgPSBwMSArIFdbbGVuICsgaV07IC8vIHBydW5lIGVkZ2VzIGluIEFpXG5cbiAgICAgICAgZm9yIChwID0gcDIgKyAxOyBwIDwgcDQ7IHArKykge1xuICAgICAgICAgIGogPSBjaW5kZXhbcF07IC8vIGNoZWNrIG5vZGUgaiBkZWFkIG9yIGluIExrXG5cbiAgICAgICAgICB2YXIgbnZqID0gV1tudiArIGpdO1xuXG4gICAgICAgICAgaWYgKG52aiA8PSAwKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IC8vIGRlZ3JlZShpKSArPSB8anxcblxuXG4gICAgICAgICAgZCArPSBudmo7IC8vIHBsYWNlIGogaW4gbm9kZSBsaXN0IG9mIGlcblxuICAgICAgICAgIGNpbmRleFtwbisrXSA9IGo7IC8vIGNvbXB1dGUgaGFzaCBmb3Igbm9kZSBpXG5cbiAgICAgICAgICBoICs9IGo7XG4gICAgICAgIH0gLy8gY2hlY2sgZm9yIG1hc3MgZWxpbWluYXRpb25cblxuXG4gICAgICAgIGlmIChkID09PSAwKSB7XG4gICAgICAgICAgLy8gYWJzb3JiIGkgaW50byBrXG4gICAgICAgICAgY3B0cltpXSA9ICgwLCBfY3NGbGlwLmNzRmxpcCkoayk7XG4gICAgICAgICAgbnZpID0gLVdbbnYgKyBpXTsgLy8gfExrfCAtPSB8aXxcblxuICAgICAgICAgIGRrIC09IG52aTsgLy8gfGt8ICs9IFdbbnYgKyBpXVxuXG4gICAgICAgICAgbnZrICs9IG52aTtcbiAgICAgICAgICBuZWwgKz0gbnZpO1xuICAgICAgICAgIFdbbnYgKyBpXSA9IDA7IC8vIG5vZGUgaSBpcyBkZWFkXG5cbiAgICAgICAgICBXW2VsZW4gKyBpXSA9IC0xO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHVwZGF0ZSBkZWdyZWUoaSlcbiAgICAgICAgICBXW2RlZ3JlZSArIGldID0gTWF0aC5taW4oV1tkZWdyZWUgKyBpXSwgZCk7IC8vIG1vdmUgZmlyc3Qgbm9kZSB0byBlbmRcblxuICAgICAgICAgIGNpbmRleFtwbl0gPSBjaW5kZXhbcDNdOyAvLyBtb3ZlIDFzdCBlbC4gdG8gZW5kIG9mIEVpXG5cbiAgICAgICAgICBjaW5kZXhbcDNdID0gY2luZGV4W3AxXTsgLy8gYWRkIGsgYXMgMXN0IGVsZW1lbnQgaW4gb2YgRWlcblxuICAgICAgICAgIGNpbmRleFtwMV0gPSBrOyAvLyBuZXcgbGVuIG9mIGFkai4gbGlzdCBvZiBub2RlIGlcblxuICAgICAgICAgIFdbbGVuICsgaV0gPSBwbiAtIHAxICsgMTsgLy8gZmluYWxpemUgaGFzaCBvZiBpXG5cbiAgICAgICAgICBoID0gKGggPCAwID8gLWggOiBoKSAlIG47IC8vIHBsYWNlIGkgaW4gaGFzaCBidWNrZXRcblxuICAgICAgICAgIFdbbmV4dCArIGldID0gV1toaGVhZCArIGhdO1xuICAgICAgICAgIFdbaGhlYWQgKyBoXSA9IGk7IC8vIHNhdmUgaGFzaCBvZiBpIGluIGxhc3RbaV1cblxuICAgICAgICAgIGxhc3RbaV0gPSBoO1xuICAgICAgICB9XG4gICAgICB9IC8vIGZpbmFsaXplIHxMa3xcblxuXG4gICAgICBXW2RlZ3JlZSArIGtdID0gZGs7XG4gICAgICBsZW1heCA9IE1hdGgubWF4KGxlbWF4LCBkayk7IC8vIGNsZWFyIHdcblxuICAgICAgbWFyayA9IF93Y2xlYXIobWFyayArIGxlbWF4LCBsZW1heCwgVywgdywgbik7IC8vIFN1cGVybm9kZSBkZXRlY3Rpb24uIFN1cGVybm9kZSBkZXRlY3Rpb24gcmVsaWVzIG9uIHRoZSBoYXNoIGZ1bmN0aW9uIGgoaSkgY29tcHV0ZWQgZm9yIGVhY2ggbm9kZSBpLlxuICAgICAgLy8gSWYgdHdvIG5vZGVzIGhhdmUgaWRlbnRpY2FsIGFkamFjZW5jeSBsaXN0cywgdGhlaXIgaGFzaCBmdW5jdGlvbnMgd2lsIGJlIGlkZW50aWNhbC5cblxuICAgICAgZm9yIChwayA9IHBrMTsgcGsgPCBwazI7IHBrKyspIHtcbiAgICAgICAgaSA9IGNpbmRleFtwa107IC8vIGNoZWNrIGkgaXMgZGVhZCwgc2tpcCBpdFxuXG4gICAgICAgIGlmIChXW252ICsgaV0gPj0gMCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IC8vIHNjYW4gaGFzaCBidWNrZXQgb2Ygbm9kZSBpXG5cblxuICAgICAgICBoID0gbGFzdFtpXTtcbiAgICAgICAgaSA9IFdbaGhlYWQgKyBoXTsgLy8gaGFzaCBidWNrZXQgd2lsbCBiZSBlbXB0eVxuXG4gICAgICAgIFdbaGhlYWQgKyBoXSA9IC0xO1xuXG4gICAgICAgIGZvciAoOyBpICE9PSAtMSAmJiBXW25leHQgKyBpXSAhPT0gLTE7IGkgPSBXW25leHQgKyBpXSwgbWFyaysrKSB7XG4gICAgICAgICAgbG4gPSBXW2xlbiArIGldO1xuICAgICAgICAgIGVsbiA9IFdbZWxlbiArIGldO1xuXG4gICAgICAgICAgZm9yIChwID0gY3B0cltpXSArIDE7IHAgPD0gY3B0cltpXSArIGxuIC0gMTsgcCsrKSB7XG4gICAgICAgICAgICBXW3cgKyBjaW5kZXhbcF1dID0gbWFyaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgamxhc3QgPSBpOyAvLyBjb21wYXJlIGkgd2l0aCBhbGwgalxuXG4gICAgICAgICAgZm9yIChqID0gV1tuZXh0ICsgaV07IGogIT09IC0xOykge1xuICAgICAgICAgICAgdmFyIG9rID0gV1tsZW4gKyBqXSA9PT0gbG4gJiYgV1tlbGVuICsgal0gPT09IGVsbjtcblxuICAgICAgICAgICAgZm9yIChwID0gY3B0cltqXSArIDE7IG9rICYmIHAgPD0gY3B0cltqXSArIGxuIC0gMTsgcCsrKSB7XG4gICAgICAgICAgICAgIC8vIGNvbXBhcmUgaSBhbmQgalxuICAgICAgICAgICAgICBpZiAoV1t3ICsgY2luZGV4W3BdXSAhPT0gbWFyaykge1xuICAgICAgICAgICAgICAgIG9rID0gMDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSAvLyBjaGVjayBpIGFuZCBqIGFyZSBpZGVudGljYWxcblxuXG4gICAgICAgICAgICBpZiAob2spIHtcbiAgICAgICAgICAgICAgLy8gYWJzb3JiIGogaW50byBpXG4gICAgICAgICAgICAgIGNwdHJbal0gPSAoMCwgX2NzRmxpcC5jc0ZsaXApKGkpO1xuICAgICAgICAgICAgICBXW252ICsgaV0gKz0gV1tudiArIGpdO1xuICAgICAgICAgICAgICBXW252ICsgal0gPSAwOyAvLyBub2RlIGogaXMgZGVhZFxuXG4gICAgICAgICAgICAgIFdbZWxlbiArIGpdID0gLTE7IC8vIGRlbGV0ZSBqIGZyb20gaGFzaCBidWNrZXRcblxuICAgICAgICAgICAgICBqID0gV1tuZXh0ICsgal07XG4gICAgICAgICAgICAgIFdbbmV4dCArIGpsYXN0XSA9IGo7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBqIGFuZCBpIGFyZSBkaWZmZXJlbnRcbiAgICAgICAgICAgICAgamxhc3QgPSBqO1xuICAgICAgICAgICAgICBqID0gV1tuZXh0ICsgal07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IC8vIEZpbmFsaXplIG5ldyBlbGVtZW50LiBUaGUgZWxpbWluYXRpb24gb2Ygbm9kZSBrIGlzIG5lYXJseSBjb21wbGV0ZS4gQWxsIG5vZGVzIGkgaW4gTGsgYXJlIHNjYW5uZWQgb25lIGxhc3QgdGltZS5cbiAgICAgIC8vIE5vZGUgaSBpcyByZW1vdmVkIGZyb20gTGsgaWYgaXQgaXMgZGVhZC4gVGhlIGZsYWdnZWQgc3RhdHVzIG9mIG52W2ldIGlzIGNsZWFyZWQuXG5cblxuICAgICAgZm9yIChwID0gcGsxLCBwayA9IHBrMTsgcGsgPCBwazI7IHBrKyspIHtcbiAgICAgICAgaSA9IGNpbmRleFtwa107IC8vIGNoZWNrICBpIGlzIGRlYWQsIHNraXAgaXRcblxuICAgICAgICBpZiAoKG52aSA9IC1XW252ICsgaV0pIDw9IDApIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSAvLyByZXN0b3JlIFdbbnYgKyBpXVxuXG5cbiAgICAgICAgV1tudiArIGldID0gbnZpOyAvLyBjb21wdXRlIGV4dGVybmFsIGRlZ3JlZShpKVxuXG4gICAgICAgIGQgPSBXW2RlZ3JlZSArIGldICsgZGsgLSBudmk7XG4gICAgICAgIGQgPSBNYXRoLm1pbihkLCBuIC0gbmVsIC0gbnZpKTtcblxuICAgICAgICBpZiAoV1toZWFkICsgZF0gIT09IC0xKSB7XG4gICAgICAgICAgbGFzdFtXW2hlYWQgKyBkXV0gPSBpO1xuICAgICAgICB9IC8vIHB1dCBpIGJhY2sgaW4gZGVncmVlIGxpc3RcblxuXG4gICAgICAgIFdbbmV4dCArIGldID0gV1toZWFkICsgZF07XG4gICAgICAgIGxhc3RbaV0gPSAtMTtcbiAgICAgICAgV1toZWFkICsgZF0gPSBpOyAvLyBmaW5kIG5ldyBtaW5pbXVtIGRlZ3JlZVxuXG4gICAgICAgIG1pbmRlZyA9IE1hdGgubWluKG1pbmRlZywgZCk7XG4gICAgICAgIFdbZGVncmVlICsgaV0gPSBkOyAvLyBwbGFjZSBpIGluIExrXG5cbiAgICAgICAgY2luZGV4W3ArK10gPSBpO1xuICAgICAgfSAvLyAjIG5vZGVzIGFic29yYmVkIGludG8ga1xuXG5cbiAgICAgIFdbbnYgKyBrXSA9IG52azsgLy8gbGVuZ3RoIG9mIGFkaiBsaXN0IG9mIGVsZW1lbnQga1xuXG4gICAgICBpZiAoKFdbbGVuICsga10gPSBwIC0gcGsxKSA9PT0gMCkge1xuICAgICAgICAvLyBrIGlzIGEgcm9vdCBvZiB0aGUgdHJlZVxuICAgICAgICBjcHRyW2tdID0gLTE7IC8vIGsgaXMgbm93IGEgZGVhZCBlbGVtZW50XG5cbiAgICAgICAgV1t3ICsga10gPSAwO1xuICAgICAgfVxuXG4gICAgICBpZiAoZWxlbmsgIT09IDApIHtcbiAgICAgICAgLy8gZnJlZSB1bnVzZWQgc3BhY2UgaW4gTGtcbiAgICAgICAgY256ID0gcDtcbiAgICAgIH1cbiAgICB9IC8vIFBvc3RvcmRlcmluZy4gVGhlIGVsaW1pbmF0aW9uIGlzIGNvbXBsZXRlLCBidXQgbm8gcGVybXV0YXRpb24gaGFzIGJlZW4gY29tcHV0ZWQuIEFsbCB0aGF0IGlzIGxlZnRcbiAgICAvLyBvZiB0aGUgZ3JhcGggaXMgdGhlIGFzc2VtYmx5IHRyZWUgKHB0cikgYW5kIGEgc2V0IG9mIGRlYWQgbm9kZXMgYW5kIGVsZW1lbnRzIChpIGlzIGEgZGVhZCBub2RlIGlmXG4gICAgLy8gbnZbaV0gaXMgemVybyBhbmQgYSBkZWFkIGVsZW1lbnQgaWYgbnZbaV0gPiAwKS4gSXQgaXMgZnJvbSB0aGlzIGluZm9ybWF0aW9uIG9ubHkgdGhhdCB0aGUgZmluYWwgcGVybXV0YXRpb25cbiAgICAvLyBpcyBjb21wdXRlZC4gVGhlIHRyZWUgaXMgcmVzdG9yZWQgYnkgdW5mbGlwcGluZyBhbGwgb2YgcHRyLlxuICAgIC8vIGZpeCBhc3NlbWJseSB0cmVlXG5cblxuICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgIGNwdHJbaV0gPSAoMCwgX2NzRmxpcC5jc0ZsaXApKGNwdHJbaV0pO1xuICAgIH1cblxuICAgIGZvciAoaiA9IDA7IGogPD0gbjsgaisrKSB7XG4gICAgICBXW2hlYWQgKyBqXSA9IC0xO1xuICAgIH0gLy8gcGxhY2UgdW5vcmRlcmVkIG5vZGVzIGluIGxpc3RzXG5cblxuICAgIGZvciAoaiA9IG47IGogPj0gMDsgai0tKSB7XG4gICAgICAvLyBza2lwIGlmIGogaXMgYW4gZWxlbWVudFxuICAgICAgaWYgKFdbbnYgKyBqXSA+IDApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IC8vIHBsYWNlIGogaW4gbGlzdCBvZiBpdHMgcGFyZW50XG5cblxuICAgICAgV1tuZXh0ICsgal0gPSBXW2hlYWQgKyBjcHRyW2pdXTtcbiAgICAgIFdbaGVhZCArIGNwdHJbal1dID0gajtcbiAgICB9IC8vIHBsYWNlIGVsZW1lbnRzIGluIGxpc3RzXG5cblxuICAgIGZvciAoZSA9IG47IGUgPj0gMDsgZS0tKSB7XG4gICAgICAvLyBza2lwIHVubGVzcyBlIGlzIGFuIGVsZW1lbnRcbiAgICAgIGlmIChXW252ICsgZV0gPD0gMCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNwdHJbZV0gIT09IC0xKSB7XG4gICAgICAgIC8vIHBsYWNlIGUgaW4gbGlzdCBvZiBpdHMgcGFyZW50XG4gICAgICAgIFdbbmV4dCArIGVdID0gV1toZWFkICsgY3B0cltlXV07XG4gICAgICAgIFdbaGVhZCArIGNwdHJbZV1dID0gZTtcbiAgICAgIH1cbiAgICB9IC8vIHBvc3RvcmRlciB0aGUgYXNzZW1ibHkgdHJlZVxuXG5cbiAgICBmb3IgKGsgPSAwLCBpID0gMDsgaSA8PSBuOyBpKyspIHtcbiAgICAgIGlmIChjcHRyW2ldID09PSAtMSkge1xuICAgICAgICBrID0gKDAsIF9jc1RkZnMuY3NUZGZzKShpLCBrLCBXLCBoZWFkLCBuZXh0LCBQLCB3KTtcbiAgICAgIH1cbiAgICB9IC8vIHJlbW92ZSBsYXN0IGl0ZW0gaW4gYXJyYXlcblxuXG4gICAgUC5zcGxpY2UoUC5sZW5ndGggLSAxLCAxKTsgLy8gcmV0dXJuIFBcblxuICAgIHJldHVybiBQO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgbWF0cml4IHRoYXQgd2lsbCBiZSB1c2VkIGJ5IHRoZSBhcHByb3hpbWF0ZSBtaW5pbXVtIGRlZ3JlZSBvcmRlcmluZyBhbGdvcml0aG0uIFRoZSBmdW5jdGlvbiBhY2NlcHRzIHRoZSBtYXRyaXggTSBhcyBpbnB1dCBhbmQgcmV0dXJucyBhIHBlcm11dGF0aW9uXG4gICAqIHZlY3RvciBQLiBUaGUgYW1kIGFsZ29yaXRobSBvcGVyYXRlcyBvbiBhIHN5bW1ldHJpeCBtYXRyaXgsIHNvIG9uZSBvZiB0aHJlZSBzeW1tZXRyaWMgbWF0cmljZXMgaXMgZm9ybWVkLlxuICAgKlxuICAgKiBPcmRlcjogMFxuICAgKiAgIEEgbmF0dXJhbCBvcmRlcmluZyBQPW51bGwgbWF0cml4IGlzIHJldHVybmVkLlxuICAgKlxuICAgKiBPcmRlcjogMVxuICAgKiAgIE1hdHJpeCBtdXN0IGJlIHNxdWFyZS4gVGhpcyBpcyBhcHByb3ByaWF0ZSBmb3IgYSBDaG9sZXNreSBvciBMVSBmYWN0b3JpemF0aW9uLlxuICAgKiAgIFAgPSBNICsgTSdcbiAgICpcbiAgICogT3JkZXI6IDJcbiAgICogICBEZW5zZSBjb2x1bW5zIGZyb20gTScgYXJlIGRyb3BwZWQsIE0gcmVjcmVhdGVkIGZyb20gTScuIFRoaXMgaXMgYXBwcm9wcmlhdGVmb3IgTFUgZmFjdG9yaXphdGlvbiBvZiB1bnN5bW1ldHJpYyBtYXRyaWNlcy5cbiAgICogICBQID0gTScgKiBNXG4gICAqXG4gICAqIE9yZGVyOiAzXG4gICAqICAgVGhpcyBpcyBiZXN0IHVzZWQgZm9yIFFSIGZhY3Rvcml6YXRpb24gb3IgTFUgZmFjdG9yaXphdGlvbiBpcyBtYXRyaXggTSBoYXMgbm8gZGVuc2Ugcm93cy4gQSBkZW5zZSByb3cgaXMgYSByb3cgd2l0aCBtb3JlIHRoYW4gMTAqc3FyKGNvbHVtbnMpIGVudHJpZXMuXG4gICAqICAgUCA9IE0nICogTVxuICAgKi9cblxuICBmdW5jdGlvbiBfY3JlYXRlVGFyZ2V0TWF0cml4KG9yZGVyLCBhLCBtLCBuLCBkZW5zZSkge1xuICAgIC8vIGNvbXB1dGUgQSdcbiAgICB2YXIgYXQgPSB0cmFuc3Bvc2UoYSk7IC8vIGNoZWNrIG9yZGVyID0gMSwgbWF0cml4IG11c3QgYmUgc3F1YXJlXG5cbiAgICBpZiAob3JkZXIgPT09IDEgJiYgbiA9PT0gbSkge1xuICAgICAgLy8gQyA9IEEgKyBBJ1xuICAgICAgcmV0dXJuIGFkZChhLCBhdCk7XG4gICAgfSAvLyBjaGVjayBvcmRlciA9IDIsIGRyb3AgZGVuc2UgY29sdW1ucyBmcm9tIE0nXG5cblxuICAgIGlmIChvcmRlciA9PT0gMikge1xuICAgICAgLy8gdHJhbnNwb3NlIGFycmF5c1xuICAgICAgdmFyIHRpbmRleCA9IGF0Ll9pbmRleDtcbiAgICAgIHZhciB0cHRyID0gYXQuX3B0cjsgLy8gbmV3IGNvbHVtbiBpbmRleFxuXG4gICAgICB2YXIgcDIgPSAwOyAvLyBsb29wIEEnIGNvbHVtbnMgKHJvd3MpXG5cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbTsgaisrKSB7XG4gICAgICAgIC8vIGNvbHVtbiBqIG9mIEFUIHN0YXJ0cyBoZXJlXG4gICAgICAgIHZhciBwID0gdHB0cltqXTsgLy8gbmV3IGNvbHVtbiBqIHN0YXJ0cyBoZXJlXG5cbiAgICAgICAgdHB0cltqXSA9IHAyOyAvLyBza2lwIGRlbnNlIGNvbCBqXG5cbiAgICAgICAgaWYgKHRwdHJbaiArIDFdIC0gcCA+IGRlbnNlKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gLy8gbWFwIHJvd3MgaW4gY29sdW1uIGogb2YgQVxuXG5cbiAgICAgICAgZm9yICh2YXIgcDEgPSB0cHRyW2ogKyAxXTsgcCA8IHAxOyBwKyspIHtcbiAgICAgICAgICB0aW5kZXhbcDIrK10gPSB0aW5kZXhbcF07XG4gICAgICAgIH1cbiAgICAgIH0gLy8gZmluYWxpemUgQVRcblxuXG4gICAgICB0cHRyW21dID0gcDI7IC8vIHJlY3JlYXRlIEEgZnJvbSBuZXcgdHJhbnNwb3NlIG1hdHJpeFxuXG4gICAgICBhID0gdHJhbnNwb3NlKGF0KTsgLy8gdXNlIEEnICogQVxuXG4gICAgICByZXR1cm4gbXVsdGlwbHkoYXQsIGEpO1xuICAgIH0gLy8gdXNlIEEnICogQSwgc3F1YXJlIG9yIHJlY3Rhbmd1bGFyIG1hdHJpeFxuXG5cbiAgICByZXR1cm4gbXVsdGlwbHkoYXQsIGEpO1xuICB9XG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHF1b3RpZW50IGdyYXBoLiBUaGVyZSBhcmUgZm91ciBraW5kIG9mIG5vZGVzIGFuZCBlbGVtZW50cyB0aGF0IG11c3QgYmUgcmVwcmVzZW50ZWQ6XG4gICAqXG4gICAqICAtIEEgbGl2ZSBub2RlIGlzIGEgbm9kZSBpIChvciBhIHN1cGVybm9kZSkgdGhhdCBoYXMgbm90IGJlZW4gc2VsZWN0ZWQgYXMgYSBwaXZvdCBuYWQgaGFzIG5vdCBiZWVuIG1lcmdlZCBpbnRvIGFub3RoZXIgc3VwZXJub2RlLlxuICAgKiAgLSBBIGRlYWQgbm9kZSBpIGlzIG9uZSB0aGF0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgZ3JhcGgsIGhhdmluZyBiZWVuIGFic29ydmVkIGludG8gciA9IGZsaXAocHRyW2ldKS5cbiAgICogIC0gQSBsaXZlIGVsZW1lbnQgZSBpcyBvbmUgdGhhdCBpcyBpbiB0aGUgZ3JhcGgsIGhhdmluZyBiZWVuIGZvcm1lZCB3aGVuIG5vZGUgZSB3YXMgc2VsZWN0ZWQgYXMgdGhlIHBpdm90LlxuICAgKiAgLSBBIGRlYWQgZWxlbWVudCBlIGlzIG9uZSB0aGF0IGhhcyBiZW5uIGFic29ydmVkIGludG8gYSBzdWJzZXF1ZW50IGVsZW1lbnQgcyA9IGZsaXAocHRyW2VdKS5cbiAgICovXG5cblxuICBmdW5jdGlvbiBfaW5pdGlhbGl6ZVF1b3RpZW50R3JhcGgobiwgY3B0ciwgVywgbGVuLCBoZWFkLCBsYXN0LCBuZXh0LCBoaGVhZCwgbnYsIHcsIGVsZW4sIGRlZ3JlZSkge1xuICAgIC8vIEluaXRpYWxpemUgcXVvdGllbnQgZ3JhcGhcbiAgICBmb3IgKHZhciBrID0gMDsgayA8IG47IGsrKykge1xuICAgICAgV1tsZW4gKyBrXSA9IGNwdHJbayArIDFdIC0gY3B0cltrXTtcbiAgICB9XG5cbiAgICBXW2xlbiArIG5dID0gMDsgLy8gaW5pdGlhbGl6ZSB3b3Jrc3BhY2VcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IG47IGkrKykge1xuICAgICAgLy8gZGVncmVlIGxpc3QgaSBpcyBlbXB0eVxuICAgICAgV1toZWFkICsgaV0gPSAtMTtcbiAgICAgIGxhc3RbaV0gPSAtMTtcbiAgICAgIFdbbmV4dCArIGldID0gLTE7IC8vIGhhc2ggbGlzdCBpIGlzIGVtcHR5XG5cbiAgICAgIFdbaGhlYWQgKyBpXSA9IC0xOyAvLyBub2RlIGkgaXMganVzdCBvbmUgbm9kZVxuXG4gICAgICBXW252ICsgaV0gPSAxOyAvLyBub2RlIGkgaXMgYWxpdmVcblxuICAgICAgV1t3ICsgaV0gPSAxOyAvLyBFayBvZiBub2RlIGkgaXMgZW1wdHlcblxuICAgICAgV1tlbGVuICsgaV0gPSAwOyAvLyBkZWdyZWUgb2Ygbm9kZSBpXG5cbiAgICAgIFdbZGVncmVlICsgaV0gPSBXW2xlbiArIGldO1xuICAgIH0gLy8gY2xlYXIgd1xuXG5cbiAgICB2YXIgbWFyayA9IF93Y2xlYXIoMCwgMCwgVywgdywgbik7IC8vIG4gaXMgYSBkZWFkIGVsZW1lbnRcblxuXG4gICAgV1tlbGVuICsgbl0gPSAtMjsgLy8gbiBpcyBhIHJvb3Qgb2YgYXNzZW1ibHkgdHJlZVxuXG4gICAgY3B0cltuXSA9IC0xOyAvLyBuIGlzIGEgZGVhZCBlbGVtZW50XG5cbiAgICBXW3cgKyBuXSA9IDA7IC8vIHJldHVybiBtYXJrXG5cbiAgICByZXR1cm4gbWFyaztcbiAgfVxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBkZWdyZWUgbGlzdHMuIEVhY2ggbm9kZSBpcyBwbGFjZWQgaW4gaXRzIGRlZ3JlZSBsaXN0cy4gTm9kZXMgb2YgemVybyBkZWdyZWUgYXJlIGVsaW1pbmF0ZWQgaW1tZWRpYXRlbHkuIE5vZGVzIHdpdGhcbiAgICogZGVncmVlID49IGRlbnNlIGFyZSBhbHNvbCBlbGltaW5hdGVkIGFuZCBtZXJnZWQgaW50byBhIHBsYWNlaG9sZGVyIG5vZGUgbiwgYSBkZWFkIGVsZW1lbnQuIFRoZXMgbm9kZXMgd2lsbCBhcHBlcmEgbGFzdCBpbiB0aGVcbiAgICogb3V0cHV0IHBlcm11dGF0aW9uIHAuXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX2luaXRpYWxpemVEZWdyZWVMaXN0cyhuLCBjcHRyLCBXLCBkZWdyZWUsIGVsZW4sIHcsIGRlbnNlLCBudiwgaGVhZCwgbGFzdCwgbmV4dCkge1xuICAgIC8vIHJlc3VsdFxuICAgIHZhciBuZWwgPSAwOyAvLyBsb29wIGNvbHVtbnNcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAvLyBkZWdyZWUgQCBpXG4gICAgICB2YXIgZCA9IFdbZGVncmVlICsgaV07IC8vIGNoZWNrIG5vZGUgaSBpcyBlbXB0eVxuXG4gICAgICBpZiAoZCA9PT0gMCkge1xuICAgICAgICAvLyBlbGVtZW50IGkgaXMgZGVhZFxuICAgICAgICBXW2VsZW4gKyBpXSA9IC0yO1xuICAgICAgICBuZWwrKzsgLy8gaSBpcyBhIHJvb3Qgb2YgYXNzZW1ibHkgdHJlZVxuXG4gICAgICAgIGNwdHJbaV0gPSAtMTtcbiAgICAgICAgV1t3ICsgaV0gPSAwO1xuICAgICAgfSBlbHNlIGlmIChkID4gZGVuc2UpIHtcbiAgICAgICAgLy8gYWJzb3JiIGkgaW50byBlbGVtZW50IG5cbiAgICAgICAgV1tudiArIGldID0gMDsgLy8gbm9kZSBpIGlzIGRlYWRcblxuICAgICAgICBXW2VsZW4gKyBpXSA9IC0xO1xuICAgICAgICBuZWwrKztcbiAgICAgICAgY3B0cltpXSA9ICgwLCBfY3NGbGlwLmNzRmxpcCkobik7XG4gICAgICAgIFdbbnYgKyBuXSsrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGggPSBXW2hlYWQgKyBkXTtcblxuICAgICAgICBpZiAoaCAhPT0gLTEpIHtcbiAgICAgICAgICBsYXN0W2hdID0gaTtcbiAgICAgICAgfSAvLyBwdXQgbm9kZSBpIGluIGRlZ3JlZSBsaXN0IGRcblxuXG4gICAgICAgIFdbbmV4dCArIGldID0gV1toZWFkICsgZF07XG4gICAgICAgIFdbaGVhZCArIGRdID0gaTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmVsO1xuICB9XG5cbiAgZnVuY3Rpb24gX3djbGVhcihtYXJrLCBsZW1heCwgVywgdywgbikge1xuICAgIGlmIChtYXJrIDwgMiB8fCBtYXJrICsgbGVtYXggPCAwKSB7XG4gICAgICBmb3IgKHZhciBrID0gMDsgayA8IG47IGsrKykge1xuICAgICAgICBpZiAoV1t3ICsga10gIT09IDApIHtcbiAgICAgICAgICBXW3cgKyBrXSA9IDE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbWFyayA9IDI7XG4gICAgfSAvLyBhdCB0aGlzIHBvaW50LCBXIFswLi5uLTFdIDwgbWFyayBob2xkc1xuXG5cbiAgICByZXR1cm4gbWFyaztcbiAgfVxuXG4gIGZ1bmN0aW9uIF9kaWFnKGksIGopIHtcbiAgICByZXR1cm4gaSAhPT0gajtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZUNzQW1kID0gY3JlYXRlQ3NBbWQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNzQ291bnRzID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jc0xlYWYgPSByZXF1aXJlKFwiLi9jc0xlYWZcIik7XG5cbnZhciBuYW1lID0gJ2NzQ291bnRzJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3RyYW5zcG9zZSddO1xudmFyIGNyZWF0ZUNzQ291bnRzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHRyYW5zcG9zZSA9IF9yZWYudHJhbnNwb3NlO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlcyB0aGUgY29sdW1uIGNvdW50cyB1c2luZyB0aGUgdXBwZXIgdHJpYW5ndWxhciBwYXJ0IG9mIEEuXG4gICAqIEl0IHRyYW5zcG9zZXMgQSBpbnRlcm5hbGx5LCBub25lIG9mIHRoZSBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBtb2RpZmllZC5cbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9IGEgICAgICAgICAgIFRoZSBzcGFyc2UgbWF0cml4IEFcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9IGF0YSAgICAgICAgIENvdW50IHRoZSBjb2x1bW5zIG9mIEEnQSBpbnN0ZWFkXG4gICAqXG4gICAqIEByZXR1cm4gICAgICAgICAgICAgICAgICAgICBBbiBhcnJheSBvZiBzaXplIG4gb2YgdGhlIGNvbHVtbiBjb3VudHMgb3IgbnVsbCBvbiBlcnJvclxuICAgKlxuICAgKiBSZWZlcmVuY2U6IGh0dHA6Ly9mYWN1bHR5LmNzZS50YW11LmVkdS9kYXZpcy9wdWJsaWNhdGlvbnMuaHRtbFxuICAgKi9cbiAgcmV0dXJuIGZ1bmN0aW9uIChhLCBwYXJlbnQsIHBvc3QsIGF0YSkge1xuICAgIC8vIGNoZWNrIGlucHV0c1xuICAgIGlmICghYSB8fCAhcGFyZW50IHx8ICFwb3N0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IC8vIGEgbWF0cml4IGFycmF5c1xuXG5cbiAgICB2YXIgYXNpemUgPSBhLl9zaXplOyAvLyByb3dzIGFuZCBjb2x1bW5zXG5cbiAgICB2YXIgbSA9IGFzaXplWzBdO1xuICAgIHZhciBuID0gYXNpemVbMV07IC8vIHZhcmlhYmxlc1xuXG4gICAgdmFyIGksIGosIGssIEosIHAsIHAwLCBwMTsgLy8gd29ya3NwYWNlIHNpemVcblxuICAgIHZhciBzID0gNCAqIG4gKyAoYXRhID8gbiArIG0gKyAxIDogMCk7IC8vIGFsbG9jYXRlIHdvcmtzcGFjZVxuXG4gICAgdmFyIHcgPSBbXTsgLy8gKHMpXG5cbiAgICB2YXIgYW5jZXN0b3IgPSAwOyAvLyBmaXJzdCBuIGVudHJpZXNcblxuICAgIHZhciBtYXhmaXJzdCA9IG47IC8vIG5leHQgbiBlbnRyaWVzXG5cbiAgICB2YXIgcHJldmxlYWYgPSAyICogbjsgLy8gbmV4dCBuIGVudHJpZXNcblxuICAgIHZhciBmaXJzdCA9IDMgKiBuOyAvLyBuZXh0IG4gZW50cmllc1xuXG4gICAgdmFyIGhlYWQgPSA0ICogbjsgLy8gbmV4dCBuICsgMSBlbnRyaWVzICh1c2VkIHdoZW4gYXRhIGlzIHRydWUpXG5cbiAgICB2YXIgbmV4dCA9IDUgKiBuICsgMTsgLy8gbGFzdCBlbnRyaWVzIGluIHdvcmtzcGFjZVxuICAgIC8vIGNsZWFyIHdvcmtzcGFjZSB3WzAuLnMtMV1cblxuICAgIGZvciAoayA9IDA7IGsgPCBzOyBrKyspIHtcbiAgICAgIHdba10gPSAtMTtcbiAgICB9IC8vIGFsbG9jYXRlIHJlc3VsdFxuXG5cbiAgICB2YXIgY29sY291bnQgPSBbXTsgLy8gKG4pXG4gICAgLy8gQVQgPSBBJ1xuXG4gICAgdmFyIGF0ID0gdHJhbnNwb3NlKGEpOyAvLyBhdCBhcnJheXNcblxuICAgIHZhciB0aW5kZXggPSBhdC5faW5kZXg7XG4gICAgdmFyIHRwdHIgPSBhdC5fcHRyOyAvLyBmaW5kIHdbZmlyc3QgKyBqXVxuXG4gICAgZm9yIChrID0gMDsgayA8IG47IGsrKykge1xuICAgICAgaiA9IHBvc3Rba107IC8vIGNvbGNvdW50W2pdPTEgaWYgaiBpcyBhIGxlYWZcblxuICAgICAgY29sY291bnRbal0gPSB3W2ZpcnN0ICsgal0gPT09IC0xID8gMSA6IDA7XG5cbiAgICAgIGZvciAoOyBqICE9PSAtMSAmJiB3W2ZpcnN0ICsgal0gPT09IC0xOyBqID0gcGFyZW50W2pdKSB7XG4gICAgICAgIHdbZmlyc3QgKyBqXSA9IGs7XG4gICAgICB9XG4gICAgfSAvLyBpbml0aWFsaXplIGF0YSBpZiBuZWVkZWRcblxuXG4gICAgaWYgKGF0YSkge1xuICAgICAgLy8gaW52ZXJ0IHBvc3RcbiAgICAgIGZvciAoayA9IDA7IGsgPCBuOyBrKyspIHtcbiAgICAgICAgd1twb3N0W2tdXSA9IGs7XG4gICAgICB9IC8vIGxvb3Agcm93cyAoY29sdW1ucyBpbiBBVClcblxuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgIC8vIHZhbHVlcyBpbiBjb2x1bW4gaSBvZiBBVFxuICAgICAgICBmb3IgKGsgPSBuLCBwMCA9IHRwdHJbaV0sIHAxID0gdHB0cltpICsgMV0sIHAgPSBwMDsgcCA8IHAxOyBwKyspIHtcbiAgICAgICAgICBrID0gTWF0aC5taW4oaywgd1t0aW5kZXhbcF1dKTtcbiAgICAgICAgfSAvLyBwbGFjZSByb3cgaSBpbiBsaW5rZWQgbGlzdCBrXG5cblxuICAgICAgICB3W25leHQgKyBpXSA9IHdbaGVhZCArIGtdO1xuICAgICAgICB3W2hlYWQgKyBrXSA9IGk7XG4gICAgICB9XG4gICAgfSAvLyBlYWNoIG5vZGUgaW4gaXRzIG93biBzZXRcblxuXG4gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgd1thbmNlc3RvciArIGldID0gaTtcbiAgICB9XG5cbiAgICBmb3IgKGsgPSAwOyBrIDwgbjsgaysrKSB7XG4gICAgICAvLyBqIGlzIHRoZSBrdGggbm9kZSBpbiBwb3N0b3JkZXJlZCBldHJlZVxuICAgICAgaiA9IHBvc3Rba107IC8vIGNoZWNrIGogaXMgbm90IGEgcm9vdFxuXG4gICAgICBpZiAocGFyZW50W2pdICE9PSAtMSkge1xuICAgICAgICBjb2xjb3VudFtwYXJlbnRbal1dLS07XG4gICAgICB9IC8vIEo9aiBmb3IgTEwnPUEgY2FzZVxuXG5cbiAgICAgIGZvciAoSiA9IGF0YSA/IHdbaGVhZCArIGtdIDogajsgSiAhPT0gLTE7IEogPSBhdGEgPyB3W25leHQgKyBKXSA6IC0xKSB7XG4gICAgICAgIGZvciAocCA9IHRwdHJbSl07IHAgPCB0cHRyW0ogKyAxXTsgcCsrKSB7XG4gICAgICAgICAgaSA9IHRpbmRleFtwXTtcbiAgICAgICAgICB2YXIgciA9ICgwLCBfY3NMZWFmLmNzTGVhZikoaSwgaiwgdywgZmlyc3QsIG1heGZpcnN0LCBwcmV2bGVhZiwgYW5jZXN0b3IpOyAvLyBjaGVjayBBKGksaikgaXMgaW4gc2tlbGV0b25cblxuICAgICAgICAgIGlmIChyLmpsZWFmID49IDEpIHtcbiAgICAgICAgICAgIGNvbGNvdW50W2pdKys7XG4gICAgICAgICAgfSAvLyBjaGVjayBhY2NvdW50IGZvciBvdmVybGFwIGluIHFcblxuXG4gICAgICAgICAgaWYgKHIuamxlYWYgPT09IDIpIHtcbiAgICAgICAgICAgIGNvbGNvdW50W3IucV0tLTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHBhcmVudFtqXSAhPT0gLTEpIHtcbiAgICAgICAgd1thbmNlc3RvciArIGpdID0gcGFyZW50W2pdO1xuICAgICAgfVxuICAgIH0gLy8gc3VtIHVwIGNvbGNvdW50J3Mgb2YgZWFjaCBjaGlsZFxuXG5cbiAgICBmb3IgKGogPSAwOyBqIDwgbjsgaisrKSB7XG4gICAgICBpZiAocGFyZW50W2pdICE9PSAtMSkge1xuICAgICAgICBjb2xjb3VudFtwYXJlbnRbal1dICs9IGNvbGNvdW50W2pdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb2xjb3VudDtcbiAgfTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVDc0NvdW50cyA9IGNyZWF0ZUNzQ291bnRzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jc0RmcyA9IGNzRGZzO1xuXG52YXIgX2NzTWFya2VkID0gcmVxdWlyZShcIi4vY3NNYXJrZWRcIik7XG5cbnZhciBfY3NNYXJrID0gcmVxdWlyZShcIi4vY3NNYXJrXCIpO1xuXG52YXIgX2NzVW5mbGlwID0gcmVxdWlyZShcIi4vY3NVbmZsaXBcIik7XG5cbi8qKlxuICogRGVwdGgtZmlyc3Qgc2VhcmNoIGNvbXB1dGVzIHRoZSBub256ZXJvIHBhdHRlcm4geGkgb2YgdGhlIGRpcmVjdGVkIGdyYXBoIEcgKE1hdHJpeCkgc3RhcnRpbmdcbiAqIGF0IG5vZGVzIGluIEIgKHNlZSBjc1JlYWNoKCkpLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSAgaiAgICAgICAgICAgICAgIFRoZSBzdGFydGluZyBub2RlIGZvciB0aGUgREZTIGFsZ29yaXRobVxuICogQHBhcmFtIHtNYXRyaXh9ICBnICAgICAgICAgICAgICAgVGhlIEcgbWF0cml4IHRvIHNlYXJjaCwgcHRyIGFycmF5IG1vZGlmaWVkLCB0aGVuIHJlc3RvcmVkXG4gKiBAcGFyYW0ge051bWJlcn0gIHRvcCAgICAgICAgICAgICBTdGFydCBpbmRleCBpbiBzdGFjayB4aVt0b3AuLm4tMV1cbiAqIEBwYXJhbSB7TnVtYmVyfSAgayAgICAgICAgICAgICAgIFRoZSBrdGggY29sdW1uIGluIEJcbiAqIEBwYXJhbSB7QXJyYXl9ICAgeGkgICAgICAgICAgICAgIFRoZSBub256ZXJvIHBhdHRlcm4geGlbdG9wXSAuLiB4aVtuIC0gMV0sIGFuIGFycmF5IG9mIHNpemUgPSAyICogblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZpcnN0IG4gZW50cmllcyBpcyB0aGUgbm9uemVybyBwYXR0ZXJuLCB0aGUgbGFzdCBuIGVudHJpZXMgaXMgdGhlIHN0YWNrXG4gKiBAcGFyYW0ge0FycmF5fSAgIHBpbnYgICAgICAgICAgICBUaGUgaW52ZXJzZSByb3cgcGVybXV0YXRpb24gdmVjdG9yLCBtdXN0IGJlIG51bGwgZm9yIEwgKiB4ID0gYlxuICpcbiAqIEByZXR1cm4ge051bWJlcn0gICAgICAgICAgICAgICAgIE5ldyB2YWx1ZSBvZiB0b3BcbiAqXG4gKiBSZWZlcmVuY2U6IGh0dHA6Ly9mYWN1bHR5LmNzZS50YW11LmVkdS9kYXZpcy9wdWJsaWNhdGlvbnMuaHRtbFxuICovXG5mdW5jdGlvbiBjc0RmcyhqLCBnLCB0b3AsIHhpLCBwaW52KSB7XG4gIC8vIGcgYXJyYXlzXG4gIHZhciBpbmRleCA9IGcuX2luZGV4O1xuICB2YXIgcHRyID0gZy5fcHRyO1xuICB2YXIgc2l6ZSA9IGcuX3NpemU7IC8vIGNvbHVtbnNcblxuICB2YXIgbiA9IHNpemVbMV07IC8vIHZhcnNcblxuICB2YXIgaSwgcCwgcDI7IC8vIGluaXRpYWxpemUgaGVhZFxuXG4gIHZhciBoZWFkID0gMDsgLy8gaW5pdGlhbGl6ZSB0aGUgcmVjdXJzaW9uIHN0YWNrXG5cbiAgeGlbMF0gPSBqOyAvLyBsb29wXG5cbiAgd2hpbGUgKGhlYWQgPj0gMCkge1xuICAgIC8vIGdldCBqIGZyb20gdGhlIHRvcCBvZiB0aGUgcmVjdXJzaW9uIHN0YWNrXG4gICAgaiA9IHhpW2hlYWRdOyAvLyBhcHBseSBwZXJtdXRhdGlvbiB2ZWN0b3JcblxuICAgIHZhciBqbmV3ID0gcGludiA/IHBpbnZbal0gOiBqOyAvLyBjaGVjayBub2RlIGogaXMgbWFya2VkXG5cbiAgICBpZiAoISgwLCBfY3NNYXJrZWQuY3NNYXJrZWQpKHB0ciwgaikpIHtcbiAgICAgIC8vIG1hcmsgbm9kZSBqIGFzIHZpc2l0ZWRcbiAgICAgICgwLCBfY3NNYXJrLmNzTWFyaykocHRyLCBqKTsgLy8gdXBkYXRlIHN0YWNrIChsYXN0IG4gZW50cmllcyBpbiB4aSlcblxuICAgICAgeGlbbiArIGhlYWRdID0gam5ldyA8IDAgPyAwIDogKDAsIF9jc1VuZmxpcC5jc1VuZmxpcCkocHRyW2puZXddKTtcbiAgICB9IC8vIG5vZGUgaiBkb25lIGlmIG5vIHVudmlzaXRlZCBuZWlnaGJvcnNcblxuXG4gICAgdmFyIGRvbmUgPSAxOyAvLyBleGFtaW5lIGFsbCBuZWlnaGJvcnMgb2Ygaiwgc3RhY2sgKGxhc3QgbiBlbnRyaWVzIGluIHhpKVxuXG4gICAgZm9yIChwID0geGlbbiArIGhlYWRdLCBwMiA9IGpuZXcgPCAwID8gMCA6ICgwLCBfY3NVbmZsaXAuY3NVbmZsaXApKHB0cltqbmV3ICsgMV0pOyBwIDwgcDI7IHArKykge1xuICAgICAgLy8gY29uc2lkZXIgbmVpZ2hib3Igbm9kZSBpXG4gICAgICBpID0gaW5kZXhbcF07IC8vIGNoZWNrIHdlIGhhdmUgdmlzaXRlZCBub2RlIGksIHNraXAgaXRcblxuICAgICAgaWYgKCgwLCBfY3NNYXJrZWQuY3NNYXJrZWQpKHB0ciwgaSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IC8vIHBhdXNlIGRlcHRoLWZpcnN0IHNlYXJjaCBvZiBub2RlIGosIHVwZGF0ZSBzdGFjayAobGFzdCBuIGVudHJpZXMgaW4geGkpXG5cblxuICAgICAgeGlbbiArIGhlYWRdID0gcDsgLy8gc3RhcnQgZGZzIGF0IG5vZGUgaVxuXG4gICAgICB4aVsrK2hlYWRdID0gaTsgLy8gbm9kZSBqIGlzIG5vdCBkb25lXG5cbiAgICAgIGRvbmUgPSAwOyAvLyBicmVhaywgdG8gc3RhcnQgZGZzKGkpXG5cbiAgICAgIGJyZWFrO1xuICAgIH0gLy8gY2hlY2sgZGVwdGgtZmlyc3Qgc2VhcmNoIGF0IG5vZGUgaiBpcyBkb25lXG5cblxuICAgIGlmIChkb25lKSB7XG4gICAgICAvLyByZW1vdmUgaiBmcm9tIHRoZSByZWN1cnNpb24gc3RhY2tcbiAgICAgIGhlYWQtLTsgLy8gYW5kIHBsYWNlIGluIHRoZSBvdXRwdXQgc3RhY2tcblxuICAgICAgeGlbLS10b3BdID0gajtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdG9wO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jc0V0cmVlID0gY3NFdHJlZTtcblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgZWxpbWluYXRpb24gdHJlZSBvZiBNYXRyaXggQSAodXNpbmcgdHJpdShBKSkgb3IgdGhlXG4gKiBlbGltaW5hdGlvbiB0cmVlIG9mIEEnQSB3aXRob3V0IGZvcm1pbmcgQSdBLlxuICpcbiAqIEBwYXJhbSB7TWF0cml4fSAgYSAgICAgICAgICAgICAgIFRoZSBBIE1hdHJpeFxuICogQHBhcmFtIHtib29sZWFufSBhdGEgICAgICAgICAgICAgQSB2YWx1ZSBvZiB0cnVlIHRoZSBmdW5jdGlvbiBjb21wdXRlcyB0aGUgZXRyZWUgb2YgQSdBXG4gKlxuICogUmVmZXJlbmNlOiBodHRwOi8vZmFjdWx0eS5jc2UudGFtdS5lZHUvZGF2aXMvcHVibGljYXRpb25zLmh0bWxcbiAqL1xuZnVuY3Rpb24gY3NFdHJlZShhLCBhdGEpIHtcbiAgLy8gY2hlY2sgaW5wdXRzXG4gIGlmICghYSkge1xuICAgIHJldHVybiBudWxsO1xuICB9IC8vIGEgYXJyYXlzXG5cblxuICB2YXIgYWluZGV4ID0gYS5faW5kZXg7XG4gIHZhciBhcHRyID0gYS5fcHRyO1xuICB2YXIgYXNpemUgPSBhLl9zaXplOyAvLyByb3dzICYgY29sdW1uc1xuXG4gIHZhciBtID0gYXNpemVbMF07XG4gIHZhciBuID0gYXNpemVbMV07IC8vIGFsbG9jYXRlIHJlc3VsdFxuXG4gIHZhciBwYXJlbnQgPSBbXTsgLy8gKG4pXG4gIC8vIGFsbG9jYXRlIHdvcmtzcGFjZVxuXG4gIHZhciB3ID0gW107IC8vIChuICsgKGF0YSA/IG0gOiAwKSlcblxuICB2YXIgYW5jZXN0b3IgPSAwOyAvLyBmaXJzdCBuIGVudHJpZXMgaW4gd1xuXG4gIHZhciBwcmV2ID0gbjsgLy8gbGFzdCBtIGVudHJpZXMgKGF0YSA9IHRydWUpXG5cbiAgdmFyIGksIGluZXh0OyAvLyBjaGVjayB3ZSBhcmUgY2FsY3VsYXRpbmcgQSdBXG5cbiAgaWYgKGF0YSkge1xuICAgIC8vIGluaXRpYWxpemUgd29ya3NwYWNlXG4gICAgZm9yIChpID0gMDsgaSA8IG07IGkrKykge1xuICAgICAgd1twcmV2ICsgaV0gPSAtMTtcbiAgICB9XG4gIH0gLy8gbG9vcCBjb2x1bW5zXG5cblxuICBmb3IgKHZhciBrID0gMDsgayA8IG47IGsrKykge1xuICAgIC8vIG5vZGUgayBoYXMgbm8gcGFyZW50IHlldFxuICAgIHBhcmVudFtrXSA9IC0xOyAvLyBub3IgZG9lcyBrIGhhdmUgYW4gYW5jZXN0b3JcblxuICAgIHdbYW5jZXN0b3IgKyBrXSA9IC0xOyAvLyB2YWx1ZXMgaW4gY29sdW1uIGtcblxuICAgIGZvciAodmFyIHAwID0gYXB0cltrXSwgcDEgPSBhcHRyW2sgKyAxXSwgcCA9IHAwOyBwIDwgcDE7IHArKykge1xuICAgICAgLy8gcm93XG4gICAgICB2YXIgciA9IGFpbmRleFtwXTsgLy8gbm9kZVxuXG4gICAgICBpID0gYXRhID8gd1twcmV2ICsgcl0gOiByOyAvLyB0cmF2ZXJzZSBmcm9tIGkgdG8ga1xuXG4gICAgICBmb3IgKDsgaSAhPT0gLTEgJiYgaSA8IGs7IGkgPSBpbmV4dCkge1xuICAgICAgICAvLyBpbmV4dCA9IGFuY2VzdG9yIG9mIGlcbiAgICAgICAgaW5leHQgPSB3W2FuY2VzdG9yICsgaV07IC8vIHBhdGggY29tcHJlc3Npb25cblxuICAgICAgICB3W2FuY2VzdG9yICsgaV0gPSBrOyAvLyBjaGVjayBubyBhbmMuLCBwYXJlbnQgaXMga1xuXG4gICAgICAgIGlmIChpbmV4dCA9PT0gLTEpIHtcbiAgICAgICAgICBwYXJlbnRbaV0gPSBrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChhdGEpIHtcbiAgICAgICAgd1twcmV2ICsgcl0gPSBrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJlbnQ7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNzRmtlZXAgPSBjc0ZrZWVwO1xuXG4vKipcbiAqIEtlZXBzIGVudHJpZXMgaW4gdGhlIG1hdHJpeCB3aGVuIHRoZSBjYWxsYmFjayBmdW5jdGlvbiByZXR1cm5zIHRydWUsIHJlbW92ZXMgdGhlIGVudHJ5IG90aGVyd2lzZVxuICpcbiAqIEBwYXJhbSB7TWF0cml4fSAgIGEgICAgICAgICAgICAgIFRoZSBzcGFyc2UgbWF0cml4XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAgICAgICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24sIGZ1bmN0aW9uIHdpbGwgYmUgaW52b2tlZCB3aXRoIHRoZSBmb2xsb3dpbmcgYXJnczpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGUgZW50cnkgcm93XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gVGhlIGVudHJ5IGNvbHVtblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoZSBlbnRyeSB2YWx1ZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoZSBzdGF0ZSBwYXJhbWV0ZXJcbiAqIEBwYXJhbSB7YW55fSAgICAgIG90aGVyICAgICAgICAgIFRoZSBzdGF0ZVxuICpcbiAqIEByZXR1cm4gICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBudW1iZXIgb2Ygbm9uemVybyBlbGVtZW50cyBpbiB0aGUgbWF0cml4XG4gKlxuICogUmVmZXJlbmNlOiBodHRwOi8vZmFjdWx0eS5jc2UudGFtdS5lZHUvZGF2aXMvcHVibGljYXRpb25zLmh0bWxcbiAqL1xuZnVuY3Rpb24gY3NGa2VlcChhLCBjYWxsYmFjaywgb3RoZXIpIHtcbiAgLy8gYSBhcnJheXNcbiAgdmFyIGF2YWx1ZXMgPSBhLl92YWx1ZXM7XG4gIHZhciBhaW5kZXggPSBhLl9pbmRleDtcbiAgdmFyIGFwdHIgPSBhLl9wdHI7XG4gIHZhciBhc2l6ZSA9IGEuX3NpemU7IC8vIGNvbHVtbnNcblxuICB2YXIgbiA9IGFzaXplWzFdOyAvLyBub256ZXJvIGl0ZW1zXG5cbiAgdmFyIG56ID0gMDsgLy8gbG9vcCBjb2x1bW5zXG5cbiAgZm9yICh2YXIgaiA9IDA7IGogPCBuOyBqKyspIHtcbiAgICAvLyBnZXQgY3VycmVudCBsb2NhdGlvbiBvZiBjb2wgalxuICAgIHZhciBwID0gYXB0cltqXTsgLy8gcmVjb3JkIG5ldyBsb2NhdGlvbiBvZiBjb2wgalxuXG4gICAgYXB0cltqXSA9IG56O1xuXG4gICAgZm9yICg7IHAgPCBhcHRyW2ogKyAxXTsgcCsrKSB7XG4gICAgICAvLyBjaGVjayB3ZSBuZWVkIHRvIGtlZXAgdGhpcyBpdGVtXG4gICAgICBpZiAoY2FsbGJhY2soYWluZGV4W3BdLCBqLCBhdmFsdWVzID8gYXZhbHVlc1twXSA6IDEsIG90aGVyKSkge1xuICAgICAgICAvLyBrZWVwIEEoaSxqKVxuICAgICAgICBhaW5kZXhbbnpdID0gYWluZGV4W3BdOyAvLyBjaGVjayB3ZSBuZWVkIHRvIHByb2Nlc3MgdmFsdWVzIChwYXR0ZXJuIG9ubHkpXG5cbiAgICAgICAgaWYgKGF2YWx1ZXMpIHtcbiAgICAgICAgICBhdmFsdWVzW256XSA9IGF2YWx1ZXNbcF07XG4gICAgICAgIH0gLy8gaW5jcmVtZW50IG5vbnplcm8gaXRlbXNcblxuXG4gICAgICAgIG56Kys7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIGZpbmFsaXplIEFcblxuXG4gIGFwdHJbbl0gPSBuejsgLy8gdHJpbSBhcnJheXNcblxuICBhaW5kZXguc3BsaWNlKG56LCBhaW5kZXgubGVuZ3RoIC0gbnopOyAvLyBjaGVjayB3ZSBuZWVkIHRvIHByb2Nlc3MgdmFsdWVzIChwYXR0ZXJuIG9ubHkpXG5cbiAgaWYgKGF2YWx1ZXMpIHtcbiAgICBhdmFsdWVzLnNwbGljZShueiwgYXZhbHVlcy5sZW5ndGggLSBueik7XG4gIH0gLy8gcmV0dXJuIG51bWJlciBvZiBub256ZXJvIGl0ZW1zXG5cblxuICByZXR1cm4gbno7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNzRmxpcCA9IGNzRmxpcDtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIFwiZmxpcHNcIiBpdHMgaW5wdXQgYWJvdXQgdGhlIGludGVnZXIgLTEuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9ICBpICAgICAgICAgICAgICAgVGhlIHZhbHVlIHRvIGZsaXBcbiAqXG4gKiBSZWZlcmVuY2U6IGh0dHA6Ly9mYWN1bHR5LmNzZS50YW11LmVkdS9kYXZpcy9wdWJsaWNhdGlvbnMuaHRtbFxuICovXG5mdW5jdGlvbiBjc0ZsaXAoaSkge1xuICAvLyBmbGlwIHRoZSB2YWx1ZVxuICByZXR1cm4gLWkgLSAyO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jc0lwdmVjID0gY3NJcHZlYztcblxuLyoqXG4gKiBQZXJtdXRlcyBhIHZlY3RvcjsgeCA9IFAnYi4gSW4gTUFUTEFCIG5vdGF0aW9uLCB4KHApPWIuXG4gKlxuICogQHBhcmFtIHtBcnJheX0gcCAgICAgICAgICAgVGhlIHBlcm11dGF0aW9uIHZlY3RvciBvZiBsZW5ndGggbi4gbnVsbCB2YWx1ZSBkZW5vdGVzIGlkZW50aXR5XG4gKiBAcGFyYW0ge0FycmF5fSBiICAgICAgICAgICBUaGUgaW5wdXQgdmVjdG9yXG4gKlxuICogQHJldHVybiB7QXJyYXl9ICAgICAgICAgICAgVGhlIG91dHB1dCB2ZWN0b3IgeCA9IFAnYlxuICovXG5mdW5jdGlvbiBjc0lwdmVjKHAsIGIpIHtcbiAgLy8gdmFyc1xuICB2YXIgaztcbiAgdmFyIG4gPSBiLmxlbmd0aDtcbiAgdmFyIHggPSBbXTsgLy8gY2hlY2sgcGVybXV0YXRpb24gdmVjdG9yIHdhcyBwcm92aWRlZCwgcCA9IG51bGwgZGVub3RlcyBpZGVudGl0eVxuXG4gIGlmIChwKSB7XG4gICAgLy8gbG9vcCB2ZWN0b3JcbiAgICBmb3IgKGsgPSAwOyBrIDwgbjsgaysrKSB7XG4gICAgICAvLyBhcHBseSBwZXJtdXRhdGlvblxuICAgICAgeFtwW2tdXSA9IGJba107XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGxvb3AgdmVjdG9yXG4gICAgZm9yIChrID0gMDsgayA8IG47IGsrKykge1xuICAgICAgLy8geFtpXSA9IGJbaV1cbiAgICAgIHhba10gPSBiW2tdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB4O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jc0xlYWYgPSBjc0xlYWY7XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIGlmIGogaXMgYSBsZWFmIG9mIHRoZSBpdGggcm93IHN1YnRyZWUuXG4gKiBDb25zaWRlciBBKGksaiksIG5vZGUgaiBpbiBpdGggcm93IHN1YnRyZWUgYW5kIHJldHVybiBsY2EoanByZXYsailcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gIGkgICAgICAgICAgICAgICBUaGUgaXRoIHJvdyBzdWJ0cmVlXG4gKiBAcGFyYW0ge051bWJlcn0gIGogICAgICAgICAgICAgICBUaGUgbm9kZSB0byB0ZXN0XG4gKiBAcGFyYW0ge0FycmF5fSAgIHcgICAgICAgICAgICAgICBUaGUgd29ya3NwYWNlIGFycmF5XG4gKiBAcGFyYW0ge051bWJlcn0gIGZpcnN0ICAgICAgICAgICBUaGUgaW5kZXggb2Zmc2V0IHdpdGhpbiB0aGUgd29ya3NwYWNlIGZvciB0aGUgZmlyc3QgYXJyYXlcbiAqIEBwYXJhbSB7TnVtYmVyfSAgbWF4Zmlyc3QgICAgICAgIFRoZSBpbmRleCBvZmZzZXQgd2l0aGluIHRoZSB3b3Jrc3BhY2UgZm9yIHRoZSBtYXhmaXJzdCBhcnJheVxuICogQHBhcmFtIHtOdW1iZXJ9ICBwcmV2bGVhZiAgICAgICAgVGhlIGluZGV4IG9mZnNldCB3aXRoaW4gdGhlIHdvcmtzcGFjZSBmb3IgdGhlIHByZXZsZWFmIGFycmF5XG4gKiBAcGFyYW0ge051bWJlcn0gIGFuY2VzdG9yICAgICAgICBUaGUgaW5kZXggb2Zmc2V0IHdpdGhpbiB0aGUgd29ya3NwYWNlIGZvciB0aGUgYW5jZXN0b3IgYXJyYXlcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKlxuICogUmVmZXJlbmNlOiBodHRwOi8vZmFjdWx0eS5jc2UudGFtdS5lZHUvZGF2aXMvcHVibGljYXRpb25zLmh0bWxcbiAqL1xuZnVuY3Rpb24gY3NMZWFmKGksIGosIHcsIGZpcnN0LCBtYXhmaXJzdCwgcHJldmxlYWYsIGFuY2VzdG9yKSB7XG4gIHZhciBzLCBzcGFyZW50OyAvLyBvdXIgcmVzdWx0XG5cbiAgdmFyIGpsZWFmID0gMDtcbiAgdmFyIHE7IC8vIGNoZWNrIGogaXMgYSBsZWFmXG5cbiAgaWYgKGkgPD0gaiB8fCB3W2ZpcnN0ICsgal0gPD0gd1ttYXhmaXJzdCArIGldKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9IC8vIHVwZGF0ZSBtYXggZmlyc3Rbal0gc2VlbiBzbyBmYXJcblxuXG4gIHdbbWF4Zmlyc3QgKyBpXSA9IHdbZmlyc3QgKyBqXTsgLy8ganByZXYgPSBwcmV2aW91cyBsZWFmIG9mIGl0aCBzdWJ0cmVlXG5cbiAgdmFyIGpwcmV2ID0gd1twcmV2bGVhZiArIGldO1xuICB3W3ByZXZsZWFmICsgaV0gPSBqOyAvLyBjaGVjayBqIGlzIGZpcnN0IG9yIHN1YnNlcXVlbnQgbGVhZlxuXG4gIGlmIChqcHJldiA9PT0gLTEpIHtcbiAgICAvLyAxc3QgbGVhZiwgcSA9IHJvb3Qgb2YgaXRoIHN1YnRyZWVcbiAgICBqbGVhZiA9IDE7XG4gICAgcSA9IGk7XG4gIH0gZWxzZSB7XG4gICAgLy8gdXBkYXRlIGpsZWFmXG4gICAgamxlYWYgPSAyOyAvLyBxID0gbGVhc3QgY29tbW9uIGFuY2VzdGVyIChqcHJldixqKVxuXG4gICAgZm9yIChxID0ganByZXY7IHEgIT09IHdbYW5jZXN0b3IgKyBxXTsgcSA9IHdbYW5jZXN0b3IgKyBxXSkge1xuICAgICAgO1xuICAgIH1cblxuICAgIGZvciAocyA9IGpwcmV2OyBzICE9PSBxOyBzID0gc3BhcmVudCkge1xuICAgICAgLy8gcGF0aCBjb21wcmVzc2lvblxuICAgICAgc3BhcmVudCA9IHdbYW5jZXN0b3IgKyBzXTtcbiAgICAgIHdbYW5jZXN0b3IgKyBzXSA9IHE7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBqbGVhZjogamxlYWYsXG4gICAgcTogcVxuICB9O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDc0x1ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jc1Nwc29sdmUgPSByZXF1aXJlKFwiLi9jc1Nwc29sdmVcIik7XG5cbnZhciBuYW1lID0gJ2NzTHUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnYWJzJywgJ2RpdmlkZVNjYWxhcicsICdtdWx0aXBseScsICdzdWJ0cmFjdCcsICdsYXJnZXInLCAnbGFyZ2VyRXEnLCAnU3BhcnNlTWF0cml4J107XG52YXIgY3JlYXRlQ3NMdSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBhYnMgPSBfcmVmLmFicyxcbiAgICAgIGRpdmlkZVNjYWxhciA9IF9yZWYuZGl2aWRlU2NhbGFyLFxuICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5LFxuICAgICAgc3VidHJhY3QgPSBfcmVmLnN1YnRyYWN0LFxuICAgICAgbGFyZ2VyID0gX3JlZi5sYXJnZXIsXG4gICAgICBsYXJnZXJFcSA9IF9yZWYubGFyZ2VyRXEsXG4gICAgICBTcGFyc2VNYXRyaXggPSBfcmVmLlNwYXJzZU1hdHJpeDtcbiAgdmFyIGNzU3Bzb2x2ZSA9ICgwLCBfY3NTcHNvbHZlLmNyZWF0ZUNzU3Bzb2x2ZSkoe1xuICAgIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICAgIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgICBzdWJ0cmFjdDogc3VidHJhY3RcbiAgfSk7XG4gIC8qKlxuICAgKiBDb21wdXRlcyB0aGUgbnVtZXJpYyBMVSBmYWN0b3JpemF0aW9uIG9mIHRoZSBzcGFyc2UgbWF0cml4IEEuIEltcGxlbWVudHMgYSBMZWZ0LWxvb2tpbmcgTFUgZmFjdG9yaXphdGlvblxuICAgKiBhbGdvcml0aG0gdGhhdCBjb21wdXRlcyBMIGFuZCBVIG9uZSBjb2x1bW4gYXQgYSB0dW1lLiBBdCB0aGUga3RoIHN0ZXAsIGl0IGFjY2VzcyBjb2x1bW5zIDEgdG8gay0xIG9mIExcbiAgICogYW5kIGNvbHVtbiBrIG9mIEEuIEdpdmVuIHRoZSBmaWxsLXJlZHVjaW5nIGNvbHVtbiBvcmRlcmluZyBxIChzZWUgcGFyYW1ldGVyIHMpIGNvbXB1dGVzIEwsIFUgYW5kIHBpbnYgc29cbiAgICogTCAqIFUgPSBBKHAsIHEpLCB3aGVyZSBwIGlzIHRoZSBpbnZlcnNlIG9mIHBpbnYuXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgbSAgICAgICAgICAgICAgIFRoZSBBIE1hdHJpeCB0byBmYWN0b3JpemVcbiAgICogQHBhcmFtIHtPYmplY3R9ICBzICAgICAgICAgICAgICAgVGhlIHN5bWJvbGljIGFuYWx5c2lzIGZyb20gY3NTcXIoKS4gUHJvdmlkZXMgdGhlIGZpbGwtcmVkdWNpbmdcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uIG9yZGVyaW5nIHFcbiAgICogQHBhcmFtIHtOdW1iZXJ9ICB0b2wgICAgICAgICAgICAgUGFydGlhbCBwaXZvdGluZyB0aHJlc2hvbGQgKDEgZm9yIHBhcnRpYWwgcGl2b3RpbmcpXG4gICAqXG4gICAqIEByZXR1cm4ge051bWJlcn0gICAgICAgICAgICAgICAgIFRoZSBudW1lcmljIExVIGZhY3Rvcml6YXRpb24gb2YgQSBvciBudWxsXG4gICAqXG4gICAqIFJlZmVyZW5jZTogaHR0cDovL2ZhY3VsdHkuY3NlLnRhbXUuZWR1L2RhdmlzL3B1YmxpY2F0aW9ucy5odG1sXG4gICAqL1xuXG4gIHJldHVybiBmdW5jdGlvbiBjc0x1KG0sIHMsIHRvbCkge1xuICAgIC8vIHZhbGlkYXRlIGlucHV0XG4gICAgaWYgKCFtKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IC8vIG0gYXJyYXlzXG5cblxuICAgIHZhciBzaXplID0gbS5fc2l6ZTsgLy8gY29sdW1uc1xuXG4gICAgdmFyIG4gPSBzaXplWzFdOyAvLyBzeW1ib2xpYyBhbmFseXNpcyByZXN1bHRcblxuICAgIHZhciBxO1xuICAgIHZhciBsbnogPSAxMDA7XG4gICAgdmFyIHVueiA9IDEwMDsgLy8gdXBkYXRlIHN5bWJvbGljIGFuYWx5c2lzIHBhcmFtZXRlcnNcblxuICAgIGlmIChzKSB7XG4gICAgICBxID0gcy5xO1xuICAgICAgbG56ID0gcy5sbnogfHwgbG56O1xuICAgICAgdW56ID0gcy51bnogfHwgdW56O1xuICAgIH0gLy8gTCBhcnJheXNcblxuXG4gICAgdmFyIGx2YWx1ZXMgPSBbXTsgLy8gKGxueilcblxuICAgIHZhciBsaW5kZXggPSBbXTsgLy8gKGxueilcblxuICAgIHZhciBscHRyID0gW107IC8vIChuICsgMSlcbiAgICAvLyBMXG5cbiAgICB2YXIgTCA9IG5ldyBTcGFyc2VNYXRyaXgoe1xuICAgICAgdmFsdWVzOiBsdmFsdWVzLFxuICAgICAgaW5kZXg6IGxpbmRleCxcbiAgICAgIHB0cjogbHB0cixcbiAgICAgIHNpemU6IFtuLCBuXVxuICAgIH0pOyAvLyBVIGFycmF5c1xuXG4gICAgdmFyIHV2YWx1ZXMgPSBbXTsgLy8gKHVueilcblxuICAgIHZhciB1aW5kZXggPSBbXTsgLy8gKHVueilcblxuICAgIHZhciB1cHRyID0gW107IC8vIChuICsgMSlcbiAgICAvLyBVXG5cbiAgICB2YXIgVSA9IG5ldyBTcGFyc2VNYXRyaXgoe1xuICAgICAgdmFsdWVzOiB1dmFsdWVzLFxuICAgICAgaW5kZXg6IHVpbmRleCxcbiAgICAgIHB0cjogdXB0cixcbiAgICAgIHNpemU6IFtuLCBuXVxuICAgIH0pOyAvLyBpbnZlcnNlIG9mIHBlcm11dGF0aW9uIHZlY3RvclxuXG4gICAgdmFyIHBpbnYgPSBbXTsgLy8gKG4pXG4gICAgLy8gdmFyc1xuXG4gICAgdmFyIGksIHA7IC8vIGFsbG9jYXRlIGFycmF5c1xuXG4gICAgdmFyIHggPSBbXTsgLy8gKG4pXG5cbiAgICB2YXIgeGkgPSBbXTsgLy8gKDIgKiBuKVxuICAgIC8vIGluaXRpYWxpemUgdmFyaWFibGVzXG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAvLyBjbGVhciB3b3Jrc3BhY2VcbiAgICAgIHhbaV0gPSAwOyAvLyBubyByb3dzIHBpdm90YWwgeWV0XG5cbiAgICAgIHBpbnZbaV0gPSAtMTsgLy8gbm8gY29scyBvZiBMIHlldFxuXG4gICAgICBscHRyW2kgKyAxXSA9IDA7XG4gICAgfSAvLyByZXNldCBudW1iZXIgb2Ygbm9uemVybyBlbGVtZW50cyBpbiBMIGFuZCBVXG5cblxuICAgIGxueiA9IDA7XG4gICAgdW56ID0gMDsgLy8gY29tcHV0ZSBMKDosaykgYW5kIFUoOixrKVxuXG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCBuOyBrKyspIHtcbiAgICAgIC8vIHVwZGF0ZSBwdHJcbiAgICAgIGxwdHJba10gPSBsbno7XG4gICAgICB1cHRyW2tdID0gdW56OyAvLyBhcHBseSBjb2x1bW4gcGVybXV0YXRpb25zIGlmIG5lZWRlZFxuXG4gICAgICB2YXIgY29sID0gcSA/IHFba10gOiBrOyAvLyBzb2x2ZSB0cmlhbmd1bGFyIHN5c3RlbSwgeCA9IExcXEEoOixjb2wpXG5cbiAgICAgIHZhciB0b3AgPSBjc1Nwc29sdmUoTCwgbSwgY29sLCB4aSwgeCwgcGludiwgMSk7IC8vIGZpbmQgcGl2b3RcblxuICAgICAgdmFyIGlwaXYgPSAtMTtcbiAgICAgIHZhciBhID0gLTE7IC8vIGxvb3AgeGlbXSBmcm9tIHRvcCAtPiBuXG5cbiAgICAgIGZvciAocCA9IHRvcDsgcCA8IG47IHArKykge1xuICAgICAgICAvLyB4W2ldIGlzIG5vbnplcm9cbiAgICAgICAgaSA9IHhpW3BdOyAvLyBjaGVjayByb3cgaSBpcyBub3QgeWV0IHBpdm90YWxcblxuICAgICAgICBpZiAocGludltpXSA8IDApIHtcbiAgICAgICAgICAvLyBhYnNvbHV0ZSB2YWx1ZSBvZiB4W2ldXG4gICAgICAgICAgdmFyIHhhYnMgPSBhYnMoeFtpXSk7IC8vIGNoZWNrIGFic291bHRlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBwaXZvdCB2YWx1ZVxuXG4gICAgICAgICAgaWYgKGxhcmdlcih4YWJzLCBhKSkge1xuICAgICAgICAgICAgLy8gbGFyZ2VzdCBwaXZvdCBjYW5kaWRhdGUgc28gZmFyXG4gICAgICAgICAgICBhID0geGFicztcbiAgICAgICAgICAgIGlwaXYgPSBpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB4KGkpIGlzIHRoZSBlbnRyeSBVKHBpbnZbaV0saylcbiAgICAgICAgICB1aW5kZXhbdW56XSA9IHBpbnZbaV07XG4gICAgICAgICAgdXZhbHVlc1t1bnorK10gPSB4W2ldO1xuICAgICAgICB9XG4gICAgICB9IC8vIHZhbGlkYXRlIHdlIGZvdW5kIGEgdmFsaWQgcGl2b3RcblxuXG4gICAgICBpZiAoaXBpdiA9PT0gLTEgfHwgYSA8PSAwKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSAvLyB1cGRhdGUgYWN0dWFsIHBpdm90IGNvbHVtbiwgZ2l2ZSBwcmVmZXJlbmNlIHRvIGRpYWdvbmFsIHZhbHVlXG5cblxuICAgICAgaWYgKHBpbnZbY29sXSA8IDAgJiYgbGFyZ2VyRXEoYWJzKHhbY29sXSksIG11bHRpcGx5KGEsIHRvbCkpKSB7XG4gICAgICAgIGlwaXYgPSBjb2w7XG4gICAgICB9IC8vIHRoZSBjaG9zZW4gcGl2b3RcblxuXG4gICAgICB2YXIgcGl2b3QgPSB4W2lwaXZdOyAvLyBsYXN0IGVudHJ5IGluIFUoOixrKSBpcyBVKGssaylcblxuICAgICAgdWluZGV4W3Vuel0gPSBrO1xuICAgICAgdXZhbHVlc1t1bnorK10gPSBwaXZvdDsgLy8gaXBpdiBpcyB0aGUga3RoIHBpdm90IHJvd1xuXG4gICAgICBwaW52W2lwaXZdID0gazsgLy8gZmlyc3QgZW50cnkgaW4gTCg6LGspIGlzIEwoayxrKSA9IDFcblxuICAgICAgbGluZGV4W2xuel0gPSBpcGl2O1xuICAgICAgbHZhbHVlc1tsbnorK10gPSAxOyAvLyBMKGsrMTpuLGspID0geCAvIHBpdm90XG5cbiAgICAgIGZvciAocCA9IHRvcDsgcCA8IG47IHArKykge1xuICAgICAgICAvLyByb3dcbiAgICAgICAgaSA9IHhpW3BdOyAvLyBjaGVjayB4KGkpIGlzIGFuIGVudHJ5IGluIEwoOixrKVxuXG4gICAgICAgIGlmIChwaW52W2ldIDwgMCkge1xuICAgICAgICAgIC8vIHNhdmUgdW5wZXJtdXRlZCByb3cgaW4gTFxuICAgICAgICAgIGxpbmRleFtsbnpdID0gaTsgLy8gc2NhbGUgcGl2b3QgY29sdW1uXG5cbiAgICAgICAgICBsdmFsdWVzW2xueisrXSA9IGRpdmlkZVNjYWxhcih4W2ldLCBwaXZvdCk7XG4gICAgICAgIH0gLy8geFswLi5uLTFdID0gMCBmb3IgbmV4dCBrXG5cblxuICAgICAgICB4W2ldID0gMDtcbiAgICAgIH1cbiAgICB9IC8vIHVwZGF0ZSBwdHJcblxuXG4gICAgbHB0cltuXSA9IGxuejtcbiAgICB1cHRyW25dID0gdW56OyAvLyBmaXggcm93IGluZGljZXMgb2YgTCBmb3IgZmluYWwgcGludlxuXG4gICAgZm9yIChwID0gMDsgcCA8IGxuejsgcCsrKSB7XG4gICAgICBsaW5kZXhbcF0gPSBwaW52W2xpbmRleFtwXV07XG4gICAgfSAvLyB0cmltIGFycmF5c1xuXG5cbiAgICBsdmFsdWVzLnNwbGljZShsbnosIGx2YWx1ZXMubGVuZ3RoIC0gbG56KTtcbiAgICBsaW5kZXguc3BsaWNlKGxueiwgbGluZGV4Lmxlbmd0aCAtIGxueik7XG4gICAgdXZhbHVlcy5zcGxpY2UodW56LCB1dmFsdWVzLmxlbmd0aCAtIHVueik7XG4gICAgdWluZGV4LnNwbGljZSh1bnosIHVpbmRleC5sZW5ndGggLSB1bnopOyAvLyByZXR1cm4gTFUgZmFjdG9yXG5cbiAgICByZXR1cm4ge1xuICAgICAgTDogTCxcbiAgICAgIFU6IFUsXG4gICAgICBwaW52OiBwaW52XG4gICAgfTtcbiAgfTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVDc0x1ID0gY3JlYXRlQ3NMdTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3NNYXJrID0gY3NNYXJrO1xuXG52YXIgX2NzRmxpcCA9IHJlcXVpcmUoXCIuL2NzRmxpcFwiKTtcblxuLyoqXG4gKiBNYXJrcyB0aGUgbm9kZSBhdCB3W2pdXG4gKlxuICogQHBhcmFtIHtBcnJheX0gICB3ICAgICAgICAgICAgICAgVGhlIGFycmF5XG4gKiBAcGFyYW0ge051bWJlcn0gIGogICAgICAgICAgICAgICBUaGUgYXJyYXkgaW5kZXhcbiAqXG4gKiBSZWZlcmVuY2U6IGh0dHA6Ly9mYWN1bHR5LmNzZS50YW11LmVkdS9kYXZpcy9wdWJsaWNhdGlvbnMuaHRtbFxuICovXG5mdW5jdGlvbiBjc01hcmsodywgaikge1xuICAvLyBtYXJrIHdbal1cbiAgd1tqXSA9ICgwLCBfY3NGbGlwLmNzRmxpcCkod1tqXSk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNzTWFya2VkID0gY3NNYXJrZWQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBub2RlIGF0IHdbal0gaXMgbWFya2VkXG4gKlxuICogQHBhcmFtIHtBcnJheX0gICB3ICAgICAgICAgICAgICAgVGhlIGFycmF5XG4gKiBAcGFyYW0ge051bWJlcn0gIGogICAgICAgICAgICAgICBUaGUgYXJyYXkgaW5kZXhcbiAqXG4gKiBSZWZlcmVuY2U6IGh0dHA6Ly9mYWN1bHR5LmNzZS50YW11LmVkdS9kYXZpcy9wdWJsaWNhdGlvbnMuaHRtbFxuICovXG5mdW5jdGlvbiBjc01hcmtlZCh3LCBqKSB7XG4gIC8vIGNoZWNrIG5vZGUgaXMgbWFya2VkXG4gIHJldHVybiB3W2pdIDwgMDtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3NQZXJtdXRlID0gY3NQZXJtdXRlO1xuXG4vKipcbiAqIFBlcm11dGVzIGEgc3BhcnNlIG1hdHJpeCBDID0gUCAqIEEgKiBRXG4gKlxuICogQHBhcmFtIHtTcGFyc2VNYXRyaXh9ICBhICAgICAgICAgVGhlIE1hdHJpeCBBXG4gKiBAcGFyYW0ge0FycmF5fSAgIHBpbnYgICAgICAgICAgICBUaGUgcm93IHBlcm11dGF0aW9uIHZlY3RvclxuICogQHBhcmFtIHtBcnJheX0gICBxICAgICAgICAgICAgICAgVGhlIGNvbHVtbiBwZXJtdXRhdGlvbiB2ZWN0b3JcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWVzICAgICAgICAgIENyZWF0ZSBhIHBhdHRlcm4gbWF0cml4IChmYWxzZSksIHZhbHVlcyBhbmQgcGF0dGVybiBvdGhlcndpc2VcbiAqXG4gKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgICAgICBDID0gUCAqIEEgKiBRLCBudWxsIG9uIGVycm9yXG4gKlxuICogUmVmZXJlbmNlOiBodHRwOi8vZmFjdWx0eS5jc2UudGFtdS5lZHUvZGF2aXMvcHVibGljYXRpb25zLmh0bWxcbiAqL1xuZnVuY3Rpb24gY3NQZXJtdXRlKGEsIHBpbnYsIHEsIHZhbHVlcykge1xuICAvLyBhIGFycmF5c1xuICB2YXIgYXZhbHVlcyA9IGEuX3ZhbHVlcztcbiAgdmFyIGFpbmRleCA9IGEuX2luZGV4O1xuICB2YXIgYXB0ciA9IGEuX3B0cjtcbiAgdmFyIGFzaXplID0gYS5fc2l6ZTtcbiAgdmFyIGFkdCA9IGEuX2RhdGF0eXBlOyAvLyByb3dzICYgY29sdW1uc1xuXG4gIHZhciBtID0gYXNpemVbMF07XG4gIHZhciBuID0gYXNpemVbMV07IC8vIGMgYXJyYXlzXG5cbiAgdmFyIGN2YWx1ZXMgPSB2YWx1ZXMgJiYgYS5fdmFsdWVzID8gW10gOiBudWxsO1xuICB2YXIgY2luZGV4ID0gW107IC8vIChhcHRyW25dKVxuXG4gIHZhciBjcHRyID0gW107IC8vIChuICsgMSlcbiAgLy8gaW5pdGlhbGl6ZSB2YXJzXG5cbiAgdmFyIG56ID0gMDsgLy8gbG9vcCBjb2x1bW5zXG5cbiAgZm9yICh2YXIgayA9IDA7IGsgPCBuOyBrKyspIHtcbiAgICAvLyBjb2x1bW4gayBvZiBDIGlzIGNvbHVtbiBxW2tdIG9mIEFcbiAgICBjcHRyW2tdID0gbno7IC8vIGFwcGx5IGNvbHVtbiBwZXJtdXRhdGlvblxuXG4gICAgdmFyIGogPSBxID8gcVtrXSA6IGs7IC8vIGxvb3AgdmFsdWVzIGluIGNvbHVtbiBqIG9mIEFcblxuICAgIGZvciAodmFyIHQwID0gYXB0cltqXSwgdDEgPSBhcHRyW2ogKyAxXSwgdCA9IHQwOyB0IDwgdDE7IHQrKykge1xuICAgICAgLy8gcm93IGkgb2YgQSBpcyByb3cgcGludltpXSBvZiBDXG4gICAgICB2YXIgciA9IHBpbnYgPyBwaW52W2FpbmRleFt0XV0gOiBhaW5kZXhbdF07IC8vIGluZGV4XG5cbiAgICAgIGNpbmRleFtuel0gPSByOyAvLyBjaGVjayB3ZSBuZWVkIHRvIHBvcHVsYXRlIHZhbHVlc1xuXG4gICAgICBpZiAoY3ZhbHVlcykge1xuICAgICAgICBjdmFsdWVzW256XSA9IGF2YWx1ZXNbdF07XG4gICAgICB9IC8vIGluY3JlbWVudCBudW1iZXIgb2Ygbm9uemVybyBlbGVtZW50c1xuXG5cbiAgICAgIG56Kys7XG4gICAgfVxuICB9IC8vIGZpbmFsaXplIHRoZSBsYXN0IGNvbHVtbiBvZiBDXG5cblxuICBjcHRyW25dID0gbno7IC8vIHJldHVybiBDIG1hdHJpeFxuXG4gIHJldHVybiBhLmNyZWF0ZVNwYXJzZU1hdHJpeCh7XG4gICAgdmFsdWVzOiBjdmFsdWVzLFxuICAgIGluZGV4OiBjaW5kZXgsXG4gICAgcHRyOiBjcHRyLFxuICAgIHNpemU6IFttLCBuXSxcbiAgICBkYXRhdHlwZTogYWR0XG4gIH0pO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jc1Bvc3QgPSBjc1Bvc3Q7XG5cbnZhciBfY3NUZGZzID0gcmVxdWlyZShcIi4vY3NUZGZzXCIpO1xuXG4vKipcbiAqIFBvc3Qgb3JkZXIgYSB0cmVlIG9mIGZvcmVzdFxuICpcbiAqIEBwYXJhbSB7QXJyYXl9ICAgcGFyZW50ICAgICAgICAgIFRoZSB0cmVlIG9yIGZvcmVzdFxuICogQHBhcmFtIHtOdW1iZXJ9ICBuICAgICAgICAgICAgICAgTnVtYmVyIG9mIGNvbHVtbnNcbiAqXG4gKiBSZWZlcmVuY2U6IGh0dHA6Ly9mYWN1bHR5LmNzZS50YW11LmVkdS9kYXZpcy9wdWJsaWNhdGlvbnMuaHRtbFxuICovXG5mdW5jdGlvbiBjc1Bvc3QocGFyZW50LCBuKSB7XG4gIC8vIGNoZWNrIGlucHV0c1xuICBpZiAoIXBhcmVudCkge1xuICAgIHJldHVybiBudWxsO1xuICB9IC8vIHZhcnNcblxuXG4gIHZhciBrID0gMDtcbiAgdmFyIGo7IC8vIGFsbG9jYXRlIHJlc3VsdFxuXG4gIHZhciBwb3N0ID0gW107IC8vIChuKVxuICAvLyB3b3Jrc3BhY2UsIGhlYWQ6IGZpcnN0IG4gZW50cmllcywgbmV4dDogbmV4dCBuIGVudHJpZXMsIHN0YWNrOiBsYXN0IG4gZW50cmllc1xuXG4gIHZhciB3ID0gW107IC8vICgzICogbilcblxuICB2YXIgaGVhZCA9IDA7XG4gIHZhciBuZXh0ID0gbjtcbiAgdmFyIHN0YWNrID0gMiAqIG47IC8vIGluaXRpYWxpemUgd29ya3NwYWNlXG5cbiAgZm9yIChqID0gMDsgaiA8IG47IGorKykge1xuICAgIC8vIGVtcHR5IGxpbmtlZCBsaXN0c1xuICAgIHdbaGVhZCArIGpdID0gLTE7XG4gIH0gLy8gdHJhdmVyc2Ugbm9kZXMgaW4gcmV2ZXJzZSBvcmRlclxuXG5cbiAgZm9yIChqID0gbiAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgLy8gY2hlY2sgaiBpcyBhIHJvb3RcbiAgICBpZiAocGFyZW50W2pdID09PSAtMSkge1xuICAgICAgY29udGludWU7XG4gICAgfSAvLyBhZGQgaiB0byBsaXN0IG9mIGl0cyBwYXJlbnRcblxuXG4gICAgd1tuZXh0ICsgal0gPSB3W2hlYWQgKyBwYXJlbnRbal1dO1xuICAgIHdbaGVhZCArIHBhcmVudFtqXV0gPSBqO1xuICB9IC8vIGxvb3Agbm9kZXNcblxuXG4gIGZvciAoaiA9IDA7IGogPCBuOyBqKyspIHtcbiAgICAvLyBza2lwIGogaWYgaXQgaXMgbm90IGEgcm9vdFxuICAgIGlmIChwYXJlbnRbal0gIT09IC0xKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9IC8vIGRlcHRoLWZpcnN0IHNlYXJjaFxuXG5cbiAgICBrID0gKDAsIF9jc1RkZnMuY3NUZGZzKShqLCBrLCB3LCBoZWFkLCBuZXh0LCBwb3N0LCBzdGFjayk7XG4gIH1cblxuICByZXR1cm4gcG9zdDtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3NSZWFjaCA9IGNzUmVhY2g7XG5cbnZhciBfY3NNYXJrZWQgPSByZXF1aXJlKFwiLi9jc01hcmtlZFwiKTtcblxudmFyIF9jc01hcmsgPSByZXF1aXJlKFwiLi9jc01hcmtcIik7XG5cbnZhciBfY3NEZnMgPSByZXF1aXJlKFwiLi9jc0Rmc1wiKTtcblxuLyoqXG4gKiBUaGUgY3NSZWFjaCBmdW5jdGlvbiBjb21wdXRlcyBYID0gUmVhY2goQiksIHdoZXJlIEIgaXMgdGhlIG5vbnplcm8gcGF0dGVybiBvZiB0aGUgbi1ieS0xXG4gKiBzcGFyc2UgY29sdW1uIG9mIHZlY3RvciBiLiBUaGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgc2V0IG9mIG5vZGVzIHJlYWNoYWJsZSBmcm9tIGFueSBub2RlIGluIEIuIFRoZVxuICogbm9uemVybyBwYXR0ZXJuIHhpIG9mIHRoZSBzb2x1dGlvbiB4IHRvIHRoZSBzcGFyc2UgbGluZWFyIHN5c3RlbSBMeD1iIGlzIGdpdmVuIGJ5IFg9UmVhY2goQikuXG4gKlxuICogQHBhcmFtIHtNYXRyaXh9ICBnICAgICAgICAgICAgICAgVGhlIEcgbWF0cml4XG4gKiBAcGFyYW0ge01hdHJpeH0gIGIgICAgICAgICAgICAgICBUaGUgQiBtYXRyaXhcbiAqIEBwYXJhbSB7TnVtYmVyfSAgayAgICAgICAgICAgICAgIFRoZSBrdGggY29sdW1uIGluIEJcbiAqIEBwYXJhbSB7QXJyYXl9ICAgeGkgICAgICAgICAgICAgIFRoZSBub256ZXJvIHBhdHRlcm4geGlbdG9wXSAuLiB4aVtuIC0gMV0sIGFuIGFycmF5IG9mIHNpemUgPSAyICogblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZpcnN0IG4gZW50cmllcyBpcyB0aGUgbm9uemVybyBwYXR0ZXJuLCB0aGUgbGFzdCBuIGVudHJpZXMgaXMgdGhlIHN0YWNrXG4gKiBAcGFyYW0ge0FycmF5fSAgIHBpbnYgICAgICAgICAgICBUaGUgaW52ZXJzZSByb3cgcGVybXV0YXRpb24gdmVjdG9yXG4gKlxuICogQHJldHVybiB7TnVtYmVyfSAgICAgICAgICAgICAgICAgVGhlIGluZGV4IGZvciB0aGUgbm9uemVybyBwYXR0ZXJuXG4gKlxuICogUmVmZXJlbmNlOiBodHRwOi8vZmFjdWx0eS5jc2UudGFtdS5lZHUvZGF2aXMvcHVibGljYXRpb25zLmh0bWxcbiAqL1xuZnVuY3Rpb24gY3NSZWFjaChnLCBiLCBrLCB4aSwgcGludikge1xuICAvLyBnIGFycmF5c1xuICB2YXIgZ3B0ciA9IGcuX3B0cjtcbiAgdmFyIGdzaXplID0gZy5fc2l6ZTsgLy8gYiBhcnJheXNcblxuICB2YXIgYmluZGV4ID0gYi5faW5kZXg7XG4gIHZhciBicHRyID0gYi5fcHRyOyAvLyBjb2x1bW5zXG5cbiAgdmFyIG4gPSBnc2l6ZVsxXTsgLy8gdmFyc1xuXG4gIHZhciBwLCBwMCwgcDE7IC8vIGluaXRpYWxpemUgdG9wXG5cbiAgdmFyIHRvcCA9IG47IC8vIGxvb3AgY29sdW1uIGluZGVjZXMgaW4gQlxuXG4gIGZvciAocDAgPSBicHRyW2tdLCBwMSA9IGJwdHJbayArIDFdLCBwID0gcDA7IHAgPCBwMTsgcCsrKSB7XG4gICAgLy8gbm9kZSBpXG4gICAgdmFyIGkgPSBiaW5kZXhbcF07IC8vIGNoZWNrIG5vZGUgaSBpcyBtYXJrZWRcblxuICAgIGlmICghKDAsIF9jc01hcmtlZC5jc01hcmtlZCkoZ3B0ciwgaSkpIHtcbiAgICAgIC8vIHN0YXJ0IGEgZGZzIGF0IHVubWFya2VkIG5vZGUgaVxuICAgICAgdG9wID0gKDAsIF9jc0Rmcy5jc0RmcykoaSwgZywgdG9wLCB4aSwgcGludik7XG4gICAgfVxuICB9IC8vIGxvb3AgY29sdW1ucyBmcm9tIHRvcCAtPiBuIC0gMVxuXG5cbiAgZm9yIChwID0gdG9wOyBwIDwgbjsgcCsrKSB7XG4gICAgLy8gcmVzdG9yZSBHXG4gICAgKDAsIF9jc01hcmsuY3NNYXJrKShncHRyLCB4aVtwXSk7XG4gIH1cblxuICByZXR1cm4gdG9wO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDc1Nwc29sdmUgPSB2b2lkIDA7XG5cbnZhciBfY3NSZWFjaCA9IHJlcXVpcmUoXCIuL2NzUmVhY2hcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdjc1Nwc29sdmUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnZGl2aWRlU2NhbGFyJywgJ211bHRpcGx5JywgJ3N1YnRyYWN0J107XG52YXIgY3JlYXRlQ3NTcHNvbHZlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIGRpdmlkZVNjYWxhciA9IF9yZWYuZGl2aWRlU2NhbGFyLFxuICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5LFxuICAgICAgc3VidHJhY3QgPSBfcmVmLnN1YnRyYWN0O1xuXG4gIC8qKlxuICAgKiBUaGUgZnVuY3Rpb24gY3NTcHNvbHZlKCkgY29tcHV0ZXMgdGhlIHNvbHV0aW9uIHRvIEcgKiB4ID0gYmssIHdoZXJlIGJrIGlzIHRoZVxuICAgKiBrdGggY29sdW1uIG9mIEIuIFdoZW4gbG8gaXMgdHJ1ZSwgdGhlIGZ1bmN0aW9uIGFzc3VtZXMgRyA9IEwgaXMgbG93ZXIgdHJpYW5ndWxhciB3aXRoIHRoZVxuICAgKiBkaWFnb25hbCBlbnRyeSBhcyB0aGUgZmlyc3QgZW50cnkgaW4gZWFjaCBjb2x1bW4uIFdoZW4gbG8gaXMgdHJ1ZSwgdGhlIGZ1bmN0aW9uIGFzc3VtZXMgRyA9IFVcbiAgICogaXMgdXBwZXIgdHJpYW5ndWxhciB3aXRoIHRoZSBkaWFnb25hbCBlbnRyeSBhcyB0aGUgbGFzdCBlbnRyeSBpbiBlYWNoIGNvbHVtbi5cbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9ICBnICAgICAgICAgICAgICAgVGhlIEcgbWF0cml4XG4gICAqIEBwYXJhbSB7TWF0cml4fSAgYiAgICAgICAgICAgICAgIFRoZSBCIG1hdHJpeFxuICAgKiBAcGFyYW0ge051bWJlcn0gIGsgICAgICAgICAgICAgICBUaGUga3RoIGNvbHVtbiBpbiBCXG4gICAqIEBwYXJhbSB7QXJyYXl9ICAgeGkgICAgICAgICAgICAgIFRoZSBub256ZXJvIHBhdHRlcm4geGlbdG9wXSAuLiB4aVtuIC0gMV0sIGFuIGFycmF5IG9mIHNpemUgPSAyICogblxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZmlyc3QgbiBlbnRyaWVzIGlzIHRoZSBub256ZXJvIHBhdHRlcm4sIHRoZSBsYXN0IG4gZW50cmllcyBpcyB0aGUgc3RhY2tcbiAgICogQHBhcmFtIHtBcnJheX0gICB4ICAgICAgICAgICAgICAgVGhlIHNvbHV0b24gdG8gdGhlIGxpbmVhciBzeXN0ZW0gRyAqIHggPSBiXG4gICAqIEBwYXJhbSB7QXJyYXl9ICAgcGludiAgICAgICAgICAgIFRoZSBpbnZlcnNlIHJvdyBwZXJtdXRhdGlvbiB2ZWN0b3IsIG11c3QgYmUgbnVsbCBmb3IgTCAqIHggPSBiXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gbG8gICAgICAgICAgICAgIFRoZSBsb3dlciAodHJ1ZSkgdXBwZXIgdHJpYW5ndWxhciAoZmFsc2UpIGZsYWdcbiAgICpcbiAgICogQHJldHVybiB7TnVtYmVyfSAgICAgICAgICAgICAgICAgVGhlIGluZGV4IGZvciB0aGUgbm9uemVybyBwYXR0ZXJuXG4gICAqXG4gICAqIFJlZmVyZW5jZTogaHR0cDovL2ZhY3VsdHkuY3NlLnRhbXUuZWR1L2RhdmlzL3B1YmxpY2F0aW9ucy5odG1sXG4gICAqL1xuICByZXR1cm4gZnVuY3Rpb24gY3NTcHNvbHZlKGcsIGIsIGssIHhpLCB4LCBwaW52LCBsbykge1xuICAgIC8vIGcgYXJyYXlzXG4gICAgdmFyIGd2YWx1ZXMgPSBnLl92YWx1ZXM7XG4gICAgdmFyIGdpbmRleCA9IGcuX2luZGV4O1xuICAgIHZhciBncHRyID0gZy5fcHRyO1xuICAgIHZhciBnc2l6ZSA9IGcuX3NpemU7IC8vIGNvbHVtbnNcblxuICAgIHZhciBuID0gZ3NpemVbMV07IC8vIGIgYXJyYXlzXG5cbiAgICB2YXIgYnZhbHVlcyA9IGIuX3ZhbHVlcztcbiAgICB2YXIgYmluZGV4ID0gYi5faW5kZXg7XG4gICAgdmFyIGJwdHIgPSBiLl9wdHI7IC8vIHZhcnNcblxuICAgIHZhciBwLCBwMCwgcDEsIHE7IC8vIHhpW3RvcC4ubi0xXSA9IGNzUmVhY2goQig6LGspKVxuXG4gICAgdmFyIHRvcCA9ICgwLCBfY3NSZWFjaC5jc1JlYWNoKShnLCBiLCBrLCB4aSwgcGludik7IC8vIGNsZWFyIHhcblxuICAgIGZvciAocCA9IHRvcDsgcCA8IG47IHArKykge1xuICAgICAgeFt4aVtwXV0gPSAwO1xuICAgIH0gLy8gc2NhdHRlciBiXG5cblxuICAgIGZvciAocDAgPSBicHRyW2tdLCBwMSA9IGJwdHJbayArIDFdLCBwID0gcDA7IHAgPCBwMTsgcCsrKSB7XG4gICAgICB4W2JpbmRleFtwXV0gPSBidmFsdWVzW3BdO1xuICAgIH0gLy8gbG9vcCBjb2x1bW5zXG5cblxuICAgIGZvciAodmFyIHB4ID0gdG9wOyBweCA8IG47IHB4KyspIHtcbiAgICAgIC8vIHggYXJyYXkgaW5kZXggZm9yIHB4XG4gICAgICB2YXIgaiA9IHhpW3B4XTsgLy8gYXBwbHkgcGVybXV0YXRpb24gdmVjdG9yIChVIHggPSBiKSwgaiBtYXBzIHRvIGNvbHVtbiBKIG9mIEdcblxuICAgICAgdmFyIEogPSBwaW52ID8gcGludltqXSA6IGo7IC8vIGNoZWNrIGNvbHVtbiBKIGlzIGVtcHR5XG5cbiAgICAgIGlmIChKIDwgMCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gLy8gY29sdW1uIHZhbHVlIGluZGVjZXMgaW4gRywgcDAgPD0gcCA8IHAxXG5cblxuICAgICAgcDAgPSBncHRyW0pdO1xuICAgICAgcDEgPSBncHRyW0ogKyAxXTsgLy8geChqKSAvPSBHKGosailcblxuICAgICAgeFtqXSA9IGRpdmlkZVNjYWxhcih4W2pdLCBndmFsdWVzW2xvID8gcDAgOiBwMSAtIDFdKTsgLy8gZmlyc3QgZW50cnkgTChqLGopXG5cbiAgICAgIHAgPSBsbyA/IHAwICsgMSA6IHAwO1xuICAgICAgcSA9IGxvID8gcDEgOiBwMSAtIDE7IC8vIGxvb3BcblxuICAgICAgZm9yICg7IHAgPCBxOyBwKyspIHtcbiAgICAgICAgLy8gcm93XG4gICAgICAgIHZhciBpID0gZ2luZGV4W3BdOyAvLyB4KGkpIC09IEcoaSxqKSAqIHgoailcblxuICAgICAgICB4W2ldID0gc3VidHJhY3QoeFtpXSwgbXVsdGlwbHkoZ3ZhbHVlc1twXSwgeFtqXSkpO1xuICAgICAgfVxuICAgIH0gLy8gcmV0dXJuIHRvcCBvZiBzdGFja1xuXG5cbiAgICByZXR1cm4gdG9wO1xuICB9O1xufSk7XG5leHBvcnRzLmNyZWF0ZUNzU3Bzb2x2ZSA9IGNyZWF0ZUNzU3Bzb2x2ZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ3NTcXIgPSB2b2lkIDA7XG5cbnZhciBfY3NQZXJtdXRlID0gcmVxdWlyZShcIi4vY3NQZXJtdXRlXCIpO1xuXG52YXIgX2NzUG9zdCA9IHJlcXVpcmUoXCIuL2NzUG9zdFwiKTtcblxudmFyIF9jc0V0cmVlID0gcmVxdWlyZShcIi4vY3NFdHJlZVwiKTtcblxudmFyIF9jc0FtZCA9IHJlcXVpcmUoXCIuL2NzQW1kXCIpO1xuXG52YXIgX2NzQ291bnRzID0gcmVxdWlyZShcIi4vY3NDb3VudHNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdjc1Nxcic7XG52YXIgZGVwZW5kZW5jaWVzID0gWydhZGQnLCAnbXVsdGlwbHknLCAndHJhbnNwb3NlJ107XG52YXIgY3JlYXRlQ3NTcXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgYWRkID0gX3JlZi5hZGQsXG4gICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHksXG4gICAgICB0cmFuc3Bvc2UgPSBfcmVmLnRyYW5zcG9zZTtcbiAgdmFyIGNzQW1kID0gKDAsIF9jc0FtZC5jcmVhdGVDc0FtZCkoe1xuICAgIGFkZDogYWRkLFxuICAgIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgICB0cmFuc3Bvc2U6IHRyYW5zcG9zZVxuICB9KTtcbiAgdmFyIGNzQ291bnRzID0gKDAsIF9jc0NvdW50cy5jcmVhdGVDc0NvdW50cykoe1xuICAgIHRyYW5zcG9zZTogdHJhbnNwb3NlXG4gIH0pO1xuICAvKipcbiAgICogU3ltYm9saWMgb3JkZXJpbmcgYW5kIGFuYWx5c2lzIGZvciBRUiBhbmQgTFUgZGVjb21wb3NpdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7TnVtYmVyfSAgb3JkZXIgICAgICAgICAgIFRoZSBvcmRlcmluZyBzdHJhdGVneSAoc2VlIGNzQW1kIGZvciBtb3JlIGRldGFpbHMpXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgYSAgICAgICAgICAgICAgIFRoZSBBIG1hdHJpeFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHFyICAgICAgICAgICAgICBTeW1ib2xpYyBvcmRlcmluZyBhbmQgYW5hbHlzaXMgZm9yIFFSIGRlY29tcG9zaXRpb24gKHRydWUpIG9yXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbGljIG9yZGVyaW5nIGFuZCBhbmFseXNpcyBmb3IgTFUgZGVjb21wb3NpdGlvbiAoZmFsc2UpXG4gICAqXG4gICAqIEByZXR1cm4ge09iamVjdH0gICAgICAgICAgICAgICAgIFRoZSBTeW1ib2xpYyBvcmRlcmluZyBhbmQgYW5hbHlzaXMgZm9yIG1hdHJpeCBBXG4gICAqXG4gICAqIFJlZmVyZW5jZTogaHR0cDovL2ZhY3VsdHkuY3NlLnRhbXUuZWR1L2RhdmlzL3B1YmxpY2F0aW9ucy5odG1sXG4gICAqL1xuXG4gIHJldHVybiBmdW5jdGlvbiBjc1NxcihvcmRlciwgYSwgcXIpIHtcbiAgICAvLyBhIGFycmF5c1xuICAgIHZhciBhcHRyID0gYS5fcHRyO1xuICAgIHZhciBhc2l6ZSA9IGEuX3NpemU7IC8vIGNvbHVtbnNcblxuICAgIHZhciBuID0gYXNpemVbMV07IC8vIHZhcnNcblxuICAgIHZhciBrOyAvLyBzeW1ib2xpYyBhbmFseXNpcyByZXN1bHRcblxuICAgIHZhciBzID0ge307IC8vIGZpbGwtcmVkdWNpbmcgb3JkZXJpbmdcblxuICAgIHMucSA9IGNzQW1kKG9yZGVyLCBhKTsgLy8gdmFsaWRhdGUgcmVzdWx0c1xuXG4gICAgaWYgKG9yZGVyICYmICFzLnEpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gLy8gUVIgc3ltYm9saWMgYW5hbHlzaXNcblxuXG4gICAgaWYgKHFyKSB7XG4gICAgICAvLyBhcHBseSBwZXJtdXRhdGlvbnMgaWYgbmVlZGVkXG4gICAgICB2YXIgYyA9IG9yZGVyID8gKDAsIF9jc1Blcm11dGUuY3NQZXJtdXRlKShhLCBudWxsLCBzLnEsIDApIDogYTsgLy8gZXRyZWUgb2YgQycqQywgd2hlcmUgQz1BKDoscSlcblxuICAgICAgcy5wYXJlbnQgPSAoMCwgX2NzRXRyZWUuY3NFdHJlZSkoYywgMSk7IC8vIHBvc3Qgb3JkZXIgZWxpbWluYXRpb24gdHJlZVxuXG4gICAgICB2YXIgcG9zdCA9ICgwLCBfY3NQb3N0LmNzUG9zdCkocy5wYXJlbnQsIG4pOyAvLyBjb2wgY291bnRzIGNob2woQycqQylcblxuICAgICAgcy5jcCA9IGNzQ291bnRzKGMsIHMucGFyZW50LCBwb3N0LCAxKTsgLy8gY2hlY2sgd2UgaGF2ZSBldmVyeXRoaW5nIG5lZWRlZCB0byBjYWxjdWxhdGUgbnVtYmVyIG9mIG5vbnplcm8gZWxlbWVudHNcblxuICAgICAgaWYgKGMgJiYgcy5wYXJlbnQgJiYgcy5jcCAmJiBfdmNvdW50KGMsIHMpKSB7XG4gICAgICAgIC8vIGNhbGN1bGF0ZSBudW1iZXIgb2Ygbm9uemVybyBlbGVtZW50c1xuICAgICAgICBmb3IgKHMudW56ID0gMCwgayA9IDA7IGsgPCBuOyBrKyspIHtcbiAgICAgICAgICBzLnVueiArPSBzLmNwW2tdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZvciBMVSBmYWN0b3JpemF0aW9uIG9ubHksIGd1ZXNzIG5ueihMKSBhbmQgbm56KFUpXG4gICAgICBzLnVueiA9IDQgKiBhcHRyW25dICsgbjtcbiAgICAgIHMubG56ID0gcy51bno7XG4gICAgfSAvLyByZXR1cm4gcmVzdWx0IFNcblxuXG4gICAgcmV0dXJuIHM7XG4gIH07XG4gIC8qKlxuICAgKiBDb21wdXRlIG5ueihWKSA9IHMubG56LCBzLnBpbnYsIHMubGVmdG1vc3QsIHMubTIgZnJvbSBBIGFuZCBzLnBhcmVudFxuICAgKi9cblxuICBmdW5jdGlvbiBfdmNvdW50KGEsIHMpIHtcbiAgICAvLyBhIGFycmF5c1xuICAgIHZhciBhcHRyID0gYS5fcHRyO1xuICAgIHZhciBhaW5kZXggPSBhLl9pbmRleDtcbiAgICB2YXIgYXNpemUgPSBhLl9zaXplOyAvLyByb3dzICYgY29sdW1uc1xuXG4gICAgdmFyIG0gPSBhc2l6ZVswXTtcbiAgICB2YXIgbiA9IGFzaXplWzFdOyAvLyBpbml0aWFsaXplIHMgYXJyYXlzXG5cbiAgICBzLnBpbnYgPSBbXTsgLy8gKG0gKyBuKVxuXG4gICAgcy5sZWZ0bW9zdCA9IFtdOyAvLyAobSlcbiAgICAvLyB2YXJzXG5cbiAgICB2YXIgcGFyZW50ID0gcy5wYXJlbnQ7XG4gICAgdmFyIHBpbnYgPSBzLnBpbnY7XG4gICAgdmFyIGxlZnRtb3N0ID0gcy5sZWZ0bW9zdDsgLy8gd29ya3NwYWNlLCBuZXh0OiBmaXJzdCBtIGVudHJpZXMsIGhlYWQ6IG5leHQgbiBlbnRyaWVzLCB0YWlsOiBuZXh0IG4gZW50cmllcywgbnF1ZTogbmV4dCBuIGVudHJpZXNcblxuICAgIHZhciB3ID0gW107IC8vIChtICsgMyAqIG4pXG5cbiAgICB2YXIgbmV4dCA9IDA7XG4gICAgdmFyIGhlYWQgPSBtO1xuICAgIHZhciB0YWlsID0gbSArIG47XG4gICAgdmFyIG5xdWUgPSBtICsgMiAqIG47IC8vIHZhcnNcblxuICAgIHZhciBpLCBrLCBwLCBwMCwgcDE7IC8vIGluaXRpYWxpemUgd1xuXG4gICAgZm9yIChrID0gMDsgayA8IG47IGsrKykge1xuICAgICAgLy8gcXVldWUgayBpcyBlbXB0eVxuICAgICAgd1toZWFkICsga10gPSAtMTtcbiAgICAgIHdbdGFpbCArIGtdID0gLTE7XG4gICAgICB3W25xdWUgKyBrXSA9IDA7XG4gICAgfSAvLyBpbml0aWFsaXplIHJvdyBhcnJheXNcblxuXG4gICAgZm9yIChpID0gMDsgaSA8IG07IGkrKykge1xuICAgICAgbGVmdG1vc3RbaV0gPSAtMTtcbiAgICB9IC8vIGxvb3AgY29sdW1ucyBiYWNrd2FyZHNcblxuXG4gICAgZm9yIChrID0gbiAtIDE7IGsgPj0gMDsgay0tKSB7XG4gICAgICAvLyB2YWx1ZXMgJiBpbmRleCBmb3IgY29sdW1uIGtcbiAgICAgIGZvciAocDAgPSBhcHRyW2tdLCBwMSA9IGFwdHJbayArIDFdLCBwID0gcDA7IHAgPCBwMTsgcCsrKSB7XG4gICAgICAgIC8vIGxlZnRtb3N0W2ldID0gbWluKGZpbmQoQShpLDopKSlcbiAgICAgICAgbGVmdG1vc3RbYWluZGV4W3BdXSA9IGs7XG4gICAgICB9XG4gICAgfSAvLyBzY2FuIHJvd3MgaW4gcmV2ZXJzZSBvcmRlclxuXG5cbiAgICBmb3IgKGkgPSBtIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIC8vIHJvdyBpIGlzIG5vdCB5ZXQgb3JkZXJlZFxuICAgICAgcGludltpXSA9IC0xO1xuICAgICAgayA9IGxlZnRtb3N0W2ldOyAvLyBjaGVjayByb3cgaSBpcyBlbXB0eVxuXG4gICAgICBpZiAoayA9PT0gLTEpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IC8vIGZpcnN0IHJvdyBpbiBxdWV1ZSBrXG5cblxuICAgICAgaWYgKHdbbnF1ZSArIGtdKysgPT09IDApIHtcbiAgICAgICAgd1t0YWlsICsga10gPSBpO1xuICAgICAgfSAvLyBwdXQgaSBhdCBoZWFkIG9mIHF1ZXVlIGtcblxuXG4gICAgICB3W25leHQgKyBpXSA9IHdbaGVhZCArIGtdO1xuICAgICAgd1toZWFkICsga10gPSBpO1xuICAgIH1cblxuICAgIHMubG56ID0gMDtcbiAgICBzLm0yID0gbTsgLy8gZmluZCByb3cgcGVybXV0YXRpb24gYW5kIG5ueihWKVxuXG4gICAgZm9yIChrID0gMDsgayA8IG47IGsrKykge1xuICAgICAgLy8gcmVtb3ZlIHJvdyBpIGZyb20gcXVldWUga1xuICAgICAgaSA9IHdbaGVhZCArIGtdOyAvLyBjb3VudCBWKGssaykgYXMgbm9uemVyb1xuXG4gICAgICBzLmxueisrOyAvLyBhZGQgYSBmaWN0aXRpb3VzIHJvd1xuXG4gICAgICBpZiAoaSA8IDApIHtcbiAgICAgICAgaSA9IHMubTIrKztcbiAgICAgIH0gLy8gYXNzb2NpYXRlIHJvdyBpIHdpdGggVig6LGspXG5cblxuICAgICAgcGludltpXSA9IGs7IC8vIHNraXAgaWYgVihrKzE6bSxrKSBpcyBlbXB0eVxuXG4gICAgICBpZiAoLS1ucXVlW2tdIDw9IDApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IC8vIG5xdWVba10gaXMgbm56IChWKGsrMTptLGspKVxuXG5cbiAgICAgIHMubG56ICs9IHdbbnF1ZSArIGtdOyAvLyBtb3ZlIGFsbCByb3dzIHRvIHBhcmVudCBvZiBrXG5cbiAgICAgIHZhciBwYSA9IHBhcmVudFtrXTtcblxuICAgICAgaWYgKHBhICE9PSAtMSkge1xuICAgICAgICBpZiAod1tucXVlICsgcGFdID09PSAwKSB7XG4gICAgICAgICAgd1t0YWlsICsgcGFdID0gd1t0YWlsICsga107XG4gICAgICAgIH1cblxuICAgICAgICB3W25leHQgKyB3W3RhaWwgKyBrXV0gPSB3W2hlYWQgKyBwYV07XG4gICAgICAgIHdbaGVhZCArIHBhXSA9IHdbbmV4dCArIGldO1xuICAgICAgICB3W25xdWUgKyBwYV0gKz0gd1tucXVlICsga107XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChpID0gMDsgaSA8IG07IGkrKykge1xuICAgICAgaWYgKHBpbnZbaV0gPCAwKSB7XG4gICAgICAgIHBpbnZbaV0gPSBrKys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVDc1NxciA9IGNyZWF0ZUNzU3FyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jc1RkZnMgPSBjc1RkZnM7XG5cbi8qKlxuICogRGVwdGgtZmlyc3Qgc2VhcmNoIGFuZCBwb3N0b3JkZXIgb2YgYSB0cmVlIHJvb3RlZCBhdCBub2RlIGpcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gIGogICAgICAgICAgICAgICBUaGUgdHJlZSBub2RlXG4gKiBAcGFyYW0ge051bWJlcn0gIGtcbiAqIEBwYXJhbSB7QXJyYXl9ICAgdyAgICAgICAgICAgICAgIFRoZSB3b3Jrc3BhY2UgYXJyYXlcbiAqIEBwYXJhbSB7TnVtYmVyfSAgaGVhZCAgICAgICAgICAgIFRoZSBpbmRleCBvZmZzZXQgd2l0aGluIHRoZSB3b3Jrc3BhY2UgZm9yIHRoZSBoZWFkIGFycmF5XG4gKiBAcGFyYW0ge051bWJlcn0gIG5leHQgICAgICAgICAgICBUaGUgaW5kZXggb2Zmc2V0IHdpdGhpbiB0aGUgd29ya3NwYWNlIGZvciB0aGUgbmV4dCBhcnJheVxuICogQHBhcmFtIHtBcnJheX0gICBwb3N0ICAgICAgICAgICAgVGhlIHBvc3Qgb3JkZXJpbmcgYXJyYXlcbiAqIEBwYXJhbSB7TnVtYmVyfSAgc3RhY2sgICAgICAgICAgIFRoZSBpbmRleCBvZmZzZXQgd2l0aGluIHRoZSB3b3Jrc3BhY2UgZm9yIHRoZSBzdGFjayBhcnJheVxuICpcbiAqIFJlZmVyZW5jZTogaHR0cDovL2ZhY3VsdHkuY3NlLnRhbXUuZWR1L2RhdmlzL3B1YmxpY2F0aW9ucy5odG1sXG4gKi9cbmZ1bmN0aW9uIGNzVGRmcyhqLCBrLCB3LCBoZWFkLCBuZXh0LCBwb3N0LCBzdGFjaykge1xuICAvLyB2YXJpYWJsZXNcbiAgdmFyIHRvcCA9IDA7IC8vIHBsYWNlIGogb24gdGhlIHN0YWNrXG5cbiAgd1tzdGFja10gPSBqOyAvLyB3aGlsZSAoc3RhY2sgaXMgbm90IGVtcHR5KVxuXG4gIHdoaWxlICh0b3AgPj0gMCkge1xuICAgIC8vIHAgPSB0b3Agb2Ygc3RhY2tcbiAgICB2YXIgcCA9IHdbc3RhY2sgKyB0b3BdOyAvLyBpID0geW91bmdlc3QgY2hpbGQgb2YgcFxuXG4gICAgdmFyIGkgPSB3W2hlYWQgKyBwXTtcblxuICAgIGlmIChpID09PSAtMSkge1xuICAgICAgLy8gcCBoYXMgbm8gdW5vcmRlcmVkIGNoaWxkcmVuIGxlZnRcbiAgICAgIHRvcC0tOyAvLyBub2RlIHAgaXMgdGhlIGt0aCBwb3N0b3JkZXJlZCBub2RlXG5cbiAgICAgIHBvc3RbaysrXSA9IHA7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHJlbW92ZSBpIGZyb20gY2hpbGRyZW4gb2YgcFxuICAgICAgd1toZWFkICsgcF0gPSB3W25leHQgKyBpXTsgLy8gaW5jcmVtZW50IHRvcFxuXG4gICAgICArK3RvcDsgLy8gc3RhcnQgZGZzIG9uIGNoaWxkIG5vZGUgaVxuXG4gICAgICB3W3N0YWNrICsgdG9wXSA9IGk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGs7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNzVW5mbGlwID0gY3NVbmZsaXA7XG5cbnZhciBfY3NGbGlwID0gcmVxdWlyZShcIi4vY3NGbGlwXCIpO1xuXG4vKipcbiAqIEZsaXBzIHRoZSB2YWx1ZSBpZiBpdCBpcyBuZWdhdGl2ZSBvZiByZXR1cm5zIHRoZSBzYW1lIHZhbHVlIG90aGVyd2lzZS5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gIGkgICAgICAgICAgICAgICBUaGUgdmFsdWUgdG8gZmxpcFxuICpcbiAqIFJlZmVyZW5jZTogaHR0cDovL2ZhY3VsdHkuY3NlLnRhbXUuZWR1L2RhdmlzL3B1YmxpY2F0aW9ucy5odG1sXG4gKi9cbmZ1bmN0aW9uIGNzVW5mbGlwKGkpIHtcbiAgLy8gZmxpcCB0aGUgdmFsdWUgaWYgaXQgaXMgbmVnYXRpdmVcbiAgcmV0dXJuIGkgPCAwID8gKDAsIF9jc0ZsaXAuY3NGbGlwKShpKSA6IGk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFicyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2Ficyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUFicyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgYSBudW1iZXIuIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzXG4gICAqIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5hYnMoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguYWJzKDMuNSkgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMy41XG4gICAqICAgIG1hdGguYWJzKC00LjIpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgNC4yXG4gICAqXG4gICAqICAgIG1hdGguYWJzKFszLCAtNSwgLTEsIDAsIDJdKSAgLy8gcmV0dXJucyBBcnJheSBbMywgNSwgMSwgMCwgMl1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIHNpZ25cbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXggfCBVbml0fSB4XG4gICAqICAgICAgICAgICAgQSBudW1iZXIgb3IgbWF0cml4IGZvciB3aGljaCB0byBnZXQgdGhlIGFic29sdXRlIHZhbHVlXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4IHwgVW5pdH1cbiAgICogICAgICAgICAgICBBYnNvbHV0ZSB2YWx1ZSBvZiBgeGBcbiAgICovXG4gIHZhciBhYnMgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmFic051bWJlcixcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmFicygpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHguYWJzKCk7XG4gICAgfSxcbiAgICBGcmFjdGlvbjogZnVuY3Rpb24gRnJhY3Rpb24oeCkge1xuICAgICAgcmV0dXJuIHguYWJzKCk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICAvLyBkZWVwIG1hcCBjb2xsZWN0aW9uLCBza2lwIHplcm9zIHNpbmNlIGFicygwKSA9IDBcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgYWJzLCB0cnVlKTtcbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgcmV0dXJuIHguYWJzKCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGFicztcbn0pO1xuZXhwb3J0cy5jcmVhdGVBYnMgPSBjcmVhdGVBYnM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFkZCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDFcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wNFwiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEwXCIpO1xuXG52YXIgX2FsZ29yaXRobTQgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIG5hbWUgPSAnYWRkJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdhZGRTY2FsYXInLCAnZXF1YWxTY2FsYXInLCAnRGVuc2VNYXRyaXgnLCAnU3BhcnNlTWF0cml4J107XG52YXIgY3JlYXRlQWRkID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgYWRkU2NhbGFyID0gX3JlZi5hZGRTY2FsYXIsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsXG4gICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXgsXG4gICAgICBTcGFyc2VNYXRyaXggPSBfcmVmLlNwYXJzZU1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTAxID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMDEpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNCA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0wNCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMCA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogQWRkIHR3byBvciBtb3JlIHZhbHVlcywgYHggKyB5YC5cbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmFkZCh4LCB5KVxuICAgKiAgICBtYXRoLmFkZCh4LCB5LCB6LCAuLi4pXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmFkZCgyLCAzKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDVcbiAgICogICAgbWF0aC5hZGQoMiwgMywgNCkgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA5XG4gICAqXG4gICAqICAgIGNvbnN0IGEgPSBtYXRoLmNvbXBsZXgoMiwgMylcbiAgICogICAgY29uc3QgYiA9IG1hdGguY29tcGxleCgtNCwgMSlcbiAgICogICAgbWF0aC5hZGQoYSwgYikgICAgICAgICAgICAgICAvLyByZXR1cm5zIENvbXBsZXggLTIgKyA0aVxuICAgKlxuICAgKiAgICBtYXRoLmFkZChbMSwgMiwgM10sIDQpICAgICAgIC8vIHJldHVybnMgQXJyYXkgWzUsIDYsIDddXG4gICAqXG4gICAqICAgIGNvbnN0IGMgPSBtYXRoLnVuaXQoJzUgY20nKVxuICAgKiAgICBjb25zdCBkID0gbWF0aC51bml0KCcyLjEgbW0nKVxuICAgKiAgICBtYXRoLmFkZChjLCBkKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgVW5pdCA1Mi4xIG1tXG4gICAqXG4gICAqICAgIG1hdGguYWRkKFwiMi4zXCIsIFwiNFwiKSAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDYuM1xuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgc3VidHJhY3QsIHN1bVxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggRmlyc3QgdmFsdWUgdG8gYWRkXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geSBTZWNvbmQgdmFsdWUgdG8gYWRkXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0gU3VtIG9mIGB4YCBhbmQgYHlgXG4gICAqL1xuXG4gIHZhciBhZGQgPSB0eXBlZChuYW1lLCAoMCwgX29iamVjdC5leHRlbmQpKHtcbiAgICAvLyB3ZSBleHRlbmQgdGhlIHNpZ25hdHVyZXMgb2YgYWRkU2NhbGFyIHdpdGggc2lnbmF0dXJlcyBkZWFsaW5nIHdpdGggbWF0cmljZXNcbiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTMoeCwgeSwgYWRkU2NhbGFyKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAxKHgsIHksIGFkZFNjYWxhciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDEoeSwgeCwgYWRkU2NhbGFyLCB0cnVlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDQoeCwgeSwgYWRkU2NhbGFyKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhZGQobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFkZChtYXRyaXgoeCksIHkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWRkKHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIERlbnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBhZGRTY2FsYXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTAoeCwgeSwgYWRkU2NhbGFyLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnYW55LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIGFueURlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCBhZGRTY2FsYXIsIHRydWUpO1xuICAgIH0sXG4gICAgJ2FueSwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gYW55U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMCh5LCB4LCBhZGRTY2FsYXIsIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBhbnknOiBmdW5jdGlvbiBBcnJheUFueSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCBhZGRTY2FsYXIsIGZhbHNlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnYW55LCBBcnJheSc6IGZ1bmN0aW9uIGFueUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeSksIHgsIGFkZFNjYWxhciwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ2FueSwgYW55JzogYWRkU2NhbGFyLFxuICAgICdhbnksIGFueSwgLi4uYW55JzogZnVuY3Rpb24gYW55QW55QW55KHgsIHksIHJlc3QpIHtcbiAgICAgIHZhciByZXN1bHQgPSBhZGQoeCwgeSk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXN1bHQgPSBhZGQocmVzdWx0LCByZXN0W2ldKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH0sIGFkZFNjYWxhci5zaWduYXR1cmVzKSk7XG4gIHJldHVybiBhZGQ7XG59KTtcbmV4cG9ydHMuY3JlYXRlQWRkID0gY3JlYXRlQWRkOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBZGRTY2FsYXIgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2FkZFNjYWxhcic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUFkZFNjYWxhciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIEFkZCB0d28gc2NhbGFyIHZhbHVlcywgYHggKyB5YC5cbiAgICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCBmb3IgaW50ZXJuYWwgdXNlOiBpdCBpcyB1c2VkIGJ5IHRoZSBwdWJsaWMgZnVuY3Rpb25cbiAgICogYGFkZGBcbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBzdXBwb3J0IGNvbGxlY3Rpb25zIChBcnJheSBvciBNYXRyaXgpLlxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0fSB4ICAgRmlyc3QgdmFsdWUgdG8gYWRkXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleH0geSAgICAgICAgICBTZWNvbmQgdmFsdWUgdG8gYWRkXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXR9ICAgICBTdW0gb2YgYHhgIGFuZCBgeWBcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHZhciBhZGRTY2FsYXIgPSB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciwgbnVtYmVyJzogX251bWJlci5hZGROdW1iZXIsXG4gICAgJ0NvbXBsZXgsIENvbXBsZXgnOiBmdW5jdGlvbiBDb21wbGV4Q29tcGxleCh4LCB5KSB7XG4gICAgICByZXR1cm4geC5hZGQoeSk7XG4gICAgfSxcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIHgucGx1cyh5KTtcbiAgICB9LFxuICAgICdGcmFjdGlvbiwgRnJhY3Rpb24nOiBmdW5jdGlvbiBGcmFjdGlvbkZyYWN0aW9uKHgsIHkpIHtcbiAgICAgIHJldHVybiB4LmFkZCh5KTtcbiAgICB9LFxuICAgICdVbml0LCBVbml0JzogZnVuY3Rpb24gVW5pdFVuaXQoeCwgeSkge1xuICAgICAgaWYgKHgudmFsdWUgPT09IG51bGwgfHwgeC52YWx1ZSA9PT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlciB4IGNvbnRhaW5zIGEgdW5pdCB3aXRoIHVuZGVmaW5lZCB2YWx1ZScpO1xuICAgICAgaWYgKHkudmFsdWUgPT09IG51bGwgfHwgeS52YWx1ZSA9PT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlciB5IGNvbnRhaW5zIGEgdW5pdCB3aXRoIHVuZGVmaW5lZCB2YWx1ZScpO1xuICAgICAgaWYgKCF4LmVxdWFsQmFzZSh5KSkgdGhyb3cgbmV3IEVycm9yKCdVbml0cyBkbyBub3QgbWF0Y2gnKTtcbiAgICAgIHZhciByZXMgPSB4LmNsb25lKCk7XG4gICAgICByZXMudmFsdWUgPSBhZGRTY2FsYXIocmVzLnZhbHVlLCB5LnZhbHVlKTtcbiAgICAgIHJlcy5maXhQcmVmaXggPSBmYWxzZTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGFkZFNjYWxhcjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVBZGRTY2FsYXIgPSBjcmVhdGVBZGRTY2FsYXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNicnQgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdjYnJ0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ2NvbmZpZycsICd0eXBlZCcsICdpc05lZ2F0aXZlJywgJ3VuYXJ5TWludXMnLCAnbWF0cml4JywgJ0NvbXBsZXgnLCAnQmlnTnVtYmVyJywgJ0ZyYWN0aW9uJ107XG52YXIgY3JlYXRlQ2JydCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGlzTmVnYXRpdmUgPSBfcmVmLmlzTmVnYXRpdmUsXG4gICAgICB1bmFyeU1pbnVzID0gX3JlZi51bmFyeU1pbnVzLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4LFxuICAgICAgQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXIsXG4gICAgICBGcmFjdGlvbiA9IF9yZWYuRnJhY3Rpb247XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgY3ViaWMgcm9vdCBvZiBhIHZhbHVlLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguY2JydCh4KVxuICAgKiAgICBtYXRoLmNicnQoeCwgYWxsUm9vdHMpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmNicnQoMjcpICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAzXG4gICAqICAgIG1hdGguY3ViZSgzKSAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDI3XG4gICAqICAgIG1hdGguY2JydCgtNjQpICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIC00XG4gICAqICAgIG1hdGguY2JydChtYXRoLnVuaXQoJzI3IG1eMycpKSAvLyByZXR1cm5zIFVuaXQgMyBtXG4gICAqICAgIG1hdGguY2JydChbMjcsIDY0LCAxMjVdKSAgICAgICAvLyByZXR1cm5zIFszLCA0LCA1XVxuICAgKlxuICAgKiAgICBjb25zdCB4ID0gbWF0aC5jb21wbGV4KCc4aScpXG4gICAqICAgIG1hdGguY2JydCh4KSAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIENvbXBsZXggMS43MzIwNTA4MDc1Njg5ICsgaVxuICAgKiAgICBtYXRoLmNicnQoeCwgdHJ1ZSkgICAgICAgICAgICAgLy8gcmV0dXJucyBNYXRyaXggW1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgIDEuNzMyMDUwODA3NTY4OSArIGlcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIC0xLjczMjA1MDgwNzU2ODkgKyBpXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAtMmlcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBzcXVhcmUsIHNxcnQsIGN1YmVcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4XG4gICAqICAgICAgICAgICAgVmFsdWUgZm9yIHdoaWNoIHRvIGNhbGN1bGF0ZSB0aGUgY3ViaWMgcm9vdC5cbiAgICogQHBhcmFtIHtib29sZWFufSBbYWxsUm9vdHNdICBPcHRpb25hbCwgZmFsc2UgYnkgZGVmYXVsdC4gT25seSBhcHBsaWNhYmxlXG4gICAqICAgICAgICAgICAgd2hlbiBgeGAgaXMgYSBudW1iZXIgb3IgY29tcGxleCBudW1iZXIuIElmIHRydWUsIGFsbCBjb21wbGV4XG4gICAqICAgICAgICAgICAgcm9vdHMgYXJlIHJldHVybmVkLCBpZiBmYWxzZSAoZGVmYXVsdCkgdGhlIHByaW5jaXBhbCByb290IGlzXG4gICAqICAgICAgICAgICAgcmV0dXJuZWQuXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9XG4gICAqICAgICAgICAgICAgUmV0dXJucyB0aGUgY3ViaWMgcm9vdCBvZiBgeGBcbiAgICovXG4gIHZhciBjYnJ0ID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogX251bWJlci5jYnJ0TnVtYmVyLFxuICAgIC8vIG5vdGU6IHNpZ25hdHVyZSAnbnVtYmVyLCBib29sZWFuJyBpcyBhbHNvIHN1cHBvcnRlZCxcbiAgICAvLyAgICAgICBjcmVhdGVkIGJ5IHR5cGVkIGFzIGl0IGtub3dzIGhvdyB0byBjb252ZXJ0IG51bWJlciB0byBDb21wbGV4XG4gICAgQ29tcGxleDogX2NicnRDb21wbGV4LFxuICAgICdDb21wbGV4LCBib29sZWFuJzogX2NicnRDb21wbGV4LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LmNicnQoKTtcbiAgICB9LFxuICAgIFVuaXQ6IF9jYnJ0VW5pdCxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICAvLyBkZWVwIG1hcCBjb2xsZWN0aW9uLCBza2lwIHplcm9zIHNpbmNlIGNicnQoMCkgPSAwXG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGNicnQsIHRydWUpO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGN1YmljIHJvb3QgZm9yIGEgY29tcGxleCBudW1iZXJcbiAgICogQHBhcmFtIHtDb21wbGV4fSB4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FsbFJvb3RzXSAgIElmIHRydWUsIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiBhbiBhcnJheVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGFsbCB0aHJlZSByb290cy4gSWYgZmFsc2Ugb3IgdW5kZWZpbmVkLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcHJpbmNpcGFsIHJvb3QgaXMgcmV0dXJuZWQuXG4gICAqIEByZXR1cm5zIHtDb21wbGV4IHwgQXJyYXkuPENvbXBsZXg+IHwgTWF0cml4LjxDb21wbGV4Pn0gUmV0dXJucyB0aGUgY3ViaWMgcm9vdChzKSBvZiB4XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9jYnJ0Q29tcGxleCh4LCBhbGxSb290cykge1xuICAgIC8vIGh0dHBzOi8vd3d3Lndpa2l3YW5kLmNvbS9lbi9DdWJlX3Jvb3QjL0NvbXBsZXhfbnVtYmVyc1xuICAgIHZhciBhcmczID0geC5hcmcoKSAvIDM7XG4gICAgdmFyIGFicyA9IHguYWJzKCk7IC8vIHByaW5jaXBhbCByb290OlxuXG4gICAgdmFyIHByaW5jaXBhbCA9IG5ldyBDb21wbGV4KCgwLCBfbnVtYmVyLmNicnROdW1iZXIpKGFicyksIDApLm11bChuZXcgQ29tcGxleCgwLCBhcmczKS5leHAoKSk7XG5cbiAgICBpZiAoYWxsUm9vdHMpIHtcbiAgICAgIHZhciBhbGwgPSBbcHJpbmNpcGFsLCBuZXcgQ29tcGxleCgoMCwgX251bWJlci5jYnJ0TnVtYmVyKShhYnMpLCAwKS5tdWwobmV3IENvbXBsZXgoMCwgYXJnMyArIE1hdGguUEkgKiAyIC8gMykuZXhwKCkpLCBuZXcgQ29tcGxleCgoMCwgX251bWJlci5jYnJ0TnVtYmVyKShhYnMpLCAwKS5tdWwobmV3IENvbXBsZXgoMCwgYXJnMyAtIE1hdGguUEkgKiAyIC8gMykuZXhwKCkpXTtcbiAgICAgIHJldHVybiBjb25maWcubWF0cml4ID09PSAnQXJyYXknID8gYWxsIDogbWF0cml4KGFsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBwcmluY2lwYWw7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGN1YmljIHJvb3QgZm9yIGEgVW5pdFxuICAgKiBAcGFyYW0ge1VuaXR9IHhcbiAgICogQHJldHVybiB7VW5pdH0gUmV0dXJucyB0aGUgY3ViaWMgcm9vdCBvZiB4XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX2NicnRVbml0KHgpIHtcbiAgICBpZiAoeC52YWx1ZSAmJiAoMCwgX2lzLmlzQ29tcGxleCkoeC52YWx1ZSkpIHtcbiAgICAgIHZhciByZXN1bHQgPSB4LmNsb25lKCk7XG4gICAgICByZXN1bHQudmFsdWUgPSAxLjA7XG4gICAgICByZXN1bHQgPSByZXN1bHQucG93KDEuMCAvIDMpOyAvLyBDb21wdXRlIHRoZSB1bml0c1xuXG4gICAgICByZXN1bHQudmFsdWUgPSBfY2JydENvbXBsZXgoeC52YWx1ZSk7IC8vIENvbXB1dGUgdGhlIHZhbHVlXG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBuZWdhdGUgPSBpc05lZ2F0aXZlKHgudmFsdWUpO1xuXG4gICAgICBpZiAobmVnYXRlKSB7XG4gICAgICAgIHgudmFsdWUgPSB1bmFyeU1pbnVzKHgudmFsdWUpO1xuICAgICAgfSAvLyBUT0RPOiBjcmVhdGUgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIHRoaXNcblxuXG4gICAgICB2YXIgdGhpcmQ7XG5cbiAgICAgIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKSh4LnZhbHVlKSkge1xuICAgICAgICB0aGlyZCA9IG5ldyBCaWdOdW1iZXIoMSkuZGl2KDMpO1xuICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzRnJhY3Rpb24pKHgudmFsdWUpKSB7XG4gICAgICAgIHRoaXJkID0gbmV3IEZyYWN0aW9uKDEsIDMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcmQgPSAxIC8gMztcbiAgICAgIH1cblxuICAgICAgdmFyIF9yZXN1bHQgPSB4LnBvdyh0aGlyZCk7XG5cbiAgICAgIGlmIChuZWdhdGUpIHtcbiAgICAgICAgX3Jlc3VsdC52YWx1ZSA9IHVuYXJ5TWludXMoX3Jlc3VsdC52YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfcmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjYnJ0O1xufSk7XG5leHBvcnRzLmNyZWF0ZUNicnQgPSBjcmVhdGVDYnJ0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDZWlsID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9uZWFybHlFcXVhbCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9iaWdudW1iZXIvbmVhcmx5RXF1YWxcIik7XG5cbnZhciBfbnVtYmVyMiA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2NlaWwnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ3JvdW5kJ107XG52YXIgY3JlYXRlQ2VpbCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIHJvdW5kID0gX3JlZi5yb3VuZDtcblxuICAvKipcbiAgICogUm91bmQgYSB2YWx1ZSB0b3dhcmRzIHBsdXMgaW5maW5pdHlcbiAgICogSWYgYHhgIGlzIGNvbXBsZXgsIGJvdGggcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnQgYXJlIHJvdW5kZWQgdG93YXJkcyBwbHVzIGluZmluaXR5LlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguY2VpbCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5jZWlsKDMuMikgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA0XG4gICAqICAgIG1hdGguY2VpbCgzLjgpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgNFxuICAgKiAgICBtYXRoLmNlaWwoLTQuMikgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIC00XG4gICAqICAgIG1hdGguY2VpbCgtNC43KSAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgLTRcbiAgICpcbiAgICogICAgY29uc3QgYyA9IG1hdGguY29tcGxleCgzLjIsIC0yLjcpXG4gICAqICAgIG1hdGguY2VpbChjKSAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDQgLSAyaVxuICAgKlxuICAgKiAgICBtYXRoLmNlaWwoWzMuMiwgMy44LCAtNC43XSkgIC8vIHJldHVybnMgQXJyYXkgWzQsIDQsIC00XVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgZmxvb3IsIGZpeCwgcm91bmRcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHggIE51bWJlciB0byBiZSByb3VuZGVkXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBSb3VuZGVkIHZhbHVlXG4gICAqL1xuICB2YXIgY2VpbCA9IHR5cGVkKCdjZWlsJywge1xuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgICAgIGlmICgoMCwgX251bWJlci5uZWFybHlFcXVhbCkoeCwgcm91bmQoeCksIGNvbmZpZy5lcHNpbG9uKSkge1xuICAgICAgICByZXR1cm4gcm91bmQoeCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gKDAsIF9udW1iZXIyLmNlaWxOdW1iZXIpKHgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5jZWlsKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICBpZiAoKDAsIF9uZWFybHlFcXVhbC5uZWFybHlFcXVhbCkoeCwgcm91bmQoeCksIGNvbmZpZy5lcHNpbG9uKSkge1xuICAgICAgICByZXR1cm4gcm91bmQoeCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4geC5jZWlsKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBGcmFjdGlvbjogZnVuY3Rpb24gRnJhY3Rpb24oeCkge1xuICAgICAgcmV0dXJuIHguY2VpbCgpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSBjZWlsKDApID0gMFxuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBjZWlsLCB0cnVlKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY2VpbDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVDZWlsID0gY3JlYXRlQ2VpbDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ3ViZSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2N1YmUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVDdWJlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogQ29tcHV0ZSB0aGUgY3ViZSBvZiBhIHZhbHVlLCBgeCAqIHggKiB4YC5cbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmN1YmUoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguY3ViZSgyKSAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDhcbiAgICogICAgbWF0aC5wb3coMiwgMykgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgOFxuICAgKiAgICBtYXRoLmN1YmUoNCkgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA2NFxuICAgKiAgICA0ICogNCAqIDQgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA2NFxuICAgKlxuICAgKiAgICBtYXRoLmN1YmUoWzEsIDIsIDMsIDRdKSAvLyByZXR1cm5zIEFycmF5IFsxLCA4LCAyNywgNjRdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBtdWx0aXBseSwgc3F1YXJlLCBwb3csIGNicnRcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXggfCBVbml0fSB4ICBOdW1iZXIgZm9yIHdoaWNoIHRvIGNhbGN1bGF0ZSB0aGUgY3ViZVxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeCB8IFVuaXR9IEN1YmUgb2YgeFxuICAgKi9cbiAgdmFyIGN1YmUgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmN1YmVOdW1iZXIsXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5tdWwoeCkubXVsKHgpOyAvLyBJcyBmYXN0ZXIgdGhhbiBwb3coeCwgMylcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LnRpbWVzKHgpLnRpbWVzKHgpO1xuICAgIH0sXG4gICAgRnJhY3Rpb246IGZ1bmN0aW9uIEZyYWN0aW9uKHgpIHtcbiAgICAgIHJldHVybiB4LnBvdygzKTsgLy8gSXMgZmFzdGVyIHRoYW4gbXVsKCltdWwoKW11bCgpXG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICAvLyBkZWVwIG1hcCBjb2xsZWN0aW9uLCBza2lwIHplcm9zIHNpbmNlIGN1YmUoMCkgPSAwXG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGN1YmUsIHRydWUpO1xuICAgIH0sXG4gICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7XG4gICAgICByZXR1cm4geC5wb3coMyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGN1YmU7XG59KTtcbmV4cG9ydHMuY3JlYXRlQ3ViZSA9IGNyZWF0ZUN1YmU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZURpdmlkZSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTFcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIG5hbWUgPSAnZGl2aWRlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdtdWx0aXBseScsICdlcXVhbFNjYWxhcicsICdkaXZpZGVTY2FsYXInLCAnaW52J107XG52YXIgY3JlYXRlRGl2aWRlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5LFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLFxuICAgICAgZGl2aWRlU2NhbGFyID0gX3JlZi5kaXZpZGVTY2FsYXIsXG4gICAgICBpbnYgPSBfcmVmLmludjtcbiAgdmFyIGFsZ29yaXRobTExID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMTEpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTIuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBEaXZpZGUgdHdvIHZhbHVlcywgYHggLyB5YC5cbiAgICogVG8gZGl2aWRlIG1hdHJpY2VzLCBgeGAgaXMgbXVsdGlwbGllZCB3aXRoIHRoZSBpbnZlcnNlIG9mIGB5YDogYHggKiBpbnYoeSlgLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguZGl2aWRlKHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmRpdmlkZSgyLCAzKSAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDAuNjY2NjY2NjY2NjY2NjY2NlxuICAgKlxuICAgKiAgICBjb25zdCBhID0gbWF0aC5jb21wbGV4KDUsIDE0KVxuICAgKiAgICBjb25zdCBiID0gbWF0aC5jb21wbGV4KDQsIDEpXG4gICAqICAgIG1hdGguZGl2aWRlKGEsIGIpICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDIgKyAzaVxuICAgKlxuICAgKiAgICBjb25zdCBjID0gW1s3LCAtNl0sIFsxMywgLTRdXVxuICAgKiAgICBjb25zdCBkID0gW1sxLCAyXSwgWzQsIDNdXVxuICAgKiAgICBtYXRoLmRpdmlkZShjLCBkKSAgICAgICAgICAgIC8vIHJldHVybnMgQXJyYXkgW1stOSwgNF0sIFstMTEsIDZdXVxuICAgKlxuICAgKiAgICBjb25zdCBlID0gbWF0aC51bml0KCcxOCBrbScpXG4gICAqICAgIG1hdGguZGl2aWRlKGUsIDQuNSkgICAgICAgICAgLy8gcmV0dXJucyBVbml0IDQga21cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIG11bHRpcGx5XG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCAgIE51bWVyYXRvclxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geSAgICAgICAgICBEZW5vbWluYXRvclxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9ICAgICAgICAgICAgICAgICAgICAgIFF1b3RpZW50LCBgeCAvIHlgXG4gICAqL1xuXG4gIHJldHVybiB0eXBlZCgnZGl2aWRlJywgKDAsIF9vYmplY3QuZXh0ZW5kKSh7XG4gICAgLy8gd2UgZXh0ZW5kIHRoZSBzaWduYXR1cmVzIG9mIGRpdmlkZVNjYWxhciB3aXRoIHNpZ25hdHVyZXMgZGVhbGluZyB3aXRoIG1hdHJpY2VzXG4gICAgJ0FycmF5IHwgTWF0cml4LCBBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4QXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gVE9ETzogaW1wbGVtZW50IG1hdHJpeCByaWdodCBkaXZpc2lvbiB1c2luZyBwc2V1ZG8gaW52ZXJzZVxuICAgICAgLy8gaHR0cHM6Ly93d3cubWF0aHdvcmtzLm5sL2hlbHAvbWF0bGFiL3JlZi9tcmRpdmlkZS5odG1sXG4gICAgICAvLyBodHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL29jdGF2ZS9kb2MvaW50ZXJwcmV0ZXIvQXJpdGhtZXRpYy1PcHMuaHRtbFxuICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTIyNjM5MzIvaG93LWRvZXMtZ251LW9jdGF2ZS1tYXRyaXgtZGl2aXNpb24td29yay1nZXR0aW5nLXVuZXhwZWN0ZWQtYmVoYXZpb3VyXG4gICAgICByZXR1cm4gbXVsdGlwbHkoeCwgaW52KHkpKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIGRpdmlkZVNjYWxhciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMSh4LCB5LCBkaXZpZGVTY2FsYXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgZGl2aWRlU2NhbGFyLCBmYWxzZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ2FueSwgQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBhbnlBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gbXVsdGlwbHkoeCwgaW52KHkpKTtcbiAgICB9XG4gIH0sIGRpdmlkZVNjYWxhci5zaWduYXR1cmVzKSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlRGl2aWRlID0gY3JlYXRlRGl2aWRlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVEaXZpZGVTY2FsYXIgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgbmFtZSA9ICdkaXZpZGVTY2FsYXInO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbnVtZXJpYyddO1xudmFyIGNyZWF0ZURpdmlkZVNjYWxhciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBudW1lcmljID0gX3JlZi5udW1lcmljO1xuXG4gIC8qKlxuICAgKiBEaXZpZGUgdHdvIHNjYWxhciB2YWx1ZXMsIGB4IC8geWAuXG4gICAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgZm9yIGludGVybmFsIHVzZTogaXQgaXMgdXNlZCBieSB0aGUgcHVibGljIGZ1bmN0aW9uc1xuICAgKiBgZGl2aWRlYCBhbmQgYGludmAuXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3Qgc3VwcG9ydCBjb2xsZWN0aW9ucyAoQXJyYXkgb3IgTWF0cml4KS5cbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdH0geCAgIE51bWVyYXRvclxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXh9IHkgICAgICAgICAgRGVub21pbmF0b3JcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdH0gICAgIFF1b3RpZW50LCBgeCAvIHlgXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB2YXIgZGl2aWRlU2NhbGFyID0gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geCAvIHk7XG4gICAgfSxcbiAgICAnQ29tcGxleCwgQ29tcGxleCc6IGZ1bmN0aW9uIENvbXBsZXhDb21wbGV4KHgsIHkpIHtcbiAgICAgIHJldHVybiB4LmRpdih5KTtcbiAgICB9LFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IGZ1bmN0aW9uIEJpZ051bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geC5kaXYoeSk7XG4gICAgfSxcbiAgICAnRnJhY3Rpb24sIEZyYWN0aW9uJzogZnVuY3Rpb24gRnJhY3Rpb25GcmFjdGlvbih4LCB5KSB7XG4gICAgICByZXR1cm4geC5kaXYoeSk7XG4gICAgfSxcbiAgICAnVW5pdCwgbnVtYmVyIHwgRnJhY3Rpb24gfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBVbml0TnVtYmVyRnJhY3Rpb25CaWdOdW1iZXIoeCwgeSkge1xuICAgICAgdmFyIHJlcyA9IHguY2xvbmUoKTsgLy8gVE9ETzogbW92ZSB0aGUgZGl2aWRlIGZ1bmN0aW9uIHRvIFVuaXQuanMsIGl0IHVzZXMgaW50ZXJuYWxzIG9mIFVuaXRcblxuICAgICAgdmFyIG9uZSA9IG51bWVyaWMoMSwgKDAsIF9pcy50eXBlT2YpKHkpKTtcbiAgICAgIHJlcy52YWx1ZSA9IGRpdmlkZVNjYWxhcihyZXMudmFsdWUgPT09IG51bGwgPyByZXMuX25vcm1hbGl6ZShvbmUpIDogcmVzLnZhbHVlLCB5KTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgRnJhY3Rpb24gfCBCaWdOdW1iZXIsIFVuaXQnOiBmdW5jdGlvbiBudW1iZXJGcmFjdGlvbkJpZ051bWJlclVuaXQoeCwgeSkge1xuICAgICAgdmFyIHJlcyA9IHkuY2xvbmUoKTtcbiAgICAgIHJlcyA9IHJlcy5wb3coLTEpOyAvLyBUT0RPOiBtb3ZlIHRoZSBkaXZpZGUgZnVuY3Rpb24gdG8gVW5pdC5qcywgaXQgdXNlcyBpbnRlcm5hbHMgb2YgVW5pdFxuXG4gICAgICB2YXIgb25lID0gbnVtZXJpYygxLCAoMCwgX2lzLnR5cGVPZikoeCkpO1xuICAgICAgcmVzLnZhbHVlID0gZGl2aWRlU2NhbGFyKHgsIHkudmFsdWUgPT09IG51bGwgPyB5Ll9ub3JtYWxpemUob25lKSA6IHkudmFsdWUpO1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9LFxuICAgICdVbml0LCBVbml0JzogZnVuY3Rpb24gVW5pdFVuaXQoeCwgeSkge1xuICAgICAgcmV0dXJuIHguZGl2aWRlKHkpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBkaXZpZGVTY2FsYXI7XG59KTtcbmV4cG9ydHMuY3JlYXRlRGl2aWRlU2NhbGFyID0gY3JlYXRlRGl2aWRlU2NhbGFyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVEb3REaXZpZGUgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wMlwiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAzXCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDdcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMVwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEyXCIpO1xuXG52YXIgX2FsZ29yaXRobTYgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNyA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIG5hbWUgPSAnZG90RGl2aWRlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdlcXVhbFNjYWxhcicsICdkaXZpZGVTY2FsYXInLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVEb3REaXZpZGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsXG4gICAgICBkaXZpZGVTY2FsYXIgPSBfcmVmLmRpdmlkZVNjYWxhcixcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTAyID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMDIpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMDMgPSAoMCwgX2FsZ29yaXRobTIuY3JlYXRlQWxnb3JpdGhtMDMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNyA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0wNykoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMSA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0xMSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMiA9ICgwLCBfYWxnb3JpdGhtNS5jcmVhdGVBbGdvcml0aG0xMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtNi5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG03LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogRGl2aWRlIHR3byBtYXRyaWNlcyBlbGVtZW50IHdpc2UuIFRoZSBmdW5jdGlvbiBhY2NlcHRzIGJvdGggbWF0cmljZXMgYW5kXG4gICAqIHNjYWxhciB2YWx1ZXMuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5kb3REaXZpZGUoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguZG90RGl2aWRlKDIsIDQpICAgLy8gcmV0dXJucyAwLjVcbiAgICpcbiAgICogICAgYSA9IFtbOSwgNV0sIFs2LCAxXV1cbiAgICogICAgYiA9IFtbMywgMl0sIFs1LCAyXV1cbiAgICpcbiAgICogICAgbWF0aC5kb3REaXZpZGUoYSwgYikgICAvLyByZXR1cm5zIFtbMywgMi41XSwgWzEuMiwgMC41XV1cbiAgICogICAgbWF0aC5kaXZpZGUoYSwgYikgICAgICAvLyByZXR1cm5zIFtbMS43NSwgMC43NV0sIFstMS43NSwgMi4yNV1dXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBkaXZpZGUsIG11bHRpcGx5LCBkb3RNdWx0aXBseVxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggTnVtZXJhdG9yXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geSBEZW5vbWluYXRvclxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9ICAgICAgICAgICAgICAgICAgICBRdW90aWVudCwgYHggLi8geWBcbiAgICovXG5cbiAgdmFyIGRvdERpdmlkZSA9IHR5cGVkKG5hbWUsIHtcbiAgICAnYW55LCBhbnknOiBkaXZpZGVTY2FsYXIsXG4gICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wNyh4LCB5LCBkaXZpZGVTY2FsYXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHksIHgsIGRpdmlkZVNjYWxhciwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh4LCB5LCBkaXZpZGVTY2FsYXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBkaXZpZGVTY2FsYXIpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGRvdERpdmlkZShtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gZG90RGl2aWRlKG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBkb3REaXZpZGUoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeCwgeSwgZGl2aWRlU2NhbGFyLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIERlbnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBkaXZpZGVTY2FsYXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeSwgeCwgZGl2aWRlU2NhbGFyLCB0cnVlKTtcbiAgICB9LFxuICAgICdhbnksIERlbnNlTWF0cml4JzogZnVuY3Rpb24gYW55RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIGRpdmlkZVNjYWxhciwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIGFueSc6IGZ1bmN0aW9uIEFycmF5QW55KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeCksIHksIGRpdmlkZVNjYWxhciwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgZGl2aWRlU2NhbGFyLCB0cnVlKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGRvdERpdmlkZTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVEb3REaXZpZGUgPSBjcmVhdGVEb3REaXZpZGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZURvdE11bHRpcGx5ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDJcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wOVwiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTExXCIpO1xuXG52YXIgX2FsZ29yaXRobTQgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIG5hbWUgPSAnZG90TXVsdGlwbHknO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2VxdWFsU2NhbGFyJywgJ211bHRpcGx5U2NhbGFyJ107XG52YXIgY3JlYXRlRG90TXVsdGlwbHkgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsXG4gICAgICBtdWx0aXBseVNjYWxhciA9IF9yZWYubXVsdGlwbHlTY2FsYXI7XG4gIHZhciBhbGdvcml0aG0wMiA9ICgwLCBfYWxnb3JpdGhtLmNyZWF0ZUFsZ29yaXRobTAyKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTA5ID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTA5KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTExID0gKDAsIF9hbGdvcml0aG0zLmNyZWF0ZUFsZ29yaXRobTExKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEzID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTEzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTUuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBNdWx0aXBseSB0d28gbWF0cmljZXMgZWxlbWVudCB3aXNlLiBUaGUgZnVuY3Rpb24gYWNjZXB0cyBib3RoIG1hdHJpY2VzIGFuZFxuICAgKiBzY2FsYXIgdmFsdWVzLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguZG90TXVsdGlwbHkoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguZG90TXVsdGlwbHkoMiwgNCkgLy8gcmV0dXJucyA4XG4gICAqXG4gICAqICAgIGEgPSBbWzksIDVdLCBbNiwgMV1dXG4gICAqICAgIGIgPSBbWzMsIDJdLCBbNSwgMl1dXG4gICAqXG4gICAqICAgIG1hdGguZG90TXVsdGlwbHkoYSwgYikgLy8gcmV0dXJucyBbWzI3LCAxMF0sIFszMCwgMl1dXG4gICAqICAgIG1hdGgubXVsdGlwbHkoYSwgYikgICAgLy8gcmV0dXJucyBbWzUyLCAyOF0sIFsyMywgMTRdXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgbXVsdGlwbHksIGRpdmlkZSwgZG90RGl2aWRlXG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCBMZWZ0IGhhbmQgdmFsdWVcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB5IFJpZ2h0IGhhbmQgdmFsdWVcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSAgICAgICAgICAgICAgICAgICAgTXVsdGlwbGljYXRpb24gb2YgYHhgIGFuZCBgeWBcbiAgICovXG5cbiAgdmFyIGRvdE11bHRpcGx5ID0gdHlwZWQobmFtZSwge1xuICAgICdhbnksIGFueSc6IG11bHRpcGx5U2NhbGFyLFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDkoeCwgeSwgbXVsdGlwbHlTY2FsYXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHksIHgsIG11bHRpcGx5U2NhbGFyLCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHgsIHksIG11bHRpcGx5U2NhbGFyLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTMoeCwgeSwgbXVsdGlwbHlTY2FsYXIpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGRvdE11bHRpcGx5KG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBkb3RNdWx0aXBseShtYXRyaXgoeCksIHkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gZG90TXVsdGlwbHkoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeCwgeSwgbXVsdGlwbHlTY2FsYXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIG11bHRpcGx5U2NhbGFyLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnYW55LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTExKHksIHgsIG11bHRpcGx5U2NhbGFyLCB0cnVlKTtcbiAgICB9LFxuICAgICdhbnksIERlbnNlTWF0cml4JzogZnVuY3Rpb24gYW55RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIG11bHRpcGx5U2NhbGFyLCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgbXVsdGlwbHlTY2FsYXIsIGZhbHNlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnYW55LCBBcnJheSc6IGZ1bmN0aW9uIGFueUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeSksIHgsIG11bHRpcGx5U2NhbGFyLCB0cnVlKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGRvdE11bHRpcGx5O1xufSk7XG5leHBvcnRzLmNyZWF0ZURvdE11bHRpcGx5ID0gY3JlYXRlRG90TXVsdGlwbHk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZURvdFBvdyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYWxnb3JpdGhtID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAzXCIpO1xuXG52YXIgX2FsZ29yaXRobTIgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDdcIik7XG5cbnZhciBfYWxnb3JpdGhtMyA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMVwiKTtcblxudmFyIF9hbGdvcml0aG00ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEyXCIpO1xuXG52YXIgX2FsZ29yaXRobTUgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIG5hbWUgPSAnZG90UG93JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2VxdWFsU2NhbGFyJywgJ21hdHJpeCcsICdwb3cnLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVEb3RQb3cgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBwb3cgPSBfcmVmLnBvdyxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTAzID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMDMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNyA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0wNykoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMSA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMiA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0xMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtNS5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG02LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgcG93ZXIgb2YgeCB0byB5IGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmRvdFBvdyh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5kb3RQb3coMiwgMykgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA4XG4gICAqXG4gICAqICAgIGNvbnN0IGEgPSBbWzEsIDJdLCBbNCwgM11dXG4gICAqICAgIG1hdGguZG90UG93KGEsIDIpICAgICAgICAgICAgLy8gcmV0dXJucyBBcnJheSBbWzEsIDRdLCBbMTYsIDldXVxuICAgKiAgICBtYXRoLnBvdyhhLCAyKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgQXJyYXkgW1s5LCA4XSwgWzE2LCAxN11dXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBwb3csIHNxcnQsIG11bHRpcGx5XG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggIFRoZSBiYXNlXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHkgIFRoZSBleHBvbmVudFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSAgICAgICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSBvZiBgeGAgdG8gdGhlIHBvd2VyIGB5YFxuICAgKi9cblxuICB2YXIgZG90UG93ID0gdHlwZWQobmFtZSwge1xuICAgICdhbnksIGFueSc6IHBvdyxcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTA3KHgsIHksIHBvdywgZmFsc2UpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeSwgeCwgcG93LCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHgsIHksIHBvdywgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIHBvdyk7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gZG90UG93KG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBkb3RQb3cobWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGRvdFBvdyh4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMSh4LCB5LCBkb3RQb3csIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIGRvdFBvdywgZmFsc2UpO1xuICAgIH0sXG4gICAgJ2FueSwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gYW55U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih5LCB4LCBkb3RQb3csIHRydWUpO1xuICAgIH0sXG4gICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgZG90UG93LCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgZG90UG93LCBmYWxzZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ2FueSwgQXJyYXknOiBmdW5jdGlvbiBhbnlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCBkb3RQb3csIHRydWUpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZG90UG93O1xufSk7XG5leHBvcnRzLmNyZWF0ZURvdFBvdyA9IGNyZWF0ZURvdFBvdzsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRXhwID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnZXhwJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlRXhwID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBleHBvbmVudCBvZiBhIHZhbHVlLlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguZXhwKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmV4cCgyKSAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDcuMzg5MDU2MDk4OTMwNjQ5NVxuICAgKiAgICBtYXRoLnBvdyhtYXRoLmUsIDIpICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDcuMzg5MDU2MDk4OTMwNjQ5NVxuICAgKiAgICBtYXRoLmxvZyhtYXRoLmV4cCgyKSkgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDJcbiAgICpcbiAgICogICAgbWF0aC5leHAoWzEsIDIsIDNdKVxuICAgKiAgICAvLyByZXR1cm5zIEFycmF5IFtcbiAgICogICAgLy8gICAyLjcxODI4MTgyODQ1OTA0NSxcbiAgICogICAgLy8gICA3LjM4OTA1NjA5ODkzMDY0OTUsXG4gICAqICAgIC8vICAgMjAuMDg1NTM2OTIzMTg3NjY4XG4gICAqICAgIC8vIF1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGV4cG0xLCBsb2csIHBvd1xuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geCAgQSBudW1iZXIgb3IgbWF0cml4IHRvIGV4cG9uZW50aWF0ZVxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IEV4cG9uZW50IG9mIGB4YFxuICAgKi9cbiAgdmFyIGV4cCA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IF9udW1iZXIuZXhwTnVtYmVyLFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHguZXhwKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4geC5leHAoKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIC8vIFRPRE86IGV4cChzcGFyc2UpIHNob3VsZCByZXR1cm4gYSBkZW5zZSBtYXRyaXggc2luY2UgZXhwKDApPT0xXG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGV4cCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGV4cDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVFeHAgPSBjcmVhdGVFeHA7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUV4cG0xID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnZXhwbTEnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnQ29tcGxleCddO1xudmFyIGNyZWF0ZUV4cG0xID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIF9Db21wbGV4ID0gX3JlZi5Db21wbGV4O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIHZhbHVlIG9mIHN1YnRyYWN0aW5nIDEgZnJvbSB0aGUgZXhwb25lbnRpYWwgdmFsdWUuXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5leHBtMSh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5leHBtMSgyKSAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA2LjM4OTA1NjA5ODkzMDY1XG4gICAqICAgIG1hdGgucG93KG1hdGguZSwgMikgLSAxICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgNi4zODkwNTYwOTg5MzA2NDk1XG4gICAqICAgIG1hdGgubG9nKG1hdGguZXhwbTEoMikgKyAxKSAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMlxuICAgKlxuICAgKiAgICBtYXRoLmV4cG0xKFsxLCAyLCAzXSlcbiAgICogICAgLy8gcmV0dXJucyBBcnJheSBbXG4gICAqICAgIC8vICAgMS43MTgyODE4Mjg0NTkwNDUsXG4gICAqICAgIC8vICAgNi4zODkwNTYwOTg5MzA2NDk1LFxuICAgKiAgICAvLyAgIDE5LjA4NTUzNjkyMzE4NzY2OFxuICAgKiAgICAvLyBdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBleHAsIGxvZywgcG93XG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4ICBBIG51bWJlciBvciBtYXRyaXggdG8gYXBwbHkgZXhwbTFcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBFeHBvbmVudCBvZiBgeGBcbiAgICovXG4gIHZhciBleHBtMSA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IF9udW1iZXIuZXhwbTFOdW1iZXIsXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICB2YXIgciA9IE1hdGguZXhwKHgucmUpO1xuICAgICAgcmV0dXJuIG5ldyBfQ29tcGxleChyICogTWF0aC5jb3MoeC5pbSkgLSAxLCByICogTWF0aC5zaW4oeC5pbSkpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHguZXhwKCkubWludXMoMSk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGV4cG0xKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZXhwbTE7XG59KTtcbmV4cG9ydHMuY3JlYXRlRXhwbTEgPSBjcmVhdGVFeHBtMTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRml4ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBuYW1lID0gJ2ZpeCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdDb21wbGV4JywgJ2NlaWwnLCAnZmxvb3InXTtcbnZhciBjcmVhdGVGaXggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgX0NvbXBsZXggPSBfcmVmLkNvbXBsZXgsXG4gICAgICBjZWlsID0gX3JlZi5jZWlsLFxuICAgICAgZmxvb3IgPSBfcmVmLmZsb29yO1xuXG4gIC8qKlxuICAgKiBSb3VuZCBhIHZhbHVlIHRvd2FyZHMgemVyby5cbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmZpeCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5maXgoMy4yKSAgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAzXG4gICAqICAgIG1hdGguZml4KDMuOCkgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgM1xuICAgKiAgICBtYXRoLmZpeCgtNC4yKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIC00XG4gICAqICAgIG1hdGguZml4KC00LjcpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgLTRcbiAgICpcbiAgICogICAgY29uc3QgYyA9IG1hdGguY29tcGxleCgzLjIsIC0yLjcpXG4gICAqICAgIG1hdGguZml4KGMpICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDMgLSAyaVxuICAgKlxuICAgKiAgICBtYXRoLmZpeChbMy4yLCAzLjgsIC00LjddKSAgIC8vIHJldHVybnMgQXJyYXkgWzMsIDMsIC00XVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgY2VpbCwgZmxvb3IsIHJvdW5kXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHggTnVtYmVyIHRvIGJlIHJvdW5kZWRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9ICAgICAgICAgICAgUm91bmRlZCB2YWx1ZVxuICAgKi9cbiAgdmFyIGZpeCA9IHR5cGVkKCdmaXgnLCB7XG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHggPiAwID8gZmxvb3IoeCkgOiBjZWlsKHgpO1xuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4gbmV3IF9Db21wbGV4KHgucmUgPiAwID8gTWF0aC5mbG9vcih4LnJlKSA6IE1hdGguY2VpbCh4LnJlKSwgeC5pbSA+IDAgPyBNYXRoLmZsb29yKHguaW0pIDogTWF0aC5jZWlsKHguaW0pKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LmlzTmVnYXRpdmUoKSA/IGNlaWwoeCkgOiBmbG9vcih4KTtcbiAgICB9LFxuICAgIEZyYWN0aW9uOiBmdW5jdGlvbiBGcmFjdGlvbih4KSB7XG4gICAgICByZXR1cm4geC5zIDwgMCA/IHguY2VpbCgpIDogeC5mbG9vcigpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSBmaXgoMCkgPSAwXG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGZpeCwgdHJ1ZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGZpeDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVGaXggPSBjcmVhdGVGaXg7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUZsb29yID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9uZWFybHlFcXVhbCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9iaWdudW1iZXIvbmVhcmx5RXF1YWxcIik7XG5cbnZhciBuYW1lID0gJ2Zsb29yJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdyb3VuZCddO1xudmFyIGNyZWF0ZUZsb29yID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgcm91bmQgPSBfcmVmLnJvdW5kO1xuXG4gIC8qKlxuICAgKiBSb3VuZCBhIHZhbHVlIHRvd2FyZHMgbWludXMgaW5maW5pdHkuXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5mbG9vcih4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5mbG9vcigzLjIpICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAzXG4gICAqICAgIG1hdGguZmxvb3IoMy44KSAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgM1xuICAgKiAgICBtYXRoLmZsb29yKC00LjIpICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIC01XG4gICAqICAgIG1hdGguZmxvb3IoLTQuNykgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgLTVcbiAgICpcbiAgICogICAgY29uc3QgYyA9IG1hdGguY29tcGxleCgzLjIsIC0yLjcpXG4gICAqICAgIG1hdGguZmxvb3IoYykgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDMgLSAzaVxuICAgKlxuICAgKiAgICBtYXRoLmZsb29yKFszLjIsIDMuOCwgLTQuN10pIC8vIHJldHVybnMgQXJyYXkgWzMsIDMsIC01XVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgY2VpbCwgZml4LCByb3VuZFxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geCAgTnVtYmVyIHRvIGJlIHJvdW5kZWRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IFJvdW5kZWQgdmFsdWVcbiAgICovXG4gIHZhciBmbG9vciA9IHR5cGVkKCdmbG9vcicsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICBpZiAoKDAsIF9udW1iZXIubmVhcmx5RXF1YWwpKHgsIHJvdW5kKHgpLCBjb25maWcuZXBzaWxvbikpIHtcbiAgICAgICAgcmV0dXJuIHJvdW5kKHgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoeCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmZsb29yKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICBpZiAoKDAsIF9uZWFybHlFcXVhbC5uZWFybHlFcXVhbCkoeCwgcm91bmQoeCksIGNvbmZpZy5lcHNpbG9uKSkge1xuICAgICAgICByZXR1cm4gcm91bmQoeCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4geC5mbG9vcigpO1xuICAgICAgfVxuICAgIH0sXG4gICAgRnJhY3Rpb246IGZ1bmN0aW9uIEZyYWN0aW9uKHgpIHtcbiAgICAgIHJldHVybiB4LmZsb29yKCk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICAvLyBkZWVwIG1hcCBjb2xsZWN0aW9uLCBza2lwIHplcm9zIHNpbmNlIGZsb29yKDApID0gMFxuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBmbG9vciwgdHJ1ZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGZsb29yO1xufSk7XG5leHBvcnRzLmNyZWF0ZUZsb29yID0gY3JlYXRlRmxvb3I7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUdjZCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYWxnb3JpdGhtID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAxXCIpO1xuXG52YXIgX2FsZ29yaXRobTIgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDRcIik7XG5cbnZhciBfYWxnb3JpdGhtMyA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMFwiKTtcblxudmFyIF9hbGdvcml0aG00ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgX2FsZ29yaXRobTUgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnZ2NkJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdlcXVhbFNjYWxhcicsICdCaWdOdW1iZXInLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVHY2QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsXG4gICAgICBCaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcixcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTAxID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMDEpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNCA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0wNCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMCA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBncmVhdGVzdCBjb21tb24gZGl2aXNvciBmb3IgdHdvIG9yIG1vcmUgdmFsdWVzIG9yIGFycmF5cy5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmdjZChhLCBiKVxuICAgKiAgICBtYXRoLmdjZChhLCBiLCBjLCAuLi4pXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmdjZCg4LCAxMikgICAgICAgICAgICAgIC8vIHJldHVybnMgNFxuICAgKiAgICBtYXRoLmdjZCgtNCwgNikgICAgICAgICAgICAgIC8vIHJldHVybnMgMlxuICAgKiAgICBtYXRoLmdjZCgyNSwgMTUsIC0xMCkgICAgICAgIC8vIHJldHVybnMgNVxuICAgKlxuICAgKiAgICBtYXRoLmdjZChbOCwgLTRdLCBbMTIsIDZdKSAgIC8vIHJldHVybnMgWzQsIDJdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBsY20sIHhnY2RcbiAgICpcbiAgICogQHBhcmFtIHsuLi4gbnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBBcnJheSB8IE1hdHJpeH0gYXJncyAgVHdvIG9yIG1vcmUgaW50ZWdlciBudW1iZXJzXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQXJyYXkgfCBNYXRyaXh9ICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yXG4gICAqL1xuXG4gIHZhciBnY2QgPSB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciwgbnVtYmVyJzogX251bWJlci5nY2ROdW1iZXIsXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogX2djZEJpZ051bWJlcixcbiAgICAnRnJhY3Rpb24sIEZyYWN0aW9uJzogZnVuY3Rpb24gRnJhY3Rpb25GcmFjdGlvbih4LCB5KSB7XG4gICAgICByZXR1cm4geC5nY2QoeSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTA0KHgsIHksIGdjZCk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMSh5LCB4LCBnY2QsIHRydWUpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDEoeCwgeSwgZ2NkLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTMoeCwgeSwgZ2NkKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBnY2QobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGdjZChtYXRyaXgoeCksIHkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gZ2NkKHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEwKHgsIHksIGdjZCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBEZW5zZU1hdHJpeE51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgZ2NkLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEwKHksIHgsIGdjZCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckRlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCBnY2QsIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBBcnJheU51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCBnY2QsIGZhbHNlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBBcnJheSc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeSksIHgsIGdjZCwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgLy8gVE9ETzogbmVlZCBhIHNtYXJ0ZXIgbm90YXRpb24gaGVyZVxuICAgICdBcnJheSB8IE1hdHJpeCB8IG51bWJlciB8IEJpZ051bWJlciwgQXJyYXkgfCBNYXRyaXggfCBudW1iZXIgfCBCaWdOdW1iZXIsIC4uLkFycmF5IHwgTWF0cml4IHwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhOdW1iZXJCaWdOdW1iZXJBcnJheU1hdHJpeE51bWJlckJpZ051bWJlckFycmF5TWF0cml4TnVtYmVyQmlnTnVtYmVyKGEsIGIsIGFyZ3MpIHtcbiAgICAgIHZhciByZXMgPSBnY2QoYSwgYik7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXMgPSBnY2QocmVzLCBhcmdzW2ldKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZ2NkO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIGdjZCBmb3IgQmlnTnVtYmVyc1xuICAgKiBAcGFyYW0ge0JpZ051bWJlcn0gYVxuICAgKiBAcGFyYW0ge0JpZ051bWJlcn0gYlxuICAgKiBAcmV0dXJucyB7QmlnTnVtYmVyfSBSZXR1cm5zIGdyZWF0ZXN0IGNvbW1vbiBkZW5vbWluYXRvciBvZiBhIGFuZCBiXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9nY2RCaWdOdW1iZXIoYSwgYikge1xuICAgIGlmICghYS5pc0ludCgpIHx8ICFiLmlzSW50KCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGFyYW1ldGVycyBpbiBmdW5jdGlvbiBnY2QgbXVzdCBiZSBpbnRlZ2VyIG51bWJlcnMnKTtcbiAgICB9IC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0V1Y2xpZGVhbl9hbGdvcml0aG1cblxuXG4gICAgdmFyIHplcm8gPSBuZXcgQmlnTnVtYmVyKDApO1xuXG4gICAgd2hpbGUgKCFiLmlzWmVybygpKSB7XG4gICAgICB2YXIgciA9IGEubW9kKGIpO1xuICAgICAgYSA9IGI7XG4gICAgICBiID0gcjtcbiAgICB9XG5cbiAgICByZXR1cm4gYS5sdCh6ZXJvKSA/IGEubmVnKCkgOiBhO1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlR2NkID0gY3JlYXRlR2NkOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVIeXBvdCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBuYW1lID0gJ2h5cG90JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FicycsICdhZGRTY2FsYXInLCAnZGl2aWRlU2NhbGFyJywgJ211bHRpcGx5U2NhbGFyJywgJ3NxcnQnLCAnc21hbGxlcicsICdpc1Bvc2l0aXZlJ107XG52YXIgY3JlYXRlSHlwb3QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgYWJzID0gX3JlZi5hYnMsXG4gICAgICBhZGRTY2FsYXIgPSBfcmVmLmFkZFNjYWxhcixcbiAgICAgIGRpdmlkZVNjYWxhciA9IF9yZWYuZGl2aWRlU2NhbGFyLFxuICAgICAgbXVsdGlwbHlTY2FsYXIgPSBfcmVmLm11bHRpcGx5U2NhbGFyLFxuICAgICAgc3FydCA9IF9yZWYuc3FydCxcbiAgICAgIHNtYWxsZXIgPSBfcmVmLnNtYWxsZXIsXG4gICAgICBpc1Bvc2l0aXZlID0gX3JlZi5pc1Bvc2l0aXZlO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGh5cG90ZW51c2Egb2YgYSBsaXN0IHdpdGggdmFsdWVzLiBUaGUgaHlwb3RlbnVzYSBpcyBkZWZpbmVkIGFzOlxuICAgKlxuICAgKiAgICAgaHlwb3QoYSwgYiwgYywgLi4uKSA9IHNxcnQoYV4yICsgYl4yICsgY14yICsgLi4uKVxuICAgKlxuICAgKiBGb3IgbWF0cml4IGlucHV0LCB0aGUgaHlwb3RlbnVzYSBpcyBjYWxjdWxhdGVkIGZvciBhbGwgdmFsdWVzIGluIHRoZSBtYXRyaXguXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguaHlwb3QoYSwgYiwgLi4uKVxuICAgKiAgICAgbWF0aC5oeXBvdChbYSwgYiwgYywgLi4uXSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLmh5cG90KDMsIDQpICAgICAgLy8gNVxuICAgKiAgICAgbWF0aC5oeXBvdCgzLCA0LCA1KSAgIC8vIDcuMDcxMDY3ODExODY1NDc1NVxuICAgKiAgICAgbWF0aC5oeXBvdChbMywgNCwgNV0pIC8vIDcuMDcxMDY3ODExODY1NDc1NVxuICAgKiAgICAgbWF0aC5oeXBvdCgtMikgICAgICAgIC8vIDJcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBhYnMsIG5vcm1cbiAgICpcbiAgICogQHBhcmFtIHsuLi4gbnVtYmVyIHwgQmlnTnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IGFyZ3MgICAgQSBsaXN0IHdpdGggbnVtZXJpYyB2YWx1ZXMgb3IgYW4gQXJyYXkgb3IgTWF0cml4LlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRyaXggYW5kIEFycmF5IGlucHV0IGlzIGZsYXR0ZW5lZCBhbmQgcmV0dXJucyBhXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZSBudW1iZXIgZm9yIHRoZSB3aG9sZSBtYXRyaXguXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlcn0gUmV0dXJucyB0aGUgaHlwb3RoZW51c2Egb2YgdGhlIGlucHV0IHZhbHVlcy5cbiAgICovXG4gIHZhciBoeXBvdCA9IHR5cGVkKG5hbWUsIHtcbiAgICAnLi4uIG51bWJlciB8IEJpZ051bWJlcic6IF9oeXBvdCxcbiAgICBBcnJheTogZnVuY3Rpb24gQXJyYXkoeCkge1xuICAgICAgcmV0dXJuIGh5cG90LmFwcGx5KGh5cG90LCAoMCwgX2FycmF5LmZsYXR0ZW4pKHgpKTtcbiAgICB9LFxuICAgIE1hdHJpeDogZnVuY3Rpb24gTWF0cml4KHgpIHtcbiAgICAgIHJldHVybiBoeXBvdC5hcHBseShoeXBvdCwgKDAsIF9hcnJheS5mbGF0dGVuKSh4LnRvQXJyYXkoKSkpO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGh5cG90ZW51c2EgZm9yIGFuIEFycmF5IHdpdGggdmFsdWVzXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlciB8IEJpZ051bWJlcj59IGFyZ3NcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyfSBSZXR1cm5zIHRoZSByZXN1bHRcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgZnVuY3Rpb24gX2h5cG90KGFyZ3MpIHtcbiAgICAvLyBjb2RlIGJhc2VkIG9uIGBoeXBvdGAgZnJvbSBlczYtc2hpbTpcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vcGF1bG1pbGxyL2VzNi1zaGltL2Jsb2IvbWFzdGVyL2VzNi1zaGltLmpzI0wxNjE5LUwxNjMzXG4gICAgdmFyIHJlc3VsdCA9IDA7XG4gICAgdmFyIGxhcmdlc3QgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdmFsdWUgPSBhYnMoYXJnc1tpXSk7XG5cbiAgICAgIGlmIChzbWFsbGVyKGxhcmdlc3QsIHZhbHVlKSkge1xuICAgICAgICByZXN1bHQgPSBtdWx0aXBseVNjYWxhcihyZXN1bHQsIG11bHRpcGx5U2NhbGFyKGRpdmlkZVNjYWxhcihsYXJnZXN0LCB2YWx1ZSksIGRpdmlkZVNjYWxhcihsYXJnZXN0LCB2YWx1ZSkpKTtcbiAgICAgICAgcmVzdWx0ID0gYWRkU2NhbGFyKHJlc3VsdCwgMSk7XG4gICAgICAgIGxhcmdlc3QgPSB2YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IGFkZFNjYWxhcihyZXN1bHQsIGlzUG9zaXRpdmUodmFsdWUpID8gbXVsdGlwbHlTY2FsYXIoZGl2aWRlU2NhbGFyKHZhbHVlLCBsYXJnZXN0KSwgZGl2aWRlU2NhbGFyKHZhbHVlLCBsYXJnZXN0KSkgOiB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG11bHRpcGx5U2NhbGFyKGxhcmdlc3QsIHNxcnQocmVzdWx0KSk7XG4gIH1cblxuICByZXR1cm4gaHlwb3Q7XG59KTtcbmV4cG9ydHMuY3JlYXRlSHlwb3QgPSBjcmVhdGVIeXBvdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTGNtID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDJcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wNlwiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTExXCIpO1xuXG52YXIgX2FsZ29yaXRobTQgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdsY20nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2VxdWFsU2NhbGFyJ107XG52YXIgY3JlYXRlTGNtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyO1xuICB2YXIgYWxnb3JpdGhtMDIgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNiA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0wNikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMSA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBsZWFzdCBjb21tb24gbXVsdGlwbGUgZm9yIHR3byBvciBtb3JlIHZhbHVlcyBvciBhcnJheXMuXG4gICAqXG4gICAqIGxjbSBpcyBkZWZpbmVkIGFzOlxuICAgKlxuICAgKiAgICAgbGNtKGEsIGIpID0gYWJzKGEgKiBiKSAvIGdjZChhLCBiKVxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgubGNtKGEsIGIpXG4gICAqICAgIG1hdGgubGNtKGEsIGIsIGMsIC4uLilcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgubGNtKDQsIDYpICAgICAgICAgICAgICAgLy8gcmV0dXJucyAxMlxuICAgKiAgICBtYXRoLmxjbSg2LCAyMSkgICAgICAgICAgICAgIC8vIHJldHVybnMgNDJcbiAgICogICAgbWF0aC5sY20oNiwgMjEsIDUpICAgICAgICAgICAvLyByZXR1cm5zIDIxMFxuICAgKlxuICAgKiAgICBtYXRoLmxjbShbNCwgNl0sIFs2LCAyMV0pICAgIC8vIHJldHVybnMgWzEyLCA0Ml1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGdjZCwgeGdjZFxuICAgKlxuICAgKiBAcGFyYW0gey4uLiBudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0gYXJncyAgVHdvIG9yIG1vcmUgaW50ZWdlciBudW1iZXJzXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBsZWFzdCBjb21tb24gbXVsdGlwbGVcbiAgICovXG5cbiAgdmFyIGxjbSA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfbnVtYmVyLmxjbU51bWJlcixcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBfbGNtQmlnTnVtYmVyLFxuICAgICdGcmFjdGlvbiwgRnJhY3Rpb24nOiBmdW5jdGlvbiBGcmFjdGlvbkZyYWN0aW9uKHgsIHkpIHtcbiAgICAgIHJldHVybiB4LmxjbSh5KTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDYoeCwgeSwgbGNtKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHksIHgsIGxjbSwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMih4LCB5LCBsY20sIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBsY20pO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGxjbShtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gbGNtKG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBsY20oeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeE51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeCwgeSwgbGNtLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIERlbnNlTWF0cml4TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBsY20sIGZhbHNlKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlclNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeSwgeCwgbGNtLCB0cnVlKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyRGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIGxjbSwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIEFycmF5TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeCksIHksIGxjbSwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIEFycmF5JzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyQXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgbGNtLCB0cnVlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAvLyBUT0RPOiBuZWVkIGEgc21hcnRlciBub3RhdGlvbiBoZXJlXG4gICAgJ0FycmF5IHwgTWF0cml4IHwgbnVtYmVyIHwgQmlnTnVtYmVyLCBBcnJheSB8IE1hdHJpeCB8IG51bWJlciB8IEJpZ051bWJlciwgLi4uQXJyYXkgfCBNYXRyaXggfCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBBcnJheU1hdHJpeE51bWJlckJpZ051bWJlckFycmF5TWF0cml4TnVtYmVyQmlnTnVtYmVyQXJyYXlNYXRyaXhOdW1iZXJCaWdOdW1iZXIoYSwgYiwgYXJncykge1xuICAgICAgdmFyIHJlcyA9IGxjbShhLCBiKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlcyA9IGxjbShyZXMsIGFyZ3NbaV0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBsY207XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgbGNtIGZvciB0d28gQmlnTnVtYmVyc1xuICAgKiBAcGFyYW0ge0JpZ051bWJlcn0gYVxuICAgKiBAcGFyYW0ge0JpZ051bWJlcn0gYlxuICAgKiBAcmV0dXJucyB7QmlnTnVtYmVyfSBSZXR1cm5zIHRoZSBsZWFzdCBjb21tb24gbXVsdGlwbGUgb2YgYSBhbmQgYlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfbGNtQmlnTnVtYmVyKGEsIGIpIHtcbiAgICBpZiAoIWEuaXNJbnQoKSB8fCAhYi5pc0ludCgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlcnMgaW4gZnVuY3Rpb24gbGNtIG11c3QgYmUgaW50ZWdlciBudW1iZXJzJyk7XG4gICAgfVxuXG4gICAgaWYgKGEuaXNaZXJvKCkpIHtcbiAgICAgIHJldHVybiBhO1xuICAgIH1cblxuICAgIGlmIChiLmlzWmVybygpKSB7XG4gICAgICByZXR1cm4gYjtcbiAgICB9IC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0V1Y2xpZGVhbl9hbGdvcml0aG1cbiAgICAvLyBldmFsdWF0ZSBsY20gaGVyZSBpbmxpbmUgdG8gcmVkdWNlIG92ZXJoZWFkXG5cblxuICAgIHZhciBwcm9kID0gYS50aW1lcyhiKTtcblxuICAgIHdoaWxlICghYi5pc1plcm8oKSkge1xuICAgICAgdmFyIHQgPSBiO1xuICAgICAgYiA9IGEubW9kKHQpO1xuICAgICAgYSA9IHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb2QuZGl2KGEpLmFicygpO1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlTGNtID0gY3JlYXRlTGNtOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVMb2cgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdsb2cnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnY29uZmlnJywgJ3R5cGVkJywgJ2RpdmlkZVNjYWxhcicsICdDb21wbGV4J107XG52YXIgY3JlYXRlTG9nID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgZGl2aWRlU2NhbGFyID0gX3JlZi5kaXZpZGVTY2FsYXIsXG4gICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGxvZ2FyaXRobSBvZiBhIHZhbHVlLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgubG9nKHgpXG4gICAqICAgIG1hdGgubG9nKHgsIGJhc2UpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmxvZygzLjUpICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAxLjI1Mjc2Mjk2ODQ5NTM2OFxuICAgKiAgICBtYXRoLmV4cChtYXRoLmxvZygyLjQpKSAgICAgICAgLy8gcmV0dXJucyAyLjRcbiAgICpcbiAgICogICAgbWF0aC5wb3coMTAsIDQpICAgICAgICAgICAgICAgIC8vIHJldHVybnMgMTAwMDBcbiAgICogICAgbWF0aC5sb2coMTAwMDAsIDEwKSAgICAgICAgICAgIC8vIHJldHVybnMgNFxuICAgKiAgICBtYXRoLmxvZygxMDAwMCkgLyBtYXRoLmxvZygxMCkgLy8gcmV0dXJucyA0XG4gICAqXG4gICAqICAgIG1hdGgubG9nKDEwMjQsIDIpICAgICAgICAgICAgICAvLyByZXR1cm5zIDEwXG4gICAqICAgIG1hdGgucG93KDIsIDEwKSAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDEwMjRcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGV4cCwgbG9nMiwgbG9nMTAsIGxvZzFwXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4XG4gICAqICAgICAgICAgICAgVmFsdWUgZm9yIHdoaWNoIHRvIGNhbGN1bGF0ZSB0aGUgbG9nYXJpdGhtLlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXh9IFtiYXNlPWVdXG4gICAqICAgICAgICAgICAgT3B0aW9uYWwgYmFzZSBmb3IgdGhlIGxvZ2FyaXRobS4gSWYgbm90IHByb3ZpZGVkLCB0aGUgbmF0dXJhbFxuICAgKiAgICAgICAgICAgIGxvZ2FyaXRobSBvZiBgeGAgaXMgY2FsY3VsYXRlZC5cbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fVxuICAgKiAgICAgICAgICAgIFJldHVybnMgdGhlIGxvZ2FyaXRobSBvZiBgeGBcbiAgICovXG4gIHZhciBsb2cgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkge1xuICAgICAgaWYgKHggPj0gMCB8fCBjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfbnVtYmVyLmxvZ051bWJlcikoeCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBuZWdhdGl2ZSB2YWx1ZSAtPiBjb21wbGV4IHZhbHVlIGNvbXB1dGF0aW9uXG4gICAgICAgIHJldHVybiBuZXcgQ29tcGxleCh4LCAwKS5sb2coKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHgubG9nKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICBpZiAoIXguaXNOZWdhdGl2ZSgpIHx8IGNvbmZpZy5wcmVkaWN0YWJsZSkge1xuICAgICAgICByZXR1cm4geC5sbigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZG93bmdyYWRlIHRvIG51bWJlciwgcmV0dXJuIENvbXBsZXggdmFsdWVkIHJlc3VsdFxuICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoeC50b051bWJlcigpLCAwKS5sb2coKTtcbiAgICAgIH1cbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgbG9nKTtcbiAgICB9LFxuICAgICdhbnksIGFueSc6IGZ1bmN0aW9uIGFueUFueSh4LCBiYXNlKSB7XG4gICAgICAvLyBjYWxjdWxhdGUgbG9nYXJpdGhtIGZvciBhIHNwZWNpZmllZCBiYXNlLCBsb2coeCwgYmFzZSlcbiAgICAgIHJldHVybiBkaXZpZGVTY2FsYXIobG9nKHgpLCBsb2coYmFzZSkpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBsb2c7XG59KTtcbmV4cG9ydHMuY3JlYXRlTG9nID0gY3JlYXRlTG9nOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVMb2cxMCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2xvZzEwJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdDb21wbGV4J107XG52YXIgY3JlYXRlTG9nMTAgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBfQ29tcGxleCA9IF9yZWYuQ29tcGxleDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSAxMC1iYXNlIGxvZ2FyaXRobSBvZiBhIHZhbHVlLiBUaGlzIGlzIHRoZSBzYW1lIGFzIGNhbGN1bGF0aW5nIGBsb2coeCwgMTApYC5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmxvZzEwKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmxvZzEwKDAuMDAwMDEpICAgICAgICAgICAgLy8gcmV0dXJucyAtNVxuICAgKiAgICBtYXRoLmxvZzEwKDEwMDAwKSAgICAgICAgICAgICAgLy8gcmV0dXJucyA0XG4gICAqICAgIG1hdGgubG9nKDEwMDAwKSAvIG1hdGgubG9nKDEwKSAvLyByZXR1cm5zIDRcbiAgICogICAgbWF0aC5wb3coMTAsIDQpICAgICAgICAgICAgICAgIC8vIHJldHVybnMgMTAwMDBcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGV4cCwgbG9nLCBsb2cxcCwgbG9nMlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geFxuICAgKiAgICAgICAgICAgIFZhbHVlIGZvciB3aGljaCB0byBjYWxjdWxhdGUgdGhlIGxvZ2FyaXRobS5cbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fVxuICAgKiAgICAgICAgICAgIFJldHVybnMgdGhlIDEwLWJhc2UgbG9nYXJpdGhtIG9mIGB4YFxuICAgKi9cbiAgdmFyIGxvZzEwID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgICAgIGlmICh4ID49IDAgfHwgY29uZmlnLnByZWRpY3RhYmxlKSB7XG4gICAgICAgIHJldHVybiAoMCwgX251bWJlci5sb2cxME51bWJlcikoeCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBuZWdhdGl2ZSB2YWx1ZSAtPiBjb21wbGV4IHZhbHVlIGNvbXB1dGF0aW9uXG4gICAgICAgIHJldHVybiBuZXcgX0NvbXBsZXgoeCwgMCkubG9nKCkuZGl2KE1hdGguTE4xMCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiBuZXcgX0NvbXBsZXgoeCkubG9nKCkuZGl2KE1hdGguTE4xMCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICBpZiAoIXguaXNOZWdhdGl2ZSgpIHx8IGNvbmZpZy5wcmVkaWN0YWJsZSkge1xuICAgICAgICByZXR1cm4geC5sb2coKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGRvd25ncmFkZSB0byBudW1iZXIsIHJldHVybiBDb21wbGV4IHZhbHVlZCByZXN1bHRcbiAgICAgICAgcmV0dXJuIG5ldyBfQ29tcGxleCh4LnRvTnVtYmVyKCksIDApLmxvZygpLmRpdihNYXRoLkxOMTApO1xuICAgICAgfVxuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBsb2cxMCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGxvZzEwO1xufSk7XG5leHBvcnRzLmNyZWF0ZUxvZzEwID0gY3JlYXRlTG9nMTA7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUxvZzFwID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnbG9nMXAnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ2RpdmlkZVNjYWxhcicsICdsb2cnLCAnQ29tcGxleCddO1xudmFyIGNyZWF0ZUxvZzFwID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgZGl2aWRlU2NhbGFyID0gX3JlZi5kaXZpZGVTY2FsYXIsXG4gICAgICBsb2cgPSBfcmVmLmxvZyxcbiAgICAgIENvbXBsZXggPSBfcmVmLkNvbXBsZXg7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgbG9nYXJpdGhtIG9mIGEgYHZhbHVlKzFgLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgubG9nMXAoeClcbiAgICogICAgbWF0aC5sb2cxcCh4LCBiYXNlKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5sb2cxcCgyLjUpICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDEuMjUyNzYyOTY4NDk1MzY4XG4gICAqICAgIG1hdGguZXhwKG1hdGgubG9nMXAoMS40KSkgICAgICAgLy8gcmV0dXJucyAyLjRcbiAgICpcbiAgICogICAgbWF0aC5wb3coMTAsIDQpICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDEwMDAwXG4gICAqICAgIG1hdGgubG9nMXAoOTk5OSwgMTApICAgICAgICAgICAgLy8gcmV0dXJucyA0XG4gICAqICAgIG1hdGgubG9nMXAoOTk5OSkgLyBtYXRoLmxvZygxMCkgLy8gcmV0dXJucyA0XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBleHAsIGxvZywgbG9nMiwgbG9nMTBcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHhcbiAgICogICAgICAgICAgICBWYWx1ZSBmb3Igd2hpY2ggdG8gY2FsY3VsYXRlIHRoZSBsb2dhcml0aG0gb2YgYHgrMWAuXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleH0gW2Jhc2U9ZV1cbiAgICogICAgICAgICAgICBPcHRpb25hbCBiYXNlIGZvciB0aGUgbG9nYXJpdGhtLiBJZiBub3QgcHJvdmlkZWQsIHRoZSBuYXR1cmFsXG4gICAqICAgICAgICAgICAgbG9nYXJpdGhtIG9mIGB4KzFgIGlzIGNhbGN1bGF0ZWQuXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH1cbiAgICogICAgICAgICAgICBSZXR1cm5zIHRoZSBsb2dhcml0aG0gb2YgYHgrMWBcbiAgICovXG4gIHZhciBsb2cxcCA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICBpZiAoeCA+PSAtMSB8fCBjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfbnVtYmVyLmxvZzFwKSh4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG5lZ2F0aXZlIHZhbHVlIC0+IGNvbXBsZXggdmFsdWUgY29tcHV0YXRpb25cbiAgICAgICAgcmV0dXJuIF9sb2cxcENvbXBsZXgobmV3IENvbXBsZXgoeCwgMCkpO1xuICAgICAgfVxuICAgIH0sXG4gICAgQ29tcGxleDogX2xvZzFwQ29tcGxleCxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICB2YXIgeSA9IHgucGx1cygxKTtcblxuICAgICAgaWYgKCF5LmlzTmVnYXRpdmUoKSB8fCBjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIHkubG4oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGRvd25ncmFkZSB0byBudW1iZXIsIHJldHVybiBDb21wbGV4IHZhbHVlZCByZXN1bHRcbiAgICAgICAgcmV0dXJuIF9sb2cxcENvbXBsZXgobmV3IENvbXBsZXgoeC50b051bWJlcigpLCAwKSk7XG4gICAgICB9XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGxvZzFwKTtcbiAgICB9LFxuICAgICdhbnksIGFueSc6IGZ1bmN0aW9uIGFueUFueSh4LCBiYXNlKSB7XG4gICAgICAvLyBjYWxjdWxhdGUgbG9nYXJpdGhtIGZvciBhIHNwZWNpZmllZCBiYXNlLCBsb2cxcCh4LCBiYXNlKVxuICAgICAgcmV0dXJuIGRpdmlkZVNjYWxhcihsb2cxcCh4KSwgbG9nKGJhc2UpKTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBuYXR1cmFsIGxvZ2FyaXRobSBvZiBhIGNvbXBsZXggbnVtYmVyICsgMVxuICAgKiBAcGFyYW0ge0NvbXBsZXh9IHhcbiAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9sb2cxcENvbXBsZXgoeCkge1xuICAgIHZhciB4UmUxcCA9IHgucmUgKyAxO1xuICAgIHJldHVybiBuZXcgQ29tcGxleChNYXRoLmxvZyhNYXRoLnNxcnQoeFJlMXAgKiB4UmUxcCArIHguaW0gKiB4LmltKSksIE1hdGguYXRhbjIoeC5pbSwgeFJlMXApKTtcbiAgfVxuXG4gIHJldHVybiBsb2cxcDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVMb2cxcCA9IGNyZWF0ZUxvZzFwOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVMb2cyID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnbG9nMic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnQ29tcGxleCddO1xudmFyIGNyZWF0ZUxvZzIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIDItYmFzZSBvZiBhIHZhbHVlLiBUaGlzIGlzIHRoZSBzYW1lIGFzIGNhbGN1bGF0aW5nIGBsb2coeCwgMilgLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgubG9nMih4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5sb2cyKDAuMDMxMjUpICAgICAgICAgICAvLyByZXR1cm5zIC01XG4gICAqICAgIG1hdGgubG9nMigxNikgICAgICAgICAgICAgICAgLy8gcmV0dXJucyA0XG4gICAqICAgIG1hdGgubG9nMigxNikgLyBtYXRoLmxvZzIoMikgLy8gcmV0dXJucyA0XG4gICAqICAgIG1hdGgucG93KDIsIDQpICAgICAgICAgICAgICAgLy8gcmV0dXJucyAxNlxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgZXhwLCBsb2csIGxvZzFwLCBsb2cxMFxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geFxuICAgKiAgICAgICAgICAgIFZhbHVlIGZvciB3aGljaCB0byBjYWxjdWxhdGUgdGhlIGxvZ2FyaXRobS5cbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fVxuICAgKiAgICAgICAgICAgIFJldHVybnMgdGhlIDItYmFzZSBsb2dhcml0aG0gb2YgYHhgXG4gICAqL1xuICB2YXIgbG9nMiA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICBpZiAoeCA+PSAwIHx8IGNvbmZpZy5wcmVkaWN0YWJsZSkge1xuICAgICAgICByZXR1cm4gKDAsIF9udW1iZXIubG9nMk51bWJlcikoeCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBuZWdhdGl2ZSB2YWx1ZSAtPiBjb21wbGV4IHZhbHVlIGNvbXB1dGF0aW9uXG4gICAgICAgIHJldHVybiBfbG9nMkNvbXBsZXgobmV3IENvbXBsZXgoeCwgMCkpO1xuICAgICAgfVxuICAgIH0sXG4gICAgQ29tcGxleDogX2xvZzJDb21wbGV4LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIGlmICgheC5pc05lZ2F0aXZlKCkgfHwgY29uZmlnLnByZWRpY3RhYmxlKSB7XG4gICAgICAgIHJldHVybiB4LmxvZygyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGRvd25ncmFkZSB0byBudW1iZXIsIHJldHVybiBDb21wbGV4IHZhbHVlZCByZXN1bHRcbiAgICAgICAgcmV0dXJuIF9sb2cyQ29tcGxleChuZXcgQ29tcGxleCh4LnRvTnVtYmVyKCksIDApKTtcbiAgICAgIH1cbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgbG9nMik7XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSBsb2cyIGZvciBhIGNvbXBsZXggdmFsdWVcbiAgICogQHBhcmFtIHtDb21wbGV4fSB4XG4gICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfbG9nMkNvbXBsZXgoeCkge1xuICAgIHZhciBuZXdYID0gTWF0aC5zcXJ0KHgucmUgKiB4LnJlICsgeC5pbSAqIHguaW0pO1xuICAgIHJldHVybiBuZXcgQ29tcGxleChNYXRoLmxvZzIgPyBNYXRoLmxvZzIobmV3WCkgOiBNYXRoLmxvZyhuZXdYKSAvIE1hdGguTE4yLCBNYXRoLmF0YW4yKHguaW0sIHgucmUpIC8gTWF0aC5MTjIpO1xuICB9XG5cbiAgcmV0dXJuIGxvZzI7XG59KTtcbmV4cG9ydHMuY3JlYXRlTG9nMiA9IGNyZWF0ZUxvZzI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU1vZCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYWxnb3JpdGhtID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAyXCIpO1xuXG52YXIgX2FsZ29yaXRobTIgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDNcIik7XG5cbnZhciBfYWxnb3JpdGhtMyA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wNVwiKTtcblxudmFyIF9hbGdvcml0aG00ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTExXCIpO1xuXG52YXIgX2FsZ29yaXRobTUgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTJcIik7XG5cbnZhciBfYWxnb3JpdGhtNiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xM1wiKTtcblxudmFyIF9hbGdvcml0aG03ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ21vZCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnZXF1YWxTY2FsYXInLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVNb2QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsXG4gICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXg7XG4gIHZhciBhbGdvcml0aG0wMiA9ICgwLCBfYWxnb3JpdGhtLmNyZWF0ZUFsZ29yaXRobTAyKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTAzID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTAzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMDUgPSAoMCwgX2FsZ29yaXRobTMuY3JlYXRlQWxnb3JpdGhtMDUpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTEgPSAoMCwgX2FsZ29yaXRobTQuY3JlYXRlQWxnb3JpdGhtMTEpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTIgPSAoMCwgX2FsZ29yaXRobTUuY3JlYXRlQWxnb3JpdGhtMTIpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4XG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTMgPSAoMCwgX2FsZ29yaXRobTYuY3JlYXRlQWxnb3JpdGhtMTMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtNy5jcmVhdGVBbGdvcml0aG0xNCkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIG1vZHVsdXMsIHRoZSByZW1haW5kZXIgb2YgYW4gaW50ZWdlciBkaXZpc2lvbi5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogVGhlIG1vZHVsdXMgaXMgZGVmaW5lZCBhczpcbiAgICpcbiAgICogICAgIHggLSB5ICogZmxvb3IoeCAvIHkpXG4gICAqXG4gICAqIFNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Nb2R1bG9fb3BlcmF0aW9uLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgubW9kKHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLm1vZCg4LCAzKSAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDJcbiAgICogICAgbWF0aC5tb2QoMTEsIDIpICAgICAgICAgICAgICAgLy8gcmV0dXJucyAxXG4gICAqXG4gICAqICAgIGZ1bmN0aW9uIGlzT2RkKHgpIHtcbiAgICogICAgICByZXR1cm4gbWF0aC5tb2QoeCwgMikgIT0gMFxuICAgKiAgICB9XG4gICAqXG4gICAqICAgIGlzT2RkKDIpICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgaXNPZGQoMykgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBkaXZpZGVcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBBcnJheSB8IE1hdHJpeH0geCBEaXZpZGVuZFxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IEFycmF5IHwgTWF0cml4fSB5IERpdmlzb3JcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBBcnJheSB8IE1hdHJpeH0gUmV0dXJucyB0aGUgcmVtYWluZGVyIG9mIGB4YCBkaXZpZGVkIGJ5IGB5YC5cbiAgICovXG5cbiAgdmFyIG1vZCA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfbnVtYmVyLm1vZE51bWJlcixcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIHkuaXNaZXJvKCkgPyB4IDogeC5tb2QoeSk7XG4gICAgfSxcbiAgICAnRnJhY3Rpb24sIEZyYWN0aW9uJzogZnVuY3Rpb24gRnJhY3Rpb25GcmFjdGlvbih4LCB5KSB7XG4gICAgICByZXR1cm4geC5tb2QoeSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTA1KHgsIHksIG1vZCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDIoeSwgeCwgbW9kLCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHgsIHksIG1vZCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIG1vZCk7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gbW9kKG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBtb2QobWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIG1vZCh4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMSh4LCB5LCBtb2QsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIG1vZCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ2FueSwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gYW55U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih5LCB4LCBtb2QsIHRydWUpO1xuICAgIH0sXG4gICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgbW9kLCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgbW9kLCBmYWxzZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ2FueSwgQXJyYXknOiBmdW5jdGlvbiBhbnlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCBtb2QsIHRydWUpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbW9kO1xufSk7XG5leHBvcnRzLmNyZWF0ZU1vZCA9IGNyZWF0ZU1vZDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTXVsdGlwbHkgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfYWxnb3JpdGhtID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTExXCIpO1xuXG52YXIgX2FsZ29yaXRobTIgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBuYW1lID0gJ211bHRpcGx5JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdhZGRTY2FsYXInLCAnbXVsdGlwbHlTY2FsYXInLCAnZXF1YWxTY2FsYXInXTtcbnZhciBjcmVhdGVNdWx0aXBseSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGFkZFNjYWxhciA9IF9yZWYuYWRkU2NhbGFyLFxuICAgICAgbXVsdGlwbHlTY2FsYXIgPSBfcmVmLm11bHRpcGx5U2NhbGFyLFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyO1xuICB2YXIgYWxnb3JpdGhtMTEgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0xMSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0xNCkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgLyoqXG4gICAqIE11bHRpcGx5IHR3byBvciBtb3JlIHZhbHVlcywgYHggKiB5YC5cbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgbWF0cml4IHByb2R1Y3QgaXMgY2FsY3VsYXRlZC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLm11bHRpcGx5KHgsIHkpXG4gICAqICAgIG1hdGgubXVsdGlwbHkoeCwgeSwgeiwgLi4uKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5tdWx0aXBseSg0LCA1LjIpICAgICAgICAvLyByZXR1cm5zIG51bWJlciAyMC44XG4gICAqICAgIG1hdGgubXVsdGlwbHkoMiwgMywgNCkgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMjRcbiAgICpcbiAgICogICAgY29uc3QgYSA9IG1hdGguY29tcGxleCgyLCAzKVxuICAgKiAgICBjb25zdCBiID0gbWF0aC5jb21wbGV4KDQsIDEpXG4gICAqICAgIG1hdGgubXVsdGlwbHkoYSwgYikgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDUgKyAxNGlcbiAgICpcbiAgICogICAgY29uc3QgYyA9IFtbMSwgMl0sIFs0LCAzXV1cbiAgICogICAgY29uc3QgZCA9IFtbMSwgMiwgM10sIFszLCAtNCwgN11dXG4gICAqICAgIG1hdGgubXVsdGlwbHkoYywgZCkgICAgICAgICAgLy8gcmV0dXJucyBBcnJheSBbWzcsIC02LCAxN10sIFsxMywgLTQsIDMzXV1cbiAgICpcbiAgICogICAgY29uc3QgZSA9IG1hdGgudW5pdCgnMi4xIGttJylcbiAgICogICAgbWF0aC5tdWx0aXBseSgzLCBlKSAgICAgICAgICAvLyByZXR1cm5zIFVuaXQgNi4zIGttXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBkaXZpZGUsIHByb2QsIGNyb3NzLCBkb3RcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4IEZpcnN0IHZhbHVlIHRvIG11bHRpcGx5XG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geSBTZWNvbmQgdmFsdWUgdG8gbXVsdGlwbHlcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSBNdWx0aXBsaWNhdGlvbiBvZiBgeGAgYW5kIGB5YFxuICAgKi9cblxuICB2YXIgbXVsdGlwbHkgPSB0eXBlZChuYW1lLCAoMCwgX29iamVjdC5leHRlbmQpKHtcbiAgICAvLyB3ZSBleHRlbmQgdGhlIHNpZ25hdHVyZXMgb2YgbXVsdGlwbHlTY2FsYXIgd2l0aCBzaWduYXR1cmVzIGRlYWxpbmcgd2l0aCBtYXRyaWNlc1xuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIGRpbWVuc2lvbnNcbiAgICAgIF92YWxpZGF0ZU1hdHJpeERpbWVuc2lvbnMoKDAsIF9hcnJheS5hcnJheVNpemUpKHgpLCAoMCwgX2FycmF5LmFycmF5U2l6ZSkoeSkpOyAvLyB1c2UgZGVuc2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG5cblxuICAgICAgdmFyIG0gPSBtdWx0aXBseShtYXRyaXgoeCksIG1hdHJpeCh5KSk7IC8vIHJldHVybiBhcnJheSBvciBzY2FsYXJcblxuICAgICAgcmV0dXJuICgwLCBfaXMuaXNNYXRyaXgpKG0pID8gbS52YWx1ZU9mKCkgOiBtO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgTWF0cml4JzogZnVuY3Rpb24gTWF0cml4TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIGRpbWVuc2lvbnNcbiAgICAgIHZhciB4c2l6ZSA9IHguc2l6ZSgpO1xuICAgICAgdmFyIHlzaXplID0geS5zaXplKCk7IC8vIGNoZWNrIGRpbWVuc2lvbnNcblxuICAgICAgX3ZhbGlkYXRlTWF0cml4RGltZW5zaW9ucyh4c2l6ZSwgeXNpemUpOyAvLyBwcm9jZXNzIGRpbWVuc2lvbnNcblxuXG4gICAgICBpZiAoeHNpemUubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIC8vIHByb2Nlc3MgeSBkaW1lbnNpb25zXG4gICAgICAgIGlmICh5c2l6ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAvLyBWZWN0b3IgKiBWZWN0b3JcbiAgICAgICAgICByZXR1cm4gX211bHRpcGx5VmVjdG9yVmVjdG9yKHgsIHksIHhzaXplWzBdKTtcbiAgICAgICAgfSAvLyBWZWN0b3IgKiBNYXRyaXhcblxuXG4gICAgICAgIHJldHVybiBfbXVsdGlwbHlWZWN0b3JNYXRyaXgoeCwgeSk7XG4gICAgICB9IC8vIHByb2Nlc3MgeSBkaW1lbnNpb25zXG5cblxuICAgICAgaWYgKHlzaXplLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAvLyBNYXRyaXggKiBWZWN0b3JcbiAgICAgICAgcmV0dXJuIF9tdWx0aXBseU1hdHJpeFZlY3Rvcih4LCB5KTtcbiAgICAgIH0gLy8gTWF0cml4ICogTWF0cml4XG5cblxuICAgICAgcmV0dXJuIF9tdWx0aXBseU1hdHJpeE1hdHJpeCh4LCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIE1hdHJpeCAqIE1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIG11bHRpcGx5KHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBNYXRyaXggKiBNYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBtdWx0aXBseShtYXRyaXgoeCwgeS5zdG9yYWdlKCkpLCB5KTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeCwgeSwgbXVsdGlwbHlTY2FsYXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIG11bHRpcGx5U2NhbGFyLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnYW55LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTExKHksIHgsIG11bHRpcGx5U2NhbGFyLCB0cnVlKTtcbiAgICB9LFxuICAgICdhbnksIERlbnNlTWF0cml4JzogZnVuY3Rpb24gYW55RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIG11bHRpcGx5U2NhbGFyLCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgbXVsdGlwbHlTY2FsYXIsIGZhbHNlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnYW55LCBBcnJheSc6IGZ1bmN0aW9uIGFueUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeSksIHgsIG11bHRpcGx5U2NhbGFyLCB0cnVlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnYW55LCBhbnknOiBtdWx0aXBseVNjYWxhcixcbiAgICAnYW55LCBhbnksIC4uLmFueSc6IGZ1bmN0aW9uIGFueUFueUFueSh4LCB5LCByZXN0KSB7XG4gICAgICB2YXIgcmVzdWx0ID0gbXVsdGlwbHkoeCwgeSk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXN1bHQgPSBtdWx0aXBseShyZXN1bHQsIHJlc3RbaV0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfSwgbXVsdGlwbHlTY2FsYXIuc2lnbmF0dXJlcykpO1xuXG4gIGZ1bmN0aW9uIF92YWxpZGF0ZU1hdHJpeERpbWVuc2lvbnMoc2l6ZTEsIHNpemUyKSB7XG4gICAgLy8gY2hlY2sgbGVmdCBvcGVyYW5kIGRpbWVuc2lvbnNcbiAgICBzd2l0Y2ggKHNpemUxLmxlbmd0aCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICAvLyBjaGVjayBzaXplMlxuICAgICAgICBzd2l0Y2ggKHNpemUyLmxlbmd0aCkge1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIC8vIFZlY3RvciB4IFZlY3RvclxuICAgICAgICAgICAgaWYgKHNpemUxWzBdICE9PSBzaXplMlswXSkge1xuICAgICAgICAgICAgICAvLyB0aHJvdyBlcnJvclxuICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRGltZW5zaW9uIG1pc21hdGNoIGluIG11bHRpcGxpY2F0aW9uLiBWZWN0b3JzIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGgnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAvLyBWZWN0b3IgeCBNYXRyaXhcbiAgICAgICAgICAgIGlmIChzaXplMVswXSAhPT0gc2l6ZTJbMF0pIHtcbiAgICAgICAgICAgICAgLy8gdGhyb3cgZXJyb3JcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RpbWVuc2lvbiBtaXNtYXRjaCBpbiBtdWx0aXBsaWNhdGlvbi4gVmVjdG9yIGxlbmd0aCAoJyArIHNpemUxWzBdICsgJykgbXVzdCBtYXRjaCBNYXRyaXggcm93cyAoJyArIHNpemUyWzBdICsgJyknKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gb25seSBtdWx0aXBseSBhIDEgb3IgMiBkaW1lbnNpb25hbCBtYXRyaXggKE1hdHJpeCBCIGhhcyAnICsgc2l6ZTIubGVuZ3RoICsgJyBkaW1lbnNpb25zKScpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgMjpcbiAgICAgICAgLy8gY2hlY2sgc2l6ZTJcbiAgICAgICAgc3dpdGNoIChzaXplMi5sZW5ndGgpIHtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAvLyBNYXRyaXggeCBWZWN0b3JcbiAgICAgICAgICAgIGlmIChzaXplMVsxXSAhPT0gc2l6ZTJbMF0pIHtcbiAgICAgICAgICAgICAgLy8gdGhyb3cgZXJyb3JcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RpbWVuc2lvbiBtaXNtYXRjaCBpbiBtdWx0aXBsaWNhdGlvbi4gTWF0cml4IGNvbHVtbnMgKCcgKyBzaXplMVsxXSArICcpIG11c3QgbWF0Y2ggVmVjdG9yIGxlbmd0aCAoJyArIHNpemUyWzBdICsgJyknKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAvLyBNYXRyaXggeCBNYXRyaXhcbiAgICAgICAgICAgIGlmIChzaXplMVsxXSAhPT0gc2l6ZTJbMF0pIHtcbiAgICAgICAgICAgICAgLy8gdGhyb3cgZXJyb3JcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RpbWVuc2lvbiBtaXNtYXRjaCBpbiBtdWx0aXBsaWNhdGlvbi4gTWF0cml4IEEgY29sdW1ucyAoJyArIHNpemUxWzFdICsgJykgbXVzdCBtYXRjaCBNYXRyaXggQiByb3dzICgnICsgc2l6ZTJbMF0gKyAnKScpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbiBvbmx5IG11bHRpcGx5IGEgMSBvciAyIGRpbWVuc2lvbmFsIG1hdHJpeCAoTWF0cml4IEIgaGFzICcgKyBzaXplMi5sZW5ndGggKyAnIGRpbWVuc2lvbnMpJyk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gb25seSBtdWx0aXBseSBhIDEgb3IgMiBkaW1lbnNpb25hbCBtYXRyaXggKE1hdHJpeCBBIGhhcyAnICsgc2l6ZTEubGVuZ3RoICsgJyBkaW1lbnNpb25zKScpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQyA9IEEgKiBCXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSBhICAgICAgICAgICAgRGVuc2UgVmVjdG9yICAgKE4pXG4gICAqIEBwYXJhbSB7TWF0cml4fSBiICAgICAgICAgICAgRGVuc2UgVmVjdG9yICAgKE4pXG4gICAqXG4gICAqIEByZXR1cm4ge251bWJlcn0gICAgICAgICAgICAgU2NhbGFyIHZhbHVlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX211bHRpcGx5VmVjdG9yVmVjdG9yKGEsIGIsIG4pIHtcbiAgICAvLyBjaGVjayBlbXB0eSB2ZWN0b3JcbiAgICBpZiAobiA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgbXVsdGlwbHkgdHdvIGVtcHR5IHZlY3RvcnMnKTtcbiAgICB9IC8vIGEgZGVuc2VcblxuXG4gICAgdmFyIGFkYXRhID0gYS5fZGF0YTtcbiAgICB2YXIgYWR0ID0gYS5fZGF0YXR5cGU7IC8vIGIgZGVuc2VcblxuICAgIHZhciBiZGF0YSA9IGIuX2RhdGE7XG4gICAgdmFyIGJkdCA9IGIuX2RhdGF0eXBlOyAvLyBkYXRhdHlwZVxuXG4gICAgdmFyIGR0OyAvLyBhZGRTY2FsYXIgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGFmID0gYWRkU2NhbGFyOyAvLyBtdWx0aXBseVNjYWxhciBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgbWYgPSBtdWx0aXBseVNjYWxhcjsgLy8gcHJvY2VzcyBkYXRhIHR5cGVzXG5cbiAgICBpZiAoYWR0ICYmIGJkdCAmJiBhZHQgPT09IGJkdCAmJiB0eXBlb2YgYWR0ID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gZGF0YXR5cGVcbiAgICAgIGR0ID0gYWR0OyAvLyBmaW5kIHNpZ25hdHVyZXMgdGhhdCBtYXRjaGVzIChkdCwgZHQpXG5cbiAgICAgIGFmID0gdHlwZWQuZmluZChhZGRTY2FsYXIsIFtkdCwgZHRdKTtcbiAgICAgIG1mID0gdHlwZWQuZmluZChtdWx0aXBseVNjYWxhciwgW2R0LCBkdF0pO1xuICAgIH0gLy8gcmVzdWx0IChkbyBub3QgaW5pdGlhbGl6ZSBpdCB3aXRoIHplcm8pXG5cblxuICAgIHZhciBjID0gbWYoYWRhdGFbMF0sIGJkYXRhWzBdKTsgLy8gbG9vcCBkYXRhXG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IG47IGkrKykge1xuICAgICAgLy8gbXVsdGlwbHkgYW5kIGFjY3VtdWxhdGVcbiAgICAgIGMgPSBhZihjLCBtZihhZGF0YVtpXSwgYmRhdGFbaV0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYztcbiAgfVxuICAvKipcbiAgICogQyA9IEEgKiBCXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSBhICAgICAgICAgICAgRGVuc2UgVmVjdG9yICAgKE0pXG4gICAqIEBwYXJhbSB7TWF0cml4fSBiICAgICAgICAgICAgTWF0cml4ICAgICAgICAgKE14TilcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICBEZW5zZSBWZWN0b3IgICAoTilcbiAgICovXG5cblxuICBmdW5jdGlvbiBfbXVsdGlwbHlWZWN0b3JNYXRyaXgoYSwgYikge1xuICAgIC8vIHByb2Nlc3Mgc3RvcmFnZVxuICAgIGlmIChiLnN0b3JhZ2UoKSAhPT0gJ2RlbnNlJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdXBwb3J0IGZvciBTcGFyc2VNYXRyaXggbm90IGltcGxlbWVudGVkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9tdWx0aXBseVZlY3RvckRlbnNlTWF0cml4KGEsIGIpO1xuICB9XG4gIC8qKlxuICAgKiBDID0gQSAqIEJcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9IGEgICAgICAgICAgICBEZW5zZSBWZWN0b3IgICAoTSlcbiAgICogQHBhcmFtIHtNYXRyaXh9IGIgICAgICAgICAgICBEZW5zZSBNYXRyaXggICAoTXhOKVxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgIERlbnNlIFZlY3RvciAgIChOKVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9tdWx0aXBseVZlY3RvckRlbnNlTWF0cml4KGEsIGIpIHtcbiAgICAvLyBhIGRlbnNlXG4gICAgdmFyIGFkYXRhID0gYS5fZGF0YTtcbiAgICB2YXIgYXNpemUgPSBhLl9zaXplO1xuICAgIHZhciBhZHQgPSBhLl9kYXRhdHlwZTsgLy8gYiBkZW5zZVxuXG4gICAgdmFyIGJkYXRhID0gYi5fZGF0YTtcbiAgICB2YXIgYnNpemUgPSBiLl9zaXplO1xuICAgIHZhciBiZHQgPSBiLl9kYXRhdHlwZTsgLy8gcm93cyAmIGNvbHVtbnNcblxuICAgIHZhciBhbGVuZ3RoID0gYXNpemVbMF07XG4gICAgdmFyIGJjb2x1bW5zID0gYnNpemVbMV07IC8vIGRhdGF0eXBlXG5cbiAgICB2YXIgZHQ7IC8vIGFkZFNjYWxhciBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgYWYgPSBhZGRTY2FsYXI7IC8vIG11bHRpcGx5U2NhbGFyIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBtZiA9IG11bHRpcGx5U2NhbGFyOyAvLyBwcm9jZXNzIGRhdGEgdHlwZXNcblxuICAgIGlmIChhZHQgJiYgYmR0ICYmIGFkdCA9PT0gYmR0ICYmIHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBkYXRhdHlwZVxuICAgICAgZHQgPSBhZHQ7IC8vIGZpbmQgc2lnbmF0dXJlcyB0aGF0IG1hdGNoZXMgKGR0LCBkdClcblxuICAgICAgYWYgPSB0eXBlZC5maW5kKGFkZFNjYWxhciwgW2R0LCBkdF0pO1xuICAgICAgbWYgPSB0eXBlZC5maW5kKG11bHRpcGx5U2NhbGFyLCBbZHQsIGR0XSk7XG4gICAgfSAvLyByZXN1bHRcblxuXG4gICAgdmFyIGMgPSBbXTsgLy8gbG9vcCBtYXRyaXggY29sdW1uc1xuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBiY29sdW1uczsgaisrKSB7XG4gICAgICAvLyBzdW0gKGRvIG5vdCBpbml0aWFsaXplIGl0IHdpdGggemVybylcbiAgICAgIHZhciBzdW0gPSBtZihhZGF0YVswXSwgYmRhdGFbMF1bal0pOyAvLyBsb29wIHZlY3RvclxuXG4gICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFsZW5ndGg7IGkrKykge1xuICAgICAgICAvLyBtdWx0aXBseSAmIGFjY3VtdWxhdGVcbiAgICAgICAgc3VtID0gYWYoc3VtLCBtZihhZGF0YVtpXSwgYmRhdGFbaV1bal0pKTtcbiAgICAgIH1cblxuICAgICAgY1tqXSA9IHN1bTtcbiAgICB9IC8vIHJldHVybiBtYXRyaXhcblxuXG4gICAgcmV0dXJuIGEuY3JlYXRlRGVuc2VNYXRyaXgoe1xuICAgICAgZGF0YTogYyxcbiAgICAgIHNpemU6IFtiY29sdW1uc10sXG4gICAgICBkYXRhdHlwZTogZHRcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQyA9IEEgKiBCXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSBhICAgICAgICAgICAgTWF0cml4ICAgICAgICAgKE14TilcbiAgICogQHBhcmFtIHtNYXRyaXh9IGIgICAgICAgICAgICBEZW5zZSBWZWN0b3IgICAoTilcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICBEZW5zZSBWZWN0b3IgICAoTSlcbiAgICovXG5cblxuICB2YXIgX211bHRpcGx5TWF0cml4VmVjdG9yID0gdHlwZWQoJ19tdWx0aXBseU1hdHJpeFZlY3RvcicsIHtcbiAgICAnRGVuc2VNYXRyaXgsIGFueSc6IF9tdWx0aXBseURlbnNlTWF0cml4VmVjdG9yLFxuICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IF9tdWx0aXBseVNwYXJzZU1hdHJpeFZlY3RvclxuICB9KTtcbiAgLyoqXG4gICAqIEMgPSBBICogQlxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeH0gYSAgICAgICAgICAgIE1hdHJpeCAgICAgICAgIChNeE4pXG4gICAqIEBwYXJhbSB7TWF0cml4fSBiICAgICAgICAgICAgTWF0cml4ICAgICAgICAgKE54QylcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICBNYXRyaXggICAgICAgICAoTXhDKVxuICAgKi9cblxuXG4gIHZhciBfbXVsdGlwbHlNYXRyaXhNYXRyaXggPSB0eXBlZCgnX211bHRpcGx5TWF0cml4TWF0cml4Jywge1xuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBfbXVsdGlwbHlEZW5zZU1hdHJpeERlbnNlTWF0cml4LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogX211bHRpcGx5RGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgsXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBfbXVsdGlwbHlTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCxcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBfbXVsdGlwbHlTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXhcbiAgfSk7XG4gIC8qKlxuICAgKiBDID0gQSAqIEJcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9IGEgICAgICAgICAgICBEZW5zZU1hdHJpeCAgKE14TilcbiAgICogQHBhcmFtIHtNYXRyaXh9IGIgICAgICAgICAgICBEZW5zZSBWZWN0b3IgKE4pXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgRGVuc2UgVmVjdG9yIChNKVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9tdWx0aXBseURlbnNlTWF0cml4VmVjdG9yKGEsIGIpIHtcbiAgICAvLyBhIGRlbnNlXG4gICAgdmFyIGFkYXRhID0gYS5fZGF0YTtcbiAgICB2YXIgYXNpemUgPSBhLl9zaXplO1xuICAgIHZhciBhZHQgPSBhLl9kYXRhdHlwZTsgLy8gYiBkZW5zZVxuXG4gICAgdmFyIGJkYXRhID0gYi5fZGF0YTtcbiAgICB2YXIgYmR0ID0gYi5fZGF0YXR5cGU7IC8vIHJvd3MgJiBjb2x1bW5zXG5cbiAgICB2YXIgYXJvd3MgPSBhc2l6ZVswXTtcbiAgICB2YXIgYWNvbHVtbnMgPSBhc2l6ZVsxXTsgLy8gZGF0YXR5cGVcblxuICAgIHZhciBkdDsgLy8gYWRkU2NhbGFyIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBhZiA9IGFkZFNjYWxhcjsgLy8gbXVsdGlwbHlTY2FsYXIgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIG1mID0gbXVsdGlwbHlTY2FsYXI7IC8vIHByb2Nlc3MgZGF0YSB0eXBlc1xuXG4gICAgaWYgKGFkdCAmJiBiZHQgJiYgYWR0ID09PSBiZHQgJiYgdHlwZW9mIGFkdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIGRhdGF0eXBlXG4gICAgICBkdCA9IGFkdDsgLy8gZmluZCBzaWduYXR1cmVzIHRoYXQgbWF0Y2hlcyAoZHQsIGR0KVxuXG4gICAgICBhZiA9IHR5cGVkLmZpbmQoYWRkU2NhbGFyLCBbZHQsIGR0XSk7XG4gICAgICBtZiA9IHR5cGVkLmZpbmQobXVsdGlwbHlTY2FsYXIsIFtkdCwgZHRdKTtcbiAgICB9IC8vIHJlc3VsdFxuXG5cbiAgICB2YXIgYyA9IFtdOyAvLyBsb29wIG1hdHJpeCBhIHJvd3NcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJvd3M7IGkrKykge1xuICAgICAgLy8gY3VycmVudCByb3dcbiAgICAgIHZhciByb3cgPSBhZGF0YVtpXTsgLy8gc3VtIChkbyBub3QgaW5pdGlhbGl6ZSBpdCB3aXRoIHplcm8pXG5cbiAgICAgIHZhciBzdW0gPSBtZihyb3dbMF0sIGJkYXRhWzBdKTsgLy8gbG9vcCBtYXRyaXggYSBjb2x1bW5zXG5cbiAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgYWNvbHVtbnM7IGorKykge1xuICAgICAgICAvLyBtdWx0aXBseSAmIGFjY3VtdWxhdGVcbiAgICAgICAgc3VtID0gYWYoc3VtLCBtZihyb3dbal0sIGJkYXRhW2pdKSk7XG4gICAgICB9XG5cbiAgICAgIGNbaV0gPSBzdW07XG4gICAgfSAvLyByZXR1cm4gbWF0cml4XG5cblxuICAgIHJldHVybiBhLmNyZWF0ZURlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6IGMsXG4gICAgICBzaXplOiBbYXJvd3NdLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIEMgPSBBICogQlxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeH0gYSAgICAgICAgICAgIERlbnNlTWF0cml4ICAgIChNeE4pXG4gICAqIEBwYXJhbSB7TWF0cml4fSBiICAgICAgICAgICAgRGVuc2VNYXRyaXggICAgKE54QylcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICBEZW5zZU1hdHJpeCAgICAoTXhDKVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9tdWx0aXBseURlbnNlTWF0cml4RGVuc2VNYXRyaXgoYSwgYikge1xuICAgIC8vIGEgZGVuc2VcbiAgICB2YXIgYWRhdGEgPSBhLl9kYXRhO1xuICAgIHZhciBhc2l6ZSA9IGEuX3NpemU7XG4gICAgdmFyIGFkdCA9IGEuX2RhdGF0eXBlOyAvLyBiIGRlbnNlXG5cbiAgICB2YXIgYmRhdGEgPSBiLl9kYXRhO1xuICAgIHZhciBic2l6ZSA9IGIuX3NpemU7XG4gICAgdmFyIGJkdCA9IGIuX2RhdGF0eXBlOyAvLyByb3dzICYgY29sdW1uc1xuXG4gICAgdmFyIGFyb3dzID0gYXNpemVbMF07XG4gICAgdmFyIGFjb2x1bW5zID0gYXNpemVbMV07XG4gICAgdmFyIGJjb2x1bW5zID0gYnNpemVbMV07IC8vIGRhdGF0eXBlXG5cbiAgICB2YXIgZHQ7IC8vIGFkZFNjYWxhciBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgYWYgPSBhZGRTY2FsYXI7IC8vIG11bHRpcGx5U2NhbGFyIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBtZiA9IG11bHRpcGx5U2NhbGFyOyAvLyBwcm9jZXNzIGRhdGEgdHlwZXNcblxuICAgIGlmIChhZHQgJiYgYmR0ICYmIGFkdCA9PT0gYmR0ICYmIHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBkYXRhdHlwZVxuICAgICAgZHQgPSBhZHQ7IC8vIGZpbmQgc2lnbmF0dXJlcyB0aGF0IG1hdGNoZXMgKGR0LCBkdClcblxuICAgICAgYWYgPSB0eXBlZC5maW5kKGFkZFNjYWxhciwgW2R0LCBkdF0pO1xuICAgICAgbWYgPSB0eXBlZC5maW5kKG11bHRpcGx5U2NhbGFyLCBbZHQsIGR0XSk7XG4gICAgfSAvLyByZXN1bHRcblxuXG4gICAgdmFyIGMgPSBbXTsgLy8gbG9vcCBtYXRyaXggYSByb3dzXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyb3dzOyBpKyspIHtcbiAgICAgIC8vIGN1cnJlbnQgcm93XG4gICAgICB2YXIgcm93ID0gYWRhdGFbaV07IC8vIGluaXRpYWxpemUgcm93IGFycmF5XG5cbiAgICAgIGNbaV0gPSBbXTsgLy8gbG9vcCBtYXRyaXggYiBjb2x1bW5zXG5cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYmNvbHVtbnM7IGorKykge1xuICAgICAgICAvLyBzdW0gKGF2b2lkIGluaXRpYWxpemluZyBzdW0gdG8gemVybylcbiAgICAgICAgdmFyIHN1bSA9IG1mKHJvd1swXSwgYmRhdGFbMF1bal0pOyAvLyBsb29wIG1hdHJpeCBhIGNvbHVtbnNcblxuICAgICAgICBmb3IgKHZhciB4ID0gMTsgeCA8IGFjb2x1bW5zOyB4KyspIHtcbiAgICAgICAgICAvLyBtdWx0aXBseSAmIGFjY3VtdWxhdGVcbiAgICAgICAgICBzdW0gPSBhZihzdW0sIG1mKHJvd1t4XSwgYmRhdGFbeF1bal0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNbaV1bal0gPSBzdW07XG4gICAgICB9XG4gICAgfSAvLyByZXR1cm4gbWF0cml4XG5cblxuICAgIHJldHVybiBhLmNyZWF0ZURlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6IGMsXG4gICAgICBzaXplOiBbYXJvd3MsIGJjb2x1bW5zXSxcbiAgICAgIGRhdGF0eXBlOiBkdFxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBDID0gQSAqIEJcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9IGEgICAgICAgICAgICBEZW5zZU1hdHJpeCAgICAoTXhOKVxuICAgKiBAcGFyYW0ge01hdHJpeH0gYiAgICAgICAgICAgIFNwYXJzZU1hdHJpeCAgIChOeEMpXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgU3BhcnNlTWF0cml4ICAgKE14QylcbiAgICovXG5cblxuICBmdW5jdGlvbiBfbXVsdGlwbHlEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeChhLCBiKSB7XG4gICAgLy8gYSBkZW5zZVxuICAgIHZhciBhZGF0YSA9IGEuX2RhdGE7XG4gICAgdmFyIGFzaXplID0gYS5fc2l6ZTtcbiAgICB2YXIgYWR0ID0gYS5fZGF0YXR5cGU7IC8vIGIgc3BhcnNlXG5cbiAgICB2YXIgYnZhbHVlcyA9IGIuX3ZhbHVlcztcbiAgICB2YXIgYmluZGV4ID0gYi5faW5kZXg7XG4gICAgdmFyIGJwdHIgPSBiLl9wdHI7XG4gICAgdmFyIGJzaXplID0gYi5fc2l6ZTtcbiAgICB2YXIgYmR0ID0gYi5fZGF0YXR5cGU7IC8vIHZhbGlkYXRlIGIgbWF0cml4XG5cbiAgICBpZiAoIWJ2YWx1ZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IG11bHRpcGx5IERlbnNlIE1hdHJpeCB0aW1lcyBQYXR0ZXJuIG9ubHkgTWF0cml4Jyk7XG4gICAgfSAvLyByb3dzICYgY29sdW1uc1xuXG5cbiAgICB2YXIgYXJvd3MgPSBhc2l6ZVswXTtcbiAgICB2YXIgYmNvbHVtbnMgPSBic2l6ZVsxXTsgLy8gZGF0YXR5cGVcblxuICAgIHZhciBkdDsgLy8gYWRkU2NhbGFyIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBhZiA9IGFkZFNjYWxhcjsgLy8gbXVsdGlwbHlTY2FsYXIgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIG1mID0gbXVsdGlwbHlTY2FsYXI7IC8vIGVxdWFsU2NhbGFyIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBlcSA9IGVxdWFsU2NhbGFyOyAvLyB6ZXJvIHZhbHVlXG5cbiAgICB2YXIgemVybyA9IDA7IC8vIHByb2Nlc3MgZGF0YSB0eXBlc1xuXG4gICAgaWYgKGFkdCAmJiBiZHQgJiYgYWR0ID09PSBiZHQgJiYgdHlwZW9mIGFkdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIGRhdGF0eXBlXG4gICAgICBkdCA9IGFkdDsgLy8gZmluZCBzaWduYXR1cmVzIHRoYXQgbWF0Y2hlcyAoZHQsIGR0KVxuXG4gICAgICBhZiA9IHR5cGVkLmZpbmQoYWRkU2NhbGFyLCBbZHQsIGR0XSk7XG4gICAgICBtZiA9IHR5cGVkLmZpbmQobXVsdGlwbHlTY2FsYXIsIFtkdCwgZHRdKTtcbiAgICAgIGVxID0gdHlwZWQuZmluZChlcXVhbFNjYWxhciwgW2R0LCBkdF0pOyAvLyBjb252ZXJ0IDAgdG8gdGhlIHNhbWUgZGF0YXR5cGVcblxuICAgICAgemVybyA9IHR5cGVkLmNvbnZlcnQoMCwgZHQpO1xuICAgIH0gLy8gcmVzdWx0XG5cblxuICAgIHZhciBjdmFsdWVzID0gW107XG4gICAgdmFyIGNpbmRleCA9IFtdO1xuICAgIHZhciBjcHRyID0gW107IC8vIGMgbWF0cml4XG5cbiAgICB2YXIgYyA9IGIuY3JlYXRlU3BhcnNlTWF0cml4KHtcbiAgICAgIHZhbHVlczogY3ZhbHVlcyxcbiAgICAgIGluZGV4OiBjaW5kZXgsXG4gICAgICBwdHI6IGNwdHIsXG4gICAgICBzaXplOiBbYXJvd3MsIGJjb2x1bW5zXSxcbiAgICAgIGRhdGF0eXBlOiBkdFxuICAgIH0pOyAvLyBsb29wIGIgY29sdW1uc1xuXG4gICAgZm9yICh2YXIgamIgPSAwOyBqYiA8IGJjb2x1bW5zOyBqYisrKSB7XG4gICAgICAvLyB1cGRhdGUgcHRyXG4gICAgICBjcHRyW2piXSA9IGNpbmRleC5sZW5ndGg7IC8vIGluZGVjZXMgaW4gY29sdW1uIGpiXG5cbiAgICAgIHZhciBrYjAgPSBicHRyW2piXTtcbiAgICAgIHZhciBrYjEgPSBicHRyW2piICsgMV07IC8vIGRvIG5vdCBwcm9jZXNzIGNvbHVtbiBqYiBpZiBubyBkYXRhIGV4aXN0c1xuXG4gICAgICBpZiAoa2IxID4ga2IwKSB7XG4gICAgICAgIC8vIGxhc3Qgcm93IG1hcmsgcHJvY2Vzc2VkXG4gICAgICAgIHZhciBsYXN0ID0gMDsgLy8gbG9vcCBhIHJvd3NcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyb3dzOyBpKyspIHtcbiAgICAgICAgICAvLyBjb2x1bW4gbWFya1xuICAgICAgICAgIHZhciBtYXJrID0gaSArIDE7IC8vIENbaSwgamJdXG5cbiAgICAgICAgICB2YXIgY2lqID0gdm9pZCAwOyAvLyB2YWx1ZXMgaW4gYiBjb2x1bW4galxuXG4gICAgICAgICAgZm9yICh2YXIga2IgPSBrYjA7IGtiIDwga2IxOyBrYisrKSB7XG4gICAgICAgICAgICAvLyByb3dcbiAgICAgICAgICAgIHZhciBpYiA9IGJpbmRleFtrYl07IC8vIGNoZWNrIHZhbHVlIGhhcyBiZWVuIGluaXRpYWxpemVkXG5cbiAgICAgICAgICAgIGlmIChsYXN0ICE9PSBtYXJrKSB7XG4gICAgICAgICAgICAgIC8vIGZpcnN0IHZhbHVlIGluIGNvbHVtbiBqYlxuICAgICAgICAgICAgICBjaWogPSBtZihhZGF0YVtpXVtpYl0sIGJ2YWx1ZXNba2JdKTsgLy8gdXBkYXRlIG1hcmtcblxuICAgICAgICAgICAgICBsYXN0ID0gbWFyaztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIGFjY3VtdWxhdGUgdmFsdWVcbiAgICAgICAgICAgICAgY2lqID0gYWYoY2lqLCBtZihhZGF0YVtpXVtpYl0sIGJ2YWx1ZXNba2JdKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSAvLyBjaGVjayBjb2x1bW4gaGFzIGJlZW4gcHJvY2Vzc2VkIGFuZCB2YWx1ZSAhPSAwXG5cblxuICAgICAgICAgIGlmIChsYXN0ID09PSBtYXJrICYmICFlcShjaWosIHplcm8pKSB7XG4gICAgICAgICAgICAvLyBwdXNoIHJvdyAmIHZhbHVlXG4gICAgICAgICAgICBjaW5kZXgucHVzaChpKTtcbiAgICAgICAgICAgIGN2YWx1ZXMucHVzaChjaWopO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gdXBkYXRlIHB0clxuXG5cbiAgICBjcHRyW2Jjb2x1bW5zXSA9IGNpbmRleC5sZW5ndGg7IC8vIHJldHVybiBzcGFyc2UgbWF0cml4XG5cbiAgICByZXR1cm4gYztcbiAgfVxuICAvKipcbiAgICogQyA9IEEgKiBCXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSBhICAgICAgICAgICAgU3BhcnNlTWF0cml4ICAgIChNeE4pXG4gICAqIEBwYXJhbSB7TWF0cml4fSBiICAgICAgICAgICAgRGVuc2UgVmVjdG9yIChOKVxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgIFNwYXJzZU1hdHJpeCAgICAoTSwgMSlcbiAgICovXG5cblxuICBmdW5jdGlvbiBfbXVsdGlwbHlTcGFyc2VNYXRyaXhWZWN0b3IoYSwgYikge1xuICAgIC8vIGEgc3BhcnNlXG4gICAgdmFyIGF2YWx1ZXMgPSBhLl92YWx1ZXM7XG4gICAgdmFyIGFpbmRleCA9IGEuX2luZGV4O1xuICAgIHZhciBhcHRyID0gYS5fcHRyO1xuICAgIHZhciBhZHQgPSBhLl9kYXRhdHlwZTsgLy8gdmFsaWRhdGUgYSBtYXRyaXhcblxuICAgIGlmICghYXZhbHVlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgbXVsdGlwbHkgUGF0dGVybiBvbmx5IE1hdHJpeCB0aW1lcyBEZW5zZSBNYXRyaXgnKTtcbiAgICB9IC8vIGIgZGVuc2VcblxuXG4gICAgdmFyIGJkYXRhID0gYi5fZGF0YTtcbiAgICB2YXIgYmR0ID0gYi5fZGF0YXR5cGU7IC8vIHJvd3MgJiBjb2x1bW5zXG5cbiAgICB2YXIgYXJvd3MgPSBhLl9zaXplWzBdO1xuICAgIHZhciBicm93cyA9IGIuX3NpemVbMF07IC8vIHJlc3VsdFxuXG4gICAgdmFyIGN2YWx1ZXMgPSBbXTtcbiAgICB2YXIgY2luZGV4ID0gW107XG4gICAgdmFyIGNwdHIgPSBbXTsgLy8gZGF0YXR5cGVcblxuICAgIHZhciBkdDsgLy8gYWRkU2NhbGFyIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBhZiA9IGFkZFNjYWxhcjsgLy8gbXVsdGlwbHlTY2FsYXIgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIG1mID0gbXVsdGlwbHlTY2FsYXI7IC8vIGVxdWFsU2NhbGFyIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBlcSA9IGVxdWFsU2NhbGFyOyAvLyB6ZXJvIHZhbHVlXG5cbiAgICB2YXIgemVybyA9IDA7IC8vIHByb2Nlc3MgZGF0YSB0eXBlc1xuXG4gICAgaWYgKGFkdCAmJiBiZHQgJiYgYWR0ID09PSBiZHQgJiYgdHlwZW9mIGFkdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIGRhdGF0eXBlXG4gICAgICBkdCA9IGFkdDsgLy8gZmluZCBzaWduYXR1cmVzIHRoYXQgbWF0Y2hlcyAoZHQsIGR0KVxuXG4gICAgICBhZiA9IHR5cGVkLmZpbmQoYWRkU2NhbGFyLCBbZHQsIGR0XSk7XG4gICAgICBtZiA9IHR5cGVkLmZpbmQobXVsdGlwbHlTY2FsYXIsIFtkdCwgZHRdKTtcbiAgICAgIGVxID0gdHlwZWQuZmluZChlcXVhbFNjYWxhciwgW2R0LCBkdF0pOyAvLyBjb252ZXJ0IDAgdG8gdGhlIHNhbWUgZGF0YXR5cGVcblxuICAgICAgemVybyA9IHR5cGVkLmNvbnZlcnQoMCwgZHQpO1xuICAgIH0gLy8gd29ya3NwYWNlXG5cblxuICAgIHZhciB4ID0gW107IC8vIHZlY3RvciB3aXRoIG1hcmtzIGluZGljYXRpbmcgYSB2YWx1ZSB4W2ldIGV4aXN0cyBpbiBhIGdpdmVuIGNvbHVtblxuXG4gICAgdmFyIHcgPSBbXTsgLy8gdXBkYXRlIHB0clxuXG4gICAgY3B0clswXSA9IDA7IC8vIHJvd3MgaW4gYlxuXG4gICAgZm9yICh2YXIgaWIgPSAwOyBpYiA8IGJyb3dzOyBpYisrKSB7XG4gICAgICAvLyBiW2liXVxuICAgICAgdmFyIHZiaSA9IGJkYXRhW2liXTsgLy8gY2hlY2sgYltpYl0gIT0gMCwgYXZvaWQgbG9vcHNcblxuICAgICAgaWYgKCFlcSh2YmksIHplcm8pKSB7XG4gICAgICAgIC8vIEEgdmFsdWVzICYgaW5kZXggaW4gaWIgY29sdW1uXG4gICAgICAgIGZvciAodmFyIGthMCA9IGFwdHJbaWJdLCBrYTEgPSBhcHRyW2liICsgMV0sIGthID0ga2EwOyBrYSA8IGthMTsga2ErKykge1xuICAgICAgICAgIC8vIGEgcm93XG4gICAgICAgICAgdmFyIGlhID0gYWluZGV4W2thXTsgLy8gY2hlY2sgdmFsdWUgZXhpc3RzIGluIGN1cnJlbnQgalxuXG4gICAgICAgICAgaWYgKCF3W2lhXSkge1xuICAgICAgICAgICAgLy8gaWEgaXMgbmV3IGVudHJ5IGluIGpcbiAgICAgICAgICAgIHdbaWFdID0gdHJ1ZTsgLy8gYWRkIGkgdG8gcGF0dGVybiBvZiBDXG5cbiAgICAgICAgICAgIGNpbmRleC5wdXNoKGlhKTsgLy8geChpYSkgPSBBXG5cbiAgICAgICAgICAgIHhbaWFdID0gbWYodmJpLCBhdmFsdWVzW2thXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGkgZXhpc3RzIGluIEMgYWxyZWFkeVxuICAgICAgICAgICAgeFtpYV0gPSBhZih4W2lhXSwgbWYodmJpLCBhdmFsdWVzW2thXSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gY29weSB2YWx1ZXMgZnJvbSB4IHRvIGNvbHVtbiBqYiBvZiBjXG5cblxuICAgIGZvciAodmFyIHAxID0gY2luZGV4Lmxlbmd0aCwgcCA9IDA7IHAgPCBwMTsgcCsrKSB7XG4gICAgICAvLyByb3dcbiAgICAgIHZhciBpYyA9IGNpbmRleFtwXTsgLy8gY29weSB2YWx1ZVxuXG4gICAgICBjdmFsdWVzW3BdID0geFtpY107XG4gICAgfSAvLyB1cGRhdGUgcHRyXG5cblxuICAgIGNwdHJbMV0gPSBjaW5kZXgubGVuZ3RoOyAvLyByZXR1cm4gc3BhcnNlIG1hdHJpeFxuXG4gICAgcmV0dXJuIGEuY3JlYXRlU3BhcnNlTWF0cml4KHtcbiAgICAgIHZhbHVlczogY3ZhbHVlcyxcbiAgICAgIGluZGV4OiBjaW5kZXgsXG4gICAgICBwdHI6IGNwdHIsXG4gICAgICBzaXplOiBbYXJvd3MsIDFdLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIEMgPSBBICogQlxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeH0gYSAgICAgICAgICAgIFNwYXJzZU1hdHJpeCAgICAgIChNeE4pXG4gICAqIEBwYXJhbSB7TWF0cml4fSBiICAgICAgICAgICAgRGVuc2VNYXRyaXggICAgICAgKE54QylcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICBTcGFyc2VNYXRyaXggICAgICAoTXhDKVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9tdWx0aXBseVNwYXJzZU1hdHJpeERlbnNlTWF0cml4KGEsIGIpIHtcbiAgICAvLyBhIHNwYXJzZVxuICAgIHZhciBhdmFsdWVzID0gYS5fdmFsdWVzO1xuICAgIHZhciBhaW5kZXggPSBhLl9pbmRleDtcbiAgICB2YXIgYXB0ciA9IGEuX3B0cjtcbiAgICB2YXIgYWR0ID0gYS5fZGF0YXR5cGU7IC8vIHZhbGlkYXRlIGEgbWF0cml4XG5cbiAgICBpZiAoIWF2YWx1ZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IG11bHRpcGx5IFBhdHRlcm4gb25seSBNYXRyaXggdGltZXMgRGVuc2UgTWF0cml4Jyk7XG4gICAgfSAvLyBiIGRlbnNlXG5cblxuICAgIHZhciBiZGF0YSA9IGIuX2RhdGE7XG4gICAgdmFyIGJkdCA9IGIuX2RhdGF0eXBlOyAvLyByb3dzICYgY29sdW1uc1xuXG4gICAgdmFyIGFyb3dzID0gYS5fc2l6ZVswXTtcbiAgICB2YXIgYnJvd3MgPSBiLl9zaXplWzBdO1xuICAgIHZhciBiY29sdW1ucyA9IGIuX3NpemVbMV07IC8vIGRhdGF0eXBlXG5cbiAgICB2YXIgZHQ7IC8vIGFkZFNjYWxhciBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgYWYgPSBhZGRTY2FsYXI7IC8vIG11bHRpcGx5U2NhbGFyIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBtZiA9IG11bHRpcGx5U2NhbGFyOyAvLyBlcXVhbFNjYWxhciBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgZXEgPSBlcXVhbFNjYWxhcjsgLy8gemVybyB2YWx1ZVxuXG4gICAgdmFyIHplcm8gPSAwOyAvLyBwcm9jZXNzIGRhdGEgdHlwZXNcblxuICAgIGlmIChhZHQgJiYgYmR0ICYmIGFkdCA9PT0gYmR0ICYmIHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBkYXRhdHlwZVxuICAgICAgZHQgPSBhZHQ7IC8vIGZpbmQgc2lnbmF0dXJlcyB0aGF0IG1hdGNoZXMgKGR0LCBkdClcblxuICAgICAgYWYgPSB0eXBlZC5maW5kKGFkZFNjYWxhciwgW2R0LCBkdF0pO1xuICAgICAgbWYgPSB0eXBlZC5maW5kKG11bHRpcGx5U2NhbGFyLCBbZHQsIGR0XSk7XG4gICAgICBlcSA9IHR5cGVkLmZpbmQoZXF1YWxTY2FsYXIsIFtkdCwgZHRdKTsgLy8gY29udmVydCAwIHRvIHRoZSBzYW1lIGRhdGF0eXBlXG5cbiAgICAgIHplcm8gPSB0eXBlZC5jb252ZXJ0KDAsIGR0KTtcbiAgICB9IC8vIHJlc3VsdFxuXG5cbiAgICB2YXIgY3ZhbHVlcyA9IFtdO1xuICAgIHZhciBjaW5kZXggPSBbXTtcbiAgICB2YXIgY3B0ciA9IFtdOyAvLyBjIG1hdHJpeFxuXG4gICAgdmFyIGMgPSBhLmNyZWF0ZVNwYXJzZU1hdHJpeCh7XG4gICAgICB2YWx1ZXM6IGN2YWx1ZXMsXG4gICAgICBpbmRleDogY2luZGV4LFxuICAgICAgcHRyOiBjcHRyLFxuICAgICAgc2l6ZTogW2Fyb3dzLCBiY29sdW1uc10sXG4gICAgICBkYXRhdHlwZTogZHRcbiAgICB9KTsgLy8gd29ya3NwYWNlXG5cbiAgICB2YXIgeCA9IFtdOyAvLyB2ZWN0b3Igd2l0aCBtYXJrcyBpbmRpY2F0aW5nIGEgdmFsdWUgeFtpXSBleGlzdHMgaW4gYSBnaXZlbiBjb2x1bW5cblxuICAgIHZhciB3ID0gW107IC8vIGxvb3AgYiBjb2x1bW5zXG5cbiAgICBmb3IgKHZhciBqYiA9IDA7IGpiIDwgYmNvbHVtbnM7IGpiKyspIHtcbiAgICAgIC8vIHVwZGF0ZSBwdHJcbiAgICAgIGNwdHJbamJdID0gY2luZGV4Lmxlbmd0aDsgLy8gbWFyayBpbiB3b3Jrc3BhY2UgZm9yIGN1cnJlbnQgY29sdW1uXG5cbiAgICAgIHZhciBtYXJrID0gamIgKyAxOyAvLyByb3dzIGluIGpiXG5cbiAgICAgIGZvciAodmFyIGliID0gMDsgaWIgPCBicm93czsgaWIrKykge1xuICAgICAgICAvLyBiW2liLCBqYl1cbiAgICAgICAgdmFyIHZiaWogPSBiZGF0YVtpYl1bamJdOyAvLyBjaGVjayBiW2liLCBqYl0gIT0gMCwgYXZvaWQgbG9vcHNcblxuICAgICAgICBpZiAoIWVxKHZiaWosIHplcm8pKSB7XG4gICAgICAgICAgLy8gQSB2YWx1ZXMgJiBpbmRleCBpbiBpYiBjb2x1bW5cbiAgICAgICAgICBmb3IgKHZhciBrYTAgPSBhcHRyW2liXSwga2ExID0gYXB0cltpYiArIDFdLCBrYSA9IGthMDsga2EgPCBrYTE7IGthKyspIHtcbiAgICAgICAgICAgIC8vIGEgcm93XG4gICAgICAgICAgICB2YXIgaWEgPSBhaW5kZXhba2FdOyAvLyBjaGVjayB2YWx1ZSBleGlzdHMgaW4gY3VycmVudCBqXG5cbiAgICAgICAgICAgIGlmICh3W2lhXSAhPT0gbWFyaykge1xuICAgICAgICAgICAgICAvLyBpYSBpcyBuZXcgZW50cnkgaW4galxuICAgICAgICAgICAgICB3W2lhXSA9IG1hcms7IC8vIGFkZCBpIHRvIHBhdHRlcm4gb2YgQ1xuXG4gICAgICAgICAgICAgIGNpbmRleC5wdXNoKGlhKTsgLy8geChpYSkgPSBBXG5cbiAgICAgICAgICAgICAgeFtpYV0gPSBtZih2YmlqLCBhdmFsdWVzW2thXSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBpIGV4aXN0cyBpbiBDIGFscmVhZHlcbiAgICAgICAgICAgICAgeFtpYV0gPSBhZih4W2lhXSwgbWYodmJpaiwgYXZhbHVlc1trYV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gY29weSB2YWx1ZXMgZnJvbSB4IHRvIGNvbHVtbiBqYiBvZiBjXG5cblxuICAgICAgZm9yICh2YXIgcDAgPSBjcHRyW2piXSwgcDEgPSBjaW5kZXgubGVuZ3RoLCBwID0gcDA7IHAgPCBwMTsgcCsrKSB7XG4gICAgICAgIC8vIHJvd1xuICAgICAgICB2YXIgaWMgPSBjaW5kZXhbcF07IC8vIGNvcHkgdmFsdWVcblxuICAgICAgICBjdmFsdWVzW3BdID0geFtpY107XG4gICAgICB9XG4gICAgfSAvLyB1cGRhdGUgcHRyXG5cblxuICAgIGNwdHJbYmNvbHVtbnNdID0gY2luZGV4Lmxlbmd0aDsgLy8gcmV0dXJuIHNwYXJzZSBtYXRyaXhcblxuICAgIHJldHVybiBjO1xuICB9XG4gIC8qKlxuICAgKiBDID0gQSAqIEJcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9IGEgICAgICAgICAgICBTcGFyc2VNYXRyaXggICAgICAoTXhOKVxuICAgKiBAcGFyYW0ge01hdHJpeH0gYiAgICAgICAgICAgIFNwYXJzZU1hdHJpeCAgICAgIChOeEMpXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgU3BhcnNlTWF0cml4ICAgICAgKE14QylcbiAgICovXG5cblxuICBmdW5jdGlvbiBfbXVsdGlwbHlTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoYSwgYikge1xuICAgIC8vIGEgc3BhcnNlXG4gICAgdmFyIGF2YWx1ZXMgPSBhLl92YWx1ZXM7XG4gICAgdmFyIGFpbmRleCA9IGEuX2luZGV4O1xuICAgIHZhciBhcHRyID0gYS5fcHRyO1xuICAgIHZhciBhZHQgPSBhLl9kYXRhdHlwZTsgLy8gYiBzcGFyc2VcblxuICAgIHZhciBidmFsdWVzID0gYi5fdmFsdWVzO1xuICAgIHZhciBiaW5kZXggPSBiLl9pbmRleDtcbiAgICB2YXIgYnB0ciA9IGIuX3B0cjtcbiAgICB2YXIgYmR0ID0gYi5fZGF0YXR5cGU7IC8vIHJvd3MgJiBjb2x1bW5zXG5cbiAgICB2YXIgYXJvd3MgPSBhLl9zaXplWzBdO1xuICAgIHZhciBiY29sdW1ucyA9IGIuX3NpemVbMV07IC8vIGZsYWcgaW5kaWNhdGluZyBib3RoIG1hdHJpY2VzIChhICYgYikgY29udGFpbiBkYXRhXG5cbiAgICB2YXIgdmFsdWVzID0gYXZhbHVlcyAmJiBidmFsdWVzOyAvLyBkYXRhdHlwZVxuXG4gICAgdmFyIGR0OyAvLyBhZGRTY2FsYXIgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGFmID0gYWRkU2NhbGFyOyAvLyBtdWx0aXBseVNjYWxhciBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgbWYgPSBtdWx0aXBseVNjYWxhcjsgLy8gcHJvY2VzcyBkYXRhIHR5cGVzXG5cbiAgICBpZiAoYWR0ICYmIGJkdCAmJiBhZHQgPT09IGJkdCAmJiB0eXBlb2YgYWR0ID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gZGF0YXR5cGVcbiAgICAgIGR0ID0gYWR0OyAvLyBmaW5kIHNpZ25hdHVyZXMgdGhhdCBtYXRjaGVzIChkdCwgZHQpXG5cbiAgICAgIGFmID0gdHlwZWQuZmluZChhZGRTY2FsYXIsIFtkdCwgZHRdKTtcbiAgICAgIG1mID0gdHlwZWQuZmluZChtdWx0aXBseVNjYWxhciwgW2R0LCBkdF0pO1xuICAgIH0gLy8gcmVzdWx0XG5cblxuICAgIHZhciBjdmFsdWVzID0gdmFsdWVzID8gW10gOiB1bmRlZmluZWQ7XG4gICAgdmFyIGNpbmRleCA9IFtdO1xuICAgIHZhciBjcHRyID0gW107IC8vIGMgbWF0cml4XG5cbiAgICB2YXIgYyA9IGEuY3JlYXRlU3BhcnNlTWF0cml4KHtcbiAgICAgIHZhbHVlczogY3ZhbHVlcyxcbiAgICAgIGluZGV4OiBjaW5kZXgsXG4gICAgICBwdHI6IGNwdHIsXG4gICAgICBzaXplOiBbYXJvd3MsIGJjb2x1bW5zXSxcbiAgICAgIGRhdGF0eXBlOiBkdFxuICAgIH0pOyAvLyB3b3Jrc3BhY2VcblxuICAgIHZhciB4ID0gdmFsdWVzID8gW10gOiB1bmRlZmluZWQ7IC8vIHZlY3RvciB3aXRoIG1hcmtzIGluZGljYXRpbmcgYSB2YWx1ZSB4W2ldIGV4aXN0cyBpbiBhIGdpdmVuIGNvbHVtblxuXG4gICAgdmFyIHcgPSBbXTsgLy8gdmFyaWFibGVzXG5cbiAgICB2YXIga2EsIGthMCwga2ExLCBrYiwga2IwLCBrYjEsIGlhLCBpYjsgLy8gbG9vcCBiIGNvbHVtbnNcblxuICAgIGZvciAodmFyIGpiID0gMDsgamIgPCBiY29sdW1uczsgamIrKykge1xuICAgICAgLy8gdXBkYXRlIHB0clxuICAgICAgY3B0cltqYl0gPSBjaW5kZXgubGVuZ3RoOyAvLyBtYXJrIGluIHdvcmtzcGFjZSBmb3IgY3VycmVudCBjb2x1bW5cblxuICAgICAgdmFyIG1hcmsgPSBqYiArIDE7IC8vIEIgdmFsdWVzICYgaW5kZXggaW4galxuXG4gICAgICBmb3IgKGtiMCA9IGJwdHJbamJdLCBrYjEgPSBicHRyW2piICsgMV0sIGtiID0ga2IwOyBrYiA8IGtiMTsga2IrKykge1xuICAgICAgICAvLyBiIHJvd1xuICAgICAgICBpYiA9IGJpbmRleFtrYl07IC8vIGNoZWNrIHdlIG5lZWQgdG8gcHJvY2VzcyB2YWx1ZXNcblxuICAgICAgICBpZiAodmFsdWVzKSB7XG4gICAgICAgICAgLy8gbG9vcCB2YWx1ZXMgaW4gYVs6LGliXVxuICAgICAgICAgIGZvciAoa2EwID0gYXB0cltpYl0sIGthMSA9IGFwdHJbaWIgKyAxXSwga2EgPSBrYTA7IGthIDwga2ExOyBrYSsrKSB7XG4gICAgICAgICAgICAvLyByb3dcbiAgICAgICAgICAgIGlhID0gYWluZGV4W2thXTsgLy8gY2hlY2sgdmFsdWUgZXhpc3RzIGluIGN1cnJlbnQgalxuXG4gICAgICAgICAgICBpZiAod1tpYV0gIT09IG1hcmspIHtcbiAgICAgICAgICAgICAgLy8gaWEgaXMgbmV3IGVudHJ5IGluIGpcbiAgICAgICAgICAgICAgd1tpYV0gPSBtYXJrOyAvLyBhZGQgaSB0byBwYXR0ZXJuIG9mIENcblxuICAgICAgICAgICAgICBjaW5kZXgucHVzaChpYSk7IC8vIHgoaWEpID0gQVxuXG4gICAgICAgICAgICAgIHhbaWFdID0gbWYoYnZhbHVlc1trYl0sIGF2YWx1ZXNba2FdKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIGkgZXhpc3RzIGluIEMgYWxyZWFkeVxuICAgICAgICAgICAgICB4W2lhXSA9IGFmKHhbaWFdLCBtZihidmFsdWVzW2tiXSwgYXZhbHVlc1trYV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gbG9vcCB2YWx1ZXMgaW4gYVs6LGliXVxuICAgICAgICAgIGZvciAoa2EwID0gYXB0cltpYl0sIGthMSA9IGFwdHJbaWIgKyAxXSwga2EgPSBrYTA7IGthIDwga2ExOyBrYSsrKSB7XG4gICAgICAgICAgICAvLyByb3dcbiAgICAgICAgICAgIGlhID0gYWluZGV4W2thXTsgLy8gY2hlY2sgdmFsdWUgZXhpc3RzIGluIGN1cnJlbnQgalxuXG4gICAgICAgICAgICBpZiAod1tpYV0gIT09IG1hcmspIHtcbiAgICAgICAgICAgICAgLy8gaWEgaXMgbmV3IGVudHJ5IGluIGpcbiAgICAgICAgICAgICAgd1tpYV0gPSBtYXJrOyAvLyBhZGQgaSB0byBwYXR0ZXJuIG9mIENcblxuICAgICAgICAgICAgICBjaW5kZXgucHVzaChpYSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IC8vIGNoZWNrIHdlIG5lZWQgdG8gcHJvY2VzcyBtYXRyaXggdmFsdWVzIChwYXR0ZXJuIG1hdHJpeClcblxuXG4gICAgICBpZiAodmFsdWVzKSB7XG4gICAgICAgIC8vIGNvcHkgdmFsdWVzIGZyb20geCB0byBjb2x1bW4gamIgb2YgY1xuICAgICAgICBmb3IgKHZhciBwMCA9IGNwdHJbamJdLCBwMSA9IGNpbmRleC5sZW5ndGgsIHAgPSBwMDsgcCA8IHAxOyBwKyspIHtcbiAgICAgICAgICAvLyByb3dcbiAgICAgICAgICB2YXIgaWMgPSBjaW5kZXhbcF07IC8vIGNvcHkgdmFsdWVcblxuICAgICAgICAgIGN2YWx1ZXNbcF0gPSB4W2ljXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gdXBkYXRlIHB0clxuXG5cbiAgICBjcHRyW2Jjb2x1bW5zXSA9IGNpbmRleC5sZW5ndGg7IC8vIHJldHVybiBzcGFyc2UgbWF0cml4XG5cbiAgICByZXR1cm4gYztcbiAgfVxuXG4gIHJldHVybiBtdWx0aXBseTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVNdWx0aXBseSA9IGNyZWF0ZU11bHRpcGx5OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVNdWx0aXBseVNjYWxhciA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnbXVsdGlwbHlTY2FsYXInO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVNdWx0aXBseVNjYWxhciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIE11bHRpcGx5IHR3byBzY2FsYXIgdmFsdWVzLCBgeCAqIHlgLlxuICAgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IGZvciBpbnRlcm5hbCB1c2U6IGl0IGlzIHVzZWQgYnkgdGhlIHB1YmxpYyBmdW5jdGlvblxuICAgKiBgbXVsdGlwbHlgXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3Qgc3VwcG9ydCBjb2xsZWN0aW9ucyAoQXJyYXkgb3IgTWF0cml4KS5cbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdH0geCAgIEZpcnN0IHZhbHVlIHRvIG11bHRpcGx5XG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleH0geSAgICAgICAgICBTZWNvbmQgdmFsdWUgdG8gbXVsdGlwbHlcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdH0gICAgIE11bHRpcGxpY2F0aW9uIG9mIGB4YCBhbmQgYHlgXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB2YXIgbXVsdGlwbHlTY2FsYXIgPSB0eXBlZCgnbXVsdGlwbHlTY2FsYXInLCB7XG4gICAgJ251bWJlciwgbnVtYmVyJzogX251bWJlci5tdWx0aXBseU51bWJlcixcbiAgICAnQ29tcGxleCwgQ29tcGxleCc6IGZ1bmN0aW9uIENvbXBsZXhDb21wbGV4KHgsIHkpIHtcbiAgICAgIHJldHVybiB4Lm11bCh5KTtcbiAgICB9LFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IGZ1bmN0aW9uIEJpZ051bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geC50aW1lcyh5KTtcbiAgICB9LFxuICAgICdGcmFjdGlvbiwgRnJhY3Rpb24nOiBmdW5jdGlvbiBGcmFjdGlvbkZyYWN0aW9uKHgsIHkpIHtcbiAgICAgIHJldHVybiB4Lm11bCh5KTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBGcmFjdGlvbiB8IEJpZ051bWJlciB8IENvbXBsZXgsIFVuaXQnOiBmdW5jdGlvbiBudW1iZXJGcmFjdGlvbkJpZ051bWJlckNvbXBsZXhVbml0KHgsIHkpIHtcbiAgICAgIHZhciByZXMgPSB5LmNsb25lKCk7XG4gICAgICByZXMudmFsdWUgPSByZXMudmFsdWUgPT09IG51bGwgPyByZXMuX25vcm1hbGl6ZSh4KSA6IG11bHRpcGx5U2NhbGFyKHJlcy52YWx1ZSwgeCk7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0sXG4gICAgJ1VuaXQsIG51bWJlciB8IEZyYWN0aW9uIHwgQmlnTnVtYmVyIHwgQ29tcGxleCc6IGZ1bmN0aW9uIFVuaXROdW1iZXJGcmFjdGlvbkJpZ051bWJlckNvbXBsZXgoeCwgeSkge1xuICAgICAgdmFyIHJlcyA9IHguY2xvbmUoKTtcbiAgICAgIHJlcy52YWx1ZSA9IHJlcy52YWx1ZSA9PT0gbnVsbCA/IHJlcy5fbm9ybWFsaXplKHkpIDogbXVsdGlwbHlTY2FsYXIocmVzLnZhbHVlLCB5KTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSxcbiAgICAnVW5pdCwgVW5pdCc6IGZ1bmN0aW9uIFVuaXRVbml0KHgsIHkpIHtcbiAgICAgIHJldHVybiB4Lm11bHRpcGx5KHkpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBtdWx0aXBseVNjYWxhcjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVNdWx0aXBseVNjYWxhciA9IGNyZWF0ZU11bHRpcGx5U2NhbGFyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVOb3JtID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnbm9ybSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdhYnMnLCAnYWRkJywgJ3BvdycsICdjb25qJywgJ3NxcnQnLCAnbXVsdGlwbHknLCAnZXF1YWxTY2FsYXInLCAnbGFyZ2VyJywgJ3NtYWxsZXInLCAnbWF0cml4J107XG52YXIgY3JlYXRlTm9ybSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBhYnMgPSBfcmVmLmFicyxcbiAgICAgIGFkZCA9IF9yZWYuYWRkLFxuICAgICAgcG93ID0gX3JlZi5wb3csXG4gICAgICBjb25qID0gX3JlZi5jb25qLFxuICAgICAgc3FydCA9IF9yZWYuc3FydCxcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIGxhcmdlciA9IF9yZWYubGFyZ2VyLFxuICAgICAgc21hbGxlciA9IF9yZWYuc21hbGxlcixcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIG5vcm0gb2YgYSBudW1iZXIsIHZlY3RvciBvciBtYXRyaXguXG4gICAqXG4gICAqIFRoZSBzZWNvbmQgcGFyYW1ldGVyIHAgaXMgb3B0aW9uYWwuIElmIG5vdCBwcm92aWRlZCwgaXQgZGVmYXVsdHMgdG8gMi5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLm5vcm0oeClcbiAgICogICAgbWF0aC5ub3JtKHgsIHApXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmFicygtMy41KSAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDMuNVxuICAgKiAgICBtYXRoLm5vcm0oLTMuNSkgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDMuNVxuICAgKlxuICAgKiAgICBtYXRoLm5vcm0obWF0aC5jb21wbGV4KDMsIC00KSkgICAgICAgICAvLyByZXR1cm5zIDVcbiAgICpcbiAgICogICAgbWF0aC5ub3JtKFsxLCAyLCAtM10sIEluZmluaXR5KSAgICAgICAgLy8gcmV0dXJucyAzXG4gICAqICAgIG1hdGgubm9ybShbMSwgMiwgLTNdLCAtSW5maW5pdHkpICAgICAgIC8vIHJldHVybnMgMVxuICAgKlxuICAgKiAgICBtYXRoLm5vcm0oWzMsIDRdLCAyKSAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDVcbiAgICpcbiAgICogICAgbWF0aC5ub3JtKFtbMSwgMl0sIFszLCA0XV0sIDEpICAgICAgICAgIC8vIHJldHVybnMgNlxuICAgKiAgICBtYXRoLm5vcm0oW1sxLCAyXSwgWzMsIDRdXSwgJ2luZicpICAgICAvLyByZXR1cm5zIDdcbiAgICogICAgbWF0aC5ub3JtKFtbMSwgMl0sIFszLCA0XV0sICdmcm8nKSAgICAgLy8gcmV0dXJucyA1LjQ3NzIyNTU3NTA1MTY2MVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYWJzLCBoeXBvdFxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHhcbiAgICogICAgICAgICAgICBWYWx1ZSBmb3Igd2hpY2ggdG8gY2FsY3VsYXRlIHRoZSBub3JtXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IHN0cmluZ30gW3A9Ml1cbiAgICogICAgICAgICAgICBWZWN0b3Igc3BhY2UuXG4gICAqICAgICAgICAgICAgU3VwcG9ydGVkIG51bWJlcnMgaW5jbHVkZSBJbmZpbml0eSBhbmQgLUluZmluaXR5LlxuICAgKiAgICAgICAgICAgIFN1cHBvcnRlZCBzdHJpbmdzIGFyZTogJ2luZicsICctaW5mJywgYW5kICdmcm8nIChUaGUgRnJvYmVuaXVzIG5vcm0pXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlcn0gdGhlIHAtbm9ybVxuICAgKi9cbiAgdmFyIG5vcm0gPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBNYXRoLmFicyxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmFicygpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgLy8gbm9ybSh4KSA9IGFicyh4KVxuICAgICAgcmV0dXJuIHguYWJzKCk7XG4gICAgfSxcbiAgICBcImJvb2xlYW5cIjogZnVuY3Rpb24gYm9vbGVhbih4KSB7XG4gICAgICAvLyBub3JtKHgpID0gYWJzKHgpXG4gICAgICByZXR1cm4gTWF0aC5hYnMoeCk7XG4gICAgfSxcbiAgICBBcnJheTogZnVuY3Rpb24gQXJyYXkoeCkge1xuICAgICAgcmV0dXJuIF9ub3JtKG1hdHJpeCh4KSwgMik7XG4gICAgfSxcbiAgICBNYXRyaXg6IGZ1bmN0aW9uIE1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gX25vcm0oeCwgMik7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQ29tcGxleCB8IEJpZ051bWJlciB8IGJvb2xlYW4sIG51bWJlciB8IEJpZ051bWJlciB8IHN0cmluZyc6IGZ1bmN0aW9uIG51bWJlckNvbXBsZXhCaWdOdW1iZXJCb29sZWFuTnVtYmVyQmlnTnVtYmVyU3RyaW5nKHgpIHtcbiAgICAgIC8vIGlnbm9yZSBzZWNvbmQgcGFyYW1ldGVyLCBUT0RPOiByZW1vdmUgdGhlIG9wdGlvbiBvZiBzZWNvbmQgcGFyYW1ldGVyIGZvciB0aGVzZSB0eXBlc1xuICAgICAgcmV0dXJuIG5vcm0oeCk7XG4gICAgfSxcbiAgICAnQXJyYXksIG51bWJlciB8IEJpZ051bWJlciB8IHN0cmluZyc6IGZ1bmN0aW9uIEFycmF5TnVtYmVyQmlnTnVtYmVyU3RyaW5nKHgsIHApIHtcbiAgICAgIHJldHVybiBfbm9ybShtYXRyaXgoeCksIHApO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyIHwgc3RyaW5nJzogZnVuY3Rpb24gTWF0cml4TnVtYmVyQmlnTnVtYmVyU3RyaW5nKHgsIHApIHtcbiAgICAgIHJldHVybiBfbm9ybSh4LCBwKTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBub3JtIGZvciBhbiBhcnJheVxuICAgKiBAcGFyYW0ge01hdHJpeH0geFxuICAgKiBAcGFyYW0ge251bWJlciB8IHN0cmluZ30gcFxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBub3JtXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9ub3JtKHgsIHApIHtcbiAgICAvLyBzaXplXG4gICAgdmFyIHNpemVYID0geC5zaXplKCk7IC8vIGNoZWNrIGlmIGl0IGlzIGEgdmVjdG9yXG5cbiAgICBpZiAoc2l6ZVgubGVuZ3RoID09PSAxKSB7XG4gICAgICAvLyBjaGVjayBwXG4gICAgICBpZiAocCA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZIHx8IHAgPT09ICdpbmYnKSB7XG4gICAgICAgIC8vIG5vcm0oeCwgSW5maW5pdHkpID0gbWF4KGFicyh4KSlcbiAgICAgICAgdmFyIHBpbmYgPSAwOyAvLyBza2lwIHplcm9zIHNpbmNlIGFicygwKSA9PT0gMFxuXG4gICAgICAgIHguZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICB2YXIgdiA9IGFicyh2YWx1ZSk7XG5cbiAgICAgICAgICBpZiAobGFyZ2VyKHYsIHBpbmYpKSB7XG4gICAgICAgICAgICBwaW5mID0gdjtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgICByZXR1cm4gcGluZjtcbiAgICAgIH1cblxuICAgICAgaWYgKHAgPT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSB8fCBwID09PSAnLWluZicpIHtcbiAgICAgICAgLy8gbm9ybSh4LCAtSW5maW5pdHkpID0gbWluKGFicyh4KSlcbiAgICAgICAgdmFyIG5pbmY7IC8vIHNraXAgemVyb3Mgc2luY2UgYWJzKDApID09PSAwXG5cbiAgICAgICAgeC5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIHZhciB2ID0gYWJzKHZhbHVlKTtcblxuICAgICAgICAgIGlmICghbmluZiB8fCBzbWFsbGVyKHYsIG5pbmYpKSB7XG4gICAgICAgICAgICBuaW5mID0gdjtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgICByZXR1cm4gbmluZiB8fCAwO1xuICAgICAgfVxuXG4gICAgICBpZiAocCA9PT0gJ2ZybycpIHtcbiAgICAgICAgcmV0dXJuIF9ub3JtKHgsIDIpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHAgPT09ICdudW1iZXInICYmICFpc05hTihwKSkge1xuICAgICAgICAvLyBjaGVjayBwICE9IDBcbiAgICAgICAgaWYgKCFlcXVhbFNjYWxhcihwLCAwKSkge1xuICAgICAgICAgIC8vIG5vcm0oeCwgcCkgPSBzdW0oYWJzKHhpKSBeIHApIF4gMS9wXG4gICAgICAgICAgdmFyIG4gPSAwOyAvLyBza2lwIHplcm9zIHNpbmNlIGFicygwKSA9PT0gMFxuXG4gICAgICAgICAgeC5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgbiA9IGFkZChwb3coYWJzKHZhbHVlKSwgcCksIG4pO1xuICAgICAgICAgIH0sIHRydWUpO1xuICAgICAgICAgIHJldHVybiBwb3cobiwgMSAvIHApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICAgIH0gLy8gaW52YWxpZCBwYXJhbWV0ZXIgdmFsdWVcblxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIHBhcmFtZXRlciB2YWx1ZScpO1xuICAgIH0gLy8gTXhOIG1hdHJpeFxuXG5cbiAgICBpZiAoc2l6ZVgubGVuZ3RoID09PSAyKSB7XG4gICAgICAvLyBjaGVjayBwXG4gICAgICBpZiAocCA9PT0gMSkge1xuICAgICAgICAvLyBub3JtKHgpID0gdGhlIGxhcmdlc3QgY29sdW1uIHN1bVxuICAgICAgICB2YXIgYyA9IFtdOyAvLyByZXN1bHRcblxuICAgICAgICB2YXIgbWF4YyA9IDA7IC8vIHNraXAgemVyb3Mgc2luY2UgYWJzKDApID09IDBcblxuICAgICAgICB4LmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCkge1xuICAgICAgICAgIHZhciBqID0gaW5kZXhbMV07XG4gICAgICAgICAgdmFyIGNqID0gYWRkKGNbal0gfHwgMCwgYWJzKHZhbHVlKSk7XG5cbiAgICAgICAgICBpZiAobGFyZ2VyKGNqLCBtYXhjKSkge1xuICAgICAgICAgICAgbWF4YyA9IGNqO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNbal0gPSBjajtcbiAgICAgICAgfSwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiBtYXhjO1xuICAgICAgfVxuXG4gICAgICBpZiAocCA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZIHx8IHAgPT09ICdpbmYnKSB7XG4gICAgICAgIC8vIG5vcm0oeCkgPSB0aGUgbGFyZ2VzdCByb3cgc3VtXG4gICAgICAgIHZhciByID0gW107IC8vIHJlc3VsdFxuXG4gICAgICAgIHZhciBtYXhyID0gMDsgLy8gc2tpcCB6ZXJvcyBzaW5jZSBhYnMoMCkgPT0gMFxuXG4gICAgICAgIHguZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4KSB7XG4gICAgICAgICAgdmFyIGkgPSBpbmRleFswXTtcbiAgICAgICAgICB2YXIgcmkgPSBhZGQocltpXSB8fCAwLCBhYnModmFsdWUpKTtcblxuICAgICAgICAgIGlmIChsYXJnZXIocmksIG1heHIpKSB7XG4gICAgICAgICAgICBtYXhyID0gcmk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcltpXSA9IHJpO1xuICAgICAgICB9LCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIG1heHI7XG4gICAgICB9XG5cbiAgICAgIGlmIChwID09PSAnZnJvJykge1xuICAgICAgICAvLyBub3JtKHgpID0gc3FydChzdW0oZGlhZyh4J3gpKSlcbiAgICAgICAgdmFyIGZybyA9IDA7XG4gICAgICAgIHguZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4KSB7XG4gICAgICAgICAgZnJvID0gYWRkKGZybywgbXVsdGlwbHkodmFsdWUsIGNvbmoodmFsdWUpKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gYWJzKHNxcnQoZnJvKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwID09PSAyKSB7XG4gICAgICAgIC8vIG5vdCBpbXBsZW1lbnRlZFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIHBhcmFtZXRlciB2YWx1ZSwgbWlzc2luZyBpbXBsZW1lbnRhdGlvbiBvZiBtYXRyaXggc2luZ3VsYXIgdmFsdWUgZGVjb21wb3NpdGlvbicpO1xuICAgICAgfSAvLyBpbnZhbGlkIHBhcmFtZXRlciB2YWx1ZVxuXG5cbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgcGFyYW1ldGVyIHZhbHVlJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5vcm07XG59KTtcbmV4cG9ydHMuY3JlYXRlTm9ybSA9IGNyZWF0ZU5vcm07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU50aFJvb3ROdW1iZXIgPSBleHBvcnRzLmNyZWF0ZU50aFJvb3QgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wMVwiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAyXCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDZcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMVwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgX2FsZ29yaXRobTYgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnbnRoUm9vdCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnZXF1YWxTY2FsYXInLCAnQmlnTnVtYmVyJ107XG52YXIgY3JlYXRlTnRoUm9vdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIF9CaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcjtcbiAgdmFyIGFsZ29yaXRobTAxID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMDEpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wMiA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0wMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNiA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0wNikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMSA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0xMSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtNS5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG02LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBudGggcm9vdCBvZiBhIHZhbHVlLlxuICAgKiBUaGUgcHJpbmNpcGFsIG50aCByb290IG9mIGEgcG9zaXRpdmUgcmVhbCBudW1iZXIgQSwgaXMgdGhlIHBvc2l0aXZlIHJlYWxcbiAgICogc29sdXRpb24gb2YgdGhlIGVxdWF0aW9uXG4gICAqXG4gICAqICAgICB4XnJvb3QgPSBBXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGgubnRoUm9vdChhKVxuICAgKiAgICAgbWF0aC5udGhSb290KGEsIHJvb3QpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgbWF0aC5udGhSb290KDksIDIpICAgIC8vIHJldHVybnMgMywgYXMgM14yID09IDlcbiAgICogICAgIG1hdGguc3FydCg5KSAgICAgICAgICAvLyByZXR1cm5zIDMsIGFzIDNeMiA9PSA5XG4gICAqICAgICBtYXRoLm50aFJvb3QoNjQsIDMpICAgLy8gcmV0dXJucyA0LCBhcyA0XjMgPT0gNjRcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBzcXJ0LCBwb3dcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeCB8IENvbXBsZXh9IGFcbiAgICogICAgICAgICAgICAgIFZhbHVlIGZvciB3aGljaCB0byBjYWxjdWxhdGUgdGhlIG50aCByb290XG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyfSBbcm9vdD0yXSAgICBUaGUgcm9vdC5cbiAgICogQHJldHVybiB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBSZXR1cm5zIHRoZSBudGggcm9vdCBvZiBgYWBcbiAgICovXG5cbiAgdmFyIGNvbXBsZXhFcnIgPSAnJyArICdDb21wbGV4IG51bWJlciBub3Qgc3VwcG9ydGVkIGluIGZ1bmN0aW9uIG50aFJvb3QuICcgKyAnVXNlIG50aFJvb3RzIGluc3RlYWQuJztcbiAgdmFyIG50aFJvb3QgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkge1xuICAgICAgcmV0dXJuICgwLCBfbnVtYmVyLm50aFJvb3ROdW1iZXIpKHgsIDIpO1xuICAgIH0sXG4gICAgJ251bWJlciwgbnVtYmVyJzogX251bWJlci5udGhSb290TnVtYmVyLFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiBfYmlnTnRoUm9vdCh4LCBuZXcgX0JpZ051bWJlcigyKSk7XG4gICAgfSxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihjb21wbGV4RXJyKTtcbiAgICB9LFxuICAgICdDb21wbGV4LCBudW1iZXInOiBmdW5jdGlvbiBDb21wbGV4TnVtYmVyKHgsIHkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihjb21wbGV4RXJyKTtcbiAgICB9LFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IF9iaWdOdGhSb290LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiBudGhSb290KHgsIDIpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIGRlbnNpdHkgbXVzdCBiZSBvbmUgKG5vIHplcm9zIGluIG1hdHJpeClcbiAgICAgIGlmICh5LmRlbnNpdHkoKSA9PT0gMSkge1xuICAgICAgICAvLyBzcGFyc2UgKyBzcGFyc2VcbiAgICAgICAgcmV0dXJuIGFsZ29yaXRobTA2KHgsIHksIG50aFJvb3QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdGhyb3cgZXhjZXB0aW9uXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUm9vdCBtdXN0IGJlIG5vbi16ZXJvJyk7XG4gICAgICB9XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMih5LCB4LCBudGhSb290LCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gZGVuc2l0eSBtdXN0IGJlIG9uZSAobm8gemVyb3MgaW4gbWF0cml4KVxuICAgICAgaWYgKHkuZGVuc2l0eSgpID09PSAxKSB7XG4gICAgICAgIC8vIGRlbnNlICsgc3BhcnNlXG4gICAgICAgIHJldHVybiBhbGdvcml0aG0wMSh4LCB5LCBudGhSb290LCBmYWxzZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB0aHJvdyBleGNlcHRpb25cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSb290IG11c3QgYmUgbm9uLXplcm8nKTtcbiAgICAgIH1cbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBudGhSb290KTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBudGhSb290KG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBudGhSb290KG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBudGhSb290KHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTExKHgsIHksIG50aFJvb3QsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gRGVuc2VNYXRyaXhOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIG50aFJvb3QsIGZhbHNlKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlclNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyBkZW5zaXR5IG11c3QgYmUgb25lIChubyB6ZXJvcyBpbiBtYXRyaXgpXG4gICAgICBpZiAoeS5kZW5zaXR5KCkgPT09IDEpIHtcbiAgICAgICAgLy8gc3BhcnNlIC0gc2NhbGFyXG4gICAgICAgIHJldHVybiBhbGdvcml0aG0xMSh5LCB4LCBudGhSb290LCB0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHRocm93IGV4Y2VwdGlvblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jvb3QgbXVzdCBiZSBub24temVybycpO1xuICAgICAgfVxuICAgIH0sXG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgbnRoUm9vdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIEFycmF5TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBudGhSb290KG1hdHJpeCh4KSwgeSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgQXJyYXknOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gbnRoUm9vdCh4LCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbnRoUm9vdDtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgbnRoIHJvb3Qgb2YgYSBmb3IgQmlnTnVtYmVycywgc29sdmUgeF5yb290ID09IGFcbiAgICogaHR0cHM6Ly9yb3NldHRhY29kZS5vcmcvd2lraS9OdGhfcm9vdCNKYXZhU2NyaXB0XG4gICAqIEBwYXJhbSB7QmlnTnVtYmVyfSBhXG4gICAqIEBwYXJhbSB7QmlnTnVtYmVyfSByb290XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9iaWdOdGhSb290KGEsIHJvb3QpIHtcbiAgICB2YXIgcHJlY2lzaW9uID0gX0JpZ051bWJlci5wcmVjaXNpb247XG5cbiAgICB2YXIgQmlnID0gX0JpZ051bWJlci5jbG9uZSh7XG4gICAgICBwcmVjaXNpb246IHByZWNpc2lvbiArIDJcbiAgICB9KTtcblxuICAgIHZhciB6ZXJvID0gbmV3IF9CaWdOdW1iZXIoMCk7XG4gICAgdmFyIG9uZSA9IG5ldyBCaWcoMSk7XG4gICAgdmFyIGludiA9IHJvb3QuaXNOZWdhdGl2ZSgpO1xuXG4gICAgaWYgKGludikge1xuICAgICAgcm9vdCA9IHJvb3QubmVnKCk7XG4gICAgfVxuXG4gICAgaWYgKHJvb3QuaXNaZXJvKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUm9vdCBtdXN0IGJlIG5vbi16ZXJvJyk7XG4gICAgfVxuXG4gICAgaWYgKGEuaXNOZWdhdGl2ZSgpICYmICFyb290LmFicygpLm1vZCgyKS5lcXVhbHMoMSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUm9vdCBtdXN0IGJlIG9kZCB3aGVuIGEgaXMgbmVnYXRpdmUuJyk7XG4gICAgfSAvLyBlZGdlIGNhc2VzIHplcm8gYW5kIGluZmluaXR5XG5cblxuICAgIGlmIChhLmlzWmVybygpKSB7XG4gICAgICByZXR1cm4gaW52ID8gbmV3IEJpZyhJbmZpbml0eSkgOiAwO1xuICAgIH1cblxuICAgIGlmICghYS5pc0Zpbml0ZSgpKSB7XG4gICAgICByZXR1cm4gaW52ID8gemVybyA6IGE7XG4gICAgfVxuXG4gICAgdmFyIHggPSBhLmFicygpLnBvdyhvbmUuZGl2KHJvb3QpKTsgLy8gSWYgYSA8IDAsIHdlIHJlcXVpcmUgdGhhdCByb290IGlzIGFuIG9kZCBpbnRlZ2VyLFxuICAgIC8vIHNvICgtMSkgXiAoMS9yb290KSA9IC0xXG5cbiAgICB4ID0gYS5pc05lZygpID8geC5uZWcoKSA6IHg7XG4gICAgcmV0dXJuIG5ldyBfQmlnTnVtYmVyKChpbnYgPyBvbmUuZGl2KHgpIDogeCkudG9QcmVjaXNpb24ocHJlY2lzaW9uKSk7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVOdGhSb290ID0gY3JlYXRlTnRoUm9vdDtcbnZhciBjcmVhdGVOdGhSb290TnVtYmVyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIFsndHlwZWQnXSwgZnVuY3Rpb24gKF9yZWYyKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYyLnR5cGVkO1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogX251bWJlci5udGhSb290TnVtYmVyLFxuICAgICdudW1iZXIsIG51bWJlcic6IF9udW1iZXIubnRoUm9vdE51bWJlclxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVOdGhSb290TnVtYmVyID0gY3JlYXRlTnRoUm9vdE51bWJlcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTnRoUm9vdHMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdudGhSb290cyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydjb25maWcnLCAndHlwZWQnLCAnZGl2aWRlU2NhbGFyJywgJ0NvbXBsZXgnXTtcbnZhciBjcmVhdGVOdGhSb290cyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIGRpdmlkZVNjYWxhciA9IF9yZWYuZGl2aWRlU2NhbGFyLFxuICAgICAgQ29tcGxleCA9IF9yZWYuQ29tcGxleDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBudGggcm9vdHMgb2YgYSB2YWx1ZS5cbiAgICogQW4gbnRoIHJvb3Qgb2YgYSBwb3NpdGl2ZSByZWFsIG51bWJlciBBLFxuICAgKiBpcyBhIHBvc2l0aXZlIHJlYWwgc29sdXRpb24gb2YgdGhlIGVxdWF0aW9uIFwieF5yb290ID0gQVwiLlxuICAgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYW4gYXJyYXkgb2YgY29tcGxleCB2YWx1ZXMuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5udGhSb290cyh4KVxuICAgKiAgICBtYXRoLm50aFJvb3RzKHgsIHJvb3QpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLm50aFJvb3RzKDEpXG4gICAqICAgIC8vIHJldHVybnMgW1xuICAgKiAgICAvLyAgIHtyZTogMSwgaW06IDB9LFxuICAgKiAgICAvLyAgIHtyZTogLTEsIGltOiAwfVxuICAgKiAgICAvLyBdXG4gICAqICAgIG50aFJvb3RzKDEsIDMpXG4gICAqICAgIC8vIHJldHVybnMgW1xuICAgKiAgICAvLyAgIHsgcmU6IDEsIGltOiAwIH0sXG4gICAqICAgIC8vICAgeyByZTogLTAuNDk5OTk5OTk5OTk5OTk5OCwgaW06IDAuODY2MDI1NDAzNzg0NDM4NyB9LFxuICAgKiAgICAvLyAgIHsgcmU6IC0wLjUwMDAwMDAwMDAwMDAwMDQsIGltOiAtMC44NjYwMjU0MDM3ODQ0Mzg1IH1cbiAgICogICAgXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgbnRoUm9vdCwgcG93LCBzcXJ0XG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHggTnVtYmVyIHRvIGJlIHJvdW5kZWRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9ICAgICAgICAgICAgUm91bmRlZCB2YWx1ZVxuICAgKi9cbiAgdmFyIG50aFJvb3RzID0gdHlwZWQobmFtZSwge1xuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIF9udGhDb21wbGV4Um9vdHMoeCwgMik7XG4gICAgfSxcbiAgICAnQ29tcGxleCwgbnVtYmVyJzogX250aENvbXBsZXhSb290c1xuICB9KTtcbiAgLyoqXG4gICAqIEVhY2ggZnVuY3Rpb24gaGVyZSByZXR1cm5zIGEgcmVhbCBtdWx0aXBsZSBvZiBpIGFzIGEgQ29tcGxleCB2YWx1ZS5cbiAgICogQHBhcmFtICB7bnVtYmVyfSB2YWxcbiAgICogQHJldHVybiB7Q29tcGxleH0gdmFsLCBpKnZhbCwgLXZhbCBvciAtaSp2YWwgZm9yIGluZGV4IDAsIDEsIDIsIDNcbiAgICovXG4gIC8vIFRoaXMgaXMgdXNlZCB0byBmaXggZmxvYXQgYXJ0aWZhY3RzIGZvciB6ZXJvLXZhbHVlZCBjb21wb25lbnRzLlxuXG4gIHZhciBfY2FsY3VsYXRlRXhhY3RSZXN1bHQgPSBbZnVuY3Rpb24gcmVhbFBvcyh2YWwpIHtcbiAgICByZXR1cm4gbmV3IENvbXBsZXgodmFsLCAwKTtcbiAgfSwgZnVuY3Rpb24gaW1hZ1Bvcyh2YWwpIHtcbiAgICByZXR1cm4gbmV3IENvbXBsZXgoMCwgdmFsKTtcbiAgfSwgZnVuY3Rpb24gcmVhbE5lZyh2YWwpIHtcbiAgICByZXR1cm4gbmV3IENvbXBsZXgoLXZhbCwgMCk7XG4gIH0sIGZ1bmN0aW9uIGltYWdOZWcodmFsKSB7XG4gICAgcmV0dXJuIG5ldyBDb21wbGV4KDAsIC12YWwpO1xuICB9XTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgbnRoIHJvb3Qgb2YgYSBDb21wbGV4IE51bWJlciBhIHVzaW5nIERlIE1vdmlyZSdzIFRoZW9yZW0uXG4gICAqIEBwYXJhbSAge0NvbXBsZXh9IGFcbiAgICogQHBhcmFtICB7bnVtYmVyfSByb290XG4gICAqIEByZXR1cm4ge0FycmF5fSBhcnJheSBvZiBuIENvbXBsZXggUm9vdHNcbiAgICovXG5cbiAgZnVuY3Rpb24gX250aENvbXBsZXhSb290cyhhLCByb290KSB7XG4gICAgaWYgKHJvb3QgPCAwKSB0aHJvdyBuZXcgRXJyb3IoJ1Jvb3QgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVybycpO1xuICAgIGlmIChyb290ID09PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ1Jvb3QgbXVzdCBiZSBub24temVybycpO1xuICAgIGlmIChyb290ICUgMSAhPT0gMCkgdGhyb3cgbmV3IEVycm9yKCdSb290IG11c3QgYmUgYW4gaW50ZWdlcicpO1xuICAgIGlmIChhID09PSAwIHx8IGEuYWJzKCkgPT09IDApIHJldHVybiBbbmV3IENvbXBsZXgoMCwgMCldO1xuICAgIHZhciBhSXNOdW1lcmljID0gdHlwZW9mIGEgPT09ICdudW1iZXInO1xuICAgIHZhciBvZmZzZXQ7IC8vIGRldGVybWluZSB0aGUgb2Zmc2V0IChhcmd1bWVudCBvZiBhKS8ocGkvMilcblxuICAgIGlmIChhSXNOdW1lcmljIHx8IGEucmUgPT09IDAgfHwgYS5pbSA9PT0gMCkge1xuICAgICAgaWYgKGFJc051bWVyaWMpIHtcbiAgICAgICAgb2Zmc2V0ID0gMiAqICsoYSA8IDApOyAvLyBudW1lcmljIHZhbHVlIG9uIHRoZSByZWFsIGF4aXNcbiAgICAgIH0gZWxzZSBpZiAoYS5pbSA9PT0gMCkge1xuICAgICAgICBvZmZzZXQgPSAyICogKyhhLnJlIDwgMCk7IC8vIGNvbXBsZXggdmFsdWUgb24gdGhlIHJlYWwgYXhpc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2Zmc2V0ID0gMiAqICsoYS5pbSA8IDApICsgMTsgLy8gY29tcGxleCB2YWx1ZSBvbiB0aGUgaW1hZ2luYXJ5IGF4aXNcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgYXJnID0gYS5hcmcoKTtcbiAgICB2YXIgYWJzID0gYS5hYnMoKTtcbiAgICB2YXIgcm9vdHMgPSBbXTtcbiAgICB2YXIgciA9IE1hdGgucG93KGFicywgMSAvIHJvb3QpO1xuXG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCByb290OyBrKyspIHtcbiAgICAgIHZhciBoYWxmUGlGYWN0b3IgPSAob2Zmc2V0ICsgNCAqIGspIC8gcm9vdDtcbiAgICAgIC8qKlxuICAgICAgICogSWYgKG9mZnNldCArIDQqaykvcm9vdCBpcyBhbiBpbnRlZ3JhbCBtdWx0aXBsZSBvZiBwaS8yXG4gICAgICAgKiB0aGVuIHdlIGNhbiBwcm9kdWNlIGEgbW9yZSBleGFjdCByZXN1bHQuXG4gICAgICAgKi9cblxuICAgICAgaWYgKGhhbGZQaUZhY3RvciA9PT0gTWF0aC5yb3VuZChoYWxmUGlGYWN0b3IpKSB7XG4gICAgICAgIHJvb3RzLnB1c2goX2NhbGN1bGF0ZUV4YWN0UmVzdWx0W2hhbGZQaUZhY3RvciAlIDRdKHIpKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHJvb3RzLnB1c2gobmV3IENvbXBsZXgoe1xuICAgICAgICByOiByLFxuICAgICAgICBwaGk6IChhcmcgKyAyICogTWF0aC5QSSAqIGspIC8gcm9vdFxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIHJldHVybiByb290cztcbiAgfVxuXG4gIHJldHVybiBudGhSb290cztcbn0pO1xuZXhwb3J0cy5jcmVhdGVOdGhSb290cyA9IGNyZWF0ZU50aFJvb3RzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVQb3cgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfbnVtYmVyMiA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ3Bvdyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnaWRlbnRpdHknLCAnbXVsdGlwbHknLCAnbWF0cml4JywgJ2ZyYWN0aW9uJywgJ251bWJlcicsICdDb21wbGV4J107XG52YXIgY3JlYXRlUG93ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgaWRlbnRpdHkgPSBfcmVmLmlkZW50aXR5LFxuICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5LFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBudW1iZXIgPSBfcmVmLm51bWJlcixcbiAgICAgIGZyYWN0aW9uID0gX3JlZi5mcmFjdGlvbixcbiAgICAgIENvbXBsZXggPSBfcmVmLkNvbXBsZXg7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIHBvd2VyIG9mIHggdG8geSwgYHggXiB5YC5cbiAgICogTWF0cml4IGV4cG9uZW50aWF0aW9uIGlzIHN1cHBvcnRlZCBmb3Igc3F1YXJlIG1hdHJpY2VzIGB4YCwgYW5kIHBvc2l0aXZlXG4gICAqIGludGVnZXIgZXhwb25lbnRzIGB5YC5cbiAgICpcbiAgICogRm9yIGN1YmljIHJvb3RzIG9mIG5lZ2F0aXZlIG51bWJlcnMsIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBwcmluY2lwYWxcbiAgICogcm9vdCBieSBkZWZhdWx0LiBJbiBvcmRlciB0byBsZXQgdGhlIGZ1bmN0aW9uIHJldHVybiB0aGUgcmVhbCByb290LFxuICAgKiBtYXRoLmpzIGNhbiBiZSBjb25maWd1cmVkIHdpdGggYG1hdGguY29uZmlnKHtwcmVkaWN0YWJsZTogdHJ1ZX0pYC5cbiAgICogVG8gcmV0cmlldmUgYWxsIGN1YmljIHJvb3RzIG9mIGEgdmFsdWUsIHVzZSBgbWF0aC5jYnJ0KHgsIHRydWUpYC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnBvdyh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5wb3coMiwgMykgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA4XG4gICAqXG4gICAqICAgIGNvbnN0IGEgPSBtYXRoLmNvbXBsZXgoMiwgMylcbiAgICogICAgbWF0aC5wb3coYSwgMikgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IC01ICsgMTJpXG4gICAqXG4gICAqICAgIGNvbnN0IGIgPSBbWzEsIDJdLCBbNCwgM11dXG4gICAqICAgIG1hdGgucG93KGIsIDIpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBBcnJheSBbWzksIDhdLCBbMTYsIDE3XV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIG11bHRpcGx5LCBzcXJ0LCBjYnJ0LCBudGhSb290XG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggIFRoZSBiYXNlXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXh9IHkgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBleHBvbmVudFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IFRoZSB2YWx1ZSBvZiBgeGAgdG8gdGhlIHBvd2VyIGB5YFxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfcG93LFxuICAgICdDb21wbGV4LCBDb21wbGV4JzogZnVuY3Rpb24gQ29tcGxleENvbXBsZXgoeCwgeSkge1xuICAgICAgcmV0dXJuIHgucG93KHkpO1xuICAgIH0sXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQmlnTnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIGlmICh5LmlzSW50ZWdlcigpIHx8IHggPj0gMCB8fCBjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIHgucG93KHkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgudG9OdW1iZXIoKSwgMCkucG93KHkudG9OdW1iZXIoKSwgMCk7XG4gICAgICB9XG4gICAgfSxcbiAgICAnRnJhY3Rpb24sIEZyYWN0aW9uJzogZnVuY3Rpb24gRnJhY3Rpb25GcmFjdGlvbih4LCB5KSB7XG4gICAgICBpZiAoeS5kICE9PSAxKSB7XG4gICAgICAgIGlmIChjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Z1bmN0aW9uIHBvdyBkb2VzIG5vdCBzdXBwb3J0IG5vbi1pbnRlZ2VyIGV4cG9uZW50cyBmb3IgZnJhY3Rpb25zLicpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBfcG93KHgudmFsdWVPZigpLCB5LnZhbHVlT2YoKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB4LnBvdyh5KTtcbiAgICAgIH1cbiAgICB9LFxuICAgICdBcnJheSwgbnVtYmVyJzogX3Bvd0FycmF5LFxuICAgICdBcnJheSwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQXJyYXlCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIF9wb3dBcnJheSh4LCB5LnRvTnVtYmVyKCkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgbnVtYmVyJzogX3Bvd01hdHJpeCxcbiAgICAnTWF0cml4LCBCaWdOdW1iZXInOiBmdW5jdGlvbiBNYXRyaXhCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIF9wb3dNYXRyaXgoeCwgeS50b051bWJlcigpKTtcbiAgICB9LFxuICAgICdVbml0LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBVbml0TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiB4LnBvdyh5KTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgcG93ZXIgb2YgeCB0byB5LCB4XnksIGZvciB0d28gbnVtYmVycy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHlcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQ29tcGxleH0gcmVzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9wb3coeCwgeSkge1xuICAgIC8vIEFsdGVybmF0aXZlbHkgY291bGQgZGVmaW5lIGEgJ3JlYWxtb2RlJyBjb25maWcgb3B0aW9uIG9yIHNvbWV0aGluZywgYnV0XG4gICAgLy8gJ3ByZWRpY3RhYmxlJyB3aWxsIHdvcmsgZm9yIG5vd1xuICAgIGlmIChjb25maWcucHJlZGljdGFibGUgJiYgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoeSkgJiYgeCA8IDApIHtcbiAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB5IGNhbiBiZSByZXByZXNlbnRlZCBhcyBhIGZyYWN0aW9uXG4gICAgICB0cnkge1xuICAgICAgICB2YXIgeUZyYWMgPSBmcmFjdGlvbih5KTtcbiAgICAgICAgdmFyIHlOdW0gPSBudW1iZXIoeUZyYWMpO1xuXG4gICAgICAgIGlmICh5ID09PSB5TnVtIHx8IE1hdGguYWJzKCh5IC0geU51bSkgLyB5KSA8IDFlLTE0KSB7XG4gICAgICAgICAgaWYgKHlGcmFjLmQgJSAyID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gKHlGcmFjLm4gJSAyID09PSAwID8gMSA6IC0xKSAqIE1hdGgucG93KC14LCB5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGV4KSB7fSAvLyBmcmFjdGlvbigpIHRocm93cyBhbiBlcnJvciBpZiB5IGlzIEluZmluaXR5LCBldGMuXG4gICAgICAvLyBVbmFibGUgdG8gZXhwcmVzcyB5IGFzIGEgZnJhY3Rpb24sIHNvIGNvbnRpbnVlIG9uXG5cbiAgICB9IC8vICoqZm9yIHByZWRpY3RhYmxlIG1vZGUqKiB4XkluZmluaXR5ID09PSBOYU4gaWYgeCA8IC0xXG4gICAgLy8gTi5CLiB0aGlzIGJlaGF2b3VyIGlzIGRpZmZlcmVudCBmcm9tIGBNYXRoLnBvd2Agd2hpY2ggZ2l2ZXNcbiAgICAvLyAoLTIpXkluZmluaXR5ID09PSBJbmZpbml0eVxuXG5cbiAgICBpZiAoY29uZmlnLnByZWRpY3RhYmxlICYmICh4IDwgLTEgJiYgeSA9PT0gSW5maW5pdHkgfHwgeCA+IC0xICYmIHggPCAwICYmIHkgPT09IC1JbmZpbml0eSkpIHtcbiAgICAgIHJldHVybiBOYU47XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfbnVtYmVyLmlzSW50ZWdlcikoeSkgfHwgeCA+PSAwIHx8IGNvbmZpZy5wcmVkaWN0YWJsZSkge1xuICAgICAgcmV0dXJuICgwLCBfbnVtYmVyMi5wb3dOdW1iZXIpKHgsIHkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUT0RPOiB0aGUgZm9sbG93aW5nIGluZmluaXR5IGNoZWNrcyBhcmUgZHVwbGljYXRlZCBmcm9tIHBvd051bWJlci4gRGVkdXBsaWNhdGUgdGhpcyBzb21laG93XG4gICAgICAvLyB4XkluZmluaXR5ID09PSAwIGlmIC0xIDwgeCA8IDFcbiAgICAgIC8vIEEgcmVhbCBudW1iZXIgMCBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mIGNvbXBsZXgoMClcbiAgICAgIGlmICh4ICogeCA8IDEgJiYgeSA9PT0gSW5maW5pdHkgfHwgeCAqIHggPiAxICYmIHkgPT09IC1JbmZpbml0eSkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgsIDApLnBvdyh5LCAwKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgcG93ZXIgb2YgYSAyZCBhcnJheVxuICAgKiBAcGFyYW0ge0FycmF5fSB4ICAgICBtdXN0IGJlIGEgMiBkaW1lbnNpb25hbCwgc3F1YXJlIG1hdHJpeFxuICAgKiBAcGFyYW0ge251bWJlcn0geSAgICBhIHBvc2l0aXZlLCBpbnRlZ2VyIHZhbHVlXG4gICAqIEByZXR1cm5zIHtBcnJheX1cbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBfcG93QXJyYXkoeCwgeSkge1xuICAgIGlmICghKDAsIF9udW1iZXIuaXNJbnRlZ2VyKSh5KSB8fCB5IDwgMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRm9yIEFeYiwgYiBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciAodmFsdWUgaXMgJyArIHkgKyAnKScpO1xuICAgIH0gLy8gdmVyaWZ5IHRoYXQgQSBpcyBhIDIgZGltZW5zaW9uYWwgc3F1YXJlIG1hdHJpeFxuXG5cbiAgICB2YXIgcyA9ICgwLCBfYXJyYXkuYXJyYXlTaXplKSh4KTtcblxuICAgIGlmIChzLmxlbmd0aCAhPT0gMikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGb3IgQV5iLCBBIG11c3QgYmUgMiBkaW1lbnNpb25hbCAoQSBoYXMgJyArIHMubGVuZ3RoICsgJyBkaW1lbnNpb25zKScpO1xuICAgIH1cblxuICAgIGlmIChzWzBdICE9PSBzWzFdKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvciBBXmIsIEEgbXVzdCBiZSBzcXVhcmUgKHNpemUgaXMgJyArIHNbMF0gKyAneCcgKyBzWzFdICsgJyknKTtcbiAgICB9XG5cbiAgICB2YXIgcmVzID0gaWRlbnRpdHkoc1swXSkudmFsdWVPZigpO1xuICAgIHZhciBweCA9IHg7XG5cbiAgICB3aGlsZSAoeSA+PSAxKSB7XG4gICAgICBpZiAoKHkgJiAxKSA9PT0gMSkge1xuICAgICAgICByZXMgPSBtdWx0aXBseShweCwgcmVzKTtcbiAgICAgIH1cblxuICAgICAgeSA+Pj0gMTtcbiAgICAgIHB4ID0gbXVsdGlwbHkocHgsIHB4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIHBvd2VyIG9mIGEgMmQgbWF0cml4XG4gICAqIEBwYXJhbSB7TWF0cml4fSB4ICAgICBtdXN0IGJlIGEgMiBkaW1lbnNpb25hbCwgc3F1YXJlIG1hdHJpeFxuICAgKiBAcGFyYW0ge251bWJlcn0geSAgICBhIHBvc2l0aXZlLCBpbnRlZ2VyIHZhbHVlXG4gICAqIEByZXR1cm5zIHtNYXRyaXh9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX3Bvd01hdHJpeCh4LCB5KSB7XG4gICAgcmV0dXJuIG1hdHJpeChfcG93QXJyYXkoeC52YWx1ZU9mKCksIHkpKTtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZVBvdyA9IGNyZWF0ZVBvdzsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUm91bmROdW1iZXIgPSBleHBvcnRzLmNyZWF0ZVJvdW5kID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTFcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMlwiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgX251bWJlcjIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxudmFyIE5PX0lOVCA9ICdOdW1iZXIgb2YgZGVjaW1hbHMgaW4gZnVuY3Rpb24gcm91bmQgbXVzdCBiZSBhbiBpbnRlZ2VyJztcbnZhciBuYW1lID0gJ3JvdW5kJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdlcXVhbFNjYWxhcicsICd6ZXJvcycsICdCaWdOdW1iZXInLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVSb3VuZCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIHplcm9zID0gX3JlZi56ZXJvcyxcbiAgICAgIEJpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMTEgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0xMSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMiA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0xMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xNCkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgLyoqXG4gICAqIFJvdW5kIGEgdmFsdWUgdG93YXJkcyB0aGUgbmVhcmVzdCBpbnRlZ2VyLlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgucm91bmQoeClcbiAgICogICAgbWF0aC5yb3VuZCh4LCBuKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5yb3VuZCgzLjIpICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAzXG4gICAqICAgIG1hdGgucm91bmQoMy44KSAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgNFxuICAgKiAgICBtYXRoLnJvdW5kKC00LjIpICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIC00XG4gICAqICAgIG1hdGgucm91bmQoLTQuNykgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgLTVcbiAgICogICAgbWF0aC5yb3VuZChtYXRoLnBpLCAzKSAgICAgICAvLyByZXR1cm5zIG51bWJlciAzLjE0MlxuICAgKiAgICBtYXRoLnJvdW5kKDEyMy40NTY3OCwgMikgICAgIC8vIHJldHVybnMgbnVtYmVyIDEyMy40NlxuICAgKlxuICAgKiAgICBjb25zdCBjID0gbWF0aC5jb21wbGV4KDMuMiwgLTIuNylcbiAgICogICAgbWF0aC5yb3VuZChjKSAgICAgICAgICAgICAgICAvLyByZXR1cm5zIENvbXBsZXggMyAtIDNpXG4gICAqXG4gICAqICAgIG1hdGgucm91bmQoWzMuMiwgMy44LCAtNC43XSkgLy8gcmV0dXJucyBBcnJheSBbMywgNCwgLTVdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjZWlsLCBmaXgsIGZsb29yXG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4ICBOdW1iZXIgdG8gYmUgcm91bmRlZFxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheX0gW249MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIGRlY2ltYWxzXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBSb3VuZGVkIHZhbHVlXG4gICAqL1xuXG4gIHZhciByb3VuZCA9IHR5cGVkKG5hbWUsIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcm91bmROdW1iZXJTaWduYXR1cmVzKSwge30sIHtcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LnJvdW5kKCk7XG4gICAgfSxcbiAgICAnQ29tcGxleCwgbnVtYmVyJzogZnVuY3Rpb24gQ29tcGxleE51bWJlcih4LCBuKSB7XG4gICAgICBpZiAobiAlIDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihOT19JTlQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4geC5yb3VuZChuKTtcbiAgICB9LFxuICAgICdDb21wbGV4LCBCaWdOdW1iZXInOiBmdW5jdGlvbiBDb21wbGV4QmlnTnVtYmVyKHgsIG4pIHtcbiAgICAgIGlmICghbi5pc0ludGVnZXIoKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKE5PX0lOVCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBfbiA9IG4udG9OdW1iZXIoKTtcblxuICAgICAgcmV0dXJuIHgucm91bmQoX24pO1xuICAgIH0sXG4gICAgJ251bWJlciwgQmlnTnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyKHgsIG4pIHtcbiAgICAgIGlmICghbi5pc0ludGVnZXIoKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKE5PX0lOVCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKHgpLnRvRGVjaW1hbFBsYWNlcyhuLnRvTnVtYmVyKCkpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHgudG9EZWNpbWFsUGxhY2VzKDApO1xuICAgIH0sXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQmlnTnVtYmVyQmlnTnVtYmVyKHgsIG4pIHtcbiAgICAgIGlmICghbi5pc0ludGVnZXIoKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKE5PX0lOVCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB4LnRvRGVjaW1hbFBsYWNlcyhuLnRvTnVtYmVyKCkpO1xuICAgIH0sXG4gICAgRnJhY3Rpb246IGZ1bmN0aW9uIEZyYWN0aW9uKHgpIHtcbiAgICAgIHJldHVybiB4LnJvdW5kKCk7XG4gICAgfSxcbiAgICAnRnJhY3Rpb24sIG51bWJlcic6IGZ1bmN0aW9uIEZyYWN0aW9uTnVtYmVyKHgsIG4pIHtcbiAgICAgIGlmIChuICUgMSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKE5PX0lOVCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB4LnJvdW5kKG4pO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSByb3VuZCgwKSA9IDBcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgcm91bmQsIHRydWUpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gU3BhcnNlTWF0cml4TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMSh4LCB5LCByb3VuZCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBEZW5zZU1hdHJpeE51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgcm91bmQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBDb21wbGV4IHwgQmlnTnVtYmVyLCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBudW1iZXJDb21wbGV4QmlnTnVtYmVyU3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhciBpcyB6ZXJvXG4gICAgICBpZiAoZXF1YWxTY2FsYXIoeCwgMCkpIHtcbiAgICAgICAgLy8gZG8gbm90IGV4ZWN1dGUgYWxnb3JpdGhtLCByZXN1bHQgd2lsbCBiZSBhIHplcm8gbWF0cml4XG4gICAgICAgIHJldHVybiB6ZXJvcyh5LnNpemUoKSwgeS5zdG9yYWdlKCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeSwgeCwgcm91bmQsIHRydWUpO1xuICAgIH0sXG4gICAgJ251bWJlciB8IENvbXBsZXggfCBCaWdOdW1iZXIsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gbnVtYmVyQ29tcGxleEJpZ051bWJlckRlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhciBpcyB6ZXJvXG4gICAgICBpZiAoZXF1YWxTY2FsYXIoeCwgMCkpIHtcbiAgICAgICAgLy8gZG8gbm90IGV4ZWN1dGUgYWxnb3JpdGhtLCByZXN1bHQgd2lsbCBiZSBhIHplcm8gbWF0cml4XG4gICAgICAgIHJldHVybiB6ZXJvcyh5LnNpemUoKSwgeS5zdG9yYWdlKCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgcm91bmQsIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBBcnJheU51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCByb3VuZCwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBDb21wbGV4IHwgQmlnTnVtYmVyLCBBcnJheSc6IGZ1bmN0aW9uIG51bWJlckNvbXBsZXhCaWdOdW1iZXJBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCByb3VuZCwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH1cbiAgfSkpO1xuICByZXR1cm4gcm91bmQ7XG59KTtcbmV4cG9ydHMuY3JlYXRlUm91bmQgPSBjcmVhdGVSb3VuZDtcbnZhciByb3VuZE51bWJlclNpZ25hdHVyZXMgPSB7XG4gIG51bWJlcjogX251bWJlcjIucm91bmROdW1iZXIsXG4gICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcih4LCBuKSB7XG4gICAgaWYgKCEoMCwgX251bWJlci5pc0ludGVnZXIpKG4pKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKE5PX0lOVCk7XG4gICAgfVxuXG4gICAgaWYgKG4gPCAwIHx8IG4gPiAxNSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdOdW1iZXIgb2YgZGVjaW1hbHMgaW4gZnVuY3Rpb24gcm91bmQgbXVzdCBiZSBpbiB0ZSByYW5nZSBvZiAwLTE1Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuICgwLCBfbnVtYmVyMi5yb3VuZE51bWJlcikoeCwgbik7XG4gIH1cbn07XG52YXIgY3JlYXRlUm91bmROdW1iZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgWyd0eXBlZCddLCBmdW5jdGlvbiAoX3JlZjIpIHtcbiAgdmFyIHR5cGVkID0gX3JlZjIudHlwZWQ7XG4gIHJldHVybiB0eXBlZChuYW1lLCByb3VuZE51bWJlclNpZ25hdHVyZXMpO1xufSk7XG5leHBvcnRzLmNyZWF0ZVJvdW5kTnVtYmVyID0gY3JlYXRlUm91bmROdW1iZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNpZ24gPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdzaWduJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ0JpZ051bWJlcicsICdGcmFjdGlvbicsICdjb21wbGV4J107XG52YXIgY3JlYXRlU2lnbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBfQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXIsXG4gICAgICBjb21wbGV4ID0gX3JlZi5jb21wbGV4LFxuICAgICAgX0ZyYWN0aW9uID0gX3JlZi5GcmFjdGlvbjtcblxuICAvKipcbiAgICogQ29tcHV0ZSB0aGUgc2lnbiBvZiBhIHZhbHVlLiBUaGUgc2lnbiBvZiBhIHZhbHVlIHggaXM6XG4gICAqXG4gICAqIC0gIDEgd2hlbiB4ID4gMFxuICAgKiAtIC0xIHdoZW4geCA8IDBcbiAgICogLSAgMCB3aGVuIHggPT0gMFxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguc2lnbih4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5zaWduKDMuNSkgICAgICAgICAgICAgICAvLyByZXR1cm5zIDFcbiAgICogICAgbWF0aC5zaWduKC00LjIpICAgICAgICAgICAgICAvLyByZXR1cm5zIC0xXG4gICAqICAgIG1hdGguc2lnbigwKSAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAwXG4gICAqXG4gICAqICAgIG1hdGguc2lnbihbMywgNSwgLTIsIDAsIDJdKSAgLy8gcmV0dXJucyBbMSwgMSwgLTEsIDAsIDFdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBhYnNcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXggfCBVbml0fSB4XG4gICAqICAgICAgICAgICAgVGhlIG51bWJlciBmb3Igd2hpY2ggdG8gZGV0ZXJtaW5lIHRoZSBzaWduXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4IHwgVW5pdH1lXG4gICAqICAgICAgICAgICAgVGhlIHNpZ24gb2YgYHhgXG4gICAqL1xuICB2YXIgc2lnbiA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IF9udW1iZXIuc2lnbk51bWJlcixcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmltID09PSAwID8gY29tcGxleCgoMCwgX251bWJlci5zaWduTnVtYmVyKSh4LnJlKSkgOiB4LnNpZ24oKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiBuZXcgX0JpZ051bWJlcih4LmNtcCgwKSk7XG4gICAgfSxcbiAgICBGcmFjdGlvbjogZnVuY3Rpb24gRnJhY3Rpb24oeCkge1xuICAgICAgcmV0dXJuIG5ldyBfRnJhY3Rpb24oeC5zLCAxKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIC8vIGRlZXAgbWFwIGNvbGxlY3Rpb24sIHNraXAgemVyb3Mgc2luY2Ugc2lnbigwKSA9IDBcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgc2lnbiwgdHJ1ZSk7XG4gICAgfSxcbiAgICBVbml0OiBmdW5jdGlvbiBVbml0KHgpIHtcbiAgICAgIHJldHVybiBzaWduKHgudmFsdWUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBzaWduO1xufSk7XG5leHBvcnRzLmNyZWF0ZVNpZ24gPSBjcmVhdGVTaWduOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTcXJ0ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBuYW1lID0gJ3NxcnQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnY29uZmlnJywgJ3R5cGVkJywgJ0NvbXBsZXgnXTtcbnZhciBjcmVhdGVTcXJ0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgQ29tcGxleCA9IF9yZWYuQ29tcGxleDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBzcXVhcmUgcm9vdCBvZiBhIHZhbHVlLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguc3FydCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5zcXJ0KDI1KSAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDVcbiAgICogICAgbWF0aC5zcXVhcmUoNSkgICAgICAgICAgICAgICAvLyByZXR1cm5zIDI1XG4gICAqICAgIG1hdGguc3FydCgtNCkgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDJpXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBzcXVhcmUsIG11bHRpcGx5LCBjdWJlLCBjYnJ0LCBzcXJ0bVxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeCB8IFVuaXR9IHhcbiAgICogICAgICAgICAgICBWYWx1ZSBmb3Igd2hpY2ggdG8gY2FsY3VsYXRlIHRoZSBzcXVhcmUgcm9vdC5cbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4IHwgVW5pdH1cbiAgICogICAgICAgICAgICBSZXR1cm5zIHRoZSBzcXVhcmUgcm9vdCBvZiBgeGBcbiAgICovXG4gIHZhciBzcXJ0ID0gdHlwZWQoJ3NxcnQnLCB7XG4gICAgbnVtYmVyOiBfc3FydE51bWJlcixcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LnNxcnQoKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIGlmICgheC5pc05lZ2F0aXZlKCkgfHwgY29uZmlnLnByZWRpY3RhYmxlKSB7XG4gICAgICAgIHJldHVybiB4LnNxcnQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG5lZ2F0aXZlIHZhbHVlIC0+IGRvd25ncmFkZSB0byBudW1iZXIgdG8gZG8gY29tcGxleCB2YWx1ZSBjb21wdXRhdGlvblxuICAgICAgICByZXR1cm4gX3NxcnROdW1iZXIoeC50b051bWJlcigpKTtcbiAgICAgIH1cbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIC8vIGRlZXAgbWFwIGNvbGxlY3Rpb24sIHNraXAgemVyb3Mgc2luY2Ugc3FydCgwKSA9IDBcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgc3FydCwgdHJ1ZSk7XG4gICAgfSxcbiAgICBVbml0OiBmdW5jdGlvbiBVbml0KHgpIHtcbiAgICAgIC8vIFNvbWVkYXkgd2lsbCB3b3JrIGZvciBjb21wbGV4IHVuaXRzIHdoZW4gdGhleSBhcmUgaW1wbGVtZW50ZWRcbiAgICAgIHJldHVybiB4LnBvdygwLjUpO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgc3FydCBmb3IgYSBudW1iZXJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHhcbiAgICogQHJldHVybnMge251bWJlciB8IENvbXBsZXh9IFJldHVybnMgdGhlIHNxdWFyZSByb290IG9mIHhcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgZnVuY3Rpb24gX3NxcnROdW1iZXIoeCkge1xuICAgIGlmIChpc05hTih4KSkge1xuICAgICAgcmV0dXJuIE5hTjtcbiAgICB9IGVsc2UgaWYgKHggPj0gMCB8fCBjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgIHJldHVybiBNYXRoLnNxcnQoeCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgQ29tcGxleCh4LCAwKS5zcXJ0KCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHNxcnQ7XG59KTtcbmV4cG9ydHMuY3JlYXRlU3FydCA9IGNyZWF0ZVNxcnQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNxdWFyZSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ3NxdWFyZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZVNxdWFyZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIHNxdWFyZSBvZiBhIHZhbHVlLCBgeCAqIHhgLlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguc3F1YXJlKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnNxdWFyZSgyKSAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgNFxuICAgKiAgICBtYXRoLnNxdWFyZSgzKSAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgOVxuICAgKiAgICBtYXRoLnBvdygzLCAyKSAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgOVxuICAgKiAgICBtYXRoLm11bHRpcGx5KDMsIDMpICAgICAgLy8gcmV0dXJucyBudW1iZXIgOVxuICAgKlxuICAgKiAgICBtYXRoLnNxdWFyZShbMSwgMiwgMywgNF0pICAvLyByZXR1cm5zIEFycmF5IFsxLCA0LCA5LCAxNl1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIG11bHRpcGx5LCBjdWJlLCBzcXJ0LCBwb3dcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXggfCBVbml0fSB4XG4gICAqICAgICAgICAgICAgTnVtYmVyIGZvciB3aGljaCB0byBjYWxjdWxhdGUgdGhlIHNxdWFyZVxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeCB8IFVuaXR9XG4gICAqICAgICAgICAgICAgU3F1YXJlZCB2YWx1ZVxuICAgKi9cbiAgdmFyIHNxdWFyZSA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IF9udW1iZXIuc3F1YXJlTnVtYmVyLFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHgubXVsKHgpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHgudGltZXMoeCk7XG4gICAgfSxcbiAgICBGcmFjdGlvbjogZnVuY3Rpb24gRnJhY3Rpb24oeCkge1xuICAgICAgcmV0dXJuIHgubXVsKHgpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSBzcXVhcmUoMCkgPSAwXG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIHNxdWFyZSwgdHJ1ZSk7XG4gICAgfSxcbiAgICBVbml0OiBmdW5jdGlvbiBVbml0KHgpIHtcbiAgICAgIHJldHVybiB4LnBvdygyKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gc3F1YXJlO1xufSk7XG5leHBvcnRzLmNyZWF0ZVNxdWFyZSA9IGNyZWF0ZVNxdWFyZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3VidHJhY3QgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX0RpbWVuc2lvbkVycm9yID0gcmVxdWlyZShcIi4uLy4uL2Vycm9yL0RpbWVuc2lvbkVycm9yXCIpO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wMVwiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAzXCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDVcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMFwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgX2FsZ29yaXRobTYgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBuYW1lID0gJ3N1YnRyYWN0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdlcXVhbFNjYWxhcicsICdhZGRTY2FsYXInLCAndW5hcnlNaW51cycsICdEZW5zZU1hdHJpeCddO1xudmFyIGNyZWF0ZVN1YnRyYWN0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLFxuICAgICAgYWRkU2NhbGFyID0gX3JlZi5hZGRTY2FsYXIsXG4gICAgICB1bmFyeU1pbnVzID0gX3JlZi51bmFyeU1pbnVzLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICAvLyBUT0RPOiBzcGxpdCBmdW5jdGlvbiBzdWJ0cmFjdCBpbiB0d286IHN1YnRyYWN0IGFuZCBzdWJ0cmFjdFNjYWxhclxuICB2YXIgYWxnb3JpdGhtMDEgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMSkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTAzID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTAzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMDUgPSAoMCwgX2FsZ29yaXRobTMuY3JlYXRlQWxnb3JpdGhtMDUpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTAgPSAoMCwgX2FsZ29yaXRobTQuY3JlYXRlQWxnb3JpdGhtMTApKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4XG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTMgPSAoMCwgX2FsZ29yaXRobTUuY3JlYXRlQWxnb3JpdGhtMTMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtNi5jcmVhdGVBbGdvcml0aG0xNCkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgLyoqXG4gICAqIFN1YnRyYWN0IHR3byB2YWx1ZXMsIGB4IC0geWAuXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5zdWJ0cmFjdCh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5zdWJ0cmFjdCg1LjMsIDIpICAgICAgICAvLyByZXR1cm5zIG51bWJlciAzLjNcbiAgICpcbiAgICogICAgY29uc3QgYSA9IG1hdGguY29tcGxleCgyLCAzKVxuICAgKiAgICBjb25zdCBiID0gbWF0aC5jb21wbGV4KDQsIDEpXG4gICAqICAgIG1hdGguc3VidHJhY3QoYSwgYikgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IC0yICsgMmlcbiAgICpcbiAgICogICAgbWF0aC5zdWJ0cmFjdChbNSwgNywgNF0sIDQpICAvLyByZXR1cm5zIEFycmF5IFsxLCAzLCAwXVxuICAgKlxuICAgKiAgICBjb25zdCBjID0gbWF0aC51bml0KCcyLjEga20nKVxuICAgKiAgICBjb25zdCBkID0gbWF0aC51bml0KCc1MDBtJylcbiAgICogICAgbWF0aC5zdWJ0cmFjdChjLCBkKSAgICAgICAgICAvLyByZXR1cm5zIFVuaXQgMS42IGttXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBhZGRcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4XG4gICAqICAgICAgICAgICAgSW5pdGlhbCB2YWx1ZVxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHlcbiAgICogICAgICAgICAgICBWYWx1ZSB0byBzdWJ0cmFjdCBmcm9tIGB4YFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9XG4gICAqICAgICAgICAgICAgU3VidHJhY3Rpb24gb2YgYHhgIGFuZCBgeWBcbiAgICovXG5cbiAgdmFyIHN1YnRyYWN0ID0gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geCAtIHk7XG4gICAgfSxcbiAgICAnQ29tcGxleCwgQ29tcGxleCc6IGZ1bmN0aW9uIENvbXBsZXhDb21wbGV4KHgsIHkpIHtcbiAgICAgIHJldHVybiB4LnN1Yih5KTtcbiAgICB9LFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IGZ1bmN0aW9uIEJpZ051bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geC5taW51cyh5KTtcbiAgICB9LFxuICAgICdGcmFjdGlvbiwgRnJhY3Rpb24nOiBmdW5jdGlvbiBGcmFjdGlvbkZyYWN0aW9uKHgsIHkpIHtcbiAgICAgIHJldHVybiB4LnN1Yih5KTtcbiAgICB9LFxuICAgICdVbml0LCBVbml0JzogZnVuY3Rpb24gVW5pdFVuaXQoeCwgeSkge1xuICAgICAgaWYgKHgudmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJhbWV0ZXIgeCBjb250YWlucyBhIHVuaXQgd2l0aCB1bmRlZmluZWQgdmFsdWUnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHkudmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJhbWV0ZXIgeSBjb250YWlucyBhIHVuaXQgd2l0aCB1bmRlZmluZWQgdmFsdWUnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF4LmVxdWFsQmFzZSh5KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuaXRzIGRvIG5vdCBtYXRjaCcpO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVzID0geC5jbG9uZSgpO1xuICAgICAgcmVzLnZhbHVlID0gc3VidHJhY3QocmVzLnZhbHVlLCB5LnZhbHVlKTtcbiAgICAgIHJlcy5maXhQcmVmaXggPSBmYWxzZTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgY2hlY2tFcXVhbERpbWVuc2lvbnMoeCwgeSk7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDUoeCwgeSwgc3VidHJhY3QpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICBjaGVja0VxdWFsRGltZW5zaW9ucyh4LCB5KTtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh5LCB4LCBzdWJ0cmFjdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIGNoZWNrRXF1YWxEaW1lbnNpb25zKHgsIHkpO1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAxKHgsIHksIHN1YnRyYWN0LCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICBjaGVja0VxdWFsRGltZW5zaW9ucyh4LCB5KTtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBzdWJ0cmFjdCk7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gc3VidHJhY3QobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHN1YnRyYWN0KG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBzdWJ0cmFjdCh4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMCh4LCB1bmFyeU1pbnVzKHkpLCBhZGRTY2FsYXIpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBEZW5zZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgc3VidHJhY3QpO1xuICAgIH0sXG4gICAgJ2FueSwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gYW55U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMCh5LCB4LCBzdWJ0cmFjdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnYW55LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIGFueURlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCBzdWJ0cmFjdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIGFueSc6IGZ1bmN0aW9uIEFycmF5QW55KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeCksIHksIHN1YnRyYWN0LCBmYWxzZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ2FueSwgQXJyYXknOiBmdW5jdGlvbiBhbnlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCBzdWJ0cmFjdCwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBzdWJ0cmFjdDtcbn0pO1xuLyoqXG4gKiBDaGVjayB3aGV0aGVyIG1hdHJpeCB4IGFuZCB5IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGRpbWVuc2lvbnMuXG4gKiBUaHJvd3MgYSBEaW1lbnNpb25FcnJvciB3aGVuIGRpbWVuc2lvbnMgYXJlIG5vdCBlcXVhbFxuICogQHBhcmFtIHtNYXRyaXh9IHhcbiAqIEBwYXJhbSB7TWF0cml4fSB5XG4gKi9cblxuZXhwb3J0cy5jcmVhdGVTdWJ0cmFjdCA9IGNyZWF0ZVN1YnRyYWN0O1xuXG5mdW5jdGlvbiBjaGVja0VxdWFsRGltZW5zaW9ucyh4LCB5KSB7XG4gIHZhciB4c2l6ZSA9IHguc2l6ZSgpO1xuICB2YXIgeXNpemUgPSB5LnNpemUoKTtcblxuICBpZiAoeHNpemUubGVuZ3RoICE9PSB5c2l6ZS5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKHhzaXplLmxlbmd0aCwgeXNpemUubGVuZ3RoKTtcbiAgfVxufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVVbmFyeU1pbnVzID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAndW5hcnlNaW51cyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZVVuYXJ5TWludXMgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBJbnZlcnNlIHRoZSBzaWduIG9mIGEgdmFsdWUsIGFwcGx5IGEgdW5hcnkgbWludXMgb3BlcmF0aW9uLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLiBCb29sZWFuIHZhbHVlcyBhbmRcbiAgICogc3RyaW5ncyB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIG51bWJlci4gRm9yIGNvbXBsZXggbnVtYmVycywgYm90aCByZWFsIGFuZFxuICAgKiBjb21wbGV4IHZhbHVlIGFyZSBpbnZlcnRlZC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnVuYXJ5TWludXMoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgudW5hcnlNaW51cygzLjUpICAgICAgLy8gcmV0dXJucyAtMy41XG4gICAqICAgIG1hdGgudW5hcnlNaW51cygtNC4yKSAgICAgLy8gcmV0dXJucyA0LjJcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGFkZCwgc3VidHJhY3QsIHVuYXJ5UGx1c1xuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggTnVtYmVyIHRvIGJlIGludmVydGVkLlxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IFJldHVybnMgdGhlIHZhbHVlIHdpdGggaW52ZXJ0ZWQgc2lnbi5cbiAgICovXG4gIHZhciB1bmFyeU1pbnVzID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogX251bWJlci51bmFyeU1pbnVzTnVtYmVyLFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHgubmVnKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4geC5uZWcoKTtcbiAgICB9LFxuICAgIEZyYWN0aW9uOiBmdW5jdGlvbiBGcmFjdGlvbih4KSB7XG4gICAgICByZXR1cm4geC5uZWcoKTtcbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgdmFyIHJlcyA9IHguY2xvbmUoKTtcbiAgICAgIHJlcy52YWx1ZSA9IHVuYXJ5TWludXMoeC52YWx1ZSk7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSB1bmFyeU1pbnVzKDApID0gMFxuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCB1bmFyeU1pbnVzLCB0cnVlKTtcbiAgICB9IC8vIFRPRE86IGFkZCBzdXBwb3J0IGZvciBzdHJpbmdcblxuICB9KTtcbiAgcmV0dXJuIHVuYXJ5TWludXM7XG59KTtcbmV4cG9ydHMuY3JlYXRlVW5hcnlNaW51cyA9IGNyZWF0ZVVuYXJ5TWludXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVVuYXJ5UGx1cyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ3VuYXJ5UGx1cyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnQmlnTnVtYmVyJ107XG52YXIgY3JlYXRlVW5hcnlQbHVzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXI7XG5cbiAgLyoqXG4gICAqIFVuYXJ5IHBsdXMgb3BlcmF0aW9uLlxuICAgKiBCb29sZWFuIHZhbHVlcyBhbmQgc3RyaW5ncyB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIG51bWJlciwgbnVtZXJpYyB2YWx1ZXMgd2lsbCBiZSByZXR1cm5lZCBhcyBpcy5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnVuYXJ5UGx1cyh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC51bmFyeVBsdXMoMy41KSAgICAgIC8vIHJldHVybnMgMy41XG4gICAqICAgIG1hdGgudW5hcnlQbHVzKDEpICAgICAvLyByZXR1cm5zIDFcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIHVuYXJ5TWludXMsIGFkZCwgc3VidHJhY3RcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBzdHJpbmcgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4XG4gICAqICAgICAgICAgICAgSW5wdXQgdmFsdWVcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fVxuICAgKiAgICAgICAgICAgIFJldHVybnMgdGhlIGlucHV0IHZhbHVlIHdoZW4gbnVtZXJpYywgY29udmVydHMgdG8gYSBudW1iZXIgd2hlbiBpbnB1dCBpcyBub24tbnVtZXJpYy5cbiAgICovXG4gIHZhciB1bmFyeVBsdXMgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLnVuYXJ5UGx1c051bWJlcixcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4OyAvLyBjb21wbGV4IG51bWJlcnMgYXJlIGltbXV0YWJsZVxuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHg7IC8vIGJpZ251bWJlcnMgYXJlIGltbXV0YWJsZVxuICAgIH0sXG4gICAgRnJhY3Rpb246IGZ1bmN0aW9uIEZyYWN0aW9uKHgpIHtcbiAgICAgIHJldHVybiB4OyAvLyBmcmFjdGlvbnMgYXJlIGltbXV0YWJsZVxuICAgIH0sXG4gICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7XG4gICAgICByZXR1cm4geC5jbG9uZSgpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSB1bmFyeVBsdXMoMCkgPSAwXG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIHVuYXJ5UGx1cywgdHJ1ZSk7XG4gICAgfSxcbiAgICAnYm9vbGVhbiB8IHN0cmluZyc6IGZ1bmN0aW9uIGJvb2xlYW5TdHJpbmcoeCkge1xuICAgICAgLy8gY29udmVydCB0byBhIG51bWJlciBvciBiaWdudW1iZXJcbiAgICAgIHJldHVybiBjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJyA/IG5ldyBCaWdOdW1iZXIoK3gpIDogK3g7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHVuYXJ5UGx1cztcbn0pO1xuZXhwb3J0cy5jcmVhdGVVbmFyeVBsdXMgPSBjcmVhdGVVbmFyeVBsdXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVhnY2QgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ3hnY2QnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ21hdHJpeCcsICdCaWdOdW1iZXInXTtcbnZhciBjcmVhdGVYZ2NkID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBCaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcjtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBleHRlbmRlZCBncmVhdGVzdCBjb21tb24gZGl2aXNvciBmb3IgdHdvIHZhbHVlcy5cbiAgICogU2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0V4dGVuZGVkX0V1Y2xpZGVhbl9hbGdvcml0aG0uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC54Z2NkKGEsIGIpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnhnY2QoOCwgMTIpICAgICAgICAgICAgIC8vIHJldHVybnMgWzQsIC0xLCAxXVxuICAgKiAgICBtYXRoLmdjZCg4LCAxMikgICAgICAgICAgICAgIC8vIHJldHVybnMgNFxuICAgKiAgICBtYXRoLnhnY2QoMzYxNjMsIDIxMTk5KSAgICAgIC8vIHJldHVybnMgWzEyNDcsIC03LCAxMl1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGdjZCwgbGNtXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyfSBhICBBbiBpbnRlZ2VyIG51bWJlclxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlcn0gYiAgQW4gaW50ZWdlciBudW1iZXJcbiAgICogQHJldHVybiB7QXJyYXl9ICAgICAgICAgICAgICBSZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgMyBpbnRlZ2VycyBgW2RpdiwgbSwgbl1gXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgYGRpdiA9IGdjZChhLCBiKWAgYW5kIGBhKm0gKyBiKm4gPSBkaXZgXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcihhLCBiKSB7XG4gICAgICB2YXIgcmVzID0gKDAsIF9udW1iZXIueGdjZE51bWJlcikoYSwgYik7XG4gICAgICByZXR1cm4gY29uZmlnLm1hdHJpeCA9PT0gJ0FycmF5JyA/IHJlcyA6IG1hdHJpeChyZXMpO1xuICAgIH0sXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogX3hnY2RCaWdOdW1iZXIgLy8gVE9ETzogaW1wbGVtZW50IHN1cHBvcnQgZm9yIEZyYWN0aW9uXG5cbiAgfSk7XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgeGdjZCBmb3IgdHdvIEJpZ051bWJlcnNcbiAgICogQHBhcmFtIHtCaWdOdW1iZXJ9IGFcbiAgICogQHBhcmFtIHtCaWdOdW1iZXJ9IGJcbiAgICogQHJldHVybiB7QmlnTnVtYmVyW119IHJlc3VsdFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfeGdjZEJpZ051bWJlcihhLCBiKSB7XG4gICAgLy8gc291cmNlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FeHRlbmRlZF9FdWNsaWRlYW5fYWxnb3JpdGhtXG4gICAgdmFyIC8vIHVzZWQgdG8gc3dhcCB0d28gdmFyaWFibGVzXG4gICAgdDtcbiAgICB2YXIgLy8gcXVvdGllbnRcbiAgICBxO1xuICAgIHZhciAvLyByZW1haW5kZXJcbiAgICByO1xuICAgIHZhciB6ZXJvID0gbmV3IEJpZ051bWJlcigwKTtcbiAgICB2YXIgb25lID0gbmV3IEJpZ051bWJlcigxKTtcbiAgICB2YXIgeCA9IHplcm87XG4gICAgdmFyIGxhc3R4ID0gb25lO1xuICAgIHZhciB5ID0gb25lO1xuICAgIHZhciBsYXN0eSA9IHplcm87XG5cbiAgICBpZiAoIWEuaXNJbnQoKSB8fCAhYi5pc0ludCgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlcnMgaW4gZnVuY3Rpb24geGdjZCBtdXN0IGJlIGludGVnZXIgbnVtYmVycycpO1xuICAgIH1cblxuICAgIHdoaWxlICghYi5pc1plcm8oKSkge1xuICAgICAgcSA9IGEuZGl2KGIpLmZsb29yKCk7XG4gICAgICByID0gYS5tb2QoYik7XG4gICAgICB0ID0geDtcbiAgICAgIHggPSBsYXN0eC5taW51cyhxLnRpbWVzKHgpKTtcbiAgICAgIGxhc3R4ID0gdDtcbiAgICAgIHQgPSB5O1xuICAgICAgeSA9IGxhc3R5Lm1pbnVzKHEudGltZXMoeSkpO1xuICAgICAgbGFzdHkgPSB0O1xuICAgICAgYSA9IGI7XG4gICAgICBiID0gcjtcbiAgICB9XG5cbiAgICB2YXIgcmVzO1xuXG4gICAgaWYgKGEubHQoemVybykpIHtcbiAgICAgIHJlcyA9IFthLm5lZygpLCBsYXN0eC5uZWcoKSwgbGFzdHkubmVnKCldO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMgPSBbYSwgIWEuaXNaZXJvKCkgPyBsYXN0eCA6IDAsIGxhc3R5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29uZmlnLm1hdHJpeCA9PT0gJ0FycmF5JyA/IHJlcyA6IG1hdHJpeChyZXMpO1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlWGdjZCA9IGNyZWF0ZVhnY2Q7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUJpdEFuZCA9IHZvaWQgMDtcblxudmFyIF9iaXR3aXNlID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2JpZ251bWJlci9iaXR3aXNlXCIpO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wMlwiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTExXCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA2XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdiaXRBbmQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2VxdWFsU2NhbGFyJ107XG52YXIgY3JlYXRlQml0QW5kID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyO1xuICB2YXIgYWxnb3JpdGhtMDIgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNiA9ICgwLCBfYWxnb3JpdGhtNS5jcmVhdGVBbGdvcml0aG0wNikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMSA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0xMSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogQml0d2lzZSBBTkQgdHdvIHZhbHVlcywgYHggJiB5YC5cbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmJpdEFuZCh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5iaXRBbmQoNTMsIDEzMSkgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAxXG4gICAqXG4gICAqICAgIG1hdGguYml0QW5kKFsxLCAxMiwgMzFdLCA0MikgICAgICAgLy8gcmV0dXJucyBBcnJheSBbMCwgOCwgMTBdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiaXROb3QsIGJpdE9yLCBiaXRYb3IsIGxlZnRTaGlmdCwgcmlnaHRBcml0aFNoaWZ0LCByaWdodExvZ1NoaWZ0XG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSB4IEZpcnN0IHZhbHVlIHRvIGFuZFxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0geSBTZWNvbmQgdmFsdWUgdG8gYW5kXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSBBTkQgb2YgYHhgIGFuZCBgeWBcbiAgICovXG5cbiAgdmFyIGJpdEFuZCA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfbnVtYmVyLmJpdEFuZE51bWJlcixcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBfYml0d2lzZS5iaXRBbmRCaWdOdW1iZXIsXG4gICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wNih4LCB5LCBiaXRBbmQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHksIHgsIGJpdEFuZCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMih4LCB5LCBiaXRBbmQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBiaXRBbmQpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGJpdEFuZChtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYml0QW5kKG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBiaXRBbmQoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeCwgeSwgYml0QW5kLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIERlbnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBiaXRBbmQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeSwgeCwgYml0QW5kLCB0cnVlKTtcbiAgICB9LFxuICAgICdhbnksIERlbnNlTWF0cml4JzogZnVuY3Rpb24gYW55RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIGJpdEFuZCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIGFueSc6IGZ1bmN0aW9uIEFycmF5QW55KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeCksIHksIGJpdEFuZCwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgYml0QW5kLCB0cnVlKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGJpdEFuZDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVCaXRBbmQgPSBjcmVhdGVCaXRBbmQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUJpdE5vdCA9IHZvaWQgMDtcblxudmFyIF9iaXR3aXNlID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2JpZ251bWJlci9iaXR3aXNlXCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnYml0Tm90JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlQml0Tm90ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogQml0d2lzZSBOT1QgdmFsdWUsIGB+eGAuXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqIEZvciB1bml0cywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBvbiB0aGUgYmVzdCBwcmVmaXggYmFzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmJpdE5vdCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5iaXROb3QoMSkgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAtMlxuICAgKlxuICAgKiAgICBtYXRoLmJpdE5vdChbMiwgLTMsIDRdKSAgICAgIC8vIHJldHVybnMgQXJyYXkgWy0zLCAyLCA1XVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYml0QW5kLCBiaXRPciwgYml0WG9yLCBsZWZ0U2hpZnQsIHJpZ2h0QXJpdGhTaGlmdCwgcmlnaHRMb2dTaGlmdFxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0geCBWYWx1ZSB0byBub3RcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IE5PVCBvZiBgeGBcbiAgICovXG4gIHZhciBiaXROb3QgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmJpdE5vdE51bWJlcixcbiAgICBCaWdOdW1iZXI6IF9iaXR3aXNlLmJpdE5vdEJpZ051bWJlcixcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGJpdE5vdCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGJpdE5vdDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVCaXROb3QgPSBjcmVhdGVCaXROb3Q7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUJpdE9yID0gdm9pZCAwO1xuXG52YXIgX2JpdHdpc2UgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYmlnbnVtYmVyL2JpdHdpc2VcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTBcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wNFwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAxXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2JpdE9yJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdlcXVhbFNjYWxhcicsICdEZW5zZU1hdHJpeCddO1xudmFyIGNyZWF0ZUJpdE9yID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMDEgPSAoMCwgX2FsZ29yaXRobTUuY3JlYXRlQWxnb3JpdGhtMDEpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNCA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0wNCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMCA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBCaXR3aXNlIE9SIHR3byB2YWx1ZXMsIGB4IHwgeWAuXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqIEZvciB1bml0cywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBvbiB0aGUgbG93ZXN0IHByaW50IGJhc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5iaXRPcih4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5iaXRPcigxLCAyKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDNcbiAgICpcbiAgICogICAgbWF0aC5iaXRPcihbMSwgMiwgM10sIDQpICAgICAgIC8vIHJldHVybnMgQXJyYXkgWzUsIDYsIDddXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiaXRBbmQsIGJpdE5vdCwgYml0WG9yLCBsZWZ0U2hpZnQsIHJpZ2h0QXJpdGhTaGlmdCwgcmlnaHRMb2dTaGlmdFxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0geCBGaXJzdCB2YWx1ZSB0byBvclxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0geSBTZWNvbmQgdmFsdWUgdG8gb3JcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IE9SIG9mIGB4YCBhbmQgYHlgXG4gICAqL1xuXG4gIHZhciBiaXRPciA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfbnVtYmVyLmJpdE9yTnVtYmVyLFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IF9iaXR3aXNlLmJpdE9yQmlnTnVtYmVyLFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDQoeCwgeSwgYml0T3IpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDEoeSwgeCwgYml0T3IsIHRydWUpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDEoeCwgeSwgYml0T3IsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBiaXRPcik7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYml0T3IobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGJpdE9yKG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBiaXRPcih4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMCh4LCB5LCBiaXRPciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBEZW5zZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgYml0T3IsIGZhbHNlKTtcbiAgICB9LFxuICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTAoeSwgeCwgYml0T3IsIHRydWUpO1xuICAgIH0sXG4gICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgYml0T3IsIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBhbnknOiBmdW5jdGlvbiBBcnJheUFueSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCBiaXRPciwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgYml0T3IsIHRydWUpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYml0T3I7XG59KTtcbmV4cG9ydHMuY3JlYXRlQml0T3IgPSBjcmVhdGVCaXRPcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQml0WG9yID0gdm9pZCAwO1xuXG52YXIgX2JpdHdpc2UgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYmlnbnVtYmVyL2JpdHdpc2VcIik7XG5cbnZhciBfYWxnb3JpdGhtID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAzXCIpO1xuXG52YXIgX2FsZ29yaXRobTIgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDdcIik7XG5cbnZhciBfYWxnb3JpdGhtMyA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMlwiKTtcblxudmFyIF9hbGdvcml0aG00ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgX2FsZ29yaXRobTUgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2JpdFhvcic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVCaXRYb3IgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXg7XG4gIHZhciBhbGdvcml0aG0wMyA9ICgwLCBfYWxnb3JpdGhtLmNyZWF0ZUFsZ29yaXRobTAzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMDcgPSAoMCwgX2FsZ29yaXRobTIuY3JlYXRlQWxnb3JpdGhtMDcpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4XG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTIgPSAoMCwgX2FsZ29yaXRobTMuY3JlYXRlQWxnb3JpdGhtMTIpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4XG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTMgPSAoMCwgX2FsZ29yaXRobTQuY3JlYXRlQWxnb3JpdGhtMTMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtNS5jcmVhdGVBbGdvcml0aG0xNCkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgLyoqXG4gICAqIEJpdHdpc2UgWE9SIHR3byB2YWx1ZXMsIGB4IF4geWAuXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5iaXRYb3IoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguYml0WG9yKDEsIDIpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgM1xuICAgKlxuICAgKiAgICBtYXRoLmJpdFhvcihbMiwgMywgNF0sIDQpICAgICAgIC8vIHJldHVybnMgQXJyYXkgWzYsIDcsIDBdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiaXRBbmQsIGJpdE5vdCwgYml0T3IsIGxlZnRTaGlmdCwgcmlnaHRBcml0aFNoaWZ0LCByaWdodExvZ1NoaWZ0XG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSB4IEZpcnN0IHZhbHVlIHRvIHhvclxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0geSBTZWNvbmQgdmFsdWUgdG8geG9yXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSBYT1Igb2YgYHhgIGFuZCBgeWBcbiAgICovXG5cbiAgdmFyIGJpdFhvciA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfbnVtYmVyLmJpdFhvck51bWJlcixcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBfYml0d2lzZS5iaXRYb3IsXG4gICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wNyh4LCB5LCBiaXRYb3IpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeSwgeCwgYml0WG9yLCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHgsIHksIGJpdFhvciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIGJpdFhvcik7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYml0WG9yKG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBiaXRYb3IobWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGJpdFhvcih4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih4LCB5LCBiaXRYb3IsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIGJpdFhvciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ2FueSwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gYW55U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih5LCB4LCBiaXRYb3IsIHRydWUpO1xuICAgIH0sXG4gICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgYml0WG9yLCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgYml0WG9yLCBmYWxzZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ2FueSwgQXJyYXknOiBmdW5jdGlvbiBhbnlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCBiaXRYb3IsIHRydWUpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYml0WG9yO1xufSk7XG5leHBvcnRzLmNyZWF0ZUJpdFhvciA9IGNyZWF0ZUJpdFhvcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTGVmdFNoaWZ0ID0gdm9pZCAwO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wMlwiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTExXCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAxXCIpO1xuXG52YXIgX2FsZ29yaXRobTYgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTBcIik7XG5cbnZhciBfYWxnb3JpdGhtNyA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wOFwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIF9iaXR3aXNlID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2JpZ251bWJlci9iaXR3aXNlXCIpO1xuXG52YXIgbmFtZSA9ICdsZWZ0U2hpZnQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2VxdWFsU2NhbGFyJywgJ3plcm9zJywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlTGVmdFNoaWZ0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLFxuICAgICAgemVyb3MgPSBfcmVmLnplcm9zLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMDEgPSAoMCwgX2FsZ29yaXRobTUuY3JlYXRlQWxnb3JpdGhtMDEpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wMiA9ICgwLCBfYWxnb3JpdGhtLmNyZWF0ZUFsZ29yaXRobTAyKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTA4ID0gKDAsIF9hbGdvcml0aG03LmNyZWF0ZUFsZ29yaXRobTA4KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEwID0gKDAsIF9hbGdvcml0aG02LmNyZWF0ZUFsZ29yaXRobTEwKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTExID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTExKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEzID0gKDAsIF9hbGdvcml0aG0zLmNyZWF0ZUFsZ29yaXRobTEzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTQuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBCaXR3aXNlIGxlZnQgbG9naWNhbCBzaGlmdCBvZiBhIHZhbHVlIHggYnkgeSBudW1iZXIgb2YgYml0cywgYHggPDwgeWAuXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqIEZvciB1bml0cywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBvbiB0aGUgYmVzdCBwcmVmaXggYmFzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmxlZnRTaGlmdCh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5sZWZ0U2hpZnQoMSwgMikgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA0XG4gICAqXG4gICAqICAgIG1hdGgubGVmdFNoaWZ0KFsxLCAyLCAzXSwgNCkgICAgICAgLy8gcmV0dXJucyBBcnJheSBbMTYsIDMyLCA2NF1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGxlZnRTaGlmdCwgYml0Tm90LCBiaXRPciwgYml0WG9yLCByaWdodEFyaXRoU2hpZnQsIHJpZ2h0TG9nU2hpZnRcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IHggVmFsdWUgdG8gYmUgc2hpZnRlZFxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXJ9IHkgQW1vdW50IG9mIHNoaWZ0c1xuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0gYHhgIHNoaWZ0ZWQgbGVmdCBgeWAgdGltZXNcbiAgICovXG5cbiAgdmFyIGxlZnRTaGlmdCA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfbnVtYmVyLmxlZnRTaGlmdE51bWJlcixcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBfYml0d2lzZS5sZWZ0U2hpZnRCaWdOdW1iZXIsXG4gICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wOCh4LCB5LCBsZWZ0U2hpZnQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHksIHgsIGxlZnRTaGlmdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMSh4LCB5LCBsZWZ0U2hpZnQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBsZWZ0U2hpZnQpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGxlZnRTaGlmdChtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gbGVmdFNoaWZ0KG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBsZWZ0U2hpZnQoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeE51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICAvLyBjaGVjayBzY2FsYXJcbiAgICAgIGlmIChlcXVhbFNjYWxhcih5LCAwKSkge1xuICAgICAgICByZXR1cm4geC5jbG9uZSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeCwgeSwgbGVmdFNoaWZ0LCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIERlbnNlTWF0cml4TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhclxuICAgICAgaWYgKGVxdWFsU2NhbGFyKHksIDApKSB7XG4gICAgICAgIHJldHVybiB4LmNsb25lKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBsZWZ0U2hpZnQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlclNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyBjaGVjayBzY2FsYXJcbiAgICAgIGlmIChlcXVhbFNjYWxhcih4LCAwKSkge1xuICAgICAgICByZXR1cm4gemVyb3MoeS5zaXplKCksIHkuc3RvcmFnZSgpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTEwKHksIHgsIGxlZnRTaGlmdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckRlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhclxuICAgICAgaWYgKGVxdWFsU2NhbGFyKHgsIDApKSB7XG4gICAgICAgIHJldHVybiB6ZXJvcyh5LnNpemUoKSwgeS5zdG9yYWdlKCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgbGVmdFNoaWZ0LCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQXJyYXlOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGxlZnRTaGlmdChtYXRyaXgoeCksIHkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIEFycmF5JzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyQXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGxlZnRTaGlmdCh4LCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbGVmdFNoaWZ0O1xufSk7XG5leHBvcnRzLmNyZWF0ZUxlZnRTaGlmdCA9IGNyZWF0ZUxlZnRTaGlmdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUmlnaHRBcml0aFNoaWZ0ID0gdm9pZCAwO1xuXG52YXIgX2JpdHdpc2UgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYmlnbnVtYmVyL2JpdHdpc2VcIik7XG5cbnZhciBfYWxnb3JpdGhtID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAyXCIpO1xuXG52YXIgX2FsZ29yaXRobTIgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTFcIik7XG5cbnZhciBfYWxnb3JpdGhtMyA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xM1wiKTtcblxudmFyIF9hbGdvcml0aG00ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgX2FsZ29yaXRobTUgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDFcIik7XG5cbnZhciBfYWxnb3JpdGhtNiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMFwiKTtcblxudmFyIF9hbGdvcml0aG03ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA4XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdyaWdodEFyaXRoU2hpZnQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2VxdWFsU2NhbGFyJywgJ3plcm9zJywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlUmlnaHRBcml0aFNoaWZ0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLFxuICAgICAgemVyb3MgPSBfcmVmLnplcm9zLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMDEgPSAoMCwgX2FsZ29yaXRobTUuY3JlYXRlQWxnb3JpdGhtMDEpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wMiA9ICgwLCBfYWxnb3JpdGhtLmNyZWF0ZUFsZ29yaXRobTAyKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTA4ID0gKDAsIF9hbGdvcml0aG03LmNyZWF0ZUFsZ29yaXRobTA4KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEwID0gKDAsIF9hbGdvcml0aG02LmNyZWF0ZUFsZ29yaXRobTEwKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTExID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTExKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEzID0gKDAsIF9hbGdvcml0aG0zLmNyZWF0ZUFsZ29yaXRobTEzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTQuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBCaXR3aXNlIHJpZ2h0IGFyaXRobWV0aWMgc2hpZnQgb2YgYSB2YWx1ZSB4IGJ5IHkgbnVtYmVyIG9mIGJpdHMsIGB4ID4+IHlgLlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKiBGb3IgdW5pdHMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgb24gdGhlIGJlc3QgcHJlZml4IGJhc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5yaWdodEFyaXRoU2hpZnQoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgucmlnaHRBcml0aFNoaWZ0KDQsIDIpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMVxuICAgKlxuICAgKiAgICBtYXRoLnJpZ2h0QXJpdGhTaGlmdChbMTYsIC0zMiwgNjRdLCA0KSAgIC8vIHJldHVybnMgQXJyYXkgWzEsIC0yLCAzXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYml0QW5kLCBiaXROb3QsIGJpdE9yLCBiaXRYb3IsIHJpZ2h0QXJpdGhTaGlmdCwgcmlnaHRMb2dTaGlmdFxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0geCBWYWx1ZSB0byBiZSBzaGlmdGVkXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlcn0geSBBbW91bnQgb2Ygc2hpZnRzXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSBgeGAgc2lnbi1maWxsZWQgc2hpZnRlZCByaWdodCBgeWAgdGltZXNcbiAgICovXG5cbiAgdmFyIHJpZ2h0QXJpdGhTaGlmdCA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfbnVtYmVyLnJpZ2h0QXJpdGhTaGlmdE51bWJlcixcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBfYml0d2lzZS5yaWdodEFyaXRoU2hpZnRCaWdOdW1iZXIsXG4gICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wOCh4LCB5LCByaWdodEFyaXRoU2hpZnQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHksIHgsIHJpZ2h0QXJpdGhTaGlmdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMSh4LCB5LCByaWdodEFyaXRoU2hpZnQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCByaWdodEFyaXRoU2hpZnQpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHJpZ2h0QXJpdGhTaGlmdChtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gcmlnaHRBcml0aFNoaWZ0KG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiByaWdodEFyaXRoU2hpZnQoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeE51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICAvLyBjaGVjayBzY2FsYXJcbiAgICAgIGlmIChlcXVhbFNjYWxhcih5LCAwKSkge1xuICAgICAgICByZXR1cm4geC5jbG9uZSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeCwgeSwgcmlnaHRBcml0aFNoaWZ0LCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIERlbnNlTWF0cml4TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhclxuICAgICAgaWYgKGVxdWFsU2NhbGFyKHksIDApKSB7XG4gICAgICAgIHJldHVybiB4LmNsb25lKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCByaWdodEFyaXRoU2hpZnQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlclNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyBjaGVjayBzY2FsYXJcbiAgICAgIGlmIChlcXVhbFNjYWxhcih4LCAwKSkge1xuICAgICAgICByZXR1cm4gemVyb3MoeS5zaXplKCksIHkuc3RvcmFnZSgpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTEwKHksIHgsIHJpZ2h0QXJpdGhTaGlmdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckRlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhclxuICAgICAgaWYgKGVxdWFsU2NhbGFyKHgsIDApKSB7XG4gICAgICAgIHJldHVybiB6ZXJvcyh5LnNpemUoKSwgeS5zdG9yYWdlKCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgcmlnaHRBcml0aFNoaWZ0LCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQXJyYXlOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHJpZ2h0QXJpdGhTaGlmdChtYXRyaXgoeCksIHkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIEFycmF5JzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyQXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHJpZ2h0QXJpdGhTaGlmdCh4LCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmlnaHRBcml0aFNoaWZ0O1xufSk7XG5leHBvcnRzLmNyZWF0ZVJpZ2h0QXJpdGhTaGlmdCA9IGNyZWF0ZVJpZ2h0QXJpdGhTaGlmdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUmlnaHRMb2dTaGlmdCA9IHZvaWQgMDtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDJcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMVwiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgX2FsZ29yaXRobTQgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBfYWxnb3JpdGhtNSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wMVwiKTtcblxudmFyIF9hbGdvcml0aG02ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEwXCIpO1xuXG52YXIgX2FsZ29yaXRobTcgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDhcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ3JpZ2h0TG9nU2hpZnQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2VxdWFsU2NhbGFyJywgJ3plcm9zJywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlUmlnaHRMb2dTaGlmdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIHplcm9zID0gX3JlZi56ZXJvcyxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTAxID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTAxKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMDIgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wOCA9ICgwLCBfYWxnb3JpdGhtNy5jcmVhdGVBbGdvcml0aG0wOCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMCA9ICgwLCBfYWxnb3JpdGhtNi5jcmVhdGVBbGdvcml0aG0xMCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMSA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0xMSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogQml0d2lzZSByaWdodCBsb2dpY2FsIHNoaWZ0IG9mIHZhbHVlIHggYnkgeSBudW1iZXIgb2YgYml0cywgYHggPj4+IHlgLlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKiBGb3IgdW5pdHMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgb24gdGhlIGJlc3QgcHJlZml4IGJhc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5yaWdodExvZ1NoaWZ0KHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnJpZ2h0TG9nU2hpZnQoNCwgMikgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAxXG4gICAqXG4gICAqICAgIG1hdGgucmlnaHRMb2dTaGlmdChbMTYsIC0zMiwgNjRdLCA0KSAgIC8vIHJldHVybnMgQXJyYXkgWzEsIDIsIDNdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiaXRBbmQsIGJpdE5vdCwgYml0T3IsIGJpdFhvciwgbGVmdFNoaWZ0LCByaWdodExvZ1NoaWZ0XG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEFycmF5IHwgTWF0cml4fSB4IFZhbHVlIHRvIGJlIHNoaWZ0ZWRcbiAgICogQHBhcmFtICB7bnVtYmVyfSB5IEFtb3VudCBvZiBzaGlmdHNcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IGB4YCB6ZXJvLWZpbGxlZCBzaGlmdGVkIHJpZ2h0IGB5YCB0aW1lc1xuICAgKi9cblxuICB2YXIgcmlnaHRMb2dTaGlmdCA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfbnVtYmVyLnJpZ2h0TG9nU2hpZnROdW1iZXIsXG4gICAgLy8gJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogLi4uLCAvLyBUT0RPOiBpbXBsZW1lbnQgQmlnTnVtYmVyIHN1cHBvcnQgZm9yIHJpZ2h0TG9nU2hpZnRcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTA4KHgsIHksIHJpZ2h0TG9nU2hpZnQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHksIHgsIHJpZ2h0TG9nU2hpZnQsIHRydWUpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDEoeCwgeSwgcmlnaHRMb2dTaGlmdCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIHJpZ2h0TG9nU2hpZnQpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHJpZ2h0TG9nU2hpZnQobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHJpZ2h0TG9nU2hpZnQobWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHJpZ2h0TG9nU2hpZnQoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeE51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICAvLyBjaGVjayBzY2FsYXJcbiAgICAgIGlmIChlcXVhbFNjYWxhcih5LCAwKSkge1xuICAgICAgICByZXR1cm4geC5jbG9uZSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeCwgeSwgcmlnaHRMb2dTaGlmdCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBEZW5zZU1hdHJpeE51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICAvLyBjaGVjayBzY2FsYXJcbiAgICAgIGlmIChlcXVhbFNjYWxhcih5LCAwKSkge1xuICAgICAgICByZXR1cm4geC5jbG9uZSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgcmlnaHRMb2dTaGlmdCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyU3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhclxuICAgICAgaWYgKGVxdWFsU2NhbGFyKHgsIDApKSB7XG4gICAgICAgIHJldHVybiB6ZXJvcyh5LnNpemUoKSwgeS5zdG9yYWdlKCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTAoeSwgeCwgcmlnaHRMb2dTaGlmdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckRlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhclxuICAgICAgaWYgKGVxdWFsU2NhbGFyKHgsIDApKSB7XG4gICAgICAgIHJldHVybiB6ZXJvcyh5LnNpemUoKSwgeS5zdG9yYWdlKCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgcmlnaHRMb2dTaGlmdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIEFycmF5TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiByaWdodExvZ1NoaWZ0KG1hdHJpeCh4KSwgeSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgQXJyYXknOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gcmlnaHRMb2dTaGlmdCh4LCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmlnaHRMb2dTaGlmdDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVSaWdodExvZ1NoaWZ0ID0gY3JlYXRlUmlnaHRMb2dTaGlmdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQmVsbE51bWJlcnMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdiZWxsTnVtYmVycyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdhZGRTY2FsYXInLCAnaXNOZWdhdGl2ZScsICdpc0ludGVnZXInLCAnc3RpcmxpbmdTMiddO1xudmFyIGNyZWF0ZUJlbGxOdW1iZXJzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGFkZFNjYWxhciA9IF9yZWYuYWRkU2NhbGFyLFxuICAgICAgaXNOZWdhdGl2ZSA9IF9yZWYuaXNOZWdhdGl2ZSxcbiAgICAgIGlzSW50ZWdlciA9IF9yZWYuaXNJbnRlZ2VyLFxuICAgICAgc3RpcmxpbmdTMiA9IF9yZWYuc3RpcmxpbmdTMjtcblxuICAvKipcbiAgICogVGhlIEJlbGwgTnVtYmVycyBjb3VudCB0aGUgbnVtYmVyIG9mIHBhcnRpdGlvbnMgb2YgYSBzZXQuIEEgcGFydGl0aW9uIGlzIGEgcGFpcndpc2UgZGlzam9pbnQgc3Vic2V0IG9mIFMgd2hvc2UgdW5pb24gaXMgUy5cbiAgICogYmVsbE51bWJlcnMgb25seSB0YWtlcyBpbnRlZ2VyIGFyZ3VtZW50cy5cbiAgICogVGhlIGZvbGxvd2luZyBjb25kaXRpb24gbXVzdCBiZSBlbmZvcmNlZDogbiA+PSAwXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICBtYXRoLmJlbGxOdW1iZXJzKG4pXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmJlbGxOdW1iZXJzKDMpIC8vIHJldHVybnMgNVxuICAgKiAgICBtYXRoLmJlbGxOdW1iZXJzKDgpIC8vIHJldHVybnMgNDE0MFxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgc3RpcmxpbmdTMlxuICAgKlxuICAgKiBAcGFyYW0ge051bWJlciB8IEJpZ051bWJlcn0gbiAgICBUb3RhbCBudW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgc2V0XG4gICAqIEByZXR1cm4ge051bWJlciB8IEJpZ051bWJlcn0gICAgIEIobilcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlcihuKSB7XG4gICAgICBpZiAoIWlzSW50ZWdlcihuKSB8fCBpc05lZ2F0aXZlKG4pKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vbi1uZWdhdGl2ZSBpbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIGluIGZ1bmN0aW9uIGJlbGxOdW1iZXJzJyk7XG4gICAgICB9IC8vIFN1bSAoaz0wLCBuKSBTKG4saykuXG5cblxuICAgICAgdmFyIHJlc3VsdCA9IDA7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IG47IGkrKykge1xuICAgICAgICByZXN1bHQgPSBhZGRTY2FsYXIocmVzdWx0LCBzdGlybGluZ1MyKG4sIGkpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZUJlbGxOdW1iZXJzID0gY3JlYXRlQmVsbE51bWJlcnM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNhdGFsYW4gPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdjYXRhbGFuJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FkZFNjYWxhcicsICdkaXZpZGVTY2FsYXInLCAnbXVsdGlwbHlTY2FsYXInLCAnY29tYmluYXRpb25zJywgJ2lzTmVnYXRpdmUnLCAnaXNJbnRlZ2VyJ107XG52YXIgY3JlYXRlQ2F0YWxhbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBhZGRTY2FsYXIgPSBfcmVmLmFkZFNjYWxhcixcbiAgICAgIGRpdmlkZVNjYWxhciA9IF9yZWYuZGl2aWRlU2NhbGFyLFxuICAgICAgbXVsdGlwbHlTY2FsYXIgPSBfcmVmLm11bHRpcGx5U2NhbGFyLFxuICAgICAgY29tYmluYXRpb25zID0gX3JlZi5jb21iaW5hdGlvbnMsXG4gICAgICBpc05lZ2F0aXZlID0gX3JlZi5pc05lZ2F0aXZlLFxuICAgICAgaXNJbnRlZ2VyID0gX3JlZi5pc0ludGVnZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBDYXRhbGFuIE51bWJlcnMgZW51bWVyYXRlIGNvbWJpbmF0b3JpYWwgc3RydWN0dXJlcyBvZiBtYW55IGRpZmZlcmVudCB0eXBlcy5cbiAgICogY2F0YWxhbiBvbmx5IHRha2VzIGludGVnZXIgYXJndW1lbnRzLlxuICAgKiBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbiBtdXN0IGJlIGVuZm9yY2VkOiBuID49IDBcbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgIG1hdGguY2F0YWxhbihuKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5jYXRhbGFuKDMpIC8vIHJldHVybnMgNVxuICAgKiAgICBtYXRoLmNhdGFsYW4oOCkgLy8gcmV0dXJucyAxNDMwXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiZWxsTnVtYmVyc1xuICAgKlxuICAgKiBAcGFyYW0ge051bWJlciB8IEJpZ051bWJlcn0gbiAgICBudGggQ2F0YWxhbiBudW1iZXJcbiAgICogQHJldHVybiB7TnVtYmVyIHwgQmlnTnVtYmVyfSAgICAgQ24obilcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlcihuKSB7XG4gICAgICBpZiAoIWlzSW50ZWdlcihuKSB8fCBpc05lZ2F0aXZlKG4pKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vbi1uZWdhdGl2ZSBpbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIGluIGZ1bmN0aW9uIGNhdGFsYW4nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRpdmlkZVNjYWxhcihjb21iaW5hdGlvbnMobXVsdGlwbHlTY2FsYXIobiwgMiksIG4pLCBhZGRTY2FsYXIobiwgMSkpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlQ2F0YWxhbiA9IGNyZWF0ZUNhdGFsYW47IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNvbXBvc2l0aW9uID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnY29tcG9zaXRpb24nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnYWRkU2NhbGFyJywgJ2NvbWJpbmF0aW9ucycsICdpc05lZ2F0aXZlJywgJ2lzUG9zaXRpdmUnLCAnaXNJbnRlZ2VyJywgJ2xhcmdlciddO1xudmFyIGNyZWF0ZUNvbXBvc2l0aW9uID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGFkZFNjYWxhciA9IF9yZWYuYWRkU2NhbGFyLFxuICAgICAgY29tYmluYXRpb25zID0gX3JlZi5jb21iaW5hdGlvbnMsXG4gICAgICBpc1Bvc2l0aXZlID0gX3JlZi5pc1Bvc2l0aXZlLFxuICAgICAgaXNOZWdhdGl2ZSA9IF9yZWYuaXNOZWdhdGl2ZSxcbiAgICAgIGlzSW50ZWdlciA9IF9yZWYuaXNJbnRlZ2VyLFxuICAgICAgbGFyZ2VyID0gX3JlZi5sYXJnZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBjb21wb3NpdGlvbiBjb3VudHMgb2YgbiBpbnRvIGsgcGFydHMuXG4gICAqXG4gICAqIGNvbXBvc2l0aW9uIG9ubHkgdGFrZXMgaW50ZWdlciBhcmd1bWVudHMuXG4gICAqIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIG11c3QgYmUgZW5mb3JjZWQ6IGsgPD0gbi5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgIG1hdGguY29tcG9zaXRpb24obiwgaylcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguY29tcG9zaXRpb24oNSwgMykgLy8gcmV0dXJucyA2XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjb21iaW5hdGlvbnNcbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXIgfCBCaWdOdW1iZXJ9IG4gICAgVG90YWwgbnVtYmVyIG9mIG9iamVjdHMgaW4gdGhlIHNldFxuICAgKiBAcGFyYW0ge051bWJlciB8IEJpZ051bWJlcn0gayAgICBOdW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgc3Vic2V0XG4gICAqIEByZXR1cm4ge051bWJlciB8IEJpZ051bWJlcn0gICAgIFJldHVybnMgdGhlIGNvbXBvc2l0aW9uIGNvdW50cyBvZiBuIGludG8gayBwYXJ0cy5cbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyTnVtYmVyQmlnTnVtYmVyKG4sIGspIHtcbiAgICAgIGlmICghaXNJbnRlZ2VyKG4pIHx8ICFpc1Bvc2l0aXZlKG4pIHx8ICFpc0ludGVnZXIoaykgfHwgIWlzUG9zaXRpdmUoaykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUG9zaXRpdmUgaW50ZWdlciB2YWx1ZSBleHBlY3RlZCBpbiBmdW5jdGlvbiBjb21wb3NpdGlvbicpO1xuICAgICAgfSBlbHNlIGlmIChsYXJnZXIoaywgbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignayBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBuIGluIGZ1bmN0aW9uIGNvbXBvc2l0aW9uJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb21iaW5hdGlvbnMoYWRkU2NhbGFyKG4sIC0xKSwgYWRkU2NhbGFyKGssIC0xKSk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb21wb3NpdGlvbiA9IGNyZWF0ZUNvbXBvc2l0aW9uOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTdGlybGluZ1MyID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnc3RpcmxpbmdTMic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdhZGRTY2FsYXInLCAnc3VidHJhY3QnLCAnbXVsdGlwbHlTY2FsYXInLCAnZGl2aWRlU2NhbGFyJywgJ3BvdycsICdmYWN0b3JpYWwnLCAnY29tYmluYXRpb25zJywgJ2lzTmVnYXRpdmUnLCAnaXNJbnRlZ2VyJywgJ2xhcmdlciddO1xudmFyIGNyZWF0ZVN0aXJsaW5nUzIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgYWRkU2NhbGFyID0gX3JlZi5hZGRTY2FsYXIsXG4gICAgICBzdWJ0cmFjdCA9IF9yZWYuc3VidHJhY3QsXG4gICAgICBtdWx0aXBseVNjYWxhciA9IF9yZWYubXVsdGlwbHlTY2FsYXIsXG4gICAgICBkaXZpZGVTY2FsYXIgPSBfcmVmLmRpdmlkZVNjYWxhcixcbiAgICAgIHBvdyA9IF9yZWYucG93LFxuICAgICAgZmFjdG9yaWFsID0gX3JlZi5mYWN0b3JpYWwsXG4gICAgICBjb21iaW5hdGlvbnMgPSBfcmVmLmNvbWJpbmF0aW9ucyxcbiAgICAgIGlzTmVnYXRpdmUgPSBfcmVmLmlzTmVnYXRpdmUsXG4gICAgICBpc0ludGVnZXIgPSBfcmVmLmlzSW50ZWdlcixcbiAgICAgIGxhcmdlciA9IF9yZWYubGFyZ2VyO1xuXG4gIC8qKlxuICAgKiBUaGUgU3RpcmxpbmcgbnVtYmVycyBvZiB0aGUgc2Vjb25kIGtpbmQsIGNvdW50cyB0aGUgbnVtYmVyIG9mIHdheXMgdG8gcGFydGl0aW9uXG4gICAqIGEgc2V0IG9mIG4gbGFiZWxsZWQgb2JqZWN0cyBpbnRvIGsgbm9uZW1wdHkgdW5sYWJlbGxlZCBzdWJzZXRzLlxuICAgKiBzdGlybGluZ1MyIG9ubHkgdGFrZXMgaW50ZWdlciBhcmd1bWVudHMuXG4gICAqIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIG11c3QgYmUgZW5mb3JjZWQ6IGsgPD0gbi5cbiAgICpcbiAgICogIElmIG4gPSBrIG9yIGsgPSAxLCB0aGVuIHMobixrKSA9IDFcbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgIG1hdGguc3RpcmxpbmdTMihuLCBrKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5zdGlybGluZ1MyKDUsIDMpIC8vcmV0dXJucyAyNVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYmVsbE51bWJlcnNcbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXIgfCBCaWdOdW1iZXJ9IG4gICAgVG90YWwgbnVtYmVyIG9mIG9iamVjdHMgaW4gdGhlIHNldFxuICAgKiBAcGFyYW0ge051bWJlciB8IEJpZ051bWJlcn0gayAgICBOdW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgc3Vic2V0XG4gICAqIEByZXR1cm4ge051bWJlciB8IEJpZ051bWJlcn0gICAgIFMobixrKVxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJOdW1iZXJCaWdOdW1iZXIobiwgaykge1xuICAgICAgaWYgKCFpc0ludGVnZXIobikgfHwgaXNOZWdhdGl2ZShuKSB8fCAhaXNJbnRlZ2VyKGspIHx8IGlzTmVnYXRpdmUoaykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm9uLW5lZ2F0aXZlIGludGVnZXIgdmFsdWUgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gc3RpcmxpbmdTMicpO1xuICAgICAgfSBlbHNlIGlmIChsYXJnZXIoaywgbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignayBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBuIGluIGZ1bmN0aW9uIHN0aXJsaW5nUzInKTtcbiAgICAgIH0gLy8gMS9rISBTdW0oaT0wIC0+IGspIFsoLTEpXihrLWkpKkMoayxqKSogaV5uXVxuXG5cbiAgICAgIHZhciBrRmFjdG9yaWFsID0gZmFjdG9yaWFsKGspO1xuICAgICAgdmFyIHJlc3VsdCA9IDA7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IGs7IGkrKykge1xuICAgICAgICB2YXIgbmVnYXRpdmVPbmUgPSBwb3coLTEsIHN1YnRyYWN0KGssIGkpKTtcbiAgICAgICAgdmFyIGtDaG9vc2VJID0gY29tYmluYXRpb25zKGssIGkpO1xuICAgICAgICB2YXIgaVBvd2VyID0gcG93KGksIG4pO1xuICAgICAgICByZXN1bHQgPSBhZGRTY2FsYXIocmVzdWx0LCBtdWx0aXBseVNjYWxhcihtdWx0aXBseVNjYWxhcihrQ2hvb3NlSSwgaVBvd2VyKSwgbmVnYXRpdmVPbmUpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRpdmlkZVNjYWxhcihyZXN1bHQsIGtGYWN0b3JpYWwpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlU3RpcmxpbmdTMiA9IGNyZWF0ZVN0aXJsaW5nUzI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFyZyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgbmFtZSA9ICdhcmcnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVBcmcgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBhcmd1bWVudCBvZiBhIGNvbXBsZXggdmFsdWUuXG4gICAqIEZvciBhIGNvbXBsZXggbnVtYmVyIGBhICsgYmlgLCB0aGUgYXJndW1lbnQgaXMgY29tcHV0ZWQgYXMgYGF0YW4yKGIsIGEpYC5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmFyZyh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgY29uc3QgYSA9IG1hdGguY29tcGxleCgyLCAyKVxuICAgKiAgICBtYXRoLmFyZyhhKSAvIG1hdGgucGkgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMC4yNVxuICAgKlxuICAgKiAgICBjb25zdCBiID0gbWF0aC5jb21wbGV4KCcyICsgM2knKVxuICAgKiAgICBtYXRoLmFyZyhiKSAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMC45ODI3OTM3MjMyNDczMjlcbiAgICogICAgbWF0aC5hdGFuMigzLCAyKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDAuOTgyNzkzNzIzMjQ3MzI5XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICByZSwgaW0sIGNvbmosIGFic1xuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geFxuICAgKiAgICAgICAgICAgIEEgY29tcGxleCBudW1iZXIgb3IgYXJyYXkgd2l0aCBjb21wbGV4IG51bWJlcnNcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IFRoZSBhcmd1bWVudCBvZiB4XG4gICAqL1xuICB2YXIgYXJnID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiBNYXRoLmF0YW4yKDAsIHgpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHguY29uc3RydWN0b3IuYXRhbjIoMCwgeCk7XG4gICAgfSxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmFyZygpO1xuICAgIH0sXG4gICAgLy8gVE9ETzogaW1wbGVtZW50IEJpZ051bWJlciBzdXBwb3J0IGZvciBmdW5jdGlvbiBhcmdcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGFyZyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGFyZztcbn0pO1xuZXhwb3J0cy5jcmVhdGVBcmcgPSBjcmVhdGVBcmc7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNvbmogPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIG5hbWUgPSAnY29uaic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUNvbmogPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBjb21wbGV4IGNvbmp1Z2F0ZSBvZiBhIGNvbXBsZXggdmFsdWUuXG4gICAqIElmIGB4ID0gYStiaWAsIHRoZSBjb21wbGV4IGNvbmp1Z2F0ZSBvZiBgeGAgaXMgYGEgLSBiaWAuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5jb25qKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmNvbmoobWF0aC5jb21wbGV4KCcyICsgM2knKSkgIC8vIHJldHVybnMgQ29tcGxleCAyIC0gM2lcbiAgICogICAgbWF0aC5jb25qKG1hdGguY29tcGxleCgnMiAtIDNpJykpICAvLyByZXR1cm5zIENvbXBsZXggMiArIDNpXG4gICAqICAgIG1hdGguY29uaihtYXRoLmNvbXBsZXgoJy01LjJpJykpICAvLyByZXR1cm5zIENvbXBsZXggNS4yaVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgcmUsIGltLCBhcmcsIGFic1xuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geFxuICAgKiAgICAgICAgICAgIEEgY29tcGxleCBudW1iZXIgb3IgYXJyYXkgd2l0aCBjb21wbGV4IG51bWJlcnNcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fVxuICAgKiAgICAgICAgICAgIFRoZSBjb21wbGV4IGNvbmp1Z2F0ZSBvZiB4XG4gICAqL1xuICB2YXIgY29uaiA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICByZXR1cm4geDtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4O1xuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5jb25qdWdhdGUoKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgY29uaik7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGNvbmo7XG59KTtcbmV4cG9ydHMuY3JlYXRlQ29uaiA9IGNyZWF0ZUNvbmo7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUltID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBuYW1lID0gJ2ltJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlSW0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGltYWdpbmFyeSBwYXJ0IG9mIGEgY29tcGxleCBudW1iZXIuXG4gICAqIEZvciBhIGNvbXBsZXggbnVtYmVyIGBhICsgYmlgLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBgYmAuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5pbSh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgY29uc3QgYSA9IG1hdGguY29tcGxleCgyLCAzKVxuICAgKiAgICBtYXRoLnJlKGEpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMlxuICAgKiAgICBtYXRoLmltKGEpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgM1xuICAgKlxuICAgKiAgICBtYXRoLnJlKG1hdGguY29tcGxleCgnLTUuMmknKSkgLy8gcmV0dXJucyBudW1iZXIgLTUuMlxuICAgKiAgICBtYXRoLnJlKG1hdGguY29tcGxleCgyLjQpKSAgICAgLy8gcmV0dXJucyBudW1iZXIgMFxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgcmUsIGNvbmosIGFicywgYXJnXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4XG4gICAqICAgICAgICAgICAgQSBjb21wbGV4IG51bWJlciBvciBhcnJheSB3aXRoIGNvbXBsZXggbnVtYmVyc1xuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0gVGhlIGltYWdpbmFyeSBwYXJ0IG9mIHhcbiAgICovXG4gIHZhciBpbSA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4Lm11bCgwKTtcbiAgICB9LFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHguaW07XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGltKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaW07XG59KTtcbmV4cG9ydHMuY3JlYXRlSW0gPSBjcmVhdGVJbTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUmUgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIG5hbWUgPSAncmUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVSZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcmVhbCBwYXJ0IG9mIGEgY29tcGxleCBudW1iZXIuXG4gICAqIEZvciBhIGNvbXBsZXggbnVtYmVyIGBhICsgYmlgLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBgYWAuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5yZSh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgY29uc3QgYSA9IG1hdGguY29tcGxleCgyLCAzKVxuICAgKiAgICBtYXRoLnJlKGEpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMlxuICAgKiAgICBtYXRoLmltKGEpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgM1xuICAgKlxuICAgKiAgICBtYXRoLnJlKG1hdGguY29tcGxleCgnLTUuMmknKSkgLy8gcmV0dXJucyBudW1iZXIgMFxuICAgKiAgICBtYXRoLnJlKG1hdGguY29tcGxleCgyLjQpKSAgICAgLy8gcmV0dXJucyBudW1iZXIgMi40XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBpbSwgY29uaiwgYWJzLCBhcmdcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHhcbiAgICogICAgICAgICAgICBBIGNvbXBsZXggbnVtYmVyIG9yIGFycmF5IHdpdGggY29tcGxleCBudW1iZXJzXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSBUaGUgcmVhbCBwYXJ0IG9mIHhcbiAgICovXG4gIHZhciByZSA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICByZXR1cm4geDtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4O1xuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5yZTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgcmUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVSZSA9IGNyZWF0ZVJlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVEaXN0YW5jZSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2Rpc3RhbmNlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FkZFNjYWxhcicsICdzdWJ0cmFjdCcsICdkaXZpZGVTY2FsYXInLCAnbXVsdGlwbHlTY2FsYXInLCAndW5hcnlNaW51cycsICdzcXJ0JywgJ2FicyddO1xudmFyIGNyZWF0ZURpc3RhbmNlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGFkZFNjYWxhciA9IF9yZWYuYWRkU2NhbGFyLFxuICAgICAgc3VidHJhY3QgPSBfcmVmLnN1YnRyYWN0LFxuICAgICAgbXVsdGlwbHlTY2FsYXIgPSBfcmVmLm11bHRpcGx5U2NhbGFyLFxuICAgICAgZGl2aWRlU2NhbGFyID0gX3JlZi5kaXZpZGVTY2FsYXIsXG4gICAgICB1bmFyeU1pbnVzID0gX3JlZi51bmFyeU1pbnVzLFxuICAgICAgc3FydCA9IF9yZWYuc3FydCxcbiAgICAgIGFicyA9IF9yZWYuYWJzO1xuXG4gIC8qKlxuICAgICogQ2FsY3VsYXRlczpcbiAgICAqICAgIFRoZSBldWNsZWRpYW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gcG9pbnRzIGluIE4tZGltZW5zaW9uYWwgc3BhY2VzLlxuICAgICogICAgRGlzdGFuY2UgYmV0d2VlbiBwb2ludCBhbmQgYSBsaW5lIGluIDIgYW5kIDMgZGltZW5zaW9uYWwgc3BhY2VzLlxuICAgICogICAgUGFpcndpc2UgZGlzdGFuY2UgYmV0d2VlbiBhIHNldCBvZiAyRCBvciAzRCBwb2ludHNcbiAgICAqIE5PVEU6XG4gICAgKiAgICBXaGVuIHN1YnN0aXR1dGluZyBjb2VmZmljaWVudHMgb2YgYSBsaW5lKGEsIGIgYW5kIGMpLCB1c2UgYXggKyBieSArIGMgPSAwIGluc3RlYWQgb2YgYXggKyBieSA9IGNcbiAgICAqICAgIEZvciBwYXJhbWV0cmljIGVxdWF0aW9uIG9mIGEgM0QgbGluZSwgeDAsIHkwLCB6MCwgYSwgYiwgYyBhcmUgZnJvbTogKHjiiJJ4MCwgeeKIknkwLCB64oiSejApID0gdChhLCBiLCBjKVxuICAgICpcbiAgICAqIFN5bnRheDpcbiAgICAqICAgIG1hdGguZGlzdGFuY2UoW3gxLCB5MV0sIFt4MiwgeTJdKVxuICAgICotICAgbWF0aC5kaXN0YW5jZSh7cG9pbnRPbmVYOiA0LCBwb2ludE9uZVk6IDV9LCB7cG9pbnRUd29YOiAyLCBwb2ludFR3b1k6IDd9KVxuICAgICogICAgbWF0aC5kaXN0YW5jZShbeDEsIHkxLCB6MV0sIFt4MiwgeTIsIHoyXSlcbiAgICAqICAgIG1hdGguZGlzdGFuY2Uoe3BvaW50T25lWDogNCwgcG9pbnRPbmVZOiA1LCBwb2ludE9uZVo6IDh9LCB7cG9pbnRUd29YOiAyLCBwb2ludFR3b1k6IDcsIHBvaW50VHdvWjogOX0pXG4gICAgKiAgICBtYXRoLmRpc3RhbmNlKFt4MSwgeTEsIC4uLiAsIE4xXSwgW3gyLCB5MiwgLi4uICwgTjJdKVxuICAgICogICAgbWF0aC5kaXN0YW5jZShbW0FdLCBbQl0sIFtDXS4uLl0pXG4gICAgKiAgICBtYXRoLmRpc3RhbmNlKFt4MSwgeTFdLCBbTGluZVB0WDEsIExpbmVQdFkxXSwgW0xpbmVQdFgyLCBMaW5lUHRZMl0pXG4gICAgKiAgICBtYXRoLmRpc3RhbmNlKHtwb2ludFg6IDEsIHBvaW50WTogNH0sIHtsaW5lT25lUHRYOiA2LCBsaW5lT25lUHRZOiAzfSwge2xpbmVUd29QdFg6IDIsIGxpbmVUd29QdFk6IDh9KVxuICAgICogICAgbWF0aC5kaXN0YW5jZShbeDEsIHkxLCB6MV0sIFtMaW5lUHRYMSwgTGluZVB0WTEsIExpbmVQdFoxXSwgW0xpbmVQdFgyLCBMaW5lUHRZMiwgTGluZVB0WjJdKVxuICAgICogICAgbWF0aC5kaXN0YW5jZSh7cG9pbnRYOiAxLCBwb2ludFk6IDQsIHBvaW50WjogN30sIHtsaW5lT25lUHRYOiA2LCBsaW5lT25lUHRZOiAzLCBsaW5lT25lUHRaOiA0fSwge2xpbmVUd29QdFg6IDIsIGxpbmVUd29QdFk6IDgsIGxpbmVUd29QdFo6IDV9KVxuICAgICogICAgbWF0aC5kaXN0YW5jZShbeDEsIHkxXSwgW3hDb2VmZkxpbmUsIHlDb2VmZkxpbmUsIGNvbnN0YW50XSlcbiAgICAqICAgIG1hdGguZGlzdGFuY2Uoe3BvaW50WDogMTAsIHBvaW50WTogMTB9LCB7eENvZWZmTGluZTogOCwgeUNvZWZmTGluZTogMSwgY29uc3RhbnQ6IDN9KVxuICAgICogICAgbWF0aC5kaXN0YW5jZShbeDEsIHkxLCB6MV0sIFt4MCwgeTAsIHowLCBhLXRDb2VmZiwgYi10Q29lZmYsIGMtdENvZWZmXSkgcG9pbnQgYW5kIHBhcmFtZXRyaWMgZXF1YXRpb24gb2YgM0QgbGluZVxuICAgICogICAgbWF0aC5kaXN0YW5jZShbeCwgeSwgel0sIFt4MCwgeTAsIHowLCBhLCBiLCBjXSlcbiAgICAqICAgIG1hdGguZGlzdGFuY2Uoe3BvaW50WDogMiwgcG9pbnRZOiA1LCBwb2ludFo6IDl9LCB7eDA6IDQsIHkwOiA2LCB6MDogMywgYTogNCwgYjogMiwgYzogMH0pXG4gICAgKlxuICAgICogRXhhbXBsZXM6XG4gICAgKiAgICBtYXRoLmRpc3RhbmNlKFswLDBdLCBbNCw0XSkgICAgICAgICAgICAgICAgICAgICAvLyBSZXR1cm5zIDUuNjU2OVxuICAgICogICAgbWF0aC5kaXN0YW5jZShcbiAgICAqICAgICB7cG9pbnRPbmVYOiAwLCBwb2ludE9uZVk6IDB9LFxuICAgICogICAgIHtwb2ludFR3b1g6IDEwLCBwb2ludFR3b1k6IDEwfSkgICAgICAgICAgICAgICAgLy8gUmV0dXJucyAxNC4xNDIxMzU2MjM3MzA5NTFcbiAgICAqICAgIG1hdGguZGlzdGFuY2UoWzEsIDAsIDFdLCBbNCwgLTIsIDJdKSAgICAgICAgICAgIC8vIFJldHVybnMgMy43NDE2NlxuICAgICogICAgbWF0aC5kaXN0YW5jZShcbiAgICAqICAgICB7cG9pbnRPbmVYOiA0LCBwb2ludE9uZVk6IDUsIHBvaW50T25lWjogOH0sXG4gICAgKiAgICAge3BvaW50VHdvWDogMiwgcG9pbnRUd29ZOiA3LCBwb2ludFR3b1o6IDl9KSAgICAvLyBSZXR1cm5zIDNcbiAgICAqICAgIG1hdGguZGlzdGFuY2UoWzEsIDAsIDEsIDBdLCBbMCwgLTEsIDAsIC0xXSkgICAgIC8vIFJldHVybnMgMlxuICAgICogICAgbWF0aC5kaXN0YW5jZShbWzEsIDJdLCBbMSwgMl0sIFsxLCAzXV0pICAgICAgICAgLy8gUmV0dXJucyBbMCwgMSwgMV1cbiAgICAqICAgIG1hdGguZGlzdGFuY2UoW1sxLDIsNF0sIFsxLDIsNl0sIFs4LDEsM11dKSAgICAgIC8vIFJldHVybnMgWzIsIDcuMTQxNDI4NDI4NTQyODUsIDcuNjgxMTQ1NzQ3ODY4NjA4XVxuICAgICogICAgbWF0aC5kaXN0YW5jZShbMTAsIDEwXSwgWzgsIDEsIDNdKSAgICAgICAgICAgICAgLy8gUmV0dXJucyAxMS41MzUyMzAzMTY3OTYzODdcbiAgICAqICAgIG1hdGguZGlzdGFuY2UoWzEwLCAxMF0sIFsyLCAzXSwgWy04LCAwXSkgICAgICAgIC8vIFJldHVybnMgOC43NTk5NTMxMzAzNjI4NDdcbiAgICAqICAgIG1hdGguZGlzdGFuY2UoXG4gICAgKiAgICAge3BvaW50WDogMSwgcG9pbnRZOiA0fSxcbiAgICAqICAgICB7bGluZU9uZVB0WDogNiwgbGluZU9uZVB0WTogM30sXG4gICAgKiAgICAge2xpbmVUd29QdFg6IDIsIGxpbmVUd29QdFk6IDh9KSAgICAgICAgICAgICAgICAvLyBSZXR1cm5zIDIuNzIwNTQ5MzcyNjI0NzQ0XG4gICAgKiAgICBtYXRoLmRpc3RhbmNlKFsyLCAzLCAxXSwgWzEsIDEsIDIsIDUsIDAsIDFdKSAgICAvLyBSZXR1cm5zIDIuMzIwNDc3NDA0NDYxMjg1N1xuICAgICogICAgbWF0aC5kaXN0YW5jZShcbiAgICAqICAgICB7cG9pbnRYOiAyLCBwb2ludFk6IDMsIHBvaW50WjogMX0sXG4gICAgKiAgICAge3gwOiAxLCB5MDogMSwgejA6IDIsIGE6IDUsIGI6IDAsIGM6IDF9ICAgICAgICAvLyBSZXR1cm5zIDIuMzIwNDc3NDA0NDYxMjg1N1xuICAgICpcbiAgICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXggfCBPYmplY3R9IHggICAgQ28tb3JkaW5hdGVzIG9mIGZpcnN0IHBvaW50XG4gICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4IHwgT2JqZWN0fSB5ICAgIENvLW9yZGluYXRlcyBvZiBzZWNvbmQgcG9pbnRcbiAgICAqIEByZXR1cm4ge051bWJlciB8IEJpZ051bWJlcn0gUmV0dXJucyB0aGUgZGlzdGFuY2UgZnJvbSB0d28vdGhyZWUgcG9pbnRzXG4gICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ0FycmF5LCBBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5QXJyYXkoeCwgeSwgeikge1xuICAgICAgLy8gUG9pbnQgdG8gTGluZSAyRCAoeD1Qb2ludCwgeT1MaW5lUG9pbnQxLCB6PUxpbmVQb2ludDIpXG4gICAgICBpZiAoeC5sZW5ndGggPT09IDIgJiYgeS5sZW5ndGggPT09IDIgJiYgei5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgaWYgKCFfMmQoeCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSB3aXRoIDIgbnVtYmVycyBvciBCaWdOdW1iZXJzIGV4cGVjdGVkIGZvciBmaXJzdCBhcmd1bWVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFfMmQoeSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSB3aXRoIDIgbnVtYmVycyBvciBCaWdOdW1iZXJzIGV4cGVjdGVkIGZvciBzZWNvbmQgYXJndW1lbnQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghXzJkKHopKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgd2l0aCAyIG51bWJlcnMgb3IgQmlnTnVtYmVycyBleHBlY3RlZCBmb3IgdGhpcmQgYXJndW1lbnQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtID0gZGl2aWRlU2NhbGFyKHN1YnRyYWN0KHpbMV0sIHpbMF0pLCBzdWJ0cmFjdCh5WzFdLCB5WzBdKSk7XG4gICAgICAgIHZhciB4Q29lZmYgPSBtdWx0aXBseVNjYWxhcihtdWx0aXBseVNjYWxhcihtLCBtKSwgeVswXSk7XG4gICAgICAgIHZhciB5Q29lZmYgPSB1bmFyeU1pbnVzKG11bHRpcGx5U2NhbGFyKG0sIHlbMF0pKTtcbiAgICAgICAgdmFyIGNvbnN0YW50ID0geFsxXTtcbiAgICAgICAgcmV0dXJuIF9kaXN0YW5jZVBvaW50TGluZTJEKHhbMF0sIHhbMV0sIHhDb2VmZiwgeUNvZWZmLCBjb25zdGFudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIEFyZ3VtZW50czogVHJ5IGFnYWluJyk7XG4gICAgICB9XG4gICAgfSxcbiAgICAnT2JqZWN0LCBPYmplY3QsIE9iamVjdCc6IGZ1bmN0aW9uIE9iamVjdE9iamVjdE9iamVjdCh4LCB5LCB6KSB7XG4gICAgICBpZiAoT2JqZWN0LmtleXMoeCkubGVuZ3RoID09PSAyICYmIE9iamVjdC5rZXlzKHkpLmxlbmd0aCA9PT0gMiAmJiBPYmplY3Qua2V5cyh6KS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgaWYgKCFfMmQoeCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdWYWx1ZXMgb2YgcG9pbnRYIGFuZCBwb2ludFkgc2hvdWxkIGJlIG51bWJlcnMgb3IgQmlnTnVtYmVycycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFfMmQoeSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdWYWx1ZXMgb2YgbGluZU9uZVB0WCBhbmQgbGluZU9uZVB0WSBzaG91bGQgYmUgbnVtYmVycyBvciBCaWdOdW1iZXJzJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIV8yZCh6KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1ZhbHVlcyBvZiBsaW5lVHdvUHRYIGFuZCBsaW5lVHdvUHRZIHNob3VsZCBiZSBudW1iZXJzIG9yIEJpZ051bWJlcnMnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgncG9pbnRYJyBpbiB4ICYmICdwb2ludFknIGluIHggJiYgJ2xpbmVPbmVQdFgnIGluIHkgJiYgJ2xpbmVPbmVQdFknIGluIHkgJiYgJ2xpbmVUd29QdFgnIGluIHogJiYgJ2xpbmVUd29QdFknIGluIHopIHtcbiAgICAgICAgICB2YXIgbSA9IGRpdmlkZVNjYWxhcihzdWJ0cmFjdCh6LmxpbmVUd29QdFksIHoubGluZVR3b1B0WCksIHN1YnRyYWN0KHkubGluZU9uZVB0WSwgeS5saW5lT25lUHRYKSk7XG4gICAgICAgICAgdmFyIHhDb2VmZiA9IG11bHRpcGx5U2NhbGFyKG11bHRpcGx5U2NhbGFyKG0sIG0pLCB5LmxpbmVPbmVQdFgpO1xuICAgICAgICAgIHZhciB5Q29lZmYgPSB1bmFyeU1pbnVzKG11bHRpcGx5U2NhbGFyKG0sIHkubGluZU9uZVB0WCkpO1xuICAgICAgICAgIHZhciBjb25zdGFudCA9IHgucG9pbnRYO1xuICAgICAgICAgIHJldHVybiBfZGlzdGFuY2VQb2ludExpbmUyRCh4LnBvaW50WCwgeC5wb2ludFksIHhDb2VmZiwgeUNvZWZmLCBjb25zdGFudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignS2V5IG5hbWVzIGRvIG5vdCBtYXRjaCcpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIEFyZ3VtZW50czogVHJ5IGFnYWluJyk7XG4gICAgICB9XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyBQb2ludCB0byBMaW5lIDJEICh4PVtwb2ludFgsIHBvaW50WV0sIHk9W3gtY29lZmYsIHktY29lZmYsIGNvbnN0XSlcbiAgICAgIGlmICh4Lmxlbmd0aCA9PT0gMiAmJiB5Lmxlbmd0aCA9PT0gMykge1xuICAgICAgICBpZiAoIV8yZCh4KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IHdpdGggMiBudW1iZXJzIG9yIEJpZ051bWJlcnMgZXhwZWN0ZWQgZm9yIGZpcnN0IGFyZ3VtZW50Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIV8zZCh5KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IHdpdGggMyBudW1iZXJzIG9yIEJpZ051bWJlcnMgZXhwZWN0ZWQgZm9yIHNlY29uZCBhcmd1bWVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF9kaXN0YW5jZVBvaW50TGluZTJEKHhbMF0sIHhbMV0sIHlbMF0sIHlbMV0sIHlbMl0pO1xuICAgICAgfSBlbHNlIGlmICh4Lmxlbmd0aCA9PT0gMyAmJiB5Lmxlbmd0aCA9PT0gNikge1xuICAgICAgICAvLyBQb2ludCB0byBMaW5lIDNEXG4gICAgICAgIGlmICghXzNkKHgpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgd2l0aCAzIG51bWJlcnMgb3IgQmlnTnVtYmVycyBleHBlY3RlZCBmb3IgZmlyc3QgYXJndW1lbnQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghX3BhcmFtZXRyaWNMaW5lKHkpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgd2l0aCA2IG51bWJlcnMgb3IgQmlnTnVtYmVycyBleHBlY3RlZCBmb3Igc2Vjb25kIGFyZ3VtZW50Jyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gX2Rpc3RhbmNlUG9pbnRMaW5lM0QoeFswXSwgeFsxXSwgeFsyXSwgeVswXSwgeVsxXSwgeVsyXSwgeVszXSwgeVs0XSwgeVs1XSk7XG4gICAgICB9IGVsc2UgaWYgKHgubGVuZ3RoID09PSB5Lmxlbmd0aCAmJiB4Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gUG9pbnQgdG8gUG9pbnQgTi1kaW1lbnNpb25zXG4gICAgICAgIGlmICghX2NvbnRhaW5zT25seU51bWJlcnMoeCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBbGwgdmFsdWVzIG9mIGFuIGFycmF5IHNob3VsZCBiZSBudW1iZXJzIG9yIEJpZ051bWJlcnMnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghX2NvbnRhaW5zT25seU51bWJlcnMoeSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBbGwgdmFsdWVzIG9mIGFuIGFycmF5IHNob3VsZCBiZSBudW1iZXJzIG9yIEJpZ051bWJlcnMnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBfZXVjbGlkZWFuRGlzdGFuY2UoeCwgeSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIEFyZ3VtZW50czogVHJ5IGFnYWluJyk7XG4gICAgICB9XG4gICAgfSxcbiAgICAnT2JqZWN0LCBPYmplY3QnOiBmdW5jdGlvbiBPYmplY3RPYmplY3QoeCwgeSkge1xuICAgICAgaWYgKE9iamVjdC5rZXlzKHgpLmxlbmd0aCA9PT0gMiAmJiBPYmplY3Qua2V5cyh5KS5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgaWYgKCFfMmQoeCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdWYWx1ZXMgb2YgcG9pbnRYIGFuZCBwb2ludFkgc2hvdWxkIGJlIG51bWJlcnMgb3IgQmlnTnVtYmVycycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFfM2QoeSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdWYWx1ZXMgb2YgeENvZWZmTGluZSwgeUNvZWZmTGluZSBhbmQgY29uc3RhbnQgc2hvdWxkIGJlIG51bWJlcnMgb3IgQmlnTnVtYmVycycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdwb2ludFgnIGluIHggJiYgJ3BvaW50WScgaW4geCAmJiAneENvZWZmTGluZScgaW4geSAmJiAneUNvZWZmTGluZScgaW4geSAmJiAnY29uc3RhbnQnIGluIHkpIHtcbiAgICAgICAgICByZXR1cm4gX2Rpc3RhbmNlUG9pbnRMaW5lMkQoeC5wb2ludFgsIHgucG9pbnRZLCB5LnhDb2VmZkxpbmUsIHkueUNvZWZmTGluZSwgeS5jb25zdGFudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignS2V5IG5hbWVzIGRvIG5vdCBtYXRjaCcpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKE9iamVjdC5rZXlzKHgpLmxlbmd0aCA9PT0gMyAmJiBPYmplY3Qua2V5cyh5KS5sZW5ndGggPT09IDYpIHtcbiAgICAgICAgLy8gUG9pbnQgdG8gTGluZSAzRFxuICAgICAgICBpZiAoIV8zZCh4KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1ZhbHVlcyBvZiBwb2ludFgsIHBvaW50WSBhbmQgcG9pbnRaIHNob3VsZCBiZSBudW1iZXJzIG9yIEJpZ051bWJlcnMnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghX3BhcmFtZXRyaWNMaW5lKHkpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVmFsdWVzIG9mIHgwLCB5MCwgejAsIGEsIGIgYW5kIGMgc2hvdWxkIGJlIG51bWJlcnMgb3IgQmlnTnVtYmVycycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdwb2ludFgnIGluIHggJiYgJ3BvaW50WScgaW4geCAmJiAneDAnIGluIHkgJiYgJ3kwJyBpbiB5ICYmICd6MCcgaW4geSAmJiAnYScgaW4geSAmJiAnYicgaW4geSAmJiAnYycgaW4geSkge1xuICAgICAgICAgIHJldHVybiBfZGlzdGFuY2VQb2ludExpbmUzRCh4LnBvaW50WCwgeC5wb2ludFksIHgucG9pbnRaLCB5LngwLCB5LnkwLCB5LnowLCB5LmEsIHkuYiwgeS5jKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdLZXkgbmFtZXMgZG8gbm90IG1hdGNoJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoT2JqZWN0LmtleXMoeCkubGVuZ3RoID09PSAyICYmIE9iamVjdC5rZXlzKHkpLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAvLyBQb2ludCB0byBQb2ludCAyRFxuICAgICAgICBpZiAoIV8yZCh4KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1ZhbHVlcyBvZiBwb2ludE9uZVggYW5kIHBvaW50T25lWSBzaG91bGQgYmUgbnVtYmVycyBvciBCaWdOdW1iZXJzJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIV8yZCh5KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1ZhbHVlcyBvZiBwb2ludFR3b1ggYW5kIHBvaW50VHdvWSBzaG91bGQgYmUgbnVtYmVycyBvciBCaWdOdW1iZXJzJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJ3BvaW50T25lWCcgaW4geCAmJiAncG9pbnRPbmVZJyBpbiB4ICYmICdwb2ludFR3b1gnIGluIHkgJiYgJ3BvaW50VHdvWScgaW4geSkge1xuICAgICAgICAgIHJldHVybiBfZXVjbGlkZWFuRGlzdGFuY2UoW3gucG9pbnRPbmVYLCB4LnBvaW50T25lWV0sIFt5LnBvaW50VHdvWCwgeS5wb2ludFR3b1ldKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdLZXkgbmFtZXMgZG8gbm90IG1hdGNoJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoT2JqZWN0LmtleXMoeCkubGVuZ3RoID09PSAzICYmIE9iamVjdC5rZXlzKHkpLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAvLyBQb2ludCB0byBQb2ludCAzRFxuICAgICAgICBpZiAoIV8zZCh4KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1ZhbHVlcyBvZiBwb2ludE9uZVgsIHBvaW50T25lWSBhbmQgcG9pbnRPbmVaIHNob3VsZCBiZSBudW1iZXJzIG9yIEJpZ051bWJlcnMnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghXzNkKHkpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVmFsdWVzIG9mIHBvaW50VHdvWCwgcG9pbnRUd29ZIGFuZCBwb2ludFR3b1ogc2hvdWxkIGJlIG51bWJlcnMgb3IgQmlnTnVtYmVycycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdwb2ludE9uZVgnIGluIHggJiYgJ3BvaW50T25lWScgaW4geCAmJiAncG9pbnRPbmVaJyBpbiB4ICYmICdwb2ludFR3b1gnIGluIHkgJiYgJ3BvaW50VHdvWScgaW4geSAmJiAncG9pbnRUd29aJyBpbiB5KSB7XG4gICAgICAgICAgcmV0dXJuIF9ldWNsaWRlYW5EaXN0YW5jZShbeC5wb2ludE9uZVgsIHgucG9pbnRPbmVZLCB4LnBvaW50T25lWl0sIFt5LnBvaW50VHdvWCwgeS5wb2ludFR3b1ksIHkucG9pbnRUd29aXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignS2V5IG5hbWVzIGRvIG5vdCBtYXRjaCcpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIEFyZ3VtZW50czogVHJ5IGFnYWluJyk7XG4gICAgICB9XG4gICAgfSxcbiAgICBBcnJheTogZnVuY3Rpb24gQXJyYXkoYXJyKSB7XG4gICAgICBpZiAoIV9wYWlyd2lzZShhcnIpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0luY29ycmVjdCBhcnJheSBmb3JtYXQgZW50ZXJlZCBmb3IgcGFpcndpc2UgZGlzdGFuY2UgY2FsY3VsYXRpb24nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9kaXN0YW5jZVBhaXJ3aXNlKGFycik7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBfaXNOdW1iZXIoYSkge1xuICAgIC8vIGRpc3RhbmNlIHN1cHBvcnRzIG51bWJlcnMgYW5kIGJpZ251bWJlcnNcbiAgICByZXR1cm4gdHlwZW9mIGEgPT09ICdudW1iZXInIHx8ICgwLCBfaXMuaXNCaWdOdW1iZXIpKGEpO1xuICB9XG5cbiAgZnVuY3Rpb24gXzJkKGEpIHtcbiAgICAvLyBjaGVja3MgaWYgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgYXJlIGNvcnJlY3QgaW4gY291bnQgYW5kIGFyZSB2YWxpZCAoc2hvdWxkIGJlIG51bWJlcnMpXG4gICAgaWYgKGEuY29uc3RydWN0b3IgIT09IEFycmF5KSB7XG4gICAgICBhID0gX29iamVjdFRvQXJyYXkoYSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9pc051bWJlcihhWzBdKSAmJiBfaXNOdW1iZXIoYVsxXSk7XG4gIH1cblxuICBmdW5jdGlvbiBfM2QoYSkge1xuICAgIC8vIGNoZWNrcyBpZiB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBhcmUgY29ycmVjdCBpbiBjb3VudCBhbmQgYXJlIHZhbGlkIChzaG91bGQgYmUgbnVtYmVycylcbiAgICBpZiAoYS5jb25zdHJ1Y3RvciAhPT0gQXJyYXkpIHtcbiAgICAgIGEgPSBfb2JqZWN0VG9BcnJheShhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gX2lzTnVtYmVyKGFbMF0pICYmIF9pc051bWJlcihhWzFdKSAmJiBfaXNOdW1iZXIoYVsyXSk7XG4gIH1cblxuICBmdW5jdGlvbiBfY29udGFpbnNPbmx5TnVtYmVycyhhKSB7XG4gICAgLy8gY2hlY2tzIGlmIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIGFyZSBjb3JyZWN0IGluIGNvdW50IGFuZCBhcmUgdmFsaWQgKHNob3VsZCBiZSBudW1iZXJzKVxuICAgIGlmICghQXJyYXkuaXNBcnJheShhKSkge1xuICAgICAgYSA9IF9vYmplY3RUb0FycmF5KGEpO1xuICAgIH1cblxuICAgIHJldHVybiBhLmV2ZXJ5KF9pc051bWJlcik7XG4gIH1cblxuICBmdW5jdGlvbiBfcGFyYW1ldHJpY0xpbmUoYSkge1xuICAgIGlmIChhLmNvbnN0cnVjdG9yICE9PSBBcnJheSkge1xuICAgICAgYSA9IF9vYmplY3RUb0FycmF5KGEpO1xuICAgIH1cblxuICAgIHJldHVybiBfaXNOdW1iZXIoYVswXSkgJiYgX2lzTnVtYmVyKGFbMV0pICYmIF9pc051bWJlcihhWzJdKSAmJiBfaXNOdW1iZXIoYVszXSkgJiYgX2lzTnVtYmVyKGFbNF0pICYmIF9pc051bWJlcihhWzVdKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9vYmplY3RUb0FycmF5KG8pIHtcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG8pO1xuICAgIHZhciBhID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGEucHVzaChvW2tleXNbaV1dKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9wYWlyd2lzZShhKSB7XG4gICAgLy8gY2hlY2tzIGZvciB2YWxpZCBhcmd1bWVudHMgcGFzc2VkIHRvIF9kaXN0YW5jZVBhaXJ3aXNlKEFycmF5KVxuICAgIGlmIChhWzBdLmxlbmd0aCA9PT0gMiAmJiBfaXNOdW1iZXIoYVswXVswXSkgJiYgX2lzTnVtYmVyKGFbMF1bMV0pKSB7XG4gICAgICBpZiAoYS5zb21lKGZ1bmN0aW9uIChhSSkge1xuICAgICAgICByZXR1cm4gYUkubGVuZ3RoICE9PSAyIHx8ICFfaXNOdW1iZXIoYUlbMF0pIHx8ICFfaXNOdW1iZXIoYUlbMV0pO1xuICAgICAgfSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYVswXS5sZW5ndGggPT09IDMgJiYgX2lzTnVtYmVyKGFbMF1bMF0pICYmIF9pc051bWJlcihhWzBdWzFdKSAmJiBfaXNOdW1iZXIoYVswXVsyXSkpIHtcbiAgICAgIGlmIChhLnNvbWUoZnVuY3Rpb24gKGFJKSB7XG4gICAgICAgIHJldHVybiBhSS5sZW5ndGggIT09IDMgfHwgIV9pc051bWJlcihhSVswXSkgfHwgIV9pc051bWJlcihhSVsxXSkgfHwgIV9pc051bWJlcihhSVsyXSk7XG4gICAgICB9KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9kaXN0YW5jZVBvaW50TGluZTJEKHgsIHksIGEsIGIsIGMpIHtcbiAgICB2YXIgbnVtID0gYWJzKGFkZFNjYWxhcihhZGRTY2FsYXIobXVsdGlwbHlTY2FsYXIoYSwgeCksIG11bHRpcGx5U2NhbGFyKGIsIHkpKSwgYykpO1xuICAgIHZhciBkZW4gPSBzcXJ0KGFkZFNjYWxhcihtdWx0aXBseVNjYWxhcihhLCBhKSwgbXVsdGlwbHlTY2FsYXIoYiwgYikpKTtcbiAgICByZXR1cm4gZGl2aWRlU2NhbGFyKG51bSwgZGVuKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9kaXN0YW5jZVBvaW50TGluZTNEKHgsIHksIHosIHgwLCB5MCwgejAsIGEsIGIsIGMpIHtcbiAgICB2YXIgbnVtID0gW3N1YnRyYWN0KG11bHRpcGx5U2NhbGFyKHN1YnRyYWN0KHkwLCB5KSwgYyksIG11bHRpcGx5U2NhbGFyKHN1YnRyYWN0KHowLCB6KSwgYikpLCBzdWJ0cmFjdChtdWx0aXBseVNjYWxhcihzdWJ0cmFjdCh6MCwgeiksIGEpLCBtdWx0aXBseVNjYWxhcihzdWJ0cmFjdCh4MCwgeCksIGMpKSwgc3VidHJhY3QobXVsdGlwbHlTY2FsYXIoc3VidHJhY3QoeDAsIHgpLCBiKSwgbXVsdGlwbHlTY2FsYXIoc3VidHJhY3QoeTAsIHkpLCBhKSldO1xuICAgIG51bSA9IHNxcnQoYWRkU2NhbGFyKGFkZFNjYWxhcihtdWx0aXBseVNjYWxhcihudW1bMF0sIG51bVswXSksIG11bHRpcGx5U2NhbGFyKG51bVsxXSwgbnVtWzFdKSksIG11bHRpcGx5U2NhbGFyKG51bVsyXSwgbnVtWzJdKSkpO1xuICAgIHZhciBkZW4gPSBzcXJ0KGFkZFNjYWxhcihhZGRTY2FsYXIobXVsdGlwbHlTY2FsYXIoYSwgYSksIG11bHRpcGx5U2NhbGFyKGIsIGIpKSwgbXVsdGlwbHlTY2FsYXIoYywgYykpKTtcbiAgICByZXR1cm4gZGl2aWRlU2NhbGFyKG51bSwgZGVuKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9ldWNsaWRlYW5EaXN0YW5jZSh4LCB5KSB7XG4gICAgdmFyIHZlY3RvclNpemUgPSB4Lmxlbmd0aDtcbiAgICB2YXIgcmVzdWx0ID0gMDtcbiAgICB2YXIgZGlmZiA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZlY3RvclNpemU7IGkrKykge1xuICAgICAgZGlmZiA9IHN1YnRyYWN0KHhbaV0sIHlbaV0pO1xuICAgICAgcmVzdWx0ID0gYWRkU2NhbGFyKG11bHRpcGx5U2NhbGFyKGRpZmYsIGRpZmYpLCByZXN1bHQpO1xuICAgIH1cblxuICAgIHJldHVybiBzcXJ0KHJlc3VsdCk7XG4gIH1cblxuICBmdW5jdGlvbiBfZGlzdGFuY2VQYWlyd2lzZShhKSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBwb2ludEEgPSBbXTtcbiAgICB2YXIgcG9pbnRCID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICBmb3IgKHZhciBqID0gaSArIDE7IGogPCBhLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChhWzBdLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIHBvaW50QSA9IFthW2ldWzBdLCBhW2ldWzFdXTtcbiAgICAgICAgICBwb2ludEIgPSBbYVtqXVswXSwgYVtqXVsxXV07XG4gICAgICAgIH0gZWxzZSBpZiAoYVswXS5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICBwb2ludEEgPSBbYVtpXVswXSwgYVtpXVsxXSwgYVtpXVsyXV07XG4gICAgICAgICAgcG9pbnRCID0gW2Fbal1bMF0sIGFbal1bMV0sIGFbal1bMl1dO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzdWx0LnB1c2goX2V1Y2xpZGVhbkRpc3RhbmNlKHBvaW50QSwgcG9pbnRCKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZURpc3RhbmNlID0gY3JlYXRlRGlzdGFuY2U7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUludGVyc2VjdCA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2ludGVyc2VjdCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnYWJzJywgJ2FkZCcsICdhZGRTY2FsYXInLCAnbWF0cml4JywgJ211bHRpcGx5JywgJ211bHRpcGx5U2NhbGFyJywgJ2RpdmlkZVNjYWxhcicsICdzdWJ0cmFjdCcsICdzbWFsbGVyJywgJ2VxdWFsU2NhbGFyJ107XG52YXIgY3JlYXRlSW50ZXJzZWN0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgYWJzID0gX3JlZi5hYnMsXG4gICAgICBhZGQgPSBfcmVmLmFkZCxcbiAgICAgIGFkZFNjYWxhciA9IF9yZWYuYWRkU2NhbGFyLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHksXG4gICAgICBtdWx0aXBseVNjYWxhciA9IF9yZWYubXVsdGlwbHlTY2FsYXIsXG4gICAgICBkaXZpZGVTY2FsYXIgPSBfcmVmLmRpdmlkZVNjYWxhcixcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCxcbiAgICAgIHNtYWxsZXIgPSBfcmVmLnNtYWxsZXIsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXI7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIHBvaW50IG9mIGludGVyc2VjdGlvbiBvZiB0d28gbGluZXMgaW4gdHdvIG9yIHRocmVlIGRpbWVuc2lvbnNcbiAgICogYW5kIG9mIGEgbGluZSBhbmQgYSBwbGFuZSBpbiB0aHJlZSBkaW1lbnNpb25zLiBUaGUgaW5wdXRzIGFyZSBpbiB0aGUgZm9ybSBvZlxuICAgKiBhcnJheXMgb3IgMSBkaW1lbnNpb25hbCBtYXRyaWNlcy4gVGhlIGxpbmUgaW50ZXJzZWN0aW9uIGZ1bmN0aW9ucyByZXR1cm4gbnVsbFxuICAgKiBpZiB0aGUgbGluZXMgZG8gbm90IG1lZXQuXG4gICAqXG4gICAqIE5vdGU6IEZpbGwgdGhlIHBsYW5lIGNvZWZmaWNpZW50cyBhcyBgeCArIHkgKyB6ID0gY2AgYW5kIG5vdCBhcyBgeCArIHkgKyB6ICsgYyA9IDBgLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguaW50ZXJzZWN0KGVuZFBvaW50MUxpbmUxLCBlbmRQb2ludDJMaW5lMSwgZW5kUG9pbnQxTGluZTIsIGVuZFBvaW50MkxpbmUyKVxuICAgKiAgICBtYXRoLmludGVyc2VjdChlbmRQb2ludDEsIGVuZFBvaW50MiwgcGxhbmVDb2VmZmljaWVudHMpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmludGVyc2VjdChbMCwgMF0sIFsxMCwgMTBdLCBbMTAsIDBdLCBbMCwgMTBdKSAgICAgICAgICAgICAgLy8gUmV0dXJucyBbNSwgNV1cbiAgICogICAgbWF0aC5pbnRlcnNlY3QoWzAsIDAsIDBdLCBbMTAsIDEwLCAwXSwgWzEwLCAwLCAwXSwgWzAsIDEwLCAwXSkgIC8vIFJldHVybnMgWzUsIDUsIDBdXG4gICAqICAgIG1hdGguaW50ZXJzZWN0KFsxLCAwLCAxXSwgIFs0LCAtMiwgMl0sIFsxLCAxLCAxLCA2XSkgICAgICAgICAgICAvLyBSZXR1cm5zIFs3LCAtNCwgM11cbiAgICpcbiAgICogQHBhcmFtICB7QXJyYXkgfCBNYXRyaXh9IHcgICBDby1vcmRpbmF0ZXMgb2YgZmlyc3QgZW5kLXBvaW50IG9mIGZpcnN0IGxpbmVcbiAgICogQHBhcmFtICB7QXJyYXkgfCBNYXRyaXh9IHggICBDby1vcmRpbmF0ZXMgb2Ygc2Vjb25kIGVuZC1wb2ludCBvZiBmaXJzdCBsaW5lXG4gICAqIEBwYXJhbSAge0FycmF5IHwgTWF0cml4fSB5ICAgQ28tb3JkaW5hdGVzIG9mIGZpcnN0IGVuZC1wb2ludCBvZiBzZWNvbmQgbGluZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9SIENvLWVmZmljaWVudHMgb2YgdGhlIHBsYW5lJ3MgZXF1YXRpb25cbiAgICogQHBhcmFtICB7QXJyYXkgfCBNYXRyaXh9IHogICBDby1vcmRpbmF0ZXMgb2Ygc2Vjb25kIGVuZC1wb2ludCBvZiBzZWNvbmQgbGluZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9SIG51bGwgaWYgdGhlIGNhbGN1bGF0aW9uIGlzIGZvciBsaW5lIGFuZCBwbGFuZVxuICAgKiBAcmV0dXJuIHtBcnJheX0gICAgICAgICAgICAgIFJldHVybnMgdGhlIHBvaW50IG9mIGludGVyc2VjdGlvbiBvZiBsaW5lcy9saW5lcy1wbGFuZXNcbiAgICovXG4gIHZhciBpbnRlcnNlY3QgPSB0eXBlZCgnaW50ZXJzZWN0Jywge1xuICAgICdBcnJheSwgQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheUFycmF5KHgsIHksIHBsYW5lKSB7XG4gICAgICBpZiAoIV8zZCh4KSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSB3aXRoIDMgbnVtYmVycyBvciBCaWdOdW1iZXJzIGV4cGVjdGVkIGZvciBmaXJzdCBhcmd1bWVudCcpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIV8zZCh5KSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSB3aXRoIDMgbnVtYmVycyBvciBCaWdOdW1iZXJzIGV4cGVjdGVkIGZvciBzZWNvbmQgYXJndW1lbnQnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFfNGQocGxhbmUpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IHdpdGggNCBudW1iZXJzIGV4cGVjdGVkIGFzIHRoaXJkIGFyZ3VtZW50Jyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfaW50ZXJzZWN0TGluZVBsYW5lKHhbMF0sIHhbMV0sIHhbMl0sIHlbMF0sIHlbMV0sIHlbMl0sIHBsYW5lWzBdLCBwbGFuZVsxXSwgcGxhbmVbMl0sIHBsYW5lWzNdKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXksIEFycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXlBcnJheUFycmF5KHcsIHgsIHksIHopIHtcbiAgICAgIGlmICh3Lmxlbmd0aCA9PT0gMikge1xuICAgICAgICBpZiAoIV8yZCh3KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IHdpdGggMiBudW1iZXJzIG9yIEJpZ051bWJlcnMgZXhwZWN0ZWQgZm9yIGZpcnN0IGFyZ3VtZW50Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIV8yZCh4KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IHdpdGggMiBudW1iZXJzIG9yIEJpZ051bWJlcnMgZXhwZWN0ZWQgZm9yIHNlY29uZCBhcmd1bWVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFfMmQoeSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSB3aXRoIDIgbnVtYmVycyBvciBCaWdOdW1iZXJzIGV4cGVjdGVkIGZvciB0aGlyZCBhcmd1bWVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFfMmQoeikpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSB3aXRoIDIgbnVtYmVycyBvciBCaWdOdW1iZXJzIGV4cGVjdGVkIGZvciBmb3VydGggYXJndW1lbnQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBfaW50ZXJzZWN0MmQodywgeCwgeSwgeik7XG4gICAgICB9IGVsc2UgaWYgKHcubGVuZ3RoID09PSAzKSB7XG4gICAgICAgIGlmICghXzNkKHcpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgd2l0aCAzIG51bWJlcnMgb3IgQmlnTnVtYmVycyBleHBlY3RlZCBmb3IgZmlyc3QgYXJndW1lbnQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghXzNkKHgpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgd2l0aCAzIG51bWJlcnMgb3IgQmlnTnVtYmVycyBleHBlY3RlZCBmb3Igc2Vjb25kIGFyZ3VtZW50Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIV8zZCh5KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IHdpdGggMyBudW1iZXJzIG9yIEJpZ051bWJlcnMgZXhwZWN0ZWQgZm9yIHRoaXJkIGFyZ3VtZW50Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIV8zZCh6KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IHdpdGggMyBudW1iZXJzIG9yIEJpZ051bWJlcnMgZXhwZWN0ZWQgZm9yIGZvdXJ0aCBhcmd1bWVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF9pbnRlcnNlY3QzZCh3WzBdLCB3WzFdLCB3WzJdLCB4WzBdLCB4WzFdLCB4WzJdLCB5WzBdLCB5WzFdLCB5WzJdLCB6WzBdLCB6WzFdLCB6WzJdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5cyB3aXRoIHR3byBvciB0aGVlIGRpbWVuc2lvbmFsIHBvaW50cyBleHBlY3RlZCcpO1xuICAgICAgfVxuICAgIH0sXG4gICAgJ01hdHJpeCwgTWF0cml4LCBNYXRyaXgnOiBmdW5jdGlvbiBNYXRyaXhNYXRyaXhNYXRyaXgoeCwgeSwgcGxhbmUpIHtcbiAgICAgIHJldHVybiBtYXRyaXgoaW50ZXJzZWN0KHgudmFsdWVPZigpLCB5LnZhbHVlT2YoKSwgcGxhbmUudmFsdWVPZigpKSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBNYXRyaXgsIE1hdHJpeCwgTWF0cml4JzogZnVuY3Rpb24gTWF0cml4TWF0cml4TWF0cml4TWF0cml4KHcsIHgsIHksIHopIHtcbiAgICAgIC8vIFRPRE86IG91dHB1dCBtYXRyaXggdHlwZSBzaG91bGQgbWF0Y2ggaW5wdXQgbWF0cml4IHR5cGVcbiAgICAgIHJldHVybiBtYXRyaXgoaW50ZXJzZWN0KHcudmFsdWVPZigpLCB4LnZhbHVlT2YoKSwgeS52YWx1ZU9mKCksIHoudmFsdWVPZigpKSk7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBfaXNOdW1lcmljKGEpIHtcbiAgICAvLyBpbnRlcnNlY3Qgc3VwcG9ydHMgbnVtYmVycyBhbmQgYmlnbnVtYmVyc1xuICAgIHJldHVybiB0eXBlb2YgYSA9PT0gJ251bWJlcicgfHwgKDAsIF9pcy5pc0JpZ051bWJlcikoYSk7XG4gIH1cblxuICBmdW5jdGlvbiBfMmQoeCkge1xuICAgIHJldHVybiB4Lmxlbmd0aCA9PT0gMiAmJiBfaXNOdW1lcmljKHhbMF0pICYmIF9pc051bWVyaWMoeFsxXSk7XG4gIH1cblxuICBmdW5jdGlvbiBfM2QoeCkge1xuICAgIHJldHVybiB4Lmxlbmd0aCA9PT0gMyAmJiBfaXNOdW1lcmljKHhbMF0pICYmIF9pc051bWVyaWMoeFsxXSkgJiYgX2lzTnVtZXJpYyh4WzJdKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF80ZCh4KSB7XG4gICAgcmV0dXJuIHgubGVuZ3RoID09PSA0ICYmIF9pc051bWVyaWMoeFswXSkgJiYgX2lzTnVtZXJpYyh4WzFdKSAmJiBfaXNOdW1lcmljKHhbMl0pICYmIF9pc051bWVyaWMoeFszXSk7XG4gIH1cblxuICBmdW5jdGlvbiBfaW50ZXJzZWN0MmQocDFhLCBwMWIsIHAyYSwgcDJiKSB7XG4gICAgdmFyIG8xID0gcDFhO1xuICAgIHZhciBvMiA9IHAyYTtcbiAgICB2YXIgZDEgPSBzdWJ0cmFjdChvMSwgcDFiKTtcbiAgICB2YXIgZDIgPSBzdWJ0cmFjdChvMiwgcDJiKTtcbiAgICB2YXIgZGV0ID0gc3VidHJhY3QobXVsdGlwbHlTY2FsYXIoZDFbMF0sIGQyWzFdKSwgbXVsdGlwbHlTY2FsYXIoZDJbMF0sIGQxWzFdKSk7XG5cbiAgICBpZiAoc21hbGxlcihhYnMoZGV0KSwgY29uZmlnLmVwc2lsb24pKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgZDIwbzExID0gbXVsdGlwbHlTY2FsYXIoZDJbMF0sIG8xWzFdKTtcbiAgICB2YXIgZDIxbzEwID0gbXVsdGlwbHlTY2FsYXIoZDJbMV0sIG8xWzBdKTtcbiAgICB2YXIgZDIwbzIxID0gbXVsdGlwbHlTY2FsYXIoZDJbMF0sIG8yWzFdKTtcbiAgICB2YXIgZDIxbzIwID0gbXVsdGlwbHlTY2FsYXIoZDJbMV0sIG8yWzBdKTtcbiAgICB2YXIgdCA9IGRpdmlkZVNjYWxhcihhZGRTY2FsYXIoc3VidHJhY3Qoc3VidHJhY3QoZDIwbzExLCBkMjFvMTApLCBkMjBvMjEpLCBkMjFvMjApLCBkZXQpO1xuICAgIHJldHVybiBhZGQobXVsdGlwbHkoZDEsIHQpLCBvMSk7XG4gIH1cblxuICBmdW5jdGlvbiBfaW50ZXJzZWN0M2RIZWxwZXIoYSwgYiwgYywgZCwgZSwgZiwgZywgaCwgaSwgaiwgaywgbCkge1xuICAgIC8vIChhIC0gYikqKGMgLSBkKSArIChlIC0gZikqKGcgLSBoKSArIChpIC0gaikqKGsgLSBsKVxuICAgIHZhciBhZGQxID0gbXVsdGlwbHlTY2FsYXIoc3VidHJhY3QoYSwgYiksIHN1YnRyYWN0KGMsIGQpKTtcbiAgICB2YXIgYWRkMiA9IG11bHRpcGx5U2NhbGFyKHN1YnRyYWN0KGUsIGYpLCBzdWJ0cmFjdChnLCBoKSk7XG4gICAgdmFyIGFkZDMgPSBtdWx0aXBseVNjYWxhcihzdWJ0cmFjdChpLCBqKSwgc3VidHJhY3QoaywgbCkpO1xuICAgIHJldHVybiBhZGRTY2FsYXIoYWRkU2NhbGFyKGFkZDEsIGFkZDIpLCBhZGQzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9pbnRlcnNlY3QzZCh4MSwgeTEsIHoxLCB4MiwgeTIsIHoyLCB4MywgeTMsIHozLCB4NCwgeTQsIHo0KSB7XG4gICAgdmFyIGQxMzQzID0gX2ludGVyc2VjdDNkSGVscGVyKHgxLCB4MywgeDQsIHgzLCB5MSwgeTMsIHk0LCB5MywgejEsIHozLCB6NCwgejMpO1xuXG4gICAgdmFyIGQ0MzIxID0gX2ludGVyc2VjdDNkSGVscGVyKHg0LCB4MywgeDIsIHgxLCB5NCwgeTMsIHkyLCB5MSwgejQsIHozLCB6MiwgejEpO1xuXG4gICAgdmFyIGQxMzIxID0gX2ludGVyc2VjdDNkSGVscGVyKHgxLCB4MywgeDIsIHgxLCB5MSwgeTMsIHkyLCB5MSwgejEsIHozLCB6MiwgejEpO1xuXG4gICAgdmFyIGQ0MzQzID0gX2ludGVyc2VjdDNkSGVscGVyKHg0LCB4MywgeDQsIHgzLCB5NCwgeTMsIHk0LCB5MywgejQsIHozLCB6NCwgejMpO1xuXG4gICAgdmFyIGQyMTIxID0gX2ludGVyc2VjdDNkSGVscGVyKHgyLCB4MSwgeDIsIHgxLCB5MiwgeTEsIHkyLCB5MSwgejIsIHoxLCB6MiwgejEpO1xuXG4gICAgdmFyIHRhID0gZGl2aWRlU2NhbGFyKHN1YnRyYWN0KG11bHRpcGx5U2NhbGFyKGQxMzQzLCBkNDMyMSksIG11bHRpcGx5U2NhbGFyKGQxMzIxLCBkNDM0MykpLCBzdWJ0cmFjdChtdWx0aXBseVNjYWxhcihkMjEyMSwgZDQzNDMpLCBtdWx0aXBseVNjYWxhcihkNDMyMSwgZDQzMjEpKSk7XG4gICAgdmFyIHRiID0gZGl2aWRlU2NhbGFyKGFkZFNjYWxhcihkMTM0MywgbXVsdGlwbHlTY2FsYXIodGEsIGQ0MzIxKSksIGQ0MzQzKTtcbiAgICB2YXIgcGF4ID0gYWRkU2NhbGFyKHgxLCBtdWx0aXBseVNjYWxhcih0YSwgc3VidHJhY3QoeDIsIHgxKSkpO1xuICAgIHZhciBwYXkgPSBhZGRTY2FsYXIoeTEsIG11bHRpcGx5U2NhbGFyKHRhLCBzdWJ0cmFjdCh5MiwgeTEpKSk7XG4gICAgdmFyIHBheiA9IGFkZFNjYWxhcih6MSwgbXVsdGlwbHlTY2FsYXIodGEsIHN1YnRyYWN0KHoyLCB6MSkpKTtcbiAgICB2YXIgcGJ4ID0gYWRkU2NhbGFyKHgzLCBtdWx0aXBseVNjYWxhcih0Yiwgc3VidHJhY3QoeDQsIHgzKSkpO1xuICAgIHZhciBwYnkgPSBhZGRTY2FsYXIoeTMsIG11bHRpcGx5U2NhbGFyKHRiLCBzdWJ0cmFjdCh5NCwgeTMpKSk7XG4gICAgdmFyIHBieiA9IGFkZFNjYWxhcih6MywgbXVsdGlwbHlTY2FsYXIodGIsIHN1YnRyYWN0KHo0LCB6MykpKTtcblxuICAgIGlmIChlcXVhbFNjYWxhcihwYXgsIHBieCkgJiYgZXF1YWxTY2FsYXIocGF5LCBwYnkpICYmIGVxdWFsU2NhbGFyKHBheiwgcGJ6KSkge1xuICAgICAgcmV0dXJuIFtwYXgsIHBheSwgcGF6XTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gX2ludGVyc2VjdExpbmVQbGFuZSh4MSwgeTEsIHoxLCB4MiwgeTIsIHoyLCB4LCB5LCB6LCBjKSB7XG4gICAgdmFyIHgxeCA9IG11bHRpcGx5U2NhbGFyKHgxLCB4KTtcbiAgICB2YXIgeDJ4ID0gbXVsdGlwbHlTY2FsYXIoeDIsIHgpO1xuICAgIHZhciB5MXkgPSBtdWx0aXBseVNjYWxhcih5MSwgeSk7XG4gICAgdmFyIHkyeSA9IG11bHRpcGx5U2NhbGFyKHkyLCB5KTtcbiAgICB2YXIgejF6ID0gbXVsdGlwbHlTY2FsYXIoejEsIHopO1xuICAgIHZhciB6MnogPSBtdWx0aXBseVNjYWxhcih6Miwgeik7XG4gICAgdmFyIHQgPSBkaXZpZGVTY2FsYXIoc3VidHJhY3Qoc3VidHJhY3Qoc3VidHJhY3QoYywgeDF4KSwgeTF5KSwgejF6KSwgc3VidHJhY3Qoc3VidHJhY3Qoc3VidHJhY3QoYWRkU2NhbGFyKGFkZFNjYWxhcih4MngsIHkyeSksIHoyeiksIHgxeCksIHkxeSksIHoxeikpO1xuICAgIHZhciBweCA9IGFkZFNjYWxhcih4MSwgbXVsdGlwbHlTY2FsYXIodCwgc3VidHJhY3QoeDIsIHgxKSkpO1xuICAgIHZhciBweSA9IGFkZFNjYWxhcih5MSwgbXVsdGlwbHlTY2FsYXIodCwgc3VidHJhY3QoeTIsIHkxKSkpO1xuICAgIHZhciBweiA9IGFkZFNjYWxhcih6MSwgbXVsdGlwbHlTY2FsYXIodCwgc3VidHJhY3QoejIsIHoxKSkpO1xuICAgIHJldHVybiBbcHgsIHB5LCBwel07IC8vIFRPRE86IEFkZCBjYXNlcyB3aGVuIGxpbmUgaXMgcGFyYWxsZWwgdG8gdGhlIHBsYW5lOlxuICAgIC8vICAgICAgIChhKSBubyBpbnRlcnNlY3Rpb24sXG4gICAgLy8gICAgICAgKGIpIGxpbmUgY29udGFpbmVkIGluIHBsYW5lXG4gIH1cblxuICByZXR1cm4gaW50ZXJzZWN0O1xufSk7XG5leHBvcnRzLmNyZWF0ZUludGVyc2VjdCA9IGNyZWF0ZUludGVyc2VjdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQW5kID0gdm9pZCAwO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wMlwiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTExXCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA2XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdhbmQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2VxdWFsU2NhbGFyJywgJ3plcm9zJywgJ25vdCddO1xudmFyIGNyZWF0ZUFuZCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIHplcm9zID0gX3JlZi56ZXJvcyxcbiAgICAgIG5vdCA9IF9yZWYubm90O1xuICB2YXIgYWxnb3JpdGhtMDIgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNiA9ICgwLCBfYWxnb3JpdGhtNS5jcmVhdGVBbGdvcml0aG0wNikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMSA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0xMSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogTG9naWNhbCBgYW5kYC4gVGVzdCB3aGV0aGVyIHR3byB2YWx1ZXMgYXJlIGJvdGggZGVmaW5lZCB3aXRoIGEgbm9uemVyby9ub25lbXB0eSB2YWx1ZS5cbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmFuZCh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5hbmQoMiwgNCkgICAvLyByZXR1cm5zIHRydWVcbiAgICpcbiAgICogICAgYSA9IFsyLCAwLCAwXVxuICAgKiAgICBiID0gWzMsIDcsIDBdXG4gICAqICAgIGMgPSAwXG4gICAqXG4gICAqICAgIG1hdGguYW5kKGEsIGIpICAgLy8gcmV0dXJucyBbdHJ1ZSwgZmFsc2UsIGZhbHNlXVxuICAgKiAgICBtYXRoLmFuZChhLCBjKSAgIC8vIHJldHVybnMgW2ZhbHNlLCBmYWxzZSwgZmFsc2VdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBub3QsIG9yLCB4b3JcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCBGaXJzdCB2YWx1ZSB0byBjaGVja1xuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB5IFNlY29uZCB2YWx1ZSB0byBjaGVja1xuICAgKiBAcmV0dXJuIHtib29sZWFuIHwgQXJyYXkgfCBNYXRyaXh9XG4gICAqICAgICAgICAgICAgUmV0dXJucyB0cnVlIHdoZW4gYm90aCBpbnB1dHMgYXJlIGRlZmluZWQgd2l0aCBhIG5vbnplcm8vbm9uZW1wdHkgdmFsdWUuXG4gICAqL1xuXG4gIHZhciBhbmQgPSB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciwgbnVtYmVyJzogX251bWJlci5hbmROdW1iZXIsXG4gICAgJ0NvbXBsZXgsIENvbXBsZXgnOiBmdW5jdGlvbiBDb21wbGV4Q29tcGxleCh4LCB5KSB7XG4gICAgICByZXR1cm4gKHgucmUgIT09IDAgfHwgeC5pbSAhPT0gMCkgJiYgKHkucmUgIT09IDAgfHwgeS5pbSAhPT0gMCk7XG4gICAgfSxcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuICF4LmlzWmVybygpICYmICF5LmlzWmVybygpICYmICF4LmlzTmFOKCkgJiYgIXkuaXNOYU4oKTtcbiAgICB9LFxuICAgICdVbml0LCBVbml0JzogZnVuY3Rpb24gVW5pdFVuaXQoeCwgeSkge1xuICAgICAgcmV0dXJuIGFuZCh4LnZhbHVlIHx8IDAsIHkudmFsdWUgfHwgMCk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTA2KHgsIHksIGFuZCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDIoeSwgeCwgYW5kLCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHgsIHksIGFuZCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIGFuZCk7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYW5kKG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbmQobWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFuZCh4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhclxuICAgICAgaWYgKG5vdCh5KSkge1xuICAgICAgICAvLyByZXR1cm4gemVybyBtYXRyaXhcbiAgICAgICAgcmV0dXJuIHplcm9zKHguc2l6ZSgpLCB4LnN0b3JhZ2UoKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhbGdvcml0aG0xMSh4LCB5LCBhbmQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgLy8gY2hlY2sgc2NhbGFyXG4gICAgICBpZiAobm90KHkpKSB7XG4gICAgICAgIC8vIHJldHVybiB6ZXJvIG1hdHJpeFxuICAgICAgICByZXR1cm4gemVyb3MoeC5zaXplKCksIHguc3RvcmFnZSgpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIGFuZCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ2FueSwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gYW55U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhclxuICAgICAgaWYgKG5vdCh4KSkge1xuICAgICAgICAvLyByZXR1cm4gemVybyBtYXRyaXhcbiAgICAgICAgcmV0dXJuIHplcm9zKHguc2l6ZSgpLCB4LnN0b3JhZ2UoKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhbGdvcml0aG0xMSh5LCB4LCBhbmQsIHRydWUpO1xuICAgIH0sXG4gICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyBjaGVjayBzY2FsYXJcbiAgICAgIGlmIChub3QoeCkpIHtcbiAgICAgICAgLy8gcmV0dXJuIHplcm8gbWF0cml4XG4gICAgICAgIHJldHVybiB6ZXJvcyh4LnNpemUoKSwgeC5zdG9yYWdlKCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgYW5kLCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFuZChtYXRyaXgoeCksIHkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFuZCh4LCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYW5kO1xufSk7XG5leHBvcnRzLmNyZWF0ZUFuZCA9IGNyZWF0ZUFuZDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTm90ID0gdm9pZCAwO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnbm90JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlTm90ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogTG9naWNhbCBgbm90YC4gRmxpcHMgYm9vbGVhbiB2YWx1ZSBvZiBhIGdpdmVuIHBhcmFtZXRlci5cbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLm5vdCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5ub3QoMikgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGgubm90KDApICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGgubm90KHRydWUpICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKlxuICAgKiAgICBhID0gWzIsIC03LCAwXVxuICAgKiAgICBtYXRoLm5vdChhKSAgICAgIC8vIHJldHVybnMgW2ZhbHNlLCBmYWxzZSwgdHJ1ZV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGFuZCwgb3IsIHhvclxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4IEZpcnN0IHZhbHVlIHRvIGNoZWNrXG4gICAqIEByZXR1cm4ge2Jvb2xlYW4gfCBBcnJheSB8IE1hdHJpeH1cbiAgICogICAgICAgICAgICBSZXR1cm5zIHRydWUgd2hlbiBpbnB1dCBpcyBhIHplcm8gb3IgZW1wdHkgdmFsdWUuXG4gICAqL1xuICB2YXIgbm90ID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogX251bWJlci5ub3ROdW1iZXIsXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5yZSA9PT0gMCAmJiB4LmltID09PSAwO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHguaXNaZXJvKCkgfHwgeC5pc05hTigpO1xuICAgIH0sXG4gICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7XG4gICAgICByZXR1cm4geC52YWx1ZSAhPT0gbnVsbCA/IG5vdCh4LnZhbHVlKSA6IHRydWU7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIG5vdCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG5vdDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVOb3QgPSBjcmVhdGVOb3Q7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU9yID0gdm9pZCAwO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wM1wiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEyXCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA1XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdvcic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnZXF1YWxTY2FsYXInLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVPciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTAzID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMDMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNSA9ICgwLCBfYWxnb3JpdGhtNS5jcmVhdGVBbGdvcml0aG0wNSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMiA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0xMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogTG9naWNhbCBgb3JgLiBUZXN0IGlmIGF0IGxlYXN0IG9uZSB2YWx1ZSBpcyBkZWZpbmVkIHdpdGggYSBub256ZXJvL25vbmVtcHR5IHZhbHVlLlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgub3IoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgub3IoMiwgNCkgICAvLyByZXR1cm5zIHRydWVcbiAgICpcbiAgICogICAgYSA9IFsyLCA1LCAwXVxuICAgKiAgICBiID0gWzAsIDIyLCAwXVxuICAgKiAgICBjID0gMFxuICAgKlxuICAgKiAgICBtYXRoLm9yKGEsIGIpICAgLy8gcmV0dXJucyBbdHJ1ZSwgdHJ1ZSwgZmFsc2VdXG4gICAqICAgIG1hdGgub3IoYiwgYykgICAvLyByZXR1cm5zIFtmYWxzZSwgdHJ1ZSwgZmFsc2VdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBhbmQsIG5vdCwgeG9yXG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggRmlyc3QgdmFsdWUgdG8gY2hlY2tcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geSBTZWNvbmQgdmFsdWUgdG8gY2hlY2tcbiAgICogQHJldHVybiB7Ym9vbGVhbiB8IEFycmF5IHwgTWF0cml4fVxuICAgKiAgICAgICAgICAgIFJldHVybnMgdHJ1ZSB3aGVuIG9uZSBvZiB0aGUgaW5wdXRzIGlzIGRlZmluZWQgd2l0aCBhIG5vbnplcm8vbm9uZW1wdHkgdmFsdWUuXG4gICAqL1xuXG4gIHZhciBvciA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfbnVtYmVyLm9yTnVtYmVyLFxuICAgICdDb21wbGV4LCBDb21wbGV4JzogZnVuY3Rpb24gQ29tcGxleENvbXBsZXgoeCwgeSkge1xuICAgICAgcmV0dXJuIHgucmUgIT09IDAgfHwgeC5pbSAhPT0gMCB8fCB5LnJlICE9PSAwIHx8IHkuaW0gIT09IDA7XG4gICAgfSxcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuICF4LmlzWmVybygpICYmICF4LmlzTmFOKCkgfHwgIXkuaXNaZXJvKCkgJiYgIXkuaXNOYU4oKTtcbiAgICB9LFxuICAgICdVbml0LCBVbml0JzogZnVuY3Rpb24gVW5pdFVuaXQoeCwgeSkge1xuICAgICAgcmV0dXJuIG9yKHgudmFsdWUgfHwgMCwgeS52YWx1ZSB8fCAwKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDUoeCwgeSwgb3IpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeSwgeCwgb3IsIHRydWUpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeCwgeSwgb3IsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBvcik7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gb3IobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIG9yKG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBvcih4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih4LCB5LCBvciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBEZW5zZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgb3IsIGZhbHNlKTtcbiAgICB9LFxuICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeSwgeCwgb3IsIHRydWUpO1xuICAgIH0sXG4gICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgb3IsIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBhbnknOiBmdW5jdGlvbiBBcnJheUFueSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCBvciwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgb3IsIHRydWUpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gb3I7XG59KTtcbmV4cG9ydHMuY3JlYXRlT3IgPSBjcmVhdGVPcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlWG9yID0gdm9pZCAwO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wM1wiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA3XCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTJcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xM1wiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICd4b3InO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlWG9yID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMDMgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTA3ID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTA3KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEyID0gKDAsIF9hbGdvcml0aG0zLmNyZWF0ZUFsZ29yaXRobTEyKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEzID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTEzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTUuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBMb2dpY2FsIGB4b3JgLiBUZXN0IHdoZXRoZXIgb25lIGFuZCBvbmx5IG9uZSB2YWx1ZSBpcyBkZWZpbmVkIHdpdGggYSBub256ZXJvL25vbmVtcHR5IHZhbHVlLlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgueG9yKHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnhvcigyLCA0KSAgIC8vIHJldHVybnMgZmFsc2VcbiAgICpcbiAgICogICAgYSA9IFsyLCAwLCAwXVxuICAgKiAgICBiID0gWzIsIDcsIDBdXG4gICAqICAgIGMgPSAwXG4gICAqXG4gICAqICAgIG1hdGgueG9yKGEsIGIpICAgLy8gcmV0dXJucyBbZmFsc2UsIHRydWUsIGZhbHNlXVxuICAgKiAgICBtYXRoLnhvcihhLCBjKSAgIC8vIHJldHVybnMgW3RydWUsIGZhbHNlLCBmYWxzZV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGFuZCwgbm90LCBvclxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4IEZpcnN0IHZhbHVlIHRvIGNoZWNrXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHkgU2Vjb25kIHZhbHVlIHRvIGNoZWNrXG4gICAqIEByZXR1cm4ge2Jvb2xlYW4gfCBBcnJheSB8IE1hdHJpeH1cbiAgICogICAgICAgICAgICBSZXR1cm5zIHRydWUgd2hlbiBvbmUgYW5kIG9ubHkgb25lIGlucHV0IGlzIGRlZmluZWQgd2l0aCBhIG5vbnplcm8vbm9uZW1wdHkgdmFsdWUuXG4gICAqL1xuXG4gIHZhciB4b3IgPSB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciwgbnVtYmVyJzogX251bWJlci54b3JOdW1iZXIsXG4gICAgJ0NvbXBsZXgsIENvbXBsZXgnOiBmdW5jdGlvbiBDb21wbGV4Q29tcGxleCh4LCB5KSB7XG4gICAgICByZXR1cm4gKHgucmUgIT09IDAgfHwgeC5pbSAhPT0gMCkgIT09ICh5LnJlICE9PSAwIHx8IHkuaW0gIT09IDApO1xuICAgIH0sXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQmlnTnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiAoIXguaXNaZXJvKCkgJiYgIXguaXNOYU4oKSkgIT09ICgheS5pc1plcm8oKSAmJiAheS5pc05hTigpKTtcbiAgICB9LFxuICAgICdVbml0LCBVbml0JzogZnVuY3Rpb24gVW5pdFVuaXQoeCwgeSkge1xuICAgICAgcmV0dXJuIHhvcih4LnZhbHVlIHx8IDAsIHkudmFsdWUgfHwgMCk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTA3KHgsIHksIHhvcik7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh5LCB4LCB4b3IsIHRydWUpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeCwgeSwgeG9yLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTMoeCwgeSwgeG9yKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiB4b3IobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHhvcihtYXRyaXgoeCksIHkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4geG9yKHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEyKHgsIHksIHhvciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBEZW5zZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgeG9yLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnYW55LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEyKHksIHgsIHhvciwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnYW55LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIGFueURlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCB4b3IsIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBhbnknOiBmdW5jdGlvbiBBcnJheUFueSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCB4b3IsIGZhbHNlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnYW55LCBBcnJheSc6IGZ1bmN0aW9uIGFueUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeSksIHgsIHhvciwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB4b3I7XG59KTtcbmV4cG9ydHMuY3JlYXRlWG9yID0gY3JlYXRlWG9yOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBcHBseSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfSW5kZXhFcnJvciA9IHJlcXVpcmUoXCIuLi8uLi9lcnJvci9JbmRleEVycm9yXCIpO1xuXG52YXIgbmFtZSA9ICdhcHBseSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdpc0ludGVnZXInXTtcbnZhciBjcmVhdGVBcHBseSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBpc0ludGVnZXIgPSBfcmVmLmlzSW50ZWdlcjtcblxuICAvKipcbiAgICogQXBwbHkgYSBmdW5jdGlvbiB0aGF0IG1hcHMgYW4gYXJyYXkgdG8gYSBzY2FsYXJcbiAgICogYWxvbmcgYSBnaXZlbiBheGlzIG9mIGEgbWF0cml4IG9yIGFycmF5LlxuICAgKiBSZXR1cm5zIGEgbmV3IG1hdHJpeCBvciBhcnJheSB3aXRoIG9uZSBsZXNzIGRpbWVuc2lvbiB0aGFuIHRoZSBpbnB1dC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5hcHBseShBLCBkaW0sIGNhbGxiYWNrKVxuICAgKlxuICAgKiBXaGVyZTpcbiAgICpcbiAgICogLSBgZGltOiBudW1iZXJgIGlzIGEgemVyby1iYXNlZCBkaW1lbnNpb24gb3ZlciB3aGljaCB0byBjb25jYXRlbmF0ZSB0aGUgbWF0cmljZXMuXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBjb25zdCBBID0gW1sxLCAyXSwgWzMsIDRdXVxuICAgKiAgICBjb25zdCBzdW0gPSBtYXRoLnN1bVxuICAgKlxuICAgKiAgICBtYXRoLmFwcGx5KEEsIDAsIHN1bSkgICAgICAgICAgICAgLy8gcmV0dXJucyBbNCwgNl1cbiAgICogICAgbWF0aC5hcHBseShBLCAxLCBzdW0pICAgICAgICAgICAgIC8vIHJldHVybnMgWzMsIDddXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBtYXAsIGZpbHRlciwgZm9yRWFjaFxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSBhcnJheSAgIFRoZSBpbnB1dCBNYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRpbSAgICAgICAgICAgICBUaGUgZGltZW5zaW9uIGFsb25nIHdoaWNoIHRoZSBjYWxsYmFjayBpcyBhcHBsaWVkXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgICAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgYXBwbGllZC4gVGhpcyBGdW5jdGlvblxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZCB0YWtlIGFuIGFycmF5IG9yIDEtZCBtYXRyaXggYXMgYW4gaW5wdXQgYW5kXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEgbnVtYmVyLlxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gcmVzICAgIFRoZSByZXNpZHVhbCBtYXRyaXggd2l0aCB0aGUgZnVuY3Rpb24gYXBwbGllZCBvdmVyIHNvbWUgZGltZW5zaW9uLlxuICAgKi9cbiAgdmFyIGFwcGx5ID0gdHlwZWQobmFtZSwge1xuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyLCBmdW5jdGlvbic6IGZ1bmN0aW9uIEFycmF5TWF0cml4TnVtYmVyQmlnTnVtYmVyRnVuY3Rpb24obWF0LCBkaW0sIGNhbGxiYWNrKSB7XG4gICAgICBpZiAoIWlzSW50ZWdlcihkaW0pKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludGVnZXIgbnVtYmVyIGV4cGVjdGVkIGZvciBkaW1lbnNpb24nKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHNpemUgPSBBcnJheS5pc0FycmF5KG1hdCkgPyAoMCwgX2FycmF5LmFycmF5U2l6ZSkobWF0KSA6IG1hdC5zaXplKCk7XG5cbiAgICAgIGlmIChkaW0gPCAwIHx8IGRpbSA+PSBzaXplLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgX0luZGV4RXJyb3IuSW5kZXhFcnJvcihkaW0sIHNpemUubGVuZ3RoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCgwLCBfaXMuaXNNYXRyaXgpKG1hdCkpIHtcbiAgICAgICAgcmV0dXJuIG1hdC5jcmVhdGUoX2FwcGx5KG1hdC52YWx1ZU9mKCksIGRpbSwgY2FsbGJhY2spKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBfYXBwbHkobWF0LCBkaW0sIGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYXBwbHk7XG59KTtcbi8qKlxuICogUmVjdXJzaXZlbHkgcmVkdWNlIGEgbWF0cml4XG4gKiBAcGFyYW0ge0FycmF5fSBtYXRcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaW1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJucyB7QXJyYXl9IHJldFxuICogQHByaXZhdGVcbiAqL1xuXG5leHBvcnRzLmNyZWF0ZUFwcGx5ID0gY3JlYXRlQXBwbHk7XG5cbmZ1bmN0aW9uIF9hcHBseShtYXQsIGRpbSwgY2FsbGJhY2spIHtcbiAgdmFyIGksIHJldCwgdHJhbjtcblxuICBpZiAoZGltIDw9IDApIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkobWF0WzBdKSkge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKG1hdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyYW4gPSBfc3dpdGNoKG1hdCk7XG4gICAgICByZXQgPSBbXTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IHRyYW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmV0W2ldID0gX2FwcGx5KHRyYW5baV0sIGRpbSAtIDEsIGNhbGxiYWNrKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0ID0gW107XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbWF0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXRbaV0gPSBfYXBwbHkobWF0W2ldLCBkaW0gLSAxLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxufVxuLyoqXG4gKiBUcmFuc3Bvc2UgYSBtYXRyaXhcbiAqIEBwYXJhbSB7QXJyYXl9IG1hdFxuICogQHJldHVybnMge0FycmF5fSByZXRcbiAqIEBwcml2YXRlXG4gKi9cblxuXG5mdW5jdGlvbiBfc3dpdGNoKG1hdCkge1xuICB2YXIgSSA9IG1hdC5sZW5ndGg7XG4gIHZhciBKID0gbWF0WzBdLmxlbmd0aDtcbiAgdmFyIGksIGo7XG4gIHZhciByZXQgPSBbXTtcblxuICBmb3IgKGogPSAwOyBqIDwgSjsgaisrKSB7XG4gICAgdmFyIHRtcCA9IFtdO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IEk7IGkrKykge1xuICAgICAgdG1wLnB1c2gobWF0W2ldW2pdKTtcbiAgICB9XG5cbiAgICByZXQucHVzaCh0bXApO1xuICB9XG5cbiAgcmV0dXJuIHJldDtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ29sdW1uID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgbmFtZSA9ICdjb2x1bW4nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnSW5kZXgnLCAnbWF0cml4JywgJ3JhbmdlJ107XG52YXIgY3JlYXRlQ29sdW1uID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIEluZGV4ID0gX3JlZi5JbmRleCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgcmFuZ2UgPSBfcmVmLnJhbmdlO1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBjb2x1bW4gZnJvbSBhIE1hdHJpeC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5jb2x1bW4odmFsdWUsIGluZGV4KVxuICAgKlxuICAgKiBFeGFtcGxlOlxuICAgKlxuICAgKiAgICAgLy8gZ2V0IGEgY29sdW1uXG4gICAqICAgICBjb25zdCBkID0gW1sxLCAyXSwgWzMsIDRdXVxuICAgKiAgICAgbWF0aC5jb2x1bW4oZCwgMSkgLy8gcmV0dXJucyBbWzJdLCBbNF1dXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgcm93XG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXggfSB2YWx1ZSAgIEFuIGFycmF5IG9yIG1hdHJpeFxuICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uICAgICAgICAgICBUaGUgaW5kZXggb2YgdGhlIGNvbHVtblxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gICAgICAgICBUaGUgcmV0cmlldmVkIGNvbHVtblxuICAgKi9cbiAgdmFyIGNvbHVtbiA9IHR5cGVkKG5hbWUsIHtcbiAgICAnTWF0cml4LCBudW1iZXInOiBfY29sdW1uLFxuICAgICdBcnJheSwgbnVtYmVyJzogZnVuY3Rpb24gQXJyYXlOdW1iZXIodmFsdWUsIGNvbHVtbikge1xuICAgICAgcmV0dXJuIF9jb2x1bW4obWF0cml4KCgwLCBfb2JqZWN0LmNsb25lKSh2YWx1ZSkpLCBjb2x1bW4pLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY29sdW1uO1xuICAvKipcbiAgICogUmV0cmlldmUgYSBjb2x1bW4gb2YgYSBtYXRyaXhcbiAgICogQHBhcmFtIHtNYXRyaXggfSB2YWx1ZSAgQSBtYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiAgVGhlIGluZGV4IG9mIHRoZSBjb2x1bW5cbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgVGhlIHJldHJpZXZlZCBjb2x1bW5cbiAgICovXG5cbiAgZnVuY3Rpb24gX2NvbHVtbih2YWx1ZSwgY29sdW1uKSB7XG4gICAgLy8gY2hlY2sgZGltZW5zaW9uc1xuICAgIGlmICh2YWx1ZS5zaXplKCkubGVuZ3RoICE9PSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ09ubHkgdHdvIGRpbWVuc2lvbmFsIG1hdHJpeCBpcyBzdXBwb3J0ZWQnKTtcbiAgICB9XG5cbiAgICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKGNvbHVtbiwgdmFsdWUuc2l6ZSgpWzFdKTtcbiAgICB2YXIgcm93UmFuZ2UgPSByYW5nZSgwLCB2YWx1ZS5zaXplKClbMF0pO1xuICAgIHZhciBpbmRleCA9IG5ldyBJbmRleChyb3dSYW5nZSwgY29sdW1uKTtcbiAgICByZXR1cm4gdmFsdWUuc3Vic2V0KGluZGV4KTtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZUNvbHVtbiA9IGNyZWF0ZUNvbHVtbjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ29uY2F0ID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfSW5kZXhFcnJvciA9IHJlcXVpcmUoXCIuLi8uLi9lcnJvci9JbmRleEVycm9yXCIpO1xuXG52YXIgX0RpbWVuc2lvbkVycm9yID0gcmVxdWlyZShcIi4uLy4uL2Vycm9yL0RpbWVuc2lvbkVycm9yXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnY29uY2F0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdpc0ludGVnZXInXTtcbnZhciBjcmVhdGVDb25jYXQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBpc0ludGVnZXIgPSBfcmVmLmlzSW50ZWdlcjtcblxuICAvKipcbiAgICogQ29uY2F0ZW5hdGUgdHdvIG9yIG1vcmUgbWF0cmljZXMuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguY29uY2F0KEEsIEIsIEMsIC4uLilcbiAgICogICAgIG1hdGguY29uY2F0KEEsIEIsIEMsIC4uLiwgZGltKVxuICAgKlxuICAgKiBXaGVyZTpcbiAgICpcbiAgICogLSBgZGltOiBudW1iZXJgIGlzIGEgemVyby1iYXNlZCBkaW1lbnNpb24gb3ZlciB3aGljaCB0byBjb25jYXRlbmF0ZSB0aGUgbWF0cmljZXMuXG4gICAqICAgQnkgZGVmYXVsdCB0aGUgbGFzdCBkaW1lbnNpb24gb2YgdGhlIG1hdHJpY2VzLlxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgY29uc3QgQSA9IFtbMSwgMl0sIFs1LCA2XV1cbiAgICogICAgY29uc3QgQiA9IFtbMywgNF0sIFs3LCA4XV1cbiAgICpcbiAgICogICAgbWF0aC5jb25jYXQoQSwgQikgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIFtbMSwgMiwgMywgNF0sIFs1LCA2LCA3LCA4XV1cbiAgICogICAgbWF0aC5jb25jYXQoQSwgQiwgMCkgICAgICAgICAgICAgICAvLyByZXR1cm5zIFtbMSwgMl0sIFs1LCA2XSwgWzMsIDRdLCBbNywgOF1dXG4gICAqICAgIG1hdGguY29uY2F0KCdoZWxsbycsICcgJywgJ3dvcmxkJykgLy8gcmV0dXJucyAnaGVsbG8gd29ybGQnXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBzaXplLCBzcXVlZXplLCBzdWJzZXQsIHRyYW5zcG9zZVxuICAgKlxuICAgKiBAcGFyYW0gey4uLiBBcnJheSB8IE1hdHJpeH0gYXJncyAgICAgVHdvIG9yIG1vcmUgbWF0cmljZXNcbiAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXh9IENvbmNhdGVuYXRlZCBtYXRyaXhcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgLy8gVE9ETzogY2hhbmdlIHNpZ25hdHVyZSB0byAnLi4uQXJyYXkgfCBNYXRyaXgsIGRpbT8nIHdoZW4gc3VwcG9ydGVkXG4gICAgJy4uLkFycmF5IHwgTWF0cml4IHwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhOdW1iZXJCaWdOdW1iZXIoYXJncykge1xuICAgICAgdmFyIGk7XG4gICAgICB2YXIgbGVuID0gYXJncy5sZW5ndGg7XG4gICAgICB2YXIgZGltID0gLTE7IC8vIHplcm8tYmFzZWQgZGltZW5zaW9uXG5cbiAgICAgIHZhciBwcmV2RGltO1xuICAgICAgdmFyIGFzTWF0cml4ID0gZmFsc2U7XG4gICAgICB2YXIgbWF0cmljZXMgPSBbXTsgLy8gY29udGFpbnMgbXVsdGkgZGltZW5zaW9uYWwgYXJyYXlzXG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICB2YXIgYXJnID0gYXJnc1tpXTsgLy8gdGVzdCB3aGV0aGVyIHdlIG5lZWQgdG8gcmV0dXJuIGEgTWF0cml4IChpZiBub3Qgd2UgcmV0dXJuIGFuIEFycmF5KVxuXG4gICAgICAgIGlmICgoMCwgX2lzLmlzTWF0cml4KShhcmcpKSB7XG4gICAgICAgICAgYXNNYXRyaXggPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKGFyZykgfHwgKDAsIF9pcy5pc0JpZ051bWJlcikoYXJnKSkge1xuICAgICAgICAgIGlmIChpICE9PSBsZW4gLSAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RpbWVuc2lvbiBtdXN0IGJlIHNwZWNpZmllZCBhcyBsYXN0IGFyZ3VtZW50Jyk7XG4gICAgICAgICAgfSAvLyBsYXN0IGFyZ3VtZW50IGNvbnRhaW5zIHRoZSBkaW1lbnNpb24gb24gd2hpY2ggdG8gY29uY2F0ZW5hdGVcblxuXG4gICAgICAgICAgcHJldkRpbSA9IGRpbTtcbiAgICAgICAgICBkaW0gPSBhcmcudmFsdWVPZigpOyAvLyBjaGFuZ2UgQmlnTnVtYmVyIHRvIG51bWJlclxuXG4gICAgICAgICAgaWYgKCFpc0ludGVnZXIoZGltKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW50ZWdlciBudW1iZXIgZXhwZWN0ZWQgZm9yIGRpbWVuc2lvbicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChkaW0gPCAwIHx8IGkgPiAwICYmIGRpbSA+IHByZXZEaW0pIHtcbiAgICAgICAgICAgIC8vIFRPRE86IHdvdWxkIGJlIG1vcmUgY2xlYXIgd2hlbiB0aHJvd2luZyBhIERpbWVuc2lvbkVycm9yIGhlcmVcbiAgICAgICAgICAgIHRocm93IG5ldyBfSW5kZXhFcnJvci5JbmRleEVycm9yKGRpbSwgcHJldkRpbSArIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB0aGlzIGlzIGEgbWF0cml4IG9yIGFycmF5XG4gICAgICAgICAgdmFyIG0gPSAoMCwgX29iamVjdC5jbG9uZSkoYXJnKS52YWx1ZU9mKCk7XG4gICAgICAgICAgdmFyIHNpemUgPSAoMCwgX2FycmF5LmFycmF5U2l6ZSkobSk7XG4gICAgICAgICAgbWF0cmljZXNbaV0gPSBtO1xuICAgICAgICAgIHByZXZEaW0gPSBkaW07XG4gICAgICAgICAgZGltID0gc2l6ZS5sZW5ndGggLSAxOyAvLyB2ZXJpZnkgd2hldGhlciBlYWNoIG9mIHRoZSBtYXRyaWNlcyBoYXMgdGhlIHNhbWUgbnVtYmVyIG9mIGRpbWVuc2lvbnNcblxuICAgICAgICAgIGlmIChpID4gMCAmJiBkaW0gIT09IHByZXZEaW0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3IocHJldkRpbSArIDEsIGRpbSArIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobWF0cmljZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQXQgbGVhc3Qgb25lIG1hdHJpeCBleHBlY3RlZCcpO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVzID0gbWF0cmljZXMuc2hpZnQoKTtcblxuICAgICAgd2hpbGUgKG1hdHJpY2VzLmxlbmd0aCkge1xuICAgICAgICByZXMgPSBfY29uY2F0KHJlcywgbWF0cmljZXMuc2hpZnQoKSwgZGltLCAwKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFzTWF0cml4ID8gbWF0cml4KHJlcykgOiByZXM7XG4gICAgfSxcbiAgICAnLi4uc3RyaW5nJzogZnVuY3Rpb24gc3RyaW5nKGFyZ3MpIHtcbiAgICAgIHJldHVybiBhcmdzLmpvaW4oJycpO1xuICAgIH1cbiAgfSk7XG59KTtcbi8qKlxuICogUmVjdXJzaXZlbHkgY29uY2F0ZW5hdGUgdHdvIG1hdHJpY2VzLlxuICogVGhlIGNvbnRlbnRzIG9mIHRoZSBtYXRyaWNlcyBpcyBub3QgY2xvbmVkLlxuICogQHBhcmFtIHtBcnJheX0gYSAgICAgICAgICAgICBNdWx0aSBkaW1lbnNpb25hbCBhcnJheVxuICogQHBhcmFtIHtBcnJheX0gYiAgICAgICAgICAgICBNdWx0aSBkaW1lbnNpb25hbCBhcnJheVxuICogQHBhcmFtIHtudW1iZXJ9IGNvbmNhdERpbSAgICBUaGUgZGltZW5zaW9uIG9uIHdoaWNoIHRvIGNvbmNhdGVuYXRlICh6ZXJvLWJhc2VkKVxuICogQHBhcmFtIHtudW1iZXJ9IGRpbSAgICAgICAgICBUaGUgY3VycmVudCBkaW0gKHplcm8tYmFzZWQpXG4gKiBAcmV0dXJuIHtBcnJheX0gYyAgICAgICAgICAgIFRoZSBjb25jYXRlbmF0ZWQgbWF0cml4XG4gKiBAcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMuY3JlYXRlQ29uY2F0ID0gY3JlYXRlQ29uY2F0O1xuXG5mdW5jdGlvbiBfY29uY2F0KGEsIGIsIGNvbmNhdERpbSwgZGltKSB7XG4gIGlmIChkaW0gPCBjb25jYXREaW0pIHtcbiAgICAvLyByZWN1cnNlIGludG8gbmV4dCBkaW1lbnNpb25cbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKGEubGVuZ3RoLCBiLmxlbmd0aCk7XG4gICAgfVxuXG4gICAgdmFyIGMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgY1tpXSA9IF9jb25jYXQoYVtpXSwgYltpXSwgY29uY2F0RGltLCBkaW0gKyAxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYztcbiAgfSBlbHNlIHtcbiAgICAvLyBjb25jYXRlbmF0ZSB0aGlzIGRpbWVuc2lvblxuICAgIHJldHVybiBhLmNvbmNhdChiKTtcbiAgfVxufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDcm9zcyA9IHZvaWQgMDtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2Nyb3NzJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdzdWJ0cmFjdCcsICdtdWx0aXBseSddO1xudmFyIGNyZWF0ZUNyb3NzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgc3VidHJhY3QgPSBfcmVmLnN1YnRyYWN0LFxuICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGNyb3NzIHByb2R1Y3QgZm9yIHR3byB2ZWN0b3JzIGluIHRocmVlIGRpbWVuc2lvbmFsIHNwYWNlLlxuICAgKiBUaGUgY3Jvc3MgcHJvZHVjdCBvZiBgQSA9IFthMSwgYTIsIGEzXWAgYW5kIGBCID0gW2IxLCBiMiwgYjNdYCBpcyBkZWZpbmVkXG4gICAqIGFzOlxuICAgKlxuICAgKiAgICBjcm9zcyhBLCBCKSA9IFtcbiAgICogICAgICBhMiAqIGIzIC0gYTMgKiBiMixcbiAgICogICAgICBhMyAqIGIxIC0gYTEgKiBiMyxcbiAgICogICAgICBhMSAqIGIyIC0gYTIgKiBiMVxuICAgKiAgICBdXG4gICAqXG4gICAqIElmIG9uZSBvZiB0aGUgaW5wdXQgdmVjdG9ycyBoYXMgYSBkaW1lbnNpb24gZ3JlYXRlciB0aGFuIDEsIHRoZSBvdXRwdXRcbiAgICogdmVjdG9yIHdpbGwgYmUgYSAxeDMgKDItZGltZW5zaW9uYWwpIG1hdHJpeC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmNyb3NzKHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmNyb3NzKFsxLCAxLCAwXSwgICBbMCwgMSwgMV0pICAgICAgIC8vIFJldHVybnMgWzEsIC0xLCAxXVxuICAgKiAgICBtYXRoLmNyb3NzKFszLCAtMywgMV0sICBbNCwgOSwgMl0pICAgICAgIC8vIFJldHVybnMgWy0xNSwgLTIsIDM5XVxuICAgKiAgICBtYXRoLmNyb3NzKFsyLCAzLCA0XSwgICBbNSwgNiwgN10pICAgICAgIC8vIFJldHVybnMgWy0zLCA2LCAtM11cbiAgICogICAgbWF0aC5jcm9zcyhbWzEsIDIsIDNdXSwgW1s0XSwgWzVdLCBbNl1dKSAvLyBSZXR1cm5zIFtbLTMsIDYsIC0zXV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGRvdCwgbXVsdGlwbHlcbiAgICpcbiAgICogQHBhcmFtICB7QXJyYXkgfCBNYXRyaXh9IHggICBGaXJzdCB2ZWN0b3JcbiAgICogQHBhcmFtICB7QXJyYXkgfCBNYXRyaXh9IHkgICBTZWNvbmQgdmVjdG9yXG4gICAqIEByZXR1cm4ge0FycmF5IHwgTWF0cml4fSAgICAgUmV0dXJucyB0aGUgY3Jvc3MgcHJvZHVjdCBvZiBgeGAgYW5kIGB5YFxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnTWF0cml4LCBNYXRyaXgnOiBmdW5jdGlvbiBNYXRyaXhNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIG1hdHJpeChfY3Jvc3MoeC50b0FycmF5KCksIHkudG9BcnJheSgpKSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIHJldHVybiBtYXRyaXgoX2Nyb3NzKHgudG9BcnJheSgpLCB5KSk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBtYXRyaXgoX2Nyb3NzKHgsIHkudG9BcnJheSgpKSk7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogX2Nyb3NzXG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBjcm9zcyBwcm9kdWN0IGZvciB0d28gYXJyYXlzXG4gICAqIEBwYXJhbSB7QXJyYXl9IHggIEZpcnN0IHZlY3RvclxuICAgKiBAcGFyYW0ge0FycmF5fSB5ICBTZWNvbmQgdmVjdG9yXG4gICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY3Jvc3MgcHJvZHVjdCBvZiB4IGFuZCB5XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9jcm9zcyh4LCB5KSB7XG4gICAgdmFyIGhpZ2hlc3REaW1lbnNpb24gPSBNYXRoLm1heCgoMCwgX2FycmF5LmFycmF5U2l6ZSkoeCkubGVuZ3RoLCAoMCwgX2FycmF5LmFycmF5U2l6ZSkoeSkubGVuZ3RoKTtcbiAgICB4ID0gKDAsIF9hcnJheS5zcXVlZXplKSh4KTtcbiAgICB5ID0gKDAsIF9hcnJheS5zcXVlZXplKSh5KTtcbiAgICB2YXIgeFNpemUgPSAoMCwgX2FycmF5LmFycmF5U2l6ZSkoeCk7XG4gICAgdmFyIHlTaXplID0gKDAsIF9hcnJheS5hcnJheVNpemUpKHkpO1xuXG4gICAgaWYgKHhTaXplLmxlbmd0aCAhPT0gMSB8fCB5U2l6ZS5sZW5ndGggIT09IDEgfHwgeFNpemVbMF0gIT09IDMgfHwgeVNpemVbMF0gIT09IDMpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdWZWN0b3JzIHdpdGggbGVuZ3RoIDMgZXhwZWN0ZWQgJyArICcoU2l6ZSBBID0gWycgKyB4U2l6ZS5qb2luKCcsICcpICsgJ10sIEIgPSBbJyArIHlTaXplLmpvaW4oJywgJykgKyAnXSknKTtcbiAgICB9XG5cbiAgICB2YXIgcHJvZHVjdCA9IFtzdWJ0cmFjdChtdWx0aXBseSh4WzFdLCB5WzJdKSwgbXVsdGlwbHkoeFsyXSwgeVsxXSkpLCBzdWJ0cmFjdChtdWx0aXBseSh4WzJdLCB5WzBdKSwgbXVsdGlwbHkoeFswXSwgeVsyXSkpLCBzdWJ0cmFjdChtdWx0aXBseSh4WzBdLCB5WzFdKSwgbXVsdGlwbHkoeFsxXSwgeVswXSkpXTtcblxuICAgIGlmIChoaWdoZXN0RGltZW5zaW9uID4gMSkge1xuICAgICAgcmV0dXJuIFtwcm9kdWN0XTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHByb2R1Y3Q7XG4gICAgfVxuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlQ3Jvc3MgPSBjcmVhdGVDcm9zczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ3RyYW5zcG9zZSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2N0cmFuc3Bvc2UnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAndHJhbnNwb3NlJywgJ2NvbmonXTtcbnZhciBjcmVhdGVDdHJhbnNwb3NlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIHRyYW5zcG9zZSA9IF9yZWYudHJhbnNwb3NlLFxuICAgICAgY29uaiA9IF9yZWYuY29uajtcblxuICAvKipcbiAgICogVHJhbnNwb3NlIGFuZCBjb21wbGV4IGNvbmp1Z2F0ZSBhIG1hdHJpeC4gQWxsIHZhbHVlcyBvZiB0aGUgbWF0cml4IGFyZVxuICAgKiByZWZsZWN0ZWQgb3ZlciBpdHMgbWFpbiBkaWFnb25hbCBhbmQgdGhlbiB0aGUgY29tcGxleCBjb25qdWdhdGUgaXNcbiAgICogdGFrZW4uIFRoaXMgaXMgZXF1aXZhbGVudCB0byBjb21wbGV4IGNvbmp1Z2F0aW9uIGZvciBzY2FsYXJzIGFuZFxuICAgKiB2ZWN0b3JzLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLmN0cmFuc3Bvc2UoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBjb25zdCBBID0gW1sxLCAyLCAzXSwgWzQsIDUsIG1hdGguY29tcGxleCg2LDcpXV1cbiAgICogICAgIG1hdGguY3RyYW5zcG9zZShBKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgW1sxLCA0XSwgWzIsIDVdLCBbMywge3JlOjYsaW06N31dXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgIHRyYW5zcG9zZSwgZGlhZywgaW52LCBzdWJzZXQsIHNxdWVlemVcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0geCAgTWF0cml4IHRvIGJlIGN0cmFuc3Bvc2VkXG4gICAqIEByZXR1cm4ge0FycmF5IHwgTWF0cml4fSAgIFRoZSBjdHJhbnNwb3NlZCBtYXRyaXhcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgYW55OiBmdW5jdGlvbiBhbnkoeCkge1xuICAgICAgcmV0dXJuIGNvbmoodHJhbnNwb3NlKHgpKTtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZUN0cmFuc3Bvc2UgPSBjcmVhdGVDdHJhbnNwb3NlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVEZXQgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvc3RyaW5nXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnZGV0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdzdWJ0cmFjdCcsICdtdWx0aXBseScsICd1bmFyeU1pbnVzJywgJ2x1cCddO1xudmFyIGNyZWF0ZURldCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCxcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSxcbiAgICAgIHVuYXJ5TWludXMgPSBfcmVmLnVuYXJ5TWludXMsXG4gICAgICBsdXAgPSBfcmVmLmx1cDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudCBvZiBhIG1hdHJpeC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmRldCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5kZXQoW1sxLCAyXSwgWzMsIDRdXSkgLy8gcmV0dXJucyAtMlxuICAgKlxuICAgKiAgICBjb25zdCBBID0gW1xuICAgKiAgICAgIFstMiwgMiwgM10sXG4gICAqICAgICAgWy0xLCAxLCAzXSxcbiAgICogICAgICBbMiwgMCwgLTFdXG4gICAqICAgIF1cbiAgICogICAgbWF0aC5kZXQoQSkgLy8gcmV0dXJucyA2XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBpbnZcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0geCAgQSBtYXRyaXhcbiAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgZGV0ZXJtaW5hbnQgb2YgYHhgXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIGFueTogZnVuY3Rpb24gYW55KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX29iamVjdC5jbG9uZSkoeCk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBkZXQoeCkge1xuICAgICAgdmFyIHNpemU7XG5cbiAgICAgIGlmICgoMCwgX2lzLmlzTWF0cml4KSh4KSkge1xuICAgICAgICBzaXplID0geC5zaXplKCk7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoeCkpIHtcbiAgICAgICAgeCA9IG1hdHJpeCh4KTtcbiAgICAgICAgc2l6ZSA9IHguc2l6ZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gYSBzY2FsYXJcbiAgICAgICAgc2l6ZSA9IFtdO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKHNpemUubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAvLyBzY2FsYXJcbiAgICAgICAgICByZXR1cm4gKDAsIF9vYmplY3QuY2xvbmUpKHgpO1xuXG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAvLyB2ZWN0b3JcbiAgICAgICAgICBpZiAoc2l6ZVswXSA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuICgwLCBfb2JqZWN0LmNsb25lKSh4LnZhbHVlT2YoKVswXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggbXVzdCBiZSBzcXVhcmUgJyArICcoc2l6ZTogJyArICgwLCBfc3RyaW5nLmZvcm1hdCkoc2l6ZSkgKyAnKScpO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gdHdvIGRpbWVuc2lvbmFsIGFycmF5XG4gICAgICAgICAgICB2YXIgcm93cyA9IHNpemVbMF07XG4gICAgICAgICAgICB2YXIgY29scyA9IHNpemVbMV07XG5cbiAgICAgICAgICAgIGlmIChyb3dzID09PSBjb2xzKSB7XG4gICAgICAgICAgICAgIHJldHVybiBfZGV0KHguY2xvbmUoKS52YWx1ZU9mKCksIHJvd3MsIGNvbHMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpeCBtdXN0IGJlIHNxdWFyZSAnICsgJyhzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShzaXplKSArICcpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgLy8gbXVsdGkgZGltZW5zaW9uYWwgYXJyYXlcbiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgdHdvIGRpbWVuc2lvbmFsICcgKyAnKHNpemU6ICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKHNpemUpICsgJyknKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudCBvZiBhIG1hdHJpeFxuICAgKiBAcGFyYW0ge0FycmF5W119IG1hdHJpeCAgQSBzcXVhcmUsIHR3byBkaW1lbnNpb25hbCBtYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJvd3MgICAgIE51bWJlciBvZiByb3dzIG9mIHRoZSBtYXRyaXggKHplcm8tYmFzZWQpXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2xzICAgICBOdW1iZXIgb2YgY29sdW1ucyBvZiB0aGUgbWF0cml4ICh6ZXJvLWJhc2VkKVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBkZXRcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgZnVuY3Rpb24gX2RldChtYXRyaXgsIHJvd3MsIGNvbHMpIHtcbiAgICBpZiAocm93cyA9PT0gMSkge1xuICAgICAgLy8gdGhpcyBpcyBhIDEgeCAxIG1hdHJpeFxuICAgICAgcmV0dXJuICgwLCBfb2JqZWN0LmNsb25lKShtYXRyaXhbMF1bMF0pO1xuICAgIH0gZWxzZSBpZiAocm93cyA9PT0gMikge1xuICAgICAgLy8gdGhpcyBpcyBhIDIgeCAyIG1hdHJpeFxuICAgICAgLy8gdGhlIGRldGVybWluYW50IG9mIFthMTEsYTEyO2EyMSxhMjJdIGlzIGRldCA9IGExMSphMjItYTIxKmExMlxuICAgICAgcmV0dXJuIHN1YnRyYWN0KG11bHRpcGx5KG1hdHJpeFswXVswXSwgbWF0cml4WzFdWzFdKSwgbXVsdGlwbHkobWF0cml4WzFdWzBdLCBtYXRyaXhbMF1bMV0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ29tcHV0ZSB0aGUgTFUgZGVjb21wb3NpdGlvblxuICAgICAgdmFyIGRlY29tcCA9IGx1cChtYXRyaXgpOyAvLyBUaGUgZGV0ZXJtaW5hbnQgaXMgdGhlIHByb2R1Y3Qgb2YgdGhlIGRpYWdvbmFsIGVudHJpZXMgb2YgVSAoYW5kIHRob3NlIG9mIEwsIGJ1dCB0aGV5IGFyZSBhbGwgMSlcblxuICAgICAgdmFyIGRldCA9IGRlY29tcC5VWzBdWzBdO1xuXG4gICAgICBmb3IgKHZhciBfaSA9IDE7IF9pIDwgcm93czsgX2krKykge1xuICAgICAgICBkZXQgPSBtdWx0aXBseShkZXQsIGRlY29tcC5VW19pXVtfaV0pO1xuICAgICAgfSAvLyBUaGUgZGV0ZXJtaW5hbnQgd2lsbCBiZSBtdWx0aXBsaWVkIGJ5IDEgb3IgLTEgZGVwZW5kaW5nIG9uIHRoZSBwYXJpdHkgb2YgdGhlIHBlcm11dGF0aW9uIG1hdHJpeC5cbiAgICAgIC8vIFRoaXMgY2FuIGJlIGRldGVybWluZWQgYnkgY291bnRpbmcgdGhlIGN5Y2xlcy4gVGhpcyBpcyByb3VnaGx5IGEgbGluZWFyIHRpbWUgYWxnb3JpdGhtLlxuXG5cbiAgICAgIHZhciBldmVuQ3ljbGVzID0gMDtcbiAgICAgIHZhciBpID0gMDtcbiAgICAgIHZhciB2aXNpdGVkID0gW107XG5cbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHdoaWxlICh2aXNpdGVkW2ldKSB7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGkgPj0gcm93cykgYnJlYWs7XG4gICAgICAgIHZhciBqID0gaTtcbiAgICAgICAgdmFyIGN5Y2xlTGVuID0gMDtcblxuICAgICAgICB3aGlsZSAoIXZpc2l0ZWRbZGVjb21wLnBbal1dKSB7XG4gICAgICAgICAgdmlzaXRlZFtkZWNvbXAucFtqXV0gPSB0cnVlO1xuICAgICAgICAgIGogPSBkZWNvbXAucFtqXTtcbiAgICAgICAgICBjeWNsZUxlbisrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGN5Y2xlTGVuICUgMiA9PT0gMCkge1xuICAgICAgICAgIGV2ZW5DeWNsZXMrKztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZXZlbkN5Y2xlcyAlIDIgPT09IDAgPyBkZXQgOiB1bmFyeU1pbnVzKGRldCk7XG4gICAgfVxuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlRGV0ID0gY3JlYXRlRGV0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVEaWFnID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdkaWFnJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdEZW5zZU1hdHJpeCcsICdTcGFyc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVEaWFnID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4LFxuICAgICAgU3BhcnNlTWF0cml4ID0gX3JlZi5TcGFyc2VNYXRyaXg7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGRpYWdvbmFsIG1hdHJpeCBvciByZXRyaWV2ZSB0aGUgZGlhZ29uYWwgb2YgYSBtYXRyaXhcbiAgICpcbiAgICogV2hlbiBgeGAgaXMgYSB2ZWN0b3IsIGEgbWF0cml4IHdpdGggdmVjdG9yIGB4YCBvbiB0aGUgZGlhZ29uYWwgd2lsbCBiZSByZXR1cm5lZC5cbiAgICogV2hlbiBgeGAgaXMgYSB0d28gZGltZW5zaW9uYWwgbWF0cml4LCB0aGUgbWF0cml4ZXMgYGtgdGggZGlhZ29uYWwgd2lsbCBiZSByZXR1cm5lZCBhcyB2ZWN0b3IuXG4gICAqIFdoZW4gayBpcyBwb3NpdGl2ZSwgdGhlIHZhbHVlcyBhcmUgcGxhY2VkIG9uIHRoZSBzdXBlciBkaWFnb25hbC5cbiAgICogV2hlbiBrIGlzIG5lZ2F0aXZlLCB0aGUgdmFsdWVzIGFyZSBwbGFjZWQgb24gdGhlIHN1YiBkaWFnb25hbC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5kaWFnKFgpXG4gICAqICAgICBtYXRoLmRpYWcoWCwgZm9ybWF0KVxuICAgKiAgICAgbWF0aC5kaWFnKFgsIGspXG4gICAqICAgICBtYXRoLmRpYWcoWCwgaywgZm9ybWF0KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIC8vIGNyZWF0ZSBhIGRpYWdvbmFsIG1hdHJpeFxuICAgKiAgICAgbWF0aC5kaWFnKFsxLCAyLCAzXSkgICAgICAvLyByZXR1cm5zIFtbMSwgMCwgMF0sIFswLCAyLCAwXSwgWzAsIDAsIDNdXVxuICAgKiAgICAgbWF0aC5kaWFnKFsxLCAyLCAzXSwgMSkgICAvLyByZXR1cm5zIFtbMCwgMSwgMCwgMF0sIFswLCAwLCAyLCAwXSwgWzAsIDAsIDAsIDNdXVxuICAgKiAgICAgbWF0aC5kaWFnKFsxLCAyLCAzXSwgLTEpICAvLyByZXR1cm5zIFtbMCwgMCwgMF0sIFsxLCAwLCAwXSwgWzAsIDIsIDBdLCBbMCwgMCwgM11dXG4gICAqXG4gICAqICAgIC8vIHJldHJpZXZlIHRoZSBkaWFnb25hbCBmcm9tIGEgbWF0cml4XG4gICAqICAgIGNvbnN0IGEgPSBbWzEsIDIsIDNdLCBbNCwgNSwgNl0sIFs3LCA4LCA5XV1cbiAgICogICAgbWF0aC5kaWFnKGEpICAgLy8gcmV0dXJucyBbMSwgNSwgOV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBvbmVzLCB6ZXJvcywgaWRlbnRpdHlcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXggfCBBcnJheX0geCAgICAgICAgICBBIHR3byBkaW1lbnNpb25hbCBtYXRyaXggb3IgYSB2ZWN0b3JcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXJ9IFtrPTBdICBUaGUgZGlhZ29uYWwgd2hlcmUgdGhlIHZlY3RvciB3aWxsIGJlIGZpbGxlZFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIG9yIHJldHJpZXZlZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtmb3JtYXQ9J2RlbnNlJ10gICBUaGUgbWF0cml4IHN0b3JhZ2UgZm9ybWF0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7TWF0cml4IHwgQXJyYXl9IERpYWdvbmFsIG1hdHJpeCBmcm9tIGlucHV0IHZlY3Rvciwgb3IgZGlhZ29uYWwgZnJvbSBpbnB1dCBtYXRyaXguXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIC8vIEZJWE1FOiBzaW1wbGlmeSB0aGlzIGh1Z2UgYW1vdW50IG9mIHNpZ25hdHVyZXMgYXMgc29vbiBhcyB0eXBlZC1mdW5jdGlvbiBzdXBwb3J0cyBvcHRpb25hbCBhcmd1bWVudHNcbiAgICBBcnJheTogZnVuY3Rpb24gQXJyYXkoeCkge1xuICAgICAgcmV0dXJuIF9kaWFnKHgsIDAsICgwLCBfYXJyYXkuYXJyYXlTaXplKSh4KSwgbnVsbCk7XG4gICAgfSxcbiAgICAnQXJyYXksIG51bWJlcic6IGZ1bmN0aW9uIEFycmF5TnVtYmVyKHgsIGspIHtcbiAgICAgIHJldHVybiBfZGlhZyh4LCBrLCAoMCwgX2FycmF5LmFycmF5U2l6ZSkoeCksIG51bGwpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBCaWdOdW1iZXInOiBmdW5jdGlvbiBBcnJheUJpZ051bWJlcih4LCBrKSB7XG4gICAgICByZXR1cm4gX2RpYWcoeCwgay50b051bWJlcigpLCAoMCwgX2FycmF5LmFycmF5U2l6ZSkoeCksIG51bGwpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBzdHJpbmcnOiBmdW5jdGlvbiBBcnJheVN0cmluZyh4LCBmb3JtYXQpIHtcbiAgICAgIHJldHVybiBfZGlhZyh4LCAwLCAoMCwgX2FycmF5LmFycmF5U2l6ZSkoeCksIGZvcm1hdCk7XG4gICAgfSxcbiAgICAnQXJyYXksIG51bWJlciwgc3RyaW5nJzogZnVuY3Rpb24gQXJyYXlOdW1iZXJTdHJpbmcoeCwgaywgZm9ybWF0KSB7XG4gICAgICByZXR1cm4gX2RpYWcoeCwgaywgKDAsIF9hcnJheS5hcnJheVNpemUpKHgpLCBmb3JtYXQpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBCaWdOdW1iZXIsIHN0cmluZyc6IGZ1bmN0aW9uIEFycmF5QmlnTnVtYmVyU3RyaW5nKHgsIGssIGZvcm1hdCkge1xuICAgICAgcmV0dXJuIF9kaWFnKHgsIGsudG9OdW1iZXIoKSwgKDAsIF9hcnJheS5hcnJheVNpemUpKHgpLCBmb3JtYXQpO1xuICAgIH0sXG4gICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuIF9kaWFnKHgsIDAsIHguc2l6ZSgpLCB4LnN0b3JhZ2UoKSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBudW1iZXInOiBmdW5jdGlvbiBNYXRyaXhOdW1iZXIoeCwgaykge1xuICAgICAgcmV0dXJuIF9kaWFnKHgsIGssIHguc2l6ZSgpLCB4LnN0b3JhZ2UoKSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBCaWdOdW1iZXInOiBmdW5jdGlvbiBNYXRyaXhCaWdOdW1iZXIoeCwgaykge1xuICAgICAgcmV0dXJuIF9kaWFnKHgsIGsudG9OdW1iZXIoKSwgeC5zaXplKCksIHguc3RvcmFnZSgpKTtcbiAgICB9LFxuICAgICdNYXRyaXgsIHN0cmluZyc6IGZ1bmN0aW9uIE1hdHJpeFN0cmluZyh4LCBmb3JtYXQpIHtcbiAgICAgIHJldHVybiBfZGlhZyh4LCAwLCB4LnNpemUoKSwgZm9ybWF0KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIG51bWJlciwgc3RyaW5nJzogZnVuY3Rpb24gTWF0cml4TnVtYmVyU3RyaW5nKHgsIGssIGZvcm1hdCkge1xuICAgICAgcmV0dXJuIF9kaWFnKHgsIGssIHguc2l6ZSgpLCBmb3JtYXQpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQmlnTnVtYmVyLCBzdHJpbmcnOiBmdW5jdGlvbiBNYXRyaXhCaWdOdW1iZXJTdHJpbmcoeCwgaywgZm9ybWF0KSB7XG4gICAgICByZXR1cm4gX2RpYWcoeCwgay50b051bWJlcigpLCB4LnNpemUoKSwgZm9ybWF0KTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogQ3JlZWF0ZSBkaWFnb25hbCBtYXRyaXggZnJvbSBhIHZlY3RvciBvciB2aWNlIHZlcnNhXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGtcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZvcm1hdCBTdG9yYWdlIGZvcm1hdCBmb3IgbWF0cml4LiBJZiBudWxsLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYW4gQXJyYXkgaXMgcmV0dXJuZWRcbiAgICogQHJldHVybnMge0FycmF5IHwgTWF0cml4fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfZGlhZyh4LCBrLCBzaXplLCBmb3JtYXQpIHtcbiAgICBpZiAoISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoaykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1NlY29uZCBwYXJhbWV0ZXIgaW4gZnVuY3Rpb24gZGlhZyBtdXN0IGJlIGFuIGludGVnZXInKTtcbiAgICB9XG5cbiAgICB2YXIga1N1cGVyID0gayA+IDAgPyBrIDogMDtcbiAgICB2YXIga1N1YiA9IGsgPCAwID8gLWsgOiAwOyAvLyBjaGVjayBkaW1lbnNpb25zXG5cbiAgICBzd2l0Y2ggKHNpemUubGVuZ3RoKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHJldHVybiBfY3JlYXRlRGlhZ29uYWxNYXRyaXgoeCwgaywgZm9ybWF0LCBzaXplWzBdLCBrU3ViLCBrU3VwZXIpO1xuXG4gICAgICBjYXNlIDI6XG4gICAgICAgIHJldHVybiBfZ2V0RGlhZ29uYWwoeCwgaywgZm9ybWF0LCBzaXplLCBrU3ViLCBrU3VwZXIpO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggZm9yIGZ1bmN0aW9uIGRpYWcgbXVzdCBiZSAyIGRpbWVuc2lvbmFsJyk7XG4gIH1cblxuICBmdW5jdGlvbiBfY3JlYXRlRGlhZ29uYWxNYXRyaXgoeCwgaywgZm9ybWF0LCBsLCBrU3ViLCBrU3VwZXIpIHtcbiAgICAvLyBtYXRyaXggc2l6ZVxuICAgIHZhciBtcyA9IFtsICsga1N1YiwgbCArIGtTdXBlcl07XG5cbiAgICBpZiAoZm9ybWF0ICYmIGZvcm1hdCAhPT0gJ3NwYXJzZScgJiYgZm9ybWF0ICE9PSAnZGVuc2UnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBtYXRyaXggdHlwZSBcIi5jb25jYXQoZm9ybWF0LCBcIlxcXCJcIikpO1xuICAgIH0gLy8gY3JlYXRlIGRpYWdvbmFsIG1hdHJpeFxuXG5cbiAgICB2YXIgbSA9IGZvcm1hdCA9PT0gJ3NwYXJzZScgPyBTcGFyc2VNYXRyaXguZGlhZ29uYWwobXMsIHgsIGspIDogRGVuc2VNYXRyaXguZGlhZ29uYWwobXMsIHgsIGspOyAvLyBjaGVjayB3ZSBuZWVkIHRvIHJldHVybiBhIG1hdHJpeFxuXG4gICAgcmV0dXJuIGZvcm1hdCAhPT0gbnVsbCA/IG0gOiBtLnZhbHVlT2YoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9nZXREaWFnb25hbCh4LCBrLCBmb3JtYXQsIHMsIGtTdWIsIGtTdXBlcikge1xuICAgIC8vIGNoZWNrIHggaXMgYSBNYXRyaXhcbiAgICBpZiAoKDAsIF9pcy5pc01hdHJpeCkoeCkpIHtcbiAgICAgIC8vIGdldCBkaWFnb25hbCBtYXRyaXhcbiAgICAgIHZhciBkbSA9IHguZGlhZ29uYWwoayk7IC8vIGNoZWNrIHdlIG5lZWQgdG8gcmV0dXJuIGEgbWF0cml4XG5cbiAgICAgIGlmIChmb3JtYXQgIT09IG51bGwpIHtcbiAgICAgICAgLy8gY2hlY2sgd2UgbmVlZCB0byBjaGFuZ2UgbWF0cml4IGZvcm1hdFxuICAgICAgICBpZiAoZm9ybWF0ICE9PSBkbS5zdG9yYWdlKCkpIHtcbiAgICAgICAgICByZXR1cm4gbWF0cml4KGRtLCBmb3JtYXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRtO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZG0udmFsdWVPZigpO1xuICAgIH0gLy8gdmVjdG9yIHNpemVcblxuXG4gICAgdmFyIG4gPSBNYXRoLm1pbihzWzBdIC0ga1N1Yiwgc1sxXSAtIGtTdXBlcik7IC8vIGRpYWdvbmFsIHZhbHVlc1xuXG4gICAgdmFyIHZlY3RvciA9IFtdOyAvLyBsb29wIGRpYWdvbmFsXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgdmVjdG9yW2ldID0geFtpICsga1N1Yl1baSArIGtTdXBlcl07XG4gICAgfSAvLyBjaGVjayB3ZSBuZWVkIHRvIHJldHVybiBhIG1hdHJpeFxuXG5cbiAgICByZXR1cm4gZm9ybWF0ICE9PSBudWxsID8gbWF0cml4KHZlY3RvcikgOiB2ZWN0b3I7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVEaWFnID0gY3JlYXRlRGlhZzsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRG90ID0gdm9pZCAwO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnZG90JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FkZCcsICdtdWx0aXBseSddO1xudmFyIGNyZWF0ZURvdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBhZGQgPSBfcmVmLmFkZCxcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseTtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBkb3QgcHJvZHVjdCBvZiB0d28gdmVjdG9ycy4gVGhlIGRvdCBwcm9kdWN0IG9mXG4gICAqIGBBID0gW2ExLCBhMiwgYTMsIC4uLiwgYW5dYCBhbmQgYEIgPSBbYjEsIGIyLCBiMywgLi4uLCBibl1gIGlzIGRlZmluZWQgYXM6XG4gICAqXG4gICAqICAgIGRvdChBLCBCKSA9IGExICogYjEgKyBhMiAqIGIyICsgYTMgKiBiMyArIC4uLiArIGFuICogYm5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmRvdCh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5kb3QoWzIsIDQsIDFdLCBbMiwgMiwgM10pICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDE1XG4gICAqICAgIG1hdGgubXVsdGlwbHkoWzIsIDQsIDFdLCBbMiwgMiwgM10pICAvLyByZXR1cm5zIG51bWJlciAxNVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgbXVsdGlwbHksIGNyb3NzXG4gICAqXG4gICAqIEBwYXJhbSAge0FycmF5IHwgTWF0cml4fSB4ICAgICBGaXJzdCB2ZWN0b3JcbiAgICogQHBhcmFtICB7QXJyYXkgfCBNYXRyaXh9IHkgICAgIFNlY29uZCB2ZWN0b3JcbiAgICogQHJldHVybiB7bnVtYmVyfSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIGRvdCBwcm9kdWN0IG9mIGB4YCBhbmQgYHlgXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdNYXRyaXgsIE1hdHJpeCc6IGZ1bmN0aW9uIE1hdHJpeE1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gX2RvdCh4LnRvQXJyYXkoKSwgeS50b0FycmF5KCkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7XG4gICAgICByZXR1cm4gX2RvdCh4LnRvQXJyYXkoKSwgeSk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBfZG90KHgsIHkudG9BcnJheSgpKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBfZG90XG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBkb3QgcHJvZHVjdCBmb3IgdHdvIGFycmF5c1xuICAgKiBAcGFyYW0ge0FycmF5fSB4ICBGaXJzdCB2ZWN0b3JcbiAgICogQHBhcmFtIHtBcnJheX0geSAgU2Vjb25kIHZlY3RvclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBkb3QgcHJvZHVjdCBvZiB4IGFuZCB5XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICAvLyBUT0RPOiBkb3VibGUgY29kZSB3aXRoIG1hdGgubXVsdGlwbHlcblxuICBmdW5jdGlvbiBfZG90KHgsIHkpIHtcbiAgICB2YXIgeFNpemUgPSAoMCwgX2FycmF5LmFycmF5U2l6ZSkoeCk7XG4gICAgdmFyIHlTaXplID0gKDAsIF9hcnJheS5hcnJheVNpemUpKHkpO1xuICAgIHZhciBsZW4gPSB4U2l6ZVswXTtcbiAgICBpZiAoeFNpemUubGVuZ3RoICE9PSAxIHx8IHlTaXplLmxlbmd0aCAhPT0gMSkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1ZlY3RvciBleHBlY3RlZCcpOyAvLyBUT0RPOiBiZXR0ZXIgZXJyb3IgbWVzc2FnZVxuXG4gICAgaWYgKHhTaXplWzBdICE9PSB5U2l6ZVswXSkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1ZlY3RvcnMgbXVzdCBoYXZlIGVxdWFsIGxlbmd0aCAoJyArIHhTaXplWzBdICsgJyAhPSAnICsgeVNpemVbMF0gKyAnKScpO1xuICAgIGlmIChsZW4gPT09IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdDYW5ub3QgY2FsY3VsYXRlIHRoZSBkb3QgcHJvZHVjdCBvZiBlbXB0eSB2ZWN0b3JzJyk7XG4gICAgdmFyIHByb2QgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgcHJvZCA9IGFkZChwcm9kLCBtdWx0aXBseSh4W2ldLCB5W2ldKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb2Q7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVEb3QgPSBjcmVhdGVEb3Q7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUVpZ3MgPSB2b2lkIDA7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3N0cmluZ1wiKTtcblxudmFyIG5hbWUgPSAnZWlncyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydjb25maWcnLCAndHlwZWQnLCAnbWF0cml4JywgJ2FkZFNjYWxhcicsICdlcXVhbCcsICdzdWJ0cmFjdCcsICdhYnMnLCAnYXRhbicsICdjb3MnLCAnc2luJywgJ211bHRpcGx5U2NhbGFyJywgJ2ludicsICdiaWdudW1iZXInLCAnbXVsdGlwbHknLCAnYWRkJ107XG52YXIgY3JlYXRlRWlncyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgYWRkU2NhbGFyID0gX3JlZi5hZGRTY2FsYXIsXG4gICAgICBzdWJ0cmFjdCA9IF9yZWYuc3VidHJhY3QsXG4gICAgICBlcXVhbCA9IF9yZWYuZXF1YWwsXG4gICAgICBhYnMgPSBfcmVmLmFicyxcbiAgICAgIGF0YW4gPSBfcmVmLmF0YW4sXG4gICAgICBjb3MgPSBfcmVmLmNvcyxcbiAgICAgIHNpbiA9IF9yZWYuc2luLFxuICAgICAgbXVsdGlwbHlTY2FsYXIgPSBfcmVmLm11bHRpcGx5U2NhbGFyLFxuICAgICAgaW52ID0gX3JlZi5pbnYsXG4gICAgICBiaWdudW1iZXIgPSBfcmVmLmJpZ251bWJlcixcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSxcbiAgICAgIGFkZCA9IF9yZWYuYWRkO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIGVpZ2VudmFsdWUgYW5kIGVpZ2VudmVjdG9yIG9mIGEgcmVhbCBzeW1tZXRyaWMgbWF0cml4LlxuICAgKiBPbmx5IGFwcGxpY2FibGUgdG8gdHdvIGRpbWVuc2lvbmFsIHN5bW1ldHJpYyBtYXRyaWNlcy4gVXNlcyBKYWNvYmlcbiAgICogQWxnb3JpdGhtLiBNYXRyaXggY29udGFpbmluZyBtaXhlZCB0eXBlICgnbnVtYmVyJywgJ2JpZ251bWJlcicsICdmcmFjdGlvbicpXG4gICAqIG9mIGVsZW1lbnRzIGFyZSBub3Qgc3VwcG9ydGVkLiBJbnB1dCBtYXRyaXggb3IgMkQgYXJyYXkgc2hvdWxkIGNvbnRhaW4gYWxsIGVsZW1lbnRzXG4gICAqIG9mIGVpdGhlciAnbnVtYmVyJywgJ2JpZ251bWJlcicgb3IgJ2ZyYWN0aW9uJyB0eXBlLiBGb3IgJ251bWJlcicgYW5kICdmcmFjdGlvbicsIHRoZVxuICAgKiBlaWdlbnZhbHVlcyBhcmUgb2YgJ251bWJlcicgdHlwZS4gRm9yICdiaWdudW1iZXInIHRoZSBlaWdlbnZhbHVlcyBhcmUgb2YgJydiaWdudW1iZXInIHR5cGUuXG4gICAqIEVpZ2VudmVjdG9ycyBhcmUgYWx3YXlzIG9mICdudW1iZXInIHR5cGUuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguZWlncyh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIGNvbnN0IEggPSBbWzUsIDIuM10sIFsyLjMsIDFdXVxuICAgKiAgICAgY29uc3QgYW5zID0gbWF0aC5laWdzKEgpIC8vIHJldHVybnMge3ZhbHVlczogW0UxLEUyLi4uc29ydGVkXSwgdmVjdG9yczogW3YxLHYyLi4uLiBjb3JyZXNwb25kaW5nIHZlY3RvcnNdfVxuICAgKiAgICAgY29uc3QgRSA9IGFucy52YWx1ZXNcbiAgICogICAgIGNvbnN0IFUgPSBhbnMudmVjdG9yc1xuICAgKiAgICAgY29uc3QgVVR4SHhVID0gbWF0aC5tdWx0aXBseShtYXRoLnRyYW5zcG9zZShVKSwgSCwgVSkgLy8gcm90YXRlcyBIIHRvIHRoZSBlaWdlbi1yZXByZXNlbnRhdGlvblxuICAgKiAgICAgRVswXSA9PSBVVHhIeFVbMF1bMF0gIC8vIHJldHVybnMgdHJ1ZVxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgIGludlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSB4ICBNYXRyaXggdG8gYmUgZGlhZ29uYWxpemVkXG4gICAqIEByZXR1cm4ge3t2YWx1ZXM6IEFycmF5LCB2ZWN0b3JzOiBBcnJheX0gfCB7dmFsdWVzOiBNYXRyaXgsIHZlY3RvcnM6IE1hdHJpeH19IE9iamVjdCBjb250YWluaW5nIGVpZ2VudmFsdWVzIChBcnJheSBvciBNYXRyaXgpIGFuZCBlaWdlbnZlY3RvcnMgKDJEIEFycmF5L01hdHJpeCkuXG4gICAqL1xuICB2YXIgZWlncyA9IHR5cGVkKCdlaWdzJywge1xuICAgIEFycmF5OiBmdW5jdGlvbiBBcnJheSh4KSB7XG4gICAgICAvLyBjaGVjayBhcnJheSBzaXplXG4gICAgICB2YXIgbWF0ID0gbWF0cml4KHgpO1xuICAgICAgdmFyIHNpemUgPSBtYXQuc2l6ZSgpO1xuXG4gICAgICBpZiAoc2l6ZS5sZW5ndGggIT09IDIgfHwgc2l6ZVswXSAhPT0gc2l6ZVsxXSkge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgc3F1YXJlICcgKyAnKHNpemU6ICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKHNpemUpICsgJyknKTtcbiAgICAgIH0gLy8gdXNlIGRlbnNlIDJEIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuXG5cbiAgICAgIHZhciBhbnMgPSBjaGVja0FuZFN1Ym1pdChtYXQsIHNpemVbMF0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWVzOiBhbnNbMF0sXG4gICAgICAgIHZlY3RvcnM6IGFuc1sxXVxuICAgICAgfTtcbiAgICB9LFxuICAgIE1hdHJpeDogZnVuY3Rpb24gTWF0cml4KHgpIHtcbiAgICAgIC8vIHVzZSBkZW5zZSAyRCBhcnJheSBpbXBsZW1lbnRhdGlvblxuICAgICAgLy8gZGVuc2UgbWF0cml4XG4gICAgICB2YXIgc2l6ZSA9IHguc2l6ZSgpO1xuXG4gICAgICBpZiAoc2l6ZS5sZW5ndGggIT09IDIgfHwgc2l6ZVswXSAhPT0gc2l6ZVsxXSkge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgc3F1YXJlICcgKyAnKHNpemU6ICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKHNpemUpICsgJyknKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGFucyA9IGNoZWNrQW5kU3VibWl0KHgsIHNpemVbMF0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWVzOiBtYXRyaXgoYW5zWzBdKSxcbiAgICAgICAgdmVjdG9yczogbWF0cml4KGFuc1sxXSlcbiAgICAgIH07XG4gICAgfVxuICB9KTsgLy8gSXMgdGhlIG1hdHJpeFxuICAvLyBzeW1tZXRyaWMgP1xuXG4gIGZ1bmN0aW9uIGlzU3ltbWV0cmljKHgsIG4pIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgZm9yICh2YXIgaiA9IGk7IGogPCBuOyBqKyspIHtcbiAgICAgICAgLy8gbm90IHN5bW10cmljXG4gICAgICAgIGlmICghZXF1YWwoeFtpXVtqXSwgeFtqXVtpXSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnB1dCBtYXRyaXggaXMgbm90IHN5bW1ldHJpYycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IC8vIGNoZWNrIGlucHV0IGZvciBwb3NzaWJsZSBwcm9ibGVtc1xuICAvLyBhbmQgcGVyZm9ybSBkaWFnb25hbGl6YXRpb24gZWZmaWNpZW50bHkgZm9yXG4gIC8vIHNwZWNpZmljIHR5cGUgb2YgbnVtYmVyXG5cblxuICBmdW5jdGlvbiBjaGVja0FuZFN1Ym1pdCh4LCBuKSB7XG4gICAgdmFyIHR5cGUgPSB4LmRhdGF0eXBlKCk7IC8vIHR5cGUgY2hlY2tcblxuICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHR5cGUgPSB4LmdldERhdGFUeXBlKCk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgIT09ICdudW1iZXInICYmIHR5cGUgIT09ICdCaWdOdW1iZXInICYmIHR5cGUgIT09ICdGcmFjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlID09PSAnbWl4ZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ01peGVkIG1hdHJpeCBlbGVtZW50IHR5cGUgaXMgbm90IHN1cHBvcnRlZCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTWF0cml4IGVsZW1lbnQgdHlwZSBub3Qgc3VwcG9ydGVkICgnICsgdHlwZSArICcpJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlzU3ltbWV0cmljKHgudG9BcnJheSgpLCBuKTtcbiAgICB9IC8vIHBlcmZvcm0gZWZmaWNpZW50IGNhbGN1bGF0aW9uIGZvciAnbnVtYmVycydcblxuXG4gICAgaWYgKHR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gZGlhZyh4LnRvQXJyYXkoKSk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnRnJhY3Rpb24nKSB7XG4gICAgICB2YXIgeEFyciA9IHgudG9BcnJheSgpOyAvLyBjb252ZXJ0IGZyYWN0aW9uIHRvIG51bWJlcnNcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IGk7IGogPCBuOyBqKyspIHtcbiAgICAgICAgICB4QXJyW2ldW2pdID0geEFycltpXVtqXS52YWx1ZU9mKCk7XG4gICAgICAgICAgeEFycltqXVtpXSA9IHhBcnJbaV1bal07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRpYWcoeC50b0FycmF5KCkpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ0JpZ051bWJlcicpIHtcbiAgICAgIHJldHVybiBkaWFnQmlnKHgudG9BcnJheSgpKTtcbiAgICB9XG4gIH0gLy8gZGlhZ29uYWxpemF0aW9uIGltcGxlbWVudGF0aW9uIGZvciBudW1iZXIgKGVmZmljaWVudClcblxuXG4gIGZ1bmN0aW9uIGRpYWcoeCkge1xuICAgIHZhciBOID0geC5sZW5ndGg7XG4gICAgdmFyIGUwID0gTWF0aC5hYnMoY29uZmlnLmVwc2lsb24gLyBOKTtcbiAgICB2YXIgcHNpO1xuICAgIHZhciBTaWogPSBuZXcgQXJyYXkoTik7IC8vIFNpaiBpcyBJZGVudGl0eSBNYXRyaXhcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTjsgaSsrKSB7XG4gICAgICBTaWpbaV0gPSBjcmVhdGVBcnJheShOLCAwKTtcbiAgICAgIFNpaltpXVtpXSA9IDEuMDtcbiAgICB9IC8vIGluaXRpYWwgZXJyb3JcblxuXG4gICAgdmFyIFZhYiA9IGdldEFpaih4KTtcblxuICAgIHdoaWxlIChNYXRoLmFicyhWYWJbMV0pID49IE1hdGguYWJzKGUwKSkge1xuICAgICAgdmFyIF9pID0gVmFiWzBdWzBdO1xuICAgICAgdmFyIGogPSBWYWJbMF1bMV07XG4gICAgICBwc2kgPSBnZXRUaGV0YSh4W19pXVtfaV0sIHhbal1bal0sIHhbX2ldW2pdKTtcbiAgICAgIHggPSB4MSh4LCBwc2ksIF9pLCBqKTtcbiAgICAgIFNpaiA9IFNpajEoU2lqLCBwc2ksIF9pLCBqKTtcbiAgICAgIFZhYiA9IGdldEFpaih4KTtcbiAgICB9XG5cbiAgICB2YXIgRWkgPSBjcmVhdGVBcnJheShOLCAwKTsgLy8gZWlnZW52YWx1ZXNcblxuICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IE47IF9pMisrKSB7XG4gICAgICBFaVtfaTJdID0geFtfaTJdW19pMl07XG4gICAgfVxuXG4gICAgcmV0dXJuIHNvcnRpbmcoKDAsIF9vYmplY3QuY2xvbmUpKEVpKSwgKDAsIF9vYmplY3QuY2xvbmUpKFNpaikpO1xuICB9IC8vIGRpYWdvbmFsaXphdGlvbiBpbXBsZW1lbnRhdGlvbiBmb3IgYmlnTnVtYmVyXG5cblxuICBmdW5jdGlvbiBkaWFnQmlnKHgpIHtcbiAgICB2YXIgTiA9IHgubGVuZ3RoO1xuICAgIHZhciBlMCA9IGFicyhjb25maWcuZXBzaWxvbiAvIE4pO1xuICAgIHZhciBwc2k7XG4gICAgdmFyIFNpaiA9IG5ldyBBcnJheShOKTsgLy8gU2lqIGlzIElkZW50aXR5IE1hdHJpeFxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBOOyBpKyspIHtcbiAgICAgIFNpaltpXSA9IGNyZWF0ZUFycmF5KE4sIDApO1xuICAgICAgU2lqW2ldW2ldID0gMS4wO1xuICAgIH0gLy8gaW5pdGlhbCBlcnJvclxuXG5cbiAgICB2YXIgVmFiID0gZ2V0QWlqQmlnKHgpO1xuXG4gICAgd2hpbGUgKGFicyhWYWJbMV0pID49IGFicyhlMCkpIHtcbiAgICAgIHZhciBfaTMgPSBWYWJbMF1bMF07XG4gICAgICB2YXIgaiA9IFZhYlswXVsxXTtcbiAgICAgIHBzaSA9IGdldFRoZXRhQmlnKHhbX2kzXVtfaTNdLCB4W2pdW2pdLCB4W19pM11bal0pO1xuICAgICAgeCA9IHgxQmlnKHgsIHBzaSwgX2kzLCBqKTtcbiAgICAgIFNpaiA9IFNpajFCaWcoU2lqLCBwc2ksIF9pMywgaik7XG4gICAgICBWYWIgPSBnZXRBaWpCaWcoeCk7XG4gICAgfVxuXG4gICAgdmFyIEVpID0gY3JlYXRlQXJyYXkoTiwgMCk7IC8vIGVpZ2VudmFsdWVzXG5cbiAgICBmb3IgKHZhciBfaTQgPSAwOyBfaTQgPCBOOyBfaTQrKykge1xuICAgICAgRWlbX2k0XSA9IHhbX2k0XVtfaTRdO1xuICAgIH0gLy8gcmV0dXJuIFtjbG9uZShFaSksIGNsb25lKFNpaildXG5cblxuICAgIHJldHVybiBzb3J0aW5nKCgwLCBfb2JqZWN0LmNsb25lKShFaSksICgwLCBfb2JqZWN0LmNsb25lKShTaWopKTtcbiAgfSAvLyBnZXQgYW5nbGVcblxuXG4gIGZ1bmN0aW9uIGdldFRoZXRhKGFpaSwgYWpqLCBhaWopIHtcbiAgICB2YXIgZGVub20gPSBhamogLSBhaWk7XG5cbiAgICBpZiAoTWF0aC5hYnMoZGVub20pIDw9IGNvbmZpZy5lcHNpbG9uKSB7XG4gICAgICByZXR1cm4gTWF0aC5QSSAvIDQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAwLjUgKiBNYXRoLmF0YW4oMiAqIGFpaiAvIChhamogLSBhaWkpKTtcbiAgICB9XG4gIH0gLy8gZ2V0IGFuZ2xlXG5cblxuICBmdW5jdGlvbiBnZXRUaGV0YUJpZyhhaWksIGFqaiwgYWlqKSB7XG4gICAgdmFyIGRlbm9tID0gc3VidHJhY3QoYWpqLCBhaWkpO1xuXG4gICAgaWYgKGFicyhkZW5vbSkgPD0gY29uZmlnLmVwc2lsb24pIHtcbiAgICAgIHJldHVybiBiaWdudW1iZXIoLTEpLmFjb3MoKS5kaXYoNCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBtdWx0aXBseVNjYWxhcigwLjUsIGF0YW4obXVsdGlwbHkoMiwgYWlqLCBpbnYoZGVub20pKSkpO1xuICAgIH1cbiAgfSAvLyB1cGRhdGUgZWlndmVjXG5cblxuICBmdW5jdGlvbiBTaWoxKFNpaiwgdGhldGEsIGksIGopIHtcbiAgICB2YXIgTiA9IFNpai5sZW5ndGg7XG4gICAgdmFyIGMgPSBNYXRoLmNvcyh0aGV0YSk7XG4gICAgdmFyIHMgPSBNYXRoLnNpbih0aGV0YSk7XG4gICAgdmFyIFNraSA9IGNyZWF0ZUFycmF5KE4sIDApO1xuICAgIHZhciBTa2ogPSBjcmVhdGVBcnJheShOLCAwKTtcblxuICAgIGZvciAodmFyIGsgPSAwOyBrIDwgTjsgaysrKSB7XG4gICAgICBTa2lba10gPSBjICogU2lqW2tdW2ldIC0gcyAqIFNpaltrXVtqXTtcbiAgICAgIFNraltrXSA9IHMgKiBTaWpba11baV0gKyBjICogU2lqW2tdW2pdO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9rID0gMDsgX2sgPCBOOyBfaysrKSB7XG4gICAgICBTaWpbX2tdW2ldID0gU2tpW19rXTtcbiAgICAgIFNpaltfa11bal0gPSBTa2pbX2tdO1xuICAgIH1cblxuICAgIHJldHVybiBTaWo7XG4gIH0gLy8gdXBkYXRlIGVpZ3ZlYyBmb3Igb3ZlcmxhcFxuXG5cbiAgZnVuY3Rpb24gU2lqMUJpZyhTaWosIHRoZXRhLCBpLCBqKSB7XG4gICAgdmFyIE4gPSBTaWoubGVuZ3RoO1xuICAgIHZhciBjID0gY29zKHRoZXRhKTtcbiAgICB2YXIgcyA9IHNpbih0aGV0YSk7XG4gICAgdmFyIFNraSA9IGNyZWF0ZUFycmF5KE4sIGJpZ251bWJlcigwKSk7XG4gICAgdmFyIFNraiA9IGNyZWF0ZUFycmF5KE4sIGJpZ251bWJlcigwKSk7XG5cbiAgICBmb3IgKHZhciBrID0gMDsgayA8IE47IGsrKykge1xuICAgICAgU2tpW2tdID0gc3VidHJhY3QobXVsdGlwbHlTY2FsYXIoYywgU2lqW2tdW2ldKSwgbXVsdGlwbHlTY2FsYXIocywgU2lqW2tdW2pdKSk7XG4gICAgICBTa2pba10gPSBhZGRTY2FsYXIobXVsdGlwbHlTY2FsYXIocywgU2lqW2tdW2ldKSwgbXVsdGlwbHlTY2FsYXIoYywgU2lqW2tdW2pdKSk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2syID0gMDsgX2syIDwgTjsgX2syKyspIHtcbiAgICAgIFNpaltfazJdW2ldID0gU2tpW19rMl07XG4gICAgICBTaWpbX2syXVtqXSA9IFNraltfazJdO1xuICAgIH1cblxuICAgIHJldHVybiBTaWo7XG4gIH0gLy8gdXBkYXRlIG1hdHJpeFxuXG5cbiAgZnVuY3Rpb24geDFCaWcoSGlqLCB0aGV0YSwgaSwgaikge1xuICAgIHZhciBOID0gSGlqLmxlbmd0aDtcbiAgICB2YXIgYyA9IGJpZ251bWJlcihjb3ModGhldGEpKTtcbiAgICB2YXIgcyA9IGJpZ251bWJlcihzaW4odGhldGEpKTtcbiAgICB2YXIgYzIgPSBtdWx0aXBseVNjYWxhcihjLCBjKTtcbiAgICB2YXIgczIgPSBtdWx0aXBseVNjYWxhcihzLCBzKTtcbiAgICB2YXIgQWtpID0gY3JlYXRlQXJyYXkoTiwgYmlnbnVtYmVyKDApKTtcbiAgICB2YXIgQWtqID0gY3JlYXRlQXJyYXkoTiwgYmlnbnVtYmVyKDApKTsgLy8gMmNzIEhpalxuXG4gICAgdmFyIGNzSGlqID0gbXVsdGlwbHkoYmlnbnVtYmVyKDIpLCBjLCBzLCBIaWpbaV1bal0pOyAvLyAgQWlpXG5cbiAgICB2YXIgQWlpID0gYWRkU2NhbGFyKHN1YnRyYWN0KG11bHRpcGx5U2NhbGFyKGMyLCBIaWpbaV1baV0pLCBjc0hpaiksIG11bHRpcGx5U2NhbGFyKHMyLCBIaWpbal1bal0pKTtcbiAgICB2YXIgQWpqID0gYWRkKG11bHRpcGx5U2NhbGFyKHMyLCBIaWpbaV1baV0pLCBjc0hpaiwgbXVsdGlwbHlTY2FsYXIoYzIsIEhpaltqXVtqXSkpOyAvLyAwICB0byBpXG5cbiAgICBmb3IgKHZhciBrID0gMDsgayA8IE47IGsrKykge1xuICAgICAgQWtpW2tdID0gc3VidHJhY3QobXVsdGlwbHlTY2FsYXIoYywgSGlqW2ldW2tdKSwgbXVsdGlwbHlTY2FsYXIocywgSGlqW2pdW2tdKSk7XG4gICAgICBBa2pba10gPSBhZGRTY2FsYXIobXVsdGlwbHlTY2FsYXIocywgSGlqW2ldW2tdKSwgbXVsdGlwbHlTY2FsYXIoYywgSGlqW2pdW2tdKSk7XG4gICAgfSAvLyBNb2RpZnkgSGlqXG5cblxuICAgIEhpaltpXVtpXSA9IEFpaTtcbiAgICBIaWpbal1bal0gPSBBamo7XG4gICAgSGlqW2ldW2pdID0gYmlnbnVtYmVyKDApO1xuICAgIEhpaltqXVtpXSA9IGJpZ251bWJlcigwKTsgLy8gMCAgdG8gaVxuXG4gICAgZm9yICh2YXIgX2szID0gMDsgX2szIDwgTjsgX2szKyspIHtcbiAgICAgIGlmIChfazMgIT09IGkgJiYgX2szICE9PSBqKSB7XG4gICAgICAgIEhpaltpXVtfazNdID0gQWtpW19rM107XG4gICAgICAgIEhpaltfazNdW2ldID0gQWtpW19rM107XG4gICAgICAgIEhpaltqXVtfazNdID0gQWtqW19rM107XG4gICAgICAgIEhpaltfazNdW2pdID0gQWtqW19rM107XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIEhpajtcbiAgfSAvLyB1cGRhdGUgbWF0cml4XG5cblxuICBmdW5jdGlvbiB4MShIaWosIHRoZXRhLCBpLCBqKSB7XG4gICAgdmFyIE4gPSBIaWoubGVuZ3RoO1xuICAgIHZhciBjID0gTWF0aC5jb3ModGhldGEpO1xuICAgIHZhciBzID0gTWF0aC5zaW4odGhldGEpO1xuICAgIHZhciBjMiA9IGMgKiBjO1xuICAgIHZhciBzMiA9IHMgKiBzO1xuICAgIHZhciBBa2kgPSBjcmVhdGVBcnJheShOLCAwKTtcbiAgICB2YXIgQWtqID0gY3JlYXRlQXJyYXkoTiwgMCk7IC8vICBBaWlcblxuICAgIHZhciBBaWkgPSBjMiAqIEhpaltpXVtpXSAtIDIgKiBjICogcyAqIEhpaltpXVtqXSArIHMyICogSGlqW2pdW2pdO1xuICAgIHZhciBBamogPSBzMiAqIEhpaltpXVtpXSArIDIgKiBjICogcyAqIEhpaltpXVtqXSArIGMyICogSGlqW2pdW2pdOyAvLyAwICB0byBpXG5cbiAgICBmb3IgKHZhciBrID0gMDsgayA8IE47IGsrKykge1xuICAgICAgQWtpW2tdID0gYyAqIEhpaltpXVtrXSAtIHMgKiBIaWpbal1ba107XG4gICAgICBBa2pba10gPSBzICogSGlqW2ldW2tdICsgYyAqIEhpaltqXVtrXTtcbiAgICB9IC8vIE1vZGlmeSBIaWpcblxuXG4gICAgSGlqW2ldW2ldID0gQWlpO1xuICAgIEhpaltqXVtqXSA9IEFqajtcbiAgICBIaWpbaV1bal0gPSAwO1xuICAgIEhpaltqXVtpXSA9IDA7IC8vIDAgIHRvIGlcblxuICAgIGZvciAodmFyIF9rNCA9IDA7IF9rNCA8IE47IF9rNCsrKSB7XG4gICAgICBpZiAoX2s0ICE9PSBpICYmIF9rNCAhPT0gaikge1xuICAgICAgICBIaWpbaV1bX2s0XSA9IEFraVtfazRdO1xuICAgICAgICBIaWpbX2s0XVtpXSA9IEFraVtfazRdO1xuICAgICAgICBIaWpbal1bX2s0XSA9IEFraltfazRdO1xuICAgICAgICBIaWpbX2s0XVtqXSA9IEFraltfazRdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBIaWo7XG4gIH0gLy8gZ2V0IG1heCBvZmYtZGlhZ29uYWwgdmFsdWUgZnJvbSBVcHBlciBEaWFnb25hbFxuXG5cbiAgZnVuY3Rpb24gZ2V0QWlqKE1paikge1xuICAgIHZhciBOID0gTWlqLmxlbmd0aDtcbiAgICB2YXIgbWF4TWlqID0gMDtcbiAgICB2YXIgbWF4SUogPSBbMCwgMV07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IE47IGkrKykge1xuICAgICAgZm9yICh2YXIgaiA9IGkgKyAxOyBqIDwgTjsgaisrKSB7XG4gICAgICAgIGlmIChNYXRoLmFicyhtYXhNaWopIDwgTWF0aC5hYnMoTWlqW2ldW2pdKSkge1xuICAgICAgICAgIG1heE1paiA9IE1hdGguYWJzKE1paltpXVtqXSk7XG4gICAgICAgICAgbWF4SUogPSBbaSwgal07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gW21heElKLCBtYXhNaWpdO1xuICB9IC8vIGdldCBtYXggb2ZmLWRpYWdvbmFsIHZhbHVlIGZyb20gVXBwZXIgRGlhZ29uYWxcblxuXG4gIGZ1bmN0aW9uIGdldEFpakJpZyhNaWopIHtcbiAgICB2YXIgTiA9IE1pai5sZW5ndGg7XG4gICAgdmFyIG1heE1paiA9IDA7XG4gICAgdmFyIG1heElKID0gWzAsIDFdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBOOyBpKyspIHtcbiAgICAgIGZvciAodmFyIGogPSBpICsgMTsgaiA8IE47IGorKykge1xuICAgICAgICBpZiAoYWJzKG1heE1paikgPCBhYnMoTWlqW2ldW2pdKSkge1xuICAgICAgICAgIG1heE1paiA9IGFicyhNaWpbaV1bal0pO1xuICAgICAgICAgIG1heElKID0gW2ksIGpdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFttYXhJSiwgbWF4TWlqXTtcbiAgfSAvLyBzb3J0IHJlc3VsdHNcblxuXG4gIGZ1bmN0aW9uIHNvcnRpbmcoRSwgUykge1xuICAgIHZhciBOID0gRS5sZW5ndGg7XG4gICAgdmFyIEVmID0gQXJyYXkoTik7XG4gICAgdmFyIFNmID0gQXJyYXkoTik7XG5cbiAgICBmb3IgKHZhciBrID0gMDsgayA8IE47IGsrKykge1xuICAgICAgU2Zba10gPSBBcnJheShOKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IE47IGkrKykge1xuICAgICAgdmFyIG1pbklEID0gMDtcbiAgICAgIHZhciBtaW5FID0gRVswXTtcblxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBFLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChFW2pdIDwgbWluRSkge1xuICAgICAgICAgIG1pbklEID0gajtcbiAgICAgICAgICBtaW5FID0gRVttaW5JRF07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgRWZbaV0gPSBFLnNwbGljZShtaW5JRCwgMSlbMF07XG5cbiAgICAgIGZvciAodmFyIF9rNSA9IDA7IF9rNSA8IE47IF9rNSsrKSB7XG4gICAgICAgIFNmW19rNV1baV0gPSBTW19rNV1bbWluSURdO1xuXG4gICAgICAgIFNbX2s1XS5zcGxpY2UobWluSUQsIDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBbKDAsIF9vYmplY3QuY2xvbmUpKEVmKSwgKDAsIF9vYmplY3QuY2xvbmUpKFNmKV07XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBhcnJheSBvZiBhIGNlcnRhaW4gc2l6ZSBhbmQgZmlsbCBhbGwgaXRlbXMgd2l0aCBhbiBpbml0aWFsIHZhbHVlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzaXplXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcmV0dXJuIHtudW1iZXJbXX1cbiAgICovXG5cblxuICBmdW5jdGlvbiBjcmVhdGVBcnJheShzaXplLCB2YWx1ZSkge1xuICAgIC8vIFRPRE86IGFzIHNvb24gYXMgYWxsIGJyb3dzZXJzIHN1cHBvcnQgQXJyYXkuZmlsbCwgdXNlIHRoYXQgaW5zdGVhZCAoSUUgZG9lc24ndCBzdXBwb3J0IGl0KVxuICAgIHZhciBhcnJheSA9IG5ldyBBcnJheShzaXplKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICBhcnJheVtpXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiBhcnJheTtcbiAgfVxuXG4gIHJldHVybiBlaWdzO1xufSk7XG5leHBvcnRzLmNyZWF0ZUVpZ3MgPSBjcmVhdGVFaWdzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVFeHBtID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdleHBtJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FicycsICdhZGQnLCAnaWRlbnRpdHknLCAnaW52JywgJ211bHRpcGx5J107XG52YXIgY3JlYXRlRXhwbSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBhYnMgPSBfcmVmLmFicyxcbiAgICAgIGFkZCA9IF9yZWYuYWRkLFxuICAgICAgaWRlbnRpdHkgPSBfcmVmLmlkZW50aXR5LFxuICAgICAgaW52ID0gX3JlZi5pbnYsXG4gICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHk7XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIG1hdHJpeCBleHBvbmVudGlhbCwgZXhwbShBKSA9IGVeQS4gVGhlIG1hdHJpeCBtdXN0IGJlIHNxdWFyZS5cbiAgICogTm90IHRvIGJlIGNvbmZ1c2VkIHdpdGggZXhwKGEpLCB3aGljaCBwZXJmb3JtcyBlbGVtZW50LXdpc2VcbiAgICogZXhwb25lbnRpYXRpb24uXG4gICAqXG4gICAqIFRoZSBleHBvbmVudGlhbCBpcyBjYWxjdWxhdGVkIHVzaW5nIHRoZSBQYWTDqSBhcHByb3hpbWFudCB3aXRoIHNjYWxpbmcgYW5kXG4gICAqIHNxdWFyaW5nOyBzZWUgXCJOaW5ldGVlbiBEdWJpb3VzIFdheXMgdG8gQ29tcHV0ZSB0aGUgRXhwb25lbnRpYWwgb2YgYVxuICAgKiBNYXRyaXgsXCIgYnkgTW9sZXIgYW5kIFZhbiBMb2FuLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLmV4cG0oeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBjb25zdCBBID0gW1swLDJdLFswLDBdXVxuICAgKiAgICAgbWF0aC5leHBtKEEpICAgICAgICAvLyByZXR1cm5zIFtbMSwyXSxbMCwxXV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBleHBcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9IHggIEEgc3F1YXJlIE1hdHJpeFxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgVGhlIGV4cG9uZW50aWFsIG9mIHhcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoQSkge1xuICAgICAgLy8gQ2hlY2sgbWF0cml4IHNpemVcbiAgICAgIHZhciBzaXplID0gQS5zaXplKCk7XG5cbiAgICAgIGlmIChzaXplLmxlbmd0aCAhPT0gMiB8fCBzaXplWzBdICE9PSBzaXplWzFdKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggbXVzdCBiZSBzcXVhcmUgJyArICcoc2l6ZTogJyArICgwLCBfc3RyaW5nLmZvcm1hdCkoc2l6ZSkgKyAnKScpO1xuICAgICAgfVxuXG4gICAgICB2YXIgbiA9IHNpemVbMF07IC8vIERlc2lyZWQgYWNjdXJhY3kgb2YgdGhlIGFwcHJveGltYW50IChUaGUgYWN0dWFsIGFjY3VyYWN5XG4gICAgICAvLyB3aWxsIGJlIGFmZmVjdGVkIGJ5IHJvdW5kLW9mZiBlcnJvcilcblxuICAgICAgdmFyIGVwcyA9IDFlLTE1OyAvLyBUaGUgUGFkw6kgYXBwcm94aW1hbnQgaXMgbm90IHNvIGFjY3VyYXRlIHdoZW4gdGhlIHZhbHVlcyBvZiBBXG4gICAgICAvLyBhcmUgXCJsYXJnZVwiLCBzbyBzY2FsZSBBIGJ5IHBvd2VycyBvZiB0d28uIFRoZW4gY29tcHV0ZSB0aGVcbiAgICAgIC8vIGV4cG9uZW50aWFsLCBhbmQgc3F1YXJlIHRoZSByZXN1bHQgcmVwZWF0ZWRseSBhY2NvcmRpbmcgdG9cbiAgICAgIC8vIHRoZSBpZGVudGl0eSBlXkEgPSAoZV4oQS9tKSlebVxuICAgICAgLy8gQ29tcHV0ZSBpbmZpbml0eS1ub3JtIG9mIEEsIHx8QXx8LCB0byBzZWUgaG93IFwiYmlnXCIgaXQgaXNcblxuICAgICAgdmFyIGluZk5vcm0gPSBpbmZpbml0eU5vcm0oQSk7IC8vIEZpbmQgdGhlIG9wdGltYWwgc2NhbGluZyBmYWN0b3IgYW5kIG51bWJlciBvZiB0ZXJtcyBpbiB0aGVcbiAgICAgIC8vIFBhZMOpIGFwcHJveGltYW50IHRvIHJlYWNoIHRoZSBkZXNpcmVkIGFjY3VyYWN5XG5cbiAgICAgIHZhciBwYXJhbXMgPSBmaW5kUGFyYW1zKGluZk5vcm0sIGVwcyk7XG4gICAgICB2YXIgcSA9IHBhcmFtcy5xO1xuICAgICAgdmFyIGogPSBwYXJhbXMuajsgLy8gVGhlIFBhZGUgYXBwcm94aW1hdGlvbiB0byBlXkEgaXM6XG4gICAgICAvLyBScXEoQSkgPSBEcXEoQSkgXiAtMSAqIE5xcShBKVxuICAgICAgLy8gd2hlcmVcbiAgICAgIC8vIE5xcShBKSA9IHN1bShpPTAsIHEsICgycS1pKSFwISAvIFsgKDJxKSFpIShxLWkpISBdIEFeaVxuICAgICAgLy8gRHFxKEEpID0gc3VtKGk9MCwgcSwgKDJxLWkpIXEhIC8gWyAoMnEpIWkhKHEtaSkhIF0gKC1BKV5pXG4gICAgICAvLyBTY2FsZSBBIGJ5IDEgLyAyXmpcblxuICAgICAgdmFyIEFwb3MgPSBtdWx0aXBseShBLCBNYXRoLnBvdygyLCAtaikpOyAvLyBUaGUgaT0wIHRlcm0gaXMganVzdCB0aGUgaWRlbnRpdHkgbWF0cml4XG5cbiAgICAgIHZhciBOID0gaWRlbnRpdHkobik7XG4gICAgICB2YXIgRCA9IGlkZW50aXR5KG4pOyAvLyBJbml0aWFsaXphdGlvbiAoaT0wKVxuXG4gICAgICB2YXIgZmFjdG9yID0gMTsgLy8gSW5pdGlhbGl6YXRpb24gKGk9MSlcblxuICAgICAgdmFyIEFwb3NUb0kgPSBBcG9zOyAvLyBDbG9uaW5nIG5vdCBuZWNlc3NhcnlcblxuICAgICAgdmFyIGFsdGVybmF0ZSA9IC0xO1xuXG4gICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBxOyBpKyspIHtcbiAgICAgICAgaWYgKGkgPiAxKSB7XG4gICAgICAgICAgQXBvc1RvSSA9IG11bHRpcGx5KEFwb3NUb0ksIEFwb3MpO1xuICAgICAgICAgIGFsdGVybmF0ZSA9IC1hbHRlcm5hdGU7XG4gICAgICAgIH1cblxuICAgICAgICBmYWN0b3IgPSBmYWN0b3IgKiAocSAtIGkgKyAxKSAvICgoMiAqIHEgLSBpICsgMSkgKiBpKTtcbiAgICAgICAgTiA9IGFkZChOLCBtdWx0aXBseShmYWN0b3IsIEFwb3NUb0kpKTtcbiAgICAgICAgRCA9IGFkZChELCBtdWx0aXBseShmYWN0b3IgKiBhbHRlcm5hdGUsIEFwb3NUb0kpKTtcbiAgICAgIH1cblxuICAgICAgdmFyIFIgPSBtdWx0aXBseShpbnYoRCksIE4pOyAvLyBTcXVhcmUgaiB0aW1lc1xuXG4gICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgajsgX2krKykge1xuICAgICAgICBSID0gbXVsdGlwbHkoUiwgUik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoMCwgX2lzLmlzU3BhcnNlTWF0cml4KShBKSA/IEEuY3JlYXRlU3BhcnNlTWF0cml4KFIpIDogUjtcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGluZmluaXR5Tm9ybShBKSB7XG4gICAgdmFyIG4gPSBBLnNpemUoKVswXTtcbiAgICB2YXIgaW5mTm9ybSA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgdmFyIHJvd1N1bSA9IDA7XG5cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbjsgaisrKSB7XG4gICAgICAgIHJvd1N1bSArPSBhYnMoQS5nZXQoW2ksIGpdKSk7XG4gICAgICB9XG5cbiAgICAgIGluZk5vcm0gPSBNYXRoLm1heChyb3dTdW0sIGluZk5vcm0pO1xuICAgIH1cblxuICAgIHJldHVybiBpbmZOb3JtO1xuICB9XG4gIC8qKlxuICAgKiBGaW5kIHRoZSBiZXN0IHBhcmFtZXRlcnMgZm9yIHRoZSBQYWRlIGFwcHJveGltYW50IGdpdmVuXG4gICAqIHRoZSBtYXRyaXggbm9ybSBhbmQgZGVzaXJlZCBhY2N1cmFjeS4gUmV0dXJucyB0aGUgZmlyc3QgYWNjZXB0YWJsZVxuICAgKiBjb21iaW5hdGlvbiBpbiBvcmRlciBvZiBpbmNyZWFzaW5nIGNvbXB1dGF0aW9uYWwgbG9hZC5cbiAgICovXG5cblxuICBmdW5jdGlvbiBmaW5kUGFyYW1zKGluZk5vcm0sIGVwcykge1xuICAgIHZhciBtYXhTZWFyY2hTaXplID0gMzA7XG5cbiAgICBmb3IgKHZhciBrID0gMDsgayA8IG1heFNlYXJjaFNpemU7IGsrKykge1xuICAgICAgZm9yICh2YXIgcSA9IDA7IHEgPD0gazsgcSsrKSB7XG4gICAgICAgIHZhciBqID0gayAtIHE7XG5cbiAgICAgICAgaWYgKGVycm9yRXN0aW1hdGUoaW5mTm9ybSwgcSwgaikgPCBlcHMpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcTogcSxcbiAgICAgICAgICAgIGo6IGpcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZmluZCBhY2NlcHRhYmxlIHBhcmFtZXRlcnMgdG8gY29tcHV0ZSB0aGUgbWF0cml4IGV4cG9uZW50aWFsICh0cnkgaW5jcmVhc2luZyBtYXhTZWFyY2hTaXplIGluIGV4cG0uanMpJyk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGVzdGltYXRlZCBlcnJvciBvZiB0aGUgUGFkZSBhcHByb3hpbWFudCBmb3IgdGhlIGdpdmVuXG4gICAqIHBhcmFtZXRlcnMuXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gZXJyb3JFc3RpbWF0ZShpbmZOb3JtLCBxLCBqKSB7XG4gICAgdmFyIHFmYWMgPSAxO1xuXG4gICAgZm9yICh2YXIgaSA9IDI7IGkgPD0gcTsgaSsrKSB7XG4gICAgICBxZmFjICo9IGk7XG4gICAgfVxuXG4gICAgdmFyIHR3b3FmYWMgPSBxZmFjO1xuXG4gICAgZm9yICh2YXIgX2kyID0gcSArIDE7IF9pMiA8PSAyICogcTsgX2kyKyspIHtcbiAgICAgIHR3b3FmYWMgKj0gX2kyO1xuICAgIH1cblxuICAgIHZhciB0d29xcDFmYWMgPSB0d29xZmFjICogKDIgKiBxICsgMSk7XG4gICAgcmV0dXJuIDguMCAqIE1hdGgucG93KGluZk5vcm0gLyBNYXRoLnBvdygyLCBqKSwgMiAqIHEpICogcWZhYyAqIHFmYWMgLyAodHdvcWZhYyAqIHR3b3FwMWZhYyk7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVFeHBtID0gY3JlYXRlRXhwbTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRXllID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxuLy8gVE9ETzogZnVuY3Rpb24gZXllIGlzIHJlbW92ZWQgc2luY2UgdjUuMC4wIChKdW5lIDIwMTgpLiBSZW1vdmUgaXQgc29tZSBkYXkuXG52YXIgY3JlYXRlRXllID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKCdleWUnLCBbXSwgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZXllKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRnVuY3Rpb24gXCJleWVcIiBpcyByZW5hbWVkIHRvIFwiaWRlbnRpdHlcIiBzaW5jZSBtYXRoanMgdmVyc2lvbiA1LjAuMC4gJyArICdUbyBrZWVwIGV5ZSB3b3JraW5nLCBjcmVhdGUgYW4gYWxpYXMgZm9yIGl0IHVzaW5nIFwibWF0aC5pbXBvcnQoe2V5ZTogbWF0aC5pZGVudGl0eX0sIHtvdmVycmlkZTogdHJ1ZX0pXCInKTtcbiAgfTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVFeWUgPSBjcmVhdGVFeWU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUZpbHRlciA9IHZvaWQgMDtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mdW5jdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mdW5jdGlvblwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2ZpbHRlcic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUZpbHRlciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIEZpbHRlciB0aGUgaXRlbXMgaW4gYW4gYXJyYXkgb3Igb25lIGRpbWVuc2lvbmFsIG1hdHJpeC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmZpbHRlcih4LCB0ZXN0KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgZnVuY3Rpb24gaXNQb3NpdGl2ZSAoeCkge1xuICAgKiAgICAgIHJldHVybiB4ID4gMFxuICAgKiAgICB9XG4gICAqICAgIG1hdGguZmlsdGVyKFs2LCAtMiwgLTEsIDQsIDNdLCBpc1Bvc2l0aXZlKSAvLyByZXR1cm5zIFs2LCA0LCAzXVxuICAgKlxuICAgKiAgICBtYXRoLmZpbHRlcihbXCIyM1wiLCBcImZvb1wiLCBcIjEwMFwiLCBcIjU1XCIsIFwiYmFyXCJdLCAvWzAtOV0rLykgLy8gcmV0dXJucyBbXCIyM1wiLCBcIjEwMFwiLCBcIjU1XCJdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBmb3JFYWNoLCBtYXAsIHNvcnRcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXggfCBBcnJheX0geCAgICBBIG9uZSBkaW1lbnNpb25hbCBtYXRyaXggb3IgYXJyYXkgdG8gZmlsdGVyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb24gfCBSZWdFeHB9IHRlc3RcbiAgICogICAgICAgIEEgZnVuY3Rpb24gb3IgcmVndWxhciBleHByZXNzaW9uIHRvIHRlc3QgaXRlbXMuXG4gICAqICAgICAgICBBbGwgZW50cmllcyBmb3Igd2hpY2ggYHRlc3RgIHJldHVybnMgdHJ1ZSBhcmUgcmV0dXJuZWQuXG4gICAqICAgICAgICBXaGVuIGB0ZXN0YCBpcyBhIGZ1bmN0aW9uLCBpdCBpcyBpbnZva2VkIHdpdGggdGhyZWUgcGFyYW1ldGVyczpcbiAgICogICAgICAgIHRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudCwgdGhlIGluZGV4IG9mIHRoZSBlbGVtZW50LCBhbmQgdGhlXG4gICAqICAgICAgICBtYXRyaXgvYXJyYXkgYmVpbmcgdHJhdmVyc2VkLiBUaGUgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSBib29sZWFuLlxuICAgKiBAcmV0dXJuIHtNYXRyaXggfCBBcnJheX0gUmV0dXJucyB0aGUgZmlsdGVyZWQgbWF0cml4LlxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKCdmaWx0ZXInLCB7XG4gICAgJ0FycmF5LCBmdW5jdGlvbic6IF9maWx0ZXJDYWxsYmFjayxcbiAgICAnTWF0cml4LCBmdW5jdGlvbic6IGZ1bmN0aW9uIE1hdHJpeEZ1bmN0aW9uKHgsIHRlc3QpIHtcbiAgICAgIHJldHVybiB4LmNyZWF0ZShfZmlsdGVyQ2FsbGJhY2soeC50b0FycmF5KCksIHRlc3QpKTtcbiAgICB9LFxuICAgICdBcnJheSwgUmVnRXhwJzogX2FycmF5LmZpbHRlclJlZ0V4cCxcbiAgICAnTWF0cml4LCBSZWdFeHAnOiBmdW5jdGlvbiBNYXRyaXhSZWdFeHAoeCwgdGVzdCkge1xuICAgICAgcmV0dXJuIHguY3JlYXRlKCgwLCBfYXJyYXkuZmlsdGVyUmVnRXhwKSh4LnRvQXJyYXkoKSwgdGVzdCkpO1xuICAgIH1cbiAgfSk7XG59KTtcbi8qKlxuICogRmlsdGVyIHZhbHVlcyBpbiBhIGNhbGxiYWNrIGdpdmVuIGEgY2FsbGJhY2sgZnVuY3Rpb25cbiAqIEBwYXJhbSB7QXJyYXl9IHhcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtBcnJheX0gUmV0dXJucyB0aGUgZmlsdGVyZWQgYXJyYXlcbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0cy5jcmVhdGVGaWx0ZXIgPSBjcmVhdGVGaWx0ZXI7XG5cbmZ1bmN0aW9uIF9maWx0ZXJDYWxsYmFjayh4LCBjYWxsYmFjaykge1xuICAvLyBmaWd1cmUgb3V0IHdoYXQgbnVtYmVyIG9mIGFyZ3VtZW50cyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZXhwZWN0c1xuICB2YXIgYXJncyA9ICgwLCBfZnVuY3Rpb24ubWF4QXJndW1lbnRDb3VudCkoY2FsbGJhY2spO1xuICByZXR1cm4gKDAsIF9hcnJheS5maWx0ZXIpKHgsIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGFycmF5KSB7XG4gICAgLy8gaW52b2tlIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aXRoIHRoZSByaWdodCBudW1iZXIgb2YgYXJndW1lbnRzXG4gICAgaWYgKGFyZ3MgPT09IDEpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayh2YWx1ZSk7XG4gICAgfSBlbHNlIGlmIChhcmdzID09PSAyKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2sodmFsdWUsIFtpbmRleF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyAzIG9yIC0xXG4gICAgICByZXR1cm4gY2FsbGJhY2sodmFsdWUsIFtpbmRleF0sIGFycmF5KTtcbiAgICB9XG4gIH0pO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVGbGF0dGVuID0gdm9pZCAwO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdmbGF0dGVuJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCddO1xudmFyIGNyZWF0ZUZsYXR0ZW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXg7XG5cbiAgLyoqXG4gICAqIEZsYXR0ZW4gYSBtdWx0aSBkaW1lbnNpb25hbCBtYXRyaXggaW50byBhIHNpbmdsZSBkaW1lbnNpb25hbCBtYXRyaXguXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5mbGF0dGVuKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmZsYXR0ZW4oW1sxLDJdLCBbMyw0XV0pICAgLy8gcmV0dXJucyBbMSwgMiwgMywgNF1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGNvbmNhdCwgcmVzaXplLCBzaXplLCBzcXVlZXplXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4IHwgQXJyYXl9IHggICBNYXRyaXggdG8gYmUgZmxhdHRlbmVkXG4gICAqIEByZXR1cm4ge01hdHJpeCB8IEFycmF5fSBSZXR1cm5zIHRoZSBmbGF0dGVuZWQgbWF0cml4XG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIEFycmF5OiBmdW5jdGlvbiBBcnJheSh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9hcnJheS5mbGF0dGVuKSgoMCwgX29iamVjdC5jbG9uZSkoeCkpO1xuICAgIH0sXG4gICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoeCkge1xuICAgICAgdmFyIGZsYXQgPSAoMCwgX2FycmF5LmZsYXR0ZW4pKCgwLCBfb2JqZWN0LmNsb25lKSh4LnRvQXJyYXkoKSkpOyAvLyBUT0RPOiByZXR1cm4gdGhlIHNhbWUgbWF0cml4IHR5cGUgYXMgeFxuXG4gICAgICByZXR1cm4gbWF0cml4KGZsYXQpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlRmxhdHRlbiA9IGNyZWF0ZUZsYXR0ZW47IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUZvckVhY2ggPSB2b2lkIDA7XG5cbnZhciBfZnVuY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZnVuY3Rpb25cIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdmb3JFYWNoJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlRm9yRWFjaCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGUgb3ZlciBhbGwgZWxlbWVudHMgb2YgYSBtYXRyaXgvYXJyYXksIGFuZCBleGVjdXRlcyB0aGUgZ2l2ZW4gY2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5mb3JFYWNoKHgsIGNhbGxiYWNrKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5mb3JFYWNoKFsxLCAyLCAzXSwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICogICAgICBjb25zb2xlLmxvZyh2YWx1ZSlcbiAgICogICAgfSlcbiAgICogICAgLy8gb3V0cHV0cyAxLCAyLCAzXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBmaWx0ZXIsIG1hcCwgc29ydFxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeCB8IEFycmF5fSB4ICAgIFRoZSBtYXRyaXggdG8gaXRlcmF0ZSBvbi5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgaW52b2tlZCB3aXRoIHRocmVlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyczogdGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50LCB0aGUgaW5kZXhcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgZWxlbWVudCwgYW5kIHRoZSBNYXRyaXgvYXJyYXkgYmVpbmcgdHJhdmVyc2VkLlxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnQXJyYXksIGZ1bmN0aW9uJzogX2ZvckVhY2gsXG4gICAgJ01hdHJpeCwgZnVuY3Rpb24nOiBmdW5jdGlvbiBNYXRyaXhGdW5jdGlvbih4LCBjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHguZm9yRWFjaChjYWxsYmFjayk7XG4gICAgfVxuICB9KTtcbn0pO1xuLyoqXG4gKiBmb3JFYWNoIGZvciBhIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0cy5jcmVhdGVGb3JFYWNoID0gY3JlYXRlRm9yRWFjaDtcblxuZnVuY3Rpb24gX2ZvckVhY2goYXJyYXksIGNhbGxiYWNrKSB7XG4gIC8vIGZpZ3VyZSBvdXQgd2hhdCBudW1iZXIgb2YgYXJndW1lbnRzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBleHBlY3RzXG4gIHZhciBhcmdzID0gKDAsIF9mdW5jdGlvbi5tYXhBcmd1bWVudENvdW50KShjYWxsYmFjayk7XG5cbiAgdmFyIHJlY3Vyc2UgPSBmdW5jdGlvbiByZWN1cnNlKHZhbHVlLCBpbmRleCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgKDAsIF9hcnJheS5mb3JFYWNoKSh2YWx1ZSwgZnVuY3Rpb24gKGNoaWxkLCBpKSB7XG4gICAgICAgIC8vIHdlIGNyZWF0ZSBhIGNvcHkgb2YgdGhlIGluZGV4IGFycmF5IGFuZCBhcHBlbmQgdGhlIG5ldyBpbmRleCB2YWx1ZVxuICAgICAgICByZWN1cnNlKGNoaWxkLCBpbmRleC5jb25jYXQoaSkpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGludm9rZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aCB0aGUgcmlnaHQgbnVtYmVyIG9mIGFyZ3VtZW50c1xuICAgICAgaWYgKGFyZ3MgPT09IDEpIHtcbiAgICAgICAgY2FsbGJhY2sodmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChhcmdzID09PSAyKSB7XG4gICAgICAgIGNhbGxiYWNrKHZhbHVlLCBpbmRleCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyAzIG9yIC0xXG4gICAgICAgIGNhbGxiYWNrKHZhbHVlLCBpbmRleCwgYXJyYXkpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICByZWN1cnNlKGFycmF5LCBbXSk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUdldE1hdHJpeERhdGFUeXBlID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIG5hbWUgPSAnZ2V0TWF0cml4RGF0YVR5cGUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVHZXRNYXRyaXhEYXRhVHlwZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIEZpbmQgdGhlIGRhdGEgdHlwZSBvZiBhbGwgZWxlbWVudHMgaW4gYSBtYXRyaXggb3IgYXJyYXksXG4gICAqIGZvciBleGFtcGxlICdudW1iZXInIGlmIGFsbCBpdGVtcyBhcmUgYSBudW1iZXIgYW5kICdDb21wbGV4JyBpZiBhbGwgdmFsdWVzXG4gICAqIGFyZSBjb21wbGV4IG51bWJlcnMuXG4gICAqIElmIGEgbWF0cml4IGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgZGF0YSB0eXBlLCBpdCB3aWxsIHJldHVybiAnbWl4ZWQnLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguZ2V0TWF0cml4RGF0YVR5cGUoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIGNvbnN0IHggPSBbIFsxLCAyLCAzXSwgWzQsIDUsIDZdIF1cbiAgICogICAgY29uc3QgbWl4ZWRYID0gWyBbMSwgdHJ1ZV0sIFsyLCAzXSBdXG4gICAqICAgIGNvbnN0IGZyYWN0aW9uWCA9IFsgW21hdGguZnJhY3Rpb24oMSwgMyldLCBbbWF0aC5mcmFjdGlvbigxLCAzXSBdXG4gICAqICAgIGNvbnN0IHVuaXRYID0gWyBbbWF0aC51bml0KCc1Y20nKV0sIFttYXRoLnVuaXQoJzVjbScpXSBdXG4gICAqICAgIGNvbnN0IGJpZ051bWJlclggPSBbIFttYXRoLmJpZ251bWJlcigxKV0sIFttYXRoLmJpZ251bWJlcigwKV0gXVxuICAgKiAgICBjb25zdCBzcGFyc2UgPSBtYXRoLnNwYXJzZSh4KVxuICAgKiAgICBjb25zdCBkZW5zZSA9IG1hdGgubWF0cml4KHgpXG4gICAqICAgIG1hdGguZ2V0TWF0cml4RGF0YVR5cGUoeCkgICAvLyByZXR1cm5zICdudW1iZXInXG4gICAqICAgIG1hdGguZ2V0TWF0cml4RGF0YVR5cGUoc3BhcnNlKSAgIC8vIHJldHVybnMgJ251bWJlcidcbiAgICogICAgbWF0aC5nZXRNYXRyaXhEYXRhVHlwZShkZW5zZSkgICAvLyByZXR1cm5zICdudW1iZXInXG4gICAqICAgIG1hdGguZ2V0TWF0cml4RGF0YVR5cGUobWl4ZWRYKSAvLyByZXR1cm5zICdtaXhlZCdcbiAgICogICAgbWF0aC5nZXRNYXRyaXhEYXRhVHlwZShmcmFjdGlvblgpIC8vIHJldHVybnMgJ0ZyYWN0aW9uJ1xuICAgKiAgICBtYXRoLmdldE1hdHJpeERhdGFUeXBlKHVuaXRYKSAvLyByZXR1cm5zICdVbml0J1xuICAgKiAgICBtYXRoLmdldE1hdHJpeERhdGFUeXBlKGJpZ051bWJlclgpIC8vIHJldHVybiAnQmlnTnVtYmVyJ1xuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICogIFNwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXhcbiAgICpcbiAgICogQHBhcmFtIHsuLi5NYXRyaXggfCBBcnJheX0geCAgIFRoZSBNYXRyaXggd2l0aCB2YWx1ZXMuXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ30gQSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1hdHJpeCB0eXBlXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIEFycmF5OiBmdW5jdGlvbiBBcnJheSh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9hcnJheS5nZXRBcnJheURhdGFUeXBlKSh4LCBfaXMudHlwZU9mKTtcbiAgICB9LFxuICAgIE1hdHJpeDogZnVuY3Rpb24gTWF0cml4KHgpIHtcbiAgICAgIHJldHVybiB4LmdldERhdGFUeXBlKCk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVHZXRNYXRyaXhEYXRhVHlwZSA9IGNyZWF0ZUdldE1hdHJpeERhdGFUeXBlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVJZGVudGl0eSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnaWRlbnRpdHknO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ21hdHJpeCcsICdCaWdOdW1iZXInLCAnRGVuc2VNYXRyaXgnLCAnU3BhcnNlTWF0cml4J107XG52YXIgY3JlYXRlSWRlbnRpdHkgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIEJpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4LFxuICAgICAgU3BhcnNlTWF0cml4ID0gX3JlZi5TcGFyc2VNYXRyaXg7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIDItZGltZW5zaW9uYWwgaWRlbnRpdHkgbWF0cml4IHdpdGggc2l6ZSBtIHggbiBvciBuIHggbi5cbiAgICogVGhlIG1hdHJpeCBoYXMgb25lcyBvbiB0aGUgZGlhZ29uYWwgYW5kIHplcm9zIGVsc2V3aGVyZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmlkZW50aXR5KG4pXG4gICAqICAgIG1hdGguaWRlbnRpdHkobiwgZm9ybWF0KVxuICAgKiAgICBtYXRoLmlkZW50aXR5KG0sIG4pXG4gICAqICAgIG1hdGguaWRlbnRpdHkobSwgbiwgZm9ybWF0KVxuICAgKiAgICBtYXRoLmlkZW50aXR5KFttLCBuXSlcbiAgICogICAgbWF0aC5pZGVudGl0eShbbSwgbl0sIGZvcm1hdClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguaWRlbnRpdHkoMykgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgW1sxLCAwLCAwXSwgWzAsIDEsIDBdLCBbMCwgMCwgMV1dXG4gICAqICAgIG1hdGguaWRlbnRpdHkoMywgMikgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgW1sxLCAwXSwgWzAsIDFdLCBbMCwgMF1dXG4gICAqXG4gICAqICAgIGNvbnN0IEEgPSBbWzEsIDIsIDNdLCBbNCwgNSwgNl1dXG4gICAqICAgIG1hdGguaWRlbnRpdHkobWF0aC5zaXplKEEpKSAgICAgICAgIC8vIHJldHVybnMgW1sxLCAwLCAwXSwgWzAsIDEsIDBdXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgZGlhZywgb25lcywgemVyb3MsIHNpemUsIHJhbmdlXG4gICAqXG4gICAqIEBwYXJhbSB7Li4ubnVtYmVyIHwgTWF0cml4IHwgQXJyYXl9IHNpemUgICBUaGUgc2l6ZSBmb3IgdGhlIG1hdHJpeFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Zvcm1hdF0gICAgICAgICAgICAgICAgICAgVGhlIE1hdHJpeCBzdG9yYWdlIGZvcm1hdFxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXggfCBBcnJheSB8IG51bWJlcn0gQSBtYXRyaXggd2l0aCBvbmVzIG9uIHRoZSBkaWFnb25hbC5cbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJyc6IGZ1bmN0aW9uIF8oKSB7XG4gICAgICByZXR1cm4gY29uZmlnLm1hdHJpeCA9PT0gJ01hdHJpeCcgPyBtYXRyaXgoW10pIDogW107XG4gICAgfSxcbiAgICBzdHJpbmc6IGZ1bmN0aW9uIHN0cmluZyhmb3JtYXQpIHtcbiAgICAgIHJldHVybiBtYXRyaXgoZm9ybWF0KTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXIocm93cykge1xuICAgICAgcmV0dXJuIF9pZGVudGl0eShyb3dzLCByb3dzLCBjb25maWcubWF0cml4ID09PSAnTWF0cml4JyA/ICdkZW5zZScgOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgc3RyaW5nJzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyU3RyaW5nKHJvd3MsIGZvcm1hdCkge1xuICAgICAgcmV0dXJuIF9pZGVudGl0eShyb3dzLCByb3dzLCBmb3JtYXQpO1xuICAgIH0sXG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyTnVtYmVyQmlnTnVtYmVyKHJvd3MsIGNvbHMpIHtcbiAgICAgIHJldHVybiBfaWRlbnRpdHkocm93cywgY29scywgY29uZmlnLm1hdHJpeCA9PT0gJ01hdHJpeCcgPyAnZGVuc2UnIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIG51bWJlciB8IEJpZ051bWJlciwgc3RyaW5nJzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyTnVtYmVyQmlnTnVtYmVyU3RyaW5nKHJvd3MsIGNvbHMsIGZvcm1hdCkge1xuICAgICAgcmV0dXJuIF9pZGVudGl0eShyb3dzLCBjb2xzLCBmb3JtYXQpO1xuICAgIH0sXG4gICAgQXJyYXk6IGZ1bmN0aW9uIEFycmF5KHNpemUpIHtcbiAgICAgIHJldHVybiBfaWRlbnRpdHlWZWN0b3Ioc2l6ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIHN0cmluZyc6IGZ1bmN0aW9uIEFycmF5U3RyaW5nKHNpemUsIGZvcm1hdCkge1xuICAgICAgcmV0dXJuIF9pZGVudGl0eVZlY3RvcihzaXplLCBmb3JtYXQpO1xuICAgIH0sXG4gICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoc2l6ZSkge1xuICAgICAgcmV0dXJuIF9pZGVudGl0eVZlY3RvcihzaXplLnZhbHVlT2YoKSwgc2l6ZS5zdG9yYWdlKCkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgc3RyaW5nJzogZnVuY3Rpb24gTWF0cml4U3RyaW5nKHNpemUsIGZvcm1hdCkge1xuICAgICAgcmV0dXJuIF9pZGVudGl0eVZlY3RvcihzaXplLnZhbHVlT2YoKSwgZm9ybWF0KTtcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIF9pZGVudGl0eVZlY3RvcihzaXplLCBmb3JtYXQpIHtcbiAgICBzd2l0Y2ggKHNpemUubGVuZ3RoKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIHJldHVybiBmb3JtYXQgPyBtYXRyaXgoZm9ybWF0KSA6IFtdO1xuXG4gICAgICBjYXNlIDE6XG4gICAgICAgIHJldHVybiBfaWRlbnRpdHkoc2l6ZVswXSwgc2l6ZVswXSwgZm9ybWF0KTtcblxuICAgICAgY2FzZSAyOlxuICAgICAgICByZXR1cm4gX2lkZW50aXR5KHNpemVbMF0sIHNpemVbMV0sIGZvcm1hdCk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVmVjdG9yIGNvbnRhaW5pbmcgdHdvIHZhbHVlcyBleHBlY3RlZCcpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIGFuIGlkZW50aXR5IG1hdHJpeFxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlcn0gcm93c1xuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlcn0gY29sc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Zvcm1hdF1cbiAgICogQHJldHVybnMge01hdHJpeH1cbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBfaWRlbnRpdHkocm93cywgY29scywgZm9ybWF0KSB7XG4gICAgLy8gQmlnTnVtYmVyIGNvbnN0cnVjdG9yIHdpdGggdGhlIHJpZ2h0IHByZWNpc2lvblxuICAgIHZhciBCaWcgPSAoMCwgX2lzLmlzQmlnTnVtYmVyKShyb3dzKSB8fCAoMCwgX2lzLmlzQmlnTnVtYmVyKShjb2xzKSA/IEJpZ051bWJlciA6IG51bGw7XG4gICAgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKHJvd3MpKSByb3dzID0gcm93cy50b051bWJlcigpO1xuICAgIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShjb2xzKSkgY29scyA9IGNvbHMudG9OdW1iZXIoKTtcblxuICAgIGlmICghKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShyb3dzKSB8fCByb3dzIDwgMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJhbWV0ZXJzIGluIGZ1bmN0aW9uIGlkZW50aXR5IG11c3QgYmUgcG9zaXRpdmUgaW50ZWdlcnMnKTtcbiAgICB9XG5cbiAgICBpZiAoISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoY29scykgfHwgY29scyA8IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGFyYW1ldGVycyBpbiBmdW5jdGlvbiBpZGVudGl0eSBtdXN0IGJlIHBvc2l0aXZlIGludGVnZXJzJyk7XG4gICAgfVxuXG4gICAgdmFyIG9uZSA9IEJpZyA/IG5ldyBCaWdOdW1iZXIoMSkgOiAxO1xuICAgIHZhciBkZWZhdWx0VmFsdWUgPSBCaWcgPyBuZXcgQmlnKDApIDogMDtcbiAgICB2YXIgc2l6ZSA9IFtyb3dzLCBjb2xzXTsgLy8gY2hlY2sgd2UgbmVlZCB0byByZXR1cm4gYSBtYXRyaXhcblxuICAgIGlmIChmb3JtYXQpIHtcbiAgICAgIC8vIGNyZWF0ZSBkaWFnb25hbCBtYXRyaXggKHVzZSBvcHRpbWl6ZWQgaW1wbGVtZW50YXRpb24gZm9yIHN0b3JhZ2UgZm9ybWF0KVxuICAgICAgaWYgKGZvcm1hdCA9PT0gJ3NwYXJzZScpIHtcbiAgICAgICAgcmV0dXJuIFNwYXJzZU1hdHJpeC5kaWFnb25hbChzaXplLCBvbmUsIDAsIGRlZmF1bHRWYWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmb3JtYXQgPT09ICdkZW5zZScpIHtcbiAgICAgICAgcmV0dXJuIERlbnNlTWF0cml4LmRpYWdvbmFsKHNpemUsIG9uZSwgMCwgZGVmYXVsdFZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gbWF0cml4IHR5cGUgXFxcIlwiLmNvbmNhdChmb3JtYXQsIFwiXFxcIlwiKSk7XG4gICAgfSAvLyBjcmVhdGUgYW5kIHJlc2l6ZSBhcnJheVxuXG5cbiAgICB2YXIgcmVzID0gKDAsIF9hcnJheS5yZXNpemUpKFtdLCBzaXplLCBkZWZhdWx0VmFsdWUpOyAvLyBmaWxsIGluIG9uZXMgb24gdGhlIGRpYWdvbmFsXG5cbiAgICB2YXIgbWluaW11bSA9IHJvd3MgPCBjb2xzID8gcm93cyA6IGNvbHM7IC8vIGZpbGwgZGlhZ29uYWxcblxuICAgIGZvciAodmFyIGQgPSAwOyBkIDwgbWluaW11bTsgZCsrKSB7XG4gICAgICByZXNbZF1bZF0gPSBvbmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZUlkZW50aXR5ID0gY3JlYXRlSWRlbnRpdHk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUludiA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3N0cmluZ1wiKTtcblxudmFyIG5hbWUgPSAnaW52JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdkaXZpZGVTY2FsYXInLCAnYWRkU2NhbGFyJywgJ211bHRpcGx5JywgJ3VuYXJ5TWludXMnLCAnZGV0JywgJ2lkZW50aXR5JywgJ2FicyddO1xudmFyIGNyZWF0ZUludiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGRpdmlkZVNjYWxhciA9IF9yZWYuZGl2aWRlU2NhbGFyLFxuICAgICAgYWRkU2NhbGFyID0gX3JlZi5hZGRTY2FsYXIsXG4gICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHksXG4gICAgICB1bmFyeU1pbnVzID0gX3JlZi51bmFyeU1pbnVzLFxuICAgICAgZGV0ID0gX3JlZi5kZXQsXG4gICAgICBpZGVudGl0eSA9IF9yZWYuaWRlbnRpdHksXG4gICAgICBhYnMgPSBfcmVmLmFicztcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBpbnZlcnNlIG9mIGEgc3F1YXJlIG1hdHJpeC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5pbnYoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLmludihbWzEsIDJdLCBbMywgNF1dKSAgLy8gcmV0dXJucyBbWy0yLCAxXSwgWzEuNSwgLTAuNV1dXG4gICAqICAgICBtYXRoLmludig0KSAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAwLjI1XG4gICAqICAgICAxIC8gNCAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAwLjI1XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgZGV0LCB0cmFuc3Bvc2VcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHggICAgIE1hdHJpeCB0byBiZSBpbnZlcnNlZFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IFRoZSBpbnZlcnNlIG9mIGB4YC5cbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgdmFyIHNpemUgPSAoMCwgX2lzLmlzTWF0cml4KSh4KSA/IHguc2l6ZSgpIDogKDAsIF9hcnJheS5hcnJheVNpemUpKHgpO1xuXG4gICAgICBzd2l0Y2ggKHNpemUubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAvLyB2ZWN0b3JcbiAgICAgICAgICBpZiAoc2l6ZVswXSA9PT0gMSkge1xuICAgICAgICAgICAgaWYgKCgwLCBfaXMuaXNNYXRyaXgpKHgpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBtYXRyaXgoW2RpdmlkZVNjYWxhcigxLCB4LnZhbHVlT2YoKVswXSldKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBbZGl2aWRlU2NhbGFyKDEsIHhbMF0pXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpeCBtdXN0IGJlIHNxdWFyZSAnICsgJyhzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShzaXplKSArICcpJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAvLyB0d28gZGltZW5zaW9uYWwgYXJyYXlcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgcm93cyA9IHNpemVbMF07XG4gICAgICAgICAgICB2YXIgY29scyA9IHNpemVbMV07XG5cbiAgICAgICAgICAgIGlmIChyb3dzID09PSBjb2xzKSB7XG4gICAgICAgICAgICAgIGlmICgoMCwgX2lzLmlzTWF0cml4KSh4KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtYXRyaXgoX2ludih4LnZhbHVlT2YoKSwgcm93cywgY29scyksIHguc3RvcmFnZSgpKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyByZXR1cm4gYW4gQXJyYXlcbiAgICAgICAgICAgICAgICByZXR1cm4gX2ludih4LCByb3dzLCBjb2xzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpeCBtdXN0IGJlIHNxdWFyZSAnICsgJyhzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShzaXplKSArICcpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgLy8gbXVsdGkgZGltZW5zaW9uYWwgYXJyYXlcbiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgdHdvIGRpbWVuc2lvbmFsICcgKyAnKHNpemU6ICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKHNpemUpICsgJyknKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGFueTogZnVuY3Rpb24gYW55KHgpIHtcbiAgICAgIC8vIHNjYWxhclxuICAgICAgcmV0dXJuIGRpdmlkZVNjYWxhcigxLCB4KTsgLy8gRklYTUU6IGNyZWF0ZSBhIEJpZ051bWJlciBvbmUgd2hlbiBjb25maWd1cmVkIGZvciBiaWdudW1iZXJzXG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgaW52ZXJzZSBvZiBhIHNxdWFyZSBtYXRyaXhcbiAgICogQHBhcmFtIHtBcnJheVtdfSBtYXQgICAgIEEgc3F1YXJlIG1hdHJpeFxuICAgKiBAcGFyYW0ge251bWJlcn0gcm93cyAgICAgTnVtYmVyIG9mIHJvd3NcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHMgICAgIE51bWJlciBvZiBjb2x1bW5zLCBtdXN0IGVxdWFsIHJvd3NcbiAgICogQHJldHVybiB7QXJyYXlbXX0gaW52ICAgIEludmVyc2UgbWF0cml4XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9pbnYobWF0LCByb3dzLCBjb2xzKSB7XG4gICAgdmFyIHIsIHMsIGYsIHZhbHVlLCB0ZW1wO1xuXG4gICAgaWYgKHJvd3MgPT09IDEpIHtcbiAgICAgIC8vIHRoaXMgaXMgYSAxIHggMSBtYXRyaXhcbiAgICAgIHZhbHVlID0gbWF0WzBdWzBdO1xuXG4gICAgICBpZiAodmFsdWUgPT09IDApIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0Nhbm5vdCBjYWxjdWxhdGUgaW52ZXJzZSwgZGV0ZXJtaW5hbnQgaXMgemVybycpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gW1tkaXZpZGVTY2FsYXIoMSwgdmFsdWUpXV07XG4gICAgfSBlbHNlIGlmIChyb3dzID09PSAyKSB7XG4gICAgICAvLyB0aGlzIGlzIGEgMiB4IDIgbWF0cml4XG4gICAgICB2YXIgZCA9IGRldChtYXQpO1xuXG4gICAgICBpZiAoZCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSBpbnZlcnNlLCBkZXRlcm1pbmFudCBpcyB6ZXJvJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbW2RpdmlkZVNjYWxhcihtYXRbMV1bMV0sIGQpLCBkaXZpZGVTY2FsYXIodW5hcnlNaW51cyhtYXRbMF1bMV0pLCBkKV0sIFtkaXZpZGVTY2FsYXIodW5hcnlNaW51cyhtYXRbMV1bMF0pLCBkKSwgZGl2aWRlU2NhbGFyKG1hdFswXVswXSwgZCldXTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdGhpcyBpcyBhIG1hdHJpeCBvZiAzIHggMyBvciBsYXJnZXJcbiAgICAgIC8vIGNhbGN1bGF0ZSBpbnZlcnNlIHVzaW5nIGdhdXNzLWpvcmRhbiBlbGltaW5hdGlvblxuICAgICAgLy8gICAgICBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9HYXVzc2lhbl9lbGltaW5hdGlvblxuICAgICAgLy8gICAgICBodHRwOi8vbWF0aHdvcmxkLndvbGZyYW0uY29tL01hdHJpeEludmVyc2UuaHRtbFxuICAgICAgLy8gICAgICBodHRwOi8vbWF0aC51d3cuZWR1L35tY2ZhcmxhdC9pbnZlcnNlLmh0bVxuICAgICAgLy8gbWFrZSBhIGNvcHkgb2YgdGhlIG1hdHJpeCAob25seSB0aGUgYXJyYXlzLCBub3Qgb2YgdGhlIGVsZW1lbnRzKVxuICAgICAgdmFyIEEgPSBtYXQuY29uY2F0KCk7XG5cbiAgICAgIGZvciAociA9IDA7IHIgPCByb3dzOyByKyspIHtcbiAgICAgICAgQVtyXSA9IEFbcl0uY29uY2F0KCk7XG4gICAgICB9IC8vIGNyZWF0ZSBhbiBpZGVudGl0eSBtYXRyaXggd2hpY2ggaW4gdGhlIGVuZCB3aWxsIGNvbnRhaW4gdGhlXG4gICAgICAvLyBtYXRyaXggaW52ZXJzZVxuXG5cbiAgICAgIHZhciBCID0gaWRlbnRpdHkocm93cykudmFsdWVPZigpOyAvLyBsb29wIG92ZXIgYWxsIGNvbHVtbnMsIGFuZCBwZXJmb3JtIHJvdyByZWR1Y3Rpb25zXG5cbiAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwgY29sczsgYysrKSB7XG4gICAgICAgIC8vIFBpdm90aW5nOiBTd2FwIHJvdyBjIHdpdGggcm93IHIsIHdoZXJlIHJvdyByIGNvbnRhaW5zIHRoZSBsYXJnZXN0IGVsZW1lbnQgQVtyXVtjXVxuICAgICAgICB2YXIgQUJpZyA9IGFicyhBW2NdW2NdKTtcbiAgICAgICAgdmFyIHJCaWcgPSBjO1xuICAgICAgICByID0gYyArIDE7XG5cbiAgICAgICAgd2hpbGUgKHIgPCByb3dzKSB7XG4gICAgICAgICAgaWYgKGFicyhBW3JdW2NdKSA+IEFCaWcpIHtcbiAgICAgICAgICAgIEFCaWcgPSBhYnMoQVtyXVtjXSk7XG4gICAgICAgICAgICByQmlnID0gcjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByKys7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQUJpZyA9PT0gMCkge1xuICAgICAgICAgIHRocm93IEVycm9yKCdDYW5ub3QgY2FsY3VsYXRlIGludmVyc2UsIGRldGVybWluYW50IGlzIHplcm8nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHIgPSByQmlnO1xuXG4gICAgICAgIGlmIChyICE9PSBjKSB7XG4gICAgICAgICAgdGVtcCA9IEFbY107XG4gICAgICAgICAgQVtjXSA9IEFbcl07XG4gICAgICAgICAgQVtyXSA9IHRlbXA7XG4gICAgICAgICAgdGVtcCA9IEJbY107XG4gICAgICAgICAgQltjXSA9IEJbcl07XG4gICAgICAgICAgQltyXSA9IHRlbXA7XG4gICAgICAgIH0gLy8gZWxpbWluYXRlIG5vbi16ZXJvIHZhbHVlcyBvbiB0aGUgb3RoZXIgcm93cyBhdCBjb2x1bW4gY1xuXG5cbiAgICAgICAgdmFyIEFjID0gQVtjXTtcbiAgICAgICAgdmFyIEJjID0gQltjXTtcblxuICAgICAgICBmb3IgKHIgPSAwOyByIDwgcm93czsgcisrKSB7XG4gICAgICAgICAgdmFyIEFyID0gQVtyXTtcbiAgICAgICAgICB2YXIgQnIgPSBCW3JdO1xuXG4gICAgICAgICAgaWYgKHIgIT09IGMpIHtcbiAgICAgICAgICAgIC8vIGVsaW1pbmF0ZSB2YWx1ZSBhdCBjb2x1bW4gYyBhbmQgcm93IHJcbiAgICAgICAgICAgIGlmIChBcltjXSAhPT0gMCkge1xuICAgICAgICAgICAgICBmID0gZGl2aWRlU2NhbGFyKHVuYXJ5TWludXMoQXJbY10pLCBBY1tjXSk7IC8vIGFkZCAoZiAqIHJvdyBjKSB0byByb3cgciB0byBlbGltaW5hdGUgdGhlIHZhbHVlXG4gICAgICAgICAgICAgIC8vIGF0IGNvbHVtbiBjXG5cbiAgICAgICAgICAgICAgZm9yIChzID0gYzsgcyA8IGNvbHM7IHMrKykge1xuICAgICAgICAgICAgICAgIEFyW3NdID0gYWRkU2NhbGFyKEFyW3NdLCBtdWx0aXBseShmLCBBY1tzXSkpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZm9yIChzID0gMDsgcyA8IGNvbHM7IHMrKykge1xuICAgICAgICAgICAgICAgIEJyW3NdID0gYWRkU2NhbGFyKEJyW3NdLCBtdWx0aXBseShmLCBCY1tzXSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIG5vcm1hbGl6ZSB2YWx1ZSBhdCBBY2MgdG8gMSxcbiAgICAgICAgICAgIC8vIGRpdmlkZSBlYWNoIHZhbHVlIG9uIHJvdyByIHdpdGggdGhlIHZhbHVlIGF0IEFjY1xuICAgICAgICAgICAgZiA9IEFjW2NdO1xuXG4gICAgICAgICAgICBmb3IgKHMgPSBjOyBzIDwgY29sczsgcysrKSB7XG4gICAgICAgICAgICAgIEFyW3NdID0gZGl2aWRlU2NhbGFyKEFyW3NdLCBmKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChzID0gMDsgcyA8IGNvbHM7IHMrKykge1xuICAgICAgICAgICAgICBCcltzXSA9IGRpdmlkZVNjYWxhcihCcltzXSwgZik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBCO1xuICAgIH1cbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZUludiA9IGNyZWF0ZUludjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlS3JvbiA9IHZvaWQgMDtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2tyb24nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ211bHRpcGx5U2NhbGFyJ107XG52YXIgY3JlYXRlS3JvbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIG11bHRpcGx5U2NhbGFyID0gX3JlZi5tdWx0aXBseVNjYWxhcjtcblxuICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBrcm9uZWNrZXIgcHJvZHVjdCBvZiAyIG1hdHJpY2VzIG9yIHZlY3RvcnMuXG4gICAgICpcbiAgICAgKiBOT1RFOiBJZiBhIG9uZSBkaW1lbnNpb25hbCB2ZWN0b3IgLyBtYXRyaXggaXMgZ2l2ZW4sIGl0IHdpbGwgYmVcbiAgICAgKiB3cmFwcGVkIHNvIGl0cyB0d28gZGltZW5zaW9ucy5cbiAgICAgKiBTZWUgdGhlIGV4YW1wbGVzLlxuICAgICAqXG4gICAgICogU3ludGF4OlxuICAgICAqXG4gICAgICogICAgbWF0aC5rcm9uKHgsIHkpXG4gICAgICpcbiAgICAgKiBFeGFtcGxlczpcbiAgICAgKlxuICAgICAqICAgIG1hdGgua3JvbihbWzEsIDBdLCBbMCwgMV1dLCBbWzEsIDJdLCBbMywgNF1dKVxuICAgICAqICAgIC8vIHJldHVybnMgWyBbIDEsIDIsIDAsIDAgXSwgWyAzLCA0LCAwLCAwIF0sIFsgMCwgMCwgMSwgMiBdLCBbIDAsIDAsIDMsIDQgXSBdXG4gICAgICpcbiAgICAgKiAgICBtYXRoLmtyb24oWzEsMV0sIFsyLDMsNF0pXG4gICAgICogICAgLy8gcmV0dXJucyBbIFsgMiwgMywgNCwgMiwgMywgNCBdIF1cbiAgICAgKlxuICAgICAqIFNlZSBhbHNvOlxuICAgICAqXG4gICAgICogICAgbXVsdGlwbHksIGRvdCwgY3Jvc3NcbiAgICAgKlxuICAgICAqIEBwYXJhbSAge0FycmF5IHwgTWF0cml4fSB4ICAgICBGaXJzdCB2ZWN0b3JcbiAgICAgKiBAcGFyYW0gIHtBcnJheSB8IE1hdHJpeH0geSAgICAgU2Vjb25kIHZlY3RvclxuICAgICAqIEByZXR1cm4ge0FycmF5IHwgTWF0cml4fSAgICAgICBSZXR1cm5zIHRoZSBrcm9uZWNrZXIgcHJvZHVjdCBvZiBgeGAgYW5kIGB5YFxuICAgICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdNYXRyaXgsIE1hdHJpeCc6IGZ1bmN0aW9uIE1hdHJpeE1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gbWF0cml4KF9rcm9uKHgudG9BcnJheSgpLCB5LnRvQXJyYXkoKSkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7XG4gICAgICByZXR1cm4gbWF0cml4KF9rcm9uKHgudG9BcnJheSgpLCB5KSk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBtYXRyaXgoX2tyb24oeCwgeS50b0FycmF5KCkpKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBfa3JvblxuICB9KTtcbiAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBrcm9uZWNrZXIgcHJvZHVjdCBvZiB0d28gbWF0cmljZXMgLyB2ZWN0b3JzXG4gICAgICogQHBhcmFtIHtBcnJheX0gYSAgRmlyc3QgdmVjdG9yXG4gICAgICogQHBhcmFtIHtBcnJheX0gYiAgU2Vjb25kIHZlY3RvclxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUga3JvbmVja2VyIHByb2R1Y3Qgb2YgeCBhbmQgeVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG5cbiAgZnVuY3Rpb24gX2tyb24oYSwgYikge1xuICAgIC8vIERlYWwgd2l0aCB0aGUgZGltZW5zaW9ucyBvZiB0aGUgbWF0cmljaWVzLlxuICAgIGlmICgoMCwgX2FycmF5LmFycmF5U2l6ZSkoYSkubGVuZ3RoID09PSAxKSB7XG4gICAgICAvLyBXcmFwIGl0IGluIGEgMkQgTWF0cml4XG4gICAgICBhID0gW2FdO1xuICAgIH1cblxuICAgIGlmICgoMCwgX2FycmF5LmFycmF5U2l6ZSkoYikubGVuZ3RoID09PSAxKSB7XG4gICAgICAvLyBXcmFwIGl0IGluIGEgMkQgTWF0cml4XG4gICAgICBiID0gW2JdO1xuICAgIH1cblxuICAgIGlmICgoMCwgX2FycmF5LmFycmF5U2l6ZSkoYSkubGVuZ3RoID4gMiB8fCAoMCwgX2FycmF5LmFycmF5U2l6ZSkoYikubGVuZ3RoID4gMikge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1ZlY3RvcnMgd2l0aCBkaW1lbnNpb25zIGdyZWF0ZXIgdGhlbiAyIGFyZSBub3Qgc3VwcG9ydGVkIGV4cGVjdGVkICcgKyAnKFNpemUgeCA9ICcgKyBKU09OLnN0cmluZ2lmeShhLmxlbmd0aCkgKyAnLCB5ID0gJyArIEpTT04uc3RyaW5naWZ5KGIubGVuZ3RoKSArICcpJyk7XG4gICAgfVxuXG4gICAgdmFyIHQgPSBbXTtcbiAgICB2YXIgciA9IFtdO1xuICAgIHJldHVybiBhLm1hcChmdW5jdGlvbiAoYSkge1xuICAgICAgcmV0dXJuIGIubWFwKGZ1bmN0aW9uIChiKSB7XG4gICAgICAgIHIgPSBbXTtcbiAgICAgICAgdC5wdXNoKHIpO1xuICAgICAgICByZXR1cm4gYS5tYXAoZnVuY3Rpb24gKHkpIHtcbiAgICAgICAgICByZXR1cm4gYi5tYXAoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiByLnB1c2gobXVsdGlwbHlTY2FsYXIoeSwgeCkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pICYmIHQ7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVLcm9uID0gY3JlYXRlS3JvbjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTWFwID0gdm9pZCAwO1xuXG52YXIgX2Z1bmN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2Z1bmN0aW9uXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnbWFwJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlTWFwID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IG1hdHJpeCBvciBhcnJheSB3aXRoIHRoZSByZXN1bHRzIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBleGVjdXRlZCBvblxuICAgKiBlYWNoIGVudHJ5IG9mIHRoZSBtYXRyaXgvYXJyYXkuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5tYXAoeCwgY2FsbGJhY2spXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLm1hcChbMSwgMiwgM10sIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAqICAgICAgcmV0dXJuIHZhbHVlICogdmFsdWVcbiAgICogICAgfSkgIC8vIHJldHVybnMgWzEsIDQsIDldXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBmaWx0ZXIsIGZvckVhY2gsIHNvcnRcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXggfCBBcnJheX0geCAgICBUaGUgbWF0cml4IHRvIGl0ZXJhdGUgb24uXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgVGhlIGNhbGxiYWNrIG1ldGhvZCBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiB0aGUgdmFsdWUgb2YgdGhlIGVsZW1lbnQsIHRoZSBpbmRleFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBlbGVtZW50LCBhbmQgdGhlIG1hdHJpeCBiZWluZyB0cmF2ZXJzZWQuXG4gICAqIEByZXR1cm4ge01hdHJpeCB8IGFycmF5fSAgICAgVHJhbnNmb3JtZWQgbWFwIG9mIHhcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ0FycmF5LCBmdW5jdGlvbic6IF9tYXAsXG4gICAgJ01hdHJpeCwgZnVuY3Rpb24nOiBmdW5jdGlvbiBNYXRyaXhGdW5jdGlvbih4LCBjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHgubWFwKGNhbGxiYWNrKTtcbiAgICB9XG4gIH0pO1xufSk7XG4vKipcbiAqIE1hcCBmb3IgYSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXlcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0cy5jcmVhdGVNYXAgPSBjcmVhdGVNYXA7XG5cbmZ1bmN0aW9uIF9tYXAoYXJyYXksIGNhbGxiYWNrKSB7XG4gIC8vIGZpZ3VyZSBvdXQgd2hhdCBudW1iZXIgb2YgYXJndW1lbnRzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBleHBlY3RzXG4gIHZhciBhcmdzID0gKDAsIF9mdW5jdGlvbi5tYXhBcmd1bWVudENvdW50KShjYWxsYmFjayk7XG5cbiAgdmFyIHJlY3Vyc2UgPSBmdW5jdGlvbiByZWN1cnNlKHZhbHVlLCBpbmRleCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlLm1hcChmdW5jdGlvbiAoY2hpbGQsIGkpIHtcbiAgICAgICAgLy8gd2UgY3JlYXRlIGEgY29weSBvZiB0aGUgaW5kZXggYXJyYXkgYW5kIGFwcGVuZCB0aGUgbmV3IGluZGV4IHZhbHVlXG4gICAgICAgIHJldHVybiByZWN1cnNlKGNoaWxkLCBpbmRleC5jb25jYXQoaSkpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGludm9rZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aCB0aGUgcmlnaHQgbnVtYmVyIG9mIGFyZ3VtZW50c1xuICAgICAgaWYgKGFyZ3MgPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoYXJncyA9PT0gMikge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sodmFsdWUsIGluZGV4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDMgb3IgLTFcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKHZhbHVlLCBpbmRleCwgYXJyYXkpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICByZXR1cm4gcmVjdXJzZShhcnJheSwgW10pO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVPbmVzID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdvbmVzJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdtYXRyaXgnLCAnQmlnTnVtYmVyJ107XG52YXIgY3JlYXRlT25lcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXI7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG1hdHJpeCBmaWxsZWQgd2l0aCBvbmVzLiBUaGUgY3JlYXRlZCBtYXRyaXggY2FuIGhhdmUgb25lIG9yXG4gICAqIG11bHRpcGxlIGRpbWVuc2lvbnMuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5vbmVzKG0pXG4gICAqICAgIG1hdGgub25lcyhtLCBmb3JtYXQpXG4gICAqICAgIG1hdGgub25lcyhtLCBuKVxuICAgKiAgICBtYXRoLm9uZXMobSwgbiwgZm9ybWF0KVxuICAgKiAgICBtYXRoLm9uZXMoW20sIG5dKVxuICAgKiAgICBtYXRoLm9uZXMoW20sIG5dLCBmb3JtYXQpXG4gICAqICAgIG1hdGgub25lcyhbbSwgbiwgcCwgLi4uXSlcbiAgICogICAgbWF0aC5vbmVzKFttLCBuLCBwLCAuLi5dLCBmb3JtYXQpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLm9uZXMoMykgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBbMSwgMSwgMV1cbiAgICogICAgbWF0aC5vbmVzKDMsIDIpICAgICAgICAgICAgICAgIC8vIHJldHVybnMgW1sxLCAxXSwgWzEsIDFdLCBbMSwgMV1dXG4gICAqICAgIG1hdGgub25lcygzLCAyLCAnZGVuc2UnKSAgICAgICAvLyByZXR1cm5zIERlbnNlIE1hdHJpeCBbWzEsIDFdLCBbMSwgMV0sIFsxLCAxXV1cbiAgICpcbiAgICogICAgY29uc3QgQSA9IFtbMSwgMiwgM10sIFs0LCA1LCA2XV1cbiAgICogICAgbWF0aC5vbmVzKG1hdGguc2l6ZShBKSkgICAgICAgLy8gcmV0dXJucyBbWzEsIDEsIDFdLCBbMSwgMSwgMV1dXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICB6ZXJvcywgaWRlbnRpdHksIHNpemUsIHJhbmdlXG4gICAqXG4gICAqIEBwYXJhbSB7Li4ubnVtYmVyIHwgQXJyYXl9IHNpemUgICAgVGhlIHNpemUgb2YgZWFjaCBkaW1lbnNpb24gb2YgdGhlIG1hdHJpeFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Zvcm1hdF0gICAgICAgICAgIFRoZSBNYXRyaXggc3RvcmFnZSBmb3JtYXRcbiAgICpcbiAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXggfCBudW1iZXJ9ICBBIG1hdHJpeCBmaWxsZWQgd2l0aCBvbmVzXG4gICAqL1xuICByZXR1cm4gdHlwZWQoJ29uZXMnLCB7XG4gICAgJyc6IGZ1bmN0aW9uIF8oKSB7XG4gICAgICByZXR1cm4gY29uZmlnLm1hdHJpeCA9PT0gJ0FycmF5JyA/IF9vbmVzKFtdKSA6IF9vbmVzKFtdLCAnZGVmYXVsdCcpO1xuICAgIH0sXG4gICAgLy8gbWF0aC5vbmVzKG0sIG4sIHAsIC4uLiwgZm9ybWF0KVxuICAgIC8vIFRPRE86IG1vcmUgYWNjdXJhdGUgc2lnbmF0dXJlICcuLi5udW1iZXIgfCBCaWdOdW1iZXIsIHN0cmluZycgYXMgc29vbiBhcyB0eXBlZC1mdW5jdGlvbiBzdXBwb3J0cyB0aGlzXG4gICAgJy4uLm51bWJlciB8IEJpZ051bWJlciB8IHN0cmluZyc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlclN0cmluZyhzaXplKSB7XG4gICAgICB2YXIgbGFzdCA9IHNpemVbc2l6ZS5sZW5ndGggLSAxXTtcblxuICAgICAgaWYgKHR5cGVvZiBsYXN0ID09PSAnc3RyaW5nJykge1xuICAgICAgICB2YXIgZm9ybWF0ID0gc2l6ZS5wb3AoKTtcbiAgICAgICAgcmV0dXJuIF9vbmVzKHNpemUsIGZvcm1hdCk7XG4gICAgICB9IGVsc2UgaWYgKGNvbmZpZy5tYXRyaXggPT09ICdBcnJheScpIHtcbiAgICAgICAgcmV0dXJuIF9vbmVzKHNpemUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIF9vbmVzKHNpemUsICdkZWZhdWx0Jyk7XG4gICAgICB9XG4gICAgfSxcbiAgICBBcnJheTogX29uZXMsXG4gICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoc2l6ZSkge1xuICAgICAgdmFyIGZvcm1hdCA9IHNpemUuc3RvcmFnZSgpO1xuICAgICAgcmV0dXJuIF9vbmVzKHNpemUudmFsdWVPZigpLCBmb3JtYXQpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4LCBzdHJpbmcnOiBmdW5jdGlvbiBBcnJheU1hdHJpeFN0cmluZyhzaXplLCBmb3JtYXQpIHtcbiAgICAgIHJldHVybiBfb25lcyhzaXplLnZhbHVlT2YoKSwgZm9ybWF0KTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogQ3JlYXRlIGFuIEFycmF5IG9yIE1hdHJpeCB3aXRoIG9uZXNcbiAgICogQHBhcmFtIHtBcnJheX0gc2l6ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Zvcm1hdD0nZGVmYXVsdCddXG4gICAqIEByZXR1cm4ge0FycmF5IHwgTWF0cml4fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfb25lcyhzaXplLCBmb3JtYXQpIHtcbiAgICB2YXIgaGFzQmlnTnVtYmVycyA9IF9ub3JtYWxpemUoc2l6ZSk7XG5cbiAgICB2YXIgZGVmYXVsdFZhbHVlID0gaGFzQmlnTnVtYmVycyA/IG5ldyBCaWdOdW1iZXIoMSkgOiAxO1xuXG4gICAgX3ZhbGlkYXRlKHNpemUpO1xuXG4gICAgaWYgKGZvcm1hdCkge1xuICAgICAgLy8gcmV0dXJuIGEgbWF0cml4XG4gICAgICB2YXIgbSA9IG1hdHJpeChmb3JtYXQpO1xuXG4gICAgICBpZiAoc2l6ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBtLnJlc2l6ZShzaXplLCBkZWZhdWx0VmFsdWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gcmV0dXJuIGFuIEFycmF5XG4gICAgICB2YXIgYXJyID0gW107XG5cbiAgICAgIGlmIChzaXplLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuICgwLCBfYXJyYXkucmVzaXplKShhcnIsIHNpemUsIGRlZmF1bHRWYWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhcnI7XG4gICAgfVxuICB9IC8vIHJlcGxhY2UgQmlnTnVtYmVycyB3aXRoIG51bWJlcnMsIHJldHVybnMgdHJ1ZSBpZiBzaXplIGNvbnRhaW5lZCBCaWdOdW1iZXJzXG5cblxuICBmdW5jdGlvbiBfbm9ybWFsaXplKHNpemUpIHtcbiAgICB2YXIgaGFzQmlnTnVtYmVycyA9IGZhbHNlO1xuICAgIHNpemUuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBhcnIpIHtcbiAgICAgIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKSh2YWx1ZSkpIHtcbiAgICAgICAgaGFzQmlnTnVtYmVycyA9IHRydWU7XG4gICAgICAgIGFycltpbmRleF0gPSB2YWx1ZS50b051bWJlcigpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBoYXNCaWdOdW1iZXJzO1xuICB9IC8vIHZhbGlkYXRlIGFyZ3VtZW50c1xuXG5cbiAgZnVuY3Rpb24gX3ZhbGlkYXRlKHNpemUpIHtcbiAgICBzaXplLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJyB8fCAhKDAsIF9udW1iZXIuaXNJbnRlZ2VyKSh2YWx1ZSkgfHwgdmFsdWUgPCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUGFyYW1ldGVycyBpbiBmdW5jdGlvbiBvbmVzIG11c3QgYmUgcG9zaXRpdmUgaW50ZWdlcnMnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZU9uZXMgPSBjcmVhdGVPbmVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVQYXJ0aXRpb25TZWxlY3QgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3BhcnRpdGlvblNlbGVjdCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdpc051bWVyaWMnLCAnaXNOYU4nLCAnY29tcGFyZSddO1xudmFyIGNyZWF0ZVBhcnRpdGlvblNlbGVjdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBpc051bWVyaWMgPSBfcmVmLmlzTnVtZXJpYyxcbiAgICAgIGlzTmFOID0gX3JlZi5pc05hTixcbiAgICAgIGNvbXBhcmUgPSBfcmVmLmNvbXBhcmU7XG4gIHZhciBhc2MgPSBjb21wYXJlO1xuXG4gIHZhciBkZXNjID0gZnVuY3Rpb24gZGVzYyhhLCBiKSB7XG4gICAgcmV0dXJuIC1jb21wYXJlKGEsIGIpO1xuICB9O1xuICAvKipcbiAgICogUGFydGl0aW9uLWJhc2VkIHNlbGVjdGlvbiBvZiBhbiBhcnJheSBvciAxRCBtYXRyaXguXG4gICAqIFdpbGwgZmluZCB0aGUga3RoIHNtYWxsZXN0IHZhbHVlLCBhbmQgbXV0YXRlcyB0aGUgaW5wdXQgYXJyYXkuXG4gICAqIFVzZXMgUXVpY2tzZWxlY3QuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5wYXJ0aXRpb25TZWxlY3QoeCwgaylcbiAgICogICAgbWF0aC5wYXJ0aXRpb25TZWxlY3QoeCwgaywgY29tcGFyZSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgucGFydGl0aW9uU2VsZWN0KFs1LCAxMCwgMV0sIDIpICAgICAgICAgICAvLyByZXR1cm5zIDEwXG4gICAqICAgIG1hdGgucGFydGl0aW9uU2VsZWN0KFsnQycsICdCJywgJ0EnLCAnRCddLCAxKSAvLyByZXR1cm5zICdCJ1xuICAgKlxuICAgKiAgICBmdW5jdGlvbiBzb3J0QnlMZW5ndGggKGEsIGIpIHtcbiAgICogICAgICByZXR1cm4gYS5sZW5ndGggLSBiLmxlbmd0aFxuICAgKiAgICB9XG4gICAqICAgIG1hdGgucGFydGl0aW9uU2VsZWN0KFsnTGFuZ2RvbicsICdUb20nLCAnU2FyYSddLCAyLCBzb3J0QnlMZW5ndGgpIC8vIHJldHVybnMgJ0xhbmdkb24nXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBzb3J0XG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4IHwgQXJyYXl9IHggICAgQSBvbmUgZGltZW5zaW9uYWwgbWF0cml4IG9yIGFycmF5IHRvIHNvcnRcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGsgICAgICAgICAgICBUaGUga3RoIHNtYWxsZXN0IHZhbHVlIHRvIGJlIHJldHJpZXZlZCB6ZXJvLWJhc2VkIGluZGV4XG4gICAqIEBwYXJhbSB7RnVuY3Rpb24gfCAnYXNjJyB8ICdkZXNjJ30gW2NvbXBhcmU9J2FzYyddXG4gICAqICAgICAgICBBbiBvcHRpb25hbCBjb21wYXJhdG9yIGZ1bmN0aW9uLiBUaGUgZnVuY3Rpb24gaXMgY2FsbGVkIGFzXG4gICAqICAgICAgICBgY29tcGFyZShhLCBiKWAsIGFuZCBtdXN0IHJldHVybiAxIHdoZW4gYSA+IGIsIC0xIHdoZW4gYSA8IGIsXG4gICAqICAgICAgICBhbmQgMCB3aGVuIGEgPT0gYi5cbiAgICogQHJldHVybiB7Kn0gUmV0dXJucyB0aGUga3RoIGxvd2VzdCB2YWx1ZS5cbiAgICovXG5cblxuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhOdW1iZXIoeCwgaykge1xuICAgICAgcmV0dXJuIF9wYXJ0aXRpb25TZWxlY3QoeCwgaywgYXNjKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyLCBzdHJpbmcnOiBmdW5jdGlvbiBBcnJheU1hdHJpeE51bWJlclN0cmluZyh4LCBrLCBjb21wYXJlKSB7XG4gICAgICBpZiAoY29tcGFyZSA9PT0gJ2FzYycpIHtcbiAgICAgICAgcmV0dXJuIF9wYXJ0aXRpb25TZWxlY3QoeCwgaywgYXNjKTtcbiAgICAgIH0gZWxzZSBpZiAoY29tcGFyZSA9PT0gJ2Rlc2MnKSB7XG4gICAgICAgIHJldHVybiBfcGFydGl0aW9uU2VsZWN0KHgsIGssIGRlc2MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb21wYXJlIHN0cmluZyBtdXN0IGJlIFwiYXNjXCIgb3IgXCJkZXNjXCInKTtcbiAgICAgIH1cbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyLCBmdW5jdGlvbic6IF9wYXJ0aXRpb25TZWxlY3RcbiAgfSk7XG5cbiAgZnVuY3Rpb24gX3BhcnRpdGlvblNlbGVjdCh4LCBrLCBjb21wYXJlKSB7XG4gICAgaWYgKCEoMCwgX251bWJlci5pc0ludGVnZXIpKGspIHx8IGsgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2sgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyJyk7XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfaXMuaXNNYXRyaXgpKHgpKSB7XG4gICAgICB2YXIgc2l6ZSA9IHguc2l6ZSgpO1xuXG4gICAgICBpZiAoc2l6ZS5sZW5ndGggPiAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignT25seSBvbmUgZGltZW5zaW9uYWwgbWF0cmljZXMgc3VwcG9ydGVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBxdWlja1NlbGVjdCh4LnZhbHVlT2YoKSwgaywgY29tcGFyZSk7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoeCkpIHtcbiAgICAgIHJldHVybiBxdWlja1NlbGVjdCh4LCBrLCBjb21wYXJlKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFF1aWNrc2VsZWN0IGFsZ29yaXRobS5cbiAgICogQ29kZSBhZGFwdGVkIGZyb206XG4gICAqIGh0dHBzOi8vYmxvZy50ZWFtbGVhZG5ldC5jb20vMjAxMi8wNy9xdWljay1zZWxlY3QtYWxnb3JpdGhtLWZpbmQta3RoLWVsZW1lbnQuaHRtbFxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGtcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY29tcGFyZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHF1aWNrU2VsZWN0KGFyciwgaywgY29tcGFyZSkge1xuICAgIGlmIChrID49IGFyci5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignayBvdXQgb2YgYm91bmRzJyk7XG4gICAgfSAvLyBjaGVjayBmb3IgTmFOIHZhbHVlcyBzaW5jZSB0aGVzZSBjYW4gY2F1c2UgYW4gaW5maW5pdGUgd2hpbGUgbG9vcFxuXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGlzTnVtZXJpYyhhcnJbaV0pICYmIGlzTmFOKGFycltpXSkpIHtcbiAgICAgICAgcmV0dXJuIGFycltpXTsgLy8gcmV0dXJuIE5hTlxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBmcm9tID0gMDtcbiAgICB2YXIgdG8gPSBhcnIubGVuZ3RoIC0gMTsgLy8gaWYgZnJvbSA9PSB0byB3ZSByZWFjaGVkIHRoZSBrdGggZWxlbWVudFxuXG4gICAgd2hpbGUgKGZyb20gPCB0bykge1xuICAgICAgdmFyIHIgPSBmcm9tO1xuICAgICAgdmFyIHcgPSB0bztcbiAgICAgIHZhciBwaXZvdCA9IGFycltNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAodG8gLSBmcm9tICsgMSkpICsgZnJvbV07IC8vIHN0b3AgaWYgdGhlIHJlYWRlciBhbmQgd3JpdGVyIG1lZXRzXG5cbiAgICAgIHdoaWxlIChyIDwgdykge1xuICAgICAgICAvLyBhcnJbcl0gPj0gcGl2b3RcbiAgICAgICAgaWYgKGNvbXBhcmUoYXJyW3JdLCBwaXZvdCkgPj0gMCkge1xuICAgICAgICAgIC8vIHB1dCB0aGUgbGFyZ2UgdmFsdWVzIGF0IHRoZSBlbmRcbiAgICAgICAgICB2YXIgdG1wID0gYXJyW3ddO1xuICAgICAgICAgIGFyclt3XSA9IGFycltyXTtcbiAgICAgICAgICBhcnJbcl0gPSB0bXA7XG4gICAgICAgICAgLS13O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHRoZSB2YWx1ZSBpcyBzbWFsbGVyIHRoYW4gdGhlIHBpdm90LCBza2lwXG4gICAgICAgICAgKytyO1xuICAgICAgICB9XG4gICAgICB9IC8vIGlmIHdlIHN0ZXBwZWQgdXAgKHIrKykgd2UgbmVlZCB0byBzdGVwIG9uZSBkb3duIChhcnJbcl0gPiBwaXZvdClcblxuXG4gICAgICBpZiAoY29tcGFyZShhcnJbcl0sIHBpdm90KSA+IDApIHtcbiAgICAgICAgLS1yO1xuICAgICAgfSAvLyB0aGUgciBwb2ludGVyIGlzIG9uIHRoZSBlbmQgb2YgdGhlIGZpcnN0IGsgZWxlbWVudHNcblxuXG4gICAgICBpZiAoayA8PSByKSB7XG4gICAgICAgIHRvID0gcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZyb20gPSByICsgMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYXJyW2tdO1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlUGFydGl0aW9uU2VsZWN0ID0gY3JlYXRlUGFydGl0aW9uU2VsZWN0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVSYW5nZSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfbm9vcCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9ub29wXCIpO1xuXG52YXIgbmFtZSA9ICdyYW5nZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnP21hdHJpeCcsICc/YmlnbnVtYmVyJywgJ3NtYWxsZXInLCAnc21hbGxlckVxJywgJ2xhcmdlcicsICdsYXJnZXJFcSddO1xudmFyIGNyZWF0ZVJhbmdlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBiaWdudW1iZXIgPSBfcmVmLmJpZ251bWJlcixcbiAgICAgIHNtYWxsZXIgPSBfcmVmLnNtYWxsZXIsXG4gICAgICBzbWFsbGVyRXEgPSBfcmVmLnNtYWxsZXJFcSxcbiAgICAgIGxhcmdlciA9IF9yZWYubGFyZ2VyLFxuICAgICAgbGFyZ2VyRXEgPSBfcmVmLmxhcmdlckVxO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gYXJyYXkgZnJvbSBhIHJhbmdlLlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgcmFuZ2UgZW5kIGlzIGV4Y2x1ZGVkLiBUaGlzIGNhbiBiZSBjdXN0b21pemVkIGJ5IHByb3ZpZGluZ1xuICAgKiBhbiBleHRyYSBwYXJhbWV0ZXIgYGluY2x1ZGVFbmRgLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLnJhbmdlKHN0ciBbLCBpbmNsdWRlRW5kXSkgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSByYW5nZSBmcm9tIGEgc3RyaW5nLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlcmUgdGhlIHN0cmluZyBjb250YWlucyB0aGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0YXJ0LCBvcHRpb25hbCBzdGVwLCBhbmQgZW5kLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VwYXJhdGVkIGJ5IGEgY29sb24uXG4gICAqICAgICBtYXRoLnJhbmdlKHN0YXJ0LCBlbmQgWywgaW5jbHVkZUVuZF0pICAgICAgICAvLyBDcmVhdGUgYSByYW5nZSB3aXRoIHN0YXJ0IGFuZFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZW5kIGFuZCBhIHN0ZXAgc2l6ZSBvZiAxLlxuICAgKiAgICAgbWF0aC5yYW5nZShzdGFydCwgZW5kLCBzdGVwIFssIGluY2x1ZGVFbmRdKSAgLy8gQ3JlYXRlIGEgcmFuZ2Ugd2l0aCBzdGFydCwgc3RlcCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBlbmQuXG4gICAqXG4gICAqIFdoZXJlOlxuICAgKlxuICAgKiAtIGBzdHI6IHN0cmluZ2BcbiAgICogICBBIHN0cmluZyAnc3RhcnQ6ZW5kJyBvciAnc3RhcnQ6c3RlcDplbmQnXG4gICAqIC0gYHN0YXJ0OiB7bnVtYmVyIHwgQmlnTnVtYmVyfWBcbiAgICogICBTdGFydCBvZiB0aGUgcmFuZ2VcbiAgICogLSBgZW5kOiBudW1iZXIgfCBCaWdOdW1iZXJgXG4gICAqICAgRW5kIG9mIHRoZSByYW5nZSwgZXhjbHVkZWQgYnkgZGVmYXVsdCwgaW5jbHVkZWQgd2hlbiBwYXJhbWV0ZXIgaW5jbHVkZUVuZD10cnVlXG4gICAqIC0gYHN0ZXA6IG51bWJlciB8IEJpZ051bWJlcmBcbiAgICogICBTdGVwIHNpemUuIERlZmF1bHQgdmFsdWUgaXMgMS5cbiAgICogLSBgaW5jbHVkZUVuZDogYm9vbGVhbmBcbiAgICogICBPcHRpb24gdG8gc3BlY2lmeSB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlIGVuZCBvciBub3QuIEZhbHNlIGJ5IGRlZmF1bHQuXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgbWF0aC5yYW5nZSgyLCA2KSAgICAgICAgLy8gWzIsIDMsIDQsIDVdXG4gICAqICAgICBtYXRoLnJhbmdlKDIsIC0zLCAtMSkgICAvLyBbMiwgMSwgMCwgLTEsIC0yXVxuICAgKiAgICAgbWF0aC5yYW5nZSgnMjoxOjYnKSAgICAgLy8gWzIsIDMsIDQsIDVdXG4gICAqICAgICBtYXRoLnJhbmdlKDIsIDYsIHRydWUpICAvLyBbMiwgMywgNCwgNSwgNl1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBvbmVzLCB6ZXJvcywgc2l6ZSwgc3Vic2V0XG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gYXJncyAgIFBhcmFtZXRlcnMgZGVzY3JpYmluZyB0aGUgcmFuZ2VzIGBzdGFydGAsIGBlbmRgLCBhbmQgb3B0aW9uYWwgYHN0ZXBgLlxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gcmFuZ2VcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgLy8gVE9ETzogc2ltcGxpZnkgc2lnbmF0dXJlcyB3aGVuIHR5cGVkLWZ1bmN0aW9uIHN1cHBvcnRzIGRlZmF1bHQgdmFsdWVzIGFuZCBvcHRpb25hbCBhcmd1bWVudHNcbiAgICAvLyBUT0RPOiBhIG51bWJlciBvciBib29sZWFuIHNob3VsZCBub3QgYmUgY29udmVydGVkIHRvIHN0cmluZyBoZXJlXG4gICAgc3RyaW5nOiBfc3RyUmFuZ2UsXG4gICAgJ3N0cmluZywgYm9vbGVhbic6IF9zdHJSYW5nZSxcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIoc3RhcnQsIGVuZCkge1xuICAgICAgcmV0dXJuIF9vdXQoX3JhbmdlRXgoc3RhcnQsIGVuZCwgMSkpO1xuICAgIH0sXG4gICAgJ251bWJlciwgbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXJOdW1iZXIoc3RhcnQsIGVuZCwgc3RlcCkge1xuICAgICAgcmV0dXJuIF9vdXQoX3JhbmdlRXgoc3RhcnQsIGVuZCwgc3RlcCkpO1xuICAgIH0sXG4gICAgJ251bWJlciwgbnVtYmVyLCBib29sZWFuJzogZnVuY3Rpb24gbnVtYmVyTnVtYmVyQm9vbGVhbihzdGFydCwgZW5kLCBpbmNsdWRlRW5kKSB7XG4gICAgICByZXR1cm4gaW5jbHVkZUVuZCA/IF9vdXQoX3JhbmdlSW5jKHN0YXJ0LCBlbmQsIDEpKSA6IF9vdXQoX3JhbmdlRXgoc3RhcnQsIGVuZCwgMSkpO1xuICAgIH0sXG4gICAgJ251bWJlciwgbnVtYmVyLCBudW1iZXIsIGJvb2xlYW4nOiBmdW5jdGlvbiBudW1iZXJOdW1iZXJOdW1iZXJCb29sZWFuKHN0YXJ0LCBlbmQsIHN0ZXAsIGluY2x1ZGVFbmQpIHtcbiAgICAgIHJldHVybiBpbmNsdWRlRW5kID8gX291dChfcmFuZ2VJbmMoc3RhcnQsIGVuZCwgc3RlcCkpIDogX291dChfcmFuZ2VFeChzdGFydCwgZW5kLCBzdGVwKSk7XG4gICAgfSxcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIoc3RhcnQsIGVuZCkge1xuICAgICAgdmFyIEJpZ051bWJlciA9IHN0YXJ0LmNvbnN0cnVjdG9yO1xuICAgICAgcmV0dXJuIF9vdXQoX2JpZ1JhbmdlRXgoc3RhcnQsIGVuZCwgbmV3IEJpZ051bWJlcigxKSkpO1xuICAgIH0sXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXJCaWdOdW1iZXIoc3RhcnQsIGVuZCwgc3RlcCkge1xuICAgICAgcmV0dXJuIF9vdXQoX2JpZ1JhbmdlRXgoc3RhcnQsIGVuZCwgc3RlcCkpO1xuICAgIH0sXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyLCBib29sZWFuJzogZnVuY3Rpb24gQmlnTnVtYmVyQmlnTnVtYmVyQm9vbGVhbihzdGFydCwgZW5kLCBpbmNsdWRlRW5kKSB7XG4gICAgICB2YXIgQmlnTnVtYmVyID0gc3RhcnQuY29uc3RydWN0b3I7XG4gICAgICByZXR1cm4gaW5jbHVkZUVuZCA/IF9vdXQoX2JpZ1JhbmdlSW5jKHN0YXJ0LCBlbmQsIG5ldyBCaWdOdW1iZXIoMSkpKSA6IF9vdXQoX2JpZ1JhbmdlRXgoc3RhcnQsIGVuZCwgbmV3IEJpZ051bWJlcigxKSkpO1xuICAgIH0sXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyLCBCaWdOdW1iZXIsIGJvb2xlYW4nOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXJCaWdOdW1iZXJCb29sZWFuKHN0YXJ0LCBlbmQsIHN0ZXAsIGluY2x1ZGVFbmQpIHtcbiAgICAgIHJldHVybiBpbmNsdWRlRW5kID8gX291dChfYmlnUmFuZ2VJbmMoc3RhcnQsIGVuZCwgc3RlcCkpIDogX291dChfYmlnUmFuZ2VFeChzdGFydCwgZW5kLCBzdGVwKSk7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBfb3V0KGFycikge1xuICAgIGlmIChjb25maWcubWF0cml4ID09PSAnTWF0cml4Jykge1xuICAgICAgcmV0dXJuIG1hdHJpeCA/IG1hdHJpeChhcnIpIDogKDAsIF9ub29wLm5vTWF0cml4KSgpO1xuICAgIH1cblxuICAgIHJldHVybiBhcnI7XG4gIH1cblxuICBmdW5jdGlvbiBfc3RyUmFuZ2Uoc3RyLCBpbmNsdWRlRW5kKSB7XG4gICAgdmFyIHIgPSBfcGFyc2Uoc3RyKTtcblxuICAgIGlmICghcikge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdTdHJpbmcgXCInICsgc3RyICsgJ1wiIGlzIG5vIHZhbGlkIHJhbmdlJyk7XG4gICAgfVxuXG4gICAgdmFyIGZuO1xuXG4gICAgaWYgKGNvbmZpZy5udW1iZXIgPT09ICdCaWdOdW1iZXInKSB7XG4gICAgICBpZiAoYmlnbnVtYmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgKDAsIF9ub29wLm5vQmlnbnVtYmVyKSgpO1xuICAgICAgfVxuXG4gICAgICBmbiA9IGluY2x1ZGVFbmQgPyBfYmlnUmFuZ2VJbmMgOiBfYmlnUmFuZ2VFeDtcbiAgICAgIHJldHVybiBfb3V0KGZuKGJpZ251bWJlcihyLnN0YXJ0KSwgYmlnbnVtYmVyKHIuZW5kKSwgYmlnbnVtYmVyKHIuc3RlcCkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm4gPSBpbmNsdWRlRW5kID8gX3JhbmdlSW5jIDogX3JhbmdlRXg7XG4gICAgICByZXR1cm4gX291dChmbihyLnN0YXJ0LCByLmVuZCwgci5zdGVwKSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgYSByYW5nZSB3aXRoIG51bWJlcnMuIEVuZCBpcyBleGNsdWRlZFxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RlcFxuICAgKiBAcmV0dXJucyB7QXJyYXl9IHJhbmdlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX3JhbmdlRXgoc3RhcnQsIGVuZCwgc3RlcCkge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIHZhciB4ID0gc3RhcnQ7XG5cbiAgICBpZiAoc3RlcCA+IDApIHtcbiAgICAgIHdoaWxlIChzbWFsbGVyKHgsIGVuZCkpIHtcbiAgICAgICAgYXJyYXkucHVzaCh4KTtcbiAgICAgICAgeCArPSBzdGVwO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3RlcCA8IDApIHtcbiAgICAgIHdoaWxlIChsYXJnZXIoeCwgZW5kKSkge1xuICAgICAgICBhcnJheS5wdXNoKHgpO1xuICAgICAgICB4ICs9IHN0ZXA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgYSByYW5nZSB3aXRoIG51bWJlcnMuIEVuZCBpcyBpbmNsdWRlZFxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RlcFxuICAgKiBAcmV0dXJucyB7QXJyYXl9IHJhbmdlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX3JhbmdlSW5jKHN0YXJ0LCBlbmQsIHN0ZXApIHtcbiAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICB2YXIgeCA9IHN0YXJ0O1xuXG4gICAgaWYgKHN0ZXAgPiAwKSB7XG4gICAgICB3aGlsZSAoc21hbGxlckVxKHgsIGVuZCkpIHtcbiAgICAgICAgYXJyYXkucHVzaCh4KTtcbiAgICAgICAgeCArPSBzdGVwO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3RlcCA8IDApIHtcbiAgICAgIHdoaWxlIChsYXJnZXJFcSh4LCBlbmQpKSB7XG4gICAgICAgIGFycmF5LnB1c2goeCk7XG4gICAgICAgIHggKz0gc3RlcDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHJhbmdlIHdpdGggYmlnIG51bWJlcnMuIEVuZCBpcyBleGNsdWRlZFxuICAgKiBAcGFyYW0ge0JpZ051bWJlcn0gc3RhcnRcbiAgICogQHBhcmFtIHtCaWdOdW1iZXJ9IGVuZFxuICAgKiBAcGFyYW0ge0JpZ051bWJlcn0gc3RlcFxuICAgKiBAcmV0dXJucyB7QXJyYXl9IHJhbmdlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX2JpZ1JhbmdlRXgoc3RhcnQsIGVuZCwgc3RlcCkge1xuICAgIHZhciB6ZXJvID0gYmlnbnVtYmVyKDApO1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIHZhciB4ID0gc3RhcnQ7XG5cbiAgICBpZiAoc3RlcC5ndCh6ZXJvKSkge1xuICAgICAgd2hpbGUgKHNtYWxsZXIoeCwgZW5kKSkge1xuICAgICAgICBhcnJheS5wdXNoKHgpO1xuICAgICAgICB4ID0geC5wbHVzKHN0ZXApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3RlcC5sdCh6ZXJvKSkge1xuICAgICAgd2hpbGUgKGxhcmdlcih4LCBlbmQpKSB7XG4gICAgICAgIGFycmF5LnB1c2goeCk7XG4gICAgICAgIHggPSB4LnBsdXMoc3RlcCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgYSByYW5nZSB3aXRoIGJpZyBudW1iZXJzLiBFbmQgaXMgaW5jbHVkZWRcbiAgICogQHBhcmFtIHtCaWdOdW1iZXJ9IHN0YXJ0XG4gICAqIEBwYXJhbSB7QmlnTnVtYmVyfSBlbmRcbiAgICogQHBhcmFtIHtCaWdOdW1iZXJ9IHN0ZXBcbiAgICogQHJldHVybnMge0FycmF5fSByYW5nZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9iaWdSYW5nZUluYyhzdGFydCwgZW5kLCBzdGVwKSB7XG4gICAgdmFyIHplcm8gPSBiaWdudW1iZXIoMCk7XG4gICAgdmFyIGFycmF5ID0gW107XG4gICAgdmFyIHggPSBzdGFydDtcblxuICAgIGlmIChzdGVwLmd0KHplcm8pKSB7XG4gICAgICB3aGlsZSAoc21hbGxlckVxKHgsIGVuZCkpIHtcbiAgICAgICAgYXJyYXkucHVzaCh4KTtcbiAgICAgICAgeCA9IHgucGx1cyhzdGVwKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHN0ZXAubHQoemVybykpIHtcbiAgICAgIHdoaWxlIChsYXJnZXJFcSh4LCBlbmQpKSB7XG4gICAgICAgIGFycmF5LnB1c2goeCk7XG4gICAgICAgIHggPSB4LnBsdXMoc3RlcCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZSBhIHN0cmluZyBpbnRvIGEgcmFuZ2UsXG4gICAqIFRoZSBzdHJpbmcgY29udGFpbnMgdGhlIHN0YXJ0LCBvcHRpb25hbCBzdGVwLCBhbmQgZW5kLCBzZXBhcmF0ZWQgYnkgYSBjb2xvbi5cbiAgICogSWYgdGhlIHN0cmluZyBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQgcmFuZ2UsIG51bGwgaXMgcmV0dXJuZWQuXG4gICAqIEZvciBleGFtcGxlIHN0cj0nMDoyOjExJy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKiBAcmV0dXJuIHt7c3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIsIHN0ZXA6IG51bWJlcn0gfCBudWxsfSByYW5nZSBPYmplY3QgY29udGFpbmluZyBwcm9wZXJ0aWVzIHN0YXJ0LCBlbmQsIHN0ZXBcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBfcGFyc2Uoc3RyKSB7XG4gICAgdmFyIGFyZ3MgPSBzdHIuc3BsaXQoJzonKTsgLy8gbnVtYmVyXG5cbiAgICB2YXIgbnVtcyA9IGFyZ3MubWFwKGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgIC8vIHVzZSBOdW1iZXIgYW5kIG5vdCBwYXJzZUZsb2F0IGFzIE51bWJlciByZXR1cm5zIE5hTiBvbiBpbnZhbGlkIGdhcmJhZ2UgaW4gdGhlIHN0cmluZ1xuICAgICAgcmV0dXJuIE51bWJlcihhcmcpO1xuICAgIH0pO1xuICAgIHZhciBpbnZhbGlkID0gbnVtcy5zb21lKGZ1bmN0aW9uIChudW0pIHtcbiAgICAgIHJldHVybiBpc05hTihudW0pO1xuICAgIH0pO1xuXG4gICAgaWYgKGludmFsaWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHN3aXRjaCAobnVtcy5sZW5ndGgpIHtcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdGFydDogbnVtc1swXSxcbiAgICAgICAgICBlbmQ6IG51bXNbMV0sXG4gICAgICAgICAgc3RlcDogMVxuICAgICAgICB9O1xuXG4gICAgICBjYXNlIDM6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3RhcnQ6IG51bXNbMF0sXG4gICAgICAgICAgZW5kOiBudW1zWzJdLFxuICAgICAgICAgIHN0ZXA6IG51bXNbMV1cbiAgICAgICAgfTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlUmFuZ2UgPSBjcmVhdGVSYW5nZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUmVzaGFwZSA9IHZvaWQgMDtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3Jlc2hhcGUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnaXNJbnRlZ2VyJywgJ21hdHJpeCddO1xudmFyIGNyZWF0ZVJlc2hhcGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgaXNJbnRlZ2VyID0gX3JlZi5pc0ludGVnZXIsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeDtcblxuICAvKipcbiAgICogUmVzaGFwZSBhIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5IHRvIGZpdCB0aGUgc3BlY2lmaWVkIGRpbWVuc2lvbnNcbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5yZXNoYXBlKHgsIHNpemVzKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGgucmVzaGFwZShbMSwgMiwgMywgNCwgNSwgNl0sIFsyLCAzXSlcbiAgICogICAgIC8vIHJldHVybnMgQXJyYXkgIFtbMSwgMiwgM10sIFs0LCA1LCA2XV1cbiAgICpcbiAgICogICAgIG1hdGgucmVzaGFwZShbWzEsIDJdLCBbMywgNF1dLCBbMSwgNF0pXG4gICAqICAgICAvLyByZXR1cm5zIEFycmF5ICBbWzEsIDIsIDMsIDRdXVxuICAgKlxuICAgKiAgICAgbWF0aC5yZXNoYXBlKFtbMSwgMl0sIFszLCA0XV0sIFs0XSlcbiAgICogICAgIC8vIHJldHVybnMgQXJyYXkgWzEsIDIsIDMsIDRdXG4gICAqXG4gICAqICAgICBjb25zdCB4ID0gbWF0aC5tYXRyaXgoWzEsIDIsIDMsIDQsIDUsIDYsIDcsIDhdKVxuICAgKiAgICAgbWF0aC5yZXNoYXBlKHgsIFsyLCAyLCAyXSlcbiAgICogICAgIC8vIHJldHVybnMgTWF0cml4IFtbWzEsIDJdLCBbMywgNF1dLCBbWzUsIDZdLCBbNywgOF1dXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgIHNpemUsIHNxdWVlemUsIHJlc2l6ZVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4IHwgKn0geCAgTWF0cml4IHRvIGJlIHJlc2hhcGVkXG4gICAqIEBwYXJhbSB7bnVtYmVyW119IHNpemVzICAgICAgICBPbmUgZGltZW5zaW9uYWwgYXJyYXkgd2l0aCBpbnRlZ3JhbCBzaXplcyBmb3JcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhY2ggZGltZW5zaW9uXG4gICAqXG4gICAqIEByZXR1cm4geyogfCBBcnJheSB8IE1hdHJpeH0gICBBIHJlc2hhcGVkIGNsb25lIG9mIG1hdHJpeCBgeGBcbiAgICpcbiAgICogQHRocm93cyB7VHlwZUVycm9yfSAgICAgICAgICAgIElmIGBzaXplc2AgZG9lcyBub3QgY29udGFpbiBzb2xlbHkgaW50ZWdlcnNcbiAgICogQHRocm93cyB7RGltZW5zaW9uRXJyb3J9ICAgICAgIElmIHRoZSBwcm9kdWN0IG9mIHRoZSBuZXcgZGltZW5zaW9uIHNpemVzIGRvZXNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBlcXVhbCB0aGF0IG9mIHRoZSBvbGQgb25lc1xuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHNpemVzKSB7XG4gICAgICBpZiAoeC5yZXNoYXBlKSB7XG4gICAgICAgIHJldHVybiB4LnJlc2hhcGUoc2l6ZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG1hdHJpeCgoMCwgX2FycmF5LnJlc2hhcGUpKHgudmFsdWVPZigpLCBzaXplcykpO1xuICAgICAgfVxuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgc2l6ZXMpIHtcbiAgICAgIHNpemVzLmZvckVhY2goZnVuY3Rpb24gKHNpemUpIHtcbiAgICAgICAgaWYgKCFpc0ludGVnZXIoc2l6ZSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHNpemUgZm9yIGRpbWVuc2lvbjogJyArIHNpemUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiAoMCwgX2FycmF5LnJlc2hhcGUpKHgsIHNpemVzKTtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZVJlc2hhcGUgPSBjcmVhdGVSZXNoYXBlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVSZXNpemUgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfRGltZW5zaW9uRXJyb3IgPSByZXF1aXJlKFwiLi4vLi4vZXJyb3IvRGltZW5zaW9uRXJyb3JcIik7XG5cbnZhciBfQXJndW1lbnRzRXJyb3IgPSByZXF1aXJlKFwiLi4vLi4vZXJyb3IvQXJndW1lbnRzRXJyb3JcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvc3RyaW5nXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdyZXNpemUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnY29uZmlnJywgJ21hdHJpeCddO1xudmFyIGNyZWF0ZVJlc2l6ZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4O1xuXG4gIC8qKlxuICAgKiBSZXNpemUgYSBtYXRyaXhcbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5yZXNpemUoeCwgc2l6ZSlcbiAgICogICAgIG1hdGgucmVzaXplKHgsIHNpemUsIGRlZmF1bHRWYWx1ZSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLnJlc2l6ZShbMSwgMiwgMywgNCwgNV0sIFszXSkgLy8gcmV0dXJucyBBcnJheSAgWzEsIDIsIDNdXG4gICAqICAgICBtYXRoLnJlc2l6ZShbMSwgMiwgM10sIFs1XSwgMCkgICAgLy8gcmV0dXJucyBBcnJheSAgWzEsIDIsIDMsIDAsIDBdXG4gICAqICAgICBtYXRoLnJlc2l6ZSgyLCBbMiwgM10sIDApICAgICAgICAgLy8gcmV0dXJucyBNYXRyaXggW1syLCAwLCAwXSwgWzAsIDAsIDBdXVxuICAgKiAgICAgbWF0aC5yZXNpemUoXCJoZWxsb1wiLCBbOF0sIFwiIVwiKSAgICAvLyByZXR1cm5zIHN0cmluZyAnaGVsbG8hISEnXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgc2l6ZSwgc3F1ZWV6ZSwgc3Vic2V0LCByZXNoYXBlXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXggfCAqfSB4ICAgICAgICAgICAgIE1hdHJpeCB0byBiZSByZXNpemVkXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IHNpemUgICAgICAgICAgICAgIE9uZSBkaW1lbnNpb25hbCBhcnJheSB3aXRoIG51bWJlcnNcbiAgICogQHBhcmFtIHtudW1iZXIgfCBzdHJpbmd9IFtkZWZhdWx0VmFsdWU9MF0gWmVybyBieSBkZWZhdWx0LCBleGNlcHQgaW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBvZiBhIHN0cmluZywgaW4gdGhhdCBjYXNlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9ICcgJ1xuICAgKiBAcmV0dXJuIHsqIHwgQXJyYXkgfCBNYXRyaXh9IEEgcmVzaXplZCBjbG9uZSBvZiBtYXRyaXggYHhgXG4gICAqL1xuICAvLyBUT0RPOiByZXdvcmsgcmVzaXplIHRvIGEgdHlwZWQtZnVuY3Rpb25cbiAgcmV0dXJuIGZ1bmN0aW9uIHJlc2l6ZSh4LCBzaXplLCBkZWZhdWx0VmFsdWUpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPT0gMiAmJiBhcmd1bWVudHMubGVuZ3RoICE9PSAzKSB7XG4gICAgICB0aHJvdyBuZXcgX0FyZ3VtZW50c0Vycm9yLkFyZ3VtZW50c0Vycm9yKCdyZXNpemUnLCBhcmd1bWVudHMubGVuZ3RoLCAyLCAzKTtcbiAgICB9XG5cbiAgICBpZiAoKDAsIF9pcy5pc01hdHJpeCkoc2l6ZSkpIHtcbiAgICAgIHNpemUgPSBzaXplLnZhbHVlT2YoKTsgLy8gZ2V0IEFycmF5XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKHNpemVbMF0pKSB7XG4gICAgICAvLyBjb252ZXJ0IGJpZ251bWJlcnMgdG8gbnVtYmVyc1xuICAgICAgc2l6ZSA9IHNpemUubWFwKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gISgwLCBfaXMuaXNCaWdOdW1iZXIpKHZhbHVlKSA/IHZhbHVlIDogdmFsdWUudG9OdW1iZXIoKTtcbiAgICAgIH0pO1xuICAgIH0gLy8gY2hlY2sgeCBpcyBhIE1hdHJpeFxuXG5cbiAgICBpZiAoKDAsIF9pcy5pc01hdHJpeCkoeCkpIHtcbiAgICAgIC8vIHVzZSBvcHRpbWl6ZWQgbWF0cml4IGltcGxlbWVudGF0aW9uLCByZXR1cm4gY29weVxuICAgICAgcmV0dXJuIHgucmVzaXplKHNpemUsIGRlZmF1bHRWYWx1ZSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB4ID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gcmVzaXplIHN0cmluZ1xuICAgICAgcmV0dXJuIF9yZXNpemVTdHJpbmcoeCwgc2l6ZSwgZGVmYXVsdFZhbHVlKTtcbiAgICB9IC8vIGNoZWNrIHJlc3VsdCBzaG91bGQgYmUgYSBtYXRyaXhcblxuXG4gICAgdmFyIGFzTWF0cml4ID0gQXJyYXkuaXNBcnJheSh4KSA/IGZhbHNlIDogY29uZmlnLm1hdHJpeCAhPT0gJ0FycmF5JztcblxuICAgIGlmIChzaXplLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gb3V0cHV0IGEgc2NhbGFyXG4gICAgICB3aGlsZSAoQXJyYXkuaXNBcnJheSh4KSkge1xuICAgICAgICB4ID0geFswXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICgwLCBfb2JqZWN0LmNsb25lKSh4KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gb3V0cHV0IGFuIGFycmF5L21hdHJpeFxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHgpKSB7XG4gICAgICAgIHggPSBbeF07XG4gICAgICB9XG5cbiAgICAgIHggPSAoMCwgX29iamVjdC5jbG9uZSkoeCk7XG4gICAgICB2YXIgcmVzID0gKDAsIF9hcnJheS5yZXNpemUpKHgsIHNpemUsIGRlZmF1bHRWYWx1ZSk7XG4gICAgICByZXR1cm4gYXNNYXRyaXggPyBtYXRyaXgocmVzKSA6IHJlcztcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBSZXNpemUgYSBzdHJpbmdcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKiBAcGFyYW0ge251bWJlcltdfSBzaXplXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVmYXVsdENoYXI9JyAnXVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfcmVzaXplU3RyaW5nKHN0ciwgc2l6ZSwgZGVmYXVsdENoYXIpIHtcbiAgICBpZiAoZGVmYXVsdENoYXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBkZWZhdWx0Q2hhciAhPT0gJ3N0cmluZycgfHwgZGVmYXVsdENoYXIubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1NpbmdsZSBjaGFyYWN0ZXIgZXhwZWN0ZWQgYXMgZGVmYXVsdFZhbHVlJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlZmF1bHRDaGFyID0gJyAnO1xuICAgIH1cblxuICAgIGlmIChzaXplLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihzaXplLmxlbmd0aCwgMSk7XG4gICAgfVxuXG4gICAgdmFyIGxlbiA9IHNpemVbMF07XG5cbiAgICBpZiAodHlwZW9mIGxlbiAhPT0gJ251bWJlcicgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikobGVuKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBzaXplLCBtdXN0IGNvbnRhaW4gcG9zaXRpdmUgaW50ZWdlcnMgJyArICcoc2l6ZTogJyArICgwLCBfc3RyaW5nLmZvcm1hdCkoc2l6ZSkgKyAnKScpO1xuICAgIH1cblxuICAgIGlmIChzdHIubGVuZ3RoID4gbGVuKSB7XG4gICAgICByZXR1cm4gc3RyLnN1YnN0cmluZygwLCBsZW4pO1xuICAgIH0gZWxzZSBpZiAoc3RyLmxlbmd0aCA8IGxlbikge1xuICAgICAgdmFyIHJlcyA9IHN0cjtcblxuICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gbGVuIC0gc3RyLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgcmVzICs9IGRlZmF1bHRDaGFyO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH1cbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZVJlc2l6ZSA9IGNyZWF0ZVJlc2l6ZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUm93ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgbmFtZSA9ICdyb3cnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnSW5kZXgnLCAnbWF0cml4JywgJ3JhbmdlJ107XG52YXIgY3JlYXRlUm93ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIEluZGV4ID0gX3JlZi5JbmRleCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgcmFuZ2UgPSBfcmVmLnJhbmdlO1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSByb3cgZnJvbSBhIE1hdHJpeC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5yb3codmFsdWUsIGluZGV4KVxuICAgKlxuICAgKiBFeGFtcGxlOlxuICAgKlxuICAgKiAgICAgLy8gZ2V0IGEgcm93XG4gICAqICAgICBjb25zdCBkID0gW1sxLCAyXSwgWzMsIDRdXVxuICAgKiAgICAgbWF0aC5yb3coZCwgMSkgLy8gcmV0dXJucyBbWzMsIDRdXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgIGNvbHVtblxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4IH0gdmFsdWUgICBBbiBhcnJheSBvciBtYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJvdyAgICAgICAgICAgICAgVGhlIGluZGV4IG9mIHRoZSByb3dcbiAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXh9ICAgICAgICAgVGhlIHJldHJpZXZlZCByb3dcbiAgICovXG4gIHZhciByb3cgPSB0eXBlZChuYW1lLCB7XG4gICAgJ01hdHJpeCwgbnVtYmVyJzogX3JvdyxcbiAgICAnQXJyYXksIG51bWJlcic6IGZ1bmN0aW9uIEFycmF5TnVtYmVyKHZhbHVlLCByb3cpIHtcbiAgICAgIHJldHVybiBfcm93KG1hdHJpeCgoMCwgX29iamVjdC5jbG9uZSkodmFsdWUpKSwgcm93KS52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJvdztcbiAgLyoqXG4gICAqIFJldHJpZXZlIGEgcm93IG9mIGEgbWF0cml4XG4gICAqIEBwYXJhbSB7TWF0cml4IH0gdmFsdWUgIEEgbWF0cml4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSByb3cgICAgIFRoZSBpbmRleCBvZiB0aGUgcm93XG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgIFRoZSByZXRyaWV2ZWQgcm93XG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9yb3codmFsdWUsIHJvdykge1xuICAgIC8vIGNoZWNrIGRpbWVuc2lvbnNcbiAgICBpZiAodmFsdWUuc2l6ZSgpLmxlbmd0aCAhPT0gMikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPbmx5IHR3byBkaW1lbnNpb25hbCBtYXRyaXggaXMgc3VwcG9ydGVkJyk7XG4gICAgfVxuXG4gICAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShyb3csIHZhbHVlLnNpemUoKVswXSk7XG4gICAgdmFyIGNvbHVtblJhbmdlID0gcmFuZ2UoMCwgdmFsdWUuc2l6ZSgpWzFdKTtcbiAgICB2YXIgaW5kZXggPSBuZXcgSW5kZXgocm93LCBjb2x1bW5SYW5nZSk7XG4gICAgcmV0dXJuIHZhbHVlLnN1YnNldChpbmRleCk7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVSb3cgPSBjcmVhdGVSb3c7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNpemUgPSB2b2lkIDA7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX25vb3AgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbm9vcFwiKTtcblxudmFyIG5hbWUgPSAnc2l6ZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnP21hdHJpeCddO1xudmFyIGNyZWF0ZVNpemUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBzaXplIG9mIGEgbWF0cml4IG9yIHNjYWxhci5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5zaXplKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgbWF0aC5zaXplKDIuMykgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIFtdXG4gICAqICAgICBtYXRoLnNpemUoJ2hlbGxvIHdvcmxkJykgICAgICAgIC8vIHJldHVybnMgWzExXVxuICAgKlxuICAgKiAgICAgY29uc3QgQSA9IFtbMSwgMiwgM10sIFs0LCA1LCA2XV1cbiAgICogICAgIG1hdGguc2l6ZShBKSAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBbMiwgM11cbiAgICogICAgIG1hdGguc2l6ZShtYXRoLnJhbmdlKDEsNikpICAgICAgLy8gcmV0dXJucyBbNV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICByZXNpemUsIHNxdWVlemUsIHN1YnNldFxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW4gfCBudW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IHN0cmluZyB8IEFycmF5IHwgTWF0cml4fSB4ICBBIG1hdHJpeFxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gQSB2ZWN0b3Igd2l0aCBzaXplIG9mIGB4YC5cbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuIHguY3JlYXRlKHguc2l6ZSgpKTtcbiAgICB9LFxuICAgIEFycmF5OiBfYXJyYXkuYXJyYXlTaXplLFxuICAgIHN0cmluZzogZnVuY3Rpb24gc3RyaW5nKHgpIHtcbiAgICAgIHJldHVybiBjb25maWcubWF0cml4ID09PSAnQXJyYXknID8gW3gubGVuZ3RoXSA6IG1hdHJpeChbeC5sZW5ndGhdKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBDb21wbGV4IHwgQmlnTnVtYmVyIHwgVW5pdCB8IGJvb2xlYW4gfCBudWxsJzogZnVuY3Rpb24gbnVtYmVyQ29tcGxleEJpZ051bWJlclVuaXRCb29sZWFuTnVsbCh4KSB7XG4gICAgICAvLyBzY2FsYXJcbiAgICAgIHJldHVybiBjb25maWcubWF0cml4ID09PSAnQXJyYXknID8gW10gOiBtYXRyaXggPyBtYXRyaXgoW10pIDogKDAsIF9ub29wLm5vTWF0cml4KSgpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlU2l6ZSA9IGNyZWF0ZVNpemU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNvcnQgPSB2b2lkIDA7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdzb3J0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdjb21wYXJlJywgJ2NvbXBhcmVOYXR1cmFsJ107XG52YXIgY3JlYXRlU29ydCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGNvbXBhcmUgPSBfcmVmLmNvbXBhcmUsXG4gICAgICBjb21wYXJlTmF0dXJhbCA9IF9yZWYuY29tcGFyZU5hdHVyYWw7XG4gIHZhciBjb21wYXJlQXNjID0gY29tcGFyZTtcblxuICB2YXIgY29tcGFyZURlc2MgPSBmdW5jdGlvbiBjb21wYXJlRGVzYyhhLCBiKSB7XG4gICAgcmV0dXJuIC1jb21wYXJlKGEsIGIpO1xuICB9O1xuICAvKipcbiAgICogU29ydCB0aGUgaXRlbXMgaW4gYSBtYXRyaXguXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5zb3J0KHgpXG4gICAqICAgIG1hdGguc29ydCh4LCBjb21wYXJlKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5zb3J0KFs1LCAxMCwgMV0pIC8vIHJldHVybnMgWzEsIDUsIDEwXVxuICAgKiAgICBtYXRoLnNvcnQoWydDJywgJ0InLCAnQScsICdEJ10sIG1hdGguY29tcGFyZU5hdHVyYWwpXG4gICAqICAgIC8vIHJldHVybnMgWydBJywgJ0InLCAnQycsICdEJ11cbiAgICpcbiAgICogICAgZnVuY3Rpb24gc29ydEJ5TGVuZ3RoIChhLCBiKSB7XG4gICAqICAgICAgcmV0dXJuIGEubGVuZ3RoIC0gYi5sZW5ndGhcbiAgICogICAgfVxuICAgKiAgICBtYXRoLnNvcnQoWydMYW5nZG9uJywgJ1RvbScsICdTYXJhJ10sIHNvcnRCeUxlbmd0aClcbiAgICogICAgLy8gcmV0dXJucyBbJ1RvbScsICdTYXJhJywgJ0xhbmdkb24nXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgZmlsdGVyLCBmb3JFYWNoLCBtYXAsIGNvbXBhcmUsIGNvbXBhcmVOYXR1cmFsXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4IHwgQXJyYXl9IHggICAgQSBvbmUgZGltZW5zaW9uYWwgbWF0cml4IG9yIGFycmF5IHRvIHNvcnRcbiAgICogQHBhcmFtIHtGdW5jdGlvbiB8ICdhc2MnIHwgJ2Rlc2MnIHwgJ25hdHVyYWwnfSBbY29tcGFyZT0nYXNjJ11cbiAgICogICAgICAgIEFuIG9wdGlvbmFsIF9jb21wYXJhdG9yIGZ1bmN0aW9uIG9yIG5hbWUuIFRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgYXNcbiAgICogICAgICAgIGBjb21wYXJlKGEsIGIpYCwgYW5kIG11c3QgcmV0dXJuIDEgd2hlbiBhID4gYiwgLTEgd2hlbiBhIDwgYixcbiAgICogICAgICAgIGFuZCAwIHdoZW4gYSA9PSBiLlxuICAgKiBAcmV0dXJuIHtNYXRyaXggfCBBcnJheX0gUmV0dXJucyB0aGUgc29ydGVkIG1hdHJpeC5cbiAgICovXG5cblxuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIEFycmF5OiBmdW5jdGlvbiBBcnJheSh4KSB7XG4gICAgICBfYXJyYXlJc1ZlY3Rvcih4KTtcblxuICAgICAgcmV0dXJuIHguc29ydChjb21wYXJlQXNjKTtcbiAgICB9LFxuICAgIE1hdHJpeDogZnVuY3Rpb24gTWF0cml4KHgpIHtcbiAgICAgIF9tYXRyaXhJc1ZlY3Rvcih4KTtcblxuICAgICAgcmV0dXJuIG1hdHJpeCh4LnRvQXJyYXkoKS5zb3J0KGNvbXBhcmVBc2MpLCB4LnN0b3JhZ2UoKSk7XG4gICAgfSxcbiAgICAnQXJyYXksIGZ1bmN0aW9uJzogZnVuY3Rpb24gQXJyYXlGdW5jdGlvbih4LCBfY29tcGFyYXRvcikge1xuICAgICAgX2FycmF5SXNWZWN0b3IoeCk7XG5cbiAgICAgIHJldHVybiB4LnNvcnQoX2NvbXBhcmF0b3IpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgZnVuY3Rpb24nOiBmdW5jdGlvbiBNYXRyaXhGdW5jdGlvbih4LCBfY29tcGFyYXRvcikge1xuICAgICAgX21hdHJpeElzVmVjdG9yKHgpO1xuXG4gICAgICByZXR1cm4gbWF0cml4KHgudG9BcnJheSgpLnNvcnQoX2NvbXBhcmF0b3IpLCB4LnN0b3JhZ2UoKSk7XG4gICAgfSxcbiAgICAnQXJyYXksIHN0cmluZyc6IGZ1bmN0aW9uIEFycmF5U3RyaW5nKHgsIG9yZGVyKSB7XG4gICAgICBfYXJyYXlJc1ZlY3Rvcih4KTtcblxuICAgICAgcmV0dXJuIHguc29ydChfY29tcGFyYXRvcihvcmRlcikpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgc3RyaW5nJzogZnVuY3Rpb24gTWF0cml4U3RyaW5nKHgsIG9yZGVyKSB7XG4gICAgICBfbWF0cml4SXNWZWN0b3IoeCk7XG5cbiAgICAgIHJldHVybiBtYXRyaXgoeC50b0FycmF5KCkuc29ydChfY29tcGFyYXRvcihvcmRlcikpLCB4LnN0b3JhZ2UoKSk7XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIEdldCB0aGUgY29tcGFyYXRvciBmb3IgZ2l2ZW4gb3JkZXIgKCdhc2MnLCAnZGVzYycsICduYXR1cmFsJylcbiAgICogQHBhcmFtIHsnYXNjJyB8ICdkZXNjJyB8ICduYXR1cmFsJ30gb3JkZXJcbiAgICogQHJldHVybiB7RnVuY3Rpb259IFJldHVybnMgYSBfY29tcGFyYXRvciBmdW5jdGlvblxuICAgKi9cblxuICBmdW5jdGlvbiBfY29tcGFyYXRvcihvcmRlcikge1xuICAgIGlmIChvcmRlciA9PT0gJ2FzYycpIHtcbiAgICAgIHJldHVybiBjb21wYXJlQXNjO1xuICAgIH0gZWxzZSBpZiAob3JkZXIgPT09ICdkZXNjJykge1xuICAgICAgcmV0dXJuIGNvbXBhcmVEZXNjO1xuICAgIH0gZWxzZSBpZiAob3JkZXIgPT09ICduYXR1cmFsJykge1xuICAgICAgcmV0dXJuIGNvbXBhcmVOYXR1cmFsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0cmluZyBcImFzY1wiLCBcImRlc2NcIiwgb3IgXCJuYXR1cmFsXCIgZXhwZWN0ZWQnKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHdoZXRoZXIgYW4gYXJyYXkgaXMgb25lIGRpbWVuc2lvbmFsXG4gICAqIFRocm93cyBhbiBlcnJvciB3aGVuIHRoaXMgaXMgbm90IHRoZSBjYXNlXG4gICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX2FycmF5SXNWZWN0b3IoYXJyYXkpIHtcbiAgICBpZiAoKDAsIF9hcnJheS5hcnJheVNpemUpKGFycmF5KS5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT25lIGRpbWVuc2lvbmFsIGFycmF5IGV4cGVjdGVkJyk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB3aGV0aGVyIGEgbWF0cml4IGlzIG9uZSBkaW1lbnNpb25hbFxuICAgKiBUaHJvd3MgYW4gZXJyb3Igd2hlbiB0aGlzIGlzIG5vdCB0aGUgY2FzZVxuICAgKiBAcGFyYW0ge01hdHJpeH0gbWF0cml4XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX21hdHJpeElzVmVjdG9yKG1hdHJpeCkge1xuICAgIGlmIChtYXRyaXguc2l6ZSgpLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPbmUgZGltZW5zaW9uYWwgbWF0cml4IGV4cGVjdGVkJyk7XG4gICAgfVxuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlU29ydCA9IGNyZWF0ZVNvcnQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNxcnRtID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdzcXJ0bSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdhYnMnLCAnYWRkJywgJ211bHRpcGx5JywgJ3NxcnQnLCAnc3VidHJhY3QnLCAnaW52JywgJ3NpemUnLCAnbWF4JywgJ2lkZW50aXR5J107XG52YXIgY3JlYXRlU3FydG0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgYWJzID0gX3JlZi5hYnMsXG4gICAgICBhZGQgPSBfcmVmLmFkZCxcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSxcbiAgICAgIHNxcnQgPSBfcmVmLnNxcnQsXG4gICAgICBzdWJ0cmFjdCA9IF9yZWYuc3VidHJhY3QsXG4gICAgICBpbnYgPSBfcmVmLmludixcbiAgICAgIHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBtYXggPSBfcmVmLm1heCxcbiAgICAgIGlkZW50aXR5ID0gX3JlZi5pZGVudGl0eTtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBwcmluY2lwYWwgc3F1YXJlIHJvb3Qgb2YgYSBzcXVhcmUgbWF0cml4LlxuICAgKiBUaGUgcHJpbmNpcGFsIHNxdWFyZSByb290IG1hdHJpeCBgWGAgb2YgYW5vdGhlciBtYXRyaXggYEFgIGlzIHN1Y2ggdGhhdCBgWCAqIFggPSBBYC5cbiAgICpcbiAgICogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU3F1YXJlX3Jvb3Rfb2ZfYV9tYXRyaXhcbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgWCA9IG1hdGguc3FydG0oQSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLnNxcnRtKFtbMSwgMl0sIFszLCA0XV0pIC8vIHJldHVybnMgW1stMiwgMV0sIFsxLjUsIC0wLjVdXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgIHNxcnQsIHBvd1xuICAgKlxuICAgKiBAcGFyYW0gIHtBcnJheSB8IE1hdHJpeH0gQSAgIFRoZSBzcXVhcmUgbWF0cml4IGBBYFxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gICAgIFRoZSBwcmluY2lwYWwgc3F1YXJlIHJvb3Qgb2YgbWF0cml4IGBBYFxuICAgKi9cbiAgdmFyIHNxcnRtID0gdHlwZWQobmFtZSwge1xuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KEEpIHtcbiAgICAgIHZhciBzaXplID0gKDAsIF9pcy5pc01hdHJpeCkoQSkgPyBBLnNpemUoKSA6ICgwLCBfYXJyYXkuYXJyYXlTaXplKShBKTtcblxuICAgICAgc3dpdGNoIChzaXplLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgLy8gU2luZ2xlIGVsZW1lbnQgQXJyYXkgfCBNYXRyaXhcbiAgICAgICAgICBpZiAoc2l6ZVswXSA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIHNxcnQoQSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggbXVzdCBiZSBzcXVhcmUgJyArICcoc2l6ZTogJyArICgwLCBfc3RyaW5nLmZvcm1hdCkoc2l6ZSkgKyAnKScpO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gVHdvLWRpbWVuc2lvbmFsIEFycmF5IHwgTWF0cml4XG4gICAgICAgICAgICB2YXIgcm93cyA9IHNpemVbMF07XG4gICAgICAgICAgICB2YXIgY29scyA9IHNpemVbMV07XG5cbiAgICAgICAgICAgIGlmIChyb3dzID09PSBjb2xzKSB7XG4gICAgICAgICAgICAgIHJldHVybiBfZGVubWFuQmVhdmVycyhBKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggbXVzdCBiZSBzcXVhcmUgJyArICcoc2l6ZTogJyArICgwLCBfc3RyaW5nLmZvcm1hdCkoc2l6ZSkgKyAnKScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICB2YXIgX21heEl0ZXJhdGlvbnMgPSAxZTM7XG4gIHZhciBfdG9sZXJhbmNlID0gMWUtNjtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgcHJpbmNpcGFsIHNxdWFyZSByb290IG1hdHJpeCB1c2luZyB0aGUgRGVubWFu4oCTQmVhdmVycyBpdGVyYXRpdmUgbWV0aG9kXG4gICAqXG4gICAqIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NxdWFyZV9yb290X29mX2FfbWF0cml4I0J5X0Rlbm1hbuKAk0JlYXZlcnNfaXRlcmF0aW9uXG4gICAqXG4gICAqIEBwYXJhbSAge0FycmF5IHwgTWF0cml4fSBBICAgVGhlIHNxdWFyZSBtYXRyaXggYEFgXG4gICAqIEByZXR1cm4ge0FycmF5IHwgTWF0cml4fSAgICAgVGhlIHByaW5jaXBhbCBzcXVhcmUgcm9vdCBvZiBtYXRyaXggYEFgXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9kZW5tYW5CZWF2ZXJzKEEpIHtcbiAgICB2YXIgZXJyb3I7XG4gICAgdmFyIGl0ZXJhdGlvbnMgPSAwO1xuICAgIHZhciBZID0gQTtcbiAgICB2YXIgWiA9IGlkZW50aXR5KHNpemUoQSkpO1xuXG4gICAgZG8ge1xuICAgICAgdmFyIFlrID0gWTtcbiAgICAgIFkgPSBtdWx0aXBseSgwLjUsIGFkZChZaywgaW52KFopKSk7XG4gICAgICBaID0gbXVsdGlwbHkoMC41LCBhZGQoWiwgaW52KFlrKSkpO1xuICAgICAgZXJyb3IgPSBtYXgoYWJzKHN1YnRyYWN0KFksIFlrKSkpO1xuXG4gICAgICBpZiAoZXJyb3IgPiBfdG9sZXJhbmNlICYmICsraXRlcmF0aW9ucyA+IF9tYXhJdGVyYXRpb25zKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY29tcHV0aW5nIHNxdWFyZSByb290IG9mIG1hdHJpeDogaXRlcmF0aXZlIG1ldGhvZCBjb3VsZCBub3QgY29udmVyZ2UnKTtcbiAgICAgIH1cbiAgICB9IHdoaWxlIChlcnJvciA+IF90b2xlcmFuY2UpO1xuXG4gICAgcmV0dXJuIFk7XG4gIH1cblxuICByZXR1cm4gc3FydG07XG59KTtcbmV4cG9ydHMuY3JlYXRlU3FydG0gPSBjcmVhdGVTcXJ0bTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3F1ZWV6ZSA9IHZvaWQgMDtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnc3F1ZWV6ZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnXTtcbnZhciBjcmVhdGVTcXVlZXplID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4O1xuXG4gIC8qKlxuICAgKiBTcXVlZXplIGEgbWF0cml4LCByZW1vdmUgaW5uZXIgYW5kIG91dGVyIHNpbmdsZXRvbiBkaW1lbnNpb25zIGZyb20gYSBtYXRyaXguXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguc3F1ZWV6ZSh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGguc3F1ZWV6ZShbM10pICAgICAgICAgICAvLyByZXR1cm5zIDNcbiAgICogICAgIG1hdGguc3F1ZWV6ZShbWzNdXSkgICAgICAgICAvLyByZXR1cm5zIDNcbiAgICpcbiAgICogICAgIGNvbnN0IEEgPSBtYXRoLnplcm9zKDMsIDEpICAgIC8vIHJldHVybnMgW1swXSwgWzBdLCBbMF1dIChzaXplIDN4MSlcbiAgICogICAgIG1hdGguc3F1ZWV6ZShBKSAgICAgICAgICAgICAvLyByZXR1cm5zIFswLCAwLCAwXSAoc2l6ZSAzKVxuICAgKlxuICAgKiAgICAgY29uc3QgQiA9IG1hdGguemVyb3MoMSwgMykgICAgLy8gcmV0dXJucyBbWzAsIDAsIDBdXSAoc2l6ZSAxeDMpXG4gICAqICAgICBtYXRoLnNxdWVlemUoQikgICAgICAgICAgICAgLy8gcmV0dXJucyBbMCwgMCwgMF0gKHNpemUgMylcbiAgICpcbiAgICogICAgIC8vIG9ubHkgaW5uZXIgYW5kIG91dGVyIGRpbWVuc2lvbnMgYXJlIHJlbW92ZWRcbiAgICogICAgIGNvbnN0IEMgPSBtYXRoLnplcm9zKDIsIDEsIDMpIC8vIHJldHVybnMgW1tbMCwgMCwgMF1dLCBbWzAsIDAsIDBdXV0gKHNpemUgMngxeDMpXG4gICAqICAgICBtYXRoLnNxdWVlemUoQykgICAgICAgICAgICAgLy8gcmV0dXJucyBbW1swLCAwLCAwXV0sIFtbMCwgMCwgMF1dXSAoc2l6ZSAyeDF4MylcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBzdWJzZXRcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXggfCBBcnJheX0geCAgICAgIE1hdHJpeCB0byBiZSBzcXVlZXplZFxuICAgKiBAcmV0dXJuIHtNYXRyaXggfCBBcnJheX0gU3F1ZWV6ZWQgbWF0cml4XG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIEFycmF5OiBmdW5jdGlvbiBBcnJheSh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9hcnJheS5zcXVlZXplKSgoMCwgX29iamVjdC5jbG9uZSkoeCkpO1xuICAgIH0sXG4gICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoeCkge1xuICAgICAgdmFyIHJlcyA9ICgwLCBfYXJyYXkuc3F1ZWV6ZSkoeC50b0FycmF5KCkpOyAvLyBGSVhNRTogcmV0dXJuIHRoZSBzYW1lIHR5cGUgb2YgbWF0cml4IGFzIHRoZSBpbnB1dFxuXG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShyZXMpID8gbWF0cml4KHJlcykgOiByZXM7XG4gICAgfSxcbiAgICBhbnk6IGZ1bmN0aW9uIGFueSh4KSB7XG4gICAgICAvLyBzY2FsYXJcbiAgICAgIHJldHVybiAoMCwgX29iamVjdC5jbG9uZSkoeCk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTcXVlZXplID0gY3JlYXRlU3F1ZWV6ZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3Vic2V0ID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfY3VzdG9tcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jdXN0b21zXCIpO1xuXG52YXIgX0RpbWVuc2lvbkVycm9yID0gcmVxdWlyZShcIi4uLy4uL2Vycm9yL0RpbWVuc2lvbkVycm9yXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnc3Vic2V0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCddO1xudmFyIGNyZWF0ZVN1YnNldCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeDtcblxuICAvKipcbiAgICogR2V0IG9yIHNldCBhIHN1YnNldCBvZiBhIG1hdHJpeCBvciBzdHJpbmcuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICogICAgIG1hdGguc3Vic2V0KHZhbHVlLCBpbmRleCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHJpZXZlIGEgc3Vic2V0XG4gICAqICAgICBtYXRoLnN1YnNldCh2YWx1ZSwgaW5kZXgsIHJlcGxhY2VtZW50IFssIGRlZmF1bHRWYWx1ZV0pICAvLyByZXBsYWNlIGEgc3Vic2V0XG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgLy8gZ2V0IGEgc3Vic2V0XG4gICAqICAgICBjb25zdCBkID0gW1sxLCAyXSwgWzMsIDRdXVxuICAgKiAgICAgbWF0aC5zdWJzZXQoZCwgbWF0aC5pbmRleCgxLCAwKSkgICAgICAgIC8vIHJldHVybnMgM1xuICAgKiAgICAgbWF0aC5zdWJzZXQoZCwgbWF0aC5pbmRleChbMCwgMV0sIDEpKSAgIC8vIHJldHVybnMgW1syXSwgWzRdXVxuICAgKlxuICAgKiAgICAgLy8gcmVwbGFjZSBhIHN1YnNldFxuICAgKiAgICAgY29uc3QgZSA9IFtdXG4gICAqICAgICBjb25zdCBmID0gbWF0aC5zdWJzZXQoZSwgbWF0aC5pbmRleCgwLCBbMCwgMl0pLCBbNSwgNl0pICAvLyBmID0gW1s1LCA2XV1cbiAgICogICAgIGNvbnN0IGcgPSBtYXRoLnN1YnNldChmLCBtYXRoLmluZGV4KDEsIDEpLCA3LCAwKSAgICAgICAgIC8vIGcgPSBbWzUsIDZdLCBbMCwgN11dXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgc2l6ZSwgcmVzaXplLCBzcXVlZXplLCBpbmRleFxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4IHwgc3RyaW5nfSBtYXRyaXggIEFuIGFycmF5LCBtYXRyaXgsIG9yIHN0cmluZ1xuICAgKiBAcGFyYW0ge0luZGV4fSBpbmRleCAgICAgICAgICAgICAgICAgICAgIEFuIGluZGV4IGNvbnRhaW5pbmcgcmFuZ2VzIGZvciBlYWNoXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGltZW5zaW9uXG4gICAqIEBwYXJhbSB7Kn0gW3JlcGxhY2VtZW50XSAgICAgICAgICAgICAgICAgQW4gYXJyYXksIG1hdHJpeCwgb3Igc2NhbGFyLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHByb3ZpZGVkLCB0aGUgc3Vic2V0IGlzIHJlcGxhY2VkIHdpdGggcmVwbGFjZW1lbnQuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgbm90IHByb3ZpZGVkLCB0aGUgc3Vic2V0IGlzIHJldHVybmVkXG4gICAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZT11bmRlZmluZWRdICAgICAgRGVmYXVsdCB2YWx1ZSwgZmlsbGVkIGluIG9uIG5ldyBlbnRyaWVzIHdoZW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWF0cml4IGlzIHJlc2l6ZWQuIElmIG5vdCBwcm92aWRlZCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRoLm1hdHJpeCBlbGVtZW50cyB3aWxsIGJlIGxlZnQgdW5kZWZpbmVkLlxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeCB8IHN0cmluZ30gRWl0aGVyIHRoZSByZXRyaWV2ZWQgc3Vic2V0IG9yIHRoZSB1cGRhdGVkIG1hdHJpeC5cbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgLy8gZ2V0IHN1YnNldFxuICAgICdBcnJheSwgSW5kZXgnOiBmdW5jdGlvbiBBcnJheUluZGV4KHZhbHVlLCBpbmRleCkge1xuICAgICAgdmFyIG0gPSBtYXRyaXgodmFsdWUpO1xuICAgICAgdmFyIHN1YnNldCA9IG0uc3Vic2V0KGluZGV4KTsgLy8gcmV0dXJucyBhIE1hdHJpeFxuXG4gICAgICByZXR1cm4gaW5kZXguaXNTY2FsYXIoKSA/IHN1YnNldCA6IHN1YnNldC52YWx1ZU9mKCk7IC8vIHJldHVybiBhbiBBcnJheSAobGlrZSB0aGUgaW5wdXQpXG4gICAgfSxcbiAgICAnTWF0cml4LCBJbmRleCc6IGZ1bmN0aW9uIE1hdHJpeEluZGV4KHZhbHVlLCBpbmRleCkge1xuICAgICAgcmV0dXJuIHZhbHVlLnN1YnNldChpbmRleCk7XG4gICAgfSxcbiAgICAnT2JqZWN0LCBJbmRleCc6IF9nZXRPYmplY3RQcm9wZXJ0eSxcbiAgICAnc3RyaW5nLCBJbmRleCc6IF9nZXRTdWJzdHJpbmcsXG4gICAgLy8gc2V0IHN1YnNldFxuICAgICdBcnJheSwgSW5kZXgsIGFueSc6IGZ1bmN0aW9uIEFycmF5SW5kZXhBbnkodmFsdWUsIGluZGV4LCByZXBsYWNlbWVudCkge1xuICAgICAgcmV0dXJuIG1hdHJpeCgoMCwgX29iamVjdC5jbG9uZSkodmFsdWUpKS5zdWJzZXQoaW5kZXgsIHJlcGxhY2VtZW50LCB1bmRlZmluZWQpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgSW5kZXgsIGFueSwgYW55JzogZnVuY3Rpb24gQXJyYXlJbmRleEFueUFueSh2YWx1ZSwgaW5kZXgsIHJlcGxhY2VtZW50LCBkZWZhdWx0VmFsdWUpIHtcbiAgICAgIHJldHVybiBtYXRyaXgoKDAsIF9vYmplY3QuY2xvbmUpKHZhbHVlKSkuc3Vic2V0KGluZGV4LCByZXBsYWNlbWVudCwgZGVmYXVsdFZhbHVlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBJbmRleCwgYW55JzogZnVuY3Rpb24gTWF0cml4SW5kZXhBbnkodmFsdWUsIGluZGV4LCByZXBsYWNlbWVudCkge1xuICAgICAgcmV0dXJuIHZhbHVlLmNsb25lKCkuc3Vic2V0KGluZGV4LCByZXBsYWNlbWVudCk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBJbmRleCwgYW55LCBhbnknOiBmdW5jdGlvbiBNYXRyaXhJbmRleEFueUFueSh2YWx1ZSwgaW5kZXgsIHJlcGxhY2VtZW50LCBkZWZhdWx0VmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZS5jbG9uZSgpLnN1YnNldChpbmRleCwgcmVwbGFjZW1lbnQsIGRlZmF1bHRWYWx1ZSk7XG4gICAgfSxcbiAgICAnc3RyaW5nLCBJbmRleCwgc3RyaW5nJzogX3NldFN1YnN0cmluZyxcbiAgICAnc3RyaW5nLCBJbmRleCwgc3RyaW5nLCBzdHJpbmcnOiBfc2V0U3Vic3RyaW5nLFxuICAgICdPYmplY3QsIEluZGV4LCBhbnknOiBfc2V0T2JqZWN0UHJvcGVydHlcbiAgfSk7XG59KTtcbi8qKlxuICogUmV0cmlldmUgYSBzdWJzZXQgb2YgYSBzdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgICAgICAgICAgICBzdHJpbmcgZnJvbSB3aGljaCB0byBnZXQgYSBzdWJzdHJpbmdcbiAqIEBwYXJhbSB7SW5kZXh9IGluZGV4ICAgICAgICAgICBBbiBpbmRleCBjb250YWluaW5nIHJhbmdlcyBmb3IgZWFjaCBkaW1lbnNpb25cbiAqIEByZXR1cm5zIHtzdHJpbmd9IHN1YnN0cmluZ1xuICogQHByaXZhdGVcbiAqL1xuXG5leHBvcnRzLmNyZWF0ZVN1YnNldCA9IGNyZWF0ZVN1YnNldDtcblxuZnVuY3Rpb24gX2dldFN1YnN0cmluZyhzdHIsIGluZGV4KSB7XG4gIGlmICghKDAsIF9pcy5pc0luZGV4KShpbmRleCkpIHtcbiAgICAvLyBUT0RPOiBiZXR0ZXIgZXJyb3IgbWVzc2FnZVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0luZGV4IGV4cGVjdGVkJyk7XG4gIH1cblxuICBpZiAoaW5kZXguc2l6ZSgpLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3IoaW5kZXguc2l6ZSgpLmxlbmd0aCwgMSk7XG4gIH0gLy8gdmFsaWRhdGUgd2hldGhlciB0aGUgcmFuZ2UgaXMgb3V0IG9mIHJhbmdlXG5cblxuICB2YXIgc3RyTGVuID0gc3RyLmxlbmd0aDtcbiAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShpbmRleC5taW4oKVswXSwgc3RyTGVuKTtcbiAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShpbmRleC5tYXgoKVswXSwgc3RyTGVuKTtcbiAgdmFyIHJhbmdlID0gaW5kZXguZGltZW5zaW9uKDApO1xuICB2YXIgc3Vic3RyID0gJyc7XG4gIHJhbmdlLmZvckVhY2goZnVuY3Rpb24gKHYpIHtcbiAgICBzdWJzdHIgKz0gc3RyLmNoYXJBdCh2KTtcbiAgfSk7XG4gIHJldHVybiBzdWJzdHI7XG59XG4vKipcbiAqIFJlcGxhY2UgYSBzdWJzdHJpbmcgaW4gYSBzdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgICAgICAgICAgICBzdHJpbmcgdG8gYmUgcmVwbGFjZWRcbiAqIEBwYXJhbSB7SW5kZXh9IGluZGV4ICAgICAgICAgICBBbiBpbmRleCBjb250YWluaW5nIHJhbmdlcyBmb3IgZWFjaCBkaW1lbnNpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSByZXBsYWNlbWVudCAgICBSZXBsYWNlbWVudCBzdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbZGVmYXVsdFZhbHVlXSBEZWZhdWx0IHZhbHVlIHRvIGJlIHVzZXMgd2hlbiByZXNpemluZ1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzdHJpbmcuIGlzICcgJyBieSBkZWZhdWx0XG4gKiBAcmV0dXJucyB7c3RyaW5nfSByZXN1bHRcbiAqIEBwcml2YXRlXG4gKi9cblxuXG5mdW5jdGlvbiBfc2V0U3Vic3RyaW5nKHN0ciwgaW5kZXgsIHJlcGxhY2VtZW50LCBkZWZhdWx0VmFsdWUpIHtcbiAgaWYgKCFpbmRleCB8fCBpbmRleC5pc0luZGV4ICE9PSB0cnVlKSB7XG4gICAgLy8gVE9ETzogYmV0dGVyIGVycm9yIG1lc3NhZ2VcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbmRleCBleHBlY3RlZCcpO1xuICB9XG5cbiAgaWYgKGluZGV4LnNpemUoKS5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKGluZGV4LnNpemUoKS5sZW5ndGgsIDEpO1xuICB9XG5cbiAgaWYgKGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGVvZiBkZWZhdWx0VmFsdWUgIT09ICdzdHJpbmcnIHx8IGRlZmF1bHRWYWx1ZS5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1NpbmdsZSBjaGFyYWN0ZXIgZXhwZWN0ZWQgYXMgZGVmYXVsdFZhbHVlJyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGRlZmF1bHRWYWx1ZSA9ICcgJztcbiAgfVxuXG4gIHZhciByYW5nZSA9IGluZGV4LmRpbWVuc2lvbigwKTtcbiAgdmFyIGxlbiA9IHJhbmdlLnNpemUoKVswXTtcblxuICBpZiAobGVuICE9PSByZXBsYWNlbWVudC5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKHJhbmdlLnNpemUoKVswXSwgcmVwbGFjZW1lbnQubGVuZ3RoKTtcbiAgfSAvLyB2YWxpZGF0ZSB3aGV0aGVyIHRoZSByYW5nZSBpcyBvdXQgb2YgcmFuZ2VcblxuXG4gIHZhciBzdHJMZW4gPSBzdHIubGVuZ3RoO1xuICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKGluZGV4Lm1pbigpWzBdKTtcbiAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShpbmRleC5tYXgoKVswXSk7IC8vIGNvcHkgdGhlIHN0cmluZyBpbnRvIGFuIGFycmF5IHdpdGggY2hhcmFjdGVyc1xuXG4gIHZhciBjaGFycyA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyTGVuOyBpKyspIHtcbiAgICBjaGFyc1tpXSA9IHN0ci5jaGFyQXQoaSk7XG4gIH1cblxuICByYW5nZS5mb3JFYWNoKGZ1bmN0aW9uICh2LCBpKSB7XG4gICAgY2hhcnNbdl0gPSByZXBsYWNlbWVudC5jaGFyQXQoaVswXSk7XG4gIH0pOyAvLyBpbml0aWFsaXplIHVuZGVmaW5lZCBjaGFyYWN0ZXJzIHdpdGggYSBzcGFjZVxuXG4gIGlmIChjaGFycy5sZW5ndGggPiBzdHJMZW4pIHtcbiAgICBmb3IgKHZhciBfaSA9IHN0ckxlbiAtIDEsIF9sZW4gPSBjaGFycy5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykge1xuICAgICAgaWYgKCFjaGFyc1tfaV0pIHtcbiAgICAgICAgY2hhcnNbX2ldID0gZGVmYXVsdFZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjaGFycy5qb2luKCcnKTtcbn1cbi8qKlxuICogUmV0cmlldmUgYSBwcm9wZXJ0eSBmcm9tIGFuIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICogQHBhcmFtIHtJbmRleH0gaW5kZXhcbiAqIEByZXR1cm4geyp9IFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eVxuICogQHByaXZhdGVcbiAqL1xuXG5cbmZ1bmN0aW9uIF9nZXRPYmplY3RQcm9wZXJ0eShvYmplY3QsIGluZGV4KSB7XG4gIGlmIChpbmRleC5zaXplKCkubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihpbmRleC5zaXplKCksIDEpO1xuICB9XG5cbiAgdmFyIGtleSA9IGluZGV4LmRpbWVuc2lvbigwKTtcblxuICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTdHJpbmcgZXhwZWN0ZWQgYXMgaW5kZXggdG8gcmV0cmlldmUgYW4gb2JqZWN0IHByb3BlcnR5Jyk7XG4gIH1cblxuICByZXR1cm4gKDAsIF9jdXN0b21zLmdldFNhZmVQcm9wZXJ0eSkob2JqZWN0LCBrZXkpO1xufVxuLyoqXG4gKiBTZXQgYSBwcm9wZXJ0eSBvbiBhbiBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAqIEBwYXJhbSB7SW5kZXh9IGluZGV4XG4gKiBAcGFyYW0geyp9IHJlcGxhY2VtZW50XG4gKiBAcmV0dXJuIHsqfSBSZXR1cm5zIHRoZSB1cGRhdGVkIG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuXG5cbmZ1bmN0aW9uIF9zZXRPYmplY3RQcm9wZXJ0eShvYmplY3QsIGluZGV4LCByZXBsYWNlbWVudCkge1xuICBpZiAoaW5kZXguc2l6ZSgpLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3IoaW5kZXguc2l6ZSgpLCAxKTtcbiAgfVxuXG4gIHZhciBrZXkgPSBpbmRleC5kaW1lbnNpb24oMCk7XG5cbiAgaWYgKHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignU3RyaW5nIGV4cGVjdGVkIGFzIGluZGV4IHRvIHJldHJpZXZlIGFuIG9iamVjdCBwcm9wZXJ0eScpO1xuICB9IC8vIGNsb25lIHRoZSBvYmplY3QsIGFuZCBhcHBseSB0aGUgcHJvcGVydHkgdG8gdGhlIGNsb25lXG5cblxuICB2YXIgdXBkYXRlZCA9ICgwLCBfb2JqZWN0LmNsb25lKShvYmplY3QpO1xuICAoMCwgX2N1c3RvbXMuc2V0U2FmZVByb3BlcnR5KSh1cGRhdGVkLCBrZXksIHJlcGxhY2VtZW50KTtcbiAgcmV0dXJuIHVwZGF0ZWQ7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVRyYWNlID0gdm9pZCAwO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3N0cmluZ1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3RyYWNlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdhZGQnXTtcbnZhciBjcmVhdGVUcmFjZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGFkZCA9IF9yZWYuYWRkO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIHRyYWNlIG9mIGEgbWF0cml4OiB0aGUgc3VtIG9mIHRoZSBlbGVtZW50cyBvbiB0aGUgbWFpblxuICAgKiBkaWFnb25hbCBvZiBhIHNxdWFyZSBtYXRyaXguXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC50cmFjZSh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC50cmFjZShbWzEsIDJdLCBbMywgNF1dKSAvLyByZXR1cm5zIDVcbiAgICpcbiAgICogICAgY29uc3QgQSA9IFtcbiAgICogICAgICBbMSwgMiwgM10sXG4gICAqICAgICAgWy0xLCAyLCAzXSxcbiAgICogICAgICBbMiwgMCwgM11cbiAgICogICAgXVxuICAgKiAgICBtYXRoLnRyYWNlKEEpIC8vIHJldHVybnMgNlxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgZGlhZ1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSB4ICBBIG1hdHJpeFxuICAgKlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSB0cmFjZSBvZiBgeGBcbiAgICovXG4gIHJldHVybiB0eXBlZCgndHJhY2UnLCB7XG4gICAgQXJyYXk6IGZ1bmN0aW9uIF9hcnJheVRyYWNlKHgpIHtcbiAgICAgIC8vIHVzZSBkZW5zZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBfZGVuc2VUcmFjZShtYXRyaXgoeCkpO1xuICAgIH0sXG4gICAgU3BhcnNlTWF0cml4OiBfc3BhcnNlVHJhY2UsXG4gICAgRGVuc2VNYXRyaXg6IF9kZW5zZVRyYWNlLFxuICAgIGFueTogX29iamVjdC5jbG9uZVxuICB9KTtcblxuICBmdW5jdGlvbiBfZGVuc2VUcmFjZShtKSB7XG4gICAgLy8gbWF0cml4IHNpemUgJiBkYXRhXG4gICAgdmFyIHNpemUgPSBtLl9zaXplO1xuICAgIHZhciBkYXRhID0gbS5fZGF0YTsgLy8gcHJvY2VzcyBkaW1lbnNpb25zXG5cbiAgICBzd2l0Y2ggKHNpemUubGVuZ3RoKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIC8vIHZlY3RvclxuICAgICAgICBpZiAoc2l6ZVswXSA9PT0gMSkge1xuICAgICAgICAgIC8vIHJldHVybiBkYXRhWzBdXG4gICAgICAgICAgcmV0dXJuICgwLCBfb2JqZWN0LmNsb25lKShkYXRhWzBdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggbXVzdCBiZSBzcXVhcmUgKHNpemU6ICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKHNpemUpICsgJyknKTtcblxuICAgICAgY2FzZSAyOlxuICAgICAgICB7XG4gICAgICAgICAgLy8gdHdvIGRpbWVuc2lvbmFsXG4gICAgICAgICAgdmFyIHJvd3MgPSBzaXplWzBdO1xuICAgICAgICAgIHZhciBjb2xzID0gc2l6ZVsxXTtcblxuICAgICAgICAgIGlmIChyb3dzID09PSBjb2xzKSB7XG4gICAgICAgICAgICAvLyBjYWx1bGF0ZSBzdW1cbiAgICAgICAgICAgIHZhciBzdW0gPSAwOyAvLyBsb29wIGRpYWdvbmFsXG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgICAgIHN1bSA9IGFkZChzdW0sIGRhdGFbaV1baV0pO1xuICAgICAgICAgICAgfSAvLyByZXR1cm4gdHJhY2VcblxuXG4gICAgICAgICAgICByZXR1cm4gc3VtO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgc3F1YXJlIChzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShzaXplKSArICcpJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIG11bHRpIGRpbWVuc2lvbmFsXG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggbXVzdCBiZSB0d28gZGltZW5zaW9uYWwgKHNpemU6ICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKHNpemUpICsgJyknKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBfc3BhcnNlVHJhY2UobSkge1xuICAgIC8vIG1hdHJpeCBhcnJheXNcbiAgICB2YXIgdmFsdWVzID0gbS5fdmFsdWVzO1xuICAgIHZhciBpbmRleCA9IG0uX2luZGV4O1xuICAgIHZhciBwdHIgPSBtLl9wdHI7XG4gICAgdmFyIHNpemUgPSBtLl9zaXplOyAvLyBjaGVjayBkaW1lbnNpb25zXG5cbiAgICB2YXIgcm93cyA9IHNpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSBzaXplWzFdOyAvLyBtYXRyaXggbXVzdCBiZSBzcXVhcmVcblxuICAgIGlmIChyb3dzID09PSBjb2x1bW5zKSB7XG4gICAgICAvLyBjYWx1bGF0ZSBzdW1cbiAgICAgIHZhciBzdW0gPSAwOyAvLyBjaGVjayB3ZSBoYXZlIGRhdGEgKGF2b2lkIGxvb3BpbmcgY29sdW1ucylcblxuICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIGxvb3AgY29sdW1uc1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgICAgIC8vIGswIDw9IGsgPCBrMSB3aGVyZSBrMCA9IF9wdHJbal0gJiYgazEgPSBfcHRyW2orMV1cbiAgICAgICAgICB2YXIgazAgPSBwdHJbal07XG4gICAgICAgICAgdmFyIGsxID0gcHRyW2ogKyAxXTsgLy8gbG9vcCBrIHdpdGhpbiBbazAsIGsxW1xuXG4gICAgICAgICAgZm9yICh2YXIgayA9IGswOyBrIDwgazE7IGsrKykge1xuICAgICAgICAgICAgLy8gcm93IGluZGV4XG4gICAgICAgICAgICB2YXIgaSA9IGluZGV4W2tdOyAvLyBjaGVjayByb3dcblxuICAgICAgICAgICAgaWYgKGkgPT09IGopIHtcbiAgICAgICAgICAgICAgLy8gYWNjdW11bGF0ZSB2YWx1ZVxuICAgICAgICAgICAgICBzdW0gPSBhZGQoc3VtLCB2YWx1ZXNba10pOyAvLyBleGl0IGxvb3BcblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGkgPiBqKSB7XG4gICAgICAgICAgICAgIC8vIGV4aXQgbG9vcCwgbm8gdmFsdWUgb24gdGhlIGRpYWdvbmFsIGZvciBjb2x1bW4galxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gcmV0dXJuIHRyYWNlXG5cblxuICAgICAgcmV0dXJuIHN1bTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgc3F1YXJlIChzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShzaXplKSArICcpJyk7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVUcmFjZSA9IGNyZWF0ZVRyYWNlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVUcmFuc3Bvc2UgPSB2b2lkIDA7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvc3RyaW5nXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAndHJhbnNwb3NlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCddO1xudmFyIGNyZWF0ZVRyYW5zcG9zZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeDtcblxuICAvKipcbiAgICogVHJhbnNwb3NlIGEgbWF0cml4LiBBbGwgdmFsdWVzIG9mIHRoZSBtYXRyaXggYXJlIHJlZmxlY3RlZCBvdmVyIGl0c1xuICAgKiBtYWluIGRpYWdvbmFsLiBPbmx5IGFwcGxpY2FibGUgdG8gdHdvIGRpbWVuc2lvbmFsIG1hdHJpY2VzIGNvbnRhaW5pbmdcbiAgICogYSB2ZWN0b3IgKGkuZS4gaGF2aW5nIHNpemUgYFsxLG5dYCBvciBgW24sMV1gKS4gT25lIGRpbWVuc2lvbmFsXG4gICAqIHZlY3RvcnMgYW5kIHNjYWxhcnMgcmV0dXJuIHRoZSBpbnB1dCB1bmNoYW5nZWQuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGgudHJhbnNwb3NlKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgY29uc3QgQSA9IFtbMSwgMiwgM10sIFs0LCA1LCA2XV1cbiAgICogICAgIG1hdGgudHJhbnNwb3NlKEEpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBbWzEsIDRdLCBbMiwgNV0sIFszLCA2XV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBkaWFnLCBpbnYsIHN1YnNldCwgc3F1ZWV6ZVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSB4ICBNYXRyaXggdG8gYmUgdHJhbnNwb3NlZFxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gICBUaGUgdHJhbnNwb3NlZCBtYXRyaXhcbiAgICovXG4gIHZhciB0cmFuc3Bvc2UgPSB0eXBlZCgndHJhbnNwb3NlJywge1xuICAgIEFycmF5OiBmdW5jdGlvbiBBcnJheSh4KSB7XG4gICAgICAvLyB1c2UgZGVuc2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gdHJhbnNwb3NlKG1hdHJpeCh4KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoeCkge1xuICAgICAgLy8gbWF0cml4IHNpemVcbiAgICAgIHZhciBzaXplID0geC5zaXplKCk7IC8vIHJlc3VsdFxuXG4gICAgICB2YXIgYzsgLy8gcHJvY2VzcyBkaW1lbnNpb25zXG5cbiAgICAgIHN3aXRjaCAoc2l6ZS5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIC8vIHZlY3RvclxuICAgICAgICAgIGMgPSB4LmNsb25lKCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIHJvd3MgYW5kIGNvbHVtbnNcbiAgICAgICAgICAgIHZhciByb3dzID0gc2l6ZVswXTtcbiAgICAgICAgICAgIHZhciBjb2x1bW5zID0gc2l6ZVsxXTsgLy8gY2hlY2sgY29sdW1uc1xuXG4gICAgICAgICAgICBpZiAoY29sdW1ucyA9PT0gMCkge1xuICAgICAgICAgICAgICAvLyB0aHJvdyBleGNlcHRpb25cbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0Nhbm5vdCB0cmFuc3Bvc2UgYSAyRCBtYXRyaXggd2l0aCBubyBjb2x1bW5zIChzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShzaXplKSArICcpJyk7XG4gICAgICAgICAgICB9IC8vIHByb2Nlc3Mgc3RvcmFnZSBmb3JtYXRcblxuXG4gICAgICAgICAgICBzd2l0Y2ggKHguc3RvcmFnZSgpKSB7XG4gICAgICAgICAgICAgIGNhc2UgJ2RlbnNlJzpcbiAgICAgICAgICAgICAgICBjID0gX2RlbnNlVHJhbnNwb3NlKHgsIHJvd3MsIGNvbHVtbnMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgJ3NwYXJzZSc6XG4gICAgICAgICAgICAgICAgYyA9IF9zcGFyc2VUcmFuc3Bvc2UoeCwgcm93cywgY29sdW1ucyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgLy8gbXVsdGkgZGltZW5zaW9uYWxcbiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgYSB2ZWN0b3Igb3IgdHdvIGRpbWVuc2lvbmFsIChzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KSh0aGlzLl9zaXplKSArICcpJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjO1xuICAgIH0sXG4gICAgLy8gc2NhbGFyc1xuICAgIGFueTogZnVuY3Rpb24gYW55KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX29iamVjdC5jbG9uZSkoeCk7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBfZGVuc2VUcmFuc3Bvc2UobSwgcm93cywgY29sdW1ucykge1xuICAgIC8vIG1hdHJpeCBhcnJheVxuICAgIHZhciBkYXRhID0gbS5fZGF0YTsgLy8gdHJhbnNwb3NlZCBtYXRyaXggZGF0YVxuXG4gICAgdmFyIHRyYW5zcG9zZWQgPSBbXTtcbiAgICB2YXIgdHJhbnNwb3NlZFJvdzsgLy8gbG9vcCBjb2x1bW5zXG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgLy8gaW5pdGlhbGl6ZSByb3dcbiAgICAgIHRyYW5zcG9zZWRSb3cgPSB0cmFuc3Bvc2VkW2pdID0gW107IC8vIGxvb3Agcm93c1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAvLyBzZXQgZGF0YVxuICAgICAgICB0cmFuc3Bvc2VkUm93W2ldID0gKDAsIF9vYmplY3QuY2xvbmUpKGRhdGFbaV1bal0pO1xuICAgICAgfVxuICAgIH0gLy8gcmV0dXJuIG1hdHJpeFxuXG5cbiAgICByZXR1cm4gbS5jcmVhdGVEZW5zZU1hdHJpeCh7XG4gICAgICBkYXRhOiB0cmFuc3Bvc2VkLFxuICAgICAgc2l6ZTogW2NvbHVtbnMsIHJvd3NdLFxuICAgICAgZGF0YXR5cGU6IG0uX2RhdGF0eXBlXG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBfc3BhcnNlVHJhbnNwb3NlKG0sIHJvd3MsIGNvbHVtbnMpIHtcbiAgICAvLyBtYXRyaXggYXJyYXlzXG4gICAgdmFyIHZhbHVlcyA9IG0uX3ZhbHVlcztcbiAgICB2YXIgaW5kZXggPSBtLl9pbmRleDtcbiAgICB2YXIgcHRyID0gbS5fcHRyOyAvLyByZXN1bHQgbWF0cmljZXNcblxuICAgIHZhciBjdmFsdWVzID0gdmFsdWVzID8gW10gOiB1bmRlZmluZWQ7XG4gICAgdmFyIGNpbmRleCA9IFtdO1xuICAgIHZhciBjcHRyID0gW107IC8vIHJvdyBjb3VudHNcblxuICAgIHZhciB3ID0gW107XG5cbiAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHJvd3M7IHgrKykge1xuICAgICAgd1t4XSA9IDA7XG4gICAgfSAvLyB2YXJzXG5cblxuICAgIHZhciBwLCBsLCBqOyAvLyBsb29wIHZhbHVlcyBpbiBtYXRyaXhcblxuICAgIGZvciAocCA9IDAsIGwgPSBpbmRleC5sZW5ndGg7IHAgPCBsOyBwKyspIHtcbiAgICAgIC8vIG51bWJlciBvZiB2YWx1ZXMgaW4gcm93XG4gICAgICB3W2luZGV4W3BdXSsrO1xuICAgIH0gLy8gY3VtdWxhdGl2ZSBzdW1cblxuXG4gICAgdmFyIHN1bSA9IDA7IC8vIGluaXRpYWxpemUgY3B0ciB3aXRoIHRoZSBjdW1tdWxhdGl2ZSBzdW0gb2Ygcm93IGNvdW50c1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgIC8vIHVwZGF0ZSBjcHRyXG4gICAgICBjcHRyLnB1c2goc3VtKTsgLy8gdXBkYXRlIHN1bVxuXG4gICAgICBzdW0gKz0gd1tpXTsgLy8gdXBkYXRlIHdcblxuICAgICAgd1tpXSA9IGNwdHJbaV07XG4gICAgfSAvLyB1cGRhdGUgY3B0clxuXG5cbiAgICBjcHRyLnB1c2goc3VtKTsgLy8gbG9vcCBjb2x1bW5zXG5cbiAgICBmb3IgKGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAvLyB2YWx1ZXMgJiBpbmRleCBpbiBjb2x1bW5cbiAgICAgIGZvciAodmFyIGswID0gcHRyW2pdLCBrMSA9IHB0cltqICsgMV0sIGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgLy8gQyB2YWx1ZXMgJiBpbmRleFxuICAgICAgICB2YXIgcSA9IHdbaW5kZXhba11dKys7IC8vIENbaiwgaV0gPSBBW2ksIGpdXG5cbiAgICAgICAgY2luZGV4W3FdID0gajsgLy8gY2hlY2sgd2UgbmVlZCB0byBwcm9jZXNzIHZhbHVlcyAocGF0dGVybiBtYXRyaXgpXG5cbiAgICAgICAgaWYgKHZhbHVlcykge1xuICAgICAgICAgIGN2YWx1ZXNbcV0gPSAoMCwgX29iamVjdC5jbG9uZSkodmFsdWVzW2tdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gcmV0dXJuIG1hdHJpeFxuXG5cbiAgICByZXR1cm4gbS5jcmVhdGVTcGFyc2VNYXRyaXgoe1xuICAgICAgdmFsdWVzOiBjdmFsdWVzLFxuICAgICAgaW5kZXg6IGNpbmRleCxcbiAgICAgIHB0cjogY3B0cixcbiAgICAgIHNpemU6IFtjb2x1bW5zLCByb3dzXSxcbiAgICAgIGRhdGF0eXBlOiBtLl9kYXRhdHlwZVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHRyYW5zcG9zZTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVUcmFuc3Bvc2UgPSBjcmVhdGVUcmFuc3Bvc2U7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVplcm9zID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICd6ZXJvcyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnbWF0cml4JywgJ0JpZ051bWJlciddO1xudmFyIGNyZWF0ZVplcm9zID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBCaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcjtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbWF0cml4IGZpbGxlZCB3aXRoIHplcm9zLiBUaGUgY3JlYXRlZCBtYXRyaXggY2FuIGhhdmUgb25lIG9yXG4gICAqIG11bHRpcGxlIGRpbWVuc2lvbnMuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC56ZXJvcyhtKVxuICAgKiAgICBtYXRoLnplcm9zKG0sIGZvcm1hdClcbiAgICogICAgbWF0aC56ZXJvcyhtLCBuKVxuICAgKiAgICBtYXRoLnplcm9zKG0sIG4sIGZvcm1hdClcbiAgICogICAgbWF0aC56ZXJvcyhbbSwgbl0pXG4gICAqICAgIG1hdGguemVyb3MoW20sIG5dLCBmb3JtYXQpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnplcm9zKDMpICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBbMCwgMCwgMF1cbiAgICogICAgbWF0aC56ZXJvcygzLCAyKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgW1swLCAwXSwgWzAsIDBdLCBbMCwgMF1dXG4gICAqICAgIG1hdGguemVyb3MoMywgJ2RlbnNlJykgICAgICAgICAvLyByZXR1cm5zIFswLCAwLCAwXVxuICAgKlxuICAgKiAgICBjb25zdCBBID0gW1sxLCAyLCAzXSwgWzQsIDUsIDZdXVxuICAgKiAgICBtYXRoLnplcm9zKG1hdGguc2l6ZShBKSkgICAgICAgLy8gcmV0dXJucyBbWzAsIDAsIDBdLCBbMCwgMCwgMF1dXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBvbmVzLCBpZGVudGl0eSwgc2l6ZSwgcmFuZ2VcbiAgICpcbiAgICogQHBhcmFtIHsuLi5udW1iZXIgfCBBcnJheX0gc2l6ZSAgICBUaGUgc2l6ZSBvZiBlYWNoIGRpbWVuc2lvbiBvZiB0aGUgbWF0cml4XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZm9ybWF0XSAgICAgICAgICAgVGhlIE1hdHJpeCBzdG9yYWdlIGZvcm1hdFxuICAgKlxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gICAgICAgICAgIEEgbWF0cml4IGZpbGxlZCB3aXRoIHplcm9zXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICcnOiBmdW5jdGlvbiBfKCkge1xuICAgICAgcmV0dXJuIGNvbmZpZy5tYXRyaXggPT09ICdBcnJheScgPyBfemVyb3MoW10pIDogX3plcm9zKFtdLCAnZGVmYXVsdCcpO1xuICAgIH0sXG4gICAgLy8gbWF0aC56ZXJvcyhtLCBuLCBwLCAuLi4sIGZvcm1hdClcbiAgICAvLyBUT0RPOiBtb3JlIGFjY3VyYXRlIHNpZ25hdHVyZSAnLi4ubnVtYmVyIHwgQmlnTnVtYmVyLCBzdHJpbmcnIGFzIHNvb24gYXMgdHlwZWQtZnVuY3Rpb24gc3VwcG9ydHMgdGhpc1xuICAgICcuLi5udW1iZXIgfCBCaWdOdW1iZXIgfCBzdHJpbmcnOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJTdHJpbmcoc2l6ZSkge1xuICAgICAgdmFyIGxhc3QgPSBzaXplW3NpemUubGVuZ3RoIC0gMV07XG5cbiAgICAgIGlmICh0eXBlb2YgbGFzdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHNpemUucG9wKCk7XG4gICAgICAgIHJldHVybiBfemVyb3Moc2l6ZSwgZm9ybWF0KTtcbiAgICAgIH0gZWxzZSBpZiAoY29uZmlnLm1hdHJpeCA9PT0gJ0FycmF5Jykge1xuICAgICAgICByZXR1cm4gX3plcm9zKHNpemUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIF96ZXJvcyhzaXplLCAnZGVmYXVsdCcpO1xuICAgICAgfVxuICAgIH0sXG4gICAgQXJyYXk6IF96ZXJvcyxcbiAgICBNYXRyaXg6IGZ1bmN0aW9uIE1hdHJpeChzaXplKSB7XG4gICAgICB2YXIgZm9ybWF0ID0gc2l6ZS5zdG9yYWdlKCk7XG4gICAgICByZXR1cm4gX3plcm9zKHNpemUudmFsdWVPZigpLCBmb3JtYXQpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4LCBzdHJpbmcnOiBmdW5jdGlvbiBBcnJheU1hdHJpeFN0cmluZyhzaXplLCBmb3JtYXQpIHtcbiAgICAgIHJldHVybiBfemVyb3Moc2l6ZS52YWx1ZU9mKCksIGZvcm1hdCk7XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBBcnJheSBvciBNYXRyaXggd2l0aCB6ZXJvc1xuICAgKiBAcGFyYW0ge0FycmF5fSBzaXplXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZm9ybWF0PSdkZWZhdWx0J11cbiAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXh9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF96ZXJvcyhzaXplLCBmb3JtYXQpIHtcbiAgICB2YXIgaGFzQmlnTnVtYmVycyA9IF9ub3JtYWxpemUoc2l6ZSk7XG5cbiAgICB2YXIgZGVmYXVsdFZhbHVlID0gaGFzQmlnTnVtYmVycyA/IG5ldyBCaWdOdW1iZXIoMCkgOiAwO1xuXG4gICAgX3ZhbGlkYXRlKHNpemUpO1xuXG4gICAgaWYgKGZvcm1hdCkge1xuICAgICAgLy8gcmV0dXJuIGEgbWF0cml4XG4gICAgICB2YXIgbSA9IG1hdHJpeChmb3JtYXQpO1xuXG4gICAgICBpZiAoc2l6ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBtLnJlc2l6ZShzaXplLCBkZWZhdWx0VmFsdWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gcmV0dXJuIGFuIEFycmF5XG4gICAgICB2YXIgYXJyID0gW107XG5cbiAgICAgIGlmIChzaXplLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuICgwLCBfYXJyYXkucmVzaXplKShhcnIsIHNpemUsIGRlZmF1bHRWYWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhcnI7XG4gICAgfVxuICB9IC8vIHJlcGxhY2UgQmlnTnVtYmVycyB3aXRoIG51bWJlcnMsIHJldHVybnMgdHJ1ZSBpZiBzaXplIGNvbnRhaW5lZCBCaWdOdW1iZXJzXG5cblxuICBmdW5jdGlvbiBfbm9ybWFsaXplKHNpemUpIHtcbiAgICB2YXIgaGFzQmlnTnVtYmVycyA9IGZhbHNlO1xuICAgIHNpemUuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBhcnIpIHtcbiAgICAgIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKSh2YWx1ZSkpIHtcbiAgICAgICAgaGFzQmlnTnVtYmVycyA9IHRydWU7XG4gICAgICAgIGFycltpbmRleF0gPSB2YWx1ZS50b051bWJlcigpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBoYXNCaWdOdW1iZXJzO1xuICB9IC8vIHZhbGlkYXRlIGFyZ3VtZW50c1xuXG5cbiAgZnVuY3Rpb24gX3ZhbGlkYXRlKHNpemUpIHtcbiAgICBzaXplLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJyB8fCAhKDAsIF9udW1iZXIuaXNJbnRlZ2VyKSh2YWx1ZSkgfHwgdmFsdWUgPCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUGFyYW1ldGVycyBpbiBmdW5jdGlvbiB6ZXJvcyBtdXN0IGJlIHBvc2l0aXZlIGludGVnZXJzJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn0pOyAvLyBUT0RPOiB6ZXJvcyBjb250YWlucyBhbG1vc3QgdGhlIHNhbWUgY29kZSBhcyBvbmVzLiBSZXVzZSB0aGlzP1xuXG5leHBvcnRzLmNyZWF0ZVplcm9zID0gY3JlYXRlWmVyb3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNvbWJpbmF0aW9ucyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29tYmluYXRpb25zID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlci9jb21iaW5hdGlvbnNcIik7XG5cbnZhciBuYW1lID0gJ2NvbWJpbmF0aW9ucyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUNvbWJpbmF0aW9ucyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIG51bWJlciBvZiB3YXlzIG9mIHBpY2tpbmcgYGtgIHVub3JkZXJlZCBvdXRjb21lcyBmcm9tIGBuYFxuICAgKiBwb3NzaWJpbGl0aWVzLlxuICAgKlxuICAgKiBDb21iaW5hdGlvbnMgb25seSB0YWtlcyBpbnRlZ2VyIGFyZ3VtZW50cy5cbiAgICogVGhlIGZvbGxvd2luZyBjb25kaXRpb24gbXVzdCBiZSBlbmZvcmNlZDogayA8PSBuLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLmNvbWJpbmF0aW9ucyhuLCBrKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5jb21iaW5hdGlvbnMoNywgNSkgLy8gcmV0dXJucyAyMVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgY29tYmluYXRpb25zV2l0aFJlcCwgcGVybXV0YXRpb25zLCBmYWN0b3JpYWxcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXJ9IG4gICAgVG90YWwgbnVtYmVyIG9mIG9iamVjdHMgaW4gdGhlIHNldFxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlcn0gayAgICBOdW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgc3Vic2V0XG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlcn0gICAgIE51bWJlciBvZiBwb3NzaWJsZSBjb21iaW5hdGlvbnMuXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIsIG51bWJlcic6IF9jb21iaW5hdGlvbnMuY29tYmluYXRpb25zTnVtYmVyLFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IGZ1bmN0aW9uIEJpZ051bWJlckJpZ051bWJlcihuLCBrKSB7XG4gICAgICB2YXIgQmlnTnVtYmVyID0gbi5jb25zdHJ1Y3RvcjtcbiAgICAgIHZhciByZXN1bHQsIGk7XG4gICAgICB2YXIgbk1pbnVzayA9IG4ubWludXMoayk7XG4gICAgICB2YXIgb25lID0gbmV3IEJpZ051bWJlcigxKTtcblxuICAgICAgaWYgKCFpc1Bvc2l0aXZlSW50ZWdlcihuKSB8fCAhaXNQb3NpdGl2ZUludGVnZXIoaykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUG9zaXRpdmUgaW50ZWdlciB2YWx1ZSBleHBlY3RlZCBpbiBmdW5jdGlvbiBjb21iaW5hdGlvbnMnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGsuZ3QobikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignayBtdXN0IGJlIGxlc3MgdGhhbiBuIGluIGZ1bmN0aW9uIGNvbWJpbmF0aW9ucycpO1xuICAgICAgfVxuXG4gICAgICByZXN1bHQgPSBvbmU7XG5cbiAgICAgIGlmIChrLmx0KG5NaW51c2spKSB7XG4gICAgICAgIGZvciAoaSA9IG9uZTsgaS5sdGUobk1pbnVzayk7IGkgPSBpLnBsdXMob25lKSkge1xuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC50aW1lcyhrLnBsdXMoaSkpLmRpdmlkZWRCeShpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChpID0gb25lOyBpLmx0ZShrKTsgaSA9IGkucGx1cyhvbmUpKSB7XG4gICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnRpbWVzKG5NaW51c2sucGx1cyhpKSkuZGl2aWRlZEJ5KGkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSAvLyBUT0RPOiBpbXBsZW1lbnQgc3VwcG9ydCBmb3IgY29sbGVjdGlvbiBpbiBjb21iaW5hdGlvbnNcblxuICB9KTtcbn0pO1xuLyoqXG4gKiBUZXN0IHdoZXRoZXIgQmlnTnVtYmVyIG4gaXMgYSBwb3NpdGl2ZSBpbnRlZ2VyXG4gKiBAcGFyYW0ge0JpZ051bWJlcn0gblxuICogQHJldHVybnMge2Jvb2xlYW59IGlzUG9zaXRpdmVJbnRlZ2VyXG4gKi9cblxuZXhwb3J0cy5jcmVhdGVDb21iaW5hdGlvbnMgPSBjcmVhdGVDb21iaW5hdGlvbnM7XG5cbmZ1bmN0aW9uIGlzUG9zaXRpdmVJbnRlZ2VyKG4pIHtcbiAgcmV0dXJuIG4uaXNJbnRlZ2VyKCkgJiYgbi5ndGUoMCk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNvbWJpbmF0aW9uc1dpdGhSZXAgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfcHJvZHVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9wcm9kdWN0XCIpO1xuXG52YXIgbmFtZSA9ICdjb21iaW5hdGlvbnNXaXRoUmVwJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlQ29tYmluYXRpb25zV2l0aFJlcCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIG51bWJlciBvZiB3YXlzIG9mIHBpY2tpbmcgYGtgIHVub3JkZXJlZCBvdXRjb21lcyBmcm9tIGBuYFxuICAgKiBwb3NzaWJpbGl0aWVzLCBhbGxvd2luZyBpbmRpdmlkdWFsIG91dGNvbWVzIHRvIGJlIHJlcGVhdGVkIG1vcmUgdGhhbiBvbmNlLlxuICAgKlxuICAgKiBDb21iaW5hdGlvbnNXaXRoUmVwIG9ubHkgdGFrZXMgaW50ZWdlciBhcmd1bWVudHMuXG4gICAqIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIG11c3QgYmUgZW5mb3JjZWQ6IGsgPD0gbiArIGsgLTEuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguY29tYmluYXRpb25zV2l0aFJlcChuLCBrKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5jb21iaW5hdGlvbnNXaXRoUmVwKDcsIDUpIC8vIHJldHVybnMgNDYyXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjb21iaW5hdGlvbnMsIHBlcm11dGF0aW9ucywgZmFjdG9yaWFsXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyfSBuICAgIFRvdGFsIG51bWJlciBvZiBvYmplY3RzIGluIHRoZSBzZXRcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXJ9IGsgICAgTnVtYmVyIG9mIG9iamVjdHMgaW4gdGhlIHN1YnNldFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXJ9ICAgICBOdW1iZXIgb2YgcG9zc2libGUgY29tYmluYXRpb25zIHdpdGggcmVwbGFjZW1lbnQuXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcihuLCBrKSB7XG4gICAgICBpZiAoISgwLCBfbnVtYmVyLmlzSW50ZWdlcikobikgfHwgbiA8IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUG9zaXRpdmUgaW50ZWdlciB2YWx1ZSBleHBlY3RlZCBpbiBmdW5jdGlvbiBjb21iaW5hdGlvbnNXaXRoUmVwJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShrKSB8fCBrIDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQb3NpdGl2ZSBpbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIGluIGZ1bmN0aW9uIGNvbWJpbmF0aW9uc1dpdGhSZXAnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG4gPCAxKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2sgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gbiArIGsgLSAxJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChrIDwgbiAtIDEpIHtcbiAgICAgICAgdmFyIF9wcm9kcmFuZ2UgPSAoMCwgX3Byb2R1Y3QucHJvZHVjdCkobiwgbiArIGsgLSAxKTtcblxuICAgICAgICByZXR1cm4gX3Byb2RyYW5nZSAvICgwLCBfcHJvZHVjdC5wcm9kdWN0KSgxLCBrKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHByb2RyYW5nZSA9ICgwLCBfcHJvZHVjdC5wcm9kdWN0KShrICsgMSwgbiArIGsgLSAxKTtcbiAgICAgIHJldHVybiBwcm9kcmFuZ2UgLyAoMCwgX3Byb2R1Y3QucHJvZHVjdCkoMSwgbiAtIDEpO1xuICAgIH0sXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQmlnTnVtYmVyQmlnTnVtYmVyKG4sIGspIHtcbiAgICAgIHZhciBCaWdOdW1iZXIgPSBuLmNvbnN0cnVjdG9yO1xuICAgICAgdmFyIHJlc3VsdCwgaTtcbiAgICAgIHZhciBvbmUgPSBuZXcgQmlnTnVtYmVyKDEpO1xuICAgICAgdmFyIG5NaW51c09uZSA9IG4ubWludXMob25lKTtcblxuICAgICAgaWYgKCFpc1Bvc2l0aXZlSW50ZWdlcihuKSB8fCAhaXNQb3NpdGl2ZUludGVnZXIoaykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUG9zaXRpdmUgaW50ZWdlciB2YWx1ZSBleHBlY3RlZCBpbiBmdW5jdGlvbiBjb21iaW5hdGlvbnNXaXRoUmVwJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChuLmx0KG9uZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignayBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBuICsgayAtIDEgaW4gZnVuY3Rpb24gY29tYmluYXRpb25zV2l0aFJlcCcpO1xuICAgICAgfVxuXG4gICAgICByZXN1bHQgPSBvbmU7XG5cbiAgICAgIGlmIChrLmx0KG5NaW51c09uZSkpIHtcbiAgICAgICAgZm9yIChpID0gb25lOyBpLmx0ZShuTWludXNPbmUpOyBpID0gaS5wbHVzKG9uZSkpIHtcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQudGltZXMoay5wbHVzKGkpKS5kaXZpZGVkQnkoaSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoaSA9IG9uZTsgaS5sdGUoayk7IGkgPSBpLnBsdXMob25lKSkge1xuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC50aW1lcyhuTWludXNPbmUucGx1cyhpKSkuZGl2aWRlZEJ5KGkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICB9KTtcbn0pO1xuLyoqXG4gKiBUZXN0IHdoZXRoZXIgQmlnTnVtYmVyIG4gaXMgYSBwb3NpdGl2ZSBpbnRlZ2VyXG4gKiBAcGFyYW0ge0JpZ051bWJlcn0gblxuICogQHJldHVybnMge2Jvb2xlYW59IGlzUG9zaXRpdmVJbnRlZ2VyXG4gKi9cblxuZXhwb3J0cy5jcmVhdGVDb21iaW5hdGlvbnNXaXRoUmVwID0gY3JlYXRlQ29tYmluYXRpb25zV2l0aFJlcDtcblxuZnVuY3Rpb24gaXNQb3NpdGl2ZUludGVnZXIobikge1xuICByZXR1cm4gbi5pc0ludGVnZXIoKSAmJiBuLmd0ZSgwKTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRmFjdG9yaWFsID0gdm9pZCAwO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2ZhY3RvcmlhbCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdnYW1tYSddO1xudmFyIGNyZWF0ZUZhY3RvcmlhbCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBnYW1tYSA9IF9yZWYuZ2FtbWE7XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIGZhY3RvcmlhbCBvZiBhIHZhbHVlXG4gICAqXG4gICAqIEZhY3RvcmlhbCBvbmx5IHN1cHBvcnRzIGFuIGludGVnZXIgdmFsdWUgYXMgYXJndW1lbnQuXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5mYWN0b3JpYWwobilcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguZmFjdG9yaWFsKDUpICAgIC8vIHJldHVybnMgMTIwXG4gICAqICAgIG1hdGguZmFjdG9yaWFsKDMpICAgIC8vIHJldHVybnMgNlxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgY29tYmluYXRpb25zLCBjb21iaW5hdGlvbnNXaXRoUmVwLCBnYW1tYSwgcGVybXV0YXRpb25zXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IG4gICBBbiBpbnRlZ2VyIG51bWJlclxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0gICAgVGhlIGZhY3RvcmlhbCBvZiBgbmBcbiAgICovXG4gIHZhciBmYWN0b3JpYWwgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIobikge1xuICAgICAgaWYgKG4gPCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVmFsdWUgbXVzdCBiZSBub24tbmVnYXRpdmUnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGdhbW1hKG4gKyAxKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKG4pIHtcbiAgICAgIGlmIChuLmlzTmVnYXRpdmUoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1ZhbHVlIG11c3QgYmUgbm9uLW5lZ2F0aXZlJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBnYW1tYShuLnBsdXMoMSkpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgobikge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKShuLCBmYWN0b3JpYWwpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBmYWN0b3JpYWw7XG59KTtcbmV4cG9ydHMuY3JlYXRlRmFjdG9yaWFsID0gY3JlYXRlRmFjdG9yaWFsOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVHYW1tYSA9IHZvaWQgMDtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2dhbW1hJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdtdWx0aXBseVNjYWxhcicsICdwb3cnLCAnQmlnTnVtYmVyJywgJ0NvbXBsZXgnXTtcbnZhciBjcmVhdGVHYW1tYSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIG11bHRpcGx5U2NhbGFyID0gX3JlZi5tdWx0aXBseVNjYWxhcixcbiAgICAgIHBvdyA9IF9yZWYucG93LFxuICAgICAgX0JpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyLFxuICAgICAgX0NvbXBsZXggPSBfcmVmLkNvbXBsZXg7XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIGdhbW1hIGZ1bmN0aW9uIG9mIGEgdmFsdWUgdXNpbmcgTGFuY3pvcyBhcHByb3hpbWF0aW9uIGZvclxuICAgKiBzbWFsbCB2YWx1ZXMsIGFuZCBhbiBleHRlbmRlZCBTdGlybGluZyBhcHByb3hpbWF0aW9uIGZvciBsYXJnZSB2YWx1ZXMuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5nYW1tYShuKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5nYW1tYSg1KSAgICAgICAvLyByZXR1cm5zIDI0XG4gICAqICAgIG1hdGguZ2FtbWEoLTAuNSkgICAgLy8gcmV0dXJucyAtMy41NDQ5MDc3MDE4MTEwMzM1XG4gICAqICAgIG1hdGguZ2FtbWEobWF0aC5pKSAgLy8gcmV0dXJucyAtMC4xNTQ5NDk4MjgzMDE4MDk3MyAtIDAuNDk4MDE1NjY4MTE4MzU1OTZpXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjb21iaW5hdGlvbnMsIGZhY3RvcmlhbCwgcGVybXV0YXRpb25zXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IG4gICBBIHJlYWwgb3IgY29tcGxleCBudW1iZXJcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9ICAgIFRoZSBnYW1tYSBvZiBgbmBcbiAgICovXG4gIHZhciBnYW1tYSA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IF9udW1iZXIuZ2FtbWFOdW1iZXIsXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleChuKSB7XG4gICAgICBpZiAobi5pbSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZ2FtbWEobi5yZSk7XG4gICAgICB9XG5cbiAgICAgIG4gPSBuZXcgX0NvbXBsZXgobi5yZSAtIDEsIG4uaW0pO1xuICAgICAgdmFyIHggPSBuZXcgX0NvbXBsZXgoX251bWJlci5nYW1tYVBbMF0sIDApO1xuXG4gICAgICBmb3IgKHZhciBpID0gMTsgaSA8IF9udW1iZXIuZ2FtbWFQLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciByZWFsID0gbi5yZSArIGk7IC8vIHggKz0gcFtpXS8obitpKVxuXG4gICAgICAgIHZhciBkZW4gPSByZWFsICogcmVhbCArIG4uaW0gKiBuLmltO1xuXG4gICAgICAgIGlmIChkZW4gIT09IDApIHtcbiAgICAgICAgICB4LnJlICs9IF9udW1iZXIuZ2FtbWFQW2ldICogcmVhbCAvIGRlbjtcbiAgICAgICAgICB4LmltICs9IC0oX251bWJlci5nYW1tYVBbaV0gKiBuLmltKSAvIGRlbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB4LnJlID0gX251bWJlci5nYW1tYVBbaV0gPCAwID8gLUluZmluaXR5IDogSW5maW5pdHk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHQgPSBuZXcgX0NvbXBsZXgobi5yZSArIF9udW1iZXIuZ2FtbWFHICsgMC41LCBuLmltKTtcbiAgICAgIHZhciB0d29QaVNxcnQgPSBNYXRoLnNxcnQoMiAqIE1hdGguUEkpO1xuICAgICAgbi5yZSArPSAwLjU7XG4gICAgICB2YXIgcmVzdWx0ID0gcG93KHQsIG4pO1xuXG4gICAgICBpZiAocmVzdWx0LmltID09PSAwKSB7XG4gICAgICAgIC8vIHNxcnQoMipQSSkqcmVzdWx0XG4gICAgICAgIHJlc3VsdC5yZSAqPSB0d29QaVNxcnQ7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdC5yZSA9PT0gMCkge1xuICAgICAgICByZXN1bHQuaW0gKj0gdHdvUGlTcXJ0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0LnJlICo9IHR3b1BpU3FydDtcbiAgICAgICAgcmVzdWx0LmltICo9IHR3b1BpU3FydDtcbiAgICAgIH1cblxuICAgICAgdmFyIHIgPSBNYXRoLmV4cCgtdC5yZSk7IC8vIGV4cCgtdClcblxuICAgICAgdC5yZSA9IHIgKiBNYXRoLmNvcygtdC5pbSk7XG4gICAgICB0LmltID0gciAqIE1hdGguc2luKC10LmltKTtcbiAgICAgIHJldHVybiBtdWx0aXBseVNjYWxhcihtdWx0aXBseVNjYWxhcihyZXN1bHQsIHQpLCB4KTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKG4pIHtcbiAgICAgIGlmIChuLmlzSW50ZWdlcigpKSB7XG4gICAgICAgIHJldHVybiBuLmlzTmVnYXRpdmUoKSB8fCBuLmlzWmVybygpID8gbmV3IF9CaWdOdW1iZXIoSW5maW5pdHkpIDogYmlnRmFjdG9yaWFsKG4ubWludXMoMSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIW4uaXNGaW5pdGUoKSkge1xuICAgICAgICByZXR1cm4gbmV3IF9CaWdOdW1iZXIobi5pc05lZ2F0aXZlKCkgPyBOYU4gOiBJbmZpbml0eSk7XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcignSW50ZWdlciBCaWdOdW1iZXIgZXhwZWN0ZWQnKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KG4pIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkobiwgZ2FtbWEpO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgZmFjdG9yaWFsIGZvciBhIEJpZ051bWJlclxuICAgKiBAcGFyYW0ge0JpZ051bWJlcn0gblxuICAgKiBAcmV0dXJucyB7QmlnTnVtYmVyfSBSZXR1cm5zIHRoZSBmYWN0b3JpYWwgb2YgblxuICAgKi9cblxuICBmdW5jdGlvbiBiaWdGYWN0b3JpYWwobikge1xuICAgIGlmIChuIDwgOCkge1xuICAgICAgcmV0dXJuIG5ldyBfQmlnTnVtYmVyKFsxLCAxLCAyLCA2LCAyNCwgMTIwLCA3MjAsIDUwNDBdW25dKTtcbiAgICB9XG5cbiAgICB2YXIgcHJlY2lzaW9uID0gY29uZmlnLnByZWNpc2lvbiArIChNYXRoLmxvZyhuLnRvTnVtYmVyKCkpIHwgMCk7XG5cbiAgICB2YXIgQmlnID0gX0JpZ051bWJlci5jbG9uZSh7XG4gICAgICBwcmVjaXNpb246IHByZWNpc2lvblxuICAgIH0pO1xuXG4gICAgaWYgKG4gJSAyID09PSAxKSB7XG4gICAgICByZXR1cm4gbi50aW1lcyhiaWdGYWN0b3JpYWwobmV3IF9CaWdOdW1iZXIobiAtIDEpKSk7XG4gICAgfVxuXG4gICAgdmFyIHAgPSBuO1xuICAgIHZhciBwcm9kID0gbmV3IEJpZyhuKTtcbiAgICB2YXIgc3VtID0gbi50b051bWJlcigpO1xuXG4gICAgd2hpbGUgKHAgPiAyKSB7XG4gICAgICBwIC09IDI7XG4gICAgICBzdW0gKz0gcDtcbiAgICAgIHByb2QgPSBwcm9kLnRpbWVzKHN1bSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBfQmlnTnVtYmVyKHByb2QudG9QcmVjaXNpb24oX0JpZ051bWJlci5wcmVjaXNpb24pKTtcbiAgfVxuXG4gIHJldHVybiBnYW1tYTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVHYW1tYSA9IGNyZWF0ZUdhbW1hOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVLbGRpdmVyZ2VuY2UgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdrbGRpdmVyZ2VuY2UnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2RpdmlkZScsICdzdW0nLCAnbXVsdGlwbHknLCAnZG90RGl2aWRlJywgJ2xvZycsICdpc051bWVyaWMnXTtcbnZhciBjcmVhdGVLbGRpdmVyZ2VuY2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBkaXZpZGUgPSBfcmVmLmRpdmlkZSxcbiAgICAgIHN1bSA9IF9yZWYuc3VtLFxuICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5LFxuICAgICAgZG90RGl2aWRlID0gX3JlZi5kb3REaXZpZGUsXG4gICAgICBsb2cgPSBfcmVmLmxvZyxcbiAgICAgIGlzTnVtZXJpYyA9IF9yZWYuaXNOdW1lcmljO1xuXG4gIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgS3VsbGJhY2stTGVpYmxlciAoS0wpIGRpdmVyZ2VuY2UgIGJldHdlZW4gdHdvIGRpc3RyaWJ1dGlvbnNcbiAgICAgKlxuICAgICAqIFN5bnRheDpcbiAgICAgKlxuICAgICAqICAgICBtYXRoLmtsZGl2ZXJnZW5jZSh4LCB5KVxuICAgICAqXG4gICAgICogRXhhbXBsZXM6XG4gICAgICpcbiAgICAgKiAgICAgbWF0aC5rbGRpdmVyZ2VuY2UoWzAuNywwLjUsMC40XSwgWzAuMiwwLjksMC41XSkgICAvL3JldHVybnMgMC4yNDM3NjY5ODc3MzEyMTE1M1xuICAgICAqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtBcnJheSB8IE1hdHJpeH0gcSAgICBGaXJzdCB2ZWN0b3JcbiAgICAgKiBAcGFyYW0gIHtBcnJheSB8IE1hdHJpeH0gcCAgICBTZWNvbmQgdmVjdG9yXG4gICAgICogQHJldHVybiB7bnVtYmVyfSAgICAgICAgICAgICAgUmV0dXJucyBkaXN0YW5jZSBiZXR3ZWVuIHEgYW5kIHBcbiAgICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheShxLCBwKSB7XG4gICAgICByZXR1cm4gX2tsZGl2KG1hdHJpeChxKSwgbWF0cml4KHApKTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkocSwgcCkge1xuICAgICAgcmV0dXJuIF9rbGRpdihxLCBtYXRyaXgocCkpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeChxLCBwKSB7XG4gICAgICByZXR1cm4gX2tsZGl2KG1hdHJpeChxKSwgcCk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBNYXRyaXgnOiBmdW5jdGlvbiBNYXRyaXhNYXRyaXgocSwgcCkge1xuICAgICAgcmV0dXJuIF9rbGRpdihxLCBwKTtcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIF9rbGRpdihxLCBwKSB7XG4gICAgdmFyIHBsZW5ndGggPSBwLnNpemUoKS5sZW5ndGg7XG4gICAgdmFyIHFsZW5ndGggPSBxLnNpemUoKS5sZW5ndGg7XG5cbiAgICBpZiAocGxlbmd0aCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZmlyc3Qgb2JqZWN0IG11c3QgYmUgb25lIGRpbWVuc2lvbmFsJyk7XG4gICAgfVxuXG4gICAgaWYgKHFsZW5ndGggPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NlY29uZCBvYmplY3QgbXVzdCBiZSBvbmUgZGltZW5zaW9uYWwnKTtcbiAgICB9XG5cbiAgICBpZiAocGxlbmd0aCAhPT0gcWxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdMZW5ndGggb2YgdHdvIHZlY3RvcnMgbXVzdCBiZSBlcXVhbCcpO1xuICAgIH0gLy8gQmVmb3JlIGNhbGN1bGF0aW9uLCBhcHBseSBub3JtYWxpemF0aW9uXG5cblxuICAgIHZhciBzdW1xID0gc3VtKHEpO1xuXG4gICAgaWYgKHN1bXEgPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU3VtIG9mIGVsZW1lbnRzIGluIGZpcnN0IG9iamVjdCBtdXN0IGJlIG5vbiB6ZXJvJyk7XG4gICAgfVxuXG4gICAgdmFyIHN1bXAgPSBzdW0ocCk7XG5cbiAgICBpZiAoc3VtcCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdW0gb2YgZWxlbWVudHMgaW4gc2Vjb25kIG9iamVjdCBtdXN0IGJlIG5vbiB6ZXJvJyk7XG4gICAgfVxuXG4gICAgdmFyIHFub3JtID0gZGl2aWRlKHEsIHN1bShxKSk7XG4gICAgdmFyIHBub3JtID0gZGl2aWRlKHAsIHN1bShwKSk7XG4gICAgdmFyIHJlc3VsdCA9IHN1bShtdWx0aXBseShxbm9ybSwgbG9nKGRvdERpdmlkZShxbm9ybSwgcG5vcm0pKSkpO1xuXG4gICAgaWYgKGlzTnVtZXJpYyhyZXN1bHQpKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gTnVtYmVyLk5hTjtcbiAgICB9XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVLbGRpdmVyZ2VuY2UgPSBjcmVhdGVLbGRpdmVyZ2VuY2U7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU11bHRpbm9taWFsID0gdm9pZCAwO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ211bHRpbm9taWFsJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FkZCcsICdkaXZpZGUnLCAnbXVsdGlwbHknLCAnZmFjdG9yaWFsJywgJ2lzSW50ZWdlcicsICdpc1Bvc2l0aXZlJ107XG52YXIgY3JlYXRlTXVsdGlub21pYWwgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgYWRkID0gX3JlZi5hZGQsXG4gICAgICBkaXZpZGUgPSBfcmVmLmRpdmlkZSxcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSxcbiAgICAgIGZhY3RvcmlhbCA9IF9yZWYuZmFjdG9yaWFsLFxuICAgICAgaXNJbnRlZ2VyID0gX3JlZi5pc0ludGVnZXIsXG4gICAgICBpc1Bvc2l0aXZlID0gX3JlZi5pc1Bvc2l0aXZlO1xuXG4gIC8qKlxuICAgKiBNdWx0aW5vbWlhbCBDb2VmZmljaWVudHMgY29tcHV0ZSB0aGUgbnVtYmVyIG9mIHdheXMgb2YgcGlja2luZyBhMSwgYTIsIC4uLiwgYWkgdW5vcmRlcmVkIG91dGNvbWVzIGZyb20gYG5gIHBvc3NpYmlsaXRpZXMuXG4gICAqXG4gICAqIG11bHRpbm9taWFsIHRha2VzIG9uZSBhcnJheSBvZiBpbnRlZ2VycyBhcyBhbiBhcmd1bWVudC5cbiAgICogVGhlIGZvbGxvd2luZyBjb25kaXRpb24gbXVzdCBiZSBlbmZvcmNlZDogZXZlcnkgYWkgPD0gMFxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLm11bHRpbm9taWFsKGEpIC8vIGEgaXMgYW4gYXJyYXkgdHlwZVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5tdWx0aW5vbWlhbChbMSwyLDFdKSAvLyByZXR1cm5zIDEyXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjb21iaW5hdGlvbnMsIGZhY3RvcmlhbFxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcltdIHwgQmlnTnVtYmVyW119IGEgICAgSW50ZWdlciBudW1iZXJzIG9mIG9iamVjdHMgaW4gdGhlIHN1YnNldFxuICAgKiBAcmV0dXJuIHtOdW1iZXIgfCBCaWdOdW1iZXJ9ICAgICAgICAgTXVsdGlub21pYWwgY29lZmZpY2llbnQuXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KGEpIHtcbiAgICAgIHZhciBzdW0gPSAwO1xuICAgICAgdmFyIGRlbm9tID0gMTtcbiAgICAgICgwLCBfY29sbGVjdGlvbi5kZWVwRm9yRWFjaCkoYSwgZnVuY3Rpb24gKGFpKSB7XG4gICAgICAgIGlmICghaXNJbnRlZ2VyKGFpKSB8fCAhaXNQb3NpdGl2ZShhaSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQb3NpdGl2ZSBpbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIGluIGZ1bmN0aW9uIG11bHRpbm9taWFsJyk7XG4gICAgICAgIH1cblxuICAgICAgICBzdW0gPSBhZGQoc3VtLCBhaSk7XG4gICAgICAgIGRlbm9tID0gbXVsdGlwbHkoZGVub20sIGZhY3RvcmlhbChhaSkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gZGl2aWRlKGZhY3RvcmlhbChzdW0pLCBkZW5vbSk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVNdWx0aW5vbWlhbCA9IGNyZWF0ZU11bHRpbm9taWFsOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVQZXJtdXRhdGlvbnMgPSB2b2lkIDA7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9wcm9kdWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3Byb2R1Y3RcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdwZXJtdXRhdGlvbnMnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnZmFjdG9yaWFsJ107XG52YXIgY3JlYXRlUGVybXV0YXRpb25zID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGZhY3RvcmlhbCA9IF9yZWYuZmFjdG9yaWFsO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBudW1iZXIgb2Ygd2F5cyBvZiBvYnRhaW5pbmcgYW4gb3JkZXJlZCBzdWJzZXQgb2YgYGtgIGVsZW1lbnRzXG4gICAqIGZyb20gYSBzZXQgb2YgYG5gIGVsZW1lbnRzLlxuICAgKlxuICAgKiBQZXJtdXRhdGlvbnMgb25seSB0YWtlcyBpbnRlZ2VyIGFyZ3VtZW50cy5cbiAgICogVGhlIGZvbGxvd2luZyBjb25kaXRpb24gbXVzdCBiZSBlbmZvcmNlZDogayA8PSBuLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLnBlcm11dGF0aW9ucyhuKVxuICAgKiAgICAgbWF0aC5wZXJtdXRhdGlvbnMobiwgaylcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgucGVybXV0YXRpb25zKDUpICAgICAvLyAxMjBcbiAgICogICAgbWF0aC5wZXJtdXRhdGlvbnMoNSwgMykgIC8vIDYwXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjb21iaW5hdGlvbnMsIGNvbWJpbmF0aW9uc1dpdGhSZXAsIGZhY3RvcmlhbFxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlcn0gbiAgIFRoZSBudW1iZXIgb2Ygb2JqZWN0cyBpbiB0b3RhbFxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlcn0gW2tdIFRoZSBudW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgc3Vic2V0XG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlcn0gICAgVGhlIG51bWJlciBvZiBwZXJtdXRhdGlvbnNcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciB8IEJpZ051bWJlcic6IGZhY3RvcmlhbCxcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIobiwgaykge1xuICAgICAgaWYgKCEoMCwgX251bWJlci5pc0ludGVnZXIpKG4pIHx8IG4gPCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Bvc2l0aXZlIGludGVnZXIgdmFsdWUgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gcGVybXV0YXRpb25zJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShrKSB8fCBrIDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQb3NpdGl2ZSBpbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIGluIGZ1bmN0aW9uIHBlcm11dGF0aW9ucycpO1xuICAgICAgfVxuXG4gICAgICBpZiAoayA+IG4pIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc2Vjb25kIGFyZ3VtZW50IGsgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gZmlyc3QgYXJndW1lbnQgbicpO1xuICAgICAgfSAvLyBQZXJtdXRlIG4gb2JqZWN0cywgayBhdCBhIHRpbWVcblxuXG4gICAgICByZXR1cm4gKDAsIF9wcm9kdWN0LnByb2R1Y3QpKG4gLSBrICsgMSwgbik7XG4gICAgfSxcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIobiwgaykge1xuICAgICAgdmFyIHJlc3VsdCwgaTtcblxuICAgICAgaWYgKCFpc1Bvc2l0aXZlSW50ZWdlcihuKSB8fCAhaXNQb3NpdGl2ZUludGVnZXIoaykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUG9zaXRpdmUgaW50ZWdlciB2YWx1ZSBleHBlY3RlZCBpbiBmdW5jdGlvbiBwZXJtdXRhdGlvbnMnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGsuZ3QobikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc2Vjb25kIGFyZ3VtZW50IGsgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gZmlyc3QgYXJndW1lbnQgbicpO1xuICAgICAgfVxuXG4gICAgICB2YXIgb25lID0gbi5tdWwoMCkuYWRkKDEpO1xuICAgICAgcmVzdWx0ID0gb25lO1xuXG4gICAgICBmb3IgKGkgPSBuLm1pbnVzKGspLnBsdXMoMSk7IGkubHRlKG4pOyBpID0gaS5wbHVzKDEpKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC50aW1lcyhpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IC8vIFRPRE86IGltcGxlbWVudCBzdXBwb3J0IGZvciBjb2xsZWN0aW9uIGluIHBlcm11dGF0aW9uc1xuXG4gIH0pO1xufSk7XG4vKipcbiAqIFRlc3Qgd2hldGhlciBCaWdOdW1iZXIgbiBpcyBhIHBvc2l0aXZlIGludGVnZXJcbiAqIEBwYXJhbSB7QmlnTnVtYmVyfSBuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gaXNQb3NpdGl2ZUludGVnZXJcbiAqL1xuXG5leHBvcnRzLmNyZWF0ZVBlcm11dGF0aW9ucyA9IGNyZWF0ZVBlcm11dGF0aW9ucztcblxuZnVuY3Rpb24gaXNQb3NpdGl2ZUludGVnZXIobikge1xuICByZXR1cm4gbi5pc0ludGVnZXIoKSAmJiBuLmd0ZSgwKTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUGlja1JhbmRvbSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfc2VlZGVkUk5HID0gcmVxdWlyZShcIi4vdXRpbC9zZWVkZWRSTkdcIik7XG5cbnZhciBuYW1lID0gJ3BpY2tSYW5kb20nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJz9vbiddO1xudmFyIGNyZWF0ZVBpY2tSYW5kb20gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBvbiA9IF9yZWYub247XG4gIC8vIHNlZWRlZCBwc2V1ZG8gcmFuZG9tIG51bWJlciBnZW5lcmF0b3JcbiAgdmFyIHJuZyA9ICgwLCBfc2VlZGVkUk5HLmNyZWF0ZVJuZykoY29uZmlnLnJhbmRvbVNlZWQpO1xuXG4gIGlmIChvbikge1xuICAgIG9uKCdjb25maWcnLCBmdW5jdGlvbiAoY3VyciwgcHJldikge1xuICAgICAgaWYgKGN1cnIucmFuZG9tU2VlZCAhPT0gcHJldi5yYW5kb21TZWVkKSB7XG4gICAgICAgIHJuZyA9ICgwLCBfc2VlZGVkUk5HLmNyZWF0ZVJuZykoY3Vyci5yYW5kb21TZWVkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogUmFuZG9tIHBpY2sgb25lIG9yIG1vcmUgdmFsdWVzIGZyb20gYSBvbmUgZGltZW5zaW9uYWwgYXJyYXkuXG4gICAqIEFycmF5IGVsZW1lbnRzIGFyZSBwaWNrZWQgdXNpbmcgYSByYW5kb20gZnVuY3Rpb24gd2l0aCB1bmlmb3JtIG9yIHdlaWdodGVkIGRpc3RyaWJ1dGlvbi5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5waWNrUmFuZG9tKGFycmF5KVxuICAgKiAgICAgbWF0aC5waWNrUmFuZG9tKGFycmF5LCBudW1iZXIpXG4gICAqICAgICBtYXRoLnBpY2tSYW5kb20oYXJyYXksIHdlaWdodHMpXG4gICAqICAgICBtYXRoLnBpY2tSYW5kb20oYXJyYXksIG51bWJlciwgd2VpZ2h0cylcbiAgICogICAgIG1hdGgucGlja1JhbmRvbShhcnJheSwgd2VpZ2h0cywgbnVtYmVyKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGgucGlja1JhbmRvbShbMywgNiwgMTIsIDJdKSAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgb25lIG9mIHRoZSB2YWx1ZXMgaW4gdGhlIGFycmF5XG4gICAqICAgICBtYXRoLnBpY2tSYW5kb20oWzMsIDYsIDEyLCAyXSwgMikgICAgICAgICAgICAgICAvLyByZXR1cm5zIGFuIGFycmF5IG9mIHR3byBvZiB0aGUgdmFsdWVzIGluIHRoZSBhcnJheVxuICAgKiAgICAgbWF0aC5waWNrUmFuZG9tKFszLCA2LCAxMiwgMl0sIFsxLCAzLCAyLCAxXSkgICAgLy8gcmV0dXJucyBvbmUgb2YgdGhlIHZhbHVlcyBpbiB0aGUgYXJyYXkgd2l0aCB3ZWlnaHRlZCBkaXN0cmlidXRpb25cbiAgICogICAgIG1hdGgucGlja1JhbmRvbShbMywgNiwgMTIsIDJdLCAyLCBbMSwgMywgMiwgMV0pIC8vIHJldHVybnMgYW4gYXJyYXkgb2YgdHdvIG9mIHRoZSB2YWx1ZXMgaW4gdGhlIGFycmF5IHdpdGggd2VpZ2h0ZWQgZGlzdHJpYnV0aW9uXG4gICAqICAgICBtYXRoLnBpY2tSYW5kb20oWzMsIDYsIDEyLCAyXSwgWzEsIDMsIDIsIDFdLCAyKSAvLyByZXR1cm5zIGFuIGFycmF5IG9mIHR3byBvZiB0aGUgdmFsdWVzIGluIHRoZSBhcnJheSB3aXRoIHdlaWdodGVkIGRpc3RyaWJ1dGlvblxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgIHJhbmRvbSwgcmFuZG9tSW50XG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IGFycmF5ICAgICBBIG9uZSBkaW1lbnNpb25hbCBhcnJheVxuICAgKiBAcGFyYW0ge0ludH0gbnVtYmVyICAgICAgICAgICAgICAgQW4gaW50IG9yIGZsb2F0XG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IHdlaWdodHMgICBBbiBhcnJheSBvZiBpbnRzIG9yIGZsb2F0c1xuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBBcnJheX0gICAgICAgICAgUmV0dXJucyBhIHNpbmdsZSByYW5kb20gdmFsdWUgZnJvbSBhcnJheSB3aGVuIG51bWJlciBpcyAxIG9yIHVuZGVmaW5lZC5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJldHVybnMgYW4gYXJyYXkgd2l0aCB0aGUgY29uZmlndXJlZCBudW1iZXIgb2YgZWxlbWVudHMgd2hlbiBudW1iZXIgaXMgPiAxLlxuICAgKi9cblxuXG4gIHJldHVybiB0eXBlZCh7XG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgocG9zc2libGVzKSB7XG4gICAgICByZXR1cm4gX3BpY2tSYW5kb20ocG9zc2libGVzKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhOdW1iZXIocG9zc2libGVzLCBudW1iZXIpIHtcbiAgICAgIHJldHVybiBfcGlja1JhbmRvbShwb3NzaWJsZXMsIG51bWJlciwgdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBBcnJheU1hdHJpeEFycmF5KHBvc3NpYmxlcywgd2VpZ2h0cykge1xuICAgICAgcmV0dXJuIF9waWNrUmFuZG9tKHBvc3NpYmxlcywgdW5kZWZpbmVkLCB3ZWlnaHRzKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCwgQXJyYXkgfCBNYXRyaXgsIG51bWJlcic6IGZ1bmN0aW9uIEFycmF5TWF0cml4QXJyYXlNYXRyaXhOdW1iZXIocG9zc2libGVzLCB3ZWlnaHRzLCBudW1iZXIpIHtcbiAgICAgIHJldHVybiBfcGlja1JhbmRvbShwb3NzaWJsZXMsIG51bWJlciwgd2VpZ2h0cyk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgsIG51bWJlciwgQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeE51bWJlckFycmF5TWF0cml4KHBvc3NpYmxlcywgbnVtYmVyLCB3ZWlnaHRzKSB7XG4gICAgICByZXR1cm4gX3BpY2tSYW5kb20ocG9zc2libGVzLCBudW1iZXIsIHdlaWdodHMpO1xuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gX3BpY2tSYW5kb20ocG9zc2libGVzLCBudW1iZXIsIHdlaWdodHMpIHtcbiAgICB2YXIgc2luZ2xlID0gdHlwZW9mIG51bWJlciA9PT0gJ3VuZGVmaW5lZCc7XG5cbiAgICBpZiAoc2luZ2xlKSB7XG4gICAgICBudW1iZXIgPSAxO1xuICAgIH1cblxuICAgIHBvc3NpYmxlcyA9IHBvc3NpYmxlcy52YWx1ZU9mKCk7IC8vIGdldCBBcnJheVxuXG4gICAgaWYgKHdlaWdodHMpIHtcbiAgICAgIHdlaWdodHMgPSB3ZWlnaHRzLnZhbHVlT2YoKTsgLy8gZ2V0IEFycmF5XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfYXJyYXkuYXJyYXlTaXplKShwb3NzaWJsZXMpLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT25seSBvbmUgZGltZW5zaW9uYWwgdmVjdG9ycyBzdXBwb3J0ZWQnKTtcbiAgICB9XG5cbiAgICB2YXIgdG90YWxXZWlnaHRzID0gMDtcblxuICAgIGlmICh0eXBlb2Ygd2VpZ2h0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmICh3ZWlnaHRzLmxlbmd0aCAhPT0gcG9zc2libGVzLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dlaWdodHMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aCBhcyBwb3NzaWJsZXMnKTtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHdlaWdodHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgaWYgKCEoMCwgX2lzLmlzTnVtYmVyKSh3ZWlnaHRzW2ldKSB8fCB3ZWlnaHRzW2ldIDwgMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignV2VpZ2h0cyBtdXN0IGJlIGFuIGFycmF5IG9mIHBvc2l0aXZlIG51bWJlcnMnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRvdGFsV2VpZ2h0cyArPSB3ZWlnaHRzW2ldO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBsZW5ndGggPSBwb3NzaWJsZXMubGVuZ3RoO1xuXG4gICAgaWYgKGxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH0gZWxzZSBpZiAobnVtYmVyID49IGxlbmd0aCkge1xuICAgICAgcmV0dXJuIG51bWJlciA+IDEgPyBwb3NzaWJsZXMgOiBwb3NzaWJsZXNbMF07XG4gICAgfVxuXG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBwaWNrO1xuXG4gICAgd2hpbGUgKHJlc3VsdC5sZW5ndGggPCBudW1iZXIpIHtcbiAgICAgIGlmICh0eXBlb2Ygd2VpZ2h0cyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcGljayA9IHBvc3NpYmxlc1tNYXRoLmZsb29yKHJuZygpICogbGVuZ3RoKV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmFuZEtleSA9IHJuZygpICogdG90YWxXZWlnaHRzO1xuXG4gICAgICAgIGZvciAodmFyIF9pID0gMCwgX2xlbiA9IHBvc3NpYmxlcy5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykge1xuICAgICAgICAgIHJhbmRLZXkgLT0gd2VpZ2h0c1tfaV07XG5cbiAgICAgICAgICBpZiAocmFuZEtleSA8IDApIHtcbiAgICAgICAgICAgIHBpY2sgPSBwb3NzaWJsZXNbX2ldO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXN1bHQuaW5kZXhPZihwaWNrKSA9PT0gLTEpIHtcbiAgICAgICAgcmVzdWx0LnB1c2gocGljayk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNpbmdsZSA/IHJlc3VsdFswXSA6IHJlc3VsdDsgLy8gVE9ETzogcmV0dXJuIG1hdHJpeCB3aGVuIGlucHV0IHdhcyBhIG1hdHJpeFxuICAgIC8vIFRPRE86IGFkZCBzdXBwb3J0IGZvciBtdWx0aSBkaW1lbnNpb25hbCBtYXRyaWNlc1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlUGlja1JhbmRvbSA9IGNyZWF0ZVBpY2tSYW5kb207IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJhbmRvbU51bWJlciA9IGV4cG9ydHMuY3JlYXRlUmFuZG9tID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9zZWVkZWRSTkcgPSByZXF1aXJlKFwiLi91dGlsL3NlZWRlZFJOR1wiKTtcblxudmFyIF9yYW5kb21NYXRyaXgyID0gcmVxdWlyZShcIi4vdXRpbC9yYW5kb21NYXRyaXhcIik7XG5cbnZhciBuYW1lID0gJ3JhbmRvbSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnP29uJ107XG52YXIgY3JlYXRlUmFuZG9tID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgb24gPSBfcmVmLm9uO1xuICAvLyBzZWVkZWQgcHNldWRvIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yXG4gIHZhciBybmcgPSAoMCwgX3NlZWRlZFJORy5jcmVhdGVSbmcpKGNvbmZpZy5yYW5kb21TZWVkKTtcblxuICBpZiAob24pIHtcbiAgICBvbignY29uZmlnJywgZnVuY3Rpb24gKGN1cnIsIHByZXYpIHtcbiAgICAgIGlmIChjdXJyLnJhbmRvbVNlZWQgIT09IHByZXYucmFuZG9tU2VlZCkge1xuICAgICAgICBybmcgPSAoMCwgX3NlZWRlZFJORy5jcmVhdGVSbmcpKGN1cnIucmFuZG9tU2VlZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybiBhIHJhbmRvbSBudW1iZXIgbGFyZ2VyIG9yIGVxdWFsIHRvIGBtaW5gIGFuZCBzbWFsbGVyIHRoYW4gYG1heGBcbiAgICogdXNpbmcgYSB1bmlmb3JtIGRpc3RyaWJ1dGlvbi5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5yYW5kb20oKSAgICAgICAgICAgICAgICAvLyBnZW5lcmF0ZSBhIHJhbmRvbSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxXG4gICAqICAgICBtYXRoLnJhbmRvbShtYXgpICAgICAgICAgICAgIC8vIGdlbmVyYXRlIGEgcmFuZG9tIG51bWJlciBiZXR3ZWVuIDAgYW5kIG1heFxuICAgKiAgICAgbWF0aC5yYW5kb20obWluLCBtYXgpICAgICAgICAvLyBnZW5lcmF0ZSBhIHJhbmRvbSBudW1iZXIgYmV0d2VlbiBtaW4gYW5kIG1heFxuICAgKiAgICAgbWF0aC5yYW5kb20oc2l6ZSkgICAgICAgICAgICAvLyBnZW5lcmF0ZSBhIG1hdHJpeCB3aXRoIHJhbmRvbSBudW1iZXJzIGJldHdlZW4gMCBhbmQgMVxuICAgKiAgICAgbWF0aC5yYW5kb20oc2l6ZSwgbWF4KSAgICAgICAvLyBnZW5lcmF0ZSBhIG1hdHJpeCB3aXRoIHJhbmRvbSBudW1iZXJzIGJldHdlZW4gMCBhbmQgbWF4XG4gICAqICAgICBtYXRoLnJhbmRvbShzaXplLCBtaW4sIG1heCkgIC8vIGdlbmVyYXRlIGEgbWF0cml4IHdpdGggcmFuZG9tIG51bWJlcnMgYmV0d2VlbiBtaW4gYW5kIG1heFxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGgucmFuZG9tKCkgICAgICAgLy8gcmV0dXJucyBhIHJhbmRvbSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxXG4gICAqICAgICBtYXRoLnJhbmRvbSgxMDApICAgIC8vIHJldHVybnMgYSByYW5kb20gbnVtYmVyIGJldHdlZW4gMCBhbmQgMTAwXG4gICAqICAgICBtYXRoLnJhbmRvbSgzMCwgNDApIC8vIHJldHVybnMgYSByYW5kb20gbnVtYmVyIGJldHdlZW4gMzAgYW5kIDQwXG4gICAqICAgICBtYXRoLnJhbmRvbShbMiwgM10pIC8vIHJldHVybnMgYSAyeDMgbWF0cml4IHdpdGggcmFuZG9tIG51bWJlcnMgYmV0d2VlbiAwIGFuZCAxXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgcmFuZG9tSW50LCBwaWNrUmFuZG9tXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IFtzaXplXSBJZiBwcm92aWRlZCwgYW4gYXJyYXkgb3IgbWF0cml4IHdpdGggZ2l2ZW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgYW5kIGZpbGxlZCB3aXRoIHJhbmRvbSB2YWx1ZXMgaXMgcmV0dXJuZWRcbiAgICogQHBhcmFtIHtudW1iZXJ9IFttaW5dICBNaW5pbXVtIGJvdW5kYXJ5IGZvciB0aGUgcmFuZG9tIHZhbHVlLCBpbmNsdWRlZFxuICAgKiBAcGFyYW0ge251bWJlcn0gW21heF0gIE1heGltdW0gYm91bmRhcnkgZm9yIHRoZSByYW5kb20gdmFsdWUsIGV4Y2x1ZGVkXG4gICAqIEByZXR1cm4ge251bWJlciB8IEFycmF5IHwgTWF0cml4fSBBIHJhbmRvbSBudW1iZXJcbiAgICovXG5cblxuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICcnOiBmdW5jdGlvbiBfKCkge1xuICAgICAgcmV0dXJuIF9yYW5kb20oMCwgMSk7XG4gICAgfSxcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcihtYXgpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tKDAsIG1heCk7XG4gICAgfSxcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIobWluLCBtYXgpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tKG1pbiwgbWF4KTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHNpemUpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tTWF0cml4KHNpemUsIDAsIDEpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4LCBudW1iZXInOiBmdW5jdGlvbiBBcnJheU1hdHJpeE51bWJlcihzaXplLCBtYXgpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tTWF0cml4KHNpemUsIDAsIG1heCk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgsIG51bWJlciwgbnVtYmVyJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhOdW1iZXJOdW1iZXIoc2l6ZSwgbWluLCBtYXgpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tTWF0cml4KHNpemUsIG1pbiwgbWF4KTtcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIF9yYW5kb21NYXRyaXgoc2l6ZSwgbWluLCBtYXgpIHtcbiAgICB2YXIgcmVzID0gKDAsIF9yYW5kb21NYXRyaXgyLnJhbmRvbU1hdHJpeCkoc2l6ZS52YWx1ZU9mKCksIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tKG1pbiwgbWF4KTtcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIF9pcy5pc01hdHJpeCkoc2l6ZSkgPyBzaXplLmNyZWF0ZShyZXMpIDogcmVzO1xuICB9XG5cbiAgZnVuY3Rpb24gX3JhbmRvbShtaW4sIG1heCkge1xuICAgIHJldHVybiBtaW4gKyBybmcoKSAqIChtYXggLSBtaW4pO1xuICB9XG59KTsgLy8gbnVtYmVyIG9ubHkgaW1wbGVtZW50YXRpb24gb2YgcmFuZG9tLCBubyBtYXRyaXggc3VwcG9ydFxuLy8gVE9ETzogdGhlcmUgaXMgcXVpdGUgc29tZSBkdXBsaWNhdGUgY29kZSBpbiBib3RoIGNyZWF0ZVJhbmRvbSBhbmQgY3JlYXRlUmFuZG9tTnVtYmVyLCBjYW4gd2UgaW1wcm92ZSB0aGF0P1xuXG5leHBvcnRzLmNyZWF0ZVJhbmRvbSA9IGNyZWF0ZVJhbmRvbTtcbnZhciBjcmVhdGVSYW5kb21OdW1iZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgWyd0eXBlZCcsICdjb25maWcnLCAnP29uJ10sIGZ1bmN0aW9uIChfcmVmMikge1xuICB2YXIgdHlwZWQgPSBfcmVmMi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYyLmNvbmZpZyxcbiAgICAgIG9uID0gX3JlZjIub24sXG4gICAgICBtYXRyaXggPSBfcmVmMi5tYXRyaXg7XG4gIC8vIHNlZWRlZCBwc2V1ZG8gcmFuZG9tIG51bWJlciBnZW5lcmF0b3IxXG4gIHZhciBybmcgPSAoMCwgX3NlZWRlZFJORy5jcmVhdGVSbmcpKGNvbmZpZy5yYW5kb21TZWVkKTtcblxuICBpZiAob24pIHtcbiAgICBvbignY29uZmlnJywgZnVuY3Rpb24gKGN1cnIsIHByZXYpIHtcbiAgICAgIGlmIChjdXJyLnJhbmRvbVNlZWQgIT09IHByZXYucmFuZG9tU2VlZCkge1xuICAgICAgICBybmcgPSAoMCwgX3NlZWRlZFJORy5jcmVhdGVSbmcpKGN1cnIucmFuZG9tU2VlZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICcnOiBmdW5jdGlvbiBfKCkge1xuICAgICAgcmV0dXJuIF9yYW5kb20oMCwgMSk7XG4gICAgfSxcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcihtYXgpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tKDAsIG1heCk7XG4gICAgfSxcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIobWluLCBtYXgpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tKG1pbiwgbWF4KTtcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIF9yYW5kb20obWluLCBtYXgpIHtcbiAgICByZXR1cm4gbWluICsgcm5nKCkgKiAobWF4IC0gbWluKTtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZVJhbmRvbU51bWJlciA9IGNyZWF0ZVJhbmRvbU51bWJlcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUmFuZG9tSW50ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9yYW5kb21NYXRyaXggPSByZXF1aXJlKFwiLi91dGlsL3JhbmRvbU1hdHJpeFwiKTtcblxudmFyIF9zZWVkZWRSTkcgPSByZXF1aXJlKFwiLi91dGlsL3NlZWRlZFJOR1wiKTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIG5hbWUgPSAncmFuZG9tSW50JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICc/b24nXTtcbnZhciBjcmVhdGVSYW5kb21JbnQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBvbiA9IF9yZWYub247XG4gIC8vIHNlZWRlZCBwc2V1ZG8gcmFuZG9tIG51bWJlciBnZW5lcmF0b3JcbiAgdmFyIHJuZyA9ICgwLCBfc2VlZGVkUk5HLmNyZWF0ZVJuZykoY29uZmlnLnJhbmRvbVNlZWQpO1xuXG4gIGlmIChvbikge1xuICAgIG9uKCdjb25maWcnLCBmdW5jdGlvbiAoY3VyciwgcHJldikge1xuICAgICAgaWYgKGN1cnIucmFuZG9tU2VlZCAhPT0gcHJldi5yYW5kb21TZWVkKSB7XG4gICAgICAgIHJuZyA9ICgwLCBfc2VlZGVkUk5HLmNyZWF0ZVJuZykoY3Vyci5yYW5kb21TZWVkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJuIGEgcmFuZG9tIGludGVnZXIgbnVtYmVyIGxhcmdlciBvciBlcXVhbCB0byBgbWluYCBhbmQgc21hbGxlciB0aGFuIGBtYXhgXG4gICAqIHVzaW5nIGEgdW5pZm9ybSBkaXN0cmlidXRpb24uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGgucmFuZG9tSW50KCkgICAgICAgICAgICAgICAgLy8gZ2VuZXJhdGUgYSByYW5kb20gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDFcbiAgICogICAgIG1hdGgucmFuZG9tSW50KG1heCkgICAgICAgICAgICAgLy8gZ2VuZXJhdGUgYSByYW5kb20gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIG1heFxuICAgKiAgICAgbWF0aC5yYW5kb21JbnQobWluLCBtYXgpICAgICAgICAvLyBnZW5lcmF0ZSBhIHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gbWluIGFuZCBtYXhcbiAgICogICAgIG1hdGgucmFuZG9tSW50KHNpemUpICAgICAgICAgICAgLy8gZ2VuZXJhdGUgYSBtYXRyaXggd2l0aCByYW5kb20gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDFcbiAgICogICAgIG1hdGgucmFuZG9tSW50KHNpemUsIG1heCkgICAgICAgLy8gZ2VuZXJhdGUgYSBtYXRyaXggd2l0aCByYW5kb20gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIG1heFxuICAgKiAgICAgbWF0aC5yYW5kb21JbnQoc2l6ZSwgbWluLCBtYXgpICAvLyBnZW5lcmF0ZSBhIG1hdHJpeCB3aXRoIHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gbWluIGFuZCBtYXhcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLnJhbmRvbUludCgxMDApICAgIC8vIHJldHVybnMgYSByYW5kb20gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDEwMFxuICAgKiAgICAgbWF0aC5yYW5kb21JbnQoMzAsIDQwKSAvLyByZXR1cm5zIGEgcmFuZG9tIGludGVnZXIgYmV0d2VlbiAzMCBhbmQgNDBcbiAgICogICAgIG1hdGgucmFuZG9tSW50KFsyLCAzXSkgLy8gcmV0dXJucyBhIDJ4MyBtYXRyaXggd2l0aCByYW5kb20gaW50ZWdlcnMgYmV0d2VlbiAwIGFuZCAxXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgcmFuZG9tLCBwaWNrUmFuZG9tXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IFtzaXplXSBJZiBwcm92aWRlZCwgYW4gYXJyYXkgb3IgbWF0cml4IHdpdGggZ2l2ZW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgYW5kIGZpbGxlZCB3aXRoIHJhbmRvbSB2YWx1ZXMgaXMgcmV0dXJuZWRcbiAgICogQHBhcmFtIHtudW1iZXJ9IFttaW5dICBNaW5pbXVtIGJvdW5kYXJ5IGZvciB0aGUgcmFuZG9tIHZhbHVlLCBpbmNsdWRlZFxuICAgKiBAcGFyYW0ge251bWJlcn0gW21heF0gIE1heGltdW0gYm91bmRhcnkgZm9yIHRoZSByYW5kb20gdmFsdWUsIGV4Y2x1ZGVkXG4gICAqIEByZXR1cm4ge251bWJlciB8IEFycmF5IHwgTWF0cml4fSBBIHJhbmRvbSBpbnRlZ2VyIHZhbHVlXG4gICAqL1xuXG5cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnJzogZnVuY3Rpb24gXygpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tSW50KDAsIDEpO1xuICAgIH0sXG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIobWF4KSB7XG4gICAgICByZXR1cm4gX3JhbmRvbUludCgwLCBtYXgpO1xuICAgIH0sXG4gICAgJ251bWJlciwgbnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyTnVtYmVyKG1pbiwgbWF4KSB7XG4gICAgICByZXR1cm4gX3JhbmRvbUludChtaW4sIG1heCk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeChzaXplKSB7XG4gICAgICByZXR1cm4gX3JhbmRvbUludE1hdHJpeChzaXplLCAwLCAxKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhOdW1iZXIoc2l6ZSwgbWF4KSB7XG4gICAgICByZXR1cm4gX3JhbmRvbUludE1hdHJpeChzaXplLCAwLCBtYXgpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4LCBudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIEFycmF5TWF0cml4TnVtYmVyTnVtYmVyKHNpemUsIG1pbiwgbWF4KSB7XG4gICAgICByZXR1cm4gX3JhbmRvbUludE1hdHJpeChzaXplLCBtaW4sIG1heCk7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBfcmFuZG9tSW50TWF0cml4KHNpemUsIG1pbiwgbWF4KSB7XG4gICAgdmFyIHJlcyA9ICgwLCBfcmFuZG9tTWF0cml4LnJhbmRvbU1hdHJpeCkoc2l6ZS52YWx1ZU9mKCksIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tSW50KG1pbiwgbWF4KTtcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIF9pcy5pc01hdHJpeCkoc2l6ZSkgPyBzaXplLmNyZWF0ZShyZXMpIDogcmVzO1xuICB9XG5cbiAgZnVuY3Rpb24gX3JhbmRvbUludChtaW4sIG1heCkge1xuICAgIHJldHVybiBNYXRoLmZsb29yKG1pbiArIHJuZygpICogKG1heCAtIG1pbikpO1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlUmFuZG9tSW50ID0gY3JlYXRlUmFuZG9tSW50OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yYW5kb21NYXRyaXggPSByYW5kb21NYXRyaXg7XG5cbi8qKlxuICogVGhpcyBpcyBhIHV0aWwgZnVuY3Rpb24gZm9yIGdlbmVyYXRpbmcgYSByYW5kb20gbWF0cml4IHJlY3Vyc2l2ZWx5LlxuICogQHBhcmFtIHtudW1iZXJbXX0gc2l6ZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gcmFuZG9tXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbmZ1bmN0aW9uIHJhbmRvbU1hdHJpeChzaXplLCByYW5kb20pIHtcbiAgdmFyIGRhdGEgPSBbXTtcbiAgc2l6ZSA9IHNpemUuc2xpY2UoMCk7XG5cbiAgaWYgKHNpemUubGVuZ3RoID4gMSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBzaXplLnNoaWZ0KCk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgZGF0YS5wdXNoKHJhbmRvbU1hdHJpeChzaXplLCByYW5kb20pKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgX2kgPSAwLCBfbGVuZ3RoID0gc2l6ZS5zaGlmdCgpOyBfaSA8IF9sZW5ndGg7IF9pKyspIHtcbiAgICAgIGRhdGEucHVzaChyYW5kb20oKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRhdGE7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJuZyA9IGNyZWF0ZVJuZztcblxudmFyIF9zZWVkUmFuZG9tID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwic2VlZC1yYW5kb21cIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuLy8gY3JlYXRlIGEgcmFuZG9tIHNlZWQgaGVyZSB0byBwcmV2ZW50IGFuIGluZmluaXRlIGxvb3AgZnJvbSBzZWVkLXJhbmRvbVxuLy8gaW5zaWRlIHRoZSBmYWN0b3J5LiBSZWFzb24gaXMgdGhhdCBtYXRoLnJhbmRvbSBpcyBkZWZpbmVkIGFzIGEgZ2V0dGVyL3NldHRlclxuLy8gYW5kIHNlZWQtcmFuZG9tIGdlbmVyYXRlcyBhIHNlZWQgZnJvbSB0aGUgbG9jYWwgZW50cm9weSBieSByZWFkaW5nIGV2ZXJ5XG4vLyBkZWZpbmVkIG9iamVjdCBpbmNsdWRpbmcgYG1hdGhgIGl0c2VsZi4gVGhhdCBtZWFucyB0aGF0IHdoaWxzdCBnZXR0aW5nXG4vLyBtYXRoLnJhbmRvbSwgaXQgdHJpZXMgdG8gZ2V0IG1hdGgucmFuZG9tLCBldGMuLi4gYW4gaW5maW5pdGUgbG9vcC5cbi8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vRm9yYmVzTGluZGVzYXkvc2VlZC1yYW5kb20vaXNzdWVzLzZcbnZhciBzaW5nbGV0b25SYW5kb20gPSAvKiAjX19QVVJFX18gKi8oMCwgX3NlZWRSYW5kb21bXCJkZWZhdWx0XCJdKSgpO1xuXG5mdW5jdGlvbiBjcmVhdGVSbmcocmFuZG9tU2VlZCkge1xuICB2YXIgcmFuZG9tOyAvLyBjcmVhdGUgYSBuZXcgcmFuZG9tIGdlbmVyYXRvciB3aXRoIGdpdmVuIHNlZWRcblxuICBmdW5jdGlvbiBzZXRTZWVkKHNlZWQpIHtcbiAgICByYW5kb20gPSBzZWVkID09PSBudWxsID8gc2luZ2xldG9uUmFuZG9tIDogKDAsIF9zZWVkUmFuZG9tW1wiZGVmYXVsdFwiXSkoU3RyaW5nKHNlZWQpKTtcbiAgfSAvLyBpbml0aWFsaXplIGEgc2VlZGVkIHBzZXVkbyByYW5kb20gbnVtYmVyIGdlbmVyYXRvciB3aXRoIGNvbmZpZydzIHJhbmRvbSBzZWVkXG5cblxuICBzZXRTZWVkKHJhbmRvbVNlZWQpOyAvLyB3cmFwcGVyIGZ1bmN0aW9uIHNvIHRoZSBybmcgY2FuIGJlIHVwZGF0ZWQgdmlhIGdlbmVyYXRvclxuXG4gIGZ1bmN0aW9uIHJuZygpIHtcbiAgICByZXR1cm4gcmFuZG9tKCk7XG4gIH1cblxuICByZXR1cm4gcm5nO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb21wYXJlTnVtYmVyID0gZXhwb3J0cy5jcmVhdGVDb21wYXJlID0gdm9pZCAwO1xuXG52YXIgX25lYXJseUVxdWFsID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2JpZ251bWJlci9uZWFybHlFcXVhbFwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDNcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMlwiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgX2FsZ29yaXRobTQgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wNVwiKTtcblxudmFyIG5hbWUgPSAnY29tcGFyZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnbWF0cml4JywgJ2VxdWFsU2NhbGFyJywgJ0JpZ051bWJlcicsICdGcmFjdGlvbicsICdEZW5zZU1hdHJpeCddO1xudmFyIGNyZWF0ZUNvbXBhcmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIEJpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyLFxuICAgICAgRnJhY3Rpb24gPSBfcmVmLkZyYWN0aW9uLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMDMgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTA1ID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTA1KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEyID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTEyKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEzID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTEzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTMuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBDb21wYXJlIHR3byB2YWx1ZXMuIFJldHVybnMgMSB3aGVuIHggPiB5LCAtMSB3aGVuIHggPCB5LCBhbmQgMCB3aGVuIHggPT0geS5cbiAgICpcbiAgICogeCBhbmQgeSBhcmUgY29uc2lkZXJlZCBlcXVhbCB3aGVuIHRoZSByZWxhdGl2ZSBkaWZmZXJlbmNlIGJldHdlZW4geCBhbmQgeVxuICAgKiBpcyBzbWFsbGVyIHRoYW4gdGhlIGNvbmZpZ3VyZWQgZXBzaWxvbi4gVGhlIGZ1bmN0aW9uIGNhbm5vdCBiZSB1c2VkIHRvXG4gICAqIGNvbXBhcmUgdmFsdWVzIHNtYWxsZXIgdGhhbiBhcHByb3hpbWF0ZWx5IDIuMjJlLTE2LlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKiBTdHJpbmdzIGFyZSBjb21wYXJlZCBieSB0aGVpciBudW1lcmljYWwgdmFsdWUuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5jb21wYXJlKHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmNvbXBhcmUoNiwgMSkgICAgICAgICAgIC8vIHJldHVybnMgMVxuICAgKiAgICBtYXRoLmNvbXBhcmUoMiwgMykgICAgICAgICAgIC8vIHJldHVybnMgLTFcbiAgICogICAgbWF0aC5jb21wYXJlKDcsIDcpICAgICAgICAgICAvLyByZXR1cm5zIDBcbiAgICogICAgbWF0aC5jb21wYXJlKCcxMCcsICcyJykgICAgICAvLyByZXR1cm5zIDFcbiAgICogICAgbWF0aC5jb21wYXJlKCcxMDAwJywgJzFlMycpICAvLyByZXR1cm5zIDBcbiAgICpcbiAgICogICAgY29uc3QgYSA9IG1hdGgudW5pdCgnNSBjbScpXG4gICAqICAgIGNvbnN0IGIgPSBtYXRoLnVuaXQoJzQwIG1tJylcbiAgICogICAgbWF0aC5jb21wYXJlKGEsIGIpICAgICAgICAgICAvLyByZXR1cm5zIDFcbiAgICpcbiAgICogICAgbWF0aC5jb21wYXJlKDIsIFsxLCAyLCAzXSkgICAvLyByZXR1cm5zIFsxLCAwLCAtMV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGVxdWFsLCB1bmVxdWFsLCBzbWFsbGVyLCBzbWFsbGVyRXEsIGxhcmdlciwgbGFyZ2VyRXEsIGNvbXBhcmVOYXR1cmFsLCBjb21wYXJlVGV4dFxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IFVuaXQgfCBzdHJpbmcgfCBBcnJheSB8IE1hdHJpeH0geCBGaXJzdCB2YWx1ZSB0byBjb21wYXJlXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgVW5pdCB8IHN0cmluZyB8IEFycmF5IHwgTWF0cml4fSB5IFNlY29uZCB2YWx1ZSB0byBjb21wYXJlXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQXJyYXkgfCBNYXRyaXh9IFJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgY29tcGFyaXNvbjpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSB3aGVuIHggPiB5LCAtMSB3aGVuIHggPCB5LCBhbmQgMCB3aGVuIHggPT0geS5cbiAgICovXG5cbiAgdmFyIGNvbXBhcmUgPSB0eXBlZChuYW1lLCB7XG4gICAgJ2Jvb2xlYW4sIGJvb2xlYW4nOiBmdW5jdGlvbiBib29sZWFuQm9vbGVhbih4LCB5KSB7XG4gICAgICByZXR1cm4geCA9PT0geSA/IDAgOiB4ID4geSA/IDEgOiAtMTtcbiAgICB9LFxuICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4gKDAsIF9udW1iZXIubmVhcmx5RXF1YWwpKHgsIHksIGNvbmZpZy5lcHNpbG9uKSA/IDAgOiB4ID4geSA/IDEgOiAtMTtcbiAgICB9LFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IGZ1bmN0aW9uIEJpZ051bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4gKDAsIF9uZWFybHlFcXVhbC5uZWFybHlFcXVhbCkoeCwgeSwgY29uZmlnLmVwc2lsb24pID8gbmV3IEJpZ051bWJlcigwKSA6IG5ldyBCaWdOdW1iZXIoeC5jbXAoeSkpO1xuICAgIH0sXG4gICAgJ0ZyYWN0aW9uLCBGcmFjdGlvbic6IGZ1bmN0aW9uIEZyYWN0aW9uRnJhY3Rpb24oeCwgeSkge1xuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbih4LmNvbXBhcmUoeSkpO1xuICAgIH0sXG4gICAgJ0NvbXBsZXgsIENvbXBsZXgnOiBmdW5jdGlvbiBDb21wbGV4Q29tcGxleCgpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIG9yZGVyaW5nIHJlbGF0aW9uIGlzIGRlZmluZWQgZm9yIGNvbXBsZXggbnVtYmVycycpO1xuICAgIH0sXG4gICAgJ1VuaXQsIFVuaXQnOiBmdW5jdGlvbiBVbml0VW5pdCh4LCB5KSB7XG4gICAgICBpZiAoIXguZXF1YWxCYXNlKHkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbXBhcmUgdW5pdHMgd2l0aCBkaWZmZXJlbnQgYmFzZScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29tcGFyZSh4LnZhbHVlLCB5LnZhbHVlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDUoeCwgeSwgY29tcGFyZSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh5LCB4LCBjb21wYXJlLCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHgsIHksIGNvbXBhcmUsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBjb21wYXJlKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBjb21wYXJlKG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBjb21wYXJlKG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBjb21wYXJlKHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEyKHgsIHksIGNvbXBhcmUsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIGNvbXBhcmUsIGZhbHNlKTtcbiAgICB9LFxuICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeSwgeCwgY29tcGFyZSwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnYW55LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIGFueURlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCBjb21wYXJlLCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgY29tcGFyZSwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgY29tcGFyZSwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjb21wYXJlO1xufSk7XG5leHBvcnRzLmNyZWF0ZUNvbXBhcmUgPSBjcmVhdGVDb21wYXJlO1xudmFyIGNyZWF0ZUNvbXBhcmVOdW1iZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgWyd0eXBlZCcsICdjb25maWcnXSwgZnVuY3Rpb24gKF9yZWYyKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYyLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZjIuY29uZmlnO1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4gKDAsIF9udW1iZXIubmVhcmx5RXF1YWwpKHgsIHksIGNvbmZpZy5lcHNpbG9uKSA/IDAgOiB4ID4geSA/IDEgOiAtMTtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZUNvbXBhcmVOdW1iZXIgPSBjcmVhdGVDb21wYXJlTnVtYmVyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb21wYXJlTmF0dXJhbCA9IHZvaWQgMDtcblxudmFyIF9qYXZhc2NyaXB0TmF0dXJhbFNvcnQgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJqYXZhc2NyaXB0LW5hdHVyYWwtc29ydFwiKSk7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxudmFyIG5hbWUgPSAnY29tcGFyZU5hdHVyYWwnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29tcGFyZSddO1xudmFyIGNyZWF0ZUNvbXBhcmVOYXR1cmFsID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbXBhcmUgPSBfcmVmLmNvbXBhcmU7XG4gIHZhciBjb21wYXJlQm9vbGVhbnMgPSBjb21wYXJlLnNpZ25hdHVyZXNbJ2Jvb2xlYW4sYm9vbGVhbiddO1xuICAvKipcbiAgICogQ29tcGFyZSB0d28gdmFsdWVzIG9mIGFueSB0eXBlIGluIGEgZGV0ZXJtaW5pc3RpYywgbmF0dXJhbCB3YXkuXG4gICAqXG4gICAqIEZvciBudW1lcmljIHZhbHVlcywgdGhlIGZ1bmN0aW9uIHdvcmtzIHRoZSBzYW1lIGFzIGBtYXRoLmNvbXBhcmVgLlxuICAgKiBGb3IgdHlwZXMgb2YgdmFsdWVzIHRoYXQgY2FuJ3QgYmUgY29tcGFyZWQgbWF0aGVtYXRpY2FsbHksXG4gICAqIHRoZSBmdW5jdGlvbiBjb21wYXJlcyBpbiBhIG5hdHVyYWwgd2F5LlxuICAgKlxuICAgKiBGb3IgbnVtZXJpYyB2YWx1ZXMsIHggYW5kIHkgYXJlIGNvbnNpZGVyZWQgZXF1YWwgd2hlbiB0aGUgcmVsYXRpdmVcbiAgICogZGlmZmVyZW5jZSBiZXR3ZWVuIHggYW5kIHkgaXMgc21hbGxlciB0aGFuIHRoZSBjb25maWd1cmVkIGVwc2lsb24uXG4gICAqIFRoZSBmdW5jdGlvbiBjYW5ub3QgYmUgdXNlZCB0byBjb21wYXJlIHZhbHVlcyBzbWFsbGVyIHRoYW5cbiAgICogYXBwcm94aW1hdGVseSAyLjIyZS0xNi5cbiAgICpcbiAgICogRm9yIENvbXBsZXggbnVtYmVycywgZmlyc3QgdGhlIHJlYWwgcGFydHMgYXJlIGNvbXBhcmVkLiBJZiBlcXVhbCxcbiAgICogdGhlIGltYWdpbmFyeSBwYXJ0cyBhcmUgY29tcGFyZWQuXG4gICAqXG4gICAqIFN0cmluZ3MgYXJlIGNvbXBhcmVkIHdpdGggYSBuYXR1cmFsIHNvcnRpbmcgYWxnb3JpdGhtLCB3aGljaFxuICAgKiBvcmRlcnMgc3RyaW5ncyBpbiBhIFwibG9naWNcIiB3YXkgZm9sbG93aW5nIHNvbWUgaGV1cmlzdGljcy5cbiAgICogVGhpcyBkaWZmZXJzIGZyb20gdGhlIGZ1bmN0aW9uIGBjb21wYXJlYCwgd2hpY2ggY29udmVydHMgdGhlIHN0cmluZ1xuICAgKiBpbnRvIGEgbnVtZXJpYyB2YWx1ZSBhbmQgY29tcGFyZXMgdGhhdC4gVGhlIGZ1bmN0aW9uIGBjb21wYXJlVGV4dGBcbiAgICogb24gdGhlIG90aGVyIGhhbmQgY29tcGFyZXMgdGV4dCBsZXhpY2FsbHkuXG4gICAqXG4gICAqIEFycmF5cyBhbmQgTWF0cmljZXMgYXJlIGNvbXBhcmVkIHZhbHVlIGJ5IHZhbHVlIHVudGlsIHRoZXJlIGlzIGFuXG4gICAqIHVuZXF1YWwgcGFpciBvZiB2YWx1ZXMgZW5jb3VudGVyZWQuIE9iamVjdHMgYXJlIGNvbXBhcmVkIGJ5IHNvcnRlZFxuICAgKiBrZXlzIHVudGlsIHRoZSBrZXlzIG9yIHRoZWlyIHZhbHVlcyBhcmUgdW5lcXVhbC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmNvbXBhcmVOYXR1cmFsKHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmNvbXBhcmVOYXR1cmFsKDYsIDEpICAgICAgICAgICAgICAvLyByZXR1cm5zIDFcbiAgICogICAgbWF0aC5jb21wYXJlTmF0dXJhbCgyLCAzKSAgICAgICAgICAgICAgLy8gcmV0dXJucyAtMVxuICAgKiAgICBtYXRoLmNvbXBhcmVOYXR1cmFsKDcsIDcpICAgICAgICAgICAgICAvLyByZXR1cm5zIDBcbiAgICpcbiAgICogICAgbWF0aC5jb21wYXJlTmF0dXJhbCgnMTAnLCAnMicpICAgICAgICAgLy8gcmV0dXJucyAxXG4gICAqICAgIG1hdGguY29tcGFyZVRleHQoJzEwJywgJzInKSAgICAgICAgICAgIC8vIHJldHVybnMgLTFcbiAgICogICAgbWF0aC5jb21wYXJlKCcxMCcsICcyJykgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAxXG4gICAqXG4gICAqICAgIG1hdGguY29tcGFyZU5hdHVyYWwoJ0Fuc3dlcjogMTAnLCAnQW5zd2VyOiAyJykgLy8gcmV0dXJucyAxXG4gICAqICAgIG1hdGguY29tcGFyZVRleHQoJ0Fuc3dlcjogMTAnLCAnQW5zd2VyOiAyJykgICAgLy8gcmV0dXJucyAtMVxuICAgKiAgICBtYXRoLmNvbXBhcmUoJ0Fuc3dlcjogMTAnLCAnQW5zd2VyOiAyJylcbiAgICogICAgICAgIC8vIEVycm9yOiBDYW5ub3QgY29udmVydCBcIkFuc3dlcjogMTBcIiB0byBhIG51bWJlclxuICAgKlxuICAgKiAgICBjb25zdCBhID0gbWF0aC51bml0KCc1IGNtJylcbiAgICogICAgY29uc3QgYiA9IG1hdGgudW5pdCgnNDAgbW0nKVxuICAgKiAgICBtYXRoLmNvbXBhcmVOYXR1cmFsKGEsIGIpICAgICAgICAgICAgICAvLyByZXR1cm5zIDFcbiAgICpcbiAgICogICAgY29uc3QgYyA9IG1hdGguY29tcGxleCgnMiArIDNpJylcbiAgICogICAgY29uc3QgZCA9IG1hdGguY29tcGxleCgnMiArIDRpJylcbiAgICogICAgbWF0aC5jb21wYXJlTmF0dXJhbChjLCBkKSAgICAgICAgICAgICAgLy8gcmV0dXJucyAtMVxuICAgKlxuICAgKiAgICBtYXRoLmNvbXBhcmVOYXR1cmFsKFsxLCAyLCA0XSwgWzEsIDIsIDNdKSAvLyByZXR1cm5zIDFcbiAgICogICAgbWF0aC5jb21wYXJlTmF0dXJhbChbMSwgMiwgM10sIFsxLCAyXSkgICAgLy8gcmV0dXJucyAxXG4gICAqICAgIG1hdGguY29tcGFyZU5hdHVyYWwoWzEsIDVdLCBbMSwgMiwgM10pICAgIC8vIHJldHVybnMgMVxuICAgKiAgICBtYXRoLmNvbXBhcmVOYXR1cmFsKFsxLCAyXSwgWzEsIDJdKSAgICAgICAvLyByZXR1cm5zIDBcbiAgICpcbiAgICogICAgbWF0aC5jb21wYXJlTmF0dXJhbCh7YTogMn0sIHthOiA0fSkgICAgICAgLy8gcmV0dXJucyAtMVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgY29tcGFyZSwgY29tcGFyZVRleHRcbiAgICpcbiAgICogQHBhcmFtICB7Kn0geCBGaXJzdCB2YWx1ZSB0byBjb21wYXJlXG4gICAqIEBwYXJhbSAgeyp9IHkgU2Vjb25kIHZhbHVlIHRvIGNvbXBhcmVcbiAgICogQHJldHVybiB7bnVtYmVyfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb246XG4gICAqICAgICAgICAgICAgICAgICAgMSB3aGVuIHggPiB5LCAtMSB3aGVuIHggPCB5LCBhbmQgMCB3aGVuIHggPT0geS5cbiAgICovXG5cbiAgdmFyIGNvbXBhcmVOYXR1cmFsID0gdHlwZWQobmFtZSwge1xuICAgICdhbnksIGFueSc6IGZ1bmN0aW9uIGFueUFueSh4LCB5KSB7XG4gICAgICB2YXIgdHlwZVggPSAoMCwgX2lzLnR5cGVPZikoeCk7XG4gICAgICB2YXIgdHlwZVkgPSAoMCwgX2lzLnR5cGVPZikoeSk7XG4gICAgICB2YXIgYzsgLy8gbnVtZXJpYyB0eXBlc1xuXG4gICAgICBpZiAoKHR5cGVYID09PSAnbnVtYmVyJyB8fCB0eXBlWCA9PT0gJ0JpZ051bWJlcicgfHwgdHlwZVggPT09ICdGcmFjdGlvbicpICYmICh0eXBlWSA9PT0gJ251bWJlcicgfHwgdHlwZVkgPT09ICdCaWdOdW1iZXInIHx8IHR5cGVZID09PSAnRnJhY3Rpb24nKSkge1xuICAgICAgICBjID0gY29tcGFyZSh4LCB5KTtcblxuICAgICAgICBpZiAoYy50b1N0cmluZygpICE9PSAnMCcpIHtcbiAgICAgICAgICAvLyBjIGNhbiBiZSBudW1iZXIsIEJpZ051bWJlciwgb3IgRnJhY3Rpb25cbiAgICAgICAgICByZXR1cm4gYyA+IDAgPyAxIDogLTE7IC8vIHJldHVybiBhIG51bWJlclxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAoMCwgX2phdmFzY3JpcHROYXR1cmFsU29ydFtcImRlZmF1bHRcIl0pKHR5cGVYLCB0eXBlWSk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gbWF0cml4IHR5cGVzXG5cblxuICAgICAgaWYgKHR5cGVYID09PSAnQXJyYXknIHx8IHR5cGVYID09PSAnTWF0cml4JyB8fCB0eXBlWSA9PT0gJ0FycmF5JyB8fCB0eXBlWSA9PT0gJ01hdHJpeCcpIHtcbiAgICAgICAgYyA9IGNvbXBhcmVNYXRyaWNlc0FuZEFycmF5cyh4LCB5KTtcblxuICAgICAgICBpZiAoYyAhPT0gMCkge1xuICAgICAgICAgIHJldHVybiBjO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAoMCwgX2phdmFzY3JpcHROYXR1cmFsU29ydFtcImRlZmF1bHRcIl0pKHR5cGVYLCB0eXBlWSk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gaW4gY2FzZSBvZiBkaWZmZXJlbnQgdHlwZXMsIG9yZGVyIGJ5IG5hbWUgb2YgdHlwZSwgaS5lLiAnQmlnTnVtYmVyJyA8ICdDb21wbGV4J1xuXG5cbiAgICAgIGlmICh0eXBlWCAhPT0gdHlwZVkpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfamF2YXNjcmlwdE5hdHVyYWxTb3J0W1wiZGVmYXVsdFwiXSkodHlwZVgsIHR5cGVZKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVYID09PSAnQ29tcGxleCcpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVDb21wbGV4TnVtYmVycyh4LCB5KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVYID09PSAnVW5pdCcpIHtcbiAgICAgICAgaWYgKHguZXF1YWxCYXNlKHkpKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbXBhcmVOYXR1cmFsKHgudmFsdWUsIHkudmFsdWUpO1xuICAgICAgICB9IC8vIGNvbXBhcmUgYnkgdW5pdHNcblxuXG4gICAgICAgIHJldHVybiBjb21wYXJlQXJyYXlzKHguZm9ybWF0VW5pdHMoKSwgeS5mb3JtYXRVbml0cygpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVYID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVCb29sZWFucyh4LCB5KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVYID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gKDAsIF9qYXZhc2NyaXB0TmF0dXJhbFNvcnRbXCJkZWZhdWx0XCJdKSh4LCB5KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVYID09PSAnT2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gY29tcGFyZU9iamVjdHMoeCwgeSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlWCA9PT0gJ251bGwnKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZVggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfSAvLyB0aGlzIHNob3VsZCBub3Qgb2NjdXIuLi5cblxuXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbnN1cHBvcnRlZCB0eXBlIG9mIHZhbHVlIFwiJyArIHR5cGVYICsgJ1wiJyk7XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIENvbXBhcmUgbWl4ZWQgbWF0cml4L2FycmF5IHR5cGVzLCBieSBjb252ZXJ0aW5nIHRvIHNhbWUtc2hhcGVkIGFycmF5LlxuICAgKiBUaGlzIGNvbXBhcmF0b3IgaXMgbm9uLWRldGVybWluaXN0aWMgcmVnYXJkaW5nIGlucHV0IHR5cGVzLlxuICAgKiBAcGFyYW0ge0FycmF5IHwgU3BhcnNlTWF0cml4IHwgRGVuc2VNYXRyaXggfCAqfSB4XG4gICAqIEBwYXJhbSB7QXJyYXkgfCBTcGFyc2VNYXRyaXggfCBEZW5zZU1hdHJpeCB8ICp9IHlcbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29tcGFyaXNvbiByZXN1bHQ6IC0xLCAwLCBvciAxXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGNvbXBhcmVNYXRyaWNlc0FuZEFycmF5cyh4LCB5KSB7XG4gICAgaWYgKCgwLCBfaXMuaXNTcGFyc2VNYXRyaXgpKHgpICYmICgwLCBfaXMuaXNTcGFyc2VNYXRyaXgpKHkpKSB7XG4gICAgICByZXR1cm4gY29tcGFyZUFycmF5cyh4LnRvSlNPTigpLnZhbHVlcywgeS50b0pTT04oKS52YWx1ZXMpO1xuICAgIH1cblxuICAgIGlmICgoMCwgX2lzLmlzU3BhcnNlTWF0cml4KSh4KSkge1xuICAgICAgLy8gbm90ZTogY29udmVydCB0byBhcnJheSBpcyBleHBlbnNpdmVcbiAgICAgIHJldHVybiBjb21wYXJlTWF0cmljZXNBbmRBcnJheXMoeC50b0FycmF5KCksIHkpO1xuICAgIH1cblxuICAgIGlmICgoMCwgX2lzLmlzU3BhcnNlTWF0cml4KSh5KSkge1xuICAgICAgLy8gbm90ZTogY29udmVydCB0byBhcnJheSBpcyBleHBlbnNpdmVcbiAgICAgIHJldHVybiBjb21wYXJlTWF0cmljZXNBbmRBcnJheXMoeCwgeS50b0FycmF5KCkpO1xuICAgIH0gLy8gY29udmVydCBEZW5zZUFycmF5IGludG8gQXJyYXlcblxuXG4gICAgaWYgKCgwLCBfaXMuaXNEZW5zZU1hdHJpeCkoeCkpIHtcbiAgICAgIHJldHVybiBjb21wYXJlTWF0cmljZXNBbmRBcnJheXMoeC50b0pTT04oKS5kYXRhLCB5KTtcbiAgICB9XG5cbiAgICBpZiAoKDAsIF9pcy5pc0RlbnNlTWF0cml4KSh5KSkge1xuICAgICAgcmV0dXJuIGNvbXBhcmVNYXRyaWNlc0FuZEFycmF5cyh4LCB5LnRvSlNPTigpLmRhdGEpO1xuICAgIH0gLy8gY29udmVydCBzY2FsYXJzIHRvIGFycmF5XG5cblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh4KSkge1xuICAgICAgcmV0dXJuIGNvbXBhcmVNYXRyaWNlc0FuZEFycmF5cyhbeF0sIHkpO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh5KSkge1xuICAgICAgcmV0dXJuIGNvbXBhcmVNYXRyaWNlc0FuZEFycmF5cyh4LCBbeV0pO1xuICAgIH1cblxuICAgIHJldHVybiBjb21wYXJlQXJyYXlzKHgsIHkpO1xuICB9XG4gIC8qKlxuICAgKiBDb21wYXJlIHR3byBBcnJheXNcbiAgICpcbiAgICogLSBGaXJzdCwgY29tcGFyZXMgdmFsdWUgYnkgdmFsdWVcbiAgICogLSBOZXh0LCBpZiBhbGwgY29ycmVzcG9uZGluZyB2YWx1ZXMgYXJlIGVxdWFsLFxuICAgKiAgIGxvb2sgYXQgdGhlIGxlbmd0aDogbG9uZ2VzdCBhcnJheSB3aWxsIGJlIGNvbnNpZGVyZWQgbGFyZ2VzdFxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSB4XG4gICAqIEBwYXJhbSB7QXJyYXl9IHlcbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29tcGFyaXNvbiByZXN1bHQ6IC0xLCAwLCBvciAxXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gY29tcGFyZUFycmF5cyh4LCB5KSB7XG4gICAgLy8gY29tcGFyZSBlYWNoIHZhbHVlXG4gICAgZm9yICh2YXIgaSA9IDAsIGlpID0gTWF0aC5taW4oeC5sZW5ndGgsIHkubGVuZ3RoKTsgaSA8IGlpOyBpKyspIHtcbiAgICAgIHZhciB2ID0gY29tcGFyZU5hdHVyYWwoeFtpXSwgeVtpXSk7XG5cbiAgICAgIGlmICh2ICE9PSAwKSB7XG4gICAgICAgIHJldHVybiB2O1xuICAgICAgfVxuICAgIH0gLy8gY29tcGFyZSB0aGUgc2l6ZSBvZiB0aGUgYXJyYXlzXG5cblxuICAgIGlmICh4Lmxlbmd0aCA+IHkubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICBpZiAoeC5sZW5ndGggPCB5Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH0gLy8gYm90aCBBcnJheXMgaGF2ZSBlcXVhbCBzaXplIGFuZCBjb250ZW50XG5cblxuICAgIHJldHVybiAwO1xuICB9XG4gIC8qKlxuICAgKiBDb21wYXJlIHR3byBvYmplY3RzXG4gICAqXG4gICAqIC0gRmlyc3QsIGNvbXBhcmUgc29ydGVkIHByb3BlcnR5IG5hbWVzXG4gICAqIC0gTmV4dCwgY29tcGFyZSB0aGUgcHJvcGVydHkgdmFsdWVzXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSB4XG4gICAqIEBwYXJhbSB7T2JqZWN0fSB5XG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbXBhcmlzb24gcmVzdWx0OiAtMSwgMCwgb3IgMVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGNvbXBhcmVPYmplY3RzKHgsIHkpIHtcbiAgICB2YXIga2V5c1ggPSBPYmplY3Qua2V5cyh4KTtcbiAgICB2YXIga2V5c1kgPSBPYmplY3Qua2V5cyh5KTsgLy8gY29tcGFyZSBrZXlzXG5cbiAgICBrZXlzWC5zb3J0KF9qYXZhc2NyaXB0TmF0dXJhbFNvcnRbXCJkZWZhdWx0XCJdKTtcbiAgICBrZXlzWS5zb3J0KF9qYXZhc2NyaXB0TmF0dXJhbFNvcnRbXCJkZWZhdWx0XCJdKTtcbiAgICB2YXIgYyA9IGNvbXBhcmVBcnJheXMoa2V5c1gsIGtleXNZKTtcblxuICAgIGlmIChjICE9PSAwKSB7XG4gICAgICByZXR1cm4gYztcbiAgICB9IC8vIGNvbXBhcmUgdmFsdWVzXG5cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5c1gubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2ID0gY29tcGFyZU5hdHVyYWwoeFtrZXlzWFtpXV0sIHlba2V5c1lbaV1dKTtcblxuICAgICAgaWYgKHYgIT09IDApIHtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICByZXR1cm4gY29tcGFyZU5hdHVyYWw7XG59KTtcbi8qKlxuICogQ29tcGFyZSB0d28gY29tcGxleCBudW1iZXJzLCBgeGAgYW5kIGB5YDpcbiAqXG4gKiAtIEZpcnN0LCBjb21wYXJlIHRoZSByZWFsIHZhbHVlcyBvZiBgeGAgYW5kIGB5YFxuICogLSBJZiBlcXVhbCwgY29tcGFyZSB0aGUgaW1hZ2luYXJ5IHZhbHVlcyBvZiBgeGAgYW5kIGB5YFxuICpcbiAqIEBwYXJhbXMge0NvbXBsZXh9IHhcbiAqIEBwYXJhbXMge0NvbXBsZXh9IHlcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbXBhcmlzb24gcmVzdWx0OiAtMSwgMCwgb3IgMVxuICovXG5cbmV4cG9ydHMuY3JlYXRlQ29tcGFyZU5hdHVyYWwgPSBjcmVhdGVDb21wYXJlTmF0dXJhbDtcblxuZnVuY3Rpb24gY29tcGFyZUNvbXBsZXhOdW1iZXJzKHgsIHkpIHtcbiAgaWYgKHgucmUgPiB5LnJlKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICBpZiAoeC5yZSA8IHkucmUpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICBpZiAoeC5pbSA+IHkuaW0pIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIGlmICh4LmltIDwgeS5pbSkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIHJldHVybiAwO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb21wYXJlVGV4dE51bWJlciA9IGV4cG9ydHMuY3JlYXRlQ29tcGFyZVRleHQgPSB2b2lkIDA7XG5cbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3N0cmluZ1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYWxnb3JpdGhtID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgX2FsZ29yaXRobTIgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBuYW1lID0gJ2NvbXBhcmVUZXh0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCddO1xudmFyIGNyZWF0ZUNvbXBhcmVUZXh0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMTMgPSAoMCwgX2FsZ29yaXRobTIuY3JlYXRlQWxnb3JpdGhtMTMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtLmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogQ29tcGFyZSB0d28gc3RyaW5ncyBsZXhpY2FsbHkuIENvbXBhcmlzb24gaXMgY2FzZSBzZW5zaXRpdmUuXG4gICAqIFJldHVybnMgMSB3aGVuIHggPiB5LCAtMSB3aGVuIHggPCB5LCBhbmQgMCB3aGVuIHggPT0geS5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmNvbXBhcmVUZXh0KHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmNvbXBhcmVUZXh0KCdCJywgJ0EnKSAgICAgLy8gcmV0dXJucyAxXG4gICAqICAgIG1hdGguY29tcGFyZVRleHQoJzInLCAnMTAnKSAgICAvLyByZXR1cm5zIDFcbiAgICogICAgbWF0aC5jb21wYXJlKCcyJywgJzEwJykgICAgICAgIC8vIHJldHVybnMgLTFcbiAgICogICAgbWF0aC5jb21wYXJlTmF0dXJhbCgnMicsICcxMCcpIC8vIHJldHVybnMgLTFcbiAgICpcbiAgICogICAgbWF0aC5jb21wYXJlVGV4dCgnQicsIFsnQScsICdCJywgJ0MnXSkgLy8gcmV0dXJucyBbMSwgMCwgLTFdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBlcXVhbCwgZXF1YWxUZXh0LCBjb21wYXJlLCBjb21wYXJlTmF0dXJhbFxuICAgKlxuICAgKiBAcGFyYW0gIHtzdHJpbmcgfCBBcnJheSB8IERlbnNlTWF0cml4fSB4IEZpcnN0IHN0cmluZyB0byBjb21wYXJlXG4gICAqIEBwYXJhbSAge3N0cmluZyB8IEFycmF5IHwgRGVuc2VNYXRyaXh9IHkgU2Vjb25kIHN0cmluZyB0byBjb21wYXJlXG4gICAqIEByZXR1cm4ge251bWJlciB8IEFycmF5IHwgRGVuc2VNYXRyaXh9IFJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgY29tcGFyaXNvbjpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSB3aGVuIHggPiB5LCAtMSB3aGVuIHggPCB5LCBhbmQgMCB3aGVuIHggPT0geS5cbiAgICovXG5cbiAgdmFyIGNvbXBhcmVUZXh0ID0gdHlwZWQobmFtZSwge1xuICAgICdhbnksIGFueSc6IF9zdHJpbmcuY29tcGFyZVRleHQsXG4gICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIF9zdHJpbmcuY29tcGFyZVRleHQpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGNvbXBhcmVUZXh0KG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBjb21wYXJlVGV4dChtYXRyaXgoeCksIHkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gY29tcGFyZVRleHQoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIF9zdHJpbmcuY29tcGFyZVRleHQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdhbnksIERlbnNlTWF0cml4JzogZnVuY3Rpb24gYW55RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIF9zdHJpbmcuY29tcGFyZVRleHQsIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBhbnknOiBmdW5jdGlvbiBBcnJheUFueSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCBfc3RyaW5nLmNvbXBhcmVUZXh0LCBmYWxzZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ2FueSwgQXJyYXknOiBmdW5jdGlvbiBhbnlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCBfc3RyaW5nLmNvbXBhcmVUZXh0LCB0cnVlKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGNvbXBhcmVUZXh0O1xufSk7XG5leHBvcnRzLmNyZWF0ZUNvbXBhcmVUZXh0ID0gY3JlYXRlQ29tcGFyZVRleHQ7XG52YXIgY3JlYXRlQ29tcGFyZVRleHROdW1iZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgWyd0eXBlZCddLCBmdW5jdGlvbiAoX3JlZjIpIHtcbiAgdmFyIHR5cGVkID0gX3JlZjIudHlwZWQ7XG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ2FueSwgYW55JzogX3N0cmluZy5jb21wYXJlVGV4dFxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb21wYXJlVGV4dE51bWJlciA9IGNyZWF0ZUNvbXBhcmVUZXh0TnVtYmVyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVEZWVwRXF1YWwgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdkZWVwRXF1YWwnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnZXF1YWwnXTtcbnZhciBjcmVhdGVEZWVwRXF1YWwgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgZXF1YWwgPSBfcmVmLmVxdWFsO1xuXG4gIC8qKlxuICAgKiBUZXN0IGVsZW1lbnQgd2lzZSB3aGV0aGVyIHR3byBtYXRyaWNlcyBhcmUgZXF1YWwuXG4gICAqIFRoZSBmdW5jdGlvbiBhY2NlcHRzIGJvdGggbWF0cmljZXMgYW5kIHNjYWxhciB2YWx1ZXMuXG4gICAqXG4gICAqIFN0cmluZ3MgYXJlIGNvbXBhcmVkIGJ5IHRoZWlyIG51bWVyaWNhbCB2YWx1ZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmRlZXBFcXVhbCh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5kZWVwRXF1YWwoMiwgNCkgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqXG4gICAqICAgIGEgPSBbMiwgNSwgMV1cbiAgICogICAgYiA9IFsyLCA3LCAxXVxuICAgKlxuICAgKiAgICBtYXRoLmRlZXBFcXVhbChhLCBiKSAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5lcXVhbChhLCBiKSAgICAgICAvLyByZXR1cm5zIFt0cnVlLCBmYWxzZSwgdHJ1ZV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGVxdWFsLCB1bmVxdWFsXG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCBGaXJzdCBtYXRyaXggdG8gY29tcGFyZVxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHkgU2Vjb25kIG1hdHJpeCB0byBjb21wYXJlXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH1cbiAgICogICAgICAgICAgICBSZXR1cm5zIHRydWUgd2hlbiB0aGUgaW5wdXQgbWF0cmljZXMgaGF2ZSB0aGUgc2FtZSBzaXplIGFuZCBlYWNoIG9mIHRoZWlyIGVsZW1lbnRzIGlzIGVxdWFsLlxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnYW55LCBhbnknOiBmdW5jdGlvbiBhbnlBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIF9kZWVwRXF1YWwoeC52YWx1ZU9mKCksIHkudmFsdWVPZigpKTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIHR3byBhcnJheXMgaGF2ZSB0aGUgc2FtZSBzaXplIGFuZCBhbGwgZWxlbWVudHMgYXJlIGVxdWFsXG4gICAqIEBwYXJhbSB7QXJyYXkgfCAqfSB4XG4gICAqIEBwYXJhbSB7QXJyYXkgfCAqfSB5XG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiBib3RoIGFycmF5cyBhcmUgZGVlcCBlcXVhbFxuICAgKi9cblxuICBmdW5jdGlvbiBfZGVlcEVxdWFsKHgsIHkpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh4KSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoeSkpIHtcbiAgICAgICAgdmFyIGxlbiA9IHgubGVuZ3RoO1xuXG4gICAgICAgIGlmIChsZW4gIT09IHkubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGlmICghX2RlZXBFcXVhbCh4W2ldLCB5W2ldKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh5KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZXF1YWwoeCwgeSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlRGVlcEVxdWFsID0gY3JlYXRlRGVlcEVxdWFsOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVFcXVhbE51bWJlciA9IGV4cG9ydHMuY3JlYXRlRXF1YWwgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wM1wiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA3XCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTJcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xM1wiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgbmFtZSA9ICdlcXVhbCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnZXF1YWxTY2FsYXInLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVFcXVhbCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTAzID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMDMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNyA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0wNykoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMiA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIHR3byB2YWx1ZXMgYXJlIGVxdWFsLlxuICAgKlxuICAgKiBUaGUgZnVuY3Rpb24gdGVzdHMgd2hldGhlciB0aGUgcmVsYXRpdmUgZGlmZmVyZW5jZSBiZXR3ZWVuIHggYW5kIHkgaXNcbiAgICogc21hbGxlciB0aGFuIHRoZSBjb25maWd1cmVkIGVwc2lsb24uIFRoZSBmdW5jdGlvbiBjYW5ub3QgYmUgdXNlZCB0b1xuICAgKiBjb21wYXJlIHZhbHVlcyBzbWFsbGVyIHRoYW4gYXBwcm94aW1hdGVseSAyLjIyZS0xNi5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICogSW4gY2FzZSBvZiBjb21wbGV4IG51bWJlcnMsIHgucmUgbXVzdCBlcXVhbCB5LnJlLCBhbmQgeC5pbSBtdXN0IGVxdWFsIHkuaW0uXG4gICAqXG4gICAqIFZhbHVlcyBgbnVsbGAgYW5kIGB1bmRlZmluZWRgIGFyZSBjb21wYXJlZCBzdHJpY3RseSwgdGh1cyBgbnVsbGAgaXMgb25seVxuICAgKiBlcXVhbCB0byBgbnVsbGAgYW5kIG5vdGhpbmcgZWxzZSwgYW5kIGB1bmRlZmluZWRgIGlzIG9ubHkgZXF1YWwgdG9cbiAgICogYHVuZGVmaW5lZGAgYW5kIG5vdGhpbmcgZWxzZS4gU3RyaW5ncyBhcmUgY29tcGFyZWQgYnkgdGhlaXIgbnVtZXJpY2FsIHZhbHVlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguZXF1YWwoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguZXF1YWwoMiArIDIsIDMpICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmVxdWFsKDIgKyAyLCA0KSAgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKlxuICAgKiAgICBjb25zdCBhID0gbWF0aC51bml0KCc1MCBjbScpXG4gICAqICAgIGNvbnN0IGIgPSBtYXRoLnVuaXQoJzUgbScpXG4gICAqICAgIG1hdGguZXF1YWwoYSwgYikgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqXG4gICAqICAgIGNvbnN0IGMgPSBbMiwgNSwgMV1cbiAgICogICAgY29uc3QgZCA9IFsyLCA3LCAxXVxuICAgKlxuICAgKiAgICBtYXRoLmVxdWFsKGMsIGQpICAgICAgICAgICAgIC8vIHJldHVybnMgW3RydWUsIGZhbHNlLCB0cnVlXVxuICAgKiAgICBtYXRoLmRlZXBFcXVhbChjLCBkKSAgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICpcbiAgICogICAgbWF0aC5lcXVhbChcIjEwMDBcIiwgXCIxZTNcIikgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguZXF1YWwoMCwgbnVsbCkgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgdW5lcXVhbCwgc21hbGxlciwgc21hbGxlckVxLCBsYXJnZXIsIGxhcmdlckVxLCBjb21wYXJlLCBkZWVwRXF1YWwsIGVxdWFsVGV4dFxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBib29sZWFuIHwgQ29tcGxleCB8IFVuaXQgfCBzdHJpbmcgfCBBcnJheSB8IE1hdHJpeH0geCBGaXJzdCB2YWx1ZSB0byBjb21wYXJlXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IGJvb2xlYW4gfCBDb21wbGV4IHwgVW5pdCB8IHN0cmluZyB8IEFycmF5IHwgTWF0cml4fSB5IFNlY29uZCB2YWx1ZSB0byBjb21wYXJlXG4gICAqIEByZXR1cm4ge2Jvb2xlYW4gfCBBcnJheSB8IE1hdHJpeH0gUmV0dXJucyB0cnVlIHdoZW4gdGhlIGNvbXBhcmVkIHZhbHVlcyBhcmUgZXF1YWwsIGVsc2UgcmV0dXJucyBmYWxzZVxuICAgKi9cblxuICB2YXIgZXF1YWwgPSB0eXBlZChuYW1lLCB7XG4gICAgJ2FueSwgYW55JzogZnVuY3Rpb24gYW55QW55KHgsIHkpIHtcbiAgICAgIC8vIHN0cmljdCBlcXVhbGl0eSBmb3IgbnVsbCBhbmQgdW5kZWZpbmVkP1xuICAgICAgaWYgKHggPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHkgPT09IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICh5ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB4ID09PSBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAoeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB5ID09PSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHggPT09IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGVxdWFsU2NhbGFyKHgsIHkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wNyh4LCB5LCBlcXVhbFNjYWxhcik7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh5LCB4LCBlcXVhbFNjYWxhciwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh4LCB5LCBlcXVhbFNjYWxhciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIGVxdWFsU2NhbGFyKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBlcXVhbChtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gZXF1YWwobWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGVxdWFsKHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEyKHgsIHksIGVxdWFsU2NhbGFyLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIERlbnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBlcXVhbFNjYWxhciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ2FueSwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gYW55U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih5LCB4LCBlcXVhbFNjYWxhciwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnYW55LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIGFueURlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCBlcXVhbFNjYWxhciwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIGFueSc6IGZ1bmN0aW9uIEFycmF5QW55KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeCksIHksIGVxdWFsU2NhbGFyLCBmYWxzZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ2FueSwgQXJyYXknOiBmdW5jdGlvbiBhbnlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCBlcXVhbFNjYWxhciwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBlcXVhbDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVFcXVhbCA9IGNyZWF0ZUVxdWFsO1xudmFyIGNyZWF0ZUVxdWFsTnVtYmVyID0gKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIFsndHlwZWQnLCAnZXF1YWxTY2FsYXInXSwgZnVuY3Rpb24gKF9yZWYyKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYyLnR5cGVkLFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmMi5lcXVhbFNjYWxhcjtcbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnYW55LCBhbnknOiBmdW5jdGlvbiBhbnlBbnkoeCwgeSkge1xuICAgICAgLy8gc3RyaWN0IGVxdWFsaXR5IGZvciBudWxsIGFuZCB1bmRlZmluZWQ/XG4gICAgICBpZiAoeCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4geSA9PT0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHkgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHggPT09IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHkgPT09IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4geCA9PT0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZXF1YWxTY2FsYXIoeCwgeSk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVFcXVhbE51bWJlciA9IGNyZWF0ZUVxdWFsTnVtYmVyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVFcXVhbFNjYWxhck51bWJlciA9IGV4cG9ydHMuY3JlYXRlRXF1YWxTY2FsYXIgPSB2b2lkIDA7XG5cbnZhciBfbmVhcmx5RXF1YWwgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYmlnbnVtYmVyL25lYXJseUVxdWFsXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbXBsZXggPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29tcGxleFwiKTtcblxudmFyIG5hbWUgPSAnZXF1YWxTY2FsYXInO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJ107XG52YXIgY3JlYXRlRXF1YWxTY2FsYXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWc7XG5cbiAgLyoqXG4gICAqIFRlc3Qgd2hldGhlciB0d28gc2NhbGFyIHZhbHVlcyBhcmUgbmVhcmx5IGVxdWFsLlxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IGJvb2xlYW4gfCBDb21wbGV4IHwgVW5pdH0geCAgIEZpcnN0IHZhbHVlIHRvIGNvbXBhcmVcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBib29sZWFuIHwgQ29tcGxleH0geSAgICAgICAgICBTZWNvbmQgdmFsdWUgdG8gY29tcGFyZVxuICAgKiBAcmV0dXJuIHtib29sZWFufSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmV0dXJucyB0cnVlIHdoZW4gdGhlIGNvbXBhcmVkIHZhbHVlcyBhcmUgZXF1YWwsIGVsc2UgcmV0dXJucyBmYWxzZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdmFyIGVxdWFsU2NhbGFyID0gdHlwZWQobmFtZSwge1xuICAgICdib29sZWFuLCBib29sZWFuJzogZnVuY3Rpb24gYm9vbGVhbkJvb2xlYW4oeCwgeSkge1xuICAgICAgcmV0dXJuIHggPT09IHk7XG4gICAgfSxcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuICgwLCBfbnVtYmVyLm5lYXJseUVxdWFsKSh4LCB5LCBjb25maWcuZXBzaWxvbik7XG4gICAgfSxcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIHguZXEoeSkgfHwgKDAsIF9uZWFybHlFcXVhbC5uZWFybHlFcXVhbCkoeCwgeSwgY29uZmlnLmVwc2lsb24pO1xuICAgIH0sXG4gICAgJ0ZyYWN0aW9uLCBGcmFjdGlvbic6IGZ1bmN0aW9uIEZyYWN0aW9uRnJhY3Rpb24oeCwgeSkge1xuICAgICAgcmV0dXJuIHguZXF1YWxzKHkpO1xuICAgIH0sXG4gICAgJ0NvbXBsZXgsIENvbXBsZXgnOiBmdW5jdGlvbiBDb21wbGV4Q29tcGxleCh4LCB5KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb21wbGV4LmNvbXBsZXhFcXVhbHMpKHgsIHksIGNvbmZpZy5lcHNpbG9uKTtcbiAgICB9LFxuICAgICdVbml0LCBVbml0JzogZnVuY3Rpb24gVW5pdFVuaXQoeCwgeSkge1xuICAgICAgaWYgKCF4LmVxdWFsQmFzZSh5KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb21wYXJlIHVuaXRzIHdpdGggZGlmZmVyZW50IGJhc2UnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGVxdWFsU2NhbGFyKHgudmFsdWUsIHkudmFsdWUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBlcXVhbFNjYWxhcjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVFcXVhbFNjYWxhciA9IGNyZWF0ZUVxdWFsU2NhbGFyO1xudmFyIGNyZWF0ZUVxdWFsU2NhbGFyTnVtYmVyID0gKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIFsndHlwZWQnLCAnY29uZmlnJ10sIGZ1bmN0aW9uIChfcmVmMikge1xuICB2YXIgdHlwZWQgPSBfcmVmMi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYyLmNvbmZpZztcbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuICgwLCBfbnVtYmVyLm5lYXJseUVxdWFsKSh4LCB5LCBjb25maWcuZXBzaWxvbik7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVFcXVhbFNjYWxhck51bWJlciA9IGNyZWF0ZUVxdWFsU2NhbGFyTnVtYmVyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVFcXVhbFRleHQgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdlcXVhbFRleHQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29tcGFyZVRleHQnLCAnaXNaZXJvJ107XG52YXIgY3JlYXRlRXF1YWxUZXh0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbXBhcmVUZXh0ID0gX3JlZi5jb21wYXJlVGV4dCxcbiAgICAgIGlzWmVybyA9IF9yZWYuaXNaZXJvO1xuXG4gIC8qKlxuICAgKiBDaGVjayBlcXVhbGl0eSBvZiB0d28gc3RyaW5ncy4gQ29tcGFyaXNvbiBpcyBjYXNlIHNlbnNpdGl2ZS5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmVxdWFsVGV4dCh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5lcXVhbFRleHQoJ0hlbGxvJywgJ0hlbGxvJykgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmVxdWFsVGV4dCgnYScsICdBJykgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmVxdWFsKCcyZTMnLCAnMjAwMCcpICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguZXF1YWxUZXh0KCcyZTMnLCAnMjAwMCcpICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqXG4gICAqICAgIG1hdGguZXF1YWxUZXh0KCdCJywgWydBJywgJ0InLCAnQyddKSAvLyByZXR1cm5zIFtmYWxzZSwgdHJ1ZSwgZmFsc2VdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBlcXVhbCwgY29tcGFyZVRleHQsIGNvbXBhcmUsIGNvbXBhcmVOYXR1cmFsXG4gICAqXG4gICAqIEBwYXJhbSAge3N0cmluZyB8IEFycmF5IHwgRGVuc2VNYXRyaXh9IHggRmlyc3Qgc3RyaW5nIHRvIGNvbXBhcmVcbiAgICogQHBhcmFtICB7c3RyaW5nIHwgQXJyYXkgfCBEZW5zZU1hdHJpeH0geSBTZWNvbmQgc3RyaW5nIHRvIGNvbXBhcmVcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQXJyYXkgfCBEZW5zZU1hdHJpeH0gUmV0dXJucyB0cnVlIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWFsLCBhbmQgZmFsc2UgaWYgbm90LlxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnYW55LCBhbnknOiBmdW5jdGlvbiBhbnlBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGlzWmVybyhjb21wYXJlVGV4dCh4LCB5KSk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVFcXVhbFRleHQgPSBjcmVhdGVFcXVhbFRleHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUxhcmdlck51bWJlciA9IGV4cG9ydHMuY3JlYXRlTGFyZ2VyID0gdm9pZCAwO1xuXG52YXIgX25lYXJseUVxdWFsID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2JpZ251bWJlci9uZWFybHlFcXVhbFwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDNcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wN1wiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEyXCIpO1xuXG52YXIgX2FsZ29yaXRobTQgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBfYWxnb3JpdGhtNSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xM1wiKTtcblxudmFyIG5hbWUgPSAnbGFyZ2VyJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdtYXRyaXgnLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVMYXJnZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTAzID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMDMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNyA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0wNykoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMiA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtNS5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIHZhbHVlIHggaXMgbGFyZ2VyIHRoYW4geS5cbiAgICpcbiAgICogVGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIHggaXMgbGFyZ2VyIHRoYW4geSBhbmQgdGhlIHJlbGF0aXZlXG4gICAqIGRpZmZlcmVuY2UgYmV0d2VlbiB4IGFuZCB5IGlzIGxhcmdlciB0aGFuIHRoZSBjb25maWd1cmVkIGVwc2lsb24uIFRoZVxuICAgKiBmdW5jdGlvbiBjYW5ub3QgYmUgdXNlZCB0byBjb21wYXJlIHZhbHVlcyBzbWFsbGVyIHRoYW4gYXBwcm94aW1hdGVseSAyLjIyZS0xNi5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICogU3RyaW5ncyBhcmUgY29tcGFyZWQgYnkgdGhlaXIgbnVtZXJpY2FsIHZhbHVlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgubGFyZ2VyKHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmxhcmdlcigyLCAzKSAgICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGgubGFyZ2VyKDUsIDIgKyAyKSAgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKlxuICAgKiAgICBjb25zdCBhID0gbWF0aC51bml0KCc1IGNtJylcbiAgICogICAgY29uc3QgYiA9IG1hdGgudW5pdCgnMiBpbmNoJylcbiAgICogICAgbWF0aC5sYXJnZXIoYSwgYikgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgZXF1YWwsIHVuZXF1YWwsIHNtYWxsZXIsIHNtYWxsZXJFcSwgbGFyZ2VyRXEsIGNvbXBhcmVcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBib29sZWFuIHwgVW5pdCB8IHN0cmluZyB8IEFycmF5IHwgTWF0cml4fSB4IEZpcnN0IHZhbHVlIHRvIGNvbXBhcmVcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBib29sZWFuIHwgVW5pdCB8IHN0cmluZyB8IEFycmF5IHwgTWF0cml4fSB5IFNlY29uZCB2YWx1ZSB0byBjb21wYXJlXG4gICAqIEByZXR1cm4ge2Jvb2xlYW4gfCBBcnJheSB8IE1hdHJpeH0gUmV0dXJucyB0cnVlIHdoZW4gdGhlIHggaXMgbGFyZ2VyIHRoYW4geSwgZWxzZSByZXR1cm5zIGZhbHNlXG4gICAqL1xuXG4gIHZhciBsYXJnZXIgPSB0eXBlZChuYW1lLCB7XG4gICAgJ2Jvb2xlYW4sIGJvb2xlYW4nOiBmdW5jdGlvbiBib29sZWFuQm9vbGVhbih4LCB5KSB7XG4gICAgICByZXR1cm4geCA+IHk7XG4gICAgfSxcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIHggPiB5ICYmICEoMCwgX251bWJlci5uZWFybHlFcXVhbCkoeCwgeSwgY29uZmlnLmVwc2lsb24pO1xuICAgIH0sXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQmlnTnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiB4Lmd0KHkpICYmICEoMCwgX25lYXJseUVxdWFsLm5lYXJseUVxdWFsKSh4LCB5LCBjb25maWcuZXBzaWxvbik7XG4gICAgfSxcbiAgICAnRnJhY3Rpb24sIEZyYWN0aW9uJzogZnVuY3Rpb24gRnJhY3Rpb25GcmFjdGlvbih4LCB5KSB7XG4gICAgICByZXR1cm4geC5jb21wYXJlKHkpID09PSAxO1xuICAgIH0sXG4gICAgJ0NvbXBsZXgsIENvbXBsZXgnOiBmdW5jdGlvbiBDb21wbGV4Q29tcGxleCgpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIG9yZGVyaW5nIHJlbGF0aW9uIGlzIGRlZmluZWQgZm9yIGNvbXBsZXggbnVtYmVycycpO1xuICAgIH0sXG4gICAgJ1VuaXQsIFVuaXQnOiBmdW5jdGlvbiBVbml0VW5pdCh4LCB5KSB7XG4gICAgICBpZiAoIXguZXF1YWxCYXNlKHkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbXBhcmUgdW5pdHMgd2l0aCBkaWZmZXJlbnQgYmFzZScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGFyZ2VyKHgudmFsdWUsIHkudmFsdWUpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wNyh4LCB5LCBsYXJnZXIpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeSwgeCwgbGFyZ2VyLCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHgsIHksIGxhcmdlciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIGxhcmdlcik7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gbGFyZ2VyKG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBsYXJnZXIobWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGxhcmdlcih4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih4LCB5LCBsYXJnZXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIGxhcmdlciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ2FueSwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gYW55U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih5LCB4LCBsYXJnZXIsIHRydWUpO1xuICAgIH0sXG4gICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgbGFyZ2VyLCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgbGFyZ2VyLCBmYWxzZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ2FueSwgQXJyYXknOiBmdW5jdGlvbiBhbnlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCBsYXJnZXIsIHRydWUpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbGFyZ2VyO1xufSk7XG5leHBvcnRzLmNyZWF0ZUxhcmdlciA9IGNyZWF0ZUxhcmdlcjtcbnZhciBjcmVhdGVMYXJnZXJOdW1iZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgWyd0eXBlZCcsICdjb25maWcnXSwgZnVuY3Rpb24gKF9yZWYyKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYyLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZjIuY29uZmlnO1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geCA+IHkgJiYgISgwLCBfbnVtYmVyLm5lYXJseUVxdWFsKSh4LCB5LCBjb25maWcuZXBzaWxvbik7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVMYXJnZXJOdW1iZXIgPSBjcmVhdGVMYXJnZXJOdW1iZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUxhcmdlckVxTnVtYmVyID0gZXhwb3J0cy5jcmVhdGVMYXJnZXJFcSA9IHZvaWQgMDtcblxudmFyIF9uZWFybHlFcXVhbCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9iaWdudW1iZXIvbmVhcmx5RXF1YWxcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYWxnb3JpdGhtID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAzXCIpO1xuXG52YXIgX2FsZ29yaXRobTIgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDdcIik7XG5cbnZhciBfYWxnb3JpdGhtMyA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMlwiKTtcblxudmFyIF9hbGdvcml0aG00ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgX2FsZ29yaXRobTUgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBuYW1lID0gJ2xhcmdlckVxJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdtYXRyaXgnLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVMYXJnZXJFcSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMDMgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTA3ID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTA3KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEyID0gKDAsIF9hbGdvcml0aG0zLmNyZWF0ZUFsZ29yaXRobTEyKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEzID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTEzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTQuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBUZXN0IHdoZXRoZXIgdmFsdWUgeCBpcyBsYXJnZXIgb3IgZXF1YWwgdG8geS5cbiAgICpcbiAgICogVGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIHggaXMgbGFyZ2VyIHRoYW4geSBvciB0aGUgcmVsYXRpdmVcbiAgICogZGlmZmVyZW5jZSBiZXR3ZWVuIHggYW5kIHkgaXMgc21hbGxlciB0aGFuIHRoZSBjb25maWd1cmVkIGVwc2lsb24uIFRoZVxuICAgKiBmdW5jdGlvbiBjYW5ub3QgYmUgdXNlZCB0byBjb21wYXJlIHZhbHVlcyBzbWFsbGVyIHRoYW4gYXBwcm94aW1hdGVseSAyLjIyZS0xNi5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICogU3RyaW5ncyBhcmUgY29tcGFyZWQgYnkgdGhlaXIgbnVtZXJpY2FsIHZhbHVlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgubGFyZ2VyRXEoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgubGFyZ2VyKDIsIDEgKyAxKSAgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5sYXJnZXJFcSgyLCAxICsgMSkgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBlcXVhbCwgdW5lcXVhbCwgc21hbGxlciwgc21hbGxlckVxLCBsYXJnZXIsIGNvbXBhcmVcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBib29sZWFuIHwgVW5pdCB8IHN0cmluZyB8IEFycmF5IHwgTWF0cml4fSB4IEZpcnN0IHZhbHVlIHRvIGNvbXBhcmVcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBib29sZWFuIHwgVW5pdCB8IHN0cmluZyB8IEFycmF5IHwgTWF0cml4fSB5IFNlY29uZCB2YWx1ZSB0byBjb21wYXJlXG4gICAqIEByZXR1cm4ge2Jvb2xlYW4gfCBBcnJheSB8IE1hdHJpeH0gUmV0dXJucyB0cnVlIHdoZW4gdGhlIHggaXMgbGFyZ2VyIG9yIGVxdWFsIHRvIHksIGVsc2UgcmV0dXJucyBmYWxzZVxuICAgKi9cblxuICB2YXIgbGFyZ2VyRXEgPSB0eXBlZChuYW1lLCB7XG4gICAgJ2Jvb2xlYW4sIGJvb2xlYW4nOiBmdW5jdGlvbiBib29sZWFuQm9vbGVhbih4LCB5KSB7XG4gICAgICByZXR1cm4geCA+PSB5O1xuICAgIH0sXG4gICAgJ251bWJlciwgbnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiB4ID49IHkgfHwgKDAsIF9udW1iZXIubmVhcmx5RXF1YWwpKHgsIHksIGNvbmZpZy5lcHNpbG9uKTtcbiAgICB9LFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IGZ1bmN0aW9uIEJpZ051bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geC5ndGUoeSkgfHwgKDAsIF9uZWFybHlFcXVhbC5uZWFybHlFcXVhbCkoeCwgeSwgY29uZmlnLmVwc2lsb24pO1xuICAgIH0sXG4gICAgJ0ZyYWN0aW9uLCBGcmFjdGlvbic6IGZ1bmN0aW9uIEZyYWN0aW9uRnJhY3Rpb24oeCwgeSkge1xuICAgICAgcmV0dXJuIHguY29tcGFyZSh5KSAhPT0gLTE7XG4gICAgfSxcbiAgICAnQ29tcGxleCwgQ29tcGxleCc6IGZ1bmN0aW9uIENvbXBsZXhDb21wbGV4KCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gb3JkZXJpbmcgcmVsYXRpb24gaXMgZGVmaW5lZCBmb3IgY29tcGxleCBudW1iZXJzJyk7XG4gICAgfSxcbiAgICAnVW5pdCwgVW5pdCc6IGZ1bmN0aW9uIFVuaXRVbml0KHgsIHkpIHtcbiAgICAgIGlmICgheC5lcXVhbEJhc2UoeSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY29tcGFyZSB1bml0cyB3aXRoIGRpZmZlcmVudCBiYXNlJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBsYXJnZXJFcSh4LnZhbHVlLCB5LnZhbHVlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDcoeCwgeSwgbGFyZ2VyRXEpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeSwgeCwgbGFyZ2VyRXEsIHRydWUpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeCwgeSwgbGFyZ2VyRXEsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBsYXJnZXJFcSk7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gbGFyZ2VyRXEobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGxhcmdlckVxKG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBsYXJnZXJFcSh4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih4LCB5LCBsYXJnZXJFcSwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBEZW5zZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgbGFyZ2VyRXEsIGZhbHNlKTtcbiAgICB9LFxuICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeSwgeCwgbGFyZ2VyRXEsIHRydWUpO1xuICAgIH0sXG4gICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgbGFyZ2VyRXEsIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBhbnknOiBmdW5jdGlvbiBBcnJheUFueSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCBsYXJnZXJFcSwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgbGFyZ2VyRXEsIHRydWUpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbGFyZ2VyRXE7XG59KTtcbmV4cG9ydHMuY3JlYXRlTGFyZ2VyRXEgPSBjcmVhdGVMYXJnZXJFcTtcbnZhciBjcmVhdGVMYXJnZXJFcU51bWJlciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBbJ3R5cGVkJywgJ2NvbmZpZyddLCBmdW5jdGlvbiAoX3JlZjIpIHtcbiAgdmFyIHR5cGVkID0gX3JlZjIudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmMi5jb25maWc7XG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciwgbnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiB4ID49IHkgfHwgKDAsIF9udW1iZXIubmVhcmx5RXF1YWwpKHgsIHksIGNvbmZpZy5lcHNpbG9uKTtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZUxhcmdlckVxTnVtYmVyID0gY3JlYXRlTGFyZ2VyRXFOdW1iZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNtYWxsZXJOdW1iZXIgPSBleHBvcnRzLmNyZWF0ZVNtYWxsZXIgPSB2b2lkIDA7XG5cbnZhciBfbmVhcmx5RXF1YWwgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYmlnbnVtYmVyL25lYXJseUVxdWFsXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wM1wiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA3XCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTJcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgbmFtZSA9ICdzbWFsbGVyJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdtYXRyaXgnLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVTbWFsbGVyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXg7XG4gIHZhciBhbGdvcml0aG0wMyA9ICgwLCBfYWxnb3JpdGhtLmNyZWF0ZUFsZ29yaXRobTAzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMDcgPSAoMCwgX2FsZ29yaXRobTIuY3JlYXRlQWxnb3JpdGhtMDcpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4XG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTIgPSAoMCwgX2FsZ29yaXRobTMuY3JlYXRlQWxnb3JpdGhtMTIpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4XG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTMgPSAoMCwgX2FsZ29yaXRobTUuY3JlYXRlQWxnb3JpdGhtMTMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0xNCkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgLyoqXG4gICAqIFRlc3Qgd2hldGhlciB2YWx1ZSB4IGlzIHNtYWxsZXIgdGhhbiB5LlxuICAgKlxuICAgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4geCBpcyBzbWFsbGVyIHRoYW4geSBhbmQgdGhlIHJlbGF0aXZlXG4gICAqIGRpZmZlcmVuY2UgYmV0d2VlbiB4IGFuZCB5IGlzIHNtYWxsZXIgdGhhbiB0aGUgY29uZmlndXJlZCBlcHNpbG9uLiBUaGVcbiAgICogZnVuY3Rpb24gY2Fubm90IGJlIHVzZWQgdG8gY29tcGFyZSB2YWx1ZXMgc21hbGxlciB0aGFuIGFwcHJveGltYXRlbHkgMi4yMmUtMTYuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqIFN0cmluZ3MgYXJlIGNvbXBhcmVkIGJ5IHRoZWlyIG51bWVyaWNhbCB2YWx1ZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnNtYWxsZXIoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguc21hbGxlcigyLCAzKSAgICAgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLnNtYWxsZXIoNSwgMiAqIDIpICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqXG4gICAqICAgIGNvbnN0IGEgPSBtYXRoLnVuaXQoJzUgY20nKVxuICAgKiAgICBjb25zdCBiID0gbWF0aC51bml0KCcyIGluY2gnKVxuICAgKiAgICBtYXRoLnNtYWxsZXIoYSwgYikgICAgICAgICAgICAvLyByZXR1cm5zIHRydWVcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGVxdWFsLCB1bmVxdWFsLCBzbWFsbGVyRXEsIHNtYWxsZXIsIHNtYWxsZXJFcSwgY29tcGFyZVxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IGJvb2xlYW4gfCBVbml0IHwgc3RyaW5nIHwgQXJyYXkgfCBNYXRyaXh9IHggRmlyc3QgdmFsdWUgdG8gY29tcGFyZVxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IGJvb2xlYW4gfCBVbml0IHwgc3RyaW5nIHwgQXJyYXkgfCBNYXRyaXh9IHkgU2Vjb25kIHZhbHVlIHRvIGNvbXBhcmVcbiAgICogQHJldHVybiB7Ym9vbGVhbiB8IEFycmF5IHwgTWF0cml4fSBSZXR1cm5zIHRydWUgd2hlbiB0aGUgeCBpcyBzbWFsbGVyIHRoYW4geSwgZWxzZSByZXR1cm5zIGZhbHNlXG4gICAqL1xuXG4gIHZhciBzbWFsbGVyID0gdHlwZWQobmFtZSwge1xuICAgICdib29sZWFuLCBib29sZWFuJzogZnVuY3Rpb24gYm9vbGVhbkJvb2xlYW4oeCwgeSkge1xuICAgICAgcmV0dXJuIHggPCB5O1xuICAgIH0sXG4gICAgJ251bWJlciwgbnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiB4IDwgeSAmJiAhKDAsIF9udW1iZXIubmVhcmx5RXF1YWwpKHgsIHksIGNvbmZpZy5lcHNpbG9uKTtcbiAgICB9LFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IGZ1bmN0aW9uIEJpZ051bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geC5sdCh5KSAmJiAhKDAsIF9uZWFybHlFcXVhbC5uZWFybHlFcXVhbCkoeCwgeSwgY29uZmlnLmVwc2lsb24pO1xuICAgIH0sXG4gICAgJ0ZyYWN0aW9uLCBGcmFjdGlvbic6IGZ1bmN0aW9uIEZyYWN0aW9uRnJhY3Rpb24oeCwgeSkge1xuICAgICAgcmV0dXJuIHguY29tcGFyZSh5KSA9PT0gLTE7XG4gICAgfSxcbiAgICAnQ29tcGxleCwgQ29tcGxleCc6IGZ1bmN0aW9uIENvbXBsZXhDb21wbGV4KHgsIHkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIG9yZGVyaW5nIHJlbGF0aW9uIGlzIGRlZmluZWQgZm9yIGNvbXBsZXggbnVtYmVycycpO1xuICAgIH0sXG4gICAgJ1VuaXQsIFVuaXQnOiBmdW5jdGlvbiBVbml0VW5pdCh4LCB5KSB7XG4gICAgICBpZiAoIXguZXF1YWxCYXNlKHkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbXBhcmUgdW5pdHMgd2l0aCBkaWZmZXJlbnQgYmFzZScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc21hbGxlcih4LnZhbHVlLCB5LnZhbHVlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDcoeCwgeSwgc21hbGxlcik7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh5LCB4LCBzbWFsbGVyLCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHgsIHksIHNtYWxsZXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBzbWFsbGVyKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBzbWFsbGVyKG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBzbWFsbGVyKG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBzbWFsbGVyKHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEyKHgsIHksIHNtYWxsZXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIHNtYWxsZXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeSwgeCwgc21hbGxlciwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnYW55LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIGFueURlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCBzbWFsbGVyLCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgc21hbGxlciwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgc21hbGxlciwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBzbWFsbGVyO1xufSk7XG5leHBvcnRzLmNyZWF0ZVNtYWxsZXIgPSBjcmVhdGVTbWFsbGVyO1xudmFyIGNyZWF0ZVNtYWxsZXJOdW1iZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgWyd0eXBlZCcsICdjb25maWcnXSwgZnVuY3Rpb24gKF9yZWYyKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYyLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZjIuY29uZmlnO1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geCA8IHkgJiYgISgwLCBfbnVtYmVyLm5lYXJseUVxdWFsKSh4LCB5LCBjb25maWcuZXBzaWxvbik7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTbWFsbGVyTnVtYmVyID0gY3JlYXRlU21hbGxlck51bWJlcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU21hbGxlckVxTnVtYmVyID0gZXhwb3J0cy5jcmVhdGVTbWFsbGVyRXEgPSB2b2lkIDA7XG5cbnZhciBfbmVhcmx5RXF1YWwgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYmlnbnVtYmVyL25lYXJseUVxdWFsXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wM1wiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA3XCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTJcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgbmFtZSA9ICdzbWFsbGVyRXEnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ21hdHJpeCcsICdEZW5zZU1hdHJpeCddO1xudmFyIGNyZWF0ZVNtYWxsZXJFcSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMDMgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTA3ID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTA3KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEyID0gKDAsIF9hbGdvcml0aG0zLmNyZWF0ZUFsZ29yaXRobTEyKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEzID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTEzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTQuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBUZXN0IHdoZXRoZXIgdmFsdWUgeCBpcyBzbWFsbGVyIG9yIGVxdWFsIHRvIHkuXG4gICAqXG4gICAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiB4IGlzIHNtYWxsZXIgdGhhbiB5IG9yIHRoZSByZWxhdGl2ZVxuICAgKiBkaWZmZXJlbmNlIGJldHdlZW4geCBhbmQgeSBpcyBzbWFsbGVyIHRoYW4gdGhlIGNvbmZpZ3VyZWQgZXBzaWxvbi4gVGhlXG4gICAqIGZ1bmN0aW9uIGNhbm5vdCBiZSB1c2VkIHRvIGNvbXBhcmUgdmFsdWVzIHNtYWxsZXIgdGhhbiBhcHByb3hpbWF0ZWx5IDIuMjJlLTE2LlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKiBTdHJpbmdzIGFyZSBjb21wYXJlZCBieSB0aGVpciBudW1lcmljYWwgdmFsdWUuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5zbWFsbGVyRXEoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguc21hbGxlcigxICsgMiwgMykgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5zbWFsbGVyRXEoMSArIDIsIDMpICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBlcXVhbCwgdW5lcXVhbCwgc21hbGxlciwgbGFyZ2VyLCBsYXJnZXJFcSwgY29tcGFyZVxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IGJvb2xlYW4gfCBVbml0IHwgc3RyaW5nIHwgQXJyYXkgfCBNYXRyaXh9IHggRmlyc3QgdmFsdWUgdG8gY29tcGFyZVxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IGJvb2xlYW4gfCBVbml0IHwgc3RyaW5nIHwgQXJyYXkgfCBNYXRyaXh9IHkgU2Vjb25kIHZhbHVlIHRvIGNvbXBhcmVcbiAgICogQHJldHVybiB7Ym9vbGVhbiB8IEFycmF5IHwgTWF0cml4fSBSZXR1cm5zIHRydWUgd2hlbiB0aGUgeCBpcyBzbWFsbGVyIHRoYW4geSwgZWxzZSByZXR1cm5zIGZhbHNlXG4gICAqL1xuXG4gIHZhciBzbWFsbGVyRXEgPSB0eXBlZChuYW1lLCB7XG4gICAgJ2Jvb2xlYW4sIGJvb2xlYW4nOiBmdW5jdGlvbiBib29sZWFuQm9vbGVhbih4LCB5KSB7XG4gICAgICByZXR1cm4geCA8PSB5O1xuICAgIH0sXG4gICAgJ251bWJlciwgbnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiB4IDw9IHkgfHwgKDAsIF9udW1iZXIubmVhcmx5RXF1YWwpKHgsIHksIGNvbmZpZy5lcHNpbG9uKTtcbiAgICB9LFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IGZ1bmN0aW9uIEJpZ051bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geC5sdGUoeSkgfHwgKDAsIF9uZWFybHlFcXVhbC5uZWFybHlFcXVhbCkoeCwgeSwgY29uZmlnLmVwc2lsb24pO1xuICAgIH0sXG4gICAgJ0ZyYWN0aW9uLCBGcmFjdGlvbic6IGZ1bmN0aW9uIEZyYWN0aW9uRnJhY3Rpb24oeCwgeSkge1xuICAgICAgcmV0dXJuIHguY29tcGFyZSh5KSAhPT0gMTtcbiAgICB9LFxuICAgICdDb21wbGV4LCBDb21wbGV4JzogZnVuY3Rpb24gQ29tcGxleENvbXBsZXgoKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBvcmRlcmluZyByZWxhdGlvbiBpcyBkZWZpbmVkIGZvciBjb21wbGV4IG51bWJlcnMnKTtcbiAgICB9LFxuICAgICdVbml0LCBVbml0JzogZnVuY3Rpb24gVW5pdFVuaXQoeCwgeSkge1xuICAgICAgaWYgKCF4LmVxdWFsQmFzZSh5KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb21wYXJlIHVuaXRzIHdpdGggZGlmZmVyZW50IGJhc2UnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNtYWxsZXJFcSh4LnZhbHVlLCB5LnZhbHVlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDcoeCwgeSwgc21hbGxlckVxKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHksIHgsIHNtYWxsZXJFcSwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh4LCB5LCBzbWFsbGVyRXEsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBzbWFsbGVyRXEpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHNtYWxsZXJFcShtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gc21hbGxlckVxKG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBzbWFsbGVyRXEoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeCwgeSwgc21hbGxlckVxLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIERlbnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBzbWFsbGVyRXEsIGZhbHNlKTtcbiAgICB9LFxuICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeSwgeCwgc21hbGxlckVxLCB0cnVlKTtcbiAgICB9LFxuICAgICdhbnksIERlbnNlTWF0cml4JzogZnVuY3Rpb24gYW55RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIHNtYWxsZXJFcSwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIGFueSc6IGZ1bmN0aW9uIEFycmF5QW55KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeCksIHksIHNtYWxsZXJFcSwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgc21hbGxlckVxLCB0cnVlKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHNtYWxsZXJFcTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTbWFsbGVyRXEgPSBjcmVhdGVTbWFsbGVyRXE7XG52YXIgY3JlYXRlU21hbGxlckVxTnVtYmVyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIFsndHlwZWQnLCAnY29uZmlnJ10sIGZ1bmN0aW9uIChfcmVmMikge1xuICB2YXIgdHlwZWQgPSBfcmVmMi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYyLmNvbmZpZztcbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIHggPD0geSB8fCAoMCwgX251bWJlci5uZWFybHlFcXVhbCkoeCwgeSwgY29uZmlnLmVwc2lsb24pO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlU21hbGxlckVxTnVtYmVyID0gY3JlYXRlU21hbGxlckVxTnVtYmVyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVVbmVxdWFsTnVtYmVyID0gZXhwb3J0cy5jcmVhdGVVbmVxdWFsID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDNcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wN1wiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEyXCIpO1xuXG52YXIgX2FsZ29yaXRobTQgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBfYWxnb3JpdGhtNSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xM1wiKTtcblxudmFyIG5hbWUgPSAndW5lcXVhbCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnZXF1YWxTY2FsYXInLCAnbWF0cml4JywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlVW5lcXVhbCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMDMgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTA3ID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTA3KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEyID0gKDAsIF9hbGdvcml0aG0zLmNyZWF0ZUFsZ29yaXRobTEyKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEzID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTEzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTQuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBUZXN0IHdoZXRoZXIgdHdvIHZhbHVlcyBhcmUgdW5lcXVhbC5cbiAgICpcbiAgICogVGhlIGZ1bmN0aW9uIHRlc3RzIHdoZXRoZXIgdGhlIHJlbGF0aXZlIGRpZmZlcmVuY2UgYmV0d2VlbiB4IGFuZCB5IGlzXG4gICAqIGxhcmdlciB0aGFuIHRoZSBjb25maWd1cmVkIGVwc2lsb24uIFRoZSBmdW5jdGlvbiBjYW5ub3QgYmUgdXNlZCB0byBjb21wYXJlXG4gICAqIHZhbHVlcyBzbWFsbGVyIHRoYW4gYXBwcm94aW1hdGVseSAyLjIyZS0xNi5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICogSW4gY2FzZSBvZiBjb21wbGV4IG51bWJlcnMsIHgucmUgbXVzdCB1bmVxdWFsIHkucmUsIG9yIHguaW0gbXVzdCB1bmVxdWFsIHkuaW0uXG4gICAqIFN0cmluZ3MgYXJlIGNvbXBhcmVkIGJ5IHRoZWlyIG51bWVyaWNhbCB2YWx1ZS5cbiAgICpcbiAgICogVmFsdWVzIGBudWxsYCBhbmQgYHVuZGVmaW5lZGAgYXJlIGNvbXBhcmVkIHN0cmljdGx5LCB0aHVzIGBudWxsYCBpcyB1bmVxdWFsXG4gICAqIHdpdGggZXZlcnl0aGluZyBleGNlcHQgYG51bGxgLCBhbmQgYHVuZGVmaW5lZGAgaXMgdW5lcXVhbCB3aXRoIGV2ZXJ5dGhpbmdcbiAgICogZXhjZXB0IGB1bmRlZmluZWRgLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgudW5lcXVhbCh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC51bmVxdWFsKDIgKyAyLCAzKSAgICAgICAvLyByZXR1cm5zIHRydWVcbiAgICogICAgbWF0aC51bmVxdWFsKDIgKyAyLCA0KSAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqXG4gICAqICAgIGNvbnN0IGEgPSBtYXRoLnVuaXQoJzUwIGNtJylcbiAgICogICAgY29uc3QgYiA9IG1hdGgudW5pdCgnNSBtJylcbiAgICogICAgbWF0aC51bmVxdWFsKGEsIGIpICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqXG4gICAqICAgIGNvbnN0IGMgPSBbMiwgNSwgMV1cbiAgICogICAgY29uc3QgZCA9IFsyLCA3LCAxXVxuICAgKlxuICAgKiAgICBtYXRoLnVuZXF1YWwoYywgZCkgICAgICAgICAgIC8vIHJldHVybnMgW2ZhbHNlLCB0cnVlLCBmYWxzZV1cbiAgICogICAgbWF0aC5kZWVwRXF1YWwoYywgZCkgICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqXG4gICAqICAgIG1hdGgudW5lcXVhbCgwLCBudWxsKSAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBlcXVhbCwgZGVlcEVxdWFsLCBzbWFsbGVyLCBzbWFsbGVyRXEsIGxhcmdlciwgbGFyZ2VyRXEsIGNvbXBhcmVcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBib29sZWFuIHwgQ29tcGxleCB8IFVuaXQgfCBzdHJpbmcgfCBBcnJheSB8IE1hdHJpeCB8IHVuZGVmaW5lZH0geCBGaXJzdCB2YWx1ZSB0byBjb21wYXJlXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgYm9vbGVhbiB8IENvbXBsZXggfCBVbml0IHwgc3RyaW5nIHwgQXJyYXkgfCBNYXRyaXggfCB1bmRlZmluZWR9IHkgU2Vjb25kIHZhbHVlIHRvIGNvbXBhcmVcbiAgICogQHJldHVybiB7Ym9vbGVhbiB8IEFycmF5IHwgTWF0cml4fSBSZXR1cm5zIHRydWUgd2hlbiB0aGUgY29tcGFyZWQgdmFsdWVzIGFyZSB1bmVxdWFsLCBlbHNlIHJldHVybnMgZmFsc2VcbiAgICovXG5cbiAgdmFyIHVuZXF1YWwgPSB0eXBlZCgndW5lcXVhbCcsIHtcbiAgICAnYW55LCBhbnknOiBmdW5jdGlvbiBhbnlBbnkoeCwgeSkge1xuICAgICAgLy8gc3RyaWN0IGVxdWFsaXR5IGZvciBudWxsIGFuZCB1bmRlZmluZWQ/XG4gICAgICBpZiAoeCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4geSAhPT0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHkgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHggIT09IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHkgIT09IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4geCAhPT0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3VuZXF1YWwoeCwgeSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTA3KHgsIHksIF91bmVxdWFsKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHksIHgsIF91bmVxdWFsLCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHgsIHksIF91bmVxdWFsLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTMoeCwgeSwgX3VuZXF1YWwpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHVuZXF1YWwobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHVuZXF1YWwobWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHVuZXF1YWwoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeCwgeSwgX3VuZXF1YWwsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIF91bmVxdWFsLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnYW55LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEyKHksIHgsIF91bmVxdWFsLCB0cnVlKTtcbiAgICB9LFxuICAgICdhbnksIERlbnNlTWF0cml4JzogZnVuY3Rpb24gYW55RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIF91bmVxdWFsLCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgX3VuZXF1YWwsIGZhbHNlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnYW55LCBBcnJheSc6IGZ1bmN0aW9uIGFueUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeSksIHgsIF91bmVxdWFsLCB0cnVlKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBfdW5lcXVhbCh4LCB5KSB7XG4gICAgcmV0dXJuICFlcXVhbFNjYWxhcih4LCB5KTtcbiAgfVxuXG4gIHJldHVybiB1bmVxdWFsO1xufSk7XG5leHBvcnRzLmNyZWF0ZVVuZXF1YWwgPSBjcmVhdGVVbmVxdWFsO1xudmFyIGNyZWF0ZVVuZXF1YWxOdW1iZXIgPSAoMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgWyd0eXBlZCcsICdlcXVhbFNjYWxhciddLCBmdW5jdGlvbiAoX3JlZjIpIHtcbiAgdmFyIHR5cGVkID0gX3JlZjIudHlwZWQsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYyLmVxdWFsU2NhbGFyO1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdhbnksIGFueSc6IGZ1bmN0aW9uIGFueUFueSh4LCB5KSB7XG4gICAgICAvLyBzdHJpY3QgZXF1YWxpdHkgZm9yIG51bGwgYW5kIHVuZGVmaW5lZD9cbiAgICAgIGlmICh4ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB5ICE9PSBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAoeSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4geCAhPT0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4geSAhPT0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB4ICE9PSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAhZXF1YWxTY2FsYXIoeCwgeSk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVVbmVxdWFsTnVtYmVyID0gY3JlYXRlVW5lcXVhbE51bWJlcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU2V0Q2FydGVzaWFuID0gdm9pZCAwO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnc2V0Q2FydGVzaWFuJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ3NpemUnLCAnc3Vic2V0JywgJ2NvbXBhcmVOYXR1cmFsJywgJ0luZGV4JywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlU2V0Q2FydGVzaWFuID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzdWJzZXQgPSBfcmVmLnN1YnNldCxcbiAgICAgIGNvbXBhcmVOYXR1cmFsID0gX3JlZi5jb21wYXJlTmF0dXJhbCxcbiAgICAgIEluZGV4ID0gX3JlZi5JbmRleCxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcblxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBjYXJ0ZXNpYW4gcHJvZHVjdCBvZiB0d28gKG11bHRpKXNldHMuXG4gICAqIE11bHRpLWRpbWVuc2lvbiBhcnJheXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gc2luZ2xlLWRpbWVuc2lvbiBhcnJheXMgYmVmb3JlIHRoZSBvcGVyYXRpb24uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5zZXRDYXJ0ZXNpYW4oc2V0MSwgc2V0MilcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguc2V0Q2FydGVzaWFuKFsxLCAyXSwgWzMsIDRdKSAgICAgICAgLy8gcmV0dXJucyBbWzEsIDNdLCBbMSwgNF0sIFsyLCAzXSwgWzIsIDRdXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgc2V0VW5pb24sIHNldEludGVyc2VjdCwgc2V0RGlmZmVyZW5jZSwgc2V0UG93ZXJzZXRcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0gICAgYTEgIEEgKG11bHRpKXNldFxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSAgICBhMiAgQSAobXVsdGkpc2V0XG4gICAqIEByZXR1cm4ge0FycmF5IHwgTWF0cml4fSAgICBUaGUgY2FydGVzaWFuIHByb2R1Y3Qgb2YgdHdvIChtdWx0aSlzZXRzXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdBcnJheSB8IE1hdHJpeCwgQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeEFycmF5TWF0cml4KGExLCBhMikge1xuICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuXG4gICAgICBpZiAoc3Vic2V0KHNpemUoYTEpLCBuZXcgSW5kZXgoMCkpICE9PSAwICYmIHN1YnNldChzaXplKGEyKSwgbmV3IEluZGV4KDApKSAhPT0gMCkge1xuICAgICAgICAvLyBpZiBhbnkgb2YgdGhlbSBpcyBlbXB0eSwgcmV0dXJuIGVtcHR5XG4gICAgICAgIHZhciBiMSA9ICgwLCBfYXJyYXkuZmxhdHRlbikoQXJyYXkuaXNBcnJheShhMSkgPyBhMSA6IGExLnRvQXJyYXkoKSkuc29ydChjb21wYXJlTmF0dXJhbCk7XG4gICAgICAgIHZhciBiMiA9ICgwLCBfYXJyYXkuZmxhdHRlbikoQXJyYXkuaXNBcnJheShhMikgPyBhMiA6IGEyLnRvQXJyYXkoKSkuc29ydChjb21wYXJlTmF0dXJhbCk7XG4gICAgICAgIHJlc3VsdCA9IFtdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYjEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGIyLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChbYjFbaV0sIGIyW2pdXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IC8vIHJldHVybiBhbiBhcnJheSwgaWYgYm90aCBpbnB1dHMgd2VyZSBhcnJheXNcblxuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShhMSkgJiYgQXJyYXkuaXNBcnJheShhMikpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0gLy8gcmV0dXJuIGEgbWF0cml4IG90aGVyd2lzZVxuXG5cbiAgICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgocmVzdWx0KTtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZVNldENhcnRlc2lhbiA9IGNyZWF0ZVNldENhcnRlc2lhbjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU2V0RGlmZmVyZW5jZSA9IHZvaWQgMDtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3NldERpZmZlcmVuY2UnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnc2l6ZScsICdzdWJzZXQnLCAnY29tcGFyZU5hdHVyYWwnLCAnSW5kZXgnLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVTZXREaWZmZXJlbmNlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzdWJzZXQgPSBfcmVmLnN1YnNldCxcbiAgICAgIGNvbXBhcmVOYXR1cmFsID0gX3JlZi5jb21wYXJlTmF0dXJhbCxcbiAgICAgIEluZGV4ID0gX3JlZi5JbmRleCxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcblxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBkaWZmZXJlbmNlIG9mIHR3byAobXVsdGkpc2V0czogZXZlcnkgZWxlbWVudCBvZiBzZXQxLCB0aGF0IGlzIG5vdCB0aGUgZWxlbWVudCBvZiBzZXQyLlxuICAgKiBNdWx0aS1kaW1lbnNpb24gYXJyYXlzIHdpbGwgYmUgY29udmVydGVkIHRvIHNpbmdsZS1kaW1lbnNpb24gYXJyYXlzIGJlZm9yZSB0aGUgb3BlcmF0aW9uLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguc2V0RGlmZmVyZW5jZShzZXQxLCBzZXQyKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5zZXREaWZmZXJlbmNlKFsxLCAyLCAzLCA0XSwgWzMsIDQsIDUsIDZdKSAgICAgICAgICAgIC8vIHJldHVybnMgWzEsIDJdXG4gICAqICAgIG1hdGguc2V0RGlmZmVyZW5jZShbWzEsIDJdLCBbMywgNF1dLCBbWzMsIDRdLCBbNSwgNl1dKSAgICAvLyByZXR1cm5zIFsxLCAyXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgc2V0VW5pb24sIHNldEludGVyc2VjdCwgc2V0U3ltRGlmZmVyZW5jZVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSAgICBhMSAgQSAobXVsdGkpc2V0XG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9ICAgIGEyICBBIChtdWx0aSlzZXRcbiAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXh9ICAgIFRoZSBkaWZmZXJlbmNlIG9mIHR3byAobXVsdGkpc2V0c1xuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnQXJyYXkgfCBNYXRyaXgsIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXhBcnJheU1hdHJpeChhMSwgYTIpIHtcbiAgICAgIHZhciByZXN1bHQ7XG5cbiAgICAgIGlmIChzdWJzZXQoc2l6ZShhMSksIG5ldyBJbmRleCgwKSkgPT09IDApIHtcbiAgICAgICAgLy8gZW1wdHktYW55dGhpbmc9ZW1wdHlcbiAgICAgICAgcmVzdWx0ID0gW107XG4gICAgICB9IGVsc2UgaWYgKHN1YnNldChzaXplKGEyKSwgbmV3IEluZGV4KDApKSA9PT0gMCkge1xuICAgICAgICAvLyBhbnl0aGluZy1lbXB0eT1hbnl0aGluZ1xuICAgICAgICByZXR1cm4gKDAsIF9hcnJheS5mbGF0dGVuKShhMS50b0FycmF5KCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGIxID0gKDAsIF9hcnJheS5pZGVudGlmeSkoKDAsIF9hcnJheS5mbGF0dGVuKShBcnJheS5pc0FycmF5KGExKSA/IGExIDogYTEudG9BcnJheSgpKS5zb3J0KGNvbXBhcmVOYXR1cmFsKSk7XG4gICAgICAgIHZhciBiMiA9ICgwLCBfYXJyYXkuaWRlbnRpZnkpKCgwLCBfYXJyYXkuZmxhdHRlbikoQXJyYXkuaXNBcnJheShhMikgPyBhMiA6IGEyLnRvQXJyYXkoKSkuc29ydChjb21wYXJlTmF0dXJhbCkpO1xuICAgICAgICByZXN1bHQgPSBbXTtcbiAgICAgICAgdmFyIGluYjI7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiMS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGluYjIgPSBmYWxzZTtcblxuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYjIubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChjb21wYXJlTmF0dXJhbChiMVtpXS52YWx1ZSwgYjJbal0udmFsdWUpID09PSAwICYmIGIxW2ldLmlkZW50aWZpZXIgPT09IGIyW2pdLmlkZW50aWZpZXIpIHtcbiAgICAgICAgICAgICAgLy8gdGhlIGlkZW50aWZpZXIgaXMgYWx3YXlzIGEgZGVjaW1hbCBpbnRcbiAgICAgICAgICAgICAgaW5iMiA9IHRydWU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghaW5iMikge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goYjFbaV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSAvLyByZXR1cm4gYW4gYXJyYXksIGlmIGJvdGggaW5wdXRzIHdlcmUgYXJyYXlzXG5cblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYTEpICYmIEFycmF5LmlzQXJyYXkoYTIpKSB7XG4gICAgICAgIHJldHVybiAoMCwgX2FycmF5LmdlbmVyYWxpemUpKHJlc3VsdCk7XG4gICAgICB9IC8vIHJldHVybiBhIG1hdHJpeCBvdGhlcndpc2VcblxuXG4gICAgICByZXR1cm4gbmV3IERlbnNlTWF0cml4KCgwLCBfYXJyYXkuZ2VuZXJhbGl6ZSkocmVzdWx0KSk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTZXREaWZmZXJlbmNlID0gY3JlYXRlU2V0RGlmZmVyZW5jZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU2V0RGlzdGluY3QgPSB2b2lkIDA7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdzZXREaXN0aW5jdCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdzaXplJywgJ3N1YnNldCcsICdjb21wYXJlTmF0dXJhbCcsICdJbmRleCcsICdEZW5zZU1hdHJpeCddO1xudmFyIGNyZWF0ZVNldERpc3RpbmN0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzdWJzZXQgPSBfcmVmLnN1YnNldCxcbiAgICAgIGNvbXBhcmVOYXR1cmFsID0gX3JlZi5jb21wYXJlTmF0dXJhbCxcbiAgICAgIEluZGV4ID0gX3JlZi5JbmRleCxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcblxuICAvKipcbiAgICogQ29sbGVjdCB0aGUgZGlzdGluY3QgZWxlbWVudHMgb2YgYSBtdWx0aXNldC5cbiAgICogQSBtdWx0aS1kaW1lbnNpb24gYXJyYXkgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBzaW5nbGUtZGltZW5zaW9uIGFycmF5IGJlZm9yZSB0aGUgb3BlcmF0aW9uLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguc2V0RGlzdGluY3Qoc2V0KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5zZXREaXN0aW5jdChbMSwgMSwgMSwgMiwgMiwgM10pICAgICAgICAvLyByZXR1cm5zIFsxLCAyLCAzXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgc2V0TXVsdGlwbGljaXR5XG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9ICAgIGEgIEEgbXVsdGlzZXRcbiAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXh9ICAgIEEgc2V0IGNvbnRhaW5pbmcgdGhlIGRpc3RpbmMgZWxlbWVudHMgb2YgdGhlIG11bHRpc2V0XG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KGEpIHtcbiAgICAgIHZhciByZXN1bHQ7XG5cbiAgICAgIGlmIChzdWJzZXQoc2l6ZShhKSwgbmV3IEluZGV4KDApKSA9PT0gMCkge1xuICAgICAgICAvLyBpZiBlbXB0eSwgcmV0dXJuIGVtcHR5XG4gICAgICAgIHJlc3VsdCA9IFtdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGIgPSAoMCwgX2FycmF5LmZsYXR0ZW4pKEFycmF5LmlzQXJyYXkoYSkgPyBhIDogYS50b0FycmF5KCkpLnNvcnQoY29tcGFyZU5hdHVyYWwpO1xuICAgICAgICByZXN1bHQgPSBbXTtcbiAgICAgICAgcmVzdWx0LnB1c2goYlswXSk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBiLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKGNvbXBhcmVOYXR1cmFsKGJbaV0sIGJbaSAtIDFdKSAhPT0gMCkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goYltpXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IC8vIHJldHVybiBhbiBhcnJheSwgaWYgdGhlIGlucHV0IHdhcyBhbiBhcnJheVxuXG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGEpKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9IC8vIHJldHVybiBhIG1hdHJpeCBvdGhlcndpc2VcblxuXG4gICAgICByZXR1cm4gbmV3IERlbnNlTWF0cml4KHJlc3VsdCk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTZXREaXN0aW5jdCA9IGNyZWF0ZVNldERpc3RpbmN0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTZXRJbnRlcnNlY3QgPSB2b2lkIDA7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdzZXRJbnRlcnNlY3QnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnc2l6ZScsICdzdWJzZXQnLCAnY29tcGFyZU5hdHVyYWwnLCAnSW5kZXgnLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVTZXRJbnRlcnNlY3QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHN1YnNldCA9IF9yZWYuc3Vic2V0LFxuICAgICAgY29tcGFyZU5hdHVyYWwgPSBfcmVmLmNvbXBhcmVOYXR1cmFsLFxuICAgICAgSW5kZXggPSBfcmVmLkluZGV4LFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgdGhlIGludGVyc2VjdGlvbiBvZiB0d28gKG11bHRpKXNldHMuXG4gICAqIE11bHRpLWRpbWVuc2lvbiBhcnJheXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gc2luZ2xlLWRpbWVuc2lvbiBhcnJheXMgYmVmb3JlIHRoZSBvcGVyYXRpb24uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5zZXRJbnRlcnNlY3Qoc2V0MSwgc2V0MilcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguc2V0SW50ZXJzZWN0KFsxLCAyLCAzLCA0XSwgWzMsIDQsIDUsIDZdKSAgICAgICAgICAgIC8vIHJldHVybnMgWzMsIDRdXG4gICAqICAgIG1hdGguc2V0SW50ZXJzZWN0KFtbMSwgMl0sIFszLCA0XV0sIFtbMywgNF0sIFs1LCA2XV0pICAgIC8vIHJldHVybnMgWzMsIDRdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBzZXRVbmlvbiwgc2V0RGlmZmVyZW5jZVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSAgICBhMSAgQSAobXVsdGkpc2V0XG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9ICAgIGEyICBBIChtdWx0aSlzZXRcbiAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXh9ICAgIFRoZSBpbnRlcnNlY3Rpb24gb2YgdHdvIChtdWx0aSlzZXRzXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdBcnJheSB8IE1hdHJpeCwgQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeEFycmF5TWF0cml4KGExLCBhMikge1xuICAgICAgdmFyIHJlc3VsdDtcblxuICAgICAgaWYgKHN1YnNldChzaXplKGExKSwgbmV3IEluZGV4KDApKSA9PT0gMCB8fCBzdWJzZXQoc2l6ZShhMiksIG5ldyBJbmRleCgwKSkgPT09IDApIHtcbiAgICAgICAgLy8gb2YgYW55IG9mIHRoZW0gaXMgZW1wdHksIHJldHVybiBlbXB0eVxuICAgICAgICByZXN1bHQgPSBbXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBiMSA9ICgwLCBfYXJyYXkuaWRlbnRpZnkpKCgwLCBfYXJyYXkuZmxhdHRlbikoQXJyYXkuaXNBcnJheShhMSkgPyBhMSA6IGExLnRvQXJyYXkoKSkuc29ydChjb21wYXJlTmF0dXJhbCkpO1xuICAgICAgICB2YXIgYjIgPSAoMCwgX2FycmF5LmlkZW50aWZ5KSgoMCwgX2FycmF5LmZsYXR0ZW4pKEFycmF5LmlzQXJyYXkoYTIpID8gYTIgOiBhMi50b0FycmF5KCkpLnNvcnQoY29tcGFyZU5hdHVyYWwpKTtcbiAgICAgICAgcmVzdWx0ID0gW107XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiMS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYjIubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChjb21wYXJlTmF0dXJhbChiMVtpXS52YWx1ZSwgYjJbal0udmFsdWUpID09PSAwICYmIGIxW2ldLmlkZW50aWZpZXIgPT09IGIyW2pdLmlkZW50aWZpZXIpIHtcbiAgICAgICAgICAgICAgLy8gdGhlIGlkZW50aWZpZXIgaXMgYWx3YXlzIGEgZGVjaW1hbCBpbnRcbiAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYjFbaV0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gcmV0dXJuIGFuIGFycmF5LCBpZiBib3RoIGlucHV0cyB3ZXJlIGFycmF5c1xuXG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGExKSAmJiBBcnJheS5pc0FycmF5KGEyKSkge1xuICAgICAgICByZXR1cm4gKDAsIF9hcnJheS5nZW5lcmFsaXplKShyZXN1bHQpO1xuICAgICAgfSAvLyByZXR1cm4gYSBtYXRyaXggb3RoZXJ3aXNlXG5cblxuICAgICAgcmV0dXJuIG5ldyBEZW5zZU1hdHJpeCgoMCwgX2FycmF5LmdlbmVyYWxpemUpKHJlc3VsdCkpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlU2V0SW50ZXJzZWN0ID0gY3JlYXRlU2V0SW50ZXJzZWN0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTZXRJc1N1YnNldCA9IHZvaWQgMDtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3NldElzU3Vic2V0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ3NpemUnLCAnc3Vic2V0JywgJ2NvbXBhcmVOYXR1cmFsJywgJ0luZGV4J107XG52YXIgY3JlYXRlU2V0SXNTdWJzZXQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHN1YnNldCA9IF9yZWYuc3Vic2V0LFxuICAgICAgY29tcGFyZU5hdHVyYWwgPSBfcmVmLmNvbXBhcmVOYXR1cmFsLFxuICAgICAgSW5kZXggPSBfcmVmLkluZGV4O1xuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIGEgKG11bHRpKXNldCBpcyBhIHN1YnNldCBvZiBhbm90aGVyIChtdWx0aSlzZXQuIChFdmVyeSBlbGVtZW50IG9mIHNldDEgaXMgdGhlIGVsZW1lbnQgb2Ygc2V0Mi4pXG4gICAqIE11bHRpLWRpbWVuc2lvbiBhcnJheXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gc2luZ2xlLWRpbWVuc2lvbiBhcnJheXMgYmVmb3JlIHRoZSBvcGVyYXRpb24uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5zZXRJc1N1YnNldChzZXQxLCBzZXQyKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5zZXRJc1N1YnNldChbMSwgMl0sIFszLCA0LCA1LCA2XSkgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5zZXRJc1N1YnNldChbMywgNF0sIFszLCA0LCA1LCA2XSkgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgc2V0VW5pb24sIHNldEludGVyc2VjdCwgc2V0RGlmZmVyZW5jZVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSAgICBhMSAgQSAobXVsdGkpc2V0XG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9ICAgIGEyICBBIChtdWx0aSlzZXRcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gICAgICAgICAgICB0cnVlIHwgZmFsc2VcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ0FycmF5IHwgTWF0cml4LCBBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4QXJyYXlNYXRyaXgoYTEsIGEyKSB7XG4gICAgICBpZiAoc3Vic2V0KHNpemUoYTEpLCBuZXcgSW5kZXgoMCkpID09PSAwKSB7XG4gICAgICAgIC8vIGVtcHR5IGlzIGEgc3Vic2V0IG9mIGFueXRoaW5nXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChzdWJzZXQoc2l6ZShhMiksIG5ldyBJbmRleCgwKSkgPT09IDApIHtcbiAgICAgICAgLy8gYW55dGhpbmcgaXMgbm90IGEgc3Vic2V0IG9mIGVtcHR5XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGIxID0gKDAsIF9hcnJheS5pZGVudGlmeSkoKDAsIF9hcnJheS5mbGF0dGVuKShBcnJheS5pc0FycmF5KGExKSA/IGExIDogYTEudG9BcnJheSgpKS5zb3J0KGNvbXBhcmVOYXR1cmFsKSk7XG4gICAgICB2YXIgYjIgPSAoMCwgX2FycmF5LmlkZW50aWZ5KSgoMCwgX2FycmF5LmZsYXR0ZW4pKEFycmF5LmlzQXJyYXkoYTIpID8gYTIgOiBhMi50b0FycmF5KCkpLnNvcnQoY29tcGFyZU5hdHVyYWwpKTtcbiAgICAgIHZhciBpbmIyO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGIxLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGluYjIgPSBmYWxzZTtcblxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGIyLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgaWYgKGNvbXBhcmVOYXR1cmFsKGIxW2ldLnZhbHVlLCBiMltqXS52YWx1ZSkgPT09IDAgJiYgYjFbaV0uaWRlbnRpZmllciA9PT0gYjJbal0uaWRlbnRpZmllcikge1xuICAgICAgICAgICAgLy8gdGhlIGlkZW50aWZpZXIgaXMgYWx3YXlzIGEgZGVjaW1hbCBpbnRcbiAgICAgICAgICAgIGluYjIgPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluYjIgPT09IGZhbHNlKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlU2V0SXNTdWJzZXQgPSBjcmVhdGVTZXRJc1N1YnNldDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU2V0TXVsdGlwbGljaXR5ID0gdm9pZCAwO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnc2V0TXVsdGlwbGljaXR5JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ3NpemUnLCAnc3Vic2V0JywgJ2NvbXBhcmVOYXR1cmFsJywgJ0luZGV4J107XG52YXIgY3JlYXRlU2V0TXVsdGlwbGljaXR5ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzdWJzZXQgPSBfcmVmLnN1YnNldCxcbiAgICAgIGNvbXBhcmVOYXR1cmFsID0gX3JlZi5jb21wYXJlTmF0dXJhbCxcbiAgICAgIEluZGV4ID0gX3JlZi5JbmRleDtcblxuICAvKipcbiAgICogQ291bnQgdGhlIG11bHRpcGxpY2l0eSBvZiBhbiBlbGVtZW50IGluIGEgbXVsdGlzZXQuXG4gICAqIEEgbXVsdGktZGltZW5zaW9uIGFycmF5IHdpbGwgYmUgY29udmVydGVkIHRvIGEgc2luZ2xlLWRpbWVuc2lvbiBhcnJheSBiZWZvcmUgdGhlIG9wZXJhdGlvbi5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnNldE11bHRpcGxpY2l0eShlbGVtZW50LCBzZXQpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnNldE11bHRpcGxpY2l0eSgxLCBbMSwgMiwgMiwgNF0pICAgIC8vIHJldHVybnMgMVxuICAgKiAgICBtYXRoLnNldE11bHRpcGxpY2l0eSgyLCBbMSwgMiwgMiwgNF0pICAgIC8vIHJldHVybnMgMlxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgc2V0RGlzdGluY3QsIHNldFNpemVcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXh9IGUgIEFuIGVsZW1lbnQgaW4gdGhlIG11bHRpc2V0XG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9ICAgICBhICBBIG11bHRpc2V0XG4gICAqIEByZXR1cm4ge251bWJlcn0gICAgICAgICAgICBUaGUgbnVtYmVyIG9mIGhvdyBtYW55IHRpbWVzIHRoZSBtdWx0aXNldCBjb250YWlucyB0aGUgZWxlbWVudFxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4LCBBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckZyYWN0aW9uQ29tcGxleEFycmF5TWF0cml4KGUsIGEpIHtcbiAgICAgIGlmIChzdWJzZXQoc2l6ZShhKSwgbmV3IEluZGV4KDApKSA9PT0gMCkge1xuICAgICAgICAvLyBpZiBlbXB0eSwgcmV0dXJuIDBcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG5cbiAgICAgIHZhciBiID0gKDAsIF9hcnJheS5mbGF0dGVuKShBcnJheS5pc0FycmF5KGEpID8gYSA6IGEudG9BcnJheSgpKTtcbiAgICAgIHZhciBjb3VudCA9IDA7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoY29tcGFyZU5hdHVyYWwoYltpXSwgZSkgPT09IDApIHtcbiAgICAgICAgICBjb3VudCsrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb3VudDtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZVNldE11bHRpcGxpY2l0eSA9IGNyZWF0ZVNldE11bHRpcGxpY2l0eTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU2V0UG93ZXJzZXQgPSB2b2lkIDA7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdzZXRQb3dlcnNldCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdzaXplJywgJ3N1YnNldCcsICdjb21wYXJlTmF0dXJhbCcsICdJbmRleCddO1xudmFyIGNyZWF0ZVNldFBvd2Vyc2V0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzdWJzZXQgPSBfcmVmLnN1YnNldCxcbiAgICAgIGNvbXBhcmVOYXR1cmFsID0gX3JlZi5jb21wYXJlTmF0dXJhbCxcbiAgICAgIEluZGV4ID0gX3JlZi5JbmRleDtcblxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBwb3dlcnNldCBvZiBhIChtdWx0aSlzZXQuIChUaGUgcG93ZXJzZXQgY29udGFpbnMgdmVyeSBwb3NzaWJsZSBzdWJzZXRzIG9mIGEgKG11bHRpKXNldC4pXG4gICAqIEEgbXVsdGktZGltZW5zaW9uIGFycmF5IHdpbGwgYmUgY29udmVydGVkIHRvIGEgc2luZ2xlLWRpbWVuc2lvbiBhcnJheSBiZWZvcmUgdGhlIG9wZXJhdGlvbi5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnNldFBvd2Vyc2V0KHNldClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguc2V0UG93ZXJzZXQoWzEsIDIsIDNdKSAgICAgICAgLy8gcmV0dXJucyBbW10sIFsxXSwgWzJdLCBbM10sIFsxLCAyXSwgWzEsIDNdLCBbMiwgM10sIFsxLCAyLCAzXV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIHNldENhcnRlc2lhblxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSAgICBhICBBIChtdWx0aSlzZXRcbiAgICogQHJldHVybiB7QXJyYXl9ICAgIFRoZSBwb3dlcnNldCBvZiB0aGUgKG11bHRpKXNldFxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeChhKSB7XG4gICAgICBpZiAoc3Vic2V0KHNpemUoYSksIG5ldyBJbmRleCgwKSkgPT09IDApIHtcbiAgICAgICAgLy8gaWYgZW1wdHksIHJldHVybiBlbXB0eVxuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG5cbiAgICAgIHZhciBiID0gKDAsIF9hcnJheS5mbGF0dGVuKShBcnJheS5pc0FycmF5KGEpID8gYSA6IGEudG9BcnJheSgpKS5zb3J0KGNvbXBhcmVOYXR1cmFsKTtcbiAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgIHZhciBudW1iZXIgPSAwO1xuXG4gICAgICB3aGlsZSAobnVtYmVyLnRvU3RyaW5nKDIpLmxlbmd0aCA8PSBiLmxlbmd0aCkge1xuICAgICAgICByZXN1bHQucHVzaChfc3Vic2V0KGIsIG51bWJlci50b1N0cmluZygyKS5zcGxpdCgnJykucmV2ZXJzZSgpKSk7XG4gICAgICAgIG51bWJlcisrO1xuICAgICAgfSAvLyBjYW4gbm90IHJldHVybiBhIG1hdHJpeCwgYmVjYXVzZSBvZiB0aGUgZGlmZmVyZW50IHNpemUgb2YgdGhlIHN1YmFycmF5c1xuXG5cbiAgICAgIHJldHVybiBfc29ydChyZXN1bHQpO1xuICAgIH1cbiAgfSk7IC8vIGNyZWF0ZSBzdWJzZXRcblxuICBmdW5jdGlvbiBfc3Vic2V0KGFycmF5LCBiaXRhcnJheSkge1xuICAgIHZhciByZXN1bHQgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYml0YXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChiaXRhcnJheVtpXSA9PT0gJzEnKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGFycmF5W2ldKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9IC8vIHNvcnQgc3Vic2VzdHMgYnkgbGVuZ3RoXG5cblxuICBmdW5jdGlvbiBfc29ydChhcnJheSkge1xuICAgIHZhciB0ZW1wID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gYXJyYXkubGVuZ3RoIC0gMTsgaSA+IDA7IGktLSkge1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpOyBqKyspIHtcbiAgICAgICAgaWYgKGFycmF5W2pdLmxlbmd0aCA+IGFycmF5W2ogKyAxXS5sZW5ndGgpIHtcbiAgICAgICAgICB0ZW1wID0gYXJyYXlbal07XG4gICAgICAgICAgYXJyYXlbal0gPSBhcnJheVtqICsgMV07XG4gICAgICAgICAgYXJyYXlbaiArIDFdID0gdGVtcDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhcnJheTtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZVNldFBvd2Vyc2V0ID0gY3JlYXRlU2V0UG93ZXJzZXQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNldFNpemUgPSB2b2lkIDA7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdzZXRTaXplJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbXBhcmVOYXR1cmFsJ107XG52YXIgY3JlYXRlU2V0U2l6ZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb21wYXJlTmF0dXJhbCA9IF9yZWYuY29tcGFyZU5hdHVyYWw7XG5cbiAgLyoqXG4gICAqIENvdW50IHRoZSBudW1iZXIgb2YgZWxlbWVudHMgb2YgYSAobXVsdGkpc2V0LiBXaGVuIGEgc2Vjb25kIHBhcmFtZXRlciBpcyAndHJ1ZScsIGNvdW50IG9ubHkgdGhlIHVuaXF1ZSB2YWx1ZXMuXG4gICAqIEEgbXVsdGktZGltZW5zaW9uIGFycmF5IHdpbGwgYmUgY29udmVydGVkIHRvIGEgc2luZ2xlLWRpbWVuc2lvbiBhcnJheSBiZWZvcmUgdGhlIG9wZXJhdGlvbi5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnNldFNpemUoc2V0KVxuICAgKiAgICBtYXRoLnNldFNpemUoc2V0LCB1bmlxdWUpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnNldFNpemUoWzEsIDIsIDIsIDRdKSAgICAgICAgICAvLyByZXR1cm5zIDRcbiAgICogICAgbWF0aC5zZXRTaXplKFsxLCAyLCAyLCA0XSwgdHJ1ZSkgICAgLy8gcmV0dXJucyAzXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBzZXRVbmlvbiwgc2V0SW50ZXJzZWN0LCBzZXREaWZmZXJlbmNlXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9ICAgIGEgIEEgbXVsdGlzZXRcbiAgICogQHJldHVybiB7bnVtYmVyfSAgICAgICAgICAgIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgb2YgdGhlIChtdWx0aSlzZXRcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoYSkge1xuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoYSkgPyAoMCwgX2FycmF5LmZsYXR0ZW4pKGEpLmxlbmd0aCA6ICgwLCBfYXJyYXkuZmxhdHRlbikoYS50b0FycmF5KCkpLmxlbmd0aDtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCwgYm9vbGVhbic6IGZ1bmN0aW9uIEFycmF5TWF0cml4Qm9vbGVhbihhLCB1bmlxdWUpIHtcbiAgICAgIGlmICh1bmlxdWUgPT09IGZhbHNlIHx8IGEubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGEpID8gKDAsIF9hcnJheS5mbGF0dGVuKShhKS5sZW5ndGggOiAoMCwgX2FycmF5LmZsYXR0ZW4pKGEudG9BcnJheSgpKS5sZW5ndGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgYiA9ICgwLCBfYXJyYXkuZmxhdHRlbikoQXJyYXkuaXNBcnJheShhKSA/IGEgOiBhLnRvQXJyYXkoKSkuc29ydChjb21wYXJlTmF0dXJhbCk7XG4gICAgICAgIHZhciBjb3VudCA9IDE7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBiLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKGNvbXBhcmVOYXR1cmFsKGJbaV0sIGJbaSAtIDFdKSAhPT0gMCkge1xuICAgICAgICAgICAgY291bnQrKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY291bnQ7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTZXRTaXplID0gY3JlYXRlU2V0U2l6ZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU2V0U3ltRGlmZmVyZW5jZSA9IHZvaWQgMDtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3NldFN5bURpZmZlcmVuY2UnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnc2l6ZScsICdjb25jYXQnLCAnc3Vic2V0JywgJ3NldERpZmZlcmVuY2UnLCAnSW5kZXgnXTtcbnZhciBjcmVhdGVTZXRTeW1EaWZmZXJlbmNlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBjb25jYXQgPSBfcmVmLmNvbmNhdCxcbiAgICAgIHN1YnNldCA9IF9yZWYuc3Vic2V0LFxuICAgICAgc2V0RGlmZmVyZW5jZSA9IF9yZWYuc2V0RGlmZmVyZW5jZSxcbiAgICAgIEluZGV4ID0gX3JlZi5JbmRleDtcblxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBzeW1tZXRyaWMgZGlmZmVyZW5jZSBvZiB0d28gKG11bHRpKXNldHMuXG4gICAqIE11bHRpLWRpbWVuc2lvbiBhcnJheXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gc2luZ2xlLWRpbWVuc2lvbiBhcnJheXMgYmVmb3JlIHRoZSBvcGVyYXRpb24uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5zZXRTeW1EaWZmZXJlbmNlKHNldDEsIHNldDIpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnNldFN5bURpZmZlcmVuY2UoWzEsIDIsIDMsIDRdLCBbMywgNCwgNSwgNl0pICAgICAgICAgICAgLy8gcmV0dXJucyBbMSwgMiwgNSwgNl1cbiAgICogICAgbWF0aC5zZXRTeW1EaWZmZXJlbmNlKFtbMSwgMl0sIFszLCA0XV0sIFtbMywgNF0sIFs1LCA2XV0pICAgIC8vIHJldHVybnMgWzEsIDIsIDUsIDZdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBzZXRVbmlvbiwgc2V0SW50ZXJzZWN0LCBzZXREaWZmZXJlbmNlXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9ICAgIGExICBBIChtdWx0aSlzZXRcbiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0gICAgYTIgIEEgKG11bHRpKXNldFxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gICAgVGhlIHN5bW1ldHJpYyBkaWZmZXJlbmNlIG9mIHR3byAobXVsdGkpc2V0c1xuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnQXJyYXkgfCBNYXRyaXgsIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXhBcnJheU1hdHJpeChhMSwgYTIpIHtcbiAgICAgIGlmIChzdWJzZXQoc2l6ZShhMSksIG5ldyBJbmRleCgwKSkgPT09IDApIHtcbiAgICAgICAgLy8gaWYgYW55IG9mIHRoZW0gaXMgZW1wdHksIHJldHVybiB0aGUgb3RoZXIgb25lXG4gICAgICAgIHJldHVybiAoMCwgX2FycmF5LmZsYXR0ZW4pKGEyKTtcbiAgICAgIH0gZWxzZSBpZiAoc3Vic2V0KHNpemUoYTIpLCBuZXcgSW5kZXgoMCkpID09PSAwKSB7XG4gICAgICAgIHJldHVybiAoMCwgX2FycmF5LmZsYXR0ZW4pKGExKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGIxID0gKDAsIF9hcnJheS5mbGF0dGVuKShhMSk7XG4gICAgICB2YXIgYjIgPSAoMCwgX2FycmF5LmZsYXR0ZW4pKGEyKTtcbiAgICAgIHJldHVybiBjb25jYXQoc2V0RGlmZmVyZW5jZShiMSwgYjIpLCBzZXREaWZmZXJlbmNlKGIyLCBiMSkpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlU2V0U3ltRGlmZmVyZW5jZSA9IGNyZWF0ZVNldFN5bURpZmZlcmVuY2U7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNldFVuaW9uID0gdm9pZCAwO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnc2V0VW5pb24nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnc2l6ZScsICdjb25jYXQnLCAnc3Vic2V0JywgJ3NldEludGVyc2VjdCcsICdzZXRTeW1EaWZmZXJlbmNlJywgJ0luZGV4J107XG52YXIgY3JlYXRlU2V0VW5pb24gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIGNvbmNhdCA9IF9yZWYuY29uY2F0LFxuICAgICAgc3Vic2V0ID0gX3JlZi5zdWJzZXQsXG4gICAgICBzZXRJbnRlcnNlY3QgPSBfcmVmLnNldEludGVyc2VjdCxcbiAgICAgIHNldFN5bURpZmZlcmVuY2UgPSBfcmVmLnNldFN5bURpZmZlcmVuY2UsXG4gICAgICBJbmRleCA9IF9yZWYuSW5kZXg7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSB0aGUgdW5pb24gb2YgdHdvIChtdWx0aSlzZXRzLlxuICAgKiBNdWx0aS1kaW1lbnNpb24gYXJyYXlzIHdpbGwgYmUgY29udmVydGVkIHRvIHNpbmdsZS1kaW1lbnNpb24gYXJyYXlzIGJlZm9yZSB0aGUgb3BlcmF0aW9uLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguc2V0VW5pb24oc2V0MSwgc2V0MilcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguc2V0VW5pb24oWzEsIDIsIDMsIDRdLCBbMywgNCwgNSwgNl0pICAgICAgICAgICAgLy8gcmV0dXJucyBbMSwgMiwgMywgNCwgNSwgNl1cbiAgICogICAgbWF0aC5zZXRVbmlvbihbWzEsIDJdLCBbMywgNF1dLCBbWzMsIDRdLCBbNSwgNl1dKSAgICAvLyByZXR1cm5zIFsxLCAyLCAzLCA0LCA1LCA2XVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgc2V0SW50ZXJzZWN0LCBzZXREaWZmZXJlbmNlXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9ICAgIGExICBBIChtdWx0aSlzZXRcbiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0gICAgYTIgIEEgKG11bHRpKXNldFxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gICAgVGhlIHVuaW9uIG9mIHR3byAobXVsdGkpc2V0c1xuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnQXJyYXkgfCBNYXRyaXgsIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXhBcnJheU1hdHJpeChhMSwgYTIpIHtcbiAgICAgIGlmIChzdWJzZXQoc2l6ZShhMSksIG5ldyBJbmRleCgwKSkgPT09IDApIHtcbiAgICAgICAgLy8gaWYgYW55IG9mIHRoZW0gaXMgZW1wdHksIHJldHVybiB0aGUgb3RoZXIgb25lXG4gICAgICAgIHJldHVybiAoMCwgX2FycmF5LmZsYXR0ZW4pKGEyKTtcbiAgICAgIH0gZWxzZSBpZiAoc3Vic2V0KHNpemUoYTIpLCBuZXcgSW5kZXgoMCkpID09PSAwKSB7XG4gICAgICAgIHJldHVybiAoMCwgX2FycmF5LmZsYXR0ZW4pKGExKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGIxID0gKDAsIF9hcnJheS5mbGF0dGVuKShhMSk7XG4gICAgICB2YXIgYjIgPSAoMCwgX2FycmF5LmZsYXR0ZW4pKGEyKTtcbiAgICAgIHJldHVybiBjb25jYXQoc2V0U3ltRGlmZmVyZW5jZShiMSwgYjIpLCBzZXRJbnRlcnNlY3QoYjEsIGIyKSk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTZXRVbmlvbiA9IGNyZWF0ZVNldFVuaW9uOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVFcmYgPSB2b2lkIDA7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdlcmYnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVFcmYgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBlcmYgZnVuY3Rpb24gb2YgYSB2YWx1ZSB1c2luZyBhIHJhdGlvbmFsIENoZWJ5c2hldlxuICAgKiBhcHByb3hpbWF0aW9ucyBmb3IgZGlmZmVyZW50IGludGVydmFscyBvZiB4LlxuICAgKlxuICAgKiBUaGlzIGlzIGEgdHJhbnNsYXRpb24gb2YgVy4gSi4gQ29keSdzIEZvcnRyYW4gaW1wbGVtZW50YXRpb24gZnJvbSAxOTg3XG4gICAqICggaHR0cHM6Ly93d3cubmV0bGliLm9yZy9zcGVjZnVuL2VyZiApLiBTZWUgdGhlIEFNUyBwdWJsaWNhdGlvblxuICAgKiBcIlJhdGlvbmFsIENoZWJ5c2hldiBBcHByb3hpbWF0aW9ucyBmb3IgdGhlIEVycm9yIEZ1bmN0aW9uXCIgYnkgVy4gSi4gQ29keVxuICAgKiBmb3IgYW4gZXhwbGFuYXRpb24gb2YgdGhpcyBwcm9jZXNzLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguZXJmKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmVyZigwLjIpICAgIC8vIHJldHVybnMgMC4yMjI3MDI1ODkyMTA0Nzg0N1xuICAgKiAgICBtYXRoLmVyZigtMC41KSAgIC8vIHJldHVybnMgLTAuNTIwNDk5ODc3ODEzMDQ2NVxuICAgKiAgICBtYXRoLmVyZig0KSAgICAgIC8vIHJldHVybnMgMC45OTk5OTk5ODQ1ODI3NDIxXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IHggICBBIHJlYWwgbnVtYmVyXG4gICAqIEByZXR1cm4ge251bWJlciB8IEFycmF5IHwgTWF0cml4fSAgICBUaGUgZXJmIG9mIGB4YFxuICAgKi9cbiAgdmFyIGVyZiA9IHR5cGVkKCduYW1lJywge1xuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgICAgIHZhciB5ID0gTWF0aC5hYnMoeCk7XG5cbiAgICAgIGlmICh5ID49IE1BWF9OVU0pIHtcbiAgICAgICAgcmV0dXJuICgwLCBfbnVtYmVyLnNpZ24pKHgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoeSA8PSBUSFJFU0gpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfbnVtYmVyLnNpZ24pKHgpICogZXJmMSh5KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHkgPD0gNC4wKSB7XG4gICAgICAgIHJldHVybiAoMCwgX251bWJlci5zaWduKSh4KSAqICgxIC0gZXJmYzIoeSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gKDAsIF9udW1iZXIuc2lnbikoeCkgKiAoMSAtIGVyZmMzKHkpKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KG4pIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkobiwgZXJmKTtcbiAgICB9IC8vIFRPRE86IEZvciBjb21wbGV4IG51bWJlcnMsIHVzZSB0aGUgYXBwcm94aW1hdGlvbiBmb3IgdGhlIEZhZGRlZXZhIGZ1bmN0aW9uXG4gICAgLy8gIGZyb20gXCJNb3JlIEVmZmljaWVudCBDb21wdXRhdGlvbiBvZiB0aGUgQ29tcGxleCBFcnJvciBGdW5jdGlvblwiIChBTVMpXG5cbiAgfSk7XG4gIC8qKlxuICAgKiBBcHByb3hpbWF0ZXMgdGhlIGVycm9yIGZ1bmN0aW9uIGVyZigpIGZvciB4IDw9IDAuNDY4NzUgdXNpbmcgdGhpcyBmdW5jdGlvbjpcbiAgICogICAgICAgICAgICAgICBuXG4gICAqIGVyZih4KSA9IHggKiBzdW0gKHBfaiAqIHheKDJqKSkgLyAocV9qICogeF4oMmopKVxuICAgKiAgICAgICAgICAgICAgaj0wXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGVyZjEoeSkge1xuICAgIHZhciB5c3EgPSB5ICogeTtcbiAgICB2YXIgeG51bSA9IFBbMF1bNF0gKiB5c3E7XG4gICAgdmFyIHhkZW4gPSB5c3E7XG4gICAgdmFyIGk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSArPSAxKSB7XG4gICAgICB4bnVtID0gKHhudW0gKyBQWzBdW2ldKSAqIHlzcTtcbiAgICAgIHhkZW4gPSAoeGRlbiArIFFbMF1baV0pICogeXNxO1xuICAgIH1cblxuICAgIHJldHVybiB5ICogKHhudW0gKyBQWzBdWzNdKSAvICh4ZGVuICsgUVswXVszXSk7XG4gIH1cbiAgLyoqXG4gICAqIEFwcHJveGltYXRlcyB0aGUgY29tcGxlbWVudCBvZiB0aGUgZXJyb3IgZnVuY3Rpb24gZXJmYygpIGZvclxuICAgKiAwLjQ2ODc1IDw9IHggPD0gNC4wIHVzaW5nIHRoaXMgZnVuY3Rpb246XG4gICAqICAgICAgICAgICAgICAgICAgICAgICBuXG4gICAqIGVyZmMoeCkgPSBlXigteF4yKSAqIHN1bSAocF9qICogeF5qKSAvIChxX2ogKiB4XmopXG4gICAqICAgICAgICAgICAgICAgICAgICAgIGo9MFxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGVyZmMyKHkpIHtcbiAgICB2YXIgeG51bSA9IFBbMV1bOF0gKiB5O1xuICAgIHZhciB4ZGVuID0geTtcbiAgICB2YXIgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpICs9IDEpIHtcbiAgICAgIHhudW0gPSAoeG51bSArIFBbMV1baV0pICogeTtcbiAgICAgIHhkZW4gPSAoeGRlbiArIFFbMV1baV0pICogeTtcbiAgICB9XG5cbiAgICB2YXIgcmVzdWx0ID0gKHhudW0gKyBQWzFdWzddKSAvICh4ZGVuICsgUVsxXVs3XSk7XG4gICAgdmFyIHlzcSA9IHBhcnNlSW50KHkgKiAxNikgLyAxNjtcbiAgICB2YXIgZGVsID0gKHkgLSB5c3EpICogKHkgKyB5c3EpO1xuICAgIHJldHVybiBNYXRoLmV4cCgteXNxICogeXNxKSAqIE1hdGguZXhwKC1kZWwpICogcmVzdWx0O1xuICB9XG4gIC8qKlxuICAgKiBBcHByb3hpbWF0ZXMgdGhlIGNvbXBsZW1lbnQgb2YgdGhlIGVycm9yIGZ1bmN0aW9uIGVyZmMoKSBmb3IgeCA+IDQuMCB1c2luZ1xuICAgKiB0aGlzIGZ1bmN0aW9uOlxuICAgKlxuICAgKiBlcmZjKHgpID0gKGVeKC14XjIpIC8geCkgKiBbIDEvc3FydChwaSkgK1xuICAgKiAgICAgICAgICAgICAgIG5cbiAgICogICAgMS8oeF4yKSAqIHN1bSAocF9qICogeF4oLTJqKSkgLyAocV9qICogeF4oLTJqKSkgXVxuICAgKiAgICAgICAgICAgICAgaj0wXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gZXJmYzMoeSkge1xuICAgIHZhciB5c3EgPSAxIC8gKHkgKiB5KTtcbiAgICB2YXIgeG51bSA9IFBbMl1bNV0gKiB5c3E7XG4gICAgdmFyIHhkZW4gPSB5c3E7XG4gICAgdmFyIGk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSArPSAxKSB7XG4gICAgICB4bnVtID0gKHhudW0gKyBQWzJdW2ldKSAqIHlzcTtcbiAgICAgIHhkZW4gPSAoeGRlbiArIFFbMl1baV0pICogeXNxO1xuICAgIH1cblxuICAgIHZhciByZXN1bHQgPSB5c3EgKiAoeG51bSArIFBbMl1bNF0pIC8gKHhkZW4gKyBRWzJdWzRdKTtcbiAgICByZXN1bHQgPSAoU1FSUEkgLSByZXN1bHQpIC8geTtcbiAgICB5c3EgPSBwYXJzZUludCh5ICogMTYpIC8gMTY7XG4gICAgdmFyIGRlbCA9ICh5IC0geXNxKSAqICh5ICsgeXNxKTtcbiAgICByZXR1cm4gTWF0aC5leHAoLXlzcSAqIHlzcSkgKiBNYXRoLmV4cCgtZGVsKSAqIHJlc3VsdDtcbiAgfVxuXG4gIHJldHVybiBlcmY7XG59KTtcbi8qKlxuICogVXBwZXIgYm91bmQgZm9yIHRoZSBmaXJzdCBhcHByb3hpbWF0aW9uIGludGVydmFsLCAwIDw9IHggPD0gVEhSRVNIXG4gKiBAY29uc3RhbnRcbiAqL1xuXG5leHBvcnRzLmNyZWF0ZUVyZiA9IGNyZWF0ZUVyZjtcbnZhciBUSFJFU0ggPSAwLjQ2ODc1O1xuLyoqXG4gKiBDb25zdGFudCB1c2VkIGJ5IFcuIEouIENvZHkncyBGb3J0cmFuNzcgaW1wbGVtZW50YXRpb24gdG8gZGVub3RlIHNxcnQocGkpXG4gKiBAY29uc3RhbnRcbiAqL1xuXG52YXIgU1FSUEkgPSA1LjY0MTg5NTgzNTQ3NzU2Mjg2OTVlLTE7XG4vKipcbiAqIENvZWZmaWNpZW50cyBmb3IgZWFjaCB0ZXJtIG9mIHRoZSBudW1lcmF0b3Igc3VtIChwX2opIGZvciBlYWNoIGFwcHJveGltYXRpb25cbiAqIGludGVydmFsIChzZWUgVy4gSi4gQ29keSdzIHBhcGVyIGZvciBtb3JlIGRldGFpbHMpXG4gKiBAY29uc3RhbnRcbiAqL1xuXG52YXIgUCA9IFtbMy4xNjExMjM3NDM4NzA1NjU2MGUwMCwgMS4xMzg2NDE1NDE1MTA1MDE1NmUwMiwgMy43NzQ4NTIzNzY4NTMwMjAyMWUwMiwgMy4yMDkzNzc1ODkxMzg0Njk0N2UwMywgMS44NTc3NzcwNjE4NDYwMzE1M2UtMV0sIFs1LjY0MTg4NDk2OTg4NjcwMDg5ZS0xLCA4Ljg4MzE0OTc5NDM4ODM3NTk0ZTAwLCA2LjYxMTkxOTA2MzcxNDE2Mjk1ZTAxLCAyLjk4NjM1MTM4MTk3NDAwMTMxZTAyLCA4LjgxOTUyMjIxMjQxNzY5MDkwZTAyLCAxLjcxMjA0NzYxMjYzNDA3MDU4ZTAzLCAyLjA1MTA3ODM3NzgyNjA3MTQ3ZTAzLCAxLjIzMDMzOTM1NDc5Nzk5NzI1ZTAzLCAyLjE1MzExNTM1NDc0NDAzODQ2ZS04XSwgWzMuMDUzMjY2MzQ5NjEyMzIzNDRlLTEsIDMuNjAzNDQ4OTk5NDk4MDQ0MzllLTEsIDEuMjU3ODE3MjYxMTEyMjkyNDZlLTEsIDEuNjA4Mzc4NTE0ODc0MjI3NjZlLTIsIDYuNTg3NDkxNjE1Mjk4Mzc4MDNlLTQsIDEuNjMxNTM4NzEzNzMwMjA5NzhlLTJdXTtcbi8qKlxuICogQ29lZmZpY2llbnRzIGZvciBlYWNoIHRlcm0gb2YgdGhlIGRlbm9taW5hdG9yIHN1bSAocV9qKSBmb3IgZWFjaCBhcHByb3hpbWF0aW9uXG4gKiBpbnRlcnZhbCAoc2VlIFcuIEouIENvZHkncyBwYXBlciBmb3IgbW9yZSBkZXRhaWxzKVxuICogQGNvbnN0YW50XG4gKi9cblxudmFyIFEgPSBbWzIuMzYwMTI5MDk1MjM0NDEyMDllMDEsIDIuNDQwMjQ2Mzc5MzQ0NDQxNzNlMDIsIDEuMjgyNjE2NTI2MDc3MzcyMjhlMDMsIDIuODQ0MjM2ODMzNDM5MTcwNjJlMDNdLCBbMS41NzQ0OTI2MTEwNzA5ODM0N2UwMSwgMS4xNzY5Mzk1MDg5MTMxMjQ5OWUwMiwgNS4zNzE4MTEwMTg2MjAwOTg1OGUwMiwgMS42MjEzODk1NzQ1NjY2OTAxOWUwMywgMy4yOTA3OTkyMzU3MzM0NTk2M2UwMywgNC4zNjI2MTkwOTAxNDMyNDcxNmUwMywgMy40MzkzNjc2NzQxNDM3MjE2NGUwMywgMS4yMzAzMzkzNTQ4MDM3NDk0MmUwM10sIFsyLjU2ODUyMDE5MjI4OTgyMjQyZTAwLCAxLjg3Mjk1Mjg0OTkyMzQ2MDQ3ZTAwLCA1LjI3OTA1MTAyOTUxNDI4NDEyZS0xLCA2LjA1MTgzNDEzMTI0NDEzMTkxZS0yLCAyLjMzNTIwNDk3NjI2ODY5MTg1ZS0zXV07XG4vKipcbiAqIE1heGltdW0vbWluaW11bSBzYWZlIG51bWJlcnMgdG8gaW5wdXQgdG8gZXJmKCkgKGluIEVTNissIHRoaXMgbnVtYmVyIGlzXG4gKiBOdW1iZXIuW01BWHxNSU5dX1NBRkVfSU5URUdFUikuIGVyZigpIGZvciBhbGwgbnVtYmVycyBiZXlvbmQgdGhpcyBsaW1pdCB3aWxsXG4gKiByZXR1cm4gMVxuICovXG5cbnZhciBNQVhfTlVNID0gTWF0aC5wb3coMiwgNTMpOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVNYWQgPSB2b2lkIDA7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2ltcHJvdmVFcnJvck1lc3NhZ2UgPSByZXF1aXJlKFwiLi91dGlscy9pbXByb3ZlRXJyb3JNZXNzYWdlXCIpO1xuXG52YXIgbmFtZSA9ICdtYWQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnYWJzJywgJ21hcCcsICdtZWRpYW4nLCAnc3VidHJhY3QnXTtcbnZhciBjcmVhdGVNYWQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgYWJzID0gX3JlZi5hYnMsXG4gICAgICBtYXAgPSBfcmVmLm1hcCxcbiAgICAgIG1lZGlhbiA9IF9yZWYubWVkaWFuLFxuICAgICAgc3VidHJhY3QgPSBfcmVmLnN1YnRyYWN0O1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBtZWRpYW4gYWJzb2x1dGUgZGV2aWF0aW9uIG9mIGEgbWF0cml4IG9yIGEgbGlzdCB3aXRoIHZhbHVlcy5cbiAgICogVGhlIG1lZGlhbiBhYnNvbHV0ZSBkZXZpYXRpb24gaXMgZGVmaW5lZCBhcyB0aGUgbWVkaWFuIG9mIHRoZSBhYnNvbHV0ZVxuICAgKiBkZXZpYXRpb25zIGZyb20gdGhlIG1lZGlhbi5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5tYWQoYSwgYiwgYywgLi4uKVxuICAgKiAgICAgbWF0aC5tYWQoQSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLm1hZCgxMCwgMjAsIDMwKSAgICAgICAgICAgICAvLyByZXR1cm5zIDEwXG4gICAqICAgICBtYXRoLm1hZChbMSwgMiwgM10pICAgICAgICAgICAgICAvLyByZXR1cm5zIDFcbiAgICogICAgIG1hdGgubWFkKFtbMSwgMiwgM10sIFs0LCA1LCA2XV0pIC8vIHJldHVybnMgMS41XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgbWVkaWFuLCBtZWFuLCBzdGQsIGFic1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSBhcnJheVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIEEgc2luZ2xlIG1hdHJpeCBvciBtdWx0aXBsZSBzY2FsYXIgdmFsdWVzLlxuICAgKiBAcmV0dXJuIHsqfSBUaGUgbWVkaWFuIGFic29sdXRlIGRldmlhdGlvbi5cbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgLy8gbWFkKFthLCBiLCBjLCBkLCAuLi5dKVxuICAgICdBcnJheSB8IE1hdHJpeCc6IF9tYWQsXG4gICAgLy8gbWFkKGEsIGIsIGMsIGQsIC4uLilcbiAgICAnLi4uJzogZnVuY3Rpb24gXyhhcmdzKSB7XG4gICAgICByZXR1cm4gX21hZChhcmdzKTtcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIF9tYWQoYXJyYXkpIHtcbiAgICBhcnJheSA9ICgwLCBfYXJyYXkuZmxhdHRlbikoYXJyYXkudmFsdWVPZigpKTtcblxuICAgIGlmIChhcnJheS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSBtZWRpYW4gYWJzb2x1dGUgZGV2aWF0aW9uIChtYWQpIG9mIGFuIGVtcHR5IGFycmF5Jyk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHZhciBtZWQgPSBtZWRpYW4oYXJyYXkpO1xuICAgICAgcmV0dXJuIG1lZGlhbihtYXAoYXJyYXksIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gYWJzKHN1YnRyYWN0KHZhbHVlLCBtZWQpKTtcbiAgICAgIH0pKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBUeXBlRXJyb3IgJiYgZXJyLm1lc3NhZ2UuaW5kZXhPZignbWVkaWFuJykgIT09IC0xKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZXJyLm1lc3NhZ2UucmVwbGFjZSgnbWVkaWFuJywgJ21hZCcpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93ICgwLCBfaW1wcm92ZUVycm9yTWVzc2FnZS5pbXByb3ZlRXJyb3JNZXNzYWdlKShlcnIsICdtYWQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVNYWQgPSBjcmVhdGVNYWQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU1heCA9IHZvaWQgMDtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2ltcHJvdmVFcnJvck1lc3NhZ2UgPSByZXF1aXJlKFwiLi91dGlscy9pbXByb3ZlRXJyb3JNZXNzYWdlXCIpO1xuXG52YXIgbmFtZSA9ICdtYXgnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbGFyZ2VyJ107XG52YXIgY3JlYXRlTWF4ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGxhcmdlciA9IF9yZWYubGFyZ2VyO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBtYXhpbXVtIHZhbHVlIG9mIGEgbWF0cml4IG9yIGEgIGxpc3Qgd2l0aCB2YWx1ZXMuXG4gICAqIEluIGNhc2Ugb2YgYSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheSwgdGhlIG1heGltdW0gb2YgdGhlIGZsYXR0ZW5lZCBhcnJheVxuICAgKiB3aWxsIGJlIGNhbGN1bGF0ZWQuIFdoZW4gYGRpbWAgaXMgcHJvdmlkZWQsIHRoZSBtYXhpbXVtIG92ZXIgdGhlIHNlbGVjdGVkXG4gICAqIGRpbWVuc2lvbiB3aWxsIGJlIGNhbGN1bGF0ZWQuIFBhcmFtZXRlciBgZGltYCBpcyB6ZXJvLWJhc2VkLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLm1heChhLCBiLCBjLCAuLi4pXG4gICAqICAgICBtYXRoLm1heChBKVxuICAgKiAgICAgbWF0aC5tYXgoQSwgZGltKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGgubWF4KDIsIDEsIDQsIDMpICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyA0XG4gICAqICAgICBtYXRoLm1heChbMiwgMSwgNCwgM10pICAgICAgICAgICAgICAgIC8vIHJldHVybnMgNFxuICAgKlxuICAgKiAgICAgLy8gbWF4aW11bSBvdmVyIGEgc3BlY2lmaWVkIGRpbWVuc2lvbiAoemVyby1iYXNlZClcbiAgICogICAgIG1hdGgubWF4KFtbMiwgNV0sIFs0LCAzXSwgWzEsIDddXSwgMCkgLy8gcmV0dXJucyBbNCwgN11cbiAgICogICAgIG1hdGgubWF4KFtbMiwgNV0sIFs0LCAzXV0sIFsxLCA3XSwgMSkgLy8gcmV0dXJucyBbNSwgNCwgN11cbiAgICpcbiAgICogICAgIG1hdGgubWF4KDIuNywgNy4xLCAtNC41LCAyLjAsIDQuMSkgICAgLy8gcmV0dXJucyA3LjFcbiAgICogICAgIG1hdGgubWluKDIuNywgNy4xLCAtNC41LCAyLjAsIDQuMSkgICAgLy8gcmV0dXJucyAtNC41XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBtZWFuLCBtZWRpYW4sIG1pbiwgcHJvZCwgc3RkLCBzdW0sIHZhcmlhbmNlXG4gICAqXG4gICAqIEBwYXJhbSB7Li4uICp9IGFyZ3MgIEEgc2luZ2xlIG1hdHJpeCBvciBvciBtdWx0aXBsZSBzY2FsYXIgdmFsdWVzXG4gICAqIEByZXR1cm4geyp9IFRoZSBtYXhpbXVtIHZhbHVlXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIC8vIG1heChbYSwgYiwgYywgZCwgLi4uXSlcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBfbWF4LFxuICAgIC8vIG1heChbYSwgYiwgYywgZCwgLi4uXSwgZGltKVxuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhOdW1iZXJCaWdOdW1iZXIoYXJyYXksIGRpbSkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5yZWR1Y2UpKGFycmF5LCBkaW0udmFsdWVPZigpLCBfbGFyZ2VzdCk7XG4gICAgfSxcbiAgICAvLyBtYXgoYSwgYiwgYywgZCwgLi4uKVxuICAgICcuLi4nOiBmdW5jdGlvbiBfKGFyZ3MpIHtcbiAgICAgIGlmICgoMCwgX2NvbGxlY3Rpb24uY29udGFpbnNDb2xsZWN0aW9ucykoYXJncykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignU2NhbGFyIHZhbHVlcyBleHBlY3RlZCBpbiBmdW5jdGlvbiBtYXgnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9tYXgoYXJncyk7XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIFJldHVybiB0aGUgbGFyZ2VzdCBvZiB0d28gdmFsdWVzXG4gICAqIEBwYXJhbSB7Kn0geFxuICAgKiBAcGFyYW0geyp9IHlcbiAgICogQHJldHVybnMgeyp9IFJldHVybnMgeCB3aGVuIHggaXMgbGFyZ2VzdCwgb3IgeSB3aGVuIHkgaXMgbGFyZ2VzdFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfbGFyZ2VzdCh4LCB5KSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBsYXJnZXIoeCwgeSkgPyB4IDogeTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRocm93ICgwLCBfaW1wcm92ZUVycm9yTWVzc2FnZS5pbXByb3ZlRXJyb3JNZXNzYWdlKShlcnIsICdtYXgnLCB5KTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IGNhbGN1bGF0ZSB0aGUgbWF4aW11bSB2YWx1ZSBpbiBhbiBuLWRpbWVuc2lvbmFsIGFycmF5XG4gICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gICAqIEByZXR1cm4ge251bWJlcn0gbWF4XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX21heChhcnJheSkge1xuICAgIHZhciByZXM7XG4gICAgKDAsIF9jb2xsZWN0aW9uLmRlZXBGb3JFYWNoKShhcnJheSwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoaXNOYU4odmFsdWUpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICByZXMgPSBOYU47XG4gICAgICAgIH0gZWxzZSBpZiAocmVzID09PSB1bmRlZmluZWQgfHwgbGFyZ2VyKHZhbHVlLCByZXMpKSB7XG4gICAgICAgICAgcmVzID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyAoMCwgX2ltcHJvdmVFcnJvck1lc3NhZ2UuaW1wcm92ZUVycm9yTWVzc2FnZSkoZXJyLCAnbWF4JywgdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHJlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjYWxjdWxhdGUgbWF4IG9mIGFuIGVtcHR5IGFycmF5Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZU1heCA9IGNyZWF0ZU1heDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTWVhbiA9IHZvaWQgMDtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2ltcHJvdmVFcnJvck1lc3NhZ2UgPSByZXF1aXJlKFwiLi91dGlscy9pbXByb3ZlRXJyb3JNZXNzYWdlXCIpO1xuXG52YXIgbmFtZSA9ICdtZWFuJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FkZCcsICdkaXZpZGUnXTtcbnZhciBjcmVhdGVNZWFuID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGFkZCA9IF9yZWYuYWRkLFxuICAgICAgZGl2aWRlID0gX3JlZi5kaXZpZGU7XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIG1lYW4gdmFsdWUgb2YgbWF0cml4IG9yIGEgbGlzdCB3aXRoIHZhbHVlcy5cbiAgICogSW4gY2FzZSBvZiBhIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5LCB0aGUgbWVhbiBvZiB0aGUgZmxhdHRlbmVkIGFycmF5XG4gICAqIHdpbGwgYmUgY2FsY3VsYXRlZC4gV2hlbiBgZGltYCBpcyBwcm92aWRlZCwgdGhlIG1heGltdW0gb3ZlciB0aGUgc2VsZWN0ZWRcbiAgICogZGltZW5zaW9uIHdpbGwgYmUgY2FsY3VsYXRlZC4gUGFyYW1ldGVyIGBkaW1gIGlzIHplcm8tYmFzZWQuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGgubWVhbihhLCBiLCBjLCAuLi4pXG4gICAqICAgICBtYXRoLm1lYW4oQSlcbiAgICogICAgIG1hdGgubWVhbihBLCBkaW0pXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgbWF0aC5tZWFuKDIsIDEsIDQsIDMpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAyLjVcbiAgICogICAgIG1hdGgubWVhbihbMSwgMi43LCAzLjIsIDRdKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgMi43MjVcbiAgICpcbiAgICogICAgIG1hdGgubWVhbihbWzIsIDVdLCBbNiwgM10sIFsxLCA3XV0sIDApICAgIC8vIHJldHVybnMgWzMsIDVdXG4gICAqICAgICBtYXRoLm1lYW4oW1syLCA1XSwgWzYsIDNdLCBbMSwgN11dLCAxKSAgICAvLyByZXR1cm5zIFszLjUsIDQuNSwgNF1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBtZWRpYW4sIG1pbiwgbWF4LCBzdW0sIHByb2QsIHN0ZCwgdmFyaWFuY2VcbiAgICpcbiAgICogQHBhcmFtIHsuLi4gKn0gYXJncyAgQSBzaW5nbGUgbWF0cml4IG9yIG9yIG11bHRpcGxlIHNjYWxhciB2YWx1ZXNcbiAgICogQHJldHVybiB7Kn0gVGhlIG1lYW4gb2YgYWxsIHZhbHVlc1xuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAvLyBtZWFuKFthLCBiLCBjLCBkLCAuLi5dKVxuICAgICdBcnJheSB8IE1hdHJpeCc6IF9tZWFuLFxuICAgIC8vIG1lYW4oW2EsIGIsIGMsIGQsIC4uLl0sIGRpbSlcbiAgICAnQXJyYXkgfCBNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IF9ubWVhbkRpbSxcbiAgICAvLyBtZWFuKGEsIGIsIGMsIGQsIC4uLilcbiAgICAnLi4uJzogZnVuY3Rpb24gXyhhcmdzKSB7XG4gICAgICBpZiAoKDAsIF9jb2xsZWN0aW9uLmNvbnRhaW5zQ29sbGVjdGlvbnMpKGFyZ3MpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1NjYWxhciB2YWx1ZXMgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gbWVhbicpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX21lYW4oYXJncyk7XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgbWVhbiB2YWx1ZSBpbiBhbiBuLWRpbWVuc2lvbmFsIGFycmF5LCByZXR1cm5pbmcgYVxuICAgKiBuLTEgZGltZW5zaW9uYWwgYXJyYXlcbiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXlcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRpbVxuICAgKiBAcmV0dXJuIHtudW1iZXJ9IG1lYW5cbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgZnVuY3Rpb24gX25tZWFuRGltKGFycmF5LCBkaW0pIHtcbiAgICB0cnkge1xuICAgICAgdmFyIHN1bSA9ICgwLCBfY29sbGVjdGlvbi5yZWR1Y2UpKGFycmF5LCBkaW0sIGFkZCk7XG4gICAgICB2YXIgcyA9IEFycmF5LmlzQXJyYXkoYXJyYXkpID8gKDAsIF9hcnJheS5hcnJheVNpemUpKGFycmF5KSA6IGFycmF5LnNpemUoKTtcbiAgICAgIHJldHVybiBkaXZpZGUoc3VtLCBzW2RpbV0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgKDAsIF9pbXByb3ZlRXJyb3JNZXNzYWdlLmltcHJvdmVFcnJvck1lc3NhZ2UpKGVyciwgJ21lYW4nKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IGNhbGN1bGF0ZSB0aGUgbWVhbiB2YWx1ZSBpbiBhbiBuLWRpbWVuc2lvbmFsIGFycmF5XG4gICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gICAqIEByZXR1cm4ge251bWJlcn0gbWVhblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9tZWFuKGFycmF5KSB7XG4gICAgdmFyIHN1bTtcbiAgICB2YXIgbnVtID0gMDtcbiAgICAoMCwgX2NvbGxlY3Rpb24uZGVlcEZvckVhY2gpKGFycmF5LCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHN1bSA9IHN1bSA9PT0gdW5kZWZpbmVkID8gdmFsdWUgOiBhZGQoc3VtLCB2YWx1ZSk7XG4gICAgICAgIG51bSsrO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93ICgwLCBfaW1wcm92ZUVycm9yTWVzc2FnZS5pbXByb3ZlRXJyb3JNZXNzYWdlKShlcnIsICdtZWFuJywgdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKG51bSA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY2FsY3VsYXRlIHRoZSBtZWFuIG9mIGFuIGVtcHR5IGFycmF5Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpdmlkZShzdW0sIG51bSk7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVNZWFuID0gY3JlYXRlTWVhbjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTWVkaWFuID0gdm9pZCAwO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfaW1wcm92ZUVycm9yTWVzc2FnZSA9IHJlcXVpcmUoXCIuL3V0aWxzL2ltcHJvdmVFcnJvck1lc3NhZ2VcIik7XG5cbnZhciBuYW1lID0gJ21lZGlhbic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdhZGQnLCAnZGl2aWRlJywgJ2NvbXBhcmUnLCAncGFydGl0aW9uU2VsZWN0J107XG52YXIgY3JlYXRlTWVkaWFuID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGFkZCA9IF9yZWYuYWRkLFxuICAgICAgZGl2aWRlID0gX3JlZi5kaXZpZGUsXG4gICAgICBjb21wYXJlID0gX3JlZi5jb21wYXJlLFxuICAgICAgcGFydGl0aW9uU2VsZWN0ID0gX3JlZi5wYXJ0aXRpb25TZWxlY3Q7XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIG1lZGlhbiBvZiBhIG1hdHJpeCBvciBhIGxpc3Qgd2l0aCB2YWx1ZXMuIFRoZSB2YWx1ZXMgYXJlXG4gICAqIHNvcnRlZCBhbmQgdGhlIG1pZGRsZSB2YWx1ZSBpcyByZXR1cm5lZC4gSW4gY2FzZSBvZiBhbiBldmVuIG51bWJlciBvZlxuICAgKiB2YWx1ZXMsIHRoZSBhdmVyYWdlIG9mIHRoZSB0d28gbWlkZGxlIHZhbHVlcyBpcyByZXR1cm5lZC5cbiAgICogU3VwcG9ydGVkIHR5cGVzIG9mIHZhbHVlcyBhcmU6IE51bWJlciwgQmlnTnVtYmVyLCBVbml0XG4gICAqXG4gICAqIEluIGNhc2Ugb2YgYSAobXVsdGkgZGltZW5zaW9uYWwpIGFycmF5IG9yIG1hdHJpeCwgdGhlIG1lZGlhbiBvZiBhbGxcbiAgICogZWxlbWVudHMgd2lsbCBiZSBjYWxjdWxhdGVkLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLm1lZGlhbihhLCBiLCBjLCAuLi4pXG4gICAqICAgICBtYXRoLm1lZGlhbihBKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGgubWVkaWFuKDUsIDIsIDcpICAgICAgICAvLyByZXR1cm5zIDVcbiAgICogICAgIG1hdGgubWVkaWFuKFszLCAtMSwgNSwgN10pICAvLyByZXR1cm5zIDRcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBtZWFuLCBtaW4sIG1heCwgc3VtLCBwcm9kLCBzdGQsIHZhcmlhbmNlLCBxdWFudGlsZVNlcVxuICAgKlxuICAgKiBAcGFyYW0gey4uLiAqfSBhcmdzICBBIHNpbmdsZSBtYXRyaXggb3Igb3IgbXVsdGlwbGUgc2NhbGFyIHZhbHVlc1xuICAgKiBAcmV0dXJuIHsqfSBUaGUgbWVkaWFuXG4gICAqL1xuICB2YXIgbWVkaWFuID0gdHlwZWQobmFtZSwge1xuICAgIC8vIG1lZGlhbihbYSwgYiwgYywgZCwgLi4uXSlcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBfbWVkaWFuLFxuICAgIC8vIG1lZGlhbihbYSwgYiwgYywgZCwgLi4uXSwgZGltKVxuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhOdW1iZXJCaWdOdW1iZXIoYXJyYXksIGRpbSkge1xuICAgICAgLy8gVE9ETzogaW1wbGVtZW50IG1lZGlhbihBLCBkaW0pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21lZGlhbihBLCBkaW0pIGlzIG5vdCB5ZXQgc3VwcG9ydGVkJyk7IC8vIHJldHVybiByZWR1Y2UoYXJndW1lbnRzWzBdLCBhcmd1bWVudHNbMV0sIC4uLilcbiAgICB9LFxuICAgIC8vIG1lZGlhbihhLCBiLCBjLCBkLCAuLi4pXG4gICAgJy4uLic6IGZ1bmN0aW9uIF8oYXJncykge1xuICAgICAgaWYgKCgwLCBfY29sbGVjdGlvbi5jb250YWluc0NvbGxlY3Rpb25zKShhcmdzKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTY2FsYXIgdmFsdWVzIGV4cGVjdGVkIGluIGZ1bmN0aW9uIG1lZGlhbicpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX21lZGlhbihhcmdzKTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogUmVjdXJzaXZlbHkgY2FsY3VsYXRlIHRoZSBtZWRpYW4gb2YgYW4gbi1kaW1lbnNpb25hbCBhcnJheVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheVxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9IG1lZGlhblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfbWVkaWFuKGFycmF5KSB7XG4gICAgdHJ5IHtcbiAgICAgIGFycmF5ID0gKDAsIF9hcnJheS5mbGF0dGVuKShhcnJheS52YWx1ZU9mKCkpO1xuICAgICAgdmFyIG51bSA9IGFycmF5Lmxlbmd0aDtcblxuICAgICAgaWYgKG51bSA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjYWxjdWxhdGUgbWVkaWFuIG9mIGFuIGVtcHR5IGFycmF5Jyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChudW0gJSAyID09PSAwKSB7XG4gICAgICAgIC8vIGV2ZW46IHJldHVybiB0aGUgYXZlcmFnZSBvZiB0aGUgdHdvIG1pZGRsZSB2YWx1ZXNcbiAgICAgICAgdmFyIG1pZCA9IG51bSAvIDIgLSAxO1xuICAgICAgICB2YXIgcmlnaHQgPSBwYXJ0aXRpb25TZWxlY3QoYXJyYXksIG1pZCArIDEpOyAvLyBhcnJheSBub3cgcGFydGl0aW9uZWQgYXQgbWlkICsgMSwgdGFrZSBtYXggb2YgbGVmdCBwYXJ0XG5cbiAgICAgICAgdmFyIGxlZnQgPSBhcnJheVttaWRdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWlkOyArK2kpIHtcbiAgICAgICAgICBpZiAoY29tcGFyZShhcnJheVtpXSwgbGVmdCkgPiAwKSB7XG4gICAgICAgICAgICBsZWZ0ID0gYXJyYXlbaV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1pZGRsZTIobGVmdCwgcmlnaHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gb2RkOiByZXR1cm4gdGhlIG1pZGRsZSB2YWx1ZVxuICAgICAgICB2YXIgbSA9IHBhcnRpdGlvblNlbGVjdChhcnJheSwgKG51bSAtIDEpIC8gMik7XG4gICAgICAgIHJldHVybiBtaWRkbGUobSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aHJvdyAoMCwgX2ltcHJvdmVFcnJvck1lc3NhZ2UuaW1wcm92ZUVycm9yTWVzc2FnZSkoZXJyLCAnbWVkaWFuJyk7XG4gICAgfVxuICB9IC8vIGhlbHBlciBmdW5jdGlvbiB0byB0eXBlIGNoZWNrIHRoZSBtaWRkbGUgdmFsdWUgb2YgdGhlIGFycmF5XG5cblxuICB2YXIgbWlkZGxlID0gdHlwZWQoe1xuICAgICdudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckNvbXBsZXhVbml0KHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICB9KTsgLy8gaGVscGVyIGZ1bmN0aW9uIHRvIHR5cGUgY2hlY2sgdGhlIHR3byBtaWRkbGUgdmFsdWUgb2YgdGhlIGFycmF5XG5cbiAgdmFyIG1pZGRsZTIgPSB0eXBlZCh7XG4gICAgJ251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0LCBudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckNvbXBsZXhVbml0TnVtYmVyQmlnTnVtYmVyQ29tcGxleFVuaXQobGVmdCwgcmlnaHQpIHtcbiAgICAgIHJldHVybiBkaXZpZGUoYWRkKGxlZnQsIHJpZ2h0KSwgMik7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG1lZGlhbjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVNZWRpYW4gPSBjcmVhdGVNZWRpYW47IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU1pbiA9IHZvaWQgMDtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2ltcHJvdmVFcnJvck1lc3NhZ2UgPSByZXF1aXJlKFwiLi91dGlscy9pbXByb3ZlRXJyb3JNZXNzYWdlXCIpO1xuXG52YXIgbmFtZSA9ICdtaW4nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnc21hbGxlciddO1xudmFyIGNyZWF0ZU1pbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBzbWFsbGVyID0gX3JlZi5zbWFsbGVyO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBtaW5pbXVtIHZhbHVlIG9mIGEgbWF0cml4IG9yIGEgIGxpc3Qgb2YgdmFsdWVzLlxuICAgKiBJbiBjYXNlIG9mIGEgbXVsdGkgZGltZW5zaW9uYWwgYXJyYXksIHRoZSBtaW5pbXVtIG9mIHRoZSBmbGF0dGVuZWQgYXJyYXlcbiAgICogd2lsbCBiZSBjYWxjdWxhdGVkLiBXaGVuIGBkaW1gIGlzIHByb3ZpZGVkLCB0aGUgbWluaW11bSBvdmVyIHRoZSBzZWxlY3RlZFxuICAgKiBkaW1lbnNpb24gd2lsbCBiZSBjYWxjdWxhdGVkLiBQYXJhbWV0ZXIgYGRpbWAgaXMgemVyby1iYXNlZC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5taW4oYSwgYiwgYywgLi4uKVxuICAgKiAgICAgbWF0aC5taW4oQSlcbiAgICogICAgIG1hdGgubWluKEEsIGRpbSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLm1pbigyLCAxLCA0LCAzKSAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgMVxuICAgKiAgICAgbWF0aC5taW4oWzIsIDEsIDQsIDNdKSAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDFcbiAgICpcbiAgICogICAgIC8vIG1pbmltdW0gb3ZlciBhIHNwZWNpZmllZCBkaW1lbnNpb24gKHplcm8tYmFzZWQpXG4gICAqICAgICBtYXRoLm1pbihbWzIsIDVdLCBbNCwgM10sIFsxLCA3XV0sIDApIC8vIHJldHVybnMgWzEsIDNdXG4gICAqICAgICBtYXRoLm1pbihbWzIsIDVdLCBbNCwgM10sIFsxLCA3XV0sIDEpIC8vIHJldHVybnMgWzIsIDMsIDFdXG4gICAqXG4gICAqICAgICBtYXRoLm1heCgyLjcsIDcuMSwgLTQuNSwgMi4wLCA0LjEpICAgIC8vIHJldHVybnMgNy4xXG4gICAqICAgICBtYXRoLm1pbigyLjcsIDcuMSwgLTQuNSwgMi4wLCA0LjEpICAgIC8vIHJldHVybnMgLTQuNVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgbWVhbiwgbWVkaWFuLCBtYXgsIHByb2QsIHN0ZCwgc3VtLCB2YXJpYW5jZVxuICAgKlxuICAgKiBAcGFyYW0gey4uLiAqfSBhcmdzICBBIHNpbmdsZSBtYXRyaXggb3Igb3IgbXVsdGlwbGUgc2NhbGFyIHZhbHVlc1xuICAgKiBAcmV0dXJuIHsqfSBUaGUgbWluaW11bSB2YWx1ZVxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAvLyBtaW4oW2EsIGIsIGMsIGQsIC4uLl0pXG4gICAgJ0FycmF5IHwgTWF0cml4JzogX21pbixcbiAgICAvLyBtaW4oW2EsIGIsIGMsIGQsIC4uLl0sIGRpbSlcbiAgICAnQXJyYXkgfCBNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIEFycmF5TWF0cml4TnVtYmVyQmlnTnVtYmVyKGFycmF5LCBkaW0pIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24ucmVkdWNlKShhcnJheSwgZGltLnZhbHVlT2YoKSwgX3NtYWxsZXN0KTtcbiAgICB9LFxuICAgIC8vIG1pbihhLCBiLCBjLCBkLCAuLi4pXG4gICAgJy4uLic6IGZ1bmN0aW9uIF8oYXJncykge1xuICAgICAgaWYgKCgwLCBfY29sbGVjdGlvbi5jb250YWluc0NvbGxlY3Rpb25zKShhcmdzKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTY2FsYXIgdmFsdWVzIGV4cGVjdGVkIGluIGZ1bmN0aW9uIG1pbicpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX21pbihhcmdzKTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogUmV0dXJuIHRoZSBzbWFsbGVzdCBvZiB0d28gdmFsdWVzXG4gICAqIEBwYXJhbSB7Kn0geFxuICAgKiBAcGFyYW0geyp9IHlcbiAgICogQHJldHVybnMgeyp9IFJldHVybnMgeCB3aGVuIHggaXMgc21hbGxlc3QsIG9yIHkgd2hlbiB5IGlzIHNtYWxsZXN0XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9zbWFsbGVzdCh4LCB5KSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBzbWFsbGVyKHgsIHkpID8geCA6IHk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aHJvdyAoMCwgX2ltcHJvdmVFcnJvck1lc3NhZ2UuaW1wcm92ZUVycm9yTWVzc2FnZSkoZXJyLCAnbWluJywgeSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZWN1cnNpdmVseSBjYWxjdWxhdGUgdGhlIG1pbmltdW0gdmFsdWUgaW4gYW4gbi1kaW1lbnNpb25hbCBhcnJheVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheVxuICAgKiBAcmV0dXJuIHtudW1iZXJ9IG1pblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9taW4oYXJyYXkpIHtcbiAgICB2YXIgbWluO1xuICAgICgwLCBfY29sbGVjdGlvbi5kZWVwRm9yRWFjaCkoYXJyYXksIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSAmJiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgbWluID0gTmFOO1xuICAgICAgICB9IGVsc2UgaWYgKG1pbiA9PT0gdW5kZWZpbmVkIHx8IHNtYWxsZXIodmFsdWUsIG1pbikpIHtcbiAgICAgICAgICBtaW4gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93ICgwLCBfaW1wcm92ZUVycm9yTWVzc2FnZS5pbXByb3ZlRXJyb3JNZXNzYWdlKShlcnIsICdtaW4nLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAobWluID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSBtaW4gb2YgYW4gZW1wdHkgYXJyYXknKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWluO1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlTWluID0gY3JlYXRlTWluOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVNb2RlID0gdm9pZCAwO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnbW9kZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdpc05hTicsICdpc051bWVyaWMnXTtcbnZhciBjcmVhdGVNb2RlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGlzTmFOID0gX3JlZi5pc05hTixcbiAgICAgIGlzTnVtZXJpYyA9IF9yZWYuaXNOdW1lcmljO1xuXG4gIC8qKlxuICAqIENvbXB1dGVzIHRoZSBtb2RlIG9mIGEgc2V0IG9mIG51bWJlcnMgb3IgYSBsaXN0IHdpdGggdmFsdWVzKG51bWJlcnMgb3IgY2hhcmFjdGVycykuXG4gICogSWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgbW9kZXMsIGl0IHJldHVybnMgYSBsaXN0IG9mIHRob3NlIHZhbHVlcy5cbiAgKlxuICAqIFN5bnRheDpcbiAgKlxuICAqICAgICBtYXRoLm1vZGUoYSwgYiwgYywgLi4uKVxuICAqICAgICBtYXRoLm1vZGUoQSlcbiAgKlxuICAqIEV4YW1wbGVzOlxuICAqXG4gICogICAgIG1hdGgubW9kZSgyLCAxLCA0LCAzLCAxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIFsxXVxuICAqICAgICBtYXRoLm1vZGUoWzEsIDIuNywgMy4yLCA0LCAyLjddKSAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBbMi43XVxuICAqICAgICBtYXRoLm1vZGUoMSwgNCwgNiwgMSwgNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgWzEsIDZdXG4gICogICAgIG1hdGgubW9kZSgnYScsJ2EnLCdiJywnYycpICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBbXCJhXCJdXG4gICogICAgIG1hdGgubW9kZSgxLCAxLjUsICdhYmMnKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBbMSwgMS41LCBcImFiY1wiXVxuICAqXG4gICogU2VlIGFsc286XG4gICpcbiAgKiAgICAgbWVkaWFuLFxuICAqICAgICBtZWFuXG4gICpcbiAgKiBAcGFyYW0gey4uLiAqfSBhcmdzICBBIHNpbmdsZSBtYXRyaXhcbiAgKiBAcmV0dXJuIHsqfSBUaGUgbW9kZSBvZiBhbGwgdmFsdWVzXG4gICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ0FycmF5IHwgTWF0cml4JzogX21vZGUsXG4gICAgJy4uLic6IGZ1bmN0aW9uIF8oYXJncykge1xuICAgICAgcmV0dXJuIF9tb2RlKGFyZ3MpO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBtb2RlIGluIGFuIDEtZGltZW5zaW9uYWwgYXJyYXlcbiAgICogQHBhcmFtIHtBcnJheX0gdmFsdWVzXG4gICAqIEByZXR1cm4ge0FycmF5fSBtb2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9tb2RlKHZhbHVlcykge1xuICAgIHZhbHVlcyA9ICgwLCBfYXJyYXkuZmxhdHRlbikodmFsdWVzLnZhbHVlT2YoKSk7XG4gICAgdmFyIG51bSA9IHZhbHVlcy5sZW5ndGg7XG5cbiAgICBpZiAobnVtID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjYWxjdWxhdGUgbW9kZSBvZiBhbiBlbXB0eSBhcnJheScpO1xuICAgIH1cblxuICAgIHZhciBjb3VudCA9IHt9O1xuICAgIHZhciBtb2RlID0gW107XG4gICAgdmFyIG1heCA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbHVlID0gdmFsdWVzW2ldO1xuXG4gICAgICBpZiAoaXNOdW1lcmljKHZhbHVlKSAmJiBpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY2FsY3VsYXRlIG1vZGUgb2YgYW4gYXJyYXkgY29udGFpbmluZyBOYU4gdmFsdWVzJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghKHZhbHVlIGluIGNvdW50KSkge1xuICAgICAgICBjb3VudFt2YWx1ZV0gPSAwO1xuICAgICAgfVxuXG4gICAgICBjb3VudFt2YWx1ZV0rKztcblxuICAgICAgaWYgKGNvdW50W3ZhbHVlXSA9PT0gbWF4KSB7XG4gICAgICAgIG1vZGUucHVzaCh2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKGNvdW50W3ZhbHVlXSA+IG1heCkge1xuICAgICAgICBtYXggPSBjb3VudFt2YWx1ZV07XG4gICAgICAgIG1vZGUgPSBbdmFsdWVdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtb2RlO1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlTW9kZSA9IGNyZWF0ZU1vZGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVByb2QgPSB2b2lkIDA7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9pbXByb3ZlRXJyb3JNZXNzYWdlID0gcmVxdWlyZShcIi4vdXRpbHMvaW1wcm92ZUVycm9yTWVzc2FnZVwiKTtcblxudmFyIG5hbWUgPSAncHJvZCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtdWx0aXBseSddO1xudmFyIGNyZWF0ZVByb2QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5O1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBwcm9kdWN0IG9mIGEgbWF0cml4IG9yIGEgbGlzdCB3aXRoIHZhbHVlcy5cbiAgICogSW4gY2FzZSBvZiBhIChtdWx0aSBkaW1lbnNpb25hbCkgYXJyYXkgb3IgbWF0cml4LCB0aGUgc3VtIG9mIGFsbFxuICAgKiBlbGVtZW50cyB3aWxsIGJlIGNhbGN1bGF0ZWQuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGgucHJvZChhLCBiLCBjLCAuLi4pXG4gICAqICAgICBtYXRoLnByb2QoQSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLm11bHRpcGx5KDIsIDMpICAgICAgICAgICAvLyByZXR1cm5zIDZcbiAgICogICAgIG1hdGgucHJvZCgyLCAzKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgNlxuICAgKiAgICAgbWF0aC5wcm9kKDIsIDMsIDQpICAgICAgICAgICAgLy8gcmV0dXJucyAyNFxuICAgKiAgICAgbWF0aC5wcm9kKFsyLCAzLCA0XSkgICAgICAgICAgLy8gcmV0dXJucyAyNFxuICAgKiAgICAgbWF0aC5wcm9kKFtbMiwgNV0sIFs0LCAzXV0pICAgLy8gcmV0dXJucyAxMjBcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIG1lYW4sIG1lZGlhbiwgbWluLCBtYXgsIHN1bSwgc3RkLCB2YXJpYW5jZVxuICAgKlxuICAgKiBAcGFyYW0gey4uLiAqfSBhcmdzICBBIHNpbmdsZSBtYXRyaXggb3Igb3IgbXVsdGlwbGUgc2NhbGFyIHZhbHVlc1xuICAgKiBAcmV0dXJuIHsqfSBUaGUgcHJvZHVjdCBvZiBhbGwgdmFsdWVzXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIC8vIHByb2QoW2EsIGIsIGMsIGQsIC4uLl0pXG4gICAgJ0FycmF5IHwgTWF0cml4JzogX3Byb2QsXG4gICAgLy8gcHJvZChbYSwgYiwgYywgZCwgLi4uXSwgZGltKVxuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhOdW1iZXJCaWdOdW1iZXIoYXJyYXksIGRpbSkge1xuICAgICAgLy8gVE9ETzogaW1wbGVtZW50IHByb2QoQSwgZGltKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdwcm9kKEEsIGRpbSkgaXMgbm90IHlldCBzdXBwb3J0ZWQnKTsgLy8gcmV0dXJuIHJlZHVjZShhcmd1bWVudHNbMF0sIGFyZ3VtZW50c1sxXSwgbWF0aC5wcm9kKVxuICAgIH0sXG4gICAgLy8gcHJvZChhLCBiLCBjLCBkLCAuLi4pXG4gICAgJy4uLic6IGZ1bmN0aW9uIF8oYXJncykge1xuICAgICAgcmV0dXJuIF9wcm9kKGFyZ3MpO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBSZWN1cnNpdmVseSBjYWxjdWxhdGUgdGhlIHByb2R1Y3Qgb2YgYW4gbi1kaW1lbnNpb25hbCBhcnJheVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheVxuICAgKiBAcmV0dXJuIHtudW1iZXJ9IHByb2RcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgZnVuY3Rpb24gX3Byb2QoYXJyYXkpIHtcbiAgICB2YXIgcHJvZDtcbiAgICAoMCwgX2NvbGxlY3Rpb24uZGVlcEZvckVhY2gpKGFycmF5LCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHByb2QgPSBwcm9kID09PSB1bmRlZmluZWQgPyB2YWx1ZSA6IG11bHRpcGx5KHByb2QsIHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyAoMCwgX2ltcHJvdmVFcnJvck1lc3NhZ2UuaW1wcm92ZUVycm9yTWVzc2FnZSkoZXJyLCAncHJvZCcsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChwcm9kID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSBwcm9kIG9mIGFuIGVtcHR5IGFycmF5Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb2Q7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVQcm9kID0gY3JlYXRlUHJvZDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUXVhbnRpbGVTZXEgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3F1YW50aWxlU2VxJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FkZCcsICdtdWx0aXBseScsICdwYXJ0aXRpb25TZWxlY3QnLCAnY29tcGFyZSddO1xudmFyIGNyZWF0ZVF1YW50aWxlU2VxID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGFkZCA9IF9yZWYuYWRkLFxuICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5LFxuICAgICAgcGFydGl0aW9uU2VsZWN0ID0gX3JlZi5wYXJ0aXRpb25TZWxlY3QsXG4gICAgICBjb21wYXJlID0gX3JlZi5jb21wYXJlO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBwcm9iIG9yZGVyIHF1YW50aWxlIG9mIGEgbWF0cml4IG9yIGEgbGlzdCB3aXRoIHZhbHVlcy5cbiAgICogVGhlIHNlcXVlbmNlIGlzIHNvcnRlZCBhbmQgdGhlIG1pZGRsZSB2YWx1ZSBpcyByZXR1cm5lZC5cbiAgICogU3VwcG9ydGVkIHR5cGVzIG9mIHNlcXVlbmNlIHZhbHVlcyBhcmU6IE51bWJlciwgQmlnTnVtYmVyLCBVbml0XG4gICAqIFN1cHBvcnRlZCB0eXBlcyBvZiBwcm9iYWJpbGl0eSBhcmU6IE51bWJlciwgQmlnTnVtYmVyXG4gICAqXG4gICAqIEluIGNhc2Ugb2YgYSAobXVsdGkgZGltZW5zaW9uYWwpIGFycmF5IG9yIG1hdHJpeCwgdGhlIHByb2Igb3JkZXIgcXVhbnRpbGVcbiAgICogb2YgYWxsIGVsZW1lbnRzIHdpbGwgYmUgY2FsY3VsYXRlZC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5xdWFudGlsZVNlcShBLCBwcm9iWywgc29ydGVkXSlcbiAgICogICAgIG1hdGgucXVhbnRpbGVTZXEoQSwgW3Byb2IxLCBwcm9iMiwgLi4uXVssIHNvcnRlZF0pXG4gICAqICAgICBtYXRoLnF1YW50aWxlU2VxKEEsIE5bLCBzb3J0ZWRdKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGgucXVhbnRpbGVTZXEoWzMsIC0xLCA1LCA3XSwgMC41KSAgICAgICAgIC8vIHJldHVybnMgNFxuICAgKiAgICAgbWF0aC5xdWFudGlsZVNlcShbMywgLTEsIDUsIDddLCBbMS8zLCAyLzNdKSAgLy8gcmV0dXJucyBbMywgNV1cbiAgICogICAgIG1hdGgucXVhbnRpbGVTZXEoWzMsIC0xLCA1LCA3XSwgMikgICAgICAgICAgIC8vIHJldHVybnMgWzMsIDVdXG4gICAqICAgICBtYXRoLnF1YW50aWxlU2VxKFstMSwgMywgNSwgN10sIDAuNSwgdHJ1ZSkgICAvLyByZXR1cm5zIDRcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBtZWRpYW4sIG1lYW4sIG1pbiwgbWF4LCBzdW0sIHByb2QsIHN0ZCwgdmFyaWFuY2VcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheSwgTWF0cml4fSBkYXRhICAgICAgICAgICAgICAgIEEgc2luZ2xlIG1hdHJpeCBvciBBcnJheVxuICAgKiBAcGFyYW0ge051bWJlciwgQmlnTnVtYmVyLCBBcnJheX0gcHJvYk9yTiAgcHJvYiBpcyB0aGUgb3JkZXIgb2YgdGhlIHF1YW50aWxlLCB3aGlsZSBOIGlzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYW1vdW50IG9mIGV2ZW5seSBkaXN0cmlidXRlZCBzdGVwcyBvZlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvYmFiaWxpdGllczsgb25seSBvbmUgb2YgdGhlc2Ugb3B0aW9ucyBjYW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIHByb3ZpZGVkXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gc29ydGVkPWZhbHNlICAgICAgICAgICAgICBpcyBkYXRhIHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXJcbiAgICogQHJldHVybiB7TnVtYmVyLCBCaWdOdW1iZXIsIFVuaXQsIEFycmF5fSAgIFF1YW50aWxlKHMpXG4gICAqL1xuICBmdW5jdGlvbiBxdWFudGlsZVNlcShkYXRhLCBwcm9iT3JOLCBzb3J0ZWQpIHtcbiAgICB2YXIgcHJvYkFyciwgZGF0YUFyciwgb25lO1xuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyIHx8IGFyZ3VtZW50cy5sZW5ndGggPiAzKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0Z1bmN0aW9uIHF1YW50aWxlU2VxIHJlcXVpcmVzIHR3byBvciB0aHJlZSBwYXJhbWV0ZXJzJyk7XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfaXMuaXNDb2xsZWN0aW9uKShkYXRhKSkge1xuICAgICAgc29ydGVkID0gc29ydGVkIHx8IGZhbHNlO1xuXG4gICAgICBpZiAodHlwZW9mIHNvcnRlZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIGRhdGFBcnIgPSBkYXRhLnZhbHVlT2YoKTtcblxuICAgICAgICBpZiAoKDAsIF9pcy5pc051bWJlcikocHJvYk9yTikpIHtcbiAgICAgICAgICBpZiAocHJvYk9yTiA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTi9wcm9iIG11c3QgYmUgbm9uLW5lZ2F0aXZlJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHByb2JPck4gPD0gMSkge1xuICAgICAgICAgICAgLy8gcXVhbnRpbGVTZXEoW2EsIGIsIGMsIGQsIC4uLl0sIHByb2JbLHNvcnRlZF0pXG4gICAgICAgICAgICByZXR1cm4gX3F1YW50aWxlU2VxKGRhdGFBcnIsIHByb2JPck4sIHNvcnRlZCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHByb2JPck4gPiAxKSB7XG4gICAgICAgICAgICAvLyBxdWFudGlsZVNlcShbYSwgYiwgYywgZCwgLi4uXSwgTlssc29ydGVkXSlcbiAgICAgICAgICAgIGlmICghKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShwcm9iT3JOKSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ04gbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXInKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIG5QbHVzT25lID0gcHJvYk9yTiArIDE7XG4gICAgICAgICAgICBwcm9iQXJyID0gbmV3IEFycmF5KHByb2JPck4pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb2JPck47KSB7XG4gICAgICAgICAgICAgIHByb2JBcnJbaV0gPSBfcXVhbnRpbGVTZXEoZGF0YUFyciwgKytpIC8gblBsdXNPbmUsIHNvcnRlZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBwcm9iQXJyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShwcm9iT3JOKSkge1xuICAgICAgICAgIHZhciBCaWdOdW1iZXIgPSBwcm9iT3JOLmNvbnN0cnVjdG9yO1xuXG4gICAgICAgICAgaWYgKHByb2JPck4uaXNOZWdhdGl2ZSgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ04vcHJvYiBtdXN0IGJlIG5vbi1uZWdhdGl2ZScpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG9uZSA9IG5ldyBCaWdOdW1iZXIoMSk7XG5cbiAgICAgICAgICBpZiAocHJvYk9yTi5sdGUob25lKSkge1xuICAgICAgICAgICAgLy8gcXVhbnRpbGVTZXEoW2EsIGIsIGMsIGQsIC4uLl0sIHByb2JbLHNvcnRlZF0pXG4gICAgICAgICAgICByZXR1cm4gbmV3IEJpZ051bWJlcihfcXVhbnRpbGVTZXEoZGF0YUFyciwgcHJvYk9yTiwgc29ydGVkKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHByb2JPck4uZ3Qob25lKSkge1xuICAgICAgICAgICAgLy8gcXVhbnRpbGVTZXEoW2EsIGIsIGMsIGQsIC4uLl0sIE5bLHNvcnRlZF0pXG4gICAgICAgICAgICBpZiAoIXByb2JPck4uaXNJbnRlZ2VyKCkpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyJyk7XG4gICAgICAgICAgICB9IC8vIGxhcmdlc3QgcG9zc2libGUgQXJyYXkgbGVuZ3RoIGlzIDJeMzItMVxuICAgICAgICAgICAgLy8gMl4zMiA8IDEwXjE1LCB0aHVzIHNhZmUgY29udmVyc2lvbiBndWFyYW50ZWVkXG5cblxuICAgICAgICAgICAgdmFyIGludE4gPSBwcm9iT3JOLnRvTnVtYmVyKCk7XG5cbiAgICAgICAgICAgIGlmIChpbnROID4gNDI5NDk2NzI5NSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ04gbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMl4zMi0xLCBhcyB0aGF0IGlzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhbiBBcnJheScpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgX25QbHVzT25lID0gbmV3IEJpZ051bWJlcihpbnROICsgMSk7XG5cbiAgICAgICAgICAgIHByb2JBcnIgPSBuZXcgQXJyYXkoaW50Tik7XG5cbiAgICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBpbnROOykge1xuICAgICAgICAgICAgICBwcm9iQXJyW19pXSA9IG5ldyBCaWdOdW1iZXIoX3F1YW50aWxlU2VxKGRhdGFBcnIsIG5ldyBCaWdOdW1iZXIoKytfaSkuZGl2KF9uUGx1c09uZSksIHNvcnRlZCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcHJvYkFycjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9iT3JOKSkge1xuICAgICAgICAgIC8vIHF1YW50aWxlU2VxKFthLCBiLCBjLCBkLCAuLi5dLCBbcHJvYjEsIHByb2IyLCAuLi5dWyxzb3J0ZWRdKVxuICAgICAgICAgIHByb2JBcnIgPSBuZXcgQXJyYXkocHJvYk9yTi5sZW5ndGgpO1xuXG4gICAgICAgICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgcHJvYkFyci5sZW5ndGg7ICsrX2kyKSB7XG4gICAgICAgICAgICB2YXIgY3VyclByb2IgPSBwcm9iT3JOW19pMl07XG5cbiAgICAgICAgICAgIGlmICgoMCwgX2lzLmlzTnVtYmVyKShjdXJyUHJvYikpIHtcbiAgICAgICAgICAgICAgaWYgKGN1cnJQcm9iIDwgMCB8fCBjdXJyUHJvYiA+IDEpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb2JhYmlsaXR5IG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxLCBpbmNsdXNpdmUnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShjdXJyUHJvYikpIHtcbiAgICAgICAgICAgICAgb25lID0gbmV3IGN1cnJQcm9iLmNvbnN0cnVjdG9yKDEpO1xuXG4gICAgICAgICAgICAgIGlmIChjdXJyUHJvYi5pc05lZ2F0aXZlKCkgfHwgY3VyclByb2IuZ3Qob25lKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUHJvYmFiaWxpdHkgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEsIGluY2x1c2l2ZScpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmV4cGVjdGVkIHR5cGUgb2YgYXJndW1lbnQgaW4gZnVuY3Rpb24gcXVhbnRpbGVTZXEnKTsgLy8gRklYTUU6IGJlY29tZXMgcmVkdW5kYW50IHdoZW4gY29udmVydGVkIHRvIHR5cGVkLWZ1bmN0aW9uXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByb2JBcnJbX2kyXSA9IF9xdWFudGlsZVNlcShkYXRhQXJyLCBjdXJyUHJvYiwgc29ydGVkKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcHJvYkFycjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuZXhwZWN0ZWQgdHlwZSBvZiBhcmd1bWVudCBpbiBmdW5jdGlvbiBxdWFudGlsZVNlcScpOyAvLyBGSVhNRTogYmVjb21lcyByZWR1bmRhbnQgd2hlbiBjb252ZXJ0ZWQgdG8gdHlwZWQtZnVuY3Rpb25cbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5leHBlY3RlZCB0eXBlIG9mIGFyZ3VtZW50IGluIGZ1bmN0aW9uIHF1YW50aWxlU2VxJyk7IC8vIEZJWE1FOiBiZWNvbWVzIHJlZHVuZGFudCB3aGVuIGNvbnZlcnRlZCB0byB0eXBlZC1mdW5jdGlvblxuICAgIH1cblxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuZXhwZWN0ZWQgdHlwZSBvZiBhcmd1bWVudCBpbiBmdW5jdGlvbiBxdWFudGlsZVNlcScpOyAvLyBGSVhNRTogYmVjb21lcyByZWR1bmRhbnQgd2hlbiBjb252ZXJ0ZWQgdG8gdHlwZWQtZnVuY3Rpb25cbiAgfVxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBwcm9iIG9yZGVyIHF1YW50aWxlIG9mIGFuIG4tZGltZW5zaW9uYWwgYXJyYXkuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gICAqIEBwYXJhbSB7TnVtYmVyLCBCaWdOdW1iZXJ9IHByb2JcbiAgICogQHBhcmFtIHtCb29sZWFufSBzb3J0ZWRcbiAgICogQHJldHVybiB7TnVtYmVyLCBCaWdOdW1iZXIsIFVuaXR9IHByb2Igb3JkZXIgcXVhbnRpbGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBfcXVhbnRpbGVTZXEoYXJyYXksIHByb2IsIHNvcnRlZCkge1xuICAgIHZhciBmbGF0ID0gKDAsIF9hcnJheS5mbGF0dGVuKShhcnJheSk7XG4gICAgdmFyIGxlbiA9IGZsYXQubGVuZ3RoO1xuXG4gICAgaWYgKGxlbiA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY2FsY3VsYXRlIHF1YW50aWxlIG9mIGFuIGVtcHR5IHNlcXVlbmNlJyk7XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKHByb2IpKSB7XG4gICAgICB2YXIgX2luZGV4ID0gcHJvYiAqIChsZW4gLSAxKTtcblxuICAgICAgdmFyIF9mcmFjUGFydCA9IF9pbmRleCAlIDE7XG5cbiAgICAgIGlmIChfZnJhY1BhcnQgPT09IDApIHtcbiAgICAgICAgdmFyIHZhbHVlID0gc29ydGVkID8gZmxhdFtfaW5kZXhdIDogcGFydGl0aW9uU2VsZWN0KGZsYXQsIF9pbmRleCk7XG4gICAgICAgIHZhbGlkYXRlKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgX2ludGVnZXJQYXJ0ID0gTWF0aC5mbG9vcihfaW5kZXgpO1xuXG4gICAgICB2YXIgX2xlZnQ7XG5cbiAgICAgIHZhciBfcmlnaHQ7XG5cbiAgICAgIGlmIChzb3J0ZWQpIHtcbiAgICAgICAgX2xlZnQgPSBmbGF0W19pbnRlZ2VyUGFydF07XG4gICAgICAgIF9yaWdodCA9IGZsYXRbX2ludGVnZXJQYXJ0ICsgMV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfcmlnaHQgPSBwYXJ0aXRpb25TZWxlY3QoZmxhdCwgX2ludGVnZXJQYXJ0ICsgMSk7IC8vIG1heCBvZiBwYXJ0aXRpb24gaXMga3RoIGxhcmdlc3RcblxuICAgICAgICBfbGVmdCA9IGZsYXRbX2ludGVnZXJQYXJ0XTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IF9pbnRlZ2VyUGFydDsgKytpKSB7XG4gICAgICAgICAgaWYgKGNvbXBhcmUoZmxhdFtpXSwgX2xlZnQpID4gMCkge1xuICAgICAgICAgICAgX2xlZnQgPSBmbGF0W2ldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YWxpZGF0ZShfbGVmdCk7XG4gICAgICB2YWxpZGF0ZShfcmlnaHQpOyAvLyBRKHByb2IpID0gKDEtZikqQVtmbG9vcihpbmRleCldICsgZipBW2Zsb29yKGluZGV4KSsxXVxuXG4gICAgICByZXR1cm4gYWRkKG11bHRpcGx5KF9sZWZ0LCAxIC0gX2ZyYWNQYXJ0KSwgbXVsdGlwbHkoX3JpZ2h0LCBfZnJhY1BhcnQpKTtcbiAgICB9IC8vIElmIHByb2IgaXMgYSBCaWdOdW1iZXJcblxuXG4gICAgdmFyIGluZGV4ID0gcHJvYi50aW1lcyhsZW4gLSAxKTtcblxuICAgIGlmIChpbmRleC5pc0ludGVnZXIoKSkge1xuICAgICAgaW5kZXggPSBpbmRleC50b051bWJlcigpO1xuXG4gICAgICB2YXIgX3ZhbHVlID0gc29ydGVkID8gZmxhdFtpbmRleF0gOiBwYXJ0aXRpb25TZWxlY3QoZmxhdCwgaW5kZXgpO1xuXG4gICAgICB2YWxpZGF0ZShfdmFsdWUpO1xuICAgICAgcmV0dXJuIF92YWx1ZTtcbiAgICB9XG5cbiAgICB2YXIgaW50ZWdlclBhcnQgPSBpbmRleC5mbG9vcigpO1xuICAgIHZhciBmcmFjUGFydCA9IGluZGV4Lm1pbnVzKGludGVnZXJQYXJ0KTtcbiAgICB2YXIgaW50ZWdlclBhcnROdW1iZXIgPSBpbnRlZ2VyUGFydC50b051bWJlcigpO1xuICAgIHZhciBsZWZ0O1xuICAgIHZhciByaWdodDtcblxuICAgIGlmIChzb3J0ZWQpIHtcbiAgICAgIGxlZnQgPSBmbGF0W2ludGVnZXJQYXJ0TnVtYmVyXTtcbiAgICAgIHJpZ2h0ID0gZmxhdFtpbnRlZ2VyUGFydE51bWJlciArIDFdO1xuICAgIH0gZWxzZSB7XG4gICAgICByaWdodCA9IHBhcnRpdGlvblNlbGVjdChmbGF0LCBpbnRlZ2VyUGFydE51bWJlciArIDEpOyAvLyBtYXggb2YgcGFydGl0aW9uIGlzIGt0aCBsYXJnZXN0XG5cbiAgICAgIGxlZnQgPSBmbGF0W2ludGVnZXJQYXJ0TnVtYmVyXTtcblxuICAgICAgZm9yICh2YXIgX2kzID0gMDsgX2kzIDwgaW50ZWdlclBhcnROdW1iZXI7ICsrX2kzKSB7XG4gICAgICAgIGlmIChjb21wYXJlKGZsYXRbX2kzXSwgbGVmdCkgPiAwKSB7XG4gICAgICAgICAgbGVmdCA9IGZsYXRbX2kzXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhbGlkYXRlKGxlZnQpO1xuICAgIHZhbGlkYXRlKHJpZ2h0KTsgLy8gUShwcm9iKSA9ICgxLWYpKkFbZmxvb3IoaW5kZXgpXSArIGYqQVtmbG9vcihpbmRleCkrMV1cblxuICAgIHZhciBvbmUgPSBuZXcgZnJhY1BhcnQuY29uc3RydWN0b3IoMSk7XG4gICAgcmV0dXJuIGFkZChtdWx0aXBseShsZWZ0LCBvbmUubWludXMoZnJhY1BhcnQpKSwgbXVsdGlwbHkocmlnaHQsIGZyYWNQYXJ0KSk7XG4gIH1cbiAgLyoqXG4gICAqIENoZWNrIGlmIGFycmF5IHZhbHVlIHR5cGVzIGFyZSB2YWxpZCwgdGhyb3cgZXJyb3Igb3RoZXJ3aXNlLlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IFVuaXR9IHhcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBVbml0fSB4XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgdmFyIHZhbGlkYXRlID0gdHlwZWQoe1xuICAgICdudW1iZXIgfCBCaWdOdW1iZXIgfCBVbml0JzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyVW5pdCh4KSB7XG4gICAgICByZXR1cm4geDtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcXVhbnRpbGVTZXE7XG59KTtcbmV4cG9ydHMuY3JlYXRlUXVhbnRpbGVTZXEgPSBjcmVhdGVRdWFudGlsZVNlcTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3RkID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnc3RkJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ3NxcnQnLCAndmFyaWFuY2UnXTtcbnZhciBjcmVhdGVTdGQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgc3FydCA9IF9yZWYuc3FydCxcbiAgICAgIHZhcmlhbmNlID0gX3JlZi52YXJpYW5jZTtcblxuICAvKipcbiAgICogQ29tcHV0ZSB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIGEgbWF0cml4IG9yIGEgIGxpc3Qgd2l0aCB2YWx1ZXMuXG4gICAqIFRoZSBzdGFuZGFyZCBkZXZpYXRpb25zIGlzIGRlZmluZWQgYXMgdGhlIHNxdWFyZSByb290IG9mIHRoZSB2YXJpYW5jZTpcbiAgICogYHN0ZChBKSA9IHNxcnQodmFyaWFuY2UoQSkpYC5cbiAgICogSW4gY2FzZSBvZiBhIChtdWx0aSBkaW1lbnNpb25hbCkgYXJyYXkgb3IgbWF0cml4LCB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uXG4gICAqIG92ZXIgYWxsIGVsZW1lbnRzIHdpbGwgYmUgY2FsY3VsYXRlZCBieSBkZWZhdWx0LCB1bmxlc3MgYW4gYXhpcyBpcyBzcGVjaWZpZWRcbiAgICogaW4gd2hpY2ggY2FzZSB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIHdpbGwgYmUgY29tcHV0ZWQgYWxvbmcgdGhhdCBheGlzLlxuICAgKlxuICAgKiBBZGRpdGlvbmFsbHksIGl0IGlzIHBvc3NpYmxlIHRvIGNvbXB1dGUgdGhlIHN0YW5kYXJkIGRldmlhdGlvbiBhbG9uZyB0aGUgcm93c1xuICAgKiBvciBjb2x1bW5zIG9mIGEgbWF0cml4IGJ5IHNwZWNpZnlpbmcgdGhlIGRpbWVuc2lvbiBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50LlxuICAgKlxuICAgKiBPcHRpb25hbGx5LCB0aGUgdHlwZSBvZiBub3JtYWxpemF0aW9uIGNhbiBiZSBzcGVjaWZpZWQgYXMgdGhlIGZpbmFsXG4gICAqIHBhcmFtZXRlci4gVGhlIHBhcmFtZXRlciBgbm9ybWFsaXphdGlvbmAgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczpcbiAgICpcbiAgICogLSAndW5iaWFzZWQnIChkZWZhdWx0KSBUaGUgc3VtIG9mIHNxdWFyZWQgZXJyb3JzIGlzIGRpdmlkZWQgYnkgKG4gLSAxKVxuICAgKiAtICd1bmNvcnJlY3RlZCcgICAgICAgIFRoZSBzdW0gb2Ygc3F1YXJlZCBlcnJvcnMgaXMgZGl2aWRlZCBieSBuXG4gICAqIC0gJ2JpYXNlZCcgICAgICAgICAgICAgVGhlIHN1bSBvZiBzcXVhcmVkIGVycm9ycyBpcyBkaXZpZGVkIGJ5IChuICsgMSlcbiAgICpcbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5zdGQoYSwgYiwgYywgLi4uKVxuICAgKiAgICAgbWF0aC5zdGQoQSlcbiAgICogICAgIG1hdGguc3RkKEEsIG5vcm1hbGl6YXRpb24pXG4gICAqICAgICBtYXRoLnN0ZChBLCBkaW1lbnNpb24pXG4gICAqICAgICBtYXRoLnN0ZChBLCBkaW1lbnNpb24sIG5vcm1hbGl6YXRpb24pXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgbWF0aC5zdGQoMiwgNCwgNikgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDJcbiAgICogICAgIG1hdGguc3RkKFsyLCA0LCA2LCA4XSkgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAyLjU4MTk4ODg5NzQ3MTYxMVxuICAgKiAgICAgbWF0aC5zdGQoWzIsIDQsIDYsIDhdLCAndW5jb3JyZWN0ZWQnKSAvLyByZXR1cm5zIDIuMjM2MDY3OTc3NDk5NzlcbiAgICogICAgIG1hdGguc3RkKFsyLCA0LCA2LCA4XSwgJ2JpYXNlZCcpICAgICAgLy8gcmV0dXJucyAyXG4gICAqXG4gICAqICAgICBtYXRoLnN0ZChbWzEsIDIsIDNdLCBbNCwgNSwgNl1dKSAgICAgIC8vIHJldHVybnMgMS44NzA4Mjg2OTMzODY5NzA3XG4gICAqICAgICBtYXRoLnN0ZChbWzEsIDIsIDNdLCBbNCwgNiwgOF1dLCAwKSAgICAvLyByZXR1cm5zIFsyLjEyMTMyMDM0MzU1OTY0MjQsIDIuODI4NDI3MTI0NzQ2MTkwMywgMy41MzU1MzM5MDU5MzI3Mzc4XVxuICAgKiAgICAgbWF0aC5zdGQoW1sxLCAyLCAzXSwgWzQsIDYsIDhdXSwgMSkgICAgLy8gcmV0dXJucyBbMSwgMl1cbiAgICogICAgIG1hdGguc3RkKFtbMSwgMiwgM10sIFs0LCA2LCA4XV0sIDEsICdiaWFzZWQnKSAvLyByZXR1cm5zIFswLjcwNzEwNjc4MTE4NjU0NzYsIDEuNDE0MjEzNTYyMzczMDk1MV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIG1lYW4sIG1lZGlhbiwgbWF4LCBtaW4sIHByb2QsIHN1bSwgdmFyaWFuY2VcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0gYXJyYXlcbiAgICogICAgICAgICAgICAgICAgICAgICAgICBBIHNpbmdsZSBtYXRyaXggb3Igb3IgbXVsdGlwbGUgc2NhbGFyIHZhbHVlc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW25vcm1hbGl6YXRpb249J3VuYmlhc2VkJ11cbiAgICogICAgICAgICAgICAgICAgICAgICAgICBEZXRlcm1pbmVzIGhvdyB0byBub3JtYWxpemUgdGhlIHZhcmlhbmNlLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIENob29zZSAndW5iaWFzZWQnIChkZWZhdWx0KSwgJ3VuY29ycmVjdGVkJywgb3IgJ2JpYXNlZCcuXG4gICAqIEBwYXJhbSBkaW1lbnNpb24ge251bWJlciB8IEJpZ051bWJlcn1cbiAgICogICAgICAgICAgICAgICAgICAgICAgICBEZXRlcm1pbmVzIHRoZSBheGlzIHRvIGNvbXB1dGUgdGhlIHN0YW5kYXJkIGRldmlhdGlvbiBmb3IgYSBtYXRyaXhcbiAgICogQHJldHVybiB7Kn0gVGhlIHN0YW5kYXJkIGRldmlhdGlvblxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAvLyBzdGQoW2EsIGIsIGMsIGQsIC4uLl0pXG4gICAgJ0FycmF5IHwgTWF0cml4JzogX3N0ZCxcbiAgICAvLyBzdGQoW2EsIGIsIGMsIGQsIC4uLl0sIG5vcm1hbGl6YXRpb24pXG4gICAgJ0FycmF5IHwgTWF0cml4LCBzdHJpbmcnOiBfc3RkLFxuICAgIC8vIHN0ZChbYSwgYiwgYywgYywgLi4uXSwgZGltKVxuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyJzogX3N0ZCxcbiAgICAvLyBzdGQoW2EsIGIsIGMsIGMsIC4uLl0sIGRpbSwgbm9ybWFsaXphdGlvbilcbiAgICAnQXJyYXkgfCBNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlciwgc3RyaW5nJzogX3N0ZCxcbiAgICAvLyBzdGQoYSwgYiwgYywgZCwgLi4uKVxuICAgICcuLi4nOiBmdW5jdGlvbiBfKGFyZ3MpIHtcbiAgICAgIHJldHVybiBfc3RkKGFyZ3MpO1xuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gX3N0ZChhcnJheSwgbm9ybWFsaXphdGlvbikge1xuICAgIGlmIChhcnJheS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignRnVuY3Rpb24gc3RkIHJlcXVpcmVzIG9uZSBvciBtb3JlIHBhcmFtZXRlcnMgKDAgcHJvdmlkZWQpJyk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBzcXJ0KHZhcmlhbmNlLmFwcGx5KG51bGwsIGFyZ3VtZW50cykpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIFR5cGVFcnJvciAmJiBlcnIubWVzc2FnZS5pbmRleE9mKCcgdmFyaWFuY2UnKSAhPT0gLTEpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihlcnIubWVzc2FnZS5yZXBsYWNlKCcgdmFyaWFuY2UnLCAnIHN0ZCcpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVTdGQgPSBjcmVhdGVTdGQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVN1bSA9IHZvaWQgMDtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2ltcHJvdmVFcnJvck1lc3NhZ2UgPSByZXF1aXJlKFwiLi91dGlscy9pbXByb3ZlRXJyb3JNZXNzYWdlXCIpO1xuXG52YXIgX25vb3AgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbm9vcFwiKTtcblxudmFyIG5hbWUgPSAnc3VtJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdhZGQnLCAnP2JpZ251bWJlcicsICc/ZnJhY3Rpb24nXTtcbnZhciBjcmVhdGVTdW0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBhZGQgPSBfcmVmLmFkZCxcbiAgICAgIGJpZ251bWJlciA9IF9yZWYuYmlnbnVtYmVyLFxuICAgICAgZnJhY3Rpb24gPSBfcmVmLmZyYWN0aW9uO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBzdW0gb2YgYSBtYXRyaXggb3IgYSBsaXN0IHdpdGggdmFsdWVzLlxuICAgKiBJbiBjYXNlIG9mIGEgKG11bHRpIGRpbWVuc2lvbmFsKSBhcnJheSBvciBtYXRyaXgsIHRoZSBzdW0gb2YgYWxsXG4gICAqIGVsZW1lbnRzIHdpbGwgYmUgY2FsY3VsYXRlZC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5zdW0oYSwgYiwgYywgLi4uKVxuICAgKiAgICAgbWF0aC5zdW0oQSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLnN1bSgyLCAxLCA0LCAzKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgMTBcbiAgICogICAgIG1hdGguc3VtKFsyLCAxLCA0LCAzXSkgICAgICAgICAgICAgLy8gcmV0dXJucyAxMFxuICAgKiAgICAgbWF0aC5zdW0oW1syLCA1XSwgWzQsIDNdLCBbMSwgN11dKSAvLyByZXR1cm5zIDIyXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBtZWFuLCBtZWRpYW4sIG1pbiwgbWF4LCBwcm9kLCBzdGQsIHZhcmlhbmNlXG4gICAqXG4gICAqIEBwYXJhbSB7Li4uICp9IGFyZ3MgIEEgc2luZ2xlIG1hdHJpeCBvciBvciBtdWx0aXBsZSBzY2FsYXIgdmFsdWVzXG4gICAqIEByZXR1cm4geyp9IFRoZSBzdW0gb2YgYWxsIHZhbHVlc1xuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAvLyBzdW0oW2EsIGIsIGMsIGQsIC4uLl0pXG4gICAgJ0FycmF5IHwgTWF0cml4JzogX3N1bSxcbiAgICAvLyBzdW0oW2EsIGIsIGMsIGQsIC4uLl0sIGRpbSlcbiAgICAnQXJyYXkgfCBNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IF9uc3VtRGltLFxuICAgIC8vIHN1bShhLCBiLCBjLCBkLCAuLi4pXG4gICAgJy4uLic6IGZ1bmN0aW9uIF8oYXJncykge1xuICAgICAgaWYgKCgwLCBfY29sbGVjdGlvbi5jb250YWluc0NvbGxlY3Rpb25zKShhcmdzKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTY2FsYXIgdmFsdWVzIGV4cGVjdGVkIGluIGZ1bmN0aW9uIHN1bScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3N1bShhcmdzKTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogUmVjdXJzaXZlbHkgY2FsY3VsYXRlIHRoZSBzdW0gb2YgYW4gbi1kaW1lbnNpb25hbCBhcnJheVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheVxuICAgKiBAcmV0dXJuIHtudW1iZXJ9IHN1bVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfc3VtKGFycmF5KSB7XG4gICAgdmFyIHN1bTtcbiAgICAoMCwgX2NvbGxlY3Rpb24uZGVlcEZvckVhY2gpKGFycmF5LCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHN1bSA9IHN1bSA9PT0gdW5kZWZpbmVkID8gdmFsdWUgOiBhZGQoc3VtLCB2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgKDAsIF9pbXByb3ZlRXJyb3JNZXNzYWdlLmltcHJvdmVFcnJvck1lc3NhZ2UpKGVyciwgJ3N1bScsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChzdW0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgc3dpdGNoIChjb25maWcubnVtYmVyKSB7XG4gICAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgY2FzZSAnQmlnTnVtYmVyJzpcbiAgICAgICAgICByZXR1cm4gYmlnbnVtYmVyID8gYmlnbnVtYmVyKDApIDogKDAsIF9ub29wLm5vQmlnbnVtYmVyKSgpO1xuXG4gICAgICAgIGNhc2UgJ0ZyYWN0aW9uJzpcbiAgICAgICAgICByZXR1cm4gZnJhY3Rpb24gPyBmcmFjdGlvbigwKSA6ICgwLCBfbm9vcC5ub0ZyYWN0aW9uKSgpO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1bTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9uc3VtRGltKGFycmF5LCBkaW0pIHtcbiAgICB0cnkge1xuICAgICAgdmFyIHN1bSA9ICgwLCBfY29sbGVjdGlvbi5yZWR1Y2UpKGFycmF5LCBkaW0sIGFkZCk7XG4gICAgICByZXR1cm4gc3VtO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgKDAsIF9pbXByb3ZlRXJyb3JNZXNzYWdlLmltcHJvdmVFcnJvck1lc3NhZ2UpKGVyciwgJ3N1bScpO1xuICAgIH1cbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZVN1bSA9IGNyZWF0ZVN1bTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaW1wcm92ZUVycm9yTWVzc2FnZSA9IGltcHJvdmVFcnJvck1lc3NhZ2U7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvaXNcIik7XG5cbi8qKlxuICogSW1wcm92ZSBlcnJvciBtZXNzYWdlcyBmb3Igc3RhdGlzdGljcyBmdW5jdGlvbnMuIEVycm9ycyBhcmUgdHlwaWNhbGx5XG4gKiB0aHJvd24gaW4gYW4gaW50ZXJuYWxseSB1c2VkIGZ1bmN0aW9uIGxpa2UgbGFyZ2VyLCBjYXVzaW5nIHRoZSBlcnJvclxuICogbm90IHRvIG1lbnRpb24gdGhlIGZ1bmN0aW9uIChsaWtlIG1heCkgd2hpY2ggaXMgYWN0dWFsbHkgdXNlZCBieSB0aGUgdXNlci5cbiAqXG4gKiBAcGFyYW0ge0Vycm9yfSBlcnJcbiAqIEBwYXJhbSB7U3RyaW5nfSBmbk5hbWVcbiAqIEBwYXJhbSB7Kn0gW3ZhbHVlXVxuICogQHJldHVybiB7RXJyb3J9XG4gKi9cbmZ1bmN0aW9uIGltcHJvdmVFcnJvck1lc3NhZ2UoZXJyLCBmbk5hbWUsIHZhbHVlKSB7XG4gIC8vIFRPRE86IGFkZCBpbmZvcm1hdGlvbiB3aXRoIHRoZSBpbmRleCAoYWxzbyBuZWVkcyB0cmFuc2Zvcm0gaW4gZXhwcmVzc2lvbiBwYXJzZXIpXG4gIHZhciBkZXRhaWxzO1xuXG4gIGlmIChTdHJpbmcoZXJyKS5pbmRleE9mKCdVbmV4cGVjdGVkIHR5cGUnKSAhPT0gLTEpIHtcbiAgICBkZXRhaWxzID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyAnICh0eXBlOiAnICsgKDAsIF9pcy50eXBlT2YpKHZhbHVlKSArICcsIHZhbHVlOiAnICsgSlNPTi5zdHJpbmdpZnkodmFsdWUpICsgJyknIDogJyAodHlwZTogJyArIGVyci5kYXRhLmFjdHVhbCArICcpJztcbiAgICByZXR1cm4gbmV3IFR5cGVFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSAnICsgZm5OYW1lICsgJywgdW5leHBlY3RlZCB0eXBlIG9mIGFyZ3VtZW50JyArIGRldGFpbHMpO1xuICB9XG5cbiAgaWYgKFN0cmluZyhlcnIpLmluZGV4T2YoJ2NvbXBsZXggbnVtYmVycycpICE9PSAtMSkge1xuICAgIGRldGFpbHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/ICcgKHR5cGU6ICcgKyAoMCwgX2lzLnR5cGVPZikodmFsdWUpICsgJywgdmFsdWU6ICcgKyBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgKyAnKScgOiAnJztcbiAgICByZXR1cm4gbmV3IFR5cGVFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSAnICsgZm5OYW1lICsgJywgbm8gb3JkZXJpbmcgcmVsYXRpb24gaXMgZGVmaW5lZCBmb3IgY29tcGxleCBudW1iZXJzJyArIGRldGFpbHMpO1xuICB9XG5cbiAgcmV0dXJuIGVycjtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRGVwcmVjYXRlZFZhciA9IGV4cG9ydHMuY3JlYXRlVmFyaWFuY2UgPSB2b2lkIDA7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9pbXByb3ZlRXJyb3JNZXNzYWdlID0gcmVxdWlyZShcIi4vdXRpbHMvaW1wcm92ZUVycm9yTWVzc2FnZVwiKTtcblxudmFyIF9sb2cgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbG9nXCIpO1xuXG52YXIgREVGQVVMVF9OT1JNQUxJWkFUSU9OID0gJ3VuYmlhc2VkJztcbnZhciBuYW1lID0gJ3ZhcmlhbmNlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FkZCcsICdzdWJ0cmFjdCcsICdtdWx0aXBseScsICdkaXZpZGUnLCAnYXBwbHknLCAnaXNOYU4nXTtcbnZhciBjcmVhdGVWYXJpYW5jZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBhZGQgPSBfcmVmLmFkZCxcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCxcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSxcbiAgICAgIGRpdmlkZSA9IF9yZWYuZGl2aWRlLFxuICAgICAgYXBwbHkgPSBfcmVmLmFwcGx5LFxuICAgICAgaXNOYU4gPSBfcmVmLmlzTmFOO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSB2YXJpYW5jZSBvZiBhIG1hdHJpeCBvciBhICBsaXN0IHdpdGggdmFsdWVzLlxuICAgKiBJbiBjYXNlIG9mIGEgKG11bHRpIGRpbWVuc2lvbmFsKSBhcnJheSBvciBtYXRyaXgsIHRoZSB2YXJpYW5jZSBvdmVyIGFsbFxuICAgKiBlbGVtZW50cyB3aWxsIGJlIGNhbGN1bGF0ZWQuXG4gICAqXG4gICAqIEFkZGl0aW9uYWxseSwgaXQgaXMgcG9zc2libGUgdG8gY29tcHV0ZSB0aGUgdmFyaWFuY2UgYWxvbmcgdGhlIHJvd3NcbiAgICogb3IgY29sdW1ucyBvZiBhIG1hdHJpeCBieSBzcGVjaWZ5aW5nIHRoZSBkaW1lbnNpb24gYXMgdGhlIHNlY29uZCBhcmd1bWVudC5cbiAgICpcbiAgICogT3B0aW9uYWxseSwgdGhlIHR5cGUgb2Ygbm9ybWFsaXphdGlvbiBjYW4gYmUgc3BlY2lmaWVkIGFzIHRoZSBmaW5hbFxuICAgKiBwYXJhbWV0ZXIuIFRoZSBwYXJhbWV0ZXIgYG5vcm1hbGl6YXRpb25gIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6XG4gICAqXG4gICAqIC0gJ3VuYmlhc2VkJyAoZGVmYXVsdCkgVGhlIHN1bSBvZiBzcXVhcmVkIGVycm9ycyBpcyBkaXZpZGVkIGJ5IChuIC0gMSlcbiAgICogLSAndW5jb3JyZWN0ZWQnICAgICAgICBUaGUgc3VtIG9mIHNxdWFyZWQgZXJyb3JzIGlzIGRpdmlkZWQgYnkgblxuICAgKiAtICdiaWFzZWQnICAgICAgICAgICAgIFRoZSBzdW0gb2Ygc3F1YXJlZCBlcnJvcnMgaXMgZGl2aWRlZCBieSAobiArIDEpXG4gICAqXG4gICAqXG4gICAqIE5vdGUgdGhhdCBvbGRlciBicm93c2VyIG1heSBub3QgbGlrZSB0aGUgdmFyaWFibGUgbmFtZSBgdmFyYC4gSW4gdGhhdFxuICAgKiBjYXNlLCB0aGUgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBhcyBgbWF0aFsndmFyJ10oLi4uKWAgaW5zdGVhZCBvZlxuICAgKiBgbWF0aC52YXIoLi4uKWAuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGgudmFyaWFuY2UoYSwgYiwgYywgLi4uKVxuICAgKiAgICAgbWF0aC52YXJpYW5jZShBKVxuICAgKiAgICAgbWF0aC52YXJpYW5jZShBLCBub3JtYWxpemF0aW9uKVxuICAgKiAgICAgbWF0aC52YXJpYW5jZShBLCBkaW1lbnNpb24pXG4gICAqICAgICBtYXRoLnZhcmlhbmNlKEEsIGRpbWVuc2lvbiwgbm9ybWFsaXphdGlvbilcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLnZhcmlhbmNlKDIsIDQsIDYpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyA0XG4gICAqICAgICBtYXRoLnZhcmlhbmNlKFsyLCA0LCA2LCA4XSkgICAgICAgICAgICAgICAgLy8gcmV0dXJucyA2LjY2NjY2NjY2NjY2NjY2N1xuICAgKiAgICAgbWF0aC52YXJpYW5jZShbMiwgNCwgNiwgOF0sICd1bmNvcnJlY3RlZCcpIC8vIHJldHVybnMgNVxuICAgKiAgICAgbWF0aC52YXJpYW5jZShbMiwgNCwgNiwgOF0sICdiaWFzZWQnKSAgICAgIC8vIHJldHVybnMgNFxuICAgKlxuICAgKiAgICAgbWF0aC52YXJpYW5jZShbWzEsIDIsIDNdLCBbNCwgNSwgNl1dKSAgICAgIC8vIHJldHVybnMgMy41XG4gICAqICAgICBtYXRoLnZhcmlhbmNlKFtbMSwgMiwgM10sIFs0LCA2LCA4XV0sIDApICAgLy8gcmV0dXJucyBbNC41LCA4LCAxMi41XVxuICAgKiAgICAgbWF0aC52YXJpYW5jZShbWzEsIDIsIDNdLCBbNCwgNiwgOF1dLCAxKSAgIC8vIHJldHVybnMgWzEsIDRdXG4gICAqICAgICBtYXRoLnZhcmlhbmNlKFtbMSwgMiwgM10sIFs0LCA2LCA4XV0sIDEsICdiaWFzZWQnKSAvLyByZXR1cm5zIFswLjUsIDJdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBtZWFuLCBtZWRpYW4sIG1heCwgbWluLCBwcm9kLCBzdGQsIHN1bVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSBhcnJheVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIEEgc2luZ2xlIG1hdHJpeCBvciBvciBtdWx0aXBsZSBzY2FsYXIgdmFsdWVzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbm9ybWFsaXphdGlvbj0ndW5iaWFzZWQnXVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIERldGVybWluZXMgaG93IHRvIG5vcm1hbGl6ZSB0aGUgdmFyaWFuY2UuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgQ2hvb3NlICd1bmJpYXNlZCcgKGRlZmF1bHQpLCAndW5jb3JyZWN0ZWQnLCBvciAnYmlhc2VkJy5cbiAgICogQHBhcmFtIGRpbWVuc2lvbiB7bnVtYmVyIHwgQmlnTnVtYmVyfVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIERldGVybWluZXMgdGhlIGF4aXMgdG8gY29tcHV0ZSB0aGUgdmFyaWFuY2UgZm9yIGEgbWF0cml4XG4gICAqIEByZXR1cm4geyp9IFRoZSB2YXJpYW5jZVxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAvLyB2YXJpYW5jZShbYSwgYiwgYywgZCwgLi4uXSlcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeChhcnJheSkge1xuICAgICAgcmV0dXJuIF92YXIoYXJyYXksIERFRkFVTFRfTk9STUFMSVpBVElPTik7XG4gICAgfSxcbiAgICAvLyB2YXJpYW5jZShbYSwgYiwgYywgZCwgLi4uXSwgbm9ybWFsaXphdGlvbilcbiAgICAnQXJyYXkgfCBNYXRyaXgsIHN0cmluZyc6IF92YXIsXG4gICAgLy8gdmFyaWFuY2UoW2EsIGIsIGMsIGMsIC4uLl0sIGRpbSlcbiAgICAnQXJyYXkgfCBNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIEFycmF5TWF0cml4TnVtYmVyQmlnTnVtYmVyKGFycmF5LCBkaW0pIHtcbiAgICAgIHJldHVybiBfdmFyRGltKGFycmF5LCBkaW0sIERFRkFVTFRfTk9STUFMSVpBVElPTik7XG4gICAgfSxcbiAgICAvLyB2YXJpYW5jZShbYSwgYiwgYywgYywgLi4uXSwgZGltLCBub3JtYWxpemF0aW9uKVxuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyLCBzdHJpbmcnOiBfdmFyRGltLFxuICAgIC8vIHZhcmlhbmNlKGEsIGIsIGMsIGQsIC4uLilcbiAgICAnLi4uJzogZnVuY3Rpb24gXyhhcmdzKSB7XG4gICAgICByZXR1cm4gX3ZhcihhcmdzLCBERUZBVUxUX05PUk1BTElaQVRJT04pO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBSZWN1cnNpdmVseSBjYWxjdWxhdGUgdGhlIHZhcmlhbmNlIG9mIGFuIG4tZGltZW5zaW9uYWwgYXJyYXlcbiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXlcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5vcm1hbGl6YXRpb25cbiAgICogICAgICAgICAgICAgICAgICAgICAgICBEZXRlcm1pbmVzIGhvdyB0byBub3JtYWxpemUgdGhlIHZhcmlhbmNlOlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIC0gJ3VuYmlhc2VkJyAgICBUaGUgc3VtIG9mIHNxdWFyZWQgZXJyb3JzIGlzIGRpdmlkZWQgYnkgKG4gLSAxKVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIC0gJ3VuY29ycmVjdGVkJyBUaGUgc3VtIG9mIHNxdWFyZWQgZXJyb3JzIGlzIGRpdmlkZWQgYnkgblxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIC0gJ2JpYXNlZCcgICAgICBUaGUgc3VtIG9mIHNxdWFyZWQgZXJyb3JzIGlzIGRpdmlkZWQgYnkgKG4gKyAxKVxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXJ9IHZhcmlhbmNlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF92YXIoYXJyYXksIG5vcm1hbGl6YXRpb24pIHtcbiAgICB2YXIgc3VtID0gMDtcbiAgICB2YXIgbnVtID0gMDtcblxuICAgIGlmIChhcnJheS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignRnVuY3Rpb24gdmFyaWFuY2UgcmVxdWlyZXMgb25lIG9yIG1vcmUgcGFyYW1ldGVycyAoMCBwcm92aWRlZCknKTtcbiAgICB9IC8vIGNhbGN1bGF0ZSB0aGUgbWVhbiBhbmQgbnVtYmVyIG9mIGVsZW1lbnRzXG5cblxuICAgICgwLCBfY29sbGVjdGlvbi5kZWVwRm9yRWFjaCkoYXJyYXksIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc3VtID0gYWRkKHN1bSwgdmFsdWUpO1xuICAgICAgICBudW0rKztcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyAoMCwgX2ltcHJvdmVFcnJvck1lc3NhZ2UuaW1wcm92ZUVycm9yTWVzc2FnZSkoZXJyLCAndmFyaWFuY2UnLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKG51bSA9PT0gMCkgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY2FsY3VsYXRlIHZhcmlhbmNlIG9mIGFuIGVtcHR5IGFycmF5Jyk7XG4gICAgdmFyIG1lYW4gPSBkaXZpZGUoc3VtLCBudW0pOyAvLyBjYWxjdWxhdGUgdGhlIHZhcmlhbmNlXG5cbiAgICBzdW0gPSAwO1xuICAgICgwLCBfY29sbGVjdGlvbi5kZWVwRm9yRWFjaCkoYXJyYXksIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgdmFyIGRpZmYgPSBzdWJ0cmFjdCh2YWx1ZSwgbWVhbik7XG4gICAgICBzdW0gPSBhZGQoc3VtLCBtdWx0aXBseShkaWZmLCBkaWZmKSk7XG4gICAgfSk7XG5cbiAgICBpZiAoaXNOYU4oc3VtKSkge1xuICAgICAgcmV0dXJuIHN1bTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKG5vcm1hbGl6YXRpb24pIHtcbiAgICAgIGNhc2UgJ3VuY29ycmVjdGVkJzpcbiAgICAgICAgcmV0dXJuIGRpdmlkZShzdW0sIG51bSk7XG5cbiAgICAgIGNhc2UgJ2JpYXNlZCc6XG4gICAgICAgIHJldHVybiBkaXZpZGUoc3VtLCBudW0gKyAxKTtcblxuICAgICAgY2FzZSAndW5iaWFzZWQnOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIHplcm8gPSAoMCwgX2lzLmlzQmlnTnVtYmVyKShzdW0pID8gc3VtLm11bCgwKSA6IDA7XG4gICAgICAgICAgcmV0dXJuIG51bSA9PT0gMSA/IHplcm8gOiBkaXZpZGUoc3VtLCBudW0gLSAxKTtcbiAgICAgICAgfVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gbm9ybWFsaXphdGlvbiBcIicgKyBub3JtYWxpemF0aW9uICsgJ1wiLiAnICsgJ0Nob29zZSBcInVuYmlhc2VkXCIgKGRlZmF1bHQpLCBcInVuY29ycmVjdGVkXCIsIG9yIFwiYmlhc2VkXCIuJyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gX3ZhckRpbShhcnJheSwgZGltLCBub3JtYWxpemF0aW9uKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChhcnJheS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdGdW5jdGlvbiB2YXJpYW5jZSByZXF1aXJlcyBvbmUgb3IgbW9yZSBwYXJhbWV0ZXJzICgwIHByb3ZpZGVkKScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXBwbHkoYXJyYXksIGRpbSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIF92YXIoeCwgbm9ybWFsaXphdGlvbik7XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRocm93ICgwLCBfaW1wcm92ZUVycm9yTWVzc2FnZS5pbXByb3ZlRXJyb3JNZXNzYWdlKShlcnIsICd2YXJpYW5jZScpO1xuICAgIH1cbiAgfVxufSk7IC8vIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNi4wLjAuIERhdGU6IDIwMTgtMTEtMDlcblxuZXhwb3J0cy5jcmVhdGVWYXJpYW5jZSA9IGNyZWF0ZVZhcmlhbmNlO1xudmFyIGNyZWF0ZURlcHJlY2F0ZWRWYXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkoJ3ZhcicsIFsndmFyaWFuY2UnXSwgZnVuY3Rpb24gKF9yZWYyKSB7XG4gIHZhciB2YXJpYW5jZSA9IF9yZWYyLnZhcmlhbmNlO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICgwLCBfbG9nLndhcm5PbmNlKSgnRnVuY3Rpb24gXCJ2YXJcIiBoYXMgYmVlbiByZW5hbWVkIHRvIFwidmFyaWFuY2VcIiBpbiB2Ni4wLjAsIHBsZWFzZSB1c2UgdGhlIG5ldyBmdW5jdGlvbiBpbnN0ZWFkLicpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiB2YXJpYW5jZS5hcHBseSh2YXJpYW5jZSwgYXJncyk7XG4gIH07XG59KTtcbmV4cG9ydHMuY3JlYXRlRGVwcmVjYXRlZFZhciA9IGNyZWF0ZURlcHJlY2F0ZWRWYXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUZvcm1hdCA9IHZvaWQgMDtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvc3RyaW5nXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnZm9ybWF0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlRm9ybWF0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogRm9ybWF0IGEgdmFsdWUgb2YgYW55IHR5cGUgaW50byBhIHN0cmluZy5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmZvcm1hdCh2YWx1ZSlcbiAgICogICAgbWF0aC5mb3JtYXQodmFsdWUsIG9wdGlvbnMpXG4gICAqICAgIG1hdGguZm9ybWF0KHZhbHVlLCBwcmVjaXNpb24pXG4gICAqICAgIG1hdGguZm9ybWF0KHZhbHVlLCBjYWxsYmFjaylcbiAgICpcbiAgICogV2hlcmU6XG4gICAqXG4gICAqICAtIGB2YWx1ZTogKmBcbiAgICogICAgVGhlIHZhbHVlIHRvIGJlIGZvcm1hdHRlZFxuICAgKiAgLSBgb3B0aW9uczogT2JqZWN0YFxuICAgKiAgICBBbiBvYmplY3Qgd2l0aCBmb3JtYXR0aW5nIG9wdGlvbnMuIEF2YWlsYWJsZSBvcHRpb25zOlxuICAgKiAgICAtIGBub3RhdGlvbjogc3RyaW5nYFxuICAgKiAgICAgIE51bWJlciBub3RhdGlvbi4gQ2hvb3NlIGZyb206XG4gICAqICAgICAgLSAnZml4ZWQnXG4gICAqICAgICAgICBBbHdheXMgdXNlIHJlZ3VsYXIgbnVtYmVyIG5vdGF0aW9uLlxuICAgKiAgICAgICAgRm9yIGV4YW1wbGUgJzEyMy40MCcgYW5kICcxNDAwMDAwMCdcbiAgICogICAgICAtICdleHBvbmVudGlhbCdcbiAgICogICAgICAgIEFsd2F5cyB1c2UgZXhwb25lbnRpYWwgbm90YXRpb24uXG4gICAqICAgICAgICBGb3IgZXhhbXBsZSAnMS4yMzRlKzInIGFuZCAnMS40ZSs3J1xuICAgKiAgICAgIC0gJ2VuZ2luZWVyaW5nJ1xuICAgKiAgICAgICAgQWx3YXlzIHVzZSBlbmdpbmVlcmluZyBub3RhdGlvbjogYWx3YXlzIGhhdmUgZXhwb25lbnRpYWwgbm90YXRpb24sXG4gICAqICAgICAgICBhbmQgc2VsZWN0IHRoZSBleHBvbmVudCB0byBiZSBhIG11bHRpcGxlIG9mIDMuXG4gICAqICAgICAgICBGb3IgZXhhbXBsZSAnMTIzLjRlKzAnIGFuZCAnMTQuMGUrNidcbiAgICogICAgICAtICdhdXRvJyAoZGVmYXVsdClcbiAgICogICAgICAgIFJlZ3VsYXIgbnVtYmVyIG5vdGF0aW9uIGZvciBudW1iZXJzIGhhdmluZyBhbiBhYnNvbHV0ZSB2YWx1ZSBiZXR3ZWVuXG4gICAqICAgICAgICBgbG93ZXJgIGFuZCBgdXBwZXJgIGJvdW5kcywgYW5kIHVzZXMgZXhwb25lbnRpYWwgbm90YXRpb24gZWxzZXdoZXJlLlxuICAgKiAgICAgICAgTG93ZXIgYm91bmQgaXMgaW5jbHVkZWQsIHVwcGVyIGJvdW5kIGlzIGV4Y2x1ZGVkLlxuICAgKiAgICAgICAgRm9yIGV4YW1wbGUgJzEyMy40JyBhbmQgJzEuNGU3Jy5cbiAgICogICAgLSBgcHJlY2lzaW9uOiBudW1iZXJgXG4gICAqICAgICAgQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxNiB0byByb3VuZCB0aGUgZGlnaXRzIG9mIHRoZSBudW1iZXIuIEluIGNhc2VcbiAgICogICAgICBvZiBub3RhdGlvbnMgJ2V4cG9uZW50aWFsJywgJ2VuZ2luZWVyaW5nJywgYW5kICdhdXRvJywgYHByZWNpc2lvbmBcbiAgICogICAgICBkZWZpbmVzIHRoZSB0b3RhbCBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIHJldHVybmVkLlxuICAgKiAgICAgIEluIGNhc2Ugb2Ygbm90YXRpb24gJ2ZpeGVkJywgYHByZWNpc2lvbmAgZGVmaW5lcyB0aGUgbnVtYmVyIG9mXG4gICAqICAgICAgc2lnbmlmaWNhbnQgZGlnaXRzIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50LlxuICAgKiAgICAgIGBwcmVjaXNpb25gIGlzIHVuZGVmaW5lZCBieSBkZWZhdWx0LlxuICAgKiAgICAtIGBsb3dlckV4cDogbnVtYmVyYFxuICAgKiAgICAgIEV4cG9uZW50IGRldGVybWluaW5nIHRoZSBsb3dlciBib3VuZGFyeSBmb3IgZm9ybWF0dGluZyBhIHZhbHVlIHdpdGhcbiAgICogICAgICBhbiBleHBvbmVudCB3aGVuIGBub3RhdGlvbj0nYXV0b2AuIERlZmF1bHQgdmFsdWUgaXMgYC0zYC5cbiAgICogICAgLSBgdXBwZXJFeHA6IG51bWJlcmBcbiAgICogICAgICBFeHBvbmVudCBkZXRlcm1pbmluZyB0aGUgdXBwZXIgYm91bmRhcnkgZm9yIGZvcm1hdHRpbmcgYSB2YWx1ZSB3aXRoXG4gICAqICAgICAgYW4gZXhwb25lbnQgd2hlbiBgbm90YXRpb249J2F1dG9gLiBEZWZhdWx0IHZhbHVlIGlzIGA1YC5cbiAgICogICAgLSBgZnJhY3Rpb246IHN0cmluZ2AuIEF2YWlsYWJsZSB2YWx1ZXM6ICdyYXRpbycgKGRlZmF1bHQpIG9yICdkZWNpbWFsJy5cbiAgICogICAgICBGb3IgZXhhbXBsZSBgZm9ybWF0KGZyYWN0aW9uKDEsIDMpKWAgd2lsbCBvdXRwdXQgJzEvMycgd2hlbiAncmF0aW8nIGlzXG4gICAqICAgICAgY29uZmlndXJlZCwgYW5kIHdpbGwgb3V0cHV0IGAwLigzKWAgd2hlbiAnZGVjaW1hbCcgaXMgY29uZmlndXJlZC5cbiAgICogLSBgY2FsbGJhY2s6IGZ1bmN0aW9uYFxuICAgKiAgIEEgY3VzdG9tIGZvcm1hdHRpbmcgZnVuY3Rpb24sIGludm9rZWQgZm9yIGFsbCBudW1lcmljIGVsZW1lbnRzIGluIGB2YWx1ZWAsXG4gICAqICAgZm9yIGV4YW1wbGUgYWxsIGVsZW1lbnRzIG9mIGEgbWF0cml4LCBvciB0aGUgcmVhbCBhbmQgaW1hZ2luYXJ5XG4gICAqICAgcGFydHMgb2YgYSBjb21wbGV4IG51bWJlci4gVGhpcyBjYWxsYmFjayBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSB0aGVcbiAgICogICBidWlsdC1pbiBudW1lcmljIG5vdGF0aW9uIHdpdGggYW55IHR5cGUgb2YgZm9ybWF0dGluZy4gRnVuY3Rpb24gYGNhbGxiYWNrYFxuICAgKiAgIGlzIGNhbGxlZCB3aXRoIGB2YWx1ZWAgYXMgcGFyYW1ldGVyIGFuZCBtdXN0IHJldHVybiBhIHN0cmluZy5cbiAgICpcbiAgICogV2hlbiBgdmFsdWVgIGlzIGFuIE9iamVjdDpcbiAgICpcbiAgICogLSBXaGVuIHRoZSBvYmplY3QgY29udGFpbnMgYSBwcm9wZXJ0eSBgZm9ybWF0YCBiZWluZyBhIGZ1bmN0aW9uLCB0aGlzIGZ1bmN0aW9uXG4gICAqICAgaXMgaW52b2tlZCBhcyBgdmFsdWUuZm9ybWF0KG9wdGlvbnMpYCBhbmQgdGhlIHJlc3VsdCBpcyByZXR1cm5lZC5cbiAgICogLSBXaGVuIHRoZSBvYmplY3QgaGFzIGl0cyBvd24gYHRvU3RyaW5nYCBtZXRob2QsIHRoaXMgbWV0aG9kIGlzIGludm9rZWRcbiAgICogICBhbmQgdGhlIHJlc3VsdCBpcyByZXR1cm5lZC5cbiAgICogLSBJbiBvdGhlciBjYXNlcyB0aGUgZnVuY3Rpb24gd2lsbCBsb29wIG92ZXIgYWxsIG9iamVjdCBwcm9wZXJ0aWVzIGFuZFxuICAgKiAgIHJldHVybiBKU09OIG9iamVjdCBub3RhdGlvbiBsaWtlICd7XCJhXCI6IDIsIFwiYlwiOiAzfScuXG4gICAqXG4gICAqIFdoZW4gdmFsdWUgaXMgYSBmdW5jdGlvbjpcbiAgICpcbiAgICogLSBXaGVuIHRoZSBmdW5jdGlvbiBoYXMgYSBwcm9wZXJ0eSBgc3ludGF4YCwgaXQgcmV0dXJucyB0aGlzXG4gICAqICAgc3ludGF4IGRlc2NyaXB0aW9uLlxuICAgKiAtIEluIG90aGVyIGNhc2VzLCBhIHN0cmluZyBgJ2Z1bmN0aW9uJ2AgaXMgcmV0dXJuZWQuXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmZvcm1hdCg2LjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgJzYuNCdcbiAgICogICAgbWF0aC5mb3JtYXQoMTI0MDAwMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zICcxLjI0ZTYnXG4gICAqICAgIG1hdGguZm9ybWF0KDEvMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAnMC4zMzMzMzMzMzMzMzMzMzMzJ1xuICAgKiAgICBtYXRoLmZvcm1hdCgxLzMsIDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgJzAuMzMzJ1xuICAgKiAgICBtYXRoLmZvcm1hdCgyMTM4NSwgMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgJzIxMDAwJ1xuICAgKiAgICBtYXRoLmZvcm1hdCgxMmU4LCB7bm90YXRpb246ICdmaXhlZCd9KSAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgJzEyMDAwMDAwMDAnXG4gICAqICAgIG1hdGguZm9ybWF0KDIuMywgIHtub3RhdGlvbjogJ2ZpeGVkJywgcHJlY2lzaW9uOiA0fSkgICAgLy8gcmV0dXJucyAnMi4zMDAwJ1xuICAgKiAgICBtYXRoLmZvcm1hdCg1Mi44LCB7bm90YXRpb246ICdleHBvbmVudGlhbCd9KSAgICAgICAgICAgIC8vIHJldHVybnMgJzUuMjhlKzEnXG4gICAqICAgIG1hdGguZm9ybWF0KDEyNDAwLHtub3RhdGlvbjogJ2VuZ2luZWVyaW5nJ30pICAgICAgICAgICAgLy8gcmV0dXJucyAnMTIuNDAwZSszJ1xuICAgKiAgICBtYXRoLmZvcm1hdCgyMDAwLCB7bG93ZXJFeHA6IC0yLCB1cHBlckV4cDogMn0pICAgICAgICAgIC8vIHJldHVybnMgJzJlKzMnXG4gICAqXG4gICAqICAgIGZ1bmN0aW9uIGZvcm1hdEN1cnJlbmN5KHZhbHVlKSB7XG4gICAqICAgICAgLy8gcmV0dXJuIGN1cnJlbmN5IG5vdGF0aW9uIHdpdGggdHdvIGRpZ2l0czpcbiAgICogICAgICByZXR1cm4gJyQnICsgdmFsdWUudG9GaXhlZCgyKVxuICAgKlxuICAgKiAgICAgIC8vIHlvdSBjb3VsZCBhbHNvIHVzZSBtYXRoLmZvcm1hdCBpbnNpZGUgdGhlIGNhbGxiYWNrOlxuICAgKiAgICAgIC8vIHJldHVybiAnJCcgKyBtYXRoLmZvcm1hdCh2YWx1ZSwge25vdGF0aW9uOiAnZml4ZWQnLCBwcmVjaXNpb246IDJ9KVxuICAgKiAgICB9XG4gICAqICAgIG1hdGguZm9ybWF0KFsyLjEsIDMsIDAuMDE2XSwgZm9ybWF0Q3VycmVuY3l9ICAgICAgICAgICAgLy8gcmV0dXJucyAnWyQyLjEwLCAkMy4wMCwgJDAuMDJdJ1xuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgcHJpbnRcbiAgICpcbiAgICogQHBhcmFtIHsqfSB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSB0byBiZSBzdHJpbmdpZmllZFxuICAgKiBAcGFyYW0ge09iamVjdCB8IEZ1bmN0aW9uIHwgbnVtYmVyfSBbb3B0aW9uc10gIEZvcm1hdHRpbmcgb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgdmFsdWVcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgYW55OiBfc3RyaW5nLmZvcm1hdCxcbiAgICAnYW55LCBPYmplY3QgfCBmdW5jdGlvbiB8IG51bWJlcic6IF9zdHJpbmcuZm9ybWF0XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZUZvcm1hdCA9IGNyZWF0ZUZvcm1hdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUHJpbnQgPSB2b2lkIDA7XG5cbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3N0cmluZ1wiKTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3ByaW50JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlUHJpbnQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBJbnRlcnBvbGF0ZSB2YWx1ZXMgaW50byBhIHN0cmluZyB0ZW1wbGF0ZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5wcmludCh0ZW1wbGF0ZSwgdmFsdWVzKVxuICAgKiAgICAgbWF0aC5wcmludCh0ZW1wbGF0ZSwgdmFsdWVzLCBwcmVjaXNpb24pXG4gICAqICAgICBtYXRoLnByaW50KHRlbXBsYXRlLCB2YWx1ZXMsIG9wdGlvbnMpXG4gICAqXG4gICAqIEV4YW1wbGUgdXNhZ2U6XG4gICAqXG4gICAqICAgICAvLyB0aGUgZm9sbG93aW5nIG91dHB1dHM6ICdMdWN5IGlzIDUgeWVhcnMgb2xkJ1xuICAgKiAgICAgbWF0aC5wcmludCgnTHVjeSBpcyAkYWdlIHllYXJzIG9sZCcsIHthZ2U6IDV9KVxuICAgKlxuICAgKiAgICAgLy8gdGhlIGZvbGxvd2luZyBvdXRwdXRzOiAnVGhlIHZhbHVlIG9mIHBpIGlzIDMuMTQxNTkyNjU0J1xuICAgKiAgICAgbWF0aC5wcmludCgnVGhlIHZhbHVlIG9mIHBpIGlzICRwaScsIHtwaTogbWF0aC5waX0sIDEwKVxuICAgKlxuICAgKiAgICAgLy8gdGhlIGZvbGxvd2luZyBvdXRwdXRzOiAnaGVsbG8gTWFyeSEgVGhlIGRhdGUgaXMgMjAxMy0wMy0yMydcbiAgICogICAgIG1hdGgucHJpbnQoJ0hlbGxvICR1c2VyLm5hbWUhIFRoZSBkYXRlIGlzICRkYXRlJywge1xuICAgKiAgICAgICB1c2VyOiB7XG4gICAqICAgICAgICAgbmFtZTogJ01hcnknLFxuICAgKiAgICAgICB9LFxuICAgKiAgICAgICBkYXRlOiBuZXcgRGF0ZSgyMDEzLCAyLCAyMykudG9JU09TdHJpbmcoKS5zdWJzdHJpbmcoMCwgMTApXG4gICAqICAgICB9KVxuICAgKlxuICAgKiAgICAgLy8gdGhlIGZvbGxvd2luZyBvdXRwdXRzOiAnTXkgZmF2b3JpdGUgZnJ1aXRzIGFyZSBhcHBsZXMgYW5kIGJhbmFuYXMgISdcbiAgICogICAgIG1hdGgucHJpbnQoJ015IGZhdm9yaXRlIGZydWl0cyBhcmUgJDAgYW5kICQxICEnLCBbXG4gICAqICAgICAgICdhcHBsZXMnLFxuICAgKiAgICAgICAnYmFuYW5hcydcbiAgICogICAgIF0pXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgZm9ybWF0XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZW1wbGF0ZSAgICAgICAgICAgQSBzdHJpbmcgY29udGFpbmluZyB2YXJpYWJsZSBwbGFjZWhvbGRlcnMuXG4gICAqIEBwYXJhbSB7T2JqZWN0IHwgQXJyYXkgfCBNYXRyaXh9ICAgdmFsdWVzIEFuIG9iamVjdCBvciBhcnJheSBjb250YWluaW5nIHZhcmlhYmxlc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIHdpbGwgYmUgZmlsbGVkIGluIGluIHRoZSB0ZW1wbGF0ZS5cbiAgICogQHBhcmFtIHtudW1iZXIgfCBPYmplY3R9IFtvcHRpb25zXSBGb3JtYXR0aW5nIG9wdGlvbnMsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgdGhlIG51bWJlciBvZiBkaWdpdHMgdG8gZm9ybWF0IG51bWJlcnMuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIGZ1bmN0aW9uIG1hdGguZm9ybWF0IGZvciBhIGRlc2NyaXB0aW9uXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgYWxsIG9wdGlvbnMuXG4gICAqIEByZXR1cm4ge3N0cmluZ30gSW50ZXJwb2xhdGVkIHN0cmluZ1xuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAvLyBub3RlOiBNYXRyaXggd2lsbCBiZSBjb252ZXJ0ZWQgYXV0b21hdGljYWxseSB0byBhbiBBcnJheVxuICAgICdzdHJpbmcsIE9iamVjdCB8IEFycmF5JzogX3ByaW50LFxuICAgICdzdHJpbmcsIE9iamVjdCB8IEFycmF5LCBudW1iZXIgfCBPYmplY3QnOiBfcHJpbnRcbiAgfSk7XG59KTtcbi8qKlxuICogSW50ZXJwb2xhdGUgdmFsdWVzIGludG8gYSBzdHJpbmcgdGVtcGxhdGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gdGVtcGxhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZXNcbiAqIEBwYXJhbSB7bnVtYmVyIHwgT2JqZWN0fSBbb3B0aW9uc11cbiAqIEByZXR1cm5zIHtzdHJpbmd9IEludGVycG9sYXRlZCBzdHJpbmdcbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0cy5jcmVhdGVQcmludCA9IGNyZWF0ZVByaW50O1xuXG5mdW5jdGlvbiBfcHJpbnQodGVtcGxhdGUsIHZhbHVlcywgb3B0aW9ucykge1xuICByZXR1cm4gdGVtcGxhdGUucmVwbGFjZSgvXFwkKFtcXHcuXSspL2csIGZ1bmN0aW9uIChvcmlnaW5hbCwga2V5KSB7XG4gICAgdmFyIGtleXMgPSBrZXkuc3BsaXQoJy4nKTtcbiAgICB2YXIgdmFsdWUgPSB2YWx1ZXNba2V5cy5zaGlmdCgpXTtcblxuICAgIHdoaWxlIChrZXlzLmxlbmd0aCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgayA9IGtleXMuc2hpZnQoKTtcbiAgICAgIHZhbHVlID0gayA/IHZhbHVlW2tdIDogdmFsdWUgKyAnLic7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICghKDAsIF9pcy5pc1N0cmluZykodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiAoMCwgX3N0cmluZy5mb3JtYXQpKHZhbHVlLCBvcHRpb25zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb3JpZ2luYWw7XG4gIH0pO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBY29zID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBuYW1lID0gJ2Fjb3MnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ0NvbXBsZXgnXTtcbnZhciBjcmVhdGVBY29zID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgQ29tcGxleCA9IF9yZWYuQ29tcGxleDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBpbnZlcnNlIGNvc2luZSBvZiBhIHZhbHVlLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguYWNvcyh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5hY29zKDAuNSkgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDEuMDQ3MTk3NTUxMTk2NTk3OVxuICAgKiAgICBtYXRoLmFjb3MobWF0aC5jb3MoMS41KSkgLy8gcmV0dXJucyBudW1iZXIgMS41XG4gICAqXG4gICAqICAgIG1hdGguYWNvcygyKSAgICAgICAgICAgICAvLyByZXR1cm5zIENvbXBsZXggMCArIDEuMzE2OTU3ODk2OTI0ODE2NiBpXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjb3MsIGF0YW4sIGFzaW5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHggIEZ1bmN0aW9uIGlucHV0XG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gVGhlIGFyYyBjb3NpbmUgb2YgeFxuICAgKi9cbiAgdmFyIGFjb3MgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkge1xuICAgICAgaWYgKHggPj0gLTEgJiYgeCA8PSAxIHx8IGNvbmZpZy5wcmVkaWN0YWJsZSkge1xuICAgICAgICByZXR1cm4gTWF0aC5hY29zKHgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgsIDApLmFjb3MoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHguYWNvcygpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHguYWNvcygpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBhY29zKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYWNvcztcbn0pO1xuZXhwb3J0cy5jcmVhdGVBY29zID0gY3JlYXRlQWNvczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQWNvc2ggPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdhY29zaCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnQ29tcGxleCddO1xudmFyIGNyZWF0ZUFjb3NoID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgQ29tcGxleCA9IF9yZWYuQ29tcGxleDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBoeXBlcmJvbGljIGFyY2NvcyBvZiBhIHZhbHVlLFxuICAgKiBkZWZpbmVkIGFzIGBhY29zaCh4KSA9IGxuKHNxcnQoeF4yIC0gMSkgKyB4KWAuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5hY29zaCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5hY29zaCgxLjUpICAgICAgIC8vIHJldHVybnMgMC45NjI0MjM2NTAxMTkyMDY5XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjb3NoLCBhc2luaCwgYXRhbmhcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4ICBGdW5jdGlvbiBpbnB1dFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IEh5cGVyYm9saWMgYXJjY29zaW5lIG9mIHhcbiAgICovXG4gIHZhciBhY29zaCA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICBpZiAoeCA+PSAxIHx8IGNvbmZpZy5wcmVkaWN0YWJsZSkge1xuICAgICAgICByZXR1cm4gKDAsIF9udW1iZXIuYWNvc2hOdW1iZXIpKHgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoeCA8PSAtMSkge1xuICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoTWF0aC5sb2coTWF0aC5zcXJ0KHggKiB4IC0gMSkgLSB4KSwgTWF0aC5QSSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleCh4LCAwKS5hY29zaCgpO1xuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5hY29zaCgpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHguYWNvc2goKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgYWNvc2gpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBhY29zaDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVBY29zaCA9IGNyZWF0ZUFjb3NoOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBY290ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnYWNvdCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdCaWdOdW1iZXInXTtcbnZhciBjcmVhdGVBY290ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIF9CaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcjtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBpbnZlcnNlIGNvdGFuZ2VudCBvZiBhIHZhbHVlLCBkZWZpbmVkIGFzIGBhY290KHgpID0gYXRhbigxL3gpYC5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmFjb3QoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguYWNvdCgwLjUpICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAwLjQ2MzY0NzYwOTAwMDgwNjFcbiAgICogICAgbWF0aC5hY290KG1hdGguY290KDEuNSkpIC8vIHJldHVybnMgbnVtYmVyIDEuNVxuICAgKlxuICAgKiAgICBtYXRoLmFjb3QoMikgICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDEuNTcwNzk2MzI2Nzk0ODk2NiAtMS4zMTY5NTc4OTY5MjQ4MTY2IGlcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGNvdCwgYXRhblxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geCAgIEZ1bmN0aW9uIGlucHV0XG4gICAqIEByZXR1cm4ge251bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gVGhlIGFyYyBjb3RhbmdlbnQgb2YgeFxuICAgKi9cbiAgdmFyIGFjb3QgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmFjb3ROdW1iZXIsXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5hY290KCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4gbmV3IF9CaWdOdW1iZXIoMSkuZGl2KHgpLmF0YW4oKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgYWNvdCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGFjb3Q7XG59KTtcbmV4cG9ydHMuY3JlYXRlQWNvdCA9IGNyZWF0ZUFjb3Q7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFjb3RoID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnYWNvdGgnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ0NvbXBsZXgnLCAnQmlnTnVtYmVyJ107XG52YXIgY3JlYXRlQWNvdGggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4LFxuICAgICAgX0JpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgYXJjY290YW5nZW50IG9mIGEgdmFsdWUsXG4gICAqIGRlZmluZWQgYXMgYGFjb3RoKHgpID0gYXRhbmgoMS94KSA9IChsbigoeCsxKS94KSArIGxuKHgvKHgtMSkpKSAvIDJgLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguYWNvdGgoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguYWNvdGgoMC41KSAgICAgICAvLyByZXR1cm5zIDAuODA0NzE4OTU2MjE3MDUwM1xuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYWNzY2gsIGFzZWNoXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4ICBGdW5jdGlvbiBpbnB1dFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IEh5cGVyYm9saWMgYXJjY290YW5nZW50IG9mIHhcbiAgICovXG4gIHZhciBhY290aCA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICBpZiAoeCA+PSAxIHx8IHggPD0gLTEgfHwgY29uZmlnLnByZWRpY3RhYmxlKSB7XG4gICAgICAgIHJldHVybiAoMCwgX251bWJlci5hY290aE51bWJlcikoeCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleCh4LCAwKS5hY290aCgpO1xuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5hY290aCgpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIG5ldyBfQmlnTnVtYmVyKDEpLmRpdih4KS5hdGFuaCgpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBhY290aCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGFjb3RoO1xufSk7XG5leHBvcnRzLmNyZWF0ZUFjb3RoID0gY3JlYXRlQWNvdGg7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFjc2MgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdhY3NjJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdDb21wbGV4JywgJ0JpZ051bWJlciddO1xudmFyIGNyZWF0ZUFjc2MgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4LFxuICAgICAgX0JpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGludmVyc2UgY29zZWNhbnQgb2YgYSB2YWx1ZSwgZGVmaW5lZCBhcyBgYWNzYyh4KSA9IGFzaW4oMS94KWAuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5hY3NjKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmFjc2MoMC41KSAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMC41MjM1OTg3NzU1OTgyOTg5XG4gICAqICAgIG1hdGguYWNzYyhtYXRoLmNzYygxLjUpKSAvLyByZXR1cm5zIG51bWJlciB+MS41XG4gICAqXG4gICAqICAgIG1hdGguYWNzYygyKSAgICAgICAgICAgICAvLyByZXR1cm5zIENvbXBsZXggMS41NzA3OTYzMjY3OTQ4OTY2IC0xLjMxNjk1Nzg5NjkyNDgxNjYgaVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgY3NjLCBhc2luLCBhc2VjXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4ICAgRnVuY3Rpb24gaW5wdXRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBUaGUgYXJjIGNvc2VjYW50IG9mIHhcbiAgICovXG4gIHZhciBhY3NjID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgICAgIGlmICh4IDw9IC0xIHx8IHggPj0gMSB8fCBjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfbnVtYmVyLmFjc2NOdW1iZXIpKHgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoeCwgMCkuYWNzYygpO1xuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5hY3NjKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4gbmV3IF9CaWdOdW1iZXIoMSkuZGl2KHgpLmFzaW4oKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgYWNzYyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGFjc2M7XG59KTtcbmV4cG9ydHMuY3JlYXRlQWNzYyA9IGNyZWF0ZUFjc2M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFjc2NoID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnYWNzY2gnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnQmlnTnVtYmVyJ107XG52YXIgY3JlYXRlQWNzY2ggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgX0JpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgYXJjY29zZWNhbnQgb2YgYSB2YWx1ZSxcbiAgICogZGVmaW5lZCBhcyBgYWNzY2goeCkgPSBhc2luaCgxL3gpID0gbG4oMS94ICsgc3FydCgxL3heMiArIDEpKWAuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5hY3NjaCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5hY3NjaCgwLjUpICAgICAgIC8vIHJldHVybnMgMS40NDM2MzU0NzUxNzg4MTAzXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBhc2VjaCwgYWNvdGhcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHggIEZ1bmN0aW9uIGlucHV0XG4gICAqIEByZXR1cm4ge251bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gSHlwZXJib2xpYyBhcmNjb3NlY2FudCBvZiB4XG4gICAqL1xuICB2YXIgYWNzY2ggPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmFjc2NoTnVtYmVyLFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHguYWNzY2goKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiBuZXcgX0JpZ051bWJlcigxKS5kaXYoeCkuYXNpbmgoKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgYWNzY2gpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBhY3NjaDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVBY3NjaCA9IGNyZWF0ZUFjc2NoOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBc2VjID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnYXNlYyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnQ29tcGxleCcsICdCaWdOdW1iZXInXTtcbnZhciBjcmVhdGVBc2VjID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgQ29tcGxleCA9IF9yZWYuQ29tcGxleCxcbiAgICAgIF9CaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcjtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBpbnZlcnNlIHNlY2FudCBvZiBhIHZhbHVlLiBEZWZpbmVkIGFzIGBhc2VjKHgpID0gYWNvcygxL3gpYC5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmFzZWMoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguYXNlYygwLjUpICAgICAgICAgICAvLyByZXR1cm5zIDEuMDQ3MTk3NTUxMTk2NTk3OVxuICAgKiAgICBtYXRoLmFzZWMobWF0aC5zZWMoMS41KSkgLy8gcmV0dXJucyAxLjVcbiAgICpcbiAgICogICAgbWF0aC5hc2VjKDIpICAgICAgICAgICAgIC8vIHJldHVybnMgMCArIDEuMzE2OTU3ODk2OTI0ODE2NiBpXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBhY29zLCBhY290LCBhY3NjXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4ICBGdW5jdGlvbiBpbnB1dFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IFRoZSBhcmMgc2VjYW50IG9mIHhcbiAgICovXG4gIHZhciBhc2VjID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgICAgIGlmICh4IDw9IC0xIHx8IHggPj0gMSB8fCBjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfbnVtYmVyLmFzZWNOdW1iZXIpKHgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoeCwgMCkuYXNlYygpO1xuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5hc2VjKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4gbmV3IF9CaWdOdW1iZXIoMSkuZGl2KHgpLmFjb3MoKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgYXNlYyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGFzZWM7XG59KTtcbmV4cG9ydHMuY3JlYXRlQXNlYyA9IGNyZWF0ZUFzZWM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFzZWNoID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnYXNlY2gnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ0NvbXBsZXgnLCAnQmlnTnVtYmVyJ107XG52YXIgY3JlYXRlQXNlY2ggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4LFxuICAgICAgX0JpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgYXJjc2VjYW50IG9mIGEgdmFsdWUsXG4gICAqIGRlZmluZWQgYXMgYGFzZWNoKHgpID0gYWNvc2goMS94KSA9IGxuKHNxcnQoMS94XjIgLSAxKSArIDEveClgLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguYXNlY2goeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguYXNlY2goMC41KSAgICAgICAvLyByZXR1cm5zIDEuMzE2OTU3ODk2OTI0ODE2NlxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYWNzY2gsIGFjb3RoXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4ICBGdW5jdGlvbiBpbnB1dFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IEh5cGVyYm9saWMgYXJjc2VjYW50IG9mIHhcbiAgICovXG4gIHZhciBhc2VjaCA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICBpZiAoeCA8PSAxICYmIHggPj0gLTEgfHwgY29uZmlnLnByZWRpY3RhYmxlKSB7XG4gICAgICAgIHZhciB4SW52ID0gMSAvIHg7XG5cbiAgICAgICAgaWYgKHhJbnYgPiAwIHx8IGNvbmZpZy5wcmVkaWN0YWJsZSkge1xuICAgICAgICAgIHJldHVybiAoMCwgX251bWJlci5hc2VjaE51bWJlcikoeCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmV0ID0gTWF0aC5zcXJ0KHhJbnYgKiB4SW52IC0gMSk7XG4gICAgICAgIHJldHVybiBuZXcgQ29tcGxleChNYXRoLmxvZyhyZXQgLSB4SW52KSwgTWF0aC5QSSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleCh4LCAwKS5hc2VjaCgpO1xuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5hc2VjaCgpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIG5ldyBfQmlnTnVtYmVyKDEpLmRpdih4KS5hY29zaCgpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBhc2VjaCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGFzZWNoO1xufSk7XG5leHBvcnRzLmNyZWF0ZUFzZWNoID0gY3JlYXRlQXNlY2g7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFzaW4gPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIG5hbWUgPSAnYXNpbic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnQ29tcGxleCddO1xudmFyIGNyZWF0ZUFzaW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGludmVyc2Ugc2luZSBvZiBhIHZhbHVlLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguYXNpbih4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5hc2luKDAuNSkgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDAuNTIzNTk4Nzc1NTk4Mjk4OVxuICAgKiAgICBtYXRoLmFzaW4obWF0aC5zaW4oMS41KSkgLy8gcmV0dXJucyBudW1iZXIgfjEuNVxuICAgKlxuICAgKiAgICBtYXRoLmFzaW4oMikgICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDEuNTcwNzk2MzI2Nzk0ODk2NiAtMS4zMTY5NTc4OTY5MjQ4MTY2IGlcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIHNpbiwgYXRhbiwgYWNvc1xuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geCAgIEZ1bmN0aW9uIGlucHV0XG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gVGhlIGFyYyBzaW5lIG9mIHhcbiAgICovXG4gIHZhciBhc2luID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgICAgIGlmICh4ID49IC0xICYmIHggPD0gMSB8fCBjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguYXNpbih4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29tcGxleCh4LCAwKS5hc2luKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmFzaW4oKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LmFzaW4oKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIC8vIGRlZXAgbWFwIGNvbGxlY3Rpb24sIHNraXAgemVyb3Mgc2luY2UgYXNpbigwKSA9IDBcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgYXNpbiwgdHJ1ZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGFzaW47XG59KTtcbmV4cG9ydHMuY3JlYXRlQXNpbiA9IGNyZWF0ZUFzaW47IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFzaW5oID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnYXNpbmgnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVBc2luaCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgaHlwZXJib2xpYyBhcmNzaW5lIG9mIGEgdmFsdWUsXG4gICAqIGRlZmluZWQgYXMgYGFzaW5oKHgpID0gbG4oeCArIHNxcnQoeF4yICsgMSkpYC5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmFzaW5oKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmFzaW5oKDAuNSkgICAgICAgLy8gcmV0dXJucyAwLjQ4MTIxMTgyNTA1OTYwMzQ3XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBhY29zaCwgYXRhbmhcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHggIEZ1bmN0aW9uIGlucHV0XG4gICAqIEByZXR1cm4ge251bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gSHlwZXJib2xpYyBhcmNzaW5lIG9mIHhcbiAgICovXG4gIHZhciBhc2luaCA9IHR5cGVkKCdhc2luaCcsIHtcbiAgICBudW1iZXI6IF9udW1iZXIuYXNpbmhOdW1iZXIsXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5hc2luaCgpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHguYXNpbmgoKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIC8vIGRlZXAgbWFwIGNvbGxlY3Rpb24sIHNraXAgemVyb3Mgc2luY2UgYXNpbmgoMCkgPSAwXG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGFzaW5oLCB0cnVlKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYXNpbmg7XG59KTtcbmV4cG9ydHMuY3JlYXRlQXNpbmggPSBjcmVhdGVBc2luaDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQXRhbiA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgbmFtZSA9ICdhdGFuJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlQXRhbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgaW52ZXJzZSB0YW5nZW50IG9mIGEgdmFsdWUuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5hdGFuKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmF0YW4oMC41KSAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMC40NjM2NDc2MDkwMDA4MDYxXG4gICAqICAgIG1hdGguYXRhbihtYXRoLnRhbigxLjUpKSAvLyByZXR1cm5zIG51bWJlciAxLjVcbiAgICpcbiAgICogICAgbWF0aC5hdGFuKDIpICAgICAgICAgICAgIC8vIHJldHVybnMgQ29tcGxleCAxLjU3MDc5NjMyNjc5NDg5NjYgLTEuMzE2OTU3ODk2OTI0ODE2NiBpXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICB0YW4sIGFzaW4sIGFjb3NcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHggICBGdW5jdGlvbiBpbnB1dFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IFRoZSBhcmMgdGFuZ2VudCBvZiB4XG4gICAqL1xuICB2YXIgYXRhbiA9IHR5cGVkKCdhdGFuJywge1xuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiBNYXRoLmF0YW4oeCk7XG4gICAgfSxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmF0YW4oKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LmF0YW4oKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIC8vIGRlZXAgbWFwIGNvbGxlY3Rpb24sIHNraXAgemVyb3Mgc2luY2UgYXRhbigwKSA9IDBcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgYXRhbiwgdHJ1ZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGF0YW47XG59KTtcbmV4cG9ydHMuY3JlYXRlQXRhbiA9IGNyZWF0ZUF0YW47IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUF0YW4yID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDJcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wM1wiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA5XCIpO1xuXG52YXIgX2FsZ29yaXRobTQgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTFcIik7XG5cbnZhciBfYWxnb3JpdGhtNSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMlwiKTtcblxudmFyIF9hbGdvcml0aG02ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgX2FsZ29yaXRobTcgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBuYW1lID0gJ2F0YW4yJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdlcXVhbFNjYWxhcicsICdCaWdOdW1iZXInLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVBdGFuMiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIEJpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMDIgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wMyA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0wMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTA5ID0gKDAsIF9hbGdvcml0aG0zLmNyZWF0ZUFsZ29yaXRobTA5KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTExID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTExKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEyID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTEyKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEzID0gKDAsIF9hbGdvcml0aG02LmNyZWF0ZUFsZ29yaXRobTEzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTcuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGludmVyc2UgdGFuZ2VudCBmdW5jdGlvbiB3aXRoIHR3byBhcmd1bWVudHMsIHkveC5cbiAgICogQnkgcHJvdmlkaW5nIHR3byBhcmd1bWVudHMsIHRoZSByaWdodCBxdWFkcmFudCBvZiB0aGUgY29tcHV0ZWQgYW5nbGUgY2FuIGJlXG4gICAqIGRldGVybWluZWQuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5hdGFuMih5LCB4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5hdGFuMigyLCAyKSAvIG1hdGgucGkgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMC4yNVxuICAgKlxuICAgKiAgICBjb25zdCBhbmdsZSA9IG1hdGgudW5pdCg2MCwgJ2RlZycpIC8vIHJldHVybnMgVW5pdCA2MCBkZWdcbiAgICogICAgY29uc3QgeCA9IG1hdGguY29zKGFuZ2xlKVxuICAgKiAgICBjb25zdCB5ID0gbWF0aC5zaW4oYW5nbGUpXG4gICAqXG4gICAqICAgIG1hdGguYXRhbigyKSAgICAgICAgICAgICAvLyByZXR1cm5zIENvbXBsZXggMS41NzA3OTYzMjY3OTQ4OTY2IC0xLjMxNjk1Nzg5NjkyNDgxNjYgaVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgdGFuLCBhdGFuLCBzaW4sIGNvc1xuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEFycmF5IHwgTWF0cml4fSB5ICBTZWNvbmQgZGltZW5zaW9uXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IHggIEZpcnN0IGRpbWVuc2lvblxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBBcnJheSB8IE1hdHJpeH0gRm91ci1xdWFkcmFudCBpbnZlcnNlIHRhbmdlbnRcbiAgICovXG5cbiAgdmFyIGF0YW4yID0gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIsIG51bWJlcic6IE1hdGguYXRhbjIsXG4gICAgLy8gQ29tcGxleCBudW1iZXJzIGRvZXNuJ3Qgc2VlbSB0byBoYXZlIGEgcmVhc29uYWJsZSBpbXBsZW1lbnRhdGlvbiBvZlxuICAgIC8vIGF0YW4yKCkuIEV2ZW4gTWF0bGFiIHJlbW92ZWQgdGhlIHN1cHBvcnQsIGFmdGVyIHRoZXkgb25seSBjYWxjdWxhdGVkXG4gICAgLy8gdGhlIGF0YW4gb25seSBvbiBiYXNlIG9mIHRoZSByZWFsIHBhcnQgb2YgdGhlIG51bWJlcnMgYW5kIGlnbm9yZWQgdGhlIGltYWdpbmFyeS5cbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIoeSwgeCkge1xuICAgICAgcmV0dXJuIEJpZ051bWJlci5hdGFuMih5LCB4KTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDkoeCwgeSwgYXRhbjIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gbWluZCB0aGUgb3JkZXIgb2YgeSBhbmQgeCFcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMih5LCB4LCBhdGFuMiwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh4LCB5LCBhdGFuMiwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIGF0YW4yKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIHJldHVybiBhdGFuMihtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYXRhbjIobWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgcmV0dXJuIGF0YW4yKHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTExKHgsIHksIGF0YW4yLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIERlbnNlTWF0cml4TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBhdGFuMiwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyU3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIG1pbmQgdGhlIG9yZGVyIG9mIHkgYW5kIHhcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih5LCB4LCBhdGFuMiwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckRlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIG1pbmQgdGhlIG9yZGVyIG9mIHkgYW5kIHhcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCBhdGFuMiwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIEFycmF5TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeCksIHksIGF0YW4yLCBmYWxzZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgQXJyYXknOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJBcnJheSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCBhdGFuMiwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBhdGFuMjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVBdGFuMiA9IGNyZWF0ZUF0YW4yOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBdGFuaCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2F0YW5oJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdDb21wbGV4J107XG52YXIgY3JlYXRlQXRhbmggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgYXJjdGFuZ2VudCBvZiBhIHZhbHVlLFxuICAgKiBkZWZpbmVkIGFzIGBhdGFuaCh4KSA9IGxuKCgxICsgeCkvKDEgLSB4KSkgLyAyYC5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmF0YW5oKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmF0YW5oKDAuNSkgICAgICAgLy8gcmV0dXJucyAwLjU0OTMwNjE0NDMzNDA1NDlcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGFjb3NoLCBhc2luaFxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geCAgRnVuY3Rpb24gaW5wdXRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBIeXBlcmJvbGljIGFyY3RhbmdlbnQgb2YgeFxuICAgKi9cbiAgdmFyIGF0YW5oID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgICAgIGlmICh4IDw9IDEgJiYgeCA+PSAtMSB8fCBjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfbnVtYmVyLmF0YW5oTnVtYmVyKSh4KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgsIDApLmF0YW5oKCk7XG4gICAgfSxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmF0YW5oKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4geC5hdGFuaCgpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSBhdGFuaCgwKSA9IDBcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgYXRhbmgsIHRydWUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBhdGFuaDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVBdGFuaCA9IGNyZWF0ZUF0YW5oOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb3MgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIG5hbWUgPSAnY29zJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlQ29zID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBjb3NpbmUgb2YgYSB2YWx1ZS5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmNvcyh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5jb3MoMikgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgLTAuNDE2MTQ2ODM2NTQ3MTQyMlxuICAgKiAgICBtYXRoLmNvcyhtYXRoLnBpIC8gNCkgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAgMC43MDcxMDY3ODExODY1NDc1XG4gICAqICAgIG1hdGguY29zKG1hdGgudW5pdCgxODAsICdkZWcnKSkgIC8vIHJldHVybnMgbnVtYmVyIC0xXG4gICAqICAgIG1hdGguY29zKG1hdGgudW5pdCg2MCwgJ2RlZycpKSAgIC8vIHJldHVybnMgbnVtYmVyICAwLjVcbiAgICpcbiAgICogICAgY29uc3QgYW5nbGUgPSAwLjJcbiAgICogICAgbWF0aC5wb3cobWF0aC5zaW4oYW5nbGUpLCAyKSArIG1hdGgucG93KG1hdGguY29zKGFuZ2xlKSwgMikgLy8gcmV0dXJucyBudW1iZXIgfjFcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGNvcywgdGFuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCAgRnVuY3Rpb24gaW5wdXRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBDb3NpbmUgb2YgeFxuICAgKi9cbiAgdmFyIGNvcyA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IE1hdGguY29zLFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHguY29zKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4geC5jb3MoKTtcbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgaWYgKCF4Lmhhc0Jhc2UoeC5jb25zdHJ1Y3Rvci5CQVNFX1VOSVRTLkFOR0xFKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbml0IGluIGZ1bmN0aW9uIGNvcyBpcyBubyBhbmdsZScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29zKHgudmFsdWUpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBjb3MpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjb3M7XG59KTtcbmV4cG9ydHMuY3JlYXRlQ29zID0gY3JlYXRlQ29zOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb3NoID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnY29zaCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUNvc2ggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgY29zaW5lIG9mIGEgdmFsdWUsXG4gICAqIGRlZmluZWQgYXMgYGNvc2goeCkgPSAxLzIgKiAoZXhwKHgpICsgZXhwKC14KSlgLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguY29zaCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5jb3NoKDAuNSkgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMS4xMjc2MjU5NjUyMDYzODA3XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBzaW5oLCB0YW5oXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCAgRnVuY3Rpb24gaW5wdXRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBIeXBlcmJvbGljIGNvc2luZSBvZiB4XG4gICAqL1xuICB2YXIgY29zaCA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IF9udW1iZXIuY29zaCxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmNvc2goKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LmNvc2goKTtcbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgaWYgKCF4Lmhhc0Jhc2UoeC5jb25zdHJ1Y3Rvci5CQVNFX1VOSVRTLkFOR0xFKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbml0IGluIGZ1bmN0aW9uIGNvc2ggaXMgbm8gYW5nbGUnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvc2goeC52YWx1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGNvc2gpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjb3NoO1xufSk7XG5leHBvcnRzLmNyZWF0ZUNvc2ggPSBjcmVhdGVDb3NoOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb3QgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdjb3QnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnQmlnTnVtYmVyJ107XG52YXIgY3JlYXRlQ290ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIF9CaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcjtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBjb3RhbmdlbnQgb2YgYSB2YWx1ZS4gRGVmaW5lZCBhcyBgY290KHgpID0gMSAvIHRhbih4KWAuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5jb3QoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguY290KDIpICAgICAgLy8gcmV0dXJucyBudW1iZXIgLTAuNDU3NjU3NTU0MzYwMjg1NzdcbiAgICogICAgMSAvIG1hdGgudGFuKDIpICAvLyByZXR1cm5zIG51bWJlciAtMC40NTc2NTc1NTQzNjAyODU3N1xuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgdGFuLCBzZWMsIGNzY1xuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggIEZ1bmN0aW9uIGlucHV0XG4gICAqIEByZXR1cm4ge251bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gQ290YW5nZW50IG9mIHhcbiAgICovXG4gIHZhciBjb3QgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmNvdE51bWJlcixcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmNvdCgpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIG5ldyBfQmlnTnVtYmVyKDEpLmRpdih4LnRhbigpKTtcbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgaWYgKCF4Lmhhc0Jhc2UoeC5jb25zdHJ1Y3Rvci5CQVNFX1VOSVRTLkFOR0xFKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbml0IGluIGZ1bmN0aW9uIGNvdCBpcyBubyBhbmdsZScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY290KHgudmFsdWUpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBjb3QpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjb3Q7XG59KTtcbmV4cG9ydHMuY3JlYXRlQ290ID0gY3JlYXRlQ290OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb3RoID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnY290aCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdCaWdOdW1iZXInXTtcbnZhciBjcmVhdGVDb3RoID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIF9CaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcjtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBoeXBlcmJvbGljIGNvdGFuZ2VudCBvZiBhIHZhbHVlLFxuICAgKiBkZWZpbmVkIGFzIGBjb3RoKHgpID0gMSAvIHRhbmgoeClgLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguY290aCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgLy8gY290aCh4KSA9IDEgLyB0YW5oKHgpXG4gICAqICAgIG1hdGguY290aCgyKSAgICAgICAgIC8vIHJldHVybnMgMS4wMzczMTQ3MjA3Mjc1NDgyXG4gICAqICAgIDEgLyBtYXRoLnRhbmgoMikgICAgIC8vIHJldHVybnMgMS4wMzczMTQ3MjA3Mjc1NDgyXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBzaW5oLCB0YW5oLCBjb3NoXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCAgRnVuY3Rpb24gaW5wdXRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBIeXBlcmJvbGljIGNvdGFuZ2VudCBvZiB4XG4gICAqL1xuICB2YXIgY290aCA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IF9udW1iZXIuY290aE51bWJlcixcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmNvdGgoKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiBuZXcgX0JpZ051bWJlcigxKS5kaXYoeC50YW5oKCkpO1xuICAgIH0sXG4gICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7XG4gICAgICBpZiAoIXguaGFzQmFzZSh4LmNvbnN0cnVjdG9yLkJBU0VfVU5JVFMuQU5HTEUpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuaXQgaW4gZnVuY3Rpb24gY290aCBpcyBubyBhbmdsZScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY290aCh4LnZhbHVlKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgY290aCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGNvdGg7XG59KTtcbmV4cG9ydHMuY3JlYXRlQ290aCA9IGNyZWF0ZUNvdGg7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNzYyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2NzYyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdCaWdOdW1iZXInXTtcbnZhciBjcmVhdGVDc2MgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgX0JpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGNvc2VjYW50IG9mIGEgdmFsdWUsIGRlZmluZWQgYXMgYGNzYyh4KSA9IDEvc2luKHgpYC5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmNzYyh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5jc2MoMikgICAgICAvLyByZXR1cm5zIG51bWJlciAxLjA5OTc1MDE3MDI5NDYxN1xuICAgKiAgICAxIC8gbWF0aC5zaW4oMikgIC8vIHJldHVybnMgbnVtYmVyIDEuMDk5NzUwMTcwMjk0NjE3XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBzaW4sIHNlYywgY290XG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCAgRnVuY3Rpb24gaW5wdXRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBDb3NlY2FudCBvZiB4XG4gICAqL1xuICB2YXIgY3NjID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogX251bWJlci5jc2NOdW1iZXIsXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5jc2MoKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiBuZXcgX0JpZ051bWJlcigxKS5kaXYoeC5zaW4oKSk7XG4gICAgfSxcbiAgICBVbml0OiBmdW5jdGlvbiBVbml0KHgpIHtcbiAgICAgIGlmICgheC5oYXNCYXNlKHguY29uc3RydWN0b3IuQkFTRV9VTklUUy5BTkdMRSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5pdCBpbiBmdW5jdGlvbiBjc2MgaXMgbm8gYW5nbGUnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNzYyh4LnZhbHVlKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgY3NjKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY3NjO1xufSk7XG5leHBvcnRzLmNyZWF0ZUNzYyA9IGNyZWF0ZUNzYzsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ3NjaCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2NzY2gnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnQmlnTnVtYmVyJ107XG52YXIgY3JlYXRlQ3NjaCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBfQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXI7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgaHlwZXJib2xpYyBjb3NlY2FudCBvZiBhIHZhbHVlLFxuICAgKiBkZWZpbmVkIGFzIGBjc2NoKHgpID0gMSAvIHNpbmgoeClgLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguY3NjaCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgLy8gY3NjaCh4KSA9IDEvIHNpbmgoeClcbiAgICogICAgbWF0aC5jc2NoKDAuNSkgICAgICAgLy8gcmV0dXJucyAxLjkxOTAzNDc1MTMzNDk0MzdcbiAgICogICAgMSAvIG1hdGguc2luaCgwLjUpICAgLy8gcmV0dXJucyAxLjkxOTAzNDc1MTMzNDk0MzdcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIHNpbmgsIHNlY2gsIGNvdGhcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4ICBGdW5jdGlvbiBpbnB1dFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IEh5cGVyYm9saWMgY29zZWNhbnQgb2YgeFxuICAgKi9cbiAgdmFyIGNzY2ggPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmNzY2hOdW1iZXIsXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5jc2NoKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4gbmV3IF9CaWdOdW1iZXIoMSkuZGl2KHguc2luaCgpKTtcbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgaWYgKCF4Lmhhc0Jhc2UoeC5jb25zdHJ1Y3Rvci5CQVNFX1VOSVRTLkFOR0xFKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbml0IGluIGZ1bmN0aW9uIGNzY2ggaXMgbm8gYW5nbGUnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNzY2goeC52YWx1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGNzY2gpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjc2NoO1xufSk7XG5leHBvcnRzLmNyZWF0ZUNzY2ggPSBjcmVhdGVDc2NoOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTZWMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdzZWMnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnQmlnTnVtYmVyJ107XG52YXIgY3JlYXRlU2VjID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIF9CaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcjtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBzZWNhbnQgb2YgYSB2YWx1ZSwgZGVmaW5lZCBhcyBgc2VjKHgpID0gMS9jb3MoeClgLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguc2VjKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnNlYygyKSAgICAgIC8vIHJldHVybnMgbnVtYmVyIC0yLjQwMjk5Nzk2MTcyMjM4MjJcbiAgICogICAgMSAvIG1hdGguY29zKDIpICAvLyByZXR1cm5zIG51bWJlciAtMi40MDI5OTc5NjE3MjIzODIyXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjb3MsIGNzYywgY290XG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCAgRnVuY3Rpb24gaW5wdXRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBTZWNhbnQgb2YgeFxuICAgKi9cbiAgdmFyIHNlYyA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IF9udW1iZXIuc2VjTnVtYmVyLFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHguc2VjKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4gbmV3IF9CaWdOdW1iZXIoMSkuZGl2KHguY29zKCkpO1xuICAgIH0sXG4gICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7XG4gICAgICBpZiAoIXguaGFzQmFzZSh4LmNvbnN0cnVjdG9yLkJBU0VfVU5JVFMuQU5HTEUpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuaXQgaW4gZnVuY3Rpb24gc2VjIGlzIG5vIGFuZ2xlJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZWMoeC52YWx1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIHNlYyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHNlYztcbn0pO1xuZXhwb3J0cy5jcmVhdGVTZWMgPSBjcmVhdGVTZWM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNlY2ggPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdzZWNoJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ0JpZ051bWJlciddO1xudmFyIGNyZWF0ZVNlY2ggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgX0JpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgc2VjYW50IG9mIGEgdmFsdWUsXG4gICAqIGRlZmluZWQgYXMgYHNlY2goeCkgPSAxIC8gY29zaCh4KWAuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5zZWNoKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAvLyBzZWNoKHgpID0gMS8gY29zaCh4KVxuICAgKiAgICBtYXRoLnNlY2goMC41KSAgICAgICAvLyByZXR1cm5zIDAuODg2ODE4ODgzOTcwMDc0XG4gICAqICAgIDEgLyBtYXRoLmNvc2goMC41KSAgIC8vIHJldHVybnMgMC44ODY4MTg4ODM5NzAwNzRcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGNvc2gsIGNzY2gsIGNvdGhcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4ICBGdW5jdGlvbiBpbnB1dFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IEh5cGVyYm9saWMgc2VjYW50IG9mIHhcbiAgICovXG4gIHZhciBzZWNoID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogX251bWJlci5zZWNoTnVtYmVyLFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHguc2VjaCgpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIG5ldyBfQmlnTnVtYmVyKDEpLmRpdih4LmNvc2goKSk7XG4gICAgfSxcbiAgICBVbml0OiBmdW5jdGlvbiBVbml0KHgpIHtcbiAgICAgIGlmICgheC5oYXNCYXNlKHguY29uc3RydWN0b3IuQkFTRV9VTklUUy5BTkdMRSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5pdCBpbiBmdW5jdGlvbiBzZWNoIGlzIG5vIGFuZ2xlJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZWNoKHgudmFsdWUpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBzZWNoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gc2VjaDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTZWNoID0gY3JlYXRlU2VjaDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU2luID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBuYW1lID0gJ3Npbic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZVNpbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgc2luZSBvZiBhIHZhbHVlLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguc2luKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnNpbigyKSAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAwLjkwOTI5NzQyNjgyNTY4MTNcbiAgICogICAgbWF0aC5zaW4obWF0aC5waSAvIDQpICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMC43MDcxMDY3ODExODY1NDc1XG4gICAqICAgIG1hdGguc2luKG1hdGgudW5pdCg5MCwgJ2RlZycpKSAgIC8vIHJldHVybnMgbnVtYmVyIDFcbiAgICogICAgbWF0aC5zaW4obWF0aC51bml0KDMwLCAnZGVnJykpICAgLy8gcmV0dXJucyBudW1iZXIgMC41XG4gICAqXG4gICAqICAgIGNvbnN0IGFuZ2xlID0gMC4yXG4gICAqICAgIG1hdGgucG93KG1hdGguc2luKGFuZ2xlKSwgMikgKyBtYXRoLnBvdyhtYXRoLmNvcyhhbmdsZSksIDIpIC8vIHJldHVybnMgbnVtYmVyIH4xXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjb3MsIHRhblxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggIEZ1bmN0aW9uIGlucHV0XG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gU2luZSBvZiB4XG4gICAqL1xuICB2YXIgc2luID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogTWF0aC5zaW4sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5zaW4oKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LnNpbigpO1xuICAgIH0sXG4gICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7XG4gICAgICBpZiAoIXguaGFzQmFzZSh4LmNvbnN0cnVjdG9yLkJBU0VfVU5JVFMuQU5HTEUpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuaXQgaW4gZnVuY3Rpb24gc2luIGlzIG5vIGFuZ2xlJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzaW4oeC52YWx1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICAvLyBkZWVwIG1hcCBjb2xsZWN0aW9uLCBza2lwIHplcm9zIHNpbmNlIHNpbigwKSA9IDBcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgc2luLCB0cnVlKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gc2luO1xufSk7XG5leHBvcnRzLmNyZWF0ZVNpbiA9IGNyZWF0ZVNpbjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU2luaCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ3NpbmgnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVTaW5oID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBoeXBlcmJvbGljIHNpbmUgb2YgYSB2YWx1ZSxcbiAgICogZGVmaW5lZCBhcyBgc2luaCh4KSA9IDEvMiAqIChleHAoeCkgLSBleHAoLXgpKWAuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5zaW5oKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnNpbmgoMC41KSAgICAgICAvLyByZXR1cm5zIG51bWJlciAwLjUyMTA5NTMwNTQ5Mzc0NzRcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGNvc2gsIHRhbmhcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4ICBGdW5jdGlvbiBpbnB1dFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IEh5cGVyYm9saWMgc2luZSBvZiB4XG4gICAqL1xuICB2YXIgc2luaCA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IF9udW1iZXIuc2luaE51bWJlcixcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LnNpbmgoKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LnNpbmgoKTtcbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgaWYgKCF4Lmhhc0Jhc2UoeC5jb25zdHJ1Y3Rvci5CQVNFX1VOSVRTLkFOR0xFKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbml0IGluIGZ1bmN0aW9uIHNpbmggaXMgbm8gYW5nbGUnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNpbmgoeC52YWx1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICAvLyBkZWVwIG1hcCBjb2xsZWN0aW9uLCBza2lwIHplcm9zIHNpbmNlIHNpbmgoMCkgPSAwXG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIHNpbmgsIHRydWUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBzaW5oO1xufSk7XG5leHBvcnRzLmNyZWF0ZVNpbmggPSBjcmVhdGVTaW5oOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVUYW4gPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIG5hbWUgPSAndGFuJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlVGFuID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSB0YW5nZW50IG9mIGEgdmFsdWUuIGB0YW4oeClgIGlzIGVxdWFsIHRvIGBzaW4oeCkgLyBjb3MoeClgLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgudGFuKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnRhbigwLjUpICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAwLjU0NjMwMjQ4OTg0Mzc5MDVcbiAgICogICAgbWF0aC5zaW4oMC41KSAvIG1hdGguY29zKDAuNSkgICAgLy8gcmV0dXJucyBudW1iZXIgMC41NDYzMDI0ODk4NDM3OTA1XG4gICAqICAgIG1hdGgudGFuKG1hdGgucGkgLyA0KSAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDFcbiAgICogICAgbWF0aC50YW4obWF0aC51bml0KDQ1LCAnZGVnJykpICAgLy8gcmV0dXJucyBudW1iZXIgMVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYXRhbiwgc2luLCBjb3NcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4ICBGdW5jdGlvbiBpbnB1dFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IFRhbmdlbnQgb2YgeFxuICAgKi9cbiAgdmFyIHRhbiA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IE1hdGgudGFuLFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHgudGFuKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4geC50YW4oKTtcbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgaWYgKCF4Lmhhc0Jhc2UoeC5jb25zdHJ1Y3Rvci5CQVNFX1VOSVRTLkFOR0xFKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbml0IGluIGZ1bmN0aW9uIHRhbiBpcyBubyBhbmdsZScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGFuKHgudmFsdWUpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSB0YW4oMCkgPSAwXG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIHRhbiwgdHJ1ZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHRhbjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVUYW4gPSBjcmVhdGVUYW47IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVRhbmggPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICd0YW5oJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlVGFuaCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgaHlwZXJib2xpYyB0YW5nZW50IG9mIGEgdmFsdWUsXG4gICAqIGRlZmluZWQgYXMgYHRhbmgoeCkgPSAoZXhwKDIgKiB4KSAtIDEpIC8gKGV4cCgyICogeCkgKyAxKWAuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC50YW5oKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAvLyB0YW5oKHgpID0gc2luaCh4KSAvIGNvc2goeCkgPSAxIC8gY290aCh4KVxuICAgKiAgICBtYXRoLnRhbmgoMC41KSAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDAuNDYyMTE3MTU3MjYwMDA5NzRcbiAgICogICAgbWF0aC5zaW5oKDAuNSkgLyBtYXRoLmNvc2goMC41KSAgLy8gcmV0dXJucyAwLjQ2MjExNzE1NzI2MDAwOTc0XG4gICAqICAgIDEgLyBtYXRoLmNvdGgoMC41KSAgICAgICAgICAgICAgIC8vIHJldHVybnMgMC40NjIxMTcxNTcyNjAwMDk3NFxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgc2luaCwgY29zaCwgY290aFxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggIEZ1bmN0aW9uIGlucHV0XG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gSHlwZXJib2xpYyB0YW5nZW50IG9mIHhcbiAgICovXG4gIHZhciB0YW5oID0gdHlwZWQoJ3RhbmgnLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLnRhbmgsXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC50YW5oKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4geC50YW5oKCk7XG4gICAgfSxcbiAgICBVbml0OiBmdW5jdGlvbiBVbml0KHgpIHtcbiAgICAgIGlmICgheC5oYXNCYXNlKHguY29uc3RydWN0b3IuQkFTRV9VTklUUy5BTkdMRSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5pdCBpbiBmdW5jdGlvbiB0YW5oIGlzIG5vIGFuZ2xlJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0YW5oKHgudmFsdWUpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSB0YW5oKDApID0gMFxuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCB0YW5oLCB0cnVlKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gdGFuaDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVUYW5oID0gY3JlYXRlVGFuaDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlVG8gPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xM1wiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgbmFtZSA9ICd0byc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnXTtcbnZhciBjcmVhdGVUbyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTEzID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMTMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0xNCkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgLyoqXG4gICAqIENoYW5nZSB0aGUgdW5pdCBvZiBhIHZhbHVlLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgudG8oeCwgdW5pdClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgudG8obWF0aC51bml0KCcyIGluY2gnKSwgJ2NtJykgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBVbml0IDUuMDggY21cbiAgICogICAgbWF0aC50byhtYXRoLnVuaXQoJzIgaW5jaCcpLCBtYXRoLnVuaXQobnVsbCwgJ2NtJykpICAvLyByZXR1cm5zIFVuaXQgNS4wOCBjbVxuICAgKiAgICBtYXRoLnRvKG1hdGgudW5pdCgxNiwgJ2J5dGVzJyksICdiaXRzJykgICAgICAgICAgICAgIC8vIHJldHVybnMgVW5pdCAxMjggYml0c1xuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgdW5pdFxuICAgKlxuICAgKiBAcGFyYW0ge1VuaXQgfCBBcnJheSB8IE1hdHJpeH0geCAgICAgVGhlIHVuaXQgdG8gYmUgY29udmVydGVkLlxuICAgKiBAcGFyYW0ge1VuaXQgfCBBcnJheSB8IE1hdHJpeH0gdW5pdCAgTmV3IHVuaXQuIENhbiBiZSBhIHN0cmluZyBsaWtlIFwiY21cIlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYSB1bml0IHdpdGhvdXQgdmFsdWUuXG4gICAqIEByZXR1cm4ge1VuaXQgfCBBcnJheSB8IE1hdHJpeH0gdmFsdWUgd2l0aCBjaGFuZ2VkLCBmaXhlZCB1bml0LlxuICAgKi9cblxuICB2YXIgdG8gPSB0eXBlZChuYW1lLCB7XG4gICAgJ1VuaXQsIFVuaXQgfCBzdHJpbmcnOiBmdW5jdGlvbiBVbml0VW5pdFN0cmluZyh4LCB1bml0KSB7XG4gICAgICByZXR1cm4geC50byh1bml0KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIE1hdHJpeCc6IGZ1bmN0aW9uIE1hdHJpeE1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyBTcGFyc2VNYXRyaXggZG9lcyBub3Qgc3VwcG9ydCBVbml0c1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIHRvKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiB0byhtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gdG8obWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHRvKHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBhbnknOiBmdW5jdGlvbiBNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgLy8gU3BhcnNlTWF0cml4IGRvZXMgbm90IHN1cHBvcnQgVW5pdHNcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCB0bywgZmFsc2UpO1xuICAgIH0sXG4gICAgJ2FueSwgTWF0cml4JzogZnVuY3Rpb24gYW55TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIFNwYXJzZU1hdHJpeCBkb2VzIG5vdCBzdXBwb3J0IFVuaXRzXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgdG8sIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBhbnknOiBmdW5jdGlvbiBBcnJheUFueSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCB0bywgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgdG8sIHRydWUpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gdG87XG59KTtcbmV4cG9ydHMuY3JlYXRlVG8gPSBjcmVhdGVUbzsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ2xvbmUgPSB2b2lkIDA7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2Nsb25lJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlQ2xvbmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBDbG9uZSBhbiBvYmplY3QuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguY2xvbmUoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguY2xvbmUoMy41KSAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAzLjVcbiAgICogICAgbWF0aC5jbG9uZShtYXRoLmNvbXBsZXgoJzItNGknKSAvLyByZXR1cm5zIENvbXBsZXggMiAtIDRpXG4gICAqICAgIG1hdGguY2xvbmUobWF0aC51bml0KDQ1LCAnZGVnJykpICAvLyByZXR1cm5zIFVuaXQgNDUgZGVnXG4gICAqICAgIG1hdGguY2xvbmUoW1sxLCAyXSwgWzMsIDRdXSkgICAgICAvLyByZXR1cm5zIEFycmF5IFtbMSwgMl0sIFszLCA0XV1cbiAgICogICAgbWF0aC5jbG9uZShcImhlbGxvIHdvcmxkXCIpICAgICAgICAgLy8gcmV0dXJucyBzdHJpbmcgXCJoZWxsbyB3b3JsZFwiXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0geCAgIE9iamVjdCB0byBiZSBjbG9uZWRcbiAgICogQHJldHVybiB7Kn0gQSBjbG9uZSBvZiBvYmplY3QgeFxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICBhbnk6IF9vYmplY3QuY2xvbmVcbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlQ2xvbmUgPSBjcmVhdGVDbG9uZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlSGFzTnVtZXJpY1ZhbHVlID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnaGFzTnVtZXJpY1ZhbHVlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2lzTnVtZXJpYyddO1xudmFyIGNyZWF0ZUhhc051bWVyaWNWYWx1ZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBpc051bWVyaWMgPSBfcmVmLmlzTnVtZXJpYztcblxuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIGEgdmFsdWUgaXMgYW4gbnVtZXJpYyB2YWx1ZS5cbiAgICpcbiAgICogSW4gY2FzZSBvZiBhIHN0cmluZywgdHJ1ZSBpcyByZXR1cm5lZCBpZiB0aGUgc3RyaW5nIGNvbnRhaW5zIGEgbnVtZXJpYyB2YWx1ZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5oYXNOdW1lcmljVmFsdWUoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguaGFzTnVtZXJpY1ZhbHVlKDIpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaGFzTnVtZXJpY1ZhbHVlKCcyJykgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNOdW1lcmljKCcyJykgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmhhc051bWVyaWNWYWx1ZSgwKSAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmhhc051bWVyaWNWYWx1ZShtYXRoLmJpZ251bWJlcig1MDApKSAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmhhc051bWVyaWNWYWx1ZShtYXRoLmZyYWN0aW9uKDQpKSAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmhhc051bWVyaWNWYWx1ZShtYXRoLmNvbXBsZXgoJzItNGknKSAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5oYXNOdW1lcmljVmFsdWUoWzIuMywgJ2ZvbycsIGZhbHNlXSkgICAvLyByZXR1cm5zIFt0cnVlLCBmYWxzZSwgdHJ1ZV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGlzWmVybywgaXNQb3NpdGl2ZSwgaXNOZWdhdGl2ZSwgaXNJbnRlZ2VyLCBpc051bWVyaWNcbiAgICpcbiAgICogQHBhcmFtIHsqfSB4ICAgICAgIFZhbHVlIHRvIGJlIHRlc3RlZFxuICAgKiBAcmV0dXJuIHtib29sZWFufSAgUmV0dXJucyB0cnVlIHdoZW4gYHhgIGlzIGEgYG51bWJlcmAsIGBCaWdOdW1iZXJgLFxuICAgKiAgICAgICAgICAgICAgICAgICAgYEZyYWN0aW9uYCwgYEJvb2xlYW5gLCBvciBhIGBTdHJpbmdgIGNvbnRhaW5pbmcgbnVtYmVyLiBSZXR1cm5zIGZhbHNlIGZvciBvdGhlciB0eXBlcy5cbiAgICogICAgICAgICAgICAgICAgICAgIFRocm93cyBhbiBlcnJvciBpbiBjYXNlIG9mIHVua25vd24gdHlwZXMuXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIHN0cmluZzogZnVuY3Rpb24gc3RyaW5nKHgpIHtcbiAgICAgIHJldHVybiB4LnRyaW0oKS5sZW5ndGggPiAwICYmICFpc05hTihOdW1iZXIoeCkpO1xuICAgIH0sXG4gICAgYW55OiBmdW5jdGlvbiBhbnkoeCkge1xuICAgICAgcmV0dXJuIGlzTnVtZXJpYyh4KTtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZUhhc051bWVyaWNWYWx1ZSA9IGNyZWF0ZUhhc051bWVyaWNWYWx1ZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlSXNJbnRlZ2VyID0gdm9pZCAwO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnaXNJbnRlZ2VyJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlSXNJbnRlZ2VyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIGEgdmFsdWUgaXMgYW4gaW50ZWdlciBudW1iZXIuXG4gICAqIFRoZSBmdW5jdGlvbiBzdXBwb3J0cyBgbnVtYmVyYCwgYEJpZ051bWJlcmAsIGFuZCBgRnJhY3Rpb25gLlxuICAgKlxuICAgKiBUaGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQtd2lzZSBpbiBjYXNlIG9mIEFycmF5IG9yIE1hdHJpeCBpbnB1dC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5pc0ludGVnZXIoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguaXNJbnRlZ2VyKDIpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNJbnRlZ2VyKDApICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNJbnRlZ2VyKDAuNSkgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmlzSW50ZWdlcihtYXRoLmJpZ251bWJlcig1MDApKSAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmlzSW50ZWdlcihtYXRoLmZyYWN0aW9uKDQpKSAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmlzSW50ZWdlcignMycpICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmlzSW50ZWdlcihbMywgMC41LCAtMl0pICAgICAgICAgIC8vIHJldHVybnMgW3RydWUsIGZhbHNlLCB0cnVlXVxuICAgKiAgICBtYXRoLmlzSW50ZWdlcihtYXRoLmNvbXBsZXgoJzItNGknKSAgIC8vIHRocm93cyBhbiBlcnJvclxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgaXNOdW1lcmljLCBpc1Bvc2l0aXZlLCBpc05lZ2F0aXZlLCBpc1plcm9cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IEFycmF5IHwgTWF0cml4fSB4ICAgVmFsdWUgdG8gYmUgdGVzdGVkXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59ICBSZXR1cm5zIHRydWUgd2hlbiBgeGAgY29udGFpbnMgYSBudW1lcmljLCBpbnRlZ2VyIHZhbHVlLlxuICAgKiAgICAgICAgICAgICAgICAgICAgVGhyb3dzIGFuIGVycm9yIGluIGNhc2Ugb2YgYW4gdW5rbm93biBkYXRhIHR5cGUuXG4gICAqL1xuICB2YXIgaXNJbnRlZ2VyID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogX251bWJlci5pc0ludGVnZXIsXG4gICAgLy8gVE9ETzogd2hhdCB0byBkbyB3aXRoIGlzSW50ZWdlcihhZGQoMC4xLCAwLjIpKSAgP1xuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LmlzSW50KCk7XG4gICAgfSxcbiAgICBGcmFjdGlvbjogZnVuY3Rpb24gRnJhY3Rpb24oeCkge1xuICAgICAgcmV0dXJuIHguZCA9PT0gMSAmJiBpc0Zpbml0ZSh4Lm4pO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBpc0ludGVnZXIpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBpc0ludGVnZXI7XG59KTtcbmV4cG9ydHMuY3JlYXRlSXNJbnRlZ2VyID0gY3JlYXRlSXNJbnRlZ2VyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVJc05hTiA9IHZvaWQgMDtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2lzTmFOJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlSXNOYU4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBUZXN0IHdoZXRoZXIgYSB2YWx1ZSBpcyBOYU4gKG5vdCBhIG51bWJlcikuXG4gICAqIFRoZSBmdW5jdGlvbiBzdXBwb3J0cyB0eXBlcyBgbnVtYmVyYCwgYEJpZ051bWJlcmAsIGBGcmFjdGlvbmAsIGBVbml0YCBhbmQgYENvbXBsZXhgLlxuICAgKlxuICAgKiBUaGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQtd2lzZSBpbiBjYXNlIG9mIEFycmF5IG9yIE1hdHJpeCBpbnB1dC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5pc05hTih4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5pc05hTigzKSAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5pc05hTihOYU4pICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmlzTmFOKDApICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmlzTmFOKG1hdGguYmlnbnVtYmVyKE5hTikpICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNOYU4obWF0aC5iaWdudW1iZXIoMCkpICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNOYU4obWF0aC5mcmFjdGlvbigtMiwgNSkpICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNOYU4oJy0yJykgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNOYU4oWzIsIDAsIC0zLCBOYU5dJykgICAgICAvLyByZXR1cm5zIFtmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgaXNOdW1lcmljLCBpc05lZ2F0aXZlLCBpc1Bvc2l0aXZlLCBpc1plcm8sIGlzSW50ZWdlclxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4ICBWYWx1ZSB0byBiZSB0ZXN0ZWRcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gIFJldHVybnMgdHJ1ZSB3aGVuIGB4YCBpcyBOYU4uXG4gICAqICAgICAgICAgICAgICAgICAgICBUaHJvd3MgYW4gZXJyb3IgaW4gY2FzZSBvZiBhbiB1bmtub3duIGRhdGEgdHlwZS5cbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmlzTmFOTnVtYmVyLFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LmlzTmFOKCk7XG4gICAgfSxcbiAgICBGcmFjdGlvbjogZnVuY3Rpb24gRnJhY3Rpb24oeCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5pc05hTigpO1xuICAgIH0sXG4gICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7XG4gICAgICByZXR1cm4gTnVtYmVyLmlzTmFOKHgudmFsdWUpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBOdW1iZXIuaXNOYU4pO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlSXNOYU4gPSBjcmVhdGVJc05hTjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlSXNOZWdhdGl2ZSA9IHZvaWQgMDtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2lzTmVnYXRpdmUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVJc05lZ2F0aXZlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIGEgdmFsdWUgaXMgbmVnYXRpdmU6IHNtYWxsZXIgdGhhbiB6ZXJvLlxuICAgKiBUaGUgZnVuY3Rpb24gc3VwcG9ydHMgdHlwZXMgYG51bWJlcmAsIGBCaWdOdW1iZXJgLCBgRnJhY3Rpb25gLCBhbmQgYFVuaXRgLlxuICAgKlxuICAgKiBUaGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQtd2lzZSBpbiBjYXNlIG9mIEFycmF5IG9yIE1hdHJpeCBpbnB1dC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5pc05lZ2F0aXZlKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmlzTmVnYXRpdmUoMykgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNOZWdhdGl2ZSgtMikgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmlzTmVnYXRpdmUoMCkgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNOZWdhdGl2ZSgtMCkgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5pc05lZ2F0aXZlKG1hdGguYmlnbnVtYmVyKDIpKSAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmlzTmVnYXRpdmUobWF0aC5mcmFjdGlvbigtMiwgNSkpICAvLyByZXR1cm5zIHRydWVcbiAgICogICAgbWF0aC5pc05lZ2F0aXZlKCctMicpICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNOZWdhdGl2ZShbMiwgMCwgLTNdJykgICAgICAgICAgIC8vIHJldHVybnMgW2ZhbHNlLCBmYWxzZSwgdHJ1ZV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGlzTnVtZXJpYywgaXNQb3NpdGl2ZSwgaXNaZXJvLCBpc0ludGVnZXJcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCAgVmFsdWUgdG8gYmUgdGVzdGVkXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59ICBSZXR1cm5zIHRydWUgd2hlbiBgeGAgaXMgbGFyZ2VyIHRoYW4gemVyby5cbiAgICogICAgICAgICAgICAgICAgICAgIFRocm93cyBhbiBlcnJvciBpbiBjYXNlIG9mIGFuIHVua25vd24gZGF0YSB0eXBlLlxuICAgKi9cbiAgdmFyIGlzTmVnYXRpdmUgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmlzTmVnYXRpdmVOdW1iZXIsXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHguaXNOZWcoKSAmJiAheC5pc1plcm8oKSAmJiAheC5pc05hTigpO1xuICAgIH0sXG4gICAgRnJhY3Rpb246IGZ1bmN0aW9uIEZyYWN0aW9uKHgpIHtcbiAgICAgIHJldHVybiB4LnMgPCAwOyAvLyBJdCdzIGVub3VnaCB0byBkZWNpZGUgb24gdGhlIHNpZ25cbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgcmV0dXJuIGlzTmVnYXRpdmUoeC52YWx1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGlzTmVnYXRpdmUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBpc05lZ2F0aXZlO1xufSk7XG5leHBvcnRzLmNyZWF0ZUlzTmVnYXRpdmUgPSBjcmVhdGVJc05lZ2F0aXZlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVJc051bWVyaWMgPSB2b2lkIDA7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnaXNOdW1lcmljJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlSXNOdW1lcmljID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIGEgdmFsdWUgaXMgYW4gbnVtZXJpYyB2YWx1ZS5cbiAgICpcbiAgICogVGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50LXdpc2UgaW4gY2FzZSBvZiBBcnJheSBvciBNYXRyaXggaW5wdXQuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguaXNOdW1lcmljKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmlzTnVtZXJpYygyKSAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmlzTnVtZXJpYygnMicpICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5oYXNOdW1lcmljVmFsdWUoJzInKSAgICAgICAgICAgICAvLyByZXR1cm5zIHRydWVcbiAgICogICAgbWF0aC5pc051bWVyaWMoMCkgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIHRydWVcbiAgICogICAgbWF0aC5pc051bWVyaWMobWF0aC5iaWdudW1iZXIoNTAwKSkgICAvLyByZXR1cm5zIHRydWVcbiAgICogICAgbWF0aC5pc051bWVyaWMobWF0aC5mcmFjdGlvbig0KSkgICAgICAvLyByZXR1cm5zIHRydWVcbiAgICogICAgbWF0aC5pc051bWVyaWMobWF0aC5jb21wbGV4KCcyLTRpJykgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNOdW1lcmljKFsyLjMsICdmb28nLCBmYWxzZV0pICAgLy8gcmV0dXJucyBbdHJ1ZSwgZmFsc2UsIHRydWVdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBpc1plcm8sIGlzUG9zaXRpdmUsIGlzTmVnYXRpdmUsIGlzSW50ZWdlciwgaGFzTnVtZXJpY1ZhbHVlXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0geCAgICAgICBWYWx1ZSB0byBiZSB0ZXN0ZWRcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gIFJldHVybnMgdHJ1ZSB3aGVuIGB4YCBpcyBhIGBudW1iZXJgLCBgQmlnTnVtYmVyYCxcbiAgICogICAgICAgICAgICAgICAgICAgIGBGcmFjdGlvbmAsIG9yIGBib29sZWFuYC4gUmV0dXJucyBmYWxzZSBmb3Igb3RoZXIgdHlwZXMuXG4gICAqICAgICAgICAgICAgICAgICAgICBUaHJvd3MgYW4gZXJyb3IgaW4gY2FzZSBvZiB1bmtub3duIHR5cGVzLlxuICAgKi9cbiAgdmFyIGlzTnVtZXJpYyA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBib29sZWFuJzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyRnJhY3Rpb25Cb29sZWFuKCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICAnQ29tcGxleCB8IFVuaXQgfCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkIHwgTm9kZSc6IGZ1bmN0aW9uIENvbXBsZXhVbml0U3RyaW5nTnVsbFVuZGVmaW5lZE5vZGUoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGlzTnVtZXJpYyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGlzTnVtZXJpYztcbn0pO1xuZXhwb3J0cy5jcmVhdGVJc051bWVyaWMgPSBjcmVhdGVJc051bWVyaWM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUlzUG9zaXRpdmUgPSB2b2lkIDA7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdpc1Bvc2l0aXZlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlSXNQb3NpdGl2ZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIFRlc3Qgd2hldGhlciBhIHZhbHVlIGlzIHBvc2l0aXZlOiBsYXJnZXIgdGhhbiB6ZXJvLlxuICAgKiBUaGUgZnVuY3Rpb24gc3VwcG9ydHMgdHlwZXMgYG51bWJlcmAsIGBCaWdOdW1iZXJgLCBgRnJhY3Rpb25gLCBhbmQgYFVuaXRgLlxuICAgKlxuICAgKiBUaGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQtd2lzZSBpbiBjYXNlIG9mIEFycmF5IG9yIE1hdHJpeCBpbnB1dC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5pc1Bvc2l0aXZlKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmlzUG9zaXRpdmUoMykgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIHRydWVcbiAgICogICAgbWF0aC5pc1Bvc2l0aXZlKC0yKSAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmlzUG9zaXRpdmUoMCkgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNQb3NpdGl2ZSgtMCkgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5pc1Bvc2l0aXZlKDAuNSkgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNQb3NpdGl2ZShtYXRoLmJpZ251bWJlcigyKSkgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmlzUG9zaXRpdmUobWF0aC5mcmFjdGlvbigtMiwgNSkpICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNQb3NpdGl2ZShtYXRoLmZyYWN0aW9uKDEsMykpICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5pc1Bvc2l0aXZlKCcyJykgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNQb3NpdGl2ZShbMiwgMCwgLTNdKSAgICAgICAgICAgIC8vIHJldHVybnMgW3RydWUsIGZhbHNlLCBmYWxzZV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGlzTnVtZXJpYywgaXNaZXJvLCBpc05lZ2F0aXZlLCBpc0ludGVnZXJcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCAgVmFsdWUgdG8gYmUgdGVzdGVkXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59ICBSZXR1cm5zIHRydWUgd2hlbiBgeGAgaXMgbGFyZ2VyIHRoYW4gemVyby5cbiAgICogICAgICAgICAgICAgICAgICAgIFRocm93cyBhbiBlcnJvciBpbiBjYXNlIG9mIGFuIHVua25vd24gZGF0YSB0eXBlLlxuICAgKi9cbiAgdmFyIGlzUG9zaXRpdmUgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmlzUG9zaXRpdmVOdW1iZXIsXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuICF4LmlzTmVnKCkgJiYgIXguaXNaZXJvKCkgJiYgIXguaXNOYU4oKTtcbiAgICB9LFxuICAgIEZyYWN0aW9uOiBmdW5jdGlvbiBGcmFjdGlvbih4KSB7XG4gICAgICByZXR1cm4geC5zID4gMCAmJiB4Lm4gPiAwO1xuICAgIH0sXG4gICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7XG4gICAgICByZXR1cm4gaXNQb3NpdGl2ZSh4LnZhbHVlKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgaXNQb3NpdGl2ZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGlzUG9zaXRpdmU7XG59KTtcbmV4cG9ydHMuY3JlYXRlSXNQb3NpdGl2ZSA9IGNyZWF0ZUlzUG9zaXRpdmU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUlzUHJpbWUgPSB2b2lkIDA7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnaXNQcmltZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUlzUHJpbWUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBUZXN0IHdoZXRoZXIgYSB2YWx1ZSBpcyBwcmltZTogaGFzIG5vIGRpdmlzb3JzIG90aGVyIHRoYW4gaXRzZWxmIGFuZCBvbmUuXG4gICAqIFRoZSBmdW5jdGlvbiBzdXBwb3J0cyB0eXBlIGBudW1iZXJgLCBgYmlnbnVtYmVyYC5cbiAgICpcbiAgICogVGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50LXdpc2UgaW4gY2FzZSBvZiBBcnJheSBvciBNYXRyaXggaW5wdXQuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguaXNQcmltZSh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5pc1ByaW1lKDMpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNQcmltZSgtMikgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5pc1ByaW1lKDApICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmlzUHJpbWUoLTApICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNQcmltZSgwLjUpICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5pc1ByaW1lKCcyJykgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNQcmltZShbMiwgMTcsIDEwMF0pICAgICAgICAgICAvLyByZXR1cm5zIFt0cnVlLCB0cnVlLCBmYWxzZV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGlzTnVtZXJpYywgaXNaZXJvLCBpc05lZ2F0aXZlLCBpc0ludGVnZXJcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0geCAgVmFsdWUgdG8gYmUgdGVzdGVkXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59ICBSZXR1cm5zIHRydWUgd2hlbiBgeGAgaXMgbGFyZ2VyIHRoYW4gemVyby5cbiAgICogICAgICAgICAgICAgICAgICAgIFRocm93cyBhbiBlcnJvciBpbiBjYXNlIG9mIGFuIHVua25vd24gZGF0YSB0eXBlLlxuICAgKi9cbiAgdmFyIGlzUHJpbWUgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkge1xuICAgICAgaWYgKHggKiAwICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHggPD0gMykge1xuICAgICAgICByZXR1cm4geCA+IDE7XG4gICAgICB9XG5cbiAgICAgIGlmICh4ICUgMiA9PT0gMCB8fCB4ICUgMyA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSA1OyBpICogaSA8PSB4OyBpICs9IDYpIHtcbiAgICAgICAgaWYgKHggJSBpID09PSAwIHx8IHggJSAoaSArIDIpID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIobikge1xuICAgICAgaWYgKG4udG9OdW1iZXIoKSAqIDAgIT09IDApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAobi5sdGUoMykpIHJldHVybiBuLmd0KDEpO1xuICAgICAgaWYgKG4ubW9kKDIpLmVxKDApIHx8IG4ubW9kKDMpLmVxKDApKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIGZvciAodmFyIGkgPSA1OyBuLmd0ZShpICogaSk7IGkgKz0gNikge1xuICAgICAgICBpZiAobi5tb2QoaSkuZXEoMCkgfHwgbi5tb2QoaSArIDIpLmVxKDApKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBpc1ByaW1lKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaXNQcmltZTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVJc1ByaW1lID0gY3JlYXRlSXNQcmltZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlSXNaZXJvID0gdm9pZCAwO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnaXNaZXJvJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlSXNaZXJvID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIGEgdmFsdWUgaXMgemVyby5cbiAgICogVGhlIGZ1bmN0aW9uIGNhbiBjaGVjayBmb3IgemVybyBmb3IgdHlwZXMgYG51bWJlcmAsIGBCaWdOdW1iZXJgLCBgRnJhY3Rpb25gLFxuICAgKiBgQ29tcGxleGAsIGFuZCBgVW5pdGAuXG4gICAqXG4gICAqIFRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudC13aXNlIGluIGNhc2Ugb2YgQXJyYXkgb3IgTWF0cml4IGlucHV0LlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLmlzWmVybyh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5pc1plcm8oMCkgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIHRydWVcbiAgICogICAgbWF0aC5pc1plcm8oMikgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNaZXJvKDAuNSkgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmlzWmVybyhtYXRoLmJpZ251bWJlcigwKSkgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmlzWmVybyhtYXRoLmZyYWN0aW9uKDApKSAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmlzWmVybyhtYXRoLmZyYWN0aW9uKDEsMykpICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5pc1plcm8obWF0aC5jb21wbGV4KCcyIC0gNGknKSAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNaZXJvKG1hdGguY29tcGxleCgnMGknKSAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNaZXJvKCcwJykgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNaZXJvKCcyJykgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmlzWmVybyhbMiwgMCwgLTNdJykgICAgICAgICAgIC8vIHJldHVybnMgW2ZhbHNlLCB0cnVlLCBmYWxzZV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGlzTnVtZXJpYywgaXNQb3NpdGl2ZSwgaXNOZWdhdGl2ZSwgaXNJbnRlZ2VyXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEZyYWN0aW9uIHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4ICAgICAgIFZhbHVlIHRvIGJlIHRlc3RlZFxuICAgKiBAcmV0dXJuIHtib29sZWFufSAgUmV0dXJucyB0cnVlIHdoZW4gYHhgIGlzIHplcm8uXG4gICAqICAgICAgICAgICAgICAgICAgICBUaHJvd3MgYW4gZXJyb3IgaW4gY2FzZSBvZiBhbiB1bmtub3duIGRhdGEgdHlwZS5cbiAgICovXG4gIHZhciBpc1plcm8gPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmlzWmVyb051bWJlcixcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4geC5pc1plcm8oKTtcbiAgICB9LFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHgucmUgPT09IDAgJiYgeC5pbSA9PT0gMDtcbiAgICB9LFxuICAgIEZyYWN0aW9uOiBmdW5jdGlvbiBGcmFjdGlvbih4KSB7XG4gICAgICByZXR1cm4geC5kID09PSAxICYmIHgubiA9PT0gMDtcbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgcmV0dXJuIGlzWmVybyh4LnZhbHVlKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgaXNaZXJvKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaXNaZXJvO1xufSk7XG5leHBvcnRzLmNyZWF0ZUlzWmVybyA9IGNyZWF0ZUlzWmVybzsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTnVtZXJpYyA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfbm9vcCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9ub29wXCIpO1xuXG52YXIgbmFtZSA9ICdudW1lcmljJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ251bWJlcicsICc/YmlnbnVtYmVyJywgJz9mcmFjdGlvbiddO1xudmFyIGNyZWF0ZU51bWVyaWMgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgX251bWJlciA9IF9yZWYubnVtYmVyLFxuICAgICAgYmlnbnVtYmVyID0gX3JlZi5iaWdudW1iZXIsXG4gICAgICBmcmFjdGlvbiA9IF9yZWYuZnJhY3Rpb247XG4gIHZhciB2YWxpZElucHV0VHlwZXMgPSB7XG4gICAgc3RyaW5nOiB0cnVlLFxuICAgIG51bWJlcjogdHJ1ZSxcbiAgICBCaWdOdW1iZXI6IHRydWUsXG4gICAgRnJhY3Rpb246IHRydWVcbiAgfTsgLy8gTG9hZCB0aGUgY29udmVyc2lvbiBmdW5jdGlvbnMgZm9yIGVhY2ggb3V0cHV0IHR5cGVcblxuICB2YXIgdmFsaWRPdXRwdXRUeXBlcyA9IHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICByZXR1cm4gX251bWJlcih4KTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogYmlnbnVtYmVyID8gZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBiaWdudW1iZXIoeCk7XG4gICAgfSA6IF9ub29wLm5vQmlnbnVtYmVyLFxuICAgIEZyYWN0aW9uOiBmcmFjdGlvbiA/IGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gZnJhY3Rpb24oeCk7XG4gICAgfSA6IF9ub29wLm5vRnJhY3Rpb25cbiAgfTtcbiAgLyoqXG4gICAqIENvbnZlcnQgYSBudW1lcmljIGlucHV0IHRvIGEgc3BlY2lmaWMgbnVtZXJpYyB0eXBlOiBudW1iZXIsIEJpZ051bWJlciwgb3IgRnJhY3Rpb24uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5udW1lcmljKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLm51bWVyaWMoJzQnKSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDRcbiAgICogICAgbWF0aC5udW1lcmljKCc0JywgJ251bWJlcicpICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA0XG4gICAqICAgIG1hdGgubnVtZXJpYygnNCcsICdCaWdOdW1iZXInKSAgICAgICAgICAgICAgLy8gcmV0dXJucyBCaWdOdW1iZXIgNFxuICAgKiAgICBtYXRoLm51bWVyaWMoJzQnLCAnRnJhY3Rpb24nKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgRnJhY3Rpb24gNFxuICAgKiAgICBtYXRoLm51bWVyaWMoNCwgJ0ZyYWN0aW9uJykgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgRnJhY3Rpb24gNFxuICAgKiAgICBtYXRoLm51bWVyaWMobWF0aC5mcmFjdGlvbigyLCA1KSwgJ251bWJlcicpIC8vIHJldHVybnMgbnVtYmVyIDAuNFxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgbnVtYmVyLCBmcmFjdGlvbiwgYmlnbnVtYmVyLCBzdHJpbmcsIGZvcm1hdFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIH0gdmFsdWVcbiAgICogICAgICAgICAgICAgIEEgbnVtZXJpYyB2YWx1ZSBvciBhIHN0cmluZyBjb250YWluaW5nIGEgbnVtZXJpYyB2YWx1ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3V0cHV0VHlwZVxuICAgKiAgICAgICAgICAgICAgRGVzaXJlZCBudW1lcmljIG91dHB1dCB0eXBlLlxuICAgKiAgICAgICAgICAgICAgQXZhaWxhYmxlIHZhbHVlczogJ251bWJlcicsICdCaWdOdW1iZXInLCBvciAnRnJhY3Rpb24nXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9ufVxuICAgKiAgICAgICAgICAgICAgUmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0aGUgbnVtZXJpYyBpbiB0aGUgcmVxdWVzdGVkIHR5cGVcbiAgICovXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIG51bWVyaWModmFsdWUsIG91dHB1dFR5cGUpIHtcbiAgICB2YXIgaW5wdXRUeXBlID0gKDAsIF9pcy50eXBlT2YpKHZhbHVlKTtcblxuICAgIGlmICghKGlucHV0VHlwZSBpbiB2YWxpZElucHV0VHlwZXMpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCAnICsgdmFsdWUgKyAnIG9mIHR5cGUgXCInICsgaW5wdXRUeXBlICsgJ1wiOyB2YWxpZCBpbnB1dCB0eXBlcyBhcmUgJyArIE9iamVjdC5rZXlzKHZhbGlkSW5wdXRUeXBlcykuam9pbignLCAnKSk7XG4gICAgfVxuXG4gICAgaWYgKCEob3V0cHV0VHlwZSBpbiB2YWxpZE91dHB1dFR5cGVzKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgJyArIHZhbHVlICsgJyB0byB0eXBlIFwiJyArIG91dHB1dFR5cGUgKyAnXCI7IHZhbGlkIG91dHB1dCB0eXBlcyBhcmUgJyArIE9iamVjdC5rZXlzKHZhbGlkT3V0cHV0VHlwZXMpLmpvaW4oJywgJykpO1xuICAgIH1cblxuICAgIGlmIChvdXRwdXRUeXBlID09PSBpbnB1dFR5cGUpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHZhbGlkT3V0cHV0VHlwZXNbb3V0cHV0VHlwZV0odmFsdWUpO1xuICAgIH1cbiAgfTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVOdW1lcmljID0gY3JlYXRlTnVtZXJpYzsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRGVwcmVjYXRlZFR5cGVvZiA9IGV4cG9ydHMuY3JlYXRlVHlwZU9mID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9sb2cgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbG9nXCIpO1xuXG52YXIgbmFtZSA9ICd0eXBlT2YnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVUeXBlT2YgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgdGhlIHR5cGUgb2YgYSB2YXJpYWJsZS5cbiAgICpcbiAgICogRnVuY3Rpb24gYHR5cGVPZmAgcmVjb2duaXplcyB0aGUgZm9sbG93aW5nIHR5cGVzIG9mIG9iamVjdHM6XG4gICAqXG4gICAqIE9iamVjdCAgICAgICAgICAgICAgICAgfCBSZXR1cm5zICAgICAgIHwgRXhhbXBsZVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBudWxsICAgICAgICAgICAgICAgICAgIHwgYCdudWxsJ2AgICAgICB8IGBtYXRoLnR5cGVPZihudWxsKWBcbiAgICogbnVtYmVyICAgICAgICAgICAgICAgICB8IGAnbnVtYmVyJ2AgICAgfCBgbWF0aC50eXBlT2YoMy41KWBcbiAgICogYm9vbGVhbiAgICAgICAgICAgICAgICB8IGAnYm9vbGVhbidgICAgfCBgbWF0aC50eXBlT2YodHJ1ZSlgXG4gICAqIHN0cmluZyAgICAgICAgICAgICAgICAgfCBgJ3N0cmluZydgICAgIHwgYG1hdGgudHlwZU9mKCdoZWxsbyB3b3JsZCcpYFxuICAgKiBBcnJheSAgICAgICAgICAgICAgICAgIHwgYCdBcnJheSdgICAgICB8IGBtYXRoLnR5cGVPZihbMSwgMiwgM10pYFxuICAgKiBEYXRlICAgICAgICAgICAgICAgICAgIHwgYCdEYXRlJ2AgICAgICB8IGBtYXRoLnR5cGVPZihuZXcgRGF0ZSgpKWBcbiAgICogRnVuY3Rpb24gICAgICAgICAgICAgICB8IGAnRnVuY3Rpb24nYCAgfCBgbWF0aC50eXBlT2YoZnVuY3Rpb24gKCkge30pYFxuICAgKiBPYmplY3QgICAgICAgICAgICAgICAgIHwgYCdPYmplY3QnYCAgICB8IGBtYXRoLnR5cGVPZih7YTogMiwgYjogM30pYFxuICAgKiBSZWdFeHAgICAgICAgICAgICAgICAgIHwgYCdSZWdFeHAnYCAgICB8IGBtYXRoLnR5cGVPZigvYSByZWdleHAvKWBcbiAgICogdW5kZWZpbmVkICAgICAgICAgICAgICB8IGAndW5kZWZpbmVkJ2AgfCBgbWF0aC50eXBlT2YodW5kZWZpbmVkKWBcbiAgICogbWF0aC5CaWdOdW1iZXIgICAgICAgICB8IGAnQmlnTnVtYmVyJ2AgfCBgbWF0aC50eXBlT2YobWF0aC5iaWdudW1iZXIoJzIuM2U1MDAnKSlgXG4gICAqIG1hdGguQ2hhaW4gICAgICAgICAgICAgfCBgJ0NoYWluJ2AgICAgIHwgYG1hdGgudHlwZU9mKG1hdGguY2hhaW4oMikpYFxuICAgKiBtYXRoLkNvbXBsZXggICAgICAgICAgIHwgYCdDb21wbGV4J2AgICB8IGBtYXRoLnR5cGVPZihtYXRoLmNvbXBsZXgoMiwgMykpYFxuICAgKiBtYXRoLkZyYWN0aW9uICAgICAgICAgIHwgYCdGcmFjdGlvbidgICB8IGBtYXRoLnR5cGVPZihtYXRoLmZyYWN0aW9uKDEsIDMpKWBcbiAgICogbWF0aC5IZWxwICAgICAgICAgICAgICB8IGAnSGVscCdgICAgICAgfCBgbWF0aC50eXBlT2YobWF0aC5oZWxwKCdzcXJ0JykpYFxuICAgKiBtYXRoLkhlbHAgICAgICAgICAgICAgIHwgYCdIZWxwJ2AgICAgICB8IGBtYXRoLnR5cGVPZihtYXRoLmhlbHAoJ3NxcnQnKSlgXG4gICAqIG1hdGguSW5kZXggICAgICAgICAgICAgfCBgJ0luZGV4J2AgICAgIHwgYG1hdGgudHlwZU9mKG1hdGguaW5kZXgoMSwgMykpYFxuICAgKiBtYXRoLk1hdHJpeCAgICAgICAgICAgIHwgYCdNYXRyaXgnYCAgICB8IGBtYXRoLnR5cGVPZihtYXRoLm1hdHJpeChbWzEsMl0sIFszLCA0XV0pKWBcbiAgICogbWF0aC5SYW5nZSAgICAgICAgICAgICB8IGAnUmFuZ2UnYCAgICAgfCBgbWF0aC50eXBlT2YobWF0aC5yYW5nZSgwLCAxMCkpYFxuICAgKiBtYXRoLlJlc3VsdFNldCAgICAgICAgIHwgYCdSZXN1bHRTZXQnYCB8IGBtYXRoLnR5cGVPZihtYXRoLmV2YWx1YXRlKCdhPTJcXG5iPTMnKSlgXG4gICAqIG1hdGguVW5pdCAgICAgICAgICAgICAgfCBgJ1VuaXQnYCAgICAgIHwgYG1hdGgudHlwZU9mKG1hdGgudW5pdCgnNDUgZGVnJykpYFxuICAgKiBtYXRoLkFjY2Vzc29yTm9kZSAgICAgICAgICAgIHwgYCdBY2Nlc3Nvck5vZGUnYCAgICAgICAgICAgIHwgYG1hdGgudHlwZU9mKG1hdGgucGFyc2UoJ0FbMl0nKSlgXG4gICAqIG1hdGguQXJyYXlOb2RlICAgICAgICAgICAgICAgfCBgJ0FycmF5Tm9kZSdgICAgICAgICAgICAgICAgfCBgbWF0aC50eXBlT2YobWF0aC5wYXJzZSgnWzEsMiwzXScpKWBcbiAgICogbWF0aC5Bc3NpZ25tZW50Tm9kZSAgICAgICAgICB8IGAnQXNzaWdubWVudE5vZGUnYCAgICAgICAgICB8IGBtYXRoLnR5cGVPZihtYXRoLnBhcnNlKCd4PTInKSlgXG4gICAqIG1hdGguQmxvY2tOb2RlICAgICAgICAgICAgICAgfCBgJ0Jsb2NrTm9kZSdgICAgICAgICAgICAgICAgfCBgbWF0aC50eXBlT2YobWF0aC5wYXJzZSgnYT0yOyBiPTMnKSlgXG4gICAqIG1hdGguQ29uZGl0aW9uYWxOb2RlICAgICAgICAgfCBgJ0NvbmRpdGlvbmFsTm9kZSdgICAgICAgICAgfCBgbWF0aC50eXBlT2YobWF0aC5wYXJzZSgneDwwID8gLXggOiB4JykpYFxuICAgKiBtYXRoLkNvbnN0YW50Tm9kZSAgICAgICAgICAgIHwgYCdDb25zdGFudE5vZGUnYCAgICAgICAgICAgIHwgYG1hdGgudHlwZU9mKG1hdGgucGFyc2UoJzIuMycpKWBcbiAgICogbWF0aC5GdW5jdGlvbkFzc2lnbm1lbnROb2RlICB8IGAnRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSdgICB8IGBtYXRoLnR5cGVPZihtYXRoLnBhcnNlKCdmKHgpPXheMicpKWBcbiAgICogbWF0aC5GdW5jdGlvbk5vZGUgICAgICAgICAgICB8IGAnRnVuY3Rpb25Ob2RlJ2AgICAgICAgICAgICB8IGBtYXRoLnR5cGVPZihtYXRoLnBhcnNlKCdzcXJ0KDQpJykpYFxuICAgKiBtYXRoLkluZGV4Tm9kZSAgICAgICAgICAgICAgIHwgYCdJbmRleE5vZGUnYCAgICAgICAgICAgICAgIHwgYG1hdGgudHlwZU9mKG1hdGgucGFyc2UoJ0FbMl0nKS5pbmRleClgXG4gICAqIG1hdGguT2JqZWN0Tm9kZSAgICAgICAgICAgICAgfCBgJ09iamVjdE5vZGUnYCAgICAgICAgICAgICAgfCBgbWF0aC50eXBlT2YobWF0aC5wYXJzZSgne2E6Mn0nKSlgXG4gICAqIG1hdGguUGFyZW50aGVzaXNOb2RlICAgICAgICAgfCBgJ1BhcmVudGhlc2lzTm9kZSdgICAgICAgICAgfCBgbWF0aC50eXBlT2YobWF0aC5wYXJzZSgnKDIrMyknKSlgXG4gICAqIG1hdGguUmFuZ2VOb2RlICAgICAgICAgICAgICAgfCBgJ1JhbmdlTm9kZSdgICAgICAgICAgICAgICAgfCBgbWF0aC50eXBlT2YobWF0aC5wYXJzZSgnMToxMCcpKWBcbiAgICogbWF0aC5TeW1ib2xOb2RlICAgICAgICAgICAgICB8IGAnU3ltYm9sTm9kZSdgICAgICAgICAgICAgICB8IGBtYXRoLnR5cGVPZihtYXRoLnBhcnNlKCd4JykpYFxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgudHlwZU9mKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnR5cGVPZigzLjUpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAnbnVtYmVyJ1xuICAgKiAgICBtYXRoLnR5cGVPZihtYXRoLmNvbXBsZXgoJzItNGknKSkgICAgLy8gcmV0dXJucyAnQ29tcGxleCdcbiAgICogICAgbWF0aC50eXBlT2YobWF0aC51bml0KCc0NSBkZWcnKSkgICAgIC8vIHJldHVybnMgJ1VuaXQnXG4gICAqICAgIG1hdGgudHlwZU9mKCdoZWxsbyB3b3JsZCcpICAgICAgICAgICAvLyByZXR1cm5zICdzdHJpbmcnXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0geCAgICAgVGhlIHZhcmlhYmxlIGZvciB3aGljaCB0byB0ZXN0IHRoZSB0eXBlLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIHR5cGUuIFByaW1pdGl2ZSB0eXBlcyBhcmUgbG93ZXIgY2FzZSxcbiAgICogICAgICAgICAgICAgICAgICBub24tcHJpbWl0aXZlIHR5cGVzIGFyZSB1cHBlci1jYW1lbC1jYXNlLlxuICAgKiAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlICdudW1iZXInLCAnc3RyaW5nJywgJ0FycmF5JywgJ0RhdGUnLlxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICBhbnk6IF9pcy50eXBlT2ZcbiAgfSk7XG59KTsgLy8gRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA2LjAuMC4gRGF0ZTogMjAxOC0xMS0wNlxuXG5leHBvcnRzLmNyZWF0ZVR5cGVPZiA9IGNyZWF0ZVR5cGVPZjtcbnZhciBjcmVhdGVEZXByZWNhdGVkVHlwZW9mID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKCd0eXBlb2YnLCBbXSwgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICgwLCBfbG9nLndhcm5PbmNlKSgnRnVuY3Rpb24gXCJ0eXBlb2ZcIiBoYXMgYmVlbiByZW5hbWVkIHRvIFwidHlwZU9mXCIgaW4gdjYuMC4wLCBwbGVhc2UgdXNlIHRoZSBuZXcgZnVuY3Rpb24gaW5zdGVhZC4nKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gX2lzLnR5cGVPZi5hcHBseShfaXMudHlwZU9mLCBhcmdzKTtcbiAgfTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVEZXByZWNhdGVkVHlwZW9mID0gY3JlYXRlRGVwcmVjYXRlZFR5cGVvZjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUmVwbGFjZXIgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdyZXBsYWNlcic7XG52YXIgZGVwZW5kZW5jaWVzID0gW107XG52YXIgY3JlYXRlUmVwbGFjZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoKSB7XG4gIC8qKlxuICAgKiBTdHJpbmdpZnkgZGF0YSB0eXBlcyBpbnRvIHRoZWlyIEpTT04gcmVwcmVzZW50YXRpb24uXG4gICAqIE1vc3QgZGF0YSB0eXBlcyBjYW4gYmUgc2VyaWFsaXplZCB1c2luZyB0aGVpciBgLnRvSlNPTmAgbWV0aG9kLFxuICAgKiBidXQgbm90IGFsbCwgZm9yIGV4YW1wbGUgdGhlIG51bWJlciBgSW5maW5pdHlgLiBGb3IgdGhlc2UgY2FzZXMgeW91IGhhdmVcbiAgICogdG8gdXNlIHRoZSByZXBsYWNlci4gRXhhbXBsZSB1c2FnZTpcbiAgICpcbiAgICogICAgIEpTT04uc3RyaW5naWZ5KFsyLCBJbmZpbml0eV0sIG1hdGgucmVwbGFjZXIpXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVwbGFjZWQgb2JqZWN0XG4gICAqL1xuICByZXR1cm4gZnVuY3Rpb24gcmVwbGFjZXIoa2V5LCB2YWx1ZSkge1xuICAgIC8vIHRoZSBudW1lcmljIHZhbHVlcyBJbmZpbml0aXksIC1JbmZpbml0eSwgYW5kIE5hTiBjYW5ub3QgYmUgc2VyaWFsaXplZCB0byBKU09OXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgKCFpc0Zpbml0ZSh2YWx1ZSkgfHwgaXNOYU4odmFsdWUpKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbWF0aGpzOiAnbnVtYmVyJyxcbiAgICAgICAgdmFsdWU6IFN0cmluZyh2YWx1ZSlcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xufSk7XG5leHBvcnRzLmNyZWF0ZVJlcGxhY2VyID0gY3JlYXRlUmVwbGFjZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJldml2ZXIgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdyZXZpdmVyJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ2NsYXNzZXMnXTtcbnZhciBjcmVhdGVSZXZpdmVyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIGNsYXNzZXMgPSBfcmVmLmNsYXNzZXM7XG5cbiAgLyoqXG4gICAqIEluc3RhbnRpYXRlIG1hdGhqcyBkYXRhIHR5cGVzIGZyb20gdGhlaXIgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJldml2ZWQgb2JqZWN0XG4gICAqL1xuICByZXR1cm4gZnVuY3Rpb24gcmV2aXZlcihrZXksIHZhbHVlKSB7XG4gICAgdmFyIGNvbnN0cnVjdG9yID0gY2xhc3Nlc1t2YWx1ZSAmJiB2YWx1ZS5tYXRoanNdO1xuXG4gICAgaWYgKGNvbnN0cnVjdG9yICYmIHR5cGVvZiBjb25zdHJ1Y3Rvci5mcm9tSlNPTiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yLmZyb21KU09OKHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH07XG59KTtcbmV4cG9ydHMuY3JlYXRlUmV2aXZlciA9IGNyZWF0ZVJldml2ZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFic051bWJlciA9IGFic051bWJlcjtcbmV4cG9ydHMuYWRkTnVtYmVyID0gYWRkTnVtYmVyO1xuZXhwb3J0cy5zdWJ0cmFjdE51bWJlciA9IHN1YnRyYWN0TnVtYmVyO1xuZXhwb3J0cy5tdWx0aXBseU51bWJlciA9IG11bHRpcGx5TnVtYmVyO1xuZXhwb3J0cy5kaXZpZGVOdW1iZXIgPSBkaXZpZGVOdW1iZXI7XG5leHBvcnRzLnVuYXJ5TWludXNOdW1iZXIgPSB1bmFyeU1pbnVzTnVtYmVyO1xuZXhwb3J0cy51bmFyeVBsdXNOdW1iZXIgPSB1bmFyeVBsdXNOdW1iZXI7XG5leHBvcnRzLmNicnROdW1iZXIgPSBjYnJ0TnVtYmVyO1xuZXhwb3J0cy5jZWlsTnVtYmVyID0gY2VpbE51bWJlcjtcbmV4cG9ydHMuY3ViZU51bWJlciA9IGN1YmVOdW1iZXI7XG5leHBvcnRzLmV4cE51bWJlciA9IGV4cE51bWJlcjtcbmV4cG9ydHMuZXhwbTFOdW1iZXIgPSBleHBtMU51bWJlcjtcbmV4cG9ydHMuZml4TnVtYmVyID0gZml4TnVtYmVyO1xuZXhwb3J0cy5mbG9vck51bWJlciA9IGZsb29yTnVtYmVyO1xuZXhwb3J0cy5nY2ROdW1iZXIgPSBnY2ROdW1iZXI7XG5leHBvcnRzLmxjbU51bWJlciA9IGxjbU51bWJlcjtcbmV4cG9ydHMubG9nTnVtYmVyID0gbG9nTnVtYmVyO1xuZXhwb3J0cy5sb2cxME51bWJlciA9IGxvZzEwTnVtYmVyO1xuZXhwb3J0cy5sb2cyTnVtYmVyID0gbG9nMk51bWJlcjtcbmV4cG9ydHMubG9nMXBOdW1iZXIgPSBsb2cxcE51bWJlcjtcbmV4cG9ydHMubW9kTnVtYmVyID0gbW9kTnVtYmVyO1xuZXhwb3J0cy5udGhSb290TnVtYmVyID0gbnRoUm9vdE51bWJlcjtcbmV4cG9ydHMuc2lnbk51bWJlciA9IHNpZ25OdW1iZXI7XG5leHBvcnRzLnNxcnROdW1iZXIgPSBzcXJ0TnVtYmVyO1xuZXhwb3J0cy5zcXVhcmVOdW1iZXIgPSBzcXVhcmVOdW1iZXI7XG5leHBvcnRzLnhnY2ROdW1iZXIgPSB4Z2NkTnVtYmVyO1xuZXhwb3J0cy5wb3dOdW1iZXIgPSBwb3dOdW1iZXI7XG5leHBvcnRzLnJvdW5kTnVtYmVyID0gcm91bmROdW1iZXI7XG5leHBvcnRzLm5vcm1OdW1iZXIgPSBub3JtTnVtYmVyO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBuMSA9ICdudW1iZXInO1xudmFyIG4yID0gJ251bWJlciwgbnVtYmVyJztcblxuZnVuY3Rpb24gYWJzTnVtYmVyKGEpIHtcbiAgcmV0dXJuIE1hdGguYWJzKGEpO1xufVxuXG5hYnNOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGFkZE51bWJlcihhLCBiKSB7XG4gIHJldHVybiBhICsgYjtcbn1cblxuYWRkTnVtYmVyLnNpZ25hdHVyZSA9IG4yO1xuXG5mdW5jdGlvbiBzdWJ0cmFjdE51bWJlcihhLCBiKSB7XG4gIHJldHVybiBhIC0gYjtcbn1cblxuc3VidHJhY3ROdW1iZXIuc2lnbmF0dXJlID0gbjI7XG5cbmZ1bmN0aW9uIG11bHRpcGx5TnVtYmVyKGEsIGIpIHtcbiAgcmV0dXJuIGEgKiBiO1xufVxuXG5tdWx0aXBseU51bWJlci5zaWduYXR1cmUgPSBuMjtcblxuZnVuY3Rpb24gZGl2aWRlTnVtYmVyKGEsIGIpIHtcbiAgcmV0dXJuIGEgLyBiO1xufVxuXG5kaXZpZGVOdW1iZXIuc2lnbmF0dXJlID0gbjI7XG5cbmZ1bmN0aW9uIHVuYXJ5TWludXNOdW1iZXIoeCkge1xuICByZXR1cm4gLXg7XG59XG5cbnVuYXJ5TWludXNOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIHVuYXJ5UGx1c051bWJlcih4KSB7XG4gIHJldHVybiB4O1xufVxuXG51bmFyeVBsdXNOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGNicnROdW1iZXIoeCkge1xuICByZXR1cm4gKDAsIF9udW1iZXIuY2JydCkoeCk7XG59XG5cbmNicnROdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGNlaWxOdW1iZXIoeCkge1xuICByZXR1cm4gTWF0aC5jZWlsKHgpO1xufVxuXG5jZWlsTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBjdWJlTnVtYmVyKHgpIHtcbiAgcmV0dXJuIHggKiB4ICogeDtcbn1cblxuY3ViZU51bWJlci5zaWduYXR1cmUgPSBuMTtcblxuZnVuY3Rpb24gZXhwTnVtYmVyKHgpIHtcbiAgcmV0dXJuIE1hdGguZXhwKHgpO1xufVxuXG5leHBOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGV4cG0xTnVtYmVyKHgpIHtcbiAgcmV0dXJuICgwLCBfbnVtYmVyLmV4cG0xKSh4KTtcbn1cblxuZXhwbTFOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGZpeE51bWJlcih4KSB7XG4gIHJldHVybiB4ID4gMCA/IE1hdGguZmxvb3IoeCkgOiBNYXRoLmNlaWwoeCk7XG59XG5cbmZpeE51bWJlci5zaWduYXR1cmUgPSBuMTtcblxuZnVuY3Rpb24gZmxvb3JOdW1iZXIoeCkge1xuICByZXR1cm4gTWF0aC5mbG9vcih4KTtcbn1cblxuZmxvb3JOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG4vKipcbiAqIENhbGN1bGF0ZSBnY2QgZm9yIG51bWJlcnNcbiAqIEBwYXJhbSB7bnVtYmVyfSBhXG4gKiBAcGFyYW0ge251bWJlcn0gYlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgZ3JlYXRlc3QgY29tbW9uIGRlbm9taW5hdG9yIG9mIGEgYW5kIGJcbiAqL1xuXG5mdW5jdGlvbiBnY2ROdW1iZXIoYSwgYikge1xuICBpZiAoISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoYSkgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoYikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlcnMgaW4gZnVuY3Rpb24gZ2NkIG11c3QgYmUgaW50ZWdlciBudW1iZXJzJyk7XG4gIH0gLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRXVjbGlkZWFuX2FsZ29yaXRobVxuXG5cbiAgdmFyIHI7XG5cbiAgd2hpbGUgKGIgIT09IDApIHtcbiAgICByID0gYSAlIGI7XG4gICAgYSA9IGI7XG4gICAgYiA9IHI7XG4gIH1cblxuICByZXR1cm4gYSA8IDAgPyAtYSA6IGE7XG59XG5cbmdjZE51bWJlci5zaWduYXR1cmUgPSBuMjtcbi8qKlxuICogQ2FsY3VsYXRlIGxjbSBmb3IgdHdvIG51bWJlcnNcbiAqIEBwYXJhbSB7bnVtYmVyfSBhXG4gKiBAcGFyYW0ge251bWJlcn0gYlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgbGVhc3QgY29tbW9uIG11bHRpcGxlIG9mIGEgYW5kIGJcbiAqL1xuXG5mdW5jdGlvbiBsY21OdW1iZXIoYSwgYikge1xuICBpZiAoISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoYSkgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoYikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlcnMgaW4gZnVuY3Rpb24gbGNtIG11c3QgYmUgaW50ZWdlciBudW1iZXJzJyk7XG4gIH1cblxuICBpZiAoYSA9PT0gMCB8fCBiID09PSAwKSB7XG4gICAgcmV0dXJuIDA7XG4gIH0gLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRXVjbGlkZWFuX2FsZ29yaXRobVxuICAvLyBldmFsdWF0ZSBsY20gaGVyZSBpbmxpbmUgdG8gcmVkdWNlIG92ZXJoZWFkXG5cblxuICB2YXIgdDtcbiAgdmFyIHByb2QgPSBhICogYjtcblxuICB3aGlsZSAoYiAhPT0gMCkge1xuICAgIHQgPSBiO1xuICAgIGIgPSBhICUgdDtcbiAgICBhID0gdDtcbiAgfVxuXG4gIHJldHVybiBNYXRoLmFicyhwcm9kIC8gYSk7XG59XG5cbmxjbU51bWJlci5zaWduYXR1cmUgPSBuMjtcbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBsb2dhcml0aG0gb2YgYSB2YWx1ZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cblxuZnVuY3Rpb24gbG9nTnVtYmVyKHgpIHtcbiAgcmV0dXJuIE1hdGgubG9nKHgpO1xufVxuXG5sb2dOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgMTAtYmFzZSBsb2dhcml0aG0gb2YgYSBudW1iZXJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cblxuZnVuY3Rpb24gbG9nMTBOdW1iZXIoeCkge1xuICByZXR1cm4gKDAsIF9udW1iZXIubG9nMTApKHgpO1xufVxuXG5sb2cxME51bWJlci5zaWduYXR1cmUgPSBuMTtcbi8qKlxuICogQ2FsY3VsYXRlIHRoZSAyLWJhc2UgbG9nYXJpdGhtIG9mIGEgbnVtYmVyXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5cbmZ1bmN0aW9uIGxvZzJOdW1iZXIoeCkge1xuICByZXR1cm4gKDAsIF9udW1iZXIubG9nMikoeCk7XG59XG5cbmxvZzJOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgbmF0dXJhbCBsb2dhcml0aG0gb2YgYSBgbnVtYmVyKzFgXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuXG5mdW5jdGlvbiBsb2cxcE51bWJlcih4KSB7XG4gIHJldHVybiAoMCwgX251bWJlci5sb2cxcCkoeCk7XG59XG5cbmxvZzFwTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIG1vZHVsdXMgb2YgdHdvIG51bWJlcnNcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcGFyYW0ge251bWJlcn0geVxuICogQHJldHVybnMge251bWJlcn0gcmVzXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIG1vZE51bWJlcih4LCB5KSB7XG4gIGlmICh5ID4gMCkge1xuICAgIC8vIFdlIGRvbid0IHVzZSBKYXZhU2NyaXB0J3MgJSBvcGVyYXRvciBoZXJlIGFzIHRoaXMgZG9lc24ndCB3b3JrXG4gICAgLy8gY29ycmVjdGx5IGZvciB4IDwgMCBhbmQgeCA9PT0gMFxuICAgIC8vIHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Nb2R1bG9fb3BlcmF0aW9uXG4gICAgcmV0dXJuIHggLSB5ICogTWF0aC5mbG9vcih4IC8geSk7XG4gIH0gZWxzZSBpZiAoeSA9PT0gMCkge1xuICAgIHJldHVybiB4O1xuICB9IGVsc2Uge1xuICAgIC8vIHkgPCAwXG4gICAgLy8gVE9ETzogaW1wbGVtZW50IG1vZCBmb3IgYSBuZWdhdGl2ZSBkaXZpc29yXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY2FsY3VsYXRlIG1vZCBmb3IgYSBuZWdhdGl2ZSBkaXZpc29yJyk7XG4gIH1cbn1cblxubW9kTnVtYmVyLnNpZ25hdHVyZSA9IG4yO1xuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIG50aCByb290IG9mIGEsIHNvbHZlIHhecm9vdCA9PSBhXG4gKiBodHRwOi8vcm9zZXR0YWNvZGUub3JnL3dpa2kvTnRoX3Jvb3QjSmF2YVNjcmlwdFxuICogQHBhcmFtIHtudW1iZXJ9IGFcbiAqIEBwYXJhbSB7bnVtYmVyfSByb290XG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIG50aFJvb3ROdW1iZXIoYSwgcm9vdCkge1xuICB2YXIgaW52ID0gcm9vdCA8IDA7XG5cbiAgaWYgKGludikge1xuICAgIHJvb3QgPSAtcm9vdDtcbiAgfVxuXG4gIGlmIChyb290ID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdSb290IG11c3QgYmUgbm9uLXplcm8nKTtcbiAgfVxuXG4gIGlmIChhIDwgMCAmJiBNYXRoLmFicyhyb290KSAlIDIgIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jvb3QgbXVzdCBiZSBvZGQgd2hlbiBhIGlzIG5lZ2F0aXZlLicpO1xuICB9IC8vIGVkZ2UgY2FzZXMgemVybyBhbmQgaW5maW5pdHlcblxuXG4gIGlmIChhID09PSAwKSB7XG4gICAgcmV0dXJuIGludiA/IEluZmluaXR5IDogMDtcbiAgfVxuXG4gIGlmICghaXNGaW5pdGUoYSkpIHtcbiAgICByZXR1cm4gaW52ID8gMCA6IGE7XG4gIH1cblxuICB2YXIgeCA9IE1hdGgucG93KE1hdGguYWJzKGEpLCAxIC8gcm9vdCk7IC8vIElmIGEgPCAwLCB3ZSByZXF1aXJlIHRoYXQgcm9vdCBpcyBhbiBvZGQgaW50ZWdlcixcbiAgLy8gc28gKC0xKSBeICgxL3Jvb3QpID0gLTFcblxuICB4ID0gYSA8IDAgPyAteCA6IHg7XG4gIHJldHVybiBpbnYgPyAxIC8geCA6IHg7IC8vIFZlcnkgbmljZSBhbGdvcml0aG0sIGJ1dCBmYWlscyB3aXRoIG50aFJvb3QoLTIsIDMpLlxuICAvLyBOZXd0b24ncyBtZXRob2QgaGFzIHNvbWUgd2VsbC1rbm93biBwcm9ibGVtcyBhdCB0aW1lczpcbiAgLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTmV3dG9uJTI3c19tZXRob2QjRmFpbHVyZV9hbmFseXNpc1xuXG4gIC8qXG4gIGxldCB4ID0gMSAvLyBJbml0aWFsIGd1ZXNzXG4gIGxldCB4UHJldiA9IDFcbiAgbGV0IGkgPSAwXG4gIGNvbnN0IGlNYXggPSAxMDAwMFxuICBkbyB7XG4gICAgY29uc3QgZGVsdGEgPSAoYSAvIE1hdGgucG93KHgsIHJvb3QgLSAxKSAtIHgpIC8gcm9vdFxuICAgIHhQcmV2ID0geFxuICAgIHggPSB4ICsgZGVsdGFcbiAgICBpKytcbiAgfVxuICB3aGlsZSAoeFByZXYgIT09IHggJiYgaSA8IGlNYXgpXG4gICBpZiAoeFByZXYgIT09IHgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Z1bmN0aW9uIG50aFJvb3QgZmFpbGVkIHRvIGNvbnZlcmdlJylcbiAgfVxuICAgcmV0dXJuIGludiA/IDEgLyB4IDogeFxuICAqL1xufVxuXG5udGhSb290TnVtYmVyLnNpZ25hdHVyZSA9IG4yO1xuXG5mdW5jdGlvbiBzaWduTnVtYmVyKHgpIHtcbiAgcmV0dXJuICgwLCBfbnVtYmVyLnNpZ24pKHgpO1xufVxuXG5zaWduTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBzcXJ0TnVtYmVyKHgpIHtcbiAgcmV0dXJuIE1hdGguc3FydCh4KTtcbn1cblxuc3FydE51bWJlci5zaWduYXR1cmUgPSBuMTtcblxuZnVuY3Rpb24gc3F1YXJlTnVtYmVyKHgpIHtcbiAgcmV0dXJuIHggKiB4O1xufVxuXG5zcXVhcmVOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG4vKipcbiAqIENhbGN1bGF0ZSB4Z2NkIGZvciB0d28gbnVtYmVyc1xuICogQHBhcmFtIHtudW1iZXJ9IGFcbiAqIEBwYXJhbSB7bnVtYmVyfSBiXG4gKiBAcmV0dXJuIHtudW1iZXJ9IHJlc3VsdFxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiB4Z2NkTnVtYmVyKGEsIGIpIHtcbiAgLy8gc291cmNlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FeHRlbmRlZF9FdWNsaWRlYW5fYWxnb3JpdGhtXG4gIHZhciB0OyAvLyB1c2VkIHRvIHN3YXAgdHdvIHZhcmlhYmxlc1xuXG4gIHZhciBxOyAvLyBxdW90aWVudFxuXG4gIHZhciByOyAvLyByZW1haW5kZXJcblxuICB2YXIgeCA9IDA7XG4gIHZhciBsYXN0eCA9IDE7XG4gIHZhciB5ID0gMTtcbiAgdmFyIGxhc3R5ID0gMDtcblxuICBpZiAoISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoYSkgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoYikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlcnMgaW4gZnVuY3Rpb24geGdjZCBtdXN0IGJlIGludGVnZXIgbnVtYmVycycpO1xuICB9XG5cbiAgd2hpbGUgKGIpIHtcbiAgICBxID0gTWF0aC5mbG9vcihhIC8gYik7XG4gICAgciA9IGEgLSBxICogYjtcbiAgICB0ID0geDtcbiAgICB4ID0gbGFzdHggLSBxICogeDtcbiAgICBsYXN0eCA9IHQ7XG4gICAgdCA9IHk7XG4gICAgeSA9IGxhc3R5IC0gcSAqIHk7XG4gICAgbGFzdHkgPSB0O1xuICAgIGEgPSBiO1xuICAgIGIgPSByO1xuICB9XG5cbiAgdmFyIHJlcztcblxuICBpZiAoYSA8IDApIHtcbiAgICByZXMgPSBbLWEsIC1sYXN0eCwgLWxhc3R5XTtcbiAgfSBlbHNlIHtcbiAgICByZXMgPSBbYSwgYSA/IGxhc3R4IDogMCwgbGFzdHldO1xuICB9XG5cbiAgcmV0dXJuIHJlcztcbn1cblxueGdjZE51bWJlci5zaWduYXR1cmUgPSBuMjtcbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgcG93ZXIgb2YgeCB0byB5LCB4XnksIGZvciB0d28gbnVtYmVycy5cbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcGFyYW0ge251bWJlcn0geVxuICogQHJldHVybiB7bnVtYmVyfSByZXNcbiAqL1xuXG5mdW5jdGlvbiBwb3dOdW1iZXIoeCwgeSkge1xuICAvLyB4XkluZmluaXR5ID09PSAwIGlmIC0xIDwgeCA8IDFcbiAgLy8gQSByZWFsIG51bWJlciAwIGlzIHJldHVybmVkIGluc3RlYWQgb2YgY29tcGxleCgwKVxuICBpZiAoeCAqIHggPCAxICYmIHkgPT09IEluZmluaXR5IHx8IHggKiB4ID4gMSAmJiB5ID09PSAtSW5maW5pdHkpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHJldHVybiBNYXRoLnBvdyh4LCB5KTtcbn1cblxucG93TnVtYmVyLnNpZ25hdHVyZSA9IG4yO1xuLyoqXG4gKiByb3VuZCBhIG51bWJlciB0byB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGRlY2ltYWxzLCBvciB0byB6ZXJvIGlmIGRlY2ltYWxzIGlzXG4gKiBub3QgcHJvdmlkZWRcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IGRlY2ltYWxzICAgICAgIG51bWJlciBvZiBkZWNpbWFscywgYmV0d2VlbiAwIGFuZCAxNSAoMCBieSBkZWZhdWx0KVxuICogQHJldHVybiB7bnVtYmVyfSByb3VuZGVkVmFsdWVcbiAqL1xuXG5mdW5jdGlvbiByb3VuZE51bWJlcih2YWx1ZSkge1xuICB2YXIgZGVjaW1hbHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IDA7XG4gIHJldHVybiBwYXJzZUZsb2F0KCgwLCBfbnVtYmVyLnRvRml4ZWQpKHZhbHVlLCBkZWNpbWFscykpO1xufVxuXG5yb3VuZE51bWJlci5zaWduYXR1cmUgPSBuMjtcbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBub3JtIG9mIGEgbnVtYmVyLCB0aGUgYWJzb2x1dGUgdmFsdWUuXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5cbmZ1bmN0aW9uIG5vcm1OdW1iZXIoeCkge1xuICByZXR1cm4gTWF0aC5hYnMoeCk7XG59XG5cbm5vcm1OdW1iZXIuc2lnbmF0dXJlID0gbjE7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJpdEFuZE51bWJlciA9IGJpdEFuZE51bWJlcjtcbmV4cG9ydHMuYml0Tm90TnVtYmVyID0gYml0Tm90TnVtYmVyO1xuZXhwb3J0cy5iaXRPck51bWJlciA9IGJpdE9yTnVtYmVyO1xuZXhwb3J0cy5iaXRYb3JOdW1iZXIgPSBiaXRYb3JOdW1iZXI7XG5leHBvcnRzLmxlZnRTaGlmdE51bWJlciA9IGxlZnRTaGlmdE51bWJlcjtcbmV4cG9ydHMucmlnaHRBcml0aFNoaWZ0TnVtYmVyID0gcmlnaHRBcml0aFNoaWZ0TnVtYmVyO1xuZXhwb3J0cy5yaWdodExvZ1NoaWZ0TnVtYmVyID0gcmlnaHRMb2dTaGlmdE51bWJlcjtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgbjEgPSAnbnVtYmVyJztcbnZhciBuMiA9ICdudW1iZXIsIG51bWJlcic7XG5cbmZ1bmN0aW9uIGJpdEFuZE51bWJlcih4LCB5KSB7XG4gIGlmICghKDAsIF9udW1iZXIuaXNJbnRlZ2VyKSh4KSB8fCAhKDAsIF9udW1iZXIuaXNJbnRlZ2VyKSh5KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW50ZWdlcnMgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gYml0QW5kJyk7XG4gIH1cblxuICByZXR1cm4geCAmIHk7XG59XG5cbmJpdEFuZE51bWJlci5zaWduYXR1cmUgPSBuMjtcblxuZnVuY3Rpb24gYml0Tm90TnVtYmVyKHgpIHtcbiAgaWYgKCEoMCwgX251bWJlci5pc0ludGVnZXIpKHgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnRlZ2VyIGV4cGVjdGVkIGluIGZ1bmN0aW9uIGJpdE5vdCcpO1xuICB9XG5cbiAgcmV0dXJuIH54O1xufVxuXG5iaXROb3ROdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGJpdE9yTnVtYmVyKHgsIHkpIHtcbiAgaWYgKCEoMCwgX251bWJlci5pc0ludGVnZXIpKHgpIHx8ICEoMCwgX251bWJlci5pc0ludGVnZXIpKHkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnRlZ2VycyBleHBlY3RlZCBpbiBmdW5jdGlvbiBiaXRPcicpO1xuICB9XG5cbiAgcmV0dXJuIHggfCB5O1xufVxuXG5iaXRPck51bWJlci5zaWduYXR1cmUgPSBuMjtcblxuZnVuY3Rpb24gYml0WG9yTnVtYmVyKHgsIHkpIHtcbiAgaWYgKCEoMCwgX251bWJlci5pc0ludGVnZXIpKHgpIHx8ICEoMCwgX251bWJlci5pc0ludGVnZXIpKHkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnRlZ2VycyBleHBlY3RlZCBpbiBmdW5jdGlvbiBiaXRYb3InKTtcbiAgfVxuXG4gIHJldHVybiB4IF4geTtcbn1cblxuYml0WG9yTnVtYmVyLnNpZ25hdHVyZSA9IG4yO1xuXG5mdW5jdGlvbiBsZWZ0U2hpZnROdW1iZXIoeCwgeSkge1xuICBpZiAoISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoeCkgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoeSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludGVnZXJzIGV4cGVjdGVkIGluIGZ1bmN0aW9uIGxlZnRTaGlmdCcpO1xuICB9XG5cbiAgcmV0dXJuIHggPDwgeTtcbn1cblxubGVmdFNoaWZ0TnVtYmVyLnNpZ25hdHVyZSA9IG4yO1xuXG5mdW5jdGlvbiByaWdodEFyaXRoU2hpZnROdW1iZXIoeCwgeSkge1xuICBpZiAoISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoeCkgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoeSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludGVnZXJzIGV4cGVjdGVkIGluIGZ1bmN0aW9uIHJpZ2h0QXJpdGhTaGlmdCcpO1xuICB9XG5cbiAgcmV0dXJuIHggPj4geTtcbn1cblxucmlnaHRBcml0aFNoaWZ0TnVtYmVyLnNpZ25hdHVyZSA9IG4yO1xuXG5mdW5jdGlvbiByaWdodExvZ1NoaWZ0TnVtYmVyKHgsIHkpIHtcbiAgaWYgKCEoMCwgX251bWJlci5pc0ludGVnZXIpKHgpIHx8ICEoMCwgX251bWJlci5pc0ludGVnZXIpKHkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnRlZ2VycyBleHBlY3RlZCBpbiBmdW5jdGlvbiByaWdodExvZ1NoaWZ0Jyk7XG4gIH1cblxuICByZXR1cm4geCA+Pj4geTtcbn1cblxucmlnaHRMb2dTaGlmdE51bWJlci5zaWduYXR1cmUgPSBuMjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tYmluYXRpb25zTnVtYmVyID0gY29tYmluYXRpb25zTnVtYmVyO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfcHJvZHVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9wcm9kdWN0XCIpO1xuXG5mdW5jdGlvbiBjb21iaW5hdGlvbnNOdW1iZXIobiwgaykge1xuICBpZiAoISgwLCBfbnVtYmVyLmlzSW50ZWdlcikobikgfHwgbiA8IDApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQb3NpdGl2ZSBpbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIGluIGZ1bmN0aW9uIGNvbWJpbmF0aW9ucycpO1xuICB9XG5cbiAgaWYgKCEoMCwgX251bWJlci5pc0ludGVnZXIpKGspIHx8IGsgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUG9zaXRpdmUgaW50ZWdlciB2YWx1ZSBleHBlY3RlZCBpbiBmdW5jdGlvbiBjb21iaW5hdGlvbnMnKTtcbiAgfVxuXG4gIGlmIChrID4gbikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2sgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gbicpO1xuICB9XG5cbiAgdmFyIG5NaW51c2sgPSBuIC0gaztcbiAgdmFyIHByb2RyYW5nZTtcblxuICBpZiAoayA8IG5NaW51c2spIHtcbiAgICBwcm9kcmFuZ2UgPSAoMCwgX3Byb2R1Y3QucHJvZHVjdCkobk1pbnVzayArIDEsIG4pO1xuICAgIHJldHVybiBwcm9kcmFuZ2UgLyAoMCwgX3Byb2R1Y3QucHJvZHVjdCkoMSwgayk7XG4gIH1cblxuICBwcm9kcmFuZ2UgPSAoMCwgX3Byb2R1Y3QucHJvZHVjdCkoayArIDEsIG4pO1xuICByZXR1cm4gcHJvZHJhbmdlIC8gKDAsIF9wcm9kdWN0LnByb2R1Y3QpKDEsIG5NaW51c2spO1xufVxuXG5jb21iaW5hdGlvbnNOdW1iZXIuc2lnbmF0dXJlID0gJ251bWJlciwgbnVtYmVyJzsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucGhpID0gZXhwb3J0cy5lID0gZXhwb3J0cy50YXUgPSBleHBvcnRzLnBpID0gdm9pZCAwO1xudmFyIHBpID0gTWF0aC5QSTtcbmV4cG9ydHMucGkgPSBwaTtcbnZhciB0YXUgPSAyICogTWF0aC5QSTtcbmV4cG9ydHMudGF1ID0gdGF1O1xudmFyIGUgPSBNYXRoLkU7XG5leHBvcnRzLmUgPSBlO1xudmFyIHBoaSA9IDEuNjE4MDMzOTg4NzQ5ODk0ODQ4MjA0NTg2ODM0MzY1NjM4MTE3NzIwMzA5MTc5ODA1NzYyODYyMTM1NDU7XG5leHBvcnRzLnBoaSA9IHBoaTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9hcml0aG1ldGljID0gcmVxdWlyZShcIi4vYXJpdGhtZXRpY1wiKTtcblxuT2JqZWN0LmtleXMoX2FyaXRobWV0aWMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBpZiAoa2V5ID09PSBcImRlZmF1bHRcIiB8fCBrZXkgPT09IFwiX19lc01vZHVsZVwiKSByZXR1cm47XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIF9hcml0aG1ldGljW2tleV07XG4gICAgfVxuICB9KTtcbn0pO1xuXG52YXIgX2JpdHdpc2UgPSByZXF1aXJlKFwiLi9iaXR3aXNlXCIpO1xuXG5PYmplY3Qua2V5cyhfYml0d2lzZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIGlmIChrZXkgPT09IFwiZGVmYXVsdFwiIHx8IGtleSA9PT0gXCJfX2VzTW9kdWxlXCIpIHJldHVybjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gX2JpdHdpc2Vba2V5XTtcbiAgICB9XG4gIH0pO1xufSk7XG5cbnZhciBfY29tYmluYXRpb25zID0gcmVxdWlyZShcIi4vY29tYmluYXRpb25zXCIpO1xuXG5PYmplY3Qua2V5cyhfY29tYmluYXRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgaWYgKGtleSA9PT0gXCJkZWZhdWx0XCIgfHwga2V5ID09PSBcIl9fZXNNb2R1bGVcIikgcmV0dXJuO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiBfY29tYmluYXRpb25zW2tleV07XG4gICAgfVxuICB9KTtcbn0pO1xuXG52YXIgX2NvbnN0YW50cyA9IHJlcXVpcmUoXCIuL2NvbnN0YW50c1wiKTtcblxuT2JqZWN0LmtleXMoX2NvbnN0YW50cykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIGlmIChrZXkgPT09IFwiZGVmYXVsdFwiIHx8IGtleSA9PT0gXCJfX2VzTW9kdWxlXCIpIHJldHVybjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gX2NvbnN0YW50c1trZXldO1xuICAgIH1cbiAgfSk7XG59KTtcblxudmFyIF9sb2dpY2FsID0gcmVxdWlyZShcIi4vbG9naWNhbFwiKTtcblxuT2JqZWN0LmtleXMoX2xvZ2ljYWwpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBpZiAoa2V5ID09PSBcImRlZmF1bHRcIiB8fCBrZXkgPT09IFwiX19lc01vZHVsZVwiKSByZXR1cm47XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIF9sb2dpY2FsW2tleV07XG4gICAgfVxuICB9KTtcbn0pO1xuXG52YXIgX3JlbGF0aW9uYWwgPSByZXF1aXJlKFwiLi9yZWxhdGlvbmFsXCIpO1xuXG5PYmplY3Qua2V5cyhfcmVsYXRpb25hbCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIGlmIChrZXkgPT09IFwiZGVmYXVsdFwiIHx8IGtleSA9PT0gXCJfX2VzTW9kdWxlXCIpIHJldHVybjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gX3JlbGF0aW9uYWxba2V5XTtcbiAgICB9XG4gIH0pO1xufSk7XG5cbnZhciBfcHJvYmFiaWxpdHkgPSByZXF1aXJlKFwiLi9wcm9iYWJpbGl0eVwiKTtcblxuT2JqZWN0LmtleXMoX3Byb2JhYmlsaXR5KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgaWYgKGtleSA9PT0gXCJkZWZhdWx0XCIgfHwga2V5ID09PSBcIl9fZXNNb2R1bGVcIikgcmV0dXJuO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiBfcHJvYmFiaWxpdHlba2V5XTtcbiAgICB9XG4gIH0pO1xufSk7XG5cbnZhciBfdHJpZ29ub21ldHJ5ID0gcmVxdWlyZShcIi4vdHJpZ29ub21ldHJ5XCIpO1xuXG5PYmplY3Qua2V5cyhfdHJpZ29ub21ldHJ5KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgaWYgKGtleSA9PT0gXCJkZWZhdWx0XCIgfHwga2V5ID09PSBcIl9fZXNNb2R1bGVcIikgcmV0dXJuO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiBfdHJpZ29ub21ldHJ5W2tleV07XG4gICAgfVxuICB9KTtcbn0pO1xuXG52YXIgX3V0aWxzID0gcmVxdWlyZShcIi4vdXRpbHNcIik7XG5cbk9iamVjdC5rZXlzKF91dGlscykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIGlmIChrZXkgPT09IFwiZGVmYXVsdFwiIHx8IGtleSA9PT0gXCJfX2VzTW9kdWxlXCIpIHJldHVybjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gX3V0aWxzW2tleV07XG4gICAgfVxuICB9KTtcbn0pOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5ub3ROdW1iZXIgPSBub3ROdW1iZXI7XG5leHBvcnRzLm9yTnVtYmVyID0gb3JOdW1iZXI7XG5leHBvcnRzLnhvck51bWJlciA9IHhvck51bWJlcjtcbmV4cG9ydHMuYW5kTnVtYmVyID0gYW5kTnVtYmVyO1xudmFyIG4xID0gJ251bWJlcic7XG52YXIgbjIgPSAnbnVtYmVyLCBudW1iZXInO1xuXG5mdW5jdGlvbiBub3ROdW1iZXIoeCkge1xuICByZXR1cm4gIXg7XG59XG5cbm5vdE51bWJlci5zaWduYXR1cmUgPSBuMTtcblxuZnVuY3Rpb24gb3JOdW1iZXIoeCwgeSkge1xuICByZXR1cm4gISEoeCB8fCB5KTtcbn1cblxub3JOdW1iZXIuc2lnbmF0dXJlID0gbjI7XG5cbmZ1bmN0aW9uIHhvck51bWJlcih4LCB5KSB7XG4gIHJldHVybiAhIXggIT09ICEheTtcbn1cblxueG9yTnVtYmVyLnNpZ25hdHVyZSA9IG4yO1xuXG5mdW5jdGlvbiBhbmROdW1iZXIoeCwgeSkge1xuICByZXR1cm4gISEoeCAmJiB5KTtcbn1cblxuYW5kTnVtYmVyLnNpZ25hdHVyZSA9IG4yOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5nYW1tYU51bWJlciA9IGdhbW1hTnVtYmVyO1xuZXhwb3J0cy5nYW1tYVAgPSBleHBvcnRzLmdhbW1hRyA9IHZvaWQgMDtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgX3Byb2R1Y3QgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvcHJvZHVjdFwiKTtcblxuZnVuY3Rpb24gZ2FtbWFOdW1iZXIobikge1xuICB2YXIgeDtcblxuICBpZiAoKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShuKSkge1xuICAgIGlmIChuIDw9IDApIHtcbiAgICAgIHJldHVybiBpc0Zpbml0ZShuKSA/IEluZmluaXR5IDogTmFOO1xuICAgIH1cblxuICAgIGlmIChuID4gMTcxKSB7XG4gICAgICByZXR1cm4gSW5maW5pdHk7IC8vIFdpbGwgb3ZlcmZsb3dcbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF9wcm9kdWN0LnByb2R1Y3QpKDEsIG4gLSAxKTtcbiAgfVxuXG4gIGlmIChuIDwgMC41KSB7XG4gICAgcmV0dXJuIE1hdGguUEkgLyAoTWF0aC5zaW4oTWF0aC5QSSAqIG4pICogZ2FtbWFOdW1iZXIoMSAtIG4pKTtcbiAgfVxuXG4gIGlmIChuID49IDE3MS4zNSkge1xuICAgIHJldHVybiBJbmZpbml0eTsgLy8gd2lsbCBvdmVyZmxvd1xuICB9XG5cbiAgaWYgKG4gPiA4NS4wKSB7XG4gICAgLy8gRXh0ZW5kZWQgU3RpcmxpbmcgQXBwcm94XG4gICAgdmFyIHR3b04gPSBuICogbjtcbiAgICB2YXIgdGhyZWVOID0gdHdvTiAqIG47XG4gICAgdmFyIGZvdXJOID0gdGhyZWVOICogbjtcbiAgICB2YXIgZml2ZU4gPSBmb3VyTiAqIG47XG4gICAgcmV0dXJuIE1hdGguc3FydCgyICogTWF0aC5QSSAvIG4pICogTWF0aC5wb3cobiAvIE1hdGguRSwgbikgKiAoMSArIDEgLyAoMTIgKiBuKSArIDEgLyAoMjg4ICogdHdvTikgLSAxMzkgLyAoNTE4NDAgKiB0aHJlZU4pIC0gNTcxIC8gKDI0ODgzMjAgKiBmb3VyTikgKyAxNjM4NzkgLyAoMjA5MDE4ODgwICogZml2ZU4pICsgNTI0NjgxOSAvICg3NTI0Njc5NjgwMCAqIGZpdmVOICogbikpO1xuICB9XG5cbiAgLS1uO1xuICB4ID0gZ2FtbWFQWzBdO1xuXG4gIGZvciAodmFyIGkgPSAxOyBpIDwgZ2FtbWFQLmxlbmd0aDsgKytpKSB7XG4gICAgeCArPSBnYW1tYVBbaV0gLyAobiArIGkpO1xuICB9XG5cbiAgdmFyIHQgPSBuICsgZ2FtbWFHICsgMC41O1xuICByZXR1cm4gTWF0aC5zcXJ0KDIgKiBNYXRoLlBJKSAqIE1hdGgucG93KHQsIG4gKyAwLjUpICogTWF0aC5leHAoLXQpICogeDtcbn1cblxuZ2FtbWFOdW1iZXIuc2lnbmF0dXJlID0gJ251bWJlcic7IC8vIFRPRE86IGNvbW1lbnQgb24gdGhlIHZhcmlhYmxlcyBnIGFuZCBwXG5cbnZhciBnYW1tYUcgPSA0Ljc0MjE4NzU7XG5leHBvcnRzLmdhbW1hRyA9IGdhbW1hRztcbnZhciBnYW1tYVAgPSBbMC45OTk5OTk5OTk5OTk5OTcwOTE4MiwgNTcuMTU2MjM1NjY1ODYyOTIzNTE3LCAtNTkuNTk3OTYwMzU1NDc1NDkxMjQ4LCAxNC4xMzYwOTc5NzQ3NDE3NDcxNzQsIC0wLjQ5MTkxMzgxNjA5NzYyMDE5OTc4LCAwLjMzOTk0NjQ5OTg0ODExODg4Njk5ZS00LCAwLjQ2NTIzNjI4OTI3MDQ4NTc1NjY1ZS00LCAtMC45ODM3NDQ3NTMwNDg3OTU2NDY3N2UtNCwgMC4xNTgwODg3MDMyMjQ5MTI0ODg4NGUtMywgLTAuMjEwMjY0NDQxNzI0MTA0ODgzMTllLTMsIDAuMjE3NDM5NjE4MTE1MjEyNjQzMjBlLTMsIC0wLjE2NDMxODEwNjUzNjc2Mzg5MDIyZS0zLCAwLjg0NDE4MjIzOTgzODUyNzQzMjkzZS00LCAtMC4yNjE5MDgzODQwMTU4MTQwODY3MGUtNCwgMC4zNjg5OTE4MjY1OTUzMTYyMjcwNGUtNV07XG5leHBvcnRzLmdhbW1hUCA9IGdhbW1hUDsiLCJcInVzZSBzdHJpY3RcIjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWNvc051bWJlciA9IGFjb3NOdW1iZXI7XG5leHBvcnRzLmFjb3NoTnVtYmVyID0gYWNvc2hOdW1iZXI7XG5leHBvcnRzLmFjb3ROdW1iZXIgPSBhY290TnVtYmVyO1xuZXhwb3J0cy5hY290aE51bWJlciA9IGFjb3RoTnVtYmVyO1xuZXhwb3J0cy5hY3NjTnVtYmVyID0gYWNzY051bWJlcjtcbmV4cG9ydHMuYWNzY2hOdW1iZXIgPSBhY3NjaE51bWJlcjtcbmV4cG9ydHMuYXNlY051bWJlciA9IGFzZWNOdW1iZXI7XG5leHBvcnRzLmFzZWNoTnVtYmVyID0gYXNlY2hOdW1iZXI7XG5leHBvcnRzLmFzaW5OdW1iZXIgPSBhc2luTnVtYmVyO1xuZXhwb3J0cy5hc2luaE51bWJlciA9IGFzaW5oTnVtYmVyO1xuZXhwb3J0cy5hdGFuTnVtYmVyID0gYXRhbk51bWJlcjtcbmV4cG9ydHMuYXRhbjJOdW1iZXIgPSBhdGFuMk51bWJlcjtcbmV4cG9ydHMuYXRhbmhOdW1iZXIgPSBhdGFuaE51bWJlcjtcbmV4cG9ydHMuY29zTnVtYmVyID0gY29zTnVtYmVyO1xuZXhwb3J0cy5jb3NoTnVtYmVyID0gY29zaE51bWJlcjtcbmV4cG9ydHMuY290TnVtYmVyID0gY290TnVtYmVyO1xuZXhwb3J0cy5jb3RoTnVtYmVyID0gY290aE51bWJlcjtcbmV4cG9ydHMuY3NjTnVtYmVyID0gY3NjTnVtYmVyO1xuZXhwb3J0cy5jc2NoTnVtYmVyID0gY3NjaE51bWJlcjtcbmV4cG9ydHMuc2VjTnVtYmVyID0gc2VjTnVtYmVyO1xuZXhwb3J0cy5zZWNoTnVtYmVyID0gc2VjaE51bWJlcjtcbmV4cG9ydHMuc2luTnVtYmVyID0gc2luTnVtYmVyO1xuZXhwb3J0cy5zaW5oTnVtYmVyID0gc2luaE51bWJlcjtcbmV4cG9ydHMudGFuTnVtYmVyID0gdGFuTnVtYmVyO1xuZXhwb3J0cy50YW5oTnVtYmVyID0gdGFuaE51bWJlcjtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgbjEgPSAnbnVtYmVyJztcbnZhciBuMiA9ICdudW1iZXIsIG51bWJlcic7XG5cbmZ1bmN0aW9uIGFjb3NOdW1iZXIoeCkge1xuICByZXR1cm4gTWF0aC5hY29zKHgpO1xufVxuXG5hY29zTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBhY29zaE51bWJlcih4KSB7XG4gIHJldHVybiAoMCwgX251bWJlci5hY29zaCkoeCk7XG59XG5cbmFjb3NoTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBhY290TnVtYmVyKHgpIHtcbiAgcmV0dXJuIE1hdGguYXRhbigxIC8geCk7XG59XG5cbmFjb3ROdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGFjb3RoTnVtYmVyKHgpIHtcbiAgcmV0dXJuIGlzRmluaXRlKHgpID8gKE1hdGgubG9nKCh4ICsgMSkgLyB4KSArIE1hdGgubG9nKHggLyAoeCAtIDEpKSkgLyAyIDogMDtcbn1cblxuYWNvdGhOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGFjc2NOdW1iZXIoeCkge1xuICByZXR1cm4gTWF0aC5hc2luKDEgLyB4KTtcbn1cblxuYWNzY051bWJlci5zaWduYXR1cmUgPSBuMTtcblxuZnVuY3Rpb24gYWNzY2hOdW1iZXIoeCkge1xuICB2YXIgeEludiA9IDEgLyB4O1xuICByZXR1cm4gTWF0aC5sb2coeEludiArIE1hdGguc3FydCh4SW52ICogeEludiArIDEpKTtcbn1cblxuYWNzY2hOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGFzZWNOdW1iZXIoeCkge1xuICByZXR1cm4gTWF0aC5hY29zKDEgLyB4KTtcbn1cblxuYXNlY051bWJlci5zaWduYXR1cmUgPSBuMTtcblxuZnVuY3Rpb24gYXNlY2hOdW1iZXIoeCkge1xuICB2YXIgeEludiA9IDEgLyB4O1xuICB2YXIgcmV0ID0gTWF0aC5zcXJ0KHhJbnYgKiB4SW52IC0gMSk7XG4gIHJldHVybiBNYXRoLmxvZyhyZXQgKyB4SW52KTtcbn1cblxuYXNlY2hOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGFzaW5OdW1iZXIoeCkge1xuICByZXR1cm4gTWF0aC5hc2luKHgpO1xufVxuXG5hc2luTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBhc2luaE51bWJlcih4KSB7XG4gIHJldHVybiAoMCwgX251bWJlci5hc2luaCkoeCk7XG59XG5cbmFzaW5oTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBhdGFuTnVtYmVyKHgpIHtcbiAgcmV0dXJuIE1hdGguYXRhbih4KTtcbn1cblxuYXRhbk51bWJlci5zaWduYXR1cmUgPSBuMTtcblxuZnVuY3Rpb24gYXRhbjJOdW1iZXIoeSwgeCkge1xuICByZXR1cm4gTWF0aC5hdGFuMih5LCB4KTtcbn1cblxuYXRhbjJOdW1iZXIuc2lnbmF0dXJlID0gbjI7XG5cbmZ1bmN0aW9uIGF0YW5oTnVtYmVyKHgpIHtcbiAgcmV0dXJuICgwLCBfbnVtYmVyLmF0YW5oKSh4KTtcbn1cblxuYXRhbmhOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGNvc051bWJlcih4KSB7XG4gIHJldHVybiBNYXRoLmNvcyh4KTtcbn1cblxuY29zTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBjb3NoTnVtYmVyKHgpIHtcbiAgcmV0dXJuICgwLCBfbnVtYmVyLmNvc2gpKHgpO1xufVxuXG5jb3NoTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBjb3ROdW1iZXIoeCkge1xuICByZXR1cm4gMSAvIE1hdGgudGFuKHgpO1xufVxuXG5jb3ROdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGNvdGhOdW1iZXIoeCkge1xuICB2YXIgZSA9IE1hdGguZXhwKDIgKiB4KTtcbiAgcmV0dXJuIChlICsgMSkgLyAoZSAtIDEpO1xufVxuXG5jb3RoTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBjc2NOdW1iZXIoeCkge1xuICByZXR1cm4gMSAvIE1hdGguc2luKHgpO1xufVxuXG5jc2NOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGNzY2hOdW1iZXIoeCkge1xuICAvLyBjb25zaWRlciB2YWx1ZXMgY2xvc2UgdG8gemVybyAoKy8tKVxuICBpZiAoeCA9PT0gMCkge1xuICAgIHJldHVybiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIE1hdGguYWJzKDIgLyAoTWF0aC5leHAoeCkgLSBNYXRoLmV4cCgteCkpKSAqICgwLCBfbnVtYmVyLnNpZ24pKHgpO1xuICB9XG59XG5cbmNzY2hOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIHNlY051bWJlcih4KSB7XG4gIHJldHVybiAxIC8gTWF0aC5jb3MoeCk7XG59XG5cbnNlY051bWJlci5zaWduYXR1cmUgPSBuMTtcblxuZnVuY3Rpb24gc2VjaE51bWJlcih4KSB7XG4gIHJldHVybiAyIC8gKE1hdGguZXhwKHgpICsgTWF0aC5leHAoLXgpKTtcbn1cblxuc2VjaE51bWJlci5zaWduYXR1cmUgPSBuMTtcblxuZnVuY3Rpb24gc2luTnVtYmVyKHgpIHtcbiAgcmV0dXJuIE1hdGguc2luKHgpO1xufVxuXG5zaW5OdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIHNpbmhOdW1iZXIoeCkge1xuICByZXR1cm4gKDAsIF9udW1iZXIuc2luaCkoeCk7XG59XG5cbnNpbmhOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIHRhbk51bWJlcih4KSB7XG4gIHJldHVybiBNYXRoLnRhbih4KTtcbn1cblxudGFuTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiB0YW5oTnVtYmVyKHgpIHtcbiAgcmV0dXJuICgwLCBfbnVtYmVyLnRhbmgpKHgpO1xufVxuXG50YW5oTnVtYmVyLnNpZ25hdHVyZSA9IG4xOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pc0ludGVnZXJOdW1iZXIgPSBpc0ludGVnZXJOdW1iZXI7XG5leHBvcnRzLmlzTmVnYXRpdmVOdW1iZXIgPSBpc05lZ2F0aXZlTnVtYmVyO1xuZXhwb3J0cy5pc1Bvc2l0aXZlTnVtYmVyID0gaXNQb3NpdGl2ZU51bWJlcjtcbmV4cG9ydHMuaXNaZXJvTnVtYmVyID0gaXNaZXJvTnVtYmVyO1xuZXhwb3J0cy5pc05hTk51bWJlciA9IGlzTmFOTnVtYmVyO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBuMSA9ICdudW1iZXInO1xuXG5mdW5jdGlvbiBpc0ludGVnZXJOdW1iZXIoeCkge1xuICByZXR1cm4gKDAsIF9udW1iZXIuaXNJbnRlZ2VyKSh4KTtcbn1cblxuaXNJbnRlZ2VyTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBpc05lZ2F0aXZlTnVtYmVyKHgpIHtcbiAgcmV0dXJuIHggPCAwO1xufVxuXG5pc05lZ2F0aXZlTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBpc1Bvc2l0aXZlTnVtYmVyKHgpIHtcbiAgcmV0dXJuIHggPiAwO1xufVxuXG5pc1Bvc2l0aXZlTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBpc1plcm9OdW1iZXIoeCkge1xuICByZXR1cm4geCA9PT0gMDtcbn1cblxuaXNaZXJvTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBpc05hTk51bWJlcih4KSB7XG4gIHJldHVybiBOdW1iZXIuaXNOYU4oeCk7XG59XG5cbmlzTmFOTnVtYmVyLnNpZ25hdHVyZSA9IG4xOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVCaWdOdW1iZXJDbGFzcyA9IHZvaWQgMDtcblxudmFyIF9kZWNpbWFsID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiZGVjaW1hbC5qc1wiKSk7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxudmFyIG5hbWUgPSAnQmlnTnVtYmVyJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJz9vbicsICdjb25maWcnXTtcbnZhciBjcmVhdGVCaWdOdW1iZXJDbGFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBvbiA9IF9yZWYub24sXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZztcblxuICB2YXIgQmlnTnVtYmVyID0gX2RlY2ltYWxbXCJkZWZhdWx0XCJdLmNsb25lKHtcbiAgICBwcmVjaXNpb246IGNvbmZpZy5wcmVjaXNpb25cbiAgfSk7XG4gIC8qKlxuICAgKiBBdHRhY2ggdHlwZSBpbmZvcm1hdGlvblxuICAgKi9cblxuXG4gIEJpZ051bWJlci5wcm90b3R5cGUudHlwZSA9ICdCaWdOdW1iZXInO1xuICBCaWdOdW1iZXIucHJvdG90eXBlLmlzQmlnTnVtYmVyID0gdHJ1ZTtcbiAgLyoqXG4gICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgYSBCaWdOdW1iZXIgY29udGFpbmluZ1xuICAgKiB0eXBlIGluZm9ybWF0aW9uXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYSBKU09OIG9iamVjdCBzdHJ1Y3R1cmVkIGFzOlxuICAgKiAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiQmlnTnVtYmVyXCIsIFwidmFsdWVcIjogXCIwLjJcIn1gXG4gICAqL1xuXG4gIEJpZ051bWJlci5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdCaWdOdW1iZXInLFxuICAgICAgdmFsdWU6IHRoaXMudG9TdHJpbmcoKVxuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhIEJpZ051bWJlciBmcm9tIGEgSlNPTiBvYmplY3RcbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIGEgSlNPTiBvYmplY3Qgc3RydWN0dXJlZCBhczpcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJCaWdOdW1iZXJcIiwgXCJ2YWx1ZVwiOiBcIjAuMlwifWBcbiAgICogQHJldHVybiB7QmlnTnVtYmVyfVxuICAgKi9cblxuXG4gIEJpZ051bWJlci5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoanNvbi52YWx1ZSk7XG4gIH07XG5cbiAgaWYgKG9uKSB7XG4gICAgLy8gbGlzdGVuIGZvciBjaGFuZ2VkIGluIHRoZSBjb25maWd1cmF0aW9uLCBhdXRvbWF0aWNhbGx5IGFwcGx5IGNoYW5nZWQgcHJlY2lzaW9uXG4gICAgb24oJ2NvbmZpZycsIGZ1bmN0aW9uIChjdXJyLCBwcmV2KSB7XG4gICAgICBpZiAoY3Vyci5wcmVjaXNpb24gIT09IHByZXYucHJlY2lzaW9uKSB7XG4gICAgICAgIEJpZ051bWJlci5jb25maWcoe1xuICAgICAgICAgIHByZWNpc2lvbjogY3Vyci5wcmVjaXNpb25cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gQmlnTnVtYmVyO1xufSwge1xuICBpc0NsYXNzOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQmlnTnVtYmVyQ2xhc3MgPSBjcmVhdGVCaWdOdW1iZXJDbGFzczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQmlnbnVtYmVyID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBuYW1lID0gJ2JpZ251bWJlcic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdCaWdOdW1iZXInXTtcbnZhciBjcmVhdGVCaWdudW1iZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXI7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIEJpZ051bWJlciwgd2hpY2ggY2FuIHN0b3JlIG51bWJlcnMgd2l0aCBhcmJpdHJhcnkgcHJlY2lzaW9uLlxuICAgKiBXaGVuIGEgbWF0cml4IGlzIHByb3ZpZGVkLCBhbGwgZWxlbWVudHMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gQmlnTnVtYmVyLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguYmlnbnVtYmVyKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAwLjEgKyAwLjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMC4zMDAwMDAwMDAwMDAwMDAwNFxuICAgKiAgICBtYXRoLmJpZ251bWJlcigwLjEpICsgbWF0aC5iaWdudW1iZXIoMC4yKSAgLy8gcmV0dXJucyBCaWdOdW1iZXIgMC4zXG4gICAqXG4gICAqXG4gICAqICAgIDcuMmU1MDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciBJbmZpbml0eVxuICAgKiAgICBtYXRoLmJpZ251bWJlcignNy4yZTUwMCcpICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBCaWdOdW1iZXIgNy4yZTUwMFxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYm9vbGVhbiwgY29tcGxleCwgaW5kZXgsIG1hdHJpeCwgc3RyaW5nLCB1bml0XG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgc3RyaW5nIHwgRnJhY3Rpb24gfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeCB8IGJvb2xlYW4gfCBudWxsfSBbdmFsdWVdICBWYWx1ZSBmb3IgdGhlIGJpZyBudW1iZXIsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgYnkgZGVmYXVsdC5cbiAgICogQHJldHVybnMge0JpZ051bWJlcn0gVGhlIGNyZWF0ZWQgYmlnbnVtYmVyXG4gICAqL1xuICB2YXIgYmlnbnVtYmVyID0gdHlwZWQoJ2JpZ251bWJlcicsIHtcbiAgICAnJzogZnVuY3Rpb24gXygpIHtcbiAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKDApO1xuICAgIH0sXG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkge1xuICAgICAgLy8gY29udmVydCB0byBzdHJpbmcgdG8gcHJldmVudCBlcnJvcnMgaW4gY2FzZSBvZiA+MTUgZGlnaXRzXG4gICAgICByZXR1cm4gbmV3IEJpZ051bWJlcih4ICsgJycpO1xuICAgIH0sXG4gICAgc3RyaW5nOiBmdW5jdGlvbiBzdHJpbmcoeCkge1xuICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoeCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICAvLyB3ZSBhc3N1bWUgYSBCaWdOdW1iZXIgaXMgaW1tdXRhYmxlXG4gICAgICByZXR1cm4geDtcbiAgICB9LFxuICAgIEZyYWN0aW9uOiBmdW5jdGlvbiBGcmFjdGlvbih4KSB7XG4gICAgICByZXR1cm4gbmV3IEJpZ051bWJlcih4Lm4pLmRpdih4LmQpLnRpbWVzKHgucyk7XG4gICAgfSxcbiAgICBcIm51bGxcIjogZnVuY3Rpb24gX251bGwoeCkge1xuICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoMCk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGJpZ251bWJlcik7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGJpZ251bWJlcjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVCaWdudW1iZXIgPSBjcmVhdGVCaWdudW1iZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUJvb2xlYW4gPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIG5hbWUgPSAnYm9vbGVhbic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUJvb2xlYW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBib29sZWFuIG9yIGNvbnZlcnQgYSBzdHJpbmcgb3IgbnVtYmVyIHRvIGEgYm9vbGVhbi5cbiAgICogSW4gY2FzZSBvZiBhIG51bWJlciwgYHRydWVgIGlzIHJldHVybmVkIGZvciBub24temVybyBudW1iZXJzLCBhbmQgYGZhbHNlYCBpblxuICAgKiBjYXNlIG9mIHplcm8uXG4gICAqIFN0cmluZ3MgY2FuIGJlIGAndHJ1ZSdgIG9yIGAnZmFsc2UnYCwgb3IgY2FuIGNvbnRhaW4gYSBudW1iZXIuXG4gICAqIFdoZW4gdmFsdWUgaXMgYSBtYXRyaXgsIGFsbCBlbGVtZW50cyB3aWxsIGJlIGNvbnZlcnRlZCB0byBib29sZWFuLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguYm9vbGVhbih4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5ib29sZWFuKDApICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguYm9vbGVhbigxKSAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguYm9vbGVhbigtMykgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmJvb2xlYW4oJ3RydWUnKSAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguYm9vbGVhbignZmFsc2UnKSAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmJvb2xlYW4oWzEsIDAsIDEsIDFdKSAgICAgLy8gcmV0dXJucyBbdHJ1ZSwgZmFsc2UsIHRydWUsIHRydWVdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiaWdudW1iZXIsIGNvbXBsZXgsIGluZGV4LCBtYXRyaXgsIHN0cmluZywgdW5pdFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBBcnJheSB8IE1hdHJpeCB8IG51bGx9IHZhbHVlICBBIHZhbHVlIG9mIGFueSB0eXBlXG4gICAqIEByZXR1cm4ge2Jvb2xlYW4gfCBBcnJheSB8IE1hdHJpeH0gVGhlIGJvb2xlYW4gdmFsdWVcbiAgICovXG4gIHZhciBib29sID0gdHlwZWQobmFtZSwge1xuICAgICcnOiBmdW5jdGlvbiBfKCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAgXCJib29sZWFuXCI6IGZ1bmN0aW9uIGJvb2xlYW4oeCkge1xuICAgICAgcmV0dXJuIHg7XG4gICAgfSxcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICByZXR1cm4gISF4O1xuICAgIH0sXG4gICAgXCJudWxsXCI6IGZ1bmN0aW9uIF9udWxsKHgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiAheC5pc1plcm8oKTtcbiAgICB9LFxuICAgIHN0cmluZzogZnVuY3Rpb24gc3RyaW5nKHgpIHtcbiAgICAgIC8vIHRyeSBjYXNlIGluc2Vuc2l0aXZlXG4gICAgICB2YXIgbGNhc2UgPSB4LnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIGlmIChsY2FzZSA9PT0gJ3RydWUnKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChsY2FzZSA9PT0gJ2ZhbHNlJykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IC8vIHRlc3Qgd2hldGhlciB2YWx1ZSBpcyBhIHZhbGlkIG51bWJlclxuXG5cbiAgICAgIHZhciBudW0gPSBOdW1iZXIoeCk7XG5cbiAgICAgIGlmICh4ICE9PSAnJyAmJiAhaXNOYU4obnVtKSkge1xuICAgICAgICByZXR1cm4gISFudW07XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbnZlcnQgXCInICsgeCArICdcIiB0byBhIGJvb2xlYW4nKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgYm9vbCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGJvb2w7XG59KTtcbmV4cG9ydHMuY3JlYXRlQm9vbGVhbiA9IGNyZWF0ZUJvb2xlYW47IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNoYWluQ2xhc3MgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3N0cmluZ1wiKTtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnQ2hhaW4nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnP29uJywgJ21hdGgnXTtcbnZhciBjcmVhdGVDaGFpbkNsYXNzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIG9uID0gX3JlZi5vbixcbiAgICAgIG1hdGggPSBfcmVmLm1hdGg7XG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvciBDaGFpblxuICAgKiBXcmFwIGFueSB2YWx1ZSBpbiBhIGNoYWluLCBhbGxvd2luZyB0byBwZXJmb3JtIGNoYWluZWQgb3BlcmF0aW9ucyBvblxuICAgKiB0aGUgdmFsdWUuXG4gICAqXG4gICAqIEFsbCBtZXRob2RzIGF2YWlsYWJsZSBpbiB0aGUgbWF0aC5qcyBsaWJyYXJ5IGNhbiBiZSBjYWxsZWQgdXBvbiB0aGUgY2hhaW4sXG4gICAqIGFuZCB0aGVuIHdpbGwgYmUgZXZhbHVhdGVkIHdpdGggdGhlIHZhbHVlIGl0c2VsZiBhcyBmaXJzdCBhcmd1bWVudC5cbiAgICogVGhlIGNoYWluIGNhbiBiZSBjbG9zZWQgYnkgZXhlY3V0aW5nIGNoYWluLmRvbmUoKSwgd2hpY2ggd2lsbCByZXR1cm5cbiAgICogdGhlIGZpbmFsIHZhbHVlLlxuICAgKlxuICAgKiBUaGUgQ2hhaW4gaGFzIGEgbnVtYmVyIG9mIHNwZWNpYWwgZnVuY3Rpb25zOlxuICAgKiAtIGRvbmUoKSAgICAgICAgICAgICBGaW5hbGl6ZSB0aGUgY2hhaW5lZCBvcGVyYXRpb24gYW5kIHJldHVybiB0aGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgY2hhaW4ncyB2YWx1ZS5cbiAgICogLSB2YWx1ZU9mKCkgICAgICAgICAgVGhlIHNhbWUgYXMgZG9uZSgpXG4gICAqIC0gdG9TdHJpbmcoKSAgICAgICAgIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNoYWluJ3MgdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gW3ZhbHVlXVxuICAgKi9cbiAgZnVuY3Rpb24gQ2hhaW4odmFsdWUpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQ2hhaW4pKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH1cblxuICAgIGlmICgoMCwgX2lzLmlzQ2hhaW4pKHZhbHVlKSkge1xuICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlLnZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBBdHRhY2ggdHlwZSBpbmZvcm1hdGlvblxuICAgKi9cblxuXG4gIENoYWluLnByb3RvdHlwZS50eXBlID0gJ0NoYWluJztcbiAgQ2hhaW4ucHJvdG90eXBlLmlzQ2hhaW4gPSB0cnVlO1xuICAvKipcbiAgICogQ2xvc2UgdGhlIGNoYWluLiBSZXR1cm5zIHRoZSBmaW5hbCB2YWx1ZS5cbiAgICogRG9lcyB0aGUgc2FtZSBhcyBtZXRob2QgdmFsdWVPZigpXG4gICAqIEByZXR1cm5zIHsqfSB2YWx1ZVxuICAgKi9cblxuICBDaGFpbi5wcm90b3R5cGUuZG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgfTtcbiAgLyoqXG4gICAqIENsb3NlIHRoZSBjaGFpbi4gUmV0dXJucyB0aGUgZmluYWwgdmFsdWUuXG4gICAqIERvZXMgdGhlIHNhbWUgYXMgbWV0aG9kIGRvbmUoKVxuICAgKiBAcmV0dXJucyB7Kn0gdmFsdWVcbiAgICovXG5cblxuICBDaGFpbi5wcm90b3R5cGUudmFsdWVPZiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmFsdWUgaW4gdGhlIGNoYWluXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuXG5cbiAgQ2hhaW4ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAoMCwgX3N0cmluZy5mb3JtYXQpKHRoaXMudmFsdWUpO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgY2hhaW5cbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG5cblxuICBDaGFpbi5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdDaGFpbicsXG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZVxuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhIENoYWluIGZyb20gaXRzIEpTT04gcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIEFuIG9iamVjdCBzdHJ1Y3R1cmVkIGxpa2VcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJDaGFpblwiLCB2YWx1ZTogLi4ufWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge0NoYWlufVxuICAgKi9cblxuXG4gIENoYWluLmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICByZXR1cm4gbmV3IENoYWluKGpzb24udmFsdWUpO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgcHJveHkgbWV0aG9kIGZvciB0aGUgY2hhaW5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gICAgICBUaGUgZnVuY3Rpb24gdG8gYmUgcHJveGllZFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIGZuIGlzIG5vIGZ1bmN0aW9uLCBpdCBpcyBzaWxlbnRseSBpZ25vcmVkLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVByb3h5KG5hbWUsIGZuKSB7XG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgQ2hhaW4ucHJvdG90eXBlW25hbWVdID0gY2hhaW5pZnkoZm4pO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIGEgcHJveHkgbWV0aG9kIGZvciB0aGUgY2hhaW5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZXIgICBUaGUgZnVuY3Rpb24gcmVzb2x2aW5nIHdpdGggdGhlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gdG8gYmUgcHJveGllZFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUxhenlQcm94eShuYW1lLCByZXNvbHZlcikge1xuICAgICgwLCBfb2JqZWN0LmxhenkpKENoYWluLnByb3RvdHlwZSwgbmFtZSwgZnVuY3Rpb24gb3V0ZXJSZXNvbHZlcigpIHtcbiAgICAgIHZhciBmbiA9IHJlc29sdmVyKCk7XG5cbiAgICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIGNoYWluaWZ5KGZuKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDsgLy8gaWYgbm90IGEgZnVuY3Rpb24sIGlnbm9yZVxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBNYWtlIGEgZnVuY3Rpb24gY2hhaW5hYmxlXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGZuXG4gICAqIEByZXR1cm4ge0Z1bmN0aW9ufSBjaGFpbiBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGNoYWluaWZ5KGZuKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBhcmdzID0gW3RoaXMudmFsdWVdOyAvLyBgdGhpc2Agd2lsbCBiZSB0aGUgY29udGV4dCBvZiBhIENoYWluIGluc3RhbmNlXG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGFyZ3NbaSArIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IENoYWluKGZuLmFwcGx5KGZuLCBhcmdzKSk7XG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIGEgcHJveHkgZm9yIGEgc2luZ2xlIG1ldGhvZCwgb3IgYW4gb2JqZWN0IHdpdGggbXVsdGlwbGUgbWV0aG9kcy5cbiAgICogRXhhbXBsZSB1c2FnZTpcbiAgICpcbiAgICogICBDaGFpbi5jcmVhdGVQcm94eSgnYWRkJywgZnVuY3Rpb24gYWRkICh4LCB5KSB7Li4ufSlcbiAgICogICBDaGFpbi5jcmVhdGVQcm94eSh7XG4gICAqICAgICBhZGQ6ICAgICAgZnVuY3Rpb24gYWRkICh4LCB5KSB7Li4ufSxcbiAgICogICAgIHN1YnRyYWN0OiBmdW5jdGlvbiBzdWJ0cmFjdCAoeCwgeSkgey4uLn1cbiAgICogICB9XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgT2JqZWN0fSBhcmcwICAgQSBuYW1lIChzdHJpbmcpLCBvciBhbiBvYmplY3Qgd2l0aFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uc1xuICAgKiBAcGFyYW0geyp9IFthcmcxXSAgICAgICAgICAgICAgIEEgZnVuY3Rpb24sIHdoZW4gYXJnMCBpcyBhIG5hbWVcbiAgICovXG5cblxuICBDaGFpbi5jcmVhdGVQcm94eSA9IGZ1bmN0aW9uIChhcmcwLCBhcmcxKSB7XG4gICAgaWYgKHR5cGVvZiBhcmcwID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gY3JlYXRlUHJveHkobmFtZSwgdmFsdWUpXG4gICAgICBjcmVhdGVQcm94eShhcmcwLCBhcmcxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoX25hbWUpIHtcbiAgICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShhcmcwLCBfbmFtZSkgJiYgZXhjbHVkZWROYW1lc1tfbmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNyZWF0ZUxhenlQcm94eShfbmFtZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFyZzBbX25hbWVdO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICAvLyBjcmVhdGVQcm94eSh2YWx1ZXMpXG4gICAgICBmb3IgKHZhciBfbmFtZSBpbiBhcmcwKSB7XG4gICAgICAgIF9sb29wKF9uYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgdmFyIGV4Y2x1ZGVkTmFtZXMgPSB7XG4gICAgZXhwcmVzc2lvbjogdHJ1ZSxcbiAgICBkb2NzOiB0cnVlLFxuICAgIHR5cGU6IHRydWUsXG4gICAgY2xhc3NlczogdHJ1ZSxcbiAgICBqc29uOiB0cnVlLFxuICAgIGVycm9yOiB0cnVlLFxuICAgIGlzQ2hhaW46IHRydWUgLy8gY29uZmxpY3RzIHdpdGggdGhlIHByb3BlcnR5IGlzQ2hhaW4gb2YgYSBDaGFpbiBpbnN0YW5jZVxuXG4gIH07IC8vIGNyZWF0ZSBwcm94eSBmb3IgZXZlcnl0aGluZyB0aGF0IGlzIGluIG1hdGguanNcblxuICBDaGFpbi5jcmVhdGVQcm94eShtYXRoKTsgLy8gcmVnaXN0ZXIgb24gdGhlIGltcG9ydCBldmVudCwgYXV0b21hdGljYWxseSBhZGQgYSBwcm94eSBmb3IgZXZlcnkgaW1wb3J0ZWQgZnVuY3Rpb24uXG5cbiAgaWYgKG9uKSB7XG4gICAgb24oJ2ltcG9ydCcsIGZ1bmN0aW9uIChuYW1lLCByZXNvbHZlciwgcGF0aCkge1xuICAgICAgaWYgKCFwYXRoKSB7XG4gICAgICAgIC8vIGFuIGltcG9ydGVkIGZ1bmN0aW9uIChub3QgYSBkYXRhIHR5cGUgb3Igc29tZXRoaW5nIHNwZWNpYWwpXG4gICAgICAgIGNyZWF0ZUxhenlQcm94eShuYW1lLCByZXNvbHZlcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gQ2hhaW47XG59LCB7XG4gIGlzQ2xhc3M6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDaGFpbkNsYXNzID0gY3JlYXRlQ2hhaW5DbGFzczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ2hhaW4gPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdjaGFpbic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdDaGFpbiddO1xudmFyIGNyZWF0ZUNoYWluID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIENoYWluID0gX3JlZi5DaGFpbjtcblxuICAvKipcbiAgICogV3JhcCBhbnkgdmFsdWUgaW4gYSBjaGFpbiwgYWxsb3dpbmcgdG8gcGVyZm9ybSBjaGFpbmVkIG9wZXJhdGlvbnMgb25cbiAgICogdGhlIHZhbHVlLlxuICAgKlxuICAgKiBBbGwgbWV0aG9kcyBhdmFpbGFibGUgaW4gdGhlIG1hdGguanMgbGlicmFyeSBjYW4gYmUgY2FsbGVkIHVwb24gdGhlIGNoYWluLFxuICAgKiBhbmQgdGhlbiB3aWxsIGJlIGV2YWx1YXRlZCB3aXRoIHRoZSB2YWx1ZSBpdHNlbGYgYXMgZmlyc3QgYXJndW1lbnQuXG4gICAqIFRoZSBjaGFpbiBjYW4gYmUgY2xvc2VkIGJ5IGV4ZWN1dGluZyBgY2hhaW4uZG9uZSgpYCwgd2hpY2ggcmV0dXJuc1xuICAgKiB0aGUgZmluYWwgdmFsdWUuXG4gICAqXG4gICAqIFRoZSBjaGFpbiBoYXMgYSBudW1iZXIgb2Ygc3BlY2lhbCBmdW5jdGlvbnM6XG4gICAqXG4gICAqIC0gYGRvbmUoKWAgICAgIEZpbmFsaXplIHRoZSBjaGFpbiBhbmQgcmV0dXJuIHRoZSBjaGFpbidzIHZhbHVlLlxuICAgKiAtIGB2YWx1ZU9mKClgICBUaGUgc2FtZSBhcyBgZG9uZSgpYFxuICAgKiAtIGB0b1N0cmluZygpYCBFeGVjdXRlcyBgbWF0aC5mb3JtYXQoKWAgb250byB0aGUgY2hhaW4ncyB2YWx1ZSwgcmV0dXJuaW5nXG4gICAqICAgICAgICAgICAgICAgIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmNoYWluKHZhbHVlKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGguY2hhaW4oMylcbiAgICogICAgICAgICAuYWRkKDQpXG4gICAqICAgICAgICAgLnN1YnRyYWN0KDIpXG4gICAqICAgICAgICAgLmRvbmUoKSAgICAgLy8gNVxuICAgKlxuICAgKiAgICAgbWF0aC5jaGFpbiggW1sxLCAyXSwgWzMsIDRdXSApXG4gICAqICAgICAgICAgLnN1YnNldChtYXRoLmluZGV4KDAsIDApLCA4KVxuICAgKiAgICAgICAgIC5tdWx0aXBseSgzKVxuICAgKiAgICAgICAgIC5kb25lKCkgICAgIC8vIFtbMjQsIDZdLCBbOSwgMTJdXVxuICAgKlxuICAgKiBAcGFyYW0geyp9IFt2YWx1ZV0gICBBIHZhbHVlIG9mIGFueSB0eXBlIG9uIHdoaWNoIHRvIHN0YXJ0IGEgY2hhaW5lZCBvcGVyYXRpb24uXG4gICAqIEByZXR1cm4ge21hdGguQ2hhaW59IFRoZSBjcmVhdGVkIGNoYWluXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICcnOiBmdW5jdGlvbiBfKCkge1xuICAgICAgcmV0dXJuIG5ldyBDaGFpbigpO1xuICAgIH0sXG4gICAgYW55OiBmdW5jdGlvbiBhbnkodmFsdWUpIHtcbiAgICAgIHJldHVybiBuZXcgQ2hhaW4odmFsdWUpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlQ2hhaW4gPSBjcmVhdGVDaGFpbjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ29tcGxleENsYXNzID0gdm9pZCAwO1xuXG52YXIgX2NvbXBsZXggPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJjb21wbGV4LmpzXCIpKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIG5hbWUgPSAnQ29tcGxleCc7XG52YXIgZGVwZW5kZW5jaWVzID0gW107XG52YXIgY3JlYXRlQ29tcGxleENsYXNzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKCkge1xuICAvKipcbiAgICogQXR0YWNoIHR5cGUgaW5mb3JtYXRpb25cbiAgICovXG4gIF9jb21wbGV4W1wiZGVmYXVsdFwiXS5wcm90b3R5cGUudHlwZSA9ICdDb21wbGV4JztcbiAgX2NvbXBsZXhbXCJkZWZhdWx0XCJdLnByb3RvdHlwZS5pc0NvbXBsZXggPSB0cnVlO1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29tcGxleCBudW1iZXJcbiAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBhIEpTT04gb2JqZWN0IHN0cnVjdHVyZWQgYXM6XG4gICAqICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJDb21wbGV4XCIsIFwicmVcIjogMiwgXCJpbVwiOiAzfWBcbiAgICovXG5cbiAgX2NvbXBsZXhbXCJkZWZhdWx0XCJdLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hdGhqczogJ0NvbXBsZXgnLFxuICAgICAgcmU6IHRoaXMucmUsXG4gICAgICBpbTogdGhpcy5pbVxuICAgIH07XG4gIH07XG4gIC8qXG4gICAqIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGNvbXBsZXggbnVtYmVyIGluIHBvbGFyIG5vdGF0aW9uXG4gICAqIFRoZSBhbmdsZSBwaGkgd2lsbCBiZSBzZXQgaW4gdGhlIGludGVydmFsIG9mIFstcGksIHBpXS5cbiAgICogQHJldHVybiB7e3I6IG51bWJlciwgcGhpOiBudW1iZXJ9fSBSZXR1cm5zIGFuZCBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIHIgYW5kIHBoaS5cbiAgICovXG5cblxuICBfY29tcGxleFtcImRlZmF1bHRcIl0ucHJvdG90eXBlLnRvUG9sYXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHI6IHRoaXMuYWJzKCksXG4gICAgICBwaGk6IHRoaXMuYXJnKClcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb21wbGV4IG51bWJlcixcbiAgICogd2l0aCBvcHRpb25hbCBmb3JtYXR0aW5nIG9wdGlvbnMuXG4gICAqIEBwYXJhbSB7T2JqZWN0IHwgbnVtYmVyIHwgRnVuY3Rpb259IFtvcHRpb25zXSAgRm9ybWF0dGluZyBvcHRpb25zLiBTZWVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWIvdXRpbHMvbnVtYmVyOmZvcm1hdCBmb3IgYVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uIG9mIHRoZSBhdmFpbGFibGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIF9jb21wbGV4W1wiZGVmYXVsdFwiXS5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgc3RyID0gJyc7XG4gICAgdmFyIGltID0gdGhpcy5pbTtcbiAgICB2YXIgcmUgPSB0aGlzLnJlO1xuICAgIHZhciBzdHJSZSA9ICgwLCBfbnVtYmVyLmZvcm1hdCkodGhpcy5yZSwgb3B0aW9ucyk7XG4gICAgdmFyIHN0ckltID0gKDAsIF9udW1iZXIuZm9ybWF0KSh0aGlzLmltLCBvcHRpb25zKTsgLy8gcm91bmQgZWl0aGVyIHJlIG9yIGltIHdoZW4gc21hbGxlciB0aGFuIHRoZSBjb25maWd1cmVkIHByZWNpc2lvblxuXG4gICAgdmFyIHByZWNpc2lvbiA9ICgwLCBfaXMuaXNOdW1iZXIpKG9wdGlvbnMpID8gb3B0aW9ucyA6IG9wdGlvbnMgPyBvcHRpb25zLnByZWNpc2lvbiA6IG51bGw7XG5cbiAgICBpZiAocHJlY2lzaW9uICE9PSBudWxsKSB7XG4gICAgICB2YXIgZXBzaWxvbiA9IE1hdGgucG93KDEwLCAtcHJlY2lzaW9uKTtcblxuICAgICAgaWYgKE1hdGguYWJzKHJlIC8gaW0pIDwgZXBzaWxvbikge1xuICAgICAgICByZSA9IDA7XG4gICAgICB9XG5cbiAgICAgIGlmIChNYXRoLmFicyhpbSAvIHJlKSA8IGVwc2lsb24pIHtcbiAgICAgICAgaW0gPSAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbSA9PT0gMCkge1xuICAgICAgLy8gcmVhbCB2YWx1ZVxuICAgICAgc3RyID0gc3RyUmU7XG4gICAgfSBlbHNlIGlmIChyZSA9PT0gMCkge1xuICAgICAgLy8gcHVyZWx5IGNvbXBsZXggdmFsdWVcbiAgICAgIGlmIChpbSA9PT0gMSkge1xuICAgICAgICBzdHIgPSAnaSc7XG4gICAgICB9IGVsc2UgaWYgKGltID09PSAtMSkge1xuICAgICAgICBzdHIgPSAnLWknO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RyID0gc3RySW0gKyAnaSc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGNvbXBsZXggdmFsdWVcbiAgICAgIGlmIChpbSA8IDApIHtcbiAgICAgICAgaWYgKGltID09PSAtMSkge1xuICAgICAgICAgIHN0ciA9IHN0clJlICsgJyAtIGknO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0ciA9IHN0clJlICsgJyAtICcgKyBzdHJJbS5zdWJzdHJpbmcoMSkgKyAnaSc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpbSA9PT0gMSkge1xuICAgICAgICAgIHN0ciA9IHN0clJlICsgJyArIGknO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0ciA9IHN0clJlICsgJyArICcgKyBzdHJJbSArICdpJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdHI7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjb21wbGV4IG51bWJlciBmcm9tIHBvbGFyIGNvb3JkaW5hdGVzXG4gICAqXG4gICAqIFVzYWdlOlxuICAgKlxuICAgKiAgICAgQ29tcGxleC5mcm9tUG9sYXIocjogbnVtYmVyLCBwaGk6IG51bWJlcikgOiBDb21wbGV4XG4gICAqICAgICBDb21wbGV4LmZyb21Qb2xhcih7cjogbnVtYmVyLCBwaGk6IG51bWJlcn0pIDogQ29tcGxleFxuICAgKlxuICAgKiBAcGFyYW0geyp9IGFyZ3MuLi5cbiAgICogQHJldHVybiB7Q29tcGxleH1cbiAgICovXG5cblxuICBfY29tcGxleFtcImRlZmF1bHRcIl0uZnJvbVBvbGFyID0gZnVuY3Rpb24gKGFyZ3MpIHtcbiAgICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBhcmcgPSBhcmd1bWVudHNbMF07XG5cbiAgICAgICAgICBpZiAoX3R5cGVvZihhcmcpID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuICgwLCBfY29tcGxleFtcImRlZmF1bHRcIl0pKGFyZyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0lucHV0IGhhcyB0byBiZSBhbiBvYmplY3Qgd2l0aCByIGFuZCBwaGkga2V5cy4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgY2FzZSAyOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIHIgPSBhcmd1bWVudHNbMF07XG4gICAgICAgICAgdmFyIHBoaSA9IGFyZ3VtZW50c1sxXTtcblxuICAgICAgICAgIGlmICgoMCwgX2lzLmlzTnVtYmVyKShyKSkge1xuICAgICAgICAgICAgaWYgKCgwLCBfaXMuaXNVbml0KShwaGkpICYmIHBoaS5oYXNCYXNlKCdBTkdMRScpKSB7XG4gICAgICAgICAgICAgIC8vIGNvbnZlcnQgdW5pdCB0byBhIG51bWJlciBpbiByYWRpYW5zXG4gICAgICAgICAgICAgIHBoaSA9IHBoaS50b051bWJlcigncmFkJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICgoMCwgX2lzLmlzTnVtYmVyKShwaGkpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgX2NvbXBsZXhbXCJkZWZhdWx0XCJdKHtcbiAgICAgICAgICAgICAgICByOiByLFxuICAgICAgICAgICAgICAgIHBoaTogcGhpXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQaGkgaXMgbm90IGEgbnVtYmVyIG5vciBhbiBhbmdsZSB1bml0LicpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSYWRpdXMgciBpcyBub3QgYSBudW1iZXIuJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyBpbiBmdW5jdGlvbiBmcm9tUG9sYXInKTtcbiAgICB9XG4gIH07XG5cbiAgX2NvbXBsZXhbXCJkZWZhdWx0XCJdLnByb3RvdHlwZS52YWx1ZU9mID0gX2NvbXBsZXhbXCJkZWZhdWx0XCJdLnByb3RvdHlwZS50b1N0cmluZztcbiAgLyoqXG4gICAqIENyZWF0ZSBhIENvbXBsZXggbnVtYmVyIGZyb20gYSBKU09OIG9iamVjdFxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQSBKU09OIE9iamVjdCBzdHJ1Y3R1cmVkIGFzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB7XCJtYXRoanNcIjogXCJDb21wbGV4XCIsIFwicmVcIjogMiwgXCJpbVwiOiAzfVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgQWxsIHByb3BlcnRpZXMgYXJlIG9wdGlvbmFsLCBkZWZhdWx0IHZhbHVlc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgZm9yIGByZWAgYW5kIGBpbWAgYXJlIDAuXG4gICAqIEByZXR1cm4ge0NvbXBsZXh9IFJldHVybnMgYSBuZXcgQ29tcGxleCBudW1iZXJcbiAgICovXG5cbiAgX2NvbXBsZXhbXCJkZWZhdWx0XCJdLmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICByZXR1cm4gbmV3IF9jb21wbGV4W1wiZGVmYXVsdFwiXShqc29uKTtcbiAgfTtcbiAgLyoqXG4gICAqIENvbXBhcmUgdHdvIGNvbXBsZXggbnVtYmVycywgYGFgIGFuZCBgYmA6XG4gICAqXG4gICAqIC0gUmV0dXJucyAxIHdoZW4gdGhlIHJlYWwgcGFydCBvZiBgYWAgaXMgbGFyZ2VyIHRoYW4gdGhlIHJlYWwgcGFydCBvZiBgYmBcbiAgICogLSBSZXR1cm5zIC0xIHdoZW4gdGhlIHJlYWwgcGFydCBvZiBgYWAgaXMgc21hbGxlciB0aGFuIHRoZSByZWFsIHBhcnQgb2YgYGJgXG4gICAqIC0gUmV0dXJucyAxIHdoZW4gdGhlIHJlYWwgcGFydHMgYXJlIGVxdWFsXG4gICAqICAgYW5kIHRoZSBpbWFnaW5hcnkgcGFydCBvZiBgYWAgaXMgbGFyZ2VyIHRoYW4gdGhlIGltYWdpbmFyeSBwYXJ0IG9mIGBiYFxuICAgKiAtIFJldHVybnMgLTEgd2hlbiB0aGUgcmVhbCBwYXJ0cyBhcmUgZXF1YWxcbiAgICogICBhbmQgdGhlIGltYWdpbmFyeSBwYXJ0IG9mIGBhYCBpcyBzbWFsbGVyIHRoYW4gdGhlIGltYWdpbmFyeSBwYXJ0IG9mIGBiYFxuICAgKiAtIFJldHVybnMgMCB3aGVuIGJvdGggcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnRzIGFyZSBlcXVhbC5cbiAgICpcbiAgICogQHBhcmFtcyB7Q29tcGxleH0gYVxuICAgKiBAcGFyYW1zIHtDb21wbGV4fSBiXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbXBhcmlzb24gcmVzdWx0OiAtMSwgMCwgb3IgMVxuICAgKi9cblxuXG4gIF9jb21wbGV4W1wiZGVmYXVsdFwiXS5jb21wYXJlID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICBpZiAoYS5yZSA+IGIucmUpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIGlmIChhLnJlIDwgYi5yZSkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIGlmIChhLmltID4gYi5pbSkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgaWYgKGEuaW0gPCBiLmltKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH07XG5cbiAgcmV0dXJuIF9jb21wbGV4W1wiZGVmYXVsdFwiXTtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNvbXBsZXhDbGFzcyA9IGNyZWF0ZUNvbXBsZXhDbGFzczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ29tcGxleCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgbmFtZSA9ICdjb21wbGV4JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ0NvbXBsZXgnXTtcbnZhciBjcmVhdGVDb21wbGV4ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIENvbXBsZXggPSBfcmVmLkNvbXBsZXg7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNvbXBsZXggdmFsdWUgb3IgY29udmVydCBhIHZhbHVlIHRvIGEgY29tcGxleCB2YWx1ZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5jb21wbGV4KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjcmVhdGVzIGEgY29tcGxleCB2YWx1ZSB3aXRoIHplcm9cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXMgcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnQuXG4gICAqICAgICBtYXRoLmNvbXBsZXgocmUgOiBudW1iZXIsIGltIDogc3RyaW5nKSAgIC8vIGNyZWF0ZXMgYSBjb21wbGV4IHZhbHVlIHdpdGggcHJvdmlkZWRcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdmFsdWVzIGZvciByZWFsIGFuZCBpbWFnaW5hcnkgcGFydC5cbiAgICogICAgIG1hdGguY29tcGxleChyZSA6IG51bWJlcikgICAgICAgICAgICAgICAgLy8gY3JlYXRlcyBhIGNvbXBsZXggdmFsdWUgd2l0aCBwcm92aWRlZFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWFsIHZhbHVlIGFuZCB6ZXJvIGltYWdpbmFyeSBwYXJ0LlxuICAgKiAgICAgbWF0aC5jb21wbGV4KGNvbXBsZXggOiBDb21wbGV4KSAgICAgICAgICAvLyBjbG9uZXMgdGhlIHByb3ZpZGVkIGNvbXBsZXggdmFsdWUuXG4gICAqICAgICBtYXRoLmNvbXBsZXgoYXJnIDogc3RyaW5nKSAgICAgICAgICAgICAgIC8vIHBhcnNlcyBhIHN0cmluZyBpbnRvIGEgY29tcGxleCB2YWx1ZS5cbiAgICogICAgIG1hdGguY29tcGxleChhcnJheSA6IEFycmF5KSAgICAgICAgICAgICAgLy8gY29udmVydHMgdGhlIGVsZW1lbnRzIG9mIHRoZSBhcnJheVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvciBtYXRyaXggZWxlbWVudCB3aXNlIGludG8gYVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb21wbGV4IHZhbHVlLlxuICAgKiAgICAgbWF0aC5jb21wbGV4KHtyZTogbnVtYmVyLCBpbTogbnVtYmVyfSkgICAvLyBjcmVhdGVzIGEgY29tcGxleCB2YWx1ZSB3aXRoIHByb3ZpZGVkXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHZhbHVlcyBmb3IgcmVhbCBhbiBpbWFnaW5hcnkgcGFydC5cbiAgICogICAgIG1hdGguY29tcGxleCh7cjogbnVtYmVyLCBwaGk6IG51bWJlcn0pICAgLy8gY3JlYXRlcyBhIGNvbXBsZXggdmFsdWUgd2l0aCBwcm92aWRlZFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwb2xhciBjb29yZGluYXRlc1xuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgY29uc3QgYSA9IG1hdGguY29tcGxleCgzLCAtNCkgICAgIC8vIGEgPSBDb21wbGV4IDMgLSA0aVxuICAgKiAgICBhLnJlID0gNSAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYSA9IENvbXBsZXggNSAtIDRpXG4gICAqICAgIGNvbnN0IGkgPSBhLmltICAgICAgICAgICAgICAgICAgICAvLyBOdW1iZXIgLTRcbiAgICogICAgY29uc3QgYiA9IG1hdGguY29tcGxleCgnMiArIDZpJykgIC8vIENvbXBsZXggMiArIDZpXG4gICAqICAgIGNvbnN0IGMgPSBtYXRoLmNvbXBsZXgoKSAgICAgICAgICAvLyBDb21wbGV4IDAgKyAwaVxuICAgKiAgICBjb25zdCBkID0gbWF0aC5hZGQoYSwgYikgICAgICAgICAgLy8gQ29tcGxleCA1ICsgMmlcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGJpZ251bWJlciwgYm9vbGVhbiwgaW5kZXgsIG1hdHJpeCwgbnVtYmVyLCBzdHJpbmcsIHVuaXRcbiAgICpcbiAgICogQHBhcmFtIHsqIHwgQXJyYXkgfCBNYXRyaXh9IFthcmdzXVxuICAgKiAgICAgICAgICAgIEFyZ3VtZW50cyBzcGVjaWZ5aW5nIHRoZSByZWFsIGFuZCBpbWFnaW5hcnkgcGFydCBvZiB0aGUgY29tcGxleCBudW1iZXJcbiAgICogQHJldHVybiB7Q29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBSZXR1cm5zIGEgY29tcGxleCB2YWx1ZVxuICAgKi9cbiAgdmFyIGNvbXBsZXggPSB0eXBlZCgnY29tcGxleCcsIHtcbiAgICAnJzogZnVuY3Rpb24gXygpIHtcbiAgICAgIHJldHVybiBDb21wbGV4LlpFUk87XG4gICAgfSxcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoeCwgMCk7XG4gICAgfSxcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIocmUsIGltKSB7XG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgocmUsIGltKTtcbiAgICB9LFxuICAgIC8vIFRPRE86IHRoaXMgc2lnbmF0dXJlIHNob3VsZCBiZSByZWR1bmRhbnRcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIocmUsIGltKSB7XG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgocmUudG9OdW1iZXIoKSwgaW0udG9OdW1iZXIoKSk7XG4gICAgfSxcbiAgICBGcmFjdGlvbjogZnVuY3Rpb24gRnJhY3Rpb24oeCkge1xuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgudmFsdWVPZigpLCAwKTtcbiAgICB9LFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHguY2xvbmUoKTtcbiAgICB9LFxuICAgIHN0cmluZzogZnVuY3Rpb24gc3RyaW5nKHgpIHtcbiAgICAgIHJldHVybiBDb21wbGV4KHgpOyAvLyBmb3IgZXhhbXBsZSAnMiArIDNpJ1xuICAgIH0sXG4gICAgXCJudWxsXCI6IGZ1bmN0aW9uIF9udWxsKHgpIHtcbiAgICAgIHJldHVybiBDb21wbGV4KDApO1xuICAgIH0sXG4gICAgT2JqZWN0OiBmdW5jdGlvbiBPYmplY3QoeCkge1xuICAgICAgaWYgKCdyZScgaW4geCAmJiAnaW0nIGluIHgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgucmUsIHguaW0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoJ3InIGluIHggJiYgJ3BoaScgaW4geCB8fCAnYWJzJyBpbiB4ICYmICdhcmcnIGluIHgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgpO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIG9iamVjdCB3aXRoIHByb3BlcnRpZXMgKHJlIGFuZCBpbSkgb3IgKHIgYW5kIHBoaSkgb3IgKGFicyBhbmQgYXJnKScpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBjb21wbGV4KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY29tcGxleDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb21wbGV4ID0gY3JlYXRlQ29tcGxleDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRnJhY3Rpb25DbGFzcyA9IHZvaWQgMDtcblxudmFyIF9mcmFjdGlvbiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcImZyYWN0aW9uLmpzXCIpKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG52YXIgbmFtZSA9ICdGcmFjdGlvbic7XG52YXIgZGVwZW5kZW5jaWVzID0gW107XG52YXIgY3JlYXRlRnJhY3Rpb25DbGFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uICgpIHtcbiAgLyoqXG4gICAqIEF0dGFjaCB0eXBlIGluZm9ybWF0aW9uXG4gICAqL1xuICBfZnJhY3Rpb25bXCJkZWZhdWx0XCJdLnByb3RvdHlwZS50eXBlID0gJ0ZyYWN0aW9uJztcbiAgX2ZyYWN0aW9uW1wiZGVmYXVsdFwiXS5wcm90b3R5cGUuaXNGcmFjdGlvbiA9IHRydWU7XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIGEgRnJhY3Rpb24gY29udGFpbmluZyB0eXBlIGluZm9ybWF0aW9uXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYSBKU09OIG9iamVjdCBzdHJ1Y3R1cmVkIGFzOlxuICAgKiAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiRnJhY3Rpb25cIiwgXCJuXCI6IDMsIFwiZFwiOiA4fWBcbiAgICovXG5cbiAgX2ZyYWN0aW9uW1wiZGVmYXVsdFwiXS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdGcmFjdGlvbicsXG4gICAgICBuOiB0aGlzLnMgKiB0aGlzLm4sXG4gICAgICBkOiB0aGlzLmRcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogSW5zdGFudGlhdGUgYSBGcmFjdGlvbiBmcm9tIGEgSlNPTiBvYmplY3RcbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIGEgSlNPTiBvYmplY3Qgc3RydWN0dXJlZCBhczpcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJGcmFjdGlvblwiLCBcIm5cIjogMywgXCJkXCI6IDh9YFxuICAgKiBAcmV0dXJuIHtCaWdOdW1iZXJ9XG4gICAqL1xuXG5cbiAgX2ZyYWN0aW9uW1wiZGVmYXVsdFwiXS5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgcmV0dXJuIG5ldyBfZnJhY3Rpb25bXCJkZWZhdWx0XCJdKGpzb24pO1xuICB9O1xuXG4gIHJldHVybiBfZnJhY3Rpb25bXCJkZWZhdWx0XCJdO1xufSwge1xuICBpc0NsYXNzOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRnJhY3Rpb25DbGFzcyA9IGNyZWF0ZUZyYWN0aW9uQ2xhc3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUZyYWN0aW9uID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBuYW1lID0gJ2ZyYWN0aW9uJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ0ZyYWN0aW9uJ107XG52YXIgY3JlYXRlRnJhY3Rpb24gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgRnJhY3Rpb24gPSBfcmVmLkZyYWN0aW9uO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBmcmFjdGlvbiBjb252ZXJ0IGEgdmFsdWUgdG8gYSBmcmFjdGlvbi5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKiAgICAgbWF0aC5mcmFjdGlvbihudW1lcmF0b3IsIGRlbm9taW5hdG9yKVxuICAgKiAgICAgbWF0aC5mcmFjdGlvbih7bjogbnVtZXJhdG9yLCBkOiBkZW5vbWluYXRvcn0pXG4gICAqICAgICBtYXRoLmZyYWN0aW9uKG1hdHJpeDogQXJyYXkgfCBNYXRyaXgpICAgICAgICAgVHVybiBhbGwgbWF0cml4IGVudHJpZXNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRvIGZyYWN0aW9uc1xuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGguZnJhY3Rpb24oMSwgMylcbiAgICogICAgIG1hdGguZnJhY3Rpb24oJzIvMycpXG4gICAqICAgICBtYXRoLmZyYWN0aW9uKHtuOiAyLCBkOiAzfSlcbiAgICogICAgIG1hdGguZnJhY3Rpb24oWzAuMiwgMC4yNSwgMS4yNV0pXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiaWdudW1iZXIsIG51bWJlciwgc3RyaW5nLCB1bml0XG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgc3RyaW5nIHwgRnJhY3Rpb24gfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0gW2FyZ3NdXG4gICAqICAgICAgICAgICAgQXJndW1lbnRzIHNwZWNpZnlpbmcgdGhlIG51bWVyYXRvciBhbmQgZGVub21pbmF0b3Igb2ZcbiAgICogICAgICAgICAgICB0aGUgZnJhY3Rpb25cbiAgICogQHJldHVybiB7RnJhY3Rpb24gfCBBcnJheSB8IE1hdHJpeH0gUmV0dXJucyBhIGZyYWN0aW9uXG4gICAqL1xuICB2YXIgZnJhY3Rpb24gPSB0eXBlZCgnZnJhY3Rpb24nLCB7XG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkge1xuICAgICAgaWYgKCFpc0Zpbml0ZSh4KSB8fCBpc05hTih4KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoeCArICcgY2Fubm90IGJlIHJlcHJlc2VudGVkIGFzIGEgZnJhY3Rpb24nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbih4KTtcbiAgICB9LFxuICAgIHN0cmluZzogZnVuY3Rpb24gc3RyaW5nKHgpIHtcbiAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24oeCk7XG4gICAgfSxcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIobnVtZXJhdG9yLCBkZW5vbWluYXRvcikge1xuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbihudW1lcmF0b3IsIGRlbm9taW5hdG9yKTtcbiAgICB9LFxuICAgIFwibnVsbFwiOiBmdW5jdGlvbiBfbnVsbCh4KSB7XG4gICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKDApO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbih4LnRvU3RyaW5nKCkpO1xuICAgIH0sXG4gICAgRnJhY3Rpb246IGZ1bmN0aW9uIEZyYWN0aW9uKHgpIHtcbiAgICAgIHJldHVybiB4OyAvLyBmcmFjdGlvbnMgYXJlIGltbXV0YWJsZVxuICAgIH0sXG4gICAgT2JqZWN0OiBmdW5jdGlvbiBPYmplY3QoeCkge1xuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbih4KTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgZnJhY3Rpb24pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBmcmFjdGlvbjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVGcmFjdGlvbiA9IGNyZWF0ZUZyYWN0aW9uOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVEZW5zZU1hdHJpeENsYXNzID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgX0RpbWVuc2lvbkVycm9yID0gcmVxdWlyZShcIi4uLy4uL2Vycm9yL0RpbWVuc2lvbkVycm9yXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnRGVuc2VNYXRyaXgnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnTWF0cml4J107XG52YXIgY3JlYXRlRGVuc2VNYXRyaXhDbGFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBNYXRyaXggPSBfcmVmLk1hdHJpeDtcblxuICAvKipcbiAgICogRGVuc2UgTWF0cml4IGltcGxlbWVudGF0aW9uLiBBIHJlZ3VsYXIsIGRlbnNlIG1hdHJpeCwgc3VwcG9ydGluZyBtdWx0aS1kaW1lbnNpb25hbCBtYXRyaWNlcy4gVGhpcyBpcyB0aGUgZGVmYXVsdCBtYXRyaXggdHlwZS5cbiAgICogQGNsYXNzIERlbnNlTWF0cml4XG4gICAqL1xuICBmdW5jdGlvbiBEZW5zZU1hdHJpeChkYXRhLCBkYXRhdHlwZSkge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBEZW5zZU1hdHJpeCkpIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGF0eXBlICYmICEoMCwgX2lzLmlzU3RyaW5nKShkYXRhdHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBkYXRhdHlwZTogJyArIGRhdGF0eXBlKTtcbiAgICB9XG5cbiAgICBpZiAoKDAsIF9pcy5pc01hdHJpeCkoZGF0YSkpIHtcbiAgICAgIC8vIGNoZWNrIGRhdGEgaXMgYSBEZW5zZU1hdHJpeFxuICAgICAgaWYgKGRhdGEudHlwZSA9PT0gJ0RlbnNlTWF0cml4Jykge1xuICAgICAgICAvLyBjbG9uZSBkYXRhICYgc2l6ZVxuICAgICAgICB0aGlzLl9kYXRhID0gKDAsIF9vYmplY3QuY2xvbmUpKGRhdGEuX2RhdGEpO1xuICAgICAgICB0aGlzLl9zaXplID0gKDAsIF9vYmplY3QuY2xvbmUpKGRhdGEuX3NpemUpO1xuICAgICAgICB0aGlzLl9kYXRhdHlwZSA9IGRhdGF0eXBlIHx8IGRhdGEuX2RhdGF0eXBlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gYnVpbGQgZGF0YSBmcm9tIGV4aXN0aW5nIG1hdHJpeFxuICAgICAgICB0aGlzLl9kYXRhID0gZGF0YS50b0FycmF5KCk7XG4gICAgICAgIHRoaXMuX3NpemUgPSBkYXRhLnNpemUoKTtcbiAgICAgICAgdGhpcy5fZGF0YXR5cGUgPSBkYXRhdHlwZSB8fCBkYXRhLl9kYXRhdHlwZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRhdGEgJiYgKDAsIF9pcy5pc0FycmF5KShkYXRhLmRhdGEpICYmICgwLCBfaXMuaXNBcnJheSkoZGF0YS5zaXplKSkge1xuICAgICAgLy8gaW5pdGlhbGl6ZSBmaWVsZHMgZnJvbSBKU09OIHJlcHJlc2VudGF0aW9uXG4gICAgICB0aGlzLl9kYXRhID0gZGF0YS5kYXRhO1xuICAgICAgdGhpcy5fc2l6ZSA9IGRhdGEuc2l6ZTsgLy8gdmVyaWZ5IHRoZSBkaW1lbnNpb25zIG9mIHRoZSBhcnJheVxuXG4gICAgICAoMCwgX2FycmF5LnZhbGlkYXRlKSh0aGlzLl9kYXRhLCB0aGlzLl9zaXplKTtcbiAgICAgIHRoaXMuX2RhdGF0eXBlID0gZGF0YXR5cGUgfHwgZGF0YS5kYXRhdHlwZTtcbiAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNBcnJheSkoZGF0YSkpIHtcbiAgICAgIC8vIHJlcGxhY2UgbmVzdGVkIE1hdHJpY2VzIHdpdGggQXJyYXlzXG4gICAgICB0aGlzLl9kYXRhID0gcHJlcHJvY2VzcyhkYXRhKTsgLy8gZ2V0IHRoZSBkaW1lbnNpb25zIG9mIHRoZSBhcnJheVxuXG4gICAgICB0aGlzLl9zaXplID0gKDAsIF9hcnJheS5hcnJheVNpemUpKHRoaXMuX2RhdGEpOyAvLyB2ZXJpZnkgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIGFycmF5LCBUT0RPOiBjb21wdXRlIHNpemUgd2hpbGUgcHJvY2Vzc2luZyBhcnJheVxuXG4gICAgICAoMCwgX2FycmF5LnZhbGlkYXRlKSh0aGlzLl9kYXRhLCB0aGlzLl9zaXplKTsgLy8gZGF0YSB0eXBlIHVua25vd25cblxuICAgICAgdGhpcy5fZGF0YXR5cGUgPSBkYXRhdHlwZTtcbiAgICB9IGVsc2UgaWYgKGRhdGEpIHtcbiAgICAgIC8vIHVuc3VwcG9ydGVkIHR5cGVcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vuc3VwcG9ydGVkIHR5cGUgb2YgZGF0YSAoJyArICgwLCBfaXMudHlwZU9mKShkYXRhKSArICcpJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIG5vdGhpbmcgcHJvdmlkZWRcbiAgICAgIHRoaXMuX2RhdGEgPSBbXTtcbiAgICAgIHRoaXMuX3NpemUgPSBbMF07XG4gICAgICB0aGlzLl9kYXRhdHlwZSA9IGRhdGF0eXBlO1xuICAgIH1cbiAgfVxuXG4gIERlbnNlTWF0cml4LnByb3RvdHlwZSA9IG5ldyBNYXRyaXgoKTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBEZW5zZU1hdHJpeFxuICAgKi9cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUuY3JlYXRlRGVuc2VNYXRyaXggPSBmdW5jdGlvbiAoZGF0YSwgZGF0YXR5cGUpIHtcbiAgICByZXR1cm4gbmV3IERlbnNlTWF0cml4KGRhdGEsIGRhdGF0eXBlKTtcbiAgfTtcbiAgLyoqXG4gICAqIEF0dGFjaCB0eXBlIGluZm9ybWF0aW9uXG4gICAqL1xuXG5cbiAgRGVuc2VNYXRyaXgucHJvdG90eXBlLnR5cGUgPSAnRGVuc2VNYXRyaXgnO1xuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUuaXNEZW5zZU1hdHJpeCA9IHRydWU7XG4gIC8qKlxuICAgKiBHZXQgdGhlIG1hdHJpeCB0eXBlXG4gICAqXG4gICAqIFVzYWdlOlxuICAgKiAgICBjb25zdCBtYXRyaXhUeXBlID0gbWF0cml4LmdldERhdGFUeXBlKCkgIC8vIHJldHJpZXZlcyB0aGUgbWF0cml4IHR5cGVcbiAgICpcbiAgICogQG1lbWJlck9mIERlbnNlTWF0cml4XG4gICAqIEByZXR1cm4ge3N0cmluZ30gICB0eXBlIGluZm9ybWF0aW9uOyBpZiBtdWx0aXBsZSB0eXBlcyBhcmUgZm91bmQgZnJvbSB0aGUgTWF0cml4LCBpdCB3aWxsIHJldHVybiBcIm1peGVkXCJcbiAgICovXG5cbiAgRGVuc2VNYXRyaXgucHJvdG90eXBlLmdldERhdGFUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAoMCwgX2FycmF5LmdldEFycmF5RGF0YVR5cGUpKHRoaXMuX2RhdGEsIF9pcy50eXBlT2YpO1xuICB9O1xuICAvKipcbiAgICogR2V0IHRoZSBzdG9yYWdlIGZvcm1hdCB1c2VkIGJ5IHRoZSBtYXRyaXguXG4gICAqXG4gICAqIFVzYWdlOlxuICAgKiAgICAgY29uc3QgZm9ybWF0ID0gbWF0cml4LnN0b3JhZ2UoKSAgLy8gcmV0cmlldmUgc3RvcmFnZSBmb3JtYXRcbiAgICpcbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEByZXR1cm4ge3N0cmluZ30gICAgICAgICAgIFRoZSBzdG9yYWdlIGZvcm1hdC5cbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUuc3RvcmFnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gJ2RlbnNlJztcbiAgfTtcbiAgLyoqXG4gICAqIEdldCB0aGUgZGF0YXR5cGUgb2YgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBtYXRyaXguXG4gICAqXG4gICAqIFVzYWdlOlxuICAgKiAgICAgY29uc3QgZm9ybWF0ID0gbWF0cml4LmRhdGF0eXBlKCkgICAvLyByZXRyaWV2ZSBtYXRyaXggZGF0YXR5cGVcbiAgICpcbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEByZXR1cm4ge3N0cmluZ30gICAgICAgICAgIFRoZSBkYXRhdHlwZS5cbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUuZGF0YXR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGF0eXBlO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IERlbnNlTWF0cml4XG4gICAqIEBtZW1iZXJvZiBEZW5zZU1hdHJpeFxuICAgKiBAcGFyYW0ge0FycmF5fSBkYXRhXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGF0YXR5cGVdXG4gICAqL1xuXG5cbiAgRGVuc2VNYXRyaXgucHJvdG90eXBlLmNyZWF0ZSA9IGZ1bmN0aW9uIChkYXRhLCBkYXRhdHlwZSkge1xuICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoZGF0YSwgZGF0YXR5cGUpO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgc3Vic2V0IG9mIHRoZSBtYXRyaXgsIG9yIHJlcGxhY2UgYSBzdWJzZXQgb2YgdGhlIG1hdHJpeC5cbiAgICpcbiAgICogVXNhZ2U6XG4gICAqICAgICBjb25zdCBzdWJzZXQgPSBtYXRyaXguc3Vic2V0KGluZGV4KSAgICAgICAgICAgICAgIC8vIHJldHJpZXZlIHN1YnNldFxuICAgKiAgICAgY29uc3QgdmFsdWUgPSBtYXRyaXguc3Vic2V0KGluZGV4LCByZXBsYWNlbWVudCkgICAvLyByZXBsYWNlIHN1YnNldFxuICAgKlxuICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXhcbiAgICogQHBhcmFtIHtJbmRleH0gaW5kZXhcbiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeCB8ICp9IFtyZXBsYWNlbWVudF1cbiAgICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlPTBdICAgICAgRGVmYXVsdCB2YWx1ZSwgZmlsbGVkIGluIG9uIG5ldyBlbnRyaWVzIHdoZW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hdHJpeCBpcyByZXNpemVkLiBJZiBub3QgcHJvdmlkZWQsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBtYXRyaXggZWxlbWVudHMgd2lsbCBiZSBmaWxsZWQgd2l0aCB6ZXJvcy5cbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUuc3Vic2V0ID0gZnVuY3Rpb24gKGluZGV4LCByZXBsYWNlbWVudCwgZGVmYXVsdFZhbHVlKSB7XG4gICAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHJldHVybiBfZ2V0KHRoaXMsIGluZGV4KTtcbiAgICAgIC8vIGludGVudGlvbmFsIGZhbGwgdGhyb3VnaFxuXG4gICAgICBjYXNlIDI6XG4gICAgICBjYXNlIDM6XG4gICAgICAgIHJldHVybiBfc2V0KHRoaXMsIGluZGV4LCByZXBsYWNlbWVudCwgZGVmYXVsdFZhbHVlKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzJyk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogR2V0IGEgc2luZ2xlIGVsZW1lbnQgZnJvbSB0aGUgbWF0cml4LlxuICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJbXX0gaW5kZXggICBaZXJvLWJhc2VkIGluZGV4XG4gICAqIEByZXR1cm4geyp9IHZhbHVlXG4gICAqL1xuXG5cbiAgRGVuc2VNYXRyaXgucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChpbmRleCkge1xuICAgIGlmICghKDAsIF9pcy5pc0FycmF5KShpbmRleCkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IGV4cGVjdGVkJyk7XG4gICAgfVxuXG4gICAgaWYgKGluZGV4Lmxlbmd0aCAhPT0gdGhpcy5fc2l6ZS5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3IoaW5kZXgubGVuZ3RoLCB0aGlzLl9zaXplLmxlbmd0aCk7XG4gICAgfSAvLyBjaGVjayBpbmRleFxuXG5cbiAgICBmb3IgKHZhciB4ID0gMDsgeCA8IGluZGV4Lmxlbmd0aDsgeCsrKSB7XG4gICAgICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKGluZGV4W3hdLCB0aGlzLl9zaXplW3hdKTtcbiAgICB9XG5cbiAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBpbmRleC5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICB2YXIgaW5kZXhJID0gaW5kZXhbaV07XG4gICAgICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKGluZGV4SSwgZGF0YS5sZW5ndGgpO1xuICAgICAgZGF0YSA9IGRhdGFbaW5kZXhJXTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfTtcbiAgLyoqXG4gICAqIFJlcGxhY2UgYSBzaW5nbGUgZWxlbWVudCBpbiB0aGUgbWF0cml4LlxuICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJbXX0gaW5kZXggICBaZXJvLWJhc2VkIGluZGV4XG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXSAgICAgICAgRGVmYXVsdCB2YWx1ZSwgZmlsbGVkIGluIG9uIG5ldyBlbnRyaWVzIHdoZW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hdHJpeCBpcyByZXNpemVkLiBJZiBub3QgcHJvdmlkZWQsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBtYXRyaXggZWxlbWVudHMgd2lsbCBiZSBsZWZ0IHVuZGVmaW5lZC5cbiAgICogQHJldHVybiB7RGVuc2VNYXRyaXh9IHNlbGZcbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGluZGV4LCB2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XG4gICAgaWYgKCEoMCwgX2lzLmlzQXJyYXkpKGluZGV4KSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgZXhwZWN0ZWQnKTtcbiAgICB9XG5cbiAgICBpZiAoaW5kZXgubGVuZ3RoIDwgdGhpcy5fc2l6ZS5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3IoaW5kZXgubGVuZ3RoLCB0aGlzLl9zaXplLmxlbmd0aCwgJzwnKTtcbiAgICB9XG5cbiAgICB2YXIgaSwgaWksIGluZGV4STsgLy8gZW5sYXJnZSBtYXRyaXggd2hlbiBuZWVkZWRcblxuICAgIHZhciBzaXplID0gaW5kZXgubWFwKGZ1bmN0aW9uIChpKSB7XG4gICAgICByZXR1cm4gaSArIDE7XG4gICAgfSk7XG5cbiAgICBfZml0KHRoaXMsIHNpemUsIGRlZmF1bHRWYWx1ZSk7IC8vIHRyYXZlcnNlIG92ZXIgdGhlIGRpbWVuc2lvbnNcblxuXG4gICAgdmFyIGRhdGEgPSB0aGlzLl9kYXRhO1xuXG4gICAgZm9yIChpID0gMCwgaWkgPSBpbmRleC5sZW5ndGggLSAxOyBpIDwgaWk7IGkrKykge1xuICAgICAgaW5kZXhJID0gaW5kZXhbaV07XG4gICAgICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKGluZGV4SSwgZGF0YS5sZW5ndGgpO1xuICAgICAgZGF0YSA9IGRhdGFbaW5kZXhJXTtcbiAgICB9IC8vIHNldCBuZXcgdmFsdWVcblxuXG4gICAgaW5kZXhJID0gaW5kZXhbaW5kZXgubGVuZ3RoIC0gMV07XG4gICAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShpbmRleEksIGRhdGEubGVuZ3RoKTtcbiAgICBkYXRhW2luZGV4SV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIHN1Ym1hdHJpeCBvZiB0aGlzIG1hdHJpeFxuICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXhcbiAgICogQHBhcmFtIHtEZW5zZU1hdHJpeH0gbWF0cml4XG4gICAqIEBwYXJhbSB7SW5kZXh9IGluZGV4ICAgWmVyby1iYXNlZCBpbmRleFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9nZXQobWF0cml4LCBpbmRleCkge1xuICAgIGlmICghKDAsIF9pcy5pc0luZGV4KShpbmRleCkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgaW5kZXgnKTtcbiAgICB9XG5cbiAgICB2YXIgaXNTY2FsYXIgPSBpbmRleC5pc1NjYWxhcigpO1xuXG4gICAgaWYgKGlzU2NhbGFyKSB7XG4gICAgICAvLyByZXR1cm4gYSBzY2FsYXJcbiAgICAgIHJldHVybiBtYXRyaXguZ2V0KGluZGV4Lm1pbigpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdmFsaWRhdGUgZGltZW5zaW9uc1xuICAgICAgdmFyIHNpemUgPSBpbmRleC5zaXplKCk7XG5cbiAgICAgIGlmIChzaXplLmxlbmd0aCAhPT0gbWF0cml4Ll9zaXplLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKHNpemUubGVuZ3RoLCBtYXRyaXguX3NpemUubGVuZ3RoKTtcbiAgICAgIH0gLy8gdmFsaWRhdGUgaWYgYW55IG9mIHRoZSByYW5nZXMgaW4gdGhlIGluZGV4IGlzIG91dCBvZiByYW5nZVxuXG5cbiAgICAgIHZhciBtaW4gPSBpbmRleC5taW4oKTtcbiAgICAgIHZhciBtYXggPSBpbmRleC5tYXgoKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gbWF0cml4Ll9zaXplLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShtaW5baV0sIG1hdHJpeC5fc2l6ZVtpXSk7XG4gICAgICAgICgwLCBfYXJyYXkudmFsaWRhdGVJbmRleCkobWF4W2ldLCBtYXRyaXguX3NpemVbaV0pO1xuICAgICAgfSAvLyByZXRyaWV2ZSBzdWJtYXRyaXhcbiAgICAgIC8vIFRPRE86IG1vcmUgZWZmaWNpZW50IHdoZW4gY3JlYXRpbmcgYW4gZW1wdHkgbWF0cml4IGFuZCBzZXR0aW5nIF9kYXRhIGFuZCBfc2l6ZSBtYW51YWxseVxuXG5cbiAgICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoX2dldFN1Ym1hdHJpeChtYXRyaXguX2RhdGEsIGluZGV4LCBzaXplLmxlbmd0aCwgMCksIG1hdHJpeC5fZGF0YXR5cGUpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmVjdXJzaXZlbHkgZ2V0IGEgc3VibWF0cml4IG9mIGEgbXVsdGkgZGltZW5zaW9uYWwgbWF0cml4LlxuICAgKiBJbmRleCBpcyBub3QgY2hlY2tlZCBmb3IgY29ycmVjdCBudW1iZXIgb3IgbGVuZ3RoIG9mIGRpbWVuc2lvbnMuXG4gICAqIEBtZW1iZXJvZiBEZW5zZU1hdHJpeFxuICAgKiBAcGFyYW0ge0FycmF5fSBkYXRhXG4gICAqIEBwYXJhbSB7SW5kZXh9IGluZGV4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkaW1zICAgVG90YWwgbnVtYmVyIG9mIGRpbWVuc2lvbnNcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRpbSAgICBDdXJyZW50IGRpbWVuc2lvblxuICAgKiBAcmV0dXJuIHtBcnJheX0gc3VibWF0cml4XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX2dldFN1Ym1hdHJpeChkYXRhLCBpbmRleCwgZGltcywgZGltKSB7XG4gICAgdmFyIGxhc3QgPSBkaW0gPT09IGRpbXMgLSAxO1xuICAgIHZhciByYW5nZSA9IGluZGV4LmRpbWVuc2lvbihkaW0pO1xuXG4gICAgaWYgKGxhc3QpIHtcbiAgICAgIHJldHVybiByYW5nZS5tYXAoZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShpLCBkYXRhLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiBkYXRhW2ldO1xuICAgICAgfSkudmFsdWVPZigpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmFuZ2UubWFwKGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICgwLCBfYXJyYXkudmFsaWRhdGVJbmRleCkoaSwgZGF0YS5sZW5ndGgpO1xuICAgICAgICB2YXIgY2hpbGQgPSBkYXRhW2ldO1xuICAgICAgICByZXR1cm4gX2dldFN1Ym1hdHJpeChjaGlsZCwgaW5kZXgsIGRpbXMsIGRpbSArIDEpO1xuICAgICAgfSkudmFsdWVPZigpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmVwbGFjZSBhIHN1Ym1hdHJpeCBpbiB0aGlzIG1hdHJpeFxuICAgKiBJbmRleGVzIGFyZSB6ZXJvLWJhc2VkLlxuICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXhcbiAgICogQHBhcmFtIHtEZW5zZU1hdHJpeH0gbWF0cml4XG4gICAqIEBwYXJhbSB7SW5kZXh9IGluZGV4XG4gICAqIEBwYXJhbSB7RGVuc2VNYXRyaXggfCBBcnJheSB8ICp9IHN1Ym1hdHJpeFxuICAgKiBAcGFyYW0geyp9IGRlZmF1bHRWYWx1ZSAgICAgICAgICBEZWZhdWx0IHZhbHVlLCBmaWxsZWQgaW4gb24gbmV3IGVudHJpZXMgd2hlblxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWF0cml4IGlzIHJlc2l6ZWQuXG4gICAqIEByZXR1cm4ge0RlbnNlTWF0cml4fSBtYXRyaXhcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBfc2V0KG1hdHJpeCwgaW5kZXgsIHN1Ym1hdHJpeCwgZGVmYXVsdFZhbHVlKSB7XG4gICAgaWYgKCFpbmRleCB8fCBpbmRleC5pc0luZGV4ICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGluZGV4Jyk7XG4gICAgfSAvLyBnZXQgaW5kZXggc2l6ZSBhbmQgY2hlY2sgd2hldGhlciB0aGUgaW5kZXggY29udGFpbnMgYSBzaW5nbGUgdmFsdWVcblxuXG4gICAgdmFyIGlTaXplID0gaW5kZXguc2l6ZSgpO1xuICAgIHZhciBpc1NjYWxhciA9IGluZGV4LmlzU2NhbGFyKCk7IC8vIGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiB0aGUgc3VibWF0cml4LCBhbmQgY29udmVydCBpdCBpbnRvIGFuIEFycmF5IGlmIG5lZWRlZFxuXG4gICAgdmFyIHNTaXplO1xuXG4gICAgaWYgKCgwLCBfaXMuaXNNYXRyaXgpKHN1Ym1hdHJpeCkpIHtcbiAgICAgIHNTaXplID0gc3VibWF0cml4LnNpemUoKTtcbiAgICAgIHN1Ym1hdHJpeCA9IHN1Ym1hdHJpeC52YWx1ZU9mKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNTaXplID0gKDAsIF9hcnJheS5hcnJheVNpemUpKHN1Ym1hdHJpeCk7XG4gICAgfVxuXG4gICAgaWYgKGlzU2NhbGFyKSB7XG4gICAgICAvLyBzZXQgYSBzY2FsYXJcbiAgICAgIC8vIGNoZWNrIHdoZXRoZXIgc3VibWF0cml4IGlzIGEgc2NhbGFyXG4gICAgICBpZiAoc1NpemUubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1NjYWxhciBleHBlY3RlZCcpO1xuICAgICAgfVxuXG4gICAgICBtYXRyaXguc2V0KGluZGV4Lm1pbigpLCBzdWJtYXRyaXgsIGRlZmF1bHRWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHNldCBhIHN1Ym1hdHJpeFxuICAgICAgLy8gdmFsaWRhdGUgZGltZW5zaW9uc1xuICAgICAgaWYgKGlTaXplLmxlbmd0aCA8IG1hdHJpeC5fc2l6ZS5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihpU2l6ZS5sZW5ndGgsIG1hdHJpeC5fc2l6ZS5sZW5ndGgsICc8Jyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzU2l6ZS5sZW5ndGggPCBpU2l6ZS5sZW5ndGgpIHtcbiAgICAgICAgLy8gY2FsY3VsYXRlIG51bWJlciBvZiBtaXNzaW5nIG91dGVyIGRpbWVuc2lvbnNcbiAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICB2YXIgb3V0ZXIgPSAwO1xuXG4gICAgICAgIHdoaWxlIChpU2l6ZVtpXSA9PT0gMSAmJiBzU2l6ZVtpXSA9PT0gMSkge1xuICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlIChpU2l6ZVtpXSA9PT0gMSkge1xuICAgICAgICAgIG91dGVyKys7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9IC8vIHVuc3F1ZWV6ZSBib3RoIG91dGVyIGFuZCBpbm5lciBkaW1lbnNpb25zXG5cblxuICAgICAgICBzdWJtYXRyaXggPSAoMCwgX2FycmF5LnVuc3F1ZWV6ZSkoc3VibWF0cml4LCBpU2l6ZS5sZW5ndGgsIG91dGVyLCBzU2l6ZSk7XG4gICAgICB9IC8vIGNoZWNrIHdoZXRoZXIgdGhlIHNpemUgb2YgdGhlIHN1Ym1hdHJpeCBtYXRjaGVzIHRoZSBpbmRleCBzaXplXG5cblxuICAgICAgaWYgKCEoMCwgX29iamVjdC5kZWVwU3RyaWN0RXF1YWwpKGlTaXplLCBzU2l6ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihpU2l6ZSwgc1NpemUsICc+Jyk7XG4gICAgICB9IC8vIGVubGFyZ2UgbWF0cml4IHdoZW4gbmVlZGVkXG5cblxuICAgICAgdmFyIHNpemUgPSBpbmRleC5tYXgoKS5tYXAoZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgcmV0dXJuIGkgKyAxO1xuICAgICAgfSk7XG5cbiAgICAgIF9maXQobWF0cml4LCBzaXplLCBkZWZhdWx0VmFsdWUpOyAvLyBpbnNlcnQgdGhlIHN1YiBtYXRyaXhcblxuXG4gICAgICB2YXIgZGltcyA9IGlTaXplLmxlbmd0aDtcbiAgICAgIHZhciBkaW0gPSAwO1xuXG4gICAgICBfc2V0U3VibWF0cml4KG1hdHJpeC5fZGF0YSwgaW5kZXgsIHN1Ym1hdHJpeCwgZGltcywgZGltKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWF0cml4O1xuICB9XG4gIC8qKlxuICAgKiBSZXBsYWNlIGEgc3VibWF0cml4IG9mIGEgbXVsdGkgZGltZW5zaW9uYWwgbWF0cml4LlxuICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXhcbiAgICogQHBhcmFtIHtBcnJheX0gZGF0YVxuICAgKiBAcGFyYW0ge0luZGV4fSBpbmRleFxuICAgKiBAcGFyYW0ge0FycmF5fSBzdWJtYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRpbXMgICBUb3RhbCBudW1iZXIgb2YgZGltZW5zaW9uc1xuICAgKiBAcGFyYW0ge251bWJlcn0gZGltXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX3NldFN1Ym1hdHJpeChkYXRhLCBpbmRleCwgc3VibWF0cml4LCBkaW1zLCBkaW0pIHtcbiAgICB2YXIgbGFzdCA9IGRpbSA9PT0gZGltcyAtIDE7XG4gICAgdmFyIHJhbmdlID0gaW5kZXguZGltZW5zaW9uKGRpbSk7XG5cbiAgICBpZiAobGFzdCkge1xuICAgICAgcmFuZ2UuZm9yRWFjaChmdW5jdGlvbiAoZGF0YUluZGV4LCBzdWJJbmRleCkge1xuICAgICAgICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKGRhdGFJbmRleCk7XG4gICAgICAgIGRhdGFbZGF0YUluZGV4XSA9IHN1Ym1hdHJpeFtzdWJJbmRleFswXV07XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmFuZ2UuZm9yRWFjaChmdW5jdGlvbiAoZGF0YUluZGV4LCBzdWJJbmRleCkge1xuICAgICAgICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKGRhdGFJbmRleCk7XG5cbiAgICAgICAgX3NldFN1Ym1hdHJpeChkYXRhW2RhdGFJbmRleF0sIGluZGV4LCBzdWJtYXRyaXhbc3ViSW5kZXhbMF1dLCBkaW1zLCBkaW0gKyAxKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmVzaXplIHRoZSBtYXRyaXggdG8gdGhlIGdpdmVuIHNpemUuIFJldHVybnMgYSBjb3B5IG9mIHRoZSBtYXRyaXggd2hlblxuICAgKiBgY29weT10cnVlYCwgb3RoZXJ3aXNlIHJldHVybiB0aGUgbWF0cml4IGl0c2VsZiAocmVzaXplIGluIHBsYWNlKS5cbiAgICpcbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEBwYXJhbSB7bnVtYmVyW119IHNpemUgICAgICAgICAgIFRoZSBuZXcgc2l6ZSB0aGUgbWF0cml4IHNob3VsZCBoYXZlLlxuICAgKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWU9MF0gICAgICBEZWZhdWx0IHZhbHVlLCBmaWxsZWQgaW4gb24gbmV3IGVudHJpZXMuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIG5vdCBwcm92aWRlZCwgdGhlIG1hdHJpeCBlbGVtZW50cyB3aWxsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIGZpbGxlZCB3aXRoIHplcm9zLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjb3B5XSAgICAgICAgICBSZXR1cm4gYSByZXNpemVkIGNvcHkgb2YgdGhlIG1hdHJpeFxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgICAgICBUaGUgcmVzaXplZCBtYXRyaXhcbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHNpemUsIGRlZmF1bHRWYWx1ZSwgY29weSkge1xuICAgIC8vIHZhbGlkYXRlIGFyZ3VtZW50c1xuICAgIGlmICghKDAsIF9pcy5pc0FycmF5KShzaXplKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgZXhwZWN0ZWQnKTtcbiAgICB9IC8vIG1hdHJpeCB0byByZXNpemVcblxuXG4gICAgdmFyIG0gPSBjb3B5ID8gdGhpcy5jbG9uZSgpIDogdGhpczsgLy8gcmVzaXplIG1hdHJpeFxuXG4gICAgcmV0dXJuIF9yZXNpemUobSwgc2l6ZSwgZGVmYXVsdFZhbHVlKTtcbiAgfTtcblxuICBmdW5jdGlvbiBfcmVzaXplKG1hdHJpeCwgc2l6ZSwgZGVmYXVsdFZhbHVlKSB7XG4gICAgLy8gY2hlY2sgc2l6ZVxuICAgIGlmIChzaXplLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gZmlyc3QgdmFsdWUgaW4gbWF0cml4XG4gICAgICB2YXIgdiA9IG1hdHJpeC5fZGF0YTsgLy8gZ28gZGVlcFxuXG4gICAgICB3aGlsZSAoKDAsIF9pcy5pc0FycmF5KSh2KSkge1xuICAgICAgICB2ID0gdlswXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHY7XG4gICAgfSAvLyByZXNpemUgbWF0cml4XG5cblxuICAgIG1hdHJpeC5fc2l6ZSA9IHNpemUuc2xpY2UoMCk7IC8vIGNvcHkgdGhlIGFycmF5XG5cbiAgICBtYXRyaXguX2RhdGEgPSAoMCwgX2FycmF5LnJlc2l6ZSkobWF0cml4Ll9kYXRhLCBtYXRyaXguX3NpemUsIGRlZmF1bHRWYWx1ZSk7IC8vIHJldHVybiBtYXRyaXhcblxuICAgIHJldHVybiBtYXRyaXg7XG4gIH1cbiAgLyoqXG4gICAqIFJlc2hhcGUgdGhlIG1hdHJpeCB0byB0aGUgZ2l2ZW4gc2l6ZS4gUmV0dXJucyBhIGNvcHkgb2YgdGhlIG1hdHJpeCB3aGVuXG4gICAqIGBjb3B5PXRydWVgLCBvdGhlcndpc2UgcmV0dXJuIHRoZSBtYXRyaXggaXRzZWxmIChyZXNoYXBlIGluIHBsYWNlKS5cbiAgICpcbiAgICogTk9URTogVGhpcyBtaWdodCBiZSBiZXR0ZXIgc3VpdGVkIHRvIGNvcHkgYnkgZGVmYXVsdCwgaW5zdGVhZCBvZiBtb2RpZnlpbmdcbiAgICogICAgICAgaW4gcGxhY2UuIEZvciBub3csIGl0IG9wZXJhdGVzIGluIHBsYWNlIHRvIHJlbWFpbiBjb25zaXN0ZW50IHdpdGhcbiAgICogICAgICAgcmVzaXplKCkuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBEZW5zZU1hdHJpeFxuICAgKiBAcGFyYW0ge251bWJlcltdfSBzaXplICAgICAgICAgICBUaGUgbmV3IHNpemUgdGhlIG1hdHJpeCBzaG91bGQgaGF2ZS5cbiAgICogQHBhcmFtIHtib29sZWFufSBbY29weV0gICAgICAgICAgUmV0dXJuIGEgcmVzaGFwZWQgY29weSBvZiB0aGUgbWF0cml4XG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgIFRoZSByZXNoYXBlZCBtYXRyaXhcbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUucmVzaGFwZSA9IGZ1bmN0aW9uIChzaXplLCBjb3B5KSB7XG4gICAgdmFyIG0gPSBjb3B5ID8gdGhpcy5jbG9uZSgpIDogdGhpcztcbiAgICBtLl9kYXRhID0gKDAsIF9hcnJheS5yZXNoYXBlKShtLl9kYXRhLCBzaXplKTtcbiAgICBtLl9zaXplID0gc2l6ZS5zbGljZSgwKTtcbiAgICByZXR1cm4gbTtcbiAgfTtcbiAgLyoqXG4gICAqIEVubGFyZ2UgdGhlIG1hdHJpeCB3aGVuIGl0IGlzIHNtYWxsZXIgdGhhbiBnaXZlbiBzaXplLlxuICAgKiBJZiB0aGUgbWF0cml4IGlzIGxhcmdlciBvciBlcXVhbCBzaXplZCwgbm90aGluZyBpcyBkb25lLlxuICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXhcbiAgICogQHBhcmFtIHtEZW5zZU1hdHJpeH0gbWF0cml4ICAgICAgICAgICBUaGUgbWF0cml4IHRvIGJlIHJlc2l6ZWRcbiAgICogQHBhcmFtIHtudW1iZXJbXX0gc2l6ZVxuICAgKiBAcGFyYW0geyp9IGRlZmF1bHRWYWx1ZSAgICAgICAgICBEZWZhdWx0IHZhbHVlLCBmaWxsZWQgaW4gb24gbmV3IGVudHJpZXMuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX2ZpdChtYXRyaXgsIHNpemUsIGRlZmF1bHRWYWx1ZSkge1xuICAgIHZhciAvLyBjb3B5IHRoZSBhcnJheVxuICAgIG5ld1NpemUgPSBtYXRyaXguX3NpemUuc2xpY2UoMCk7XG5cbiAgICB2YXIgY2hhbmdlZCA9IGZhbHNlOyAvLyBhZGQgZGltZW5zaW9ucyB3aGVuIG5lZWRlZFxuXG4gICAgd2hpbGUgKG5ld1NpemUubGVuZ3RoIDwgc2l6ZS5sZW5ndGgpIHtcbiAgICAgIG5ld1NpemUucHVzaCgwKTtcbiAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgIH0gLy8gZW5sYXJnZSBzaXplIHdoZW4gbmVlZGVkXG5cblxuICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHNpemUubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgaWYgKHNpemVbaV0gPiBuZXdTaXplW2ldKSB7XG4gICAgICAgIG5ld1NpemVbaV0gPSBzaXplW2ldO1xuICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgLy8gcmVzaXplIG9ubHkgd2hlbiBzaXplIGlzIGNoYW5nZWRcbiAgICAgIF9yZXNpemUobWF0cml4LCBuZXdTaXplLCBkZWZhdWx0VmFsdWUpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIGEgY2xvbmUgb2YgdGhlIG1hdHJpeFxuICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXhcbiAgICogQHJldHVybiB7RGVuc2VNYXRyaXh9IGNsb25lXG4gICAqL1xuXG5cbiAgRGVuc2VNYXRyaXgucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBtID0gbmV3IERlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6ICgwLCBfb2JqZWN0LmNsb25lKSh0aGlzLl9kYXRhKSxcbiAgICAgIHNpemU6ICgwLCBfb2JqZWN0LmNsb25lKSh0aGlzLl9zaXplKSxcbiAgICAgIGRhdGF0eXBlOiB0aGlzLl9kYXRhdHlwZVxuICAgIH0pO1xuICAgIHJldHVybiBtO1xuICB9O1xuICAvKipcbiAgICogUmV0cmlldmUgdGhlIHNpemUgb2YgdGhlIG1hdHJpeC5cbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEByZXR1cm5zIHtudW1iZXJbXX0gc2l6ZVxuICAgKi9cblxuXG4gIERlbnNlTWF0cml4LnByb3RvdHlwZS5zaXplID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLl9zaXplLnNsaWNlKDApOyAvLyByZXR1cm4gYSBjbG9uZSBvZiBfc2l6ZVxuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IG1hdHJpeCB3aXRoIHRoZSByZXN1bHRzIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBleGVjdXRlZCBvblxuICAgKiBlYWNoIGVudHJ5IG9mIHRoZSBtYXRyaXguXG4gICAqIEBtZW1iZXJvZiBEZW5zZU1hdHJpeFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiB0aGUgdmFsdWUgb2YgdGhlIGVsZW1lbnQsIHRoZSBpbmRleFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBlbGVtZW50LCBhbmQgdGhlIE1hdHJpeCBiZWluZyB0cmF2ZXJzZWQuXG4gICAqXG4gICAqIEByZXR1cm4ge0RlbnNlTWF0cml4fSBtYXRyaXhcbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgLy8gbWF0cml4IGluc3RhbmNlXG4gICAgdmFyIG1lID0gdGhpcztcblxuICAgIHZhciByZWN1cnNlID0gZnVuY3Rpb24gcmVjdXJzZSh2YWx1ZSwgaW5kZXgpIHtcbiAgICAgIGlmICgoMCwgX2lzLmlzQXJyYXkpKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWUubWFwKGZ1bmN0aW9uIChjaGlsZCwgaSkge1xuICAgICAgICAgIHJldHVybiByZWN1cnNlKGNoaWxkLCBpbmRleC5jb25jYXQoaSkpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayh2YWx1ZSwgaW5kZXgsIG1lKTtcbiAgICAgIH1cbiAgICB9OyAvLyBkZXRlcm1pbmUgdGhlIG5ldyBkYXRhdHlwZSB3aGVuIHRoZSBvcmlnaW5hbCBtYXRyaXggaGFzIGRhdGF0eXBlIGRlZmluZWRcbiAgICAvLyBUT0RPOiBzaG91bGQgYmUgZG9uZSBpbiBtYXRyaXggY29uc3RydWN0b3IgaW5zdGVhZFxuXG5cbiAgICB2YXIgZGF0YSA9IHJlY3Vyc2UodGhpcy5fZGF0YSwgW10pO1xuICAgIHZhciBkYXRhdHlwZSA9IHRoaXMuX2RhdGF0eXBlICE9PSB1bmRlZmluZWQgPyAoMCwgX2FycmF5LmdldEFycmF5RGF0YVR5cGUpKGRhdGEsIF9pcy50eXBlT2YpIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoZGF0YSwgZGF0YXR5cGUpO1xuICB9O1xuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZ1bmN0aW9uIG9uIGVhY2ggZW50cnkgb2YgdGhlIG1hdHJpeC5cbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGludm9rZWQgd2l0aCB0aHJlZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnM6IHRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudCwgdGhlIGluZGV4XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGVsZW1lbnQsIGFuZCB0aGUgTWF0cml4IGJlaW5nIHRyYXZlcnNlZC5cbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIC8vIG1hdHJpeCBpbnN0YW5jZVxuICAgIHZhciBtZSA9IHRoaXM7XG5cbiAgICB2YXIgcmVjdXJzZSA9IGZ1bmN0aW9uIHJlY3Vyc2UodmFsdWUsIGluZGV4KSB7XG4gICAgICBpZiAoKDAsIF9pcy5pc0FycmF5KSh2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUuZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQsIGkpIHtcbiAgICAgICAgICByZWN1cnNlKGNoaWxkLCBpbmRleC5jb25jYXQoaSkpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrKHZhbHVlLCBpbmRleCwgbWUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZWN1cnNlKHRoaXMuX2RhdGEsIFtdKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBBcnJheSB3aXRoIGEgY29weSBvZiB0aGUgZGF0YSBvZiB0aGUgRGVuc2VNYXRyaXhcbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEByZXR1cm5zIHtBcnJheX0gYXJyYXlcbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gKDAsIF9vYmplY3QuY2xvbmUpKHRoaXMuX2RhdGEpO1xuICB9O1xuICAvKipcbiAgICogR2V0IHRoZSBwcmltaXRpdmUgdmFsdWUgb2YgdGhlIERlbnNlTWF0cml4OiBhIG11bHRpZGltZW5zaW9uYWwgYXJyYXlcbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEByZXR1cm5zIHtBcnJheX0gYXJyYXlcbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUudmFsdWVPZiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWF0cml4LCB3aXRoIG9wdGlvbmFsIGZvcm1hdHRpbmcgb3B0aW9ucy5cbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEBwYXJhbSB7T2JqZWN0IHwgbnVtYmVyIHwgRnVuY3Rpb259IFtvcHRpb25zXSAgRm9ybWF0dGluZyBvcHRpb25zLiBTZWVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWIvdXRpbHMvbnVtYmVyOmZvcm1hdCBmb3IgYVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uIG9mIHRoZSBhdmFpbGFibGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gKDAsIF9zdHJpbmcuZm9ybWF0KSh0aGlzLl9kYXRhLCBvcHRpb25zKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWF0cml4XG4gICAqIEBtZW1iZXJvZiBEZW5zZU1hdHJpeFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICgwLCBfc3RyaW5nLmZvcm1hdCkodGhpcy5fZGF0YSk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtYXRyaXhcbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAqL1xuXG5cbiAgRGVuc2VNYXRyaXgucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnRGVuc2VNYXRyaXgnLFxuICAgICAgZGF0YTogdGhpcy5fZGF0YSxcbiAgICAgIHNpemU6IHRoaXMuX3NpemUsXG4gICAgICBkYXRhdHlwZTogdGhpcy5fZGF0YXR5cGVcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogR2V0IHRoZSBrdGggTWF0cml4IGRpYWdvbmFsLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXJ9IFtrPTBdICAgICBUaGUga3RoIGRpYWdvbmFsIHdoZXJlIHRoZSB2ZWN0b3Igd2lsbCByZXRyaWV2ZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtNYXRyaXh9ICAgICAgICAgICAgICAgICAgICAgVGhlIG1hdHJpeCB3aXRoIHRoZSBkaWFnb25hbCB2YWx1ZXMuXG4gICAqL1xuXG5cbiAgRGVuc2VNYXRyaXgucHJvdG90eXBlLmRpYWdvbmFsID0gZnVuY3Rpb24gKGspIHtcbiAgICAvLyB2YWxpZGF0ZSBrIGlmIGFueVxuICAgIGlmIChrKSB7XG4gICAgICAvLyBjb252ZXJ0IEJpZ051bWJlciB0byBhIG51bWJlclxuICAgICAgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKGspKSB7XG4gICAgICAgIGsgPSBrLnRvTnVtYmVyKCk7XG4gICAgICB9IC8vIGlzIG11c3QgYmUgYW4gaW50ZWdlclxuXG5cbiAgICAgIGlmICghKDAsIF9pcy5pc051bWJlcikoaykgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoaykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHBhcmFtZXRlciBrIG11c3QgYmUgYW4gaW50ZWdlciBudW1iZXInKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZGVmYXVsdCB2YWx1ZVxuICAgICAgayA9IDA7XG4gICAgfVxuXG4gICAgdmFyIGtTdXBlciA9IGsgPiAwID8gayA6IDA7XG4gICAgdmFyIGtTdWIgPSBrIDwgMCA/IC1rIDogMDsgLy8gcm93cyAmIGNvbHVtbnNcblxuICAgIHZhciByb3dzID0gdGhpcy5fc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IHRoaXMuX3NpemVbMV07IC8vIG51bWJlciBkaWFnb25hbCB2YWx1ZXNcblxuICAgIHZhciBuID0gTWF0aC5taW4ocm93cyAtIGtTdWIsIGNvbHVtbnMgLSBrU3VwZXIpOyAvLyB4IGlzIGEgbWF0cml4IGdldCBkaWFnb25hbCBmcm9tIG1hdHJpeFxuXG4gICAgdmFyIGRhdGEgPSBbXTsgLy8gbG9vcCByb3dzXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgZGF0YVtpXSA9IHRoaXMuX2RhdGFbaSArIGtTdWJdW2kgKyBrU3VwZXJdO1xuICAgIH0gLy8gY3JlYXRlIERlbnNlTWF0cml4XG5cblxuICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoe1xuICAgICAgZGF0YTogZGF0YSxcbiAgICAgIHNpemU6IFtuXSxcbiAgICAgIGRhdGF0eXBlOiB0aGlzLl9kYXRhdHlwZVxuICAgIH0pO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgZGlhZ29uYWwgbWF0cml4LlxuICAgKlxuICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXhcbiAgICogQHBhcmFtIHtBcnJheX0gc2l6ZSAgICAgICAgICAgICAgICAgICAgIFRoZSBtYXRyaXggc2l6ZS5cbiAgICogQHBhcmFtIHtudW1iZXIgfCBNYXRyaXggfCBBcnJheSB9IHZhbHVlIFRoZSB2YWx1ZXMgZm9yIHRoZSBkaWFnb25hbC5cbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXJ9IFtrPTBdICAgICAgIFRoZSBrdGggZGlhZ29uYWwgd2hlcmUgdGhlIHZlY3RvciB3aWxsIGJlIGZpbGxlZCBpbi5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtkZWZhdWx0VmFsdWVdICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBub24tZGlhZ29uYWxcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkYXRhdHlwZV0gICAgICAgICAgICAgIFRoZSBkYXRhdHlwZSBmb3IgdGhlIGRpYWdvbmFsXG4gICAqXG4gICAqIEByZXR1cm5zIHtEZW5zZU1hdHJpeH1cbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5kaWFnb25hbCA9IGZ1bmN0aW9uIChzaXplLCB2YWx1ZSwgaywgZGVmYXVsdFZhbHVlKSB7XG4gICAgaWYgKCEoMCwgX2lzLmlzQXJyYXkpKHNpemUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSBleHBlY3RlZCwgc2l6ZSBwYXJhbWV0ZXInKTtcbiAgICB9XG5cbiAgICBpZiAoc2l6ZS5sZW5ndGggIT09IDIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT25seSB0d28gZGltZW5zaW9ucyBtYXRyaXggYXJlIHN1cHBvcnRlZCcpO1xuICAgIH0gLy8gbWFwIHNpemUgJiB2YWxpZGF0ZVxuXG5cbiAgICBzaXplID0gc2l6ZS5tYXAoZnVuY3Rpb24gKHMpIHtcbiAgICAgIC8vIGNoZWNrIGl0IGlzIGEgYmlnIG51bWJlclxuICAgICAgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKHMpKSB7XG4gICAgICAgIC8vIGNvbnZlcnQgaXRcbiAgICAgICAgcyA9IHMudG9OdW1iZXIoKTtcbiAgICAgIH0gLy8gdmFsaWRhdGUgYXJndW1lbnRzXG5cblxuICAgICAgaWYgKCEoMCwgX2lzLmlzTnVtYmVyKShzKSB8fCAhKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShzKSB8fCBzIDwgMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NpemUgdmFsdWVzIG11c3QgYmUgcG9zaXRpdmUgaW50ZWdlcnMnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHM7XG4gICAgfSk7IC8vIHZhbGlkYXRlIGsgaWYgYW55XG5cbiAgICBpZiAoaykge1xuICAgICAgLy8gY29udmVydCBCaWdOdW1iZXIgdG8gYSBudW1iZXJcbiAgICAgIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShrKSkge1xuICAgICAgICBrID0gay50b051bWJlcigpO1xuICAgICAgfSAvLyBpcyBtdXN0IGJlIGFuIGludGVnZXJcblxuXG4gICAgICBpZiAoISgwLCBfaXMuaXNOdW1iZXIpKGspIHx8ICEoMCwgX251bWJlci5pc0ludGVnZXIpKGspKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBwYXJhbWV0ZXIgayBtdXN0IGJlIGFuIGludGVnZXIgbnVtYmVyJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGRlZmF1bHQgdmFsdWVcbiAgICAgIGsgPSAwO1xuICAgIH1cblxuICAgIHZhciBrU3VwZXIgPSBrID4gMCA/IGsgOiAwO1xuICAgIHZhciBrU3ViID0gayA8IDAgPyAtayA6IDA7IC8vIHJvd3MgYW5kIGNvbHVtbnNcblxuICAgIHZhciByb3dzID0gc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IHNpemVbMV07IC8vIG51bWJlciBvZiBub24temVybyBpdGVtc1xuXG4gICAgdmFyIG4gPSBNYXRoLm1pbihyb3dzIC0ga1N1YiwgY29sdW1ucyAtIGtTdXBlcik7IC8vIHZhbHVlIGV4dHJhY3Rpb24gZnVuY3Rpb25cblxuICAgIHZhciBfdmFsdWU7IC8vIGNoZWNrIHZhbHVlXG5cblxuICAgIGlmICgoMCwgX2lzLmlzQXJyYXkpKHZhbHVlKSkge1xuICAgICAgLy8gdmFsaWRhdGUgYXJyYXlcbiAgICAgIGlmICh2YWx1ZS5sZW5ndGggIT09IG4pIHtcbiAgICAgICAgLy8gbnVtYmVyIG9mIHZhbHVlcyBpbiBhcnJheSBtdXN0IGJlIG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHZhbHVlIGFycmF5IGxlbmd0aCcpO1xuICAgICAgfSAvLyBkZWZpbmUgZnVuY3Rpb25cblxuXG4gICAgICBfdmFsdWUgPSBmdW5jdGlvbiBfdmFsdWUoaSkge1xuICAgICAgICAvLyByZXR1cm4gdmFsdWUgQCBpXG4gICAgICAgIHJldHVybiB2YWx1ZVtpXTtcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzTWF0cml4KSh2YWx1ZSkpIHtcbiAgICAgIC8vIG1hdHJpeCBzaXplXG4gICAgICB2YXIgbXMgPSB2YWx1ZS5zaXplKCk7IC8vIHZhbGlkYXRlIG1hdHJpeFxuXG4gICAgICBpZiAobXMubGVuZ3RoICE9PSAxIHx8IG1zWzBdICE9PSBuKSB7XG4gICAgICAgIC8vIG51bWJlciBvZiB2YWx1ZXMgaW4gYXJyYXkgbXVzdCBiZSBuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBtYXRyaXggbGVuZ3RoJyk7XG4gICAgICB9IC8vIGRlZmluZSBmdW5jdGlvblxuXG5cbiAgICAgIF92YWx1ZSA9IGZ1bmN0aW9uIF92YWx1ZShpKSB7XG4gICAgICAgIC8vIHJldHVybiB2YWx1ZSBAIGlcbiAgICAgICAgcmV0dXJuIHZhbHVlLmdldChbaV0pO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZGVmaW5lIGZ1bmN0aW9uXG4gICAgICBfdmFsdWUgPSBmdW5jdGlvbiBfdmFsdWUoKSB7XG4gICAgICAgIC8vIHJldHVybiB2YWx1ZVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9O1xuICAgIH0gLy8gZGlzY292ZXIgZGVmYXVsdCB2YWx1ZSBpZiBuZWVkZWRcblxuXG4gICAgaWYgKCFkZWZhdWx0VmFsdWUpIHtcbiAgICAgIC8vIGNoZWNrIGZpcnN0IHZhbHVlIGluIGFycmF5XG4gICAgICBkZWZhdWx0VmFsdWUgPSAoMCwgX2lzLmlzQmlnTnVtYmVyKShfdmFsdWUoMCkpID8gX3ZhbHVlKDApLm11bCgwKSAvLyB0cmljayB0byBjcmVhdGUgYSBCaWdOdW1iZXIgd2l0aCB2YWx1ZSB6ZXJvXG4gICAgICA6IDA7XG4gICAgfSAvLyBlbXB0eSBhcnJheVxuXG5cbiAgICB2YXIgZGF0YSA9IFtdOyAvLyBjaGVjayB3ZSBuZWVkIHRvIHJlc2l6ZSBhcnJheVxuXG4gICAgaWYgKHNpemUubGVuZ3RoID4gMCkge1xuICAgICAgLy8gcmVzaXplIGFycmF5XG4gICAgICBkYXRhID0gKDAsIF9hcnJheS5yZXNpemUpKGRhdGEsIHNpemUsIGRlZmF1bHRWYWx1ZSk7IC8vIGZpbGwgZGlhZ29uYWxcblxuICAgICAgZm9yICh2YXIgZCA9IDA7IGQgPCBuOyBkKyspIHtcbiAgICAgICAgZGF0YVtkICsga1N1Yl1bZCArIGtTdXBlcl0gPSBfdmFsdWUoZCk7XG4gICAgICB9XG4gICAgfSAvLyBjcmVhdGUgRGVuc2VNYXRyaXhcblxuXG4gICAgcmV0dXJuIG5ldyBEZW5zZU1hdHJpeCh7XG4gICAgICBkYXRhOiBkYXRhLFxuICAgICAgc2l6ZTogW3Jvd3MsIGNvbHVtbnNdXG4gICAgfSk7XG4gIH07XG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIG1hdHJpeCBmcm9tIGEgSlNPTiBvYmplY3RcbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBqc29uICBBbiBvYmplY3Qgc3RydWN0dXJlZCBsaWtlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiRGVuc2VNYXRyaXhcIiwgZGF0YTogW10sIHNpemU6IFtdfWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge0RlbnNlTWF0cml4fVxuICAgKi9cblxuXG4gIERlbnNlTWF0cml4LmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICByZXR1cm4gbmV3IERlbnNlTWF0cml4KGpzb24pO1xuICB9O1xuICAvKipcbiAgICogU3dhcCByb3dzIGkgYW5kIGogaW4gTWF0cml4LlxuICAgKlxuICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGkgICAgICAgTWF0cml4IHJvdyBpbmRleCAxXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBqICAgICAgIE1hdHJpeCByb3cgaW5kZXggMlxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICBUaGUgbWF0cml4IHJlZmVyZW5jZVxuICAgKi9cblxuXG4gIERlbnNlTWF0cml4LnByb3RvdHlwZS5zd2FwUm93cyA9IGZ1bmN0aW9uIChpLCBqKSB7XG4gICAgLy8gY2hlY2sgaW5kZXhcbiAgICBpZiAoISgwLCBfaXMuaXNOdW1iZXIpKGkpIHx8ICEoMCwgX251bWJlci5pc0ludGVnZXIpKGkpIHx8ICEoMCwgX2lzLmlzTnVtYmVyKShqKSB8fCAhKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShqKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSb3cgaW5kZXggbXVzdCBiZSBwb3NpdGl2ZSBpbnRlZ2VycycpO1xuICAgIH0gLy8gY2hlY2sgZGltZW5zaW9uc1xuXG5cbiAgICBpZiAodGhpcy5fc2l6ZS5sZW5ndGggIT09IDIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT25seSB0d28gZGltZW5zaW9uYWwgbWF0cml4IGlzIHN1cHBvcnRlZCcpO1xuICAgIH0gLy8gdmFsaWRhdGUgaW5kZXhcblxuXG4gICAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShpLCB0aGlzLl9zaXplWzBdKTtcbiAgICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKGosIHRoaXMuX3NpemVbMF0pOyAvLyBzd2FwIHJvd3NcblxuICAgIERlbnNlTWF0cml4Ll9zd2FwUm93cyhpLCBqLCB0aGlzLl9kYXRhKTsgLy8gcmV0dXJuIGN1cnJlbnQgaW5zdGFuY2VcblxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBTd2FwIHJvd3MgaSBhbmQgaiBpbiBEZW5zZSBNYXRyaXggZGF0YSBzdHJ1Y3R1cmUuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpICAgICAgIE1hdHJpeCByb3cgaW5kZXggMVxuICAgKiBAcGFyYW0ge251bWJlcn0gaiAgICAgICBNYXRyaXggcm93IGluZGV4IDJcbiAgICogQHBhcmFtIHtBcnJheX0gZGF0YSAgICAgTWF0cml4IGRhdGFcbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5fc3dhcFJvd3MgPSBmdW5jdGlvbiAoaSwgaiwgZGF0YSkge1xuICAgIC8vIHN3YXAgdmFsdWVzIGkgPC0+IGpcbiAgICB2YXIgdmkgPSBkYXRhW2ldO1xuICAgIGRhdGFbaV0gPSBkYXRhW2pdO1xuICAgIGRhdGFbal0gPSB2aTtcbiAgfTtcbiAgLyoqXG4gICAqIFByZXByb2Nlc3MgZGF0YSwgd2hpY2ggY2FuIGJlIGFuIEFycmF5IG9yIERlbnNlTWF0cml4IHdpdGggbmVzdGVkIEFycmF5cyBhbmRcbiAgICogTWF0cmljZXMuIFJlcGxhY2VzIGFsbCBuZXN0ZWQgTWF0cmljZXMgd2l0aCBBcnJheXNcbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEBwYXJhbSB7QXJyYXl9IGRhdGFcbiAgICogQHJldHVybiB7QXJyYXl9IGRhdGFcbiAgICovXG5cblxuICBmdW5jdGlvbiBwcmVwcm9jZXNzKGRhdGEpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBkYXRhLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIHZhciBlbGVtID0gZGF0YVtpXTtcblxuICAgICAgaWYgKCgwLCBfaXMuaXNBcnJheSkoZWxlbSkpIHtcbiAgICAgICAgZGF0YVtpXSA9IHByZXByb2Nlc3MoZWxlbSk7XG4gICAgICB9IGVsc2UgaWYgKGVsZW0gJiYgZWxlbS5pc01hdHJpeCA9PT0gdHJ1ZSkge1xuICAgICAgICBkYXRhW2ldID0gcHJlcHJvY2VzcyhlbGVtLnZhbHVlT2YoKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICByZXR1cm4gRGVuc2VNYXRyaXg7XG59LCB7XG4gIGlzQ2xhc3M6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVEZW5zZU1hdHJpeENsYXNzID0gY3JlYXRlRGVuc2VNYXRyaXhDbGFzczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRmlib25hY2NpSGVhcENsYXNzID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnRmlib25hY2NpSGVhcCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydzbWFsbGVyJywgJ2xhcmdlciddO1xudmFyIGNyZWF0ZUZpYm9uYWNjaUhlYXBDbGFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBzbWFsbGVyID0gX3JlZi5zbWFsbGVyLFxuICAgICAgbGFyZ2VyID0gX3JlZi5sYXJnZXI7XG4gIHZhciBvbmVPdmVyTG9nUGhpID0gMS4wIC8gTWF0aC5sb2coKDEuMCArIE1hdGguc3FydCg1LjApKSAvIDIuMCk7XG4gIC8qKlxuICAgKiBGaWJvbmFjY2kgSGVhcCBpbXBsZW1lbnRhdGlvbiwgdXNlZCBpbnRlcmFsbHkgZm9yIE1hdHJpeCBtYXRoLlxuICAgKiBAY2xhc3MgRmlib25hY2NpSGVhcFxuICAgKiBAY29uc3RydWN0b3IgRmlib25hY2NpSGVhcFxuICAgKi9cblxuICBmdW5jdGlvbiBGaWJvbmFjY2lIZWFwKCkge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBGaWJvbmFjY2lIZWFwKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9IC8vIGluaXRpYWxpemUgZmllbGRzXG5cblxuICAgIHRoaXMuX21pbmltdW0gPSBudWxsO1xuICAgIHRoaXMuX3NpemUgPSAwO1xuICB9XG4gIC8qKlxuICAgKiBBdHRhY2ggdHlwZSBpbmZvcm1hdGlvblxuICAgKi9cblxuXG4gIEZpYm9uYWNjaUhlYXAucHJvdG90eXBlLnR5cGUgPSAnRmlib25hY2NpSGVhcCc7XG4gIEZpYm9uYWNjaUhlYXAucHJvdG90eXBlLmlzRmlib25hY2NpSGVhcCA9IHRydWU7XG4gIC8qKlxuICAgKiBJbnNlcnRzIGEgbmV3IGRhdGEgZWxlbWVudCBpbnRvIHRoZSBoZWFwLiBObyBoZWFwIGNvbnNvbGlkYXRpb24gaXNcbiAgICogcGVyZm9ybWVkIGF0IHRoaXMgdGltZSwgdGhlIG5ldyBub2RlIGlzIHNpbXBseSBpbnNlcnRlZCBpbnRvIHRoZSByb290XG4gICAqIGxpc3Qgb2YgdGhpcyBoZWFwLiBSdW5uaW5nIHRpbWU6IE8oMSkgYWN0dWFsLlxuICAgKiBAbWVtYmVyb2YgRmlib25hY2NpSGVhcFxuICAgKi9cblxuICBGaWJvbmFjY2lIZWFwLnByb3RvdHlwZS5pbnNlcnQgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIC8vIGNyZWF0ZSBub2RlXG4gICAgdmFyIG5vZGUgPSB7XG4gICAgICBrZXk6IGtleSxcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGRlZ3JlZTogMFxuICAgIH07IC8vIGNoZWNrIHdlIGhhdmUgYSBub2RlIGluIHRoZSBtaW5pbXVtXG5cbiAgICBpZiAodGhpcy5fbWluaW11bSkge1xuICAgICAgLy8gbWluaW11bSBub2RlXG4gICAgICB2YXIgbWluaW11bSA9IHRoaXMuX21pbmltdW07IC8vIHVwZGF0ZSBsZWZ0ICYgcmlnaHQgb2Ygbm9kZVxuXG4gICAgICBub2RlLmxlZnQgPSBtaW5pbXVtO1xuICAgICAgbm9kZS5yaWdodCA9IG1pbmltdW0ucmlnaHQ7XG4gICAgICBtaW5pbXVtLnJpZ2h0ID0gbm9kZTtcbiAgICAgIG5vZGUucmlnaHQubGVmdCA9IG5vZGU7IC8vIHVwZGF0ZSBtaW5pbXVtIG5vZGUgaW4gaGVhcCBpZiBuZWVkZWRcblxuICAgICAgaWYgKHNtYWxsZXIoa2V5LCBtaW5pbXVtLmtleSkpIHtcbiAgICAgICAgLy8gbm9kZSBoYXMgYSBzbWFsbGVyIGtleSwgdXNlIGl0IGFzIG1pbmltdW1cbiAgICAgICAgdGhpcy5fbWluaW11bSA9IG5vZGU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHNldCBsZWZ0ICYgcmlnaHRcbiAgICAgIG5vZGUubGVmdCA9IG5vZGU7XG4gICAgICBub2RlLnJpZ2h0ID0gbm9kZTsgLy8gdGhpcyBpcyB0aGUgZmlyc3Qgbm9kZVxuXG4gICAgICB0aGlzLl9taW5pbXVtID0gbm9kZTtcbiAgICB9IC8vIGluY3JlbWVudCBudW1iZXIgb2Ygbm9kZXMgaW4gaGVhcFxuXG5cbiAgICB0aGlzLl9zaXplKys7IC8vIHJldHVybiBub2RlXG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfTtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBub2RlcyBpbiBoZWFwLiBSdW5uaW5nIHRpbWU6IE8oMSkgYWN0dWFsLlxuICAgKiBAbWVtYmVyb2YgRmlib25hY2NpSGVhcFxuICAgKi9cblxuXG4gIEZpYm9uYWNjaUhlYXAucHJvdG90eXBlLnNpemUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NpemU7XG4gIH07XG4gIC8qKlxuICAgKiBSZW1vdmVzIGFsbCBlbGVtZW50cyBmcm9tIHRoaXMgaGVhcC5cbiAgICogQG1lbWJlcm9mIEZpYm9uYWNjaUhlYXBcbiAgICovXG5cblxuICBGaWJvbmFjY2lIZWFwLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLl9taW5pbXVtID0gbnVsbDtcbiAgICB0aGlzLl9zaXplID0gMDtcbiAgfTtcbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgaGVhcCBpcyBlbXB0eSwgb3RoZXJ3aXNlIGZhbHNlLlxuICAgKiBAbWVtYmVyb2YgRmlib25hY2NpSGVhcFxuICAgKi9cblxuXG4gIEZpYm9uYWNjaUhlYXAucHJvdG90eXBlLmlzRW1wdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NpemUgPT09IDA7XG4gIH07XG4gIC8qKlxuICAgKiBFeHRyYWN0cyB0aGUgbm9kZSB3aXRoIG1pbmltdW0ga2V5IGZyb20gaGVhcC4gQW1vcnRpemVkIHJ1bm5pbmdcbiAgICogdGltZTogTyhsb2cgbikuXG4gICAqIEBtZW1iZXJvZiBGaWJvbmFjY2lIZWFwXG4gICAqL1xuXG5cbiAgRmlib25hY2NpSGVhcC5wcm90b3R5cGUuZXh0cmFjdE1pbmltdW0gPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gbm9kZSB0byByZW1vdmVcbiAgICB2YXIgbm9kZSA9IHRoaXMuX21pbmltdW07IC8vIGNoZWNrIHdlIGhhdmUgYSBtaW5pbXVtXG5cbiAgICBpZiAobm9kZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfSAvLyBjdXJyZW50IG1pbmltdW1cblxuXG4gICAgdmFyIG1pbmltdW0gPSB0aGlzLl9taW5pbXVtOyAvLyBnZXQgbnVtYmVyIG9mIGNoaWxkcmVuXG5cbiAgICB2YXIgbnVtYmVyT2ZDaGlsZHJlbiA9IG5vZGUuZGVncmVlOyAvLyBwb2ludGVyIHRvIHRoZSBmaXJzdCBjaGlsZFxuXG4gICAgdmFyIHggPSBub2RlLmNoaWxkOyAvLyBmb3IgZWFjaCBjaGlsZCBvZiBub2RlIGRvLi4uXG5cbiAgICB3aGlsZSAobnVtYmVyT2ZDaGlsZHJlbiA+IDApIHtcbiAgICAgIC8vIHN0b3JlIG5vZGUgaW4gcmlnaHQgc2lkZVxuICAgICAgdmFyIHRlbXBSaWdodCA9IHgucmlnaHQ7IC8vIHJlbW92ZSB4IGZyb20gY2hpbGQgbGlzdFxuXG4gICAgICB4LmxlZnQucmlnaHQgPSB4LnJpZ2h0O1xuICAgICAgeC5yaWdodC5sZWZ0ID0geC5sZWZ0OyAvLyBhZGQgeCB0byByb290IGxpc3Qgb2YgaGVhcFxuXG4gICAgICB4LmxlZnQgPSBtaW5pbXVtO1xuICAgICAgeC5yaWdodCA9IG1pbmltdW0ucmlnaHQ7XG4gICAgICBtaW5pbXVtLnJpZ2h0ID0geDtcbiAgICAgIHgucmlnaHQubGVmdCA9IHg7IC8vIHNldCBQYXJlbnRbeF0gdG8gbnVsbFxuXG4gICAgICB4LnBhcmVudCA9IG51bGw7XG4gICAgICB4ID0gdGVtcFJpZ2h0O1xuICAgICAgbnVtYmVyT2ZDaGlsZHJlbi0tO1xuICAgIH0gLy8gcmVtb3ZlIG5vZGUgZnJvbSByb290IGxpc3Qgb2YgaGVhcFxuXG5cbiAgICBub2RlLmxlZnQucmlnaHQgPSBub2RlLnJpZ2h0O1xuICAgIG5vZGUucmlnaHQubGVmdCA9IG5vZGUubGVmdDsgLy8gdXBkYXRlIG1pbmltdW1cblxuICAgIGlmIChub2RlID09PSBub2RlLnJpZ2h0KSB7XG4gICAgICAvLyBlbXB0eVxuICAgICAgbWluaW11bSA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHVwZGF0ZSBtaW5pbXVtXG4gICAgICBtaW5pbXVtID0gbm9kZS5yaWdodDsgLy8gd2UgbmVlZCB0byB1cGRhdGUgdGhlIHBvaW50ZXIgdG8gdGhlIHJvb3Qgd2l0aCBtaW5pbXVtIGtleVxuXG4gICAgICBtaW5pbXVtID0gX2ZpbmRNaW5pbXVtTm9kZShtaW5pbXVtLCB0aGlzLl9zaXplKTtcbiAgICB9IC8vIGRlY3JlbWVudCBzaXplIG9mIGhlYXBcblxuXG4gICAgdGhpcy5fc2l6ZS0tOyAvLyB1cGRhdGUgbWluaW11bVxuXG4gICAgdGhpcy5fbWluaW11bSA9IG1pbmltdW07IC8vIHJldHVybiBub2RlXG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfTtcbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBub2RlIGZyb20gdGhlIGhlYXAgZ2l2ZW4gdGhlIHJlZmVyZW5jZSB0byB0aGUgbm9kZS4gVGhlIHRyZWVzXG4gICAqIGluIHRoZSBoZWFwIHdpbGwgYmUgY29uc29saWRhdGVkLCBpZiBuZWNlc3NhcnkuIFRoaXMgb3BlcmF0aW9uIG1heSBmYWlsXG4gICAqIHRvIHJlbW92ZSB0aGUgY29ycmVjdCBlbGVtZW50IGlmIHRoZXJlIGFyZSBub2RlcyB3aXRoIGtleSB2YWx1ZSAtSW5maW5pdHkuXG4gICAqIFJ1bm5pbmcgdGltZTogTyhsb2cgbikgYW1vcnRpemVkLlxuICAgKiBAbWVtYmVyb2YgRmlib25hY2NpSGVhcFxuICAgKi9cblxuXG4gIEZpYm9uYWNjaUhlYXAucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgLy8gZGVjcmVhc2Uga2V5IHZhbHVlXG4gICAgdGhpcy5fbWluaW11bSA9IF9kZWNyZWFzZUtleSh0aGlzLl9taW5pbXVtLCBub2RlLCAtMSk7IC8vIHJlbW92ZSB0aGUgc21hbGxlc3RcblxuICAgIHRoaXMuZXh0cmFjdE1pbmltdW0oKTtcbiAgfTtcbiAgLyoqXG4gICAqIERlY3JlYXNlcyB0aGUga2V5IHZhbHVlIGZvciBhIGhlYXAgbm9kZSwgZ2l2ZW4gdGhlIG5ldyB2YWx1ZSB0byB0YWtlIG9uLlxuICAgKiBUaGUgc3RydWN0dXJlIG9mIHRoZSBoZWFwIG1heSBiZSBjaGFuZ2VkIGFuZCB3aWxsIG5vdCBiZSBjb25zb2xpZGF0ZWQuXG4gICAqIFJ1bm5pbmcgdGltZTogTygxKSBhbW9ydGl6ZWQuXG4gICAqIEBtZW1iZXJvZiBGaWJvbmFjY2lIZWFwXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX2RlY3JlYXNlS2V5KG1pbmltdW0sIG5vZGUsIGtleSkge1xuICAgIC8vIHNldCBub2RlIGtleVxuICAgIG5vZGUua2V5ID0ga2V5OyAvLyBnZXQgcGFyZW50IG5vZGVcblxuICAgIHZhciBwYXJlbnQgPSBub2RlLnBhcmVudDtcblxuICAgIGlmIChwYXJlbnQgJiYgc21hbGxlcihub2RlLmtleSwgcGFyZW50LmtleSkpIHtcbiAgICAgIC8vIHJlbW92ZSBub2RlIGZyb20gcGFyZW50XG4gICAgICBfY3V0KG1pbmltdW0sIG5vZGUsIHBhcmVudCk7IC8vIHJlbW92ZSBhbGwgbm9kZXMgZnJvbSBwYXJlbnQgdG8gdGhlIHJvb3QgcGFyZW50XG5cblxuICAgICAgX2Nhc2NhZGluZ0N1dChtaW5pbXVtLCBwYXJlbnQpO1xuICAgIH0gLy8gdXBkYXRlIG1pbmltdW0gbm9kZSBpZiBuZWVkZWRcblxuXG4gICAgaWYgKHNtYWxsZXIobm9kZS5rZXksIG1pbmltdW0ua2V5KSkge1xuICAgICAgbWluaW11bSA9IG5vZGU7XG4gICAgfSAvLyByZXR1cm4gbWluaW11bVxuXG5cbiAgICByZXR1cm4gbWluaW11bTtcbiAgfVxuICAvKipcbiAgICogVGhlIHJldmVyc2Ugb2YgdGhlIGxpbmsgb3BlcmF0aW9uOiByZW1vdmVzIG5vZGUgZnJvbSB0aGUgY2hpbGQgbGlzdCBvZiBwYXJlbnQuXG4gICAqIFRoaXMgbWV0aG9kIGFzc3VtZXMgdGhhdCBtaW4gaXMgbm9uLW51bGwuIFJ1bm5pbmcgdGltZTogTygxKS5cbiAgICogQG1lbWJlcm9mIEZpYm9uYWNjaUhlYXBcbiAgICovXG5cblxuICBmdW5jdGlvbiBfY3V0KG1pbmltdW0sIG5vZGUsIHBhcmVudCkge1xuICAgIC8vIHJlbW92ZSBub2RlIGZyb20gcGFyZW50IGNoaWxkcmVuIGFuZCBkZWNyZW1lbnQgRGVncmVlW3BhcmVudF1cbiAgICBub2RlLmxlZnQucmlnaHQgPSBub2RlLnJpZ2h0O1xuICAgIG5vZGUucmlnaHQubGVmdCA9IG5vZGUubGVmdDtcbiAgICBwYXJlbnQuZGVncmVlLS07IC8vIHJlc2V0IHkuY2hpbGQgaWYgbmVjZXNzYXJ5XG5cbiAgICBpZiAocGFyZW50LmNoaWxkID09PSBub2RlKSB7XG4gICAgICBwYXJlbnQuY2hpbGQgPSBub2RlLnJpZ2h0O1xuICAgIH0gLy8gcmVtb3ZlIGNoaWxkIGlmIGRlZ3JlZSBpcyAwXG5cblxuICAgIGlmIChwYXJlbnQuZGVncmVlID09PSAwKSB7XG4gICAgICBwYXJlbnQuY2hpbGQgPSBudWxsO1xuICAgIH0gLy8gYWRkIG5vZGUgdG8gcm9vdCBsaXN0IG9mIGhlYXBcblxuXG4gICAgbm9kZS5sZWZ0ID0gbWluaW11bTtcbiAgICBub2RlLnJpZ2h0ID0gbWluaW11bS5yaWdodDtcbiAgICBtaW5pbXVtLnJpZ2h0ID0gbm9kZTtcbiAgICBub2RlLnJpZ2h0LmxlZnQgPSBub2RlOyAvLyBzZXQgcGFyZW50W25vZGVdIHRvIG51bGxcblxuICAgIG5vZGUucGFyZW50ID0gbnVsbDsgLy8gc2V0IG1hcmtbbm9kZV0gdG8gZmFsc2VcblxuICAgIG5vZGUubWFyayA9IGZhbHNlO1xuICB9XG4gIC8qKlxuICAgKiBQZXJmb3JtcyBhIGNhc2NhZGluZyBjdXQgb3BlcmF0aW9uLiBUaGlzIGN1dHMgbm9kZSBmcm9tIGl0cyBwYXJlbnQgYW5kIHRoZW5cbiAgICogZG9lcyB0aGUgc2FtZSBmb3IgaXRzIHBhcmVudCwgYW5kIHNvIG9uIHVwIHRoZSB0cmVlLlxuICAgKiBSdW5uaW5nIHRpbWU6IE8obG9nIG4pOyBPKDEpIGV4Y2x1ZGluZyB0aGUgcmVjdXJzaW9uLlxuICAgKiBAbWVtYmVyb2YgRmlib25hY2NpSGVhcFxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9jYXNjYWRpbmdDdXQobWluaW11bSwgbm9kZSkge1xuICAgIC8vIHN0b3JlIHBhcmVudCBub2RlXG4gICAgdmFyIHBhcmVudCA9IG5vZGUucGFyZW50OyAvLyBpZiB0aGVyZSdzIGEgcGFyZW50Li4uXG5cbiAgICBpZiAoIXBhcmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gaWYgbm9kZSBpcyB1bm1hcmtlZCwgc2V0IGl0IG1hcmtlZFxuXG5cbiAgICBpZiAoIW5vZGUubWFyaykge1xuICAgICAgbm9kZS5tYXJrID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaXQncyBtYXJrZWQsIGN1dCBpdCBmcm9tIHBhcmVudFxuICAgICAgX2N1dChtaW5pbXVtLCBub2RlLCBwYXJlbnQpOyAvLyBjdXQgaXRzIHBhcmVudCBhcyB3ZWxsXG5cblxuICAgICAgX2Nhc2NhZGluZ0N1dChwYXJlbnQpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogTWFrZSB0aGUgZmlyc3Qgbm9kZSBhIGNoaWxkIG9mIHRoZSBzZWNvbmQgb25lLiBSdW5uaW5nIHRpbWU6IE8oMSkgYWN0dWFsLlxuICAgKiBAbWVtYmVyb2YgRmlib25hY2NpSGVhcFxuICAgKi9cblxuXG4gIHZhciBfbGlua05vZGVzID0gZnVuY3Rpb24gX2xpbmtOb2Rlcyhub2RlLCBwYXJlbnQpIHtcbiAgICAvLyByZW1vdmUgbm9kZSBmcm9tIHJvb3QgbGlzdCBvZiBoZWFwXG4gICAgbm9kZS5sZWZ0LnJpZ2h0ID0gbm9kZS5yaWdodDtcbiAgICBub2RlLnJpZ2h0LmxlZnQgPSBub2RlLmxlZnQ7IC8vIG1ha2Ugbm9kZSBhIENoaWxkIG9mIHBhcmVudFxuXG4gICAgbm9kZS5wYXJlbnQgPSBwYXJlbnQ7XG5cbiAgICBpZiAoIXBhcmVudC5jaGlsZCkge1xuICAgICAgcGFyZW50LmNoaWxkID0gbm9kZTtcbiAgICAgIG5vZGUucmlnaHQgPSBub2RlO1xuICAgICAgbm9kZS5sZWZ0ID0gbm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgbm9kZS5sZWZ0ID0gcGFyZW50LmNoaWxkO1xuICAgICAgbm9kZS5yaWdodCA9IHBhcmVudC5jaGlsZC5yaWdodDtcbiAgICAgIHBhcmVudC5jaGlsZC5yaWdodCA9IG5vZGU7XG4gICAgICBub2RlLnJpZ2h0LmxlZnQgPSBub2RlO1xuICAgIH0gLy8gaW5jcmVhc2UgZGVncmVlW3BhcmVudF1cblxuXG4gICAgcGFyZW50LmRlZ3JlZSsrOyAvLyBzZXQgbWFya1tub2RlXSBmYWxzZVxuXG4gICAgbm9kZS5tYXJrID0gZmFsc2U7XG4gIH07XG5cbiAgZnVuY3Rpb24gX2ZpbmRNaW5pbXVtTm9kZShtaW5pbXVtLCBzaXplKSB7XG4gICAgLy8gdG8gZmluZCB0cmVlcyBvZiB0aGUgc2FtZSBkZWdyZWUgZWZmaWNpZW50bHkgd2UgdXNlIGFuIGFycmF5IG9mIGxlbmd0aCBPKGxvZyBuKSBpbiB3aGljaCB3ZSBrZWVwIGEgcG9pbnRlciB0byBvbmUgcm9vdCBvZiBlYWNoIGRlZ3JlZVxuICAgIHZhciBhcnJheVNpemUgPSBNYXRoLmZsb29yKE1hdGgubG9nKHNpemUpICogb25lT3ZlckxvZ1BoaSkgKyAxOyAvLyBjcmVhdGUgbGlzdCB3aXRoIGluaXRpYWwgY2FwYWNpdHlcblxuICAgIHZhciBhcnJheSA9IG5ldyBBcnJheShhcnJheVNpemUpOyAvLyBmaW5kIHRoZSBudW1iZXIgb2Ygcm9vdCBub2Rlcy5cblxuICAgIHZhciBudW1Sb290cyA9IDA7XG4gICAgdmFyIHggPSBtaW5pbXVtO1xuXG4gICAgaWYgKHgpIHtcbiAgICAgIG51bVJvb3RzKys7XG4gICAgICB4ID0geC5yaWdodDtcblxuICAgICAgd2hpbGUgKHggIT09IG1pbmltdW0pIHtcbiAgICAgICAgbnVtUm9vdHMrKztcbiAgICAgICAgeCA9IHgucmlnaHQ7XG4gICAgICB9XG4gICAgfSAvLyB2YXJzXG5cblxuICAgIHZhciB5OyAvLyBGb3IgZWFjaCBub2RlIGluIHJvb3QgbGlzdCBkby4uLlxuXG4gICAgd2hpbGUgKG51bVJvb3RzID4gMCkge1xuICAgICAgLy8gYWNjZXNzIHRoaXMgbm9kZSdzIGRlZ3JlZS4uXG4gICAgICB2YXIgZCA9IHguZGVncmVlOyAvLyBnZXQgbmV4dCBub2RlXG5cbiAgICAgIHZhciBuZXh0ID0geC5yaWdodDsgLy8gY2hlY2sgaWYgdGhlcmUgaXMgYSBub2RlIGFscmVhZHkgaW4gYXJyYXkgd2l0aCB0aGUgc2FtZSBkZWdyZWVcblxuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgLy8gZ2V0IG5vZGUgd2l0aCB0aGUgc2FtZSBkZWdyZWUgaXMgYW55XG4gICAgICAgIHkgPSBhcnJheVtkXTtcblxuICAgICAgICBpZiAoIXkpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSAvLyBtYWtlIG9uZSBub2RlIHdpdGggdGhlIHNhbWUgZGVncmVlIGEgY2hpbGQgb2YgdGhlIG90aGVyLCBkbyB0aGlzIGJhc2VkIG9uIHRoZSBrZXkgdmFsdWUuXG5cblxuICAgICAgICBpZiAobGFyZ2VyKHgua2V5LCB5LmtleSkpIHtcbiAgICAgICAgICB2YXIgdGVtcCA9IHk7XG4gICAgICAgICAgeSA9IHg7XG4gICAgICAgICAgeCA9IHRlbXA7XG4gICAgICAgIH0gLy8gbWFrZSB5IGEgY2hpbGQgb2YgeFxuXG5cbiAgICAgICAgX2xpbmtOb2Rlcyh5LCB4KTsgLy8gd2UgaGF2ZSBoYW5kbGVkIHRoaXMgZGVncmVlLCBnbyB0byBuZXh0IG9uZS5cblxuXG4gICAgICAgIGFycmF5W2RdID0gbnVsbDtcbiAgICAgICAgZCsrO1xuICAgICAgfSAvLyBzYXZlIHRoaXMgbm9kZSBmb3IgbGF0ZXIgd2hlbiB3ZSBtaWdodCBlbmNvdW50ZXIgYW5vdGhlciBvZiB0aGUgc2FtZSBkZWdyZWUuXG5cblxuICAgICAgYXJyYXlbZF0gPSB4OyAvLyBtb3ZlIGZvcndhcmQgdGhyb3VnaCBsaXN0LlxuXG4gICAgICB4ID0gbmV4dDtcbiAgICAgIG51bVJvb3RzLS07XG4gICAgfSAvLyBTZXQgbWluIHRvIG51bGwgKGVmZmVjdGl2ZWx5IGxvc2luZyB0aGUgcm9vdCBsaXN0KSBhbmQgcmVjb25zdHJ1Y3QgdGhlIHJvb3QgbGlzdCBmcm9tIHRoZSBhcnJheSBlbnRyaWVzIGluIGFycmF5W10uXG5cblxuICAgIG1pbmltdW0gPSBudWxsOyAvLyBsb29wIG5vZGVzIGluIGFycmF5XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5U2l6ZTsgaSsrKSB7XG4gICAgICAvLyBnZXQgY3VycmVudCBub2RlXG4gICAgICB5ID0gYXJyYXlbaV07XG5cbiAgICAgIGlmICgheSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gLy8gY2hlY2sgaWYgd2UgaGF2ZSBhIGxpbmtlZCBsaXN0XG5cblxuICAgICAgaWYgKG1pbmltdW0pIHtcbiAgICAgICAgLy8gRmlyc3QgcmVtb3ZlIG5vZGUgZnJvbSByb290IGxpc3QuXG4gICAgICAgIHkubGVmdC5yaWdodCA9IHkucmlnaHQ7XG4gICAgICAgIHkucmlnaHQubGVmdCA9IHkubGVmdDsgLy8gbm93IGFkZCB0byByb290IGxpc3QsIGFnYWluLlxuXG4gICAgICAgIHkubGVmdCA9IG1pbmltdW07XG4gICAgICAgIHkucmlnaHQgPSBtaW5pbXVtLnJpZ2h0O1xuICAgICAgICBtaW5pbXVtLnJpZ2h0ID0geTtcbiAgICAgICAgeS5yaWdodC5sZWZ0ID0geTsgLy8gY2hlY2sgaWYgdGhpcyBpcyBhIG5ldyBtaW4uXG5cbiAgICAgICAgaWYgKHNtYWxsZXIoeS5rZXksIG1pbmltdW0ua2V5KSkge1xuICAgICAgICAgIG1pbmltdW0gPSB5O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtaW5pbXVtID0geTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWluaW11bTtcbiAgfVxuXG4gIHJldHVybiBGaWJvbmFjY2lIZWFwO1xufSwge1xuICBpc0NsYXNzOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRmlib25hY2NpSGVhcENsYXNzID0gY3JlYXRlRmlib25hY2NpSGVhcENsYXNzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVJbW11dGFibGVEZW5zZU1hdHJpeENsYXNzID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdJbW11dGFibGVEZW5zZU1hdHJpeCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydzbWFsbGVyJywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlSW1tdXRhYmxlRGVuc2VNYXRyaXhDbGFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBzbWFsbGVyID0gX3JlZi5zbWFsbGVyLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuXG4gIGZ1bmN0aW9uIEltbXV0YWJsZURlbnNlTWF0cml4KGRhdGEsIGRhdGF0eXBlKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEltbXV0YWJsZURlbnNlTWF0cml4KSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YXR5cGUgJiYgISgwLCBfaXMuaXNTdHJpbmcpKGRhdGF0eXBlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGRhdGF0eXBlOiAnICsgZGF0YXR5cGUpO1xuICAgIH1cblxuICAgIGlmICgoMCwgX2lzLmlzTWF0cml4KShkYXRhKSB8fCAoMCwgX2lzLmlzQXJyYXkpKGRhdGEpKSB7XG4gICAgICAvLyB1c2UgRGVuc2VNYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHZhciBtYXRyaXggPSBuZXcgRGVuc2VNYXRyaXgoZGF0YSwgZGF0YXR5cGUpOyAvLyBpbnRlcm5hbCBzdHJ1Y3R1cmVzXG5cbiAgICAgIHRoaXMuX2RhdGEgPSBtYXRyaXguX2RhdGE7XG4gICAgICB0aGlzLl9zaXplID0gbWF0cml4Ll9zaXplO1xuICAgICAgdGhpcy5fZGF0YXR5cGUgPSBtYXRyaXguX2RhdGF0eXBlO1xuICAgICAgdGhpcy5fbWluID0gbnVsbDtcbiAgICAgIHRoaXMuX21heCA9IG51bGw7XG4gICAgfSBlbHNlIGlmIChkYXRhICYmICgwLCBfaXMuaXNBcnJheSkoZGF0YS5kYXRhKSAmJiAoMCwgX2lzLmlzQXJyYXkpKGRhdGEuc2l6ZSkpIHtcbiAgICAgIC8vIGluaXRpYWxpemUgZmllbGRzIGZyb20gSlNPTiByZXByZXNlbnRhdGlvblxuICAgICAgdGhpcy5fZGF0YSA9IGRhdGEuZGF0YTtcbiAgICAgIHRoaXMuX3NpemUgPSBkYXRhLnNpemU7XG4gICAgICB0aGlzLl9kYXRhdHlwZSA9IGRhdGEuZGF0YXR5cGU7XG4gICAgICB0aGlzLl9taW4gPSB0eXBlb2YgZGF0YS5taW4gIT09ICd1bmRlZmluZWQnID8gZGF0YS5taW4gOiBudWxsO1xuICAgICAgdGhpcy5fbWF4ID0gdHlwZW9mIGRhdGEubWF4ICE9PSAndW5kZWZpbmVkJyA/IGRhdGEubWF4IDogbnVsbDtcbiAgICB9IGVsc2UgaWYgKGRhdGEpIHtcbiAgICAgIC8vIHVuc3VwcG9ydGVkIHR5cGVcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vuc3VwcG9ydGVkIHR5cGUgb2YgZGF0YSAoJyArICgwLCBfaXMudHlwZU9mKShkYXRhKSArICcpJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIG5vdGhpbmcgcHJvdmlkZWRcbiAgICAgIHRoaXMuX2RhdGEgPSBbXTtcbiAgICAgIHRoaXMuX3NpemUgPSBbMF07XG4gICAgICB0aGlzLl9kYXRhdHlwZSA9IGRhdGF0eXBlO1xuICAgICAgdGhpcy5fbWluID0gbnVsbDtcbiAgICAgIHRoaXMuX21heCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgSW1tdXRhYmxlRGVuc2VNYXRyaXgucHJvdG90eXBlID0gbmV3IERlbnNlTWF0cml4KCk7XG4gIC8qKlxuICAgKiBBdHRhY2ggdHlwZSBpbmZvcm1hdGlvblxuICAgKi9cblxuICBJbW11dGFibGVEZW5zZU1hdHJpeC5wcm90b3R5cGUudHlwZSA9ICdJbW11dGFibGVEZW5zZU1hdHJpeCc7XG4gIEltbXV0YWJsZURlbnNlTWF0cml4LnByb3RvdHlwZS5pc0ltbXV0YWJsZURlbnNlTWF0cml4ID0gdHJ1ZTtcbiAgLyoqXG4gICAqIEdldCBhIHN1YnNldCBvZiB0aGUgbWF0cml4LCBvciByZXBsYWNlIGEgc3Vic2V0IG9mIHRoZSBtYXRyaXguXG4gICAqXG4gICAqIFVzYWdlOlxuICAgKiAgICAgY29uc3Qgc3Vic2V0ID0gbWF0cml4LnN1YnNldChpbmRleCkgICAgICAgICAgICAgICAvLyByZXRyaWV2ZSBzdWJzZXRcbiAgICogICAgIGNvbnN0IHZhbHVlID0gbWF0cml4LnN1YnNldChpbmRleCwgcmVwbGFjZW1lbnQpICAgLy8gcmVwbGFjZSBzdWJzZXRcbiAgICpcbiAgICogQHBhcmFtIHtJbmRleH0gaW5kZXhcbiAgICogQHBhcmFtIHtBcnJheSB8IEltbXV0YWJsZURlbnNlTWF0cml4IHwgKn0gW3JlcGxhY2VtZW50XVxuICAgKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWU9MF0gICAgICBEZWZhdWx0IHZhbHVlLCBmaWxsZWQgaW4gb24gbmV3IGVudHJpZXMgd2hlblxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWF0cml4IGlzIHJlc2l6ZWQuIElmIG5vdCBwcm92aWRlZCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IG1hdHJpeCBlbGVtZW50cyB3aWxsIGJlIGZpbGxlZCB3aXRoIHplcm9zLlxuICAgKi9cblxuICBJbW11dGFibGVEZW5zZU1hdHJpeC5wcm90b3R5cGUuc3Vic2V0ID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyB1c2UgYmFzZSBpbXBsZW1lbnRhdGlvblxuICAgICAgICAgIHZhciBtID0gRGVuc2VNYXRyaXgucHJvdG90eXBlLnN1YnNldC5jYWxsKHRoaXMsIGluZGV4KTsgLy8gY2hlY2sgcmVzdWx0IGlzIGEgbWF0cml4XG5cbiAgICAgICAgICBpZiAoKDAsIF9pcy5pc01hdHJpeCkobSkpIHtcbiAgICAgICAgICAgIC8vIHJldHVybiBpbW11dGFibGUgbWF0cml4XG4gICAgICAgICAgICByZXR1cm4gbmV3IEltbXV0YWJsZURlbnNlTWF0cml4KHtcbiAgICAgICAgICAgICAgZGF0YTogbS5fZGF0YSxcbiAgICAgICAgICAgICAgc2l6ZTogbS5fc2l6ZSxcbiAgICAgICAgICAgICAgZGF0YXR5cGU6IG0uX2RhdGF0eXBlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbTtcbiAgICAgICAgfVxuICAgICAgLy8gaW50ZW50aW9uYWwgZmFsbCB0aHJvdWdoXG5cbiAgICAgIGNhc2UgMjpcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIHNldCBzdWJzZXQgb24gYW4gSW1tdXRhYmxlIE1hdHJpeCBpbnN0YW5jZScpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ1dyb25nIG51bWJlciBvZiBhcmd1bWVudHMnKTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBSZXBsYWNlIGEgc2luZ2xlIGVsZW1lbnQgaW4gdGhlIG1hdHJpeC5cbiAgICogQHBhcmFtIHtOdW1iZXJbXX0gaW5kZXggICBaZXJvLWJhc2VkIGluZGV4XG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXSAgICAgICAgRGVmYXVsdCB2YWx1ZSwgZmlsbGVkIGluIG9uIG5ldyBlbnRyaWVzIHdoZW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hdHJpeCBpcyByZXNpemVkLiBJZiBub3QgcHJvdmlkZWQsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBtYXRyaXggZWxlbWVudHMgd2lsbCBiZSBsZWZ0IHVuZGVmaW5lZC5cbiAgICogQHJldHVybiB7SW1tdXRhYmxlRGVuc2VNYXRyaXh9IHNlbGZcbiAgICovXG5cblxuICBJbW11dGFibGVEZW5zZU1hdHJpeC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSBzZXQgb24gYW4gSW1tdXRhYmxlIE1hdHJpeCBpbnN0YW5jZScpO1xuICB9O1xuICAvKipcbiAgICogUmVzaXplIHRoZSBtYXRyaXggdG8gdGhlIGdpdmVuIHNpemUuIFJldHVybnMgYSBjb3B5IG9mIHRoZSBtYXRyaXggd2hlblxuICAgKiBgY29weT10cnVlYCwgb3RoZXJ3aXNlIHJldHVybiB0aGUgbWF0cml4IGl0c2VsZiAocmVzaXplIGluIHBsYWNlKS5cbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXJbXX0gc2l6ZSAgICAgICAgICAgVGhlIG5ldyBzaXplIHRoZSBtYXRyaXggc2hvdWxkIGhhdmUuXG4gICAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZT0wXSAgICAgIERlZmF1bHQgdmFsdWUsIGZpbGxlZCBpbiBvbiBuZXcgZW50cmllcy5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgbm90IHByb3ZpZGVkLCB0aGUgbWF0cml4IGVsZW1lbnRzIHdpbGxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgZmlsbGVkIHdpdGggemVyb3MuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NvcHldICAgICAgICAgIFJldHVybiBhIHJlc2l6ZWQgY29weSBvZiB0aGUgbWF0cml4XG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgIFRoZSByZXNpemVkIG1hdHJpeFxuICAgKi9cblxuXG4gIEltbXV0YWJsZURlbnNlTWF0cml4LnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIHJlc2l6ZSBvbiBhbiBJbW11dGFibGUgTWF0cml4IGluc3RhbmNlJyk7XG4gIH07XG4gIC8qKlxuICAgKiBEaXNhbGxvd3MgcmVzaGFwaW5nIGluIGZhdm9yIG9mIGltbXV0YWJpbGl0eS5cbiAgICpcbiAgICogQHRocm93cyB7RXJyb3J9IE9wZXJhdGlvbiBub3QgYWxsb3dlZFxuICAgKi9cblxuXG4gIEltbXV0YWJsZURlbnNlTWF0cml4LnByb3RvdHlwZS5yZXNoYXBlID0gZnVuY3Rpb24gKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSByZXNoYXBlIG9uIGFuIEltbXV0YWJsZSBNYXRyaXggaW5zdGFuY2UnKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoZSBtYXRyaXhcbiAgICogQHJldHVybiB7SW1tdXRhYmxlRGVuc2VNYXRyaXh9IGNsb25lXG4gICAqL1xuXG5cbiAgSW1tdXRhYmxlRGVuc2VNYXRyaXgucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgSW1tdXRhYmxlRGVuc2VNYXRyaXgoe1xuICAgICAgZGF0YTogKDAsIF9vYmplY3QuY2xvbmUpKHRoaXMuX2RhdGEpLFxuICAgICAgc2l6ZTogKDAsIF9vYmplY3QuY2xvbmUpKHRoaXMuX3NpemUpLFxuICAgICAgZGF0YXR5cGU6IHRoaXMuX2RhdGF0eXBlXG4gICAgfSk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtYXRyaXhcbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG5cblxuICBJbW11dGFibGVEZW5zZU1hdHJpeC5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdJbW11dGFibGVEZW5zZU1hdHJpeCcsXG4gICAgICBkYXRhOiB0aGlzLl9kYXRhLFxuICAgICAgc2l6ZTogdGhpcy5fc2l6ZSxcbiAgICAgIGRhdGF0eXBlOiB0aGlzLl9kYXRhdHlwZVxuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIG1hdHJpeCBmcm9tIGEgSlNPTiBvYmplY3RcbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIEFuIG9iamVjdCBzdHJ1Y3R1cmVkIGxpa2VcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJJbW11dGFibGVEZW5zZU1hdHJpeFwiLCBkYXRhOiBbXSwgc2l6ZTogW119YCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG1hdGhqcyBpcyBvcHRpb25hbFxuICAgKiBAcmV0dXJucyB7SW1tdXRhYmxlRGVuc2VNYXRyaXh9XG4gICAqL1xuXG5cbiAgSW1tdXRhYmxlRGVuc2VNYXRyaXguZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBuZXcgSW1tdXRhYmxlRGVuc2VNYXRyaXgoanNvbik7XG4gIH07XG4gIC8qKlxuICAgKiBTd2FwIHJvd3MgaSBhbmQgaiBpbiBNYXRyaXguXG4gICAqXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBpICAgICAgIE1hdHJpeCByb3cgaW5kZXggMVxuICAgKiBAcGFyYW0ge051bWJlcn0gaiAgICAgICBNYXRyaXggcm93IGluZGV4IDJcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgVGhlIG1hdHJpeCByZWZlcmVuY2VcbiAgICovXG5cblxuICBJbW11dGFibGVEZW5zZU1hdHJpeC5wcm90b3R5cGUuc3dhcFJvd3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIHN3YXBSb3dzIG9uIGFuIEltbXV0YWJsZSBNYXRyaXggaW5zdGFuY2UnKTtcbiAgfTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgbWluaW11bSB2YWx1ZSBpbiB0aGUgc2V0XG4gICAqIEByZXR1cm4ge051bWJlciB8IHVuZGVmaW5lZH0gbWluXG4gICAqL1xuXG5cbiAgSW1tdXRhYmxlRGVuc2VNYXRyaXgucHJvdG90eXBlLm1pbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBjaGVjayBtaW4gaGFzIGJlZW4gY2FsY3VsYXRlZCBiZWZvcmVcbiAgICBpZiAodGhpcy5fbWluID09PSBudWxsKSB7XG4gICAgICAvLyBtaW5pbXVtXG4gICAgICB2YXIgbSA9IG51bGw7IC8vIGNvbXB1dGUgbWluXG5cbiAgICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbiAodikge1xuICAgICAgICBpZiAobSA9PT0gbnVsbCB8fCBzbWFsbGVyKHYsIG0pKSB7XG4gICAgICAgICAgbSA9IHY7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5fbWluID0gbSAhPT0gbnVsbCA/IG0gOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX21pbjtcbiAgfTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgbWF4aW11bSB2YWx1ZSBpbiB0aGUgc2V0XG4gICAqIEByZXR1cm4ge051bWJlciB8IHVuZGVmaW5lZH0gbWF4XG4gICAqL1xuXG5cbiAgSW1tdXRhYmxlRGVuc2VNYXRyaXgucHJvdG90eXBlLm1heCA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBjaGVjayBtYXggaGFzIGJlZW4gY2FsY3VsYXRlZCBiZWZvcmVcbiAgICBpZiAodGhpcy5fbWF4ID09PSBudWxsKSB7XG4gICAgICAvLyBtYXhpbXVtXG4gICAgICB2YXIgbSA9IG51bGw7IC8vIGNvbXB1dGUgbWF4XG5cbiAgICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbiAodikge1xuICAgICAgICBpZiAobSA9PT0gbnVsbCB8fCBzbWFsbGVyKG0sIHYpKSB7XG4gICAgICAgICAgbSA9IHY7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5fbWF4ID0gbSAhPT0gbnVsbCA/IG0gOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX21heDtcbiAgfTtcblxuICByZXR1cm4gSW1tdXRhYmxlRGVuc2VNYXRyaXg7XG59LCB7XG4gIGlzQ2xhc3M6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVJbW11dGFibGVEZW5zZU1hdHJpeENsYXNzID0gY3JlYXRlSW1tdXRhYmxlRGVuc2VNYXRyaXhDbGFzczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTWF0cml4Q2xhc3MgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdNYXRyaXgnO1xudmFyIGRlcGVuZGVuY2llcyA9IFtdO1xudmFyIGNyZWF0ZU1hdHJpeENsYXNzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKCkge1xuICAvKipcbiAgICogQGNvbnN0cnVjdG9yIE1hdHJpeFxuICAgKlxuICAgKiBBIE1hdHJpeCBpcyBhIHdyYXBwZXIgYXJvdW5kIGFuIEFycmF5LiBBIG1hdHJpeCBjYW4gaG9sZCBhIG11bHRpIGRpbWVuc2lvbmFsXG4gICAqIGFycmF5LiBBIG1hdHJpeCBjYW4gYmUgY29uc3RydWN0ZWQgYXM6XG4gICAqXG4gICAqICAgICBsZXQgbWF0cml4ID0gbWF0aC5tYXRyaXgoZGF0YSlcbiAgICpcbiAgICogTWF0cml4IGNvbnRhaW5zIHRoZSBmdW5jdGlvbnMgdG8gcmVzaXplLCBnZXQgYW5kIHNldCB2YWx1ZXMsIGdldCB0aGUgc2l6ZSxcbiAgICogY2xvbmUgdGhlIG1hdHJpeCBhbmQgdG8gY29udmVydCB0aGUgbWF0cml4IHRvIGEgdmVjdG9yLCBhcnJheSwgb3Igc2NhbGFyLlxuICAgKiBGdXJ0aGVybW9yZSwgb25lIGNhbiBpdGVyYXRlIG92ZXIgdGhlIG1hdHJpeCB1c2luZyBtYXAgYW5kIGZvckVhY2guXG4gICAqIFRoZSBpbnRlcm5hbCBBcnJheSBvZiB0aGUgTWF0cml4IGNhbiBiZSBhY2Nlc3NlZCB1c2luZyB0aGUgZnVuY3Rpb24gdmFsdWVPZi5cbiAgICpcbiAgICogRXhhbXBsZSB1c2FnZTpcbiAgICpcbiAgICogICAgIGxldCBtYXRyaXggPSBtYXRoLm1hdHJpeChbWzEsIDJdLCBbMywgNF1dKVxuICAgKiAgICAgbWF0aXguc2l6ZSgpICAgICAgICAgICAgICAvLyBbMiwgMl1cbiAgICogICAgIG1hdHJpeC5yZXNpemUoWzMsIDJdLCA1KVxuICAgKiAgICAgbWF0cml4LnZhbHVlT2YoKSAgICAgICAgICAvLyBbWzEsIDJdLCBbMywgNF0sIFs1LCA1XV1cbiAgICogICAgIG1hdHJpeC5zdWJzZXQoWzEsMl0pICAgICAgIC8vIDMgKGluZGV4ZXMgYXJlIHplcm8tYmFzZWQpXG4gICAqXG4gICAqL1xuICBmdW5jdGlvbiBNYXRyaXgoKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIE1hdHJpeCkpIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBBdHRhY2ggdHlwZSBpbmZvcm1hdGlvblxuICAgKi9cblxuXG4gIE1hdHJpeC5wcm90b3R5cGUudHlwZSA9ICdNYXRyaXgnO1xuICBNYXRyaXgucHJvdG90eXBlLmlzTWF0cml4ID0gdHJ1ZTtcbiAgLyoqXG4gICAqIEdldCB0aGUgTWF0cml4IHN0b3JhZ2UgY29uc3RydWN0b3IgZm9yIHRoZSBnaXZlbiBmb3JtYXQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXQgICAgICAgVGhlIE1hdHJpeCBzdG9yYWdlIGZvcm1hdC5cbiAgICpcbiAgICogQHJldHVybiB7RnVuY3Rpb259ICAgICAgICAgICBUaGUgTWF0cml4IHN0b3JhZ2UgY29uc3RydWN0b3IuXG4gICAqL1xuXG4gIE1hdHJpeC5zdG9yYWdlID0gZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgIC8vIFRPRE86IGRlcHJlY2F0ZWQgc2luY2UgdjYuMC4wLiBDbGVhbiB1cCBzb21lIGRheVxuICAgIHRocm93IG5ldyBFcnJvcignTWF0cml4LnN0b3JhZ2UgaXMgZGVwcmVjYXRlZCBzaW5jZSB2Ni4wLjAuICcgKyAnVXNlIHRoZSBmYWN0b3J5IGZ1bmN0aW9uIG1hdGgubWF0cml4IGluc3RlYWQuJyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgdGhlIHN0b3JhZ2UgZm9ybWF0IHVzZWQgYnkgdGhlIG1hdHJpeC5cbiAgICpcbiAgICogVXNhZ2U6XG4gICAqICAgICBjb25zdCBmb3JtYXQgPSBtYXRyaXguc3RvcmFnZSgpICAgLy8gcmV0cmlldmUgc3RvcmFnZSBmb3JtYXRcbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfSAgICAgICAgICAgVGhlIHN0b3JhZ2UgZm9ybWF0LlxuICAgKi9cblxuXG4gIE1hdHJpeC5wcm90b3R5cGUuc3RvcmFnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGVhY2ggb2YgdGhlIE1hdHJpeCBpbXBsZW1lbnRhdGlvbnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBpbnZva2Ugc3RvcmFnZSBvbiBhIE1hdHJpeCBpbnRlcmZhY2UnKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCB0aGUgZGF0YXR5cGUgb2YgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBtYXRyaXguXG4gICAqXG4gICAqIFVzYWdlOlxuICAgKiAgICAgY29uc3QgZm9ybWF0ID0gbWF0cml4LmRhdGF0eXBlKCkgICAgLy8gcmV0cmlldmUgbWF0cml4IGRhdGF0eXBlXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ30gICAgICAgICAgIFRoZSBkYXRhdHlwZS5cbiAgICovXG5cblxuICBNYXRyaXgucHJvdG90eXBlLmRhdGF0eXBlID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBvZiB0aGUgTWF0cml4IGltcGxlbWVudGF0aW9uc1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSBkYXRhdHlwZSBvbiBhIE1hdHJpeCBpbnRlcmZhY2UnKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBNYXRyaXggV2l0aCB0aGUgdHlwZSBvZiB0aGUgY3VycmVudCBtYXRyaXggaW5zdGFuY2VcbiAgICogQHBhcmFtIHtBcnJheSB8IE9iamVjdH0gZGF0YVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2RhdGF0eXBlXVxuICAgKi9cblxuXG4gIE1hdHJpeC5wcm90b3R5cGUuY3JlYXRlID0gZnVuY3Rpb24gKGRhdGEsIGRhdGF0eXBlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIGNyZWF0ZSBvbiBhIE1hdHJpeCBpbnRlcmZhY2UnKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIHN1YnNldCBvZiB0aGUgbWF0cml4LCBvciByZXBsYWNlIGEgc3Vic2V0IG9mIHRoZSBtYXRyaXguXG4gICAqXG4gICAqIFVzYWdlOlxuICAgKiAgICAgY29uc3Qgc3Vic2V0ID0gbWF0cml4LnN1YnNldChpbmRleCkgICAgICAgICAgICAgICAvLyByZXRyaWV2ZSBzdWJzZXRcbiAgICogICAgIGNvbnN0IHZhbHVlID0gbWF0cml4LnN1YnNldChpbmRleCwgcmVwbGFjZW1lbnQpICAgLy8gcmVwbGFjZSBzdWJzZXRcbiAgICpcbiAgICogQHBhcmFtIHtJbmRleH0gaW5kZXhcbiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeCB8ICp9IFtyZXBsYWNlbWVudF1cbiAgICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlPTBdICAgICAgRGVmYXVsdCB2YWx1ZSwgZmlsbGVkIGluIG9uIG5ldyBlbnRyaWVzIHdoZW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hdHJpeCBpcyByZXNpemVkLiBJZiBub3QgcHJvdmlkZWQsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBtYXRyaXggZWxlbWVudHMgd2lsbCBiZSBmaWxsZWQgd2l0aCB6ZXJvcy5cbiAgICovXG5cblxuICBNYXRyaXgucHJvdG90eXBlLnN1YnNldCA9IGZ1bmN0aW9uIChpbmRleCwgcmVwbGFjZW1lbnQsIGRlZmF1bHRWYWx1ZSkge1xuICAgIC8vIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBvZiB0aGUgTWF0cml4IGltcGxlbWVudGF0aW9uc1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSBzdWJzZXQgb24gYSBNYXRyaXggaW50ZXJmYWNlJyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBzaW5nbGUgZWxlbWVudCBmcm9tIHRoZSBtYXRyaXguXG4gICAqIEBwYXJhbSB7bnVtYmVyW119IGluZGV4ICAgWmVyby1iYXNlZCBpbmRleFxuICAgKiBAcmV0dXJuIHsqfSB2YWx1ZVxuICAgKi9cblxuXG4gIE1hdHJpeC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgLy8gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIG9mIHRoZSBNYXRyaXggaW1wbGVtZW50YXRpb25zXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIGdldCBvbiBhIE1hdHJpeCBpbnRlcmZhY2UnKTtcbiAgfTtcbiAgLyoqXG4gICAqIFJlcGxhY2UgYSBzaW5nbGUgZWxlbWVudCBpbiB0aGUgbWF0cml4LlxuICAgKiBAcGFyYW0ge251bWJlcltdfSBpbmRleCAgIFplcm8tYmFzZWQgaW5kZXhcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdICAgICAgICBEZWZhdWx0IHZhbHVlLCBmaWxsZWQgaW4gb24gbmV3IGVudHJpZXMgd2hlblxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWF0cml4IGlzIHJlc2l6ZWQuIElmIG5vdCBwcm92aWRlZCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IG1hdHJpeCBlbGVtZW50cyB3aWxsIGJlIGxlZnQgdW5kZWZpbmVkLlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9IHNlbGZcbiAgICovXG5cblxuICBNYXRyaXgucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChpbmRleCwgdmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xuICAgIC8vIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBvZiB0aGUgTWF0cml4IGltcGxlbWVudGF0aW9uc1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSBzZXQgb24gYSBNYXRyaXggaW50ZXJmYWNlJyk7XG4gIH07XG4gIC8qKlxuICAgKiBSZXNpemUgdGhlIG1hdHJpeCB0byB0aGUgZ2l2ZW4gc2l6ZS4gUmV0dXJucyBhIGNvcHkgb2YgdGhlIG1hdHJpeCB3aGVuXG4gICAqIGBjb3B5PXRydWVgLCBvdGhlcndpc2UgcmV0dXJuIHRoZSBtYXRyaXggaXRzZWxmIChyZXNpemUgaW4gcGxhY2UpLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcltdfSBzaXplICAgICAgICAgICBUaGUgbmV3IHNpemUgdGhlIG1hdHJpeCBzaG91bGQgaGF2ZS5cbiAgICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlPTBdICAgICAgRGVmYXVsdCB2YWx1ZSwgZmlsbGVkIGluIG9uIG5ldyBlbnRyaWVzLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBub3QgcHJvdmlkZWQsIHRoZSBtYXRyaXggZWxlbWVudHMgd2lsbFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBmaWxsZWQgd2l0aCB6ZXJvcy5cbiAgICogQHBhcmFtIHtib29sZWFufSBbY29weV0gICAgICAgICAgUmV0dXJuIGEgcmVzaXplZCBjb3B5IG9mIHRoZSBtYXRyaXhcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICAgICAgVGhlIHJlc2l6ZWQgbWF0cml4XG4gICAqL1xuXG5cbiAgTWF0cml4LnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAoc2l6ZSwgZGVmYXVsdFZhbHVlKSB7XG4gICAgLy8gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIG9mIHRoZSBNYXRyaXggaW1wbGVtZW50YXRpb25zXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIHJlc2l6ZSBvbiBhIE1hdHJpeCBpbnRlcmZhY2UnKTtcbiAgfTtcbiAgLyoqXG4gICAqIFJlc2hhcGUgdGhlIG1hdHJpeCB0byB0aGUgZ2l2ZW4gc2l6ZS4gUmV0dXJucyBhIGNvcHkgb2YgdGhlIG1hdHJpeCB3aGVuXG4gICAqIGBjb3B5PXRydWVgLCBvdGhlcndpc2UgcmV0dXJuIHRoZSBtYXRyaXggaXRzZWxmIChyZXNoYXBlIGluIHBsYWNlKS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJbXX0gc2l6ZSAgICAgICAgICAgVGhlIG5ldyBzaXplIHRoZSBtYXRyaXggc2hvdWxkIGhhdmUuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NvcHldICAgICAgICAgIFJldHVybiBhIHJlc2hhcGVkIGNvcHkgb2YgdGhlIG1hdHJpeFxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgICAgICBUaGUgcmVzaGFwZWQgbWF0cml4XG4gICAqL1xuXG5cbiAgTWF0cml4LnByb3RvdHlwZS5yZXNoYXBlID0gZnVuY3Rpb24gKHNpemUsIGRlZmF1bHRWYWx1ZSkge1xuICAgIC8vIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBvZiB0aGUgTWF0cml4IGltcGxlbWVudGF0aW9uc1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSByZXNoYXBlIG9uIGEgTWF0cml4IGludGVyZmFjZScpO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgY2xvbmUgb2YgdGhlIG1hdHJpeFxuICAgKiBAcmV0dXJuIHtNYXRyaXh9IGNsb25lXG4gICAqL1xuXG5cbiAgTWF0cml4LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGVhY2ggb2YgdGhlIE1hdHJpeCBpbXBsZW1lbnRhdGlvbnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBpbnZva2UgY2xvbmUgb24gYSBNYXRyaXggaW50ZXJmYWNlJyk7XG4gIH07XG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0aGUgc2l6ZSBvZiB0aGUgbWF0cml4LlxuICAgKiBAcmV0dXJucyB7bnVtYmVyW119IHNpemVcbiAgICovXG5cblxuICBNYXRyaXgucHJvdG90eXBlLnNpemUgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIG9mIHRoZSBNYXRyaXggaW1wbGVtZW50YXRpb25zXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIHNpemUgb24gYSBNYXRyaXggaW50ZXJmYWNlJyk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgbWF0cml4IHdpdGggdGhlIHJlc3VsdHMgb2YgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGV4ZWN1dGVkIG9uXG4gICAqIGVhY2ggZW50cnkgb2YgdGhlIG1hdHJpeC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgaW52b2tlZCB3aXRoIHRocmVlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyczogdGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50LCB0aGUgaW5kZXhcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgZWxlbWVudCwgYW5kIHRoZSBNYXRyaXggYmVpbmcgdHJhdmVyc2VkLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtza2lwWmVyb3NdIEludm9rZSBjYWxsYmFjayBmdW5jdGlvbiBmb3Igbm9uLXplcm8gdmFsdWVzIG9ubHkuXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gbWF0cml4XG4gICAqL1xuXG5cbiAgTWF0cml4LnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIHNraXBaZXJvcykge1xuICAgIC8vIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBvZiB0aGUgTWF0cml4IGltcGxlbWVudGF0aW9uc1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSBtYXAgb24gYSBNYXRyaXggaW50ZXJmYWNlJyk7XG4gIH07XG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZnVuY3Rpb24gb24gZWFjaCBlbnRyeSBvZiB0aGUgbWF0cml4LlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiB0aGUgdmFsdWUgb2YgdGhlIGVsZW1lbnQsIHRoZSBpbmRleFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBlbGVtZW50LCBhbmQgdGhlIE1hdHJpeCBiZWluZyB0cmF2ZXJzZWQuXG4gICAqL1xuXG5cbiAgTWF0cml4LnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgLy8gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIG9mIHRoZSBNYXRyaXggaW1wbGVtZW50YXRpb25zXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIGZvckVhY2ggb24gYSBNYXRyaXggaW50ZXJmYWNlJyk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gQXJyYXkgd2l0aCBhIGNvcHkgb2YgdGhlIGRhdGEgb2YgdGhlIE1hdHJpeFxuICAgKiBAcmV0dXJucyB7QXJyYXl9IGFycmF5XG4gICAqL1xuXG5cbiAgTWF0cml4LnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBvZiB0aGUgTWF0cml4IGltcGxlbWVudGF0aW9uc1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSB0b0FycmF5IG9uIGEgTWF0cml4IGludGVyZmFjZScpO1xuICB9O1xuICAvKipcbiAgICogR2V0IHRoZSBwcmltaXRpdmUgdmFsdWUgb2YgdGhlIE1hdHJpeDogYSBtdWx0aWRpbWVuc2lvbmFsIGFycmF5XG4gICAqIEByZXR1cm5zIHtBcnJheX0gYXJyYXlcbiAgICovXG5cblxuICBNYXRyaXgucHJvdG90eXBlLnZhbHVlT2YgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIG9mIHRoZSBNYXRyaXggaW1wbGVtZW50YXRpb25zXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIHZhbHVlT2Ygb24gYSBNYXRyaXggaW50ZXJmYWNlJyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1hdHJpeCwgd2l0aCBvcHRpb25hbCBmb3JtYXR0aW5nIG9wdGlvbnMuXG4gICAqIEBwYXJhbSB7T2JqZWN0IHwgbnVtYmVyIHwgRnVuY3Rpb259IFtvcHRpb25zXSAgRm9ybWF0dGluZyBvcHRpb25zLiBTZWVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWIvdXRpbHMvbnVtYmVyOmZvcm1hdCBmb3IgYVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uIG9mIHRoZSBhdmFpbGFibGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBNYXRyaXgucHJvdG90eXBlLmZvcm1hdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgLy8gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIG9mIHRoZSBNYXRyaXggaW1wbGVtZW50YXRpb25zXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIGZvcm1hdCBvbiBhIE1hdHJpeCBpbnRlcmZhY2UnKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWF0cml4XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIE1hdHJpeC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIG9mIHRoZSBNYXRyaXggaW1wbGVtZW50YXRpb25zXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIHRvU3RyaW5nIG9uIGEgTWF0cml4IGludGVyZmFjZScpO1xuICB9O1xuXG4gIHJldHVybiBNYXRyaXg7XG59LCB7XG4gIGlzQ2xhc3M6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVNYXRyaXhDbGFzcyA9IGNyZWF0ZU1hdHJpeENsYXNzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVJbmRleENsYXNzID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ0luZGV4JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ0ltbXV0YWJsZURlbnNlTWF0cml4J107XG52YXIgY3JlYXRlSW5kZXhDbGFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBJbW11dGFibGVEZW5zZU1hdHJpeCA9IF9yZWYuSW1tdXRhYmxlRGVuc2VNYXRyaXg7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBpbmRleC4gQW4gSW5kZXggY2FuIHN0b3JlIHJhbmdlcyBhbmQgc2V0cyBmb3IgbXVsdGlwbGUgZGltZW5zaW9ucy5cbiAgICogTWF0cml4LmdldCwgTWF0cml4LnNldCwgYW5kIG1hdGguc3Vic2V0IGFjY2VwdCBhbiBJbmRleCBhcyBpbnB1dC5cbiAgICpcbiAgICogVXNhZ2U6XG4gICAqICAgICBjb25zdCBpbmRleCA9IG5ldyBJbmRleChyYW5nZTEsIHJhbmdlMiwgbWF0cml4MSwgYXJyYXkxLCAuLi4pXG4gICAqXG4gICAqIFdoZXJlIGVhY2ggcGFyYW1ldGVyIGNhbiBiZSBhbnkgb2Y6XG4gICAqICAgICBBIG51bWJlclxuICAgKiAgICAgQSBzdHJpbmcgKGNvbnRhaW5pbmcgYSBuYW1lIG9mIGFuIG9iamVjdCBwcm9wZXJ0eSlcbiAgICogICAgIEFuIGluc3RhbmNlIG9mIFJhbmdlXG4gICAqICAgICBBbiBBcnJheSB3aXRoIHRoZSBTZXQgdmFsdWVzXG4gICAqICAgICBBIE1hdHJpeCB3aXRoIHRoZSBTZXQgdmFsdWVzXG4gICAqXG4gICAqIFRoZSBwYXJhbWV0ZXJzIHN0YXJ0LCBlbmQsIGFuZCBzdGVwIG11c3QgYmUgaW50ZWdlciBudW1iZXJzLlxuICAgKlxuICAgKiBAY2xhc3MgSW5kZXhcbiAgICogQENvbnN0cnVjdG9yIEluZGV4XG4gICAqIEBwYXJhbSB7Li4uKn0gcmFuZ2VzXG4gICAqL1xuICBmdW5jdGlvbiBJbmRleChyYW5nZXMpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSW5kZXgpKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH1cblxuICAgIHRoaXMuX2RpbWVuc2lvbnMgPSBbXTtcbiAgICB0aGlzLl9pc1NjYWxhciA9IHRydWU7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgdmFyIGFyZyA9IGFyZ3VtZW50c1tpXTtcblxuICAgICAgaWYgKCgwLCBfaXMuaXNSYW5nZSkoYXJnKSkge1xuICAgICAgICB0aGlzLl9kaW1lbnNpb25zLnB1c2goYXJnKTtcblxuICAgICAgICB0aGlzLl9pc1NjYWxhciA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFyZykgfHwgKDAsIF9pcy5pc01hdHJpeCkoYXJnKSkge1xuICAgICAgICAvLyBjcmVhdGUgbWF0cml4XG4gICAgICAgIHZhciBtID0gX2NyZWF0ZUltbXV0YWJsZU1hdHJpeChhcmcudmFsdWVPZigpKTtcblxuICAgICAgICB0aGlzLl9kaW1lbnNpb25zLnB1c2gobSk7IC8vIHNpemVcblxuXG4gICAgICAgIHZhciBzaXplID0gbS5zaXplKCk7IC8vIHNjYWxhclxuXG4gICAgICAgIGlmIChzaXplLmxlbmd0aCAhPT0gMSB8fCBzaXplWzBdICE9PSAxKSB7XG4gICAgICAgICAgdGhpcy5faXNTY2FsYXIgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuICAgICAgICB0aGlzLl9kaW1lbnNpb25zLnB1c2goX2NyZWF0ZUltbXV0YWJsZU1hdHJpeChbYXJnXSkpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYXJnID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBvYmplY3QgcHJvcGVydHkgKGFyZ3VtZW50cy5jb3VudCBzaG91bGQgYmUgMSlcbiAgICAgICAgdGhpcy5fZGltZW5zaW9ucy5wdXNoKGFyZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdEaW1lbnNpb24gbXVzdCBiZSBhbiBBcnJheSwgTWF0cml4LCBudW1iZXIsIHN0cmluZywgb3IgUmFuZ2UnKTtcbiAgICAgIH0gLy8gVE9ETzogaW1wbGVtZW50IHN1cHBvcnQgZm9yIHdpbGRjYXJkICcqJ1xuXG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBBdHRhY2ggdHlwZSBpbmZvcm1hdGlvblxuICAgKi9cblxuXG4gIEluZGV4LnByb3RvdHlwZS50eXBlID0gJ0luZGV4JztcbiAgSW5kZXgucHJvdG90eXBlLmlzSW5kZXggPSB0cnVlO1xuXG4gIGZ1bmN0aW9uIF9jcmVhdGVJbW11dGFibGVNYXRyaXgoYXJnKSB7XG4gICAgLy8gbG9vcCBhcnJheSBlbGVtZW50c1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXJnLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKHR5cGVvZiBhcmdbaV0gIT09ICdudW1iZXInIHx8ICEoMCwgX251bWJlci5pc0ludGVnZXIpKGFyZ1tpXSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW5kZXggcGFyYW1ldGVycyBtdXN0IGJlIHBvc2l0aXZlIGludGVnZXIgbnVtYmVycycpO1xuICAgICAgfVxuICAgIH0gLy8gY3JlYXRlIG1hdHJpeFxuXG5cbiAgICByZXR1cm4gbmV3IEltbXV0YWJsZURlbnNlTWF0cml4KGFyZyk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoZSBpbmRleFxuICAgKiBAbWVtYmVyb2YgSW5kZXhcbiAgICogQHJldHVybiB7SW5kZXh9IGNsb25lXG4gICAqL1xuXG5cbiAgSW5kZXgucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBpbmRleCA9IG5ldyBJbmRleCgpO1xuICAgIGluZGV4Ll9kaW1lbnNpb25zID0gKDAsIF9vYmplY3QuY2xvbmUpKHRoaXMuX2RpbWVuc2lvbnMpO1xuICAgIGluZGV4Ll9pc1NjYWxhciA9IHRoaXMuX2lzU2NhbGFyO1xuICAgIHJldHVybiBpbmRleDtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBpbmRleCBmcm9tIGFuIGFycmF5IHdpdGggcmFuZ2VzL251bWJlcnNcbiAgICogQG1lbWJlcm9mIEluZGV4XG4gICAqIEBwYXJhbSB7QXJyYXkuPEFycmF5IHwgbnVtYmVyPn0gcmFuZ2VzXG4gICAqIEByZXR1cm4ge0luZGV4fSBpbmRleFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIEluZGV4LmNyZWF0ZSA9IGZ1bmN0aW9uIChyYW5nZXMpIHtcbiAgICB2YXIgaW5kZXggPSBuZXcgSW5kZXgoKTtcbiAgICBJbmRleC5hcHBseShpbmRleCwgcmFuZ2VzKTtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH07XG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0aGUgc2l6ZSBvZiB0aGUgaW5kZXgsIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgZm9yIGVhY2ggZGltZW5zaW9uLlxuICAgKiBAbWVtYmVyb2YgSW5kZXhcbiAgICogQHJldHVybnMge251bWJlcltdfSBzaXplXG4gICAqL1xuXG5cbiAgSW5kZXgucHJvdG90eXBlLnNpemUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNpemUgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHRoaXMuX2RpbWVuc2lvbnMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgdmFyIGQgPSB0aGlzLl9kaW1lbnNpb25zW2ldO1xuICAgICAgc2l6ZVtpXSA9IHR5cGVvZiBkID09PSAnc3RyaW5nJyA/IDEgOiBkLnNpemUoKVswXTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2l6ZTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCB0aGUgbWF4aW11bSB2YWx1ZSBmb3IgZWFjaCBvZiB0aGUgaW5kZXhlcyByYW5nZXMuXG4gICAqIEBtZW1iZXJvZiBJbmRleFxuICAgKiBAcmV0dXJucyB7bnVtYmVyW119IG1heFxuICAgKi9cblxuXG4gIEluZGV4LnByb3RvdHlwZS5tYXggPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZhbHVlcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGlpID0gdGhpcy5fZGltZW5zaW9ucy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICB2YXIgcmFuZ2UgPSB0aGlzLl9kaW1lbnNpb25zW2ldO1xuICAgICAgdmFsdWVzW2ldID0gdHlwZW9mIHJhbmdlID09PSAnc3RyaW5nJyA/IHJhbmdlIDogcmFuZ2UubWF4KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfTtcbiAgLyoqXG4gICAqIEdldCB0aGUgbWluaW11bSB2YWx1ZSBmb3IgZWFjaCBvZiB0aGUgaW5kZXhlcyByYW5nZXMuXG4gICAqIEBtZW1iZXJvZiBJbmRleFxuICAgKiBAcmV0dXJucyB7bnVtYmVyW119IG1pblxuICAgKi9cblxuXG4gIEluZGV4LnByb3RvdHlwZS5taW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZhbHVlcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGlpID0gdGhpcy5fZGltZW5zaW9ucy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICB2YXIgcmFuZ2UgPSB0aGlzLl9kaW1lbnNpb25zW2ldO1xuICAgICAgdmFsdWVzW2ldID0gdHlwZW9mIHJhbmdlID09PSAnc3RyaW5nJyA/IHJhbmdlIDogcmFuZ2UubWluKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfTtcbiAgLyoqXG4gICAqIExvb3Agb3ZlciBlYWNoIG9mIHRoZSByYW5nZXMgb2YgdGhlIGluZGV4XG4gICAqIEBtZW1iZXJvZiBJbmRleFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgIENhbGxlZCBmb3IgZWFjaCByYW5nZSB3aXRoIGEgUmFuZ2UgYXMgZmlyc3RcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudCwgdGhlIGRpbWVuc2lvbiBhcyBzZWNvbmQsIGFuZCB0aGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCBvYmplY3QgYXMgdGhpcmQuXG4gICAqL1xuXG5cbiAgSW5kZXgucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSB0aGlzLl9kaW1lbnNpb25zLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIGNhbGxiYWNrKHRoaXMuX2RpbWVuc2lvbnNbaV0sIGksIHRoaXMpO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSBkaW1lbnNpb24gZm9yIHRoZSBnaXZlbiBpbmRleFxuICAgKiBAbWVtYmVyb2YgSW5kZXhcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGRpbSAgICAgICAgICAgICAgICAgIE51bWJlciBvZiB0aGUgZGltZW5zaW9uXG4gICAqIEByZXR1cm5zIHtSYW5nZSB8IG51bGx9IHJhbmdlXG4gICAqL1xuXG5cbiAgSW5kZXgucHJvdG90eXBlLmRpbWVuc2lvbiA9IGZ1bmN0aW9uIChkaW0pIHtcbiAgICByZXR1cm4gdGhpcy5fZGltZW5zaW9uc1tkaW1dIHx8IG51bGw7XG4gIH07XG4gIC8qKlxuICAgKiBUZXN0IHdoZXRoZXIgdGhpcyBpbmRleCBjb250YWlucyBhbiBvYmplY3QgcHJvcGVydHlcbiAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiB0aGUgaW5kZXggaXMgYW4gb2JqZWN0IHByb3BlcnR5XG4gICAqL1xuXG5cbiAgSW5kZXgucHJvdG90eXBlLmlzT2JqZWN0UHJvcGVydHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RpbWVuc2lvbnMubGVuZ3RoID09PSAxICYmIHR5cGVvZiB0aGlzLl9kaW1lbnNpb25zWzBdID09PSAnc3RyaW5nJztcbiAgfTtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG9iamVjdCBwcm9wZXJ0eSBuYW1lIHdoZW4gdGhlIEluZGV4IGhvbGRzIGEgc2luZ2xlIG9iamVjdCBwcm9wZXJ0eSxcbiAgICogZWxzZSByZXR1cm5zIG51bGxcbiAgICogQHJldHVybnMge3N0cmluZyB8IG51bGx9XG4gICAqL1xuXG5cbiAgSW5kZXgucHJvdG90eXBlLmdldE9iamVjdFByb3BlcnR5ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmlzT2JqZWN0UHJvcGVydHkoKSA/IHRoaXMuX2RpbWVuc2lvbnNbMF0gOiBudWxsO1xuICB9O1xuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIHRoaXMgaW5kZXggY29udGFpbnMgb25seSBhIHNpbmdsZSB2YWx1ZS5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUgY2FzZSB3aGVuIHRoZSBpbmRleCBpcyBjcmVhdGVkIHdpdGggb25seSBzY2FsYXIgdmFsdWVzIGFzIHJhbmdlcyxcbiAgICogbm90IGZvciByYW5nZXMgcmVzb2x2aW5nIGludG8gYSBzaW5nbGUgdmFsdWUuXG4gICAqIEBtZW1iZXJvZiBJbmRleFxuICAgKiBAcmV0dXJuIHtib29sZWFufSBpc1NjYWxhclxuICAgKi9cblxuXG4gIEluZGV4LnByb3RvdHlwZS5pc1NjYWxhciA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNTY2FsYXI7XG4gIH07XG4gIC8qKlxuICAgKiBFeHBhbmQgdGhlIEluZGV4IGludG8gYW4gYXJyYXkuXG4gICAqIEZvciBleGFtcGxlIG5ldyBJbmRleChbMCwzXSwgWzIsN10pIHJldHVybnMgW1swLDEsMl0sIFsyLDMsNCw1LDZdXVxuICAgKiBAbWVtYmVyb2YgSW5kZXhcbiAgICogQHJldHVybnMge0FycmF5fSBhcnJheVxuICAgKi9cblxuXG4gIEluZGV4LnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcnJheSA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGlpID0gdGhpcy5fZGltZW5zaW9ucy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICB2YXIgZGltZW5zaW9uID0gdGhpcy5fZGltZW5zaW9uc1tpXTtcbiAgICAgIGFycmF5LnB1c2godHlwZW9mIGRpbWVuc2lvbiA9PT0gJ3N0cmluZycgPyBkaW1lbnNpb24gOiBkaW1lbnNpb24udG9BcnJheSgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJyYXk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgdGhlIHByaW1pdGl2ZSB2YWx1ZSBvZiB0aGUgSW5kZXgsIGEgdHdvIGRpbWVuc2lvbmFsIGFycmF5LlxuICAgKiBFcXVpdmFsZW50IHRvIEluZGV4LnRvQXJyYXkoKS5cbiAgICogQG1lbWJlcm9mIEluZGV4XG4gICAqIEByZXR1cm5zIHtBcnJheX0gYXJyYXlcbiAgICovXG5cblxuICBJbmRleC5wcm90b3R5cGUudmFsdWVPZiA9IEluZGV4LnByb3RvdHlwZS50b0FycmF5O1xuICAvKipcbiAgICogR2V0IHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGluZGV4LCBmb3IgZXhhbXBsZSAnWzI6Nl0nIG9yICdbMDoyOjEwLCA0OjcsIFsxLDIsM11dJ1xuICAgKiBAbWVtYmVyb2YgSW5kZXhcbiAgICogQHJldHVybnMge1N0cmluZ30gc3RyXG4gICAqL1xuXG4gIEluZGV4LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc3RyaW5ncyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGlpID0gdGhpcy5fZGltZW5zaW9ucy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICB2YXIgZGltZW5zaW9uID0gdGhpcy5fZGltZW5zaW9uc1tpXTtcblxuICAgICAgaWYgKHR5cGVvZiBkaW1lbnNpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHN0cmluZ3MucHVzaChKU09OLnN0cmluZ2lmeShkaW1lbnNpb24pKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0cmluZ3MucHVzaChkaW1lbnNpb24udG9TdHJpbmcoKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICdbJyArIHN0cmluZ3Muam9pbignLCAnKSArICddJztcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIEluZGV4XG4gICAqIEBtZW1iZXJvZiBJbmRleFxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGEgSlNPTiBvYmplY3Qgc3RydWN0dXJlZCBhczpcbiAgICogICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIkluZGV4XCIsIFwicmFuZ2VzXCI6IFt7XCJtYXRoanNcIjogXCJSYW5nZVwiLCBzdGFydDogMCwgZW5kOiAxMCwgc3RlcDoxfSwgLi4uXX1gXG4gICAqL1xuXG5cbiAgSW5kZXgucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnSW5kZXgnLFxuICAgICAgZGltZW5zaW9uczogdGhpcy5fZGltZW5zaW9uc1xuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhbiBJbmRleCBmcm9tIGEgSlNPTiBvYmplY3RcbiAgICogQG1lbWJlcm9mIEluZGV4XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBqc29uIEEgSlNPTiBvYmplY3Qgc3RydWN0dXJlZCBhczpcbiAgICogICAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiSW5kZXhcIiwgXCJkaW1lbnNpb25zXCI6IFt7XCJtYXRoanNcIjogXCJSYW5nZVwiLCBzdGFydDogMCwgZW5kOiAxMCwgc3RlcDoxfSwgLi4uXX1gXG4gICAqIEByZXR1cm4ge0luZGV4fVxuICAgKi9cblxuXG4gIEluZGV4LmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICByZXR1cm4gSW5kZXguY3JlYXRlKGpzb24uZGltZW5zaW9ucyk7XG4gIH07XG5cbiAgcmV0dXJuIEluZGV4O1xufSwge1xuICBpc0NsYXNzOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlSW5kZXhDbGFzcyA9IGNyZWF0ZUluZGV4Q2xhc3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJhbmdlQ2xhc3MgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ1JhbmdlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbXTtcbnZhciBjcmVhdGVSYW5nZUNsYXNzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKCkge1xuICAvKipcbiAgICogQ3JlYXRlIGEgcmFuZ2UuIEEgcmFuZ2UgaGFzIGEgc3RhcnQsIHN0ZXAsIGFuZCBlbmQsIGFuZCBjb250YWlucyBmdW5jdGlvbnNcbiAgICogdG8gaXRlcmF0ZSBvdmVyIHRoZSByYW5nZS5cbiAgICpcbiAgICogQSByYW5nZSBjYW4gYmUgY29uc3RydWN0ZWQgYXM6XG4gICAqXG4gICAqICAgICBjb25zdCByYW5nZSA9IG5ldyBSYW5nZShzdGFydCwgZW5kKVxuICAgKiAgICAgY29uc3QgcmFuZ2UgPSBuZXcgUmFuZ2Uoc3RhcnQsIGVuZCwgc3RlcClcbiAgICpcbiAgICogVG8gZ2V0IHRoZSByZXN1bHQgb2YgdGhlIHJhbmdlOlxuICAgKiAgICAgcmFuZ2UuZm9yRWFjaChmdW5jdGlvbiAoeCkge1xuICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHgpXG4gICAqICAgICB9KVxuICAgKiAgICAgcmFuZ2UubWFwKGZ1bmN0aW9uICh4KSB7XG4gICAqICAgICAgICAgcmV0dXJuIG1hdGguc2luKHgpXG4gICAqICAgICB9KVxuICAgKiAgICAgcmFuZ2UudG9BcnJheSgpXG4gICAqXG4gICAqIEV4YW1wbGUgdXNhZ2U6XG4gICAqXG4gICAqICAgICBjb25zdCBjID0gbmV3IFJhbmdlKDIsIDYpICAgICAgIC8vIDI6MTo1XG4gICAqICAgICBjLnRvQXJyYXkoKSAgICAgICAgICAgICAgICAgICAgIC8vIFsyLCAzLCA0LCA1XVxuICAgKiAgICAgY29uc3QgZCA9IG5ldyBSYW5nZSgyLCAtMywgLTEpICAvLyAyOi0xOi0yXG4gICAqICAgICBkLnRvQXJyYXkoKSAgICAgICAgICAgICAgICAgICAgIC8vIFsyLCAxLCAwLCAtMSwgLTJdXG4gICAqXG4gICAqIEBjbGFzcyBSYW5nZVxuICAgKiBAY29uc3RydWN0b3IgUmFuZ2VcbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0ICBpbmNsdWRlZCBsb3dlciBib3VuZFxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kICAgIGV4Y2x1ZGVkIHVwcGVyIGJvdW5kXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcF0gc3RlcCBzaXplLCBkZWZhdWx0IHZhbHVlIGlzIDFcbiAgICovXG4gIGZ1bmN0aW9uIFJhbmdlKHN0YXJ0LCBlbmQsIHN0ZXApIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmFuZ2UpKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH1cblxuICAgIHZhciBoYXNTdGFydCA9IHN0YXJ0ICE9PSBudWxsICYmIHN0YXJ0ICE9PSB1bmRlZmluZWQ7XG4gICAgdmFyIGhhc0VuZCA9IGVuZCAhPT0gbnVsbCAmJiBlbmQgIT09IHVuZGVmaW5lZDtcbiAgICB2YXIgaGFzU3RlcCA9IHN0ZXAgIT09IG51bGwgJiYgc3RlcCAhPT0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGhhc1N0YXJ0KSB7XG4gICAgICBpZiAoKDAsIF9pcy5pc0JpZ051bWJlcikoc3RhcnQpKSB7XG4gICAgICAgIHN0YXJ0ID0gc3RhcnQudG9OdW1iZXIoKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHN0YXJ0ICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXJhbWV0ZXIgc3RhcnQgbXVzdCBiZSBhIG51bWJlcicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChoYXNFbmQpIHtcbiAgICAgIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShlbmQpKSB7XG4gICAgICAgIGVuZCA9IGVuZC50b051bWJlcigpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZW5kICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXJhbWV0ZXIgZW5kIG11c3QgYmUgYSBudW1iZXInKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaGFzU3RlcCkge1xuICAgICAgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKHN0ZXApKSB7XG4gICAgICAgIHN0ZXAgPSBzdGVwLnRvTnVtYmVyKCk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdGVwICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXJhbWV0ZXIgc3RlcCBtdXN0IGJlIGEgbnVtYmVyJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zdGFydCA9IGhhc1N0YXJ0ID8gcGFyc2VGbG9hdChzdGFydCkgOiAwO1xuICAgIHRoaXMuZW5kID0gaGFzRW5kID8gcGFyc2VGbG9hdChlbmQpIDogMDtcbiAgICB0aGlzLnN0ZXAgPSBoYXNTdGVwID8gcGFyc2VGbG9hdChzdGVwKSA6IDE7XG4gIH1cbiAgLyoqXG4gICAqIEF0dGFjaCB0eXBlIGluZm9ybWF0aW9uXG4gICAqL1xuXG5cbiAgUmFuZ2UucHJvdG90eXBlLnR5cGUgPSAnUmFuZ2UnO1xuICBSYW5nZS5wcm90b3R5cGUuaXNSYW5nZSA9IHRydWU7XG4gIC8qKlxuICAgKiBQYXJzZSBhIHN0cmluZyBpbnRvIGEgcmFuZ2UsXG4gICAqIFRoZSBzdHJpbmcgY29udGFpbnMgdGhlIHN0YXJ0LCBvcHRpb25hbCBzdGVwLCBhbmQgZW5kLCBzZXBhcmF0ZWQgYnkgYSBjb2xvbi5cbiAgICogSWYgdGhlIHN0cmluZyBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQgcmFuZ2UsIG51bGwgaXMgcmV0dXJuZWQuXG4gICAqIEZvciBleGFtcGxlIHN0cj0nMDoyOjExJy5cbiAgICogQG1lbWJlcm9mIFJhbmdlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICogQHJldHVybiB7UmFuZ2UgfCBudWxsfSByYW5nZVxuICAgKi9cblxuICBSYW5nZS5wYXJzZSA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBhcmdzID0gc3RyLnNwbGl0KCc6Jyk7XG4gICAgdmFyIG51bXMgPSBhcmdzLm1hcChmdW5jdGlvbiAoYXJnKSB7XG4gICAgICByZXR1cm4gcGFyc2VGbG9hdChhcmcpO1xuICAgIH0pO1xuICAgIHZhciBpbnZhbGlkID0gbnVtcy5zb21lKGZ1bmN0aW9uIChudW0pIHtcbiAgICAgIHJldHVybiBpc05hTihudW0pO1xuICAgIH0pO1xuXG4gICAgaWYgKGludmFsaWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHN3aXRjaCAobnVtcy5sZW5ndGgpIHtcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShudW1zWzBdLCBudW1zWzFdKTtcblxuICAgICAgY2FzZSAzOlxuICAgICAgICByZXR1cm4gbmV3IFJhbmdlKG51bXNbMF0sIG51bXNbMl0sIG51bXNbMV0pO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGUgcmFuZ2VcbiAgICogQHJldHVybiB7UmFuZ2V9IGNsb25lXG4gICAqL1xuXG5cbiAgUmFuZ2UucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgUmFuZ2UodGhpcy5zdGFydCwgdGhpcy5lbmQsIHRoaXMuc3RlcCk7XG4gIH07XG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0aGUgc2l6ZSBvZiB0aGUgcmFuZ2UuXG4gICAqIFJldHVybnMgYW4gYXJyYXkgY29udGFpbmluZyBvbmUgbnVtYmVyLCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSByYW5nZS5cbiAgICogQG1lbWJlcm9mIFJhbmdlXG4gICAqIEByZXR1cm5zIHtudW1iZXJbXX0gc2l6ZVxuICAgKi9cblxuXG4gIFJhbmdlLnByb3RvdHlwZS5zaXplID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBsZW4gPSAwO1xuICAgIHZhciBzdGFydCA9IHRoaXMuc3RhcnQ7XG4gICAgdmFyIHN0ZXAgPSB0aGlzLnN0ZXA7XG4gICAgdmFyIGVuZCA9IHRoaXMuZW5kO1xuICAgIHZhciBkaWZmID0gZW5kIC0gc3RhcnQ7XG5cbiAgICBpZiAoKDAsIF9udW1iZXIuc2lnbikoc3RlcCkgPT09ICgwLCBfbnVtYmVyLnNpZ24pKGRpZmYpKSB7XG4gICAgICBsZW4gPSBNYXRoLmNlaWwoZGlmZiAvIHN0ZXApO1xuICAgIH0gZWxzZSBpZiAoZGlmZiA9PT0gMCkge1xuICAgICAgbGVuID0gMDtcbiAgICB9XG5cbiAgICBpZiAoaXNOYU4obGVuKSkge1xuICAgICAgbGVuID0gMDtcbiAgICB9XG5cbiAgICByZXR1cm4gW2xlbl07XG4gIH07XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIG1pbmltdW0gdmFsdWUgaW4gdGhlIHJhbmdlXG4gICAqIEBtZW1iZXJvZiBSYW5nZVxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCB1bmRlZmluZWR9IG1pblxuICAgKi9cblxuXG4gIFJhbmdlLnByb3RvdHlwZS5taW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNpemUgPSB0aGlzLnNpemUoKVswXTtcblxuICAgIGlmIChzaXplID4gMCkge1xuICAgICAgaWYgKHRoaXMuc3RlcCA+IDApIHtcbiAgICAgICAgLy8gcG9zaXRpdmUgc3RlcFxuICAgICAgICByZXR1cm4gdGhpcy5zdGFydDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG5lZ2F0aXZlIHN0ZXBcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnQgKyAoc2l6ZSAtIDEpICogdGhpcy5zdGVwO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgbWF4aW11bSB2YWx1ZSBpbiB0aGUgcmFuZ2VcbiAgICogQG1lbWJlcm9mIFJhbmdlXG4gICAqIEByZXR1cm4ge251bWJlciB8IHVuZGVmaW5lZH0gbWF4XG4gICAqL1xuXG5cbiAgUmFuZ2UucHJvdG90eXBlLm1heCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2l6ZSA9IHRoaXMuc2l6ZSgpWzBdO1xuXG4gICAgaWYgKHNpemUgPiAwKSB7XG4gICAgICBpZiAodGhpcy5zdGVwID4gMCkge1xuICAgICAgICAvLyBwb3NpdGl2ZSBzdGVwXG4gICAgICAgIHJldHVybiB0aGlzLnN0YXJ0ICsgKHNpemUgLSAxKSAqIHRoaXMuc3RlcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG5lZ2F0aXZlIHN0ZXBcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBlYWNoIHZhbHVlIGluIHRoZSByYW5nZS5cbiAgICogQG1lbWJlcm9mIFJhbmdlXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrICAgVGhlIGNhbGxiYWNrIG1ldGhvZCBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiB0aGUgdmFsdWUgb2YgdGhlIGVsZW1lbnQsIHRoZSBpbmRleFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBlbGVtZW50LCBhbmQgdGhlIFJhbmdlIGJlaW5nIHRyYXZlcnNlZC5cbiAgICovXG5cblxuICBSYW5nZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHZhciB4ID0gdGhpcy5zdGFydDtcbiAgICB2YXIgc3RlcCA9IHRoaXMuc3RlcDtcbiAgICB2YXIgZW5kID0gdGhpcy5lbmQ7XG4gICAgdmFyIGkgPSAwO1xuXG4gICAgaWYgKHN0ZXAgPiAwKSB7XG4gICAgICB3aGlsZSAoeCA8IGVuZCkge1xuICAgICAgICBjYWxsYmFjayh4LCBbaV0sIHRoaXMpO1xuICAgICAgICB4ICs9IHN0ZXA7XG4gICAgICAgIGkrKztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHN0ZXAgPCAwKSB7XG4gICAgICB3aGlsZSAoeCA+IGVuZCkge1xuICAgICAgICBjYWxsYmFjayh4LCBbaV0sIHRoaXMpO1xuICAgICAgICB4ICs9IHN0ZXA7XG4gICAgICAgIGkrKztcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggdmFsdWUgaW4gdGhlIFJhbmdlLCBhbmQgcmV0dXJuIHRoZVxuICAgKiByZXN1bHRzIGFzIGFuIGFycmF5XG4gICAqIEBtZW1iZXJvZiBSYW5nZVxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAgIFRoZSBjYWxsYmFjayBtZXRob2QgaXMgaW52b2tlZCB3aXRoIHRocmVlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyczogdGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50LCB0aGUgaW5kZXhcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgZWxlbWVudCwgYW5kIHRoZSBNYXRyaXggYmVpbmcgdHJhdmVyc2VkLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IGFycmF5XG4gICAqL1xuXG5cbiAgUmFuZ2UucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBvYmopIHtcbiAgICAgIGFycmF5W2luZGV4WzBdXSA9IGNhbGxiYWNrKHZhbHVlLCBpbmRleCwgb2JqKTtcbiAgICB9KTtcbiAgICByZXR1cm4gYXJyYXk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gQXJyYXkgd2l0aCBhIGNvcHkgb2YgdGhlIFJhbmdlcyBkYXRhXG4gICAqIEBtZW1iZXJvZiBSYW5nZVxuICAgKiBAcmV0dXJucyB7QXJyYXl9IGFycmF5XG4gICAqL1xuXG5cbiAgUmFuZ2UucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFycmF5ID0gW107XG4gICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgpIHtcbiAgICAgIGFycmF5W2luZGV4WzBdXSA9IHZhbHVlO1xuICAgIH0pO1xuICAgIHJldHVybiBhcnJheTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCB0aGUgcHJpbWl0aXZlIHZhbHVlIG9mIHRoZSBSYW5nZSwgYSBvbmUgZGltZW5zaW9uYWwgYXJyYXlcbiAgICogQG1lbWJlcm9mIFJhbmdlXG4gICAqIEByZXR1cm5zIHtBcnJheX0gYXJyYXlcbiAgICovXG5cblxuICBSYW5nZS5wcm90b3R5cGUudmFsdWVPZiA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBUT0RPOiBpbXBsZW1lbnQgYSBjYWNoaW5nIG1lY2hhbmlzbSBmb3IgcmFuZ2UudmFsdWVPZigpXG4gICAgcmV0dXJuIHRoaXMudG9BcnJheSgpO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSByYW5nZSwgd2l0aCBvcHRpb25hbCBmb3JtYXR0aW5nIG9wdGlvbnMuXG4gICAqIE91dHB1dCBpcyBmb3JtYXR0ZWQgYXMgJ3N0YXJ0OnN0ZXA6ZW5kJywgZm9yIGV4YW1wbGUgJzI6Nicgb3IgJzA6MC4yOjExJ1xuICAgKiBAbWVtYmVyb2YgUmFuZ2VcbiAgICogQHBhcmFtIHtPYmplY3QgfCBudW1iZXIgfCBmdW5jdGlvbn0gW29wdGlvbnNdICBGb3JtYXR0aW5nIG9wdGlvbnMuIFNlZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYi91dGlscy9udW1iZXI6Zm9ybWF0IGZvciBhXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gb2YgdGhlIGF2YWlsYWJsZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIFJhbmdlLnByb3RvdHlwZS5mb3JtYXQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBzdHIgPSAoMCwgX251bWJlci5mb3JtYXQpKHRoaXMuc3RhcnQsIG9wdGlvbnMpO1xuXG4gICAgaWYgKHRoaXMuc3RlcCAhPT0gMSkge1xuICAgICAgc3RyICs9ICc6JyArICgwLCBfbnVtYmVyLmZvcm1hdCkodGhpcy5zdGVwLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBzdHIgKz0gJzonICsgKDAsIF9udW1iZXIuZm9ybWF0KSh0aGlzLmVuZCwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIHN0cjtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgcmFuZ2UuXG4gICAqIEBtZW1iZXJvZiBSYW5nZVxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cblxuXG4gIFJhbmdlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtYXQoKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIHJhbmdlXG4gICAqIEBtZW1iZXJvZiBSYW5nZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGEgSlNPTiBvYmplY3Qgc3RydWN0dXJlZCBhczpcbiAgICogICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIlJhbmdlXCIsIFwic3RhcnRcIjogMiwgXCJlbmRcIjogNCwgXCJzdGVwXCI6IDF9YFxuICAgKi9cblxuXG4gIFJhbmdlLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hdGhqczogJ1JhbmdlJyxcbiAgICAgIHN0YXJ0OiB0aGlzLnN0YXJ0LFxuICAgICAgZW5kOiB0aGlzLmVuZCxcbiAgICAgIHN0ZXA6IHRoaXMuc3RlcFxuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhIFJhbmdlIGZyb20gYSBKU09OIG9iamVjdFxuICAgKiBAbWVtYmVyb2YgUmFuZ2VcbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gQSBKU09OIG9iamVjdCBzdHJ1Y3R1cmVkIGFzOlxuICAgKiAgICAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiUmFuZ2VcIiwgXCJzdGFydFwiOiAyLCBcImVuZFwiOiA0LCBcInN0ZXBcIjogMX1gXG4gICAqIEByZXR1cm4ge1JhbmdlfVxuICAgKi9cblxuXG4gIFJhbmdlLmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICByZXR1cm4gbmV3IFJhbmdlKGpzb24uc3RhcnQsIGpzb24uZW5kLCBqc29uLnN0ZXApO1xuICB9O1xuXG4gIHJldHVybiBSYW5nZTtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJhbmdlQ2xhc3MgPSBjcmVhdGVSYW5nZUNsYXNzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTcGFDbGFzcyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ1NwYSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydhZGRTY2FsYXInLCAnZXF1YWxTY2FsYXInLCAnRmlib25hY2NpSGVhcCddO1xudmFyIGNyZWF0ZVNwYUNsYXNzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIGFkZFNjYWxhciA9IF9yZWYuYWRkU2NhbGFyLFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLFxuICAgICAgRmlib25hY2NpSGVhcCA9IF9yZWYuRmlib25hY2NpSGVhcDtcblxuICAvKipcbiAgICogQW4gb3JkZXJlZCBTcGFyc2UgQWNjdW11bGF0b3IgaXMgYSByZXByZXNlbnRhdGlvbiBmb3IgYSBzcGFyc2UgdmVjdG9yIHRoYXQgaW5jbHVkZXMgYSBkZW5zZSBhcnJheVxuICAgKiBvZiB0aGUgdmVjdG9yIGVsZW1lbnRzIGFuZCBhbiBvcmRlcmVkIGxpc3Qgb2Ygbm9uLXplcm8gZWxlbWVudHMuXG4gICAqL1xuICBmdW5jdGlvbiBTcGEoKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFNwYSkpIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7XG4gICAgfSAvLyBhbGxvY2F0ZSB2ZWN0b3IsIFRPRE8gdXNlIHR5cGVkIGFycmF5c1xuXG5cbiAgICB0aGlzLl92YWx1ZXMgPSBbXTtcbiAgICB0aGlzLl9oZWFwID0gbmV3IEZpYm9uYWNjaUhlYXAoKTtcbiAgfVxuICAvKipcbiAgICogQXR0YWNoIHR5cGUgaW5mb3JtYXRpb25cbiAgICovXG5cblxuICBTcGEucHJvdG90eXBlLnR5cGUgPSAnU3BhJztcbiAgU3BhLnByb3RvdHlwZS5pc1NwYSA9IHRydWU7XG4gIC8qKlxuICAgKiBTZXQgdGhlIHZhbHVlIGZvciBpbmRleCBpLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaSAgICAgICAgICAgICAgICAgICAgICAgVGhlIGluZGV4XG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleH0gICBUaGUgdmFsdWUgYXQgaW5kZXggaVxuICAgKi9cblxuICBTcGEucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChpLCB2KSB7XG4gICAgLy8gY2hlY2sgd2UgaGF2ZSBhIHZhbHVlIEAgaVxuICAgIGlmICghdGhpcy5fdmFsdWVzW2ldKSB7XG4gICAgICAvLyBpbnNlcnQgaW4gaGVhcFxuICAgICAgdmFyIG5vZGUgPSB0aGlzLl9oZWFwLmluc2VydChpLCB2KTsgLy8gc2V0IHRoZSB2YWx1ZSBAIGlcblxuXG4gICAgICB0aGlzLl92YWx1ZXNbaV0gPSBub2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB1cGRhdGUgdGhlIHZhbHVlIEAgaVxuICAgICAgdGhpcy5fdmFsdWVzW2ldLnZhbHVlID0gdjtcbiAgICB9XG4gIH07XG5cbiAgU3BhLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoaSkge1xuICAgIHZhciBub2RlID0gdGhpcy5fdmFsdWVzW2ldO1xuXG4gICAgaWYgKG5vZGUpIHtcbiAgICAgIHJldHVybiBub2RlLnZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiAwO1xuICB9O1xuXG4gIFNwYS5wcm90b3R5cGUuYWNjdW11bGF0ZSA9IGZ1bmN0aW9uIChpLCB2KSB7XG4gICAgLy8gbm9kZSBAIGlcbiAgICB2YXIgbm9kZSA9IHRoaXMuX3ZhbHVlc1tpXTtcblxuICAgIGlmICghbm9kZSkge1xuICAgICAgLy8gaW5zZXJ0IGluIGhlYXBcbiAgICAgIG5vZGUgPSB0aGlzLl9oZWFwLmluc2VydChpLCB2KTsgLy8gaW5pdGlhbGl6ZSB2YWx1ZVxuXG4gICAgICB0aGlzLl92YWx1ZXNbaV0gPSBub2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBhY2N1bXVsYXRlIHZhbHVlXG4gICAgICBub2RlLnZhbHVlID0gYWRkU2NhbGFyKG5vZGUudmFsdWUsIHYpO1xuICAgIH1cbiAgfTtcblxuICBTcGEucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoZnJvbSwgdG8sIGNhbGxiYWNrKSB7XG4gICAgLy8gcmVmZXJlbmNlc1xuICAgIHZhciBoZWFwID0gdGhpcy5faGVhcDtcbiAgICB2YXIgdmFsdWVzID0gdGhpcy5fdmFsdWVzOyAvLyBub2Rlc1xuXG4gICAgdmFyIG5vZGVzID0gW107IC8vIG5vZGUgd2l0aCBtaW5pbXVtIGtleSwgc2F2ZSBpdFxuXG4gICAgdmFyIG5vZGUgPSBoZWFwLmV4dHJhY3RNaW5pbXVtKCk7XG5cbiAgICBpZiAobm9kZSkge1xuICAgICAgbm9kZXMucHVzaChub2RlKTtcbiAgICB9IC8vIGV4dHJhY3Qgbm9kZXMgZnJvbSBoZWFwIChvcmRlcmVkKVxuXG5cbiAgICB3aGlsZSAobm9kZSAmJiBub2RlLmtleSA8PSB0bykge1xuICAgICAgLy8gY2hlY2sgaXQgaXMgaW4gcmFuZ2VcbiAgICAgIGlmIChub2RlLmtleSA+PSBmcm9tKSB7XG4gICAgICAgIC8vIGNoZWNrIHZhbHVlIGlzIG5vdCB6ZXJvXG4gICAgICAgIGlmICghZXF1YWxTY2FsYXIobm9kZS52YWx1ZSwgMCkpIHtcbiAgICAgICAgICAvLyBpbnZva2UgY2FsbGJhY2tcbiAgICAgICAgICBjYWxsYmFjayhub2RlLmtleSwgbm9kZS52YWx1ZSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gZXh0cmFjdCBuZXh0IG5vZGUsIHNhdmUgaXRcblxuXG4gICAgICBub2RlID0gaGVhcC5leHRyYWN0TWluaW11bSgpO1xuXG4gICAgICBpZiAobm9kZSkge1xuICAgICAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgIH0gLy8gcmVpbnNlcnQgYWxsIG5vZGVzIGluIGhlYXBcblxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgLy8gY3VycmVudCBub2RlXG4gICAgICB2YXIgbiA9IG5vZGVzW2ldOyAvLyBpbnNlcnQgbm9kZSBpbiBoZWFwXG5cbiAgICAgIG5vZGUgPSBoZWFwLmluc2VydChuLmtleSwgbi52YWx1ZSk7IC8vIHVwZGF0ZSB2YWx1ZXNcblxuICAgICAgdmFsdWVzW25vZGUua2V5XSA9IG5vZGU7XG4gICAgfVxuICB9O1xuXG4gIFNwYS5wcm90b3R5cGUuc3dhcCA9IGZ1bmN0aW9uIChpLCBqKSB7XG4gICAgLy8gbm9kZSBAIGkgYW5kIGpcbiAgICB2YXIgbm9kZWkgPSB0aGlzLl92YWx1ZXNbaV07XG4gICAgdmFyIG5vZGVqID0gdGhpcy5fdmFsdWVzW2pdOyAvLyBjaGVjayB3ZSBuZWVkIHRvIGluc2VydCBpbmRlY2VzXG5cbiAgICBpZiAoIW5vZGVpICYmIG5vZGVqKSB7XG4gICAgICAvLyBpbnNlcnQgaW4gaGVhcFxuICAgICAgbm9kZWkgPSB0aGlzLl9oZWFwLmluc2VydChpLCBub2Rlai52YWx1ZSk7IC8vIHJlbW92ZSBmcm9tIGhlYXBcblxuICAgICAgdGhpcy5faGVhcC5yZW1vdmUobm9kZWopOyAvLyBzZXQgdmFsdWVzXG5cblxuICAgICAgdGhpcy5fdmFsdWVzW2ldID0gbm9kZWk7XG4gICAgICB0aGlzLl92YWx1ZXNbal0gPSB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIGlmIChub2RlaSAmJiAhbm9kZWopIHtcbiAgICAgIC8vIGluc2VydCBpbiBoZWFwXG4gICAgICBub2RlaiA9IHRoaXMuX2hlYXAuaW5zZXJ0KGosIG5vZGVpLnZhbHVlKTsgLy8gcmVtb3ZlIGZyb20gaGVhcFxuXG4gICAgICB0aGlzLl9oZWFwLnJlbW92ZShub2RlaSk7IC8vIHNldCB2YWx1ZXNcblxuXG4gICAgICB0aGlzLl92YWx1ZXNbal0gPSBub2RlajtcbiAgICAgIHRoaXMuX3ZhbHVlc1tpXSA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2UgaWYgKG5vZGVpICYmIG5vZGVqKSB7XG4gICAgICAvLyBzd2FwIHZhbHVlc1xuICAgICAgdmFyIHYgPSBub2RlaS52YWx1ZTtcbiAgICAgIG5vZGVpLnZhbHVlID0gbm9kZWoudmFsdWU7XG4gICAgICBub2Rlai52YWx1ZSA9IHY7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBTcGE7XG59LCB7XG4gIGlzQ2xhc3M6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTcGFDbGFzcyA9IGNyZWF0ZVNwYUNsYXNzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTcGFyc2VNYXRyaXhDbGFzcyA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfRGltZW5zaW9uRXJyb3IgPSByZXF1aXJlKFwiLi4vLi4vZXJyb3IvRGltZW5zaW9uRXJyb3JcIik7XG5cbnZhciBuYW1lID0gJ1NwYXJzZU1hdHJpeCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdlcXVhbFNjYWxhcicsICdNYXRyaXgnXTtcbnZhciBjcmVhdGVTcGFyc2VNYXRyaXhDbGFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsXG4gICAgICBNYXRyaXggPSBfcmVmLk1hdHJpeDtcblxuICAvKipcbiAgICogU3BhcnNlIE1hdHJpeCBpbXBsZW1lbnRhdGlvbi4gVGhpcyB0eXBlIGltcGxlbWVudHMgYSBDb21wcmVzc2VkIENvbHVtbiBTdG9yYWdlIGZvcm1hdFxuICAgKiBmb3Igc3BhcnNlIG1hdHJpY2VzLlxuICAgKiBAY2xhc3MgU3BhcnNlTWF0cml4XG4gICAqL1xuICBmdW5jdGlvbiBTcGFyc2VNYXRyaXgoZGF0YSwgZGF0YXR5cGUpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU3BhcnNlTWF0cml4KSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YXR5cGUgJiYgISgwLCBfaXMuaXNTdHJpbmcpKGRhdGF0eXBlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGRhdGF0eXBlOiAnICsgZGF0YXR5cGUpO1xuICAgIH1cblxuICAgIGlmICgoMCwgX2lzLmlzTWF0cml4KShkYXRhKSkge1xuICAgICAgLy8gY3JlYXRlIGZyb20gbWF0cml4XG4gICAgICBfY3JlYXRlRnJvbU1hdHJpeCh0aGlzLCBkYXRhLCBkYXRhdHlwZSk7XG4gICAgfSBlbHNlIGlmIChkYXRhICYmICgwLCBfaXMuaXNBcnJheSkoZGF0YS5pbmRleCkgJiYgKDAsIF9pcy5pc0FycmF5KShkYXRhLnB0cikgJiYgKDAsIF9pcy5pc0FycmF5KShkYXRhLnNpemUpKSB7XG4gICAgICAvLyBpbml0aWFsaXplIGZpZWxkc1xuICAgICAgdGhpcy5fdmFsdWVzID0gZGF0YS52YWx1ZXM7XG4gICAgICB0aGlzLl9pbmRleCA9IGRhdGEuaW5kZXg7XG4gICAgICB0aGlzLl9wdHIgPSBkYXRhLnB0cjtcbiAgICAgIHRoaXMuX3NpemUgPSBkYXRhLnNpemU7XG4gICAgICB0aGlzLl9kYXRhdHlwZSA9IGRhdGF0eXBlIHx8IGRhdGEuZGF0YXR5cGU7XG4gICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQXJyYXkpKGRhdGEpKSB7XG4gICAgICAvLyBjcmVhdGUgZnJvbSBhcnJheVxuICAgICAgX2NyZWF0ZUZyb21BcnJheSh0aGlzLCBkYXRhLCBkYXRhdHlwZSk7XG4gICAgfSBlbHNlIGlmIChkYXRhKSB7XG4gICAgICAvLyB1bnN1cHBvcnRlZCB0eXBlXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbnN1cHBvcnRlZCB0eXBlIG9mIGRhdGEgKCcgKyAoMCwgX2lzLnR5cGVPZikoZGF0YSkgKyAnKScpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBub3RoaW5nIHByb3ZpZGVkXG4gICAgICB0aGlzLl92YWx1ZXMgPSBbXTtcbiAgICAgIHRoaXMuX2luZGV4ID0gW107XG4gICAgICB0aGlzLl9wdHIgPSBbMF07XG4gICAgICB0aGlzLl9zaXplID0gWzAsIDBdO1xuICAgICAgdGhpcy5fZGF0YXR5cGUgPSBkYXRhdHlwZTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBfY3JlYXRlRnJvbU1hdHJpeChtYXRyaXgsIHNvdXJjZSwgZGF0YXR5cGUpIHtcbiAgICAvLyBjaGVjayBtYXRyaXggdHlwZVxuICAgIGlmIChzb3VyY2UudHlwZSA9PT0gJ1NwYXJzZU1hdHJpeCcpIHtcbiAgICAgIC8vIGNsb25lIGFycmF5c1xuICAgICAgbWF0cml4Ll92YWx1ZXMgPSBzb3VyY2UuX3ZhbHVlcyA/ICgwLCBfb2JqZWN0LmNsb25lKShzb3VyY2UuX3ZhbHVlcykgOiB1bmRlZmluZWQ7XG4gICAgICBtYXRyaXguX2luZGV4ID0gKDAsIF9vYmplY3QuY2xvbmUpKHNvdXJjZS5faW5kZXgpO1xuICAgICAgbWF0cml4Ll9wdHIgPSAoMCwgX29iamVjdC5jbG9uZSkoc291cmNlLl9wdHIpO1xuICAgICAgbWF0cml4Ll9zaXplID0gKDAsIF9vYmplY3QuY2xvbmUpKHNvdXJjZS5fc2l6ZSk7XG4gICAgICBtYXRyaXguX2RhdGF0eXBlID0gZGF0YXR5cGUgfHwgc291cmNlLl9kYXRhdHlwZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYnVpbGQgZnJvbSBtYXRyaXggZGF0YVxuICAgICAgX2NyZWF0ZUZyb21BcnJheShtYXRyaXgsIHNvdXJjZS52YWx1ZU9mKCksIGRhdGF0eXBlIHx8IHNvdXJjZS5fZGF0YXR5cGUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIF9jcmVhdGVGcm9tQXJyYXkobWF0cml4LCBkYXRhLCBkYXRhdHlwZSkge1xuICAgIC8vIGluaXRpYWxpemUgZmllbGRzXG4gICAgbWF0cml4Ll92YWx1ZXMgPSBbXTtcbiAgICBtYXRyaXguX2luZGV4ID0gW107XG4gICAgbWF0cml4Ll9wdHIgPSBbXTtcbiAgICBtYXRyaXguX2RhdGF0eXBlID0gZGF0YXR5cGU7IC8vIGRpc2NvdmVyIHJvd3MgJiBjb2x1bW5zLCBkbyBub3QgdXNlIG1hdGguc2l6ZSgpIHRvIGF2b2lkIGxvb3BpbmcgYXJyYXkgdHdpY2VcblxuICAgIHZhciByb3dzID0gZGF0YS5sZW5ndGg7XG4gICAgdmFyIGNvbHVtbnMgPSAwOyAvLyBlcXVhbCBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgZXEgPSBlcXVhbFNjYWxhcjsgLy8gemVybyB2YWx1ZVxuXG4gICAgdmFyIHplcm8gPSAwO1xuXG4gICAgaWYgKCgwLCBfaXMuaXNTdHJpbmcpKGRhdGF0eXBlKSkge1xuICAgICAgLy8gZmluZCBzaWduYXR1cmUgdGhhdCBtYXRjaGVzIChkYXRhdHlwZSwgZGF0YXR5cGUpXG4gICAgICBlcSA9IHR5cGVkLmZpbmQoZXF1YWxTY2FsYXIsIFtkYXRhdHlwZSwgZGF0YXR5cGVdKSB8fCBlcXVhbFNjYWxhcjsgLy8gY29udmVydCAwIHRvIHRoZSBzYW1lIGRhdGF0eXBlXG5cbiAgICAgIHplcm8gPSB0eXBlZC5jb252ZXJ0KDAsIGRhdGF0eXBlKTtcbiAgICB9IC8vIGNoZWNrIHdlIGhhdmUgcm93cyAoZW1wdHkgYXJyYXkpXG5cblxuICAgIGlmIChyb3dzID4gMCkge1xuICAgICAgLy8gY29sdW1uIGluZGV4XG4gICAgICB2YXIgaiA9IDA7XG5cbiAgICAgIGRvIHtcbiAgICAgICAgLy8gc3RvcmUgcG9pbnRlciB0byB2YWx1ZXMgaW5kZXhcbiAgICAgICAgbWF0cml4Ll9wdHIucHVzaChtYXRyaXguX2luZGV4Lmxlbmd0aCk7IC8vIGxvb3Agcm93c1xuXG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgICAvLyBjdXJyZW50IHJvd1xuICAgICAgICAgIHZhciByb3cgPSBkYXRhW2ldOyAvLyBjaGVjayByb3cgaXMgYW4gYXJyYXlcblxuICAgICAgICAgIGlmICgoMCwgX2lzLmlzQXJyYXkpKHJvdykpIHtcbiAgICAgICAgICAgIC8vIHVwZGF0ZSBjb2x1bW5zIGlmIG5lZWRlZCAob25seSBvbiBmaXJzdCBjb2x1bW4pXG4gICAgICAgICAgICBpZiAoaiA9PT0gMCAmJiBjb2x1bW5zIDwgcm93Lmxlbmd0aCkge1xuICAgICAgICAgICAgICBjb2x1bW5zID0gcm93Lmxlbmd0aDtcbiAgICAgICAgICAgIH0gLy8gY2hlY2sgcm93IGhhcyBjb2x1bW5cblxuXG4gICAgICAgICAgICBpZiAoaiA8IHJvdy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgLy8gdmFsdWVcbiAgICAgICAgICAgICAgdmFyIHYgPSByb3dbal07IC8vIGNoZWNrIHZhbHVlICE9IDBcblxuICAgICAgICAgICAgICBpZiAoIWVxKHYsIHplcm8pKSB7XG4gICAgICAgICAgICAgICAgLy8gc3RvcmUgdmFsdWVcbiAgICAgICAgICAgICAgICBtYXRyaXguX3ZhbHVlcy5wdXNoKHYpOyAvLyBpbmRleFxuXG5cbiAgICAgICAgICAgICAgICBtYXRyaXguX2luZGV4LnB1c2goaSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gdXBkYXRlIGNvbHVtbnMgaWYgbmVlZGVkIChvbmx5IG9uIGZpcnN0IGNvbHVtbilcbiAgICAgICAgICAgIGlmIChqID09PSAwICYmIGNvbHVtbnMgPCAxKSB7XG4gICAgICAgICAgICAgIGNvbHVtbnMgPSAxO1xuICAgICAgICAgICAgfSAvLyBjaGVjayB2YWx1ZSAhPSAwIChyb3cgaXMgYSBzY2FsYXIpXG5cblxuICAgICAgICAgICAgaWYgKCFlcShyb3csIHplcm8pKSB7XG4gICAgICAgICAgICAgIC8vIHN0b3JlIHZhbHVlXG4gICAgICAgICAgICAgIG1hdHJpeC5fdmFsdWVzLnB1c2gocm93KTsgLy8gaW5kZXhcblxuXG4gICAgICAgICAgICAgIG1hdHJpeC5faW5kZXgucHVzaChpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gaW5jcmVtZW50IGluZGV4XG5cblxuICAgICAgICBqKys7XG4gICAgICB9IHdoaWxlIChqIDwgY29sdW1ucyk7XG4gICAgfSAvLyBzdG9yZSBudW1iZXIgb2YgdmFsdWVzIGluIHB0clxuXG5cbiAgICBtYXRyaXguX3B0ci5wdXNoKG1hdHJpeC5faW5kZXgubGVuZ3RoKTsgLy8gc2l6ZVxuXG5cbiAgICBtYXRyaXguX3NpemUgPSBbcm93cywgY29sdW1uc107XG4gIH1cblxuICBTcGFyc2VNYXRyaXgucHJvdG90eXBlID0gbmV3IE1hdHJpeCgpO1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IFNwYXJzZU1hdHJpeFxuICAgKi9cblxuICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLmNyZWF0ZVNwYXJzZU1hdHJpeCA9IGZ1bmN0aW9uIChkYXRhLCBkYXRhdHlwZSkge1xuICAgIHJldHVybiBuZXcgU3BhcnNlTWF0cml4KGRhdGEsIGRhdGF0eXBlKTtcbiAgfTtcbiAgLyoqXG4gICAqIEF0dGFjaCB0eXBlIGluZm9ybWF0aW9uXG4gICAqL1xuXG5cbiAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS50eXBlID0gJ1NwYXJzZU1hdHJpeCc7XG4gIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUuaXNTcGFyc2VNYXRyaXggPSB0cnVlO1xuICAvKipcbiAgICogR2V0IHRoZSBtYXRyaXggdHlwZVxuICAgKlxuICAgKiBVc2FnZTpcbiAgICogICAgY29uc3QgbWF0cml4VHlwZSA9IG1hdHJpeC5nZXREYXRhVHlwZSgpICAvLyByZXRyaWV2ZXMgdGhlIG1hdHJpeCB0eXBlXG4gICAqXG4gICAqIEBtZW1iZXJPZiBTcGFyc2VNYXRyaXhcbiAgICogQHJldHVybiB7c3RyaW5nfSAgIHR5cGUgaW5mb3JtYXRpb247IGlmIG11bHRpcGxlIHR5cGVzIGFyZSBmb3VuZCBmcm9tIHRoZSBNYXRyaXgsIGl0IHdpbGwgcmV0dXJuIFwibWl4ZWRcIlxuICAgKi9cblxuICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLmdldERhdGFUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAoMCwgX2FycmF5LmdldEFycmF5RGF0YVR5cGUpKHRoaXMuX3ZhbHVlcywgX2lzLnR5cGVPZik7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgdGhlIHN0b3JhZ2UgZm9ybWF0IHVzZWQgYnkgdGhlIG1hdHJpeC5cbiAgICpcbiAgICogVXNhZ2U6XG4gICAqICAgICBjb25zdCBmb3JtYXQgPSBtYXRyaXguc3RvcmFnZSgpICAgLy8gcmV0cmlldmUgc3RvcmFnZSBmb3JtYXRcbiAgICpcbiAgICogQG1lbWJlcm9mIFNwYXJzZU1hdHJpeFxuICAgKiBAcmV0dXJuIHtzdHJpbmd9ICAgICAgICAgICBUaGUgc3RvcmFnZSBmb3JtYXQuXG4gICAqL1xuXG5cbiAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS5zdG9yYWdlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAnc3BhcnNlJztcbiAgfTtcbiAgLyoqXG4gICAqIEdldCB0aGUgZGF0YXR5cGUgb2YgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBtYXRyaXguXG4gICAqXG4gICAqIFVzYWdlOlxuICAgKiAgICAgY29uc3QgZm9ybWF0ID0gbWF0cml4LmRhdGF0eXBlKCkgICAgLy8gcmV0cmlldmUgbWF0cml4IGRhdGF0eXBlXG4gICAqXG4gICAqIEBtZW1iZXJvZiBTcGFyc2VNYXRyaXhcbiAgICogQHJldHVybiB7c3RyaW5nfSAgICAgICAgICAgVGhlIGRhdGF0eXBlLlxuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUuZGF0YXR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGF0eXBlO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IFNwYXJzZU1hdHJpeFxuICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4XG4gICAqIEBwYXJhbSB7QXJyYXl9IGRhdGFcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkYXRhdHlwZV1cbiAgICovXG5cblxuICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLmNyZWF0ZSA9IGZ1bmN0aW9uIChkYXRhLCBkYXRhdHlwZSkge1xuICAgIHJldHVybiBuZXcgU3BhcnNlTWF0cml4KGRhdGEsIGRhdGF0eXBlKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCB0aGUgbWF0cml4IGRlbnNpdHkuXG4gICAqXG4gICAqIFVzYWdlOlxuICAgKiAgICAgY29uc3QgZGVuc2l0eSA9IG1hdHJpeC5kZW5zaXR5KCkgICAgICAgICAgICAgICAgICAgLy8gcmV0cmlldmUgbWF0cml4IGRlbnNpdHlcbiAgICpcbiAgICogQG1lbWJlcm9mIFNwYXJzZU1hdHJpeFxuICAgKiBAcmV0dXJuIHtudW1iZXJ9ICAgICAgICAgICBUaGUgbWF0cml4IGRlbnNpdHkuXG4gICAqL1xuXG5cbiAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS5kZW5zaXR5ID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIHJvd3MgJiBjb2x1bW5zXG4gICAgdmFyIHJvd3MgPSB0aGlzLl9zaXplWzBdO1xuICAgIHZhciBjb2x1bW5zID0gdGhpcy5fc2l6ZVsxXTsgLy8gY2FsY3VsYXRlIGRlbnNpdHlcblxuICAgIHJldHVybiByb3dzICE9PSAwICYmIGNvbHVtbnMgIT09IDAgPyB0aGlzLl9pbmRleC5sZW5ndGggLyAocm93cyAqIGNvbHVtbnMpIDogMDtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIHN1YnNldCBvZiB0aGUgbWF0cml4LCBvciByZXBsYWNlIGEgc3Vic2V0IG9mIHRoZSBtYXRyaXguXG4gICAqXG4gICAqIFVzYWdlOlxuICAgKiAgICAgY29uc3Qgc3Vic2V0ID0gbWF0cml4LnN1YnNldChpbmRleCkgICAgICAgICAgICAgICAvLyByZXRyaWV2ZSBzdWJzZXRcbiAgICogICAgIGNvbnN0IHZhbHVlID0gbWF0cml4LnN1YnNldChpbmRleCwgcmVwbGFjZW1lbnQpICAgLy8gcmVwbGFjZSBzdWJzZXRcbiAgICpcbiAgICogQG1lbWJlcm9mIFNwYXJzZU1hdHJpeFxuICAgKiBAcGFyYW0ge0luZGV4fSBpbmRleFxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4IHwgKn0gW3JlcGxhY2VtZW50XVxuICAgKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWU9MF0gICAgICBEZWZhdWx0IHZhbHVlLCBmaWxsZWQgaW4gb24gbmV3IGVudHJpZXMgd2hlblxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWF0cml4IGlzIHJlc2l6ZWQuIElmIG5vdCBwcm92aWRlZCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IG1hdHJpeCBlbGVtZW50cyB3aWxsIGJlIGZpbGxlZCB3aXRoIHplcm9zLlxuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUuc3Vic2V0ID0gZnVuY3Rpb24gKGluZGV4LCByZXBsYWNlbWVudCwgZGVmYXVsdFZhbHVlKSB7XG4gICAgLy8gY2hlY2sgaXQgaXMgYSBwYXR0ZXJuIG1hdHJpeFxuICAgIGlmICghdGhpcy5fdmFsdWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBpbnZva2Ugc3Vic2V0IG9uIGEgUGF0dGVybiBvbmx5IG1hdHJpeCcpO1xuICAgIH0gLy8gY2hlY2sgYXJndW1lbnRzXG5cblxuICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gX2dldHN1YnNldCh0aGlzLCBpbmRleCk7XG4gICAgICAvLyBpbnRlbnRpb25hbCBmYWxsIHRocm91Z2hcblxuICAgICAgY2FzZSAyOlxuICAgICAgY2FzZSAzOlxuICAgICAgICByZXR1cm4gX3NldHN1YnNldCh0aGlzLCBpbmRleCwgcmVwbGFjZW1lbnQsIGRlZmF1bHRWYWx1ZSk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cycpO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBfZ2V0c3Vic2V0KG1hdHJpeCwgaWR4KSB7XG4gICAgLy8gY2hlY2sgaWR4XG4gICAgaWYgKCEoMCwgX2lzLmlzSW5kZXgpKGlkeCkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgaW5kZXgnKTtcbiAgICB9XG5cbiAgICB2YXIgaXNTY2FsYXIgPSBpZHguaXNTY2FsYXIoKTtcblxuICAgIGlmIChpc1NjYWxhcikge1xuICAgICAgLy8gcmV0dXJuIGEgc2NhbGFyXG4gICAgICByZXR1cm4gbWF0cml4LmdldChpZHgubWluKCkpO1xuICAgIH0gLy8gdmFsaWRhdGUgZGltZW5zaW9uc1xuXG5cbiAgICB2YXIgc2l6ZSA9IGlkeC5zaXplKCk7XG5cbiAgICBpZiAoc2l6ZS5sZW5ndGggIT09IG1hdHJpeC5fc2l6ZS5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3Ioc2l6ZS5sZW5ndGgsIG1hdHJpeC5fc2l6ZS5sZW5ndGgpO1xuICAgIH0gLy8gdmFyc1xuXG5cbiAgICB2YXIgaSwgaWksIGssIGtrOyAvLyB2YWxpZGF0ZSBpZiBhbnkgb2YgdGhlIHJhbmdlcyBpbiB0aGUgaW5kZXggaXMgb3V0IG9mIHJhbmdlXG5cbiAgICB2YXIgbWluID0gaWR4Lm1pbigpO1xuICAgIHZhciBtYXggPSBpZHgubWF4KCk7XG5cbiAgICBmb3IgKGkgPSAwLCBpaSA9IG1hdHJpeC5fc2l6ZS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKG1pbltpXSwgbWF0cml4Ll9zaXplW2ldKTtcbiAgICAgICgwLCBfYXJyYXkudmFsaWRhdGVJbmRleCkobWF4W2ldLCBtYXRyaXguX3NpemVbaV0pO1xuICAgIH0gLy8gbWF0cml4IGFycmF5c1xuXG5cbiAgICB2YXIgbXZhbHVlcyA9IG1hdHJpeC5fdmFsdWVzO1xuICAgIHZhciBtaW5kZXggPSBtYXRyaXguX2luZGV4O1xuICAgIHZhciBtcHRyID0gbWF0cml4Ll9wdHI7IC8vIHJvd3MgJiBjb2x1bW5zIGRpbWVuc2lvbnMgZm9yIHJlc3VsdCBtYXRyaXhcblxuICAgIHZhciByb3dzID0gaWR4LmRpbWVuc2lvbigwKTtcbiAgICB2YXIgY29sdW1ucyA9IGlkeC5kaW1lbnNpb24oMSk7IC8vIHdvcmtzcGFjZSAmIHBlcm11dGF0aW9uIHZlY3RvclxuXG4gICAgdmFyIHcgPSBbXTtcbiAgICB2YXIgcHYgPSBbXTsgLy8gbG9vcCByb3dzIGluIHJlc3VsdGluZyBtYXRyaXhcblxuICAgIHJvd3MuZm9yRWFjaChmdW5jdGlvbiAoaSwgcikge1xuICAgICAgLy8gdXBkYXRlIHBlcm11dGF0aW9uIHZlY3RvclxuICAgICAgcHZbaV0gPSByWzBdOyAvLyBtYXJrIGkgaW4gd29ya3NwYWNlXG5cbiAgICAgIHdbaV0gPSB0cnVlO1xuICAgIH0pOyAvLyByZXN1bHQgbWF0cml4IGFycmF5c1xuXG4gICAgdmFyIHZhbHVlcyA9IG12YWx1ZXMgPyBbXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgaW5kZXggPSBbXTtcbiAgICB2YXIgcHRyID0gW107IC8vIGxvb3AgY29sdW1ucyBpbiByZXN1bHQgbWF0cml4XG5cbiAgICBjb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGopIHtcbiAgICAgIC8vIHVwZGF0ZSBwdHJcbiAgICAgIHB0ci5wdXNoKGluZGV4Lmxlbmd0aCk7IC8vIGxvb3AgdmFsdWVzIGluIGNvbHVtbiBqXG5cbiAgICAgIGZvciAoayA9IG1wdHJbal0sIGtrID0gbXB0cltqICsgMV07IGsgPCBrazsgaysrKSB7XG4gICAgICAgIC8vIHJvd1xuICAgICAgICBpID0gbWluZGV4W2tdOyAvLyBjaGVjayByb3cgaXMgaW4gcmVzdWx0IG1hdHJpeFxuXG4gICAgICAgIGlmICh3W2ldID09PSB0cnVlKSB7XG4gICAgICAgICAgLy8gcHVzaCBpbmRleFxuICAgICAgICAgIGluZGV4LnB1c2gocHZbaV0pOyAvLyBjaGVjayB3ZSBuZWVkIHRvIHByb2Nlc3MgdmFsdWVzXG5cbiAgICAgICAgICBpZiAodmFsdWVzKSB7XG4gICAgICAgICAgICB2YWx1ZXMucHVzaChtdmFsdWVzW2tdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTsgLy8gdXBkYXRlIHB0clxuXG4gICAgcHRyLnB1c2goaW5kZXgubGVuZ3RoKTsgLy8gcmV0dXJuIG1hdHJpeFxuXG4gICAgcmV0dXJuIG5ldyBTcGFyc2VNYXRyaXgoe1xuICAgICAgdmFsdWVzOiB2YWx1ZXMsXG4gICAgICBpbmRleDogaW5kZXgsXG4gICAgICBwdHI6IHB0cixcbiAgICAgIHNpemU6IHNpemUsXG4gICAgICBkYXRhdHlwZTogbWF0cml4Ll9kYXRhdHlwZVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gX3NldHN1YnNldChtYXRyaXgsIGluZGV4LCBzdWJtYXRyaXgsIGRlZmF1bHRWYWx1ZSkge1xuICAgIC8vIGNoZWNrIGluZGV4XG4gICAgaWYgKCFpbmRleCB8fCBpbmRleC5pc0luZGV4ICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGluZGV4Jyk7XG4gICAgfSAvLyBnZXQgaW5kZXggc2l6ZSBhbmQgY2hlY2sgd2hldGhlciB0aGUgaW5kZXggY29udGFpbnMgYSBzaW5nbGUgdmFsdWVcblxuXG4gICAgdmFyIGlTaXplID0gaW5kZXguc2l6ZSgpO1xuICAgIHZhciBpc1NjYWxhciA9IGluZGV4LmlzU2NhbGFyKCk7IC8vIGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiB0aGUgc3VibWF0cml4LCBhbmQgY29udmVydCBpdCBpbnRvIGFuIEFycmF5IGlmIG5lZWRlZFxuXG4gICAgdmFyIHNTaXplO1xuXG4gICAgaWYgKCgwLCBfaXMuaXNNYXRyaXgpKHN1Ym1hdHJpeCkpIHtcbiAgICAgIC8vIHN1Ym1hdHJpeCBzaXplXG4gICAgICBzU2l6ZSA9IHN1Ym1hdHJpeC5zaXplKCk7IC8vIHVzZSBhcnJheSByZXByZXNlbnRhdGlvblxuXG4gICAgICBzdWJtYXRyaXggPSBzdWJtYXRyaXgudG9BcnJheSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBnZXQgc3VibWF0cml4IHNpemUgKGFycmF5LCBzY2FsYXIpXG4gICAgICBzU2l6ZSA9ICgwLCBfYXJyYXkuYXJyYXlTaXplKShzdWJtYXRyaXgpO1xuICAgIH0gLy8gY2hlY2sgaW5kZXggaXMgYSBzY2FsYXJcblxuXG4gICAgaWYgKGlzU2NhbGFyKSB7XG4gICAgICAvLyB2ZXJpZnkgc3VibWF0cml4IGlzIGEgc2NhbGFyXG4gICAgICBpZiAoc1NpemUubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1NjYWxhciBleHBlY3RlZCcpO1xuICAgICAgfSAvLyBzZXQgdmFsdWVcblxuXG4gICAgICBtYXRyaXguc2V0KGluZGV4Lm1pbigpLCBzdWJtYXRyaXgsIGRlZmF1bHRWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHZhbGlkYXRlIGRpbWVuc2lvbnMsIGluZGV4IHNpemUgbXVzdCBiZSBvbmUgb3IgdHdvIGRpbWVuc2lvbnNcbiAgICAgIGlmIChpU2l6ZS5sZW5ndGggIT09IDEgJiYgaVNpemUubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3IoaVNpemUubGVuZ3RoLCBtYXRyaXguX3NpemUubGVuZ3RoLCAnPCcpO1xuICAgICAgfSAvLyBjaGVjayBzdWJtYXRyaXggYW5kIGluZGV4IGhhdmUgdGhlIHNhbWUgZGltZW5zaW9uc1xuXG5cbiAgICAgIGlmIChzU2l6ZS5sZW5ndGggPCBpU2l6ZS5sZW5ndGgpIHtcbiAgICAgICAgLy8gY2FsY3VsYXRlIG51bWJlciBvZiBtaXNzaW5nIG91dGVyIGRpbWVuc2lvbnNcbiAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICB2YXIgb3V0ZXIgPSAwO1xuXG4gICAgICAgIHdoaWxlIChpU2l6ZVtpXSA9PT0gMSAmJiBzU2l6ZVtpXSA9PT0gMSkge1xuICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlIChpU2l6ZVtpXSA9PT0gMSkge1xuICAgICAgICAgIG91dGVyKys7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9IC8vIHVuc3F1ZWV6ZSBib3RoIG91dGVyIGFuZCBpbm5lciBkaW1lbnNpb25zXG5cblxuICAgICAgICBzdWJtYXRyaXggPSAoMCwgX2FycmF5LnVuc3F1ZWV6ZSkoc3VibWF0cml4LCBpU2l6ZS5sZW5ndGgsIG91dGVyLCBzU2l6ZSk7XG4gICAgICB9IC8vIGNoZWNrIHdoZXRoZXIgdGhlIHNpemUgb2YgdGhlIHN1Ym1hdHJpeCBtYXRjaGVzIHRoZSBpbmRleCBzaXplXG5cblxuICAgICAgaWYgKCEoMCwgX29iamVjdC5kZWVwU3RyaWN0RXF1YWwpKGlTaXplLCBzU2l6ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihpU2l6ZSwgc1NpemUsICc+Jyk7XG4gICAgICB9IC8vIG9mZnNldHNcblxuXG4gICAgICB2YXIgeDAgPSBpbmRleC5taW4oKVswXTtcbiAgICAgIHZhciB5MCA9IGluZGV4Lm1pbigpWzFdOyAvLyBzdWJtYXRyaXggcm93cyBhbmQgY29sdW1uc1xuXG4gICAgICB2YXIgbSA9IHNTaXplWzBdO1xuICAgICAgdmFyIG4gPSBzU2l6ZVsxXTsgLy8gbG9vcCBzdWJtYXRyaXhcblxuICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCBtOyB4KyspIHtcbiAgICAgICAgLy8gbG9vcCBjb2x1bW5zXG4gICAgICAgIGZvciAodmFyIHkgPSAwOyB5IDwgbjsgeSsrKSB7XG4gICAgICAgICAgLy8gdmFsdWUgYXQgaSwgalxuICAgICAgICAgIHZhciB2ID0gc3VibWF0cml4W3hdW3ldOyAvLyBpbnZva2Ugc2V0ICh6ZXJvIHZhbHVlIHdpbGwgcmVtb3ZlIGVudHJ5IGZyb20gbWF0cml4KVxuXG4gICAgICAgICAgbWF0cml4LnNldChbeCArIHgwLCB5ICsgeTBdLCB2LCBkZWZhdWx0VmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdHJpeDtcbiAgfVxuICAvKipcbiAgICogR2V0IGEgc2luZ2xlIGVsZW1lbnQgZnJvbSB0aGUgbWF0cml4LlxuICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4XG4gICAqIEBwYXJhbSB7bnVtYmVyW119IGluZGV4ICAgWmVyby1iYXNlZCBpbmRleFxuICAgKiBAcmV0dXJuIHsqfSB2YWx1ZVxuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgaWYgKCEoMCwgX2lzLmlzQXJyYXkpKGluZGV4KSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgZXhwZWN0ZWQnKTtcbiAgICB9XG5cbiAgICBpZiAoaW5kZXgubGVuZ3RoICE9PSB0aGlzLl9zaXplLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihpbmRleC5sZW5ndGgsIHRoaXMuX3NpemUubGVuZ3RoKTtcbiAgICB9IC8vIGNoZWNrIGl0IGlzIGEgcGF0dGVybiBtYXRyaXhcblxuXG4gICAgaWYgKCF0aGlzLl92YWx1ZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSBnZXQgb24gYSBQYXR0ZXJuIG9ubHkgbWF0cml4Jyk7XG4gICAgfSAvLyByb3cgYW5kIGNvbHVtblxuXG5cbiAgICB2YXIgaSA9IGluZGV4WzBdO1xuICAgIHZhciBqID0gaW5kZXhbMV07IC8vIGNoZWNrIGksIGogYXJlIHZhbGlkXG5cbiAgICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKGksIHRoaXMuX3NpemVbMF0pO1xuICAgICgwLCBfYXJyYXkudmFsaWRhdGVJbmRleCkoaiwgdGhpcy5fc2l6ZVsxXSk7IC8vIGZpbmQgdmFsdWUgaW5kZXhcblxuICAgIHZhciBrID0gX2dldFZhbHVlSW5kZXgoaSwgdGhpcy5fcHRyW2pdLCB0aGlzLl9wdHJbaiArIDFdLCB0aGlzLl9pbmRleCk7IC8vIGNoZWNrIGsgaXMgcHJpb3IgdG8gbmV4dCBjb2x1bW4gayBhbmQgaXQgaXMgaW4gdGhlIGNvcnJlY3Qgcm93XG5cblxuICAgIGlmIChrIDwgdGhpcy5fcHRyW2ogKyAxXSAmJiB0aGlzLl9pbmRleFtrXSA9PT0gaSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlc1trXTtcbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfTtcbiAgLyoqXG4gICAqIFJlcGxhY2UgYSBzaW5nbGUgZWxlbWVudCBpbiB0aGUgbWF0cml4LlxuICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4XG4gICAqIEBwYXJhbSB7bnVtYmVyW119IGluZGV4ICAgWmVyby1iYXNlZCBpbmRleFxuICAgKiBAcGFyYW0geyp9IHZcbiAgICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXSAgICAgICAgRGVmYXVsdCB2YWx1ZSwgZmlsbGVkIGluIG9uIG5ldyBlbnRyaWVzIHdoZW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hdHJpeCBpcyByZXNpemVkLiBJZiBub3QgcHJvdmlkZWQsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBtYXRyaXggZWxlbWVudHMgd2lsbCBiZSBzZXQgdG8gemVyby5cbiAgICogQHJldHVybiB7U3BhcnNlTWF0cml4fSBzZWxmXG4gICAqL1xuXG5cbiAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoaW5kZXgsIHYsIGRlZmF1bHRWYWx1ZSkge1xuICAgIGlmICghKDAsIF9pcy5pc0FycmF5KShpbmRleCkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IGV4cGVjdGVkJyk7XG4gICAgfVxuXG4gICAgaWYgKGluZGV4Lmxlbmd0aCAhPT0gdGhpcy5fc2l6ZS5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3IoaW5kZXgubGVuZ3RoLCB0aGlzLl9zaXplLmxlbmd0aCk7XG4gICAgfSAvLyBjaGVjayBpdCBpcyBhIHBhdHRlcm4gbWF0cml4XG5cblxuICAgIGlmICghdGhpcy5fdmFsdWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBpbnZva2Ugc2V0IG9uIGEgUGF0dGVybiBvbmx5IG1hdHJpeCcpO1xuICAgIH0gLy8gcm93IGFuZCBjb2x1bW5cblxuXG4gICAgdmFyIGkgPSBpbmRleFswXTtcbiAgICB2YXIgaiA9IGluZGV4WzFdOyAvLyByb3dzICYgY29sdW1uc1xuXG4gICAgdmFyIHJvd3MgPSB0aGlzLl9zaXplWzBdO1xuICAgIHZhciBjb2x1bW5zID0gdGhpcy5fc2l6ZVsxXTsgLy8gZXF1YWwgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGVxID0gZXF1YWxTY2FsYXI7IC8vIHplcm8gdmFsdWVcblxuICAgIHZhciB6ZXJvID0gMDtcblxuICAgIGlmICgoMCwgX2lzLmlzU3RyaW5nKSh0aGlzLl9kYXRhdHlwZSkpIHtcbiAgICAgIC8vIGZpbmQgc2lnbmF0dXJlIHRoYXQgbWF0Y2hlcyAoZGF0YXR5cGUsIGRhdGF0eXBlKVxuICAgICAgZXEgPSB0eXBlZC5maW5kKGVxdWFsU2NhbGFyLCBbdGhpcy5fZGF0YXR5cGUsIHRoaXMuX2RhdGF0eXBlXSkgfHwgZXF1YWxTY2FsYXI7IC8vIGNvbnZlcnQgMCB0byB0aGUgc2FtZSBkYXRhdHlwZVxuXG4gICAgICB6ZXJvID0gdHlwZWQuY29udmVydCgwLCB0aGlzLl9kYXRhdHlwZSk7XG4gICAgfSAvLyBjaGVjayB3ZSBuZWVkIHRvIHJlc2l6ZSBtYXRyaXhcblxuXG4gICAgaWYgKGkgPiByb3dzIC0gMSB8fCBqID4gY29sdW1ucyAtIDEpIHtcbiAgICAgIC8vIHJlc2l6ZSBtYXRyaXhcbiAgICAgIF9yZXNpemUodGhpcywgTWF0aC5tYXgoaSArIDEsIHJvd3MpLCBNYXRoLm1heChqICsgMSwgY29sdW1ucyksIGRlZmF1bHRWYWx1ZSk7IC8vIHVwZGF0ZSByb3dzICYgY29sdW1uc1xuXG5cbiAgICAgIHJvd3MgPSB0aGlzLl9zaXplWzBdO1xuICAgICAgY29sdW1ucyA9IHRoaXMuX3NpemVbMV07XG4gICAgfSAvLyBjaGVjayBpLCBqIGFyZSB2YWxpZFxuXG5cbiAgICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKGksIHJvd3MpO1xuICAgICgwLCBfYXJyYXkudmFsaWRhdGVJbmRleCkoaiwgY29sdW1ucyk7IC8vIGZpbmQgdmFsdWUgaW5kZXhcblxuICAgIHZhciBrID0gX2dldFZhbHVlSW5kZXgoaSwgdGhpcy5fcHRyW2pdLCB0aGlzLl9wdHJbaiArIDFdLCB0aGlzLl9pbmRleCk7IC8vIGNoZWNrIGsgaXMgcHJpb3IgdG8gbmV4dCBjb2x1bW4gayBhbmQgaXQgaXMgaW4gdGhlIGNvcnJlY3Qgcm93XG5cblxuICAgIGlmIChrIDwgdGhpcy5fcHRyW2ogKyAxXSAmJiB0aGlzLl9pbmRleFtrXSA9PT0gaSkge1xuICAgICAgLy8gY2hlY2sgdmFsdWUgIT0gMFxuICAgICAgaWYgKCFlcSh2LCB6ZXJvKSkge1xuICAgICAgICAvLyB1cGRhdGUgdmFsdWVcbiAgICAgICAgdGhpcy5fdmFsdWVzW2tdID0gdjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHJlbW92ZSB2YWx1ZSBmcm9tIG1hdHJpeFxuICAgICAgICBfcmVtb3ZlKGssIGosIHRoaXMuX3ZhbHVlcywgdGhpcy5faW5kZXgsIHRoaXMuX3B0cik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGluc2VydCB2YWx1ZSBAIChpLCBqKVxuICAgICAgX2luc2VydChrLCBpLCBqLCB2LCB0aGlzLl92YWx1ZXMsIHRoaXMuX2luZGV4LCB0aGlzLl9wdHIpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIGZ1bmN0aW9uIF9nZXRWYWx1ZUluZGV4KGksIHRvcCwgYm90dG9tLCBpbmRleCkge1xuICAgIC8vIGNoZWNrIHJvdyBpcyBvbiB0aGUgYm90dG9tIHNpZGVcbiAgICBpZiAoYm90dG9tIC0gdG9wID09PSAwKSB7XG4gICAgICByZXR1cm4gYm90dG9tO1xuICAgIH0gLy8gbG9vcCByb3dzIFt0b3AsIGJvdHRvbVtcblxuXG4gICAgZm9yICh2YXIgciA9IHRvcDsgciA8IGJvdHRvbTsgcisrKSB7XG4gICAgICAvLyBjaGVjayB3ZSBmb3VuZCB2YWx1ZSBpbmRleFxuICAgICAgaWYgKGluZGV4W3JdID09PSBpKSB7XG4gICAgICAgIHJldHVybiByO1xuICAgICAgfVxuICAgIH0gLy8gd2UgZGlkIG5vdCBmaW5kIHJvd1xuXG5cbiAgICByZXR1cm4gdG9wO1xuICB9XG5cbiAgZnVuY3Rpb24gX3JlbW92ZShrLCBqLCB2YWx1ZXMsIGluZGV4LCBwdHIpIHtcbiAgICAvLyByZW1vdmUgdmFsdWUgQCBrXG4gICAgdmFsdWVzLnNwbGljZShrLCAxKTtcbiAgICBpbmRleC5zcGxpY2UoaywgMSk7IC8vIHVwZGF0ZSBwb2ludGVyc1xuXG4gICAgZm9yICh2YXIgeCA9IGogKyAxOyB4IDwgcHRyLmxlbmd0aDsgeCsrKSB7XG4gICAgICBwdHJbeF0tLTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBfaW5zZXJ0KGssIGksIGosIHYsIHZhbHVlcywgaW5kZXgsIHB0cikge1xuICAgIC8vIGluc2VydCB2YWx1ZVxuICAgIHZhbHVlcy5zcGxpY2UoaywgMCwgdik7IC8vIHVwZGF0ZSByb3cgZm9yIGtcblxuICAgIGluZGV4LnNwbGljZShrLCAwLCBpKTsgLy8gdXBkYXRlIGNvbHVtbiBwb2ludGVyc1xuXG4gICAgZm9yICh2YXIgeCA9IGogKyAxOyB4IDwgcHRyLmxlbmd0aDsgeCsrKSB7XG4gICAgICBwdHJbeF0rKztcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJlc2l6ZSB0aGUgbWF0cml4IHRvIHRoZSBnaXZlbiBzaXplLiBSZXR1cm5zIGEgY29weSBvZiB0aGUgbWF0cml4IHdoZW5cbiAgICogYGNvcHk9dHJ1ZWAsIG90aGVyd2lzZSByZXR1cm4gdGhlIG1hdHJpeCBpdHNlbGYgKHJlc2l6ZSBpbiBwbGFjZSkuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBTcGFyc2VNYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJbXX0gc2l6ZSAgICAgICAgICAgVGhlIG5ldyBzaXplIHRoZSBtYXRyaXggc2hvdWxkIGhhdmUuXG4gICAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZT0wXSAgICAgIERlZmF1bHQgdmFsdWUsIGZpbGxlZCBpbiBvbiBuZXcgZW50cmllcy5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgbm90IHByb3ZpZGVkLCB0aGUgbWF0cml4IGVsZW1lbnRzIHdpbGxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgZmlsbGVkIHdpdGggemVyb3MuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NvcHldICAgICAgICAgIFJldHVybiBhIHJlc2l6ZWQgY29weSBvZiB0aGUgbWF0cml4XG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgIFRoZSByZXNpemVkIG1hdHJpeFxuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHNpemUsIGRlZmF1bHRWYWx1ZSwgY29weSkge1xuICAgIC8vIHZhbGlkYXRlIGFyZ3VtZW50c1xuICAgIGlmICghKDAsIF9pcy5pc0FycmF5KShzaXplKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgZXhwZWN0ZWQnKTtcbiAgICB9XG5cbiAgICBpZiAoc2l6ZS5sZW5ndGggIT09IDIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT25seSB0d28gZGltZW5zaW9ucyBtYXRyaXggYXJlIHN1cHBvcnRlZCcpO1xuICAgIH0gLy8gY2hlY2sgc2l6ZXNcblxuXG4gICAgc2l6ZS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgaWYgKCEoMCwgX2lzLmlzTnVtYmVyKSh2YWx1ZSkgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikodmFsdWUpIHx8IHZhbHVlIDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHNpemUsIG11c3QgY29udGFpbiBwb3NpdGl2ZSBpbnRlZ2VycyAnICsgJyhzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShzaXplKSArICcpJyk7XG4gICAgICB9XG4gICAgfSk7IC8vIG1hdHJpeCB0byByZXNpemVcblxuICAgIHZhciBtID0gY29weSA/IHRoaXMuY2xvbmUoKSA6IHRoaXM7IC8vIHJlc2l6ZSBtYXRyaXhcblxuICAgIHJldHVybiBfcmVzaXplKG0sIHNpemVbMF0sIHNpemVbMV0sIGRlZmF1bHRWYWx1ZSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gX3Jlc2l6ZShtYXRyaXgsIHJvd3MsIGNvbHVtbnMsIGRlZmF1bHRWYWx1ZSkge1xuICAgIC8vIHZhbHVlIHRvIGluc2VydCBhdCB0aGUgdGltZSBvZiBncm93aW5nIG1hdHJpeFxuICAgIHZhciB2YWx1ZSA9IGRlZmF1bHRWYWx1ZSB8fCAwOyAvLyBlcXVhbCBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgZXEgPSBlcXVhbFNjYWxhcjsgLy8gemVybyB2YWx1ZVxuXG4gICAgdmFyIHplcm8gPSAwO1xuXG4gICAgaWYgKCgwLCBfaXMuaXNTdHJpbmcpKG1hdHJpeC5fZGF0YXR5cGUpKSB7XG4gICAgICAvLyBmaW5kIHNpZ25hdHVyZSB0aGF0IG1hdGNoZXMgKGRhdGF0eXBlLCBkYXRhdHlwZSlcbiAgICAgIGVxID0gdHlwZWQuZmluZChlcXVhbFNjYWxhciwgW21hdHJpeC5fZGF0YXR5cGUsIG1hdHJpeC5fZGF0YXR5cGVdKSB8fCBlcXVhbFNjYWxhcjsgLy8gY29udmVydCAwIHRvIHRoZSBzYW1lIGRhdGF0eXBlXG5cbiAgICAgIHplcm8gPSB0eXBlZC5jb252ZXJ0KDAsIG1hdHJpeC5fZGF0YXR5cGUpOyAvLyBjb252ZXJ0IHZhbHVlIHRvIHRoZSBzYW1lIGRhdGF0eXBlXG5cbiAgICAgIHZhbHVlID0gdHlwZWQuY29udmVydCh2YWx1ZSwgbWF0cml4Ll9kYXRhdHlwZSk7XG4gICAgfSAvLyBzaG91bGQgd2UgaW5zZXJ0IHRoZSB2YWx1ZT9cblxuXG4gICAgdmFyIGlucyA9ICFlcSh2YWx1ZSwgemVybyk7IC8vIG9sZCBjb2x1bW5zIGFuZCByb3dzXG5cbiAgICB2YXIgciA9IG1hdHJpeC5fc2l6ZVswXTtcbiAgICB2YXIgYyA9IG1hdHJpeC5fc2l6ZVsxXTtcbiAgICB2YXIgaSwgaiwgazsgLy8gY2hlY2sgd2UgbmVlZCB0byBpbmNyZWFzZSBjb2x1bW5zXG5cbiAgICBpZiAoY29sdW1ucyA+IGMpIHtcbiAgICAgIC8vIGxvb3AgbmV3IGNvbHVtbnNcbiAgICAgIGZvciAoaiA9IGM7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgICAgLy8gdXBkYXRlIG1hdHJpeC5fcHRyIGZvciBjdXJyZW50IGNvbHVtblxuICAgICAgICBtYXRyaXguX3B0cltqXSA9IG1hdHJpeC5fdmFsdWVzLmxlbmd0aDsgLy8gY2hlY2sgd2UgbmVlZCB0byBpbnNlcnQgbWF0cml4Ll92YWx1ZXNcblxuICAgICAgICBpZiAoaW5zKSB7XG4gICAgICAgICAgLy8gbG9vcCByb3dzXG4gICAgICAgICAgZm9yIChpID0gMDsgaSA8IHI7IGkrKykge1xuICAgICAgICAgICAgLy8gYWRkIG5ldyBtYXRyaXguX3ZhbHVlc1xuICAgICAgICAgICAgbWF0cml4Ll92YWx1ZXMucHVzaCh2YWx1ZSk7IC8vIHVwZGF0ZSBtYXRyaXguX2luZGV4XG5cblxuICAgICAgICAgICAgbWF0cml4Ll9pbmRleC5wdXNoKGkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSAvLyBzdG9yZSBudW1iZXIgb2YgbWF0cml4Ll92YWx1ZXMgaW4gbWF0cml4Ll9wdHJcblxuXG4gICAgICBtYXRyaXguX3B0cltjb2x1bW5zXSA9IG1hdHJpeC5fdmFsdWVzLmxlbmd0aDtcbiAgICB9IGVsc2UgaWYgKGNvbHVtbnMgPCBjKSB7XG4gICAgICAvLyB0cnVuY2F0ZSBtYXRyaXguX3B0clxuICAgICAgbWF0cml4Ll9wdHIuc3BsaWNlKGNvbHVtbnMgKyAxLCBjIC0gY29sdW1ucyk7IC8vIHRydW5jYXRlIG1hdHJpeC5fdmFsdWVzIGFuZCBtYXRyaXguX2luZGV4XG5cblxuICAgICAgbWF0cml4Ll92YWx1ZXMuc3BsaWNlKG1hdHJpeC5fcHRyW2NvbHVtbnNdLCBtYXRyaXguX3ZhbHVlcy5sZW5ndGgpO1xuXG4gICAgICBtYXRyaXguX2luZGV4LnNwbGljZShtYXRyaXguX3B0cltjb2x1bW5zXSwgbWF0cml4Ll9pbmRleC5sZW5ndGgpO1xuICAgIH0gLy8gdXBkYXRlIGNvbHVtbnNcblxuXG4gICAgYyA9IGNvbHVtbnM7IC8vIGNoZWNrIHdlIG5lZWQgdG8gaW5jcmVhc2Ugcm93c1xuXG4gICAgaWYgKHJvd3MgPiByKSB7XG4gICAgICAvLyBjaGVjayB3ZSBoYXZlIHRvIGluc2VydCB2YWx1ZXNcbiAgICAgIGlmIChpbnMpIHtcbiAgICAgICAgLy8gaW5zZXJ0c1xuICAgICAgICB2YXIgbiA9IDA7IC8vIGxvb3AgY29sdW1uc1xuXG4gICAgICAgIGZvciAoaiA9IDA7IGogPCBjOyBqKyspIHtcbiAgICAgICAgICAvLyB1cGRhdGUgbWF0cml4Ll9wdHIgZm9yIGN1cnJlbnQgY29sdW1uXG4gICAgICAgICAgbWF0cml4Ll9wdHJbal0gPSBtYXRyaXguX3B0cltqXSArIG47IC8vIHdoZXJlIHRvIGluc2VydCBtYXRyaXguX3ZhbHVlc1xuXG4gICAgICAgICAgayA9IG1hdHJpeC5fcHRyW2ogKyAxXSArIG47IC8vIHBvaW50ZXJcblxuICAgICAgICAgIHZhciBwID0gMDsgLy8gbG9vcCBuZXcgcm93cywgaW5pdGlhbGl6ZSBwb2ludGVyXG5cbiAgICAgICAgICBmb3IgKGkgPSByOyBpIDwgcm93czsgaSsrLCBwKyspIHtcbiAgICAgICAgICAgIC8vIGFkZCB2YWx1ZVxuICAgICAgICAgICAgbWF0cml4Ll92YWx1ZXMuc3BsaWNlKGsgKyBwLCAwLCB2YWx1ZSk7IC8vIHVwZGF0ZSBtYXRyaXguX2luZGV4XG5cblxuICAgICAgICAgICAgbWF0cml4Ll9pbmRleC5zcGxpY2UoayArIHAsIDAsIGkpOyAvLyBpbmNyZW1lbnQgaW5zZXJ0c1xuXG5cbiAgICAgICAgICAgIG4rKztcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gc3RvcmUgbnVtYmVyIG9mIG1hdHJpeC5fdmFsdWVzIGluIG1hdHJpeC5fcHRyXG5cblxuICAgICAgICBtYXRyaXguX3B0cltjXSA9IG1hdHJpeC5fdmFsdWVzLmxlbmd0aDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJvd3MgPCByKSB7XG4gICAgICAvLyBkZWxldGVzXG4gICAgICB2YXIgZCA9IDA7IC8vIGxvb3AgY29sdW1uc1xuXG4gICAgICBmb3IgKGogPSAwOyBqIDwgYzsgaisrKSB7XG4gICAgICAgIC8vIHVwZGF0ZSBtYXRyaXguX3B0ciBmb3IgY3VycmVudCBjb2x1bW5cbiAgICAgICAgbWF0cml4Ll9wdHJbal0gPSBtYXRyaXguX3B0cltqXSAtIGQ7IC8vIHdoZXJlIG1hdHJpeC5fdmFsdWVzIHN0YXJ0IGZvciBuZXh0IGNvbHVtblxuXG4gICAgICAgIHZhciBrMCA9IG1hdHJpeC5fcHRyW2pdO1xuICAgICAgICB2YXIgazEgPSBtYXRyaXguX3B0cltqICsgMV0gLSBkOyAvLyBsb29wIG1hdHJpeC5faW5kZXhcblxuICAgICAgICBmb3IgKGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgICAvLyByb3dcbiAgICAgICAgICBpID0gbWF0cml4Ll9pbmRleFtrXTsgLy8gY2hlY2sgd2UgbmVlZCB0byBkZWxldGUgdmFsdWUgYW5kIG1hdHJpeC5faW5kZXhcblxuICAgICAgICAgIGlmIChpID4gcm93cyAtIDEpIHtcbiAgICAgICAgICAgIC8vIHJlbW92ZSB2YWx1ZVxuICAgICAgICAgICAgbWF0cml4Ll92YWx1ZXMuc3BsaWNlKGssIDEpOyAvLyByZW1vdmUgaXRlbSBmcm9tIG1hdHJpeC5faW5kZXhcblxuXG4gICAgICAgICAgICBtYXRyaXguX2luZGV4LnNwbGljZShrLCAxKTsgLy8gaW5jcmVhc2UgZGVsZXRlc1xuXG5cbiAgICAgICAgICAgIGQrKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gdXBkYXRlIG1hdHJpeC5fcHRyIGZvciBjdXJyZW50IGNvbHVtblxuXG5cbiAgICAgIG1hdHJpeC5fcHRyW2pdID0gbWF0cml4Ll92YWx1ZXMubGVuZ3RoO1xuICAgIH0gLy8gdXBkYXRlIG1hdHJpeC5fc2l6ZVxuXG5cbiAgICBtYXRyaXguX3NpemVbMF0gPSByb3dzO1xuICAgIG1hdHJpeC5fc2l6ZVsxXSA9IGNvbHVtbnM7IC8vIHJldHVybiBtYXRyaXhcblxuICAgIHJldHVybiBtYXRyaXg7XG4gIH1cbiAgLyoqXG4gICAqIFJlc2hhcGUgdGhlIG1hdHJpeCB0byB0aGUgZ2l2ZW4gc2l6ZS4gUmV0dXJucyBhIGNvcHkgb2YgdGhlIG1hdHJpeCB3aGVuXG4gICAqIGBjb3B5PXRydWVgLCBvdGhlcndpc2UgcmV0dXJuIHRoZSBtYXRyaXggaXRzZWxmIChyZXNoYXBlIGluIHBsYWNlKS5cbiAgICpcbiAgICogTk9URTogVGhpcyBtaWdodCBiZSBiZXR0ZXIgc3VpdGVkIHRvIGNvcHkgYnkgZGVmYXVsdCwgaW5zdGVhZCBvZiBtb2RpZnlpbmdcbiAgICogICAgICAgaW4gcGxhY2UuIEZvciBub3csIGl0IG9wZXJhdGVzIGluIHBsYWNlIHRvIHJlbWFpbiBjb25zaXN0ZW50IHdpdGhcbiAgICogICAgICAgcmVzaXplKCkuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBTcGFyc2VNYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJbXX0gc2l6ZSAgICAgICAgICAgVGhlIG5ldyBzaXplIHRoZSBtYXRyaXggc2hvdWxkIGhhdmUuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NvcHldICAgICAgICAgIFJldHVybiBhIHJlc2hhcGVkIGNvcHkgb2YgdGhlIG1hdHJpeFxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgICAgICBUaGUgcmVzaGFwZWQgbWF0cml4XG4gICAqL1xuXG5cbiAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS5yZXNoYXBlID0gZnVuY3Rpb24gKHNpemUsIGNvcHkpIHtcbiAgICAvLyB2YWxpZGF0ZSBhcmd1bWVudHNcbiAgICBpZiAoISgwLCBfaXMuaXNBcnJheSkoc2l6ZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IGV4cGVjdGVkJyk7XG4gICAgfVxuXG4gICAgaWYgKHNpemUubGVuZ3RoICE9PSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NwYXJzZSBtYXRyaWNlcyBjYW4gb25seSBiZSByZXNoYXBlZCBpbiB0d28gZGltZW5zaW9ucycpO1xuICAgIH0gLy8gY2hlY2sgc2l6ZXNcblxuXG4gICAgc2l6ZS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgaWYgKCEoMCwgX2lzLmlzTnVtYmVyKSh2YWx1ZSkgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikodmFsdWUpIHx8IHZhbHVlIDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHNpemUsIG11c3QgY29udGFpbiBwb3NpdGl2ZSBpbnRlZ2VycyAnICsgJyhzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShzaXplKSArICcpJyk7XG4gICAgICB9XG4gICAgfSk7IC8vIG0gKiBuIG11c3Qgbm90IGNoYW5nZVxuXG4gICAgaWYgKHRoaXMuX3NpemVbMF0gKiB0aGlzLl9zaXplWzFdICE9PSBzaXplWzBdICogc2l6ZVsxXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXNoYXBpbmcgc3BhcnNlIG1hdHJpeCB3aWxsIHJlc3VsdCBpbiB0aGUgd3JvbmcgbnVtYmVyIG9mIGVsZW1lbnRzJyk7XG4gICAgfSAvLyBtYXRyaXggdG8gcmVzaGFwZVxuXG5cbiAgICB2YXIgbSA9IGNvcHkgPyB0aGlzLmNsb25lKCkgOiB0aGlzOyAvLyByZXR1cm4gdW5jaGFuZ2VkIGlmIHRoZSBzYW1lIHNoYXBlXG5cbiAgICBpZiAodGhpcy5fc2l6ZVswXSA9PT0gc2l6ZVswXSAmJiB0aGlzLl9zaXplWzFdID09PSBzaXplWzFdKSB7XG4gICAgICByZXR1cm4gbTtcbiAgICB9IC8vIENvbnZlcnQgdG8gQ09PIGZvcm1hdCAoZ2VuZXJhdGUgYSBjb2x1bW4gaW5kZXgpXG5cblxuICAgIHZhciBjb2xJbmRleCA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtLl9wdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbS5fcHRyW2kgKyAxXSAtIG0uX3B0cltpXTsgaisrKSB7XG4gICAgICAgIGNvbEluZGV4LnB1c2goaSk7XG4gICAgICB9XG4gICAgfSAvLyBDbG9uZSB0aGUgdmFsdWVzIGFycmF5XG5cblxuICAgIHZhciB2YWx1ZXMgPSBtLl92YWx1ZXMuc2xpY2UoKTsgLy8gQ2xvbmUgdGhlIHJvdyBpbmRleCBhcnJheVxuXG5cbiAgICB2YXIgcm93SW5kZXggPSBtLl9pbmRleC5zbGljZSgpOyAvLyBUcmFuc2Zvcm0gdGhlIChyb3csIGNvbHVtbikgaW5kaWNlc1xuXG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbS5faW5kZXgubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgcjEgPSByb3dJbmRleFtfaV07XG4gICAgICB2YXIgYzEgPSBjb2xJbmRleFtfaV07XG4gICAgICB2YXIgZmxhdCA9IHIxICogbS5fc2l6ZVsxXSArIGMxO1xuICAgICAgY29sSW5kZXhbX2ldID0gZmxhdCAlIHNpemVbMV07XG4gICAgICByb3dJbmRleFtfaV0gPSBNYXRoLmZsb29yKGZsYXQgLyBzaXplWzFdKTtcbiAgICB9IC8vIE5vdyByZXNoYXBpbmcgaXMgc3VwcG9zZWQgdG8gcHJlc2VydmUgdGhlIHJvdy1tYWpvciBvcmRlciwgQlVUIHRoZXNlIHNwYXJzZSBtYXRyaWNlcyBhcmUgc3RvcmVkXG4gICAgLy8gaW4gY29sdW1uLW1ham9yIG9yZGVyLCBzbyB3ZSBoYXZlIHRvIHJlb3JkZXIgdGhlIHZhbHVlIGFycmF5IG5vdy4gT25lIG9wdGlvbiBpcyB0byB1c2UgYSBtdWx0aXNvcnQsXG4gICAgLy8gc29ydGluZyBzZXZlcmFsIGFycmF5cyBiYXNlZCBvbiBzb21lIG90aGVyIGFycmF5LlxuICAgIC8vIE9SLCB3ZSBjb3VsZCBlYXNpbHkganVzdDpcbiAgICAvLyAxLiBSZW1vdmUgYWxsIHZhbHVlcyBmcm9tIHRoZSBtYXRyaXhcblxuXG4gICAgbS5fdmFsdWVzLmxlbmd0aCA9IDA7XG4gICAgbS5faW5kZXgubGVuZ3RoID0gMDtcbiAgICBtLl9wdHIubGVuZ3RoID0gc2l6ZVsxXSArIDE7XG4gICAgbS5fc2l6ZSA9IHNpemUuc2xpY2UoKTtcblxuICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IG0uX3B0ci5sZW5ndGg7IF9pMisrKSB7XG4gICAgICBtLl9wdHJbX2kyXSA9IDA7XG4gICAgfSAvLyAyLiBSZS1pbnNlcnQgYWxsIGVsZW1lbnRzIGluIHRoZSBwcm9wZXIgb3JkZXIgKHNpbXBsaWZpZWQgY29kZSBmcm9tIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUuc2V0KVxuICAgIC8vIFRoaXMgc3RlcCBpcyBwcm9iYWJseSB0aGUgbW9zdCB0aW1lLWNvbnN1bWluZ1xuXG5cbiAgICBmb3IgKHZhciBoID0gMDsgaCA8IHZhbHVlcy5sZW5ndGg7IGgrKykge1xuICAgICAgdmFyIF9pMyA9IHJvd0luZGV4W2hdO1xuICAgICAgdmFyIF9qID0gY29sSW5kZXhbaF07XG4gICAgICB2YXIgdiA9IHZhbHVlc1toXTtcblxuICAgICAgdmFyIGsgPSBfZ2V0VmFsdWVJbmRleChfaTMsIG0uX3B0cltfal0sIG0uX3B0cltfaiArIDFdLCBtLl9pbmRleCk7XG5cbiAgICAgIF9pbnNlcnQoaywgX2kzLCBfaiwgdiwgbS5fdmFsdWVzLCBtLl9pbmRleCwgbS5fcHRyKTtcbiAgICB9IC8vIFRoZSB2YWx1ZSBpbmRpY2VzIGFyZSBpbnNlcnRlZCBvdXQgb2Ygb3JkZXIsIGJ1dCBhcHBhcmVudGx5IHRoYXQncy4uLiBzdGlsbCBPSz9cblxuXG4gICAgcmV0dXJuIG07XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGUgbWF0cml4XG4gICAqIEBtZW1iZXJvZiBTcGFyc2VNYXRyaXhcbiAgICogQHJldHVybiB7U3BhcnNlTWF0cml4fSBjbG9uZVxuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG0gPSBuZXcgU3BhcnNlTWF0cml4KHtcbiAgICAgIHZhbHVlczogdGhpcy5fdmFsdWVzID8gKDAsIF9vYmplY3QuY2xvbmUpKHRoaXMuX3ZhbHVlcykgOiB1bmRlZmluZWQsXG4gICAgICBpbmRleDogKDAsIF9vYmplY3QuY2xvbmUpKHRoaXMuX2luZGV4KSxcbiAgICAgIHB0cjogKDAsIF9vYmplY3QuY2xvbmUpKHRoaXMuX3B0ciksXG4gICAgICBzaXplOiAoMCwgX29iamVjdC5jbG9uZSkodGhpcy5fc2l6ZSksXG4gICAgICBkYXRhdHlwZTogdGhpcy5fZGF0YXR5cGVcbiAgICB9KTtcbiAgICByZXR1cm4gbTtcbiAgfTtcbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSBzaXplIG9mIHRoZSBtYXRyaXguXG4gICAqIEBtZW1iZXJvZiBTcGFyc2VNYXRyaXhcbiAgICogQHJldHVybnMge251bWJlcltdfSBzaXplXG4gICAqL1xuXG5cbiAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS5zaXplID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLl9zaXplLnNsaWNlKDApOyAvLyBjb3B5IHRoZSBBcnJheVxuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IG1hdHJpeCB3aXRoIHRoZSByZXN1bHRzIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBleGVjdXRlZCBvblxuICAgKiBlYWNoIGVudHJ5IG9mIHRoZSBtYXRyaXguXG4gICAqIEBtZW1iZXJvZiBTcGFyc2VNYXRyaXhcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgaW52b2tlZCB3aXRoIHRocmVlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyczogdGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50LCB0aGUgaW5kZXhcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgZWxlbWVudCwgYW5kIHRoZSBNYXRyaXggYmVpbmcgdHJhdmVyc2VkLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtza2lwWmVyb3NdIEludm9rZSBjYWxsYmFjayBmdW5jdGlvbiBmb3Igbm9uLXplcm8gdmFsdWVzIG9ubHkuXG4gICAqXG4gICAqIEByZXR1cm4ge1NwYXJzZU1hdHJpeH0gbWF0cml4XG4gICAqL1xuXG5cbiAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIHNraXBaZXJvcykge1xuICAgIC8vIGNoZWNrIGl0IGlzIGEgcGF0dGVybiBtYXRyaXhcbiAgICBpZiAoIXRoaXMuX3ZhbHVlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIG1hcCBvbiBhIFBhdHRlcm4gb25seSBtYXRyaXgnKTtcbiAgICB9IC8vIG1hdHJpeCBpbnN0YW5jZVxuXG5cbiAgICB2YXIgbWUgPSB0aGlzOyAvLyByb3dzIGFuZCBjb2x1bW5zXG5cbiAgICB2YXIgcm93cyA9IHRoaXMuX3NpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSB0aGlzLl9zaXplWzFdOyAvLyBpbnZva2UgY2FsbGJhY2tcblxuICAgIHZhciBpbnZva2UgPSBmdW5jdGlvbiBpbnZva2UodiwgaSwgaikge1xuICAgICAgLy8gaW52b2tlIGNhbGxiYWNrXG4gICAgICByZXR1cm4gY2FsbGJhY2sodiwgW2ksIGpdLCBtZSk7XG4gICAgfTsgLy8gaW52b2tlIF9tYXBcblxuXG4gICAgcmV0dXJuIF9tYXAodGhpcywgMCwgcm93cyAtIDEsIDAsIGNvbHVtbnMgLSAxLCBpbnZva2UsIHNraXBaZXJvcyk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgbWF0cml4IHdpdGggdGhlIHJlc3VsdHMgb2YgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGV4ZWN1dGVkIG9uIHRoZSBpbnRlcnZhbFxuICAgKiBbbWluUm93Li5tYXhSb3csIG1pbkNvbHVtbi4ubWF4Q29sdW1uXS5cbiAgICovXG5cblxuICBmdW5jdGlvbiBfbWFwKG1hdHJpeCwgbWluUm93LCBtYXhSb3csIG1pbkNvbHVtbiwgbWF4Q29sdW1uLCBjYWxsYmFjaywgc2tpcFplcm9zKSB7XG4gICAgLy8gcmVzdWx0IGFycmF5c1xuICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICB2YXIgaW5kZXggPSBbXTtcbiAgICB2YXIgcHRyID0gW107IC8vIGVxdWFsIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBlcSA9IGVxdWFsU2NhbGFyOyAvLyB6ZXJvIHZhbHVlXG5cbiAgICB2YXIgemVybyA9IDA7XG5cbiAgICBpZiAoKDAsIF9pcy5pc1N0cmluZykobWF0cml4Ll9kYXRhdHlwZSkpIHtcbiAgICAgIC8vIGZpbmQgc2lnbmF0dXJlIHRoYXQgbWF0Y2hlcyAoZGF0YXR5cGUsIGRhdGF0eXBlKVxuICAgICAgZXEgPSB0eXBlZC5maW5kKGVxdWFsU2NhbGFyLCBbbWF0cml4Ll9kYXRhdHlwZSwgbWF0cml4Ll9kYXRhdHlwZV0pIHx8IGVxdWFsU2NhbGFyOyAvLyBjb252ZXJ0IDAgdG8gdGhlIHNhbWUgZGF0YXR5cGVcblxuICAgICAgemVybyA9IHR5cGVkLmNvbnZlcnQoMCwgbWF0cml4Ll9kYXRhdHlwZSk7XG4gICAgfSAvLyBpbnZva2UgY2FsbGJhY2tcblxuXG4gICAgdmFyIGludm9rZSA9IGZ1bmN0aW9uIGludm9rZSh2LCB4LCB5KSB7XG4gICAgICAvLyBpbnZva2UgY2FsbGJhY2tcbiAgICAgIHYgPSBjYWxsYmFjayh2LCB4LCB5KTsgLy8gY2hlY2sgdmFsdWUgIT0gMFxuXG4gICAgICBpZiAoIWVxKHYsIHplcm8pKSB7XG4gICAgICAgIC8vIHN0b3JlIHZhbHVlXG4gICAgICAgIHZhbHVlcy5wdXNoKHYpOyAvLyBpbmRleFxuXG4gICAgICAgIGluZGV4LnB1c2goeCk7XG4gICAgICB9XG4gICAgfTsgLy8gbG9vcCBjb2x1bW5zXG5cblxuICAgIGZvciAodmFyIGogPSBtaW5Db2x1bW47IGogPD0gbWF4Q29sdW1uOyBqKyspIHtcbiAgICAgIC8vIHN0b3JlIHBvaW50ZXIgdG8gdmFsdWVzIGluZGV4XG4gICAgICBwdHIucHVzaCh2YWx1ZXMubGVuZ3RoKTsgLy8gazAgPD0gayA8IGsxIHdoZXJlIGswID0gX3B0cltqXSAmJiBrMSA9IF9wdHJbaisxXVxuXG4gICAgICB2YXIgazAgPSBtYXRyaXguX3B0cltqXTtcbiAgICAgIHZhciBrMSA9IG1hdHJpeC5fcHRyW2ogKyAxXTtcblxuICAgICAgaWYgKHNraXBaZXJvcykge1xuICAgICAgICAvLyBsb29wIGsgd2l0aGluIFtrMCwgazFbXG4gICAgICAgIGZvciAodmFyIGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgICAvLyByb3cgaW5kZXhcbiAgICAgICAgICB2YXIgaSA9IG1hdHJpeC5faW5kZXhba107IC8vIGNoZWNrIGkgaXMgaW4gcmFuZ2VcblxuICAgICAgICAgIGlmIChpID49IG1pblJvdyAmJiBpIDw9IG1heFJvdykge1xuICAgICAgICAgICAgLy8gdmFsdWUgQCBrXG4gICAgICAgICAgICBpbnZva2UobWF0cml4Ll92YWx1ZXNba10sIGkgLSBtaW5Sb3csIGogLSBtaW5Db2x1bW4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gY3JlYXRlIGEgY2FjaGUgaG9sZGluZyBhbGwgZGVmaW5lZCB2YWx1ZXNcbiAgICAgICAgdmFyIF92YWx1ZXMgPSB7fTtcblxuICAgICAgICBmb3IgKHZhciBfayA9IGswOyBfayA8IGsxOyBfaysrKSB7XG4gICAgICAgICAgdmFyIF9pNCA9IG1hdHJpeC5faW5kZXhbX2tdO1xuICAgICAgICAgIF92YWx1ZXNbX2k0XSA9IG1hdHJpeC5fdmFsdWVzW19rXTtcbiAgICAgICAgfSAvLyBsb29wIG92ZXIgYWxsIHJvd3MgKGluZGV4ZXMgY2FuIGJlIHVub3JkZXJlZCBzbyB3ZSBjYW4ndCB1c2UgdGhhdCksXG4gICAgICAgIC8vIGFuZCBlaXRoZXIgcmVhZCB0aGUgdmFsdWUgb3IgemVyb1xuXG5cbiAgICAgICAgZm9yICh2YXIgX2k1ID0gbWluUm93OyBfaTUgPD0gbWF4Um93OyBfaTUrKykge1xuICAgICAgICAgIHZhciB2YWx1ZSA9IF9pNSBpbiBfdmFsdWVzID8gX3ZhbHVlc1tfaTVdIDogMDtcbiAgICAgICAgICBpbnZva2UodmFsdWUsIF9pNSAtIG1pblJvdywgaiAtIG1pbkNvbHVtbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIHN0b3JlIG51bWJlciBvZiB2YWx1ZXMgaW4gcHRyXG5cblxuICAgIHB0ci5wdXNoKHZhbHVlcy5sZW5ndGgpOyAvLyByZXR1cm4gc3BhcnNlIG1hdHJpeFxuXG4gICAgcmV0dXJuIG5ldyBTcGFyc2VNYXRyaXgoe1xuICAgICAgdmFsdWVzOiB2YWx1ZXMsXG4gICAgICBpbmRleDogaW5kZXgsXG4gICAgICBwdHI6IHB0cixcbiAgICAgIHNpemU6IFttYXhSb3cgLSBtaW5Sb3cgKyAxLCBtYXhDb2x1bW4gLSBtaW5Db2x1bW4gKyAxXVxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZnVuY3Rpb24gb24gZWFjaCBlbnRyeSBvZiB0aGUgbWF0cml4LlxuICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4XG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGludm9rZWQgd2l0aCB0aHJlZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnM6IHRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudCwgdGhlIGluZGV4XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGVsZW1lbnQsIGFuZCB0aGUgTWF0cml4IGJlaW5nIHRyYXZlcnNlZC5cbiAgICogQHBhcmFtIHtib29sZWFufSBbc2tpcFplcm9zXSBJbnZva2UgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIG5vbi16ZXJvIHZhbHVlcyBvbmx5LlxuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaywgc2tpcFplcm9zKSB7XG4gICAgLy8gY2hlY2sgaXQgaXMgYSBwYXR0ZXJuIG1hdHJpeFxuICAgIGlmICghdGhpcy5fdmFsdWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBpbnZva2UgZm9yRWFjaCBvbiBhIFBhdHRlcm4gb25seSBtYXRyaXgnKTtcbiAgICB9IC8vIG1hdHJpeCBpbnN0YW5jZVxuXG5cbiAgICB2YXIgbWUgPSB0aGlzOyAvLyByb3dzIGFuZCBjb2x1bW5zXG5cbiAgICB2YXIgcm93cyA9IHRoaXMuX3NpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSB0aGlzLl9zaXplWzFdOyAvLyBsb29wIGNvbHVtbnNcblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAvLyBrMCA8PSBrIDwgazEgd2hlcmUgazAgPSBfcHRyW2pdICYmIGsxID0gX3B0cltqKzFdXG4gICAgICB2YXIgazAgPSB0aGlzLl9wdHJbal07XG4gICAgICB2YXIgazEgPSB0aGlzLl9wdHJbaiArIDFdO1xuXG4gICAgICBpZiAoc2tpcFplcm9zKSB7XG4gICAgICAgIC8vIGxvb3AgayB3aXRoaW4gW2swLCBrMVtcbiAgICAgICAgZm9yICh2YXIgayA9IGswOyBrIDwgazE7IGsrKykge1xuICAgICAgICAgIC8vIHJvdyBpbmRleFxuICAgICAgICAgIHZhciBpID0gdGhpcy5faW5kZXhba107IC8vIHZhbHVlIEAga1xuXG4gICAgICAgICAgY2FsbGJhY2sodGhpcy5fdmFsdWVzW2tdLCBbaSwgal0sIG1lKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gY3JlYXRlIGEgY2FjaGUgaG9sZGluZyBhbGwgZGVmaW5lZCB2YWx1ZXNcbiAgICAgICAgdmFyIHZhbHVlcyA9IHt9O1xuXG4gICAgICAgIGZvciAodmFyIF9rMiA9IGswOyBfazIgPCBrMTsgX2syKyspIHtcbiAgICAgICAgICB2YXIgX2k2ID0gdGhpcy5faW5kZXhbX2syXTtcbiAgICAgICAgICB2YWx1ZXNbX2k2XSA9IHRoaXMuX3ZhbHVlc1tfazJdO1xuICAgICAgICB9IC8vIGxvb3Agb3ZlciBhbGwgcm93cyAoaW5kZXhlcyBjYW4gYmUgdW5vcmRlcmVkIHNvIHdlIGNhbid0IHVzZSB0aGF0KSxcbiAgICAgICAgLy8gYW5kIGVpdGhlciByZWFkIHRoZSB2YWx1ZSBvciB6ZXJvXG5cblxuICAgICAgICBmb3IgKHZhciBfaTcgPSAwOyBfaTcgPCByb3dzOyBfaTcrKykge1xuICAgICAgICAgIHZhciB2YWx1ZSA9IF9pNyBpbiB2YWx1ZXMgPyB2YWx1ZXNbX2k3XSA6IDA7XG4gICAgICAgICAgY2FsbGJhY2sodmFsdWUsIFtfaTcsIGpdLCBtZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gQXJyYXkgd2l0aCBhIGNvcHkgb2YgdGhlIGRhdGEgb2YgdGhlIFNwYXJzZU1hdHJpeFxuICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4XG4gICAqIEByZXR1cm5zIHtBcnJheX0gYXJyYXlcbiAgICovXG5cblxuICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF90b0FycmF5KHRoaXMuX3ZhbHVlcywgdGhpcy5faW5kZXgsIHRoaXMuX3B0ciwgdGhpcy5fc2l6ZSwgdHJ1ZSk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgdGhlIHByaW1pdGl2ZSB2YWx1ZSBvZiB0aGUgU3BhcnNlTWF0cml4OiBhIHR3byBkaW1lbnNpb25zIGFycmF5XG4gICAqIEBtZW1iZXJvZiBTcGFyc2VNYXRyaXhcbiAgICogQHJldHVybnMge0FycmF5fSBhcnJheVxuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUudmFsdWVPZiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3RvQXJyYXkodGhpcy5fdmFsdWVzLCB0aGlzLl9pbmRleCwgdGhpcy5fcHRyLCB0aGlzLl9zaXplLCBmYWxzZSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gX3RvQXJyYXkodmFsdWVzLCBpbmRleCwgcHRyLCBzaXplLCBjb3B5KSB7XG4gICAgLy8gcm93cyBhbmQgY29sdW1uc1xuICAgIHZhciByb3dzID0gc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IHNpemVbMV07IC8vIHJlc3VsdFxuXG4gICAgdmFyIGEgPSBbXTsgLy8gdmFyc1xuXG4gICAgdmFyIGksIGo7IC8vIGluaXRpYWxpemUgYXJyYXlcblxuICAgIGZvciAoaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgIGFbaV0gPSBbXTtcblxuICAgICAgZm9yIChqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgICBhW2ldW2pdID0gMDtcbiAgICAgIH1cbiAgICB9IC8vIGxvb3AgY29sdW1uc1xuXG5cbiAgICBmb3IgKGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAvLyBrMCA8PSBrIDwgazEgd2hlcmUgazAgPSBfcHRyW2pdICYmIGsxID0gX3B0cltqKzFdXG4gICAgICB2YXIgazAgPSBwdHJbal07XG4gICAgICB2YXIgazEgPSBwdHJbaiArIDFdOyAvLyBsb29wIGsgd2l0aGluIFtrMCwgazFbXG5cbiAgICAgIGZvciAodmFyIGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgLy8gcm93IGluZGV4XG4gICAgICAgIGkgPSBpbmRleFtrXTsgLy8gc2V0IHZhbHVlICh1c2Ugb25lIGZvciBwYXR0ZXJuIG1hdHJpeClcblxuICAgICAgICBhW2ldW2pdID0gdmFsdWVzID8gY29weSA/ICgwLCBfb2JqZWN0LmNsb25lKSh2YWx1ZXNba10pIDogdmFsdWVzW2tdIDogMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYTtcbiAgfVxuICAvKipcbiAgICogR2V0IGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtYXRyaXgsIHdpdGggb3B0aW9uYWwgZm9ybWF0dGluZyBvcHRpb25zLlxuICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4XG4gICAqIEBwYXJhbSB7T2JqZWN0IHwgbnVtYmVyIHwgRnVuY3Rpb259IFtvcHRpb25zXSAgRm9ybWF0dGluZyBvcHRpb25zLiBTZWVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWIvdXRpbHMvbnVtYmVyOmZvcm1hdCBmb3IgYVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uIG9mIHRoZSBhdmFpbGFibGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLmZvcm1hdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgLy8gcm93cyBhbmQgY29sdW1uc1xuICAgIHZhciByb3dzID0gdGhpcy5fc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IHRoaXMuX3NpemVbMV07IC8vIGRlbnNpdHlcblxuICAgIHZhciBkZW5zaXR5ID0gdGhpcy5kZW5zaXR5KCk7IC8vIHJvd3MgJiBjb2x1bW5zXG5cbiAgICB2YXIgc3RyID0gJ1NwYXJzZSBNYXRyaXggWycgKyAoMCwgX3N0cmluZy5mb3JtYXQpKHJvd3MsIG9wdGlvbnMpICsgJyB4ICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKGNvbHVtbnMsIG9wdGlvbnMpICsgJ10gZGVuc2l0eTogJyArICgwLCBfc3RyaW5nLmZvcm1hdCkoZGVuc2l0eSwgb3B0aW9ucykgKyAnXFxuJzsgLy8gbG9vcCBjb2x1bW5zXG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgLy8gazAgPD0gayA8IGsxIHdoZXJlIGswID0gX3B0cltqXSAmJiBrMSA9IF9wdHJbaisxXVxuICAgICAgdmFyIGswID0gdGhpcy5fcHRyW2pdO1xuICAgICAgdmFyIGsxID0gdGhpcy5fcHRyW2ogKyAxXTsgLy8gbG9vcCBrIHdpdGhpbiBbazAsIGsxW1xuXG4gICAgICBmb3IgKHZhciBrID0gazA7IGsgPCBrMTsgaysrKSB7XG4gICAgICAgIC8vIHJvdyBpbmRleFxuICAgICAgICB2YXIgaSA9IHRoaXMuX2luZGV4W2tdOyAvLyBhcHBlbmQgdmFsdWVcblxuICAgICAgICBzdHIgKz0gJ1xcbiAgICAoJyArICgwLCBfc3RyaW5nLmZvcm1hdCkoaSwgb3B0aW9ucykgKyAnLCAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShqLCBvcHRpb25zKSArICcpID09PiAnICsgKHRoaXMuX3ZhbHVlcyA/ICgwLCBfc3RyaW5nLmZvcm1hdCkodGhpcy5fdmFsdWVzW2tdLCBvcHRpb25zKSA6ICdYJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cjtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWF0cml4XG4gICAqIEBtZW1iZXJvZiBTcGFyc2VNYXRyaXhcbiAgICogQHJldHVybnMge3N0cmluZ30gc3RyXG4gICAqL1xuXG5cbiAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gKDAsIF9zdHJpbmcuZm9ybWF0KSh0aGlzLnRvQXJyYXkoKSk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtYXRyaXhcbiAgICogQG1lbWJlcm9mIFNwYXJzZU1hdHJpeFxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdTcGFyc2VNYXRyaXgnLFxuICAgICAgdmFsdWVzOiB0aGlzLl92YWx1ZXMsXG4gICAgICBpbmRleDogdGhpcy5faW5kZXgsXG4gICAgICBwdHI6IHRoaXMuX3B0cixcbiAgICAgIHNpemU6IHRoaXMuX3NpemUsXG4gICAgICBkYXRhdHlwZTogdGhpcy5fZGF0YXR5cGVcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogR2V0IHRoZSBrdGggTWF0cml4IGRpYWdvbmFsLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4XG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyfSBbaz0wXSAgICAgVGhlIGt0aCBkaWFnb25hbCB3aGVyZSB0aGUgdmVjdG9yIHdpbGwgcmV0cmlldmVkLlxuICAgKlxuICAgKiBAcmV0dXJucyB7TWF0cml4fSAgICAgICAgICAgICAgICAgICAgIFRoZSBtYXRyaXggdmVjdG9yIHdpdGggdGhlIGRpYWdvbmFsIHZhbHVlcy5cbiAgICovXG5cblxuICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLmRpYWdvbmFsID0gZnVuY3Rpb24gKGspIHtcbiAgICAvLyB2YWxpZGF0ZSBrIGlmIGFueVxuICAgIGlmIChrKSB7XG4gICAgICAvLyBjb252ZXJ0IEJpZ051bWJlciB0byBhIG51bWJlclxuICAgICAgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKGspKSB7XG4gICAgICAgIGsgPSBrLnRvTnVtYmVyKCk7XG4gICAgICB9IC8vIGlzIG11c3QgYmUgYW4gaW50ZWdlclxuXG5cbiAgICAgIGlmICghKDAsIF9pcy5pc051bWJlcikoaykgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoaykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHBhcmFtZXRlciBrIG11c3QgYmUgYW4gaW50ZWdlciBudW1iZXInKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZGVmYXVsdCB2YWx1ZVxuICAgICAgayA9IDA7XG4gICAgfVxuXG4gICAgdmFyIGtTdXBlciA9IGsgPiAwID8gayA6IDA7XG4gICAgdmFyIGtTdWIgPSBrIDwgMCA/IC1rIDogMDsgLy8gcm93cyAmIGNvbHVtbnNcblxuICAgIHZhciByb3dzID0gdGhpcy5fc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IHRoaXMuX3NpemVbMV07IC8vIG51bWJlciBkaWFnb25hbCB2YWx1ZXNcblxuICAgIHZhciBuID0gTWF0aC5taW4ocm93cyAtIGtTdWIsIGNvbHVtbnMgLSBrU3VwZXIpOyAvLyBkaWFnb25hbCBhcnJheXNcblxuICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICB2YXIgaW5kZXggPSBbXTtcbiAgICB2YXIgcHRyID0gW107IC8vIGluaXRpYWwgcHRyIHZhbHVlXG5cbiAgICBwdHJbMF0gPSAwOyAvLyBsb29wIGNvbHVtbnNcblxuICAgIGZvciAodmFyIGogPSBrU3VwZXI7IGogPCBjb2x1bW5zICYmIHZhbHVlcy5sZW5ndGggPCBuOyBqKyspIHtcbiAgICAgIC8vIGswIDw9IGsgPCBrMSB3aGVyZSBrMCA9IF9wdHJbal0gJiYgazEgPSBfcHRyW2orMV1cbiAgICAgIHZhciBrMCA9IHRoaXMuX3B0cltqXTtcbiAgICAgIHZhciBrMSA9IHRoaXMuX3B0cltqICsgMV07IC8vIGxvb3AgeCB3aXRoaW4gW2swLCBrMVtcblxuICAgICAgZm9yICh2YXIgeCA9IGswOyB4IDwgazE7IHgrKykge1xuICAgICAgICAvLyByb3cgaW5kZXhcbiAgICAgICAgdmFyIGkgPSB0aGlzLl9pbmRleFt4XTsgLy8gY2hlY2sgcm93XG5cbiAgICAgICAgaWYgKGkgPT09IGogLSBrU3VwZXIgKyBrU3ViKSB7XG4gICAgICAgICAgLy8gdmFsdWUgb24gdGhpcyBjb2x1bW5cbiAgICAgICAgICB2YWx1ZXMucHVzaCh0aGlzLl92YWx1ZXNbeF0pOyAvLyBzdG9yZSByb3dcblxuICAgICAgICAgIGluZGV4W3ZhbHVlcy5sZW5ndGggLSAxXSA9IGkgLSBrU3ViOyAvLyBleGl0IGxvb3BcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBjbG9zZSBwdHJcblxuXG4gICAgcHRyLnB1c2godmFsdWVzLmxlbmd0aCk7IC8vIHJldHVybiBtYXRyaXhcblxuICAgIHJldHVybiBuZXcgU3BhcnNlTWF0cml4KHtcbiAgICAgIHZhbHVlczogdmFsdWVzLFxuICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgcHRyOiBwdHIsXG4gICAgICBzaXplOiBbbiwgMV1cbiAgICB9KTtcbiAgfTtcbiAgLyoqXG4gICAqIEdlbmVyYXRlIGEgbWF0cml4IGZyb20gYSBKU09OIG9iamVjdFxuICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBqc29uICBBbiBvYmplY3Qgc3RydWN0dXJlZCBsaWtlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiU3BhcnNlTWF0cml4XCIsIFwidmFsdWVzXCI6IFtdLCBcImluZGV4XCI6IFtdLCBcInB0clwiOiBbXSwgXCJzaXplXCI6IFtdfWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge1NwYXJzZU1hdHJpeH1cbiAgICovXG5cblxuICBTcGFyc2VNYXRyaXguZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBuZXcgU3BhcnNlTWF0cml4KGpzb24pO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgZGlhZ29uYWwgbWF0cml4LlxuICAgKlxuICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4XG4gICAqIEBwYXJhbSB7QXJyYXl9IHNpemUgICAgICAgICAgICAgICAgICAgICAgIFRoZSBtYXRyaXggc2l6ZS5cbiAgICogQHBhcmFtIHtudW1iZXIgfCBBcnJheSB8IE1hdHJpeCB9IHZhbHVlICAgVGhlIHZhbHVlcyBmb3IgdGhlIGRpYWdvbmFsLlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlcn0gW2s9MF0gICAgICAgICBUaGUga3RoIGRpYWdvbmFsIHdoZXJlIHRoZSB2ZWN0b3Igd2lsbCBiZSBmaWxsZWQgaW4uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbZGVmYXVsdFZhbHVlXSAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBub24tZGlhZ29uYWxcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkYXRhdHlwZV0gICAgICAgICAgICAgICAgVGhlIE1hdHJpeCBkYXRhdHlwZSwgdmFsdWVzIG11c3QgYmUgb2YgdGhpcyBkYXRhdHlwZS5cbiAgICpcbiAgICogQHJldHVybnMge1NwYXJzZU1hdHJpeH1cbiAgICovXG5cblxuICBTcGFyc2VNYXRyaXguZGlhZ29uYWwgPSBmdW5jdGlvbiAoc2l6ZSwgdmFsdWUsIGssIGRlZmF1bHRWYWx1ZSwgZGF0YXR5cGUpIHtcbiAgICBpZiAoISgwLCBfaXMuaXNBcnJheSkoc2l6ZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IGV4cGVjdGVkLCBzaXplIHBhcmFtZXRlcicpO1xuICAgIH1cblxuICAgIGlmIChzaXplLmxlbmd0aCAhPT0gMikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPbmx5IHR3byBkaW1lbnNpb25zIG1hdHJpeCBhcmUgc3VwcG9ydGVkJyk7XG4gICAgfSAvLyBtYXAgc2l6ZSAmIHZhbGlkYXRlXG5cblxuICAgIHNpemUgPSBzaXplLm1hcChmdW5jdGlvbiAocykge1xuICAgICAgLy8gY2hlY2sgaXQgaXMgYSBiaWcgbnVtYmVyXG4gICAgICBpZiAoKDAsIF9pcy5pc0JpZ051bWJlcikocykpIHtcbiAgICAgICAgLy8gY29udmVydCBpdFxuICAgICAgICBzID0gcy50b051bWJlcigpO1xuICAgICAgfSAvLyB2YWxpZGF0ZSBhcmd1bWVudHNcblxuXG4gICAgICBpZiAoISgwLCBfaXMuaXNOdW1iZXIpKHMpIHx8ICEoMCwgX251bWJlci5pc0ludGVnZXIpKHMpIHx8IHMgPCAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignU2l6ZSB2YWx1ZXMgbXVzdCBiZSBwb3NpdGl2ZSBpbnRlZ2VycycpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcztcbiAgICB9KTsgLy8gdmFsaWRhdGUgayBpZiBhbnlcblxuICAgIGlmIChrKSB7XG4gICAgICAvLyBjb252ZXJ0IEJpZ051bWJlciB0byBhIG51bWJlclxuICAgICAgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKGspKSB7XG4gICAgICAgIGsgPSBrLnRvTnVtYmVyKCk7XG4gICAgICB9IC8vIGlzIG11c3QgYmUgYW4gaW50ZWdlclxuXG5cbiAgICAgIGlmICghKDAsIF9pcy5pc051bWJlcikoaykgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoaykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHBhcmFtZXRlciBrIG11c3QgYmUgYW4gaW50ZWdlciBudW1iZXInKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZGVmYXVsdCB2YWx1ZVxuICAgICAgayA9IDA7XG4gICAgfSAvLyBlcXVhbCBzaWduYXR1cmUgdG8gdXNlXG5cblxuICAgIHZhciBlcSA9IGVxdWFsU2NhbGFyOyAvLyB6ZXJvIHZhbHVlXG5cbiAgICB2YXIgemVybyA9IDA7XG5cbiAgICBpZiAoKDAsIF9pcy5pc1N0cmluZykoZGF0YXR5cGUpKSB7XG4gICAgICAvLyBmaW5kIHNpZ25hdHVyZSB0aGF0IG1hdGNoZXMgKGRhdGF0eXBlLCBkYXRhdHlwZSlcbiAgICAgIGVxID0gdHlwZWQuZmluZChlcXVhbFNjYWxhciwgW2RhdGF0eXBlLCBkYXRhdHlwZV0pIHx8IGVxdWFsU2NhbGFyOyAvLyBjb252ZXJ0IDAgdG8gdGhlIHNhbWUgZGF0YXR5cGVcblxuICAgICAgemVybyA9IHR5cGVkLmNvbnZlcnQoMCwgZGF0YXR5cGUpO1xuICAgIH1cblxuICAgIHZhciBrU3VwZXIgPSBrID4gMCA/IGsgOiAwO1xuICAgIHZhciBrU3ViID0gayA8IDAgPyAtayA6IDA7IC8vIHJvd3MgYW5kIGNvbHVtbnNcblxuICAgIHZhciByb3dzID0gc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IHNpemVbMV07IC8vIG51bWJlciBvZiBub24temVybyBpdGVtc1xuXG4gICAgdmFyIG4gPSBNYXRoLm1pbihyb3dzIC0ga1N1YiwgY29sdW1ucyAtIGtTdXBlcik7IC8vIHZhbHVlIGV4dHJhY3Rpb24gZnVuY3Rpb25cblxuICAgIHZhciBfdmFsdWU7IC8vIGNoZWNrIHZhbHVlXG5cblxuICAgIGlmICgoMCwgX2lzLmlzQXJyYXkpKHZhbHVlKSkge1xuICAgICAgLy8gdmFsaWRhdGUgYXJyYXlcbiAgICAgIGlmICh2YWx1ZS5sZW5ndGggIT09IG4pIHtcbiAgICAgICAgLy8gbnVtYmVyIG9mIHZhbHVlcyBpbiBhcnJheSBtdXN0IGJlIG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHZhbHVlIGFycmF5IGxlbmd0aCcpO1xuICAgICAgfSAvLyBkZWZpbmUgZnVuY3Rpb25cblxuXG4gICAgICBfdmFsdWUgPSBmdW5jdGlvbiBfdmFsdWUoaSkge1xuICAgICAgICAvLyByZXR1cm4gdmFsdWUgQCBpXG4gICAgICAgIHJldHVybiB2YWx1ZVtpXTtcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzTWF0cml4KSh2YWx1ZSkpIHtcbiAgICAgIC8vIG1hdHJpeCBzaXplXG4gICAgICB2YXIgbXMgPSB2YWx1ZS5zaXplKCk7IC8vIHZhbGlkYXRlIG1hdHJpeFxuXG4gICAgICBpZiAobXMubGVuZ3RoICE9PSAxIHx8IG1zWzBdICE9PSBuKSB7XG4gICAgICAgIC8vIG51bWJlciBvZiB2YWx1ZXMgaW4gYXJyYXkgbXVzdCBiZSBuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBtYXRyaXggbGVuZ3RoJyk7XG4gICAgICB9IC8vIGRlZmluZSBmdW5jdGlvblxuXG5cbiAgICAgIF92YWx1ZSA9IGZ1bmN0aW9uIF92YWx1ZShpKSB7XG4gICAgICAgIC8vIHJldHVybiB2YWx1ZSBAIGlcbiAgICAgICAgcmV0dXJuIHZhbHVlLmdldChbaV0pO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZGVmaW5lIGZ1bmN0aW9uXG4gICAgICBfdmFsdWUgPSBmdW5jdGlvbiBfdmFsdWUoKSB7XG4gICAgICAgIC8vIHJldHVybiB2YWx1ZVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9O1xuICAgIH0gLy8gY3JlYXRlIGFycmF5c1xuXG5cbiAgICB2YXIgdmFsdWVzID0gW107XG4gICAgdmFyIGluZGV4ID0gW107XG4gICAgdmFyIHB0ciA9IFtdOyAvLyBsb29wIGl0ZW1zXG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgLy8gbnVtYmVyIG9mIHJvd3Mgd2l0aCB2YWx1ZVxuICAgICAgcHRyLnB1c2godmFsdWVzLmxlbmd0aCk7IC8vIGRpYWdvbmFsIGluZGV4XG5cbiAgICAgIHZhciBpID0gaiAtIGtTdXBlcjsgLy8gY2hlY2sgd2UgbmVlZCB0byBzZXQgZGlhZ29uYWwgdmFsdWVcblxuICAgICAgaWYgKGkgPj0gMCAmJiBpIDwgbikge1xuICAgICAgICAvLyBnZXQgdmFsdWUgQCBpXG4gICAgICAgIHZhciB2ID0gX3ZhbHVlKGkpOyAvLyBjaGVjayBmb3IgemVyb1xuXG5cbiAgICAgICAgaWYgKCFlcSh2LCB6ZXJvKSkge1xuICAgICAgICAgIC8vIGNvbHVtblxuICAgICAgICAgIGluZGV4LnB1c2goaSArIGtTdWIpOyAvLyBhZGQgdmFsdWVcblxuICAgICAgICAgIHZhbHVlcy5wdXNoKHYpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBsYXN0IHZhbHVlIHNob3VsZCBiZSBudW1iZXIgb2YgdmFsdWVzXG5cblxuICAgIHB0ci5wdXNoKHZhbHVlcy5sZW5ndGgpOyAvLyBjcmVhdGUgU3BhcnNlTWF0cml4XG5cbiAgICByZXR1cm4gbmV3IFNwYXJzZU1hdHJpeCh7XG4gICAgICB2YWx1ZXM6IHZhbHVlcyxcbiAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgIHB0cjogcHRyLFxuICAgICAgc2l6ZTogW3Jvd3MsIGNvbHVtbnNdXG4gICAgfSk7XG4gIH07XG4gIC8qKlxuICAgKiBTd2FwIHJvd3MgaSBhbmQgaiBpbiBNYXRyaXguXG4gICAqXG4gICAqIEBtZW1iZXJvZiBTcGFyc2VNYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGkgICAgICAgTWF0cml4IHJvdyBpbmRleCAxXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBqICAgICAgIE1hdHJpeCByb3cgaW5kZXggMlxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICBUaGUgbWF0cml4IHJlZmVyZW5jZVxuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUuc3dhcFJvd3MgPSBmdW5jdGlvbiAoaSwgaikge1xuICAgIC8vIGNoZWNrIGluZGV4XG4gICAgaWYgKCEoMCwgX2lzLmlzTnVtYmVyKShpKSB8fCAhKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShpKSB8fCAhKDAsIF9pcy5pc051bWJlcikoaikgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoaikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUm93IGluZGV4IG11c3QgYmUgcG9zaXRpdmUgaW50ZWdlcnMnKTtcbiAgICB9IC8vIGNoZWNrIGRpbWVuc2lvbnNcblxuXG4gICAgaWYgKHRoaXMuX3NpemUubGVuZ3RoICE9PSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ09ubHkgdHdvIGRpbWVuc2lvbmFsIG1hdHJpeCBpcyBzdXBwb3J0ZWQnKTtcbiAgICB9IC8vIHZhbGlkYXRlIGluZGV4XG5cblxuICAgICgwLCBfYXJyYXkudmFsaWRhdGVJbmRleCkoaSwgdGhpcy5fc2l6ZVswXSk7XG4gICAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShqLCB0aGlzLl9zaXplWzBdKTsgLy8gc3dhcCByb3dzXG5cbiAgICBTcGFyc2VNYXRyaXguX3N3YXBSb3dzKGksIGosIHRoaXMuX3NpemVbMV0sIHRoaXMuX3ZhbHVlcywgdGhpcy5faW5kZXgsIHRoaXMuX3B0cik7IC8vIHJldHVybiBjdXJyZW50IGluc3RhbmNlXG5cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogTG9vcCByb3dzIHdpdGggZGF0YSBpbiBjb2x1bW4gai5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGogICAgICAgICAgICBDb2x1bW5cbiAgICogQHBhcmFtIHtBcnJheX0gdmFsdWVzICAgICAgICBNYXRyaXggdmFsdWVzXG4gICAqIEBwYXJhbSB7QXJyYXl9IGluZGV4ICAgICAgICAgTWF0cml4IHJvdyBpbmRlY2VzXG4gICAqIEBwYXJhbSB7QXJyYXl9IHB0ciAgICAgICAgICAgTWF0cml4IGNvbHVtbiBwb2ludGVyc1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgZm9yIGV2ZXJ5IHJvdyBpbiBjb2x1bW4galxuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5fZm9yRWFjaFJvdyA9IGZ1bmN0aW9uIChqLCB2YWx1ZXMsIGluZGV4LCBwdHIsIGNhbGxiYWNrKSB7XG4gICAgLy8gaW5kZWNlcyBmb3IgY29sdW1uIGpcbiAgICB2YXIgazAgPSBwdHJbal07XG4gICAgdmFyIGsxID0gcHRyW2ogKyAxXTsgLy8gbG9vcFxuXG4gICAgZm9yICh2YXIgayA9IGswOyBrIDwgazE7IGsrKykge1xuICAgICAgLy8gaW52b2tlIGNhbGxiYWNrXG4gICAgICBjYWxsYmFjayhpbmRleFtrXSwgdmFsdWVzW2tdKTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBTd2FwIHJvd3MgeCBhbmQgeSBpbiBTcGFyc2UgTWF0cml4IGRhdGEgc3RydWN0dXJlcy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHggICAgICAgICBNYXRyaXggcm93IGluZGV4IDFcbiAgICogQHBhcmFtIHtudW1iZXJ9IHkgICAgICAgICBNYXRyaXggcm93IGluZGV4IDJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbnMgICBOdW1iZXIgb2YgY29sdW1ucyBpbiBtYXRyaXhcbiAgICogQHBhcmFtIHtBcnJheX0gdmFsdWVzICAgICBNYXRyaXggdmFsdWVzXG4gICAqIEBwYXJhbSB7QXJyYXl9IGluZGV4ICAgICAgTWF0cml4IHJvdyBpbmRlY2VzXG4gICAqIEBwYXJhbSB7QXJyYXl9IHB0ciAgICAgICAgTWF0cml4IGNvbHVtbiBwb2ludGVyc1xuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5fc3dhcFJvd3MgPSBmdW5jdGlvbiAoeCwgeSwgY29sdW1ucywgdmFsdWVzLCBpbmRleCwgcHRyKSB7XG4gICAgLy8gbG9vcCBjb2x1bW5zXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgIC8vIGswIDw9IGsgPCBrMSB3aGVyZSBrMCA9IF9wdHJbal0gJiYgazEgPSBfcHRyW2orMV1cbiAgICAgIHZhciBrMCA9IHB0cltqXTtcbiAgICAgIHZhciBrMSA9IHB0cltqICsgMV07IC8vIGZpbmQgdmFsdWUgaW5kZXggQCB4XG5cbiAgICAgIHZhciBreCA9IF9nZXRWYWx1ZUluZGV4KHgsIGswLCBrMSwgaW5kZXgpOyAvLyBmaW5kIHZhbHVlIGluZGV4IEAgeFxuXG5cbiAgICAgIHZhciBreSA9IF9nZXRWYWx1ZUluZGV4KHksIGswLCBrMSwgaW5kZXgpOyAvLyBjaGVjayBib3RoIHJvd3MgZXhpc3QgaW4gbWF0cml4XG5cblxuICAgICAgaWYgKGt4IDwgazEgJiYga3kgPCBrMSAmJiBpbmRleFtreF0gPT09IHggJiYgaW5kZXhba3ldID09PSB5KSB7XG4gICAgICAgIC8vIHN3YXAgdmFsdWVzIChjaGVjayBmb3IgcGF0dGVybiBtYXRyaXgpXG4gICAgICAgIGlmICh2YWx1ZXMpIHtcbiAgICAgICAgICB2YXIgdiA9IHZhbHVlc1treF07XG4gICAgICAgICAgdmFsdWVzW2t4XSA9IHZhbHVlc1treV07XG4gICAgICAgICAgdmFsdWVzW2t5XSA9IHY7XG4gICAgICAgIH0gLy8gbmV4dCBjb2x1bW5cblxuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSAvLyBjaGVjayB4IHJvdyBleGlzdCAmIG5vIHkgcm93XG5cblxuICAgICAgaWYgKGt4IDwgazEgJiYgaW5kZXhba3hdID09PSB4ICYmIChreSA+PSBrMSB8fCBpbmRleFtreV0gIT09IHkpKSB7XG4gICAgICAgIC8vIHZhbHVlIEAgeCAoY2hlY2sgZm9yIHBhdHRlcm4gbWF0cml4KVxuICAgICAgICB2YXIgdnggPSB2YWx1ZXMgPyB2YWx1ZXNba3hdIDogdW5kZWZpbmVkOyAvLyBpbnNlcnQgdmFsdWUgQCB5XG5cbiAgICAgICAgaW5kZXguc3BsaWNlKGt5LCAwLCB5KTtcblxuICAgICAgICBpZiAodmFsdWVzKSB7XG4gICAgICAgICAgdmFsdWVzLnNwbGljZShreSwgMCwgdngpO1xuICAgICAgICB9IC8vIHJlbW92ZSB2YWx1ZSBAIHggKGFkanVzdCBhcnJheSBpbmRleCBpZiBuZWVkZWQpXG5cblxuICAgICAgICBpbmRleC5zcGxpY2Uoa3kgPD0ga3ggPyBreCArIDEgOiBreCwgMSk7XG5cbiAgICAgICAgaWYgKHZhbHVlcykge1xuICAgICAgICAgIHZhbHVlcy5zcGxpY2Uoa3kgPD0ga3ggPyBreCArIDEgOiBreCwgMSk7XG4gICAgICAgIH0gLy8gbmV4dCBjb2x1bW5cblxuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSAvLyBjaGVjayB5IHJvdyBleGlzdCAmIG5vIHggcm93XG5cblxuICAgICAgaWYgKGt5IDwgazEgJiYgaW5kZXhba3ldID09PSB5ICYmIChreCA+PSBrMSB8fCBpbmRleFtreF0gIT09IHgpKSB7XG4gICAgICAgIC8vIHZhbHVlIEAgeSAoY2hlY2sgZm9yIHBhdHRlcm4gbWF0cml4KVxuICAgICAgICB2YXIgdnkgPSB2YWx1ZXMgPyB2YWx1ZXNba3ldIDogdW5kZWZpbmVkOyAvLyBpbnNlcnQgdmFsdWUgQCB4XG5cbiAgICAgICAgaW5kZXguc3BsaWNlKGt4LCAwLCB4KTtcblxuICAgICAgICBpZiAodmFsdWVzKSB7XG4gICAgICAgICAgdmFsdWVzLnNwbGljZShreCwgMCwgdnkpO1xuICAgICAgICB9IC8vIHJlbW92ZSB2YWx1ZSBAIHkgKGFkanVzdCBhcnJheSBpbmRleCBpZiBuZWVkZWQpXG5cblxuICAgICAgICBpbmRleC5zcGxpY2Uoa3ggPD0ga3kgPyBreSArIDEgOiBreSwgMSk7XG5cbiAgICAgICAgaWYgKHZhbHVlcykge1xuICAgICAgICAgIHZhbHVlcy5zcGxpY2Uoa3ggPD0ga3kgPyBreSArIDEgOiBreSwgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFNwYXJzZU1hdHJpeDtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNwYXJzZU1hdHJpeENsYXNzID0gY3JlYXRlU3BhcnNlTWF0cml4Q2xhc3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUluZGV4ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9pc1wiKTtcblxudmFyIG5hbWUgPSAnaW5kZXgnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnSW5kZXgnXTtcbnZhciBjcmVhdGVJbmRleCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBJbmRleCA9IF9yZWYuSW5kZXg7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBpbmRleC4gQW4gSW5kZXggY2FuIHN0b3JlIHJhbmdlcyBoYXZpbmcgc3RhcnQsIHN0ZXAsIGFuZCBlbmRcbiAgICogZm9yIG11bHRpcGxlIGRpbWVuc2lvbnMuXG4gICAqIE1hdHJpeC5nZXQsIE1hdHJpeC5zZXQsIGFuZCBtYXRoLnN1YnNldCBhY2NlcHQgYW4gSW5kZXggYXMgaW5wdXQuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguaW5kZXgocmFuZ2UxLCByYW5nZTIsIC4uLilcbiAgICpcbiAgICogV2hlcmUgZWFjaCByYW5nZSBjYW4gYmUgYW55IG9mOlxuICAgKlxuICAgKiAtIEEgbnVtYmVyXG4gICAqIC0gQSBzdHJpbmcgZm9yIGdldHRpbmcvc2V0dGluZyBhbiBvYmplY3QgcHJvcGVydHlcbiAgICogLSBBbiBpbnN0YW5jZSBvZiBgUmFuZ2VgXG4gICAqIC0gQSBvbmUtZGltZW5zaW9uYWwgQXJyYXkgb3IgYSBNYXRyaXggd2l0aCBudW1iZXJzXG4gICAqXG4gICAqIEluZGV4ZXMgbXVzdCBiZSB6ZXJvLWJhc2VkLCBpbnRlZ2VyIG51bWJlcnMuXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBjb25zdCBiID0gWzEsIDIsIDMsIDQsIDVdXG4gICAqICAgIG1hdGguc3Vic2V0KGIsIG1hdGguaW5kZXgoWzEsIDIsIDNdKSkgICAgIC8vIHJldHVybnMgWzIsIDMsIDRdXG4gICAqXG4gICAqICAgIGNvbnN0IGEgPSBtYXRoLm1hdHJpeChbWzEsIDJdLCBbMywgNF1dKVxuICAgKiAgICBhLnN1YnNldChtYXRoLmluZGV4KDAsIDEpKSAgICAgICAgICAgICAvLyByZXR1cm5zIDJcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGJpZ251bWJlciwgYm9vbGVhbiwgY29tcGxleCwgbWF0cml4LCBudW1iZXIsIHN0cmluZywgdW5pdFxuICAgKlxuICAgKiBAcGFyYW0gey4uLip9IHJhbmdlcyAgIFplcm8gb3IgbW9yZSByYW5nZXMgb3IgbnVtYmVycy5cbiAgICogQHJldHVybiB7SW5kZXh9ICAgICAgICBSZXR1cm5zIHRoZSBjcmVhdGVkIGluZGV4XG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICcuLi5udW1iZXIgfCBzdHJpbmcgfCBCaWdOdW1iZXIgfCBSYW5nZSB8IEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gbnVtYmVyU3RyaW5nQmlnTnVtYmVyUmFuZ2VBcnJheU1hdHJpeChhcmdzKSB7XG4gICAgICB2YXIgcmFuZ2VzID0gYXJncy5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgICAgICBpZiAoKDAsIF9pcy5pc0JpZ051bWJlcikoYXJnKSkge1xuICAgICAgICAgIHJldHVybiBhcmcudG9OdW1iZXIoKTsgLy8gY29udmVydCBCaWdOdW1iZXIgdG8gTnVtYmVyXG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhcmcpIHx8ICgwLCBfaXMuaXNNYXRyaXgpKGFyZykpIHtcbiAgICAgICAgICByZXR1cm4gYXJnLm1hcChmdW5jdGlvbiAoZWxlbSkge1xuICAgICAgICAgICAgLy8gY29udmVydCBCaWdOdW1iZXIgdG8gTnVtYmVyXG4gICAgICAgICAgICByZXR1cm4gKDAsIF9pcy5pc0JpZ051bWJlcikoZWxlbSkgPyBlbGVtLnRvTnVtYmVyKCkgOiBlbGVtO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBhcmc7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdmFyIHJlcyA9IG5ldyBJbmRleCgpO1xuICAgICAgSW5kZXguYXBwbHkocmVzLCByYW5nZXMpO1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZUluZGV4ID0gY3JlYXRlSW5kZXg7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU1hdHJpeCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ21hdHJpeCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdNYXRyaXgnLCAnRGVuc2VNYXRyaXgnLCAnU3BhcnNlTWF0cml4J107XG52YXIgY3JlYXRlTWF0cml4ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIE1hdHJpeCA9IF9yZWYuTWF0cml4LFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4LFxuICAgICAgU3BhcnNlTWF0cml4ID0gX3JlZi5TcGFyc2VNYXRyaXg7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIE1hdHJpeC4gVGhlIGZ1bmN0aW9uIGNyZWF0ZXMgYSBuZXcgYG1hdGguTWF0cml4YCBvYmplY3QgZnJvbVxuICAgKiBhbiBgQXJyYXlgLiBBIE1hdHJpeCBoYXMgdXRpbGl0eSBmdW5jdGlvbnMgdG8gbWFuaXB1bGF0ZSB0aGUgZGF0YSBpbiB0aGVcbiAgICogbWF0cml4LCBsaWtlIGdldHRpbmcgdGhlIHNpemUgYW5kIGdldHRpbmcgb3Igc2V0dGluZyB2YWx1ZXMgaW4gdGhlIG1hdHJpeC5cbiAgICogU3VwcG9ydGVkIHN0b3JhZ2UgZm9ybWF0cyBhcmUgJ2RlbnNlJyBhbmQgJ3NwYXJzZScuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5tYXRyaXgoKSAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjcmVhdGVzIGFuIGVtcHR5IG1hdHJpeCB1c2luZyBkZWZhdWx0IHN0b3JhZ2UgZm9ybWF0IChkZW5zZSkuXG4gICAqICAgIG1hdGgubWF0cml4KGRhdGEpICAgICAgICAgICAgICAgICAgICAgLy8gY3JlYXRlcyBhIG1hdHJpeCB3aXRoIGluaXRpYWwgZGF0YSB1c2luZyBkZWZhdWx0IHN0b3JhZ2UgZm9ybWF0IChkZW5zZSkuXG4gICAqICAgIG1hdGgubWF0cml4KCdkZW5zZScpICAgICAgICAgICAgICAgICAgLy8gY3JlYXRlcyBhbiBlbXB0eSBtYXRyaXggdXNpbmcgdGhlIGdpdmVuIHN0b3JhZ2UgZm9ybWF0LlxuICAgKiAgICBtYXRoLm1hdHJpeChkYXRhLCAnZGVuc2UnKSAgICAgICAgICAgIC8vIGNyZWF0ZXMgYSBtYXRyaXggd2l0aCBpbml0aWFsIGRhdGEgdXNpbmcgdGhlIGdpdmVuIHN0b3JhZ2UgZm9ybWF0LlxuICAgKiAgICBtYXRoLm1hdHJpeChkYXRhLCAnc3BhcnNlJykgICAgICAgICAgIC8vIGNyZWF0ZXMgYSBzcGFyc2UgbWF0cml4IHdpdGggaW5pdGlhbCBkYXRhLlxuICAgKiAgICBtYXRoLm1hdHJpeChkYXRhLCAnc3BhcnNlJywgJ251bWJlcicpIC8vIGNyZWF0ZXMgYSBzcGFyc2UgbWF0cml4IHdpdGggaW5pdGlhbCBkYXRhLCBudW1iZXIgZGF0YSB0eXBlLlxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbGV0IG0gPSBtYXRoLm1hdHJpeChbWzEsIDJdLCBbMywgNF1dKVxuICAgKiAgICBtLnNpemUoKSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFycmF5IFsyLCAyXVxuICAgKiAgICBtLnJlc2l6ZShbMywgMl0sIDUpXG4gICAqICAgIG0udmFsdWVPZigpICAgICAgICAgICAgICAgICAgICAgLy8gQXJyYXkgW1sxLCAyXSwgWzMsIDRdLCBbNSwgNV1dXG4gICAqICAgIG0uZ2V0KFsxLCAwXSkgICAgICAgICAgICAgICAgICAgIC8vIG51bWJlciAzXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiaWdudW1iZXIsIGJvb2xlYW4sIGNvbXBsZXgsIGluZGV4LCBudW1iZXIsIHN0cmluZywgdW5pdCwgc3BhcnNlXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IFtkYXRhXSAgICBBIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZm9ybWF0XSAgICAgICAgICBUaGUgTWF0cml4IHN0b3JhZ2UgZm9ybWF0XG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gVGhlIGNyZWF0ZWQgbWF0cml4XG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICcnOiBmdW5jdGlvbiBfKCkge1xuICAgICAgcmV0dXJuIF9jcmVhdGUoW10pO1xuICAgIH0sXG4gICAgc3RyaW5nOiBmdW5jdGlvbiBzdHJpbmcoZm9ybWF0KSB7XG4gICAgICByZXR1cm4gX2NyZWF0ZShbXSwgZm9ybWF0KTtcbiAgICB9LFxuICAgICdzdHJpbmcsIHN0cmluZyc6IGZ1bmN0aW9uIHN0cmluZ1N0cmluZyhmb3JtYXQsIGRhdGF0eXBlKSB7XG4gICAgICByZXR1cm4gX2NyZWF0ZShbXSwgZm9ybWF0LCBkYXRhdHlwZSk7XG4gICAgfSxcbiAgICBBcnJheTogZnVuY3Rpb24gQXJyYXkoZGF0YSkge1xuICAgICAgcmV0dXJuIF9jcmVhdGUoZGF0YSk7XG4gICAgfSxcbiAgICBNYXRyaXg6IGZ1bmN0aW9uIE1hdHJpeChkYXRhKSB7XG4gICAgICByZXR1cm4gX2NyZWF0ZShkYXRhLCBkYXRhLnN0b3JhZ2UoKSk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgsIHN0cmluZyc6IF9jcmVhdGUsXG4gICAgJ0FycmF5IHwgTWF0cml4LCBzdHJpbmcsIHN0cmluZyc6IF9jcmVhdGVcbiAgfSk7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgTWF0cml4IHdpdGggZ2l2ZW4gc3RvcmFnZSBmb3JtYXRcbiAgICogQHBhcmFtIHtBcnJheX0gZGF0YVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Zvcm1hdF1cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkYXRhdHlwZV1cbiAgICogQHJldHVybnMge01hdHJpeH0gUmV0dXJucyBhIG5ldyBNYXRyaXhcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgZnVuY3Rpb24gX2NyZWF0ZShkYXRhLCBmb3JtYXQsIGRhdGF0eXBlKSB7XG4gICAgLy8gZ2V0IHN0b3JhZ2UgZm9ybWF0IGNvbnN0cnVjdG9yXG4gICAgaWYgKGZvcm1hdCA9PT0gJ2RlbnNlJyB8fCBmb3JtYXQgPT09ICdkZWZhdWx0JyB8fCBmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG5ldyBEZW5zZU1hdHJpeChkYXRhLCBkYXRhdHlwZSk7XG4gICAgfVxuXG4gICAgaWYgKGZvcm1hdCA9PT0gJ3NwYXJzZScpIHtcbiAgICAgIHJldHVybiBuZXcgU3BhcnNlTWF0cml4KGRhdGEsIGRhdGF0eXBlKTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIG1hdHJpeCB0eXBlICcgKyBKU09OLnN0cmluZ2lmeShmb3JtYXQpICsgJy4nKTtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZU1hdHJpeCA9IGNyZWF0ZU1hdHJpeDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3BhcnNlID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnc3BhcnNlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ1NwYXJzZU1hdHJpeCddO1xudmFyIGNyZWF0ZVNwYXJzZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBTcGFyc2VNYXRyaXggPSBfcmVmLlNwYXJzZU1hdHJpeDtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgU3BhcnNlIE1hdHJpeC4gVGhlIGZ1bmN0aW9uIGNyZWF0ZXMgYSBuZXcgYG1hdGguTWF0cml4YCBvYmplY3QgZnJvbVxuICAgKiBhbiBgQXJyYXlgLiBBIE1hdHJpeCBoYXMgdXRpbGl0eSBmdW5jdGlvbnMgdG8gbWFuaXB1bGF0ZSB0aGUgZGF0YSBpbiB0aGVcbiAgICogbWF0cml4LCBsaWtlIGdldHRpbmcgdGhlIHNpemUgYW5kIGdldHRpbmcgb3Igc2V0dGluZyB2YWx1ZXMgaW4gdGhlIG1hdHJpeC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnNwYXJzZSgpICAgICAgICAgICAgICAgLy8gY3JlYXRlcyBhbiBlbXB0eSBzcGFyc2UgbWF0cml4LlxuICAgKiAgICBtYXRoLnNwYXJzZShkYXRhKSAgICAgICAgICAgLy8gY3JlYXRlcyBhIHNwYXJzZSBtYXRyaXggd2l0aCBpbml0aWFsIGRhdGEuXG4gICAqICAgIG1hdGguc3BhcnNlKGRhdGEsICdudW1iZXInKSAvLyBjcmVhdGVzIGEgc3BhcnNlIG1hdHJpeCB3aXRoIGluaXRpYWwgZGF0YSwgbnVtYmVyIGRhdGF0eXBlLlxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbGV0IG0gPSBtYXRoLnNwYXJzZShbWzEsIDJdLCBbMywgNF1dKVxuICAgKiAgICBtLnNpemUoKSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFycmF5IFsyLCAyXVxuICAgKiAgICBtLnJlc2l6ZShbMywgMl0sIDUpXG4gICAqICAgIG0udmFsdWVPZigpICAgICAgICAgICAgICAgICAgICAgLy8gQXJyYXkgW1sxLCAyXSwgWzMsIDRdLCBbNSwgNV1dXG4gICAqICAgIG0uZ2V0KFsxLCAwXSkgICAgICAgICAgICAgICAgICAgIC8vIG51bWJlciAzXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiaWdudW1iZXIsIGJvb2xlYW4sIGNvbXBsZXgsIGluZGV4LCBudW1iZXIsIHN0cmluZywgdW5pdCwgbWF0cml4XG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IFtkYXRhXSAgICBBIHR3byBkaW1lbnNpb25hbCBhcnJheVxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9IFRoZSBjcmVhdGVkIG1hdHJpeFxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnJzogZnVuY3Rpb24gXygpIHtcbiAgICAgIHJldHVybiBuZXcgU3BhcnNlTWF0cml4KFtdKTtcbiAgICB9LFxuICAgIHN0cmluZzogZnVuY3Rpb24gc3RyaW5nKGRhdGF0eXBlKSB7XG4gICAgICByZXR1cm4gbmV3IFNwYXJzZU1hdHJpeChbXSwgZGF0YXR5cGUpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoZGF0YSkge1xuICAgICAgcmV0dXJuIG5ldyBTcGFyc2VNYXRyaXgoZGF0YSk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgsIHN0cmluZyc6IGZ1bmN0aW9uIEFycmF5TWF0cml4U3RyaW5nKGRhdGEsIGRhdGF0eXBlKSB7XG4gICAgICByZXR1cm4gbmV3IFNwYXJzZU1hdHJpeChkYXRhLCBkYXRhdHlwZSk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTcGFyc2UgPSBjcmVhdGVTcGFyc2U7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFsZ29yaXRobTAxID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9EaW1lbnNpb25FcnJvciA9IHJlcXVpcmUoXCIuLi8uLi8uLi9lcnJvci9EaW1lbnNpb25FcnJvclwiKTtcblxudmFyIG5hbWUgPSAnYWxnb3JpdGhtMDEnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVBbGdvcml0aG0wMSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGVzIG92ZXIgU3BhcnNlTWF0cml4IG5vbnplcm8gaXRlbXMgYW5kIGludm9rZXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGYoRGlqLCBTaWopLlxuICAgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIE5OWiB0aW1lcyAobnVtYmVyIG9mIG5vbnplcm8gaXRlbXMgaW4gU3BhcnNlTWF0cml4KS5cbiAgICpcbiAgICpcbiAgICogICAgICAgICAg4pSMICBmKERpaiwgU2lqKSAgOyBTKGksaikgIT09IDBcbiAgICogQyhpLGopID0g4pSkXG4gICAqICAgICAgICAgIOKUlCAgRGlqICAgICAgICAgIDsgb3RoZXJ3aXNlXG4gICAqXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgIGRlbnNlTWF0cml4ICAgICAgIFRoZSBEZW5zZU1hdHJpeCBpbnN0YW5jZSAoRClcbiAgICogQHBhcmFtIHtNYXRyaXh9ICAgc3BhcnNlTWF0cml4ICAgICAgVGhlIFNwYXJzZU1hdHJpeCBpbnN0YW5jZSAoUylcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgICAgICAgICAgVGhlIGYoRGlqLFNpaikgb3BlcmF0aW9uIHRvIGludm9rZSwgd2hlcmUgRGlqID0gRGVuc2VNYXRyaXgoaSxqKSBhbmQgU2lqID0gU3BhcnNlTWF0cml4KGksailcbiAgICogQHBhcmFtIHtib29sZWFufSAgaW52ZXJzZSAgICAgICAgICAgQSB0cnVlIHZhbHVlIGluZGljYXRlcyBjYWxsYmFjayBzaG91bGQgYmUgaW52b2tlZCBmKFNpaixEaWopXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgICAgIERlbnNlTWF0cml4IChDKVxuICAgKlxuICAgKiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pvc2Rlam9uZy9tYXRoanMvcHVsbC8zNDYjaXNzdWVjb21tZW50LTk3NDc3NTcxXG4gICAqL1xuICByZXR1cm4gZnVuY3Rpb24gYWxnb3JpdGhtMShkZW5zZU1hdHJpeCwgc3BhcnNlTWF0cml4LCBjYWxsYmFjaywgaW52ZXJzZSkge1xuICAgIC8vIGRlbnNlIG1hdHJpeCBhcnJheXNcbiAgICB2YXIgYWRhdGEgPSBkZW5zZU1hdHJpeC5fZGF0YTtcbiAgICB2YXIgYXNpemUgPSBkZW5zZU1hdHJpeC5fc2l6ZTtcbiAgICB2YXIgYWR0ID0gZGVuc2VNYXRyaXguX2RhdGF0eXBlOyAvLyBzcGFyc2UgbWF0cml4IGFycmF5c1xuXG4gICAgdmFyIGJ2YWx1ZXMgPSBzcGFyc2VNYXRyaXguX3ZhbHVlcztcbiAgICB2YXIgYmluZGV4ID0gc3BhcnNlTWF0cml4Ll9pbmRleDtcbiAgICB2YXIgYnB0ciA9IHNwYXJzZU1hdHJpeC5fcHRyO1xuICAgIHZhciBic2l6ZSA9IHNwYXJzZU1hdHJpeC5fc2l6ZTtcbiAgICB2YXIgYmR0ID0gc3BhcnNlTWF0cml4Ll9kYXRhdHlwZTsgLy8gdmFsaWRhdGUgZGltZW5zaW9uc1xuXG4gICAgaWYgKGFzaXplLmxlbmd0aCAhPT0gYnNpemUubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKGFzaXplLmxlbmd0aCwgYnNpemUubGVuZ3RoKTtcbiAgICB9IC8vIGNoZWNrIHJvd3MgJiBjb2x1bW5zXG5cblxuICAgIGlmIChhc2l6ZVswXSAhPT0gYnNpemVbMF0gfHwgYXNpemVbMV0gIT09IGJzaXplWzFdKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRGltZW5zaW9uIG1pc21hdGNoLiBNYXRyaXggQSAoJyArIGFzaXplICsgJykgbXVzdCBtYXRjaCBNYXRyaXggQiAoJyArIGJzaXplICsgJyknKTtcbiAgICB9IC8vIHNwYXJzZSBtYXRyaXggY2Fubm90IGJlIGEgUGF0dGVybiBtYXRyaXhcblxuXG4gICAgaWYgKCFidmFsdWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBwZXJmb3JtIG9wZXJhdGlvbiBvbiBEZW5zZSBNYXRyaXggYW5kIFBhdHRlcm4gU3BhcnNlIE1hdHJpeCcpO1xuICAgIH0gLy8gcm93cyAmIGNvbHVtbnNcblxuXG4gICAgdmFyIHJvd3MgPSBhc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IGFzaXplWzFdOyAvLyBwcm9jZXNzIGRhdGEgdHlwZXNcblxuICAgIHZhciBkdCA9IHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnICYmIGFkdCA9PT0gYmR0ID8gYWR0IDogdW5kZWZpbmVkOyAvLyBjYWxsYmFjayBmdW5jdGlvblxuXG4gICAgdmFyIGNmID0gZHQgPyB0eXBlZC5maW5kKGNhbGxiYWNrLCBbZHQsIGR0XSkgOiBjYWxsYmFjazsgLy8gdmFyc1xuXG4gICAgdmFyIGksIGo7IC8vIHJlc3VsdCAoRGVuc2VNYXRyaXgpXG5cbiAgICB2YXIgY2RhdGEgPSBbXTsgLy8gaW5pdGlhbGl6ZSBjXG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICBjZGF0YVtpXSA9IFtdO1xuICAgIH0gLy8gd29ya3NwYWNlXG5cblxuICAgIHZhciB4ID0gW107IC8vIG1hcmtzIGluZGljYXRpbmcgd2UgaGF2ZSBhIHZhbHVlIGluIHggZm9yIGEgZ2l2ZW4gY29sdW1uXG5cbiAgICB2YXIgdyA9IFtdOyAvLyBsb29wIGNvbHVtbnMgaW4gYlxuXG4gICAgZm9yIChqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgLy8gY29sdW1uIG1hcmtcbiAgICAgIHZhciBtYXJrID0gaiArIDE7IC8vIHZhbHVlcyBpbiBjb2x1bW4galxuXG4gICAgICBmb3IgKHZhciBrMCA9IGJwdHJbal0sIGsxID0gYnB0cltqICsgMV0sIGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgLy8gcm93XG4gICAgICAgIGkgPSBiaW5kZXhba107IC8vIHVwZGF0ZSB3b3Jrc3BhY2VcblxuICAgICAgICB4W2ldID0gaW52ZXJzZSA/IGNmKGJ2YWx1ZXNba10sIGFkYXRhW2ldW2pdKSA6IGNmKGFkYXRhW2ldW2pdLCBidmFsdWVzW2tdKTsgLy8gbWFyayBpIGFzIHVwZGF0ZWRcblxuICAgICAgICB3W2ldID0gbWFyaztcbiAgICAgIH0gLy8gbG9vcCByb3dzXG5cblxuICAgICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAvLyBjaGVjayByb3cgaXMgaW4gd29ya3NwYWNlXG4gICAgICAgIGlmICh3W2ldID09PSBtYXJrKSB7XG4gICAgICAgICAgLy8gY1tpXVtqXSB3YXMgYWxyZWFkeSBjYWxjdWxhdGVkXG4gICAgICAgICAgY2RhdGFbaV1bal0gPSB4W2ldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGl0ZW0gZG9lcyBub3QgZXhpc3QgaW4gU1xuICAgICAgICAgIGNkYXRhW2ldW2pdID0gYWRhdGFbaV1bal07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIHJldHVybiBkZW5zZSBtYXRyaXhcblxuXG4gICAgcmV0dXJuIGRlbnNlTWF0cml4LmNyZWF0ZURlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6IGNkYXRhLFxuICAgICAgc2l6ZTogW3Jvd3MsIGNvbHVtbnNdLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7XG4gIH07XG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMDEgPSBjcmVhdGVBbGdvcml0aG0wMTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMDIgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX0RpbWVuc2lvbkVycm9yID0gcmVxdWlyZShcIi4uLy4uLy4uL2Vycm9yL0RpbWVuc2lvbkVycm9yXCIpO1xuXG52YXIgbmFtZSA9ICdhbGdvcml0aG0wMic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdlcXVhbFNjYWxhciddO1xudmFyIGNyZWF0ZUFsZ29yaXRobTAyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcjtcblxuICAvKipcbiAgICogSXRlcmF0ZXMgb3ZlciBTcGFyc2VNYXRyaXggbm9uemVybyBpdGVtcyBhbmQgaW52b2tlcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZihEaWosIFNpaikuXG4gICAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgTk5aIHRpbWVzIChudW1iZXIgb2Ygbm9uemVybyBpdGVtcyBpbiBTcGFyc2VNYXRyaXgpLlxuICAgKlxuICAgKlxuICAgKiAgICAgICAgICDilIwgIGYoRGlqLCBTaWopICA7IFMoaSxqKSAhPT0gMFxuICAgKiBDKGksaikgPSDilKRcbiAgICogICAgICAgICAg4pSUICAwICAgICAgICAgICAgOyBvdGhlcndpc2VcbiAgICpcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9ICAgZGVuc2VNYXRyaXggICAgICAgVGhlIERlbnNlTWF0cml4IGluc3RhbmNlIChEKVxuICAgKiBAcGFyYW0ge01hdHJpeH0gICBzcGFyc2VNYXRyaXggICAgICBUaGUgU3BhcnNlTWF0cml4IGluc3RhbmNlIChTKVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgICAgICAgICBUaGUgZihEaWosU2lqKSBvcGVyYXRpb24gdG8gaW52b2tlLCB3aGVyZSBEaWogPSBEZW5zZU1hdHJpeChpLGopIGFuZCBTaWogPSBTcGFyc2VNYXRyaXgoaSxqKVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICBpbnZlcnNlICAgICAgICAgICBBIHRydWUgdmFsdWUgaW5kaWNhdGVzIGNhbGxiYWNrIHNob3VsZCBiZSBpbnZva2VkIGYoU2lqLERpailcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICAgICAgICAgU3BhcnNlTWF0cml4IChDKVxuICAgKlxuICAgKiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pvc2Rlam9uZy9tYXRoanMvcHVsbC8zNDYjaXNzdWVjb21tZW50LTk3NDc3NTcxXG4gICAqL1xuICByZXR1cm4gZnVuY3Rpb24gYWxnb3JpdGhtMDIoZGVuc2VNYXRyaXgsIHNwYXJzZU1hdHJpeCwgY2FsbGJhY2ssIGludmVyc2UpIHtcbiAgICAvLyBkZW5zZSBtYXRyaXggYXJyYXlzXG4gICAgdmFyIGFkYXRhID0gZGVuc2VNYXRyaXguX2RhdGE7XG4gICAgdmFyIGFzaXplID0gZGVuc2VNYXRyaXguX3NpemU7XG4gICAgdmFyIGFkdCA9IGRlbnNlTWF0cml4Ll9kYXRhdHlwZTsgLy8gc3BhcnNlIG1hdHJpeCBhcnJheXNcblxuICAgIHZhciBidmFsdWVzID0gc3BhcnNlTWF0cml4Ll92YWx1ZXM7XG4gICAgdmFyIGJpbmRleCA9IHNwYXJzZU1hdHJpeC5faW5kZXg7XG4gICAgdmFyIGJwdHIgPSBzcGFyc2VNYXRyaXguX3B0cjtcbiAgICB2YXIgYnNpemUgPSBzcGFyc2VNYXRyaXguX3NpemU7XG4gICAgdmFyIGJkdCA9IHNwYXJzZU1hdHJpeC5fZGF0YXR5cGU7IC8vIHZhbGlkYXRlIGRpbWVuc2lvbnNcblxuICAgIGlmIChhc2l6ZS5sZW5ndGggIT09IGJzaXplLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihhc2l6ZS5sZW5ndGgsIGJzaXplLmxlbmd0aCk7XG4gICAgfSAvLyBjaGVjayByb3dzICYgY29sdW1uc1xuXG5cbiAgICBpZiAoYXNpemVbMF0gIT09IGJzaXplWzBdIHx8IGFzaXplWzFdICE9PSBic2l6ZVsxXSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RpbWVuc2lvbiBtaXNtYXRjaC4gTWF0cml4IEEgKCcgKyBhc2l6ZSArICcpIG11c3QgbWF0Y2ggTWF0cml4IEIgKCcgKyBic2l6ZSArICcpJyk7XG4gICAgfSAvLyBzcGFyc2UgbWF0cml4IGNhbm5vdCBiZSBhIFBhdHRlcm4gbWF0cml4XG5cblxuICAgIGlmICghYnZhbHVlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcGVyZm9ybSBvcGVyYXRpb24gb24gRGVuc2UgTWF0cml4IGFuZCBQYXR0ZXJuIFNwYXJzZSBNYXRyaXgnKTtcbiAgICB9IC8vIHJvd3MgJiBjb2x1bW5zXG5cblxuICAgIHZhciByb3dzID0gYXNpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSBhc2l6ZVsxXTsgLy8gZGF0YXR5cGVcblxuICAgIHZhciBkdDsgLy8gZXF1YWwgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGVxID0gZXF1YWxTY2FsYXI7IC8vIHplcm8gdmFsdWVcblxuICAgIHZhciB6ZXJvID0gMDsgLy8gY2FsbGJhY2sgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGNmID0gY2FsbGJhY2s7IC8vIHByb2Nlc3MgZGF0YSB0eXBlc1xuXG4gICAgaWYgKHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnICYmIGFkdCA9PT0gYmR0KSB7XG4gICAgICAvLyBkYXRhdHlwZVxuICAgICAgZHQgPSBhZHQ7IC8vIGZpbmQgc2lnbmF0dXJlIHRoYXQgbWF0Y2hlcyAoZHQsIGR0KVxuXG4gICAgICBlcSA9IHR5cGVkLmZpbmQoZXF1YWxTY2FsYXIsIFtkdCwgZHRdKTsgLy8gY29udmVydCAwIHRvIHRoZSBzYW1lIGRhdGF0eXBlXG5cbiAgICAgIHplcm8gPSB0eXBlZC5jb252ZXJ0KDAsIGR0KTsgLy8gY2FsbGJhY2tcblxuICAgICAgY2YgPSB0eXBlZC5maW5kKGNhbGxiYWNrLCBbZHQsIGR0XSk7XG4gICAgfSAvLyByZXN1bHQgKFNwYXJzZU1hdHJpeClcblxuXG4gICAgdmFyIGN2YWx1ZXMgPSBbXTtcbiAgICB2YXIgY2luZGV4ID0gW107XG4gICAgdmFyIGNwdHIgPSBbXTsgLy8gbG9vcCBjb2x1bW5zIGluIGJcblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAvLyB1cGRhdGUgY3B0clxuICAgICAgY3B0cltqXSA9IGNpbmRleC5sZW5ndGg7IC8vIHZhbHVlcyBpbiBjb2x1bW4galxuXG4gICAgICBmb3IgKHZhciBrMCA9IGJwdHJbal0sIGsxID0gYnB0cltqICsgMV0sIGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgLy8gcm93XG4gICAgICAgIHZhciBpID0gYmluZGV4W2tdOyAvLyB1cGRhdGUgQyhpLGopXG5cbiAgICAgICAgdmFyIGNpaiA9IGludmVyc2UgPyBjZihidmFsdWVzW2tdLCBhZGF0YVtpXVtqXSkgOiBjZihhZGF0YVtpXVtqXSwgYnZhbHVlc1trXSk7IC8vIGNoZWNrIGZvciBub256ZXJvXG5cbiAgICAgICAgaWYgKCFlcShjaWosIHplcm8pKSB7XG4gICAgICAgICAgLy8gcHVzaCBpICYgdlxuICAgICAgICAgIGNpbmRleC5wdXNoKGkpO1xuICAgICAgICAgIGN2YWx1ZXMucHVzaChjaWopO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyB1cGRhdGUgY3B0clxuXG5cbiAgICBjcHRyW2NvbHVtbnNdID0gY2luZGV4Lmxlbmd0aDsgLy8gcmV0dXJuIHNwYXJzZSBtYXRyaXhcblxuICAgIHJldHVybiBzcGFyc2VNYXRyaXguY3JlYXRlU3BhcnNlTWF0cml4KHtcbiAgICAgIHZhbHVlczogY3ZhbHVlcyxcbiAgICAgIGluZGV4OiBjaW5kZXgsXG4gICAgICBwdHI6IGNwdHIsXG4gICAgICBzaXplOiBbcm93cywgY29sdW1uc10sXG4gICAgICBkYXRhdHlwZTogZHRcbiAgICB9KTtcbiAgfTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVBbGdvcml0aG0wMiA9IGNyZWF0ZUFsZ29yaXRobTAyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBbGdvcml0aG0wMyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfRGltZW5zaW9uRXJyb3IgPSByZXF1aXJlKFwiLi4vLi4vLi4vZXJyb3IvRGltZW5zaW9uRXJyb3JcIik7XG5cbnZhciBuYW1lID0gJ2FsZ29yaXRobTAzJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlQWxnb3JpdGhtMDMgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBJdGVyYXRlcyBvdmVyIFNwYXJzZU1hdHJpeCBpdGVtcyBhbmQgaW52b2tlcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZihEaWosIFNpaikuXG4gICAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgTSpOIHRpbWVzLlxuICAgKlxuICAgKlxuICAgKiAgICAgICAgICDilIwgIGYoRGlqLCBTaWopICA7IFMoaSxqKSAhPT0gMFxuICAgKiBDKGksaikgPSDilKRcbiAgICogICAgICAgICAg4pSUICBmKERpaiwgMCkgICAgOyBvdGhlcndpc2VcbiAgICpcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9ICAgZGVuc2VNYXRyaXggICAgICAgVGhlIERlbnNlTWF0cml4IGluc3RhbmNlIChEKVxuICAgKiBAcGFyYW0ge01hdHJpeH0gICBzcGFyc2VNYXRyaXggICAgICBUaGUgU3BhcnNlTWF0cml4IGluc3RhbmNlIChDKVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgICAgICAgICBUaGUgZihEaWosU2lqKSBvcGVyYXRpb24gdG8gaW52b2tlLCB3aGVyZSBEaWogPSBEZW5zZU1hdHJpeChpLGopIGFuZCBTaWogPSBTcGFyc2VNYXRyaXgoaSxqKVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICBpbnZlcnNlICAgICAgICAgICBBIHRydWUgdmFsdWUgaW5kaWNhdGVzIGNhbGxiYWNrIHNob3VsZCBiZSBpbnZva2VkIGYoU2lqLERpailcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICAgICAgICAgRGVuc2VNYXRyaXggKEMpXG4gICAqXG4gICAqIHNlZSBodHRwczovL2dpdGh1Yi5jb20vam9zZGVqb25nL21hdGhqcy9wdWxsLzM0NiNpc3N1ZWNvbW1lbnQtOTc0Nzc1NzFcbiAgICovXG4gIHJldHVybiBmdW5jdGlvbiBhbGdvcml0aG0wMyhkZW5zZU1hdHJpeCwgc3BhcnNlTWF0cml4LCBjYWxsYmFjaywgaW52ZXJzZSkge1xuICAgIC8vIGRlbnNlIG1hdHJpeCBhcnJheXNcbiAgICB2YXIgYWRhdGEgPSBkZW5zZU1hdHJpeC5fZGF0YTtcbiAgICB2YXIgYXNpemUgPSBkZW5zZU1hdHJpeC5fc2l6ZTtcbiAgICB2YXIgYWR0ID0gZGVuc2VNYXRyaXguX2RhdGF0eXBlOyAvLyBzcGFyc2UgbWF0cml4IGFycmF5c1xuXG4gICAgdmFyIGJ2YWx1ZXMgPSBzcGFyc2VNYXRyaXguX3ZhbHVlcztcbiAgICB2YXIgYmluZGV4ID0gc3BhcnNlTWF0cml4Ll9pbmRleDtcbiAgICB2YXIgYnB0ciA9IHNwYXJzZU1hdHJpeC5fcHRyO1xuICAgIHZhciBic2l6ZSA9IHNwYXJzZU1hdHJpeC5fc2l6ZTtcbiAgICB2YXIgYmR0ID0gc3BhcnNlTWF0cml4Ll9kYXRhdHlwZTsgLy8gdmFsaWRhdGUgZGltZW5zaW9uc1xuXG4gICAgaWYgKGFzaXplLmxlbmd0aCAhPT0gYnNpemUubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKGFzaXplLmxlbmd0aCwgYnNpemUubGVuZ3RoKTtcbiAgICB9IC8vIGNoZWNrIHJvd3MgJiBjb2x1bW5zXG5cblxuICAgIGlmIChhc2l6ZVswXSAhPT0gYnNpemVbMF0gfHwgYXNpemVbMV0gIT09IGJzaXplWzFdKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRGltZW5zaW9uIG1pc21hdGNoLiBNYXRyaXggQSAoJyArIGFzaXplICsgJykgbXVzdCBtYXRjaCBNYXRyaXggQiAoJyArIGJzaXplICsgJyknKTtcbiAgICB9IC8vIHNwYXJzZSBtYXRyaXggY2Fubm90IGJlIGEgUGF0dGVybiBtYXRyaXhcblxuXG4gICAgaWYgKCFidmFsdWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBwZXJmb3JtIG9wZXJhdGlvbiBvbiBEZW5zZSBNYXRyaXggYW5kIFBhdHRlcm4gU3BhcnNlIE1hdHJpeCcpO1xuICAgIH0gLy8gcm93cyAmIGNvbHVtbnNcblxuXG4gICAgdmFyIHJvd3MgPSBhc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IGFzaXplWzFdOyAvLyBkYXRhdHlwZVxuXG4gICAgdmFyIGR0OyAvLyB6ZXJvIHZhbHVlXG5cbiAgICB2YXIgemVybyA9IDA7IC8vIGNhbGxiYWNrIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBjZiA9IGNhbGxiYWNrOyAvLyBwcm9jZXNzIGRhdGEgdHlwZXNcblxuICAgIGlmICh0eXBlb2YgYWR0ID09PSAnc3RyaW5nJyAmJiBhZHQgPT09IGJkdCkge1xuICAgICAgLy8gZGF0YXR5cGVcbiAgICAgIGR0ID0gYWR0OyAvLyBjb252ZXJ0IDAgdG8gdGhlIHNhbWUgZGF0YXR5cGVcblxuICAgICAgemVybyA9IHR5cGVkLmNvbnZlcnQoMCwgZHQpOyAvLyBjYWxsYmFja1xuXG4gICAgICBjZiA9IHR5cGVkLmZpbmQoY2FsbGJhY2ssIFtkdCwgZHRdKTtcbiAgICB9IC8vIHJlc3VsdCAoRGVuc2VNYXRyaXgpXG5cblxuICAgIHZhciBjZGF0YSA9IFtdOyAvLyBpbml0aWFsaXplIGRlbnNlIG1hdHJpeFxuXG4gICAgZm9yICh2YXIgeiA9IDA7IHogPCByb3dzOyB6KyspIHtcbiAgICAgIC8vIGluaXRpYWxpemUgcm93XG4gICAgICBjZGF0YVt6XSA9IFtdO1xuICAgIH0gLy8gd29ya3NwYWNlXG5cblxuICAgIHZhciB4ID0gW107IC8vIG1hcmtzIGluZGljYXRpbmcgd2UgaGF2ZSBhIHZhbHVlIGluIHggZm9yIGEgZ2l2ZW4gY29sdW1uXG5cbiAgICB2YXIgdyA9IFtdOyAvLyBsb29wIGNvbHVtbnMgaW4gYlxuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgIC8vIGNvbHVtbiBtYXJrXG4gICAgICB2YXIgbWFyayA9IGogKyAxOyAvLyB2YWx1ZXMgaW4gY29sdW1uIGpcblxuICAgICAgZm9yICh2YXIgazAgPSBicHRyW2pdLCBrMSA9IGJwdHJbaiArIDFdLCBrID0gazA7IGsgPCBrMTsgaysrKSB7XG4gICAgICAgIC8vIHJvd1xuICAgICAgICB2YXIgaSA9IGJpbmRleFtrXTsgLy8gdXBkYXRlIHdvcmtzcGFjZVxuXG4gICAgICAgIHhbaV0gPSBpbnZlcnNlID8gY2YoYnZhbHVlc1trXSwgYWRhdGFbaV1bal0pIDogY2YoYWRhdGFbaV1bal0sIGJ2YWx1ZXNba10pO1xuICAgICAgICB3W2ldID0gbWFyaztcbiAgICAgIH0gLy8gcHJvY2VzcyB3b3Jrc3BhY2VcblxuXG4gICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IHJvd3M7IHkrKykge1xuICAgICAgICAvLyBjaGVjayB3ZSBoYXZlIGEgY2FsY3VsYXRlZCB2YWx1ZSBmb3IgY3VycmVudCByb3dcbiAgICAgICAgaWYgKHdbeV0gPT09IG1hcmspIHtcbiAgICAgICAgICAvLyB1c2UgY2FsY3VsYXRlZCB2YWx1ZVxuICAgICAgICAgIGNkYXRhW3ldW2pdID0geFt5XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBjYWxjdWxhdGUgdmFsdWVcbiAgICAgICAgICBjZGF0YVt5XVtqXSA9IGludmVyc2UgPyBjZih6ZXJvLCBhZGF0YVt5XVtqXSkgOiBjZihhZGF0YVt5XVtqXSwgemVybyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIHJldHVybiBkZW5zZSBtYXRyaXhcblxuXG4gICAgcmV0dXJuIGRlbnNlTWF0cml4LmNyZWF0ZURlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6IGNkYXRhLFxuICAgICAgc2l6ZTogW3Jvd3MsIGNvbHVtbnNdLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7XG4gIH07XG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMDMgPSBjcmVhdGVBbGdvcml0aG0wMzsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMDQgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX0RpbWVuc2lvbkVycm9yID0gcmVxdWlyZShcIi4uLy4uLy4uL2Vycm9yL0RpbWVuc2lvbkVycm9yXCIpO1xuXG52YXIgbmFtZSA9ICdhbGdvcml0aG0wNCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdlcXVhbFNjYWxhciddO1xudmFyIGNyZWF0ZUFsZ29yaXRobTA0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcjtcblxuICAvKipcbiAgICogSXRlcmF0ZXMgb3ZlciBTcGFyc2VNYXRyaXggQSBhbmQgU3BhcnNlTWF0cml4IEIgbm9uemVybyBpdGVtcyBhbmQgaW52b2tlcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZihBaWosIEJpaikuXG4gICAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgTUFYKE5OWkEsIE5OWkIpIHRpbWVzXG4gICAqXG4gICAqXG4gICAqICAgICAgICAgIOKUjCAgZihBaWosIEJpaikgIDsgQShpLGopICE9PSAwICYmIEIoaSxqKSAhPT0gMFxuICAgKiBDKGksaikgPSDilKQgIEEoaSxqKSAgICAgICA7IEEoaSxqKSAhPT0gMFxuICAgKiAgICAgICAgICDilJQgIEIoaSxqKSAgICAgICA7IEIoaSxqKSAhPT0gMFxuICAgKlxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeH0gICBhICAgICAgICAgICAgICAgICBUaGUgU3BhcnNlTWF0cml4IGluc3RhbmNlIChBKVxuICAgKiBAcGFyYW0ge01hdHJpeH0gICBiICAgICAgICAgICAgICAgICBUaGUgU3BhcnNlTWF0cml4IGluc3RhbmNlIChCKVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgICAgICAgICBUaGUgZihBaWosQmlqKSBvcGVyYXRpb24gdG8gaW52b2tlXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgICAgIFNwYXJzZU1hdHJpeCAoQylcbiAgICpcbiAgICogc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qb3NkZWpvbmcvbWF0aGpzL3B1bGwvMzQ2I2lzc3VlY29tbWVudC05NzYyMDI5NFxuICAgKi9cbiAgcmV0dXJuIGZ1bmN0aW9uIGFsZ29yaXRobTA0KGEsIGIsIGNhbGxiYWNrKSB7XG4gICAgLy8gc3BhcnNlIG1hdHJpeCBhcnJheXNcbiAgICB2YXIgYXZhbHVlcyA9IGEuX3ZhbHVlcztcbiAgICB2YXIgYWluZGV4ID0gYS5faW5kZXg7XG4gICAgdmFyIGFwdHIgPSBhLl9wdHI7XG4gICAgdmFyIGFzaXplID0gYS5fc2l6ZTtcbiAgICB2YXIgYWR0ID0gYS5fZGF0YXR5cGU7IC8vIHNwYXJzZSBtYXRyaXggYXJyYXlzXG5cbiAgICB2YXIgYnZhbHVlcyA9IGIuX3ZhbHVlcztcbiAgICB2YXIgYmluZGV4ID0gYi5faW5kZXg7XG4gICAgdmFyIGJwdHIgPSBiLl9wdHI7XG4gICAgdmFyIGJzaXplID0gYi5fc2l6ZTtcbiAgICB2YXIgYmR0ID0gYi5fZGF0YXR5cGU7IC8vIHZhbGlkYXRlIGRpbWVuc2lvbnNcblxuICAgIGlmIChhc2l6ZS5sZW5ndGggIT09IGJzaXplLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihhc2l6ZS5sZW5ndGgsIGJzaXplLmxlbmd0aCk7XG4gICAgfSAvLyBjaGVjayByb3dzICYgY29sdW1uc1xuXG5cbiAgICBpZiAoYXNpemVbMF0gIT09IGJzaXplWzBdIHx8IGFzaXplWzFdICE9PSBic2l6ZVsxXSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RpbWVuc2lvbiBtaXNtYXRjaC4gTWF0cml4IEEgKCcgKyBhc2l6ZSArICcpIG11c3QgbWF0Y2ggTWF0cml4IEIgKCcgKyBic2l6ZSArICcpJyk7XG4gICAgfSAvLyByb3dzICYgY29sdW1uc1xuXG5cbiAgICB2YXIgcm93cyA9IGFzaXplWzBdO1xuICAgIHZhciBjb2x1bW5zID0gYXNpemVbMV07IC8vIGRhdGF0eXBlXG5cbiAgICB2YXIgZHQ7IC8vIGVxdWFsIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBlcSA9IGVxdWFsU2NhbGFyOyAvLyB6ZXJvIHZhbHVlXG5cbiAgICB2YXIgemVybyA9IDA7IC8vIGNhbGxiYWNrIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBjZiA9IGNhbGxiYWNrOyAvLyBwcm9jZXNzIGRhdGEgdHlwZXNcblxuICAgIGlmICh0eXBlb2YgYWR0ID09PSAnc3RyaW5nJyAmJiBhZHQgPT09IGJkdCkge1xuICAgICAgLy8gZGF0YXR5cGVcbiAgICAgIGR0ID0gYWR0OyAvLyBmaW5kIHNpZ25hdHVyZSB0aGF0IG1hdGNoZXMgKGR0LCBkdClcblxuICAgICAgZXEgPSB0eXBlZC5maW5kKGVxdWFsU2NhbGFyLCBbZHQsIGR0XSk7IC8vIGNvbnZlcnQgMCB0byB0aGUgc2FtZSBkYXRhdHlwZVxuXG4gICAgICB6ZXJvID0gdHlwZWQuY29udmVydCgwLCBkdCk7IC8vIGNhbGxiYWNrXG5cbiAgICAgIGNmID0gdHlwZWQuZmluZChjYWxsYmFjaywgW2R0LCBkdF0pO1xuICAgIH0gLy8gcmVzdWx0IGFycmF5c1xuXG5cbiAgICB2YXIgY3ZhbHVlcyA9IGF2YWx1ZXMgJiYgYnZhbHVlcyA/IFtdIDogdW5kZWZpbmVkO1xuICAgIHZhciBjaW5kZXggPSBbXTtcbiAgICB2YXIgY3B0ciA9IFtdOyAvLyB3b3Jrc3BhY2VcblxuICAgIHZhciB4YSA9IGF2YWx1ZXMgJiYgYnZhbHVlcyA/IFtdIDogdW5kZWZpbmVkO1xuICAgIHZhciB4YiA9IGF2YWx1ZXMgJiYgYnZhbHVlcyA/IFtdIDogdW5kZWZpbmVkOyAvLyBtYXJrcyBpbmRpY2F0aW5nIHdlIGhhdmUgYSB2YWx1ZSBpbiB4IGZvciBhIGdpdmVuIGNvbHVtblxuXG4gICAgdmFyIHdhID0gW107XG4gICAgdmFyIHdiID0gW107IC8vIHZhcnNcblxuICAgIHZhciBpLCBqLCBrLCBrMCwgazE7IC8vIGxvb3AgY29sdW1uc1xuXG4gICAgZm9yIChqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgLy8gdXBkYXRlIGNwdHJcbiAgICAgIGNwdHJbal0gPSBjaW5kZXgubGVuZ3RoOyAvLyBjb2x1bW5zIG1hcmtcblxuICAgICAgdmFyIG1hcmsgPSBqICsgMTsgLy8gbG9vcCBBKDosailcblxuICAgICAgZm9yIChrMCA9IGFwdHJbal0sIGsxID0gYXB0cltqICsgMV0sIGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgLy8gcm93XG4gICAgICAgIGkgPSBhaW5kZXhba107IC8vIHVwZGF0ZSBjXG5cbiAgICAgICAgY2luZGV4LnB1c2goaSk7IC8vIHVwZGF0ZSB3b3Jrc3BhY2VcblxuICAgICAgICB3YVtpXSA9IG1hcms7IC8vIGNoZWNrIHdlIG5lZWQgdG8gcHJvY2VzcyB2YWx1ZXNcblxuICAgICAgICBpZiAoeGEpIHtcbiAgICAgICAgICB4YVtpXSA9IGF2YWx1ZXNba107XG4gICAgICAgIH1cbiAgICAgIH0gLy8gbG9vcCBCKDosailcblxuXG4gICAgICBmb3IgKGswID0gYnB0cltqXSwgazEgPSBicHRyW2ogKyAxXSwgayA9IGswOyBrIDwgazE7IGsrKykge1xuICAgICAgICAvLyByb3dcbiAgICAgICAgaSA9IGJpbmRleFtrXTsgLy8gY2hlY2sgcm93IGV4aXN0cyBpbiBBXG5cbiAgICAgICAgaWYgKHdhW2ldID09PSBtYXJrKSB7XG4gICAgICAgICAgLy8gdXBkYXRlIHJlY29yZCBpbiB4YSBAIGlcbiAgICAgICAgICBpZiAoeGEpIHtcbiAgICAgICAgICAgIC8vIGludm9rZSBjYWxsYmFja1xuICAgICAgICAgICAgdmFyIHYgPSBjZih4YVtpXSwgYnZhbHVlc1trXSk7IC8vIGNoZWNrIGZvciB6ZXJvXG5cbiAgICAgICAgICAgIGlmICghZXEodiwgemVybykpIHtcbiAgICAgICAgICAgICAgLy8gdXBkYXRlIHdvcmtzcGFjZVxuICAgICAgICAgICAgICB4YVtpXSA9IHY7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyByZW1vdmUgbWFyayAoaW5kZXggd2lsbCBiZSByZW1vdmVkIGxhdGVyKVxuICAgICAgICAgICAgICB3YVtpXSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHVwZGF0ZSBjXG4gICAgICAgICAgY2luZGV4LnB1c2goaSk7IC8vIHVwZGF0ZSB3b3Jrc3BhY2VcblxuICAgICAgICAgIHdiW2ldID0gbWFyazsgLy8gY2hlY2sgd2UgbmVlZCB0byBwcm9jZXNzIHZhbHVlc1xuXG4gICAgICAgICAgaWYgKHhiKSB7XG4gICAgICAgICAgICB4YltpXSA9IGJ2YWx1ZXNba107XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IC8vIGNoZWNrIHdlIG5lZWQgdG8gcHJvY2VzcyB2YWx1ZXMgKG5vbiBwYXR0ZXJuIG1hdHJpeClcblxuXG4gICAgICBpZiAoeGEgJiYgeGIpIHtcbiAgICAgICAgLy8gaW5pdGlhbGl6ZSBmaXJzdCBpbmRleCBpbiBqXG4gICAgICAgIGsgPSBjcHRyW2pdOyAvLyBsb29wIGluZGV4IGluIGpcblxuICAgICAgICB3aGlsZSAoayA8IGNpbmRleC5sZW5ndGgpIHtcbiAgICAgICAgICAvLyByb3dcbiAgICAgICAgICBpID0gY2luZGV4W2tdOyAvLyBjaGVjayB3b3Jrc3BhY2UgaGFzIHZhbHVlIEAgaVxuXG4gICAgICAgICAgaWYgKHdhW2ldID09PSBtYXJrKSB7XG4gICAgICAgICAgICAvLyBwdXNoIHZhbHVlIChBaWogIT0gMCB8fCAoQWlqICE9IDAgJiYgQmlqICE9IDApKVxuICAgICAgICAgICAgY3ZhbHVlc1trXSA9IHhhW2ldOyAvLyBpbmNyZW1lbnQgcG9pbnRlclxuXG4gICAgICAgICAgICBrKys7XG4gICAgICAgICAgfSBlbHNlIGlmICh3YltpXSA9PT0gbWFyaykge1xuICAgICAgICAgICAgLy8gcHVzaCB2YWx1ZSAoYmlqICE9IDApXG4gICAgICAgICAgICBjdmFsdWVzW2tdID0geGJbaV07IC8vIGluY3JlbWVudCBwb2ludGVyXG5cbiAgICAgICAgICAgIGsrKztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gcmVtb3ZlIGluZGV4IEAga1xuICAgICAgICAgICAgY2luZGV4LnNwbGljZShrLCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIHVwZGF0ZSBjcHRyXG5cblxuICAgIGNwdHJbY29sdW1uc10gPSBjaW5kZXgubGVuZ3RoOyAvLyByZXR1cm4gc3BhcnNlIG1hdHJpeFxuXG4gICAgcmV0dXJuIGEuY3JlYXRlU3BhcnNlTWF0cml4KHtcbiAgICAgIHZhbHVlczogY3ZhbHVlcyxcbiAgICAgIGluZGV4OiBjaW5kZXgsXG4gICAgICBwdHI6IGNwdHIsXG4gICAgICBzaXplOiBbcm93cywgY29sdW1uc10sXG4gICAgICBkYXRhdHlwZTogZHRcbiAgICB9KTtcbiAgfTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVBbGdvcml0aG0wNCA9IGNyZWF0ZUFsZ29yaXRobTA0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBbGdvcml0aG0wNSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfRGltZW5zaW9uRXJyb3IgPSByZXF1aXJlKFwiLi4vLi4vLi4vZXJyb3IvRGltZW5zaW9uRXJyb3JcIik7XG5cbnZhciBuYW1lID0gJ2FsZ29yaXRobTA1JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2VxdWFsU2NhbGFyJ107XG52YXIgY3JlYXRlQWxnb3JpdGhtMDUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyO1xuXG4gIC8qKlxuICAgKiBJdGVyYXRlcyBvdmVyIFNwYXJzZU1hdHJpeCBBIGFuZCBTcGFyc2VNYXRyaXggQiBub256ZXJvIGl0ZW1zIGFuZCBpbnZva2VzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmKEFpaiwgQmlqKS5cbiAgICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCBNQVgoTk5aQSwgTk5aQikgdGltZXNcbiAgICpcbiAgICpcbiAgICogICAgICAgICAg4pSMICBmKEFpaiwgQmlqKSAgOyBBKGksaikgIT09IDAgfHwgQihpLGopICE9PSAwXG4gICAqIEMoaSxqKSA9IOKUpFxuICAgKiAgICAgICAgICDilJQgIDAgICAgICAgICAgICA7IG90aGVyd2lzZVxuICAgKlxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeH0gICBhICAgICAgICAgICAgICAgICBUaGUgU3BhcnNlTWF0cml4IGluc3RhbmNlIChBKVxuICAgKiBAcGFyYW0ge01hdHJpeH0gICBiICAgICAgICAgICAgICAgICBUaGUgU3BhcnNlTWF0cml4IGluc3RhbmNlIChCKVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgICAgICAgICBUaGUgZihBaWosQmlqKSBvcGVyYXRpb24gdG8gaW52b2tlXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgICAgIFNwYXJzZU1hdHJpeCAoQylcbiAgICpcbiAgICogc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qb3NkZWpvbmcvbWF0aGpzL3B1bGwvMzQ2I2lzc3VlY29tbWVudC05NzYyMDI5NFxuICAgKi9cbiAgcmV0dXJuIGZ1bmN0aW9uIGFsZ29yaXRobTA1KGEsIGIsIGNhbGxiYWNrKSB7XG4gICAgLy8gc3BhcnNlIG1hdHJpeCBhcnJheXNcbiAgICB2YXIgYXZhbHVlcyA9IGEuX3ZhbHVlcztcbiAgICB2YXIgYWluZGV4ID0gYS5faW5kZXg7XG4gICAgdmFyIGFwdHIgPSBhLl9wdHI7XG4gICAgdmFyIGFzaXplID0gYS5fc2l6ZTtcbiAgICB2YXIgYWR0ID0gYS5fZGF0YXR5cGU7IC8vIHNwYXJzZSBtYXRyaXggYXJyYXlzXG5cbiAgICB2YXIgYnZhbHVlcyA9IGIuX3ZhbHVlcztcbiAgICB2YXIgYmluZGV4ID0gYi5faW5kZXg7XG4gICAgdmFyIGJwdHIgPSBiLl9wdHI7XG4gICAgdmFyIGJzaXplID0gYi5fc2l6ZTtcbiAgICB2YXIgYmR0ID0gYi5fZGF0YXR5cGU7IC8vIHZhbGlkYXRlIGRpbWVuc2lvbnNcblxuICAgIGlmIChhc2l6ZS5sZW5ndGggIT09IGJzaXplLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihhc2l6ZS5sZW5ndGgsIGJzaXplLmxlbmd0aCk7XG4gICAgfSAvLyBjaGVjayByb3dzICYgY29sdW1uc1xuXG5cbiAgICBpZiAoYXNpemVbMF0gIT09IGJzaXplWzBdIHx8IGFzaXplWzFdICE9PSBic2l6ZVsxXSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RpbWVuc2lvbiBtaXNtYXRjaC4gTWF0cml4IEEgKCcgKyBhc2l6ZSArICcpIG11c3QgbWF0Y2ggTWF0cml4IEIgKCcgKyBic2l6ZSArICcpJyk7XG4gICAgfSAvLyByb3dzICYgY29sdW1uc1xuXG5cbiAgICB2YXIgcm93cyA9IGFzaXplWzBdO1xuICAgIHZhciBjb2x1bW5zID0gYXNpemVbMV07IC8vIGRhdGF0eXBlXG5cbiAgICB2YXIgZHQ7IC8vIGVxdWFsIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBlcSA9IGVxdWFsU2NhbGFyOyAvLyB6ZXJvIHZhbHVlXG5cbiAgICB2YXIgemVybyA9IDA7IC8vIGNhbGxiYWNrIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBjZiA9IGNhbGxiYWNrOyAvLyBwcm9jZXNzIGRhdGEgdHlwZXNcblxuICAgIGlmICh0eXBlb2YgYWR0ID09PSAnc3RyaW5nJyAmJiBhZHQgPT09IGJkdCkge1xuICAgICAgLy8gZGF0YXR5cGVcbiAgICAgIGR0ID0gYWR0OyAvLyBmaW5kIHNpZ25hdHVyZSB0aGF0IG1hdGNoZXMgKGR0LCBkdClcblxuICAgICAgZXEgPSB0eXBlZC5maW5kKGVxdWFsU2NhbGFyLCBbZHQsIGR0XSk7IC8vIGNvbnZlcnQgMCB0byB0aGUgc2FtZSBkYXRhdHlwZVxuXG4gICAgICB6ZXJvID0gdHlwZWQuY29udmVydCgwLCBkdCk7IC8vIGNhbGxiYWNrXG5cbiAgICAgIGNmID0gdHlwZWQuZmluZChjYWxsYmFjaywgW2R0LCBkdF0pO1xuICAgIH0gLy8gcmVzdWx0IGFycmF5c1xuXG5cbiAgICB2YXIgY3ZhbHVlcyA9IGF2YWx1ZXMgJiYgYnZhbHVlcyA/IFtdIDogdW5kZWZpbmVkO1xuICAgIHZhciBjaW5kZXggPSBbXTtcbiAgICB2YXIgY3B0ciA9IFtdOyAvLyB3b3Jrc3BhY2VzXG5cbiAgICB2YXIgeGEgPSBjdmFsdWVzID8gW10gOiB1bmRlZmluZWQ7XG4gICAgdmFyIHhiID0gY3ZhbHVlcyA/IFtdIDogdW5kZWZpbmVkOyAvLyBtYXJrcyBpbmRpY2F0aW5nIHdlIGhhdmUgYSB2YWx1ZSBpbiB4IGZvciBhIGdpdmVuIGNvbHVtblxuXG4gICAgdmFyIHdhID0gW107XG4gICAgdmFyIHdiID0gW107IC8vIHZhcnNcblxuICAgIHZhciBpLCBqLCBrLCBrMTsgLy8gbG9vcCBjb2x1bW5zXG5cbiAgICBmb3IgKGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAvLyB1cGRhdGUgY3B0clxuICAgICAgY3B0cltqXSA9IGNpbmRleC5sZW5ndGg7IC8vIGNvbHVtbnMgbWFya1xuXG4gICAgICB2YXIgbWFyayA9IGogKyAxOyAvLyBsb29wIHZhbHVlcyBBKDosailcblxuICAgICAgZm9yIChrID0gYXB0cltqXSwgazEgPSBhcHRyW2ogKyAxXTsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgLy8gcm93XG4gICAgICAgIGkgPSBhaW5kZXhba107IC8vIHB1c2ggaW5kZXhcblxuICAgICAgICBjaW5kZXgucHVzaChpKTsgLy8gdXBkYXRlIHdvcmtzcGFjZVxuXG4gICAgICAgIHdhW2ldID0gbWFyazsgLy8gY2hlY2sgd2UgbmVlZCB0byBwcm9jZXNzIHZhbHVlc1xuXG4gICAgICAgIGlmICh4YSkge1xuICAgICAgICAgIHhhW2ldID0gYXZhbHVlc1trXTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBsb29wIHZhbHVlcyBCKDosailcblxuXG4gICAgICBmb3IgKGsgPSBicHRyW2pdLCBrMSA9IGJwdHJbaiArIDFdOyBrIDwgazE7IGsrKykge1xuICAgICAgICAvLyByb3dcbiAgICAgICAgaSA9IGJpbmRleFtrXTsgLy8gY2hlY2sgcm93IGV4aXN0ZWQgaW4gQVxuXG4gICAgICAgIGlmICh3YVtpXSAhPT0gbWFyaykge1xuICAgICAgICAgIC8vIHB1c2ggaW5kZXhcbiAgICAgICAgICBjaW5kZXgucHVzaChpKTtcbiAgICAgICAgfSAvLyB1cGRhdGUgd29ya3NwYWNlXG5cblxuICAgICAgICB3YltpXSA9IG1hcms7IC8vIGNoZWNrIHdlIG5lZWQgdG8gcHJvY2VzcyB2YWx1ZXNcblxuICAgICAgICBpZiAoeGIpIHtcbiAgICAgICAgICB4YltpXSA9IGJ2YWx1ZXNba107XG4gICAgICAgIH1cbiAgICAgIH0gLy8gY2hlY2sgd2UgbmVlZCB0byBwcm9jZXNzIHZhbHVlcyAobm9uIHBhdHRlcm4gbWF0cml4KVxuXG5cbiAgICAgIGlmIChjdmFsdWVzKSB7XG4gICAgICAgIC8vIGluaXRpYWxpemUgZmlyc3QgaW5kZXggaW4galxuICAgICAgICBrID0gY3B0cltqXTsgLy8gbG9vcCBpbmRleCBpbiBqXG5cbiAgICAgICAgd2hpbGUgKGsgPCBjaW5kZXgubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gcm93XG4gICAgICAgICAgaSA9IGNpbmRleFtrXTsgLy8gbWFya3NcblxuICAgICAgICAgIHZhciB3YWkgPSB3YVtpXTtcbiAgICAgICAgICB2YXIgd2JpID0gd2JbaV07IC8vIGNoZWNrIEFpaiBvciBCaWogYXJlIG5vbnplcm9cblxuICAgICAgICAgIGlmICh3YWkgPT09IG1hcmsgfHwgd2JpID09PSBtYXJrKSB7XG4gICAgICAgICAgICAvLyBtYXRyaXggdmFsdWVzIEAgaSxqXG4gICAgICAgICAgICB2YXIgdmEgPSB3YWkgPT09IG1hcmsgPyB4YVtpXSA6IHplcm87XG4gICAgICAgICAgICB2YXIgdmIgPSB3YmkgPT09IG1hcmsgPyB4YltpXSA6IHplcm87IC8vIENpalxuXG4gICAgICAgICAgICB2YXIgdmMgPSBjZih2YSwgdmIpOyAvLyBjaGVjayBmb3IgemVyb1xuXG4gICAgICAgICAgICBpZiAoIWVxKHZjLCB6ZXJvKSkge1xuICAgICAgICAgICAgICAvLyBwdXNoIHZhbHVlXG4gICAgICAgICAgICAgIGN2YWx1ZXMucHVzaCh2Yyk7IC8vIGluY3JlbWVudCBwb2ludGVyXG5cbiAgICAgICAgICAgICAgaysrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gcmVtb3ZlIHZhbHVlIEAgaSwgZG8gbm90IGluY3JlbWVudCBwb2ludGVyXG4gICAgICAgICAgICAgIGNpbmRleC5zcGxpY2UoaywgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyB1cGRhdGUgY3B0clxuXG5cbiAgICBjcHRyW2NvbHVtbnNdID0gY2luZGV4Lmxlbmd0aDsgLy8gcmV0dXJuIHNwYXJzZSBtYXRyaXhcblxuICAgIHJldHVybiBhLmNyZWF0ZVNwYXJzZU1hdHJpeCh7XG4gICAgICB2YWx1ZXM6IGN2YWx1ZXMsXG4gICAgICBpbmRleDogY2luZGV4LFxuICAgICAgcHRyOiBjcHRyLFxuICAgICAgc2l6ZTogW3Jvd3MsIGNvbHVtbnNdLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7XG4gIH07XG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMDUgPSBjcmVhdGVBbGdvcml0aG0wNTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMDYgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX0RpbWVuc2lvbkVycm9yID0gcmVxdWlyZShcIi4uLy4uLy4uL2Vycm9yL0RpbWVuc2lvbkVycm9yXCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIG5hbWUgPSAnYWxnb3JpdGhtMDYnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnZXF1YWxTY2FsYXInXTtcbnZhciBjcmVhdGVBbGdvcml0aG0wNiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXI7XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGVzIG92ZXIgU3BhcnNlTWF0cml4IEEgYW5kIFNwYXJzZU1hdHJpeCBCIG5vbnplcm8gaXRlbXMgYW5kIGludm9rZXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGYoQWlqLCBCaWopLlxuICAgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIChBbnogVSBCbnopIHRpbWVzLCB3aGVyZSBBbnogYW5kIEJueiBhcmUgdGhlIG5vbnplcm8gZWxlbWVudHMgaW4gYm90aCBtYXRyaWNlcy5cbiAgICpcbiAgICpcbiAgICogICAgICAgICAg4pSMICBmKEFpaiwgQmlqKSAgOyBBKGksaikgIT09IDAgJiYgQihpLGopICE9PSAwXG4gICAqIEMoaSxqKSA9IOKUpFxuICAgKiAgICAgICAgICDilJQgIDAgICAgICAgICAgICA7IG90aGVyd2lzZVxuICAgKlxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeH0gICBhICAgICAgICAgICAgICAgICBUaGUgU3BhcnNlTWF0cml4IGluc3RhbmNlIChBKVxuICAgKiBAcGFyYW0ge01hdHJpeH0gICBiICAgICAgICAgICAgICAgICBUaGUgU3BhcnNlTWF0cml4IGluc3RhbmNlIChCKVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgICAgICAgICBUaGUgZihBaWosQmlqKSBvcGVyYXRpb24gdG8gaW52b2tlXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgICAgIFNwYXJzZU1hdHJpeCAoQylcbiAgICpcbiAgICogc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qb3NkZWpvbmcvbWF0aGpzL3B1bGwvMzQ2I2lzc3VlY29tbWVudC05NzYyMDI5NFxuICAgKi9cbiAgcmV0dXJuIGZ1bmN0aW9uIGFsZ29yaXRobTA2KGEsIGIsIGNhbGxiYWNrKSB7XG4gICAgLy8gc3BhcnNlIG1hdHJpeCBhcnJheXNcbiAgICB2YXIgYXZhbHVlcyA9IGEuX3ZhbHVlcztcbiAgICB2YXIgYXNpemUgPSBhLl9zaXplO1xuICAgIHZhciBhZHQgPSBhLl9kYXRhdHlwZTsgLy8gc3BhcnNlIG1hdHJpeCBhcnJheXNcblxuICAgIHZhciBidmFsdWVzID0gYi5fdmFsdWVzO1xuICAgIHZhciBic2l6ZSA9IGIuX3NpemU7XG4gICAgdmFyIGJkdCA9IGIuX2RhdGF0eXBlOyAvLyB2YWxpZGF0ZSBkaW1lbnNpb25zXG5cbiAgICBpZiAoYXNpemUubGVuZ3RoICE9PSBic2l6ZS5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3IoYXNpemUubGVuZ3RoLCBic2l6ZS5sZW5ndGgpO1xuICAgIH0gLy8gY2hlY2sgcm93cyAmIGNvbHVtbnNcblxuXG4gICAgaWYgKGFzaXplWzBdICE9PSBic2l6ZVswXSB8fCBhc2l6ZVsxXSAhPT0gYnNpemVbMV0pIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdEaW1lbnNpb24gbWlzbWF0Y2guIE1hdHJpeCBBICgnICsgYXNpemUgKyAnKSBtdXN0IG1hdGNoIE1hdHJpeCBCICgnICsgYnNpemUgKyAnKScpO1xuICAgIH0gLy8gcm93cyAmIGNvbHVtbnNcblxuXG4gICAgdmFyIHJvd3MgPSBhc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IGFzaXplWzFdOyAvLyBkYXRhdHlwZVxuXG4gICAgdmFyIGR0OyAvLyBlcXVhbCBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgZXEgPSBlcXVhbFNjYWxhcjsgLy8gemVybyB2YWx1ZVxuXG4gICAgdmFyIHplcm8gPSAwOyAvLyBjYWxsYmFjayBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgY2YgPSBjYWxsYmFjazsgLy8gcHJvY2VzcyBkYXRhIHR5cGVzXG5cbiAgICBpZiAodHlwZW9mIGFkdCA9PT0gJ3N0cmluZycgJiYgYWR0ID09PSBiZHQpIHtcbiAgICAgIC8vIGRhdGF0eXBlXG4gICAgICBkdCA9IGFkdDsgLy8gZmluZCBzaWduYXR1cmUgdGhhdCBtYXRjaGVzIChkdCwgZHQpXG5cbiAgICAgIGVxID0gdHlwZWQuZmluZChlcXVhbFNjYWxhciwgW2R0LCBkdF0pOyAvLyBjb252ZXJ0IDAgdG8gdGhlIHNhbWUgZGF0YXR5cGVcblxuICAgICAgemVybyA9IHR5cGVkLmNvbnZlcnQoMCwgZHQpOyAvLyBjYWxsYmFja1xuXG4gICAgICBjZiA9IHR5cGVkLmZpbmQoY2FsbGJhY2ssIFtkdCwgZHRdKTtcbiAgICB9IC8vIHJlc3VsdCBhcnJheXNcblxuXG4gICAgdmFyIGN2YWx1ZXMgPSBhdmFsdWVzICYmIGJ2YWx1ZXMgPyBbXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgY2luZGV4ID0gW107XG4gICAgdmFyIGNwdHIgPSBbXTsgLy8gd29ya3NwYWNlc1xuXG4gICAgdmFyIHggPSBjdmFsdWVzID8gW10gOiB1bmRlZmluZWQ7IC8vIG1hcmtzIGluZGljYXRpbmcgd2UgaGF2ZSBhIHZhbHVlIGluIHggZm9yIGEgZ2l2ZW4gY29sdW1uXG5cbiAgICB2YXIgdyA9IFtdOyAvLyBtYXJrcyBpbmRpY2F0aW5nIHZhbHVlIGluIGEgZ2l2ZW4gcm93IGhhcyBiZWVuIHVwZGF0ZWRcblxuICAgIHZhciB1ID0gW107IC8vIGxvb3AgY29sdW1uc1xuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgIC8vIHVwZGF0ZSBjcHRyXG4gICAgICBjcHRyW2pdID0gY2luZGV4Lmxlbmd0aDsgLy8gY29sdW1ucyBtYXJrXG5cbiAgICAgIHZhciBtYXJrID0gaiArIDE7IC8vIHNjYXR0ZXIgdGhlIHZhbHVlcyBvZiBBKDosaikgaW50byB3b3Jrc3BhY2VcblxuICAgICAgKDAsIF9jb2xsZWN0aW9uLnNjYXR0ZXIpKGEsIGosIHcsIHgsIHUsIG1hcmssIGNpbmRleCwgY2YpOyAvLyBzY2F0dGVyIHRoZSB2YWx1ZXMgb2YgQig6LGopIGludG8gd29ya3NwYWNlXG5cbiAgICAgICgwLCBfY29sbGVjdGlvbi5zY2F0dGVyKShiLCBqLCB3LCB4LCB1LCBtYXJrLCBjaW5kZXgsIGNmKTsgLy8gY2hlY2sgd2UgbmVlZCB0byBwcm9jZXNzIHZhbHVlcyAobm9uIHBhdHRlcm4gbWF0cml4KVxuXG4gICAgICBpZiAoeCkge1xuICAgICAgICAvLyBpbml0aWFsaXplIGZpcnN0IGluZGV4IGluIGpcbiAgICAgICAgdmFyIGsgPSBjcHRyW2pdOyAvLyBsb29wIGluZGV4IGluIGpcblxuICAgICAgICB3aGlsZSAoayA8IGNpbmRleC5sZW5ndGgpIHtcbiAgICAgICAgICAvLyByb3dcbiAgICAgICAgICB2YXIgaSA9IGNpbmRleFtrXTsgLy8gY2hlY2sgZnVuY3Rpb24gd2FzIGludm9rZWQgb24gY3VycmVudCByb3cgKEFpaiAhPTAgJiYgQmlqICE9IDApXG5cbiAgICAgICAgICBpZiAodVtpXSA9PT0gbWFyaykge1xuICAgICAgICAgICAgLy8gdmFsdWUgQCBpXG4gICAgICAgICAgICB2YXIgdiA9IHhbaV07IC8vIGNoZWNrIGZvciB6ZXJvIHZhbHVlXG5cbiAgICAgICAgICAgIGlmICghZXEodiwgemVybykpIHtcbiAgICAgICAgICAgICAgLy8gcHVzaCB2YWx1ZVxuICAgICAgICAgICAgICBjdmFsdWVzLnB1c2godik7IC8vIGluY3JlbWVudCBwb2ludGVyXG5cbiAgICAgICAgICAgICAgaysrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gcmVtb3ZlIHZhbHVlIEAgaSwgZG8gbm90IGluY3JlbWVudCBwb2ludGVyXG4gICAgICAgICAgICAgIGNpbmRleC5zcGxpY2UoaywgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHJlbW92ZSB2YWx1ZSBAIGksIGRvIG5vdCBpbmNyZW1lbnQgcG9pbnRlclxuICAgICAgICAgICAgY2luZGV4LnNwbGljZShrLCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGluaXRpYWxpemUgZmlyc3QgaW5kZXggaW4galxuICAgICAgICB2YXIgcCA9IGNwdHJbal07IC8vIGxvb3AgaW5kZXggaW4galxuXG4gICAgICAgIHdoaWxlIChwIDwgY2luZGV4Lmxlbmd0aCkge1xuICAgICAgICAgIC8vIHJvd1xuICAgICAgICAgIHZhciByID0gY2luZGV4W3BdOyAvLyBjaGVjayBmdW5jdGlvbiB3YXMgaW52b2tlZCBvbiBjdXJyZW50IHJvdyAoQWlqICE9MCAmJiBCaWogIT0gMClcblxuICAgICAgICAgIGlmICh1W3JdICE9PSBtYXJrKSB7XG4gICAgICAgICAgICAvLyByZW1vdmUgdmFsdWUgQCBpLCBkbyBub3QgaW5jcmVtZW50IHBvaW50ZXJcbiAgICAgICAgICAgIGNpbmRleC5zcGxpY2UocCwgMSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGluY3JlbWVudCBwb2ludGVyXG4gICAgICAgICAgICBwKys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyB1cGRhdGUgY3B0clxuXG5cbiAgICBjcHRyW2NvbHVtbnNdID0gY2luZGV4Lmxlbmd0aDsgLy8gcmV0dXJuIHNwYXJzZSBtYXRyaXhcblxuICAgIHJldHVybiBhLmNyZWF0ZVNwYXJzZU1hdHJpeCh7XG4gICAgICB2YWx1ZXM6IGN2YWx1ZXMsXG4gICAgICBpbmRleDogY2luZGV4LFxuICAgICAgcHRyOiBjcHRyLFxuICAgICAgc2l6ZTogW3Jvd3MsIGNvbHVtbnNdLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7XG4gIH07XG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMDYgPSBjcmVhdGVBbGdvcml0aG0wNjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMDcgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX0RpbWVuc2lvbkVycm9yID0gcmVxdWlyZShcIi4uLy4uLy4uL2Vycm9yL0RpbWVuc2lvbkVycm9yXCIpO1xuXG52YXIgbmFtZSA9ICdhbGdvcml0aG0wNyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdEZW5zZU1hdHJpeCddO1xudmFyIGNyZWF0ZUFsZ29yaXRobTA3ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcblxuICAvKipcbiAgICogSXRlcmF0ZXMgb3ZlciBTcGFyc2VNYXRyaXggQSBhbmQgU3BhcnNlTWF0cml4IEIgaXRlbXMgKHplcm8gYW5kIG5vbnplcm8pIGFuZCBpbnZva2VzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmKEFpaiwgQmlqKS5cbiAgICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCBNeE4gdGltZXMuXG4gICAqXG4gICAqIEMoaSxqKSA9IGYoQWlqLCBCaWopXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgIGEgICAgICAgICAgICAgICAgIFRoZSBTcGFyc2VNYXRyaXggaW5zdGFuY2UgKEEpXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgIGIgICAgICAgICAgICAgICAgIFRoZSBTcGFyc2VNYXRyaXggaW5zdGFuY2UgKEIpXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgICAgICAgIFRoZSBmKEFpaixCaWopIG9wZXJhdGlvbiB0byBpbnZva2VcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICAgICAgICAgRGVuc2VNYXRyaXggKEMpXG4gICAqXG4gICAqIHNlZSBodHRwczovL2dpdGh1Yi5jb20vam9zZGVqb25nL21hdGhqcy9wdWxsLzM0NiNpc3N1ZWNvbW1lbnQtOTc2MjAyOTRcbiAgICovXG4gIHJldHVybiBmdW5jdGlvbiBhbGdvcml0aG0wNyhhLCBiLCBjYWxsYmFjaykge1xuICAgIC8vIHNwYXJzZSBtYXRyaXggYXJyYXlzXG4gICAgdmFyIGFzaXplID0gYS5fc2l6ZTtcbiAgICB2YXIgYWR0ID0gYS5fZGF0YXR5cGU7IC8vIHNwYXJzZSBtYXRyaXggYXJyYXlzXG5cbiAgICB2YXIgYnNpemUgPSBiLl9zaXplO1xuICAgIHZhciBiZHQgPSBiLl9kYXRhdHlwZTsgLy8gdmFsaWRhdGUgZGltZW5zaW9uc1xuXG4gICAgaWYgKGFzaXplLmxlbmd0aCAhPT0gYnNpemUubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKGFzaXplLmxlbmd0aCwgYnNpemUubGVuZ3RoKTtcbiAgICB9IC8vIGNoZWNrIHJvd3MgJiBjb2x1bW5zXG5cblxuICAgIGlmIChhc2l6ZVswXSAhPT0gYnNpemVbMF0gfHwgYXNpemVbMV0gIT09IGJzaXplWzFdKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRGltZW5zaW9uIG1pc21hdGNoLiBNYXRyaXggQSAoJyArIGFzaXplICsgJykgbXVzdCBtYXRjaCBNYXRyaXggQiAoJyArIGJzaXplICsgJyknKTtcbiAgICB9IC8vIHJvd3MgJiBjb2x1bW5zXG5cblxuICAgIHZhciByb3dzID0gYXNpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSBhc2l6ZVsxXTsgLy8gZGF0YXR5cGVcblxuICAgIHZhciBkdDsgLy8gemVybyB2YWx1ZVxuXG4gICAgdmFyIHplcm8gPSAwOyAvLyBjYWxsYmFjayBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgY2YgPSBjYWxsYmFjazsgLy8gcHJvY2VzcyBkYXRhIHR5cGVzXG5cbiAgICBpZiAodHlwZW9mIGFkdCA9PT0gJ3N0cmluZycgJiYgYWR0ID09PSBiZHQpIHtcbiAgICAgIC8vIGRhdGF0eXBlXG4gICAgICBkdCA9IGFkdDsgLy8gY29udmVydCAwIHRvIHRoZSBzYW1lIGRhdGF0eXBlXG5cbiAgICAgIHplcm8gPSB0eXBlZC5jb252ZXJ0KDAsIGR0KTsgLy8gY2FsbGJhY2tcblxuICAgICAgY2YgPSB0eXBlZC5maW5kKGNhbGxiYWNrLCBbZHQsIGR0XSk7XG4gICAgfSAvLyB2YXJzXG5cblxuICAgIHZhciBpLCBqOyAvLyByZXN1bHQgYXJyYXlzXG5cbiAgICB2YXIgY2RhdGEgPSBbXTsgLy8gaW5pdGlhbGl6ZSBjXG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICBjZGF0YVtpXSA9IFtdO1xuICAgIH0gLy8gd29ya3NwYWNlc1xuXG5cbiAgICB2YXIgeGEgPSBbXTtcbiAgICB2YXIgeGIgPSBbXTsgLy8gbWFya3MgaW5kaWNhdGluZyB3ZSBoYXZlIGEgdmFsdWUgaW4geCBmb3IgYSBnaXZlbiBjb2x1bW5cblxuICAgIHZhciB3YSA9IFtdO1xuICAgIHZhciB3YiA9IFtdOyAvLyBsb29wIGNvbHVtbnNcblxuICAgIGZvciAoaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgIC8vIGNvbHVtbnMgbWFya1xuICAgICAgdmFyIG1hcmsgPSBqICsgMTsgLy8gc2NhdHRlciB0aGUgdmFsdWVzIG9mIEEoOixqKSBpbnRvIHdvcmtzcGFjZVxuXG4gICAgICBfc2NhdHRlcihhLCBqLCB3YSwgeGEsIG1hcmspOyAvLyBzY2F0dGVyIHRoZSB2YWx1ZXMgb2YgQig6LGopIGludG8gd29ya3NwYWNlXG5cblxuICAgICAgX3NjYXR0ZXIoYiwgaiwgd2IsIHhiLCBtYXJrKTsgLy8gbG9vcCByb3dzXG5cblxuICAgICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAvLyBtYXRyaXggdmFsdWVzIEAgaSxqXG4gICAgICAgIHZhciB2YSA9IHdhW2ldID09PSBtYXJrID8geGFbaV0gOiB6ZXJvO1xuICAgICAgICB2YXIgdmIgPSB3YltpXSA9PT0gbWFyayA/IHhiW2ldIDogemVybzsgLy8gaW52b2tlIGNhbGxiYWNrXG5cbiAgICAgICAgY2RhdGFbaV1bal0gPSBjZih2YSwgdmIpO1xuICAgICAgfVxuICAgIH0gLy8gcmV0dXJuIGRlbnNlIG1hdHJpeFxuXG5cbiAgICByZXR1cm4gbmV3IERlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6IGNkYXRhLFxuICAgICAgc2l6ZTogW3Jvd3MsIGNvbHVtbnNdLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gX3NjYXR0ZXIobSwgaiwgdywgeCwgbWFyaykge1xuICAgIC8vIGEgYXJyYXlzXG4gICAgdmFyIHZhbHVlcyA9IG0uX3ZhbHVlcztcbiAgICB2YXIgaW5kZXggPSBtLl9pbmRleDtcbiAgICB2YXIgcHRyID0gbS5fcHRyOyAvLyBsb29wIHZhbHVlcyBpbiBjb2x1bW4galxuXG4gICAgZm9yICh2YXIgayA9IHB0cltqXSwgazEgPSBwdHJbaiArIDFdOyBrIDwgazE7IGsrKykge1xuICAgICAgLy8gcm93XG4gICAgICB2YXIgaSA9IGluZGV4W2tdOyAvLyB1cGRhdGUgd29ya3NwYWNlXG5cbiAgICAgIHdbaV0gPSBtYXJrO1xuICAgICAgeFtpXSA9IHZhbHVlc1trXTtcbiAgICB9XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVBbGdvcml0aG0wNyA9IGNyZWF0ZUFsZ29yaXRobTA3OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBbGdvcml0aG0wOCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfRGltZW5zaW9uRXJyb3IgPSByZXF1aXJlKFwiLi4vLi4vLi4vZXJyb3IvRGltZW5zaW9uRXJyb3JcIik7XG5cbnZhciBuYW1lID0gJ2FsZ29yaXRobTA4JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2VxdWFsU2NhbGFyJ107XG52YXIgY3JlYXRlQWxnb3JpdGhtMDggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyO1xuXG4gIC8qKlxuICAgKiBJdGVyYXRlcyBvdmVyIFNwYXJzZU1hdHJpeCBBIGFuZCBTcGFyc2VNYXRyaXggQiBub256ZXJvIGl0ZW1zIGFuZCBpbnZva2VzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmKEFpaiwgQmlqKS5cbiAgICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCBNQVgoTk5aQSwgTk5aQikgdGltZXNcbiAgICpcbiAgICpcbiAgICogICAgICAgICAg4pSMICBmKEFpaiwgQmlqKSAgOyBBKGksaikgIT09IDAgJiYgQihpLGopICE9PSAwXG4gICAqIEMoaSxqKSA9IOKUpCAgQShpLGopICAgICAgIDsgQShpLGopICE9PSAwXG4gICAqICAgICAgICAgIOKUlCAgMCAgICAgICAgICAgIDsgb3RoZXJ3aXNlXG4gICAqXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgIGEgICAgICAgICAgICAgICAgIFRoZSBTcGFyc2VNYXRyaXggaW5zdGFuY2UgKEEpXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgIGIgICAgICAgICAgICAgICAgIFRoZSBTcGFyc2VNYXRyaXggaW5zdGFuY2UgKEIpXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgICAgICAgIFRoZSBmKEFpaixCaWopIG9wZXJhdGlvbiB0byBpbnZva2VcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICAgICAgICAgU3BhcnNlTWF0cml4IChDKVxuICAgKlxuICAgKiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pvc2Rlam9uZy9tYXRoanMvcHVsbC8zNDYjaXNzdWVjb21tZW50LTk3NjIwMjk0XG4gICAqL1xuICByZXR1cm4gZnVuY3Rpb24gYWxnb3JpdGhtMDgoYSwgYiwgY2FsbGJhY2spIHtcbiAgICAvLyBzcGFyc2UgbWF0cml4IGFycmF5c1xuICAgIHZhciBhdmFsdWVzID0gYS5fdmFsdWVzO1xuICAgIHZhciBhaW5kZXggPSBhLl9pbmRleDtcbiAgICB2YXIgYXB0ciA9IGEuX3B0cjtcbiAgICB2YXIgYXNpemUgPSBhLl9zaXplO1xuICAgIHZhciBhZHQgPSBhLl9kYXRhdHlwZTsgLy8gc3BhcnNlIG1hdHJpeCBhcnJheXNcblxuICAgIHZhciBidmFsdWVzID0gYi5fdmFsdWVzO1xuICAgIHZhciBiaW5kZXggPSBiLl9pbmRleDtcbiAgICB2YXIgYnB0ciA9IGIuX3B0cjtcbiAgICB2YXIgYnNpemUgPSBiLl9zaXplO1xuICAgIHZhciBiZHQgPSBiLl9kYXRhdHlwZTsgLy8gdmFsaWRhdGUgZGltZW5zaW9uc1xuXG4gICAgaWYgKGFzaXplLmxlbmd0aCAhPT0gYnNpemUubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKGFzaXplLmxlbmd0aCwgYnNpemUubGVuZ3RoKTtcbiAgICB9IC8vIGNoZWNrIHJvd3MgJiBjb2x1bW5zXG5cblxuICAgIGlmIChhc2l6ZVswXSAhPT0gYnNpemVbMF0gfHwgYXNpemVbMV0gIT09IGJzaXplWzFdKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRGltZW5zaW9uIG1pc21hdGNoLiBNYXRyaXggQSAoJyArIGFzaXplICsgJykgbXVzdCBtYXRjaCBNYXRyaXggQiAoJyArIGJzaXplICsgJyknKTtcbiAgICB9IC8vIHNwYXJzZSBtYXRyaXggY2Fubm90IGJlIGEgUGF0dGVybiBtYXRyaXhcblxuXG4gICAgaWYgKCFhdmFsdWVzIHx8ICFidmFsdWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBwZXJmb3JtIG9wZXJhdGlvbiBvbiBQYXR0ZXJuIFNwYXJzZSBNYXRyaWNlcycpO1xuICAgIH0gLy8gcm93cyAmIGNvbHVtbnNcblxuXG4gICAgdmFyIHJvd3MgPSBhc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IGFzaXplWzFdOyAvLyBkYXRhdHlwZVxuXG4gICAgdmFyIGR0OyAvLyBlcXVhbCBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgZXEgPSBlcXVhbFNjYWxhcjsgLy8gemVybyB2YWx1ZVxuXG4gICAgdmFyIHplcm8gPSAwOyAvLyBjYWxsYmFjayBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgY2YgPSBjYWxsYmFjazsgLy8gcHJvY2VzcyBkYXRhIHR5cGVzXG5cbiAgICBpZiAodHlwZW9mIGFkdCA9PT0gJ3N0cmluZycgJiYgYWR0ID09PSBiZHQpIHtcbiAgICAgIC8vIGRhdGF0eXBlXG4gICAgICBkdCA9IGFkdDsgLy8gZmluZCBzaWduYXR1cmUgdGhhdCBtYXRjaGVzIChkdCwgZHQpXG5cbiAgICAgIGVxID0gdHlwZWQuZmluZChlcXVhbFNjYWxhciwgW2R0LCBkdF0pOyAvLyBjb252ZXJ0IDAgdG8gdGhlIHNhbWUgZGF0YXR5cGVcblxuICAgICAgemVybyA9IHR5cGVkLmNvbnZlcnQoMCwgZHQpOyAvLyBjYWxsYmFja1xuXG4gICAgICBjZiA9IHR5cGVkLmZpbmQoY2FsbGJhY2ssIFtkdCwgZHRdKTtcbiAgICB9IC8vIHJlc3VsdCBhcnJheXNcblxuXG4gICAgdmFyIGN2YWx1ZXMgPSBbXTtcbiAgICB2YXIgY2luZGV4ID0gW107XG4gICAgdmFyIGNwdHIgPSBbXTsgLy8gd29ya3NwYWNlXG5cbiAgICB2YXIgeCA9IFtdOyAvLyBtYXJrcyBpbmRpY2F0aW5nIHdlIGhhdmUgYSB2YWx1ZSBpbiB4IGZvciBhIGdpdmVuIGNvbHVtblxuXG4gICAgdmFyIHcgPSBbXTsgLy8gdmFyc1xuXG4gICAgdmFyIGssIGswLCBrMSwgaTsgLy8gbG9vcCBjb2x1bW5zXG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgLy8gdXBkYXRlIGNwdHJcbiAgICAgIGNwdHJbal0gPSBjaW5kZXgubGVuZ3RoOyAvLyBjb2x1bW5zIG1hcmtcblxuICAgICAgdmFyIG1hcmsgPSBqICsgMTsgLy8gbG9vcCB2YWx1ZXMgaW4gYVxuXG4gICAgICBmb3IgKGswID0gYXB0cltqXSwgazEgPSBhcHRyW2ogKyAxXSwgayA9IGswOyBrIDwgazE7IGsrKykge1xuICAgICAgICAvLyByb3dcbiAgICAgICAgaSA9IGFpbmRleFtrXTsgLy8gbWFyayB3b3Jrc3BhY2VcblxuICAgICAgICB3W2ldID0gbWFyazsgLy8gc2V0IHZhbHVlXG5cbiAgICAgICAgeFtpXSA9IGF2YWx1ZXNba107IC8vIGFkZCBpbmRleFxuXG4gICAgICAgIGNpbmRleC5wdXNoKGkpO1xuICAgICAgfSAvLyBsb29wIHZhbHVlcyBpbiBiXG5cblxuICAgICAgZm9yIChrMCA9IGJwdHJbal0sIGsxID0gYnB0cltqICsgMV0sIGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgLy8gcm93XG4gICAgICAgIGkgPSBiaW5kZXhba107IC8vIGNoZWNrIHZhbHVlIGV4aXN0cyBpbiB3b3Jrc3BhY2VcblxuICAgICAgICBpZiAod1tpXSA9PT0gbWFyaykge1xuICAgICAgICAgIC8vIGV2YWx1YXRlIGNhbGxiYWNrXG4gICAgICAgICAgeFtpXSA9IGNmKHhbaV0sIGJ2YWx1ZXNba10pO1xuICAgICAgICB9XG4gICAgICB9IC8vIGluaXRpYWxpemUgZmlyc3QgaW5kZXggaW4galxuXG5cbiAgICAgIGsgPSBjcHRyW2pdOyAvLyBsb29wIGluZGV4IGluIGpcblxuICAgICAgd2hpbGUgKGsgPCBjaW5kZXgubGVuZ3RoKSB7XG4gICAgICAgIC8vIHJvd1xuICAgICAgICBpID0gY2luZGV4W2tdOyAvLyB2YWx1ZSBAIGlcblxuICAgICAgICB2YXIgdiA9IHhbaV07IC8vIGNoZWNrIGZvciB6ZXJvIHZhbHVlXG5cbiAgICAgICAgaWYgKCFlcSh2LCB6ZXJvKSkge1xuICAgICAgICAgIC8vIHB1c2ggdmFsdWVcbiAgICAgICAgICBjdmFsdWVzLnB1c2godik7IC8vIGluY3JlbWVudCBwb2ludGVyXG5cbiAgICAgICAgICBrKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gcmVtb3ZlIHZhbHVlIEAgaSwgZG8gbm90IGluY3JlbWVudCBwb2ludGVyXG4gICAgICAgICAgY2luZGV4LnNwbGljZShrLCAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gdXBkYXRlIGNwdHJcblxuXG4gICAgY3B0cltjb2x1bW5zXSA9IGNpbmRleC5sZW5ndGg7IC8vIHJldHVybiBzcGFyc2UgbWF0cml4XG5cbiAgICByZXR1cm4gYS5jcmVhdGVTcGFyc2VNYXRyaXgoe1xuICAgICAgdmFsdWVzOiBjdmFsdWVzLFxuICAgICAgaW5kZXg6IGNpbmRleCxcbiAgICAgIHB0cjogY3B0cixcbiAgICAgIHNpemU6IFtyb3dzLCBjb2x1bW5zXSxcbiAgICAgIGRhdGF0eXBlOiBkdFxuICAgIH0pO1xuICB9O1xufSk7XG5leHBvcnRzLmNyZWF0ZUFsZ29yaXRobTA4ID0gY3JlYXRlQWxnb3JpdGhtMDg7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFsZ29yaXRobTA5ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9EaW1lbnNpb25FcnJvciA9IHJlcXVpcmUoXCIuLi8uLi8uLi9lcnJvci9EaW1lbnNpb25FcnJvclwiKTtcblxudmFyIG5hbWUgPSAnYWxnb3JpdGhtMDknO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnZXF1YWxTY2FsYXInXTtcbnZhciBjcmVhdGVBbGdvcml0aG0wOSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXI7XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGVzIG92ZXIgU3BhcnNlTWF0cml4IEEgYW5kIGludm9rZXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGYoQWlqLCBCaWopLlxuICAgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIE5aQSB0aW1lcywgbnVtYmVyIG9mIG5vbnplcm8gZWxlbWVudHMgaW4gQS5cbiAgICpcbiAgICpcbiAgICogICAgICAgICAg4pSMICBmKEFpaiwgQmlqKSAgOyBBKGksaikgIT09IDBcbiAgICogQyhpLGopID0g4pSkXG4gICAqICAgICAgICAgIOKUlCAgMCAgICAgICAgICAgIDsgb3RoZXJ3aXNlXG4gICAqXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgIGEgICAgICAgICAgICAgICAgIFRoZSBTcGFyc2VNYXRyaXggaW5zdGFuY2UgKEEpXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgIGIgICAgICAgICAgICAgICAgIFRoZSBTcGFyc2VNYXRyaXggaW5zdGFuY2UgKEIpXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgICAgICAgIFRoZSBmKEFpaixCaWopIG9wZXJhdGlvbiB0byBpbnZva2VcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICAgICAgICAgU3BhcnNlTWF0cml4IChDKVxuICAgKlxuICAgKiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pvc2Rlam9uZy9tYXRoanMvcHVsbC8zNDYjaXNzdWVjb21tZW50LTk3NjIwMjk0XG4gICAqL1xuICByZXR1cm4gZnVuY3Rpb24gYWxnb3JpdGhtMDkoYSwgYiwgY2FsbGJhY2spIHtcbiAgICAvLyBzcGFyc2UgbWF0cml4IGFycmF5c1xuICAgIHZhciBhdmFsdWVzID0gYS5fdmFsdWVzO1xuICAgIHZhciBhaW5kZXggPSBhLl9pbmRleDtcbiAgICB2YXIgYXB0ciA9IGEuX3B0cjtcbiAgICB2YXIgYXNpemUgPSBhLl9zaXplO1xuICAgIHZhciBhZHQgPSBhLl9kYXRhdHlwZTsgLy8gc3BhcnNlIG1hdHJpeCBhcnJheXNcblxuICAgIHZhciBidmFsdWVzID0gYi5fdmFsdWVzO1xuICAgIHZhciBiaW5kZXggPSBiLl9pbmRleDtcbiAgICB2YXIgYnB0ciA9IGIuX3B0cjtcbiAgICB2YXIgYnNpemUgPSBiLl9zaXplO1xuICAgIHZhciBiZHQgPSBiLl9kYXRhdHlwZTsgLy8gdmFsaWRhdGUgZGltZW5zaW9uc1xuXG4gICAgaWYgKGFzaXplLmxlbmd0aCAhPT0gYnNpemUubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKGFzaXplLmxlbmd0aCwgYnNpemUubGVuZ3RoKTtcbiAgICB9IC8vIGNoZWNrIHJvd3MgJiBjb2x1bW5zXG5cblxuICAgIGlmIChhc2l6ZVswXSAhPT0gYnNpemVbMF0gfHwgYXNpemVbMV0gIT09IGJzaXplWzFdKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRGltZW5zaW9uIG1pc21hdGNoLiBNYXRyaXggQSAoJyArIGFzaXplICsgJykgbXVzdCBtYXRjaCBNYXRyaXggQiAoJyArIGJzaXplICsgJyknKTtcbiAgICB9IC8vIHJvd3MgJiBjb2x1bW5zXG5cblxuICAgIHZhciByb3dzID0gYXNpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSBhc2l6ZVsxXTsgLy8gZGF0YXR5cGVcblxuICAgIHZhciBkdDsgLy8gZXF1YWwgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGVxID0gZXF1YWxTY2FsYXI7IC8vIHplcm8gdmFsdWVcblxuICAgIHZhciB6ZXJvID0gMDsgLy8gY2FsbGJhY2sgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGNmID0gY2FsbGJhY2s7IC8vIHByb2Nlc3MgZGF0YSB0eXBlc1xuXG4gICAgaWYgKHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnICYmIGFkdCA9PT0gYmR0KSB7XG4gICAgICAvLyBkYXRhdHlwZVxuICAgICAgZHQgPSBhZHQ7IC8vIGZpbmQgc2lnbmF0dXJlIHRoYXQgbWF0Y2hlcyAoZHQsIGR0KVxuXG4gICAgICBlcSA9IHR5cGVkLmZpbmQoZXF1YWxTY2FsYXIsIFtkdCwgZHRdKTsgLy8gY29udmVydCAwIHRvIHRoZSBzYW1lIGRhdGF0eXBlXG5cbiAgICAgIHplcm8gPSB0eXBlZC5jb252ZXJ0KDAsIGR0KTsgLy8gY2FsbGJhY2tcblxuICAgICAgY2YgPSB0eXBlZC5maW5kKGNhbGxiYWNrLCBbZHQsIGR0XSk7XG4gICAgfSAvLyByZXN1bHQgYXJyYXlzXG5cblxuICAgIHZhciBjdmFsdWVzID0gYXZhbHVlcyAmJiBidmFsdWVzID8gW10gOiB1bmRlZmluZWQ7XG4gICAgdmFyIGNpbmRleCA9IFtdO1xuICAgIHZhciBjcHRyID0gW107IC8vIHdvcmtzcGFjZXNcblxuICAgIHZhciB4ID0gY3ZhbHVlcyA/IFtdIDogdW5kZWZpbmVkOyAvLyBtYXJrcyBpbmRpY2F0aW5nIHdlIGhhdmUgYSB2YWx1ZSBpbiB4IGZvciBhIGdpdmVuIGNvbHVtblxuXG4gICAgdmFyIHcgPSBbXTsgLy8gdmFyc1xuXG4gICAgdmFyIGksIGosIGssIGswLCBrMTsgLy8gbG9vcCBjb2x1bW5zXG5cbiAgICBmb3IgKGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAvLyB1cGRhdGUgY3B0clxuICAgICAgY3B0cltqXSA9IGNpbmRleC5sZW5ndGg7IC8vIGNvbHVtbiBtYXJrXG5cbiAgICAgIHZhciBtYXJrID0gaiArIDE7IC8vIGNoZWNrIHdlIG5lZWQgdG8gcHJvY2VzcyB2YWx1ZXNcblxuICAgICAgaWYgKHgpIHtcbiAgICAgICAgLy8gbG9vcCBCKDosailcbiAgICAgICAgZm9yIChrMCA9IGJwdHJbal0sIGsxID0gYnB0cltqICsgMV0sIGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgICAvLyByb3dcbiAgICAgICAgICBpID0gYmluZGV4W2tdOyAvLyB1cGRhdGUgd29ya3NwYWNlXG5cbiAgICAgICAgICB3W2ldID0gbWFyaztcbiAgICAgICAgICB4W2ldID0gYnZhbHVlc1trXTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBsb29wIEEoOixqKVxuXG5cbiAgICAgIGZvciAoazAgPSBhcHRyW2pdLCBrMSA9IGFwdHJbaiArIDFdLCBrID0gazA7IGsgPCBrMTsgaysrKSB7XG4gICAgICAgIC8vIHJvd1xuICAgICAgICBpID0gYWluZGV4W2tdOyAvLyBjaGVjayB3ZSBuZWVkIHRvIHByb2Nlc3MgdmFsdWVzXG5cbiAgICAgICAgaWYgKHgpIHtcbiAgICAgICAgICAvLyBiIHZhbHVlIEAgaSxqXG4gICAgICAgICAgdmFyIHZiID0gd1tpXSA9PT0gbWFyayA/IHhbaV0gOiB6ZXJvOyAvLyBpbnZva2UgZlxuXG4gICAgICAgICAgdmFyIHZjID0gY2YoYXZhbHVlc1trXSwgdmIpOyAvLyBjaGVjayB6ZXJvIHZhbHVlXG5cbiAgICAgICAgICBpZiAoIWVxKHZjLCB6ZXJvKSkge1xuICAgICAgICAgICAgLy8gcHVzaCBpbmRleFxuICAgICAgICAgICAgY2luZGV4LnB1c2goaSk7IC8vIHB1c2ggdmFsdWVcblxuICAgICAgICAgICAgY3ZhbHVlcy5wdXNoKHZjKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gcHVzaCBpbmRleFxuICAgICAgICAgIGNpbmRleC5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyB1cGRhdGUgY3B0clxuXG5cbiAgICBjcHRyW2NvbHVtbnNdID0gY2luZGV4Lmxlbmd0aDsgLy8gcmV0dXJuIHNwYXJzZSBtYXRyaXhcblxuICAgIHJldHVybiBhLmNyZWF0ZVNwYXJzZU1hdHJpeCh7XG4gICAgICB2YWx1ZXM6IGN2YWx1ZXMsXG4gICAgICBpbmRleDogY2luZGV4LFxuICAgICAgcHRyOiBjcHRyLFxuICAgICAgc2l6ZTogW3Jvd3MsIGNvbHVtbnNdLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7XG4gIH07XG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMDkgPSBjcmVhdGVBbGdvcml0aG0wOTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMTAgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdhbGdvcml0aG0xMCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdEZW5zZU1hdHJpeCddO1xudmFyIGNyZWF0ZUFsZ29yaXRobTEwID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcblxuICAvKipcbiAgICogSXRlcmF0ZXMgb3ZlciBTcGFyc2VNYXRyaXggUyBub256ZXJvIGl0ZW1zIGFuZCBpbnZva2VzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmKFNpaiwgYikuXG4gICAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgTlogdGltZXMgKG51bWJlciBvZiBub256ZXJvIGl0ZW1zIGluIFMpLlxuICAgKlxuICAgKlxuICAgKiAgICAgICAgICDilIwgIGYoU2lqLCBiKSAgOyBTKGksaikgIT09IDBcbiAgICogQyhpLGopID0g4pSkXG4gICAqICAgICAgICAgIOKUlCAgYiAgICAgICAgICA7IG90aGVyd2lzZVxuICAgKlxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeH0gICBzICAgICAgICAgICAgICAgICBUaGUgU3BhcnNlTWF0cml4IGluc3RhbmNlIChTKVxuICAgKiBAcGFyYW0ge1NjYWxhcn0gICBiICAgICAgICAgICAgICAgICBUaGUgU2NhbGFyIHZhbHVlXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgICAgICAgIFRoZSBmKEFpaixiKSBvcGVyYXRpb24gdG8gaW52b2tlXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gIGludmVyc2UgICAgICAgICAgIEEgdHJ1ZSB2YWx1ZSBpbmRpY2F0ZXMgY2FsbGJhY2sgc2hvdWxkIGJlIGludm9rZWQgZihiLFNpailcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICAgICAgICAgRGVuc2VNYXRyaXggKEMpXG4gICAqXG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9qb3NkZWpvbmcvbWF0aGpzL3B1bGwvMzQ2I2lzc3VlY29tbWVudC05NzYyNjgxM1xuICAgKi9cbiAgcmV0dXJuIGZ1bmN0aW9uIGFsZ29yaXRobTEwKHMsIGIsIGNhbGxiYWNrLCBpbnZlcnNlKSB7XG4gICAgLy8gc3BhcnNlIG1hdHJpeCBhcnJheXNcbiAgICB2YXIgYXZhbHVlcyA9IHMuX3ZhbHVlcztcbiAgICB2YXIgYWluZGV4ID0gcy5faW5kZXg7XG4gICAgdmFyIGFwdHIgPSBzLl9wdHI7XG4gICAgdmFyIGFzaXplID0gcy5fc2l6ZTtcbiAgICB2YXIgYWR0ID0gcy5fZGF0YXR5cGU7IC8vIHNwYXJzZSBtYXRyaXggY2Fubm90IGJlIGEgUGF0dGVybiBtYXRyaXhcblxuICAgIGlmICghYXZhbHVlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcGVyZm9ybSBvcGVyYXRpb24gb24gUGF0dGVybiBTcGFyc2UgTWF0cml4IGFuZCBTY2FsYXIgdmFsdWUnKTtcbiAgICB9IC8vIHJvd3MgJiBjb2x1bW5zXG5cblxuICAgIHZhciByb3dzID0gYXNpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSBhc2l6ZVsxXTsgLy8gZGF0YXR5cGVcblxuICAgIHZhciBkdDsgLy8gY2FsbGJhY2sgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGNmID0gY2FsbGJhY2s7IC8vIHByb2Nlc3MgZGF0YSB0eXBlc1xuXG4gICAgaWYgKHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBkYXRhdHlwZVxuICAgICAgZHQgPSBhZHQ7IC8vIGNvbnZlcnQgYiB0byB0aGUgc2FtZSBkYXRhdHlwZVxuXG4gICAgICBiID0gdHlwZWQuY29udmVydChiLCBkdCk7IC8vIGNhbGxiYWNrXG5cbiAgICAgIGNmID0gdHlwZWQuZmluZChjYWxsYmFjaywgW2R0LCBkdF0pO1xuICAgIH0gLy8gcmVzdWx0IGFycmF5c1xuXG5cbiAgICB2YXIgY2RhdGEgPSBbXTsgLy8gd29ya3NwYWNlc1xuXG4gICAgdmFyIHggPSBbXTsgLy8gbWFya3MgaW5kaWNhdGluZyB3ZSBoYXZlIGEgdmFsdWUgaW4geCBmb3IgYSBnaXZlbiBjb2x1bW5cblxuICAgIHZhciB3ID0gW107IC8vIGxvb3AgY29sdW1uc1xuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgIC8vIGNvbHVtbnMgbWFya1xuICAgICAgdmFyIG1hcmsgPSBqICsgMTsgLy8gdmFsdWVzIGluIGpcblxuICAgICAgZm9yICh2YXIgazAgPSBhcHRyW2pdLCBrMSA9IGFwdHJbaiArIDFdLCBrID0gazA7IGsgPCBrMTsgaysrKSB7XG4gICAgICAgIC8vIHJvd1xuICAgICAgICB2YXIgciA9IGFpbmRleFtrXTsgLy8gdXBkYXRlIHdvcmtzcGFjZVxuXG4gICAgICAgIHhbcl0gPSBhdmFsdWVzW2tdO1xuICAgICAgICB3W3JdID0gbWFyaztcbiAgICAgIH0gLy8gbG9vcCByb3dzXG5cblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgLy8gaW5pdGlhbGl6ZSBDIG9uIGZpcnN0IGNvbHVtblxuICAgICAgICBpZiAoaiA9PT0gMCkge1xuICAgICAgICAgIC8vIGNyZWF0ZSByb3cgYXJyYXlcbiAgICAgICAgICBjZGF0YVtpXSA9IFtdO1xuICAgICAgICB9IC8vIGNoZWNrIHNwYXJzZSBtYXRyaXggaGFzIGEgdmFsdWUgQCBpLGpcblxuXG4gICAgICAgIGlmICh3W2ldID09PSBtYXJrKSB7XG4gICAgICAgICAgLy8gaW52b2tlIGNhbGxiYWNrLCB1cGRhdGUgQ1xuICAgICAgICAgIGNkYXRhW2ldW2pdID0gaW52ZXJzZSA/IGNmKGIsIHhbaV0pIDogY2YoeFtpXSwgYik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gZGVuc2UgbWF0cml4IHZhbHVlIEAgaSwgalxuICAgICAgICAgIGNkYXRhW2ldW2pdID0gYjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gcmV0dXJuIGRlbnNlIG1hdHJpeFxuXG5cbiAgICByZXR1cm4gbmV3IERlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6IGNkYXRhLFxuICAgICAgc2l6ZTogW3Jvd3MsIGNvbHVtbnNdLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7XG4gIH07XG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMTAgPSBjcmVhdGVBbGdvcml0aG0xMDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMTEgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdhbGdvcml0aG0xMSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdlcXVhbFNjYWxhciddO1xudmFyIGNyZWF0ZUFsZ29yaXRobTExID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcjtcblxuICAvKipcbiAgICogSXRlcmF0ZXMgb3ZlciBTcGFyc2VNYXRyaXggUyBub256ZXJvIGl0ZW1zIGFuZCBpbnZva2VzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmKFNpaiwgYikuXG4gICAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgTlogdGltZXMgKG51bWJlciBvZiBub256ZXJvIGl0ZW1zIGluIFMpLlxuICAgKlxuICAgKlxuICAgKiAgICAgICAgICDilIwgIGYoU2lqLCBiKSAgOyBTKGksaikgIT09IDBcbiAgICogQyhpLGopID0g4pSkXG4gICAqICAgICAgICAgIOKUlCAgMCAgICAgICAgICA7IG90aGVyd2lzZVxuICAgKlxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeH0gICBzICAgICAgICAgICAgICAgICBUaGUgU3BhcnNlTWF0cml4IGluc3RhbmNlIChTKVxuICAgKiBAcGFyYW0ge1NjYWxhcn0gICBiICAgICAgICAgICAgICAgICBUaGUgU2NhbGFyIHZhbHVlXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgICAgICAgIFRoZSBmKEFpaixiKSBvcGVyYXRpb24gdG8gaW52b2tlXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gIGludmVyc2UgICAgICAgICAgIEEgdHJ1ZSB2YWx1ZSBpbmRpY2F0ZXMgY2FsbGJhY2sgc2hvdWxkIGJlIGludm9rZWQgZihiLFNpailcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICAgICAgICAgU3BhcnNlTWF0cml4IChDKVxuICAgKlxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vam9zZGVqb25nL21hdGhqcy9wdWxsLzM0NiNpc3N1ZWNvbW1lbnQtOTc2MjY4MTNcbiAgICovXG4gIHJldHVybiBmdW5jdGlvbiBhbGdvcml0aG0xMShzLCBiLCBjYWxsYmFjaywgaW52ZXJzZSkge1xuICAgIC8vIHNwYXJzZSBtYXRyaXggYXJyYXlzXG4gICAgdmFyIGF2YWx1ZXMgPSBzLl92YWx1ZXM7XG4gICAgdmFyIGFpbmRleCA9IHMuX2luZGV4O1xuICAgIHZhciBhcHRyID0gcy5fcHRyO1xuICAgIHZhciBhc2l6ZSA9IHMuX3NpemU7XG4gICAgdmFyIGFkdCA9IHMuX2RhdGF0eXBlOyAvLyBzcGFyc2UgbWF0cml4IGNhbm5vdCBiZSBhIFBhdHRlcm4gbWF0cml4XG5cbiAgICBpZiAoIWF2YWx1ZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHBlcmZvcm0gb3BlcmF0aW9uIG9uIFBhdHRlcm4gU3BhcnNlIE1hdHJpeCBhbmQgU2NhbGFyIHZhbHVlJyk7XG4gICAgfSAvLyByb3dzICYgY29sdW1uc1xuXG5cbiAgICB2YXIgcm93cyA9IGFzaXplWzBdO1xuICAgIHZhciBjb2x1bW5zID0gYXNpemVbMV07IC8vIGRhdGF0eXBlXG5cbiAgICB2YXIgZHQ7IC8vIGVxdWFsIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBlcSA9IGVxdWFsU2NhbGFyOyAvLyB6ZXJvIHZhbHVlXG5cbiAgICB2YXIgemVybyA9IDA7IC8vIGNhbGxiYWNrIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBjZiA9IGNhbGxiYWNrOyAvLyBwcm9jZXNzIGRhdGEgdHlwZXNcblxuICAgIGlmICh0eXBlb2YgYWR0ID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gZGF0YXR5cGVcbiAgICAgIGR0ID0gYWR0OyAvLyBmaW5kIHNpZ25hdHVyZSB0aGF0IG1hdGNoZXMgKGR0LCBkdClcblxuICAgICAgZXEgPSB0eXBlZC5maW5kKGVxdWFsU2NhbGFyLCBbZHQsIGR0XSk7IC8vIGNvbnZlcnQgMCB0byB0aGUgc2FtZSBkYXRhdHlwZVxuXG4gICAgICB6ZXJvID0gdHlwZWQuY29udmVydCgwLCBkdCk7IC8vIGNvbnZlcnQgYiB0byB0aGUgc2FtZSBkYXRhdHlwZVxuXG4gICAgICBiID0gdHlwZWQuY29udmVydChiLCBkdCk7IC8vIGNhbGxiYWNrXG5cbiAgICAgIGNmID0gdHlwZWQuZmluZChjYWxsYmFjaywgW2R0LCBkdF0pO1xuICAgIH0gLy8gcmVzdWx0IGFycmF5c1xuXG5cbiAgICB2YXIgY3ZhbHVlcyA9IFtdO1xuICAgIHZhciBjaW5kZXggPSBbXTtcbiAgICB2YXIgY3B0ciA9IFtdOyAvLyBsb29wIGNvbHVtbnNcblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAvLyBpbml0aWFsaXplIHB0clxuICAgICAgY3B0cltqXSA9IGNpbmRleC5sZW5ndGg7IC8vIHZhbHVlcyBpbiBqXG5cbiAgICAgIGZvciAodmFyIGswID0gYXB0cltqXSwgazEgPSBhcHRyW2ogKyAxXSwgayA9IGswOyBrIDwgazE7IGsrKykge1xuICAgICAgICAvLyByb3dcbiAgICAgICAgdmFyIGkgPSBhaW5kZXhba107IC8vIGludm9rZSBjYWxsYmFja1xuXG4gICAgICAgIHZhciB2ID0gaW52ZXJzZSA/IGNmKGIsIGF2YWx1ZXNba10pIDogY2YoYXZhbHVlc1trXSwgYik7IC8vIGNoZWNrIHZhbHVlIGlzIHplcm9cblxuICAgICAgICBpZiAoIWVxKHYsIHplcm8pKSB7XG4gICAgICAgICAgLy8gcHVzaCBpbmRleCAmIHZhbHVlXG4gICAgICAgICAgY2luZGV4LnB1c2goaSk7XG4gICAgICAgICAgY3ZhbHVlcy5wdXNoKHYpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyB1cGRhdGUgcHRyXG5cblxuICAgIGNwdHJbY29sdW1uc10gPSBjaW5kZXgubGVuZ3RoOyAvLyByZXR1cm4gc3BhcnNlIG1hdHJpeFxuXG4gICAgcmV0dXJuIHMuY3JlYXRlU3BhcnNlTWF0cml4KHtcbiAgICAgIHZhbHVlczogY3ZhbHVlcyxcbiAgICAgIGluZGV4OiBjaW5kZXgsXG4gICAgICBwdHI6IGNwdHIsXG4gICAgICBzaXplOiBbcm93cywgY29sdW1uc10sXG4gICAgICBkYXRhdHlwZTogZHRcbiAgICB9KTtcbiAgfTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVBbGdvcml0aG0xMSA9IGNyZWF0ZUFsZ29yaXRobTExOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBbGdvcml0aG0xMiA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2FsZ29yaXRobTEyJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlQWxnb3JpdGhtMTIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuXG4gIC8qKlxuICAgKiBJdGVyYXRlcyBvdmVyIFNwYXJzZU1hdHJpeCBTIG5vbnplcm8gaXRlbXMgYW5kIGludm9rZXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGYoU2lqLCBiKS5cbiAgICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCBNeE4gdGltZXMuXG4gICAqXG4gICAqXG4gICAqICAgICAgICAgIOKUjCAgZihTaWosIGIpICA7IFMoaSxqKSAhPT0gMFxuICAgKiBDKGksaikgPSDilKRcbiAgICogICAgICAgICAg4pSUICBmKDAsIGIpICAgIDsgb3RoZXJ3aXNlXG4gICAqXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgIHMgICAgICAgICAgICAgICAgIFRoZSBTcGFyc2VNYXRyaXggaW5zdGFuY2UgKFMpXG4gICAqIEBwYXJhbSB7U2NhbGFyfSAgIGIgICAgICAgICAgICAgICAgIFRoZSBTY2FsYXIgdmFsdWVcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgICAgICAgICAgVGhlIGYoQWlqLGIpIG9wZXJhdGlvbiB0byBpbnZva2VcbiAgICogQHBhcmFtIHtib29sZWFufSAgaW52ZXJzZSAgICAgICAgICAgQSB0cnVlIHZhbHVlIGluZGljYXRlcyBjYWxsYmFjayBzaG91bGQgYmUgaW52b2tlZCBmKGIsU2lqKVxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgICAgICAgICBEZW5zZU1hdHJpeCAoQylcbiAgICpcbiAgICogaHR0cHM6Ly9naXRodWIuY29tL2pvc2Rlam9uZy9tYXRoanMvcHVsbC8zNDYjaXNzdWVjb21tZW50LTk3NjI2ODEzXG4gICAqL1xuICByZXR1cm4gZnVuY3Rpb24gYWxnb3JpdGhtMTIocywgYiwgY2FsbGJhY2ssIGludmVyc2UpIHtcbiAgICAvLyBzcGFyc2UgbWF0cml4IGFycmF5c1xuICAgIHZhciBhdmFsdWVzID0gcy5fdmFsdWVzO1xuICAgIHZhciBhaW5kZXggPSBzLl9pbmRleDtcbiAgICB2YXIgYXB0ciA9IHMuX3B0cjtcbiAgICB2YXIgYXNpemUgPSBzLl9zaXplO1xuICAgIHZhciBhZHQgPSBzLl9kYXRhdHlwZTsgLy8gc3BhcnNlIG1hdHJpeCBjYW5ub3QgYmUgYSBQYXR0ZXJuIG1hdHJpeFxuXG4gICAgaWYgKCFhdmFsdWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBwZXJmb3JtIG9wZXJhdGlvbiBvbiBQYXR0ZXJuIFNwYXJzZSBNYXRyaXggYW5kIFNjYWxhciB2YWx1ZScpO1xuICAgIH0gLy8gcm93cyAmIGNvbHVtbnNcblxuXG4gICAgdmFyIHJvd3MgPSBhc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IGFzaXplWzFdOyAvLyBkYXRhdHlwZVxuXG4gICAgdmFyIGR0OyAvLyBjYWxsYmFjayBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgY2YgPSBjYWxsYmFjazsgLy8gcHJvY2VzcyBkYXRhIHR5cGVzXG5cbiAgICBpZiAodHlwZW9mIGFkdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIGRhdGF0eXBlXG4gICAgICBkdCA9IGFkdDsgLy8gY29udmVydCBiIHRvIHRoZSBzYW1lIGRhdGF0eXBlXG5cbiAgICAgIGIgPSB0eXBlZC5jb252ZXJ0KGIsIGR0KTsgLy8gY2FsbGJhY2tcblxuICAgICAgY2YgPSB0eXBlZC5maW5kKGNhbGxiYWNrLCBbZHQsIGR0XSk7XG4gICAgfSAvLyByZXN1bHQgYXJyYXlzXG5cblxuICAgIHZhciBjZGF0YSA9IFtdOyAvLyB3b3Jrc3BhY2VzXG5cbiAgICB2YXIgeCA9IFtdOyAvLyBtYXJrcyBpbmRpY2F0aW5nIHdlIGhhdmUgYSB2YWx1ZSBpbiB4IGZvciBhIGdpdmVuIGNvbHVtblxuXG4gICAgdmFyIHcgPSBbXTsgLy8gbG9vcCBjb2x1bW5zXG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgLy8gY29sdW1ucyBtYXJrXG4gICAgICB2YXIgbWFyayA9IGogKyAxOyAvLyB2YWx1ZXMgaW4galxuXG4gICAgICBmb3IgKHZhciBrMCA9IGFwdHJbal0sIGsxID0gYXB0cltqICsgMV0sIGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgLy8gcm93XG4gICAgICAgIHZhciByID0gYWluZGV4W2tdOyAvLyB1cGRhdGUgd29ya3NwYWNlXG5cbiAgICAgICAgeFtyXSA9IGF2YWx1ZXNba107XG4gICAgICAgIHdbcl0gPSBtYXJrO1xuICAgICAgfSAvLyBsb29wIHJvd3NcblxuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAvLyBpbml0aWFsaXplIEMgb24gZmlyc3QgY29sdW1uXG4gICAgICAgIGlmIChqID09PSAwKSB7XG4gICAgICAgICAgLy8gY3JlYXRlIHJvdyBhcnJheVxuICAgICAgICAgIGNkYXRhW2ldID0gW107XG4gICAgICAgIH0gLy8gY2hlY2sgc3BhcnNlIG1hdHJpeCBoYXMgYSB2YWx1ZSBAIGksalxuXG5cbiAgICAgICAgaWYgKHdbaV0gPT09IG1hcmspIHtcbiAgICAgICAgICAvLyBpbnZva2UgY2FsbGJhY2ssIHVwZGF0ZSBDXG4gICAgICAgICAgY2RhdGFbaV1bal0gPSBpbnZlcnNlID8gY2YoYiwgeFtpXSkgOiBjZih4W2ldLCBiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBkZW5zZSBtYXRyaXggdmFsdWUgQCBpLCBqXG4gICAgICAgICAgY2RhdGFbaV1bal0gPSBpbnZlcnNlID8gY2YoYiwgMCkgOiBjZigwLCBiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gcmV0dXJuIGRlbnNlIG1hdHJpeFxuXG5cbiAgICByZXR1cm4gbmV3IERlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6IGNkYXRhLFxuICAgICAgc2l6ZTogW3Jvd3MsIGNvbHVtbnNdLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7XG4gIH07XG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMTIgPSBjcmVhdGVBbGdvcml0aG0xMjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMTMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX0RpbWVuc2lvbkVycm9yID0gcmVxdWlyZShcIi4uLy4uLy4uL2Vycm9yL0RpbWVuc2lvbkVycm9yXCIpO1xuXG52YXIgbmFtZSA9ICdhbGdvcml0aG0xMyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUFsZ29yaXRobTEzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogSXRlcmF0ZXMgb3ZlciBEZW5zZU1hdHJpeCBpdGVtcyBhbmQgaW52b2tlcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZihBaWouLnosIEJpai4ueikuXG4gICAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgTXhOIHRpbWVzLlxuICAgKlxuICAgKiBDKGksaiwuLi56KSA9IGYoQWlqLi56LCBCaWouLnopXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgIGEgICAgICAgICAgICAgICAgIFRoZSBEZW5zZU1hdHJpeCBpbnN0YW5jZSAoQSlcbiAgICogQHBhcmFtIHtNYXRyaXh9ICAgYiAgICAgICAgICAgICAgICAgVGhlIERlbnNlTWF0cml4IGluc3RhbmNlIChCKVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgICAgICAgICBUaGUgZihBaWouLnosQmlqLi56KSBvcGVyYXRpb24gdG8gaW52b2tlXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgICAgIERlbnNlTWF0cml4IChDKVxuICAgKlxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vam9zZGVqb25nL21hdGhqcy9wdWxsLzM0NiNpc3N1ZWNvbW1lbnQtOTc2NTg2NThcbiAgICovXG4gIHJldHVybiBmdW5jdGlvbiBhbGdvcml0aG0xMyhhLCBiLCBjYWxsYmFjaykge1xuICAgIC8vIGEgYXJyYXlzXG4gICAgdmFyIGFkYXRhID0gYS5fZGF0YTtcbiAgICB2YXIgYXNpemUgPSBhLl9zaXplO1xuICAgIHZhciBhZHQgPSBhLl9kYXRhdHlwZTsgLy8gYiBhcnJheXNcblxuICAgIHZhciBiZGF0YSA9IGIuX2RhdGE7XG4gICAgdmFyIGJzaXplID0gYi5fc2l6ZTtcbiAgICB2YXIgYmR0ID0gYi5fZGF0YXR5cGU7IC8vIGMgYXJyYXlzXG5cbiAgICB2YXIgY3NpemUgPSBbXTsgLy8gdmFsaWRhdGUgZGltZW5zaW9uc1xuXG4gICAgaWYgKGFzaXplLmxlbmd0aCAhPT0gYnNpemUubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKGFzaXplLmxlbmd0aCwgYnNpemUubGVuZ3RoKTtcbiAgICB9IC8vIHZhbGlkYXRlIGVhY2ggb25lIG9mIHRoZSBkaW1lbnNpb24gc2l6ZXNcblxuXG4gICAgZm9yICh2YXIgcyA9IDA7IHMgPCBhc2l6ZS5sZW5ndGg7IHMrKykge1xuICAgICAgLy8gbXVzdCBtYXRjaFxuICAgICAgaWYgKGFzaXplW3NdICE9PSBic2l6ZVtzXSkge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRGltZW5zaW9uIG1pc21hdGNoLiBNYXRyaXggQSAoJyArIGFzaXplICsgJykgbXVzdCBtYXRjaCBNYXRyaXggQiAoJyArIGJzaXplICsgJyknKTtcbiAgICAgIH0gLy8gdXBkYXRlIGRpbWVuc2lvbiBpbiBjXG5cblxuICAgICAgY3NpemVbc10gPSBhc2l6ZVtzXTtcbiAgICB9IC8vIGRhdGF0eXBlXG5cblxuICAgIHZhciBkdDsgLy8gY2FsbGJhY2sgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGNmID0gY2FsbGJhY2s7IC8vIHByb2Nlc3MgZGF0YSB0eXBlc1xuXG4gICAgaWYgKHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnICYmIGFkdCA9PT0gYmR0KSB7XG4gICAgICAvLyBkYXRhdHlwZVxuICAgICAgZHQgPSBhZHQ7IC8vIGNhbGxiYWNrXG5cbiAgICAgIGNmID0gdHlwZWQuZmluZChjYWxsYmFjaywgW2R0LCBkdF0pO1xuICAgIH0gLy8gcG9wdWxhdGUgY2RhdGEsIGl0ZXJhdGUgdGhyb3VnaCBkaW1lbnNpb25zXG5cblxuICAgIHZhciBjZGF0YSA9IGNzaXplLmxlbmd0aCA+IDAgPyBfaXRlcmF0ZShjZiwgMCwgY3NpemUsIGNzaXplWzBdLCBhZGF0YSwgYmRhdGEpIDogW107IC8vIGMgbWF0cml4XG5cbiAgICByZXR1cm4gYS5jcmVhdGVEZW5zZU1hdHJpeCh7XG4gICAgICBkYXRhOiBjZGF0YSxcbiAgICAgIHNpemU6IGNzaXplLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7XG4gIH07IC8vIHJlY3Vyc2l2ZSBmdW5jdGlvblxuXG4gIGZ1bmN0aW9uIF9pdGVyYXRlKGYsIGxldmVsLCBzLCBuLCBhdiwgYnYpIHtcbiAgICAvLyBpbml0aWFsaXplIGFycmF5IGZvciB0aGlzIGxldmVsXG4gICAgdmFyIGN2ID0gW107IC8vIGNoZWNrIHdlIHJlYWNoIHRoZSBsYXN0IGxldmVsXG5cbiAgICBpZiAobGV2ZWwgPT09IHMubGVuZ3RoIC0gMSkge1xuICAgICAgLy8gbG9vcCBhcnJheXMgaW4gbGFzdCBsZXZlbFxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgLy8gaW52b2tlIGNhbGxiYWNrIGFuZCBzdG9yZSB2YWx1ZVxuICAgICAgICBjdltpXSA9IGYoYXZbaV0sIGJ2W2ldKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaXRlcmF0ZSBjdXJyZW50IGxldmVsXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG47IGorKykge1xuICAgICAgICAvLyBpdGVyYXRlIG5leHQgbGV2ZWxcbiAgICAgICAgY3Zbal0gPSBfaXRlcmF0ZShmLCBsZXZlbCArIDEsIHMsIHNbbGV2ZWwgKyAxXSwgYXZbal0sIGJ2W2pdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY3Y7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVBbGdvcml0aG0xMyA9IGNyZWF0ZUFsZ29yaXRobTEzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBbGdvcml0aG0xNCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIG5hbWUgPSAnYWxnb3JpdGhtMTQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVBbGdvcml0aG0xNCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGVzIG92ZXIgRGVuc2VNYXRyaXggaXRlbXMgYW5kIGludm9rZXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGYoQWlqLi56LCBiKS5cbiAgICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCBNeE4gdGltZXMuXG4gICAqXG4gICAqIEMoaSxqLC4uLnopID0gZihBaWouLnosIGIpXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgIGEgICAgICAgICAgICAgICAgIFRoZSBEZW5zZU1hdHJpeCBpbnN0YW5jZSAoQSlcbiAgICogQHBhcmFtIHtTY2FsYXJ9ICAgYiAgICAgICAgICAgICAgICAgVGhlIFNjYWxhciB2YWx1ZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgICAgICAgICBUaGUgZihBaWouLnosYikgb3BlcmF0aW9uIHRvIGludm9rZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICBpbnZlcnNlICAgICAgICAgICBBIHRydWUgdmFsdWUgaW5kaWNhdGVzIGNhbGxiYWNrIHNob3VsZCBiZSBpbnZva2VkIGYoYixBaWouLnopXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgICAgIERlbnNlTWF0cml4IChDKVxuICAgKlxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vam9zZGVqb25nL21hdGhqcy9wdWxsLzM0NiNpc3N1ZWNvbW1lbnQtOTc2NTkwNDJcbiAgICovXG4gIHJldHVybiBmdW5jdGlvbiBhbGdvcml0aG0xNChhLCBiLCBjYWxsYmFjaywgaW52ZXJzZSkge1xuICAgIC8vIGEgYXJyYXlzXG4gICAgdmFyIGFkYXRhID0gYS5fZGF0YTtcbiAgICB2YXIgYXNpemUgPSBhLl9zaXplO1xuICAgIHZhciBhZHQgPSBhLl9kYXRhdHlwZTsgLy8gZGF0YXR5cGVcblxuICAgIHZhciBkdDsgLy8gY2FsbGJhY2sgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGNmID0gY2FsbGJhY2s7IC8vIHByb2Nlc3MgZGF0YSB0eXBlc1xuXG4gICAgaWYgKHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBkYXRhdHlwZVxuICAgICAgZHQgPSBhZHQ7IC8vIGNvbnZlcnQgYiB0byB0aGUgc2FtZSBkYXRhdHlwZVxuXG4gICAgICBiID0gdHlwZWQuY29udmVydChiLCBkdCk7IC8vIGNhbGxiYWNrXG5cbiAgICAgIGNmID0gdHlwZWQuZmluZChjYWxsYmFjaywgW2R0LCBkdF0pO1xuICAgIH0gLy8gcG9wdWxhdGUgY2RhdGEsIGl0ZXJhdGUgdGhyb3VnaCBkaW1lbnNpb25zXG5cblxuICAgIHZhciBjZGF0YSA9IGFzaXplLmxlbmd0aCA+IDAgPyBfaXRlcmF0ZShjZiwgMCwgYXNpemUsIGFzaXplWzBdLCBhZGF0YSwgYiwgaW52ZXJzZSkgOiBbXTsgLy8gYyBtYXRyaXhcblxuICAgIHJldHVybiBhLmNyZWF0ZURlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6IGNkYXRhLFxuICAgICAgc2l6ZTogKDAsIF9vYmplY3QuY2xvbmUpKGFzaXplKSxcbiAgICAgIGRhdGF0eXBlOiBkdFxuICAgIH0pO1xuICB9OyAvLyByZWN1cnNpdmUgZnVuY3Rpb25cblxuICBmdW5jdGlvbiBfaXRlcmF0ZShmLCBsZXZlbCwgcywgbiwgYXYsIGJ2LCBpbnZlcnNlKSB7XG4gICAgLy8gaW5pdGlhbGl6ZSBhcnJheSBmb3IgdGhpcyBsZXZlbFxuICAgIHZhciBjdiA9IFtdOyAvLyBjaGVjayB3ZSByZWFjaCB0aGUgbGFzdCBsZXZlbFxuXG4gICAgaWYgKGxldmVsID09PSBzLmxlbmd0aCAtIDEpIHtcbiAgICAgIC8vIGxvb3AgYXJyYXlzIGluIGxhc3QgbGV2ZWxcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgIC8vIGludm9rZSBjYWxsYmFjayBhbmQgc3RvcmUgdmFsdWVcbiAgICAgICAgY3ZbaV0gPSBpbnZlcnNlID8gZihidiwgYXZbaV0pIDogZihhdltpXSwgYnYpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpdGVyYXRlIGN1cnJlbnQgbGV2ZWxcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbjsgaisrKSB7XG4gICAgICAgIC8vIGl0ZXJhdGUgbmV4dCBsZXZlbFxuICAgICAgICBjdltqXSA9IF9pdGVyYXRlKGYsIGxldmVsICsgMSwgcywgc1tsZXZlbCArIDFdLCBhdltqXSwgYnYsIGludmVyc2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjdjtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZUFsZ29yaXRobTE0ID0gY3JlYXRlQWxnb3JpdGhtMTQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU51bWJlciA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgbmFtZSA9ICdudW1iZXInO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVOdW1iZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBudW1iZXIgb3IgY29udmVydCBhIHN0cmluZywgYm9vbGVhbiwgb3IgdW5pdCB0byBhIG51bWJlci5cbiAgICogV2hlbiB2YWx1ZSBpcyBhIG1hdHJpeCwgYWxsIGVsZW1lbnRzIHdpbGwgYmUgY29udmVydGVkIHRvIG51bWJlci5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLm51bWJlcih2YWx1ZSlcbiAgICogICAgbWF0aC5udW1iZXIodW5pdCwgdmFsdWVsZXNzVW5pdClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgubnVtYmVyKDIpICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDJcbiAgICogICAgbWF0aC5udW1iZXIoJzcuMicpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgNy4yXG4gICAqICAgIG1hdGgubnVtYmVyKHRydWUpICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDFcbiAgICogICAgbWF0aC5udW1iZXIoW3RydWUsIGZhbHNlLCB0cnVlLCB0cnVlXSkgLy8gcmV0dXJucyBbMSwgMCwgMSwgMV1cbiAgICogICAgbWF0aC5udW1iZXIobWF0aC51bml0KCc1MmNtJyksICdtJykgICAgLy8gcmV0dXJucyAwLjUyXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiaWdudW1iZXIsIGJvb2xlYW4sIGNvbXBsZXgsIGluZGV4LCBtYXRyaXgsIHN0cmluZywgdW5pdFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgYm9vbGVhbiB8IEFycmF5IHwgTWF0cml4IHwgVW5pdCB8IG51bGx9IFt2YWx1ZV0gIFZhbHVlIHRvIGJlIGNvbnZlcnRlZFxuICAgKiBAcGFyYW0ge1VuaXQgfCBzdHJpbmd9IFt2YWx1ZWxlc3NVbml0XSBBIHZhbHVlbGVzcyB1bml0LCB1c2VkIHRvIGNvbnZlcnQgYSB1bml0IHRvIGEgbnVtYmVyXG4gICAqIEByZXR1cm4ge251bWJlciB8IEFycmF5IHwgTWF0cml4fSBUaGUgY3JlYXRlZCBudW1iZXJcbiAgICovXG4gIHZhciBudW1iZXIgPSB0eXBlZCgnbnVtYmVyJywge1xuICAgICcnOiBmdW5jdGlvbiBfKCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSxcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICByZXR1cm4geDtcbiAgICB9LFxuICAgIHN0cmluZzogZnVuY3Rpb24gc3RyaW5nKHgpIHtcbiAgICAgIGlmICh4ID09PSAnTmFOJykgcmV0dXJuIE5hTjtcbiAgICAgIHZhciBudW0gPSBOdW1iZXIoeCk7XG5cbiAgICAgIGlmIChpc05hTihudW0pKSB7XG4gICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignU3RyaW5nIFwiJyArIHggKyAnXCIgaXMgbm8gdmFsaWQgbnVtYmVyJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudW07XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4geC50b051bWJlcigpO1xuICAgIH0sXG4gICAgRnJhY3Rpb246IGZ1bmN0aW9uIEZyYWN0aW9uKHgpIHtcbiAgICAgIHJldHVybiB4LnZhbHVlT2YoKTtcbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZWNvbmQgYXJndW1lbnQgd2l0aCB2YWx1ZWxlc3MgdW5pdCBleHBlY3RlZCcpO1xuICAgIH0sXG4gICAgXCJudWxsXCI6IGZ1bmN0aW9uIF9udWxsKHgpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH0sXG4gICAgJ1VuaXQsIHN0cmluZyB8IFVuaXQnOiBmdW5jdGlvbiBVbml0U3RyaW5nVW5pdCh1bml0LCB2YWx1ZWxlc3NVbml0KSB7XG4gICAgICByZXR1cm4gdW5pdC50b051bWJlcih2YWx1ZWxlc3NVbml0KTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgbnVtYmVyKTtcbiAgICB9XG4gIH0pOyAvLyByZXZpdmVyIGZ1bmN0aW9uIHRvIHBhcnNlIGEgSlNPTiBvYmplY3QgbGlrZTpcbiAgLy9cbiAgLy8gICAgIHtcIm1hdGhqc1wiOlwibnVtYmVyXCIsXCJ2YWx1ZVwiOlwiMi4zXCJ9XG4gIC8vXG4gIC8vIGludG8gYSBudW1iZXIgMi4zXG5cbiAgbnVtYmVyLmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICByZXR1cm4gcGFyc2VGbG9hdChqc29uLnZhbHVlKTtcbiAgfTtcblxuICByZXR1cm4gbnVtYmVyO1xufSk7XG5leHBvcnRzLmNyZWF0ZU51bWJlciA9IGNyZWF0ZU51bWJlcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUmVzdWx0U2V0ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnUmVzdWx0U2V0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbXTtcbnZhciBjcmVhdGVSZXN1bHRTZXQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoKSB7XG4gIC8qKlxuICAgKiBBIFJlc3VsdFNldCBjb250YWlucyBhIGxpc3Qgb3IgcmVzdWx0c1xuICAgKiBAY2xhc3MgUmVzdWx0U2V0XG4gICAqIEBwYXJhbSB7QXJyYXl9IGVudHJpZXNcbiAgICogQGNvbnN0cnVjdG9yIFJlc3VsdFNldFxuICAgKi9cbiAgZnVuY3Rpb24gUmVzdWx0U2V0KGVudHJpZXMpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVzdWx0U2V0KSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG5cbiAgICB0aGlzLmVudHJpZXMgPSBlbnRyaWVzIHx8IFtdO1xuICB9XG4gIC8qKlxuICAgKiBBdHRhY2ggdHlwZSBpbmZvcm1hdGlvblxuICAgKi9cblxuXG4gIFJlc3VsdFNldC5wcm90b3R5cGUudHlwZSA9ICdSZXN1bHRTZXQnO1xuICBSZXN1bHRTZXQucHJvdG90eXBlLmlzUmVzdWx0U2V0ID0gdHJ1ZTtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFycmF5IHdpdGggcmVzdWx0cyBob2xkIGJ5IHRoaXMgUmVzdWx0U2V0XG4gICAqIEBtZW1iZXJvZiBSZXN1bHRTZXRcbiAgICogQHJldHVybnMge0FycmF5fSBlbnRyaWVzXG4gICAqL1xuXG4gIFJlc3VsdFNldC5wcm90b3R5cGUudmFsdWVPZiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5lbnRyaWVzO1xuICB9O1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgc3RyaW5naWZpZWQgcmVzdWx0cyBvZiB0aGUgUmVzdWx0U2V0XG4gICAqIEBtZW1iZXJvZiBSZXN1bHRTZXRcbiAgICogQHJldHVybnMge3N0cmluZ30gc3RyaW5nXG4gICAqL1xuXG5cbiAgUmVzdWx0U2V0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gJ1snICsgdGhpcy5lbnRyaWVzLmpvaW4oJywgJykgKyAnXSc7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBSZXN1bHRTZXRcbiAgICogQG1lbWJlcm9mIFJlc3VsdFNldFxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGEgSlNPTiBvYmplY3Qgc3RydWN0dXJlZCBhczpcbiAgICogICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIlJlc3VsdFNldFwiLCBcImVudHJpZXNcIjogWy4uLl19YFxuICAgKi9cblxuXG4gIFJlc3VsdFNldC5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdSZXN1bHRTZXQnLFxuICAgICAgZW50cmllczogdGhpcy5lbnRyaWVzXG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIEluc3RhbnRpYXRlIGEgUmVzdWx0U2V0IGZyb20gYSBKU09OIG9iamVjdFxuICAgKiBAbWVtYmVyb2YgUmVzdWx0U2V0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBqc29uICBBIEpTT04gb2JqZWN0IHN0cnVjdHVyZWQgYXM6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiUmVzdWx0U2V0XCIsIFwiZW50cmllc1wiOiBbLi4uXX1gXG4gICAqIEByZXR1cm4ge1Jlc3VsdFNldH1cbiAgICovXG5cblxuICBSZXN1bHRTZXQuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBuZXcgUmVzdWx0U2V0KGpzb24uZW50cmllcyk7XG4gIH07XG5cbiAgcmV0dXJuIFJlc3VsdFNldDtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJlc3VsdFNldCA9IGNyZWF0ZVJlc3VsdFNldDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3RyaW5nID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnc3RyaW5nJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlU3RyaW5nID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgc3RyaW5nIG9yIGNvbnZlcnQgYW55IG9iamVjdCBpbnRvIGEgc3RyaW5nLlxuICAgKiBFbGVtZW50cyBvZiBBcnJheXMgYW5kIE1hdHJpY2VzIGFyZSBwcm9jZXNzZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguc3RyaW5nKHZhbHVlKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5zdHJpbmcoNC4yKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgc3RyaW5nICc0LjInXG4gICAqICAgIG1hdGguc3RyaW5nKG1hdGguY29tcGxleCgzLCAyKSAvLyByZXR1cm5zIHN0cmluZyAnMyArIDJpJ1xuICAgKlxuICAgKiAgICBjb25zdCB1ID0gbWF0aC51bml0KDUsICdrbScpXG4gICAqICAgIG1hdGguc3RyaW5nKHUudG8oJ20nKSkgICAgICAgICAvLyByZXR1cm5zIHN0cmluZyAnNTAwMCBtJ1xuICAgKlxuICAgKiAgICBtYXRoLnN0cmluZyhbdHJ1ZSwgZmFsc2VdKSAgICAgLy8gcmV0dXJucyBbJ3RydWUnLCAnZmFsc2UnXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYmlnbnVtYmVyLCBib29sZWFuLCBjb21wbGV4LCBpbmRleCwgbWF0cml4LCBudW1iZXIsIHVuaXRcbiAgICpcbiAgICogQHBhcmFtIHsqIHwgQXJyYXkgfCBNYXRyaXggfCBudWxsfSBbdmFsdWVdICBBIHZhbHVlIHRvIGNvbnZlcnQgdG8gYSBzdHJpbmdcbiAgICogQHJldHVybiB7c3RyaW5nIHwgQXJyYXkgfCBNYXRyaXh9IFRoZSBjcmVhdGVkIHN0cmluZ1xuICAgKi9cbiAgdmFyIHN0cmluZyA9IHR5cGVkKG5hbWUsIHtcbiAgICAnJzogZnVuY3Rpb24gXygpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9LFxuICAgIG51bWJlcjogX251bWJlci5mb3JtYXQsXG4gICAgXCJudWxsXCI6IGZ1bmN0aW9uIF9udWxsKHgpIHtcbiAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfSxcbiAgICBcImJvb2xlYW5cIjogZnVuY3Rpb24gYm9vbGVhbih4KSB7XG4gICAgICByZXR1cm4geCArICcnO1xuICAgIH0sXG4gICAgc3RyaW5nOiBmdW5jdGlvbiBzdHJpbmcoeCkge1xuICAgICAgcmV0dXJuIHg7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIHN0cmluZyk7XG4gICAgfSxcbiAgICBhbnk6IGZ1bmN0aW9uIGFueSh4KSB7XG4gICAgICByZXR1cm4gU3RyaW5nKHgpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBzdHJpbmc7XG59KTtcbmV4cG9ydHMuY3JlYXRlU3RyaW5nID0gY3JlYXRlU3RyaW5nOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVVbml0Q2xhc3MgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9jb25zdGFudHMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYmlnbnVtYmVyL2NvbnN0YW50c1wiKTtcblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG52YXIgbmFtZSA9ICdVbml0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJz9vbicsICdjb25maWcnLCAnYWRkU2NhbGFyJywgJ3N1YnRyYWN0JywgJ211bHRpcGx5U2NhbGFyJywgJ2RpdmlkZVNjYWxhcicsICdwb3cnLCAnYWJzJywgJ2ZpeCcsICdyb3VuZCcsICdlcXVhbCcsICdpc051bWVyaWMnLCAnZm9ybWF0JywgJ251bWJlcicsICdDb21wbGV4JywgJ0JpZ051bWJlcicsICdGcmFjdGlvbiddO1xudmFyIGNyZWF0ZVVuaXRDbGFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBvbiA9IF9yZWYub24sXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIGFkZFNjYWxhciA9IF9yZWYuYWRkU2NhbGFyLFxuICAgICAgc3VidHJhY3QgPSBfcmVmLnN1YnRyYWN0LFxuICAgICAgbXVsdGlwbHlTY2FsYXIgPSBfcmVmLm11bHRpcGx5U2NhbGFyLFxuICAgICAgZGl2aWRlU2NhbGFyID0gX3JlZi5kaXZpZGVTY2FsYXIsXG4gICAgICBwb3cgPSBfcmVmLnBvdyxcbiAgICAgIGFicyA9IF9yZWYuYWJzLFxuICAgICAgZml4ID0gX3JlZi5maXgsXG4gICAgICByb3VuZCA9IF9yZWYucm91bmQsXG4gICAgICBlcXVhbCA9IF9yZWYuZXF1YWwsXG4gICAgICBpc051bWVyaWMgPSBfcmVmLmlzTnVtZXJpYyxcbiAgICAgIGZvcm1hdCA9IF9yZWYuZm9ybWF0LFxuICAgICAgbnVtYmVyID0gX3JlZi5udW1iZXIsXG4gICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4LFxuICAgICAgX0JpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyLFxuICAgICAgX0ZyYWN0aW9uID0gX3JlZi5GcmFjdGlvbjtcbiAgdmFyIHRvTnVtYmVyID0gbnVtYmVyO1xuICAvKipcbiAgICogQSB1bml0IGNhbiBiZSBjb25zdHJ1Y3RlZCBpbiB0aGUgZm9sbG93aW5nIHdheXM6XG4gICAqXG4gICAqICAgICBjb25zdCBhID0gbmV3IFVuaXQodmFsdWUsIG5hbWUpXG4gICAqICAgICBjb25zdCBiID0gbmV3IFVuaXQobnVsbCwgbmFtZSlcbiAgICogICAgIGNvbnN0IGMgPSBVbml0LnBhcnNlKHN0cilcbiAgICpcbiAgICogRXhhbXBsZSB1c2FnZTpcbiAgICpcbiAgICogICAgIGNvbnN0IGEgPSBuZXcgVW5pdCg1LCAnY20nKSAgICAgICAgICAgICAgIC8vIDUwIG1tXG4gICAqICAgICBjb25zdCBiID0gVW5pdC5wYXJzZSgnMjMga2cnKSAgICAgICAgICAgICAvLyAyMyBrZ1xuICAgKiAgICAgY29uc3QgYyA9IG1hdGguaW4oYSwgbmV3IFVuaXQobnVsbCwgJ20nKSAgLy8gMC4wNSBtXG4gICAqICAgICBjb25zdCBkID0gbmV3IFVuaXQoOS44MSwgXCJtL3NeMlwiKSAgICAgICAgIC8vIDkuODEgbS9zXjJcbiAgICpcbiAgICogQGNsYXNzIFVuaXRcbiAgICogQGNvbnN0cnVjdG9yIFVuaXRcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBib29sZWFufSBbdmFsdWVdICBBIHZhbHVlIGxpa2UgNS4yXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZV0gICBBIHVuaXQgbmFtZSBsaWtlIFwiY21cIiBvciBcImluY2hcIiwgb3IgYSBkZXJpdmVkIHVuaXQgb2YgdGhlIGZvcm06IFwidTFbXmV4MV0gW3UyW15leDJdIC4uLl0gWy8gdTNbXmV4M10gW3U0W15leDRdXV1cIiwgc3VjaCBhcyBcImtnIG1eMi9zXjJcIiwgd2hlcmUgZWFjaCB1bml0IGFwcGVhcmluZyBhZnRlciB0aGUgZm9yd2FyZCBzbGFzaCBpcyB0YWtlbiB0byBiZSBpbiB0aGUgZGVub21pbmF0b3IuIFwia2cgbV4yIHNeLTJcIiBpcyBhIHN5bm9ueW0gYW5kIGlzIGFsc28gYWNjZXB0YWJsZS4gQW55IG9mIHRoZSB1bml0cyBjYW4gaW5jbHVkZSBhIHByZWZpeC5cbiAgICovXG5cbiAgZnVuY3Rpb24gVW5pdCh2YWx1ZSwgbmFtZSkge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBVbml0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG5cbiAgICBpZiAoISh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGlzTnVtZXJpYyh2YWx1ZSkgfHwgKDAsIF9pcy5pc0NvbXBsZXgpKHZhbHVlKSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ZpcnN0IHBhcmFtZXRlciBpbiBVbml0IGNvbnN0cnVjdG9yIG11c3QgYmUgbnVtYmVyLCBCaWdOdW1iZXIsIEZyYWN0aW9uLCBDb21wbGV4LCBvciB1bmRlZmluZWQnKTtcbiAgICB9XG5cbiAgICBpZiAobmFtZSAhPT0gdW5kZWZpbmVkICYmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycgfHwgbmFtZSA9PT0gJycpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTZWNvbmQgcGFyYW1ldGVyIGluIFVuaXQgY29uc3RydWN0b3IgbXVzdCBiZSBhIHN0cmluZycpO1xuICAgIH1cblxuICAgIGlmIChuYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciB1ID0gVW5pdC5wYXJzZShuYW1lKTtcbiAgICAgIHRoaXMudW5pdHMgPSB1LnVuaXRzO1xuICAgICAgdGhpcy5kaW1lbnNpb25zID0gdS5kaW1lbnNpb25zO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVuaXRzID0gW3tcbiAgICAgICAgdW5pdDogVU5JVF9OT05FLFxuICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLk5PTkUsXG4gICAgICAgIC8vIGxpbmsgdG8gYSBsaXN0IHdpdGggc3VwcG9ydGVkIHByZWZpeGVzXG4gICAgICAgIHBvd2VyOiAwXG4gICAgICB9XTtcbiAgICAgIHRoaXMuZGltZW5zaW9ucyA9IFtdO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IEJBU0VfRElNRU5TSU9OUy5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLmRpbWVuc2lvbnNbaV0gPSAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudmFsdWUgPSB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsID8gdGhpcy5fbm9ybWFsaXplKHZhbHVlKSA6IG51bGw7XG4gICAgdGhpcy5maXhQcmVmaXggPSBmYWxzZTsgLy8gaWYgdHJ1ZSwgZnVuY3Rpb24gZm9ybWF0IHdpbGwgbm90IHNlYXJjaCBmb3IgdGhlXG4gICAgLy8gYmVzdCBwcmVmaXggYnV0IGxlYXZlIGl0IGFzIGluaXRpYWxseSBwcm92aWRlZC5cbiAgICAvLyBmaXhQcmVmaXggaXMgc2V0IHRydWUgYnkgdGhlIG1ldGhvZCBVbml0LnRvXG4gICAgLy8gVGhlIGp1c3RpZmljYXRpb24gYmVoaW5kIHRoaXMgaXMgdGhhdCBpZiB0aGUgY29uc3RydWN0b3IgaXMgZXhwbGljaXRseSBjYWxsZWQsXG4gICAgLy8gdGhlIGNhbGxlciB3aXNoZXMgdGhlIHVuaXRzIHRvIGJlIHJldHVybmVkIGV4YWN0bHkgYXMgaGUgc3VwcGxpZWQuXG5cbiAgICB0aGlzLnNraXBBdXRvbWF0aWNTaW1wbGlmaWNhdGlvbiA9IHRydWU7XG4gIH1cbiAgLyoqXG4gICAqIEF0dGFjaCB0eXBlIGluZm9ybWF0aW9uXG4gICAqL1xuXG5cbiAgVW5pdC5wcm90b3R5cGUudHlwZSA9ICdVbml0JztcbiAgVW5pdC5wcm90b3R5cGUuaXNVbml0ID0gdHJ1ZTsgLy8gcHJpdmF0ZSB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucyBmb3IgdGhlIFVuaXQgcGFyc2VyXG5cbiAgdmFyIHRleHQsIGluZGV4LCBjO1xuXG4gIGZ1bmN0aW9uIHNraXBXaGl0ZXNwYWNlKCkge1xuICAgIHdoaWxlIChjID09PSAnICcgfHwgYyA9PT0gJ1xcdCcpIHtcbiAgICAgIG5leHQoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpc0RpZ2l0RG90KGMpIHtcbiAgICByZXR1cm4gYyA+PSAnMCcgJiYgYyA8PSAnOScgfHwgYyA9PT0gJy4nO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNEaWdpdChjKSB7XG4gICAgcmV0dXJuIGMgPj0gJzAnICYmIGMgPD0gJzknO1xuICB9XG5cbiAgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICBpbmRleCsrO1xuICAgIGMgPSB0ZXh0LmNoYXJBdChpbmRleCk7XG4gIH1cblxuICBmdW5jdGlvbiByZXZlcnQob2xkSW5kZXgpIHtcbiAgICBpbmRleCA9IG9sZEluZGV4O1xuICAgIGMgPSB0ZXh0LmNoYXJBdChpbmRleCk7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZU51bWJlcigpIHtcbiAgICB2YXIgbnVtYmVyID0gJyc7XG4gICAgdmFyIG9sZEluZGV4ID0gaW5kZXg7XG5cbiAgICBpZiAoYyA9PT0gJysnKSB7XG4gICAgICBuZXh0KCk7XG4gICAgfSBlbHNlIGlmIChjID09PSAnLScpIHtcbiAgICAgIG51bWJlciArPSBjO1xuICAgICAgbmV4dCgpO1xuICAgIH1cblxuICAgIGlmICghaXNEaWdpdERvdChjKSkge1xuICAgICAgLy8gYSArIG9yIC0gbXVzdCBiZSBmb2xsb3dlZCBieSBhIGRpZ2l0XG4gICAgICByZXZlcnQob2xkSW5kZXgpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSAvLyBnZXQgbnVtYmVyLCBjYW4gaGF2ZSBhIHNpbmdsZSBkb3RcblxuXG4gICAgaWYgKGMgPT09ICcuJykge1xuICAgICAgbnVtYmVyICs9IGM7XG4gICAgICBuZXh0KCk7XG5cbiAgICAgIGlmICghaXNEaWdpdChjKSkge1xuICAgICAgICAvLyB0aGlzIGlzIG5vIGxlZ2FsIG51bWJlciwgaXQgaXMganVzdCBhIGRvdFxuICAgICAgICByZXZlcnQob2xkSW5kZXgpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgd2hpbGUgKGlzRGlnaXQoYykpIHtcbiAgICAgICAgbnVtYmVyICs9IGM7XG4gICAgICAgIG5leHQoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGMgPT09ICcuJykge1xuICAgICAgICBudW1iZXIgKz0gYztcbiAgICAgICAgbmV4dCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHdoaWxlIChpc0RpZ2l0KGMpKSB7XG4gICAgICBudW1iZXIgKz0gYztcbiAgICAgIG5leHQoKTtcbiAgICB9IC8vIGNoZWNrIGZvciBleHBvbmVudGlhbCBub3RhdGlvbiBsaWtlIFwiMi4zZS00XCIgb3IgXCIxLjIzZTUwXCJcblxuXG4gICAgaWYgKGMgPT09ICdFJyB8fCBjID09PSAnZScpIHtcbiAgICAgIC8vIFRoZSBncmFtbWFyIGJyYW5jaGVzIGhlcmUuIFRoaXMgY291bGQgZWl0aGVyIGJlIHBhcnQgb2YgYW4gZXhwb25lbnQgb3IgdGhlIHN0YXJ0IG9mIGEgdW5pdCB0aGF0IGJlZ2lucyB3aXRoIHRoZSBsZXR0ZXIgZSwgc3VjaCBhcyBcIjRleGFieXRlc1wiXG4gICAgICB2YXIgdGVudGF0aXZlTnVtYmVyID0gJyc7XG4gICAgICB2YXIgdGVudGF0aXZlSW5kZXggPSBpbmRleDtcbiAgICAgIHRlbnRhdGl2ZU51bWJlciArPSBjO1xuICAgICAgbmV4dCgpO1xuXG4gICAgICBpZiAoYyA9PT0gJysnIHx8IGMgPT09ICctJykge1xuICAgICAgICB0ZW50YXRpdmVOdW1iZXIgKz0gYztcbiAgICAgICAgbmV4dCgpO1xuICAgICAgfSAvLyBTY2llbnRpZmljIG5vdGF0aW9uIE1VU1QgYmUgZm9sbG93ZWQgYnkgYW4gZXhwb25lbnQgKG90aGVyd2lzZSB3ZSBhc3N1bWUgaXQgaXMgbm90IHNjaWVudGlmaWMgbm90YXRpb24pXG5cblxuICAgICAgaWYgKCFpc0RpZ2l0KGMpKSB7XG4gICAgICAgIC8vIFRoZSBlIG9yIEUgbXVzdCBiZWxvbmcgdG8gc29tZXRoaW5nIGVsc2UsIHNvIHJldHVybiB0aGUgbnVtYmVyIHdpdGhvdXQgdGhlIGUgb3IgRS5cbiAgICAgICAgcmV2ZXJ0KHRlbnRhdGl2ZUluZGV4KTtcbiAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgIH0gLy8gV2UgY2FuIG5vdyBzYWZlbHkgc2F5IHRoYXQgdGhpcyBpcyBzY2llbnRpZmljIG5vdGF0aW9uLlxuXG5cbiAgICAgIG51bWJlciA9IG51bWJlciArIHRlbnRhdGl2ZU51bWJlcjtcblxuICAgICAgd2hpbGUgKGlzRGlnaXQoYykpIHtcbiAgICAgICAgbnVtYmVyICs9IGM7XG4gICAgICAgIG5leHQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVtYmVyO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VVbml0KCkge1xuICAgIHZhciB1bml0TmFtZSA9ICcnOyAvLyBBbHBoYW51bWVyaWMgY2hhcmFjdGVycyBvbmx5OyBtYXRjaGVzIFthLXpBLVowLTldXG5cbiAgICB2YXIgY29kZSA9IHRleHQuY2hhckNvZGVBdChpbmRleCk7XG5cbiAgICB3aGlsZSAoY29kZSA+PSA0OCAmJiBjb2RlIDw9IDU3IHx8IGNvZGUgPj0gNjUgJiYgY29kZSA8PSA5MCB8fCBjb2RlID49IDk3ICYmIGNvZGUgPD0gMTIyKSB7XG4gICAgICB1bml0TmFtZSArPSBjO1xuICAgICAgbmV4dCgpO1xuICAgICAgY29kZSA9IHRleHQuY2hhckNvZGVBdChpbmRleCk7XG4gICAgfSAvLyBNdXN0IGJlZ2luIHdpdGggW2EtekEtWl1cblxuXG4gICAgY29kZSA9IHVuaXROYW1lLmNoYXJDb2RlQXQoMCk7XG5cbiAgICBpZiAoY29kZSA+PSA2NSAmJiBjb2RlIDw9IDkwIHx8IGNvZGUgPj0gOTcgJiYgY29kZSA8PSAxMjIpIHtcbiAgICAgIHJldHVybiB1bml0TmFtZSB8fCBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUNoYXJhY3Rlcih0b0ZpbmQpIHtcbiAgICBpZiAoYyA9PT0gdG9GaW5kKSB7XG4gICAgICBuZXh0KCk7XG4gICAgICByZXR1cm4gdG9GaW5kO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlIGEgc3RyaW5nIGludG8gYSB1bml0LiBUaGUgdmFsdWUgb2YgdGhlIHVuaXQgaXMgcGFyc2VkIGFzIG51bWJlcixcbiAgICogQmlnTnVtYmVyLCBvciBGcmFjdGlvbiBkZXBlbmRpbmcgb24gdGhlIG1hdGguanMgY29uZmlnIHNldHRpbmcgYG51bWJlcmAuXG4gICAqXG4gICAqIFRocm93cyBhbiBleGNlcHRpb24gaWYgdGhlIHByb3ZpZGVkIHN0cmluZyBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQgdW5pdCBvclxuICAgKiBjYW5ub3QgYmUgcGFyc2VkLlxuICAgKiBAbWVtYmVyb2YgVW5pdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyICAgICAgICBBIHN0cmluZyBsaWtlIFwiNS4yIGluY2hcIiwgXCI0ZTIgY20vc14yXCJcbiAgICogQHJldHVybiB7VW5pdH0gdW5pdFxuICAgKi9cblxuXG4gIFVuaXQucGFyc2UgPSBmdW5jdGlvbiAoc3RyLCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgdGV4dCA9IHN0cjtcbiAgICBpbmRleCA9IC0xO1xuICAgIGMgPSAnJztcblxuICAgIGlmICh0eXBlb2YgdGV4dCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgYXJndW1lbnQgaW4gVW5pdC5wYXJzZSwgc3RyaW5nIGV4cGVjdGVkJyk7XG4gICAgfVxuXG4gICAgdmFyIHVuaXQgPSBuZXcgVW5pdCgpO1xuICAgIHVuaXQudW5pdHMgPSBbXTtcbiAgICB2YXIgcG93ZXJNdWx0aXBsaWVyQ3VycmVudCA9IDE7XG4gICAgdmFyIGV4cGVjdGluZ1VuaXQgPSBmYWxzZTsgLy8gQSB1bml0IHNob3VsZCBmb2xsb3cgdGhpcyBwYXR0ZXJuOlxuICAgIC8vIFtudW1iZXJdIC4uLlsgWyovXSB1bml0W15udW1iZXJdIF1cbiAgICAvLyB1bml0W15udW1iZXJdIC4uLiBbIFsqL10gdW5pdFtebnVtYmVyXSBdXG4gICAgLy8gUnVsZXM6XG4gICAgLy8gbnVtYmVyIGlzIGFueSBmbG9hdGluZyBwb2ludCBudW1iZXIuXG4gICAgLy8gdW5pdCBpcyBhbnkgYWxwaGFudW1lcmljIHN0cmluZyBiZWdpbm5pbmcgd2l0aCBhbiBhbHBoYS4gVW5pdHMgd2l0aCBuYW1lcyBsaWtlIGUzIHNob3VsZCBiZSBhdm9pZGVkIGJlY2F1c2UgdGhleSBsb29rIGxpa2UgdGhlIGV4cG9uZW50IG9mIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIVxuICAgIC8vIFRoZSBzdHJpbmcgbWF5IG9wdGlvbmFsbHkgYmVnaW4gd2l0aCBhIG51bWJlci5cbiAgICAvLyBFYWNoIHVuaXQgbWF5IG9wdGlvbmFsbHkgYmUgZm9sbG93ZWQgYnkgXm51bWJlci5cbiAgICAvLyBXaGl0ZXNwYWNlIG9yIGEgZm9yd2FyZCBzbGFzaCBpcyByZWNvbW1lbmRlZCBiZXR3ZWVuIGNvbnNlY3V0aXZlIHVuaXRzLCBhbHRob3VnaCB0aGUgZm9sbG93aW5nIHRlY2huaWNhbGx5IGlzIHBhcnNlYWJsZTpcbiAgICAvLyAgIDJtXjJrZy9zXjJcbiAgICAvLyBpdCBpcyBub3QgZ29vZCBmb3JtLiBJZiBhIHVuaXQgc3RhcnRzIHdpdGggZSwgdGhlbiBpdCBjb3VsZCBiZSBjb25mdXNlZCBhcyBhIGZsb2F0aW5nIHBvaW50IG51bWJlcjpcbiAgICAvLyAgIDRlcmdcblxuICAgIG5leHQoKTtcbiAgICBza2lwV2hpdGVzcGFjZSgpOyAvLyBPcHRpb25hbCBudW1iZXIgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzdHJpbmdcblxuICAgIHZhciB2YWx1ZVN0ciA9IHBhcnNlTnVtYmVyKCk7XG4gICAgdmFyIHZhbHVlID0gbnVsbDtcblxuICAgIGlmICh2YWx1ZVN0cikge1xuICAgICAgaWYgKGNvbmZpZy5udW1iZXIgPT09ICdCaWdOdW1iZXInKSB7XG4gICAgICAgIHZhbHVlID0gbmV3IF9CaWdOdW1iZXIodmFsdWVTdHIpO1xuICAgICAgfSBlbHNlIGlmIChjb25maWcubnVtYmVyID09PSAnRnJhY3Rpb24nKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gbm90IGFsbCBudW1iZXJzIGNhbiBiZSB0dXJuZWQgaW4gRnJhY3Rpb25zLCBmb3IgZXhhbXBsZSB2ZXJ5IHNtYWxsIG51bWJlcnMgbm90XG4gICAgICAgICAgdmFsdWUgPSBuZXcgX0ZyYWN0aW9uKHZhbHVlU3RyKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlU3RyKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbnVtYmVyXG4gICAgICAgIHZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZVN0cik7XG4gICAgICB9XG5cbiAgICAgIHNraXBXaGl0ZXNwYWNlKCk7IC8vIFdoaXRlc3BhY2UgaXMgbm90IHJlcXVpcmVkIGhlcmVcbiAgICAgIC8vIGhhbmRsZSBtdWx0aXBsaWNhdGlvbiBvciBkaXZpc2lvbiByaWdodCBhZnRlciB0aGUgdmFsdWUsIGxpa2UgJzEvcydcblxuICAgICAgaWYgKHBhcnNlQ2hhcmFjdGVyKCcqJykpIHtcbiAgICAgICAgcG93ZXJNdWx0aXBsaWVyQ3VycmVudCA9IDE7XG4gICAgICAgIGV4cGVjdGluZ1VuaXQgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChwYXJzZUNoYXJhY3RlcignLycpKSB7XG4gICAgICAgIHBvd2VyTXVsdGlwbGllckN1cnJlbnQgPSAtMTtcbiAgICAgICAgZXhwZWN0aW5nVW5pdCA9IHRydWU7XG4gICAgICB9XG4gICAgfSAvLyBTdGFjayB0byBrZWVwIHRyYWNrIG9mIHBvd2VyTXVsdGlwbGllcnMgYXBwbGllZCB0byBlYWNoIHBhcmVudGhlc2VzIGdyb3VwXG5cblxuICAgIHZhciBwb3dlck11bHRpcGxpZXJTdGFjayA9IFtdOyAvLyBSdW5uaW5nIHByb2R1Y3Qgb2YgYWxsIGVsZW1lbnRzIGluIHBvd2VyTXVsdGlwbGllclN0YWNrXG5cbiAgICB2YXIgcG93ZXJNdWx0aXBsaWVyU3RhY2tQcm9kdWN0ID0gMTtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBza2lwV2hpdGVzcGFjZSgpOyAvLyBDaGVjayBmb3IgYW5kIGNvbnN1bWUgb3BlbmluZyBwYXJlbnRoZXNlcywgcHVzaGluZyBwb3dlck11bHRpcGxpZXJDdXJyZW50IHRvIHRoZSBzdGFja1xuICAgICAgLy8gQSAnKCcgd2lsbCBhbHdheXMgYXBwZWFyIGRpcmVjdGx5IGJlZm9yZSBhIHVuaXQuXG5cbiAgICAgIHdoaWxlIChjID09PSAnKCcpIHtcbiAgICAgICAgcG93ZXJNdWx0aXBsaWVyU3RhY2sucHVzaChwb3dlck11bHRpcGxpZXJDdXJyZW50KTtcbiAgICAgICAgcG93ZXJNdWx0aXBsaWVyU3RhY2tQcm9kdWN0ICo9IHBvd2VyTXVsdGlwbGllckN1cnJlbnQ7XG4gICAgICAgIHBvd2VyTXVsdGlwbGllckN1cnJlbnQgPSAxO1xuICAgICAgICBuZXh0KCk7XG4gICAgICAgIHNraXBXaGl0ZXNwYWNlKCk7XG4gICAgICB9IC8vIElzIHRoZXJlIHNvbWV0aGluZyBoZXJlP1xuXG5cbiAgICAgIHZhciB1U3RyID0gdm9pZCAwO1xuXG4gICAgICBpZiAoYykge1xuICAgICAgICB2YXIgb2xkQyA9IGM7XG4gICAgICAgIHVTdHIgPSBwYXJzZVVuaXQoKTtcblxuICAgICAgICBpZiAodVN0ciA9PT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignVW5leHBlY3RlZCBcIicgKyBvbGRDICsgJ1wiIGluIFwiJyArIHRleHQgKyAnXCIgYXQgaW5kZXggJyArIGluZGV4LnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBFbmQgb2YgaW5wdXQuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfSAvLyBWZXJpZnkgdGhlIHVuaXQgZXhpc3RzIGFuZCBnZXQgdGhlIHByZWZpeCAoaWYgYW55KVxuXG5cbiAgICAgIHZhciByZXMgPSBfZmluZFVuaXQodVN0cik7XG5cbiAgICAgIGlmIChyZXMgPT09IG51bGwpIHtcbiAgICAgICAgLy8gVW5pdCBub3QgZm91bmQuXG4gICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignVW5pdCBcIicgKyB1U3RyICsgJ1wiIG5vdCBmb3VuZC4nKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHBvd2VyID0gcG93ZXJNdWx0aXBsaWVyQ3VycmVudCAqIHBvd2VyTXVsdGlwbGllclN0YWNrUHJvZHVjdDsgLy8gSXMgdGhlcmUgYSBcIl4gbnVtYmVyXCI/XG5cbiAgICAgIHNraXBXaGl0ZXNwYWNlKCk7XG5cbiAgICAgIGlmIChwYXJzZUNoYXJhY3RlcignXicpKSB7XG4gICAgICAgIHNraXBXaGl0ZXNwYWNlKCk7XG4gICAgICAgIHZhciBwID0gcGFyc2VOdW1iZXIoKTtcblxuICAgICAgICBpZiAocCA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIE5vIHZhbGlkIG51bWJlciBmb3VuZCBmb3IgdGhlIHBvd2VyIVxuICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignSW4gXCInICsgc3RyICsgJ1wiLCBcIl5cIiBtdXN0IGJlIGZvbGxvd2VkIGJ5IGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyJyk7XG4gICAgICAgIH1cblxuICAgICAgICBwb3dlciAqPSBwO1xuICAgICAgfSAvLyBBZGQgdGhlIHVuaXQgdG8gdGhlIGxpc3RcblxuXG4gICAgICB1bml0LnVuaXRzLnB1c2goe1xuICAgICAgICB1bml0OiByZXMudW5pdCxcbiAgICAgICAgcHJlZml4OiByZXMucHJlZml4LFxuICAgICAgICBwb3dlcjogcG93ZXJcbiAgICAgIH0pO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IEJBU0VfRElNRU5TSU9OUy5sZW5ndGg7IGkrKykge1xuICAgICAgICB1bml0LmRpbWVuc2lvbnNbaV0gKz0gKHJlcy51bml0LmRpbWVuc2lvbnNbaV0gfHwgMCkgKiBwb3dlcjtcbiAgICAgIH0gLy8gQ2hlY2sgZm9yIGFuZCBjb25zdW1lIGNsb3NpbmcgcGFyZW50aGVzZXMsIHBvcHBpbmcgZnJvbSB0aGUgc3RhY2suXG4gICAgICAvLyBBICcpJyB3aWxsIGFsd2F5cyBmb2xsb3cgYSB1bml0LlxuXG5cbiAgICAgIHNraXBXaGl0ZXNwYWNlKCk7XG5cbiAgICAgIHdoaWxlIChjID09PSAnKScpIHtcbiAgICAgICAgaWYgKHBvd2VyTXVsdGlwbGllclN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignVW5tYXRjaGVkIFwiKVwiIGluIFwiJyArIHRleHQgKyAnXCIgYXQgaW5kZXggJyArIGluZGV4LnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcG93ZXJNdWx0aXBsaWVyU3RhY2tQcm9kdWN0IC89IHBvd2VyTXVsdGlwbGllclN0YWNrLnBvcCgpO1xuICAgICAgICBuZXh0KCk7XG4gICAgICAgIHNraXBXaGl0ZXNwYWNlKCk7XG4gICAgICB9IC8vIFwiKlwiIGFuZCBcIi9cIiBzaG91bGQgbWVhbiB3ZSBhcmUgZXhwZWN0aW5nIHNvbWV0aGluZyB0byBjb21lIG5leHQuXG4gICAgICAvLyBJcyB0aGVyZSBhIGZvcndhcmQgc2xhc2g/IElmIHNvLCBuZWdhdGUgcG93ZXJNdWx0aXBsaWVyQ3VycmVudC4gVGhlIG5leHQgdW5pdCBvciBwYXJlbiBncm91cCBpcyBpbiB0aGUgZGVub21pbmF0b3IuXG5cblxuICAgICAgZXhwZWN0aW5nVW5pdCA9IGZhbHNlO1xuXG4gICAgICBpZiAocGFyc2VDaGFyYWN0ZXIoJyonKSkge1xuICAgICAgICAvLyBleHBsaWNpdCBtdWx0aXBsaWNhdGlvblxuICAgICAgICBwb3dlck11bHRpcGxpZXJDdXJyZW50ID0gMTtcbiAgICAgICAgZXhwZWN0aW5nVW5pdCA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHBhcnNlQ2hhcmFjdGVyKCcvJykpIHtcbiAgICAgICAgLy8gZGl2aXNpb25cbiAgICAgICAgcG93ZXJNdWx0aXBsaWVyQ3VycmVudCA9IC0xO1xuICAgICAgICBleHBlY3RpbmdVbml0ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGltcGxpY2l0IG11bHRpcGxpY2F0aW9uXG4gICAgICAgIHBvd2VyTXVsdGlwbGllckN1cnJlbnQgPSAxO1xuICAgICAgfSAvLyBSZXBsYWNlIHRoZSB1bml0IGludG8gdGhlIGF1dG8gdW5pdCBzeXN0ZW1cblxuXG4gICAgICBpZiAocmVzLnVuaXQuYmFzZSkge1xuICAgICAgICB2YXIgYmFzZURpbSA9IHJlcy51bml0LmJhc2Uua2V5O1xuICAgICAgICBVTklUX1NZU1RFTVMuYXV0b1tiYXNlRGltXSA9IHtcbiAgICAgICAgICB1bml0OiByZXMudW5pdCxcbiAgICAgICAgICBwcmVmaXg6IHJlcy5wcmVmaXhcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IC8vIEhhcyB0aGUgc3RyaW5nIGJlZW4gZW50aXJlbHkgY29uc3VtZWQ/XG5cblxuICAgIHNraXBXaGl0ZXNwYWNlKCk7XG5cbiAgICBpZiAoYykge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb3VsZCBub3QgcGFyc2U6IFwiJyArIHN0ciArICdcIicpO1xuICAgIH0gLy8gSXMgdGhlcmUgYSB0cmFpbGluZyBzbGFzaD9cblxuXG4gICAgaWYgKGV4cGVjdGluZ1VuaXQpIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignVHJhaWxpbmcgY2hhcmFjdGVyczogXCInICsgc3RyICsgJ1wiJyk7XG4gICAgfSAvLyBJcyB0aGUgcGFyZW50aGVzZXMgc3RhY2sgZW1wdHk/XG5cblxuICAgIGlmIChwb3dlck11bHRpcGxpZXJTdGFjay5sZW5ndGggIT09IDApIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignVW5tYXRjaGVkIFwiKFwiIGluIFwiJyArIHRleHQgKyAnXCInKTtcbiAgICB9IC8vIEFyZSB0aGVyZSBhbnkgdW5pdHMgYXQgYWxsP1xuXG5cbiAgICBpZiAodW5pdC51bml0cy5sZW5ndGggPT09IDAgJiYgIW9wdGlvbnMuYWxsb3dOb1VuaXRzKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ1wiJyArIHN0ciArICdcIiBjb250YWlucyBubyB1bml0cycpO1xuICAgIH1cblxuICAgIHVuaXQudmFsdWUgPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdW5pdC5fbm9ybWFsaXplKHZhbHVlKSA6IG51bGw7XG4gICAgcmV0dXJuIHVuaXQ7XG4gIH07XG4gIC8qKlxuICAgKiBjcmVhdGUgYSBjb3B5IG9mIHRoaXMgdW5pdFxuICAgKiBAbWVtYmVyb2YgVW5pdFxuICAgKiBAcmV0dXJuIHtVbml0fSBSZXR1cm5zIGEgY2xvbmVkIHZlcnNpb24gb2YgdGhlIHVuaXRcbiAgICovXG5cblxuICBVbml0LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdW5pdCA9IG5ldyBVbml0KCk7XG4gICAgdW5pdC5maXhQcmVmaXggPSB0aGlzLmZpeFByZWZpeDtcbiAgICB1bml0LnNraXBBdXRvbWF0aWNTaW1wbGlmaWNhdGlvbiA9IHRoaXMuc2tpcEF1dG9tYXRpY1NpbXBsaWZpY2F0aW9uO1xuICAgIHVuaXQudmFsdWUgPSAoMCwgX29iamVjdC5jbG9uZSkodGhpcy52YWx1ZSk7XG4gICAgdW5pdC5kaW1lbnNpb25zID0gdGhpcy5kaW1lbnNpb25zLnNsaWNlKDApO1xuICAgIHVuaXQudW5pdHMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy51bml0cy5sZW5ndGg7IGkrKykge1xuICAgICAgdW5pdC51bml0c1tpXSA9IHt9O1xuXG4gICAgICBmb3IgKHZhciBwIGluIHRoaXMudW5pdHNbaV0pIHtcbiAgICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KSh0aGlzLnVuaXRzW2ldLCBwKSkge1xuICAgICAgICAgIHVuaXQudW5pdHNbaV1bcF0gPSB0aGlzLnVuaXRzW2ldW3BdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuaXQ7XG4gIH07XG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGUgdW5pdCBpcyBkZXJpdmVkIChzdWNoIGFzIG0vcywgb3IgY21eMiwgYnV0IG5vdCBOKVxuICAgKiBAbWVtYmVyb2YgVW5pdFxuICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSB1bml0IGlzIGRlcml2ZWRcbiAgICovXG5cblxuICBVbml0LnByb3RvdHlwZS5faXNEZXJpdmVkID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLnVuaXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnVuaXRzLmxlbmd0aCA+IDEgfHwgTWF0aC5hYnModGhpcy51bml0c1swXS5wb3dlciAtIDEuMCkgPiAxZS0xNTtcbiAgfTtcbiAgLyoqXG4gICAqIE5vcm1hbGl6ZSBhIHZhbHVlLCBiYXNlZCBvbiBpdHMgY3VycmVudGx5IHNldCB1bml0KHMpXG4gICAqIEBtZW1iZXJvZiBVbml0XG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBib29sZWFufSB2YWx1ZVxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IGJvb2xlYW59IG5vcm1hbGl6ZWQgdmFsdWVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBVbml0LnByb3RvdHlwZS5fbm9ybWFsaXplID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgdmFyIHVuaXRWYWx1ZSwgdW5pdE9mZnNldCwgdW5pdFBvd2VyLCB1bml0UHJlZml4VmFsdWU7XG4gICAgdmFyIGNvbnZlcnQ7XG5cbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0aGlzLnVuaXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5faXNEZXJpdmVkKCkpIHtcbiAgICAgIC8vIFRoaXMgaXMgYSBkZXJpdmVkIHVuaXQsIHNvIGRvIG5vdCBhcHBseSBvZmZzZXRzLlxuICAgICAgLy8gRm9yIGV4YW1wbGUsIHdpdGggSiBrZ14tMSBkZWdDXi0xIHlvdSB3b3VsZCBOT1Qgd2FudCB0byBhcHBseSB0aGUgb2Zmc2V0LlxuICAgICAgdmFyIHJlcyA9IHZhbHVlO1xuICAgICAgY29udmVydCA9IFVuaXQuX2dldE51bWJlckNvbnZlcnRlcigoMCwgX2lzLnR5cGVPZikodmFsdWUpKTsgLy8gY29udmVydCB0byBGcmFjdGlvbiBvciBCaWdOdW1iZXIgaWYgbmVlZGVkXG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy51bml0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB1bml0VmFsdWUgPSBjb252ZXJ0KHRoaXMudW5pdHNbaV0udW5pdC52YWx1ZSk7XG4gICAgICAgIHVuaXRQcmVmaXhWYWx1ZSA9IGNvbnZlcnQodGhpcy51bml0c1tpXS5wcmVmaXgudmFsdWUpO1xuICAgICAgICB1bml0UG93ZXIgPSBjb252ZXJ0KHRoaXMudW5pdHNbaV0ucG93ZXIpO1xuICAgICAgICByZXMgPSBtdWx0aXBseVNjYWxhcihyZXMsIHBvdyhtdWx0aXBseVNjYWxhcih1bml0VmFsdWUsIHVuaXRQcmVmaXhWYWx1ZSksIHVuaXRQb3dlcikpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGlzIGlzIGEgc2luZ2xlIHVuaXQgb2YgcG93ZXIgMSwgbGlrZSBrZyBvciBkZWdDXG4gICAgICBjb252ZXJ0ID0gVW5pdC5fZ2V0TnVtYmVyQ29udmVydGVyKCgwLCBfaXMudHlwZU9mKSh2YWx1ZSkpOyAvLyBjb252ZXJ0IHRvIEZyYWN0aW9uIG9yIEJpZ051bWJlciBpZiBuZWVkZWRcblxuICAgICAgdW5pdFZhbHVlID0gY29udmVydCh0aGlzLnVuaXRzWzBdLnVuaXQudmFsdWUpO1xuICAgICAgdW5pdE9mZnNldCA9IGNvbnZlcnQodGhpcy51bml0c1swXS51bml0Lm9mZnNldCk7XG4gICAgICB1bml0UHJlZml4VmFsdWUgPSBjb252ZXJ0KHRoaXMudW5pdHNbMF0ucHJlZml4LnZhbHVlKTtcbiAgICAgIHJldHVybiBtdWx0aXBseVNjYWxhcihhZGRTY2FsYXIodmFsdWUsIHVuaXRPZmZzZXQpLCBtdWx0aXBseVNjYWxhcih1bml0VmFsdWUsIHVuaXRQcmVmaXhWYWx1ZSkpO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIERlbm9ybWFsaXplIGEgdmFsdWUsIGJhc2VkIG9uIGl0cyBjdXJyZW50bHkgc2V0IHVuaXQocylcbiAgICogQG1lbWJlcm9mIFVuaXRcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbcHJlZml4VmFsdWVdICAgIE9wdGlvbmFsIHByZWZpeCB2YWx1ZSB0byBiZSB1c2VkIChpZ25vcmVkIGlmIHRoaXMgaXMgYSBkZXJpdmVkIHVuaXQpXG4gICAqIEByZXR1cm4ge251bWJlcn0gZGVub3JtYWxpemVkIHZhbHVlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgVW5pdC5wcm90b3R5cGUuX2Rlbm9ybWFsaXplID0gZnVuY3Rpb24gKHZhbHVlLCBwcmVmaXhWYWx1ZSkge1xuICAgIHZhciB1bml0VmFsdWUsIHVuaXRPZmZzZXQsIHVuaXRQb3dlciwgdW5pdFByZWZpeFZhbHVlO1xuICAgIHZhciBjb252ZXJ0O1xuXG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdGhpcy51bml0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2lzRGVyaXZlZCgpKSB7XG4gICAgICAvLyBUaGlzIGlzIGEgZGVyaXZlZCB1bml0LCBzbyBkbyBub3QgYXBwbHkgb2Zmc2V0cy5cbiAgICAgIC8vIEZvciBleGFtcGxlLCB3aXRoIEoga2deLTEgZGVnQ14tMSB5b3Ugd291bGQgTk9UIHdhbnQgdG8gYXBwbHkgdGhlIG9mZnNldC5cbiAgICAgIC8vIEFsc28sIHByZWZpeFZhbHVlIGlzIGlnbm9yZWQtLWJ1dCB3ZSB3aWxsIHN0aWxsIHVzZSB0aGUgcHJlZml4IHZhbHVlIHN0b3JlZCBpbiBlYWNoIHVuaXQsIHNpbmNlIGtnIGlzIHVzdWFsbHkgcHJlZmVyYWJsZSB0byBnIHVubGVzcyB0aGUgdXNlciBkZWNpZGVzIG90aGVyd2lzZS5cbiAgICAgIHZhciByZXMgPSB2YWx1ZTtcbiAgICAgIGNvbnZlcnQgPSBVbml0Ll9nZXROdW1iZXJDb252ZXJ0ZXIoKDAsIF9pcy50eXBlT2YpKHZhbHVlKSk7IC8vIGNvbnZlcnQgdG8gRnJhY3Rpb24gb3IgQmlnTnVtYmVyIGlmIG5lZWRlZFxuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudW5pdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdW5pdFZhbHVlID0gY29udmVydCh0aGlzLnVuaXRzW2ldLnVuaXQudmFsdWUpO1xuICAgICAgICB1bml0UHJlZml4VmFsdWUgPSBjb252ZXJ0KHRoaXMudW5pdHNbaV0ucHJlZml4LnZhbHVlKTtcbiAgICAgICAgdW5pdFBvd2VyID0gY29udmVydCh0aGlzLnVuaXRzW2ldLnBvd2VyKTtcbiAgICAgICAgcmVzID0gZGl2aWRlU2NhbGFyKHJlcywgcG93KG11bHRpcGx5U2NhbGFyKHVuaXRWYWx1ZSwgdW5pdFByZWZpeFZhbHVlKSwgdW5pdFBvd2VyKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgaXMgYSBzaW5nbGUgdW5pdCBvZiBwb3dlciAxLCBsaWtlIGtnIG9yIGRlZ0NcbiAgICAgIGNvbnZlcnQgPSBVbml0Ll9nZXROdW1iZXJDb252ZXJ0ZXIoKDAsIF9pcy50eXBlT2YpKHZhbHVlKSk7IC8vIGNvbnZlcnQgdG8gRnJhY3Rpb24gb3IgQmlnTnVtYmVyIGlmIG5lZWRlZFxuXG4gICAgICB1bml0VmFsdWUgPSBjb252ZXJ0KHRoaXMudW5pdHNbMF0udW5pdC52YWx1ZSk7XG4gICAgICB1bml0UHJlZml4VmFsdWUgPSBjb252ZXJ0KHRoaXMudW5pdHNbMF0ucHJlZml4LnZhbHVlKTtcbiAgICAgIHVuaXRPZmZzZXQgPSBjb252ZXJ0KHRoaXMudW5pdHNbMF0udW5pdC5vZmZzZXQpO1xuXG4gICAgICBpZiAocHJlZml4VmFsdWUgPT09IHVuZGVmaW5lZCB8fCBwcmVmaXhWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gc3VidHJhY3QoZGl2aWRlU2NhbGFyKGRpdmlkZVNjYWxhcih2YWx1ZSwgdW5pdFZhbHVlKSwgdW5pdFByZWZpeFZhbHVlKSwgdW5pdE9mZnNldCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc3VidHJhY3QoZGl2aWRlU2NhbGFyKGRpdmlkZVNjYWxhcih2YWx1ZSwgdW5pdFZhbHVlKSwgcHJlZml4VmFsdWUpLCB1bml0T2Zmc2V0KTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBGaW5kIGEgdW5pdCBmcm9tIGEgc3RyaW5nXG4gICAqIEBtZW1iZXJvZiBVbml0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgICAgICAgICAgICAgIEEgc3RyaW5nIGxpa2UgJ2NtJyBvciAnaW5jaCdcbiAgICogQHJldHVybnMge09iamVjdCB8IG51bGx9IHJlc3VsdCAgV2hlbiBmb3VuZCwgYW4gb2JqZWN0IHdpdGggZmllbGRzIHVuaXQgYW5kXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeCBpcyByZXR1cm5lZC4gRWxzZSwgbnVsbCBpcyByZXR1cm5lZC5cbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBfZmluZFVuaXQoc3RyKSB7XG4gICAgLy8gRmlyc3QsIG1hdGNoIHVuaXRzIG5hbWVzIGV4YWN0bHkuIEZvciBleGFtcGxlLCBhIHVzZXIgY291bGQgZGVmaW5lICdtbScgYXMgMTBeLTQgbSwgd2hpY2ggaXMgc2lsbHksIGJ1dCB0aGVuIHdlIHdvdWxkIHdhbnQgJ21tJyB0byBtYXRjaCB0aGUgdXNlci1kZWZpbmVkIHVuaXQuXG4gICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShVTklUUywgc3RyKSkge1xuICAgICAgdmFyIHVuaXQgPSBVTklUU1tzdHJdO1xuICAgICAgdmFyIHByZWZpeCA9IHVuaXQucHJlZml4ZXNbJyddO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdW5pdDogdW5pdCxcbiAgICAgICAgcHJlZml4OiBwcmVmaXhcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX25hbWUgaW4gVU5JVFMpIHtcbiAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoVU5JVFMsIF9uYW1lKSkge1xuICAgICAgICBpZiAoKDAsIF9zdHJpbmcuZW5kc1dpdGgpKHN0ciwgX25hbWUpKSB7XG4gICAgICAgICAgdmFyIF91bml0ID0gVU5JVFNbX25hbWVdO1xuICAgICAgICAgIHZhciBwcmVmaXhMZW4gPSBzdHIubGVuZ3RoIC0gX25hbWUubGVuZ3RoO1xuICAgICAgICAgIHZhciBwcmVmaXhOYW1lID0gc3RyLnN1YnN0cmluZygwLCBwcmVmaXhMZW4pO1xuXG4gICAgICAgICAgdmFyIF9wcmVmaXggPSAoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoX3VuaXQucHJlZml4ZXMsIHByZWZpeE5hbWUpID8gX3VuaXQucHJlZml4ZXNbcHJlZml4TmFtZV0gOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgICBpZiAoX3ByZWZpeCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBzdG9yZSB1bml0LCBwcmVmaXgsIGFuZCB2YWx1ZVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdW5pdDogX3VuaXQsXG4gICAgICAgICAgICAgIHByZWZpeDogX3ByZWZpeFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvKipcbiAgICogVGVzdCBpZiB0aGUgZ2l2ZW4gZXhwcmVzc2lvbiBpcyBhIHVuaXQuXG4gICAqIFRoZSB1bml0IGNhbiBoYXZlIGEgcHJlZml4IGJ1dCBjYW5ub3QgaGF2ZSBhIHZhbHVlLlxuICAgKiBAbWVtYmVyb2YgVW5pdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAgIEEgc3RyaW5nIHRvIGJlIHRlc3RlZCB3aGV0aGVyIGl0IGlzIGEgdmFsdWUgbGVzcyB1bml0LlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB1bml0IGNhbiBoYXZlIHByZWZpeCwgbGlrZSBcImNtXCJcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gICAgICB0cnVlIGlmIHRoZSBnaXZlbiBzdHJpbmcgaXMgYSB1bml0XG4gICAqL1xuXG5cbiAgVW5pdC5pc1ZhbHVlbGVzc1VuaXQgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiBfZmluZFVuaXQobmFtZSkgIT09IG51bGw7XG4gIH07XG4gIC8qKlxuICAgKiBjaGVjayBpZiB0aGlzIHVuaXQgaGFzIGdpdmVuIGJhc2UgdW5pdFxuICAgKiBJZiB0aGlzIHVuaXQgaXMgYSBkZXJpdmVkIHVuaXQsIHRoaXMgd2lsbCBBTFdBWVMgcmV0dXJuIGZhbHNlLCBzaW5jZSBieSBkZWZpbml0aW9uIGJhc2UgdW5pdHMgYXJlIG5vdCBkZXJpdmVkLlxuICAgKiBAbWVtYmVyb2YgVW5pdFxuICAgKiBAcGFyYW0ge0JBU0VfVU5JVFMgfCBzdHJpbmcgfCB1bmRlZmluZWR9IGJhc2VcbiAgICovXG5cblxuICBVbml0LnByb3RvdHlwZS5oYXNCYXNlID0gZnVuY3Rpb24gKGJhc2UpIHtcbiAgICBpZiAodHlwZW9mIGJhc2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICBiYXNlID0gQkFTRV9VTklUU1tiYXNlXTtcbiAgICB9XG5cbiAgICBpZiAoIWJhc2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IC8vIEFsbCBkaW1lbnNpb25zIG11c3QgYmUgdGhlIHNhbWVcblxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBCQVNFX0RJTUVOU0lPTlMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChNYXRoLmFicygodGhpcy5kaW1lbnNpb25zW2ldIHx8IDApIC0gKGJhc2UuZGltZW5zaW9uc1tpXSB8fCAwKSkgPiAxZS0xMikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGlzIHVuaXQgaGFzIGEgYmFzZSBvciBiYXNlcyBlcXVhbCB0byBhbm90aGVyIGJhc2Ugb3IgYmFzZXNcbiAgICogRm9yIGRlcml2ZWQgdW5pdHMsIHRoZSBleHBvbmVudCBvbiBlYWNoIGJhc2UgYWxzbyBtdXN0IG1hdGNoXG4gICAqIEBtZW1iZXJvZiBVbml0XG4gICAqIEBwYXJhbSB7VW5pdH0gb3RoZXJcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBlcXVhbCBiYXNlXG4gICAqL1xuXG5cbiAgVW5pdC5wcm90b3R5cGUuZXF1YWxCYXNlID0gZnVuY3Rpb24gKG90aGVyKSB7XG4gICAgLy8gQWxsIGRpbWVuc2lvbnMgbXVzdCBiZSB0aGUgc2FtZVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgQkFTRV9ESU1FTlNJT05TLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoTWF0aC5hYnMoKHRoaXMuZGltZW5zaW9uc1tpXSB8fCAwKSAtIChvdGhlci5kaW1lbnNpb25zW2ldIHx8IDApKSA+IDFlLTEyKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoaXMgdW5pdCBlcXVhbHMgYW5vdGhlciB1bml0XG4gICAqIEBtZW1iZXJvZiBVbml0XG4gICAqIEBwYXJhbSB7VW5pdH0gb3RoZXJcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBib3RoIHVuaXRzIGFyZSBlcXVhbFxuICAgKi9cblxuXG4gIFVuaXQucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIChvdGhlcikge1xuICAgIHJldHVybiB0aGlzLmVxdWFsQmFzZShvdGhlcikgJiYgZXF1YWwodGhpcy52YWx1ZSwgb3RoZXIudmFsdWUpO1xuICB9O1xuICAvKipcbiAgICogTXVsdGlwbHkgdGhpcyB1bml0IHdpdGggYW5vdGhlciBvbmVcbiAgICogQG1lbWJlcm9mIFVuaXRcbiAgICogQHBhcmFtIHtVbml0fSBvdGhlclxuICAgKiBAcmV0dXJuIHtVbml0fSBwcm9kdWN0IG9mIHRoaXMgdW5pdCBhbmQgdGhlIG90aGVyIHVuaXRcbiAgICovXG5cblxuICBVbml0LnByb3RvdHlwZS5tdWx0aXBseSA9IGZ1bmN0aW9uIChvdGhlcikge1xuICAgIHZhciByZXMgPSB0aGlzLmNsb25lKCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IEJBU0VfRElNRU5TSU9OUy5sZW5ndGg7IGkrKykge1xuICAgICAgLy8gRGltZW5zaW9ucyBhcnJheXMgbWF5IGJlIG9mIGRpZmZlcmVudCBsZW5ndGhzLiBEZWZhdWx0IHRvIDAuXG4gICAgICByZXMuZGltZW5zaW9uc1tpXSA9ICh0aGlzLmRpbWVuc2lvbnNbaV0gfHwgMCkgKyAob3RoZXIuZGltZW5zaW9uc1tpXSB8fCAwKTtcbiAgICB9IC8vIEFwcGVuZCBvdGhlcidzIHVuaXRzIGxpc3Qgb250byByZXNcblxuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IG90aGVyLnVuaXRzLmxlbmd0aDsgX2krKykge1xuICAgICAgLy8gTWFrZSBhIGRlZXAgY29weVxuICAgICAgdmFyIGludmVydGVkID0ge307XG5cbiAgICAgIGZvciAodmFyIGtleSBpbiBvdGhlci51bml0c1tfaV0pIHtcbiAgICAgICAgaW52ZXJ0ZWRba2V5XSA9IG90aGVyLnVuaXRzW19pXVtrZXldO1xuICAgICAgfVxuXG4gICAgICByZXMudW5pdHMucHVzaChpbnZlcnRlZCk7XG4gICAgfSAvLyBJZiBhdCBsZWFzdCBvbmUgb3BlcmFuZCBoYXMgYSB2YWx1ZSwgdGhlbiB0aGUgcmVzdWx0IHNob3VsZCBhbHNvIGhhdmUgYSB2YWx1ZVxuXG5cbiAgICBpZiAodGhpcy52YWx1ZSAhPT0gbnVsbCB8fCBvdGhlci52YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgdmFyIHZhbFRoaXMgPSB0aGlzLnZhbHVlID09PSBudWxsID8gdGhpcy5fbm9ybWFsaXplKDEpIDogdGhpcy52YWx1ZTtcbiAgICAgIHZhciB2YWxPdGhlciA9IG90aGVyLnZhbHVlID09PSBudWxsID8gb3RoZXIuX25vcm1hbGl6ZSgxKSA6IG90aGVyLnZhbHVlO1xuICAgICAgcmVzLnZhbHVlID0gbXVsdGlwbHlTY2FsYXIodmFsVGhpcywgdmFsT3RoZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMudmFsdWUgPSBudWxsO1xuICAgIH1cblxuICAgIHJlcy5za2lwQXV0b21hdGljU2ltcGxpZmljYXRpb24gPSBmYWxzZTtcbiAgICByZXR1cm4gZ2V0TnVtZXJpY0lmVW5pdGxlc3MocmVzKTtcbiAgfTtcbiAgLyoqXG4gICAqIERpdmlkZSB0aGlzIHVuaXQgYnkgYW5vdGhlciBvbmVcbiAgICogQG1lbWJlcm9mIFVuaXRcbiAgICogQHBhcmFtIHtVbml0fSBvdGhlclxuICAgKiBAcmV0dXJuIHtVbml0fSByZXN1bHQgb2YgZGl2aWRpbmcgdGhpcyB1bml0IGJ5IHRoZSBvdGhlciB1bml0XG4gICAqL1xuXG5cbiAgVW5pdC5wcm90b3R5cGUuZGl2aWRlID0gZnVuY3Rpb24gKG90aGVyKSB7XG4gICAgdmFyIHJlcyA9IHRoaXMuY2xvbmUoKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgQkFTRV9ESU1FTlNJT05TLmxlbmd0aDsgaSsrKSB7XG4gICAgICAvLyBEaW1lbnNpb25zIGFycmF5cyBtYXkgYmUgb2YgZGlmZmVyZW50IGxlbmd0aHMuIERlZmF1bHQgdG8gMC5cbiAgICAgIHJlcy5kaW1lbnNpb25zW2ldID0gKHRoaXMuZGltZW5zaW9uc1tpXSB8fCAwKSAtIChvdGhlci5kaW1lbnNpb25zW2ldIHx8IDApO1xuICAgIH0gLy8gSW52ZXJ0IGFuZCBhcHBlbmQgb3RoZXIncyB1bml0cyBsaXN0IG9udG8gcmVzXG5cblxuICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IG90aGVyLnVuaXRzLmxlbmd0aDsgX2kyKyspIHtcbiAgICAgIC8vIE1ha2UgYSBkZWVwIGNvcHlcbiAgICAgIHZhciBpbnZlcnRlZCA9IHt9O1xuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gb3RoZXIudW5pdHNbX2kyXSkge1xuICAgICAgICBpbnZlcnRlZFtrZXldID0gb3RoZXIudW5pdHNbX2kyXVtrZXldO1xuICAgICAgfVxuXG4gICAgICBpbnZlcnRlZC5wb3dlciA9IC1pbnZlcnRlZC5wb3dlcjtcbiAgICAgIHJlcy51bml0cy5wdXNoKGludmVydGVkKTtcbiAgICB9IC8vIElmIGF0IGxlYXN0IG9uZSBvcGVyYW5kIGhhcyBhIHZhbHVlLCB0aGUgcmVzdWx0IHNob3VsZCBoYXZlIGEgdmFsdWVcblxuXG4gICAgaWYgKHRoaXMudmFsdWUgIT09IG51bGwgfHwgb3RoZXIudmFsdWUgIT09IG51bGwpIHtcbiAgICAgIHZhciB2YWxUaGlzID0gdGhpcy52YWx1ZSA9PT0gbnVsbCA/IHRoaXMuX25vcm1hbGl6ZSgxKSA6IHRoaXMudmFsdWU7XG4gICAgICB2YXIgdmFsT3RoZXIgPSBvdGhlci52YWx1ZSA9PT0gbnVsbCA/IG90aGVyLl9ub3JtYWxpemUoMSkgOiBvdGhlci52YWx1ZTtcbiAgICAgIHJlcy52YWx1ZSA9IGRpdmlkZVNjYWxhcih2YWxUaGlzLCB2YWxPdGhlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcy52YWx1ZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmVzLnNraXBBdXRvbWF0aWNTaW1wbGlmaWNhdGlvbiA9IGZhbHNlO1xuICAgIHJldHVybiBnZXROdW1lcmljSWZVbml0bGVzcyhyZXMpO1xuICB9O1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBwb3dlciBvZiBhIHVuaXRcbiAgICogQG1lbWJlcm9mIFVuaXRcbiAgICogQHBhcmFtIHtudW1iZXIgfCBGcmFjdGlvbiB8IEJpZ051bWJlcn0gcFxuICAgKiBAcmV0dXJucyB7VW5pdH0gICAgICBUaGUgcmVzdWx0OiB0aGlzXnBcbiAgICovXG5cblxuICBVbml0LnByb3RvdHlwZS5wb3cgPSBmdW5jdGlvbiAocCkge1xuICAgIHZhciByZXMgPSB0aGlzLmNsb25lKCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IEJBU0VfRElNRU5TSU9OUy5sZW5ndGg7IGkrKykge1xuICAgICAgLy8gRGltZW5zaW9ucyBhcnJheXMgbWF5IGJlIG9mIGRpZmZlcmVudCBsZW5ndGhzLiBEZWZhdWx0IHRvIDAuXG4gICAgICByZXMuZGltZW5zaW9uc1tpXSA9ICh0aGlzLmRpbWVuc2lvbnNbaV0gfHwgMCkgKiBwO1xuICAgIH0gLy8gQWRqdXN0IHRoZSBwb3dlciBvZiBlYWNoIHVuaXQgaW4gdGhlIGxpc3RcblxuXG4gICAgZm9yICh2YXIgX2kzID0gMDsgX2kzIDwgcmVzLnVuaXRzLmxlbmd0aDsgX2kzKyspIHtcbiAgICAgIHJlcy51bml0c1tfaTNdLnBvd2VyICo9IHA7XG4gICAgfVxuXG4gICAgaWYgKHJlcy52YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgcmVzLnZhbHVlID0gcG93KHJlcy52YWx1ZSwgcCk7IC8vIG9ubHkgYWxsb3cgbnVtZXJpYyBvdXRwdXQsIHdlIGRvbid0IHdhbnQgdG8gcmV0dXJuIGEgQ29tcGxleCBudW1iZXJcbiAgICAgIC8vIGlmICghaXNOdW1lcmljKHJlcy52YWx1ZSkpIHtcbiAgICAgIC8vICByZXMudmFsdWUgPSBOYU5cbiAgICAgIC8vIH1cbiAgICAgIC8vIFVwZGF0ZTogQ29tcGxleCBzdXBwb3J0ZWQgbm93XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcy52YWx1ZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmVzLnNraXBBdXRvbWF0aWNTaW1wbGlmaWNhdGlvbiA9IGZhbHNlO1xuICAgIHJldHVybiBnZXROdW1lcmljSWZVbml0bGVzcyhyZXMpO1xuICB9O1xuICAvKipcbiAgICogUmV0dXJuIHRoZSBudW1lcmljIHZhbHVlIG9mIHRoaXMgdW5pdCBpZiBpdCBpcyBkaW1lbnNpb25sZXNzLCBoYXMgYSB2YWx1ZSwgYW5kIGNvbmZpZy5wcmVkaWN0YWJsZSA9PSBmYWxzZTsgb3IgdGhlIG9yaWdpbmFsIHVuaXQgb3RoZXJ3aXNlXG4gICAqIEBwYXJhbSB7VW5pdH0gdW5pdFxuICAgKiBAcmV0dXJucyB7bnVtYmVyIHwgRnJhY3Rpb24gfCBCaWdOdW1iZXIgfCBVbml0fSAgVGhlIG51bWVyaWMgdmFsdWUgb2YgdGhlIHVuaXQgaWYgY29uZGl0aW9ucyBhcmUgbWV0LCBvciB0aGUgb3JpZ2luYWwgdW5pdCBvdGhlcndpc2VcbiAgICovXG5cblxuICBmdW5jdGlvbiBnZXROdW1lcmljSWZVbml0bGVzcyh1bml0KSB7XG4gICAgaWYgKHVuaXQuZXF1YWxCYXNlKEJBU0VfVU5JVFMuTk9ORSkgJiYgdW5pdC52YWx1ZSAhPT0gbnVsbCAmJiAhY29uZmlnLnByZWRpY3RhYmxlKSB7XG4gICAgICByZXR1cm4gdW5pdC52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuaXQ7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGFic29sdXRlIHZhbHVlIG9mIGEgdW5pdFxuICAgKiBAbWVtYmVyb2YgVW5pdFxuICAgKiBAcGFyYW0ge251bWJlciB8IEZyYWN0aW9uIHwgQmlnTnVtYmVyfSB4XG4gICAqIEByZXR1cm5zIHtVbml0fSAgICAgIFRoZSByZXN1bHQ6IHx4fCwgYWJzb2x1dGUgdmFsdWUgb2YgeFxuICAgKi9cblxuXG4gIFVuaXQucHJvdG90eXBlLmFicyA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBUaGlzIGdpdmVzIGNvcnJlY3QsIGJ1dCB1bmV4cGVjdGVkLCByZXN1bHRzIGZvciB1bml0cyB3aXRoIGFuIG9mZnNldC5cbiAgICAvLyBGb3IgZXhhbXBsZSwgYWJzKC0yODMuMTUgZGVnQykgPSAtMjYzLjE1IGRlZ0MgISEhXG4gICAgdmFyIHJldCA9IHRoaXMuY2xvbmUoKTtcbiAgICByZXQudmFsdWUgPSByZXQudmFsdWUgIT09IG51bGwgPyBhYnMocmV0LnZhbHVlKSA6IG51bGw7XG5cbiAgICBmb3IgKHZhciBpIGluIHJldC51bml0cykge1xuICAgICAgaWYgKHJldC51bml0c1tpXS51bml0Lm5hbWUgPT09ICdWQScgfHwgcmV0LnVuaXRzW2ldLnVuaXQubmFtZSA9PT0gJ1ZBUicpIHtcbiAgICAgICAgcmV0LnVuaXRzW2ldLnVuaXQgPSBVTklUUy5XO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH07XG4gIC8qKlxuICAgKiBDb252ZXJ0IHRoZSB1bml0IHRvIGEgc3BlY2lmaWMgdW5pdCBuYW1lLlxuICAgKiBAbWVtYmVyb2YgVW5pdFxuICAgKiBAcGFyYW0ge3N0cmluZyB8IFVuaXR9IHZhbHVlbGVzc1VuaXQgICBBIHVuaXQgd2l0aG91dCB2YWx1ZS4gQ2FuIGhhdmUgcHJlZml4LCBsaWtlIFwiY21cIlxuICAgKiBAcmV0dXJucyB7VW5pdH0gUmV0dXJucyBhIGNsb25lIG9mIHRoZSB1bml0IHdpdGggYSBmaXhlZCBwcmVmaXggYW5kIHVuaXQuXG4gICAqL1xuXG5cbiAgVW5pdC5wcm90b3R5cGUudG8gPSBmdW5jdGlvbiAodmFsdWVsZXNzVW5pdCkge1xuICAgIHZhciBvdGhlcjtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlID09PSBudWxsID8gdGhpcy5fbm9ybWFsaXplKDEpIDogdGhpcy52YWx1ZTtcblxuICAgIGlmICh0eXBlb2YgdmFsdWVsZXNzVW5pdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIG90aGVyID0gbmV3IFVuaXQobnVsbCwgdmFsdWVsZXNzVW5pdClcbiAgICAgIG90aGVyID0gVW5pdC5wYXJzZSh2YWx1ZWxlc3NVbml0KTtcblxuICAgICAgaWYgKCF0aGlzLmVxdWFsQmFzZShvdGhlcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5pdHMgZG8gbm90IG1hdGNoICgnXCIuY29uY2F0KG90aGVyLnRvU3RyaW5nKCksIFwiJyAhPSAnXCIpLmNvbmNhdCh0aGlzLnRvU3RyaW5nKCksIFwiJylcIikpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3RoZXIudmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY29udmVydCB0byBhIHVuaXQgd2l0aCBhIHZhbHVlJyk7XG4gICAgICB9XG5cbiAgICAgIG90aGVyLnZhbHVlID0gKDAsIF9vYmplY3QuY2xvbmUpKHZhbHVlKTtcbiAgICAgIG90aGVyLmZpeFByZWZpeCA9IHRydWU7XG4gICAgICBvdGhlci5za2lwQXV0b21hdGljU2ltcGxpZmljYXRpb24gPSB0cnVlO1xuICAgICAgcmV0dXJuIG90aGVyO1xuICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc1VuaXQpKHZhbHVlbGVzc1VuaXQpKSB7XG4gICAgICBpZiAoIXRoaXMuZXF1YWxCYXNlKHZhbHVlbGVzc1VuaXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuaXRzIGRvIG5vdCBtYXRjaCAoJ1wiLmNvbmNhdCh2YWx1ZWxlc3NVbml0LnRvU3RyaW5nKCksIFwiJyAhPSAnXCIpLmNvbmNhdCh0aGlzLnRvU3RyaW5nKCksIFwiJylcIikpO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWVsZXNzVW5pdC52YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IHRvIGEgdW5pdCB3aXRoIGEgdmFsdWUnKTtcbiAgICAgIH1cblxuICAgICAgb3RoZXIgPSB2YWx1ZWxlc3NVbml0LmNsb25lKCk7XG4gICAgICBvdGhlci52YWx1ZSA9ICgwLCBfb2JqZWN0LmNsb25lKSh2YWx1ZSk7XG4gICAgICBvdGhlci5maXhQcmVmaXggPSB0cnVlO1xuICAgICAgb3RoZXIuc2tpcEF1dG9tYXRpY1NpbXBsaWZpY2F0aW9uID0gdHJ1ZTtcbiAgICAgIHJldHVybiBvdGhlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdHJpbmcgb3IgVW5pdCBleHBlY3RlZCBhcyBwYXJhbWV0ZXInKTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSB1bml0IHdoZW4gcmVwcmVzZW50ZWQgd2l0aCBnaXZlbiB2YWx1ZWxlc3MgdW5pdFxuICAgKiBAbWVtYmVyb2YgVW5pdFxuICAgKiBAcGFyYW0ge3N0cmluZyB8IFVuaXR9IHZhbHVlbGVzc1VuaXQgICAgRm9yIGV4YW1wbGUgJ2NtJyBvciAnaW5jaCdcbiAgICogQHJldHVybiB7bnVtYmVyfSBSZXR1cm5zIHRoZSB1bml0IHZhbHVlIGFzIG51bWJlci5cbiAgICovXG4gIC8vIFRPRE86IGRlcHJlY2F0ZSBVbml0LnRvTnVtYmVyPyBJdCdzIGFsd2F5cyBiZXR0ZXIgdG8gdXNlIHRvTnVtZXJpY1xuXG5cbiAgVW5pdC5wcm90b3R5cGUudG9OdW1iZXIgPSBmdW5jdGlvbiAodmFsdWVsZXNzVW5pdCkge1xuICAgIHJldHVybiB0b051bWJlcih0aGlzLnRvTnVtZXJpYyh2YWx1ZWxlc3NVbml0KSk7XG4gIH07XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSB1bml0IGluIHRoZSBvcmlnaW5hbCBudW1lcmljIHR5cGVcbiAgICogQG1lbWJlcm9mIFVuaXRcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBVbml0fSB2YWx1ZWxlc3NVbml0ICAgIEZvciBleGFtcGxlICdjbScgb3IgJ2luY2gnXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9ufSBSZXR1cm5zIHRoZSB1bml0IHZhbHVlXG4gICAqL1xuXG5cbiAgVW5pdC5wcm90b3R5cGUudG9OdW1lcmljID0gZnVuY3Rpb24gKHZhbHVlbGVzc1VuaXQpIHtcbiAgICB2YXIgb3RoZXI7XG5cbiAgICBpZiAodmFsdWVsZXNzVW5pdCkge1xuICAgICAgLy8gQWxsb3cgZ2V0dGluZyB0aGUgbnVtZXJpYyB2YWx1ZSB3aXRob3V0IGNvbnZlcnRpbmcgdG8gYSBkaWZmZXJlbnQgdW5pdFxuICAgICAgb3RoZXIgPSB0aGlzLnRvKHZhbHVlbGVzc1VuaXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdGhlciA9IHRoaXMuY2xvbmUoKTtcbiAgICB9XG5cbiAgICBpZiAob3RoZXIuX2lzRGVyaXZlZCgpIHx8IG90aGVyLnVuaXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG90aGVyLl9kZW5vcm1hbGl6ZShvdGhlci52YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvdGhlci5fZGVub3JtYWxpemUob3RoZXIudmFsdWUsIG90aGVyLnVuaXRzWzBdLnByZWZpeC52YWx1ZSk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogR2V0IGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB1bml0LlxuICAgKiBAbWVtYmVyb2YgVW5pdFxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG5cbiAgVW5pdC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybWF0KCk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB1bml0XG4gICAqIEBtZW1iZXJvZiBVbml0XG4gICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYSBKU09OIG9iamVjdCBzdHJ1Y3R1cmVkIGFzOlxuICAgKiAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiVW5pdFwiLCBcInZhbHVlXCI6IDIsIFwidW5pdFwiOiBcImNtXCIsIFwiZml4UHJlZml4XCI6IGZhbHNlfWBcbiAgICovXG5cblxuICBVbml0LnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hdGhqczogJ1VuaXQnLFxuICAgICAgdmFsdWU6IHRoaXMuX2Rlbm9ybWFsaXplKHRoaXMudmFsdWUpLFxuICAgICAgdW5pdDogdGhpcy5mb3JtYXRVbml0cygpLFxuICAgICAgZml4UHJlZml4OiB0aGlzLmZpeFByZWZpeFxuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhIFVuaXQgZnJvbSBhIEpTT04gb2JqZWN0XG4gICAqIEBtZW1iZXJvZiBVbml0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBqc29uICBBIEpTT04gb2JqZWN0IHN0cnVjdHVyZWQgYXM6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiVW5pdFwiLCBcInZhbHVlXCI6IDIsIFwidW5pdFwiOiBcImNtXCIsIFwiZml4UHJlZml4XCI6IGZhbHNlfWBcbiAgICogQHJldHVybiB7VW5pdH1cbiAgICovXG5cblxuICBVbml0LmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICB2YXIgdW5pdCA9IG5ldyBVbml0KGpzb24udmFsdWUsIGpzb24udW5pdCk7XG4gICAgdW5pdC5maXhQcmVmaXggPSBqc29uLmZpeFByZWZpeCB8fCBmYWxzZTtcbiAgICByZXR1cm4gdW5pdDtcbiAgfTtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdW5pdC5cbiAgICogQG1lbWJlcm9mIFVuaXRcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuXG4gIFVuaXQucHJvdG90eXBlLnZhbHVlT2YgPSBVbml0LnByb3RvdHlwZS50b1N0cmluZztcbiAgLyoqXG4gICAqIFNpbXBsaWZ5IHRoaXMgVW5pdCdzIHVuaXQgbGlzdCBhbmQgcmV0dXJuIGEgbmV3IFVuaXQgd2l0aCB0aGUgc2ltcGxpZmllZCBsaXN0LlxuICAgKiBUaGUgcmV0dXJuZWQgVW5pdCB3aWxsIGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBcImJlc3RcIiB1bml0cyBmb3IgZm9ybWF0dGluZy5cbiAgICovXG5cbiAgVW5pdC5wcm90b3R5cGUuc2ltcGxpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJldCA9IHRoaXMuY2xvbmUoKTtcbiAgICB2YXIgcHJvcG9zZWRVbml0TGlzdCA9IFtdOyAvLyBTZWFyY2ggZm9yIGEgbWF0Y2hpbmcgYmFzZVxuXG4gICAgdmFyIG1hdGNoaW5nQmFzZTtcblxuICAgIGZvciAodmFyIGtleSBpbiBjdXJyZW50VW5pdFN5c3RlbSkge1xuICAgICAgaWYgKHJldC5oYXNCYXNlKEJBU0VfVU5JVFNba2V5XSkpIHtcbiAgICAgICAgbWF0Y2hpbmdCYXNlID0ga2V5O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWF0Y2hpbmdCYXNlID09PSAnTk9ORScpIHtcbiAgICAgIHJldC51bml0cyA9IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbWF0Y2hpbmdVbml0O1xuXG4gICAgICBpZiAobWF0Y2hpbmdCYXNlKSB7XG4gICAgICAgIC8vIERvZXMgdGhlIHVuaXQgc3lzdGVtIGhhdmUgYSBtYXRjaGluZyB1bml0P1xuICAgICAgICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKGN1cnJlbnRVbml0U3lzdGVtLCBtYXRjaGluZ0Jhc2UpKSB7XG4gICAgICAgICAgbWF0Y2hpbmdVbml0ID0gY3VycmVudFVuaXRTeXN0ZW1bbWF0Y2hpbmdCYXNlXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobWF0Y2hpbmdVbml0KSB7XG4gICAgICAgIHJldC51bml0cyA9IFt7XG4gICAgICAgICAgdW5pdDogbWF0Y2hpbmdVbml0LnVuaXQsXG4gICAgICAgICAgcHJlZml4OiBtYXRjaGluZ1VuaXQucHJlZml4LFxuICAgICAgICAgIHBvd2VyOiAxLjBcbiAgICAgICAgfV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBNdWx0aXBsZSB1bml0cyBvciB1bml0cyB3aXRoIHBvd2VycyBhcmUgZm9ybWF0dGVkIGxpa2UgdGhpczpcbiAgICAgICAgLy8gNSAoa2cgbV4yKSAvIChzXjMgbW9sKVxuICAgICAgICAvLyBCdWlsZCBhbiByZXByZXNlbnRhdGlvbiBmcm9tIHRoZSBiYXNlIHVuaXRzIG9mIHRoZSBjdXJyZW50IHVuaXQgc3lzdGVtXG4gICAgICAgIHZhciBtaXNzaW5nQmFzZURpbSA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgQkFTRV9ESU1FTlNJT05TLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGJhc2VEaW0gPSBCQVNFX0RJTUVOU0lPTlNbaV07XG5cbiAgICAgICAgICBpZiAoTWF0aC5hYnMocmV0LmRpbWVuc2lvbnNbaV0gfHwgMCkgPiAxZS0xMikge1xuICAgICAgICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShjdXJyZW50VW5pdFN5c3RlbSwgYmFzZURpbSkpIHtcbiAgICAgICAgICAgICAgcHJvcG9zZWRVbml0TGlzdC5wdXNoKHtcbiAgICAgICAgICAgICAgICB1bml0OiBjdXJyZW50VW5pdFN5c3RlbVtiYXNlRGltXS51bml0LFxuICAgICAgICAgICAgICAgIHByZWZpeDogY3VycmVudFVuaXRTeXN0ZW1bYmFzZURpbV0ucHJlZml4LFxuICAgICAgICAgICAgICAgIHBvd2VyOiByZXQuZGltZW5zaW9uc1tpXSB8fCAwXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbWlzc2luZ0Jhc2VEaW0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBJcyB0aGUgcHJvcG9zZWQgdW5pdCBsaXN0IFwic2ltcGxlclwiIHRoYW4gdGhlIGV4aXN0aW5nIG9uZT9cblxuXG4gICAgICAgIGlmIChwcm9wb3NlZFVuaXRMaXN0Lmxlbmd0aCA8IHJldC51bml0cy5sZW5ndGggJiYgIW1pc3NpbmdCYXNlRGltKSB7XG4gICAgICAgICAgLy8gUmVwbGFjZSB0aGlzIHVuaXQgbGlzdCB3aXRoIHRoZSBwcm9wb3NlZCBsaXN0XG4gICAgICAgICAgcmV0LnVuaXRzID0gcHJvcG9zZWRVbml0TGlzdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH07XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgbmV3IFVuaXQgaW4gdGhlIFNJIHN5c3RlbSB3aXRoIHRoZSBzYW1lIHZhbHVlIGFzIHRoaXMgb25lXG4gICAqL1xuXG5cbiAgVW5pdC5wcm90b3R5cGUudG9TSSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmV0ID0gdGhpcy5jbG9uZSgpO1xuICAgIHZhciBwcm9wb3NlZFVuaXRMaXN0ID0gW107IC8vIE11bHRpcGxlIHVuaXRzIG9yIHVuaXRzIHdpdGggcG93ZXJzIGFyZSBmb3JtYXR0ZWQgbGlrZSB0aGlzOlxuICAgIC8vIDUgKGtnIG1eMikgLyAoc14zIG1vbClcbiAgICAvLyBCdWlsZCBhbiByZXByZXNlbnRhdGlvbiBmcm9tIHRoZSBiYXNlIHVuaXRzIG9mIHRoZSBTSSB1bml0IHN5c3RlbVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBCQVNFX0RJTUVOU0lPTlMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBiYXNlRGltID0gQkFTRV9ESU1FTlNJT05TW2ldO1xuXG4gICAgICBpZiAoTWF0aC5hYnMocmV0LmRpbWVuc2lvbnNbaV0gfHwgMCkgPiAxZS0xMikge1xuICAgICAgICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKFVOSVRfU1lTVEVNUy5zaSwgYmFzZURpbSkpIHtcbiAgICAgICAgICBwcm9wb3NlZFVuaXRMaXN0LnB1c2goe1xuICAgICAgICAgICAgdW5pdDogVU5JVF9TWVNURU1TLnNpW2Jhc2VEaW1dLnVuaXQsXG4gICAgICAgICAgICBwcmVmaXg6IFVOSVRfU1lTVEVNUy5zaVtiYXNlRGltXS5wcmVmaXgsXG4gICAgICAgICAgICBwb3dlcjogcmV0LmRpbWVuc2lvbnNbaV0gfHwgMFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGV4cHJlc3MgY3VzdG9tIHVuaXQgJyArIGJhc2VEaW0gKyAnIGluIFNJIHVuaXRzJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIFJlcGxhY2UgdGhpcyB1bml0IGxpc3Qgd2l0aCB0aGUgcHJvcG9zZWQgbGlzdFxuXG5cbiAgICByZXQudW5pdHMgPSBwcm9wb3NlZFVuaXRMaXN0O1xuICAgIHJldC5maXhQcmVmaXggPSB0cnVlO1xuICAgIHJldC5za2lwQXV0b21hdGljU2ltcGxpZmljYXRpb24gPSB0cnVlO1xuICAgIHJldHVybiByZXQ7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHVuaXRzIG9mIHRoaXMgVW5pdCwgd2l0aG91dCB0aGUgdmFsdWUuIFRoZSB1bml0IGxpc3QgaXMgZm9ybWF0dGVkIGFzLWlzIHdpdGhvdXQgZmlyc3QgYmVpbmcgc2ltcGxpZmllZC5cbiAgICogQG1lbWJlcm9mIFVuaXRcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuXG4gIFVuaXQucHJvdG90eXBlLmZvcm1hdFVuaXRzID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzdHJOdW0gPSAnJztcbiAgICB2YXIgc3RyRGVuID0gJyc7XG4gICAgdmFyIG5OdW0gPSAwO1xuICAgIHZhciBuRGVuID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy51bml0cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMudW5pdHNbaV0ucG93ZXIgPiAwKSB7XG4gICAgICAgIG5OdW0rKztcbiAgICAgICAgc3RyTnVtICs9ICcgJyArIHRoaXMudW5pdHNbaV0ucHJlZml4Lm5hbWUgKyB0aGlzLnVuaXRzW2ldLnVuaXQubmFtZTtcblxuICAgICAgICBpZiAoTWF0aC5hYnModGhpcy51bml0c1tpXS5wb3dlciAtIDEuMCkgPiAxZS0xNSkge1xuICAgICAgICAgIHN0ck51bSArPSAnXicgKyB0aGlzLnVuaXRzW2ldLnBvd2VyO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudW5pdHNbaV0ucG93ZXIgPCAwKSB7XG4gICAgICAgIG5EZW4rKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobkRlbiA+IDApIHtcbiAgICAgIGZvciAodmFyIF9pNCA9IDA7IF9pNCA8IHRoaXMudW5pdHMubGVuZ3RoOyBfaTQrKykge1xuICAgICAgICBpZiAodGhpcy51bml0c1tfaTRdLnBvd2VyIDwgMCkge1xuICAgICAgICAgIGlmIChuTnVtID4gMCkge1xuICAgICAgICAgICAgc3RyRGVuICs9ICcgJyArIHRoaXMudW5pdHNbX2k0XS5wcmVmaXgubmFtZSArIHRoaXMudW5pdHNbX2k0XS51bml0Lm5hbWU7XG5cbiAgICAgICAgICAgIGlmIChNYXRoLmFicyh0aGlzLnVuaXRzW19pNF0ucG93ZXIgKyAxLjApID4gMWUtMTUpIHtcbiAgICAgICAgICAgICAgc3RyRGVuICs9ICdeJyArIC10aGlzLnVuaXRzW19pNF0ucG93ZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0ckRlbiArPSAnICcgKyB0aGlzLnVuaXRzW19pNF0ucHJlZml4Lm5hbWUgKyB0aGlzLnVuaXRzW19pNF0udW5pdC5uYW1lO1xuICAgICAgICAgICAgc3RyRGVuICs9ICdeJyArIHRoaXMudW5pdHNbX2k0XS5wb3dlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIFJlbW92ZSBsZWFkaW5nIFwiIFwiXG5cblxuICAgIHN0ck51bSA9IHN0ck51bS5zdWJzdHIoMSk7XG4gICAgc3RyRGVuID0gc3RyRGVuLnN1YnN0cigxKTsgLy8gQWRkIHBhcmFucyBmb3IgYmV0dGVyIGNvcHkvcGFzdGUgYmFjayBpbnRvIGV2YWx1YXRlLCBmb3IgZXhhbXBsZSwgb3IgZm9yIGJldHRlciBwcmV0dHkgcHJpbnQgZm9ybWF0dGluZ1xuXG4gICAgaWYgKG5OdW0gPiAxICYmIG5EZW4gPiAwKSB7XG4gICAgICBzdHJOdW0gPSAnKCcgKyBzdHJOdW0gKyAnKSc7XG4gICAgfVxuXG4gICAgaWYgKG5EZW4gPiAxICYmIG5OdW0gPiAwKSB7XG4gICAgICBzdHJEZW4gPSAnKCcgKyBzdHJEZW4gKyAnKSc7XG4gICAgfVxuXG4gICAgdmFyIHN0ciA9IHN0ck51bTtcblxuICAgIGlmIChuTnVtID4gMCAmJiBuRGVuID4gMCkge1xuICAgICAgc3RyICs9ICcgLyAnO1xuICAgIH1cblxuICAgIHN0ciArPSBzdHJEZW47XG4gICAgcmV0dXJuIHN0cjtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgVW5pdCwgd2l0aCBvcHRpb25hbCBmb3JtYXR0aW5nIG9wdGlvbnMuXG4gICAqIEBtZW1iZXJvZiBVbml0XG4gICAqIEBwYXJhbSB7T2JqZWN0IHwgbnVtYmVyIHwgRnVuY3Rpb259IFtvcHRpb25zXSAgRm9ybWF0dGluZyBvcHRpb25zLiBTZWVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWIvdXRpbHMvbnVtYmVyOmZvcm1hdCBmb3IgYVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uIG9mIHRoZSBhdmFpbGFibGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG5cbiAgVW5pdC5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAvLyBTaW1wbGZ5IHRoZSB1bml0IGxpc3QsIHVubGVzcyBpdCBpcyB2YWx1ZWxlc3Mgb3Igd2FzIGNyZWF0ZWQgZGlyZWN0bHkgaW4gdGhlXG4gICAgLy8gY29uc3RydWN0b3Igb3IgYXMgdGhlIHJlc3VsdCBvZiB0byBvciB0b1NJXG4gICAgdmFyIHNpbXAgPSB0aGlzLnNraXBBdXRvbWF0aWNTaW1wbGlmaWNhdGlvbiB8fCB0aGlzLnZhbHVlID09PSBudWxsID8gdGhpcy5jbG9uZSgpIDogdGhpcy5zaW1wbGlmeSgpOyAvLyBBcHBseSBzb21lIGN1c3RvbSBsb2dpYyBmb3IgaGFuZGxpbmcgVkEgYW5kIFZBUi4gVGhlIGdvYWwgaXMgdG8gZXhwcmVzcyB0aGUgdmFsdWUgb2YgdGhlIHVuaXQgYXMgYSByZWFsIHZhbHVlLCBpZiBwb3NzaWJsZS4gT3RoZXJ3aXNlLCB1c2UgYSByZWFsLXZhbHVlZCB1bml0IGluc3RlYWQgb2YgYSBjb21wbGV4LXZhbHVlZCBvbmUuXG5cbiAgICB2YXIgaXNJbWFnaW5hcnkgPSBmYWxzZTtcblxuICAgIGlmICh0eXBlb2Ygc2ltcC52YWx1ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgc2ltcC52YWx1ZSAhPT0gbnVsbCAmJiAoMCwgX2lzLmlzQ29tcGxleCkoc2ltcC52YWx1ZSkpIHtcbiAgICAgIC8vIFRPRE86IE1ha2UgdGhpcyBiZXR0ZXIsIGZvciBleGFtcGxlLCB1c2UgcmVsYXRpdmUgbWFnbml0dWRlIG9mIHJlIGFuZCBpbSByYXRoZXIgdGhhbiBhYnNvbHV0ZVxuICAgICAgaXNJbWFnaW5hcnkgPSBNYXRoLmFicyhzaW1wLnZhbHVlLnJlKSA8IDFlLTE0O1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgaW4gc2ltcC51bml0cykge1xuICAgICAgaWYgKHNpbXAudW5pdHNbaV0udW5pdCkge1xuICAgICAgICBpZiAoc2ltcC51bml0c1tpXS51bml0Lm5hbWUgPT09ICdWQScgJiYgaXNJbWFnaW5hcnkpIHtcbiAgICAgICAgICBzaW1wLnVuaXRzW2ldLnVuaXQgPSBVTklUUy5WQVI7XG4gICAgICAgIH0gZWxzZSBpZiAoc2ltcC51bml0c1tpXS51bml0Lm5hbWUgPT09ICdWQVInICYmICFpc0ltYWdpbmFyeSkge1xuICAgICAgICAgIHNpbXAudW5pdHNbaV0udW5pdCA9IFVOSVRTLlZBO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBOb3cgYXBwbHkgdGhlIGJlc3QgcHJlZml4XG4gICAgLy8gVW5pdHMgbXVzdCBoYXZlIG9ubHkgb25lIHVuaXQgYW5kIG5vdCBoYXZlIHRoZSBmaXhQcmVmaXggZmxhZyBzZXRcblxuXG4gICAgaWYgKHNpbXAudW5pdHMubGVuZ3RoID09PSAxICYmICFzaW1wLmZpeFByZWZpeCkge1xuICAgICAgLy8gVW5pdHMgbXVzdCBoYXZlIGludGVnZXIgcG93ZXJzLCBvdGhlcndpc2UgdGhlIHByZWZpeCB3aWxsIGNoYW5nZSB0aGVcbiAgICAgIC8vIG91dHB1dHRlZCB2YWx1ZSBieSBub3QtYW4taW50ZWdlci1wb3dlci1vZi10ZW5cbiAgICAgIGlmIChNYXRoLmFicyhzaW1wLnVuaXRzWzBdLnBvd2VyIC0gTWF0aC5yb3VuZChzaW1wLnVuaXRzWzBdLnBvd2VyKSkgPCAxZS0xNCkge1xuICAgICAgICAvLyBBcHBseSB0aGUgYmVzdCBwcmVmaXhcbiAgICAgICAgc2ltcC51bml0c1swXS5wcmVmaXggPSBzaW1wLl9iZXN0UHJlZml4KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHZhbHVlID0gc2ltcC5fZGVub3JtYWxpemUoc2ltcC52YWx1ZSk7XG5cbiAgICB2YXIgc3RyID0gc2ltcC52YWx1ZSAhPT0gbnVsbCA/IGZvcm1hdCh2YWx1ZSwgb3B0aW9ucyB8fCB7fSkgOiAnJztcbiAgICB2YXIgdW5pdFN0ciA9IHNpbXAuZm9ybWF0VW5pdHMoKTtcblxuICAgIGlmIChzaW1wLnZhbHVlICYmICgwLCBfaXMuaXNDb21wbGV4KShzaW1wLnZhbHVlKSkge1xuICAgICAgc3RyID0gJygnICsgc3RyICsgJyknOyAvLyBTdXJyb3VuZCBjb21wbGV4IHZhbHVlcyB3aXRoICggKSB0byBlbmFibGUgYmV0dGVyIHBhcnNpbmdcbiAgICB9XG5cbiAgICBpZiAodW5pdFN0ci5sZW5ndGggPiAwICYmIHN0ci5sZW5ndGggPiAwKSB7XG4gICAgICBzdHIgKz0gJyAnO1xuICAgIH1cblxuICAgIHN0ciArPSB1bml0U3RyO1xuICAgIHJldHVybiBzdHI7XG4gIH07XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGJlc3QgcHJlZml4IHVzaW5nIGN1cnJlbnQgdmFsdWUuXG4gICAqIEBtZW1iZXJvZiBVbml0XG4gICAqIEByZXR1cm5zIHtPYmplY3R9IHByZWZpeFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIFVuaXQucHJvdG90eXBlLl9iZXN0UHJlZml4ID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLnVuaXRzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gb25seSBjb21wdXRlIHRoZSBiZXN0IHByZWZpeCBmb3Igc2luZ2xlIHVuaXRzIHdpdGggaW50ZWdlciBwb3dlcnMsIGxpa2Uga2csIHNeMiwgTl4tMSwgYW5kIHNvIGZvcnRoIScpO1xuICAgIH1cblxuICAgIGlmIChNYXRoLmFicyh0aGlzLnVuaXRzWzBdLnBvd2VyIC0gTWF0aC5yb3VuZCh0aGlzLnVuaXRzWzBdLnBvd2VyKSkgPj0gMWUtMTQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2FuIG9ubHkgY29tcHV0ZSB0aGUgYmVzdCBwcmVmaXggZm9yIHNpbmdsZSB1bml0cyB3aXRoIGludGVnZXIgcG93ZXJzLCBsaWtlIGtnLCBzXjIsIE5eLTEsIGFuZCBzbyBmb3J0aCEnKTtcbiAgICB9IC8vIGZpbmQgdGhlIGJlc3QgcHJlZml4IHZhbHVlIChyZXN1bHRpbmcgaW4gdGhlIHZhbHVlIG9mIHdoaWNoXG4gICAgLy8gdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZSBsb2cxMCBpcyBjbG9zZXN0IHRvIHplcm8sXG4gICAgLy8gdGhvdWdoIHdpdGggYSBsaXR0bGUgb2Zmc2V0IG9mIDEuMiBmb3IgbmljZXIgdmFsdWVzOiB5b3UgZ2V0IGFcbiAgICAvLyBzZXF1ZW5jZSAxbW0gMTAwbW0gNTAwbW0gMC42bSAxbSAxMG0gMTAwbSA1MDBtIDAuNmttIDFrbSAuLi5cbiAgICAvLyBOb3RlOiB0aGUgdW5pdHMgdmFsdWUgY2FuIGJlIGFueSBudW1lcmljIHR5cGUsIGJ1dCB0byBmaW5kIHRoZSBiZXN0XG4gICAgLy8gcHJlZml4IGl0J3MgZW5vdWdoIHRvIHdvcmsgd2l0aCBsaW1pdGVkIHByZWNpc2lvbiBvZiBhIHJlZ3VsYXIgbnVtYmVyXG4gICAgLy8gVXBkYXRlOiB1c2luZyBtYXRoanMgYWJzIHNpbmNlIHdlIGFsc28gYWxsb3cgY29tcGxleCBudW1iZXJzXG5cblxuICAgIHZhciBhYnNWYWx1ZSA9IHRoaXMudmFsdWUgIT09IG51bGwgPyBhYnModGhpcy52YWx1ZSkgOiAwO1xuICAgIHZhciBhYnNVbml0VmFsdWUgPSBhYnModGhpcy51bml0c1swXS51bml0LnZhbHVlKTtcbiAgICB2YXIgYmVzdFByZWZpeCA9IHRoaXMudW5pdHNbMF0ucHJlZml4O1xuXG4gICAgaWYgKGFic1ZhbHVlID09PSAwKSB7XG4gICAgICByZXR1cm4gYmVzdFByZWZpeDtcbiAgICB9XG5cbiAgICB2YXIgcG93ZXIgPSB0aGlzLnVuaXRzWzBdLnBvd2VyO1xuICAgIHZhciBiZXN0RGlmZiA9IE1hdGgubG9nKGFic1ZhbHVlIC8gTWF0aC5wb3coYmVzdFByZWZpeC52YWx1ZSAqIGFic1VuaXRWYWx1ZSwgcG93ZXIpKSAvIE1hdGguTE4xMCAtIDEuMjtcbiAgICBpZiAoYmVzdERpZmYgPiAtMi4yMDAwMDEgJiYgYmVzdERpZmYgPCAxLjgwMDAwMSkgcmV0dXJuIGJlc3RQcmVmaXg7IC8vIEFsbG93IHRoZSBvcmlnaW5hbCBwcmVmaXhcblxuICAgIGJlc3REaWZmID0gTWF0aC5hYnMoYmVzdERpZmYpO1xuICAgIHZhciBwcmVmaXhlcyA9IHRoaXMudW5pdHNbMF0udW5pdC5wcmVmaXhlcztcblxuICAgIGZvciAodmFyIHAgaW4gcHJlZml4ZXMpIHtcbiAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkocHJlZml4ZXMsIHApKSB7XG4gICAgICAgIHZhciBwcmVmaXggPSBwcmVmaXhlc1twXTtcblxuICAgICAgICBpZiAocHJlZml4LnNjaWVudGlmaWMpIHtcbiAgICAgICAgICB2YXIgZGlmZiA9IE1hdGguYWJzKE1hdGgubG9nKGFic1ZhbHVlIC8gTWF0aC5wb3cocHJlZml4LnZhbHVlICogYWJzVW5pdFZhbHVlLCBwb3dlcikpIC8gTWF0aC5MTjEwIC0gMS4yKTtcblxuICAgICAgICAgIGlmIChkaWZmIDwgYmVzdERpZmYgfHwgZGlmZiA9PT0gYmVzdERpZmYgJiYgcHJlZml4Lm5hbWUubGVuZ3RoIDwgYmVzdFByZWZpeC5uYW1lLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gY2hvb3NlIHRoZSBwcmVmaXggd2l0aCB0aGUgc21hbGxlc3QgZGlmZiwgb3IgaWYgZXF1YWwsIGNob29zZSB0aGUgb25lXG4gICAgICAgICAgICAvLyB3aXRoIHRoZSBzaG9ydGVzdCBuYW1lIChjYW4gaGFwcGVuIHdpdGggU0hPUlRMT05HIGZvciBleGFtcGxlKVxuICAgICAgICAgICAgYmVzdFByZWZpeCA9IHByZWZpeDtcbiAgICAgICAgICAgIGJlc3REaWZmID0gZGlmZjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYmVzdFByZWZpeDtcbiAgfTtcbiAgLyoqXG4gICAqIFJldHVybnMgYW4gYXJyYXkgb2YgdW5pdHMgd2hvc2Ugc3VtIGlzIGVxdWFsIHRvIHRoaXMgdW5pdFxuICAgKiBAbWVtYmVyb2YgVW5pdFxuICAgKiBAcGFyYW0ge0FycmF5fSBbcGFydHNdIEFuIGFycmF5IG9mIHN0cmluZ3Mgb3IgdmFsdWVsZXNzIHVuaXRzLlxuICAgKlxuICAgKiAgIEV4YW1wbGU6XG4gICAqXG4gICAqICAgY29uc3QgdSA9IG5ldyBVbml0KDEsICdtJylcbiAgICogICB1LnNwbGl0VW5pdChbJ2ZlZXQnLCAnaW5jaCddKVxuICAgKiAgICAgWyAzIGZlZXQsIDMuMzcwMDc4NzQwMTU3NSBpbmNoIF1cbiAgICpcbiAgICogQHJldHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIHVuaXRzLlxuICAgKi9cblxuXG4gIFVuaXQucHJvdG90eXBlLnNwbGl0VW5pdCA9IGZ1bmN0aW9uIChwYXJ0cykge1xuICAgIHZhciB4ID0gdGhpcy5jbG9uZSgpO1xuICAgIHZhciByZXQgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIC8vIENvbnZlcnQgeCB0byB0aGUgcmVxdWVzdGVkIHVuaXRcbiAgICAgIHggPSB4LnRvKHBhcnRzW2ldKTtcbiAgICAgIGlmIChpID09PSBwYXJ0cy5sZW5ndGggLSAxKSBicmVhazsgLy8gR2V0IHRoZSBudW1lcmljIHZhbHVlIG9mIHRoaXMgdW5pdFxuXG4gICAgICB2YXIgeE51bWVyaWMgPSB4LnRvTnVtZXJpYygpOyAvLyBDaGVjayB0byBzZWUgaWYgeE51bWVyaWMgaXMgbmVhcmx5IGVxdWFsIHRvIGFuIGludGVnZXIsXG4gICAgICAvLyBzaW5jZSBmaXggY2FuIGluY29ycmVjdGx5IHJvdW5kIGRvd24gaWYgdGhlcmUgaXMgcm91bmQtb2ZmIGVycm9yXG5cbiAgICAgIHZhciB4Um91bmRlZCA9IHJvdW5kKHhOdW1lcmljKTtcbiAgICAgIHZhciB4Rml4ZWQgPSB2b2lkIDA7XG4gICAgICB2YXIgaXNOZWFybHlFcXVhbCA9IGVxdWFsKHhSb3VuZGVkLCB4TnVtZXJpYyk7XG5cbiAgICAgIGlmIChpc05lYXJseUVxdWFsKSB7XG4gICAgICAgIHhGaXhlZCA9IHhSb3VuZGVkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgeEZpeGVkID0gZml4KHgudG9OdW1lcmljKCkpO1xuICAgICAgfVxuXG4gICAgICB2YXIgeSA9IG5ldyBVbml0KHhGaXhlZCwgcGFydHNbaV0udG9TdHJpbmcoKSk7XG4gICAgICByZXQucHVzaCh5KTtcbiAgICAgIHggPSBzdWJ0cmFjdCh4LCB5KTtcbiAgICB9IC8vIFRoaXMgbGl0dGxlIGJpdCBmaXhlcyBhIGJ1ZyB3aGVyZSB0aGUgcmVtYWluZGVyIHNob3VsZCBiZSAwIGJ1dCBpcyBhIGxpdHRsZSBiaXQgb2ZmLlxuICAgIC8vIEJ1dCBpbnN0ZWFkIG9mIGNvbXBhcmluZyB4LCB0aGUgcmVtYWluZGVyLCB3aXRoIHplcm8tLXdlIHdpbGwgY29tcGFyZSB0aGUgc3VtIG9mXG4gICAgLy8gYWxsIHRoZSBwYXJ0cyBzbyBmYXIgd2l0aCB0aGUgb3JpZ2luYWwgdmFsdWUuIElmIHRoZXkgYXJlIG5lYXJseSBlcXVhbCxcbiAgICAvLyB3ZSBzZXQgdGhlIHJlbWFpbmRlciB0byAwLlxuXG5cbiAgICB2YXIgdGVzdFN1bSA9IDA7XG5cbiAgICBmb3IgKHZhciBfaTUgPSAwOyBfaTUgPCByZXQubGVuZ3RoOyBfaTUrKykge1xuICAgICAgdGVzdFN1bSA9IGFkZFNjYWxhcih0ZXN0U3VtLCByZXRbX2k1XS52YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKGVxdWFsKHRlc3RTdW0sIHRoaXMudmFsdWUpKSB7XG4gICAgICB4LnZhbHVlID0gMDtcbiAgICB9XG5cbiAgICByZXQucHVzaCh4KTtcbiAgICByZXR1cm4gcmV0O1xuICB9O1xuXG4gIHZhciBQUkVGSVhFUyA9IHtcbiAgICBOT05FOiB7XG4gICAgICAnJzoge1xuICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH1cbiAgICB9LFxuICAgIFNIT1JUOiB7XG4gICAgICAnJzoge1xuICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBkYToge1xuICAgICAgICBuYW1lOiAnZGEnLFxuICAgICAgICB2YWx1ZTogMWUxLFxuICAgICAgICBzY2llbnRpZmljOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIGg6IHtcbiAgICAgICAgbmFtZTogJ2gnLFxuICAgICAgICB2YWx1ZTogMWUyLFxuICAgICAgICBzY2llbnRpZmljOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIGs6IHtcbiAgICAgICAgbmFtZTogJ2snLFxuICAgICAgICB2YWx1ZTogMWUzLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgTToge1xuICAgICAgICBuYW1lOiAnTScsXG4gICAgICAgIHZhbHVlOiAxZTYsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBHOiB7XG4gICAgICAgIG5hbWU6ICdHJyxcbiAgICAgICAgdmFsdWU6IDFlOSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIFQ6IHtcbiAgICAgICAgbmFtZTogJ1QnLFxuICAgICAgICB2YWx1ZTogMWUxMixcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIFA6IHtcbiAgICAgICAgbmFtZTogJ1AnLFxuICAgICAgICB2YWx1ZTogMWUxNSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIEU6IHtcbiAgICAgICAgbmFtZTogJ0UnLFxuICAgICAgICB2YWx1ZTogMWUxOCxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIFo6IHtcbiAgICAgICAgbmFtZTogJ1onLFxuICAgICAgICB2YWx1ZTogMWUyMSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIFk6IHtcbiAgICAgICAgbmFtZTogJ1knLFxuICAgICAgICB2YWx1ZTogMWUyNCxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGQ6IHtcbiAgICAgICAgbmFtZTogJ2QnLFxuICAgICAgICB2YWx1ZTogMWUtMSxcbiAgICAgICAgc2NpZW50aWZpYzogZmFsc2VcbiAgICAgIH0sXG4gICAgICBjOiB7XG4gICAgICAgIG5hbWU6ICdjJyxcbiAgICAgICAgdmFsdWU6IDFlLTIsXG4gICAgICAgIHNjaWVudGlmaWM6IGZhbHNlXG4gICAgICB9LFxuICAgICAgbToge1xuICAgICAgICBuYW1lOiAnbScsXG4gICAgICAgIHZhbHVlOiAxZS0zLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgdToge1xuICAgICAgICBuYW1lOiAndScsXG4gICAgICAgIHZhbHVlOiAxZS02LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgbjoge1xuICAgICAgICBuYW1lOiAnbicsXG4gICAgICAgIHZhbHVlOiAxZS05LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgcDoge1xuICAgICAgICBuYW1lOiAncCcsXG4gICAgICAgIHZhbHVlOiAxZS0xMixcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGY6IHtcbiAgICAgICAgbmFtZTogJ2YnLFxuICAgICAgICB2YWx1ZTogMWUtMTUsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBhOiB7XG4gICAgICAgIG5hbWU6ICdhJyxcbiAgICAgICAgdmFsdWU6IDFlLTE4LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgejoge1xuICAgICAgICBuYW1lOiAneicsXG4gICAgICAgIHZhbHVlOiAxZS0yMSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHk6IHtcbiAgICAgICAgbmFtZTogJ3knLFxuICAgICAgICB2YWx1ZTogMWUtMjQsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH1cbiAgICB9LFxuICAgIExPTkc6IHtcbiAgICAgICcnOiB7XG4gICAgICAgIG5hbWU6ICcnLFxuICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGRlY2E6IHtcbiAgICAgICAgbmFtZTogJ2RlY2EnLFxuICAgICAgICB2YWx1ZTogMWUxLFxuICAgICAgICBzY2llbnRpZmljOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIGhlY3RvOiB7XG4gICAgICAgIG5hbWU6ICdoZWN0bycsXG4gICAgICAgIHZhbHVlOiAxZTIsXG4gICAgICAgIHNjaWVudGlmaWM6IGZhbHNlXG4gICAgICB9LFxuICAgICAga2lsbzoge1xuICAgICAgICBuYW1lOiAna2lsbycsXG4gICAgICAgIHZhbHVlOiAxZTMsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBtZWdhOiB7XG4gICAgICAgIG5hbWU6ICdtZWdhJyxcbiAgICAgICAgdmFsdWU6IDFlNixcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGdpZ2E6IHtcbiAgICAgICAgbmFtZTogJ2dpZ2EnLFxuICAgICAgICB2YWx1ZTogMWU5LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgdGVyYToge1xuICAgICAgICBuYW1lOiAndGVyYScsXG4gICAgICAgIHZhbHVlOiAxZTEyLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgcGV0YToge1xuICAgICAgICBuYW1lOiAncGV0YScsXG4gICAgICAgIHZhbHVlOiAxZTE1LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgZXhhOiB7XG4gICAgICAgIG5hbWU6ICdleGEnLFxuICAgICAgICB2YWx1ZTogMWUxOCxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHpldHRhOiB7XG4gICAgICAgIG5hbWU6ICd6ZXR0YScsXG4gICAgICAgIHZhbHVlOiAxZTIxLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgeW90dGE6IHtcbiAgICAgICAgbmFtZTogJ3lvdHRhJyxcbiAgICAgICAgdmFsdWU6IDFlMjQsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBkZWNpOiB7XG4gICAgICAgIG5hbWU6ICdkZWNpJyxcbiAgICAgICAgdmFsdWU6IDFlLTEsXG4gICAgICAgIHNjaWVudGlmaWM6IGZhbHNlXG4gICAgICB9LFxuICAgICAgY2VudGk6IHtcbiAgICAgICAgbmFtZTogJ2NlbnRpJyxcbiAgICAgICAgdmFsdWU6IDFlLTIsXG4gICAgICAgIHNjaWVudGlmaWM6IGZhbHNlXG4gICAgICB9LFxuICAgICAgbWlsbGk6IHtcbiAgICAgICAgbmFtZTogJ21pbGxpJyxcbiAgICAgICAgdmFsdWU6IDFlLTMsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBtaWNybzoge1xuICAgICAgICBuYW1lOiAnbWljcm8nLFxuICAgICAgICB2YWx1ZTogMWUtNixcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIG5hbm86IHtcbiAgICAgICAgbmFtZTogJ25hbm8nLFxuICAgICAgICB2YWx1ZTogMWUtOSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHBpY286IHtcbiAgICAgICAgbmFtZTogJ3BpY28nLFxuICAgICAgICB2YWx1ZTogMWUtMTIsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBmZW10bzoge1xuICAgICAgICBuYW1lOiAnZmVtdG8nLFxuICAgICAgICB2YWx1ZTogMWUtMTUsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBhdHRvOiB7XG4gICAgICAgIG5hbWU6ICdhdHRvJyxcbiAgICAgICAgdmFsdWU6IDFlLTE4LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgemVwdG86IHtcbiAgICAgICAgbmFtZTogJ3plcHRvJyxcbiAgICAgICAgdmFsdWU6IDFlLTIxLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgeW9jdG86IHtcbiAgICAgICAgbmFtZTogJ3lvY3RvJyxcbiAgICAgICAgdmFsdWU6IDFlLTI0LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9XG4gICAgfSxcbiAgICBTUVVBUkVEOiB7XG4gICAgICAnJzoge1xuICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBkYToge1xuICAgICAgICBuYW1lOiAnZGEnLFxuICAgICAgICB2YWx1ZTogMWUyLFxuICAgICAgICBzY2llbnRpZmljOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIGg6IHtcbiAgICAgICAgbmFtZTogJ2gnLFxuICAgICAgICB2YWx1ZTogMWU0LFxuICAgICAgICBzY2llbnRpZmljOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIGs6IHtcbiAgICAgICAgbmFtZTogJ2snLFxuICAgICAgICB2YWx1ZTogMWU2LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgTToge1xuICAgICAgICBuYW1lOiAnTScsXG4gICAgICAgIHZhbHVlOiAxZTEyLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgRzoge1xuICAgICAgICBuYW1lOiAnRycsXG4gICAgICAgIHZhbHVlOiAxZTE4LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgVDoge1xuICAgICAgICBuYW1lOiAnVCcsXG4gICAgICAgIHZhbHVlOiAxZTI0LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgUDoge1xuICAgICAgICBuYW1lOiAnUCcsXG4gICAgICAgIHZhbHVlOiAxZTMwLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgRToge1xuICAgICAgICBuYW1lOiAnRScsXG4gICAgICAgIHZhbHVlOiAxZTM2LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgWjoge1xuICAgICAgICBuYW1lOiAnWicsXG4gICAgICAgIHZhbHVlOiAxZTQyLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgWToge1xuICAgICAgICBuYW1lOiAnWScsXG4gICAgICAgIHZhbHVlOiAxZTQ4LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgZDoge1xuICAgICAgICBuYW1lOiAnZCcsXG4gICAgICAgIHZhbHVlOiAxZS0yLFxuICAgICAgICBzY2llbnRpZmljOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIGM6IHtcbiAgICAgICAgbmFtZTogJ2MnLFxuICAgICAgICB2YWx1ZTogMWUtNCxcbiAgICAgICAgc2NpZW50aWZpYzogZmFsc2VcbiAgICAgIH0sXG4gICAgICBtOiB7XG4gICAgICAgIG5hbWU6ICdtJyxcbiAgICAgICAgdmFsdWU6IDFlLTYsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICB1OiB7XG4gICAgICAgIG5hbWU6ICd1JyxcbiAgICAgICAgdmFsdWU6IDFlLTEyLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgbjoge1xuICAgICAgICBuYW1lOiAnbicsXG4gICAgICAgIHZhbHVlOiAxZS0xOCxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHA6IHtcbiAgICAgICAgbmFtZTogJ3AnLFxuICAgICAgICB2YWx1ZTogMWUtMjQsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBmOiB7XG4gICAgICAgIG5hbWU6ICdmJyxcbiAgICAgICAgdmFsdWU6IDFlLTMwLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgYToge1xuICAgICAgICBuYW1lOiAnYScsXG4gICAgICAgIHZhbHVlOiAxZS0zNixcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHo6IHtcbiAgICAgICAgbmFtZTogJ3onLFxuICAgICAgICB2YWx1ZTogMWUtNDIsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICB5OiB7XG4gICAgICAgIG5hbWU6ICd5JyxcbiAgICAgICAgdmFsdWU6IDFlLTQ4LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9XG4gICAgfSxcbiAgICBDVUJJQzoge1xuICAgICAgJyc6IHtcbiAgICAgICAgbmFtZTogJycsXG4gICAgICAgIHZhbHVlOiAxLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgZGE6IHtcbiAgICAgICAgbmFtZTogJ2RhJyxcbiAgICAgICAgdmFsdWU6IDFlMyxcbiAgICAgICAgc2NpZW50aWZpYzogZmFsc2VcbiAgICAgIH0sXG4gICAgICBoOiB7XG4gICAgICAgIG5hbWU6ICdoJyxcbiAgICAgICAgdmFsdWU6IDFlNixcbiAgICAgICAgc2NpZW50aWZpYzogZmFsc2VcbiAgICAgIH0sXG4gICAgICBrOiB7XG4gICAgICAgIG5hbWU6ICdrJyxcbiAgICAgICAgdmFsdWU6IDFlOSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIE06IHtcbiAgICAgICAgbmFtZTogJ00nLFxuICAgICAgICB2YWx1ZTogMWUxOCxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIEc6IHtcbiAgICAgICAgbmFtZTogJ0cnLFxuICAgICAgICB2YWx1ZTogMWUyNyxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIFQ6IHtcbiAgICAgICAgbmFtZTogJ1QnLFxuICAgICAgICB2YWx1ZTogMWUzNixcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIFA6IHtcbiAgICAgICAgbmFtZTogJ1AnLFxuICAgICAgICB2YWx1ZTogMWU0NSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIEU6IHtcbiAgICAgICAgbmFtZTogJ0UnLFxuICAgICAgICB2YWx1ZTogMWU1NCxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIFo6IHtcbiAgICAgICAgbmFtZTogJ1onLFxuICAgICAgICB2YWx1ZTogMWU2MyxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIFk6IHtcbiAgICAgICAgbmFtZTogJ1knLFxuICAgICAgICB2YWx1ZTogMWU3MixcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGQ6IHtcbiAgICAgICAgbmFtZTogJ2QnLFxuICAgICAgICB2YWx1ZTogMWUtMyxcbiAgICAgICAgc2NpZW50aWZpYzogZmFsc2VcbiAgICAgIH0sXG4gICAgICBjOiB7XG4gICAgICAgIG5hbWU6ICdjJyxcbiAgICAgICAgdmFsdWU6IDFlLTYsXG4gICAgICAgIHNjaWVudGlmaWM6IGZhbHNlXG4gICAgICB9LFxuICAgICAgbToge1xuICAgICAgICBuYW1lOiAnbScsXG4gICAgICAgIHZhbHVlOiAxZS05LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgdToge1xuICAgICAgICBuYW1lOiAndScsXG4gICAgICAgIHZhbHVlOiAxZS0xOCxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIG46IHtcbiAgICAgICAgbmFtZTogJ24nLFxuICAgICAgICB2YWx1ZTogMWUtMjcsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBwOiB7XG4gICAgICAgIG5hbWU6ICdwJyxcbiAgICAgICAgdmFsdWU6IDFlLTM2LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgZjoge1xuICAgICAgICBuYW1lOiAnZicsXG4gICAgICAgIHZhbHVlOiAxZS00NSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGE6IHtcbiAgICAgICAgbmFtZTogJ2EnLFxuICAgICAgICB2YWx1ZTogMWUtNTQsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICB6OiB7XG4gICAgICAgIG5hbWU6ICd6JyxcbiAgICAgICAgdmFsdWU6IDFlLTYzLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgeToge1xuICAgICAgICBuYW1lOiAneScsXG4gICAgICAgIHZhbHVlOiAxZS03MixcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfVxuICAgIH0sXG4gICAgQklOQVJZX1NIT1JUX1NJOiB7XG4gICAgICAnJzoge1xuICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBrOiB7XG4gICAgICAgIG5hbWU6ICdrJyxcbiAgICAgICAgdmFsdWU6IDFlMyxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIE06IHtcbiAgICAgICAgbmFtZTogJ00nLFxuICAgICAgICB2YWx1ZTogMWU2LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgRzoge1xuICAgICAgICBuYW1lOiAnRycsXG4gICAgICAgIHZhbHVlOiAxZTksXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBUOiB7XG4gICAgICAgIG5hbWU6ICdUJyxcbiAgICAgICAgdmFsdWU6IDFlMTIsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBQOiB7XG4gICAgICAgIG5hbWU6ICdQJyxcbiAgICAgICAgdmFsdWU6IDFlMTUsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBFOiB7XG4gICAgICAgIG5hbWU6ICdFJyxcbiAgICAgICAgdmFsdWU6IDFlMTgsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBaOiB7XG4gICAgICAgIG5hbWU6ICdaJyxcbiAgICAgICAgdmFsdWU6IDFlMjEsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBZOiB7XG4gICAgICAgIG5hbWU6ICdZJyxcbiAgICAgICAgdmFsdWU6IDFlMjQsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH1cbiAgICB9LFxuICAgIEJJTkFSWV9TSE9SVF9JRUM6IHtcbiAgICAgICcnOiB7XG4gICAgICAgIG5hbWU6ICcnLFxuICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIEtpOiB7XG4gICAgICAgIG5hbWU6ICdLaScsXG4gICAgICAgIHZhbHVlOiAxMDI0LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgTWk6IHtcbiAgICAgICAgbmFtZTogJ01pJyxcbiAgICAgICAgdmFsdWU6IE1hdGgucG93KDEwMjQsIDIpLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgR2k6IHtcbiAgICAgICAgbmFtZTogJ0dpJyxcbiAgICAgICAgdmFsdWU6IE1hdGgucG93KDEwMjQsIDMpLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgVGk6IHtcbiAgICAgICAgbmFtZTogJ1RpJyxcbiAgICAgICAgdmFsdWU6IE1hdGgucG93KDEwMjQsIDQpLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgUGk6IHtcbiAgICAgICAgbmFtZTogJ1BpJyxcbiAgICAgICAgdmFsdWU6IE1hdGgucG93KDEwMjQsIDUpLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgRWk6IHtcbiAgICAgICAgbmFtZTogJ0VpJyxcbiAgICAgICAgdmFsdWU6IE1hdGgucG93KDEwMjQsIDYpLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgWmk6IHtcbiAgICAgICAgbmFtZTogJ1ppJyxcbiAgICAgICAgdmFsdWU6IE1hdGgucG93KDEwMjQsIDcpLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgWWk6IHtcbiAgICAgICAgbmFtZTogJ1lpJyxcbiAgICAgICAgdmFsdWU6IE1hdGgucG93KDEwMjQsIDgpLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9XG4gICAgfSxcbiAgICBCSU5BUllfTE9OR19TSToge1xuICAgICAgJyc6IHtcbiAgICAgICAgbmFtZTogJycsXG4gICAgICAgIHZhbHVlOiAxLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAga2lsbzoge1xuICAgICAgICBuYW1lOiAna2lsbycsXG4gICAgICAgIHZhbHVlOiAxZTMsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBtZWdhOiB7XG4gICAgICAgIG5hbWU6ICdtZWdhJyxcbiAgICAgICAgdmFsdWU6IDFlNixcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGdpZ2E6IHtcbiAgICAgICAgbmFtZTogJ2dpZ2EnLFxuICAgICAgICB2YWx1ZTogMWU5LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgdGVyYToge1xuICAgICAgICBuYW1lOiAndGVyYScsXG4gICAgICAgIHZhbHVlOiAxZTEyLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgcGV0YToge1xuICAgICAgICBuYW1lOiAncGV0YScsXG4gICAgICAgIHZhbHVlOiAxZTE1LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgZXhhOiB7XG4gICAgICAgIG5hbWU6ICdleGEnLFxuICAgICAgICB2YWx1ZTogMWUxOCxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHpldHRhOiB7XG4gICAgICAgIG5hbWU6ICd6ZXR0YScsXG4gICAgICAgIHZhbHVlOiAxZTIxLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgeW90dGE6IHtcbiAgICAgICAgbmFtZTogJ3lvdHRhJyxcbiAgICAgICAgdmFsdWU6IDFlMjQsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH1cbiAgICB9LFxuICAgIEJJTkFSWV9MT05HX0lFQzoge1xuICAgICAgJyc6IHtcbiAgICAgICAgbmFtZTogJycsXG4gICAgICAgIHZhbHVlOiAxLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAga2liaToge1xuICAgICAgICBuYW1lOiAna2liaScsXG4gICAgICAgIHZhbHVlOiAxMDI0LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgbWViaToge1xuICAgICAgICBuYW1lOiAnbWViaScsXG4gICAgICAgIHZhbHVlOiBNYXRoLnBvdygxMDI0LCAyKSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGdpYmk6IHtcbiAgICAgICAgbmFtZTogJ2dpYmknLFxuICAgICAgICB2YWx1ZTogTWF0aC5wb3coMTAyNCwgMyksXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICB0ZWJpOiB7XG4gICAgICAgIG5hbWU6ICd0ZWJpJyxcbiAgICAgICAgdmFsdWU6IE1hdGgucG93KDEwMjQsIDQpLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgcGViaToge1xuICAgICAgICBuYW1lOiAncGViaScsXG4gICAgICAgIHZhbHVlOiBNYXRoLnBvdygxMDI0LCA1KSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGV4aToge1xuICAgICAgICBuYW1lOiAnZXhpJyxcbiAgICAgICAgdmFsdWU6IE1hdGgucG93KDEwMjQsIDYpLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgemViaToge1xuICAgICAgICBuYW1lOiAnemViaScsXG4gICAgICAgIHZhbHVlOiBNYXRoLnBvdygxMDI0LCA3KSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHlvYmk6IHtcbiAgICAgICAgbmFtZTogJ3lvYmknLFxuICAgICAgICB2YWx1ZTogTWF0aC5wb3coMTAyNCwgOCksXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH1cbiAgICB9LFxuICAgIEJUVToge1xuICAgICAgJyc6IHtcbiAgICAgICAgbmFtZTogJycsXG4gICAgICAgIHZhbHVlOiAxLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgTU06IHtcbiAgICAgICAgbmFtZTogJ01NJyxcbiAgICAgICAgdmFsdWU6IDFlNixcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgUFJFRklYRVMuU0hPUlRMT05HID0gX2V4dGVuZHMoe30sIFBSRUZJWEVTLlNIT1JULCBQUkVGSVhFUy5MT05HKTtcbiAgUFJFRklYRVMuQklOQVJZX1NIT1JUID0gX2V4dGVuZHMoe30sIFBSRUZJWEVTLkJJTkFSWV9TSE9SVF9TSSwgUFJFRklYRVMuQklOQVJZX1NIT1JUX0lFQyk7XG4gIFBSRUZJWEVTLkJJTkFSWV9MT05HID0gX2V4dGVuZHMoe30sIFBSRUZJWEVTLkJJTkFSWV9MT05HX1NJLCBQUkVGSVhFUy5CSU5BUllfTE9OR19JRUMpO1xuICAvKiBJbnRlcm5hbGx5LCBlYWNoIHVuaXQgaXMgcmVwcmVzZW50ZWQgYnkgYSB2YWx1ZSBhbmQgYSBkaW1lbnNpb24gYXJyYXkuIFRoZSBlbGVtZW50cyBvZiB0aGUgZGltZW5zaW9ucyBhcnJheSBoYXZlIHRoZSBmb2xsb3dpbmcgbWVhbmluZzpcbiAgICogSW5kZXggIERpbWVuc2lvblxuICAgKiAtLS0tLSAgLS0tLS0tLS0tXG4gICAqICAgMCAgICBMZW5ndGhcbiAgICogICAxICAgIE1hc3NcbiAgICogICAyICAgIFRpbWVcbiAgICogICAzICAgIEN1cnJlbnRcbiAgICogICA0ICAgIFRlbXBlcmF0dXJlXG4gICAqICAgNSAgICBMdW1pbm91cyBpbnRlbnNpdHlcbiAgICogICA2ICAgIEFtb3VudCBvZiBzdWJzdGFuY2VcbiAgICogICA3ICAgIEFuZ2xlXG4gICAqICAgOCAgICBCaXQgKGRpZ2l0YWwpXG4gICAqIEZvciBleGFtcGxlLCB0aGUgdW5pdCBcIjI5OC4xNSBLXCIgaXMgYSBwdXJlIHRlbXBlcmF0dXJlIGFuZCB3b3VsZCBoYXZlIGEgdmFsdWUgb2YgMjk4LjE1IGFuZCBhIGRpbWVuc2lvbiBhcnJheSBvZiBbMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMF0uIFRoZSB1bml0IFwiMSBjYWwgLyAoZ20gwrBDKVwiIGNhbiBiZSB3cml0dGVuIGluIHRlcm1zIG9mIHRoZSA5IGZ1bmRhbWVudGFsIGRpbWVuc2lvbnMgYXMgW2xlbmd0aF4yXSAvIChbdGltZV4yXSAqIFt0ZW1wZXJhdHVyZV0pLCBhbmQgd291bGQgYSB2YWx1ZSBvZiAoYWZ0ZXIgY29udmVyc2lvbiB0byBTSSkgNDE4NC4wIGFuZCBhIGRpbWVuc2lvbnMgYXJyYXkgb2YgWzIsIDAsIC0yLCAwLCAtMSwgMCwgMCwgMCwgMF0uXG4gICAqXG4gICAqL1xuXG4gIHZhciBCQVNFX0RJTUVOU0lPTlMgPSBbJ01BU1MnLCAnTEVOR1RIJywgJ1RJTUUnLCAnQ1VSUkVOVCcsICdURU1QRVJBVFVSRScsICdMVU1JTk9VU19JTlRFTlNJVFknLCAnQU1PVU5UX09GX1NVQlNUQU5DRScsICdBTkdMRScsICdCSVQnXTtcbiAgdmFyIEJBU0VfVU5JVFMgPSB7XG4gICAgTk9ORToge1xuICAgICAgZGltZW5zaW9uczogWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdXG4gICAgfSxcbiAgICBNQVNTOiB7XG4gICAgICBkaW1lbnNpb25zOiBbMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF1cbiAgICB9LFxuICAgIExFTkdUSDoge1xuICAgICAgZGltZW5zaW9uczogWzAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDBdXG4gICAgfSxcbiAgICBUSU1FOiB7XG4gICAgICBkaW1lbnNpb25zOiBbMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMF1cbiAgICB9LFxuICAgIENVUlJFTlQ6IHtcbiAgICAgIGRpbWVuc2lvbnM6IFswLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwXVxuICAgIH0sXG4gICAgVEVNUEVSQVRVUkU6IHtcbiAgICAgIGRpbWVuc2lvbnM6IFswLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwXVxuICAgIH0sXG4gICAgTFVNSU5PVVNfSU5URU5TSVRZOiB7XG4gICAgICBkaW1lbnNpb25zOiBbMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMF1cbiAgICB9LFxuICAgIEFNT1VOVF9PRl9TVUJTVEFOQ0U6IHtcbiAgICAgIGRpbWVuc2lvbnM6IFswLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwXVxuICAgIH0sXG4gICAgRk9SQ0U6IHtcbiAgICAgIGRpbWVuc2lvbnM6IFsxLCAxLCAtMiwgMCwgMCwgMCwgMCwgMCwgMF1cbiAgICB9LFxuICAgIFNVUkZBQ0U6IHtcbiAgICAgIGRpbWVuc2lvbnM6IFswLCAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwXVxuICAgIH0sXG4gICAgVk9MVU1FOiB7XG4gICAgICBkaW1lbnNpb25zOiBbMCwgMywgMCwgMCwgMCwgMCwgMCwgMCwgMF1cbiAgICB9LFxuICAgIEVORVJHWToge1xuICAgICAgZGltZW5zaW9uczogWzEsIDIsIC0yLCAwLCAwLCAwLCAwLCAwLCAwXVxuICAgIH0sXG4gICAgUE9XRVI6IHtcbiAgICAgIGRpbWVuc2lvbnM6IFsxLCAyLCAtMywgMCwgMCwgMCwgMCwgMCwgMF1cbiAgICB9LFxuICAgIFBSRVNTVVJFOiB7XG4gICAgICBkaW1lbnNpb25zOiBbMSwgLTEsIC0yLCAwLCAwLCAwLCAwLCAwLCAwXVxuICAgIH0sXG4gICAgRUxFQ1RSSUNfQ0hBUkdFOiB7XG4gICAgICBkaW1lbnNpb25zOiBbMCwgMCwgMSwgMSwgMCwgMCwgMCwgMCwgMF1cbiAgICB9LFxuICAgIEVMRUNUUklDX0NBUEFDSVRBTkNFOiB7XG4gICAgICBkaW1lbnNpb25zOiBbLTEsIC0yLCA0LCAyLCAwLCAwLCAwLCAwLCAwXVxuICAgIH0sXG4gICAgRUxFQ1RSSUNfUE9URU5USUFMOiB7XG4gICAgICBkaW1lbnNpb25zOiBbMSwgMiwgLTMsIC0xLCAwLCAwLCAwLCAwLCAwXVxuICAgIH0sXG4gICAgRUxFQ1RSSUNfUkVTSVNUQU5DRToge1xuICAgICAgZGltZW5zaW9uczogWzEsIDIsIC0zLCAtMiwgMCwgMCwgMCwgMCwgMF1cbiAgICB9LFxuICAgIEVMRUNUUklDX0lORFVDVEFOQ0U6IHtcbiAgICAgIGRpbWVuc2lvbnM6IFsxLCAyLCAtMiwgLTIsIDAsIDAsIDAsIDAsIDBdXG4gICAgfSxcbiAgICBFTEVDVFJJQ19DT05EVUNUQU5DRToge1xuICAgICAgZGltZW5zaW9uczogWy0xLCAtMiwgMywgMiwgMCwgMCwgMCwgMCwgMF1cbiAgICB9LFxuICAgIE1BR05FVElDX0ZMVVg6IHtcbiAgICAgIGRpbWVuc2lvbnM6IFsxLCAyLCAtMiwgLTEsIDAsIDAsIDAsIDAsIDBdXG4gICAgfSxcbiAgICBNQUdORVRJQ19GTFVYX0RFTlNJVFk6IHtcbiAgICAgIGRpbWVuc2lvbnM6IFsxLCAwLCAtMiwgLTEsIDAsIDAsIDAsIDAsIDBdXG4gICAgfSxcbiAgICBGUkVRVUVOQ1k6IHtcbiAgICAgIGRpbWVuc2lvbnM6IFswLCAwLCAtMSwgMCwgMCwgMCwgMCwgMCwgMF1cbiAgICB9LFxuICAgIEFOR0xFOiB7XG4gICAgICBkaW1lbnNpb25zOiBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMF1cbiAgICB9LFxuICAgIEJJVDoge1xuICAgICAgZGltZW5zaW9uczogWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDFdXG4gICAgfVxuICB9O1xuXG4gIGZvciAodmFyIGtleSBpbiBCQVNFX1VOSVRTKSB7XG4gICAgQkFTRV9VTklUU1trZXldLmtleSA9IGtleTtcbiAgfVxuXG4gIHZhciBCQVNFX1VOSVRfTk9ORSA9IHt9O1xuICB2YXIgVU5JVF9OT05FID0ge1xuICAgIG5hbWU6ICcnLFxuICAgIGJhc2U6IEJBU0VfVU5JVF9OT05FLFxuICAgIHZhbHVlOiAxLFxuICAgIG9mZnNldDogMCxcbiAgICBkaW1lbnNpb25zOiBCQVNFX0RJTUVOU0lPTlMubWFwKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9KVxuICB9O1xuICB2YXIgVU5JVFMgPSB7XG4gICAgLy8gbGVuZ3RoXG4gICAgbWV0ZXI6IHtcbiAgICAgIG5hbWU6ICdtZXRlcicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkxFTkdUSCxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGluY2g6IHtcbiAgICAgIG5hbWU6ICdpbmNoJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTEVOR1RILFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMjU0LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBmb290OiB7XG4gICAgICBuYW1lOiAnZm9vdCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkxFTkdUSCxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuMzA0OCxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgeWFyZDoge1xuICAgICAgbmFtZTogJ3lhcmQnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5MRU5HVEgsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjkxNDQsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIG1pbGU6IHtcbiAgICAgIG5hbWU6ICdtaWxlJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTEVOR1RILFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMTYwOS4zNDQsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGxpbms6IHtcbiAgICAgIG5hbWU6ICdsaW5rJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTEVOR1RILFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4yMDExNjgsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIHJvZDoge1xuICAgICAgbmFtZTogJ3JvZCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkxFTkdUSCxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDUuMDI5MixcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgY2hhaW46IHtcbiAgICAgIG5hbWU6ICdjaGFpbicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkxFTkdUSCxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDIwLjExNjgsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGFuZ3N0cm9tOiB7XG4gICAgICBuYW1lOiAnYW5nc3Ryb20nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5MRU5HVEgsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAxZS0xMCxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgbToge1xuICAgICAgbmFtZTogJ20nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5MRU5HVEgsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgXCJpblwiOiB7XG4gICAgICBuYW1lOiAnaW4nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5MRU5HVEgsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjAyNTQsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGZ0OiB7XG4gICAgICBuYW1lOiAnZnQnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5MRU5HVEgsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjMwNDgsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIHlkOiB7XG4gICAgICBuYW1lOiAneWQnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5MRU5HVEgsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjkxNDQsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIG1pOiB7XG4gICAgICBuYW1lOiAnbWknLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5MRU5HVEgsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAxNjA5LjM0NCxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgbGk6IHtcbiAgICAgIG5hbWU6ICdsaScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkxFTkdUSCxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuMjAxMTY4LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICByZDoge1xuICAgICAgbmFtZTogJ3JkJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTEVOR1RILFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNS4wMjkyMTAsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGNoOiB7XG4gICAgICBuYW1lOiAnY2gnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5MRU5HVEgsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAyMC4xMTY4LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBtaWw6IHtcbiAgICAgIG5hbWU6ICdtaWwnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5MRU5HVEgsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjAwMDAyNTQsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIDEvMTAwMCBpbmNoXG4gICAgLy8gU3VyZmFjZVxuICAgIG0yOiB7XG4gICAgICBuYW1lOiAnbTInLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5TVVJGQUNFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNRVUFSRUQsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgc3Fpbjoge1xuICAgICAgbmFtZTogJ3NxaW4nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5TVVJGQUNFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMDA2NDUxNixcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gNjQ1LjE2IG1tMlxuICAgIHNxZnQ6IHtcbiAgICAgIG5hbWU6ICdzcWZ0JyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuU1VSRkFDRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuMDkyOTAzMDQsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIDAuMDkyOTAzMDQgbTJcbiAgICBzcXlkOiB7XG4gICAgICBuYW1lOiAnc3F5ZCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlNVUkZBQ0UsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjgzNjEyNzM2LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAwLjgzNjEyNzM2IG0yXG4gICAgc3FtaToge1xuICAgICAgbmFtZTogJ3NxbWknLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5TVVJGQUNFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMjU4OTk4OC4xMTAzMzYsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIDIuNTg5OTg4MTEwMzM2IGttMlxuICAgIHNxcmQ6IHtcbiAgICAgIG5hbWU6ICdzcXJkJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuU1VSRkFDRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDI1LjI5Mjk1LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAyNS4yOTI5NSBtMlxuICAgIHNxY2g6IHtcbiAgICAgIG5hbWU6ICdzcWNoJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuU1VSRkFDRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDQwNC42ODczLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyA0MDQuNjg3MyBtMlxuICAgIHNxbWlsOiB7XG4gICAgICBuYW1lOiAnc3FtaWwnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5TVVJGQUNFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNi40NTE2ZS0xMCxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gNi40NTE2ICogMTBeLTEwIG0yXG4gICAgYWNyZToge1xuICAgICAgbmFtZTogJ2FjcmUnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5TVVJGQUNFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNDA0Ni44NixcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gNDA0Ni44NiBtMlxuICAgIGhlY3RhcmU6IHtcbiAgICAgIG5hbWU6ICdoZWN0YXJlJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuU1VSRkFDRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDEwMDAwLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAxMDAwMCBtMlxuICAgIC8vIFZvbHVtZVxuICAgIG0zOiB7XG4gICAgICBuYW1lOiAnbTMnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuQ1VCSUMsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgTDoge1xuICAgICAgbmFtZTogJ0wnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMC4wMDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIGxpdHJlXG4gICAgbDoge1xuICAgICAgbmFtZTogJ2wnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMC4wMDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIGxpdHJlXG4gICAgbGl0cmU6IHtcbiAgICAgIG5hbWU6ICdsaXRyZScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLFxuICAgICAgdmFsdWU6IDAuMDAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBjdWluOiB7XG4gICAgICBuYW1lOiAnY3VpbicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDEuNjM4NzA2NGUtNSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gMS42Mzg3MDY0ZS01IG0zXG4gICAgY3VmdDoge1xuICAgICAgbmFtZTogJ2N1ZnQnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjAyODMxNjg0NjU5MixcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gMjguMzE2IDg0NiA1OTIgTFxuICAgIGN1eWQ6IHtcbiAgICAgIG5hbWU6ICdjdXlkJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC43NjQ1NTQ4NTc5ODQsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIDc2NC41NTQgODU3IDk4NCBMXG4gICAgdGVhc3Bvb246IHtcbiAgICAgIG5hbWU6ICd0ZWFzcG9vbicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuMDAwMDA1LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyA1IG1MXG4gICAgdGFibGVzcG9vbjoge1xuICAgICAgbmFtZTogJ3RhYmxlc3Bvb24nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjAwMDAxNSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gMTUgbUxcbiAgICAvLyB7bmFtZTogJ2N1cCcsIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLCBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwgdmFsdWU6IDAuMDAwMjQwLCBvZmZzZXQ6IDB9LCAvLyAyNDAgbUwgIC8vIG5vdCBwb3NzaWJsZSwgd2UgaGF2ZSBhbHJlYWR5IGFub3RoZXIgY3VwXG4gICAgZHJvcDoge1xuICAgICAgbmFtZTogJ2Ryb3AnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiA1ZS04LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAwLjA1IG1MID0gNWUtOCBtM1xuICAgIGd0dDoge1xuICAgICAgbmFtZTogJ2d0dCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDVlLTgsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIDAuMDUgbUwgPSA1ZS04IG0zXG4gICAgLy8gTGlxdWlkIHZvbHVtZVxuICAgIG1pbmltOiB7XG4gICAgICBuYW1lOiAnbWluaW0nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjAwMDAwMDA2MTYxMTUyLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAwLjA2MTYxMTUyIG1MXG4gICAgZmx1aWRkcmFtOiB7XG4gICAgICBuYW1lOiAnZmx1aWRkcmFtJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMDAwMDM2OTY2OTExLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAzLjY5NjY5MSBtTFxuICAgIGZsdWlkb3VuY2U6IHtcbiAgICAgIG5hbWU6ICdmbHVpZG91bmNlJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMDAwMjk1NzM1MyxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gMjkuNTczNTMgbUxcbiAgICBnaWxsOiB7XG4gICAgICBuYW1lOiAnZ2lsbCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuMDAwMTE4Mjk0MSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gMTE4LjI5NDEgbUxcbiAgICBjYzoge1xuICAgICAgbmFtZTogJ2NjJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMWUtNixcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gMWUtNiBMXG4gICAgY3VwOiB7XG4gICAgICBuYW1lOiAnY3VwJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMDAyMzY1ODgyLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAyMzYuNTg4MiBtTFxuICAgIHBpbnQ6IHtcbiAgICAgIG5hbWU6ICdwaW50JyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMDA0NzMxNzY1LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyA0NzMuMTc2NSBtTFxuICAgIHF1YXJ0OiB7XG4gICAgICBuYW1lOiAncXVhcnQnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjAwMDk0NjM1MjksXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIDk0Ni4zNTI5IG1MXG4gICAgZ2FsbG9uOiB7XG4gICAgICBuYW1lOiAnZ2FsbG9uJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMDM3ODU0MTIsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIDMuNzg1NDEyIExcbiAgICBiZWVyYmFycmVsOiB7XG4gICAgICBuYW1lOiAnYmVlcmJhcnJlbCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuMTE3MzQ3OCxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gMTE3LjM0NzggTFxuICAgIG9pbGJhcnJlbDoge1xuICAgICAgbmFtZTogJ29pbGJhcnJlbCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuMTU4OTg3MyxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gMTU4Ljk4NzMgTFxuICAgIGhvZ3NoZWFkOiB7XG4gICAgICBuYW1lOiAnaG9nc2hlYWQnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjIzODQ4MTAsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIDIzOC40ODEwIExcbiAgICAvLyB7bmFtZTogJ21pbicsIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLCBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwgdmFsdWU6IDAuMDAwMDAwMDYxNjExNTIsIG9mZnNldDogMH0sIC8vIDAuMDYxNjExNTIgbUwgLy8gbWluIGlzIGFscmVhZHkgaW4gdXNlIGFzIG1pbnV0ZVxuICAgIGZsZHI6IHtcbiAgICAgIG5hbWU6ICdmbGRyJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMDAwMDM2OTY2OTExLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAzLjY5NjY5MSBtTFxuICAgIGZsb3o6IHtcbiAgICAgIG5hbWU6ICdmbG96JyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMDAwMjk1NzM1MyxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gMjkuNTczNTMgbUxcbiAgICBnaToge1xuICAgICAgbmFtZTogJ2dpJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMDAxMTgyOTQxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAxMTguMjk0MSBtTFxuICAgIGNwOiB7XG4gICAgICBuYW1lOiAnY3AnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjAwMDIzNjU4ODIsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIDIzNi41ODgyIG1MXG4gICAgcHQ6IHtcbiAgICAgIG5hbWU6ICdwdCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuMDAwNDczMTc2NSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gNDczLjE3NjUgbUxcbiAgICBxdDoge1xuICAgICAgbmFtZTogJ3F0JyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMDA5NDYzNTI5LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyA5NDYuMzUyOSBtTFxuICAgIGdhbDoge1xuICAgICAgbmFtZTogJ2dhbCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuMDAzNzg1NDEyLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAzLjc4NTQxMiBMXG4gICAgYmJsOiB7XG4gICAgICBuYW1lOiAnYmJsJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4xMTczNDc4LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAxMTcuMzQ3OCBMXG4gICAgb2JsOiB7XG4gICAgICBuYW1lOiAnb2JsJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4xNTg5ODczLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAxNTguOTg3MyBMXG4gICAgLy8ge25hbWU6ICdob2dzaGVhZCcsIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLCBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwgdmFsdWU6IDAuMjM4NDgxMCwgb2Zmc2V0OiAwfSwgLy8gMjM4LjQ4MTAgTCAvLyBUT0RPOiBoaD9cbiAgICAvLyBNYXNzXG4gICAgZzoge1xuICAgICAgbmFtZTogJ2cnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5NQVNTLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IDAuMDAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBncmFtOiB7XG4gICAgICBuYW1lOiAnZ3JhbScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLk1BU1MsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORyxcbiAgICAgIHZhbHVlOiAwLjAwMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgdG9uOiB7XG4gICAgICBuYW1lOiAndG9uJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTUFTUyxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCxcbiAgICAgIHZhbHVlOiA5MDcuMTg0NzQsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIHQ6IHtcbiAgICAgIG5hbWU6ICd0JyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTUFTUyxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCxcbiAgICAgIHZhbHVlOiAxMDAwLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICB0b25uZToge1xuICAgICAgbmFtZTogJ3Rvbm5lJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTUFTUyxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLFxuICAgICAgdmFsdWU6IDEwMDAsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGdyYWluOiB7XG4gICAgICBuYW1lOiAnZ3JhaW4nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5NQVNTLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNjQuNzk4OTFlLTYsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGRyYW06IHtcbiAgICAgIG5hbWU6ICdkcmFtJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTUFTUyxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDEuNzcxODQ1MTk1MzEyNWUtMyxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgb3VuY2U6IHtcbiAgICAgIG5hbWU6ICdvdW5jZScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLk1BU1MsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAyOC4zNDk1MjMxMjVlLTMsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIHBvdW5kbWFzczoge1xuICAgICAgbmFtZTogJ3BvdW5kbWFzcycsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLk1BU1MsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiA0NTMuNTkyMzdlLTMsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGh1bmRyZWR3ZWlnaHQ6IHtcbiAgICAgIG5hbWU6ICdodW5kcmVkd2VpZ2h0JyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTUFTUyxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDQ1LjM1OTIzNyxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgc3RpY2s6IHtcbiAgICAgIG5hbWU6ICdzdGljaycsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLk1BU1MsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAxMTVlLTMsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIHN0b25lOiB7XG4gICAgICBuYW1lOiAnc3RvbmUnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5NQVNTLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNi4zNTAyOTMxOCxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgZ3I6IHtcbiAgICAgIG5hbWU6ICdncicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLk1BU1MsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiA2NC43OTg5MWUtNixcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgZHI6IHtcbiAgICAgIG5hbWU6ICdkcicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLk1BU1MsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAxLjc3MTg0NTE5NTMxMjVlLTMsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIG96OiB7XG4gICAgICBuYW1lOiAnb3onLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5NQVNTLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMjguMzQ5NTIzMTI1ZS0zLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBsYm06IHtcbiAgICAgIG5hbWU6ICdsYm0nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5NQVNTLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNDUzLjU5MjM3ZS0zLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBjd3Q6IHtcbiAgICAgIG5hbWU6ICdjd3QnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5NQVNTLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNDUuMzU5MjM3LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyBUaW1lXG4gICAgczoge1xuICAgICAgbmFtZTogJ3MnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5USU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIG1pbjoge1xuICAgICAgbmFtZTogJ21pbicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlRJTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiA2MCxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgaDoge1xuICAgICAgbmFtZTogJ2gnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5USU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMzYwMCxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgc2Vjb25kOiB7XG4gICAgICBuYW1lOiAnc2Vjb25kJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVElNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIHNlYzoge1xuICAgICAgbmFtZTogJ3NlYycsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlRJTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORyxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBtaW51dGU6IHtcbiAgICAgIG5hbWU6ICdtaW51dGUnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5USU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNjAsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGhvdXI6IHtcbiAgICAgIG5hbWU6ICdob3VyJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVElNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDM2MDAsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGRheToge1xuICAgICAgbmFtZTogJ2RheScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlRJTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiA4NjQwMCxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgd2Vlazoge1xuICAgICAgbmFtZTogJ3dlZWsnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5USU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNyAqIDg2NDAwLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBtb250aDoge1xuICAgICAgbmFtZTogJ21vbnRoJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVElNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDI2Mjk4MDAsXG4gICAgICAvLyAxLzEydGggb2YgSnVsaWFuIHllYXJcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgeWVhcjoge1xuICAgICAgbmFtZTogJ3llYXInLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5USU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMzE1NTc2MDAsXG4gICAgICAvLyBKdWxpYW4geWVhclxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBkZWNhZGU6IHtcbiAgICAgIG5hbWU6ICdkZWNhZGUnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5USU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMzE1NTc2MDAwLFxuICAgICAgLy8gSnVsaWFuIGRlY2FkZVxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBjZW50dXJ5OiB7XG4gICAgICBuYW1lOiAnY2VudHVyeScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlRJTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAzMTU1NzYwMDAwLFxuICAgICAgLy8gSnVsaWFuIGNlbnR1cnlcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgbWlsbGVubml1bToge1xuICAgICAgbmFtZTogJ21pbGxlbm5pdW0nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5USU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMzE1NTc2MDAwMDAsXG4gICAgICAvLyBKdWxpYW4gbWlsbGVubml1bVxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyBGcmVxdWVuY3lcbiAgICBoZXJ0ejoge1xuICAgICAgbmFtZTogJ0hlcnR6JyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuRlJFUVVFTkNZLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkxPTkcsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMCxcbiAgICAgIHJlY2lwcm9jYWw6IHRydWVcbiAgICB9LFxuICAgIEh6OiB7XG4gICAgICBuYW1lOiAnSHonLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5GUkVRVUVOQ1ksXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMCxcbiAgICAgIHJlY2lwcm9jYWw6IHRydWVcbiAgICB9LFxuICAgIC8vIEFuZ2xlXG4gICAgcmFkOiB7XG4gICAgICBuYW1lOiAncmFkJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuQU5HTEUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgcmFkaWFuOiB7XG4gICAgICBuYW1lOiAncmFkaWFuJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuQU5HTEUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORyxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyBkZWcgPSByYWQgLyAoMipwaSkgKiAzNjAgPSByYWQgLyAwLjAxNzQ1MzI5MjUxOTk0MzI5NTc2OTIzNjkwNzY4NDg4OFxuICAgIGRlZzoge1xuICAgICAgbmFtZTogJ2RlZycsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkFOR0xFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAvLyB3aWxsIGJlIGZpbGxlZCBpbiBieSBjYWxjdWxhdGVBbmdsZVZhbHVlcygpXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGRlZ3JlZToge1xuICAgICAgbmFtZTogJ2RlZ3JlZScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkFOR0xFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkxPTkcsXG4gICAgICB2YWx1ZTogbnVsbCxcbiAgICAgIC8vIHdpbGwgYmUgZmlsbGVkIGluIGJ5IGNhbGN1bGF0ZUFuZ2xlVmFsdWVzKClcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gZ3JhZCA9IHJhZCAvICgyKnBpKSAqIDQwMCAgPSByYWQgLyAwLjAxNTcwNzk2MzI2Nzk0ODk2NjE5MjMxMzIxNjkxNjM5OVxuICAgIGdyYWQ6IHtcbiAgICAgIG5hbWU6ICdncmFkJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuQU5HTEUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogbnVsbCxcbiAgICAgIC8vIHdpbGwgYmUgZmlsbGVkIGluIGJ5IGNhbGN1bGF0ZUFuZ2xlVmFsdWVzKClcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgZ3JhZGlhbjoge1xuICAgICAgbmFtZTogJ2dyYWRpYW4nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5BTkdMRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLFxuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAvLyB3aWxsIGJlIGZpbGxlZCBpbiBieSBjYWxjdWxhdGVBbmdsZVZhbHVlcygpXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIGN5Y2xlID0gcmFkIC8gKDIqcGkpID0gcmFkIC8gNi4yODMxODUzMDcxNzk1ODY0NzY5MjUyODY3NjY1NzkzXG4gICAgY3ljbGU6IHtcbiAgICAgIG5hbWU6ICdjeWNsZScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkFOR0xFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogbnVsbCxcbiAgICAgIC8vIHdpbGwgYmUgZmlsbGVkIGluIGJ5IGNhbGN1bGF0ZUFuZ2xlVmFsdWVzKClcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gYXJjc2VjID0gcmFkIC8gKDM2MDAgKiAoMzYwIC8gMiAqIHBpKSkgPSByYWQgLyAwLjAwMDAwNDg0ODEzNjgxMTA5NTM1OTkzNTg5OTE0MTAyMzU3OTVcbiAgICBhcmNzZWM6IHtcbiAgICAgIG5hbWU6ICdhcmNzZWMnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5BTkdMRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAvLyB3aWxsIGJlIGZpbGxlZCBpbiBieSBjYWxjdWxhdGVBbmdsZVZhbHVlcygpXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIGFyY21pbiA9IHJhZCAvICg2MCAqICgzNjAgLyAyICogcGkpKSA9IHJhZCAvIDAuMDAwMjkwODg4MjA4NjY1NzIxNTk2MTUzOTQ4NDYxNDE0NzdcbiAgICBhcmNtaW46IHtcbiAgICAgIG5hbWU6ICdhcmNtaW4nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5BTkdMRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAvLyB3aWxsIGJlIGZpbGxlZCBpbiBieSBjYWxjdWxhdGVBbmdsZVZhbHVlcygpXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIEVsZWN0cmljIGN1cnJlbnRcbiAgICBBOiB7XG4gICAgICBuYW1lOiAnQScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkNVUlJFTlQsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgYW1wZXJlOiB7XG4gICAgICBuYW1lOiAnYW1wZXJlJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuQ1VSUkVOVCxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIFRlbXBlcmF0dXJlXG4gICAgLy8gSyhDKSA9IMKwQyArIDI3My4xNVxuICAgIC8vIEsoRikgPSAowrBGICsgNDU5LjY3KSAvIDEuOFxuICAgIC8vIEsoUikgPSDCsFIgLyAxLjhcbiAgICBLOiB7XG4gICAgICBuYW1lOiAnSycsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlRFTVBFUkFUVVJFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgZGVnQzoge1xuICAgICAgbmFtZTogJ2RlZ0MnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5URU1QRVJBVFVSRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDI3My4xNVxuICAgIH0sXG4gICAgZGVnRjoge1xuICAgICAgbmFtZTogJ2RlZ0YnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5URU1QRVJBVFVSRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDEgLyAxLjgsXG4gICAgICBvZmZzZXQ6IDQ1OS42N1xuICAgIH0sXG4gICAgZGVnUjoge1xuICAgICAgbmFtZTogJ2RlZ1InLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5URU1QRVJBVFVSRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDEgLyAxLjgsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGtlbHZpbjoge1xuICAgICAgbmFtZTogJ2tlbHZpbicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlRFTVBFUkFUVVJFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgY2Vsc2l1czoge1xuICAgICAgbmFtZTogJ2NlbHNpdXMnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5URU1QRVJBVFVSRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDI3My4xNVxuICAgIH0sXG4gICAgZmFocmVuaGVpdDoge1xuICAgICAgbmFtZTogJ2ZhaHJlbmhlaXQnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5URU1QRVJBVFVSRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDEgLyAxLjgsXG4gICAgICBvZmZzZXQ6IDQ1OS42N1xuICAgIH0sXG4gICAgcmFua2luZToge1xuICAgICAgbmFtZTogJ3JhbmtpbmUnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5URU1QRVJBVFVSRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDEgLyAxLjgsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIGFtb3VudCBvZiBzdWJzdGFuY2VcbiAgICBtb2w6IHtcbiAgICAgIG5hbWU6ICdtb2wnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5BTU9VTlRfT0ZfU1VCU1RBTkNFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIG1vbGU6IHtcbiAgICAgIG5hbWU6ICdtb2xlJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuQU1PVU5UX09GX1NVQlNUQU5DRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIGx1bWlub3VzIGludGVuc2l0eVxuICAgIGNkOiB7XG4gICAgICBuYW1lOiAnY2QnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5MVU1JTk9VU19JTlRFTlNJVFksXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgY2FuZGVsYToge1xuICAgICAgbmFtZTogJ2NhbmRlbGEnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5MVU1JTk9VU19JTlRFTlNJVFksXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORyxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyBUT0RPOiB1bml0cyBTVEVSQURJQU5cbiAgICAvLyB7bmFtZTogJ3NyJywgYmFzZTogQkFTRV9VTklUUy5TVEVSQURJQU4sIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLCB2YWx1ZTogMSwgb2Zmc2V0OiAwfSxcbiAgICAvLyB7bmFtZTogJ3N0ZXJhZGlhbicsIGJhc2U6IEJBU0VfVU5JVFMuU1RFUkFESUFOLCBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwgdmFsdWU6IDEsIG9mZnNldDogMH0sXG4gICAgLy8gRm9yY2VcbiAgICBOOiB7XG4gICAgICBuYW1lOiAnTicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkZPUkNFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIG5ld3Rvbjoge1xuICAgICAgbmFtZTogJ25ld3RvbicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkZPUkNFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkxPTkcsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgZHluOiB7XG4gICAgICBuYW1lOiAnZHluJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuRk9SQ0UsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMC4wMDAwMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgZHluZToge1xuICAgICAgbmFtZTogJ2R5bmUnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5GT1JDRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLFxuICAgICAgdmFsdWU6IDAuMDAwMDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGxiZjoge1xuICAgICAgbmFtZTogJ2xiZicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkZPUkNFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNC40NDgyMjE2MTUyNjA1LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBwb3VuZGZvcmNlOiB7XG4gICAgICBuYW1lOiAncG91bmRmb3JjZScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkZPUkNFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNC40NDgyMjE2MTUyNjA1LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBraXA6IHtcbiAgICAgIG5hbWU6ICdraXAnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5GT1JDRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLFxuICAgICAgdmFsdWU6IDQ0NDguMjIxNixcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gRW5lcmd5XG4gICAgSjoge1xuICAgICAgbmFtZTogJ0onLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5FTkVSR1ksXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgam91bGU6IHtcbiAgICAgIG5hbWU6ICdqb3VsZScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkVORVJHWSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBlcmc6IHtcbiAgICAgIG5hbWU6ICdlcmcnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5FTkVSR1ksXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAxZS03LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBXaDoge1xuICAgICAgbmFtZTogJ1doJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuRU5FUkdZLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IDM2MDAsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIEJUVToge1xuICAgICAgbmFtZTogJ0JUVScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkVORVJHWSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5CVFUsXG4gICAgICB2YWx1ZTogMTA1NS4wNTU4NTI2MixcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgZVY6IHtcbiAgICAgIG5hbWU6ICdlVicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkVORVJHWSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCxcbiAgICAgIHZhbHVlOiAxLjYwMjE3NjU2NWUtMTksXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGVsZWN0cm9udm9sdDoge1xuICAgICAgbmFtZTogJ2VsZWN0cm9udm9sdCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkVORVJHWSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLFxuICAgICAgdmFsdWU6IDEuNjAyMTc2NTY1ZS0xOSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gUG93ZXJcbiAgICBXOiB7XG4gICAgICBuYW1lOiAnVycsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlBPV0VSLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIHdhdHQ6IHtcbiAgICAgIG5hbWU6ICd3YXR0JyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuUE9XRVIsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORyxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBocDoge1xuICAgICAgbmFtZTogJ2hwJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuUE9XRVIsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiA3NDUuNjk5ODcxNTM4NixcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gRWxlY3RyaWNhbCBwb3dlciB1bml0c1xuICAgIFZBUjoge1xuICAgICAgbmFtZTogJ1ZBUicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlBPV0VSLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IENvbXBsZXguSSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgVkE6IHtcbiAgICAgIG5hbWU6ICdWQScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlBPV0VSLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIFByZXNzdXJlXG4gICAgUGE6IHtcbiAgICAgIG5hbWU6ICdQYScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlBSRVNTVVJFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIHBzaToge1xuICAgICAgbmFtZTogJ3BzaScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlBSRVNTVVJFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNjg5NC43NTcyOTI3NjQ1OSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgYXRtOiB7XG4gICAgICBuYW1lOiAnYXRtJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuUFJFU1NVUkUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAxMDEzMjUsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGJhcjoge1xuICAgICAgbmFtZTogJ2JhcicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlBSRVNTVVJFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JUTE9ORyxcbiAgICAgIHZhbHVlOiAxMDAwMDAsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIHRvcnI6IHtcbiAgICAgIG5hbWU6ICd0b3JyJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuUFJFU1NVUkUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAxMzMuMzIyLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBtbUhnOiB7XG4gICAgICBuYW1lOiAnbW1IZycsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlBSRVNTVVJFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMTMzLjMyMixcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgbW1IMk86IHtcbiAgICAgIG5hbWU6ICdtbUgyTycsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlBSRVNTVVJFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogOS44MDY2NSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgY21IMk86IHtcbiAgICAgIG5hbWU6ICdjbUgyTycsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlBSRVNTVVJFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogOTguMDY2NSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gRWxlY3RyaWMgY2hhcmdlXG4gICAgY291bG9tYjoge1xuICAgICAgbmFtZTogJ2NvdWxvbWInLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5FTEVDVFJJQ19DSEFSR0UsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORyxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBDOiB7XG4gICAgICBuYW1lOiAnQycsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkVMRUNUUklDX0NIQVJHRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyBFbGVjdHJpYyBjYXBhY2l0YW5jZVxuICAgIGZhcmFkOiB7XG4gICAgICBuYW1lOiAnZmFyYWQnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5FTEVDVFJJQ19DQVBBQ0lUQU5DRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIEY6IHtcbiAgICAgIG5hbWU6ICdGJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuRUxFQ1RSSUNfQ0FQQUNJVEFOQ0UsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gRWxlY3RyaWMgcG90ZW50aWFsXG4gICAgdm9sdDoge1xuICAgICAgbmFtZTogJ3ZvbHQnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5FTEVDVFJJQ19QT1RFTlRJQUwsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORyxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBWOiB7XG4gICAgICBuYW1lOiAnVicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkVMRUNUUklDX1BPVEVOVElBTCxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyBFbGVjdHJpYyByZXNpc3RhbmNlXG4gICAgb2htOiB7XG4gICAgICBuYW1lOiAnb2htJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuRUxFQ1RSSUNfUkVTSVNUQU5DRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVExPTkcsXG4gICAgICAvLyBCb3RoIE1vaG0gYW5kIG1lZ2FvaG0gYXJlIGFjY2VwdGFibGVcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcblxuICAgIC8qXG4gICAgICogVW5pY29kZSBicmVha3MgaW4gYnJvd3NlcnMgaWYgY2hhcnNldCBpcyBub3Qgc3BlY2lmaWVkXG4gICAgzqk6IHtcbiAgICAgIG5hbWU6ICfOqScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkVMRUNUUklDX1JFU0lTVEFOQ0UsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgKi9cbiAgICAvLyBFbGVjdHJpYyBpbmR1Y3RhbmNlXG4gICAgaGVucnk6IHtcbiAgICAgIG5hbWU6ICdoZW5yeScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkVMRUNUUklDX0lORFVDVEFOQ0UsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORyxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBIOiB7XG4gICAgICBuYW1lOiAnSCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkVMRUNUUklDX0lORFVDVEFOQ0UsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gRWxlY3RyaWMgY29uZHVjdGFuY2VcbiAgICBzaWVtZW5zOiB7XG4gICAgICBuYW1lOiAnc2llbWVucycsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkVMRUNUUklDX0NPTkRVQ1RBTkNFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkxPTkcsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgUzoge1xuICAgICAgbmFtZTogJ1MnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5FTEVDVFJJQ19DT05EVUNUQU5DRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyBNYWduZXRpYyBmbHV4XG4gICAgd2ViZXI6IHtcbiAgICAgIG5hbWU6ICd3ZWJlcicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLk1BR05FVElDX0ZMVVgsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORyxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBXYjoge1xuICAgICAgbmFtZTogJ1diJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTUFHTkVUSUNfRkxVWCxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyBNYWduZXRpYyBmbHV4IGRlbnNpdHlcbiAgICB0ZXNsYToge1xuICAgICAgbmFtZTogJ3Rlc2xhJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTUFHTkVUSUNfRkxVWF9ERU5TSVRZLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkxPTkcsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgVDoge1xuICAgICAgbmFtZTogJ1QnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5NQUdORVRJQ19GTFVYX0RFTlNJVFksXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gQmluYXJ5XG4gICAgYjoge1xuICAgICAgbmFtZTogJ2InLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5CSVQsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuQklOQVJZX1NIT1JULFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGJpdHM6IHtcbiAgICAgIG5hbWU6ICdiaXRzJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuQklULFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkJJTkFSWV9MT05HLFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIEI6IHtcbiAgICAgIG5hbWU6ICdCJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuQklULFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkJJTkFSWV9TSE9SVCxcbiAgICAgIHZhbHVlOiA4LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBieXRlczoge1xuICAgICAgbmFtZTogJ2J5dGVzJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuQklULFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkJJTkFSWV9MT05HLFxuICAgICAgdmFsdWU6IDgsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9XG4gIH07IC8vIGFsaWFzZXMgKGZvcm1lcmx5IHBsdXJhbHMpXG5cbiAgdmFyIEFMSUFTRVMgPSB7XG4gICAgbWV0ZXJzOiAnbWV0ZXInLFxuICAgIGluY2hlczogJ2luY2gnLFxuICAgIGZlZXQ6ICdmb290JyxcbiAgICB5YXJkczogJ3lhcmQnLFxuICAgIG1pbGVzOiAnbWlsZScsXG4gICAgbGlua3M6ICdsaW5rJyxcbiAgICByb2RzOiAncm9kJyxcbiAgICBjaGFpbnM6ICdjaGFpbicsXG4gICAgYW5nc3Ryb21zOiAnYW5nc3Ryb20nLFxuICAgIGx0OiAnbCcsXG4gICAgbGl0cmVzOiAnbGl0cmUnLFxuICAgIGxpdGVyOiAnbGl0cmUnLFxuICAgIGxpdGVyczogJ2xpdHJlJyxcbiAgICB0ZWFzcG9vbnM6ICd0ZWFzcG9vbicsXG4gICAgdGFibGVzcG9vbnM6ICd0YWJsZXNwb29uJyxcbiAgICBtaW5pbXM6ICdtaW5pbScsXG4gICAgZmx1aWRkcmFtczogJ2ZsdWlkZHJhbScsXG4gICAgZmx1aWRvdW5jZXM6ICdmbHVpZG91bmNlJyxcbiAgICBnaWxsczogJ2dpbGwnLFxuICAgIGN1cHM6ICdjdXAnLFxuICAgIHBpbnRzOiAncGludCcsXG4gICAgcXVhcnRzOiAncXVhcnQnLFxuICAgIGdhbGxvbnM6ICdnYWxsb24nLFxuICAgIGJlZXJiYXJyZWxzOiAnYmVlcmJhcnJlbCcsXG4gICAgb2lsYmFycmVsczogJ29pbGJhcnJlbCcsXG4gICAgaG9nc2hlYWRzOiAnaG9nc2hlYWQnLFxuICAgIGd0dHM6ICdndHQnLFxuICAgIGdyYW1zOiAnZ3JhbScsXG4gICAgdG9uczogJ3RvbicsXG4gICAgdG9ubmVzOiAndG9ubmUnLFxuICAgIGdyYWluczogJ2dyYWluJyxcbiAgICBkcmFtczogJ2RyYW0nLFxuICAgIG91bmNlczogJ291bmNlJyxcbiAgICBwb3VuZG1hc3NlczogJ3BvdW5kbWFzcycsXG4gICAgaHVuZHJlZHdlaWdodHM6ICdodW5kcmVkd2VpZ2h0JyxcbiAgICBzdGlja3M6ICdzdGljaycsXG4gICAgbGI6ICdsYm0nLFxuICAgIGxiczogJ2xibScsXG4gICAga2lwczogJ2tpcCcsXG4gICAgYWNyZXM6ICdhY3JlJyxcbiAgICBoZWN0YXJlczogJ2hlY3RhcmUnLFxuICAgIHNxZmVldDogJ3NxZnQnLFxuICAgIHNxeWFyZDogJ3NxeWQnLFxuICAgIHNxbWlsZTogJ3NxbWknLFxuICAgIHNxbWlsZXM6ICdzcW1pJyxcbiAgICBtbWhnOiAnbW1IZycsXG4gICAgbW1oMm86ICdtbUgyTycsXG4gICAgY21oMm86ICdjbUgyTycsXG4gICAgc2Vjb25kczogJ3NlY29uZCcsXG4gICAgc2VjczogJ3NlY29uZCcsXG4gICAgbWludXRlczogJ21pbnV0ZScsXG4gICAgbWluczogJ21pbnV0ZScsXG4gICAgaG91cnM6ICdob3VyJyxcbiAgICBocjogJ2hvdXInLFxuICAgIGhyczogJ2hvdXInLFxuICAgIGRheXM6ICdkYXknLFxuICAgIHdlZWtzOiAnd2VlaycsXG4gICAgbW9udGhzOiAnbW9udGgnLFxuICAgIHllYXJzOiAneWVhcicsXG4gICAgZGVjYWRlczogJ2RlY2FkZScsXG4gICAgY2VudHVyaWVzOiAnY2VudHVyeScsXG4gICAgbWlsbGVubmlhOiAnbWlsbGVubml1bScsXG4gICAgaGVydHo6ICdoZXJ0eicsXG4gICAgcmFkaWFuczogJ3JhZGlhbicsXG4gICAgZGVncmVlczogJ2RlZ3JlZScsXG4gICAgZ3JhZGlhbnM6ICdncmFkaWFuJyxcbiAgICBjeWNsZXM6ICdjeWNsZScsXG4gICAgYXJjc2Vjb25kOiAnYXJjc2VjJyxcbiAgICBhcmNzZWNvbmRzOiAnYXJjc2VjJyxcbiAgICBhcmNtaW51dGU6ICdhcmNtaW4nLFxuICAgIGFyY21pbnV0ZXM6ICdhcmNtaW4nLFxuICAgIEJUVXM6ICdCVFUnLFxuICAgIHdhdHRzOiAnd2F0dCcsXG4gICAgam91bGVzOiAnam91bGUnLFxuICAgIGFtcGVyZXM6ICdhbXBlcmUnLFxuICAgIGNvdWxvbWJzOiAnY291bG9tYicsXG4gICAgdm9sdHM6ICd2b2x0JyxcbiAgICBvaG1zOiAnb2htJyxcbiAgICBmYXJhZHM6ICdmYXJhZCcsXG4gICAgd2ViZXJzOiAnd2ViZXInLFxuICAgIHRlc2xhczogJ3Rlc2xhJyxcbiAgICBlbGVjdHJvbnZvbHRzOiAnZWxlY3Ryb252b2x0JyxcbiAgICBtb2xlczogJ21vbGUnLFxuICAgIGJpdDogJ2JpdHMnLFxuICAgIFwiYnl0ZVwiOiAnYnl0ZXMnXG4gIH07XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIHZhbHVlcyBmb3IgdGhlIGFuZ2xlIHVuaXRzLlxuICAgKiBWYWx1ZSBpcyBjYWxjdWxhdGVkIGFzIG51bWJlciBvciBCaWdOdW1iZXIgZGVwZW5kaW5nIG9uIHRoZSBjb25maWd1cmF0aW9uXG4gICAqIEBwYXJhbSB7e251bWJlcjogJ251bWJlcicgfCAnQmlnTnVtYmVyJ319IGNvbmZpZ1xuICAgKi9cblxuICBmdW5jdGlvbiBjYWxjdWxhdGVBbmdsZVZhbHVlcyhjb25maWcpIHtcbiAgICBpZiAoY29uZmlnLm51bWJlciA9PT0gJ0JpZ051bWJlcicpIHtcbiAgICAgIHZhciBwaSA9ICgwLCBfY29uc3RhbnRzLmNyZWF0ZUJpZ051bWJlclBpKShfQmlnTnVtYmVyKTtcbiAgICAgIFVOSVRTLnJhZC52YWx1ZSA9IG5ldyBfQmlnTnVtYmVyKDEpO1xuICAgICAgVU5JVFMuZGVnLnZhbHVlID0gcGkuZGl2KDE4MCk7IC8vIDIgKiBwaSAvIDM2MFxuXG4gICAgICBVTklUUy5ncmFkLnZhbHVlID0gcGkuZGl2KDIwMCk7IC8vIDIgKiBwaSAvIDQwMFxuXG4gICAgICBVTklUUy5jeWNsZS52YWx1ZSA9IHBpLnRpbWVzKDIpOyAvLyAyICogcGlcblxuICAgICAgVU5JVFMuYXJjc2VjLnZhbHVlID0gcGkuZGl2KDY0ODAwMCk7IC8vIDIgKiBwaSAvIDM2MCAvIDM2MDBcblxuICAgICAgVU5JVFMuYXJjbWluLnZhbHVlID0gcGkuZGl2KDEwODAwKTsgLy8gMiAqIHBpIC8gMzYwIC8gNjBcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gbnVtYmVyXG4gICAgICBVTklUUy5yYWQudmFsdWUgPSAxO1xuICAgICAgVU5JVFMuZGVnLnZhbHVlID0gTWF0aC5QSSAvIDE4MDsgLy8gMiAqIHBpIC8gMzYwXG5cbiAgICAgIFVOSVRTLmdyYWQudmFsdWUgPSBNYXRoLlBJIC8gMjAwOyAvLyAyICogcGkgLyA0MDBcblxuICAgICAgVU5JVFMuY3ljbGUudmFsdWUgPSBNYXRoLlBJICogMjsgLy8gMiAqIHBpXG5cbiAgICAgIFVOSVRTLmFyY3NlYy52YWx1ZSA9IE1hdGguUEkgLyA2NDgwMDA7IC8vIDIgKiBwaSAvIDM2MCAvIDM2MDBcblxuICAgICAgVU5JVFMuYXJjbWluLnZhbHVlID0gTWF0aC5QSSAvIDEwODAwOyAvLyAyICogcGkgLyAzNjAgLyA2MFxuICAgIH0gLy8gY29weSB0byB0aGUgZnVsbCBuYW1lcyBvZiB0aGUgYW5nbGVzXG5cblxuICAgIFVOSVRTLnJhZGlhbi52YWx1ZSA9IFVOSVRTLnJhZC52YWx1ZTtcbiAgICBVTklUUy5kZWdyZWUudmFsdWUgPSBVTklUUy5kZWcudmFsdWU7XG4gICAgVU5JVFMuZ3JhZGlhbi52YWx1ZSA9IFVOSVRTLmdyYWQudmFsdWU7XG4gIH0gLy8gYXBwbHkgdGhlIGFuZ2xlIHZhbHVlcyBub3dcblxuXG4gIGNhbGN1bGF0ZUFuZ2xlVmFsdWVzKGNvbmZpZyk7XG5cbiAgaWYgKG9uKSB7XG4gICAgLy8gcmVjYWxjdWxhdGUgdGhlIHZhbHVlcyBvbiBjaGFuZ2Ugb2YgY29uZmlndXJhdGlvblxuICAgIG9uKCdjb25maWcnLCBmdW5jdGlvbiAoY3VyciwgcHJldikge1xuICAgICAgaWYgKGN1cnIubnVtYmVyICE9PSBwcmV2Lm51bWJlcikge1xuICAgICAgICBjYWxjdWxhdGVBbmdsZVZhbHVlcyhjdXJyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQSB1bml0IHN5c3RlbSBpcyBhIHNldCBvZiBkaW1lbnNpb25hbGx5IGluZGVwZW5kZW50IGJhc2UgdW5pdHMgcGx1cyBhIHNldCBvZiBkZXJpdmVkIHVuaXRzLCBmb3JtZWQgYnkgbXVsdGlwbGljYXRpb24gYW5kIGRpdmlzaW9uIG9mIHRoZSBiYXNlIHVuaXRzLCB0aGF0IGFyZSBieSBjb252ZW50aW9uIHVzZWQgd2l0aCB0aGUgdW5pdCBzeXN0ZW0uXG4gICAqIEEgdXNlciBwZXJoYXBzIGNvdWxkIGlzc3VlIGEgY29tbWFuZCB0byBzZWxlY3QgYSBwcmVmZXJyZWQgdW5pdCBzeXN0ZW0sIG9yIHVzZSB0aGUgZGVmYXVsdCAoc2VlIGJlbG93KS5cbiAgICogQXV0byB1bml0IHN5c3RlbTogVGhlIGRlZmF1bHQgdW5pdCBzeXN0ZW0gaXMgdXBkYXRlZCBvbiB0aGUgZmx5IGFueXRpbWUgYSB1bml0IGlzIHBhcnNlZC4gVGhlIGNvcnJlc3BvbmRpbmcgdW5pdCBpbiB0aGUgZGVmYXVsdCB1bml0IHN5c3RlbSBpcyB1cGRhdGVkLCBzbyB0aGF0IGFuc3dlcnMgYXJlIGdpdmVuIGluIHRoZSBzYW1lIHVuaXRzIHRoZSB1c2VyIHN1cHBsaWVzLlxuICAgKi9cblxuXG4gIHZhciBVTklUX1NZU1RFTVMgPSB7XG4gICAgc2k6IHtcbiAgICAgIC8vIEJhc2UgdW5pdHNcbiAgICAgIE5PTkU6IHtcbiAgICAgICAgdW5pdDogVU5JVF9OT05FLFxuICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLk5PTkVbJyddXG4gICAgICB9LFxuICAgICAgTEVOR1RIOiB7XG4gICAgICAgIHVuaXQ6IFVOSVRTLm0sXG4gICAgICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlRbJyddXG4gICAgICB9LFxuICAgICAgTUFTUzoge1xuICAgICAgICB1bml0OiBVTklUUy5nLFxuICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLlNIT1JULmtcbiAgICAgIH0sXG4gICAgICBUSU1FOiB7XG4gICAgICAgIHVuaXQ6IFVOSVRTLnMsXG4gICAgICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlRbJyddXG4gICAgICB9LFxuICAgICAgQ1VSUkVOVDoge1xuICAgICAgICB1bml0OiBVTklUUy5BLFxuICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLlNIT1JUWycnXVxuICAgICAgfSxcbiAgICAgIFRFTVBFUkFUVVJFOiB7XG4gICAgICAgIHVuaXQ6IFVOSVRTLkssXG4gICAgICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlRbJyddXG4gICAgICB9LFxuICAgICAgTFVNSU5PVVNfSU5URU5TSVRZOiB7XG4gICAgICAgIHVuaXQ6IFVOSVRTLmNkLFxuICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLlNIT1JUWycnXVxuICAgICAgfSxcbiAgICAgIEFNT1VOVF9PRl9TVUJTVEFOQ0U6IHtcbiAgICAgICAgdW5pdDogVU5JVFMubW9sLFxuICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLlNIT1JUWycnXVxuICAgICAgfSxcbiAgICAgIEFOR0xFOiB7XG4gICAgICAgIHVuaXQ6IFVOSVRTLnJhZCxcbiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5TSE9SVFsnJ11cbiAgICAgIH0sXG4gICAgICBCSVQ6IHtcbiAgICAgICAgdW5pdDogVU5JVFMuYml0cyxcbiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5TSE9SVFsnJ11cbiAgICAgIH0sXG4gICAgICAvLyBEZXJpdmVkIHVuaXRzXG4gICAgICBGT1JDRToge1xuICAgICAgICB1bml0OiBVTklUUy5OLFxuICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLlNIT1JUWycnXVxuICAgICAgfSxcbiAgICAgIEVORVJHWToge1xuICAgICAgICB1bml0OiBVTklUUy5KLFxuICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLlNIT1JUWycnXVxuICAgICAgfSxcbiAgICAgIFBPV0VSOiB7XG4gICAgICAgIHVuaXQ6IFVOSVRTLlcsXG4gICAgICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlRbJyddXG4gICAgICB9LFxuICAgICAgUFJFU1NVUkU6IHtcbiAgICAgICAgdW5pdDogVU5JVFMuUGEsXG4gICAgICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlRbJyddXG4gICAgICB9LFxuICAgICAgRUxFQ1RSSUNfQ0hBUkdFOiB7XG4gICAgICAgIHVuaXQ6IFVOSVRTLkMsXG4gICAgICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlRbJyddXG4gICAgICB9LFxuICAgICAgRUxFQ1RSSUNfQ0FQQUNJVEFOQ0U6IHtcbiAgICAgICAgdW5pdDogVU5JVFMuRixcbiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5TSE9SVFsnJ11cbiAgICAgIH0sXG4gICAgICBFTEVDVFJJQ19QT1RFTlRJQUw6IHtcbiAgICAgICAgdW5pdDogVU5JVFMuVixcbiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5TSE9SVFsnJ11cbiAgICAgIH0sXG4gICAgICBFTEVDVFJJQ19SRVNJU1RBTkNFOiB7XG4gICAgICAgIHVuaXQ6IFVOSVRTLm9obSxcbiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5TSE9SVFsnJ11cbiAgICAgIH0sXG4gICAgICBFTEVDVFJJQ19JTkRVQ1RBTkNFOiB7XG4gICAgICAgIHVuaXQ6IFVOSVRTLkgsXG4gICAgICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlRbJyddXG4gICAgICB9LFxuICAgICAgRUxFQ1RSSUNfQ09ORFVDVEFOQ0U6IHtcbiAgICAgICAgdW5pdDogVU5JVFMuUyxcbiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5TSE9SVFsnJ11cbiAgICAgIH0sXG4gICAgICBNQUdORVRJQ19GTFVYOiB7XG4gICAgICAgIHVuaXQ6IFVOSVRTLldiLFxuICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLlNIT1JUWycnXVxuICAgICAgfSxcbiAgICAgIE1BR05FVElDX0ZMVVhfREVOU0lUWToge1xuICAgICAgICB1bml0OiBVTklUUy5ULFxuICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLlNIT1JUWycnXVxuICAgICAgfSxcbiAgICAgIEZSRVFVRU5DWToge1xuICAgICAgICB1bml0OiBVTklUUy5IeixcbiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5TSE9SVFsnJ11cbiAgICAgIH1cbiAgICB9XG4gIH07IC8vIENsb25lIHRvIGNyZWF0ZSB0aGUgb3RoZXIgdW5pdCBzeXN0ZW1zXG5cbiAgVU5JVF9TWVNURU1TLmNncyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoVU5JVF9TWVNURU1TLnNpKSk7XG4gIFVOSVRfU1lTVEVNUy5jZ3MuTEVOR1RIID0ge1xuICAgIHVuaXQ6IFVOSVRTLm0sXG4gICAgcHJlZml4OiBQUkVGSVhFUy5TSE9SVC5jXG4gIH07XG4gIFVOSVRfU1lTVEVNUy5jZ3MuTUFTUyA9IHtcbiAgICB1bml0OiBVTklUUy5nLFxuICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlRbJyddXG4gIH07XG4gIFVOSVRfU1lTVEVNUy5jZ3MuRk9SQ0UgPSB7XG4gICAgdW5pdDogVU5JVFMuZHluLFxuICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlRbJyddXG4gIH07XG4gIFVOSVRfU1lTVEVNUy5jZ3MuRU5FUkdZID0ge1xuICAgIHVuaXQ6IFVOSVRTLmVyZyxcbiAgICBwcmVmaXg6IFBSRUZJWEVTLk5PTkVbJyddXG4gIH07IC8vIHRoZXJlIGFyZSB3aG9sbHkgNCB1bmlxdWUgY2dzIHN5c3RlbXMgZm9yIGVsZWN0cmljaXR5IGFuZCBtYWduZXRpc20sXG4gIC8vIHNvIGxldCdzIG5vdCB3b3JyeSBhYm91dCBpdCB1bmxlc3Mgc29tZWJvZHkgY29tcGxhaW5zXG5cbiAgVU5JVF9TWVNURU1TLnVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShVTklUX1NZU1RFTVMuc2kpKTtcbiAgVU5JVF9TWVNURU1TLnVzLkxFTkdUSCA9IHtcbiAgICB1bml0OiBVTklUUy5mdCxcbiAgICBwcmVmaXg6IFBSRUZJWEVTLk5PTkVbJyddXG4gIH07XG4gIFVOSVRfU1lTVEVNUy51cy5NQVNTID0ge1xuICAgIHVuaXQ6IFVOSVRTLmxibSxcbiAgICBwcmVmaXg6IFBSRUZJWEVTLk5PTkVbJyddXG4gIH07XG4gIFVOSVRfU1lTVEVNUy51cy5URU1QRVJBVFVSRSA9IHtcbiAgICB1bml0OiBVTklUUy5kZWdGLFxuICAgIHByZWZpeDogUFJFRklYRVMuTk9ORVsnJ11cbiAgfTtcbiAgVU5JVF9TWVNURU1TLnVzLkZPUkNFID0ge1xuICAgIHVuaXQ6IFVOSVRTLmxiZixcbiAgICBwcmVmaXg6IFBSRUZJWEVTLk5PTkVbJyddXG4gIH07XG4gIFVOSVRfU1lTVEVNUy51cy5FTkVSR1kgPSB7XG4gICAgdW5pdDogVU5JVFMuQlRVLFxuICAgIHByZWZpeDogUFJFRklYRVMuQlRVWycnXVxuICB9O1xuICBVTklUX1NZU1RFTVMudXMuUE9XRVIgPSB7XG4gICAgdW5pdDogVU5JVFMuaHAsXG4gICAgcHJlZml4OiBQUkVGSVhFUy5OT05FWycnXVxuICB9O1xuICBVTklUX1NZU1RFTVMudXMuUFJFU1NVUkUgPSB7XG4gICAgdW5pdDogVU5JVFMucHNpLFxuICAgIHByZWZpeDogUFJFRklYRVMuTk9ORVsnJ11cbiAgfTsgLy8gQWRkIGFkZGl0aW9uYWwgdW5pdCBzeXN0ZW1zIGhlcmUuXG4gIC8vIENob29zZSBhIHVuaXQgc3lzdGVtIHRvIHNlZWQgdGhlIGF1dG8gdW5pdCBzeXN0ZW0uXG5cbiAgVU5JVF9TWVNURU1TLmF1dG8gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KFVOSVRfU1lTVEVNUy5zaSkpOyAvLyBTZXQgdGhlIGN1cnJlbnQgdW5pdCBzeXN0ZW1cblxuICB2YXIgY3VycmVudFVuaXRTeXN0ZW0gPSBVTklUX1NZU1RFTVMuYXV0bztcbiAgLyoqXG4gICAqIFNldCBhIHVuaXQgc3lzdGVtIGZvciBmb3JtYXR0aW5nIGRlcml2ZWQgdW5pdHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZV0gVGhlIG5hbWUgb2YgdGhlIHVuaXQgc3lzdGVtLlxuICAgKi9cblxuICBVbml0LnNldFVuaXRTeXN0ZW0gPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoVU5JVF9TWVNURU1TLCBuYW1lKSkge1xuICAgICAgY3VycmVudFVuaXRTeXN0ZW0gPSBVTklUX1NZU1RFTVNbbmFtZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5pdCBzeXN0ZW0gJyArIG5hbWUgKyAnIGRvZXMgbm90IGV4aXN0LiBDaG9pY2VzIGFyZTogJyArIE9iamVjdC5rZXlzKFVOSVRfU1lTVEVNUykuam9pbignLCAnKSk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogUmV0dXJuIHRoZSBjdXJyZW50IHVuaXQgc3lzdGVtLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBjdXJyZW50IHVuaXQgc3lzdGVtLlxuICAgKi9cblxuXG4gIFVuaXQuZ2V0VW5pdFN5c3RlbSA9IGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBfa2V5IGluIFVOSVRfU1lTVEVNUykge1xuICAgICAgaWYgKFVOSVRfU1lTVEVNU1tfa2V5XSA9PT0gY3VycmVudFVuaXRTeXN0ZW0pIHtcbiAgICAgICAgcmV0dXJuIF9rZXk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQ29udmVydGVycyB0byBjb252ZXJ0IGZyb20gbnVtYmVyIHRvIGFuIG90aGVyIG51bWVyaWMgdHlwZSBsaWtlIEJpZ051bWJlclxuICAgKiBvciBGcmFjdGlvblxuICAgKi9cblxuXG4gIFVuaXQudHlwZUNvbnZlcnRlcnMgPSB7XG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIG5ldyBfQmlnTnVtYmVyKHggKyAnJyk7IC8vIHN0cmluZ2lmeSB0byBwcmV2ZW50IGNvbnN0cnVjdG9yIGVycm9yXG4gICAgfSxcbiAgICBGcmFjdGlvbjogZnVuY3Rpb24gRnJhY3Rpb24oeCkge1xuICAgICAgcmV0dXJuIG5ldyBfRnJhY3Rpb24oeCk7XG4gICAgfSxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4O1xuICAgIH0sXG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHg7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogUmV0cmlldmUgdGhlIHJpZ2h0IGNvbnZlcnRvciBmdW5jdGlvbiBjb3JyZXNwb25kaW5nIHdpdGggdGhlIHR5cGVcbiAgICogb2YgcHJvdmlkZWQgZXhhbXBsZVZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAgIEEgc3RyaW5nICdudW1iZXInLCAnQmlnTnVtYmVyJywgb3IgJ0ZyYWN0aW9uJ1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIEluIGNhc2Ugb2YgYW4gdW5rbm93biB0eXBlLFxuICAgKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAgICovXG5cbiAgVW5pdC5fZ2V0TnVtYmVyQ29udmVydGVyID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBpZiAoIVVuaXQudHlwZUNvbnZlcnRlcnNbdHlwZV0pIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vuc3VwcG9ydGVkIHR5cGUgXCInICsgdHlwZSArICdcIicpO1xuICAgIH1cblxuICAgIHJldHVybiBVbml0LnR5cGVDb252ZXJ0ZXJzW3R5cGVdO1xuICB9OyAvLyBBZGQgZGltZW5zaW9ucyB0byBlYWNoIGJ1aWx0LWluIHVuaXRcblxuXG4gIGZvciAodmFyIF9rZXkyIGluIFVOSVRTKSB7XG4gICAgdmFyIHVuaXQgPSBVTklUU1tfa2V5Ml07XG4gICAgdW5pdC5kaW1lbnNpb25zID0gdW5pdC5iYXNlLmRpbWVuc2lvbnM7XG4gIH0gLy8gQ3JlYXRlIGFsaWFzZXNcblxuXG4gIGZvciAodmFyIF9uYW1lMiBpbiBBTElBU0VTKSB7XG4gICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShBTElBU0VTLCBfbmFtZTIpKSB7XG4gICAgICB2YXIgX3VuaXQyID0gVU5JVFNbQUxJQVNFU1tfbmFtZTJdXTtcbiAgICAgIHZhciBhbGlhcyA9IHt9O1xuXG4gICAgICBmb3IgKHZhciBfa2V5MyBpbiBfdW5pdDIpIHtcbiAgICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShfdW5pdDIsIF9rZXkzKSkge1xuICAgICAgICAgIGFsaWFzW19rZXkzXSA9IF91bml0Mltfa2V5M107XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYWxpYXMubmFtZSA9IF9uYW1lMjtcbiAgICAgIFVOSVRTW19uYW1lMl0gPSBhbGlhcztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBhc3NlcnRVbml0TmFtZUlzVmFsaWQobmFtZSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIF9jID0gbmFtZS5jaGFyQXQoaSk7XG5cbiAgICAgIHZhciBpc1ZhbGlkQWxwaGEgPSBmdW5jdGlvbiBpc1ZhbGlkQWxwaGEocCkge1xuICAgICAgICByZXR1cm4gL15bYS16QS1aXSQvLnRlc3QocCk7XG4gICAgICB9O1xuXG4gICAgICB2YXIgX2lzRGlnaXQgPSBmdW5jdGlvbiBfaXNEaWdpdChjKSB7XG4gICAgICAgIHJldHVybiBjID49ICcwJyAmJiBjIDw9ICc5JztcbiAgICAgIH07XG5cbiAgICAgIGlmIChpID09PSAwICYmICFpc1ZhbGlkQWxwaGEoX2MpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB1bml0IG5hbWUgKG11c3QgYmVnaW4gd2l0aCBhbHBoYSBjaGFyYWN0ZXIpOiBcIicgKyBuYW1lICsgJ1wiJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpID4gMCAmJiAhKGlzVmFsaWRBbHBoYShfYykgfHwgX2lzRGlnaXQoX2MpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdW5pdCBuYW1lIChvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFyZSBhbGxvd2VkKTogXCInICsgbmFtZSArICdcIicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogV3JhcHBlciBhcm91bmQgY3JlYXRlVW5pdFNpbmdsZS5cbiAgICogRXhhbXBsZTpcbiAgICogIGNyZWF0ZVVuaXQoe1xuICAgKiAgICBmb286IHsgfSxcbiAgICogICAgYmFyOiB7XG4gICAqICAgICAgZGVmaW5pdGlvbjogJ2tnL2ZvbycsXG4gICAqICAgICAgYWxpYXNlczogWydiYScsICdiYXJyJywgJ2JhcnMnXSxcbiAgICogICAgICBvZmZzZXQ6IDIwMFxuICAgKiAgICB9LFxuICAgKiAgICBiYXo6ICc0IGJhcidcbiAgICogIH0sXG4gICAqICB7XG4gICAqICAgIG92ZXJyaWRlOiB0cnVlXG4gICAqICB9KVxuICAgKiBAcGFyYW0ge29iamVjdH0gb2JqICAgICAgT2JqZWN0IG1hcC4gRWFjaCBrZXkgYmVjb21lcyBhIHVuaXQgd2hpY2ggaXMgZGVmaW5lZCBieSBpdHMgdmFsdWUuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuXG5cbiAgVW5pdC5jcmVhdGVVbml0ID0gZnVuY3Rpb24gKG9iaiwgb3B0aW9ucykge1xuICAgIGlmIChfdHlwZW9mKG9iaikgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiY3JlYXRlVW5pdCBleHBlY3RzIGZpcnN0IHBhcmFtZXRlciB0byBiZSBvZiB0eXBlICdPYmplY3QnXCIpO1xuICAgIH0gLy8gUmVtb3ZlIGFsbCB1bml0cyBhbmQgYWxpYXNlcyB3ZSBhcmUgb3ZlcnJpZGluZ1xuXG5cbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLm92ZXJyaWRlKSB7XG4gICAgICBmb3IgKHZhciBfa2V5NCBpbiBvYmopIHtcbiAgICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShvYmosIF9rZXk0KSkge1xuICAgICAgICAgIFVuaXQuZGVsZXRlVW5pdChfa2V5NCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob2JqW19rZXk0XS5hbGlhc2VzKSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmpbX2tleTRdLmFsaWFzZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIFVuaXQuZGVsZXRlVW5pdChvYmpbX2tleTRdLmFsaWFzZXNbaV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gVE9ETzogdHJhdmVyc2UgbXVsdGlwbGUgdGltZXMgdW50aWwgYWxsIHVuaXRzIGhhdmUgYmVlbiBhZGRlZFxuXG5cbiAgICB2YXIgbGFzdFVuaXQ7XG5cbiAgICBmb3IgKHZhciBfa2V5NSBpbiBvYmopIHtcbiAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkob2JqLCBfa2V5NSkpIHtcbiAgICAgICAgbGFzdFVuaXQgPSBVbml0LmNyZWF0ZVVuaXRTaW5nbGUoX2tleTUsIG9ialtfa2V5NV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBsYXN0VW5pdDtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIHVzZXItZGVmaW5lZCB1bml0IGFuZCByZWdpc3RlciBpdCB3aXRoIHRoZSBVbml0IHR5cGUuXG4gICAqIEV4YW1wbGU6XG4gICAqICBjcmVhdGVVbml0U2luZ2xlKCdrbm90JywgJzAuNTE0NDQ0NDQ0IG0vcycpXG4gICAqICBjcmVhdGVVbml0U2luZ2xlKCdhY3JlJywgbmV3IFVuaXQoNDM1NjAsICdmdF4yJykpXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lICAgICAgVGhlIG5hbWUgb2YgdGhlIG5ldyB1bml0LiBNdXN0IGJlIHVuaXF1ZS4gRXhhbXBsZTogJ2tub3QnXG4gICAqIEBwYXJhbSB7c3RyaW5nLCBVbml0LCBPYmplY3R9IGRlZmluaXRpb24gICAgICBEZWZpbml0aW9uIG9mIHRoZSB1bml0IGluIHRlcm1zXG4gICAqIG9mIGV4aXN0aW5nIHVuaXRzLiBGb3IgZXhhbXBsZSwgJzAuNTE0NDQ0NDQ0IG0gLyBzJy4gQ2FuIGJlIGEgVW5pdCwgYSBzdHJpbmcsXG4gICAqIG9yIGFuIE9iamVjdC4gSWYgYW4gT2JqZWN0LCBtYXkgaGF2ZSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gICAqICAgLSBkZWZpbml0aW9uIHtzdHJpbmd8VW5pdH0gVGhlIGRlZmluaXRpb24gb2YgdGhpcyB1bml0LlxuICAgKiAgIC0gcHJlZml4ZXMge3N0cmluZ30gXCJub25lXCIsIFwic2hvcnRcIiwgXCJsb25nXCIsIFwiYmluYXJ5X3Nob3J0XCIsIG9yIFwiYmluYXJ5X2xvbmdcIi5cbiAgICogICAgIFRoZSBkZWZhdWx0IGlzIFwibm9uZVwiLlxuICAgKiAgIC0gYWxpYXNlcyB7QXJyYXl9IEFycmF5IG9mIHN0cmluZ3MuIEV4YW1wbGU6IFsna25vdHMnLCAna3QnLCAna3RzJ11cbiAgICogICAtIG9mZnNldCB7TnVtZXJpY30gQW4gb2Zmc2V0IHRvIGFwcGx5IHdoZW4gY29udmVydGluZyBmcm9tIHRoZSB1bml0LiBGb3JcbiAgICogICAgIGV4YW1wbGUsIHRoZSBvZmZzZXQgZm9yIGNlbHNpdXMgaXMgMjczLjE1IGFuZCB0aGUgb2Zmc2V0IGZvciBmYXJoZW5oZWl0XG4gICAqICAgICBpcyA0NTkuNjcuIERlZmF1bHQgaXMgMC5cbiAgICogICAtIGJhc2VOYW1lIHtzdHJpbmd9IElmIHRoZSB1bml0J3MgZGltZW5zaW9uIGRvZXMgbm90IG1hdGNoIHRoYXQgb2YgYW55IG90aGVyXG4gICAqICAgICBiYXNlIHVuaXQsIHRoZSBuYW1lIG9mIHRoZSBuZXdseSBjcmVhdGUgYmFzZSB1bml0LiBPdGhlcndpc2UsIHRoaXMgcHJvcGVydHlcbiAgICogICAgIGhhcyBubyBlZmZlY3QuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zICAgKG9wdGlvbmFsKSBBbiBvYmplY3QgY29udGFpbmluZyBhbnkgb2YgdGhlIGZvbGxvd2luZ1xuICAgKiBwcm9wZXJ0aWVzOlxuICAgKiAgIC0gb3ZlcnJpZGUge2Jvb2xlYW59IFdoZXRoZXIgdGhpcyB1bml0IHNob3VsZCBiZSBhbGxvd2VkIHRvIG92ZXJyaWRlIGV4aXN0aW5nXG4gICAqICAgICB1bml0cy5cbiAgICpcbiAgICogQHJldHVybiB7VW5pdH1cbiAgICovXG5cblxuICBVbml0LmNyZWF0ZVVuaXRTaW5nbGUgPSBmdW5jdGlvbiAobmFtZSwgb2JqLCBvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnIHx8IG9iaiA9PT0gbnVsbCkge1xuICAgICAgb2JqID0ge307XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImNyZWF0ZVVuaXRTaW5nbGUgZXhwZWN0cyBmaXJzdCBwYXJhbWV0ZXIgdG8gYmUgb2YgdHlwZSAnc3RyaW5nJ1wiKTtcbiAgICB9IC8vIENoZWNrIGNvbGxpc2lvbnMgd2l0aCBleGlzdGluZyB1bml0c1xuXG5cbiAgICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKFVOSVRTLCBuYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY3JlYXRlIHVuaXQgXCInICsgbmFtZSArICdcIjogYSB1bml0IHdpdGggdGhhdCBuYW1lIGFscmVhZHkgZXhpc3RzJyk7XG4gICAgfSAvLyBUT0RPOiBWYWxpZGF0ZSBuYW1lIGZvciBjb2xsaXNpb25zIHdpdGggb3RoZXIgYnVpbHQtaW4gZnVuY3Rpb25zIChsaWtlIGFicyBvciBjb3MsIGZvciBleGFtcGxlKSwgYW5kIGZvciBhY2NlcHRhYmxlIHZhcmlhYmxlIG5hbWVzLiBGb3IgZXhhbXBsZSwgJzQyJyBpcyBwcm9iYWJseSBub3QgYSB2YWxpZCB1bml0LiBOb3IgaXMgJyUnLCBzaW5jZSBpdCBpcyBhbHNvIGFuIG9wZXJhdG9yLlxuXG5cbiAgICBhc3NlcnRVbml0TmFtZUlzVmFsaWQobmFtZSk7XG4gICAgdmFyIGRlZlVuaXQgPSBudWxsOyAvLyBUaGUgVW5pdCBmcm9tIHdoaWNoIHRoZSBuZXcgdW5pdCB3aWxsIGJlIGNyZWF0ZWQuXG5cbiAgICB2YXIgYWxpYXNlcyA9IFtdO1xuICAgIHZhciBvZmZzZXQgPSAwO1xuICAgIHZhciBkZWZpbml0aW9uO1xuICAgIHZhciBwcmVmaXhlcztcbiAgICB2YXIgYmFzZU5hbWU7XG5cbiAgICBpZiAob2JqICYmIG9iai50eXBlID09PSAnVW5pdCcpIHtcbiAgICAgIGRlZlVuaXQgPSBvYmouY2xvbmUoKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAob2JqICE9PSAnJykge1xuICAgICAgICBkZWZpbml0aW9uID0gb2JqO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoX3R5cGVvZihvYmopID09PSAnb2JqZWN0Jykge1xuICAgICAgZGVmaW5pdGlvbiA9IG9iai5kZWZpbml0aW9uO1xuICAgICAgcHJlZml4ZXMgPSBvYmoucHJlZml4ZXM7XG4gICAgICBvZmZzZXQgPSBvYmoub2Zmc2V0O1xuICAgICAgYmFzZU5hbWUgPSBvYmouYmFzZU5hbWU7XG5cbiAgICAgIGlmIChvYmouYWxpYXNlcykge1xuICAgICAgICBhbGlhc2VzID0gb2JqLmFsaWFzZXMudmFsdWVPZigpOyAvLyBhbGlhc2VzIGNvdWxkIGJlIGEgTWF0cml4LCBzbyBjb252ZXJ0IHRvIEFycmF5XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjcmVhdGUgdW5pdCBcIicgKyBuYW1lICsgJ1wiIGZyb20gXCInICsgb2JqLnRvU3RyaW5nKCkgKyAnXCI6IGV4cGVjdGluZyBcInN0cmluZ1wiIG9yIFwiVW5pdFwiIG9yIFwiT2JqZWN0XCInKTtcbiAgICB9XG5cbiAgICBpZiAoYWxpYXNlcykge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGlhc2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoVU5JVFMsIGFsaWFzZXNbaV0pKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY3JlYXRlIGFsaWFzIFwiJyArIGFsaWFzZXNbaV0gKyAnXCI6IGEgdW5pdCB3aXRoIHRoYXQgbmFtZSBhbHJlYWR5IGV4aXN0cycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRlZmluaXRpb24gJiYgdHlwZW9mIGRlZmluaXRpb24gPT09ICdzdHJpbmcnICYmICFkZWZVbml0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBkZWZVbml0ID0gVW5pdC5wYXJzZShkZWZpbml0aW9uLCB7XG4gICAgICAgICAgYWxsb3dOb1VuaXRzOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgZXgubWVzc2FnZSA9ICdDb3VsZCBub3QgY3JlYXRlIHVuaXQgXCInICsgbmFtZSArICdcIiBmcm9tIFwiJyArIGRlZmluaXRpb24gKyAnXCI6ICcgKyBleC5tZXNzYWdlO1xuICAgICAgICB0aHJvdyBleDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRlZmluaXRpb24gJiYgZGVmaW5pdGlvbi50eXBlID09PSAnVW5pdCcpIHtcbiAgICAgIGRlZlVuaXQgPSBkZWZpbml0aW9uLmNsb25lKCk7XG4gICAgfVxuXG4gICAgYWxpYXNlcyA9IGFsaWFzZXMgfHwgW107XG4gICAgb2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cbiAgICBpZiAocHJlZml4ZXMgJiYgcHJlZml4ZXMudG9VcHBlckNhc2UpIHtcbiAgICAgIHByZWZpeGVzID0gUFJFRklYRVNbcHJlZml4ZXMudG9VcHBlckNhc2UoKV0gfHwgUFJFRklYRVMuTk9ORTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJlZml4ZXMgPSBQUkVGSVhFUy5OT05FO1xuICAgIH0gLy8gSWYgZGVmVW5pdCBpcyBudWxsLCBpdCBpcyBiZWNhdXNlIHRoZSB1c2VyIGRpZCBub3RcbiAgICAvLyBzcGVjaWZ5IGEgZGVmaW50aW9uLiBTbyBjcmVhdGUgYSBuZXcgYmFzZSBkaW1lbnNpb24uXG5cblxuICAgIHZhciBuZXdVbml0ID0ge307XG5cbiAgICBpZiAoIWRlZlVuaXQpIHtcbiAgICAgIC8vIEFkZCBhIG5ldyBiYXNlIGRpbWVuc2lvblxuICAgICAgYmFzZU5hbWUgPSBiYXNlTmFtZSB8fCBuYW1lICsgJ19TVFVGRic7IC8vIGZvbyAtLT4gZm9vX1NUVUZGLCBvciB0aGUgZXNzZW5jZSBvZiBmb29cblxuICAgICAgaWYgKEJBU0VfRElNRU5TSU9OUy5pbmRleE9mKGJhc2VOYW1lKSA+PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNyZWF0ZSBuZXcgYmFzZSB1bml0IFwiJyArIG5hbWUgKyAnXCI6IGEgYmFzZSB1bml0IHdpdGggdGhhdCBuYW1lIGFscmVhZHkgZXhpc3RzIChhbmQgY2Fubm90IGJlIG92ZXJyaWRkZW4pJyk7XG4gICAgICB9XG5cbiAgICAgIEJBU0VfRElNRU5TSU9OUy5wdXNoKGJhc2VOYW1lKTsgLy8gUHVzaCAwIG9udG8gZXhpc3RpbmcgYmFzZSB1bml0c1xuXG4gICAgICBmb3IgKHZhciBiIGluIEJBU0VfVU5JVFMpIHtcbiAgICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShCQVNFX1VOSVRTLCBiKSkge1xuICAgICAgICAgIEJBU0VfVU5JVFNbYl0uZGltZW5zaW9uc1tCQVNFX0RJTUVOU0lPTlMubGVuZ3RoIC0gMV0gPSAwO1xuICAgICAgICB9XG4gICAgICB9IC8vIEFkZCB0aGUgbmV3IGJhc2UgdW5pdFxuXG5cbiAgICAgIHZhciBuZXdCYXNlVW5pdCA9IHtcbiAgICAgICAgZGltZW5zaW9uczogW11cbiAgICAgIH07XG5cbiAgICAgIGZvciAodmFyIF9pNiA9IDA7IF9pNiA8IEJBU0VfRElNRU5TSU9OUy5sZW5ndGg7IF9pNisrKSB7XG4gICAgICAgIG5ld0Jhc2VVbml0LmRpbWVuc2lvbnNbX2k2XSA9IDA7XG4gICAgICB9XG5cbiAgICAgIG5ld0Jhc2VVbml0LmRpbWVuc2lvbnNbQkFTRV9ESU1FTlNJT05TLmxlbmd0aCAtIDFdID0gMTtcbiAgICAgIG5ld0Jhc2VVbml0LmtleSA9IGJhc2VOYW1lO1xuICAgICAgQkFTRV9VTklUU1tiYXNlTmFtZV0gPSBuZXdCYXNlVW5pdDtcbiAgICAgIG5ld1VuaXQgPSB7XG4gICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgIHZhbHVlOiAxLFxuICAgICAgICBkaW1lbnNpb25zOiBCQVNFX1VOSVRTW2Jhc2VOYW1lXS5kaW1lbnNpb25zLnNsaWNlKDApLFxuICAgICAgICBwcmVmaXhlczogcHJlZml4ZXMsXG4gICAgICAgIG9mZnNldDogb2Zmc2V0LFxuICAgICAgICBiYXNlOiBCQVNFX1VOSVRTW2Jhc2VOYW1lXVxuICAgICAgfTtcbiAgICAgIGN1cnJlbnRVbml0U3lzdGVtW2Jhc2VOYW1lXSA9IHtcbiAgICAgICAgdW5pdDogbmV3VW5pdCxcbiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5OT05FWycnXVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3VW5pdCA9IHtcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgdmFsdWU6IGRlZlVuaXQudmFsdWUsXG4gICAgICAgIGRpbWVuc2lvbnM6IGRlZlVuaXQuZGltZW5zaW9ucy5zbGljZSgwKSxcbiAgICAgICAgcHJlZml4ZXM6IHByZWZpeGVzLFxuICAgICAgICBvZmZzZXQ6IG9mZnNldFxuICAgICAgfTsgLy8gQ3JlYXRlIGEgbmV3IGJhc2UgaWYgbm8gbWF0Y2hpbmcgYmFzZSBleGlzdHNcblxuICAgICAgdmFyIGFueU1hdGNoID0gZmFsc2U7XG5cbiAgICAgIGZvciAodmFyIF9pNyBpbiBCQVNFX1VOSVRTKSB7XG4gICAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoQkFTRV9VTklUUywgX2k3KSkge1xuICAgICAgICAgIHZhciBtYXRjaCA9IHRydWU7XG5cbiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IEJBU0VfRElNRU5TSU9OUy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgaWYgKE1hdGguYWJzKChuZXdVbml0LmRpbWVuc2lvbnNbal0gfHwgMCkgLSAoQkFTRV9VTklUU1tfaTddLmRpbWVuc2lvbnNbal0gfHwgMCkpID4gMWUtMTIpIHtcbiAgICAgICAgICAgICAgbWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICBhbnlNYXRjaCA9IHRydWU7XG4gICAgICAgICAgICBuZXdVbml0LmJhc2UgPSBCQVNFX1VOSVRTW19pN107XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFhbnlNYXRjaCkge1xuICAgICAgICBiYXNlTmFtZSA9IGJhc2VOYW1lIHx8IG5hbWUgKyAnX1NUVUZGJzsgLy8gZm9vIC0tPiBmb29fU1RVRkYsIG9yIHRoZSBlc3NlbmNlIG9mIGZvb1xuICAgICAgICAvLyBBZGQgdGhlIG5ldyBiYXNlIHVuaXRcblxuICAgICAgICB2YXIgX25ld0Jhc2VVbml0ID0ge1xuICAgICAgICAgIGRpbWVuc2lvbnM6IGRlZlVuaXQuZGltZW5zaW9ucy5zbGljZSgwKVxuICAgICAgICB9O1xuICAgICAgICBfbmV3QmFzZVVuaXQua2V5ID0gYmFzZU5hbWU7XG4gICAgICAgIEJBU0VfVU5JVFNbYmFzZU5hbWVdID0gX25ld0Jhc2VVbml0O1xuICAgICAgICBjdXJyZW50VW5pdFN5c3RlbVtiYXNlTmFtZV0gPSB7XG4gICAgICAgICAgdW5pdDogbmV3VW5pdCxcbiAgICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLk5PTkVbJyddXG4gICAgICAgIH07XG4gICAgICAgIG5ld1VuaXQuYmFzZSA9IEJBU0VfVU5JVFNbYmFzZU5hbWVdO1xuICAgICAgfVxuICAgIH1cblxuICAgIFVuaXQuVU5JVFNbbmFtZV0gPSBuZXdVbml0O1xuXG4gICAgZm9yICh2YXIgX2k4ID0gMDsgX2k4IDwgYWxpYXNlcy5sZW5ndGg7IF9pOCsrKSB7XG4gICAgICB2YXIgYWxpYXNOYW1lID0gYWxpYXNlc1tfaThdO1xuICAgICAgdmFyIF9hbGlhcyA9IHt9O1xuXG4gICAgICBmb3IgKHZhciBfa2V5NiBpbiBuZXdVbml0KSB7XG4gICAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkobmV3VW5pdCwgX2tleTYpKSB7XG4gICAgICAgICAgX2FsaWFzW19rZXk2XSA9IG5ld1VuaXRbX2tleTZdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIF9hbGlhcy5uYW1lID0gYWxpYXNOYW1lO1xuICAgICAgVW5pdC5VTklUU1thbGlhc05hbWVdID0gX2FsaWFzO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgVW5pdChudWxsLCBuYW1lKTtcbiAgfTtcblxuICBVbml0LmRlbGV0ZVVuaXQgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIGRlbGV0ZSBVbml0LlVOSVRTW25hbWVdO1xuICB9OyAvLyBleHBvc2UgYXJyYXlzIHdpdGggcHJlZml4ZXMsIGRpbWVuc2lvbnMsIHVuaXRzLCBzeXN0ZW1zXG5cblxuICBVbml0LlBSRUZJWEVTID0gUFJFRklYRVM7XG4gIFVuaXQuQkFTRV9ESU1FTlNJT05TID0gQkFTRV9ESU1FTlNJT05TO1xuICBVbml0LkJBU0VfVU5JVFMgPSBCQVNFX1VOSVRTO1xuICBVbml0LlVOSVRfU1lTVEVNUyA9IFVOSVRfU1lTVEVNUztcbiAgVW5pdC5VTklUUyA9IFVOSVRTO1xuICByZXR1cm4gVW5pdDtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVVuaXRDbGFzcyA9IGNyZWF0ZVVuaXRDbGFzczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ3JlYXRlVW5pdCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2NyZWF0ZVVuaXQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnVW5pdCddO1xudmFyIGNyZWF0ZUNyZWF0ZVVuaXQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgVW5pdCA9IF9yZWYuVW5pdDtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgdXNlci1kZWZpbmVkIHVuaXQgYW5kIHJlZ2lzdGVyIGl0IHdpdGggdGhlIFVuaXQgdHlwZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5jcmVhdGVVbml0KHtcbiAgICogICAgICAgYmFzZVVuaXQxOiB7XG4gICAqICAgICAgICAgYWxpYXNlczogW3N0cmluZywgLi4uXVxuICAgKiAgICAgICAgIHByZWZpeGVzOiBvYmplY3RcbiAgICogICAgICAgfSxcbiAgICogICAgICAgdW5pdDI6IHtcbiAgICogICAgICAgICBkZWZpbml0aW9uOiBzdHJpbmcsXG4gICAqICAgICAgICAgYWxpYXNlczogW3N0cmluZywgLi4uXVxuICAgKiAgICAgICAgIHByZWZpeGVzOiBvYmplY3QsXG4gICAqICAgICAgICAgb2Zmc2V0OiBudW1iZXJcbiAgICogICAgICAgfSxcbiAgICogICAgICAgdW5pdDM6IHN0cmluZyAgICAvLyBTaG9ydGN1dFxuICAgKiAgICAgfSlcbiAgICpcbiAgICogICAgIC8vIEFub3RoZXIgc2hvcnRjdXQ6XG4gICAqICAgICBtYXRoLmNyZWF0ZVVuaXQoc3RyaW5nLCB1bml0IDogc3RyaW5nLCBbb2JqZWN0XSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLmNyZWF0ZVVuaXQoJ2ZvbycpXG4gICAqICAgICBtYXRoLmNyZWF0ZVVuaXQoJ2tub3QnLCB7ZGVmaW5pdGlvbjogJzAuNTE0NDQ0NDQ0IG0vcycsIGFsaWFzZXM6IFsna25vdHMnLCAna3QnLCAna3RzJ119KVxuICAgKiAgICAgbWF0aC5jcmVhdGVVbml0KCdtcGgnLCAnMSBtaWxlL2hvdXInKVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAgICAgIFRoZSBuYW1lIG9mIHRoZSBuZXcgdW5pdC4gTXVzdCBiZSB1bmlxdWUuIEV4YW1wbGU6ICdrbm90J1xuICAgKiBAcGFyYW0ge3N0cmluZywgVW5pdH0gZGVmaW5pdGlvbiAgICAgIERlZmluaXRpb24gb2YgdGhlIHVuaXQgaW4gdGVybXMgb2YgZXhpc3RpbmcgdW5pdHMuIEZvciBleGFtcGxlLCAnMC41MTQ0NDQ0NDQgbSAvIHMnLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAgIChvcHRpb25hbCkgQW4gb2JqZWN0IGNvbnRhaW5pbmcgYW55IG9mIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAgICogICAgIC0gYHByZWZpeGVzIHtzdHJpbmd9YCBcIm5vbmVcIiwgXCJzaG9ydFwiLCBcImxvbmdcIiwgXCJiaW5hcnlfc2hvcnRcIiwgb3IgXCJiaW5hcnlfbG9uZ1wiLiBUaGUgZGVmYXVsdCBpcyBcIm5vbmVcIi5cbiAgICogICAgIC0gYGFsaWFzZXMge0FycmF5fWAgQXJyYXkgb2Ygc3RyaW5ncy4gRXhhbXBsZTogWydrbm90cycsICdrdCcsICdrdHMnXVxuICAgKiAgICAgLSBgb2Zmc2V0IHtOdW1lcmljfWAgQW4gb2Zmc2V0IHRvIGFwcGx5IHdoZW4gY29udmVydGluZyBmcm9tIHRoZSB1bml0LiBGb3IgZXhhbXBsZSwgdGhlIG9mZnNldCBmb3IgY2Vsc2l1cyBpcyAyNzMuMTUuIERlZmF1bHQgaXMgMC5cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICB1bml0XG4gICAqXG4gICAqIEByZXR1cm4ge1VuaXR9IFRoZSBuZXcgdW5pdFxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAvLyBHZW5lcmFsIGZ1bmN0aW9uIHNpZ25hdHVyZS4gRmlyc3QgcGFyYW1ldGVyIGlzIGFuIG9iamVjdCB3aGVyZSBlYWNoIHByb3BlcnR5IGlzIHRoZSBkZWZpbml0aW9uIG9mIGEgbmV3IHVuaXQuIFRoZSBvYmplY3Qga2V5cyBhcmUgdGhlIHVuaXQgbmFtZXMgYW5kIHRoZSB2YWx1ZXMgYXJlIHRoZSBkZWZpbml0aW9ucy4gVGhlIHZhbHVlcyBjYW4gYmUgb2JqZWN0cywgc3RyaW5ncywgb3IgVW5pdHMuIElmIGEgcHJvcGVydHkgaXMgYW4gZW1wdHkgb2JqZWN0IG9yIGFuIGVtcHR5IHN0cmluZywgYSBuZXcgYmFzZSB1bml0IGlzIGNyZWF0ZWQuIFRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIHRoZSBvcHRpb25zLlxuICAgICdPYmplY3QsIE9iamVjdCc6IGZ1bmN0aW9uIE9iamVjdE9iamVjdChvYmosIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBVbml0LmNyZWF0ZVVuaXQob2JqLCBvcHRpb25zKTtcbiAgICB9LFxuICAgIC8vIFNhbWUgYXMgYWJvdmUgYnV0IHdpdGhvdXQgdGhlIG9wdGlvbnMuXG4gICAgT2JqZWN0OiBmdW5jdGlvbiBPYmplY3Qob2JqKSB7XG4gICAgICByZXR1cm4gVW5pdC5jcmVhdGVVbml0KG9iaiwge30pO1xuICAgIH0sXG4gICAgLy8gU2hvcnRjdXQgbWV0aG9kIGZvciBjcmVhdGluZyBvbmUgdW5pdC5cbiAgICAnc3RyaW5nLCBVbml0IHwgc3RyaW5nIHwgT2JqZWN0LCBPYmplY3QnOiBmdW5jdGlvbiBzdHJpbmdVbml0U3RyaW5nT2JqZWN0T2JqZWN0KG5hbWUsIGRlZiwgb3B0aW9ucykge1xuICAgICAgdmFyIG9iaiA9IHt9O1xuICAgICAgb2JqW25hbWVdID0gZGVmO1xuICAgICAgcmV0dXJuIFVuaXQuY3JlYXRlVW5pdChvYmosIG9wdGlvbnMpO1xuICAgIH0sXG4gICAgLy8gU2FtZSBhcyBhYm92ZSBidXQgd2l0aG91dCB0aGUgb3B0aW9ucy5cbiAgICAnc3RyaW5nLCBVbml0IHwgc3RyaW5nIHwgT2JqZWN0JzogZnVuY3Rpb24gc3RyaW5nVW5pdFN0cmluZ09iamVjdChuYW1lLCBkZWYpIHtcbiAgICAgIHZhciBvYmogPSB7fTtcbiAgICAgIG9ialtuYW1lXSA9IGRlZjtcbiAgICAgIHJldHVybiBVbml0LmNyZWF0ZVVuaXQob2JqLCB7fSk7XG4gICAgfSxcbiAgICAvLyBXaXRob3V0IGEgZGVmaW5pdGlvbiwgY3JlYXRlcyBhIGJhc2UgdW5pdC5cbiAgICBzdHJpbmc6IGZ1bmN0aW9uIHN0cmluZyhuYW1lKSB7XG4gICAgICB2YXIgb2JqID0ge307XG4gICAgICBvYmpbbmFtZV0gPSB7fTtcbiAgICAgIHJldHVybiBVbml0LmNyZWF0ZVVuaXQob2JqLCB7fSk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVDcmVhdGVVbml0ID0gY3JlYXRlQ3JlYXRlVW5pdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3BsaXRVbml0ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnc3BsaXRVbml0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlU3BsaXRVbml0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogU3BsaXQgYSB1bml0IGluIGFuIGFycmF5IG9mIHVuaXRzIHdob3NlIHN1bSBpcyBlcXVhbCB0byB0aGUgb3JpZ2luYWwgdW5pdC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgc3BsaXRVbml0KHVuaXQ6IFVuaXQsIHBhcnRzOiBBcnJheS48VW5pdD4pXG4gICAqXG4gICAqIEV4YW1wbGU6XG4gICAqXG4gICAqICAgICBtYXRoLnNwbGl0VW5pdChuZXcgVW5pdCgxLCAnbScpLCBbJ2ZlZXQnLCAnaW5jaCddKVxuICAgKiAgICAgLy8gWyAzIGZlZXQsIDMuMzcwMDc4NzQwMTU3NSBpbmNoIF1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICB1bml0XG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IFtwYXJ0c10gQW4gYXJyYXkgb2Ygc3RyaW5ncyBvciB2YWx1ZWxlc3MgdW5pdHMuXG4gICAqIEByZXR1cm4ge0FycmF5fSBBbiBhcnJheSBvZiB1bml0cy5cbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ1VuaXQsIEFycmF5JzogZnVuY3Rpb24gVW5pdEFycmF5KHVuaXQsIHBhcnRzKSB7XG4gICAgICByZXR1cm4gdW5pdC5zcGxpdFVuaXQocGFydHMpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlU3BsaXRVbml0ID0gY3JlYXRlU3BsaXRVbml0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVVbml0RnVuY3Rpb24gPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIG5hbWUgPSAndW5pdCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdVbml0J107IC8vIFRoaXMgZnVuY3Rpb24gaXMgbmFtZWQgY3JlYXRlVW5pdEZ1bmN0aW9uIHRvIHByZXZlbnQgYSBuYW1pbmcgY29uZmxpY3Qgd2l0aCBjcmVhdGVVbml0XG5cbnZhciBjcmVhdGVVbml0RnVuY3Rpb24gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgVW5pdCA9IF9yZWYuVW5pdDtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgdW5pdC4gRGVwZW5kaW5nIG9uIHRoZSBwYXNzZWQgYXJndW1lbnRzLCB0aGUgZnVuY3Rpb25cbiAgICogd2lsbCBjcmVhdGUgYW5kIHJldHVybiBhIG5ldyBtYXRoLlVuaXQgb2JqZWN0LlxuICAgKiBXaGVuIGEgbWF0cml4IGlzIHByb3ZpZGVkLCBhbGwgZWxlbWVudHMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gdW5pdHMuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGgudW5pdCh1bml0IDogc3RyaW5nKVxuICAgKiAgICAgbWF0aC51bml0KHZhbHVlIDogbnVtYmVyLCB1bml0IDogc3RyaW5nKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgY29uc3QgYSA9IG1hdGgudW5pdCg1LCAnY20nKSAgICAvLyByZXR1cm5zIFVuaXQgNTAgbW1cbiAgICogICAgY29uc3QgYiA9IG1hdGgudW5pdCgnMjMga2cnKSAgICAvLyByZXR1cm5zIFVuaXQgMjMga2dcbiAgICogICAgYS50bygnbScpICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIFVuaXQgMC4wNSBtXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiaWdudW1iZXIsIGJvb2xlYW4sIGNvbXBsZXgsIGluZGV4LCBtYXRyaXgsIG51bWJlciwgc3RyaW5nLCBjcmVhdGVVbml0XG4gICAqXG4gICAqIEBwYXJhbSB7KiB8IEFycmF5IHwgTWF0cml4fSBhcmdzICAgQSBudW1iZXIgYW5kIHVuaXQuXG4gICAqIEByZXR1cm4ge1VuaXQgfCBBcnJheSB8IE1hdHJpeH0gICAgVGhlIGNyZWF0ZWQgdW5pdFxuICAgKi9cbiAgdmFyIHVuaXQgPSB0eXBlZChuYW1lLCB7XG4gICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7XG4gICAgICByZXR1cm4geC5jbG9uZSgpO1xuICAgIH0sXG4gICAgc3RyaW5nOiBmdW5jdGlvbiBzdHJpbmcoeCkge1xuICAgICAgaWYgKFVuaXQuaXNWYWx1ZWxlc3NVbml0KHgpKSB7XG4gICAgICAgIHJldHVybiBuZXcgVW5pdChudWxsLCB4KTsgLy8gYSBwdXJlIHVuaXRcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFVuaXQucGFyc2UoeCwge1xuICAgICAgICBhbGxvd05vVW5pdHM6IHRydWVcbiAgICAgIH0pOyAvLyBhIHVuaXQgd2l0aCB2YWx1ZSwgbGlrZSAnNWNtJ1xuICAgIH0sXG4gICAgJ251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCwgc3RyaW5nJzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyRnJhY3Rpb25Db21wbGV4U3RyaW5nKHZhbHVlLCB1bml0KSB7XG4gICAgICByZXR1cm4gbmV3IFVuaXQodmFsdWUsIHVuaXQpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCB1bml0KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gdW5pdDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVVbml0RnVuY3Rpb24gPSBjcmVhdGVVbml0RnVuY3Rpb247IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVBsYW5ja1RlbXBlcmF0dXJlID0gZXhwb3J0cy5jcmVhdGVQbGFuY2tDaGFyZ2UgPSBleHBvcnRzLmNyZWF0ZVBsYW5ja1RpbWUgPSBleHBvcnRzLmNyZWF0ZVBsYW5ja01hc3MgPSBleHBvcnRzLmNyZWF0ZVBsYW5ja0xlbmd0aCA9IGV4cG9ydHMuY3JlYXRlR3Jhdml0eSA9IGV4cG9ydHMuY3JlYXRlTW9sYXJNYXNzQzEyID0gZXhwb3J0cy5jcmVhdGVNb2xhck1hc3MgPSBleHBvcnRzLmNyZWF0ZVdpZW5EaXNwbGFjZW1lbnQgPSBleHBvcnRzLmNyZWF0ZVN0ZWZhbkJvbHR6bWFubiA9IGV4cG9ydHMuY3JlYXRlU2Vjb25kUmFkaWF0aW9uID0gZXhwb3J0cy5jcmVhdGVTYWNrdXJUZXRyb2RlID0gZXhwb3J0cy5jcmVhdGVNb2xhclZvbHVtZSA9IGV4cG9ydHMuY3JlYXRlTW9sYXJQbGFuY2tDb25zdGFudCA9IGV4cG9ydHMuY3JlYXRlR2FzQ29uc3RhbnQgPSBleHBvcnRzLmNyZWF0ZUxvc2NobWlkdCA9IGV4cG9ydHMuY3JlYXRlRmlyc3RSYWRpYXRpb24gPSBleHBvcnRzLmNyZWF0ZUZhcmFkYXkgPSBleHBvcnRzLmNyZWF0ZUJvbHR6bWFubiA9IGV4cG9ydHMuY3JlYXRlQXZvZ2Fkcm8gPSBleHBvcnRzLmNyZWF0ZUF0b21pY01hc3MgPSBleHBvcnRzLmNyZWF0ZUVmaW1vdkZhY3RvciA9IGV4cG9ydHMuY3JlYXRlV2Vha01peGluZ0FuZ2xlID0gZXhwb3J0cy5jcmVhdGVUaG9tc29uQ3Jvc3NTZWN0aW9uID0gZXhwb3J0cy5jcmVhdGVSeWRiZXJnID0gZXhwb3J0cy5jcmVhdGVRdWFudHVtT2ZDaXJjdWxhdGlvbiA9IGV4cG9ydHMuY3JlYXRlTmV1dHJvbk1hc3MgPSBleHBvcnRzLmNyZWF0ZURldXRlcm9uTWFzcyA9IGV4cG9ydHMuY3JlYXRlUHJvdG9uTWFzcyA9IGV4cG9ydHMuY3JlYXRlSGFydHJlZUVuZXJneSA9IGV4cG9ydHMuY3JlYXRlRmluZVN0cnVjdHVyZSA9IGV4cG9ydHMuY3JlYXRlRmVybWlDb3VwbGluZyA9IGV4cG9ydHMuY3JlYXRlRWxlY3Ryb25NYXNzID0gZXhwb3J0cy5jcmVhdGVDbGFzc2ljYWxFbGVjdHJvblJhZGl1cyA9IGV4cG9ydHMuY3JlYXRlQm9oclJhZGl1cyA9IGV4cG9ydHMuY3JlYXRlSm9zZXBoc29uID0gZXhwb3J0cy5jcmVhdGVLbGl0emluZyA9IGV4cG9ydHMuY3JlYXRlTnVjbGVhck1hZ25ldG9uID0gZXhwb3J0cy5jcmVhdGVNYWduZXRpY0ZsdXhRdWFudHVtID0gZXhwb3J0cy5jcmVhdGVJbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtID0gZXhwb3J0cy5jcmVhdGVDb25kdWN0YW5jZVF1YW50dW0gPSBleHBvcnRzLmNyZWF0ZUJvaHJNYWduZXRvbiA9IGV4cG9ydHMuY3JlYXRlRWxlbWVudGFyeUNoYXJnZSA9IGV4cG9ydHMuY3JlYXRlQ291bG9tYiA9IGV4cG9ydHMuY3JlYXRlVmFjdXVtSW1wZWRhbmNlID0gZXhwb3J0cy5jcmVhdGVFbGVjdHJpY0NvbnN0YW50ID0gZXhwb3J0cy5jcmVhdGVNYWduZXRpY0NvbnN0YW50ID0gZXhwb3J0cy5jcmVhdGVSZWR1Y2VkUGxhbmNrQ29uc3RhbnQgPSBleHBvcnRzLmNyZWF0ZVBsYW5ja0NvbnN0YW50ID0gZXhwb3J0cy5jcmVhdGVHcmF2aXRhdGlvbkNvbnN0YW50ID0gZXhwb3J0cy5jcmVhdGVTcGVlZE9mTGlnaHQgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG4vLyBTb3VyY2U6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1BoeXNpY2FsX2NvbnN0YW50XG4vLyBVbml2ZXJzYWwgY29uc3RhbnRzXG52YXIgY3JlYXRlU3BlZWRPZkxpZ2h0ID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ3NwZWVkT2ZMaWdodCcsICcyOTk3OTI0NTgnLCAnbSBzXi0xJyk7XG5leHBvcnRzLmNyZWF0ZVNwZWVkT2ZMaWdodCA9IGNyZWF0ZVNwZWVkT2ZMaWdodDtcbnZhciBjcmVhdGVHcmF2aXRhdGlvbkNvbnN0YW50ID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ2dyYXZpdGF0aW9uQ29uc3RhbnQnLCAnNi42NzQzMGUtMTEnLCAnbV4zIGtnXi0xIHNeLTInKTtcbmV4cG9ydHMuY3JlYXRlR3Jhdml0YXRpb25Db25zdGFudCA9IGNyZWF0ZUdyYXZpdGF0aW9uQ29uc3RhbnQ7XG52YXIgY3JlYXRlUGxhbmNrQ29uc3RhbnQgPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgncGxhbmNrQ29uc3RhbnQnLCAnNi42MjYwNzAxNWUtMzQnLCAnSiBzJyk7XG5leHBvcnRzLmNyZWF0ZVBsYW5ja0NvbnN0YW50ID0gY3JlYXRlUGxhbmNrQ29uc3RhbnQ7XG52YXIgY3JlYXRlUmVkdWNlZFBsYW5ja0NvbnN0YW50ID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ3JlZHVjZWRQbGFuY2tDb25zdGFudCcsICcxLjA1NDU3MTgxNzY0NjE1NjVlLTM0JywgJ0ogcycpOyAvLyBFbGVjdHJvbWFnbmV0aWMgY29uc3RhbnRzXG5cbmV4cG9ydHMuY3JlYXRlUmVkdWNlZFBsYW5ja0NvbnN0YW50ID0gY3JlYXRlUmVkdWNlZFBsYW5ja0NvbnN0YW50O1xudmFyIGNyZWF0ZU1hZ25ldGljQ29uc3RhbnQgPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgnbWFnbmV0aWNDb25zdGFudCcsICcxLjI1NjYzNzA2MjEyZS02JywgJ04gQV4tMicpO1xuZXhwb3J0cy5jcmVhdGVNYWduZXRpY0NvbnN0YW50ID0gY3JlYXRlTWFnbmV0aWNDb25zdGFudDtcbnZhciBjcmVhdGVFbGVjdHJpY0NvbnN0YW50ID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ2VsZWN0cmljQ29uc3RhbnQnLCAnOC44NTQxODc4MTI4ZS0xMicsICdGIG1eLTEnKTtcbmV4cG9ydHMuY3JlYXRlRWxlY3RyaWNDb25zdGFudCA9IGNyZWF0ZUVsZWN0cmljQ29uc3RhbnQ7XG52YXIgY3JlYXRlVmFjdXVtSW1wZWRhbmNlID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ3ZhY3V1bUltcGVkYW5jZScsICczNzYuNzMwMzEzNjY3JywgJ29obScpO1xuZXhwb3J0cy5jcmVhdGVWYWN1dW1JbXBlZGFuY2UgPSBjcmVhdGVWYWN1dW1JbXBlZGFuY2U7XG52YXIgY3JlYXRlQ291bG9tYiA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdjb3Vsb21iJywgJzguOTg3NTUxNzkyMjYxMTcxZTknLCAnTiBtXjIgQ14tMicpO1xuZXhwb3J0cy5jcmVhdGVDb3Vsb21iID0gY3JlYXRlQ291bG9tYjtcbnZhciBjcmVhdGVFbGVtZW50YXJ5Q2hhcmdlID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ2VsZW1lbnRhcnlDaGFyZ2UnLCAnMS42MDIxNzY2MzRlLTE5JywgJ0MnKTtcbmV4cG9ydHMuY3JlYXRlRWxlbWVudGFyeUNoYXJnZSA9IGNyZWF0ZUVsZW1lbnRhcnlDaGFyZ2U7XG52YXIgY3JlYXRlQm9ock1hZ25ldG9uID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ2JvaHJNYWduZXRvbicsICc5LjI3NDAxMDA3ODNlLTI0JywgJ0ogVF4tMScpO1xuZXhwb3J0cy5jcmVhdGVCb2hyTWFnbmV0b24gPSBjcmVhdGVCb2hyTWFnbmV0b247XG52YXIgY3JlYXRlQ29uZHVjdGFuY2VRdWFudHVtID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ2NvbmR1Y3RhbmNlUXVhbnR1bScsICc3Ljc0ODA5MTcyOTg2MzY0OWUtNScsICdTJyk7XG5leHBvcnRzLmNyZWF0ZUNvbmR1Y3RhbmNlUXVhbnR1bSA9IGNyZWF0ZUNvbmR1Y3RhbmNlUXVhbnR1bTtcbnZhciBjcmVhdGVJbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ2ludmVyc2VDb25kdWN0YW5jZVF1YW50dW0nLCAnMTI5MDYuNDAzNzI5NjUyMjU3JywgJ29obScpO1xuZXhwb3J0cy5jcmVhdGVJbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtID0gY3JlYXRlSW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bTtcbnZhciBjcmVhdGVNYWduZXRpY0ZsdXhRdWFudHVtID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ21hZ25ldGljRmx1eFF1YW50dW0nLCAnMi4wNjc4MzM4NDg0NjE5Mjk1ZS0xNScsICdXYicpO1xuZXhwb3J0cy5jcmVhdGVNYWduZXRpY0ZsdXhRdWFudHVtID0gY3JlYXRlTWFnbmV0aWNGbHV4UXVhbnR1bTtcbnZhciBjcmVhdGVOdWNsZWFyTWFnbmV0b24gPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgnbnVjbGVhck1hZ25ldG9uJywgJzUuMDUwNzgzNzQ2MWUtMjcnLCAnSiBUXi0xJyk7XG5leHBvcnRzLmNyZWF0ZU51Y2xlYXJNYWduZXRvbiA9IGNyZWF0ZU51Y2xlYXJNYWduZXRvbjtcbnZhciBjcmVhdGVLbGl0emluZyA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdrbGl0emluZycsICcyNTgxMi44MDc0NTkzMDQ1MTMnLCAnb2htJyk7XG5leHBvcnRzLmNyZWF0ZUtsaXR6aW5nID0gY3JlYXRlS2xpdHppbmc7XG52YXIgY3JlYXRlSm9zZXBoc29uID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ2pvc2VwaHNvbicsICc0LjgzNTk3ODQ4NDE2OTgzNmUxNCBIeiBWJywgJ0h6IFZeLTEnKTsgLy8gVE9ETzogc3VwcG9ydCBmb3IgSHogbmVlZGVkXG4vLyBBdG9taWMgYW5kIG51Y2xlYXIgY29uc3RhbnRzXG5cbmV4cG9ydHMuY3JlYXRlSm9zZXBoc29uID0gY3JlYXRlSm9zZXBoc29uO1xudmFyIGNyZWF0ZUJvaHJSYWRpdXMgPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgnYm9oclJhZGl1cycsICc1LjI5MTc3MjEwOTAzZS0xMScsICdtJyk7XG5leHBvcnRzLmNyZWF0ZUJvaHJSYWRpdXMgPSBjcmVhdGVCb2hyUmFkaXVzO1xudmFyIGNyZWF0ZUNsYXNzaWNhbEVsZWN0cm9uUmFkaXVzID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ2NsYXNzaWNhbEVsZWN0cm9uUmFkaXVzJywgJzIuODE3OTQwMzI2MmUtMTUnLCAnbScpO1xuZXhwb3J0cy5jcmVhdGVDbGFzc2ljYWxFbGVjdHJvblJhZGl1cyA9IGNyZWF0ZUNsYXNzaWNhbEVsZWN0cm9uUmFkaXVzO1xudmFyIGNyZWF0ZUVsZWN0cm9uTWFzcyA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdlbGVjdHJvbk1hc3MnLCAnOS4xMDkzODM3MDE1ZS0zMScsICdrZycpO1xuZXhwb3J0cy5jcmVhdGVFbGVjdHJvbk1hc3MgPSBjcmVhdGVFbGVjdHJvbk1hc3M7XG52YXIgY3JlYXRlRmVybWlDb3VwbGluZyA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdmZXJtaUNvdXBsaW5nJywgJzEuMTY2Mzc4N2UtNScsICdHZVZeLTInKTtcbmV4cG9ydHMuY3JlYXRlRmVybWlDb3VwbGluZyA9IGNyZWF0ZUZlcm1pQ291cGxpbmc7XG52YXIgY3JlYXRlRmluZVN0cnVjdHVyZSA9IG51bWJlckZhY3RvcnkoJ2ZpbmVTdHJ1Y3R1cmUnLCA3LjI5NzM1MjU2OTNlLTMpO1xuZXhwb3J0cy5jcmVhdGVGaW5lU3RydWN0dXJlID0gY3JlYXRlRmluZVN0cnVjdHVyZTtcbnZhciBjcmVhdGVIYXJ0cmVlRW5lcmd5ID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ2hhcnRyZWVFbmVyZ3knLCAnNC4zNTk3NDQ3MjIyMDcxZS0xOCcsICdKJyk7XG5leHBvcnRzLmNyZWF0ZUhhcnRyZWVFbmVyZ3kgPSBjcmVhdGVIYXJ0cmVlRW5lcmd5O1xudmFyIGNyZWF0ZVByb3Rvbk1hc3MgPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgncHJvdG9uTWFzcycsICcxLjY3MjYyMTkyMzY5ZS0yNycsICdrZycpO1xuZXhwb3J0cy5jcmVhdGVQcm90b25NYXNzID0gY3JlYXRlUHJvdG9uTWFzcztcbnZhciBjcmVhdGVEZXV0ZXJvbk1hc3MgPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgnZGV1dGVyb25NYXNzJywgJzMuMzQzNTgzMDkyNmUtMjcnLCAna2cnKTtcbmV4cG9ydHMuY3JlYXRlRGV1dGVyb25NYXNzID0gY3JlYXRlRGV1dGVyb25NYXNzO1xudmFyIGNyZWF0ZU5ldXRyb25NYXNzID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ25ldXRyb25NYXNzJywgJzEuNjc0OTI3MTYxM2UtMjcnLCAna2cnKTtcbmV4cG9ydHMuY3JlYXRlTmV1dHJvbk1hc3MgPSBjcmVhdGVOZXV0cm9uTWFzcztcbnZhciBjcmVhdGVRdWFudHVtT2ZDaXJjdWxhdGlvbiA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdxdWFudHVtT2ZDaXJjdWxhdGlvbicsICczLjYzNjk0NzU1MTZlLTQnLCAnbV4yIHNeLTEnKTtcbmV4cG9ydHMuY3JlYXRlUXVhbnR1bU9mQ2lyY3VsYXRpb24gPSBjcmVhdGVRdWFudHVtT2ZDaXJjdWxhdGlvbjtcbnZhciBjcmVhdGVSeWRiZXJnID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ3J5ZGJlcmcnLCAnMTA5NzM3MzEuNTY4MTYwJywgJ21eLTEnKTtcbmV4cG9ydHMuY3JlYXRlUnlkYmVyZyA9IGNyZWF0ZVJ5ZGJlcmc7XG52YXIgY3JlYXRlVGhvbXNvbkNyb3NzU2VjdGlvbiA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCd0aG9tc29uQ3Jvc3NTZWN0aW9uJywgJzYuNjUyNDU4NzMyMWUtMjknLCAnbV4yJyk7XG5leHBvcnRzLmNyZWF0ZVRob21zb25Dcm9zc1NlY3Rpb24gPSBjcmVhdGVUaG9tc29uQ3Jvc3NTZWN0aW9uO1xudmFyIGNyZWF0ZVdlYWtNaXhpbmdBbmdsZSA9IG51bWJlckZhY3RvcnkoJ3dlYWtNaXhpbmdBbmdsZScsIDAuMjIyOTApO1xuZXhwb3J0cy5jcmVhdGVXZWFrTWl4aW5nQW5nbGUgPSBjcmVhdGVXZWFrTWl4aW5nQW5nbGU7XG52YXIgY3JlYXRlRWZpbW92RmFjdG9yID0gbnVtYmVyRmFjdG9yeSgnZWZpbW92RmFjdG9yJywgMjIuNyk7IC8vIFBoeXNpY28tY2hlbWljYWwgY29uc3RhbnRzXG5cbmV4cG9ydHMuY3JlYXRlRWZpbW92RmFjdG9yID0gY3JlYXRlRWZpbW92RmFjdG9yO1xudmFyIGNyZWF0ZUF0b21pY01hc3MgPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgnYXRvbWljTWFzcycsICcxLjY2MDUzOTA2NjYwZS0yNycsICdrZycpO1xuZXhwb3J0cy5jcmVhdGVBdG9taWNNYXNzID0gY3JlYXRlQXRvbWljTWFzcztcbnZhciBjcmVhdGVBdm9nYWRybyA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdhdm9nYWRybycsICc2LjAyMjE0MDc2ZTIzJywgJ21vbF4tMScpO1xuZXhwb3J0cy5jcmVhdGVBdm9nYWRybyA9IGNyZWF0ZUF2b2dhZHJvO1xudmFyIGNyZWF0ZUJvbHR6bWFubiA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdib2x0em1hbm4nLCAnMS4zODA2NDllLTIzJywgJ0ogS14tMScpO1xuZXhwb3J0cy5jcmVhdGVCb2x0em1hbm4gPSBjcmVhdGVCb2x0em1hbm47XG52YXIgY3JlYXRlRmFyYWRheSA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdmYXJhZGF5JywgJzk2NDg1LjMzMjEyMzMxMDAxJywgJ0MgbW9sXi0xJyk7XG5leHBvcnRzLmNyZWF0ZUZhcmFkYXkgPSBjcmVhdGVGYXJhZGF5O1xudmFyIGNyZWF0ZUZpcnN0UmFkaWF0aW9uID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ2ZpcnN0UmFkaWF0aW9uJywgJzMuNzQxNzcxODUyMTkyNzU3M2UtMTYnLCAnVyBtXjInKTsgLy8gZXhwb3J0IGNvbnN0IGNyZWF0ZVNwZWN0cmFsUmFkaWFuY2UgPSAvKiAjX19QVVJFX18gKi8gdW5pdEZhY3RvcnkoJ3NwZWN0cmFsUmFkaWFuY2UnLCAnMS4xOTEwNDI5NzIzOTcxODgxZS0xNicsICdXIG1eMiBzcl4tMScpIC8vIFRPRE8gc3BlY3RyYWxSYWRpYW5jZVxuXG5leHBvcnRzLmNyZWF0ZUZpcnN0UmFkaWF0aW9uID0gY3JlYXRlRmlyc3RSYWRpYXRpb247XG52YXIgY3JlYXRlTG9zY2htaWR0ID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ2xvc2NobWlkdCcsICcyLjY4Njc4MDExMTc5ODQ0NGUyNScsICdtXi0zJyk7XG5leHBvcnRzLmNyZWF0ZUxvc2NobWlkdCA9IGNyZWF0ZUxvc2NobWlkdDtcbnZhciBjcmVhdGVHYXNDb25zdGFudCA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdnYXNDb25zdGFudCcsICc4LjMxNDQ2MjYxODE1MzI0JywgJ0ogS14tMSBtb2xeLTEnKTtcbmV4cG9ydHMuY3JlYXRlR2FzQ29uc3RhbnQgPSBjcmVhdGVHYXNDb25zdGFudDtcbnZhciBjcmVhdGVNb2xhclBsYW5ja0NvbnN0YW50ID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ21vbGFyUGxhbmNrQ29uc3RhbnQnLCAnMy45OTAzMTI3MTI4OTM0MzFlLTEwJywgJ0ogcyBtb2xeLTEnKTtcbmV4cG9ydHMuY3JlYXRlTW9sYXJQbGFuY2tDb25zdGFudCA9IGNyZWF0ZU1vbGFyUGxhbmNrQ29uc3RhbnQ7XG52YXIgY3JlYXRlTW9sYXJWb2x1bWUgPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgnbW9sYXJWb2x1bWUnLCAnMC4wMjI0MTM5Njk1NDUwMTQxMzcnLCAnbV4zIG1vbF4tMScpO1xuZXhwb3J0cy5jcmVhdGVNb2xhclZvbHVtZSA9IGNyZWF0ZU1vbGFyVm9sdW1lO1xudmFyIGNyZWF0ZVNhY2t1clRldHJvZGUgPSBudW1iZXJGYWN0b3J5KCdzYWNrdXJUZXRyb2RlJywgLTEuMTY0ODcwNTIzNTgpO1xuZXhwb3J0cy5jcmVhdGVTYWNrdXJUZXRyb2RlID0gY3JlYXRlU2Fja3VyVGV0cm9kZTtcbnZhciBjcmVhdGVTZWNvbmRSYWRpYXRpb24gPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgnc2Vjb25kUmFkaWF0aW9uJywgJzAuMDE0Mzg3NzY4Nzc1MDM5MzM3JywgJ20gSycpO1xuZXhwb3J0cy5jcmVhdGVTZWNvbmRSYWRpYXRpb24gPSBjcmVhdGVTZWNvbmRSYWRpYXRpb247XG52YXIgY3JlYXRlU3RlZmFuQm9sdHptYW5uID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ3N0ZWZhbkJvbHR6bWFubicsICc1LjY3MDM3NDQxOTE4NDQzZS04JywgJ1cgbV4tMiBLXi00Jyk7XG5leHBvcnRzLmNyZWF0ZVN0ZWZhbkJvbHR6bWFubiA9IGNyZWF0ZVN0ZWZhbkJvbHR6bWFubjtcbnZhciBjcmVhdGVXaWVuRGlzcGxhY2VtZW50ID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ3dpZW5EaXNwbGFjZW1lbnQnLCAnMi44OTc3NzE5NTVlLTMnLCAnbSBLJyk7IC8vIEFkb3B0ZWQgdmFsdWVzXG5cbmV4cG9ydHMuY3JlYXRlV2llbkRpc3BsYWNlbWVudCA9IGNyZWF0ZVdpZW5EaXNwbGFjZW1lbnQ7XG52YXIgY3JlYXRlTW9sYXJNYXNzID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ21vbGFyTWFzcycsICcwLjk5OTk5OTk5OTY1ZS0zJywgJ2tnIG1vbF4tMScpO1xuZXhwb3J0cy5jcmVhdGVNb2xhck1hc3MgPSBjcmVhdGVNb2xhck1hc3M7XG52YXIgY3JlYXRlTW9sYXJNYXNzQzEyID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ21vbGFyTWFzc0MxMicsICcxMS45OTk5OTk5OTU4ZS0zJywgJ2tnIG1vbF4tMScpO1xuZXhwb3J0cy5jcmVhdGVNb2xhck1hc3NDMTIgPSBjcmVhdGVNb2xhck1hc3NDMTI7XG52YXIgY3JlYXRlR3Jhdml0eSA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdncmF2aXR5JywgJzkuODA2NjUnLCAnbSBzXi0yJyk7IC8vIGF0bSBpcyBkZWZpbmVkIGluIFVuaXQuanNcbi8vIE5hdHVyYWwgdW5pdHNcblxuZXhwb3J0cy5jcmVhdGVHcmF2aXR5ID0gY3JlYXRlR3Jhdml0eTtcbnZhciBjcmVhdGVQbGFuY2tMZW5ndGggPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgncGxhbmNrTGVuZ3RoJywgJzEuNjE2MjU1ZS0zNScsICdtJyk7XG5leHBvcnRzLmNyZWF0ZVBsYW5ja0xlbmd0aCA9IGNyZWF0ZVBsYW5ja0xlbmd0aDtcbnZhciBjcmVhdGVQbGFuY2tNYXNzID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ3BsYW5ja01hc3MnLCAnMi4xNzY0MzVlLTgnLCAna2cnKTtcbmV4cG9ydHMuY3JlYXRlUGxhbmNrTWFzcyA9IGNyZWF0ZVBsYW5ja01hc3M7XG52YXIgY3JlYXRlUGxhbmNrVGltZSA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdwbGFuY2tUaW1lJywgJzUuMzkxMjQ1ZS00NCcsICdzJyk7XG5leHBvcnRzLmNyZWF0ZVBsYW5ja1RpbWUgPSBjcmVhdGVQbGFuY2tUaW1lO1xudmFyIGNyZWF0ZVBsYW5ja0NoYXJnZSA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdwbGFuY2tDaGFyZ2UnLCAnMS44NzU1NDYwMzc3OGUtMTgnLCAnQycpO1xuZXhwb3J0cy5jcmVhdGVQbGFuY2tDaGFyZ2UgPSBjcmVhdGVQbGFuY2tDaGFyZ2U7XG52YXIgY3JlYXRlUGxhbmNrVGVtcGVyYXR1cmUgPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgncGxhbmNrVGVtcGVyYXR1cmUnLCAnMS40MTY3ODVlKzMyJywgJ0snKTsgLy8gaGVscGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIGZhY3RvcnkgZnVuY3Rpb24gd2hpY2ggY3JlYXRlcyBhIHBoeXNpY2FsIGNvbnN0YW50LFxuLy8gYSBVbml0IHdpdGggZWl0aGVyIGEgbnVtYmVyIHZhbHVlIG9yIGEgQmlnTnVtYmVyIHZhbHVlIGRlcGVuZGluZyBvbiB0aGUgY29uZmlndXJhdGlvblxuXG5leHBvcnRzLmNyZWF0ZVBsYW5ja1RlbXBlcmF0dXJlID0gY3JlYXRlUGxhbmNrVGVtcGVyYXR1cmU7XG5cbmZ1bmN0aW9uIHVuaXRGYWN0b3J5KG5hbWUsIHZhbHVlU3RyLCB1bml0U3RyKSB7XG4gIHZhciBkZXBlbmRlbmNpZXMgPSBbJ2NvbmZpZycsICdVbml0JywgJ0JpZ051bWJlciddO1xuICByZXR1cm4gKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgICB2YXIgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICAgIFVuaXQgPSBfcmVmLlVuaXQsXG4gICAgICAgIEJpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyO1xuICAgIC8vIE5vdGUgdGhhdCB3ZSBjYW4gcGFyc2UgaW50byBudW1iZXIgb3IgQmlnTnVtYmVyLlxuICAgIC8vIFdlIGRvIG5vdCBwYXJzZSBpbnRvIEZyYWN0aW9ucyBhcyB0aGF0IGRvZXNuJ3QgbWFrZSBzZW5zZTogd2Ugd291bGQgbG9zZSBwcmVjaXNpb24gb2YgdGhlIHZhbHVlc1xuICAgIC8vIFRoZXJlZm9yZSB3ZSBkb250IHVzZSBVbml0LnBhcnNlKClcbiAgICB2YXIgdmFsdWUgPSBjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJyA/IG5ldyBCaWdOdW1iZXIodmFsdWVTdHIpIDogcGFyc2VGbG9hdCh2YWx1ZVN0cik7XG4gICAgdmFyIHVuaXQgPSBuZXcgVW5pdCh2YWx1ZSwgdW5pdFN0cik7XG4gICAgdW5pdC5maXhQcmVmaXggPSB0cnVlO1xuICAgIHJldHVybiB1bml0O1xuICB9KTtcbn0gLy8gaGVscGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIGZhY3RvcnkgZnVuY3Rpb24gd2hpY2ggY3JlYXRlcyBhIG51bWVyaWMgY29uc3RhbnQsXG4vLyBlaXRoZXIgYSBudW1iZXIgb3IgQmlnTnVtYmVyIGRlcGVuZGluZyBvbiB0aGUgY29uZmlndXJhdGlvblxuXG5cbmZ1bmN0aW9uIG51bWJlckZhY3RvcnkobmFtZSwgdmFsdWUpIHtcbiAgdmFyIGRlcGVuZGVuY2llcyA9IFsnY29uZmlnJywgJ0JpZ051bWJlciddO1xuICByZXR1cm4gKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgdmFyIGNvbmZpZyA9IF9yZWYyLmNvbmZpZyxcbiAgICAgICAgQmlnTnVtYmVyID0gX3JlZjIuQmlnTnVtYmVyO1xuICAgIHJldHVybiBjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJyA/IG5ldyBCaWdOdW1iZXIodmFsdWUpIDogdmFsdWU7XG4gIH0pO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hcnJheVNpemUgPSBhcnJheVNpemU7XG5leHBvcnRzLnZhbGlkYXRlID0gdmFsaWRhdGU7XG5leHBvcnRzLnZhbGlkYXRlSW5kZXggPSB2YWxpZGF0ZUluZGV4O1xuZXhwb3J0cy5yZXNpemUgPSByZXNpemU7XG5leHBvcnRzLnJlc2hhcGUgPSByZXNoYXBlO1xuZXhwb3J0cy5zcXVlZXplID0gc3F1ZWV6ZTtcbmV4cG9ydHMudW5zcXVlZXplID0gdW5zcXVlZXplO1xuZXhwb3J0cy5mbGF0dGVuID0gZmxhdHRlbjtcbmV4cG9ydHMubWFwID0gbWFwO1xuZXhwb3J0cy5mb3JFYWNoID0gZm9yRWFjaDtcbmV4cG9ydHMuZmlsdGVyID0gZmlsdGVyO1xuZXhwb3J0cy5maWx0ZXJSZWdFeHAgPSBmaWx0ZXJSZWdFeHA7XG5leHBvcnRzLmpvaW4gPSBqb2luO1xuZXhwb3J0cy5pZGVudGlmeSA9IGlkZW50aWZ5O1xuZXhwb3J0cy5nZW5lcmFsaXplID0gZ2VuZXJhbGl6ZTtcbmV4cG9ydHMuZ2V0QXJyYXlEYXRhVHlwZSA9IGdldEFycmF5RGF0YVR5cGU7XG5leHBvcnRzLmxhc3QgPSBsYXN0O1xuZXhwb3J0cy5pbml0aWFsID0gaW5pdGlhbDtcbmV4cG9ydHMuY29udGFpbnMgPSBjb250YWlucztcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi9udW1iZXJcIik7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi9pc1wiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi9zdHJpbmdcIik7XG5cbnZhciBfRGltZW5zaW9uRXJyb3IgPSByZXF1aXJlKFwiLi4vZXJyb3IvRGltZW5zaW9uRXJyb3JcIik7XG5cbnZhciBfSW5kZXhFcnJvciA9IHJlcXVpcmUoXCIuLi9lcnJvci9JbmRleEVycm9yXCIpO1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgc2l6ZSBvZiBhIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5LlxuICogVGhpcyBmdW5jdGlvbiBjaGVja3MgdGhlIHNpemUgb2YgdGhlIGZpcnN0IGVudHJ5LCBpdCBkb2VzIG5vdCB2YWxpZGF0ZVxuICogd2hldGhlciBhbGwgZGltZW5zaW9ucyBtYXRjaC4gKHVzZSBmdW5jdGlvbiBgdmFsaWRhdGVgIGZvciB0aGF0KVxuICogQHBhcmFtIHtBcnJheX0geFxuICogQFJldHVybiB7TnVtYmVyW119IHNpemVcbiAqL1xuZnVuY3Rpb24gYXJyYXlTaXplKHgpIHtcbiAgdmFyIHMgPSBbXTtcblxuICB3aGlsZSAoQXJyYXkuaXNBcnJheSh4KSkge1xuICAgIHMucHVzaCh4Lmxlbmd0aCk7XG4gICAgeCA9IHhbMF07XG4gIH1cblxuICByZXR1cm4gcztcbn1cbi8qKlxuICogUmVjdXJzaXZlbHkgdmFsaWRhdGUgd2hldGhlciBlYWNoIGVsZW1lbnQgaW4gYSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheVxuICogaGFzIGEgc2l6ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm92aWRlZCBzaXplIGFycmF5LlxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgICAgQXJyYXkgdG8gYmUgdmFsaWRhdGVkXG4gKiBAcGFyYW0ge251bWJlcltdfSBzaXplICBBcnJheSB3aXRoIHRoZSBzaXplIG9mIGVhY2ggZGltZW5zaW9uXG4gKiBAcGFyYW0ge251bWJlcn0gZGltICAgQ3VycmVudCBkaW1lbnNpb25cbiAqIEB0aHJvd3MgRGltZW5zaW9uRXJyb3JcbiAqIEBwcml2YXRlXG4gKi9cblxuXG5mdW5jdGlvbiBfdmFsaWRhdGUoYXJyYXksIHNpemUsIGRpbSkge1xuICB2YXIgaTtcbiAgdmFyIGxlbiA9IGFycmF5Lmxlbmd0aDtcblxuICBpZiAobGVuICE9PSBzaXplW2RpbV0pIHtcbiAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKGxlbiwgc2l6ZVtkaW1dKTtcbiAgfVxuXG4gIGlmIChkaW0gPCBzaXplLmxlbmd0aCAtIDEpIHtcbiAgICAvLyByZWN1cnNpdmVseSB2YWxpZGF0ZSBlYWNoIGNoaWxkIGFycmF5XG4gICAgdmFyIGRpbU5leHQgPSBkaW0gKyAxO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICB2YXIgY2hpbGQgPSBhcnJheVtpXTtcblxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNoaWxkKSkge1xuICAgICAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKHNpemUubGVuZ3RoIC0gMSwgc2l6ZS5sZW5ndGgsICc8Jyk7XG4gICAgICB9XG5cbiAgICAgIF92YWxpZGF0ZShhcnJheVtpXSwgc2l6ZSwgZGltTmV4dCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGxhc3QgZGltZW5zaW9uLiBub25lIG9mIHRoZSBjaGlsZHMgbWF5IGJlIGFuIGFycmF5XG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShhcnJheVtpXSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihzaXplLmxlbmd0aCArIDEsIHNpemUubGVuZ3RoLCAnPicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBWYWxpZGF0ZSB3aGV0aGVyIGVhY2ggZWxlbWVudCBpbiBhIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5IGhhc1xuICogYSBzaXplIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb3ZpZGVkIHNpemUgYXJyYXkuXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSAgICBBcnJheSB0byBiZSB2YWxpZGF0ZWRcbiAqIEBwYXJhbSB7bnVtYmVyW119IHNpemUgIEFycmF5IHdpdGggdGhlIHNpemUgb2YgZWFjaCBkaW1lbnNpb25cbiAqIEB0aHJvd3MgRGltZW5zaW9uRXJyb3JcbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlKGFycmF5LCBzaXplKSB7XG4gIHZhciBpc1NjYWxhciA9IHNpemUubGVuZ3RoID09PSAwO1xuXG4gIGlmIChpc1NjYWxhcikge1xuICAgIC8vIHNjYWxhclxuICAgIGlmIChBcnJheS5pc0FycmF5KGFycmF5KSkge1xuICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihhcnJheS5sZW5ndGgsIDApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBhcnJheVxuICAgIF92YWxpZGF0ZShhcnJheSwgc2l6ZSwgMCk7XG4gIH1cbn1cbi8qKlxuICogVGVzdCB3aGV0aGVyIGluZGV4IGlzIGFuIGludGVnZXIgbnVtYmVyIHdpdGggaW5kZXggPj0gMCBhbmQgaW5kZXggPCBsZW5ndGhcbiAqIHdoZW4gbGVuZ3RoIGlzIHByb3ZpZGVkXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXggICAgWmVyby1iYXNlZCBpbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGhdIExlbmd0aCBvZiB0aGUgYXJyYXlcbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlSW5kZXgoaW5kZXgsIGxlbmd0aCkge1xuICBpZiAoISgwLCBfaXMuaXNOdW1iZXIpKGluZGV4KSB8fCAhKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShpbmRleCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbmRleCBtdXN0IGJlIGFuIGludGVnZXIgKHZhbHVlOiAnICsgaW5kZXggKyAnKScpO1xuICB9XG5cbiAgaWYgKGluZGV4IDwgMCB8fCB0eXBlb2YgbGVuZ3RoID09PSAnbnVtYmVyJyAmJiBpbmRleCA+PSBsZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgX0luZGV4RXJyb3IuSW5kZXhFcnJvcihpbmRleCwgbGVuZ3RoKTtcbiAgfVxufVxuLyoqXG4gKiBSZXNpemUgYSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheS4gVGhlIHJlc2l6ZWQgYXJyYXkgaXMgcmV0dXJuZWQuXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSAgICAgICAgIEFycmF5IHRvIGJlIHJlc2l6ZWRcbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHNpemUgQXJyYXkgd2l0aCB0aGUgc2l6ZSBvZiBlYWNoIGRpbWVuc2lvblxuICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlPTBdICBWYWx1ZSB0byBiZSBmaWxsZWQgaW4gaW4gbmV3IGVudHJpZXMsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHplcm8gYnkgZGVmYXVsdC4gU3BlY2lmeSBmb3IgZXhhbXBsZSBgbnVsbGAsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGNsZWFybHkgc2VlIGVudHJpZXMgdGhhdCBhcmUgbm90IGV4cGxpY2l0bHlcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0LlxuICogQHJldHVybiB7QXJyYXl9IGFycmF5ICAgICAgICAgVGhlIHJlc2l6ZWQgYXJyYXlcbiAqL1xuXG5cbmZ1bmN0aW9uIHJlc2l6ZShhcnJheSwgc2l6ZSwgZGVmYXVsdFZhbHVlKSB7XG4gIC8vIFRPRE86IGFkZCBzdXBwb3J0IGZvciBzY2FsYXJzLCBoYXZpbmcgc2l6ZT1bXSA/XG4gIC8vIGNoZWNrIHRoZSB0eXBlIG9mIHRoZSBhcmd1bWVudHNcbiAgaWYgKCFBcnJheS5pc0FycmF5KGFycmF5KSB8fCAhQXJyYXkuaXNBcnJheShzaXplKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IGV4cGVjdGVkJyk7XG4gIH1cblxuICBpZiAoc2l6ZS5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jlc2l6aW5nIHRvIHNjYWxhciBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gIH0gLy8gY2hlY2sgd2hldGhlciBzaXplIGNvbnRhaW5zIHBvc2l0aXZlIGludGVnZXJzXG5cblxuICBzaXplLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgaWYgKCEoMCwgX2lzLmlzTnVtYmVyKSh2YWx1ZSkgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikodmFsdWUpIHx8IHZhbHVlIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBzaXplLCBtdXN0IGNvbnRhaW4gcG9zaXRpdmUgaW50ZWdlcnMgJyArICcoc2l6ZTogJyArICgwLCBfc3RyaW5nLmZvcm1hdCkoc2l6ZSkgKyAnKScpO1xuICAgIH1cbiAgfSk7IC8vIHJlY3Vyc2l2ZWx5IHJlc2l6ZSB0aGUgYXJyYXlcblxuICB2YXIgX2RlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkID8gZGVmYXVsdFZhbHVlIDogMDtcblxuICBfcmVzaXplKGFycmF5LCBzaXplLCAwLCBfZGVmYXVsdFZhbHVlKTtcblxuICByZXR1cm4gYXJyYXk7XG59XG4vKipcbiAqIFJlY3Vyc2l2ZWx5IHJlc2l6ZSBhIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSAgICAgICAgIEFycmF5IHRvIGJlIHJlc2l6ZWRcbiAqIEBwYXJhbSB7bnVtYmVyW119IHNpemUgICAgICAgQXJyYXkgd2l0aCB0aGUgc2l6ZSBvZiBlYWNoIGRpbWVuc2lvblxuICogQHBhcmFtIHtudW1iZXJ9IGRpbSAgICAgICAgICBDdXJyZW50IGRpbWVuc2lvblxuICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXSAgICBWYWx1ZSB0byBiZSBmaWxsZWQgaW4gaW4gbmV3IGVudHJpZXMsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCBieSBkZWZhdWx0LlxuICogQHByaXZhdGVcbiAqL1xuXG5cbmZ1bmN0aW9uIF9yZXNpemUoYXJyYXksIHNpemUsIGRpbSwgZGVmYXVsdFZhbHVlKSB7XG4gIHZhciBpO1xuICB2YXIgZWxlbTtcbiAgdmFyIG9sZExlbiA9IGFycmF5Lmxlbmd0aDtcbiAgdmFyIG5ld0xlbiA9IHNpemVbZGltXTtcbiAgdmFyIG1pbkxlbiA9IE1hdGgubWluKG9sZExlbiwgbmV3TGVuKTsgLy8gYXBwbHkgbmV3IGxlbmd0aFxuXG4gIGFycmF5Lmxlbmd0aCA9IG5ld0xlbjtcblxuICBpZiAoZGltIDwgc2l6ZS5sZW5ndGggLSAxKSB7XG4gICAgLy8gbm9uLWxhc3QgZGltZW5zaW9uXG4gICAgdmFyIGRpbU5leHQgPSBkaW0gKyAxOyAvLyByZXNpemUgZXhpc3RpbmcgY2hpbGQgYXJyYXlzXG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbWluTGVuOyBpKyspIHtcbiAgICAgIC8vIHJlc2l6ZSBjaGlsZCBhcnJheVxuICAgICAgZWxlbSA9IGFycmF5W2ldO1xuXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZWxlbSkpIHtcbiAgICAgICAgZWxlbSA9IFtlbGVtXTsgLy8gYWRkIGEgZGltZW5zaW9uXG5cbiAgICAgICAgYXJyYXlbaV0gPSBlbGVtO1xuICAgICAgfVxuXG4gICAgICBfcmVzaXplKGVsZW0sIHNpemUsIGRpbU5leHQsIGRlZmF1bHRWYWx1ZSk7XG4gICAgfSAvLyBjcmVhdGUgbmV3IGNoaWxkIGFycmF5c1xuXG5cbiAgICBmb3IgKGkgPSBtaW5MZW47IGkgPCBuZXdMZW47IGkrKykge1xuICAgICAgLy8gZ2V0IGNoaWxkIGFycmF5XG4gICAgICBlbGVtID0gW107XG4gICAgICBhcnJheVtpXSA9IGVsZW07IC8vIHJlc2l6ZSBuZXcgY2hpbGQgYXJyYXlcblxuICAgICAgX3Jlc2l6ZShlbGVtLCBzaXplLCBkaW1OZXh0LCBkZWZhdWx0VmFsdWUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBsYXN0IGRpbWVuc2lvblxuICAgIC8vIHJlbW92ZSBkaW1lbnNpb25zIG9mIGV4aXN0aW5nIHZhbHVlc1xuICAgIGZvciAoaSA9IDA7IGkgPCBtaW5MZW47IGkrKykge1xuICAgICAgd2hpbGUgKEFycmF5LmlzQXJyYXkoYXJyYXlbaV0pKSB7XG4gICAgICAgIGFycmF5W2ldID0gYXJyYXlbaV1bMF07XG4gICAgICB9XG4gICAgfSAvLyBmaWxsIG5ldyBlbGVtZW50cyB3aXRoIHRoZSBkZWZhdWx0IHZhbHVlXG5cblxuICAgIGZvciAoaSA9IG1pbkxlbjsgaSA8IG5ld0xlbjsgaSsrKSB7XG4gICAgICBhcnJheVtpXSA9IGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogUmUtc2hhcGUgYSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheSB0byBmaXQgdGhlIHNwZWNpZmllZCBkaW1lbnNpb25zXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSAgICAgICAgICAgQXJyYXkgdG8gYmUgcmVzaGFwZWRcbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHNpemVzICBMaXN0IG9mIHNpemVzIGZvciBlYWNoIGRpbWVuc2lvblxuICogQHJldHVybnMge0FycmF5fSAgICAgICAgICAgICAgIEFycmF5IHdob3NlIGRhdGEgaGFzIGJlZW4gZm9ybWF0dGVkIHRvIGZpdCB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgZGltZW5zaW9uc1xuICpcbiAqIEB0aHJvd3Mge0RpbWVuc2lvbkVycm9yfSAgICAgICBJZiB0aGUgcHJvZHVjdCBvZiB0aGUgbmV3IGRpbWVuc2lvbiBzaXplcyBkb2VzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IGVxdWFsIHRoYXQgb2YgdGhlIG9sZCBvbmVzXG4gKi9cblxuXG5mdW5jdGlvbiByZXNoYXBlKGFycmF5LCBzaXplcykge1xuICB2YXIgZmxhdEFycmF5ID0gZmxhdHRlbihhcnJheSk7XG4gIHZhciBuZXdBcnJheTtcblxuICBmdW5jdGlvbiBwcm9kdWN0KGFycikge1xuICAgIHJldHVybiBhcnIucmVkdWNlKGZ1bmN0aW9uIChwcmV2LCBjdXJyKSB7XG4gICAgICByZXR1cm4gcHJldiAqIGN1cnI7XG4gICAgfSk7XG4gIH1cblxuICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyYXkpIHx8ICFBcnJheS5pc0FycmF5KHNpemVzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IGV4cGVjdGVkJyk7XG4gIH1cblxuICBpZiAoc2l6ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcigwLCBwcm9kdWN0KGFycmF5U2l6ZShhcnJheSkpLCAnIT0nKTtcbiAgfVxuXG4gIHZhciB0b3RhbFNpemUgPSAxO1xuXG4gIGZvciAodmFyIHNpemVJbmRleCA9IDA7IHNpemVJbmRleCA8IHNpemVzLmxlbmd0aDsgc2l6ZUluZGV4KyspIHtcbiAgICB0b3RhbFNpemUgKj0gc2l6ZXNbc2l6ZUluZGV4XTtcbiAgfVxuXG4gIGlmIChmbGF0QXJyYXkubGVuZ3RoICE9PSB0b3RhbFNpemUpIHtcbiAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKHByb2R1Y3Qoc2l6ZXMpLCBwcm9kdWN0KGFycmF5U2l6ZShhcnJheSkpLCAnIT0nKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgbmV3QXJyYXkgPSBfcmVzaGFwZShmbGF0QXJyYXksIHNpemVzKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChlIGluc3RhbmNlb2YgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKHByb2R1Y3Qoc2l6ZXMpLCBwcm9kdWN0KGFycmF5U2l6ZShhcnJheSkpLCAnIT0nKTtcbiAgICB9XG5cbiAgICB0aHJvdyBlO1xuICB9XG5cbiAgcmV0dXJuIG5ld0FycmF5O1xufVxuLyoqXG4gKiBJdGVyYXRpdmVseSByZS1zaGFwZSBhIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5IHRvIGZpdCB0aGUgc3BlY2lmaWVkIGRpbWVuc2lvbnNcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5ICAgICAgICAgICBBcnJheSB0byBiZSByZXNoYXBlZFxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gc2l6ZXMgIExpc3Qgb2Ygc2l6ZXMgZm9yIGVhY2ggZGltZW5zaW9uXG4gKiBAcmV0dXJucyB7QXJyYXl9ICAgICAgICAgICAgICAgQXJyYXkgd2hvc2UgZGF0YSBoYXMgYmVlbiBmb3JtYXR0ZWQgdG8gZml0IHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCBkaW1lbnNpb25zXG4gKi9cblxuXG5mdW5jdGlvbiBfcmVzaGFwZShhcnJheSwgc2l6ZXMpIHtcbiAgLy8gdGVzdGluZyBpZiB0aGVyZSBhcmUgZW5vdWdoIGVsZW1lbnRzIGZvciB0aGUgcmVxdWVzdGVkIHNoYXBlXG4gIHZhciB0bXBBcnJheSA9IGFycmF5O1xuICB2YXIgdG1wQXJyYXkyOyAvLyBmb3IgZWFjaCBkaW1lbnNpb25zIHN0YXJ0aW5nIGJ5IHRoZSBsYXN0IG9uZSBhbmQgaWdub3JpbmcgdGhlIGZpcnN0IG9uZVxuXG4gIGZvciAodmFyIHNpemVJbmRleCA9IHNpemVzLmxlbmd0aCAtIDE7IHNpemVJbmRleCA+IDA7IHNpemVJbmRleC0tKSB7XG4gICAgdmFyIHNpemUgPSBzaXplc1tzaXplSW5kZXhdO1xuICAgIHRtcEFycmF5MiA9IFtdOyAvLyBhZ2dyZWdhdGUgdGhlIGVsZW1lbnRzIG9mIHRoZSBjdXJyZW50IHRtcEFycmF5IGluIGVsZW1lbnRzIG9mIHRoZSByZXF1ZXN0ZWQgc2l6ZVxuXG4gICAgdmFyIGxlbmd0aCA9IHRtcEFycmF5Lmxlbmd0aCAvIHNpemU7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB0bXBBcnJheTIucHVzaCh0bXBBcnJheS5zbGljZShpICogc2l6ZSwgKGkgKyAxKSAqIHNpemUpKTtcbiAgICB9IC8vIHNldCBpdCBhcyB0aGUgbmV3IHRtcEFycmF5IGZvciB0aGUgbmV4dCBsb29wIHR1cm4gb3IgZm9yIHJldHVyblxuXG5cbiAgICB0bXBBcnJheSA9IHRtcEFycmF5MjtcbiAgfVxuXG4gIHJldHVybiB0bXBBcnJheTtcbn1cbi8qKlxuICogU3F1ZWV6ZSBhIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheVxuICogQHBhcmFtIHtBcnJheX0gW3NpemVdXG4gKiBAcmV0dXJucyB7QXJyYXl9IHJldHVybnMgdGhlIGFycmF5IGl0c2VsZlxuICovXG5cblxuZnVuY3Rpb24gc3F1ZWV6ZShhcnJheSwgc2l6ZSkge1xuICB2YXIgcyA9IHNpemUgfHwgYXJyYXlTaXplKGFycmF5KTsgLy8gc3F1ZWV6ZSBvdXRlciBkaW1lbnNpb25zXG5cbiAgd2hpbGUgKEFycmF5LmlzQXJyYXkoYXJyYXkpICYmIGFycmF5Lmxlbmd0aCA9PT0gMSkge1xuICAgIGFycmF5ID0gYXJyYXlbMF07XG4gICAgcy5zaGlmdCgpO1xuICB9IC8vIGZpbmQgdGhlIGZpcnN0IGRpbWVuc2lvbiB0byBiZSBzcXVlZXplZFxuXG5cbiAgdmFyIGRpbXMgPSBzLmxlbmd0aDtcblxuICB3aGlsZSAoc1tkaW1zIC0gMV0gPT09IDEpIHtcbiAgICBkaW1zLS07XG4gIH0gLy8gc3F1ZWV6ZSBpbm5lciBkaW1lbnNpb25zXG5cblxuICBpZiAoZGltcyA8IHMubGVuZ3RoKSB7XG4gICAgYXJyYXkgPSBfc3F1ZWV6ZShhcnJheSwgZGltcywgMCk7XG4gICAgcy5sZW5ndGggPSBkaW1zO1xuICB9XG5cbiAgcmV0dXJuIGFycmF5O1xufVxuLyoqXG4gKiBSZWN1cnNpdmVseSBzcXVlZXplIGEgbXVsdGkgZGltZW5zaW9uYWwgYXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gKiBAcGFyYW0ge251bWJlcn0gZGltcyBSZXF1aXJlZCBudW1iZXIgb2YgZGltZW5zaW9uc1xuICogQHBhcmFtIHtudW1iZXJ9IGRpbSAgQ3VycmVudCBkaW1lbnNpb25cbiAqIEByZXR1cm5zIHtBcnJheSB8ICp9IFJldHVybnMgdGhlIHNxdWVlemVkIGFycmF5XG4gKiBAcHJpdmF0ZVxuICovXG5cblxuZnVuY3Rpb24gX3NxdWVlemUoYXJyYXksIGRpbXMsIGRpbSkge1xuICB2YXIgaSwgaWk7XG5cbiAgaWYgKGRpbSA8IGRpbXMpIHtcbiAgICB2YXIgbmV4dCA9IGRpbSArIDE7XG5cbiAgICBmb3IgKGkgPSAwLCBpaSA9IGFycmF5Lmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIGFycmF5W2ldID0gX3NxdWVlemUoYXJyYXlbaV0sIGRpbXMsIG5leHQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAoQXJyYXkuaXNBcnJheShhcnJheSkpIHtcbiAgICAgIGFycmF5ID0gYXJyYXlbMF07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFycmF5O1xufVxuLyoqXG4gKiBVbnNxdWVlemUgYSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheTogYWRkIGRpbWVuc2lvbnMgd2hlbiBtaXNzaW5nXG4gKlxuICogUGFyYW10ZXIgYHNpemVgIHdpbGwgYmUgbXV0YXRlZCB0byBtYXRjaCB0aGUgbmV3LCB1bnF1ZWV6ZWQgbWF0cml4IHNpemUuXG4gKlxuICogQHBhcmFtIHtBcnJheX0gYXJyYXlcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaW1zICAgICAgIERlc2lyZWQgbnVtYmVyIG9mIGRpbWVuc2lvbnMgb2YgdGhlIGFycmF5XG4gKiBAcGFyYW0ge251bWJlcn0gW291dGVyXSAgICBOdW1iZXIgb2Ygb3V0ZXIgZGltZW5zaW9ucyB0byBiZSBhZGRlZFxuICogQHBhcmFtIHtBcnJheX0gW3NpemVdIEN1cnJlbnQgc2l6ZSBvZiBhcnJheS5cbiAqIEByZXR1cm5zIHtBcnJheX0gcmV0dXJucyB0aGUgYXJyYXkgaXRzZWxmXG4gKiBAcHJpdmF0ZVxuICovXG5cblxuZnVuY3Rpb24gdW5zcXVlZXplKGFycmF5LCBkaW1zLCBvdXRlciwgc2l6ZSkge1xuICB2YXIgcyA9IHNpemUgfHwgYXJyYXlTaXplKGFycmF5KTsgLy8gdW5zcXVlZXplIG91dGVyIGRpbWVuc2lvbnNcblxuICBpZiAob3V0ZXIpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG91dGVyOyBpKyspIHtcbiAgICAgIGFycmF5ID0gW2FycmF5XTtcbiAgICAgIHMudW5zaGlmdCgxKTtcbiAgICB9XG4gIH0gLy8gdW5zcXVlZXplIGlubmVyIGRpbWVuc2lvbnNcblxuXG4gIGFycmF5ID0gX3Vuc3F1ZWV6ZShhcnJheSwgZGltcywgMCk7XG5cbiAgd2hpbGUgKHMubGVuZ3RoIDwgZGltcykge1xuICAgIHMucHVzaCgxKTtcbiAgfVxuXG4gIHJldHVybiBhcnJheTtcbn1cbi8qKlxuICogUmVjdXJzaXZlbHkgdW5zcXVlZXplIGEgbXVsdGkgZGltZW5zaW9uYWwgYXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gKiBAcGFyYW0ge251bWJlcn0gZGltcyBSZXF1aXJlZCBudW1iZXIgb2YgZGltZW5zaW9uc1xuICogQHBhcmFtIHtudW1iZXJ9IGRpbSAgQ3VycmVudCBkaW1lbnNpb25cbiAqIEByZXR1cm5zIHtBcnJheSB8ICp9IFJldHVybnMgdGhlIHNxdWVlemVkIGFycmF5XG4gKiBAcHJpdmF0ZVxuICovXG5cblxuZnVuY3Rpb24gX3Vuc3F1ZWV6ZShhcnJheSwgZGltcywgZGltKSB7XG4gIHZhciBpLCBpaTtcblxuICBpZiAoQXJyYXkuaXNBcnJheShhcnJheSkpIHtcbiAgICB2YXIgbmV4dCA9IGRpbSArIDE7XG5cbiAgICBmb3IgKGkgPSAwLCBpaSA9IGFycmF5Lmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIGFycmF5W2ldID0gX3Vuc3F1ZWV6ZShhcnJheVtpXSwgZGltcywgbmV4dCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGQgPSBkaW07IGQgPCBkaW1zOyBkKyspIHtcbiAgICAgIGFycmF5ID0gW2FycmF5XTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYXJyYXk7XG59XG4vKipcbiAqIEZsYXR0ZW4gYSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheSwgcHV0IGFsbCBlbGVtZW50cyBpbiBhIG9uZSBkaW1lbnNpb25hbFxuICogYXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5ICAgQSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheVxuICogQHJldHVybiB7QXJyYXl9ICAgICAgICBUaGUgZmxhdHRlbmVkIGFycmF5ICgxIGRpbWVuc2lvbmFsKVxuICovXG5cblxuZnVuY3Rpb24gZmxhdHRlbihhcnJheSkge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyYXkpKSB7XG4gICAgLy8gaWYgbm90IGFuIGFycmF5LCByZXR1cm4gYXMgaXNcbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cblxuICB2YXIgZmxhdCA9IFtdO1xuICBhcnJheS5mb3JFYWNoKGZ1bmN0aW9uIGNhbGxiYWNrKHZhbHVlKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB2YWx1ZS5mb3JFYWNoKGNhbGxiYWNrKTsgLy8gdHJhdmVyc2UgdGhyb3VnaCBzdWItYXJyYXlzIHJlY3Vyc2l2ZWx5XG4gICAgfSBlbHNlIHtcbiAgICAgIGZsYXQucHVzaCh2YWx1ZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGZsYXQ7XG59XG4vKipcbiAqIEEgc2FmZSBtYXBcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICovXG5cblxuZnVuY3Rpb24gbWFwKGFycmF5LCBjYWxsYmFjaykge1xuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKGFycmF5LCBjYWxsYmFjayk7XG59XG4vKipcbiAqIEEgc2FmZSBmb3JFYWNoXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheVxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqL1xuXG5cbmZ1bmN0aW9uIGZvckVhY2goYXJyYXksIGNhbGxiYWNrKSB7XG4gIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoYXJyYXksIGNhbGxiYWNrKTtcbn1cbi8qKlxuICogQSBzYWZlIGZpbHRlclxuICogQHBhcmFtIHtBcnJheX0gYXJyYXlcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKi9cblxuXG5mdW5jdGlvbiBmaWx0ZXIoYXJyYXksIGNhbGxiYWNrKSB7XG4gIGlmIChhcnJheVNpemUoYXJyYXkpLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignT25seSBvbmUgZGltZW5zaW9uYWwgbWF0cmljZXMgc3VwcG9ydGVkJyk7XG4gIH1cblxuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmZpbHRlci5jYWxsKGFycmF5LCBjYWxsYmFjayk7XG59XG4vKipcbiAqIEZpbHRlciB2YWx1ZXMgaW4gYSBjYWxsYmFjayBnaXZlbiBhIHJlZ3VsYXIgZXhwcmVzc2lvblxuICogQHBhcmFtIHtBcnJheX0gYXJyYXlcbiAqIEBwYXJhbSB7UmVnRXhwfSByZWdleHBcbiAqIEByZXR1cm4ge0FycmF5fSBSZXR1cm5zIHRoZSBmaWx0ZXJlZCBhcnJheVxuICogQHByaXZhdGVcbiAqL1xuXG5cbmZ1bmN0aW9uIGZpbHRlclJlZ0V4cChhcnJheSwgcmVnZXhwKSB7XG4gIGlmIChhcnJheVNpemUoYXJyYXkpLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignT25seSBvbmUgZGltZW5zaW9uYWwgbWF0cmljZXMgc3VwcG9ydGVkJyk7XG4gIH1cblxuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmZpbHRlci5jYWxsKGFycmF5LCBmdW5jdGlvbiAoZW50cnkpIHtcbiAgICByZXR1cm4gcmVnZXhwLnRlc3QoZW50cnkpO1xuICB9KTtcbn1cbi8qKlxuICogQSBzYWZlIGpvaW5cbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gKiBAcGFyYW0ge3N0cmluZ30gc2VwYXJhdG9yXG4gKi9cblxuXG5mdW5jdGlvbiBqb2luKGFycmF5LCBzZXBhcmF0b3IpIHtcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5qb2luLmNhbGwoYXJyYXksIHNlcGFyYXRvcik7XG59XG4vKipcbiAqIEFzc2lnbiBhIG51bWVyaWMgaWRlbnRpZmllciB0byBldmVyeSBlbGVtZW50IG9mIGEgc29ydGVkIGFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhICBBbiBhcnJheVxuICogQHJldHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIG9iamVjdHMgY29udGFpbmluZyB0aGUgb3JpZ2luYWwgdmFsdWUgYW5kIGl0cyBpZGVudGlmaWVyXG4gKi9cblxuXG5mdW5jdGlvbiBpZGVudGlmeShhKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShhKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IGlucHV0IGV4cGVjdGVkJyk7XG4gIH1cblxuICBpZiAoYS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gYTtcbiAgfVxuXG4gIHZhciBiID0gW107XG4gIHZhciBjb3VudCA9IDA7XG4gIGJbMF0gPSB7XG4gICAgdmFsdWU6IGFbMF0sXG4gICAgaWRlbnRpZmllcjogMFxuICB9O1xuXG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChhW2ldID09PSBhW2kgLSAxXSkge1xuICAgICAgY291bnQrKztcbiAgICB9IGVsc2Uge1xuICAgICAgY291bnQgPSAwO1xuICAgIH1cblxuICAgIGIucHVzaCh7XG4gICAgICB2YWx1ZTogYVtpXSxcbiAgICAgIGlkZW50aWZpZXI6IGNvdW50XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gYjtcbn1cbi8qKlxuICogUmVtb3ZlIHRoZSBudW1lcmljIGlkZW50aWZpZXIgZnJvbSB0aGUgZWxlbWVudHNcbiAqIEBwYXJhbSB7YXJyYXl9IGEgIEFuIGFycmF5XG4gKiBAcmV0dXJuIHthcnJheX0gQW4gYXJyYXkgb2YgdmFsdWVzIHdpdGhvdXQgaWRlbnRpZmllcnNcbiAqL1xuXG5cbmZ1bmN0aW9uIGdlbmVyYWxpemUoYSkge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoYSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSBpbnB1dCBleHBlY3RlZCcpO1xuICB9XG5cbiAgaWYgKGEubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGE7XG4gIH1cblxuICB2YXIgYiA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgIGIucHVzaChhW2ldLnZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiBiO1xufVxuLyoqXG4gKiBDaGVjayB0aGUgZGF0YXR5cGUgb2YgYSBnaXZlbiBvYmplY3RcbiAqIFRoaXMgaXMgYSBsb3cgbGV2ZWwgaW1wbGVtZW50YXRpb24gdGhhdCBzaG91bGQgb25seSBiZSB1c2VkIGJ5XG4gKiBwYXJlbnQgTWF0cml4IGNsYXNzZXMgc3VjaCBhcyBTcGFyc2VNYXRyaXggb3IgRGVuc2VNYXRyaXhcbiAqIFRoaXMgbWV0aG9kIGRvZXMgbm90IHZhbGlkYXRlIEFycmF5IE1hdHJpeCBzaGFwZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXlcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHR5cGVPZiAgIENhbGxiYWNrIGZ1bmN0aW9uIHRvIHVzZSB0byBkZXRlcm1pbmUgdGhlIHR5cGUgb2YgYSB2YWx1ZVxuICogQHJldHVybiBzdHJpbmdcbiAqL1xuXG5cbmZ1bmN0aW9uIGdldEFycmF5RGF0YVR5cGUoYXJyYXksIHR5cGVPZikge1xuICB2YXIgdHlwZTsgLy8gdG8gaG9sZCB0eXBlIGluZm9cblxuICB2YXIgbGVuZ3RoID0gMDsgLy8gdG8gaG9sZCBsZW5ndGggdmFsdWUgdG8gZW5zdXJlIGl0IGhhcyBjb25zaXN0ZW50IHNpemVzXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gYXJyYXlbaV07XG4gICAgdmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KGl0ZW0pOyAvLyBTYXZpbmcgdGhlIHRhcmdldCBtYXRyaXggcm93IHNpemVcblxuICAgIGlmIChpID09PSAwICYmIGlzQXJyYXkpIHtcbiAgICAgIGxlbmd0aCA9IGl0ZW0ubGVuZ3RoO1xuICAgIH0gLy8gSWYgdGhlIGN1cnJlbnQgaXRlbSBpcyBhbiBhcnJheSBidXQgdGhlIGxlbmd0aCBkb2VzIG5vdCBlcXVhbCB0aGUgdGFyZ2V0VmVjdG9yU2l6ZVxuXG5cbiAgICBpZiAoaXNBcnJheSAmJiBpdGVtLmxlbmd0aCAhPT0gbGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHZhciBpdGVtVHlwZSA9IGlzQXJyYXkgPyBnZXRBcnJheURhdGFUeXBlKGl0ZW0sIHR5cGVPZikgLy8gcmVjdXJzZSBpbnRvIGEgbmVzdGVkIGFycmF5XG4gICAgOiB0eXBlT2YoaXRlbSk7XG5cbiAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0eXBlID0gaXRlbVR5cGU7IC8vIGZpcnN0IGl0ZW1cbiAgICB9IGVsc2UgaWYgKHR5cGUgIT09IGl0ZW1UeXBlKSB7XG4gICAgICByZXR1cm4gJ21peGVkJztcbiAgICB9IGVsc2Ugey8vIHdlJ3JlIGdvb2QsIGV2ZXJ5dGhpbmcgaGFzIHRoZSBzYW1lIHR5cGUgc28gZmFyXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHR5cGU7XG59XG4vKipcbiAqIFJldHVybiB0aGUgbGFzdCBpdGVtIGZyb20gYW4gYXJyYXlcbiAqIEBwYXJhbSBhcnJheVxuICogQHJldHVybnMgeyp9XG4gKi9cblxuXG5mdW5jdGlvbiBsYXN0KGFycmF5KSB7XG4gIHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAxXTtcbn1cbi8qKlxuICogR2V0IGFsbCBidXQgdGhlIGxhc3QgZWxlbWVudCBvZiBhcnJheS5cbiAqL1xuXG5cbmZ1bmN0aW9uIGluaXRpYWwoYXJyYXkpIHtcbiAgcmV0dXJuIGFycmF5LnNsaWNlKDAsIGFycmF5Lmxlbmd0aCAtIDEpO1xufVxuLyoqXG4gKiBUZXN0IHdoZXRoZXIgYW4gYXJyYXkgb3Igc3RyaW5nIGNvbnRhaW5zIGFuIGl0ZW1cbiAqIEBwYXJhbSB7QXJyYXkgfCBzdHJpbmd9IGFycmF5XG4gKiBAcGFyYW0geyp9IGl0ZW1cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cblxuXG5mdW5jdGlvbiBjb250YWlucyhhcnJheSwgaXRlbSkge1xuICByZXR1cm4gYXJyYXkuaW5kZXhPZihpdGVtKSAhPT0gLTE7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJpdEFuZEJpZ051bWJlciA9IGJpdEFuZEJpZ051bWJlcjtcbmV4cG9ydHMuYml0Tm90QmlnTnVtYmVyID0gYml0Tm90QmlnTnVtYmVyO1xuZXhwb3J0cy5iaXRPckJpZ051bWJlciA9IGJpdE9yQmlnTnVtYmVyO1xuZXhwb3J0cy5iaXR3aXNlID0gYml0d2lzZTtcbmV4cG9ydHMuYml0WG9yID0gYml0WG9yO1xuZXhwb3J0cy5sZWZ0U2hpZnRCaWdOdW1iZXIgPSBsZWZ0U2hpZnRCaWdOdW1iZXI7XG5leHBvcnRzLnJpZ2h0QXJpdGhTaGlmdEJpZ051bWJlciA9IHJpZ2h0QXJpdGhTaGlmdEJpZ051bWJlcjtcblxuLyoqXG4gKiBCaXR3aXNlIGFuZCBmb3IgQmlnbnVtYmVyc1xuICpcbiAqIFNwZWNpYWwgQ2FzZXM6XG4gKiAgIE4gJiAgbiA9ICBOXG4gKiAgIG4gJiAgMCA9ICAwXG4gKiAgIG4gJiAtMSA9ICBuXG4gKiAgIG4gJiAgbiA9ICBuXG4gKiAgIEkgJiAgSSA9ICBJXG4gKiAgLUkgJiAtSSA9IC1JXG4gKiAgIEkgJiAtSSA9ICAwXG4gKiAgIEkgJiAgbiA9ICBuXG4gKiAgIEkgJiAtbiA9ICBJXG4gKiAgLUkgJiAgbiA9ICAwXG4gKiAgLUkgJiAtbiA9IC1JXG4gKlxuICogQHBhcmFtIHtCaWdOdW1iZXJ9IHhcbiAqIEBwYXJhbSB7QmlnTnVtYmVyfSB5XG4gKiBAcmV0dXJuIHtCaWdOdW1iZXJ9IFJlc3VsdCBvZiBgeGAgJiBgeWAsIGlzIGZ1bGx5IHByZWNpc2VcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGJpdEFuZEJpZ051bWJlcih4LCB5KSB7XG4gIGlmICh4LmlzRmluaXRlKCkgJiYgIXguaXNJbnRlZ2VyKCkgfHwgeS5pc0Zpbml0ZSgpICYmICF5LmlzSW50ZWdlcigpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnRlZ2VycyBleHBlY3RlZCBpbiBmdW5jdGlvbiBiaXRBbmQnKTtcbiAgfVxuXG4gIHZhciBCaWdOdW1iZXIgPSB4LmNvbnN0cnVjdG9yO1xuXG4gIGlmICh4LmlzTmFOKCkgfHwgeS5pc05hTigpKSB7XG4gICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoTmFOKTtcbiAgfVxuXG4gIGlmICh4LmlzWmVybygpIHx8IHkuZXEoLTEpIHx8IHguZXEoeSkpIHtcbiAgICByZXR1cm4geDtcbiAgfVxuXG4gIGlmICh5LmlzWmVybygpIHx8IHguZXEoLTEpKSB7XG4gICAgcmV0dXJuIHk7XG4gIH1cblxuICBpZiAoIXguaXNGaW5pdGUoKSB8fCAheS5pc0Zpbml0ZSgpKSB7XG4gICAgaWYgKCF4LmlzRmluaXRlKCkgJiYgIXkuaXNGaW5pdGUoKSkge1xuICAgICAgaWYgKHguaXNOZWdhdGl2ZSgpID09PSB5LmlzTmVnYXRpdmUoKSkge1xuICAgICAgICByZXR1cm4geDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoMCk7XG4gICAgfVxuXG4gICAgaWYgKCF4LmlzRmluaXRlKCkpIHtcbiAgICAgIGlmICh5LmlzTmVnYXRpdmUoKSkge1xuICAgICAgICByZXR1cm4geDtcbiAgICAgIH1cblxuICAgICAgaWYgKHguaXNOZWdhdGl2ZSgpKSB7XG4gICAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKDApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4geTtcbiAgICB9XG5cbiAgICBpZiAoIXkuaXNGaW5pdGUoKSkge1xuICAgICAgaWYgKHguaXNOZWdhdGl2ZSgpKSB7XG4gICAgICAgIHJldHVybiB5O1xuICAgICAgfVxuXG4gICAgICBpZiAoeS5pc05lZ2F0aXZlKCkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoMCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB4O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBiaXR3aXNlKHgsIHksIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIGEgJiBiO1xuICB9KTtcbn1cbi8qKlxuICogQml0d2lzZSBub3RcbiAqIEBwYXJhbSB7QmlnTnVtYmVyfSB4XG4gKiBAcmV0dXJuIHtCaWdOdW1iZXJ9IFJlc3VsdCBvZiB+YHhgLCBmdWxseSBwcmVjaXNlXG4gKlxuICovXG5cblxuZnVuY3Rpb24gYml0Tm90QmlnTnVtYmVyKHgpIHtcbiAgaWYgKHguaXNGaW5pdGUoKSAmJiAheC5pc0ludGVnZXIoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW50ZWdlciBleHBlY3RlZCBpbiBmdW5jdGlvbiBiaXROb3QnKTtcbiAgfVxuXG4gIHZhciBCaWdOdW1iZXIgPSB4LmNvbnN0cnVjdG9yO1xuICB2YXIgcHJldlByZWMgPSBCaWdOdW1iZXIucHJlY2lzaW9uO1xuICBCaWdOdW1iZXIuY29uZmlnKHtcbiAgICBwcmVjaXNpb246IDFFOVxuICB9KTtcbiAgdmFyIHJlc3VsdCA9IHgucGx1cyhuZXcgQmlnTnVtYmVyKDEpKTtcbiAgcmVzdWx0LnMgPSAtcmVzdWx0LnMgfHwgbnVsbDtcbiAgQmlnTnVtYmVyLmNvbmZpZyh7XG4gICAgcHJlY2lzaW9uOiBwcmV2UHJlY1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogQml0d2lzZSBPUiBmb3IgQmlnTnVtYmVyc1xuICpcbiAqIFNwZWNpYWwgQ2FzZXM6XG4gKiAgIE4gfCAgbiA9ICBOXG4gKiAgIG4gfCAgMCA9ICBuXG4gKiAgIG4gfCAtMSA9IC0xXG4gKiAgIG4gfCAgbiA9ICBuXG4gKiAgIEkgfCAgSSA9ICBJXG4gKiAgLUkgfCAtSSA9IC1JXG4gKiAgIEkgfCAtbiA9IC0xXG4gKiAgIEkgfCAtSSA9IC0xXG4gKiAgIEkgfCAgbiA9ICBJXG4gKiAgLUkgfCAgbiA9IC1JXG4gKiAgLUkgfCAtbiA9IC1uXG4gKlxuICogQHBhcmFtIHtCaWdOdW1iZXJ9IHhcbiAqIEBwYXJhbSB7QmlnTnVtYmVyfSB5XG4gKiBAcmV0dXJuIHtCaWdOdW1iZXJ9IFJlc3VsdCBvZiBgeGAgfCBgeWAsIGZ1bGx5IHByZWNpc2VcbiAqL1xuXG5cbmZ1bmN0aW9uIGJpdE9yQmlnTnVtYmVyKHgsIHkpIHtcbiAgaWYgKHguaXNGaW5pdGUoKSAmJiAheC5pc0ludGVnZXIoKSB8fCB5LmlzRmluaXRlKCkgJiYgIXkuaXNJbnRlZ2VyKCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludGVnZXJzIGV4cGVjdGVkIGluIGZ1bmN0aW9uIGJpdE9yJyk7XG4gIH1cblxuICB2YXIgQmlnTnVtYmVyID0geC5jb25zdHJ1Y3RvcjtcblxuICBpZiAoeC5pc05hTigpIHx8IHkuaXNOYU4oKSkge1xuICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKE5hTik7XG4gIH1cblxuICB2YXIgbmVnT25lID0gbmV3IEJpZ051bWJlcigtMSk7XG5cbiAgaWYgKHguaXNaZXJvKCkgfHwgeS5lcShuZWdPbmUpIHx8IHguZXEoeSkpIHtcbiAgICByZXR1cm4geTtcbiAgfVxuXG4gIGlmICh5LmlzWmVybygpIHx8IHguZXEobmVnT25lKSkge1xuICAgIHJldHVybiB4O1xuICB9XG5cbiAgaWYgKCF4LmlzRmluaXRlKCkgfHwgIXkuaXNGaW5pdGUoKSkge1xuICAgIGlmICgheC5pc0Zpbml0ZSgpICYmICF4LmlzTmVnYXRpdmUoKSAmJiB5LmlzTmVnYXRpdmUoKSB8fCB4LmlzTmVnYXRpdmUoKSAmJiAheS5pc05lZ2F0aXZlKCkgJiYgIXkuaXNGaW5pdGUoKSkge1xuICAgICAgcmV0dXJuIG5lZ09uZTtcbiAgICB9XG5cbiAgICBpZiAoeC5pc05lZ2F0aXZlKCkgJiYgeS5pc05lZ2F0aXZlKCkpIHtcbiAgICAgIHJldHVybiB4LmlzRmluaXRlKCkgPyB4IDogeTtcbiAgICB9XG5cbiAgICByZXR1cm4geC5pc0Zpbml0ZSgpID8geSA6IHg7XG4gIH1cblxuICByZXR1cm4gYml0d2lzZSh4LCB5LCBmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBhIHwgYjtcbiAgfSk7XG59XG4vKipcbiAqIEFwcGxpZXMgYml0d2lzZSBmdW5jdGlvbiB0byBudW1iZXJzXG4gKiBAcGFyYW0ge0JpZ051bWJlcn0geFxuICogQHBhcmFtIHtCaWdOdW1iZXJ9IHlcbiAqIEBwYXJhbSB7ZnVuY3Rpb24gKGEsIGIpfSBmdW5jXG4gKiBAcmV0dXJuIHtCaWdOdW1iZXJ9XG4gKi9cblxuXG5mdW5jdGlvbiBiaXR3aXNlKHgsIHksIGZ1bmMpIHtcbiAgdmFyIEJpZ051bWJlciA9IHguY29uc3RydWN0b3I7XG4gIHZhciB4Qml0cywgeUJpdHM7XG4gIHZhciB4U2lnbiA9ICsoeC5zIDwgMCk7XG4gIHZhciB5U2lnbiA9ICsoeS5zIDwgMCk7XG5cbiAgaWYgKHhTaWduKSB7XG4gICAgeEJpdHMgPSBkZWNDb2VmZmljaWVudFRvQmluYXJ5U3RyaW5nKGJpdE5vdEJpZ051bWJlcih4KSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHhCaXRzLmxlbmd0aDsgKytpKSB7XG4gICAgICB4Qml0c1tpXSBePSAxO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB4Qml0cyA9IGRlY0NvZWZmaWNpZW50VG9CaW5hcnlTdHJpbmcoeCk7XG4gIH1cblxuICBpZiAoeVNpZ24pIHtcbiAgICB5Qml0cyA9IGRlY0NvZWZmaWNpZW50VG9CaW5hcnlTdHJpbmcoYml0Tm90QmlnTnVtYmVyKHkpKTtcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCB5Qml0cy5sZW5ndGg7ICsrX2kpIHtcbiAgICAgIHlCaXRzW19pXSBePSAxO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB5Qml0cyA9IGRlY0NvZWZmaWNpZW50VG9CaW5hcnlTdHJpbmcoeSk7XG4gIH1cblxuICB2YXIgbWluQml0cywgbWF4Qml0cywgbWluU2lnbjtcblxuICBpZiAoeEJpdHMubGVuZ3RoIDw9IHlCaXRzLmxlbmd0aCkge1xuICAgIG1pbkJpdHMgPSB4Qml0cztcbiAgICBtYXhCaXRzID0geUJpdHM7XG4gICAgbWluU2lnbiA9IHhTaWduO1xuICB9IGVsc2Uge1xuICAgIG1pbkJpdHMgPSB5Qml0cztcbiAgICBtYXhCaXRzID0geEJpdHM7XG4gICAgbWluU2lnbiA9IHlTaWduO1xuICB9XG5cbiAgdmFyIHNob3J0TGVuID0gbWluQml0cy5sZW5ndGg7XG4gIHZhciBsb25nTGVuID0gbWF4Qml0cy5sZW5ndGg7XG4gIHZhciBleHBGdW5jVmFsID0gZnVuYyh4U2lnbiwgeVNpZ24pIF4gMTtcbiAgdmFyIG91dFZhbCA9IG5ldyBCaWdOdW1iZXIoZXhwRnVuY1ZhbCBeIDEpO1xuICB2YXIgdHdvUG93ZXIgPSBuZXcgQmlnTnVtYmVyKDEpO1xuICB2YXIgdHdvID0gbmV3IEJpZ051bWJlcigyKTtcbiAgdmFyIHByZXZQcmVjID0gQmlnTnVtYmVyLnByZWNpc2lvbjtcbiAgQmlnTnVtYmVyLmNvbmZpZyh7XG4gICAgcHJlY2lzaW9uOiAxRTlcbiAgfSk7XG5cbiAgd2hpbGUgKHNob3J0TGVuID4gMCkge1xuICAgIGlmIChmdW5jKG1pbkJpdHNbLS1zaG9ydExlbl0sIG1heEJpdHNbLS1sb25nTGVuXSkgPT09IGV4cEZ1bmNWYWwpIHtcbiAgICAgIG91dFZhbCA9IG91dFZhbC5wbHVzKHR3b1Bvd2VyKTtcbiAgICB9XG5cbiAgICB0d29Qb3dlciA9IHR3b1Bvd2VyLnRpbWVzKHR3byk7XG4gIH1cblxuICB3aGlsZSAobG9uZ0xlbiA+IDApIHtcbiAgICBpZiAoZnVuYyhtaW5TaWduLCBtYXhCaXRzWy0tbG9uZ0xlbl0pID09PSBleHBGdW5jVmFsKSB7XG4gICAgICBvdXRWYWwgPSBvdXRWYWwucGx1cyh0d29Qb3dlcik7XG4gICAgfVxuXG4gICAgdHdvUG93ZXIgPSB0d29Qb3dlci50aW1lcyh0d28pO1xuICB9XG5cbiAgQmlnTnVtYmVyLmNvbmZpZyh7XG4gICAgcHJlY2lzaW9uOiBwcmV2UHJlY1xuICB9KTtcblxuICBpZiAoZXhwRnVuY1ZhbCA9PT0gMCkge1xuICAgIG91dFZhbC5zID0gLW91dFZhbC5zO1xuICB9XG5cbiAgcmV0dXJuIG91dFZhbDtcbn1cbi8qIEV4dHJhY3RlZCBmcm9tIGRlY2ltYWwuanMsIGFuZCBlZGl0ZWQgdG8gc3BlY2lhbGl6ZS4gKi9cblxuXG5mdW5jdGlvbiBkZWNDb2VmZmljaWVudFRvQmluYXJ5U3RyaW5nKHgpIHtcbiAgLy8gQ29udmVydCB0byBzdHJpbmdcbiAgdmFyIGEgPSB4LmQ7IC8vIGFycmF5IHdpdGggZGlnaXRzXG5cbiAgdmFyIHIgPSBhWzBdICsgJyc7XG5cbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhLmxlbmd0aDsgKytpKSB7XG4gICAgdmFyIHMgPSBhW2ldICsgJyc7XG5cbiAgICBmb3IgKHZhciB6ID0gNyAtIHMubGVuZ3RoOyB6LS07KSB7XG4gICAgICBzID0gJzAnICsgcztcbiAgICB9XG5cbiAgICByICs9IHM7XG4gIH1cblxuICB2YXIgaiA9IHIubGVuZ3RoO1xuXG4gIHdoaWxlIChyLmNoYXJBdChqKSA9PT0gJzAnKSB7XG4gICAgai0tO1xuICB9XG5cbiAgdmFyIHhlID0geC5lO1xuICB2YXIgc3RyID0gci5zbGljZSgwLCBqICsgMSB8fCAxKTtcbiAgdmFyIHN0ckwgPSBzdHIubGVuZ3RoO1xuXG4gIGlmICh4ZSA+IDApIHtcbiAgICBpZiAoKyt4ZSA+IHN0ckwpIHtcbiAgICAgIC8vIEFwcGVuZCB6ZXJvcy5cbiAgICAgIHhlIC09IHN0ckw7XG5cbiAgICAgIHdoaWxlICh4ZS0tKSB7XG4gICAgICAgIHN0ciArPSAnMCc7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh4ZSA8IHN0ckwpIHtcbiAgICAgIHN0ciA9IHN0ci5zbGljZSgwLCB4ZSkgKyAnLicgKyBzdHIuc2xpY2UoeGUpO1xuICAgIH1cbiAgfSAvLyBDb252ZXJ0IGZyb20gYmFzZSAxMCAoZGVjaW1hbCkgdG8gYmFzZSAyXG5cblxuICB2YXIgYXJyID0gWzBdO1xuXG4gIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IHN0ci5sZW5ndGg7KSB7XG4gICAgdmFyIGFyckwgPSBhcnIubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGFyckwtLSkge1xuICAgICAgYXJyW2FyckxdICo9IDEwO1xuICAgIH1cblxuICAgIGFyclswXSArPSBwYXJzZUludChzdHIuY2hhckF0KF9pMisrKSk7IC8vIGNvbnZlcnQgdG8gaW50XG5cbiAgICBmb3IgKHZhciBfaiA9IDA7IF9qIDwgYXJyLmxlbmd0aDsgKytfaikge1xuICAgICAgaWYgKGFycltfal0gPiAxKSB7XG4gICAgICAgIGlmIChhcnJbX2ogKyAxXSA9PT0gbnVsbCB8fCBhcnJbX2ogKyAxXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYXJyW19qICsgMV0gPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgYXJyW19qICsgMV0gKz0gYXJyW19qXSA+PiAxO1xuICAgICAgICBhcnJbX2pdICY9IDE7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFyci5yZXZlcnNlKCk7XG59XG4vKipcbiAqIEJpdHdpc2UgWE9SIGZvciBCaWdOdW1iZXJzXG4gKlxuICogU3BlY2lhbCBDYXNlczpcbiAqICAgTiBeICBuID0gIE5cbiAqICAgbiBeICAwID0gIG5cbiAqICAgbiBeICBuID0gIDBcbiAqICAgbiBeIC0xID0gfm5cbiAqICAgSSBeICBuID0gIElcbiAqICAgSSBeIC1uID0gLUlcbiAqICAgSSBeIC1JID0gLTFcbiAqICAtSSBeICBuID0gLUlcbiAqICAtSSBeIC1uID0gIElcbiAqXG4gKiBAcGFyYW0ge0JpZ051bWJlcn0geFxuICogQHBhcmFtIHtCaWdOdW1iZXJ9IHlcbiAqIEByZXR1cm4ge0JpZ051bWJlcn0gUmVzdWx0IG9mIGB4YCBeIGB5YCwgZnVsbHkgcHJlY2lzZVxuICpcbiAqL1xuXG5cbmZ1bmN0aW9uIGJpdFhvcih4LCB5KSB7XG4gIGlmICh4LmlzRmluaXRlKCkgJiYgIXguaXNJbnRlZ2VyKCkgfHwgeS5pc0Zpbml0ZSgpICYmICF5LmlzSW50ZWdlcigpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnRlZ2VycyBleHBlY3RlZCBpbiBmdW5jdGlvbiBiaXRYb3InKTtcbiAgfVxuXG4gIHZhciBCaWdOdW1iZXIgPSB4LmNvbnN0cnVjdG9yO1xuXG4gIGlmICh4LmlzTmFOKCkgfHwgeS5pc05hTigpKSB7XG4gICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoTmFOKTtcbiAgfVxuXG4gIGlmICh4LmlzWmVybygpKSB7XG4gICAgcmV0dXJuIHk7XG4gIH1cblxuICBpZiAoeS5pc1plcm8oKSkge1xuICAgIHJldHVybiB4O1xuICB9XG5cbiAgaWYgKHguZXEoeSkpIHtcbiAgICByZXR1cm4gbmV3IEJpZ051bWJlcigwKTtcbiAgfVxuXG4gIHZhciBuZWdPbmUgPSBuZXcgQmlnTnVtYmVyKC0xKTtcblxuICBpZiAoeC5lcShuZWdPbmUpKSB7XG4gICAgcmV0dXJuIGJpdE5vdEJpZ051bWJlcih5KTtcbiAgfVxuXG4gIGlmICh5LmVxKG5lZ09uZSkpIHtcbiAgICByZXR1cm4gYml0Tm90QmlnTnVtYmVyKHgpO1xuICB9XG5cbiAgaWYgKCF4LmlzRmluaXRlKCkgfHwgIXkuaXNGaW5pdGUoKSkge1xuICAgIGlmICgheC5pc0Zpbml0ZSgpICYmICF5LmlzRmluaXRlKCkpIHtcbiAgICAgIHJldHVybiBuZWdPbmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoeC5pc05lZ2F0aXZlKCkgPT09IHkuaXNOZWdhdGl2ZSgpID8gSW5maW5pdHkgOiAtSW5maW5pdHkpO1xuICB9XG5cbiAgcmV0dXJuIGJpdHdpc2UoeCwgeSwgZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gYSBeIGI7XG4gIH0pO1xufVxuLyoqXG4gKiBCaXR3aXNlIGxlZnQgc2hpZnRcbiAqXG4gKiBTcGVjaWFsIENhc2VzOlxuICogIG4gPDwgLW4gPSBOXG4gKiAgbiA8PCAgTiA9IE5cbiAqICBOIDw8ICBuID0gTlxuICogIG4gPDwgIDAgPSBuXG4gKiAgMCA8PCAgbiA9IDBcbiAqICBJIDw8ICBJID0gTlxuICogIEkgPDwgIG4gPSBJXG4gKiAgbiA8PCAgSSA9IElcbiAqXG4gKiBAcGFyYW0ge0JpZ051bWJlcn0geFxuICogQHBhcmFtIHtCaWdOdW1iZXJ9IHlcbiAqIEByZXR1cm4ge0JpZ051bWJlcn0gUmVzdWx0IG9mIGB4YCA8PCBgeWBcbiAqXG4gKi9cblxuXG5mdW5jdGlvbiBsZWZ0U2hpZnRCaWdOdW1iZXIoeCwgeSkge1xuICBpZiAoeC5pc0Zpbml0ZSgpICYmICF4LmlzSW50ZWdlcigpIHx8IHkuaXNGaW5pdGUoKSAmJiAheS5pc0ludGVnZXIoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW50ZWdlcnMgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gbGVmdFNoaWZ0Jyk7XG4gIH1cblxuICB2YXIgQmlnTnVtYmVyID0geC5jb25zdHJ1Y3RvcjtcblxuICBpZiAoeC5pc05hTigpIHx8IHkuaXNOYU4oKSB8fCB5LmlzTmVnYXRpdmUoKSAmJiAheS5pc1plcm8oKSkge1xuICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKE5hTik7XG4gIH1cblxuICBpZiAoeC5pc1plcm8oKSB8fCB5LmlzWmVybygpKSB7XG4gICAgcmV0dXJuIHg7XG4gIH1cblxuICBpZiAoIXguaXNGaW5pdGUoKSAmJiAheS5pc0Zpbml0ZSgpKSB7XG4gICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoTmFOKTtcbiAgfSAvLyBNYXRoLnBvdygyLCB5KSBpcyBmdWxseSBwcmVjaXNlIGZvciB5IDwgNTUsIGFuZCBmYXN0XG5cblxuICBpZiAoeS5sdCg1NSkpIHtcbiAgICByZXR1cm4geC50aW1lcyhNYXRoLnBvdygyLCB5LnRvTnVtYmVyKCkpICsgJycpO1xuICB9XG5cbiAgcmV0dXJuIHgudGltZXMobmV3IEJpZ051bWJlcigyKS5wb3coeSkpO1xufVxuLypcbiAqIFNwZWNpYWwgQ2FzZXM6XG4gKiAgIG4gPj4gLW4gPSAgTlxuICogICBuID4+ICBOID0gIE5cbiAqICAgTiA+PiAgbiA9ICBOXG4gKiAgIEkgPj4gIEkgPSAgTlxuICogICBuID4+ICAwID0gIG5cbiAqICAgSSA+PiAgbiA9ICBJXG4gKiAgLUkgPj4gIG4gPSAtSVxuICogIC1JID4+ICBJID0gLUlcbiAqICAgbiA+PiAgSSA9ICBJXG4gKiAgLW4gPj4gIEkgPSAtMVxuICogICAwID4+ICBuID0gIDBcbiAqXG4gKiBAcGFyYW0ge0JpZ051bWJlcn0gdmFsdWVcbiAqIEBwYXJhbSB7QmlnTnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7QmlnTnVtYmVyfSBSZXN1bHQgb2YgYHhgID4+IGB5YFxuICpcbiAqL1xuXG5cbmZ1bmN0aW9uIHJpZ2h0QXJpdGhTaGlmdEJpZ051bWJlcih4LCB5KSB7XG4gIGlmICh4LmlzRmluaXRlKCkgJiYgIXguaXNJbnRlZ2VyKCkgfHwgeS5pc0Zpbml0ZSgpICYmICF5LmlzSW50ZWdlcigpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnRlZ2VycyBleHBlY3RlZCBpbiBmdW5jdGlvbiByaWdodEFyaXRoU2hpZnQnKTtcbiAgfVxuXG4gIHZhciBCaWdOdW1iZXIgPSB4LmNvbnN0cnVjdG9yO1xuXG4gIGlmICh4LmlzTmFOKCkgfHwgeS5pc05hTigpIHx8IHkuaXNOZWdhdGl2ZSgpICYmICF5LmlzWmVybygpKSB7XG4gICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoTmFOKTtcbiAgfVxuXG4gIGlmICh4LmlzWmVybygpIHx8IHkuaXNaZXJvKCkpIHtcbiAgICByZXR1cm4geDtcbiAgfVxuXG4gIGlmICgheS5pc0Zpbml0ZSgpKSB7XG4gICAgaWYgKHguaXNOZWdhdGl2ZSgpKSB7XG4gICAgICByZXR1cm4gbmV3IEJpZ051bWJlcigtMSk7XG4gICAgfVxuXG4gICAgaWYgKCF4LmlzRmluaXRlKCkpIHtcbiAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKE5hTik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoMCk7XG4gIH0gLy8gTWF0aC5wb3coMiwgeSkgaXMgZnVsbHkgcHJlY2lzZSBmb3IgeSA8IDU1LCBhbmQgZmFzdFxuXG5cbiAgaWYgKHkubHQoNTUpKSB7XG4gICAgcmV0dXJuIHguZGl2KE1hdGgucG93KDIsIHkudG9OdW1iZXIoKSkgKyAnJykuZmxvb3IoKTtcbiAgfVxuXG4gIHJldHVybiB4LmRpdihuZXcgQmlnTnVtYmVyKDIpLnBvdyh5KSkuZmxvb3IoKTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQmlnTnVtYmVyVGF1ID0gZXhwb3J0cy5jcmVhdGVCaWdOdW1iZXJQaSA9IGV4cG9ydHMuY3JlYXRlQmlnTnVtYmVyUGhpID0gZXhwb3J0cy5jcmVhdGVCaWdOdW1iZXJFID0gdm9pZCAwO1xuXG52YXIgX2Z1bmN0aW9uID0gcmVxdWlyZShcIi4uL2Z1bmN0aW9uXCIpO1xuXG4vKipcbiAqIENhbGN1bGF0ZSBCaWdOdW1iZXIgZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gQmlnTnVtYmVyICAgQmlnTnVtYmVyIGNvbnN0cnVjdG9yXG4gKiBAcmV0dXJucyB7QmlnTnVtYmVyfSBSZXR1cm5zIGVcbiAqL1xudmFyIGNyZWF0ZUJpZ051bWJlckUgPSAoMCwgX2Z1bmN0aW9uLm1lbW9pemUpKGZ1bmN0aW9uIChCaWdOdW1iZXIpIHtcbiAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoMSkuZXhwKCk7XG59LCBoYXNoZXIpO1xuLyoqXG4gKiBDYWxjdWxhdGUgQmlnTnVtYmVyIGdvbGRlbiByYXRpbywgcGhpID0gKDErc3FydCg1KSkvMlxuICogQHBhcmFtIHtmdW5jdGlvbn0gQmlnTnVtYmVyICAgQmlnTnVtYmVyIGNvbnN0cnVjdG9yXG4gKiBAcmV0dXJucyB7QmlnTnVtYmVyfSBSZXR1cm5zIHBoaVxuICovXG5cbmV4cG9ydHMuY3JlYXRlQmlnTnVtYmVyRSA9IGNyZWF0ZUJpZ051bWJlckU7XG52YXIgY3JlYXRlQmlnTnVtYmVyUGhpID0gKDAsIF9mdW5jdGlvbi5tZW1vaXplKShmdW5jdGlvbiAoQmlnTnVtYmVyKSB7XG4gIHJldHVybiBuZXcgQmlnTnVtYmVyKDEpLnBsdXMobmV3IEJpZ051bWJlcig1KS5zcXJ0KCkpLmRpdigyKTtcbn0sIGhhc2hlcik7XG4vKipcbiAqIENhbGN1bGF0ZSBCaWdOdW1iZXIgcGkuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBCaWdOdW1iZXIgICBCaWdOdW1iZXIgY29uc3RydWN0b3JcbiAqIEByZXR1cm5zIHtCaWdOdW1iZXJ9IFJldHVybnMgcGlcbiAqL1xuXG5leHBvcnRzLmNyZWF0ZUJpZ051bWJlclBoaSA9IGNyZWF0ZUJpZ051bWJlclBoaTtcbnZhciBjcmVhdGVCaWdOdW1iZXJQaSA9ICgwLCBfZnVuY3Rpb24ubWVtb2l6ZSkoZnVuY3Rpb24gKEJpZ051bWJlcikge1xuICByZXR1cm4gQmlnTnVtYmVyLmFjb3MoLTEpO1xufSwgaGFzaGVyKTtcbi8qKlxuICogQ2FsY3VsYXRlIEJpZ051bWJlciB0YXUsIHRhdSA9IDIgKiBwaVxuICogQHBhcmFtIHtmdW5jdGlvbn0gQmlnTnVtYmVyICAgQmlnTnVtYmVyIGNvbnN0cnVjdG9yXG4gKiBAcmV0dXJucyB7QmlnTnVtYmVyfSBSZXR1cm5zIHRhdVxuICovXG5cbmV4cG9ydHMuY3JlYXRlQmlnTnVtYmVyUGkgPSBjcmVhdGVCaWdOdW1iZXJQaTtcbnZhciBjcmVhdGVCaWdOdW1iZXJUYXUgPSAoMCwgX2Z1bmN0aW9uLm1lbW9pemUpKGZ1bmN0aW9uIChCaWdOdW1iZXIpIHtcbiAgcmV0dXJuIGNyZWF0ZUJpZ051bWJlclBpKEJpZ051bWJlcikudGltZXMoMik7XG59LCBoYXNoZXIpO1xuLyoqXG4gKiBDcmVhdGUgYSBoYXNoIGZvciBhIEJpZ051bWJlciBjb25zdHJ1Y3RvciBmdW5jdGlvbi4gVGhlIGNyZWF0ZWQgaGFzIGlzXG4gKiB0aGUgY29uZmlndXJlZCBwcmVjaXNpb25cbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgICAgICAgICBTdXBwb3NlZCB0byBjb250YWluIGEgc2luZ2xlIGVudHJ5IHdpdGhcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIEJpZ051bWJlciBjb25zdHJ1Y3RvclxuICogQHJldHVybiB7bnVtYmVyfSBwcmVjaXNpb25cbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0cy5jcmVhdGVCaWdOdW1iZXJUYXUgPSBjcmVhdGVCaWdOdW1iZXJUYXU7XG5cbmZ1bmN0aW9uIGhhc2hlcihhcmdzKSB7XG4gIHJldHVybiBhcmdzWzBdLnByZWNpc2lvbjtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZm9ybWF0ID0gZm9ybWF0O1xuZXhwb3J0cy50b0VuZ2luZWVyaW5nID0gdG9FbmdpbmVlcmluZztcbmV4cG9ydHMudG9FeHBvbmVudGlhbCA9IHRvRXhwb25lbnRpYWw7XG5leHBvcnRzLnRvRml4ZWQgPSB0b0ZpeGVkO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi9vYmplY3RcIik7XG5cbi8qKlxuICogQ29udmVydCBhIEJpZ051bWJlciB0byBhIGZvcm1hdHRlZCBzdHJpbmcgcmVwcmVzZW50YXRpb24uXG4gKlxuICogU3ludGF4OlxuICpcbiAqICAgIGZvcm1hdCh2YWx1ZSlcbiAqICAgIGZvcm1hdCh2YWx1ZSwgb3B0aW9ucylcbiAqICAgIGZvcm1hdCh2YWx1ZSwgcHJlY2lzaW9uKVxuICogICAgZm9ybWF0KHZhbHVlLCBmbilcbiAqXG4gKiBXaGVyZTpcbiAqXG4gKiAgICB7bnVtYmVyfSB2YWx1ZSAgIFRoZSB2YWx1ZSB0byBiZSBmb3JtYXR0ZWRcbiAqICAgIHtPYmplY3R9IG9wdGlvbnMgQW4gb2JqZWN0IHdpdGggZm9ybWF0dGluZyBvcHRpb25zLiBBdmFpbGFibGUgb3B0aW9uczpcbiAqICAgICAgICAgICAgICAgICAgICAge3N0cmluZ30gbm90YXRpb25cbiAqICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlciBub3RhdGlvbi4gQ2hvb3NlIGZyb206XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAnZml4ZWQnICAgICAgICAgIEFsd2F5cyB1c2UgcmVndWxhciBudW1iZXIgbm90YXRpb24uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlICcxMjMuNDAnIGFuZCAnMTQwMDAwMDAnXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAnZXhwb25lbnRpYWwnICAgIEFsd2F5cyB1c2UgZXhwb25lbnRpYWwgbm90YXRpb24uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlICcxLjIzNGUrMicgYW5kICcxLjRlKzcnXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAnYXV0bycgKGRlZmF1bHQpIFJlZ3VsYXIgbnVtYmVyIG5vdGF0aW9uIGZvciBudW1iZXJzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmluZyBhbiBhYnNvbHV0ZSB2YWx1ZSBiZXR3ZWVuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBsb3dlcmAgYW5kIGB1cHBlcmAgYm91bmRzLCBhbmQgdXNlc1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvbmVudGlhbCBub3RhdGlvbiBlbHNld2hlcmUuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvd2VyIGJvdW5kIGlzIGluY2x1ZGVkLCB1cHBlciBib3VuZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBleGNsdWRlZC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUgJzEyMy40JyBhbmQgJzEuNGU3Jy5cbiAqICAgICAgICAgICAgICAgICAgICAge251bWJlcn0gcHJlY2lzaW9uICAgQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxNiB0byByb3VuZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZGlnaXRzIG9mIHRoZSBudW1iZXIuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIGNhc2Ugb2Ygbm90YXRpb25zICdleHBvbmVudGlhbCcsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbmdpbmVlcmluZycsIGFuZCAnYXV0bycsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBwcmVjaXNpb25gIGRlZmluZXMgdGhlIHRvdGFsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMgcmV0dXJuZWQuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIGNhc2Ugb2Ygbm90YXRpb24gJ2ZpeGVkJyxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHByZWNpc2lvbmAgZGVmaW5lcyB0aGUgbnVtYmVyIG9mXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25pZmljYW50IGRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHByZWNpc2lvbmAgaXMgdW5kZWZpbmVkIGJ5IGRlZmF1bHQuXG4gKiAgICAgICAgICAgICAgICAgICAgIHtudW1iZXJ9IGxvd2VyRXhwICAgIEV4cG9uZW50IGRldGVybWluaW5nIHRoZSBsb3dlciBib3VuZGFyeVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZm9ybWF0dGluZyBhIHZhbHVlIHdpdGggYW4gZXhwb25lbnRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBgbm90YXRpb249J2F1dG9gLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0IHZhbHVlIGlzIGAtM2AuXG4gKiAgICAgICAgICAgICAgICAgICAgIHtudW1iZXJ9IHVwcGVyRXhwICAgIEV4cG9uZW50IGRldGVybWluaW5nIHRoZSB1cHBlciBib3VuZGFyeVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZm9ybWF0dGluZyBhIHZhbHVlIHdpdGggYW4gZXhwb25lbnRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBgbm90YXRpb249J2F1dG9gLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0IHZhbHVlIGlzIGA1YC5cbiAqICAgIHtGdW5jdGlvbn0gZm4gICAgQSBjdXN0b20gZm9ybWF0dGluZyBmdW5jdGlvbi4gQ2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgIGJ1aWx0LWluIG5vdGF0aW9ucy4gRnVuY3Rpb24gYGZuYCBpcyBjYWxsZWQgd2l0aCBgdmFsdWVgIGFzXG4gKiAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlciBhbmQgbXVzdCByZXR1cm4gYSBzdHJpbmcuIElzIHVzZWZ1bCBmb3IgZXhhbXBsZSB0b1xuICogICAgICAgICAgICAgICAgICAgICBmb3JtYXQgYWxsIHZhbHVlcyBpbnNpZGUgYSBtYXRyaXggaW4gYSBwYXJ0aWN1bGFyIHdheS5cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgICBmb3JtYXQoNi40KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAnNi40J1xuICogICAgZm9ybWF0KDEyNDAwMDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzEuMjRlNidcbiAqICAgIGZvcm1hdCgxLzMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICcwLjMzMzMzMzMzMzMzMzMzMzMnXG4gKiAgICBmb3JtYXQoMS8zLCAzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAnMC4zMzMnXG4gKiAgICBmb3JtYXQoMjEzODUsIDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAnMjEwMDAnXG4gKiAgICBmb3JtYXQoMTJlOCwge25vdGF0aW9uOiAnZml4ZWQnfSkgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zICcxMjAwMDAwMDAwJ1xuICogICAgZm9ybWF0KDIuMywgICAge25vdGF0aW9uOiAnZml4ZWQnLCBwcmVjaXNpb246IDR9KSAgLy8gcmV0dXJucyAnMi4zMDAwJ1xuICogICAgZm9ybWF0KDUyLjgsICAge25vdGF0aW9uOiAnZXhwb25lbnRpYWwnfSkgICAgICAgICAgLy8gcmV0dXJucyAnNS4yOGUrMSdcbiAqICAgIGZvcm1hdCgxMjQwMCwgIHtub3RhdGlvbjogJ2VuZ2luZWVyaW5nJ30pICAgICAgICAgIC8vIHJldHVybnMgJzEyLjQwMGUrMydcbiAqXG4gKiBAcGFyYW0ge0JpZ051bWJlcn0gdmFsdWVcbiAqIEBwYXJhbSB7T2JqZWN0IHwgRnVuY3Rpb24gfCBudW1iZXJ9IFtvcHRpb25zXVxuICogQHJldHVybiB7c3RyaW5nfSBzdHIgVGhlIGZvcm1hdHRlZCB2YWx1ZVxuICovXG5mdW5jdGlvbiBmb3JtYXQodmFsdWUsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gaGFuZGxlIGZvcm1hdCh2YWx1ZSwgZm4pXG4gICAgcmV0dXJuIG9wdGlvbnModmFsdWUpO1xuICB9IC8vIGhhbmRsZSBzcGVjaWFsIGNhc2VzXG5cblxuICBpZiAoIXZhbHVlLmlzRmluaXRlKCkpIHtcbiAgICByZXR1cm4gdmFsdWUuaXNOYU4oKSA/ICdOYU4nIDogdmFsdWUuZ3QoMCkgPyAnSW5maW5pdHknIDogJy1JbmZpbml0eSc7XG4gIH0gLy8gZGVmYXVsdCB2YWx1ZXMgZm9yIG9wdGlvbnNcblxuXG4gIHZhciBub3RhdGlvbiA9ICdhdXRvJztcbiAgdmFyIHByZWNpc2lvbjtcblxuICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gZGV0ZXJtaW5lIG5vdGF0aW9uIGZyb20gb3B0aW9uc1xuICAgIGlmIChvcHRpb25zLm5vdGF0aW9uKSB7XG4gICAgICBub3RhdGlvbiA9IG9wdGlvbnMubm90YXRpb247XG4gICAgfSAvLyBkZXRlcm1pbmUgcHJlY2lzaW9uIGZyb20gb3B0aW9uc1xuXG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdudW1iZXInKSB7XG4gICAgICBwcmVjaXNpb24gPSBvcHRpb25zO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5wcmVjaXNpb24pIHtcbiAgICAgIHByZWNpc2lvbiA9IG9wdGlvbnMucHJlY2lzaW9uO1xuICAgIH1cbiAgfSAvLyBoYW5kbGUgdGhlIHZhcmlvdXMgbm90YXRpb25zXG5cblxuICBzd2l0Y2ggKG5vdGF0aW9uKSB7XG4gICAgY2FzZSAnZml4ZWQnOlxuICAgICAgcmV0dXJuIHRvRml4ZWQodmFsdWUsIHByZWNpc2lvbik7XG5cbiAgICBjYXNlICdleHBvbmVudGlhbCc6XG4gICAgICByZXR1cm4gdG9FeHBvbmVudGlhbCh2YWx1ZSwgcHJlY2lzaW9uKTtcblxuICAgIGNhc2UgJ2VuZ2luZWVyaW5nJzpcbiAgICAgIHJldHVybiB0b0VuZ2luZWVyaW5nKHZhbHVlLCBwcmVjaXNpb24pO1xuXG4gICAgY2FzZSAnYXV0byc6XG4gICAgICB7XG4gICAgICAgIC8vIFRPRE86IGNsZWFuIHVwIHNvbWUgZGF5LiBEZXByZWNhdGVkIHNpbmNlOiAyMDE4LTAxLTI0XG4gICAgICAgIC8vIEBkZXByZWNhdGVkIHVwcGVyIGFuZCBsb3dlciBhcmUgcmVwbGFjZWQgd2l0aCB1cHBlckV4cCBhbmQgbG93ZXJFeHAgc2luY2UgdjQuMC4wXG4gICAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZXhwb25lbnRpYWwgJiYgKG9wdGlvbnMuZXhwb25lbnRpYWwubG93ZXIgIT09IHVuZGVmaW5lZCB8fCBvcHRpb25zLmV4cG9uZW50aWFsLnVwcGVyICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgdmFyIGZpeGVkT3B0aW9ucyA9ICgwLCBfb2JqZWN0Lm1hcE9iamVjdCkob3B0aW9ucywgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGZpeGVkT3B0aW9ucy5leHBvbmVudGlhbCA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgIGlmIChvcHRpb25zLmV4cG9uZW50aWFsLmxvd2VyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGZpeGVkT3B0aW9ucy5sb3dlckV4cCA9IE1hdGgucm91bmQoTWF0aC5sb2cob3B0aW9ucy5leHBvbmVudGlhbC5sb3dlcikgLyBNYXRoLkxOMTApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChvcHRpb25zLmV4cG9uZW50aWFsLnVwcGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGZpeGVkT3B0aW9ucy51cHBlckV4cCA9IE1hdGgucm91bmQoTWF0aC5sb2cob3B0aW9ucy5leHBvbmVudGlhbC51cHBlcikgLyBNYXRoLkxOMTApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnNvbGUud2FybignRGVwcmVjYXRpb24gd2FybmluZzogRm9ybWF0dGluZyBvcHRpb25zIGV4cG9uZW50aWFsLmxvd2VyIGFuZCBleHBvbmVudGlhbC51cHBlciAnICsgJyhtaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlKSAnICsgJ2FyZSByZXBsYWNlZCB3aXRoIGV4cG9uZW50aWFsLmxvd2VyRXhwIGFuZCBleHBvbmVudGlhbC51cHBlckV4cCAnICsgJyhtaW5pbXVtIGFuZCBtYXhpbXVtIGV4cG9uZW50KSBzaW5jZSB2ZXJzaW9uIDQuMC4wLiAnICsgJ1JlcGxhY2UgJyArIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpICsgJyB3aXRoICcgKyBKU09OLnN0cmluZ2lmeShmaXhlZE9wdGlvbnMpKTtcbiAgICAgICAgICByZXR1cm4gZm9ybWF0KHZhbHVlLCBmaXhlZE9wdGlvbnMpO1xuICAgICAgICB9IC8vIGRldGVybWluZSBsb3dlciBhbmQgdXBwZXIgYm91bmQgZm9yIGV4cG9uZW50aWFsIG5vdGF0aW9uLlxuICAgICAgICAvLyBUT0RPOiBpbXBsZW1lbnQgc3VwcG9ydCBmb3IgdXBwZXIgYW5kIGxvd2VyIHRvIGJlIEJpZ051bWJlcnMgdGhlbXNlbHZlc1xuXG5cbiAgICAgICAgdmFyIGxvd2VyRXhwID0gb3B0aW9ucyAmJiBvcHRpb25zLmxvd2VyRXhwICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmxvd2VyRXhwIDogLTM7XG4gICAgICAgIHZhciB1cHBlckV4cCA9IG9wdGlvbnMgJiYgb3B0aW9ucy51cHBlckV4cCAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy51cHBlckV4cCA6IDU7IC8vIGhhbmRsZSBzcGVjaWFsIGNhc2UgemVyb1xuXG4gICAgICAgIGlmICh2YWx1ZS5pc1plcm8oKSkgcmV0dXJuICcwJzsgLy8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHRvIG91dHB1dCBleHBvbmVudGlhbCBub3RhdGlvblxuXG4gICAgICAgIHZhciBzdHI7XG4gICAgICAgIHZhciByb3VuZGVkID0gdmFsdWUudG9TaWduaWZpY2FudERpZ2l0cyhwcmVjaXNpb24pO1xuICAgICAgICB2YXIgZXhwID0gcm91bmRlZC5lO1xuXG4gICAgICAgIGlmIChleHAgPj0gbG93ZXJFeHAgJiYgZXhwIDwgdXBwZXJFeHApIHtcbiAgICAgICAgICAvLyBub3JtYWwgbnVtYmVyIG5vdGF0aW9uXG4gICAgICAgICAgc3RyID0gcm91bmRlZC50b0ZpeGVkKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gZXhwb25lbnRpYWwgbm90YXRpb25cbiAgICAgICAgICBzdHIgPSB0b0V4cG9uZW50aWFsKHZhbHVlLCBwcmVjaXNpb24pO1xuICAgICAgICB9IC8vIHJlbW92ZSB0cmFpbGluZyB6ZXJvcyBhZnRlciB0aGUgZGVjaW1hbCBwb2ludFxuXG5cbiAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oKFxcLlxcZCo/KSgwKykpKCR8ZSkvLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIGRpZ2l0cyA9IGFyZ3VtZW50c1syXTtcbiAgICAgICAgICB2YXIgZSA9IGFyZ3VtZW50c1s0XTtcbiAgICAgICAgICByZXR1cm4gZGlnaXRzICE9PSAnLicgPyBkaWdpdHMgKyBlIDogZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIG5vdGF0aW9uIFwiJyArIG5vdGF0aW9uICsgJ1wiLiAnICsgJ0Nob29zZSBcImF1dG9cIiwgXCJleHBvbmVudGlhbFwiLCBvciBcImZpeGVkXCIuJyk7XG4gIH1cbn1cbi8qKlxuICogRm9ybWF0IGEgQmlnTnVtYmVyIGluIGVuZ2luZWVyaW5nIG5vdGF0aW9uLiBMaWtlICcxLjIzZSs2JywgJzIuM2UrMCcsICczLjUwMGUtMydcbiAqIEBwYXJhbSB7QmlnTnVtYmVyIHwgc3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IFtwcmVjaXNpb25dICAgICAgICBPcHRpb25hbCBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZmlndXJlcyB0byByZXR1cm4uXG4gKi9cblxuXG5mdW5jdGlvbiB0b0VuZ2luZWVyaW5nKHZhbHVlLCBwcmVjaXNpb24pIHtcbiAgLy8gZmluZCBuZWFyZXN0IGxvd2VyIG11bHRpcGxlIG9mIDMgZm9yIGV4cG9uZW50XG4gIHZhciBlID0gdmFsdWUuZTtcbiAgdmFyIG5ld0V4cCA9IGUgJSAzID09PSAwID8gZSA6IGUgPCAwID8gZSAtIDMgLSBlICUgMyA6IGUgLSBlICUgMzsgLy8gZmluZCBkaWZmZXJlbmNlIGluIGV4cG9uZW50cywgYW5kIGNhbGN1bGF0ZSB0aGUgdmFsdWUgd2l0aG91dCBleHBvbmVudFxuXG4gIHZhciB2YWx1ZVdpdGhvdXRFeHAgPSB2YWx1ZS5tdWwoTWF0aC5wb3coMTAsIC1uZXdFeHApKTtcbiAgdmFyIHZhbHVlU3RyID0gdmFsdWVXaXRob3V0RXhwLnRvUHJlY2lzaW9uKHByZWNpc2lvbik7XG5cbiAgaWYgKHZhbHVlU3RyLmluZGV4T2YoJ2UnKSAhPT0gLTEpIHtcbiAgICB2YWx1ZVN0ciA9IHZhbHVlV2l0aG91dEV4cC50b1N0cmluZygpO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlU3RyICsgJ2UnICsgKGUgPj0gMCA/ICcrJyA6ICcnKSArIG5ld0V4cC50b1N0cmluZygpO1xufVxuLyoqXG4gKiBGb3JtYXQgYSBudW1iZXIgaW4gZXhwb25lbnRpYWwgbm90YXRpb24uIExpa2UgJzEuMjNlKzUnLCAnMi4zZSswJywgJzMuNTAwZS0zJ1xuICogQHBhcmFtIHtCaWdOdW1iZXJ9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gW3ByZWNpc2lvbl0gIE51bWJlciBvZiBkaWdpdHMgaW4gZm9ybWF0dGVkIG91dHB1dC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgbm90IHByb3ZpZGVkLCB0aGUgbWF4aW11bSBhdmFpbGFibGUgZGlnaXRzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHVzZWQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBzdHJcbiAqL1xuXG5cbmZ1bmN0aW9uIHRvRXhwb25lbnRpYWwodmFsdWUsIHByZWNpc2lvbikge1xuICBpZiAocHJlY2lzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdmFsdWUudG9FeHBvbmVudGlhbChwcmVjaXNpb24gLSAxKTsgLy8gTm90ZSB0aGUgb2Zmc2V0IG9mIG9uZVxuICB9IGVsc2Uge1xuICAgIHJldHVybiB2YWx1ZS50b0V4cG9uZW50aWFsKCk7XG4gIH1cbn1cbi8qKlxuICogRm9ybWF0IGEgbnVtYmVyIHdpdGggZml4ZWQgbm90YXRpb24uXG4gKiBAcGFyYW0ge0JpZ051bWJlcn0gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcHJlY2lzaW9uPXVuZGVmaW5lZF0gT3B0aW9uYWwgbnVtYmVyIG9mIGRlY2ltYWxzIGFmdGVyIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNpbWFsIHBvaW50LiBVbmRlZmluZWQgYnkgZGVmYXVsdC5cbiAqL1xuXG5cbmZ1bmN0aW9uIHRvRml4ZWQodmFsdWUsIHByZWNpc2lvbikge1xuICByZXR1cm4gdmFsdWUudG9GaXhlZChwcmVjaXNpb24pO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5uZWFybHlFcXVhbCA9IG5lYXJseUVxdWFsO1xuXG4vKipcbiAqIENvbXBhcmVzIHR3byBCaWdOdW1iZXJzLlxuICogQHBhcmFtIHtCaWdOdW1iZXJ9IHggICAgICAgRmlyc3QgdmFsdWUgdG8gY29tcGFyZVxuICogQHBhcmFtIHtCaWdOdW1iZXJ9IHkgICAgICAgU2Vjb25kIHZhbHVlIHRvIGNvbXBhcmVcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZXBzaWxvbl0gIFRoZSBtYXhpbXVtIHJlbGF0aXZlIGRpZmZlcmVuY2UgYmV0d2VlbiB4IGFuZCB5XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBlcHNpbG9uIGlzIHVuZGVmaW5lZCBvciBudWxsLCB0aGUgZnVuY3Rpb24gd2lsbFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdCB3aGV0aGVyIHggYW5kIHkgYXJlIGV4YWN0bHkgZXF1YWwuXG4gKiBAcmV0dXJuIHtib29sZWFufSB3aGV0aGVyIHRoZSB0d28gbnVtYmVycyBhcmUgbmVhcmx5IGVxdWFsXG4gKi9cbmZ1bmN0aW9uIG5lYXJseUVxdWFsKHgsIHksIGVwc2lsb24pIHtcbiAgLy8gaWYgZXBzaWxvbiBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGVzdCB3aGV0aGVyIHggYW5kIHkgYXJlIGV4YWN0bHkgZXF1YWxcbiAgaWYgKGVwc2lsb24gPT09IG51bGwgfHwgZXBzaWxvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHguZXEoeSk7XG4gIH0gLy8gdXNlIFwiPT1cIiBvcGVyYXRvciwgaGFuZGxlcyBpbmZpbml0aWVzXG5cblxuICBpZiAoeC5lcSh5KSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIE5hTlxuXG5cbiAgaWYgKHguaXNOYU4oKSB8fCB5LmlzTmFOKCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gYXQgdGhpcyBwb2ludCB4IGFuZCB5IHNob3VsZCBiZSBmaW5pdGVcblxuXG4gIGlmICh4LmlzRmluaXRlKCkgJiYgeS5pc0Zpbml0ZSgpKSB7XG4gICAgLy8gY2hlY2sgbnVtYmVycyBhcmUgdmVyeSBjbG9zZSwgbmVlZGVkIHdoZW4gY29tcGFyaW5nIG51bWJlcnMgbmVhciB6ZXJvXG4gICAgdmFyIGRpZmYgPSB4Lm1pbnVzKHkpLmFicygpO1xuXG4gICAgaWYgKGRpZmYuaXNaZXJvKCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB1c2UgcmVsYXRpdmUgZXJyb3JcbiAgICAgIHZhciBtYXggPSB4LmNvbnN0cnVjdG9yLm1heCh4LmFicygpLCB5LmFicygpKTtcbiAgICAgIHJldHVybiBkaWZmLmx0ZShtYXgudGltZXMoZXBzaWxvbikpO1xuICAgIH1cbiAgfSAvLyBJbmZpbml0ZSBhbmQgTnVtYmVyIG9yIG5lZ2F0aXZlIEluZmluaXRlIGFuZCBwb3NpdGl2ZSBJbmZpbml0ZSBjYXNlc1xuXG5cbiAgcmV0dXJuIGZhbHNlO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb250YWluc0NvbGxlY3Rpb25zID0gY29udGFpbnNDb2xsZWN0aW9ucztcbmV4cG9ydHMuZGVlcEZvckVhY2ggPSBkZWVwRm9yRWFjaDtcbmV4cG9ydHMuZGVlcE1hcCA9IGRlZXBNYXA7XG5leHBvcnRzLnJlZHVjZSA9IHJlZHVjZTtcbmV4cG9ydHMuc2NhdHRlciA9IHNjYXR0ZXI7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi9pc1wiKTtcblxudmFyIF9JbmRleEVycm9yID0gcmVxdWlyZShcIi4uL2Vycm9yL0luZGV4RXJyb3JcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi9hcnJheVwiKTtcblxuLyoqXG4gKiBUZXN0IHdoZXRoZXIgYW4gYXJyYXkgY29udGFpbnMgY29sbGVjdGlvbnNcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIHdoZW4gdGhlIGFycmF5IGNvbnRhaW5zIG9uZSBvciBtdWx0aXBsZVxuICogICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25zIChBcnJheXMgb3IgTWF0cmljZXMpLiBSZXR1cm5zIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZnVuY3Rpb24gY29udGFpbnNDb2xsZWN0aW9ucyhhcnJheSkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKCgwLCBfaXMuaXNDb2xsZWN0aW9uKShhcnJheVtpXSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbi8qKlxuICogUmVjdXJzaXZlbHkgbG9vcCBvdmVyIGFsbCBlbGVtZW50cyBpbiBhIGdpdmVuIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5XG4gKiBhbmQgaW52b2tlIHRoZSBjYWxsYmFjayBvbiBlYWNoIG9mIHRoZSBlbGVtZW50cy5cbiAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IGFycmF5XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgICAgVGhlIGNhbGxiYWNrIG1ldGhvZCBpcyBpbnZva2VkIHdpdGggb25lXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyOiB0aGUgY3VycmVudCBlbGVtZW50IGluIHRoZSBhcnJheVxuICovXG5cblxuZnVuY3Rpb24gZGVlcEZvckVhY2goYXJyYXksIGNhbGxiYWNrKSB7XG4gIGlmICgoMCwgX2lzLmlzTWF0cml4KShhcnJheSkpIHtcbiAgICBhcnJheSA9IGFycmF5LnZhbHVlT2YoKTtcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwLCBpaSA9IGFycmF5Lmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpXTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgZGVlcEZvckVhY2godmFsdWUsIGNhbGxiYWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbGJhY2sodmFsdWUpO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBFeGVjdXRlIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBlbGVtZW50IHdpc2UgZm9yIGVhY2ggZWxlbWVudCBpbiBhcnJheSBhbmQgYW55XG4gKiBuZXN0ZWQgYXJyYXlcbiAqIFJldHVybnMgYW4gYXJyYXkgd2l0aCB0aGUgcmVzdWx0c1xuICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0gYXJyYXlcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgVGhlIGNhbGxiYWNrIGlzIGNhbGxlZCB3aXRoIHR3byBwYXJhbWV0ZXJzOlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTEgYW5kIHZhbHVlMiwgd2hpY2ggY29udGFpbiB0aGUgY3VycmVudFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50IG9mIGJvdGggYXJyYXlzLlxuICogQHBhcmFtIHtib29sZWFufSBbc2tpcFplcm9zXSBJbnZva2UgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIG5vbi16ZXJvIHZhbHVlcyBvbmx5LlxuICpcbiAqIEByZXR1cm4ge0FycmF5IHwgTWF0cml4fSByZXNcbiAqL1xuXG5cbmZ1bmN0aW9uIGRlZXBNYXAoYXJyYXksIGNhbGxiYWNrLCBza2lwWmVyb3MpIHtcbiAgaWYgKGFycmF5ICYmIHR5cGVvZiBhcnJheS5tYXAgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBUT0RPOiByZXBsYWNlIGFycmF5Lm1hcCB3aXRoIGEgZm9yIGxvb3AgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZVxuICAgIHJldHVybiBhcnJheS5tYXAoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBkZWVwTWFwKHgsIGNhbGxiYWNrLCBza2lwWmVyb3MpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBjYWxsYmFjayhhcnJheSk7XG4gIH1cbn1cbi8qKlxuICogUmVkdWNlIGEgZ2l2ZW4gbWF0cml4IG9yIGFycmF5IHRvIGEgbmV3IG1hdHJpeCBvclxuICogYXJyYXkgd2l0aCBvbmUgbGVzcyBkaW1lbnNpb24sIGFwcGx5aW5nIHRoZSBnaXZlblxuICogY2FsbGJhY2sgaW4gdGhlIHNlbGVjdGVkIGRpbWVuc2lvbi5cbiAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IG1hdFxuICogQHBhcmFtIHtudW1iZXJ9IGRpbVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge0FycmF5IHwgTWF0cml4fSByZXNcbiAqL1xuXG5cbmZ1bmN0aW9uIHJlZHVjZShtYXQsIGRpbSwgY2FsbGJhY2spIHtcbiAgdmFyIHNpemUgPSBBcnJheS5pc0FycmF5KG1hdCkgPyAoMCwgX2FycmF5LmFycmF5U2l6ZSkobWF0KSA6IG1hdC5zaXplKCk7XG5cbiAgaWYgKGRpbSA8IDAgfHwgZGltID49IHNpemUubGVuZ3RoKSB7XG4gICAgLy8gVE9ETzogd291bGQgYmUgbW9yZSBjbGVhciB3aGVuIHRocm93aW5nIGEgRGltZW5zaW9uRXJyb3IgaGVyZVxuICAgIHRocm93IG5ldyBfSW5kZXhFcnJvci5JbmRleEVycm9yKGRpbSwgc2l6ZS5sZW5ndGgpO1xuICB9XG5cbiAgaWYgKCgwLCBfaXMuaXNNYXRyaXgpKG1hdCkpIHtcbiAgICByZXR1cm4gbWF0LmNyZWF0ZShfcmVkdWNlKG1hdC52YWx1ZU9mKCksIGRpbSwgY2FsbGJhY2spKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gX3JlZHVjZShtYXQsIGRpbSwgY2FsbGJhY2spO1xuICB9XG59XG4vKipcbiAqIFJlY3Vyc2l2ZWx5IHJlZHVjZSBhIG1hdHJpeFxuICogQHBhcmFtIHtBcnJheX0gbWF0XG4gKiBAcGFyYW0ge251bWJlcn0gZGltXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybnMge0FycmF5fSByZXRcbiAqIEBwcml2YXRlXG4gKi9cblxuXG5mdW5jdGlvbiBfcmVkdWNlKG1hdCwgZGltLCBjYWxsYmFjaykge1xuICB2YXIgaSwgcmV0LCB2YWwsIHRyYW47XG5cbiAgaWYgKGRpbSA8PSAwKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KG1hdFswXSkpIHtcbiAgICAgIHZhbCA9IG1hdFswXTtcblxuICAgICAgZm9yIChpID0gMTsgaSA8IG1hdC5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YWwgPSBjYWxsYmFjayh2YWwsIG1hdFtpXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2YWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyYW4gPSBfc3dpdGNoKG1hdCk7XG4gICAgICByZXQgPSBbXTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IHRyYW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmV0W2ldID0gX3JlZHVjZSh0cmFuW2ldLCBkaW0gLSAxLCBjYWxsYmFjayk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldCA9IFtdO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IG1hdC5sZW5ndGg7IGkrKykge1xuICAgICAgcmV0W2ldID0gX3JlZHVjZShtYXRbaV0sIGRpbSAtIDEsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9XG59XG4vKipcbiAqIFRyYW5zcG9zZSBhIG1hdHJpeFxuICogQHBhcmFtIHtBcnJheX0gbWF0XG4gKiBAcmV0dXJucyB7QXJyYXl9IHJldFxuICogQHByaXZhdGVcbiAqL1xuXG5cbmZ1bmN0aW9uIF9zd2l0Y2gobWF0KSB7XG4gIHZhciBJID0gbWF0Lmxlbmd0aDtcbiAgdmFyIEogPSBtYXRbMF0ubGVuZ3RoO1xuICB2YXIgaSwgajtcbiAgdmFyIHJldCA9IFtdO1xuXG4gIGZvciAoaiA9IDA7IGogPCBKOyBqKyspIHtcbiAgICB2YXIgdG1wID0gW107XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgSTsgaSsrKSB7XG4gICAgICB0bXAucHVzaChtYXRbaV1bal0pO1xuICAgIH1cblxuICAgIHJldC5wdXNoKHRtcCk7XG4gIH1cblxuICByZXR1cm4gcmV0O1xufSAvLyBUT0RPOiBkb2N1bWVudCBmdW5jdGlvbiBzY2F0dGVyXG5cblxuZnVuY3Rpb24gc2NhdHRlcihhLCBqLCB3LCB4LCB1LCBtYXJrLCBjaW5kZXgsIGYsIGludmVyc2UsIHVwZGF0ZSwgdmFsdWUpIHtcbiAgLy8gYSBhcnJheXNcbiAgdmFyIGF2YWx1ZXMgPSBhLl92YWx1ZXM7XG4gIHZhciBhaW5kZXggPSBhLl9pbmRleDtcbiAgdmFyIGFwdHIgPSBhLl9wdHI7IC8vIHZhcnNcblxuICB2YXIgaywgazAsIGsxLCBpOyAvLyBjaGVjayB3ZSBuZWVkIHRvIHByb2Nlc3MgdmFsdWVzIChwYXR0ZXJuIG1hdHJpeClcblxuICBpZiAoeCkge1xuICAgIC8vIHZhbHVlcyBpbiBqXG4gICAgZm9yIChrMCA9IGFwdHJbal0sIGsxID0gYXB0cltqICsgMV0sIGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgIC8vIHJvd1xuICAgICAgaSA9IGFpbmRleFtrXTsgLy8gY2hlY2sgdmFsdWUgZXhpc3RzIGluIGN1cnJlbnQgalxuXG4gICAgICBpZiAod1tpXSAhPT0gbWFyaykge1xuICAgICAgICAvLyBpIGlzIG5ldyBlbnRyeSBpbiBqXG4gICAgICAgIHdbaV0gPSBtYXJrOyAvLyBhZGQgaSB0byBwYXR0ZXJuIG9mIENcblxuICAgICAgICBjaW5kZXgucHVzaChpKTsgLy8geChpKSA9IEEsIGNoZWNrIHdlIG5lZWQgdG8gY2FsbCBmdW5jdGlvbiB0aGlzIHRpbWVcblxuICAgICAgICBpZiAodXBkYXRlKSB7XG4gICAgICAgICAgLy8gY29weSB2YWx1ZSB0byB3b3Jrc3BhY2UgY2FsbGluZyBjYWxsYmFjayBmdW5jdGlvblxuICAgICAgICAgIHhbaV0gPSBpbnZlcnNlID8gZihhdmFsdWVzW2tdLCB2YWx1ZSkgOiBmKHZhbHVlLCBhdmFsdWVzW2tdKTsgLy8gZnVuY3Rpb24gd2FzIGNhbGxlZCBvbiBjdXJyZW50IHJvd1xuXG4gICAgICAgICAgdVtpXSA9IG1hcms7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gY29weSB2YWx1ZSB0byB3b3Jrc3BhY2VcbiAgICAgICAgICB4W2ldID0gYXZhbHVlc1trXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaSBleGlzdHMgaW4gQyBhbHJlYWR5XG4gICAgICAgIHhbaV0gPSBpbnZlcnNlID8gZihhdmFsdWVzW2tdLCB4W2ldKSA6IGYoeFtpXSwgYXZhbHVlc1trXSk7IC8vIGZ1bmN0aW9uIHdhcyBjYWxsZWQgb24gY3VycmVudCByb3dcblxuICAgICAgICB1W2ldID0gbWFyaztcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gdmFsdWVzIGluIGpcbiAgICBmb3IgKGswID0gYXB0cltqXSwgazEgPSBhcHRyW2ogKyAxXSwgayA9IGswOyBrIDwgazE7IGsrKykge1xuICAgICAgLy8gcm93XG4gICAgICBpID0gYWluZGV4W2tdOyAvLyBjaGVjayB2YWx1ZSBleGlzdHMgaW4gY3VycmVudCBqXG5cbiAgICAgIGlmICh3W2ldICE9PSBtYXJrKSB7XG4gICAgICAgIC8vIGkgaXMgbmV3IGVudHJ5IGluIGpcbiAgICAgICAgd1tpXSA9IG1hcms7IC8vIGFkZCBpIHRvIHBhdHRlcm4gb2YgQ1xuXG4gICAgICAgIGNpbmRleC5wdXNoKGkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaW5kaWNhdGUgZnVuY3Rpb24gd2FzIGNhbGxlZCBvbiBjdXJyZW50IHJvd1xuICAgICAgICB1W2ldID0gbWFyaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tcGxleEVxdWFscyA9IGNvbXBsZXhFcXVhbHM7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4vbnVtYmVyXCIpO1xuXG4vKipcbiAqIFRlc3Qgd2hldGhlciB0d28gY29tcGxleCB2YWx1ZXMgYXJlIGVxdWFsIHByb3ZpZGVkIGEgZ2l2ZW4gZXBzaWxvbi5cbiAqIERvZXMgbm90IHVzZSBvciBjaGFuZ2UgdGhlIGdsb2JhbCBDb21wbGV4LkVQU0lMT04gc2V0dGluZ1xuICogQHBhcmFtIHtDb21wbGV4fSB4XG4gKiBAcGFyYW0ge0NvbXBsZXh9IHlcbiAqIEBwYXJhbSB7bnVtYmVyfSBlcHNpbG9uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gY29tcGxleEVxdWFscyh4LCB5LCBlcHNpbG9uKSB7XG4gIHJldHVybiAoMCwgX251bWJlci5uZWFybHlFcXVhbCkoeC5yZSwgeS5yZSwgZXBzaWxvbikgJiYgKDAsIF9udW1iZXIubmVhcmx5RXF1YWwpKHguaW0sIHkuaW0sIGVwc2lsb24pO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5nZXRTYWZlUHJvcGVydHkgPSBnZXRTYWZlUHJvcGVydHk7XG5leHBvcnRzLnNldFNhZmVQcm9wZXJ0eSA9IHNldFNhZmVQcm9wZXJ0eTtcbmV4cG9ydHMuaXNTYWZlUHJvcGVydHkgPSBpc1NhZmVQcm9wZXJ0eTtcbmV4cG9ydHMudmFsaWRhdGVTYWZlTWV0aG9kID0gdmFsaWRhdGVTYWZlTWV0aG9kO1xuZXhwb3J0cy5pc1NhZmVNZXRob2QgPSBpc1NhZmVNZXRob2Q7XG5leHBvcnRzLmlzUGxhaW5PYmplY3QgPSBpc1BsYWluT2JqZWN0O1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuL29iamVjdFwiKTtcblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG4vKipcbiAqIEdldCBhIHByb3BlcnR5IG9mIGEgcGxhaW4gb2JqZWN0XG4gKiBUaHJvd3MgYW4gZXJyb3IgaW4gY2FzZSB0aGUgb2JqZWN0IGlzIG5vdCBhIHBsYWluIG9iamVjdCBvciB0aGVcbiAqIHByb3BlcnR5IGlzIG5vdCBkZWZpbmVkIG9uIHRoZSBvYmplY3QgaXRzZWxmXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcFxuICogQHJldHVybiB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUgd2hlbiBzYWZlXG4gKi9cbmZ1bmN0aW9uIGdldFNhZmVQcm9wZXJ0eShvYmplY3QsIHByb3ApIHtcbiAgLy8gb25seSBhbGxvdyBnZXR0aW5nIHNhZmUgcHJvcGVydGllcyBvZiBhIHBsYWluIG9iamVjdFxuICBpZiAoaXNQbGFpbk9iamVjdChvYmplY3QpICYmIGlzU2FmZVByb3BlcnR5KG9iamVjdCwgcHJvcCkpIHtcbiAgICByZXR1cm4gb2JqZWN0W3Byb3BdO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmplY3RbcHJvcF0gPT09ICdmdW5jdGlvbicgJiYgaXNTYWZlTWV0aG9kKG9iamVjdCwgcHJvcCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBhY2Nlc3MgbWV0aG9kIFwiJyArIHByb3AgKyAnXCIgYXMgYSBwcm9wZXJ0eScpO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKCdObyBhY2Nlc3MgdG8gcHJvcGVydHkgXCInICsgcHJvcCArICdcIicpO1xufVxuLyoqXG4gKiBTZXQgYSBwcm9wZXJ0eSBvbiBhIHBsYWluIG9iamVjdC5cbiAqIFRocm93cyBhbiBlcnJvciBpbiBjYXNlIHRoZSBvYmplY3QgaXMgbm90IGEgcGxhaW4gb2JqZWN0IG9yIHRoZVxuICogcHJvcGVydHkgd291bGQgb3ZlcnJpZGUgYW4gaW5oZXJpdGVkIHByb3BlcnR5IGxpa2UgLmNvbnN0cnVjdG9yIG9yIC50b1N0cmluZ1xuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4geyp9IFJldHVybnMgdGhlIHZhbHVlXG4gKi9cbi8vIFRPRE86IG1lcmdlIHRoaXMgZnVuY3Rpb24gaW50byBhY2Nlc3MuanM/XG5cblxuZnVuY3Rpb24gc2V0U2FmZVByb3BlcnR5KG9iamVjdCwgcHJvcCwgdmFsdWUpIHtcbiAgLy8gb25seSBhbGxvdyBzZXR0aW5nIHNhZmUgcHJvcGVydGllcyBvZiBhIHBsYWluIG9iamVjdFxuICBpZiAoaXNQbGFpbk9iamVjdChvYmplY3QpICYmIGlzU2FmZVByb3BlcnR5KG9iamVjdCwgcHJvcCkpIHtcbiAgICBvYmplY3RbcHJvcF0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoJ05vIGFjY2VzcyB0byBwcm9wZXJ0eSBcIicgKyBwcm9wICsgJ1wiJyk7XG59XG4vKipcbiAqIFRlc3Qgd2hldGhlciBhIHByb3BlcnR5IGlzIHNhZmUgdG8gdXNlIGZvciBhbiBvYmplY3QuXG4gKiBGb3IgZXhhbXBsZSAudG9TdHJpbmcgYW5kIC5jb25zdHJ1Y3RvciBhcmUgbm90IHNhZmVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wXG4gKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgd2hlbiBzYWZlXG4gKi9cblxuXG5mdW5jdGlvbiBpc1NhZmVQcm9wZXJ0eShvYmplY3QsIHByb3ApIHtcbiAgaWYgKCFvYmplY3QgfHwgX3R5cGVvZihvYmplY3QpICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBTQUZFOiB3aGl0ZWxpc3RlZFxuICAvLyBlLmcgbGVuZ3RoXG5cblxuICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKHNhZmVOYXRpdmVQcm9wZXJ0aWVzLCBwcm9wKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIFVOU0FGRTogaW5oZXJpdGVkIGZyb20gT2JqZWN0IHByb3RvdHlwZVxuICAvLyBlLmcgY29uc3RydWN0b3JcblxuXG4gIGlmIChwcm9wIGluIE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICAvLyAnaW4nIGlzIHVzZWQgaW5zdGVhZCBvZiBoYXNPd25Qcm9wZXJ0eSBmb3Igbm9kZWpzIHYwLjEwXG4gICAgLy8gd2hpY2ggaXMgaW5jb25zaXN0ZW50IG9uIHJvb3QgcHJvdG90eXBlcy4gSXQgaXMgc2FmZVxuICAgIC8vIGhlcmUgYmVjYXVzZSBPYmplY3QucHJvdG90eXBlIGlzIGEgcm9vdCBvYmplY3RcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gVU5TQUZFOiBpbmhlcml0ZWQgZnJvbSBGdW5jdGlvbiBwcm90b3R5cGVcbiAgLy8gZS5nIGNhbGwsIGFwcGx5XG5cblxuICBpZiAocHJvcCBpbiBGdW5jdGlvbi5wcm90b3R5cGUpIHtcbiAgICAvLyAnaW4nIGlzIHVzZWQgaW5zdGVhZCBvZiBoYXNPd25Qcm9wZXJ0eSBmb3Igbm9kZWpzIHYwLjEwXG4gICAgLy8gd2hpY2ggaXMgaW5jb25zaXN0ZW50IG9uIHJvb3QgcHJvdG90eXBlcy4gSXQgaXMgc2FmZVxuICAgIC8vIGhlcmUgYmVjYXVzZSBGdW5jdGlvbi5wcm90b3R5cGUgaXMgYSByb290IG9iamVjdFxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuLyoqXG4gKiBWYWxpZGF0ZSB3aGV0aGVyIGEgbWV0aG9kIGlzIHNhZmUuXG4gKiBUaHJvd3MgYW4gZXJyb3Igd2hlbiB0aGF0J3Mgbm90IHRoZSBjYXNlLlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZFxuICovXG4vLyBUT0RPOiBtZXJnZSB0aGlzIGZ1bmN0aW9uIGludG8gYXNzaWduLmpzP1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlU2FmZU1ldGhvZChvYmplY3QsIG1ldGhvZCkge1xuICBpZiAoIWlzU2FmZU1ldGhvZChvYmplY3QsIG1ldGhvZCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGFjY2VzcyB0byBtZXRob2QgXCInICsgbWV0aG9kICsgJ1wiJyk7XG4gIH1cbn1cbi8qKlxuICogQ2hlY2sgd2hldGhlciBhIG1ldGhvZCBpcyBzYWZlLlxuICogVGhyb3dzIGFuIGVycm9yIHdoZW4gdGhhdCdzIG5vdCB0aGUgY2FzZSAoZm9yIGV4YW1wbGUgZm9yIGBjb25zdHJ1Y3RvcmApLlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZFxuICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIHdoZW4gc2FmZSwgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cblxuXG5mdW5jdGlvbiBpc1NhZmVNZXRob2Qob2JqZWN0LCBtZXRob2QpIHtcbiAgaWYgKG9iamVjdCA9PT0gbnVsbCB8fCBvYmplY3QgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2Ygb2JqZWN0W21ldGhvZF0gIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gVU5TQUZFOiBnaG9zdGVkXG4gIC8vIGUuZyBvdmVycmlkZGVuIHRvU3RyaW5nXG4gIC8vIE5vdGUgdGhhdCBJRTEwIGRvZXNuJ3Qgc3VwcG9ydCBfX3Byb3RvX18gYW5kIHdlIGNhbid0IGRvIHRoaXMgY2hlY2sgdGhlcmUuXG5cblxuICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKG9iamVjdCwgbWV0aG9kKSAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YgJiYgbWV0aG9kIGluIE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIFNBRkU6IHdoaXRlbGlzdGVkXG4gIC8vIGUuZyB0b1N0cmluZ1xuXG5cbiAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShzYWZlTmF0aXZlTWV0aG9kcywgbWV0aG9kKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIFVOU0FGRTogaW5oZXJpdGVkIGZyb20gT2JqZWN0IHByb3RvdHlwZVxuICAvLyBlLmcgY29uc3RydWN0b3JcblxuXG4gIGlmIChtZXRob2QgaW4gT2JqZWN0LnByb3RvdHlwZSkge1xuICAgIC8vICdpbicgaXMgdXNlZCBpbnN0ZWFkIG9mIGhhc093blByb3BlcnR5IGZvciBub2RlanMgdjAuMTBcbiAgICAvLyB3aGljaCBpcyBpbmNvbnNpc3RlbnQgb24gcm9vdCBwcm90b3R5cGVzLiBJdCBpcyBzYWZlXG4gICAgLy8gaGVyZSBiZWNhdXNlIE9iamVjdC5wcm90b3R5cGUgaXMgYSByb290IG9iamVjdFxuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBVTlNBRkU6IGluaGVyaXRlZCBmcm9tIEZ1bmN0aW9uIHByb3RvdHlwZVxuICAvLyBlLmcgY2FsbCwgYXBwbHlcblxuXG4gIGlmIChtZXRob2QgaW4gRnVuY3Rpb24ucHJvdG90eXBlKSB7XG4gICAgLy8gJ2luJyBpcyB1c2VkIGluc3RlYWQgb2YgaGFzT3duUHJvcGVydHkgZm9yIG5vZGVqcyB2MC4xMFxuICAgIC8vIHdoaWNoIGlzIGluY29uc2lzdGVudCBvbiByb290IHByb3RvdHlwZXMuIEl0IGlzIHNhZmVcbiAgICAvLyBoZXJlIGJlY2F1c2UgRnVuY3Rpb24ucHJvdG90eXBlIGlzIGEgcm9vdCBvYmplY3RcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvYmplY3QpIHtcbiAgcmV0dXJuIF90eXBlb2Yob2JqZWN0KSA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICYmIG9iamVjdC5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0O1xufVxuXG52YXIgc2FmZU5hdGl2ZVByb3BlcnRpZXMgPSB7XG4gIGxlbmd0aDogdHJ1ZSxcbiAgbmFtZTogdHJ1ZVxufTtcbnZhciBzYWZlTmF0aXZlTWV0aG9kcyA9IHtcbiAgdG9TdHJpbmc6IHRydWUsXG4gIHZhbHVlT2Y6IHRydWUsXG4gIHRvTG9jYWxlU3RyaW5nOiB0cnVlXG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5taXhpbiA9IG1peGluO1xuXG52YXIgX3RpbnlFbWl0dGVyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwidGlueS1lbWl0dGVyXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbi8qKlxuICogRXh0ZW5kIGdpdmVuIG9iamVjdCB3aXRoIGVtaXR0ZXIgZnVuY3Rpb25zIGBvbmAsIGBvZmZgLCBgb25jZWAsIGBlbWl0YFxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHJldHVybiB7T2JqZWN0fSBvYmpcbiAqL1xuZnVuY3Rpb24gbWl4aW4ob2JqKSB7XG4gIC8vIGNyZWF0ZSBldmVudCBlbWl0dGVyXG4gIHZhciBlbWl0dGVyID0gbmV3IF90aW55RW1pdHRlcltcImRlZmF1bHRcIl0oKTsgLy8gYmluZCBtZXRob2RzIHRvIG9iaiAod2UgZG9uJ3Qgd2FudCB0byBleHBvc2UgdGhlIGVtaXR0ZXIuZSBBcnJheS4uLilcblxuICBvYmoub24gPSBlbWl0dGVyLm9uLmJpbmQoZW1pdHRlcik7XG4gIG9iai5vZmYgPSBlbWl0dGVyLm9mZi5iaW5kKGVtaXR0ZXIpO1xuICBvYmoub25jZSA9IGVtaXR0ZXIub25jZS5iaW5kKGVtaXR0ZXIpO1xuICBvYmouZW1pdCA9IGVtaXR0ZXIuZW1pdC5iaW5kKGVtaXR0ZXIpO1xuICByZXR1cm4gb2JqO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5mYWN0b3J5ID0gZmFjdG9yeTtcbmV4cG9ydHMuc29ydEZhY3RvcmllcyA9IHNvcnRGYWN0b3JpZXM7XG5leHBvcnRzLmNyZWF0ZSA9IGNyZWF0ZTtcbmV4cG9ydHMuaXNGYWN0b3J5ID0gaXNGYWN0b3J5O1xuZXhwb3J0cy5hc3NlcnREZXBlbmRlbmNpZXMgPSBhc3NlcnREZXBlbmRlbmNpZXM7XG5leHBvcnRzLmlzT3B0aW9uYWxEZXBlbmRlbmN5ID0gaXNPcHRpb25hbERlcGVuZGVuY3k7XG5leHBvcnRzLnN0cmlwT3B0aW9uYWxOb3RhdGlvbiA9IHN0cmlwT3B0aW9uYWxOb3RhdGlvbjtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuL2FycmF5XCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuL29iamVjdFwiKTtcblxuLyoqXG4gKiBDcmVhdGUgYSBmYWN0b3J5IGZ1bmN0aW9uLCB3aGljaCBjYW4gYmUgdXNlZCB0byBpbmplY3QgZGVwZW5kZW5jaWVzLlxuICpcbiAqIFRoZSBjcmVhdGVkIGZ1bmN0aW9ucyBhcmUgbWVtb2l6ZWQsIGEgY29uc2VjdXRpdmUgY2FsbCBvZiB0aGUgZmFjdG9yeVxuICogd2l0aCB0aGUgZXhhY3Qgc2FtZSBpbnB1dHMgd2lsbCByZXR1cm4gdGhlIHNhbWUgZnVuY3Rpb24gaW5zdGFuY2UuXG4gKiBUaGUgbWVtb2l6ZWQgY2FjaGUgaXMgZXhwb3NlZCBvbiBgZmFjdG9yeS5jYWNoZWAgYW5kIGNhbiBiZSBjbGVhcmVkXG4gKiBpZiBuZWVkZWQuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiAgICAgY29uc3QgbmFtZSA9ICdsb2cnXG4gKiAgICAgY29uc3QgZGVwZW5kZW5jaWVzID0gWydjb25maWcnLCAndHlwZWQnLCAnZGl2aWRlU2NhbGFyJywgJ0NvbXBsZXgnXVxuICpcbiAqICAgICBleHBvcnQgY29uc3QgY3JlYXRlTG9nID0gZmFjdG9yeShuYW1lLCBkZXBlbmRlbmNpZXMsICh7IHR5cGVkLCBjb25maWcsIGRpdmlkZVNjYWxhciwgQ29tcGxleCB9KSA9PiB7XG4gKiAgICAgICAvLyAuLi4gY3JlYXRlIHRoZSBmdW5jdGlvbiBsb2cgaGVyZSBhbmQgcmV0dXJuIGl0XG4gKiAgICAgfVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lICAgICAgICAgICBOYW1lIG9mIHRoZSBmdW5jdGlvbiB0byBiZSBjcmVhdGVkXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBkZXBlbmRlbmNpZXMgVGhlIG5hbWVzIG9mIGFsbCByZXF1aXJlZCBkZXBlbmRlbmNpZXNcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNyZWF0ZSAgICAgICBDYWxsYmFjayBmdW5jdGlvbiBjYWxsZWQgd2l0aCBhbiBvYmplY3Qgd2l0aCBhbGwgZGVwZW5kZW5jaWVzXG4gKiBAcGFyYW0ge09iamVjdH0gW21ldGFdICAgICAgICAgT3B0aW9uYWwgb2JqZWN0IHdpdGggbWV0YSBpbmZvcm1hdGlvbiB0aGF0IHdpbGwgYmUgYXR0YWNoZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgY3JlYXRlZCBmYWN0b3J5IGZ1bmN0aW9uIGFzIHByb3BlcnR5IGBtZXRhYC5cbiAqIEByZXR1cm5zIHtmdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gZmFjdG9yeShuYW1lLCBkZXBlbmRlbmNpZXMsIGNyZWF0ZSwgbWV0YSkge1xuICBmdW5jdGlvbiBhc3NlcnRBbmRDcmVhdGUoc2NvcGUpIHtcbiAgICAvLyB3ZSBvbmx5IHBhc3MgdGhlIHJlcXVlc3RlZCBkZXBlbmRlbmNpZXMgdG8gdGhlIGZhY3RvcnkgZnVuY3Rpb25cbiAgICAvLyB0byBwcmV2ZW50IGZ1bmN0aW9ucyB0byByZWx5IG9uIGRlcGVuZGVuY2llcyB0aGF0IGFyZSBub3QgZXhwbGljaXRseVxuICAgIC8vIHJlcXVlc3RlZC5cbiAgICB2YXIgZGVwcyA9ICgwLCBfb2JqZWN0LnBpY2tTaGFsbG93KShzY29wZSwgZGVwZW5kZW5jaWVzLm1hcChzdHJpcE9wdGlvbmFsTm90YXRpb24pKTtcbiAgICBhc3NlcnREZXBlbmRlbmNpZXMobmFtZSwgZGVwZW5kZW5jaWVzLCBzY29wZSk7XG4gICAgcmV0dXJuIGNyZWF0ZShkZXBzKTtcbiAgfVxuXG4gIGFzc2VydEFuZENyZWF0ZS5pc0ZhY3RvcnkgPSB0cnVlO1xuICBhc3NlcnRBbmRDcmVhdGUuZm4gPSBuYW1lO1xuICBhc3NlcnRBbmRDcmVhdGUuZGVwZW5kZW5jaWVzID0gZGVwZW5kZW5jaWVzLnNsaWNlKCkuc29ydCgpO1xuXG4gIGlmIChtZXRhKSB7XG4gICAgYXNzZXJ0QW5kQ3JlYXRlLm1ldGEgPSBtZXRhO1xuICB9XG5cbiAgcmV0dXJuIGFzc2VydEFuZENyZWF0ZTtcbn1cbi8qKlxuICogU29ydCBhbGwgZmFjdG9yaWVzIHN1Y2ggdGhhdCB3aGVuIGxvYWRpbmcgaW4gb3JkZXIsIHRoZSBkZXBlbmRlbmNpZXMgYXJlIHJlc29sdmVkLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGZhY3Rvcmllc1xuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGEgbmV3IGFycmF5IHdpdGggdGhlIHNvcnRlZCBmYWN0b3JpZXMuXG4gKi9cblxuXG5mdW5jdGlvbiBzb3J0RmFjdG9yaWVzKGZhY3Rvcmllcykge1xuICB2YXIgZmFjdG9yaWVzQnlOYW1lID0ge307XG4gIGZhY3Rvcmllcy5mb3JFYWNoKGZ1bmN0aW9uIChmYWN0b3J5KSB7XG4gICAgZmFjdG9yaWVzQnlOYW1lW2ZhY3RvcnkuZm5dID0gZmFjdG9yeTtcbiAgfSk7XG5cbiAgZnVuY3Rpb24gY29udGFpbnNEZXBlbmRlbmN5KGZhY3RvcnksIGRlcGVuZGVuY3kpIHtcbiAgICAvLyBUT0RPOiBkZXRlY3QgY2lyY3VsYXIgcmVmZXJlbmNlc1xuICAgIGlmIChpc0ZhY3RvcnkoZmFjdG9yeSkpIHtcbiAgICAgIGlmICgoMCwgX2FycmF5LmNvbnRhaW5zKShmYWN0b3J5LmRlcGVuZGVuY2llcywgZGVwZW5kZW5jeS5mbiB8fCBkZXBlbmRlbmN5Lm5hbWUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmFjdG9yeS5kZXBlbmRlbmNpZXMuc29tZShmdW5jdGlvbiAoZCkge1xuICAgICAgICByZXR1cm4gY29udGFpbnNEZXBlbmRlbmN5KGZhY3Rvcmllc0J5TmFtZVtkXSwgZGVwZW5kZW5jeSk7XG4gICAgICB9KSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgc29ydGVkID0gW107XG5cbiAgZnVuY3Rpb24gYWRkRmFjdG9yeShmYWN0b3J5KSB7XG4gICAgdmFyIGluZGV4ID0gMDtcblxuICAgIHdoaWxlIChpbmRleCA8IHNvcnRlZC5sZW5ndGggJiYgIWNvbnRhaW5zRGVwZW5kZW5jeShzb3J0ZWRbaW5kZXhdLCBmYWN0b3J5KSkge1xuICAgICAgaW5kZXgrKztcbiAgICB9XG5cbiAgICBzb3J0ZWQuc3BsaWNlKGluZGV4LCAwLCBmYWN0b3J5KTtcbiAgfSAvLyBzb3J0IHJlZ3VsYXIgZmFjdG9yeSBmdW5jdGlvbnNcblxuXG4gIGZhY3Rvcmllcy5maWx0ZXIoaXNGYWN0b3J5KS5mb3JFYWNoKGFkZEZhY3RvcnkpOyAvLyBzb3J0IGxlZ2FjeSBmYWN0b3J5IGZ1bmN0aW9ucyBBRlRFUiB0aGUgcmVndWxhciBmYWN0b3J5IGZ1bmN0aW9uc1xuXG4gIGZhY3Rvcmllcy5maWx0ZXIoZnVuY3Rpb24gKGZhY3RvcnkpIHtcbiAgICByZXR1cm4gIWlzRmFjdG9yeShmYWN0b3J5KTtcbiAgfSkuZm9yRWFjaChhZGRGYWN0b3J5KTtcbiAgcmV0dXJuIHNvcnRlZDtcbn0gLy8gVE9ETzogY29tbWVudCBvciBjbGVhbnVwIGlmIHVudXNlZCBpbiB0aGUgZW5kXG5cblxuZnVuY3Rpb24gY3JlYXRlKGZhY3Rvcmllcykge1xuICB2YXIgc2NvcGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICBzb3J0RmFjdG9yaWVzKGZhY3RvcmllcykuZm9yRWFjaChmdW5jdGlvbiAoZmFjdG9yeSkge1xuICAgIHJldHVybiBmYWN0b3J5KHNjb3BlKTtcbiAgfSk7XG4gIHJldHVybiBzY29wZTtcbn1cbi8qKlxuICogVGVzdCB3aGV0aGVyIGFuIG9iamVjdCBpcyBhIGZhY3RvcnkuIFRoaXMgaXMgdGhlIGNhc2Ugd2hlbiBpdCBoYXNcbiAqIHByb3BlcnRpZXMgbmFtZSwgZGVwZW5kZW5jaWVzLCBhbmQgYSBmdW5jdGlvbiBjcmVhdGUuXG4gKiBAcGFyYW0geyp9IG9ialxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cblxuXG5mdW5jdGlvbiBpc0ZhY3Rvcnkob2JqKSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvYmouZm4gPT09ICdzdHJpbmcnICYmIEFycmF5LmlzQXJyYXkob2JqLmRlcGVuZGVuY2llcyk7XG59XG4vKipcbiAqIEFzc2VydCB0aGF0IGFsbCBkZXBlbmRlbmNpZXMgb2YgYSBsaXN0IHdpdGggZGVwZW5kZW5jaWVzIGFyZSBhdmFpbGFibGUgaW4gdGhlIHByb3ZpZGVkIHNjb3BlLlxuICpcbiAqIFdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIHdoZW4gdGhlcmUgYXJlIGRlcGVuZGVuY2llcyBtaXNzaW5nLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lICAgTmFtZSBmb3IgdGhlIGZ1bmN0aW9uIHRvIGJlIGNyZWF0ZWQuIFVzZWQgdG8gZ2VuZXJhdGUgYSB1c2VmdWwgZXJyb3IgbWVzc2FnZVxuICogQHBhcmFtIHtzdHJpbmdbXX0gZGVwZW5kZW5jaWVzXG4gKiBAcGFyYW0ge09iamVjdH0gc2NvcGVcbiAqL1xuXG5cbmZ1bmN0aW9uIGFzc2VydERlcGVuZGVuY2llcyhuYW1lLCBkZXBlbmRlbmNpZXMsIHNjb3BlKSB7XG4gIHZhciBhbGxEZWZpbmVkID0gZGVwZW5kZW5jaWVzLmZpbHRlcihmdW5jdGlvbiAoZGVwZW5kZW5jeSkge1xuICAgIHJldHVybiAhaXNPcHRpb25hbERlcGVuZGVuY3koZGVwZW5kZW5jeSk7XG4gIH0pIC8vIGZpbHRlciBvcHRpb25hbHNcbiAgLmV2ZXJ5KGZ1bmN0aW9uIChkZXBlbmRlbmN5KSB7XG4gICAgcmV0dXJuIHNjb3BlW2RlcGVuZGVuY3ldICE9PSB1bmRlZmluZWQ7XG4gIH0pO1xuXG4gIGlmICghYWxsRGVmaW5lZCkge1xuICAgIHZhciBtaXNzaW5nRGVwZW5kZW5jaWVzID0gZGVwZW5kZW5jaWVzLmZpbHRlcihmdW5jdGlvbiAoZGVwZW5kZW5jeSkge1xuICAgICAgcmV0dXJuIHNjb3BlW2RlcGVuZGVuY3ldID09PSB1bmRlZmluZWQ7XG4gICAgfSk7IC8vIFRPRE86IGNyZWF0ZSBhIGN1c3RvbSBlcnJvciBjbGFzcyBmb3IgdGhpcywgYSBNYXRoanNFcnJvciBvciBzb21ldGhpbmcgbGlrZSB0aGF0XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgY3JlYXRlIGZ1bmN0aW9uIFxcXCJcIi5jb25jYXQobmFtZSwgXCJcXFwiLCBcIikgKyBcInNvbWUgZGVwZW5kZW5jaWVzIGFyZSBtaXNzaW5nOiBcIi5jb25jYXQobWlzc2luZ0RlcGVuZGVuY2llcy5tYXAoZnVuY3Rpb24gKGQpIHtcbiAgICAgIHJldHVybiBcIlxcXCJcIi5jb25jYXQoZCwgXCJcXFwiXCIpO1xuICAgIH0pLmpvaW4oJywgJyksIFwiLlwiKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNPcHRpb25hbERlcGVuZGVuY3koZGVwZW5kZW5jeSkge1xuICByZXR1cm4gZGVwZW5kZW5jeSAmJiBkZXBlbmRlbmN5WzBdID09PSAnPyc7XG59XG5cbmZ1bmN0aW9uIHN0cmlwT3B0aW9uYWxOb3RhdGlvbihkZXBlbmRlbmN5KSB7XG4gIHJldHVybiBkZXBlbmRlbmN5ICYmIGRlcGVuZGVuY3lbMF0gPT09ICc/JyA/IGRlcGVuZGVuY3kuc2xpY2UoMSkgOiBkZXBlbmRlbmN5O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tZW1vaXplID0gbWVtb2l6ZTtcbmV4cG9ydHMubWVtb2l6ZUNvbXBhcmUgPSBtZW1vaXplQ29tcGFyZTtcbmV4cG9ydHMubWF4QXJndW1lbnRDb3VudCA9IG1heEFyZ3VtZW50Q291bnQ7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuLy8gZnVuY3Rpb24gdXRpbHNcblxuLyoqXG4gKiBNZW1vaXplIGEgZ2l2ZW4gZnVuY3Rpb24gYnkgY2FjaGluZyB0aGUgY29tcHV0ZWQgcmVzdWx0LlxuICogVGhlIGNhY2hlIG9mIGEgbWVtb2l6ZWQgZnVuY3Rpb24gY2FuIGJlIGNsZWFyZWQgYnkgZGVsZXRpbmcgdGhlIGBjYWNoZWBcbiAqIHByb3BlcnR5IG9mIHRoZSBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBmbiAgICAgICAgICAgICAgICAgICAgIFRoZSBmdW5jdGlvbiB0byBiZSBtZW1vaXplZC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTXVzdCBiZSBhIHB1cmUgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKGFyZ3M6IEFycmF5KX0gW2hhc2hlcl0gIEEgY3VzdG9tIGhhc2ggYnVpbGRlci5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXMgSlNPTi5zdHJpbmdpZnkgYnkgZGVmYXVsdC5cbiAqIEByZXR1cm4ge2Z1bmN0aW9ufSAgICAgICAgICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgbWVtb2l6ZWQgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gbWVtb2l6ZShmbiwgaGFzaGVyKSB7XG4gIHJldHVybiBmdW5jdGlvbiBtZW1vaXplKCkge1xuICAgIGlmIChfdHlwZW9mKG1lbW9pemUuY2FjaGUpICE9PSAnb2JqZWN0Jykge1xuICAgICAgbWVtb2l6ZS5jYWNoZSA9IHt9O1xuICAgIH1cblxuICAgIHZhciBhcmdzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG5cbiAgICB2YXIgaGFzaCA9IGhhc2hlciA/IGhhc2hlcihhcmdzKSA6IEpTT04uc3RyaW5naWZ5KGFyZ3MpO1xuXG4gICAgaWYgKCEoaGFzaCBpbiBtZW1vaXplLmNhY2hlKSkge1xuICAgICAgbWVtb2l6ZS5jYWNoZVtoYXNoXSA9IGZuLmFwcGx5KGZuLCBhcmdzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVtb2l6ZS5jYWNoZVtoYXNoXTtcbiAgfTtcbn1cbi8qKlxuICogTWVtb2l6ZSBhIGdpdmVuIGZ1bmN0aW9uIGJ5IGNhY2hpbmcgYWxsIHJlc3VsdHMgYW5kIHRoZSBhcmd1bWVudHMsXG4gKiBhbmQgY29tcGFyaW5nIGFnYWluc3QgdGhlIGFyZ3VtZW50cyBvZiBwcmV2aW91cyByZXN1bHRzIGJlZm9yZVxuICogZXhlY3V0aW5nIGFnYWluLlxuICogVGhpcyBpcyBsZXNzIHBlcmZvcm1hbnQgdGhhbiBgbWVtb2l6ZWAgd2hpY2ggY2FsY3VsYXRlcyBhIGhhc2gsXG4gKiB3aGljaCBpcyB2ZXJ5IGZhc3QgdG8gY29tcGFyZS4gVXNlIGBtZW1vaXplQ29tcGFyZWAgb25seSB3aGVuIGl0IGlzXG4gKiBub3QgcG9zc2libGUgdG8gY3JlYXRlIGEgdW5pcXVlIHNlcmlhbGl6YWJsZSBoYXNoIGZyb20gdGhlIGZ1bmN0aW9uXG4gKiBhcmd1bWVudHMuXG4gKiBUaGUgaXNFcXVhbCBmdW5jdGlvbiBtdXN0IGNvbXBhcmUgdHdvIHNldHMgb2YgYXJndW1lbnRzXG4gKiBhbmQgcmV0dXJuIHRydWUgd2hlbiBlcXVhbCAoY2FuIGJlIGEgZGVlcCBlcXVhbGl0eSBjaGVjayBmb3IgZXhhbXBsZSkuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBmblxuICogQHBhcmFtIHtmdW5jdGlvbihhOiAqLCBiOiAqKSA6IGJvb2xlYW59IGlzRXF1YWxcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn1cbiAqL1xuXG5cbmZ1bmN0aW9uIG1lbW9pemVDb21wYXJlKGZuLCBpc0VxdWFsKSB7XG4gIHZhciBtZW1vaXplID0gZnVuY3Rpb24gbWVtb2l6ZSgpIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuXG4gICAgZm9yICh2YXIgYyA9IDA7IGMgPCBtZW1vaXplLmNhY2hlLmxlbmd0aDsgYysrKSB7XG4gICAgICB2YXIgY2FjaGVkID0gbWVtb2l6ZS5jYWNoZVtjXTtcblxuICAgICAgaWYgKGlzRXF1YWwoYXJncywgY2FjaGVkLmFyZ3MpKSB7XG4gICAgICAgIC8vIFRPRE86IG1vdmUgdGhpcyBjYWNoZSBlbnRyeSB0byB0aGUgdG9wIHNvIHJlY2VudGx5IHVzZWQgZW50cmllcyBtb3ZlIHVwP1xuICAgICAgICByZXR1cm4gY2FjaGVkLnJlcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcmVzID0gZm4uYXBwbHkoZm4sIGFyZ3MpO1xuICAgIG1lbW9pemUuY2FjaGUudW5zaGlmdCh7XG4gICAgICBhcmdzOiBhcmdzLFxuICAgICAgcmVzOiByZXNcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIG1lbW9pemUuY2FjaGUgPSBbXTtcbiAgcmV0dXJuIG1lbW9pemU7XG59XG4vKipcbiAqIEZpbmQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGFyZ3VtZW50cyBleHBlY3RlZCBieSBhIHR5cGVkIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtmdW5jdGlvbn0gZm4gICBBIHR5cGVkIGZ1bmN0aW9uXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFJldHVybnMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGV4cGVjdGVkIGFyZ3VtZW50cy5cbiAqICAgICAgICAgICAgICAgICAgUmV0dXJucyAtMSB3aGVuIG5vIHNpZ25hdHVyZXMgd2hlcmUgZm91bmQgb24gdGhlIGZ1bmN0aW9uLlxuICovXG5cblxuZnVuY3Rpb24gbWF4QXJndW1lbnRDb3VudChmbikge1xuICByZXR1cm4gT2JqZWN0LmtleXMoZm4uc2lnbmF0dXJlcyB8fCB7fSkucmVkdWNlKGZ1bmN0aW9uIChhcmdzLCBzaWduYXR1cmUpIHtcbiAgICB2YXIgY291bnQgPSAoc2lnbmF0dXJlLm1hdGNoKC8sL2cpIHx8IFtdKS5sZW5ndGggKyAxO1xuICAgIHJldHVybiBNYXRoLm1heChhcmdzLCBjb3VudCk7XG4gIH0sIC0xKTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaXNOdW1iZXIgPSBpc051bWJlcjtcbmV4cG9ydHMuaXNCaWdOdW1iZXIgPSBpc0JpZ051bWJlcjtcbmV4cG9ydHMuaXNDb21wbGV4ID0gaXNDb21wbGV4O1xuZXhwb3J0cy5pc0ZyYWN0aW9uID0gaXNGcmFjdGlvbjtcbmV4cG9ydHMuaXNVbml0ID0gaXNVbml0O1xuZXhwb3J0cy5pc1N0cmluZyA9IGlzU3RyaW5nO1xuZXhwb3J0cy5pc01hdHJpeCA9IGlzTWF0cml4O1xuZXhwb3J0cy5pc0NvbGxlY3Rpb24gPSBpc0NvbGxlY3Rpb247XG5leHBvcnRzLmlzRGVuc2VNYXRyaXggPSBpc0RlbnNlTWF0cml4O1xuZXhwb3J0cy5pc1NwYXJzZU1hdHJpeCA9IGlzU3BhcnNlTWF0cml4O1xuZXhwb3J0cy5pc1JhbmdlID0gaXNSYW5nZTtcbmV4cG9ydHMuaXNJbmRleCA9IGlzSW5kZXg7XG5leHBvcnRzLmlzQm9vbGVhbiA9IGlzQm9vbGVhbjtcbmV4cG9ydHMuaXNSZXN1bHRTZXQgPSBpc1Jlc3VsdFNldDtcbmV4cG9ydHMuaXNIZWxwID0gaXNIZWxwO1xuZXhwb3J0cy5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvbjtcbmV4cG9ydHMuaXNEYXRlID0gaXNEYXRlO1xuZXhwb3J0cy5pc1JlZ0V4cCA9IGlzUmVnRXhwO1xuZXhwb3J0cy5pc09iamVjdCA9IGlzT2JqZWN0O1xuZXhwb3J0cy5pc051bGwgPSBpc051bGw7XG5leHBvcnRzLmlzVW5kZWZpbmVkID0gaXNVbmRlZmluZWQ7XG5leHBvcnRzLmlzQWNjZXNzb3JOb2RlID0gaXNBY2Nlc3Nvck5vZGU7XG5leHBvcnRzLmlzQXJyYXlOb2RlID0gaXNBcnJheU5vZGU7XG5leHBvcnRzLmlzQXNzaWdubWVudE5vZGUgPSBpc0Fzc2lnbm1lbnROb2RlO1xuZXhwb3J0cy5pc0Jsb2NrTm9kZSA9IGlzQmxvY2tOb2RlO1xuZXhwb3J0cy5pc0NvbmRpdGlvbmFsTm9kZSA9IGlzQ29uZGl0aW9uYWxOb2RlO1xuZXhwb3J0cy5pc0NvbnN0YW50Tm9kZSA9IGlzQ29uc3RhbnROb2RlO1xuZXhwb3J0cy5pc0Z1bmN0aW9uQXNzaWdubWVudE5vZGUgPSBpc0Z1bmN0aW9uQXNzaWdubWVudE5vZGU7XG5leHBvcnRzLmlzRnVuY3Rpb25Ob2RlID0gaXNGdW5jdGlvbk5vZGU7XG5leHBvcnRzLmlzSW5kZXhOb2RlID0gaXNJbmRleE5vZGU7XG5leHBvcnRzLmlzTm9kZSA9IGlzTm9kZTtcbmV4cG9ydHMuaXNPYmplY3ROb2RlID0gaXNPYmplY3ROb2RlO1xuZXhwb3J0cy5pc09wZXJhdG9yTm9kZSA9IGlzT3BlcmF0b3JOb2RlO1xuZXhwb3J0cy5pc1BhcmVudGhlc2lzTm9kZSA9IGlzUGFyZW50aGVzaXNOb2RlO1xuZXhwb3J0cy5pc1JhbmdlTm9kZSA9IGlzUmFuZ2VOb2RlO1xuZXhwb3J0cy5pc1N5bWJvbE5vZGUgPSBpc1N5bWJvbE5vZGU7XG5leHBvcnRzLmlzQ2hhaW4gPSBpc0NoYWluO1xuZXhwb3J0cy50eXBlT2YgPSB0eXBlT2Y7XG5leHBvcnRzLmlzQXJyYXkgPSB2b2lkIDA7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuLy8gdHlwZSBjaGVja3MgZm9yIGFsbCBrbm93biB0eXBlc1xuLy9cbi8vIG5vdGUgdGhhdDpcbi8vXG4vLyAtIGNoZWNrIGJ5IGR1Y2stdHlwaW5nIG9uIGEgcHJvcGVydHkgbGlrZSBgaXNVbml0YCwgaW5zdGVhZCBvZiBjaGVja2luZyBpbnN0YW5jZW9mLlxuLy8gICBpbnN0YW5jZW9mIGNhbm5vdCBiZSB1c2VkIGJlY2F1c2UgdGhhdCB3b3VsZCBub3QgYWxsb3cgdG8gcGFzcyBkYXRhIGZyb21cbi8vICAgb25lIGluc3RhbmNlIG9mIG1hdGguanMgdG8gYW5vdGhlciBzaW5jZSBlYWNoIGhhcyBpdCdzIG93biBpbnN0YW5jZSBvZiBVbml0LlxuLy8gLSBjaGVjayB0aGUgYGlzVW5pdGAgcHJvcGVydHkgdmlhIHRoZSBjb25zdHJ1Y3Rvciwgc28gdGhlcmUgd2lsbCBiZSBub1xuLy8gICBtYXRjaGVzIGZvciBcImZha2VcIiBpbnN0YW5jZXMgbGlrZSBwbGFpbiBvYmplY3RzIHdpdGggYSBwcm9wZXJ0eSBgaXNVbml0YC5cbi8vICAgVGhhdCBpcyBpbXBvcnRhbnQgZm9yIHNlY3VyaXR5IHJlYXNvbnMuXG4vLyAtIEl0IG11c3Qgbm90IGJlIHBvc3NpYmxlIHRvIG92ZXJyaWRlIHRoZSB0eXBlIGNoZWNrcyB1c2VkIGludGVybmFsbHksXG4vLyAgIGZvciBzZWN1cml0eSByZWFzb25zLCBzbyB0aGVzZSBmdW5jdGlvbnMgYXJlIG5vdCBleHBvc2VkIGluIHRoZSBleHByZXNzaW9uXG4vLyAgIHBhcnNlci5cbmZ1bmN0aW9uIGlzTnVtYmVyKHgpIHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSAnbnVtYmVyJztcbn1cblxuZnVuY3Rpb24gaXNCaWdOdW1iZXIoeCkge1xuICByZXR1cm4geCAmJiB4LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc0JpZ051bWJlciA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNDb21wbGV4KHgpIHtcbiAgcmV0dXJuIHggJiYgX3R5cGVvZih4KSA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKHgpLmlzQ29tcGxleCA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNGcmFjdGlvbih4KSB7XG4gIHJldHVybiB4ICYmIF90eXBlb2YoeCkgPT09ICdvYmplY3QnICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZih4KS5pc0ZyYWN0aW9uID09PSB0cnVlIHx8IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc1VuaXQoeCkge1xuICByZXR1cm4geCAmJiB4LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc1VuaXQgPT09IHRydWUgfHwgZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKHgpIHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSAnc3RyaW5nJztcbn1cblxudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuZXhwb3J0cy5pc0FycmF5ID0gaXNBcnJheTtcblxuZnVuY3Rpb24gaXNNYXRyaXgoeCkge1xuICByZXR1cm4geCAmJiB4LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc01hdHJpeCA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cbi8qKlxuICogVGVzdCB3aGV0aGVyIGEgdmFsdWUgaXMgYSBjb2xsZWN0aW9uOiBhbiBBcnJheSBvciBNYXRyaXhcbiAqIEBwYXJhbSB7Kn0geFxuICogQHJldHVybnMge2Jvb2xlYW59IGlzQ29sbGVjdGlvblxuICovXG5cblxuZnVuY3Rpb24gaXNDb2xsZWN0aW9uKHgpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoeCkgfHwgaXNNYXRyaXgoeCk7XG59XG5cbmZ1bmN0aW9uIGlzRGVuc2VNYXRyaXgoeCkge1xuICByZXR1cm4geCAmJiB4LmlzRGVuc2VNYXRyaXggJiYgeC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNNYXRyaXggPT09IHRydWUgfHwgZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzU3BhcnNlTWF0cml4KHgpIHtcbiAgcmV0dXJuIHggJiYgeC5pc1NwYXJzZU1hdHJpeCAmJiB4LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc01hdHJpeCA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNSYW5nZSh4KSB7XG4gIHJldHVybiB4ICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzUmFuZ2UgPT09IHRydWUgfHwgZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzSW5kZXgoeCkge1xuICByZXR1cm4geCAmJiB4LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc0luZGV4ID09PSB0cnVlIHx8IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc0Jvb2xlYW4oeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09ICdib29sZWFuJztcbn1cblxuZnVuY3Rpb24gaXNSZXN1bHRTZXQoeCkge1xuICByZXR1cm4geCAmJiB4LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc1Jlc3VsdFNldCA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNIZWxwKHgpIHtcbiAgcmV0dXJuIHggJiYgeC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNIZWxwID09PSB0cnVlIHx8IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSAnZnVuY3Rpb24nO1xufVxuXG5mdW5jdGlvbiBpc0RhdGUoeCkge1xuICByZXR1cm4geCBpbnN0YW5jZW9mIERhdGU7XG59XG5cbmZ1bmN0aW9uIGlzUmVnRXhwKHgpIHtcbiAgcmV0dXJuIHggaW5zdGFuY2VvZiBSZWdFeHA7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KHgpIHtcbiAgcmV0dXJuICEhKHggJiYgX3R5cGVvZih4KSA9PT0gJ29iamVjdCcgJiYgeC5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0ICYmICFpc0NvbXBsZXgoeCkgJiYgIWlzRnJhY3Rpb24oeCkpO1xufVxuXG5mdW5jdGlvbiBpc051bGwoeCkge1xuICByZXR1cm4geCA9PT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNVbmRlZmluZWQoeCkge1xuICByZXR1cm4geCA9PT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBpc0FjY2Vzc29yTm9kZSh4KSB7XG4gIHJldHVybiB4ICYmIHguaXNBY2Nlc3Nvck5vZGUgPT09IHRydWUgJiYgeC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNOb2RlID09PSB0cnVlIHx8IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc0FycmF5Tm9kZSh4KSB7XG4gIHJldHVybiB4ICYmIHguaXNBcnJheU5vZGUgPT09IHRydWUgJiYgeC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNOb2RlID09PSB0cnVlIHx8IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc0Fzc2lnbm1lbnROb2RlKHgpIHtcbiAgcmV0dXJuIHggJiYgeC5pc0Fzc2lnbm1lbnROb2RlID09PSB0cnVlICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzTm9kZSA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNCbG9ja05vZGUoeCkge1xuICByZXR1cm4geCAmJiB4LmlzQmxvY2tOb2RlID09PSB0cnVlICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzTm9kZSA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNDb25kaXRpb25hbE5vZGUoeCkge1xuICByZXR1cm4geCAmJiB4LmlzQ29uZGl0aW9uYWxOb2RlID09PSB0cnVlICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzTm9kZSA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNDb25zdGFudE5vZGUoeCkge1xuICByZXR1cm4geCAmJiB4LmlzQ29uc3RhbnROb2RlID09PSB0cnVlICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzTm9kZSA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlKHgpIHtcbiAgcmV0dXJuIHggJiYgeC5pc0Z1bmN0aW9uQXNzaWdubWVudE5vZGUgPT09IHRydWUgJiYgeC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNOb2RlID09PSB0cnVlIHx8IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uTm9kZSh4KSB7XG4gIHJldHVybiB4ICYmIHguaXNGdW5jdGlvbk5vZGUgPT09IHRydWUgJiYgeC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNOb2RlID09PSB0cnVlIHx8IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc0luZGV4Tm9kZSh4KSB7XG4gIHJldHVybiB4ICYmIHguaXNJbmRleE5vZGUgPT09IHRydWUgJiYgeC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNOb2RlID09PSB0cnVlIHx8IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc05vZGUoeCkge1xuICByZXR1cm4geCAmJiB4LmlzTm9kZSA9PT0gdHJ1ZSAmJiB4LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc05vZGUgPT09IHRydWUgfHwgZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0Tm9kZSh4KSB7XG4gIHJldHVybiB4ICYmIHguaXNPYmplY3ROb2RlID09PSB0cnVlICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzTm9kZSA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNPcGVyYXRvck5vZGUoeCkge1xuICByZXR1cm4geCAmJiB4LmlzT3BlcmF0b3JOb2RlID09PSB0cnVlICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzTm9kZSA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNQYXJlbnRoZXNpc05vZGUoeCkge1xuICByZXR1cm4geCAmJiB4LmlzUGFyZW50aGVzaXNOb2RlID09PSB0cnVlICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzTm9kZSA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNSYW5nZU5vZGUoeCkge1xuICByZXR1cm4geCAmJiB4LmlzUmFuZ2VOb2RlID09PSB0cnVlICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzTm9kZSA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNTeW1ib2xOb2RlKHgpIHtcbiAgcmV0dXJuIHggJiYgeC5pc1N5bWJvbE5vZGUgPT09IHRydWUgJiYgeC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNOb2RlID09PSB0cnVlIHx8IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc0NoYWluKHgpIHtcbiAgcmV0dXJuIHggJiYgeC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNDaGFpbiA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gdHlwZU9mKHgpIHtcbiAgdmFyIHQgPSBfdHlwZW9mKHgpO1xuXG4gIGlmICh0ID09PSAnb2JqZWN0Jykge1xuICAgIC8vIEphdmFTY3JpcHQgdHlwZXNcbiAgICBpZiAoeCA9PT0gbnVsbCkgcmV0dXJuICdudWxsJztcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh4KSkgcmV0dXJuICdBcnJheSc7XG4gICAgaWYgKHggaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4gJ0RhdGUnO1xuICAgIGlmICh4IGluc3RhbmNlb2YgUmVnRXhwKSByZXR1cm4gJ1JlZ0V4cCc7IC8vIG1hdGguanMgdHlwZXNcblxuICAgIGlmIChpc0JpZ051bWJlcih4KSkgcmV0dXJuICdCaWdOdW1iZXInO1xuICAgIGlmIChpc0NvbXBsZXgoeCkpIHJldHVybiAnQ29tcGxleCc7XG4gICAgaWYgKGlzRnJhY3Rpb24oeCkpIHJldHVybiAnRnJhY3Rpb24nO1xuICAgIGlmIChpc01hdHJpeCh4KSkgcmV0dXJuICdNYXRyaXgnO1xuICAgIGlmIChpc1VuaXQoeCkpIHJldHVybiAnVW5pdCc7XG4gICAgaWYgKGlzSW5kZXgoeCkpIHJldHVybiAnSW5kZXgnO1xuICAgIGlmIChpc1JhbmdlKHgpKSByZXR1cm4gJ1JhbmdlJztcbiAgICBpZiAoaXNSZXN1bHRTZXQoeCkpIHJldHVybiAnUmVzdWx0U2V0JztcbiAgICBpZiAoaXNOb2RlKHgpKSByZXR1cm4geC50eXBlO1xuICAgIGlmIChpc0NoYWluKHgpKSByZXR1cm4gJ0NoYWluJztcbiAgICBpZiAoaXNIZWxwKHgpKSByZXR1cm4gJ0hlbHAnO1xuICAgIHJldHVybiAnT2JqZWN0JztcbiAgfVxuXG4gIGlmICh0ID09PSAnZnVuY3Rpb24nKSByZXR1cm4gJ0Z1bmN0aW9uJztcbiAgcmV0dXJuIHQ7IC8vIGNhbiBiZSAnc3RyaW5nJywgJ251bWJlcicsICdib29sZWFuJywgLi4uXG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmVzY2FwZUxhdGV4ID0gZXNjYXBlTGF0ZXg7XG5leHBvcnRzLnRvU3ltYm9sID0gdG9TeW1ib2w7XG5leHBvcnRzLmRlZmF1bHRUZW1wbGF0ZSA9IGV4cG9ydHMubGF0ZXhGdW5jdGlvbnMgPSBleHBvcnRzLmxhdGV4T3BlcmF0b3JzID0gZXhwb3J0cy5sYXRleFN5bWJvbHMgPSB2b2lkIDA7XG5cbnZhciBfZXNjYXBlTGF0ZXggPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJlc2NhcGUtbGF0ZXhcIikpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuL29iamVjdFwiKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbi8qIGVzbGludCBuby10ZW1wbGF0ZS1jdXJseS1pbi1zdHJpbmc6IFwib2ZmXCIgKi9cbnZhciBsYXRleFN5bWJvbHMgPSB7XG4gIC8vIEdSRUVLIExFVFRFUlNcbiAgQWxwaGE6ICdBJyxcbiAgYWxwaGE6ICdcXFxcYWxwaGEnLFxuICBCZXRhOiAnQicsXG4gIGJldGE6ICdcXFxcYmV0YScsXG4gIEdhbW1hOiAnXFxcXEdhbW1hJyxcbiAgZ2FtbWE6ICdcXFxcZ2FtbWEnLFxuICBEZWx0YTogJ1xcXFxEZWx0YScsXG4gIGRlbHRhOiAnXFxcXGRlbHRhJyxcbiAgRXBzaWxvbjogJ0UnLFxuICBlcHNpbG9uOiAnXFxcXGVwc2lsb24nLFxuICB2YXJlcHNpbG9uOiAnXFxcXHZhcmVwc2lsb24nLFxuICBaZXRhOiAnWicsXG4gIHpldGE6ICdcXFxcemV0YScsXG4gIEV0YTogJ0gnLFxuICBldGE6ICdcXFxcZXRhJyxcbiAgVGhldGE6ICdcXFxcVGhldGEnLFxuICB0aGV0YTogJ1xcXFx0aGV0YScsXG4gIHZhcnRoZXRhOiAnXFxcXHZhcnRoZXRhJyxcbiAgSW90YTogJ0knLFxuICBpb3RhOiAnXFxcXGlvdGEnLFxuICBLYXBwYTogJ0snLFxuICBrYXBwYTogJ1xcXFxrYXBwYScsXG4gIHZhcmthcHBhOiAnXFxcXHZhcmthcHBhJyxcbiAgTGFtYmRhOiAnXFxcXExhbWJkYScsXG4gIGxhbWJkYTogJ1xcXFxsYW1iZGEnLFxuICBNdTogJ00nLFxuICBtdTogJ1xcXFxtdScsXG4gIE51OiAnTicsXG4gIG51OiAnXFxcXG51JyxcbiAgWGk6ICdcXFxcWGknLFxuICB4aTogJ1xcXFx4aScsXG4gIE9taWNyb246ICdPJyxcbiAgb21pY3JvbjogJ28nLFxuICBQaTogJ1xcXFxQaScsXG4gIHBpOiAnXFxcXHBpJyxcbiAgdmFycGk6ICdcXFxcdmFycGknLFxuICBSaG86ICdQJyxcbiAgcmhvOiAnXFxcXHJobycsXG4gIHZhcnJobzogJ1xcXFx2YXJyaG8nLFxuICBTaWdtYTogJ1xcXFxTaWdtYScsXG4gIHNpZ21hOiAnXFxcXHNpZ21hJyxcbiAgdmFyc2lnbWE6ICdcXFxcdmFyc2lnbWEnLFxuICBUYXU6ICdUJyxcbiAgdGF1OiAnXFxcXHRhdScsXG4gIFVwc2lsb246IFwiXFxcXFVwc2lsb25cIixcbiAgdXBzaWxvbjogXCJcXFxcdXBzaWxvblwiLFxuICBQaGk6ICdcXFxcUGhpJyxcbiAgcGhpOiAnXFxcXHBoaScsXG4gIHZhcnBoaTogJ1xcXFx2YXJwaGknLFxuICBDaGk6ICdYJyxcbiAgY2hpOiAnXFxcXGNoaScsXG4gIFBzaTogJ1xcXFxQc2knLFxuICBwc2k6ICdcXFxccHNpJyxcbiAgT21lZ2E6ICdcXFxcT21lZ2EnLFxuICBvbWVnYTogJ1xcXFxvbWVnYScsXG4gIC8vIGxvZ2ljXG4gIFwidHJ1ZVwiOiAnXFxcXG1hdGhybXtUcnVlfScsXG4gIFwiZmFsc2VcIjogJ1xcXFxtYXRocm17RmFsc2V9JyxcbiAgLy8gb3RoZXJcbiAgaTogJ2knLFxuICAvLyBUT0RPIHVzZSBcXGkgPz9cbiAgaW5mOiAnXFxcXGluZnR5JyxcbiAgSW5mOiAnXFxcXGluZnR5JyxcbiAgaW5maW5pdHk6ICdcXFxcaW5mdHknLFxuICBJbmZpbml0eTogJ1xcXFxpbmZ0eScsXG4gIG9vOiAnXFxcXGluZnR5JyxcbiAgbGltOiAnXFxcXGxpbScsXG4gIHVuZGVmaW5lZDogJ1xcXFxtYXRoYmZ7P30nXG59O1xuZXhwb3J0cy5sYXRleFN5bWJvbHMgPSBsYXRleFN5bWJvbHM7XG52YXIgbGF0ZXhPcGVyYXRvcnMgPSB7XG4gIHRyYW5zcG9zZTogJ15cXFxcdG9wJyxcbiAgY3RyYW5zcG9zZTogJ15IJyxcbiAgZmFjdG9yaWFsOiAnIScsXG4gIHBvdzogJ14nLFxuICBkb3RQb3c6ICcuXlxcXFx3ZWRnZScsXG4gIC8vIFRPRE8gZmluZCBpZGVhbCBzb2x1dGlvblxuICB1bmFyeVBsdXM6ICcrJyxcbiAgdW5hcnlNaW51czogJy0nLFxuICBiaXROb3Q6ICdcXFxcficsXG4gIC8vIFRPRE8gZmluZCBpZGVhbCBzb2x1dGlvblxuICBub3Q6ICdcXFxcbmVnJyxcbiAgbXVsdGlwbHk6ICdcXFxcY2RvdCcsXG4gIGRpdmlkZTogJ1xcXFxmcmFjJyxcbiAgLy8gVE9ETyBob3cgdG8gaGFuZGxlIHRoYXQgcHJvcGVybHk/XG4gIGRvdE11bHRpcGx5OiAnLlxcXFxjZG90JyxcbiAgLy8gVE9ETyBmaW5kIGlkZWFsIHNvbHV0aW9uXG4gIGRvdERpdmlkZTogJy46JyxcbiAgLy8gVE9ETyBmaW5kIGlkZWFsIHNvbHV0aW9uXG4gIG1vZDogJ1xcXFxtb2QnLFxuICBhZGQ6ICcrJyxcbiAgc3VidHJhY3Q6ICctJyxcbiAgdG86ICdcXFxccmlnaHRhcnJvdycsXG4gIGxlZnRTaGlmdDogJzw8JyxcbiAgcmlnaHRBcml0aFNoaWZ0OiAnPj4nLFxuICByaWdodExvZ1NoaWZ0OiAnPj4+JyxcbiAgZXF1YWw6ICc9JyxcbiAgdW5lcXVhbDogJ1xcXFxuZXEnLFxuICBzbWFsbGVyOiAnPCcsXG4gIGxhcmdlcjogJz4nLFxuICBzbWFsbGVyRXE6ICdcXFxcbGVxJyxcbiAgbGFyZ2VyRXE6ICdcXFxcZ2VxJyxcbiAgYml0QW5kOiAnXFxcXCYnLFxuICBiaXRYb3I6IFwiXFxcXHVuZGVybGluZXt8fVwiLFxuICBiaXRPcjogJ3wnLFxuICBhbmQ6ICdcXFxcd2VkZ2UnLFxuICB4b3I6ICdcXFxcdmVlYmFyJyxcbiAgb3I6ICdcXFxcdmVlJ1xufTtcbmV4cG9ydHMubGF0ZXhPcGVyYXRvcnMgPSBsYXRleE9wZXJhdG9ycztcbnZhciBsYXRleEZ1bmN0aW9ucyA9IHtcbiAgLy8gYXJpdGhtZXRpY1xuICBhYnM6IHtcbiAgICAxOiAnXFxcXGxlZnR8JHthcmdzWzBdfVxcXFxyaWdodHwnXG4gIH0sXG4gIGFkZDoge1xuICAgIDI6IFwiXFxcXGxlZnQoJHthcmdzWzBdfVwiLmNvbmNhdChsYXRleE9wZXJhdG9ycy5hZGQsIFwiJHthcmdzWzFdfVxcXFxyaWdodClcIilcbiAgfSxcbiAgY2JydDoge1xuICAgIDE6ICdcXFxcc3FydFszXXske2FyZ3NbMF19fSdcbiAgfSxcbiAgY2VpbDoge1xuICAgIDE6ICdcXFxcbGVmdFxcXFxsY2VpbCR7YXJnc1swXX1cXFxccmlnaHRcXFxccmNlaWwnXG4gIH0sXG4gIGN1YmU6IHtcbiAgICAxOiAnXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCleMydcbiAgfSxcbiAgZGl2aWRlOiB7XG4gICAgMjogJ1xcXFxmcmFjeyR7YXJnc1swXX19eyR7YXJnc1sxXX19J1xuICB9LFxuICBkb3REaXZpZGU6IHtcbiAgICAyOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMuZG90RGl2aWRlLCBcIiR7YXJnc1sxXX1cXFxccmlnaHQpXCIpXG4gIH0sXG4gIGRvdE11bHRpcGx5OiB7XG4gICAgMjogXCJcXFxcbGVmdCgke2FyZ3NbMF19XCIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLmRvdE11bHRpcGx5LCBcIiR7YXJnc1sxXX1cXFxccmlnaHQpXCIpXG4gIH0sXG4gIGRvdFBvdzoge1xuICAgIDI6IFwiXFxcXGxlZnQoJHthcmdzWzBdfVwiLmNvbmNhdChsYXRleE9wZXJhdG9ycy5kb3RQb3csIFwiJHthcmdzWzFdfVxcXFxyaWdodClcIilcbiAgfSxcbiAgZXhwOiB7XG4gICAgMTogJ1xcXFxleHBcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgZXhwbTE6IFwiXFxcXGxlZnQoZVwiLmNvbmNhdChsYXRleE9wZXJhdG9ycy5wb3csIFwieyR7YXJnc1swXX19LTFcXFxccmlnaHQpXCIpLFxuICBmaXg6IHtcbiAgICAxOiAnXFxcXG1hdGhybXske25hbWV9fVxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBmbG9vcjoge1xuICAgIDE6ICdcXFxcbGVmdFxcXFxsZmxvb3Ike2FyZ3NbMF19XFxcXHJpZ2h0XFxcXHJmbG9vcidcbiAgfSxcbiAgZ2NkOiAnXFxcXGdjZFxcXFxsZWZ0KCR7YXJnc31cXFxccmlnaHQpJyxcbiAgaHlwb3Q6ICdcXFxcaHlwb3RcXFxcbGVmdCgke2FyZ3N9XFxcXHJpZ2h0KScsXG4gIGxvZzoge1xuICAgIDE6ICdcXFxcbG5cXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KScsXG4gICAgMjogJ1xcXFxsb2dfeyR7YXJnc1sxXX19XFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIGxvZzEwOiB7XG4gICAgMTogJ1xcXFxsb2dfezEwfVxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBsb2cxcDoge1xuICAgIDE6ICdcXFxcbG5cXFxcbGVmdCgke2FyZ3NbMF19KzFcXFxccmlnaHQpJyxcbiAgICAyOiAnXFxcXGxvZ197JHthcmdzWzFdfX1cXFxcbGVmdCgke2FyZ3NbMF19KzFcXFxccmlnaHQpJ1xuICB9LFxuICBsb2cyOiAnXFxcXGxvZ197Mn1cXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KScsXG4gIG1vZDoge1xuICAgIDI6IFwiXFxcXGxlZnQoJHthcmdzWzBdfVwiLmNvbmNhdChsYXRleE9wZXJhdG9ycy5tb2QsIFwiJHthcmdzWzFdfVxcXFxyaWdodClcIilcbiAgfSxcbiAgbXVsdGlwbHk6IHtcbiAgICAyOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMubXVsdGlwbHksIFwiJHthcmdzWzFdfVxcXFxyaWdodClcIilcbiAgfSxcbiAgbm9ybToge1xuICAgIDE6ICdcXFxcbGVmdFxcXFx8JHthcmdzWzBdfVxcXFxyaWdodFxcXFx8JyxcbiAgICAyOiB1bmRlZmluZWQgLy8gdXNlIGRlZmF1bHQgdGVtcGxhdGVcblxuICB9LFxuICBudGhSb290OiB7XG4gICAgMjogJ1xcXFxzcXJ0WyR7YXJnc1sxXX1deyR7YXJnc1swXX19J1xuICB9LFxuICBudGhSb290czoge1xuICAgIDI6ICdcXFxce3kgOiAkeV57YXJnc1sxXX0gPSB7JHthcmdzWzBdfX1cXFxcfSdcbiAgfSxcbiAgcG93OiB7XG4gICAgMjogXCJcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KVwiLmNvbmNhdChsYXRleE9wZXJhdG9ycy5wb3csIFwieyR7YXJnc1sxXX19XCIpXG4gIH0sXG4gIHJvdW5kOiB7XG4gICAgMTogJ1xcXFxsZWZ0XFxcXGxmbG9vciR7YXJnc1swXX1cXFxccmlnaHRcXFxccmNlaWwnLFxuICAgIDI6IHVuZGVmaW5lZCAvLyB1c2UgZGVmYXVsdCB0ZW1wbGF0ZVxuXG4gIH0sXG4gIHNpZ246IHtcbiAgICAxOiAnXFxcXG1hdGhybXske25hbWV9fVxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBzcXJ0OiB7XG4gICAgMTogJ1xcXFxzcXJ0eyR7YXJnc1swXX19J1xuICB9LFxuICBzcXVhcmU6IHtcbiAgICAxOiAnXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCleMidcbiAgfSxcbiAgc3VidHJhY3Q6IHtcbiAgICAyOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMuc3VidHJhY3QsIFwiJHthcmdzWzFdfVxcXFxyaWdodClcIilcbiAgfSxcbiAgdW5hcnlNaW51czoge1xuICAgIDE6IFwiXCIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLnVuYXJ5TWludXMsIFwiXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodClcIilcbiAgfSxcbiAgdW5hcnlQbHVzOiB7XG4gICAgMTogXCJcIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMudW5hcnlQbHVzLCBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpXCIpXG4gIH0sXG4gIC8vIGJpdHdpc2VcbiAgYml0QW5kOiB7XG4gICAgMjogXCJcXFxcbGVmdCgke2FyZ3NbMF19XCIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLmJpdEFuZCwgXCIke2FyZ3NbMV19XFxcXHJpZ2h0KVwiKVxuICB9LFxuICBiaXROb3Q6IHtcbiAgICAxOiBsYXRleE9wZXJhdG9ycy5iaXROb3QgKyAnXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIGJpdE9yOiB7XG4gICAgMjogXCJcXFxcbGVmdCgke2FyZ3NbMF19XCIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLmJpdE9yLCBcIiR7YXJnc1sxXX1cXFxccmlnaHQpXCIpXG4gIH0sXG4gIGJpdFhvcjoge1xuICAgIDI6IFwiXFxcXGxlZnQoJHthcmdzWzBdfVwiLmNvbmNhdChsYXRleE9wZXJhdG9ycy5iaXRYb3IsIFwiJHthcmdzWzFdfVxcXFxyaWdodClcIilcbiAgfSxcbiAgbGVmdFNoaWZ0OiB7XG4gICAgMjogXCJcXFxcbGVmdCgke2FyZ3NbMF19XCIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLmxlZnRTaGlmdCwgXCIke2FyZ3NbMV19XFxcXHJpZ2h0KVwiKVxuICB9LFxuICByaWdodEFyaXRoU2hpZnQ6IHtcbiAgICAyOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMucmlnaHRBcml0aFNoaWZ0LCBcIiR7YXJnc1sxXX1cXFxccmlnaHQpXCIpXG4gIH0sXG4gIHJpZ2h0TG9nU2hpZnQ6IHtcbiAgICAyOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMucmlnaHRMb2dTaGlmdCwgXCIke2FyZ3NbMV19XFxcXHJpZ2h0KVwiKVxuICB9LFxuICAvLyBjb21iaW5hdG9yaWNzXG4gIGJlbGxOdW1iZXJzOiB7XG4gICAgMTogJ1xcXFxtYXRocm17Qn1feyR7YXJnc1swXX19J1xuICB9LFxuICBjYXRhbGFuOiB7XG4gICAgMTogJ1xcXFxtYXRocm17Q31feyR7YXJnc1swXX19J1xuICB9LFxuICBzdGlybGluZ1MyOiB7XG4gICAgMjogJ1xcXFxtYXRocm17U31cXFxcbGVmdCgke2FyZ3N9XFxcXHJpZ2h0KSdcbiAgfSxcbiAgLy8gY29tcGxleFxuICBhcmc6IHtcbiAgICAxOiAnXFxcXGFyZ1xcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBjb25qOiB7XG4gICAgMTogJ1xcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpXionXG4gIH0sXG4gIGltOiB7XG4gICAgMTogJ1xcXFxJbVxcXFxsZWZ0XFxcXGxicmFjZSR7YXJnc1swXX1cXFxccmlnaHRcXFxccmJyYWNlJ1xuICB9LFxuICByZToge1xuICAgIDE6ICdcXFxcUmVcXFxcbGVmdFxcXFxsYnJhY2Uke2FyZ3NbMF19XFxcXHJpZ2h0XFxcXHJicmFjZSdcbiAgfSxcbiAgLy8gbG9naWNhbFxuICBhbmQ6IHtcbiAgICAyOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMuYW5kLCBcIiR7YXJnc1sxXX1cXFxccmlnaHQpXCIpXG4gIH0sXG4gIG5vdDoge1xuICAgIDE6IGxhdGV4T3BlcmF0b3JzLm5vdCArICdcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgb3I6IHtcbiAgICAyOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMub3IsIFwiJHthcmdzWzFdfVxcXFxyaWdodClcIilcbiAgfSxcbiAgeG9yOiB7XG4gICAgMjogXCJcXFxcbGVmdCgke2FyZ3NbMF19XCIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLnhvciwgXCIke2FyZ3NbMV19XFxcXHJpZ2h0KVwiKVxuICB9LFxuICAvLyBtYXRyaXhcbiAgY3Jvc3M6IHtcbiAgICAyOiAnXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodClcXFxcdGltZXNcXFxcbGVmdCgke2FyZ3NbMV19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgY3RyYW5zcG9zZToge1xuICAgIDE6IFwiXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodClcIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMuY3RyYW5zcG9zZSlcbiAgfSxcbiAgZGV0OiB7XG4gICAgMTogJ1xcXFxkZXRcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgZG90OiB7XG4gICAgMjogJ1xcXFxsZWZ0KCR7YXJnc1swXX1cXFxcY2RvdCR7YXJnc1sxXX1cXFxccmlnaHQpJ1xuICB9LFxuICBleHBtOiB7XG4gICAgMTogJ1xcXFxleHBcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgaW52OiB7XG4gICAgMTogJ1xcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpXnstMX0nXG4gIH0sXG4gIHNxcnRtOiB7XG4gICAgMTogXCJ7JHthcmdzWzBdfX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMucG93LCBcIntcXFxcZnJhY3sxfXsyfX1cIilcbiAgfSxcbiAgdHJhY2U6IHtcbiAgICAxOiAnXFxcXG1hdGhybXt0cn1cXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgdHJhbnNwb3NlOiB7XG4gICAgMTogXCJcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KVwiLmNvbmNhdChsYXRleE9wZXJhdG9ycy50cmFuc3Bvc2UpXG4gIH0sXG4gIC8vIHByb2JhYmlsaXR5XG4gIGNvbWJpbmF0aW9uczoge1xuICAgIDI6ICdcXFxcYmlub217JHthcmdzWzBdfX17JHthcmdzWzFdfX0nXG4gIH0sXG4gIGNvbWJpbmF0aW9uc1dpdGhSZXA6IHtcbiAgICAyOiAnXFxcXGxlZnQoXFxcXCFcXFxcIXtcXFxcYmlub217JHthcmdzWzBdfX17JHthcmdzWzFdfX19XFxcXCFcXFxcIVxcXFxyaWdodCknXG4gIH0sXG4gIGZhY3RvcmlhbDoge1xuICAgIDE6IFwiXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodClcIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMuZmFjdG9yaWFsKVxuICB9LFxuICBnYW1tYToge1xuICAgIDE6ICdcXFxcR2FtbWFcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgLy8gcmVsYXRpb25hbFxuICBlcXVhbDoge1xuICAgIDI6IFwiXFxcXGxlZnQoJHthcmdzWzBdfVwiLmNvbmNhdChsYXRleE9wZXJhdG9ycy5lcXVhbCwgXCIke2FyZ3NbMV19XFxcXHJpZ2h0KVwiKVxuICB9LFxuICBsYXJnZXI6IHtcbiAgICAyOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMubGFyZ2VyLCBcIiR7YXJnc1sxXX1cXFxccmlnaHQpXCIpXG4gIH0sXG4gIGxhcmdlckVxOiB7XG4gICAgMjogXCJcXFxcbGVmdCgke2FyZ3NbMF19XCIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLmxhcmdlckVxLCBcIiR7YXJnc1sxXX1cXFxccmlnaHQpXCIpXG4gIH0sXG4gIHNtYWxsZXI6IHtcbiAgICAyOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMuc21hbGxlciwgXCIke2FyZ3NbMV19XFxcXHJpZ2h0KVwiKVxuICB9LFxuICBzbWFsbGVyRXE6IHtcbiAgICAyOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMuc21hbGxlckVxLCBcIiR7YXJnc1sxXX1cXFxccmlnaHQpXCIpXG4gIH0sXG4gIHVuZXF1YWw6IHtcbiAgICAyOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMudW5lcXVhbCwgXCIke2FyZ3NbMV19XFxcXHJpZ2h0KVwiKVxuICB9LFxuICAvLyBzcGVjaWFsXG4gIGVyZjoge1xuICAgIDE6ICdlcmZcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgLy8gc3RhdGlzdGljc1xuICBtYXg6ICdcXFxcbWF4XFxcXGxlZnQoJHthcmdzfVxcXFxyaWdodCknLFxuICBtaW46ICdcXFxcbWluXFxcXGxlZnQoJHthcmdzfVxcXFxyaWdodCknLFxuICB2YXJpYW5jZTogJ1xcXFxtYXRocm17VmFyfVxcXFxsZWZ0KCR7YXJnc31cXFxccmlnaHQpJyxcbiAgLy8gdHJpZ29ub21ldHJ5XG4gIGFjb3M6IHtcbiAgICAxOiAnXFxcXGNvc157LTF9XFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIGFjb3NoOiB7XG4gICAgMTogJ1xcXFxjb3NoXnstMX1cXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgYWNvdDoge1xuICAgIDE6ICdcXFxcY290XnstMX1cXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgYWNvdGg6IHtcbiAgICAxOiAnXFxcXGNvdGheey0xfVxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBhY3NjOiB7XG4gICAgMTogJ1xcXFxjc2Neey0xfVxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBhY3NjaDoge1xuICAgIDE6ICdcXFxcbWF0aHJte2NzY2h9XnstMX1cXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgYXNlYzoge1xuICAgIDE6ICdcXFxcc2VjXnstMX1cXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgYXNlY2g6IHtcbiAgICAxOiAnXFxcXG1hdGhybXtzZWNofV57LTF9XFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIGFzaW46IHtcbiAgICAxOiAnXFxcXHNpbl57LTF9XFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIGFzaW5oOiB7XG4gICAgMTogJ1xcXFxzaW5oXnstMX1cXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgYXRhbjoge1xuICAgIDE6ICdcXFxcdGFuXnstMX1cXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgYXRhbjI6IHtcbiAgICAyOiAnXFxcXG1hdGhybXthdGFuMn1cXFxcbGVmdCgke2FyZ3N9XFxcXHJpZ2h0KSdcbiAgfSxcbiAgYXRhbmg6IHtcbiAgICAxOiAnXFxcXHRhbmheey0xfVxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBjb3M6IHtcbiAgICAxOiAnXFxcXGNvc1xcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBjb3NoOiB7XG4gICAgMTogJ1xcXFxjb3NoXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIGNvdDoge1xuICAgIDE6ICdcXFxcY290XFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIGNvdGg6IHtcbiAgICAxOiAnXFxcXGNvdGhcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgY3NjOiB7XG4gICAgMTogJ1xcXFxjc2NcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgY3NjaDoge1xuICAgIDE6ICdcXFxcbWF0aHJte2NzY2h9XFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIHNlYzoge1xuICAgIDE6ICdcXFxcc2VjXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIHNlY2g6IHtcbiAgICAxOiAnXFxcXG1hdGhybXtzZWNofVxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBzaW46IHtcbiAgICAxOiAnXFxcXHNpblxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBzaW5oOiB7XG4gICAgMTogJ1xcXFxzaW5oXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIHRhbjoge1xuICAgIDE6ICdcXFxcdGFuXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIHRhbmg6IHtcbiAgICAxOiAnXFxcXHRhbmhcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgLy8gdW5pdFxuICB0bzoge1xuICAgIDI6IFwiXFxcXGxlZnQoJHthcmdzWzBdfVwiLmNvbmNhdChsYXRleE9wZXJhdG9ycy50bywgXCIke2FyZ3NbMV19XFxcXHJpZ2h0KVwiKVxuICB9LFxuICAvLyB1dGlsc1xuICBudW1lcmljOiBmdW5jdGlvbiBudW1lcmljKG5vZGUsIG9wdGlvbnMpIHtcbiAgICAvLyBOb3Qgc3VyZSBpZiB0aGlzIGlzIHN0cmljdGx5IHJpZ2h0IGJ1dCBzaG91bGQgd29yayBjb3JyZWN0bHkgZm9yIHRoZSB2YXN0IG1ham9yaXR5IG9mIHVzZSBjYXNlcy5cbiAgICByZXR1cm4gbm9kZS5hcmdzWzBdLnRvVGV4KCk7XG4gIH0sXG4gIC8vIHR5cGVcbiAgbnVtYmVyOiB7XG4gICAgMDogJzAnLFxuICAgIDE6ICdcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KScsXG4gICAgMjogJ1xcXFxsZWZ0KFxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJHthcmdzWzFdfVxcXFxyaWdodCknXG4gIH0sXG4gIHN0cmluZzoge1xuICAgIDA6ICdcXFxcbWF0aHR0e1wiXCJ9JyxcbiAgICAxOiAnXFxcXG1hdGhybXtzdHJpbmd9XFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIGJpZ251bWJlcjoge1xuICAgIDA6ICcwJyxcbiAgICAxOiAnXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIGNvbXBsZXg6IHtcbiAgICAwOiAnMCcsXG4gICAgMTogJ1xcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJyxcbiAgICAyOiBcIlxcXFxsZWZ0KFxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpK1wiLmNvbmNhdChsYXRleFN5bWJvbHMuaSwgXCJcXFxcY2RvdFxcXFxsZWZ0KCR7YXJnc1sxXX1cXFxccmlnaHQpXFxcXHJpZ2h0KVwiKVxuICB9LFxuICBtYXRyaXg6IHtcbiAgICAwOiAnXFxcXGJlZ2lue2JtYXRyaXh9XFxcXGVuZHtibWF0cml4fScsXG4gICAgMTogJ1xcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJyxcbiAgICAyOiAnXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIHNwYXJzZToge1xuICAgIDA6ICdcXFxcYmVnaW57YnNwYXJzZX1cXFxcZW5ke2JzcGFyc2V9JyxcbiAgICAxOiAnXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIHVuaXQ6IHtcbiAgICAxOiAnXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknLFxuICAgIDI6ICdcXFxcbGVmdChcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSR7YXJnc1sxXX1cXFxccmlnaHQpJ1xuICB9XG59O1xuZXhwb3J0cy5sYXRleEZ1bmN0aW9ucyA9IGxhdGV4RnVuY3Rpb25zO1xudmFyIGRlZmF1bHRUZW1wbGF0ZSA9ICdcXFxcbWF0aHJteyR7bmFtZX19XFxcXGxlZnQoJHthcmdzfVxcXFxyaWdodCknO1xuZXhwb3J0cy5kZWZhdWx0VGVtcGxhdGUgPSBkZWZhdWx0VGVtcGxhdGU7XG52YXIgbGF0ZXhVbml0cyA9IHtcbiAgZGVnOiAnXlxcXFxjaXJjJ1xufTtcblxuZnVuY3Rpb24gZXNjYXBlTGF0ZXgoc3RyaW5nKSB7XG4gIHJldHVybiAoMCwgX2VzY2FwZUxhdGV4W1wiZGVmYXVsdFwiXSkoc3RyaW5nLCB7XG4gICAgcHJlc2VydmVGb3JtYXR0aW5nOiB0cnVlXG4gIH0pO1xufSAvLyBAcGFyYW0ge3N0cmluZ30gbmFtZVxuLy8gQHBhcmFtIHtib29sZWFufSBpc1VuaXRcblxuXG5mdW5jdGlvbiB0b1N5bWJvbChuYW1lLCBpc1VuaXQpIHtcbiAgaXNVbml0ID0gdHlwZW9mIGlzVW5pdCA9PT0gJ3VuZGVmaW5lZCcgPyBmYWxzZSA6IGlzVW5pdDtcblxuICBpZiAoaXNVbml0KSB7XG4gICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShsYXRleFVuaXRzLCBuYW1lKSkge1xuICAgICAgcmV0dXJuIGxhdGV4VW5pdHNbbmFtZV07XG4gICAgfVxuXG4gICAgcmV0dXJuICdcXFxcbWF0aHJteycgKyBlc2NhcGVMYXRleChuYW1lKSArICd9JztcbiAgfVxuXG4gIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkobGF0ZXhTeW1ib2xzLCBuYW1lKSkge1xuICAgIHJldHVybiBsYXRleFN5bWJvbHNbbmFtZV07XG4gIH1cblxuICByZXR1cm4gZXNjYXBlTGF0ZXgobmFtZSk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLndhcm5PbmNlID0gdm9pZCAwO1xuXG4vKipcbiAqIExvZyBhIGNvbnNvbGUud2FybiBtZXNzYWdlIG9ubHkgb25jZVxuICovXG52YXIgd2Fybk9uY2UgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBtZXNzYWdlcyA9IHt9O1xuICByZXR1cm4gZnVuY3Rpb24gd2Fybk9uY2UoKSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHZhciBtZXNzYWdlID0gYXJncy5qb2luKCcsICcpO1xuXG4gICAgaWYgKCFtZXNzYWdlc1ttZXNzYWdlXSkge1xuICAgICAgdmFyIF9jb25zb2xlO1xuXG4gICAgICBtZXNzYWdlc1ttZXNzYWdlXSA9IHRydWU7XG5cbiAgICAgIChfY29uc29sZSA9IGNvbnNvbGUpLndhcm4uYXBwbHkoX2NvbnNvbGUsIFsnV2FybmluZzonXS5jb25jYXQoYXJncykpO1xuICAgIH1cbiAgfTtcbn0oKTtcblxuZXhwb3J0cy53YXJuT25jZSA9IHdhcm5PbmNlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5ub0JpZ251bWJlciA9IG5vQmlnbnVtYmVyO1xuZXhwb3J0cy5ub0ZyYWN0aW9uID0gbm9GcmFjdGlvbjtcbmV4cG9ydHMubm9NYXRyaXggPSBub01hdHJpeDtcbmV4cG9ydHMubm9JbmRleCA9IG5vSW5kZXg7XG5leHBvcnRzLm5vU3Vic2V0ID0gbm9TdWJzZXQ7XG5cbmZ1bmN0aW9uIG5vQmlnbnVtYmVyKCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ05vIFwiYmlnbnVtYmVyXCIgaW1wbGVtZW50YXRpb24gYXZhaWxhYmxlJyk7XG59XG5cbmZ1bmN0aW9uIG5vRnJhY3Rpb24oKSB7XG4gIHRocm93IG5ldyBFcnJvcignTm8gXCJmcmFjdGlvblwiIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZScpO1xufVxuXG5mdW5jdGlvbiBub01hdHJpeCgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdObyBcIm1hdHJpeFwiIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZScpO1xufVxuXG5mdW5jdGlvbiBub0luZGV4KCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ05vIFwiaW5kZXhcIiBpbXBsZW1lbnRhdGlvbiBhdmFpbGFibGUnKTtcbn1cblxuZnVuY3Rpb24gbm9TdWJzZXQoKSB7XG4gIHRocm93IG5ldyBFcnJvcignTm8gXCJtYXRyaXhcIiBpbXBsZW1lbnRhdGlvbiBhdmFpbGFibGUnKTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaXNJbnRlZ2VyID0gaXNJbnRlZ2VyO1xuZXhwb3J0cy5mb3JtYXQgPSBmb3JtYXQ7XG5leHBvcnRzLnNwbGl0TnVtYmVyID0gc3BsaXROdW1iZXI7XG5leHBvcnRzLnRvRW5naW5lZXJpbmcgPSB0b0VuZ2luZWVyaW5nO1xuZXhwb3J0cy50b0ZpeGVkID0gdG9GaXhlZDtcbmV4cG9ydHMudG9FeHBvbmVudGlhbCA9IHRvRXhwb25lbnRpYWw7XG5leHBvcnRzLnRvUHJlY2lzaW9uID0gdG9QcmVjaXNpb247XG5leHBvcnRzLnJvdW5kRGlnaXRzID0gcm91bmREaWdpdHM7XG5leHBvcnRzLmRpZ2l0cyA9IGRpZ2l0cztcbmV4cG9ydHMubmVhcmx5RXF1YWwgPSBuZWFybHlFcXVhbDtcbmV4cG9ydHMudGFuaCA9IGV4cG9ydHMuc2luaCA9IGV4cG9ydHMuY29zaCA9IGV4cG9ydHMuYXRhbmggPSBleHBvcnRzLmFzaW5oID0gZXhwb3J0cy5hY29zaCA9IGV4cG9ydHMuREJMX0VQU0lMT04gPSBleHBvcnRzLmV4cG0xID0gZXhwb3J0cy5jYnJ0ID0gZXhwb3J0cy5sb2cxcCA9IGV4cG9ydHMubG9nMTAgPSBleHBvcnRzLmxvZzIgPSBleHBvcnRzLnNpZ24gPSB2b2lkIDA7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4vb2JqZWN0XCIpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4vaXNcIik7XG5cbi8qKlxuICogQHR5cGVkZWYge3tzaWduOiAnKycgfCAnLScgfCAnJywgY29lZmZpY2llbnRzOiBudW1iZXJbXSwgZXhwb25lbnQ6IG51bWJlcn19IFNwbGl0VmFsdWVcbiAqL1xuXG4vKipcbiAqIENoZWNrIGlmIGEgbnVtYmVyIGlzIGludGVnZXJcbiAqIEBwYXJhbSB7bnVtYmVyIHwgYm9vbGVhbn0gdmFsdWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGlzSW50ZWdlclxuICovXG5mdW5jdGlvbiBpc0ludGVnZXIodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gaXNGaW5pdGUodmFsdWUpID8gdmFsdWUgPT09IE1hdGgucm91bmQodmFsdWUpIDogZmFsc2U7IC8vIE5vdGU6IHdlIHVzZSA9PSwgbm90ID09PSwgYXMgd2UgY2FuIGhhdmUgQm9vbGVhbnMgYXMgd2VsbFxufVxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIHNpZ24gb2YgYSBudW1iZXJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5cblxudmFyIHNpZ24gPSAvKiAjX19QVVJFX18gKi9NYXRoLnNpZ24gfHwgZnVuY3Rpb24gKHgpIHtcbiAgaWYgKHggPiAwKSB7XG4gICAgcmV0dXJuIDE7XG4gIH0gZWxzZSBpZiAoeCA8IDApIHtcbiAgICByZXR1cm4gLTE7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn07XG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgYmFzZS0yIGxvZ2FyaXRobSBvZiBhIG51bWJlclxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cblxuXG5leHBvcnRzLnNpZ24gPSBzaWduO1xuXG52YXIgbG9nMiA9IC8qICNfX1BVUkVfXyAqL01hdGgubG9nMiB8fCBmdW5jdGlvbiBsb2cyKHgpIHtcbiAgcmV0dXJuIE1hdGgubG9nKHgpIC8gTWF0aC5MTjI7XG59O1xuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIGJhc2UtMTAgbG9nYXJpdGhtIG9mIGEgbnVtYmVyXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuXG5cbmV4cG9ydHMubG9nMiA9IGxvZzI7XG5cbnZhciBsb2cxMCA9IC8qICNfX1BVUkVfXyAqL01hdGgubG9nMTAgfHwgZnVuY3Rpb24gbG9nMTAoeCkge1xuICByZXR1cm4gTWF0aC5sb2coeCkgLyBNYXRoLkxOMTA7XG59O1xuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mIGEgbnVtYmVyICsgMVxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cblxuXG5leHBvcnRzLmxvZzEwID0gbG9nMTA7XG5cbnZhciBsb2cxcCA9IC8qICNfX1BVUkVfXyAqL01hdGgubG9nMXAgfHwgZnVuY3Rpb24gKHgpIHtcbiAgcmV0dXJuIE1hdGgubG9nKHggKyAxKTtcbn07XG4vKipcbiAqIENhbGN1bGF0ZSBjdWJpYyByb290IGZvciBhIG51bWJlclxuICpcbiAqIENvZGUgZnJvbSBlczYtc2hpbS5qczpcbiAqICAgaHR0cHM6Ly9naXRodWIuY29tL3BhdWxtaWxsci9lczYtc2hpbS9ibG9iL21hc3Rlci9lczYtc2hpbS5qcyNMMTU2NC1MMTU3N1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBjdWJpYyByb290IG9mIHhcbiAqL1xuXG5cbmV4cG9ydHMubG9nMXAgPSBsb2cxcDtcblxudmFyIGNicnQgPSAvKiAjX19QVVJFX18gKi9NYXRoLmNicnQgfHwgZnVuY3Rpb24gY2JydCh4KSB7XG4gIGlmICh4ID09PSAwKSB7XG4gICAgcmV0dXJuIHg7XG4gIH1cblxuICB2YXIgbmVnYXRlID0geCA8IDA7XG4gIHZhciByZXN1bHQ7XG5cbiAgaWYgKG5lZ2F0ZSkge1xuICAgIHggPSAteDtcbiAgfVxuXG4gIGlmIChpc0Zpbml0ZSh4KSkge1xuICAgIHJlc3VsdCA9IE1hdGguZXhwKE1hdGgubG9nKHgpIC8gMyk7IC8vIGZyb20gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ3ViZV9yb290I051bWVyaWNhbF9tZXRob2RzXG5cbiAgICByZXN1bHQgPSAoeCAvIChyZXN1bHQgKiByZXN1bHQpICsgMiAqIHJlc3VsdCkgLyAzO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9IHg7XG4gIH1cblxuICByZXR1cm4gbmVnYXRlID8gLXJlc3VsdCA6IHJlc3VsdDtcbn07XG4vKipcbiAqIENhbGN1bGF0ZXMgZXhwb25lbnRpYXRpb24gbWludXMgMVxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEByZXR1cm4ge251bWJlcn0gcmVzXG4gKi9cblxuXG5leHBvcnRzLmNicnQgPSBjYnJ0O1xuXG52YXIgZXhwbTEgPSAvKiAjX19QVVJFX18gKi9NYXRoLmV4cG0xIHx8IGZ1bmN0aW9uIGV4cG0xKHgpIHtcbiAgcmV0dXJuIHggPj0gMmUtNCB8fCB4IDw9IC0yZS00ID8gTWF0aC5leHAoeCkgLSAxIDogeCArIHggKiB4IC8gMiArIHggKiB4ICogeCAvIDY7XG59O1xuLyoqXG4gKiBDb252ZXJ0IGEgbnVtYmVyIHRvIGEgZm9ybWF0dGVkIHN0cmluZyByZXByZXNlbnRhdGlvbi5cbiAqXG4gKiBTeW50YXg6XG4gKlxuICogICAgZm9ybWF0KHZhbHVlKVxuICogICAgZm9ybWF0KHZhbHVlLCBvcHRpb25zKVxuICogICAgZm9ybWF0KHZhbHVlLCBwcmVjaXNpb24pXG4gKiAgICBmb3JtYXQodmFsdWUsIGZuKVxuICpcbiAqIFdoZXJlOlxuICpcbiAqICAgIHtudW1iZXJ9IHZhbHVlICAgVGhlIHZhbHVlIHRvIGJlIGZvcm1hdHRlZFxuICogICAge09iamVjdH0gb3B0aW9ucyBBbiBvYmplY3Qgd2l0aCBmb3JtYXR0aW5nIG9wdGlvbnMuIEF2YWlsYWJsZSBvcHRpb25zOlxuICogICAgICAgICAgICAgICAgICAgICB7c3RyaW5nfSBub3RhdGlvblxuICogICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIG5vdGF0aW9uLiBDaG9vc2UgZnJvbTpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICdmaXhlZCcgICAgICAgICAgQWx3YXlzIHVzZSByZWd1bGFyIG51bWJlciBub3RhdGlvbi5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUgJzEyMy40MCcgYW5kICcxNDAwMDAwMCdcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICdleHBvbmVudGlhbCcgICAgQWx3YXlzIHVzZSBleHBvbmVudGlhbCBub3RhdGlvbi5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUgJzEuMjM0ZSsyJyBhbmQgJzEuNGUrNydcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICdlbmdpbmVlcmluZycgICAgQWx3YXlzIHVzZSBlbmdpbmVlcmluZyBub3RhdGlvbi5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUgJzEyMy40ZSswJyBhbmQgJzE0LjBlKzYnXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAnYXV0bycgKGRlZmF1bHQpIFJlZ3VsYXIgbnVtYmVyIG5vdGF0aW9uIGZvciBudW1iZXJzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmluZyBhbiBhYnNvbHV0ZSB2YWx1ZSBiZXR3ZWVuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBsb3dlckV4cGAgYW5kIGB1cHBlckV4cGAgYm91bmRzLCBhbmRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcyBleHBvbmVudGlhbCBub3RhdGlvbiBlbHNld2hlcmUuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvd2VyIGJvdW5kIGlzIGluY2x1ZGVkLCB1cHBlciBib3VuZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBleGNsdWRlZC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUgJzEyMy40JyBhbmQgJzEuNGU3Jy5cbiAqICAgICAgICAgICAgICAgICAgICAge251bWJlcn0gcHJlY2lzaW9uICAgQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxNiB0byByb3VuZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZGlnaXRzIG9mIHRoZSBudW1iZXIuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIGNhc2Ugb2Ygbm90YXRpb25zICdleHBvbmVudGlhbCcsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbmdpbmVlcmluZycsIGFuZCAnYXV0bycsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBwcmVjaXNpb25gIGRlZmluZXMgdGhlIHRvdGFsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMgcmV0dXJuZWQuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIGNhc2Ugb2Ygbm90YXRpb24gJ2ZpeGVkJyxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHByZWNpc2lvbmAgZGVmaW5lcyB0aGUgbnVtYmVyIG9mXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25pZmljYW50IGRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHByZWNpc2lvbmAgaXMgdW5kZWZpbmVkIGJ5IGRlZmF1bHQsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCByb3VuZGluZyBhbnkgZGlnaXRzLlxuICogICAgICAgICAgICAgICAgICAgICB7bnVtYmVyfSBsb3dlckV4cCAgICBFeHBvbmVudCBkZXRlcm1pbmluZyB0aGUgbG93ZXIgYm91bmRhcnlcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGZvcm1hdHRpbmcgYSB2YWx1ZSB3aXRoIGFuIGV4cG9uZW50XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gYG5vdGF0aW9uPSdhdXRvYC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdCB2YWx1ZSBpcyBgLTNgLlxuICogICAgICAgICAgICAgICAgICAgICB7bnVtYmVyfSB1cHBlckV4cCAgICBFeHBvbmVudCBkZXRlcm1pbmluZyB0aGUgdXBwZXIgYm91bmRhcnlcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGZvcm1hdHRpbmcgYSB2YWx1ZSB3aXRoIGFuIGV4cG9uZW50XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gYG5vdGF0aW9uPSdhdXRvYC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdCB2YWx1ZSBpcyBgNWAuXG4gKiAgICB7RnVuY3Rpb259IGZuICAgIEEgY3VzdG9tIGZvcm1hdHRpbmcgZnVuY3Rpb24uIENhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoZVxuICogICAgICAgICAgICAgICAgICAgICBidWlsdC1pbiBub3RhdGlvbnMuIEZ1bmN0aW9uIGBmbmAgaXMgY2FsbGVkIHdpdGggYHZhbHVlYCBhc1xuICogICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIgYW5kIG11c3QgcmV0dXJuIGEgc3RyaW5nLiBJcyB1c2VmdWwgZm9yIGV4YW1wbGUgdG9cbiAqICAgICAgICAgICAgICAgICAgICAgZm9ybWF0IGFsbCB2YWx1ZXMgaW5zaWRlIGEgbWF0cml4IGluIGEgcGFydGljdWxhciB3YXkuXG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogICAgZm9ybWF0KDYuNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzYuNCdcbiAqICAgIGZvcm1hdCgxMjQwMDAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICcxLjI0ZTYnXG4gKiAgICBmb3JtYXQoMS8zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAnMC4zMzMzMzMzMzMzMzMzMzMzJ1xuICogICAgZm9ybWF0KDEvMywgMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzAuMzMzJ1xuICogICAgZm9ybWF0KDIxMzg1LCAyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzIxMDAwJ1xuICogICAgZm9ybWF0KDEyLjA3MSwge25vdGF0aW9uOiAnZml4ZWQnfSkgICAgICAgICAgICAgICAgLy8gJzEyJ1xuICogICAgZm9ybWF0KDIuMywgICAge25vdGF0aW9uOiAnZml4ZWQnLCBwcmVjaXNpb246IDJ9KSAgLy8gJzIuMzAnXG4gKiAgICBmb3JtYXQoNTIuOCwgICB7bm90YXRpb246ICdleHBvbmVudGlhbCd9KSAgICAgICAgICAvLyAnNS4yOGUrMSdcbiAqICAgIGZvcm1hdCgxMjM0NTY3OCwge25vdGF0aW9uOiAnZW5naW5lZXJpbmcnfSkgICAgICAgIC8vICcxMi4zNDU2NzhlKzYnXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcGFyYW0ge09iamVjdCB8IEZ1bmN0aW9uIHwgbnVtYmVyfSBbb3B0aW9uc11cbiAqIEByZXR1cm4ge3N0cmluZ30gc3RyIFRoZSBmb3JtYXR0ZWQgdmFsdWVcbiAqL1xuXG5cbmV4cG9ydHMuZXhwbTEgPSBleHBtMTtcblxuZnVuY3Rpb24gZm9ybWF0KHZhbHVlLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIGhhbmRsZSBmb3JtYXQodmFsdWUsIGZuKVxuICAgIHJldHVybiBvcHRpb25zKHZhbHVlKTtcbiAgfSAvLyBoYW5kbGUgc3BlY2lhbCBjYXNlc1xuXG5cbiAgaWYgKHZhbHVlID09PSBJbmZpbml0eSkge1xuICAgIHJldHVybiAnSW5maW5pdHknO1xuICB9IGVsc2UgaWYgKHZhbHVlID09PSAtSW5maW5pdHkpIHtcbiAgICByZXR1cm4gJy1JbmZpbml0eSc7XG4gIH0gZWxzZSBpZiAoaXNOYU4odmFsdWUpKSB7XG4gICAgcmV0dXJuICdOYU4nO1xuICB9IC8vIGRlZmF1bHQgdmFsdWVzIGZvciBvcHRpb25zXG5cblxuICB2YXIgbm90YXRpb24gPSAnYXV0byc7XG4gIHZhciBwcmVjaXNpb247XG5cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICAvLyBkZXRlcm1pbmUgbm90YXRpb24gZnJvbSBvcHRpb25zXG4gICAgaWYgKG9wdGlvbnMubm90YXRpb24pIHtcbiAgICAgIG5vdGF0aW9uID0gb3B0aW9ucy5ub3RhdGlvbjtcbiAgICB9IC8vIGRldGVybWluZSBwcmVjaXNpb24gZnJvbSBvcHRpb25zXG5cblxuICAgIGlmICgoMCwgX2lzLmlzTnVtYmVyKShvcHRpb25zKSkge1xuICAgICAgcHJlY2lzaW9uID0gb3B0aW9ucztcbiAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKG9wdGlvbnMucHJlY2lzaW9uKSkge1xuICAgICAgcHJlY2lzaW9uID0gb3B0aW9ucy5wcmVjaXNpb247XG4gICAgfVxuICB9IC8vIGhhbmRsZSB0aGUgdmFyaW91cyBub3RhdGlvbnNcblxuXG4gIHN3aXRjaCAobm90YXRpb24pIHtcbiAgICBjYXNlICdmaXhlZCc6XG4gICAgICByZXR1cm4gdG9GaXhlZCh2YWx1ZSwgcHJlY2lzaW9uKTtcblxuICAgIGNhc2UgJ2V4cG9uZW50aWFsJzpcbiAgICAgIHJldHVybiB0b0V4cG9uZW50aWFsKHZhbHVlLCBwcmVjaXNpb24pO1xuXG4gICAgY2FzZSAnZW5naW5lZXJpbmcnOlxuICAgICAgcmV0dXJuIHRvRW5naW5lZXJpbmcodmFsdWUsIHByZWNpc2lvbik7XG5cbiAgICBjYXNlICdhdXRvJzpcbiAgICAgIC8vIFRPRE86IGNsZWFuIHVwIHNvbWUgZGF5LiBEZXByZWNhdGVkIHNpbmNlOiAyMDE4LTAxLTI0XG4gICAgICAvLyBAZGVwcmVjYXRlZCB1cHBlciBhbmQgbG93ZXIgYXJlIHJlcGxhY2VkIHdpdGggdXBwZXJFeHAgYW5kIGxvd2VyRXhwIHNpbmNlIHY0LjAuMFxuICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5leHBvbmVudGlhbCAmJiAob3B0aW9ucy5leHBvbmVudGlhbC5sb3dlciAhPT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMuZXhwb25lbnRpYWwudXBwZXIgIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgdmFyIGZpeGVkT3B0aW9ucyA9ICgwLCBfb2JqZWN0Lm1hcE9iamVjdCkob3B0aW9ucywgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfSk7XG4gICAgICAgIGZpeGVkT3B0aW9ucy5leHBvbmVudGlhbCA9IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAob3B0aW9ucy5leHBvbmVudGlhbC5sb3dlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZml4ZWRPcHRpb25zLmxvd2VyRXhwID0gTWF0aC5yb3VuZChNYXRoLmxvZyhvcHRpb25zLmV4cG9uZW50aWFsLmxvd2VyKSAvIE1hdGguTE4xMCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5leHBvbmVudGlhbC51cHBlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZml4ZWRPcHRpb25zLnVwcGVyRXhwID0gTWF0aC5yb3VuZChNYXRoLmxvZyhvcHRpb25zLmV4cG9uZW50aWFsLnVwcGVyKSAvIE1hdGguTE4xMCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zb2xlLndhcm4oJ0RlcHJlY2F0aW9uIHdhcm5pbmc6IEZvcm1hdHRpbmcgb3B0aW9ucyBleHBvbmVudGlhbC5sb3dlciBhbmQgZXhwb25lbnRpYWwudXBwZXIgJyArICcobWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZSkgJyArICdhcmUgcmVwbGFjZWQgd2l0aCBleHBvbmVudGlhbC5sb3dlckV4cCBhbmQgZXhwb25lbnRpYWwudXBwZXJFeHAgJyArICcobWluaW11bSBhbmQgbWF4aW11bSBleHBvbmVudCkgc2luY2UgdmVyc2lvbiA0LjAuMC4gJyArICdSZXBsYWNlICcgKyBKU09OLnN0cmluZ2lmeShvcHRpb25zKSArICcgd2l0aCAnICsgSlNPTi5zdHJpbmdpZnkoZml4ZWRPcHRpb25zKSk7XG4gICAgICAgIHJldHVybiB0b1ByZWNpc2lvbih2YWx1ZSwgcHJlY2lzaW9uLCBmaXhlZE9wdGlvbnMpO1xuICAgICAgfSAvLyByZW1vdmUgdHJhaWxpbmcgemVyb3MgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnRcblxuXG4gICAgICByZXR1cm4gdG9QcmVjaXNpb24odmFsdWUsIHByZWNpc2lvbiwgb3B0aW9ucyAmJiBvcHRpb25zKS5yZXBsYWNlKC8oKFxcLlxcZCo/KSgwKykpKCR8ZSkvLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkaWdpdHMgPSBhcmd1bWVudHNbMl07XG4gICAgICAgIHZhciBlID0gYXJndW1lbnRzWzRdO1xuICAgICAgICByZXR1cm4gZGlnaXRzICE9PSAnLicgPyBkaWdpdHMgKyBlIDogZTtcbiAgICAgIH0pO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBub3RhdGlvbiBcIicgKyBub3RhdGlvbiArICdcIi4gJyArICdDaG9vc2UgXCJhdXRvXCIsIFwiZXhwb25lbnRpYWxcIiwgb3IgXCJmaXhlZFwiLicpO1xuICB9XG59XG4vKipcbiAqIFNwbGl0IGEgbnVtYmVyIGludG8gc2lnbiwgY29lZmZpY2llbnRzLCBhbmQgZXhwb25lbnRcbiAqIEBwYXJhbSB7bnVtYmVyIHwgc3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7U3BsaXRWYWx1ZX1cbiAqICAgICAgICAgICAgICBSZXR1cm5zIGFuIG9iamVjdCBjb250YWluaW5nIHNpZ24sIGNvZWZmaWNpZW50cywgYW5kIGV4cG9uZW50XG4gKi9cblxuXG5mdW5jdGlvbiBzcGxpdE51bWJlcih2YWx1ZSkge1xuICAvLyBwYXJzZSB0aGUgaW5wdXQgdmFsdWVcbiAgdmFyIG1hdGNoID0gU3RyaW5nKHZhbHVlKS50b0xvd2VyQ2FzZSgpLm1hdGNoKC9eMCo/KC0/KShcXGQrXFwuP1xcZCopKGUoWystXT9cXGQrKSk/JC8pO1xuXG4gIGlmICghbWF0Y2gpIHtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0ludmFsaWQgbnVtYmVyICcgKyB2YWx1ZSk7XG4gIH1cblxuICB2YXIgc2lnbiA9IG1hdGNoWzFdO1xuICB2YXIgZGlnaXRzID0gbWF0Y2hbMl07XG4gIHZhciBleHBvbmVudCA9IHBhcnNlRmxvYXQobWF0Y2hbNF0gfHwgJzAnKTtcbiAgdmFyIGRvdCA9IGRpZ2l0cy5pbmRleE9mKCcuJyk7XG4gIGV4cG9uZW50ICs9IGRvdCAhPT0gLTEgPyBkb3QgLSAxIDogZGlnaXRzLmxlbmd0aCAtIDE7XG4gIHZhciBjb2VmZmljaWVudHMgPSBkaWdpdHMucmVwbGFjZSgnLicsICcnKSAvLyByZW1vdmUgdGhlIGRvdCAobXVzdCBiZSByZW1vdmVkIGJlZm9yZSByZW1vdmluZyBsZWFkaW5nIHplcm9zKVxuICAucmVwbGFjZSgvXjAqLywgZnVuY3Rpb24gKHplcm9zKSB7XG4gICAgLy8gcmVtb3ZlIGxlYWRpbmcgemVyb3MsIGFkZCB0aGVpciBjb3VudCB0byB0aGUgZXhwb25lbnRcbiAgICBleHBvbmVudCAtPSB6ZXJvcy5sZW5ndGg7XG4gICAgcmV0dXJuICcnO1xuICB9KS5yZXBsYWNlKC8wKiQvLCAnJykgLy8gcmVtb3ZlIHRyYWlsaW5nIHplcm9zXG4gIC5zcGxpdCgnJykubWFwKGZ1bmN0aW9uIChkKSB7XG4gICAgcmV0dXJuIHBhcnNlSW50KGQpO1xuICB9KTtcblxuICBpZiAoY29lZmZpY2llbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIGNvZWZmaWNpZW50cy5wdXNoKDApO1xuICAgIGV4cG9uZW50Kys7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHNpZ246IHNpZ24sXG4gICAgY29lZmZpY2llbnRzOiBjb2VmZmljaWVudHMsXG4gICAgZXhwb25lbnQ6IGV4cG9uZW50XG4gIH07XG59XG4vKipcbiAqIEZvcm1hdCBhIG51bWJlciBpbiBlbmdpbmVlcmluZyBub3RhdGlvbi4gTGlrZSAnMS4yM2UrNicsICcyLjNlKzAnLCAnMy41MDBlLTMnXG4gKiBAcGFyYW0ge251bWJlciB8IHN0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcHJlY2lzaW9uXSAgICAgICAgT3B0aW9uYWwgbnVtYmVyIG9mIHNpZ25pZmljYW50IGZpZ3VyZXMgdG8gcmV0dXJuLlxuICovXG5cblxuZnVuY3Rpb24gdG9FbmdpbmVlcmluZyh2YWx1ZSwgcHJlY2lzaW9uKSB7XG4gIGlmIChpc05hTih2YWx1ZSkgfHwgIWlzRmluaXRlKHZhbHVlKSkge1xuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICB9XG5cbiAgdmFyIHNwbGl0ID0gc3BsaXROdW1iZXIodmFsdWUpO1xuICB2YXIgcm91bmRlZCA9IHJvdW5kRGlnaXRzKHNwbGl0LCBwcmVjaXNpb24pO1xuICB2YXIgZSA9IHJvdW5kZWQuZXhwb25lbnQ7XG4gIHZhciBjID0gcm91bmRlZC5jb2VmZmljaWVudHM7IC8vIGZpbmQgbmVhcmVzdCBsb3dlciBtdWx0aXBsZSBvZiAzIGZvciBleHBvbmVudFxuXG4gIHZhciBuZXdFeHAgPSBlICUgMyA9PT0gMCA/IGUgOiBlIDwgMCA/IGUgLSAzIC0gZSAlIDMgOiBlIC0gZSAlIDM7XG5cbiAgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKHByZWNpc2lvbikpIHtcbiAgICAvLyBhZGQgemVyb2VzIHRvIGdpdmUgY29ycmVjdCBzaWcgZmlnc1xuICAgIHdoaWxlIChwcmVjaXNpb24gPiBjLmxlbmd0aCB8fCBlIC0gbmV3RXhwICsgMSA+IGMubGVuZ3RoKSB7XG4gICAgICBjLnB1c2goMCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGNvbmNhdGVuYXRlIGNvZWZmaWNpZW50cyB3aXRoIG5lY2Vzc2FyeSB6ZXJvc1xuICAgIC8vIGFkZCB6ZXJvcyBpZiBuZWNlc3NhcnkgKGZvciBleGFtcGxlOiAxZSs4IC0+IDEwMGUrNilcbiAgICB2YXIgbWlzc2luZ1plcm9zID0gTWF0aC5hYnMoZSAtIG5ld0V4cCkgLSAoYy5sZW5ndGggLSAxKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWlzc2luZ1plcm9zOyBpKyspIHtcbiAgICAgIGMucHVzaCgwKTtcbiAgICB9XG4gIH0gLy8gZmluZCBkaWZmZXJlbmNlIGluIGV4cG9uZW50c1xuXG5cbiAgdmFyIGV4cERpZmYgPSBNYXRoLmFicyhlIC0gbmV3RXhwKTtcbiAgdmFyIGRlY2ltYWxJZHggPSAxOyAvLyBwdXNoIGRlY2ltYWwgaW5kZXggb3ZlciBieSBleHBEaWZmIHRpbWVzXG5cbiAgd2hpbGUgKGV4cERpZmYgPiAwKSB7XG4gICAgZGVjaW1hbElkeCsrO1xuICAgIGV4cERpZmYtLTtcbiAgfSAvLyBpZiBhbGwgY29lZmZpY2llbnQgdmFsdWVzIGFyZSB6ZXJvIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50IGFuZCBwcmVjaXNpb24gaXMgdW5zZXQsIGRvbid0IGFkZCBhIGRlY2ltYWwgdmFsdWUuXG4gIC8vIG90aGVyd2lzZSBjb25jYXQgd2l0aCB0aGUgcmVzdCBvZiB0aGUgY29lZmZpY2llbnRzXG5cblxuICB2YXIgZGVjaW1hbHMgPSBjLnNsaWNlKGRlY2ltYWxJZHgpLmpvaW4oJycpO1xuICB2YXIgZGVjaW1hbFZhbCA9ICgwLCBfaXMuaXNOdW1iZXIpKHByZWNpc2lvbikgJiYgZGVjaW1hbHMubGVuZ3RoIHx8IGRlY2ltYWxzLm1hdGNoKC9bMS05XS8pID8gJy4nICsgZGVjaW1hbHMgOiAnJztcbiAgdmFyIHN0ciA9IGMuc2xpY2UoMCwgZGVjaW1hbElkeCkuam9pbignJykgKyBkZWNpbWFsVmFsICsgJ2UnICsgKGUgPj0gMCA/ICcrJyA6ICcnKSArIG5ld0V4cC50b1N0cmluZygpO1xuICByZXR1cm4gcm91bmRlZC5zaWduICsgc3RyO1xufVxuLyoqXG4gKiBGb3JtYXQgYSBudW1iZXIgd2l0aCBmaXhlZCBub3RhdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyIHwgc3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IFtwcmVjaXNpb249dW5kZWZpbmVkXSAgT3B0aW9uYWwgbnVtYmVyIG9mIGRlY2ltYWxzIGFmdGVyIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjaW1hbCBwb2ludC4gbnVsbCBieSBkZWZhdWx0LlxuICovXG5cblxuZnVuY3Rpb24gdG9GaXhlZCh2YWx1ZSwgcHJlY2lzaW9uKSB7XG4gIGlmIChpc05hTih2YWx1ZSkgfHwgIWlzRmluaXRlKHZhbHVlKSkge1xuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICB9XG5cbiAgdmFyIHNwbGl0VmFsdWUgPSBzcGxpdE51bWJlcih2YWx1ZSk7XG4gIHZhciByb3VuZGVkID0gdHlwZW9mIHByZWNpc2lvbiA9PT0gJ251bWJlcicgPyByb3VuZERpZ2l0cyhzcGxpdFZhbHVlLCBzcGxpdFZhbHVlLmV4cG9uZW50ICsgMSArIHByZWNpc2lvbikgOiBzcGxpdFZhbHVlO1xuICB2YXIgYyA9IHJvdW5kZWQuY29lZmZpY2llbnRzO1xuICB2YXIgcCA9IHJvdW5kZWQuZXhwb25lbnQgKyAxOyAvLyBleHBvbmVudCBtYXkgaGF2ZSBjaGFuZ2VkXG4gIC8vIGFwcGVuZCB6ZXJvcyBpZiBuZWVkZWRcblxuICB2YXIgcHAgPSBwICsgKHByZWNpc2lvbiB8fCAwKTtcblxuICBpZiAoYy5sZW5ndGggPCBwcCkge1xuICAgIGMgPSBjLmNvbmNhdCh6ZXJvcyhwcCAtIGMubGVuZ3RoKSk7XG4gIH0gLy8gcHJlcGVuZCB6ZXJvcyBpZiBuZWVkZWRcblxuXG4gIGlmIChwIDwgMCkge1xuICAgIGMgPSB6ZXJvcygtcCArIDEpLmNvbmNhdChjKTtcbiAgICBwID0gMTtcbiAgfSAvLyBpbnNlcnQgYSBkb3QgaWYgbmVlZGVkXG5cblxuICBpZiAocCA8IGMubGVuZ3RoKSB7XG4gICAgYy5zcGxpY2UocCwgMCwgcCA9PT0gMCA/ICcwLicgOiAnLicpO1xuICB9XG5cbiAgcmV0dXJuIHJvdW5kZWQuc2lnbiArIGMuam9pbignJyk7XG59XG4vKipcbiAqIEZvcm1hdCBhIG51bWJlciBpbiBleHBvbmVudGlhbCBub3RhdGlvbi4gTGlrZSAnMS4yM2UrNScsICcyLjNlKzAnLCAnMy41MDBlLTMnXG4gKiBAcGFyYW0ge251bWJlciB8IHN0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcHJlY2lzaW9uXSAgTnVtYmVyIG9mIGRpZ2l0cyBpbiBmb3JtYXR0ZWQgb3V0cHV0LlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBub3QgcHJvdmlkZWQsIHRoZSBtYXhpbXVtIGF2YWlsYWJsZSBkaWdpdHNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgdXNlZC5cbiAqL1xuXG5cbmZ1bmN0aW9uIHRvRXhwb25lbnRpYWwodmFsdWUsIHByZWNpc2lvbikge1xuICBpZiAoaXNOYU4odmFsdWUpIHx8ICFpc0Zpbml0ZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgfSAvLyByb3VuZCBpZiBuZWVkZWQsIGVsc2UgY3JlYXRlIGEgY2xvbmVcblxuXG4gIHZhciBzcGxpdCA9IHNwbGl0TnVtYmVyKHZhbHVlKTtcbiAgdmFyIHJvdW5kZWQgPSBwcmVjaXNpb24gPyByb3VuZERpZ2l0cyhzcGxpdCwgcHJlY2lzaW9uKSA6IHNwbGl0O1xuICB2YXIgYyA9IHJvdW5kZWQuY29lZmZpY2llbnRzO1xuICB2YXIgZSA9IHJvdW5kZWQuZXhwb25lbnQ7IC8vIGFwcGVuZCB6ZXJvcyBpZiBuZWVkZWRcblxuICBpZiAoYy5sZW5ndGggPCBwcmVjaXNpb24pIHtcbiAgICBjID0gYy5jb25jYXQoemVyb3MocHJlY2lzaW9uIC0gYy5sZW5ndGgpKTtcbiAgfSAvLyBmb3JtYXQgYXMgYEMuQ0NDZStFRUVgIG9yIGBDLkNDQ2UtRUVFYFxuXG5cbiAgdmFyIGZpcnN0ID0gYy5zaGlmdCgpO1xuICByZXR1cm4gcm91bmRlZC5zaWduICsgZmlyc3QgKyAoYy5sZW5ndGggPiAwID8gJy4nICsgYy5qb2luKCcnKSA6ICcnKSArICdlJyArIChlID49IDAgPyAnKycgOiAnJykgKyBlO1xufVxuLyoqXG4gKiBGb3JtYXQgYSBudW1iZXIgd2l0aCBhIGNlcnRhaW4gcHJlY2lzaW9uXG4gKiBAcGFyYW0ge251bWJlciB8IHN0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcHJlY2lzaW9uPXVuZGVmaW5lZF0gT3B0aW9uYWwgbnVtYmVyIG9mIGRpZ2l0cy5cbiAqIEBwYXJhbSB7e2xvd2VyRXhwOiBudW1iZXIgfCB1bmRlZmluZWQsIHVwcGVyRXhwOiBudW1iZXIgfCB1bmRlZmluZWR9fSBbb3B0aW9uc11cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdDpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb3dlckV4cCA9IC0zIChpbmNsKVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwcGVyID0gKzUgKGV4Y2wpXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cblxuXG5mdW5jdGlvbiB0b1ByZWNpc2lvbih2YWx1ZSwgcHJlY2lzaW9uLCBvcHRpb25zKSB7XG4gIGlmIChpc05hTih2YWx1ZSkgfHwgIWlzRmluaXRlKHZhbHVlKSkge1xuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICB9IC8vIGRldGVybWluZSBsb3dlciBhbmQgdXBwZXIgYm91bmQgZm9yIGV4cG9uZW50aWFsIG5vdGF0aW9uLlxuXG5cbiAgdmFyIGxvd2VyRXhwID0gb3B0aW9ucyAmJiBvcHRpb25zLmxvd2VyRXhwICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmxvd2VyRXhwIDogLTM7XG4gIHZhciB1cHBlckV4cCA9IG9wdGlvbnMgJiYgb3B0aW9ucy51cHBlckV4cCAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy51cHBlckV4cCA6IDU7XG4gIHZhciBzcGxpdCA9IHNwbGl0TnVtYmVyKHZhbHVlKTtcbiAgdmFyIHJvdW5kZWQgPSBwcmVjaXNpb24gPyByb3VuZERpZ2l0cyhzcGxpdCwgcHJlY2lzaW9uKSA6IHNwbGl0O1xuXG4gIGlmIChyb3VuZGVkLmV4cG9uZW50IDwgbG93ZXJFeHAgfHwgcm91bmRlZC5leHBvbmVudCA+PSB1cHBlckV4cCkge1xuICAgIC8vIGV4cG9uZW50aWFsIG5vdGF0aW9uXG4gICAgcmV0dXJuIHRvRXhwb25lbnRpYWwodmFsdWUsIHByZWNpc2lvbik7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGMgPSByb3VuZGVkLmNvZWZmaWNpZW50cztcbiAgICB2YXIgZSA9IHJvdW5kZWQuZXhwb25lbnQ7IC8vIGFwcGVuZCB0cmFpbGluZyB6ZXJvc1xuXG4gICAgaWYgKGMubGVuZ3RoIDwgcHJlY2lzaW9uKSB7XG4gICAgICBjID0gYy5jb25jYXQoemVyb3MocHJlY2lzaW9uIC0gYy5sZW5ndGgpKTtcbiAgICB9IC8vIGFwcGVuZCB0cmFpbGluZyB6ZXJvc1xuICAgIC8vIFRPRE86IHNpbXBsaWZ5IHRoZSBuZXh0IHN0YXRlbWVudFxuXG5cbiAgICBjID0gYy5jb25jYXQoemVyb3MoZSAtIGMubGVuZ3RoICsgMSArIChjLmxlbmd0aCA8IHByZWNpc2lvbiA/IHByZWNpc2lvbiAtIGMubGVuZ3RoIDogMCkpKTsgLy8gcHJlcGVuZCB6ZXJvc1xuXG4gICAgYyA9IHplcm9zKC1lKS5jb25jYXQoYyk7XG4gICAgdmFyIGRvdCA9IGUgPiAwID8gZSA6IDA7XG5cbiAgICBpZiAoZG90IDwgYy5sZW5ndGggLSAxKSB7XG4gICAgICBjLnNwbGljZShkb3QgKyAxLCAwLCAnLicpO1xuICAgIH1cblxuICAgIHJldHVybiByb3VuZGVkLnNpZ24gKyBjLmpvaW4oJycpO1xuICB9XG59XG4vKipcbiAqIFJvdW5kIHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIGEgbnVtYmVyICpcbiAqIEBwYXJhbSB7U3BsaXRWYWx1ZX0gc3BsaXQgICAgICAgQSB2YWx1ZSBzcGxpdCB3aXRoIC5zcGxpdE51bWJlcih2YWx1ZSlcbiAqIEBwYXJhbSB7bnVtYmVyfSBwcmVjaXNpb24gIEEgcG9zaXRpdmUgaW50ZWdlclxuICogQHJldHVybiB7U3BsaXRWYWx1ZX1cbiAqICAgICAgICAgICAgICBSZXR1cm5zIGFuIG9iamVjdCBjb250YWluaW5nIHNpZ24sIGNvZWZmaWNpZW50cywgYW5kIGV4cG9uZW50XG4gKiAgICAgICAgICAgICAgd2l0aCByb3VuZGVkIGRpZ2l0c1xuICovXG5cblxuZnVuY3Rpb24gcm91bmREaWdpdHMoc3BsaXQsIHByZWNpc2lvbikge1xuICAvLyBjcmVhdGUgYSBjbG9uZVxuICB2YXIgcm91bmRlZCA9IHtcbiAgICBzaWduOiBzcGxpdC5zaWduLFxuICAgIGNvZWZmaWNpZW50czogc3BsaXQuY29lZmZpY2llbnRzLFxuICAgIGV4cG9uZW50OiBzcGxpdC5leHBvbmVudFxuICB9O1xuICB2YXIgYyA9IHJvdW5kZWQuY29lZmZpY2llbnRzOyAvLyBwcmVwZW5kIHplcm9zIGlmIG5lZWRlZFxuXG4gIHdoaWxlIChwcmVjaXNpb24gPD0gMCkge1xuICAgIGMudW5zaGlmdCgwKTtcbiAgICByb3VuZGVkLmV4cG9uZW50Kys7XG4gICAgcHJlY2lzaW9uKys7XG4gIH1cblxuICBpZiAoYy5sZW5ndGggPiBwcmVjaXNpb24pIHtcbiAgICB2YXIgcmVtb3ZlZCA9IGMuc3BsaWNlKHByZWNpc2lvbiwgYy5sZW5ndGggLSBwcmVjaXNpb24pO1xuXG4gICAgaWYgKHJlbW92ZWRbMF0gPj0gNSkge1xuICAgICAgdmFyIGkgPSBwcmVjaXNpb24gLSAxO1xuICAgICAgY1tpXSsrO1xuXG4gICAgICB3aGlsZSAoY1tpXSA9PT0gMTApIHtcbiAgICAgICAgYy5wb3AoKTtcblxuICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgIGMudW5zaGlmdCgwKTtcbiAgICAgICAgICByb3VuZGVkLmV4cG9uZW50Kys7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9XG5cbiAgICAgICAgaS0tO1xuICAgICAgICBjW2ldKys7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJvdW5kZWQ7XG59XG4vKipcbiAqIENyZWF0ZSBhbiBhcnJheSBmaWxsZWQgd2l0aCB6ZXJvcy5cbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqIEByZXR1cm4ge0FycmF5fVxuICovXG5cblxuZnVuY3Rpb24gemVyb3MobGVuZ3RoKSB7XG4gIHZhciBhcnIgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgYXJyLnB1c2goMCk7XG4gIH1cblxuICByZXR1cm4gYXJyO1xufVxuLyoqXG4gKiBDb3VudCB0aGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cyBvZiBhIG51bWJlci5cbiAqXG4gKiBGb3IgZXhhbXBsZTpcbiAqICAgMi4zNCByZXR1cm5zIDNcbiAqICAgMC4wMDM0IHJldHVybnMgMlxuICogICAxMjAuNWUrMzAgcmV0dXJucyA0XG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJuIHtudW1iZXJ9IGRpZ2l0cyAgIE51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHNcbiAqL1xuXG5cbmZ1bmN0aW9uIGRpZ2l0cyh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUudG9FeHBvbmVudGlhbCgpLnJlcGxhY2UoL2UuKiQvLCAnJykgLy8gcmVtb3ZlIGV4cG9uZW50aWFsIG5vdGF0aW9uXG4gIC5yZXBsYWNlKC9eMFxcLj8wKnxcXC4vLCAnJykgLy8gcmVtb3ZlIGRlY2ltYWwgcG9pbnQgYW5kIGxlYWRpbmcgemVyb3NcbiAgLmxlbmd0aDtcbn1cbi8qKlxuICogTWluaW11bSBudW1iZXIgYWRkZWQgdG8gb25lIHRoYXQgbWFrZXMgdGhlIHJlc3VsdCBkaWZmZXJlbnQgdGhhbiBvbmVcbiAqL1xuXG5cbnZhciBEQkxfRVBTSUxPTiA9IE51bWJlci5FUFNJTE9OIHx8IDIuMjIwNDQ2MDQ5MjUwMzEzMDgwODQ3MjYzMzM2MTgxNkUtMTY7XG4vKipcbiAqIENvbXBhcmVzIHR3byBmbG9hdGluZyBwb2ludCBudW1iZXJzLlxuICogQHBhcmFtIHtudW1iZXJ9IHggICAgICAgICAgRmlyc3QgdmFsdWUgdG8gY29tcGFyZVxuICogQHBhcmFtIHtudW1iZXJ9IHkgICAgICAgICAgU2Vjb25kIHZhbHVlIHRvIGNvbXBhcmVcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZXBzaWxvbl0gIFRoZSBtYXhpbXVtIHJlbGF0aXZlIGRpZmZlcmVuY2UgYmV0d2VlbiB4IGFuZCB5XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBlcHNpbG9uIGlzIHVuZGVmaW5lZCBvciBudWxsLCB0aGUgZnVuY3Rpb24gd2lsbFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdCB3aGV0aGVyIHggYW5kIHkgYXJlIGV4YWN0bHkgZXF1YWwuXG4gKiBAcmV0dXJuIHtib29sZWFufSB3aGV0aGVyIHRoZSB0d28gbnVtYmVycyBhcmUgbmVhcmx5IGVxdWFsXG4qL1xuXG5leHBvcnRzLkRCTF9FUFNJTE9OID0gREJMX0VQU0lMT047XG5cbmZ1bmN0aW9uIG5lYXJseUVxdWFsKHgsIHksIGVwc2lsb24pIHtcbiAgLy8gaWYgZXBzaWxvbiBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGVzdCB3aGV0aGVyIHggYW5kIHkgYXJlIGV4YWN0bHkgZXF1YWxcbiAgaWYgKGVwc2lsb24gPT09IG51bGwgfHwgZXBzaWxvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHggPT09IHk7XG4gIH1cblxuICBpZiAoeCA9PT0geSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIE5hTlxuXG5cbiAgaWYgKGlzTmFOKHgpIHx8IGlzTmFOKHkpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIGF0IHRoaXMgcG9pbnQgeCBhbmQgeSBzaG91bGQgYmUgZmluaXRlXG5cblxuICBpZiAoaXNGaW5pdGUoeCkgJiYgaXNGaW5pdGUoeSkpIHtcbiAgICAvLyBjaGVjayBudW1iZXJzIGFyZSB2ZXJ5IGNsb3NlLCBuZWVkZWQgd2hlbiBjb21wYXJpbmcgbnVtYmVycyBuZWFyIHplcm9cbiAgICB2YXIgZGlmZiA9IE1hdGguYWJzKHggLSB5KTtcblxuICAgIGlmIChkaWZmIDwgREJMX0VQU0lMT04pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB1c2UgcmVsYXRpdmUgZXJyb3JcbiAgICAgIHJldHVybiBkaWZmIDw9IE1hdGgubWF4KE1hdGguYWJzKHgpLCBNYXRoLmFicyh5KSkgKiBlcHNpbG9uO1xuICAgIH1cbiAgfSAvLyBJbmZpbml0ZSBhbmQgTnVtYmVyIG9yIG5lZ2F0aXZlIEluZmluaXRlIGFuZCBwb3NpdGl2ZSBJbmZpbml0ZSBjYXNlc1xuXG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgYXJjY29zIG9mIGEgbnVtYmVyXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5cblxudmFyIGFjb3NoID0gTWF0aC5hY29zaCB8fCBmdW5jdGlvbiAoeCkge1xuICByZXR1cm4gTWF0aC5sb2coTWF0aC5zcXJ0KHggKiB4IC0gMSkgKyB4KTtcbn07XG5cbmV4cG9ydHMuYWNvc2ggPSBhY29zaDtcblxudmFyIGFzaW5oID0gTWF0aC5hc2luaCB8fCBmdW5jdGlvbiAoeCkge1xuICByZXR1cm4gTWF0aC5sb2coTWF0aC5zcXJ0KHggKiB4ICsgMSkgKyB4KTtcbn07XG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgaHlwZXJib2xpYyBhcmN0YW5nZW50IG9mIGEgbnVtYmVyXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5cblxuZXhwb3J0cy5hc2luaCA9IGFzaW5oO1xuXG52YXIgYXRhbmggPSBNYXRoLmF0YW5oIHx8IGZ1bmN0aW9uICh4KSB7XG4gIHJldHVybiBNYXRoLmxvZygoMSArIHgpIC8gKDEgLSB4KSkgLyAyO1xufTtcbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBoeXBlcmJvbGljIGNvc2luZSBvZiBhIG51bWJlclxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cblxuXG5leHBvcnRzLmF0YW5oID0gYXRhbmg7XG5cbnZhciBjb3NoID0gTWF0aC5jb3NoIHx8IGZ1bmN0aW9uICh4KSB7XG4gIHJldHVybiAoTWF0aC5leHAoeCkgKyBNYXRoLmV4cCgteCkpIC8gMjtcbn07XG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgaHlwZXJib2xpYyBzaW5lIG9mIGEgbnVtYmVyXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuXG5cbmV4cG9ydHMuY29zaCA9IGNvc2g7XG5cbnZhciBzaW5oID0gTWF0aC5zaW5oIHx8IGZ1bmN0aW9uICh4KSB7XG4gIHJldHVybiAoTWF0aC5leHAoeCkgLSBNYXRoLmV4cCgteCkpIC8gMjtcbn07XG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgaHlwZXJib2xpYyB0YW5nZW50IG9mIGEgbnVtYmVyXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuXG5cbmV4cG9ydHMuc2luaCA9IHNpbmg7XG5cbnZhciB0YW5oID0gTWF0aC50YW5oIHx8IGZ1bmN0aW9uICh4KSB7XG4gIHZhciBlID0gTWF0aC5leHAoMiAqIHgpO1xuICByZXR1cm4gKGUgLSAxKSAvIChlICsgMSk7XG59O1xuXG5leHBvcnRzLnRhbmggPSB0YW5oOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jbG9uZSA9IGNsb25lO1xuZXhwb3J0cy5tYXBPYmplY3QgPSBtYXBPYmplY3Q7XG5leHBvcnRzLmV4dGVuZCA9IGV4dGVuZDtcbmV4cG9ydHMuZGVlcEV4dGVuZCA9IGRlZXBFeHRlbmQ7XG5leHBvcnRzLmRlZXBTdHJpY3RFcXVhbCA9IGRlZXBTdHJpY3RFcXVhbDtcbmV4cG9ydHMuZGVlcEZsYXR0ZW4gPSBkZWVwRmxhdHRlbjtcbmV4cG9ydHMuY2FuRGVmaW5lUHJvcGVydHkgPSBjYW5EZWZpbmVQcm9wZXJ0eTtcbmV4cG9ydHMubGF6eSA9IGxhenk7XG5leHBvcnRzLnRyYXZlcnNlID0gdHJhdmVyc2U7XG5leHBvcnRzLmhhc093blByb3BlcnR5ID0gaGFzT3duUHJvcGVydHk7XG5leHBvcnRzLmlzTGVnYWN5RmFjdG9yeSA9IGlzTGVnYWN5RmFjdG9yeTtcbmV4cG9ydHMuZ2V0ID0gZ2V0O1xuZXhwb3J0cy5zZXQgPSBzZXQ7XG5leHBvcnRzLnBpY2sgPSBwaWNrO1xuZXhwb3J0cy5waWNrU2hhbGxvdyA9IHBpY2tTaGFsbG93O1xuZXhwb3J0cy52YWx1ZXMgPSB2YWx1ZXM7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi9pc1wiKTtcblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG4vKipcbiAqIENsb25lIGFuIG9iamVjdFxuICpcbiAqICAgICBjbG9uZSh4KVxuICpcbiAqIENhbiBjbG9uZSBhbnkgcHJpbWl0aXZlIHR5cGUsIGFycmF5LCBhbmQgb2JqZWN0LlxuICogSWYgeCBoYXMgYSBmdW5jdGlvbiBjbG9uZSwgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGludm9rZWQgdG8gY2xvbmUgdGhlIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0geyp9IHhcbiAqIEByZXR1cm4geyp9IGNsb25lXG4gKi9cbmZ1bmN0aW9uIGNsb25lKHgpIHtcbiAgdmFyIHR5cGUgPSBfdHlwZW9mKHgpOyAvLyBpbW11dGFibGUgcHJpbWl0aXZlIHR5cGVzXG5cblxuICBpZiAodHlwZSA9PT0gJ251bWJlcicgfHwgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZSA9PT0gJ2Jvb2xlYW4nIHx8IHggPT09IG51bGwgfHwgeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHg7XG4gIH0gLy8gdXNlIGNsb25lIGZ1bmN0aW9uIG9mIHRoZSBvYmplY3Qgd2hlbiBhdmFpbGFibGVcblxuXG4gIGlmICh0eXBlb2YgeC5jbG9uZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB4LmNsb25lKCk7XG4gIH0gLy8gYXJyYXlcblxuXG4gIGlmIChBcnJheS5pc0FycmF5KHgpKSB7XG4gICAgcmV0dXJuIHgubWFwKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGNsb25lKHZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmICh4IGluc3RhbmNlb2YgRGF0ZSkgcmV0dXJuIG5ldyBEYXRlKHgudmFsdWVPZigpKTtcbiAgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKHgpKSByZXR1cm4geDsgLy8gYmlnbnVtYmVycyBhcmUgaW1tdXRhYmxlXG5cbiAgaWYgKHggaW5zdGFuY2VvZiBSZWdFeHApIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjbG9uZSAnICsgeCk7IC8vIFRPRE86IGNsb25lIGEgUmVnRXhwXG4gIC8vIG9iamVjdFxuXG4gIHJldHVybiBtYXBPYmplY3QoeCwgY2xvbmUpO1xufVxuLyoqXG4gKiBBcHBseSBtYXAgdG8gYWxsIHByb3BlcnRpZXMgb2YgYW4gb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7T2JqZWN0fSBSZXR1cm5zIGEgY29weSBvZiB0aGUgb2JqZWN0IHdpdGggbWFwcGVkIHByb3BlcnRpZXNcbiAqL1xuXG5cbmZ1bmN0aW9uIG1hcE9iamVjdChvYmplY3QsIGNhbGxiYWNrKSB7XG4gIHZhciBjbG9uZSA9IHt9O1xuXG4gIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkob2JqZWN0LCBrZXkpKSB7XG4gICAgICBjbG9uZVtrZXldID0gY2FsbGJhY2sob2JqZWN0W2tleV0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjbG9uZTtcbn1cbi8qKlxuICogRXh0ZW5kIG9iamVjdCBhIHdpdGggdGhlIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGJcbiAqIEBwYXJhbSB7T2JqZWN0fSBhXG4gKiBAcGFyYW0ge09iamVjdH0gYlxuICogQHJldHVybiB7T2JqZWN0fSBhXG4gKi9cblxuXG5mdW5jdGlvbiBleHRlbmQoYSwgYikge1xuICBmb3IgKHZhciBwcm9wIGluIGIpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkoYiwgcHJvcCkpIHtcbiAgICAgIGFbcHJvcF0gPSBiW3Byb3BdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhO1xufVxuLyoqXG4gKiBEZWVwIGV4dGVuZCBhbiBvYmplY3QgYSB3aXRoIHRoZSBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiXG4gKiBAcGFyYW0ge09iamVjdH0gYVxuICogQHBhcmFtIHtPYmplY3R9IGJcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKi9cblxuXG5mdW5jdGlvbiBkZWVwRXh0ZW5kKGEsIGIpIHtcbiAgLy8gVE9ETzogYWRkIHN1cHBvcnQgZm9yIEFycmF5cyB0byBkZWVwRXh0ZW5kXG4gIGlmIChBcnJheS5pc0FycmF5KGIpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IGRlZXBFeHRlbmQnKTtcbiAgfVxuXG4gIGZvciAodmFyIHByb3AgaW4gYikge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eShiLCBwcm9wKSkge1xuICAgICAgaWYgKGJbcHJvcF0gJiYgYltwcm9wXS5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XG4gICAgICAgIGlmIChhW3Byb3BdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhW3Byb3BdID0ge307XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYVtwcm9wXSAmJiBhW3Byb3BdLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcbiAgICAgICAgICBkZWVwRXh0ZW5kKGFbcHJvcF0sIGJbcHJvcF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFbcHJvcF0gPSBiW3Byb3BdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYltwcm9wXSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IGRlZXBFeHRlbmQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFbcHJvcF0gPSBiW3Byb3BdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhO1xufVxuLyoqXG4gKiBEZWVwIHRlc3QgZXF1YWxpdHkgb2YgYWxsIGZpZWxkcyBpbiB0d28gcGFpcnMgb2YgYXJyYXlzIG9yIG9iamVjdHMuXG4gKiBDb21wYXJlcyB2YWx1ZXMgYW5kIGZ1bmN0aW9ucyBzdHJpY3RseSAoaWUuIDIgaXMgbm90IHRoZSBzYW1lIGFzICcyJykuXG4gKiBAcGFyYW0ge0FycmF5IHwgT2JqZWN0fSBhXG4gKiBAcGFyYW0ge0FycmF5IHwgT2JqZWN0fSBiXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuXG5cbmZ1bmN0aW9uIGRlZXBTdHJpY3RFcXVhbChhLCBiKSB7XG4gIHZhciBwcm9wLCBpLCBsZW47XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoYSkpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9yIChpID0gMCwgbGVuID0gYS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgaWYgKCFkZWVwU3RyaWN0RXF1YWwoYVtpXSwgYltpXSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGEgPT09IGI7XG4gIH0gZWxzZSBpZiAoYSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGIpIHx8ICEoYiBpbnN0YW5jZW9mIE9iamVjdCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKHByb3AgaW4gYSkge1xuICAgICAgLy8gbm9pbnNwZWN0aW9uIEpTVW5maWx0ZXJlZEZvckluTG9vcFxuICAgICAgaWYgKCEocHJvcCBpbiBiKSB8fCAhZGVlcFN0cmljdEVxdWFsKGFbcHJvcF0sIGJbcHJvcF0pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHByb3AgaW4gYikge1xuICAgICAgLy8gbm9pbnNwZWN0aW9uIEpTVW5maWx0ZXJlZEZvckluTG9vcFxuICAgICAgaWYgKCEocHJvcCBpbiBhKSB8fCAhZGVlcFN0cmljdEVxdWFsKGFbcHJvcF0sIGJbcHJvcF0pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYSA9PT0gYjtcbiAgfVxufVxuLyoqXG4gKiBSZWN1cnNpdmVseSBmbGF0dGVuIGEgbmVzdGVkIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBuZXN0ZWRPYmplY3RcbiAqIEByZXR1cm4ge09iamVjdH0gUmV0dXJucyB0aGUgZmxhdHRlbmVkIG9iamVjdFxuICovXG5cblxuZnVuY3Rpb24gZGVlcEZsYXR0ZW4obmVzdGVkT2JqZWN0KSB7XG4gIHZhciBmbGF0dGVuZWRPYmplY3QgPSB7fTtcblxuICBfZGVlcEZsYXR0ZW4obmVzdGVkT2JqZWN0LCBmbGF0dGVuZWRPYmplY3QpO1xuXG4gIHJldHVybiBmbGF0dGVuZWRPYmplY3Q7XG59IC8vIGhlbHBlciBmdW5jdGlvbiB1c2VkIGJ5IGRlZXBGbGF0dGVuXG5cblxuZnVuY3Rpb24gX2RlZXBGbGF0dGVuKG5lc3RlZE9iamVjdCwgZmxhdHRlbmVkT2JqZWN0KSB7XG4gIGZvciAodmFyIHByb3AgaW4gbmVzdGVkT2JqZWN0KSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5KG5lc3RlZE9iamVjdCwgcHJvcCkpIHtcbiAgICAgIHZhciB2YWx1ZSA9IG5lc3RlZE9iamVjdFtwcm9wXTtcblxuICAgICAgaWYgKF90eXBlb2YodmFsdWUpID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBfZGVlcEZsYXR0ZW4odmFsdWUsIGZsYXR0ZW5lZE9iamVjdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmbGF0dGVuZWRPYmplY3RbcHJvcF0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbi8qKlxuICogVGVzdCB3aGV0aGVyIHRoZSBjdXJyZW50IEphdmFTY3JpcHQgZW5naW5lIHN1cHBvcnRzIE9iamVjdC5kZWZpbmVQcm9wZXJ0eVxuICogQHJldHVybnMge2Jvb2xlYW59IHJldHVybnMgdHJ1ZSBpZiBzdXBwb3J0ZWRcbiAqL1xuXG5cbmZ1bmN0aW9uIGNhbkRlZmluZVByb3BlcnR5KCkge1xuICAvLyB0ZXN0IG5lZWRlZCBmb3IgYnJva2VuIElFOCBpbXBsZW1lbnRhdGlvblxuICB0cnkge1xuICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ3gnLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge31cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7fVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbi8qKlxuICogQXR0YWNoIGEgbGF6eSBsb2FkaW5nIHByb3BlcnR5IHRvIGEgY29uc3RhbnQuXG4gKiBUaGUgZ2l2ZW4gZnVuY3Rpb24gYGZuYCBpcyBjYWxsZWQgb25jZSB3aGVuIHRoZSBwcm9wZXJ0eSBpcyBmaXJzdCByZXF1ZXN0ZWQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCAgICAgICAgIE9iamVjdCB3aGVyZSB0byBhZGQgdGhlIHByb3BlcnR5XG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcCAgICAgICAgICAgUHJvcGVydHkgbmFtZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gdmFsdWVSZXNvbHZlciBGdW5jdGlvbiByZXR1cm5pbmcgdGhlIHByb3BlcnR5IHZhbHVlLiBDYWxsZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRob3V0IGFyZ3VtZW50cy5cbiAqL1xuXG5cbmZ1bmN0aW9uIGxhenkob2JqZWN0LCBwcm9wLCB2YWx1ZVJlc29sdmVyKSB7XG4gIHZhciBfdW5pbml0aWFsaXplZCA9IHRydWU7XG5cbiAgdmFyIF92YWx1ZTtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICBpZiAoX3VuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgX3ZhbHVlID0gdmFsdWVSZXNvbHZlcigpO1xuICAgICAgICBfdW5pbml0aWFsaXplZCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3ZhbHVlO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiBzZXQodmFsdWUpIHtcbiAgICAgIF92YWx1ZSA9IHZhbHVlO1xuICAgICAgX3VuaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICB9LFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlXG4gIH0pO1xufVxuLyoqXG4gKiBUcmF2ZXJzZSBhIHBhdGggaW50byBhbiBvYmplY3QuXG4gKiBXaGVuIGEgbmFtZXNwYWNlIGlzIG1pc3NpbmcsIGl0IHdpbGwgYmUgY3JlYXRlZFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmcgfCBzdHJpbmdbXX0gcGF0aCAgIEEgZG90IHNlcGFyYXRlZCBzdHJpbmcgbGlrZSAnbmFtZS5zcGFjZSdcbiAqIEByZXR1cm4ge09iamVjdH0gUmV0dXJucyB0aGUgb2JqZWN0IGF0IHRoZSBlbmQgb2YgdGhlIHBhdGhcbiAqL1xuXG5cbmZ1bmN0aW9uIHRyYXZlcnNlKG9iamVjdCwgcGF0aCkge1xuICBpZiAocGF0aCAmJiB0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdHJhdmVyc2Uob2JqZWN0LCBwYXRoLnNwbGl0KCcuJykpO1xuICB9XG5cbiAgdmFyIG9iaiA9IG9iamVjdDtcblxuICBpZiAocGF0aCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IHBhdGhbaV07XG5cbiAgICAgIGlmICghKGtleSBpbiBvYmopKSB7XG4gICAgICAgIG9ialtrZXldID0ge307XG4gICAgICB9XG5cbiAgICAgIG9iaiA9IG9ialtrZXldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmo7XG59XG4vKipcbiAqIEEgc2FmZSBoYXNPd25Qcm9wZXJ0eVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5XG4gKi9cblxuXG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5KSB7XG4gIHJldHVybiBvYmplY3QgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7XG59XG4vKipcbiAqIFRlc3Qgd2hldGhlciBhbiBvYmplY3QgaXMgYSBmYWN0b3J5LiBhIGZhY3RvcnkgaGFzIGZpZWxkczpcbiAqXG4gKiAtIGZhY3Rvcnk6IGZ1bmN0aW9uICh0eXBlOiBPYmplY3QsIGNvbmZpZzogT2JqZWN0LCBsb2FkOiBmdW5jdGlvbiwgdHlwZWQ6IGZ1bmN0aW9uIFssIG1hdGg6IE9iamVjdF0pICAgKHJlcXVpcmVkKVxuICogLSBuYW1lOiBzdHJpbmcgKG9wdGlvbmFsKVxuICogLSBwYXRoOiBzdHJpbmcgICAgQSBkb3Qgc2VwYXJhdGVkIHBhdGggKG9wdGlvbmFsKVxuICogLSBtYXRoOiBib29sZWFuICAgSWYgdHJ1ZSAoZmFsc2UgYnkgZGVmYXVsdCksIHRoZSBtYXRoIG5hbWVzcGFjZSBpcyBwYXNzZWRcbiAqICAgICAgICAgICAgICAgICAgIGFzIGZpZnRoIGFyZ3VtZW50IG9mIHRoZSBmYWN0b3J5IGZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHsqfSBvYmplY3RcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5cblxuZnVuY3Rpb24gaXNMZWdhY3lGYWN0b3J5KG9iamVjdCkge1xuICByZXR1cm4gb2JqZWN0ICYmIHR5cGVvZiBvYmplY3QuZmFjdG9yeSA9PT0gJ2Z1bmN0aW9uJztcbn1cbi8qKlxuICogR2V0IGEgbmVzdGVkIHByb3BlcnR5IGZyb20gYW4gb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZyB8IHN0cmluZ1tdfSBwYXRoXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5cblxuZnVuY3Rpb24gZ2V0KG9iamVjdCwgcGF0aCkge1xuICBpZiAodHlwZW9mIHBhdGggPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKGlzUGF0aChwYXRoKSkge1xuICAgICAgcmV0dXJuIGdldChvYmplY3QsIHBhdGguc3BsaXQoJy4nKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvYmplY3RbcGF0aF07XG4gICAgfVxuICB9XG5cbiAgdmFyIGNoaWxkID0gb2JqZWN0O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBwYXRoW2ldO1xuICAgIGNoaWxkID0gY2hpbGQgPyBjaGlsZFtrZXldIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIGNoaWxkO1xufVxuLyoqXG4gKiBTZXQgYSBuZXN0ZWQgcHJvcGVydHkgaW4gYW4gb2JqZWN0XG4gKiBNdXRhdGVzIHRoZSBvYmplY3QgaXRzZWxmXG4gKiBJZiB0aGUgcGF0aCBkb2Vzbid0IGV4aXN0LCBpdCB3aWxsIGJlIGNyZWF0ZWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nIHwgc3RyaW5nW119IHBhdGhcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKi9cblxuXG5mdW5jdGlvbiBzZXQob2JqZWN0LCBwYXRoLCB2YWx1ZSkge1xuICBpZiAodHlwZW9mIHBhdGggPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKGlzUGF0aChwYXRoKSkge1xuICAgICAgcmV0dXJuIHNldChvYmplY3QsIHBhdGguc3BsaXQoJy4nKSwgdmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmplY3RbcGF0aF0gPSB2YWx1ZTtcbiAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNoaWxkID0gb2JqZWN0O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0aC5sZW5ndGggLSAxOyBpKyspIHtcbiAgICB2YXIga2V5ID0gcGF0aFtpXTtcblxuICAgIGlmIChjaGlsZFtrZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNoaWxkW2tleV0gPSB7fTtcbiAgICB9XG5cbiAgICBjaGlsZCA9IGNoaWxkW2tleV07XG4gIH1cblxuICBpZiAocGF0aC5sZW5ndGggPiAwKSB7XG4gICAgdmFyIGxhc3RLZXkgPSBwYXRoW3BhdGgubGVuZ3RoIC0gMV07XG4gICAgY2hpbGRbbGFzdEtleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmplY3Q7XG59XG4vKipcbiAqIENyZWF0ZSBhbiBvYmplY3QgY29tcG9zZWQgb2YgdGhlIHBpY2tlZCBvYmplY3QgcHJvcGVydGllc1xuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmdbXX0gcHJvcGVydGllc1xuICogQHBhcmFtIHtmdW5jdGlvbn0gW3RyYW5zZm9ybV0gT3B0aW9uYWwgdmFsdWUgdG8gdHJhbnNmb3JtIGEgdmFsdWUgd2hlbiBwaWNraW5nIGl0XG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cblxuXG5mdW5jdGlvbiBwaWNrKG9iamVjdCwgcHJvcGVydGllcywgdHJhbnNmb3JtKSB7XG4gIHZhciBjb3B5ID0ge307XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IHByb3BlcnRpZXNbaV07XG4gICAgdmFyIHZhbHVlID0gZ2V0KG9iamVjdCwga2V5KTtcblxuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBzZXQoY29weSwga2V5LCB0cmFuc2Zvcm0gPyB0cmFuc2Zvcm0odmFsdWUsIGtleSkgOiB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvcHk7XG59XG4vKipcbiAqIFNoYWxsb3cgdmVyc2lvbiBvZiBwaWNrLCBjcmVhdGluZyBhbiBvYmplY3QgY29tcG9zZWQgb2YgdGhlIHBpY2tlZCBvYmplY3QgcHJvcGVydGllc1xuICogYnV0IG5vdCBmb3IgbmVzdGVkIHByb3BlcnRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nW119IHByb3BlcnRpZXNcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuXG5cbmZ1bmN0aW9uIHBpY2tTaGFsbG93KG9iamVjdCwgcHJvcGVydGllcykge1xuICB2YXIgY29weSA9IHt9O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBwcm9wZXJ0aWVzW2ldO1xuICAgIHZhciB2YWx1ZSA9IG9iamVjdFtrZXldO1xuXG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvcHlba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb3B5O1xufVxuXG5mdW5jdGlvbiB2YWx1ZXMob2JqZWN0KSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmplY3QpLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIG9iamVjdFtrZXldO1xuICB9KTtcbn0gLy8gaGVscGVyIGZ1bmN0aW9uIHRvIHRlc3Qgd2hldGhlciBhIHN0cmluZyBjb250YWlucyBhIHBhdGggbGlrZSAndXNlci5uYW1lJ1xuXG5cbmZ1bmN0aW9uIGlzUGF0aChzdHIpIHtcbiAgcmV0dXJuIHN0ci5pbmRleE9mKCcuJykgIT09IC0xO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG4vLyBUT0RPOiByZW1vdmUgdGhlc2UgcG9seWZpbGxzIGFzIHNvb24gYXMgd2UgaGF2ZSBhIGJ1aWxkIHByb2Nlc3MgdGhhdCB0cmFuc3BpbGVzIHRoZSBjb2RlIHRvIEVTNVxuLy8gUG9seWZpbGwgZm9yIElFIDExIChOdW1iZXIuaXNGaW5pdGUgaXMgdXNlZCBpbiBgY29tcGxleC5qc2ApXG4vLyBzb3VyY2U6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL051bWJlci9pc0Zpbml0ZVxuTnVtYmVyLmlzRmluaXRlID0gTnVtYmVyLmlzRmluaXRlIHx8IGZ1bmN0aW9uICh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZSh2YWx1ZSk7XG59OyAvLyBQb2x5ZmlsbCBmb3IgSUUgMTFcbi8vIHNvdXJjZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvTnVtYmVyL2lzTmFOXG5cblxuTnVtYmVyLmlzTmFOID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uICh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IHZhbHVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNlbGYtY29tcGFyZVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucHJvZHVjdCA9IHByb2R1Y3Q7XG5cbi8qKiBAcGFyYW0ge251bWJlcn0gaVxuICogIEBwYXJhbSB7bnVtYmVyfSBuXG4gKiAgQHJldHVybnMge251bWJlcn0gcHJvZHVjdCBvZiBpIHRvIG5cbiAqL1xuZnVuY3Rpb24gcHJvZHVjdChpLCBuKSB7XG4gIGlmIChuIDwgaSkge1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgaWYgKG4gPT09IGkpIHtcbiAgICByZXR1cm4gbjtcbiAgfVxuXG4gIHZhciBoYWxmID0gbiArIGkgPj4gMTsgLy8gZGl2aWRlIChuICsgaSkgYnkgMiBhbmQgdHJ1bmNhdGUgdG8gaW50ZWdlclxuXG4gIHJldHVybiBwcm9kdWN0KGksIGhhbGYpICogcHJvZHVjdChoYWxmICsgMSwgbik7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmVuZHNXaXRoID0gZW5kc1dpdGg7XG5leHBvcnRzLmZvcm1hdCA9IGZvcm1hdDtcbmV4cG9ydHMuc3RyaW5naWZ5ID0gc3RyaW5naWZ5O1xuZXhwb3J0cy5lc2NhcGUgPSBlc2NhcGU7XG5leHBvcnRzLmNvbXBhcmVUZXh0ID0gY29tcGFyZVRleHQ7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi9pc1wiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi9udW1iZXJcIik7XG5cbnZhciBfZm9ybWF0dGVyID0gcmVxdWlyZShcIi4vYmlnbnVtYmVyL2Zvcm1hdHRlclwiKTtcblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG4vKipcbiAqIENoZWNrIGlmIGEgdGV4dCBlbmRzIHdpdGggYSBjZXJ0YWluIHN0cmluZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gKiBAcGFyYW0ge3N0cmluZ30gc2VhcmNoXG4gKi9cbmZ1bmN0aW9uIGVuZHNXaXRoKHRleHQsIHNlYXJjaCkge1xuICB2YXIgc3RhcnQgPSB0ZXh0Lmxlbmd0aCAtIHNlYXJjaC5sZW5ndGg7XG4gIHZhciBlbmQgPSB0ZXh0Lmxlbmd0aDtcbiAgcmV0dXJuIHRleHQuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpID09PSBzZWFyY2g7XG59XG4vKipcbiAqIEZvcm1hdCBhIHZhbHVlIG9mIGFueSB0eXBlIGludG8gYSBzdHJpbmcuXG4gKlxuICogVXNhZ2U6XG4gKiAgICAgbWF0aC5mb3JtYXQodmFsdWUpXG4gKiAgICAgbWF0aC5mb3JtYXQodmFsdWUsIHByZWNpc2lvbilcbiAqXG4gKiBXaGVuIHZhbHVlIGlzIGEgZnVuY3Rpb246XG4gKlxuICogLSBXaGVuIHRoZSBmdW5jdGlvbiBoYXMgYSBwcm9wZXJ0eSBgc3ludGF4YCwgaXQgcmV0dXJucyB0aGlzXG4gKiAgIHN5bnRheCBkZXNjcmlwdGlvbi5cbiAqIC0gSW4gb3RoZXIgY2FzZXMsIGEgc3RyaW5nIGAnZnVuY3Rpb24nYCBpcyByZXR1cm5lZC5cbiAqXG4gKiBXaGVuIGB2YWx1ZWAgaXMgYW4gT2JqZWN0OlxuICpcbiAqIC0gV2hlbiB0aGUgb2JqZWN0IGNvbnRhaW5zIGEgcHJvcGVydHkgYGZvcm1hdGAgYmVpbmcgYSBmdW5jdGlvbiwgdGhpc1xuICogICBmdW5jdGlvbiBpcyBpbnZva2VkIGFzIGB2YWx1ZS5mb3JtYXQob3B0aW9ucylgIGFuZCB0aGUgcmVzdWx0IGlzIHJldHVybmVkLlxuICogLSBXaGVuIHRoZSBvYmplY3QgaGFzIGl0cyBvd24gYHRvU3RyaW5nYCBtZXRob2QsIHRoaXMgbWV0aG9kIGlzIGludm9rZWRcbiAqICAgYW5kIHRoZSByZXN1bHQgaXMgcmV0dXJuZWQuXG4gKiAtIEluIG90aGVyIGNhc2VzIHRoZSBmdW5jdGlvbiB3aWxsIGxvb3Agb3ZlciBhbGwgb2JqZWN0IHByb3BlcnRpZXMgYW5kXG4gKiAgIHJldHVybiBKU09OIG9iamVjdCBub3RhdGlvbiBsaWtlICd7XCJhXCI6IDIsIFwiYlwiOiAzfScuXG4gKlxuICogRXhhbXBsZSB1c2FnZTpcbiAqICAgICBtYXRoLmZvcm1hdCgyLzcpICAgICAgICAgICAgICAgIC8vICcwLjI4NTcxNDI4NTcxNDI4NTcnXG4gKiAgICAgbWF0aC5mb3JtYXQobWF0aC5waSwgMykgICAgICAgICAvLyAnMy4xNCdcbiAqICAgICBtYXRoLmZvcm1hdChuZXcgQ29tcGxleCgyLCAzKSkgIC8vICcyICsgM2knXG4gKiAgICAgbWF0aC5mb3JtYXQoJ2hlbGxvJykgICAgICAgICAgICAvLyAnXCJoZWxsb1wiJ1xuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgICAgICAgICAgICAgVmFsdWUgdG8gYmUgc3RyaW5naWZpZWRcbiAqIEBwYXJhbSB7T2JqZWN0IHwgbnVtYmVyIHwgRnVuY3Rpb259IFtvcHRpb25zXSAgRm9ybWF0dGluZyBvcHRpb25zLiBTZWVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGliL3V0aWxzL251bWJlcjpmb3JtYXQgZm9yIGFcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gb2YgdGhlIGF2YWlsYWJsZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLlxuICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAqL1xuXG5cbmZ1bmN0aW9uIGZvcm1hdCh2YWx1ZSwgb3B0aW9ucykge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiAoMCwgX251bWJlci5mb3JtYXQpKHZhbHVlLCBvcHRpb25zKTtcbiAgfVxuXG4gIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gKDAsIF9mb3JtYXR0ZXIuZm9ybWF0KSh2YWx1ZSwgb3B0aW9ucyk7XG4gIH0gLy8gbm90ZTogd2UgdXNlIHVuc2FmZSBkdWNrLXR5cGluZyBoZXJlIHRvIGNoZWNrIGZvciBGcmFjdGlvbnMsIHRoaXMgaXNcbiAgLy8gb2sgaGVyZSBzaW5jZSB3ZSdyZSBvbmx5IGludm9raW5nIHRvU3RyaW5nIG9yIGNvbmNhdGVuYXRpbmcgaXRzIHZhbHVlc1xuXG5cbiAgaWYgKGxvb2tzTGlrZUZyYWN0aW9uKHZhbHVlKSkge1xuICAgIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLmZyYWN0aW9uICE9PSAnZGVjaW1hbCcpIHtcbiAgICAgIC8vIG91dHB1dCBhcyByYXRpbywgbGlrZSAnMS8zJ1xuICAgICAgcmV0dXJuIHZhbHVlLnMgKiB2YWx1ZS5uICsgJy8nICsgdmFsdWUuZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gb3V0cHV0IGFzIGRlY2ltYWwsIGxpa2UgJzAuKDMpJ1xuICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZvcm1hdEFycmF5KHZhbHVlLCBvcHRpb25zKTtcbiAgfVxuXG4gIGlmICgoMCwgX2lzLmlzU3RyaW5nKSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gJ1wiJyArIHZhbHVlICsgJ1wiJztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdmFsdWUuc3ludGF4ID8gU3RyaW5nKHZhbHVlLnN5bnRheCkgOiAnZnVuY3Rpb24nO1xuICB9XG5cbiAgaWYgKHZhbHVlICYmIF90eXBlb2YodmFsdWUpID09PSAnb2JqZWN0Jykge1xuICAgIGlmICh0eXBlb2YgdmFsdWUuZm9ybWF0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gdmFsdWUuZm9ybWF0KG9wdGlvbnMpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgJiYgdmFsdWUudG9TdHJpbmcob3B0aW9ucykgIT09IHt9LnRvU3RyaW5nKCkpIHtcbiAgICAgIC8vIHRoaXMgb2JqZWN0IGhhcyBhIG5vbi1uYXRpdmUgdG9TdHJpbmcgbWV0aG9kLCB1c2UgdGhhdCBvbmVcbiAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZyhvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGVudHJpZXMgPSBPYmplY3Qua2V5cyh2YWx1ZSkubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgcmV0dXJuICdcIicgKyBrZXkgKyAnXCI6ICcgKyBmb3JtYXQodmFsdWVba2V5XSwgb3B0aW9ucyk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiAneycgKyBlbnRyaWVzLmpvaW4oJywgJykgKyAnfSc7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG59XG4vKipcbiAqIFN0cmluZ2lmeSBhIHZhbHVlIGludG8gYSBzdHJpbmcgZW5jbG9zZWQgaW4gZG91YmxlIHF1b3Rlcy5cbiAqIFVuZXNjYXBlZCBkb3VibGUgcXVvdGVzIGFuZCBiYWNrc2xhc2hlcyBpbnNpZGUgdGhlIHZhbHVlIGFyZSBlc2NhcGVkLlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5cblxuZnVuY3Rpb24gc3RyaW5naWZ5KHZhbHVlKSB7XG4gIHZhciB0ZXh0ID0gU3RyaW5nKHZhbHVlKTtcbiAgdmFyIGVzY2FwZWQgPSAnJztcbiAgdmFyIGkgPSAwO1xuXG4gIHdoaWxlIChpIDwgdGV4dC5sZW5ndGgpIHtcbiAgICB2YXIgYyA9IHRleHQuY2hhckF0KGkpO1xuXG4gICAgaWYgKGMgPT09ICdcXFxcJykge1xuICAgICAgZXNjYXBlZCArPSBjO1xuICAgICAgaSsrO1xuICAgICAgYyA9IHRleHQuY2hhckF0KGkpO1xuXG4gICAgICBpZiAoYyA9PT0gJycgfHwgJ1wiXFxcXC9iZm5ydHUnLmluZGV4T2YoYykgPT09IC0xKSB7XG4gICAgICAgIGVzY2FwZWQgKz0gJ1xcXFwnOyAvLyBubyB2YWxpZCBlc2NhcGUgY2hhcmFjdGVyIC0+IGVzY2FwZSBpdFxuICAgICAgfVxuXG4gICAgICBlc2NhcGVkICs9IGM7XG4gICAgfSBlbHNlIGlmIChjID09PSAnXCInKSB7XG4gICAgICBlc2NhcGVkICs9ICdcXFxcXCInO1xuICAgIH0gZWxzZSB7XG4gICAgICBlc2NhcGVkICs9IGM7XG4gICAgfVxuXG4gICAgaSsrO1xuICB9XG5cbiAgcmV0dXJuICdcIicgKyBlc2NhcGVkICsgJ1wiJztcbn1cbi8qKlxuICogRXNjYXBlIHNwZWNpYWwgSFRNTCBjaGFyYWN0ZXJzXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cblxuXG5mdW5jdGlvbiBlc2NhcGUodmFsdWUpIHtcbiAgdmFyIHRleHQgPSBTdHJpbmcodmFsdWUpO1xuICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC8mL2csICcmYW1wOycpLnJlcGxhY2UoL1wiL2csICcmcXVvdDsnKS5yZXBsYWNlKC8nL2csICcmIzM5OycpLnJlcGxhY2UoLzwvZywgJyZsdDsnKS5yZXBsYWNlKC8+L2csICcmZ3Q7Jyk7XG4gIHJldHVybiB0ZXh0O1xufVxuLyoqXG4gKiBSZWN1cnNpdmVseSBmb3JtYXQgYW4gbi1kaW1lbnNpb25hbCBtYXRyaXhcbiAqIEV4YW1wbGUgb3V0cHV0OiBcIltbMSwgMl0sIFszLCA0XV1cIlxuICogQHBhcmFtIHtBcnJheX0gYXJyYXlcbiAqIEBwYXJhbSB7T2JqZWN0IHwgbnVtYmVyIHwgRnVuY3Rpb259IFtvcHRpb25zXSAgRm9ybWF0dGluZyBvcHRpb25zLiBTZWVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGliL3V0aWxzL251bWJlcjpmb3JtYXQgZm9yIGFcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gb2YgdGhlIGF2YWlsYWJsZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLlxuICogQHJldHVybnMge3N0cmluZ30gc3RyXG4gKi9cblxuXG5mdW5jdGlvbiBmb3JtYXRBcnJheShhcnJheSwgb3B0aW9ucykge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnJheSkpIHtcbiAgICB2YXIgc3RyID0gJ1snO1xuICAgIHZhciBsZW4gPSBhcnJheS5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBpZiAoaSAhPT0gMCkge1xuICAgICAgICBzdHIgKz0gJywgJztcbiAgICAgIH1cblxuICAgICAgc3RyICs9IGZvcm1hdEFycmF5KGFycmF5W2ldLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBzdHIgKz0gJ10nO1xuICAgIHJldHVybiBzdHI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZvcm1hdChhcnJheSwgb3B0aW9ucyk7XG4gIH1cbn1cbi8qKlxuICogQ2hlY2sgd2hldGhlciBhIHZhbHVlIGxvb2tzIGxpa2UgYSBGcmFjdGlvbiAodW5zYWZlIGR1Y2stdHlwZSBjaGVjaylcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cblxuXG5mdW5jdGlvbiBsb29rc0xpa2VGcmFjdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgJiYgX3R5cGVvZih2YWx1ZSkgPT09ICdvYmplY3QnICYmIHR5cGVvZiB2YWx1ZS5zID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgdmFsdWUubiA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHZhbHVlLmQgPT09ICdudW1iZXInIHx8IGZhbHNlO1xufVxuLyoqXG4gKiBDb21wYXJlIHR3byBzdHJpbmdzXG4gKiBAcGFyYW0ge3N0cmluZ30geFxuICogQHBhcmFtIHtzdHJpbmd9IHlcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cblxuXG5mdW5jdGlvbiBjb21wYXJlVGV4dCh4LCB5KSB7XG4gIC8vIHdlIGRvbid0IHdhbnQgdG8gY29udmVydCBudW1iZXJzIHRvIHN0cmluZywgb25seSBhY2NlcHQgc3RyaW5nIGlucHV0XG4gIGlmICghKDAsIF9pcy5pc1N0cmluZykoeCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmV4cGVjdGVkIHR5cGUgb2YgYXJndW1lbnQgaW4gZnVuY3Rpb24gY29tcGFyZVRleHQgJyArICcoZXhwZWN0ZWQ6IHN0cmluZyBvciBBcnJheSBvciBNYXRyaXgsIGFjdHVhbDogJyArICgwLCBfaXMudHlwZU9mKSh4KSArICcsIGluZGV4OiAwKScpO1xuICB9XG5cbiAgaWYgKCEoMCwgX2lzLmlzU3RyaW5nKSh5KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuZXhwZWN0ZWQgdHlwZSBvZiBhcmd1bWVudCBpbiBmdW5jdGlvbiBjb21wYXJlVGV4dCAnICsgJyhleHBlY3RlZDogc3RyaW5nIG9yIEFycmF5IG9yIE1hdHJpeCwgYWN0dWFsOiAnICsgKDAsIF9pcy50eXBlT2YpKHkpICsgJywgaW5kZXg6IDEpJyk7XG4gIH1cblxuICByZXR1cm4geCA9PT0geSA/IDAgOiB4ID4geSA/IDEgOiAtMTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudmVyc2lvbiA9IHZvaWQgMDtcbnZhciB2ZXJzaW9uID0gJzYuNi41JzsgLy8gTm90ZTogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdoZW4gYnVpbGRpbmcgbWF0aC5qcy5cbi8vIENoYW5nZXMgbWFkZSBpbiB0aGlzIGZpbGUgd2lsbCBiZSBvdmVyd3JpdHRlbi5cblxuZXhwb3J0cy52ZXJzaW9uID0gdmVyc2lvbjsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2xpYi9lbnRyeS9tYWluQW55JylcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciB3aWR0aCA9IDI1NjsvLyBlYWNoIFJDNCBvdXRwdXQgaXMgMCA8PSB4IDwgMjU2XHJcbnZhciBjaHVua3MgPSA2Oy8vIGF0IGxlYXN0IHNpeCBSQzQgb3V0cHV0cyBmb3IgZWFjaCBkb3VibGVcclxudmFyIGRpZ2l0cyA9IDUyOy8vIHRoZXJlIGFyZSA1MiBzaWduaWZpY2FudCBkaWdpdHMgaW4gYSBkb3VibGVcclxudmFyIHBvb2wgPSBbXTsvLyBwb29sOiBlbnRyb3B5IHBvb2wgc3RhcnRzIGVtcHR5XHJcbnZhciBHTE9CQUwgPSB0eXBlb2YgZ2xvYmFsID09PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IGdsb2JhbDtcclxuXHJcbi8vXHJcbi8vIFRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGFyZSByZWxhdGVkIHRvIElFRUUgNzU0IGxpbWl0cy5cclxuLy9cclxudmFyIHN0YXJ0ZGVub20gPSBNYXRoLnBvdyh3aWR0aCwgY2h1bmtzKSxcclxuICAgIHNpZ25pZmljYW5jZSA9IE1hdGgucG93KDIsIGRpZ2l0cyksXHJcbiAgICBvdmVyZmxvdyA9IHNpZ25pZmljYW5jZSAqIDIsXHJcbiAgICBtYXNrID0gd2lkdGggLSAxO1xyXG5cclxuXHJcbnZhciBvbGRSYW5kb20gPSBNYXRoLnJhbmRvbTtcclxuXHJcbi8vXHJcbi8vIHNlZWRyYW5kb20oKVxyXG4vLyBUaGlzIGlzIHRoZSBzZWVkcmFuZG9tIGZ1bmN0aW9uIGRlc2NyaWJlZCBhYm92ZS5cclxuLy9cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihzZWVkLCBvcHRpb25zKSB7XHJcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5nbG9iYWwgPT09IHRydWUpIHtcclxuICAgIG9wdGlvbnMuZ2xvYmFsID0gZmFsc2U7XHJcbiAgICBNYXRoLnJhbmRvbSA9IG1vZHVsZS5leHBvcnRzKHNlZWQsIG9wdGlvbnMpO1xyXG4gICAgb3B0aW9ucy5nbG9iYWwgPSB0cnVlO1xyXG4gICAgcmV0dXJuIE1hdGgucmFuZG9tO1xyXG4gIH1cclxuICB2YXIgdXNlX2VudHJvcHkgPSAob3B0aW9ucyAmJiBvcHRpb25zLmVudHJvcHkpIHx8IGZhbHNlO1xyXG4gIHZhciBrZXkgPSBbXTtcclxuXHJcbiAgLy8gRmxhdHRlbiB0aGUgc2VlZCBzdHJpbmcgb3IgYnVpbGQgb25lIGZyb20gbG9jYWwgZW50cm9weSBpZiBuZWVkZWQuXHJcbiAgdmFyIHNob3J0c2VlZCA9IG1peGtleShmbGF0dGVuKFxyXG4gICAgdXNlX2VudHJvcHkgPyBbc2VlZCwgdG9zdHJpbmcocG9vbCldIDpcclxuICAgIDAgaW4gYXJndW1lbnRzID8gc2VlZCA6IGF1dG9zZWVkKCksIDMpLCBrZXkpO1xyXG5cclxuICAvLyBVc2UgdGhlIHNlZWQgdG8gaW5pdGlhbGl6ZSBhbiBBUkM0IGdlbmVyYXRvci5cclxuICB2YXIgYXJjNCA9IG5ldyBBUkM0KGtleSk7XHJcblxyXG4gIC8vIE1peCB0aGUgcmFuZG9tbmVzcyBpbnRvIGFjY3VtdWxhdGVkIGVudHJvcHkuXHJcbiAgbWl4a2V5KHRvc3RyaW5nKGFyYzQuUyksIHBvb2wpO1xyXG5cclxuICAvLyBPdmVycmlkZSBNYXRoLnJhbmRvbVxyXG5cclxuICAvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSByYW5kb20gZG91YmxlIGluIFswLCAxKSB0aGF0IGNvbnRhaW5zXHJcbiAgLy8gcmFuZG9tbmVzcyBpbiBldmVyeSBiaXQgb2YgdGhlIG1hbnRpc3NhIG9mIHRoZSBJRUVFIDc1NCB2YWx1ZS5cclxuXHJcbiAgcmV0dXJuIGZ1bmN0aW9uKCkgeyAgICAgICAgIC8vIENsb3N1cmUgdG8gcmV0dXJuIGEgcmFuZG9tIGRvdWJsZTpcclxuICAgIHZhciBuID0gYXJjNC5nKGNodW5rcyksICAgICAgICAgICAgIC8vIFN0YXJ0IHdpdGggYSBudW1lcmF0b3IgbiA8IDIgXiA0OFxyXG4gICAgICAgIGQgPSBzdGFydGRlbm9tLCAgICAgICAgICAgICAgICAgLy8gICBhbmQgZGVub21pbmF0b3IgZCA9IDIgXiA0OC5cclxuICAgICAgICB4ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgYW5kIG5vICdleHRyYSBsYXN0IGJ5dGUnLlxyXG4gICAgd2hpbGUgKG4gPCBzaWduaWZpY2FuY2UpIHsgICAgICAgICAgLy8gRmlsbCB1cCBhbGwgc2lnbmlmaWNhbnQgZGlnaXRzIGJ5XHJcbiAgICAgIG4gPSAobiArIHgpICogd2lkdGg7ICAgICAgICAgICAgICAvLyAgIHNoaWZ0aW5nIG51bWVyYXRvciBhbmRcclxuICAgICAgZCAqPSB3aWR0aDsgICAgICAgICAgICAgICAgICAgICAgIC8vICAgZGVub21pbmF0b3IgYW5kIGdlbmVyYXRpbmcgYVxyXG4gICAgICB4ID0gYXJjNC5nKDEpOyAgICAgICAgICAgICAgICAgICAgLy8gICBuZXcgbGVhc3Qtc2lnbmlmaWNhbnQtYnl0ZS5cclxuICAgIH1cclxuICAgIHdoaWxlIChuID49IG92ZXJmbG93KSB7ICAgICAgICAgICAgIC8vIFRvIGF2b2lkIHJvdW5kaW5nIHVwLCBiZWZvcmUgYWRkaW5nXHJcbiAgICAgIG4gLz0gMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIGxhc3QgYnl0ZSwgc2hpZnQgZXZlcnl0aGluZ1xyXG4gICAgICBkIC89IDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICByaWdodCB1c2luZyBpbnRlZ2VyIE1hdGggdW50aWxcclxuICAgICAgeCA+Pj49IDE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgd2UgaGF2ZSBleGFjdGx5IHRoZSBkZXNpcmVkIGJpdHMuXHJcbiAgICB9XHJcbiAgICByZXR1cm4gKG4gKyB4KSAvIGQ7ICAgICAgICAgICAgICAgICAvLyBGb3JtIHRoZSBudW1iZXIgd2l0aGluIFswLCAxKS5cclxuICB9O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMucmVzZXRHbG9iYWwgPSBmdW5jdGlvbiAoKSB7XHJcbiAgTWF0aC5yYW5kb20gPSBvbGRSYW5kb207XHJcbn07XHJcblxyXG4vL1xyXG4vLyBBUkM0XHJcbi8vXHJcbi8vIEFuIEFSQzQgaW1wbGVtZW50YXRpb24uICBUaGUgY29uc3RydWN0b3IgdGFrZXMgYSBrZXkgaW4gdGhlIGZvcm0gb2ZcclxuLy8gYW4gYXJyYXkgb2YgYXQgbW9zdCAod2lkdGgpIGludGVnZXJzIHRoYXQgc2hvdWxkIGJlIDAgPD0geCA8ICh3aWR0aCkuXHJcbi8vXHJcbi8vIFRoZSBnKGNvdW50KSBtZXRob2QgcmV0dXJucyBhIHBzZXVkb3JhbmRvbSBpbnRlZ2VyIHRoYXQgY29uY2F0ZW5hdGVzXHJcbi8vIHRoZSBuZXh0IChjb3VudCkgb3V0cHV0cyBmcm9tIEFSQzQuICBJdHMgcmV0dXJuIHZhbHVlIGlzIGEgbnVtYmVyIHhcclxuLy8gdGhhdCBpcyBpbiB0aGUgcmFuZ2UgMCA8PSB4IDwgKHdpZHRoIF4gY291bnQpLlxyXG4vL1xyXG4vKiogQGNvbnN0cnVjdG9yICovXHJcbmZ1bmN0aW9uIEFSQzQoa2V5KSB7XHJcbiAgdmFyIHQsIGtleWxlbiA9IGtleS5sZW5ndGgsXHJcbiAgICAgIG1lID0gdGhpcywgaSA9IDAsIGogPSBtZS5pID0gbWUuaiA9IDAsIHMgPSBtZS5TID0gW107XHJcblxyXG4gIC8vIFRoZSBlbXB0eSBrZXkgW10gaXMgdHJlYXRlZCBhcyBbMF0uXHJcbiAgaWYgKCFrZXlsZW4pIHsga2V5ID0gW2tleWxlbisrXTsgfVxyXG5cclxuICAvLyBTZXQgdXAgUyB1c2luZyB0aGUgc3RhbmRhcmQga2V5IHNjaGVkdWxpbmcgYWxnb3JpdGhtLlxyXG4gIHdoaWxlIChpIDwgd2lkdGgpIHtcclxuICAgIHNbaV0gPSBpKys7XHJcbiAgfVxyXG4gIGZvciAoaSA9IDA7IGkgPCB3aWR0aDsgaSsrKSB7XHJcbiAgICBzW2ldID0gc1tqID0gbWFzayAmIChqICsga2V5W2kgJSBrZXlsZW5dICsgKHQgPSBzW2ldKSldO1xyXG4gICAgc1tqXSA9IHQ7XHJcbiAgfVxyXG5cclxuICAvLyBUaGUgXCJnXCIgbWV0aG9kIHJldHVybnMgdGhlIG5leHQgKGNvdW50KSBvdXRwdXRzIGFzIG9uZSBudW1iZXIuXHJcbiAgKG1lLmcgPSBmdW5jdGlvbihjb3VudCkge1xyXG4gICAgLy8gVXNpbmcgaW5zdGFuY2UgbWVtYmVycyBpbnN0ZWFkIG9mIGNsb3N1cmUgc3RhdGUgbmVhcmx5IGRvdWJsZXMgc3BlZWQuXHJcbiAgICB2YXIgdCwgciA9IDAsXHJcbiAgICAgICAgaSA9IG1lLmksIGogPSBtZS5qLCBzID0gbWUuUztcclxuICAgIHdoaWxlIChjb3VudC0tKSB7XHJcbiAgICAgIHQgPSBzW2kgPSBtYXNrICYgKGkgKyAxKV07XHJcbiAgICAgIHIgPSByICogd2lkdGggKyBzW21hc2sgJiAoKHNbaV0gPSBzW2ogPSBtYXNrICYgKGogKyB0KV0pICsgKHNbal0gPSB0KSldO1xyXG4gICAgfVxyXG4gICAgbWUuaSA9IGk7IG1lLmogPSBqO1xyXG4gICAgcmV0dXJuIHI7XHJcbiAgICAvLyBGb3Igcm9idXN0IHVucHJlZGljdGFiaWxpdHkgZGlzY2FyZCBhbiBpbml0aWFsIGJhdGNoIG9mIHZhbHVlcy5cclxuICAgIC8vIFNlZSBodHRwOi8vd3d3LnJzYS5jb20vcnNhbGFicy9ub2RlLmFzcD9pZD0yMDA5XHJcbiAgfSkod2lkdGgpO1xyXG59XHJcblxyXG4vL1xyXG4vLyBmbGF0dGVuKClcclxuLy8gQ29udmVydHMgYW4gb2JqZWN0IHRyZWUgdG8gbmVzdGVkIGFycmF5cyBvZiBzdHJpbmdzLlxyXG4vL1xyXG5mdW5jdGlvbiBmbGF0dGVuKG9iaiwgZGVwdGgpIHtcclxuICB2YXIgcmVzdWx0ID0gW10sIHR5cCA9ICh0eXBlb2Ygb2JqKVswXSwgcHJvcDtcclxuICBpZiAoZGVwdGggJiYgdHlwID09ICdvJykge1xyXG4gICAgZm9yIChwcm9wIGluIG9iaikge1xyXG4gICAgICB0cnkgeyByZXN1bHQucHVzaChmbGF0dGVuKG9ialtwcm9wXSwgZGVwdGggLSAxKSk7IH0gY2F0Y2ggKGUpIHt9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiAocmVzdWx0Lmxlbmd0aCA/IHJlc3VsdCA6IHR5cCA9PSAncycgPyBvYmogOiBvYmogKyAnXFwwJyk7XHJcbn1cclxuXHJcbi8vXHJcbi8vIG1peGtleSgpXHJcbi8vIE1peGVzIGEgc3RyaW5nIHNlZWQgaW50byBhIGtleSB0aGF0IGlzIGFuIGFycmF5IG9mIGludGVnZXJzLCBhbmRcclxuLy8gcmV0dXJucyBhIHNob3J0ZW5lZCBzdHJpbmcgc2VlZCB0aGF0IGlzIGVxdWl2YWxlbnQgdG8gdGhlIHJlc3VsdCBrZXkuXHJcbi8vXHJcbmZ1bmN0aW9uIG1peGtleShzZWVkLCBrZXkpIHtcclxuICB2YXIgc3RyaW5nc2VlZCA9IHNlZWQgKyAnJywgc21lYXIsIGogPSAwO1xyXG4gIHdoaWxlIChqIDwgc3RyaW5nc2VlZC5sZW5ndGgpIHtcclxuICAgIGtleVttYXNrICYgal0gPVxyXG4gICAgICBtYXNrICYgKChzbWVhciBePSBrZXlbbWFzayAmIGpdICogMTkpICsgc3RyaW5nc2VlZC5jaGFyQ29kZUF0KGorKykpO1xyXG4gIH1cclxuICByZXR1cm4gdG9zdHJpbmcoa2V5KTtcclxufVxyXG5cclxuLy9cclxuLy8gYXV0b3NlZWQoKVxyXG4vLyBSZXR1cm5zIGFuIG9iamVjdCBmb3IgYXV0b3NlZWRpbmcsIHVzaW5nIHdpbmRvdy5jcnlwdG8gaWYgYXZhaWxhYmxlLlxyXG4vL1xyXG4vKiogQHBhcmFtIHtVaW50OEFycmF5PX0gc2VlZCAqL1xyXG5mdW5jdGlvbiBhdXRvc2VlZChzZWVkKSB7XHJcbiAgdHJ5IHtcclxuICAgIEdMT0JBTC5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKHNlZWQgPSBuZXcgVWludDhBcnJheSh3aWR0aCkpO1xyXG4gICAgcmV0dXJuIHRvc3RyaW5nKHNlZWQpO1xyXG4gIH0gY2F0Y2ggKGUpIHtcclxuICAgIHJldHVybiBbK25ldyBEYXRlLCBHTE9CQUwsIEdMT0JBTC5uYXZpZ2F0b3IgJiYgR0xPQkFMLm5hdmlnYXRvci5wbHVnaW5zLFxyXG4gICAgICAgICAgICBHTE9CQUwuc2NyZWVuLCB0b3N0cmluZyhwb29sKV07XHJcbiAgfVxyXG59XHJcblxyXG4vL1xyXG4vLyB0b3N0cmluZygpXHJcbi8vIENvbnZlcnRzIGFuIGFycmF5IG9mIGNoYXJjb2RlcyB0byBhIHN0cmluZ1xyXG4vL1xyXG5mdW5jdGlvbiB0b3N0cmluZyhhKSB7XHJcbiAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoMCwgYSk7XHJcbn1cclxuXHJcbi8vXHJcbi8vIFdoZW4gc2VlZHJhbmRvbS5qcyBpcyBsb2FkZWQsIHdlIGltbWVkaWF0ZWx5IG1peCBhIGZldyBiaXRzXHJcbi8vIGZyb20gdGhlIGJ1aWx0LWluIFJORyBpbnRvIHRoZSBlbnRyb3B5IHBvb2wuICBCZWNhdXNlIHdlIGRvXHJcbi8vIG5vdCB3YW50IHRvIGludGVmZXJlIHdpdGggZGV0ZXJtaW5zdGljIFBSTkcgc3RhdGUgbGF0ZXIsXHJcbi8vIHNlZWRyYW5kb20gd2lsbCBub3QgY2FsbCBNYXRoLnJhbmRvbSBvbiBpdHMgb3duIGFnYWluIGFmdGVyXHJcbi8vIGluaXRpYWxpemF0aW9uLlxyXG4vL1xyXG5taXhrZXkoTWF0aC5yYW5kb20oKSwgcG9vbCk7XHJcbiIsImZ1bmN0aW9uIEUgKCkge1xuICAvLyBLZWVwIHRoaXMgZW1wdHkgc28gaXQncyBlYXNpZXIgdG8gaW5oZXJpdCBmcm9tXG4gIC8vICh2aWEgaHR0cHM6Ly9naXRodWIuY29tL2xpcHNtYWNrIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3Njb3R0Y29yZ2FuL3RpbnktZW1pdHRlci9pc3N1ZXMvMylcbn1cblxuRS5wcm90b3R5cGUgPSB7XG4gIG9uOiBmdW5jdGlvbiAobmFtZSwgY2FsbGJhY2ssIGN0eCkge1xuICAgIHZhciBlID0gdGhpcy5lIHx8ICh0aGlzLmUgPSB7fSk7XG5cbiAgICAoZVtuYW1lXSB8fCAoZVtuYW1lXSA9IFtdKSkucHVzaCh7XG4gICAgICBmbjogY2FsbGJhY2ssXG4gICAgICBjdHg6IGN0eFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG5cbiAgb25jZTogZnVuY3Rpb24gKG5hbWUsIGNhbGxiYWNrLCBjdHgpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgZnVuY3Rpb24gbGlzdGVuZXIgKCkge1xuICAgICAgc2VsZi5vZmYobmFtZSwgbGlzdGVuZXIpO1xuICAgICAgY2FsbGJhY2suYXBwbHkoY3R4LCBhcmd1bWVudHMpO1xuICAgIH07XG5cbiAgICBsaXN0ZW5lci5fID0gY2FsbGJhY2tcbiAgICByZXR1cm4gdGhpcy5vbihuYW1lLCBsaXN0ZW5lciwgY3R4KTtcbiAgfSxcblxuICBlbWl0OiBmdW5jdGlvbiAobmFtZSkge1xuICAgIHZhciBkYXRhID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgIHZhciBldnRBcnIgPSAoKHRoaXMuZSB8fCAodGhpcy5lID0ge30pKVtuYW1lXSB8fCBbXSkuc2xpY2UoKTtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGxlbiA9IGV2dEFyci5sZW5ndGg7XG5cbiAgICBmb3IgKGk7IGkgPCBsZW47IGkrKykge1xuICAgICAgZXZ0QXJyW2ldLmZuLmFwcGx5KGV2dEFycltpXS5jdHgsIGRhdGEpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuXG4gIG9mZjogZnVuY3Rpb24gKG5hbWUsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGUgPSB0aGlzLmUgfHwgKHRoaXMuZSA9IHt9KTtcbiAgICB2YXIgZXZ0cyA9IGVbbmFtZV07XG4gICAgdmFyIGxpdmVFdmVudHMgPSBbXTtcblxuICAgIGlmIChldnRzICYmIGNhbGxiYWNrKSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gZXZ0cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBpZiAoZXZ0c1tpXS5mbiAhPT0gY2FsbGJhY2sgJiYgZXZ0c1tpXS5mbi5fICE9PSBjYWxsYmFjaylcbiAgICAgICAgICBsaXZlRXZlbnRzLnB1c2goZXZ0c1tpXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIGV2ZW50IGZyb20gcXVldWUgdG8gcHJldmVudCBtZW1vcnkgbGVha1xuICAgIC8vIFN1Z2dlc3RlZCBieSBodHRwczovL2dpdGh1Yi5jb20vbGF6ZFxuICAgIC8vIFJlZjogaHR0cHM6Ly9naXRodWIuY29tL3Njb3R0Y29yZ2FuL3RpbnktZW1pdHRlci9jb21taXQvYzZlYmZhYTliYzk3M2IzM2QxMTBhODRhMzA3NzQyYjdjZjk0Yzk1MyNjb21taXRjb21tZW50LTUwMjQ5MTBcblxuICAgIChsaXZlRXZlbnRzLmxlbmd0aClcbiAgICAgID8gZVtuYW1lXSA9IGxpdmVFdmVudHNcbiAgICAgIDogZGVsZXRlIGVbbmFtZV07XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBFO1xubW9kdWxlLmV4cG9ydHMuVGlueUVtaXR0ZXIgPSBFO1xuIiwiLyoqXG4gKiB0eXBlZC1mdW5jdGlvblxuICpcbiAqIFR5cGUgY2hlY2tpbmcgZm9yIEphdmFTY3JpcHQgZnVuY3Rpb25zXG4gKlxuICogaHR0cHM6Ly9naXRodWIuY29tL2pvc2Rlam9uZy90eXBlZC1mdW5jdGlvblxuICovXG4ndXNlIHN0cmljdCc7XG5cbihmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgLy8gQU1ELiBSZWdpc3RlciBhcyBhbiBhbm9ueW1vdXMgbW9kdWxlLlxuICAgIGRlZmluZShbXSwgZmFjdG9yeSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgLy8gT2xkTm9kZS4gRG9lcyBub3Qgd29yayB3aXRoIHN0cmljdCBDb21tb25KUywgYnV0XG4gICAgLy8gb25seSBDb21tb25KUy1saWtlIGVudmlyb25tZW50cyB0aGF0IHN1cHBvcnQgbW9kdWxlLmV4cG9ydHMsXG4gICAgLy8gbGlrZSBPbGROb2RlLlxuICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuICB9IGVsc2Uge1xuICAgIC8vIEJyb3dzZXIgZ2xvYmFscyAocm9vdCBpcyB3aW5kb3cpXG4gICAgcm9vdC50eXBlZCA9IGZhY3RvcnkoKTtcbiAgfVxufSh0aGlzLCBmdW5jdGlvbiAoKSB7XG5cbiAgZnVuY3Rpb24gb2sgKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gbm90T2sgKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVuZGVmICgpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0eXBlZGVmIHt7XG4gICAqICAgcGFyYW1zOiBQYXJhbVtdLFxuICAgKiAgIGZuOiBmdW5jdGlvblxuICAgKiB9fSBTaWduYXR1cmVcbiAgICpcbiAgICogQHR5cGVkZWYge3tcbiAgICogICB0eXBlczogVHlwZVtdLFxuICAgKiAgIHJlc3RQYXJhbTogYm9vbGVhblxuICAgKiB9fSBQYXJhbVxuICAgKlxuICAgKiBAdHlwZWRlZiB7e1xuICAgKiAgIG5hbWU6IHN0cmluZyxcbiAgICogICB0eXBlSW5kZXg6IG51bWJlcixcbiAgICogICB0ZXN0OiBmdW5jdGlvbixcbiAgICogICBjb252ZXJzaW9uPzogQ29udmVyc2lvbkRlZixcbiAgICogICBjb252ZXJzaW9uSW5kZXg6IG51bWJlcixcbiAgICogfX0gVHlwZVxuICAgKlxuICAgKiBAdHlwZWRlZiB7e1xuICAgKiAgIGZyb206IHN0cmluZyxcbiAgICogICB0bzogc3RyaW5nLFxuICAgKiAgIGNvbnZlcnQ6IGZ1bmN0aW9uICgqKSA6ICpcbiAgICogfX0gQ29udmVyc2lvbkRlZlxuICAgKlxuICAgKiBAdHlwZWRlZiB7e1xuICAgKiAgIG5hbWU6IHN0cmluZyxcbiAgICogICB0ZXN0OiBmdW5jdGlvbigqKSA6IGJvb2xlYW5cbiAgICogfX0gVHlwZURlZlxuICAgKi9cblxuICAvLyBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdHlwZWQtZnVuY3Rpb25cbiAgZnVuY3Rpb24gY3JlYXRlICgpIHtcbiAgICAvLyBkYXRhIHR5cGUgdGVzdHNcbiAgICB2YXIgX3R5cGVzID0gW1xuICAgICAgeyBuYW1lOiAnbnVtYmVyJywgICAgdGVzdDogZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHR5cGVvZiB4ID09PSAnbnVtYmVyJyB9IH0sXG4gICAgICB7IG5hbWU6ICdzdHJpbmcnLCAgICB0ZXN0OiBmdW5jdGlvbiAoeCkgeyByZXR1cm4gdHlwZW9mIHggPT09ICdzdHJpbmcnIH0gfSxcbiAgICAgIHsgbmFtZTogJ2Jvb2xlYW4nLCAgIHRlc3Q6IGZ1bmN0aW9uICh4KSB7IHJldHVybiB0eXBlb2YgeCA9PT0gJ2Jvb2xlYW4nIH0gfSxcbiAgICAgIHsgbmFtZTogJ0Z1bmN0aW9uJywgIHRlc3Q6IGZ1bmN0aW9uICh4KSB7IHJldHVybiB0eXBlb2YgeCA9PT0gJ2Z1bmN0aW9uJ30gfSxcbiAgICAgIHsgbmFtZTogJ0FycmF5JywgICAgIHRlc3Q6IEFycmF5LmlzQXJyYXkgfSxcbiAgICAgIHsgbmFtZTogJ0RhdGUnLCAgICAgIHRlc3Q6IGZ1bmN0aW9uICh4KSB7IHJldHVybiB4IGluc3RhbmNlb2YgRGF0ZSB9IH0sXG4gICAgICB7IG5hbWU6ICdSZWdFeHAnLCAgICB0ZXN0OiBmdW5jdGlvbiAoeCkgeyByZXR1cm4geCBpbnN0YW5jZW9mIFJlZ0V4cCB9IH0sXG4gICAgICB7IG5hbWU6ICdPYmplY3QnLCAgICB0ZXN0OiBmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHggPT09ICdvYmplY3QnICYmIHggIT09IG51bGwgJiYgeC5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0XG4gICAgICB9fSxcbiAgICAgIHsgbmFtZTogJ251bGwnLCAgICAgIHRlc3Q6IGZ1bmN0aW9uICh4KSB7IHJldHVybiB4ID09PSBudWxsIH0gfSxcbiAgICAgIHsgbmFtZTogJ3VuZGVmaW5lZCcsIHRlc3Q6IGZ1bmN0aW9uICh4KSB7IHJldHVybiB4ID09PSB1bmRlZmluZWQgfSB9XG4gICAgXTtcblxuICAgIHZhciBhbnlUeXBlID0ge1xuICAgICAgbmFtZTogJ2FueScsXG4gICAgICB0ZXN0OiBva1xuICAgIH1cblxuICAgIC8vIHR5cGVzIHdoaWNoIG5lZWQgdG8gYmUgaWdub3JlZFxuICAgIHZhciBfaWdub3JlID0gW107XG5cbiAgICAvLyB0eXBlIGNvbnZlcnNpb25zXG4gICAgdmFyIF9jb252ZXJzaW9ucyA9IFtdO1xuXG4gICAgLy8gVGhpcyBpcyBhIHRlbXBvcmFyeSBvYmplY3QsIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBhIHR5cGVkIGZ1bmN0aW9uIGF0IHRoZSBlbmRcbiAgICB2YXIgdHlwZWQgPSB7XG4gICAgICB0eXBlczogX3R5cGVzLFxuICAgICAgY29udmVyc2lvbnM6IF9jb252ZXJzaW9ucyxcbiAgICAgIGlnbm9yZTogX2lnbm9yZVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBGaW5kIHRoZSB0ZXN0IGZ1bmN0aW9uIGZvciBhIHR5cGVcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdHlwZU5hbWVcbiAgICAgKiBAcmV0dXJuIHtUeXBlRGVmfSBSZXR1cm5zIHRoZSB0eXBlIGRlZmluaXRpb24gd2hlbiBmb3VuZCxcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgVGhyb3dzIGEgVHlwZUVycm9yIG90aGVyd2lzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZpbmRUeXBlQnlOYW1lICh0eXBlTmFtZSkge1xuICAgICAgdmFyIGVudHJ5ID0gZmluZEluQXJyYXkodHlwZWQudHlwZXMsIGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgICByZXR1cm4gZW50cnkubmFtZSA9PT0gdHlwZU5hbWU7XG4gICAgICB9KTtcblxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIHJldHVybiBlbnRyeTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVOYW1lID09PSAnYW55JykgeyAvLyBzcGVjaWFsIGJha2VkLWluIGNhc2UgJ2FueSdcbiAgICAgICAgcmV0dXJuIGFueVR5cGU7XG4gICAgICB9XG5cbiAgICAgIHZhciBoaW50ID0gZmluZEluQXJyYXkodHlwZWQudHlwZXMsIGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgICByZXR1cm4gZW50cnkubmFtZS50b0xvd2VyQ2FzZSgpID09PSB0eXBlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgfSk7XG5cbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gdHlwZSBcIicgKyB0eXBlTmFtZSArICdcIicgK1xuICAgICAgICAgIChoaW50ID8gKCcuIERpZCB5b3UgbWVhbiBcIicgKyBoaW50Lm5hbWUgKyAnXCI/JykgOiAnJykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbmQgdGhlIGluZGV4IG9mIGEgdHlwZSBkZWZpbml0aW9uLiBIYW5kbGVzIHNwZWNpYWwgY2FzZSAnYW55J1xuICAgICAqIEBwYXJhbSB7VHlwZURlZn0gdHlwZVxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmaW5kVHlwZUluZGV4KHR5cGUpIHtcbiAgICAgIGlmICh0eXBlID09PSBhbnlUeXBlKSB7XG4gICAgICAgIHJldHVybiA5OTk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0eXBlZC50eXBlcy5pbmRleE9mKHR5cGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbmQgYSB0eXBlIHRoYXQgbWF0Y2hlcyBhIHZhbHVlLlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGZpcnN0IHR5cGUgZm9yIHdoaWNoXG4gICAgICogICAgICAgICAgICAgICAgICB0aGUgdHlwZSB0ZXN0IG1hdGNoZXMgdGhlIHZhbHVlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZpbmRUeXBlTmFtZSh2YWx1ZSkge1xuICAgICAgdmFyIGVudHJ5ID0gZmluZEluQXJyYXkodHlwZWQudHlwZXMsIGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgICByZXR1cm4gZW50cnkudGVzdCh2YWx1ZSk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIHJldHVybiBlbnRyeS5uYW1lO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdWYWx1ZSBoYXMgdW5rbm93biB0eXBlLiBWYWx1ZTogJyArIHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaW5kIGEgc3BlY2lmaWMgc2lnbmF0dXJlIGZyb20gYSAoY29tcG9zZWQpIHR5cGVkIGZ1bmN0aW9uLCBmb3IgZXhhbXBsZTpcbiAgICAgKlxuICAgICAqICAgdHlwZWQuZmluZChmbiwgWydudW1iZXInLCAnc3RyaW5nJ10pXG4gICAgICogICB0eXBlZC5maW5kKGZuLCAnbnVtYmVyLCBzdHJpbmcnKVxuICAgICAqXG4gICAgICogRnVuY3Rpb24gZmluZCBvbmx5IG9ubHkgd29ya3MgZm9yIGV4YWN0IG1hdGNoZXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAgICAgICAgICAgICAgICAgICBBIHR5cGVkLWZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtzdHJpbmcgfCBzdHJpbmdbXX0gc2lnbmF0dXJlICAgU2lnbmF0dXJlIHRvIGJlIGZvdW5kLCBjYW4gYmVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbiBhcnJheSBvciBhIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcuXG4gICAgICogQHJldHVybiB7RnVuY3Rpb259ICAgICAgICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgbWF0Y2hpbmcgc2lnbmF0dXJlLCBvclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBhbiBlcnJvciB3aGVuIG5vIHNpZ25hdHVyZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGZvdW5kLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZpbmQgKGZuLCBzaWduYXR1cmUpIHtcbiAgICAgIGlmICghZm4uc2lnbmF0dXJlcykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGdW5jdGlvbiBpcyBubyB0eXBlZC1mdW5jdGlvbicpO1xuICAgICAgfVxuXG4gICAgICAvLyBub3JtYWxpemUgaW5wdXRcbiAgICAgIHZhciBhcnI7XG4gICAgICBpZiAodHlwZW9mIHNpZ25hdHVyZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgYXJyID0gc2lnbmF0dXJlLnNwbGl0KCcsJyk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgYXJyW2ldID0gYXJyW2ldLnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShzaWduYXR1cmUpKSB7XG4gICAgICAgIGFyciA9IHNpZ25hdHVyZTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTdHJpbmcgYXJyYXkgb3IgYSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nIGV4cGVjdGVkJyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBzdHIgPSBhcnIuam9pbignLCcpO1xuXG4gICAgICAvLyBmaW5kIGFuIGV4YWN0IG1hdGNoXG4gICAgICB2YXIgbWF0Y2ggPSBmbi5zaWduYXR1cmVzW3N0cl07XG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgfVxuXG4gICAgICAvLyBUT0RPOiBleHRlbmQgZmluZCB0byBtYXRjaCBub24tZXhhY3Qgc2lnbmF0dXJlc1xuXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTaWduYXR1cmUgbm90IGZvdW5kIChzaWduYXR1cmU6ICcgKyAoZm4ubmFtZSB8fCAndW5uYW1lZCcpICsgJygnICsgYXJyLmpvaW4oJywgJykgKyAnKSknKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IGEgZ2l2ZW4gdmFsdWUgdG8gYW5vdGhlciBkYXRhIHR5cGUuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29udmVydCAodmFsdWUsIHR5cGUpIHtcbiAgICAgIHZhciBmcm9tID0gZmluZFR5cGVOYW1lKHZhbHVlKTtcblxuICAgICAgLy8gY2hlY2sgY29udmVyc2lvbiBpcyBuZWVkZWRcbiAgICAgIGlmICh0eXBlID09PSBmcm9tKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlZC5jb252ZXJzaW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY29udmVyc2lvbiA9IHR5cGVkLmNvbnZlcnNpb25zW2ldO1xuICAgICAgICBpZiAoY29udmVyc2lvbi5mcm9tID09PSBmcm9tICYmIGNvbnZlcnNpb24udG8gPT09IHR5cGUpIHtcbiAgICAgICAgICByZXR1cm4gY29udmVyc2lvbi5jb252ZXJ0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGZyb20gJyArIGZyb20gKyAnIHRvICcgKyB0eXBlKTtcbiAgICB9XG4gICAgXG4gICAgLyoqXG4gICAgICogU3RyaW5naWZ5IHBhcmFtZXRlcnMgaW4gYSBub3JtYWxpemVkIHdheVxuICAgICAqIEBwYXJhbSB7UGFyYW1bXX0gcGFyYW1zXG4gICAgICogQHJldHVybiB7c3RyaW5nfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHN0cmluZ2lmeVBhcmFtcyAocGFyYW1zKSB7XG4gICAgICByZXR1cm4gcGFyYW1zXG4gICAgICAgICAgLm1hcChmdW5jdGlvbiAocGFyYW0pIHtcbiAgICAgICAgICAgIHZhciB0eXBlTmFtZXMgPSBwYXJhbS50eXBlcy5tYXAoZ2V0VHlwZU5hbWUpO1xuXG4gICAgICAgICAgICByZXR1cm4gKHBhcmFtLnJlc3RQYXJhbSA/ICcuLi4nIDogJycpICsgdHlwZU5hbWVzLmpvaW4oJ3wnKTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5qb2luKCcsJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGFyc2UgYSBwYXJhbWV0ZXIsIGxpa2UgXCIuLi5udW1iZXIgfCBib29sZWFuXCJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1cbiAgICAgKiBAcGFyYW0ge0NvbnZlcnNpb25EZWZbXX0gY29udmVyc2lvbnNcbiAgICAgKiBAcmV0dXJuIHtQYXJhbX0gcGFyYW1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwYXJzZVBhcmFtIChwYXJhbSwgY29udmVyc2lvbnMpIHtcbiAgICAgIHZhciByZXN0UGFyYW0gPSBwYXJhbS5pbmRleE9mKCcuLi4nKSA9PT0gMDtcbiAgICAgIHZhciB0eXBlcyA9ICghcmVzdFBhcmFtKVxuICAgICAgICAgID8gcGFyYW1cbiAgICAgICAgICA6IChwYXJhbS5sZW5ndGggPiAzKVxuICAgICAgICAgICAgICA/IHBhcmFtLnNsaWNlKDMpXG4gICAgICAgICAgICAgIDogJ2FueSc7XG5cbiAgICAgIHZhciB0eXBlTmFtZXMgPSB0eXBlcy5zcGxpdCgnfCcpLm1hcCh0cmltKVxuICAgICAgICAgIC5maWx0ZXIobm90RW1wdHkpXG4gICAgICAgICAgLmZpbHRlcihub3RJZ25vcmUpO1xuXG4gICAgICB2YXIgbWF0Y2hpbmdDb252ZXJzaW9ucyA9IGZpbHRlckNvbnZlcnNpb25zKGNvbnZlcnNpb25zLCB0eXBlTmFtZXMpO1xuXG4gICAgICB2YXIgZXhhY3RUeXBlcyA9IHR5cGVOYW1lcy5tYXAoZnVuY3Rpb24gKHR5cGVOYW1lKSB7XG4gICAgICAgIHZhciB0eXBlID0gZmluZFR5cGVCeU5hbWUodHlwZU5hbWUpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogdHlwZU5hbWUsXG4gICAgICAgICAgdHlwZUluZGV4OiBmaW5kVHlwZUluZGV4KHR5cGUpLFxuICAgICAgICAgIHRlc3Q6IHR5cGUudGVzdCxcbiAgICAgICAgICBjb252ZXJzaW9uOiBudWxsLFxuICAgICAgICAgIGNvbnZlcnNpb25JbmRleDogLTFcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgY29udmVydGlibGVUeXBlcyA9IG1hdGNoaW5nQ29udmVyc2lvbnMubWFwKGZ1bmN0aW9uIChjb252ZXJzaW9uKSB7XG4gICAgICAgIHZhciB0eXBlID0gZmluZFR5cGVCeU5hbWUoY29udmVyc2lvbi5mcm9tKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IGNvbnZlcnNpb24uZnJvbSxcbiAgICAgICAgICB0eXBlSW5kZXg6IGZpbmRUeXBlSW5kZXgodHlwZSksXG4gICAgICAgICAgdGVzdDogdHlwZS50ZXN0LFxuICAgICAgICAgIGNvbnZlcnNpb246IGNvbnZlcnNpb24sXG4gICAgICAgICAgY29udmVyc2lvbkluZGV4OiBjb252ZXJzaW9ucy5pbmRleE9mKGNvbnZlcnNpb24pXG4gICAgICAgIH07XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZXM6IGV4YWN0VHlwZXMuY29uY2F0KGNvbnZlcnRpYmxlVHlwZXMpLFxuICAgICAgICByZXN0UGFyYW06IHJlc3RQYXJhbVxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYXJzZSBhIHNpZ25hdHVyZSB3aXRoIGNvbW1hIHNlcGFyYXRlZCBwYXJhbWV0ZXJzLFxuICAgICAqIGxpa2UgXCJudW1iZXIgfCBib29sZWFuLCAuLi5zdHJpbmdcIlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzaWduYXR1cmVcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBmblxuICAgICAqIEBwYXJhbSB7Q29udmVyc2lvbkRlZltdfSBjb252ZXJzaW9uc1xuICAgICAqIEByZXR1cm4ge1NpZ25hdHVyZSB8IG51bGx9IHNpZ25hdHVyZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHBhcnNlU2lnbmF0dXJlIChzaWduYXR1cmUsIGZuLCBjb252ZXJzaW9ucykge1xuICAgICAgdmFyIHBhcmFtcyA9IFtdO1xuXG4gICAgICBpZiAoc2lnbmF0dXJlLnRyaW0oKSAhPT0gJycpIHtcbiAgICAgICAgcGFyYW1zID0gc2lnbmF0dXJlXG4gICAgICAgICAgICAuc3BsaXQoJywnKVxuICAgICAgICAgICAgLm1hcCh0cmltKVxuICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAocGFyYW0sIGluZGV4LCBhcnJheSkge1xuICAgICAgICAgICAgICB2YXIgcGFyc2VkUGFyYW0gPSBwYXJzZVBhcmFtKHBhcmFtLCBjb252ZXJzaW9ucyk7XG5cbiAgICAgICAgICAgICAgaWYgKHBhcnNlZFBhcmFtLnJlc3RQYXJhbSAmJiAoaW5kZXggIT09IGFycmF5Lmxlbmd0aCAtIDEpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdVbmV4cGVjdGVkIHJlc3QgcGFyYW1ldGVyIFwiJyArIHBhcmFtICsgJ1wiOiAnICtcbiAgICAgICAgICAgICAgICAgICAgJ29ubHkgYWxsb3dlZCBmb3IgdGhlIGxhc3QgcGFyYW1ldGVyJyk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gcGFyc2VkUGFyYW07XG4gICAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJhbXMuc29tZShpc0ludmFsaWRQYXJhbSkpIHtcbiAgICAgICAgLy8gaW52YWxpZCBzaWduYXR1cmU6IGF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIgaGFzIG5vIHR5cGVzXG4gICAgICAgIC8vICh0aGV5IG1heSBoYXZlIGJlZW4gZmlsdGVyZWQpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYXJhbXM6IHBhcmFtcyxcbiAgICAgICAgZm46IGZuXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRlc3Qgd2hldGhlciBhIHNldCBvZiBwYXJhbXMgY29udGFpbnMgYSByZXN0UGFyYW1cbiAgICAgKiBAcGFyYW0ge1BhcmFtW119IHBhcmFtc1xuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSB3aGVuIHRoZSBsYXN0IHBhcmFtZXRlciBpcyBhIHJlc3RQYXJhbVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGhhc1Jlc3RQYXJhbShwYXJhbXMpIHtcbiAgICAgIHZhciBwYXJhbSA9IGxhc3QocGFyYW1zKVxuICAgICAgcmV0dXJuIHBhcmFtID8gcGFyYW0ucmVzdFBhcmFtIDogZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGVzdCB3aGV0aGVyIGEgcGFyYW1ldGVyIGNvbnRhaW5zIGNvbnZlcnNpb25zXG4gICAgICogQHBhcmFtIHtQYXJhbX0gcGFyYW1cbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgd2hlbiBhdCBsZWFzdCBvbmUgb2YgdGhlIHBhcmFtZXRlcnNcbiAgICAgKiAgICAgICAgICAgICAgICAgICBjb250YWlucyBhIGNvbnZlcnNpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gaGFzQ29udmVyc2lvbnMocGFyYW0pIHtcbiAgICAgIHJldHVybiBwYXJhbS50eXBlcy5zb21lKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICAgIHJldHVybiB0eXBlLmNvbnZlcnNpb24gIT0gbnVsbDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIHR5cGUgdGVzdCBmb3IgYSBzaW5nbGUgcGFyYW1ldGVyLCB3aGljaCBjYW4gaGF2ZSBvbmUgb3IgbXVsdGlwbGVcbiAgICAgKiB0eXBlcy5cbiAgICAgKiBAcGFyYW0ge1BhcmFtfSBwYXJhbVxuICAgICAqIEByZXR1cm4ge2Z1bmN0aW9uKHg6ICopIDogYm9vbGVhbn0gUmV0dXJucyBhIHRlc3QgZnVuY3Rpb25cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb21waWxlVGVzdChwYXJhbSkge1xuICAgICAgaWYgKCFwYXJhbSB8fCBwYXJhbS50eXBlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gbm90aGluZyB0byBkb1xuICAgICAgICByZXR1cm4gb2s7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChwYXJhbS50eXBlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGZpbmRUeXBlQnlOYW1lKHBhcmFtLnR5cGVzWzBdLm5hbWUpLnRlc3Q7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChwYXJhbS50eXBlcy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgdmFyIHRlc3QwID0gZmluZFR5cGVCeU5hbWUocGFyYW0udHlwZXNbMF0ubmFtZSkudGVzdDtcbiAgICAgICAgdmFyIHRlc3QxID0gZmluZFR5cGVCeU5hbWUocGFyYW0udHlwZXNbMV0ubmFtZSkudGVzdDtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG9yKHgpIHtcbiAgICAgICAgICByZXR1cm4gdGVzdDAoeCkgfHwgdGVzdDEoeCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2UgeyAvLyBwYXJhbS50eXBlcy5sZW5ndGggPiAyXG4gICAgICAgIHZhciB0ZXN0cyA9IHBhcmFtLnR5cGVzLm1hcChmdW5jdGlvbiAodHlwZSkge1xuICAgICAgICAgIHJldHVybiBmaW5kVHlwZUJ5TmFtZSh0eXBlLm5hbWUpLnRlc3Q7XG4gICAgICAgIH0pXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBvcih4KSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRlc3RzW2ldKHgpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSB0ZXN0IGZvciBhbGwgcGFyYW1ldGVycyBvZiBhIHNpZ25hdHVyZVxuICAgICAqIEBwYXJhbSB7UGFyYW1bXX0gcGFyYW1zXG4gICAgICogQHJldHVybiB7ZnVuY3Rpb24oYXJnczogQXJyYXk8Kj4pIDogYm9vbGVhbn1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb21waWxlVGVzdHMocGFyYW1zKSB7XG4gICAgICB2YXIgdGVzdHMsIHRlc3QwLCB0ZXN0MTtcblxuICAgICAgaWYgKGhhc1Jlc3RQYXJhbShwYXJhbXMpKSB7XG4gICAgICAgIC8vIHZhcmlhYmxlIGFyZ3VtZW50cyBsaWtlICcuLi5udW1iZXInXG4gICAgICAgIHRlc3RzID0gaW5pdGlhbChwYXJhbXMpLm1hcChjb21waWxlVGVzdCk7XG4gICAgICAgIHZhciB2YXJJbmRleCA9IHRlc3RzLmxlbmd0aDtcbiAgICAgICAgdmFyIGxhc3RUZXN0ID0gY29tcGlsZVRlc3QobGFzdChwYXJhbXMpKTtcbiAgICAgICAgdmFyIHRlc3RSZXN0UGFyYW0gPSBmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgIGZvciAodmFyIGkgPSB2YXJJbmRleDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICghbGFzdFRlc3QoYXJnc1tpXSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiB0ZXN0QXJncyhhcmdzKSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKCF0ZXN0c1tpXShhcmdzW2ldKSkge1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0ZXN0UmVzdFBhcmFtKGFyZ3MpICYmIChhcmdzLmxlbmd0aCA+PSB2YXJJbmRleCArIDEpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIC8vIG5vIHZhcmlhYmxlIGFyZ3VtZW50c1xuICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBmdW5jdGlvbiB0ZXN0QXJncyhhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJncy5sZW5ndGggPT09IDA7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwYXJhbXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgdGVzdDAgPSBjb21waWxlVGVzdChwYXJhbXNbMF0pO1xuICAgICAgICAgIHJldHVybiBmdW5jdGlvbiB0ZXN0QXJncyhhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGVzdDAoYXJnc1swXSkgJiYgYXJncy5sZW5ndGggPT09IDE7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwYXJhbXMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgdGVzdDAgPSBjb21waWxlVGVzdChwYXJhbXNbMF0pO1xuICAgICAgICAgIHRlc3QxID0gY29tcGlsZVRlc3QocGFyYW1zWzFdKTtcbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gdGVzdEFyZ3MoYXJncykge1xuICAgICAgICAgICAgcmV0dXJuIHRlc3QwKGFyZ3NbMF0pICYmIHRlc3QxKGFyZ3NbMV0pICYmIGFyZ3MubGVuZ3RoID09PSAyO1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7IC8vIGFyZ3VtZW50cy5sZW5ndGggPiAyXG4gICAgICAgICAgdGVzdHMgPSBwYXJhbXMubWFwKGNvbXBpbGVUZXN0KTtcbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gdGVzdEFyZ3MoYXJncykge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBpZiAoIXRlc3RzW2ldKGFyZ3NbaV0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYXJncy5sZW5ndGggPT09IHRlc3RzLmxlbmd0aDtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmluZCB0aGUgcGFyYW1ldGVyIGF0IGEgc3BlY2lmaWMgaW5kZXggb2YgYSBzaWduYXR1cmUuXG4gICAgICogSGFuZGxlcyByZXN0IHBhcmFtZXRlcnMuXG4gICAgICogQHBhcmFtIHtTaWduYXR1cmV9IHNpZ25hdHVyZVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICAgICAqIEByZXR1cm4ge1BhcmFtIHwgbnVsbH0gUmV0dXJucyB0aGUgbWF0Y2hpbmcgcGFyYW1ldGVyIHdoZW4gZm91bmQsXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICBudWxsIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRQYXJhbUF0SW5kZXgoc2lnbmF0dXJlLCBpbmRleCkge1xuICAgICAgcmV0dXJuIGluZGV4IDwgc2lnbmF0dXJlLnBhcmFtcy5sZW5ndGhcbiAgICAgICAgICA/IHNpZ25hdHVyZS5wYXJhbXNbaW5kZXhdXG4gICAgICAgICAgOiBoYXNSZXN0UGFyYW0oc2lnbmF0dXJlLnBhcmFtcylcbiAgICAgICAgICAgICAgPyBsYXN0KHNpZ25hdHVyZS5wYXJhbXMpXG4gICAgICAgICAgICAgIDogbnVsbFxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBhbGwgdHlwZSBuYW1lcyBvZiBhIHBhcmFtZXRlclxuICAgICAqIEBwYXJhbSB7U2lnbmF0dXJlfSBzaWduYXR1cmVcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV4Y2x1ZGVDb252ZXJzaW9uc1xuICAgICAqIEByZXR1cm4ge3N0cmluZ1tdfSBSZXR1cm5zIGFuIGFycmF5IHdpdGggdHlwZSBuYW1lc1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldEV4cGVjdGVkVHlwZU5hbWVzIChzaWduYXR1cmUsIGluZGV4LCBleGNsdWRlQ29udmVyc2lvbnMpIHtcbiAgICAgIHZhciBwYXJhbSA9IGdldFBhcmFtQXRJbmRleChzaWduYXR1cmUsIGluZGV4KTtcbiAgICAgIHZhciB0eXBlcyA9IHBhcmFtXG4gICAgICAgICAgPyBleGNsdWRlQ29udmVyc2lvbnNcbiAgICAgICAgICAgICAgICAgID8gcGFyYW0udHlwZXMuZmlsdGVyKGlzRXhhY3RUeXBlKVxuICAgICAgICAgICAgICAgICAgOiBwYXJhbS50eXBlc1xuICAgICAgICAgIDogW107XG5cbiAgICAgIHJldHVybiB0eXBlcy5tYXAoZ2V0VHlwZU5hbWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG5hbWUgb2YgYSB0eXBlXG4gICAgICogQHBhcmFtIHtUeXBlfSB0eXBlXG4gICAgICogQHJldHVybiB7c3RyaW5nfSBSZXR1cm5zIHRoZSB0eXBlIG5hbWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRUeXBlTmFtZSh0eXBlKSB7XG4gICAgICByZXR1cm4gdHlwZS5uYW1lO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRlc3Qgd2hldGhlciBhIHR5cGUgaXMgYW4gZXhhY3QgdHlwZSBvciBjb252ZXJzaW9uXG4gICAgICogQHBhcmFtIHtUeXBlfSB0eXBlXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIHdoZW5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0V4YWN0VHlwZSh0eXBlKSB7XG4gICAgICByZXR1cm4gdHlwZS5jb252ZXJzaW9uID09PSBudWxsIHx8IHR5cGUuY29udmVyc2lvbiA9PT0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhlbHBlciBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgZXJyb3IgbWVzc2FnZXM6IGNyZWF0ZSBhbiBhcnJheSB3aXRoXG4gICAgICogYWxsIGF2YWlsYWJsZSB0eXBlcyBvbiBhIHNwZWNpZmljIGFyZ3VtZW50IGluZGV4LlxuICAgICAqIEBwYXJhbSB7U2lnbmF0dXJlW119IHNpZ25hdHVyZXNcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmdbXX0gUmV0dXJucyBhbiBhcnJheSB3aXRoIGF2YWlsYWJsZSB0eXBlc1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1lcmdlRXhwZWN0ZWRQYXJhbXMoc2lnbmF0dXJlcywgaW5kZXgpIHtcbiAgICAgIHZhciB0eXBlTmFtZXMgPSB1bmlxKGZsYXRNYXAoc2lnbmF0dXJlcywgZnVuY3Rpb24gKHNpZ25hdHVyZSkge1xuICAgICAgICByZXR1cm4gZ2V0RXhwZWN0ZWRUeXBlTmFtZXMoc2lnbmF0dXJlLCBpbmRleCwgZmFsc2UpO1xuICAgICAgfSkpO1xuXG4gICAgICByZXR1cm4gKHR5cGVOYW1lcy5pbmRleE9mKCdhbnknKSAhPT0gLTEpID8gWydhbnknXSA6IHR5cGVOYW1lcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAgICAgICAgICAgICBUaGUgbmFtZSBvZiB0aGUgZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge2FycmF5LjwqPn0gYXJncyAgICAgICAgICBUaGUgYWN0dWFsIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtTaWduYXR1cmVbXX0gc2lnbmF0dXJlcyAgQSBsaXN0IHdpdGggYXZhaWxhYmxlIHNpZ25hdHVyZXNcbiAgICAgKiBAcmV0dXJuIHtUeXBlRXJyb3J9IFJldHVybnMgYSB0eXBlIGVycm9yIHdpdGggYWRkaXRpb25hbCBkYXRhXG4gICAgICogICAgICAgICAgICAgICAgICAgICBhdHRhY2hlZCB0byBpdCBpbiB0aGUgcHJvcGVydHkgYGRhdGFgXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlRXJyb3IobmFtZSwgYXJncywgc2lnbmF0dXJlcykge1xuICAgICAgdmFyIGVyciwgZXhwZWN0ZWQ7XG4gICAgICB2YXIgX25hbWUgPSBuYW1lIHx8ICd1bm5hbWVkJztcblxuICAgICAgLy8gdGVzdCBmb3Igd3JvbmcgdHlwZSBhdCBzb21lIGluZGV4XG4gICAgICB2YXIgbWF0Y2hpbmdTaWduYXR1cmVzID0gc2lnbmF0dXJlcztcbiAgICAgIHZhciBpbmRleDtcbiAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFyZ3MubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIHZhciBuZXh0TWF0Y2hpbmdEZWZzID0gbWF0Y2hpbmdTaWduYXR1cmVzLmZpbHRlcihmdW5jdGlvbiAoc2lnbmF0dXJlKSB7XG4gICAgICAgICAgdmFyIHRlc3QgPSBjb21waWxlVGVzdChnZXRQYXJhbUF0SW5kZXgoc2lnbmF0dXJlLCBpbmRleCkpO1xuICAgICAgICAgIHJldHVybiAoaW5kZXggPCBzaWduYXR1cmUucGFyYW1zLmxlbmd0aCB8fCBoYXNSZXN0UGFyYW0oc2lnbmF0dXJlLnBhcmFtcykpICYmXG4gICAgICAgICAgICAgIHRlc3QoYXJnc1tpbmRleF0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAobmV4dE1hdGNoaW5nRGVmcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAvLyBubyBtYXRjaGluZyBzaWduYXR1cmVzIGFueW1vcmUsIHRocm93IGVycm9yIFwid3JvbmcgdHlwZVwiXG4gICAgICAgICAgZXhwZWN0ZWQgPSBtZXJnZUV4cGVjdGVkUGFyYW1zKG1hdGNoaW5nU2lnbmF0dXJlcywgaW5kZXgpO1xuICAgICAgICAgIGlmIChleHBlY3RlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB2YXIgYWN0dWFsVHlwZSA9IGZpbmRUeXBlTmFtZShhcmdzW2luZGV4XSk7XG5cbiAgICAgICAgICAgIGVyciA9IG5ldyBUeXBlRXJyb3IoJ1VuZXhwZWN0ZWQgdHlwZSBvZiBhcmd1bWVudCBpbiBmdW5jdGlvbiAnICsgX25hbWUgK1xuICAgICAgICAgICAgICAgICcgKGV4cGVjdGVkOiAnICsgZXhwZWN0ZWQuam9pbignIG9yICcpICtcbiAgICAgICAgICAgICAgICAnLCBhY3R1YWw6ICcgKyBhY3R1YWxUeXBlICsgJywgaW5kZXg6ICcgKyBpbmRleCArICcpJyk7XG4gICAgICAgICAgICBlcnIuZGF0YSA9IHtcbiAgICAgICAgICAgICAgY2F0ZWdvcnk6ICd3cm9uZ1R5cGUnLFxuICAgICAgICAgICAgICBmbjogX25hbWUsXG4gICAgICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICAgICAgYWN0dWFsOiBhY3R1YWxUeXBlLFxuICAgICAgICAgICAgICBleHBlY3RlZDogZXhwZWN0ZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlcnI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIG1hdGNoaW5nU2lnbmF0dXJlcyA9IG5leHRNYXRjaGluZ0RlZnM7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gdGVzdCBmb3IgdG9vIGZldyBhcmd1bWVudHNcbiAgICAgIHZhciBsZW5ndGhzID0gbWF0Y2hpbmdTaWduYXR1cmVzLm1hcChmdW5jdGlvbiAoc2lnbmF0dXJlKSB7XG4gICAgICAgIHJldHVybiBoYXNSZXN0UGFyYW0oc2lnbmF0dXJlLnBhcmFtcykgPyBJbmZpbml0eSA6IHNpZ25hdHVyZS5wYXJhbXMubGVuZ3RoO1xuICAgICAgfSk7XG4gICAgICBpZiAoYXJncy5sZW5ndGggPCBNYXRoLm1pbi5hcHBseShudWxsLCBsZW5ndGhzKSkge1xuICAgICAgICBleHBlY3RlZCA9IG1lcmdlRXhwZWN0ZWRQYXJhbXMobWF0Y2hpbmdTaWduYXR1cmVzLCBpbmRleCk7XG4gICAgICAgIGVyciA9IG5ldyBUeXBlRXJyb3IoJ1RvbyBmZXcgYXJndW1lbnRzIGluIGZ1bmN0aW9uICcgKyBfbmFtZSArXG4gICAgICAgICAgICAnIChleHBlY3RlZDogJyArIGV4cGVjdGVkLmpvaW4oJyBvciAnKSArXG4gICAgICAgICAgICAnLCBpbmRleDogJyArIGFyZ3MubGVuZ3RoICsgJyknKTtcbiAgICAgICAgZXJyLmRhdGEgPSB7XG4gICAgICAgICAgY2F0ZWdvcnk6ICd0b29GZXdBcmdzJyxcbiAgICAgICAgICBmbjogX25hbWUsXG4gICAgICAgICAgaW5kZXg6IGFyZ3MubGVuZ3RoLFxuICAgICAgICAgIGV4cGVjdGVkOiBleHBlY3RlZFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlcnI7XG4gICAgICB9XG5cbiAgICAgIC8vIHRlc3QgZm9yIHRvbyBtYW55IGFyZ3VtZW50c1xuICAgICAgdmFyIG1heExlbmd0aCA9IE1hdGgubWF4LmFwcGx5KG51bGwsIGxlbmd0aHMpO1xuICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gbWF4TGVuZ3RoKSB7XG4gICAgICAgIGVyciA9IG5ldyBUeXBlRXJyb3IoJ1RvbyBtYW55IGFyZ3VtZW50cyBpbiBmdW5jdGlvbiAnICsgX25hbWUgK1xuICAgICAgICAgICAgJyAoZXhwZWN0ZWQ6ICcgKyBtYXhMZW5ndGggKyAnLCBhY3R1YWw6ICcgKyBhcmdzLmxlbmd0aCArICcpJyk7XG4gICAgICAgIGVyci5kYXRhID0ge1xuICAgICAgICAgIGNhdGVnb3J5OiAndG9vTWFueUFyZ3MnLFxuICAgICAgICAgIGZuOiBfbmFtZSxcbiAgICAgICAgICBpbmRleDogYXJncy5sZW5ndGgsXG4gICAgICAgICAgZXhwZWN0ZWRMZW5ndGg6IG1heExlbmd0aFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlcnI7XG4gICAgICB9XG5cbiAgICAgIGVyciA9IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyBvZiB0eXBlIFwiJyArIGFyZ3Muam9pbignLCAnKSArXG4gICAgICAgICAgJ1wiIGRvIG5vdCBtYXRjaCBhbnkgb2YgdGhlIGRlZmluZWQgc2lnbmF0dXJlcyBvZiBmdW5jdGlvbiAnICsgX25hbWUgKyAnLicpO1xuICAgICAgZXJyLmRhdGEgPSB7XG4gICAgICAgIGNhdGVnb3J5OiAnbWlzbWF0Y2gnLFxuICAgICAgICBhY3R1YWw6IGFyZ3MubWFwKGZpbmRUeXBlTmFtZSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBlcnI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmluZCB0aGUgbG93ZXN0IGluZGV4IG9mIGFsbCBleGFjdCB0eXBlcyBvZiBhIHBhcmFtZXRlciAobm8gY29udmVyc2lvbnMpXG4gICAgICogQHBhcmFtIHtQYXJhbX0gcGFyYW1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBsb3dlc3QgdHlwZSBpbiB0eXBlZC50eXBlc1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldExvd2VzdFR5cGVJbmRleCAocGFyYW0pIHtcbiAgICAgIHZhciBtaW4gPSA5OTk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW0udHlwZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGlzRXhhY3RUeXBlKHBhcmFtLnR5cGVzW2ldKSkge1xuICAgICAgICAgIG1pbiA9IE1hdGgubWluKG1pbiwgcGFyYW0udHlwZXNbaV0udHlwZUluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbWluO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbmQgdGhlIGxvd2VzdCBpbmRleCBvZiB0aGUgY29udmVyc2lvbiBvZiBhbGwgdHlwZXMgb2YgdGhlIHBhcmFtZXRlclxuICAgICAqIGhhdmluZyBhIGNvbnZlcnNpb25cbiAgICAgKiBAcGFyYW0ge1BhcmFtfSBwYXJhbVxuICAgICAqIEByZXR1cm4ge251bWJlcn0gUmV0dXJucyB0aGUgbG93ZXN0IGluZGV4IG9mIHRoZSBjb252ZXJzaW9ucyBvZiB0aGlzIHR5cGVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRMb3dlc3RDb252ZXJzaW9uSW5kZXggKHBhcmFtKSB7XG4gICAgICB2YXIgbWluID0gOTk5O1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtLnR5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghaXNFeGFjdFR5cGUocGFyYW0udHlwZXNbaV0pKSB7XG4gICAgICAgICAgbWluID0gTWF0aC5taW4obWluLCBwYXJhbS50eXBlc1tpXS5jb252ZXJzaW9uSW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBtaW47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29tcGFyZSB0d28gcGFyYW1zXG4gICAgICogQHBhcmFtIHtQYXJhbX0gcGFyYW0xXG4gICAgICogQHBhcmFtIHtQYXJhbX0gcGFyYW0yXG4gICAgICogQHJldHVybiB7bnVtYmVyfSByZXR1cm5zIGEgbmVnYXRpdmUgbnVtYmVyIHdoZW4gcGFyYW0xIG11c3QgZ2V0IGEgbG93ZXJcbiAgICAgKiAgICAgICAgICAgICAgICAgIGluZGV4IHRoYW4gcGFyYW0yLCBhIHBvc2l0aXZlIG51bWJlciB3aGVuIHRoZSBvcHBvc2l0ZSxcbiAgICAgKiAgICAgICAgICAgICAgICAgIG9yIHplcm8gd2hlbiBib3RoIGFyZSBlcXVhbFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbXBhcmVQYXJhbXMgKHBhcmFtMSwgcGFyYW0yKSB7XG4gICAgICB2YXIgYztcblxuICAgICAgLy8gY29tcGFyZSBoYXZpbmcgYSByZXN0IHBhcmFtZXRlciBvciBub3RcbiAgICAgIGMgPSBwYXJhbTEucmVzdFBhcmFtIC0gcGFyYW0yLnJlc3RQYXJhbTtcbiAgICAgIGlmIChjICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBjO1xuICAgICAgfVxuXG4gICAgICAvLyBjb21wYXJlIGhhdmluZyBjb252ZXJzaW9ucyBvciBub3RcbiAgICAgIGMgPSBoYXNDb252ZXJzaW9ucyhwYXJhbTEpIC0gaGFzQ29udmVyc2lvbnMocGFyYW0yKTtcbiAgICAgIGlmIChjICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBjO1xuICAgICAgfVxuXG4gICAgICAvLyBjb21wYXJlIHRoZSBpbmRleCBvZiB0aGUgdHlwZXNcbiAgICAgIGMgPSBnZXRMb3dlc3RUeXBlSW5kZXgocGFyYW0xKSAtIGdldExvd2VzdFR5cGVJbmRleChwYXJhbTIpO1xuICAgICAgaWYgKGMgIT09IDApIHtcbiAgICAgICAgcmV0dXJuIGM7XG4gICAgICB9XG5cbiAgICAgIC8vIGNvbXBhcmUgdGhlIGluZGV4IG9mIGFueSBjb252ZXJzaW9uXG4gICAgICByZXR1cm4gZ2V0TG93ZXN0Q29udmVyc2lvbkluZGV4KHBhcmFtMSkgLSBnZXRMb3dlc3RDb252ZXJzaW9uSW5kZXgocGFyYW0yKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21wYXJlIHR3byBzaWduYXR1cmVzXG4gICAgICogQHBhcmFtIHtTaWduYXR1cmV9IHNpZ25hdHVyZTFcbiAgICAgKiBAcGFyYW0ge1NpZ25hdHVyZX0gc2lnbmF0dXJlMlxuICAgICAqIEByZXR1cm4ge251bWJlcn0gcmV0dXJucyBhIG5lZ2F0aXZlIG51bWJlciB3aGVuIHBhcmFtMSBtdXN0IGdldCBhIGxvd2VyXG4gICAgICogICAgICAgICAgICAgICAgICBpbmRleCB0aGFuIHBhcmFtMiwgYSBwb3NpdGl2ZSBudW1iZXIgd2hlbiB0aGUgb3Bwb3NpdGUsXG4gICAgICogICAgICAgICAgICAgICAgICBvciB6ZXJvIHdoZW4gYm90aCBhcmUgZXF1YWxcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb21wYXJlU2lnbmF0dXJlcyAoc2lnbmF0dXJlMSwgc2lnbmF0dXJlMikge1xuICAgICAgdmFyIGxlbiA9IE1hdGgubWluKHNpZ25hdHVyZTEucGFyYW1zLmxlbmd0aCwgc2lnbmF0dXJlMi5wYXJhbXMubGVuZ3RoKTtcbiAgICAgIHZhciBpO1xuICAgICAgdmFyIGM7XG5cbiAgICAgIC8vIGNvbXBhcmUgd2hldGhlciB0aGUgcGFyYW1zIGhhdmUgY29udmVyc2lvbnMgYXQgYWxsIG9yIG5vdFxuICAgICAgYyA9IHNpZ25hdHVyZTEucGFyYW1zLnNvbWUoaGFzQ29udmVyc2lvbnMpIC0gc2lnbmF0dXJlMi5wYXJhbXMuc29tZShoYXNDb252ZXJzaW9ucylcbiAgICAgIGlmIChjICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBjO1xuICAgICAgfVxuXG4gICAgICAvLyBuZXh0IGNvbXBhcmUgd2hldGhlciB0aGUgcGFyYW1zIGhhdmUgY29udmVyc2lvbnMgb25lIGJ5IG9uZVxuICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGMgPSBoYXNDb252ZXJzaW9ucyhzaWduYXR1cmUxLnBhcmFtc1tpXSkgLSBoYXNDb252ZXJzaW9ucyhzaWduYXR1cmUyLnBhcmFtc1tpXSk7XG4gICAgICAgIGlmIChjICE9PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIGM7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gY29tcGFyZSB0aGUgdHlwZXMgb2YgdGhlIHBhcmFtcyBvbmUgYnkgb25lXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgYyA9IGNvbXBhcmVQYXJhbXMoc2lnbmF0dXJlMS5wYXJhbXNbaV0sIHNpZ25hdHVyZTIucGFyYW1zW2ldKTtcbiAgICAgICAgaWYgKGMgIT09IDApIHtcbiAgICAgICAgICByZXR1cm4gYztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBjb21wYXJlIHRoZSBudW1iZXIgb2YgcGFyYW1zXG4gICAgICByZXR1cm4gc2lnbmF0dXJlMS5wYXJhbXMubGVuZ3RoIC0gc2lnbmF0dXJlMi5wYXJhbXMubGVuZ3RoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBwYXJhbXMgY29udGFpbmluZyBhbGwgdHlwZXMgdGhhdCBjYW4gYmUgY29udmVydGVkIHRvIHRoZSBkZWZpbmVkIHR5cGVzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtDb252ZXJzaW9uRGVmW119IGNvbnZlcnNpb25zXG4gICAgICogQHBhcmFtIHtzdHJpbmdbXX0gdHlwZU5hbWVzXG4gICAgICogQHJldHVybiB7Q29udmVyc2lvbkRlZltdfSBSZXR1cm5zIHRoZSBjb252ZXJzaW9ucyB0aGF0IGFyZSBhdmFpbGFibGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBldmVyeSB0eXBlIChpZiBhbnkpXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmlsdGVyQ29udmVyc2lvbnMoY29udmVyc2lvbnMsIHR5cGVOYW1lcykge1xuICAgICAgdmFyIG1hdGNoZXMgPSB7fTtcblxuICAgICAgY29udmVyc2lvbnMuZm9yRWFjaChmdW5jdGlvbiAoY29udmVyc2lvbikge1xuICAgICAgICBpZiAodHlwZU5hbWVzLmluZGV4T2YoY29udmVyc2lvbi5mcm9tKSA9PT0gLTEgJiZcbiAgICAgICAgICAgIHR5cGVOYW1lcy5pbmRleE9mKGNvbnZlcnNpb24udG8pICE9PSAtMSAmJlxuICAgICAgICAgICAgIW1hdGNoZXNbY29udmVyc2lvbi5mcm9tXSkge1xuICAgICAgICAgIG1hdGNoZXNbY29udmVyc2lvbi5mcm9tXSA9IGNvbnZlcnNpb247XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gT2JqZWN0LmtleXMobWF0Y2hlcykubWFwKGZ1bmN0aW9uIChmcm9tKSB7XG4gICAgICAgIHJldHVybiBtYXRjaGVzW2Zyb21dO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJlcHJvY2VzcyBhcmd1bWVudHMgYmVmb3JlIGNhbGxpbmcgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uOlxuICAgICAqIC0gaWYgbmVlZGVkIGNvbnZlcnQgdGhlIHBhcmFtZXRlcnNcbiAgICAgKiAtIGluIGNhc2Ugb2YgcmVzdCBwYXJhbWV0ZXJzLCBtb3ZlIHRoZSByZXN0IHBhcmFtZXRlcnMgaW50byBhbiBBcnJheVxuICAgICAqIEBwYXJhbSB7UGFyYW1bXX0gcGFyYW1zXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gZm5cbiAgICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIHdyYXBwZWQgZnVuY3Rpb25cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb21waWxlQXJnc1ByZXByb2Nlc3NpbmcocGFyYW1zLCBmbikge1xuICAgICAgdmFyIGZuQ29udmVydCA9IGZuO1xuXG4gICAgICAvLyBUT0RPOiBjYW4gd2UgbWFrZSB0aGlzIHdyYXBwZXIgZnVuY3Rpb24gc21hcnRlci9zaW1wbGVyP1xuXG4gICAgICBpZiAocGFyYW1zLnNvbWUoaGFzQ29udmVyc2lvbnMpKSB7XG4gICAgICAgIHZhciByZXN0UGFyYW0gPSBoYXNSZXN0UGFyYW0ocGFyYW1zKTtcbiAgICAgICAgdmFyIGNvbXBpbGVkQ29udmVyc2lvbnMgPSBwYXJhbXMubWFwKGNvbXBpbGVBcmdDb252ZXJzaW9uKVxuXG4gICAgICAgIGZuQ29udmVydCA9IGZ1bmN0aW9uIGNvbnZlcnRBcmdzKCkge1xuICAgICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgICAgdmFyIGxhc3QgPSByZXN0UGFyYW0gPyBhcmd1bWVudHMubGVuZ3RoIC0gMSA6IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXN0OyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaV0gPSBjb21waWxlZENvbnZlcnNpb25zW2ldKGFyZ3VtZW50c1tpXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChyZXN0UGFyYW0pIHtcbiAgICAgICAgICAgIGFyZ3NbbGFzdF0gPSBhcmd1bWVudHNbbGFzdF0ubWFwKGNvbXBpbGVkQ29udmVyc2lvbnNbbGFzdF0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBmbi5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgZm5QcmVwcm9jZXNzID0gZm5Db252ZXJ0O1xuICAgICAgaWYgKGhhc1Jlc3RQYXJhbShwYXJhbXMpKSB7XG4gICAgICAgIHZhciBvZmZzZXQgPSBwYXJhbXMubGVuZ3RoIC0gMTtcblxuICAgICAgICBmblByZXByb2Nlc3MgPSBmdW5jdGlvbiBwcmVwcm9jZXNzUmVzdFBhcmFtcyAoKSB7XG4gICAgICAgICAgcmV0dXJuIGZuQ29udmVydC5hcHBseShudWxsLFxuICAgICAgICAgICAgICBzbGljZShhcmd1bWVudHMsIDAsIG9mZnNldCkuY29uY2F0KFtzbGljZShhcmd1bWVudHMsIG9mZnNldCldKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZuUHJlcHJvY2VzcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21waWxlIGNvbnZlcnNpb24gZm9yIGEgcGFyYW1ldGVyIHRvIHRoZSByaWdodCB0eXBlXG4gICAgICogQHBhcmFtIHtQYXJhbX0gcGFyYW1cbiAgICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyB0aGUgd3JhcHBlZCBmdW5jdGlvbiB0aGF0IHdpbGwgY29udmVydCBhcmd1bWVudHNcbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbXBpbGVBcmdDb252ZXJzaW9uKHBhcmFtKSB7XG4gICAgICB2YXIgdGVzdDAsIHRlc3QxLCBjb252ZXJzaW9uMCwgY29udmVyc2lvbjE7XG4gICAgICB2YXIgdGVzdHMgPSBbXTtcbiAgICAgIHZhciBjb252ZXJzaW9ucyA9IFtdO1xuXG4gICAgICBwYXJhbS50eXBlcy5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICAgIGlmICh0eXBlLmNvbnZlcnNpb24pIHtcbiAgICAgICAgICB0ZXN0cy5wdXNoKGZpbmRUeXBlQnlOYW1lKHR5cGUuY29udmVyc2lvbi5mcm9tKS50ZXN0KTtcbiAgICAgICAgICBjb252ZXJzaW9ucy5wdXNoKHR5cGUuY29udmVyc2lvbi5jb252ZXJ0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIGNyZWF0ZSBvcHRpbWl6ZWQgY29udmVyc2lvbiBmdW5jdGlvbnMgZGVwZW5kaW5nIG9uIHRoZSBudW1iZXIgb2YgY29udmVyc2lvbnNcbiAgICAgIHN3aXRjaCAoY29udmVyc2lvbnMubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gY29udmVydEFyZyhhcmcpIHtcbiAgICAgICAgICAgIHJldHVybiBhcmc7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICB0ZXN0MCA9IHRlc3RzWzBdXG4gICAgICAgICAgY29udmVyc2lvbjAgPSBjb252ZXJzaW9uc1swXTtcbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gY29udmVydEFyZyhhcmcpIHtcbiAgICAgICAgICAgIGlmICh0ZXN0MChhcmcpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBjb252ZXJzaW9uMChhcmcpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYXJnO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgdGVzdDAgPSB0ZXN0c1swXVxuICAgICAgICAgIHRlc3QxID0gdGVzdHNbMV1cbiAgICAgICAgICBjb252ZXJzaW9uMCA9IGNvbnZlcnNpb25zWzBdO1xuICAgICAgICAgIGNvbnZlcnNpb24xID0gY29udmVyc2lvbnNbMV07XG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNvbnZlcnRBcmcoYXJnKSB7XG4gICAgICAgICAgICBpZiAodGVzdDAoYXJnKSkge1xuICAgICAgICAgICAgICByZXR1cm4gY29udmVyc2lvbjAoYXJnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRlc3QxKGFyZykpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnNpb24xKGFyZylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhcmc7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNvbnZlcnRBcmcoYXJnKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbnZlcnNpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIGlmICh0ZXN0c1tpXShhcmcpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnNpb25zW2ldKGFyZyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhcmc7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgYW4gYXJyYXkgd2l0aCBzaWduYXR1cmVzIGludG8gYSBtYXAgd2l0aCBzaWduYXR1cmVzLFxuICAgICAqIHdoZXJlIHNpZ25hdHVyZXMgd2l0aCB1bmlvbiB0eXBlcyBhcmUgc3BsaXQgaW50byBzZXBhcmF0ZSBzaWduYXR1cmVzXG4gICAgICpcbiAgICAgKiBUaHJvd3MgYW4gZXJyb3Igd2hlbiB0aGVyZSBhcmUgY29uZmxpY3RpbmcgdHlwZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U2lnbmF0dXJlW119IHNpZ25hdHVyZXNcbiAgICAgKiBAcmV0dXJuIHtPYmplY3QuPHN0cmluZywgZnVuY3Rpb24+fSAgUmV0dXJucyBhIG1hcCB3aXRoIHNpZ25hdHVyZXNcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMga2V5IGFuZCB0aGUgb3JpZ2luYWwgZnVuY3Rpb25cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhpcyBzaWduYXR1cmUgYXMgdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlU2lnbmF0dXJlc01hcChzaWduYXR1cmVzKSB7XG4gICAgICB2YXIgc2lnbmF0dXJlc01hcCA9IHt9O1xuICAgICAgc2lnbmF0dXJlcy5mb3JFYWNoKGZ1bmN0aW9uIChzaWduYXR1cmUpIHtcbiAgICAgICAgaWYgKCFzaWduYXR1cmUucGFyYW1zLnNvbWUoaGFzQ29udmVyc2lvbnMpKSB7XG4gICAgICAgICAgc3BsaXRQYXJhbXMoc2lnbmF0dXJlLnBhcmFtcywgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgICAgICBzaWduYXR1cmVzTWFwW3N0cmluZ2lmeVBhcmFtcyhwYXJhbXMpXSA9IHNpZ25hdHVyZS5mbjtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBzaWduYXR1cmVzTWFwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNwbGl0IHBhcmFtcyB3aXRoIHVuaW9uIHR5cGVzIGluIHRvIHNlcGFyYXRlIHBhcmFtcy5cbiAgICAgKlxuICAgICAqIEZvciBleGFtcGxlOlxuICAgICAqXG4gICAgICogICAgIHNwbGl0UGFyYW1zKFtbJ0FycmF5JywgJ09iamVjdCddLCBbJ3N0cmluZycsICdSZWdFeHAnXSlcbiAgICAgKiAgICAgLy8gcmV0dXJuczpcbiAgICAgKiAgICAgLy8gW1xuICAgICAqICAgICAvLyAgIFsnQXJyYXknLCAnc3RyaW5nJ10sXG4gICAgICogICAgIC8vICAgWydBcnJheScsICdSZWdFeHAnXSxcbiAgICAgKiAgICAgLy8gICBbJ09iamVjdCcsICdzdHJpbmcnXSxcbiAgICAgKiAgICAgLy8gICBbJ09iamVjdCcsICdSZWdFeHAnXVxuICAgICAqICAgICAvLyBdXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1BhcmFtW119IHBhcmFtc1xuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaWdub3JlQ29udmVyc2lvblR5cGVzXG4gICAgICogQHJldHVybiB7UGFyYW1bXX1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzcGxpdFBhcmFtcyhwYXJhbXMsIGlnbm9yZUNvbnZlcnNpb25UeXBlcykge1xuICAgICAgZnVuY3Rpb24gX3NwbGl0UGFyYW1zKHBhcmFtcywgaW5kZXgsIHR5cGVzKSB7XG4gICAgICAgIGlmIChpbmRleCA8IHBhcmFtcy5sZW5ndGgpIHtcbiAgICAgICAgICB2YXIgcGFyYW0gPSBwYXJhbXNbaW5kZXhdXG4gICAgICAgICAgdmFyIGZpbHRlcmVkVHlwZXMgPSBpZ25vcmVDb252ZXJzaW9uVHlwZXNcbiAgICAgICAgICAgICAgPyBwYXJhbS50eXBlcy5maWx0ZXIoaXNFeGFjdFR5cGUpXG4gICAgICAgICAgICAgIDogcGFyYW0udHlwZXM7XG4gICAgICAgICAgdmFyIHR5cGVHcm91cHNcblxuICAgICAgICAgIGlmIChwYXJhbS5yZXN0UGFyYW0pIHtcbiAgICAgICAgICAgIC8vIHNwbGl0IHRoZSB0eXBlcyBvZiBhIHJlc3QgcGFyYW1ldGVyIGluIHR3bzpcbiAgICAgICAgICAgIC8vIG9uZSB3aXRoIG9ubHkgZXhhY3QgdHlwZXMsIGFuZCBvbmUgd2l0aCBleGFjdCB0eXBlcyBhbmQgY29udmVyc2lvbnNcbiAgICAgICAgICAgIHZhciBleGFjdFR5cGVzID0gZmlsdGVyZWRUeXBlcy5maWx0ZXIoaXNFeGFjdFR5cGUpXG4gICAgICAgICAgICB0eXBlR3JvdXBzID0gZXhhY3RUeXBlcy5sZW5ndGggPCBmaWx0ZXJlZFR5cGVzLmxlbmd0aFxuICAgICAgICAgICAgICAgID8gW2V4YWN0VHlwZXMsIGZpbHRlcmVkVHlwZXNdXG4gICAgICAgICAgICAgICAgOiBbZmlsdGVyZWRUeXBlc11cblxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIHNwbGl0IGFsbCB0aGUgdHlwZXMgb2YgYSByZWd1bGFyIHBhcmFtZXRlciBpbnRvIG9uZSB0eXBlIHBlciBncm91cFxuICAgICAgICAgICAgdHlwZUdyb3VwcyA9IGZpbHRlcmVkVHlwZXMubWFwKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICAgICAgICAgIHJldHVybiBbdHlwZV1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gcmVjdXJzZSBvdmVyIHRoZSBncm91cHMgd2l0aCB0eXBlc1xuICAgICAgICAgIHJldHVybiBmbGF0TWFwKHR5cGVHcm91cHMsIGZ1bmN0aW9uICh0eXBlR3JvdXApIHtcbiAgICAgICAgICAgIHJldHVybiBfc3BsaXRQYXJhbXMocGFyYW1zLCBpbmRleCArIDEsIHR5cGVzLmNvbmNhdChbdHlwZUdyb3VwXSkpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgLy8gd2UndmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBwYXJhbWV0ZXJzLiBOb3cgYnVpbGQgYSBuZXcgUGFyYW1cbiAgICAgICAgICB2YXIgc3BsaXR0ZWRQYXJhbXMgPSB0eXBlcy5tYXAoZnVuY3Rpb24gKHR5cGUsIHR5cGVJbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdHlwZXM6IHR5cGUsXG4gICAgICAgICAgICAgIHJlc3RQYXJhbTogKHR5cGVJbmRleCA9PT0gcGFyYW1zLmxlbmd0aCAtIDEpICYmIGhhc1Jlc3RQYXJhbShwYXJhbXMpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXR1cm4gW3NwbGl0dGVkUGFyYW1zXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3NwbGl0UGFyYW1zKHBhcmFtcywgMCwgW10pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRlc3Qgd2hldGhlciB0d28gc2lnbmF0dXJlcyBoYXZlIGEgY29uZmxpY3Rpbmcgc2lnbmF0dXJlXG4gICAgICogQHBhcmFtIHtTaWduYXR1cmV9IHNpZ25hdHVyZTFcbiAgICAgKiBAcGFyYW0ge1NpZ25hdHVyZX0gc2lnbmF0dXJlMlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSB3aGVuIHRoZSBzaWduYXR1cmVzIGNvbmZsaWN0LCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaGFzQ29uZmxpY3RpbmdQYXJhbXMoc2lnbmF0dXJlMSwgc2lnbmF0dXJlMikge1xuICAgICAgdmFyIGlpID0gTWF0aC5tYXgoc2lnbmF0dXJlMS5wYXJhbXMubGVuZ3RoLCBzaWduYXR1cmUyLnBhcmFtcy5sZW5ndGgpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgdmFyIHR5cGVzTmFtZXMxID0gZ2V0RXhwZWN0ZWRUeXBlTmFtZXMoc2lnbmF0dXJlMSwgaSwgdHJ1ZSk7XG4gICAgICAgIHZhciB0eXBlc05hbWVzMiA9IGdldEV4cGVjdGVkVHlwZU5hbWVzKHNpZ25hdHVyZTIsIGksIHRydWUpO1xuXG4gICAgICAgIGlmICghaGFzT3ZlcmxhcCh0eXBlc05hbWVzMSwgdHlwZXNOYW1lczIpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBsZW4xID0gc2lnbmF0dXJlMS5wYXJhbXMubGVuZ3RoO1xuICAgICAgdmFyIGxlbjIgPSBzaWduYXR1cmUyLnBhcmFtcy5sZW5ndGg7XG4gICAgICB2YXIgcmVzdFBhcmFtMSA9IGhhc1Jlc3RQYXJhbShzaWduYXR1cmUxLnBhcmFtcyk7XG4gICAgICB2YXIgcmVzdFBhcmFtMiA9IGhhc1Jlc3RQYXJhbShzaWduYXR1cmUyLnBhcmFtcyk7XG5cbiAgICAgIHJldHVybiByZXN0UGFyYW0xXG4gICAgICAgICAgPyByZXN0UGFyYW0yID8gKGxlbjEgPT09IGxlbjIpIDogKGxlbjIgPj0gbGVuMSlcbiAgICAgICAgICA6IHJlc3RQYXJhbTIgPyAobGVuMSA+PSBsZW4yKSAgOiAobGVuMSA9PT0gbGVuMilcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSB0eXBlZCBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lICAgICAgICAgICAgICAgVGhlIG5hbWUgZm9yIHRoZSB0eXBlZCBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsIGZ1bmN0aW9uPn0gc2lnbmF0dXJlc01hcFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW4gb2JqZWN0IHdpdGggb25lIG9yXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZSBzaWduYXR1cmVzIGFzIGtleSwgYW5kIHRoZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY29ycmVzcG9uZGluZyB0byB0aGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSBhcyB2YWx1ZS5cbiAgICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gIFJldHVybnMgdGhlIGNyZWF0ZWQgdHlwZWQgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlVHlwZWRGdW5jdGlvbihuYW1lLCBzaWduYXR1cmVzTWFwKSB7XG4gICAgICBpZiAoT2JqZWN0LmtleXMoc2lnbmF0dXJlc01hcCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignTm8gc2lnbmF0dXJlcyBwcm92aWRlZCcpO1xuICAgICAgfVxuXG4gICAgICAvLyBwYXJzZSB0aGUgc2lnbmF0dXJlcywgYW5kIGNoZWNrIGZvciBjb25mbGljdHNcbiAgICAgIHZhciBwYXJzZWRTaWduYXR1cmVzID0gW107XG4gICAgICBPYmplY3Qua2V5cyhzaWduYXR1cmVzTWFwKVxuICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKHNpZ25hdHVyZSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlU2lnbmF0dXJlKHNpZ25hdHVyZSwgc2lnbmF0dXJlc01hcFtzaWduYXR1cmVdLCB0eXBlZC5jb252ZXJzaW9ucyk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZmlsdGVyKG5vdE51bGwpXG4gICAgICAgICAgLmZvckVhY2goZnVuY3Rpb24gKHBhcnNlZFNpZ25hdHVyZSkge1xuICAgICAgICAgICAgLy8gY2hlY2sgd2hldGhlciB0aGlzIHBhcmFtZXRlciBjb25mbGljdHMgd2l0aCBhbHJlYWR5IHBhcnNlZCBzaWduYXR1cmVzXG4gICAgICAgICAgICB2YXIgY29uZmxpY3RpbmdTaWduYXR1cmUgPSBmaW5kSW5BcnJheShwYXJzZWRTaWduYXR1cmVzLCBmdW5jdGlvbiAocykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFzQ29uZmxpY3RpbmdQYXJhbXMocywgcGFyc2VkU2lnbmF0dXJlKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoY29uZmxpY3RpbmdTaWduYXR1cmUpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ29uZmxpY3Rpbmcgc2lnbmF0dXJlcyBcIicgK1xuICAgICAgICAgICAgICAgICAgc3RyaW5naWZ5UGFyYW1zKGNvbmZsaWN0aW5nU2lnbmF0dXJlLnBhcmFtcykgKyAnXCIgYW5kIFwiJyArXG4gICAgICAgICAgICAgICAgICBzdHJpbmdpZnlQYXJhbXMocGFyc2VkU2lnbmF0dXJlLnBhcmFtcykgKyAnXCIuJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBhcnNlZFNpZ25hdHVyZXMucHVzaChwYXJzZWRTaWduYXR1cmUpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAvLyBzcGxpdCBhbmQgZmlsdGVyIHRoZSB0eXBlcyBvZiB0aGUgc2lnbmF0dXJlcywgYW5kIHRoZW4gb3JkZXIgdGhlbVxuICAgICAgdmFyIHNpZ25hdHVyZXMgPSBmbGF0TWFwKHBhcnNlZFNpZ25hdHVyZXMsIGZ1bmN0aW9uIChwYXJzZWRTaWduYXR1cmUpIHtcbiAgICAgICAgdmFyIHBhcmFtcyA9IHBhcnNlZFNpZ25hdHVyZSA/IHNwbGl0UGFyYW1zKHBhcnNlZFNpZ25hdHVyZS5wYXJhbXMsIGZhbHNlKSA6IFtdXG5cbiAgICAgICAgcmV0dXJuIHBhcmFtcy5tYXAoZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwYXJhbXM6IHBhcmFtcyxcbiAgICAgICAgICAgIGZuOiBwYXJzZWRTaWduYXR1cmUuZm5cbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgIH0pLmZpbHRlcihub3ROdWxsKTtcblxuICAgICAgc2lnbmF0dXJlcy5zb3J0KGNvbXBhcmVTaWduYXR1cmVzKTtcblxuICAgICAgLy8gd2UgY3JlYXRlIGEgaGlnaGx5IG9wdGltaXplZCBjaGVja3MgZm9yIHRoZSBmaXJzdCBjb3VwbGUgb2Ygc2lnbmF0dXJlcyB3aXRoIG1heCAyIGFyZ3VtZW50c1xuICAgICAgdmFyIG9rMCA9IHNpZ25hdHVyZXNbMF0gJiYgc2lnbmF0dXJlc1swXS5wYXJhbXMubGVuZ3RoIDw9IDIgJiYgIWhhc1Jlc3RQYXJhbShzaWduYXR1cmVzWzBdLnBhcmFtcyk7XG4gICAgICB2YXIgb2sxID0gc2lnbmF0dXJlc1sxXSAmJiBzaWduYXR1cmVzWzFdLnBhcmFtcy5sZW5ndGggPD0gMiAmJiAhaGFzUmVzdFBhcmFtKHNpZ25hdHVyZXNbMV0ucGFyYW1zKTtcbiAgICAgIHZhciBvazIgPSBzaWduYXR1cmVzWzJdICYmIHNpZ25hdHVyZXNbMl0ucGFyYW1zLmxlbmd0aCA8PSAyICYmICFoYXNSZXN0UGFyYW0oc2lnbmF0dXJlc1syXS5wYXJhbXMpO1xuICAgICAgdmFyIG9rMyA9IHNpZ25hdHVyZXNbM10gJiYgc2lnbmF0dXJlc1szXS5wYXJhbXMubGVuZ3RoIDw9IDIgJiYgIWhhc1Jlc3RQYXJhbShzaWduYXR1cmVzWzNdLnBhcmFtcyk7XG4gICAgICB2YXIgb2s0ID0gc2lnbmF0dXJlc1s0XSAmJiBzaWduYXR1cmVzWzRdLnBhcmFtcy5sZW5ndGggPD0gMiAmJiAhaGFzUmVzdFBhcmFtKHNpZ25hdHVyZXNbNF0ucGFyYW1zKTtcbiAgICAgIHZhciBvazUgPSBzaWduYXR1cmVzWzVdICYmIHNpZ25hdHVyZXNbNV0ucGFyYW1zLmxlbmd0aCA8PSAyICYmICFoYXNSZXN0UGFyYW0oc2lnbmF0dXJlc1s1XS5wYXJhbXMpO1xuICAgICAgdmFyIGFsbE9rID0gb2swICYmIG9rMSAmJiBvazIgJiYgb2szICYmIG9rNCAmJiBvazU7XG5cbiAgICAgIC8vIGNvbXBpbGUgdGhlIHRlc3RzXG4gICAgICB2YXIgdGVzdHMgPSBzaWduYXR1cmVzLm1hcChmdW5jdGlvbiAoc2lnbmF0dXJlKSB7XG4gICAgICAgIHJldHVybiBjb21waWxlVGVzdHMoc2lnbmF0dXJlLnBhcmFtcyk7XG4gICAgICB9KTtcblxuICAgICAgdmFyIHRlc3QwMCA9IG9rMCA/IGNvbXBpbGVUZXN0KHNpZ25hdHVyZXNbMF0ucGFyYW1zWzBdKSA6IG5vdE9rO1xuICAgICAgdmFyIHRlc3QxMCA9IG9rMSA/IGNvbXBpbGVUZXN0KHNpZ25hdHVyZXNbMV0ucGFyYW1zWzBdKSA6IG5vdE9rO1xuICAgICAgdmFyIHRlc3QyMCA9IG9rMiA/IGNvbXBpbGVUZXN0KHNpZ25hdHVyZXNbMl0ucGFyYW1zWzBdKSA6IG5vdE9rO1xuICAgICAgdmFyIHRlc3QzMCA9IG9rMyA/IGNvbXBpbGVUZXN0KHNpZ25hdHVyZXNbM10ucGFyYW1zWzBdKSA6IG5vdE9rO1xuICAgICAgdmFyIHRlc3Q0MCA9IG9rNCA/IGNvbXBpbGVUZXN0KHNpZ25hdHVyZXNbNF0ucGFyYW1zWzBdKSA6IG5vdE9rO1xuICAgICAgdmFyIHRlc3Q1MCA9IG9rNSA/IGNvbXBpbGVUZXN0KHNpZ25hdHVyZXNbNV0ucGFyYW1zWzBdKSA6IG5vdE9rO1xuXG4gICAgICB2YXIgdGVzdDAxID0gb2swID8gY29tcGlsZVRlc3Qoc2lnbmF0dXJlc1swXS5wYXJhbXNbMV0pIDogbm90T2s7XG4gICAgICB2YXIgdGVzdDExID0gb2sxID8gY29tcGlsZVRlc3Qoc2lnbmF0dXJlc1sxXS5wYXJhbXNbMV0pIDogbm90T2s7XG4gICAgICB2YXIgdGVzdDIxID0gb2syID8gY29tcGlsZVRlc3Qoc2lnbmF0dXJlc1syXS5wYXJhbXNbMV0pIDogbm90T2s7XG4gICAgICB2YXIgdGVzdDMxID0gb2szID8gY29tcGlsZVRlc3Qoc2lnbmF0dXJlc1szXS5wYXJhbXNbMV0pIDogbm90T2s7XG4gICAgICB2YXIgdGVzdDQxID0gb2s0ID8gY29tcGlsZVRlc3Qoc2lnbmF0dXJlc1s0XS5wYXJhbXNbMV0pIDogbm90T2s7XG4gICAgICB2YXIgdGVzdDUxID0gb2s1ID8gY29tcGlsZVRlc3Qoc2lnbmF0dXJlc1s1XS5wYXJhbXNbMV0pIDogbm90T2s7XG5cbiAgICAgIC8vIGNvbXBpbGUgdGhlIGZ1bmN0aW9uc1xuICAgICAgdmFyIGZucyA9IHNpZ25hdHVyZXMubWFwKGZ1bmN0aW9uKHNpZ25hdHVyZSkge1xuICAgICAgICByZXR1cm4gY29tcGlsZUFyZ3NQcmVwcm9jZXNzaW5nKHNpZ25hdHVyZS5wYXJhbXMsIHNpZ25hdHVyZS5mbilcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgZm4wID0gb2swID8gZm5zWzBdIDogdW5kZWY7XG4gICAgICB2YXIgZm4xID0gb2sxID8gZm5zWzFdIDogdW5kZWY7XG4gICAgICB2YXIgZm4yID0gb2syID8gZm5zWzJdIDogdW5kZWY7XG4gICAgICB2YXIgZm4zID0gb2szID8gZm5zWzNdIDogdW5kZWY7XG4gICAgICB2YXIgZm40ID0gb2s0ID8gZm5zWzRdIDogdW5kZWY7XG4gICAgICB2YXIgZm41ID0gb2s1ID8gZm5zWzVdIDogdW5kZWY7XG5cbiAgICAgIHZhciBsZW4wID0gb2swID8gc2lnbmF0dXJlc1swXS5wYXJhbXMubGVuZ3RoIDogLTE7XG4gICAgICB2YXIgbGVuMSA9IG9rMSA/IHNpZ25hdHVyZXNbMV0ucGFyYW1zLmxlbmd0aCA6IC0xO1xuICAgICAgdmFyIGxlbjIgPSBvazIgPyBzaWduYXR1cmVzWzJdLnBhcmFtcy5sZW5ndGggOiAtMTtcbiAgICAgIHZhciBsZW4zID0gb2szID8gc2lnbmF0dXJlc1szXS5wYXJhbXMubGVuZ3RoIDogLTE7XG4gICAgICB2YXIgbGVuNCA9IG9rNCA/IHNpZ25hdHVyZXNbNF0ucGFyYW1zLmxlbmd0aCA6IC0xO1xuICAgICAgdmFyIGxlbjUgPSBvazUgPyBzaWduYXR1cmVzWzVdLnBhcmFtcy5sZW5ndGggOiAtMTtcblxuICAgICAgLy8gc2ltcGxlIGFuZCBnZW5lcmljLCBidXQgYWxzbyBzbG93XG4gICAgICB2YXIgaVN0YXJ0ID0gYWxsT2sgPyA2IDogMDtcbiAgICAgIHZhciBpRW5kID0gc2lnbmF0dXJlcy5sZW5ndGg7XG4gICAgICB2YXIgZ2VuZXJpYyA9IGZ1bmN0aW9uIGdlbmVyaWMoKSB7XG4gICAgICAgICd1c2Ugc3RyaWN0JztcblxuICAgICAgICBmb3IgKHZhciBpID0gaVN0YXJ0OyBpIDwgaUVuZDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHRlc3RzW2ldKGFyZ3VtZW50cykpIHtcbiAgICAgICAgICAgIHJldHVybiBmbnNbaV0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBjcmVhdGVFcnJvcihuYW1lLCBhcmd1bWVudHMsIHNpZ25hdHVyZXMpO1xuICAgICAgfVxuXG4gICAgICAvLyBjcmVhdGUgdGhlIHR5cGVkIGZ1bmN0aW9uXG4gICAgICAvLyBmYXN0LCBzcGVjaWFsaXplZCB2ZXJzaW9uLiBGYWxscyBiYWNrIHRvIHRoZSBzbG93ZXIsIGdlbmVyaWMgb25lIGlmIG5lZWRlZFxuICAgICAgdmFyIGZuID0gZnVuY3Rpb24gZm4oYXJnMCwgYXJnMSkge1xuICAgICAgICAndXNlIHN0cmljdCc7XG5cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IGxlbjAgJiYgdGVzdDAwKGFyZzApICYmIHRlc3QwMShhcmcxKSkgeyByZXR1cm4gZm4wLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IGxlbjEgJiYgdGVzdDEwKGFyZzApICYmIHRlc3QxMShhcmcxKSkgeyByZXR1cm4gZm4xLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IGxlbjIgJiYgdGVzdDIwKGFyZzApICYmIHRlc3QyMShhcmcxKSkgeyByZXR1cm4gZm4yLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IGxlbjMgJiYgdGVzdDMwKGFyZzApICYmIHRlc3QzMShhcmcxKSkgeyByZXR1cm4gZm4zLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IGxlbjQgJiYgdGVzdDQwKGFyZzApICYmIHRlc3Q0MShhcmcxKSkgeyByZXR1cm4gZm40LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IGxlbjUgJiYgdGVzdDUwKGFyZzApICYmIHRlc3Q1MShhcmcxKSkgeyByZXR1cm4gZm41LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cblxuICAgICAgICByZXR1cm4gZ2VuZXJpYy5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgfVxuXG4gICAgICAvLyBhdHRhY2ggbmFtZSB0aGUgdHlwZWQgZnVuY3Rpb25cbiAgICAgIHRyeSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgJ25hbWUnLCB7dmFsdWU6IG5hbWV9KTtcbiAgICAgIH1cbiAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgLy8gb2xkIGJyb3dzZXJzIGRvIG5vdCBzdXBwb3J0IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBhbmQgc29tZSBkb24ndCBzdXBwb3J0IHNldHRpbmcgdGhlIG5hbWUgcHJvcGVydHlcbiAgICAgICAgLy8gdGhlIGZ1bmN0aW9uIG5hbWUgaXMgbm90IGVzc2VudGlhbCBmb3IgdGhlIGZ1bmN0aW9uaW5nLCBpdCdzIG1vc3RseSB1c2VmdWwgZm9yIGRlYnVnZ2luZyxcbiAgICAgICAgLy8gc28gaXQncyBmaW5lIHRvIGhhdmUgdW5uYW1lZCBmdW5jdGlvbnMuXG4gICAgICB9XG5cbiAgICAgIC8vIGF0dGFjaCBzaWduYXR1cmVzIHRvIHRoZSBmdW5jdGlvblxuICAgICAgZm4uc2lnbmF0dXJlcyA9IGNyZWF0ZVNpZ25hdHVyZXNNYXAoc2lnbmF0dXJlcyk7XG5cbiAgICAgIHJldHVybiBmbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUZXN0IHdoZXRoZXIgYSB0eXBlIHNob3VsZCBiZSBOT1QgYmUgaWdub3JlZFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlTmFtZVxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgZnVuY3Rpb24gbm90SWdub3JlKHR5cGVOYW1lKSB7XG4gICAgICByZXR1cm4gdHlwZWQuaWdub3JlLmluZGV4T2YodHlwZU5hbWUpID09PSAtMTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB0cmltIGEgc3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0cmltKHN0cikge1xuICAgICAgcmV0dXJuIHN0ci50cmltKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGVzdCB3aGV0aGVyIGEgc3RyaW5nIGlzIG5vdCBlbXB0eVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG5vdEVtcHR5KHN0cikge1xuICAgICAgcmV0dXJuICEhc3RyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHRlc3Qgd2hldGhlciBhIHZhbHVlIGlzIG5vdCBzdHJpY3QgZXF1YWwgdG8gbnVsbFxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG5vdE51bGwodmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSAhPT0gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUZXN0IHdoZXRoZXIgYSBwYXJhbWV0ZXIgaGFzIG5vIHR5cGVzIGRlZmluZWRcbiAgICAgKiBAcGFyYW0ge1BhcmFtfSBwYXJhbVxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNJbnZhbGlkUGFyYW0gKHBhcmFtKSB7XG4gICAgICByZXR1cm4gcGFyYW0udHlwZXMubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBhbGwgYnV0IHRoZSBsYXN0IGl0ZW1zIG9mIGFuIGFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyXG4gICAgICogQHJldHVybiB7QXJyYXl9XG4gICAgICovXG4gICAgZnVuY3Rpb24gaW5pdGlhbChhcnIpIHtcbiAgICAgIHJldHVybiBhcnIuc2xpY2UoMCwgYXJyLmxlbmd0aCAtIDEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJldHVybiB0aGUgbGFzdCBpdGVtIG9mIGFuIGFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyXG4gICAgICogQHJldHVybiB7Kn1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsYXN0KGFycikge1xuICAgICAgcmV0dXJuIGFyclthcnIubGVuZ3RoIC0gMV07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2xpY2UgYW4gYXJyYXkgb3IgZnVuY3Rpb24gQXJndW1lbnRzXG4gICAgICogQHBhcmFtIHtBcnJheSB8IEFyZ3VtZW50cyB8IElBcmd1bWVudHN9IGFyclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kXVxuICAgICAqIEByZXR1cm4ge0FycmF5fVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNsaWNlKGFyciwgc3RhcnQsIGVuZCkge1xuICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyciwgc3RhcnQsIGVuZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGVzdCB3aGV0aGVyIGFuIGFycmF5IGNvbnRhaW5zIHNvbWUgaXRlbVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gICAgICogQHBhcmFtIHsqfSBpdGVtXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIGFycmF5IGNvbnRhaW5zIGl0ZW0sIGZhbHNlIGlmIG5vdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb250YWlucyhhcnJheSwgaXRlbSkge1xuICAgICAgcmV0dXJuIGFycmF5LmluZGV4T2YoaXRlbSkgIT09IC0xO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRlc3Qgd2hldGhlciB0d28gYXJyYXlzIGhhdmUgb3ZlcmxhcHBpbmcgaXRlbXNcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheTFcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheTJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgd2hlbiBhdCBsZWFzdCBvbmUgaXRlbSBleGlzdHMgaW4gYm90aCBhcnJheXNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBoYXNPdmVybGFwKGFycmF5MSwgYXJyYXkyKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5MS5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoY29udGFpbnMoYXJyYXkyLCBhcnJheTFbaV0pKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgZmlyc3QgaXRlbSBmcm9tIGFuIGFycmF5IGZvciB3aGljaCB0ZXN0KGFycltpXSkgcmV0dXJucyB0cnVlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gdGVzdFxuICAgICAqIEByZXR1cm4geyogfCB1bmRlZmluZWR9IFJldHVybnMgdGhlIGZpcnN0IG1hdGNoaW5nIGl0ZW1cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBvciB1bmRlZmluZWQgd2hlbiB0aGVyZSBpcyBubyBtYXRjaFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZpbmRJbkFycmF5KGFyciwgdGVzdCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHRlc3QoYXJyW2ldKSkge1xuICAgICAgICAgIHJldHVybiBhcnJbaV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlsdGVyIHVuaXF1ZSBpdGVtcyBvZiBhbiBhcnJheSB3aXRoIHN0cmluZ3NcbiAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBhcnJcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmdbXX1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB1bmlxKGFycikge1xuICAgICAgdmFyIGVudHJpZXMgPSB7fVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZW50cmllc1thcnJbaV1dID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyhlbnRyaWVzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGbGF0IG1hcCB0aGUgcmVzdWx0IGludm9raW5nIGEgY2FsbGJhY2sgZm9yIGV2ZXJ5IGl0ZW0gaW4gYW4gYXJyYXkuXG4gICAgICogaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vc2FtZ2lsZXMvNzYyZWUzMzdkZmY0ODYyM2U3MjlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICAgICAqIEByZXR1cm4ge0FycmF5fVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZsYXRNYXAoYXJyLCBjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sIGFyci5tYXAoY2FsbGJhY2spKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZSB0aGUgZnVuY3Rpb24gbmFtZSBmcm9tIGEgc2V0IG9mIHR5cGVkIGZ1bmN0aW9ucyxcbiAgICAgKiBhbmQgY2hlY2sgd2hldGhlciB0aGUgbmFtZSBvZiBhbGwgZnVuY3Rpb25zIG1hdGNoIChpZiBnaXZlbilcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uW119IGZuc1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldE5hbWUgKGZucykge1xuICAgICAgdmFyIG5hbWUgPSAnJztcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGZuID0gZm5zW2ldO1xuXG4gICAgICAgIC8vIGNoZWNrIHdoZXRoZXIgdGhlIG5hbWVzIGFyZSB0aGUgc2FtZSB3aGVuIGRlZmluZWRcbiAgICAgICAgaWYgKCh0eXBlb2YgZm4uc2lnbmF0dXJlcyA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGZuLnNpZ25hdHVyZSA9PT0gJ3N0cmluZycpICYmIGZuLm5hbWUgIT09ICcnKSB7XG4gICAgICAgICAgaWYgKG5hbWUgPT09ICcnKSB7XG4gICAgICAgICAgICBuYW1lID0gZm4ubmFtZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAobmFtZSAhPT0gZm4ubmFtZSkge1xuICAgICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcignRnVuY3Rpb24gbmFtZXMgZG8gbm90IG1hdGNoIChleHBlY3RlZDogJyArIG5hbWUgKyAnLCBhY3R1YWw6ICcgKyBmbi5uYW1lICsgJyknKTtcbiAgICAgICAgICAgIGVyci5kYXRhID0ge1xuICAgICAgICAgICAgICBhY3R1YWw6IGZuLm5hbWUsXG4gICAgICAgICAgICAgIGV4cGVjdGVkOiBuYW1lXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmFtZTtcbiAgICB9XG5cbiAgICAvLyBleHRyYWN0IGFuZCBtZXJnZSBhbGwgc2lnbmF0dXJlcyBvZiBhIGxpc3Qgd2l0aCB0eXBlZCBmdW5jdGlvbnNcbiAgICBmdW5jdGlvbiBleHRyYWN0U2lnbmF0dXJlcyhmbnMpIHtcbiAgICAgIHZhciBlcnI7XG4gICAgICB2YXIgc2lnbmF0dXJlc01hcCA9IHt9O1xuXG4gICAgICBmdW5jdGlvbiB2YWxpZGF0ZVVuaXF1ZShfc2lnbmF0dXJlLCBfZm4pIHtcbiAgICAgICAgaWYgKHNpZ25hdHVyZXNNYXAuaGFzT3duUHJvcGVydHkoX3NpZ25hdHVyZSkgJiYgX2ZuICE9PSBzaWduYXR1cmVzTWFwW19zaWduYXR1cmVdKSB7XG4gICAgICAgICAgZXJyID0gbmV3IEVycm9yKCdTaWduYXR1cmUgXCInICsgX3NpZ25hdHVyZSArICdcIiBpcyBkZWZpbmVkIHR3aWNlJyk7XG4gICAgICAgICAgZXJyLmRhdGEgPSB7c2lnbmF0dXJlOiBfc2lnbmF0dXJlfTtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgLy8gZWxzZTogYm90aCBzaWduYXR1cmVzIHBvaW50IHRvIHRoZSBzYW1lIGZ1bmN0aW9uLCB0aGF0J3MgZmluZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZm5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBmbiA9IGZuc1tpXTtcblxuICAgICAgICAvLyB0ZXN0IHdoZXRoZXIgdGhpcyBpcyBhIHR5cGVkLWZ1bmN0aW9uXG4gICAgICAgIGlmICh0eXBlb2YgZm4uc2lnbmF0dXJlcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAvLyBtZXJnZSB0aGUgc2lnbmF0dXJlc1xuICAgICAgICAgIGZvciAodmFyIHNpZ25hdHVyZSBpbiBmbi5zaWduYXR1cmVzKSB7XG4gICAgICAgICAgICBpZiAoZm4uc2lnbmF0dXJlcy5oYXNPd25Qcm9wZXJ0eShzaWduYXR1cmUpKSB7XG4gICAgICAgICAgICAgIHZhbGlkYXRlVW5pcXVlKHNpZ25hdHVyZSwgZm4uc2lnbmF0dXJlc1tzaWduYXR1cmVdKTtcbiAgICAgICAgICAgICAgc2lnbmF0dXJlc01hcFtzaWduYXR1cmVdID0gZm4uc2lnbmF0dXJlc1tzaWduYXR1cmVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgZm4uc2lnbmF0dXJlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHZhbGlkYXRlVW5pcXVlKGZuLnNpZ25hdHVyZSwgZm4pO1xuICAgICAgICAgIHNpZ25hdHVyZXNNYXBbZm4uc2lnbmF0dXJlXSA9IGZuO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGVyciA9IG5ldyBUeXBlRXJyb3IoJ0Z1bmN0aW9uIGlzIG5vIHR5cGVkLWZ1bmN0aW9uIChpbmRleDogJyArIGkgKyAnKScpO1xuICAgICAgICAgIGVyci5kYXRhID0ge2luZGV4OiBpfTtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNpZ25hdHVyZXNNYXA7XG4gICAgfVxuXG4gICAgdHlwZWQgPSBjcmVhdGVUeXBlZEZ1bmN0aW9uKCd0eXBlZCcsIHtcbiAgICAgICdzdHJpbmcsIE9iamVjdCc6IGNyZWF0ZVR5cGVkRnVuY3Rpb24sXG4gICAgICAnT2JqZWN0JzogZnVuY3Rpb24gKHNpZ25hdHVyZXNNYXApIHtcbiAgICAgICAgLy8gZmluZCBleGlzdGluZyBuYW1lXG4gICAgICAgIHZhciBmbnMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgc2lnbmF0dXJlIGluIHNpZ25hdHVyZXNNYXApIHtcbiAgICAgICAgICBpZiAoc2lnbmF0dXJlc01hcC5oYXNPd25Qcm9wZXJ0eShzaWduYXR1cmUpKSB7XG4gICAgICAgICAgICBmbnMucHVzaChzaWduYXR1cmVzTWFwW3NpZ25hdHVyZV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgbmFtZSA9IGdldE5hbWUoZm5zKTtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVR5cGVkRnVuY3Rpb24obmFtZSwgc2lnbmF0dXJlc01hcCk7XG4gICAgICB9LFxuICAgICAgJy4uLkZ1bmN0aW9uJzogZnVuY3Rpb24gKGZucykge1xuICAgICAgICByZXR1cm4gY3JlYXRlVHlwZWRGdW5jdGlvbihnZXROYW1lKGZucyksIGV4dHJhY3RTaWduYXR1cmVzKGZucykpO1xuICAgICAgfSxcbiAgICAgICdzdHJpbmcsIC4uLkZ1bmN0aW9uJzogZnVuY3Rpb24gKG5hbWUsIGZucykge1xuICAgICAgICByZXR1cm4gY3JlYXRlVHlwZWRGdW5jdGlvbihuYW1lLCBleHRyYWN0U2lnbmF0dXJlcyhmbnMpKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHR5cGVkLmNyZWF0ZSA9IGNyZWF0ZTtcbiAgICB0eXBlZC50eXBlcyA9IF90eXBlcztcbiAgICB0eXBlZC5jb252ZXJzaW9ucyA9IF9jb252ZXJzaW9ucztcbiAgICB0eXBlZC5pZ25vcmUgPSBfaWdub3JlO1xuICAgIHR5cGVkLmNvbnZlcnQgPSBjb252ZXJ0O1xuICAgIHR5cGVkLmZpbmQgPSBmaW5kO1xuXG4gICAgLyoqXG4gICAgICogYWRkIGEgdHlwZVxuICAgICAqIEBwYXJhbSB7e25hbWU6IHN0cmluZywgdGVzdDogZnVuY3Rpb259fSB0eXBlXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbYmVmb3JlT2JqZWN0VGVzdD10cnVlXVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB0cnVlLCB0aGUgbmV3IHRlc3Qgd2lsbCBiZSBpbnNlcnRlZCBiZWZvcmVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHRlc3Qgd2l0aCBuYW1lICdPYmplY3QnIChpZiBhbnkpLCBzaW5jZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0cyBmb3IgT2JqZWN0IG1hdGNoIEFycmF5IGFuZCBjbGFzc2VzIHRvby5cbiAgICAgKi9cbiAgICB0eXBlZC5hZGRUeXBlID0gZnVuY3Rpb24gKHR5cGUsIGJlZm9yZU9iamVjdFRlc3QpIHtcbiAgICAgIGlmICghdHlwZSB8fCB0eXBlb2YgdHlwZS5uYW1lICE9PSAnc3RyaW5nJyB8fCB0eXBlb2YgdHlwZS50ZXN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdCB3aXRoIHByb3BlcnRpZXMge25hbWU6IHN0cmluZywgdGVzdDogZnVuY3Rpb259IGV4cGVjdGVkJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChiZWZvcmVPYmplY3RUZXN0ICE9PSBmYWxzZSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHR5cGVkLnR5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHR5cGVkLnR5cGVzW2ldLm5hbWUgPT09ICdPYmplY3QnKSB7XG4gICAgICAgICAgICB0eXBlZC50eXBlcy5zcGxpY2UoaSwgMCwgdHlwZSk7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdHlwZWQudHlwZXMucHVzaCh0eXBlKTtcbiAgICB9O1xuXG4gICAgLy8gYWRkIGEgY29udmVyc2lvblxuICAgIHR5cGVkLmFkZENvbnZlcnNpb24gPSBmdW5jdGlvbiAoY29udmVyc2lvbikge1xuICAgICAgaWYgKCFjb252ZXJzaW9uXG4gICAgICAgICAgfHwgdHlwZW9mIGNvbnZlcnNpb24uZnJvbSAhPT0gJ3N0cmluZydcbiAgICAgICAgICB8fCB0eXBlb2YgY29udmVyc2lvbi50byAhPT0gJ3N0cmluZydcbiAgICAgICAgICB8fCB0eXBlb2YgY29udmVyc2lvbi5jb252ZXJ0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdCB3aXRoIHByb3BlcnRpZXMge2Zyb206IHN0cmluZywgdG86IHN0cmluZywgY29udmVydDogZnVuY3Rpb259IGV4cGVjdGVkJyk7XG4gICAgICB9XG5cbiAgICAgIHR5cGVkLmNvbnZlcnNpb25zLnB1c2goY29udmVyc2lvbik7XG4gICAgfTtcblxuICAgIHJldHVybiB0eXBlZDtcbiAgfVxuXG4gIHJldHVybiBjcmVhdGUoKTtcbn0pKTsiXX0= diff --git a/dist/quantum-circuit.min.js b/dist/quantum-circuit.min.js index d02ec13..9fa699a 100644 --- a/dist/quantum-circuit.min.js +++ b/dist/quantum-circuit.min.js @@ -1 +1 @@ -!function(f){"object"==typeof exports&&"undefined"!=typeof module?module.exports=f():"function"==typeof define&&define.amd?define([],f):("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).QuantumCircuit=f()}(function(){return function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){return o(e[i][1][r]||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i\x03\x02\x02","\x02\xca\xcb\x07g\x02\x02\xcb\xcc\x07z\x02\x02","\xcc\xcd\x07r\x02\x02\xcd@\x03\x02\x02\x02\xce","\xcf\x07n\x02\x02\xcf\xd0\x07p\x02\x02\xd0B\x03","\x02\x02\x02\xd1\xd2\x07u\x02\x02\xd2\xd3\x07","s\x02\x02\xd3\xd4\x07t\x02\x02\xd4\xd5\x07v\x02","\x02\xd5D\x03\x02\x02\x02\xd6\xd7\x07r\x02\x02","\xd7\xd8\x07k\x02\x02\xd8F\x03\x02\x02\x02\xd9","\xda\x05I%\x02\xda\xdb\x05K&\x02\xdb\xe1\x03\x02","\x02\x02\xdc\xdd\x05M'\x02\xdd\xde\x05K&\x02\xde","\xe1\x03\x02\x02\x02\xdf\xe1\x05I%\x02\xe0\xd9","\x03\x02\x02\x02\xe0\xdc\x03\x02\x02\x02\xe0\xdf","\x03\x02\x02\x02\xe1H\x03\x02\x02\x02\xe2\xe3","\x05M'\x02\xe3\xe5\x070\x02\x02\xe4\xe6\t\x02\x02","\x02\xe5\xe4\x03\x02\x02\x02\xe6\xe7\x03\x02\x02","\x02\xe7\xe5\x03\x02\x02\x02\xe7\xe8\x03\x02\x02","\x02\xe8J\x03\x02\x02\x02\xe9\xea\t\x03\x02\x02","\xea\xec\t\x04\x02\x02\xeb\xed\t\x02\x02\x02\xec","\xeb\x03\x02\x02\x02\xed\xee\x03\x02\x02\x02\xee","\xec\x03\x02\x02\x02\xee\xef\x03\x02\x02\x02\xef","L\x03\x02\x02\x02\xf0\xf2\t\x02\x02\x02\xf1\xf0","\x03\x02\x02\x02\xf2\xf3\x03\x02\x02\x02\xf3\xf1","\x03\x02\x02\x02\xf3\xf4\x03\x02\x02\x02\xf4N","\x03\x02\x02\x02\xf5\xf9\t\x05\x02\x02\xf6\xf8","\t\x06\x02\x02\xf7\xf6\x03\x02\x02\x02\xf8\xfb","\x03\x02\x02\x02\xf9\xf7\x03\x02\x02\x02\xf9\xfa","\x03\x02\x02\x02\xfaP\x03\x02\x02\x02\xfb\xf9","\x03\x02\x02\x02\xfc\xfe\t\x07\x02\x02\xfd\xfc","\x03\x02\x02\x02\xfe\xff\x03\x02\x02\x02\xff\xfd","\x03\x02\x02\x02\xff\u0100\x03\x02\x02\x02\u0100\u0101","\x03\x02\x02\x02\u0101\u0102\b)\x02\x02\u0102R\x03\x02","\x02\x02\u0103\u0105\x07$\x02\x02\u0104\u0106\t\b\x02\x02","\u0105\u0104\x03\x02\x02\x02\u0106\u0107\x03\x02\x02\x02","\u0107\u0105\x03\x02\x02\x02\u0107\u0108\x03\x02\x02\x02","\u0108\u0109\x03\x02\x02\x02\u0109\u010a\x07$\x02\x02","\u010aT\x03\x02\x02\x02\u010b\u010c\x071\x02\x02\u010c","\u010d\x07,\x02\x02\u010d\u0111\x03\x02\x02\x02\u010e","\u0110\v\x02\x02\x02\u010f\u010e\x03\x02\x02\x02\u0110","\u0113\x03\x02\x02\x02\u0111\u0112\x03\x02\x02\x02\u0111","\u010f\x03\x02\x02\x02\u0112\u0114\x03\x02\x02\x02\u0113","\u0111\x03\x02\x02\x02\u0114\u0115\x07,\x02\x02\u0115","\u0116\x071\x02\x02\u0116\u0117\x03\x02\x02\x02\u0117","\u0118\b+\x02\x02\u0118V\x03\x02\x02\x02\u0119\u011a\x07","1\x02\x02\u011a\u011b\x071\x02\x02\u011b\u011f\x03\x02","\x02\x02\u011c\u011e\n\t\x02\x02\u011d\u011c\x03\x02\x02","\x02\u011e\u0121\x03\x02\x02\x02\u011f\u011d\x03\x02\x02","\x02\u011f\u0120\x03\x02\x02\x02\u0120\u0122\x03\x02\x02","\x02\u0121\u011f\x03\x02\x02\x02\u0122\u0123\b,\x02\x02","\u0123X\x03\x02\x02\x02\f\x02\xe0\xe7\xee\xf3\xf9","\xff\u0107\u0111\u011f\x03\b\x02\x02"].join(""),atn=(new antlr4.atn.ATNDeserializer).deserialize(serializedATN),decisionsToDFA=atn.decisionToState.map(function(ds,index){return new antlr4.dfa.DFA(ds,index)});function QASMLexer(input){return antlr4.Lexer.call(this,input),this._interp=new antlr4.atn.LexerATNSimulator(this,atn,decisionsToDFA,new antlr4.PredictionContextCache),this}(QASMLexer.prototype=Object.create(antlr4.Lexer.prototype)).constructor=QASMLexer,Object.defineProperty(QASMLexer.prototype,"atn",{get:function(){return atn}}),QASMLexer.EOF=antlr4.Token.EOF,QASMLexer.T__0=1,QASMLexer.T__1=2,QASMLexer.T__2=3,QASMLexer.T__3=4,QASMLexer.T__4=5,QASMLexer.T__5=6,QASMLexer.T__6=7,QASMLexer.T__7=8,QASMLexer.T__8=9,QASMLexer.T__9=10,QASMLexer.T__10=11,QASMLexer.T__11=12,QASMLexer.T__12=13,QASMLexer.T__13=14,QASMLexer.T__14=15,QASMLexer.T__15=16,QASMLexer.T__16=17,QASMLexer.T__17=18,QASMLexer.T__18=19,QASMLexer.T__19=20,QASMLexer.T__20=21,QASMLexer.T__21=22,QASMLexer.T__22=23,QASMLexer.T__23=24,QASMLexer.T__24=25,QASMLexer.T__25=26,QASMLexer.T__26=27,QASMLexer.T__27=28,QASMLexer.T__28=29,QASMLexer.T__29=30,QASMLexer.T__30=31,QASMLexer.T__31=32,QASMLexer.T__32=33,QASMLexer.PI=34,QASMLexer.REAL=35,QASMLexer.SUBREAL=36,QASMLexer.EXPREAL=37,QASMLexer.INT=38,QASMLexer.ID=39,QASMLexer.WS=40,QASMLexer.FILENAME=41,QASMLexer.COMMENT=42,QASMLexer.LINE_COMMENT=43,QASMLexer.prototype.channelNames=["DEFAULT_TOKEN_CHANNEL","HIDDEN"],QASMLexer.prototype.modeNames=["DEFAULT_MODE"],QASMLexer.prototype.literalNames=[null,"'}'","'opaque'","';'","'('","')'","'if'","'=='","'barrier'","'OPENQASM'","'include'","'qreg'","'['","']'","'creg'","'gate'","'{'","'measure'","'->'","'reset'","'U'","'CX'","','","'^'","'*'","'/'","'+'","'-'","'sin'","'cos'","'tan'","'exp'","'ln'","'sqrt'","'pi'"],QASMLexer.prototype.symbolicNames=[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"PI","REAL","SUBREAL","EXPREAL","INT","ID","WS","FILENAME","COMMENT","LINE_COMMENT"],QASMLexer.prototype.ruleNames=["T__0","T__1","T__2","T__3","T__4","T__5","T__6","T__7","T__8","T__9","T__10","T__11","T__12","T__13","T__14","T__15","T__16","T__17","T__18","T__19","T__20","T__21","T__22","T__23","T__24","T__25","T__26","T__27","T__28","T__29","T__30","T__31","T__32","PI","REAL","SUBREAL","EXPREAL","INT","ID","WS","FILENAME","COMMENT","LINE_COMMENT"],QASMLexer.prototype.grammarFileName="QASM.g4",exports.QASMLexer=QASMLexer},{"antlr4/index":47}],3:[function(require,module,exports){var antlr4=require("antlr4/index");function QASMListener(){return antlr4.tree.ParseTreeListener.call(this),this}((QASMListener.prototype=Object.create(antlr4.tree.ParseTreeListener.prototype)).constructor=QASMListener).prototype.enterMainprog=function(ctx){},QASMListener.prototype.exitMainprog=function(ctx){},QASMListener.prototype.enterStatement=function(ctx){},QASMListener.prototype.exitStatement=function(ctx){},QASMListener.prototype.enterVersion=function(ctx){},QASMListener.prototype.exitVersion=function(ctx){},QASMListener.prototype.enterInclude=function(ctx){},QASMListener.prototype.exitInclude=function(ctx){},QASMListener.prototype.enterFilename=function(ctx){},QASMListener.prototype.exitFilename=function(ctx){},QASMListener.prototype.enterDecl=function(ctx){},QASMListener.prototype.exitDecl=function(ctx){},QASMListener.prototype.enterGatedecl=function(ctx){},QASMListener.prototype.exitGatedecl=function(ctx){},QASMListener.prototype.enterGoplist=function(ctx){},QASMListener.prototype.exitGoplist=function(ctx){},QASMListener.prototype.enterQop=function(ctx){},QASMListener.prototype.exitQop=function(ctx){},QASMListener.prototype.enterUop=function(ctx){},QASMListener.prototype.exitUop=function(ctx){},QASMListener.prototype.enterAnylist=function(ctx){},QASMListener.prototype.exitAnylist=function(ctx){},QASMListener.prototype.enterIdlist=function(ctx){},QASMListener.prototype.exitIdlist=function(ctx){},QASMListener.prototype.enterMixedlist=function(ctx){},QASMListener.prototype.exitMixedlist=function(ctx){},QASMListener.prototype.enterArgument=function(ctx){},QASMListener.prototype.exitArgument=function(ctx){},QASMListener.prototype.enterExplist=function(ctx){},QASMListener.prototype.exitExplist=function(ctx){},QASMListener.prototype.enterExp=function(ctx){},QASMListener.prototype.exitExp=function(ctx){},QASMListener.prototype.enterAtom=function(ctx){},QASMListener.prototype.exitAtom=function(ctx){},QASMListener.prototype.enterUnaryop=function(ctx){},QASMListener.prototype.exitUnaryop=function(ctx){},exports.QASMListener=QASMListener},{"antlr4/index":47}],4:[function(require,module,exports){var antlr4=require("antlr4/index"),QASMListener=require("./QASMListener").QASMListener,serializedATN=["\x03\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964","\x03-\u0130\x04\x02\t\x02\x04\x03\t\x03\x04\x04\t","\x04\x04\x05\t\x05\x04\x06\t\x06\x04\x07\t\x07\x04","\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f\t\f\x04","\r\t\r\x04\x0e\t\x0e\x04\x0f\t\x0f\x04\x10\t\x10\x04","\x11\t\x11\x04\x12\t\x12\x04\x13\t\x13\x03\x02\x03","\x02\x07\x02)\n\x02\f\x02\x0e\x02,\v\x02\x03\x03","\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03","\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03","\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03","\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03","\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03","\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03","\x03\x03\x03\x03\x03\x03\x03\x03\x05\x03W\n\x03","\x03\x04\x03\x04\x03\x04\x03\x04\x03\x05\x03\x05","\x03\x05\x03\x05\x03\x06\x03\x06\x03\x07\x03\x07","\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07","\x03\x07\x03\x07\x03\x07\x03\x07\x05\x07o\n\x07","\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03","\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03","\b\x03\b\x03\b\x05\b\x85\n\b\x03\t\x03\t\x03\t\x03\t","\x03\t\x06\t\x8c\n\t\r\t\x0e\t\x8d\x03\n\x03\n\x03\n","\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x05","\n\x9b\n\n\x03\v\x03\v\x03\v\x03\v\x03\v","\x03\v\x03\v\x03\v\x03\v\x03\v\x03\v","\x03\v\x03\v\x03\v\x03\v\x03\v\x03\v","\x03\v\x03\v\x03\v\x03\v\x03\v\x03\v","\x03\v\x03\v\x03\v\x03\v\x03\v\x03\v","\x03\v\x05\v\xbb\n\v\x03\f\x03\f\x05\f\xbf","\n\f\x03\r\x03\r\x07\r\xc3\n\r\f\r\x0e\r\xc6\v\r\x03","\r\x03\r\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e","\x07\x0e\xcf\n\x0e\f\x0e\x0e\x0e\xd2\v\x0e\x03","\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x07","\x0e\xda\n\x0e\f\x0e\x0e\x0e\xdd\v\x0e\x03\x0e","\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x07\x0e","\xe5\n\x0e\f\x0e\x0e\x0e\xe8\v\x0e\x03\x0e\x03","\x0e\x07\x0e\xec\n\x0e\f\x0e\x0e\x0e\xef\v\x0e","\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x05\x0e\xf5\n","\x0e\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x05","\x0f\xfc\n\x0f\x03\x10\x03\x10\x03\x10\x07\x10","\u0101\n\x10\f\x10\x0e\x10\u0104\v\x10\x03\x10\x03","\x10\x03\x11\x03\x11\x05\x11\u010a\n\x11\x03\x11","\x03\x11\x03\x11\x03\x11\x03\x11\x05\x11\u0111\n","\x11\x03\x11\x03\x11\x03\x11\x03\x11\x03\x11\x03","\x11\x05\x11\u0119\n\x11\x03\x11\x05\x11\u011c\n\x11","\x03\x11\x03\x11\x03\x11\x03\x11\x03\x11\x03\x11","\x03\x11\x03\x11\x03\x11\x07\x11\u0127\n\x11\f\x11","\x0e\x11\u012a\v\x11\x03\x12\x03\x12\x03\x13\x03","\x13\x03\x13\x02\x03 \x14\x02\x04\x06\b\n\f\x0e",'\x10\x12\x14\x16\x18\x1a\x1c\x1e "$\x02\x06\x03',"\x02\x1c\x1d\x03\x02\x1a\x1b\x04\x02$%()\x03\x02","\x1e#\x02\u0144\x02&\x03\x02\x02\x02\x04V\x03\x02","\x02\x02\x06X\x03\x02\x02\x02\b\\\x03\x02\x02\x02","\n`\x03\x02\x02\x02\fn\x03\x02\x02\x02\x0e\x84\x03","\x02\x02\x02\x10\x8b\x03\x02\x02\x02\x12\x9a\x03","\x02\x02\x02\x14\xba\x03\x02\x02\x02\x16\xbe\x03","\x02\x02\x02\x18\xc4\x03\x02\x02\x02\x1a\xf4\x03","\x02\x02\x02\x1c\xfb\x03\x02\x02\x02\x1e\u0102\x03",'\x02\x02\x02 \u011b\x03\x02\x02\x02"\u012b\x03\x02',"\x02\x02$\u012d\x03\x02\x02\x02&*\x05\x06\x04\x02","')\x05\x04\x03\x02('\x03\x02\x02\x02),\x03\x02","\x02\x02*(\x03\x02\x02\x02*+\x03\x02\x02\x02+\x03","\x03\x02\x02\x02,*\x03\x02\x02\x02-W\x05\f\x07\x02","./\x05\x0e\b\x02/0\x05\x10\t\x0201\x07\x03\x02\x02","1W\x03\x02\x02\x0223\x05\x0e\b\x0234\x07\x03\x02","\x024W\x03\x02\x02\x0256\x07\x04\x02\x0267\x07)","\x02\x0278\x05\x18\r\x0289\x07\x05\x02\x029W\x03","\x02\x02\x02:;\x07\x04\x02\x02;<\x07)\x02\x02<=","\x07\x06\x02\x02=>\x07\x07\x02\x02>?\x05\x18\r\x02","?@\x07\x05\x02\x02@W\x03\x02\x02\x02AB\x07\x04\x02","\x02BC\x07)\x02\x02CD\x07\x06\x02\x02DE\x05\x18","\r\x02EF\x07\x07\x02\x02FG\x05\x18\r\x02GH\x07\x05","\x02\x02HW\x03\x02\x02\x02IW\x05\x12\n\x02JK\x07","\b\x02\x02KL\x07\x06\x02\x02LM\x07)\x02\x02MN\x07","\t\x02\x02NO\x07(\x02\x02OP\x07\x07\x02\x02PW\x05","\x12\n\x02QR\x07\n\x02\x02RS\x05\x16\f\x02ST\x07\x05","\x02\x02TW\x03\x02\x02\x02UW\x05\b\x05\x02V-\x03","\x02\x02\x02V.\x03\x02\x02\x02V2\x03\x02\x02\x02","V5\x03\x02\x02\x02V:\x03\x02\x02\x02VA\x03\x02\x02","\x02VI\x03\x02\x02\x02VJ\x03\x02\x02\x02VQ\x03\x02","\x02\x02VU\x03\x02\x02\x02W\x05\x03\x02\x02\x02","XY\x07\v\x02\x02YZ\x07%\x02\x02Z[\x07\x05\x02","\x02[\x07\x03\x02\x02\x02\\]\x07\f\x02\x02]^\x05","\n\x06\x02^_\x07\x05\x02\x02_\t\x03\x02\x02\x02","`a\x07+\x02\x02a\v\x03\x02\x02\x02bc\x07\r\x02","\x02cd\x07)\x02\x02de\x07\x0e\x02\x02ef\x07(\x02","\x02fg\x07\x0f\x02\x02go\x07\x05\x02\x02hi\x07\x10","\x02\x02ij\x07)\x02\x02jk\x07\x0e\x02\x02kl\x07","(\x02\x02lm\x07\x0f\x02\x02mo\x07\x05\x02\x02nb","\x03\x02\x02\x02nh\x03\x02\x02\x02o\r\x03\x02\x02","\x02pq\x07\x11\x02\x02qr\x07)\x02\x02rs\x05\x18","\r\x02st\x07\x12\x02\x02t\x85\x03\x02\x02\x02uv","\x07\x11\x02\x02vw\x07)\x02\x02wx\x07\x06\x02\x02","xy\x07\x07\x02\x02yz\x05\x18\r\x02z{\x07\x12\x02","\x02{\x85\x03\x02\x02\x02|}\x07\x11\x02\x02}~\x07",")\x02\x02~\x7f\x07\x06\x02\x02\x7f\x80\x05\x18","\r\x02\x80\x81\x07\x07\x02\x02\x81\x82\x05\x18","\r\x02\x82\x83\x07\x12\x02\x02\x83\x85\x03\x02","\x02\x02\x84p\x03\x02\x02\x02\x84u\x03\x02\x02","\x02\x84|\x03\x02\x02\x02\x85\x0f\x03\x02\x02","\x02\x86\x8c\x05\x14\v\x02\x87\x88\x07\n\x02","\x02\x88\x89\x05\x18\r\x02\x89\x8a\x07\x05\x02","\x02\x8a\x8c\x03\x02\x02\x02\x8b\x86\x03\x02\x02","\x02\x8b\x87\x03\x02\x02\x02\x8c\x8d\x03\x02\x02","\x02\x8d\x8b\x03\x02\x02\x02\x8d\x8e\x03\x02\x02","\x02\x8e\x11\x03\x02\x02\x02\x8f\x9b\x05\x14\v","\x02\x90\x91\x07\x13\x02\x02\x91\x92\x05\x1c\x0f","\x02\x92\x93\x07\x14\x02\x02\x93\x94\x05\x1c\x0f","\x02\x94\x95\x07\x05\x02\x02\x95\x9b\x03\x02\x02","\x02\x96\x97\x07\x15\x02\x02\x97\x98\x05\x1c\x0f","\x02\x98\x99\x07\x05\x02\x02\x99\x9b\x03\x02\x02","\x02\x9a\x8f\x03\x02\x02\x02\x9a\x90\x03\x02\x02","\x02\x9a\x96\x03\x02\x02\x02\x9b\x13\x03\x02\x02","\x02\x9c\x9d\x07\x16\x02\x02\x9d\x9e\x07\x06\x02","\x02\x9e\x9f\x05\x1e\x10\x02\x9f\xa0\x07\x07\x02","\x02\xa0\xa1\x05\x1c\x0f\x02\xa1\xa2\x07\x05\x02","\x02\xa2\xbb\x03\x02\x02\x02\xa3\xa4\x07\x17\x02","\x02\xa4\xa5\x05\x1c\x0f\x02\xa5\xa6\x07\x18\x02","\x02\xa6\xa7\x05\x1c\x0f\x02\xa7\xa8\x07\x05\x02","\x02\xa8\xbb\x03\x02\x02\x02\xa9\xaa\x07)\x02","\x02\xaa\xab\x05\x16\f\x02\xab\xac\x07\x05\x02","\x02\xac\xbb\x03\x02\x02\x02\xad\xae\x07)\x02","\x02\xae\xaf\x07\x06\x02\x02\xaf\xb0\x07\x07\x02","\x02\xb0\xb1\x05\x16\f\x02\xb1\xb2\x07\x05\x02","\x02\xb2\xbb\x03\x02\x02\x02\xb3\xb4\x07)\x02","\x02\xb4\xb5\x07\x06\x02\x02\xb5\xb6\x05\x1e\x10","\x02\xb6\xb7\x07\x07\x02\x02\xb7\xb8\x05\x16\f","\x02\xb8\xb9\x07\x05\x02\x02\xb9\xbb\x03\x02\x02","\x02\xba\x9c\x03\x02\x02\x02\xba\xa3\x03\x02\x02","\x02\xba\xa9\x03\x02\x02\x02\xba\xad\x03\x02\x02","\x02\xba\xb3\x03\x02\x02\x02\xbb\x15\x03\x02\x02","\x02\xbc\xbf\x05\x18\r\x02\xbd\xbf\x05\x1a\x0e","\x02\xbe\xbc\x03\x02\x02\x02\xbe\xbd\x03\x02\x02","\x02\xbf\x17\x03\x02\x02\x02\xc0\xc1\x07)\x02","\x02\xc1\xc3\x07\x18\x02\x02\xc2\xc0\x03\x02\x02","\x02\xc3\xc6\x03\x02\x02\x02\xc4\xc2\x03\x02\x02","\x02\xc4\xc5\x03\x02\x02\x02\xc5\xc7\x03\x02\x02","\x02\xc6\xc4\x03\x02\x02\x02\xc7\xc8\x07)\x02","\x02\xc8\x19\x03\x02\x02\x02\xc9\xca\x07)\x02","\x02\xca\xcb\x07\x0e\x02\x02\xcb\xcc\x07(\x02","\x02\xcc\xcd\x07\x0f\x02\x02\xcd\xcf\x07\x18\x02","\x02\xce\xc9\x03\x02\x02\x02\xcf\xd2\x03\x02\x02","\x02\xd0\xce\x03\x02\x02\x02\xd0\xd1\x03\x02\x02","\x02\xd1\xd3\x03\x02\x02\x02\xd2\xd0\x03\x02\x02","\x02\xd3\xf5\x07)\x02\x02\xd4\xd5\x07)\x02\x02","\xd5\xd6\x07\x0e\x02\x02\xd6\xd7\x07(\x02\x02","\xd7\xd8\x07\x0f\x02\x02\xd8\xda\x07\x18\x02\x02","\xd9\xd4\x03\x02\x02\x02\xda\xdd\x03\x02\x02\x02","\xdb\xd9\x03\x02\x02\x02\xdb\xdc\x03\x02\x02\x02","\xdc\xde\x03\x02\x02\x02\xdd\xdb\x03\x02\x02\x02","\xde\xdf\x07)\x02\x02\xdf\xe0\x07\x0e\x02\x02","\xe0\xe1\x07(\x02\x02\xe1\xf5\x07\x0f\x02\x02","\xe2\xe3\x07)\x02\x02\xe3\xe5\x07\x18\x02\x02","\xe4\xe2\x03\x02\x02\x02\xe5\xe8\x03\x02\x02\x02","\xe6\xe4\x03\x02\x02\x02\xe6\xe7\x03\x02\x02\x02","\xe7\xe9\x03\x02\x02\x02\xe8\xe6\x03\x02\x02\x02","\xe9\xea\x07)\x02\x02\xea\xec\x07\x18\x02\x02","\xeb\xe6\x03\x02\x02\x02\xec\xef\x03\x02\x02\x02","\xed\xeb\x03\x02\x02\x02\xed\xee\x03\x02\x02\x02","\xee\xf0\x03\x02\x02\x02\xef\xed\x03\x02\x02\x02","\xf0\xf1\x07)\x02\x02\xf1\xf2\x07\x0e\x02\x02","\xf2\xf3\x07(\x02\x02\xf3\xf5\x07\x0f\x02\x02","\xf4\xd0\x03\x02\x02\x02\xf4\xdb\x03\x02\x02\x02","\xf4\xed\x03\x02\x02\x02\xf5\x1b\x03\x02\x02\x02","\xf6\xfc\x07)\x02\x02\xf7\xf8\x07)\x02\x02\xf8","\xf9\x07\x0e\x02\x02\xf9\xfa\x07(\x02\x02\xfa","\xfc\x07\x0f\x02\x02\xfb\xf6\x03\x02\x02\x02\xfb","\xf7\x03\x02\x02\x02\xfc\x1d\x03\x02\x02\x02\xfd","\xfe\x05 \x11\x02\xfe\xff\x07\x18\x02\x02\xff","\u0101\x03\x02\x02\x02\u0100\xfd\x03\x02\x02\x02\u0101","\u0104\x03\x02\x02\x02\u0102\u0100\x03\x02\x02\x02\u0102","\u0103\x03\x02\x02\x02\u0103\u0105\x03\x02\x02\x02\u0104","\u0102\x03\x02\x02\x02\u0105\u0106\x05 \x11\x02\u0106","\x1f\x03\x02\x02\x02\u0107\u0109\b\x11\x01\x02\u0108","\u010a\t\x02\x02\x02\u0109\u0108\x03\x02\x02\x02\u0109","\u010a\x03\x02\x02\x02\u010a\u010b\x03\x02\x02\x02\u010b","\u010c\x07\x06\x02\x02\u010c\u010d\x05 \x11\x02\u010d","\u010e\x07\x07\x02\x02\u010e\u011c\x03\x02\x02\x02\u010f","\u0111\t\x02\x02\x02\u0110\u010f\x03\x02\x02\x02\u0110","\u0111\x03\x02\x02\x02\u0111\u0112\x03\x02\x02\x02\u0112","\u0113\x05$\x13\x02\u0113\u0114\x07\x06\x02\x02\u0114","\u0115\x05 \x11\x02\u0115\u0116\x07\x07\x02\x02\u0116","\u011c\x03\x02\x02\x02\u0117\u0119\t\x02\x02\x02\u0118","\u0117\x03\x02\x02\x02\u0118\u0119\x03\x02\x02\x02\u0119",'\u011a\x03\x02\x02\x02\u011a\u011c\x05"\x12\x02\u011b',"\u0107\x03\x02\x02\x02\u011b\u0110\x03\x02\x02\x02\u011b","\u0118\x03\x02\x02\x02\u011c\u0128\x03\x02\x02\x02\u011d","\u011e\f\b\x02\x02\u011e\u011f\x07\x19\x02\x02\u011f\u0127","\x05 \x11\t\u0120\u0121\f\x07\x02\x02\u0121\u0122\t\x03","\x02\x02\u0122\u0127\x05 \x11\b\u0123\u0124\f\x06\x02\x02","\u0124\u0125\t\x02\x02\x02\u0125\u0127\x05 \x11\x07\u0126","\u011d\x03\x02\x02\x02\u0126\u0120\x03\x02\x02\x02\u0126","\u0123\x03\x02\x02\x02\u0127\u012a\x03\x02\x02\x02\u0128","\u0126\x03\x02\x02\x02\u0128\u0129\x03\x02\x02\x02\u0129","!\x03\x02\x02\x02\u012a\u0128\x03\x02\x02\x02\u012b","\u012c\t\x04\x02\x02\u012c#\x03\x02\x02\x02\u012d\u012e","\t\x05\x02\x02\u012e%\x03\x02\x02\x02\x19*Vn\x84\x8b","\x8d\x9a\xba\xbe\xc4\xd0\xdb\xe6\xed\xf4\xfb\u0102","\u0109\u0110\u0118\u011b\u0126\u0128"].join(""),atn=(new antlr4.atn.ATNDeserializer).deserialize(serializedATN),decisionsToDFA=atn.decisionToState.map(function(ds,index){return new antlr4.dfa.DFA(ds,index)}),sharedContextCache=new antlr4.PredictionContextCache,literalNames=[null,"'}'","'opaque'","';'","'('","')'","'if'","'=='","'barrier'","'OPENQASM'","'include'","'qreg'","'['","']'","'creg'","'gate'","'{'","'measure'","'->'","'reset'","'U'","'CX'","','","'^'","'*'","'/'","'+'","'-'","'sin'","'cos'","'tan'","'exp'","'ln'","'sqrt'","'pi'"],symbolicNames=[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"PI","REAL","SUBREAL","EXPREAL","INT","ID","WS","FILENAME","COMMENT","LINE_COMMENT"],ruleNames=["mainprog","statement","version","include","filename","decl","gatedecl","goplist","qop","uop","anylist","idlist","mixedlist","argument","explist","exp","atom","unaryop"];function QASMParser(input){return antlr4.Parser.call(this,input),this._interp=new antlr4.atn.ParserATNSimulator(this,atn,decisionsToDFA,sharedContextCache),this.ruleNames=ruleNames,this.literalNames=literalNames,this.symbolicNames=symbolicNames,this}function MainprogContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_mainprog,this}function StatementContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_statement,this}function VersionContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_version,this}function IncludeContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_include,this}function FilenameContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_filename,this}function DeclContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_decl,this}function GatedeclContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_gatedecl,this}function GoplistContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_goplist,this}function QopContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_qop,this}function UopContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_uop,this}function AnylistContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_anylist,this}function IdlistContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_idlist,this}function MixedlistContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_mixedlist,this}function ArgumentContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_argument,this}function ExplistContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_explist,this}function ExpContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_exp,this}function AtomContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_atom,this}function UnaryopContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_unaryop,this}(QASMParser.prototype=Object.create(antlr4.Parser.prototype)).constructor=QASMParser,Object.defineProperty(QASMParser.prototype,"atn",{get:function(){return atn}}),QASMParser.EOF=antlr4.Token.EOF,QASMParser.T__0=1,QASMParser.T__1=2,QASMParser.T__2=3,QASMParser.T__3=4,QASMParser.T__4=5,QASMParser.T__5=6,QASMParser.T__6=7,QASMParser.T__7=8,QASMParser.T__8=9,QASMParser.T__9=10,QASMParser.T__10=11,QASMParser.T__11=12,QASMParser.T__12=13,QASMParser.T__13=14,QASMParser.T__14=15,QASMParser.T__15=16,QASMParser.T__16=17,QASMParser.T__17=18,QASMParser.T__18=19,QASMParser.T__19=20,QASMParser.T__20=21,QASMParser.T__21=22,QASMParser.T__22=23,QASMParser.T__23=24,QASMParser.T__24=25,QASMParser.T__25=26,QASMParser.T__26=27,QASMParser.T__27=28,QASMParser.T__28=29,QASMParser.T__29=30,QASMParser.T__30=31,QASMParser.T__31=32,QASMParser.T__32=33,QASMParser.PI=34,QASMParser.REAL=35,QASMParser.SUBREAL=36,QASMParser.EXPREAL=37,QASMParser.INT=38,QASMParser.ID=39,QASMParser.WS=40,QASMParser.FILENAME=41,QASMParser.COMMENT=42,QASMParser.LINE_COMMENT=43,QASMParser.RULE_mainprog=0,QASMParser.RULE_statement=1,QASMParser.RULE_version=2,QASMParser.RULE_include=3,QASMParser.RULE_filename=4,QASMParser.RULE_decl=5,QASMParser.RULE_gatedecl=6,QASMParser.RULE_goplist=7,QASMParser.RULE_qop=8,QASMParser.RULE_uop=9,QASMParser.RULE_anylist=10,QASMParser.RULE_idlist=11,QASMParser.RULE_mixedlist=12,QASMParser.RULE_argument=13,QASMParser.RULE_explist=14,QASMParser.RULE_exp=15,QASMParser.RULE_atom=16,QASMParser.RULE_unaryop=17,((MainprogContext.prototype=Object.create(antlr4.ParserRuleContext.prototype)).constructor=MainprogContext).prototype.version=function(){return this.getTypedRuleContext(VersionContext,0)},MainprogContext.prototype.statement=function(i){return void 0===i&&(i=null),null===i?this.getTypedRuleContexts(StatementContext):this.getTypedRuleContext(StatementContext,i)},MainprogContext.prototype.enterRule=function(listener){listener instanceof QASMListener&&listener.enterMainprog(this)},MainprogContext.prototype.exitRule=function(listener){listener instanceof QASMListener&&listener.exitMainprog(this)},QASMParser.MainprogContext=MainprogContext,QASMParser.prototype.mainprog=function(){var localctx=new MainprogContext(this,this._ctx,this.state);this.enterRule(localctx,0,QASMParser.RULE_mainprog);var _la=0;try{for(this.enterOuterAlt(localctx,1),this.state=36,this.version(),this.state=40,this._errHandler.sync(this),_la=this._input.LA(1);0==(-32&_la)&&0!=(1<<_la&(1<wire))return!1}return!0},QuantumCircuit.prototype.isEmptyPlace=function(col,wires,usingCregs){var mx,minWire=Math.min.apply(null,wires),maxWire=Math.max.apply(null,wires);!usingCregs||maxWire<(mx=this.numQubits-1)&&(maxWire=mx);for(var allEmpty=!0,wire=minWire;wire<=maxWire;wire++)this.isEmptyCell(col,wire)||(allEmpty=!1);return allEmpty},QuantumCircuit.prototype.lastNonEmptyPlace=function(wires,usingCregs){var mx,col=this.numCols(),allEmpty=!0,minWire=Math.min.apply(null,wires),maxWire=Math.max.apply(null,wires);for(!usingCregs||maxWire<(mx=this.numQubits-1)&&(maxWire=mx);allEmpty&&col--;)for(var wire=minWire;wire<=maxWire;wire++)this.isEmptyCell(col,wire)||(allEmpty=!1);return col},QuantumCircuit.prototype.insertColumn=function(colIndex){for(var i=0;ithis.numQubits&&(this.numQubits=wire+1);this.gates.lengththis.numQubits&&(this.numQubits=wire+1);this.gates.lengthextWire&&(newExtWire=extW)}extWire=newExtWire}}extColumn++}}}}for(var circuit=new QuantumCircuit,blockCounter=0,blockIndex=0;blockIndex=command.params.length){errorMessage='Internal error: QUIL definition for gate "'+command.name+" is invalid.";if(errorCallback)return void errorCallback([{msg:errorMessage,line:lineOffset+command.line,col:command.col}]);throw new Error(errorMessage)}params[paramName]=command.params[paramIndex]}}else{if(((gateDef=gateInfo.customGate).params||[]).length!=(command.params||[]).length){errorMessage="Invalid number of params. Expected "+(gateDef.params||[]).length+" got "+(command.params||[]).length+".";if(errorCallback)return void errorCallback([{msg:errorMessage,line:lineOffset+command.line,col:command.col}]);throw new Error(errorMessage)}for(i=0;igate.wires.length||gate.wires[0]>gate.wires[1]?circuit.transformMatrix(maxWire-minWire+1,rawMatrix,targetWires):rawMatrix).map(function(row,rowIndex){0>data.offset}}}(parseInt(inst.mask),parseInt(inst.val)))){var errorMessage="Invalid classical condition.";if(errorCallback)return void errorCallback([{msg:errorMessage}]);throw new Error(errorMessage)}conditions[inst.register]=condition;break;case"measure":for(var qIndex=0;qIndexmemory)return{name:cregName,bit:memory-totalBits};totalBits+=creg.length}return null}(inst.memory[qIndex]);if(!creg){errorMessage="Invalid measurement destination.";if(errorCallback)return void errorCallback([{msg:errorMessage}]);throw new Error(errorMessage)}var options={creg:creg};this.appendGate("measure",qubit,options)}break;case"barrier":break;default:var options={params:{},condition:{}},gateName=inst.name;switch(gateName){case"iden":gateName="id"}var condition,gateDef=this.basicGates[gateName];if(!gateDef){errorMessage='Unknown gate "'+inst.name+'".';if(errorCallback)return void errorCallback([{msg:errorMessage}]);throw new Error(errorMessage)}if(gateDef.params&&gateDef.params.length){if(!inst.params||!inst.params.length||inst.params.length!=gateDef.params.length){errorMessage='Invalid number of params for gate "'+inst.name+'".';if(errorCallback)return void errorCallback([{msg:errorMessage}]);throw new Error(errorMessage)}for(var parIndex=0;parIndex',gateLabel&&(res+=''+gateLabel+""),res}function gateCircleSVG(cellX,cellY,gateName,gateLabel,selected){var centerX=cellX+options.cellWidth/2,centerY=cellY+options.cellHeight/2,gateWidth=.8*options.cellWidth,gateHeight=.8*options.cellHeight,gateX=cellX+(options.cellWidth-gateWidth)/2,gateY=cellY+(options.cellHeight-gateHeight)/2,res="";return res+='',gateLabel&&(res+=''+gateLabel+""),res}function gateNotSVG(cellX,cellY,gateName,selected){var centerX=cellX+options.cellWidth/2,centerY=cellY+options.cellHeight/2,gateWidth=.8*options.cellWidth,gateHeight=.8*options.cellHeight,gateX=cellX+(options.cellWidth-gateWidth)/2,gateY=cellY+(options.cellHeight-gateHeight)/2,res="";return res+='',res+='',res+=''}function gateGaugeSVG(gateX,gateY,gateName,selected){var x,y,radius,startAngle,endAngle,start,end,largeArcFlag,gateWidth=options.cellWidth,gateHeight=options.cellHeight,centerX=gateX+gateWidth/2,centerY=gateY+gateHeight/2,movedown=gateHeight/5,res="";return res+='',res+='',res+=''}function gateXSVG(cellX,cellY,gateName,selected){var gateWidth=.4*options.cellWidth,gateHeight=.4*options.cellHeight,gateX=cellX+(options.cellWidth-gateWidth)/2,gateY=cellY+(options.cellHeight-gateHeight)/2,res="";return res+='',res+=''}function gateDotSVG(cellX,cellY,gateName,selected){var res="";return res+=''}function gateInvertedDotSVG(cellX,cellY,gateName,selected){var res="";return res+=''}function gateSVG(gateX,gateY,gateName,gateLabel,connector,drawBox,selected){var res="";switch("box"!=connector&&drawBox&&(res+=gateBoxSVG(gateX,gateY,0,"",selected)),connector){case"box":res+=gateBoxSVG(gateX,gateY,0,gateLabel,selected);break;case"rect":res+=function(gateX,gateY,gateLabel,selected){var gateWidth=2*options.cellWidth,gateHeight=options.cellHeight,res="";return res+='',gateLabel&&(res+=''+gateLabel+""),res}(gateX,gateY,gateLabel,selected);break;case"circle":res+=gateCircleSVG(gateX,gateY,0,gateLabel,selected);break;case"not":res+=gateNotSVG(gateX,gateY,0,selected);break;case"x":res+=gateXSVG(gateX,gateY,0,selected);break;case"dot":res+=gateDotSVG(gateX,gateY,0,selected);break;case"ndot":res+=gateInvertedDotSVG(gateX,gateY,0,selected);break;case"gauge":res+=gateGaugeSVG(gateX,gateY,0,selected)}return res}function escapeHtml(str){return str.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}if(options.gateGallery||options.gateGalleryRaw||options.customGateGallery){var gateList=[];if(options.gateGallery||options.gateGalleryRaw){var uniq=[];for(var gateName in this.basicGates){var gateLabel,connector,uniqStr,gate=this.basicGates[gateName],dinfo=JSON.parse(JSON.stringify(gate.drawingInfo||{connectors:["box"]}));dinfo.connectors&&(gateLabel=dinfo.label||gateName,connector=dinfo.connectors?dinfo.connectors[dinfo.connectors.length-1]:"box",options.gateGallery&&("x"!=connector&&"dot"!=connector||(connector="box")),uniqStr=gateLabel+"|"+connector,uniq.indexOf(uniqStr)<0&&"ccx"!=gateName&&(uniq.push(uniqStr),svg="",options.embedded||(svg+='',svg+=''),svg+='',svg+=gateSVG(0,0,0,gateLabel,connector,!!options.gateGallery,!1),svg+="",options.gateGallery?gateList.push(svg):gateList.push({name:gateName,svg:svg})))}var dotsvg="";options.embedded||(dotsvg+='',dotsvg+=''),dotsvg+='',dotsvg+=gateSVG(0,0,0,"dot","dot",!!options.gateGallery,!1),dotsvg+="",options.gateGallery?gateList.push(dotsvg):gateList.push({name:"dot",svg:dotsvg});var ndotsvg="";options.embedded||(ndotsvg+='',ndotsvg+=''),ndotsvg+='',ndotsvg+=gateSVG(0,0,0,"ndot","ndot",!!options.gateGallery,!1),ndotsvg+="",options.gateGallery?gateList.push(ndotsvg):gateList.push({name:"dot",svg:ndotsvg})}if(options.customGateGallery)for(var gateName in this.customGates){var svg="";options.embedded||(svg+='',svg+=''),svg+='',svg+=gateSVG(0,0,0,gateName,"rect",!1,!1),svg+="",gateList.push(svg)}return gateList}svg="";if(options.embedded||(svg+='',svg+=''),svg+='',options.placeholders)for(var column=0;column<=numCols;column++)for(var wire=0;wire<=this.numQubits;wire++)svg+=function(colIndex,wire){var svg="",gateWidth=options.cellWidth+options.hSpacing,gateHeight=options.cellHeight+options.vSpacing,gateX=getCellX(colIndex)-options.hSpacing,gateY=getCellY(wire)-options.vSpacing;return wire==numRows&&(gateHeight=options.vSpacing),colIndex==numCols&&(gateWidth=options.hSpacing),svg+=''}(column,wire);for(wire=0;wire|'+initSymbol+"⟩",svg+='',svg+='q'+wire+""}for(var cregName in this.cregs){svg+='0',svg+='',svg+=''+cregName+""}for(column=0;column',blackbox&&(gateX=getCellX(colIndex)-options.blackboxPaddingX,gateY=qGateY(topWire)-options.blackboxPaddingY,gateWidth=options.cellWidth+2*options.blackboxPaddingX,cLinkTopY=gateY+(gateHeight=qGateY(bottomWire)+options.cellHeight-gateY+options.blackboxPaddingY),svg+=''+(dinfo.label||gate.name)+"",svg+=''),selected&&(gateX=getCellX(colIndex)-options.selectionPaddingX,gateY=qGateY(topWire)-options.selectionPaddingY,gateWidth=options.cellWidth+2*options.selectionPaddingX,gateHeight=qGateY(bottomWire)+options.cellHeight-gateY+options.selectionPaddingY,cLinkTopY=gateY+gateHeight,svg+=''),topWire==bottomWire||blackbox||(linkX=getCellX(colIndex)+options.cellWidth/2,linkY1=getCellY(topWire)+options.cellHeight/2,linkY2=getCellY(bottomWire)+options.cellHeight/2,svg+='');var linkX,linkY1,linkY2,maxWire=Math.max.apply(null,gate.wires);return gate.wires.map(function(wire,connector){switch(dinfo.connectors[connector]){case"box":var gateX=getCellX(colIndex),gateY=getCellY(wire);svg+=gateBoxSVG(gateX,gateY,gate.name,blackbox?qubitLetter(connector,numRows):dinfo.label||gate.name,selected),blackbox||wire!=bottomWire||(cLinkTopY=gateY+options.cellHeight);break;case"circle":gateX=getCellX(colIndex),gateY=getCellY(wire);svg+=gateCircleSVG(gateX,gateY,gate.name,blackbox?qubitLetter(connector,numRows):dinfo.label||gate.name,selected),blackbox||wire!=bottomWire||(gateHeight=.8*options.cellHeight,cLinkTopY=gateY+gateHeight+(options.cellHeight-gateHeight)/2);break;case"not":var gateHeight,cellX=getCellX(colIndex),cellY=getCellY(wire);svg+=gateNotSVG(cellX,cellY,gate.name,selected),blackbox||wire!=bottomWire||(gateHeight=.8*options.cellHeight,cLinkTopY=cellY+gateHeight+(options.cellHeight-gateHeight)/2);break;case"x":cellX=getCellX(colIndex),cellY=getCellY(wire);svg+=gateXSVG(cellX,cellY,gate.name,selected),blackbox||wire!=bottomWire||(cLinkTopY=qWireY(bottomWire));break;case"dot":cellX=getCellX(colIndex),cellY=getCellY(wire);svg+=gateDotSVG(cellX,cellY,gate.name,selected),blackbox||wire!=bottomWire||(cLinkTopY=qWireY(bottomWire)+options.dotRadius);break;case"ndot":cellX=getCellX(colIndex),cellY=getCellY(wire);svg+=gateInvertedDotSVG(cellX,cellY,gate.name,selected),blackbox||wire!=bottomWire||(cLinkTopY=qWireY(bottomWire)+options.dotRadius);break;case"gauge":gateX=getCellX(colIndex),gateY=getCellY(wire);svg+=gateGaugeSVG(gateX,gateY,gate.name,selected),blackbox||wire!=bottomWire||(cLinkTopY=gateY+options.cellHeight)}if(gate.options&&gate.options.params&&wire==maxWire){var gateX=getCellX(colIndex),gateY=getCellY(wire),centerX=gateX+options.cellWidth/2,paramsStr="";for(var paramName in gate.options.params){paramsStr&&(paramsStr+=", ");var paramVal=gate.options.params[paramName];"string"==typeof paramVal&¶mVal.match(/^[\+\-]?\d*\.?\d+(?:[Ee][\+\-]?\d+)?$/)&&(paramVal=parseFloat(paramVal)),"number"==typeof paramVal&&(paramVal=math.round(paramVal,3)),paramsStr+=paramVal}svg+=''+paramsStr+""}}),"measure"==gate.name&&gate.options&&gate.options.creg&&gate.options.creg.name&&(linkX=getCellX(colIndex)+options.cellWidth/2,linkY1=cLinkTopY,linkY2=cWireY(gate.options.creg.name),svg+='',svg+='',svg+='',svg+=''+gate.options.creg.bit+""),gate.options&&gate.options.condition&&gate.options.condition.creg&&(linkX=getCellX(colIndex)+options.cellWidth/2,linkY1=cLinkTopY,linkY2=cWireY(gate.options.condition.creg),svg+='',svg+='',svg+='== '+gate.options.condition.value+""),svg+=""}(gate,column))}for(column=0;column'}(gate,column,wire))}if(options.drawBlochSpheres){var currentCol=totalCols-1;options.drawHybrid&&(currentCol-=2);for(wire=0;wire',svg+='',svg+='',svg+='
',svg+='',svg+="",svg+="
",svg+="
",svg+=""}(currentCol,wire,"qc-bloch-group","qc-bloch-canvas")}if(options.drawHybrid){var colIndex=currentCol=totalCols-2,gateX=getCellX(colIndex)+options.blackboxPaddingX,gateY=qGateY(0)+options.blackboxPaddingY,gateWidth=options.cellWidth-2*options.blackboxPaddingX,gateHeight=qGateY(numRows+numCregs-1)+options.cellHeight-gateY-options.blackboxPaddingY,centerX=gateX+gateWidth/2,centerY=gateY+gateHeight/2;cLinkTopY=gateY+gateHeight,svg+='',svg+='Cost';var gate2X=getCellX(colIndex+1)+options.blackboxPaddingX,center2X=gate2X+gateWidth/2;svg+='',svg+='',svg+='',svg+='Optimizer',svg+='';var hWireX=0,globalParamsInfo=this.findGlobalParams();if(globalParamsInfo.globalParams.length){hWireX=getCellX(globalParamsInfo.cells[0][0])+options.cellWidth+options.hSpacing/2;for(var i=0;i',svg+=''}svg+=''}else{svg+='',svg+='?'}}return svg+="
"},QuantumCircuit.prototype.exportToQiskit=function(options,exportAsGateName,circuitReplacement,insideSubmodule){var comment=(options=options||{}).comment,decompose=options.decompose,versionStr=options.versionStr,providerName=options.providerName,backendName=options.backendName,asJupyter=options.asJupyter,shots=options.shots,hybrid=options.hybrid,self=this,providerName=providerName||"Aer";(backendName=backendName||"")||"Aer"!=providerName||(backendName="qasm_simulator"),shots=shots||1024;var version=parseFloat(versionStr||"0.7");isNaN(version),void 0===hybrid&&(hybrid=!!this.options&&!!this.options.hybrid);var circuit=new QuantumCircuit;circuit.load(this.save(decompose));var qiskit="";comment&&(comment||"").split("\n").map(function(cline){1<=cline.length&&"#"!=cline[0]&&(qiskit+="# "),qiskit+=cline,qiskit+="\n"});function mathToStringHandler(node,options){if(node.isSymbolNode){if(0<=["pi","sin","cos","tan","asin","acos","atan"].indexOf(node.name))return"np."+node.name;if(0<=self.params.indexOf(node.name)&&hybrid)return"params["+self.params.indexOf(node.name)+"]"}}function adjustIdentation(addStr,ident){var str="",cfLines=addStr.split("\n"),minIdent=-1;cfLines.map(function(cfLine){var tmpIdent=cfLine.search(/\S/);0<=tmpIdent&&(minIdent<0||tmpIdent ",qasm+=gate.options.creg.name+"["+gate.options.creg.bit+"]"),qasm+=";\n"}}}return exportAsGateName&&(qasm+="}\n\n"),qasm},QuantumCircuit.prototype.exportToPyquil=function(options,exportAsGateName){var comment=(options=options||{}).comment,decompose=options.decompose,versionStr=options.versionStr,lattice=options.lattice,asQVM=options.asQVM,asJupyter=options.asJupyter,shots=options.shots,hybrid=options.hybrid,self=this,version=parseFloat(versionStr||"2.12");isNaN(version)&&(version=2.1),shots=shots||1024,void 0===hybrid&&(hybrid=!!this.options&&!!this.options.hybrid);var circuit=new QuantumCircuit;circuit.load(this.save(decompose));function mathToStringHandler(node,options){if(node.isSymbolNode){if(0<=["pi","sin","cos","tan","asin","acos","atan"].indexOf(node.name))return"np."+node.name;if(0<=self.params.indexOf(node.name)&&hybrid)return"params["+self.params.indexOf(node.name)+"]"}}function adjustIdentation(addStr,ident){var str="",cfLines=addStr.split("\n"),minIdent=-1;cfLines.map(function(cfLine){var tmpIdent=cfLine.search(/\S/);0<=tmpIdent&&(minIdent<0||tmpIdent')]\n",aqasm+=indent+" string_state = string_state[::-1]\n",aqasm+=indent+" counts[string_state] += 1\n\n",hybrid?(aqasm+=indent+"# CALCULATE COST HERE\n",(costFunction=this.options&&this.options.hybridOptions&&this.options.hybridOptions.costFunction&&this.options.hybridOptions.costFunction.python||"").trim()||(costFunction="cost = 0"),aqasm+=function(addStr,ident){var str="",cfLines=addStr.split("\n"),minIdent=-1;cfLines.map(function(cfLine){var tmpIdent=cfLine.search(/\S/);0<=tmpIdent&&(minIdent<0||tmpIdentusedWires.length){(combineItem={}).circuit=new QuantumCircuit(bounds.numQubits-usedWires.length),combineItem.wires=[];for(var i=0;i\t"+perc+"%\n"}}return s},QuantumCircuit.prototype.print=function(onlyPossible){console.log(this.stateAsString(onlyPossible))},QuantumCircuit.prototype.gotClassicalControl=function(){for(var column=0;columnsize;)this.cregs[creg].pop()}},QuantumCircuit.prototype.getCreg=function(creg){return this.cregs[creg]},QuantumCircuit.prototype.setCregBit=function(creg,cbit,value){var bit=parseInt(cbit);if(isNaN(bit))throw'Error: invalid "cbit" argument to "setCregBit" method: expected "integer" got "'+typeof cbit+'".';for(this.cregs[creg]||(this.cregs[creg]=[]);bit>=this.cregs[creg].length;)this.cregs[creg].push(0);this.cregs[creg][bit]=value?1:0},QuantumCircuit.prototype.getCregBit=function(creg,cbit){if(!this.cregs[creg])throw'Error: "getCregBit": unknown register "'+creg+'".';var bit=parseInt(cbit);if(isNaN(bit)||bit>=this.cregs[creg].length)throw'Error: "getCregBit": bit "'+cbit+'" not found.';return this.cregs[creg][bit]},QuantumCircuit.prototype.cregBase=function(creg){if(!this.cregs[creg])throw'Error: "getCregBit": unknown register "'+creg+'".';var base=0;for(var regName in this.cregs){if(regName==creg)return base;base+=this.cregs[regName].length}},QuantumCircuit.prototype.cregTotalBits=function(){var bits=0;for(var regName in this.cregs)bits+=this.cregs[regName].length;return bits},QuantumCircuit.prototype.getCregValue=function(creg){if(!this.cregs[creg])throw'Error: "getCregBit": unknown register "'+creg+'".';for(var len=this.cregs[creg].length,value=0,i=0;iMath.PI&&(params[paramName]=Math.PI-params[paramName])}),opt.params=params),"measure"==gateName?opt.creg={name:"c",bit:gateWires[0]}:options.noClassicControl||0!=Math.floor(4*Math.random())||(cregBits=this.cregTotalBits())&&(opt.condition={creg:"c",value:Math.floor(Math.random()*math.pow(2,cregBits))}),this.appendGate(gateName,gateWires,opt),gateCount++}}}},QuantumCircuit.prototype.randomUnitary=function(numQubits){var circ=new QuantumCircuit;return circ.randomCircuit(numQubits||1,8*(numQubits||1),{useGates:["rx","rz","cz"],noMeasure:!0,noReset:!0,noClassicControl:!0}),circ.circuitMatrix()},QuantumCircuit.prototype.eulerAnglesZYZ=function(inputMatrix){var eulerAngles={theta:null,phi:null,lambda:null,phase:null},coeff=math.pow(math.det(inputMatrix),-.5);eulerAngles.phase=-1*math.complex(coeff).toPolar().phi;var su_mat=math.multiply(coeff,inputMatrix);eulerAngles.theta=2*math.atan2(math.abs(su_mat[1][0]),math.abs(su_mat[0][0]));var phiplambda=2*math.complex(su_mat[1][1]).toPolar().phi,phimlamda=2*math.complex(su_mat[1][0]).toPolar().phi;return eulerAngles.phi=(phiplambda+phimlamda)/2,eulerAngles.lambda=(phiplambda-phimlamda)/2,eulerAngles},module.exports=QuantumCircuit},{"./qasm_import/QASMImport.js":1,mathjs:943}],6:[function(require,module,exports){var Token=require("./Token").Token,Lexer=require("./Lexer").Lexer,Interval=require("./IntervalSet").Interval;function TokenStream(){return this}function BufferedTokenStream(tokenSource){return TokenStream.call(this),this.tokenSource=tokenSource,this.tokens=[],this.index=-1,this.fetchedEOF=!1,this}((BufferedTokenStream.prototype=Object.create(TokenStream.prototype)).constructor=BufferedTokenStream).prototype.mark=function(){return 0},BufferedTokenStream.prototype.release=function(marker){},BufferedTokenStream.prototype.reset=function(){this.seek(0)},BufferedTokenStream.prototype.seek=function(index){this.lazyInit(),this.index=this.adjustSeekIndex(index)},BufferedTokenStream.prototype.get=function(index){return this.lazyInit(),this.tokens[index]},BufferedTokenStream.prototype.consume=function(){if(!(0<=this.index&&(this.fetchedEOF?this.index=this.tokens.length&&(stop=this.tokens.length-1);for(var i=start;i=this.tokens.length?this.tokens[this.tokens.length-1]:this.tokens[i]},BufferedTokenStream.prototype.adjustSeekIndex=function(i){return i},BufferedTokenStream.prototype.lazyInit=function(){-1===this.index&&this.setup()},BufferedTokenStream.prototype.setup=function(){this.sync(0),this.index=this.adjustSeekIndex(0)},BufferedTokenStream.prototype.setTokenSource=function(tokenSource){this.tokenSource=tokenSource,this.tokens=[],this.index=-1,this.fetchedEOF=!1},BufferedTokenStream.prototype.nextTokenOnChannel=function(i,channel){if(this.sync(i),i>=this.tokens.length)return-1;for(var token=this.tokens[i];token.channel!==this.channel;){if(token.type===Token.EOF)return-1;i+=1,this.sync(i),token=this.tokens[i]}return i},BufferedTokenStream.prototype.previousTokenOnChannel=function(i,channel){for(;0<=i&&this.tokens[i].channel!==channel;)--i;return i},BufferedTokenStream.prototype.getHiddenTokensToRight=function(tokenIndex,channel){if(void 0===channel&&(channel=-1),this.lazyInit(),tokenIndex<0||tokenIndex>=this.tokens.length)throw tokenIndex+" not in 0.."+this.tokens.length-1;var nextOnChannel=this.nextTokenOnChannel(tokenIndex+1,Lexer.DEFAULT_TOKEN_CHANNEL),from_=tokenIndex+1,to=-1===nextOnChannel?this.tokens.length-1:nextOnChannel;return this.filterForChannel(from_,to,channel)},BufferedTokenStream.prototype.getHiddenTokensToLeft=function(tokenIndex,channel){if(void 0===channel&&(channel=-1),this.lazyInit(),tokenIndex<0||tokenIndex>=this.tokens.length)throw tokenIndex+" not in 0.."+this.tokens.length-1;var prevOnChannel=this.previousTokenOnChannel(tokenIndex-1,Lexer.DEFAULT_TOKEN_CHANNEL);if(prevOnChannel===tokenIndex-1)return null;var from_=prevOnChannel+1,to=tokenIndex-1;return this.filterForChannel(from_,to,channel)},BufferedTokenStream.prototype.filterForChannel=function(left,right,channel){for(var hidden=[],i=left;i=this.tokens.length&&(stop=this.tokens.length-1);for(var s="",i=start;i=this._size)throw"cannot consume EOF";this._index+=1},InputStream.prototype.LA=function(offset){if(0===offset)return 0;offset<0&&(offset+=1);var pos=this._index+offset-1;return pos<0||pos>=this._size?Token.EOF:this.data[pos]},InputStream.prototype.LT=function(offset){return this.LA(offset)},InputStream.prototype.mark=function(){return-1},InputStream.prototype.release=function(marker){},InputStream.prototype.seek=function(_index){_index<=this._index?this._index=_index:this._index=Math.min(_index,this._size)},InputStream.prototype.getText=function(start,stop){if(stop>=this._size&&(stop=this._size-1),start>=this._size)return"";if(this.decodeToUnicodeCodePoints){for(var result="",i=start;i<=stop;i++)result+=String.fromCodePoint(this.data[i]);return result}return this.strdata.slice(start,stop+1)},InputStream.prototype.toString=function(){return this.strdata},exports.InputStream=InputStream},{"./Token":20,"./polyfills/codepointat":48,"./polyfills/fromcodepoint":49}],12:[function(require,module,exports){var Token=require("./Token").Token;function Interval(start,stop){return this.start=start,this.stop=stop,this}function IntervalSet(){this.intervals=null,this.readOnly=!1}Interval.prototype.contains=function(item){return item>=this.start&&item=r.stop?(this.intervals.pop(k+1),this.reduce(k)):l.stop>=r.start&&(this.intervals[k]=new Interval(l.start,r.stop),this.intervals.pop(k+1)))},IntervalSet.prototype.complement=function(start,stop){var result=new IntervalSet;result.addInterval(new Interval(start,stop+1));for(var i=0;ii.start&&v.stop=i.stop?(this.intervals.splice(k,1),--k):v.start"):names.push("'"+String.fromCharCode(v.start)+"'"):names.push("'"+String.fromCharCode(v.start)+"'..'"+String.fromCharCode(v.stop-1)+"'")}return 1"):names.push(v.start.toString()):names.push(v.start.toString()+".."+(v.stop-1).toString())}return 1":a===Token.EPSILON?"":literalNames[a]||symbolicNames[a]},exports.Interval=Interval,exports.IntervalSet=IntervalSet},{"./Token":20}],13:[function(require,module,exports){var Set=require("./Utils").Set,BitSet=require("./Utils").BitSet,Token=require("./Token").Token,ATNConfig=require("./atn/ATNConfig").ATNConfig,IntervalSet=(require("./IntervalSet").Interval,require("./IntervalSet").IntervalSet),RuleStopState=require("./atn/ATNState").RuleStopState,RuleTransition=require("./atn/Transition").RuleTransition,NotSetTransition=require("./atn/Transition").NotSetTransition,WildcardTransition=require("./atn/Transition").WildcardTransition,AbstractPredicateTransition=require("./atn/Transition").AbstractPredicateTransition,pc=require("./PredictionContext"),predictionContextFromRuleContext=pc.predictionContextFromRuleContext,PredictionContext=pc.PredictionContext,SingletonPredictionContext=pc.SingletonPredictionContext;function LL1Analyzer(atn){this.atn=atn}LL1Analyzer.HIT_PRED=Token.INVALID_TYPE,LL1Analyzer.prototype.getDecisionLookahead=function(s){if(null===s)return null;for(var count=s.transitions.length,look=[],alt=0;alt":"\n"===c?"\\n":"\t"===c?"\\t":"\r"===c?"\\r":c},Lexer.prototype.getCharErrorDisplay=function(c){return"'"+this.getErrorDisplayForChar(c)+"'"},Lexer.prototype.recover=function(re){this._input.LA(1)!==Token.EOF&&(re instanceof LexerNoViableAltException?this._interp.consume(this._input):this._input.consume())},exports.Lexer=Lexer},{"./CommonTokenFactory":8,"./Recognizer":18,"./Token":20,"./error/Errors":45}],15:[function(require,module,exports){var Token=require("./Token").Token,ParseTreeListener=require("./tree/Tree").ParseTreeListener,Recognizer=require("./Recognizer").Recognizer,DefaultErrorStrategy=require("./error/ErrorStrategy").DefaultErrorStrategy,ATNDeserializer=require("./atn/ATNDeserializer").ATNDeserializer,ATNDeserializationOptions=require("./atn/ATNDeserializationOptions").ATNDeserializationOptions,TerminalNode=require("./tree/Tree").TerminalNode,ErrorNode=require("./tree/Tree").ErrorNode;function TraceListener(parser){return ParseTreeListener.call(this),this.parser=parser,this}function Parser(input){return Recognizer.call(this),this._input=null,this._errHandler=new DefaultErrorStrategy,this._precedenceStack=[],this._precedenceStack.push(0),this._ctx=null,this.buildParseTrees=!0,this._tracer=null,this._parseListeners=null,this._syntaxErrors=0,this.setInputStream(input),this}((TraceListener.prototype=Object.create(ParseTreeListener.prototype)).constructor=TraceListener).prototype.enterEveryRule=function(ctx){console.log("enter "+this.parser.ruleNames[ctx.ruleIndex]+", LT(1)="+this.parser._input.LT(1).text)},TraceListener.prototype.visitTerminal=function(node){console.log("consume "+node.symbol+" rule "+this.parser.ruleNames[this.parser._ctx.ruleIndex])},TraceListener.prototype.exitEveryRule=function(ctx){console.log("exit "+this.parser.ruleNames[ctx.ruleIndex]+", LT(1)="+this.parser._input.LT(1).text)},((Parser.prototype=Object.create(Recognizer.prototype)).contructor=Parser).bypassAltsAtnCache={},Parser.prototype.reset=function(){null!==this._input&&this._input.seek(0),this._errHandler.reset(this),this._ctx=null,this._syntaxErrors=0,this.setTrace(!1),this._precedenceStack=[],this._precedenceStack.push(0),null!==this._interp&&this._interp.reset()},Parser.prototype.match=function(ttype){var t=this.getCurrentToken();return t.type===ttype?(this._errHandler.reportMatch(this),this.consume()):(t=this._errHandler.recoverInline(this),this.buildParseTrees&&-1===t.tokenIndex&&this._ctx.addErrorNode(t)),t},Parser.prototype.matchWildcard=function(){var t=this.getCurrentToken();return 0=this._precedenceStack[this._precedenceStack.length-1]},Parser.prototype.inContext=function(context){return!1},Parser.prototype.isExpectedToken=function(symbol){var atn=this._interp.atn,ctx=this._ctx,s=atn.states[this.state];if((following=atn.nextTokens(s)).contains(symbol))return!0;if(!following.contains(Token.EPSILON))return!1;for(;null!==ctx&&0<=ctx.invokingState&&following.contains(Token.EPSILON);){var following,rt=atn.states[ctx.invokingState].transitions[0];if((following=atn.nextTokens(rt.followState)).contains(symbol))return!0;ctx=ctx.parentCtx}return!(!following.contains(Token.EPSILON)||symbol!==Token.EOF)},Parser.prototype.getExpectedTokens=function(){return this._interp.atn.getExpectedTokens(this.state,this._ctx)},Parser.prototype.getExpectedTokensWithinCurrentRule=function(){var atn=this._interp.atn,s=atn.states[this.state];return atn.nextTokens(s)},Parser.prototype.getRuleIndex=function(ruleName){var ruleIndex=this.getRuleIndexMap()[ruleName];return null!==ruleIndex?ruleIndex:-1},Parser.prototype.getRuleInvocationStack=function(p){null===(p=p||null)&&(p=this._ctx);for(var stack=[];null!==p;){var ruleIndex=p.ruleIndex;ruleIndex<0?stack.push("n/a"):stack.push(this.ruleNames[ruleIndex]),p=p.parentCtx}return stack},Parser.prototype.getDFAStrings=function(){return this._interp.decisionToDFA.toString()},Parser.prototype.dumpDFA=function(){for(var seenOne=!1,i=0;i=this.children.length)return null;if(null===type)return this.children[i];for(var j=0;j=this.children.length)return null;for(var j=0;jb.returnState&&(payloads[0]=b.returnState,payloads[1]=a.returnState);var apc=new ArrayPredictionContext(parents=[singleParent,singleParent],payloads);return null!==mergeCache&&mergeCache.set(a,b,apc),apc}var payloads=[a.returnState,b.returnState],parents=[a.parentCtx,b.parentCtx];a.returnState>b.returnState&&(payloads[0]=b.returnState,payloads[1]=a.returnState,parents=[b.parentCtx,a.parentCtx]);var a_=new ArrayPredictionContext(parents,payloads);return null!==mergeCache&&mergeCache.set(a,b,a_),a_}}(a,b,rootIsWildcard,mergeCache);if(rootIsWildcard){if(a instanceof EmptyPredictionContext)return a;if(b instanceof EmptyPredictionContext)return b}return a instanceof SingletonPredictionContext&&(a=new ArrayPredictionContext([a.getParent()],[a.returnState])),b instanceof SingletonPredictionContext&&(b=new ArrayPredictionContext([b.getParent()],[b.returnState])),function(a,b,rootIsWildcard,mergeCache){if(null!==mergeCache){var previous=mergeCache.get(a,b);if(null!==previous)return previous;if(null!==(previous=mergeCache.get(b,a)))return previous}var i=0,j=0,k=0,mergedReturnStates=[],mergedParents=[];for(;i";var s=t.text;return null===s&&(s=t.type===Token.EOF?"":"<"+t.type+">"),"'"+(s=s.replace("\n","\\n").replace("\r","\\r").replace("\t","\\t"))+"'"},Recognizer.prototype.getErrorListenerDispatch=function(){return new ProxyErrorListener(this._listeners)},Recognizer.prototype.sempred=function(localctx,ruleIndex,actionIndex){return!0},Recognizer.prototype.precpred=function(localctx,precedence){return!0},Object.defineProperty(Recognizer.prototype,"state",{get:function(){return this._stateNumber},set:function(state){this._stateNumber=state}}),exports.Recognizer=Recognizer},{"./Token":20,"./error/ErrorListener":43}],19:[function(require,module,exports){var RuleNode=require("./tree/Tree").RuleNode,INVALID_INTERVAL=require("./tree/Tree").INVALID_INTERVAL,INVALID_ALT_NUMBER=require("./atn/ATN").INVALID_ALT_NUMBER;function RuleContext(parent,invokingState){return RuleNode.call(this),this.parentCtx=parent||null,this.invokingState=invokingState||-1,this}((RuleContext.prototype=Object.create(RuleNode.prototype)).constructor=RuleContext).prototype.depth=function(){for(var n=0,p=this;null!==p;)p=p.parentCtx,n+=1;return n},RuleContext.prototype.isEmpty=function(){return-1===this.invokingState},RuleContext.prototype.getSourceInterval=function(){return INVALID_INTERVAL},RuleContext.prototype.getRuleContext=function(){return this},RuleContext.prototype.getPayload=function(){return this},RuleContext.prototype.getText=function(){return 0===this.getChildCount()?"":this.children.map(function(child){return child.getText()}).join("")},RuleContext.prototype.getAltNumber=function(){return INVALID_ALT_NUMBER},RuleContext.prototype.setAltNumber=function(altNumber){},RuleContext.prototype.getChild=function(i){return null},RuleContext.prototype.getChildCount=function(){return 0},RuleContext.prototype.accept=function(visitor){return visitor.visitChildren(this)},exports.RuleContext=RuleContext;var Trees=require("./tree/Trees").Trees;RuleContext.prototype.toStringTree=function(ruleNames,recog){return Trees.toStringTree(this,ruleNames,recog)},RuleContext.prototype.toString=function(ruleNames,stop){ruleNames=ruleNames||null,stop=stop||null;for(var ri,p=this,s="[";null!==p&&p!==stop;){null===ruleNames?p.isEmpty()||(s+=p.invokingState):s+=0<=(ri=p.ruleIndex)&&ri"},set:function(text){this._text=text}}),CommonToken.prototype.toString=function(){var txt=null!==(txt=this.text)?txt.replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\t/g,"\\t"):"";return"[@"+this.tokenIndex+","+this.start+":"+this.stop+"='"+txt+"',<"+this.type+">"+(0>>16)*c1&65535)<<16)&4294967295)<<15|k1>>>17))*c2+(((k1>>>16)*c2&65535)<<16)&4294967295)<<13|h1>>>19))+((5*(h1>>>16)&65535)<<16)&4294967295))+((58964+(h1b>>>16)&65535)<<16);switch(k1=0,remainder){case 3:k1^=(255&key.charCodeAt(i+2))<<16;case 2:k1^=(255&key.charCodeAt(i+1))<<8;case 1:h1^=k1=(65535&(k1=(k1=(65535&(k1^=255&key.charCodeAt(i)))*c1+(((k1>>>16)*c1&65535)<<16)&4294967295)<<15|k1>>>17))*c2+(((k1>>>16)*c2&65535)<<16)&4294967295}return h1^=key.length,h1=2246822507*(65535&(h1^=h1>>>16))+((2246822507*(h1>>>16)&65535)<<16)&4294967295,h1=3266489909*(65535&(h1^=h1>>>13))+((3266489909*(h1>>>16)&65535)<<16)&4294967295,(h1^=h1>>>16)>>>0},Object.defineProperty(Set.prototype,"length",{get:function(){var l=0;for(var key in this.data)0===key.indexOf("hash_")&&(l+=this.data[key].length);return l}}),Set.prototype.add=function(value){var key="hash_"+this.hashFunction(value);if(key in this.data){for(var values=this.data[key],i=0;i>>17,k*=461845907,this.count=this.count+1;var hash=this.hash^k;hash=5*(hash=hash<<13|hash>>>19)+3864292196,this.hash=hash}}},Hash.prototype.finish=function(){var hash=this.hash^4*this.count;return hash^=hash>>>16,hash*=2246822507,hash^=hash>>>13,hash*=3266489909,hash^=hash>>>16},DoubleDict.prototype.get=function(a,b){var d=this[a]||null;return null!==d&&d[b]||null},DoubleDict.prototype.set=function(a,b,o){var d=this[a]||null;null===d&&(d={},this[a]=d),d[b]=o},exports.Hash=Hash,exports.Set=Set,exports.Map=Map,exports.BitSet=BitSet,exports.AltDict=AltDict,exports.DoubleDict=DoubleDict,exports.hashStuff=function(){var hash=new Hash;return hash.update.apply(arguments),hash.finish()},exports.escapeWhitespace=function(s,escapeSpaces){return s=s.replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r"),escapeSpaces&&(s=s.replace(/ /g,"\xb7")),s},exports.arrayToString=arrayToString,exports.titleCase=function(str){return str.replace(/\w\S*/g,function(txt){return txt.charAt(0).toUpperCase()+txt.substr(1)})},exports.equalArrays=function(a,b){if(!Array.isArray(a)||!Array.isArray(b))return!1;if(a==b)return!0;if(a.length!=b.length)return!1;for(var i=0;i=this.states.length)throw"Invalid state number.";var s=this.states[stateNumber];if(!(following=this.nextTokens(s)).contains(Token.EPSILON))return following;var expected=new IntervalSet;for(expected.addSet(following),expected.removeOne(Token.EPSILON);null!==ctx&&0<=ctx.invokingState&&following.contains(Token.EPSILON);){var rt=this.states[ctx.invokingState].transitions[0],following=this.nextTokens(rt.followState);expected.addSet(following),expected.removeOne(Token.EPSILON),ctx=ctx.parentCtx}return following.contains(Token.EPSILON)&&expected.addOne(Token.EOF),expected},ATN.INVALID_ALT_NUMBER=0,exports.ATN=ATN},{"./../IntervalSet":12,"./../LL1Analyzer":13,"./../Token":20}],23:[function(require,module,exports){var DecisionState=require("./ATNState").DecisionState,SemanticContext=require("./SemanticContext").SemanticContext,Hash=require("../Utils").Hash;function checkParams(params,isCfg){if(null===params){var result={state:null,alt:null,context:null,semanticContext:null};return isCfg&&(result.reachesIntoOuterContext=0),result}var props={};return props.state=params.state||null,props.alt=void 0===params.alt?null:params.alt,props.context=params.context||null,props.semanticContext=params.semanticContext||null,isCfg&&(props.reachesIntoOuterContext=params.reachesIntoOuterContext||0,props.precedenceFilterSuppressed=params.precedenceFilterSuppressed||!1),props}function ATNConfig(params,config){return this.checkContext(params,config),params=checkParams(params),config=checkParams(config,!0),this.state=null!==params.state?params.state:config.state,this.alt=null!==params.alt?params.alt:config.alt,this.context=null!==params.context?params.context:config.context,this.semanticContext=null!==params.semanticContext?params.semanticContext:null!==config.semanticContext?config.semanticContext:SemanticContext.NONE,this.reachesIntoOuterContext=config.reachesIntoOuterContext,this.precedenceFilterSuppressed=config.precedenceFilterSuppressed,this}function LexerATNConfig(params,config){ATNConfig.call(this,params,config);var lexerActionExecutor=params.lexerActionExecutor||null;return this.lexerActionExecutor=lexerActionExecutor||(null!==config?config.lexerActionExecutor:null),this.passedThroughNonGreedyDecision=null!==config&&this.checkNonGreedyDecision(config,this.state),this}ATNConfig.prototype.checkContext=function(params,config){null!==params.context&&void 0!==params.context||null!==config&&null!==config.context&&void 0!==config.context||(this.context=null)},ATNConfig.prototype.hashCode=function(){var hash=new Hash;return this.updateHashCode(hash),hash.finish()},ATNConfig.prototype.updateHashCode=function(hash){hash.update(this.state.stateNumber,this.alt,this.context,this.semanticContext)},ATNConfig.prototype.equals=function(other){return this===other||other instanceof ATNConfig&&(this.state.stateNumber===other.state.stateNumber&&this.alt===other.alt&&(null===this.context?null===other.context:this.context.equals(other.context))&&this.semanticContext.equals(other.semanticContext)&&this.precedenceFilterSuppressed===other.precedenceFilterSuppressed)},ATNConfig.prototype.hashCodeForConfigSet=function(){var hash=new Hash;return hash.update(this.state.stateNumber,this.alt,this.semanticContext),hash.finish()},ATNConfig.prototype.equalsForConfigSet=function(other){return this===other||other instanceof ATNConfig&&(this.state.stateNumber===other.state.stateNumber&&this.alt===other.alt&&this.semanticContext.equals(other.semanticContext))},ATNConfig.prototype.toString=function(){return"("+this.state+","+this.alt+(null!==this.context?",["+this.context.toString()+"]":"")+(this.semanticContext!==SemanticContext.NONE?","+this.semanticContext.toString():"")+(0>8&255}return byteToHex[bb[0]]+byteToHex[bb[1]]+byteToHex[bb[2]]+byteToHex[bb[3]]+"-"+byteToHex[bb[4]]+byteToHex[bb[5]]+"-"+byteToHex[bb[6]]+byteToHex[bb[7]]+"-"+byteToHex[bb[8]]+byteToHex[bb[9]]+"-"+byteToHex[bb[10]]+byteToHex[bb[11]]+byteToHex[bb[12]]+byteToHex[bb[13]]+byteToHex[bb[14]]+byteToHex[bb[15]]},ATNDeserializer.prototype.edgeFactory=function(atn,type,src,trg,arg1,arg2,arg3,sets){var target=atn.states[trg];switch(type){case Transition.EPSILON:return new EpsilonTransition(target);case Transition.RANGE:return new RangeTransition(target,0!==arg3?Token.EOF:arg1,arg2);case Transition.RULE:return new RuleTransition(atn.states[arg1],arg2,arg3,target);case Transition.PREDICATE:return new PredicateTransition(target,arg1,arg2,0!==arg3);case Transition.PRECEDENCE:return new PrecedencePredicateTransition(target,arg1);case Transition.ATOM:return new AtomTransition(target,0!==arg3?Token.EOF:arg1);case Transition.ACTION:return new ActionTransition(target,arg1,arg2,0!==arg3);case Transition.SET:return new SetTransition(target,sets[arg1]);case Transition.NOT_SET:return new NotSetTransition(target,sets[arg1]);case Transition.WILDCARD:return new WildcardTransition(target);default:throw"The specified transition type: "+type+" is not valid."}},ATNDeserializer.prototype.stateFactory=function(type,ruleIndex){var sf;if(null===this.stateFactories&&((sf=[])[ATNState.INVALID_TYPE]=null,sf[ATNState.BASIC]=function(){return new BasicState},sf[ATNState.RULE_START]=function(){return new RuleStartState},sf[ATNState.BLOCK_START]=function(){return new BasicBlockStartState},sf[ATNState.PLUS_BLOCK_START]=function(){return new PlusBlockStartState},sf[ATNState.STAR_BLOCK_START]=function(){return new StarBlockStartState},sf[ATNState.TOKEN_START]=function(){return new TokensStartState},sf[ATNState.RULE_STOP]=function(){return new RuleStopState},sf[ATNState.BLOCK_END]=function(){return new BlockEndState},sf[ATNState.STAR_LOOP_BACK]=function(){return new StarLoopbackState},sf[ATNState.STAR_LOOP_ENTRY]=function(){return new StarLoopEntryState},sf[ATNState.PLUS_LOOP_BACK]=function(){return new PlusLoopbackState},sf[ATNState.LOOP_END]=function(){return new LoopEndState},this.stateFactories=sf),type>this.stateFactories.length||null===this.stateFactories[type])throw"The specified state type "+type+" is not valid.";var s=this.stateFactories[type]();if(null!==s)return s.ruleIndex=ruleIndex,s},ATNDeserializer.prototype.lexerActionFactory=function(type,data1,data2){var af;if(null===this.actionFactories&&((af=[])[LexerActionType.CHANNEL]=function(data1,data2){return new LexerChannelAction(data1)},af[LexerActionType.CUSTOM]=function(data1,data2){return new LexerCustomAction(data1,data2)},af[LexerActionType.MODE]=function(data1,data2){return new LexerModeAction(data1)},af[LexerActionType.MORE]=function(data1,data2){return LexerMoreAction.INSTANCE},af[LexerActionType.POP_MODE]=function(data1,data2){return LexerPopModeAction.INSTANCE},af[LexerActionType.PUSH_MODE]=function(data1,data2){return new LexerPushModeAction(data1)},af[LexerActionType.SKIP]=function(data1,data2){return LexerSkipAction.INSTANCE},af[LexerActionType.TYPE]=function(data1,data2){return new LexerTypeAction(data1)},this.actionFactories=af),type>this.actionFactories.length||null===this.actionFactories[type])throw"The specified lexer action type "+type+" is not valid.";return this.actionFactories[type](data1,data2)},exports.ATNDeserializer=ATNDeserializer},{"./../IntervalSet":12,"./../Token":20,"./ATN":22,"./ATNDeserializationOptions":25,"./ATNState":28,"./ATNType":29,"./LexerAction":31,"./Transition":36}],27:[function(require,module,exports){var DFAState=require("./../dfa/DFAState").DFAState,ATNConfigSet=require("./ATNConfigSet").ATNConfigSet,getCachedPredictionContext=require("./../PredictionContext").getCachedPredictionContext;function ATNSimulator(atn,sharedContextCache){return this.atn=atn,this.sharedContextCache=sharedContextCache,this}ATNSimulator.ERROR=new DFAState(2147483647,new ATNConfigSet),ATNSimulator.prototype.getCachedContext=function(context){if(null===this.sharedContextCache)return context;return getCachedPredictionContext(context,this.sharedContextCache,{})},exports.ATNSimulator=ATNSimulator},{"./../PredictionContext":17,"./../dfa/DFAState":40,"./ATNConfigSet":24}],28:[function(require,module,exports){function ATNState(){return this.atn=null,this.stateNumber=ATNState.INVALID_STATE_NUMBER,this.stateType=null,this.ruleIndex=0,this.epsilonOnlyTransitions=!1,this.transitions=[],this.nextTokenWithinRule=null,this}function BasicState(){return ATNState.call(this),this.stateType=ATNState.BASIC,this}function DecisionState(){return ATNState.call(this),this.decision=-1,this.nonGreedy=!1,this}function BlockStartState(){return DecisionState.call(this),this.endState=null,this}function BasicBlockStartState(){return BlockStartState.call(this),this.stateType=ATNState.BLOCK_START,this}function BlockEndState(){return ATNState.call(this),this.stateType=ATNState.BLOCK_END,this.startState=null,this}function RuleStopState(){return ATNState.call(this),this.stateType=ATNState.RULE_STOP,this}function RuleStartState(){return ATNState.call(this),this.stateType=ATNState.RULE_START,this.stopState=null,this.isPrecedenceRule=!1,this}function PlusLoopbackState(){return DecisionState.call(this),this.stateType=ATNState.PLUS_LOOP_BACK,this}function PlusBlockStartState(){return BlockStartState.call(this),this.stateType=ATNState.PLUS_BLOCK_START,this.loopBackState=null,this}function StarBlockStartState(){return BlockStartState.call(this),this.stateType=ATNState.STAR_BLOCK_START,this}function StarLoopbackState(){return ATNState.call(this),this.stateType=ATNState.STAR_LOOP_BACK,this}function StarLoopEntryState(){return DecisionState.call(this),this.stateType=ATNState.STAR_LOOP_ENTRY,this.loopBackState=null,this.isPrecedenceDecision=null,this}function LoopEndState(){return ATNState.call(this),this.stateType=ATNState.LOOP_END,this.loopBackState=null,this}function TokensStartState(){return DecisionState.call(this),this.stateType=ATNState.TOKEN_START,this}ATNState.INVALID_TYPE=0,ATNState.BASIC=1,ATNState.RULE_START=2,ATNState.BLOCK_START=3,ATNState.PLUS_BLOCK_START=4,ATNState.STAR_BLOCK_START=5,ATNState.TOKEN_START=6,ATNState.RULE_STOP=7,ATNState.BLOCK_END=8,ATNState.STAR_LOOP_BACK=9,ATNState.STAR_LOOP_ENTRY=10,ATNState.PLUS_LOOP_BACK=11,ATNState.LOOP_END=12,ATNState.serializationNames=["INVALID","BASIC","RULE_START","BLOCK_START","PLUS_BLOCK_START","STAR_BLOCK_START","TOKEN_START","RULE_STOP","BLOCK_END","STAR_LOOP_BACK","STAR_LOOP_ENTRY","PLUS_LOOP_BACK","LOOP_END"],ATNState.INVALID_STATE_NUMBER=-1,ATNState.prototype.toString=function(){return this.stateNumber},ATNState.prototype.equals=function(other){return other instanceof ATNState&&this.stateNumber===other.stateNumber},ATNState.prototype.isNonGreedyExitState=function(){return!1},ATNState.prototype.addTransition=function(trans,index){void 0===index&&(index=-1),0===this.transitions.length?this.epsilonOnlyTransitions=trans.isEpsilon:this.epsilonOnlyTransitions!==trans.isEpsilon&&(this.epsilonOnlyTransitions=!1),-1===index?this.transitions.push(trans):this.transitions.splice(index,1,trans)},(BasicState.prototype=Object.create(ATNState.prototype)).constructor=BasicState,(DecisionState.prototype=Object.create(ATNState.prototype)).constructor=DecisionState,(BlockStartState.prototype=Object.create(DecisionState.prototype)).constructor=BlockStartState,(BasicBlockStartState.prototype=Object.create(BlockStartState.prototype)).constructor=BasicBlockStartState,(BlockEndState.prototype=Object.create(ATNState.prototype)).constructor=BlockEndState,(RuleStopState.prototype=Object.create(ATNState.prototype)).constructor=RuleStopState,(RuleStartState.prototype=Object.create(ATNState.prototype)).constructor=RuleStartState,(PlusLoopbackState.prototype=Object.create(DecisionState.prototype)).constructor=PlusLoopbackState,(PlusBlockStartState.prototype=Object.create(BlockStartState.prototype)).constructor=PlusBlockStartState,(StarBlockStartState.prototype=Object.create(BlockStartState.prototype)).constructor=StarBlockStartState,(StarLoopbackState.prototype=Object.create(ATNState.prototype)).constructor=StarLoopbackState,(StarLoopEntryState.prototype=Object.create(DecisionState.prototype)).constructor=StarLoopEntryState,(LoopEndState.prototype=Object.create(ATNState.prototype)).constructor=LoopEndState,(TokensStartState.prototype=Object.create(DecisionState.prototype)).constructor=TokensStartState,exports.ATNState=ATNState,exports.BasicState=BasicState,exports.DecisionState=DecisionState,exports.BlockStartState=BlockStartState,exports.BlockEndState=BlockEndState,exports.LoopEndState=LoopEndState,exports.RuleStartState=RuleStartState,exports.RuleStopState=RuleStopState,exports.TokensStartState=TokensStartState,exports.PlusLoopbackState=PlusLoopbackState,exports.StarLoopbackState=StarLoopbackState,exports.StarLoopEntryState=StarLoopEntryState,exports.PlusBlockStartState=PlusBlockStartState,exports.StarBlockStartState=StarBlockStartState,exports.BasicBlockStartState=BasicBlockStartState},{}],29:[function(require,module,exports){function ATNType(){}ATNType.LEXER=0,ATNType.PARSER=1,exports.ATNType=ATNType},{}],30:[function(require,module,exports){var Token=require("./../Token").Token,Lexer=require("./../Lexer").Lexer,ATN=require("./ATN").ATN,ATNSimulator=require("./ATNSimulator").ATNSimulator,DFAState=require("./../dfa/DFAState").DFAState,OrderedATNConfigSet=(require("./ATNConfigSet").ATNConfigSet,require("./ATNConfigSet").OrderedATNConfigSet),PredictionContext=require("./../PredictionContext").PredictionContext,SingletonPredictionContext=require("./../PredictionContext").SingletonPredictionContext,RuleStopState=require("./ATNState").RuleStopState,LexerATNConfig=require("./ATNConfig").LexerATNConfig,Transition=require("./Transition").Transition,LexerActionExecutor=require("./LexerActionExecutor").LexerActionExecutor,LexerNoViableAltException=require("./../error/Errors").LexerNoViableAltException;function resetSimState(sim){sim.index=-1,sim.line=0,sim.column=-1,sim.dfaState=null}function SimState(){return resetSimState(this),this}function LexerATNSimulator(recog,atn,decisionToDFA,sharedContextCache){return ATNSimulator.call(this,atn,sharedContextCache),this.decisionToDFA=decisionToDFA,this.recog=recog,this.startIndex=-1,this.line=1,this.column=0,this.mode=Lexer.DEFAULT_MODE,this.prevAccept=new SimState,this}SimState.prototype.reset=function(){resetSimState(this)},((LexerATNSimulator.prototype=Object.create(ATNSimulator.prototype)).constructor=LexerATNSimulator).debug=!1,LexerATNSimulator.dfa_debug=!1,LexerATNSimulator.MIN_DFA_EDGE=0,LexerATNSimulator.MAX_DFA_EDGE=127,LexerATNSimulator.match_calls=0,LexerATNSimulator.prototype.copyState=function(simulator){this.column=simulator.column,this.line=simulator.line,this.mode=simulator.mode,this.startIndex=simulator.startIndex},LexerATNSimulator.prototype.match=function(input,mode){this.match_calls+=1,this.mode=mode;var mark=input.mark();try{this.startIndex=input.index,this.prevAccept.reset();var dfa=this.decisionToDFA[mode];return null===dfa.s0?this.matchATN(input):this.execATN(input,dfa.s0)}finally{input.release(mark)}},LexerATNSimulator.prototype.reset=function(){this.prevAccept.reset(),this.startIndex=-1,this.line=1,this.column=0,this.mode=Lexer.DEFAULT_MODE},LexerATNSimulator.prototype.matchATN=function(input){var startState=this.atn.modeToStartState[this.mode];LexerATNSimulator.debug&&console.log("matchATN mode "+this.mode+" start: "+startState);var old_mode=this.mode,s0_closure=this.computeStartState(input,startState),suppressEdge=s0_closure.hasSemanticContext;s0_closure.hasSemanticContext=!1;var next=this.addDFAState(s0_closure);suppressEdge||(this.decisionToDFA[this.mode].s0=next);var predict=this.execATN(input,next);return LexerATNSimulator.debug&&console.log("DFA after matchATN: "+this.decisionToDFA[old_mode].toLexerString()),predict},LexerATNSimulator.prototype.execATN=function(input,ds0){LexerATNSimulator.debug&&console.log("start state closure="+ds0.configs),ds0.isAcceptState&&this.captureSimState(this.prevAccept,input,ds0);for(var t=input.LA(1),s=ds0;;){LexerATNSimulator.debug&&console.log("execATN loop starting closure: "+s.configs);var target=this.getExistingTargetState(s,t);if(null===target&&(target=this.computeTargetState(input,s,t)),target===ATNSimulator.ERROR)break;if(t!==Token.EOF&&this.consume(input),target.isAcceptState&&(this.captureSimState(this.prevAccept,input,target),t===Token.EOF))break;t=input.LA(1),s=target}return this.failOrAccept(this.prevAccept,input,s.configs,t)},LexerATNSimulator.prototype.getExistingTargetState=function(s,t){if(null===s.edges||t "+to+" upon "+tk),null===from_.edges&&(from_.edges=[]),from_.edges[tk-LexerATNSimulator.MIN_DFA_EDGE]=to)},LexerATNSimulator.prototype.addDFAState=function(configs){for(var proposed=new DFAState(null,configs),firstConfigWithRuleStopState=null,i=0;i"},ParserATNSimulator.prototype.getEpsilonTarget=function(config,t,collectPredicates,inContext,fullCtx,treatEofAsEpsilon){switch(t.serializationType){case Transition.RULE:return this.ruleTransition(config,t);case Transition.PRECEDENCE:return this.precedenceTransition(config,t,collectPredicates,inContext,fullCtx);case Transition.PREDICATE:return this.predTransition(config,t,collectPredicates,inContext,fullCtx);case Transition.ACTION:return this.actionTransition(config,t);case Transition.EPSILON:return new ATNConfig({state:t.target},config);case Transition.ATOM:case Transition.RANGE:case Transition.SET:return treatEofAsEpsilon&&t.matches(Token.EOF,0,1)?new ATNConfig({state:t.target},config):null;default:return null}},ParserATNSimulator.prototype.actionTransition=function(config,t){var index;return this.debug&&(index=-1==t.actionIndex?65535:t.actionIndex,console.log("ACTION edge "+t.ruleIndex+":"+index)),new ATNConfig({state:t.target},config)},ParserATNSimulator.prototype.precedenceTransition=function(config,pt,collectPredicates,inContext,fullCtx){this.debug&&(console.log("PRED (collectPredicates="+collectPredicates+") "+pt.precedence+">=_p, ctx dependent=true"),null!==this.parser&&console.log("context surrounding pred is "+Utils.arrayToString(this.parser.getRuleInvocationStack())));var currentPosition,predSucceeds,newSemCtx,c=null;return collectPredicates&&inContext?fullCtx?(currentPosition=this._input.index,this._input.seek(this._startIndex),predSucceeds=pt.getPredicate().evaluate(this.parser,this._outerContext),this._input.seek(currentPosition),predSucceeds&&(c=new ATNConfig({state:pt.target},config))):(newSemCtx=SemanticContext.andContext(config.semanticContext,pt.getPredicate()),c=new ATNConfig({state:pt.target,semanticContext:newSemCtx},config)):c=new ATNConfig({state:pt.target},config),this.debug&&console.log("config from pred transition="+c),c},ParserATNSimulator.prototype.predTransition=function(config,pt,collectPredicates,inContext,fullCtx){this.debug&&(console.log("PRED (collectPredicates="+collectPredicates+") "+pt.ruleIndex+":"+pt.predIndex+", ctx dependent="+pt.isCtxDependent),null!==this.parser&&console.log("context surrounding pred is "+Utils.arrayToString(this.parser.getRuleInvocationStack())));var currentPosition,predSucceeds,newSemCtx,c=null;return collectPredicates&&(pt.isCtxDependent&&inContext||!pt.isCtxDependent)?fullCtx?(currentPosition=this._input.index,this._input.seek(this._startIndex),predSucceeds=pt.getPredicate().evaluate(this.parser,this._outerContext),this._input.seek(currentPosition),predSucceeds&&(c=new ATNConfig({state:pt.target},config))):(newSemCtx=SemanticContext.andContext(config.semanticContext,pt.getPredicate()),c=new ATNConfig({state:pt.target,semanticContext:newSemCtx},config)):c=new ATNConfig({state:pt.target},config),this.debug&&console.log("config from pred transition="+c),c},ParserATNSimulator.prototype.ruleTransition=function(config,t){this.debug&&console.log("CALL rule "+this.getRuleName(t.target.ruleIndex)+", ctx="+config.context);var returnState=t.followState,newContext=SingletonPredictionContext.create(config.context,returnState.stateNumber);return new ATNConfig({state:t.target,context:newContext},config)},ParserATNSimulator.prototype.getConflictingAlts=function(configs){var altsets=PredictionMode.getConflictingAltSubsets(configs);return PredictionMode.getAlts(altsets)},ParserATNSimulator.prototype.getConflictingAltsOrUniqueAlt=function(configs){var conflictingAlts=null;return configs.uniqueAlt!==ATN.INVALID_ALT_NUMBER?(conflictingAlts=new BitSet).add(configs.uniqueAlt):conflictingAlts=configs.conflictingAlts,conflictingAlts},ParserATNSimulator.prototype.getTokenName=function(t){if(t===Token.EOF)return"EOF";if(null!==this.parser&&null!==this.parser.literalNames){if(!(t>=this.parser.literalNames.length&&t>=this.parser.symbolicNames.length))return(this.parser.literalNames[t]||this.parser.symbolicNames[t])+"<"+t+">";console.log(t+" ttype out of range: "+this.parser.literalNames),console.log(""+this.parser.getInputStream().getTokens())}return""+t},ParserATNSimulator.prototype.getLookaheadName=function(input){return this.getTokenName(input.LA(1))},ParserATNSimulator.prototype.dumpDeadEndConfigs=function(nvae){console.log("dead end configs: ");for(var decs=nvae.getDeadEndConfigs(),i=0;i "+to+" upon "+this.getTokenName(t)),null===to?null:(to=this.addDFAState(dfa,to),null===from_||t<-1||t>this.atn.maxTokenType||(null===from_.edges&&(from_.edges=[]),from_.edges[t+1]=to,this.debug&&(literalNames=null===this.parser?null:this.parser.literalNames,symbolicNames=null===this.parser?null:this.parser.symbolicNames,console.log("DFA=\n"+dfa.toString(literalNames,symbolicNames)))),to);var literalNames,symbolicNames},ParserATNSimulator.prototype.addDFAState=function(dfa,D){if(D==ATNSimulator.ERROR)return D;var existing=dfa.states.get(D);return null!==existing?existing:(D.stateNumber=dfa.states.length,D.configs.readOnly||(D.configs.optimizeConfigs(this),D.configs.setReadonly(!0)),dfa.states.add(D),this.debug&&console.log("adding new DFA state: "+D),D)},ParserATNSimulator.prototype.reportAttemptingFullContext=function(dfa,conflictingAlts,configs,startIndex,stopIndex){var interval;(this.debug||this.retry_debug)&&(interval=new Interval(startIndex,stopIndex+1),console.log("reportAttemptingFullContext decision="+dfa.decision+":"+configs+", input="+this.parser.getTokenStream().getText(interval))),null!==this.parser&&this.parser.getErrorListenerDispatch().reportAttemptingFullContext(this.parser,dfa,startIndex,stopIndex,conflictingAlts,configs)},ParserATNSimulator.prototype.reportContextSensitivity=function(dfa,prediction,configs,startIndex,stopIndex){var interval;(this.debug||this.retry_debug)&&(interval=new Interval(startIndex,stopIndex+1),console.log("reportContextSensitivity decision="+dfa.decision+":"+configs+", input="+this.parser.getTokenStream().getText(interval))),null!==this.parser&&this.parser.getErrorListenerDispatch().reportContextSensitivity(this.parser,dfa,startIndex,stopIndex,prediction,configs)},ParserATNSimulator.prototype.reportAmbiguity=function(dfa,D,startIndex,stopIndex,exact,ambigAlts,configs){var interval;(this.debug||this.retry_debug)&&(interval=new Interval(startIndex,stopIndex+1),console.log("reportAmbiguity "+ambigAlts+":"+configs+", input="+this.parser.getTokenStream().getText(interval))),null!==this.parser&&this.parser.getErrorListenerDispatch().reportAmbiguity(this.parser,dfa,startIndex,stopIndex,exact,ambigAlts,configs)},exports.ParserATNSimulator=ParserATNSimulator},{"./../IntervalSet":12,"./../ParserRuleContext":16,"./../PredictionContext":17,"./../RuleContext":19,"./../Token":20,"./../Utils":21,"./../dfa/DFAState":40,"./../error/Errors":45,"./ATN":22,"./ATNConfig":23,"./ATNConfigSet":24,"./ATNSimulator":27,"./ATNState":28,"./PredictionMode":34,"./SemanticContext":35,"./Transition":36}],34:[function(require,module,exports){require("./../Utils").Set;var Map=require("./../Utils").Map,BitSet=require("./../Utils").BitSet,AltDict=require("./../Utils").AltDict,ATN=require("./ATN").ATN,RuleStopState=require("./ATNState").RuleStopState,ATNConfigSet=require("./ATNConfigSet").ATNConfigSet,ATNConfig=require("./ATNConfig").ATNConfig,SemanticContext=require("./SemanticContext").SemanticContext,hashStuff=(require("../Utils").Hash,require("./../Utils").hashStuff);require("./../Utils").equalArrays;function PredictionMode(){return this}PredictionMode.SLL=0,PredictionMode.LL=1,PredictionMode.LL_EXACT_AMBIG_DETECTION=2,PredictionMode.hasSLLConflictTerminatingPrediction=function(mode,configs){if(PredictionMode.allConfigsInRuleStopStates(configs))return!0;if(mode===PredictionMode.SLL&&configs.hasSemanticContext){for(var dup=new ATNConfigSet,i=0;i=prec}?"},PrecedencePredicate.filterPrecedencePredicates=function(set){var result=[];return set.values().map(function(context){context instanceof PrecedencePredicate&&result.push(context)}),result},((AND.prototype=Object.create(SemanticContext.prototype)).constructor=AND).prototype.equals=function(other){return this===other||other instanceof AND&&this.opnds===other.opnds},AND.prototype.updateHashCode=function(hash){hash.update(this.opnds,"AND")},AND.prototype.evaluate=function(parser,outerContext){for(var i=0;i=this.start&&symbol<=this.stop},RangeTransition.prototype.toString=function(){return"'"+String.fromCharCode(this.start)+"'..'"+String.fromCharCode(this.stop)+"'"},(AbstractPredicateTransition.prototype=Object.create(Transition.prototype)).constructor=AbstractPredicateTransition,((PredicateTransition.prototype=Object.create(AbstractPredicateTransition.prototype)).constructor=PredicateTransition).prototype.matches=function(symbol,minVocabSymbol,maxVocabSymbol){return!1},PredicateTransition.prototype.getPredicate=function(){return new Predicate(this.ruleIndex,this.predIndex,this.isCtxDependent)},PredicateTransition.prototype.toString=function(){return"pred_"+this.ruleIndex+":"+this.predIndex},((ActionTransition.prototype=Object.create(Transition.prototype)).constructor=ActionTransition).prototype.matches=function(symbol,minVocabSymbol,maxVocabSymbol){return!1},ActionTransition.prototype.toString=function(){return"action_"+this.ruleIndex+":"+this.actionIndex},((SetTransition.prototype=Object.create(Transition.prototype)).constructor=SetTransition).prototype.matches=function(symbol,minVocabSymbol,maxVocabSymbol){return this.label.contains(symbol)},SetTransition.prototype.toString=function(){return this.label.toString()},((NotSetTransition.prototype=Object.create(SetTransition.prototype)).constructor=NotSetTransition).prototype.matches=function(symbol,minVocabSymbol,maxVocabSymbol){return minVocabSymbol<=symbol&&symbol<=maxVocabSymbol&&!SetTransition.prototype.matches.call(this,symbol,minVocabSymbol,maxVocabSymbol)},NotSetTransition.prototype.toString=function(){return"~"+SetTransition.prototype.toString.call(this)},((WildcardTransition.prototype=Object.create(Transition.prototype)).constructor=WildcardTransition).prototype.matches=function(symbol,minVocabSymbol,maxVocabSymbol){return minVocabSymbol<=symbol&&symbol<=maxVocabSymbol},WildcardTransition.prototype.toString=function(){return"."},((PrecedencePredicateTransition.prototype=Object.create(AbstractPredicateTransition.prototype)).constructor=PrecedencePredicateTransition).prototype.matches=function(symbol,minVocabSymbol,maxVocabSymbol){return!1},PrecedencePredicateTransition.prototype.getPredicate=function(){return new PrecedencePredicate(this.precedence)},PrecedencePredicateTransition.prototype.toString=function(){return this.precedence+" >= _p"},exports.Transition=Transition,exports.AtomTransition=AtomTransition,exports.SetTransition=SetTransition,exports.NotSetTransition=NotSetTransition,exports.RuleTransition=RuleTransition,exports.ActionTransition=ActionTransition,exports.EpsilonTransition=EpsilonTransition,exports.RangeTransition=RangeTransition,exports.WildcardTransition=WildcardTransition,exports.PredicateTransition=PredicateTransition,exports.PrecedencePredicateTransition=PrecedencePredicateTransition,exports.AbstractPredicateTransition=AbstractPredicateTransition},{"./../IntervalSet":12,"./../Token":20,"./SemanticContext":35}],37:[function(require,module,exports){exports.ATN=require("./ATN").ATN,exports.ATNDeserializer=require("./ATNDeserializer").ATNDeserializer,exports.LexerATNSimulator=require("./LexerATNSimulator").LexerATNSimulator,exports.ParserATNSimulator=require("./ParserATNSimulator").ParserATNSimulator,exports.PredictionMode=require("./PredictionMode").PredictionMode},{"./ATN":22,"./ATNDeserializer":26,"./LexerATNSimulator":30,"./ParserATNSimulator":33,"./PredictionMode":34}],38:[function(require,module,exports){var Set=require("../Utils").Set,DFAState=require("./DFAState").DFAState,StarLoopEntryState=require("../atn/ATNState").StarLoopEntryState,ATNConfigSet=require("./../atn/ATNConfigSet").ATNConfigSet,DFASerializer=require("./DFASerializer").DFASerializer,LexerDFASerializer=require("./DFASerializer").LexerDFASerializer;function DFA(atnStartState,decision){var precedenceState;return void 0===decision&&(decision=0),this.atnStartState=atnStartState,this.decision=decision,this._states=new Set,this.s0=null,this.precedenceDfa=!1,atnStartState instanceof StarLoopEntryState&&atnStartState.isPrecedenceDecision&&(this.precedenceDfa=!0,(precedenceState=new DFAState(null,new ATNConfigSet)).edges=[],precedenceState.isAcceptState=!1,precedenceState.requiresFullContext=!1,this.s0=precedenceState),this}DFA.prototype.getPrecedenceStartState=function(precedence){if(!this.precedenceDfa)throw"Only precedence DFAs may contain a precedence start state.";return!(precedence<0||precedence>=this.s0.edges.length)&&this.s0.edges[precedence]||null},DFA.prototype.setPrecedenceStartState=function(precedence,startState){if(!this.precedenceDfa)throw"Only precedence DFAs may contain a precedence start state.";precedence<0||(this.s0.edges[precedence]=startState)},DFA.prototype.setPrecedenceDfa=function(precedenceDfa){var precedenceState;this.precedenceDfa!==precedenceDfa&&(this._states=new DFAStatesSet,precedenceDfa?((precedenceState=new DFAState(null,new ATNConfigSet)).edges=[],precedenceState.isAcceptState=!1,precedenceState.requiresFullContext=!1,this.s0=precedenceState):this.s0=null,this.precedenceDfa=precedenceDfa)},Object.defineProperty(DFA.prototype,"states",{get:function(){return this._states}}),DFA.prototype.sortedStates=function(){return this._states.values().sort(function(a,b){return a.stateNumber-b.stateNumber})},DFA.prototype.toString=function(literalNames,symbolicNames){return literalNames=literalNames||null,symbolicNames=symbolicNames||null,null===this.s0?"":new DFASerializer(this,literalNames,symbolicNames).toString()},DFA.prototype.toLexerString=function(){return null===this.s0?"":new LexerDFASerializer(this).toString()},exports.DFA=DFA},{"../Utils":21,"../atn/ATNState":28,"./../atn/ATNConfigSet":24,"./DFASerializer":39,"./DFAState":40}],39:[function(require,module,exports){function DFASerializer(dfa,literalNames,symbolicNames){return this.dfa=dfa,this.literalNames=literalNames||[],this.symbolicNames=symbolicNames||[],this}function LexerDFASerializer(dfa){return DFASerializer.call(this,dfa,null),this}DFASerializer.prototype.toString=function(){if(null===this.dfa.s0)return null;for(var buf="",states=this.dfa.sortedStates(),i=0;i")).concat(this.getStateString(t))).concat("\n"))}}return 0===buf.length?null:buf},DFASerializer.prototype.getEdgeLabel=function(i){return 0===i?"EOF":null!==this.literalNames||null!==this.symbolicNames?this.literalNames[i-1]||this.symbolicNames[i-1]:String.fromCharCode(i-1)},DFASerializer.prototype.getStateString=function(s){var baseStateStr=(s.isAcceptState?":":"")+"s"+s.stateNumber+(s.requiresFullContext?"^":"");return s.isAcceptState?null!==s.predicates?baseStateStr+"=>"+s.predicates.toString():baseStateStr+"=>"+s.prediction.toString():baseStateStr},((LexerDFASerializer.prototype=Object.create(DFASerializer.prototype)).constructor=LexerDFASerializer).prototype.getEdgeLabel=function(i){return"'"+String.fromCharCode(i)+"'"},exports.DFASerializer=DFASerializer,exports.LexerDFASerializer=LexerDFASerializer},{}],40:[function(require,module,exports){var ATNConfigSet=require("./../atn/ATNConfigSet").ATNConfigSet,Utils=require("./../Utils"),Hash=Utils.Hash,Set=Utils.Set;function PredPrediction(pred,alt){return this.alt=alt,this.pred=pred,this}function DFAState(stateNumber,configs){return null===stateNumber&&(stateNumber=-1),null===configs&&(configs=new ATNConfigSet),this.stateNumber=stateNumber,this.configs=configs,this.edges=null,this.isAcceptState=!1,this.prediction=0,this.lexerActionExecutor=null,this.requiresFullContext=!1,this.predicates=null,this}PredPrediction.prototype.toString=function(){return"("+this.pred+", "+this.alt+")"},DFAState.prototype.getAltSet=function(){var alts=new Set;if(null!==this.configs)for(var i=0;i=ruleNames.length)return""+decision;var ruleName=ruleNames[ruleIndex]||null;return null===ruleName||0===ruleName.length?""+decision:decision+" ("+ruleName+")"},DiagnosticErrorListener.prototype.getConflictingAlts=function(reportedAlts,configs){if(null!==reportedAlts)return reportedAlts;for(var result=new BitSet,i=0;i":tokens.getText(new Interval(e.startToken.tokenIndex,e.offendingToken.tokenIndex)):"",msg="no viable alternative at input "+this.escapeWSAndQuote(input);recognizer.notifyErrorListeners(msg,e.offendingToken,e)},DefaultErrorStrategy.prototype.reportInputMismatch=function(recognizer,e){var msg="mismatched input "+this.getTokenErrorDisplay(e.offendingToken)+" expecting "+e.getExpectedTokens().toString(recognizer.literalNames,recognizer.symbolicNames);recognizer.notifyErrorListeners(msg,e.offendingToken,e)},DefaultErrorStrategy.prototype.reportFailedPredicate=function(recognizer,e){var msg="rule "+recognizer.ruleNames[recognizer._ctx.ruleIndex]+" "+e.message;recognizer.notifyErrorListeners(msg,e.offendingToken,e)},DefaultErrorStrategy.prototype.reportUnwantedToken=function(recognizer){var t,msg;this.inErrorRecoveryMode(recognizer)||(this.beginErrorCondition(recognizer),t=recognizer.getCurrentToken(),msg="extraneous input "+this.getTokenErrorDisplay(t)+" expecting "+this.getExpectedTokens(recognizer).toString(recognizer.literalNames,recognizer.symbolicNames),recognizer.notifyErrorListeners(msg,t,null))},DefaultErrorStrategy.prototype.reportMissingToken=function(recognizer){var t,msg;this.inErrorRecoveryMode(recognizer)||(this.beginErrorCondition(recognizer),t=recognizer.getCurrentToken(),msg="missing "+this.getExpectedTokens(recognizer).toString(recognizer.literalNames,recognizer.symbolicNames)+" at "+this.getTokenErrorDisplay(t),recognizer.notifyErrorListeners(msg,t,null))},DefaultErrorStrategy.prototype.recoverInline=function(recognizer){var matchedSymbol=this.singleTokenDeletion(recognizer);if(null!==matchedSymbol)return recognizer.consume(),matchedSymbol;if(this.singleTokenInsertion(recognizer))return this.getMissingSymbol(recognizer);throw new InputMismatchException(recognizer)},DefaultErrorStrategy.prototype.singleTokenInsertion=function(recognizer){var currentSymbolType=recognizer.getTokenStream().LA(1),atn=recognizer._interp.atn,next=atn.states[recognizer.state].transitions[0].target;return!!atn.nextTokens(next,recognizer._ctx).contains(currentSymbolType)&&(this.reportMissingToken(recognizer),!0)},DefaultErrorStrategy.prototype.singleTokenDeletion=function(recognizer){var nextTokenType=recognizer.getTokenStream().LA(2);if(this.getExpectedTokens(recognizer).contains(nextTokenType)){this.reportUnwantedToken(recognizer),recognizer.consume();var matchedSymbol=recognizer.getCurrentToken();return this.reportMatch(recognizer),matchedSymbol}return null},DefaultErrorStrategy.prototype.getMissingSymbol=function(recognizer){var currentSymbol=recognizer.getCurrentToken(),expectedTokenType=this.getExpectedTokens(recognizer).first(),tokenText=expectedTokenType===Token.EOF?"":"",current=currentSymbol,lookback=recognizer.getTokenStream().LT(-1);return current.type===Token.EOF&&null!==lookback&&(current=lookback),recognizer.getTokenFactory().create(current.source,expectedTokenType,tokenText,Token.DEFAULT_CHANNEL,-1,-1,current.line,current.column)},DefaultErrorStrategy.prototype.getExpectedTokens=function(recognizer){return recognizer.getExpectedTokens()},DefaultErrorStrategy.prototype.getTokenErrorDisplay=function(t){if(null===t)return"";var s=t.text;return null===s&&(s=t.type===Token.EOF?"":"<"+t.type+">"),this.escapeWSAndQuote(s)},DefaultErrorStrategy.prototype.escapeWSAndQuote=function(s){return"'"+(s=(s=(s=s.replace(/\n/g,"\\n")).replace(/\r/g,"\\r")).replace(/\t/g,"\\t"))+"'"},DefaultErrorStrategy.prototype.getErrorRecoverySet=function(recognizer){for(var atn=recognizer._interp.atn,ctx=recognizer._ctx,recoverSet=new IntervalSet;null!==ctx&&0<=ctx.invokingState;){var rt=atn.states[ctx.invokingState].transitions[0],follow=atn.nextTokens(rt.followState);recoverSet.addSet(follow),ctx=ctx.parentCtx}return recoverSet.removeOne(Token.EPSILON),recoverSet},DefaultErrorStrategy.prototype.consumeUntil=function(recognizer,set){for(var ttype=recognizer.getTokenStream().LA(1);ttype!==Token.EOF&&!set.contains(ttype);)recognizer.consume(),ttype=recognizer.getTokenStream().LA(1)},((BailErrorStrategy.prototype=Object.create(DefaultErrorStrategy.prototype)).constructor=BailErrorStrategy).prototype.recover=function(recognizer,e){for(var context=recognizer._ctx;null!==context;)context.exception=e,context=context.parentCtx;throw new ParseCancellationException(e)},BailErrorStrategy.prototype.recoverInline=function(recognizer){this.recover(recognizer,new InputMismatchException(recognizer))},BailErrorStrategy.prototype.sync=function(recognizer){},exports.BailErrorStrategy=BailErrorStrategy,exports.DefaultErrorStrategy=DefaultErrorStrategy},{"./../IntervalSet":12,"./../Token":20,"./../atn/ATNState":28,"./Errors":45}],45:[function(require,module,exports){var PredicateTransition=require("./../atn/Transition").PredicateTransition;function RecognitionException(params){return Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,RecognitionException):(new Error).stack,this.message=params.message,this.recognizer=params.recognizer,this.input=params.input,this.ctx=params.ctx,this.offendingToken=null,this.offendingState=-1,null!==this.recognizer&&(this.offendingState=this.recognizer.state),this}function LexerNoViableAltException(lexer,input,startIndex,deadEndConfigs){return RecognitionException.call(this,{message:"",recognizer:lexer,input:input,ctx:null}),this.startIndex=startIndex,this.deadEndConfigs=deadEndConfigs,this}function NoViableAltException(recognizer,input,startToken,offendingToken,deadEndConfigs,ctx){ctx=ctx||recognizer._ctx,offendingToken=offendingToken||recognizer.getCurrentToken(),startToken=startToken||recognizer.getCurrentToken(),input=input||recognizer.getInputStream(),RecognitionException.call(this,{message:"",recognizer:recognizer,input:input,ctx:ctx}),this.deadEndConfigs=deadEndConfigs,this.startToken=startToken,this.offendingToken=offendingToken}function InputMismatchException(recognizer){RecognitionException.call(this,{message:"",recognizer:recognizer,input:recognizer.getInputStream(),ctx:recognizer._ctx}),this.offendingToken=recognizer.getCurrentToken()}function FailedPredicateException(recognizer,predicate,message){RecognitionException.call(this,{message:this.formatMessage(predicate,message||null),recognizer:recognizer,input:recognizer.getInputStream(),ctx:recognizer._ctx});var trans=recognizer._interp.atn.states[recognizer.state].transitions[0];return trans instanceof PredicateTransition?(this.ruleIndex=trans.ruleIndex,this.predicateIndex=trans.predIndex):(this.ruleIndex=0,this.predicateIndex=0),this.predicate=predicate,this.offendingToken=recognizer.getCurrentToken(),this}function ParseCancellationException(){return Error.call(this),Error.captureStackTrace(this,ParseCancellationException),this}((RecognitionException.prototype=Object.create(Error.prototype)).constructor=RecognitionException).prototype.getExpectedTokens=function(){return null!==this.recognizer?this.recognizer.atn.getExpectedTokens(this.offendingState,this.ctx):null},RecognitionException.prototype.toString=function(){return this.message},((LexerNoViableAltException.prototype=Object.create(RecognitionException.prototype)).constructor=LexerNoViableAltException).prototype.toString=function(){var symbol="";return 0<=this.startIndex&&this.startIndex>10),lowSurrogate=codePoint%1024+56320,codeUnits.push(highSurrogate,lowSurrogate)),(index+1==length||16384":this.symbol.text},((ErrorNodeImpl.prototype=Object.create(TerminalNodeImpl.prototype)).constructor=ErrorNodeImpl).prototype.isErrorNode=function(){return!0},ErrorNodeImpl.prototype.accept=function(visitor){return visitor.visitErrorNode(this)},ParseTreeWalker.prototype.walk=function(listener,t){if(t instanceof ErrorNode||void 0!==t.isErrorNode&&t.isErrorNode())listener.visitErrorNode(t);else if(t instanceof TerminalNode)listener.visitTerminal(t);else{this.enterRule(listener,t);for(var i=0;ibaseOut-1&&(void 0===arr[j+1]&&(arr[j+1]=0),arr[j+1]+=arr[j]/baseOut|0,arr[j]%=baseOut)}return arr.reverse()}P.absoluteValue=P.abs=function(){var x=new this.constructor(this);return x.s<0&&(x.s=1),finalise(x)},P.ceil=function(){return finalise(new this.constructor(this),this.e+1,2)},P.comparedTo=P.cmp=function(y){var i,j,xdL,ydL,x=this,xd=x.d,yd=(y=new x.constructor(y)).d,xs=x.s,ys=y.s;if(!xd||!yd)return xs&&ys?xs!==ys?xs:xd===yd?0:!xd^xs<0?1:-1:NaN;if(!xd[0]||!yd[0])return xd[0]?xs:yd[0]?-ys:0;if(xs!==ys)return xs;if(x.e!==y.e)return x.e>y.e^xs<0?1:-1;for(i=0,j=(xdL=xd.length)<(ydL=yd.length)?xdL:ydL;iyd[i]^xs<0?1:-1;return xdL===ydL?0:ydLthis.d.length-2},P.isNaN=function(){return!this.s},P.isNegative=P.isNeg=function(){return this.s<0},P.isPositive=P.isPos=function(){return 0k&&(k=x.e+1)):k=NaN,k},P.round=function(){var x=this,Ctor=x.constructor;return finalise(new Ctor(x),x.e+1,Ctor.rounding)},P.sine=P.sin=function(){var pr,rm,x=this,Ctor=x.constructor;return x.isFinite()?x.isZero()?new Ctor(x):(pr=Ctor.precision,rm=Ctor.rounding,Ctor.precision=pr+Math.max(x.e,x.sd())+LOG_BASE,Ctor.rounding=1,x=function(Ctor,x){var k,len=x.d.length;if(len<3)return taylorSeries(Ctor,2,x,x);k=16<(k=1.4*Math.sqrt(len))?16:0|k,x=x.times(1/tinyPow(5,k)),x=taylorSeries(Ctor,2,x,x);for(var sin2_x,d5=new Ctor(5),d16=new Ctor(16),d20=new Ctor(20);k--;)sin2_x=x.times(x),x=x.times(d5.plus(sin2_x.times(d16.times(sin2_x).minus(d20))));return x}(Ctor,toLessThanHalfPi(Ctor,x)),Ctor.precision=pr,Ctor.rounding=rm,finalise(2=y.d.length-1&&(k=yn<0?-yn:yn)<=9007199254740991)return r=intPow(Ctor,x,k,pr),y.s<0?new Ctor(1).div(r):finalise(r,pr,rm);if((s=x.s)<0){if(eCtor.maxE+1||e=Ctor.toExpPos):(checkInt32(sd,1,MAX_DIGITS),void 0===rm?rm=Ctor.rounding:checkInt32(rm,0,8),finiteToString(x=finalise(new Ctor(x),sd,rm),sd<=x.e||x.e<=Ctor.toExpNeg,sd));return x.isNeg()&&!x.isZero()?"-"+str:str},P.toSignificantDigits=P.toSD=function(sd,rm){var Ctor=this.constructor;return void 0===sd?(sd=Ctor.precision,rm=Ctor.rounding):(checkInt32(sd,1,MAX_DIGITS),void 0===rm?rm=Ctor.rounding:checkInt32(rm,0,8)),finalise(new Ctor(this),sd,rm)},P.toString=function(){var x=this,Ctor=x.constructor,str=finiteToString(x,x.e<=Ctor.toExpNeg||x.e>=Ctor.toExpPos);return x.isNeg()&&!x.isZero()?"-"+str:str},P.truncated=P.trunc=function(){return finalise(new this.constructor(this),this.e+1,1)},P.valueOf=P.toJSON=function(){var x=this,Ctor=x.constructor,str=finiteToString(x,x.e<=Ctor.toExpNeg||x.e>=Ctor.toExpPos);return x.isNeg()?"-"+str:str};var divide=function(x,y,pr,rm,dp,base){var cmp,e,i,k,logBase,more,prod,prodL,q,qd,rem,remL,rem0,sd,t,xi,xL,yd0,yL,yz,Ctor=x.constructor,sign=x.s==y.s?1:-1,xd=x.d,yd=y.d;if(!(xd&&xd[0]&&yd&&yd[0]))return new Ctor(x.s&&y.s&&(xd?!yd||xd[0]!=yd[0]:yd)?xd&&0==xd[0]||!yd?0*sign:sign/0:NaN);for(e=base?(logBase=1,x.e-y.e):(base=BASE,logBase=LOG_BASE,mathfloor(x.e/logBase)-mathfloor(y.e/logBase)),yL=yd.length,xL=xd.length,qd=(q=new Ctor(sign)).d=[],i=0;yd[i]==(xd[i]||0);i++);if(yd[i]>(xd[i]||0)&&e--,null==pr?(sd=pr=Ctor.precision,rm=Ctor.rounding):sd=dp?pr+(x.e-y.e)+1:pr,sd<0)qd.push(1),more=!0;else{if(sd=sd/logBase+2|0,i=0,1==yL){for(yd=yd[k=0],sd++;(i=base/2&&++yd0;k=0,(cmp=compare(yd,rem,yL,remL))<0?(rem0=rem[0],yL!=remL&&(rem0=rem0*base+(rem[1]||0)),1<(k=rem0/yd0|0)?(base<=k&&(k=base-1),1==(cmp=compare(prod=multiplyInteger(yd,k,base),rem,prodL=prod.length,remL=rem.length))&&(k--,subtract(prod,yLb[i]?1:-1;break}return r}function subtract(a,b,aL,base){for(var i=0;aL--;)a[aL]-=i,i=a[aL]Ctor.maxE?(x.d=null,x.e=NaN):x.ex.constructor.maxE?(x.d=null,x.e=NaN):x.ebase-1;)xd[sd]=0,sd||(++e,xd.unshift(1));for(len=xd.length;!xd[len-1];--len);for(i=0,str="";ilen)for(e-=len;e--;)str+="0";else elen&&(arr.length=len,1)}function abs(x){return new this(x).abs()}function acos(x){return new this(x).acos()}function acosh(x){return new this(x).acosh()}function add(x,y){return new this(x).plus(y)}function asin(x){return new this(x).asin()}function asinh(x){return new this(x).asinh()}function atan(x){return new this(x).atan()}function atanh(x){return new this(x).atanh()}function atan2(y,x){y=new this(y),x=new this(x);var r,pr=this.precision,rm=this.rounding,wpr=pr+4;return y.s&&x.s?y.d||x.d?!x.d||y.isZero()?(r=x.s<0?getPi(this,pr,rm):new this(0)).s=y.s:!y.d||x.isZero()?(r=getPi(this,wpr,1).times(.5)).s=y.s:r=x.s<0?(this.precision=wpr,this.rounding=1,r=this.atan(divide(y,x,wpr,1)),x=getPi(this,wpr,1),this.precision=pr,this.rounding=rm,y.s<0?r.minus(x):r.plus(x)):this.atan(divide(y,x,wpr,1)):(r=getPi(this,wpr,1).times(0Decimal.maxE?(x.e=NaN,x.d=null):v.e=key.length&&runningStr.slice(0,key.length)===key&&(result+=escapes[escapeKeys[index]],runningStr=runningStr.slice(key.length,runningStr.length),specialCharFound=!0)}),specialCharFound||(result+=runningStr.slice(0,1),runningStr=runningStr.slice(1,runningStr.length))}();return result}},{}],57:[function(require,module,exports){!function(root){"use strict";var P={s:1,n:0,d:1};function createError(name){function errorConstructor(){var temp=Error.apply(this,arguments);temp.name=this.name=name,this.stack=temp.stack,this.message=temp.message}function IntermediateInheritor(){}return IntermediateInheritor.prototype=Error.prototype,errorConstructor.prototype=new IntermediateInheritor,errorConstructor}var DivisionByZero=Fraction.DivisionByZero=createError("DivisionByZero"),InvalidParameter=Fraction.InvalidParameter=createError("InvalidParameter");function assign(n,s){return isNaN(n=parseInt(n,10))&&throwInvalidParam(),n*s}function throwInvalidParam(){throw new InvalidParameter}var parse=function(p1,p2){var M,n=0,d=1,s=1,v=0,w=0,x=0,y=1,z=1,A=0,B=1,C=1,D=1,N=1e7;if(null!=p1)if(void 0!==p2)s=(n=p1)*(d=p2);else switch(typeof p1){case"object":"d"in p1&&"n"in p1?(n=p1.n,d=p1.d,"s"in p1&&(n*=p1.s)):0 in p1?(n=p1[0],1 in p1&&(d=p1[1])):throwInvalidParam(),s=n*d;break;case"number":if(p1<0&&(p1=-(s=p1)),p1%1==0)n=p1;else if(0>=1)1&e&&(r=r*b%m);return r}(10,len,d),t=0;t<300;t++){if(rem1===rem2)return t;rem1=10*rem1%d,rem2=10*rem2%d}return 0}function gcd(a,b){if(!a)return b;if(!b)return a;for(;;){if(!(a%=b))return b;if(!(b%=a))return a}}function Fraction(a,b){if(!(this instanceof Fraction))return new Fraction(a,b);parse(a,b),a=Fraction.REDUCE?gcd(P.d,P.n):1,this.s=P.s,this.n=P.n/a,this.d=P.d/a}Fraction.REDUCE=1,Fraction.prototype={s:1,n:0,d:1,abs:function(){return new Fraction(this.n,this.d)},neg:function(){return new Fraction(-this.s*this.n,this.d)},add:function(a,b){return parse(a,b),new Fraction(this.s*this.n*P.d+P.s*this.d*P.n,this.d*P.d)},sub:function(a,b){return parse(a,b),new Fraction(this.s*this.n*P.d-P.s*this.d*P.n,this.d*P.d)},mul:function(a,b){return parse(a,b),new Fraction(this.s*P.s*this.n*P.n,this.d*P.d)},div:function(a,b){return parse(a,b),new Fraction(this.s*P.s*this.n*P.d,this.d*P.n)},clone:function(){return new Fraction(this)},mod:function(a,b){return isNaN(this.n)||isNaN(this.d)?new Fraction(NaN):void 0===a?new Fraction(this.s*this.n%this.d,1):(parse(a,b),0===P.n&&0===this.d&&Fraction(0,0),new Fraction(this.s*(P.d*this.n)%(P.n*this.d),P.d*this.d))},gcd:function(a,b){return parse(a,b),new Fraction(gcd(P.n,this.n)*gcd(P.d,this.d),P.d*this.d)},lcm:function(a,b){return parse(a,b),0===P.n&&0===this.n?new Fraction:new Fraction(P.n*this.n,gcd(P.n,this.n)*gcd(P.d,this.d))},ceil:function(places){return places=Math.pow(10,places||0),isNaN(this.n)||isNaN(this.d)?new Fraction(NaN):new Fraction(Math.ceil(places*this.s*this.n/this.d),places)},floor:function(places){return places=Math.pow(10,places||0),isNaN(this.n)||isNaN(this.d)?new Fraction(NaN):new Fraction(Math.floor(places*this.s*this.n/this.d),places)},round:function(places){return places=Math.pow(10,places||0),isNaN(this.n)||isNaN(this.d)?new Fraction(NaN):new Fraction(Math.round(places*this.s*this.n/this.d),places)},inverse:function(){return new Fraction(this.s*this.d,this.n)},pow:function(m){return m<0?new Fraction(Math.pow(this.s*this.d,-m),Math.pow(this.n,-m)):new Fraction(Math.pow(this.s*this.n,m),Math.pow(this.d,m))},equals:function(a,b){return parse(a,b),this.s*this.n*P.d==P.s*P.n*this.d},compare:function(a,b){parse(a,b);var t=this.s*this.n*P.d-P.s*P.n*this.d;return(015 significant digits to BigNumber (value: "+x+"). Use function bignumber(x) to convert to BigNumber.");return new BigNumber(x)}},{from:"number",to:"Complex",convert:function(x){return Complex||throwNoComplex(x),new Complex(x,0)}},{from:"number",to:"string",convert:function(x){return x+""}},{from:"BigNumber",to:"Complex",convert:function(x){return Complex||throwNoComplex(x),new Complex(x.toNumber(),0)}},{from:"Fraction",to:"BigNumber",convert:function(){throw new TypeError("Cannot implicitly convert a Fraction to BigNumber or vice versa. Use function bignumber(x) to convert to BigNumber or fraction(x) to convert to Fraction.")}},{from:"Fraction",to:"Complex",convert:function(x){return Complex||throwNoComplex(x),new Complex(x.valueOf(),0)}},{from:"number",to:"Fraction",convert:function(x){Fraction||throwNoFraction(x);var f=new Fraction(x);if(f.valueOf()!==x)throw new TypeError("Cannot implicitly convert a number to a Fraction when there will be a loss of precision (value: "+x+"). Use function fraction(x) to convert to Fraction.");return f}},{from:"string",to:"number",convert:function(x){var n=Number(x);if(isNaN(n))throw new Error('Cannot convert "'+x+'" to a number');return n}},{from:"string",to:"BigNumber",convert:function(x){BigNumber||throwNoBignumber(x);try{return new BigNumber(x)}catch(err){throw new Error('Cannot convert "'+x+'" to BigNumber')}}},{from:"string",to:"Fraction",convert:function(x){Fraction||throwNoFraction(x);try{return new Fraction(x)}catch(err){throw new Error('Cannot convert "'+x+'" to Fraction')}}},{from:"string",to:"Complex",convert:function(x){Complex||throwNoComplex(x);try{return new Complex(x)}catch(err){throw new Error('Cannot convert "'+x+'" to Complex')}}},{from:"boolean",to:"number",convert:function(x){return+x}},{from:"boolean",to:"BigNumber",convert:function(x){return BigNumber||throwNoBignumber(x),new BigNumber(+x)}},{from:"boolean",to:"Fraction",convert:function(x){return Fraction||throwNoFraction(x),new Fraction(+x)}},{from:"boolean",to:"string",convert:function(x){return String(x)}},{from:"Array",to:"Matrix",convert:function(array){return DenseMatrix||function(){throw new Error("Cannot convert array into a Matrix: no class 'DenseMatrix' provided")}(),new DenseMatrix(array)}},{from:"Matrix",to:"Array",convert:function(matrix){return matrix.valueOf()}}],typed});function throwNoBignumber(x){throw new Error("Cannot convert value ".concat(x," into a BigNumber: no class 'BigNumber' provided"))}function throwNoComplex(x){throw new Error("Cannot convert value ".concat(x," into a Complex number: no class 'Complex' provided"))}function throwNoFraction(x){throw new Error("Cannot convert value ".concat(x," into a Fraction, no class 'Fraction' provided."))}exports.createTyped=createTyped},{"../../utils/factory":931,"../../utils/is":933,"../../utils/number":937,"typed-function":946}],66:[function(require,module,exports){"use strict";function _typeof(obj){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}Object.defineProperty(exports,"__esModule",{value:!0}),exports.all=void 0;var allFactories=function(obj){if(obj&&obj.__esModule)return obj;if(null===obj||"object"!==_typeof(obj)&&"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache();if(cache&&cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){var desc;Object.prototype.hasOwnProperty.call(obj,key)&&((desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null)&&(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key])}newObj.default=obj,cache&&cache.set(obj,newObj);return newObj}(require("../factoriesAny"));function _getRequireWildcardCache(){if("function"!=typeof WeakMap)return null;var cache=new WeakMap;return _getRequireWildcardCache=function(){return cache},cache}exports.all=allFactories},{"../factoriesAny":658}],67:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.config=void 0;var _config=require("../core/config"),_config2=require("../core/function/config");function _extends(){return(_extends=Object.assign||function(target){for(var i=1;i=this.max?this.message="Index out of range ("+this.index+" > "+(this.max-1)+")":this.message="Index out of range ("+this.index+")",this.stack=(new Error).stack}Object.defineProperty(exports,"__esModule",{value:!0}),((exports.IndexError=IndexError).prototype=new RangeError).constructor=RangeError,IndexError.prototype.name="IndexError",IndexError.prototype.isIndexError=!0},{}],401:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createHelpClass=void 0;var _is=require("../utils/is"),_object=require("../utils/object"),_string=require("../utils/string"),dependencies=["parse"],createHelpClass=(0,require("../utils/factory").factory)("Help",dependencies,function(_ref){var parse=_ref.parse;function Help(doc){if(!(this instanceof Help))throw new SyntaxError("Constructor must be called with the new operator");if(!doc)throw new Error('Argument "doc" missing');this.doc=doc}return Help.prototype.type="Help",Help.prototype.isHelp=!0,Help.prototype.toString=function(){var doc=this.doc||{},desc="\n";if(doc.name&&(desc+="Name: "+doc.name+"\n\n"),doc.category&&(desc+="Category: "+doc.category+"\n\n"),doc.description&&(desc+="Description:\n "+doc.description+"\n\n"),doc.syntax&&(desc+="Syntax:\n "+doc.syntax.join("\n ")+"\n\n"),doc.examples){desc+="Examples:\n";for(var scope={},i=0;i1, -1 when x<0, and 0 when x=0.",examples:["sign(3.5)","sign(-4.2)","sign(0)"],seealso:["abs"]}},{}],474:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.sqrtDocs=void 0;exports.sqrtDocs={name:"sqrt",category:"Arithmetic",syntax:["sqrt(x)"],description:"Compute the square root value. If x = y * y, then y is the square root of x.",examples:["sqrt(25)","5 * 5","sqrt(-1)"],seealso:["square","sqrtm","multiply","nthRoot","nthRoots","pow"]}},{}],475:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.sqrtmDocs=void 0;exports.sqrtmDocs={name:"sqrtm",category:"Arithmetic",syntax:["sqrtm(x)"],description:"Calculate the principal square root of a square matrix. The principal square root matrix `X` of another matrix `A` is such that `X * X = A`.",examples:["sqrtm([[1, 2], [3, 4]])"],seealso:["sqrt","abs","square","multiply"]}},{}],476:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.squareDocs=void 0;exports.squareDocs={name:"square",category:"Arithmetic",syntax:["square(x)"],description:"Compute the square of a value. The square of x is x * x.",examples:["square(3)","sqrt(9)","3^2","3 * 3"],seealso:["multiply","pow","sqrt","cube"]}},{}],477:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.subtractDocs=void 0;exports.subtractDocs={name:"subtract",category:"Operators",syntax:["x - y","subtract(x, y)"],description:"subtract two values.",examples:["a = 5.3 - 2","a + 2","2/3 - 1/6","2 * 3 - 3","2.1 km - 500m"],seealso:["add"]}},{}],478:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.unaryMinusDocs=void 0;exports.unaryMinusDocs={name:"unaryMinus",category:"Operators",syntax:["-x","unaryMinus(x)"],description:"Inverse the sign of a value. Converts booleans and strings to numbers.",examples:["-4.5","-(-5.6)",'-"22"'],seealso:["add","subtract","unaryPlus"]}},{}],479:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.unaryPlusDocs=void 0;exports.unaryPlusDocs={name:"unaryPlus",category:"Operators",syntax:["+x","unaryPlus(x)"],description:"Converts booleans and strings to numbers.",examples:["+true",'+"2"'],seealso:["add","subtract","unaryMinus"]}},{}],480:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.xgcdDocs=void 0;exports.xgcdDocs={name:"xgcd",category:"Arithmetic",syntax:["xgcd(a, b)"],description:"Calculate the extended greatest common divisor for two values. The result is an array [d, x, y] with 3 entries, where d is the greatest common divisor, and d = x * a + y * b.",examples:["xgcd(8, 12)","gcd(8, 12)","xgcd(36163, 21199)"],seealso:["gcd","lcm"]}},{}],481:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.bitAndDocs=void 0;exports.bitAndDocs={name:"bitAnd",category:"Bitwise",syntax:["x & y","bitAnd(x, y)"],description:"Bitwise AND operation. Performs the logical AND operation on each pair of the corresponding bits of the two given values by multiplying them. If both bits in the compared position are 1, the bit in the resulting binary representation is 1, otherwise, the result is 0",examples:["5 & 3","bitAnd(53, 131)","[1, 12, 31] & 42"],seealso:["bitNot","bitOr","bitXor","leftShift","rightArithShift","rightLogShift"]}},{}],482:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.bitNotDocs=void 0;exports.bitNotDocs={name:"bitNot",category:"Bitwise",syntax:["~x","bitNot(x)"],description:"Bitwise NOT operation. Performs a logical negation on each bit of the given value. Bits that are 0 become 1, and those that are 1 become 0.",examples:["~1","~2","bitNot([2, -3, 4])"],seealso:["bitAnd","bitOr","bitXor","leftShift","rightArithShift","rightLogShift"]}},{}],483:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.bitOrDocs=void 0;exports.bitOrDocs={name:"bitOr",category:"Bitwise",syntax:["x | y","bitOr(x, y)"],description:"Bitwise OR operation. Performs the logical inclusive OR operation on each pair of corresponding bits of the two given values. The result in each position is 1 if the first bit is 1 or the second bit is 1 or both bits are 1, otherwise, the result is 0.",examples:["5 | 3","bitOr([1, 2, 3], 4)"],seealso:["bitAnd","bitNot","bitXor","leftShift","rightArithShift","rightLogShift"]}},{}],484:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.bitXorDocs=void 0;exports.bitXorDocs={name:"bitXor",category:"Bitwise",syntax:["bitXor(x, y)"],description:"Bitwise XOR operation, exclusive OR. Performs the logical exclusive OR operation on each pair of corresponding bits of the two given values. The result in each position is 1 if only the first bit is 1 or only the second bit is 1, but will be 0 if both are 0 or both are 1.",examples:["bitOr(1, 2)","bitXor([2, 3, 4], 4)"],seealso:["bitAnd","bitNot","bitOr","leftShift","rightArithShift","rightLogShift"]}},{}],485:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.leftShiftDocs=void 0;exports.leftShiftDocs={name:"leftShift",category:"Bitwise",syntax:["x << y","leftShift(x, y)"],description:"Bitwise left logical shift of a value x by y number of bits.",examples:["4 << 1","8 >> 1"],seealso:["bitAnd","bitNot","bitOr","bitXor","rightArithShift","rightLogShift"]}},{}],486:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.rightArithShiftDocs=void 0;exports.rightArithShiftDocs={name:"rightArithShift",category:"Bitwise",syntax:["x >> y","rightArithShift(x, y)"],description:"Bitwise right arithmetic shift of a value x by y number of bits.",examples:["8 >> 1","4 << 1","-12 >> 2"],seealso:["bitAnd","bitNot","bitOr","bitXor","leftShift","rightLogShift"]}},{}],487:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.rightLogShiftDocs=void 0;exports.rightLogShiftDocs={name:"rightLogShift",category:"Bitwise",syntax:["x >>> y","rightLogShift(x, y)"],description:"Bitwise right logical shift of a value x by y number of bits.",examples:["8 >>> 1","4 << 1","-12 >>> 2"],seealso:["bitAnd","bitNot","bitOr","bitXor","leftShift","rightArithShift"]}},{}],488:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.bellNumbersDocs=void 0;exports.bellNumbersDocs={name:"bellNumbers",category:"Combinatorics",syntax:["bellNumbers(n)"],description:"The Bell Numbers count the number of partitions of a set. A partition is a pairwise disjoint subset of S whose union is S. `bellNumbers` only takes integer arguments. The following condition must be enforced: n >= 0.",examples:["bellNumbers(3)","bellNumbers(8)"],seealso:["stirlingS2"]}},{}],489:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.catalanDocs=void 0;exports.catalanDocs={name:"catalan",category:"Combinatorics",syntax:["catalan(n)"],description:"The Catalan Numbers enumerate combinatorial structures of many different types. catalan only takes integer arguments. The following condition must be enforced: n >= 0.",examples:["catalan(3)","catalan(8)"],seealso:["bellNumbers"]}},{}],490:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.compositionDocs=void 0;exports.compositionDocs={name:"composition",category:"Combinatorics",syntax:["composition(n, k)"],description:"The composition counts of n into k parts. composition only takes integer arguments. The following condition must be enforced: k <= n.",examples:["composition(5, 3)"],seealso:["combinations"]}},{}],491:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.stirlingS2Docs=void 0;exports.stirlingS2Docs={name:"stirlingS2",category:"Combinatorics",syntax:["stirlingS2(n, k)"],description:"he Stirling numbers of the second kind, counts the number of ways to partition a set of n labelled objects into k nonempty unlabelled subsets. `stirlingS2` only takes integer arguments. The following condition must be enforced: k <= n. If n = k or k = 1, then s(n,k) = 1.",examples:["stirlingS2(5, 3)"],seealso:["bellNumbers"]}},{}],492:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.argDocs=void 0;exports.argDocs={name:"arg",category:"Complex",syntax:["arg(x)"],description:"Compute the argument of a complex value. If x = a+bi, the argument is computed as atan2(b, a).",examples:["arg(2 + 2i)","atan2(3, 2)","arg(2 + 3i)"],seealso:["re","im","conj","abs"]}},{}],493:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.conjDocs=void 0;exports.conjDocs={name:"conj",category:"Complex",syntax:["conj(x)"],description:"Compute the complex conjugate of a complex value. If x = a+bi, the complex conjugate is a-bi.",examples:["conj(2 + 3i)","conj(2 - 3i)","conj(-5.2i)"],seealso:["re","im","abs","arg"]}},{}],494:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.imDocs=void 0;exports.imDocs={name:"im",category:"Complex",syntax:["im(x)"],description:"Get the imaginary part of a complex number.",examples:["im(2 + 3i)","re(2 + 3i)","im(-5.2i)","im(2.4)"],seealso:["re","conj","abs","arg"]}},{}],495:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.reDocs=void 0;exports.reDocs={name:"re",category:"Complex",syntax:["re(x)"],description:"Get the real part of a complex number.",examples:["re(2 + 3i)","im(2 + 3i)","re(-5.2i)","re(2.4)"],seealso:["im","conj","abs","arg"]}},{}],496:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.evaluateDocs=void 0;exports.evaluateDocs={name:"evaluate",category:"Expression",syntax:["evaluate(expression)","evaluate([expr1, expr2, expr3, ...])"],description:"Evaluate an expression or an array with expressions.",examples:['evaluate("2 + 3")','evaluate("sqrt(" + 4 + ")")'],seealso:[]}},{}],497:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.helpDocs=void 0;exports.helpDocs={name:"help",category:"Expression",syntax:["help(object)","help(string)"],description:"Display documentation on a function or data type.",examples:["help(sqrt)",'help("complex")'],seealso:[]}},{}],498:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.distanceDocs=void 0;exports.distanceDocs={name:"distance",category:"Geometry",syntax:["distance([x1, y1], [x2, y2])","distance([[x1, y1], [x2, y2]])"],description:"Calculates the Euclidean distance between two points.",examples:["distance([0,0], [4,4])","distance([[0,0], [4,4]])"],seealso:[]}},{}],499:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.intersectDocs=void 0;exports.intersectDocs={name:"intersect",category:"Geometry",syntax:["intersect(expr1, expr2, expr3, expr4)","intersect(expr1, expr2, expr3)"],description:"Computes the intersection point of lines and/or planes.",examples:["intersect([0, 0], [10, 10], [10, 0], [0, 10])","intersect([1, 0, 1], [4, -2, 2], [1, 1, 1, 6])"],seealso:[]}},{}],500:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.andDocs=void 0;exports.andDocs={name:"and",category:"Logical",syntax:["x and y","and(x, y)"],description:"Logical and. Test whether two values are both defined with a nonzero/nonempty value.",examples:["true and false","true and true","2 and 4"],seealso:["not","or","xor"]}},{}],501:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.notDocs=void 0;exports.notDocs={name:"not",category:"Logical",syntax:["not x","not(x)"],description:"Logical not. Flips the boolean value of given argument.",examples:["not true","not false","not 2","not 0"],seealso:["and","or","xor"]}},{}],502:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.orDocs=void 0;exports.orDocs={name:"or",category:"Logical",syntax:["x or y","or(x, y)"],description:"Logical or. Test if at least one value is defined with a nonzero/nonempty value.",examples:["true or false","false or false","0 or 4"],seealso:["not","and","xor"]}},{}],503:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.xorDocs=void 0;exports.xorDocs={name:"xor",category:"Logical",syntax:["x xor y","xor(x, y)"],description:"Logical exclusive or, xor. Test whether one and only one value is defined with a nonzero/nonempty value.",examples:["true xor false","false xor false","true xor true","0 xor 4"],seealso:["not","and","or"]}},{}],504:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.columnDocs=void 0;exports.columnDocs={name:"column",category:"Matrix",syntax:["column(x, index)"],description:"Return a column from a matrix or array.",examples:["A = [[1, 2], [3, 4]]","column(A, 1)","column(A, 2)"],seealso:["row"]}},{}],505:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.concatDocs=void 0;exports.concatDocs={name:"concat",category:"Matrix",syntax:["concat(A, B, C, ...)","concat(A, B, C, ..., dim)"],description:"Concatenate matrices. By default, the matrices are concatenated by the last dimension. The dimension on which to concatenate can be provided as last argument.",examples:["A = [1, 2; 5, 6]","B = [3, 4; 7, 8]","concat(A, B)","concat(A, B, 1)","concat(A, B, 2)"],seealso:["det","diag","identity","inv","ones","range","size","squeeze","subset","trace","transpose","zeros"]}},{}],506:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.crossDocs=void 0;exports.crossDocs={name:"cross",category:"Matrix",syntax:["cross(A, B)"],description:"Calculate the cross product for two vectors in three dimensional space.",examples:["cross([1, 1, 0], [0, 1, 1])","cross([3, -3, 1], [4, 9, 2])","cross([2, 3, 4], [5, 6, 7])"],seealso:["multiply","dot"]}},{}],507:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ctransposeDocs=void 0;exports.ctransposeDocs={name:"ctranspose",category:"Matrix",syntax:["x'","ctranspose(x)"],description:"Complex Conjugate and Transpose a matrix",examples:["a = [1, 2, 3; 4, 5, 6]","a'","ctranspose(a)"],seealso:["concat","det","diag","identity","inv","ones","range","size","squeeze","subset","trace","zeros"]}},{}],508:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.detDocs=void 0;exports.detDocs={name:"det",category:"Matrix",syntax:["det(x)"],description:"Calculate the determinant of a matrix",examples:["det([1, 2; 3, 4])","det([-2, 2, 3; -1, 1, 3; 2, 0, -1])"],seealso:["concat","diag","identity","inv","ones","range","size","squeeze","subset","trace","transpose","zeros"]}},{}],509:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.diagDocs=void 0;exports.diagDocs={name:"diag",category:"Matrix",syntax:["diag(x)","diag(x, k)"],description:"Create a diagonal matrix or retrieve the diagonal of a matrix. When x is a vector, a matrix with the vector values on the diagonal will be returned. When x is a matrix, a vector with the diagonal values of the matrix is returned. When k is provided, the k-th diagonal will be filled in or retrieved, if k is positive, the values are placed on the super diagonal. When k is negative, the values are placed on the sub diagonal.",examples:["diag(1:3)","diag(1:3, 1)","a = [1, 2, 3; 4, 5, 6; 7, 8, 9]","diag(a)"],seealso:["concat","det","identity","inv","ones","range","size","squeeze","subset","trace","transpose","zeros"]}},{}],510:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.dotDocs=void 0;exports.dotDocs={name:"dot",category:"Matrix",syntax:["dot(A, B)","A * B"],description:"Calculate the dot product of two vectors. The dot product of A = [a1, a2, a3, ..., an] and B = [b1, b2, b3, ..., bn] is defined as dot(A, B) = a1 * b1 + a2 * b2 + a3 * b3 + ... + an * bn",examples:["dot([2, 4, 1], [2, 2, 3])","[2, 4, 1] * [2, 2, 3]"],seealso:["multiply","cross"]}},{}],511:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.eigsDocs=void 0;exports.eigsDocs={name:"eigs",category:"Matrix",syntax:["eigs(x)"],description:"Calculate the eigenvalues and eigenvectors of a real symmetric matrix",examples:["eigs([[5, 2.3], [2.3, 1]])"],seealso:["inv"]}},{}],512:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.filterDocs=void 0;exports.filterDocs={name:"filter",category:"Matrix",syntax:["filter(x, test)"],description:"Filter items in a matrix.",examples:["isPositive(x) = x > 0","filter([6, -2, -1, 4, 3], isPositive)","filter([6, -2, 0, 1, 0], x != 0)"],seealso:["sort","map","forEach"]}},{}],513:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.flattenDocs=void 0;exports.flattenDocs={name:"flatten",category:"Matrix",syntax:["flatten(x)"],description:"Flatten a multi dimensional matrix into a single dimensional matrix.",examples:["a = [1, 2, 3; 4, 5, 6]","size(a)","b = flatten(a)","size(b)"],seealso:["concat","resize","size","squeeze"]}},{}],514:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.forEachDocs=void 0;exports.forEachDocs={name:"forEach",category:"Matrix",syntax:["forEach(x, callback)"],description:"Iterates over all elements of a matrix/array, and executes the given callback function.",examples:["forEach([1, 2, 3], function(val) { console.log(val) })"],seealso:["map","sort","filter"]}},{}],515:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getMatrixDataTypeDocs=void 0;exports.getMatrixDataTypeDocs={name:"getMatrixDataType",category:"Matrix",syntax:["getMatrixDataType(x)"],description:'Find the data type of all elements in a matrix or array, for example "number" if all items are a number and "Complex" if all values are complex numbers. If a matrix contains more than one data type, it will return "mixed".',examples:["getMatrixDataType([1, 2, 3])","getMatrixDataType([[5 cm], [2 inch]])",'getMatrixDataType([1, "text"])',"getMatrixDataType([1, bignumber(4)])"],seealso:["matrix","sparse","typeOf"]}},{}],516:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.identityDocs=void 0;exports.identityDocs={name:"identity",category:"Matrix",syntax:["identity(n)","identity(m, n)","identity([m, n])"],description:"Returns the identity matrix with size m-by-n. The matrix has ones on the diagonal and zeros elsewhere.",examples:["identity(3)","identity(3, 5)","a = [1, 2, 3; 4, 5, 6]","identity(size(a))"],seealso:["concat","det","diag","inv","ones","range","size","squeeze","subset","trace","transpose","zeros"]}},{}],517:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.invDocs=void 0;exports.invDocs={name:"inv",category:"Matrix",syntax:["inv(x)"],description:"Calculate the inverse of a matrix",examples:["inv([1, 2; 3, 4])","inv(4)","1 / 4"],seealso:["concat","det","diag","identity","ones","range","size","squeeze","subset","trace","transpose","zeros"]}},{}],518:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.kronDocs=void 0;exports.kronDocs={name:"kron",category:"Matrix",syntax:["kron(x, y)"],description:"Calculates the kronecker product of 2 matrices or vectors.",examples:["kron([[1, 0], [0, 1]], [[1, 2], [3, 4]])","kron([1,1], [2,3,4])"],seealso:["multiply","dot","cross"]}},{}],519:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.mapDocs=void 0;exports.mapDocs={name:"map",category:"Matrix",syntax:["map(x, callback)"],description:"Create a new matrix or array with the results of the callback function executed on each entry of the matrix/array.",examples:["map([1, 2, 3], square)"],seealso:["filter","forEach"]}},{}],520:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.onesDocs=void 0;exports.onesDocs={name:"ones",category:"Matrix",syntax:["ones(m)","ones(m, n)","ones(m, n, p, ...)","ones([m])","ones([m, n])","ones([m, n, p, ...])"],description:"Create a matrix containing ones.",examples:["ones(3)","ones(3, 5)","ones([2,3]) * 4.5","a = [1, 2, 3; 4, 5, 6]","ones(size(a))"],seealso:["concat","det","diag","identity","inv","range","size","squeeze","subset","trace","transpose","zeros"]}},{}],521:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.partitionSelectDocs=void 0;exports.partitionSelectDocs={name:"partitionSelect",category:"Matrix",syntax:["partitionSelect(x, k)","partitionSelect(x, k, compare)"],description:"Partition-based selection of an array or 1D matrix. Will find the kth smallest value, and mutates the input array. Uses Quickselect.",examples:["partitionSelect([5, 10, 1], 2)",'partitionSelect(["C", "B", "A", "D"], 1)'],seealso:["sort"]}},{}],522:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.rangeDocs=void 0;exports.rangeDocs={name:"range",category:"Type",syntax:["start:end","start:step:end","range(start, end)","range(start, end, step)","range(string)"],description:"Create a range. Lower bound of the range is included, upper bound is excluded.",examples:["1:5","3:-1:-3","range(3, 7)","range(0, 12, 2)",'range("4:10")',"a = [1, 2, 3, 4; 5, 6, 7, 8]","a[1:2, 1:2]"],seealso:["concat","det","diag","identity","inv","ones","size","squeeze","subset","trace","transpose","zeros"]}},{}],523:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.reshapeDocs=void 0;exports.reshapeDocs={name:"reshape",category:"Matrix",syntax:["reshape(x, sizes)"],description:"Reshape a multi dimensional array to fit the specified dimensions.",examples:["reshape([1, 2, 3, 4, 5, 6], [2, 3])","reshape([[1, 2], [3, 4]], [1, 4])","reshape([[1, 2], [3, 4]], [4])"],seealso:["size","squeeze","resize"]}},{}],524:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.resizeDocs=void 0;exports.resizeDocs={name:"resize",category:"Matrix",syntax:["resize(x, size)","resize(x, size, defaultValue)"],description:"Resize a matrix.",examples:["resize([1,2,3,4,5], [3])","resize([1,2,3], [5])","resize([1,2,3], [5], -1)","resize(2, [2, 3])",'resize("hello", [8], "!")'],seealso:["size","subset","squeeze","reshape"]}},{}],525:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.rowDocs=void 0;exports.rowDocs={name:"row",category:"Matrix",syntax:["row(x, index)"],description:"Return a row from a matrix or array.",examples:["A = [[1, 2], [3, 4]]","row(A, 1)","row(A, 2)"],seealso:["column"]}},{}],526:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.sizeDocs=void 0;exports.sizeDocs={name:"size",category:"Matrix",syntax:["size(x)"],description:"Calculate the size of a matrix.",examples:["size(2.3)",'size("hello world")',"a = [1, 2; 3, 4; 5, 6]","size(a)","size(1:6)"],seealso:["concat","det","diag","identity","inv","ones","range","squeeze","subset","trace","transpose","zeros"]}},{}],527:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.sortDocs=void 0;exports.sortDocs={name:"sort",category:"Matrix",syntax:["sort(x)","sort(x, compare)"],description:'Sort the items in a matrix. Compare can be a string "asc", "desc", "natural", or a custom sort function.',examples:["sort([5, 10, 1])",'sort(["C", "B", "A", "D"])',"sortByLength(a, b) = size(a)[1] - size(b)[1]",'sort(["Langdon", "Tom", "Sara"], sortByLength)','sort(["10", "1", "2"], "natural")'],seealso:["map","filter","forEach"]}},{}],528:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.squeezeDocs=void 0;exports.squeezeDocs={name:"squeeze",category:"Matrix",syntax:["squeeze(x)"],description:"Remove inner and outer singleton dimensions from a matrix.",examples:["a = zeros(3,2,1)","size(squeeze(a))","b = zeros(1,1,3)","size(squeeze(b))"],seealso:["concat","det","diag","identity","inv","ones","range","size","subset","trace","transpose","zeros"]}},{}],529:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.subsetDocs=void 0;exports.subsetDocs={name:"subset",category:"Matrix",syntax:["value(index)","value(index) = replacement","subset(value, [index])","subset(value, [index], replacement)"],description:"Get or set a subset of a matrix or string. Indexes are one-based. Both the ranges lower-bound and upper-bound are included.",examples:["d = [1, 2; 3, 4]","e = []","e[1, 1:2] = [5, 6]","e[2, :] = [7, 8]","f = d * e","f[2, 1]","f[:, 1]"],seealso:["concat","det","diag","identity","inv","ones","range","size","squeeze","trace","transpose","zeros"]}},{}],530:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.traceDocs=void 0;exports.traceDocs={name:"trace",category:"Matrix",syntax:["trace(A)"],description:"Calculate the trace of a matrix: the sum of the elements on the main diagonal of a square matrix.",examples:["A = [1, 2, 3; -1, 2, 3; 2, 0, 3]","trace(A)"],seealso:["concat","det","diag","identity","inv","ones","range","size","squeeze","subset","transpose","zeros"]}},{}],531:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.transposeDocs=void 0;exports.transposeDocs={name:"transpose",category:"Matrix",syntax:["x'","transpose(x)"],description:"Transpose a matrix",examples:["a = [1, 2, 3; 4, 5, 6]","a'","transpose(a)"],seealso:["concat","det","diag","identity","inv","ones","range","size","squeeze","subset","trace","zeros"]}},{}],532:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.zerosDocs=void 0;exports.zerosDocs={name:"zeros",category:"Matrix",syntax:["zeros(m)","zeros(m, n)","zeros(m, n, p, ...)","zeros([m])","zeros([m, n])","zeros([m, n, p, ...])"],description:"Create a matrix containing zeros.",examples:["zeros(3)","zeros(3, 5)","a = [1, 2, 3; 4, 5, 6]","zeros(size(a))"],seealso:["concat","det","diag","identity","inv","ones","range","size","squeeze","subset","trace","transpose"]}},{}],533:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.combinationsDocs=void 0;exports.combinationsDocs={name:"combinations",category:"Probability",syntax:["combinations(n, k)"],description:"Compute the number of combinations of n items taken k at a time",examples:["combinations(7, 5)"],seealso:["combinationsWithRep","permutations","factorial"]}},{}],534:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.combinationsWithRepDocs=void 0;exports.combinationsWithRepDocs={name:"combinationsWithRep",category:"Probability",syntax:["combinationsWithRep(n, k)"],description:"Compute the number of combinations of n items taken k at a time with replacements.",examples:["combinationsWithRep(7, 5)"],seealso:["combinations","permutations","factorial"]}},{}],535:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.factorialDocs=void 0;exports.factorialDocs={name:"factorial",category:"Probability",syntax:["n!","factorial(n)"],description:"Compute the factorial of a value",examples:["5!","5 * 4 * 3 * 2 * 1","3!"],seealso:["combinations","combinationsWithRep","permutations","gamma"]}},{}],536:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.gammaDocs=void 0;exports.gammaDocs={name:"gamma",category:"Probability",syntax:["gamma(n)"],description:"Compute the gamma function. For small values, the Lanczos approximation is used, and for large values the extended Stirling approximation.",examples:["gamma(4)","3!","gamma(1/2)","sqrt(pi)"],seealso:["factorial"]}},{}],537:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.kldivergenceDocs=void 0;exports.kldivergenceDocs={name:"kldivergence",category:"Probability",syntax:["kldivergence(x, y)"],description:"Calculate the Kullback-Leibler (KL) divergence between two distributions.",examples:["kldivergence([0.7,0.5,0.4], [0.2,0.9,0.5])"],seealso:[]}},{}],538:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.multinomialDocs=void 0;exports.multinomialDocs={name:"multinomial",category:"Probability",syntax:["multinomial(A)"],description:"Multinomial Coefficients compute the number of ways of picking a1, a2, ..., ai unordered outcomes from `n` possibilities. multinomial takes one array of integers as an argument. The following condition must be enforced: every ai > 0.",examples:["multinomial([1, 2, 1])"],seealso:["combinations","factorial"]}},{}],539:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.permutationsDocs=void 0;exports.permutationsDocs={name:"permutations",category:"Probability",syntax:["permutations(n)","permutations(n, k)"],description:"Compute the number of permutations of n items taken k at a time",examples:["permutations(5)","permutations(5, 3)"],seealso:["combinations","combinationsWithRep","factorial"]}},{}],540:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.pickRandomDocs=void 0;exports.pickRandomDocs={name:"pickRandom",category:"Probability",syntax:["pickRandom(array)","pickRandom(array, number)","pickRandom(array, weights)","pickRandom(array, number, weights)","pickRandom(array, weights, number)"],description:"Pick a random entry from a given array.",examples:["pickRandom(0:10)","pickRandom([1, 3, 1, 6])","pickRandom([1, 3, 1, 6], 2)","pickRandom([1, 3, 1, 6], [2, 3, 2, 1])","pickRandom([1, 3, 1, 6], 2, [2, 3, 2, 1])","pickRandom([1, 3, 1, 6], [2, 3, 2, 1], 2)"],seealso:["random","randomInt"]}},{}],541:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.randomDocs=void 0;exports.randomDocs={name:"random",category:"Probability",syntax:["random()","random(max)","random(min, max)","random(size)","random(size, max)","random(size, min, max)"],description:"Return a random number.",examples:["random()","random(10, 20)","random([2, 3])"],seealso:["pickRandom","randomInt"]}},{}],542:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.randomIntDocs=void 0;exports.randomIntDocs={name:"randomInt",category:"Probability",syntax:["randomInt(max)","randomInt(min, max)","randomInt(size)","randomInt(size, max)","randomInt(size, min, max)"],description:"Return a random integer number",examples:["randomInt(10, 20)","randomInt([2, 3], 10)"],seealso:["pickRandom","random"]}},{}],543:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.compareDocs=void 0;exports.compareDocs={name:"compare",category:"Relational",syntax:["compare(x, y)"],description:"Compare two values. Returns 1 when x > y, -1 when x < y, and 0 when x == y.",examples:["compare(2, 3)","compare(3, 2)","compare(2, 2)","compare(5cm, 40mm)","compare(2, [1, 2, 3])"],seealso:["equal","unequal","smaller","smallerEq","largerEq","compareNatural","compareText"]}},{}],544:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.compareNaturalDocs=void 0;exports.compareNaturalDocs={name:"compareNatural",category:"Relational",syntax:["compareNatural(x, y)"],description:"Compare two values of any type in a deterministic, natural way. Returns 1 when x > y, -1 when x < y, and 0 when x == y.",examples:["compareNatural(2, 3)","compareNatural(3, 2)","compareNatural(2, 2)","compareNatural(5cm, 40mm)",'compareNatural("2", "10")',"compareNatural(2 + 3i, 2 + 4i)","compareNatural([1, 2, 4], [1, 2, 3])","compareNatural([1, 5], [1, 2, 3])","compareNatural([1, 2], [1, 2])","compareNatural({a: 2}, {a: 4})"],seealso:["equal","unequal","smaller","smallerEq","largerEq","compare","compareText"]}},{}],545:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.compareTextDocs=void 0;exports.compareTextDocs={name:"compareText",category:"Relational",syntax:["compareText(x, y)"],description:"Compare two strings lexically. Comparison is case sensitive. Returns 1 when x > y, -1 when x < y, and 0 when x == y.",examples:['compareText("B", "A")','compareText("A", "B")','compareText("A", "A")','compareText("2", "10")','compare("2", "10")',"compare(2, 10)",'compareNatural("2", "10")','compareText("B", ["A", "B", "C"])'],seealso:["compare","compareNatural"]}},{}],546:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.deepEqualDocs=void 0;exports.deepEqualDocs={name:"deepEqual",category:"Relational",syntax:["deepEqual(x, y)"],description:"Check equality of two matrices element wise. Returns true if the size of both matrices is equal and when and each of the elements are equal.",examples:["deepEqual([1,3,4], [1,3,4])","deepEqual([1,3,4], [1,3])"],seealso:["equal","unequal","smaller","larger","smallerEq","largerEq","compare"]}},{}],547:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.equalDocs=void 0;exports.equalDocs={name:"equal",category:"Relational",syntax:["x == y","equal(x, y)"],description:"Check equality of two values. Returns true if the values are equal, and false if not.",examples:["2+2 == 3","2+2 == 4","a = 3.2","b = 6-2.8","a == b","50cm == 0.5m"],seealso:["unequal","smaller","larger","smallerEq","largerEq","compare","deepEqual","equalText"]}},{}],548:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.equalTextDocs=void 0;exports.equalTextDocs={name:"equalText",category:"Relational",syntax:["equalText(x, y)"],description:"Check equality of two strings. Comparison is case sensitive. Returns true if the values are equal, and false if not.",examples:['equalText("Hello", "Hello")','equalText("a", "A")','equal("2e3", "2000")','equalText("2e3", "2000")','equalText("B", ["A", "B", "C"])'],seealso:["compare","compareNatural","compareText","equal"]}},{}],549:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.largerDocs=void 0;exports.largerDocs={name:"larger",category:"Relational",syntax:["x > y","larger(x, y)"],description:"Check if value x is larger than y. Returns true if x is larger than y, and false if not.",examples:["2 > 3","5 > 2*2","a = 3.3","b = 6-2.8","(a > b)","(b < a)","5 cm > 2 inch"],seealso:["equal","unequal","smaller","smallerEq","largerEq","compare"]}},{}],550:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.largerEqDocs=void 0;exports.largerEqDocs={name:"largerEq",category:"Relational",syntax:["x >= y","largerEq(x, y)"],description:"Check if value x is larger or equal to y. Returns true if x is larger or equal to y, and false if not.",examples:["2 >= 1+1","2 > 1+1","a = 3.2","b = 6-2.8","(a >= b)"],seealso:["equal","unequal","smallerEq","smaller","compare"]}},{}],551:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.smallerDocs=void 0;exports.smallerDocs={name:"smaller",category:"Relational",syntax:["x < y","smaller(x, y)"],description:"Check if value x is smaller than value y. Returns true if x is smaller than y, and false if not.",examples:["2 < 3","5 < 2*2","a = 3.3","b = 6-2.8","(a < b)","5 cm < 2 inch"],seealso:["equal","unequal","larger","smallerEq","largerEq","compare"]}},{}],552:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.smallerEqDocs=void 0;exports.smallerEqDocs={name:"smallerEq",category:"Relational",syntax:["x <= y","smallerEq(x, y)"],description:"Check if value x is smaller or equal to value y. Returns true if x is smaller than y, and false if not.",examples:["2 <= 1+1","2 < 1+1","a = 3.2","b = 6-2.8","(a <= b)"],seealso:["equal","unequal","larger","smaller","largerEq","compare"]}},{}],553:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.unequalDocs=void 0;exports.unequalDocs={name:"unequal",category:"Relational",syntax:["x != y","unequal(x, y)"],description:"Check unequality of two values. Returns true if the values are unequal, and false if they are equal.",examples:["2+2 != 3","2+2 != 4","a = 3.2","b = 6-2.8","a != b","50cm != 0.5m","5 cm != 2 inch"],seealso:["equal","smaller","larger","smallerEq","largerEq","compare","deepEqual"]}},{}],554:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.setCartesianDocs=void 0;exports.setCartesianDocs={name:"setCartesian",category:"Set",syntax:["setCartesian(set1, set2)"],description:"Create the cartesian product of two (multi)sets. Multi-dimension arrays will be converted to single-dimension arrays before the operation.",examples:["setCartesian([1, 2], [3, 4])"],seealso:["setUnion","setIntersect","setDifference","setPowerset"]}},{}],555:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.setDifferenceDocs=void 0;exports.setDifferenceDocs={name:"setDifference",category:"Set",syntax:["setDifference(set1, set2)"],description:"Create the difference of two (multi)sets: every element of set1, that is not the element of set2. Multi-dimension arrays will be converted to single-dimension arrays before the operation.",examples:["setDifference([1, 2, 3, 4], [3, 4, 5, 6])","setDifference([[1, 2], [3, 4]], [[3, 4], [5, 6]])"],seealso:["setUnion","setIntersect","setSymDifference"]}},{}],556:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.setDistinctDocs=void 0;exports.setDistinctDocs={name:"setDistinct",category:"Set",syntax:["setDistinct(set)"],description:"Collect the distinct elements of a multiset. A multi-dimension array will be converted to a single-dimension array before the operation.",examples:["setDistinct([1, 1, 1, 2, 2, 3])"],seealso:["setMultiplicity"]}},{}],557:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.setIntersectDocs=void 0;exports.setIntersectDocs={name:"setIntersect",category:"Set",syntax:["setIntersect(set1, set2)"],description:"Create the intersection of two (multi)sets. Multi-dimension arrays will be converted to single-dimension arrays before the operation.",examples:["setIntersect([1, 2, 3, 4], [3, 4, 5, 6])","setIntersect([[1, 2], [3, 4]], [[3, 4], [5, 6]])"],seealso:["setUnion","setDifference"]}},{}],558:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.setIsSubsetDocs=void 0;exports.setIsSubsetDocs={name:"setIsSubset",category:"Set",syntax:["setIsSubset(set1, set2)"],description:"Check whether a (multi)set is a subset of another (multi)set: every element of set1 is the element of set2. Multi-dimension arrays will be converted to single-dimension arrays before the operation.",examples:["setIsSubset([1, 2], [3, 4, 5, 6])","setIsSubset([3, 4], [3, 4, 5, 6])"],seealso:["setUnion","setIntersect","setDifference"]}},{}],559:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.setMultiplicityDocs=void 0;exports.setMultiplicityDocs={name:"setMultiplicity",category:"Set",syntax:["setMultiplicity(element, set)"],description:"Count the multiplicity of an element in a multiset. A multi-dimension array will be converted to a single-dimension array before the operation.",examples:["setMultiplicity(1, [1, 2, 2, 4])","setMultiplicity(2, [1, 2, 2, 4])"],seealso:["setDistinct","setSize"]}},{}],560:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.setPowersetDocs=void 0;exports.setPowersetDocs={name:"setPowerset",category:"Set",syntax:["setPowerset(set)"],description:"Create the powerset of a (multi)set: the powerset contains very possible subsets of a (multi)set. A multi-dimension array will be converted to a single-dimension array before the operation.",examples:["setPowerset([1, 2, 3])"],seealso:["setCartesian"]}},{}],561:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.setSizeDocs=void 0;exports.setSizeDocs={name:"setSize",category:"Set",syntax:["setSize(set)","setSize(set, unique)"],description:'Count the number of elements of a (multi)set. When the second parameter "unique" is true, count only the unique values. A multi-dimension array will be converted to a single-dimension array before the operation.',examples:["setSize([1, 2, 2, 4])","setSize([1, 2, 2, 4], true)"],seealso:["setUnion","setIntersect","setDifference"]}},{}],562:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.setSymDifferenceDocs=void 0;exports.setSymDifferenceDocs={name:"setSymDifference",category:"Set",syntax:["setSymDifference(set1, set2)"],description:"Create the symmetric difference of two (multi)sets. Multi-dimension arrays will be converted to single-dimension arrays before the operation.",examples:["setSymDifference([1, 2, 3, 4], [3, 4, 5, 6])","setSymDifference([[1, 2], [3, 4]], [[3, 4], [5, 6]])"],seealso:["setUnion","setIntersect","setDifference"]}},{}],563:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.setUnionDocs=void 0;exports.setUnionDocs={name:"setUnion",category:"Set",syntax:["setUnion(set1, set2)"],description:"Create the union of two (multi)sets. Multi-dimension arrays will be converted to single-dimension arrays before the operation.",examples:["setUnion([1, 2, 3, 4], [3, 4, 5, 6])","setUnion([[1, 2], [3, 4]], [[3, 4], [5, 6]])"],seealso:["setIntersect","setDifference"]}},{}],564:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.erfDocs=void 0;exports.erfDocs={name:"erf",category:"Special",syntax:["erf(x)"],description:"Compute the erf function of a value using a rational Chebyshev approximations for different intervals of x",examples:["erf(0.2)","erf(-0.5)","erf(4)"],seealso:[]}},{}],565:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.madDocs=void 0;exports.madDocs={name:"mad",category:"Statistics",syntax:["mad(a, b, c, ...)","mad(A)"],description:"Compute the median absolute deviation of a matrix or a list with values. The median absolute deviation is defined as the median of the absolute deviations from the median.",examples:["mad(10, 20, 30)","mad([1, 2, 3])"],seealso:["mean","median","std","abs"]}},{}],566:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.maxDocs=void 0;exports.maxDocs={name:"max",category:"Statistics",syntax:["max(a, b, c, ...)","max(A)","max(A, dim)"],description:"Compute the maximum value of a list of values.",examples:["max(2, 3, 4, 1)","max([2, 3, 4, 1])","max([2, 5; 4, 3])","max([2, 5; 4, 3], 1)","max([2, 5; 4, 3], 2)","max(2.7, 7.1, -4.5, 2.0, 4.1)","min(2.7, 7.1, -4.5, 2.0, 4.1)"],seealso:["mean","median","min","prod","std","sum","variance"]}},{}],567:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.meanDocs=void 0;exports.meanDocs={name:"mean",category:"Statistics",syntax:["mean(a, b, c, ...)","mean(A)","mean(A, dim)"],description:"Compute the arithmetic mean of a list of values.",examples:["mean(2, 3, 4, 1)","mean([2, 3, 4, 1])","mean([2, 5; 4, 3])","mean([2, 5; 4, 3], 1)","mean([2, 5; 4, 3], 2)","mean([1.0, 2.7, 3.2, 4.0])"],seealso:["max","median","min","prod","std","sum","variance"]}},{}],568:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.medianDocs=void 0;exports.medianDocs={name:"median",category:"Statistics",syntax:["median(a, b, c, ...)","median(A)"],description:"Compute the median of all values. The values are sorted and the middle value is returned. In case of an even number of values, the average of the two middle values is returned.",examples:["median(5, 2, 7)","median([3, -1, 5, 7])"],seealso:["max","mean","min","prod","std","sum","variance","quantileSeq"]}},{}],569:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.minDocs=void 0;exports.minDocs={name:"min",category:"Statistics",syntax:["min(a, b, c, ...)","min(A)","min(A, dim)"],description:"Compute the minimum value of a list of values.",examples:["min(2, 3, 4, 1)","min([2, 3, 4, 1])","min([2, 5; 4, 3])","min([2, 5; 4, 3], 1)","min([2, 5; 4, 3], 2)","min(2.7, 7.1, -4.5, 2.0, 4.1)","max(2.7, 7.1, -4.5, 2.0, 4.1)"],seealso:["max","mean","median","prod","std","sum","variance"]}},{}],570:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.modeDocs=void 0;exports.modeDocs={name:"mode",category:"Statistics",syntax:["mode(a, b, c, ...)","mode(A)","mode(A, a, b, B, c, ...)"],description:"Computes the mode of all values as an array. In case mode being more than one, multiple values are returned in an array.",examples:["mode(2, 1, 4, 3, 1)","mode([1, 2.7, 3.2, 4, 2.7])","mode(1, 4, 6, 1, 6)"],seealso:["max","mean","min","median","prod","std","sum","variance"]}},{}],571:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.prodDocs=void 0;exports.prodDocs={name:"prod",category:"Statistics",syntax:["prod(a, b, c, ...)","prod(A)"],description:"Compute the product of all values.",examples:["prod(2, 3, 4)","prod([2, 3, 4])","prod([2, 5; 4, 3])"],seealso:["max","mean","min","median","min","std","sum","variance"]}},{}],572:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.quantileSeqDocs=void 0;exports.quantileSeqDocs={name:"quantileSeq",category:"Statistics",syntax:["quantileSeq(A, prob[, sorted])","quantileSeq(A, [prob1, prob2, ...][, sorted])","quantileSeq(A, N[, sorted])"],description:"Compute the prob order quantile of a matrix or a list with values. The sequence is sorted and the middle value is returned. Supported types of sequence values are: Number, BigNumber, Unit Supported types of probablity are: Number, BigNumber. \n\nIn case of a (multi dimensional) array or matrix, the prob order quantile of all elements will be calculated.",examples:["quantileSeq([3, -1, 5, 7], 0.5)","quantileSeq([3, -1, 5, 7], [1/3, 2/3])","quantileSeq([3, -1, 5, 7], 2)","quantileSeq([-1, 3, 5, 7], 0.5, true)"],seealso:["mean","median","min","max","prod","std","sum","variance"]}},{}],573:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.stdDocs=void 0;exports.stdDocs={name:"std",category:"Statistics",syntax:["std(a, b, c, ...)","std(A)","std(A, normalization)"],description:'Compute the standard deviation of all values, defined as std(A) = sqrt(variance(A)). Optional parameter normalization can be "unbiased" (default), "uncorrected", or "biased".',examples:["std(2, 4, 6)","std([2, 4, 6, 8])",'std([2, 4, 6, 8], "uncorrected")','std([2, 4, 6, 8], "biased")',"std([1, 2, 3; 4, 5, 6])"],seealso:["max","mean","min","median","prod","sum","variance"]}},{}],574:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.sumDocs=void 0;exports.sumDocs={name:"sum",category:"Statistics",syntax:["sum(a, b, c, ...)","sum(A)"],description:"Compute the sum of all values.",examples:["sum(2, 3, 4, 1)","sum([2, 3, 4, 1])","sum([2, 5; 4, 3])"],seealso:["max","mean","median","min","prod","std","sum","variance"]}},{}],575:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.varianceDocs=void 0;exports.varianceDocs={name:"variance",category:"Statistics",syntax:["variance(a, b, c, ...)","variance(A)","variance(A, normalization)"],description:'Compute the variance of all values. Optional parameter normalization can be "unbiased" (default), "uncorrected", or "biased".',examples:["variance(2, 4, 6)","variance([2, 4, 6, 8])",'variance([2, 4, 6, 8], "uncorrected")','variance([2, 4, 6, 8], "biased")',"variance([1, 2, 3; 4, 5, 6])"],seealso:["max","mean","min","median","min","prod","std","sum"]}},{}],576:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.acosDocs=void 0;exports.acosDocs={name:"acos",category:"Trigonometry",syntax:["acos(x)"],description:"Compute the inverse cosine of a value in radians.",examples:["acos(0.5)","acos(cos(2.3))"],seealso:["cos","atan","asin"]}},{}],577:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.acoshDocs=void 0;exports.acoshDocs={name:"acosh",category:"Trigonometry",syntax:["acosh(x)"],description:"Calculate the hyperbolic arccos of a value, defined as `acosh(x) = ln(sqrt(x^2 - 1) + x)`.",examples:["acosh(1.5)"],seealso:["cosh","asinh","atanh"]}},{}],578:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.acotDocs=void 0;exports.acotDocs={name:"acot",category:"Trigonometry",syntax:["acot(x)"],description:"Calculate the inverse cotangent of a value.",examples:["acot(0.5)","acot(cot(0.5))","acot(2)"],seealso:["cot","atan"]}},{}],579:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.acothDocs=void 0;exports.acothDocs={name:"acoth",category:"Trigonometry",syntax:["acoth(x)"],description:"Calculate the hyperbolic arccotangent of a value, defined as `acoth(x) = (ln((x+1)/x) + ln(x/(x-1))) / 2`.",examples:["acoth(2)","acoth(0.5)"],seealso:["acsch","asech"]}},{}],580:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.acscDocs=void 0;exports.acscDocs={name:"acsc",category:"Trigonometry",syntax:["acsc(x)"],description:"Calculate the inverse cotangent of a value.",examples:["acsc(2)","acsc(csc(0.5))","acsc(0.5)"],seealso:["csc","asin","asec"]}},{}],581:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.acschDocs=void 0;exports.acschDocs={name:"acsch",category:"Trigonometry",syntax:["acsch(x)"],description:"Calculate the hyperbolic arccosecant of a value, defined as `acsch(x) = ln(1/x + sqrt(1/x^2 + 1))`.",examples:["acsch(0.5)"],seealso:["asech","acoth"]}},{}],582:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.asecDocs=void 0;exports.asecDocs={name:"asec",category:"Trigonometry",syntax:["asec(x)"],description:"Calculate the inverse secant of a value.",examples:["asec(0.5)","asec(sec(0.5))","asec(2)"],seealso:["acos","acot","acsc"]}},{}],583:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.asechDocs=void 0;exports.asechDocs={name:"asech",category:"Trigonometry",syntax:["asech(x)"],description:"Calculate the inverse secant of a value.",examples:["asech(0.5)"],seealso:["acsch","acoth"]}},{}],584:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.asinDocs=void 0;exports.asinDocs={name:"asin",category:"Trigonometry",syntax:["asin(x)"],description:"Compute the inverse sine of a value in radians.",examples:["asin(0.5)","asin(sin(0.5))"],seealso:["sin","acos","atan"]}},{}],585:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.asinhDocs=void 0;exports.asinhDocs={name:"asinh",category:"Trigonometry",syntax:["asinh(x)"],description:"Calculate the hyperbolic arcsine of a value, defined as `asinh(x) = ln(x + sqrt(x^2 + 1))`.",examples:["asinh(0.5)"],seealso:["acosh","atanh"]}},{}],586:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.atanDocs=void 0;exports.atanDocs={name:"atan",category:"Trigonometry",syntax:["atan(x)"],description:"Compute the inverse tangent of a value in radians.",examples:["atan(0.5)","atan(tan(0.5))"],seealso:["tan","acos","asin"]}},{}],587:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.atan2Docs=void 0;exports.atan2Docs={name:"atan2",category:"Trigonometry",syntax:["atan2(y, x)"],description:"Computes the principal value of the arc tangent of y/x in radians.",examples:["atan2(2, 2) / pi","angle = 60 deg in rad","x = cos(angle)","y = sin(angle)","atan2(y, x)"],seealso:["sin","cos","tan"]}},{}],588:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.atanhDocs=void 0;exports.atanhDocs={name:"atanh",category:"Trigonometry",syntax:["atanh(x)"],description:"Calculate the hyperbolic arctangent of a value, defined as `atanh(x) = ln((1 + x)/(1 - x)) / 2`.",examples:["atanh(0.5)"],seealso:["acosh","asinh"]}},{}],589:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.cosDocs=void 0;exports.cosDocs={name:"cos",category:"Trigonometry",syntax:["cos(x)"],description:"Compute the cosine of x in radians.",examples:["cos(2)","cos(pi / 4) ^ 2","cos(180 deg)","cos(60 deg)","sin(0.2)^2 + cos(0.2)^2"],seealso:["acos","sin","tan"]}},{}],590:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.coshDocs=void 0;exports.coshDocs={name:"cosh",category:"Trigonometry",syntax:["cosh(x)"],description:"Compute the hyperbolic cosine of x in radians.",examples:["cosh(0.5)"],seealso:["sinh","tanh","coth"]}},{}],591:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.cotDocs=void 0;exports.cotDocs={name:"cot",category:"Trigonometry",syntax:["cot(x)"],description:"Compute the cotangent of x in radians. Defined as 1/tan(x)",examples:["cot(2)","1 / tan(2)"],seealso:["sec","csc","tan"]}},{}],592:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.cothDocs=void 0;exports.cothDocs={name:"coth",category:"Trigonometry",syntax:["coth(x)"],description:"Compute the hyperbolic cotangent of x in radians.",examples:["coth(2)","1 / tanh(2)"],seealso:["sech","csch","tanh"]}},{}],593:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.cscDocs=void 0;exports.cscDocs={name:"csc",category:"Trigonometry",syntax:["csc(x)"],description:"Compute the cosecant of x in radians. Defined as 1/sin(x)",examples:["csc(2)","1 / sin(2)"],seealso:["sec","cot","sin"]}},{}],594:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.cschDocs=void 0;exports.cschDocs={name:"csch",category:"Trigonometry",syntax:["csch(x)"],description:"Compute the hyperbolic cosecant of x in radians. Defined as 1/sinh(x)",examples:["csch(2)","1 / sinh(2)"],seealso:["sech","coth","sinh"]}},{}],595:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.secDocs=void 0;exports.secDocs={name:"sec",category:"Trigonometry",syntax:["sec(x)"],description:"Compute the secant of x in radians. Defined as 1/cos(x)",examples:["sec(2)","1 / cos(2)"],seealso:["cot","csc","cos"]}},{}],596:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.sechDocs=void 0;exports.sechDocs={name:"sech",category:"Trigonometry",syntax:["sech(x)"],description:"Compute the hyperbolic secant of x in radians. Defined as 1/cosh(x)",examples:["sech(2)","1 / cosh(2)"],seealso:["coth","csch","cosh"]}},{}],597:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.sinDocs=void 0;exports.sinDocs={name:"sin",category:"Trigonometry",syntax:["sin(x)"],description:"Compute the sine of x in radians.",examples:["sin(2)","sin(pi / 4) ^ 2","sin(90 deg)","sin(30 deg)","sin(0.2)^2 + cos(0.2)^2"],seealso:["asin","cos","tan"]}},{}],598:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.sinhDocs=void 0;exports.sinhDocs={name:"sinh",category:"Trigonometry",syntax:["sinh(x)"],description:"Compute the hyperbolic sine of x in radians.",examples:["sinh(0.5)"],seealso:["cosh","tanh"]}},{}],599:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.tanDocs=void 0;exports.tanDocs={name:"tan",category:"Trigonometry",syntax:["tan(x)"],description:"Compute the tangent of x in radians.",examples:["tan(0.5)","sin(0.5) / cos(0.5)","tan(pi / 4)","tan(45 deg)"],seealso:["atan","sin","cos"]}},{}],600:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.tanhDocs=void 0;exports.tanhDocs={name:"tanh",category:"Trigonometry",syntax:["tanh(x)"],description:"Compute the hyperbolic tangent of x in radians.",examples:["tanh(0.5)","sinh(0.5) / cosh(0.5)"],seealso:["sinh","cosh"]}},{}],601:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.toDocs=void 0;exports.toDocs={name:"to",category:"Units",syntax:["x to unit","to(x, unit)"],description:"Change the unit of a value.",examples:["5 inch to cm","3.2kg to g","16 bytes in bits"],seealso:[]}},{}],602:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.cloneDocs=void 0;exports.cloneDocs={name:"clone",category:"Utils",syntax:["clone(x)"],description:"Clone a variable. Creates a copy of primitive variables,and a deep copy of matrices",examples:["clone(3.5)","clone(2 - 4i)","clone(45 deg)","clone([1, 2; 3, 4])",'clone("hello world")'],seealso:[]}},{}],603:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.formatDocs=void 0;exports.formatDocs={name:"format",category:"Utils",syntax:["format(value)","format(value, precision)"],description:"Format a value of any type as string.",examples:["format(2.3)","format(3 - 4i)","format([])","format(pi, 3)"],seealso:["print"]}},{}],604:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.hasNumericValueDocs=void 0;exports.hasNumericValueDocs={name:"hasNumericValue",category:"Utils",syntax:["hasNumericValue(x)"],description:"Test whether a value is an numeric value. In case of a string, true is returned if the string contains a numeric value.",examples:["hasNumericValue(2)",'hasNumericValue("2")','isNumeric("2")',"hasNumericValue(0)","hasNumericValue(bignumber(500))","hasNumericValue(fraction(0.125))","hasNumericValue(2 + 3i)",'hasNumericValue([2.3, "foo", false])'],seealso:["isInteger","isZero","isNegative","isPositive","isNaN","isNumeric"]}},{}],605:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.isIntegerDocs=void 0;exports.isIntegerDocs={name:"isInteger",category:"Utils",syntax:["isInteger(x)"],description:"Test whether a value is an integer number.",examples:["isInteger(2)","isInteger(3.5)","isInteger([3, 0.5, -2])"],seealso:["isNegative","isNumeric","isPositive","isZero"]}},{}],606:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.isNaNDocs=void 0;exports.isNaNDocs={name:"isNaN",category:"Utils",syntax:["isNaN(x)"],description:"Test whether a value is NaN (not a number)",examples:["isNaN(2)","isNaN(0 / 0)","isNaN(NaN)","isNaN(Infinity)"],seealso:["isNegative","isNumeric","isPositive","isZero"]}},{}],607:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.isNegativeDocs=void 0;exports.isNegativeDocs={name:"isNegative",category:"Utils",syntax:["isNegative(x)"],description:"Test whether a value is negative: smaller than zero.",examples:["isNegative(2)","isNegative(0)","isNegative(-4)","isNegative([3, 0.5, -2])"],seealso:["isInteger","isNumeric","isPositive","isZero"]}},{}],608:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.isNumericDocs=void 0;exports.isNumericDocs={name:"isNumeric",category:"Utils",syntax:["isNumeric(x)"],description:"Test whether a value is a numeric value. Returns true when the input is a number, BigNumber, Fraction, or boolean.",examples:["isNumeric(2)",'isNumeric("2")','hasNumericValue("2")',"isNumeric(0)","isNumeric(bignumber(500))","isNumeric(fraction(0.125))","isNumeric(2 + 3i)",'isNumeric([2.3, "foo", false])'],seealso:["isInteger","isZero","isNegative","isPositive","isNaN","hasNumericValue"]}},{}],609:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.isPositiveDocs=void 0;exports.isPositiveDocs={name:"isPositive",category:"Utils",syntax:["isPositive(x)"],description:"Test whether a value is positive: larger than zero.",examples:["isPositive(2)","isPositive(0)","isPositive(-4)","isPositive([3, 0.5, -2])"],seealso:["isInteger","isNumeric","isNegative","isZero"]}},{}],610:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.isPrimeDocs=void 0;exports.isPrimeDocs={name:"isPrime",category:"Utils",syntax:["isPrime(x)"],description:"Test whether a value is prime: has no divisors other than itself and one.",examples:["isPrime(3)","isPrime(-2)","isPrime([2, 17, 100])"],seealso:["isInteger","isNumeric","isNegative","isZero"]}},{}],611:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.isZeroDocs=void 0;exports.isZeroDocs={name:"isZero",category:"Utils",syntax:["isZero(x)"],description:"Test whether a value is zero.",examples:["isZero(2)","isZero(0)","isZero(-4)","isZero([3, 0, -2, 0])"],seealso:["isInteger","isNumeric","isNegative","isPositive"]}},{}],612:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.numericDocs=void 0;exports.numericDocs={name:"numeric",category:"Utils",syntax:["numeric(x)"],description:"Convert a numeric input to a specific numeric type: number, BigNumber, or Fraction.",examples:['numeric("4")','numeric("4", "number")','numeric("4", "BigNumber")','numeric("4", "Fraction)','numeric(4, "Fraction")','numeric(fraction(2, 5), "number)'],seealso:["number","fraction","bignumber","string","format"]}},{}],613:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.typeOfDocs=void 0;exports.typeOfDocs={name:"typeOf",category:"Utils",syntax:["typeOf(x)"],description:"Get the type of a variable.",examples:["typeOf(3.5)","typeOf(2 - 4i)","typeOf(45 deg)",'typeOf("hello world")'],seealso:["getMatrixDataType"]}},{}],614:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createCompile=void 0;var _collection=require("../../utils/collection"),_factory=require("../../utils/factory"),dependencies=["typed","parse"],createCompile=(0,_factory.factory)("compile",dependencies,function(_ref){var typed=_ref.typed,parse=_ref.parse;return typed("compile",{string:function(expr){return parse(expr).compile()},"Array | Matrix":function(expr){return(0,_collection.deepMap)(expr,function(entry){return parse(entry).compile()})}})});exports.createCompile=createCompile},{"../../utils/collection":927,"../../utils/factory":931}],615:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createDeprecatedEval=void 0;var _factory=require("../../utils/factory"),_log=require("../../utils/log"),createDeprecatedEval=(0,_factory.factory)("eval",["evaluate"],function(_ref){var evaluate=_ref.evaluate;return function(){(0,_log.warnOnce)('Function "eval" has been renamed to "evaluate" in v6.0.0, please use the new function instead.');for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];return evaluate.apply(evaluate,args)}});exports.createDeprecatedEval=createDeprecatedEval},{"../../utils/factory":931,"../../utils/log":935}],616:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createEvaluate=void 0;var _collection=require("../../utils/collection"),_factory=require("../../utils/factory"),dependencies=["typed","parse"],createEvaluate=(0,_factory.factory)("evaluate",dependencies,function(_ref){var typed=_ref.typed,parse=_ref.parse;return typed("evaluate",{string:function(expr){return parse(expr).compile().evaluate({})},"string, Object":function(expr,scope){return parse(expr).compile().evaluate(scope)},"Array | Matrix":function(expr){var scope={};return(0,_collection.deepMap)(expr,function(entry){return parse(entry).compile().evaluate(scope)})},"Array | Matrix, Object":function(expr,scope){return(0,_collection.deepMap)(expr,function(entry){return parse(entry).compile().evaluate(scope)})}})});exports.createEvaluate=createEvaluate},{"../../utils/collection":927,"../../utils/factory":931}],617:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createHelp=void 0;var _factory=require("../../utils/factory"),_customs=require("../../utils/customs"),_embeddedDocs=require("../embeddedDocs/embeddedDocs"),_object=require("../../utils/object"),dependencies=["typed","mathWithTransform","Help"],createHelp=(0,_factory.factory)("help",dependencies,function(_ref){var typed=_ref.typed,mathWithTransform=_ref.mathWithTransform,Help=_ref.Help;return typed("help",{any:function(search){var prop,searchName=search;if("string"!=typeof search)for(prop in mathWithTransform)if((0,_object.hasOwnProperty)(mathWithTransform,prop)&&search===mathWithTransform[prop]){searchName=prop;break}var doc=(0,_customs.getSafeProperty)(_embeddedDocs.embeddedDocs,searchName);if(doc)return new Help(doc);var searchText="function"==typeof searchName?searchName.name:searchName;throw new Error('No documentation found on "'+searchText+'"')}})});exports.createHelp=createHelp},{"../../utils/customs":929,"../../utils/factory":931,"../../utils/object":938,"../embeddedDocs/embeddedDocs":435}],618:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createParser=void 0;var _factory=require("../../utils/factory"),dependencies=["typed","Parser"],createParser=(0,_factory.factory)("parser",dependencies,function(_ref){var typed=_ref.typed,Parser=_ref.Parser;return typed("parser",{"":function(){return new Parser}})});exports.createParser=createParser},{"../../utils/factory":931}],619:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.keywords=void 0;exports.keywords={end:!0}},{}],620:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createAccessorNode=void 0;var _is=require("../../utils/is"),_customs=require("../../utils/customs"),_factory=require("../../utils/factory"),_access=require("./utils/access"),dependencies=["subset","Node"],createAccessorNode=(0,_factory.factory)("AccessorNode",dependencies,function(_ref){var subset=_ref.subset,Node=_ref.Node,access=(0,_access.accessFactory)({subset:subset});function AccessorNode(object,index){if(!(this instanceof AccessorNode))throw new SyntaxError("Constructor must be called with the new operator");if(!(0,_is.isNode)(object))throw new TypeError('Node expected for parameter "object"');if(!(0,_is.isIndexNode)(index))throw new TypeError('IndexNode expected for parameter "index"');this.object=object||null,this.index=index,Object.defineProperty(this,"name",{get:function(){return this.index?this.index.isObjectProperty()?this.index.getObjectProperty():"":this.object.name||""}.bind(this),set:function(){throw new Error("Cannot assign a new name, name is read-only")}})}function needParenthesis(node){return!((0,_is.isAccessorNode)(node)||(0,_is.isArrayNode)(node)||(0,_is.isConstantNode)(node)||(0,_is.isFunctionNode)(node)||(0,_is.isObjectNode)(node)||(0,_is.isParenthesisNode)(node)||(0,_is.isSymbolNode)(node))}return(AccessorNode.prototype=new Node).type="AccessorNode",AccessorNode.prototype.isAccessorNode=!0,AccessorNode.prototype._compile=function(math,argNames){var evalObject=this.object._compile(math,argNames),evalIndex=this.index._compile(math,argNames);if(this.index.isObjectProperty()){var prop=this.index.getObjectProperty();return function(scope,args,context){return(0,_customs.getSafeProperty)(evalObject(scope,args,context),prop)}}return function(scope,args,context){var object=evalObject(scope,args,context),index=evalIndex(scope,args,object);return access(object,index)}},AccessorNode.prototype.forEach=function(callback){callback(this.object,"object",this),callback(this.index,"index",this)},AccessorNode.prototype.map=function(callback){return new AccessorNode(this._ifNode(callback(this.object,"object",this)),this._ifNode(callback(this.index,"index",this)))},AccessorNode.prototype.clone=function(){return new AccessorNode(this.object,this.index)},AccessorNode.prototype._toString=function(options){var object=this.object.toString(options);return needParenthesis(this.object)&&(object="("+object+")"),object+this.index.toString(options)},AccessorNode.prototype.toHTML=function(options){var object=this.object.toHTML(options);return needParenthesis(this.object)&&(object='('+object+')'),object+this.index.toHTML(options)},AccessorNode.prototype._toTex=function(options){var object=this.object.toTex(options);return needParenthesis(this.object)&&(object="\\left(' + object + '\\right)"),object+this.index.toTex(options)},AccessorNode.prototype.toJSON=function(){return{mathjs:"AccessorNode",object:this.object,index:this.index}},AccessorNode.fromJSON=function(json){return new AccessorNode(json.object,json.index)},AccessorNode},{isClass:!0,isNode:!0});exports.createAccessorNode=createAccessorNode},{"../../utils/customs":929,"../../utils/factory":931,"../../utils/is":933,"./utils/access":636}],621:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createArrayNode=void 0;var _is=require("../../utils/is"),_array=require("../../utils/array"),dependencies=["Node"],createArrayNode=(0,require("../../utils/factory").factory)("ArrayNode",dependencies,function(_ref){var Node=_ref.Node;function ArrayNode(items){if(!(this instanceof ArrayNode))throw new SyntaxError("Constructor must be called with the new operator");if(this.items=items||[],!Array.isArray(this.items)||!this.items.every(_is.isNode))throw new TypeError("Array containing Nodes expected");var deprecated=function(){throw new Error("Property `ArrayNode.nodes` is deprecated, use `ArrayNode.items` instead")};Object.defineProperty(this,"nodes",{get:deprecated,set:deprecated})}return(ArrayNode.prototype=new Node).type="ArrayNode",ArrayNode.prototype.isArrayNode=!0,ArrayNode.prototype._compile=function(math,argNames){var evalItems=(0,_array.map)(this.items,function(item){return item._compile(math,argNames)});if("Array"===math.config.matrix)return function(scope,args,context){return(0,_array.map)(evalItems,function(evalItem){return evalItem(scope,args,context)})};var matrix=math.matrix;return function(scope,args,context){return matrix((0,_array.map)(evalItems,function(evalItem){return evalItem(scope,args,context)}))}},ArrayNode.prototype.forEach=function(callback){for(var i=0;i['+this.items.map(function(node){return node.toHTML(options)}).join(',')+']'},ArrayNode.prototype._toTex=function(options){var s="\\begin{bmatrix}";return this.items.forEach(function(node){node.items?s+=node.items.map(function(childNode){return childNode.toTex(options)}).join("&"):s+=node.toTex(options),s+="\\\\"}),s+="\\end{bmatrix}"},ArrayNode},{isClass:!0,isNode:!0});exports.createArrayNode=createArrayNode},{"../../utils/array":922,"../../utils/factory":931,"../../utils/is":933}],622:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createAssignmentNode=void 0;var _is=require("../../utils/is"),_customs=require("../../utils/customs"),_factory=require("../../utils/factory"),_access=require("./utils/access"),_assign=require("./utils/assign"),_operators=require("../operators"),dependencies=["subset","?matrix","Node"],createAssignmentNode=(0,_factory.factory)("AssignmentNode",dependencies,function(_ref){var subset=_ref.subset,matrix=_ref.matrix,Node=_ref.Node,access=(0,_access.accessFactory)({subset:subset}),assign=(0,_assign.assignFactory)({subset:subset,matrix:matrix});function AssignmentNode(object,index,value){if(!(this instanceof AssignmentNode))throw new SyntaxError("Constructor must be called with the new operator");if(this.object=object,this.index=value?index:null,this.value=value||index,!(0,_is.isSymbolNode)(object)&&!(0,_is.isAccessorNode)(object))throw new TypeError('SymbolNode or AccessorNode expected as "object"');if((0,_is.isSymbolNode)(object)&&"end"===object.name)throw new Error('Cannot assign to symbol "end"');if(this.index&&!(0,_is.isIndexNode)(this.index))throw new TypeError('IndexNode expected as "index"');if(!(0,_is.isNode)(this.value))throw new TypeError('Node expected as "value"');Object.defineProperty(this,"name",{get:function(){return this.index?this.index.isObjectProperty()?this.index.getObjectProperty():"":this.object.name||""}.bind(this),set:function(){throw new Error("Cannot assign a new name, name is read-only")}})}function needParenthesis(node,parenthesis){parenthesis=parenthesis||"keep";var precedence=(0,_operators.getPrecedence)(node,parenthesis),exprPrecedence=(0,_operators.getPrecedence)(node.value,parenthesis);return"all"===parenthesis||null!==exprPrecedence&&exprPrecedence<=precedence}return(AssignmentNode.prototype=new Node).type="AssignmentNode",AssignmentNode.prototype.isAssignmentNode=!0,AssignmentNode.prototype._compile=function(math,argNames){var evalObject=this.object._compile(math,argNames),evalIndex=this.index?this.index._compile(math,argNames):null,evalValue=this.value._compile(math,argNames),name=this.object.name;if(this.index){if(this.index.isObjectProperty()){var prop=this.index.getObjectProperty();return function(scope,args,context){var object=evalObject(scope,args,context),value=evalValue(scope,args,context);return(0,_customs.setSafeProperty)(object,prop,value)}}if((0,_is.isSymbolNode)(this.object))return function(scope,args,context){var childObject=evalObject(scope,args,context),value=evalValue(scope,args,context),index=evalIndex(scope,args,childObject);return(0,_customs.setSafeProperty)(scope,name,assign(childObject,index,value)),value};var evalParentObject=this.object.object._compile(math,argNames);if(this.object.index.isObjectProperty()){var parentProp=this.object.index.getObjectProperty();return function(scope,args,context){var parent=evalParentObject(scope,args,context),childObject=(0,_customs.getSafeProperty)(parent,parentProp),index=evalIndex(scope,args,childObject),value=evalValue(scope,args,context);return(0,_customs.setSafeProperty)(parent,parentProp,assign(childObject,index,value)),value}}var evalParentIndex=this.object.index._compile(math,argNames);return function(scope,args,context){var parent=evalParentObject(scope,args,context),parentIndex=evalParentIndex(scope,args,parent),childObject=access(parent,parentIndex),index=evalIndex(scope,args,childObject),value=evalValue(scope,args,context);return assign(parent,parentIndex,assign(childObject,index,value)),value}}if(!(0,_is.isSymbolNode)(this.object))throw new TypeError("SymbolNode expected as object");return function(scope,args,context){return(0,_customs.setSafeProperty)(scope,name,evalValue(scope,args,context))}},AssignmentNode.prototype.forEach=function(callback){callback(this.object,"object",this),this.index&&callback(this.index,"index",this),callback(this.value,"value",this)},AssignmentNode.prototype.map=function(callback){return new AssignmentNode(this._ifNode(callback(this.object,"object",this)),this.index?this._ifNode(callback(this.index,"index",this)):null,this._ifNode(callback(this.value,"value",this)))},AssignmentNode.prototype.clone=function(){return new AssignmentNode(this.object,this.index,this.value)},AssignmentNode.prototype._toString=function(options){var object=this.object.toString(options),index=this.index?this.index.toString(options):"",value=this.value.toString(options);return needParenthesis(this,options&&options.parenthesis)&&(value="("+value+")"),object+index+" = "+value},AssignmentNode.prototype.toJSON=function(){return{mathjs:"AssignmentNode",object:this.object,index:this.index,value:this.value}},AssignmentNode.fromJSON=function(json){return new AssignmentNode(json.object,json.index,json.value)},AssignmentNode.prototype.toHTML=function(options){var object=this.object.toHTML(options),index=this.index?this.index.toHTML(options):"",value=this.value.toHTML(options);return needParenthesis(this,options&&options.parenthesis)&&(value='('+value+')'),object+index+'='+value},AssignmentNode.prototype._toTex=function(options){var object=this.object.toTex(options),index=this.index?this.index.toTex(options):"",value=this.value.toTex(options);return needParenthesis(this,options&&options.parenthesis)&&(value="\\left(".concat(value,"\\right)")),object+index+":="+value},AssignmentNode},{isClass:!0,isNode:!0});exports.createAssignmentNode=createAssignmentNode},{"../../utils/customs":929,"../../utils/factory":931,"../../utils/is":933,"../operators":638,"./utils/access":636,"./utils/assign":637}],623:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createBlockNode=void 0;var _is=require("../../utils/is"),_array=require("../../utils/array"),dependencies=["ResultSet","Node"],createBlockNode=(0,require("../../utils/factory").factory)("BlockNode",dependencies,function(_ref){var ResultSet=_ref.ResultSet,Node=_ref.Node;function BlockNode(blocks){if(!(this instanceof BlockNode))throw new SyntaxError("Constructor must be called with the new operator");if(!Array.isArray(blocks))throw new Error("Array expected");this.blocks=blocks.map(function(block){var node=block&&block.node,visible=!block||void 0===block.visible||block.visible;if(!(0,_is.isNode)(node))throw new TypeError('Property "node" must be a Node');if("boolean"!=typeof visible)throw new TypeError('Property "visible" must be a boolean');return{node:node,visible:visible}})}return(BlockNode.prototype=new Node).type="BlockNode",BlockNode.prototype.isBlockNode=!0,BlockNode.prototype._compile=function(math,argNames){var evalBlocks=(0,_array.map)(this.blocks,function(block){return{evaluate:block.node._compile(math,argNames),visible:block.visible}});return function(scope,args,context){var results=[];return(0,_array.forEach)(evalBlocks,function(block){var result=block.evaluate(scope,args,context);block.visible&&results.push(result)}),new ResultSet(results)}},BlockNode.prototype.forEach=function(callback){for(var i=0;i;')}).join('
')},BlockNode.prototype._toTex=function(options){return this.blocks.map(function(param){return param.node.toTex(options)+(param.visible?"":";")}).join("\\;\\;\n")},BlockNode},{isClass:!0,isNode:!0});exports.createBlockNode=createBlockNode},{"../../utils/array":922,"../../utils/factory":931,"../../utils/is":933}],624:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createConditionalNode=void 0;var _is=require("../../utils/is"),_factory=require("../../utils/factory"),_operators=require("../operators"),dependencies=["Node"],createConditionalNode=(0,_factory.factory)("ConditionalNode",dependencies,function(_ref){var Node=_ref.Node;function ConditionalNode(condition,trueExpr,falseExpr){if(!(this instanceof ConditionalNode))throw new SyntaxError("Constructor must be called with the new operator");if(!(0,_is.isNode)(condition))throw new TypeError("Parameter condition must be a Node");if(!(0,_is.isNode)(trueExpr))throw new TypeError("Parameter trueExpr must be a Node");if(!(0,_is.isNode)(falseExpr))throw new TypeError("Parameter falseExpr must be a Node");this.condition=condition,this.trueExpr=trueExpr,this.falseExpr=falseExpr}return(ConditionalNode.prototype=new Node).type="ConditionalNode",ConditionalNode.prototype.isConditionalNode=!0,ConditionalNode.prototype._compile=function(math,argNames){var evalCondition=this.condition._compile(math,argNames),evalTrueExpr=this.trueExpr._compile(math,argNames),evalFalseExpr=this.falseExpr._compile(math,argNames);return function(scope,args,context){return(function(condition){if("number"==typeof condition||"boolean"==typeof condition||"string"==typeof condition)return!!condition;if(condition){if((0,_is.isBigNumber)(condition))return!condition.isZero();if((0,_is.isComplex)(condition))return!(!condition.re&&!condition.im);if((0,_is.isUnit)(condition))return!!condition.value}if(null!=condition)throw new TypeError('Unsupported type of condition "'+(0,_is.typeOf)(condition)+'"');return!1}(evalCondition(scope,args,context))?evalTrueExpr:evalFalseExpr)(scope,args,context)}},ConditionalNode.prototype.forEach=function(callback){callback(this.condition,"condition",this),callback(this.trueExpr,"trueExpr",this),callback(this.falseExpr,"falseExpr",this)},ConditionalNode.prototype.map=function(callback){return new ConditionalNode(this._ifNode(callback(this.condition,"condition",this)),this._ifNode(callback(this.trueExpr,"trueExpr",this)),this._ifNode(callback(this.falseExpr,"falseExpr",this)))},ConditionalNode.prototype.clone=function(){return new ConditionalNode(this.condition,this.trueExpr,this.falseExpr)},ConditionalNode.prototype._toString=function(options){var parenthesis=options&&options.parenthesis?options.parenthesis:"keep",precedence=(0,_operators.getPrecedence)(this,parenthesis),condition=this.condition.toString(options),conditionPrecedence=(0,_operators.getPrecedence)(this.condition,parenthesis);("all"===parenthesis||"OperatorNode"===this.condition.type||null!==conditionPrecedence&&conditionPrecedence<=precedence)&&(condition="("+condition+")");var trueExpr=this.trueExpr.toString(options),truePrecedence=(0,_operators.getPrecedence)(this.trueExpr,parenthesis);("all"===parenthesis||"OperatorNode"===this.trueExpr.type||null!==truePrecedence&&truePrecedence<=precedence)&&(trueExpr="("+trueExpr+")");var falseExpr=this.falseExpr.toString(options),falsePrecedence=(0,_operators.getPrecedence)(this.falseExpr,parenthesis);return("all"===parenthesis||"OperatorNode"===this.falseExpr.type||null!==falsePrecedence&&falsePrecedence<=precedence)&&(falseExpr="("+falseExpr+")"),condition+" ? "+trueExpr+" : "+falseExpr},ConditionalNode.prototype.toJSON=function(){return{mathjs:"ConditionalNode",condition:this.condition,trueExpr:this.trueExpr,falseExpr:this.falseExpr}},ConditionalNode.fromJSON=function(json){return new ConditionalNode(json.condition,json.trueExpr,json.falseExpr)},ConditionalNode.prototype.toHTML=function(options){var parenthesis=options&&options.parenthesis?options.parenthesis:"keep",precedence=(0,_operators.getPrecedence)(this,parenthesis),condition=this.condition.toHTML(options),conditionPrecedence=(0,_operators.getPrecedence)(this.condition,parenthesis);("all"===parenthesis||"OperatorNode"===this.condition.type||null!==conditionPrecedence&&conditionPrecedence<=precedence)&&(condition='('+condition+')');var trueExpr=this.trueExpr.toHTML(options),truePrecedence=(0,_operators.getPrecedence)(this.trueExpr,parenthesis);("all"===parenthesis||"OperatorNode"===this.trueExpr.type||null!==truePrecedence&&truePrecedence<=precedence)&&(trueExpr='('+trueExpr+')');var falseExpr=this.falseExpr.toHTML(options),falsePrecedence=(0,_operators.getPrecedence)(this.falseExpr,parenthesis);return("all"===parenthesis||"OperatorNode"===this.falseExpr.type||null!==falsePrecedence&&falsePrecedence<=precedence)&&(falseExpr='('+falseExpr+')'),condition+'?'+trueExpr+':'+falseExpr},ConditionalNode.prototype._toTex=function(options){return"\\begin{cases} {"+this.trueExpr.toTex(options)+"}, &\\quad{\\text{if }\\;"+this.condition.toTex(options)+"}\\\\{"+this.falseExpr.toTex(options)+"}, &\\quad{\\text{otherwise}}\\end{cases}"},ConditionalNode},{isClass:!0,isNode:!0});exports.createConditionalNode=createConditionalNode},{"../../utils/factory":931,"../../utils/is":933,"../operators":638}],625:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createConstantNode=void 0;var _string=require("../../utils/string"),_is=require("../../utils/is"),_latex=require("../../utils/latex"),dependencies=["Node"],createConstantNode=(0,require("../../utils/factory").factory)("ConstantNode",dependencies,function(_ref){var Node=_ref.Node;function ConstantNode(value){if(!(this instanceof ConstantNode))throw new SyntaxError("Constructor must be called with the new operator");if(2===arguments.length)throw new SyntaxError("new ConstantNode(valueStr, valueType) is not supported anymore since math v4.0.0. Use new ConstantNode(value) instead, where value is a non-stringified value.");this.value=value}return(ConstantNode.prototype=new Node).type="ConstantNode",ConstantNode.prototype.isConstantNode=!0,ConstantNode.prototype._compile=function(math,argNames){var value=this.value;return function(){return value}},ConstantNode.prototype.forEach=function(callback){},ConstantNode.prototype.map=function(callback){return this.clone()},ConstantNode.prototype.clone=function(){return new ConstantNode(this.value)},ConstantNode.prototype._toString=function(options){return(0,_string.format)(this.value,options)},ConstantNode.prototype.toHTML=function(options){var value=this._toString(options);switch((0,_is.typeOf)(this.value)){case"number":case"BigNumber":case"Fraction":return''+value+"";case"string":return''+value+"";case"boolean":return''+value+"";case"null":return''+value+"";case"undefined":return''+value+"";default:return''+value+""}},ConstantNode.prototype.toJSON=function(){return{mathjs:"ConstantNode",value:this.value}},ConstantNode.fromJSON=function(json){return new ConstantNode(json.value)},ConstantNode.prototype._toTex=function(options){var value=this._toString(options);switch((0,_is.typeOf)(this.value)){case"string":return"\\mathtt{"+(0,_latex.escapeLatex)(value)+"}";case"number":case"BigNumber":if(!isFinite(this.value))return this.value.valueOf()<0?"-\\infty":"\\infty";var index=value.toLowerCase().indexOf("e");return-1!==index?value.substring(0,index)+"\\cdot10^{"+value.substring(index+1)+"}":value;case"Fraction":return this.value.toLatex();default:return value}},ConstantNode},{isClass:!0,isNode:!0});exports.createConstantNode=createConstantNode},{"../../utils/factory":931,"../../utils/is":933,"../../utils/latex":934,"../../utils/string":941}],626:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createFunctionAssignmentNode=void 0;var _is=require("../../utils/is"),_keywords=require("../keywords"),_string=require("../../utils/string"),_array=require("../../utils/array"),_latex=require("../../utils/latex"),_operators=require("../operators"),_customs=require("../../utils/customs"),dependencies=["typed","Node"],createFunctionAssignmentNode=(0,require("../../utils/factory").factory)("FunctionAssignmentNode",dependencies,function(_ref){var typed=_ref.typed,Node=_ref.Node;function FunctionAssignmentNode(name,params,expr){if(!(this instanceof FunctionAssignmentNode))throw new SyntaxError("Constructor must be called with the new operator");if("string"!=typeof name)throw new TypeError('String expected for parameter "name"');if(!Array.isArray(params))throw new TypeError('Array containing strings or objects expected for parameter "params"');if(!(0,_is.isNode)(expr))throw new TypeError('Node expected for parameter "expr"');if(name in _keywords.keywords)throw new Error('Illegal function name, "'+name+'" is a reserved keyword');this.name=name,this.params=params.map(function(param){return param&¶m.name||param}),this.types=params.map(function(param){return param&¶m.type||"any"}),this.expr=expr}function needParenthesis(node,parenthesis){var precedence=(0,_operators.getPrecedence)(node,parenthesis),exprPrecedence=(0,_operators.getPrecedence)(node.expr,parenthesis);return"all"===parenthesis||null!==exprPrecedence&&exprPrecedence<=precedence}return(FunctionAssignmentNode.prototype=new Node).type="FunctionAssignmentNode",FunctionAssignmentNode.prototype.isFunctionAssignmentNode=!0,FunctionAssignmentNode.prototype._compile=function(math,argNames){var childArgNames=Object.create(argNames);(0,_array.forEach)(this.params,function(param){childArgNames[param]=!0});var evalExpr=this.expr._compile(math,childArgNames),name=this.name,params=this.params,signature=(0,_array.join)(this.types,","),syntax=name+"("+(0,_array.join)(this.params,", ")+")";return function(scope,args,context){var signatures={};signatures[signature]=function(){for(var childArgs=Object.create(args),i=0;i'+(0,_string.escape)(this.params[i])+"");var expr=this.expr.toHTML(options);return needParenthesis(this,parenthesis)&&(expr='('+expr+')'),''+(0,_string.escape)(this.name)+'('+params.join(',')+')='+expr},FunctionAssignmentNode.prototype._toTex=function(options){var parenthesis=options&&options.parenthesis?options.parenthesis:"keep",expr=this.expr.toTex(options);return needParenthesis(this,parenthesis)&&(expr="\\left(".concat(expr,"\\right)")),"\\mathrm{"+this.name+"}\\left("+this.params.map(_latex.toSymbol).join(",")+"\\right):="+expr},FunctionAssignmentNode},{isClass:!0,isNode:!0});exports.createFunctionAssignmentNode=createFunctionAssignmentNode},{"../../utils/array":922,"../../utils/customs":929,"../../utils/factory":931,"../../utils/is":933,"../../utils/latex":934,"../../utils/string":941,"../keywords":619,"../operators":638}],627:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createFunctionNode=void 0;var _is=require("../../utils/is"),_string=require("../../utils/string"),_object=require("../../utils/object"),_array=require("../../utils/array"),_customs=require("../../utils/customs"),_factory=require("../../utils/factory"),_latex=require("../../utils/latex");function _typeof(obj){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function _extends(){return(_extends=Object.assign||function(target){for(var i=1;i'+(0,_string.escape)(this.fn)+'('+args.join(',')+')'};var nodeToTex=FunctionNode.prototype.toTex;return FunctionNode.prototype.toTex=function(options){var customTex;return options&&"object"===_typeof(options.handler)&&(0,_object.hasOwnProperty)(options.handler,this.name)&&(customTex=options.handler[this.name](this,options)),void 0!==customTex?customTex:nodeToTex.call(this,options)},FunctionNode.prototype._toTex=function(options){var latexConverter,customToTex,args=this.args.map(function(arg){return arg.toTex(options)});switch(_latex.latexFunctions[this.name]&&(latexConverter=_latex.latexFunctions[this.name]),!math[this.name]||"function"!=typeof math[this.name].toTex&&"object"!==_typeof(math[this.name].toTex)&&"string"!=typeof math[this.name].toTex||(latexConverter=math[this.name].toTex),_typeof(latexConverter)){case"function":customToTex=latexConverter(this,options);break;case"string":customToTex=expandTemplate(latexConverter,this,options);break;case"object":switch(_typeof(latexConverter[args.length])){case"function":customToTex=latexConverter[args.length](this,options);break;case"string":customToTex=expandTemplate(latexConverter[args.length],this,options)}}return void 0!==customToTex?customToTex:expandTemplate(_latex.defaultTemplate,this,options)},FunctionNode.prototype.getIdentifier=function(){return this.type+":"+this.name},FunctionNode},{isClass:!0,isNode:!0});exports.createFunctionNode=createFunctionNode},{"../../utils/array":922,"../../utils/customs":929,"../../utils/factory":931,"../../utils/is":933,"../../utils/latex":934,"../../utils/object":938,"../../utils/string":941}],628:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createIndexNode=void 0;var _is=require("../../utils/is"),_array=require("../../utils/array"),_string=require("../../utils/string"),_factory=require("../../utils/factory"),_customs=require("../../utils/customs");function _toConsumableArray(arr){return function(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}(arr)||function(iter){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(iter))return Array.from(iter)}(arr)||function(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i.'+(0,_string.escape)(this.getObjectProperty())+"":'['+dimensions.join(',')+']'},IndexNode.prototype._toTex=function(options){var dimensions=this.dimensions.map(function(range){return range.toTex(options)});return this.dotNotation?"."+this.getObjectProperty():"_{"+dimensions.join(",")+"}"},IndexNode},{isClass:!0,isNode:!0});exports.createIndexNode=createIndexNode},{"../../utils/array":922,"../../utils/customs":929,"../../utils/factory":931,"../../utils/is":933,"../../utils/string":941}],629:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createNode=void 0;var _is=require("../../utils/is"),_keywords=require("../keywords"),_object=require("../../utils/object"),_factory=require("../../utils/factory"),_log=require("../../utils/log");function _typeof(obj){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}var dependencies=["mathWithTransform"],createNode=(0,_factory.factory)("Node",dependencies,function(_ref){var mathWithTransform=_ref.mathWithTransform;function Node(){if(!(this instanceof Node))throw new SyntaxError("Constructor must be called with the new operator")}return Node.prototype.evaluate=function(scope){return this.compile().evaluate(scope)},Node.prototype.eval=function(scope){return(0,_log.warnOnce)("Method Node.eval is renamed to Node.evaluate. Please use the new method name."),this.evaluate(scope)},Node.prototype.type="Node",Node.prototype.isNode=!0,Node.prototype.comment="",Node.prototype.compile=function(){var expr=this._compile(mathWithTransform,{}),args={},context=null;function evaluate(scope){var s=scope||{};return function(scope){for(var symbol in scope)if((0,_object.hasOwnProperty)(scope,symbol)&&symbol in _keywords.keywords)throw new Error('Scope contains an illegal symbol, "'+symbol+'" is a reserved keyword')}(s),expr(s,args,context)}return{evaluate:evaluate,eval:function(scope){return(0,_log.warnOnce)("Method eval is renamed to evaluate. Please use the new method."),evaluate(scope)}}},Node.prototype._compile=function(math,argNames){throw new Error("Method _compile should be implemented by type "+this.type)},Node.prototype.forEach=function(callback){throw new Error("Cannot run forEach on a Node interface")},Node.prototype.map=function(callback){throw new Error("Cannot run map on a Node interface")},Node.prototype._ifNode=function(node){if(!(0,_is.isNode)(node))throw new TypeError("Callback function must return a Node");return node},Node.prototype.traverse=function(callback){callback(this,null,null),function _traverse(node,callback){node.forEach(function(child,path,parent){callback(child,path,parent),_traverse(child,callback)})}(this,callback)},Node.prototype.transform=function(callback){return function _transform(child,path,parent){var replacement=callback(child,path,parent);return replacement!==child?replacement:child.map(_transform)}(this,null,null)},Node.prototype.filter=function(callback){var nodes=[];return this.traverse(function(node,path,parent){callback(node,path,parent)&&nodes.push(node)}),nodes},Node.prototype.find=function(){throw new Error("Function Node.find is deprecated. Use Node.filter instead.")},Node.prototype.match=function(){throw new Error("Function Node.match is deprecated. See functions Node.filter, Node.transform, Node.traverse.")},Node.prototype.clone=function(){throw new Error("Cannot clone a Node interface")},Node.prototype.cloneDeep=function(){return this.map(function(node){return node.cloneDeep()})},Node.prototype.equals=function(other){return!!other&&(0,_object.deepStrictEqual)(this,other)},Node.prototype.toString=function(options){var customString;if(options&&"object"===_typeof(options))switch(_typeof(options.handler)){case"object":case"undefined":break;case"function":customString=options.handler(this,options);break;default:throw new TypeError("Object or function expected as callback")}return void 0!==customString?customString:this._toString(options)},Node.prototype.toJSON=function(){throw new Error("Cannot serialize object: toJSON not implemented by "+this.type)},Node.prototype.toHTML=function(options){var customString;if(options&&"object"===_typeof(options))switch(_typeof(options.handler)){case"object":case"undefined":break;case"function":customString=options.handler(this,options);break;default:throw new TypeError("Object or function expected as callback")}return void 0!==customString?customString:this.toHTML(options)},Node.prototype._toString=function(){throw new Error("_toString not implemented for "+this.type)},Node.prototype.toTex=function(options){var customTex;if(options&&"object"===_typeof(options))switch(_typeof(options.handler)){case"object":case"undefined":break;case"function":customTex=options.handler(this,options);break;default:throw new TypeError("Object or function expected as callback")}return void 0!==customTex?customTex:this._toTex(options)},Node.prototype._toTex=function(options){throw new Error("_toTex not implemented for "+this.type)},Node.prototype.getIdentifier=function(){return this.type},Node.prototype.getContent=function(){return this},Node},{isClass:!0,isNode:!0});exports.createNode=createNode},{"../../utils/factory":931,"../../utils/is":933,"../../utils/log":935,"../../utils/object":938,"../keywords":619}],630:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createObjectNode=void 0;var _is=require("../../utils/is"),_string=require("../../utils/string"),_customs=require("../../utils/customs"),_object=require("../../utils/object");function _typeof(obj){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}var dependencies=["Node"],createObjectNode=(0,require("../../utils/factory").factory)("ObjectNode",dependencies,function(_ref){var Node=_ref.Node;function ObjectNode(properties){if(!(this instanceof ObjectNode))throw new SyntaxError("Constructor must be called with the new operator");if(this.properties=properties||{},properties&&("object"!==_typeof(properties)||!Object.keys(properties).every(function(key){return(0,_is.isNode)(properties[key])})))throw new TypeError("Object containing Nodes expected")}return(ObjectNode.prototype=new Node).type="ObjectNode",ObjectNode.prototype.isObjectNode=!0,ObjectNode.prototype._compile=function(math,argNames){var evalEntries={};for(var key in this.properties)if((0,_object.hasOwnProperty)(this.properties,key)){var stringifiedKey=(0,_string.stringify)(key),parsedKey=JSON.parse(stringifiedKey);if(!(0,_customs.isSafeProperty)(this.properties,parsedKey))throw new Error('No access to property "'+parsedKey+'"');evalEntries[parsedKey]=this.properties[key]._compile(math,argNames)}return function(scope,args,context){var obj={};for(var _key in evalEntries)(0,_object.hasOwnProperty)(evalEntries,_key)&&(obj[_key]=evalEntries[_key](scope,args,context));return obj}},ObjectNode.prototype.forEach=function(callback){for(var key in this.properties)(0,_object.hasOwnProperty)(this.properties,key)&&callback(this.properties[key],"properties["+(0,_string.stringify)(key)+"]",this)},ObjectNode.prototype.map=function(callback){var properties={};for(var key in this.properties)(0,_object.hasOwnProperty)(this.properties,key)&&(properties[key]=this._ifNode(callback(this.properties[key],"properties["+(0,_string.stringify)(key)+"]",this)));return new ObjectNode(properties)},ObjectNode.prototype.clone=function(){var properties={};for(var key in this.properties)(0,_object.hasOwnProperty)(this.properties,key)&&(properties[key]=this.properties[key]);return new ObjectNode(properties)},ObjectNode.prototype._toString=function(options){var entries=[];for(var key in this.properties)(0,_object.hasOwnProperty)(this.properties,key)&&entries.push((0,_string.stringify)(key)+": "+this.properties[key].toString(options));return"{"+entries.join(", ")+"}"},ObjectNode.prototype.toJSON=function(){return{mathjs:"ObjectNode",properties:this.properties}},ObjectNode.fromJSON=function(json){return new ObjectNode(json.properties)},ObjectNode.prototype.toHTML=function(options){var entries=[];for(var key in this.properties)(0,_object.hasOwnProperty)(this.properties,key)&&entries.push(''+(0,_string.escape)(key)+':'+this.properties[key].toHTML(options));return'{'+entries.join(',')+'}'},ObjectNode.prototype._toTex=function(options){var entries=[];for(var key in this.properties)(0,_object.hasOwnProperty)(this.properties,key)&&entries.push("\\mathbf{"+key+":} & "+this.properties[key].toTex(options)+"\\\\");return"\\left\\{\\begin{array}{ll}".concat(entries.join("\n"),"\\end{array}\\right\\}")},ObjectNode},{isClass:!0,isNode:!0});exports.createObjectNode=createObjectNode},{"../../utils/customs":929,"../../utils/factory":931,"../../utils/is":933,"../../utils/object":938,"../../utils/string":941}],631:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createOperatorNode=void 0;var _is=require("../../utils/is"),_array=require("../../utils/array"),_string=require("../../utils/string"),_customs=require("../../utils/customs"),_operators=require("../operators"),_latex=require("../../utils/latex"),dependencies=["Node"],createOperatorNode=(0,require("../../utils/factory").factory)("OperatorNode",dependencies,function(_ref){var Node=_ref.Node;function OperatorNode(op,fn,args,implicit){if(!(this instanceof OperatorNode))throw new SyntaxError("Constructor must be called with the new operator");if("string"!=typeof op)throw new TypeError('string expected for parameter "op"');if("string"!=typeof fn)throw new TypeError('string expected for parameter "fn"');if(!Array.isArray(args)||!args.every(_is.isNode))throw new TypeError('Array containing Nodes expected for parameter "args"');this.implicit=!0===implicit,this.op=op,this.fn=fn,this.args=args||[]}function calculateNecessaryParentheses(root,parenthesis,implicit,args,latex){var result,precedence=(0,_operators.getPrecedence)(root,parenthesis),associativity=(0,_operators.getAssociativity)(root,parenthesis);if("all"===parenthesis||2)'),"right"===assoc?''+(0,_string.escape)(this.op)+""+operand:operand+''+(0,_string.escape)(this.op)+""}if(2===args.length){var lhs=args[0].toHTML(options),rhs=args[1].toHTML(options);return parens[0]&&(lhs='('+lhs+')'),parens[1]&&(rhs='('+rhs+')'),this.implicit&&"OperatorNode:multiply"===this.getIdentifier()&&"hide"===implicit?lhs+''+rhs:lhs+''+(0,_string.escape)(this.op)+""+rhs}var stringifiedArgs=args.map(function(arg,index){return arg=arg.toHTML(options),parens[index]&&(arg='('+arg+')'),arg});return 2'):stringifiedArgs.join(''+(0,_string.escape)(this.op)+""):''+(0,_string.escape)(this.fn)+'('+stringifiedArgs.join(',')+')'},OperatorNode.prototype._toTex=function(options){var parenthesis=options&&options.parenthesis?options.parenthesis:"keep",implicit=options&&options.implicit?options.implicit:"hide",args=this.args,parens=calculateNecessaryParentheses(this,parenthesis,implicit,args,!0),op=void 0===(op=_latex.latexOperators[this.fn])?this.op:op;if(1===args.length){var assoc=(0,_operators.getAssociativity)(this,parenthesis),operand=args[0].toTex(options);return parens[0]&&(operand="\\left(".concat(operand,"\\right)")),"right"===assoc?op+operand:operand+op}if(2===args.length){var lhs=args[0],lhsTex=lhs.toTex(options);parens[0]&&(lhsTex="\\left(".concat(lhsTex,"\\right)"));var lhsIdentifier,rhsTex=args[1].toTex(options);switch(parens[1]&&(rhsTex="\\left(".concat(rhsTex,"\\right)")),lhsIdentifier="keep"===parenthesis?lhs.getIdentifier():lhs.getContent().getIdentifier(),this.getIdentifier()){case"OperatorNode:divide":return op+"{"+lhsTex+"}{"+rhsTex+"}";case"OperatorNode:pow":switch(lhsTex="{"+lhsTex+"}",rhsTex="{"+rhsTex+"}",lhsIdentifier){case"ConditionalNode":case"OperatorNode:divide":lhsTex="\\left(".concat(lhsTex,"\\right)")}break;case"OperatorNode:multiply":if(this.implicit&&"hide"===implicit)return lhsTex+"~"+rhsTex}return lhsTex+op+rhsTex}if(2('+this.content.toHTML(options)+')':this.content.toHTML(options)},ParenthesisNode.prototype._toTex=function(options){return!options||options&&!options.parenthesis||options&&"keep"===options.parenthesis?"\\left(".concat(this.content.toTex(options),"\\right)"):this.content.toTex(options)},ParenthesisNode},{isClass:!0,isNode:!0});exports.createParenthesisNode=createParenthesisNode},{"../../utils/factory":931,"../../utils/is":933}],633:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createRangeNode=void 0;var _is=require("../../utils/is"),_factory=require("../../utils/factory"),_operators=require("../operators"),dependencies=["Node"],createRangeNode=(0,_factory.factory)("RangeNode",dependencies,function(_ref){var Node=_ref.Node;function RangeNode(start,end,step){if(!(this instanceof RangeNode))throw new SyntaxError("Constructor must be called with the new operator");if(!(0,_is.isNode)(start))throw new TypeError("Node expected");if(!(0,_is.isNode)(end))throw new TypeError("Node expected");if(step&&!(0,_is.isNode)(step))throw new TypeError("Node expected");if(3('+start+')'),str=start,this.step&&(step=this.step.toHTML(options),parens.step&&(step='('+step+')'),str+=':'+step);var end=this.end.toHTML(options);return parens.end&&(end='('+end+')'),str+=':'+end},RangeNode.prototype._toTex=function(options){var step,parens=calculateNecessaryParentheses(this,options&&options.parenthesis?options.parenthesis:"keep"),str=this.start.toTex(options);parens.start&&(str="\\left(".concat(str,"\\right)")),this.step&&(step=this.step.toTex(options),parens.step&&(step="\\left(".concat(step,"\\right)")),str+=":"+step);var end=this.end.toTex(options);return parens.end&&(end="\\left(".concat(end,"\\right)")),str+=":"+end},RangeNode},{isClass:!0,isNode:!0});exports.createRangeNode=createRangeNode},{"../../utils/factory":931,"../../utils/is":933,"../operators":638}],634:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createRelationalNode=void 0;var _operators=require("../operators"),_string=require("../../utils/string"),_customs=require("../../utils/customs"),_latex=require("../../utils/latex"),dependencies=["Node"],createRelationalNode=(0,require("../../utils/factory").factory)("RelationalNode",dependencies,function(_ref){var Node=_ref.Node;function RelationalNode(conditionals,params){if(!(this instanceof RelationalNode))throw new SyntaxError("Constructor must be called with the new operator");if(!Array.isArray(conditionals))throw new TypeError("Parameter conditionals must be an array");if(!Array.isArray(params))throw new TypeError("Parameter params must be an array");if(conditionals.length!==params.length-1)throw new TypeError("Parameter params must contain exactly one more element than parameter conditionals");this.conditionals=conditionals,this.params=params}return(RelationalNode.prototype=new Node).type="RelationalNode",RelationalNode.prototype.isRelationalNode=!0,RelationalNode.prototype._compile=function(math,argNames){var self=this,compiled=this.params.map(function(p){return p._compile(math,argNames)});return function(scope,args,context){for(var evalRhs=compiled[0](scope,args,context),i=0;i",smallerEq:"<=",largerEq:">="},ret=paramStrings[0],i=0;i('+p.toHTML(options)+')':p.toHTML(options)}),operatorMap={equal:"==",unequal:"!=",smaller:"<",larger:">",smallerEq:"<=",largerEq:">="},ret=paramStrings[0],i=0;i'+(0,_string.escape)(operatorMap[this.conditionals[i]])+""+paramStrings[i+1];return ret},RelationalNode.prototype._toTex=function(options){for(var parenthesis=options&&options.parenthesis?options.parenthesis:"keep",precedence=(0,_operators.getPrecedence)(this,parenthesis),paramStrings=this.params.map(function(p,index){var paramPrecedence=(0,_operators.getPrecedence)(p,parenthesis);return"all"===parenthesis||null!==paramPrecedence&¶mPrecedence<=precedence?"\\left("+p.toTex(options)+"\right)":p.toTex(options)}),ret=paramStrings[0],i=0;i'+name+"":"i"===name?''+name+"":"Infinity"===name?''+name+"":"NaN"===name?''+name+"":"null"===name?''+name+"":"undefined"===name?''+name+"":''+name+""},SymbolNode.prototype.toJSON=function(){return{mathjs:"SymbolNode",name:this.name}},SymbolNode.fromJSON=function(json){return new SymbolNode(json.name)},SymbolNode.prototype._toTex=function(options){var isUnit=!1;void 0===math[this.name]&&isValuelessUnit(this.name)&&(isUnit=!0);var symbol=(0,_latex.toSymbol)(this.name,isUnit);return"\\"===symbol[0]?symbol:" "+symbol},SymbolNode},{isClass:!0,isNode:!0});exports.createSymbolNode=createSymbolNode},{"../../utils/customs":929,"../../utils/factory":931,"../../utils/latex":934,"../../utils/string":941}],636:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.accessFactory=function(_ref){var subset=_ref.subset;return function(object,index){try{if(Array.isArray(object))return subset(object,index);if(object&&"function"==typeof object.subset)return object.subset(index);if("string"==typeof object)return subset(object,index);if("object"!==_typeof(object))throw new TypeError("Cannot apply index: unsupported type of object");if(!index.isObjectProperty())throw new TypeError("Cannot apply a numeric index as object property");return(0,_customs.getSafeProperty)(object,index.getObjectProperty())}catch(err){throw(0,_errorTransform.errorTransform)(err)}}};var _errorTransform=require("../../transform/utils/errorTransform"),_customs=require("../../../utils/customs");function _typeof(obj){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}},{"../../../utils/customs":929,"../../transform/utils/errorTransform":656}],637:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.assignFactory=function(_ref){var subset=_ref.subset,matrix=_ref.matrix;return function(object,index,value){try{if(Array.isArray(object))return matrix(object).subset(index,value).valueOf();if(object&&"function"==typeof object.subset)return object.subset(index,value);if("string"==typeof object)return subset(object,index,value);if("object"!==_typeof(object))throw new TypeError("Cannot apply index: unsupported type of object");if(!index.isObjectProperty())throw TypeError("Cannot apply a numeric index as object property");return(0,_customs.setSafeProperty)(object,index.getObjectProperty(),value),object}catch(err){throw(0,_errorTransform.errorTransform)(err)}}};var _errorTransform=require("../../transform/utils/errorTransform"),_customs=require("../../../utils/customs");function _typeof(obj){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}},{"../../../utils/customs":929,"../../transform/utils/errorTransform":656}],638:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getPrecedence=getPrecedence,exports.getAssociativity=function(_node,parenthesis){var node=_node;"keep"!==parenthesis&&(node=_node.getContent());var identifier=node.getIdentifier(),index=getPrecedence(node,parenthesis);if(null===index)return null;var property=properties[index][identifier];if((0,_object.hasOwnProperty)(property,"associativity")){if("left"===property.associativity)return"left";if("right"===property.associativity)return"right";throw Error("'"+identifier+"' has the invalid associativity '"+property.associativity+"'.")}return null},exports.isAssociativeWith=function(nodeA,nodeB,parenthesis){var a="keep"!==parenthesis?nodeA.getContent():nodeA,b="keep"!==parenthesis?nodeA.getContent():nodeB,identifierA=a.getIdentifier(),identifierB=b.getIdentifier(),index=getPrecedence(a,parenthesis);if(null===index)return null;var property=properties[index][identifierA];if((0,_object.hasOwnProperty)(property,"associativeWith")&&property.associativeWith instanceof Array){for(var i=0;i":!0,"<=":!0,">=":!0,"<<":!0,">>":!0,">>>":!0},NAMED_DELIMITERS={mod:!0,to:!0,in:!0,and:!0,xor:!0,or:!0,not:!0},CONSTANTS={true:!0,false:!1,null:null,undefined:void 0},NUMERIC_CONSTANTS=["NaN","Infinity"];function currentString(state,length){return state.expression.substr(state.index,length)}function currentCharacter(state){return currentString(state,1)}function next(state){state.index++}function prevCharacter(state){return state.expression.charAt(state.index-1)}function nextCharacter(state){return state.expression.charAt(state.index+1)}function getToken(state){for(state.tokenType=TOKENTYPE.NULL,state.token="",state.comment="";parse.isWhitespace(currentCharacter(state),state.nestingLevel);)next(state);if("#"===currentCharacter(state))for(;"\n"!==currentCharacter(state)&&""!==currentCharacter(state);)state.comment+=currentCharacter(state),next(state);if(""!==currentCharacter(state)){if("\n"===currentCharacter(state)&&!state.nestingLevel)return state.tokenType=TOKENTYPE.DELIMITER,state.token=currentCharacter(state),void next(state);var c1=currentCharacter(state),c2=currentString(state,2),c3=currentString(state,3);if(3===c3.length&&DELIMITERS[c3])return state.tokenType=TOKENTYPE.DELIMITER,state.token=c3,next(state),next(state),void next(state);if(2===c2.length&&DELIMITERS[c2])return state.tokenType=TOKENTYPE.DELIMITER,state.token=c2,next(state),void next(state);if(DELIMITERS[c1])return state.tokenType=TOKENTYPE.DELIMITER,state.token=c1,void next(state);if(parse.isDigitDot(c1)){if(state.tokenType=TOKENTYPE.NUMBER,"."===currentCharacter(state))state.token+=currentCharacter(state),next(state),parse.isDigit(currentCharacter(state))||(state.tokenType=TOKENTYPE.DELIMITER);else{for(;parse.isDigit(currentCharacter(state));)state.token+=currentCharacter(state),next(state);parse.isDecimalMark(currentCharacter(state),nextCharacter(state))&&(state.token+=currentCharacter(state),next(state))}for(;parse.isDigit(currentCharacter(state));)state.token+=currentCharacter(state),next(state);if("E"===currentCharacter(state)||"e"===currentCharacter(state))if(parse.isDigit(nextCharacter(state))||"-"===nextCharacter(state)||"+"===nextCharacter(state)){if(state.token+=currentCharacter(state),next(state),"+"!==currentCharacter(state)&&"-"!==currentCharacter(state)||(state.token+=currentCharacter(state),next(state)),!parse.isDigit(currentCharacter(state)))throw createSyntaxError(state,'Digit expected, got "'+currentCharacter(state)+'"');for(;parse.isDigit(currentCharacter(state));)state.token+=currentCharacter(state),next(state);if(parse.isDecimalMark(currentCharacter(state),nextCharacter(state)))throw createSyntaxError(state,'Digit expected, got "'+currentCharacter(state)+'"')}else if("."===nextCharacter(state))throw next(state),createSyntaxError(state,'Digit expected, got "'+currentCharacter(state)+'"')}else{if(!parse.isAlpha(currentCharacter(state),prevCharacter(state),nextCharacter(state))){for(state.tokenType=TOKENTYPE.UNKNOWN;""!==currentCharacter(state);)state.token+=currentCharacter(state),next(state);throw createSyntaxError(state,'Syntax error in part "'+state.token+'"')}for(;parse.isAlpha(currentCharacter(state),prevCharacter(state),nextCharacter(state))||parse.isDigit(currentCharacter(state));)state.token+=currentCharacter(state),next(state);(0,_object.hasOwnProperty)(NAMED_DELIMITERS,state.token)?state.tokenType=TOKENTYPE.DELIMITER:state.tokenType=TOKENTYPE.SYMBOL}}else state.tokenType=TOKENTYPE.DELIMITER}function getTokenSkipNewline(state){for(;getToken(state),"\n"===state.token;);}function openParams(state){state.nestingLevel++}function closeParams(state){state.nestingLevel--}function parseStart(expression,extraNodes){var state={extraNodes:{},expression:"",comment:"",index:0,token:"",tokenType:TOKENTYPE.NULL,nestingLevel:0,conditionalLevel:null};_extends(state,{expression:expression,extraNodes:extraNodes}),getToken(state);var node=function(state){var node,visible,blocks=[];""!==state.token&&"\n"!==state.token&&";"!==state.token&&((node=parseAssignment(state)).comment=state.comment);for(;"\n"===state.token||";"===state.token;)0===blocks.length&&node&&(visible=";"!==state.token,blocks.push({node:node,visible:visible})),getToken(state),"\n"!==state.token&&";"!==state.token&&""!==state.token&&((node=parseAssignment(state)).comment=state.comment,visible=";"!==state.token,blocks.push({node:node,visible:visible}));return 0":"larger","<=":"smallerEq",">=":"largerEq"};(0,_object.hasOwnProperty)(operators,state.token);){var cond={name:state.token,fn:operators[state.token]};conditionals.push(cond),getTokenSkipNewline(state),params.push(parseShift(state))}return 1===params.length?params[0]:2===params.length?new OperatorNode(conditionals[0].name,conditionals[0].fn,params):new RelationalNode(conditionals.map(function(c){return c.fn}),params)}function parseShift(state){for(var name,fn,params,node=parseConversion(state),operators={"<<":"leftShift",">>":"rightArithShift",">>>":"rightLogShift"};(0,_object.hasOwnProperty)(operators,state.token);)fn=operators[name=state.token],getTokenSkipNewline(state),params=[node,parseConversion(state)],node=new OperatorNode(name,fn,params);return node}function parseConversion(state){for(var name,fn,params,node=parseRange(state),operators={to:"to",in:"to"};(0,_object.hasOwnProperty)(operators,state.token);)fn=operators[name=state.token],getTokenSkipNewline(state),node="in"===name&&""===state.token?new OperatorNode("*","multiply",[node,new SymbolNode("in")],!0):(params=[node,parseRange(state)],new OperatorNode(name,fn,params));return node}function parseRange(state){var params=[],node=":"===state.token?new ConstantNode(1):parseAddSubtract(state);if(":"===state.token&&state.conditionalLevel!==state.nestingLevel){for(params.push(node);":"===state.token&¶ms.length<3;)getTokenSkipNewline(state),")"===state.token||"]"===state.token||","===state.token||""===state.token?params.push(new SymbolNode("end")):params.push(parseAddSubtract(state));node=3===params.length?new RangeNode(params[0],params[2],params[1]):new RangeNode(params[0],params[1])}return node}function parseAddSubtract(state){for(var name,fn,params,node=parseMultiplyDivide(state),operators={"+":"add","-":"subtract"};(0,_object.hasOwnProperty)(operators,state.token);)fn=operators[name=state.token],getTokenSkipNewline(state),params=[node,parseMultiplyDivide(state)],node=new OperatorNode(name,fn,params);return node}function parseMultiplyDivide(state){for(var name,fn,last,node=parseImplicitMultiplication(state),operators={"*":"multiply",".*":"dotMultiply","/":"divide","./":"dotDivide","%":"mod",mod:"mod"};(0,_object.hasOwnProperty)(operators,state.token);)fn=operators[name=state.token],getTokenSkipNewline(state),last=parseImplicitMultiplication(state),node=new OperatorNode(name,fn,[node,last]);return node}function parseImplicitMultiplication(state){for(var node=parseRule2(state),last=node;state.tokenType===TOKENTYPE.SYMBOL||"in"===state.token&&(0,_is.isConstantNode)(node)||!(state.tokenType!==TOKENTYPE.NUMBER||(0,_is.isConstantNode)(last)||(0,_is.isOperatorNode)(last)&&"!"!==last.op)||"("===state.token;)last=parseRule2(state),node=new OperatorNode("*","multiply",[node,last],!0);return node}function parseRule2(state){for(var node=parseUnary(state),last=node,tokenStates=[];"/"===state.token&&(0,_is.isConstantNode)(last);){if(tokenStates.push(_extends({},state)),getTokenSkipNewline(state),state.tokenType!==TOKENTYPE.NUMBER){_extends(state,tokenStates.pop());break}if(tokenStates.push(_extends({},state)),getTokenSkipNewline(state),state.tokenType!==TOKENTYPE.SYMBOL&&"("!==state.token){tokenStates.pop(),_extends(state,tokenStates.pop());break}_extends(state,tokenStates.pop()),tokenStates.pop(),last=parseUnary(state),node=new OperatorNode("/","divide",[node,last])}return node}function parseUnary(state){var name,params,fn,operators={"-":"unaryMinus","+":"unaryPlus","~":"bitNot",not:"not"};return(0,_object.hasOwnProperty)(operators,state.token)?(fn=operators[state.token],name=state.token,getTokenSkipNewline(state),params=[parseUnary(state)],new OperatorNode(name,fn,params)):function(state){var node,name,fn,params;node=function(state){var node,name,fn;node=function(state){var params=[];if(state.tokenType===TOKENTYPE.SYMBOL&&(0,_object.hasOwnProperty)(state.extraNodes,state.token)){var CustomNode=state.extraNodes[state.token];if(getToken(state),"("===state.token){if(params=[],openParams(state),getToken(state),")"!==state.token)for(params.push(parseAssignment(state));","===state.token;)getToken(state),params.push(parseAssignment(state));if(")"!==state.token)throw createSyntaxError(state,"Parenthesis ) expected");closeParams(state),getToken(state)}return new CustomNode(params)}return function(state){var node,name;if(state.tokenType===TOKENTYPE.SYMBOL||state.tokenType===TOKENTYPE.DELIMITER&&state.token in NAMED_DELIMITERS)return name=state.token,getToken(state),node=(0,_object.hasOwnProperty)(CONSTANTS,name)?new ConstantNode(CONSTANTS[name]):-1!==NUMERIC_CONSTANTS.indexOf(name)?new ConstantNode(numeric(name,"number")):new SymbolNode(name),node=parseAccessors(state,node);return function(state){var node,str;return'"'!==state.token?function(state){var node,str;return"'"!==state.token?function(state){var array,params,rows,cols;if("["!==state.token)return function(state){if("{"!==state.token)return function(state){var numberStr;return state.tokenType!==TOKENTYPE.NUMBER?function(state){var node;if("("!==state.token)return function(state){throw""===state.token?createSyntaxError(state,"Unexpected end of expression"):createSyntaxError(state,"Value expected")}(state);if(openParams(state),getToken(state),node=parseAssignment(state),")"===state.token)return closeParams(state),getToken(state),node=new ParenthesisNode(node),node=parseAccessors(state,node);throw createSyntaxError(state,"Parenthesis ) expected")}(state):(numberStr=state.token,getToken(state),new ConstantNode(numeric(numberStr,config.number)))}(state);var key;openParams(state);var properties={};do{if(getToken(state),"}"!==state.token){if('"'===state.token)key=parseDoubleQuotesStringToken(state);else if("'"===state.token)key=parseSingleQuotesStringToken(state);else{if(!(state.tokenType===TOKENTYPE.SYMBOL||state.tokenType===TOKENTYPE.DELIMITER&&state.token in NAMED_DELIMITERS))throw createSyntaxError(state,"Symbol or string expected as object key");key=state.token,getToken(state)}if(":"!==state.token)throw createSyntaxError(state,"Colon : expected after object key");getToken(state),properties[key]=parseAssignment(state)}}while(","===state.token);if("}"!==state.token)throw createSyntaxError(state,"Comma , or bracket } expected after object value");closeParams(state),getToken(state);var node=new ObjectNode(properties);return node=parseAccessors(state,node)}(state);if(openParams(state),getToken(state),"]"!==state.token){var row=parseRow(state);if(";"===state.token){for(rows=1,params=[row];";"===state.token;)getToken(state),params[rows]=parseRow(state),rows++;if("]"!==state.token)throw createSyntaxError(state,"End of matrix ] expected");closeParams(state),getToken(state),cols=params[0].items.length;for(var r=1;r");if(2!==lr.length)throw SyntaxError("Could not parse rule: "+rule);rule={l:lr[0],r:lr[1]};case"object":newRule={l:removeParens(parse(rule.l)),r:removeParens(parse(rule.r))},rule.context&&(newRule.evaluate=rule.context),rule.evaluate&&(newRule.evaluate=parse(rule.evaluate)),isAssociative(newRule.l)&&(makeNode=createMakeNodeFunction(newRule.l),expandsym=new SymbolNode("_p"+_lastsym++),newRule.expanded={},newRule.expanded.l=makeNode([newRule.l.clone(),expandsym]),flatten(newRule.expanded.l),unflattenr(newRule.expanded.l),newRule.expanded.r=makeNode([newRule.r,expandsym]));break;case"function":newRule=rule;break;default:throw TypeError("Unsupported type of rule: "+ruleType)}ruleSet.push(newRule)}return ruleSet}(rules);for(var res=resolve(expr,scope),visited={},str=(res=removeParens(res)).toString({parenthesis:"all"});!visited[str];){visited[str]=!0;for(var i=_lastsym=0;idense))for(var p1=tptr[j+1];p=mark?W[w+e]-=nvi:0!==W[w+e]&&(W[w+e]=W[degree+e]+wnvi);for(pk=pk1;pk>=1,px=multiply(px,px);return res}function _powMatrix(x,y){return matrix(_powArray(x.valueOf(),y))}});exports.createPow=createPow},{"../../plain/number":874,"../../utils/array":922,"../../utils/factory":931,"../../utils/number":937}],720:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createRoundNumber=exports.createRound=void 0;var _factory=require("../../utils/factory"),_collection=require("../../utils/collection"),_number=require("../../utils/number"),_algorithm=require("../../type/matrix/utils/algorithm11"),_algorithm2=require("../../type/matrix/utils/algorithm12"),_algorithm3=require("../../type/matrix/utils/algorithm14"),_number2=require("../../plain/number");function ownKeys(object,enumerableOnly){var symbols,keys=Object.keys(object);return Object.getOwnPropertySymbols&&(symbols=Object.getOwnPropertySymbols(object),enumerableOnly&&(symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable})),keys.push.apply(keys,symbols)),keys}function _objectSpread(target){for(var i=1;i=size.length)throw new _IndexError.IndexError(dim,size.length);return(0,_is.isMatrix)(mat)?mat.create(_apply(mat.valueOf(),dim,callback)):_apply(mat,dim,callback)}})});function _apply(mat,dim,callback){var i,ret,tran;if(dim<=0){if(Array.isArray(mat[0])){for(tran=function(mat){var i,j,I=mat.length,J=mat[0].length,ret=[];for(j=0;j=abs(e0);){var _i3=Vab[0][0],j=Vab[0][1];psi=function(aii,ajj,aij){var denom=subtract(ajj,aii);return abs(denom)<=config.epsilon?bignumber(-1).acos().div(4):multiplyScalar(.5,atan(multiply(2,aij,inv(denom))))}(x[_i3][_i3],x[j][j],x[_i3][j]),x=function(Hij,theta,i,j){for(var N=Hij.length,c=bignumber(cos(theta)),s=bignumber(sin(theta)),c2=multiplyScalar(c,c),s2=multiplyScalar(s,s),Aki=createArray(N,bignumber(0)),Akj=createArray(N,bignumber(0)),csHij=multiply(bignumber(2),c,s,Hij[i][j]),Aii=addScalar(subtract(multiplyScalar(c2,Hij[i][i]),csHij),multiplyScalar(s2,Hij[j][j])),Ajj=add(multiplyScalar(s2,Hij[i][i]),csHij,multiplyScalar(c2,Hij[j][j])),k=0;k=Math.abs(e0);){var _i=Vab[0][0],j=Vab[0][1];aii=x[_i][_i],ajj=x[j][j],aij=x[_i][j],denom=void 0,denom=ajj-aii,x=function(Hij,theta,i,j){for(var N=Hij.length,c=Math.cos(theta),s=Math.sin(theta),c2=c*c,s2=s*s,Aki=createArray(N,0),Akj=createArray(N,0),Aii=c2*Hij[i][i]-2*c*s*Hij[i][j]+s2*Hij[j][j],Ajj=s2*Hij[i][i]+2*c*s*Hij[i][j]+c2*Hij[j][j],k=0;kABig&&(ABig=abs(A[r][c]),rBig=r),r++;if(0===ABig)throw Error("Cannot calculate inverse, determinant is zero");(r=rBig)!==c&&(temp=A[c],A[c]=A[r],A[r]=temp,temp=B[c],B[c]=B[r],B[r]=temp);var Ac=A[c],Bc=B[c];for(r=0;r=arr.length)throw new Error("k out of bounds");for(var i=0;ilen)return str.substring(0,len);if(str.length_maxIterations)throw new Error("computing square root of matrix: iterative method could not converge")}while(_tolerancestrLen)for(var _i=strLen-1,_len=chars.length;_i<_len;_i++)chars[_i]||(chars[_i]=defaultValue);return chars.join("")}function _getObjectProperty(object,index){if(1!==index.size().length)throw new _DimensionError.DimensionError(index.size(),1);var key=index.dimension(0);if("string"!=typeof key)throw new TypeError("String expected as index to retrieve an object property");return(0,_customs.getSafeProperty)(object,key)}function _setObjectProperty(object,index,replacement){if(1!==index.size().length)throw new _DimensionError.DimensionError(index.size(),1);var key=index.dimension(0);if("string"!=typeof key)throw new TypeError("String expected as index to retrieve an object property");var updated=(0,_object.clone)(object);return(0,_customs.setSafeProperty)(updated,key,replacement),updated}exports.createSubset=createSubset},{"../../error/DimensionError":399,"../../utils/array":922,"../../utils/customs":929,"../../utils/factory":931,"../../utils/is":933,"../../utils/object":938}],779:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createTrace=void 0;var _object=require("../../utils/object"),_string=require("../../utils/string"),dependencies=["typed","matrix","add"],createTrace=(0,require("../../utils/factory").factory)("trace",dependencies,function(_ref){var typed=_ref.typed,matrix=_ref.matrix,add=_ref.add;return typed("trace",{Array:function(x){return _denseTrace(matrix(x))},SparseMatrix:function(m){var values=m._values,index=m._index,ptr=m._ptr,size=m._size,rows=size[0],columns=size[1];if(rows!==columns)throw new RangeError("Matrix must be square (size: "+(0,_string.format)(size)+")");var sum=0;if(0y.re)return 1;if(x.rey.im)return 1;if(x.imy.length?1:x.lengtharray[j+1].length&&(temp=array[j],array[j]=array[j+1],array[j+1]=temp);return array}(result)}})});exports.createSetPowerset=createSetPowerset},{"../../utils/array":922,"../../utils/factory":931}],813:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createSetSize=void 0;var _array=require("../../utils/array"),_factory=require("../../utils/factory"),dependencies=["typed","compareNatural"],createSetSize=(0,_factory.factory)("setSize",dependencies,function(_ref){var typed=_ref.typed,compareNatural=_ref.compareNatural;return typed("setSize",{"Array | Matrix":function(a){return Array.isArray(a)?(0,_array.flatten)(a).length:(0,_array.flatten)(a.toArray()).length},"Array | Matrix, boolean":function(a,unique){if(!1===unique||0===a.length)return Array.isArray(a)?(0,_array.flatten)(a).length:(0,_array.flatten)(a.toArray()).length;for(var b=(0,_array.flatten)(Array.isArray(a)?a:a.toArray()).sort(compareNatural),count=1,i=1;imax&&(max=count[value],mode=[value])}return mode}});exports.createMode=createMode},{"../../utils/array":922,"../../utils/factory":931}],823:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createProd=void 0;var _collection=require("../../utils/collection"),_factory=require("../../utils/factory"),_improveErrorMessage=require("./utils/improveErrorMessage"),dependencies=["typed","multiply"],createProd=(0,_factory.factory)("prod",dependencies,function(_ref){var typed=_ref.typed,multiply=_ref.multiply;return typed("prod",{"Array | Matrix":_prod,"Array | Matrix, number | BigNumber":function(){throw new Error("prod(A, dim) is not yet supported")},"...":_prod});function _prod(array){var prod;if((0,_collection.deepForEach)(array,function(value){try{prod=void 0===prod?value:multiply(prod,value)}catch(err){throw(0,_improveErrorMessage.improveErrorMessage)(err,"prod",value)}}),void 0===prod)throw new Error("Cannot calculate prod of an empty array");return prod}});exports.createProd=createProd},{"../../utils/collection":927,"../../utils/factory":931,"./utils/improveErrorMessage":827}],824:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createQuantileSeq=void 0;var _is=require("../../utils/is"),_number=require("../../utils/number"),_array=require("../../utils/array"),dependencies=["typed","add","multiply","partitionSelect","compare"],createQuantileSeq=(0,require("../../utils/factory").factory)("quantileSeq",dependencies,function(_ref){var typed=_ref.typed,add=_ref.add,multiply=_ref.multiply,partitionSelect=_ref.partitionSelect,compare=_ref.compare;function _quantileSeq(array,prob,sorted){var flat=(0,_array.flatten)(array),len=flat.length;if(0===len)throw new Error("Cannot calculate quantile of an empty sequence");if((0,_is.isNumber)(prob)){var _index=prob*(len-1),_fracPart=_index%1;if(0==_fracPart){var value=sorted?flat[_index]:partitionSelect(flat,_index);return validate(value),value}var _left,_right,_integerPart=Math.floor(_index);if(sorted)_left=flat[_integerPart],_right=flat[_integerPart+1];else{_right=partitionSelect(flat,_integerPart+1),_left=flat[_integerPart];for(var i=0;i<_integerPart;++i)0>y}function rightLogShiftNumber(x,y){if(!(0,_number.isInteger)(x)||!(0,_number.isInteger)(y))throw new Error("Integers expected in function rightLogShift");return x>>>y}bitAndNumber.signature=n2,bitNotNumber.signature="number",rightLogShiftNumber.signature=rightArithShiftNumber.signature=leftShiftNumber.signature=bitXorNumber.signature=bitOrNumber.signature=n2},{"../../utils/number":937}],872:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.combinationsNumber=combinationsNumber;var _number=require("../../utils/number"),_product=require("../../utils/product");function combinationsNumber(n,k){if(!(0,_number.isInteger)(n)||n<0)throw new TypeError("Positive integer value expected in function combinations");if(!(0,_number.isInteger)(k)||k<0)throw new TypeError("Positive integer value expected in function combinations");if(nb.re?1:a.reb.im?1:a.imnewSize[i]&&(newSize[i]=size[i],changed=!0);changed&&_resize(matrix,newSize,defaultValue)}return(DenseMatrix.prototype=new Matrix).createDenseMatrix=function(data,datatype){return new DenseMatrix(data,datatype)},DenseMatrix.prototype.type="DenseMatrix",DenseMatrix.prototype.isDenseMatrix=!0,DenseMatrix.prototype.getDataType=function(){return(0,_array.getArrayDataType)(this._data,_is.typeOf)},DenseMatrix.prototype.storage=function(){return"dense"},DenseMatrix.prototype.datatype=function(){return this._datatype},DenseMatrix.prototype.create=function(data,datatype){return new DenseMatrix(data,datatype)},DenseMatrix.prototype.subset=function(index,replacement,defaultValue){switch(arguments.length){case 1:return function(matrix,index){if(!(0,_is.isIndex)(index))throw new TypeError("Invalid index");{if(index.isScalar())return matrix.get(index.min());var size=index.size();if(size.length!==matrix._size.length)throw new _DimensionError.DimensionError(size.length,matrix._size.length);for(var min=index.min(),max=index.max(),i=0,ii=matrix._size.length;i");var size=index.max().map(function(i){return i+1});_fit(matrix,size,defaultValue);var dims=iSize.length;!function _setSubmatrix(data,index,submatrix,dims,dim){var last=dim===dims-1;var range=index.dimension(dim);last?range.forEach(function(dataIndex,subIndex){(0,_array.validateIndex)(dataIndex),data[dataIndex]=submatrix[subIndex[0]]}):range.forEach(function(dataIndex,subIndex){(0,_array.validateIndex)(dataIndex),_setSubmatrix(data[dataIndex],index,submatrix[subIndex[0]],dims,dim+1)})}(matrix._data,index,submatrix,dims,0)}return matrix}(this,index,replacement,defaultValue);default:throw new SyntaxError("Wrong number of arguments")}},DenseMatrix.prototype.get=function(index){if(!(0,_is.isArray)(index))throw new TypeError("Array expected");if(index.length!==this._size.length)throw new _DimensionError.DimensionError(index.length,this._size.length);for(var x=0;x=from&&(equalScalar(node.value,0)||callback(node.key,node.value,this)),(node=heap.extractMinimum())&&nodes.push(node);for(var i=0;i");for(var x0=index.min()[0],y0=index.min()[1],m=sSize[0],n=sSize[1],x=0;x "+(this._values?(0,_string.format)(this._values[k],options):"X")}return str},SparseMatrix.prototype.toString=function(){return(0,_string.format)(this.toArray())},SparseMatrix.prototype.toJSON=function(){return{mathjs:"SparseMatrix",values:this._values,index:this._index,ptr:this._ptr,size:this._size,datatype:this._datatype}},SparseMatrix.prototype.diagonal=function(k){if(k){if((0,_is.isBigNumber)(k)&&(k=k.toNumber()),!(0,_is.isNumber)(k)||!(0,_number.isInteger)(k))throw new TypeError("The parameter k must be an integer number")}else k=0;var kSuper=0")}(array,size,0)},exports.validateIndex=function(index,length){if(!(0,_is.isNumber)(index)||!(0,_number.isInteger)(index))throw new TypeError("Index must be an integer (value: "+index+")");if(index<0||"number"==typeof length&&length<=index)throw new _IndexError.IndexError(index,length)},exports.resize=function(array,size,defaultValue){if(!Array.isArray(array)||!Array.isArray(size))throw new TypeError("Array expected");if(0===size.length)throw new Error("Resizing to scalar is not supported");size.forEach(function(value){if(!(0,_is.isNumber)(value)||!(0,_number.isInteger)(value)||value<0)throw new TypeError("Invalid size, must contain positive integers (size: "+(0,_string.format)(size)+")")});var _defaultValue=void 0!==defaultValue?defaultValue:0;return function _resize(array,size,dim,defaultValue){var i;var elem;var oldLen=array.length;var newLen=size[dim];var minLen=Math.min(oldLen,newLen);array.length=newLen;if(dimstrL)for(xe-=strL;xe--;)str+="0";else xe>1,arr[_j]&=1)}return arr.reverse()}Object.defineProperty(exports,"__esModule",{value:!0}),exports.bitAndBigNumber=function(x,y){if(x.isFinite()&&!x.isInteger()||y.isFinite()&&!y.isInteger())throw new Error("Integers expected in function bitAnd");var BigNumber=x.constructor;if(x.isNaN()||y.isNaN())return new BigNumber(NaN);if(x.isZero()||y.eq(-1)||x.eq(y))return x;if(y.isZero()||x.eq(-1))return y;if(!x.isFinite()||!y.isFinite()){if(!x.isFinite()&&!y.isFinite())return x.isNegative()===y.isNegative()?x:new BigNumber(0);if(!x.isFinite())return y.isNegative()?x:x.isNegative()?new BigNumber(0):y;if(!y.isFinite())return x.isNegative()?y:y.isNegative()?new BigNumber(0):x}return bitwise(x,y,function(a,b){return a&b})},exports.bitNotBigNumber=bitNotBigNumber,exports.bitOrBigNumber=function(x,y){if(x.isFinite()&&!x.isInteger()||y.isFinite()&&!y.isInteger())throw new Error("Integers expected in function bitOr");var BigNumber=x.constructor;if(x.isNaN()||y.isNaN())return new BigNumber(NaN);var negOne=new BigNumber(-1);if(x.isZero()||y.eq(negOne)||x.eq(y))return y;if(y.isZero()||x.eq(negOne))return x;if(x.isFinite()&&y.isFinite())return bitwise(x,y,function(a,b){return a|b});if(!x.isFinite()&&!x.isNegative()&&y.isNegative()||x.isNegative()&&!y.isNegative()&&!y.isFinite())return negOne;if(x.isNegative()&&y.isNegative())return x.isFinite()?x:y;return x.isFinite()?y:x},exports.bitwise=bitwise,exports.bitXor=function(x,y){if(x.isFinite()&&!x.isInteger()||y.isFinite()&&!y.isInteger())throw new Error("Integers expected in function bitXor");var BigNumber=x.constructor;if(x.isNaN()||y.isNaN())return new BigNumber(NaN);if(x.isZero())return y;if(y.isZero())return x;if(x.eq(y))return new BigNumber(0);var negOne=new BigNumber(-1);if(x.eq(negOne))return bitNotBigNumber(y);if(y.eq(negOne))return bitNotBigNumber(x);return x.isFinite()&&y.isFinite()?bitwise(x,y,function(a,b){return a^b}):x.isFinite()||y.isFinite()?new BigNumber(x.isNegative()===y.isNegative()?1/0:-1/0):negOne},exports.leftShiftBigNumber=function(x,y){if(x.isFinite()&&!x.isInteger()||y.isFinite()&&!y.isInteger())throw new Error("Integers expected in function leftShift");var BigNumber=x.constructor;if(x.isNaN()||y.isNaN()||y.isNegative()&&!y.isZero())return new BigNumber(NaN);if(x.isZero()||y.isZero())return x;if(!x.isFinite()&&!y.isFinite())return new BigNumber(NaN);if(y.lt(55))return x.times(Math.pow(2,y.toNumber())+"");return x.times(new BigNumber(2).pow(y))},exports.rightArithShiftBigNumber=function(x,y){if(x.isFinite()&&!x.isInteger()||y.isFinite()&&!y.isInteger())throw new Error("Integers expected in function rightArithShift");var BigNumber=x.constructor;if(x.isNaN()||y.isNaN()||y.isNegative()&&!y.isZero())return new BigNumber(NaN);if(x.isZero()||y.isZero())return x;if(!y.isFinite())return x.isNegative()?new BigNumber(-1):x.isFinite()?new BigNumber(0):new BigNumber(NaN);if(y.lt(55))return x.div(Math.pow(2,y.toNumber())+"").floor();return x.div(new BigNumber(2).pow(y)).floor()}},{}],924:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createBigNumberTau=exports.createBigNumberPi=exports.createBigNumberPhi=exports.createBigNumberE=void 0;var _function=require("../function"),createBigNumberE=(0,_function.memoize)(function(BigNumber){return new BigNumber(1).exp()},hasher);exports.createBigNumberE=createBigNumberE;var createBigNumberPhi=(0,_function.memoize)(function(BigNumber){return new BigNumber(1).plus(new BigNumber(5).sqrt()).div(2)},hasher);exports.createBigNumberPhi=createBigNumberPhi;var createBigNumberPi=(0,_function.memoize)(function(BigNumber){return BigNumber.acos(-1)},hasher);exports.createBigNumberPi=createBigNumberPi;var createBigNumberTau=(0,_function.memoize)(function(BigNumber){return createBigNumberPi(BigNumber).times(2)},hasher);function hasher(args){return args[0].precision}exports.createBigNumberTau=createBigNumberTau},{"../function":932}],925:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.format=function format(value,options){if("function"==typeof options)return options(value);if(!value.isFinite())return value.isNaN()?"NaN":value.gt(0)?"Infinity":"-Infinity";var notation="auto";var precision;void 0!==options&&(options.notation&&(notation=options.notation),"number"==typeof options?precision=options:options.precision&&(precision=options.precision));switch(notation){case"fixed":return toFixed(value,precision);case"exponential":return toExponential(value,precision);case"engineering":return toEngineering(value,precision);case"auto":if(options&&options.exponential&&(void 0!==options.exponential.lower||void 0!==options.exponential.upper)){var fixedOptions=(0,_object.mapObject)(options,function(x){return x});return(fixedOptions.exponential=void 0)!==options.exponential.lower&&(fixedOptions.lowerExp=Math.round(Math.log(options.exponential.lower)/Math.LN10)),void 0!==options.exponential.upper&&(fixedOptions.upperExp=Math.round(Math.log(options.exponential.upper)/Math.LN10)),console.warn("Deprecation warning: Formatting options exponential.lower and exponential.upper (minimum and maximum value) are replaced with exponential.lowerExp and exponential.upperExp (minimum and maximum exponent) since version 4.0.0. Replace "+JSON.stringify(options)+" with "+JSON.stringify(fixedOptions)),format(value,fixedOptions)}var lowerExp=options&&void 0!==options.lowerExp?options.lowerExp:-3,upperExp=options&&void 0!==options.upperExp?options.upperExp:5;if(value.isZero())return"0";var rounded=value.toSignificantDigits(precision),exp=rounded.e;return(lowerExp<=exp&&exp=size.length)throw new _IndexError.IndexError(dim,size.length);return(0,_is.isMatrix)(mat)?mat.create(_reduce(mat.valueOf(),dim,callback)):_reduce(mat,dim,callback)},exports.scatter=function(a,j,w,x,u,mark,cindex,f,inverse,update,value){var k,k0,k1,i,avalues=a._values,aindex=a._index,aptr=a._ptr;if(x)for(k0=aptr[j],k1=aptr[j+1],k=k0;k>",rightLogShift:">>>",equal:"=",unequal:"\\neq",smaller:"<",larger:">",smallerEq:"\\leq",largerEq:"\\geq",bitAnd:"\\&",bitXor:"\\underline{|}",bitOr:"|",and:"\\wedge",xor:"\\veebar",or:"\\vee"};exports.latexOperators=latexOperators;var latexFunctions={abs:{1:"\\left|${args[0]}\\right|"},add:{2:"\\left(${args[0]}".concat(latexOperators.add,"${args[1]}\\right)")},cbrt:{1:"\\sqrt[3]{${args[0]}}"},ceil:{1:"\\left\\lceil${args[0]}\\right\\rceil"},cube:{1:"\\left(${args[0]}\\right)^3"},divide:{2:"\\frac{${args[0]}}{${args[1]}}"},dotDivide:{2:"\\left(${args[0]}".concat(latexOperators.dotDivide,"${args[1]}\\right)")},dotMultiply:{2:"\\left(${args[0]}".concat(latexOperators.dotMultiply,"${args[1]}\\right)")},dotPow:{2:"\\left(${args[0]}".concat(latexOperators.dotPow,"${args[1]}\\right)")},exp:{1:"\\exp\\left(${args[0]}\\right)"},expm1:"\\left(e".concat(latexOperators.pow,"{${args[0]}}-1\\right)"),fix:{1:"\\mathrm{${name}}\\left(${args[0]}\\right)"},floor:{1:"\\left\\lfloor${args[0]}\\right\\rfloor"},gcd:"\\gcd\\left(${args}\\right)",hypot:"\\hypot\\left(${args}\\right)",log:{1:"\\ln\\left(${args[0]}\\right)",2:"\\log_{${args[1]}}\\left(${args[0]}\\right)"},log10:{1:"\\log_{10}\\left(${args[0]}\\right)"},log1p:{1:"\\ln\\left(${args[0]}+1\\right)",2:"\\log_{${args[1]}}\\left(${args[0]}+1\\right)"},log2:"\\log_{2}\\left(${args[0]}\\right)",mod:{2:"\\left(${args[0]}".concat(latexOperators.mod,"${args[1]}\\right)")},multiply:{2:"\\left(${args[0]}".concat(latexOperators.multiply,"${args[1]}\\right)")},norm:{1:"\\left\\|${args[0]}\\right\\|",2:void 0},nthRoot:{2:"\\sqrt[${args[1]}]{${args[0]}}"},nthRoots:{2:"\\{y : $y^{args[1]} = {${args[0]}}\\}"},pow:{2:"\\left(${args[0]}\\right)".concat(latexOperators.pow,"{${args[1]}}")},round:{1:"\\left\\lfloor${args[0]}\\right\\rceil",2:void 0},sign:{1:"\\mathrm{${name}}\\left(${args[0]}\\right)"},sqrt:{1:"\\sqrt{${args[0]}}"},square:{1:"\\left(${args[0]}\\right)^2"},subtract:{2:"\\left(${args[0]}".concat(latexOperators.subtract,"${args[1]}\\right)")},unaryMinus:{1:"".concat(latexOperators.unaryMinus,"\\left(${args[0]}\\right)")},unaryPlus:{1:"".concat(latexOperators.unaryPlus,"\\left(${args[0]}\\right)")},bitAnd:{2:"\\left(${args[0]}".concat(latexOperators.bitAnd,"${args[1]}\\right)")},bitNot:{1:latexOperators.bitNot+"\\left(${args[0]}\\right)"},bitOr:{2:"\\left(${args[0]}".concat(latexOperators.bitOr,"${args[1]}\\right)")},bitXor:{2:"\\left(${args[0]}".concat(latexOperators.bitXor,"${args[1]}\\right)")},leftShift:{2:"\\left(${args[0]}".concat(latexOperators.leftShift,"${args[1]}\\right)")},rightArithShift:{2:"\\left(${args[0]}".concat(latexOperators.rightArithShift,"${args[1]}\\right)")},rightLogShift:{2:"\\left(${args[0]}".concat(latexOperators.rightLogShift,"${args[1]}\\right)")},bellNumbers:{1:"\\mathrm{B}_{${args[0]}}"},catalan:{1:"\\mathrm{C}_{${args[0]}}"},stirlingS2:{2:"\\mathrm{S}\\left(${args}\\right)"},arg:{1:"\\arg\\left(${args[0]}\\right)"},conj:{1:"\\left(${args[0]}\\right)^*"},im:{1:"\\Im\\left\\lbrace${args[0]}\\right\\rbrace"},re:{1:"\\Re\\left\\lbrace${args[0]}\\right\\rbrace"},and:{2:"\\left(${args[0]}".concat(latexOperators.and,"${args[1]}\\right)")},not:{1:latexOperators.not+"\\left(${args[0]}\\right)"},or:{2:"\\left(${args[0]}".concat(latexOperators.or,"${args[1]}\\right)")},xor:{2:"\\left(${args[0]}".concat(latexOperators.xor,"${args[1]}\\right)")},cross:{2:"\\left(${args[0]}\\right)\\times\\left(${args[1]}\\right)"},ctranspose:{1:"\\left(${args[0]}\\right)".concat(latexOperators.ctranspose)},det:{1:"\\det\\left(${args[0]}\\right)"},dot:{2:"\\left(${args[0]}\\cdot${args[1]}\\right)"},expm:{1:"\\exp\\left(${args[0]}\\right)"},inv:{1:"\\left(${args[0]}\\right)^{-1}"},sqrtm:{1:"{${args[0]}}".concat(latexOperators.pow,"{\\frac{1}{2}}")},trace:{1:"\\mathrm{tr}\\left(${args[0]}\\right)"},transpose:{1:"\\left(${args[0]}\\right)".concat(latexOperators.transpose)},combinations:{2:"\\binom{${args[0]}}{${args[1]}}"},combinationsWithRep:{2:"\\left(\\!\\!{\\binom{${args[0]}}{${args[1]}}}\\!\\!\\right)"},factorial:{1:"\\left(${args[0]}\\right)".concat(latexOperators.factorial)},gamma:{1:"\\Gamma\\left(${args[0]}\\right)"},equal:{2:"\\left(${args[0]}".concat(latexOperators.equal,"${args[1]}\\right)")},larger:{2:"\\left(${args[0]}".concat(latexOperators.larger,"${args[1]}\\right)")},largerEq:{2:"\\left(${args[0]}".concat(latexOperators.largerEq,"${args[1]}\\right)")},smaller:{2:"\\left(${args[0]}".concat(latexOperators.smaller,"${args[1]}\\right)")},smallerEq:{2:"\\left(${args[0]}".concat(latexOperators.smallerEq,"${args[1]}\\right)")},unequal:{2:"\\left(${args[0]}".concat(latexOperators.unequal,"${args[1]}\\right)")},erf:{1:"erf\\left(${args[0]}\\right)"},max:"\\max\\left(${args}\\right)",min:"\\min\\left(${args}\\right)",variance:"\\mathrm{Var}\\left(${args}\\right)",acos:{1:"\\cos^{-1}\\left(${args[0]}\\right)"},acosh:{1:"\\cosh^{-1}\\left(${args[0]}\\right)"},acot:{1:"\\cot^{-1}\\left(${args[0]}\\right)"},acoth:{1:"\\coth^{-1}\\left(${args[0]}\\right)"},acsc:{1:"\\csc^{-1}\\left(${args[0]}\\right)"},acsch:{1:"\\mathrm{csch}^{-1}\\left(${args[0]}\\right)"},asec:{1:"\\sec^{-1}\\left(${args[0]}\\right)"},asech:{1:"\\mathrm{sech}^{-1}\\left(${args[0]}\\right)"},asin:{1:"\\sin^{-1}\\left(${args[0]}\\right)"},asinh:{1:"\\sinh^{-1}\\left(${args[0]}\\right)"},atan:{1:"\\tan^{-1}\\left(${args[0]}\\right)"},atan2:{2:"\\mathrm{atan2}\\left(${args}\\right)"},atanh:{1:"\\tanh^{-1}\\left(${args[0]}\\right)"},cos:{1:"\\cos\\left(${args[0]}\\right)"},cosh:{1:"\\cosh\\left(${args[0]}\\right)"},cot:{1:"\\cot\\left(${args[0]}\\right)"},coth:{1:"\\coth\\left(${args[0]}\\right)"},csc:{1:"\\csc\\left(${args[0]}\\right)"},csch:{1:"\\mathrm{csch}\\left(${args[0]}\\right)"},sec:{1:"\\sec\\left(${args[0]}\\right)"},sech:{1:"\\mathrm{sech}\\left(${args[0]}\\right)"},sin:{1:"\\sin\\left(${args[0]}\\right)"},sinh:{1:"\\sinh\\left(${args[0]}\\right)"},tan:{1:"\\tan\\left(${args[0]}\\right)"},tanh:{1:"\\tanh\\left(${args[0]}\\right)"},to:{2:"\\left(${args[0]}".concat(latexOperators.to,"${args[1]}\\right)")},numeric:function(node){return node.args[0].toTex()},number:{0:"0",1:"\\left(${args[0]}\\right)",2:"\\left(\\left(${args[0]}\\right)${args[1]}\\right)"},string:{0:'\\mathtt{""}',1:"\\mathrm{string}\\left(${args[0]}\\right)"},bignumber:{0:"0",1:"\\left(${args[0]}\\right)"},complex:{0:"0",1:"\\left(${args[0]}\\right)",2:"\\left(\\left(${args[0]}\\right)+".concat(latexSymbols.i,"\\cdot\\left(${args[1]}\\right)\\right)")},matrix:{0:"\\begin{bmatrix}\\end{bmatrix}",1:"\\left(${args[0]}\\right)",2:"\\left(${args[0]}\\right)"},sparse:{0:"\\begin{bsparse}\\end{bsparse}",1:"\\left(${args[0]}\\right)"},unit:{1:"\\left(${args[0]}\\right)",2:"\\left(\\left(${args[0]}\\right)${args[1]}\\right)"}};exports.latexFunctions=latexFunctions;exports.defaultTemplate="\\mathrm{${name}}\\left(${args}\\right)";var latexUnits={deg:"^\\circ"};function escapeLatex(string){return(0,_escapeLatex.default)(string,{preserveFormatting:!0})}},{"./object":938,"escape-latex":56}],935:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.warnOnce=void 0;var messages,warnOnce=(messages={},function(){for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];var _console,message=args.join(", ");messages[message]||(messages[message]=!0,(_console=console).warn.apply(_console,["Warning:"].concat(args)))});exports.warnOnce=warnOnce},{}],936:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.noBignumber=function(){throw new Error('No "bignumber" implementation available')},exports.noFraction=function(){throw new Error('No "fraction" implementation available')},exports.noMatrix=function(){throw new Error('No "matrix" implementation available')},exports.noIndex=function(){throw new Error('No "index" implementation available')},exports.noSubset=function(){throw new Error('No "matrix" implementation available')}},{}],937:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.isInteger=function(value){return"boolean"==typeof value||!!isFinite(value)&&value===Math.round(value)},exports.format=function(value,options){if("function"==typeof options)return options(value);{if(value===1/0)return"Infinity";if(value===-1/0)return"-Infinity";if(isNaN(value))return"NaN"}var precision,notation="auto";options&&(options.notation&&(notation=options.notation),(0,_is.isNumber)(options)?precision=options:(0,_is.isNumber)(options.precision)&&(precision=options.precision));switch(notation){case"fixed":return toFixed(value,precision);case"exponential":return toExponential(value,precision);case"engineering":return toEngineering(value,precision);case"auto":if(!options||!options.exponential||void 0===options.exponential.lower&&void 0===options.exponential.upper)return toPrecision(value,precision,options&&options).replace(/((\.\d*?)(0+))($|e)/,function(){var digits=arguments[2],e=arguments[4];return"."!==digits?digits+e:e});var fixedOptions=(0,_object.mapObject)(options,function(x){return x});return(fixedOptions.exponential=void 0)!==options.exponential.lower&&(fixedOptions.lowerExp=Math.round(Math.log(options.exponential.lower)/Math.LN10)),void 0!==options.exponential.upper&&(fixedOptions.upperExp=Math.round(Math.log(options.exponential.upper)/Math.LN10)),console.warn("Deprecation warning: Formatting options exponential.lower and exponential.upper (minimum and maximum value) are replaced with exponential.lowerExp and exponential.upperExp (minimum and maximum exponent) since version 4.0.0. Replace "+JSON.stringify(options)+" with "+JSON.stringify(fixedOptions)),toPrecision(value,precision,fixedOptions);default:throw new Error('Unknown notation "'+notation+'". Choose "auto", "exponential", or "fixed".')}},exports.splitNumber=splitNumber,exports.toEngineering=toEngineering,exports.toFixed=toFixed,exports.toExponential=toExponential,exports.toPrecision=toPrecision,exports.roundDigits=roundDigits,exports.digits=function(value){return value.toExponential().replace(/e.*$/,"").replace(/^0\.?0*|\./,"").length},exports.nearlyEqual=function(x,y,epsilon){if(null==epsilon)return x===y;if(x===y)return!0;if(isNaN(x)||isNaN(y))return!1;if(isFinite(x)&&isFinite(y)){var diff=Math.abs(x-y);return diffc.length||e-newExp+1>c.length;)c.push(0);else for(var missingZeros=Math.abs(e-newExp)-(c.length-1),i=0;i=upperExp)return toExponential(value,precision);var c=rounded.coefficients,e=rounded.exponent;c.lengthprecision&&5<=c.splice(precision,c.length-precision)[0]){var i=precision-1;for(c[i]++;10===c[i];)c.pop(),0===i&&(c.unshift(0),rounded.exponent++,i++),c[--i]++}return rounded}function zeros(length){for(var arr=[],i=0;i>1;return product(i,half)*product(1+half,n)}},{}],941:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.endsWith=function(text,search){var start=text.length-search.length,end=text.length;return text.substring(start,end)===search},exports.format=format,exports.stringify=function(value){var text=String(value),escaped="",i=0;for(;i/g,">")},exports.compareText=function(x,y){if(!(0,_is.isString)(x))throw new TypeError("Unexpected type of argument in function compareText (expected: string or Array or Matrix, actual: "+(0,_is.typeOf)(x)+", index: 0)");if((0,_is.isString)(y))return x===y?0:y>>=1;return(n+x)/d}},module.exports.resetGlobal=function(){Math.random=oldRandom},mixkey(Math.random(),pool)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],945:[function(require,module,exports){function E(){}E.prototype={on:function(name,callback,ctx){var e=this.e||(this.e={});return(e[name]||(e[name]=[])).push({fn:callback,ctx:ctx}),this},once:function(name,callback,ctx){var self=this;function listener(){self.off(name,listener),callback.apply(ctx,arguments)}return listener._=callback,this.on(name,listener,ctx)},emit:function(name){for(var data=[].slice.call(arguments,1),evtArr=((this.e||(this.e={}))[name]||[]).slice(),i=0,len=evtArr.length;i=varIndex+1}}return 0===params.length?function(args){return 0===args.length}:1===params.length?(test0=compileTest(params[0]),function(args){return test0(args[0])&&1===args.length}):2===params.length?(test0=compileTest(params[0]),test1=compileTest(params[1]),function(args){return test0(args[0])&&test1(args[1])&&2===args.length}):(tests=params.map(compileTest),function(args){for(var i=0;imaxLength?(err=new TypeError("Too many arguments in function "+_name+" (expected: "+maxLength+", actual: "+args.length+")")).data={category:"tooManyArgs",fn:_name,index:args.length,expectedLength:maxLength}:(err=new TypeError('Arguments of type "'+args.join(", ")+'" do not match any of the defined signatures of function '+_name+".")).data={category:"mismatch",actual:args.map(findTypeName)},err}(name,arguments,signatures)},fn=function(arg0,arg1){return arguments.length===len0&&test00(arg0)&&test01(arg1)?fn0.apply(null,arguments):arguments.length===len1&&test10(arg0)&&test11(arg1)?fn1.apply(null,arguments):arguments.length===len2&&test20(arg0)&&test21(arg1)?fn2.apply(null,arguments):arguments.length===len3&&test30(arg0)&&test31(arg1)?fn3.apply(null,arguments):arguments.length===len4&&test40(arg0)&&test41(arg1)?fn4.apply(null,arguments):arguments.length===len5&&test50(arg0)&&test51(arg1)?fn5.apply(null,arguments):generic.apply(null,arguments)};try{Object.defineProperty(fn,"name",{value:name})}catch(err){}return fn.signatures=function(signatures){var signaturesMap={};return signatures.forEach(function(signature){signature.params.some(hasConversions)||splitParams(signature.params,!0).forEach(function(params){signaturesMap[stringifyParams(params)]=signature.fn})}),signaturesMap}(signatures),fn}function notIgnore(typeName){return-1===typed.ignore.indexOf(typeName)}function trim(str){return str.trim()}function notEmpty(str){return!!str}function notNull(value){return null!==value}function isInvalidParam(param){return 0===param.types.length}function last(arr){return arr[arr.length-1]}function slice(arr,start,end){return Array.prototype.slice.call(arr,start,end)}function findInArray(arr,test){for(var i=0;i\x03\x02\x02","\x02\xca\xcb\x07g\x02\x02\xcb\xcc\x07z\x02\x02","\xcc\xcd\x07r\x02\x02\xcd@\x03\x02\x02\x02\xce","\xcf\x07n\x02\x02\xcf\xd0\x07p\x02\x02\xd0B\x03","\x02\x02\x02\xd1\xd2\x07u\x02\x02\xd2\xd3\x07","s\x02\x02\xd3\xd4\x07t\x02\x02\xd4\xd5\x07v\x02","\x02\xd5D\x03\x02\x02\x02\xd6\xd7\x07r\x02\x02","\xd7\xd8\x07k\x02\x02\xd8F\x03\x02\x02\x02\xd9","\xda\x05I%\x02\xda\xdb\x05K&\x02\xdb\xe1\x03\x02","\x02\x02\xdc\xdd\x05M'\x02\xdd\xde\x05K&\x02\xde","\xe1\x03\x02\x02\x02\xdf\xe1\x05I%\x02\xe0\xd9","\x03\x02\x02\x02\xe0\xdc\x03\x02\x02\x02\xe0\xdf","\x03\x02\x02\x02\xe1H\x03\x02\x02\x02\xe2\xe3","\x05M'\x02\xe3\xe5\x070\x02\x02\xe4\xe6\t\x02\x02","\x02\xe5\xe4\x03\x02\x02\x02\xe6\xe7\x03\x02\x02","\x02\xe7\xe5\x03\x02\x02\x02\xe7\xe8\x03\x02\x02","\x02\xe8J\x03\x02\x02\x02\xe9\xea\t\x03\x02\x02","\xea\xec\t\x04\x02\x02\xeb\xed\t\x02\x02\x02\xec","\xeb\x03\x02\x02\x02\xed\xee\x03\x02\x02\x02\xee","\xec\x03\x02\x02\x02\xee\xef\x03\x02\x02\x02\xef","L\x03\x02\x02\x02\xf0\xf2\t\x02\x02\x02\xf1\xf0","\x03\x02\x02\x02\xf2\xf3\x03\x02\x02\x02\xf3\xf1","\x03\x02\x02\x02\xf3\xf4\x03\x02\x02\x02\xf4N","\x03\x02\x02\x02\xf5\xf9\t\x05\x02\x02\xf6\xf8","\t\x06\x02\x02\xf7\xf6\x03\x02\x02\x02\xf8\xfb","\x03\x02\x02\x02\xf9\xf7\x03\x02\x02\x02\xf9\xfa","\x03\x02\x02\x02\xfaP\x03\x02\x02\x02\xfb\xf9","\x03\x02\x02\x02\xfc\xfe\t\x07\x02\x02\xfd\xfc","\x03\x02\x02\x02\xfe\xff\x03\x02\x02\x02\xff\xfd","\x03\x02\x02\x02\xff\u0100\x03\x02\x02\x02\u0100\u0101","\x03\x02\x02\x02\u0101\u0102\b)\x02\x02\u0102R\x03\x02","\x02\x02\u0103\u0105\x07$\x02\x02\u0104\u0106\t\b\x02\x02","\u0105\u0104\x03\x02\x02\x02\u0106\u0107\x03\x02\x02\x02","\u0107\u0105\x03\x02\x02\x02\u0107\u0108\x03\x02\x02\x02","\u0108\u0109\x03\x02\x02\x02\u0109\u010a\x07$\x02\x02","\u010aT\x03\x02\x02\x02\u010b\u010c\x071\x02\x02\u010c","\u010d\x07,\x02\x02\u010d\u0111\x03\x02\x02\x02\u010e","\u0110\v\x02\x02\x02\u010f\u010e\x03\x02\x02\x02\u0110","\u0113\x03\x02\x02\x02\u0111\u0112\x03\x02\x02\x02\u0111","\u010f\x03\x02\x02\x02\u0112\u0114\x03\x02\x02\x02\u0113","\u0111\x03\x02\x02\x02\u0114\u0115\x07,\x02\x02\u0115","\u0116\x071\x02\x02\u0116\u0117\x03\x02\x02\x02\u0117","\u0118\b+\x02\x02\u0118V\x03\x02\x02\x02\u0119\u011a\x07","1\x02\x02\u011a\u011b\x071\x02\x02\u011b\u011f\x03\x02","\x02\x02\u011c\u011e\n\t\x02\x02\u011d\u011c\x03\x02\x02","\x02\u011e\u0121\x03\x02\x02\x02\u011f\u011d\x03\x02\x02","\x02\u011f\u0120\x03\x02\x02\x02\u0120\u0122\x03\x02\x02","\x02\u0121\u011f\x03\x02\x02\x02\u0122\u0123\b,\x02\x02","\u0123X\x03\x02\x02\x02\f\x02\xe0\xe7\xee\xf3\xf9","\xff\u0107\u0111\u011f\x03\b\x02\x02"].join(""),atn=(new antlr4.atn.ATNDeserializer).deserialize(serializedATN),decisionsToDFA=atn.decisionToState.map(function(ds,index){return new antlr4.dfa.DFA(ds,index)});function QASMLexer(input){return antlr4.Lexer.call(this,input),this._interp=new antlr4.atn.LexerATNSimulator(this,atn,decisionsToDFA,new antlr4.PredictionContextCache),this}(QASMLexer.prototype=Object.create(antlr4.Lexer.prototype)).constructor=QASMLexer,Object.defineProperty(QASMLexer.prototype,"atn",{get:function(){return atn}}),QASMLexer.EOF=antlr4.Token.EOF,QASMLexer.T__0=1,QASMLexer.T__1=2,QASMLexer.T__2=3,QASMLexer.T__3=4,QASMLexer.T__4=5,QASMLexer.T__5=6,QASMLexer.T__6=7,QASMLexer.T__7=8,QASMLexer.T__8=9,QASMLexer.T__9=10,QASMLexer.T__10=11,QASMLexer.T__11=12,QASMLexer.T__12=13,QASMLexer.T__13=14,QASMLexer.T__14=15,QASMLexer.T__15=16,QASMLexer.T__16=17,QASMLexer.T__17=18,QASMLexer.T__18=19,QASMLexer.T__19=20,QASMLexer.T__20=21,QASMLexer.T__21=22,QASMLexer.T__22=23,QASMLexer.T__23=24,QASMLexer.T__24=25,QASMLexer.T__25=26,QASMLexer.T__26=27,QASMLexer.T__27=28,QASMLexer.T__28=29,QASMLexer.T__29=30,QASMLexer.T__30=31,QASMLexer.T__31=32,QASMLexer.T__32=33,QASMLexer.PI=34,QASMLexer.REAL=35,QASMLexer.SUBREAL=36,QASMLexer.EXPREAL=37,QASMLexer.INT=38,QASMLexer.ID=39,QASMLexer.WS=40,QASMLexer.FILENAME=41,QASMLexer.COMMENT=42,QASMLexer.LINE_COMMENT=43,QASMLexer.prototype.channelNames=["DEFAULT_TOKEN_CHANNEL","HIDDEN"],QASMLexer.prototype.modeNames=["DEFAULT_MODE"],QASMLexer.prototype.literalNames=[null,"'}'","'opaque'","';'","'('","')'","'if'","'=='","'barrier'","'OPENQASM'","'include'","'qreg'","'['","']'","'creg'","'gate'","'{'","'measure'","'->'","'reset'","'U'","'CX'","','","'^'","'*'","'/'","'+'","'-'","'sin'","'cos'","'tan'","'exp'","'ln'","'sqrt'","'pi'"],QASMLexer.prototype.symbolicNames=[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"PI","REAL","SUBREAL","EXPREAL","INT","ID","WS","FILENAME","COMMENT","LINE_COMMENT"],QASMLexer.prototype.ruleNames=["T__0","T__1","T__2","T__3","T__4","T__5","T__6","T__7","T__8","T__9","T__10","T__11","T__12","T__13","T__14","T__15","T__16","T__17","T__18","T__19","T__20","T__21","T__22","T__23","T__24","T__25","T__26","T__27","T__28","T__29","T__30","T__31","T__32","PI","REAL","SUBREAL","EXPREAL","INT","ID","WS","FILENAME","COMMENT","LINE_COMMENT"],QASMLexer.prototype.grammarFileName="QASM.g4",exports.QASMLexer=QASMLexer},{"antlr4/index":47}],3:[function(require,module,exports){var antlr4=require("antlr4/index");function QASMListener(){return antlr4.tree.ParseTreeListener.call(this),this}((QASMListener.prototype=Object.create(antlr4.tree.ParseTreeListener.prototype)).constructor=QASMListener).prototype.enterMainprog=function(ctx){},QASMListener.prototype.exitMainprog=function(ctx){},QASMListener.prototype.enterStatement=function(ctx){},QASMListener.prototype.exitStatement=function(ctx){},QASMListener.prototype.enterVersion=function(ctx){},QASMListener.prototype.exitVersion=function(ctx){},QASMListener.prototype.enterInclude=function(ctx){},QASMListener.prototype.exitInclude=function(ctx){},QASMListener.prototype.enterFilename=function(ctx){},QASMListener.prototype.exitFilename=function(ctx){},QASMListener.prototype.enterDecl=function(ctx){},QASMListener.prototype.exitDecl=function(ctx){},QASMListener.prototype.enterGatedecl=function(ctx){},QASMListener.prototype.exitGatedecl=function(ctx){},QASMListener.prototype.enterGoplist=function(ctx){},QASMListener.prototype.exitGoplist=function(ctx){},QASMListener.prototype.enterQop=function(ctx){},QASMListener.prototype.exitQop=function(ctx){},QASMListener.prototype.enterUop=function(ctx){},QASMListener.prototype.exitUop=function(ctx){},QASMListener.prototype.enterAnylist=function(ctx){},QASMListener.prototype.exitAnylist=function(ctx){},QASMListener.prototype.enterIdlist=function(ctx){},QASMListener.prototype.exitIdlist=function(ctx){},QASMListener.prototype.enterMixedlist=function(ctx){},QASMListener.prototype.exitMixedlist=function(ctx){},QASMListener.prototype.enterArgument=function(ctx){},QASMListener.prototype.exitArgument=function(ctx){},QASMListener.prototype.enterExplist=function(ctx){},QASMListener.prototype.exitExplist=function(ctx){},QASMListener.prototype.enterExp=function(ctx){},QASMListener.prototype.exitExp=function(ctx){},QASMListener.prototype.enterAtom=function(ctx){},QASMListener.prototype.exitAtom=function(ctx){},QASMListener.prototype.enterUnaryop=function(ctx){},QASMListener.prototype.exitUnaryop=function(ctx){},exports.QASMListener=QASMListener},{"antlr4/index":47}],4:[function(require,module,exports){var antlr4=require("antlr4/index"),QASMListener=require("./QASMListener").QASMListener,serializedATN=["\x03\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964","\x03-\u0130\x04\x02\t\x02\x04\x03\t\x03\x04\x04\t","\x04\x04\x05\t\x05\x04\x06\t\x06\x04\x07\t\x07\x04","\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f\t\f\x04","\r\t\r\x04\x0e\t\x0e\x04\x0f\t\x0f\x04\x10\t\x10\x04","\x11\t\x11\x04\x12\t\x12\x04\x13\t\x13\x03\x02\x03","\x02\x07\x02)\n\x02\f\x02\x0e\x02,\v\x02\x03\x03","\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03","\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03","\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03","\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03","\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03","\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03","\x03\x03\x03\x03\x03\x03\x03\x03\x05\x03W\n\x03","\x03\x04\x03\x04\x03\x04\x03\x04\x03\x05\x03\x05","\x03\x05\x03\x05\x03\x06\x03\x06\x03\x07\x03\x07","\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07","\x03\x07\x03\x07\x03\x07\x03\x07\x05\x07o\n\x07","\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03","\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03","\b\x03\b\x03\b\x05\b\x85\n\b\x03\t\x03\t\x03\t\x03\t","\x03\t\x06\t\x8c\n\t\r\t\x0e\t\x8d\x03\n\x03\n\x03\n","\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x05","\n\x9b\n\n\x03\v\x03\v\x03\v\x03\v\x03\v","\x03\v\x03\v\x03\v\x03\v\x03\v\x03\v","\x03\v\x03\v\x03\v\x03\v\x03\v\x03\v","\x03\v\x03\v\x03\v\x03\v\x03\v\x03\v","\x03\v\x03\v\x03\v\x03\v\x03\v\x03\v","\x03\v\x05\v\xbb\n\v\x03\f\x03\f\x05\f\xbf","\n\f\x03\r\x03\r\x07\r\xc3\n\r\f\r\x0e\r\xc6\v\r\x03","\r\x03\r\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e","\x07\x0e\xcf\n\x0e\f\x0e\x0e\x0e\xd2\v\x0e\x03","\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x07","\x0e\xda\n\x0e\f\x0e\x0e\x0e\xdd\v\x0e\x03\x0e","\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x07\x0e","\xe5\n\x0e\f\x0e\x0e\x0e\xe8\v\x0e\x03\x0e\x03","\x0e\x07\x0e\xec\n\x0e\f\x0e\x0e\x0e\xef\v\x0e","\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x05\x0e\xf5\n","\x0e\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x05","\x0f\xfc\n\x0f\x03\x10\x03\x10\x03\x10\x07\x10","\u0101\n\x10\f\x10\x0e\x10\u0104\v\x10\x03\x10\x03","\x10\x03\x11\x03\x11\x05\x11\u010a\n\x11\x03\x11","\x03\x11\x03\x11\x03\x11\x03\x11\x05\x11\u0111\n","\x11\x03\x11\x03\x11\x03\x11\x03\x11\x03\x11\x03","\x11\x05\x11\u0119\n\x11\x03\x11\x05\x11\u011c\n\x11","\x03\x11\x03\x11\x03\x11\x03\x11\x03\x11\x03\x11","\x03\x11\x03\x11\x03\x11\x07\x11\u0127\n\x11\f\x11","\x0e\x11\u012a\v\x11\x03\x12\x03\x12\x03\x13\x03","\x13\x03\x13\x02\x03 \x14\x02\x04\x06\b\n\f\x0e",'\x10\x12\x14\x16\x18\x1a\x1c\x1e "$\x02\x06\x03',"\x02\x1c\x1d\x03\x02\x1a\x1b\x04\x02$%()\x03\x02","\x1e#\x02\u0144\x02&\x03\x02\x02\x02\x04V\x03\x02","\x02\x02\x06X\x03\x02\x02\x02\b\\\x03\x02\x02\x02","\n`\x03\x02\x02\x02\fn\x03\x02\x02\x02\x0e\x84\x03","\x02\x02\x02\x10\x8b\x03\x02\x02\x02\x12\x9a\x03","\x02\x02\x02\x14\xba\x03\x02\x02\x02\x16\xbe\x03","\x02\x02\x02\x18\xc4\x03\x02\x02\x02\x1a\xf4\x03","\x02\x02\x02\x1c\xfb\x03\x02\x02\x02\x1e\u0102\x03",'\x02\x02\x02 \u011b\x03\x02\x02\x02"\u012b\x03\x02',"\x02\x02$\u012d\x03\x02\x02\x02&*\x05\x06\x04\x02","')\x05\x04\x03\x02('\x03\x02\x02\x02),\x03\x02","\x02\x02*(\x03\x02\x02\x02*+\x03\x02\x02\x02+\x03","\x03\x02\x02\x02,*\x03\x02\x02\x02-W\x05\f\x07\x02","./\x05\x0e\b\x02/0\x05\x10\t\x0201\x07\x03\x02\x02","1W\x03\x02\x02\x0223\x05\x0e\b\x0234\x07\x03\x02","\x024W\x03\x02\x02\x0256\x07\x04\x02\x0267\x07)","\x02\x0278\x05\x18\r\x0289\x07\x05\x02\x029W\x03","\x02\x02\x02:;\x07\x04\x02\x02;<\x07)\x02\x02<=","\x07\x06\x02\x02=>\x07\x07\x02\x02>?\x05\x18\r\x02","?@\x07\x05\x02\x02@W\x03\x02\x02\x02AB\x07\x04\x02","\x02BC\x07)\x02\x02CD\x07\x06\x02\x02DE\x05\x18","\r\x02EF\x07\x07\x02\x02FG\x05\x18\r\x02GH\x07\x05","\x02\x02HW\x03\x02\x02\x02IW\x05\x12\n\x02JK\x07","\b\x02\x02KL\x07\x06\x02\x02LM\x07)\x02\x02MN\x07","\t\x02\x02NO\x07(\x02\x02OP\x07\x07\x02\x02PW\x05","\x12\n\x02QR\x07\n\x02\x02RS\x05\x16\f\x02ST\x07\x05","\x02\x02TW\x03\x02\x02\x02UW\x05\b\x05\x02V-\x03","\x02\x02\x02V.\x03\x02\x02\x02V2\x03\x02\x02\x02","V5\x03\x02\x02\x02V:\x03\x02\x02\x02VA\x03\x02\x02","\x02VI\x03\x02\x02\x02VJ\x03\x02\x02\x02VQ\x03\x02","\x02\x02VU\x03\x02\x02\x02W\x05\x03\x02\x02\x02","XY\x07\v\x02\x02YZ\x07%\x02\x02Z[\x07\x05\x02","\x02[\x07\x03\x02\x02\x02\\]\x07\f\x02\x02]^\x05","\n\x06\x02^_\x07\x05\x02\x02_\t\x03\x02\x02\x02","`a\x07+\x02\x02a\v\x03\x02\x02\x02bc\x07\r\x02","\x02cd\x07)\x02\x02de\x07\x0e\x02\x02ef\x07(\x02","\x02fg\x07\x0f\x02\x02go\x07\x05\x02\x02hi\x07\x10","\x02\x02ij\x07)\x02\x02jk\x07\x0e\x02\x02kl\x07","(\x02\x02lm\x07\x0f\x02\x02mo\x07\x05\x02\x02nb","\x03\x02\x02\x02nh\x03\x02\x02\x02o\r\x03\x02\x02","\x02pq\x07\x11\x02\x02qr\x07)\x02\x02rs\x05\x18","\r\x02st\x07\x12\x02\x02t\x85\x03\x02\x02\x02uv","\x07\x11\x02\x02vw\x07)\x02\x02wx\x07\x06\x02\x02","xy\x07\x07\x02\x02yz\x05\x18\r\x02z{\x07\x12\x02","\x02{\x85\x03\x02\x02\x02|}\x07\x11\x02\x02}~\x07",")\x02\x02~\x7f\x07\x06\x02\x02\x7f\x80\x05\x18","\r\x02\x80\x81\x07\x07\x02\x02\x81\x82\x05\x18","\r\x02\x82\x83\x07\x12\x02\x02\x83\x85\x03\x02","\x02\x02\x84p\x03\x02\x02\x02\x84u\x03\x02\x02","\x02\x84|\x03\x02\x02\x02\x85\x0f\x03\x02\x02","\x02\x86\x8c\x05\x14\v\x02\x87\x88\x07\n\x02","\x02\x88\x89\x05\x18\r\x02\x89\x8a\x07\x05\x02","\x02\x8a\x8c\x03\x02\x02\x02\x8b\x86\x03\x02\x02","\x02\x8b\x87\x03\x02\x02\x02\x8c\x8d\x03\x02\x02","\x02\x8d\x8b\x03\x02\x02\x02\x8d\x8e\x03\x02\x02","\x02\x8e\x11\x03\x02\x02\x02\x8f\x9b\x05\x14\v","\x02\x90\x91\x07\x13\x02\x02\x91\x92\x05\x1c\x0f","\x02\x92\x93\x07\x14\x02\x02\x93\x94\x05\x1c\x0f","\x02\x94\x95\x07\x05\x02\x02\x95\x9b\x03\x02\x02","\x02\x96\x97\x07\x15\x02\x02\x97\x98\x05\x1c\x0f","\x02\x98\x99\x07\x05\x02\x02\x99\x9b\x03\x02\x02","\x02\x9a\x8f\x03\x02\x02\x02\x9a\x90\x03\x02\x02","\x02\x9a\x96\x03\x02\x02\x02\x9b\x13\x03\x02\x02","\x02\x9c\x9d\x07\x16\x02\x02\x9d\x9e\x07\x06\x02","\x02\x9e\x9f\x05\x1e\x10\x02\x9f\xa0\x07\x07\x02","\x02\xa0\xa1\x05\x1c\x0f\x02\xa1\xa2\x07\x05\x02","\x02\xa2\xbb\x03\x02\x02\x02\xa3\xa4\x07\x17\x02","\x02\xa4\xa5\x05\x1c\x0f\x02\xa5\xa6\x07\x18\x02","\x02\xa6\xa7\x05\x1c\x0f\x02\xa7\xa8\x07\x05\x02","\x02\xa8\xbb\x03\x02\x02\x02\xa9\xaa\x07)\x02","\x02\xaa\xab\x05\x16\f\x02\xab\xac\x07\x05\x02","\x02\xac\xbb\x03\x02\x02\x02\xad\xae\x07)\x02","\x02\xae\xaf\x07\x06\x02\x02\xaf\xb0\x07\x07\x02","\x02\xb0\xb1\x05\x16\f\x02\xb1\xb2\x07\x05\x02","\x02\xb2\xbb\x03\x02\x02\x02\xb3\xb4\x07)\x02","\x02\xb4\xb5\x07\x06\x02\x02\xb5\xb6\x05\x1e\x10","\x02\xb6\xb7\x07\x07\x02\x02\xb7\xb8\x05\x16\f","\x02\xb8\xb9\x07\x05\x02\x02\xb9\xbb\x03\x02\x02","\x02\xba\x9c\x03\x02\x02\x02\xba\xa3\x03\x02\x02","\x02\xba\xa9\x03\x02\x02\x02\xba\xad\x03\x02\x02","\x02\xba\xb3\x03\x02\x02\x02\xbb\x15\x03\x02\x02","\x02\xbc\xbf\x05\x18\r\x02\xbd\xbf\x05\x1a\x0e","\x02\xbe\xbc\x03\x02\x02\x02\xbe\xbd\x03\x02\x02","\x02\xbf\x17\x03\x02\x02\x02\xc0\xc1\x07)\x02","\x02\xc1\xc3\x07\x18\x02\x02\xc2\xc0\x03\x02\x02","\x02\xc3\xc6\x03\x02\x02\x02\xc4\xc2\x03\x02\x02","\x02\xc4\xc5\x03\x02\x02\x02\xc5\xc7\x03\x02\x02","\x02\xc6\xc4\x03\x02\x02\x02\xc7\xc8\x07)\x02","\x02\xc8\x19\x03\x02\x02\x02\xc9\xca\x07)\x02","\x02\xca\xcb\x07\x0e\x02\x02\xcb\xcc\x07(\x02","\x02\xcc\xcd\x07\x0f\x02\x02\xcd\xcf\x07\x18\x02","\x02\xce\xc9\x03\x02\x02\x02\xcf\xd2\x03\x02\x02","\x02\xd0\xce\x03\x02\x02\x02\xd0\xd1\x03\x02\x02","\x02\xd1\xd3\x03\x02\x02\x02\xd2\xd0\x03\x02\x02","\x02\xd3\xf5\x07)\x02\x02\xd4\xd5\x07)\x02\x02","\xd5\xd6\x07\x0e\x02\x02\xd6\xd7\x07(\x02\x02","\xd7\xd8\x07\x0f\x02\x02\xd8\xda\x07\x18\x02\x02","\xd9\xd4\x03\x02\x02\x02\xda\xdd\x03\x02\x02\x02","\xdb\xd9\x03\x02\x02\x02\xdb\xdc\x03\x02\x02\x02","\xdc\xde\x03\x02\x02\x02\xdd\xdb\x03\x02\x02\x02","\xde\xdf\x07)\x02\x02\xdf\xe0\x07\x0e\x02\x02","\xe0\xe1\x07(\x02\x02\xe1\xf5\x07\x0f\x02\x02","\xe2\xe3\x07)\x02\x02\xe3\xe5\x07\x18\x02\x02","\xe4\xe2\x03\x02\x02\x02\xe5\xe8\x03\x02\x02\x02","\xe6\xe4\x03\x02\x02\x02\xe6\xe7\x03\x02\x02\x02","\xe7\xe9\x03\x02\x02\x02\xe8\xe6\x03\x02\x02\x02","\xe9\xea\x07)\x02\x02\xea\xec\x07\x18\x02\x02","\xeb\xe6\x03\x02\x02\x02\xec\xef\x03\x02\x02\x02","\xed\xeb\x03\x02\x02\x02\xed\xee\x03\x02\x02\x02","\xee\xf0\x03\x02\x02\x02\xef\xed\x03\x02\x02\x02","\xf0\xf1\x07)\x02\x02\xf1\xf2\x07\x0e\x02\x02","\xf2\xf3\x07(\x02\x02\xf3\xf5\x07\x0f\x02\x02","\xf4\xd0\x03\x02\x02\x02\xf4\xdb\x03\x02\x02\x02","\xf4\xed\x03\x02\x02\x02\xf5\x1b\x03\x02\x02\x02","\xf6\xfc\x07)\x02\x02\xf7\xf8\x07)\x02\x02\xf8","\xf9\x07\x0e\x02\x02\xf9\xfa\x07(\x02\x02\xfa","\xfc\x07\x0f\x02\x02\xfb\xf6\x03\x02\x02\x02\xfb","\xf7\x03\x02\x02\x02\xfc\x1d\x03\x02\x02\x02\xfd","\xfe\x05 \x11\x02\xfe\xff\x07\x18\x02\x02\xff","\u0101\x03\x02\x02\x02\u0100\xfd\x03\x02\x02\x02\u0101","\u0104\x03\x02\x02\x02\u0102\u0100\x03\x02\x02\x02\u0102","\u0103\x03\x02\x02\x02\u0103\u0105\x03\x02\x02\x02\u0104","\u0102\x03\x02\x02\x02\u0105\u0106\x05 \x11\x02\u0106","\x1f\x03\x02\x02\x02\u0107\u0109\b\x11\x01\x02\u0108","\u010a\t\x02\x02\x02\u0109\u0108\x03\x02\x02\x02\u0109","\u010a\x03\x02\x02\x02\u010a\u010b\x03\x02\x02\x02\u010b","\u010c\x07\x06\x02\x02\u010c\u010d\x05 \x11\x02\u010d","\u010e\x07\x07\x02\x02\u010e\u011c\x03\x02\x02\x02\u010f","\u0111\t\x02\x02\x02\u0110\u010f\x03\x02\x02\x02\u0110","\u0111\x03\x02\x02\x02\u0111\u0112\x03\x02\x02\x02\u0112","\u0113\x05$\x13\x02\u0113\u0114\x07\x06\x02\x02\u0114","\u0115\x05 \x11\x02\u0115\u0116\x07\x07\x02\x02\u0116","\u011c\x03\x02\x02\x02\u0117\u0119\t\x02\x02\x02\u0118","\u0117\x03\x02\x02\x02\u0118\u0119\x03\x02\x02\x02\u0119",'\u011a\x03\x02\x02\x02\u011a\u011c\x05"\x12\x02\u011b',"\u0107\x03\x02\x02\x02\u011b\u0110\x03\x02\x02\x02\u011b","\u0118\x03\x02\x02\x02\u011c\u0128\x03\x02\x02\x02\u011d","\u011e\f\b\x02\x02\u011e\u011f\x07\x19\x02\x02\u011f\u0127","\x05 \x11\t\u0120\u0121\f\x07\x02\x02\u0121\u0122\t\x03","\x02\x02\u0122\u0127\x05 \x11\b\u0123\u0124\f\x06\x02\x02","\u0124\u0125\t\x02\x02\x02\u0125\u0127\x05 \x11\x07\u0126","\u011d\x03\x02\x02\x02\u0126\u0120\x03\x02\x02\x02\u0126","\u0123\x03\x02\x02\x02\u0127\u012a\x03\x02\x02\x02\u0128","\u0126\x03\x02\x02\x02\u0128\u0129\x03\x02\x02\x02\u0129","!\x03\x02\x02\x02\u012a\u0128\x03\x02\x02\x02\u012b","\u012c\t\x04\x02\x02\u012c#\x03\x02\x02\x02\u012d\u012e","\t\x05\x02\x02\u012e%\x03\x02\x02\x02\x19*Vn\x84\x8b","\x8d\x9a\xba\xbe\xc4\xd0\xdb\xe6\xed\xf4\xfb\u0102","\u0109\u0110\u0118\u011b\u0126\u0128"].join(""),atn=(new antlr4.atn.ATNDeserializer).deserialize(serializedATN),decisionsToDFA=atn.decisionToState.map(function(ds,index){return new antlr4.dfa.DFA(ds,index)}),sharedContextCache=new antlr4.PredictionContextCache,literalNames=[null,"'}'","'opaque'","';'","'('","')'","'if'","'=='","'barrier'","'OPENQASM'","'include'","'qreg'","'['","']'","'creg'","'gate'","'{'","'measure'","'->'","'reset'","'U'","'CX'","','","'^'","'*'","'/'","'+'","'-'","'sin'","'cos'","'tan'","'exp'","'ln'","'sqrt'","'pi'"],symbolicNames=[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"PI","REAL","SUBREAL","EXPREAL","INT","ID","WS","FILENAME","COMMENT","LINE_COMMENT"],ruleNames=["mainprog","statement","version","include","filename","decl","gatedecl","goplist","qop","uop","anylist","idlist","mixedlist","argument","explist","exp","atom","unaryop"];function QASMParser(input){return antlr4.Parser.call(this,input),this._interp=new antlr4.atn.ParserATNSimulator(this,atn,decisionsToDFA,sharedContextCache),this.ruleNames=ruleNames,this.literalNames=literalNames,this.symbolicNames=symbolicNames,this}function MainprogContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_mainprog,this}function StatementContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_statement,this}function VersionContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_version,this}function IncludeContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_include,this}function FilenameContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_filename,this}function DeclContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_decl,this}function GatedeclContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_gatedecl,this}function GoplistContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_goplist,this}function QopContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_qop,this}function UopContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_uop,this}function AnylistContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_anylist,this}function IdlistContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_idlist,this}function MixedlistContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_mixedlist,this}function ArgumentContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_argument,this}function ExplistContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_explist,this}function ExpContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_exp,this}function AtomContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_atom,this}function UnaryopContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_unaryop,this}(QASMParser.prototype=Object.create(antlr4.Parser.prototype)).constructor=QASMParser,Object.defineProperty(QASMParser.prototype,"atn",{get:function(){return atn}}),QASMParser.EOF=antlr4.Token.EOF,QASMParser.T__0=1,QASMParser.T__1=2,QASMParser.T__2=3,QASMParser.T__3=4,QASMParser.T__4=5,QASMParser.T__5=6,QASMParser.T__6=7,QASMParser.T__7=8,QASMParser.T__8=9,QASMParser.T__9=10,QASMParser.T__10=11,QASMParser.T__11=12,QASMParser.T__12=13,QASMParser.T__13=14,QASMParser.T__14=15,QASMParser.T__15=16,QASMParser.T__16=17,QASMParser.T__17=18,QASMParser.T__18=19,QASMParser.T__19=20,QASMParser.T__20=21,QASMParser.T__21=22,QASMParser.T__22=23,QASMParser.T__23=24,QASMParser.T__24=25,QASMParser.T__25=26,QASMParser.T__26=27,QASMParser.T__27=28,QASMParser.T__28=29,QASMParser.T__29=30,QASMParser.T__30=31,QASMParser.T__31=32,QASMParser.T__32=33,QASMParser.PI=34,QASMParser.REAL=35,QASMParser.SUBREAL=36,QASMParser.EXPREAL=37,QASMParser.INT=38,QASMParser.ID=39,QASMParser.WS=40,QASMParser.FILENAME=41,QASMParser.COMMENT=42,QASMParser.LINE_COMMENT=43,QASMParser.RULE_mainprog=0,QASMParser.RULE_statement=1,QASMParser.RULE_version=2,QASMParser.RULE_include=3,QASMParser.RULE_filename=4,QASMParser.RULE_decl=5,QASMParser.RULE_gatedecl=6,QASMParser.RULE_goplist=7,QASMParser.RULE_qop=8,QASMParser.RULE_uop=9,QASMParser.RULE_anylist=10,QASMParser.RULE_idlist=11,QASMParser.RULE_mixedlist=12,QASMParser.RULE_argument=13,QASMParser.RULE_explist=14,QASMParser.RULE_exp=15,QASMParser.RULE_atom=16,QASMParser.RULE_unaryop=17,((MainprogContext.prototype=Object.create(antlr4.ParserRuleContext.prototype)).constructor=MainprogContext).prototype.version=function(){return this.getTypedRuleContext(VersionContext,0)},MainprogContext.prototype.statement=function(i){return void 0===i&&(i=null),null===i?this.getTypedRuleContexts(StatementContext):this.getTypedRuleContext(StatementContext,i)},MainprogContext.prototype.enterRule=function(listener){listener instanceof QASMListener&&listener.enterMainprog(this)},MainprogContext.prototype.exitRule=function(listener){listener instanceof QASMListener&&listener.exitMainprog(this)},QASMParser.MainprogContext=MainprogContext,QASMParser.prototype.mainprog=function(){var localctx=new MainprogContext(this,this._ctx,this.state);this.enterRule(localctx,0,QASMParser.RULE_mainprog);var _la=0;try{for(this.enterOuterAlt(localctx,1),this.state=36,this.version(),this.state=40,this._errHandler.sync(this),_la=this._input.LA(1);0==(-32&_la)&&0!=(1<<_la&(1<wire))return!1}return!0},QuantumCircuit.prototype.isEmptyPlace=function(col,wires,usingCregs){var mx,minWire=Math.min.apply(null,wires),maxWire=Math.max.apply(null,wires);!usingCregs||maxWire<(mx=this.numQubits-1)&&(maxWire=mx);for(var allEmpty=!0,wire=minWire;wire<=maxWire;wire++)if(!this.isEmptyCell(col,wire)){allEmpty=!1;break}return allEmpty},QuantumCircuit.prototype.lastNonEmptyPlace=function(wires,usingCregs){var mx,col=this.numCols(),allEmpty=!0,minWire=Math.min.apply(null,wires),maxWire=Math.max.apply(null,wires);for(!usingCregs||maxWire<(mx=this.numQubits-1)&&(maxWire=mx);allEmpty&&col--;)for(var wire=minWire;wire<=maxWire;wire++)if(!this.isEmptyCell(col,wire)){allEmpty=!1;break}return col},QuantumCircuit.prototype.insertColumn=function(colIndex){for(var i=0;ithis.numQubits&&(this.numQubits=wire+1);this.gates.lengththis.numQubits&&(this.numQubits=wire+1);this.gates.lengthextWire&&(newExtWire=extW)}extWire=newExtWire}}extColumn++}}}}for(var circuit=new QuantumCircuit,blockCounter=0,blockIndex=0;blockIndex=command.params.length){errorMessage='Internal error: QUIL definition for gate "'+command.name+" is invalid.";if(errorCallback)return void errorCallback([{msg:errorMessage,line:lineOffset+command.line,col:command.col}]);throw new Error(errorMessage)}params[paramName]=command.params[paramIndex]}}else{if(((gateDef=gateInfo.customGate).params||[]).length!=(command.params||[]).length){errorMessage="Invalid number of params. Expected "+(gateDef.params||[]).length+" got "+(command.params||[]).length+".";if(errorCallback)return void errorCallback([{msg:errorMessage,line:lineOffset+command.line,col:command.col}]);throw new Error(errorMessage)}for(i=0;igate.wires.length||gate.wires[0]>gate.wires[1]?circuit.transformMatrix(maxWire-minWire+1,rawMatrix,targetWires):rawMatrix).map(function(row,rowIndex){0>data.offset}}}(parseInt(inst.mask),parseInt(inst.val)))){var errorMessage="Invalid classical condition.";if(errorCallback)return void errorCallback([{msg:errorMessage}]);throw new Error(errorMessage)}conditions[inst.register]=condition;break;case"measure":for(var qIndex=0;qIndexmemory)return{name:cregName,bit:memory-totalBits};totalBits+=creg.length}return null}(inst.memory[qIndex]);if(!creg){errorMessage="Invalid measurement destination.";if(errorCallback)return void errorCallback([{msg:errorMessage}]);throw new Error(errorMessage)}var options={creg:creg};this.appendGate("measure",qubit,options)}break;case"barrier":break;default:var options={params:{},condition:{}},gateName=inst.name;switch(gateName){case"iden":gateName="id"}var condition,gateDef=this.basicGates[gateName];if(!gateDef){errorMessage='Unknown gate "'+inst.name+'".';if(errorCallback)return void errorCallback([{msg:errorMessage}]);throw new Error(errorMessage)}if(gateDef.params&&gateDef.params.length){if(!inst.params||!inst.params.length||inst.params.length!=gateDef.params.length){errorMessage='Invalid number of params for gate "'+inst.name+'".';if(errorCallback)return void errorCallback([{msg:errorMessage}]);throw new Error(errorMessage)}for(var parIndex=0;parIndex',gateLabel&&(res+=''+gateLabel+""),res}function gateCircleSVG(cellX,cellY,gateName,gateLabel,selected){var centerX=cellX+options.cellWidth/2,centerY=cellY+options.cellHeight/2,gateWidth=.8*options.cellWidth,gateHeight=.8*options.cellHeight,gateX=cellX+(options.cellWidth-gateWidth)/2,gateY=cellY+(options.cellHeight-gateHeight)/2,res="";return res+='',gateLabel&&(res+=''+gateLabel+""),res}function gateNotSVG(cellX,cellY,gateName,selected){var centerX=cellX+options.cellWidth/2,centerY=cellY+options.cellHeight/2,gateWidth=.8*options.cellWidth,gateHeight=.8*options.cellHeight,gateX=cellX+(options.cellWidth-gateWidth)/2,gateY=cellY+(options.cellHeight-gateHeight)/2,res="";return res+='',res+='',res+=''}function gateGaugeSVG(gateX,gateY,gateName,selected){var x,y,radius,startAngle,endAngle,start,end,largeArcFlag,gateWidth=options.cellWidth,gateHeight=options.cellHeight,centerX=gateX+gateWidth/2,centerY=gateY+gateHeight/2,movedown=gateHeight/5,res="";return res+='',res+='',res+=''}function gateXSVG(cellX,cellY,gateName,selected){var gateWidth=.4*options.cellWidth,gateHeight=.4*options.cellHeight,gateX=cellX+(options.cellWidth-gateWidth)/2,gateY=cellY+(options.cellHeight-gateHeight)/2,res="";return res+='',res+=''}function gateDotSVG(cellX,cellY,gateName,selected){var res="";return res+=''}function gateInvertedDotSVG(cellX,cellY,gateName,selected){var res="";return res+=''}function gateSVG(gateX,gateY,gateName,gateLabel,connector,drawBox,selected){var res="";switch("box"!=connector&&drawBox&&(res+=gateBoxSVG(gateX,gateY,0,"",selected)),connector){case"box":res+=gateBoxSVG(gateX,gateY,0,gateLabel,selected);break;case"rect":res+=function(gateX,gateY,gateLabel,selected){var gateWidth=2*options.cellWidth,gateHeight=options.cellHeight,res="";return res+='',gateLabel&&(res+=''+gateLabel+""),res}(gateX,gateY,gateLabel,selected);break;case"circle":res+=gateCircleSVG(gateX,gateY,0,gateLabel,selected);break;case"not":res+=gateNotSVG(gateX,gateY,0,selected);break;case"x":res+=gateXSVG(gateX,gateY,0,selected);break;case"dot":res+=gateDotSVG(gateX,gateY,0,selected);break;case"ndot":res+=gateInvertedDotSVG(gateX,gateY,0,selected);break;case"gauge":res+=gateGaugeSVG(gateX,gateY,0,selected)}return res}function escapeHtml(str){return str.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}if(options.gateGallery||options.gateGalleryRaw||options.customGateGallery){var gateList=[];if(options.gateGallery||options.gateGalleryRaw){var uniq=[];for(var gateName in this.basicGates){var gateLabel,connector,uniqStr,gate=this.basicGates[gateName],dinfo=JSON.parse(JSON.stringify(gate.drawingInfo||{connectors:["box"]}));dinfo.connectors&&(gateLabel=dinfo.label||gateName,connector=dinfo.connectors?dinfo.connectors[dinfo.connectors.length-1]:"box",options.gateGallery&&("x"!=connector&&"dot"!=connector||(connector="box")),uniqStr=gateLabel+"|"+connector,uniq.indexOf(uniqStr)<0&&"ccx"!=gateName&&(uniq.push(uniqStr),svg="",options.embedded||(svg+='',svg+=''),svg+='',svg+=gateSVG(0,0,0,gateLabel,connector,!!options.gateGallery,!1),svg+="",options.gateGallery?gateList.push(svg):gateList.push({name:gateName,svg:svg})))}var dotsvg="";options.embedded||(dotsvg+='',dotsvg+=''),dotsvg+='',dotsvg+=gateSVG(0,0,0,"dot","dot",!!options.gateGallery,!1),dotsvg+="",options.gateGallery?gateList.push(dotsvg):gateList.push({name:"dot",svg:dotsvg});var ndotsvg="";options.embedded||(ndotsvg+='',ndotsvg+=''),ndotsvg+='',ndotsvg+=gateSVG(0,0,0,"ndot","ndot",!!options.gateGallery,!1),ndotsvg+="",options.gateGallery?gateList.push(ndotsvg):gateList.push({name:"dot",svg:ndotsvg})}if(options.customGateGallery)for(var gateName in this.customGates){var svg="";options.embedded||(svg+='',svg+=''),svg+='',svg+=gateSVG(0,0,0,gateName,"rect",!1,!1),svg+="",gateList.push(svg)}return gateList}svg="";if(options.embedded||(svg+='',svg+=''),svg+='',options.placeholders)for(var column=0;column<=numCols;column++)for(var wire=0;wire<=this.numQubits;wire++)svg+=function(colIndex,wire){var svg="",gateWidth=options.cellWidth+options.hSpacing,gateHeight=options.cellHeight+options.vSpacing,gateX=getCellX(colIndex)-options.hSpacing,gateY=getCellY(wire)-options.vSpacing;return wire==numRows&&(gateHeight=options.vSpacing),colIndex==numCols&&(gateWidth=options.hSpacing),svg+=''}(column,wire);for(wire=0;wire|'+initSymbol+"\u27e9",svg+='',svg+='q'+wire+""}for(var cregName in this.cregs){svg+='0',svg+='',svg+=''+cregName+""}for(column=0;column',blackbox&&(gateX=getCellX(colIndex)-options.blackboxPaddingX,gateY=qGateY(topWire)-options.blackboxPaddingY,gateWidth=options.cellWidth+2*options.blackboxPaddingX,cLinkTopY=gateY+(gateHeight=qGateY(bottomWire)+options.cellHeight-gateY+options.blackboxPaddingY),svg+=''+(dinfo.label||gate.name)+"",svg+=''),selected&&(gateX=getCellX(colIndex)-options.selectionPaddingX,gateY=qGateY(topWire)-options.selectionPaddingY,gateWidth=options.cellWidth+2*options.selectionPaddingX,gateHeight=qGateY(bottomWire)+options.cellHeight-gateY+options.selectionPaddingY,cLinkTopY=gateY+gateHeight,svg+=''),topWire==bottomWire||blackbox||(linkX=getCellX(colIndex)+options.cellWidth/2,linkY1=getCellY(topWire)+options.cellHeight/2,linkY2=getCellY(bottomWire)+options.cellHeight/2,svg+='');var linkX,linkY1,linkY2,maxWire=Math.max.apply(null,gate.wires);return gate.wires.map(function(wire,connector){switch(dinfo.connectors[connector]){case"box":var gateX=getCellX(colIndex),gateY=getCellY(wire);svg+=gateBoxSVG(gateX,gateY,gate.name,blackbox?qubitLetter(connector,numRows):dinfo.label||gate.name,selected),blackbox||wire!=bottomWire||(cLinkTopY=gateY+options.cellHeight);break;case"circle":gateX=getCellX(colIndex),gateY=getCellY(wire);svg+=gateCircleSVG(gateX,gateY,gate.name,blackbox?qubitLetter(connector,numRows):dinfo.label||gate.name,selected),blackbox||wire!=bottomWire||(gateHeight=.8*options.cellHeight,cLinkTopY=gateY+gateHeight+(options.cellHeight-gateHeight)/2);break;case"not":var gateHeight,cellX=getCellX(colIndex),cellY=getCellY(wire);svg+=gateNotSVG(cellX,cellY,gate.name,selected),blackbox||wire!=bottomWire||(gateHeight=.8*options.cellHeight,cLinkTopY=cellY+gateHeight+(options.cellHeight-gateHeight)/2);break;case"x":cellX=getCellX(colIndex),cellY=getCellY(wire);svg+=gateXSVG(cellX,cellY,gate.name,selected),blackbox||wire!=bottomWire||(cLinkTopY=qWireY(bottomWire));break;case"dot":cellX=getCellX(colIndex),cellY=getCellY(wire);svg+=gateDotSVG(cellX,cellY,gate.name,selected),blackbox||wire!=bottomWire||(cLinkTopY=qWireY(bottomWire)+options.dotRadius);break;case"ndot":cellX=getCellX(colIndex),cellY=getCellY(wire);svg+=gateInvertedDotSVG(cellX,cellY,gate.name,selected),blackbox||wire!=bottomWire||(cLinkTopY=qWireY(bottomWire)+options.dotRadius);break;case"gauge":gateX=getCellX(colIndex),gateY=getCellY(wire);svg+=gateGaugeSVG(gateX,gateY,gate.name,selected),blackbox||wire!=bottomWire||(cLinkTopY=gateY+options.cellHeight)}if(gate.options&&gate.options.params&&wire==maxWire){var gateX=getCellX(colIndex),gateY=getCellY(wire),centerX=gateX+options.cellWidth/2,paramsStr="",paramsCount=0;for(var paramName in gate.options.params){paramsStr&&(paramsStr+=", ");var paramVal=gate.options.params[paramName];"string"==typeof paramVal&¶mVal.match(/^[\+\-]?\d*\.?\d+(?:[Ee][\+\-]?\d+)?$/)&&(paramVal=parseFloat(paramVal)),"number"==typeof paramVal&&(paramVal=math.round(paramVal,3)),paramsStr+=paramVal,paramsCount++}26'+paramsStr+""}}),"measure"==gate.name&&gate.options&&gate.options.creg&&gate.options.creg.name&&(linkX=getCellX(colIndex)+options.cellWidth/2,linkY1=cLinkTopY,linkY2=cWireY(gate.options.creg.name),svg+='',svg+='',svg+='',svg+=''+gate.options.creg.bit+""),gate.options&&gate.options.condition&&gate.options.condition.creg&&(linkX=getCellX(colIndex)+options.cellWidth/2,linkY1=cLinkTopY,linkY2=cWireY(gate.options.condition.creg),svg+='',svg+='',svg+='== '+gate.options.condition.value+""),svg+=""}(gate,column))}for(column=0;column'}(gate,column,wire))}if(options.drawBlochSpheres){var currentCol=totalCols-1;options.drawHybrid&&(currentCol-=2);for(wire=0;wire',svg+='',svg+='',svg+='
',svg+='',svg+="",svg+="
",svg+="
",svg+=""}(currentCol,wire,"qc-bloch-group","qc-bloch-canvas")}if(options.drawHybrid){var colIndex=currentCol=totalCols-2,gateX=getCellX(colIndex)+options.blackboxPaddingX,gateY=qGateY(0)+options.blackboxPaddingY,gateWidth=options.cellWidth-2*options.blackboxPaddingX,gateHeight=qGateY(numRows+numCregs-1)+options.cellHeight-gateY-options.blackboxPaddingY,centerX=gateX+gateWidth/2,centerY=gateY+gateHeight/2;cLinkTopY=gateY+gateHeight,svg+='',svg+='Cost';var gate2X=getCellX(colIndex+1)+options.blackboxPaddingX,center2X=gate2X+gateWidth/2;svg+='',svg+='',svg+='',svg+='Optimizer',svg+='';var hWireX=0,globalParamsInfo=this.findGlobalParams();if(globalParamsInfo.globalParams.length){hWireX=getCellX(globalParamsInfo.cells[0][0])+options.cellWidth+options.hSpacing/2;for(var i=0;i',svg+=''}svg+=''}else{svg+='',svg+='?'}}return svg+="
"},QuantumCircuit.prototype.exportToQiskit=function(options,exportAsGateName,circuitReplacement,insideSubmodule){var comment=(options=options||{}).comment,decompose=options.decompose,versionStr=options.versionStr,providerName=options.providerName,backendName=options.backendName,asJupyter=options.asJupyter,shots=options.shots,hybrid=options.hybrid,self=this,providerName=providerName||"Aer";(backendName=backendName||"")||"Aer"!=providerName||(backendName="qasm_simulator"),shots=shots||1024;var version=parseFloat(versionStr||"0.7");isNaN(version),void 0===hybrid&&(hybrid=!!this.options&&!!this.options.hybrid);var circuit=new QuantumCircuit;circuit.load(this.save(decompose));var qiskit="";comment&&(comment||"").split("\n").map(function(cline){1<=cline.length&&"#"!=cline[0]&&(qiskit+="# "),qiskit+=cline,qiskit+="\n"});function mathToStringHandler(node,options){if(node.isSymbolNode){if(0<=["pi","sin","cos","tan","asin","acos","atan"].indexOf(node.name))return"np."+node.name;if(0<=self.params.indexOf(node.name)&&hybrid)return"params["+self.params.indexOf(node.name)+"]"}}function adjustIdentation(addStr,ident){var str="",cfLines=addStr.split("\n"),minIdent=-1;cfLines.map(function(cfLine){var tmpIdent=cfLine.search(/\S/);0<=tmpIdent&&(minIdent<0||tmpIdent ",qasm+=gate.options.creg.name+"["+gate.options.creg.bit+"]"),qasm+=";\n"}}}return exportAsGateName&&(qasm+="}\n\n"),qasm},QuantumCircuit.prototype.exportToPyquil=function(options,exportAsGateName){var comment=(options=options||{}).comment,decompose=options.decompose,versionStr=options.versionStr,lattice=options.lattice,asQVM=options.asQVM,asJupyter=options.asJupyter,shots=options.shots,hybrid=options.hybrid,self=this,version=parseFloat(versionStr||"2.12");isNaN(version)&&(version=2.1),shots=shots||1024,void 0===hybrid&&(hybrid=!!this.options&&!!this.options.hybrid);var circuit=new QuantumCircuit;circuit.load(this.save(decompose));function mathToStringHandler(node,options){if(node.isSymbolNode){if(0<=["pi","sin","cos","tan","asin","acos","atan"].indexOf(node.name))return"np."+node.name;if(0<=self.params.indexOf(node.name)&&hybrid)return"params["+self.params.indexOf(node.name)+"]"}}function adjustIdentation(addStr,ident){var str="",cfLines=addStr.split("\n"),minIdent=-1;cfLines.map(function(cfLine){var tmpIdent=cfLine.search(/\S/);0<=tmpIdent&&(minIdent<0||tmpIdent')]\n",aqasm+=indent+" string_state = string_state[::-1]\n",aqasm+=indent+" counts[string_state] += 1\n\n",hybrid?(aqasm+=indent+"# CALCULATE COST HERE\n",(costFunction=this.options&&this.options.hybridOptions&&this.options.hybridOptions.costFunction&&this.options.hybridOptions.costFunction.python||"").trim()||(costFunction="cost = 0"),aqasm+=function(addStr,ident){var str="",cfLines=addStr.split("\n"),minIdent=-1;cfLines.map(function(cfLine){var tmpIdent=cfLine.search(/\S/);0<=tmpIdent&&(minIdent<0||tmpIdentusedWires.length){(combineItem={}).circuit=new QuantumCircuit(bounds.numQubits-usedWires.length),combineItem.wires=[];for(var i=0;i\t"+perc+"%\n"}}return s},QuantumCircuit.prototype.print=function(onlyPossible){console.log(this.stateAsString(onlyPossible))},QuantumCircuit.prototype.gotClassicalControl=function(){for(var column=0;columnsize;)this.cregs[creg].pop()}},QuantumCircuit.prototype.getCreg=function(creg){return this.cregs[creg]},QuantumCircuit.prototype.setCregBit=function(creg,cbit,value){var bit=parseInt(cbit);if(isNaN(bit))throw'Error: invalid "cbit" argument to "setCregBit" method: expected "integer" got "'+typeof cbit+'".';for(this.cregs[creg]||(this.cregs[creg]=[]);bit>=this.cregs[creg].length;)this.cregs[creg].push(0);this.cregs[creg][bit]=value?1:0},QuantumCircuit.prototype.getCregBit=function(creg,cbit){if(!this.cregs[creg])throw'Error: "getCregBit": unknown register "'+creg+'".';var bit=parseInt(cbit);if(isNaN(bit)||bit>=this.cregs[creg].length)throw'Error: "getCregBit": bit "'+cbit+'" not found.';return this.cregs[creg][bit]},QuantumCircuit.prototype.cregBase=function(creg){if(!this.cregs[creg])throw'Error: "getCregBit": unknown register "'+creg+'".';var base=0;for(var regName in this.cregs){if(regName==creg)return base;base+=this.cregs[regName].length}},QuantumCircuit.prototype.cregTotalBits=function(){var bits=0;for(var regName in this.cregs)bits+=this.cregs[regName].length;return bits},QuantumCircuit.prototype.getCregValue=function(creg){if(!this.cregs[creg])throw'Error: "getCregBit": unknown register "'+creg+'".';for(var len=this.cregs[creg].length,value=0,i=0;iMath.PI&&(params[paramName]=Math.PI-params[paramName])}),opt.params=params),"measure"==gateName?opt.creg={name:"c",bit:gateWires[0]}:options.noClassicControl||0!=Math.floor(4*Math.random())||(cregBits=this.cregTotalBits())&&(opt.condition={creg:"c",value:Math.floor(Math.random()*math.pow(2,cregBits))}),this.appendGate(gateName,gateWires,opt),gateCount++}}}},QuantumCircuit.prototype.randomUnitary=function(numQubits){var circ=new QuantumCircuit;return circ.randomCircuit(numQubits||1,8*(numQubits||1),{useGates:["rx","rz","cz"],noMeasure:!0,noReset:!0,noClassicControl:!0}),circ.circuitMatrix()},QuantumCircuit.prototype.eulerAnglesZYZ=function(inputMatrix){var eulerAngles={theta:null,phi:null,lambda:null,phase:null},coeff=math.pow(math.det(inputMatrix),-.5);eulerAngles.phase=-1*math.complex(coeff).toPolar().phi;var su_mat=math.multiply(coeff,inputMatrix);eulerAngles.theta=2*math.atan2(math.abs(su_mat[1][0]),math.abs(su_mat[0][0]));var phiplambda=2*math.complex(su_mat[1][1]).toPolar().phi,phimlamda=2*math.complex(su_mat[1][0]).toPolar().phi;return eulerAngles.phi=(phiplambda+phimlamda)/2,eulerAngles.lambda=(phiplambda-phimlamda)/2,eulerAngles},module.exports=QuantumCircuit},{"./qasm_import/QASMImport.js":1,mathjs:943}],6:[function(require,module,exports){var Token=require("./Token").Token,Lexer=require("./Lexer").Lexer,Interval=require("./IntervalSet").Interval;function TokenStream(){return this}function BufferedTokenStream(tokenSource){return TokenStream.call(this),this.tokenSource=tokenSource,this.tokens=[],this.index=-1,this.fetchedEOF=!1,this}((BufferedTokenStream.prototype=Object.create(TokenStream.prototype)).constructor=BufferedTokenStream).prototype.mark=function(){return 0},BufferedTokenStream.prototype.release=function(marker){},BufferedTokenStream.prototype.reset=function(){this.seek(0)},BufferedTokenStream.prototype.seek=function(index){this.lazyInit(),this.index=this.adjustSeekIndex(index)},BufferedTokenStream.prototype.get=function(index){return this.lazyInit(),this.tokens[index]},BufferedTokenStream.prototype.consume=function(){if(!(0<=this.index&&(this.fetchedEOF?this.index=this.tokens.length&&(stop=this.tokens.length-1);for(var i=start;i=this.tokens.length?this.tokens[this.tokens.length-1]:this.tokens[i]},BufferedTokenStream.prototype.adjustSeekIndex=function(i){return i},BufferedTokenStream.prototype.lazyInit=function(){-1===this.index&&this.setup()},BufferedTokenStream.prototype.setup=function(){this.sync(0),this.index=this.adjustSeekIndex(0)},BufferedTokenStream.prototype.setTokenSource=function(tokenSource){this.tokenSource=tokenSource,this.tokens=[],this.index=-1,this.fetchedEOF=!1},BufferedTokenStream.prototype.nextTokenOnChannel=function(i,channel){if(this.sync(i),i>=this.tokens.length)return-1;for(var token=this.tokens[i];token.channel!==this.channel;){if(token.type===Token.EOF)return-1;i+=1,this.sync(i),token=this.tokens[i]}return i},BufferedTokenStream.prototype.previousTokenOnChannel=function(i,channel){for(;0<=i&&this.tokens[i].channel!==channel;)--i;return i},BufferedTokenStream.prototype.getHiddenTokensToRight=function(tokenIndex,channel){if(void 0===channel&&(channel=-1),this.lazyInit(),tokenIndex<0||tokenIndex>=this.tokens.length)throw tokenIndex+" not in 0.."+this.tokens.length-1;var nextOnChannel=this.nextTokenOnChannel(tokenIndex+1,Lexer.DEFAULT_TOKEN_CHANNEL),from_=tokenIndex+1,to=-1===nextOnChannel?this.tokens.length-1:nextOnChannel;return this.filterForChannel(from_,to,channel)},BufferedTokenStream.prototype.getHiddenTokensToLeft=function(tokenIndex,channel){if(void 0===channel&&(channel=-1),this.lazyInit(),tokenIndex<0||tokenIndex>=this.tokens.length)throw tokenIndex+" not in 0.."+this.tokens.length-1;var prevOnChannel=this.previousTokenOnChannel(tokenIndex-1,Lexer.DEFAULT_TOKEN_CHANNEL);if(prevOnChannel===tokenIndex-1)return null;var from_=prevOnChannel+1,to=tokenIndex-1;return this.filterForChannel(from_,to,channel)},BufferedTokenStream.prototype.filterForChannel=function(left,right,channel){for(var hidden=[],i=left;i=this.tokens.length&&(stop=this.tokens.length-1);for(var s="",i=start;i=this._size)throw"cannot consume EOF";this._index+=1},InputStream.prototype.LA=function(offset){if(0===offset)return 0;offset<0&&(offset+=1);var pos=this._index+offset-1;return pos<0||pos>=this._size?Token.EOF:this.data[pos]},InputStream.prototype.LT=function(offset){return this.LA(offset)},InputStream.prototype.mark=function(){return-1},InputStream.prototype.release=function(marker){},InputStream.prototype.seek=function(_index){_index<=this._index?this._index=_index:this._index=Math.min(_index,this._size)},InputStream.prototype.getText=function(start,stop){if(stop>=this._size&&(stop=this._size-1),start>=this._size)return"";if(this.decodeToUnicodeCodePoints){for(var result="",i=start;i<=stop;i++)result+=String.fromCodePoint(this.data[i]);return result}return this.strdata.slice(start,stop+1)},InputStream.prototype.toString=function(){return this.strdata},exports.InputStream=InputStream},{"./Token":20,"./polyfills/codepointat":48,"./polyfills/fromcodepoint":49}],12:[function(require,module,exports){var Token=require("./Token").Token;function Interval(start,stop){return this.start=start,this.stop=stop,this}function IntervalSet(){this.intervals=null,this.readOnly=!1}Interval.prototype.contains=function(item){return item>=this.start&&item=r.stop?(this.intervals.pop(k+1),this.reduce(k)):l.stop>=r.start&&(this.intervals[k]=new Interval(l.start,r.stop),this.intervals.pop(k+1)))},IntervalSet.prototype.complement=function(start,stop){var result=new IntervalSet;result.addInterval(new Interval(start,stop+1));for(var i=0;ii.start&&v.stop=i.stop?(this.intervals.splice(k,1),--k):v.start"):names.push("'"+String.fromCharCode(v.start)+"'"):names.push("'"+String.fromCharCode(v.start)+"'..'"+String.fromCharCode(v.stop-1)+"'")}return 1"):names.push(v.start.toString()):names.push(v.start.toString()+".."+(v.stop-1).toString())}return 1":a===Token.EPSILON?"":literalNames[a]||symbolicNames[a]},exports.Interval=Interval,exports.IntervalSet=IntervalSet},{"./Token":20}],13:[function(require,module,exports){var Set=require("./Utils").Set,BitSet=require("./Utils").BitSet,Token=require("./Token").Token,ATNConfig=require("./atn/ATNConfig").ATNConfig,IntervalSet=(require("./IntervalSet").Interval,require("./IntervalSet").IntervalSet),RuleStopState=require("./atn/ATNState").RuleStopState,RuleTransition=require("./atn/Transition").RuleTransition,NotSetTransition=require("./atn/Transition").NotSetTransition,WildcardTransition=require("./atn/Transition").WildcardTransition,AbstractPredicateTransition=require("./atn/Transition").AbstractPredicateTransition,pc=require("./PredictionContext"),predictionContextFromRuleContext=pc.predictionContextFromRuleContext,PredictionContext=pc.PredictionContext,SingletonPredictionContext=pc.SingletonPredictionContext;function LL1Analyzer(atn){this.atn=atn}LL1Analyzer.HIT_PRED=Token.INVALID_TYPE,LL1Analyzer.prototype.getDecisionLookahead=function(s){if(null===s)return null;for(var count=s.transitions.length,look=[],alt=0;alt":"\n"===c?"\\n":"\t"===c?"\\t":"\r"===c?"\\r":c},Lexer.prototype.getCharErrorDisplay=function(c){return"'"+this.getErrorDisplayForChar(c)+"'"},Lexer.prototype.recover=function(re){this._input.LA(1)!==Token.EOF&&(re instanceof LexerNoViableAltException?this._interp.consume(this._input):this._input.consume())},exports.Lexer=Lexer},{"./CommonTokenFactory":8,"./Recognizer":18,"./Token":20,"./error/Errors":45}],15:[function(require,module,exports){var Token=require("./Token").Token,ParseTreeListener=require("./tree/Tree").ParseTreeListener,Recognizer=require("./Recognizer").Recognizer,DefaultErrorStrategy=require("./error/ErrorStrategy").DefaultErrorStrategy,ATNDeserializer=require("./atn/ATNDeserializer").ATNDeserializer,ATNDeserializationOptions=require("./atn/ATNDeserializationOptions").ATNDeserializationOptions,TerminalNode=require("./tree/Tree").TerminalNode,ErrorNode=require("./tree/Tree").ErrorNode;function TraceListener(parser){return ParseTreeListener.call(this),this.parser=parser,this}function Parser(input){return Recognizer.call(this),this._input=null,this._errHandler=new DefaultErrorStrategy,this._precedenceStack=[],this._precedenceStack.push(0),this._ctx=null,this.buildParseTrees=!0,this._tracer=null,this._parseListeners=null,this._syntaxErrors=0,this.setInputStream(input),this}((TraceListener.prototype=Object.create(ParseTreeListener.prototype)).constructor=TraceListener).prototype.enterEveryRule=function(ctx){console.log("enter "+this.parser.ruleNames[ctx.ruleIndex]+", LT(1)="+this.parser._input.LT(1).text)},TraceListener.prototype.visitTerminal=function(node){console.log("consume "+node.symbol+" rule "+this.parser.ruleNames[this.parser._ctx.ruleIndex])},TraceListener.prototype.exitEveryRule=function(ctx){console.log("exit "+this.parser.ruleNames[ctx.ruleIndex]+", LT(1)="+this.parser._input.LT(1).text)},((Parser.prototype=Object.create(Recognizer.prototype)).contructor=Parser).bypassAltsAtnCache={},Parser.prototype.reset=function(){null!==this._input&&this._input.seek(0),this._errHandler.reset(this),this._ctx=null,this._syntaxErrors=0,this.setTrace(!1),this._precedenceStack=[],this._precedenceStack.push(0),null!==this._interp&&this._interp.reset()},Parser.prototype.match=function(ttype){var t=this.getCurrentToken();return t.type===ttype?(this._errHandler.reportMatch(this),this.consume()):(t=this._errHandler.recoverInline(this),this.buildParseTrees&&-1===t.tokenIndex&&this._ctx.addErrorNode(t)),t},Parser.prototype.matchWildcard=function(){var t=this.getCurrentToken();return 0=this._precedenceStack[this._precedenceStack.length-1]},Parser.prototype.inContext=function(context){return!1},Parser.prototype.isExpectedToken=function(symbol){var atn=this._interp.atn,ctx=this._ctx,s=atn.states[this.state];if((following=atn.nextTokens(s)).contains(symbol))return!0;if(!following.contains(Token.EPSILON))return!1;for(;null!==ctx&&0<=ctx.invokingState&&following.contains(Token.EPSILON);){var following,rt=atn.states[ctx.invokingState].transitions[0];if((following=atn.nextTokens(rt.followState)).contains(symbol))return!0;ctx=ctx.parentCtx}return!(!following.contains(Token.EPSILON)||symbol!==Token.EOF)},Parser.prototype.getExpectedTokens=function(){return this._interp.atn.getExpectedTokens(this.state,this._ctx)},Parser.prototype.getExpectedTokensWithinCurrentRule=function(){var atn=this._interp.atn,s=atn.states[this.state];return atn.nextTokens(s)},Parser.prototype.getRuleIndex=function(ruleName){var ruleIndex=this.getRuleIndexMap()[ruleName];return null!==ruleIndex?ruleIndex:-1},Parser.prototype.getRuleInvocationStack=function(p){null===(p=p||null)&&(p=this._ctx);for(var stack=[];null!==p;){var ruleIndex=p.ruleIndex;ruleIndex<0?stack.push("n/a"):stack.push(this.ruleNames[ruleIndex]),p=p.parentCtx}return stack},Parser.prototype.getDFAStrings=function(){return this._interp.decisionToDFA.toString()},Parser.prototype.dumpDFA=function(){for(var seenOne=!1,i=0;i=this.children.length)return null;if(null===type)return this.children[i];for(var j=0;j=this.children.length)return null;for(var j=0;jb.returnState&&(payloads[0]=b.returnState,payloads[1]=a.returnState);var apc=new ArrayPredictionContext(parents=[singleParent,singleParent],payloads);return null!==mergeCache&&mergeCache.set(a,b,apc),apc}var payloads=[a.returnState,b.returnState],parents=[a.parentCtx,b.parentCtx];a.returnState>b.returnState&&(payloads[0]=b.returnState,payloads[1]=a.returnState,parents=[b.parentCtx,a.parentCtx]);var a_=new ArrayPredictionContext(parents,payloads);return null!==mergeCache&&mergeCache.set(a,b,a_),a_}}(a,b,rootIsWildcard,mergeCache);if(rootIsWildcard){if(a instanceof EmptyPredictionContext)return a;if(b instanceof EmptyPredictionContext)return b}return a instanceof SingletonPredictionContext&&(a=new ArrayPredictionContext([a.getParent()],[a.returnState])),b instanceof SingletonPredictionContext&&(b=new ArrayPredictionContext([b.getParent()],[b.returnState])),function(a,b,rootIsWildcard,mergeCache){if(null!==mergeCache){var previous=mergeCache.get(a,b);if(null!==previous)return previous;if(null!==(previous=mergeCache.get(b,a)))return previous}var i=0,j=0,k=0,mergedReturnStates=[],mergedParents=[];for(;i";var s=t.text;return null===s&&(s=t.type===Token.EOF?"":"<"+t.type+">"),"'"+(s=s.replace("\n","\\n").replace("\r","\\r").replace("\t","\\t"))+"'"},Recognizer.prototype.getErrorListenerDispatch=function(){return new ProxyErrorListener(this._listeners)},Recognizer.prototype.sempred=function(localctx,ruleIndex,actionIndex){return!0},Recognizer.prototype.precpred=function(localctx,precedence){return!0},Object.defineProperty(Recognizer.prototype,"state",{get:function(){return this._stateNumber},set:function(state){this._stateNumber=state}}),exports.Recognizer=Recognizer},{"./Token":20,"./error/ErrorListener":43}],19:[function(require,module,exports){var RuleNode=require("./tree/Tree").RuleNode,INVALID_INTERVAL=require("./tree/Tree").INVALID_INTERVAL,INVALID_ALT_NUMBER=require("./atn/ATN").INVALID_ALT_NUMBER;function RuleContext(parent,invokingState){return RuleNode.call(this),this.parentCtx=parent||null,this.invokingState=invokingState||-1,this}((RuleContext.prototype=Object.create(RuleNode.prototype)).constructor=RuleContext).prototype.depth=function(){for(var n=0,p=this;null!==p;)p=p.parentCtx,n+=1;return n},RuleContext.prototype.isEmpty=function(){return-1===this.invokingState},RuleContext.prototype.getSourceInterval=function(){return INVALID_INTERVAL},RuleContext.prototype.getRuleContext=function(){return this},RuleContext.prototype.getPayload=function(){return this},RuleContext.prototype.getText=function(){return 0===this.getChildCount()?"":this.children.map(function(child){return child.getText()}).join("")},RuleContext.prototype.getAltNumber=function(){return INVALID_ALT_NUMBER},RuleContext.prototype.setAltNumber=function(altNumber){},RuleContext.prototype.getChild=function(i){return null},RuleContext.prototype.getChildCount=function(){return 0},RuleContext.prototype.accept=function(visitor){return visitor.visitChildren(this)},exports.RuleContext=RuleContext;var Trees=require("./tree/Trees").Trees;RuleContext.prototype.toStringTree=function(ruleNames,recog){return Trees.toStringTree(this,ruleNames,recog)},RuleContext.prototype.toString=function(ruleNames,stop){ruleNames=ruleNames||null,stop=stop||null;for(var ri,p=this,s="[";null!==p&&p!==stop;){null===ruleNames?p.isEmpty()||(s+=p.invokingState):s+=0<=(ri=p.ruleIndex)&&ri"},set:function(text){this._text=text}}),CommonToken.prototype.toString=function(){var txt=null!==(txt=this.text)?txt.replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\t/g,"\\t"):"";return"[@"+this.tokenIndex+","+this.start+":"+this.stop+"='"+txt+"',<"+this.type+">"+(0>>16)*c1&65535)<<16)&4294967295)<<15|k1>>>17))*c2+(((k1>>>16)*c2&65535)<<16)&4294967295)<<13|h1>>>19))+((5*(h1>>>16)&65535)<<16)&4294967295))+((58964+(h1b>>>16)&65535)<<16);switch(k1=0,remainder){case 3:k1^=(255&key.charCodeAt(i+2))<<16;case 2:k1^=(255&key.charCodeAt(i+1))<<8;case 1:h1^=k1=(65535&(k1=(k1=(65535&(k1^=255&key.charCodeAt(i)))*c1+(((k1>>>16)*c1&65535)<<16)&4294967295)<<15|k1>>>17))*c2+(((k1>>>16)*c2&65535)<<16)&4294967295}return h1^=key.length,h1=2246822507*(65535&(h1^=h1>>>16))+((2246822507*(h1>>>16)&65535)<<16)&4294967295,h1=3266489909*(65535&(h1^=h1>>>13))+((3266489909*(h1>>>16)&65535)<<16)&4294967295,(h1^=h1>>>16)>>>0},Object.defineProperty(Set.prototype,"length",{get:function(){var l=0;for(var key in this.data)0===key.indexOf("hash_")&&(l+=this.data[key].length);return l}}),Set.prototype.add=function(value){var key="hash_"+this.hashFunction(value);if(key in this.data){for(var values=this.data[key],i=0;i>>17,k*=461845907,this.count=this.count+1;var hash=this.hash^k;hash=5*(hash=hash<<13|hash>>>19)+3864292196,this.hash=hash}}},Hash.prototype.finish=function(){var hash=this.hash^4*this.count;return hash^=hash>>>16,hash*=2246822507,hash^=hash>>>13,hash*=3266489909,hash^=hash>>>16},DoubleDict.prototype.get=function(a,b){var d=this[a]||null;return null!==d&&d[b]||null},DoubleDict.prototype.set=function(a,b,o){var d=this[a]||null;null===d&&(d={},this[a]=d),d[b]=o},exports.Hash=Hash,exports.Set=Set,exports.Map=Map,exports.BitSet=BitSet,exports.AltDict=AltDict,exports.DoubleDict=DoubleDict,exports.hashStuff=function(){var hash=new Hash;return hash.update.apply(arguments),hash.finish()},exports.escapeWhitespace=function(s,escapeSpaces){return s=s.replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r"),escapeSpaces&&(s=s.replace(/ /g,"\xb7")),s},exports.arrayToString=arrayToString,exports.titleCase=function(str){return str.replace(/\w\S*/g,function(txt){return txt.charAt(0).toUpperCase()+txt.substr(1)})},exports.equalArrays=function(a,b){if(!Array.isArray(a)||!Array.isArray(b))return!1;if(a==b)return!0;if(a.length!=b.length)return!1;for(var i=0;i=this.states.length)throw"Invalid state number.";var s=this.states[stateNumber];if(!(following=this.nextTokens(s)).contains(Token.EPSILON))return following;var expected=new IntervalSet;for(expected.addSet(following),expected.removeOne(Token.EPSILON);null!==ctx&&0<=ctx.invokingState&&following.contains(Token.EPSILON);){var rt=this.states[ctx.invokingState].transitions[0],following=this.nextTokens(rt.followState);expected.addSet(following),expected.removeOne(Token.EPSILON),ctx=ctx.parentCtx}return following.contains(Token.EPSILON)&&expected.addOne(Token.EOF),expected},ATN.INVALID_ALT_NUMBER=0,exports.ATN=ATN},{"./../IntervalSet":12,"./../LL1Analyzer":13,"./../Token":20}],23:[function(require,module,exports){var DecisionState=require("./ATNState").DecisionState,SemanticContext=require("./SemanticContext").SemanticContext,Hash=require("../Utils").Hash;function checkParams(params,isCfg){if(null===params){var result={state:null,alt:null,context:null,semanticContext:null};return isCfg&&(result.reachesIntoOuterContext=0),result}var props={};return props.state=params.state||null,props.alt=void 0===params.alt?null:params.alt,props.context=params.context||null,props.semanticContext=params.semanticContext||null,isCfg&&(props.reachesIntoOuterContext=params.reachesIntoOuterContext||0,props.precedenceFilterSuppressed=params.precedenceFilterSuppressed||!1),props}function ATNConfig(params,config){return this.checkContext(params,config),params=checkParams(params),config=checkParams(config,!0),this.state=null!==params.state?params.state:config.state,this.alt=null!==params.alt?params.alt:config.alt,this.context=null!==params.context?params.context:config.context,this.semanticContext=null!==params.semanticContext?params.semanticContext:null!==config.semanticContext?config.semanticContext:SemanticContext.NONE,this.reachesIntoOuterContext=config.reachesIntoOuterContext,this.precedenceFilterSuppressed=config.precedenceFilterSuppressed,this}function LexerATNConfig(params,config){ATNConfig.call(this,params,config);var lexerActionExecutor=params.lexerActionExecutor||null;return this.lexerActionExecutor=lexerActionExecutor||(null!==config?config.lexerActionExecutor:null),this.passedThroughNonGreedyDecision=null!==config&&this.checkNonGreedyDecision(config,this.state),this}ATNConfig.prototype.checkContext=function(params,config){null!==params.context&&void 0!==params.context||null!==config&&null!==config.context&&void 0!==config.context||(this.context=null)},ATNConfig.prototype.hashCode=function(){var hash=new Hash;return this.updateHashCode(hash),hash.finish()},ATNConfig.prototype.updateHashCode=function(hash){hash.update(this.state.stateNumber,this.alt,this.context,this.semanticContext)},ATNConfig.prototype.equals=function(other){return this===other||other instanceof ATNConfig&&(this.state.stateNumber===other.state.stateNumber&&this.alt===other.alt&&(null===this.context?null===other.context:this.context.equals(other.context))&&this.semanticContext.equals(other.semanticContext)&&this.precedenceFilterSuppressed===other.precedenceFilterSuppressed)},ATNConfig.prototype.hashCodeForConfigSet=function(){var hash=new Hash;return hash.update(this.state.stateNumber,this.alt,this.semanticContext),hash.finish()},ATNConfig.prototype.equalsForConfigSet=function(other){return this===other||other instanceof ATNConfig&&(this.state.stateNumber===other.state.stateNumber&&this.alt===other.alt&&this.semanticContext.equals(other.semanticContext))},ATNConfig.prototype.toString=function(){return"("+this.state+","+this.alt+(null!==this.context?",["+this.context.toString()+"]":"")+(this.semanticContext!==SemanticContext.NONE?","+this.semanticContext.toString():"")+(0>8&255}return byteToHex[bb[0]]+byteToHex[bb[1]]+byteToHex[bb[2]]+byteToHex[bb[3]]+"-"+byteToHex[bb[4]]+byteToHex[bb[5]]+"-"+byteToHex[bb[6]]+byteToHex[bb[7]]+"-"+byteToHex[bb[8]]+byteToHex[bb[9]]+"-"+byteToHex[bb[10]]+byteToHex[bb[11]]+byteToHex[bb[12]]+byteToHex[bb[13]]+byteToHex[bb[14]]+byteToHex[bb[15]]},ATNDeserializer.prototype.edgeFactory=function(atn,type,src,trg,arg1,arg2,arg3,sets){var target=atn.states[trg];switch(type){case Transition.EPSILON:return new EpsilonTransition(target);case Transition.RANGE:return new RangeTransition(target,0!==arg3?Token.EOF:arg1,arg2);case Transition.RULE:return new RuleTransition(atn.states[arg1],arg2,arg3,target);case Transition.PREDICATE:return new PredicateTransition(target,arg1,arg2,0!==arg3);case Transition.PRECEDENCE:return new PrecedencePredicateTransition(target,arg1);case Transition.ATOM:return new AtomTransition(target,0!==arg3?Token.EOF:arg1);case Transition.ACTION:return new ActionTransition(target,arg1,arg2,0!==arg3);case Transition.SET:return new SetTransition(target,sets[arg1]);case Transition.NOT_SET:return new NotSetTransition(target,sets[arg1]);case Transition.WILDCARD:return new WildcardTransition(target);default:throw"The specified transition type: "+type+" is not valid."}},ATNDeserializer.prototype.stateFactory=function(type,ruleIndex){var sf;if(null===this.stateFactories&&((sf=[])[ATNState.INVALID_TYPE]=null,sf[ATNState.BASIC]=function(){return new BasicState},sf[ATNState.RULE_START]=function(){return new RuleStartState},sf[ATNState.BLOCK_START]=function(){return new BasicBlockStartState},sf[ATNState.PLUS_BLOCK_START]=function(){return new PlusBlockStartState},sf[ATNState.STAR_BLOCK_START]=function(){return new StarBlockStartState},sf[ATNState.TOKEN_START]=function(){return new TokensStartState},sf[ATNState.RULE_STOP]=function(){return new RuleStopState},sf[ATNState.BLOCK_END]=function(){return new BlockEndState},sf[ATNState.STAR_LOOP_BACK]=function(){return new StarLoopbackState},sf[ATNState.STAR_LOOP_ENTRY]=function(){return new StarLoopEntryState},sf[ATNState.PLUS_LOOP_BACK]=function(){return new PlusLoopbackState},sf[ATNState.LOOP_END]=function(){return new LoopEndState},this.stateFactories=sf),type>this.stateFactories.length||null===this.stateFactories[type])throw"The specified state type "+type+" is not valid.";var s=this.stateFactories[type]();if(null!==s)return s.ruleIndex=ruleIndex,s},ATNDeserializer.prototype.lexerActionFactory=function(type,data1,data2){var af;if(null===this.actionFactories&&((af=[])[LexerActionType.CHANNEL]=function(data1,data2){return new LexerChannelAction(data1)},af[LexerActionType.CUSTOM]=function(data1,data2){return new LexerCustomAction(data1,data2)},af[LexerActionType.MODE]=function(data1,data2){return new LexerModeAction(data1)},af[LexerActionType.MORE]=function(data1,data2){return LexerMoreAction.INSTANCE},af[LexerActionType.POP_MODE]=function(data1,data2){return LexerPopModeAction.INSTANCE},af[LexerActionType.PUSH_MODE]=function(data1,data2){return new LexerPushModeAction(data1)},af[LexerActionType.SKIP]=function(data1,data2){return LexerSkipAction.INSTANCE},af[LexerActionType.TYPE]=function(data1,data2){return new LexerTypeAction(data1)},this.actionFactories=af),type>this.actionFactories.length||null===this.actionFactories[type])throw"The specified lexer action type "+type+" is not valid.";return this.actionFactories[type](data1,data2)},exports.ATNDeserializer=ATNDeserializer},{"./../IntervalSet":12,"./../Token":20,"./ATN":22,"./ATNDeserializationOptions":25,"./ATNState":28,"./ATNType":29,"./LexerAction":31,"./Transition":36}],27:[function(require,module,exports){var DFAState=require("./../dfa/DFAState").DFAState,ATNConfigSet=require("./ATNConfigSet").ATNConfigSet,getCachedPredictionContext=require("./../PredictionContext").getCachedPredictionContext;function ATNSimulator(atn,sharedContextCache){return this.atn=atn,this.sharedContextCache=sharedContextCache,this}ATNSimulator.ERROR=new DFAState(2147483647,new ATNConfigSet),ATNSimulator.prototype.getCachedContext=function(context){if(null===this.sharedContextCache)return context;return getCachedPredictionContext(context,this.sharedContextCache,{})},exports.ATNSimulator=ATNSimulator},{"./../PredictionContext":17,"./../dfa/DFAState":40,"./ATNConfigSet":24}],28:[function(require,module,exports){function ATNState(){return this.atn=null,this.stateNumber=ATNState.INVALID_STATE_NUMBER,this.stateType=null,this.ruleIndex=0,this.epsilonOnlyTransitions=!1,this.transitions=[],this.nextTokenWithinRule=null,this}function BasicState(){return ATNState.call(this),this.stateType=ATNState.BASIC,this}function DecisionState(){return ATNState.call(this),this.decision=-1,this.nonGreedy=!1,this}function BlockStartState(){return DecisionState.call(this),this.endState=null,this}function BasicBlockStartState(){return BlockStartState.call(this),this.stateType=ATNState.BLOCK_START,this}function BlockEndState(){return ATNState.call(this),this.stateType=ATNState.BLOCK_END,this.startState=null,this}function RuleStopState(){return ATNState.call(this),this.stateType=ATNState.RULE_STOP,this}function RuleStartState(){return ATNState.call(this),this.stateType=ATNState.RULE_START,this.stopState=null,this.isPrecedenceRule=!1,this}function PlusLoopbackState(){return DecisionState.call(this),this.stateType=ATNState.PLUS_LOOP_BACK,this}function PlusBlockStartState(){return BlockStartState.call(this),this.stateType=ATNState.PLUS_BLOCK_START,this.loopBackState=null,this}function StarBlockStartState(){return BlockStartState.call(this),this.stateType=ATNState.STAR_BLOCK_START,this}function StarLoopbackState(){return ATNState.call(this),this.stateType=ATNState.STAR_LOOP_BACK,this}function StarLoopEntryState(){return DecisionState.call(this),this.stateType=ATNState.STAR_LOOP_ENTRY,this.loopBackState=null,this.isPrecedenceDecision=null,this}function LoopEndState(){return ATNState.call(this),this.stateType=ATNState.LOOP_END,this.loopBackState=null,this}function TokensStartState(){return DecisionState.call(this),this.stateType=ATNState.TOKEN_START,this}ATNState.INVALID_TYPE=0,ATNState.BASIC=1,ATNState.RULE_START=2,ATNState.BLOCK_START=3,ATNState.PLUS_BLOCK_START=4,ATNState.STAR_BLOCK_START=5,ATNState.TOKEN_START=6,ATNState.RULE_STOP=7,ATNState.BLOCK_END=8,ATNState.STAR_LOOP_BACK=9,ATNState.STAR_LOOP_ENTRY=10,ATNState.PLUS_LOOP_BACK=11,ATNState.LOOP_END=12,ATNState.serializationNames=["INVALID","BASIC","RULE_START","BLOCK_START","PLUS_BLOCK_START","STAR_BLOCK_START","TOKEN_START","RULE_STOP","BLOCK_END","STAR_LOOP_BACK","STAR_LOOP_ENTRY","PLUS_LOOP_BACK","LOOP_END"],ATNState.INVALID_STATE_NUMBER=-1,ATNState.prototype.toString=function(){return this.stateNumber},ATNState.prototype.equals=function(other){return other instanceof ATNState&&this.stateNumber===other.stateNumber},ATNState.prototype.isNonGreedyExitState=function(){return!1},ATNState.prototype.addTransition=function(trans,index){void 0===index&&(index=-1),0===this.transitions.length?this.epsilonOnlyTransitions=trans.isEpsilon:this.epsilonOnlyTransitions!==trans.isEpsilon&&(this.epsilonOnlyTransitions=!1),-1===index?this.transitions.push(trans):this.transitions.splice(index,1,trans)},(BasicState.prototype=Object.create(ATNState.prototype)).constructor=BasicState,(DecisionState.prototype=Object.create(ATNState.prototype)).constructor=DecisionState,(BlockStartState.prototype=Object.create(DecisionState.prototype)).constructor=BlockStartState,(BasicBlockStartState.prototype=Object.create(BlockStartState.prototype)).constructor=BasicBlockStartState,(BlockEndState.prototype=Object.create(ATNState.prototype)).constructor=BlockEndState,(RuleStopState.prototype=Object.create(ATNState.prototype)).constructor=RuleStopState,(RuleStartState.prototype=Object.create(ATNState.prototype)).constructor=RuleStartState,(PlusLoopbackState.prototype=Object.create(DecisionState.prototype)).constructor=PlusLoopbackState,(PlusBlockStartState.prototype=Object.create(BlockStartState.prototype)).constructor=PlusBlockStartState,(StarBlockStartState.prototype=Object.create(BlockStartState.prototype)).constructor=StarBlockStartState,(StarLoopbackState.prototype=Object.create(ATNState.prototype)).constructor=StarLoopbackState,(StarLoopEntryState.prototype=Object.create(DecisionState.prototype)).constructor=StarLoopEntryState,(LoopEndState.prototype=Object.create(ATNState.prototype)).constructor=LoopEndState,(TokensStartState.prototype=Object.create(DecisionState.prototype)).constructor=TokensStartState,exports.ATNState=ATNState,exports.BasicState=BasicState,exports.DecisionState=DecisionState,exports.BlockStartState=BlockStartState,exports.BlockEndState=BlockEndState,exports.LoopEndState=LoopEndState,exports.RuleStartState=RuleStartState,exports.RuleStopState=RuleStopState,exports.TokensStartState=TokensStartState,exports.PlusLoopbackState=PlusLoopbackState,exports.StarLoopbackState=StarLoopbackState,exports.StarLoopEntryState=StarLoopEntryState,exports.PlusBlockStartState=PlusBlockStartState,exports.StarBlockStartState=StarBlockStartState,exports.BasicBlockStartState=BasicBlockStartState},{}],29:[function(require,module,exports){function ATNType(){}ATNType.LEXER=0,ATNType.PARSER=1,exports.ATNType=ATNType},{}],30:[function(require,module,exports){var Token=require("./../Token").Token,Lexer=require("./../Lexer").Lexer,ATN=require("./ATN").ATN,ATNSimulator=require("./ATNSimulator").ATNSimulator,DFAState=require("./../dfa/DFAState").DFAState,OrderedATNConfigSet=(require("./ATNConfigSet").ATNConfigSet,require("./ATNConfigSet").OrderedATNConfigSet),PredictionContext=require("./../PredictionContext").PredictionContext,SingletonPredictionContext=require("./../PredictionContext").SingletonPredictionContext,RuleStopState=require("./ATNState").RuleStopState,LexerATNConfig=require("./ATNConfig").LexerATNConfig,Transition=require("./Transition").Transition,LexerActionExecutor=require("./LexerActionExecutor").LexerActionExecutor,LexerNoViableAltException=require("./../error/Errors").LexerNoViableAltException;function resetSimState(sim){sim.index=-1,sim.line=0,sim.column=-1,sim.dfaState=null}function SimState(){return resetSimState(this),this}function LexerATNSimulator(recog,atn,decisionToDFA,sharedContextCache){return ATNSimulator.call(this,atn,sharedContextCache),this.decisionToDFA=decisionToDFA,this.recog=recog,this.startIndex=-1,this.line=1,this.column=0,this.mode=Lexer.DEFAULT_MODE,this.prevAccept=new SimState,this}SimState.prototype.reset=function(){resetSimState(this)},((LexerATNSimulator.prototype=Object.create(ATNSimulator.prototype)).constructor=LexerATNSimulator).debug=!1,LexerATNSimulator.dfa_debug=!1,LexerATNSimulator.MIN_DFA_EDGE=0,LexerATNSimulator.MAX_DFA_EDGE=127,LexerATNSimulator.match_calls=0,LexerATNSimulator.prototype.copyState=function(simulator){this.column=simulator.column,this.line=simulator.line,this.mode=simulator.mode,this.startIndex=simulator.startIndex},LexerATNSimulator.prototype.match=function(input,mode){this.match_calls+=1,this.mode=mode;var mark=input.mark();try{this.startIndex=input.index,this.prevAccept.reset();var dfa=this.decisionToDFA[mode];return null===dfa.s0?this.matchATN(input):this.execATN(input,dfa.s0)}finally{input.release(mark)}},LexerATNSimulator.prototype.reset=function(){this.prevAccept.reset(),this.startIndex=-1,this.line=1,this.column=0,this.mode=Lexer.DEFAULT_MODE},LexerATNSimulator.prototype.matchATN=function(input){var startState=this.atn.modeToStartState[this.mode];LexerATNSimulator.debug&&console.log("matchATN mode "+this.mode+" start: "+startState);var old_mode=this.mode,s0_closure=this.computeStartState(input,startState),suppressEdge=s0_closure.hasSemanticContext;s0_closure.hasSemanticContext=!1;var next=this.addDFAState(s0_closure);suppressEdge||(this.decisionToDFA[this.mode].s0=next);var predict=this.execATN(input,next);return LexerATNSimulator.debug&&console.log("DFA after matchATN: "+this.decisionToDFA[old_mode].toLexerString()),predict},LexerATNSimulator.prototype.execATN=function(input,ds0){LexerATNSimulator.debug&&console.log("start state closure="+ds0.configs),ds0.isAcceptState&&this.captureSimState(this.prevAccept,input,ds0);for(var t=input.LA(1),s=ds0;;){LexerATNSimulator.debug&&console.log("execATN loop starting closure: "+s.configs);var target=this.getExistingTargetState(s,t);if(null===target&&(target=this.computeTargetState(input,s,t)),target===ATNSimulator.ERROR)break;if(t!==Token.EOF&&this.consume(input),target.isAcceptState&&(this.captureSimState(this.prevAccept,input,target),t===Token.EOF))break;t=input.LA(1),s=target}return this.failOrAccept(this.prevAccept,input,s.configs,t)},LexerATNSimulator.prototype.getExistingTargetState=function(s,t){if(null===s.edges||t "+to+" upon "+tk),null===from_.edges&&(from_.edges=[]),from_.edges[tk-LexerATNSimulator.MIN_DFA_EDGE]=to)},LexerATNSimulator.prototype.addDFAState=function(configs){for(var proposed=new DFAState(null,configs),firstConfigWithRuleStopState=null,i=0;i"},ParserATNSimulator.prototype.getEpsilonTarget=function(config,t,collectPredicates,inContext,fullCtx,treatEofAsEpsilon){switch(t.serializationType){case Transition.RULE:return this.ruleTransition(config,t);case Transition.PRECEDENCE:return this.precedenceTransition(config,t,collectPredicates,inContext,fullCtx);case Transition.PREDICATE:return this.predTransition(config,t,collectPredicates,inContext,fullCtx);case Transition.ACTION:return this.actionTransition(config,t);case Transition.EPSILON:return new ATNConfig({state:t.target},config);case Transition.ATOM:case Transition.RANGE:case Transition.SET:return treatEofAsEpsilon&&t.matches(Token.EOF,0,1)?new ATNConfig({state:t.target},config):null;default:return null}},ParserATNSimulator.prototype.actionTransition=function(config,t){var index;return this.debug&&(index=-1==t.actionIndex?65535:t.actionIndex,console.log("ACTION edge "+t.ruleIndex+":"+index)),new ATNConfig({state:t.target},config)},ParserATNSimulator.prototype.precedenceTransition=function(config,pt,collectPredicates,inContext,fullCtx){this.debug&&(console.log("PRED (collectPredicates="+collectPredicates+") "+pt.precedence+">=_p, ctx dependent=true"),null!==this.parser&&console.log("context surrounding pred is "+Utils.arrayToString(this.parser.getRuleInvocationStack())));var currentPosition,predSucceeds,newSemCtx,c=null;return collectPredicates&&inContext?fullCtx?(currentPosition=this._input.index,this._input.seek(this._startIndex),predSucceeds=pt.getPredicate().evaluate(this.parser,this._outerContext),this._input.seek(currentPosition),predSucceeds&&(c=new ATNConfig({state:pt.target},config))):(newSemCtx=SemanticContext.andContext(config.semanticContext,pt.getPredicate()),c=new ATNConfig({state:pt.target,semanticContext:newSemCtx},config)):c=new ATNConfig({state:pt.target},config),this.debug&&console.log("config from pred transition="+c),c},ParserATNSimulator.prototype.predTransition=function(config,pt,collectPredicates,inContext,fullCtx){this.debug&&(console.log("PRED (collectPredicates="+collectPredicates+") "+pt.ruleIndex+":"+pt.predIndex+", ctx dependent="+pt.isCtxDependent),null!==this.parser&&console.log("context surrounding pred is "+Utils.arrayToString(this.parser.getRuleInvocationStack())));var currentPosition,predSucceeds,newSemCtx,c=null;return collectPredicates&&(pt.isCtxDependent&&inContext||!pt.isCtxDependent)?fullCtx?(currentPosition=this._input.index,this._input.seek(this._startIndex),predSucceeds=pt.getPredicate().evaluate(this.parser,this._outerContext),this._input.seek(currentPosition),predSucceeds&&(c=new ATNConfig({state:pt.target},config))):(newSemCtx=SemanticContext.andContext(config.semanticContext,pt.getPredicate()),c=new ATNConfig({state:pt.target,semanticContext:newSemCtx},config)):c=new ATNConfig({state:pt.target},config),this.debug&&console.log("config from pred transition="+c),c},ParserATNSimulator.prototype.ruleTransition=function(config,t){this.debug&&console.log("CALL rule "+this.getRuleName(t.target.ruleIndex)+", ctx="+config.context);var returnState=t.followState,newContext=SingletonPredictionContext.create(config.context,returnState.stateNumber);return new ATNConfig({state:t.target,context:newContext},config)},ParserATNSimulator.prototype.getConflictingAlts=function(configs){var altsets=PredictionMode.getConflictingAltSubsets(configs);return PredictionMode.getAlts(altsets)},ParserATNSimulator.prototype.getConflictingAltsOrUniqueAlt=function(configs){var conflictingAlts=null;return configs.uniqueAlt!==ATN.INVALID_ALT_NUMBER?(conflictingAlts=new BitSet).add(configs.uniqueAlt):conflictingAlts=configs.conflictingAlts,conflictingAlts},ParserATNSimulator.prototype.getTokenName=function(t){if(t===Token.EOF)return"EOF";if(null!==this.parser&&null!==this.parser.literalNames){if(!(t>=this.parser.literalNames.length&&t>=this.parser.symbolicNames.length))return(this.parser.literalNames[t]||this.parser.symbolicNames[t])+"<"+t+">";console.log(t+" ttype out of range: "+this.parser.literalNames),console.log(""+this.parser.getInputStream().getTokens())}return""+t},ParserATNSimulator.prototype.getLookaheadName=function(input){return this.getTokenName(input.LA(1))},ParserATNSimulator.prototype.dumpDeadEndConfigs=function(nvae){console.log("dead end configs: ");for(var decs=nvae.getDeadEndConfigs(),i=0;i "+to+" upon "+this.getTokenName(t)),null===to?null:(to=this.addDFAState(dfa,to),null===from_||t<-1||t>this.atn.maxTokenType||(null===from_.edges&&(from_.edges=[]),from_.edges[t+1]=to,this.debug&&(literalNames=null===this.parser?null:this.parser.literalNames,symbolicNames=null===this.parser?null:this.parser.symbolicNames,console.log("DFA=\n"+dfa.toString(literalNames,symbolicNames)))),to);var literalNames,symbolicNames},ParserATNSimulator.prototype.addDFAState=function(dfa,D){if(D==ATNSimulator.ERROR)return D;var existing=dfa.states.get(D);return null!==existing?existing:(D.stateNumber=dfa.states.length,D.configs.readOnly||(D.configs.optimizeConfigs(this),D.configs.setReadonly(!0)),dfa.states.add(D),this.debug&&console.log("adding new DFA state: "+D),D)},ParserATNSimulator.prototype.reportAttemptingFullContext=function(dfa,conflictingAlts,configs,startIndex,stopIndex){var interval;(this.debug||this.retry_debug)&&(interval=new Interval(startIndex,stopIndex+1),console.log("reportAttemptingFullContext decision="+dfa.decision+":"+configs+", input="+this.parser.getTokenStream().getText(interval))),null!==this.parser&&this.parser.getErrorListenerDispatch().reportAttemptingFullContext(this.parser,dfa,startIndex,stopIndex,conflictingAlts,configs)},ParserATNSimulator.prototype.reportContextSensitivity=function(dfa,prediction,configs,startIndex,stopIndex){var interval;(this.debug||this.retry_debug)&&(interval=new Interval(startIndex,stopIndex+1),console.log("reportContextSensitivity decision="+dfa.decision+":"+configs+", input="+this.parser.getTokenStream().getText(interval))),null!==this.parser&&this.parser.getErrorListenerDispatch().reportContextSensitivity(this.parser,dfa,startIndex,stopIndex,prediction,configs)},ParserATNSimulator.prototype.reportAmbiguity=function(dfa,D,startIndex,stopIndex,exact,ambigAlts,configs){var interval;(this.debug||this.retry_debug)&&(interval=new Interval(startIndex,stopIndex+1),console.log("reportAmbiguity "+ambigAlts+":"+configs+", input="+this.parser.getTokenStream().getText(interval))),null!==this.parser&&this.parser.getErrorListenerDispatch().reportAmbiguity(this.parser,dfa,startIndex,stopIndex,exact,ambigAlts,configs)},exports.ParserATNSimulator=ParserATNSimulator},{"./../IntervalSet":12,"./../ParserRuleContext":16,"./../PredictionContext":17,"./../RuleContext":19,"./../Token":20,"./../Utils":21,"./../dfa/DFAState":40,"./../error/Errors":45,"./ATN":22,"./ATNConfig":23,"./ATNConfigSet":24,"./ATNSimulator":27,"./ATNState":28,"./PredictionMode":34,"./SemanticContext":35,"./Transition":36}],34:[function(require,module,exports){require("./../Utils").Set;var Map=require("./../Utils").Map,BitSet=require("./../Utils").BitSet,AltDict=require("./../Utils").AltDict,ATN=require("./ATN").ATN,RuleStopState=require("./ATNState").RuleStopState,ATNConfigSet=require("./ATNConfigSet").ATNConfigSet,ATNConfig=require("./ATNConfig").ATNConfig,SemanticContext=require("./SemanticContext").SemanticContext,hashStuff=(require("../Utils").Hash,require("./../Utils").hashStuff);require("./../Utils").equalArrays;function PredictionMode(){return this}PredictionMode.SLL=0,PredictionMode.LL=1,PredictionMode.LL_EXACT_AMBIG_DETECTION=2,PredictionMode.hasSLLConflictTerminatingPrediction=function(mode,configs){if(PredictionMode.allConfigsInRuleStopStates(configs))return!0;if(mode===PredictionMode.SLL&&configs.hasSemanticContext){for(var dup=new ATNConfigSet,i=0;i=prec}?"},PrecedencePredicate.filterPrecedencePredicates=function(set){var result=[];return set.values().map(function(context){context instanceof PrecedencePredicate&&result.push(context)}),result},((AND.prototype=Object.create(SemanticContext.prototype)).constructor=AND).prototype.equals=function(other){return this===other||other instanceof AND&&this.opnds===other.opnds},AND.prototype.updateHashCode=function(hash){hash.update(this.opnds,"AND")},AND.prototype.evaluate=function(parser,outerContext){for(var i=0;i=this.start&&symbol<=this.stop},RangeTransition.prototype.toString=function(){return"'"+String.fromCharCode(this.start)+"'..'"+String.fromCharCode(this.stop)+"'"},(AbstractPredicateTransition.prototype=Object.create(Transition.prototype)).constructor=AbstractPredicateTransition,((PredicateTransition.prototype=Object.create(AbstractPredicateTransition.prototype)).constructor=PredicateTransition).prototype.matches=function(symbol,minVocabSymbol,maxVocabSymbol){return!1},PredicateTransition.prototype.getPredicate=function(){return new Predicate(this.ruleIndex,this.predIndex,this.isCtxDependent)},PredicateTransition.prototype.toString=function(){return"pred_"+this.ruleIndex+":"+this.predIndex},((ActionTransition.prototype=Object.create(Transition.prototype)).constructor=ActionTransition).prototype.matches=function(symbol,minVocabSymbol,maxVocabSymbol){return!1},ActionTransition.prototype.toString=function(){return"action_"+this.ruleIndex+":"+this.actionIndex},((SetTransition.prototype=Object.create(Transition.prototype)).constructor=SetTransition).prototype.matches=function(symbol,minVocabSymbol,maxVocabSymbol){return this.label.contains(symbol)},SetTransition.prototype.toString=function(){return this.label.toString()},((NotSetTransition.prototype=Object.create(SetTransition.prototype)).constructor=NotSetTransition).prototype.matches=function(symbol,minVocabSymbol,maxVocabSymbol){return minVocabSymbol<=symbol&&symbol<=maxVocabSymbol&&!SetTransition.prototype.matches.call(this,symbol,minVocabSymbol,maxVocabSymbol)},NotSetTransition.prototype.toString=function(){return"~"+SetTransition.prototype.toString.call(this)},((WildcardTransition.prototype=Object.create(Transition.prototype)).constructor=WildcardTransition).prototype.matches=function(symbol,minVocabSymbol,maxVocabSymbol){return minVocabSymbol<=symbol&&symbol<=maxVocabSymbol},WildcardTransition.prototype.toString=function(){return"."},((PrecedencePredicateTransition.prototype=Object.create(AbstractPredicateTransition.prototype)).constructor=PrecedencePredicateTransition).prototype.matches=function(symbol,minVocabSymbol,maxVocabSymbol){return!1},PrecedencePredicateTransition.prototype.getPredicate=function(){return new PrecedencePredicate(this.precedence)},PrecedencePredicateTransition.prototype.toString=function(){return this.precedence+" >= _p"},exports.Transition=Transition,exports.AtomTransition=AtomTransition,exports.SetTransition=SetTransition,exports.NotSetTransition=NotSetTransition,exports.RuleTransition=RuleTransition,exports.ActionTransition=ActionTransition,exports.EpsilonTransition=EpsilonTransition,exports.RangeTransition=RangeTransition,exports.WildcardTransition=WildcardTransition,exports.PredicateTransition=PredicateTransition,exports.PrecedencePredicateTransition=PrecedencePredicateTransition,exports.AbstractPredicateTransition=AbstractPredicateTransition},{"./../IntervalSet":12,"./../Token":20,"./SemanticContext":35}],37:[function(require,module,exports){exports.ATN=require("./ATN").ATN,exports.ATNDeserializer=require("./ATNDeserializer").ATNDeserializer,exports.LexerATNSimulator=require("./LexerATNSimulator").LexerATNSimulator,exports.ParserATNSimulator=require("./ParserATNSimulator").ParserATNSimulator,exports.PredictionMode=require("./PredictionMode").PredictionMode},{"./ATN":22,"./ATNDeserializer":26,"./LexerATNSimulator":30,"./ParserATNSimulator":33,"./PredictionMode":34}],38:[function(require,module,exports){var Set=require("../Utils").Set,DFAState=require("./DFAState").DFAState,StarLoopEntryState=require("../atn/ATNState").StarLoopEntryState,ATNConfigSet=require("./../atn/ATNConfigSet").ATNConfigSet,DFASerializer=require("./DFASerializer").DFASerializer,LexerDFASerializer=require("./DFASerializer").LexerDFASerializer;function DFA(atnStartState,decision){var precedenceState;return void 0===decision&&(decision=0),this.atnStartState=atnStartState,this.decision=decision,this._states=new Set,this.s0=null,this.precedenceDfa=!1,atnStartState instanceof StarLoopEntryState&&atnStartState.isPrecedenceDecision&&(this.precedenceDfa=!0,(precedenceState=new DFAState(null,new ATNConfigSet)).edges=[],precedenceState.isAcceptState=!1,precedenceState.requiresFullContext=!1,this.s0=precedenceState),this}DFA.prototype.getPrecedenceStartState=function(precedence){if(!this.precedenceDfa)throw"Only precedence DFAs may contain a precedence start state.";return!(precedence<0||precedence>=this.s0.edges.length)&&this.s0.edges[precedence]||null},DFA.prototype.setPrecedenceStartState=function(precedence,startState){if(!this.precedenceDfa)throw"Only precedence DFAs may contain a precedence start state.";precedence<0||(this.s0.edges[precedence]=startState)},DFA.prototype.setPrecedenceDfa=function(precedenceDfa){var precedenceState;this.precedenceDfa!==precedenceDfa&&(this._states=new DFAStatesSet,precedenceDfa?((precedenceState=new DFAState(null,new ATNConfigSet)).edges=[],precedenceState.isAcceptState=!1,precedenceState.requiresFullContext=!1,this.s0=precedenceState):this.s0=null,this.precedenceDfa=precedenceDfa)},Object.defineProperty(DFA.prototype,"states",{get:function(){return this._states}}),DFA.prototype.sortedStates=function(){return this._states.values().sort(function(a,b){return a.stateNumber-b.stateNumber})},DFA.prototype.toString=function(literalNames,symbolicNames){return literalNames=literalNames||null,symbolicNames=symbolicNames||null,null===this.s0?"":new DFASerializer(this,literalNames,symbolicNames).toString()},DFA.prototype.toLexerString=function(){return null===this.s0?"":new LexerDFASerializer(this).toString()},exports.DFA=DFA},{"../Utils":21,"../atn/ATNState":28,"./../atn/ATNConfigSet":24,"./DFASerializer":39,"./DFAState":40}],39:[function(require,module,exports){function DFASerializer(dfa,literalNames,symbolicNames){return this.dfa=dfa,this.literalNames=literalNames||[],this.symbolicNames=symbolicNames||[],this}function LexerDFASerializer(dfa){return DFASerializer.call(this,dfa,null),this}DFASerializer.prototype.toString=function(){if(null===this.dfa.s0)return null;for(var buf="",states=this.dfa.sortedStates(),i=0;i")).concat(this.getStateString(t))).concat("\n"))}}return 0===buf.length?null:buf},DFASerializer.prototype.getEdgeLabel=function(i){return 0===i?"EOF":null!==this.literalNames||null!==this.symbolicNames?this.literalNames[i-1]||this.symbolicNames[i-1]:String.fromCharCode(i-1)},DFASerializer.prototype.getStateString=function(s){var baseStateStr=(s.isAcceptState?":":"")+"s"+s.stateNumber+(s.requiresFullContext?"^":"");return s.isAcceptState?null!==s.predicates?baseStateStr+"=>"+s.predicates.toString():baseStateStr+"=>"+s.prediction.toString():baseStateStr},((LexerDFASerializer.prototype=Object.create(DFASerializer.prototype)).constructor=LexerDFASerializer).prototype.getEdgeLabel=function(i){return"'"+String.fromCharCode(i)+"'"},exports.DFASerializer=DFASerializer,exports.LexerDFASerializer=LexerDFASerializer},{}],40:[function(require,module,exports){var ATNConfigSet=require("./../atn/ATNConfigSet").ATNConfigSet,Utils=require("./../Utils"),Hash=Utils.Hash,Set=Utils.Set;function PredPrediction(pred,alt){return this.alt=alt,this.pred=pred,this}function DFAState(stateNumber,configs){return null===stateNumber&&(stateNumber=-1),null===configs&&(configs=new ATNConfigSet),this.stateNumber=stateNumber,this.configs=configs,this.edges=null,this.isAcceptState=!1,this.prediction=0,this.lexerActionExecutor=null,this.requiresFullContext=!1,this.predicates=null,this}PredPrediction.prototype.toString=function(){return"("+this.pred+", "+this.alt+")"},DFAState.prototype.getAltSet=function(){var alts=new Set;if(null!==this.configs)for(var i=0;i=ruleNames.length)return""+decision;var ruleName=ruleNames[ruleIndex]||null;return null===ruleName||0===ruleName.length?""+decision:decision+" ("+ruleName+")"},DiagnosticErrorListener.prototype.getConflictingAlts=function(reportedAlts,configs){if(null!==reportedAlts)return reportedAlts;for(var result=new BitSet,i=0;i":tokens.getText(new Interval(e.startToken.tokenIndex,e.offendingToken.tokenIndex)):"",msg="no viable alternative at input "+this.escapeWSAndQuote(input);recognizer.notifyErrorListeners(msg,e.offendingToken,e)},DefaultErrorStrategy.prototype.reportInputMismatch=function(recognizer,e){var msg="mismatched input "+this.getTokenErrorDisplay(e.offendingToken)+" expecting "+e.getExpectedTokens().toString(recognizer.literalNames,recognizer.symbolicNames);recognizer.notifyErrorListeners(msg,e.offendingToken,e)},DefaultErrorStrategy.prototype.reportFailedPredicate=function(recognizer,e){var msg="rule "+recognizer.ruleNames[recognizer._ctx.ruleIndex]+" "+e.message;recognizer.notifyErrorListeners(msg,e.offendingToken,e)},DefaultErrorStrategy.prototype.reportUnwantedToken=function(recognizer){var t,msg;this.inErrorRecoveryMode(recognizer)||(this.beginErrorCondition(recognizer),t=recognizer.getCurrentToken(),msg="extraneous input "+this.getTokenErrorDisplay(t)+" expecting "+this.getExpectedTokens(recognizer).toString(recognizer.literalNames,recognizer.symbolicNames),recognizer.notifyErrorListeners(msg,t,null))},DefaultErrorStrategy.prototype.reportMissingToken=function(recognizer){var t,msg;this.inErrorRecoveryMode(recognizer)||(this.beginErrorCondition(recognizer),t=recognizer.getCurrentToken(),msg="missing "+this.getExpectedTokens(recognizer).toString(recognizer.literalNames,recognizer.symbolicNames)+" at "+this.getTokenErrorDisplay(t),recognizer.notifyErrorListeners(msg,t,null))},DefaultErrorStrategy.prototype.recoverInline=function(recognizer){var matchedSymbol=this.singleTokenDeletion(recognizer);if(null!==matchedSymbol)return recognizer.consume(),matchedSymbol;if(this.singleTokenInsertion(recognizer))return this.getMissingSymbol(recognizer);throw new InputMismatchException(recognizer)},DefaultErrorStrategy.prototype.singleTokenInsertion=function(recognizer){var currentSymbolType=recognizer.getTokenStream().LA(1),atn=recognizer._interp.atn,next=atn.states[recognizer.state].transitions[0].target;return!!atn.nextTokens(next,recognizer._ctx).contains(currentSymbolType)&&(this.reportMissingToken(recognizer),!0)},DefaultErrorStrategy.prototype.singleTokenDeletion=function(recognizer){var nextTokenType=recognizer.getTokenStream().LA(2);if(this.getExpectedTokens(recognizer).contains(nextTokenType)){this.reportUnwantedToken(recognizer),recognizer.consume();var matchedSymbol=recognizer.getCurrentToken();return this.reportMatch(recognizer),matchedSymbol}return null},DefaultErrorStrategy.prototype.getMissingSymbol=function(recognizer){var currentSymbol=recognizer.getCurrentToken(),expectedTokenType=this.getExpectedTokens(recognizer).first(),tokenText=expectedTokenType===Token.EOF?"":"",current=currentSymbol,lookback=recognizer.getTokenStream().LT(-1);return current.type===Token.EOF&&null!==lookback&&(current=lookback),recognizer.getTokenFactory().create(current.source,expectedTokenType,tokenText,Token.DEFAULT_CHANNEL,-1,-1,current.line,current.column)},DefaultErrorStrategy.prototype.getExpectedTokens=function(recognizer){return recognizer.getExpectedTokens()},DefaultErrorStrategy.prototype.getTokenErrorDisplay=function(t){if(null===t)return"";var s=t.text;return null===s&&(s=t.type===Token.EOF?"":"<"+t.type+">"),this.escapeWSAndQuote(s)},DefaultErrorStrategy.prototype.escapeWSAndQuote=function(s){return"'"+(s=(s=(s=s.replace(/\n/g,"\\n")).replace(/\r/g,"\\r")).replace(/\t/g,"\\t"))+"'"},DefaultErrorStrategy.prototype.getErrorRecoverySet=function(recognizer){for(var atn=recognizer._interp.atn,ctx=recognizer._ctx,recoverSet=new IntervalSet;null!==ctx&&0<=ctx.invokingState;){var rt=atn.states[ctx.invokingState].transitions[0],follow=atn.nextTokens(rt.followState);recoverSet.addSet(follow),ctx=ctx.parentCtx}return recoverSet.removeOne(Token.EPSILON),recoverSet},DefaultErrorStrategy.prototype.consumeUntil=function(recognizer,set){for(var ttype=recognizer.getTokenStream().LA(1);ttype!==Token.EOF&&!set.contains(ttype);)recognizer.consume(),ttype=recognizer.getTokenStream().LA(1)},((BailErrorStrategy.prototype=Object.create(DefaultErrorStrategy.prototype)).constructor=BailErrorStrategy).prototype.recover=function(recognizer,e){for(var context=recognizer._ctx;null!==context;)context.exception=e,context=context.parentCtx;throw new ParseCancellationException(e)},BailErrorStrategy.prototype.recoverInline=function(recognizer){this.recover(recognizer,new InputMismatchException(recognizer))},BailErrorStrategy.prototype.sync=function(recognizer){},exports.BailErrorStrategy=BailErrorStrategy,exports.DefaultErrorStrategy=DefaultErrorStrategy},{"./../IntervalSet":12,"./../Token":20,"./../atn/ATNState":28,"./Errors":45}],45:[function(require,module,exports){var PredicateTransition=require("./../atn/Transition").PredicateTransition;function RecognitionException(params){return Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,RecognitionException):(new Error).stack,this.message=params.message,this.recognizer=params.recognizer,this.input=params.input,this.ctx=params.ctx,this.offendingToken=null,this.offendingState=-1,null!==this.recognizer&&(this.offendingState=this.recognizer.state),this}function LexerNoViableAltException(lexer,input,startIndex,deadEndConfigs){return RecognitionException.call(this,{message:"",recognizer:lexer,input:input,ctx:null}),this.startIndex=startIndex,this.deadEndConfigs=deadEndConfigs,this}function NoViableAltException(recognizer,input,startToken,offendingToken,deadEndConfigs,ctx){ctx=ctx||recognizer._ctx,offendingToken=offendingToken||recognizer.getCurrentToken(),startToken=startToken||recognizer.getCurrentToken(),input=input||recognizer.getInputStream(),RecognitionException.call(this,{message:"",recognizer:recognizer,input:input,ctx:ctx}),this.deadEndConfigs=deadEndConfigs,this.startToken=startToken,this.offendingToken=offendingToken}function InputMismatchException(recognizer){RecognitionException.call(this,{message:"",recognizer:recognizer,input:recognizer.getInputStream(),ctx:recognizer._ctx}),this.offendingToken=recognizer.getCurrentToken()}function FailedPredicateException(recognizer,predicate,message){RecognitionException.call(this,{message:this.formatMessage(predicate,message||null),recognizer:recognizer,input:recognizer.getInputStream(),ctx:recognizer._ctx});var trans=recognizer._interp.atn.states[recognizer.state].transitions[0];return trans instanceof PredicateTransition?(this.ruleIndex=trans.ruleIndex,this.predicateIndex=trans.predIndex):(this.ruleIndex=0,this.predicateIndex=0),this.predicate=predicate,this.offendingToken=recognizer.getCurrentToken(),this}function ParseCancellationException(){return Error.call(this),Error.captureStackTrace(this,ParseCancellationException),this}((RecognitionException.prototype=Object.create(Error.prototype)).constructor=RecognitionException).prototype.getExpectedTokens=function(){return null!==this.recognizer?this.recognizer.atn.getExpectedTokens(this.offendingState,this.ctx):null},RecognitionException.prototype.toString=function(){return this.message},((LexerNoViableAltException.prototype=Object.create(RecognitionException.prototype)).constructor=LexerNoViableAltException).prototype.toString=function(){var symbol="";return 0<=this.startIndex&&this.startIndex>10),lowSurrogate=codePoint%1024+56320,codeUnits.push(highSurrogate,lowSurrogate)),(index+1==length||16384":this.symbol.text},((ErrorNodeImpl.prototype=Object.create(TerminalNodeImpl.prototype)).constructor=ErrorNodeImpl).prototype.isErrorNode=function(){return!0},ErrorNodeImpl.prototype.accept=function(visitor){return visitor.visitErrorNode(this)},ParseTreeWalker.prototype.walk=function(listener,t){if(t instanceof ErrorNode||void 0!==t.isErrorNode&&t.isErrorNode())listener.visitErrorNode(t);else if(t instanceof TerminalNode)listener.visitTerminal(t);else{this.enterRule(listener,t);for(var i=0;ibaseOut-1&&(void 0===arr[j+1]&&(arr[j+1]=0),arr[j+1]+=arr[j]/baseOut|0,arr[j]%=baseOut)}return arr.reverse()}P.absoluteValue=P.abs=function(){var x=new this.constructor(this);return x.s<0&&(x.s=1),finalise(x)},P.ceil=function(){return finalise(new this.constructor(this),this.e+1,2)},P.comparedTo=P.cmp=function(y){var i,j,xdL,ydL,x=this,xd=x.d,yd=(y=new x.constructor(y)).d,xs=x.s,ys=y.s;if(!xd||!yd)return xs&&ys?xs!==ys?xs:xd===yd?0:!xd^xs<0?1:-1:NaN;if(!xd[0]||!yd[0])return xd[0]?xs:yd[0]?-ys:0;if(xs!==ys)return xs;if(x.e!==y.e)return x.e>y.e^xs<0?1:-1;for(i=0,j=(xdL=xd.length)<(ydL=yd.length)?xdL:ydL;iyd[i]^xs<0?1:-1;return xdL===ydL?0:ydLthis.d.length-2},P.isNaN=function(){return!this.s},P.isNegative=P.isNeg=function(){return this.s<0},P.isPositive=P.isPos=function(){return 0k&&(k=x.e+1)):k=NaN,k},P.round=function(){var x=this,Ctor=x.constructor;return finalise(new Ctor(x),x.e+1,Ctor.rounding)},P.sine=P.sin=function(){var pr,rm,x=this,Ctor=x.constructor;return x.isFinite()?x.isZero()?new Ctor(x):(pr=Ctor.precision,rm=Ctor.rounding,Ctor.precision=pr+Math.max(x.e,x.sd())+LOG_BASE,Ctor.rounding=1,x=function(Ctor,x){var k,len=x.d.length;if(len<3)return taylorSeries(Ctor,2,x,x);k=16<(k=1.4*Math.sqrt(len))?16:0|k,x=x.times(1/tinyPow(5,k)),x=taylorSeries(Ctor,2,x,x);for(var sin2_x,d5=new Ctor(5),d16=new Ctor(16),d20=new Ctor(20);k--;)sin2_x=x.times(x),x=x.times(d5.plus(sin2_x.times(d16.times(sin2_x).minus(d20))));return x}(Ctor,toLessThanHalfPi(Ctor,x)),Ctor.precision=pr,Ctor.rounding=rm,finalise(2=y.d.length-1&&(k=yn<0?-yn:yn)<=9007199254740991)return r=intPow(Ctor,x,k,pr),y.s<0?new Ctor(1).div(r):finalise(r,pr,rm);if((s=x.s)<0){if(eCtor.maxE+1||e=Ctor.toExpPos):(checkInt32(sd,1,MAX_DIGITS),void 0===rm?rm=Ctor.rounding:checkInt32(rm,0,8),finiteToString(x=finalise(new Ctor(x),sd,rm),sd<=x.e||x.e<=Ctor.toExpNeg,sd));return x.isNeg()&&!x.isZero()?"-"+str:str},P.toSignificantDigits=P.toSD=function(sd,rm){var Ctor=this.constructor;return void 0===sd?(sd=Ctor.precision,rm=Ctor.rounding):(checkInt32(sd,1,MAX_DIGITS),void 0===rm?rm=Ctor.rounding:checkInt32(rm,0,8)),finalise(new Ctor(this),sd,rm)},P.toString=function(){var x=this,Ctor=x.constructor,str=finiteToString(x,x.e<=Ctor.toExpNeg||x.e>=Ctor.toExpPos);return x.isNeg()&&!x.isZero()?"-"+str:str},P.truncated=P.trunc=function(){return finalise(new this.constructor(this),this.e+1,1)},P.valueOf=P.toJSON=function(){var x=this,Ctor=x.constructor,str=finiteToString(x,x.e<=Ctor.toExpNeg||x.e>=Ctor.toExpPos);return x.isNeg()?"-"+str:str};var divide=function(x,y,pr,rm,dp,base){var cmp,e,i,k,logBase,more,prod,prodL,q,qd,rem,remL,rem0,sd,t,xi,xL,yd0,yL,yz,Ctor=x.constructor,sign=x.s==y.s?1:-1,xd=x.d,yd=y.d;if(!(xd&&xd[0]&&yd&&yd[0]))return new Ctor(x.s&&y.s&&(xd?!yd||xd[0]!=yd[0]:yd)?xd&&0==xd[0]||!yd?0*sign:sign/0:NaN);for(e=base?(logBase=1,x.e-y.e):(base=BASE,logBase=LOG_BASE,mathfloor(x.e/logBase)-mathfloor(y.e/logBase)),yL=yd.length,xL=xd.length,qd=(q=new Ctor(sign)).d=[],i=0;yd[i]==(xd[i]||0);i++);if(yd[i]>(xd[i]||0)&&e--,null==pr?(sd=pr=Ctor.precision,rm=Ctor.rounding):sd=dp?pr+(x.e-y.e)+1:pr,sd<0)qd.push(1),more=!0;else{if(sd=sd/logBase+2|0,i=0,1==yL){for(yd=yd[k=0],sd++;(i=base/2&&++yd0;k=0,(cmp=compare(yd,rem,yL,remL))<0?(rem0=rem[0],yL!=remL&&(rem0=rem0*base+(rem[1]||0)),1<(k=rem0/yd0|0)?(base<=k&&(k=base-1),1==(cmp=compare(prod=multiplyInteger(yd,k,base),rem,prodL=prod.length,remL=rem.length))&&(k--,subtract(prod,yLb[i]?1:-1;break}return r}function subtract(a,b,aL,base){for(var i=0;aL--;)a[aL]-=i,i=a[aL]Ctor.maxE?(x.d=null,x.e=NaN):x.ex.constructor.maxE?(x.d=null,x.e=NaN):x.ebase-1;)xd[sd]=0,sd||(++e,xd.unshift(1));for(len=xd.length;!xd[len-1];--len);for(i=0,str="";ilen)for(e-=len;e--;)str+="0";else elen&&(arr.length=len,1)}function abs(x){return new this(x).abs()}function acos(x){return new this(x).acos()}function acosh(x){return new this(x).acosh()}function add(x,y){return new this(x).plus(y)}function asin(x){return new this(x).asin()}function asinh(x){return new this(x).asinh()}function atan(x){return new this(x).atan()}function atanh(x){return new this(x).atanh()}function atan2(y,x){y=new this(y),x=new this(x);var r,pr=this.precision,rm=this.rounding,wpr=pr+4;return y.s&&x.s?y.d||x.d?!x.d||y.isZero()?(r=x.s<0?getPi(this,pr,rm):new this(0)).s=y.s:!y.d||x.isZero()?(r=getPi(this,wpr,1).times(.5)).s=y.s:r=x.s<0?(this.precision=wpr,this.rounding=1,r=this.atan(divide(y,x,wpr,1)),x=getPi(this,wpr,1),this.precision=pr,this.rounding=rm,y.s<0?r.minus(x):r.plus(x)):this.atan(divide(y,x,wpr,1)):(r=getPi(this,wpr,1).times(0Decimal.maxE?(x.e=NaN,x.d=null):v.e=key.length&&runningStr.slice(0,key.length)===key&&(result+=escapes[escapeKeys[index]],runningStr=runningStr.slice(key.length,runningStr.length),specialCharFound=!0)}),specialCharFound||(result+=runningStr.slice(0,1),runningStr=runningStr.slice(1,runningStr.length))}();return result}},{}],57:[function(require,module,exports){!function(root){"use strict";var P={s:1,n:0,d:1};function createError(name){function errorConstructor(){var temp=Error.apply(this,arguments);temp.name=this.name=name,this.stack=temp.stack,this.message=temp.message}function IntermediateInheritor(){}return IntermediateInheritor.prototype=Error.prototype,errorConstructor.prototype=new IntermediateInheritor,errorConstructor}var DivisionByZero=Fraction.DivisionByZero=createError("DivisionByZero"),InvalidParameter=Fraction.InvalidParameter=createError("InvalidParameter");function assign(n,s){return isNaN(n=parseInt(n,10))&&throwInvalidParam(),n*s}function throwInvalidParam(){throw new InvalidParameter}var parse=function(p1,p2){var M,n=0,d=1,s=1,v=0,w=0,x=0,y=1,z=1,A=0,B=1,C=1,D=1,N=1e7;if(null!=p1)if(void 0!==p2)s=(n=p1)*(d=p2);else switch(typeof p1){case"object":"d"in p1&&"n"in p1?(n=p1.n,d=p1.d,"s"in p1&&(n*=p1.s)):0 in p1?(n=p1[0],1 in p1&&(d=p1[1])):throwInvalidParam(),s=n*d;break;case"number":if(p1<0&&(p1=-(s=p1)),p1%1==0)n=p1;else if(0>=1)1&e&&(r=r*b%m);return r}(10,len,d),t=0;t<300;t++){if(rem1===rem2)return t;rem1=10*rem1%d,rem2=10*rem2%d}return 0}function gcd(a,b){if(!a)return b;if(!b)return a;for(;;){if(!(a%=b))return b;if(!(b%=a))return a}}function Fraction(a,b){if(!(this instanceof Fraction))return new Fraction(a,b);parse(a,b),a=Fraction.REDUCE?gcd(P.d,P.n):1,this.s=P.s,this.n=P.n/a,this.d=P.d/a}Fraction.REDUCE=1,Fraction.prototype={s:1,n:0,d:1,abs:function(){return new Fraction(this.n,this.d)},neg:function(){return new Fraction(-this.s*this.n,this.d)},add:function(a,b){return parse(a,b),new Fraction(this.s*this.n*P.d+P.s*this.d*P.n,this.d*P.d)},sub:function(a,b){return parse(a,b),new Fraction(this.s*this.n*P.d-P.s*this.d*P.n,this.d*P.d)},mul:function(a,b){return parse(a,b),new Fraction(this.s*P.s*this.n*P.n,this.d*P.d)},div:function(a,b){return parse(a,b),new Fraction(this.s*P.s*this.n*P.d,this.d*P.n)},clone:function(){return new Fraction(this)},mod:function(a,b){return isNaN(this.n)||isNaN(this.d)?new Fraction(NaN):void 0===a?new Fraction(this.s*this.n%this.d,1):(parse(a,b),0===P.n&&0===this.d&&Fraction(0,0),new Fraction(this.s*(P.d*this.n)%(P.n*this.d),P.d*this.d))},gcd:function(a,b){return parse(a,b),new Fraction(gcd(P.n,this.n)*gcd(P.d,this.d),P.d*this.d)},lcm:function(a,b){return parse(a,b),0===P.n&&0===this.n?new Fraction:new Fraction(P.n*this.n,gcd(P.n,this.n)*gcd(P.d,this.d))},ceil:function(places){return places=Math.pow(10,places||0),isNaN(this.n)||isNaN(this.d)?new Fraction(NaN):new Fraction(Math.ceil(places*this.s*this.n/this.d),places)},floor:function(places){return places=Math.pow(10,places||0),isNaN(this.n)||isNaN(this.d)?new Fraction(NaN):new Fraction(Math.floor(places*this.s*this.n/this.d),places)},round:function(places){return places=Math.pow(10,places||0),isNaN(this.n)||isNaN(this.d)?new Fraction(NaN):new Fraction(Math.round(places*this.s*this.n/this.d),places)},inverse:function(){return new Fraction(this.s*this.d,this.n)},pow:function(m){return m<0?new Fraction(Math.pow(this.s*this.d,-m),Math.pow(this.n,-m)):new Fraction(Math.pow(this.s*this.n,m),Math.pow(this.d,m))},equals:function(a,b){return parse(a,b),this.s*this.n*P.d==P.s*P.n*this.d},compare:function(a,b){parse(a,b);var t=this.s*this.n*P.d-P.s*P.n*this.d;return(015 significant digits to BigNumber (value: "+x+"). Use function bignumber(x) to convert to BigNumber.");return new BigNumber(x)}},{from:"number",to:"Complex",convert:function(x){return Complex||throwNoComplex(x),new Complex(x,0)}},{from:"number",to:"string",convert:function(x){return x+""}},{from:"BigNumber",to:"Complex",convert:function(x){return Complex||throwNoComplex(x),new Complex(x.toNumber(),0)}},{from:"Fraction",to:"BigNumber",convert:function(){throw new TypeError("Cannot implicitly convert a Fraction to BigNumber or vice versa. Use function bignumber(x) to convert to BigNumber or fraction(x) to convert to Fraction.")}},{from:"Fraction",to:"Complex",convert:function(x){return Complex||throwNoComplex(x),new Complex(x.valueOf(),0)}},{from:"number",to:"Fraction",convert:function(x){Fraction||throwNoFraction(x);var f=new Fraction(x);if(f.valueOf()!==x)throw new TypeError("Cannot implicitly convert a number to a Fraction when there will be a loss of precision (value: "+x+"). Use function fraction(x) to convert to Fraction.");return f}},{from:"string",to:"number",convert:function(x){var n=Number(x);if(isNaN(n))throw new Error('Cannot convert "'+x+'" to a number');return n}},{from:"string",to:"BigNumber",convert:function(x){BigNumber||throwNoBignumber(x);try{return new BigNumber(x)}catch(err){throw new Error('Cannot convert "'+x+'" to BigNumber')}}},{from:"string",to:"Fraction",convert:function(x){Fraction||throwNoFraction(x);try{return new Fraction(x)}catch(err){throw new Error('Cannot convert "'+x+'" to Fraction')}}},{from:"string",to:"Complex",convert:function(x){Complex||throwNoComplex(x);try{return new Complex(x)}catch(err){throw new Error('Cannot convert "'+x+'" to Complex')}}},{from:"boolean",to:"number",convert:function(x){return+x}},{from:"boolean",to:"BigNumber",convert:function(x){return BigNumber||throwNoBignumber(x),new BigNumber(+x)}},{from:"boolean",to:"Fraction",convert:function(x){return Fraction||throwNoFraction(x),new Fraction(+x)}},{from:"boolean",to:"string",convert:function(x){return String(x)}},{from:"Array",to:"Matrix",convert:function(array){return DenseMatrix||function(){throw new Error("Cannot convert array into a Matrix: no class 'DenseMatrix' provided")}(),new DenseMatrix(array)}},{from:"Matrix",to:"Array",convert:function(matrix){return matrix.valueOf()}}],typed});function throwNoBignumber(x){throw new Error("Cannot convert value ".concat(x," into a BigNumber: no class 'BigNumber' provided"))}function throwNoComplex(x){throw new Error("Cannot convert value ".concat(x," into a Complex number: no class 'Complex' provided"))}function throwNoFraction(x){throw new Error("Cannot convert value ".concat(x," into a Fraction, no class 'Fraction' provided."))}exports.createTyped=createTyped},{"../../utils/factory":931,"../../utils/is":933,"../../utils/number":937,"typed-function":946}],66:[function(require,module,exports){"use strict";function _typeof(obj){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}Object.defineProperty(exports,"__esModule",{value:!0}),exports.all=void 0;var allFactories=function(obj){if(obj&&obj.__esModule)return obj;if(null===obj||"object"!==_typeof(obj)&&"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache();if(cache&&cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){var desc;Object.prototype.hasOwnProperty.call(obj,key)&&((desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null)&&(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key])}newObj.default=obj,cache&&cache.set(obj,newObj);return newObj}(require("../factoriesAny"));function _getRequireWildcardCache(){if("function"!=typeof WeakMap)return null;var cache=new WeakMap;return _getRequireWildcardCache=function(){return cache},cache}exports.all=allFactories},{"../factoriesAny":658}],67:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.config=void 0;var _config=require("../core/config"),_config2=require("../core/function/config");function _extends(){return(_extends=Object.assign||function(target){for(var i=1;i=this.max?this.message="Index out of range ("+this.index+" > "+(this.max-1)+")":this.message="Index out of range ("+this.index+")",this.stack=(new Error).stack}Object.defineProperty(exports,"__esModule",{value:!0}),((exports.IndexError=IndexError).prototype=new RangeError).constructor=RangeError,IndexError.prototype.name="IndexError",IndexError.prototype.isIndexError=!0},{}],401:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createHelpClass=void 0;var _is=require("../utils/is"),_object=require("../utils/object"),_string=require("../utils/string"),dependencies=["parse"],createHelpClass=(0,require("../utils/factory").factory)("Help",dependencies,function(_ref){var parse=_ref.parse;function Help(doc){if(!(this instanceof Help))throw new SyntaxError("Constructor must be called with the new operator");if(!doc)throw new Error('Argument "doc" missing');this.doc=doc}return Help.prototype.type="Help",Help.prototype.isHelp=!0,Help.prototype.toString=function(){var doc=this.doc||{},desc="\n";if(doc.name&&(desc+="Name: "+doc.name+"\n\n"),doc.category&&(desc+="Category: "+doc.category+"\n\n"),doc.description&&(desc+="Description:\n "+doc.description+"\n\n"),doc.syntax&&(desc+="Syntax:\n "+doc.syntax.join("\n ")+"\n\n"),doc.examples){desc+="Examples:\n";for(var scope={},i=0;i1, -1 when x<0, and 0 when x=0.",examples:["sign(3.5)","sign(-4.2)","sign(0)"],seealso:["abs"]}},{}],474:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.sqrtDocs=void 0;exports.sqrtDocs={name:"sqrt",category:"Arithmetic",syntax:["sqrt(x)"],description:"Compute the square root value. If x = y * y, then y is the square root of x.",examples:["sqrt(25)","5 * 5","sqrt(-1)"],seealso:["square","sqrtm","multiply","nthRoot","nthRoots","pow"]}},{}],475:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.sqrtmDocs=void 0;exports.sqrtmDocs={name:"sqrtm",category:"Arithmetic",syntax:["sqrtm(x)"],description:"Calculate the principal square root of a square matrix. The principal square root matrix `X` of another matrix `A` is such that `X * X = A`.",examples:["sqrtm([[1, 2], [3, 4]])"],seealso:["sqrt","abs","square","multiply"]}},{}],476:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.squareDocs=void 0;exports.squareDocs={name:"square",category:"Arithmetic",syntax:["square(x)"],description:"Compute the square of a value. The square of x is x * x.",examples:["square(3)","sqrt(9)","3^2","3 * 3"],seealso:["multiply","pow","sqrt","cube"]}},{}],477:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.subtractDocs=void 0;exports.subtractDocs={name:"subtract",category:"Operators",syntax:["x - y","subtract(x, y)"],description:"subtract two values.",examples:["a = 5.3 - 2","a + 2","2/3 - 1/6","2 * 3 - 3","2.1 km - 500m"],seealso:["add"]}},{}],478:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.unaryMinusDocs=void 0;exports.unaryMinusDocs={name:"unaryMinus",category:"Operators",syntax:["-x","unaryMinus(x)"],description:"Inverse the sign of a value. Converts booleans and strings to numbers.",examples:["-4.5","-(-5.6)",'-"22"'],seealso:["add","subtract","unaryPlus"]}},{}],479:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.unaryPlusDocs=void 0;exports.unaryPlusDocs={name:"unaryPlus",category:"Operators",syntax:["+x","unaryPlus(x)"],description:"Converts booleans and strings to numbers.",examples:["+true",'+"2"'],seealso:["add","subtract","unaryMinus"]}},{}],480:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.xgcdDocs=void 0;exports.xgcdDocs={name:"xgcd",category:"Arithmetic",syntax:["xgcd(a, b)"],description:"Calculate the extended greatest common divisor for two values. The result is an array [d, x, y] with 3 entries, where d is the greatest common divisor, and d = x * a + y * b.",examples:["xgcd(8, 12)","gcd(8, 12)","xgcd(36163, 21199)"],seealso:["gcd","lcm"]}},{}],481:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.bitAndDocs=void 0;exports.bitAndDocs={name:"bitAnd",category:"Bitwise",syntax:["x & y","bitAnd(x, y)"],description:"Bitwise AND operation. Performs the logical AND operation on each pair of the corresponding bits of the two given values by multiplying them. If both bits in the compared position are 1, the bit in the resulting binary representation is 1, otherwise, the result is 0",examples:["5 & 3","bitAnd(53, 131)","[1, 12, 31] & 42"],seealso:["bitNot","bitOr","bitXor","leftShift","rightArithShift","rightLogShift"]}},{}],482:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.bitNotDocs=void 0;exports.bitNotDocs={name:"bitNot",category:"Bitwise",syntax:["~x","bitNot(x)"],description:"Bitwise NOT operation. Performs a logical negation on each bit of the given value. Bits that are 0 become 1, and those that are 1 become 0.",examples:["~1","~2","bitNot([2, -3, 4])"],seealso:["bitAnd","bitOr","bitXor","leftShift","rightArithShift","rightLogShift"]}},{}],483:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.bitOrDocs=void 0;exports.bitOrDocs={name:"bitOr",category:"Bitwise",syntax:["x | y","bitOr(x, y)"],description:"Bitwise OR operation. Performs the logical inclusive OR operation on each pair of corresponding bits of the two given values. The result in each position is 1 if the first bit is 1 or the second bit is 1 or both bits are 1, otherwise, the result is 0.",examples:["5 | 3","bitOr([1, 2, 3], 4)"],seealso:["bitAnd","bitNot","bitXor","leftShift","rightArithShift","rightLogShift"]}},{}],484:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.bitXorDocs=void 0;exports.bitXorDocs={name:"bitXor",category:"Bitwise",syntax:["bitXor(x, y)"],description:"Bitwise XOR operation, exclusive OR. Performs the logical exclusive OR operation on each pair of corresponding bits of the two given values. The result in each position is 1 if only the first bit is 1 or only the second bit is 1, but will be 0 if both are 0 or both are 1.",examples:["bitOr(1, 2)","bitXor([2, 3, 4], 4)"],seealso:["bitAnd","bitNot","bitOr","leftShift","rightArithShift","rightLogShift"]}},{}],485:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.leftShiftDocs=void 0;exports.leftShiftDocs={name:"leftShift",category:"Bitwise",syntax:["x << y","leftShift(x, y)"],description:"Bitwise left logical shift of a value x by y number of bits.",examples:["4 << 1","8 >> 1"],seealso:["bitAnd","bitNot","bitOr","bitXor","rightArithShift","rightLogShift"]}},{}],486:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.rightArithShiftDocs=void 0;exports.rightArithShiftDocs={name:"rightArithShift",category:"Bitwise",syntax:["x >> y","rightArithShift(x, y)"],description:"Bitwise right arithmetic shift of a value x by y number of bits.",examples:["8 >> 1","4 << 1","-12 >> 2"],seealso:["bitAnd","bitNot","bitOr","bitXor","leftShift","rightLogShift"]}},{}],487:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.rightLogShiftDocs=void 0;exports.rightLogShiftDocs={name:"rightLogShift",category:"Bitwise",syntax:["x >>> y","rightLogShift(x, y)"],description:"Bitwise right logical shift of a value x by y number of bits.",examples:["8 >>> 1","4 << 1","-12 >>> 2"],seealso:["bitAnd","bitNot","bitOr","bitXor","leftShift","rightArithShift"]}},{}],488:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.bellNumbersDocs=void 0;exports.bellNumbersDocs={name:"bellNumbers",category:"Combinatorics",syntax:["bellNumbers(n)"],description:"The Bell Numbers count the number of partitions of a set. A partition is a pairwise disjoint subset of S whose union is S. `bellNumbers` only takes integer arguments. The following condition must be enforced: n >= 0.",examples:["bellNumbers(3)","bellNumbers(8)"],seealso:["stirlingS2"]}},{}],489:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.catalanDocs=void 0;exports.catalanDocs={name:"catalan",category:"Combinatorics",syntax:["catalan(n)"],description:"The Catalan Numbers enumerate combinatorial structures of many different types. catalan only takes integer arguments. The following condition must be enforced: n >= 0.",examples:["catalan(3)","catalan(8)"],seealso:["bellNumbers"]}},{}],490:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.compositionDocs=void 0;exports.compositionDocs={name:"composition",category:"Combinatorics",syntax:["composition(n, k)"],description:"The composition counts of n into k parts. composition only takes integer arguments. The following condition must be enforced: k <= n.",examples:["composition(5, 3)"],seealso:["combinations"]}},{}],491:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.stirlingS2Docs=void 0;exports.stirlingS2Docs={name:"stirlingS2",category:"Combinatorics",syntax:["stirlingS2(n, k)"],description:"he Stirling numbers of the second kind, counts the number of ways to partition a set of n labelled objects into k nonempty unlabelled subsets. `stirlingS2` only takes integer arguments. The following condition must be enforced: k <= n. If n = k or k = 1, then s(n,k) = 1.",examples:["stirlingS2(5, 3)"],seealso:["bellNumbers"]}},{}],492:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.argDocs=void 0;exports.argDocs={name:"arg",category:"Complex",syntax:["arg(x)"],description:"Compute the argument of a complex value. If x = a+bi, the argument is computed as atan2(b, a).",examples:["arg(2 + 2i)","atan2(3, 2)","arg(2 + 3i)"],seealso:["re","im","conj","abs"]}},{}],493:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.conjDocs=void 0;exports.conjDocs={name:"conj",category:"Complex",syntax:["conj(x)"],description:"Compute the complex conjugate of a complex value. If x = a+bi, the complex conjugate is a-bi.",examples:["conj(2 + 3i)","conj(2 - 3i)","conj(-5.2i)"],seealso:["re","im","abs","arg"]}},{}],494:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.imDocs=void 0;exports.imDocs={name:"im",category:"Complex",syntax:["im(x)"],description:"Get the imaginary part of a complex number.",examples:["im(2 + 3i)","re(2 + 3i)","im(-5.2i)","im(2.4)"],seealso:["re","conj","abs","arg"]}},{}],495:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.reDocs=void 0;exports.reDocs={name:"re",category:"Complex",syntax:["re(x)"],description:"Get the real part of a complex number.",examples:["re(2 + 3i)","im(2 + 3i)","re(-5.2i)","re(2.4)"],seealso:["im","conj","abs","arg"]}},{}],496:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.evaluateDocs=void 0;exports.evaluateDocs={name:"evaluate",category:"Expression",syntax:["evaluate(expression)","evaluate([expr1, expr2, expr3, ...])"],description:"Evaluate an expression or an array with expressions.",examples:['evaluate("2 + 3")','evaluate("sqrt(" + 4 + ")")'],seealso:[]}},{}],497:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.helpDocs=void 0;exports.helpDocs={name:"help",category:"Expression",syntax:["help(object)","help(string)"],description:"Display documentation on a function or data type.",examples:["help(sqrt)",'help("complex")'],seealso:[]}},{}],498:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.distanceDocs=void 0;exports.distanceDocs={name:"distance",category:"Geometry",syntax:["distance([x1, y1], [x2, y2])","distance([[x1, y1], [x2, y2]])"],description:"Calculates the Euclidean distance between two points.",examples:["distance([0,0], [4,4])","distance([[0,0], [4,4]])"],seealso:[]}},{}],499:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.intersectDocs=void 0;exports.intersectDocs={name:"intersect",category:"Geometry",syntax:["intersect(expr1, expr2, expr3, expr4)","intersect(expr1, expr2, expr3)"],description:"Computes the intersection point of lines and/or planes.",examples:["intersect([0, 0], [10, 10], [10, 0], [0, 10])","intersect([1, 0, 1], [4, -2, 2], [1, 1, 1, 6])"],seealso:[]}},{}],500:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.andDocs=void 0;exports.andDocs={name:"and",category:"Logical",syntax:["x and y","and(x, y)"],description:"Logical and. Test whether two values are both defined with a nonzero/nonempty value.",examples:["true and false","true and true","2 and 4"],seealso:["not","or","xor"]}},{}],501:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.notDocs=void 0;exports.notDocs={name:"not",category:"Logical",syntax:["not x","not(x)"],description:"Logical not. Flips the boolean value of given argument.",examples:["not true","not false","not 2","not 0"],seealso:["and","or","xor"]}},{}],502:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.orDocs=void 0;exports.orDocs={name:"or",category:"Logical",syntax:["x or y","or(x, y)"],description:"Logical or. Test if at least one value is defined with a nonzero/nonempty value.",examples:["true or false","false or false","0 or 4"],seealso:["not","and","xor"]}},{}],503:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.xorDocs=void 0;exports.xorDocs={name:"xor",category:"Logical",syntax:["x xor y","xor(x, y)"],description:"Logical exclusive or, xor. Test whether one and only one value is defined with a nonzero/nonempty value.",examples:["true xor false","false xor false","true xor true","0 xor 4"],seealso:["not","and","or"]}},{}],504:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.columnDocs=void 0;exports.columnDocs={name:"column",category:"Matrix",syntax:["column(x, index)"],description:"Return a column from a matrix or array.",examples:["A = [[1, 2], [3, 4]]","column(A, 1)","column(A, 2)"],seealso:["row"]}},{}],505:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.concatDocs=void 0;exports.concatDocs={name:"concat",category:"Matrix",syntax:["concat(A, B, C, ...)","concat(A, B, C, ..., dim)"],description:"Concatenate matrices. By default, the matrices are concatenated by the last dimension. The dimension on which to concatenate can be provided as last argument.",examples:["A = [1, 2; 5, 6]","B = [3, 4; 7, 8]","concat(A, B)","concat(A, B, 1)","concat(A, B, 2)"],seealso:["det","diag","identity","inv","ones","range","size","squeeze","subset","trace","transpose","zeros"]}},{}],506:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.crossDocs=void 0;exports.crossDocs={name:"cross",category:"Matrix",syntax:["cross(A, B)"],description:"Calculate the cross product for two vectors in three dimensional space.",examples:["cross([1, 1, 0], [0, 1, 1])","cross([3, -3, 1], [4, 9, 2])","cross([2, 3, 4], [5, 6, 7])"],seealso:["multiply","dot"]}},{}],507:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ctransposeDocs=void 0;exports.ctransposeDocs={name:"ctranspose",category:"Matrix",syntax:["x'","ctranspose(x)"],description:"Complex Conjugate and Transpose a matrix",examples:["a = [1, 2, 3; 4, 5, 6]","a'","ctranspose(a)"],seealso:["concat","det","diag","identity","inv","ones","range","size","squeeze","subset","trace","zeros"]}},{}],508:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.detDocs=void 0;exports.detDocs={name:"det",category:"Matrix",syntax:["det(x)"],description:"Calculate the determinant of a matrix",examples:["det([1, 2; 3, 4])","det([-2, 2, 3; -1, 1, 3; 2, 0, -1])"],seealso:["concat","diag","identity","inv","ones","range","size","squeeze","subset","trace","transpose","zeros"]}},{}],509:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.diagDocs=void 0;exports.diagDocs={name:"diag",category:"Matrix",syntax:["diag(x)","diag(x, k)"],description:"Create a diagonal matrix or retrieve the diagonal of a matrix. When x is a vector, a matrix with the vector values on the diagonal will be returned. When x is a matrix, a vector with the diagonal values of the matrix is returned. When k is provided, the k-th diagonal will be filled in or retrieved, if k is positive, the values are placed on the super diagonal. When k is negative, the values are placed on the sub diagonal.",examples:["diag(1:3)","diag(1:3, 1)","a = [1, 2, 3; 4, 5, 6; 7, 8, 9]","diag(a)"],seealso:["concat","det","identity","inv","ones","range","size","squeeze","subset","trace","transpose","zeros"]}},{}],510:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.dotDocs=void 0;exports.dotDocs={name:"dot",category:"Matrix",syntax:["dot(A, B)","A * B"],description:"Calculate the dot product of two vectors. The dot product of A = [a1, a2, a3, ..., an] and B = [b1, b2, b3, ..., bn] is defined as dot(A, B) = a1 * b1 + a2 * b2 + a3 * b3 + ... + an * bn",examples:["dot([2, 4, 1], [2, 2, 3])","[2, 4, 1] * [2, 2, 3]"],seealso:["multiply","cross"]}},{}],511:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.eigsDocs=void 0;exports.eigsDocs={name:"eigs",category:"Matrix",syntax:["eigs(x)"],description:"Calculate the eigenvalues and eigenvectors of a real symmetric matrix",examples:["eigs([[5, 2.3], [2.3, 1]])"],seealso:["inv"]}},{}],512:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.filterDocs=void 0;exports.filterDocs={name:"filter",category:"Matrix",syntax:["filter(x, test)"],description:"Filter items in a matrix.",examples:["isPositive(x) = x > 0","filter([6, -2, -1, 4, 3], isPositive)","filter([6, -2, 0, 1, 0], x != 0)"],seealso:["sort","map","forEach"]}},{}],513:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.flattenDocs=void 0;exports.flattenDocs={name:"flatten",category:"Matrix",syntax:["flatten(x)"],description:"Flatten a multi dimensional matrix into a single dimensional matrix.",examples:["a = [1, 2, 3; 4, 5, 6]","size(a)","b = flatten(a)","size(b)"],seealso:["concat","resize","size","squeeze"]}},{}],514:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.forEachDocs=void 0;exports.forEachDocs={name:"forEach",category:"Matrix",syntax:["forEach(x, callback)"],description:"Iterates over all elements of a matrix/array, and executes the given callback function.",examples:["forEach([1, 2, 3], function(val) { console.log(val) })"],seealso:["map","sort","filter"]}},{}],515:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getMatrixDataTypeDocs=void 0;exports.getMatrixDataTypeDocs={name:"getMatrixDataType",category:"Matrix",syntax:["getMatrixDataType(x)"],description:'Find the data type of all elements in a matrix or array, for example "number" if all items are a number and "Complex" if all values are complex numbers. If a matrix contains more than one data type, it will return "mixed".',examples:["getMatrixDataType([1, 2, 3])","getMatrixDataType([[5 cm], [2 inch]])",'getMatrixDataType([1, "text"])',"getMatrixDataType([1, bignumber(4)])"],seealso:["matrix","sparse","typeOf"]}},{}],516:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.identityDocs=void 0;exports.identityDocs={name:"identity",category:"Matrix",syntax:["identity(n)","identity(m, n)","identity([m, n])"],description:"Returns the identity matrix with size m-by-n. The matrix has ones on the diagonal and zeros elsewhere.",examples:["identity(3)","identity(3, 5)","a = [1, 2, 3; 4, 5, 6]","identity(size(a))"],seealso:["concat","det","diag","inv","ones","range","size","squeeze","subset","trace","transpose","zeros"]}},{}],517:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.invDocs=void 0;exports.invDocs={name:"inv",category:"Matrix",syntax:["inv(x)"],description:"Calculate the inverse of a matrix",examples:["inv([1, 2; 3, 4])","inv(4)","1 / 4"],seealso:["concat","det","diag","identity","ones","range","size","squeeze","subset","trace","transpose","zeros"]}},{}],518:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.kronDocs=void 0;exports.kronDocs={name:"kron",category:"Matrix",syntax:["kron(x, y)"],description:"Calculates the kronecker product of 2 matrices or vectors.",examples:["kron([[1, 0], [0, 1]], [[1, 2], [3, 4]])","kron([1,1], [2,3,4])"],seealso:["multiply","dot","cross"]}},{}],519:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.mapDocs=void 0;exports.mapDocs={name:"map",category:"Matrix",syntax:["map(x, callback)"],description:"Create a new matrix or array with the results of the callback function executed on each entry of the matrix/array.",examples:["map([1, 2, 3], square)"],seealso:["filter","forEach"]}},{}],520:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.onesDocs=void 0;exports.onesDocs={name:"ones",category:"Matrix",syntax:["ones(m)","ones(m, n)","ones(m, n, p, ...)","ones([m])","ones([m, n])","ones([m, n, p, ...])"],description:"Create a matrix containing ones.",examples:["ones(3)","ones(3, 5)","ones([2,3]) * 4.5","a = [1, 2, 3; 4, 5, 6]","ones(size(a))"],seealso:["concat","det","diag","identity","inv","range","size","squeeze","subset","trace","transpose","zeros"]}},{}],521:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.partitionSelectDocs=void 0;exports.partitionSelectDocs={name:"partitionSelect",category:"Matrix",syntax:["partitionSelect(x, k)","partitionSelect(x, k, compare)"],description:"Partition-based selection of an array or 1D matrix. Will find the kth smallest value, and mutates the input array. Uses Quickselect.",examples:["partitionSelect([5, 10, 1], 2)",'partitionSelect(["C", "B", "A", "D"], 1)'],seealso:["sort"]}},{}],522:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.rangeDocs=void 0;exports.rangeDocs={name:"range",category:"Type",syntax:["start:end","start:step:end","range(start, end)","range(start, end, step)","range(string)"],description:"Create a range. Lower bound of the range is included, upper bound is excluded.",examples:["1:5","3:-1:-3","range(3, 7)","range(0, 12, 2)",'range("4:10")',"a = [1, 2, 3, 4; 5, 6, 7, 8]","a[1:2, 1:2]"],seealso:["concat","det","diag","identity","inv","ones","size","squeeze","subset","trace","transpose","zeros"]}},{}],523:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.reshapeDocs=void 0;exports.reshapeDocs={name:"reshape",category:"Matrix",syntax:["reshape(x, sizes)"],description:"Reshape a multi dimensional array to fit the specified dimensions.",examples:["reshape([1, 2, 3, 4, 5, 6], [2, 3])","reshape([[1, 2], [3, 4]], [1, 4])","reshape([[1, 2], [3, 4]], [4])"],seealso:["size","squeeze","resize"]}},{}],524:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.resizeDocs=void 0;exports.resizeDocs={name:"resize",category:"Matrix",syntax:["resize(x, size)","resize(x, size, defaultValue)"],description:"Resize a matrix.",examples:["resize([1,2,3,4,5], [3])","resize([1,2,3], [5])","resize([1,2,3], [5], -1)","resize(2, [2, 3])",'resize("hello", [8], "!")'],seealso:["size","subset","squeeze","reshape"]}},{}],525:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.rowDocs=void 0;exports.rowDocs={name:"row",category:"Matrix",syntax:["row(x, index)"],description:"Return a row from a matrix or array.",examples:["A = [[1, 2], [3, 4]]","row(A, 1)","row(A, 2)"],seealso:["column"]}},{}],526:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.sizeDocs=void 0;exports.sizeDocs={name:"size",category:"Matrix",syntax:["size(x)"],description:"Calculate the size of a matrix.",examples:["size(2.3)",'size("hello world")',"a = [1, 2; 3, 4; 5, 6]","size(a)","size(1:6)"],seealso:["concat","det","diag","identity","inv","ones","range","squeeze","subset","trace","transpose","zeros"]}},{}],527:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.sortDocs=void 0;exports.sortDocs={name:"sort",category:"Matrix",syntax:["sort(x)","sort(x, compare)"],description:'Sort the items in a matrix. Compare can be a string "asc", "desc", "natural", or a custom sort function.',examples:["sort([5, 10, 1])",'sort(["C", "B", "A", "D"])',"sortByLength(a, b) = size(a)[1] - size(b)[1]",'sort(["Langdon", "Tom", "Sara"], sortByLength)','sort(["10", "1", "2"], "natural")'],seealso:["map","filter","forEach"]}},{}],528:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.squeezeDocs=void 0;exports.squeezeDocs={name:"squeeze",category:"Matrix",syntax:["squeeze(x)"],description:"Remove inner and outer singleton dimensions from a matrix.",examples:["a = zeros(3,2,1)","size(squeeze(a))","b = zeros(1,1,3)","size(squeeze(b))"],seealso:["concat","det","diag","identity","inv","ones","range","size","subset","trace","transpose","zeros"]}},{}],529:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.subsetDocs=void 0;exports.subsetDocs={name:"subset",category:"Matrix",syntax:["value(index)","value(index) = replacement","subset(value, [index])","subset(value, [index], replacement)"],description:"Get or set a subset of a matrix or string. Indexes are one-based. Both the ranges lower-bound and upper-bound are included.",examples:["d = [1, 2; 3, 4]","e = []","e[1, 1:2] = [5, 6]","e[2, :] = [7, 8]","f = d * e","f[2, 1]","f[:, 1]"],seealso:["concat","det","diag","identity","inv","ones","range","size","squeeze","trace","transpose","zeros"]}},{}],530:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.traceDocs=void 0;exports.traceDocs={name:"trace",category:"Matrix",syntax:["trace(A)"],description:"Calculate the trace of a matrix: the sum of the elements on the main diagonal of a square matrix.",examples:["A = [1, 2, 3; -1, 2, 3; 2, 0, 3]","trace(A)"],seealso:["concat","det","diag","identity","inv","ones","range","size","squeeze","subset","transpose","zeros"]}},{}],531:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.transposeDocs=void 0;exports.transposeDocs={name:"transpose",category:"Matrix",syntax:["x'","transpose(x)"],description:"Transpose a matrix",examples:["a = [1, 2, 3; 4, 5, 6]","a'","transpose(a)"],seealso:["concat","det","diag","identity","inv","ones","range","size","squeeze","subset","trace","zeros"]}},{}],532:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.zerosDocs=void 0;exports.zerosDocs={name:"zeros",category:"Matrix",syntax:["zeros(m)","zeros(m, n)","zeros(m, n, p, ...)","zeros([m])","zeros([m, n])","zeros([m, n, p, ...])"],description:"Create a matrix containing zeros.",examples:["zeros(3)","zeros(3, 5)","a = [1, 2, 3; 4, 5, 6]","zeros(size(a))"],seealso:["concat","det","diag","identity","inv","ones","range","size","squeeze","subset","trace","transpose"]}},{}],533:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.combinationsDocs=void 0;exports.combinationsDocs={name:"combinations",category:"Probability",syntax:["combinations(n, k)"],description:"Compute the number of combinations of n items taken k at a time",examples:["combinations(7, 5)"],seealso:["combinationsWithRep","permutations","factorial"]}},{}],534:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.combinationsWithRepDocs=void 0;exports.combinationsWithRepDocs={name:"combinationsWithRep",category:"Probability",syntax:["combinationsWithRep(n, k)"],description:"Compute the number of combinations of n items taken k at a time with replacements.",examples:["combinationsWithRep(7, 5)"],seealso:["combinations","permutations","factorial"]}},{}],535:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.factorialDocs=void 0;exports.factorialDocs={name:"factorial",category:"Probability",syntax:["n!","factorial(n)"],description:"Compute the factorial of a value",examples:["5!","5 * 4 * 3 * 2 * 1","3!"],seealso:["combinations","combinationsWithRep","permutations","gamma"]}},{}],536:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.gammaDocs=void 0;exports.gammaDocs={name:"gamma",category:"Probability",syntax:["gamma(n)"],description:"Compute the gamma function. For small values, the Lanczos approximation is used, and for large values the extended Stirling approximation.",examples:["gamma(4)","3!","gamma(1/2)","sqrt(pi)"],seealso:["factorial"]}},{}],537:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.kldivergenceDocs=void 0;exports.kldivergenceDocs={name:"kldivergence",category:"Probability",syntax:["kldivergence(x, y)"],description:"Calculate the Kullback-Leibler (KL) divergence between two distributions.",examples:["kldivergence([0.7,0.5,0.4], [0.2,0.9,0.5])"],seealso:[]}},{}],538:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.multinomialDocs=void 0;exports.multinomialDocs={name:"multinomial",category:"Probability",syntax:["multinomial(A)"],description:"Multinomial Coefficients compute the number of ways of picking a1, a2, ..., ai unordered outcomes from `n` possibilities. multinomial takes one array of integers as an argument. The following condition must be enforced: every ai > 0.",examples:["multinomial([1, 2, 1])"],seealso:["combinations","factorial"]}},{}],539:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.permutationsDocs=void 0;exports.permutationsDocs={name:"permutations",category:"Probability",syntax:["permutations(n)","permutations(n, k)"],description:"Compute the number of permutations of n items taken k at a time",examples:["permutations(5)","permutations(5, 3)"],seealso:["combinations","combinationsWithRep","factorial"]}},{}],540:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.pickRandomDocs=void 0;exports.pickRandomDocs={name:"pickRandom",category:"Probability",syntax:["pickRandom(array)","pickRandom(array, number)","pickRandom(array, weights)","pickRandom(array, number, weights)","pickRandom(array, weights, number)"],description:"Pick a random entry from a given array.",examples:["pickRandom(0:10)","pickRandom([1, 3, 1, 6])","pickRandom([1, 3, 1, 6], 2)","pickRandom([1, 3, 1, 6], [2, 3, 2, 1])","pickRandom([1, 3, 1, 6], 2, [2, 3, 2, 1])","pickRandom([1, 3, 1, 6], [2, 3, 2, 1], 2)"],seealso:["random","randomInt"]}},{}],541:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.randomDocs=void 0;exports.randomDocs={name:"random",category:"Probability",syntax:["random()","random(max)","random(min, max)","random(size)","random(size, max)","random(size, min, max)"],description:"Return a random number.",examples:["random()","random(10, 20)","random([2, 3])"],seealso:["pickRandom","randomInt"]}},{}],542:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.randomIntDocs=void 0;exports.randomIntDocs={name:"randomInt",category:"Probability",syntax:["randomInt(max)","randomInt(min, max)","randomInt(size)","randomInt(size, max)","randomInt(size, min, max)"],description:"Return a random integer number",examples:["randomInt(10, 20)","randomInt([2, 3], 10)"],seealso:["pickRandom","random"]}},{}],543:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.compareDocs=void 0;exports.compareDocs={name:"compare",category:"Relational",syntax:["compare(x, y)"],description:"Compare two values. Returns 1 when x > y, -1 when x < y, and 0 when x == y.",examples:["compare(2, 3)","compare(3, 2)","compare(2, 2)","compare(5cm, 40mm)","compare(2, [1, 2, 3])"],seealso:["equal","unequal","smaller","smallerEq","largerEq","compareNatural","compareText"]}},{}],544:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.compareNaturalDocs=void 0;exports.compareNaturalDocs={name:"compareNatural",category:"Relational",syntax:["compareNatural(x, y)"],description:"Compare two values of any type in a deterministic, natural way. Returns 1 when x > y, -1 when x < y, and 0 when x == y.",examples:["compareNatural(2, 3)","compareNatural(3, 2)","compareNatural(2, 2)","compareNatural(5cm, 40mm)",'compareNatural("2", "10")',"compareNatural(2 + 3i, 2 + 4i)","compareNatural([1, 2, 4], [1, 2, 3])","compareNatural([1, 5], [1, 2, 3])","compareNatural([1, 2], [1, 2])","compareNatural({a: 2}, {a: 4})"],seealso:["equal","unequal","smaller","smallerEq","largerEq","compare","compareText"]}},{}],545:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.compareTextDocs=void 0;exports.compareTextDocs={name:"compareText",category:"Relational",syntax:["compareText(x, y)"],description:"Compare two strings lexically. Comparison is case sensitive. Returns 1 when x > y, -1 when x < y, and 0 when x == y.",examples:['compareText("B", "A")','compareText("A", "B")','compareText("A", "A")','compareText("2", "10")','compare("2", "10")',"compare(2, 10)",'compareNatural("2", "10")','compareText("B", ["A", "B", "C"])'],seealso:["compare","compareNatural"]}},{}],546:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.deepEqualDocs=void 0;exports.deepEqualDocs={name:"deepEqual",category:"Relational",syntax:["deepEqual(x, y)"],description:"Check equality of two matrices element wise. Returns true if the size of both matrices is equal and when and each of the elements are equal.",examples:["deepEqual([1,3,4], [1,3,4])","deepEqual([1,3,4], [1,3])"],seealso:["equal","unequal","smaller","larger","smallerEq","largerEq","compare"]}},{}],547:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.equalDocs=void 0;exports.equalDocs={name:"equal",category:"Relational",syntax:["x == y","equal(x, y)"],description:"Check equality of two values. Returns true if the values are equal, and false if not.",examples:["2+2 == 3","2+2 == 4","a = 3.2","b = 6-2.8","a == b","50cm == 0.5m"],seealso:["unequal","smaller","larger","smallerEq","largerEq","compare","deepEqual","equalText"]}},{}],548:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.equalTextDocs=void 0;exports.equalTextDocs={name:"equalText",category:"Relational",syntax:["equalText(x, y)"],description:"Check equality of two strings. Comparison is case sensitive. Returns true if the values are equal, and false if not.",examples:['equalText("Hello", "Hello")','equalText("a", "A")','equal("2e3", "2000")','equalText("2e3", "2000")','equalText("B", ["A", "B", "C"])'],seealso:["compare","compareNatural","compareText","equal"]}},{}],549:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.largerDocs=void 0;exports.largerDocs={name:"larger",category:"Relational",syntax:["x > y","larger(x, y)"],description:"Check if value x is larger than y. Returns true if x is larger than y, and false if not.",examples:["2 > 3","5 > 2*2","a = 3.3","b = 6-2.8","(a > b)","(b < a)","5 cm > 2 inch"],seealso:["equal","unequal","smaller","smallerEq","largerEq","compare"]}},{}],550:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.largerEqDocs=void 0;exports.largerEqDocs={name:"largerEq",category:"Relational",syntax:["x >= y","largerEq(x, y)"],description:"Check if value x is larger or equal to y. Returns true if x is larger or equal to y, and false if not.",examples:["2 >= 1+1","2 > 1+1","a = 3.2","b = 6-2.8","(a >= b)"],seealso:["equal","unequal","smallerEq","smaller","compare"]}},{}],551:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.smallerDocs=void 0;exports.smallerDocs={name:"smaller",category:"Relational",syntax:["x < y","smaller(x, y)"],description:"Check if value x is smaller than value y. Returns true if x is smaller than y, and false if not.",examples:["2 < 3","5 < 2*2","a = 3.3","b = 6-2.8","(a < b)","5 cm < 2 inch"],seealso:["equal","unequal","larger","smallerEq","largerEq","compare"]}},{}],552:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.smallerEqDocs=void 0;exports.smallerEqDocs={name:"smallerEq",category:"Relational",syntax:["x <= y","smallerEq(x, y)"],description:"Check if value x is smaller or equal to value y. Returns true if x is smaller than y, and false if not.",examples:["2 <= 1+1","2 < 1+1","a = 3.2","b = 6-2.8","(a <= b)"],seealso:["equal","unequal","larger","smaller","largerEq","compare"]}},{}],553:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.unequalDocs=void 0;exports.unequalDocs={name:"unequal",category:"Relational",syntax:["x != y","unequal(x, y)"],description:"Check unequality of two values. Returns true if the values are unequal, and false if they are equal.",examples:["2+2 != 3","2+2 != 4","a = 3.2","b = 6-2.8","a != b","50cm != 0.5m","5 cm != 2 inch"],seealso:["equal","smaller","larger","smallerEq","largerEq","compare","deepEqual"]}},{}],554:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.setCartesianDocs=void 0;exports.setCartesianDocs={name:"setCartesian",category:"Set",syntax:["setCartesian(set1, set2)"],description:"Create the cartesian product of two (multi)sets. Multi-dimension arrays will be converted to single-dimension arrays before the operation.",examples:["setCartesian([1, 2], [3, 4])"],seealso:["setUnion","setIntersect","setDifference","setPowerset"]}},{}],555:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.setDifferenceDocs=void 0;exports.setDifferenceDocs={name:"setDifference",category:"Set",syntax:["setDifference(set1, set2)"],description:"Create the difference of two (multi)sets: every element of set1, that is not the element of set2. Multi-dimension arrays will be converted to single-dimension arrays before the operation.",examples:["setDifference([1, 2, 3, 4], [3, 4, 5, 6])","setDifference([[1, 2], [3, 4]], [[3, 4], [5, 6]])"],seealso:["setUnion","setIntersect","setSymDifference"]}},{}],556:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.setDistinctDocs=void 0;exports.setDistinctDocs={name:"setDistinct",category:"Set",syntax:["setDistinct(set)"],description:"Collect the distinct elements of a multiset. A multi-dimension array will be converted to a single-dimension array before the operation.",examples:["setDistinct([1, 1, 1, 2, 2, 3])"],seealso:["setMultiplicity"]}},{}],557:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.setIntersectDocs=void 0;exports.setIntersectDocs={name:"setIntersect",category:"Set",syntax:["setIntersect(set1, set2)"],description:"Create the intersection of two (multi)sets. Multi-dimension arrays will be converted to single-dimension arrays before the operation.",examples:["setIntersect([1, 2, 3, 4], [3, 4, 5, 6])","setIntersect([[1, 2], [3, 4]], [[3, 4], [5, 6]])"],seealso:["setUnion","setDifference"]}},{}],558:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.setIsSubsetDocs=void 0;exports.setIsSubsetDocs={name:"setIsSubset",category:"Set",syntax:["setIsSubset(set1, set2)"],description:"Check whether a (multi)set is a subset of another (multi)set: every element of set1 is the element of set2. Multi-dimension arrays will be converted to single-dimension arrays before the operation.",examples:["setIsSubset([1, 2], [3, 4, 5, 6])","setIsSubset([3, 4], [3, 4, 5, 6])"],seealso:["setUnion","setIntersect","setDifference"]}},{}],559:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.setMultiplicityDocs=void 0;exports.setMultiplicityDocs={name:"setMultiplicity",category:"Set",syntax:["setMultiplicity(element, set)"],description:"Count the multiplicity of an element in a multiset. A multi-dimension array will be converted to a single-dimension array before the operation.",examples:["setMultiplicity(1, [1, 2, 2, 4])","setMultiplicity(2, [1, 2, 2, 4])"],seealso:["setDistinct","setSize"]}},{}],560:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.setPowersetDocs=void 0;exports.setPowersetDocs={name:"setPowerset",category:"Set",syntax:["setPowerset(set)"],description:"Create the powerset of a (multi)set: the powerset contains very possible subsets of a (multi)set. A multi-dimension array will be converted to a single-dimension array before the operation.",examples:["setPowerset([1, 2, 3])"],seealso:["setCartesian"]}},{}],561:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.setSizeDocs=void 0;exports.setSizeDocs={name:"setSize",category:"Set",syntax:["setSize(set)","setSize(set, unique)"],description:'Count the number of elements of a (multi)set. When the second parameter "unique" is true, count only the unique values. A multi-dimension array will be converted to a single-dimension array before the operation.',examples:["setSize([1, 2, 2, 4])","setSize([1, 2, 2, 4], true)"],seealso:["setUnion","setIntersect","setDifference"]}},{}],562:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.setSymDifferenceDocs=void 0;exports.setSymDifferenceDocs={name:"setSymDifference",category:"Set",syntax:["setSymDifference(set1, set2)"],description:"Create the symmetric difference of two (multi)sets. Multi-dimension arrays will be converted to single-dimension arrays before the operation.",examples:["setSymDifference([1, 2, 3, 4], [3, 4, 5, 6])","setSymDifference([[1, 2], [3, 4]], [[3, 4], [5, 6]])"],seealso:["setUnion","setIntersect","setDifference"]}},{}],563:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.setUnionDocs=void 0;exports.setUnionDocs={name:"setUnion",category:"Set",syntax:["setUnion(set1, set2)"],description:"Create the union of two (multi)sets. Multi-dimension arrays will be converted to single-dimension arrays before the operation.",examples:["setUnion([1, 2, 3, 4], [3, 4, 5, 6])","setUnion([[1, 2], [3, 4]], [[3, 4], [5, 6]])"],seealso:["setIntersect","setDifference"]}},{}],564:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.erfDocs=void 0;exports.erfDocs={name:"erf",category:"Special",syntax:["erf(x)"],description:"Compute the erf function of a value using a rational Chebyshev approximations for different intervals of x",examples:["erf(0.2)","erf(-0.5)","erf(4)"],seealso:[]}},{}],565:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.madDocs=void 0;exports.madDocs={name:"mad",category:"Statistics",syntax:["mad(a, b, c, ...)","mad(A)"],description:"Compute the median absolute deviation of a matrix or a list with values. The median absolute deviation is defined as the median of the absolute deviations from the median.",examples:["mad(10, 20, 30)","mad([1, 2, 3])"],seealso:["mean","median","std","abs"]}},{}],566:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.maxDocs=void 0;exports.maxDocs={name:"max",category:"Statistics",syntax:["max(a, b, c, ...)","max(A)","max(A, dim)"],description:"Compute the maximum value of a list of values.",examples:["max(2, 3, 4, 1)","max([2, 3, 4, 1])","max([2, 5; 4, 3])","max([2, 5; 4, 3], 1)","max([2, 5; 4, 3], 2)","max(2.7, 7.1, -4.5, 2.0, 4.1)","min(2.7, 7.1, -4.5, 2.0, 4.1)"],seealso:["mean","median","min","prod","std","sum","variance"]}},{}],567:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.meanDocs=void 0;exports.meanDocs={name:"mean",category:"Statistics",syntax:["mean(a, b, c, ...)","mean(A)","mean(A, dim)"],description:"Compute the arithmetic mean of a list of values.",examples:["mean(2, 3, 4, 1)","mean([2, 3, 4, 1])","mean([2, 5; 4, 3])","mean([2, 5; 4, 3], 1)","mean([2, 5; 4, 3], 2)","mean([1.0, 2.7, 3.2, 4.0])"],seealso:["max","median","min","prod","std","sum","variance"]}},{}],568:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.medianDocs=void 0;exports.medianDocs={name:"median",category:"Statistics",syntax:["median(a, b, c, ...)","median(A)"],description:"Compute the median of all values. The values are sorted and the middle value is returned. In case of an even number of values, the average of the two middle values is returned.",examples:["median(5, 2, 7)","median([3, -1, 5, 7])"],seealso:["max","mean","min","prod","std","sum","variance","quantileSeq"]}},{}],569:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.minDocs=void 0;exports.minDocs={name:"min",category:"Statistics",syntax:["min(a, b, c, ...)","min(A)","min(A, dim)"],description:"Compute the minimum value of a list of values.",examples:["min(2, 3, 4, 1)","min([2, 3, 4, 1])","min([2, 5; 4, 3])","min([2, 5; 4, 3], 1)","min([2, 5; 4, 3], 2)","min(2.7, 7.1, -4.5, 2.0, 4.1)","max(2.7, 7.1, -4.5, 2.0, 4.1)"],seealso:["max","mean","median","prod","std","sum","variance"]}},{}],570:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.modeDocs=void 0;exports.modeDocs={name:"mode",category:"Statistics",syntax:["mode(a, b, c, ...)","mode(A)","mode(A, a, b, B, c, ...)"],description:"Computes the mode of all values as an array. In case mode being more than one, multiple values are returned in an array.",examples:["mode(2, 1, 4, 3, 1)","mode([1, 2.7, 3.2, 4, 2.7])","mode(1, 4, 6, 1, 6)"],seealso:["max","mean","min","median","prod","std","sum","variance"]}},{}],571:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.prodDocs=void 0;exports.prodDocs={name:"prod",category:"Statistics",syntax:["prod(a, b, c, ...)","prod(A)"],description:"Compute the product of all values.",examples:["prod(2, 3, 4)","prod([2, 3, 4])","prod([2, 5; 4, 3])"],seealso:["max","mean","min","median","min","std","sum","variance"]}},{}],572:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.quantileSeqDocs=void 0;exports.quantileSeqDocs={name:"quantileSeq",category:"Statistics",syntax:["quantileSeq(A, prob[, sorted])","quantileSeq(A, [prob1, prob2, ...][, sorted])","quantileSeq(A, N[, sorted])"],description:"Compute the prob order quantile of a matrix or a list with values. The sequence is sorted and the middle value is returned. Supported types of sequence values are: Number, BigNumber, Unit Supported types of probablity are: Number, BigNumber. \n\nIn case of a (multi dimensional) array or matrix, the prob order quantile of all elements will be calculated.",examples:["quantileSeq([3, -1, 5, 7], 0.5)","quantileSeq([3, -1, 5, 7], [1/3, 2/3])","quantileSeq([3, -1, 5, 7], 2)","quantileSeq([-1, 3, 5, 7], 0.5, true)"],seealso:["mean","median","min","max","prod","std","sum","variance"]}},{}],573:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.stdDocs=void 0;exports.stdDocs={name:"std",category:"Statistics",syntax:["std(a, b, c, ...)","std(A)","std(A, normalization)"],description:'Compute the standard deviation of all values, defined as std(A) = sqrt(variance(A)). Optional parameter normalization can be "unbiased" (default), "uncorrected", or "biased".',examples:["std(2, 4, 6)","std([2, 4, 6, 8])",'std([2, 4, 6, 8], "uncorrected")','std([2, 4, 6, 8], "biased")',"std([1, 2, 3; 4, 5, 6])"],seealso:["max","mean","min","median","prod","sum","variance"]}},{}],574:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.sumDocs=void 0;exports.sumDocs={name:"sum",category:"Statistics",syntax:["sum(a, b, c, ...)","sum(A)"],description:"Compute the sum of all values.",examples:["sum(2, 3, 4, 1)","sum([2, 3, 4, 1])","sum([2, 5; 4, 3])"],seealso:["max","mean","median","min","prod","std","sum","variance"]}},{}],575:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.varianceDocs=void 0;exports.varianceDocs={name:"variance",category:"Statistics",syntax:["variance(a, b, c, ...)","variance(A)","variance(A, normalization)"],description:'Compute the variance of all values. Optional parameter normalization can be "unbiased" (default), "uncorrected", or "biased".',examples:["variance(2, 4, 6)","variance([2, 4, 6, 8])",'variance([2, 4, 6, 8], "uncorrected")','variance([2, 4, 6, 8], "biased")',"variance([1, 2, 3; 4, 5, 6])"],seealso:["max","mean","min","median","min","prod","std","sum"]}},{}],576:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.acosDocs=void 0;exports.acosDocs={name:"acos",category:"Trigonometry",syntax:["acos(x)"],description:"Compute the inverse cosine of a value in radians.",examples:["acos(0.5)","acos(cos(2.3))"],seealso:["cos","atan","asin"]}},{}],577:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.acoshDocs=void 0;exports.acoshDocs={name:"acosh",category:"Trigonometry",syntax:["acosh(x)"],description:"Calculate the hyperbolic arccos of a value, defined as `acosh(x) = ln(sqrt(x^2 - 1) + x)`.",examples:["acosh(1.5)"],seealso:["cosh","asinh","atanh"]}},{}],578:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.acotDocs=void 0;exports.acotDocs={name:"acot",category:"Trigonometry",syntax:["acot(x)"],description:"Calculate the inverse cotangent of a value.",examples:["acot(0.5)","acot(cot(0.5))","acot(2)"],seealso:["cot","atan"]}},{}],579:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.acothDocs=void 0;exports.acothDocs={name:"acoth",category:"Trigonometry",syntax:["acoth(x)"],description:"Calculate the hyperbolic arccotangent of a value, defined as `acoth(x) = (ln((x+1)/x) + ln(x/(x-1))) / 2`.",examples:["acoth(2)","acoth(0.5)"],seealso:["acsch","asech"]}},{}],580:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.acscDocs=void 0;exports.acscDocs={name:"acsc",category:"Trigonometry",syntax:["acsc(x)"],description:"Calculate the inverse cotangent of a value.",examples:["acsc(2)","acsc(csc(0.5))","acsc(0.5)"],seealso:["csc","asin","asec"]}},{}],581:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.acschDocs=void 0;exports.acschDocs={name:"acsch",category:"Trigonometry",syntax:["acsch(x)"],description:"Calculate the hyperbolic arccosecant of a value, defined as `acsch(x) = ln(1/x + sqrt(1/x^2 + 1))`.",examples:["acsch(0.5)"],seealso:["asech","acoth"]}},{}],582:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.asecDocs=void 0;exports.asecDocs={name:"asec",category:"Trigonometry",syntax:["asec(x)"],description:"Calculate the inverse secant of a value.",examples:["asec(0.5)","asec(sec(0.5))","asec(2)"],seealso:["acos","acot","acsc"]}},{}],583:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.asechDocs=void 0;exports.asechDocs={name:"asech",category:"Trigonometry",syntax:["asech(x)"],description:"Calculate the inverse secant of a value.",examples:["asech(0.5)"],seealso:["acsch","acoth"]}},{}],584:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.asinDocs=void 0;exports.asinDocs={name:"asin",category:"Trigonometry",syntax:["asin(x)"],description:"Compute the inverse sine of a value in radians.",examples:["asin(0.5)","asin(sin(0.5))"],seealso:["sin","acos","atan"]}},{}],585:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.asinhDocs=void 0;exports.asinhDocs={name:"asinh",category:"Trigonometry",syntax:["asinh(x)"],description:"Calculate the hyperbolic arcsine of a value, defined as `asinh(x) = ln(x + sqrt(x^2 + 1))`.",examples:["asinh(0.5)"],seealso:["acosh","atanh"]}},{}],586:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.atanDocs=void 0;exports.atanDocs={name:"atan",category:"Trigonometry",syntax:["atan(x)"],description:"Compute the inverse tangent of a value in radians.",examples:["atan(0.5)","atan(tan(0.5))"],seealso:["tan","acos","asin"]}},{}],587:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.atan2Docs=void 0;exports.atan2Docs={name:"atan2",category:"Trigonometry",syntax:["atan2(y, x)"],description:"Computes the principal value of the arc tangent of y/x in radians.",examples:["atan2(2, 2) / pi","angle = 60 deg in rad","x = cos(angle)","y = sin(angle)","atan2(y, x)"],seealso:["sin","cos","tan"]}},{}],588:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.atanhDocs=void 0;exports.atanhDocs={name:"atanh",category:"Trigonometry",syntax:["atanh(x)"],description:"Calculate the hyperbolic arctangent of a value, defined as `atanh(x) = ln((1 + x)/(1 - x)) / 2`.",examples:["atanh(0.5)"],seealso:["acosh","asinh"]}},{}],589:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.cosDocs=void 0;exports.cosDocs={name:"cos",category:"Trigonometry",syntax:["cos(x)"],description:"Compute the cosine of x in radians.",examples:["cos(2)","cos(pi / 4) ^ 2","cos(180 deg)","cos(60 deg)","sin(0.2)^2 + cos(0.2)^2"],seealso:["acos","sin","tan"]}},{}],590:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.coshDocs=void 0;exports.coshDocs={name:"cosh",category:"Trigonometry",syntax:["cosh(x)"],description:"Compute the hyperbolic cosine of x in radians.",examples:["cosh(0.5)"],seealso:["sinh","tanh","coth"]}},{}],591:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.cotDocs=void 0;exports.cotDocs={name:"cot",category:"Trigonometry",syntax:["cot(x)"],description:"Compute the cotangent of x in radians. Defined as 1/tan(x)",examples:["cot(2)","1 / tan(2)"],seealso:["sec","csc","tan"]}},{}],592:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.cothDocs=void 0;exports.cothDocs={name:"coth",category:"Trigonometry",syntax:["coth(x)"],description:"Compute the hyperbolic cotangent of x in radians.",examples:["coth(2)","1 / tanh(2)"],seealso:["sech","csch","tanh"]}},{}],593:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.cscDocs=void 0;exports.cscDocs={name:"csc",category:"Trigonometry",syntax:["csc(x)"],description:"Compute the cosecant of x in radians. Defined as 1/sin(x)",examples:["csc(2)","1 / sin(2)"],seealso:["sec","cot","sin"]}},{}],594:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.cschDocs=void 0;exports.cschDocs={name:"csch",category:"Trigonometry",syntax:["csch(x)"],description:"Compute the hyperbolic cosecant of x in radians. Defined as 1/sinh(x)",examples:["csch(2)","1 / sinh(2)"],seealso:["sech","coth","sinh"]}},{}],595:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.secDocs=void 0;exports.secDocs={name:"sec",category:"Trigonometry",syntax:["sec(x)"],description:"Compute the secant of x in radians. Defined as 1/cos(x)",examples:["sec(2)","1 / cos(2)"],seealso:["cot","csc","cos"]}},{}],596:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.sechDocs=void 0;exports.sechDocs={name:"sech",category:"Trigonometry",syntax:["sech(x)"],description:"Compute the hyperbolic secant of x in radians. Defined as 1/cosh(x)",examples:["sech(2)","1 / cosh(2)"],seealso:["coth","csch","cosh"]}},{}],597:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.sinDocs=void 0;exports.sinDocs={name:"sin",category:"Trigonometry",syntax:["sin(x)"],description:"Compute the sine of x in radians.",examples:["sin(2)","sin(pi / 4) ^ 2","sin(90 deg)","sin(30 deg)","sin(0.2)^2 + cos(0.2)^2"],seealso:["asin","cos","tan"]}},{}],598:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.sinhDocs=void 0;exports.sinhDocs={name:"sinh",category:"Trigonometry",syntax:["sinh(x)"],description:"Compute the hyperbolic sine of x in radians.",examples:["sinh(0.5)"],seealso:["cosh","tanh"]}},{}],599:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.tanDocs=void 0;exports.tanDocs={name:"tan",category:"Trigonometry",syntax:["tan(x)"],description:"Compute the tangent of x in radians.",examples:["tan(0.5)","sin(0.5) / cos(0.5)","tan(pi / 4)","tan(45 deg)"],seealso:["atan","sin","cos"]}},{}],600:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.tanhDocs=void 0;exports.tanhDocs={name:"tanh",category:"Trigonometry",syntax:["tanh(x)"],description:"Compute the hyperbolic tangent of x in radians.",examples:["tanh(0.5)","sinh(0.5) / cosh(0.5)"],seealso:["sinh","cosh"]}},{}],601:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.toDocs=void 0;exports.toDocs={name:"to",category:"Units",syntax:["x to unit","to(x, unit)"],description:"Change the unit of a value.",examples:["5 inch to cm","3.2kg to g","16 bytes in bits"],seealso:[]}},{}],602:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.cloneDocs=void 0;exports.cloneDocs={name:"clone",category:"Utils",syntax:["clone(x)"],description:"Clone a variable. Creates a copy of primitive variables,and a deep copy of matrices",examples:["clone(3.5)","clone(2 - 4i)","clone(45 deg)","clone([1, 2; 3, 4])",'clone("hello world")'],seealso:[]}},{}],603:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.formatDocs=void 0;exports.formatDocs={name:"format",category:"Utils",syntax:["format(value)","format(value, precision)"],description:"Format a value of any type as string.",examples:["format(2.3)","format(3 - 4i)","format([])","format(pi, 3)"],seealso:["print"]}},{}],604:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.hasNumericValueDocs=void 0;exports.hasNumericValueDocs={name:"hasNumericValue",category:"Utils",syntax:["hasNumericValue(x)"],description:"Test whether a value is an numeric value. In case of a string, true is returned if the string contains a numeric value.",examples:["hasNumericValue(2)",'hasNumericValue("2")','isNumeric("2")',"hasNumericValue(0)","hasNumericValue(bignumber(500))","hasNumericValue(fraction(0.125))","hasNumericValue(2 + 3i)",'hasNumericValue([2.3, "foo", false])'],seealso:["isInteger","isZero","isNegative","isPositive","isNaN","isNumeric"]}},{}],605:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.isIntegerDocs=void 0;exports.isIntegerDocs={name:"isInteger",category:"Utils",syntax:["isInteger(x)"],description:"Test whether a value is an integer number.",examples:["isInteger(2)","isInteger(3.5)","isInteger([3, 0.5, -2])"],seealso:["isNegative","isNumeric","isPositive","isZero"]}},{}],606:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.isNaNDocs=void 0;exports.isNaNDocs={name:"isNaN",category:"Utils",syntax:["isNaN(x)"],description:"Test whether a value is NaN (not a number)",examples:["isNaN(2)","isNaN(0 / 0)","isNaN(NaN)","isNaN(Infinity)"],seealso:["isNegative","isNumeric","isPositive","isZero"]}},{}],607:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.isNegativeDocs=void 0;exports.isNegativeDocs={name:"isNegative",category:"Utils",syntax:["isNegative(x)"],description:"Test whether a value is negative: smaller than zero.",examples:["isNegative(2)","isNegative(0)","isNegative(-4)","isNegative([3, 0.5, -2])"],seealso:["isInteger","isNumeric","isPositive","isZero"]}},{}],608:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.isNumericDocs=void 0;exports.isNumericDocs={name:"isNumeric",category:"Utils",syntax:["isNumeric(x)"],description:"Test whether a value is a numeric value. Returns true when the input is a number, BigNumber, Fraction, or boolean.",examples:["isNumeric(2)",'isNumeric("2")','hasNumericValue("2")',"isNumeric(0)","isNumeric(bignumber(500))","isNumeric(fraction(0.125))","isNumeric(2 + 3i)",'isNumeric([2.3, "foo", false])'],seealso:["isInteger","isZero","isNegative","isPositive","isNaN","hasNumericValue"]}},{}],609:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.isPositiveDocs=void 0;exports.isPositiveDocs={name:"isPositive",category:"Utils",syntax:["isPositive(x)"],description:"Test whether a value is positive: larger than zero.",examples:["isPositive(2)","isPositive(0)","isPositive(-4)","isPositive([3, 0.5, -2])"],seealso:["isInteger","isNumeric","isNegative","isZero"]}},{}],610:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.isPrimeDocs=void 0;exports.isPrimeDocs={name:"isPrime",category:"Utils",syntax:["isPrime(x)"],description:"Test whether a value is prime: has no divisors other than itself and one.",examples:["isPrime(3)","isPrime(-2)","isPrime([2, 17, 100])"],seealso:["isInteger","isNumeric","isNegative","isZero"]}},{}],611:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.isZeroDocs=void 0;exports.isZeroDocs={name:"isZero",category:"Utils",syntax:["isZero(x)"],description:"Test whether a value is zero.",examples:["isZero(2)","isZero(0)","isZero(-4)","isZero([3, 0, -2, 0])"],seealso:["isInteger","isNumeric","isNegative","isPositive"]}},{}],612:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.numericDocs=void 0;exports.numericDocs={name:"numeric",category:"Utils",syntax:["numeric(x)"],description:"Convert a numeric input to a specific numeric type: number, BigNumber, or Fraction.",examples:['numeric("4")','numeric("4", "number")','numeric("4", "BigNumber")','numeric("4", "Fraction)','numeric(4, "Fraction")','numeric(fraction(2, 5), "number)'],seealso:["number","fraction","bignumber","string","format"]}},{}],613:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.typeOfDocs=void 0;exports.typeOfDocs={name:"typeOf",category:"Utils",syntax:["typeOf(x)"],description:"Get the type of a variable.",examples:["typeOf(3.5)","typeOf(2 - 4i)","typeOf(45 deg)",'typeOf("hello world")'],seealso:["getMatrixDataType"]}},{}],614:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createCompile=void 0;var _collection=require("../../utils/collection"),_factory=require("../../utils/factory"),dependencies=["typed","parse"],createCompile=(0,_factory.factory)("compile",dependencies,function(_ref){var typed=_ref.typed,parse=_ref.parse;return typed("compile",{string:function(expr){return parse(expr).compile()},"Array | Matrix":function(expr){return(0,_collection.deepMap)(expr,function(entry){return parse(entry).compile()})}})});exports.createCompile=createCompile},{"../../utils/collection":927,"../../utils/factory":931}],615:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createDeprecatedEval=void 0;var _factory=require("../../utils/factory"),_log=require("../../utils/log"),createDeprecatedEval=(0,_factory.factory)("eval",["evaluate"],function(_ref){var evaluate=_ref.evaluate;return function(){(0,_log.warnOnce)('Function "eval" has been renamed to "evaluate" in v6.0.0, please use the new function instead.');for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];return evaluate.apply(evaluate,args)}});exports.createDeprecatedEval=createDeprecatedEval},{"../../utils/factory":931,"../../utils/log":935}],616:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createEvaluate=void 0;var _collection=require("../../utils/collection"),_factory=require("../../utils/factory"),dependencies=["typed","parse"],createEvaluate=(0,_factory.factory)("evaluate",dependencies,function(_ref){var typed=_ref.typed,parse=_ref.parse;return typed("evaluate",{string:function(expr){return parse(expr).compile().evaluate({})},"string, Object":function(expr,scope){return parse(expr).compile().evaluate(scope)},"Array | Matrix":function(expr){var scope={};return(0,_collection.deepMap)(expr,function(entry){return parse(entry).compile().evaluate(scope)})},"Array | Matrix, Object":function(expr,scope){return(0,_collection.deepMap)(expr,function(entry){return parse(entry).compile().evaluate(scope)})}})});exports.createEvaluate=createEvaluate},{"../../utils/collection":927,"../../utils/factory":931}],617:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createHelp=void 0;var _factory=require("../../utils/factory"),_customs=require("../../utils/customs"),_embeddedDocs=require("../embeddedDocs/embeddedDocs"),_object=require("../../utils/object"),dependencies=["typed","mathWithTransform","Help"],createHelp=(0,_factory.factory)("help",dependencies,function(_ref){var typed=_ref.typed,mathWithTransform=_ref.mathWithTransform,Help=_ref.Help;return typed("help",{any:function(search){var prop,searchName=search;if("string"!=typeof search)for(prop in mathWithTransform)if((0,_object.hasOwnProperty)(mathWithTransform,prop)&&search===mathWithTransform[prop]){searchName=prop;break}var doc=(0,_customs.getSafeProperty)(_embeddedDocs.embeddedDocs,searchName);if(doc)return new Help(doc);var searchText="function"==typeof searchName?searchName.name:searchName;throw new Error('No documentation found on "'+searchText+'"')}})});exports.createHelp=createHelp},{"../../utils/customs":929,"../../utils/factory":931,"../../utils/object":938,"../embeddedDocs/embeddedDocs":435}],618:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createParser=void 0;var _factory=require("../../utils/factory"),dependencies=["typed","Parser"],createParser=(0,_factory.factory)("parser",dependencies,function(_ref){var typed=_ref.typed,Parser=_ref.Parser;return typed("parser",{"":function(){return new Parser}})});exports.createParser=createParser},{"../../utils/factory":931}],619:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.keywords=void 0;exports.keywords={end:!0}},{}],620:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createAccessorNode=void 0;var _is=require("../../utils/is"),_customs=require("../../utils/customs"),_factory=require("../../utils/factory"),_access=require("./utils/access"),dependencies=["subset","Node"],createAccessorNode=(0,_factory.factory)("AccessorNode",dependencies,function(_ref){var subset=_ref.subset,Node=_ref.Node,access=(0,_access.accessFactory)({subset:subset});function AccessorNode(object,index){if(!(this instanceof AccessorNode))throw new SyntaxError("Constructor must be called with the new operator");if(!(0,_is.isNode)(object))throw new TypeError('Node expected for parameter "object"');if(!(0,_is.isIndexNode)(index))throw new TypeError('IndexNode expected for parameter "index"');this.object=object||null,this.index=index,Object.defineProperty(this,"name",{get:function(){return this.index?this.index.isObjectProperty()?this.index.getObjectProperty():"":this.object.name||""}.bind(this),set:function(){throw new Error("Cannot assign a new name, name is read-only")}})}function needParenthesis(node){return!((0,_is.isAccessorNode)(node)||(0,_is.isArrayNode)(node)||(0,_is.isConstantNode)(node)||(0,_is.isFunctionNode)(node)||(0,_is.isObjectNode)(node)||(0,_is.isParenthesisNode)(node)||(0,_is.isSymbolNode)(node))}return(AccessorNode.prototype=new Node).type="AccessorNode",AccessorNode.prototype.isAccessorNode=!0,AccessorNode.prototype._compile=function(math,argNames){var evalObject=this.object._compile(math,argNames),evalIndex=this.index._compile(math,argNames);if(this.index.isObjectProperty()){var prop=this.index.getObjectProperty();return function(scope,args,context){return(0,_customs.getSafeProperty)(evalObject(scope,args,context),prop)}}return function(scope,args,context){var object=evalObject(scope,args,context),index=evalIndex(scope,args,object);return access(object,index)}},AccessorNode.prototype.forEach=function(callback){callback(this.object,"object",this),callback(this.index,"index",this)},AccessorNode.prototype.map=function(callback){return new AccessorNode(this._ifNode(callback(this.object,"object",this)),this._ifNode(callback(this.index,"index",this)))},AccessorNode.prototype.clone=function(){return new AccessorNode(this.object,this.index)},AccessorNode.prototype._toString=function(options){var object=this.object.toString(options);return needParenthesis(this.object)&&(object="("+object+")"),object+this.index.toString(options)},AccessorNode.prototype.toHTML=function(options){var object=this.object.toHTML(options);return needParenthesis(this.object)&&(object='('+object+')'),object+this.index.toHTML(options)},AccessorNode.prototype._toTex=function(options){var object=this.object.toTex(options);return needParenthesis(this.object)&&(object="\\left(' + object + '\\right)"),object+this.index.toTex(options)},AccessorNode.prototype.toJSON=function(){return{mathjs:"AccessorNode",object:this.object,index:this.index}},AccessorNode.fromJSON=function(json){return new AccessorNode(json.object,json.index)},AccessorNode},{isClass:!0,isNode:!0});exports.createAccessorNode=createAccessorNode},{"../../utils/customs":929,"../../utils/factory":931,"../../utils/is":933,"./utils/access":636}],621:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createArrayNode=void 0;var _is=require("../../utils/is"),_array=require("../../utils/array"),dependencies=["Node"],createArrayNode=(0,require("../../utils/factory").factory)("ArrayNode",dependencies,function(_ref){var Node=_ref.Node;function ArrayNode(items){if(!(this instanceof ArrayNode))throw new SyntaxError("Constructor must be called with the new operator");if(this.items=items||[],!Array.isArray(this.items)||!this.items.every(_is.isNode))throw new TypeError("Array containing Nodes expected");var deprecated=function(){throw new Error("Property `ArrayNode.nodes` is deprecated, use `ArrayNode.items` instead")};Object.defineProperty(this,"nodes",{get:deprecated,set:deprecated})}return(ArrayNode.prototype=new Node).type="ArrayNode",ArrayNode.prototype.isArrayNode=!0,ArrayNode.prototype._compile=function(math,argNames){var evalItems=(0,_array.map)(this.items,function(item){return item._compile(math,argNames)});if("Array"===math.config.matrix)return function(scope,args,context){return(0,_array.map)(evalItems,function(evalItem){return evalItem(scope,args,context)})};var matrix=math.matrix;return function(scope,args,context){return matrix((0,_array.map)(evalItems,function(evalItem){return evalItem(scope,args,context)}))}},ArrayNode.prototype.forEach=function(callback){for(var i=0;i['+this.items.map(function(node){return node.toHTML(options)}).join(',')+']'},ArrayNode.prototype._toTex=function(options){var s="\\begin{bmatrix}";return this.items.forEach(function(node){node.items?s+=node.items.map(function(childNode){return childNode.toTex(options)}).join("&"):s+=node.toTex(options),s+="\\\\"}),s+="\\end{bmatrix}"},ArrayNode},{isClass:!0,isNode:!0});exports.createArrayNode=createArrayNode},{"../../utils/array":922,"../../utils/factory":931,"../../utils/is":933}],622:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createAssignmentNode=void 0;var _is=require("../../utils/is"),_customs=require("../../utils/customs"),_factory=require("../../utils/factory"),_access=require("./utils/access"),_assign=require("./utils/assign"),_operators=require("../operators"),dependencies=["subset","?matrix","Node"],createAssignmentNode=(0,_factory.factory)("AssignmentNode",dependencies,function(_ref){var subset=_ref.subset,matrix=_ref.matrix,Node=_ref.Node,access=(0,_access.accessFactory)({subset:subset}),assign=(0,_assign.assignFactory)({subset:subset,matrix:matrix});function AssignmentNode(object,index,value){if(!(this instanceof AssignmentNode))throw new SyntaxError("Constructor must be called with the new operator");if(this.object=object,this.index=value?index:null,this.value=value||index,!(0,_is.isSymbolNode)(object)&&!(0,_is.isAccessorNode)(object))throw new TypeError('SymbolNode or AccessorNode expected as "object"');if((0,_is.isSymbolNode)(object)&&"end"===object.name)throw new Error('Cannot assign to symbol "end"');if(this.index&&!(0,_is.isIndexNode)(this.index))throw new TypeError('IndexNode expected as "index"');if(!(0,_is.isNode)(this.value))throw new TypeError('Node expected as "value"');Object.defineProperty(this,"name",{get:function(){return this.index?this.index.isObjectProperty()?this.index.getObjectProperty():"":this.object.name||""}.bind(this),set:function(){throw new Error("Cannot assign a new name, name is read-only")}})}function needParenthesis(node,parenthesis){parenthesis=parenthesis||"keep";var precedence=(0,_operators.getPrecedence)(node,parenthesis),exprPrecedence=(0,_operators.getPrecedence)(node.value,parenthesis);return"all"===parenthesis||null!==exprPrecedence&&exprPrecedence<=precedence}return(AssignmentNode.prototype=new Node).type="AssignmentNode",AssignmentNode.prototype.isAssignmentNode=!0,AssignmentNode.prototype._compile=function(math,argNames){var evalObject=this.object._compile(math,argNames),evalIndex=this.index?this.index._compile(math,argNames):null,evalValue=this.value._compile(math,argNames),name=this.object.name;if(this.index){if(this.index.isObjectProperty()){var prop=this.index.getObjectProperty();return function(scope,args,context){var object=evalObject(scope,args,context),value=evalValue(scope,args,context);return(0,_customs.setSafeProperty)(object,prop,value)}}if((0,_is.isSymbolNode)(this.object))return function(scope,args,context){var childObject=evalObject(scope,args,context),value=evalValue(scope,args,context),index=evalIndex(scope,args,childObject);return(0,_customs.setSafeProperty)(scope,name,assign(childObject,index,value)),value};var evalParentObject=this.object.object._compile(math,argNames);if(this.object.index.isObjectProperty()){var parentProp=this.object.index.getObjectProperty();return function(scope,args,context){var parent=evalParentObject(scope,args,context),childObject=(0,_customs.getSafeProperty)(parent,parentProp),index=evalIndex(scope,args,childObject),value=evalValue(scope,args,context);return(0,_customs.setSafeProperty)(parent,parentProp,assign(childObject,index,value)),value}}var evalParentIndex=this.object.index._compile(math,argNames);return function(scope,args,context){var parent=evalParentObject(scope,args,context),parentIndex=evalParentIndex(scope,args,parent),childObject=access(parent,parentIndex),index=evalIndex(scope,args,childObject),value=evalValue(scope,args,context);return assign(parent,parentIndex,assign(childObject,index,value)),value}}if(!(0,_is.isSymbolNode)(this.object))throw new TypeError("SymbolNode expected as object");return function(scope,args,context){return(0,_customs.setSafeProperty)(scope,name,evalValue(scope,args,context))}},AssignmentNode.prototype.forEach=function(callback){callback(this.object,"object",this),this.index&&callback(this.index,"index",this),callback(this.value,"value",this)},AssignmentNode.prototype.map=function(callback){return new AssignmentNode(this._ifNode(callback(this.object,"object",this)),this.index?this._ifNode(callback(this.index,"index",this)):null,this._ifNode(callback(this.value,"value",this)))},AssignmentNode.prototype.clone=function(){return new AssignmentNode(this.object,this.index,this.value)},AssignmentNode.prototype._toString=function(options){var object=this.object.toString(options),index=this.index?this.index.toString(options):"",value=this.value.toString(options);return needParenthesis(this,options&&options.parenthesis)&&(value="("+value+")"),object+index+" = "+value},AssignmentNode.prototype.toJSON=function(){return{mathjs:"AssignmentNode",object:this.object,index:this.index,value:this.value}},AssignmentNode.fromJSON=function(json){return new AssignmentNode(json.object,json.index,json.value)},AssignmentNode.prototype.toHTML=function(options){var object=this.object.toHTML(options),index=this.index?this.index.toHTML(options):"",value=this.value.toHTML(options);return needParenthesis(this,options&&options.parenthesis)&&(value='('+value+')'),object+index+'='+value},AssignmentNode.prototype._toTex=function(options){var object=this.object.toTex(options),index=this.index?this.index.toTex(options):"",value=this.value.toTex(options);return needParenthesis(this,options&&options.parenthesis)&&(value="\\left(".concat(value,"\\right)")),object+index+":="+value},AssignmentNode},{isClass:!0,isNode:!0});exports.createAssignmentNode=createAssignmentNode},{"../../utils/customs":929,"../../utils/factory":931,"../../utils/is":933,"../operators":638,"./utils/access":636,"./utils/assign":637}],623:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createBlockNode=void 0;var _is=require("../../utils/is"),_array=require("../../utils/array"),dependencies=["ResultSet","Node"],createBlockNode=(0,require("../../utils/factory").factory)("BlockNode",dependencies,function(_ref){var ResultSet=_ref.ResultSet,Node=_ref.Node;function BlockNode(blocks){if(!(this instanceof BlockNode))throw new SyntaxError("Constructor must be called with the new operator");if(!Array.isArray(blocks))throw new Error("Array expected");this.blocks=blocks.map(function(block){var node=block&&block.node,visible=!block||void 0===block.visible||block.visible;if(!(0,_is.isNode)(node))throw new TypeError('Property "node" must be a Node');if("boolean"!=typeof visible)throw new TypeError('Property "visible" must be a boolean');return{node:node,visible:visible}})}return(BlockNode.prototype=new Node).type="BlockNode",BlockNode.prototype.isBlockNode=!0,BlockNode.prototype._compile=function(math,argNames){var evalBlocks=(0,_array.map)(this.blocks,function(block){return{evaluate:block.node._compile(math,argNames),visible:block.visible}});return function(scope,args,context){var results=[];return(0,_array.forEach)(evalBlocks,function(block){var result=block.evaluate(scope,args,context);block.visible&&results.push(result)}),new ResultSet(results)}},BlockNode.prototype.forEach=function(callback){for(var i=0;i;')}).join('
')},BlockNode.prototype._toTex=function(options){return this.blocks.map(function(param){return param.node.toTex(options)+(param.visible?"":";")}).join("\\;\\;\n")},BlockNode},{isClass:!0,isNode:!0});exports.createBlockNode=createBlockNode},{"../../utils/array":922,"../../utils/factory":931,"../../utils/is":933}],624:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createConditionalNode=void 0;var _is=require("../../utils/is"),_factory=require("../../utils/factory"),_operators=require("../operators"),dependencies=["Node"],createConditionalNode=(0,_factory.factory)("ConditionalNode",dependencies,function(_ref){var Node=_ref.Node;function ConditionalNode(condition,trueExpr,falseExpr){if(!(this instanceof ConditionalNode))throw new SyntaxError("Constructor must be called with the new operator");if(!(0,_is.isNode)(condition))throw new TypeError("Parameter condition must be a Node");if(!(0,_is.isNode)(trueExpr))throw new TypeError("Parameter trueExpr must be a Node");if(!(0,_is.isNode)(falseExpr))throw new TypeError("Parameter falseExpr must be a Node");this.condition=condition,this.trueExpr=trueExpr,this.falseExpr=falseExpr}return(ConditionalNode.prototype=new Node).type="ConditionalNode",ConditionalNode.prototype.isConditionalNode=!0,ConditionalNode.prototype._compile=function(math,argNames){var evalCondition=this.condition._compile(math,argNames),evalTrueExpr=this.trueExpr._compile(math,argNames),evalFalseExpr=this.falseExpr._compile(math,argNames);return function(scope,args,context){return(function(condition){if("number"==typeof condition||"boolean"==typeof condition||"string"==typeof condition)return!!condition;if(condition){if((0,_is.isBigNumber)(condition))return!condition.isZero();if((0,_is.isComplex)(condition))return!(!condition.re&&!condition.im);if((0,_is.isUnit)(condition))return!!condition.value}if(null!=condition)throw new TypeError('Unsupported type of condition "'+(0,_is.typeOf)(condition)+'"');return!1}(evalCondition(scope,args,context))?evalTrueExpr:evalFalseExpr)(scope,args,context)}},ConditionalNode.prototype.forEach=function(callback){callback(this.condition,"condition",this),callback(this.trueExpr,"trueExpr",this),callback(this.falseExpr,"falseExpr",this)},ConditionalNode.prototype.map=function(callback){return new ConditionalNode(this._ifNode(callback(this.condition,"condition",this)),this._ifNode(callback(this.trueExpr,"trueExpr",this)),this._ifNode(callback(this.falseExpr,"falseExpr",this)))},ConditionalNode.prototype.clone=function(){return new ConditionalNode(this.condition,this.trueExpr,this.falseExpr)},ConditionalNode.prototype._toString=function(options){var parenthesis=options&&options.parenthesis?options.parenthesis:"keep",precedence=(0,_operators.getPrecedence)(this,parenthesis),condition=this.condition.toString(options),conditionPrecedence=(0,_operators.getPrecedence)(this.condition,parenthesis);("all"===parenthesis||"OperatorNode"===this.condition.type||null!==conditionPrecedence&&conditionPrecedence<=precedence)&&(condition="("+condition+")");var trueExpr=this.trueExpr.toString(options),truePrecedence=(0,_operators.getPrecedence)(this.trueExpr,parenthesis);("all"===parenthesis||"OperatorNode"===this.trueExpr.type||null!==truePrecedence&&truePrecedence<=precedence)&&(trueExpr="("+trueExpr+")");var falseExpr=this.falseExpr.toString(options),falsePrecedence=(0,_operators.getPrecedence)(this.falseExpr,parenthesis);return("all"===parenthesis||"OperatorNode"===this.falseExpr.type||null!==falsePrecedence&&falsePrecedence<=precedence)&&(falseExpr="("+falseExpr+")"),condition+" ? "+trueExpr+" : "+falseExpr},ConditionalNode.prototype.toJSON=function(){return{mathjs:"ConditionalNode",condition:this.condition,trueExpr:this.trueExpr,falseExpr:this.falseExpr}},ConditionalNode.fromJSON=function(json){return new ConditionalNode(json.condition,json.trueExpr,json.falseExpr)},ConditionalNode.prototype.toHTML=function(options){var parenthesis=options&&options.parenthesis?options.parenthesis:"keep",precedence=(0,_operators.getPrecedence)(this,parenthesis),condition=this.condition.toHTML(options),conditionPrecedence=(0,_operators.getPrecedence)(this.condition,parenthesis);("all"===parenthesis||"OperatorNode"===this.condition.type||null!==conditionPrecedence&&conditionPrecedence<=precedence)&&(condition='('+condition+')');var trueExpr=this.trueExpr.toHTML(options),truePrecedence=(0,_operators.getPrecedence)(this.trueExpr,parenthesis);("all"===parenthesis||"OperatorNode"===this.trueExpr.type||null!==truePrecedence&&truePrecedence<=precedence)&&(trueExpr='('+trueExpr+')');var falseExpr=this.falseExpr.toHTML(options),falsePrecedence=(0,_operators.getPrecedence)(this.falseExpr,parenthesis);return("all"===parenthesis||"OperatorNode"===this.falseExpr.type||null!==falsePrecedence&&falsePrecedence<=precedence)&&(falseExpr='('+falseExpr+')'),condition+'?'+trueExpr+':'+falseExpr},ConditionalNode.prototype._toTex=function(options){return"\\begin{cases} {"+this.trueExpr.toTex(options)+"}, &\\quad{\\text{if }\\;"+this.condition.toTex(options)+"}\\\\{"+this.falseExpr.toTex(options)+"}, &\\quad{\\text{otherwise}}\\end{cases}"},ConditionalNode},{isClass:!0,isNode:!0});exports.createConditionalNode=createConditionalNode},{"../../utils/factory":931,"../../utils/is":933,"../operators":638}],625:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createConstantNode=void 0;var _string=require("../../utils/string"),_is=require("../../utils/is"),_latex=require("../../utils/latex"),dependencies=["Node"],createConstantNode=(0,require("../../utils/factory").factory)("ConstantNode",dependencies,function(_ref){var Node=_ref.Node;function ConstantNode(value){if(!(this instanceof ConstantNode))throw new SyntaxError("Constructor must be called with the new operator");if(2===arguments.length)throw new SyntaxError("new ConstantNode(valueStr, valueType) is not supported anymore since math v4.0.0. Use new ConstantNode(value) instead, where value is a non-stringified value.");this.value=value}return(ConstantNode.prototype=new Node).type="ConstantNode",ConstantNode.prototype.isConstantNode=!0,ConstantNode.prototype._compile=function(math,argNames){var value=this.value;return function(){return value}},ConstantNode.prototype.forEach=function(callback){},ConstantNode.prototype.map=function(callback){return this.clone()},ConstantNode.prototype.clone=function(){return new ConstantNode(this.value)},ConstantNode.prototype._toString=function(options){return(0,_string.format)(this.value,options)},ConstantNode.prototype.toHTML=function(options){var value=this._toString(options);switch((0,_is.typeOf)(this.value)){case"number":case"BigNumber":case"Fraction":return''+value+"";case"string":return''+value+"";case"boolean":return''+value+"";case"null":return''+value+"";case"undefined":return''+value+"";default:return''+value+""}},ConstantNode.prototype.toJSON=function(){return{mathjs:"ConstantNode",value:this.value}},ConstantNode.fromJSON=function(json){return new ConstantNode(json.value)},ConstantNode.prototype._toTex=function(options){var value=this._toString(options);switch((0,_is.typeOf)(this.value)){case"string":return"\\mathtt{"+(0,_latex.escapeLatex)(value)+"}";case"number":case"BigNumber":if(!isFinite(this.value))return this.value.valueOf()<0?"-\\infty":"\\infty";var index=value.toLowerCase().indexOf("e");return-1!==index?value.substring(0,index)+"\\cdot10^{"+value.substring(index+1)+"}":value;case"Fraction":return this.value.toLatex();default:return value}},ConstantNode},{isClass:!0,isNode:!0});exports.createConstantNode=createConstantNode},{"../../utils/factory":931,"../../utils/is":933,"../../utils/latex":934,"../../utils/string":941}],626:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createFunctionAssignmentNode=void 0;var _is=require("../../utils/is"),_keywords=require("../keywords"),_string=require("../../utils/string"),_array=require("../../utils/array"),_latex=require("../../utils/latex"),_operators=require("../operators"),_customs=require("../../utils/customs"),dependencies=["typed","Node"],createFunctionAssignmentNode=(0,require("../../utils/factory").factory)("FunctionAssignmentNode",dependencies,function(_ref){var typed=_ref.typed,Node=_ref.Node;function FunctionAssignmentNode(name,params,expr){if(!(this instanceof FunctionAssignmentNode))throw new SyntaxError("Constructor must be called with the new operator");if("string"!=typeof name)throw new TypeError('String expected for parameter "name"');if(!Array.isArray(params))throw new TypeError('Array containing strings or objects expected for parameter "params"');if(!(0,_is.isNode)(expr))throw new TypeError('Node expected for parameter "expr"');if(name in _keywords.keywords)throw new Error('Illegal function name, "'+name+'" is a reserved keyword');this.name=name,this.params=params.map(function(param){return param&¶m.name||param}),this.types=params.map(function(param){return param&¶m.type||"any"}),this.expr=expr}function needParenthesis(node,parenthesis){var precedence=(0,_operators.getPrecedence)(node,parenthesis),exprPrecedence=(0,_operators.getPrecedence)(node.expr,parenthesis);return"all"===parenthesis||null!==exprPrecedence&&exprPrecedence<=precedence}return(FunctionAssignmentNode.prototype=new Node).type="FunctionAssignmentNode",FunctionAssignmentNode.prototype.isFunctionAssignmentNode=!0,FunctionAssignmentNode.prototype._compile=function(math,argNames){var childArgNames=Object.create(argNames);(0,_array.forEach)(this.params,function(param){childArgNames[param]=!0});var evalExpr=this.expr._compile(math,childArgNames),name=this.name,params=this.params,signature=(0,_array.join)(this.types,","),syntax=name+"("+(0,_array.join)(this.params,", ")+")";return function(scope,args,context){var signatures={};signatures[signature]=function(){for(var childArgs=Object.create(args),i=0;i'+(0,_string.escape)(this.params[i])+"");var expr=this.expr.toHTML(options);return needParenthesis(this,parenthesis)&&(expr='('+expr+')'),''+(0,_string.escape)(this.name)+'('+params.join(',')+')='+expr},FunctionAssignmentNode.prototype._toTex=function(options){var parenthesis=options&&options.parenthesis?options.parenthesis:"keep",expr=this.expr.toTex(options);return needParenthesis(this,parenthesis)&&(expr="\\left(".concat(expr,"\\right)")),"\\mathrm{"+this.name+"}\\left("+this.params.map(_latex.toSymbol).join(",")+"\\right):="+expr},FunctionAssignmentNode},{isClass:!0,isNode:!0});exports.createFunctionAssignmentNode=createFunctionAssignmentNode},{"../../utils/array":922,"../../utils/customs":929,"../../utils/factory":931,"../../utils/is":933,"../../utils/latex":934,"../../utils/string":941,"../keywords":619,"../operators":638}],627:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createFunctionNode=void 0;var _is=require("../../utils/is"),_string=require("../../utils/string"),_object=require("../../utils/object"),_array=require("../../utils/array"),_customs=require("../../utils/customs"),_factory=require("../../utils/factory"),_latex=require("../../utils/latex");function _typeof(obj){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function _extends(){return(_extends=Object.assign||function(target){for(var i=1;i'+(0,_string.escape)(this.fn)+'('+args.join(',')+')'};var nodeToTex=FunctionNode.prototype.toTex;return FunctionNode.prototype.toTex=function(options){var customTex;return options&&"object"===_typeof(options.handler)&&(0,_object.hasOwnProperty)(options.handler,this.name)&&(customTex=options.handler[this.name](this,options)),void 0!==customTex?customTex:nodeToTex.call(this,options)},FunctionNode.prototype._toTex=function(options){var latexConverter,customToTex,args=this.args.map(function(arg){return arg.toTex(options)});switch(_latex.latexFunctions[this.name]&&(latexConverter=_latex.latexFunctions[this.name]),!math[this.name]||"function"!=typeof math[this.name].toTex&&"object"!==_typeof(math[this.name].toTex)&&"string"!=typeof math[this.name].toTex||(latexConverter=math[this.name].toTex),_typeof(latexConverter)){case"function":customToTex=latexConverter(this,options);break;case"string":customToTex=expandTemplate(latexConverter,this,options);break;case"object":switch(_typeof(latexConverter[args.length])){case"function":customToTex=latexConverter[args.length](this,options);break;case"string":customToTex=expandTemplate(latexConverter[args.length],this,options)}}return void 0!==customToTex?customToTex:expandTemplate(_latex.defaultTemplate,this,options)},FunctionNode.prototype.getIdentifier=function(){return this.type+":"+this.name},FunctionNode},{isClass:!0,isNode:!0});exports.createFunctionNode=createFunctionNode},{"../../utils/array":922,"../../utils/customs":929,"../../utils/factory":931,"../../utils/is":933,"../../utils/latex":934,"../../utils/object":938,"../../utils/string":941}],628:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createIndexNode=void 0;var _is=require("../../utils/is"),_array=require("../../utils/array"),_string=require("../../utils/string"),_factory=require("../../utils/factory"),_customs=require("../../utils/customs");function _toConsumableArray(arr){return function(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}(arr)||function(iter){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(iter))return Array.from(iter)}(arr)||function(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i.'+(0,_string.escape)(this.getObjectProperty())+"":'['+dimensions.join(',')+']'},IndexNode.prototype._toTex=function(options){var dimensions=this.dimensions.map(function(range){return range.toTex(options)});return this.dotNotation?"."+this.getObjectProperty():"_{"+dimensions.join(",")+"}"},IndexNode},{isClass:!0,isNode:!0});exports.createIndexNode=createIndexNode},{"../../utils/array":922,"../../utils/customs":929,"../../utils/factory":931,"../../utils/is":933,"../../utils/string":941}],629:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createNode=void 0;var _is=require("../../utils/is"),_keywords=require("../keywords"),_object=require("../../utils/object"),_factory=require("../../utils/factory"),_log=require("../../utils/log");function _typeof(obj){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}var dependencies=["mathWithTransform"],createNode=(0,_factory.factory)("Node",dependencies,function(_ref){var mathWithTransform=_ref.mathWithTransform;function Node(){if(!(this instanceof Node))throw new SyntaxError("Constructor must be called with the new operator")}return Node.prototype.evaluate=function(scope){return this.compile().evaluate(scope)},Node.prototype.eval=function(scope){return(0,_log.warnOnce)("Method Node.eval is renamed to Node.evaluate. Please use the new method name."),this.evaluate(scope)},Node.prototype.type="Node",Node.prototype.isNode=!0,Node.prototype.comment="",Node.prototype.compile=function(){var expr=this._compile(mathWithTransform,{}),args={},context=null;function evaluate(scope){var s=scope||{};return function(scope){for(var symbol in scope)if((0,_object.hasOwnProperty)(scope,symbol)&&symbol in _keywords.keywords)throw new Error('Scope contains an illegal symbol, "'+symbol+'" is a reserved keyword')}(s),expr(s,args,context)}return{evaluate:evaluate,eval:function(scope){return(0,_log.warnOnce)("Method eval is renamed to evaluate. Please use the new method."),evaluate(scope)}}},Node.prototype._compile=function(math,argNames){throw new Error("Method _compile should be implemented by type "+this.type)},Node.prototype.forEach=function(callback){throw new Error("Cannot run forEach on a Node interface")},Node.prototype.map=function(callback){throw new Error("Cannot run map on a Node interface")},Node.prototype._ifNode=function(node){if(!(0,_is.isNode)(node))throw new TypeError("Callback function must return a Node");return node},Node.prototype.traverse=function(callback){callback(this,null,null),function _traverse(node,callback){node.forEach(function(child,path,parent){callback(child,path,parent),_traverse(child,callback)})}(this,callback)},Node.prototype.transform=function(callback){return function _transform(child,path,parent){var replacement=callback(child,path,parent);return replacement!==child?replacement:child.map(_transform)}(this,null,null)},Node.prototype.filter=function(callback){var nodes=[];return this.traverse(function(node,path,parent){callback(node,path,parent)&&nodes.push(node)}),nodes},Node.prototype.find=function(){throw new Error("Function Node.find is deprecated. Use Node.filter instead.")},Node.prototype.match=function(){throw new Error("Function Node.match is deprecated. See functions Node.filter, Node.transform, Node.traverse.")},Node.prototype.clone=function(){throw new Error("Cannot clone a Node interface")},Node.prototype.cloneDeep=function(){return this.map(function(node){return node.cloneDeep()})},Node.prototype.equals=function(other){return!!other&&(0,_object.deepStrictEqual)(this,other)},Node.prototype.toString=function(options){var customString;if(options&&"object"===_typeof(options))switch(_typeof(options.handler)){case"object":case"undefined":break;case"function":customString=options.handler(this,options);break;default:throw new TypeError("Object or function expected as callback")}return void 0!==customString?customString:this._toString(options)},Node.prototype.toJSON=function(){throw new Error("Cannot serialize object: toJSON not implemented by "+this.type)},Node.prototype.toHTML=function(options){var customString;if(options&&"object"===_typeof(options))switch(_typeof(options.handler)){case"object":case"undefined":break;case"function":customString=options.handler(this,options);break;default:throw new TypeError("Object or function expected as callback")}return void 0!==customString?customString:this.toHTML(options)},Node.prototype._toString=function(){throw new Error("_toString not implemented for "+this.type)},Node.prototype.toTex=function(options){var customTex;if(options&&"object"===_typeof(options))switch(_typeof(options.handler)){case"object":case"undefined":break;case"function":customTex=options.handler(this,options);break;default:throw new TypeError("Object or function expected as callback")}return void 0!==customTex?customTex:this._toTex(options)},Node.prototype._toTex=function(options){throw new Error("_toTex not implemented for "+this.type)},Node.prototype.getIdentifier=function(){return this.type},Node.prototype.getContent=function(){return this},Node},{isClass:!0,isNode:!0});exports.createNode=createNode},{"../../utils/factory":931,"../../utils/is":933,"../../utils/log":935,"../../utils/object":938,"../keywords":619}],630:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createObjectNode=void 0;var _is=require("../../utils/is"),_string=require("../../utils/string"),_customs=require("../../utils/customs"),_object=require("../../utils/object");function _typeof(obj){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}var dependencies=["Node"],createObjectNode=(0,require("../../utils/factory").factory)("ObjectNode",dependencies,function(_ref){var Node=_ref.Node;function ObjectNode(properties){if(!(this instanceof ObjectNode))throw new SyntaxError("Constructor must be called with the new operator");if(this.properties=properties||{},properties&&("object"!==_typeof(properties)||!Object.keys(properties).every(function(key){return(0,_is.isNode)(properties[key])})))throw new TypeError("Object containing Nodes expected")}return(ObjectNode.prototype=new Node).type="ObjectNode",ObjectNode.prototype.isObjectNode=!0,ObjectNode.prototype._compile=function(math,argNames){var evalEntries={};for(var key in this.properties)if((0,_object.hasOwnProperty)(this.properties,key)){var stringifiedKey=(0,_string.stringify)(key),parsedKey=JSON.parse(stringifiedKey);if(!(0,_customs.isSafeProperty)(this.properties,parsedKey))throw new Error('No access to property "'+parsedKey+'"');evalEntries[parsedKey]=this.properties[key]._compile(math,argNames)}return function(scope,args,context){var obj={};for(var _key in evalEntries)(0,_object.hasOwnProperty)(evalEntries,_key)&&(obj[_key]=evalEntries[_key](scope,args,context));return obj}},ObjectNode.prototype.forEach=function(callback){for(var key in this.properties)(0,_object.hasOwnProperty)(this.properties,key)&&callback(this.properties[key],"properties["+(0,_string.stringify)(key)+"]",this)},ObjectNode.prototype.map=function(callback){var properties={};for(var key in this.properties)(0,_object.hasOwnProperty)(this.properties,key)&&(properties[key]=this._ifNode(callback(this.properties[key],"properties["+(0,_string.stringify)(key)+"]",this)));return new ObjectNode(properties)},ObjectNode.prototype.clone=function(){var properties={};for(var key in this.properties)(0,_object.hasOwnProperty)(this.properties,key)&&(properties[key]=this.properties[key]);return new ObjectNode(properties)},ObjectNode.prototype._toString=function(options){var entries=[];for(var key in this.properties)(0,_object.hasOwnProperty)(this.properties,key)&&entries.push((0,_string.stringify)(key)+": "+this.properties[key].toString(options));return"{"+entries.join(", ")+"}"},ObjectNode.prototype.toJSON=function(){return{mathjs:"ObjectNode",properties:this.properties}},ObjectNode.fromJSON=function(json){return new ObjectNode(json.properties)},ObjectNode.prototype.toHTML=function(options){var entries=[];for(var key in this.properties)(0,_object.hasOwnProperty)(this.properties,key)&&entries.push(''+(0,_string.escape)(key)+':'+this.properties[key].toHTML(options));return'{'+entries.join(',')+'}'},ObjectNode.prototype._toTex=function(options){var entries=[];for(var key in this.properties)(0,_object.hasOwnProperty)(this.properties,key)&&entries.push("\\mathbf{"+key+":} & "+this.properties[key].toTex(options)+"\\\\");return"\\left\\{\\begin{array}{ll}".concat(entries.join("\n"),"\\end{array}\\right\\}")},ObjectNode},{isClass:!0,isNode:!0});exports.createObjectNode=createObjectNode},{"../../utils/customs":929,"../../utils/factory":931,"../../utils/is":933,"../../utils/object":938,"../../utils/string":941}],631:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createOperatorNode=void 0;var _is=require("../../utils/is"),_array=require("../../utils/array"),_string=require("../../utils/string"),_customs=require("../../utils/customs"),_operators=require("../operators"),_latex=require("../../utils/latex"),dependencies=["Node"],createOperatorNode=(0,require("../../utils/factory").factory)("OperatorNode",dependencies,function(_ref){var Node=_ref.Node;function OperatorNode(op,fn,args,implicit){if(!(this instanceof OperatorNode))throw new SyntaxError("Constructor must be called with the new operator");if("string"!=typeof op)throw new TypeError('string expected for parameter "op"');if("string"!=typeof fn)throw new TypeError('string expected for parameter "fn"');if(!Array.isArray(args)||!args.every(_is.isNode))throw new TypeError('Array containing Nodes expected for parameter "args"');this.implicit=!0===implicit,this.op=op,this.fn=fn,this.args=args||[]}function calculateNecessaryParentheses(root,parenthesis,implicit,args,latex){var result,precedence=(0,_operators.getPrecedence)(root,parenthesis),associativity=(0,_operators.getAssociativity)(root,parenthesis);if("all"===parenthesis||2)'),"right"===assoc?''+(0,_string.escape)(this.op)+""+operand:operand+''+(0,_string.escape)(this.op)+""}if(2===args.length){var lhs=args[0].toHTML(options),rhs=args[1].toHTML(options);return parens[0]&&(lhs='('+lhs+')'),parens[1]&&(rhs='('+rhs+')'),this.implicit&&"OperatorNode:multiply"===this.getIdentifier()&&"hide"===implicit?lhs+''+rhs:lhs+''+(0,_string.escape)(this.op)+""+rhs}var stringifiedArgs=args.map(function(arg,index){return arg=arg.toHTML(options),parens[index]&&(arg='('+arg+')'),arg});return 2'):stringifiedArgs.join(''+(0,_string.escape)(this.op)+""):''+(0,_string.escape)(this.fn)+'('+stringifiedArgs.join(',')+')'},OperatorNode.prototype._toTex=function(options){var parenthesis=options&&options.parenthesis?options.parenthesis:"keep",implicit=options&&options.implicit?options.implicit:"hide",args=this.args,parens=calculateNecessaryParentheses(this,parenthesis,implicit,args,!0),op=void 0===(op=_latex.latexOperators[this.fn])?this.op:op;if(1===args.length){var assoc=(0,_operators.getAssociativity)(this,parenthesis),operand=args[0].toTex(options);return parens[0]&&(operand="\\left(".concat(operand,"\\right)")),"right"===assoc?op+operand:operand+op}if(2===args.length){var lhs=args[0],lhsTex=lhs.toTex(options);parens[0]&&(lhsTex="\\left(".concat(lhsTex,"\\right)"));var lhsIdentifier,rhsTex=args[1].toTex(options);switch(parens[1]&&(rhsTex="\\left(".concat(rhsTex,"\\right)")),lhsIdentifier="keep"===parenthesis?lhs.getIdentifier():lhs.getContent().getIdentifier(),this.getIdentifier()){case"OperatorNode:divide":return op+"{"+lhsTex+"}{"+rhsTex+"}";case"OperatorNode:pow":switch(lhsTex="{"+lhsTex+"}",rhsTex="{"+rhsTex+"}",lhsIdentifier){case"ConditionalNode":case"OperatorNode:divide":lhsTex="\\left(".concat(lhsTex,"\\right)")}break;case"OperatorNode:multiply":if(this.implicit&&"hide"===implicit)return lhsTex+"~"+rhsTex}return lhsTex+op+rhsTex}if(2('+this.content.toHTML(options)+')':this.content.toHTML(options)},ParenthesisNode.prototype._toTex=function(options){return!options||options&&!options.parenthesis||options&&"keep"===options.parenthesis?"\\left(".concat(this.content.toTex(options),"\\right)"):this.content.toTex(options)},ParenthesisNode},{isClass:!0,isNode:!0});exports.createParenthesisNode=createParenthesisNode},{"../../utils/factory":931,"../../utils/is":933}],633:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createRangeNode=void 0;var _is=require("../../utils/is"),_factory=require("../../utils/factory"),_operators=require("../operators"),dependencies=["Node"],createRangeNode=(0,_factory.factory)("RangeNode",dependencies,function(_ref){var Node=_ref.Node;function RangeNode(start,end,step){if(!(this instanceof RangeNode))throw new SyntaxError("Constructor must be called with the new operator");if(!(0,_is.isNode)(start))throw new TypeError("Node expected");if(!(0,_is.isNode)(end))throw new TypeError("Node expected");if(step&&!(0,_is.isNode)(step))throw new TypeError("Node expected");if(3('+start+')'),str=start,this.step&&(step=this.step.toHTML(options),parens.step&&(step='('+step+')'),str+=':'+step);var end=this.end.toHTML(options);return parens.end&&(end='('+end+')'),str+=':'+end},RangeNode.prototype._toTex=function(options){var step,parens=calculateNecessaryParentheses(this,options&&options.parenthesis?options.parenthesis:"keep"),str=this.start.toTex(options);parens.start&&(str="\\left(".concat(str,"\\right)")),this.step&&(step=this.step.toTex(options),parens.step&&(step="\\left(".concat(step,"\\right)")),str+=":"+step);var end=this.end.toTex(options);return parens.end&&(end="\\left(".concat(end,"\\right)")),str+=":"+end},RangeNode},{isClass:!0,isNode:!0});exports.createRangeNode=createRangeNode},{"../../utils/factory":931,"../../utils/is":933,"../operators":638}],634:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createRelationalNode=void 0;var _operators=require("../operators"),_string=require("../../utils/string"),_customs=require("../../utils/customs"),_latex=require("../../utils/latex"),dependencies=["Node"],createRelationalNode=(0,require("../../utils/factory").factory)("RelationalNode",dependencies,function(_ref){var Node=_ref.Node;function RelationalNode(conditionals,params){if(!(this instanceof RelationalNode))throw new SyntaxError("Constructor must be called with the new operator");if(!Array.isArray(conditionals))throw new TypeError("Parameter conditionals must be an array");if(!Array.isArray(params))throw new TypeError("Parameter params must be an array");if(conditionals.length!==params.length-1)throw new TypeError("Parameter params must contain exactly one more element than parameter conditionals");this.conditionals=conditionals,this.params=params}return(RelationalNode.prototype=new Node).type="RelationalNode",RelationalNode.prototype.isRelationalNode=!0,RelationalNode.prototype._compile=function(math,argNames){var self=this,compiled=this.params.map(function(p){return p._compile(math,argNames)});return function(scope,args,context){for(var evalRhs=compiled[0](scope,args,context),i=0;i",smallerEq:"<=",largerEq:">="},ret=paramStrings[0],i=0;i('+p.toHTML(options)+')':p.toHTML(options)}),operatorMap={equal:"==",unequal:"!=",smaller:"<",larger:">",smallerEq:"<=",largerEq:">="},ret=paramStrings[0],i=0;i'+(0,_string.escape)(operatorMap[this.conditionals[i]])+""+paramStrings[i+1];return ret},RelationalNode.prototype._toTex=function(options){for(var parenthesis=options&&options.parenthesis?options.parenthesis:"keep",precedence=(0,_operators.getPrecedence)(this,parenthesis),paramStrings=this.params.map(function(p,index){var paramPrecedence=(0,_operators.getPrecedence)(p,parenthesis);return"all"===parenthesis||null!==paramPrecedence&¶mPrecedence<=precedence?"\\left("+p.toTex(options)+"\right)":p.toTex(options)}),ret=paramStrings[0],i=0;i'+name+"":"i"===name?''+name+"":"Infinity"===name?''+name+"":"NaN"===name?''+name+"":"null"===name?''+name+"":"undefined"===name?''+name+"":''+name+""},SymbolNode.prototype.toJSON=function(){return{mathjs:"SymbolNode",name:this.name}},SymbolNode.fromJSON=function(json){return new SymbolNode(json.name)},SymbolNode.prototype._toTex=function(options){var isUnit=!1;void 0===math[this.name]&&isValuelessUnit(this.name)&&(isUnit=!0);var symbol=(0,_latex.toSymbol)(this.name,isUnit);return"\\"===symbol[0]?symbol:" "+symbol},SymbolNode},{isClass:!0,isNode:!0});exports.createSymbolNode=createSymbolNode},{"../../utils/customs":929,"../../utils/factory":931,"../../utils/latex":934,"../../utils/string":941}],636:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.accessFactory=function(_ref){var subset=_ref.subset;return function(object,index){try{if(Array.isArray(object))return subset(object,index);if(object&&"function"==typeof object.subset)return object.subset(index);if("string"==typeof object)return subset(object,index);if("object"!==_typeof(object))throw new TypeError("Cannot apply index: unsupported type of object");if(!index.isObjectProperty())throw new TypeError("Cannot apply a numeric index as object property");return(0,_customs.getSafeProperty)(object,index.getObjectProperty())}catch(err){throw(0,_errorTransform.errorTransform)(err)}}};var _errorTransform=require("../../transform/utils/errorTransform"),_customs=require("../../../utils/customs");function _typeof(obj){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}},{"../../../utils/customs":929,"../../transform/utils/errorTransform":656}],637:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.assignFactory=function(_ref){var subset=_ref.subset,matrix=_ref.matrix;return function(object,index,value){try{if(Array.isArray(object))return matrix(object).subset(index,value).valueOf();if(object&&"function"==typeof object.subset)return object.subset(index,value);if("string"==typeof object)return subset(object,index,value);if("object"!==_typeof(object))throw new TypeError("Cannot apply index: unsupported type of object");if(!index.isObjectProperty())throw TypeError("Cannot apply a numeric index as object property");return(0,_customs.setSafeProperty)(object,index.getObjectProperty(),value),object}catch(err){throw(0,_errorTransform.errorTransform)(err)}}};var _errorTransform=require("../../transform/utils/errorTransform"),_customs=require("../../../utils/customs");function _typeof(obj){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}},{"../../../utils/customs":929,"../../transform/utils/errorTransform":656}],638:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getPrecedence=getPrecedence,exports.getAssociativity=function(_node,parenthesis){var node=_node;"keep"!==parenthesis&&(node=_node.getContent());var identifier=node.getIdentifier(),index=getPrecedence(node,parenthesis);if(null===index)return null;var property=properties[index][identifier];if((0,_object.hasOwnProperty)(property,"associativity")){if("left"===property.associativity)return"left";if("right"===property.associativity)return"right";throw Error("'"+identifier+"' has the invalid associativity '"+property.associativity+"'.")}return null},exports.isAssociativeWith=function(nodeA,nodeB,parenthesis){var a="keep"!==parenthesis?nodeA.getContent():nodeA,b="keep"!==parenthesis?nodeA.getContent():nodeB,identifierA=a.getIdentifier(),identifierB=b.getIdentifier(),index=getPrecedence(a,parenthesis);if(null===index)return null;var property=properties[index][identifierA];if((0,_object.hasOwnProperty)(property,"associativeWith")&&property.associativeWith instanceof Array){for(var i=0;i":!0,"<=":!0,">=":!0,"<<":!0,">>":!0,">>>":!0},NAMED_DELIMITERS={mod:!0,to:!0,in:!0,and:!0,xor:!0,or:!0,not:!0},CONSTANTS={true:!0,false:!1,null:null,undefined:void 0},NUMERIC_CONSTANTS=["NaN","Infinity"];function currentString(state,length){return state.expression.substr(state.index,length)}function currentCharacter(state){return currentString(state,1)}function next(state){state.index++}function prevCharacter(state){return state.expression.charAt(state.index-1)}function nextCharacter(state){return state.expression.charAt(state.index+1)}function getToken(state){for(state.tokenType=TOKENTYPE.NULL,state.token="",state.comment="";parse.isWhitespace(currentCharacter(state),state.nestingLevel);)next(state);if("#"===currentCharacter(state))for(;"\n"!==currentCharacter(state)&&""!==currentCharacter(state);)state.comment+=currentCharacter(state),next(state);if(""!==currentCharacter(state)){if("\n"===currentCharacter(state)&&!state.nestingLevel)return state.tokenType=TOKENTYPE.DELIMITER,state.token=currentCharacter(state),void next(state);var c1=currentCharacter(state),c2=currentString(state,2),c3=currentString(state,3);if(3===c3.length&&DELIMITERS[c3])return state.tokenType=TOKENTYPE.DELIMITER,state.token=c3,next(state),next(state),void next(state);if(2===c2.length&&DELIMITERS[c2])return state.tokenType=TOKENTYPE.DELIMITER,state.token=c2,next(state),void next(state);if(DELIMITERS[c1])return state.tokenType=TOKENTYPE.DELIMITER,state.token=c1,void next(state);if(parse.isDigitDot(c1)){if(state.tokenType=TOKENTYPE.NUMBER,"."===currentCharacter(state))state.token+=currentCharacter(state),next(state),parse.isDigit(currentCharacter(state))||(state.tokenType=TOKENTYPE.DELIMITER);else{for(;parse.isDigit(currentCharacter(state));)state.token+=currentCharacter(state),next(state);parse.isDecimalMark(currentCharacter(state),nextCharacter(state))&&(state.token+=currentCharacter(state),next(state))}for(;parse.isDigit(currentCharacter(state));)state.token+=currentCharacter(state),next(state);if("E"===currentCharacter(state)||"e"===currentCharacter(state))if(parse.isDigit(nextCharacter(state))||"-"===nextCharacter(state)||"+"===nextCharacter(state)){if(state.token+=currentCharacter(state),next(state),"+"!==currentCharacter(state)&&"-"!==currentCharacter(state)||(state.token+=currentCharacter(state),next(state)),!parse.isDigit(currentCharacter(state)))throw createSyntaxError(state,'Digit expected, got "'+currentCharacter(state)+'"');for(;parse.isDigit(currentCharacter(state));)state.token+=currentCharacter(state),next(state);if(parse.isDecimalMark(currentCharacter(state),nextCharacter(state)))throw createSyntaxError(state,'Digit expected, got "'+currentCharacter(state)+'"')}else if("."===nextCharacter(state))throw next(state),createSyntaxError(state,'Digit expected, got "'+currentCharacter(state)+'"')}else{if(!parse.isAlpha(currentCharacter(state),prevCharacter(state),nextCharacter(state))){for(state.tokenType=TOKENTYPE.UNKNOWN;""!==currentCharacter(state);)state.token+=currentCharacter(state),next(state);throw createSyntaxError(state,'Syntax error in part "'+state.token+'"')}for(;parse.isAlpha(currentCharacter(state),prevCharacter(state),nextCharacter(state))||parse.isDigit(currentCharacter(state));)state.token+=currentCharacter(state),next(state);(0,_object.hasOwnProperty)(NAMED_DELIMITERS,state.token)?state.tokenType=TOKENTYPE.DELIMITER:state.tokenType=TOKENTYPE.SYMBOL}}else state.tokenType=TOKENTYPE.DELIMITER}function getTokenSkipNewline(state){for(;getToken(state),"\n"===state.token;);}function openParams(state){state.nestingLevel++}function closeParams(state){state.nestingLevel--}function parseStart(expression,extraNodes){var state={extraNodes:{},expression:"",comment:"",index:0,token:"",tokenType:TOKENTYPE.NULL,nestingLevel:0,conditionalLevel:null};_extends(state,{expression:expression,extraNodes:extraNodes}),getToken(state);var node=function(state){var node,visible,blocks=[];""!==state.token&&"\n"!==state.token&&";"!==state.token&&((node=parseAssignment(state)).comment=state.comment);for(;"\n"===state.token||";"===state.token;)0===blocks.length&&node&&(visible=";"!==state.token,blocks.push({node:node,visible:visible})),getToken(state),"\n"!==state.token&&";"!==state.token&&""!==state.token&&((node=parseAssignment(state)).comment=state.comment,visible=";"!==state.token,blocks.push({node:node,visible:visible}));return 0":"larger","<=":"smallerEq",">=":"largerEq"};(0,_object.hasOwnProperty)(operators,state.token);){var cond={name:state.token,fn:operators[state.token]};conditionals.push(cond),getTokenSkipNewline(state),params.push(parseShift(state))}return 1===params.length?params[0]:2===params.length?new OperatorNode(conditionals[0].name,conditionals[0].fn,params):new RelationalNode(conditionals.map(function(c){return c.fn}),params)}function parseShift(state){for(var name,fn,params,node=parseConversion(state),operators={"<<":"leftShift",">>":"rightArithShift",">>>":"rightLogShift"};(0,_object.hasOwnProperty)(operators,state.token);)fn=operators[name=state.token],getTokenSkipNewline(state),params=[node,parseConversion(state)],node=new OperatorNode(name,fn,params);return node}function parseConversion(state){for(var name,fn,params,node=parseRange(state),operators={to:"to",in:"to"};(0,_object.hasOwnProperty)(operators,state.token);)fn=operators[name=state.token],getTokenSkipNewline(state),node="in"===name&&""===state.token?new OperatorNode("*","multiply",[node,new SymbolNode("in")],!0):(params=[node,parseRange(state)],new OperatorNode(name,fn,params));return node}function parseRange(state){var params=[],node=":"===state.token?new ConstantNode(1):parseAddSubtract(state);if(":"===state.token&&state.conditionalLevel!==state.nestingLevel){for(params.push(node);":"===state.token&¶ms.length<3;)getTokenSkipNewline(state),")"===state.token||"]"===state.token||","===state.token||""===state.token?params.push(new SymbolNode("end")):params.push(parseAddSubtract(state));node=3===params.length?new RangeNode(params[0],params[2],params[1]):new RangeNode(params[0],params[1])}return node}function parseAddSubtract(state){for(var name,fn,params,node=parseMultiplyDivide(state),operators={"+":"add","-":"subtract"};(0,_object.hasOwnProperty)(operators,state.token);)fn=operators[name=state.token],getTokenSkipNewline(state),params=[node,parseMultiplyDivide(state)],node=new OperatorNode(name,fn,params);return node}function parseMultiplyDivide(state){for(var name,fn,last,node=parseImplicitMultiplication(state),operators={"*":"multiply",".*":"dotMultiply","/":"divide","./":"dotDivide","%":"mod",mod:"mod"};(0,_object.hasOwnProperty)(operators,state.token);)fn=operators[name=state.token],getTokenSkipNewline(state),last=parseImplicitMultiplication(state),node=new OperatorNode(name,fn,[node,last]);return node}function parseImplicitMultiplication(state){for(var node=parseRule2(state),last=node;state.tokenType===TOKENTYPE.SYMBOL||"in"===state.token&&(0,_is.isConstantNode)(node)||!(state.tokenType!==TOKENTYPE.NUMBER||(0,_is.isConstantNode)(last)||(0,_is.isOperatorNode)(last)&&"!"!==last.op)||"("===state.token;)last=parseRule2(state),node=new OperatorNode("*","multiply",[node,last],!0);return node}function parseRule2(state){for(var node=parseUnary(state),last=node,tokenStates=[];"/"===state.token&&(0,_is.isConstantNode)(last);){if(tokenStates.push(_extends({},state)),getTokenSkipNewline(state),state.tokenType!==TOKENTYPE.NUMBER){_extends(state,tokenStates.pop());break}if(tokenStates.push(_extends({},state)),getTokenSkipNewline(state),state.tokenType!==TOKENTYPE.SYMBOL&&"("!==state.token){tokenStates.pop(),_extends(state,tokenStates.pop());break}_extends(state,tokenStates.pop()),tokenStates.pop(),last=parseUnary(state),node=new OperatorNode("/","divide",[node,last])}return node}function parseUnary(state){var name,params,fn,operators={"-":"unaryMinus","+":"unaryPlus","~":"bitNot",not:"not"};return(0,_object.hasOwnProperty)(operators,state.token)?(fn=operators[state.token],name=state.token,getTokenSkipNewline(state),params=[parseUnary(state)],new OperatorNode(name,fn,params)):function(state){var node,name,fn,params;node=function(state){var node,name,fn;node=function(state){var params=[];if(state.tokenType===TOKENTYPE.SYMBOL&&(0,_object.hasOwnProperty)(state.extraNodes,state.token)){var CustomNode=state.extraNodes[state.token];if(getToken(state),"("===state.token){if(params=[],openParams(state),getToken(state),")"!==state.token)for(params.push(parseAssignment(state));","===state.token;)getToken(state),params.push(parseAssignment(state));if(")"!==state.token)throw createSyntaxError(state,"Parenthesis ) expected");closeParams(state),getToken(state)}return new CustomNode(params)}return function(state){var node,name;if(state.tokenType===TOKENTYPE.SYMBOL||state.tokenType===TOKENTYPE.DELIMITER&&state.token in NAMED_DELIMITERS)return name=state.token,getToken(state),node=(0,_object.hasOwnProperty)(CONSTANTS,name)?new ConstantNode(CONSTANTS[name]):-1!==NUMERIC_CONSTANTS.indexOf(name)?new ConstantNode(numeric(name,"number")):new SymbolNode(name),node=parseAccessors(state,node);return function(state){var node,str;return'"'!==state.token?function(state){var node,str;return"'"!==state.token?function(state){var array,params,rows,cols;if("["!==state.token)return function(state){if("{"!==state.token)return function(state){var numberStr;return state.tokenType!==TOKENTYPE.NUMBER?function(state){var node;if("("!==state.token)return function(state){throw""===state.token?createSyntaxError(state,"Unexpected end of expression"):createSyntaxError(state,"Value expected")}(state);if(openParams(state),getToken(state),node=parseAssignment(state),")"===state.token)return closeParams(state),getToken(state),node=new ParenthesisNode(node),node=parseAccessors(state,node);throw createSyntaxError(state,"Parenthesis ) expected")}(state):(numberStr=state.token,getToken(state),new ConstantNode(numeric(numberStr,config.number)))}(state);var key;openParams(state);var properties={};do{if(getToken(state),"}"!==state.token){if('"'===state.token)key=parseDoubleQuotesStringToken(state);else if("'"===state.token)key=parseSingleQuotesStringToken(state);else{if(!(state.tokenType===TOKENTYPE.SYMBOL||state.tokenType===TOKENTYPE.DELIMITER&&state.token in NAMED_DELIMITERS))throw createSyntaxError(state,"Symbol or string expected as object key");key=state.token,getToken(state)}if(":"!==state.token)throw createSyntaxError(state,"Colon : expected after object key");getToken(state),properties[key]=parseAssignment(state)}}while(","===state.token);if("}"!==state.token)throw createSyntaxError(state,"Comma , or bracket } expected after object value");closeParams(state),getToken(state);var node=new ObjectNode(properties);return node=parseAccessors(state,node)}(state);if(openParams(state),getToken(state),"]"!==state.token){var row=parseRow(state);if(";"===state.token){for(rows=1,params=[row];";"===state.token;)getToken(state),params[rows]=parseRow(state),rows++;if("]"!==state.token)throw createSyntaxError(state,"End of matrix ] expected");closeParams(state),getToken(state),cols=params[0].items.length;for(var r=1;r");if(2!==lr.length)throw SyntaxError("Could not parse rule: "+rule);rule={l:lr[0],r:lr[1]};case"object":newRule={l:removeParens(parse(rule.l)),r:removeParens(parse(rule.r))},rule.context&&(newRule.evaluate=rule.context),rule.evaluate&&(newRule.evaluate=parse(rule.evaluate)),isAssociative(newRule.l)&&(makeNode=createMakeNodeFunction(newRule.l),expandsym=new SymbolNode("_p"+_lastsym++),newRule.expanded={},newRule.expanded.l=makeNode([newRule.l.clone(),expandsym]),flatten(newRule.expanded.l),unflattenr(newRule.expanded.l),newRule.expanded.r=makeNode([newRule.r,expandsym]));break;case"function":newRule=rule;break;default:throw TypeError("Unsupported type of rule: "+ruleType)}ruleSet.push(newRule)}return ruleSet}(rules);for(var res=resolve(expr,scope),visited={},str=(res=removeParens(res)).toString({parenthesis:"all"});!visited[str];){visited[str]=!0;for(var i=_lastsym=0;idense))for(var p1=tptr[j+1];p=mark?W[w+e]-=nvi:0!==W[w+e]&&(W[w+e]=W[degree+e]+wnvi);for(pk=pk1;pk>=1,px=multiply(px,px);return res}function _powMatrix(x,y){return matrix(_powArray(x.valueOf(),y))}});exports.createPow=createPow},{"../../plain/number":874,"../../utils/array":922,"../../utils/factory":931,"../../utils/number":937}],720:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createRoundNumber=exports.createRound=void 0;var _factory=require("../../utils/factory"),_collection=require("../../utils/collection"),_number=require("../../utils/number"),_algorithm=require("../../type/matrix/utils/algorithm11"),_algorithm2=require("../../type/matrix/utils/algorithm12"),_algorithm3=require("../../type/matrix/utils/algorithm14"),_number2=require("../../plain/number");function ownKeys(object,enumerableOnly){var symbols,keys=Object.keys(object);return Object.getOwnPropertySymbols&&(symbols=Object.getOwnPropertySymbols(object),enumerableOnly&&(symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable})),keys.push.apply(keys,symbols)),keys}function _objectSpread(target){for(var i=1;i=size.length)throw new _IndexError.IndexError(dim,size.length);return(0,_is.isMatrix)(mat)?mat.create(_apply(mat.valueOf(),dim,callback)):_apply(mat,dim,callback)}})});function _apply(mat,dim,callback){var i,ret,tran;if(dim<=0){if(Array.isArray(mat[0])){for(tran=function(mat){var i,j,I=mat.length,J=mat[0].length,ret=[];for(j=0;j=abs(e0);){var _i3=Vab[0][0],j=Vab[0][1];psi=function(aii,ajj,aij){var denom=subtract(ajj,aii);return abs(denom)<=config.epsilon?bignumber(-1).acos().div(4):multiplyScalar(.5,atan(multiply(2,aij,inv(denom))))}(x[_i3][_i3],x[j][j],x[_i3][j]),x=function(Hij,theta,i,j){for(var N=Hij.length,c=bignumber(cos(theta)),s=bignumber(sin(theta)),c2=multiplyScalar(c,c),s2=multiplyScalar(s,s),Aki=createArray(N,bignumber(0)),Akj=createArray(N,bignumber(0)),csHij=multiply(bignumber(2),c,s,Hij[i][j]),Aii=addScalar(subtract(multiplyScalar(c2,Hij[i][i]),csHij),multiplyScalar(s2,Hij[j][j])),Ajj=add(multiplyScalar(s2,Hij[i][i]),csHij,multiplyScalar(c2,Hij[j][j])),k=0;k=Math.abs(e0);){var _i=Vab[0][0],j=Vab[0][1];aii=x[_i][_i],ajj=x[j][j],aij=x[_i][j],denom=void 0,denom=ajj-aii,x=function(Hij,theta,i,j){for(var N=Hij.length,c=Math.cos(theta),s=Math.sin(theta),c2=c*c,s2=s*s,Aki=createArray(N,0),Akj=createArray(N,0),Aii=c2*Hij[i][i]-2*c*s*Hij[i][j]+s2*Hij[j][j],Ajj=s2*Hij[i][i]+2*c*s*Hij[i][j]+c2*Hij[j][j],k=0;kABig&&(ABig=abs(A[r][c]),rBig=r),r++;if(0===ABig)throw Error("Cannot calculate inverse, determinant is zero");(r=rBig)!==c&&(temp=A[c],A[c]=A[r],A[r]=temp,temp=B[c],B[c]=B[r],B[r]=temp);var Ac=A[c],Bc=B[c];for(r=0;r=arr.length)throw new Error("k out of bounds");for(var i=0;ilen)return str.substring(0,len);if(str.length_maxIterations)throw new Error("computing square root of matrix: iterative method could not converge")}while(_tolerancestrLen)for(var _i=strLen-1,_len=chars.length;_i<_len;_i++)chars[_i]||(chars[_i]=defaultValue);return chars.join("")}function _getObjectProperty(object,index){if(1!==index.size().length)throw new _DimensionError.DimensionError(index.size(),1);var key=index.dimension(0);if("string"!=typeof key)throw new TypeError("String expected as index to retrieve an object property");return(0,_customs.getSafeProperty)(object,key)}function _setObjectProperty(object,index,replacement){if(1!==index.size().length)throw new _DimensionError.DimensionError(index.size(),1);var key=index.dimension(0);if("string"!=typeof key)throw new TypeError("String expected as index to retrieve an object property");var updated=(0,_object.clone)(object);return(0,_customs.setSafeProperty)(updated,key,replacement),updated}exports.createSubset=createSubset},{"../../error/DimensionError":399,"../../utils/array":922,"../../utils/customs":929,"../../utils/factory":931,"../../utils/is":933,"../../utils/object":938}],779:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createTrace=void 0;var _object=require("../../utils/object"),_string=require("../../utils/string"),dependencies=["typed","matrix","add"],createTrace=(0,require("../../utils/factory").factory)("trace",dependencies,function(_ref){var typed=_ref.typed,matrix=_ref.matrix,add=_ref.add;return typed("trace",{Array:function(x){return _denseTrace(matrix(x))},SparseMatrix:function(m){var values=m._values,index=m._index,ptr=m._ptr,size=m._size,rows=size[0],columns=size[1];if(rows!==columns)throw new RangeError("Matrix must be square (size: "+(0,_string.format)(size)+")");var sum=0;if(0y.re)return 1;if(x.rey.im)return 1;if(x.imy.length?1:x.lengtharray[j+1].length&&(temp=array[j],array[j]=array[j+1],array[j+1]=temp);return array}(result)}})});exports.createSetPowerset=createSetPowerset},{"../../utils/array":922,"../../utils/factory":931}],813:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createSetSize=void 0;var _array=require("../../utils/array"),_factory=require("../../utils/factory"),dependencies=["typed","compareNatural"],createSetSize=(0,_factory.factory)("setSize",dependencies,function(_ref){var typed=_ref.typed,compareNatural=_ref.compareNatural;return typed("setSize",{"Array | Matrix":function(a){return Array.isArray(a)?(0,_array.flatten)(a).length:(0,_array.flatten)(a.toArray()).length},"Array | Matrix, boolean":function(a,unique){if(!1===unique||0===a.length)return Array.isArray(a)?(0,_array.flatten)(a).length:(0,_array.flatten)(a.toArray()).length;for(var b=(0,_array.flatten)(Array.isArray(a)?a:a.toArray()).sort(compareNatural),count=1,i=1;imax&&(max=count[value],mode=[value])}return mode}});exports.createMode=createMode},{"../../utils/array":922,"../../utils/factory":931}],823:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createProd=void 0;var _collection=require("../../utils/collection"),_factory=require("../../utils/factory"),_improveErrorMessage=require("./utils/improveErrorMessage"),dependencies=["typed","multiply"],createProd=(0,_factory.factory)("prod",dependencies,function(_ref){var typed=_ref.typed,multiply=_ref.multiply;return typed("prod",{"Array | Matrix":_prod,"Array | Matrix, number | BigNumber":function(){throw new Error("prod(A, dim) is not yet supported")},"...":_prod});function _prod(array){var prod;if((0,_collection.deepForEach)(array,function(value){try{prod=void 0===prod?value:multiply(prod,value)}catch(err){throw(0,_improveErrorMessage.improveErrorMessage)(err,"prod",value)}}),void 0===prod)throw new Error("Cannot calculate prod of an empty array");return prod}});exports.createProd=createProd},{"../../utils/collection":927,"../../utils/factory":931,"./utils/improveErrorMessage":827}],824:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createQuantileSeq=void 0;var _is=require("../../utils/is"),_number=require("../../utils/number"),_array=require("../../utils/array"),dependencies=["typed","add","multiply","partitionSelect","compare"],createQuantileSeq=(0,require("../../utils/factory").factory)("quantileSeq",dependencies,function(_ref){var typed=_ref.typed,add=_ref.add,multiply=_ref.multiply,partitionSelect=_ref.partitionSelect,compare=_ref.compare;function _quantileSeq(array,prob,sorted){var flat=(0,_array.flatten)(array),len=flat.length;if(0===len)throw new Error("Cannot calculate quantile of an empty sequence");if((0,_is.isNumber)(prob)){var _index=prob*(len-1),_fracPart=_index%1;if(0==_fracPart){var value=sorted?flat[_index]:partitionSelect(flat,_index);return validate(value),value}var _left,_right,_integerPart=Math.floor(_index);if(sorted)_left=flat[_integerPart],_right=flat[_integerPart+1];else{_right=partitionSelect(flat,_integerPart+1),_left=flat[_integerPart];for(var i=0;i<_integerPart;++i)0>y}function rightLogShiftNumber(x,y){if(!(0,_number.isInteger)(x)||!(0,_number.isInteger)(y))throw new Error("Integers expected in function rightLogShift");return x>>>y}bitAndNumber.signature=n2,bitNotNumber.signature="number",rightLogShiftNumber.signature=rightArithShiftNumber.signature=leftShiftNumber.signature=bitXorNumber.signature=bitOrNumber.signature=n2},{"../../utils/number":937}],872:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.combinationsNumber=combinationsNumber;var _number=require("../../utils/number"),_product=require("../../utils/product");function combinationsNumber(n,k){if(!(0,_number.isInteger)(n)||n<0)throw new TypeError("Positive integer value expected in function combinations");if(!(0,_number.isInteger)(k)||k<0)throw new TypeError("Positive integer value expected in function combinations");if(nb.re?1:a.reb.im?1:a.imnewSize[i]&&(newSize[i]=size[i],changed=!0);changed&&_resize(matrix,newSize,defaultValue)}return(DenseMatrix.prototype=new Matrix).createDenseMatrix=function(data,datatype){return new DenseMatrix(data,datatype)},DenseMatrix.prototype.type="DenseMatrix",DenseMatrix.prototype.isDenseMatrix=!0,DenseMatrix.prototype.getDataType=function(){return(0,_array.getArrayDataType)(this._data,_is.typeOf)},DenseMatrix.prototype.storage=function(){return"dense"},DenseMatrix.prototype.datatype=function(){return this._datatype},DenseMatrix.prototype.create=function(data,datatype){return new DenseMatrix(data,datatype)},DenseMatrix.prototype.subset=function(index,replacement,defaultValue){switch(arguments.length){case 1:return function(matrix,index){if(!(0,_is.isIndex)(index))throw new TypeError("Invalid index");{if(index.isScalar())return matrix.get(index.min());var size=index.size();if(size.length!==matrix._size.length)throw new _DimensionError.DimensionError(size.length,matrix._size.length);for(var min=index.min(),max=index.max(),i=0,ii=matrix._size.length;i");var size=index.max().map(function(i){return i+1});_fit(matrix,size,defaultValue);var dims=iSize.length;!function _setSubmatrix(data,index,submatrix,dims,dim){var last=dim===dims-1;var range=index.dimension(dim);last?range.forEach(function(dataIndex,subIndex){(0,_array.validateIndex)(dataIndex),data[dataIndex]=submatrix[subIndex[0]]}):range.forEach(function(dataIndex,subIndex){(0,_array.validateIndex)(dataIndex),_setSubmatrix(data[dataIndex],index,submatrix[subIndex[0]],dims,dim+1)})}(matrix._data,index,submatrix,dims,0)}return matrix}(this,index,replacement,defaultValue);default:throw new SyntaxError("Wrong number of arguments")}},DenseMatrix.prototype.get=function(index){if(!(0,_is.isArray)(index))throw new TypeError("Array expected");if(index.length!==this._size.length)throw new _DimensionError.DimensionError(index.length,this._size.length);for(var x=0;x=from&&(equalScalar(node.value,0)||callback(node.key,node.value,this)),(node=heap.extractMinimum())&&nodes.push(node);for(var i=0;i");for(var x0=index.min()[0],y0=index.min()[1],m=sSize[0],n=sSize[1],x=0;x "+(this._values?(0,_string.format)(this._values[k],options):"X")}return str},SparseMatrix.prototype.toString=function(){return(0,_string.format)(this.toArray())},SparseMatrix.prototype.toJSON=function(){return{mathjs:"SparseMatrix",values:this._values,index:this._index,ptr:this._ptr,size:this._size,datatype:this._datatype}},SparseMatrix.prototype.diagonal=function(k){if(k){if((0,_is.isBigNumber)(k)&&(k=k.toNumber()),!(0,_is.isNumber)(k)||!(0,_number.isInteger)(k))throw new TypeError("The parameter k must be an integer number")}else k=0;var kSuper=0")}(array,size,0)},exports.validateIndex=function(index,length){if(!(0,_is.isNumber)(index)||!(0,_number.isInteger)(index))throw new TypeError("Index must be an integer (value: "+index+")");if(index<0||"number"==typeof length&&length<=index)throw new _IndexError.IndexError(index,length)},exports.resize=function(array,size,defaultValue){if(!Array.isArray(array)||!Array.isArray(size))throw new TypeError("Array expected");if(0===size.length)throw new Error("Resizing to scalar is not supported");size.forEach(function(value){if(!(0,_is.isNumber)(value)||!(0,_number.isInteger)(value)||value<0)throw new TypeError("Invalid size, must contain positive integers (size: "+(0,_string.format)(size)+")")});var _defaultValue=void 0!==defaultValue?defaultValue:0;return function _resize(array,size,dim,defaultValue){var i;var elem;var oldLen=array.length;var newLen=size[dim];var minLen=Math.min(oldLen,newLen);array.length=newLen;if(dimstrL)for(xe-=strL;xe--;)str+="0";else xe>1,arr[_j]&=1)}return arr.reverse()}Object.defineProperty(exports,"__esModule",{value:!0}),exports.bitAndBigNumber=function(x,y){if(x.isFinite()&&!x.isInteger()||y.isFinite()&&!y.isInteger())throw new Error("Integers expected in function bitAnd");var BigNumber=x.constructor;if(x.isNaN()||y.isNaN())return new BigNumber(NaN);if(x.isZero()||y.eq(-1)||x.eq(y))return x;if(y.isZero()||x.eq(-1))return y;if(!x.isFinite()||!y.isFinite()){if(!x.isFinite()&&!y.isFinite())return x.isNegative()===y.isNegative()?x:new BigNumber(0);if(!x.isFinite())return y.isNegative()?x:x.isNegative()?new BigNumber(0):y;if(!y.isFinite())return x.isNegative()?y:y.isNegative()?new BigNumber(0):x}return bitwise(x,y,function(a,b){return a&b})},exports.bitNotBigNumber=bitNotBigNumber,exports.bitOrBigNumber=function(x,y){if(x.isFinite()&&!x.isInteger()||y.isFinite()&&!y.isInteger())throw new Error("Integers expected in function bitOr");var BigNumber=x.constructor;if(x.isNaN()||y.isNaN())return new BigNumber(NaN);var negOne=new BigNumber(-1);if(x.isZero()||y.eq(negOne)||x.eq(y))return y;if(y.isZero()||x.eq(negOne))return x;if(x.isFinite()&&y.isFinite())return bitwise(x,y,function(a,b){return a|b});if(!x.isFinite()&&!x.isNegative()&&y.isNegative()||x.isNegative()&&!y.isNegative()&&!y.isFinite())return negOne;if(x.isNegative()&&y.isNegative())return x.isFinite()?x:y;return x.isFinite()?y:x},exports.bitwise=bitwise,exports.bitXor=function(x,y){if(x.isFinite()&&!x.isInteger()||y.isFinite()&&!y.isInteger())throw new Error("Integers expected in function bitXor");var BigNumber=x.constructor;if(x.isNaN()||y.isNaN())return new BigNumber(NaN);if(x.isZero())return y;if(y.isZero())return x;if(x.eq(y))return new BigNumber(0);var negOne=new BigNumber(-1);if(x.eq(negOne))return bitNotBigNumber(y);if(y.eq(negOne))return bitNotBigNumber(x);return x.isFinite()&&y.isFinite()?bitwise(x,y,function(a,b){return a^b}):x.isFinite()||y.isFinite()?new BigNumber(x.isNegative()===y.isNegative()?1/0:-1/0):negOne},exports.leftShiftBigNumber=function(x,y){if(x.isFinite()&&!x.isInteger()||y.isFinite()&&!y.isInteger())throw new Error("Integers expected in function leftShift");var BigNumber=x.constructor;if(x.isNaN()||y.isNaN()||y.isNegative()&&!y.isZero())return new BigNumber(NaN);if(x.isZero()||y.isZero())return x;if(!x.isFinite()&&!y.isFinite())return new BigNumber(NaN);if(y.lt(55))return x.times(Math.pow(2,y.toNumber())+"");return x.times(new BigNumber(2).pow(y))},exports.rightArithShiftBigNumber=function(x,y){if(x.isFinite()&&!x.isInteger()||y.isFinite()&&!y.isInteger())throw new Error("Integers expected in function rightArithShift");var BigNumber=x.constructor;if(x.isNaN()||y.isNaN()||y.isNegative()&&!y.isZero())return new BigNumber(NaN);if(x.isZero()||y.isZero())return x;if(!y.isFinite())return x.isNegative()?new BigNumber(-1):x.isFinite()?new BigNumber(0):new BigNumber(NaN);if(y.lt(55))return x.div(Math.pow(2,y.toNumber())+"").floor();return x.div(new BigNumber(2).pow(y)).floor()}},{}],924:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createBigNumberTau=exports.createBigNumberPi=exports.createBigNumberPhi=exports.createBigNumberE=void 0;var _function=require("../function"),createBigNumberE=(0,_function.memoize)(function(BigNumber){return new BigNumber(1).exp()},hasher);exports.createBigNumberE=createBigNumberE;var createBigNumberPhi=(0,_function.memoize)(function(BigNumber){return new BigNumber(1).plus(new BigNumber(5).sqrt()).div(2)},hasher);exports.createBigNumberPhi=createBigNumberPhi;var createBigNumberPi=(0,_function.memoize)(function(BigNumber){return BigNumber.acos(-1)},hasher);exports.createBigNumberPi=createBigNumberPi;var createBigNumberTau=(0,_function.memoize)(function(BigNumber){return createBigNumberPi(BigNumber).times(2)},hasher);function hasher(args){return args[0].precision}exports.createBigNumberTau=createBigNumberTau},{"../function":932}],925:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.format=function format(value,options){if("function"==typeof options)return options(value);if(!value.isFinite())return value.isNaN()?"NaN":value.gt(0)?"Infinity":"-Infinity";var notation="auto";var precision;void 0!==options&&(options.notation&&(notation=options.notation),"number"==typeof options?precision=options:options.precision&&(precision=options.precision));switch(notation){case"fixed":return toFixed(value,precision);case"exponential":return toExponential(value,precision);case"engineering":return toEngineering(value,precision);case"auto":if(options&&options.exponential&&(void 0!==options.exponential.lower||void 0!==options.exponential.upper)){var fixedOptions=(0,_object.mapObject)(options,function(x){return x});return(fixedOptions.exponential=void 0)!==options.exponential.lower&&(fixedOptions.lowerExp=Math.round(Math.log(options.exponential.lower)/Math.LN10)),void 0!==options.exponential.upper&&(fixedOptions.upperExp=Math.round(Math.log(options.exponential.upper)/Math.LN10)),console.warn("Deprecation warning: Formatting options exponential.lower and exponential.upper (minimum and maximum value) are replaced with exponential.lowerExp and exponential.upperExp (minimum and maximum exponent) since version 4.0.0. Replace "+JSON.stringify(options)+" with "+JSON.stringify(fixedOptions)),format(value,fixedOptions)}var lowerExp=options&&void 0!==options.lowerExp?options.lowerExp:-3,upperExp=options&&void 0!==options.upperExp?options.upperExp:5;if(value.isZero())return"0";var rounded=value.toSignificantDigits(precision),exp=rounded.e;return(lowerExp<=exp&&exp=size.length)throw new _IndexError.IndexError(dim,size.length);return(0,_is.isMatrix)(mat)?mat.create(_reduce(mat.valueOf(),dim,callback)):_reduce(mat,dim,callback)},exports.scatter=function(a,j,w,x,u,mark,cindex,f,inverse,update,value){var k,k0,k1,i,avalues=a._values,aindex=a._index,aptr=a._ptr;if(x)for(k0=aptr[j],k1=aptr[j+1],k=k0;k>",rightLogShift:">>>",equal:"=",unequal:"\\neq",smaller:"<",larger:">",smallerEq:"\\leq",largerEq:"\\geq",bitAnd:"\\&",bitXor:"\\underline{|}",bitOr:"|",and:"\\wedge",xor:"\\veebar",or:"\\vee"};exports.latexOperators=latexOperators;var latexFunctions={abs:{1:"\\left|${args[0]}\\right|"},add:{2:"\\left(${args[0]}".concat(latexOperators.add,"${args[1]}\\right)")},cbrt:{1:"\\sqrt[3]{${args[0]}}"},ceil:{1:"\\left\\lceil${args[0]}\\right\\rceil"},cube:{1:"\\left(${args[0]}\\right)^3"},divide:{2:"\\frac{${args[0]}}{${args[1]}}"},dotDivide:{2:"\\left(${args[0]}".concat(latexOperators.dotDivide,"${args[1]}\\right)")},dotMultiply:{2:"\\left(${args[0]}".concat(latexOperators.dotMultiply,"${args[1]}\\right)")},dotPow:{2:"\\left(${args[0]}".concat(latexOperators.dotPow,"${args[1]}\\right)")},exp:{1:"\\exp\\left(${args[0]}\\right)"},expm1:"\\left(e".concat(latexOperators.pow,"{${args[0]}}-1\\right)"),fix:{1:"\\mathrm{${name}}\\left(${args[0]}\\right)"},floor:{1:"\\left\\lfloor${args[0]}\\right\\rfloor"},gcd:"\\gcd\\left(${args}\\right)",hypot:"\\hypot\\left(${args}\\right)",log:{1:"\\ln\\left(${args[0]}\\right)",2:"\\log_{${args[1]}}\\left(${args[0]}\\right)"},log10:{1:"\\log_{10}\\left(${args[0]}\\right)"},log1p:{1:"\\ln\\left(${args[0]}+1\\right)",2:"\\log_{${args[1]}}\\left(${args[0]}+1\\right)"},log2:"\\log_{2}\\left(${args[0]}\\right)",mod:{2:"\\left(${args[0]}".concat(latexOperators.mod,"${args[1]}\\right)")},multiply:{2:"\\left(${args[0]}".concat(latexOperators.multiply,"${args[1]}\\right)")},norm:{1:"\\left\\|${args[0]}\\right\\|",2:void 0},nthRoot:{2:"\\sqrt[${args[1]}]{${args[0]}}"},nthRoots:{2:"\\{y : $y^{args[1]} = {${args[0]}}\\}"},pow:{2:"\\left(${args[0]}\\right)".concat(latexOperators.pow,"{${args[1]}}")},round:{1:"\\left\\lfloor${args[0]}\\right\\rceil",2:void 0},sign:{1:"\\mathrm{${name}}\\left(${args[0]}\\right)"},sqrt:{1:"\\sqrt{${args[0]}}"},square:{1:"\\left(${args[0]}\\right)^2"},subtract:{2:"\\left(${args[0]}".concat(latexOperators.subtract,"${args[1]}\\right)")},unaryMinus:{1:"".concat(latexOperators.unaryMinus,"\\left(${args[0]}\\right)")},unaryPlus:{1:"".concat(latexOperators.unaryPlus,"\\left(${args[0]}\\right)")},bitAnd:{2:"\\left(${args[0]}".concat(latexOperators.bitAnd,"${args[1]}\\right)")},bitNot:{1:latexOperators.bitNot+"\\left(${args[0]}\\right)"},bitOr:{2:"\\left(${args[0]}".concat(latexOperators.bitOr,"${args[1]}\\right)")},bitXor:{2:"\\left(${args[0]}".concat(latexOperators.bitXor,"${args[1]}\\right)")},leftShift:{2:"\\left(${args[0]}".concat(latexOperators.leftShift,"${args[1]}\\right)")},rightArithShift:{2:"\\left(${args[0]}".concat(latexOperators.rightArithShift,"${args[1]}\\right)")},rightLogShift:{2:"\\left(${args[0]}".concat(latexOperators.rightLogShift,"${args[1]}\\right)")},bellNumbers:{1:"\\mathrm{B}_{${args[0]}}"},catalan:{1:"\\mathrm{C}_{${args[0]}}"},stirlingS2:{2:"\\mathrm{S}\\left(${args}\\right)"},arg:{1:"\\arg\\left(${args[0]}\\right)"},conj:{1:"\\left(${args[0]}\\right)^*"},im:{1:"\\Im\\left\\lbrace${args[0]}\\right\\rbrace"},re:{1:"\\Re\\left\\lbrace${args[0]}\\right\\rbrace"},and:{2:"\\left(${args[0]}".concat(latexOperators.and,"${args[1]}\\right)")},not:{1:latexOperators.not+"\\left(${args[0]}\\right)"},or:{2:"\\left(${args[0]}".concat(latexOperators.or,"${args[1]}\\right)")},xor:{2:"\\left(${args[0]}".concat(latexOperators.xor,"${args[1]}\\right)")},cross:{2:"\\left(${args[0]}\\right)\\times\\left(${args[1]}\\right)"},ctranspose:{1:"\\left(${args[0]}\\right)".concat(latexOperators.ctranspose)},det:{1:"\\det\\left(${args[0]}\\right)"},dot:{2:"\\left(${args[0]}\\cdot${args[1]}\\right)"},expm:{1:"\\exp\\left(${args[0]}\\right)"},inv:{1:"\\left(${args[0]}\\right)^{-1}"},sqrtm:{1:"{${args[0]}}".concat(latexOperators.pow,"{\\frac{1}{2}}")},trace:{1:"\\mathrm{tr}\\left(${args[0]}\\right)"},transpose:{1:"\\left(${args[0]}\\right)".concat(latexOperators.transpose)},combinations:{2:"\\binom{${args[0]}}{${args[1]}}"},combinationsWithRep:{2:"\\left(\\!\\!{\\binom{${args[0]}}{${args[1]}}}\\!\\!\\right)"},factorial:{1:"\\left(${args[0]}\\right)".concat(latexOperators.factorial)},gamma:{1:"\\Gamma\\left(${args[0]}\\right)"},equal:{2:"\\left(${args[0]}".concat(latexOperators.equal,"${args[1]}\\right)")},larger:{2:"\\left(${args[0]}".concat(latexOperators.larger,"${args[1]}\\right)")},largerEq:{2:"\\left(${args[0]}".concat(latexOperators.largerEq,"${args[1]}\\right)")},smaller:{2:"\\left(${args[0]}".concat(latexOperators.smaller,"${args[1]}\\right)")},smallerEq:{2:"\\left(${args[0]}".concat(latexOperators.smallerEq,"${args[1]}\\right)")},unequal:{2:"\\left(${args[0]}".concat(latexOperators.unequal,"${args[1]}\\right)")},erf:{1:"erf\\left(${args[0]}\\right)"},max:"\\max\\left(${args}\\right)",min:"\\min\\left(${args}\\right)",variance:"\\mathrm{Var}\\left(${args}\\right)",acos:{1:"\\cos^{-1}\\left(${args[0]}\\right)"},acosh:{1:"\\cosh^{-1}\\left(${args[0]}\\right)"},acot:{1:"\\cot^{-1}\\left(${args[0]}\\right)"},acoth:{1:"\\coth^{-1}\\left(${args[0]}\\right)"},acsc:{1:"\\csc^{-1}\\left(${args[0]}\\right)"},acsch:{1:"\\mathrm{csch}^{-1}\\left(${args[0]}\\right)"},asec:{1:"\\sec^{-1}\\left(${args[0]}\\right)"},asech:{1:"\\mathrm{sech}^{-1}\\left(${args[0]}\\right)"},asin:{1:"\\sin^{-1}\\left(${args[0]}\\right)"},asinh:{1:"\\sinh^{-1}\\left(${args[0]}\\right)"},atan:{1:"\\tan^{-1}\\left(${args[0]}\\right)"},atan2:{2:"\\mathrm{atan2}\\left(${args}\\right)"},atanh:{1:"\\tanh^{-1}\\left(${args[0]}\\right)"},cos:{1:"\\cos\\left(${args[0]}\\right)"},cosh:{1:"\\cosh\\left(${args[0]}\\right)"},cot:{1:"\\cot\\left(${args[0]}\\right)"},coth:{1:"\\coth\\left(${args[0]}\\right)"},csc:{1:"\\csc\\left(${args[0]}\\right)"},csch:{1:"\\mathrm{csch}\\left(${args[0]}\\right)"},sec:{1:"\\sec\\left(${args[0]}\\right)"},sech:{1:"\\mathrm{sech}\\left(${args[0]}\\right)"},sin:{1:"\\sin\\left(${args[0]}\\right)"},sinh:{1:"\\sinh\\left(${args[0]}\\right)"},tan:{1:"\\tan\\left(${args[0]}\\right)"},tanh:{1:"\\tanh\\left(${args[0]}\\right)"},to:{2:"\\left(${args[0]}".concat(latexOperators.to,"${args[1]}\\right)")},numeric:function(node){return node.args[0].toTex()},number:{0:"0",1:"\\left(${args[0]}\\right)",2:"\\left(\\left(${args[0]}\\right)${args[1]}\\right)"},string:{0:'\\mathtt{""}',1:"\\mathrm{string}\\left(${args[0]}\\right)"},bignumber:{0:"0",1:"\\left(${args[0]}\\right)"},complex:{0:"0",1:"\\left(${args[0]}\\right)",2:"\\left(\\left(${args[0]}\\right)+".concat(latexSymbols.i,"\\cdot\\left(${args[1]}\\right)\\right)")},matrix:{0:"\\begin{bmatrix}\\end{bmatrix}",1:"\\left(${args[0]}\\right)",2:"\\left(${args[0]}\\right)"},sparse:{0:"\\begin{bsparse}\\end{bsparse}",1:"\\left(${args[0]}\\right)"},unit:{1:"\\left(${args[0]}\\right)",2:"\\left(\\left(${args[0]}\\right)${args[1]}\\right)"}};exports.latexFunctions=latexFunctions;exports.defaultTemplate="\\mathrm{${name}}\\left(${args}\\right)";var latexUnits={deg:"^\\circ"};function escapeLatex(string){return(0,_escapeLatex.default)(string,{preserveFormatting:!0})}},{"./object":938,"escape-latex":56}],935:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.warnOnce=void 0;var messages,warnOnce=(messages={},function(){for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];var _console,message=args.join(", ");messages[message]||(messages[message]=!0,(_console=console).warn.apply(_console,["Warning:"].concat(args)))});exports.warnOnce=warnOnce},{}],936:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.noBignumber=function(){throw new Error('No "bignumber" implementation available')},exports.noFraction=function(){throw new Error('No "fraction" implementation available')},exports.noMatrix=function(){throw new Error('No "matrix" implementation available')},exports.noIndex=function(){throw new Error('No "index" implementation available')},exports.noSubset=function(){throw new Error('No "matrix" implementation available')}},{}],937:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.isInteger=function(value){return"boolean"==typeof value||!!isFinite(value)&&value===Math.round(value)},exports.format=function(value,options){if("function"==typeof options)return options(value);{if(value===1/0)return"Infinity";if(value===-1/0)return"-Infinity";if(isNaN(value))return"NaN"}var precision,notation="auto";options&&(options.notation&&(notation=options.notation),(0,_is.isNumber)(options)?precision=options:(0,_is.isNumber)(options.precision)&&(precision=options.precision));switch(notation){case"fixed":return toFixed(value,precision);case"exponential":return toExponential(value,precision);case"engineering":return toEngineering(value,precision);case"auto":if(!options||!options.exponential||void 0===options.exponential.lower&&void 0===options.exponential.upper)return toPrecision(value,precision,options&&options).replace(/((\.\d*?)(0+))($|e)/,function(){var digits=arguments[2],e=arguments[4];return"."!==digits?digits+e:e});var fixedOptions=(0,_object.mapObject)(options,function(x){return x});return(fixedOptions.exponential=void 0)!==options.exponential.lower&&(fixedOptions.lowerExp=Math.round(Math.log(options.exponential.lower)/Math.LN10)),void 0!==options.exponential.upper&&(fixedOptions.upperExp=Math.round(Math.log(options.exponential.upper)/Math.LN10)),console.warn("Deprecation warning: Formatting options exponential.lower and exponential.upper (minimum and maximum value) are replaced with exponential.lowerExp and exponential.upperExp (minimum and maximum exponent) since version 4.0.0. Replace "+JSON.stringify(options)+" with "+JSON.stringify(fixedOptions)),toPrecision(value,precision,fixedOptions);default:throw new Error('Unknown notation "'+notation+'". Choose "auto", "exponential", or "fixed".')}},exports.splitNumber=splitNumber,exports.toEngineering=toEngineering,exports.toFixed=toFixed,exports.toExponential=toExponential,exports.toPrecision=toPrecision,exports.roundDigits=roundDigits,exports.digits=function(value){return value.toExponential().replace(/e.*$/,"").replace(/^0\.?0*|\./,"").length},exports.nearlyEqual=function(x,y,epsilon){if(null==epsilon)return x===y;if(x===y)return!0;if(isNaN(x)||isNaN(y))return!1;if(isFinite(x)&&isFinite(y)){var diff=Math.abs(x-y);return diffc.length||e-newExp+1>c.length;)c.push(0);else for(var missingZeros=Math.abs(e-newExp)-(c.length-1),i=0;i=upperExp)return toExponential(value,precision);var c=rounded.coefficients,e=rounded.exponent;c.lengthprecision&&5<=c.splice(precision,c.length-precision)[0]){var i=precision-1;for(c[i]++;10===c[i];)c.pop(),0===i&&(c.unshift(0),rounded.exponent++,i++),c[--i]++}return rounded}function zeros(length){for(var arr=[],i=0;i>1;return product(i,half)*product(1+half,n)}},{}],941:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.endsWith=function(text,search){var start=text.length-search.length,end=text.length;return text.substring(start,end)===search},exports.format=format,exports.stringify=function(value){var text=String(value),escaped="",i=0;for(;i/g,">")},exports.compareText=function(x,y){if(!(0,_is.isString)(x))throw new TypeError("Unexpected type of argument in function compareText (expected: string or Array or Matrix, actual: "+(0,_is.typeOf)(x)+", index: 0)");if((0,_is.isString)(y))return x===y?0:y>>=1;return(n+x)/d}},module.exports.resetGlobal=function(){Math.random=oldRandom},mixkey(Math.random(),pool)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],945:[function(require,module,exports){function E(){}E.prototype={on:function(name,callback,ctx){var e=this.e||(this.e={});return(e[name]||(e[name]=[])).push({fn:callback,ctx:ctx}),this},once:function(name,callback,ctx){var self=this;function listener(){self.off(name,listener),callback.apply(ctx,arguments)}return listener._=callback,this.on(name,listener,ctx)},emit:function(name){for(var data=[].slice.call(arguments,1),evtArr=((this.e||(this.e={}))[name]||[]).slice(),i=0,len=evtArr.length;i=varIndex+1}}return 0===params.length?function(args){return 0===args.length}:1===params.length?(test0=compileTest(params[0]),function(args){return test0(args[0])&&1===args.length}):2===params.length?(test0=compileTest(params[0]),test1=compileTest(params[1]),function(args){return test0(args[0])&&test1(args[1])&&2===args.length}):(tests=params.map(compileTest),function(args){for(var i=0;imaxLength?(err=new TypeError("Too many arguments in function "+_name+" (expected: "+maxLength+", actual: "+args.length+")")).data={category:"tooManyArgs",fn:_name,index:args.length,expectedLength:maxLength}:(err=new TypeError('Arguments of type "'+args.join(", ")+'" do not match any of the defined signatures of function '+_name+".")).data={category:"mismatch",actual:args.map(findTypeName)},err}(name,arguments,signatures)},fn=function(arg0,arg1){return arguments.length===len0&&test00(arg0)&&test01(arg1)?fn0.apply(null,arguments):arguments.length===len1&&test10(arg0)&&test11(arg1)?fn1.apply(null,arguments):arguments.length===len2&&test20(arg0)&&test21(arg1)?fn2.apply(null,arguments):arguments.length===len3&&test30(arg0)&&test31(arg1)?fn3.apply(null,arguments):arguments.length===len4&&test40(arg0)&&test41(arg1)?fn4.apply(null,arguments):arguments.length===len5&&test50(arg0)&&test51(arg1)?fn5.apply(null,arguments):generic.apply(null,arguments)};try{Object.defineProperty(fn,"name",{value:name})}catch(err){}return fn.signatures=function(signatures){var signaturesMap={};return signatures.forEach(function(signature){signature.params.some(hasConversions)||splitParams(signature.params,!0).forEach(function(params){signaturesMap[stringifyParams(params)]=signature.fn})}),signaturesMap}(signatures),fn}function notIgnore(typeName){return-1===typed.ignore.indexOf(typeName)}function trim(str){return str.trim()}function notEmpty(str){return!!str}function notNull(value){return null!==value}function isInvalidParam(param){return 0===param.types.length}function last(arr){return arr[arr.length-1]}function slice(arr,start,end){return Array.prototype.slice.call(arr,start,end)}function findInArray(arr,test){for(var i=0;i","<=",">=","<<",">>",">>>","NAMED_DELIMITERS","in","CONSTANTS","NUMERIC_CONSTANTS","currentString","currentCharacter","prevCharacter","nextCharacter","isWhitespace","nestingLevel","c3","isDigitDot","isDigit","isDecimalMark","createSyntaxError","isAlpha","getTokenSkipNewline","openParams","closeParams","conditionalLevel","parseAssignment","parseBlock","valid","parseLogicalXor","parseLogicalOr","parseConditional","parseLogicalAnd","parseBitwiseOr","parseBitwiseXor","parseBitwiseAnd","parseRelational","parseShift","operators","cond","parseConversion","parseRange","parseAddSubtract","parseMultiplyDivide","parseImplicitMultiplication","parseRule2","parseUnary","tokenStates","CustomNode","parseAccessors","rows","numberStr","parseEnd","parseParentheses","parseNumber","parseDoubleQuotesStringToken","parseSingleQuotesStringToken","parseObject","parseRow","parseSingleQuotesString","parseDoubleQuotesString","parseSymbol","parseCustomNodes","parseLeftHandOperators","parsePow","cPrev","cNext","isValidLatinOrGreek","isValidMathSymbol","high","low","../utils/collection","640","_apply","...any","dim","../../function/matrix/apply","./utils/errorTransform","641","lastIndex","../../function/matrix/column","642","../../function/matrix/concat","643","_function","_compileInlineExpression","filterTransform","compileInlineExpression","Array, function","Matrix, function","Array, RegExp","filterRegExp","Matrix, RegExp","maxArgumentCount","../../utils/function","./utils/compileInlineExpression","644","forEachTransform","Array | Matrix, function","recurse","645","ii","isSet","646","mapTransform","orig","argsCount","647","../../function/statistics/max","648","../../function/statistics/mean","649","../../function/statistics/min","650","../../function/matrix/range","651","../../function/matrix/row","652","../../function/statistics/std","653","../../function/matrix/subset","654","../../function/statistics/sum","655","subScope","../../../utils/is","656","../../../error/IndexError","657","../../function/statistics/variance","658","_ResultSet","_BigNumber","_Complex","_Fraction","_Range","_Matrix","_DenseMatrix","_equalScalar","_SparseMatrix","_addScalar","_multiplyScalar","_eye","_print","_divideScalar","_ImmutableDenseMatrix","_MatrixIndex","_FibonacciHeap","_Spa","_Unit","_Node","_AccessorNode","_ArrayNode","_AssignmentNode","_BlockNode","_ConditionalNode","_ConstantNode","_FunctionAssignmentNode","_IndexNode","_ObjectNode","_OperatorNode","_ParenthesisNode","_RangeNode","_RelationalNode","_SymbolNode","_FunctionNode","_parse","_Parser","_parser","_Help","_Chain","_chain","_reviver","_replacer","_physicalConstants","_apply2","_column2","_filter2","_forEach2","_map2","_max2","_mean2","_min2","_range2","_row2","_subset2","_concat2","_std2","_sum2","_variance2","./constants","./core/function/typed","./expression/Help","./expression/Parser","./expression/function/compile","./expression/function/eval","./expression/function/evaluate","./expression/function/help","./expression/function/parser","./expression/node/AccessorNode","./expression/node/ArrayNode","./expression/node/AssignmentNode","./expression/node/BlockNode","./expression/node/ConditionalNode","./expression/node/ConstantNode","./expression/node/FunctionAssignmentNode","./expression/node/FunctionNode","./expression/node/IndexNode","./expression/node/Node","./expression/node/ObjectNode","./expression/node/OperatorNode","./expression/node/ParenthesisNode","./expression/node/RangeNode","./expression/node/RelationalNode","./expression/node/SymbolNode","./expression/parse","./expression/transform/apply.transform","./expression/transform/column.transform","./expression/transform/concat.transform","./expression/transform/filter.transform","./expression/transform/forEach.transform","./expression/transform/index.transform","./expression/transform/map.transform","./expression/transform/max.transform","./expression/transform/mean.transform","./expression/transform/min.transform","./expression/transform/range.transform","./expression/transform/row.transform","./expression/transform/std.transform","./expression/transform/subset.transform","./expression/transform/sum.transform","./expression/transform/variance.transform","./function/algebra/decomposition/lup","./function/algebra/decomposition/qr","./function/algebra/decomposition/slu","./function/algebra/solver/lsolve","./function/algebra/solver/lusolve","./function/algebra/solver/usolve","./function/arithmetic/addScalar","./function/arithmetic/divideScalar","./function/arithmetic/multiplyScalar","./function/matrix/apply","./function/matrix/expm","./function/matrix/eye","./function/matrix/sqrtm","./function/relational/equalScalar","./function/string/format","./function/string/print","./function/unit/to","./json/replacer","./json/reviver","./type/bignumber/BigNumber","./type/bignumber/function/bignumber","./type/boolean","./type/chain/Chain","./type/chain/function/chain","./type/complex/Complex","./type/complex/function/complex","./type/fraction/Fraction","./type/fraction/function/fraction","./type/matrix/DenseMatrix","./type/matrix/FibonacciHeap","./type/matrix/ImmutableDenseMatrix","./type/matrix/Matrix","./type/matrix/MatrixIndex","./type/matrix/Range","./type/matrix/Spa","./type/matrix/SparseMatrix","./type/matrix/function","./type/matrix/function/matrix","./type/matrix/function/sparse","./type/number","./type/resultset/ResultSet","./type/string","./type/unit/Unit","./type/unit/function/createUnit","./type/unit/function/splitUnit","./type/unit/function/unit","./type/unit/physicalConstants","659","_denseLUP","_sparseLUP","L","columns","_data","ldata","lsize","udata","usize","pabsv","vjj","absv","_swapRows","vij","pv","_values","ptr","_ptr","lvalues","lindex","lptr","uvalues","uindex","uptr","pvCo","pvOc","spa","k0","vkj","_forEachRow","vik","accumulate","kx","ky","../../../utils/factory","../../../utils/object","660","_denseQR","Q","R","_denseQRimpl","Qdata","Rdata","pivot","sgn","conjSgn","alphaSquared","zero","661","_csSqr","_csLu","csSqr","createCsSqr","csLu","createCsLu","SparseMatrix, number, number","order","threshold","pinv","../../../utils/number","../sparse/csLu","../sparse/csSqr","662","Node, SymbolNode, Object","variable","constNodes","constTag","Node, SymbolNode","string, SymbolNode","string, SymbolNode, Object","string, string","string, string, Object","Node, string","Node, string, Object","deriv","_derivTex","Node, ConstantNode","Node, SymbolNode, ConstantNode","string, string, number","Object, ConstantNode, string","Object, SymbolNode, string","Object, ParenthesisNode, string","Object, FunctionAssignmentNode, string","Object, FunctionNode | OperatorNode, string","isConst","ConstantNode, Object","SymbolNode, Object","ParenthesisNode, Object","FunctionAssignmentNode, Object","FunctionNode, Object","funcArgsCheck","funcDerivative","arg0","negative","chainDerivative","OperatorNode, Object","constantTerms","nonConstantTerms","nonConstantNode","newArgs","argOuter","argInner","_arg2","powMinusOne","valueType","663","_simplifyConstant","_simplifyCore","simplifyConstant","createSimplifyConstant","simplifyCore","createSimplifyCore","string, boolean","detailed","string, Object, boolean","Node, boolean","Node, Object","Node, Object, boolean","sBefore","setRules","oldRules","rulesFirst","rulesSucDiv","firstRules","distrDivRules","sucDivRules","firstRulesAgain","finalRules","rulesRationalize","polyRet","extended","exactFractions","oper","recPoly","tp","retFunc","polynomial","nVars","expandPower","indParent","internal","does","nEsqTopo","nDirTopo","eDistrDiv","redoInic","coefficients","retRationalize","polyToCanonical","cte","fire","maxExpo","varname","recurPol","noPai","noFil","valor","_i2","no","n2","./simplify/simplifyConstant","./simplify/simplifyCore","664","_util","_resolve","resolve","createResolve","_createUtil","createUtil","isCommutative","isAssociative","unflattenr","unflattenl","createMakeNodeFunction","string, Object, Object","string, Array","string, Array, Object","string, Array, Object, Object","Node, Object, Object","Node, Array","Node, Array, Object","Node, Array, Object, Object","ruleSet","makeNode","expandsym","newRule","ruleType","lr","removeParens","_lastsym","expanded","_buildRules","applyRule","SUPPORTED_CONSTANTS","commutative","repl","_ruleMatch","mergeMatch","match1","match2","_exactMatch","combineChildMatches","list1","list2","isSplit","splits","rightArgs","getSplits","splitMatches","matchSet","childMatches","childMatch","uniqueSets","unique","mergeChildMatches","./simplify/resolve","./simplify/util","665","_args","666","_noop","allChildren","fnname","_toNumber","ignore","_toNode","vn","unaryMinusNode","_exactFraction","noBignumber","noFraction","Fraction, Object","BigNumber, Object","number, Object","Complex, Object","foldOp","ignoreandcontinue","foldFraction","operatorFunctions","some","ignoreandcontine","consts","../../../utils/noop","./util","667","node0","node1","a0","a00","a00a1","a01","668","associative","findChildren","curnode","669","_solveValidation","solveValidation","createSolveValidation","SparseMatrix, Array | Matrix","bdata","bj","jvalues","jindex","xj","DenseMatrix, Array | Matrix","_denseForwardSubstitution","Array, Array | Matrix","./utils/solveValidation","670","_csIpvec","SparseMatrix, Array | Matrix, number, number","Object, Array | Matrix","_toMatrix","csIpvec","../sparse/csIpvec","671","_denseBackwardSubstitution","672","msize","datatype","_datatype","asize","arraySize","../../../../utils/array","../../../../utils/is","../../../../utils/string","673","createCsAmd","_csFkeep","_csFlip","_csTdfs","lemax","dense","cm","at","tindex","tptr","_createTargetMatrix","csFkeep","k2","pj","nvi","pk","eln","pn","cindex","cptr","cnz","W","nv","head","elen","degree","hhead","_wclear","_initializeQuotientGraph","nel","csFlip","_initializeDegreeLists","mindeg","elenk","nvk","dk","dext","pk1","pk2","wnvi","p3","p4","nvj","jlast","ok","csTdfs","./csFkeep","./csFlip","./csTdfs","674","createCsCounts","_csLeaf","post","ata","J","p0","maxfirst","prevleaf","colcount","csLeaf","jleaf","./csLeaf","675","csDfs","jnew","_csMarked","csMarked","_csMark","csMark","_csUnflip","csUnflip","done","./csMark","./csMarked","./csUnflip","676","csEtree","inext","aptr","677","avalues","nz","678","679","680","ancestor","sparent","jprev","681","_csSpsolve","csSpsolve","createCsSpsolve","tol","lnz","unz","xabs","ipiv","./csSpsolve","682","683","684","csPermute","adt","cvalues","t0","createSparseMatrix","685","csPost","686","csReach","gptr","gsize","bindex","bptr","_csDfs","./csDfs","687","_csReach","lo","gvalues","gindex","bvalues","./csReach","688","_csPermute","_csPost","_csEtree","_csAmd","_csCounts","csAmd","csCounts","cp","leftmost","tail","nque","pa","_vcount","./csAmd","./csCounts","./csEtree","./csPermute","./csPost","689","690","691","absNumber","../../plain/number","692","_algorithm","_algorithm2","_algorithm3","_algorithm4","_algorithm5","algorithm01","createAlgorithm01","algorithm04","createAlgorithm04","algorithm10","createAlgorithm10","algorithm13","createAlgorithm13","algorithm14","createAlgorithm14","DenseMatrix, DenseMatrix","DenseMatrix, SparseMatrix","SparseMatrix, DenseMatrix","SparseMatrix, SparseMatrix","Array, Array","Array, Matrix","Matrix, Array","DenseMatrix, any","SparseMatrix, any","any, DenseMatrix","any, SparseMatrix","Array, any","any, Array","any, any","any, any, ...any","rest","../../type/matrix/utils/algorithm01","../../type/matrix/utils/algorithm04","../../type/matrix/utils/algorithm10","../../type/matrix/utils/algorithm13","../../type/matrix/utils/algorithm14","693","number, number","addNumber","Complex, Complex","BigNumber, BigNumber","Fraction, Fraction","Unit, Unit","equalBase","fixPrefix","694","cbrtNumber","_cbrtComplex","Complex, boolean","third","negate","_result","allRoots","principal","695","_nearlyEqual","_number2","nearlyEqual","ceilNumber","../../utils/bignumber/nearlyEqual","696","cubeNumber","697","algorithm11","createAlgorithm11","Array | Matrix, Array | Matrix","any, Array | Matrix","../../type/matrix/utils/algorithm11","698","Unit, number | Fraction | BigNumber","_normalize","number | Fraction | BigNumber, Unit","699","_algorithm6","_algorithm7","algorithm02","createAlgorithm02","algorithm03","createAlgorithm03","algorithm07","createAlgorithm07","algorithm12","createAlgorithm12","../../type/matrix/utils/algorithm02","../../type/matrix/utils/algorithm03","../../type/matrix/utils/algorithm07","../../type/matrix/utils/algorithm12","700","algorithm09","createAlgorithm09","../../type/matrix/utils/algorithm09","701","702","expNumber","703","expm1Number","704","705","706","gcdNumber","SparseMatrix, number | BigNumber","DenseMatrix, number | BigNumber","number | BigNumber, SparseMatrix","number | BigNumber, DenseMatrix","Array, number | BigNumber","number | BigNumber, Array","Array | Matrix | number | BigNumber, Array | Matrix | number | BigNumber, ...Array | Matrix | number | BigNumber","707","... number | BigNumber","largest","708","algorithm06","createAlgorithm06","lcmNumber","../../type/matrix/utils/algorithm06","709","logNumber","710","log10Number","711","_log1pComplex","xRe1p","712","log2Number","_log2Complex","newX","713","algorithm05","createAlgorithm05","modNumber","../../type/matrix/utils/algorithm05","714","_validateMatrixDimensions","Matrix, Matrix","xsize","ysize","dt","adata","bdt","mf","_multiplyVectorVector","storage","bsize","alength","bcolumns","createDenseMatrix","_multiplyVectorDenseMatrix","_multiplyVectorMatrix","_multiplyMatrixVector","_multiplyMatrixMatrix","size1","size2","arows","acolumns","brows","ib","vbi","ka0","ka1","ka","ia","ic","jb","kb0","kb1","cij","kb","vbij","715","multiplyNumber","number | Fraction | BigNumber | Complex, Unit","Unit, number | Fraction | BigNumber | Complex","716","number | Complex | BigNumber | boolean, number | BigNumber | string","Array, number | BigNumber | string","Matrix, number | BigNumber | string","ninf","sizeX","POSITIVE_INFINITY","pinf","NEGATIVE_INFINITY","maxc","cj","maxr","fro","717","createNthRootNumber","complexErr","nthRootNumber","_bigNthRoot","Complex, number","Big","718","_nthComplexRoots","_calculateExactResult","aIsNumeric","roots","halfPiFactor","719","Array, number","_powArray","Array, BigNumber","Matrix, number","_powMatrix","Matrix, BigNumber","Unit, number | BigNumber","yFrac","yNum","ex","powNumber","720","createRoundNumber","ownKeys","enumerableOnly","symbols","getOwnPropertySymbols","_objectSpread","getOwnPropertyDescriptors","defineProperties","NO_INT","roundNumberSignatures","Complex, BigNumber","_n","number, BigNumber","Fraction, number","number | Complex | BigNumber, SparseMatrix","number | Complex | BigNumber, DenseMatrix","number | Complex | BigNumber, Array","roundNumber","721","signNumber","722","_sqrtNumber","723","squareNumber","724","checkEqualDimensions","../../error/DimensionError","725","unaryMinusNumber","726","unaryPlusNumber","boolean | string","727","xgcdNumber","lastx","lasty","728","_bitwise","bitAndNumber","bitAndBigNumber","../../utils/bignumber/bitwise","729","bitNotNumber","bitNotBigNumber","730","bitOrNumber","bitOrBigNumber","731","bitXorNumber","732","algorithm08","createAlgorithm08","leftShiftNumber","leftShiftBigNumber","../../type/matrix/utils/algorithm08","733","rightArithShiftNumber","rightArithShiftBigNumber","734","rightLogShiftNumber","735","number | BigNumber","736","737","number | BigNumber, number | BigNumber","738","kFactorial","negativeOne","kChooseI","iPower","739","740","741","742","743","Array, Array, Array","_2d","xCoeff","yCoeff","constant","_distancePointLine2D","Object, Object, Object","lineTwoPtY","lineTwoPtX","lineOnePtY","lineOnePtX","pointX","pointY","_3d","_parametricLine","_distancePointLine3D","_containsOnlyNumbers","_euclideanDistance","Object, Object","xCoeffLine","yCoeffLine","pointZ","x0","y0","z0","pointOneX","pointOneY","pointTwoX","pointTwoY","pointOneZ","pointTwoZ","_isNumber","aI","_pairwise","pointA","pointB","_distancePairwise","_objectToArray","den","diff","vectorSize","744","plane","_4d","y1","z1","y2","z2","x1x","x2x","y1y","y2y","z1z","z2z","py","pz","_intersectLinePlane","Array, Array, Array, Array","p1a","p1b","p2a","p2b","o1","o2","d20o11","d21o10","d20o21","d21o20","_intersect2d","x3","y3","z3","x4","y4","z4","d1343","_intersect3dHelper","d4321","d1321","d4343","d2121","ta","tb","pax","pay","paz","pbx","pby","pbz","Matrix, Matrix, Matrix","Matrix, Matrix, Matrix, Matrix","add1","add2","add3","745","andNumber","746","notNumber","747","orNumber","748","xorNumber","749","Array | Matrix, number | BigNumber, function","mat","tran","_switch","../../error/IndexError","750","validateIndex","rowRange","751","...Array | Matrix | number | BigNumber","prevDim","asMatrix","matrices","concatDim","...string","752","highestDimension","xSize","ySize","product","753","754","decomp","evenCycles","755","Array, string","Array, number, string","Array, BigNumber, string","Matrix, string","Matrix, number, string","Matrix, BigNumber, string","kSuper","kSub","diagonal","_createDiagonalMatrix","dm","vector","_getDiagonal","756","757","checkAndSubmit","getDataType","isSymmetric","psi","e0","Sij","createArray","Vab","getAijBig","_i3","aii","ajj","aij","denom","getThetaBig","Hij","Aki","Akj","csHij","Aii","Ajj","_k3","x1Big","Ski","Skj","_k2","Sij1Big","Ei","_i4","sorting","diagBig","xArr","getAij","_k4","_k","Sij1","Mij","maxMij","maxIJ","S","Ef","Sf","minID","_k5","ans","vectors","758","infNorm","qfac","twoqfac","twoqp1fac","errorEstimate","findParams","rowSum","infinityNorm","Apos","factor","AposToI","alternate","759","760","_filterCallback","761","flat","762","763","getArrayDataType","764","number | BigNumber, string","number | BigNumber, number | BigNumber, string","_identityVector","defaultValue","minimum","765","ABig","rBig","Ac","Bc","Ar","Br","766","767","768","...number | BigNumber | string","Array | Matrix, string","hasBigNumbers","_validate","769","asc","Array | Matrix, number","Array | Matrix, number, string","Array | Matrix, number, function","quickSelect","770","_strRange","_out","_rangeEx","number, number, number","number, number, boolean","includeEnd","_rangeInc","number, number, number, boolean","_bigRangeEx","BigNumber, BigNumber, BigNumber","BigNumber, BigNumber, boolean","_bigRangeInc","BigNumber, BigNumber, BigNumber, boolean","noMatrix","nums","../../utils/noop","771","sizes","772","defaultChar","_resizeString","773","columnRange","774","number | Complex | BigNumber | Unit | boolean | null","775","compareAsc","compareDesc","_arrayIsVector","_matrixIsVector","_comparator","776","_denmanBeavers","_maxIterations","_tolerance","iterations","Y","Z","Yk","777","778","Array, Index","isScalar","Matrix, Index","Object, Index","_getObjectProperty","string, Index","_getSubstring","Array, Index, any","Array, Index, any, any","Matrix, Index, any","Matrix, Index, any, any","string, Index, string","_setSubstring","string, Index, string, string","Object, Index, any","_setObjectProperty","strLen","dimension","779","_denseTrace","780","transposedRow","transposed","_denseTranspose","_sparseTranspose","781","782","combinationsNumber","nMinusk","isPositiveInteger","../../plain/number/combinations","783","_product","nMinusOne","../../utils/product","784","785","gammaNumber","gammaP","real","gammaG","twoPiSqrt","bigFactorial","786","_kldiv","plength","qlength","qnorm","pnorm","787","deepForEach","ai","788","789","_seededRNG","rng","createRng","possibles","Array | Matrix, Array","weights","Array | Matrix, Array | Matrix, number","Array | Matrix, number, Array | Matrix","single","totalWeights","pick","randKey","./util/seededRNG","790","createRandomNumber","_randomMatrix2","_randomMatrix","Array | Matrix, number, number","randomMatrix","./util/randomMatrix","791","_randomIntMatrix","792","_length","793","singletonRandom","_seedRandom","setSeed","seed-random","794","createCompareNumber","boolean, boolean","795","_javascriptNaturalSort","compareBooleans","typeX","typeY","compareMatricesAndArrays","compareArrays","compareComplexNumbers","formatUnits","keysX","keysY","compareObjects","javascript-natural-sort","796","createCompareTextNumber","797","798","createEqualNumber","799","createEqualScalarNumber","complexEquals","../../utils/complex","800","801","createLargerNumber","802","createLargerEqNumber","803","createSmallerNumber","804","createSmallerEqNumber","805","createUnequalNumber","806","b1","b2","807","inb2","identify","generalize","808","809","810","811","number | BigNumber | Fraction | Complex, Array | Matrix","812","bitarray","813","Array | Matrix, boolean","814","815","816","MAX_NUM","THRESH","ysq","xnum","xden","erf1","del","erfc2","SQRPI","erfc3","817","_improveErrorMessage","...","med","improveErrorMessage","./utils/improveErrorMessage","818","Array | Matrix, number | BigNumber","_largest","containsCollections","819","820","mid","middle2","middle","number | BigNumber | Complex | Unit","number | BigNumber | Complex | Unit, number | BigNumber | Complex | Unit","821","_smallest","822","823","824","sorted","_fracPart","validate","_left","_right","_integerPart","_value","integerPart","fracPart","integerPartNumber","number | BigNumber | Unit","probOrN","dataArr","nPlusOne","probArr","intN","_nPlusOne","currProb","825","Array | Matrix, number | BigNumber, string","normalization","826","827","fnName","details","828","_var","_varDim","829","any, Object | function | number","830","string, Object | Array","string, Object | Array, number | Object","original","831","832","acoshNumber","833","acotNumber","834","acothNumber","835","acscNumber","836","acschNumber","837","asecNumber","838","xInv","asechNumber","839","840","asinhNumber","841","842","843","atanhNumber","844","hasBase","BASE_UNITS","ANGLE","845","846","cotNumber","847","cothNumber","848","cscNumber","849","cschNumber","850","secNumber","851","sechNumber","852","853","sinhNumber","854","855","856","Unit, Unit | string","Matrix, any","any, Matrix","857","858","859","860","isNaNNumber","861","isNegativeNumber","862","number | BigNumber | Fraction | boolean","Complex | Unit | string | null | undefined | Node","863","isPositiveNumber","864","865","isZeroNumber","866","validInputTypes","validOutputTypes","outputType","inputType","867","868","869","870","subtractNumber","divideNumber","fixNumber","floorNumber","log1pNumber","sqrtNumber","normNumber","decimals","871","872","873","874","_arithmetic","_logical","_relational","_probability","_trigonometry","_utils","./arithmetic","./bitwise","./combinations","./logical","./probability","./relational","./trigonometry","./utils","875","876","twoN","threeN","fourN","fiveN","877","878","acosNumber","asinNumber","atanNumber","atan2Number","cosNumber","coshNumber","sinNumber","tanNumber","tanhNumber","879","isIntegerNumber","880","_decimal","decimal.js","881","../../../utils/collection","882","bool","lcase","883","createLazyProxy","chainify","excludedNames","884","885","strRe","strIm","fromPolar","complex.js","886","887","fraction.js","888","889","preprocess","_fit","newSize","_getSubmatrix","dims","_get","submatrix","sSize","iSize","outer","unsqueeze","_setSubmatrix","dataIndex","subIndex","_set","indexI","me","swapRows","vi","890","oneOverLogPhi","_minimum","_cut","isFibonacciHeap","insert","extractMinimum","numberOfChildren","tempRight","numRoots","_linkNodes","_findMinimumNode","_cascadingCut","_decreaseKey","891","isImmutableDenseMatrix","892","skipZeros","893","ranges","_dimensions","_isScalar","_createImmutableMatrix","strings","894","hasStart","hasEnd","hasStep","895","_heap","isSpa","heap","nodei","nodej","896","_createFromArray","_createFromMatrix","_getValueIndex","_insert","ins","_toArray","kk","mvalues","mindex","mptr","_getsubset","_setsubset","_remove","r1","_j","minRow","maxRow","minColumn","maxColumn","invoke","_i5","_i7","vx","vy","897","...number | string | BigNumber | Range | Array | Matrix","898","Array | Matrix, string, string","899","900","denseMatrix","sparseMatrix","cf","cdata","../../../error/DimensionError","901","902","903","xa","xb","wa","wb","904","vc","wai","wbi","905","scatter","906","_scatter","va","vb","907","908","909","910","911","912","csize","_iterate","level","av","bv","cv","913","914","Unit, string | Unit","valuelessUnit","915","916","../utils/number","917","units","UNIT_NONE","prefix","PREFIXES","power","BASE_DIMENSIONS","skipAutomaticSimplification","skipWhitespace","revert","oldIndex","tentativeNumber","tentativeIndex","parseCharacter","toFind","_findUnit","UNITS","prefixes","endsWith","prefixLen","prefixName","_prefix","getNumericIfUnitless","powerMultiplierCurrent","expectingUnit","valueStr","powerMultiplierStack","powerMultiplierStackProduct","uStr","oldC","unitName","parseUnit","baseDim","UNIT_SYSTEMS","auto","allowNoUnits","_isDerived","unitValue","unitOffset","unitPower","unitPrefixValue","_getNumberConverter","_denormalize","prefixValue","valThis","valOther","inverted","toNumeric","matchingBase","matchingUnit","proposedUnitList","currentUnitSystem","missingBaseDim","toSI","si","strNum","strDen","nNum","nDen","simp","isImaginary","VAR","VA","_bestPrefix","unitStr","absValue","absUnitValue","bestPrefix","bestDiff","scientific","SHORT","da","xNumeric","xRounded","testSum","G","LONG","deca","hecto","kilo","mega","giga","tera","peta","exa","zetta","yotta","deci","centi","milli","micro","nano","pico","femto","atto","zepto","yocto","SQUARED","CUBIC","BINARY_SHORT_SI","BINARY_SHORT_IEC","Ki","Mi","Gi","Ti","Pi","Zi","Yi","BINARY_LONG_SI","BINARY_LONG_IEC","kibi","mebi","gibi","tebi","pebi","exi","zebi","yobi","BTU","MM","SHORTLONG","BINARY_SHORT","BINARY_LONG","MASS","LENGTH","TIME","CURRENT","TEMPERATURE","LUMINOUS_INTENSITY","AMOUNT_OF_SUBSTANCE","FORCE","SURFACE","VOLUME","ENERGY","POWER","PRESSURE","ELECTRIC_CHARGE","ELECTRIC_CAPACITANCE","ELECTRIC_POTENTIAL","ELECTRIC_RESISTANCE","ELECTRIC_INDUCTANCE","ELECTRIC_CONDUCTANCE","MAGNETIC_FLUX","MAGNETIC_FLUX_DENSITY","FREQUENCY","BIT","meter","inch","foot","yard","mile","link","rod","angstrom","ft","mi","li","mil","sqin","sqft","sqyd","sqmi","sqrd","sqch","sqmil","acre","hectare","m3","litre","cuin","cuft","cuyd","teaspoon","tablespoon","drop","gtt","minim","fluiddram","fluidounce","gill","cup","pint","quart","gallon","beerbarrel","oilbarrel","hogshead","fldr","floz","gi","qt","gal","bbl","obl","gram","ton","tonne","grain","dram","ounce","poundmass","hundredweight","stick","stone","gr","dr","oz","lbm","cwt","minute","hour","day","week","month","year","decade","century","millennium","hertz","reciprocal","Hz","rad","radian","deg","grad","gradian","cycle","arcsec","arcmin","ampere","K","degC","degF","degR","kelvin","celsius","fahrenheit","rankine","mol","mole","cd","candela","newton","dyn","dyne","lbf","poundforce","kip","joule","erg","Wh","eV","electronvolt","watt","hp","Pa","atm","bar","torr","mmHg","mmH2O","cmH2O","farad","F","volt","V","ohm","henry","siemens","weber","Wb","tesla","ALIASES","meters","inches","feet","yards","miles","rods","chains","angstroms","litres","liter","liters","teaspoons","tablespoons","minims","fluiddrams","fluidounces","gills","cups","pints","quarts","gallons","beerbarrels","oilbarrels","hogsheads","gtts","grams","tons","tonnes","grains","drams","ounces","poundmasses","hundredweights","sticks","lbs","kips","acres","hectares","sqfeet","sqyard","sqmile","sqmiles","mmhg","mmh2o","cmh2o","seconds","secs","minutes","mins","hours","hr","hrs","days","weeks","months","years","decades","centuries","millennia","radians","degrees","gradians","cycles","arcsecond","arcseconds","arcminute","arcminutes","BTUs","watts","joules","amperes","coulombs","volts","ohms","farads","webers","teslas","electronvolts","moles","byte","calculateAngleValues","cgs","us","_key2","setUnitSystem","getUnitSystem","typeConverters","_name2","_unit2","alias","_key3","_key4","deleteUnit","aliases","lastUnit","_key5","createUnitSingle","_c","isValidAlpha","assertUnitNameIsValid","definition","defUnit","newUnit","_newBaseUnit","anyMatch","newBaseUnit","_i6","_i8","aliasName","_alias","_key6","../../utils/bignumber/constants","918","string, Unit | string | Object, Object","def","string, Unit | string | Object","919","Unit, Array","920","number | BigNumber | Fraction | Complex, string","921","createJosephson","unitFactory","numberFactory","922","dimNext","_defaultValue","oldLen","newLen","newArray","flatArray","totalSize","sizeIndex","tmpArray2","tmpArray","_unsqueeze","regexp","separator","itemType","./is","./number","./string","923","prevPrec","bitwise","xBits","yBits","minBits","maxBits","minSign","xSign","ySign","decCoefficientToBinaryString","shortLen","longLen","expFuncVal","outVal","twoPower","two","negOne","924","memoize","hasher","../function","925","notation","toEngineering","exponential","lower","upper","fixedOptions","lowerExp","upperExp","rounded","newExp","valueWithoutExp","../object","926","927","_reduce","./array","928","929","isPlainObject","method","safeNativeProperties","Function","safeNativeMethods","toLocaleString","./object","930","_tinyEmitter","off","once","tiny-emitter","931","assertAndCreate","deps","pickShallow","assertDependencies","sortFactories","isOptionalDependency","factoriesByName","addFactory","containsDependency","missingDependencies","932","memoizeCompare","isEqual","cached","933","934","latexUnits","latexSymbols","_escapeLatex","Alpha","Beta","Gamma","Delta","delta","Epsilon","varepsilon","Zeta","zeta","Eta","eta","Theta","vartheta","Iota","iota","Kappa","kappa","varkappa","Lambda","Mu","mu","Nu","nu","Xi","Omicron","omicron","varpi","Rho","rho","varrho","Sigma","sigma","varsigma","Tau","Upsilon","upsilon","Phi","varphi","Chi","chi","Psi","Omega","omega","Inf","infinity","oo","lim","0","escape-latex","935","messages","_console","936","noIndex","noSubset","937","splitNumber","roundDigits","DBL_EPSILON","missingZeros","expDiff","decimalIdx","decimalVal","splitValue","pp","938","nestedObject","flattenedObject","_deepFlatten","canDefineProperty","valueResolver","_uninitialized","isPath","939","940","half","941","escaped","_formatter","looksLikeFraction","formatArray","./bignumber/formatter","942","943","../../lib/entry/mainAny","944","pool","GLOBAL","startdenom","significance","overflow","oldRandom","ARC4","keylen","width","mixkey","smear","stringseed","tostring","arc4","typ","entropy","Uint8Array","navigator","plugins","screen","autoseed","resetGlobal","945","evtArr","evts","liveEvents","TinyEmitter","946","notOk","_types","anyType","_ignore","_conversions","findTypeByName","typeName","findInArray","hint","findTypeIndex","findTypeName","stringifyParams","typeNames","getTypeName","restParam","parseParam","notEmpty","notIgnore","matchingConversions","conversion","filterConversions","exactTypes","typeIndex","conversionIndex","convertibleTypes","hasRestParam","hasConversions","compileTest","test0","test1","tests","compileTests","lastTest","testRestParam","getParamAtIndex","getExpectedTypeNames","excludeConversions","isExactType","mergeExpectedParams","flatMap","getLowestTypeIndex","getLowestConversionIndex","compareSignatures","signature1","signature2","param1","param2","compareParams","compileArgConversion","conversion0","conversion1","splitParams","ignoreConversionTypes","_splitParams","filteredTypes","typeGroup","hasConflictingParams","array1","array2","hasOverlap","len1","len2","restParam1","restParam2","createTypedFunction","signaturesMap","parsedSignatures","parsedParam","isInvalidParam","parseSignature","notNull","parsedSignature","conflictingSignature","ok0","ok1","ok2","ok3","ok4","ok5","allOk","test00","test10","test20","test30","test40","test50","test01","test11","test21","test31","test41","test51","fns","compiledConversions","fnConvert","fnPreprocess","compileArgsPreprocessing","fn0","fn1","fn2","fn3","fn4","fn5","len0","len3","len4","len5","iStart","iEnd","generic","matchingSignatures","nextMatchingDefs","actualType","lengths","maxLength","expectedLength","createSignaturesMap","getName","extractSignatures","validateUnique","_signature","_fn","...Function","string, ...Function","addType","beforeObjectTest","addConversion"],"mappings":"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CG,OAAU,IAAI7H,OAAO8H,kBAAkBF,OACvCG,OAAS,IAAI5H,WAAWA,WAAW0H,QACvCE,OAAOC,iBAAkB,EAEzBD,OAAOE,uBACP,IAAIlI,OAAS,GACTmI,cAAgB,IAAIpI,cAAcC,QACtCgI,OAAOI,iBAAiBD,eAExB,IAAIE,KAAOL,OAAOM,WACdC,KAAO,IAAItH,eAAeC,QAASC,mBACvClB,OAAOoI,KAAKG,gBAAgBC,QAAQC,KAAKH,KAAMF,MAC5CX,eACFA,cAAc1H,UA6gBd,CAAC2I,cAAc,EAAEC,iBAAiB,EAAEC,eAAe,EAAEC,eAAe,KAAKC,EAAE,CAAC,SAASzJ,QAAQf,OAAOD,SAGtG,IAAI2B,OAASX,QAAQ,gBAGjB0J,cAAgB,CAAC,uDACjB,oDACA,mDACA,mDACA,uDACA,mDACA,qDACA,mDACA,qDACA,oDACA,0DACA,uDACA,mDACA,mDACA,qDACA,yDACA,mDACA,uCACA,qDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,gDACA,iDACA,oDACA,uDACA,oDACA,mDACA,kDACA,wDACA,sDACA,oDACA,2DACA,iDACA,mDACA,oDACA,6DACA,oDACA,mDACA,wDACA,mDACA,+CACA,iDACA,mDACA,mDACA,mDACA,mDACA,iDACA,iDACA,iDACA,iDACA,kDACA,iDACA,iDACA,iDACA,iDACA,kDACA,iDACA,iDACA,iDACA,iDACA,kDACA,mDACA,iDACA,mDACA,mDACA,gDACA,iDACA,iDACA,iDACA,iDACA,iDACA,kDACA,iDACA,iDACA,iDACA,iDACA,kDACA,qDACA,oDACA,mDACA,qDACA,kDACA,oDACA,kDACA,qDACA,kDACA,oDACA,sDACA,kDACA,oDACA,qDACA,iDACA,iDACA,iDACA,iDACA,gDACA,kDACA,gDACA,gDACA,gDACA,iDACA,gDACA,iDACA,kDACA,iDACA,iDACA,iDACA,iDACA,iDACA,kDACA,iDACA,iDACA,iDACA,iDACA,kDACA,iDACA,iDACA,iDACA,iDACA,iDACA,kDACA,iDACA,iDACA,kDACA,gDACA,kDACA,iDACA,iDACA,kDACA,gDACA,kDACA,iDACA,iDACA,mDACA,mDACA,iDACA,mDACA,gDACA,oDACA,mDACA,mDACA,kDACA,mDACA,mDACA,mDACA,kDACA,mDACA,gDACA,iDACA,iDACA,mDACA,gDACA,iDACA,mDACA,yDACA,yDACA,4DACA,2DACA,2DACA,wDACA,yDACA,wDACA,yDACA,2DACA,2DACA,wDACA,wDACA,2DACA,yDACA,2DACA,2DACA,2DACA,0DACA,oDACA,wCAAgDC,KAAK,IAGrDC,KAAM,IAAIjJ,OAAOiJ,IAAIC,iBAAkBC,YAAYJ,eAEnDK,eAAiBH,IAAII,gBAAgBrG,IAAK,SAASsG,GAAIC,OAAS,OAAO,IAAIvJ,OAAOwJ,IAAIC,IAAIH,GAAIC,SAElG,SAASrJ,UAAUsH,OAGf,OAFHxH,OAAO0J,MAAM/J,KAAKf,KAAM4I,OACrB5I,KAAK+K,QAAU,IAAI3J,OAAOiJ,IAAIW,kBAAkBhL,KAAMqK,IAAKG,eAAgB,IAAIpJ,OAAO6J,wBAC/EjL,MAGXsB,UAAUG,UAAYC,OAAOC,OAAOP,OAAO0J,MAAMrJ,YAC7BG,YAAcN,UAElCI,OAAOwJ,eAAe5J,UAAUG,UAAW,MAAO,CAC1C0J,IAAM,WACE,OAAOd,OAIvB/I,UAAU8J,IAAMhK,OAAOiK,MAAMD,IAC7B9J,UAAUgK,KAAO,EACjBhK,UAAUiK,KAAO,EACjBjK,UAAUkK,KAAO,EACjBlK,UAAUmK,KAAO,EACjBnK,UAAUoK,KAAO,EACjBpK,UAAUqK,KAAO,EACjBrK,UAAUsK,KAAO,EACjBtK,UAAUuK,KAAO,EACjBvK,UAAUwK,KAAO,EACjBxK,UAAUyK,KAAO,GACjBzK,UAAU0K,MAAQ,GAClB1K,UAAU2K,MAAQ,GAClB3K,UAAU4K,MAAQ,GAClB5K,UAAU6K,MAAQ,GAClB7K,UAAU8K,MAAQ,GAClB9K,UAAU+K,MAAQ,GAClB/K,UAAUgL,MAAQ,GAClBhL,UAAUiL,MAAQ,GAClBjL,UAAUkL,MAAQ,GAClBlL,UAAUmL,MAAQ,GAClBnL,UAAUoL,MAAQ,GAClBpL,UAAUqL,MAAQ,GAClBrL,UAAUsL,MAAQ,GAClBtL,UAAUuL,MAAQ,GAClBvL,UAAUwL,MAAQ,GAClBxL,UAAUyL,MAAQ,GAClBzL,UAAU0L,MAAQ,GAClB1L,UAAU2L,MAAQ,GAClB3L,UAAU4L,MAAQ,GAClB5L,UAAU6L,MAAQ,GAClB7L,UAAU8L,MAAQ,GAClB9L,UAAU+L,MAAQ,GAClB/L,UAAUgM,MAAQ,GAClBhM,UAAUiM,GAAK,GACfjM,UAAUkM,KAAO,GACjBlM,UAAUmM,QAAU,GACpBnM,UAAUoM,QAAU,GACpBpM,UAAU4C,IAAM,GAChB5C,UAAUyC,GAAK,GACfzC,UAAUqM,GAAK,GACfrM,UAAUsM,SAAW,GACrBtM,UAAUuM,QAAU,GACpBvM,UAAUwM,aAAe,GAEzBxM,UAAUG,UAAUsM,aAAe,CAAE,wBAAyB,UAE9DzM,UAAUG,UAAUuM,UAAY,CAAE,gBAElC1M,UAAUG,UAAUwM,aAAe,CAAE,KAAM,MAAO,WAAY,MAAO,MAChC,MAAO,OAAQ,OAAQ,YACvB,aAAc,YAAa,SAC3B,MAAO,MAAO,SAAU,SAAU,MAClC,YAAa,OAAQ,UAAW,MAChC,OAAQ,MAAO,MAAO,MAAO,MAC7B,MAAO,MAAO,QAAS,QAAS,QAChC,QAAS,OAAQ,SAAU,QAEhE3M,UAAUG,UAAUyM,cAAgB,CAAE,KAAM,KAAM,KAAM,KAAM,KAAM,KAC9B,KAAM,KAAM,KAAM,KAAM,KAAM,KAC9B,KAAM,KAAM,KAAM,KAAM,KAAM,KAC9B,KAAM,KAAM,KAAM,KAAM,KAAM,KAC9B,KAAM,KAAM,KAAM,KAAM,KAAM,KAC9B,KAAM,KAAM,KAAM,KAAM,KAAM,OAC9B,UAAW,UAAW,MAAO,KAC7B,KAAM,WAAY,UAAW,gBAEnE5M,UAAUG,UAAU0M,UAAY,CAAE,OAAQ,OAAQ,OAAQ,OAAQ,OAChC,OAAQ,OAAQ,OAAQ,OAAQ,OAChC,QAAS,QAAS,QAAS,QAAS,QACpC,QAAS,QAAS,QAAS,QAAS,QACpC,QAAS,QAAS,QAAS,QAAS,QACpC,QAAS,QAAS,QAAS,QAAS,QACpC,QAAS,QAAS,QAAS,KAAM,OACjC,UAAW,UAAW,MAAO,KAAM,KACnC,WAAY,UAAW,gBAEzD7M,UAAUG,UAAU2M,gBAAkB,UAItC3O,QAAQ6B,UAAYA,WAGlB,CAAC2I,eAAe,KAAKoE,EAAE,CAAC,SAAS5N,QAAQf,OAAOD,SAGlD,IAAI2B,OAASX,QAAQ,gBAGrB,SAASe,eAER,OADAJ,OAAOoI,KAAK8E,kBAAkBvN,KAAKf,MAC5BA,OAGRwB,aAAaC,UAAYC,OAAOC,OAAOP,OAAOoI,KAAK8E,kBAAkB7M,YAC9CG,YAAcJ,cAGxBC,UAAUuB,cAAgB,SAASC,OAIhDzB,aAAaC,UAAUyB,aAAe,SAASD,OAK/CzB,aAAaC,UAAU0B,eAAiB,SAASF,OAIjDzB,aAAaC,UAAUgF,cAAgB,SAASxD,OAKhDzB,aAAaC,UAAUiF,aAAe,SAASzD,OAI/CzB,aAAaC,UAAUkF,YAAc,SAAS1D,OAK9CzB,aAAaC,UAAU8M,aAAe,SAAStL,OAI/CzB,aAAaC,UAAU+M,YAAc,SAASvL,OAK9CzB,aAAaC,UAAUgN,cAAgB,SAASxL,OAIhDzB,aAAaC,UAAUiN,aAAe,SAASzL,OAK/CzB,aAAaC,UAAUmF,UAAY,SAAS3D,OAI5CzB,aAAaC,UAAUqF,SAAW,SAAS7D,OAK3CzB,aAAaC,UAAUsF,cAAgB,SAAS9D,OAIhDzB,aAAaC,UAAUuF,aAAe,SAAS/D,OAK/CzB,aAAaC,UAAUwF,aAAe,SAAShE,OAI/CzB,aAAaC,UAAUyF,YAAc,SAASjE,OAK9CzB,aAAaC,UAAU0F,SAAW,SAASlE,OAI3CzB,aAAaC,UAAUkG,QAAU,SAAS1E,OAK1CzB,aAAaC,UAAUmG,SAAW,SAAS3E,OAI3CzB,aAAaC,UAAUoG,QAAU,SAAS5E,OAK1CzB,aAAaC,UAAUqG,aAAe,SAAS7E,OAI/CzB,aAAaC,UAAUsG,YAAc,SAAS9E,OAK9CzB,aAAaC,UAAUuG,YAAc,SAAS/E,OAI9CzB,aAAaC,UAAUwG,WAAa,SAAShF,OAK7CzB,aAAaC,UAAUyG,eAAiB,SAASjF,OAIjDzB,aAAaC,UAAU0G,cAAgB,SAASlF,OAKhDzB,aAAaC,UAAU2G,cAAgB,SAASnF,OAIhDzB,aAAaC,UAAU4G,aAAe,SAASpF,OAK/CzB,aAAaC,UAAU6G,aAAe,SAASrF,OAI/CzB,aAAaC,UAAU8G,YAAc,SAAStF,OAK9CzB,aAAaC,UAAU+G,SAAW,SAASvF,OAI3CzB,aAAaC,UAAUgH,QAAU,SAASxF,OAK1CzB,aAAaC,UAAUkN,UAAY,SAAS1L,OAI5CzB,aAAaC,UAAUmN,SAAW,SAAS3L,OAK3CzB,aAAaC,UAAUiH,aAAe,SAASzF,OAI/CzB,aAAaC,UAAUkH,YAAc,SAAS1F,OAK9CxD,QAAQ+B,aAAeA,cACrB,CAACyI,eAAe,KAAK4E,EAAE,CAAC,SAASpO,QAAQf,OAAOD,SAGlD,IAAI2B,OAASX,QAAQ,gBACjBe,aAAef,QAAQ,kBAAkBe,aAGzC2I,cAAgB,CAAC,uDACjB,oDACA,qDACA,qDACA,uDACA,qDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,kDACA,mDACA,mDACA,mDACA,kDACA,uDACA,yDACA,uDACA,uDACA,uDACA,2CACA,uCACA,uCACA,uCACA,uCACA,6CACA,uDACA,mDACA,iDACA,mDACA,iDACA,mDACA,iDACA,iDACA,iDACA,mDACA,iDACA,qDACA,mDACA,mDACA,mDACA,uDACA,mDACA,qDACA,mDACA,kDACA,kDACA,mDACA,oDACA,oDACA,qDACA,mDACA,mDACA,mDACA,qDACA,qDACA,oDACA,iDACA,oDACA,qDACA,qDACA,mDACA,kDACA,mDACA,kDACA,qDACA,qDACA,kDACA,qDACA,mDACA,oDACA,oDACA,uDACA,mDACA,mDACA,qDACA,qDACA,kDACA,gDACA,mDACA,kDACA,iDACA,mDACA,qDACA,kDACA,kDACA,oDACA,kDACA,kDACA,oDACA,mDACA,oDACA,iDACA,iDACA,iDACA,iDACA,gDACA,+CACA,iDACA,mDACA,mDACA,mDACA,iDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,gDACA,iDACA,gDACA,mDACA,iDACA,gDACA,mDACA,iDACA,mDACA,mDACA,mDACA,mDACA,iDACA,mDACA,gDACA,mDACA,mDACA,mDA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"} \ No newline at end of file +{"version":3,"sources":["0"],"names":["f","exports","module","define","amd","window","global","self","this","QuantumCircuit","r","e","n","t","o","i","c","require","u","a","Error","code","p","call","length","1","ErrorListener","errors","antlr4","error","QASMLexer","QASMParser","QASMListener","prototype","Object","create","constructor","syntaxError","rec","sym","line","col","msg","push","QCQASMListener","circuit","compatibilityMode","qregMap","condition","numQbit","num","reg","qregBase","qreg","base","qregLen","enterMainprog","ctx","exitMainprog","enterStatement","gatedecl","args","params","ccount","customGate","customGateName","customGateRegs","getChildCount","getChild","getText","creg","ID","value","parseInt","INT","getPrototypeOf","map","par","parName","goplist","uop","gateName","idlist","anylist","explist","mixedlist","basicGates","customGates","tmpName","tmpDef","exportInfo","qasm","name","qiskit","paramList","paramDef","gateDef","exp","paramItem","paramIndex","paramValue","paramName","options","wires","count","indexOf","external","registerGate","JSON","parse","stringify","addGate","save","exitStatement","enterVersion","exitVersion","enterDecl","createCreg","exitDecl","enterGatedecl","exitGatedecl","enterGoplist","exitGoplist","enterQop","qbit","argument","arg","numBits","x","cbit","bit","exitQop","enterUop","exitUop","enterAnylist","exitAnylist","enterIdlist","exitIdlist","enterMixedlist","exitMixedlist","enterArgument","exitArgument","enterExplist","exitExplist","enterExp","exitExp","enterUnaryop","exitUnaryop","input","errorCallback","chars","InputStream","lexer","tokens","CommonTokenStream","parser","buildParseTrees","removeErrorListeners","errorListener","addErrorListener","tree","mainprog","QASM","ParseTreeWalker","DEFAULT","walk","./QASMLexer","./QASMListener","./QASMParser","antlr4/index","2","serializedATN","join","atn","ATNDeserializer","deserialize","decisionsToDFA","decisionToState","ds","index","dfa","DFA","Lexer","_interp","LexerATNSimulator","PredictionContextCache","defineProperty","get","EOF","Token","T__0","T__1","T__2","T__3","T__4","T__5","T__6","T__7","T__8","T__9","T__10","T__11","T__12","T__13","T__14","T__15","T__16","T__17","T__18","T__19","T__20","T__21","T__22","T__23","T__24","T__25","T__26","T__27","T__28","T__29","T__30","T__31","T__32","PI","REAL","SUBREAL","EXPREAL","WS","FILENAME","COMMENT","LINE_COMMENT","channelNames","modeNames","literalNames","symbolicNames","ruleNames","grammarFileName","3","ParseTreeListener","enterInclude","exitInclude","enterFilename","exitFilename","enterAtom","exitAtom","4","sharedContextCache","Parser","ParserATNSimulator","MainprogContext","parent","invokingState","undefined","ParserRuleContext","ruleIndex","RULE_mainprog","StatementContext","RULE_statement","VersionContext","RULE_version","IncludeContext","RULE_include","FilenameContext","RULE_filename","DeclContext","RULE_decl","GatedeclContext","RULE_gatedecl","GoplistContext","RULE_goplist","QopContext","RULE_qop","UopContext","RULE_uop","AnylistContext","RULE_anylist","IdlistContext","RULE_idlist","MixedlistContext","RULE_mixedlist","ArgumentContext","RULE_argument","ExplistContext","RULE_explist","ExpContext","RULE_exp","AtomContext","RULE_atom","UnaryopContext","RULE_unaryop","version","getTypedRuleContext","statement","getTypedRuleContexts","enterRule","listener","exitRule","localctx","_ctx","state","_la","enterOuterAlt","_errHandler","sync","_input","LA","re","RecognitionException","exception","reportError","recover","decl","getToken","qop","include","adaptivePredict","match","filename","NoViableAltException","getTokens","_alt","ATN","INVALID_ALT_NUMBER","unaryop","atom","_p","_parentctx","_parentState","enterRecursionRule","la_","recoverInline","reportMatch","consume","stop","LT","_parseListeners","triggerExitRuleEvent","pushNewRecursionContext","precpred","FailedPredicateException","unrollRecursionContexts","sempred","predIndex","exp_sempred","5","formatComplex2","im","sre","formatFloat","opt","plusChar","iotaChar","qubitLetter","max","maxN","maxLen","toString","nStr","res","charCodeAt","String","fromCharCode","numQubits","id","description","matrix","drawingInfo","connectors","label","quil","cirq","notTfqSupported","quest","alpha","beta","qsharp","braket","aqasm","quirk","y","z","h","srn","defgate","pyquil","array","srndg","r2","replacement","r4","r8","lambda","theta","rx","ry","rz","u1","u2","phi","u3","s","sdg","dagger","tdg","swap","func","srswap","equivalent","iswap","xy","cx","root","controlled","cy","type","cz","ch","csrn","ms","yy","zz","cr2","cr4","cr8","crx","cry","crz","cu1","cu2","cu3","cs","ct","csdg","ctdg","ccx","cswap","csrswap","reset","measure","init","math","QASMImport","decimalPlaces","round","fixedWidth","toFixed","binStr","len","bin","reverseBitwise","split","reverse","defaultHybridOptions","optimizer","tolerance","costFunction","python","javascript","gates","partitionMap","partitionCount","partitionInfo","hybrid","hybridOptions","keepCustomGates","cregs","collapsed","prob","measureResetsQubit","reverseBitOrder","clear","clearGates","initState","resetState","stateBits","partitionCache","stats","duration","complex","formatComplex","multiplySquareMatrices","m1","m2","d","k","add","multiply","isIdentityMatrix","m","precision","j","isUnitaryMatrix","U","ctranspose","isHermitianMatrix","H","matrixDiff","pow","matrix1","matrix2","total","row1","row2","item1","item2","i1","i2","abs","subtract","parseMathString","str","variables","node","replace","expression","handler","isSymbolNode","evalMathString","vars","parsed","evaluate","Matrix","toArray","parseMatrix","M","A","row","rowIndex","Array","isArray","val","colIndex","matrixHasComplexElement","cell","Complex","mathjs","stringifyMatrix","forceComplex","minify","el","elIndex","matrixRe","newRow","matrixIm","matrixAbs","matrixArg","setCombinedState","combineList","newState","newStateBits","totalQubits","itemIndex","item","dest","bitMaps","cmap","source","and","or","n3","a3","s3","a1","s1","numCols","keys","_setCombinedState","c1","c2","q1","q2","wireMap","q3","c1map","c2map","unused","a2","s2","appendQubits","numAmplitudes","onlyPossible","possibleCount","is","numGates","decompose","load","column","wire","gate","getGateAt","connector","isEmptyCell","w","Math","min","apply","isEmptyPlace","usingCregs","mx","minWire","maxWire","allEmpty","lastNonEmptyPlace","insertColumn","splice","randomString","text","charset","charAt","floor","random","wireList","numConnectors","cregBit","existingCreg","currentValue","isNaN","setCregBit","appendGate","insertGate","insertSpace","removeGateAt","numWires","removeGate","gateId","gatePos","getGatePosById","addMeasure","appendCircuit","pack","colOffset","removeTrailingColumns","isEmptyCol","pop","removeLeadingColumns","emptyCount","shift","removeTrailingRows","isEmptyRow","removeQubit","flipVertically","lastQubit","tmp","flipHorizontally","lastCol","applyTransform","qubits","slice","unusedSpace","getElMask","qubit","ZERO","elrow","rowmask","elcol","colmask","uval","counter","countermask","incmask","getIncMask","notmask","getNotMask","toothless","transformMatrix","targetQubits","endianness","T","zeros","circuitMatrix","decomposed","gotClassicalControl","rawGate","getRawGate","eigenvalues2x2","eigen","divide","sqrt","getBipartiteState","b","bipartiteState","ampCount","chanceMap","sour","reducedState","circ","radius","angles","concurence","entangled","concurencePercent","resetQubit","applyGate","console","log","doReset","g","gateOptions","globalOptions","globalParams","globalParamName","rawGateRow","ev","varName","varIndex","findGlobalParams","cells","cellAdded","gateParamName","gateParamValue","globals","isFunctionNode","extractVariables","getGlobalParams","gotGlobalParams","updateGlobalParams","obj","injectArray","pos","concat","custom","cc","ww","gg","destParam","transformed","transform","path","hasOwnProperty","tmpq","empty","decomposeGateAt","destCol","getGatesAtColumn","convertToCustomGate","addToCircuit","validCustomGateName","baseName","customGateNames","validName","splitIntoBlocks","blockSize","blocks","prevCondition","prevIsUnitary","currentBlock","addedToBlock","currentCondition","currentIsUnitary","newWires","verticalOnly","extColumn","extWires","sort","extWire","extGate","extGateDef","extCondition","gateValid","validExtWires","extW","newExtWire","blockCounter","blockIndex","block","isBlock","flexibleBlockSize","customGateOptions","usedGates","used","skipGate","basicGate","unitariesOnly","noCustomGates","countOps","shallow","ops","subOps","subName","getCouplingMap","couplingMap","wiresStr","getGateDef","importRaw","data","errorMessage","program","basicGateQubits","log2","exportRaw","sequence","gt","rawMatrix","rawRow","toLowerCase","exportToGenerator","exportQASM","output","problem","settings","allowed_gates","coupling_map","fromMatrix","unitary","noVectors","stateCircuit","numSamples","set","initialVector","randomCircuit","useGates","noClassicControl","noMeasure","noReset","run","stateAsArray","amplitude","initialState","lightweight","generateGrayCode","result","gray","dec","grayCodeChain","numCtrlQubits","qControls","qTarget","grayCode","lastPattern","rules","pattern","lmPos","comp","compareStrings","indices","indicesOfChar","idx","countChar","inverseOptions","key","MCU1Circuit","ctrlQubits","invertControls","addX","qc","rule","MCXCircuit","mcu1","mcu1name","mcu1wires","isMultiControlledGate","mcInfo","decodeMultiControlledGateName","rootGate","rootName","ctrlQubit","registerMCXGate","multiControlledGateName","registerMCU1Gate","registerMultiControlledGate","getOrRegisterMultiControlledEquivalent","inverseControl","unshift","gn","tmpGateDef","removeUnusedMultiControlledGates","splitted","substring","namePrefix","isControllableGate","getGateById","getGateBefore","getControllableGatesAtColumn","controllableGates","exportJavaScript","comment","exportAsGateName","asJupyter","js","cline","customGatesAdded","indent","circuitVar","usedGateName","customCircuit","cregCount","cregName","skip","optKey","notebook","metadata","kernelspec","display_name","language","language_info","file_extension","mimetype","nbformat","nbformat_minor","cell_type","outputs","execution_count","exportQiskit","versionStr","providerName","backendName","shots","circuitReplacement","insideSubmodule","exportToQiskit","exportQuEST","definedFunc","newOptions","exportToQuEST","exportToQASM","importQASM","exportPyquil","lattice","asQVM","exportToPyquil","exportQuil","exportToQuil","importQuil","qubitNames","renamedGates","lineOffset","lines","commands","multiline","lineIndex","clines","codelines","trim","codeline","body","lastToken","paramEnd","paramStart","ndx","tok","tk","qindex","token","commandCount","commandIndex","newName","command","toUpperCase","subQuil","subQubitNames","subCircuit","gateInfo","gname","gdef","quilDef","getGateInfo","qubitCount","cregStart","cregEnd","argInt","exportQuirk","tempCircuit","cols","customGateCircuit","gateInformation","gateKeys","gateNumber","gateKey","isDecomposeCustomCircuit","info","gateToAdd","gateInCustomCircuit","previousColumn","previousGate","quirkColumn","wireRange","isBasicGate","gateWires","arr","range","quirkName","param","angle","targetWiresSorted","targetWires","tWire","find","gatePresentInCol","columnElement","wireOffset","customGateWires","gateWire","isWireInRange","exportCirq","exportTfq","exportToCirq","exportQSharp","circuitName","indentDepth","exportToQSharp","exportQobj","experimentName","numShots","exportToQobj","importQobj","qobj","experiments","experiment","header","n_qubits","cregData","creg_sizes","totalBits","cregLen","cregMask","cregDef","mask","offset","instructions","conditions","instIndex","inst","conditionFromMaskAndValue","register","qIndex","memory","memoryToCreg","parIndex","conditional","exportTFQ","exportToTFQ","exportBraket","exportToBraket","exportSVG","embedded","exportToSVG","cellWidth","cellHeight","hSpacing","vSpacing","blackboxPaddingX","blackboxPaddingY","blackboxLineColor","blackboxSelectedLineColor","wireColor","gateLineColor","gateSelectedLineColor","cWireColor","cWireSelectedColor","cArrowSize","hWireColor","wireWidth","wireTextHeight","wireTextDown","wireMargin","wireLabelWidth","dotRadius","paramTextHeight","selectionPaddingX","selectionPaddingY","selectionLineColor","drawBlochSpheres","drawHybrid","getCellX","getCellY","numRows","numCregs","totalCols","totalWireCols","totalWidth","totalWireWidth","totalHeight","hybridWireY","polarToCartesian","centerX","centerY","angleInDegrees","angleInRadians","cos","sin","qWireY","qGateY","cWireY","cregIndex","getCregIndex","gateBoxSVG","gateX","gateY","gateLabel","selected","gateWidth","gateHeight","gateCircleSVG","cellX","cellY","gateNotSVG","gateGaugeSVG","startAngle","endAngle","start","end","largeArcFlag","movedown","gateXSVG","gateDotSVG","gateInvertedDotSVG","gateSVG","drawBox","gateRectSVG","escapeHtml","gateGallery","gateGalleryRaw","customGateGallery","gateList","uniq","uniqStr","dinfo","svg","dotsvg","ndotsvg","placeholders","drawGatePlaceholder","wireY","initSymbol","blackbox","selection","topWire","bottomWire","cLinkTopY","linkX","linkY1","linkY2","paramsStr","paramsCount","paramVal","parseFloat","drawGate","drawGateHandle","currentCol","className","canvasId","drawGateCanvas","gate2X","center2X","hWireX","globalParamsInfo","link2X","link2Y2","link2Y1","cellBottomRightX","cellBottomRightY","mathToStringHandler","adjustIdentation","addStr","ident","cfLines","minIdent","cfLine","tmpIdent","search","addIdent","pc","globalParamValue","identation","globalParamList","qiskitReplacement","qiskitEquivalent","qiskitCondition","replacementParams","replacementCircuit","equivalentCircuit","eqParams","gateParams","eqParamName","argCount","paramCount","globalParamIndex","functions","questName","includes","customQuEST","questParams","qasmReplacement","qasmEquivalent","qasmName","replacementCondition","eqCondition","importGates","defParams","defGates","defRun","defArrays","gotMeasurement","defGateNames","defCircNames","quilInfo","importName","bg","paramText","gotConditions","importsForDefgate","defParamItem","defIndex","cregTotalBits","latticeName","isDefGate","insideControl","testBit","conditionValue","cregBase","cregSize","bitIndex","firstSet","bitStr","bitCount","singleBitIndex","bitValue","bitVal","gotOpenBrace","targetBit","labelCounter","exportToAQASM","isExportPyAQASM","getIndent","depth","gatesToBeAdded","customDecomposedCircuit","decomposedColumn","decomposedWire","circuitGate","gateToRemove","unsupportedGateDefinition","submoduleCount","unsupportedAqasmInfo","gateUnitary","arity","cregLength","aqasmInfo","aqasmInfoName","row_element","evaluated_expression","matrix_element","matrix_element_real","matrix_element_im","exportAQASM","exportToPyAQASM","exportPyAQASM","platform","cirqInfo","isReplaced","defName","gateCounter","multishotKeys","noTfqSupport","isControlledGate","addBraces","tmpParamCount","paramString","tfqReplacement","tfq","parameterJson","pi","isConstantNode","Number","isInteger","operationName","cregList","qreg_name","qsharpInfo","wireIdx","unsupportedBraketInfo","braketInfo","isUnitary","parentQobj","qobj_id","schema_version","config","memory_slots","qreg_sizes","qubit_labels","clbit_labels","cregNames","registerSlots","qobjInstruction","qobjReplacement","qobjEquivalent","booleanInstruction","relation","numberOfBitsShift","maskValue","indexOfRegister","exponent","prevRegisterLength","clearPartitions","createPartitions","wirePartitions","partitionCounter","prevPartitions","prevPartition","wr","partition","oldPartition","partitionBounds","printPartitions","part","partitionIndex","bounds","top","bottom","left","right","parents","found","partitionWire","parentPartition","links","parentBounds","pwire","partitionCircuit","usedWires","combineItem","initialValues","strictMode","continue","valIndex","aindex","Date","partitioning","executeGate","pcirc","pcolumn","pgate","getCregValue","onGate","onColumn","lastPartitions","startTime","lastPartition","lastBounds","skipItems","reverseBits","ampIndex","indexBinStr","amplitudeStr","magnitude","chance","chanceStr","phase","phaseStr","stateAsSimpleArray","stateAsString","perc","print","getCregs","cregsAsString","removeCreg","removeGates","renameCreg","oldName","minCregSize","largestBit","lb","resizeCreg","size","getCreg","getCregBit","regName","bits","measureAll","force","randomWeight","q","measureAllMultishot","counts","randomWeights","shotCount","sh","probabilities","probability","densityMatrix","density","rowVal","colVal","conj","partialTrace","insertBit","posBit","out","trace","unusedCount","unusedLen","qpos","acos","csc","thetaDeg","phiDeg","gateCount","gateQubits","cregBits","randomUnitary","eulerAnglesZYZ","inputMatrix","eulerAngles","coeff","det","toPolar","su_mat","atan2","phiplambda","phimlamda","./qasm_import/QASMImport.js","6","Interval","TokenStream","BufferedTokenStream","tokenSource","fetchedEOF","mark","release","marker","seek","lazyInit","adjustSeekIndex","fetch","nextToken","tokenIndex","types","subset","contains","LB","setup","setTokenSource","nextTokenOnChannel","channel","previousTokenOnChannel","getHiddenTokensToRight","nextOnChannel","DEFAULT_TOKEN_CHANNEL","from_","to","filterForChannel","getHiddenTokensToLeft","prevOnChannel","hidden","getSourceName","interval","fill","./IntervalSet","./Lexer","./Token","7","fs","importScripts","CharStreams","fromString","fromBlob","blob","encoding","onLoad","onError","reader","FileReader","onload","target","onerror","readAsText","fromBuffer","buffer","fromPath","callback","readFile","err","fromPathSync","readFileSync","./InputStream","8","CommonToken","TokenFactory","CommonTokenFactory","copyText","createThin","9","DEFAULT_CHANNEL","getNumberOfOnChannelTokens","./BufferedTokenStream","10","FileStream","fileName","decodeToUnicodeCodePoints","11","strdata","stream","_index","codePoint","codePointAt","codeUnit","_size","_loadString","fromCodePoint","./polyfills/codepointat","./polyfills/fromcodepoint","12","IntervalSet","intervals","readOnly","first","v","INVALID_TYPE","addOne","addInterval","addRange","l","reduce","addSet","other","intervalslength","complement","removeRange","removeOne","elemsAreChar","toTokenString","toCharString","toIndexString","names","elementName","EPSILON","13","Set","BitSet","ATNConfig","RuleStopState","RuleTransition","NotSetTransition","WildcardTransition","AbstractPredicateTransition","predictionContextFromRuleContext","PredictionContext","SingletonPredictionContext","LL1Analyzer","HIT_PRED","getDecisionLookahead","transitions","look","alt","lookBusy","_LOOK","transition","EMPTY","LOOK","stopState","lookContext","calledRuleStack","seeThruPreds","addEOF","context","isEmpty","returnState","states","getReturnState","removed","remove","getParent","newContext","followState","stateNumber","isEpsilon","MIN_USER_TOKEN_TYPE","maxTokenType","./PredictionContext","./Utils","./atn/ATNConfig","./atn/ATNState","./atn/Transition","14","Recognizer","LexerNoViableAltException","_factory","_tokenFactorySourcePair","_token","_tokenStartCharIndex","_tokenStartLine","_tokenStartColumn","_hitEOF","_channel","_type","_modeStack","_mode","DEFAULT_MODE","_text","MORE","SKIP","HIDDEN","HIDDEN_CHANNEL","MIN_CHAR_VALUE","MAX_CHAR_VALUE","tokenStartMarker","emitEOF","continueOuter","ttype","stack","notifyListeners","emit","more","mode","pushMode","debug","popMode","sourceName","emitToken","getCharIndex","cpos","lpos","eof","getAllTokens","getErrorDisplay","getErrorListenerDispatch","getErrorDisplayForChar","getCharErrorDisplay","./CommonTokenFactory","./Recognizer","./error/Errors","15","DefaultErrorStrategy","ATNDeserializationOptions","TerminalNode","ErrorNode","TraceListener","_precedenceStack","_tracer","_syntaxErrors","setInputStream","enterEveryRule","visitTerminal","symbol","exitEveryRule","contructor","bypassAltsAtnCache","setTrace","getCurrentToken","addErrorNode","matchWildcard","_buildParseTrees","getParseListeners","addParseListener","removeParseListener","removeParseListeners","triggerEnterRuleEvent","getTokenFactory","setTokenFactory","factory","getATNWithBypassAlts","serializedAtn","getSerializedATN","deserializationOptions","generateRuleBypassTransitions","compileParseTreePattern","patternRuleIndex","getTokenStream","ParseTreePatternMatcher","compile","getInputStream","setTokenStream","notifyErrorListeners","offendingToken","hasListener","inErrorRecoveryMode","addTokenNode","isErrorNode","visitErrorNode","addContextToParseTree","parentCtx","addChild","altNum","setAltNumber","removeLastChild","getPrecedence","precedence","previous","retCtx","getInvokingContext","inContext","isExpectedToken","following","nextTokens","rt","getExpectedTokens","getExpectedTokensWithinCurrentRule","getRuleIndex","ruleName","getRuleIndexMap","getRuleInvocationStack","getDFAStrings","decisionToDFA","dumpDFA","seenOne","printer","println","decision","./atn/ATNDeserializationOptions","./atn/ATNDeserializer","./error/ErrorStrategy","./tree/Tree","16","RuleContext","Tree","INVALID_INTERVAL","TerminalNodeImpl","ErrorNodeImpl","invokingStateNumber","children","InterpreterRuleContext","copyFrom","child","badToken","ctxType","contexts","getSourceInterval","./RuleContext","17","Hash","cachedHashCode","cache","hash","hashCode","update","finish","EmptyPredictionContext","EMPTY_RETURN_STATE","ArrayPredictionContext","returnStates","merge","rootIsWildcard","mergeCache","rootMerge","payloads","mergeRoot","spc","singleParent","apc","a_","mergeSingletons","mergedReturnStates","mergedParents","payload","ax_ax","mergedParent","a_parent","b_parent","uniqueParents","combineCommonParents","mergeArrays","globalNodeCount","hasEmptyPath","updateHashCode","existing","equals","up","outerContext","getCachedPredictionContext","contextCache","visited","changed","updated","18","ConsoleErrorListener","ProxyErrorListener","_listeners","INSTANCE","_stateNumber","tokenTypeMapCache","ruleIndexMapCache","checkVersion","toolVersion","getTokenTypeMap","tokenNames","getTokenNames","getTokenType","tokenName","getErrorHeader","getOffendingToken","getTokenErrorDisplay","actionIndex","./error/ErrorListener","19","RuleNode","getRuleContext","getPayload","getAltNumber","altNumber","accept","visitor","visitChildren","Trees","toStringTree","recog","ri","./atn/ATN","./tree/Trees","20","EMPTY_SOURCE","getTokenSource","clone","txt","21","arrayToString","standardEqualsFunction","standardHashCodeFunction","hashFunction","equalsFunction","Map","AltDict","DoubleDict","seed","h1b","k1","remainder","bytes","h1","values","minValue","hashKey","put","entries","entry","oldValue","containsKey","getKeys","getValues","arguments","hashStuff","escapeWhitespace","escapeSpaces","titleCase","substr","equalArrays","22","grammarType","ruleToStartState","ruleToStopState","modeNameToStartState","ruleToTokenType","lexerActions","modeToStartState","nextTokensInContext","nextTokensNoContext","nextTokenWithinRule","addState","removeState","defineDecisionState","getDecisionState","expected","./../IntervalSet","./../LL1Analyzer","./../Token","23","DecisionState","SemanticContext","checkParams","isCfg","semanticContext","reachesIntoOuterContext","props","precedenceFilterSuppressed","checkContext","NONE","LexerATNConfig","lexerActionExecutor","passedThroughNonGreedyDecision","checkNonGreedyDecision","hashCodeForConfigSet","equalsForConfigSet","nonGreedy","../Utils","./ATNState","./SemanticContext","24","Utils","hashATNConfig","equalATNConfigs","ATNConfigSet","fullCtx","configLookup","configs","uniqueAlt","conflictingAlts","hasSemanticContext","dipsIntoOuterContext","OrderedATNConfigSet","merged","getStates","getPredicates","preds","optimizeConfigs","interpreter","getCachedContext","addAll","coll","containsFast","setReadonly","./../PredictionContext","./../Utils","./ATN","25","verifyATN","defaultOptions","26","ATNType","ATNStates","ATNState","BasicState","BlockStartState","BlockEndState","LoopEndState","RuleStartState","TokensStartState","PlusLoopbackState","StarLoopbackState","StarLoopEntryState","PlusBlockStartState","StarBlockStartState","BasicBlockStartState","Transitions","Transition","AtomTransition","SetTransition","RangeTransition","ActionTransition","EpsilonTransition","PredicateTransition","PrecedencePredicateTransition","LexerActions","LexerActionType","LexerSkipAction","LexerChannelAction","LexerCustomAction","LexerMoreAction","LexerTypeAction","LexerPushModeAction","LexerPopModeAction","LexerModeAction","ADDED_UNICODE_SMP","SUPPORTED_UUIDS","initArray","stateFactories","actionFactories","isFeatureSupported","feature","actualUuid","idx1","checkUUID","readATN","readStates","readRules","readModes","sets","readSets","readInt","bind","uuid","readInt32","readEdges","readDecisions","readLexerActions","markPrecedenceDecisions","PARSER","temp","readUUID","pair","loopBackStateNumbers","endStateNumbers","nstates","loopBackStateNumber","endStateNumber","stype","stateFactory","LOOP_END","loopBackState","endState","numNonGreedyStates","numPrecedenceStates","isPrecedenceRule","nrules","LEXER","tokenType","startState","nmodes","readUnicode","iset","nedges","src","trg","arg1","arg2","arg3","trans","edgeFactory","addTransition","outermostPrecedenceReturn","ndecisions","decState","actionType","data1","data2","lexerAction","lexerActionFactory","generateRuleBypassTransition","bypassStart","bypassStop","excludeTransition","stateIsEndStateFor","matchState","maybeLoopEndState","epsilonOnlyTransitions","isPrecedenceDecision","checkCondition","message","readLong","byteToHex","bth","createByteToHex","bb","int","RANGE","RULE","PREDICATE","PRECEDENCE","ATOM","ACTION","SET","NOT_SET","WILDCARD","sf","BASIC","RULE_START","BLOCK_START","PLUS_BLOCK_START","STAR_BLOCK_START","TOKEN_START","RULE_STOP","BLOCK_END","STAR_LOOP_BACK","STAR_LOOP_ENTRY","PLUS_LOOP_BACK","af","CHANNEL","CUSTOM","MODE","POP_MODE","PUSH_MODE","TYPE","./ATNDeserializationOptions","./ATNType","./LexerAction","./Transition","27","DFAState","ATNSimulator","ERROR","./../dfa/DFAState","./ATNConfigSet","28","INVALID_STATE_NUMBER","stateType","serializationNames","isNonGreedyExitState","29","30","LexerActionExecutor","resetSimState","sim","dfaState","SimState","startIndex","prevAccept","dfa_debug","MIN_DFA_EDGE","MAX_DFA_EDGE","match_calls","copyState","simulator","s0","matchATN","execATN","old_mode","s0_closure","computeStartState","suppressEdge","next","addDFAState","predict","toLexerString","ds0","isAcceptState","captureSimState","getExistingTargetState","computeTargetState","failOrAccept","edges","reach","getReachableConfigSet","items","addDFAEdge","prediction","closure","skipAlt","cfg","currentAltReachedAcceptState","getTokenName","treatEofAsEpsilon","getReachableTarget","fixOffsetBeforeMatch","charPos","execute","matches","initialContext","speculative","getEpsilonTarget","serializationType","evaluatePredicate","append","savedcolumn","savedLine","cfgs","proposed","firstConfigWithRuleStopState","getDFA","tt","./../Lexer","./../error/Errors","./ATNConfig","./ATNSimulator","./LexerActionExecutor","31","LexerAction","action","isPositionDependent","LexerIndexedCustomAction","32","updatedLexerActions","requiresSeek","stopIndex","numActions","33","PredPrediction","PredictionMode","predictionMode","LL","_startIndex","_outerContext","_dfa","debug_closure","debug_add","debug_list_atn_decisions","retry_debug","getLookaheadName","precedenceDfa","getPrecedenceStartState","atnStartState","applyPrecedenceFilter","setPrecedenceStartState","previousD","D","noViableAlt","getSynValidOrSemInvalidAltThatFinishedDecisionEntryRule","requiresFullContext","SLL","predicates","conflictIndex","evalSemanticContext","reportAttemptingFullContext","execATNWithFullContext","alts","reportAmbiguity","computeReachSet","altSubSets","predictedAlt","getUniqueAlt","getConflictingAltSubsets","allSubsetsConflict","getConflictingAlts","hasSLLConflictTerminatingPrediction","predicateDFAState","decisionState","nalts","altsToCollectPredsFrom","getConflictingAltsOrUniqueAlt","altToPred","getPredsForAmbigAlts","getPredicatePredictions","foundExactAmbig","resolvesToJustOneViableAlt","LL_EXACT_AMBIG_DETECTION","allSubsetsEqual","getSingleViableAlt","reportContextSensitivity","intermediate","skippedStopStates","closureBusy","removeAllConfigsNotInRuleStopState","hasConfigInRuleStopState","lookToEndOfRule","allConfigsInRuleStopStates","endOfRuleState","updatedContext","statesFromAlt1","configSet","evalPrecedence","ambigAlts","orContext","nPredAlts","pred","pairs","containsPredicate","splitAccordingToSemanticValidity","semValidConfigs","semInvalidConfigs","getAltThatFinishedDecisionEntryRule","succeeded","failed","predPredictions","complete","predictions","predicateEvaluationResult","collectPredicates","closureCheckingStopState","parms","getRuleName","closure_","canDropLoopEntryEdgeInLeftRecursiveRule","continueCollecting","newDepth","numCtxs","blockEndStateNum","blockEndState","returnStateNumber","returnStateTarget","ruleTransition","precedenceTransition","predTransition","actionTransition","pt","currentPosition","predSucceeds","newSemCtx","getPredicate","andContext","isCtxDependent","altsets","getAlts","dumpDeadEndConfigs","nvae","decs","getDeadEndConfigs","exact","./../ParserRuleContext","./../RuleContext","./PredictionMode","34","dup","hasConflictingAltSet","hasStateAssociatedWithOneAlt","hasNonConflictingAltSet","all","configToAlts","getStateToAltMap","minAlt","35","Predicate","PrecedencePredicate","AND","operands","opnds","reduced","precedencePredicates","filterPrecedencePredicates","OR","compareTo","differs","evaluated","36","label_","makeLabel","ruleStart","serializationTypes","minVocabSymbol","maxVocabSymbol","37","./ATNDeserializer","./LexerATNSimulator","./ParserATNSimulator","38","DFASerializer","LexerDFASerializer","precedenceState","_states","setPrecedenceDfa","DFAStatesSet","sortedStates","../atn/ATNState","./../atn/ATNConfigSet","./DFASerializer","./DFAState","39","buf","getStateString","getEdgeLabel","baseStateStr","40","getAltSet","41","./DFA","42","DiagnosticErrorListener","exactOnly","recognizer","getDecisionDescription","reportedAlts","./ErrorListener","43","delegates","offendingSymbol","44","Errors","InputMismatchException","ParseCancellationException","ErrorStrategy","errorRecoveryMode","lastErrorIndex","lastErrorStates","BailErrorStrategy","endErrorCondition","beginErrorCondition","reportNoViableAlternative","reportInputMismatch","reportFailedPredicate","getMessage","followSet","getErrorRecoverySet","consumeUntil","la","singleTokenDeletion","reportUnwantedToken","expecting","whatFollowsLoopIterationOrRule","startToken","escapeWSAndQuote","reportMissingToken","matchedSymbol","singleTokenInsertion","getMissingSymbol","currentSymbolType","nextTokenType","currentSymbol","expectedTokenType","tokenText","current","lookback","recoverSet","follow","./../atn/ATNState","./Errors","45","captureStackTrace","offendingState","deadEndConfigs","predicate","formatMessage","predicateIndex","./../atn/Transition","46","./DiagnosticErrorListener","./ErrorStrategy","47","codepointat","fromcodepoint","./CharStreams","./CommonTokenStream","./FileStream","./Parser","./ParserRuleContext","./atn/index","./dfa/index","./error/index","./tree/index","48","position","TypeError","string","second","object","$defineProperty","configurable","writable","49","_","highSurrogate","lowSurrogate","codeUnits","isFinite","RangeError","stringFromCharCode","50","SyntaxTree","ParseTree","ParseTreeVisitor","visit","getSymbol","../Utils.js","51","getNodeText","getChildren","list","getAncestors","ancestors","findAllTokenNodes","findAllNodes","findAllRuleNodes","findTokens","nodes","_findAllNodes","descendants","./../atn/ATN","./Tree","52","./Trees","53","54","cosh","sinh","parser_exit","SyntaxError","logHypot","_a","_b","plus","minus","sign","sub","mul","div","loh","expm1","limit","xx","cosm1","tan","cot","sec","asin","t1","t2","atan","Infinity","acot","asec","acsc","tanh","coth","csch","sech","asinh","acosh","atanh","noIM","oneMinus","onePlus","acoth","acsch","asech","inverse","conjugate","neg","ceil","places","ret","toVector","valueOf","isZero","isInfinite","E","NaN","55","globalScope","Decimal","inexact","noConflict","quadrant","EXP_LIMIT","MAX_DIGITS","NUMERALS","LN10","DEFAULTS","rounding","modulo","toExpNeg","toExpPos","minE","maxE","crypto","decimalError","invalidArgument","precisionLimitExceeded","cryptoUnavailable","mathfloor","mathpow","isBinary","isHex","isOctal","isDecimal","BASE","LOG_BASE","LN10_PRECISION","PI_PRECISION","P","digitsToString","ws","indexOfLastWord","getZeroString","checkInt32","checkRoundingDigits","rm","repeating","di","rd","convertBase","baseIn","baseOut","arrL","strL","absoluteValue","finalise","comparedTo","cmp","xdL","ydL","xd","yd","xs","ys","cosine","pr","Ctor","sd","tinyPow","taylorSeries","times","cos2x","toLessThanHalfPi","cubeRoot","cbrt","rep","t3","t3plusx","toExponential","eq","dp","dividedBy","dividedToIntegerBy","divToInt","greaterThan","greaterThanOrEqualTo","gte","hyperbolicCosine","one","cosh2_x","d8","hyperbolicSine","sinh2_x","d5","d16","d20","hyperbolicTangent","inverseCosine","halfPi","isNeg","getPi","inverseHyperbolicCosine","lte","ln","inverseHyperbolicSine","inverseHyperbolicTangent","wpr","xsd","inverseSine","inverseTangent","px","x2","isInt","isNegative","isPositive","isPos","lessThan","lt","lessThanOrEqualTo","logarithm","isBase10","denominator","inf","naturalLogarithm","getLn10","xe","xLTy","getBase10Exponent","mod","naturalExponential","negated","carry","getPrecision","sine","sin2_x","squareRoot","tangent","rL","toBinary","toStringBinary","toDecimalPlaces","toDP","finiteToString","toFraction","maxD","d0","d1","d2","n0","n1","toHexadecimal","toHex","toNearest","toNumber","toOctal","toPower","yn","intPow","toPrecision","toSignificantDigits","toSD","truncated","trunc","toJSON","logBase","prod","prodL","qd","rem","remL","rem0","xi","xL","yd0","yL","yz","multiplyInteger","compare","aL","bL","isTruncated","digits","roundUp","xdi","isExp","nonFiniteToString","zs","truncate","isOdd","maxOrMin","ltgt","guard","sum","c0","numerator","x1","parseDecimal","parseOther","divisor","isFloat","test","isHyperbolic","useDefaults","defaults","ps","getRandomValues","randomBytes","hypot","isDecimalInstance","log10","Uint32Array","copy","ROUND_UP","ROUND_DOWN","ROUND_CEIL","ROUND_FLOOR","ROUND_HALF_UP","ROUND_HALF_DOWN","ROUND_HALF_EVEN","ROUND_HALF_CEIL","ROUND_HALF_FLOOR","EUCLID","Symbol","iterator","for","toStringTag","56","_extends","assign","defaultEscapes","{","}","\\","#","$","%","&","^","~","formatEscapes","–","—"," ","\t","\r\n","\n","defaultEscapeMapFn","_ref","_ref$preserveFormatti","preserveFormatting","_ref$escapeMapFn","escapeMapFn","runningStr","escapes","escapeKeys","specialCharFound","forEach","_loop","57","createError","errorConstructor","IntermediateInheritor","DivisionByZero","Fraction","InvalidParameter","throwInvalidParam","p1","p2","B","C","N","cycleStart","rem1","rem2","modpow","gcd","lcm","simplify","eps","cont","divisible","excludeWhole","whole","toLatex","toContinued","cycLen","cycleLen","cycOff","58","naturalSort","insensitive","oFxNcL","oFyNcL","dre","hre","ore","xN","yN","xD","yD","cLoc","numS","59","createVersion","createUppercaseE","createUppercasePi","createI","createSQRT2","createSQRT1_2","createLOG10E","createLOG2E","createLN10","createLN2","createPhi","createE","createTau","createPi","createNaN","createInfinity","createNull","createFalse","createTrue","_version","_constants","_number","recreateFactory","BigNumber","number","_ref2","_ref3","createBigNumberPi","_ref4","createBigNumberTau","tau","_ref5","createBigNumberE","_ref6","createBigNumberPhi","_ref7","LN2","_ref8","_ref9","LOG2E","_ref10","LOG10E","_ref11","SQRT1_2","_ref12","SQRT2","_ref13","I","_ref14","_ref15","dependencies","recreateOnConfigChange","./plain/number","./utils/bignumber/constants","./utils/factory","./version","60","DEFAULT_CONFIG","epsilon","predictable","randomSeed","61","_typeof","_object","emitter","__esModule","default","_getRequireWildcardCache","has","newObj","hasPropertyDescriptor","getOwnPropertyDescriptor","desc","_interopRequireWildcard","_import","_config","_is","_array","_log","_ArgumentsError","_DimensionError","_IndexError","_config2","WeakMap","factories","configInternal","mixin","isNumber","isComplex","isBigNumber","isFraction","isUnit","isString","isMatrix","isCollection","isDenseMatrix","isSparseMatrix","isRange","isIndex","isBoolean","isResultSet","isHelp","isFunction","isDate","isRegExp","isObject","isNull","isUndefined","isAccessorNode","isArrayNode","isAssignmentNode","isBlockNode","isConditionalNode","isFunctionAssignmentNode","isIndexNode","isNode","isObjectNode","isOperatorNode","isParenthesisNode","isRangeNode","isChain","configFactory","mathWithTransform","legacyFactories","legacyInstances","importedFactories","internalImport","importFactory","_len","_key","typed","isFactory","firstProperty","isLegacyFactory","warn","instance","on","meta","override","deepFlatten","fullName","parts","initial","last","traverse","lazy","warnOnce","ArgumentsError","DimensionError","IndexError","../error/ArgumentsError","../error/DimensionError","../error/IndexError","../utils/array","../utils/factory","../utils/is","../utils/log","./../utils/emitter","./../utils/object","./../utils/polyfills","./config","./function/config","./function/import","62","prev","mapObject","validateOption","MATRIX_OPTIONS","NUMBER_OPTIONS","deepExtend","curr","changes","enumerable","findIndex","../../utils/object","../config","63","createDeprecatedImport","64","_importTransform","allowedInExpressions","_deleteTransform","isTypedFunction","fn","signatures","unsafe","legacyFactoryAllowedInExpressions","factoryAllowedInExpressions","isClass","isTransformFunctionFactory","isTransformFunction","docs","json","chain","flatValues","flattenImports","existingTransform","namespace","resolver","silent","_importLegacyFactory","_name","flatName","stripOptionalNotation","dependency","classes","_importFactory","wrap","wrapper","_wrap","signature","hasTypedFunctionSignature","_defineProperty","../../error/ArgumentsError","../../utils/array","../../utils/factory","../../utils/is","../../utils/log","65","createTyped","_typedFunction","_createTyped2","DenseMatrix","conversions","from","convert","throwNoBignumber","throwNoComplex","throwNoFraction","throwNoMatrix","../../utils/number","typed-function","66","allFactories","../factoriesAny","67","freeze","../core/config","../core/function/config","68","_dependenciesTyped","typedDependencies","_dependenciesResultSet","ResultSetDependencies","_dependenciesBigNumberClass","BigNumberDependencies","_dependenciesComplexClass","ComplexDependencies","_dependenciesFractionClass","FractionDependencies","_dependenciesRangeClass","RangeDependencies","_dependenciesMatrixClass","MatrixDependencies","_dependenciesDenseMatrixClass","DenseMatrixDependencies","_dependenciesClone","cloneDependencies","_dependenciesIsInteger","isIntegerDependencies","_dependenciesIsNegative","isNegativeDependencies","_dependenciesIsNumeric","isNumericDependencies","_dependenciesHasNumericValue","hasNumericValueDependencies","_dependenciesIsPositive","isPositiveDependencies","_dependenciesIsZero","isZeroDependencies","_dependenciesIsNaN","isNaNDependencies","_dependenciesTypeOf","typeOfDependencies","_dependenciesDeprecatedTypeof","typeofDependencies","_dependenciesEqualScalar","equalScalarDependencies","_dependenciesSparseMatrixClass","SparseMatrixDependencies","_dependenciesNumber","numberDependencies","_dependenciesString","stringDependencies","_dependenciesBoolean","booleanDependencies","_dependenciesBignumber","bignumberDependencies","_dependenciesComplex","complexDependencies","_dependenciesFraction","fractionDependencies","_dependenciesMatrix","matrixDependencies","_dependenciesSplitUnit","splitUnitDependencies","_dependenciesUnaryMinus","unaryMinusDependencies","_dependenciesUnaryPlus","unaryPlusDependencies","_dependenciesAbs","absDependencies","_dependenciesApply","applyDependencies","_dependenciesAddScalar","addScalarDependencies","_dependenciesCbrt","cbrtDependencies","_dependenciesCeil","ceilDependencies","_dependenciesCube","cubeDependencies","_dependenciesExp","expDependencies","_dependenciesExpm","expm1Dependencies","_dependenciesFix","fixDependencies","_dependenciesFloor","floorDependencies","_dependenciesGcd","gcdDependencies","_dependenciesLcm","lcmDependencies","_dependenciesLog","log10Dependencies","_dependenciesLog2","log2Dependencies","_dependenciesMod","modDependencies","_dependenciesMultiplyScalar","multiplyScalarDependencies","_dependenciesMultiply","multiplyDependencies","_dependenciesNthRoot","nthRootDependencies","_dependenciesSign","signDependencies","_dependenciesSqrt","sqrtDependencies","_dependenciesSquare","squareDependencies","_dependenciesSubtract","subtractDependencies","_dependenciesXgcd","xgcdDependencies","_dependenciesDotMultiply","dotMultiplyDependencies","_dependenciesBitAnd","bitAndDependencies","_dependenciesBitNot","bitNotDependencies","_dependenciesBitOr","bitOrDependencies","_dependenciesBitXor","bitXorDependencies","_dependenciesArg","argDependencies","_dependenciesConj","conjDependencies","_dependenciesIm","imDependencies","_dependenciesRe","reDependencies","_dependenciesNot","notDependencies","_dependenciesOr","orDependencies","_dependenciesXor","xorDependencies","_dependenciesConcat","concatDependencies","_dependenciesColumn","columnDependencies","_dependenciesCross","crossDependencies","_dependenciesDiag","diagDependencies","_dependenciesEye","eyeDependencies","_dependenciesFilter","filterDependencies","_dependenciesFlatten","flattenDependencies","_dependenciesForEach","forEachDependencies","_dependenciesGetMatrixDataType","getMatrixDataTypeDependencies","_dependenciesIdentity","identityDependencies","_dependenciesKron","kronDependencies","_dependenciesMap","mapDependencies","_dependenciesOnes","onesDependencies","_dependenciesRange","rangeDependencies","_dependenciesReshape","reshapeDependencies","_dependenciesResize","resizeDependencies","_dependenciesRow","rowDependencies","_dependenciesSize","sizeDependencies","_dependenciesSqueeze","squeezeDependencies","_dependenciesSubset","subsetDependencies","_dependenciesTranspose","transposeDependencies","_dependenciesCtranspose","ctransposeDependencies","_dependenciesZeros","zerosDependencies","_dependenciesErf","erfDependencies","_dependenciesMode","modeDependencies","_dependenciesProd","prodDependencies","_dependenciesFormat","formatDependencies","_dependenciesPrint","printDependencies","_dependenciesTo","toDependencies","_dependenciesIsPrime","isPrimeDependencies","_dependenciesNumeric","numericDependencies","_dependenciesDivideScalar","divideScalarDependencies","_dependenciesPow","powDependencies","_dependenciesRound","roundDependencies","_dependenciesLog3","logDependencies","_dependenciesLog1p","log1pDependencies","_dependenciesNthRoots","nthRootsDependencies","_dependenciesDotPow","dotPowDependencies","_dependenciesDotDivide","dotDivideDependencies","_dependenciesLsolve","lsolveDependencies","_dependenciesUsolve","usolveDependencies","_dependenciesLeftShift","leftShiftDependencies","_dependenciesRightArithShift","rightArithShiftDependencies","_dependenciesRightLogShift","rightLogShiftDependencies","_dependenciesAnd","andDependencies","_dependenciesCompare","compareDependencies","_dependenciesCompareNatural","compareNaturalDependencies","_dependenciesCompareText","compareTextDependencies","_dependenciesEqual","equalDependencies","_dependenciesEqualText","equalTextDependencies","_dependenciesSmaller","smallerDependencies","_dependenciesSmallerEq","smallerEqDependencies","_dependenciesLarger","largerDependencies","_dependenciesLargerEq","largerEqDependencies","_dependenciesDeepEqual","deepEqualDependencies","_dependenciesUnequal","unequalDependencies","_dependenciesPartitionSelect","partitionSelectDependencies","_dependenciesSort","sortDependencies","_dependenciesMax","maxDependencies","_dependenciesMin","minDependencies","_dependenciesImmutableDenseMatrixClass","ImmutableDenseMatrixDependencies","_dependenciesIndexClass","IndexDependencies","_dependenciesFibonacciHeapClass","FibonacciHeapDependencies","_dependenciesSpaClass","SpaDependencies","_dependenciesUnitClass","UnitDependencies","_dependenciesUnitFunction","unitDependencies","_dependenciesSparse","sparseDependencies","_dependenciesCreateUnit","createUnitDependencies","_dependenciesAcos","acosDependencies","_dependenciesAcosh","acoshDependencies","_dependenciesAcot","acotDependencies","_dependenciesAcoth","acothDependencies","_dependenciesAcsc","acscDependencies","_dependenciesAcsch","acschDependencies","_dependenciesAsec","asecDependencies","_dependenciesAsech","asechDependencies","_dependenciesAsin","asinDependencies","_dependenciesAsinh","asinhDependencies","_dependenciesAtan","atanDependencies","_dependenciesAtan2","atan2Dependencies","_dependenciesAtanh","atanhDependencies","_dependenciesCos","cosDependencies","_dependenciesCosh","coshDependencies","_dependenciesCot","cotDependencies","_dependenciesCoth","cothDependencies","_dependenciesCsc","cscDependencies","_dependenciesCsch","cschDependencies","_dependenciesSec","secDependencies","_dependenciesSech","sechDependencies","_dependenciesSin","sinDependencies","_dependenciesSinh","sinhDependencies","_dependenciesTan","tanDependencies","_dependenciesTanh","tanhDependencies","_dependenciesSetCartesian","setCartesianDependencies","_dependenciesSetDifference","setDifferenceDependencies","_dependenciesSetDistinct","setDistinctDependencies","_dependenciesSetIntersect","setIntersectDependencies","_dependenciesSetIsSubset","setIsSubsetDependencies","_dependenciesSetMultiplicity","setMultiplicityDependencies","_dependenciesSetPowerset","setPowersetDependencies","_dependenciesSetSize","setSizeDependencies","_dependenciesSetSymDifference","setSymDifferenceDependencies","_dependenciesSetUnion","setUnionDependencies","_dependenciesAdd","addDependencies","_dependenciesHypot","hypotDependencies","_dependenciesNorm","normDependencies","_dependenciesDot","dotDependencies","_dependenciesTrace","traceDependencies","_dependenciesIndex","indexDependencies","_dependenciesNode","NodeDependencies","_dependenciesAccessorNode","AccessorNodeDependencies","_dependenciesArrayNode","ArrayNodeDependencies","_dependenciesAssignmentNode","AssignmentNodeDependencies","_dependenciesBlockNode","BlockNodeDependencies","_dependenciesConditionalNode","ConditionalNodeDependencies","_dependenciesConstantNode","ConstantNodeDependencies","_dependenciesFunctionAssignmentNode","FunctionAssignmentNodeDependencies","_dependenciesIndexNode","IndexNodeDependencies","_dependenciesObjectNode","ObjectNodeDependencies","_dependenciesOperatorNode","OperatorNodeDependencies","_dependenciesParenthesisNode","ParenthesisNodeDependencies","_dependenciesRangeNode","RangeNodeDependencies","_dependenciesRelationalNode","RelationalNodeDependencies","_dependenciesSymbolNode","SymbolNodeDependencies","_dependenciesFunctionNode","FunctionNodeDependencies","_dependenciesParse","parseDependencies","_dependenciesCompile","compileDependencies","_dependenciesEvaluate","evaluateDependencies","_dependenciesDeprecatedEval","evalDependencies","_dependenciesParserClass","ParserDependencies","_dependenciesParser","parserDependencies","_dependenciesLup","lupDependencies","_dependenciesQr","qrDependencies","_dependenciesSlu","sluDependencies","_dependenciesLusolve","lusolveDependencies","_dependenciesHelpClass","HelpDependencies","_dependenciesChainClass","ChainDependencies","_dependenciesHelp","helpDependencies","_dependenciesChain","chainDependencies","_dependenciesDet","detDependencies","_dependenciesInv","invDependencies","_dependenciesEigs","eigsDependencies","_dependenciesExpm2","expmDependencies","_dependenciesSqrtm","sqrtmDependencies","_dependenciesDivide","divideDependencies","_dependenciesDistance","distanceDependencies","_dependenciesIntersect","intersectDependencies","_dependenciesSum","sumDependencies","_dependenciesMean","meanDependencies","_dependenciesMedian","medianDependencies","_dependenciesMad","madDependencies","_dependenciesVariance","varianceDependencies","_dependenciesDeprecatedVar","varDependencies","_dependenciesQuantileSeq","quantileSeqDependencies","_dependenciesStd","stdDependencies","_dependenciesCombinations","combinationsDependencies","_dependenciesCombinationsWithRep","combinationsWithRepDependencies","_dependenciesGamma","gammaDependencies","_dependenciesFactorial","factorialDependencies","_dependenciesKldivergence","kldivergenceDependencies","_dependenciesMultinomial","multinomialDependencies","_dependenciesPermutations","permutationsDependencies","_dependenciesPickRandom","pickRandomDependencies","_dependenciesRandom","randomDependencies","_dependenciesRandomInt","randomIntDependencies","_dependenciesStirlingS","stirlingS2Dependencies","_dependenciesBellNumbers","bellNumbersDependencies","_dependenciesCatalan","catalanDependencies","_dependenciesComposition","compositionDependencies","_dependenciesSimplify","simplifyDependencies","_dependenciesDerivative","derivativeDependencies","_dependenciesRationalize","rationalizeDependencies","_dependenciesReviver","reviverDependencies","_dependenciesReplacer","replacerDependencies","_dependenciesE","eDependencies","_dependenciesUppercaseE","EDependencies","_dependenciesFalse","falseDependencies","_dependenciesI","iDependencies","_dependenciesInfinity","InfinityDependencies","_dependenciesLN","LN10Dependencies","_dependenciesLN2","LN2Dependencies","_dependenciesLOG10E","LOG10EDependencies","_dependenciesLOG2E","LOG2EDependencies","_dependenciesNaN","NaNDependencies","_dependenciesNull","nullDependencies","_dependenciesPhi","phiDependencies","_dependenciesPi","piDependencies","_dependenciesUppercasePi","PIDependencies","_dependenciesSQRT1_","SQRT1_2Dependencies","_dependenciesSQRT","SQRT2Dependencies","_dependenciesTau","tauDependencies","_dependenciesTrue","trueDependencies","_dependenciesVersion","versionDependencies","_dependenciesAtomicMass","atomicMassDependencies","_dependenciesAvogadro","avogadroDependencies","_dependenciesBohrMagneton","bohrMagnetonDependencies","_dependenciesBohrRadius","bohrRadiusDependencies","_dependenciesBoltzmann","boltzmannDependencies","_dependenciesClassicalElectronRadius","classicalElectronRadiusDependencies","_dependenciesConductanceQuantum","conductanceQuantumDependencies","_dependenciesCoulomb","coulombDependencies","_dependenciesDeuteronMass","deuteronMassDependencies","_dependenciesEfimovFactor","efimovFactorDependencies","_dependenciesElectricConstant","electricConstantDependencies","_dependenciesElectronMass","electronMassDependencies","_dependenciesElementaryCharge","elementaryChargeDependencies","_dependenciesFaraday","faradayDependencies","_dependenciesFermiCoupling","fermiCouplingDependencies","_dependenciesFineStructure","fineStructureDependencies","_dependenciesFirstRadiation","firstRadiationDependencies","_dependenciesGasConstant","gasConstantDependencies","_dependenciesGravitationConstant","gravitationConstantDependencies","_dependenciesGravity","gravityDependencies","_dependenciesHartreeEnergy","hartreeEnergyDependencies","_dependenciesInverseConductanceQuantum","inverseConductanceQuantumDependencies","_dependenciesKlitzing","klitzingDependencies","_dependenciesLoschmidt","loschmidtDependencies","_dependenciesMagneticConstant","magneticConstantDependencies","_dependenciesMagneticFluxQuantum","magneticFluxQuantumDependencies","_dependenciesMolarMass","molarMassDependencies","_dependenciesMolarMassC","molarMassC12Dependencies","_dependenciesMolarPlanckConstant","molarPlanckConstantDependencies","_dependenciesMolarVolume","molarVolumeDependencies","_dependenciesNeutronMass","neutronMassDependencies","_dependenciesNuclearMagneton","nuclearMagnetonDependencies","_dependenciesPlanckCharge","planckChargeDependencies","_dependenciesPlanckConstant","planckConstantDependencies","_dependenciesPlanckLength","planckLengthDependencies","_dependenciesPlanckMass","planckMassDependencies","_dependenciesPlanckTemperature","planckTemperatureDependencies","_dependenciesPlanckTime","planckTimeDependencies","_dependenciesProtonMass","protonMassDependencies","_dependenciesQuantumOfCirculation","quantumOfCirculationDependencies","_dependenciesReducedPlanckConstant","reducedPlanckConstantDependencies","_dependenciesRydberg","rydbergDependencies","_dependenciesSackurTetrode","sackurTetrodeDependencies","_dependenciesSecondRadiation","secondRadiationDependencies","_dependenciesSpeedOfLight","speedOfLightDependencies","_dependenciesStefanBoltzmann","stefanBoltzmannDependencies","_dependenciesThomsonCrossSection","thomsonCrossSectionDependencies","_dependenciesVacuumImpedance","vacuumImpedanceDependencies","_dependenciesWeakMixingAngle","weakMixingAngleDependencies","_dependenciesWienDisplacement","wienDisplacementDependencies","_dependenciesApplyTransform","applyTransformDependencies","_dependenciesColumnTransform","columnTransformDependencies","_dependenciesFilterTransform","filterTransformDependencies","_dependenciesForEachTransform","forEachTransformDependencies","_dependenciesIndexTransform","indexTransformDependencies","_dependenciesMapTransform","mapTransformDependencies","_dependenciesMaxTransform","maxTransformDependencies","_dependenciesMeanTransform","meanTransformDependencies","_dependenciesMinTransform","minTransformDependencies","_dependenciesRangeTransform","rangeTransformDependencies","_dependenciesRowTransform","rowTransformDependencies","_dependenciesSubsetTransform","subsetTransformDependencies","_dependenciesConcatTransform","concatTransformDependencies","_dependenciesStdTransform","stdTransformDependencies","_dependenciesSumTransform","sumTransformDependencies","_dependenciesVarianceTransform","varianceTransformDependencies","_allFactoriesAny","./allFactoriesAny.js","./dependenciesAny/dependenciesAbs.generated","./dependenciesAny/dependenciesAccessorNode.generated","./dependenciesAny/dependenciesAcos.generated","./dependenciesAny/dependenciesAcosh.generated","./dependenciesAny/dependenciesAcot.generated","./dependenciesAny/dependenciesAcoth.generated","./dependenciesAny/dependenciesAcsc.generated","./dependenciesAny/dependenciesAcsch.generated","./dependenciesAny/dependenciesAdd.generated","./dependenciesAny/dependenciesAddScalar.generated","./dependenciesAny/dependenciesAnd.generated","./dependenciesAny/dependenciesApply.generated","./dependenciesAny/dependenciesApplyTransform.generated","./dependenciesAny/dependenciesArg.generated","./dependenciesAny/dependenciesArrayNode.generated","./dependenciesAny/dependenciesAsec.generated","./dependenciesAny/dependenciesAsech.generated","./dependenciesAny/dependenciesAsin.generated","./dependenciesAny/dependenciesAsinh.generated","./dependenciesAny/dependenciesAssignmentNode.generated","./dependenciesAny/dependenciesAtan.generated","./dependenciesAny/dependenciesAtan2.generated","./dependenciesAny/dependenciesAtanh.generated","./dependenciesAny/dependenciesAtomicMass.generated","./dependenciesAny/dependenciesAvogadro.generated","./dependenciesAny/dependenciesBellNumbers.generated","./dependenciesAny/dependenciesBigNumberClass.generated","./dependenciesAny/dependenciesBignumber.generated","./dependenciesAny/dependenciesBitAnd.generated","./dependenciesAny/dependenciesBitNot.generated","./dependenciesAny/dependenciesBitOr.generated","./dependenciesAny/dependenciesBitXor.generated","./dependenciesAny/dependenciesBlockNode.generated","./dependenciesAny/dependenciesBohrMagneton.generated","./dependenciesAny/dependenciesBohrRadius.generated","./dependenciesAny/dependenciesBoltzmann.generated","./dependenciesAny/dependenciesBoolean.generated","./dependenciesAny/dependenciesCatalan.generated","./dependenciesAny/dependenciesCbrt.generated","./dependenciesAny/dependenciesCeil.generated","./dependenciesAny/dependenciesChain.generated","./dependenciesAny/dependenciesChainClass.generated","./dependenciesAny/dependenciesClassicalElectronRadius.generated","./dependenciesAny/dependenciesClone.generated","./dependenciesAny/dependenciesColumn.generated","./dependenciesAny/dependenciesColumnTransform.generated","./dependenciesAny/dependenciesCombinations.generated","./dependenciesAny/dependenciesCombinationsWithRep.generated","./dependenciesAny/dependenciesCompare.generated","./dependenciesAny/dependenciesCompareNatural.generated","./dependenciesAny/dependenciesCompareText.generated","./dependenciesAny/dependenciesCompile.generated","./dependenciesAny/dependenciesComplex.generated","./dependenciesAny/dependenciesComplexClass.generated","./dependenciesAny/dependenciesComposition.generated","./dependenciesAny/dependenciesConcat.generated","./dependenciesAny/dependenciesConcatTransform.generated","./dependenciesAny/dependenciesConditionalNode.generated","./dependenciesAny/dependenciesConductanceQuantum.generated","./dependenciesAny/dependenciesConj.generated","./dependenciesAny/dependenciesConstantNode.generated","./dependenciesAny/dependenciesCos.generated","./dependenciesAny/dependenciesCosh.generated","./dependenciesAny/dependenciesCot.generated","./dependenciesAny/dependenciesCoth.generated","./dependenciesAny/dependenciesCoulomb.generated","./dependenciesAny/dependenciesCreateUnit.generated","./dependenciesAny/dependenciesCross.generated","./dependenciesAny/dependenciesCsc.generated","./dependenciesAny/dependenciesCsch.generated","./dependenciesAny/dependenciesCtranspose.generated","./dependenciesAny/dependenciesCube.generated","./dependenciesAny/dependenciesDeepEqual.generated","./dependenciesAny/dependenciesDenseMatrixClass.generated","./dependenciesAny/dependenciesDeprecatedEval.generated","./dependenciesAny/dependenciesDeprecatedTypeof.generated","./dependenciesAny/dependenciesDeprecatedVar.generated","./dependenciesAny/dependenciesDerivative.generated","./dependenciesAny/dependenciesDet.generated","./dependenciesAny/dependenciesDeuteronMass.generated","./dependenciesAny/dependenciesDiag.generated","./dependenciesAny/dependenciesDistance.generated","./dependenciesAny/dependenciesDivide.generated","./dependenciesAny/dependenciesDivideScalar.generated","./dependenciesAny/dependenciesDot.generated","./dependenciesAny/dependenciesDotDivide.generated","./dependenciesAny/dependenciesDotMultiply.generated","./dependenciesAny/dependenciesDotPow.generated","./dependenciesAny/dependenciesE.generated","./dependenciesAny/dependenciesEfimovFactor.generated","./dependenciesAny/dependenciesEigs.generated","./dependenciesAny/dependenciesElectricConstant.generated","./dependenciesAny/dependenciesElectronMass.generated","./dependenciesAny/dependenciesElementaryCharge.generated","./dependenciesAny/dependenciesEqual.generated","./dependenciesAny/dependenciesEqualScalar.generated","./dependenciesAny/dependenciesEqualText.generated","./dependenciesAny/dependenciesErf.generated","./dependenciesAny/dependenciesEvaluate.generated","./dependenciesAny/dependenciesExp.generated","./dependenciesAny/dependenciesExpm.generated","./dependenciesAny/dependenciesExpm1.generated","./dependenciesAny/dependenciesEye.generated","./dependenciesAny/dependenciesFactorial.generated","./dependenciesAny/dependenciesFalse.generated","./dependenciesAny/dependenciesFaraday.generated","./dependenciesAny/dependenciesFermiCoupling.generated","./dependenciesAny/dependenciesFibonacciHeapClass.generated","./dependenciesAny/dependenciesFilter.generated","./dependenciesAny/dependenciesFilterTransform.generated","./dependenciesAny/dependenciesFineStructure.generated","./dependenciesAny/dependenciesFirstRadiation.generated","./dependenciesAny/dependenciesFix.generated","./dependenciesAny/dependenciesFlatten.generated","./dependenciesAny/dependenciesFloor.generated","./dependenciesAny/dependenciesForEach.generated","./dependenciesAny/dependenciesForEachTransform.generated","./dependenciesAny/dependenciesFormat.generated","./dependenciesAny/dependenciesFraction.generated","./dependenciesAny/dependenciesFractionClass.generated","./dependenciesAny/dependenciesFunctionAssignmentNode.generated","./dependenciesAny/dependenciesFunctionNode.generated","./dependenciesAny/dependenciesGamma.generated","./dependenciesAny/dependenciesGasConstant.generated","./dependenciesAny/dependenciesGcd.generated","./dependenciesAny/dependenciesGetMatrixDataType.generated","./dependenciesAny/dependenciesGravitationConstant.generated","./dependenciesAny/dependenciesGravity.generated","./dependenciesAny/dependenciesHartreeEnergy.generated","./dependenciesAny/dependenciesHasNumericValue.generated","./dependenciesAny/dependenciesHelp.generated","./dependenciesAny/dependenciesHelpClass.generated","./dependenciesAny/dependenciesHypot.generated","./dependenciesAny/dependenciesI.generated","./dependenciesAny/dependenciesIdentity.generated","./dependenciesAny/dependenciesIm.generated","./dependenciesAny/dependenciesImmutableDenseMatrixClass.generated","./dependenciesAny/dependenciesIndex.generated","./dependenciesAny/dependenciesIndexClass.generated","./dependenciesAny/dependenciesIndexNode.generated","./dependenciesAny/dependenciesIndexTransform.generated","./dependenciesAny/dependenciesInfinity.generated","./dependenciesAny/dependenciesIntersect.generated","./dependenciesAny/dependenciesInv.generated","./dependenciesAny/dependenciesInverseConductanceQuantum.generated","./dependenciesAny/dependenciesIsInteger.generated","./dependenciesAny/dependenciesIsNaN.generated","./dependenciesAny/dependenciesIsNegative.generated","./dependenciesAny/dependenciesIsNumeric.generated","./dependenciesAny/dependenciesIsPositive.generated","./dependenciesAny/dependenciesIsPrime.generated","./dependenciesAny/dependenciesIsZero.generated","./dependenciesAny/dependenciesKldivergence.generated","./dependenciesAny/dependenciesKlitzing.generated","./dependenciesAny/dependenciesKron.generated","./dependenciesAny/dependenciesLN10.generated","./dependenciesAny/dependenciesLN2.generated","./dependenciesAny/dependenciesLOG10E.generated","./dependenciesAny/dependenciesLOG2E.generated","./dependenciesAny/dependenciesLarger.generated","./dependenciesAny/dependenciesLargerEq.generated","./dependenciesAny/dependenciesLcm.generated","./dependenciesAny/dependenciesLeftShift.generated","./dependenciesAny/dependenciesLog.generated","./dependenciesAny/dependenciesLog10.generated","./dependenciesAny/dependenciesLog1p.generated","./dependenciesAny/dependenciesLog2.generated","./dependenciesAny/dependenciesLoschmidt.generated","./dependenciesAny/dependenciesLsolve.generated","./dependenciesAny/dependenciesLup.generated","./dependenciesAny/dependenciesLusolve.generated","./dependenciesAny/dependenciesMad.generated","./dependenciesAny/dependenciesMagneticConstant.generated","./dependenciesAny/dependenciesMagneticFluxQuantum.generated","./dependenciesAny/dependenciesMap.generated","./dependenciesAny/dependenciesMapTransform.generated","./dependenciesAny/dependenciesMatrix.generated","./dependenciesAny/dependenciesMatrixClass.generated","./dependenciesAny/dependenciesMax.generated","./dependenciesAny/dependenciesMaxTransform.generated","./dependenciesAny/dependenciesMean.generated","./dependenciesAny/dependenciesMeanTransform.generated","./dependenciesAny/dependenciesMedian.generated","./dependenciesAny/dependenciesMin.generated","./dependenciesAny/dependenciesMinTransform.generated","./dependenciesAny/dependenciesMod.generated","./dependenciesAny/dependenciesMode.generated","./dependenciesAny/dependenciesMolarMass.generated","./dependenciesAny/dependenciesMolarMassC12.generated","./dependenciesAny/dependenciesMolarPlanckConstant.generated","./dependenciesAny/dependenciesMolarVolume.generated","./dependenciesAny/dependenciesMultinomial.generated","./dependenciesAny/dependenciesMultiply.generated","./dependenciesAny/dependenciesMultiplyScalar.generated","./dependenciesAny/dependenciesNaN.generated","./dependenciesAny/dependenciesNeutronMass.generated","./dependenciesAny/dependenciesNode.generated","./dependenciesAny/dependenciesNorm.generated","./dependenciesAny/dependenciesNot.generated","./dependenciesAny/dependenciesNthRoot.generated","./dependenciesAny/dependenciesNthRoots.generated","./dependenciesAny/dependenciesNuclearMagneton.generated","./dependenciesAny/dependenciesNull.generated","./dependenciesAny/dependenciesNumber.generated","./dependenciesAny/dependenciesNumeric.generated","./dependenciesAny/dependenciesObjectNode.generated","./dependenciesAny/dependenciesOnes.generated","./dependenciesAny/dependenciesOperatorNode.generated","./dependenciesAny/dependenciesOr.generated","./dependenciesAny/dependenciesParenthesisNode.generated","./dependenciesAny/dependenciesParse.generated","./dependenciesAny/dependenciesParser.generated","./dependenciesAny/dependenciesParserClass.generated","./dependenciesAny/dependenciesPartitionSelect.generated","./dependenciesAny/dependenciesPermutations.generated","./dependenciesAny/dependenciesPhi.generated","./dependenciesAny/dependenciesPi.generated","./dependenciesAny/dependenciesPickRandom.generated","./dependenciesAny/dependenciesPlanckCharge.generated","./dependenciesAny/dependenciesPlanckConstant.generated","./dependenciesAny/dependenciesPlanckLength.generated","./dependenciesAny/dependenciesPlanckMass.generated","./dependenciesAny/dependenciesPlanckTemperature.generated","./dependenciesAny/dependenciesPlanckTime.generated","./dependenciesAny/dependenciesPow.generated","./dependenciesAny/dependenciesPrint.generated","./dependenciesAny/dependenciesProd.generated","./dependenciesAny/dependenciesProtonMass.generated","./dependenciesAny/dependenciesQr.generated","./dependenciesAny/dependenciesQuantileSeq.generated","./dependenciesAny/dependenciesQuantumOfCirculation.generated","./dependenciesAny/dependenciesRandom.generated","./dependenciesAny/dependenciesRandomInt.generated","./dependenciesAny/dependenciesRange.generated","./dependenciesAny/dependenciesRangeClass.generated","./dependenciesAny/dependenciesRangeNode.generated","./dependenciesAny/dependenciesRangeTransform.generated","./dependenciesAny/dependenciesRationalize.generated","./dependenciesAny/dependenciesRe.generated","./dependenciesAny/dependenciesReducedPlanckConstant.generated","./dependenciesAny/dependenciesRelationalNode.generated","./dependenciesAny/dependenciesReplacer.generated","./dependenciesAny/dependenciesReshape.generated","./dependenciesAny/dependenciesResize.generated","./dependenciesAny/dependenciesResultSet.generated","./dependenciesAny/dependenciesReviver.generated","./dependenciesAny/dependenciesRightArithShift.generated","./dependenciesAny/dependenciesRightLogShift.generated","./dependenciesAny/dependenciesRound.generated","./dependenciesAny/dependenciesRow.generated","./dependenciesAny/dependenciesRowTransform.generated","./dependenciesAny/dependenciesRydberg.generated","./dependenciesAny/dependenciesSQRT1_2.generated","./dependenciesAny/dependenciesSQRT2.generated","./dependenciesAny/dependenciesSackurTetrode.generated","./dependenciesAny/dependenciesSec.generated","./dependenciesAny/dependenciesSech.generated","./dependenciesAny/dependenciesSecondRadiation.generated","./dependenciesAny/dependenciesSetCartesian.generated","./dependenciesAny/dependenciesSetDifference.generated","./dependenciesAny/dependenciesSetDistinct.generated","./dependenciesAny/dependenciesSetIntersect.generated","./dependenciesAny/dependenciesSetIsSubset.generated","./dependenciesAny/dependenciesSetMultiplicity.generated","./dependenciesAny/dependenciesSetPowerset.generated","./dependenciesAny/dependenciesSetSize.generated","./dependenciesAny/dependenciesSetSymDifference.generated","./dependenciesAny/dependenciesSetUnion.generated","./dependenciesAny/dependenciesSign.generated","./dependenciesAny/dependenciesSimplify.generated","./dependenciesAny/dependenciesSin.generated","./dependenciesAny/dependenciesSinh.generated","./dependenciesAny/dependenciesSize.generated","./dependenciesAny/dependenciesSlu.generated","./dependenciesAny/dependenciesSmaller.generated","./dependenciesAny/dependenciesSmallerEq.generated","./dependenciesAny/dependenciesSort.generated","./dependenciesAny/dependenciesSpaClass.generated","./dependenciesAny/dependenciesSparse.generated","./dependenciesAny/dependenciesSparseMatrixClass.generated","./dependenciesAny/dependenciesSpeedOfLight.generated","./dependenciesAny/dependenciesSplitUnit.generated","./dependenciesAny/dependenciesSqrt.generated","./dependenciesAny/dependenciesSqrtm.generated","./dependenciesAny/dependenciesSquare.generated","./dependenciesAny/dependenciesSqueeze.generated","./dependenciesAny/dependenciesStd.generated","./dependenciesAny/dependenciesStdTransform.generated","./dependenciesAny/dependenciesStefanBoltzmann.generated","./dependenciesAny/dependenciesStirlingS2.generated","./dependenciesAny/dependenciesString.generated","./dependenciesAny/dependenciesSubset.generated","./dependenciesAny/dependenciesSubsetTransform.generated","./dependenciesAny/dependenciesSubtract.generated","./dependenciesAny/dependenciesSum.generated","./dependenciesAny/dependenciesSumTransform.generated","./dependenciesAny/dependenciesSymbolNode.generated","./dependenciesAny/dependenciesTan.generated","./dependenciesAny/dependenciesTanh.generated","./dependenciesAny/dependenciesTau.generated","./dependenciesAny/dependenciesThomsonCrossSection.generated","./dependenciesAny/dependenciesTo.generated","./dependenciesAny/dependenciesTrace.generated","./dependenciesAny/dependenciesTranspose.generated","./dependenciesAny/dependenciesTrue.generated","./dependenciesAny/dependenciesTypeOf.generated","./dependenciesAny/dependenciesTyped.generated","./dependenciesAny/dependenciesUnaryMinus.generated","./dependenciesAny/dependenciesUnaryPlus.generated","./dependenciesAny/dependenciesUnequal.generated","./dependenciesAny/dependenciesUnitClass.generated","./dependenciesAny/dependenciesUnitFunction.generated","./dependenciesAny/dependenciesUppercaseE.generated","./dependenciesAny/dependenciesUppercasePi.generated","./dependenciesAny/dependenciesUsolve.generated","./dependenciesAny/dependenciesVacuumImpedance.generated","./dependenciesAny/dependenciesVariance.generated","./dependenciesAny/dependenciesVarianceTransform.generated","./dependenciesAny/dependenciesVersion.generated","./dependenciesAny/dependenciesWeakMixingAngle.generated","./dependenciesAny/dependenciesWienDisplacement.generated","./dependenciesAny/dependenciesXgcd.generated","./dependenciesAny/dependenciesXor.generated","./dependenciesAny/dependenciesZeros.generated","69","_factoriesAny","createAbs","../../factoriesAny.js","./dependenciesTyped.generated","70","createAccessorNode","./dependenciesNode.generated","./dependenciesSubset.generated","71","createAcos","./dependenciesComplexClass.generated","72","createAcosh","73","createAcot","./dependenciesBigNumberClass.generated","74","createAcoth","75","createAcsc","76","createAcsch","77","createAdd","./dependenciesAddScalar.generated","./dependenciesDenseMatrixClass.generated","./dependenciesEqualScalar.generated","./dependenciesMatrix.generated","./dependenciesSparseMatrixClass.generated","78","createAddScalar","79","createAnd","./dependenciesNot.generated","./dependenciesZeros.generated","80","createApply","./dependenciesIsInteger.generated","81","createApplyTransform","82","createArg","83","createArrayNode","84","createAsec","85","createAsech","86","createAsin","87","createAsinh","88","createAssignmentNode","89","createAtan","90","createAtan2","91","createAtanh","92","createAtomicMass","./dependenciesUnitClass.generated","93","createAvogadro","94","createBellNumbers","./dependenciesIsNegative.generated","./dependenciesStirlingS2.generated","95","createBigNumberClass","96","createBignumber","97","createBitAnd","98","createBitNot","99","createBitOr","100","createBitXor","101","createBlockNode","./dependenciesResultSet.generated","102","createBohrMagneton","103","createBohrRadius","104","createBoltzmann","105","createBoolean","106","createCatalan","./dependenciesCombinations.generated","./dependenciesDivideScalar.generated","./dependenciesMultiplyScalar.generated","107","createCbrt","./dependenciesFractionClass.generated","./dependenciesUnaryMinus.generated","108","createCeil","./dependenciesRound.generated","109","createChain","./dependenciesChainClass.generated","110","createChainClass","111","createClassicalElectronRadius","112","createClone","113","createColumn","./dependenciesIndexClass.generated","./dependenciesRange.generated","114","createColumnTransform","115","createCombinations","116","createCombinationsWithRep","117","createCompare","118","createCompareNatural","./dependenciesCompare.generated","119","createCompareText","120","createCompile","./dependenciesParse.generated","121","createComplex","122","createComplexClass","123","createComposition","./dependenciesIsPositive.generated","./dependenciesLarger.generated","124","createConcat","125","createConcatTransform","126","createConditionalNode","127","createConductanceQuantum","128","createConj","129","createConstantNode","130","createCos","131","createCosh","132","createCot","133","createCoth","134","createCoulomb","135","createCreateUnit","136","createCross","./dependenciesMultiply.generated","./dependenciesSubtract.generated","137","createCsc","138","createCsch","139","createCtranspose","./dependenciesConj.generated","./dependenciesTranspose.generated","140","createCube","141","createDeepEqual","./dependenciesEqual.generated","142","createDenseMatrixClass","./dependenciesMatrixClass.generated","143","createDeprecatedEval","./dependenciesEvaluate.generated","144","createDeprecatedTypeof","145","createDeprecatedVar","./dependenciesVariance.generated","146","createDerivative","./dependenciesConstantNode.generated","./dependenciesFunctionNode.generated","./dependenciesIsZero.generated","./dependenciesNumeric.generated","./dependenciesOperatorNode.generated","./dependenciesParenthesisNode.generated","./dependenciesSimplify.generated","./dependenciesSymbolNode.generated","147","createDet","./dependenciesLup.generated","148","createDeuteronMass","149","createDiag","150","createDistance","./dependenciesAbs.generated","./dependenciesSqrt.generated","151","createDivide","./dependenciesInv.generated","152","createDivideScalar","153","createDot","./dependenciesAdd.generated","154","createDotDivide","155","createDotMultiply","156","createDotPow","./dependenciesPow.generated","157","158","createEfimovFactor","159","createEigs","./dependenciesAtan.generated","./dependenciesBignumber.generated","./dependenciesCos.generated","./dependenciesSin.generated","160","createElectricConstant","161","createElectronMass","162","createElementaryCharge","163","createEqual","164","createEqualScalar","165","createEqualText","./dependenciesCompareText.generated","166","createErf","167","createEvaluate","168","createExp","169","createExpm","./dependenciesIdentity.generated","170","createExpm1","171","createEye","172","createFactorial","./dependenciesGamma.generated","173","174","createFaraday","175","createFermiCoupling","176","createFibonacciHeapClass","./dependenciesSmaller.generated","177","createFilter","178","createFilterTransform","179","createFineStructure","180","createFirstRadiation","181","createFix","./dependenciesCeil.generated","./dependenciesFloor.generated","182","createFlatten","183","createFloor","184","createForEach","185","createForEachTransform","186","createFormat","187","createFraction","188","createFractionClass","189","createFunctionAssignmentNode","190","createFunctionNode","191","createGamma","192","createGasConstant","193","createGcd","194","createGetMatrixDataType","195","createGravitationConstant","196","createGravity","197","createHartreeEnergy","198","createHasNumericValue","./dependenciesIsNumeric.generated","199","createHelp","./dependenciesHelpClass.generated","200","createHelpClass","201","createHypot","202","203","createIdentity","204","createIm","205","createImmutableDenseMatrixClass","206","createIndex","207","createIndexClass","./dependenciesImmutableDenseMatrixClass.generated","208","createIndexNode","./dependenciesRangeClass.generated","./dependenciesSize.generated","209","createIndexTransform","210","211","createIntersect","212","createInv","./dependenciesDet.generated","213","createInverseConductanceQuantum","214","createIsInteger","215","createIsNaN","216","createIsNegative","217","createIsNumeric","218","createIsPositive","219","createIsPrime","220","createIsZero","221","createKldivergence","./dependenciesDivide.generated","./dependenciesDotDivide.generated","./dependenciesLog.generated","./dependenciesSum.generated","222","createKlitzing","223","createKron","224","225","226","227","228","createLarger","229","createLargerEq","230","createLcm","231","createLeftShift","232","createLog","233","createLog10","234","createLog1p","235","createLog2","236","createLoschmidt","237","createLsolve","238","createLup","./dependenciesSpaClass.generated","239","createLusolve","./dependenciesLsolve.generated","./dependenciesSlu.generated","./dependenciesUsolve.generated","240","createMad","./dependenciesMap.generated","./dependenciesMedian.generated","241","createMagneticConstant","242","createMagneticFluxQuantum","243","createMap","244","createMapTransform","245","createMatrix","246","createMatrixClass","247","createMax","248","createMaxTransform","249","createMean","250","createMeanTransform","251","createMedian","./dependenciesPartitionSelect.generated","252","createMin","253","createMinTransform","254","createMod","255","createMode","./dependenciesIsNaN.generated","256","createMolarMass","257","createMolarMassC12","258","createMolarPlanckConstant","259","createMolarVolume","260","createMultinomial","./dependenciesFactorial.generated","261","createMultiply","262","createMultiplyScalar","263","264","createNeutronMass","265","createNode","266","createNorm","267","createNot","268","createNthRoot","269","createNthRoots","270","createNuclearMagneton","271","272","createNumber","273","createNumeric","./dependenciesFraction.generated","./dependenciesNumber.generated","274","createObjectNode","275","createOnes","276","createOperatorNode","277","createOr","278","createParenthesisNode","279","createParse","./dependenciesAccessorNode.generated","./dependenciesArrayNode.generated","./dependenciesAssignmentNode.generated","./dependenciesBlockNode.generated","./dependenciesConditionalNode.generated","./dependenciesFunctionAssignmentNode.generated","./dependenciesIndexNode.generated","./dependenciesObjectNode.generated","./dependenciesRangeNode.generated","./dependenciesRelationalNode.generated","280","createParser","./dependenciesParserClass.generated","281","createParserClass","282","createPartitionSelect","283","createPermutations","284","285","286","createPickRandom","287","createPlanckCharge","288","createPlanckConstant","289","createPlanckLength","290","createPlanckMass","291","createPlanckTemperature","292","createPlanckTime","293","createPow","294","createPrint","295","createProd","296","createProtonMass","297","createQr","./dependenciesComplex.generated","./dependenciesSign.generated","298","createQuantileSeq","299","createQuantumOfCirculation","300","createRandom","301","createRandomInt","302","createRange","./dependenciesLargerEq.generated","./dependenciesSmallerEq.generated","303","createRangeClass","304","createRangeNode","305","createRangeTransform","306","createRationalize","307","createRe","308","createReducedPlanckConstant","309","createRelationalNode","310","createReplacer","311","createReshape","312","createResize","313","createResultSet","314","createReviver","315","createRightArithShift","316","createRightLogShift","317","createRound","318","createRow","319","createRowTransform","320","createRydberg","321","322","323","createSackurTetrode","324","createSec","325","createSech","326","createSecondRadiation","327","createSetCartesian","./dependenciesCompareNatural.generated","328","createSetDifference","329","createSetDistinct","330","createSetIntersect","331","createSetIsSubset","332","createSetMultiplicity","333","createSetPowerset","334","createSetSize","335","createSetSymDifference","./dependenciesConcat.generated","./dependenciesSetDifference.generated","336","createSetUnion","./dependenciesSetIntersect.generated","./dependenciesSetSymDifference.generated","337","createSign","338","createSimplify","339","createSin","340","createSinh","341","createSize","342","createSlu","343","createSmaller","344","createSmallerEq","345","createSort","346","createSpaClass","./dependenciesFibonacciHeapClass.generated","347","createSparse","348","createSparseMatrixClass","349","createSpeedOfLight","350","createSplitUnit","351","createSqrt","352","createSqrtm","./dependenciesMax.generated","353","createSquare","354","createSqueeze","355","createStd","356","createStdTransform","357","createStefanBoltzmann","358","createStirlingS2","359","createString","360","createSubset","361","createSubsetTransform","362","createSubtract","363","createSum","364","createSumTransform","365","createSymbolNode","366","createTan","367","createTanh","368","369","createThomsonCrossSection","370","createTo","371","createTrace","372","createTranspose","373","374","createTypeOf","375","376","createUnaryMinus","377","createUnaryPlus","378","createUnequal","379","createUnitClass","./dependenciesFix.generated","./dependenciesFormat.generated","380","createUnitFunction","381","./dependenciesE.generated","382","./dependenciesPi.generated","383","createUsolve","384","createVacuumImpedance","385","createVariance","./dependenciesApply.generated","386","createVarianceTransform","387","388","createWeakMixingAngle","389","createWienDisplacement","390","createXgcd","391","createXor","392","createZeros","393","deprecatedTypeof","deprecatedVar","deprecatedImport","deprecatedEval","_eval","_deprecatedImport","_variance","_typeOf","_pureFunctionsAny","_impureFunctionsAny","variance","typeOf","createDeprecatedProperties","Chain","SparseMatrix","Spa","FibonacciHeap","ImmutableDenseMatrix","Index","Range","ResultSet","Unit","Help","AccessorNode","ArrayNode","AssignmentNode","BlockNode","ConditionalNode","ConstantNode","IndexNode","FunctionAssignmentNode","FunctionNode","Node","ObjectNode","OperatorNode","ParenthesisNode","RangeNode","RelationalNode","SymbolNode","reviver","../core/function/deprecatedImport","../expression/function/eval","../function/statistics/variance","../function/utils/typeOf","../utils/object","./impureFunctionsAny.generated","./pureFunctionsAny.generated","394","_embeddedDocs","embeddedDocs","derivative","help","rationalize","_configReadonly","numeric","bignumber","fraction","equal","typeof","eye","false","_false","null","_null","true","_true","replacer","_NaN","efimovFactor","fineStructure","sackurTetrode","weakMixingAngle","_Infinity","isNumeric","equalScalar","boolean","splitUnit","unaryPlus","cube","multiplyScalar","square","bitNot","not","filter","erf","format","isPrime","combinations","pickRandom","randomInt","hasNumericValue","unaryMinus","addScalar","getMatrixDataType","combinationsWithRep","nthRoot","xgcd","bitAnd","bitXor","diag","identity","ones","reshape","leftShift","rightLogShift","compareText","smaller","larger","unequal","sparse","composition","dotMultiply","flatten","resize","squeeze","dotPow","rightArithShift","compareNatural","equalText","largerEq","partitionSelect","setSize","norm","quantileSeq","gamma","bitOr","kron","transpose","smallerEq","dot","factorial","permutations","cross","setCartesian","setDistinct","setIsSubset","setPowerset","fix","divideScalar","nthRoots","lsolve","deepEqual","setDifference","setMultiplicity","lup","slu","distance","stirlingS2","catalan","xor","dotDivide","createUnit","setSymDifference","qr","inv","expm","mean","std","multinomial","atomicMass","bohrMagneton","boltzmann","conductanceQuantum","deuteronMass","electronMass","faraday","firstRadiation","gravitationConstant","hartreeEnergy","klitzing","magneticConstant","molarMass","molarPlanckConstant","neutronMass","planckCharge","planckLength","planckTemperature","protonMass","reducedPlanckConstant","secondRadiation","stefanBoltzmann","vacuumImpedance","usolve","setIntersect","lusolve","eigs","intersect","var","bellNumbers","avogadro","classicalElectronRadius","electricConstant","fermiCoupling","gravity","loschmidt","molarMassC12","nuclearMagneton","planckMass","quantumOfCirculation","speedOfLight","wienDisplacement","unit","sqrtm","kldivergence","bohrRadius","elementaryCharge","inverseConductanceQuantum","molarVolume","planckTime","thomsonCrossSection","log1p","median","gasConstant","planckConstant","setUnion","magneticFluxQuantum","eval","coulomb","mad","rydberg","createProxy","../expression/embeddedDocs/embeddedDocs","./configReadonly","395","_exportNames","_create","_typeChecks","_dependenciesAny","_deprecatedAny","../core/create","./dependenciesAny.generated","./deprecatedAny","./typeChecks","396","_boolean","397","398","isArgumentsError","399","actual","isDimensionError","400","isIndexError","401","_string","doc","category","syntax","examples","scope","expr","seealso","fromJSON","prop","../utils/string","402","_customs","isParser","getSafeProperty","getAll","extend","setSafeProperty","../utils/customs","403","InfinityDocs","404","LN10Docs","405","LN2Docs","406","LOG10EDocs","407","LOG2EDocs","408","NaNDocs","409","SQRT12Docs","410","SQRT2Docs","411","eDocs","412","falseDocs","413","iDocs","414","nullDocs","415","phiDocs","416","piDocs","417","tauDocs","418","trueDocs","419","versionDocs","420","bignumberDocs","421","booleanDocs","422","complexDocs","423","createUnitDocs","424","fractionDocs","425","indexDocs","426","matrixDocs","427","numberDocs","428","sparseDocs","429","splitUnitDocs","430","stringDocs","431","unitDocs","432","configDocs","433","importDocs","434","typedDocs","435","_bignumber","_isZero","_isPrime","_isPositive","_isNumeric","_hasNumericValue","_isNegative","_isInteger","_isNaN","_format","_clone","_to","_tanh","_tan","_sinh","_sech","_sec","_csch","_csc","_coth","_cot","_cosh","_cos","_atan","_atanh","_atan2","_asinh","_asin","_asech","_asec","_acsch","_acsc","_acoth","_acot","_acosh","_acos","_sum","_std","_quantileSeq","_prod","_min","_median","_mean","_max","_mad","_erf","_setUnion","_setSymDifference","_setSize","_setPowerset","_setMultiplicity","_setIsSubset","_setIntersect","_setDistinct","_setDifference","_setCartesian","_unequal","_smallerEq","_smaller","_largerEq","_larger","_equalText","_equal","_deepEqual","_compareText","_compareNatural","_compare","_randomInt","_random","_pickRandom","_permutations","_multinomial","_kldivergence","_gamma","_factorial","_combinations","_combinationsWithRep","_zeros","_transpose","_trace","_subset","_squeeze","_sort","_reshape","_resize","_range","_partitionSelect","_ones","_map","_kron","_inv","_forEach","_flatten","_filter","_identity","_getMatrixDataType","_dot","_diag","_det","_ctranspose","_cross","_concat","_xor","_or","_not","_and","_intersect","_distance","_help","_evaluate","_im","_re","_conj","_arg","_typed","_stirlingS","_composition","_catalan","_bellNumbers","_rightLogShift","_rightArithShift","_leftShift","_bitXor","_bitOr","_bitNot","_bitAnd","_xgcd","_unaryPlus","_unaryMinus","_square","_sqrtm","_sqrt","_sign","_round","_pow","_nthRoots","_nthRoot","_norm","_multiply","_mod","_log1p","_log2","_log3","_lcm","_hypot","_gcd","_floor","_fix","_expm","_expm2","_eigs","_exp","_dotMultiply","_dotDivide","_divide","_cube","_ceil","_cbrt","_add","_abs","_qr","_usolve","_slu","_rationalize","_simplify","_lup","_lsolve","_derivative","_tau","_SQRT","_SQRT1_","_phi","_pi","_LOG10E","_LOG2E","_LN","_LN2","_i","_e","_unit","_splitUnit","_sparse","_matrix","_construction","_fraction","_createUnit","_complex","_dotPow","_lusolve","_subtract","_sin","_numeric","_column","_row","derivativeDocs","lsolveDocs","lupDocs","lusolveDocs","simplifyDocs","rationalizeDocs","sluDocs","usolveDocs","qrDocs","absDocs","addDocs","cbrtDocs","ceilDocs","cubeDocs","divideDocs","dotDivideDocs","dotMultiplyDocs","dotPowDocs","expDocs","expmDocs","expm1Docs","fixDocs","floorDocs","gcdDocs","hypotDocs","lcmDocs","logDocs","log2Docs","log1pDocs","log10Docs","modDocs","multiplyDocs","normDocs","nthRootDocs","nthRootsDocs","powDocs","roundDocs","signDocs","sqrtDocs","sqrtmDocs","squareDocs","subtractDocs","unaryMinusDocs","unaryPlusDocs","xgcdDocs","bitAndDocs","bitNotDocs","bitOrDocs","bitXorDocs","leftShiftDocs","rightArithShiftDocs","rightLogShiftDocs","bellNumbersDocs","catalanDocs","compositionDocs","stirlingS2Docs","import","argDocs","conjDocs","reDocs","imDocs","evaluateDocs","helpDocs","distanceDocs","intersectDocs","andDocs","notDocs","orDocs","xorDocs","concatDocs","crossDocs","columnDocs","ctransposeDocs","detDocs","diagDocs","dotDocs","getMatrixDataTypeDocs","identityDocs","filterDocs","flattenDocs","forEachDocs","invDocs","eigsDocs","kronDocs","mapDocs","onesDocs","partitionSelectDocs","rangeDocs","resizeDocs","reshapeDocs","rowDocs","sizeDocs","sortDocs","squeezeDocs","subsetDocs","traceDocs","transposeDocs","zerosDocs","combinationsDocs","combinationsWithRepDocs","factorialDocs","gammaDocs","kldivergenceDocs","multinomialDocs","permutationsDocs","pickRandomDocs","randomDocs","randomIntDocs","compareDocs","compareNaturalDocs","compareTextDocs","deepEqualDocs","equalDocs","equalTextDocs","largerDocs","largerEqDocs","smallerDocs","smallerEqDocs","unequalDocs","setCartesianDocs","setDifferenceDocs","setDistinctDocs","setIntersectDocs","setIsSubsetDocs","setMultiplicityDocs","setPowersetDocs","setSizeDocs","setSymDifferenceDocs","setUnionDocs","erfDocs","madDocs","maxDocs","meanDocs","medianDocs","minDocs","modeDocs","prodDocs","quantileSeqDocs","stdDocs","sumDocs","varianceDocs","acosDocs","acoshDocs","acotDocs","acothDocs","acscDocs","acschDocs","asecDocs","asechDocs","asinDocs","asinhDocs","atanDocs","atanhDocs","atan2Docs","cosDocs","coshDocs","cotDocs","cothDocs","cscDocs","cschDocs","secDocs","sechDocs","sinDocs","sinhDocs","tanDocs","tanhDocs","toDocs","cloneDocs","formatDocs","isNaNDocs","isIntegerDocs","isNegativeDocs","isNumericDocs","hasNumericValueDocs","isPositiveDocs","isPrimeDocs","isZeroDocs","typeOfDocs","numericDocs","./constants/Infinity","./constants/LN10","./constants/LN2","./constants/LOG10E","./constants/LOG2E","./constants/NaN","./constants/SQRT1_2","./constants/SQRT2","./constants/e","./constants/false","./constants/i","./constants/null","./constants/phi","./constants/pi","./constants/tau","./constants/true","./constants/version","./construction","./construction/bignumber","./construction/boolean","./construction/complex","./construction/createUnit","./construction/fraction","./construction/matrix","./construction/number","./construction/sparse","./construction/splitUnit","./construction/string","./construction/unit","./core/config","./core/import","./core/typed","./function/algebra/derivative","./function/algebra/lsolve","./function/algebra/lup","./function/algebra/lusolve","./function/algebra/qr","./function/algebra/rationalize","./function/algebra/simplify","./function/algebra/slu","./function/algebra/usolve","./function/arithmetic/abs","./function/arithmetic/add","./function/arithmetic/cbrt","./function/arithmetic/ceil","./function/arithmetic/cube","./function/arithmetic/divide","./function/arithmetic/dotDivide","./function/arithmetic/dotMultiply","./function/arithmetic/dotPow","./function/arithmetic/exp","./function/arithmetic/expm","./function/arithmetic/expm1","./function/arithmetic/fix","./function/arithmetic/floor","./function/arithmetic/gcd","./function/arithmetic/hypot","./function/arithmetic/lcm","./function/arithmetic/log","./function/arithmetic/log10","./function/arithmetic/log1p","./function/arithmetic/log2","./function/arithmetic/mod","./function/arithmetic/multiply","./function/arithmetic/norm","./function/arithmetic/nthRoot","./function/arithmetic/nthRoots","./function/arithmetic/pow","./function/arithmetic/round","./function/arithmetic/sign","./function/arithmetic/sqrt","./function/arithmetic/sqrtm","./function/arithmetic/square","./function/arithmetic/subtract","./function/arithmetic/unaryMinus","./function/arithmetic/unaryPlus","./function/arithmetic/xgcd","./function/bitwise/bitAnd","./function/bitwise/bitNot","./function/bitwise/bitOr","./function/bitwise/bitXor","./function/bitwise/leftShift","./function/bitwise/rightArithShift","./function/bitwise/rightLogShift","./function/combinatorics/bellNumbers","./function/combinatorics/catalan","./function/combinatorics/composition","./function/combinatorics/stirlingS2","./function/complex/arg","./function/complex/conj","./function/complex/im","./function/complex/re","./function/expression/evaluate","./function/expression/help","./function/geometry/distance","./function/geometry/intersect","./function/logical/and","./function/logical/not","./function/logical/or","./function/logical/xor","./function/matrix/column","./function/matrix/concat","./function/matrix/cross","./function/matrix/ctranspose","./function/matrix/det","./function/matrix/diag","./function/matrix/dot","./function/matrix/eigs","./function/matrix/filter","./function/matrix/flatten","./function/matrix/forEach","./function/matrix/getMatrixDataType","./function/matrix/identity","./function/matrix/inv","./function/matrix/kron","./function/matrix/map","./function/matrix/ones","./function/matrix/partitionSelect","./function/matrix/range","./function/matrix/reshape","./function/matrix/resize","./function/matrix/row","./function/matrix/size","./function/matrix/sort","./function/matrix/squeeze","./function/matrix/subset","./function/matrix/trace","./function/matrix/transpose","./function/matrix/zeros","./function/probability/combinations","./function/probability/combinationsWithRep","./function/probability/factorial","./function/probability/gamma","./function/probability/kldivergence","./function/probability/multinomial","./function/probability/permutations","./function/probability/pickRandom","./function/probability/random","./function/probability/randomInt","./function/relational/compare","./function/relational/compareNatural","./function/relational/compareText","./function/relational/deepEqual","./function/relational/equal","./function/relational/equalText","./function/relational/larger","./function/relational/largerEq","./function/relational/smaller","./function/relational/smallerEq","./function/relational/unequal","./function/set/setCartesian","./function/set/setDifference","./function/set/setDistinct","./function/set/setIntersect","./function/set/setIsSubset","./function/set/setMultiplicity","./function/set/setPowerset","./function/set/setSize","./function/set/setSymDifference","./function/set/setUnion","./function/special/erf","./function/statistics/mad","./function/statistics/max","./function/statistics/mean","./function/statistics/median","./function/statistics/min","./function/statistics/mode","./function/statistics/prod","./function/statistics/quantileSeq","./function/statistics/std","./function/statistics/sum","./function/statistics/variance","./function/trigonometry/acos","./function/trigonometry/acosh","./function/trigonometry/acot","./function/trigonometry/acoth","./function/trigonometry/acsc","./function/trigonometry/acsch","./function/trigonometry/asec","./function/trigonometry/asech","./function/trigonometry/asin","./function/trigonometry/asinh","./function/trigonometry/atan","./function/trigonometry/atan2","./function/trigonometry/atanh","./function/trigonometry/cos","./function/trigonometry/cosh","./function/trigonometry/cot","./function/trigonometry/coth","./function/trigonometry/csc","./function/trigonometry/csch","./function/trigonometry/sec","./function/trigonometry/sech","./function/trigonometry/sin","./function/trigonometry/sinh","./function/trigonometry/tan","./function/trigonometry/tanh","./function/units/to","./function/utils/clone","./function/utils/format","./function/utils/hasNumericValue","./function/utils/isInteger","./function/utils/isNaN","./function/utils/isNegative","./function/utils/isNumeric","./function/utils/isPositive","./function/utils/isPrime","./function/utils/isZero","./function/utils/numeric","./function/utils/typeOf","436","437","438","439","440","441","442","443","444","445","446","447","448","449","450","451","452","453","454","455","456","457","458","459","460","461","462","463","464","465","466","467","468","469","470","471","472","473","474","475","476","477","478","479","480","481","482","483","484","485","486","487","488","489","490","491","492","493","494","495","496","497","498","499","500","501","502","503","504","505","506","507","508","509","510","511","512","513","514","515","516","517","518","519","520","521","522","523","524","525","526","527","528","529","530","531","532","533","534","535","536","537","538","539","540","541","542","543","544","545","546","547","548","549","550","551","552","553","554","555","556","557","558","559","560","561","562","563","564","565","566","567","568","569","570","571","572","573","574","575","576","577","578","579","580","581","582","583","584","585","586","587","588","589","590","591","592","593","594","595","596","597","598","599","600","601","602","603","604","605","606","607","608","609","610","611","612","613","614","_collection","Array | Matrix","deepMap","../../utils/collection","615","616","string, Object","Array | Matrix, Object","617","any","searchName","searchText","../../utils/customs","../embeddedDocs/embeddedDocs","618","","619","keywords","620","_access","access","accessFactory","isObjectProperty","getObjectProperty","needParenthesis","_compile","argNames","evalObject","evalIndex","_ifNode","_toString","toHTML","_toTex","toTex","./utils/access","621","every","deprecated","evalItems","evalItem","childNode","622","_assign","_operators","assignFactory","parenthesis","exprPrecedence","evalValue","childObject","evalParentObject","parentProp","evalParentIndex","parentIndex","../operators","./utils/assign","623","visible","evalBlocks","results","624","trueExpr","falseExpr","evalCondition","evalTrueExpr","evalFalseExpr","testCondition","conditionPrecedence","truePrecedence","falsePrecedence","625","_latex","escapeLatex","../../utils/latex","../../utils/string","626","_keywords","childArgNames","evalExpr","childArgs","escape","toSymbol","../keywords","627","evalArgs","rawArgs","evalArg0","evalArg","_evalArg","evalArg1","_rawArgs","validateSafeMethod","evalFn","_rawArgs2","nodeToString","expandTemplate","template","latex","regex","RegExp","inputPos","exec","property","ReferenceError","customString","nodeToTex","customTex","latexConverter","customToTex","latexFunctions","defaultTemplate","getIdentifier","628","_toConsumableArray","_arrayLikeToArray","_arrayWithoutHoles","iter","_iterableToArray","minLen","_unsupportedIterableToArray","_nonIterableSpread","arr2","dimensions","dotNotation","step","evalDimensions","needsEnd","evalStart","evalEnd","evalStep","_evalStart","_evalEnd","_evalStep","_childArgNames","evalRange","_evalRange","evalDimension","629","_validateScope","_traverse","_transform","cloneDeep","deepStrictEqual","getContent","630","properties","evalEntries","stringifiedKey","parsedKey","isSafeProperty","631","op","implicit","calculateNecessaryParentheses","associativity","getAssociativity","operandPrecedence","operandIdentifier","rootIdentifier","latexLeftParens","latexParens","_rootIdentifier","lhsIdentifier","rhsIdentifier","lhsPrecedence","assocWithLhs","isAssociativeWith","lhsParens","rhsPrecedence","assocWithRhs","rhsParens","latexRightParens","argPrecedence","assocWithArg","argAssociativity","isSafeMethod","isUnary","parens","assoc","operand","opIsNamed","lhs","rhs","stringifiedArgs","latexOperators","lhsTex","rhsTex","texifiedArgs","632","content","633","stepPrecedence","startPrecedence","endPrecedence","634","conditionals","isRelationalNode","compiled","evalRhs","evalLhs","condFn","_this","_this2","paramStrings","paramPrecedence","operatorMap","635","isValuelessUnit","undef","636","_errorTransform","errorTransform","../../../utils/customs","../../transform/utils/errorTransform","637","638","_node","identifier","nodeA","nodeB","identifierA","identifierB","associativeWith","OperatorNode:or","OperatorNode:xor","OperatorNode:and","OperatorNode:bitOr","OperatorNode:bitXor","OperatorNode:bitAnd","OperatorNode:equal","OperatorNode:unequal","OperatorNode:smaller","OperatorNode:larger","OperatorNode:smallerEq","OperatorNode:largerEq","OperatorNode:leftShift","OperatorNode:rightArithShift","OperatorNode:rightLogShift","OperatorNode:to","OperatorNode:add","OperatorNode:subtract","OperatorNode:multiply","OperatorNode:divide","OperatorNode:dotMultiply","OperatorNode:dotDivide","OperatorNode:mod","OperatorNode:unaryPlus","OperatorNode:unaryMinus","OperatorNode:bitNot","OperatorNode:not","OperatorNode:pow","OperatorNode:dotPow","OperatorNode:factorial","OperatorNode:transpose","639","parseStart","expressions","parseMultiple","extraNodes","elem","TOKENTYPE","NULL","DELIMITER","NUMBER","SYMBOL","UNKNOWN","DELIMITERS",",","(",")","[","]","\"","'",";","+","-","*",".*","/","./",".^","!","|","^|","=",":","?","==","!=","<",">","<=",">=","<<",">>",">>>","NAMED_DELIMITERS","in","CONSTANTS","NUMERIC_CONSTANTS","currentString","currentCharacter","prevCharacter","nextCharacter","isWhitespace","nestingLevel","c3","isDigitDot","isDigit","isDecimalMark","createSyntaxError","isAlpha","getTokenSkipNewline","openParams","closeParams","conditionalLevel","parseAssignment","parseBlock","valid","parseLogicalXor","parseLogicalOr","parseConditional","parseLogicalAnd","parseBitwiseOr","parseBitwiseXor","parseBitwiseAnd","parseRelational","parseShift","operators","cond","parseConversion","parseRange","parseAddSubtract","parseMultiplyDivide","parseImplicitMultiplication","parseRule2","parseUnary","tokenStates","CustomNode","parseAccessors","rows","numberStr","parseEnd","parseParentheses","parseNumber","parseDoubleQuotesStringToken","parseSingleQuotesStringToken","parseObject","parseRow","parseSingleQuotesString","parseDoubleQuotesString","parseSymbol","parseCustomNodes","parseLeftHandOperators","parsePow","cPrev","cNext","isValidLatinOrGreek","isValidMathSymbol","high","low","../utils/collection","640","_apply","...any","dim","../../function/matrix/apply","./utils/errorTransform","641","lastIndex","../../function/matrix/column","642","../../function/matrix/concat","643","_function","_compileInlineExpression","filterTransform","compileInlineExpression","Array, function","Matrix, function","Array, RegExp","filterRegExp","Matrix, RegExp","maxArgumentCount","../../utils/function","./utils/compileInlineExpression","644","forEachTransform","Array | Matrix, function","recurse","645","ii","isSet","646","mapTransform","orig","argsCount","647","../../function/statistics/max","648","../../function/statistics/mean","649","../../function/statistics/min","650","../../function/matrix/range","651","../../function/matrix/row","652","../../function/statistics/std","653","../../function/matrix/subset","654","../../function/statistics/sum","655","subScope","../../../utils/is","656","../../../error/IndexError","657","../../function/statistics/variance","658","_ResultSet","_BigNumber","_Complex","_Fraction","_Range","_Matrix","_DenseMatrix","_equalScalar","_SparseMatrix","_addScalar","_multiplyScalar","_eye","_print","_divideScalar","_ImmutableDenseMatrix","_MatrixIndex","_FibonacciHeap","_Spa","_Unit","_Node","_AccessorNode","_ArrayNode","_AssignmentNode","_BlockNode","_ConditionalNode","_ConstantNode","_FunctionAssignmentNode","_IndexNode","_ObjectNode","_OperatorNode","_ParenthesisNode","_RangeNode","_RelationalNode","_SymbolNode","_FunctionNode","_parse","_Parser","_parser","_Help","_Chain","_chain","_reviver","_replacer","_physicalConstants","_apply2","_column2","_filter2","_forEach2","_map2","_max2","_mean2","_min2","_range2","_row2","_subset2","_concat2","_std2","_sum2","_variance2","./constants","./core/function/typed","./expression/Help","./expression/Parser","./expression/function/compile","./expression/function/eval","./expression/function/evaluate","./expression/function/help","./expression/function/parser","./expression/node/AccessorNode","./expression/node/ArrayNode","./expression/node/AssignmentNode","./expression/node/BlockNode","./expression/node/ConditionalNode","./expression/node/ConstantNode","./expression/node/FunctionAssignmentNode","./expression/node/FunctionNode","./expression/node/IndexNode","./expression/node/Node","./expression/node/ObjectNode","./expression/node/OperatorNode","./expression/node/ParenthesisNode","./expression/node/RangeNode","./expression/node/RelationalNode","./expression/node/SymbolNode","./expression/parse","./expression/transform/apply.transform","./expression/transform/column.transform","./expression/transform/concat.transform","./expression/transform/filter.transform","./expression/transform/forEach.transform","./expression/transform/index.transform","./expression/transform/map.transform","./expression/transform/max.transform","./expression/transform/mean.transform","./expression/transform/min.transform","./expression/transform/range.transform","./expression/transform/row.transform","./expression/transform/std.transform","./expression/transform/subset.transform","./expression/transform/sum.transform","./expression/transform/variance.transform","./function/algebra/decomposition/lup","./function/algebra/decomposition/qr","./function/algebra/decomposition/slu","./function/algebra/solver/lsolve","./function/algebra/solver/lusolve","./function/algebra/solver/usolve","./function/arithmetic/addScalar","./function/arithmetic/divideScalar","./function/arithmetic/multiplyScalar","./function/matrix/apply","./function/matrix/expm","./function/matrix/eye","./function/matrix/sqrtm","./function/relational/equalScalar","./function/string/format","./function/string/print","./function/unit/to","./json/replacer","./json/reviver","./type/bignumber/BigNumber","./type/bignumber/function/bignumber","./type/boolean","./type/chain/Chain","./type/chain/function/chain","./type/complex/Complex","./type/complex/function/complex","./type/fraction/Fraction","./type/fraction/function/fraction","./type/matrix/DenseMatrix","./type/matrix/FibonacciHeap","./type/matrix/ImmutableDenseMatrix","./type/matrix/Matrix","./type/matrix/MatrixIndex","./type/matrix/Range","./type/matrix/Spa","./type/matrix/SparseMatrix","./type/matrix/function","./type/matrix/function/matrix","./type/matrix/function/sparse","./type/number","./type/resultset/ResultSet","./type/string","./type/unit/Unit","./type/unit/function/createUnit","./type/unit/function/splitUnit","./type/unit/function/unit","./type/unit/physicalConstants","659","_denseLUP","_sparseLUP","L","columns","_data","ldata","lsize","udata","usize","pabsv","vjj","absv","_swapRows","vij","pv","_values","ptr","_ptr","lvalues","lindex","lptr","uvalues","uindex","uptr","pvCo","pvOc","spa","k0","vkj","_forEachRow","vik","accumulate","kx","ky","../../../utils/factory","../../../utils/object","660","_denseQR","Q","R","_denseQRimpl","Qdata","Rdata","pivot","sgn","conjSgn","alphaSquared","zero","661","_csSqr","_csLu","csSqr","createCsSqr","csLu","createCsLu","SparseMatrix, number, number","order","threshold","pinv","../../../utils/number","../sparse/csLu","../sparse/csSqr","662","Node, SymbolNode, Object","variable","constNodes","constTag","Node, SymbolNode","string, SymbolNode","string, SymbolNode, Object","string, string","string, string, Object","Node, string","Node, string, Object","deriv","_derivTex","Node, ConstantNode","Node, SymbolNode, ConstantNode","string, string, number","Object, ConstantNode, string","Object, SymbolNode, string","Object, ParenthesisNode, string","Object, FunctionAssignmentNode, string","Object, FunctionNode | OperatorNode, string","isConst","ConstantNode, Object","SymbolNode, Object","ParenthesisNode, Object","FunctionAssignmentNode, Object","FunctionNode, Object","funcArgsCheck","funcDerivative","arg0","negative","chainDerivative","OperatorNode, Object","constantTerms","nonConstantTerms","nonConstantNode","newArgs","argOuter","argInner","_arg2","powMinusOne","valueType","663","_simplifyConstant","_simplifyCore","simplifyConstant","createSimplifyConstant","simplifyCore","createSimplifyCore","string, boolean","detailed","string, Object, boolean","Node, boolean","Node, Object","Node, Object, boolean","sBefore","setRules","oldRules","rulesFirst","rulesSucDiv","firstRules","distrDivRules","sucDivRules","firstRulesAgain","finalRules","rulesRationalize","polyRet","extended","exactFractions","oper","recPoly","tp","retFunc","polynomial","nVars","expandPower","indParent","internal","does","nEsqTopo","nDirTopo","eDistrDiv","redoInic","coefficients","retRationalize","polyToCanonical","cte","fire","maxExpo","varname","recurPol","noPai","noFil","valor","_i2","no","n2","./simplify/simplifyConstant","./simplify/simplifyCore","664","_util","_resolve","resolve","createResolve","_createUtil","createUtil","isCommutative","isAssociative","unflattenr","unflattenl","createMakeNodeFunction","string, Object, Object","string, Array","string, Array, Object","string, Array, Object, Object","Node, Object, Object","Node, Array","Node, Array, Object","Node, Array, Object, Object","ruleSet","makeNode","expandsym","newRule","ruleType","lr","removeParens","_lastsym","expanded","_buildRules","applyRule","SUPPORTED_CONSTANTS","commutative","repl","_ruleMatch","mergeMatch","match1","match2","_exactMatch","combineChildMatches","list1","list2","isSplit","splits","rightArgs","getSplits","splitMatches","matchSet","childMatches","childMatch","uniqueSets","unique","mergeChildMatches","./simplify/resolve","./simplify/util","665","_args","666","_noop","allChildren","fnname","_toNumber","ignore","_toNode","vn","unaryMinusNode","_exactFraction","noBignumber","noFraction","Fraction, Object","BigNumber, Object","number, Object","Complex, Object","foldOp","ignoreandcontinue","foldFraction","operatorFunctions","some","ignoreandcontine","consts","../../../utils/noop","./util","667","node0","node1","a0","a00","a00a1","a01","668","associative","findChildren","curnode","669","_solveValidation","solveValidation","createSolveValidation","SparseMatrix, Array | Matrix","bdata","bj","jvalues","jindex","xj","DenseMatrix, Array | Matrix","_denseForwardSubstitution","Array, Array | Matrix","./utils/solveValidation","670","_csIpvec","SparseMatrix, Array | Matrix, number, number","Object, Array | Matrix","_toMatrix","csIpvec","../sparse/csIpvec","671","_denseBackwardSubstitution","672","msize","datatype","_datatype","asize","arraySize","../../../../utils/array","../../../../utils/is","../../../../utils/string","673","createCsAmd","_csFkeep","_csFlip","_csTdfs","lemax","dense","cm","at","tindex","tptr","_createTargetMatrix","csFkeep","k2","pj","nvi","pk","eln","pn","cindex","cptr","cnz","W","nv","head","elen","degree","hhead","_wclear","_initializeQuotientGraph","nel","csFlip","_initializeDegreeLists","mindeg","elenk","nvk","dk","dext","pk1","pk2","wnvi","p3","p4","nvj","jlast","ok","csTdfs","./csFkeep","./csFlip","./csTdfs","674","createCsCounts","_csLeaf","post","ata","J","p0","maxfirst","prevleaf","colcount","csLeaf","jleaf","./csLeaf","675","csDfs","jnew","_csMarked","csMarked","_csMark","csMark","_csUnflip","csUnflip","done","./csMark","./csMarked","./csUnflip","676","csEtree","inext","aptr","677","avalues","nz","678","679","680","ancestor","sparent","jprev","681","_csSpsolve","csSpsolve","createCsSpsolve","tol","lnz","unz","xabs","ipiv","./csSpsolve","682","683","684","csPermute","adt","cvalues","t0","createSparseMatrix","685","csPost","686","csReach","gptr","gsize","bindex","bptr","_csDfs","./csDfs","687","_csReach","lo","gvalues","gindex","bvalues","./csReach","688","_csPermute","_csPost","_csEtree","_csAmd","_csCounts","csAmd","csCounts","cp","leftmost","tail","nque","pa","_vcount","./csAmd","./csCounts","./csEtree","./csPermute","./csPost","689","690","691","absNumber","../../plain/number","692","_algorithm","_algorithm2","_algorithm3","_algorithm4","_algorithm5","algorithm01","createAlgorithm01","algorithm04","createAlgorithm04","algorithm10","createAlgorithm10","algorithm13","createAlgorithm13","algorithm14","createAlgorithm14","DenseMatrix, DenseMatrix","DenseMatrix, SparseMatrix","SparseMatrix, DenseMatrix","SparseMatrix, SparseMatrix","Array, Array","Array, Matrix","Matrix, Array","DenseMatrix, any","SparseMatrix, any","any, DenseMatrix","any, SparseMatrix","Array, any","any, Array","any, any","any, any, ...any","rest","../../type/matrix/utils/algorithm01","../../type/matrix/utils/algorithm04","../../type/matrix/utils/algorithm10","../../type/matrix/utils/algorithm13","../../type/matrix/utils/algorithm14","693","number, number","addNumber","Complex, Complex","BigNumber, BigNumber","Fraction, Fraction","Unit, Unit","equalBase","fixPrefix","694","cbrtNumber","_cbrtComplex","Complex, boolean","third","negate","_result","allRoots","principal","695","_nearlyEqual","_number2","nearlyEqual","ceilNumber","../../utils/bignumber/nearlyEqual","696","cubeNumber","697","algorithm11","createAlgorithm11","Array | Matrix, Array | Matrix","any, Array | Matrix","../../type/matrix/utils/algorithm11","698","Unit, number | Fraction | BigNumber","_normalize","number | Fraction | BigNumber, Unit","699","_algorithm6","_algorithm7","algorithm02","createAlgorithm02","algorithm03","createAlgorithm03","algorithm07","createAlgorithm07","algorithm12","createAlgorithm12","../../type/matrix/utils/algorithm02","../../type/matrix/utils/algorithm03","../../type/matrix/utils/algorithm07","../../type/matrix/utils/algorithm12","700","algorithm09","createAlgorithm09","../../type/matrix/utils/algorithm09","701","702","expNumber","703","expm1Number","704","705","706","gcdNumber","SparseMatrix, number | BigNumber","DenseMatrix, number | BigNumber","number | BigNumber, SparseMatrix","number | BigNumber, DenseMatrix","Array, number | BigNumber","number | BigNumber, Array","Array | Matrix | number | BigNumber, Array | Matrix | number | BigNumber, ...Array | Matrix | number | BigNumber","707","... number | BigNumber","largest","708","algorithm06","createAlgorithm06","lcmNumber","../../type/matrix/utils/algorithm06","709","logNumber","710","log10Number","711","_log1pComplex","xRe1p","712","log2Number","_log2Complex","newX","713","algorithm05","createAlgorithm05","modNumber","../../type/matrix/utils/algorithm05","714","_validateMatrixDimensions","Matrix, Matrix","xsize","ysize","dt","adata","bdt","mf","_multiplyVectorVector","storage","bsize","alength","bcolumns","createDenseMatrix","_multiplyVectorDenseMatrix","_multiplyVectorMatrix","_multiplyMatrixVector","_multiplyMatrixMatrix","size1","size2","arows","acolumns","brows","ib","vbi","ka0","ka1","ka","ia","ic","jb","kb0","kb1","cij","kb","vbij","715","multiplyNumber","number | Fraction | BigNumber | Complex, Unit","Unit, number | Fraction | BigNumber | Complex","716","number | Complex | BigNumber | boolean, number | BigNumber | string","Array, number | BigNumber | string","Matrix, number | BigNumber | string","ninf","sizeX","POSITIVE_INFINITY","pinf","NEGATIVE_INFINITY","maxc","cj","maxr","fro","717","createNthRootNumber","complexErr","nthRootNumber","_bigNthRoot","Complex, number","Big","718","_nthComplexRoots","_calculateExactResult","aIsNumeric","roots","halfPiFactor","719","Array, number","_powArray","Array, BigNumber","Matrix, number","_powMatrix","Matrix, BigNumber","Unit, number | BigNumber","yFrac","yNum","ex","powNumber","720","createRoundNumber","ownKeys","enumerableOnly","symbols","getOwnPropertySymbols","_objectSpread","getOwnPropertyDescriptors","defineProperties","NO_INT","roundNumberSignatures","Complex, BigNumber","_n","number, BigNumber","Fraction, number","number | Complex | BigNumber, SparseMatrix","number | Complex | BigNumber, DenseMatrix","number | Complex | BigNumber, Array","roundNumber","721","signNumber","722","_sqrtNumber","723","squareNumber","724","checkEqualDimensions","../../error/DimensionError","725","unaryMinusNumber","726","unaryPlusNumber","boolean | string","727","xgcdNumber","lastx","lasty","728","_bitwise","bitAndNumber","bitAndBigNumber","../../utils/bignumber/bitwise","729","bitNotNumber","bitNotBigNumber","730","bitOrNumber","bitOrBigNumber","731","bitXorNumber","732","algorithm08","createAlgorithm08","leftShiftNumber","leftShiftBigNumber","../../type/matrix/utils/algorithm08","733","rightArithShiftNumber","rightArithShiftBigNumber","734","rightLogShiftNumber","735","number | BigNumber","736","737","number | BigNumber, number | BigNumber","738","kFactorial","negativeOne","kChooseI","iPower","739","740","741","742","743","Array, Array, Array","_2d","xCoeff","yCoeff","constant","_distancePointLine2D","Object, Object, Object","lineTwoPtY","lineTwoPtX","lineOnePtY","lineOnePtX","pointX","pointY","_3d","_parametricLine","_distancePointLine3D","_containsOnlyNumbers","_euclideanDistance","Object, Object","xCoeffLine","yCoeffLine","pointZ","x0","y0","z0","pointOneX","pointOneY","pointTwoX","pointTwoY","pointOneZ","pointTwoZ","_isNumber","aI","_pairwise","pointA","pointB","_distancePairwise","_objectToArray","den","diff","vectorSize","744","plane","_4d","y1","z1","y2","z2","x1x","x2x","y1y","y2y","z1z","z2z","py","pz","_intersectLinePlane","Array, Array, Array, Array","p1a","p1b","p2a","p2b","o1","o2","d20o11","d21o10","d20o21","d21o20","_intersect2d","x3","y3","z3","x4","y4","z4","d1343","_intersect3dHelper","d4321","d1321","d4343","d2121","ta","tb","pax","pay","paz","pbx","pby","pbz","Matrix, Matrix, Matrix","Matrix, Matrix, Matrix, Matrix","add1","add2","add3","745","andNumber","746","notNumber","747","orNumber","748","xorNumber","749","Array | Matrix, number | BigNumber, function","mat","tran","_switch","../../error/IndexError","750","validateIndex","rowRange","751","...Array | Matrix | number | BigNumber","prevDim","asMatrix","matrices","concatDim","...string","752","highestDimension","xSize","ySize","product","753","754","decomp","evenCycles","755","Array, string","Array, number, string","Array, BigNumber, string","Matrix, string","Matrix, number, string","Matrix, BigNumber, string","kSuper","kSub","diagonal","_createDiagonalMatrix","dm","vector","_getDiagonal","756","757","checkAndSubmit","getDataType","isSymmetric","psi","e0","Sij","createArray","Vab","getAijBig","_i3","aii","ajj","aij","denom","getThetaBig","Hij","Aki","Akj","csHij","Aii","Ajj","_k3","x1Big","Ski","Skj","_k2","Sij1Big","Ei","_i4","sorting","diagBig","xArr","getAij","_k4","_k","Sij1","Mij","maxMij","maxIJ","S","Ef","Sf","minID","_k5","ans","vectors","758","infNorm","qfac","twoqfac","twoqp1fac","errorEstimate","findParams","rowSum","infinityNorm","Apos","factor","AposToI","alternate","759","760","_filterCallback","761","flat","762","763","getArrayDataType","764","number | BigNumber, string","number | BigNumber, number | BigNumber, string","_identityVector","defaultValue","minimum","765","ABig","rBig","Ac","Bc","Ar","Br","766","767","768","...number | BigNumber | string","Array | Matrix, string","hasBigNumbers","_validate","769","asc","Array | Matrix, number","Array | Matrix, number, string","Array | Matrix, number, function","quickSelect","770","_strRange","_out","_rangeEx","number, number, number","number, number, boolean","includeEnd","_rangeInc","number, number, number, boolean","_bigRangeEx","BigNumber, BigNumber, BigNumber","BigNumber, BigNumber, boolean","_bigRangeInc","BigNumber, BigNumber, BigNumber, boolean","noMatrix","nums","../../utils/noop","771","sizes","772","defaultChar","_resizeString","773","columnRange","774","number | Complex | BigNumber | Unit | boolean | null","775","compareAsc","compareDesc","_arrayIsVector","_matrixIsVector","_comparator","776","_denmanBeavers","_maxIterations","_tolerance","iterations","Y","Z","Yk","777","778","Array, Index","isScalar","Matrix, Index","Object, Index","_getObjectProperty","string, Index","_getSubstring","Array, Index, any","Array, Index, any, any","Matrix, Index, any","Matrix, Index, any, any","string, Index, string","_setSubstring","string, Index, string, string","Object, Index, any","_setObjectProperty","strLen","dimension","779","_denseTrace","780","transposedRow","transposed","_denseTranspose","_sparseTranspose","781","782","combinationsNumber","nMinusk","isPositiveInteger","../../plain/number/combinations","783","_product","nMinusOne","../../utils/product","784","785","gammaNumber","gammaP","real","gammaG","twoPiSqrt","bigFactorial","786","_kldiv","plength","qlength","qnorm","pnorm","787","deepForEach","ai","788","789","_seededRNG","rng","createRng","possibles","Array | Matrix, Array","weights","Array | Matrix, Array | Matrix, number","Array | Matrix, number, Array | Matrix","single","totalWeights","pick","randKey","./util/seededRNG","790","createRandomNumber","_randomMatrix2","_randomMatrix","Array | Matrix, number, number","randomMatrix","./util/randomMatrix","791","_randomIntMatrix","792","_length","793","singletonRandom","_seedRandom","setSeed","seed-random","794","createCompareNumber","boolean, boolean","795","_javascriptNaturalSort","compareBooleans","typeX","typeY","compareMatricesAndArrays","compareArrays","compareComplexNumbers","formatUnits","keysX","keysY","compareObjects","javascript-natural-sort","796","createCompareTextNumber","797","798","createEqualNumber","799","createEqualScalarNumber","complexEquals","../../utils/complex","800","801","createLargerNumber","802","createLargerEqNumber","803","createSmallerNumber","804","createSmallerEqNumber","805","createUnequalNumber","806","b1","b2","807","inb2","identify","generalize","808","809","810","811","number | BigNumber | Fraction | Complex, Array | Matrix","812","bitarray","813","Array | Matrix, boolean","814","815","816","MAX_NUM","THRESH","ysq","xnum","xden","erf1","del","erfc2","SQRPI","erfc3","817","_improveErrorMessage","...","med","improveErrorMessage","./utils/improveErrorMessage","818","Array | Matrix, number | BigNumber","_largest","containsCollections","819","820","mid","middle2","middle","number | BigNumber | Complex | Unit","number | BigNumber | Complex | Unit, number | BigNumber | Complex | Unit","821","_smallest","822","823","824","sorted","_fracPart","validate","_left","_right","_integerPart","_value","integerPart","fracPart","integerPartNumber","number | BigNumber | Unit","probOrN","dataArr","nPlusOne","probArr","intN","_nPlusOne","currProb","825","Array | Matrix, number | BigNumber, string","normalization","826","827","fnName","details","828","_var","_varDim","829","any, Object | function | number","830","string, Object | Array","string, Object | Array, number | Object","original","831","832","acoshNumber","833","acotNumber","834","acothNumber","835","acscNumber","836","acschNumber","837","asecNumber","838","xInv","asechNumber","839","840","asinhNumber","841","842","843","atanhNumber","844","hasBase","BASE_UNITS","ANGLE","845","846","cotNumber","847","cothNumber","848","cscNumber","849","cschNumber","850","secNumber","851","sechNumber","852","853","sinhNumber","854","855","856","Unit, Unit | string","Matrix, any","any, Matrix","857","858","859","860","isNaNNumber","861","isNegativeNumber","862","number | BigNumber | Fraction | boolean","Complex | Unit | string | null | undefined | Node","863","isPositiveNumber","864","865","isZeroNumber","866","validInputTypes","validOutputTypes","outputType","inputType","867","868","869","870","subtractNumber","divideNumber","fixNumber","floorNumber","log1pNumber","sqrtNumber","normNumber","decimals","871","872","873","874","_arithmetic","_logical","_relational","_probability","_trigonometry","_utils","./arithmetic","./bitwise","./combinations","./logical","./probability","./relational","./trigonometry","./utils","875","876","twoN","threeN","fourN","fiveN","877","878","acosNumber","asinNumber","atanNumber","atan2Number","cosNumber","coshNumber","sinNumber","tanNumber","tanhNumber","879","isIntegerNumber","880","_decimal","decimal.js","881","../../../utils/collection","882","bool","lcase","883","createLazyProxy","chainify","excludedNames","884","885","strRe","strIm","fromPolar","complex.js","886","887","fraction.js","888","889","preprocess","_fit","newSize","_getSubmatrix","dims","_get","submatrix","sSize","iSize","outer","unsqueeze","_setSubmatrix","dataIndex","subIndex","_set","indexI","me","swapRows","vi","890","oneOverLogPhi","_minimum","_cut","isFibonacciHeap","insert","extractMinimum","numberOfChildren","tempRight","numRoots","_linkNodes","_findMinimumNode","_cascadingCut","_decreaseKey","891","isImmutableDenseMatrix","892","skipZeros","893","ranges","_dimensions","_isScalar","_createImmutableMatrix","strings","894","hasStart","hasEnd","hasStep","895","_heap","isSpa","heap","nodei","nodej","896","_createFromArray","_createFromMatrix","_getValueIndex","_insert","ins","_toArray","kk","mvalues","mindex","mptr","_getsubset","_setsubset","_remove","r1","_j","minRow","maxRow","minColumn","maxColumn","invoke","_i5","_i7","vx","vy","897","...number | string | BigNumber | Range | Array | Matrix","898","Array | Matrix, string, string","899","900","denseMatrix","sparseMatrix","cf","cdata","../../../error/DimensionError","901","902","903","xa","xb","wa","wb","904","vc","wai","wbi","905","scatter","906","_scatter","va","vb","907","908","909","910","911","912","csize","_iterate","level","av","bv","cv","913","914","Unit, string | Unit","valuelessUnit","915","916","../utils/number","917","units","UNIT_NONE","prefix","PREFIXES","power","BASE_DIMENSIONS","skipAutomaticSimplification","skipWhitespace","revert","oldIndex","tentativeNumber","tentativeIndex","parseCharacter","toFind","_findUnit","UNITS","prefixes","endsWith","prefixLen","prefixName","_prefix","getNumericIfUnitless","powerMultiplierCurrent","expectingUnit","valueStr","powerMultiplierStack","powerMultiplierStackProduct","uStr","oldC","unitName","parseUnit","baseDim","UNIT_SYSTEMS","auto","allowNoUnits","_isDerived","unitValue","unitOffset","unitPower","unitPrefixValue","_getNumberConverter","_denormalize","prefixValue","valThis","valOther","inverted","toNumeric","matchingBase","matchingUnit","proposedUnitList","currentUnitSystem","missingBaseDim","toSI","si","strNum","strDen","nNum","nDen","simp","isImaginary","VAR","VA","_bestPrefix","unitStr","absValue","absUnitValue","bestPrefix","bestDiff","scientific","SHORT","da","xNumeric","xRounded","testSum","G","LONG","deca","hecto","kilo","mega","giga","tera","peta","exa","zetta","yotta","deci","centi","milli","micro","nano","pico","femto","atto","zepto","yocto","SQUARED","CUBIC","BINARY_SHORT_SI","BINARY_SHORT_IEC","Ki","Mi","Gi","Ti","Pi","Zi","Yi","BINARY_LONG_SI","BINARY_LONG_IEC","kibi","mebi","gibi","tebi","pebi","exi","zebi","yobi","BTU","MM","SHORTLONG","BINARY_SHORT","BINARY_LONG","MASS","LENGTH","TIME","CURRENT","TEMPERATURE","LUMINOUS_INTENSITY","AMOUNT_OF_SUBSTANCE","FORCE","SURFACE","VOLUME","ENERGY","POWER","PRESSURE","ELECTRIC_CHARGE","ELECTRIC_CAPACITANCE","ELECTRIC_POTENTIAL","ELECTRIC_RESISTANCE","ELECTRIC_INDUCTANCE","ELECTRIC_CONDUCTANCE","MAGNETIC_FLUX","MAGNETIC_FLUX_DENSITY","FREQUENCY","BIT","meter","inch","foot","yard","mile","link","rod","angstrom","ft","mi","li","mil","sqin","sqft","sqyd","sqmi","sqrd","sqch","sqmil","acre","hectare","m3","litre","cuin","cuft","cuyd","teaspoon","tablespoon","drop","gtt","minim","fluiddram","fluidounce","gill","cup","pint","quart","gallon","beerbarrel","oilbarrel","hogshead","fldr","floz","gi","qt","gal","bbl","obl","gram","ton","tonne","grain","dram","ounce","poundmass","hundredweight","stick","stone","gr","dr","oz","lbm","cwt","minute","hour","day","week","month","year","decade","century","millennium","hertz","reciprocal","Hz","rad","radian","deg","grad","gradian","cycle","arcsec","arcmin","ampere","K","degC","degF","degR","kelvin","celsius","fahrenheit","rankine","mol","mole","cd","candela","newton","dyn","dyne","lbf","poundforce","kip","joule","erg","Wh","eV","electronvolt","watt","hp","Pa","atm","bar","torr","mmHg","mmH2O","cmH2O","farad","F","volt","V","ohm","henry","siemens","weber","Wb","tesla","ALIASES","meters","inches","feet","yards","miles","rods","chains","angstroms","litres","liter","liters","teaspoons","tablespoons","minims","fluiddrams","fluidounces","gills","cups","pints","quarts","gallons","beerbarrels","oilbarrels","hogsheads","gtts","grams","tons","tonnes","grains","drams","ounces","poundmasses","hundredweights","sticks","lbs","kips","acres","hectares","sqfeet","sqyard","sqmile","sqmiles","mmhg","mmh2o","cmh2o","seconds","secs","minutes","mins","hours","hr","hrs","days","weeks","months","years","decades","centuries","millennia","radians","degrees","gradians","cycles","arcsecond","arcseconds","arcminute","arcminutes","BTUs","watts","joules","amperes","coulombs","volts","ohms","farads","webers","teslas","electronvolts","moles","byte","calculateAngleValues","cgs","us","_key2","setUnitSystem","getUnitSystem","typeConverters","_name2","_unit2","alias","_key3","_key4","deleteUnit","aliases","lastUnit","_key5","createUnitSingle","_c","isValidAlpha","assertUnitNameIsValid","definition","defUnit","newUnit","_newBaseUnit","anyMatch","newBaseUnit","_i6","_i8","aliasName","_alias","_key6","../../utils/bignumber/constants","918","string, Unit | string | Object, Object","def","string, Unit | string | Object","919","Unit, Array","920","number | BigNumber | Fraction | Complex, string","921","createJosephson","unitFactory","numberFactory","922","dimNext","_defaultValue","oldLen","newLen","newArray","flatArray","totalSize","sizeIndex","tmpArray2","tmpArray","_unsqueeze","regexp","separator","itemType","./is","./number","./string","923","prevPrec","bitwise","xBits","yBits","minBits","maxBits","minSign","xSign","ySign","decCoefficientToBinaryString","shortLen","longLen","expFuncVal","outVal","twoPower","two","negOne","924","memoize","hasher","../function","925","notation","toEngineering","exponential","lower","upper","fixedOptions","lowerExp","upperExp","rounded","newExp","valueWithoutExp","../object","926","927","_reduce","./array","928","929","isPlainObject","method","safeNativeProperties","Function","safeNativeMethods","toLocaleString","./object","930","_tinyEmitter","off","once","tiny-emitter","931","assertAndCreate","deps","pickShallow","assertDependencies","sortFactories","isOptionalDependency","factoriesByName","addFactory","containsDependency","missingDependencies","932","memoizeCompare","isEqual","cached","933","934","latexUnits","latexSymbols","_escapeLatex","Alpha","Beta","Gamma","Delta","delta","Epsilon","varepsilon","Zeta","zeta","Eta","eta","Theta","vartheta","Iota","iota","Kappa","kappa","varkappa","Lambda","Mu","mu","Nu","nu","Xi","Omicron","omicron","varpi","Rho","rho","varrho","Sigma","sigma","varsigma","Tau","Upsilon","upsilon","Phi","varphi","Chi","chi","Psi","Omega","omega","Inf","infinity","oo","lim","0","escape-latex","935","messages","_console","936","noIndex","noSubset","937","splitNumber","roundDigits","DBL_EPSILON","missingZeros","expDiff","decimalIdx","decimalVal","splitValue","pp","938","nestedObject","flattenedObject","_deepFlatten","canDefineProperty","valueResolver","_uninitialized","isPath","939","940","half","941","escaped","_formatter","looksLikeFraction","formatArray","./bignumber/formatter","942","943","../../lib/entry/mainAny","944","pool","GLOBAL","startdenom","significance","overflow","oldRandom","ARC4","keylen","width","mixkey","smear","stringseed","tostring","arc4","typ","entropy","Uint8Array","navigator","plugins","screen","autoseed","resetGlobal","945","evtArr","evts","liveEvents","TinyEmitter","946","notOk","_types","anyType","_ignore","_conversions","findTypeByName","typeName","findInArray","hint","findTypeIndex","findTypeName","stringifyParams","typeNames","getTypeName","restParam","parseParam","notEmpty","notIgnore","matchingConversions","conversion","filterConversions","exactTypes","typeIndex","conversionIndex","convertibleTypes","hasRestParam","hasConversions","compileTest","test0","test1","tests","compileTests","lastTest","testRestParam","getParamAtIndex","getExpectedTypeNames","excludeConversions","isExactType","mergeExpectedParams","flatMap","getLowestTypeIndex","getLowestConversionIndex","compareSignatures","signature1","signature2","param1","param2","compareParams","compileArgConversion","conversion0","conversion1","splitParams","ignoreConversionTypes","_splitParams","filteredTypes","typeGroup","hasConflictingParams","array1","array2","hasOverlap","len1","len2","restParam1","restParam2","createTypedFunction","signaturesMap","parsedSignatures","parsedParam","isInvalidParam","parseSignature","notNull","parsedSignature","conflictingSignature","ok0","ok1","ok2","ok3","ok4","ok5","allOk","test00","test10","test20","test30","test40","test50","test01","test11","test21","test31","test41","test51","fns","compiledConversions","fnConvert","fnPreprocess","compileArgsPreprocessing","fn0","fn1","fn2","fn3","fn4","fn5","len0","len3","len4","len5","iStart","iEnd","generic","matchingSignatures","nextMatchingDefs","actualType","lengths","maxLength","expectedLength","createSignaturesMap","getName","extractSignatures","validateUnique","_signature","_fn","...Function","string, ...Function","addType","beforeObjectTest","addConversion"],"mappings":"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CG,OAAU,IAAI7H,OAAO8H,kBAAkBF,OACvCG,OAAS,IAAI5H,WAAWA,WAAW0H,QACvCE,OAAOC,iBAAkB,EAEzBD,OAAOE,uBACP,IAAIlI,OAAS,GACTmI,cAAgB,IAAIpI,cAAcC,QACtCgI,OAAOI,iBAAiBD,eAExB,IAAIE,KAAOL,OAAOM,WACdC,KAAO,IAAItH,eAAeC,QAASC,mBACvClB,OAAOoI,KAAKG,gBAAgBC,QAAQC,KAAKH,KAAMF,MAC5CX,eACFA,cAAc1H,UA6gBd,CAAC2I,cAAc,EAAEC,iBAAiB,EAAEC,eAAe,EAAEC,eAAe,KAAKC,EAAE,CAAC,SAASzJ,QAAQf,OAAOD,SAGtG,IAAI2B,OAASX,QAAQ,gBAGjB0J,cAAgB,CAAC,uDACjB,oDACA,mDACA,mDACA,uDACA,mDACA,qDACA,mDACA,qDACA,oDACA,0DACA,uDACA,mDACA,mDACA,qDACA,yDACA,mDACA,uCACA,qDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,gDACA,iDACA,oDACA,uDACA,oDACA,mDACA,kDACA,wDACA,sDACA,oDACA,2DACA,iDACA,mDACA,oDACA,6DACA,oDACA,mDACA,wDACA,mDACA,+CACA,iDACA,mDACA,mDACA,mDACA,mDACA,iDACA,iDACA,iDACA,iDACA,kDACA,iDACA,iDACA,iDACA,iDACA,kDACA,iDACA,iDACA,iDACA,iDACA,kDACA,mDACA,iDACA,mDACA,mDACA,gDACA,iDACA,iDACA,iDACA,iDACA,iDACA,kDACA,iDACA,iDACA,iDACA,iDACA,kDACA,qDACA,oDACA,mDACA,qDACA,kDACA,oDACA,kDACA,qDACA,kDACA,oDACA,sDACA,kDACA,oDACA,qDACA,iDACA,iDACA,iDACA,iDACA,gDACA,kDACA,gDACA,gDACA,gDACA,iDACA,gDACA,iDACA,kDACA,iDACA,iDACA,iDACA,iDACA,iDACA,kDACA,iDACA,iDACA,iDACA,iDACA,kDACA,iDACA,iDACA,iDACA,iDACA,iDACA,kDACA,iDACA,iDACA,kDA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SrF,OAI/CzB,aAAaC,UAAU8G,YAAc,SAAStF,OAK9CzB,aAAaC,UAAU+G,SAAW,SAASvF,OAI3CzB,aAAaC,UAAUgH,QAAU,SAASxF,OAK1CzB,aAAaC,UAAUkN,UAAY,SAAS1L,OAI5CzB,aAAaC,UAAUmN,SAAW,SAAS3L,OAK3CzB,aAAaC,UAAUiH,aAAe,SAASzF,OAI/CzB,aAAaC,UAAUkH,YAAc,SAAS1F,OAK9CxD,QAAQ+B,aAAeA,cACrB,CAACyI,eAAe,KAAK4E,EAAE,CAAC,SAASpO,QAAQf,OAAOD,SAGlD,IAAI2B,OAASX,QAAQ,gBACjBe,aAAef,QAAQ,kBAAkBe,aAGzC2I,cAAgB,CAAC,uDACjB,oDACA,qDACA,qDACA,uDACA,qDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,kDACA,mDACA,mDACA,mDACA,kDACA,uDACA,yDACA,uDACA,uDACA,uDACA,2CACA,uCACA,uCACA,uCACA,uCACA,6CACA,uDACA,mDACA,iDACA,mDACA,iDACA,mDACA,iDACA,iDACA,iDACA,mDACA,iDACA,qDACA,mDACA,mDACA,mDACA,uDACA,mDACA,qDACA,mDACA,kDACA,kDACA,mDACA,oDACA,oDACA,qDACA,mDACA,mDACA,mDACA,qDACA,qDACA,oDACA,iDACA,oDACA,qDACA,qDACA,mDACA,kDACA,mDACA,kDACA,qDACA,qDACA,kDACA,qDACA,mDACA,oDACA,oDACA,uDACA,mDACA,mDACA,qDACA,qDACA,kDACA,gDACA,mDACA,kDACA,iDACA,mDACA,qDACA,kDACA,kDACA,oDACA,kDACA,kDACA,oDACA,mDACA,oDACA,iDACA,iDACA,iDACA,iDACA,gDACA,+CACA,iDACA,mDACA,mDACA,mDACA,iDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,gDACA,iDACA,gDACA,mDACA,iDACA,gDACA,mDACA,iDACA,mDACA,mDACA,mDACA,mDACA,iDACA,mDACA,gDACA,mDACA,mDACA,mDA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ACE69C,EAAG,MACH79C,EAAG,OAEL,CACE69C,EAAG,YACH79C,EAAG,WAEL,CACE69C,EAAG,WACH79C,EAAG,YAEL,CACE69C,EAAG,YACH79C,EAAG,WAEL,CACE69C,EAAG,WACH79C,EAAG,YAEL,CACE69C,EAAG,aACH79C,EAAG,gBAEL,CACE69C,EAAG,YACH79C,EAAG,WAEL,CACE69C,EAAG,WACH79C,EAAG,aAgBDy2M,YAAc,CAAC,CACjB54J,EAAG,eACH79C,EAAG,gBAEL,CACE69C,EAAG,aACH79C,EAAG,iBAEDs2M,SAAW,GA8Ff,OA1FAA,SAASI,WAAaH,SAASlqL,OAAOmqL,WAAYC,aAElDH,SAASK,cA3BW,CAAC,CACnB94J,EAAG,kBACH79C,EAAG,6BAEL,CACE69C,EAAG,eACH79C,EAAG,qBAEL,CACE69C,EAAG,eACH79C,EAAG,sBAmBLs2M,SAASM,YAAcH,YAEvBH,SAASO,gBAAkBN,SAASlqL,OAAOmqL,YAK3CF,SAASQ,WAAa,CAACjB,aACvB,CACEh4J,EAAG,OACH79C,EAAG,QAEL,CACE69C,EAAG,MACH79C,EAAG,OAEL21M,iBACA,CACE93J,EAAG,UACH79C,EAAG,aAEL,CACE69C,EAAG,SACH79C,EAAG,YAEL,CACE69C,EAAG,aACH79C,EAAG,cAEL,CACE69C,EAAG,YACH79C,EAAG,aAEL,CACE69C,EAAG,UACH79C,EAAG,aAEL,CACE69C,EAAG,SACH79C,EAAG,YAEL,CACE69C,EAAG,UACH79C,EAAG,aAEL,CACE69C,EAAG,SACH79C,EAAG,YAEL,CACE69C,EAAG,UACH79C,EAAG,aAEL,CACE69C,EAAG,SACH79C,EAAG,YAEL,CACE69C,EAAG,aACH79C,EAAG,aAEL,CACE69C,EAAG,YACH79C,EAAG,aAEL,CACE69C,EAAG,cACH79C,EAAG,YAEL,CACE69C,EAAG,SACH79C,EAAG,QAEL,CACE69C,EAAG,SACH79C,EAAG,SAEL,CACE69C,EAAG,MACH79C,EAAG,OAEL,CACE69C,EAAG,aACH79C,EAAG,iBAGEs2M,SAzaUS,GAE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AAG,iBAEL,CACE69C,EAAG,MACH79C,EAAG,OACF,CACD69C,EAAG,WACH79C,EAAG,YACF,CACD69C,EAAG,cACH79C,EAAG,aAEL,CACE69C,EAAG,MACH79C,EAAG,OACF,CACD69C,EAAG,OACH79C,EAAG,KACF,CACD69C,EAAG,aACH79C,EAAG,aACF,CACD69C,EAAG,gBACH79C,EAAG,cAEL,CACE69C,EAAG,sBACH79C,EAAG,0BACF21M,iBAAkB,CACnB93J,EAAG,UACH79C,EAAG,WAGL,CACE69C,EAAG,MACH79C,EAAG,MACHwgD,QAAS,CACP7iC,IAAK,CACHs9L,aAAa,KAGhB,CACDp9J,EAAG,MACH79C,EAAG,MACHwgD,QAAS,CACP5iC,SAAU,CACRq9L,aAAa,KAKnB,CACEp9J,EAAG,QACH79C,EAAG,QAEL,CACE69C,EAAG,YACH79C,EAAG,QAEL,CACE69C,EAAG,WACH79C,EAAG,WACF,CACD69C,EAAG,QACH79C,EAAG,QACF,CACD69C,EAAG,YACH79C,EAAG,aAEL,CACE69C,EAAG,YACH79C,EAAG,WAIL,CACE69C,EAAG,MACH79C,EAAG,KAEL,CACE69C,EAAG,aACH79C,EAAG,eA4FL,IAAI46M,SAAW,EAaf,IAAIG,UAAY7lH,MAAM,YAAa,CACjCihH,eAAgB,SAAoB72L,KAAM6U,MAGxC,IAAIve,IAAM0J,KAIV,GAAI1J,eAAeyzI,cAAgBzzI,eAAeszI,cAChD,GAAItzI,IAAIzS,KACN,IAAK,IAAI9C,EAAI,EAAGA,EAAIuV,IAAIzS,KAAKrC,OAAQT,IACnCuV,IAAIzS,KAAK9C,GAAK06M,UAAUnlM,IAAIzS,KAAK9C,GAAI8zB,WAGhCve,eAAe0zI,iBACpB1zI,IAAIqhL,UACNrhL,IAAIqhL,QAAU8jB,UAAUnlM,IAAIqhL,QAAS9iK,OAKzC,IAeMygK,SAfFsmB,KAAO/mL,KAAKn0B,EAEZujE,QAAU43I,WAAWhnL,KAAK0pB,EAAGjoC,KAAK,GA+BtC,OA3BK2tD,SAAWpvC,KAAK0mL,WACnBK,KAAO/mL,KAAK0mL,SAAS76M,EACrBujE,QAA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"} \ No newline at end of file diff --git a/package.json b/package.json index 3e5816e..05f5852 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "quantum-circuit", - "version": "0.9.198", + "version": "0.9.199", "description": "Quantum Circuit Simulator", "main": "lib/quantum-circuit.js", "unpkg": "dist/quantum-circuit.min.js",